import { useEffect, useRef } from "react"; import { Button } from "~/components/ui/button"; import { Card } from "~/components/ui/card"; interface AuthRecoveryOverlayProps { isAuthDegraded: boolean; } export function AuthRecoveryOverlay({ isAuthDegraded, }: AuthRecoveryOverlayProps) { const dialogRef = useRef(null); useEffect(() => { if (!isAuthDegraded) return; const el = dialogRef.current; if (!el) return; const focusable = el.querySelector( 'button:not([disabled]), [href], input:not([disabled]), [tabindex]:not([tabindex="-1"])' ); focusable?.focus(); function trapFocus(e: KeyboardEvent) { if (e.key !== "Tab") return; const focusables = el?.querySelectorAll( 'button:not([disabled]), [href], input:not([disabled]), [tabindex]:not([tabindex="-1"])' ); if (!focusables || focusables.length === 0) return; const first = focusables[0]; const last = focusables[focusables.length - 1]; if (e.shiftKey) { if (document.activeElement === first) { e.preventDefault(); last.focus(); } } else { if (document.activeElement === last) { e.preventDefault(); first.focus(); } } } document.addEventListener("keydown", trapFocus); return () => document.removeEventListener("keydown", trapFocus); }, [isAuthDegraded]); if (!isAuthDegraded) { return null; } return (

Session Expired

Your session has expired. Reload the page to reconnect to the draft.

); }