intelicoreact 1.6.22 → 1.6.24

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 (275) hide show
  1. package/dist/Atomic/FormElements/ActionAlert/ActionAlert.js +98 -1
  2. package/dist/Atomic/FormElements/AdvancedStatus/AdvancedStatus.js +48 -1
  3. package/dist/Atomic/FormElements/Calendar/Calendar.js +249 -1
  4. package/dist/Atomic/FormElements/Calendar/Calendar.props.js +4 -1
  5. package/dist/Atomic/FormElements/CheckboxInput/CheckboxInput.js +65 -1
  6. package/dist/Atomic/FormElements/CheckboxesLine/CheckboxesLine.js +52 -1
  7. package/dist/Atomic/FormElements/Datepicker/Datepicker.js +424 -1
  8. package/dist/Atomic/FormElements/Datepicker/Datepicker.props.js +4 -1
  9. package/dist/Atomic/FormElements/Datepicker/components/DatepickerCalendar.js +173 -1
  10. package/dist/Atomic/FormElements/Datepicker/components/DatepickerCalendar.props.js +4 -1
  11. package/dist/Atomic/FormElements/Dropdown/Dropdown.js +735 -1
  12. package/dist/Atomic/FormElements/Dropdown/components/DropdownLoader.js +20 -1
  13. package/dist/Atomic/FormElements/DropdownLiveSearch/DropdownLiveSearch.js +529 -1
  14. package/dist/Atomic/FormElements/FileLoader/FileLoader.js +94 -1
  15. package/dist/Atomic/FormElements/FileLoader/partial/LoadZone.js +105 -1
  16. package/dist/Atomic/FormElements/FileLoader/partial/LoadedContent.js +67 -1
  17. package/dist/Atomic/FormElements/FileLoaderDescription/FileLoaderDescription.js +247 -1
  18. package/dist/Atomic/FormElements/FileLoaderLocal/FileLoaderLocal.js +160 -1
  19. package/dist/Atomic/FormElements/FileLoaderLocalGroup/FileLoaderLocalGroup.js +193 -1
  20. package/dist/Atomic/FormElements/FormattedRawSSN/FormattedRawSSN.js +135 -1
  21. package/dist/Atomic/FormElements/FormattedRawSSN/FormattedRawSSN_old.js +116 -1
  22. package/dist/Atomic/FormElements/Input/Input.js +467 -1
  23. package/dist/Atomic/FormElements/InputCalendar/InputCalendar.js +161 -1
  24. package/dist/Atomic/FormElements/InputColor/InputColor.js +64 -1
  25. package/dist/Atomic/FormElements/InputCurrency/InputCurrency.js +200 -1
  26. package/dist/Atomic/FormElements/InputDateRange/InputDateRange.js +354 -1
  27. package/dist/Atomic/FormElements/InputDateRange/components/DateInput.js +71 -1
  28. package/dist/Atomic/FormElements/InputDateRange/components/Datepicker.js +693 -1
  29. package/dist/Atomic/FormElements/InputDateRange/components/OpenedPart.js +254 -1
  30. package/dist/Atomic/FormElements/InputDateRange/components/SelectItem.js +32 -1
  31. package/dist/Atomic/FormElements/InputDateRange/dependencies.js +200 -1
  32. package/dist/Atomic/FormElements/InputLink/InputLink.js +99 -1
  33. package/dist/Atomic/FormElements/InputMask/InputCarretPosition.js +37 -1
  34. package/dist/Atomic/FormElements/InputMask/InputMask.js +1214 -1
  35. package/dist/Atomic/FormElements/InputMask/config.js +15 -1
  36. package/dist/Atomic/FormElements/InputMask/functions.js +58 -1
  37. package/dist/Atomic/FormElements/InputMask2/InputMask2.js +674 -1
  38. package/dist/Atomic/FormElements/InputMask2/config.js +15 -1
  39. package/dist/Atomic/FormElements/InputMask2/functions.js +58 -1
  40. package/dist/Atomic/FormElements/InputMask3/InputMask3.js +766 -1
  41. package/dist/Atomic/FormElements/InputMask3/config.js +15 -1
  42. package/dist/Atomic/FormElements/InputMask3/functions.js +58 -1
  43. package/dist/Atomic/FormElements/InputWithAction/InputWithAction.js +114 -1
  44. package/dist/Atomic/FormElements/InputsRow/InputsRow.js +140 -1
  45. package/dist/Atomic/FormElements/Label/Label.js +87 -1
  46. package/dist/Atomic/FormElements/MobileCalendar/MobileCalendar.js +506 -1
  47. package/dist/Atomic/FormElements/MultiSelect/MultiSelect.js +45 -1
  48. package/dist/Atomic/FormElements/NumericInput/NumericInput.js +331 -1
  49. package/dist/Atomic/FormElements/RadioGroup/RadioGroup.js +66 -1
  50. package/dist/Atomic/FormElements/RadioGroupWithInput/RadioGroupWithInput.js +80 -1
  51. package/dist/Atomic/FormElements/RadioInput/RadioInput.js +57 -1
  52. package/dist/Atomic/FormElements/RadioRowSwitcher/RadioRowSwitcher.js +54 -1
  53. package/dist/Atomic/FormElements/RangeCalendar/RangeCalendar.js +183 -1
  54. package/dist/Atomic/FormElements/RangeInputs/RangeInputs.js +222 -1
  55. package/dist/Atomic/FormElements/RangeList/RangeList.js +175 -1
  56. package/dist/Atomic/FormElements/RangeList/partial/RangeListRow.js +43 -1
  57. package/dist/Atomic/FormElements/RangeSlider/RangeSlider.js +443 -1
  58. package/dist/Atomic/FormElements/RangeSlider2/RangeSlider2.js +858 -1
  59. package/dist/Atomic/FormElements/SwitchableRow/SwitchableRow.js +39 -1
  60. package/dist/Atomic/FormElements/Switcher/Switcher.js +59 -1
  61. package/dist/Atomic/FormElements/SwitcherCheckbox/SwitcherCheckbox.js +50 -1
  62. package/dist/Atomic/FormElements/SwitcherHide/SwitcherHide.js +44 -1
  63. package/dist/Atomic/FormElements/SwitcherRadio/SwitcherRadio.js +100 -1
  64. package/dist/Atomic/FormElements/SwitcherRange/SwitcherRange.js +52 -1
  65. package/dist/Atomic/FormElements/SwitcherRangeList/SwitcherRangeList.js +64 -1
  66. package/dist/Atomic/FormElements/SwitcherTagsDropdown/SwitcherTagsDropdown.js +170 -1
  67. package/dist/Atomic/FormElements/SwitcherTagsDropdown/partial/States.js +202 -1
  68. package/dist/Atomic/FormElements/SwitcherTextarea/SwitcherTextarea.js +67 -1
  69. package/dist/Atomic/FormElements/TagListToDropdown/TagListToDropdown.js +115 -1
  70. package/dist/Atomic/FormElements/TagsDropdown/TagsDropdown.interface.ts +2 -2
  71. package/dist/Atomic/FormElements/TagsDropdown/TagsDropdown.js +1110 -1
  72. package/dist/Atomic/FormElements/Text/Text.js +125 -1
  73. package/dist/Atomic/FormElements/TextSwitcher/TextSwitcher.js +49 -1
  74. package/dist/Atomic/FormElements/Textarea/Textarea.js +80 -1
  75. package/dist/Atomic/FormElements/TieredCheckboxes/TieredCheckboxes.js +176 -1
  76. package/dist/Atomic/FormElements/TieredCheckboxes/partial/AccordionWithCheckbox.js +62 -1
  77. package/dist/Atomic/FormElements/TimeRange/TimeRange.js +119 -1
  78. package/dist/Atomic/FormElements/UserContacts/UserContacts.js +188 -1
  79. package/dist/Atomic/FormElements/VariantsListRadio/VariantsListRadio.js +83 -1
  80. package/dist/Atomic/FormElements/VariantsListRadio/partials/VariantsListRadioItem.js +82 -1
  81. package/dist/Atomic/FormElements/WidgetPseudoTable/WidgetPseudoTable.js +101 -1
  82. package/dist/Atomic/FormElements/WidgetPseudoTable/partial/constructor.js +29 -1
  83. package/dist/Atomic/FormElements/WidgetWithSwitchableRows/WidgetWithSwitchableRows.js +113 -1
  84. package/dist/Atomic/FormElements/WidgetWithSwitchableRows/partial/constructor.js +30 -1
  85. package/dist/Atomic/Layout/Header/Header.js +85 -1
  86. package/dist/Atomic/Layout/Spinner/Spinner.js +44 -1
  87. package/dist/Atomic/UI/Accordion/Accordion.js +108 -1
  88. package/dist/Atomic/UI/Accordion/AccordionItem.js +176 -1
  89. package/dist/Atomic/UI/AccordionTable/AccordionTable.js +238 -1
  90. package/dist/Atomic/UI/AccordionText/AccordionText.js +69 -1
  91. package/dist/Atomic/UI/AdvancedTag/AdvTag.js +207 -1
  92. package/dist/Atomic/UI/AdvancedTag/AdvancedTags.js +56 -1
  93. package/dist/Atomic/UI/Alert/Alert.js +72 -1
  94. package/dist/Atomic/UI/Arrow/Arrow.js +132 -1
  95. package/dist/Atomic/UI/Box/Box.js +52 -1
  96. package/dist/Atomic/UI/Button/Button.js +47 -1
  97. package/dist/Atomic/UI/ButtonsBar/ButtonsBar.js +72 -1
  98. package/dist/Atomic/UI/Chart/Chart.js +172 -1
  99. package/dist/Atomic/UI/Chart/partial/Chart.constants.js +95 -1
  100. package/dist/Atomic/UI/Chart/partial/ChartTypeSwitcherIcon/ChartTypeSwitcherIcon.js +80 -1
  101. package/dist/Atomic/UI/Chart/partial/datasetSetters.js +188 -1
  102. package/dist/Atomic/UI/Chart/partial/optionsConstructor.js +335 -1
  103. package/dist/Atomic/UI/Chart/partial/optionsSetters.js +43 -1
  104. package/dist/Atomic/UI/Chart/partial/utils.js +60 -1
  105. package/dist/Atomic/UI/CircleProgressBar/CircleProgressBar.js +109 -1
  106. package/dist/Atomic/UI/DateTime/DateTime.js +57 -1
  107. package/dist/Atomic/UI/DebugContainer/DebugContainer.js +44 -1
  108. package/dist/Atomic/UI/DebugContainer/useDebugContainer.js +15 -1
  109. package/dist/Atomic/UI/DoubleString/DoubleString.js +102 -1
  110. package/dist/Atomic/UI/DynamicIcon/DynamicIcon.js +70 -1
  111. package/dist/Atomic/UI/ExampleChartIntegration/ExampleChartIntegration.js +221 -1
  112. package/dist/Atomic/UI/ExampleChartIntegration/partial/utils.js +106 -1
  113. package/dist/Atomic/UI/Hint/Hint.js +256 -1
  114. package/dist/Atomic/UI/Hint/partials/_utils.js +64 -1
  115. package/dist/Atomic/UI/Modal/Modal.js +179 -1
  116. package/dist/Atomic/UI/Modal/ModalHOC.js +97 -1
  117. package/dist/Atomic/UI/Modal/partials/ModalFooter.js +71 -1
  118. package/dist/Atomic/UI/Modal/partials/ModalTitle.js +110 -1
  119. package/dist/Atomic/UI/Modal/partials/useMobileModal.js +192 -1
  120. package/dist/Atomic/UI/MonoAccordion/MonoAccordion._test.js +75 -1
  121. package/dist/Atomic/UI/MonoAccordion/MonoAccordion.js +80 -1
  122. package/dist/Atomic/UI/NavLine/NavLine.js +317 -1
  123. package/dist/Atomic/UI/PageTitle/PageTitle.js +77 -1
  124. package/dist/Atomic/UI/PieChart/PieChart.js +42 -1
  125. package/dist/Atomic/UI/Price/Price.js +31 -1
  126. package/dist/Atomic/UI/PriceRange/PriceRange.js +44 -1
  127. package/dist/Atomic/UI/ProgressLine/ProgressLine.js +98 -1
  128. package/dist/Atomic/UI/Status/Status.js +67 -1
  129. package/dist/Atomic/UI/Table/Partials/TdCell.js +87 -1
  130. package/dist/Atomic/UI/Table/Partials/TdHeader.js +38 -1
  131. package/dist/Atomic/UI/Table/Partials/TdRow.js +99 -1
  132. package/dist/Atomic/UI/Table/Partials/TdTitle.js +52 -1
  133. package/dist/Atomic/UI/Table/Table.js +63 -1
  134. package/dist/Atomic/UI/Table/TdTypes/TdActions.js +80 -1
  135. package/dist/Atomic/UI/Table/TdTypes/TdPriority.js +28 -1
  136. package/dist/Atomic/UI/Table/TdTypes/TdRange.js +13 -1
  137. package/dist/Atomic/UI/Table/TdTypes/TdWeight.js +53 -1
  138. package/dist/Atomic/UI/Tag/Tag.js +167 -1
  139. package/dist/Atomic/UI/TagList/TagList.js +251 -1
  140. package/dist/Atomic/UI/UserBox/UserBox.js +86 -1
  141. package/dist/Atomic/UI/WizardStepper/constructor.js +84 -1
  142. package/dist/Atomic/UI/WizardStepper/index.js +3 -1
  143. package/dist/Atomic/UI/WizardStepper/ui/StateIcon/StateIcon.js +37 -1
  144. package/dist/Atomic/UI/WizardStepper/ui/StateIcon/index.js +3 -1
  145. package/dist/Atomic/UI/WizardStepper/ui/StepRow/StepRow.js +61 -1
  146. package/dist/Atomic/UI/WizardStepper/ui/StepRow/index.js +3 -1
  147. package/dist/Atomic/UI/WizardStepper/ui/StepWrapper/StepWrapper.js +39 -1
  148. package/dist/Atomic/UI/WizardStepper/ui/StepWrapper/index.js +3 -1
  149. package/dist/Atomic/UI/WizardStepper/ui/icons.js +49 -1
  150. package/dist/Atomic/UI/WizardStepper/ui/index.js +3 -1
  151. package/dist/Classes/AbortableFetch.js +454 -1
  152. package/dist/Classes/AnimatedHandler.js +47 -1
  153. package/dist/Classes/RESTAPI/index.js +228 -1
  154. package/dist/Classes/RESTAPI/partials/AbortableFetch.js +457 -1
  155. package/dist/Classes/RESTAPI/partials/ApiBase.js +48 -1
  156. package/dist/Classes/RESTAPI/partials/ApiRequestCreators.js +112 -1
  157. package/dist/Classes/RESTAPI/partials/ApiUtils.js +189 -1
  158. package/dist/Classes/RESTAPI/partials/CredentialsProcessing.js +252 -1
  159. package/dist/Classes/RESTAPI/partials/Utils.js +92 -1
  160. package/dist/Classes/RESTAPI/partials/_outerDependencies.js +3 -1
  161. package/dist/Classes/RESTAPI/partials/_utils.js +197 -1
  162. package/dist/Constants/index.constants.js +78 -1
  163. package/dist/Functions/Portal.js +22 -1
  164. package/dist/Functions/customEventListener.js +96 -1
  165. package/dist/Functions/dateTime.js +149 -1
  166. package/dist/Functions/fieldValueFormatters.js +405 -1
  167. package/dist/Functions/guards/assertions.js +294 -1
  168. package/dist/Functions/guards/safeValue.js +75 -1
  169. package/dist/Functions/guards/typeGuards.js +373 -1
  170. package/dist/Functions/hooks/useFormFieldsChangesManager.js +95 -1
  171. package/dist/Functions/locale/createTranslator.js +32 -1
  172. package/dist/Functions/operations.js +130 -1
  173. package/dist/Functions/presets/inputMaskPresets.js +170 -1
  174. package/dist/Functions/presets/inputPresets.js +60 -1
  175. package/dist/Functions/presets/mobileKeyboardTypesPresets.js +45 -1
  176. package/dist/Functions/schemas.js +31 -1
  177. package/dist/Functions/useBodyScrollLock.js +17 -1
  178. package/dist/Functions/useClickOutside.js +15 -1
  179. package/dist/Functions/useDebounce.js +17 -1
  180. package/dist/Functions/useFieldFocus.js +84 -1
  181. package/dist/Functions/useFormTools/form-drivers/ArrayWithObjects.js +39 -1
  182. package/dist/Functions/useFormTools/form-drivers/ObjectWithIterableObjects.js +159 -1
  183. package/dist/Functions/useFormTools/form-drivers/ObjectWithNamedKeyObjects.js +78 -1
  184. package/dist/Functions/useFormTools/functions/General.js +134 -1
  185. package/dist/Functions/useFormTools/functions/RenderFields.js +111 -1
  186. package/dist/Functions/useFormTools/functions/usePrevious.js +12 -1
  187. package/dist/Functions/useFormTools/index.js +778 -1
  188. package/dist/Functions/useInputHighlightError.js +67 -1
  189. package/dist/Functions/useIsMobile/useIsMobile.js +33 -1
  190. package/dist/Functions/useKeyPress/useHandleKeyPress.js +52 -1
  191. package/dist/Functions/useKeyPress/useKeyPress.js +52 -1
  192. package/dist/Functions/useLocalStorage.js +34 -1
  193. package/dist/Functions/useLocationParams.js +27 -1
  194. package/dist/Functions/useMediaQuery.js +17 -1
  195. package/dist/Functions/useMetaInfo.js +43 -1
  196. package/dist/Functions/useMouseUpOutside.js +16 -1
  197. package/dist/Functions/useOnlineStatus.js +29 -1
  198. package/dist/Functions/usePasswordChecker.js +110 -1
  199. package/dist/Functions/usePrevious.js +12 -1
  200. package/dist/Functions/useResize.js +31 -1
  201. package/dist/Functions/useScrollTo.js +17 -1
  202. package/dist/Functions/useToggle.js +17 -1
  203. package/dist/Functions/utils.js +522 -1
  204. package/dist/Langs.js +168 -1
  205. package/dist/Molecular/CustomIcons/components/AffiliateNetworks.js +21 -1
  206. package/dist/Molecular/CustomIcons/components/AlertCircle.js +23 -1
  207. package/dist/Molecular/CustomIcons/components/AppStore.js +29 -1
  208. package/dist/Molecular/CustomIcons/components/Arrow.js +32 -1
  209. package/dist/Molecular/CustomIcons/components/ArrowDown.js +17 -1
  210. package/dist/Molecular/CustomIcons/components/ArrowLeft.js +22 -1
  211. package/dist/Molecular/CustomIcons/components/ArrowRight.js +22 -1
  212. package/dist/Molecular/CustomIcons/components/ArrowUp.js +17 -1
  213. package/dist/Molecular/CustomIcons/components/Bell.js +15 -1
  214. package/dist/Molecular/CustomIcons/components/Button.js +12 -1
  215. package/dist/Molecular/CustomIcons/components/Campaigns.js +16 -1
  216. package/dist/Molecular/CustomIcons/components/Check.js +14 -1
  217. package/dist/Molecular/CustomIcons/components/Check2.js +12 -1
  218. package/dist/Molecular/CustomIcons/components/ChevronDown.js +12 -1
  219. package/dist/Molecular/CustomIcons/components/ChevronDownDisabled.js +11 -1
  220. package/dist/Molecular/CustomIcons/components/ChevronLeft.js +11 -1
  221. package/dist/Molecular/CustomIcons/components/ChevronRight.js +11 -1
  222. package/dist/Molecular/CustomIcons/components/ChevronUp.js +11 -1
  223. package/dist/Molecular/CustomIcons/components/ChevronUpDown.js +27 -1
  224. package/dist/Molecular/CustomIcons/components/Close.js +14 -1
  225. package/dist/Molecular/CustomIcons/components/ColumnsOrder.js +17 -1
  226. package/dist/Molecular/CustomIcons/components/Delete.js +16 -1
  227. package/dist/Molecular/CustomIcons/components/Edit.js +15 -1
  228. package/dist/Molecular/CustomIcons/components/Email.js +31 -1
  229. package/dist/Molecular/CustomIcons/components/FinturfLogo.js +18 -1
  230. package/dist/Molecular/CustomIcons/components/FinturfLogo2.js +35 -1
  231. package/dist/Molecular/CustomIcons/components/Flows.js +15 -1
  232. package/dist/Molecular/CustomIcons/components/Gift.js +25 -1
  233. package/dist/Molecular/CustomIcons/components/GoogleAuth.js +29 -1
  234. package/dist/Molecular/CustomIcons/components/GooglePlay.js +29 -1
  235. package/dist/Molecular/CustomIcons/components/HelpCircle.js +19 -1
  236. package/dist/Molecular/CustomIcons/components/HelpCircle2.js +20 -1
  237. package/dist/Molecular/CustomIcons/components/HelpCircleFilled.js +19 -1
  238. package/dist/Molecular/CustomIcons/components/Home.js +16 -1
  239. package/dist/Molecular/CustomIcons/components/Home2.js +22 -1
  240. package/dist/Molecular/CustomIcons/components/Key.js +23 -1
  241. package/dist/Molecular/CustomIcons/components/Landers.js +20 -1
  242. package/dist/Molecular/CustomIcons/components/Lock.js +15 -1
  243. package/dist/Molecular/CustomIcons/components/Mail.js +26 -1
  244. package/dist/Molecular/CustomIcons/components/Mastercard.js +73 -1
  245. package/dist/Molecular/CustomIcons/components/Minus.js +25 -1
  246. package/dist/Molecular/CustomIcons/components/Offers.js +16 -1
  247. package/dist/Molecular/CustomIcons/components/Pause.js +28 -1
  248. package/dist/Molecular/CustomIcons/components/PayPal.js +41 -1
  249. package/dist/Molecular/CustomIcons/components/PayPalLightLarge.js +28 -1
  250. package/dist/Molecular/CustomIcons/components/Phone.js +30 -1
  251. package/dist/Molecular/CustomIcons/components/Play.js +25 -1
  252. package/dist/Molecular/CustomIcons/components/Plus.js +25 -1
  253. package/dist/Molecular/CustomIcons/components/Profile.js +16 -1
  254. package/dist/Molecular/CustomIcons/components/QRCode.js +29 -1
  255. package/dist/Molecular/CustomIcons/components/Rectangle.js +12 -1
  256. package/dist/Molecular/CustomIcons/components/Revert.js +13 -1
  257. package/dist/Molecular/CustomIcons/components/Star.js +14 -1
  258. package/dist/Molecular/CustomIcons/components/Star2.js +16 -1
  259. package/dist/Molecular/CustomIcons/components/TrafficSources.js +14 -1
  260. package/dist/Molecular/CustomIcons/components/Trash.js +15 -1
  261. package/dist/Molecular/CustomIcons/components/TrashRed.js +15 -1
  262. package/dist/Molecular/CustomIcons/components/Triggers.js +15 -1
  263. package/dist/Molecular/CustomIcons/components/User.js +25 -1
  264. package/dist/Molecular/CustomIcons/components/Visa.js +31 -1
  265. package/dist/Molecular/CustomIcons/components/X.js +12 -1
  266. package/dist/Molecular/CustomIcons/index.js +61 -1
  267. package/dist/Molecular/FormElement/FormElement.js +54 -1
  268. package/dist/Molecular/FormWithDependOn/FormWithDependOn.js +184 -1
  269. package/dist/Molecular/FormWithDependOn/partials/_utils.js +53 -1
  270. package/dist/Molecular/InputAddress/InputAddress.js +626 -1
  271. package/dist/Molecular/InputPassword/InputPassword.js +48 -1
  272. package/dist/index.js +104 -1
  273. package/package.json +1 -1
  274. package/dist/Molecular/InputAddress/InputAddress.d.ts +0 -26
  275. package/dist/Molecular/InputAddress/InputAddress.js.map +0 -1
@@ -1 +1,858 @@
1
- function n(n,t){(null==t||t>n.length)&&(t=n.length);for(var r=0,e=Array(t);r<t;r++)e[r]=n[r];return e}function t(n,t,r){return t in n?Object.defineProperty(n,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):n[t]=r,n}function r(n){for(var r=1;r<arguments.length;r++){var e=null!=arguments[r]?arguments[r]:{},i=Object.keys(e);"function"==typeof Object.getOwnPropertySymbols&&(i=i.concat(Object.getOwnPropertySymbols(e).filter(function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),i.forEach(function(r){t(n,r,e[r])})}return n}function e(n,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(n,Object.getOwnPropertyDescriptors(t)):(function(n,t){var r=Object.keys(n);if(Object.getOwnPropertySymbols){var e=Object.getOwnPropertySymbols(n);r.push.apply(r,e)}return r})(Object(t)).forEach(function(r){Object.defineProperty(n,r,Object.getOwnPropertyDescriptor(t,r))}),n}function i(n,t){return function(n){if(Array.isArray(n))return n}(n)||function(n,t){var r,e,i=null==n?null:"undefined"!=typeof Symbol&&n[Symbol.iterator]||n["@@iterator"];if(null!=i){var o=[],l=!0,a=!1;try{for(i=i.call(n);!(l=(r=i.next()).done)&&(o.push(r.value),!t||o.length!==t);l=!0);}catch(n){a=!0,e=n}finally{try{l||null==i.return||i.return()}finally{if(a)throw e}}return o}}(n,t)||l(n,t)||function(){throw TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function o(t){return function(t){if(Array.isArray(t))return n(t)}(t)||function(n){if("undefined"!=typeof Symbol&&null!=n[Symbol.iterator]||null!=n["@@iterator"])return Array.from(n)}(t)||l(t)||function(){throw TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function l(t,r){if(t){if("string"==typeof t)return n(t,r);var e=Object.prototype.toString.call(t).slice(8,-1);if("Object"===e&&t.constructor&&(e=t.constructor.name),"Map"===e||"Set"===e)return Array.from(e);if("Arguments"===e||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(e))return n(t,r)}}import{jsx as a,jsxs as u}from"react/jsx-runtime";import{useEffect as c,useLayoutEffect as d,useMemo as s,useRef as v,useState as f}from"react";import _ from"classnames";import{ChevronLeft as g,ChevronRight as m,Plus as p,X as h}from"react-feather";import b from"../../../Functions/useIsMobile/useIsMobile";import{compare as O}from"../../../Functions/utils";import"./RangeSlider2.scss";var y="range-slider2",N=Object.freeze({NO_COLLISION:0,LEFT_COLLISSION:-1,RIGHT_COLLISION:1,BOTH_COLLISION:2}),k=N.LEFT_COLLISSION,I=N.RIGHT_COLLISION,C=N.BOTH_COLLISION,L=N.NO_COLLISION,S=Object.freeze({ASSIGN_TO_LEFT:-1,ASSIGN_TO_RIGHT:1}),T=S.ASSIGN_TO_LEFT,j=S.ASSIGN_TO_RIGHT,w=Object.freeze({FROM:"from",TO:"to",BOTH:"both"});export default function x(n){var l,N,S,x,M,E,R,F,P,A,H,B=n.min,D=void 0===B?300:B,G=n.max,V=void 0===G?850:G,z=n.minRange,U=void 0===z?50:z,X=n.dividersRange,$=void 0===X?50:X,q=n.pointValueType,J=void 0===q?w.FROM:q,K=n.precision,Q=void 0===K?0:K,W=n.step,Y=void 0===W?5:W,Z=n.className,nn=n.value,nt=void 0===nn?[]:nn,nr=n.onChange,ne=void 0===nr?function(){}:nr,ni=n.transformDataOnConcat,no=void 0===ni?function(n,t){return[]}:ni,nl=b().isMobile,na=i(f([]),2),nu=na[0],nc=na[1],nd=v(null),ns=v(null),nv=i(f(0),2),nf=nv[0],n_=nv[1],ng=i(f(0),2),nm=ng[0],np=ng[1],nh=i(f(0),2),nb=nh[0],nO=nh[1],ny=i(f(nt),2),nN=ny[0],nk=ny[1],nI=function(n){var t=n.from,r=n.to,e=n.label,i=n.value,l=n.data,a=void 0===l?[]:l,u=n.id,c=void 0===u?null:u;return nk(function(n){return c||(c=-(((null==n?void 0:n.length)+1)*1)),o(n).concat([{id:c,from:t,to:r,label:e,data:a,value:Number.isInteger(i)?i:0}]).sort(function(n,t){return n.from-t.from})})},nC=function(n){var t=n.from,r=n.to,e=n.label,i=n.value,l=n.data,a=n.id;return nk(function(n){var u=o(n),c=null==u?void 0:u.find(function(n){return n.id===a});return c&&(c.from=null!=t?t:null==c?void 0:c.from,c.to=null!=r?r:null==c?void 0:c.to,c.label=null!=e?e:null==c?void 0:c.label,c.value=void 0!==i?Number.isInteger(i)?i:0:null==c?void 0:c.value,c.data=void 0!==l?l:null==c?void 0:c.data),u})},nL=function(n){var t,r=null==nx||null==(t=nx.find(function(t){return t.id===(null==n?void 0:n.id)}))?void 0:t.value,e=null==n?void 0:n.value,i=null==nN?void 0:nN.find(function(n){return(null==n?void 0:n.to)===e}),o=null==nN?void 0:nN.find(function(n){return(null==n?void 0:n.from)===e+1});i&&o&&(nC({from:null==i?void 0:i.from,to:r,id:null==i?void 0:i.id}),nC({from:r+1,to:null==o?void 0:o.to,id:null==o?void 0:o.id}))},nS=function(n){var t=null==nN?void 0:nN.find(function(t){var r=t.from,e=t.to;return r+U<=n+1&&n<=e-U});if(t){var i=n6||{},o=i.value,l=void 0===o?0:o,a=i.label,u=i.data;nI({value:te===j?l:0,data:te===j?u:null,label:a,from:n+1,to:null==t?void 0:t.to,id:null}),nC(e(r({},t),{value:te===T?l:0,data:te===T?u:null,label:a,to:n})),tn&&tl()}},nT=function(n){var t=i(null==nN?void 0:nN.filter(function(t){var r=t.from,e=t.to;return r===n+1||n===e}),2),r=t[0],e=t[1],o=no(r,e),l=o.data,a=o.value;nC({from:null==r?void 0:r.from,to:null==e?void 0:e.to,id:null==r?void 0:r.id,data:l,value:a}),nj(null==e?void 0:e.id)},nj=function(n){return nk(function(t){return null==t?void 0:t.filter(function(t){return(null==t?void 0:t.id)!==n})})},nw=i(f([]),2),nx=nw[0],nM=nw[1],nE=function(n){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=t.isFixed,e=void 0!==r&&r,i=t.isHidden,l=void 0!==i&&i,a=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},u=a.withRange,c=void 0===u||u,d=arguments.length>3&&void 0!==arguments[3]?arguments[3]:nx.length;return nM(function(t){c&&nS(n);var r,i=o(t),a=(null==t?void 0:t.length)?(r=Math).max.apply(r,o(null==t?void 0:t.map(function(n){return n.id})))+1:0;return i.splice(d,0,{id:a,value:n,isFixed:e,isHidden:l}),i.sort(function(n,t){return n.value<t.value?-1:1})})},nR=i(f(null),2),nF=nR[0],nP=nR[1],nA=i(f(null),2),nH=nA[0],nB=nA[1],nD=i(f(null),2),nG=nD[0],nV=nD[1],nz=i(f(null),2),nU=nz[0],nX=nz[1],n$=i(f(!1),2),nq=n$[0],nJ=n$[1],nK=i(f(!1),2),nQ=nK[0],nW=nK[1],nY=function(){return nW(!0)},nZ=function(){return nW(!1)},n0=i(f(!1),2),n1=n0[0],n2=n0[1],n3=i(f(null),2),n5=n3[0],n8=n3[1],n4=i(f(null),2),n6=n4[0],n7=n4[1],n9=i(f(!1),2),tn=n9[0],tt=n9[1],tr=i(f(T),2),te=tr[0],ti=tr[1],to=function(n,t){n8(n),n7(t),tt(!0)},tl=function(n){null==n||n.stopPropagation(),null==n||n.preventDefault(),n8(null),n7(null),tt(!1),ti(T)},ta=i(f(0),2),tu=ta[0],tc=ta[1],td=function(n){return(n-D)/tu},ts=function(n){var t=(n-nm)*tu+D;return(t-=t%Y)<D&&(t=D),t>V&&(t=V),t-1},tv=function(n,t){if(n<=0)return t;var r,e,i=[(null==nx||null==(r=nx[n-1])?void 0:r.value)+U-1,(null==nx||null==(e=nx[n+1])?void 0:e.value)-U-1],o=i[0],l=i[1];return o===l?C:t===o?k:t===l?I:L},tf=function(n,t){if(n<=0)return t;var r,e,i=[(null==nx||null==(r=nx[n-1])?void 0:r.value)+U-1,(null==nx||null==(e=nx[n+1])?void 0:e.value)-U-1],o=i[0],l=i[1];return t<o?o:t>l?l:t},t_=function(n){var t=tg(n),r=tp(t);if(!r)return 0;var e=r.from,i=r.to,o=e+U-1,l=i-U-1;return o===l?C:t<=o?k:t>=l?I:L},tg=function(n){var t=ts(n),i=null==(o=tm())?void 0:o.reduce(function(n,r){var e=r.from,i=r.to;return i-e+1<=2*U&&e<=t&&t<=i?null:e<=t&&t<=e+U?e+U-1:i-U<=t&&t<=i?i-U-1:n},t);if(!i){var o,l,a,u=null==(a=tm())||null==(l=a.filter(function(n){var t=n.from;return n.to-t+1>=2*U}))?void 0:l.reduce(function(n,i){var o=Math.abs((i.to+i.from)/2-t);return!n||o<(null==n?void 0:n.distance)?e(r({},i),{distance:o}):n},null);u&&((null==u?void 0:u.to)<t&&(i=(null==u?void 0:u.to)-U-1),t<(null==u?void 0:u.from)&&(i=(null==u?void 0:u.from)+U-1))}return i},tm=function(){return nx.map(function(n){return n.value}).sort().reduce(function(n,t,r,e){return 0!==r&&n.push({from:e[r-1],to:t}),n},[])},tp=function(n){return null==nN?void 0:nN.find(function(t){var r=t.from,e=t.to;return r<=n&&n<=e})},th=function(n){switch(J){case w.FROM:return"".concat(n+1);case w.TO:return"".concat(n);case w.BOTH:default:return"".concat(n," | ").concat(n+1)}},tb=function(n,t){var i,l=!(arguments.length>2)||void 0===arguments[2]||arguments[2];l&&(t=parseInt(parseFloat(t)*Math.pow(10,Q),10)/Math.pow(10,Q)),isNaN(t)&&(t=0),i=t,nM(function(t){var l=o(t);return l[n]=e(r({},l[n]),{value:i}),l})},tO=function(n,t){nB(n.target),nV(t),nX(r({},nx[t]))},ty=function(n){if((null==n?void 0:n.cancelable)&&(null==n||n.preventDefault()),null==n||n.stopPropagation(),!nG||!nH)return!1;nq||nJ(!0);var t,r,e=(null!=(r=null==n||null==(t=n.touches)?void 0:t[0])?r:n).clientX,i=((null==nH?void 0:nH.getBoundingClientRect())||{}).width;if(e<nm||e>nm+nf+i)return!1;var o=tf(nG,ts(e));tb(nG,o)},tN=function(){setTimeout(function(){nB(null),nV(null)},1)};c(function(){return nl?document.addEventListener("touchend",tN):document.addEventListener("mouseup",tN),function(){nl?document.removeEventListener("touchend",tN):document.removeEventListener("mouseup",tN)}},[]),c(function(){var n;!nH&&nq?(null==nF||nF.abort(),nJ(!1),nP(null)):nH&&!nq&&nP(new AbortController),null==(n=document.getElementsByTagName("body")[0].classList)||n[nH?"add":"remove"]("moving-cursor")},[nH]),c(function(){return nF&&(nl?document.addEventListener("touchmove",ty,{signal:null==nF?void 0:nF.signal}):document.addEventListener("mousemove",ty,{signal:null==nF?void 0:nF.signal})),function(){nl?document.removeEventListener("touchmove",ty,{signal:null==nF?void 0:nF.signal,passive:!1}):document.removeEventListener("mousemove",ty,{signal:null==nF?void 0:nF.signal})}},[nF]),d(function(){var n,t=(null==nd||null==(n=nd.current)?void 0:n.getBoundingClientRect())||{},r=t.width,e=t.x;tc((V-D)/r),n_(r),np(e)},[nd]),c(function(){ne(nN,nx)},[nN]),c(function(){if(nk([]),nM([]),(null==nu?void 0:nu.length)===0)nI({from:D,to:V}),nE(D,{isFixed:!0,isHidden:!0}),nE(V,{isFixed:!0,isHidden:!0});else{var n,t,e;null==nu||null==(e=nu.reduce(function(n,t){return nI(r({},t)),n.find(function(n){return n===(null==t?void 0:t.from)})||n.splice((null==n?void 0:n.length)-1,0,null==t?void 0:t.from),n.find(function(n){return n===(null==t?void 0:t.to)})||n.splice((null==n?void 0:n.length)-1,0,null==t?void 0:t.to),n},[]))||null==(t=e.sort(function(n,t){return n<t?-1:1}))||null==(n=t.filter(function(n,t,r){return 0===t||n-1!==r[t-1]}))||n.map(function(n,t,r){if(0===t||n-1!==r[t-1]){var e=n===D||n===V;nE(n,{isFixed:e,isHidden:e},{withRange:!1})}})}},[nu]),c(function(){O(nt,nu)||nc(nt)},[nt]),c(function(){!nG&&nU&&(nL(r({},nU)),nX(null))},[nG]);var tk=function(n){var t,r,e=n.isCollisionVisible,i=n.isLeftCollision,o=n.isRightCollision,l=n.isBothCollision,u=n.className,c=parseInt((V-D)/U,10),d=(null!=(r=null==nd||null==(t=nd.current)?void 0:t.getBoundingClientRect())?r:{}).width/c-4,s=e?l?2*d:i||o?d:0:0;return a("div",{className:_("collision",u,{"collision--visible":e,"collision--left":i&&!l,"collision--right":o&&!l,"collision--both":l}),style:{width:s}})},tI=function(){var n=n6||{},t=n.label,r=n.value;return u("div",{className:"".concat(y,"__track__range-triggers--add-trigger__settings"),children:[u("div",{className:"".concat(y,"__track__range-triggers--add-trigger__settings-body"),children:[a("div",{className:"".concat(y,"__track__range-triggers--add-trigger__settings-body--assign-left"),onClick:function(n){n.stopPropagation(),ti(T)},"attr-is-active":"".concat(te===T),children:a(g,{})}),u("div",{className:"".concat(y,"__track__range-triggers--add-trigger__settings-body--lenders-count"),children:[t,r]}),a("div",{className:"".concat(y,"__track__range-triggers--add-trigger__settings-body--assign-right"),onClick:function(n){n.stopPropagation(),ti(j)},"attr-is-active":"".concat(te===j),children:a(m,{})})]}),u("div",{className:"".concat(y,"__track__range-triggers--add-trigger__settings-actions"),children:[a("div",{className:"".concat(y,"__track__range-triggers--add-trigger__settings-actions--cancel"),onClick:function(n){return tl(n)},children:"Cancel"}),a("div",{className:"".concat(y,"__track__range-triggers--add-trigger__settings-actions--apply"),onClick:function(n){n.stopPropagation(),nE(n5)},children:"Apply"})]})]})},tC=s(function(){for(var n=parseInt((V-D)/$,10),t=[],r=0;r<n;++r)t.push(function(){var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0;return a("div",{className:"".concat(y,"__track__line__dividers--item")},n)}(r));return a("div",{className:"".concat(y,"__track__line__dividers"),children:t})},[nd,U,D,V]);return a("div",{className:y,onMouseOver:function(){return n2(!0)},onMouseLeave:function(){return n2(!1)},onMouseMove:function(n){return nO(null==n?void 0:n.clientX)},children:u("div",{className:_("".concat(y,"__track"),Z),ref:nd,children:[u("div",{className:"".concat(y,"__track__line"),children:[a("div",{className:"".concat(y,"__track__line__extremum--min"),children:D}),tC,a("div",{className:"".concat(y,"__track__line__extremum--max"),children:V})]}),(N=!(null==nx?void 0:nx.filter(function(n){return!n.isHidden}).length),S=tn?td(n5):nb,x=tn?n5:N&&!n1?(D+V)/2-1:tg(S),E=(M=tn?L:t_(S))===k,R=M===I,F=M===C,P=(E||R||F)&&!(N&&!n1),A=td(x),H=tp(x),(null==nx?void 0:nx.find(function(n){return n.value===x}))||nH||nQ?null:u("div",{className:_("".concat(y,"__track__range-triggers--add-trigger"),(t(l={},"".concat(y,"__track__range-triggers--add-trigger--fixed"),tn),t(l,"".concat(y,"__track__range-triggers--add-trigger--force-visible"),N),t(l,"".concat(y,"__track__range-triggers--add-trigger--moved-smoothly"),N&&!n1),l)),style:{left:"".concat(A,"px")},onClick:function(){return(null==H?void 0:H.value)?to(x,H):nE(x)},children:[a("div",{ref:ns,className:_("".concat(y,"__track__range-triggers--add-trigger__point"),t({},"".concat(y,"__track__range-triggers--add-trigger__point--shake"),P)),"data-point-value":th(x),children:a(p,{})}),tn&&tI(),tk({isCollisionVisible:P,isLeftCollision:E,isRightCollision:R,isBothCollision:F})]})),a("div",{className:"".concat(y,"__track__range-triggers"),children:null==nx?void 0:nx.map(function(n,i){var l,c=n.value,d=n.isFixed,s=n.isHidden,v=tv(i,c),f=v===k,g=v===I,m=v===C,p=i===nG,b=p&&nq&&(f||g||m);return u("div",e(r({style:{left:td(c).toString().concat("px")},className:_("".concat(y,"__track__range-triggers--trigger"),(t(l={},"".concat(y,"__track__range-triggers--trigger__moving"),p),t(l,"".concat(y,"__track__range-triggers--trigger__fixed"),d),t(l,"".concat(y,"__track__range-triggers--trigger__hidden"),s),l))},nl?{}:{onMouseOver:nY,onMouseLeave:nZ}),{children:[a("div",r({className:_("".concat(y,"__track__range-triggers--trigger__point"),t({},"".concat(y,"__track__range-triggers--trigger__point--shake"),b)),"data-point-value":th(c)},nl?{onTouchStart:function(n){return tO(n,i)},onTouchEnd:tN}:{onMouseDown:function(n){return tO(n,i)},onMouseUp:tN})),a("div",{className:_("".concat(y,"__track__range-triggers--trigger__actions"),t({},"".concat(y,"__track__range-triggers--trigger__actions--hidden"),p)),children:a("div",{className:"".concat(y,"__track__range-triggers--trigger__actions--remove"),onClick:function(){return nM(function(n){nT(null==(t=n[i])?void 0:t.value);var t,r=o(n);return r.splice(i,1),r})},children:a(h,{})})}),tk({isCollisionVisible:b,isLeftCollision:f,isRightCollision:g,isBothCollision:m,className:"".concat(y,"__track__range-triggers--trigger__collision")})]}),"".concat(y,"__track__range-triggers--trigger-").concat(i))})}),a("div",{className:_("".concat(y,"__track__ranges-value")),children:null==nN?void 0:nN.map(function(n,t){var r=n.from,e=n.to,i=n.label,o=n.value;if(!o)return null;var l=td((e+r)/2);return u("div",{className:_("".concat(y,"__track__ranges-value--item")),style:{left:"".concat(l,"px")},children:[a("div",{className:_("".concat(y,"__track__ranges-value--item__label")),children:i}),a("div",{className:_("".concat(y,"__track__ranges-value--item__value")),children:o})]},"".concat(y,"__track__ranges-value--item-").concat(t))})})]})})}
1
+ import React, {
2
+ useEffect,
3
+ useLayoutEffect,
4
+ useMemo,
5
+ useRef,
6
+ useState,
7
+ } from "react";
8
+
9
+ import cn from "classnames";
10
+ import { ChevronLeft, ChevronRight, Plus, X } from "react-feather";
11
+
12
+ import useIsMobile from "../../../Functions/useIsMobile/useIsMobile";
13
+ import { compare } from "../../../Functions/utils";
14
+
15
+ import "./RangeSlider2.scss";
16
+
17
+ const COMPONENT_CLASS = "range-slider2";
18
+ const { LEFT_COLLISSION, RIGHT_COLLISION, BOTH_COLLISION, NO_COLLISION } =
19
+ Object.freeze({
20
+ NO_COLLISION: 0,
21
+ LEFT_COLLISSION: -1,
22
+ RIGHT_COLLISION: 1,
23
+ BOTH_COLLISION: 2,
24
+ });
25
+ const { ASSIGN_TO_LEFT, ASSIGN_TO_RIGHT } = Object.freeze({
26
+ ASSIGN_TO_LEFT: -1,
27
+ ASSIGN_TO_RIGHT: 1,
28
+ });
29
+
30
+ const POINT_VALUE_TYPES = Object.freeze({
31
+ FROM: "from",
32
+ TO: "to",
33
+ BOTH: "both",
34
+ });
35
+
36
+ export default function RangeSlider2({
37
+ min = 300,
38
+ max = 850,
39
+ minRange = 50,
40
+ dividersRange = 50,
41
+ pointValueType = POINT_VALUE_TYPES.FROM,
42
+ precision = 0,
43
+ step = 5,
44
+ className,
45
+ value = [],
46
+ onChange = () => {},
47
+ transformDataOnConcat = (d1, d2) => {
48
+ return [];
49
+ },
50
+ }) {
51
+ const { isMobile } = useIsMobile();
52
+ const [protectedValue, setProtectedValue] = useState([]);
53
+
54
+ const trackRef = useRef(null);
55
+ const addTriggerRef = useRef(null);
56
+
57
+ const [trackWidth, setTrackWidth] = useState(0);
58
+ const [trackPosition, setTrackPosition] = useState(0);
59
+
60
+ const [mouseTrackPosition, setMouseTrackPosition] = useState(0);
61
+
62
+ const prepareValue = (value) => {
63
+ return parseInt(parseFloat(value) * 10 ** precision, 10) / 10 ** precision;
64
+ };
65
+
66
+ const [ranges, setRanges] = useState(value);
67
+ const addRange = ({ from, to, label, value, data = [], id = null }) =>
68
+ setRanges((ranges) => {
69
+ if (!id) {
70
+ id = (ranges?.length + 1) * -1;
71
+ }
72
+
73
+ return [
74
+ ...ranges,
75
+ {
76
+ id,
77
+ from,
78
+ to,
79
+ label,
80
+ data,
81
+ value: Number.isInteger(value) ? value : 0,
82
+ },
83
+ ].sort((a, b) => a.from - b.from);
84
+ });
85
+ const updateRange = ({ from, to, label, value, data, id }) =>
86
+ setRanges((ranges) => {
87
+ const newRanges = [...ranges];
88
+ const range = newRanges?.find(({ id: rangeId }) => rangeId === id);
89
+
90
+ if (range) {
91
+ range.from = from ?? range?.from;
92
+ range.to = to ?? range?.to;
93
+ range.label = label ?? range?.label;
94
+ range.value =
95
+ value !== undefined
96
+ ? Number.isInteger(value)
97
+ ? value
98
+ : 0
99
+ : range?.value;
100
+ range.data = data !== undefined ? data : range?.data;
101
+ }
102
+
103
+ return newRanges;
104
+ });
105
+ const updateRangesByTrigger = (trigger) => {
106
+ const newValue = triggers?.find(({ id }) => id === trigger?.id)?.value;
107
+ const oldValue = trigger?.value;
108
+
109
+ const leftRange = ranges?.find((range) => range?.to === oldValue);
110
+ const rightRange = ranges?.find((range) => range?.from === oldValue + 1);
111
+
112
+ if (leftRange && rightRange) {
113
+ updateRange({ from: leftRange?.from, to: newValue, id: leftRange?.id });
114
+ updateRange({
115
+ from: newValue + 1,
116
+ to: rightRange?.to,
117
+ id: rightRange?.id,
118
+ });
119
+ }
120
+ };
121
+ const splitRange = (score) => {
122
+ const range = ranges?.find(
123
+ ({ from, to }) => from + minRange <= score + 1 && score <= to - minRange,
124
+ );
125
+ if (!range) return;
126
+
127
+ const { value = 0, label, data } = addTriggerFixedRange || {};
128
+ addRange({
129
+ value: assignValueToRange === ASSIGN_TO_RIGHT ? value : 0,
130
+ data: assignValueToRange === ASSIGN_TO_RIGHT ? data : null,
131
+ label,
132
+ from: score + 1,
133
+ to: range?.to,
134
+ id: null,
135
+ });
136
+ updateRange({
137
+ ...range,
138
+ value: assignValueToRange === ASSIGN_TO_LEFT ? value : 0,
139
+ data: assignValueToRange === ASSIGN_TO_LEFT ? data : null,
140
+ label,
141
+ to: score,
142
+ });
143
+
144
+ if (isAddTriggerFixed) unfixAddTrigger();
145
+ };
146
+ const concatRanges = (score) => {
147
+ const [left, right] = ranges?.filter(
148
+ ({ from, to }) => from === score + 1 || score === to,
149
+ );
150
+ const { data, value } = transformDataOnConcat(left, right);
151
+
152
+ updateRange({ from: left?.from, to: right?.to, id: left?.id, data, value });
153
+ removeRange(right?.id);
154
+ };
155
+ const removeRange = (id) =>
156
+ setRanges((ranges) => ranges?.filter((range) => range?.id !== id));
157
+ const clearRanges = () => setRanges([]);
158
+
159
+ const [triggers, setTriggers] = useState([]);
160
+ const addTrigger = (
161
+ value,
162
+ { isFixed = false, isHidden = false } = {},
163
+ { withRange = true } = {},
164
+ index = triggers.length,
165
+ ) =>
166
+ setTriggers((state) => {
167
+ if (withRange) splitRange(value);
168
+
169
+ const newState = [...state];
170
+ const id = state?.length
171
+ ? Math.max(...state?.map(({ id }) => id)) + 1
172
+ : 0;
173
+
174
+ newState.splice(index, 0, { id, value, isFixed, isHidden });
175
+ return newState.sort((a, b) => (a.value < b.value ? -1 : 1));
176
+ });
177
+ const updateTrigger = (index, value) =>
178
+ setTriggers((state) => {
179
+ const newState = [...state];
180
+ newState[index] = { ...newState[index], value };
181
+ return newState;
182
+ });
183
+ const removeTrigger = (index) =>
184
+ setTriggers((state) => {
185
+ concatRanges(state[index]?.value);
186
+
187
+ const newState = [...state];
188
+ newState.splice(index, 1);
189
+ return newState;
190
+ });
191
+ const clearTriggers = () => setTriggers([]);
192
+ const getTriggerByScore = (score) => {
193
+ return triggers?.find(({ value: triggerScore }) => triggerScore === score);
194
+ };
195
+
196
+ const [movingController, setMovingController] = useState(null);
197
+
198
+ const [movingTrigger, setMovingTrigger] = useState(null);
199
+ const [movingTriggerIndex, setMovingTriggerIndex] = useState(null);
200
+ const [movingTriggerData, setMovingTriggerData] = useState(null);
201
+ const [isTriggerMoved, setIsTriggerMoved] = useState(false);
202
+ const [isMouseOverTrigger, setIsMouseOverTrigger] = useState(false);
203
+ const setMouseOverTrigger = () => setIsMouseOverTrigger(true);
204
+ const setMouseLeaveTrigger = () => setIsMouseOverTrigger(false);
205
+ const [isMouseOverTrack, setIsMouseOverTrack] = useState(false);
206
+ const setMouseOverTrack = () => setIsMouseOverTrack(true);
207
+ const setMouseLeaveTrack = () => setIsMouseOverTrack(false);
208
+
209
+ const isTriggerMoving = (triggerIndex) => triggerIndex === movingTriggerIndex;
210
+
211
+ const [addTriggerFixedScore, setAddTriggerFixedScore] = useState(null);
212
+ const [addTriggerFixedRange, setAddTriggerFixedRange] = useState(null);
213
+ const [isAddTriggerFixed, setIsAddTriggerFixed] = useState(false);
214
+ const [assignValueToRange, setAssignValueToRange] = useState(ASSIGN_TO_LEFT);
215
+ const fixAddTrigger = (score, inRange) => {
216
+ setAddTriggerFixedScore(score);
217
+ setAddTriggerFixedRange(inRange);
218
+ setIsAddTriggerFixed(true);
219
+ };
220
+ const unfixAddTrigger = (e) => {
221
+ e?.stopPropagation();
222
+ e?.preventDefault();
223
+
224
+ setAddTriggerFixedScore(null);
225
+ setAddTriggerFixedRange(null);
226
+ setIsAddTriggerFixed(false);
227
+ setAssignValueToRange(ASSIGN_TO_LEFT);
228
+ };
229
+
230
+ const [pointsPerPx, setPointsPerPx] = useState(0);
231
+ const countPointsPerPx = (width) => {
232
+ return (max - min) / width;
233
+ };
234
+
235
+ // GETTERS //
236
+ const getTrackXByScore = (score) => {
237
+ return (score - min) / pointsPerPx;
238
+ };
239
+ const getScoreByX = (x) => {
240
+ let points = (x - trackPosition) * pointsPerPx + min;
241
+ points -= points % step;
242
+
243
+ if (points < min) points = min;
244
+ if (points > max) points = max;
245
+
246
+ return points - 1;
247
+ };
248
+
249
+ const getTriggerCollisionDirection = (index, points) => {
250
+ if (index <= 0) return points;
251
+
252
+ const [triggerBefore, triggerAfter] = [
253
+ triggers?.[index - 1]?.value + minRange - 1,
254
+ triggers?.[index + 1]?.value - minRange - 1,
255
+ ];
256
+
257
+ if (triggerBefore === triggerAfter) return BOTH_COLLISION;
258
+ else if (points === triggerBefore) return LEFT_COLLISSION;
259
+ else if (points === triggerAfter) return RIGHT_COLLISION;
260
+ else return NO_COLLISION;
261
+ };
262
+ const getTriggerScore = (index, points) => {
263
+ if (index <= 0) return points;
264
+
265
+ const [triggerBefore, triggerAfter] = [
266
+ triggers?.[index - 1]?.value + minRange - 1,
267
+ triggers?.[index + 1]?.value - minRange - 1,
268
+ ];
269
+
270
+ if (points < triggerBefore) return triggerBefore;
271
+ else if (points > triggerAfter) return triggerAfter;
272
+ else return points;
273
+ };
274
+
275
+ const getAddTriggerCollisionDirection = (x) => {
276
+ const triggerScore = getAddTriggerScore(x);
277
+ const inRange = getInRange(triggerScore);
278
+
279
+ if (!inRange) return 0;
280
+
281
+ const { from, to } = inRange;
282
+ const triggerBefore = from + minRange - 1;
283
+ const triggerAfter = to - minRange - 1;
284
+
285
+ if (triggerBefore === triggerAfter) return BOTH_COLLISION;
286
+ else if (triggerScore <= triggerBefore) return LEFT_COLLISSION;
287
+ else if (triggerScore >= triggerAfter) return RIGHT_COLLISION;
288
+ else return NO_COLLISION;
289
+ };
290
+ const getAddTriggerPosition = () => {
291
+ return isAddTriggerFixed
292
+ ? getTrackXByScore(addTriggerFixedScore)
293
+ : mouseTrackPosition;
294
+ };
295
+ const getAddTriggerScore = (x) => {
296
+ const score = getScoreByX(x);
297
+
298
+ let result = getRangesList()?.reduce((result, { from, to }) => {
299
+ if (to - from + 1 <= 2 * minRange && from <= score && score <= to) {
300
+ return null;
301
+ }
302
+
303
+ if (from <= score && score <= from + minRange) {
304
+ return from + minRange - 1;
305
+ } else if (to - minRange <= score && score <= to) {
306
+ return to - minRange - 1;
307
+ } else {
308
+ return result;
309
+ }
310
+ }, score);
311
+
312
+ if (!result) {
313
+ const closestRange = getRangesList()
314
+ ?.filter(({ from, to }) => to - from + 1 >= 2 * minRange)
315
+ ?.reduce((result, range) => {
316
+ const distance = Math.abs((range.to + range.from) / 2 - score);
317
+ if (!result || distance < result?.distance) {
318
+ return {
319
+ ...range,
320
+ distance,
321
+ };
322
+ }
323
+
324
+ return result;
325
+ }, null);
326
+
327
+ if (closestRange) {
328
+ if (closestRange?.to < score) result = closestRange?.to - minRange - 1;
329
+ if (score < closestRange?.from)
330
+ result = closestRange?.from + minRange - 1;
331
+ }
332
+ }
333
+
334
+ return result;
335
+ };
336
+
337
+ const getRangesList = () => {
338
+ return triggers
339
+ .map(({ value }) => value)
340
+ .sort()
341
+ .reduce((result, score, i, scores) => {
342
+ if (i !== 0) {
343
+ result.push({
344
+ from: scores[i - 1],
345
+ to: score,
346
+ });
347
+ }
348
+ return result;
349
+ }, []);
350
+ };
351
+ const getInRange = (score) => {
352
+ return ranges?.find(({ from, to }) => from <= score && score <= to);
353
+ };
354
+ const getPointValue = (score) => {
355
+ switch (pointValueType) {
356
+ case POINT_VALUE_TYPES.FROM:
357
+ return `${score + 1}`;
358
+ case POINT_VALUE_TYPES.TO:
359
+ return `${score}`;
360
+ case POINT_VALUE_TYPES.BOTH:
361
+ default:
362
+ return `${score} | ${score + 1}`;
363
+ }
364
+ };
365
+
366
+ // EVENTS //
367
+ const onRangeChange = (index, value, validate = true) => {
368
+ if (validate) value = prepareValue(value);
369
+
370
+ if (isNaN(value)) value = 0;
371
+ updateTrigger(index, value);
372
+ };
373
+ const onTriggerMouseDown = (e, index) => {
374
+ setMovingTrigger(e.target);
375
+ setMovingTriggerIndex(index);
376
+ setMovingTriggerData({ ...triggers[index] });
377
+ };
378
+ const onTriggerMove = (e) => {
379
+ if (e?.cancelable) e?.preventDefault();
380
+ e?.stopPropagation();
381
+
382
+ if (!movingTriggerIndex || !movingTrigger) {
383
+ return false;
384
+ }
385
+
386
+ if (!isTriggerMoved) setIsTriggerMoved(true);
387
+
388
+ const { clientX: x } = e?.touches?.[0] ?? e;
389
+ const { width: triggerWidth } =
390
+ movingTrigger?.getBoundingClientRect() || {};
391
+
392
+ if (x < trackPosition || x > trackPosition + trackWidth + triggerWidth)
393
+ return false;
394
+
395
+ const triggerPoints = getTriggerScore(movingTriggerIndex, getScoreByX(x));
396
+
397
+ onRangeChange(movingTriggerIndex, triggerPoints);
398
+ };
399
+ const resetMovingTrigger = () => {
400
+ setTimeout(() => {
401
+ setMovingTrigger(null);
402
+ setMovingTriggerIndex(null);
403
+ }, 1);
404
+ };
405
+
406
+ // USE EFFECT'S //
407
+ // MouseUp Event Controller
408
+ useEffect(() => {
409
+ if (isMobile) {
410
+ document.addEventListener("touchend", resetMovingTrigger);
411
+ } else {
412
+ document.addEventListener("mouseup", resetMovingTrigger);
413
+ }
414
+
415
+ return () => {
416
+ if (isMobile) {
417
+ document.removeEventListener("touchend", resetMovingTrigger);
418
+ } else {
419
+ document.removeEventListener("mouseup", resetMovingTrigger);
420
+ }
421
+ };
422
+ }, []);
423
+ // MouseMove Event Controller
424
+ useEffect(() => {
425
+ if (!movingTrigger && isTriggerMoved) {
426
+ movingController?.abort();
427
+ setIsTriggerMoved(false);
428
+ setMovingController(null);
429
+ } else if (movingTrigger && !isTriggerMoved) {
430
+ setMovingController(new AbortController());
431
+ }
432
+
433
+ const body = document.getElementsByTagName("body")[0];
434
+ body.classList?.[movingTrigger ? "add" : "remove"]("moving-cursor");
435
+ }, [movingTrigger]);
436
+
437
+ useEffect(() => {
438
+ if (movingController) {
439
+ if (isMobile) {
440
+ document.addEventListener("touchmove", onTriggerMove, {
441
+ signal: movingController?.signal,
442
+ });
443
+ } else {
444
+ document.addEventListener("mousemove", onTriggerMove, {
445
+ signal: movingController?.signal,
446
+ });
447
+ }
448
+ }
449
+
450
+ return () => {
451
+ if (isMobile) {
452
+ document.removeEventListener("touchmove", onTriggerMove, {
453
+ signal: movingController?.signal,
454
+ passive: false,
455
+ });
456
+ } else {
457
+ document.removeEventListener("mousemove", onTriggerMove, {
458
+ signal: movingController?.signal,
459
+ });
460
+ }
461
+ };
462
+ }, [movingController]);
463
+ useLayoutEffect(() => {
464
+ const { width, x } = trackRef?.current?.getBoundingClientRect() || {};
465
+
466
+ setPointsPerPx(countPointsPerPx(width));
467
+ setTrackWidth(width);
468
+ setTrackPosition(x);
469
+ }, [trackRef]);
470
+ useEffect(() => {
471
+ onChange(ranges, triggers);
472
+ }, [ranges]);
473
+ useEffect(() => {
474
+ clearRanges();
475
+ clearTriggers();
476
+
477
+ if (protectedValue?.length === 0) {
478
+ addRange({ from: min, to: max });
479
+ addTrigger(min, { isFixed: true, isHidden: true });
480
+ addTrigger(max, { isFixed: true, isHidden: true });
481
+ } else {
482
+ protectedValue
483
+ ?.reduce((result, range) => {
484
+ addRange({ ...range });
485
+
486
+ if (!result.find((score) => score === range?.from))
487
+ result.splice(result?.length - 1, 0, range?.from);
488
+ if (!result.find((score) => score === range?.to))
489
+ result.splice(result?.length - 1, 0, range?.to);
490
+ return result;
491
+ }, [])
492
+ ?.sort((a, b) => (a < b ? -1 : 1))
493
+ ?.filter((item, i, arr) => i === 0 || item - 1 !== arr[i - 1])
494
+ ?.map((score, i, triggers) => {
495
+ if (i === 0 || score - 1 !== triggers[i - 1]) {
496
+ const isExtremum = score === min || score === max;
497
+
498
+ addTrigger(
499
+ score,
500
+ { isFixed: isExtremum, isHidden: isExtremum },
501
+ { withRange: false },
502
+ );
503
+ }
504
+ });
505
+ }
506
+ }, [protectedValue]);
507
+ useEffect(() => {
508
+ if (!compare(value, protectedValue)) {
509
+ setProtectedValue(value);
510
+ }
511
+ }, [value]);
512
+ useEffect(() => {
513
+ if (!movingTriggerIndex && movingTriggerData) {
514
+ updateRangesByTrigger({ ...movingTriggerData });
515
+ setMovingTriggerData(null);
516
+ }
517
+ }, [movingTriggerIndex]);
518
+
519
+ // RENDER //
520
+ const renderCollision = ({
521
+ isCollisionVisible,
522
+ isLeftCollision,
523
+ isRightCollision,
524
+ isBothCollision,
525
+ className,
526
+ }) => {
527
+ const pieces = parseInt((max - min) / minRange, 10);
528
+ const { width: trackWidth } =
529
+ trackRef?.current?.getBoundingClientRect() ?? {};
530
+ const collisionWidth = trackWidth / pieces - 4;
531
+
532
+ const width = isCollisionVisible
533
+ ? isBothCollision
534
+ ? collisionWidth * 2
535
+ : isLeftCollision || isRightCollision
536
+ ? collisionWidth
537
+ : 0
538
+ : 0;
539
+
540
+ return (
541
+ <div
542
+ className={cn("collision", className, {
543
+ "collision--visible": isCollisionVisible,
544
+ "collision--left": isLeftCollision && !isBothCollision,
545
+ "collision--right": isRightCollision && !isBothCollision,
546
+ "collision--both": isBothCollision,
547
+ })}
548
+ style={{ width }}
549
+ />
550
+ );
551
+ };
552
+ const renderAddTrackTriggerSettings = () => {
553
+ const { label, value } = addTriggerFixedRange || {};
554
+ return (
555
+ <div
556
+ className={`${COMPONENT_CLASS}__track__range-triggers--add-trigger__settings`}
557
+ >
558
+ <div
559
+ className={`${COMPONENT_CLASS}__track__range-triggers--add-trigger__settings-body`}
560
+ >
561
+ <div
562
+ className={`${COMPONENT_CLASS}__track__range-triggers--add-trigger__settings-body--assign-left`}
563
+ onClick={(e) => {
564
+ e.stopPropagation();
565
+ setAssignValueToRange(ASSIGN_TO_LEFT);
566
+ }}
567
+ attr-is-active={`${assignValueToRange === ASSIGN_TO_LEFT}`}
568
+ >
569
+ <ChevronLeft />
570
+ </div>
571
+ <div
572
+ className={`${COMPONENT_CLASS}__track__range-triggers--add-trigger__settings-body--lenders-count`}
573
+ >
574
+ {label}
575
+ {value}
576
+ </div>
577
+ <div
578
+ className={`${COMPONENT_CLASS}__track__range-triggers--add-trigger__settings-body--assign-right`}
579
+ onClick={(e) => {
580
+ e.stopPropagation();
581
+ setAssignValueToRange(ASSIGN_TO_RIGHT);
582
+ }}
583
+ attr-is-active={`${assignValueToRange === ASSIGN_TO_RIGHT}`}
584
+ >
585
+ <ChevronRight />
586
+ </div>
587
+ </div>
588
+ <div
589
+ className={`${COMPONENT_CLASS}__track__range-triggers--add-trigger__settings-actions`}
590
+ >
591
+ <div
592
+ className={`${COMPONENT_CLASS}__track__range-triggers--add-trigger__settings-actions--cancel`}
593
+ onClick={(e) => unfixAddTrigger(e)}
594
+ >
595
+ Cancel
596
+ </div>
597
+ <div
598
+ className={`${COMPONENT_CLASS}__track__range-triggers--add-trigger__settings-actions--apply`}
599
+ onClick={(e) => {
600
+ e.stopPropagation();
601
+ addTrigger(addTriggerFixedScore);
602
+ }}
603
+ >
604
+ Apply
605
+ </div>
606
+ </div>
607
+ </div>
608
+ );
609
+ };
610
+ const renderAddTrackTrigger = () => {
611
+ const isNoTriggers = !triggers?.filter(({ isHidden }) => !isHidden).length;
612
+
613
+ const x = getAddTriggerPosition();
614
+ const score = isAddTriggerFixed
615
+ ? addTriggerFixedScore
616
+ : isNoTriggers && !isMouseOverTrack
617
+ ? (min + max) / 2 - 1
618
+ : getAddTriggerScore(x);
619
+
620
+ const triggerCollision = !isAddTriggerFixed
621
+ ? getAddTriggerCollisionDirection(x)
622
+ : NO_COLLISION;
623
+ const isLeftCollision = triggerCollision === LEFT_COLLISSION;
624
+ const isRightCollision = triggerCollision === RIGHT_COLLISION;
625
+ const isBothCollision = triggerCollision === BOTH_COLLISION;
626
+ const isCollisionVisible =
627
+ (isLeftCollision || isRightCollision || isBothCollision) &&
628
+ !(isNoTriggers && !isMouseOverTrack);
629
+ const left = getTrackXByScore(score);
630
+ const inRange = getInRange(score);
631
+
632
+ const isTriggerWithScoreExists = getTriggerByScore(score);
633
+
634
+ if (isTriggerWithScoreExists || movingTrigger || isMouseOverTrigger)
635
+ return null;
636
+
637
+ return (
638
+ <div
639
+ className={cn(
640
+ `${COMPONENT_CLASS}__track__range-triggers--add-trigger`,
641
+ {
642
+ [`${COMPONENT_CLASS}__track__range-triggers--add-trigger--fixed`]:
643
+ isAddTriggerFixed,
644
+ [`${COMPONENT_CLASS}__track__range-triggers--add-trigger--force-visible`]:
645
+ isNoTriggers,
646
+ [`${COMPONENT_CLASS}__track__range-triggers--add-trigger--moved-smoothly`]:
647
+ isNoTriggers && !isMouseOverTrack,
648
+ },
649
+ )}
650
+ style={{ left: `${left}px` }}
651
+ onClick={() =>
652
+ inRange?.value ? fixAddTrigger(score, inRange) : addTrigger(score)
653
+ }
654
+ >
655
+ <div
656
+ ref={addTriggerRef}
657
+ className={cn(
658
+ `${COMPONENT_CLASS}__track__range-triggers--add-trigger__point`,
659
+ {
660
+ [`${COMPONENT_CLASS}__track__range-triggers--add-trigger__point--shake`]:
661
+ isCollisionVisible,
662
+ },
663
+ )}
664
+ data-point-value={getPointValue(score)}
665
+ >
666
+ <Plus />
667
+ </div>
668
+ {isAddTriggerFixed && renderAddTrackTriggerSettings()}
669
+ {renderCollision({
670
+ isCollisionVisible,
671
+ isLeftCollision,
672
+ isRightCollision,
673
+ isBothCollision,
674
+ })}
675
+ </div>
676
+ );
677
+ };
678
+ const renderTrackTrigger = (
679
+ { value: triggerScore, isFixed, isHidden },
680
+ triggerIndex,
681
+ ) => {
682
+ const triggerCollision = getTriggerCollisionDirection(
683
+ triggerIndex,
684
+ triggerScore,
685
+ );
686
+ const isLeftCollision = triggerCollision === LEFT_COLLISSION;
687
+ const isRightCollision = triggerCollision === RIGHT_COLLISION;
688
+ const isBothCollision = triggerCollision === BOTH_COLLISION;
689
+ const isCurrentTriggerMoving = isTriggerMoving(triggerIndex);
690
+ const isCollisionVisible =
691
+ isCurrentTriggerMoving &&
692
+ isTriggerMoved &&
693
+ (isLeftCollision || isRightCollision || isBothCollision);
694
+ return (
695
+ <div
696
+ key={`${COMPONENT_CLASS}__track__range-triggers--trigger-${triggerIndex}`}
697
+ style={{
698
+ left: getTrackXByScore(triggerScore).toString().concat("px"),
699
+ }}
700
+ className={cn(`${COMPONENT_CLASS}__track__range-triggers--trigger`, {
701
+ [`${COMPONENT_CLASS}__track__range-triggers--trigger__moving`]:
702
+ isCurrentTriggerMoving,
703
+ [`${COMPONENT_CLASS}__track__range-triggers--trigger__fixed`]:
704
+ isFixed,
705
+ [`${COMPONENT_CLASS}__track__range-triggers--trigger__hidden`]:
706
+ isHidden,
707
+ })}
708
+ {...(isMobile
709
+ ? {}
710
+ : {
711
+ onMouseOver: setMouseOverTrigger,
712
+ onMouseLeave: setMouseLeaveTrigger,
713
+ })}
714
+ >
715
+ <div
716
+ className={cn(
717
+ `${COMPONENT_CLASS}__track__range-triggers--trigger__point`,
718
+ {
719
+ [`${COMPONENT_CLASS}__track__range-triggers--trigger__point--shake`]:
720
+ isCollisionVisible,
721
+ },
722
+ )}
723
+ data-point-value={getPointValue(triggerScore)}
724
+ {...(isMobile
725
+ ? {
726
+ onTouchStart: (e) => onTriggerMouseDown(e, triggerIndex),
727
+ onTouchEnd: resetMovingTrigger,
728
+ }
729
+ : {
730
+ onMouseDown: (e) => onTriggerMouseDown(e, triggerIndex),
731
+ onMouseUp: resetMovingTrigger,
732
+ })}
733
+ />
734
+ <div
735
+ className={cn(
736
+ `${COMPONENT_CLASS}__track__range-triggers--trigger__actions`,
737
+ {
738
+ [`${COMPONENT_CLASS}__track__range-triggers--trigger__actions--hidden`]:
739
+ isCurrentTriggerMoving,
740
+ },
741
+ )}
742
+ >
743
+ <div
744
+ className={`${COMPONENT_CLASS}__track__range-triggers--trigger__actions--remove`}
745
+ onClick={() => removeTrigger(triggerIndex)}
746
+ >
747
+ <X />
748
+ </div>
749
+ </div>
750
+ {renderCollision({
751
+ isCollisionVisible,
752
+ isLeftCollision,
753
+ isRightCollision,
754
+ isBothCollision,
755
+ className: `${COMPONENT_CLASS}__track__range-triggers--trigger__collision`,
756
+ })}
757
+ </div>
758
+ );
759
+ };
760
+ const renderTrackTriggers = () => {
761
+ return (
762
+ <div className={`${COMPONENT_CLASS}__track__range-triggers`}>
763
+ {triggers?.map(renderTrackTrigger)}
764
+ </div>
765
+ );
766
+ };
767
+ const renderRangeValue = ({ from, to, label, value }, rangeIndex) => {
768
+ if (!value) return null;
769
+
770
+ const left = getTrackXByScore((to + from) / 2);
771
+
772
+ return (
773
+ <div
774
+ className={cn(`${COMPONENT_CLASS}__track__ranges-value--item`)}
775
+ style={{ left: `${left}px` }}
776
+ key={`${COMPONENT_CLASS}__track__ranges-value--item-${rangeIndex}`}
777
+ >
778
+ <div
779
+ className={cn(`${COMPONENT_CLASS}__track__ranges-value--item__label`)}
780
+ >
781
+ {label}
782
+ </div>
783
+ <div
784
+ className={cn(`${COMPONENT_CLASS}__track__ranges-value--item__value`)}
785
+ >
786
+ {value}
787
+ </div>
788
+ </div>
789
+ );
790
+ };
791
+ const renderRangesValue = () => {
792
+ return (
793
+ <div className={cn(`${COMPONENT_CLASS}__track__ranges-value`)}>
794
+ {ranges?.map(renderRangeValue)}
795
+ </div>
796
+ );
797
+ };
798
+ const renderTrackDividers = useMemo(() => {
799
+ const renderTrackDivider = (key = 0) => (
800
+ <div
801
+ key={key}
802
+ className={`${COMPONENT_CLASS}__track__line__dividers--item`}
803
+ />
804
+ );
805
+
806
+ const dividersCount = parseInt((max - min) / dividersRange, 10);
807
+ const dividers = [];
808
+
809
+ for (let i = 0; i < dividersCount; ++i)
810
+ dividers.push(renderTrackDivider(i));
811
+
812
+ return (
813
+ <div className={`${COMPONENT_CLASS}__track__line__dividers`}>
814
+ {dividers}
815
+ </div>
816
+ );
817
+ }, [trackRef, minRange, min, max]);
818
+ const renderTrackLine = () => {
819
+ return (
820
+ <div className={`${COMPONENT_CLASS}__track__line`}>
821
+ <div className={`${COMPONENT_CLASS}__track__line__extremum--min`}>
822
+ {min}
823
+ </div>
824
+ {renderTrackDividers}
825
+ <div className={`${COMPONENT_CLASS}__track__line__extremum--max`}>
826
+ {max}
827
+ </div>
828
+ </div>
829
+ );
830
+ };
831
+ const renderTrack = () => {
832
+ return (
833
+ <div
834
+ className={cn(`${COMPONENT_CLASS}__track`, className)}
835
+ ref={trackRef}
836
+ >
837
+ {renderTrackLine()}
838
+ {renderAddTrackTrigger()}
839
+ {renderTrackTriggers()}
840
+ {renderRangesValue()}
841
+ </div>
842
+ );
843
+ };
844
+ const render = () => {
845
+ return (
846
+ <div
847
+ className={COMPONENT_CLASS}
848
+ onMouseOver={setMouseOverTrack}
849
+ onMouseLeave={setMouseLeaveTrack}
850
+ onMouseMove={(e) => setMouseTrackPosition(e?.clientX)}
851
+ >
852
+ {renderTrack()}
853
+ </div>
854
+ );
855
+ };
856
+
857
+ return render();
858
+ }