fix(#411): auth & frontend remediation — all 6 phases complete #418

Merged
jason.woltje merged 51 commits from fix/auth-frontend-remediation into develop 2026-02-16 23:11:42 +00:00
Showing only changes of commit c917a639c4 - Show all commits

View File

@@ -1,6 +1,6 @@
"use client";
import { useEffect, useState, useCallback } from "react";
import { Suspense, useEffect, useState, useCallback } from "react";
import type { ReactElement } from "react";
import { useRouter, useSearchParams } from "next/navigation";
import { Loader2 } from "lucide-react";
@@ -15,6 +15,34 @@ import { AuthDivider } from "@/components/auth/AuthDivider";
import { AuthErrorBanner } from "@/components/auth/AuthErrorBanner";
export default function LoginPage(): ReactElement {
return (
<Suspense
fallback={
<main className="flex min-h-screen flex-col items-center justify-center p-4 sm:p-8 bg-gray-50">
<div className="w-full max-w-md space-y-8">
<div className="text-center">
<h1 className="text-2xl sm:text-4xl font-bold mb-4">Welcome to Mosaic Stack</h1>
</div>
<div className="bg-white p-4 sm:p-8 rounded-lg shadow-md">
<div
className="flex items-center justify-center py-8"
role="status"
aria-label="Loading authentication options"
>
<Loader2 className="h-8 w-8 animate-spin text-blue-500" aria-hidden="true" />
<span className="sr-only">Loading authentication options</span>
</div>
</div>
</div>
</main>
}
>
<LoginPageContent />
</Suspense>
);
}
function LoginPageContent(): ReactElement {
const router = useRouter();
const searchParams = useSearchParams();
const [config, setConfig] = useState<AuthConfigResponse | null | undefined>(undefined);