import classNames from 'classnames'; import { createContext, JSX, Ref, useContext, useEffect, useState } from 'react'; import { twMerge } from 'tailwind-merge'; import { useSessionStorage } from 'usehooks-ts'; import { useLocalSetting } from '../scripts/utils'; export const AnimatedBackgroundContext = createContext({} as { setBackground: (url: string) => void; }); export function AnimatedBackground (data: { children?: any; backgroundKey?: string; backgroundUrl?: string | URL; ref?: Ref; className?: string; animated?: boolean, scrolling?: boolean; }) { const animateBackground = true; const [backgroundUrl, setBackgroundUrl] = data.backgroundKey ? useSessionStorage( data.backgroundKey!, data.backgroundUrl ? (data.backgroundUrl instanceof URL ? data.backgroundUrl.href : data.backgroundUrl) : undefined, ) : useState(); useEffect(() => { setBackgroundUrl(data.backgroundUrl ? (data.backgroundUrl instanceof URL ? data.backgroundUrl.href : data.backgroundUrl) : undefined); }, [data.backgroundUrl]); let finalBackgroundUrl; try { finalBackgroundUrl = backgroundUrl ? new URL(backgroundUrl) : undefined; } catch { } const blur = useLocalSetting('backgroundBlur'); if (blur) { if (!finalBackgroundUrl?.searchParams.has('blur')) { finalBackgroundUrl?.searchParams.set('blur', String(24)); } finalBackgroundUrl?.searchParams.set('height', String(320)); } function handleSetBackground (url: string) { setBackgroundUrl(url); } const bgColor = "bg-base-content"; let backgroundElements: JSX.Element | undefined = undefined; if (true) { backgroundElements =
; } return (
{!data.scrolling &&
{ e.currentTarget.classList.add(blur ? "animate-bg-zoom-big" : "animate-bg-zoom")} >}
} {data.animated && animateBackground &&
{backgroundElements}
} {data.children}
); }