{"version":3,"file":"Scroll-B5yxurOQ.mjs","names":["ComponentPropsWithoutRef","useEffect","useRef","useState","clsx","TOLERANCE","Props","horizontal","scrollVariants","vertical","inner","shadow","shadowStart","shadowEnd","child","Scroll","t0","$","_c","children","className","rest","t1","undefined","showStartShadow","setShowStartShadow","showEndShadow","setShowEndShadow","scrollChildRef","scrollContainerRef","position","t2","container","containerRect","getBoundingClientRect","childRect","isOnStartEdge","left","top","isOnEndEdge","right","bottom","previousShowStartShadow","previousShowEndShadow","setShadows","t3","resizeObserver","ResizeObserver","current","observe","disconnect","t4","handleScroll","event","currentTarget","t5","t6","t7","t8","t9","t10","t11","t12","t13","t14","t15","t16","t17","t18","t19","t20"],"sources":["../src/components/scroll/Scroll.tsx"],"sourcesContent":["import { ComponentPropsWithoutRef, useEffect, useRef, useState } from \"react\";\nimport clsx from \"clsx\";\n\nconst TOLERANCE = 5;\n\ninterface Props extends ComponentPropsWithoutRef<\"div\"> {\n  horizontal?: boolean;\n}\n\nexport const scrollVariants = {\n  vertical: {\n    inner: \"overflow-y-auto h-full\",\n    shadow: \"h-1 left-0 right-0\",\n    shadowStart: \"top-0 bg-linear-to-b from-gray-alpha-1\",\n    shadowEnd: \"bottom-0 bg-linear-to-t from-gray-alpha-1\",\n    child: \"\",\n  },\n  horizontal: {\n    inner: \"overflow-x-auto\",\n    shadow: \"w-1 top-0 bottom-0\",\n    shadowStart: \"left-0 bg-linear-to-r from-gray-alpha-1\",\n    shadowEnd: \"right-0 bg-linear-to-l from-gray-alpha-1\",\n    child: \"inline-block\",\n  },\n};\n\nexport function Scroll({ horizontal = false, className, children, ...rest }: Props) {\n  const [showStartShadow, setShowStartShadow] = useState(false);\n  const [showEndShadow, setShowEndShadow] = useState(false);\n  const scrollChildRef = useRef<HTMLDivElement>(null);\n  const scrollContainerRef = useRef<HTMLDivElement>(null);\n\n  const position = horizontal ? \"horizontal\" : \"vertical\";\n\n  const setShadows = (container: HTMLDivElement | null, child: HTMLDivElement | null) => {\n    if (!container || !child) {\n      return;\n    }\n\n    const containerRect = container.getBoundingClientRect();\n\n    const childRect = child.getBoundingClientRect();\n\n    const isOnStartEdge = horizontal\n      ? containerRect.left - childRect.left < TOLERANCE\n      : containerRect.top - childRect.top < TOLERANCE;\n\n    const isOnEndEdge = horizontal\n      ? childRect.right - containerRect.right < TOLERANCE\n      : childRect.bottom - containerRect.bottom < TOLERANCE;\n\n    setShowStartShadow((previousShowStartShadow) =>\n      isOnStartEdge === previousShowStartShadow\n        ? !previousShowStartShadow\n        : previousShowStartShadow,\n    );\n\n    setShowEndShadow((previousShowEndShadow) =>\n      isOnEndEdge === previousShowEndShadow ? !previousShowEndShadow : previousShowEndShadow,\n    );\n  };\n\n  useEffect(() => {\n    const resizeObserver = new ResizeObserver(() => {\n      setShadows(scrollContainerRef.current, scrollChildRef.current);\n    });\n    resizeObserver.observe(scrollChildRef.current!);\n    resizeObserver.observe(scrollContainerRef.current!);\n\n    return () => {\n      resizeObserver.disconnect();\n    };\n  });\n\n  function handleScroll(event: React.UIEvent<HTMLDivElement, UIEvent>) {\n    if (!scrollChildRef?.current) {\n      return;\n    }\n    setShadows(event.currentTarget, scrollChildRef.current);\n  }\n\n  return (\n    <div className={clsx(\"ll-scroll-zone\", \"relative\", className)} {...rest}>\n      <div\n        className={clsx(\n          \"scroll-shadow-lg absolute z-1 opacity-0 transition-all\",\n          scrollVariants[position].shadow,\n          scrollVariants[position].shadowStart,\n          showStartShadow && \"opacity-100\",\n        )}\n      ></div>\n      <div\n        className={clsx(\n          \"scroll-shadow-lg absolute z-1 opacity-0 transition-all\",\n          scrollVariants[position].shadow,\n          scrollVariants[position].shadowEnd,\n          showEndShadow && \"opacity-100\",\n        )}\n      ></div>\n      <div\n        className={scrollVariants[position].inner}\n        ref={scrollContainerRef}\n        onScroll={handleScroll}\n      >\n        <div className={scrollVariants[position].child} ref={scrollChildRef}>\n          {children}\n        </div>\n      </div>\n    </div>\n  );\n}\n"],"mappings":"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"}