UNPKG

@trap_stevo/legendarybuilderproreact-ui

Version:

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

121 lines 5.29 kB
import _defineProperty from "@babel/runtime/helpers/defineProperty"; 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; } import * as React from "react"; import { useEffect, useMemo, createRef, isValidElement, cloneElement } from "react"; import { useLocation, useRoutes, UNSAFE_NavigationContext, matchPath } from "react-router-dom"; import { TransitionGroup, Transition } from "react-transition-group"; var defaultTransitionDuration = 127.69; var defaultBaseSettings = function defaultBaseSettings(duration) { return { transition: "opacity ".concat(duration, "ms ease-in-out, filter ").concat(duration, "ms ease-in-out"), opacity: 0 }; }; var defaultStateSettings = { entering: { opacity: 0 }, entered: { opacity: 1 }, exiting: { opacity: 1 }, exited: { opacity: 0 } }; var DefaultPanel = function DefaultPanel() { return /*#__PURE__*/React.createElement("div", { style: { display: "flex", alignItems: "center", justifyContent: "center", fontSize: "1.5rem", color: "#ffffff", height: "100vh" } }, "Welcome!"); }; function useRouterAvailable() { return !!React.useContext(UNSAFE_NavigationContext); } ; function HUDRouterContext(_ref) { var _ref$transitionDurati = _ref.transitionDuration, transitionDuration = _ref$transitionDurati === void 0 ? defaultTransitionDuration : _ref$transitionDurati, _ref$baseTransitionSe = _ref.baseTransitionSettings, baseTransitionSettings = _ref$baseTransitionSe === void 0 ? defaultBaseSettings(defaultTransitionDuration) : _ref$baseTransitionSe, _ref$transitionStateS = _ref.transitionStateSettings, transitionStateSettings = _ref$transitionStateS === void 0 ? defaultStateSettings : _ref$transitionStateS, _ref$styleOverrides = _ref.styleOverrides, styleOverrides = _ref$styleOverrides === void 0 ? {} : _ref$styleOverrides, _ref$routes = _ref.routes, routes = _ref$routes === void 0 ? [{ path: "*", element: /*#__PURE__*/React.createElement(DefaultPanel, null) }] : _ref$routes, _ref$getBackgroundCol = _ref.getBackgroundColor, getBackgroundColor = _ref$getBackgroundCol === void 0 ? function () { return "#0e0e0e"; } : _ref$getBackgroundCol, _ref$layoutWrapper = _ref.layoutWrapper, layoutWrapper = _ref$layoutWrapper === void 0 ? null : _ref$layoutWrapper; var location = useLocation(); var element = useRoutes(routes, location); var nodeRef = useMemo(function () { return /*#__PURE__*/createRef(); }, [location.pathname]); var matchedRoute = useMemo(function () { for (var i = 0; i < routes.length; i++) { if (matchPath(routes[i].path, location.pathname)) { return routes[i]; } } return undefined; }, [location.pathname, routes]); var customTransitionSettings = useMemo(function () { return (matchedRoute === null || matchedRoute === void 0 ? void 0 : matchedRoute.transitionSettings) || {}; }, [matchedRoute]); useEffect(function () { var color = getBackgroundColor(location.pathname); document.documentElement.style.transition = "background-color ".concat(transitionDuration, "ms ease-in-out"); document.documentElement.style.backgroundColor = color; document.documentElement.style.height = "100%"; document.body.style.transition = "background-color ".concat(transitionDuration, "ms ease-in-out"); document.body.style.backgroundColor = color; document.body.style.height = "100%"; document.body.style.margin = "0"; }, [location.pathname]); if (!element) { return null; } return /*#__PURE__*/React.createElement(TransitionGroup, { component: null }, /*#__PURE__*/React.createElement(Transition, { key: location.pathname, timeout: transitionDuration, nodeRef: nodeRef, unmountOnExit: true, mountOnEnter: true }, function (state) { var combinedStyle = _objectSpread(_objectSpread(_objectSpread(_objectSpread({}, baseTransitionSettings), transitionStateSettings[state]), customTransitionSettings[state]), styleOverrides); var content = /*#__PURE__*/React.createElement("div", { ref: nodeRef, style: combinedStyle }, element); return layoutWrapper ? /*#__PURE__*/isValidElement(layoutWrapper) ? /*#__PURE__*/cloneElement(layoutWrapper, {}, content) : layoutWrapper(content) : content; })); } ; function HUDRouter(props) { var routerAvailable = useRouterAvailable(); if (!routerAvailable) { console.warn("HUDRouter ~ No <Router> context found."); return null; } return /*#__PURE__*/React.createElement(HUDRouterContext, props); } ; export default HUDRouter;