"use client" import { Suspense, useEffect, useState } from "react" import { usePathname, useSearchParams } from "next/navigation" import { Progress } from "@/components/ui/progress" function PageProgressContent() { const pathname = usePathname() const searchParams = useSearchParams() const [progress, setProgress] = useState(0) const [isVisible, setIsVisible] = useState(false) // Start progress on click useEffect(() => { const handleClick = (e: MouseEvent) => { const target = (e.target as HTMLElement).closest("a") if (!target) return const href = target.getAttribute("href") if (!href) return // Check if it's an internal link const isInternal = href.startsWith("/") || href.startsWith(window.location.origin) const isSamePage = href === window.location.pathname || href.startsWith(window.location.pathname + "#") || href === window.location.href // Only show progress for actual page transitions if (isInternal && !isSamePage && target.getAttribute("target") !== "_blank") { setIsVisible(true) setProgress(15) // Simulate progress while waiting for route change // Uses a decaying approach so it slows down as it gets closer to 95% const interval = setInterval(() => { setProgress((prev) => { if (prev >= 95) { clearInterval(interval) return prev } return prev + (95 - prev) * 0.1 }) }, 100) // Store interval so we can clear it on route change ;(window as any).__page_progress_interval = interval } } document.addEventListener("click", handleClick) return () => document.removeEventListener("click", handleClick) }, []) // Finish progress on route change useEffect(() => { if (typeof window !== "undefined" && (window as any).__page_progress_interval) { clearInterval((window as any).__page_progress_interval) } if (isVisible) { setProgress(100) const timeout = setTimeout(() => { setIsVisible(false) setTimeout(() => setProgress(0), 300) // Reset after hiding }, 400) return () => clearTimeout(timeout) } // eslint-disable-next-line react-hooks/exhaustive-deps }, [pathname, searchParams]) if (!isVisible && progress === 0) return null return (