intelicoreact 2.0.8 → 2.0.10

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 (101) hide show
  1. package/dist/Atomic/FormElements/Dropdown/components/DropdownLoader.d.ts +4 -0
  2. package/dist/Atomic/FormElements/FormattedRawSSN/FormattedRawSSN_old.d.ts +11 -0
  3. package/dist/Atomic/FormElements/NumericInput/NumericInput.d.ts +36 -0
  4. package/dist/Atomic/FormElements/RangeCalendar/RangeCalendar.d.ts +2 -0
  5. package/dist/Atomic/FormElements/RangeSlider/RangeSlider.d.ts +19 -0
  6. package/dist/Atomic/FormElements/SwitcherTagsDropdown/partial/States.d.ts +5 -0
  7. package/dist/Atomic/FormElements/VariantsListRadio/VariantsListRadio.d.ts +17 -0
  8. package/dist/Atomic/FormElements/VariantsListRadio/partials/VariantsListRadioItem.d.ts +12 -0
  9. package/dist/Atomic/FormElements/WidgetPseudoTable/WidgetPseudoTable.d.ts +2 -0
  10. package/dist/Atomic/FormElements/WidgetPseudoTable/partial/constructor.d.ts +23 -0
  11. package/dist/Atomic/FormElements/WidgetWithSwitchableRows/WidgetWithSwitchableRows.d.ts +2 -0
  12. package/dist/Atomic/FormElements/WidgetWithSwitchableRows/partial/constructor.d.ts +38 -0
  13. package/dist/Atomic/UI/AccordionTable/AccordionTable.d.ts +10 -0
  14. package/dist/Atomic/UI/AccordionText/AccordionText.d.ts +8 -0
  15. package/dist/Atomic/UI/Chart/partial/Chart.constants.d.ts +78 -0
  16. package/dist/Atomic/UI/Chart/partial/datasetSetters.d.ts +13 -0
  17. package/dist/Atomic/UI/Chart/partial/optionsConstructor.d.ts +145 -0
  18. package/dist/Atomic/UI/Chart/partial/optionsSetters.d.ts +4 -0
  19. package/dist/Atomic/UI/CircleProgressBar/CircleProgressBar.d.ts +14 -0
  20. package/dist/Atomic/UI/ExampleChartIntegration/ExampleChartIntegration.d.ts +2 -0
  21. package/dist/Atomic/UI/ExampleChartIntegration/partial/utils.d.ts +4 -0
  22. package/dist/Atomic/UI/MonoAccordion/MonoAccordion._test.d.ts +1 -0
  23. package/dist/Atomic/UI/MonoAccordion/MonoAccordion.d.ts +12 -0
  24. package/dist/Atomic/UI/PieChart/PieChart.d.ts +8 -0
  25. package/dist/Atomic/UI/Table/Partials/TdCell.d.ts +13 -0
  26. package/dist/Atomic/UI/Table/Partials/TdHeader.d.ts +5 -0
  27. package/dist/Atomic/UI/Table/Partials/TdRow.d.ts +17 -0
  28. package/dist/Atomic/UI/Table/Partials/TdTitle.d.ts +5 -0
  29. package/dist/Atomic/UI/Table/Table.d.ts +9 -0
  30. package/dist/Atomic/UI/Table/TdTypes/TdActions.d.ts +6 -0
  31. package/dist/Atomic/UI/Table/TdTypes/TdPriority.d.ts +6 -0
  32. package/dist/Atomic/UI/Table/TdTypes/TdRange.d.ts +4 -0
  33. package/dist/Atomic/UI/Table/TdTypes/TdWeight.d.ts +7 -0
  34. package/dist/Atomic/UI/WizardStepper/constructor.d.ts +51 -0
  35. package/dist/Classes/AbortableFetch.d.ts +43 -0
  36. package/dist/Classes/AnimatedHandler.d.ts +4 -0
  37. package/dist/Classes/RESTAPI/index.d.ts +31 -0
  38. package/dist/Classes/RESTAPI/partials/AbortableFetch.d.ts +48 -0
  39. package/dist/Classes/RESTAPI/partials/ApiBase.d.ts +21 -0
  40. package/dist/Classes/RESTAPI/partials/ApiRequestCreators.d.ts +58 -0
  41. package/dist/Classes/RESTAPI/partials/ApiUtils.d.ts +63 -0
  42. package/dist/Classes/RESTAPI/partials/CredentialsProcessing.d.ts +79 -0
  43. package/dist/Classes/RESTAPI/partials/Utils.d.ts +20 -0
  44. package/dist/Classes/RESTAPI/partials/_utils.d.ts +54 -0
  45. package/dist/Classes/RESTAPI/partials/sse.d.ts +27 -0
  46. package/dist/Classes/RESTAPI/partials/types.d.ts +159 -0
  47. package/dist/Constants/index.constants.d.ts +20 -0
  48. package/dist/Functions/Portal.d.ts +6 -0
  49. package/dist/Functions/customEventListener.d.ts +27 -0
  50. package/dist/Functions/dateTime.d.ts +95 -0
  51. package/dist/Functions/fieldValueFormatters.d.ts +19 -0
  52. package/dist/Functions/hooks/useFormFieldsChangesManager.d.ts +15 -0
  53. package/dist/Functions/locale/createTranslator.d.ts +3 -0
  54. package/dist/Functions/operations.d.ts +1 -0
  55. package/dist/Functions/presets/inputMaskPresets.d.ts +136 -0
  56. package/dist/Functions/presets/inputPresets.d.ts +16 -0
  57. package/dist/Functions/presets/mobileKeyboardTypesPresets.d.ts +17 -0
  58. package/dist/Functions/schemas.d.ts +3 -0
  59. package/dist/Functions/sdk/runtime-sdk/client.d.ts +1 -1
  60. package/dist/Functions/useBodyScrollLock.d.ts +2 -0
  61. package/dist/Functions/useClickOutside.d.ts +1 -0
  62. package/dist/Functions/useDebounce.d.ts +4 -0
  63. package/dist/Functions/useFieldFocus.d.ts +7 -0
  64. package/dist/Functions/useFormTools/form-drivers/ArrayWithObjects.d.ts +15 -0
  65. package/dist/Functions/useFormTools/form-drivers/ObjectWithIterableObjects.d.ts +12 -0
  66. package/dist/Functions/useFormTools/form-drivers/ObjectWithNamedKeyObjects.d.ts +15 -0
  67. package/dist/Functions/useFormTools/functions/General.d.ts +15 -0
  68. package/dist/Functions/useFormTools/functions/RenderFields.d.ts +7 -0
  69. package/dist/Functions/useFormTools/functions/usePrevious.d.ts +2 -0
  70. package/dist/Functions/useFormTools/index.d.ts +86 -0
  71. package/dist/Functions/useInputHighlightError.d.ts +12 -0
  72. package/dist/Functions/useLocalStorage.d.ts +2 -0
  73. package/dist/Functions/useLocationParams.d.ts +1 -0
  74. package/dist/Functions/useMediaQuery.d.ts +2 -0
  75. package/dist/Functions/useMetaInfo.d.ts +8 -0
  76. package/dist/Functions/useMouseUpOutside.d.ts +1 -0
  77. package/dist/Functions/useOnlineStatus.d.ts +2 -0
  78. package/dist/Functions/usePasswordChecker.d.ts +7 -0
  79. package/dist/Functions/usePrevious.d.ts +2 -0
  80. package/dist/Functions/useResize.d.ts +3 -0
  81. package/dist/Functions/useScrollTo.d.ts +2 -0
  82. package/dist/Functions/useToggle.d.ts +7 -0
  83. package/dist/Functions/utils.d.ts +40 -0
  84. package/dist/Langs.d.ts +179 -0
  85. package/dist/Molecular/FormWithDependOn/FormWithDependOn.d.ts +3 -0
  86. package/dist/Molecular/FormWithDependOn/FormWithDependOn.interface.d.ts +2 -2
  87. package/dist/Molecular/FormWithDependOn/partials/_utils.d.ts +8 -0
  88. package/dist/charts.cjs.map +1 -1
  89. package/dist/classes.cjs +629 -237
  90. package/dist/classes.cjs.map +4 -4
  91. package/dist/classes.js +629 -237
  92. package/dist/classes.js.map +4 -4
  93. package/dist/index.cjs +627 -235
  94. package/dist/index.cjs.map +4 -4
  95. package/dist/index.js +627 -235
  96. package/dist/index.js.map +4 -4
  97. package/dist/sdk.cjs.map +1 -1
  98. package/dist/sdk.d.ts +1 -1
  99. package/dist/sdk.js.map +1 -1
  100. package/package.json +5 -3
  101. package/styles.css +1 -0
@@ -0,0 +1,179 @@
1
+ export default Langs;
2
+ declare namespace Langs {
3
+ namespace en {
4
+ let auth: {};
5
+ let settings: {};
6
+ namespace labels {
7
+ let industries: string;
8
+ let includedLenders: string;
9
+ let admin: string;
10
+ let user: string;
11
+ let help: string;
12
+ let description: string;
13
+ let value: string;
14
+ let paramName: string;
15
+ let active: string;
16
+ let pause: string;
17
+ let error: string;
18
+ let sold: string;
19
+ let processing: string;
20
+ let home: string;
21
+ let goods: string;
22
+ let improvement: string;
23
+ let jewelry: string;
24
+ let firstName: string;
25
+ let lastName: string;
26
+ let dateOfBirth: string;
27
+ let militaryStatus: string;
28
+ let ssn: string;
29
+ let lengthAtAddress: string;
30
+ let rentOrOwn: string;
31
+ let zip: string;
32
+ let city: string;
33
+ let state: string;
34
+ let address: string;
35
+ let email: string;
36
+ let homePhone: string;
37
+ let cellPhone: string;
38
+ let contactTime: string;
39
+ let dlState: string;
40
+ let dlNumber: string;
41
+ let ownCar: string;
42
+ let tcpaOptin: string;
43
+ let incomeSource: string;
44
+ let timeEmployed: string;
45
+ let jobTitle: string;
46
+ let currentEmployer: string;
47
+ let employersPhone: string;
48
+ let netMonthlyIncome: string;
49
+ let howOftenIsPaid: string;
50
+ let nextPayDate: string;
51
+ let secondPayDate: string;
52
+ let loanAmount: string;
53
+ let ip: string;
54
+ let storyName: string;
55
+ let channelName: string;
56
+ let employmentInfo: string;
57
+ let personalDetails: string;
58
+ let offer: string;
59
+ let offers: string;
60
+ let status: string;
61
+ let name: string;
62
+ let from: string;
63
+ let to: string;
64
+ let periodMonths: string;
65
+ let loansSent: string;
66
+ let approved: string;
67
+ let rejected: string;
68
+ let loanAmountApproved: string;
69
+ let loanAmountRejected: string;
70
+ let approveRate: string;
71
+ let actions: string;
72
+ let locations: string;
73
+ let score: string;
74
+ let priority: string;
75
+ let lender: string;
76
+ let weight: string;
77
+ let selectLender: string;
78
+ }
79
+ let singulars: {};
80
+ namespace titles {
81
+ export let pingTree: string;
82
+ export let edit: string;
83
+ export let create: string;
84
+ export let add: string;
85
+ export let consumerInfo: string;
86
+ let personalDetails_1: string;
87
+ export { personalDetails_1 as personalDetails };
88
+ let employmentInfo_1: string;
89
+ export { employmentInfo_1 as employmentInfo };
90
+ export let tools: string;
91
+ export let lenders: string;
92
+ let settings_1: string;
93
+ export { settings_1 as settings };
94
+ export let dashboard: string;
95
+ export let consumers: string;
96
+ export let ticketDesk: string;
97
+ export let accounting: string;
98
+ export let users: string;
99
+ export let merchants: string;
100
+ export let lenderPingTree: string;
101
+ export let reports: string;
102
+ export let leads: string;
103
+ export let location: string;
104
+ export let mainMenu: string;
105
+ export let partners: string;
106
+ export let other: string;
107
+ export let homeGoodsAndInteriorDesign: string;
108
+ }
109
+ namespace placeholders {
110
+ export let typeName: string;
111
+ export let params: string;
112
+ let value_1: string;
113
+ export { value_1 as value };
114
+ let description_1: string;
115
+ export { description_1 as description };
116
+ }
117
+ namespace hints {
118
+ let landerNotIncluded: string;
119
+ let noMerchants: string;
120
+ }
121
+ namespace buttons {
122
+ let create_1: string;
123
+ export { create_1 as create };
124
+ let edit_1: string;
125
+ export { edit_1 as edit };
126
+ let add_1: string;
127
+ export { add_1 as add };
128
+ export let close: string;
129
+ export let apply: string;
130
+ let pingTree_1: string;
131
+ export { pingTree_1 as pingTree };
132
+ export let addRow: string;
133
+ let consumerInfo_1: string;
134
+ export { consumerInfo_1 as consumerInfo };
135
+ export let deletePingTree: string;
136
+ export let cancel: string;
137
+ }
138
+ let radioButtons: {};
139
+ namespace weekDays {
140
+ let su: string;
141
+ let mo: string;
142
+ let tu: string;
143
+ let we: string;
144
+ let th: string;
145
+ let fr: string;
146
+ let sa: string;
147
+ }
148
+ namespace alerts {
149
+ let lendersWillBeRemoved: string;
150
+ }
151
+ namespace checkboxes {
152
+ export let homeGoods: string;
153
+ export let travel: string;
154
+ export let energyImprovement: string;
155
+ export let jewelryIncluded: string;
156
+ let jewelry_1: string;
157
+ export { jewelry_1 as jewelry };
158
+ export let autoRepair: string;
159
+ export let cosmetics: string;
160
+ export let health: string;
161
+ }
162
+ let errors: {};
163
+ let texts: {};
164
+ namespace tabs {
165
+ export let general: string;
166
+ export let payments: string;
167
+ export let filters: string;
168
+ let offers_1: string;
169
+ export { offers_1 as offers };
170
+ let merchants_1: string;
171
+ export { merchants_1 as merchants };
172
+ export let integration: string;
173
+ export let customDetails: string;
174
+ export let customerDetails: string;
175
+ export let postsLog: string;
176
+ }
177
+ let toasts: {};
178
+ }
179
+ }
@@ -0,0 +1,3 @@
1
+ export default FormWithDependOn;
2
+ declare const FormWithDependOn: React.ForwardRefExoticComponent<React.RefAttributes<any>>;
3
+ import React from "react";
@@ -43,10 +43,10 @@ export type FormWithDependOnAction<TField extends IFormWithDependOnField = IForm
43
43
  form: TField[];
44
44
  additional: Record<string, unknown>;
45
45
  }) => Partial<TField> | void;
46
- export type FormWithDependOnActionsMap<TField extends IFormWithDependOnField = IFormWithDependOnField> = {
46
+ export interface FormWithDependOnActionsMap<TField extends IFormWithDependOnField = IFormWithDependOnField> {
47
47
  all?: FormWithDependOnAction<TField>;
48
48
  [fieldKey: string]: FormWithDependOnAction<TField> | undefined;
49
- };
49
+ }
50
50
  /**
51
51
  * Props компонента `<FormWithDependOn>`. Generic-параметр `TField` позволяет
52
52
  * вызывающему коду указать конкретный shape поля и получить type-safe
@@ -0,0 +1,8 @@
1
+ export function getDependOnStarter(props: any): ({ newValue, fieldKey, propKey, field, form, additional }: {
2
+ newValue: any;
3
+ fieldKey: any;
4
+ propKey: any;
5
+ field: any;
6
+ form: any;
7
+ additional: any;
8
+ }) => void;
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../src/charts.ts", "../src/Atomic/UI/Chart/Chart.tsx", "../src/Functions/utils.js", "../src/Atomic/UI/Chart/partial/Chart.constants.js", "../src/Atomic/UI/Chart/partial/ChartTypeSwitcherIcon/ChartTypeSwitcherIcon.tsx", "../src/Atomic/UI/Chart/partial/datasetSetters.js", "../src/Atomic/UI/Chart/partial/optionsSetters.js", "../src/Atomic/UI/Chart/partial/optionsConstructor.js", "../src/Atomic/UI/Chart/partial/utils.ts", "../src/Atomic/UI/Chart/index.ts", "../src/Atomic/UI/PieChart/PieChart.js"],
4
- "sourcesContent": ["/**\n * IntelicoKit \u2014 Public subpath: \"intelicokit/charts\"\n * Chart components that depend on chart.js / react-chartjs-2.\n */\n\nexport { default as Chart } from './Atomic/UI/Chart/index';\nexport * from './Atomic/UI/Chart/index';\nexport { default as PieChart } from './Atomic/UI/PieChart/PieChart';", "import type { IChartProps, INotLibraryOptions } from './Chart.interface';\n\nimport {\n BarElement,\n CategoryScale,\n Chart as ChartJS,\n Filler,\n LinearScale,\n LineElement,\n PointElement,\n Tooltip,\n} from 'chart.js';\n\nimport cn from 'classnames';\nimport React, {\n useCallback,\n useEffect,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\n\nimport * as ChartComponents from 'react-chartjs-2';\n\nimport { clone } from '../../../Functions/utils';\nimport {\n COMPONENT_OPTIONS,\n DEFAULT_CHART_MODEL,\n ICON_MODELS,\n} from './partial/Chart.constants';\nimport ChartTypeSwitcherIcon from './partial/ChartTypeSwitcherIcon/ChartTypeSwitcherIcon';\n\nimport {\n correctModelKey,\n getChartTypeKey,\n getNotLibraryOptionsOptions,\n getOptions,\n prepareData,\n} from './partial/utils';\n\nimport './Chart.scss';\n\ntype ChartComponentType = React.ComponentType<any>;\n\nconst RC = 'chart';\n\nChartJS.register(\n CategoryScale,\n LinearScale,\n BarElement,\n PointElement,\n LineElement,\n Filler,\n Tooltip,\n);\n\nconst Chart: React.FC<IChartProps> = ({\n className,\n initialModel,\n modelsForSwitch,\n setModelExternalValue,\n description,\n customOptions,\n data,\n addToDatasets,\n modifyOptions,\n}) => {\n const { label, value } = description || {};\n\n const [model, setModel] = useState<string>(DEFAULT_CHART_MODEL);\n const [localData, setLocalData] = useState<any>();\n const chartRef = useRef<ChartJS | null>(null);\n const charContainertRef = useRef<HTMLDivElement>(null);\n\n const options = useMemo(\n () =>\n customOptions\n || (modifyOptions ? modifyOptions(getOptions(model)) : getOptions(model)),\n [customOptions, model, modifyOptions?.toString?.(), data],\n );\n\n const notLibraryOptionsOptions = useMemo(\n () =>\n customOptions\n ? customOptions?.notLibraryOptions\n : getNotLibraryOptionsOptions(model),\n [customOptions, model, data],\n );\n\n const ChartComponent = useCallback(\n (props: any) => {\n const chartType = getChartTypeKey(model);\n const Component = ChartComponents[chartType as keyof typeof ChartComponents] as ChartComponentType;\n\n return React.createElement(Component, { ...props, ref: chartRef });\n },\n [model],\n );\n\n const isExcludeDescription\n = COMPONENT_OPTIONS.disableDescriptionsFor.includes(model);\n const isExcludeChartTypeSwitcher\n = COMPONENT_OPTIONS.disableChartTypeSwitcherFor.includes(model);\n\n useLayoutEffect(() => {\n if (setModelExternalValue && model !== 'emptyLayout')\n setModelExternalValue(model);\n }, [model]);\n\n useLayoutEffect(() => {\n const { setCanvasDimensions } = notLibraryOptionsOptions as INotLibraryOptions || {};\n if (charContainertRef.current) {\n charContainertRef.current.style.width = setCanvasDimensions?.width ?? '';\n charContainertRef.current.style.height\n = setCanvasDimensions?.height ?? '';\n }\n }, [notLibraryOptionsOptions]);\n\n useEffect(() => {\n setModel(correctModelKey(initialModel));\n }, [initialModel]);\n\n useEffect(() => {\n if (data) {\n setLocalData(\n prepareData(model, clone(data), chartRef.current, addToDatasets),\n );\n }\n }, [model, data]);\n\n if (!data || !localData) return null;\n\n return (\n <div\n className={cn(\n RC,\n { [`${RC}_icon-mode`]: ICON_MODELS.includes(model) },\n className,\n )}\n >\n <div\n className={cn(`${RC}__header`, {\n [`${RC}__header_only-switcher`]: !description,\n })}\n >\n {description && !isExcludeDescription\n ? (\n <div className={cn(`${RC}__description`)}>\n {label\n ? (\n <span className={cn(`${RC}__description-title`)}>{label}</span>\n )\n : null}\n\n {value\n ? (\n <div className={cn(`${RC}__description-value`)}>{value}</div>\n )\n : null}\n </div>\n )\n : null}\n\n {!isExcludeChartTypeSwitcher\n ? (\n <div className={cn(`${RC}__type-switcher`)}>\n <ChartTypeSwitcherIcon\n iconType=\"Bar\"\n isActive={getChartTypeKey(model) === 'Bar'}\n onClick={() => setModel(modelsForSwitch?.[0] || 'barLayout')}\n />\n <ChartTypeSwitcherIcon\n iconType=\"Line\"\n isActive={getChartTypeKey(model) === 'Line'}\n onClick={() => setModel(modelsForSwitch?.[1] || 'lineLayout')}\n />\n </div>\n )\n : null}\n </div>\n\n <div ref={charContainertRef} className={cn(`${RC}__chart-wrapper`)}>\n <ChartComponent {...options} data={localData} />\n </div>\n </div>\n );\n};\n\nexport default Chart;\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", "export const CHART_TYPES = [\"Bar\", \"Line\"];\nexport const DEFAULT_CHART_MODEL = \"emptyLayout\";\n\nexport const FINTURF_ADD_GRADIENT_COLORS_POSITIVE = [\"#53D1AD\", \"#389AA3\"];\nexport const FINTURF_ADD_GRADIENT_COLORS_NEGATIVE = [\"#FDB4DB\", \"#FA2E69\"];\n\nexport const GRADIENTS_OBJECTS = {\n finturf: {\n bar: [\n {\n gradientTargetPropertyName: \"backgroundColor\",\n colors: FINTURF_ADD_GRADIENT_COLORS_POSITIVE,\n direction: \"toBottom\",\n typeDistributionOfGradientPoints: \"personalBase\",\n collorStopPoints: [0.2, 1],\n },\n ],\n line: [\n {\n gradientTargetPropertyName: \"borderColor\",\n colors: FINTURF_ADD_GRADIENT_COLORS_POSITIVE,\n direction: \"toRight\",\n },\n {\n gradientTargetPropertyName: \"backgroundColor\",\n colors: [\n \"rgba(84, 210, 173, 0.2)\",\n \"rgba(84, 210, 173, 0.1)\",\n \"rgba(84, 210, 173, 0)\",\n ],\n direction: \"toBottom\",\n collorStopPoints: [0.31, 0.72, 1],\n isAddFill: true,\n },\n ],\n positiveLineIcon: [\n {\n gradientTargetPropertyName: \"borderColor\",\n colors: FINTURF_ADD_GRADIENT_COLORS_POSITIVE,\n direction: \"toRight\",\n },\n ],\n negativeLineIcon: [\n {\n gradientTargetPropertyName: \"borderColor\",\n colors: FINTURF_ADD_GRADIENT_COLORS_NEGATIVE,\n direction: \"toRight\",\n },\n ],\n },\n};\n\nexport const FINTURF_TOOLTIP_OPTIONS = {\n enabled: true,\n mode: \"index\",\n intersect: false,\n padding: 8,\n backgroundColor: \"#FFFFFF\",\n titleColor: \"#757F8C\",\n borderColor: \"#D6D9E4\",\n titleFont: {\n family: \"Sarabun\",\n style: \"normal\",\n weight: 500,\n size: 12,\n // line-height: 18px;\n },\n titleAlign: \"center\",\n bodyColor: \"#1E1E2D\",\n bodyFont: {\n family: \"Sarabun\",\n style: \"normal\",\n weight: 400,\n size: 14,\n },\n bodyAlign: \"center\",\n caretSize: 0,\n displayColors: false,\n borderWidth: 1,\n borderRadius: 6,\n callbacks: {\n label: (context) => context.raw || \"0\",\n },\n};\n\nexport const ICON_MODELS = [\n \"lineIconLayout\",\n \"finturfPositiveLineIcon\",\n \"finturfNegativeLineIcon\",\n];\n\nexport const COMPONENT_OPTIONS = {\n disableDescriptionsFor: [...ICON_MODELS],\n disableChartTypeSwitcherFor: [...ICON_MODELS, \"barLayout\", \"lineLayout\"],\n};\n", "import type { IChartTypeSwitcherIconProps } from '../../Chart.interface';\nimport cn from 'classnames';\n\nimport React from 'react';\n\nimport './ChartTypeSwitcherIcon.scss';\n\nconst RC = 'chart__type-switcher-icon';\n\nfunction getIcon(type: string): React.ReactElement | null {\n switch (type) {\n case 'Bar':\n return (\n <svg\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 25\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <rect y=\"0.5\" width=\"24\" height=\"24\" rx=\"4\" fill=\"#EAF2FF\" />\n <path\n d=\"M18 18V11\"\n stroke=\"#1F7499\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M12 18V6\"\n stroke=\"#1F7499\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M6 18V13\"\n stroke=\"#1F7499\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n case 'Line':\n return (\n <svg\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 25\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <rect y=\"0.5\" width=\"24\" height=\"24\" rx=\"4\" fill=\"#EAF2FF\" />\n <path\n d=\"M21 8L15.2544 13.2668C14.1075 14.3181 12.3288 14.3014 11.1818\n 13.25V13.25C10.0349 12.1986 8.25615 12.1819 7.10919 13.2332L3 17\"\n stroke=\"#1F7499\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n default:\n return null;\n }\n}\n\nconst ChartTypeSwitcherIcon: React.FC<IChartTypeSwitcherIconProps> = ({\n iconType,\n isActive,\n className,\n onClick,\n}) => {\n return (\n <div\n className={cn(RC, { [`${RC}_active`]: isActive }, className)}\n onClick={onClick}\n >\n {getIcon(iconType)}\n </div>\n );\n};\n\nexport default ChartTypeSwitcherIcon;\n", "import { clone } from \"../../../../Functions/utils\";\n\n// auxiliary functions\n\nexport const addDatasetsObjects = (currentData, mutation) => ({\n ...currentData,\n datasets: currentData.datasets?.map?.((dataset) => ({\n ...dataset,\n ...(typeof mutation === \"function\" ? mutation(dataset) : mutation),\n })),\n});\n\nexport const createGradient = ({\n ctx,\n area,\n colors,\n direction,\n correctionFactors,\n collorStopPoints,\n}) => {\n const getStartGradient = () => {\n switch (direction) {\n case \"toTop-toRight\":\n return ctx.createLinearGradient(\n area.left,\n area.bottom,\n area.right,\n area.top,\n );\n case \"toTop-toLeft\":\n return ctx.createLinearGradient(\n area.right,\n area.bottom,\n area.left,\n area.top,\n );\n case \"toBottom-toRight\":\n return ctx.createLinearGradient(\n area.left,\n area.top,\n area.right,\n area.bottom,\n );\n case \"toBottom-toLeft\":\n return ctx.createLinearGradient(\n area.right,\n area.top,\n area.left,\n area.bottom,\n );\n\n case \"toBottom\":\n return ctx.createLinearGradient(0, area.top, 0, area.bottom);\n case \"toTop\":\n return ctx.createLinearGradient(0, area.bottom, 0, area.top);\n case \"toLeft\":\n return ctx.createLinearGradient(area.right, 0, area.left, 0);\n case \"toRight\":\n default:\n return ctx.createLinearGradient(area.left, 0, area.right, 0);\n }\n };\n\n const getGradientWithPoints = (corection) => {\n const newGradient = getStartGradient();\n const staptPoint = corection ? 1 - corection : 0;\n\n colors.forEach((color, idx) => {\n const point = (() => {\n if (idx === colors.length - 1) return 1;\n return collorStopPoints && Array.isArray(collorStopPoints)\n ? staptPoint + collorStopPoints[idx] * (corection || 1)\n : staptPoint + (1 / colors.length) * (corection || 1);\n })();\n\n newGradient.addColorStop(point.toFixed(2), color);\n });\n\n return newGradient;\n };\n\n return correctionFactors\n ? correctionFactors.map((corection) => getGradientWithPoints(corection))\n : getGradientWithPoints();\n};\n\n// target functions\n\nexport const addGradientsObject = (\n currentData,\n gradientSettingsObj,\n chartInstance,\n) =>\n addDatasetsObjects(currentData, (dataset) => ({\n [gradientSettingsObj.gradientTargetPropertyName]: createGradient({\n ctx: chartInstance.ctx,\n area: chartInstance.chartArea,\n colors: gradientSettingsObj.colors,\n direction: gradientSettingsObj.direction,\n correctionFactors:\n gradientSettingsObj.typeDistributionOfGradientPoints === \"personalBase\"\n ? dataset.data.map(\n (value) => value / Math.max.apply(null, dataset.data),\n )\n : null,\n collorStopPoints: gradientSettingsObj.collorStopPoints,\n }),\n\n ...(gradientSettingsObj.isAddFill ? { fill: true } : {}),\n }));\n\nexport const addNotLibraryAnimation = (\n currentData,\n animationObj,\n chartInstance,\n) => {\n const { type, ...restAnimationObj } = animationObj || {};\n\n switch (type) {\n case \"runningColumns\":\n const runningColumnsDefaultFromValue = 25;\n const runningColumnsDefaultToValue = 75;\n const runningColumnsDefaultAverageValue = 50;\n const runningColumnsDefaultColumnsDelayCoef = 50;\n\n return addDatasetsObjects(currentData, (dataset) => ({\n animations: dataset.data.map((item, idx) => ({\n y: {\n duration: animationObj.duration,\n easing: animationObj.easing || \"linear\",\n from:\n animationObj.isFixExtremeColumns &&\n (!idx || idx === dataset.data.length - 1)\n ? runningColumnsDefaultAverageValue\n : animationObj.from || runningColumnsDefaultFromValue,\n to:\n animationObj.isFixExtremeColumns &&\n (!idx || idx === dataset.data.length - 1)\n ? runningColumnsDefaultAverageValue\n : animationObj.to || runningColumnsDefaultToValue,\n loop: true,\n delay:\n Math.random().toFixed(1) *\n (animationObj.columnsDelayCoef ||\n runningColumnsDefaultColumnsDelayCoef),\n },\n })),\n }));\n default:\n return currentData;\n }\n};\n\n// must be last function in file\nfunction changeData(\n currentData,\n iterationKey,\n settingsForChange,\n chartInstance,\n) {\n // console.log('iterationKey - ', iterationKey);\n // console.log('settingsForChange - ', settingsForChange);\n\n switch (iterationKey) {\n case \"setMaxBarThickness\":\n return addDatasetsObjects(currentData, {\n maxBarThickness: settingsForChange,\n });\n\n case \"addGradientsObjects\":\n return settingsForChange.reduce(\n (acc, gradientSettingsObj) =>\n addGradientsObject(acc, gradientSettingsObj, chartInstance),\n clone(currentData),\n );\n\n case \"addNotLibraryAnimations\":\n return settingsForChange.reduce(\n (acc, animationObj) =>\n addNotLibraryAnimation(acc, animationObj, chartInstance),\n currentData,\n );\n\n default:\n return currentData;\n }\n}\nexport default changeData;\n", "// gradientsSettings is Array of objects\nexport const addGradientsSettings = (currentOptions, gradientsSettings) => ({\n ...currentOptions,\n notLibraryOptions: {\n ...currentOptions.notLibraryOptions,\n changeData: {\n ...currentOptions.notLibraryOptions?.changeData,\n addGradientsObjects: gradientsSettings,\n },\n },\n});\n\nexport const addTooltipOptions = (currentOptions, tooltipOptions) => ({\n ...currentOptions,\n options: {\n ...currentOptions.options,\n plugins: {\n ...currentOptions.options.plugins,\n tooltip: tooltipOptions,\n },\n },\n});\n\n// must be last function in file\nconst addAdditionalOptions = (currentOptions, optionsToAdd) => {\n const addOption = (currentOptions, optionKey, optionData) => {\n switch (optionKey) {\n case \"addGradientsSettings\":\n return addGradientsSettings(currentOptions, optionData);\n case \"addTooltipOptions\":\n return addTooltipOptions(currentOptions, optionData);\n default:\n return currentOptions;\n }\n };\n\n const iterator = Object.keys(optionsToAdd);\n return iterator.reduce(\n (acc, key) => addOption(acc, key, optionsToAdd[key]),\n currentOptions,\n );\n};\nexport default addAdditionalOptions;\n", "import {\n FINTURF_ADD_GRADIENT_COLORS_NEGATIVE,\n FINTURF_TOOLTIP_OPTIONS,\n GRADIENTS_OBJECTS,\n} from \"./Chart.constants\";\nimport addAdditionalOptions from \"./optionsSetters\";\n\n// options constructors for ChartJS\n\nexport const reactChartJsOptionsLayouts = {\n lineIconLayout: {\n options: {\n responsive: true,\n maintainAspectRatio: false,\n scales: {\n x: { display: false },\n y: { display: false },\n },\n elements: {\n point: { radius: 0 },\n line: {\n tension: 0.45,\n borderJoinStyle: \"round\",\n borderWidth: 2,\n capBezierPoints: true,\n },\n },\n },\n redraw: true,\n notLibraryOptions: {\n // \u042D\u0442\u043E\u0442 \u043A\u043B\u044E\u0447 \u0434\u043E\u043B\u0436\u0435\u043D \u0431\u044B\u0442\u044C \u0432 \u043B\u044E\u0431\u043E\u0439 \u0438\u0442\u043E\u0433\u043E\u0432\u043E\u0439 \u043A\u043E\u043D\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u0434\u043B\u044F \u043D\u043E\u0440\u043C\u0430\u043B\u044C\u043D\u043E\u0439 \u0440\u0430\u0431\u043E\u0442\u044B \u043A\u043E\u043C\u043F\u043E\u043D\u0435\u043D\u0442\u0430 \u0438\u043C\u0435\u043D\u043D\u043E \u0432 \u0442\u0430\u043A\u043E\u0439 \u0432\u043B\u043E\u0436\u0435\u043D\u043D\u043E\u0441\u0442\u0438\n // \u041D\u0430 \u043E\u0441\u043D\u043E\u0432\u0430\u043D\u0438\u0438 \u044D\u0442\u043E\u0433\u043E \u043A\u043B\u044E\u0447\u0430 \u0431\u0443\u0434\u0435\u0442 \u043F\u0440\u0438\u043D\u0438\u043C\u0430\u0442\u044C\u0441\u044F \u0440\u0435\u0448\u0435\u043D\u0438\u0435 \u043A\u0430\u043A\u043E\u0439 \u043A\u043E\u043C\u043F\u043E\u043D\u0435\u0442 \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u043D (<Line />, <Bar /> \u0438 \u0442.\u0434.)\n // => \u0424\u0430\u0439\u043B Chart.js => \u043E\u043F\u0440\u0435\u0434\u0435\u043B\u0435\u043D\u0438\u0435 ChartComponent\n chartTypeKey: \"Line\",\n setCanvasDimensions: {\n width: \"75px\",\n height: \"35px\",\n },\n },\n },\n lineLayout: {\n options: {\n responsive: true,\n elements: {\n point: {\n radius: 4,\n pointStyle: \"circle\",\n backgroundColor: \"#FFFFFF\",\n color: \"#FFFFFF\",\n },\n line: {\n tension: 0.45,\n borderJoinStyle: \"round\",\n borderWidth: 2,\n capBezierPoints: true,\n },\n },\n },\n redraw: true,\n notLibraryOptions: {\n // \u042D\u0442\u043E\u0442 \u043A\u043B\u044E\u0447 \u0434\u043E\u043B\u0436\u0435\u043D \u0431\u044B\u0442\u044C \u0432 \u043B\u044E\u0431\u043E\u0439 \u0438\u0442\u043E\u0433\u043E\u0432\u043E\u0439 \u043A\u043E\u043D\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u0434\u043B\u044F \u043D\u043E\u0440\u043C\u0430\u043B\u044C\u043D\u043E\u0439 \u0440\u0430\u0431\u043E\u0442\u044B \u043A\u043E\u043C\u043F\u043E\u043D\u0435\u043D\u0442\u0430 \u0438\u043C\u0435\u043D\u043D\u043E \u0432 \u0442\u0430\u043A\u043E\u0439 \u0432\u043B\u043E\u0436\u0435\u043D\u043D\u043E\u0441\u0442\u0438\n // \u041D\u0430 \u043E\u0441\u043D\u043E\u0432\u0430\u043D\u0438\u0438 \u044D\u0442\u043E\u0433\u043E \u043A\u043B\u044E\u0447\u0430 \u0431\u0443\u0434\u0435\u0442 \u043F\u0440\u0438\u043D\u0438\u043C\u0430\u0442\u044C\u0441\u044F \u0440\u0435\u0448\u0435\u043D\u0438\u0435 \u043A\u0430\u043A\u043E\u0439 \u043A\u043E\u043C\u043F\u043E\u043D\u0435\u0442 \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u043D (<Line />, <Bar /> \u0438 \u0442.\u0434.)\n // => \u0424\u0430\u0439\u043B Chart.js => \u043E\u043F\u0440\u0435\u0434\u0435\u043B\u0435\u043D\u0438\u0435 ChartComponent\n chartTypeKey: \"Line\",\n },\n },\n barLayout: {\n options: {\n responsive: true,\n elements: {\n bar: {\n borderRadius: 10,\n },\n },\n },\n redraw: true,\n notLibraryOptions: {\n // \u042D\u0442\u043E\u0442 \u043A\u043B\u044E\u0447 \u0434\u043E\u043B\u0436\u0435\u043D \u0431\u044B\u0442\u044C \u0432 \u043B\u044E\u0431\u043E\u0439 \u0438\u0442\u043E\u0433\u043E\u0432\u043E\u0439 \u043A\u043E\u043D\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u0434\u043B\u044F \u043D\u043E\u0440\u043C\u0430\u043B\u044C\u043D\u043E\u0439 \u0440\u0430\u0431\u043E\u0442\u044B \u043A\u043E\u043C\u043F\u043E\u043D\u0435\u043D\u0442\u0430 \u0438\u043C\u0435\u043D\u043D\u043E \u0432 \u0442\u0430\u043A\u043E\u0439 \u0432\u043B\u043E\u0436\u0435\u043D\u043D\u043E\u0441\u0442\u0438\n // \u041D\u0430 \u043E\u0441\u043D\u043E\u0432\u0430\u043D\u0438\u0438 \u044D\u0442\u043E\u0433\u043E \u043A\u043B\u044E\u0447\u0430 \u0431\u0443\u0434\u0435\u0442 \u043F\u0440\u0438\u043D\u0438\u043C\u0430\u0442\u044C\u0441\u044F \u0440\u0435\u0448\u0435\u043D\u0438\u0435 \u043A\u0430\u043A\u043E\u0439 \u043A\u043E\u043C\u043F\u043E\u043D\u0435\u0442 \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u043D (<Line />, <Bar /> \u0438 \u0442.\u0434.)\n // => \u0424\u0430\u0439\u043B Chart.js => \u043E\u043F\u0440\u0435\u0434\u0435\u043B\u0435\u043D\u0438\u0435 ChartComponent\n chartTypeKey: \"Bar\",\n },\n },\n emptyLayout: {\n options: {\n responsive: true,\n maintainAspectRatio: false,\n scales: {\n x: { display: false },\n y: { display: false },\n },\n elements: {\n point: { radius: 0 },\n line: { borderWidth: 0 },\n },\n },\n notLibraryOptions: {\n // \u042D\u0442\u043E\u0442 \u043A\u043B\u044E\u0447 \u0434\u043E\u043B\u0436\u0435\u043D \u0431\u044B\u0442\u044C \u0432 \u043B\u044E\u0431\u043E\u0439 \u0438\u0442\u043E\u0433\u043E\u0432\u043E\u0439 \u043A\u043E\u043D\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u0434\u043B\u044F \u043D\u043E\u0440\u043C\u0430\u043B\u044C\u043D\u043E\u0439 \u0440\u0430\u0431\u043E\u0442\u044B \u043A\u043E\u043C\u043F\u043E\u043D\u0435\u043D\u0442\u0430 \u0438\u043C\u0435\u043D\u043D\u043E \u0432 \u0442\u0430\u043A\u043E\u0439 \u0432\u043B\u043E\u0436\u0435\u043D\u043D\u043E\u0441\u0442\u0438\n // \u041D\u0430 \u043E\u0441\u043D\u043E\u0432\u0430\u043D\u0438\u0438 \u044D\u0442\u043E\u0433\u043E \u043A\u043B\u044E\u0447\u0430 \u0431\u0443\u0434\u0435\u0442 \u043F\u0440\u0438\u043D\u0438\u043C\u0430\u0442\u044C\u0441\u044F \u0440\u0435\u0448\u0435\u043D\u0438\u0435 \u043A\u0430\u043A\u043E\u0439 \u043A\u043E\u043C\u043F\u043E\u043D\u0435\u0442 \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u043D (<Line />, <Bar /> \u0438 \u0442.\u0434.)\n // => \u0424\u0430\u0439\u043B Chart.js => \u043E\u043F\u0440\u0435\u0434\u0435\u043B\u0435\u043D\u0438\u0435 \u043F\u043E\u0434\u043A\u043E\u043C\u043F\u043E\u043D\u0435\u043D\u0442\u0430 ChartComponent => \u0441\u0442\u0440\u043E\u043A\u0430 const Component = ...\n chartTypeKey: \"Line\",\n },\n },\n};\n\nconst finturfChartLayouts = (() => {\n return [\"barLayout\", \"lineLayout\"].reduce(\n (acc, key) => ({\n ...acc,\n [key]: {\n ...reactChartJsOptionsLayouts[key],\n\n options: {\n ...reactChartJsOptionsLayouts[key].options,\n scales: {\n ...reactChartJsOptionsLayouts[key].options?.scales,\n x: {\n ...reactChartJsOptionsLayouts[key].options?.scales?.x,\n grid: {\n ...reactChartJsOptionsLayouts[key].options?.scales?.x?.grid,\n display: false,\n offset: true,\n },\n ticks: {\n ...reactChartJsOptionsLayouts[key].options?.scales?.y?.ticks,\n autoSkipPadding: 10,\n align: \"center\",\n color: \"#757F8C\",\n lineHeight: 18,\n font: {\n family: \"Sarabun\",\n style: \"normal\",\n weight: 400,\n size: 8,\n },\n // callback: (value, index, ticks) => {\n // console.log(value);\n // console.log(index);\n // console.log(ticks);\n // console.log('***********');\n // return value;\n // },\n },\n },\n y: {\n ...reactChartJsOptionsLayouts[key].options?.scales?.y,\n min: 0,\n // grace: '5%',\n bounds: \"data\",\n grid: {\n ...reactChartJsOptionsLayouts[key].options?.scales?.y?.grid,\n borderColor: \"#E1E8F1\",\n color: \"#E1E8F1\",\n borderDash: [5],\n // borderDashOffset: 12,\n drawTicks: false,\n z: -1,\n },\n ticks: {\n ...reactChartJsOptionsLayouts[key].options?.scales?.y?.ticks,\n autoSkipPadding: 10,\n align: \"center\",\n color: \"#A0A4B0\",\n lineHeight: 18,\n padding: 6,\n font: {\n family: \"Sarabun\",\n style: \"normal\",\n weight: 400,\n size: 10,\n },\n },\n },\n },\n },\n\n notLibraryOptions: {\n ...reactChartJsOptionsLayouts[key].notLibraryOptions,\n setCanvasDimensions: {\n height: \"194px\",\n },\n },\n },\n }),\n {},\n );\n})();\n\nconst finturfChartBar = {\n ...finturfChartLayouts.barLayout,\n options: {\n ...finturfChartLayouts.barLayout?.options,\n maintainAspectRatio: false,\n elements: {\n ...finturfChartLayouts.barLayout?.options?.elements,\n bar: {\n ...finturfChartLayouts.barLayout?.options?.elements?.bar,\n borderRadius: 4,\n },\n },\n },\n notLibraryOptions: {\n ...finturfChartLayouts.barLayout?.notLibraryOptions,\n changeData: {\n ...finturfChartLayouts.barLayout?.notLibraryOptions?.changeData,\n setMaxBarThickness: 16,\n },\n },\n};\n\nconst finturfChartLine = {\n ...finturfChartLayouts.lineLayout,\n options: {\n ...finturfChartLayouts.lineLayout?.options,\n maintainAspectRatio: false,\n elements: {\n ...finturfChartLayouts.lineLayout.options?.elements,\n point: {\n ...finturfChartLayouts.lineLayout.options?.elements?.point,\n radius: 2,\n borderColor: \"#32A784\",\n borderWidth: 4,\n },\n },\n },\n};\n\nexport const finturfReactChartJsOptions = {\n finturfChartBar: addAdditionalOptions(finturfChartBar, {\n addGradientsSettings: GRADIENTS_OBJECTS.finturf.bar,\n addTooltipOptions: FINTURF_TOOLTIP_OPTIONS,\n }),\n\n finturfLoadingModeBar: {\n ...finturfChartBar,\n\n options: {\n ...finturfChartBar.options,\n animations: {\n ...finturfChartBar.options?.animations,\n y: {\n ...finturfChartBar.options?.animations?.y,\n duration: 0,\n },\n },\n },\n\n notLibraryOptions: {\n ...finturfChartBar.notLibraryOptions,\n changeData: {\n ...finturfChartBar.notLibraryOptions?.changeData,\n addNotLibraryAnimations: [\n {\n type: \"runningColumns\",\n // duration - ms\n duration: 600,\n // default easing - 'linear',\n // easing: 'easeInOutExpo',\n // ToDo - \u043F\u0440\u0435\u0434\u0443\u0441\u043C\u043E\u0442\u0440\u0435\u0442\u044C 'auto' \u0438 default \u0434\u043B\u044F from \u0438 to\n from: 10,\n to: 75,\n columnsDelayCoef: 500,\n },\n ],\n },\n },\n },\n\n finturfChartLine: addAdditionalOptions(finturfChartLine, {\n addGradientsSettings: GRADIENTS_OBJECTS.finturf.line,\n addTooltipOptions: FINTURF_TOOLTIP_OPTIONS,\n // consoleCurrentData: true,\n }),\n\n finturfLoadingModeLine: {\n ...finturfChartLine,\n\n options: {\n ...finturfChartLine.options,\n elements: {\n ...finturfChartLine.options?.elements,\n point: {\n ...finturfChartLine.options?.elements?.point,\n radius: 4,\n borderWidth: 1,\n borderColor: \"#E1E8F1\",\n },\n },\n animations: {\n ...finturfChartLine.options?.animations,\n y: {\n ...finturfChartLine.options?.animations?.y,\n duration: 0,\n },\n },\n },\n\n notLibraryOptions: {\n ...finturfChartLine.notLibraryOptions,\n changeData: {\n ...finturfChartLine.notLibraryOptions?.changeData,\n addNotLibraryAnimations: [\n {\n type: \"runningColumns\",\n // duration - ms\n duration: 600,\n // default easing - 'linear',\n // easing: 'easeInOutExpo',\n columnsDelayCoef: 500,\n isFixExtremeColumns: true,\n },\n ],\n },\n },\n },\n\n finturfPositiveLineIcon: addAdditionalOptions(\n reactChartJsOptionsLayouts.lineIconLayout,\n {\n addGradientsSettings: GRADIENTS_OBJECTS.finturf.positiveLineIcon,\n },\n ),\n\n finturfNegativeLineIcon: addAdditionalOptions(\n reactChartJsOptionsLayouts.lineIconLayout,\n {\n addGradientsSettings: GRADIENTS_OBJECTS.finturf.negativeLineIcon,\n },\n ),\n};\n\nexport default {\n ...finturfReactChartJsOptions,\n emptyLayout: reactChartJsOptionsLayouts.emptyLayout,\n};\n", "import { clone, omitKeys } from '../../../../Functions/utils';\n\nimport { CHART_TYPES, DEFAULT_CHART_MODEL } from './Chart.constants';\nimport changeData from './datasetSetters';\nimport optionsConstructor from './optionsConstructor';\n\nexport function getChartTypeKey(model: string): string | undefined {\n return optionsConstructor[model as keyof typeof optionsConstructor]?.notLibraryOptions?.chartTypeKey\n}\n\nexport function correctModelKey(model?: string): string {\n if (!model) return DEFAULT_CHART_MODEL;\n\n const options = optionsConstructor[model as keyof typeof optionsConstructor];\n if (!options) return DEFAULT_CHART_MODEL;\n\n const chartTypeKey = getChartTypeKey(model);\n return chartTypeKey && CHART_TYPES.includes(chartTypeKey) ? model : DEFAULT_CHART_MODEL;\n}\n\nexport function getOptions(model: string): any {\n const modelOptions = optionsConstructor[model as keyof typeof optionsConstructor]\n || optionsConstructor[DEFAULT_CHART_MODEL as keyof typeof optionsConstructor];\n return omitKeys(modelOptions, ['notLibraryOptions']);\n}\n\nexport function getNotLibraryOptionsOptions(model: string): any {\n const modelOptions = optionsConstructor[model as keyof typeof optionsConstructor]\n || optionsConstructor[DEFAULT_CHART_MODEL as keyof typeof optionsConstructor];\n const { notLibraryOptions } = modelOptions || {};\n return notLibraryOptions ? clone(notLibraryOptions) : undefined;\n}\n\nexport function prepareData(model: string, data: any, chartInstance: any, addToDatasets?: any): any {\n if (!chartInstance) return data;\n\n const notLibraryOptions = getNotLibraryOptionsOptions(model);\n\n const iterator = notLibraryOptions?.changeData\n ? Object.keys(notLibraryOptions.changeData)\n : [];\n\n const changedData = iterator.reduce(\n (acc, dataChangeKey) =>\n changeData(\n acc,\n dataChangeKey,\n notLibraryOptions.changeData[dataChangeKey],\n chartInstance,\n ),\n clone(data),\n );\n\n return addToDatasets\n && typeof addToDatasets === 'object'\n && !Array.isArray(addToDatasets)\n ? {\n ...changedData,\n datasets: changedData.datasets.map((dataset: any) => ({\n ...dataset,\n ...addToDatasets,\n })),\n }\n : changedData;\n}\n", "import type { IChartProps, IChartTypeSwitcherIconProps, INotLibraryOptions } from './Chart.interface';\nimport Chart from './Chart';\n\nexport type { IChartProps, IChartTypeSwitcherIconProps, INotLibraryOptions };\nexport default Chart;\n", "import React from \"react\";\n\nimport { ArcElement, Chart as ChartJS, Tooltip } from \"chart.js\";\nimport { Pie } from \"react-chartjs-2\";\n\nimport \"./PieChart.scss\";\n\nChartJS.register(ArcElement, Tooltip);\n\nconst PieChart = ({\n data,\n cutout = \"80%\",\n resultLabel,\n resultValue = 0,\n withLegend = false,\n}) => {\n const options = {\n cutout,\n plugins: {\n legend: {\n display: withLegend,\n },\n },\n };\n\n return (\n <div className=\"pie-chart-box\" style={{ maxWidth: `320px` }}>\n <Pie data={data} options={options} />\n {Boolean(resultLabel) && (\n <div className=\"pie-chart__result\">\n <div className=\"pie-chart__result-value\">\n {resultValue}\n <span className=\"pie-chart__result-percent\">%</span>{\" \"}\n </div>\n <div className=\"pie-chart__result-label\">{resultLabel}</div>\n </div>\n )}\n </div>\n );\n};\n\nexport default PieChart;\n"],
4
+ "sourcesContent": ["/**\n * IntelicoKit \u2014 Public subpath: \"intelicokit/charts\"\n * Chart components that depend on chart.js / react-chartjs-2.\n */\n\nexport { default as Chart } from './Atomic/UI/Chart/index';\nexport * from './Atomic/UI/Chart/index';\nexport { default as PieChart } from './Atomic/UI/PieChart/PieChart';\n", "import type { IChartProps, INotLibraryOptions } from './Chart.interface';\n\nimport {\n BarElement,\n CategoryScale,\n Chart as ChartJS,\n Filler,\n LinearScale,\n LineElement,\n PointElement,\n Tooltip,\n} from 'chart.js';\n\nimport cn from 'classnames';\nimport React, {\n useCallback,\n useEffect,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\n\nimport * as ChartComponents from 'react-chartjs-2';\n\nimport { clone } from '../../../Functions/utils';\nimport {\n COMPONENT_OPTIONS,\n DEFAULT_CHART_MODEL,\n ICON_MODELS,\n} from './partial/Chart.constants';\nimport ChartTypeSwitcherIcon from './partial/ChartTypeSwitcherIcon/ChartTypeSwitcherIcon';\n\nimport {\n correctModelKey,\n getChartTypeKey,\n getNotLibraryOptionsOptions,\n getOptions,\n prepareData,\n} from './partial/utils';\n\nimport './Chart.scss';\n\ntype ChartComponentType = React.ComponentType<any>;\n\nconst RC = 'chart';\n\nChartJS.register(\n CategoryScale,\n LinearScale,\n BarElement,\n PointElement,\n LineElement,\n Filler,\n Tooltip,\n);\n\nconst Chart: React.FC<IChartProps> = ({\n className,\n initialModel,\n modelsForSwitch,\n setModelExternalValue,\n description,\n customOptions,\n data,\n addToDatasets,\n modifyOptions,\n}) => {\n const { label, value } = description || {};\n\n const [model, setModel] = useState<string>(DEFAULT_CHART_MODEL);\n const [localData, setLocalData] = useState<any>();\n const chartRef = useRef<ChartJS | null>(null);\n const charContainertRef = useRef<HTMLDivElement>(null);\n\n const options = useMemo(\n () =>\n customOptions\n || (modifyOptions ? modifyOptions(getOptions(model)) : getOptions(model)),\n [customOptions, model, modifyOptions?.toString?.(), data],\n );\n\n const notLibraryOptionsOptions = useMemo(\n () =>\n customOptions\n ? customOptions?.notLibraryOptions\n : getNotLibraryOptionsOptions(model),\n [customOptions, model, data],\n );\n\n const ChartComponent = useCallback(\n (props: any) => {\n const chartType = getChartTypeKey(model);\n const Component = ChartComponents[chartType as keyof typeof ChartComponents] as ChartComponentType;\n\n return React.createElement(Component, { ...props, ref: chartRef });\n },\n [model],\n );\n\n const isExcludeDescription\n = COMPONENT_OPTIONS.disableDescriptionsFor.includes(model);\n const isExcludeChartTypeSwitcher\n = COMPONENT_OPTIONS.disableChartTypeSwitcherFor.includes(model);\n\n useLayoutEffect(() => {\n if (setModelExternalValue && model !== 'emptyLayout')\n setModelExternalValue(model);\n }, [model]);\n\n useLayoutEffect(() => {\n const { setCanvasDimensions } = notLibraryOptionsOptions as INotLibraryOptions || {};\n if (charContainertRef.current) {\n charContainertRef.current.style.width = setCanvasDimensions?.width ?? '';\n charContainertRef.current.style.height\n = setCanvasDimensions?.height ?? '';\n }\n }, [notLibraryOptionsOptions]);\n\n useEffect(() => {\n setModel(correctModelKey(initialModel));\n }, [initialModel]);\n\n useEffect(() => {\n if (data) {\n setLocalData(\n prepareData(model, clone(data), chartRef.current, addToDatasets),\n );\n }\n }, [model, data]);\n\n if (!data || !localData) return null;\n\n return (\n <div\n className={cn(\n RC,\n { [`${RC}_icon-mode`]: ICON_MODELS.includes(model) },\n className,\n )}\n >\n <div\n className={cn(`${RC}__header`, {\n [`${RC}__header_only-switcher`]: !description,\n })}\n >\n {description && !isExcludeDescription\n ? (\n <div className={cn(`${RC}__description`)}>\n {label\n ? (\n <span className={cn(`${RC}__description-title`)}>{label}</span>\n )\n : null}\n\n {value\n ? (\n <div className={cn(`${RC}__description-value`)}>{value}</div>\n )\n : null}\n </div>\n )\n : null}\n\n {!isExcludeChartTypeSwitcher\n ? (\n <div className={cn(`${RC}__type-switcher`)}>\n <ChartTypeSwitcherIcon\n iconType=\"Bar\"\n isActive={getChartTypeKey(model) === 'Bar'}\n onClick={() => setModel(modelsForSwitch?.[0] || 'barLayout')}\n />\n <ChartTypeSwitcherIcon\n iconType=\"Line\"\n isActive={getChartTypeKey(model) === 'Line'}\n onClick={() => setModel(modelsForSwitch?.[1] || 'lineLayout')}\n />\n </div>\n )\n : null}\n </div>\n\n <div ref={charContainertRef} className={cn(`${RC}__chart-wrapper`)}>\n <ChartComponent {...options} data={localData} />\n </div>\n </div>\n );\n};\n\nexport default Chart;\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", "export const CHART_TYPES = [\"Bar\", \"Line\"];\nexport const DEFAULT_CHART_MODEL = \"emptyLayout\";\n\nexport const FINTURF_ADD_GRADIENT_COLORS_POSITIVE = [\"#53D1AD\", \"#389AA3\"];\nexport const FINTURF_ADD_GRADIENT_COLORS_NEGATIVE = [\"#FDB4DB\", \"#FA2E69\"];\n\nexport const GRADIENTS_OBJECTS = {\n finturf: {\n bar: [\n {\n gradientTargetPropertyName: \"backgroundColor\",\n colors: FINTURF_ADD_GRADIENT_COLORS_POSITIVE,\n direction: \"toBottom\",\n typeDistributionOfGradientPoints: \"personalBase\",\n collorStopPoints: [0.2, 1],\n },\n ],\n line: [\n {\n gradientTargetPropertyName: \"borderColor\",\n colors: FINTURF_ADD_GRADIENT_COLORS_POSITIVE,\n direction: \"toRight\",\n },\n {\n gradientTargetPropertyName: \"backgroundColor\",\n colors: [\n \"rgba(84, 210, 173, 0.2)\",\n \"rgba(84, 210, 173, 0.1)\",\n \"rgba(84, 210, 173, 0)\",\n ],\n direction: \"toBottom\",\n collorStopPoints: [0.31, 0.72, 1],\n isAddFill: true,\n },\n ],\n positiveLineIcon: [\n {\n gradientTargetPropertyName: \"borderColor\",\n colors: FINTURF_ADD_GRADIENT_COLORS_POSITIVE,\n direction: \"toRight\",\n },\n ],\n negativeLineIcon: [\n {\n gradientTargetPropertyName: \"borderColor\",\n colors: FINTURF_ADD_GRADIENT_COLORS_NEGATIVE,\n direction: \"toRight\",\n },\n ],\n },\n};\n\nexport const FINTURF_TOOLTIP_OPTIONS = {\n enabled: true,\n mode: \"index\",\n intersect: false,\n padding: 8,\n backgroundColor: \"#FFFFFF\",\n titleColor: \"#757F8C\",\n borderColor: \"#D6D9E4\",\n titleFont: {\n family: \"Sarabun\",\n style: \"normal\",\n weight: 500,\n size: 12,\n // line-height: 18px;\n },\n titleAlign: \"center\",\n bodyColor: \"#1E1E2D\",\n bodyFont: {\n family: \"Sarabun\",\n style: \"normal\",\n weight: 400,\n size: 14,\n },\n bodyAlign: \"center\",\n caretSize: 0,\n displayColors: false,\n borderWidth: 1,\n borderRadius: 6,\n callbacks: {\n label: (context) => context.raw || \"0\",\n },\n};\n\nexport const ICON_MODELS = [\n \"lineIconLayout\",\n \"finturfPositiveLineIcon\",\n \"finturfNegativeLineIcon\",\n];\n\nexport const COMPONENT_OPTIONS = {\n disableDescriptionsFor: [...ICON_MODELS],\n disableChartTypeSwitcherFor: [...ICON_MODELS, \"barLayout\", \"lineLayout\"],\n};\n", "import type { IChartTypeSwitcherIconProps } from '../../Chart.interface';\nimport cn from 'classnames';\n\nimport React from 'react';\n\nimport './ChartTypeSwitcherIcon.scss';\n\nconst RC = 'chart__type-switcher-icon';\n\nfunction getIcon(type: string): React.ReactElement | null {\n switch (type) {\n case 'Bar':\n return (\n <svg\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 25\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <rect y=\"0.5\" width=\"24\" height=\"24\" rx=\"4\" fill=\"#EAF2FF\" />\n <path\n d=\"M18 18V11\"\n stroke=\"#1F7499\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M12 18V6\"\n stroke=\"#1F7499\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M6 18V13\"\n stroke=\"#1F7499\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n case 'Line':\n return (\n <svg\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 25\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <rect y=\"0.5\" width=\"24\" height=\"24\" rx=\"4\" fill=\"#EAF2FF\" />\n <path\n d=\"M21 8L15.2544 13.2668C14.1075 14.3181 12.3288 14.3014 11.1818\n 13.25V13.25C10.0349 12.1986 8.25615 12.1819 7.10919 13.2332L3 17\"\n stroke=\"#1F7499\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n default:\n return null;\n }\n}\n\nconst ChartTypeSwitcherIcon: React.FC<IChartTypeSwitcherIconProps> = ({\n iconType,\n isActive,\n className,\n onClick,\n}) => {\n return (\n <div\n className={cn(RC, { [`${RC}_active`]: isActive }, className)}\n onClick={onClick}\n >\n {getIcon(iconType)}\n </div>\n );\n};\n\nexport default ChartTypeSwitcherIcon;\n", "import { clone } from \"../../../../Functions/utils\";\n\n// auxiliary functions\n\nexport const addDatasetsObjects = (currentData, mutation) => ({\n ...currentData,\n datasets: currentData.datasets?.map?.((dataset) => ({\n ...dataset,\n ...(typeof mutation === \"function\" ? mutation(dataset) : mutation),\n })),\n});\n\nexport const createGradient = ({\n ctx,\n area,\n colors,\n direction,\n correctionFactors,\n collorStopPoints,\n}) => {\n const getStartGradient = () => {\n switch (direction) {\n case \"toTop-toRight\":\n return ctx.createLinearGradient(\n area.left,\n area.bottom,\n area.right,\n area.top,\n );\n case \"toTop-toLeft\":\n return ctx.createLinearGradient(\n area.right,\n area.bottom,\n area.left,\n area.top,\n );\n case \"toBottom-toRight\":\n return ctx.createLinearGradient(\n area.left,\n area.top,\n area.right,\n area.bottom,\n );\n case \"toBottom-toLeft\":\n return ctx.createLinearGradient(\n area.right,\n area.top,\n area.left,\n area.bottom,\n );\n\n case \"toBottom\":\n return ctx.createLinearGradient(0, area.top, 0, area.bottom);\n case \"toTop\":\n return ctx.createLinearGradient(0, area.bottom, 0, area.top);\n case \"toLeft\":\n return ctx.createLinearGradient(area.right, 0, area.left, 0);\n case \"toRight\":\n default:\n return ctx.createLinearGradient(area.left, 0, area.right, 0);\n }\n };\n\n const getGradientWithPoints = (corection) => {\n const newGradient = getStartGradient();\n const staptPoint = corection ? 1 - corection : 0;\n\n colors.forEach((color, idx) => {\n const point = (() => {\n if (idx === colors.length - 1) return 1;\n return collorStopPoints && Array.isArray(collorStopPoints)\n ? staptPoint + collorStopPoints[idx] * (corection || 1)\n : staptPoint + (1 / colors.length) * (corection || 1);\n })();\n\n newGradient.addColorStop(point.toFixed(2), color);\n });\n\n return newGradient;\n };\n\n return correctionFactors\n ? correctionFactors.map((corection) => getGradientWithPoints(corection))\n : getGradientWithPoints();\n};\n\n// target functions\n\nexport const addGradientsObject = (\n currentData,\n gradientSettingsObj,\n chartInstance,\n) =>\n addDatasetsObjects(currentData, (dataset) => ({\n [gradientSettingsObj.gradientTargetPropertyName]: createGradient({\n ctx: chartInstance.ctx,\n area: chartInstance.chartArea,\n colors: gradientSettingsObj.colors,\n direction: gradientSettingsObj.direction,\n correctionFactors:\n gradientSettingsObj.typeDistributionOfGradientPoints === \"personalBase\"\n ? dataset.data.map(\n (value) => value / Math.max.apply(null, dataset.data),\n )\n : null,\n collorStopPoints: gradientSettingsObj.collorStopPoints,\n }),\n\n ...(gradientSettingsObj.isAddFill ? { fill: true } : {}),\n }));\n\nexport const addNotLibraryAnimation = (\n currentData,\n animationObj,\n chartInstance,\n) => {\n const { type, ...restAnimationObj } = animationObj || {};\n\n switch (type) {\n case \"runningColumns\":\n const runningColumnsDefaultFromValue = 25;\n const runningColumnsDefaultToValue = 75;\n const runningColumnsDefaultAverageValue = 50;\n const runningColumnsDefaultColumnsDelayCoef = 50;\n\n return addDatasetsObjects(currentData, (dataset) => ({\n animations: dataset.data.map((item, idx) => ({\n y: {\n duration: animationObj.duration,\n easing: animationObj.easing || \"linear\",\n from:\n animationObj.isFixExtremeColumns &&\n (!idx || idx === dataset.data.length - 1)\n ? runningColumnsDefaultAverageValue\n : animationObj.from || runningColumnsDefaultFromValue,\n to:\n animationObj.isFixExtremeColumns &&\n (!idx || idx === dataset.data.length - 1)\n ? runningColumnsDefaultAverageValue\n : animationObj.to || runningColumnsDefaultToValue,\n loop: true,\n delay:\n Math.random().toFixed(1) *\n (animationObj.columnsDelayCoef ||\n runningColumnsDefaultColumnsDelayCoef),\n },\n })),\n }));\n default:\n return currentData;\n }\n};\n\n// must be last function in file\nfunction changeData(\n currentData,\n iterationKey,\n settingsForChange,\n chartInstance,\n) {\n // console.log('iterationKey - ', iterationKey);\n // console.log('settingsForChange - ', settingsForChange);\n\n switch (iterationKey) {\n case \"setMaxBarThickness\":\n return addDatasetsObjects(currentData, {\n maxBarThickness: settingsForChange,\n });\n\n case \"addGradientsObjects\":\n return settingsForChange.reduce(\n (acc, gradientSettingsObj) =>\n addGradientsObject(acc, gradientSettingsObj, chartInstance),\n clone(currentData),\n );\n\n case \"addNotLibraryAnimations\":\n return settingsForChange.reduce(\n (acc, animationObj) =>\n addNotLibraryAnimation(acc, animationObj, chartInstance),\n currentData,\n );\n\n default:\n return currentData;\n }\n}\nexport default changeData;\n", "// gradientsSettings is Array of objects\nexport const addGradientsSettings = (currentOptions, gradientsSettings) => ({\n ...currentOptions,\n notLibraryOptions: {\n ...currentOptions.notLibraryOptions,\n changeData: {\n ...currentOptions.notLibraryOptions?.changeData,\n addGradientsObjects: gradientsSettings,\n },\n },\n});\n\nexport const addTooltipOptions = (currentOptions, tooltipOptions) => ({\n ...currentOptions,\n options: {\n ...currentOptions.options,\n plugins: {\n ...currentOptions.options.plugins,\n tooltip: tooltipOptions,\n },\n },\n});\n\n// must be last function in file\nconst addAdditionalOptions = (currentOptions, optionsToAdd) => {\n const addOption = (currentOptions, optionKey, optionData) => {\n switch (optionKey) {\n case \"addGradientsSettings\":\n return addGradientsSettings(currentOptions, optionData);\n case \"addTooltipOptions\":\n return addTooltipOptions(currentOptions, optionData);\n default:\n return currentOptions;\n }\n };\n\n const iterator = Object.keys(optionsToAdd);\n return iterator.reduce(\n (acc, key) => addOption(acc, key, optionsToAdd[key]),\n currentOptions,\n );\n};\nexport default addAdditionalOptions;\n", "import {\n FINTURF_ADD_GRADIENT_COLORS_NEGATIVE,\n FINTURF_TOOLTIP_OPTIONS,\n GRADIENTS_OBJECTS,\n} from \"./Chart.constants\";\nimport addAdditionalOptions from \"./optionsSetters\";\n\n// options constructors for ChartJS\n\nexport const reactChartJsOptionsLayouts = {\n lineIconLayout: {\n options: {\n responsive: true,\n maintainAspectRatio: false,\n scales: {\n x: { display: false },\n y: { display: false },\n },\n elements: {\n point: { radius: 0 },\n line: {\n tension: 0.45,\n borderJoinStyle: \"round\",\n borderWidth: 2,\n capBezierPoints: true,\n },\n },\n },\n redraw: true,\n notLibraryOptions: {\n // \u042D\u0442\u043E\u0442 \u043A\u043B\u044E\u0447 \u0434\u043E\u043B\u0436\u0435\u043D \u0431\u044B\u0442\u044C \u0432 \u043B\u044E\u0431\u043E\u0439 \u0438\u0442\u043E\u0433\u043E\u0432\u043E\u0439 \u043A\u043E\u043D\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u0434\u043B\u044F \u043D\u043E\u0440\u043C\u0430\u043B\u044C\u043D\u043E\u0439 \u0440\u0430\u0431\u043E\u0442\u044B \u043A\u043E\u043C\u043F\u043E\u043D\u0435\u043D\u0442\u0430 \u0438\u043C\u0435\u043D\u043D\u043E \u0432 \u0442\u0430\u043A\u043E\u0439 \u0432\u043B\u043E\u0436\u0435\u043D\u043D\u043E\u0441\u0442\u0438\n // \u041D\u0430 \u043E\u0441\u043D\u043E\u0432\u0430\u043D\u0438\u0438 \u044D\u0442\u043E\u0433\u043E \u043A\u043B\u044E\u0447\u0430 \u0431\u0443\u0434\u0435\u0442 \u043F\u0440\u0438\u043D\u0438\u043C\u0430\u0442\u044C\u0441\u044F \u0440\u0435\u0448\u0435\u043D\u0438\u0435 \u043A\u0430\u043A\u043E\u0439 \u043A\u043E\u043C\u043F\u043E\u043D\u0435\u0442 \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u043D (<Line />, <Bar /> \u0438 \u0442.\u0434.)\n // => \u0424\u0430\u0439\u043B Chart.js => \u043E\u043F\u0440\u0435\u0434\u0435\u043B\u0435\u043D\u0438\u0435 ChartComponent\n chartTypeKey: \"Line\",\n setCanvasDimensions: {\n width: \"75px\",\n height: \"35px\",\n },\n },\n },\n lineLayout: {\n options: {\n responsive: true,\n elements: {\n point: {\n radius: 4,\n pointStyle: \"circle\",\n backgroundColor: \"#FFFFFF\",\n color: \"#FFFFFF\",\n },\n line: {\n tension: 0.45,\n borderJoinStyle: \"round\",\n borderWidth: 2,\n capBezierPoints: true,\n },\n },\n },\n redraw: true,\n notLibraryOptions: {\n // \u042D\u0442\u043E\u0442 \u043A\u043B\u044E\u0447 \u0434\u043E\u043B\u0436\u0435\u043D \u0431\u044B\u0442\u044C \u0432 \u043B\u044E\u0431\u043E\u0439 \u0438\u0442\u043E\u0433\u043E\u0432\u043E\u0439 \u043A\u043E\u043D\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u0434\u043B\u044F \u043D\u043E\u0440\u043C\u0430\u043B\u044C\u043D\u043E\u0439 \u0440\u0430\u0431\u043E\u0442\u044B \u043A\u043E\u043C\u043F\u043E\u043D\u0435\u043D\u0442\u0430 \u0438\u043C\u0435\u043D\u043D\u043E \u0432 \u0442\u0430\u043A\u043E\u0439 \u0432\u043B\u043E\u0436\u0435\u043D\u043D\u043E\u0441\u0442\u0438\n // \u041D\u0430 \u043E\u0441\u043D\u043E\u0432\u0430\u043D\u0438\u0438 \u044D\u0442\u043E\u0433\u043E \u043A\u043B\u044E\u0447\u0430 \u0431\u0443\u0434\u0435\u0442 \u043F\u0440\u0438\u043D\u0438\u043C\u0430\u0442\u044C\u0441\u044F \u0440\u0435\u0448\u0435\u043D\u0438\u0435 \u043A\u0430\u043A\u043E\u0439 \u043A\u043E\u043C\u043F\u043E\u043D\u0435\u0442 \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u043D (<Line />, <Bar /> \u0438 \u0442.\u0434.)\n // => \u0424\u0430\u0439\u043B Chart.js => \u043E\u043F\u0440\u0435\u0434\u0435\u043B\u0435\u043D\u0438\u0435 ChartComponent\n chartTypeKey: \"Line\",\n },\n },\n barLayout: {\n options: {\n responsive: true,\n elements: {\n bar: {\n borderRadius: 10,\n },\n },\n },\n redraw: true,\n notLibraryOptions: {\n // \u042D\u0442\u043E\u0442 \u043A\u043B\u044E\u0447 \u0434\u043E\u043B\u0436\u0435\u043D \u0431\u044B\u0442\u044C \u0432 \u043B\u044E\u0431\u043E\u0439 \u0438\u0442\u043E\u0433\u043E\u0432\u043E\u0439 \u043A\u043E\u043D\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u0434\u043B\u044F \u043D\u043E\u0440\u043C\u0430\u043B\u044C\u043D\u043E\u0439 \u0440\u0430\u0431\u043E\u0442\u044B \u043A\u043E\u043C\u043F\u043E\u043D\u0435\u043D\u0442\u0430 \u0438\u043C\u0435\u043D\u043D\u043E \u0432 \u0442\u0430\u043A\u043E\u0439 \u0432\u043B\u043E\u0436\u0435\u043D\u043D\u043E\u0441\u0442\u0438\n // \u041D\u0430 \u043E\u0441\u043D\u043E\u0432\u0430\u043D\u0438\u0438 \u044D\u0442\u043E\u0433\u043E \u043A\u043B\u044E\u0447\u0430 \u0431\u0443\u0434\u0435\u0442 \u043F\u0440\u0438\u043D\u0438\u043C\u0430\u0442\u044C\u0441\u044F \u0440\u0435\u0448\u0435\u043D\u0438\u0435 \u043A\u0430\u043A\u043E\u0439 \u043A\u043E\u043C\u043F\u043E\u043D\u0435\u0442 \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u043D (<Line />, <Bar /> \u0438 \u0442.\u0434.)\n // => \u0424\u0430\u0439\u043B Chart.js => \u043E\u043F\u0440\u0435\u0434\u0435\u043B\u0435\u043D\u0438\u0435 ChartComponent\n chartTypeKey: \"Bar\",\n },\n },\n emptyLayout: {\n options: {\n responsive: true,\n maintainAspectRatio: false,\n scales: {\n x: { display: false },\n y: { display: false },\n },\n elements: {\n point: { radius: 0 },\n line: { borderWidth: 0 },\n },\n },\n notLibraryOptions: {\n // \u042D\u0442\u043E\u0442 \u043A\u043B\u044E\u0447 \u0434\u043E\u043B\u0436\u0435\u043D \u0431\u044B\u0442\u044C \u0432 \u043B\u044E\u0431\u043E\u0439 \u0438\u0442\u043E\u0433\u043E\u0432\u043E\u0439 \u043A\u043E\u043D\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u0434\u043B\u044F \u043D\u043E\u0440\u043C\u0430\u043B\u044C\u043D\u043E\u0439 \u0440\u0430\u0431\u043E\u0442\u044B \u043A\u043E\u043C\u043F\u043E\u043D\u0435\u043D\u0442\u0430 \u0438\u043C\u0435\u043D\u043D\u043E \u0432 \u0442\u0430\u043A\u043E\u0439 \u0432\u043B\u043E\u0436\u0435\u043D\u043D\u043E\u0441\u0442\u0438\n // \u041D\u0430 \u043E\u0441\u043D\u043E\u0432\u0430\u043D\u0438\u0438 \u044D\u0442\u043E\u0433\u043E \u043A\u043B\u044E\u0447\u0430 \u0431\u0443\u0434\u0435\u0442 \u043F\u0440\u0438\u043D\u0438\u043C\u0430\u0442\u044C\u0441\u044F \u0440\u0435\u0448\u0435\u043D\u0438\u0435 \u043A\u0430\u043A\u043E\u0439 \u043A\u043E\u043C\u043F\u043E\u043D\u0435\u0442 \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u043D (<Line />, <Bar /> \u0438 \u0442.\u0434.)\n // => \u0424\u0430\u0439\u043B Chart.js => \u043E\u043F\u0440\u0435\u0434\u0435\u043B\u0435\u043D\u0438\u0435 \u043F\u043E\u0434\u043A\u043E\u043C\u043F\u043E\u043D\u0435\u043D\u0442\u0430 ChartComponent => \u0441\u0442\u0440\u043E\u043A\u0430 const Component = ...\n chartTypeKey: \"Line\",\n },\n },\n};\n\nconst finturfChartLayouts = (() => {\n return [\"barLayout\", \"lineLayout\"].reduce(\n (acc, key) => ({\n ...acc,\n [key]: {\n ...reactChartJsOptionsLayouts[key],\n\n options: {\n ...reactChartJsOptionsLayouts[key].options,\n scales: {\n ...reactChartJsOptionsLayouts[key].options?.scales,\n x: {\n ...reactChartJsOptionsLayouts[key].options?.scales?.x,\n grid: {\n ...reactChartJsOptionsLayouts[key].options?.scales?.x?.grid,\n display: false,\n offset: true,\n },\n ticks: {\n ...reactChartJsOptionsLayouts[key].options?.scales?.y?.ticks,\n autoSkipPadding: 10,\n align: \"center\",\n color: \"#757F8C\",\n lineHeight: 18,\n font: {\n family: \"Sarabun\",\n style: \"normal\",\n weight: 400,\n size: 8,\n },\n // callback: (value, index, ticks) => {\n // console.log(value);\n // console.log(index);\n // console.log(ticks);\n // console.log('***********');\n // return value;\n // },\n },\n },\n y: {\n ...reactChartJsOptionsLayouts[key].options?.scales?.y,\n min: 0,\n // grace: '5%',\n bounds: \"data\",\n grid: {\n ...reactChartJsOptionsLayouts[key].options?.scales?.y?.grid,\n borderColor: \"#E1E8F1\",\n color: \"#E1E8F1\",\n borderDash: [5],\n // borderDashOffset: 12,\n drawTicks: false,\n z: -1,\n },\n ticks: {\n ...reactChartJsOptionsLayouts[key].options?.scales?.y?.ticks,\n autoSkipPadding: 10,\n align: \"center\",\n color: \"#A0A4B0\",\n lineHeight: 18,\n padding: 6,\n font: {\n family: \"Sarabun\",\n style: \"normal\",\n weight: 400,\n size: 10,\n },\n },\n },\n },\n },\n\n notLibraryOptions: {\n ...reactChartJsOptionsLayouts[key].notLibraryOptions,\n setCanvasDimensions: {\n height: \"194px\",\n },\n },\n },\n }),\n {},\n );\n})();\n\nconst finturfChartBar = {\n ...finturfChartLayouts.barLayout,\n options: {\n ...finturfChartLayouts.barLayout?.options,\n maintainAspectRatio: false,\n elements: {\n ...finturfChartLayouts.barLayout?.options?.elements,\n bar: {\n ...finturfChartLayouts.barLayout?.options?.elements?.bar,\n borderRadius: 4,\n },\n },\n },\n notLibraryOptions: {\n ...finturfChartLayouts.barLayout?.notLibraryOptions,\n changeData: {\n ...finturfChartLayouts.barLayout?.notLibraryOptions?.changeData,\n setMaxBarThickness: 16,\n },\n },\n};\n\nconst finturfChartLine = {\n ...finturfChartLayouts.lineLayout,\n options: {\n ...finturfChartLayouts.lineLayout?.options,\n maintainAspectRatio: false,\n elements: {\n ...finturfChartLayouts.lineLayout.options?.elements,\n point: {\n ...finturfChartLayouts.lineLayout.options?.elements?.point,\n radius: 2,\n borderColor: \"#32A784\",\n borderWidth: 4,\n },\n },\n },\n};\n\nexport const finturfReactChartJsOptions = {\n finturfChartBar: addAdditionalOptions(finturfChartBar, {\n addGradientsSettings: GRADIENTS_OBJECTS.finturf.bar,\n addTooltipOptions: FINTURF_TOOLTIP_OPTIONS,\n }),\n\n finturfLoadingModeBar: {\n ...finturfChartBar,\n\n options: {\n ...finturfChartBar.options,\n animations: {\n ...finturfChartBar.options?.animations,\n y: {\n ...finturfChartBar.options?.animations?.y,\n duration: 0,\n },\n },\n },\n\n notLibraryOptions: {\n ...finturfChartBar.notLibraryOptions,\n changeData: {\n ...finturfChartBar.notLibraryOptions?.changeData,\n addNotLibraryAnimations: [\n {\n type: \"runningColumns\",\n // duration - ms\n duration: 600,\n // default easing - 'linear',\n // easing: 'easeInOutExpo',\n // ToDo - \u043F\u0440\u0435\u0434\u0443\u0441\u043C\u043E\u0442\u0440\u0435\u0442\u044C 'auto' \u0438 default \u0434\u043B\u044F from \u0438 to\n from: 10,\n to: 75,\n columnsDelayCoef: 500,\n },\n ],\n },\n },\n },\n\n finturfChartLine: addAdditionalOptions(finturfChartLine, {\n addGradientsSettings: GRADIENTS_OBJECTS.finturf.line,\n addTooltipOptions: FINTURF_TOOLTIP_OPTIONS,\n // consoleCurrentData: true,\n }),\n\n finturfLoadingModeLine: {\n ...finturfChartLine,\n\n options: {\n ...finturfChartLine.options,\n elements: {\n ...finturfChartLine.options?.elements,\n point: {\n ...finturfChartLine.options?.elements?.point,\n radius: 4,\n borderWidth: 1,\n borderColor: \"#E1E8F1\",\n },\n },\n animations: {\n ...finturfChartLine.options?.animations,\n y: {\n ...finturfChartLine.options?.animations?.y,\n duration: 0,\n },\n },\n },\n\n notLibraryOptions: {\n ...finturfChartLine.notLibraryOptions,\n changeData: {\n ...finturfChartLine.notLibraryOptions?.changeData,\n addNotLibraryAnimations: [\n {\n type: \"runningColumns\",\n // duration - ms\n duration: 600,\n // default easing - 'linear',\n // easing: 'easeInOutExpo',\n columnsDelayCoef: 500,\n isFixExtremeColumns: true,\n },\n ],\n },\n },\n },\n\n finturfPositiveLineIcon: addAdditionalOptions(\n reactChartJsOptionsLayouts.lineIconLayout,\n {\n addGradientsSettings: GRADIENTS_OBJECTS.finturf.positiveLineIcon,\n },\n ),\n\n finturfNegativeLineIcon: addAdditionalOptions(\n reactChartJsOptionsLayouts.lineIconLayout,\n {\n addGradientsSettings: GRADIENTS_OBJECTS.finturf.negativeLineIcon,\n },\n ),\n};\n\nexport default {\n ...finturfReactChartJsOptions,\n emptyLayout: reactChartJsOptionsLayouts.emptyLayout,\n};\n", "import { clone, omitKeys } from '../../../../Functions/utils';\n\nimport { CHART_TYPES, DEFAULT_CHART_MODEL } from './Chart.constants';\nimport changeData from './datasetSetters';\nimport optionsConstructor from './optionsConstructor';\n\nexport function getChartTypeKey(model: string): string | undefined {\n return optionsConstructor[model as keyof typeof optionsConstructor]?.notLibraryOptions?.chartTypeKey\n}\n\nexport function correctModelKey(model?: string): string {\n if (!model) return DEFAULT_CHART_MODEL;\n\n const options = optionsConstructor[model as keyof typeof optionsConstructor];\n if (!options) return DEFAULT_CHART_MODEL;\n\n const chartTypeKey = getChartTypeKey(model);\n return chartTypeKey && CHART_TYPES.includes(chartTypeKey) ? model : DEFAULT_CHART_MODEL;\n}\n\nexport function getOptions(model: string): any {\n const modelOptions = optionsConstructor[model as keyof typeof optionsConstructor]\n || optionsConstructor[DEFAULT_CHART_MODEL as keyof typeof optionsConstructor];\n return omitKeys(modelOptions, ['notLibraryOptions']);\n}\n\nexport function getNotLibraryOptionsOptions(model: string): any {\n const modelOptions = optionsConstructor[model as keyof typeof optionsConstructor]\n || optionsConstructor[DEFAULT_CHART_MODEL as keyof typeof optionsConstructor];\n const { notLibraryOptions } = modelOptions || {};\n return notLibraryOptions ? clone(notLibraryOptions) : undefined;\n}\n\nexport function prepareData(model: string, data: any, chartInstance: any, addToDatasets?: any): any {\n if (!chartInstance) return data;\n\n const notLibraryOptions = getNotLibraryOptionsOptions(model);\n\n const iterator = notLibraryOptions?.changeData\n ? Object.keys(notLibraryOptions.changeData)\n : [];\n\n const changedData = iterator.reduce(\n (acc, dataChangeKey) =>\n changeData(\n acc,\n dataChangeKey,\n notLibraryOptions.changeData[dataChangeKey],\n chartInstance,\n ),\n clone(data),\n );\n\n return addToDatasets\n && typeof addToDatasets === 'object'\n && !Array.isArray(addToDatasets)\n ? {\n ...changedData,\n datasets: changedData.datasets.map((dataset: any) => ({\n ...dataset,\n ...addToDatasets,\n })),\n }\n : changedData;\n}\n", "import type { IChartProps, IChartTypeSwitcherIconProps, INotLibraryOptions } from './Chart.interface';\nimport Chart from './Chart';\n\nexport type { IChartProps, IChartTypeSwitcherIconProps, INotLibraryOptions };\nexport default Chart;\n", "import React from \"react\";\n\nimport { ArcElement, Chart as ChartJS, Tooltip } from \"chart.js\";\nimport { Pie } from \"react-chartjs-2\";\n\nimport \"./PieChart.scss\";\n\nChartJS.register(ArcElement, Tooltip);\n\nconst PieChart = ({\n data,\n cutout = \"80%\",\n resultLabel,\n resultValue = 0,\n withLegend = false,\n}) => {\n const options = {\n cutout,\n plugins: {\n legend: {\n display: withLegend,\n },\n },\n };\n\n return (\n <div className=\"pie-chart-box\" style={{ maxWidth: `320px` }}>\n <Pie data={data} options={options} />\n {Boolean(resultLabel) && (\n <div className=\"pie-chart__result\">\n <div className=\"pie-chart__result-value\">\n {resultValue}\n <span className=\"pie-chart__result-percent\">%</span>{\" \"}\n </div>\n <div className=\"pie-chart__result-label\">{resultLabel}</div>\n </div>\n )}\n </div>\n );\n};\n\nexport default PieChart;\n"],
5
5
  "mappings": "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",
6
6
  "names": ["Chart_default", "import_classnames", "import_react", "cn", "currentOptions", "import_jsx_runtime", "RC", "ChartJS", "React", "cn", "Chart_default", "import_react", "import_chart", "import_jsx_runtime", "ChartJS"]
7
7
  }