{"version":3,"sources":["../src/navigation/NavigationContext.tsx","../src/navigation/BrowserNavigationAdapter.tsx","../src/navigation/useSearchParams.ts"],"names":["createContext","useContext","jsx","useState"],"mappings":";;;;;;AAGA,IAAM,iBAAA,GAAoBA,oBAAwC,IAAI,CAAA;AAW/D,SAAS,kBAAA,CAAmB,EAAE,OAAA,EAAS,QAAA,EAAS,EAA4B;AACjF,EAAA,sCAAQ,iBAAA,CAAkB,QAAA,EAAlB,EAA2B,KAAA,EAAO,SAAU,QAAA,EAAS,CAAA;AAC/D;AAMO,SAAS,oBAAA,GAA0C;AACxD,EAAA,MAAM,OAAA,GAAUC,iBAAW,iBAAiB,CAAA;AAE5C,EAAA,IAAI,CAAC,OAAA,EAAS;AACZ,IAAA,OAAO;AAAA,MACL,eAAA,EAAiB,MAAM,IAAI,eAAA,EAAgB;AAAA,MAC3C,IAAA,EAAM,CAAC,EAAE,IAAA,EAAM,QAAA,EAAU,SAAA,EAAU,qBACjCC,cAAA,CAAC,GAAA,EAAA,EAAE,IAAA,EAAY,SAAA,EACZ,QAAA,EACH;AAAA,KAEJ;AAAA,EACF;AAEA,EAAA,OAAO,OAAA;AACT;AC7BO,IAAM,wBAAA,GAA8C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMzD,eAAA,GAAkB;AAChB,IAAA,MAAM,CAAC,YAAY,CAAA,GAAIC,cAAA,CAAS,MAAM;AACpC,MAAA,IAAI,OAAO,WAAW,WAAA,EAAa;AACjC,QAAA,OAAO,IAAI,eAAA,EAAgB;AAAA,MAC7B;AACA,MAAA,OAAO,IAAI,eAAA,CAAgB,MAAA,CAAO,QAAA,CAAS,MAAM,CAAA;AAAA,IACnD,CAAC,CAAA;AAED,IAAA,OAAO,YAAA;AAAA,EACT,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,IAAA,CAAK,EAAE,IAAA,EAAM,SAAA,EAAW,UAAS,EAAG;AAClC,IAAA,uBACED,cAAAA,CAAC,GAAA,EAAA,EAAE,IAAA,EAAY,WACZ,QAAA,EACH,CAAA;AAAA,EAEJ;AACF;;;ACnBO,SAAS,eAAA,GAAmC;AACjD,EAAA,MAAM,UAAU,oBAAA,EAAqB;AACrC,EAAA,OAAO,QAAQ,eAAA,EAAgB;AACjC","file":"navigation.cjs","sourcesContent":["import { createContext, useContext, ReactNode } from 'react';\r\nimport type { NavigationAdapter } from './types';\r\n\r\nconst NavigationContext = createContext<NavigationAdapter | null>(null);\r\n\r\nexport interface NavigationProviderProps {\r\n  adapter: NavigationAdapter;\r\n  children: ReactNode;\r\n}\r\n\r\n/**\r\n * Navigation Provider\r\n * Injects navigation adapter into the component tree\r\n */\r\nexport function NavigationProvider({ adapter, children }: NavigationProviderProps) {\r\n  return <NavigationContext.Provider value={adapter}>{children}</NavigationContext.Provider>;\r\n}\r\n\r\n/**\r\n * Hook to access navigation adapter\r\n * @throws Error if used outside NavigationProvider\r\n */\r\nexport function useNavigationAdapter(): NavigationAdapter {\r\n  const adapter = useContext(NavigationContext);\r\n\r\n  if (!adapter) {\r\n    return {\r\n      useSearchParams: () => new URLSearchParams(),\r\n      Link: ({ href, children, className }) => (\r\n        <a href={href} className={className}>\r\n          {children}\r\n        </a>\r\n      ),\r\n    };\r\n  }\r\n\r\n  return adapter;\r\n}\r\n","import { useState } from 'react';\r\nimport type { NavigationAdapter } from './types';\r\n\r\n/**\r\n * Browser native navigation adapter\r\n * Uses browser's native URLSearchParams and <a> tags\r\n * Suitable for vanilla React apps without a routing library\r\n */\r\nexport const BrowserNavigationAdapter: NavigationAdapter = {\r\n  /**\r\n   * Returns URLSearchParams from current window.location.search\r\n   * Note: Not reactive - reads once on component mount\r\n   * This is sufficient for auth flows where we read initial URL params\r\n   */\r\n  useSearchParams() {\r\n    const [searchParams] = useState(() => {\r\n      if (typeof window === 'undefined') {\r\n        return new URLSearchParams();\r\n      }\r\n      return new URLSearchParams(window.location.search);\r\n    });\r\n\r\n    return searchParams;\r\n  },\r\n\r\n  /**\r\n   * Native <a> tag for navigation\r\n   * Uses full page reload\r\n   */\r\n  Link({ href, className, children }) {\r\n    return (\r\n      <a href={href} className={className}>\r\n        {children}\r\n      </a>\r\n    );\r\n  },\r\n};\r\n","import { useNavigationAdapter } from './NavigationContext';\r\n\r\n/**\r\n * Hook to get URL search parameters\r\n * Uses the navigation adapter injected by NavigationProvider\r\n *\r\n * @returns URLSearchParams object\r\n *\r\n * @example\r\n * ```tsx\r\n * function MyComponent() {\r\n *   const searchParams = useSearchParams();\r\n *   const redirectUrl = searchParams.get('redirect') || '/';\r\n *   // ...\r\n * }\r\n * ```\r\n */\r\nexport function useSearchParams(): URLSearchParams {\r\n  const adapter = useNavigationAdapter();\r\n  return adapter.useSearchParams();\r\n}\r\n"]}