{"version":3,"sources":["../src/navigation/ReactRouterAdapter.tsx","../src/provider/InsforgeProvider.tsx","../src/router/getInsforgeRoutes.tsx"],"names":["useRRSearchParams","jsx","RRLink","StyleProvider","NavigationProvider","InsforgeProviderCore","useEffect"],"mappings":";;;;;;;;AAmBO,IAAM,kBAAA,GAAwC;AAAA;AAAA;AAAA;AAAA;AAAA,EAKnD,eAAA,GAAkB;AAChB,IAAA,MAAM,CAAC,YAAY,CAAA,GAAIA,8BAAA,EAAkB;AAEzC,IAAA,OAAO,IAAI,eAAA,CAAgB,YAAA,CAAa,QAAA,EAAU,CAAA;AAAA,EACpD,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,IAAA,CAAK,EAAE,IAAA,EAAM,SAAA,EAAW,UAAS,EAA8D;AAC7F,IAAA,uBACEC,cAAA,CAACC,mBAAA,EAAA,EAAO,EAAA,EAAI,IAAA,EAAM,WACf,QAAA,EACH,CAAA;AAAA,EAEJ;AACF;AC7BO,SAAS,gBAAA,CAAiB,EAAE,QAAA,EAAU,GAAG,OAAM,EAA0B;AAC9E,EAAA,uBACED,cAAAA,CAACE,mBAAA,EAAA,EACC,QAAA,kBAAAF,eAACG,wBAAA,EAAA,EAAmB,OAAA,EAAS,kBAAA,EAC3B,QAAA,kBAAAH,eAACI,0BAAA,EAAA,EAAsB,GAAG,KAAA,EAAQ,QAAA,EAAS,GAC7C,CAAA,EACF,CAAA;AAEJ;ACqBA,SAAS,cAAA,CAAe;AAAA,EACtB,OAAA;AAAA,EACA,IAAA;AAAA,EACA;AACF,CAAA,EAIG;AACD,EAAAC,iBAAA,CAAU,MAAM;AAEd,IAAA,MAAM,UAAA,GAAa,MAAA,CAAO,QAAA,CAAS,MAAA,GAAS,cAAA;AAC5C,IAAA,MAAM,OAAA,GAAU,IAAI,GAAA,CAAI,IAAA,EAAM,OAAO,CAAA;AACrC,IAAA,OAAA,CAAQ,YAAA,CAAa,GAAA,CAAI,UAAA,EAAY,UAAU,CAAA;AAC/C,IAAA,MAAA,CAAO,QAAA,CAAS,OAAA,CAAQ,OAAA,CAAQ,QAAA,EAAU,CAAA;AAAA,EAC5C,CAAA,EAAG,CAAC,OAAA,EAAS,IAAA,EAAM,cAAc,CAAC,CAAA;AAElC,EAAA,OAAO,IAAA;AACT;AA6CO,SAAS,kBAAkB,MAAA,EAAgD;AAChF,EAAA,MAAM,EAAE,SAAS,WAAA,GAAc,IAAA,EAAM,QAAQ,EAAC,EAAG,cAAA,GAAiB,GAAA,EAAI,GAAI,MAAA;AAE1E,EAAA,MAAM,EAAE,MAAA,GAAS,UAAA,EAAY,SAAS,UAAA,EAAY,cAAA,GAAiB,oBAAmB,GAAI,KAAA;AAE1F,EAAA,MAAM,SAAwB,EAAC;AAG/B,EAAA,IAAI,WAAA,EAAa;AACf,IAAA,MAAA,CAAO,IAAA;AAAA,MACL;AAAA,QACE,IAAA,EAAM,MAAA;AAAA,QACN,yBACEL,cAAAA,CAAC,kBAAe,OAAA,EAAkB,IAAA,EAAK,iBAAgB,cAAA,EAAgC;AAAA,OAE3F;AAAA,MACA;AAAA,QACE,IAAA,EAAM,MAAA;AAAA,QACN,yBACEA,cAAAA,CAAC,kBAAe,OAAA,EAAkB,IAAA,EAAK,iBAAgB,cAAA,EAAgC;AAAA,OAE3F;AAAA,MACA;AAAA,QACE,IAAA,EAAM,cAAA;AAAA,QACN,yBAASA,cAAAA,CAAC,cAAA,EAAA,EAAe,OAAA,EAAkB,MAAK,uBAAA,EAAwB;AAAA;AAC1E,KACF;AAAA,EACF;AAEA,EAAA,OAAO,MAAA;AACT","file":"index.cjs","sourcesContent":["import { useSearchParams as useRRSearchParams } from 'react-router-dom';\nimport { Link as RRLink } from 'react-router-dom';\nimport type { ComponentType, ReactNode } from 'react';\n\n// Define the NavigationAdapter interface locally\ninterface NavigationAdapter {\n  useSearchParams(): URLSearchParams;\n  Link: ComponentType<{\n    href: string;\n    className?: string;\n    children: ReactNode;\n  }>;\n}\n\n/**\n * React Router navigation adapter\n * Uses React Router's useSearchParams hook and Link component\n * Provides client-side navigation with no page reloads\n */\nexport const ReactRouterAdapter: NavigationAdapter = {\n  /**\n   * Returns URLSearchParams from React Router's useSearchParams\n   * Reactive - updates when URL changes\n   */\n  useSearchParams() {\n    const [searchParams] = useRRSearchParams();\n    // Convert React Router's ReadonlyURLSearchParams to URLSearchParams\n    return new URLSearchParams(searchParams.toString());\n  },\n\n  /**\n   * React Router's Link component for client-side navigation\n   * Supports prefetching and optimistic UI updates\n   */\n  Link({ href, className, children }: { href: string; className?: string; children: ReactNode }) {\n    return (\n      <RRLink to={href} className={className}>\n        {children}\n      </RRLink>\n    );\n  },\n};\n","import {\n  InsforgeProviderCore,\n  type InsforgeProviderProps,\n  NavigationProvider,\n  StyleProvider,\n} from '@insforge/react';\nimport { ReactRouterAdapter } from '../navigation';\n\n/**\n * Insforge Provider for React Router\n * Wraps the core provider and injects React Router navigation adapter\n */\nexport function InsforgeProvider({ children, ...props }: InsforgeProviderProps) {\n  return (\n    <StyleProvider>\n      <NavigationProvider adapter={ReactRouterAdapter}>\n        <InsforgeProviderCore {...props}>{children}</InsforgeProviderCore>\n      </NavigationProvider>\n    </StyleProvider>\n  );\n}\n\n// Re-export the props type\nexport type { InsforgeProviderProps };\n","import { useEffect } from 'react';\nimport type { RouteObject } from 'react-router-dom';\n\ninterface GetInsforgeRoutesConfig {\n  /**\n   * Base URL of your Insforge backend\n   */\n  baseUrl: string;\n\n  /**\n   * URL to redirect to after successful sign in (when token is detected in URL)\n   * @default '/'\n   */\n  afterSignInUrl?: string;\n\n  /**\n   * Whether to use built-in auth (deployed Insforge Auth)\n   * When true: redirects to baseUrl/auth/* pages\n   * When false: no redirect routes are added (use your own components)\n   * @default true\n   */\n  builtInAuth?: boolean;\n\n  /**\n   * Custom paths for auth redirect routes\n   * @default {\n   *   signIn: '/sign-in',\n   *   signUp: '/sign-up',\n   *   forgotPassword: '/forgot-password',\n   * }\n   */\n  paths?: {\n    signIn?: string;\n    signUp?: string;\n    forgotPassword?: string;\n  };\n}\n\n/**\n * Helper component for redirecting to external auth\n */\nfunction RedirectToAuth({\n  baseUrl,\n  path,\n  afterSignInUrl,\n}: {\n  baseUrl: string;\n  path: string;\n  afterSignInUrl?: string;\n}) {\n  useEffect(() => {\n    // Redirect back to current URL - middleware/SDK will handle token from URL\n    const currentUrl = window.location.origin + afterSignInUrl;\n    const authUrl = new URL(path, baseUrl);\n    authUrl.searchParams.set('redirect', currentUrl);\n    window.location.replace(authUrl.toString());\n  }, [baseUrl, path, afterSignInUrl]);\n\n  return null;\n}\n\n/**\n * Generates Insforge authentication redirect routes for React Router.\n *\n * Returns redirect routes for sign-in, sign-up, etc. that redirect to your deployed Insforge auth pages.\n *\n * @param config - Configuration for Insforge routes\n * @returns Array of RouteObject for React Router (redirect routes only)\n *\n * @example\n * ```tsx\n * import { createBrowserRouter } from 'react-router-dom';\n * import { getInsforgeRoutes } from '@insforge/react/router';\n *\n * const router = createBrowserRouter([\n *   {\n *     path: '/',\n *     element: <Layout />,\n *     children: [\n *       { index: true, element: <Home /> },\n *       { path: 'dashboard', element: <Dashboard /> }\n *     ]\n *   },\n *   // Add redirect routes (sign-in, sign-up, etc.)\n *   ...getInsforgeRoutes({\n *     baseUrl: 'https://your-backend.com',\n *     builtInAuth: true\n *   })\n * ]);\n * ```\n *\n * @example\n * ```tsx\n * // Custom paths for redirect routes\n * ...getInsforgeRoutes({\n *   baseUrl: 'https://your-backend.com',\n *   builtInAuth: true,\n *   paths: {\n *     signIn: '/login',\n *     signUp: '/register'\n *   }\n * })\n * ```\n */\nexport function getInsforgeRoutes(config: GetInsforgeRoutesConfig): RouteObject[] {\n  const { baseUrl, builtInAuth = true, paths = {}, afterSignInUrl = '/' } = config;\n\n  const { signIn = '/sign-in', signUp = '/sign-up', forgotPassword = '/forgot-password' } = paths;\n\n  const routes: RouteObject[] = [];\n\n  // Only add redirect routes if using built-in auth\n  if (builtInAuth) {\n    routes.push(\n      {\n        path: signIn,\n        element: (\n          <RedirectToAuth baseUrl={baseUrl} path=\"/auth/sign-in\" afterSignInUrl={afterSignInUrl} />\n        ),\n      },\n      {\n        path: signUp,\n        element: (\n          <RedirectToAuth baseUrl={baseUrl} path=\"/auth/sign-up\" afterSignInUrl={afterSignInUrl} />\n        ),\n      },\n      {\n        path: forgotPassword,\n        element: <RedirectToAuth baseUrl={baseUrl} path=\"/auth/forgot-password\" />,\n      }\n    );\n  }\n\n  return routes;\n}\n"]}