intelicoreact 1.8.8 → 1.8.10

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