intelicoreact 2.0.19 → 2.0.21

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 (214) hide show
  1. package/dist/es/Atomic/FormElements/ActionAlert/ActionAlert.js.map +1 -1
  2. package/dist/es/Atomic/FormElements/AdvancedStatus/AdvancedStatus.js.map +1 -1
  3. package/dist/es/Atomic/FormElements/Calendar/Calendar.js +2 -1
  4. package/dist/es/Atomic/FormElements/Calendar/Calendar.js.map +1 -1
  5. package/dist/es/Atomic/FormElements/CheckboxInput/CheckboxInput.js.map +1 -1
  6. package/dist/es/Atomic/FormElements/CheckboxesLine/CheckboxesLine.js.map +1 -1
  7. package/dist/es/Atomic/FormElements/Datepicker/Datepicker.js +6 -5
  8. package/dist/es/Atomic/FormElements/Datepicker/Datepicker.js.map +1 -1
  9. package/dist/es/Atomic/FormElements/Datepicker/components/DatepickerCalendar.js +2 -1
  10. package/dist/es/Atomic/FormElements/Datepicker/components/DatepickerCalendar.js.map +1 -1
  11. package/dist/es/Atomic/FormElements/Dropdown/Dropdown.js +35 -26
  12. package/dist/es/Atomic/FormElements/Dropdown/Dropdown.js.map +1 -1
  13. package/dist/es/Atomic/FormElements/Dropdown/_utils.js +14 -9
  14. package/dist/es/Atomic/FormElements/Dropdown/_utils.js.map +1 -1
  15. package/dist/es/Atomic/FormElements/DropdownLiveSearch/DropdownLiveSearch.js.map +1 -1
  16. package/dist/es/Atomic/FormElements/FileLoader/FileLoader.js.map +1 -1
  17. package/dist/es/Atomic/FormElements/FileLoader/partial/LoadZone.js +1 -1
  18. package/dist/es/Atomic/FormElements/FileLoader/partial/LoadZone.js.map +1 -1
  19. package/dist/es/Atomic/FormElements/FileLoader/partial/LoadedContent.js +15 -13
  20. package/dist/es/Atomic/FormElements/FileLoader/partial/LoadedContent.js.map +1 -1
  21. package/dist/es/Atomic/FormElements/FileLoaderDescription/FileLoaderDescription.js +1 -1
  22. package/dist/es/Atomic/FormElements/FileLoaderDescription/FileLoaderDescription.js.map +1 -1
  23. package/dist/es/Atomic/FormElements/FileLoaderLocal/FileLoaderLocal.js +23 -19
  24. package/dist/es/Atomic/FormElements/FileLoaderLocal/FileLoaderLocal.js.map +1 -1
  25. package/dist/es/Atomic/FormElements/FileLoaderLocalGroup/FileLoaderLocalGroup.js +1 -1
  26. package/dist/es/Atomic/FormElements/FileLoaderLocalGroup/FileLoaderLocalGroup.js.map +1 -1
  27. package/dist/es/Atomic/FormElements/FormattedRawSSN/FormattedRawSSN.js.map +1 -1
  28. package/dist/es/Atomic/FormElements/Input/Input.js.map +1 -1
  29. package/dist/es/Atomic/FormElements/Input/hooks/useInputValueProcessing.js +0 -1
  30. package/dist/es/Atomic/FormElements/Input/hooks/useInputValueProcessing.js.map +1 -1
  31. package/dist/es/Atomic/FormElements/InputCalendar/InputCalendar.js.map +1 -1
  32. package/dist/es/Atomic/FormElements/InputColor/InputColor.js.map +1 -1
  33. package/dist/es/Atomic/FormElements/InputCurrency/InputCurrency.js +28 -25
  34. package/dist/es/Atomic/FormElements/InputCurrency/InputCurrency.js.map +1 -1
  35. package/dist/es/Atomic/FormElements/InputDateRange/InputDateRange.js +2 -1
  36. package/dist/es/Atomic/FormElements/InputDateRange/InputDateRange.js.map +1 -1
  37. package/dist/es/Atomic/FormElements/InputDateRange/components/DateInput.js.map +1 -1
  38. package/dist/es/Atomic/FormElements/InputDateRange/components/Datepicker.js.map +1 -1
  39. package/dist/es/Atomic/FormElements/InputDateRange/components/OpenedPart.js.map +1 -1
  40. package/dist/es/Atomic/FormElements/InputDateRange/components/SelectItem.js.map +1 -1
  41. package/dist/es/Atomic/FormElements/InputLink/InputLink.js.map +1 -1
  42. package/dist/es/Atomic/FormElements/InputMask3/InputMask3.js +16 -14
  43. package/dist/es/Atomic/FormElements/InputMask3/InputMask3.js.map +1 -1
  44. package/dist/es/Atomic/FormElements/InputWithAction/InputWithAction.js.map +1 -1
  45. package/dist/es/Atomic/FormElements/InputsRow/InputsRow.js +3 -2
  46. package/dist/es/Atomic/FormElements/InputsRow/InputsRow.js.map +1 -1
  47. package/dist/es/Atomic/FormElements/Label/Label.js.map +1 -1
  48. package/dist/es/Atomic/FormElements/MobileCalendar/MobileCalendar.js.map +1 -1
  49. package/dist/es/Atomic/FormElements/MultiSelect/MultiSelect.js.map +1 -1
  50. package/dist/es/Atomic/FormElements/RadioGroup/RadioGroup.js.map +1 -1
  51. package/dist/es/Atomic/FormElements/RadioGroupWithInput/RadioGroupWithInput.js.map +1 -1
  52. package/dist/es/Atomic/FormElements/RadioInput/RadioInput.js.map +1 -1
  53. package/dist/es/Atomic/FormElements/RadioRowSwitcher/RadioRowSwitcher.js.map +1 -1
  54. package/dist/es/Atomic/FormElements/RangeCalendar/RangeCalendar.js +2 -1
  55. package/dist/es/Atomic/FormElements/RangeCalendar/RangeCalendar.js.map +1 -1
  56. package/dist/es/Atomic/FormElements/RangeInputs/RangeInputs.js.map +1 -1
  57. package/dist/es/Atomic/FormElements/RangeList/RangeList.js.map +1 -1
  58. package/dist/es/Atomic/FormElements/RangeList/partial/RangeListRow.js.map +1 -1
  59. package/dist/es/Atomic/FormElements/RangeSlider/RangeSlider.js +9 -6
  60. package/dist/es/Atomic/FormElements/RangeSlider/RangeSlider.js.map +1 -1
  61. package/dist/es/Atomic/FormElements/RangeSlider2/RangeSlider2.js +4 -2
  62. package/dist/es/Atomic/FormElements/RangeSlider2/RangeSlider2.js.map +1 -1
  63. package/dist/es/Atomic/FormElements/SwitchableRow/SwitchableRow.js.map +1 -1
  64. package/dist/es/Atomic/FormElements/Switcher/Switcher.js.map +1 -1
  65. package/dist/es/Atomic/FormElements/SwitcherCheckbox/SwitcherCheckbox.js.map +1 -1
  66. package/dist/es/Atomic/FormElements/SwitcherHide/SwitcherHide.js.map +1 -1
  67. package/dist/es/Atomic/FormElements/SwitcherRadio/SwitcherRadio.js.map +1 -1
  68. package/dist/es/Atomic/FormElements/SwitcherRange/SwitcherRange.js.map +1 -1
  69. package/dist/es/Atomic/FormElements/SwitcherRangeList/SwitcherRangeList.js +1 -1
  70. package/dist/es/Atomic/FormElements/SwitcherRangeList/SwitcherRangeList.js.map +1 -1
  71. package/dist/es/Atomic/FormElements/SwitcherTagsDropdown/SwitcherTagsDropdown.js.map +1 -1
  72. package/dist/es/Atomic/FormElements/SwitcherTextarea/SwitcherTextarea.js.map +1 -1
  73. package/dist/es/Atomic/FormElements/TagsDropdown/TagsDropdown.js.map +1 -1
  74. package/dist/es/Atomic/FormElements/Text/Text.js.map +1 -1
  75. package/dist/es/Atomic/FormElements/TextSwitcher/TextSwitcher.js.map +1 -1
  76. package/dist/es/Atomic/FormElements/Textarea/Textarea.js.map +1 -1
  77. package/dist/es/Atomic/FormElements/TieredCheckboxes/TieredCheckboxes.js +4 -2
  78. package/dist/es/Atomic/FormElements/TieredCheckboxes/TieredCheckboxes.js.map +1 -1
  79. package/dist/es/Atomic/FormElements/TieredCheckboxes/partial/AccordionWithCheckbox.js.map +1 -1
  80. package/dist/es/Atomic/FormElements/TimeRange/TimeRange.js.map +1 -1
  81. package/dist/es/Atomic/FormElements/UserContacts/UserContacts.js.map +1 -1
  82. package/dist/es/Atomic/Layout/Header/Header.js.map +1 -1
  83. package/dist/es/Atomic/Layout/MainMenu/MainMenu.js.map +1 -1
  84. package/dist/es/Atomic/Layout/Spinner/Spinner.js.map +1 -1
  85. package/dist/es/Atomic/UI/Accordion/Accordion.js.map +1 -1
  86. package/dist/es/Atomic/UI/Accordion/AccordionItem.js.map +1 -1
  87. package/dist/es/Atomic/UI/AdvancedTag/AdvTag.js +2 -1
  88. package/dist/es/Atomic/UI/AdvancedTag/AdvTag.js.map +1 -1
  89. package/dist/es/Atomic/UI/AdvancedTag/AdvancedTags.js.map +1 -1
  90. package/dist/es/Atomic/UI/Alert/Alert.js.map +1 -1
  91. package/dist/es/Atomic/UI/Arrow/Arrow.js.map +1 -1
  92. package/dist/es/Atomic/UI/Button/Button.js.map +1 -1
  93. package/dist/es/Atomic/UI/ButtonsBar/ButtonsBar.js.map +1 -1
  94. package/dist/es/Atomic/UI/Chart/Chart.js +2 -1
  95. package/dist/es/Atomic/UI/Chart/Chart.js.map +1 -1
  96. package/dist/es/Atomic/UI/Chart/partial/ChartTypeSwitcherIcon/ChartTypeSwitcherIcon.js.map +1 -1
  97. package/dist/es/Atomic/UI/Chart/partial/utils.js +2 -1
  98. package/dist/es/Atomic/UI/Chart/partial/utils.js.map +1 -1
  99. package/dist/es/Atomic/UI/DateTime/DateTime.js.map +1 -1
  100. package/dist/es/Atomic/UI/DebugContainer/DebugContainer.js.map +1 -1
  101. package/dist/es/Atomic/UI/DoubleString/DoubleString.js.map +1 -1
  102. package/dist/es/Atomic/UI/Hint/Hint.js +8 -12
  103. package/dist/es/Atomic/UI/Hint/Hint.js.map +1 -1
  104. package/dist/es/Atomic/UI/Hint/partials/_utils.js.map +1 -1
  105. package/dist/es/Atomic/UI/Modal/Modal.js.map +1 -1
  106. package/dist/es/Atomic/UI/Modal/ModalHOC.js.map +1 -1
  107. package/dist/es/Atomic/UI/Modal/partials/ModalTitle.js.map +1 -1
  108. package/dist/es/Atomic/UI/Modal/partials/_constants.js.map +1 -1
  109. package/dist/es/Atomic/UI/Modal/partials/_utils.js +1 -4
  110. package/dist/es/Atomic/UI/Modal/partials/_utils.js.map +1 -1
  111. package/dist/es/Atomic/UI/Modal/partials/useMobileModal.js +17 -10
  112. package/dist/es/Atomic/UI/Modal/partials/useMobileModal.js.map +1 -1
  113. package/dist/es/Atomic/UI/NavLine/NavLine.js.map +1 -1
  114. package/dist/es/Atomic/UI/PageTitle/PageTitle.js.map +1 -1
  115. package/dist/es/Atomic/UI/Price/Price.js.map +1 -1
  116. package/dist/es/Atomic/UI/PriceRange/PriceRange.js.map +1 -1
  117. package/dist/es/Atomic/UI/ProgressLine/ProgressLine.js.map +1 -1
  118. package/dist/es/Atomic/UI/Status/Status.js.map +1 -1
  119. package/dist/es/Atomic/UI/Tag/Tag.js.map +1 -1
  120. package/dist/es/Atomic/UI/TagList/TagList.js.map +1 -1
  121. package/dist/es/Atomic/UI/UserBox/UserBox.js.map +1 -1
  122. package/dist/es/Atomic/UI/WizardStepper/ui/StateIcon/StateIcon.js.map +1 -1
  123. package/dist/es/Atomic/UI/WizardStepper/ui/StepRow/StepRow.js.map +1 -1
  124. package/dist/es/Atomic/UI/WizardStepper/ui/StepWrapper/StepWrapper.js.map +1 -1
  125. package/dist/es/Atomic/UI/WizardStepper/ui/icons.js.map +1 -1
  126. package/dist/es/Classes/RESTAPI/partials/AbortableFetch.js +9 -2
  127. package/dist/es/Classes/RESTAPI/partials/AbortableFetch.js.map +1 -1
  128. package/dist/es/Classes/RESTAPI/partials/CredentialsProcessing.js +4 -2
  129. package/dist/es/Classes/RESTAPI/partials/CredentialsProcessing.js.map +1 -1
  130. package/dist/es/Classes/RESTAPI/partials/sse.js +4 -7
  131. package/dist/es/Classes/RESTAPI/partials/sse.js.map +1 -1
  132. package/dist/es/Functions/fieldValueFormatters.js +1 -3
  133. package/dist/es/Functions/fieldValueFormatters.js.map +1 -1
  134. package/dist/es/Functions/operations.js +22 -20
  135. package/dist/es/Functions/operations.js.map +1 -1
  136. package/dist/es/Functions/useFormTools/form-drivers/ObjectWithIterableObjects.js +8 -6
  137. package/dist/es/Functions/useFormTools/form-drivers/ObjectWithIterableObjects.js.map +1 -1
  138. package/dist/es/Functions/useFormTools/functions/General.js +8 -6
  139. package/dist/es/Functions/useFormTools/functions/General.js.map +1 -1
  140. package/dist/es/Functions/useFormTools/functions/RenderFields.js +6 -5
  141. package/dist/es/Functions/useFormTools/functions/RenderFields.js.map +1 -1
  142. package/dist/es/Functions/useFormTools/index.js +1 -4
  143. package/dist/es/Functions/useFormTools/index.js.map +1 -1
  144. package/dist/es/Functions/utils.js +2 -1
  145. package/dist/es/Functions/utils.js.map +1 -1
  146. package/dist/es/Molecular/CustomIcons/components/AffiliateNetworks.js.map +1 -1
  147. package/dist/es/Molecular/CustomIcons/components/AlertCircle.js.map +1 -1
  148. package/dist/es/Molecular/CustomIcons/components/AppStore.js.map +1 -1
  149. package/dist/es/Molecular/CustomIcons/components/Arrow.js.map +1 -1
  150. package/dist/es/Molecular/CustomIcons/components/ArrowDown.js.map +1 -1
  151. package/dist/es/Molecular/CustomIcons/components/ArrowLeft.js.map +1 -1
  152. package/dist/es/Molecular/CustomIcons/components/ArrowRight.js.map +1 -1
  153. package/dist/es/Molecular/CustomIcons/components/ArrowUp.js.map +1 -1
  154. package/dist/es/Molecular/CustomIcons/components/Bell.js.map +1 -1
  155. package/dist/es/Molecular/CustomIcons/components/Button.js.map +1 -1
  156. package/dist/es/Molecular/CustomIcons/components/Campaigns.js.map +1 -1
  157. package/dist/es/Molecular/CustomIcons/components/Check.js.map +1 -1
  158. package/dist/es/Molecular/CustomIcons/components/Check2.js.map +1 -1
  159. package/dist/es/Molecular/CustomIcons/components/ChevronDown.js.map +1 -1
  160. package/dist/es/Molecular/CustomIcons/components/ChevronDownDisabled.js.map +1 -1
  161. package/dist/es/Molecular/CustomIcons/components/ChevronLeft.js.map +1 -1
  162. package/dist/es/Molecular/CustomIcons/components/ChevronRight.js.map +1 -1
  163. package/dist/es/Molecular/CustomIcons/components/ChevronUp.js.map +1 -1
  164. package/dist/es/Molecular/CustomIcons/components/ChevronUpDown.js.map +1 -1
  165. package/dist/es/Molecular/CustomIcons/components/Close.js.map +1 -1
  166. package/dist/es/Molecular/CustomIcons/components/ColumnsOrder.js.map +1 -1
  167. package/dist/es/Molecular/CustomIcons/components/Delete.js.map +1 -1
  168. package/dist/es/Molecular/CustomIcons/components/Edit.js.map +1 -1
  169. package/dist/es/Molecular/CustomIcons/components/Email.js.map +1 -1
  170. package/dist/es/Molecular/CustomIcons/components/FinturfLogo.js.map +1 -1
  171. package/dist/es/Molecular/CustomIcons/components/FinturfLogo2.js.map +1 -1
  172. package/dist/es/Molecular/CustomIcons/components/Flows.js.map +1 -1
  173. package/dist/es/Molecular/CustomIcons/components/Gift.js.map +1 -1
  174. package/dist/es/Molecular/CustomIcons/components/GoogleAuth.js.map +1 -1
  175. package/dist/es/Molecular/CustomIcons/components/GooglePlay.js.map +1 -1
  176. package/dist/es/Molecular/CustomIcons/components/HelpCircle.js.map +1 -1
  177. package/dist/es/Molecular/CustomIcons/components/HelpCircle2.js.map +1 -1
  178. package/dist/es/Molecular/CustomIcons/components/HelpCircleFilled.js.map +1 -1
  179. package/dist/es/Molecular/CustomIcons/components/Home.js.map +1 -1
  180. package/dist/es/Molecular/CustomIcons/components/Home2.js.map +1 -1
  181. package/dist/es/Molecular/CustomIcons/components/Key.js.map +1 -1
  182. package/dist/es/Molecular/CustomIcons/components/Landers.js.map +1 -1
  183. package/dist/es/Molecular/CustomIcons/components/Lock.js.map +1 -1
  184. package/dist/es/Molecular/CustomIcons/components/Mail.js.map +1 -1
  185. package/dist/es/Molecular/CustomIcons/components/Mastercard.js.map +1 -1
  186. package/dist/es/Molecular/CustomIcons/components/Minus.js.map +1 -1
  187. package/dist/es/Molecular/CustomIcons/components/Offers.js.map +1 -1
  188. package/dist/es/Molecular/CustomIcons/components/Pause.js.map +1 -1
  189. package/dist/es/Molecular/CustomIcons/components/PayPal.js.map +1 -1
  190. package/dist/es/Molecular/CustomIcons/components/PayPalLightLarge.js.map +1 -1
  191. package/dist/es/Molecular/CustomIcons/components/Phone.js.map +1 -1
  192. package/dist/es/Molecular/CustomIcons/components/Play.js.map +1 -1
  193. package/dist/es/Molecular/CustomIcons/components/Plus.js.map +1 -1
  194. package/dist/es/Molecular/CustomIcons/components/Profile.js.map +1 -1
  195. package/dist/es/Molecular/CustomIcons/components/QRCode.js.map +1 -1
  196. package/dist/es/Molecular/CustomIcons/components/Rectangle.js.map +1 -1
  197. package/dist/es/Molecular/CustomIcons/components/Revert.js.map +1 -1
  198. package/dist/es/Molecular/CustomIcons/components/Star.js.map +1 -1
  199. package/dist/es/Molecular/CustomIcons/components/Star2.js.map +1 -1
  200. package/dist/es/Molecular/CustomIcons/components/TrafficSources.js.map +1 -1
  201. package/dist/es/Molecular/CustomIcons/components/Trash.js.map +1 -1
  202. package/dist/es/Molecular/CustomIcons/components/TrashRed.js.map +1 -1
  203. package/dist/es/Molecular/CustomIcons/components/Triggers.js.map +1 -1
  204. package/dist/es/Molecular/CustomIcons/components/User.js.map +1 -1
  205. package/dist/es/Molecular/CustomIcons/components/Visa.js.map +1 -1
  206. package/dist/es/Molecular/CustomIcons/components/X.js.map +1 -1
  207. package/dist/es/Molecular/FormElement/FormElement.js.map +1 -1
  208. package/dist/es/Molecular/InputAddress/InputAddress.js +24 -19
  209. package/dist/es/Molecular/InputAddress/InputAddress.js.map +1 -1
  210. package/dist/es/Molecular/InputCustomFetch/InputCustomFetch.js +17 -11
  211. package/dist/es/Molecular/InputCustomFetch/InputCustomFetch.js.map +1 -1
  212. package/dist/es/Molecular/InputPassword/InputPassword.js.map +1 -1
  213. package/package.json +2 -2
  214. /package/dist/es/Atomic/FormElements/{SwitcherRangeList/SwitcherRangeList.styles.css → Datepicker/Datepicker.styles.css} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"RangeSlider.js","names":["value","renderTrack"],"sources":["../../../../../src/Atomic/FormElements/RangeSlider/RangeSlider.js"],"sourcesContent":["import React, { useEffect, useLayoutEffect, useRef, useState } from \"react\";\n\nimport cn from \"classnames\";\nimport { X } from \"react-feather\";\n\nimport { formatToAddBitDepthPoints as addCommas } from \"../../../Functions/fieldValueFormatters\";\nimport { NUMERIC_KEYBOARD } from \"../../../Functions/presets/mobileKeyboardTypesPresets\";\nimport useIsMobile from \"../../../Functions/useIsMobile/useIsMobile\";\nimport Input from \"../Input/Input\";\n\nimport \"./RangeSlider.scss\";\n\nlet timer;\n\nconst DEBOUNCE_TIME = 800;\n\nfunction debounce(func, timeout = DEBOUNCE_TIME) {\n return (...args) => {\n clearTimeout(timer);\n timer = setTimeout(() => {\n func.apply(this, args);\n }, timeout);\n };\n}\n\nexport default function RangeSlider({\n required,\n noTrack,\n rangeSymbol,\n min = 0,\n max = 100,\n decimalPlaces = 2,\n minRange = 0,\n precision = 0,\n testId = \"range-slider\",\n value = {\n from: min,\n to: max,\n },\n unit = \"\",\n label = \"\",\n isUseBitPoints = true,\n\n onChange = () => {},\n}) {\n const { isMobile } = useIsMobile();\n const trackRef = useRef(0);\n const [trackWidth, setTrackWidth] = useState(0);\n const [trackPosition, setTrackPosition] = useState(0);\n\n const fromTriggerRef = useRef(0);\n const toTriggerRef = useRef(0);\n\n const prepareValue = (value) => {\n return parseInt(parseFloat(value) * 10 ** precision, 10) / 10 ** precision;\n };\n\n const [from, setFromValue] = useState(value?.from ?? min);\n const setFrom = (v) => setFromValue(prepareValue(v));\n const [to, setToValue] = useState(value?.to ?? max);\n const setTo = (v) => setToValue(prepareValue(v));\n\n const [focusedType, setFocusedType] = useState(null);\n const [frezeedValues, setFrezeedValues] = useState(null);\n\n const [isInputsFocused, setIsInputsFocused] = useState({\n from: false,\n to: false,\n });\n\n const setIsInputFocused = (input, value) =>\n setIsInputsFocused((state) => ({ ...state, [input]: value }));\n\n const fromValue = frezeedValues ? frezeedValues?.from : from;\n const toValue = frezeedValues ? frezeedValues?.to : to;\n\n const [movingController, setMovingController] = useState(null);\n\n const [movingTrigger, setMovingTrigger] = useState(null);\n const [movingTriggerType, setMovingTriggerType] = useState(null);\n const [isTriggerMoved, setIsTriggerMoved] = useState(false);\n\n const [pointsPerPx, setPointsPerPx] = useState(0);\n\n const [extremumRange, setExtremumRange] = useState(0);\n const [extremumWidth, setExtremumWidth] = useState(0);\n\n const countPointsPerPx = (width) => {\n return (max - min) / width;\n };\n\n const resetRange = () => {\n setFrom(min);\n setTo(max);\n };\n\n const getTrackXByPoints = (pts) => {\n return (pts - min) / pointsPerPx;\n };\n\n const getRangeWidth = () => {\n return getTrackXByPoints(toValue) - getTrackXByPoints(fromValue);\n };\n\n const getRangeOffset = () => {\n return getTrackXByPoints(fromValue);\n };\n\n const getXByPoints = (pts) => {\n return (pts - min) / pointsPerPx + trackPosition;\n };\n\n const getPointsByX = (x) => {\n return (x - trackPosition) * pointsPerPx + min;\n };\n\n const onRangeChange = (type, value, validate = true, callOnChange = true) => {\n if (validate) value = prepareValue(value);\n\n if (isNaN(value)) value = 0;\n\n switch (type) {\n case \"from\":\n const getValidatedFromValue = (value) => {\n if ((!value && value !== 0) || value < min) {\n value = min;\n }\n\n if (value > to - minRange) {\n value = to - minRange;\n }\n\n return value;\n };\n\n if (validate) {\n value = getValidatedFromValue(value);\n }\n\n validate ? setFrom(value) : setFromValue(value);\n if (!isTriggerMoved && callOnChange) {\n debounce(() => {\n const values = {\n from: prepareValue(getValidatedFromValue(value)),\n to,\n };\n onChange(values);\n setFrezeedValues(values);\n }, DEBOUNCE_TIME)();\n }\n break;\n case \"to\":\n const getValidatedToValue = (value) => {\n if ((!value && value !== 0) || value > max) {\n value = max;\n }\n\n if (value < from + minRange) {\n value = from + minRange;\n }\n\n return value;\n };\n\n if (validate) {\n value = getValidatedToValue(value);\n }\n\n validate ? setTo(value) : setToValue(value);\n if (!isTriggerMoved && callOnChange) {\n debounce(() => {\n const values = {\n from,\n to: prepareValue(getValidatedToValue(value)),\n };\n onChange(values);\n setFrezeedValues(values);\n }, DEBOUNCE_TIME)();\n }\n break;\n }\n };\n // MouseDown Event Controller\n const onTriggerMouseDown = (e, type) => {\n if (e.button !== 0 && !isMobile) return; // Отменить обработку, если нажата не левая кнопка мыши\n setMovingTrigger(e.target);\n setMovingTriggerType(type);\n setIsTriggerMoved(true); // Установить флаг движения в true при клике\n };\n\n const onTriggerMove = (e) => {\n if (!isMobile) {\n e.preventDefault();\n e.stopPropagation();\n }\n\n if (!isTriggerMoved) setIsTriggerMoved(true);\n if (!movingTrigger) return false;\n\n let { clientX: x } = isMobile ? e?.touches?.[0] : e;\n const { width: triggerWidth = 16 } =\n movingTrigger?.getBoundingClientRect() || {};\n\n if (x < trackPosition || x > trackPosition + trackWidth + triggerWidth)\n return false;\n\n x -= triggerWidth / 2;\n\n onRangeChange(movingTriggerType, getPointsByX(x));\n };\n const onTriggerMoveEnd = () => {\n setMovingTrigger(null);\n setMovingTriggerType(null);\n setIsTriggerMoved(false);\n };\n const onRangeInputFocus = (e, type) => {\n setTimeout(() => setIsInputFocused(type, true), 1);\n };\n\n const onRangeInputBlur = (e, type) => {\n setIsInputFocused(type, false);\n };\n\n useEffect(() => {\n onRangeChange(\"from\", value?.from ?? max, true, false);\n onRangeChange(\"to\", value?.to ?? min, true, false);\n }, []);\n\n /// MouseUp Event Controller\n useEffect(() => {\n document.addEventListener(\"mouseup\", onTriggerMoveEnd);\n\n return () => {\n document.removeEventListener(\"mouseup\", onTriggerMoveEnd);\n };\n }, []);\n\n // MouseMove Event Controller\n useEffect(() => {\n // Прекратить обработку, если нет активного триггера или не было движения\n if (!movingTrigger || !isTriggerMoved) return;\n const handleMouseMove = (e) => {\n onTriggerMove(e);\n };\n\n document.addEventListener(\"mousemove\", handleMouseMove);\n\n return () => {\n document.removeEventListener(\"mousemove\", handleMouseMove);\n };\n }, [movingTrigger, isTriggerMoved]);\n\n useEffect(() => {\n if (movingController) {\n document.addEventListener(\"mousemove\", onTriggerMove, {\n signal: movingController?.signal,\n });\n }\n }, [movingController]);\n\n useEffect(() => {\n setFrezeedValues(null);\n }, [isTriggerMoved]);\n\n useEffect(() => {\n if (\n Object.values(isInputsFocused).every((v) => !v) &&\n !isTriggerMoved &&\n (value.from !== from || value.to !== to)\n ) {\n onChange({ from, to });\n }\n if (isTriggerMoved) setFrezeedValues({ from, to });\n }, [from, to, isTriggerMoved]);\n\n useLayoutEffect(() => {\n setFrom(value.from);\n setTo(value.to);\n }, [value]);\n\n useLayoutEffect(() => {\n let { width, x } = trackRef?.current?.getBoundingClientRect() || {};\n width -=\n fromTriggerRef?.current?.getBoundingClientRect()?.width ||\n toTriggerRef?.current?.getBoundingClientRect()?.width;\n\n setPointsPerPx(countPointsPerPx(width));\n setTrackWidth(width);\n setTrackPosition(x);\n }, [trackRef]);\n\n useEffect(() => {\n if (Object.values(isInputsFocused).every((v) => !v)) {\n setFrezeedValues(false);\n } else {\n setFrezeedValues({ from, to });\n }\n }, [isInputsFocused]);\n\n const renderLabel = () => {\n return (\n <div className=\"range-slider__header__label\">\n {label}\n {required && <span className=\"label_isRequired\">*</span>}\n </div>\n );\n };\n\n const renderSelectedRange = () => {\n return (\n <div className=\"range-slider__header__selected-range\">\n <div className=\"range-slider__header__selected-range--text\">\n from {isUseBitPoints ? addCommas(fromValue) : fromValue} to{\" \"}\n {isUseBitPoints ? addCommas(toValue) : toValue}\n {rangeSymbol}\n {unit}\n </div>\n <div\n className=\"range-slider__header__selected-range--reset\"\n onClick={resetRange}\n >\n <X />\n </div>\n </div>\n );\n };\n\n const renderHeader = () => {\n return (\n <div className=\"range-slider__header\">\n {renderLabel()}\n {min !== fromValue || max !== toValue ? renderSelectedRange() : null}\n </div>\n );\n };\n\n const renderInputs = () => {\n return (\n <div className=\"range-slider__inputs\">\n <div className=\"range-slider__inputs--from\">\n <Input\n data-testid={`${testId}-input-from`}\n value={from.toString()}\n onFocus={(e) => onRangeInputFocus(e, \"from\")}\n onBlur={(e) => onRangeInputBlur(e, \"from\")}\n onChange={(value) => onRangeChange(\"from\", value, false)}\n onlyNumbers={{ type: \"float\", decimalPlaces, min, max }}\n isPriceInput={isUseBitPoints}\n {...NUMERIC_KEYBOARD}\n />\n </div>\n <div className=\"range-slider__inputs__input\">\n <Input\n data-testid={`${testId}-input-to`}\n value={to.toString()}\n onFocus={(e) => onRangeInputFocus(e, \"to\")}\n onBlur={(e) => onRangeInputBlur(e, \"to\")}\n onChange={(value) => onRangeChange(\"to\", value, false)}\n onlyNumbers={{ type: \"float\", decimalPlaces, min, max }}\n isPriceInput={isUseBitPoints}\n {...NUMERIC_KEYBOARD}\n />\n </div>\n </div>\n );\n };\n\n const renderTrackRange = () => {\n const style = {\n width: `${getRangeWidth()}px`,\n left: `${getRangeOffset()}px`,\n };\n return <div className=\"range-slider__track__range\" style={style} />;\n };\n\n const renderTrackTriggers = () => {\n const fromStyle = {\n left: `${getTrackXByPoints(fromValue)}px`,\n };\n const toStyle = {\n left: `${getTrackXByPoints(toValue)}px`,\n };\n const renderTrack = () => {\n return (\n <div\n className={cn(\"range-slider__track\", { hidden: noTrack })}\n ref={trackRef}\n >\n <div className=\"range-slider__track__line\" />\n {renderTrackRange()}\n {renderTrackTriggers()}\n </div>\n );\n };\n return (\n <div className=\"range-slider__track__range-triggers\">\n <div\n data-testid={`${testId}-track-from`}\n ref={fromTriggerRef}\n style={fromStyle}\n className=\"range-slider__track__range-triggers--trigger range-slider__track__range-triggers--trigger-left\"\n onMouseDown={(e) => (!isMobile ? onTriggerMouseDown(e, \"from\") : {})}\n onTouchStart={(e) => onTriggerMouseDown(e, \"from\")}\n onTouchMove={onTriggerMove}\n onTouchEnd={onTriggerMoveEnd}\n onClick={() => {}} // DONT REMOVE! MOBILE WILL NOT WORK WITHOUT IT\n />\n <div\n data-testid={`${testId}-track-to`}\n ref={toTriggerRef}\n style={toStyle}\n className=\"range-slider__track__range-triggers--trigger range-slider__track__range-triggers--trigger-right\"\n onMouseDown={(e) => (!isMobile ? onTriggerMouseDown(e, \"to\") : {})}\n onTouchStart={(e) => onTriggerMouseDown(e, \"to\")}\n onTouchMove={onTriggerMove}\n onTouchEnd={onTriggerMoveEnd}\n onClick={() => {}} // DONT REMOVE! MOBILE WILL NOT WORK WITHOUT IT\n />\n </div>\n );\n };\n\n const renderTrack = () => {\n return (\n <div\n className={cn(\"range-slider__track\", { hidden: noTrack })}\n ref={trackRef}\n >\n <div className=\"range-slider__track__line\" />\n {renderTrackRange()}\n {renderTrackTriggers()}\n </div>\n );\n };\n\n return (\n <div data-testid={testId} className=\"range-slider\">\n {renderHeader()}\n {renderInputs()}\n {renderTrack()}\n </div>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"RangeSlider.js","names":["value","renderTrack"],"sources":["../../../../../src/Atomic/FormElements/RangeSlider/RangeSlider.js"],"sourcesContent":["import React, { useEffect, useLayoutEffect, useRef, useState } from \"react\";\n\nimport cn from \"classnames\";\nimport { X } from \"react-feather\";\n\nimport { formatToAddBitDepthPoints as addCommas } from \"../../../Functions/fieldValueFormatters\";\nimport { NUMERIC_KEYBOARD } from \"../../../Functions/presets/mobileKeyboardTypesPresets\";\nimport useIsMobile from \"../../../Functions/useIsMobile/useIsMobile\";\nimport Input from \"../Input/Input\";\n\nimport \"./RangeSlider.scss\";\n\nlet timer;\n\nconst DEBOUNCE_TIME = 800;\n\nfunction debounce(func, timeout = DEBOUNCE_TIME) {\n return (...args) => {\n clearTimeout(timer);\n timer = setTimeout(() => {\n func.apply(this, args);\n }, timeout);\n };\n}\n\nexport default function RangeSlider({\n required,\n noTrack,\n rangeSymbol,\n min = 0,\n max = 100,\n decimalPlaces = 2,\n minRange = 0,\n precision = 0,\n testId = \"range-slider\",\n value = {\n from: min,\n to: max,\n },\n unit = \"\",\n label = \"\",\n isUseBitPoints = true,\n\n onChange = () => {},\n}) {\n const { isMobile } = useIsMobile();\n const trackRef = useRef(0);\n const [trackWidth, setTrackWidth] = useState(0);\n const [trackPosition, setTrackPosition] = useState(0);\n\n const fromTriggerRef = useRef(0);\n const toTriggerRef = useRef(0);\n\n const prepareValue = (value) => {\n const number = parseFloat(value);\n if (Number.isNaN(number)) return number;\n const factor = 10 ** precision;\n return Math.trunc(Number((number * factor).toPrecision(15))) / factor;\n };\n\n const [from, setFromValue] = useState(value?.from ?? min);\n const setFrom = (v) => setFromValue(prepareValue(v));\n const [to, setToValue] = useState(value?.to ?? max);\n const setTo = (v) => setToValue(prepareValue(v));\n\n const [focusedType, setFocusedType] = useState(null);\n const [frezeedValues, setFrezeedValues] = useState(null);\n\n const [isInputsFocused, setIsInputsFocused] = useState({\n from: false,\n to: false,\n });\n\n const setIsInputFocused = (input, value) =>\n setIsInputsFocused((state) => ({ ...state, [input]: value }));\n\n const fromValue = frezeedValues ? frezeedValues?.from : from;\n const toValue = frezeedValues ? frezeedValues?.to : to;\n\n const [movingController, setMovingController] = useState(null);\n\n const [movingTrigger, setMovingTrigger] = useState(null);\n const [movingTriggerType, setMovingTriggerType] = useState(null);\n const [isTriggerMoved, setIsTriggerMoved] = useState(false);\n\n const [pointsPerPx, setPointsPerPx] = useState(0);\n\n const [extremumRange, setExtremumRange] = useState(0);\n const [extremumWidth, setExtremumWidth] = useState(0);\n\n const countPointsPerPx = (width) => {\n return (max - min) / width;\n };\n\n const resetRange = () => {\n setFrom(min);\n setTo(max);\n };\n\n const getTrackXByPoints = (pts) => {\n return (pts - min) / pointsPerPx;\n };\n\n const getRangeWidth = () => {\n return getTrackXByPoints(toValue) - getTrackXByPoints(fromValue);\n };\n\n const getRangeOffset = () => {\n return getTrackXByPoints(fromValue);\n };\n\n const getXByPoints = (pts) => {\n return (pts - min) / pointsPerPx + trackPosition;\n };\n\n const getPointsByX = (x) => {\n return (x - trackPosition) * pointsPerPx + min;\n };\n\n const onRangeChange = (type, value, validate = true, callOnChange = true) => {\n if (validate) value = prepareValue(value);\n\n if (isNaN(value)) value = 0;\n\n switch (type) {\n case \"from\":\n const getValidatedFromValue = (value) => {\n if ((!value && value !== 0) || value < min) {\n value = min;\n }\n\n if (value > to - minRange) {\n value = to - minRange;\n }\n\n return value;\n };\n\n if (validate) {\n value = getValidatedFromValue(value);\n }\n\n validate ? setFrom(value) : setFromValue(value);\n if (!isTriggerMoved && callOnChange) {\n debounce(() => {\n const values = {\n from: prepareValue(getValidatedFromValue(value)),\n to,\n };\n onChange(values);\n setFrezeedValues(values);\n }, DEBOUNCE_TIME)();\n }\n break;\n case \"to\":\n const getValidatedToValue = (value) => {\n if ((!value && value !== 0) || value > max) {\n value = max;\n }\n\n if (value < from + minRange) {\n value = from + minRange;\n }\n\n return value;\n };\n\n if (validate) {\n value = getValidatedToValue(value);\n }\n \n validate ? setTo(value) : setToValue(value);\n if (!isTriggerMoved && callOnChange) {\n debounce(() => {\n const values = {\n from,\n to: prepareValue(getValidatedToValue(value)),\n };\n onChange(values);\n setFrezeedValues(values);\n }, DEBOUNCE_TIME)();\n }\n break;\n }\n };\n // MouseDown Event Controller\n const onTriggerMouseDown = (e, type) => {\n if (e.button !== 0 && !isMobile) return; // Отменить обработку, если нажата не левая кнопка мыши\n setMovingTrigger(e.target);\n setMovingTriggerType(type);\n setIsTriggerMoved(true); // Установить флаг движения в true при клике\n };\n\n const onTriggerMove = (e) => {\n if (!isMobile) {\n e.preventDefault();\n e.stopPropagation();\n }\n\n if (!isTriggerMoved) setIsTriggerMoved(true);\n if (!movingTrigger) return false;\n\n let { clientX: x } = isMobile ? e?.touches?.[0] : e;\n const { width: triggerWidth = 16 } =\n movingTrigger?.getBoundingClientRect() || {};\n\n if (x < trackPosition || x > trackPosition + trackWidth + triggerWidth)\n return false;\n\n x -= triggerWidth / 2;\n\n onRangeChange(movingTriggerType, getPointsByX(x));\n };\n const onTriggerMoveEnd = () => {\n setMovingTrigger(null);\n setMovingTriggerType(null);\n setIsTriggerMoved(false);\n };\n const onRangeInputFocus = (e, type) => {\n setTimeout(() => setIsInputFocused(type, true), 1);\n };\n\n const onRangeInputBlur = (e, type) => {\n setIsInputFocused(type, false);\n };\n\n useEffect(() => {\n onRangeChange(\"from\", value?.from ?? max, true, false);\n onRangeChange(\"to\", value?.to ?? min, true, false);\n }, []);\n\n /// MouseUp Event Controller\n useEffect(() => {\n document.addEventListener(\"mouseup\", onTriggerMoveEnd);\n\n return () => {\n document.removeEventListener(\"mouseup\", onTriggerMoveEnd);\n };\n }, []);\n\n // MouseMove Event Controller\n useEffect(() => {\n // Прекратить обработку, если нет активного триггера или не было движения\n if (!movingTrigger || !isTriggerMoved) return;\n const handleMouseMove = (e) => {\n onTriggerMove(e);\n };\n\n document.addEventListener(\"mousemove\", handleMouseMove);\n\n return () => {\n document.removeEventListener(\"mousemove\", handleMouseMove);\n };\n }, [movingTrigger, isTriggerMoved]);\n\n useEffect(() => {\n if (movingController) {\n document.addEventListener(\"mousemove\", onTriggerMove, {\n signal: movingController?.signal,\n });\n }\n }, [movingController]);\n\n useEffect(() => {\n setFrezeedValues(null);\n }, [isTriggerMoved]);\n\n useEffect(() => {\n if (\n Object.values(isInputsFocused).every((v) => !v) &&\n !isTriggerMoved &&\n (value.from !== from || value.to !== to)\n ) {\n onChange({ from, to });\n }\n if (isTriggerMoved) setFrezeedValues({ from, to });\n }, [from, to, isTriggerMoved]);\n\n useLayoutEffect(() => {\n setFrom(value.from);\n setTo(value.to);\n }, [value]);\n\n useLayoutEffect(() => {\n let { width, x } = trackRef?.current?.getBoundingClientRect() || {};\n width -=\n fromTriggerRef?.current?.getBoundingClientRect()?.width ||\n toTriggerRef?.current?.getBoundingClientRect()?.width;\n\n setPointsPerPx(countPointsPerPx(width));\n setTrackWidth(width);\n setTrackPosition(x);\n }, [trackRef]);\n\n useEffect(() => {\n if (Object.values(isInputsFocused).every((v) => !v)) {\n setFrezeedValues(false);\n } else {\n setFrezeedValues({ from, to });\n }\n }, [isInputsFocused]);\n\n const renderLabel = () => {\n return (\n <div className=\"range-slider__header__label\">\n {label}\n {required && <span className=\"label_isRequired\">*</span>}\n </div>\n );\n };\n\n const renderSelectedRange = () => {\n return (\n <div className=\"range-slider__header__selected-range\">\n <div className=\"range-slider__header__selected-range--text\">\n from {isUseBitPoints ? addCommas(fromValue) : fromValue} to{\" \"}\n {isUseBitPoints ? addCommas(toValue) : toValue}\n {rangeSymbol}\n {unit}\n </div>\n <div\n className=\"range-slider__header__selected-range--reset\"\n onClick={resetRange}\n >\n <X />\n </div>\n </div>\n );\n };\n\n const renderHeader = () => {\n return (\n <div className=\"range-slider__header\">\n {renderLabel()}\n {min !== fromValue || max !== toValue ? renderSelectedRange() : null}\n </div>\n );\n };\n\n const renderInputs = () => {\n return (\n <div className=\"range-slider__inputs\">\n <div className=\"range-slider__inputs--from\">\n <Input\n data-testid={`${testId}-input-from`}\n value={from.toString()}\n onFocus={(e) => onRangeInputFocus(e, \"from\")}\n onBlur={(e) => onRangeInputBlur(e, \"from\")}\n onChange={(value) => onRangeChange(\"from\", value, false)}\n onlyNumbers={{ type: \"float\", decimalPlaces, min, max }}\n isPriceInput={isUseBitPoints}\n {...NUMERIC_KEYBOARD}\n />\n </div>\n <div className=\"range-slider__inputs__input\">\n <Input\n data-testid={`${testId}-input-to`}\n value={to.toString()}\n onFocus={(e) => onRangeInputFocus(e, \"to\")}\n onBlur={(e) => onRangeInputBlur(e, \"to\")}\n onChange={(value) => onRangeChange(\"to\", value, false)}\n onlyNumbers={{ type: \"float\", decimalPlaces, min, max }}\n isPriceInput={isUseBitPoints}\n {...NUMERIC_KEYBOARD}\n />\n </div>\n </div>\n );\n };\n\n const renderTrackRange = () => {\n const style = {\n width: `${getRangeWidth()}px`,\n left: `${getRangeOffset()}px`,\n };\n return <div className=\"range-slider__track__range\" style={style} />;\n };\n\n const renderTrackTriggers = () => {\n const fromStyle = {\n left: `${getTrackXByPoints(fromValue)}px`,\n };\n const toStyle = {\n left: `${getTrackXByPoints(toValue)}px`,\n };\n const renderTrack = () => {\n return (\n <div\n className={cn(\"range-slider__track\", { hidden: noTrack })}\n ref={trackRef}\n >\n <div className=\"range-slider__track__line\" />\n {renderTrackRange()}\n {renderTrackTriggers()}\n </div>\n );\n };\n return (\n <div className=\"range-slider__track__range-triggers\">\n <div\n data-testid={`${testId}-track-from`}\n ref={fromTriggerRef}\n style={fromStyle}\n className=\"range-slider__track__range-triggers--trigger range-slider__track__range-triggers--trigger-left\"\n onMouseDown={(e) => (!isMobile ? onTriggerMouseDown(e, \"from\") : {})}\n onTouchStart={(e) => onTriggerMouseDown(e, \"from\")}\n onTouchMove={onTriggerMove}\n onTouchEnd={onTriggerMoveEnd}\n onClick={() => {}} // DONT REMOVE! MOBILE WILL NOT WORK WITHOUT IT\n />\n <div\n data-testid={`${testId}-track-to`}\n ref={toTriggerRef}\n style={toStyle}\n className=\"range-slider__track__range-triggers--trigger range-slider__track__range-triggers--trigger-right\"\n onMouseDown={(e) => (!isMobile ? onTriggerMouseDown(e, \"to\") : {})}\n onTouchStart={(e) => onTriggerMouseDown(e, \"to\")}\n onTouchMove={onTriggerMove}\n onTouchEnd={onTriggerMoveEnd}\n onClick={() => {}} // DONT REMOVE! MOBILE WILL NOT WORK WITHOUT IT\n />\n </div>\n );\n };\n\n const renderTrack = () => {\n return (\n <div\n className={cn(\"range-slider__track\", { hidden: noTrack })}\n ref={trackRef}\n >\n <div className=\"range-slider__track__line\" />\n {renderTrackRange()}\n {renderTrackTriggers()}\n </div>\n );\n };\n\n return (\n <div data-testid={testId} className=\"range-slider\">\n {renderHeader()}\n {renderInputs()}\n {renderTrack()}\n </div>\n );\n}\n"],"mappings":"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"}
@@ -299,8 +299,10 @@ var RangeSlider2 = ({ min = 300, max = 850, minRange = 50, dividersRange = 50, p
299
299
  document.getElementsByTagName("body")[0].classList?.[movingTrigger ? "add" : "remove"]("moving-cursor");
300
300
  }, [movingTrigger]);
301
301
  useEffect(() => {
302
- if (movingController) if (isMobile) document.addEventListener("touchmove", onTriggerMove, { signal: movingController?.signal });
303
- else document.addEventListener("mousemove", onTriggerMove, { signal: movingController?.signal });
302
+ if (movingController) {
303
+ if (isMobile) document.addEventListener("touchmove", onTriggerMove, { signal: movingController?.signal });
304
+ else document.addEventListener("mousemove", onTriggerMove, { signal: movingController?.signal });
305
+ }
304
306
  return () => {
305
307
  if (isMobile) document.removeEventListener("touchmove", onTriggerMove);
306
308
  else document.removeEventListener("mousemove", onTriggerMove);
@@ -1 +1 @@
1
- {"version":3,"file":"RangeSlider2.js","names":[],"sources":["../../../../../src/Atomic/FormElements/RangeSlider2/RangeSlider2.tsx"],"sourcesContent":["import type {\n MouseEvent as ReactMouseEvent,\n TouchEvent as ReactTouchEvent,\n} from 'react';\nimport type { IRangeItem, IRangeSlider2Props, ITriggerItem } from './RangeSlider2.interface';\n\nimport cn from 'classnames';\nimport React, {\n useEffect,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { ChevronLeft, ChevronRight, Plus, X } from 'react-feather';\n\nimport useIsMobile from '../../../Functions/useIsMobile/useIsMobile';\nimport { compare } from '../../../Functions/utils';\n\nimport { EAssignSide, ECollision, EPointValueType } from './RangeSlider2.interface';\nimport './RangeSlider2.scss';\n\nconst COMPONENT_CLASS = 'range-slider2';\n\nconst RangeSlider2: React.FC<IRangeSlider2Props> = ({\n min = 300,\n max = 850,\n minRange = 50,\n dividersRange = 50,\n pointValueType = EPointValueType.From,\n precision = 0,\n step = 5,\n className,\n value = [],\n onChange = () => { },\n transformDataOnConcat = () => ({ data: [], value: 0 }),\n}) => {\n const { isMobile } = useIsMobile();\n const trackRef = useRef<HTMLDivElement>(null);\n const addTriggerRef = useRef<HTMLDivElement>(null);\n\n // ==================== STATE ==================== //\n\n const [protectedValue, setProtectedValue] = useState<IRangeItem[]>([]);\n const [ranges, setRanges] = useState<IRangeItem[]>(value);\n const [triggers, setTriggers] = useState<ITriggerItem[]>([]);\n\n const [trackWidth, setTrackWidth] = useState(0);\n const [trackPosition, setTrackPosition] = useState(0);\n const [mouseTrackPosition, setMouseTrackPosition] = useState(0);\n\n const [movingTrigger, setMovingTrigger] = useState<HTMLElement | null>(null);\n const [movingTriggerIndex, setMovingTriggerIndex] = useState<number | null>(null);\n const [movingController, setMovingController] = useState<AbortController | null>(null);\n const [movingTriggerData, setMovingTriggerData] = useState<ITriggerItem | null>(null);\n const [isTriggerMoved, setIsTriggerMoved] = useState(false);\n\n const [isMouseOverTrigger, setIsMouseOverTrigger] = useState(false);\n const [isMouseOverTrack, setIsMouseOverTrack] = useState(false);\n\n const [pointsPerPx, setPointsPerPx] = useState(0);\n\n const [addTriggerFixedScore, setAddTriggerFixedScore] = useState<number | null>(null);\n const [addTriggerFixedRange, setAddTriggerFixedRange] = useState<IRangeItem | null>(null);\n const [isAddTriggerFixed, setIsAddTriggerFixed] = useState(false);\n const [assignValueToRange, setAssignValueToRange] = useState<EAssignSide>(EAssignSide.Left);\n\n const setMouseOverTrigger = (): void => setIsMouseOverTrigger(true);\n const setMouseLeaveTrigger = (): void => setIsMouseOverTrigger(false);\n const setMouseOverTrack = (): void => setIsMouseOverTrack(true);\n const setMouseLeaveTrack = (): void => setIsMouseOverTrack(false);\n\n const isTriggerMoving = (triggerIndex: number): boolean => triggerIndex === movingTriggerIndex;\n const countPointsPerPx = (width: number): number => {\n return (max - min) / width;\n };\n\n const fixAddTrigger = (score: number | null, inRange: IRangeItem): void => {\n if (score !== null) {\n setAddTriggerFixedScore(score);\n setAddTriggerFixedRange(inRange);\n setIsAddTriggerFixed(true);\n }\n };\n const unfixAddTrigger = (e?: any): void => {\n e?.stopPropagation();\n e?.preventDefault();\n\n setAddTriggerFixedScore(null);\n setAddTriggerFixedRange(null);\n setIsAddTriggerFixed(false);\n setAssignValueToRange(EAssignSide.Left);\n };\n\n const prepareValue = (value: number | string): number => {\n return Number.parseInt((Number.parseFloat(value.toString()) * 10 ** precision).toString(), 10) / 10 ** precision;\n };\n const addRange = ({ from, to, label, value, data = [], id }: IRangeItem): void =>\n setRanges((ranges) => {\n if (!id) {\n id = (ranges?.length + 1) * -1;\n }\n\n return [\n ...ranges,\n {\n id,\n from,\n to,\n label,\n data,\n value: Number.isInteger(value) ? value : 0,\n },\n ].sort((a, b) => a.from - b.from);\n });\n const updateRange = ({ from, to, label, value, data, id }: IRangeItem): void =>\n setRanges((ranges) => {\n const newRanges = [...ranges];\n const range = newRanges?.find(({ id: rangeId }) => rangeId === id);\n\n if (range) {\n range.from = from ?? range?.from;\n range.to = to ?? range?.to;\n range.label = label ?? range?.label;\n range.value\n = value !== undefined\n ? Number.isInteger(value)\n ? value\n : 0\n : range?.value;\n range.data = data !== undefined ? data : range?.data;\n }\n\n return newRanges;\n });\n const splitRange = (score: number): void => {\n const range = ranges?.find(\n ({ from, to }) => from + minRange <= score + 1 && score <= to - minRange,\n );\n if (!range) return;\n\n const { value = 0, label, data = [] } = addTriggerFixedRange || {};\n addRange({\n value: assignValueToRange === EAssignSide.Right ? value : 0,\n data: assignValueToRange === EAssignSide.Right ? data : undefined,\n label,\n from: score + 1,\n to: range?.to,\n id: null,\n });\n updateRange({\n ...range,\n value: assignValueToRange === EAssignSide.Left ? value : 0,\n data: assignValueToRange === EAssignSide.Left ? data : undefined,\n label,\n to: score,\n });\n\n if (isAddTriggerFixed) unfixAddTrigger();\n };\n const removeRange = (id?: number | null): void =>\n setRanges(ranges => ranges?.filter(range => range?.id !== id));\n const concatRanges = (score: number): void => {\n const [left, right] = ranges?.filter(\n ({ from, to }) => from === score + 1 || score === to,\n );\n const { data, value } = transformDataOnConcat(left, right);\n\n updateRange({ from: left?.from, to: right?.to, id: left?.id, data, value });\n removeRange(right?.id);\n };\n const clearRanges = (): void => setRanges([]);\n\n const addTrigger = (\n value: number | null,\n { isFixed = false, isHidden = false } = {},\n { withRange = true } = {},\n index = triggers.length,\n ): void =>\n setTriggers((state) => {\n if (value === null) return state;\n\n if (withRange) splitRange(value);\n\n const newState = [...state];\n const id = state?.length\n ? Math.max(...state?.map(({ id }) => id)) + 1\n : 0;\n\n newState.splice(index, 0, { id, value, isFixed, isHidden });\n return newState.sort((a, b) => (a.value < b.value ? -1 : 1));\n });\n const updateTrigger = (index: number, value: number): void =>\n setTriggers((state) => {\n const newState = [...state];\n newState[index] = { ...newState[index], value };\n return newState;\n });\n const removeTrigger = (index: number): void =>\n setTriggers((state) => {\n concatRanges(state[index]?.value);\n\n const newState = [...state];\n newState.splice(index, 1);\n return newState;\n });\n const clearTriggers = (): void => setTriggers([]);\n const getTriggerByScore = (score: number | null): ITriggerItem | undefined => {\n if (score === null) return undefined;\n\n return triggers?.find(({ value: triggerScore }) => triggerScore === score);\n };\n const updateRangesByTrigger = (trigger: ITriggerItem): void => {\n const newValue = triggers?.find(({ id }) => id === trigger?.id)?.value ?? 0;\n const oldValue = trigger?.value;\n\n const leftRange = ranges?.find(range => range?.to === oldValue);\n const rightRange = ranges?.find(range => range?.from === oldValue + 1);\n\n if (leftRange && rightRange) {\n updateRange({ from: leftRange?.from, to: newValue, id: leftRange?.id });\n updateRange({\n from: newValue + 1,\n to: rightRange?.to,\n id: rightRange?.id,\n });\n }\n };\n const resetMovingTrigger = (): void => {\n setTimeout(() => {\n setMovingTrigger(null);\n setMovingTriggerIndex(null);\n }, 1);\n };\n\n const getTrackXByScore = (score: number | null): number => {\n if (score === null) return 0;\n\n return (score - min) / pointsPerPx;\n };\n const getScoreByX = (x: number): number => {\n let points = (x - trackPosition) * pointsPerPx + min;\n points -= points % step;\n\n if (points < min) points = min;\n if (points > max) points = max;\n\n return points - 1;\n };\n const getTriggerCollisionDirection = (index: number, points: number): ECollision => {\n if (index <= 0) return points;\n\n const [triggerBefore, triggerAfter] = [\n triggers?.[index - 1]?.value + minRange - 1,\n triggers?.[index + 1]?.value - minRange - 1,\n ];\n\n if (triggerBefore === triggerAfter) return ECollision.Both;\n else if (points === triggerBefore) return ECollision.Left;\n else if (points === triggerAfter) return ECollision.Right;\n else return ECollision.None;\n };\n const getTriggerScore = (index: number, points: number): number => {\n if (index <= 0) return points;\n\n const [triggerBefore, triggerAfter] = [\n triggers?.[index - 1]?.value + minRange - 1,\n triggers?.[index + 1]?.value - minRange - 1,\n ];\n\n if (points < triggerBefore) return triggerBefore;\n else if (points > triggerAfter) return triggerAfter;\n else return points;\n };\n const getRangesList = (): { from: number, to: number }[] => {\n return triggers\n .map(({ value }) => value)\n .sort()\n .reduce((result: { from: number, to: number }[], score, i, scores) => {\n if (i !== 0) {\n result.push({\n from: scores[i - 1],\n to: score,\n });\n }\n return result;\n }, []);\n };\n const getAddTriggerScore = (x: number): number | null => {\n const score = getScoreByX(x);\n\n let result: number | null = getRangesList()?.reduce((result: number | null, { from, to }: IRangeItem) => {\n if (to - from + 1 <= 2 * minRange && from <= score && score <= to) {\n return null;\n }\n\n if (from <= score && score <= from + minRange) {\n return from + minRange - 1;\n }\n else if (to - minRange <= score && score <= to) {\n return to - minRange - 1;\n }\n else {\n return result;\n }\n }, score);\n\n if (!result) {\n const closestRange = getRangesList()\n ?.filter(({ from, to }) => to - from + 1 >= 2 * minRange)\n ?.reduce((result: { from: number; to: number; distance: number } | null, range: IRangeItem) => {\n const distance: number = Math.abs((range.to + range.from) / 2 - score);\n if (!result || distance < result?.distance) {\n return {\n ...range,\n distance,\n };\n }\n\n return result;\n }, null);\n\n if (closestRange) {\n if (closestRange?.to < score) result = closestRange?.to - minRange - 1;\n if (score < closestRange?.from)\n result = closestRange?.from + minRange - 1;\n }\n }\n\n return result;\n };\n const getInRange = (score: number | null): IRangeItem | undefined => {\n return ranges?.find(({ from, to }) => score !== null && from <= score && score <= to);\n };\n const getAddTriggerCollisionDirection = (x: number): number => {\n const triggerScore = getAddTriggerScore(x);\n const inRange = getInRange(triggerScore);\n\n if (!inRange) return 0;\n\n const { from, to } = inRange;\n const triggerBefore = from + minRange - 1;\n const triggerAfter = to - minRange - 1;\n\n if (triggerBefore === triggerAfter) return ECollision.Both;\n else if (triggerScore !== null && triggerScore <= triggerBefore) return ECollision.Left;\n else if (triggerScore !== null && triggerScore >= triggerAfter) return ECollision.Right;\n else return ECollision.None;\n };\n const getAddTriggerPosition = (): number => {\n return isAddTriggerFixed\n ? getTrackXByScore(addTriggerFixedScore ?? 0)\n : mouseTrackPosition;\n };\n const getPointValue = (score: number | null): string => {\n if (score === null) return '';\n\n switch (pointValueType) {\n case EPointValueType.From:\n return `${score + 1}`;\n case EPointValueType.To:\n return `${score}`;\n case EPointValueType.Both:\n default:\n return `${score} | ${score + 1}`;\n }\n };\n\n // EVENTS //\n const onRangeChange = (index: number, value: number, validate = true): void => {\n if (validate) value = prepareValue(value);\n\n if (Number.isNaN(value)) value = 0;\n updateTrigger(index, value);\n };\n const onTriggerMouseDown = (e: ReactMouseEvent | ReactTouchEvent, index: number): void => {\n setMovingTrigger(e.target as HTMLElement);\n setMovingTriggerIndex(index);\n setMovingTriggerData({ ...triggers[index] });\n };\n const onTriggerMove = (e: ReactTouchEvent | ReactMouseEvent | TouchEvent | MouseEvent): boolean => {\n if (e?.cancelable) e?.preventDefault();\n e?.stopPropagation();\n\n if (!movingTriggerIndex || !movingTrigger) {\n return false;\n }\n\n if (!isTriggerMoved) setIsTriggerMoved(true);\n\n const touch = 'touches' in e ? e.touches?.[0] : undefined;\n const x = touch?.clientX ?? ('clientX' in e ? e.clientX : 0);\n const { width: triggerWidth }\n = movingTrigger?.getBoundingClientRect() || {};\n\n if (x < trackPosition || x > trackPosition + trackWidth + triggerWidth)\n return false;\n\n const triggerPoints = getTriggerScore(movingTriggerIndex, getScoreByX(x));\n\n onRangeChange(movingTriggerIndex, triggerPoints);\n\n return true;\n };\n\n useEffect(() => {\n if (isMobile) {\n document.addEventListener('touchend', resetMovingTrigger);\n }\n else {\n document.addEventListener('mouseup', resetMovingTrigger);\n }\n\n return () => {\n if (isMobile) {\n document.removeEventListener('touchend', resetMovingTrigger);\n }\n else {\n document.removeEventListener('mouseup', resetMovingTrigger);\n }\n };\n }, []);\n // MouseMove Event Controller\n useEffect(() => {\n if (!movingTrigger && isTriggerMoved) {\n movingController?.abort();\n setIsTriggerMoved(false);\n setMovingController(null);\n }\n else if (movingTrigger && !isTriggerMoved) {\n setMovingController(new AbortController());\n }\n\n const body = document.getElementsByTagName('body')[0];\n body.classList?.[movingTrigger ? 'add' : 'remove']('moving-cursor');\n }, [movingTrigger]);\n\n useEffect(() => {\n if (movingController) {\n if (isMobile) {\n document.addEventListener('touchmove', onTriggerMove, {\n signal: movingController?.signal,\n });\n }\n else {\n document.addEventListener('mousemove', onTriggerMove, {\n signal: movingController?.signal,\n });\n }\n }\n\n return () => {\n if (isMobile) {\n document.removeEventListener('touchmove', onTriggerMove);\n }\n else {\n document.removeEventListener('mousemove', onTriggerMove);\n }\n };\n }, [movingController]);\n useLayoutEffect(() => {\n const { width = 0, x = 0 } = trackRef?.current?.getBoundingClientRect() || {};\n\n setPointsPerPx(countPointsPerPx(width));\n setTrackWidth(width);\n setTrackPosition(x);\n }, [trackRef]);\n useEffect(() => {\n onChange(ranges, triggers);\n }, [ranges]);\n useEffect(() => {\n clearRanges();\n clearTriggers();\n\n if (protectedValue?.length === 0) {\n addRange({ from: min, to: max });\n addTrigger(min, { isFixed: true, isHidden: true });\n addTrigger(max, { isFixed: true, isHidden: true });\n }\n else {\n protectedValue\n ?.reduce((result, range) => {\n addRange({ ...range });\n\n if (!result.find(score => score === range?.from))\n // @ts-ignore\n result.splice(result?.length - 1, 0, range?.from);\n if (!result.find(score => score === range?.to))\n // @ts-ignore\n result.splice(result?.length - 1, 0, range?.to);\n return result;\n }, [])\n ?.sort((a, b) => (a < b ? -1 : 1))\n ?.filter((item, i, arr) => i === 0 || item - 1 !== arr[i - 1])\n ?.map((score, i, triggers) => {\n if (i === 0 || score - 1 !== triggers[i - 1]) {\n const isExtremum = score === min || score === max;\n\n addTrigger(\n score,\n { isFixed: isExtremum, isHidden: isExtremum },\n { withRange: false },\n );\n }\n\n return score;\n });\n }\n }, [protectedValue]);\n useEffect(() => {\n if (!compare(value, protectedValue)) {\n setProtectedValue(value);\n }\n }, [value]);\n useEffect(() => {\n if (!movingTriggerIndex && movingTriggerData) {\n updateRangesByTrigger({ ...movingTriggerData });\n setMovingTriggerData(null);\n }\n }, [movingTriggerIndex]);\n\n // RENDER //\n const renderCollision = ({\n isCollisionVisible,\n isLeftCollision,\n isRightCollision,\n isBothCollision,\n className,\n }: {\n isCollisionVisible?: boolean;\n isLeftCollision?: boolean;\n isRightCollision?: boolean;\n isBothCollision?: boolean;\n className?: string;\n }): JSX.Element => {\n const pieces = Number.parseInt(((max - min) / minRange).toString(), 10);\n const { width: trackWidth = 0 }\n = trackRef?.current?.getBoundingClientRect() ?? {};\n const collisionWidth = trackWidth / pieces - 4;\n\n const width = isCollisionVisible\n ? isBothCollision\n ? collisionWidth * 2\n : isLeftCollision || isRightCollision\n ? collisionWidth\n : 0\n : 0;\n\n return (\n <div\n className={cn('collision', className, {\n 'collision--visible': isCollisionVisible,\n 'collision--left': isLeftCollision && !isBothCollision,\n 'collision--right': isRightCollision && !isBothCollision,\n 'collision--both': isBothCollision,\n })}\n style={{ width }}\n />\n );\n };\n const renderAddTrackTriggerSettings = (): JSX.Element => {\n const { label, value } = addTriggerFixedRange || {};\n return (\n <div\n className={`${COMPONENT_CLASS}__track__range-triggers--add-trigger__settings`}\n >\n <div\n className={`${COMPONENT_CLASS}__track__range-triggers--add-trigger__settings-body`}\n >\n <div\n className={`${COMPONENT_CLASS}__track__range-triggers--add-trigger__settings-body--assign-left`}\n onClick={(e) => {\n e.stopPropagation();\n setAssignValueToRange(EAssignSide.Left);\n }}\n attr-is-active={`${assignValueToRange === EAssignSide.Left}`}\n >\n <ChevronLeft />\n </div>\n <div\n className={`${COMPONENT_CLASS}__track__range-triggers--add-trigger__settings-body--lenders-count`}\n >\n {label}\n {value}\n </div>\n <div\n className={`${COMPONENT_CLASS}__track__range-triggers--add-trigger__settings-body--assign-right`}\n onClick={(e) => {\n e.stopPropagation();\n setAssignValueToRange(EAssignSide.Right);\n }}\n attr-is-active={`${assignValueToRange === EAssignSide.Right}`}\n >\n <ChevronRight />\n </div>\n </div>\n <div\n className={`${COMPONENT_CLASS}__track__range-triggers--add-trigger__settings-actions`}\n >\n <div\n className={`${COMPONENT_CLASS}__track__range-triggers--add-trigger__settings-actions--cancel`}\n onClick={e => unfixAddTrigger(e)}\n >\n Cancel\n </div>\n <div\n className={`${COMPONENT_CLASS}__track__range-triggers--add-trigger__settings-actions--apply`}\n onClick={(e) => {\n e.stopPropagation();\n addTrigger(addTriggerFixedScore);\n }}\n >\n Apply\n </div>\n </div>\n </div>\n );\n };\n const renderAddTrackTrigger = (): JSX.Element | null => {\n const isNoTriggers = !triggers?.filter(({ isHidden }) => !isHidden).length;\n\n const x = getAddTriggerPosition();\n const score = isAddTriggerFixed\n ? addTriggerFixedScore\n : isNoTriggers && !isMouseOverTrack\n ? (min + max) / 2 - 1\n : getAddTriggerScore(x);\n\n const triggerCollision = !isAddTriggerFixed\n ? getAddTriggerCollisionDirection(x)\n : ECollision.None;\n const isLeftCollision = triggerCollision === ECollision.Left;\n const isRightCollision = triggerCollision === ECollision.Right;\n const isBothCollision = triggerCollision === ECollision.Both;\n const isCollisionVisible\n = (isLeftCollision || isRightCollision || isBothCollision)\n && !(isNoTriggers && !isMouseOverTrack);\n const left = getTrackXByScore(score);\n const inRange = getInRange(score);\n\n const isTriggerWithScoreExists = getTriggerByScore(score);\n\n if (isTriggerWithScoreExists || movingTrigger || isMouseOverTrigger)\n return null;\n\n return (\n <div\n className={cn(\n `${COMPONENT_CLASS}__track__range-triggers--add-trigger`,\n {\n [`${COMPONENT_CLASS}__track__range-triggers--add-trigger--fixed`]:\n isAddTriggerFixed,\n [`${COMPONENT_CLASS}__track__range-triggers--add-trigger--force-visible`]:\n isNoTriggers,\n [`${COMPONENT_CLASS}__track__range-triggers--add-trigger--moved-smoothly`]:\n isNoTriggers && !isMouseOverTrack,\n },\n )}\n style={{ left: `${left}px` }}\n onClick={() =>\n inRange?.value ? fixAddTrigger(score, inRange) : addTrigger(score)}\n >\n <div\n ref={addTriggerRef}\n className={cn(\n `${COMPONENT_CLASS}__track__range-triggers--add-trigger__point`,\n {\n [`${COMPONENT_CLASS}__track__range-triggers--add-trigger__point--shake`]:\n isCollisionVisible,\n },\n )}\n data-point-value={getPointValue(score)}\n >\n <Plus />\n </div>\n {isAddTriggerFixed && renderAddTrackTriggerSettings()}\n {renderCollision({\n isCollisionVisible,\n isLeftCollision,\n isRightCollision,\n isBothCollision,\n })}\n </div>\n );\n };\n const renderTrackTrigger = (\n { value: triggerScore, isFixed, isHidden }: { value: number; isFixed?: boolean; isHidden?: boolean },\n triggerIndex: number,\n ): JSX.Element => {\n const triggerCollision = getTriggerCollisionDirection(\n triggerIndex,\n triggerScore,\n );\n const isLeftCollision = triggerCollision === ECollision.Left;\n const isRightCollision = triggerCollision === ECollision.Right;\n const isBothCollision = triggerCollision === ECollision.Both;\n const isCurrentTriggerMoving = isTriggerMoving(triggerIndex);\n const isCollisionVisible\n = isCurrentTriggerMoving\n && isTriggerMoved\n && (isLeftCollision || isRightCollision || isBothCollision);\n return (\n <div\n key={`${COMPONENT_CLASS}__track__range-triggers--trigger-${triggerIndex}`}\n style={{\n left: getTrackXByScore(triggerScore).toString().concat('px'),\n }}\n className={cn(`${COMPONENT_CLASS}__track__range-triggers--trigger`, {\n [`${COMPONENT_CLASS}__track__range-triggers--trigger__moving`]:\n isCurrentTriggerMoving,\n [`${COMPONENT_CLASS}__track__range-triggers--trigger__fixed`]:\n isFixed,\n [`${COMPONENT_CLASS}__track__range-triggers--trigger__hidden`]:\n isHidden,\n })}\n {...(isMobile\n ? {}\n : {\n onMouseOver: setMouseOverTrigger,\n onMouseLeave: setMouseLeaveTrigger,\n })}\n >\n <div\n className={cn(\n `${COMPONENT_CLASS}__track__range-triggers--trigger__point`,\n {\n [`${COMPONENT_CLASS}__track__range-triggers--trigger__point--shake`]:\n isCollisionVisible,\n },\n )}\n data-point-value={getPointValue(triggerScore)}\n {...(isMobile\n ? {\n onTouchStart: e => onTriggerMouseDown(e, triggerIndex),\n onTouchEnd: resetMovingTrigger,\n }\n : {\n onMouseDown: e => onTriggerMouseDown(e, triggerIndex),\n onMouseUp: resetMovingTrigger,\n })}\n />\n <div\n className={cn(\n `${COMPONENT_CLASS}__track__range-triggers--trigger__actions`,\n {\n [`${COMPONENT_CLASS}__track__range-triggers--trigger__actions--hidden`]:\n isCurrentTriggerMoving,\n },\n )}\n >\n <div\n className={`${COMPONENT_CLASS}__track__range-triggers--trigger__actions--remove`}\n onClick={() => removeTrigger(triggerIndex)}\n >\n <X />\n </div>\n </div>\n {renderCollision({\n isCollisionVisible,\n isLeftCollision,\n isRightCollision,\n isBothCollision,\n className: `${COMPONENT_CLASS}__track__range-triggers--trigger__collision`,\n })}\n </div>\n );\n };\n const renderTrackTriggers = (): JSX.Element => {\n return (\n <div className={`${COMPONENT_CLASS}__track__range-triggers`}>\n {triggers?.map(renderTrackTrigger)}\n </div>\n );\n };\n const renderRangeValue = ({ from, to, label, value }: IRangeItem, rangeIndex: number): JSX.Element | null => {\n if (!value) return null;\n\n const left = getTrackXByScore((to + from) / 2);\n\n return (\n <div\n className={cn(`${COMPONENT_CLASS}__track__ranges-value--item`)}\n style={{ left: `${left}px` }}\n key={`${COMPONENT_CLASS}__track__ranges-value--item-${rangeIndex}`}\n >\n <div\n className={cn(`${COMPONENT_CLASS}__track__ranges-value--item__label`)}\n >\n {label}\n </div>\n <div\n className={cn(`${COMPONENT_CLASS}__track__ranges-value--item__value`)}\n >\n {value}\n </div>\n </div>\n );\n };\n const renderRangesValue = (): JSX.Element => {\n return (\n <div className={cn(`${COMPONENT_CLASS}__track__ranges-value`)}>\n {ranges?.map((range, i) => renderRangeValue(range, i))}\n </div>\n );\n };\n const renderTrackDividers = useMemo(() => {\n const renderTrackDivider = (key = 0): JSX.Element => (\n <div\n key={key}\n className={`${COMPONENT_CLASS}__track__line__dividers--item`}\n />\n );\n\n const dividersCount = Number.parseInt(((max - min) / dividersRange).toString(), 10);\n const dividers: JSX.Element[] = [];\n\n for (let i = 0; i < dividersCount; ++i)\n dividers.push(renderTrackDivider(i));\n\n return (\n <div className={`${COMPONENT_CLASS}__track__line__dividers`}>\n {dividers}\n </div>\n );\n }, [trackRef, minRange, min, max]);\n const renderTrackLine = (): JSX.Element => {\n return (\n <div className={`${COMPONENT_CLASS}__track__line`}>\n <div className={`${COMPONENT_CLASS}__track__line__extremum--min`}>\n {min}\n </div>\n {renderTrackDividers}\n <div className={`${COMPONENT_CLASS}__track__line__extremum--max`}>\n {max}\n </div>\n </div>\n );\n };\n const renderTrack = (): JSX.Element => {\n return (\n <div\n className={cn(`${COMPONENT_CLASS}__track`, className)}\n ref={trackRef}\n >\n {renderTrackLine()}\n {renderAddTrackTrigger()}\n {renderTrackTriggers()}\n {renderRangesValue()}\n </div>\n );\n };\n const render = (): JSX.Element => {\n return (\n <div\n className={COMPONENT_CLASS}\n onMouseOver={setMouseOverTrack}\n onMouseLeave={setMouseLeaveTrack}\n onMouseMove={e => setMouseTrackPosition(e?.clientX)}\n >\n {renderTrack()}\n </div>\n );\n };\n\n return render();\n};\n\nexport default RangeSlider2;\n"],"mappings":"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"}
1
+ {"version":3,"file":"RangeSlider2.js","names":[],"sources":["../../../../../src/Atomic/FormElements/RangeSlider2/RangeSlider2.tsx"],"sourcesContent":["import type {\n MouseEvent as ReactMouseEvent,\n TouchEvent as ReactTouchEvent,\n} from 'react';\nimport type { IRangeItem, IRangeSlider2Props, ITriggerItem } from './RangeSlider2.interface';\n\nimport cn from 'classnames';\nimport React, {\n useEffect,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { ChevronLeft, ChevronRight, Plus, X } from 'react-feather';\n\nimport useIsMobile from '../../../Functions/useIsMobile/useIsMobile';\nimport { compare } from '../../../Functions/utils';\n\nimport { EAssignSide, ECollision, EPointValueType } from './RangeSlider2.interface';\nimport './RangeSlider2.scss';\n\nconst COMPONENT_CLASS = 'range-slider2';\n\nconst RangeSlider2: React.FC<IRangeSlider2Props> = ({\n min = 300,\n max = 850,\n minRange = 50,\n dividersRange = 50,\n pointValueType = EPointValueType.From,\n precision = 0,\n step = 5,\n className,\n value = [],\n onChange = () => { },\n transformDataOnConcat = () => ({ data: [], value: 0 }),\n}) => {\n const { isMobile } = useIsMobile();\n const trackRef = useRef<HTMLDivElement>(null);\n const addTriggerRef = useRef<HTMLDivElement>(null);\n\n // ==================== STATE ==================== //\n\n const [protectedValue, setProtectedValue] = useState<IRangeItem[]>([]);\n const [ranges, setRanges] = useState<IRangeItem[]>(value);\n const [triggers, setTriggers] = useState<ITriggerItem[]>([]);\n\n const [trackWidth, setTrackWidth] = useState(0);\n const [trackPosition, setTrackPosition] = useState(0);\n const [mouseTrackPosition, setMouseTrackPosition] = useState(0);\n\n const [movingTrigger, setMovingTrigger] = useState<HTMLElement | null>(null);\n const [movingTriggerIndex, setMovingTriggerIndex] = useState<number | null>(null);\n const [movingController, setMovingController] = useState<AbortController | null>(null);\n const [movingTriggerData, setMovingTriggerData] = useState<ITriggerItem | null>(null);\n const [isTriggerMoved, setIsTriggerMoved] = useState(false);\n\n const [isMouseOverTrigger, setIsMouseOverTrigger] = useState(false);\n const [isMouseOverTrack, setIsMouseOverTrack] = useState(false);\n\n const [pointsPerPx, setPointsPerPx] = useState(0);\n\n const [addTriggerFixedScore, setAddTriggerFixedScore] = useState<number | null>(null);\n const [addTriggerFixedRange, setAddTriggerFixedRange] = useState<IRangeItem | null>(null);\n const [isAddTriggerFixed, setIsAddTriggerFixed] = useState(false);\n const [assignValueToRange, setAssignValueToRange] = useState<EAssignSide>(EAssignSide.Left);\n\n const setMouseOverTrigger = (): void => setIsMouseOverTrigger(true);\n const setMouseLeaveTrigger = (): void => setIsMouseOverTrigger(false);\n const setMouseOverTrack = (): void => setIsMouseOverTrack(true);\n const setMouseLeaveTrack = (): void => setIsMouseOverTrack(false);\n\n const isTriggerMoving = (triggerIndex: number): boolean => triggerIndex === movingTriggerIndex;\n const countPointsPerPx = (width: number): number => {\n return (max - min) / width;\n };\n\n const fixAddTrigger = (score: number | null, inRange: IRangeItem): void => {\n if (score !== null) {\n setAddTriggerFixedScore(score);\n setAddTriggerFixedRange(inRange);\n setIsAddTriggerFixed(true);\n }\n };\n const unfixAddTrigger = (e?: any): void => {\n e?.stopPropagation();\n e?.preventDefault();\n\n setAddTriggerFixedScore(null);\n setAddTriggerFixedRange(null);\n setIsAddTriggerFixed(false);\n setAssignValueToRange(EAssignSide.Left);\n };\n\n const prepareValue = (value: number | string): number => {\n return Number.parseInt((Number.parseFloat(value.toString()) * 10 ** precision).toString(), 10) / 10 ** precision;\n };\n const addRange = ({ from, to, label, value, data = [], id }: IRangeItem): void =>\n setRanges((ranges) => {\n if (!id) {\n id = (ranges?.length + 1) * -1;\n }\n\n return [\n ...ranges,\n {\n id,\n from,\n to,\n label,\n data,\n value: Number.isInteger(value) ? value : 0,\n },\n ].sort((a, b) => a.from - b.from);\n });\n const updateRange = ({ from, to, label, value, data, id }: IRangeItem): void =>\n setRanges((ranges) => {\n const newRanges = [...ranges];\n const range = newRanges?.find(({ id: rangeId }) => rangeId === id);\n\n if (range) {\n range.from = from ?? range?.from;\n range.to = to ?? range?.to;\n range.label = label ?? range?.label;\n range.value\n = value !== undefined\n ? Number.isInteger(value)\n ? value\n : 0\n : range?.value;\n range.data = data !== undefined ? data : range?.data;\n }\n\n return newRanges;\n });\n const splitRange = (score: number): void => {\n const range = ranges?.find(\n ({ from, to }) => from + minRange <= score + 1 && score <= to - minRange,\n );\n if (!range) return;\n\n const { value = 0, label, data = [] } = addTriggerFixedRange || {};\n addRange({\n value: assignValueToRange === EAssignSide.Right ? value : 0,\n data: assignValueToRange === EAssignSide.Right ? data : undefined,\n label,\n from: score + 1,\n to: range?.to,\n id: null,\n });\n updateRange({\n ...range,\n value: assignValueToRange === EAssignSide.Left ? value : 0,\n data: assignValueToRange === EAssignSide.Left ? data : undefined,\n label,\n to: score,\n });\n\n if (isAddTriggerFixed) unfixAddTrigger();\n };\n const removeRange = (id?: number | null): void =>\n setRanges(ranges => ranges?.filter(range => range?.id !== id));\n const concatRanges = (score: number): void => {\n const [left, right] = ranges?.filter(\n ({ from, to }) => from === score + 1 || score === to,\n );\n const { data, value } = transformDataOnConcat(left, right);\n\n updateRange({ from: left?.from, to: right?.to, id: left?.id, data, value });\n removeRange(right?.id);\n };\n const clearRanges = (): void => setRanges([]);\n\n const addTrigger = (\n value: number | null,\n { isFixed = false, isHidden = false } = {},\n { withRange = true } = {},\n index = triggers.length,\n ): void =>\n setTriggers((state) => {\n if (value === null) return state;\n\n if (withRange) splitRange(value);\n\n const newState = [...state];\n const id = state?.length\n ? Math.max(...state?.map(({ id }) => id)) + 1\n : 0;\n\n newState.splice(index, 0, { id, value, isFixed, isHidden });\n return newState.sort((a, b) => (a.value < b.value ? -1 : 1));\n });\n const updateTrigger = (index: number, value: number): void =>\n setTriggers((state) => {\n const newState = [...state];\n newState[index] = { ...newState[index], value };\n return newState;\n });\n const removeTrigger = (index: number): void =>\n setTriggers((state) => {\n concatRanges(state[index]?.value);\n\n const newState = [...state];\n newState.splice(index, 1);\n return newState;\n });\n const clearTriggers = (): void => setTriggers([]);\n const getTriggerByScore = (score: number | null): ITriggerItem | undefined => {\n if (score === null) return undefined;\n\n return triggers?.find(({ value: triggerScore }) => triggerScore === score);\n };\n const updateRangesByTrigger = (trigger: ITriggerItem): void => {\n const newValue = triggers?.find(({ id }) => id === trigger?.id)?.value ?? 0;\n const oldValue = trigger?.value;\n\n const leftRange = ranges?.find(range => range?.to === oldValue);\n const rightRange = ranges?.find(range => range?.from === oldValue + 1);\n\n if (leftRange && rightRange) {\n updateRange({ from: leftRange?.from, to: newValue, id: leftRange?.id });\n updateRange({\n from: newValue + 1,\n to: rightRange?.to,\n id: rightRange?.id,\n });\n }\n };\n const resetMovingTrigger = (): void => {\n setTimeout(() => {\n setMovingTrigger(null);\n setMovingTriggerIndex(null);\n }, 1);\n };\n\n const getTrackXByScore = (score: number | null): number => {\n if (score === null) return 0;\n\n return (score - min) / pointsPerPx;\n };\n const getScoreByX = (x: number): number => {\n let points = (x - trackPosition) * pointsPerPx + min;\n points -= points % step;\n\n if (points < min) points = min;\n if (points > max) points = max;\n\n return points - 1;\n };\n const getTriggerCollisionDirection = (index: number, points: number): ECollision => {\n if (index <= 0) return points;\n\n const [triggerBefore, triggerAfter] = [\n triggers?.[index - 1]?.value + minRange - 1,\n triggers?.[index + 1]?.value - minRange - 1,\n ];\n\n if (triggerBefore === triggerAfter) return ECollision.Both;\n else if (points === triggerBefore) return ECollision.Left;\n else if (points === triggerAfter) return ECollision.Right;\n else return ECollision.None;\n };\n const getTriggerScore = (index: number, points: number): number => {\n if (index <= 0) return points;\n\n const [triggerBefore, triggerAfter] = [\n triggers?.[index - 1]?.value + minRange - 1,\n triggers?.[index + 1]?.value - minRange - 1,\n ];\n\n if (points < triggerBefore) return triggerBefore;\n else if (points > triggerAfter) return triggerAfter;\n else return points;\n };\n const getRangesList = (): { from: number, to: number }[] => {\n return triggers\n .map(({ value }) => value)\n .sort()\n .reduce((result: { from: number, to: number }[], score, i, scores) => {\n if (i !== 0) {\n result.push({\n from: scores[i - 1],\n to: score,\n });\n }\n return result;\n }, []);\n };\n const getAddTriggerScore = (x: number): number | null => {\n const score = getScoreByX(x);\n\n let result: number | null = getRangesList()?.reduce((result: number | null, { from, to }: IRangeItem) => {\n if (to - from + 1 <= 2 * minRange && from <= score && score <= to) {\n return null;\n }\n\n if (from <= score && score <= from + minRange) {\n return from + minRange - 1;\n }\n else if (to - minRange <= score && score <= to) {\n return to - minRange - 1;\n }\n else {\n return result;\n }\n }, score);\n\n if (!result) {\n const closestRange = getRangesList()\n ?.filter(({ from, to }) => to - from + 1 >= 2 * minRange)\n ?.reduce((result: { from: number; to: number; distance: number } | null, range: IRangeItem) => {\n const distance: number = Math.abs((range.to + range.from) / 2 - score);\n if (!result || distance < result?.distance) {\n return {\n ...range,\n distance,\n };\n }\n\n return result;\n }, null);\n\n if (closestRange) {\n if (closestRange?.to < score) result = closestRange?.to - minRange - 1;\n if (score < closestRange?.from)\n result = closestRange?.from + minRange - 1;\n }\n }\n\n return result;\n };\n const getInRange = (score: number | null): IRangeItem | undefined => {\n return ranges?.find(({ from, to }) => score !== null && from <= score && score <= to);\n };\n const getAddTriggerCollisionDirection = (x: number): number => {\n const triggerScore = getAddTriggerScore(x);\n const inRange = getInRange(triggerScore);\n\n if (!inRange) return 0;\n\n const { from, to } = inRange;\n const triggerBefore = from + minRange - 1;\n const triggerAfter = to - minRange - 1;\n\n if (triggerBefore === triggerAfter) return ECollision.Both;\n else if (triggerScore !== null && triggerScore <= triggerBefore) return ECollision.Left;\n else if (triggerScore !== null && triggerScore >= triggerAfter) return ECollision.Right;\n else return ECollision.None;\n };\n const getAddTriggerPosition = (): number => {\n return isAddTriggerFixed\n ? getTrackXByScore(addTriggerFixedScore ?? 0)\n : mouseTrackPosition;\n };\n const getPointValue = (score: number | null): string => {\n if (score === null) return '';\n\n switch (pointValueType) {\n case EPointValueType.From:\n return `${score + 1}`;\n case EPointValueType.To:\n return `${score}`;\n case EPointValueType.Both:\n default:\n return `${score} | ${score + 1}`;\n }\n };\n\n // EVENTS //\n const onRangeChange = (index: number, value: number, validate = true): void => {\n if (validate) value = prepareValue(value);\n\n if (Number.isNaN(value)) value = 0;\n updateTrigger(index, value);\n };\n const onTriggerMouseDown = (e: ReactMouseEvent | ReactTouchEvent, index: number): void => {\n setMovingTrigger(e.target as HTMLElement);\n setMovingTriggerIndex(index);\n setMovingTriggerData({ ...triggers[index] });\n };\n const onTriggerMove = (e: ReactTouchEvent | ReactMouseEvent | TouchEvent | MouseEvent): boolean => {\n if (e?.cancelable) e?.preventDefault();\n e?.stopPropagation();\n\n if (!movingTriggerIndex || !movingTrigger) {\n return false;\n }\n\n if (!isTriggerMoved) setIsTriggerMoved(true);\n\n const touch = 'touches' in e ? e.touches?.[0] : undefined;\n const x = touch?.clientX ?? ('clientX' in e ? e.clientX : 0);\n const { width: triggerWidth }\n = movingTrigger?.getBoundingClientRect() || {};\n\n if (x < trackPosition || x > trackPosition + trackWidth + triggerWidth)\n return false;\n\n const triggerPoints = getTriggerScore(movingTriggerIndex, getScoreByX(x));\n\n onRangeChange(movingTriggerIndex, triggerPoints);\n\n return true;\n };\n\n useEffect(() => {\n if (isMobile) {\n document.addEventListener('touchend', resetMovingTrigger);\n }\n else {\n document.addEventListener('mouseup', resetMovingTrigger);\n }\n\n return () => {\n if (isMobile) {\n document.removeEventListener('touchend', resetMovingTrigger);\n }\n else {\n document.removeEventListener('mouseup', resetMovingTrigger);\n }\n };\n }, []);\n // MouseMove Event Controller\n useEffect(() => {\n if (!movingTrigger && isTriggerMoved) {\n movingController?.abort();\n setIsTriggerMoved(false);\n setMovingController(null);\n }\n else if (movingTrigger && !isTriggerMoved) {\n setMovingController(new AbortController());\n }\n\n const body = document.getElementsByTagName('body')[0];\n body.classList?.[movingTrigger ? 'add' : 'remove']('moving-cursor');\n }, [movingTrigger]);\n\n useEffect(() => {\n if (movingController) {\n if (isMobile) {\n document.addEventListener('touchmove', onTriggerMove, {\n signal: movingController?.signal,\n });\n }\n else {\n document.addEventListener('mousemove', onTriggerMove, {\n signal: movingController?.signal,\n });\n }\n }\n\n return () => {\n if (isMobile) {\n document.removeEventListener('touchmove', onTriggerMove);\n }\n else {\n document.removeEventListener('mousemove', onTriggerMove);\n }\n };\n }, [movingController]);\n useLayoutEffect(() => {\n const { width = 0, x = 0 } = trackRef?.current?.getBoundingClientRect() || {};\n\n setPointsPerPx(countPointsPerPx(width));\n setTrackWidth(width);\n setTrackPosition(x);\n }, [trackRef]);\n useEffect(() => {\n onChange(ranges, triggers);\n }, [ranges]);\n useEffect(() => {\n clearRanges();\n clearTriggers();\n\n if (protectedValue?.length === 0) {\n addRange({ from: min, to: max });\n addTrigger(min, { isFixed: true, isHidden: true });\n addTrigger(max, { isFixed: true, isHidden: true });\n }\n else {\n protectedValue\n ?.reduce((result, range) => {\n addRange({ ...range });\n\n if (!result.find(score => score === range?.from))\n // @ts-ignore\n result.splice(result?.length - 1, 0, range?.from);\n if (!result.find(score => score === range?.to))\n // @ts-ignore\n result.splice(result?.length - 1, 0, range?.to);\n return result;\n }, [])\n ?.sort((a, b) => (a < b ? -1 : 1))\n ?.filter((item, i, arr) => i === 0 || item - 1 !== arr[i - 1])\n ?.map((score, i, triggers) => {\n if (i === 0 || score - 1 !== triggers[i - 1]) {\n const isExtremum = score === min || score === max;\n\n addTrigger(\n score,\n { isFixed: isExtremum, isHidden: isExtremum },\n { withRange: false },\n );\n }\n\n return score;\n });\n }\n }, [protectedValue]);\n useEffect(() => {\n if (!compare(value, protectedValue)) {\n setProtectedValue(value);\n }\n }, [value]);\n useEffect(() => {\n if (!movingTriggerIndex && movingTriggerData) {\n updateRangesByTrigger({ ...movingTriggerData });\n setMovingTriggerData(null);\n }\n }, [movingTriggerIndex]);\n\n // RENDER //\n const renderCollision = ({\n isCollisionVisible,\n isLeftCollision,\n isRightCollision,\n isBothCollision,\n className,\n }: {\n isCollisionVisible?: boolean;\n isLeftCollision?: boolean;\n isRightCollision?: boolean;\n isBothCollision?: boolean;\n className?: string;\n }): JSX.Element => {\n const pieces = Number.parseInt(((max - min) / minRange).toString(), 10);\n const { width: trackWidth = 0 }\n = trackRef?.current?.getBoundingClientRect() ?? {};\n const collisionWidth = trackWidth / pieces - 4;\n\n const width = isCollisionVisible\n ? isBothCollision\n ? collisionWidth * 2\n : isLeftCollision || isRightCollision\n ? collisionWidth\n : 0\n : 0;\n\n return (\n <div\n className={cn('collision', className, {\n 'collision--visible': isCollisionVisible,\n 'collision--left': isLeftCollision && !isBothCollision,\n 'collision--right': isRightCollision && !isBothCollision,\n 'collision--both': isBothCollision,\n })}\n style={{ width }}\n />\n );\n };\n const renderAddTrackTriggerSettings = (): JSX.Element => {\n const { label, value } = addTriggerFixedRange || {};\n return (\n <div\n className={`${COMPONENT_CLASS}__track__range-triggers--add-trigger__settings`}\n >\n <div\n className={`${COMPONENT_CLASS}__track__range-triggers--add-trigger__settings-body`}\n >\n <div\n className={`${COMPONENT_CLASS}__track__range-triggers--add-trigger__settings-body--assign-left`}\n onClick={(e) => {\n e.stopPropagation();\n setAssignValueToRange(EAssignSide.Left);\n }}\n attr-is-active={`${assignValueToRange === EAssignSide.Left}`}\n >\n <ChevronLeft />\n </div>\n <div\n className={`${COMPONENT_CLASS}__track__range-triggers--add-trigger__settings-body--lenders-count`}\n >\n {label}\n {value}\n </div>\n <div\n className={`${COMPONENT_CLASS}__track__range-triggers--add-trigger__settings-body--assign-right`}\n onClick={(e) => {\n e.stopPropagation();\n setAssignValueToRange(EAssignSide.Right);\n }}\n attr-is-active={`${assignValueToRange === EAssignSide.Right}`}\n >\n <ChevronRight />\n </div>\n </div>\n <div\n className={`${COMPONENT_CLASS}__track__range-triggers--add-trigger__settings-actions`}\n >\n <div\n className={`${COMPONENT_CLASS}__track__range-triggers--add-trigger__settings-actions--cancel`}\n onClick={e => unfixAddTrigger(e)}\n >\n Cancel\n </div>\n <div\n className={`${COMPONENT_CLASS}__track__range-triggers--add-trigger__settings-actions--apply`}\n onClick={(e) => {\n e.stopPropagation();\n addTrigger(addTriggerFixedScore);\n }}\n >\n Apply\n </div>\n </div>\n </div>\n );\n };\n const renderAddTrackTrigger = (): JSX.Element | null => {\n const isNoTriggers = !triggers?.filter(({ isHidden }) => !isHidden).length;\n\n const x = getAddTriggerPosition();\n const score = isAddTriggerFixed\n ? addTriggerFixedScore\n : isNoTriggers && !isMouseOverTrack\n ? (min + max) / 2 - 1\n : getAddTriggerScore(x);\n\n const triggerCollision = !isAddTriggerFixed\n ? getAddTriggerCollisionDirection(x)\n : ECollision.None;\n const isLeftCollision = triggerCollision === ECollision.Left;\n const isRightCollision = triggerCollision === ECollision.Right;\n const isBothCollision = triggerCollision === ECollision.Both;\n const isCollisionVisible\n = (isLeftCollision || isRightCollision || isBothCollision)\n && !(isNoTriggers && !isMouseOverTrack);\n const left = getTrackXByScore(score);\n const inRange = getInRange(score);\n\n const isTriggerWithScoreExists = getTriggerByScore(score);\n\n if (isTriggerWithScoreExists || movingTrigger || isMouseOverTrigger)\n return null;\n\n return (\n <div\n className={cn(\n `${COMPONENT_CLASS}__track__range-triggers--add-trigger`,\n {\n [`${COMPONENT_CLASS}__track__range-triggers--add-trigger--fixed`]:\n isAddTriggerFixed,\n [`${COMPONENT_CLASS}__track__range-triggers--add-trigger--force-visible`]:\n isNoTriggers,\n [`${COMPONENT_CLASS}__track__range-triggers--add-trigger--moved-smoothly`]:\n isNoTriggers && !isMouseOverTrack,\n },\n )}\n style={{ left: `${left}px` }}\n onClick={() =>\n inRange?.value ? fixAddTrigger(score, inRange) : addTrigger(score)}\n >\n <div\n ref={addTriggerRef}\n className={cn(\n `${COMPONENT_CLASS}__track__range-triggers--add-trigger__point`,\n {\n [`${COMPONENT_CLASS}__track__range-triggers--add-trigger__point--shake`]:\n isCollisionVisible,\n },\n )}\n data-point-value={getPointValue(score)}\n >\n <Plus />\n </div>\n {isAddTriggerFixed && renderAddTrackTriggerSettings()}\n {renderCollision({\n isCollisionVisible,\n isLeftCollision,\n isRightCollision,\n isBothCollision,\n })}\n </div>\n );\n };\n const renderTrackTrigger = (\n { value: triggerScore, isFixed, isHidden }: { value: number; isFixed?: boolean; isHidden?: boolean },\n triggerIndex: number,\n ): JSX.Element => {\n const triggerCollision = getTriggerCollisionDirection(\n triggerIndex,\n triggerScore,\n );\n const isLeftCollision = triggerCollision === ECollision.Left;\n const isRightCollision = triggerCollision === ECollision.Right;\n const isBothCollision = triggerCollision === ECollision.Both;\n const isCurrentTriggerMoving = isTriggerMoving(triggerIndex);\n const isCollisionVisible\n = isCurrentTriggerMoving\n && isTriggerMoved\n && (isLeftCollision || isRightCollision || isBothCollision);\n return (\n <div\n key={`${COMPONENT_CLASS}__track__range-triggers--trigger-${triggerIndex}`}\n style={{\n left: getTrackXByScore(triggerScore).toString().concat('px'),\n }}\n className={cn(`${COMPONENT_CLASS}__track__range-triggers--trigger`, {\n [`${COMPONENT_CLASS}__track__range-triggers--trigger__moving`]:\n isCurrentTriggerMoving,\n [`${COMPONENT_CLASS}__track__range-triggers--trigger__fixed`]:\n isFixed,\n [`${COMPONENT_CLASS}__track__range-triggers--trigger__hidden`]:\n isHidden,\n })}\n {...(isMobile\n ? {}\n : {\n onMouseOver: setMouseOverTrigger,\n onMouseLeave: setMouseLeaveTrigger,\n })}\n >\n <div\n className={cn(\n `${COMPONENT_CLASS}__track__range-triggers--trigger__point`,\n {\n [`${COMPONENT_CLASS}__track__range-triggers--trigger__point--shake`]:\n isCollisionVisible,\n },\n )}\n data-point-value={getPointValue(triggerScore)}\n {...(isMobile\n ? {\n onTouchStart: e => onTriggerMouseDown(e, triggerIndex),\n onTouchEnd: resetMovingTrigger,\n }\n : {\n onMouseDown: e => onTriggerMouseDown(e, triggerIndex),\n onMouseUp: resetMovingTrigger,\n })}\n />\n <div\n className={cn(\n `${COMPONENT_CLASS}__track__range-triggers--trigger__actions`,\n {\n [`${COMPONENT_CLASS}__track__range-triggers--trigger__actions--hidden`]:\n isCurrentTriggerMoving,\n },\n )}\n >\n <div\n className={`${COMPONENT_CLASS}__track__range-triggers--trigger__actions--remove`}\n onClick={() => removeTrigger(triggerIndex)}\n >\n <X />\n </div>\n </div>\n {renderCollision({\n isCollisionVisible,\n isLeftCollision,\n isRightCollision,\n isBothCollision,\n className: `${COMPONENT_CLASS}__track__range-triggers--trigger__collision`,\n })}\n </div>\n );\n };\n const renderTrackTriggers = (): JSX.Element => {\n return (\n <div className={`${COMPONENT_CLASS}__track__range-triggers`}>\n {triggers?.map(renderTrackTrigger)}\n </div>\n );\n };\n const renderRangeValue = ({ from, to, label, value }: IRangeItem, rangeIndex: number): JSX.Element | null => {\n if (!value) return null;\n\n const left = getTrackXByScore((to + from) / 2);\n\n return (\n <div\n className={cn(`${COMPONENT_CLASS}__track__ranges-value--item`)}\n style={{ left: `${left}px` }}\n key={`${COMPONENT_CLASS}__track__ranges-value--item-${rangeIndex}`}\n >\n <div\n className={cn(`${COMPONENT_CLASS}__track__ranges-value--item__label`)}\n >\n {label}\n </div>\n <div\n className={cn(`${COMPONENT_CLASS}__track__ranges-value--item__value`)}\n >\n {value}\n </div>\n </div>\n );\n };\n const renderRangesValue = (): JSX.Element => {\n return (\n <div className={cn(`${COMPONENT_CLASS}__track__ranges-value`)}>\n {ranges?.map((range, i) => renderRangeValue(range, i))}\n </div>\n );\n };\n const renderTrackDividers = useMemo(() => {\n const renderTrackDivider = (key = 0): JSX.Element => (\n <div\n key={key}\n className={`${COMPONENT_CLASS}__track__line__dividers--item`}\n />\n );\n\n const dividersCount = Number.parseInt(((max - min) / dividersRange).toString(), 10);\n const dividers: JSX.Element[] = [];\n\n for (let i = 0; i < dividersCount; ++i)\n dividers.push(renderTrackDivider(i));\n\n return (\n <div className={`${COMPONENT_CLASS}__track__line__dividers`}>\n {dividers}\n </div>\n );\n }, [trackRef, minRange, min, max]);\n const renderTrackLine = (): JSX.Element => {\n return (\n <div className={`${COMPONENT_CLASS}__track__line`}>\n <div className={`${COMPONENT_CLASS}__track__line__extremum--min`}>\n {min}\n </div>\n {renderTrackDividers}\n <div className={`${COMPONENT_CLASS}__track__line__extremum--max`}>\n {max}\n </div>\n </div>\n );\n };\n const renderTrack = (): JSX.Element => {\n return (\n <div\n className={cn(`${COMPONENT_CLASS}__track`, className)}\n ref={trackRef}\n >\n {renderTrackLine()}\n {renderAddTrackTrigger()}\n {renderTrackTriggers()}\n {renderRangesValue()}\n </div>\n );\n };\n const render = (): JSX.Element => {\n return (\n <div\n className={COMPONENT_CLASS}\n onMouseOver={setMouseOverTrack}\n onMouseLeave={setMouseLeaveTrack}\n onMouseMove={e => setMouseTrackPosition(e?.clientX)}\n >\n {renderTrack()}\n </div>\n );\n };\n\n return render();\n};\n\nexport default RangeSlider2;\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"SwitchableRow.js","names":[],"sources":["../../../../../src/Atomic/FormElements/SwitchableRow/SwitchableRow.tsx"],"sourcesContent":["import type { ISwitchableRowProps } from './SwitchableRow.interface';\n\nimport cn from 'classnames';\n\nimport React from 'react';\n\nimport Switcher from '../Switcher/Switcher';\nimport './SwitchableRow.scss';\n\nconst RC_default = 'switchable-row';\n\nconst SwitchableRow: React.FC<ISwitchableRowProps> = (props) => {\n const {\n RC = RC_default,\n className,\n children,\n isActive,\n setIsActive,\n switcherLabel,\n isSwitcherLabelBold,\n testId = RC_default,\n } = props || {};\n\n return (\n <div className={cn(RC, className)} data-testid={testId}>\n <div className={cn(`${RC}__cell`)}>\n <Switcher\n isActive={isActive}\n onChange={setIsActive}\n isLabelBold={isSwitcherLabelBold}\n label={switcherLabel}\n testId={`${testId}-switcher`}\n />\n </div>\n {children}\n </div>\n );\n};\n\nexport default SwitchableRow;\n"],"mappings":";;;;;;AASA,IAAM,aAAa;AAEnB,IAAM,iBAAgD,UAAU;CAC9D,MAAM,EACJ,KAAK,YACL,WACA,UACA,UACA,aACA,eACA,qBACA,SAAS,eACP,SAAS,CAAC;CAEd,OACE,qBAAC,OAAD;EAAK,WAAW,GAAG,IAAI,SAAS;EAAG,eAAa;YAAhD,CACE,oBAAC,OAAD;GAAK,WAAW,GAAG,GAAG,GAAG,OAAO;aAC9B,oBAAC,UAAD;IACY;IACV,UAAU;IACV,aAAa;IACb,OAAO;IACP,QAAQ,GAAG,OAAO;GACnB,CAAA;EACE,CAAA,GACJ,QACE;;AAET"}
1
+ {"version":3,"file":"SwitchableRow.js","names":[],"sources":["../../../../../src/Atomic/FormElements/SwitchableRow/SwitchableRow.tsx"],"sourcesContent":["import type { ISwitchableRowProps } from './SwitchableRow.interface';\n\nimport cn from 'classnames';\n\nimport React from 'react';\n\nimport Switcher from '../Switcher/Switcher';\nimport './SwitchableRow.scss';\n\nconst RC_default = 'switchable-row';\n\nconst SwitchableRow: React.FC<ISwitchableRowProps> = (props) => {\n const {\n RC = RC_default,\n className,\n children,\n isActive,\n setIsActive,\n switcherLabel,\n isSwitcherLabelBold,\n testId = RC_default,\n } = props || {};\n\n return (\n <div className={cn(RC, className)} data-testid={testId}>\n <div className={cn(`${RC}__cell`)}>\n <Switcher\n isActive={isActive}\n onChange={setIsActive}\n isLabelBold={isSwitcherLabelBold}\n label={switcherLabel}\n testId={`${testId}-switcher`}\n />\n </div>\n {children}\n </div>\n );\n};\n\nexport default SwitchableRow;\n"],"mappings":";;;;;;AASA,IAAM,aAAa;AAEnB,IAAM,iBAAgD,UAAU;CAC9D,MAAM,EACJ,KAAK,YACL,WACA,UACA,UACA,aACA,eACA,qBACA,SAAS,eACP,SAAS,CAAC;CAEd,OACE,qBAAC,OAAD;EAAK,WAAW,GAAG,IAAI,SAAS;EAAG,eAAa;EAAhD,UAAA,CACE,oBAAC,OAAD;GAAK,WAAW,GAAG,GAAG,GAAG,OAAO;GAC9B,UAAA,oBAAC,UAAD;IACY;IACV,UAAU;IACV,aAAa;IACb,OAAO;IACP,QAAQ,GAAG,OAAO;GACnB,CAAA;EACE,CAAA,GACJ,QACE;;AAET"}
@@ -1 +1 @@
1
- {"version":3,"file":"Switcher.js","names":[],"sources":["../../../../../src/Atomic/FormElements/Switcher/Switcher.tsx"],"sourcesContent":["import type { ISwitcherProps } from './Switcher.interface';\nimport cn from 'classnames';\n\nimport React from 'react';\n\nimport Hint from '../../UI/Hint/Hint';\n\nimport './Switcher.scss';\n\nconst RC = 'switcher';\n\nconst Switcher: React.FC<ISwitcherProps> = ({\n label,\n className,\n isActive,\n disabled,\n onChange,\n isLabelBold,\n hint,\n hintSide,\n testId = 'switcher',\n}) => {\n return (\n <div\n data-testid={testId}\n className={cn(RC, className, { [`${RC}_disabled`]: disabled })}\n >\n <button\n type=\"button\"\n data-testid={`${testId}-button`}\n className={cn(`${RC}__button`)}\n disabled={disabled}\n onClick={e => onChange(!isActive, e)}\n >\n <div\n className={cn(`${RC}__button-content`, {\n [`${RC}__button-content_active`]: isActive,\n })}\n >\n <div className={`${RC}__ball`} />\n </div>\n {label && (\n <span\n className={cn(`${RC}__label`, {\n [`${RC}__label_bold`]: isLabelBold,\n })}\n >\n {label}\n </span>\n )}\n </button>\n {hint && <Hint className={`${RC}__hint`} hint={hint} side={hintSide} />}\n </div>\n );\n};\n\nexport default Switcher;\n"],"mappings":";;;;;;AASA,IAAM,KAAK;AAEX,IAAM,YAAsC,EAC1C,OACA,WACA,UACA,UACA,UACA,aACA,MACA,UACA,SAAS,iBACL;CACJ,OACE,qBAAC,OAAD;EACE,eAAa;EACb,WAAW,GAAG,IAAI,WAAW,GAAG,GAAG,GAAG,aAAa,SAAS,CAAC;YAF/D,CAIE,qBAAC,UAAD;GACE,MAAK;GACL,eAAa,GAAG,OAAO;GACvB,WAAW,GAAG,GAAG,GAAG,SAAS;GACnB;GACV,UAAS,MAAK,SAAS,CAAC,UAAU,CAAC;aALrC,CAOE,oBAAC,OAAD;IACE,WAAW,GAAG,GAAG,GAAG,mBAAmB,GACpC,GAAG,GAAG,2BAA2B,SACpC,CAAC;cAED,oBAAC,OAAD,EAAK,WAAW,GAAG,GAAG,QAAU,CAAA;GAC7B,CAAA,GACJ,SACC,oBAAC,QAAD;IACE,WAAW,GAAG,GAAG,GAAG,UAAU,GAC3B,GAAG,GAAG,gBAAgB,YACzB,CAAC;cAEA;GACG,CAAA,CAEF;MACP,QAAQ,oBAAC,MAAD;GAAM,WAAW,GAAG,GAAG;GAAe;GAAM,MAAM;EAAW,CAAA,CACnE;;AAET"}
1
+ {"version":3,"file":"Switcher.js","names":[],"sources":["../../../../../src/Atomic/FormElements/Switcher/Switcher.tsx"],"sourcesContent":["import type { ISwitcherProps } from './Switcher.interface';\nimport cn from 'classnames';\n\nimport React from 'react';\n\nimport Hint from '../../UI/Hint/Hint';\n\nimport './Switcher.scss';\n\nconst RC = 'switcher';\n\nconst Switcher: React.FC<ISwitcherProps> = ({\n label,\n className,\n isActive,\n disabled,\n onChange,\n isLabelBold,\n hint,\n hintSide,\n testId = 'switcher',\n}) => {\n return (\n <div\n data-testid={testId}\n className={cn(RC, className, { [`${RC}_disabled`]: disabled })}\n >\n <button\n type=\"button\"\n data-testid={`${testId}-button`}\n className={cn(`${RC}__button`)}\n disabled={disabled}\n onClick={e => onChange(!isActive, e)}\n >\n <div\n className={cn(`${RC}__button-content`, {\n [`${RC}__button-content_active`]: isActive,\n })}\n >\n <div className={`${RC}__ball`} />\n </div>\n {label && (\n <span\n className={cn(`${RC}__label`, {\n [`${RC}__label_bold`]: isLabelBold,\n })}\n >\n {label}\n </span>\n )}\n </button>\n {hint && <Hint className={`${RC}__hint`} hint={hint} side={hintSide} />}\n </div>\n );\n};\n\nexport default Switcher;\n"],"mappings":";;;;;;AASA,IAAM,KAAK;AAEX,IAAM,YAAsC,EAC1C,OACA,WACA,UACA,UACA,UACA,aACA,MACA,UACA,SAAS,iBACL;CACJ,OACE,qBAAC,OAAD;EACE,eAAa;EACb,WAAW,GAAG,IAAI,WAAW,GAAG,GAAG,GAAG,aAAa,SAAS,CAAC;EAF/D,UAAA,CAIE,qBAAC,UAAD;GACE,MAAK;GACL,eAAa,GAAG,OAAO;GACvB,WAAW,GAAG,GAAG,GAAG,SAAS;GACnB;GACV,UAAS,MAAK,SAAS,CAAC,UAAU,CAAC;GALrC,UAAA,CAOE,oBAAC,OAAD;IACE,WAAW,GAAG,GAAG,GAAG,mBAAmB,GACpC,GAAG,GAAG,2BAA2B,SACpC,CAAC;IAED,UAAA,oBAAC,OAAD,EAAK,WAAW,GAAG,GAAG,QAAU,CAAA;GAC7B,CAAA,GACJ,SACC,oBAAC,QAAD;IACE,WAAW,GAAG,GAAG,GAAG,UAAU,GAC3B,GAAG,GAAG,gBAAgB,YACzB,CAAC;IAEA,UAAA;GACG,CAAA,CAEF;EACP,CAAA,GAAA,QAAQ,oBAAC,MAAD;GAAM,WAAW,GAAG,GAAG;GAAe;GAAM,MAAM;EAAW,CAAA,CACnE;;AAET"}
@@ -1 +1 @@
1
- {"version":3,"file":"SwitcherCheckbox.js","names":[],"sources":["../../../../../src/Atomic/FormElements/SwitcherCheckbox/SwitcherCheckbox.tsx"],"sourcesContent":["import type { ReactElement } from 'react';\n\nimport type { ISwitcherCheckboxProps } from './SwitcherCheckbox.interface';\n\nimport cn from 'classnames';\nimport CheckboxesLine from '../CheckboxesLine/CheckboxesLine';\n\nimport Switcher from '../Switcher/Switcher';\nimport './SwitcherCheckbox.scss';\n\nconst RC = 'switcher-hide';\n\nfunction SwitcherCheckbox({\n label,\n hint,\n items = [],\n value = [],\n className,\n isLabelBold,\n isActive,\n hintSide,\n disabled,\n hideChildren = true,\n onSwitcherChange = () => {},\n onChange = () => {},\n}: ISwitcherCheckboxProps): ReactElement {\n const renderCheckboxes: () => ReactElement = () => {\n return <CheckboxesLine items={items} value={value} onChange={onChange} />;\n };\n return (\n <div\n className={cn(RC, className, {\n [`${RC}_closed`]: !isActive,\n [`${RC}_disabled`]: disabled,\n })}\n >\n <Switcher\n className={`${RC}__switcher`}\n hintSide={hintSide}\n label={label}\n isActive={isActive}\n onChange={value => onSwitcherChange(value)}\n isLabelBold={isLabelBold}\n hint={hint}\n />\n {isActive ? renderCheckboxes() : !hideChildren ? renderCheckboxes() : ''}\n </div>\n );\n}\n\nexport default SwitcherCheckbox;\n"],"mappings":";;;;;;AAUA,IAAM,KAAK;AAEX,SAAS,iBAAiB,EACxB,OACA,MACA,QAAQ,CAAC,GACT,QAAQ,CAAC,GACT,WACA,aACA,UACA,UACA,UACA,eAAe,MACf,yBAAyB,CAAC,GAC1B,iBAAiB,CAAC,KACqB;CACvC,MAAM,yBAA6C;EACjD,OAAO,oBAAC,gBAAD;GAAuB;GAAc;GAAiB;EAAW,CAAA;CAC1E;CACA,OACE,qBAAC,OAAD;EACE,WAAW,GAAG,IAAI,WAAW;IAC1B,GAAG,GAAG,WAAW,CAAC;IAClB,GAAG,GAAG,aAAa;EACtB,CAAC;YAJH,CAME,oBAAC,UAAD;GACE,WAAW,GAAG,GAAG;GACP;GACH;GACG;GACV,WAAU,UAAS,iBAAiB,KAAK;GAC5B;GACP;EACP,CAAA,GACA,WAAW,iBAAiB,IAAI,CAAC,eAAe,iBAAiB,IAAI,EACnE;;AAET"}
1
+ {"version":3,"file":"SwitcherCheckbox.js","names":[],"sources":["../../../../../src/Atomic/FormElements/SwitcherCheckbox/SwitcherCheckbox.tsx"],"sourcesContent":["import type { ReactElement } from 'react';\n\nimport type { ISwitcherCheckboxProps } from './SwitcherCheckbox.interface';\n\nimport cn from 'classnames';\nimport CheckboxesLine from '../CheckboxesLine/CheckboxesLine';\n\nimport Switcher from '../Switcher/Switcher';\nimport './SwitcherCheckbox.scss';\n\nconst RC = 'switcher-hide';\n\nfunction SwitcherCheckbox({\n label,\n hint,\n items = [],\n value = [],\n className,\n isLabelBold,\n isActive,\n hintSide,\n disabled,\n hideChildren = true,\n onSwitcherChange = () => {},\n onChange = () => {},\n}: ISwitcherCheckboxProps): ReactElement {\n const renderCheckboxes: () => ReactElement = () => {\n return <CheckboxesLine items={items} value={value} onChange={onChange} />;\n };\n return (\n <div\n className={cn(RC, className, {\n [`${RC}_closed`]: !isActive,\n [`${RC}_disabled`]: disabled,\n })}\n >\n <Switcher\n className={`${RC}__switcher`}\n hintSide={hintSide}\n label={label}\n isActive={isActive}\n onChange={value => onSwitcherChange(value)}\n isLabelBold={isLabelBold}\n hint={hint}\n />\n {isActive ? renderCheckboxes() : !hideChildren ? renderCheckboxes() : ''}\n </div>\n );\n}\n\nexport default SwitcherCheckbox;\n"],"mappings":";;;;;;AAUA,IAAM,KAAK;AAEX,SAAS,iBAAiB,EACxB,OACA,MACA,QAAQ,CAAC,GACT,QAAQ,CAAC,GACT,WACA,aACA,UACA,UACA,UACA,eAAe,MACf,yBAAyB,CAAC,GAC1B,iBAAiB,CAAC,KACqB;CACvC,MAAM,yBAA6C;EACjD,OAAO,oBAAC,gBAAD;GAAuB;GAAc;GAAiB;EAAW,CAAA;CAC1E;CACA,OACE,qBAAC,OAAD;EACE,WAAW,GAAG,IAAI,WAAW;IAC1B,GAAG,GAAG,WAAW,CAAC;IAClB,GAAG,GAAG,aAAa;EACtB,CAAC;EAJH,UAAA,CAME,oBAAC,UAAD;GACE,WAAW,GAAG,GAAG;GACP;GACH;GACG;GACV,WAAU,UAAS,iBAAiB,KAAK;GAC5B;GACP;EACP,CAAA,GACA,WAAW,iBAAiB,IAAI,CAAC,eAAe,iBAAiB,IAAI,EACnE;;AAET"}
@@ -1 +1 @@
1
- {"version":3,"file":"SwitcherHide.js","names":[],"sources":["../../../../../src/Atomic/FormElements/SwitcherHide/SwitcherHide.tsx"],"sourcesContent":["import type { ISwitcherHideProps } from './SwitcherHide.interface';\nimport cn from 'classnames';\n\nimport React from 'react';\n\nimport Switcher from '../Switcher/Switcher';\n\nimport './SwitcherHide.scss';\n\nconst RC = 'switcher-hide';\n\nconst SwitcherHide: React.FC<ISwitcherHideProps> = ({\n children,\n label,\n hint,\n className,\n isLabelBold,\n isActive,\n hintSide,\n disabled,\n onChange,\n testId = RC,\n}) => {\n return (\n <div\n data-testid={testId}\n className={cn(RC, className, {\n [`${RC}_closed`]: !isActive,\n [`${RC}_disabled`]: disabled,\n })}\n >\n <Switcher\n testId={`${testId}-switcher`}\n className={`${RC}__switcher`}\n hintSide={hintSide}\n label={label}\n isActive={isActive}\n onChange={(value, e) => onChange(value, e)}\n isLabelBold={isLabelBold}\n hint={hint}\n />\n {isActive && children}\n </div>\n );\n};\n\nexport default SwitcherHide;\n"],"mappings":";;;;;;AASA,IAAM,KAAK;AAEX,IAAM,gBAA8C,EAClD,UACA,OACA,MACA,WACA,aACA,UACA,UACA,UACA,UACA,SAAS,SACL;CACJ,OACE,qBAAC,OAAD;EACE,eAAa;EACb,WAAW,GAAG,IAAI,WAAW;IAC1B,GAAG,GAAG,WAAW,CAAC;IAClB,GAAG,GAAG,aAAa;EACtB,CAAC;YALH,CAOE,oBAAC,UAAD;GACE,QAAQ,GAAG,OAAO;GAClB,WAAW,GAAG,GAAG;GACP;GACH;GACG;GACV,WAAW,OAAO,MAAM,SAAS,OAAO,CAAC;GAC5B;GACP;EACP,CAAA,GACA,YAAY,QACV;;AAET"}
1
+ {"version":3,"file":"SwitcherHide.js","names":[],"sources":["../../../../../src/Atomic/FormElements/SwitcherHide/SwitcherHide.tsx"],"sourcesContent":["import type { ISwitcherHideProps } from './SwitcherHide.interface';\nimport cn from 'classnames';\n\nimport React from 'react';\n\nimport Switcher from '../Switcher/Switcher';\n\nimport './SwitcherHide.scss';\n\nconst RC = 'switcher-hide';\n\nconst SwitcherHide: React.FC<ISwitcherHideProps> = ({\n children,\n label,\n hint,\n className,\n isLabelBold,\n isActive,\n hintSide,\n disabled,\n onChange,\n testId = RC,\n}) => {\n return (\n <div\n data-testid={testId}\n className={cn(RC, className, {\n [`${RC}_closed`]: !isActive,\n [`${RC}_disabled`]: disabled,\n })}\n >\n <Switcher\n testId={`${testId}-switcher`}\n className={`${RC}__switcher`}\n hintSide={hintSide}\n label={label}\n isActive={isActive}\n onChange={(value, e) => onChange(value, e)}\n isLabelBold={isLabelBold}\n hint={hint}\n />\n {isActive && children}\n </div>\n );\n};\n\nexport default SwitcherHide;\n"],"mappings":";;;;;;AASA,IAAM,KAAK;AAEX,IAAM,gBAA8C,EAClD,UACA,OACA,MACA,WACA,aACA,UACA,UACA,UACA,UACA,SAAS,SACL;CACJ,OACE,qBAAC,OAAD;EACE,eAAa;EACb,WAAW,GAAG,IAAI,WAAW;IAC1B,GAAG,GAAG,WAAW,CAAC;IAClB,GAAG,GAAG,aAAa;EACtB,CAAC;EALH,UAAA,CAOE,oBAAC,UAAD;GACE,QAAQ,GAAG,OAAO;GAClB,WAAW,GAAG,GAAG;GACP;GACH;GACG;GACV,WAAW,OAAO,MAAM,SAAS,OAAO,CAAC;GAC5B;GACP;EACP,CAAA,GACA,YAAY,QACV;;AAET"}
@@ -1 +1 @@
1
- {"version":3,"file":"SwitcherRadio.js","names":[],"sources":["../../../../../src/Atomic/FormElements/SwitcherRadio/SwitcherRadio.tsx"],"sourcesContent":["import type { ISwitcherRadioProps } from './SwitcherRadio.interface';\nimport cn from 'classnames';\n\nimport React from 'react';\n\nimport RadioInput from '../RadioInput/RadioInput';\nimport SwitcherHide from '../SwitcherHide/SwitcherHide';\n\nimport './SwitcherRadio.scss';\n\nconst RC = 'switcher-radio';\n\nconst SwitcherRadio: React.FC<ISwitcherRadioProps> = ({\n options,\n label,\n hint,\n hintSide,\n isLabelBold,\n direction,\n className,\n value,\n disabled,\n isHideSwitcher = false,\n onChange = () => {},\n isActive = true,\n setIsActive = () => {},\n testId = '',\n}) => {\n const safelyValue = value || options?.[0]?.value || '';\n\n const renderRadioGroup = (): JSX.Element => {\n return (\n <div\n className={cn(\n `${RC}__wrap`,\n { [`switcher-radio_${direction}`]: direction },\n { disabled },\n className,\n )}\n >\n {options?.map((option, index) => (\n // @ts-ignore\n <RadioInput\n {...option}\n key={option.id || index}\n className=\"switcher-radio__radio\"\n checked={safelyValue}\n onChange={val => onChange(val)}\n />\n ))}\n </div>\n );\n };\n\n const renderSwitcher = (body: any): JSX.Element => {\n return (\n <SwitcherHide\n testId={`switcher-radio--${testId}`}\n isActive={isActive}\n label={label}\n hint={hint}\n hintSide={hintSide}\n onChange={setIsActive}\n isLabelBold={isLabelBold}\n className={cn(RC, className)}\n disabled={disabled}\n >\n {body}\n </SwitcherHide>\n );\n };\n\n return !isHideSwitcher\n ? renderSwitcher(renderRadioGroup())\n : renderRadioGroup();\n};\n\nexport default SwitcherRadio;\n"],"mappings":";;;;;;;AAUA,IAAM,KAAK;AAEX,IAAM,iBAAgD,EACpD,SACA,OACA,MACA,UACA,aACA,WACA,WACA,OACA,UACA,iBAAiB,OACjB,iBAAiB,CAAC,GAClB,WAAW,MACX,oBAAoB,CAAC,GACrB,SAAS,SACL;CACJ,MAAM,cAAc,SAAS,UAAU,EAAE,EAAE,SAAS;CAEpD,MAAM,yBAAsC;EAC1C,OACE,oBAAC,OAAD;GACE,WAAW,GACT,GAAG,GAAG,SACN,GAAG,kBAAkB,cAAc,UAAU,GAC7C,EAAE,SAAS,GACX,SACF;aAEC,SAAS,KAAK,QAAQ,UAErB,8BAAC,YAAD;IACE,GAAI;IACJ,KAAK,OAAO,MAAM;IAClB,WAAU;IACV,SAAS;IACT,WAAU,QAAO,SAAS,GAAG;GAC9B,CAAA,CACF;EACE,CAAA;CAET;CAEA,MAAM,kBAAkB,SAA2B;EACjD,OACE,oBAAC,cAAD;GACE,QAAQ,mBAAmB;GACjB;GACH;GACD;GACI;GACV,UAAU;GACG;GACb,WAAW,GAAG,IAAI,SAAS;GACjB;aAET;EACW,CAAA;CAElB;CAEA,OAAO,CAAC,iBACJ,eAAe,iBAAiB,CAAC,IACjC,iBAAiB;AACvB"}
1
+ {"version":3,"file":"SwitcherRadio.js","names":[],"sources":["../../../../../src/Atomic/FormElements/SwitcherRadio/SwitcherRadio.tsx"],"sourcesContent":["import type { ISwitcherRadioProps } from './SwitcherRadio.interface';\nimport cn from 'classnames';\n\nimport React from 'react';\n\nimport RadioInput from '../RadioInput/RadioInput';\nimport SwitcherHide from '../SwitcherHide/SwitcherHide';\n\nimport './SwitcherRadio.scss';\n\nconst RC = 'switcher-radio';\n\nconst SwitcherRadio: React.FC<ISwitcherRadioProps> = ({\n options,\n label,\n hint,\n hintSide,\n isLabelBold,\n direction,\n className,\n value,\n disabled,\n isHideSwitcher = false,\n onChange = () => {},\n isActive = true,\n setIsActive = () => {},\n testId = '',\n}) => {\n const safelyValue = value || options?.[0]?.value || '';\n\n const renderRadioGroup = (): JSX.Element => {\n return (\n <div\n className={cn(\n `${RC}__wrap`,\n { [`switcher-radio_${direction}`]: direction },\n { disabled },\n className,\n )}\n >\n {options?.map((option, index) => (\n // @ts-ignore\n <RadioInput\n {...option}\n key={option.id || index}\n className=\"switcher-radio__radio\"\n checked={safelyValue}\n onChange={val => onChange(val)}\n />\n ))}\n </div>\n );\n };\n\n const renderSwitcher = (body: any): JSX.Element => {\n return (\n <SwitcherHide\n testId={`switcher-radio--${testId}`}\n isActive={isActive}\n label={label}\n hint={hint}\n hintSide={hintSide}\n onChange={setIsActive}\n isLabelBold={isLabelBold}\n className={cn(RC, className)}\n disabled={disabled}\n >\n {body}\n </SwitcherHide>\n );\n };\n\n return !isHideSwitcher\n ? renderSwitcher(renderRadioGroup())\n : renderRadioGroup();\n};\n\nexport default SwitcherRadio;\n"],"mappings":";;;;;;;AAUA,IAAM,KAAK;AAEX,IAAM,iBAAgD,EACpD,SACA,OACA,MACA,UACA,aACA,WACA,WACA,OACA,UACA,iBAAiB,OACjB,iBAAiB,CAAC,GAClB,WAAW,MACX,oBAAoB,CAAC,GACrB,SAAS,SACL;CACJ,MAAM,cAAc,SAAS,UAAU,EAAE,EAAE,SAAS;CAEpD,MAAM,yBAAsC;EAC1C,OACE,oBAAC,OAAD;GACE,WAAW,GACT,GAAG,GAAG,SACN,GAAG,kBAAkB,cAAc,UAAU,GAC7C,EAAE,SAAS,GACX,SACF;GAEC,UAAA,SAAS,KAAK,QAAQ,UAErB,8BAAC,YAAD;IACE,GAAI;IACJ,KAAK,OAAO,MAAM;IAClB,WAAU;IACV,SAAS;IACT,WAAU,QAAO,SAAS,GAAG;GAC9B,CAAA,CACF;EACE,CAAA;CAET;CAEA,MAAM,kBAAkB,SAA2B;EACjD,OACE,oBAAC,cAAD;GACE,QAAQ,mBAAmB;GACjB;GACH;GACD;GACI;GACV,UAAU;GACG;GACb,WAAW,GAAG,IAAI,SAAS;GACjB;GAET,UAAA;EACW,CAAA;CAElB;CAEA,OAAO,CAAC,iBACJ,eAAe,iBAAiB,CAAC,IACjC,iBAAiB;AACvB"}
@@ -1 +1 @@
1
- {"version":3,"file":"SwitcherRange.js","names":[],"sources":["../../../../../src/Atomic/FormElements/SwitcherRange/SwitcherRange.tsx"],"sourcesContent":["import type { ISwitcherRangeProps } from './SwitcherRange.interface';\nimport React from 'react';\n\nimport RangeInputs from '../RangeInputs/RangeInputs';\nimport SwitcherHide from '../SwitcherHide/SwitcherHide';\n\nconst RC = 'switcher-range';\n\nconst SwitcherRange: React.FC<ISwitcherRangeProps> = ({\n label,\n isLabelBold,\n hint,\n isActive,\n setIsActive,\n value,\n onChange,\n isInputsColumn,\n validateErrors,\n withZero,\n isPrice,\n inputsType,\n testId = RC,\n}) => {\n // const [error, setError] = useState(\"\");\n\n // const rangeValidation = () => {\n // if (inputFrom && inputTo && inputFrom > inputTo) {\n // setError(\"Invalid range\");\n // } else {\n // setError(\"\");\n // }\n // };\n\n return (\n <SwitcherHide\n testId={testId}\n label={label}\n hint={hint}\n className={RC}\n isActive={isActive}\n onChange={setIsActive}\n isLabelBold={isLabelBold}\n >\n <RangeInputs\n testId={testId}\n className=\"switcher-range__range-inputs\"\n type={inputsType}\n onChange={onChange}\n value={value}\n setError={() => {}}\n isColumnPosition={isInputsColumn}\n validateErrors={validateErrors}\n withZero={withZero}\n isPrice={isPrice}\n />\n </SwitcherHide>\n );\n};\n\nexport default SwitcherRange;\n"],"mappings":";;;;;AAMA,IAAM,KAAK;AAEX,IAAM,iBAAgD,EACpD,OACA,aACA,MACA,UACA,aACA,OACA,UACA,gBACA,gBACA,UACA,SACA,YACA,SAAS,SACL;CAWJ,OACE,oBAAC,cAAD;EACU;EACD;EACD;EACN,WAAW;EACD;EACV,UAAU;EACG;YAEb,oBAAC,aAAD;GACU;GACR,WAAU;GACV,MAAM;GACI;GACH;GACP,gBAAgB,CAAC;GACjB,kBAAkB;GACF;GACN;GACD;EACV,CAAA;CACW,CAAA;AAElB"}
1
+ {"version":3,"file":"SwitcherRange.js","names":[],"sources":["../../../../../src/Atomic/FormElements/SwitcherRange/SwitcherRange.tsx"],"sourcesContent":["import type { ISwitcherRangeProps } from './SwitcherRange.interface';\nimport React from 'react';\n\nimport RangeInputs from '../RangeInputs/RangeInputs';\nimport SwitcherHide from '../SwitcherHide/SwitcherHide';\n\nconst RC = 'switcher-range';\n\nconst SwitcherRange: React.FC<ISwitcherRangeProps> = ({\n label,\n isLabelBold,\n hint,\n isActive,\n setIsActive,\n value,\n onChange,\n isInputsColumn,\n validateErrors,\n withZero,\n isPrice,\n inputsType,\n testId = RC,\n}) => {\n // const [error, setError] = useState(\"\");\n\n // const rangeValidation = () => {\n // if (inputFrom && inputTo && inputFrom > inputTo) {\n // setError(\"Invalid range\");\n // } else {\n // setError(\"\");\n // }\n // };\n\n return (\n <SwitcherHide\n testId={testId}\n label={label}\n hint={hint}\n className={RC}\n isActive={isActive}\n onChange={setIsActive}\n isLabelBold={isLabelBold}\n >\n <RangeInputs\n testId={testId}\n className=\"switcher-range__range-inputs\"\n type={inputsType}\n onChange={onChange}\n value={value}\n setError={() => {}}\n isColumnPosition={isInputsColumn}\n validateErrors={validateErrors}\n withZero={withZero}\n isPrice={isPrice}\n />\n </SwitcherHide>\n );\n};\n\nexport default SwitcherRange;\n"],"mappings":";;;;;AAMA,IAAM,KAAK;AAEX,IAAM,iBAAgD,EACpD,OACA,aACA,MACA,UACA,aACA,OACA,UACA,gBACA,gBACA,UACA,SACA,YACA,SAAS,SACL;CAWJ,OACE,oBAAC,cAAD;EACU;EACD;EACD;EACN,WAAW;EACD;EACV,UAAU;EACG;EAEb,UAAA,oBAAC,aAAD;GACU;GACR,WAAU;GACV,MAAM;GACI;GACH;GACP,gBAAgB,CAAC;GACjB,kBAAkB;GACF;GACN;GACD;EACV,CAAA;CACW,CAAA;AAElB"}
@@ -1,7 +1,7 @@
1
1
  import '../../../styles/base.css';
2
2
  import RangeList from "../RangeList/RangeList.js";
3
3
  import SwitcherHide from "../SwitcherHide/SwitcherHide.js";
4
- import './SwitcherRangeList.styles.css';/* empty css */
4
+ import '../Datepicker/Datepicker.styles.css';/* empty css */
5
5
  import cn from "classnames";
6
6
  import { jsx } from "react/jsx-runtime";
7
7
  //#region src/Atomic/FormElements/SwitcherRangeList/SwitcherRangeList.tsx
@@ -1 +1 @@
1
- {"version":3,"file":"SwitcherRangeList.js","names":[],"sources":["../../../../../src/Atomic/FormElements/SwitcherRangeList/SwitcherRangeList.tsx"],"sourcesContent":["import type { ReactElement } from 'react';\n\nimport type { ISwitcherRangeListProps } from './SwitcherRangeList.interface';\n\nimport cn from 'classnames';\nimport RangeList from '../RangeList/RangeList';\n\nimport SwitcherHide from '../SwitcherHide/SwitcherHide';\nimport './SwitcherRangeList.scss';\n\nconst RC = 'switcher-range-list';\nfunction noop(): void {}\n\nfunction SwitcherRangeList(props: ISwitcherRangeListProps): ReactElement {\n const {\n className,\n label,\n isLabelBold,\n hint,\n hintSide,\n disabled,\n isActive,\n value,\n validateErrors,\n isFloatValues,\n decimalPlaces,\n error,\n defaultErrorText,\n nullValueText,\n isOnlyOneRow,\n setIsActive = noop,\n onChange = noop,\n testId,\n } = props;\n\n // Adapter: ISwitcherRangeListValues[] <-> RangeValue[]\n const valueAdapter = value?.map(v => ({ from: v.from, to: v.to })) ?? [];\n const onChangeAdapter = (vals: { from: number | string; to: number | string }[]): void => {\n const mapped = vals.map(v => ({\n from: typeof v.from === 'string' ? Number(v.from) : v.from,\n to: typeof v.to === 'string' ? Number(v.to) : v.to,\n }));\n onChange(mapped);\n };\n\n const validateErrorsAdapter = validateErrors\n ? (from: string | number, to: string | number) => {\n // Call original validateErrors with string values\n const valid = validateErrors(String(from), String(to));\n return valid ? undefined : defaultErrorText ?? 'Invalid range';\n }\n : undefined;\n\n return (\n <SwitcherHide\n isActive={isActive}\n onChange={setIsActive}\n label={label}\n isLabelBold={isLabelBold}\n hint={hint}\n hintSide={hintSide}\n className={cn(RC, className)}\n disabled={disabled}\n >\n <div className=\"switcher-range-list__row\">\n <RangeList\n testId={testId}\n className={`${RC}__range-list`}\n value={valueAdapter}\n isOnlyOneRow={isOnlyOneRow}\n onChange={onChangeAdapter}\n validateErrors={validateErrorsAdapter}\n isFloatValues={isFloatValues}\n decimalPlaces={decimalPlaces}\n error={error}\n defaultErrorText={defaultErrorText}\n nullValueText={nullValueText}\n />\n </div>\n </SwitcherHide>\n );\n}\n\nexport default SwitcherRangeList;\n"],"mappings":";;;;;;AAUA,IAAM,KAAK;AACX,SAAS,OAAa,CAAC;AAEvB,SAAS,kBAAkB,OAA8C;CACvE,MAAM,EACJ,WACA,OACA,aACA,MACA,UACA,UACA,UACA,OACA,gBACA,eACA,eACA,OACA,kBACA,eACA,cACA,cAAc,MACd,WAAW,MACX,WACE;CAGJ,MAAM,eAAe,OAAO,KAAI,OAAM;EAAE,MAAM,EAAE;EAAM,IAAI,EAAE;CAAG,EAAE,KAAK,CAAC;CACvE,MAAM,mBAAmB,SAAiE;EACxF,MAAM,SAAS,KAAK,KAAI,OAAM;GAC5B,MAAM,OAAO,EAAE,SAAS,WAAW,OAAO,EAAE,IAAI,IAAI,EAAE;GACtD,IAAI,OAAO,EAAE,OAAO,WAAW,OAAO,EAAE,EAAE,IAAI,EAAE;EAClD,EAAE;EACF,SAAS,MAAM;CACjB;CAEA,MAAM,wBAAwB,kBACzB,MAAuB,OAAwB;EAG9C,OADc,eAAe,OAAO,IAAI,GAAG,OAAO,EAAE,CAC7C,IAAQ,KAAA,IAAY,oBAAoB;CACjD,IACA,KAAA;CAEJ,OACE,oBAAC,cAAD;EACY;EACV,UAAU;EACH;EACM;EACP;EACI;EACV,WAAW,GAAG,IAAI,SAAS;EACjB;YAEV,oBAAC,OAAD;GAAK,WAAU;aACb,oBAAC,WAAD;IACU;IACR,WAAW,GAAG,GAAG;IACjB,OAAO;IACO;IACd,UAAU;IACV,gBAAgB;IACD;IACA;IACR;IACW;IACH;GAChB,CAAA;EACE,CAAA;CACO,CAAA;AAElB"}
1
+ {"version":3,"file":"SwitcherRangeList.js","names":[],"sources":["../../../../../src/Atomic/FormElements/SwitcherRangeList/SwitcherRangeList.tsx"],"sourcesContent":["import type { ReactElement } from 'react';\n\nimport type { ISwitcherRangeListProps } from './SwitcherRangeList.interface';\n\nimport cn from 'classnames';\nimport RangeList from '../RangeList/RangeList';\n\nimport SwitcherHide from '../SwitcherHide/SwitcherHide';\nimport './SwitcherRangeList.scss';\n\nconst RC = 'switcher-range-list';\nfunction noop(): void {}\n\nfunction SwitcherRangeList(props: ISwitcherRangeListProps): ReactElement {\n const {\n className,\n label,\n isLabelBold,\n hint,\n hintSide,\n disabled,\n isActive,\n value,\n validateErrors,\n isFloatValues,\n decimalPlaces,\n error,\n defaultErrorText,\n nullValueText,\n isOnlyOneRow,\n setIsActive = noop,\n onChange = noop,\n testId,\n } = props;\n\n // Adapter: ISwitcherRangeListValues[] <-> RangeValue[]\n const valueAdapter = value?.map(v => ({ from: v.from, to: v.to })) ?? [];\n const onChangeAdapter = (vals: { from: number | string; to: number | string }[]): void => {\n const mapped = vals.map(v => ({\n from: typeof v.from === 'string' ? Number(v.from) : v.from,\n to: typeof v.to === 'string' ? Number(v.to) : v.to,\n }));\n onChange(mapped);\n };\n\n const validateErrorsAdapter = validateErrors\n ? (from: string | number, to: string | number) => {\n // Call original validateErrors with string values\n const valid = validateErrors(String(from), String(to));\n return valid ? undefined : defaultErrorText ?? 'Invalid range';\n }\n : undefined;\n\n return (\n <SwitcherHide\n isActive={isActive}\n onChange={setIsActive}\n label={label}\n isLabelBold={isLabelBold}\n hint={hint}\n hintSide={hintSide}\n className={cn(RC, className)}\n disabled={disabled}\n >\n <div className=\"switcher-range-list__row\">\n <RangeList\n testId={testId}\n className={`${RC}__range-list`}\n value={valueAdapter}\n isOnlyOneRow={isOnlyOneRow}\n onChange={onChangeAdapter}\n validateErrors={validateErrorsAdapter}\n isFloatValues={isFloatValues}\n decimalPlaces={decimalPlaces}\n error={error}\n defaultErrorText={defaultErrorText}\n nullValueText={nullValueText}\n />\n </div>\n </SwitcherHide>\n );\n}\n\nexport default SwitcherRangeList;\n"],"mappings":";;;;;;AAUA,IAAM,KAAK;AACX,SAAS,OAAa,CAAC;AAEvB,SAAS,kBAAkB,OAA8C;CACvE,MAAM,EACJ,WACA,OACA,aACA,MACA,UACA,UACA,UACA,OACA,gBACA,eACA,eACA,OACA,kBACA,eACA,cACA,cAAc,MACd,WAAW,MACX,WACE;CAGJ,MAAM,eAAe,OAAO,KAAI,OAAM;EAAE,MAAM,EAAE;EAAM,IAAI,EAAE;CAAG,EAAE,KAAK,CAAC;CACvE,MAAM,mBAAmB,SAAiE;EACxF,MAAM,SAAS,KAAK,KAAI,OAAM;GAC5B,MAAM,OAAO,EAAE,SAAS,WAAW,OAAO,EAAE,IAAI,IAAI,EAAE;GACtD,IAAI,OAAO,EAAE,OAAO,WAAW,OAAO,EAAE,EAAE,IAAI,EAAE;EAClD,EAAE;EACF,SAAS,MAAM;CACjB;CAEA,MAAM,wBAAwB,kBACzB,MAAuB,OAAwB;EAG9C,OADc,eAAe,OAAO,IAAI,GAAG,OAAO,EAAE,CAC7C,IAAQ,KAAA,IAAY,oBAAoB;CACjD,IACA,KAAA;CAEJ,OACE,oBAAC,cAAD;EACY;EACV,UAAU;EACH;EACM;EACP;EACI;EACV,WAAW,GAAG,IAAI,SAAS;EACjB;EAEV,UAAA,oBAAC,OAAD;GAAK,WAAU;GACb,UAAA,oBAAC,WAAD;IACU;IACR,WAAW,GAAG,GAAG;IACjB,OAAO;IACO;IACd,UAAU;IACV,gBAAgB;IACD;IACA;IACR;IACW;IACH;GAChB,CAAA;EACE,CAAA;CACO,CAAA;AAElB"}
@@ -1 +1 @@
1
- {"version":3,"file":"SwitcherTagsDropdown.js","names":[],"sources":["../../../../../src/Atomic/FormElements/SwitcherTagsDropdown/SwitcherTagsDropdown.tsx"],"sourcesContent":["import type { ITagsDropdownOption, ITagsDropdownProps } from '../TagsDropdown/TagsDropdown.interface';\n\nimport type { ISwitcherTagsDropdownProps } from './SwitcherTagsDropdown.interface';\n\nimport cn from 'classnames';\nimport React, { useEffect, useMemo, useState } from 'react';\nimport Button from '../../UI/Button/Button';\nimport SwitcherHide from '../SwitcherHide/SwitcherHide';\nimport TagsDropdown from '../TagsDropdown/TagsDropdown';\n\nimport Textarea from '../Textarea/Textarea';\nimport TextSwitcher from '../TextSwitcher/TextSwitcher';\nimport './SwitcherTagsDropdown.scss';\n\nconst RC = 'switcher-tags-dropdown';\n\nconst SwitcherTagsDropdown: React.FC<ISwitcherTagsDropdownProps> = ({\n className,\n label,\n isLabelBold,\n isValuesInTags,\n isActive,\n isIncluded,\n isAdvancedLabelSearch,\n disabled,\n options = [],\n chosenOptions = [],\n setIsActive = () => {},\n setIsIncluded = () => {},\n onChange = () => {},\n}) => {\n const [listView, setListView] = useState<boolean>(false);\n const [textValue, setTextValue] = useState<string>('');\n\n const singleLevelOptions = useMemo(\n () =>\n options.reduce<ITagsDropdownOption[]>(\n (acc, item) => [...acc, ...(item.groupName ? item.list ?? [] : [item])],\n [],\n ),\n [options],\n );\n\n const apply = (): void => {\n // вернет функциюю сравнения для метода filter с замкнутым массивом listValuesArr\n // (по логике listValuesArr - массив полученный из строки textaria).\n const getFilterFunction = (listValuesArr: string[]) => (item: ITagsDropdownOption) => {\n return listValuesArr.find((el) => {\n const itemValue = item?.value ? item?.value.toString().toLowerCase() : undefined;\n const itemLabel = (item.title || item.label || item.name || item.value || '')\n .toString()\n .toLowerCase();\n const chosenOption = el.toString().toLowerCase();\n const isChosenOptionIncludedInLabel\n = itemLabel.includes(chosenOption)\n && item.value && !chosenOptions.includes(item.value);\n\n if (isValuesInTags) {\n return (\n (chosenOption === itemValue || chosenOption === itemLabel)\n && !item.disabled\n );\n }\n else if (isAdvancedLabelSearch) {\n return (\n (chosenOption === itemLabel\n || chosenOption === itemValue\n || isChosenOptionIncludedInLabel)\n && !item.disabled\n );\n }\n else {\n return (\n (chosenOption === itemLabel || chosenOption === itemValue)\n && !item.disabled\n );\n }\n });\n };\n\n const textToArray = textValue\n ?.split?.(',')\n .map(item => item.toString().trim())\n .filter(item => Boolean(item));\n const newOptions = options\n .filter(getFilterFunction(textToArray))\n .map(option => option.value ?? '');\n\n onChange(newOptions, 'chosenOptions');\n setListView(false);\n };\n\n const enterHandler = (e?: KeyboardEventInit, value?: string): void => {\n if (e?.keyCode === 13) {\n const option = options?.find(\n item =>\n item?.title?.toLowerCase() === value?.toLowerCase() && !item.disabled,\n );\n const isOptionChecked = chosenOptions?.some(\n item => typeof item !== 'string' && typeof item !== 'number' ? item?.title?.toLowerCase() === option?.title?.toLowerCase() : item?.toString().toLowerCase() === option?.title?.toLowerCase(),\n );\n if (option && !isOptionChecked)\n onChange([...chosenOptions, option], 'chosenOptions');\n }\n };\n\n useEffect(() => {\n const getLabel = (el: ITagsDropdownOption): string | number | undefined => el.title || el.label || el.name || el.value;\n const valuesArr = chosenOptions?.map(item =>\n isValuesInTags\n ? item\n : getLabel(singleLevelOptions.find(option => option.value === item) ?? {} as ITagsDropdownOption),\n );\n setTextValue(valuesArr.join(', '));\n }, [chosenOptions, listView]);\n\n return (\n <SwitcherHide\n isActive={isActive}\n onChange={setIsActive}\n label={label}\n className={cn(RC, className)}\n isLabelBold={isLabelBold}\n disabled={disabled}\n >\n <div className={`${RC}__wrap switcher-hide__content`}>\n <TextSwitcher\n activeText=\"is\"\n inactiveText=\"is not\"\n isActive={isIncluded ?? true}\n onChange={setIsIncluded}\n className={`${RC}__text-switcher`}\n />\n <div className=\"filter-select__wrap--buttons\">\n <button\n type=\"button\"\n onClick={() => setListView(!listView)}\n className={`${RC}__btn`}\n >\n {listView ? 'Close' : 'List view'}\n </button>\n {listView && (\n <Button\n label=\"Apply\"\n className={`${RC}__apply`}\n onClick={() => apply()}\n />\n )}\n <button\n type=\"button\"\n onClick={() => onChange([], 'chosenOptions')}\n className={`${RC}__btn`}\n >\n Clear\n </button>\n </div>\n </div>\n {listView\n ? (\n // @ts-ignore\n <Textarea value={textValue} onChange={value => setTextValue(value)} />\n )\n : (\n <TagsDropdown\n options={options}\n chosenOptions={chosenOptions as ITagsDropdownProps['chosenOptions']}\n onChange={onChange}\n className={`${RC}__tags-dropdown`}\n onKeyPress={(e, value) => enterHandler(e, value)}\n tagClassname={cn(`${RC}__tag`, {\n [`${RC}__tag_inactive`]: !isIncluded,\n })}\n isValuesInTags={isValuesInTags}\n />\n )}\n </SwitcherHide>\n );\n};\n\nexport default SwitcherTagsDropdown;\n"],"mappings":"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"}
1
+ {"version":3,"file":"SwitcherTagsDropdown.js","names":[],"sources":["../../../../../src/Atomic/FormElements/SwitcherTagsDropdown/SwitcherTagsDropdown.tsx"],"sourcesContent":["import type { ITagsDropdownOption, ITagsDropdownProps } from '../TagsDropdown/TagsDropdown.interface';\n\nimport type { ISwitcherTagsDropdownProps } from './SwitcherTagsDropdown.interface';\n\nimport cn from 'classnames';\nimport React, { useEffect, useMemo, useState } from 'react';\nimport Button from '../../UI/Button/Button';\nimport SwitcherHide from '../SwitcherHide/SwitcherHide';\nimport TagsDropdown from '../TagsDropdown/TagsDropdown';\n\nimport Textarea from '../Textarea/Textarea';\nimport TextSwitcher from '../TextSwitcher/TextSwitcher';\nimport './SwitcherTagsDropdown.scss';\n\nconst RC = 'switcher-tags-dropdown';\n\nconst SwitcherTagsDropdown: React.FC<ISwitcherTagsDropdownProps> = ({\n className,\n label,\n isLabelBold,\n isValuesInTags,\n isActive,\n isIncluded,\n isAdvancedLabelSearch,\n disabled,\n options = [],\n chosenOptions = [],\n setIsActive = () => {},\n setIsIncluded = () => {},\n onChange = () => {},\n}) => {\n const [listView, setListView] = useState<boolean>(false);\n const [textValue, setTextValue] = useState<string>('');\n\n const singleLevelOptions = useMemo(\n () =>\n options.reduce<ITagsDropdownOption[]>(\n (acc, item) => [...acc, ...(item.groupName ? item.list ?? [] : [item])],\n [],\n ),\n [options],\n );\n\n const apply = (): void => {\n // вернет функциюю сравнения для метода filter с замкнутым массивом listValuesArr\n // (по логике listValuesArr - массив полученный из строки textaria).\n const getFilterFunction = (listValuesArr: string[]) => (item: ITagsDropdownOption) => {\n return listValuesArr.find((el) => {\n const itemValue = item?.value ? item?.value.toString().toLowerCase() : undefined;\n const itemLabel = (item.title || item.label || item.name || item.value || '')\n .toString()\n .toLowerCase();\n const chosenOption = el.toString().toLowerCase();\n const isChosenOptionIncludedInLabel\n = itemLabel.includes(chosenOption)\n && item.value && !chosenOptions.includes(item.value);\n\n if (isValuesInTags) {\n return (\n (chosenOption === itemValue || chosenOption === itemLabel)\n && !item.disabled\n );\n }\n else if (isAdvancedLabelSearch) {\n return (\n (chosenOption === itemLabel\n || chosenOption === itemValue\n || isChosenOptionIncludedInLabel)\n && !item.disabled\n );\n }\n else {\n return (\n (chosenOption === itemLabel || chosenOption === itemValue)\n && !item.disabled\n );\n }\n });\n };\n\n const textToArray = textValue\n ?.split?.(',')\n .map(item => item.toString().trim())\n .filter(item => Boolean(item));\n const newOptions = options\n .filter(getFilterFunction(textToArray))\n .map(option => option.value ?? '');\n\n onChange(newOptions, 'chosenOptions');\n setListView(false);\n };\n\n const enterHandler = (e?: KeyboardEventInit, value?: string): void => {\n if (e?.keyCode === 13) {\n const option = options?.find(\n item =>\n item?.title?.toLowerCase() === value?.toLowerCase() && !item.disabled,\n );\n const isOptionChecked = chosenOptions?.some(\n item => typeof item !== 'string' && typeof item !== 'number' ? item?.title?.toLowerCase() === option?.title?.toLowerCase() : item?.toString().toLowerCase() === option?.title?.toLowerCase(),\n );\n if (option && !isOptionChecked)\n onChange([...chosenOptions, option], 'chosenOptions');\n }\n };\n\n useEffect(() => {\n const getLabel = (el: ITagsDropdownOption): string | number | undefined => el.title || el.label || el.name || el.value;\n const valuesArr = chosenOptions?.map(item =>\n isValuesInTags\n ? item\n : getLabel(singleLevelOptions.find(option => option.value === item) ?? {} as ITagsDropdownOption),\n );\n setTextValue(valuesArr.join(', '));\n }, [chosenOptions, listView]);\n\n return (\n <SwitcherHide\n isActive={isActive}\n onChange={setIsActive}\n label={label}\n className={cn(RC, className)}\n isLabelBold={isLabelBold}\n disabled={disabled}\n >\n <div className={`${RC}__wrap switcher-hide__content`}>\n <TextSwitcher\n activeText=\"is\"\n inactiveText=\"is not\"\n isActive={isIncluded ?? true}\n onChange={setIsIncluded}\n className={`${RC}__text-switcher`}\n />\n <div className=\"filter-select__wrap--buttons\">\n <button\n type=\"button\"\n onClick={() => setListView(!listView)}\n className={`${RC}__btn`}\n >\n {listView ? 'Close' : 'List view'}\n </button>\n {listView && (\n <Button\n label=\"Apply\"\n className={`${RC}__apply`}\n onClick={() => apply()}\n />\n )}\n <button\n type=\"button\"\n onClick={() => onChange([], 'chosenOptions')}\n className={`${RC}__btn`}\n >\n Clear\n </button>\n </div>\n </div>\n {listView\n ? (\n // @ts-ignore\n <Textarea value={textValue} onChange={value => setTextValue(value)} />\n )\n : (\n <TagsDropdown\n options={options}\n chosenOptions={chosenOptions as ITagsDropdownProps['chosenOptions']}\n onChange={onChange}\n className={`${RC}__tags-dropdown`}\n onKeyPress={(e, value) => enterHandler(e, value)}\n tagClassname={cn(`${RC}__tag`, {\n [`${RC}__tag_inactive`]: !isIncluded,\n })}\n isValuesInTags={isValuesInTags}\n />\n )}\n </SwitcherHide>\n );\n};\n\nexport default SwitcherTagsDropdown;\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"SwitcherTextarea.js","names":[],"sources":["../../../../../src/Atomic/FormElements/SwitcherTextarea/SwitcherTextarea.tsx"],"sourcesContent":["import type { ISwitcherTextareaProps } from './SwitcherTextarea.interface';\nimport cn from 'classnames';\n\nimport React from 'react';\nimport SwitcherHide from '../SwitcherHide/SwitcherHide';\nimport Textarea from '../Textarea/Textarea';\n\nimport TextSwitcher from '../TextSwitcher/TextSwitcher';\nimport './SwitcherTextarea.scss';\n\nconst RC = 'switcher-textarea';\n\nconst SwitcherTextarea: React.FC<ISwitcherTextareaProps> = ({\n label,\n isLabelBold,\n hint,\n className,\n isActive = true,\n setIsActive,\n isIncluded = true,\n setIsIncluded,\n text = '',\n setText,\n activeText = 'is',\n inactiveText = 'is not',\n placeholder,\n disabled,\n testId = RC,\n}) => {\n return (\n <SwitcherHide\n testId={testId}\n isActive={isActive}\n onChange={v => setIsActive?.(v)}\n label={label}\n isLabelBold={isLabelBold}\n className={cn(RC, className)}\n hint={hint}\n disabled={disabled}\n >\n <>\n <div className={`${RC}__wrap switcher-hide__content`}>\n <TextSwitcher\n testId={testId}\n activeText={activeText}\n inactiveText={inactiveText}\n isActive={isIncluded ?? true}\n onChange={value => setIsIncluded?.(value)}\n className={`${RC}__text-switcher`}\n />\n <button\n type=\"button\"\n onClick={() => setText?.('')}\n className={`${RC}__btn`}\n data-testid={`${testId}-clear-btn`}\n >\n Clear\n </button>\n </div>\n <Textarea\n testId={testId}\n value={text}\n placeholder={placeholder}\n onChange={value => setText?.(value)}\n className={`${RC}__textarea`}\n />\n </>\n </SwitcherHide>\n );\n};\n\nexport default SwitcherTextarea;\n"],"mappings":";;;;;;;;AAUA,IAAM,KAAK;AAEX,IAAM,oBAAsD,EAC1D,OACA,aACA,MACA,WACA,WAAW,MACX,aACA,aAAa,MACb,eACA,OAAO,IACP,SACA,aAAa,MACb,eAAe,UACf,aACA,UACA,SAAS,SACL;CACJ,OACE,oBAAC,cAAD;EACU;EACE;EACV,WAAU,MAAK,cAAc,CAAC;EACvB;EACM;EACb,WAAW,GAAG,IAAI,SAAS;EACrB;EACI;YAEV,qBAAA,UAAA,EAAA,UAAA,CACE,qBAAC,OAAD;GAAK,WAAW,GAAG,GAAG;aAAtB,CACE,oBAAC,cAAD;IACU;IACI;IACE;IACd,UAAU,cAAc;IACxB,WAAU,UAAS,gBAAgB,KAAK;IACxC,WAAW,GAAG,GAAG;GAClB,CAAA,GACD,oBAAC,UAAD;IACE,MAAK;IACL,eAAe,UAAU,EAAE;IAC3B,WAAW,GAAG,GAAG;IACjB,eAAa,GAAG,OAAO;cACxB;GAEO,CAAA,CACL;MACL,oBAAC,UAAD;GACU;GACR,OAAO;GACM;GACb,WAAU,UAAS,UAAU,KAAK;GAClC,WAAW,GAAG,GAAG;EAClB,CAAA,CACD,EAAA,CAAA;CACU,CAAA;AAElB"}
1
+ {"version":3,"file":"SwitcherTextarea.js","names":[],"sources":["../../../../../src/Atomic/FormElements/SwitcherTextarea/SwitcherTextarea.tsx"],"sourcesContent":["import type { ISwitcherTextareaProps } from './SwitcherTextarea.interface';\nimport cn from 'classnames';\n\nimport React from 'react';\nimport SwitcherHide from '../SwitcherHide/SwitcherHide';\nimport Textarea from '../Textarea/Textarea';\n\nimport TextSwitcher from '../TextSwitcher/TextSwitcher';\nimport './SwitcherTextarea.scss';\n\nconst RC = 'switcher-textarea';\n\nconst SwitcherTextarea: React.FC<ISwitcherTextareaProps> = ({\n label,\n isLabelBold,\n hint,\n className,\n isActive = true,\n setIsActive,\n isIncluded = true,\n setIsIncluded,\n text = '',\n setText,\n activeText = 'is',\n inactiveText = 'is not',\n placeholder,\n disabled,\n testId = RC,\n}) => {\n return (\n <SwitcherHide\n testId={testId}\n isActive={isActive}\n onChange={v => setIsActive?.(v)}\n label={label}\n isLabelBold={isLabelBold}\n className={cn(RC, className)}\n hint={hint}\n disabled={disabled}\n >\n <>\n <div className={`${RC}__wrap switcher-hide__content`}>\n <TextSwitcher\n testId={testId}\n activeText={activeText}\n inactiveText={inactiveText}\n isActive={isIncluded ?? true}\n onChange={value => setIsIncluded?.(value)}\n className={`${RC}__text-switcher`}\n />\n <button\n type=\"button\"\n onClick={() => setText?.('')}\n className={`${RC}__btn`}\n data-testid={`${testId}-clear-btn`}\n >\n Clear\n </button>\n </div>\n <Textarea\n testId={testId}\n value={text}\n placeholder={placeholder}\n onChange={value => setText?.(value)}\n className={`${RC}__textarea`}\n />\n </>\n </SwitcherHide>\n );\n};\n\nexport default SwitcherTextarea;\n"],"mappings":";;;;;;;;AAUA,IAAM,KAAK;AAEX,IAAM,oBAAsD,EAC1D,OACA,aACA,MACA,WACA,WAAW,MACX,aACA,aAAa,MACb,eACA,OAAO,IACP,SACA,aAAa,MACb,eAAe,UACf,aACA,UACA,SAAS,SACL;CACJ,OACE,oBAAC,cAAD;EACU;EACE;EACV,WAAU,MAAK,cAAc,CAAC;EACvB;EACM;EACb,WAAW,GAAG,IAAI,SAAS;EACrB;EACI;EAEV,UAAA,qBAAA,UAAA,EAAA,UAAA,CACE,qBAAC,OAAD;GAAK,WAAW,GAAG,GAAG;GAAtB,UAAA,CACE,oBAAC,cAAD;IACU;IACI;IACE;IACd,UAAU,cAAc;IACxB,WAAU,UAAS,gBAAgB,KAAK;IACxC,WAAW,GAAG,GAAG;GAClB,CAAA,GACD,oBAAC,UAAD;IACE,MAAK;IACL,eAAe,UAAU,EAAE;IAC3B,WAAW,GAAG,GAAG;IACjB,eAAa,GAAG,OAAO;IACxB,UAAA;GAEO,CAAA,CACL;EACL,CAAA,GAAA,oBAAC,UAAD;GACU;GACR,OAAO;GACM;GACb,WAAU,UAAS,UAAU,KAAK;GAClC,WAAW,GAAG,GAAG;EAClB,CAAA,CACD,EAAA,CAAA;CACU,CAAA;AAElB"}