{"version":3,"sources":["../../modules/react/hooks/index.ts","../../modules/react/hooks/useBroadcastChannel/index.tsx","../../modules/react/hooks/useRouter/index.ts","../../modules/runtime/client/RouterContext.tsx","../../modules/runtime/client/constants.ts","../../modules/runtime/client/window-data.ts"],"sourcesContent":["export { useBroadcastChannel } from \"./useBroadcastChannel\";\r\nexport { useRouter } from \"./useRouter\";\r\nexport type { Router } from \"./useRouter\";\r\n","import React, { useEffect, useState, useRef, useCallback } from \"react\";\r\n\r\nexport const useBroadcastChannel = (channelName: string) => {\r\n  const [message, setMessage] = useState(null);\r\n  const channelRef = useRef<BroadcastChannel | null>(null);\r\n\r\n  useEffect(() => {\r\n    // Create channel only once, inside useEffect\r\n    if (!channelRef.current && typeof window !== \"undefined\") {\r\n      channelRef.current = new BroadcastChannel(channelName);\r\n    }\r\n\r\n    const channel = channelRef.current;\r\n    if (!channel) return;\r\n\r\n    const handleMessage = (event: MessageEvent) => {\r\n      setMessage(event.data);\r\n    };\r\n\r\n    channel.onmessage = handleMessage;\r\n\r\n    // Clean up the channel when the component unmounts\r\n    return () => {\r\n      if (channelRef.current) {\r\n        channelRef.current.close();\r\n        channelRef.current = null;\r\n      }\r\n    };\r\n  }, [channelName]);\r\n\r\n  const sendMessage = useCallback((msg: unknown) => {\r\n    if (channelRef.current) {\r\n      channelRef.current.postMessage(msg);\r\n    }\r\n  }, []);\r\n\r\n  return { message, sendMessage };\r\n};\r\n","import { useState, useEffect, useCallback, useContext, useRef } from \"react\";\r\nimport { RouterContext } from \"../../../runtime/client/RouterContext\";\r\nimport { getWindowData, getRouterData } from \"../../../runtime/client/window-data\";\r\nimport { ROUTER_NAVIGATE_KEY } from \"../../../runtime/client/constants\";\r\n\r\nexport interface Router {\r\n  /**\r\n   * Navigate to a new route.\r\n   * @param url - The URL to navigate to (e.g., \"/about\" or \"/blog/[slug]\" with params)\r\n   * @param options - Navigation options\r\n   */\r\n  push: (url: string, options?: { revalidate?: boolean }) => Promise<void>;\r\n  \r\n  /**\r\n   * Replace the current route without adding to history.\r\n   * @param url - The URL to navigate to\r\n   * @param options - Navigation options\r\n   */\r\n  replace: (url: string, options?: { revalidate?: boolean }) => Promise<void>;\r\n  \r\n  /**\r\n   * Go back in the browser history.\r\n   */\r\n  back: () => void;\r\n  \r\n  /**\r\n   * Refresh the current route data by revalidating.\r\n   */\r\n  refresh: () => Promise<void>;\r\n  \r\n  /**\r\n   * Current pathname (e.g., \"/blog/my-post\")\r\n   */\r\n  pathname: string;\r\n  \r\n  /**\r\n   * Query parameters from the URL (e.g., ?id=123&name=test)\r\n   * Alias for searchParams for backward compatibility\r\n   */\r\n  query: Record<string, string>;\r\n  \r\n  /**\r\n   * Search parameters from the URL (e.g., ?id=123&name=test)\r\n   */\r\n  searchParams: Record<string, unknown>;\r\n  \r\n  /**\r\n   * Dynamic route parameters (e.g., { slug: \"my-post\" } for /blog/[slug])\r\n   */\r\n  params: Record<string, string>;\r\n}\r\n\r\n/**\r\n * Hook to access router functionality and current route information.\r\n * \r\n * Provides methods to navigate programmatically and access current route data.\r\n * \r\n * @returns Router object with navigation methods and route information\r\n * \r\n * @example\r\n * ```tsx\r\n * function MyComponent() {\r\n *   const router = useRouter();\r\n *   \r\n *   const handleClick = () => {\r\n *     router.push(\"/about\");\r\n *   };\r\n *   \r\n *   return (\r\n *     <div>\r\n *       <p>Current path: {router.pathname}</p>\r\n *       <p>Params: {JSON.stringify(router.params)}</p>\r\n *       <button onClick={handleClick}>Go to About</button>\r\n *     </div>\r\n *   );\r\n * }\r\n * ```\r\n * \r\n * @example\r\n * ```tsx\r\n * // Navigate with dynamic params\r\n * router.push(\"/blog/my-post\");\r\n * \r\n * // Replace current route\r\n * router.replace(\"/login\");\r\n * \r\n * // Refresh current route data\r\n * await router.refresh();\r\n * ```\r\n */\r\nexport function useRouter(): Router {\r\n  // Try to get context, but don't throw if it's not available (SSR)\r\n  const context = useContext(RouterContext);\r\n  const navigate = context?.navigate;\r\n  \r\n  // Use a ref to store navigate so we can access it in callbacks even if context updates\r\n  // Initialize with current navigate value\r\n  const navigateRef = useRef(navigate);\r\n  \r\n  // Update ref when navigate changes (this ensures we always have the latest value)\r\n  useEffect(() => {\r\n    navigateRef.current = navigate;\r\n  }, [navigate]);\r\n  \r\n  const [routeData, setRouteData] = useState(() => {\r\n    // During SSR, return empty/default values\r\n    if (typeof window === \"undefined\") {\r\n      return {\r\n        pathname: \"\",\r\n        query: {},\r\n        searchParams: {},\r\n        params: {},\r\n      };\r\n    }\r\n    \r\n    // On client, get data from window\r\n    const data = getWindowData();\r\n    const routerData = getRouterData();\r\n    \r\n    // Parse search params from URL if routerData is not available\r\n    const searchParams = routerData?.searchParams || parseQueryString(window.location.search);\r\n    \r\n    return {\r\n      pathname: routerData?.pathname || data?.pathname || window.location.pathname,\r\n      query: searchParams as Record<string, string>, // For backward compatibility\r\n      searchParams: searchParams,\r\n      params: routerData?.params || data?.params || {},\r\n    };\r\n  });\r\n\r\n  // Listen for route changes (only on client)\r\n  useEffect(() => {\r\n    if (typeof window === \"undefined\") return;\r\n    \r\n    const handleDataRefresh = () => {\r\n      const data = getWindowData();\r\n      const routerData = getRouterData();\r\n      const currentPathname = window.location.pathname;\r\n      const currentSearch = window.location.search;\r\n      \r\n      const searchParams = routerData?.searchParams || parseQueryString(currentSearch);\r\n      \r\n      setRouteData({\r\n        pathname: routerData?.pathname || data?.pathname || currentPathname,\r\n        query: searchParams as Record<string, string>, // For backward compatibility\r\n        searchParams: searchParams,\r\n        params: routerData?.params || data?.params || {},\r\n      });\r\n    };\r\n\r\n    // Listen for navigation events\r\n    window.addEventListener(\"fw-data-refresh\", handleDataRefresh);\r\n    window.addEventListener(\"fw-router-data-refresh\", handleDataRefresh);\r\n    \r\n    // Also listen for popstate (browser back/forward)\r\n    const handlePopState = () => {\r\n      handleDataRefresh();\r\n    };\r\n    window.addEventListener(\"popstate\", handlePopState);\r\n\r\n    return () => {\r\n      window.removeEventListener(\"fw-data-refresh\", handleDataRefresh);\r\n      window.removeEventListener(\"fw-router-data-refresh\", handleDataRefresh);\r\n      window.removeEventListener(\"popstate\", handlePopState);\r\n    };\r\n  }, []);\r\n\r\n  const push = useCallback(\r\n    async (url: string, options?: { revalidate?: boolean }) => {\r\n      const fullUrl = url.startsWith(\"/\") ? url : `/${url}`;\r\n      \r\n      /**\r\n       * SOLUTION: Multi-source navigate function resolution\r\n       * \r\n       * During React hydration, RouterContext may not be available immediately.\r\n       * We try three sources in order:\r\n       * 1. navigateRef.current - Most up-to-date, updated via useEffect\r\n       * 2. navigate from context - Direct context access\r\n       * 3. window.__LOLY_ROUTER_NAVIGATE__ - Global fallback exposed by AppShell\r\n       * \r\n       * This ensures SPA navigation works even during hydration timing issues.\r\n       */\r\n      const getCurrentNavigate = () => {\r\n        if (navigateRef.current) return navigateRef.current;\r\n        if (navigate) return navigate;\r\n        if (typeof window !== \"undefined\" && (window as any)[ROUTER_NAVIGATE_KEY]) {\r\n          return (window as any)[ROUTER_NAVIGATE_KEY];\r\n        }\r\n        return null;\r\n      };\r\n      \r\n      let currentNavigate = getCurrentNavigate();\r\n      \r\n      if (typeof window === \"undefined\") {\r\n        return; // SSR\r\n      }\r\n      \r\n      // Wait for context during hydration (up to 100ms)\r\n      if (!currentNavigate) {\r\n        for (let i = 0; i < 10; i++) {\r\n          await new Promise(resolve => setTimeout(resolve, 10));\r\n          currentNavigate = getCurrentNavigate();\r\n          if (currentNavigate) break;\r\n        }\r\n      }\r\n      \r\n      // Final fallback: full page reload if navigate is still unavailable\r\n      if (!currentNavigate) {\r\n        window.location.href = fullUrl;\r\n        return;\r\n      }\r\n      \r\n      // Check if we're already on this URL (same as link handler)\r\n      const currentUrl = window.location.pathname + window.location.search;\r\n      if (fullUrl === currentUrl) {\r\n        return; // Already on this route, no need to navigate\r\n      }\r\n      \r\n      // Update URL in browser history (same as link handler does)\r\n      // This is done BEFORE navigation to match link behavior\r\n      window.history.pushState({}, \"\", fullUrl);\r\n      \r\n      // Navigate using SPA navigation (same as link handler)\r\n      // If navigation fails, navigate() will handle the reload internally\r\n      await currentNavigate(fullUrl, options);\r\n    },\r\n    [navigate] // Include navigate in dependencies so it updates when context becomes available\r\n  );\r\n\r\n  const replace = useCallback(\r\n    async (url: string, options?: { revalidate?: boolean }) => {\r\n      const fullUrl = url.startsWith(\"/\") ? url : `/${url}`;\r\n      \r\n      const getCurrentNavigate = () => {\r\n        if (navigateRef.current) return navigateRef.current;\r\n        if (navigate) return navigate;\r\n        if (typeof window !== \"undefined\" && (window as any)[ROUTER_NAVIGATE_KEY]) {\r\n          return (window as any)[ROUTER_NAVIGATE_KEY];\r\n        }\r\n        return null;\r\n      };\r\n      \r\n      let currentNavigate = getCurrentNavigate();\r\n      \r\n      if (typeof window === \"undefined\") {\r\n        return;\r\n      }\r\n      \r\n      if (!currentNavigate) {\r\n        for (let i = 0; i < 10; i++) {\r\n          await new Promise(resolve => setTimeout(resolve, 10));\r\n          currentNavigate = getCurrentNavigate();\r\n          if (currentNavigate) break;\r\n        }\r\n      }\r\n      \r\n      if (!currentNavigate) {\r\n        window.location.replace(fullUrl);\r\n        return;\r\n      }\r\n      \r\n      // Update URL in browser history using replace (doesn't add to history)\r\n      window.history.replaceState({}, \"\", fullUrl);\r\n      \r\n      // Navigate using SPA navigation\r\n      await currentNavigate(fullUrl, options);\r\n    },\r\n    [navigate]\r\n  );\r\n\r\n  const back = useCallback(() => {\r\n    if (typeof window !== \"undefined\") {\r\n      window.history.back();\r\n    }\r\n  }, []);\r\n\r\n  const refresh = useCallback(async () => {\r\n    const currentUrl = typeof window !== \"undefined\" \r\n      ? window.location.pathname + window.location.search \r\n      : routeData.pathname;\r\n    \r\n    const getCurrentNavigate = () => {\r\n      if (navigateRef.current) return navigateRef.current;\r\n      if (navigate) return navigate;\r\n      if (typeof window !== \"undefined\" && (window as any)[ROUTER_NAVIGATE_KEY]) {\r\n        return (window as any)[ROUTER_NAVIGATE_KEY];\r\n      }\r\n      return null;\r\n    };\r\n    \r\n    let currentNavigate = getCurrentNavigate();\r\n    \r\n    if (typeof window === \"undefined\") {\r\n      return;\r\n    }\r\n    \r\n    if (!currentNavigate) {\r\n      for (let i = 0; i < 10; i++) {\r\n        await new Promise(resolve => setTimeout(resolve, 10));\r\n        currentNavigate = getCurrentNavigate();\r\n        if (currentNavigate) break;\r\n      }\r\n    }\r\n    \r\n    if (!currentNavigate) {\r\n      window.location.reload();\r\n      return;\r\n    }\r\n    \r\n    await currentNavigate(currentUrl, { revalidate: true });\r\n  }, [navigate, routeData.pathname]);\r\n\r\n  return {\r\n    push,\r\n    replace,\r\n    back,\r\n    refresh,\r\n    pathname: routeData.pathname,\r\n    query: routeData.query,\r\n    searchParams: routeData.searchParams,\r\n    params: routeData.params,\r\n  };\r\n}\r\n\r\n/**\r\n * Parse query string into an object.\r\n * @param search - Query string (e.g., \"?id=123&name=test\")\r\n * @returns Object with query parameters\r\n */\r\nfunction parseQueryString(search: string): Record<string, string> {\r\n  const params: Record<string, string> = {};\r\n  if (!search || search.length === 0) return params;\r\n  \r\n  const queryString = search.startsWith(\"?\") ? search.slice(1) : search;\r\n  const pairs = queryString.split(\"&\");\r\n  \r\n  for (const pair of pairs) {\r\n    const [key, value] = pair.split(\"=\");\r\n    if (key) {\r\n      params[decodeURIComponent(key)] = value ? decodeURIComponent(value) : \"\";\r\n    }\r\n  }\r\n  \r\n  return params;\r\n}\r\n","import { createContext, useContext } from \"react\";\r\n\r\nexport type NavigateFunction = (\r\n  url: string,\r\n  options?: { revalidate?: boolean; replace?: boolean }\r\n) => Promise<void>;\r\n\r\nexport interface RouterContextValue {\r\n  navigate: NavigateFunction;\r\n}\r\n\r\nexport const RouterContext = createContext<RouterContextValue | null>(null);\r\n\r\nexport function useRouterContext(): RouterContextValue {\r\n  const context = useContext(RouterContext);\r\n  if (!context) {\r\n    throw new Error(\r\n      \"useRouter must be used within a RouterProvider. Make sure you're using it inside a Loly app.\"\r\n    );\r\n  }\r\n  return context;\r\n}\r\n","// Client-side constants (hardcoded to avoid alias resolution issues in Rspack)\r\nexport const WINDOW_DATA_KEY = \"__FW_DATA__\";\r\nexport const ROUTER_DATA_KEY = \"__LOLY_ROUTER_DATA__\";\r\nexport const APP_CONTAINER_ID = \"__app\";\r\n// Global key for navigate function fallback (exposed by AppShell for hydration timing issues)\r\nexport const ROUTER_NAVIGATE_KEY = \"__LOLY_ROUTER_NAVIGATE__\";\r\n\r\n","import { WINDOW_DATA_KEY, ROUTER_DATA_KEY } from \"./constants\";\nimport type { InitialData, RouterData } from \"./types\";\n\nconst LAYOUT_PROPS_KEY = \"__FW_LAYOUT_PROPS__\";\n\nexport function getWindowData(): InitialData | null {\n  if (typeof window === \"undefined\") {\n    return null;\n  }\n  return (window[WINDOW_DATA_KEY] as InitialData | undefined) ?? null;\n}\n\n/**\n * Gets preserved layout props from window storage.\n * Layout props are preserved across SPA navigations when layout hooks are skipped.\n */\nexport function getPreservedLayoutProps(): Record<string, any> | null {\n  if (typeof window === \"undefined\") {\n    return null;\n  }\n  return ((window as any)[LAYOUT_PROPS_KEY] as Record<string, any> | undefined) ?? null;\n}\n\n/**\n * Sets preserved layout props in window storage.\n * These props are used when layout hooks are skipped in SPA navigation.\n */\nexport function setPreservedLayoutProps(props: Record<string, any> | null): void {\n  if (typeof window === \"undefined\") {\n    return;\n  }\n  if (props === null) {\n    delete (window as any)[LAYOUT_PROPS_KEY];\n  } else {\n    (window as any)[LAYOUT_PROPS_KEY] = props;\n  }\n}\n\nexport function getRouterData(): RouterData | null {\n  if (typeof window === \"undefined\") {\n    return null;\n  }\n  return (window[ROUTER_DATA_KEY] as RouterData | undefined) ?? null;\n}\n\nexport function setWindowData(data: InitialData): void {\n  window[WINDOW_DATA_KEY] = data;\n  \n  // Dispatch event for components to listen to (e.g. ThemeProvider)\n  // This ensures components update when navigating in SPA mode\n  if (typeof window !== \"undefined\") {\n    window.dispatchEvent(\n      new CustomEvent(\"fw-data-refresh\", {\n        detail: { data },\n      })\n    );\n  }\n}\n\nexport function setRouterData(data: RouterData): void {\n  window[ROUTER_DATA_KEY] = data;\n  \n  // Dispatch event for router data updates\n  if (typeof window !== \"undefined\") {\n    window.dispatchEvent(\n      new CustomEvent(\"fw-router-data-refresh\", {\n        detail: { data },\n      })\n    );\n  }\n}\n\nexport function getCurrentTheme(): string | null {\n  return getWindowData()?.theme ?? null;\n}\n\n"],"mappings":"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","names":["import_react","import_react"]}