import classNames from "classnames"; import { getProviders, signIn } from "next-auth/react"; import { useEffect } from "react"; import { BiShieldQuarter } from "react-icons/bi"; import { getSettings } from "utils/config/config"; export default function SignIn({ providers, callbackUrl, settings }) { const theme = settings?.theme || "dark"; const color = settings?.color || "slate"; const title = settings?.title || "Homepage"; let backgroundImage = ""; let opacity = settings?.backgroundOpacity ?? 0; let backgroundBlur = false; let backgroundSaturate = false; let backgroundBrightness = false; if (settings?.background) { const bg = settings.background; if (typeof bg === "object") { backgroundImage = bg.image || ""; if (bg.opacity !== undefined) { opacity = 1 - bg.opacity / 100; } backgroundBlur = bg.blur !== undefined; backgroundSaturate = bg.saturate !== undefined; backgroundBrightness = bg.brightness !== undefined; } else { backgroundImage = bg; } } useEffect(() => { const html = document.documentElement; const body = document.body; html.classList.remove("dark", "scheme-dark", "scheme-light"); html.classList.toggle("dark", theme === "dark"); html.classList.add(theme === "dark" ? "scheme-dark" : "scheme-light"); const desiredThemeClass = `theme-${color}`; const themeClassesToRemove = Array.from(html.classList).filter( (cls) => cls.startsWith("theme-") && cls !== desiredThemeClass, ); if (themeClassesToRemove.length) { html.classList.remove(...themeClassesToRemove); } if (!html.classList.contains(desiredThemeClass)) { html.classList.add(desiredThemeClass); } body.style.backgroundImage = ""; body.style.backgroundColor = ""; body.style.backgroundAttachment = ""; }, [color, theme]); if (!providers || Object.keys(providers).length === 0) { return ( <> {backgroundImage && (