@bothub-chat/ui
Version:
Bothub UI Components
2 lines (1 loc) • 1.33 kB
JavaScript
import{useState as e,useRef as t,useEffect as n}from"react";const l=({options:l={behavior:"smooth",block:"nearest",inline:"center"}})=>{const[o,r]=e(!0),[i,c]=e(!0),s=t(null);return n(()=>{const e=s.current,t=()=>{var e;const t=null===(e=s.current)||void 0===e?void 0:e.element;if(!t)return;if(!(t.scrollWidth>t.clientWidth))return r(!0),void c(!0);t.scrollWidth-t.scrollLeft<=t.clientWidth+1?c(!0):c(!1),t.scrollLeft<=0?r(!0):r(!1)};if(e&&e.element)return e.element.addEventListener("scroll",t),t(),()=>{e&&e.element&&e.element.removeEventListener("scroll",t)}},[]),{isLeftDisabled:o,isRightDisabled:i,onScrollLeft:()=>{var e;const t=null===(e=s.current)||void 0===e?void 0:e.element,n=null==t?void 0:t.children;if(!n||!t)return;const o=t.getBoundingClientRect();let r=0,i=-9999;for(let e=0;e<n.length;e+=1){const t=n[e].getBoundingClientRect().left-o.left;t+1<0&&t>i&&(i=Math.floor(t),r=e)}-9999===i&&0===r||n[r].scrollIntoView(l)},onScrollRight:()=>{var e;const t=null===(e=s.current)||void 0===e?void 0:e.element,n=null==t?void 0:t.children;if(!n||!t)return;const o=t.getBoundingClientRect();let r=0,i=9999;const c=t.clientWidth;if(c){for(let e=0;e<n.length;e+=1){const t=n[e].getBoundingClientRect().right-o.left;t-1>c&&t<i&&(i=Math.floor(t),r=e)}9999===i&&0===r||n[r].scrollIntoView(l)}},scrollbarRef:s}};export{l as useSlider};