UNPKG

@helpwave/hightide

Version:

helpwave's component and theming library

145 lines (137 loc) 5.23 kB
// src/components/LoadingAndErrorComponent.tsx import { useState as useState3 } from "react"; // src/hooks/useLanguage.tsx import { createContext, useContext, useEffect as useEffect2, useState as useState2 } from "react"; // src/hooks/useLocalStorage.tsx import { useCallback, useEffect, useState } from "react"; // src/hooks/useLanguage.tsx import { jsx } from "react/jsx-runtime"; var DEFAULT_LANGUAGE = "en"; var LanguageContext = createContext({ language: DEFAULT_LANGUAGE, setLanguage: (v) => v }); var useLanguage = () => useContext(LanguageContext); // src/hooks/useTranslation.ts var useTranslation = (defaults, translationOverwrite = {}) => { const { language: languageProp, translation: overwrite } = translationOverwrite; const { language: inferredLanguage } = useLanguage(); const usedLanguage = languageProp ?? inferredLanguage; let defaultValues = defaults[usedLanguage]; if (overwrite && overwrite[usedLanguage]) { defaultValues = { ...defaultValues, ...overwrite[usedLanguage] }; } return defaultValues; }; // src/components/icons/Helpwave.tsx import { clsx } from "clsx"; import { jsx as jsx2, jsxs } from "react/jsx-runtime"; var Helpwave = ({ color = "currentColor", animate = "none", size = 64, ...props }) => { const isLoadingAnimation = animate === "loading"; let svgAnimationKey = ""; if (animate === "pulse") { svgAnimationKey = "animate-pulse"; } else if (animate === "bounce") { svgAnimationKey = "animate-bounce"; } if (size < 0) { console.error("size cannot be less than 0"); size = 64; } return /* @__PURE__ */ jsx2( "svg", { width: size, height: size, viewBox: "0 0 888 888", fill: "none", strokeLinecap: "round", strokeWidth: 48, ...props, children: /* @__PURE__ */ jsxs("g", { className: clsx(svgAnimationKey), children: [ /* @__PURE__ */ jsx2("path", { className: clsx({ "animate-wave-big-left-up": isLoadingAnimation }), d: "M144 543.235C144 423.259 232.164 326 340.92 326", stroke: color, strokeDasharray: "1000" }), /* @__PURE__ */ jsx2("path", { className: clsx({ "animate-wave-big-right-down": isLoadingAnimation }), d: "M537.84 544.104C429.084 544.104 340.92 446.844 340.92 326.869", stroke: color, strokeDasharray: "1000" }), /* @__PURE__ */ jsx2("path", { className: clsx({ "animate-wave-small-left-up": isLoadingAnimation }), d: "M462.223 518.035C462.223 432.133 525.348 362.495 603.217 362.495", stroke: color, strokeDasharray: "1000" }), /* @__PURE__ */ jsx2("path", { className: clsx({ "animate-wave-small-right-down": isLoadingAnimation }), d: "M745.001 519.773C666.696 519.773 603.218 450.136 603.218 364.233", stroke: color, strokeDasharray: "1000" }) ] }) } ); }; // src/components/LoadingAnimation.tsx import clsx2 from "clsx"; import { jsx as jsx3, jsxs as jsxs2 } from "react/jsx-runtime"; var defaultLoadingAnimationTranslation = { en: { loading: "Loading data" }, de: { loading: "Lade Daten" } }; var LoadingAnimation = ({ overwriteTranslation, loadingText, classname }) => { const translation = useTranslation(defaultLoadingAnimationTranslation, overwriteTranslation); return /* @__PURE__ */ jsxs2("div", { className: clsx2("col items-center justify-center w-full h-24", classname), children: [ /* @__PURE__ */ jsx3(Helpwave, { animate: "loading" }), loadingText ?? `${translation.loading}...` ] }); }; // src/components/ErrorComponent.tsx import { AlertOctagon } from "lucide-react"; import clsx3 from "clsx"; import { jsx as jsx4, jsxs as jsxs3 } from "react/jsx-runtime"; var defaultErrorComponentTranslation = { en: { errorOccurred: "An error occurred" }, de: { errorOccurred: "Ein Fehler ist aufgetreten" } }; var ErrorComponent = ({ overwriteTranslation, errorText, classname }) => { const translation = useTranslation(defaultErrorComponentTranslation, overwriteTranslation); return /* @__PURE__ */ jsxs3("div", { className: clsx3("col items-center justify-center gap-y-4 w-full h-24", classname), children: [ /* @__PURE__ */ jsx4(AlertOctagon, { size: 64, className: "text-warning" }), errorText ?? `${translation.errorOccurred} :(` ] }); }; // src/components/LoadingAndErrorComponent.tsx import { jsx as jsx5 } from "react/jsx-runtime"; var LoadingAndErrorComponent = ({ children, isLoading = false, hasError = false, errorProps, loadingProps, minimumLoadingDuration }) => { const [isInMinimumLoading, setIsInMinimumLoading] = useState3(false); const [hasUsedMinimumLoading, setHasUsedMinimumLoading] = useState3(false); if (minimumLoadingDuration && !isInMinimumLoading && !hasUsedMinimumLoading) { setIsInMinimumLoading(true); setTimeout(() => { setIsInMinimumLoading(false); setHasUsedMinimumLoading(true); }, minimumLoadingDuration); } if (isLoading || minimumLoadingDuration && isInMinimumLoading) { return /* @__PURE__ */ jsx5(LoadingAnimation, { ...loadingProps }); } if (hasError) { return /* @__PURE__ */ jsx5(ErrorComponent, { ...errorProps }); } return children; }; export { LoadingAndErrorComponent }; //# sourceMappingURL=LoadingAndErrorComponent.mjs.map