import { useEffect } from "preact/hooks"; declare global { // deno-lint-ignore no-var var loadingTimeout: ReturnType | undefined; } export function Link( { href, children, class: _class, style }: { href?: string; class?: string; style?: preact.JSX.CSSProperties; children: preact.ComponentChildren; }, ) { function handleClick() { if (globalThis.loadingTimeout) { return; } globalThis.loadingTimeout = setTimeout(() => { document.querySelector("main")?.classList.add("loading"); }, 100); } useEffect(() => { if (globalThis.loadingTimeout) { clearTimeout(globalThis.loadingTimeout); delete globalThis.loadingTimeout; setTimeout(() => { globalThis.dispatchEvent(new CustomEvent("loading-finished")); document.querySelector("main")?.classList.remove("loading"); }, 100); } else { globalThis.dispatchEvent(new CustomEvent("loading-finished")); document.querySelector("main")?.classList.remove("loading"); } }); return ( {children} ); }