UNPKG

@trap_stevo/legendarybuilderproreact-ui

Version:

The legendary UI & utility API that makes your application a legendary application. ~ Created by Steven Compton

105 lines (102 loc) 4.41 kB
import _defineProperty from "@babel/runtime/helpers/defineProperty"; import _slicedToArray from "@babel/runtime/helpers/slicedToArray"; function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; } function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; } /* Created by Hassan Steven Compton. March 7, 2024. */ import React, { useRef, useState, useEffect, cloneElement } from 'react'; import '../HUDStyles/HUDHorizontalScroller.css'; var HUDHorizontalScroller = function HUDHorizontalScroller(_ref) { var children = _ref.children, containerConfiguration = _ref.containerConfiguration, contentConfiguration = _ref.contentConfiguration, cellConfiguration = _ref.cellConfiguration, cellWidth = _ref.cellWidth, cellGradientColors = _ref.cellGradientColors; var listRef = useRef(null); var totalCells = React.Children.count(children); var scrollSpeed = 2; var _useState = useState(true), _useState2 = _slicedToArray(_useState, 2), scrolling = _useState2[0], setScrolling = _useState2[1]; var _useState3 = useState(false), _useState4 = _slicedToArray(_useState3, 2), hovered = _useState4[0], setHovered = _useState4[1]; var handleMouseEnter = function handleMouseEnter() { setHovered(true); setScrolling(false); }; var handleMouseLeave = function handleMouseLeave() { setHovered(false); setScrolling(true); }; useEffect(function () { var list = listRef.current; var animationFrameId; var manualScrolling = false; var animateScroll = function animateScroll() { list.scrollLeft += scrollSpeed; if (list.scrollLeft >= list.scrollWidth / 2) { list.scrollLeft = 0; } animationFrameId = requestAnimationFrame(animateScroll); }; var handleScroll = function handleScroll() { if (manualScrolling) { if (list.scrollLeft >= list.scrollWidth - list.clientWidth) { manualScrolling = false; setScrolling(true); } } }; var handleWheel = function handleWheel() { if (!hovered) { manualScrolling = true; setScrolling(false); } }; list.addEventListener('mouseover', handleMouseEnter); list.addEventListener('mouseout', handleMouseLeave); list.addEventListener('scroll', handleScroll); list.addEventListener('wheel', handleWheel); animationFrameId = requestAnimationFrame(animateScroll); return function () { list.removeEventListener('mouseover', handleMouseEnter); list.removeEventListener('mouseout', handleMouseLeave); list.removeEventListener('scroll', handleScroll); list.removeEventListener('wheel', handleWheel); cancelAnimationFrame(animationFrameId); }; }, [totalCells, hovered]); var duplicatedCells = React.Children.toArray(children).concat(React.Children.map(children, function (child, index) { return /*#__PURE__*/cloneElement(child, { key: "clone-".concat(index) }); })); return /*#__PURE__*/React.createElement("div", { ref: listRef, className: "horizontal-scroller", style: _objectSpread({}, containerConfiguration) }, /*#__PURE__*/React.createElement("div", { className: "scrolling-content", style: _objectSpread({ display: 'flex', scrollBehavior: 'smooth', scrollSnapType: 'x mandatory' }, contentConfiguration) }, duplicatedCells.map(function (child, index) { return /*#__PURE__*/React.createElement("div", { key: index, style: _objectSpread({ width: "".concat(cellWidth), marginRight: "10px", background: cellGradientColors !== undefined ? cellGradientColors[index % cellGradientColors.length] : null }, cellConfiguration) }, /*#__PURE__*/cloneElement(child)); }))); }; export default HUDHorizontalScroller;