'use client' import { createContext, useContext, type ReactNode } from 'react' /** * Framework-agnostic router adapter. * Implement this interface for your framework (Next.js, Remix, etc.) */ export interface RouterAdapter { /** Navigate to a path (adds to history) */ push: (path: string) => void /** Replace current path (no history entry) */ replace: (path: string) => void /** Current pathname (e.g., "/account/login") */ pathname: string /** Current search params */ searchParams: URLSearchParams /** Get a specific route param (e.g., from /auth/[...path]) - optional */ getParam?: (name: string) => string | string[] | undefined } const Context = createContext(null) interface RouterContextProps { children: ReactNode router: RouterAdapter } /** * Provides router adapter to route guards. */ export function RouterContext({ children, router }: RouterContextProps) { return {children} } /** * Hook to access router adapter. */ export function useRouter(): RouterAdapter { const ctx = useContext(Context) if (!ctx) throw new Error('useRouter must be used within RouterContext') return ctx }