Files
Pac-Man/web/lib/navigation.ts
Xevion 3bb3908853 feat(web): add smooth page transitions and WASM loading states
- Implement navigation state tracking with optimistic UI updates
- Add loading spinner and error handling for WASM initialization
- Insert browser yield points during game initialization to prevent freezing
- Redesign leaderboard with tabbed navigation and mock data structure
- Add utility CSS classes for consistent page layouts
2025-12-29 03:33:43 -06:00

25 lines
703 B
TypeScript

import { useSyncExternalStore } from "react";
type Listener = (pendingUrl: string | null) => void;
let pendingUrl: string | null = null;
const listeners = new Set<Listener>();
export function setPendingNavigation(url: string | null) {
pendingUrl = url;
listeners.forEach((listener) => listener(pendingUrl));
}
export function getPendingNavigation(): string | null {
return pendingUrl;
}
export function subscribeToPendingNavigation(listener: Listener): () => void {
listeners.add(listener);
return () => listeners.delete(listener);
}
export function usePendingNavigation(): string | null {
return useSyncExternalStore(subscribeToPendingNavigation, getPendingNavigation, () => null);
}