{"version":3,"file":"index.cjs","sources":["../../lib/vowel/adapters/navigation/tanstack-navigation-adapter.ts","../../lib/vowel/adapters/navigation/react-router-navigation-adapter.ts","../../lib/vowel/adapters/helpers.ts"],"sourcesContent":["/**\n * TanStack Router Navigation Adapter\n * \n * Specialized adapter for TanStack Router with automatic route extraction.\n * Implements the new NavigationAdapter interface while maintaining compatibility\n * with TanStack Router's type-safe routing.\n * \n * @example\n * ```ts\n * import { TanStackNavigationAdapter } from '@vowel.to/client/adapters/navigation';\n * import { useRouter } from '@tanstack/react-router';\n * \n * const router = useRouter();\n * \n * const navigationAdapter = new TanStackNavigationAdapter(router);\n * ```\n */\n\nimport type { NavigationAdapter, VowelRoute } from '../../types';\nimport type { Router } from '@tanstack/react-router';\n\n/**\n * Extract route information from TanStack Router\n */\nfunction extractRoutesFromTanStackRouter(router: Router<any, any>): VowelRoute[] {\n  try {\n    const routes: VowelRoute[] = [];\n    \n    // Get all route definitions from the router\n    const routeTree = router.routeTree;\n    \n    function traverseRoutes(route: any, parentPath = ''): void {\n      if (!route) return;\n      \n      const fullPath = parentPath + (route.path || '');\n      \n      // Only add routes that have actual paths\n      if (route.path && route.path !== '/') {\n        const routeInfo: VowelRoute = {\n          path: fullPath,\n          description: route.options?.meta?.description || \n                      route.options?.meta?.title ||\n                      `Route: ${fullPath}`,\n        };\n\n        // Extract possible parameters from the path\n        const paramMatches = fullPath.match(/\\$([^/]+)/g);\n        if (paramMatches) {\n          routeInfo.queryParams = paramMatches.map(param => param.substring(1));\n        }\n\n        routes.push(routeInfo);\n      }\n      \n      // Traverse child routes\n      if (route.children) {\n        route.children.forEach((child: any) => {\n          traverseRoutes(child, fullPath);\n        });\n      }\n    }\n    \n    traverseRoutes(routeTree);\n    \n    // Also add current matches for dynamic routes\n    if (router.state.matches) {\n      router.state.matches.forEach((match: any) => {\n        const matchPath = match.pathname;\n        const routeId = match.routeId;\n        \n        // Check if this route is already in our list\n        const existing = routes.find(r => r.path === matchPath);\n        if (!existing && matchPath && matchPath !== '/') {\n          routes.push({\n            path: matchPath,\n            description: `Dynamic route: ${routeId || matchPath}`,\n            queryParams: match.params ? Object.keys(match.params) : undefined,\n          });\n        }\n      });\n    }\n    \n    return routes;\n  } catch (error) {\n    console.warn('Failed to extract routes from TanStack Router:', error);\n    return [];\n  }\n}\n\n/**\n * TanStack Router Navigation Adapter\n * \n * Provides seamless integration with TanStack Router, including:\n * - Type-safe navigation\n * - Automatic route discovery\n * - Support for dynamic routes\n */\nexport class TanStackNavigationAdapter implements NavigationAdapter {\n  private router: Router<any, any>;\n\n  constructor(router: Router<any, any>) {\n    this.router = router;\n    console.log('🧭 [TanStackNavigationAdapter] Initialized with TanStack Router');\n  }\n\n  /**\n   * Navigate to a path using TanStack Router\n   * Parses query strings from URLs and passes them as search params\n   */\n  async navigate(path: string): Promise<void> {\n    console.log(`🧭 [TanStackNavigationAdapter] Navigating to: ${path}`);\n    \n    try {\n      // Parse query string from path if present\n      const [pathname, queryString] = path.split('?');\n      const searchParams: Record<string, string> = {};\n      \n      if (queryString) {\n        // Parse query string into search params object\n        // Keep values as strings - let route's validateSearch handle type conversion\n        const params = new URLSearchParams(queryString);\n        params.forEach((value, key) => {\n          searchParams[key] = value;\n        });\n      }\n      \n      // Navigate with parsed path and search params\n      await this.router.navigate({ \n        to: pathname,\n        search: Object.keys(searchParams).length > 0 ? searchParams : undefined\n      });\n      console.log(`   ✅ Navigation successful`);\n    } catch (error) {\n      console.error(`   ❌ Navigation failed:`, error);\n      throw error;\n    }\n  }\n\n  /**\n   * Get current path from TanStack Router\n   */\n  getCurrentPath(): string {\n    return this.router.state.location.pathname;\n  }\n\n  /**\n   * Get routes automatically extracted from TanStack Router\n   */\n  async getRoutes(): Promise<VowelRoute[]> {\n    const routes = extractRoutesFromTanStackRouter(this.router);\n    console.log(`🧭 [TanStackNavigationAdapter] Extracted ${routes.length} routes from router`);\n    return routes;\n  }\n\n  /**\n   * Get additional context from TanStack Router\n   */\n  getContext(): any {\n    const routes = extractRoutesFromTanStackRouter(this.router);\n    \n    return {\n      location: this.router.state.location,\n      matches: this.router.state.matches,\n      routes,\n      routeTree: this.router.routeTree,\n    };\n  }\n}\n\n/**\n * Create a TanStack Router adapter using navigation hooks\n * This version is for use within React components\n * \n * @param navigate - navigate function from useNavigate() hook\n * @param pathname - current pathname from useRouterState() or similar\n * @returns NavigationAdapter\n * \n * @example\n * ```tsx\n * import { useNavigate, useRouterState } from '@tanstack/react-router';\n * import { createTanStackHookAdapter } from '@vowel.to/client/adapters/navigation';\n * \n * function App() {\n *   const navigate = useNavigate();\n *   const pathname = useRouterState({ select: s => s.location.pathname });\n *   \n *   const navigationAdapter = useMemo(\n *     () => createTanStackHookAdapter(navigate, pathname),\n *     [navigate, pathname]\n *   );\n *   \n *   return <Vowel navigationAdapter={navigationAdapter} />;\n * }\n * ```\n */\nexport function createTanStackHookAdapter(\n  navigate: (opts: { to: string }) => Promise<void>,\n  pathname: string\n): NavigationAdapter {\n  return {\n    navigate: async (path: string) => {\n      console.log(`🧭 [TanStackHookAdapter] Navigating to: ${path}`);\n      await navigate({ to: path });\n    },\n    \n    getCurrentPath: () => {\n      return pathname;\n    },\n\n    getRoutes: async () => {\n      // Cannot extract routes from hooks - return empty array\n      // Routes should be provided via Vowel config in this case\n      return [];\n    }\n  };\n}\n\n","/**\n * React Router Navigation Adapter\n * \n * Specialized adapter for React Router (v6+) with automatic route extraction.\n * Implements the NavigationAdapter interface while maintaining compatibility\n * with React Router's routing system.\n * \n * @example\n * ```ts\n * import { ReactRouterNavigationAdapter } from '@vowel.to/client/adapters/navigation';\n * import { useNavigate, useLocation } from 'react-router-dom';\n * \n * const navigate = useNavigate();\n * const location = useLocation();\n * \n * const navigationAdapter = new ReactRouterNavigationAdapter({\n *   navigate,\n *   location\n * });\n * ```\n */\n\nimport type { NavigationAdapter, VowelRoute } from '../../types';\n\n/**\n * React Router location interface (simplified)\n */\nexport interface ReactRouterLocation {\n  pathname: string;\n  search?: string;\n  hash?: string;\n  state?: any;\n  key?: string;\n}\n\n/**\n * React Router navigate function type\n */\nexport type ReactRouterNavigateFunction = (to: string | number, options?: {\n  replace?: boolean;\n  state?: any;\n  preventScrollReset?: boolean;\n  relative?: 'route' | 'path';\n}) => void;\n\n/**\n * Options for ReactRouterNavigationAdapter\n */\nexport interface ReactRouterNavigationAdapterOptions {\n  /**\n   * Navigate function from useNavigate() hook\n   */\n  navigate: ReactRouterNavigateFunction;\n\n  /**\n   * Location object from useLocation() hook\n   */\n  location: ReactRouterLocation;\n\n  /**\n   * Optional: Array of routes to provide to the AI\n   * Since React Router doesn't expose route configuration at runtime,\n   * you should provide this manually\n   */\n  routes?: VowelRoute[];\n\n  /**\n   * Optional: Whether to use replace instead of push for navigation\n   * Default: false\n   */\n  useReplace?: boolean;\n}\n\n/**\n * React Router Navigation Adapter\n * \n * Provides seamless integration with React Router, including:\n * - Navigation using useNavigate() hook\n * - Current path tracking using useLocation() hook\n * - Support for manual route configuration\n * \n * Note: Unlike TanStack Router, React Router doesn't expose route configuration\n * at runtime, so routes should be provided manually via the routes option.\n */\nexport class ReactRouterNavigationAdapter implements NavigationAdapter {\n  private navigateFunction: ReactRouterNavigateFunction;\n  private location: ReactRouterLocation;\n  private routes?: VowelRoute[];\n  private useReplace: boolean;\n\n  constructor(options: ReactRouterNavigationAdapterOptions) {\n    this.navigateFunction = options.navigate;\n    this.location = options.location;\n    this.routes = options.routes;\n    this.useReplace = options.useReplace ?? false;\n    \n    console.log('🧭 [ReactRouterNavigationAdapter] Initialized with React Router');\n    if (this.routes) {\n      console.log(`   📍 Provided ${this.routes.length} routes`);\n    } else {\n      console.log('   ⚠️  No routes provided - consider adding routes for better AI navigation');\n    }\n  }\n\n  /**\n   * Navigate to a path using React Router\n   */\n  async navigate(path: string): Promise<void> {\n    console.log(`🧭 [ReactRouterNavigationAdapter] Navigating to: ${path}`);\n    \n    try {\n      this.navigateFunction(path, {\n        replace: this.useReplace\n      });\n      console.log(`   ✅ Navigation successful`);\n    } catch (error) {\n      console.error(`   ❌ Navigation failed:`, error);\n      throw error;\n    }\n  }\n\n  /**\n   * Get current path from React Router location\n   */\n  getCurrentPath(): string {\n    return this.location.pathname;\n  }\n\n  /**\n   * Get routes (if provided during initialization)\n   */\n  async getRoutes(): Promise<VowelRoute[]> {\n    if (this.routes) {\n      console.log(`🧭 [ReactRouterNavigationAdapter] Returning ${this.routes.length} configured routes`);\n      return this.routes;\n    }\n    \n    console.log('🧭 [ReactRouterNavigationAdapter] No routes configured');\n    return [];\n  }\n\n  /**\n   * Get additional context from React Router\n   */\n  getContext(): any {\n    return {\n      location: this.location,\n      routes: this.routes || [],\n      pathname: this.location.pathname,\n      search: this.location.search,\n      hash: this.location.hash,\n      state: this.location.state\n    };\n  }\n\n  /**\n   * Update the location reference\n   * Call this when the location changes to keep the adapter in sync\n   * \n   * @param location - New location object from useLocation()\n   */\n  updateLocation(location: ReactRouterLocation): void {\n    this.location = location;\n  }\n\n  /**\n   * Update the routes configuration\n   * Useful if routes are loaded dynamically\n   * \n   * @param routes - New routes array\n   */\n  updateRoutes(routes: VowelRoute[]): void {\n    this.routes = routes;\n    console.log(`🧭 [ReactRouterNavigationAdapter] Routes updated: ${routes.length} routes`);\n  }\n}\n\n/**\n * Create a React Router adapter using navigation hooks\n * This is a convenience function for quick setup\n * \n * @param navigate - navigate function from useNavigate() hook\n * @param location - location object from useLocation() hook\n * @param routes - Optional array of routes\n * @returns NavigationAdapter\n * \n * @example\n * ```tsx\n * import { useNavigate, useLocation } from 'react-router-dom';\n * import { createReactRouterAdapter } from '@vowel.to/client/adapters/navigation';\n * \n * function App() {\n *   const navigate = useNavigate();\n *   const location = useLocation();\n *   \n *   const navigationAdapter = useMemo(\n *     () => createReactRouterAdapter(navigate, location, [\n *       { path: '/', description: 'Home page' },\n *       { path: '/about', description: 'About page' },\n *       { path: '/products', description: 'Products listing' }\n *     ]),\n *     [navigate, location]\n *   );\n *   \n *   return <Vowel navigationAdapter={navigationAdapter} />;\n * }\n * ```\n */\nexport function createReactRouterAdapter(\n  navigate: ReactRouterNavigateFunction,\n  location: ReactRouterLocation,\n  routes?: VowelRoute[]\n): NavigationAdapter {\n  return new ReactRouterNavigationAdapter({\n    navigate,\n    location,\n    routes\n  });\n}\n\n/**\n * Create a React Router adapter with just pathname (simpler version)\n * \n * @param navigate - navigate function from useNavigate() hook\n * @param pathname - current pathname from useLocation().pathname\n * @param routes - Optional array of routes\n * @returns NavigationAdapter\n * \n * @example\n * ```tsx\n * import { useNavigate, useLocation } from 'react-router-dom';\n * import { createReactRouterHookAdapter } from '@vowel.to/client/adapters/navigation';\n * \n * function App() {\n *   const navigate = useNavigate();\n *   const { pathname } = useLocation();\n *   \n *   const navigationAdapter = useMemo(\n *     () => createReactRouterHookAdapter(navigate, pathname),\n *     [navigate, pathname]\n *   );\n *   \n *   return <Vowel navigationAdapter={navigationAdapter} />;\n * }\n * ```\n */\nexport function createReactRouterHookAdapter(\n  navigate: ReactRouterNavigateFunction,\n  pathname: string,\n  routes?: VowelRoute[]\n): NavigationAdapter {\n  return {\n    navigate: async (path: string) => {\n      console.log(`🧭 [ReactRouterHookAdapter] Navigating to: ${path}`);\n      navigate(path);\n    },\n    \n    getCurrentPath: () => {\n      return pathname;\n    },\n\n    getRoutes: async () => {\n      return routes || [];\n    }\n  };\n}\n\n","/**\n * @fileoverview Adapter Helper Functions - Convenience functions for common setups\n * \n * This file contains helper functions that simplify the creation of navigation and\n * automation adapters for common use cases. Instead of manually instantiating adapters,\n * these functions provide one-line setup for popular frameworks and scenarios.\n * \n * Available Helpers:\n * - `createDirectAdapters` - For SPAs (React, Vue, etc.)\n * - `createControlledAdapters` - For traditional sites (Shopify, WordPress)\n * - `createTanStackAdapters` - For TanStack Router\n * - `createNextJSAdapters` - For Next.js applications\n * - `createVueRouterAdapters` - For Vue Router applications\n * - `createReactRouterAdapters` - For React Router applications\n * \n * Benefits:\n * - Reduces boilerplate code\n * - Provides sensible defaults\n * - Type-safe configuration\n * - Framework-specific optimizations\n * \n * @module @vowel.to/client/adapters\n * @author vowel.to\n * @license Proprietary\n */\n\nimport type { NavigationAdapter, AutomationAdapter, VowelRoute } from '../types';\nimport { DirectNavigationAdapter } from './navigation/direct-navigation-adapter';\nimport { ControlledNavigationAdapter } from './navigation/controlled-navigation-adapter';\nimport { TanStackNavigationAdapter } from './navigation/tanstack-navigation-adapter';\nimport { ReactRouterNavigationAdapter } from './navigation/react-router-navigation-adapter';\nimport type { ReactRouterLocation, ReactRouterNavigateFunction } from './navigation/react-router-navigation-adapter';\nimport { DirectAutomationAdapter } from './automation/direct-automation-adapter';\nimport { ControlledAutomationAdapter } from './automation/controlled-automation-adapter';\nimport type { Router } from '@tanstack/react-router';\n\n/**\n * Options for creating direct adapters (SPAs)\n */\nexport interface DirectAdaptersOptions {\n  /**\n   * Navigation function for your router\n   * @example\n   * ```ts\n   * // Next.js\n   * navigate: (path) => router.push(path)\n   * \n   * // Vue Router\n   * navigate: (path) => router.push(path)\n   * \n   * // React Router\n   * navigate: (path) => navigate(path)\n   * ```\n   */\n  navigate: (path: string) => void | Promise<void>;\n\n  /**\n   * Optional: Function to get current path\n   * Defaults to window.location.pathname\n   */\n  getCurrentPath?: () => string;\n\n  /**\n   * Optional: Array of routes\n   */\n  routes?: VowelRoute[];\n\n  /**\n   * Enable automation (default: true)\n   * Set to false to disable page interaction\n   */\n  enableAutomation?: boolean;\n}\n\n/**\n * Create direct adapters for SPAs\n * \n * Perfect for React, Vue, Next.js, Svelte, and other SPA frameworks.\n * \n * @param options - Configuration options\n * @returns Navigation and automation adapters\n * \n * @example\n * ```ts\n * import { createDirectAdapters } from '@vowel.to/client/adapters/helpers';\n * import { Vowel } from '@vowel.to/client';\n * import { useRouter } from 'next/navigation';\n * \n * const router = useRouter();\n * \n * const { navigationAdapter, automationAdapter } = createDirectAdapters({\n *   navigate: (path) => router.push(path),\n *   routes: [\n *     { path: '/', description: 'Home' },\n *     { path: '/about', description: 'About' }\n *   ],\n *   enableAutomation: true\n * });\n * \n * const vowel = new Vowel({\n *   appId: 'app-id',\n *   navigationAdapter,\n *   automationAdapter\n * });\n * ```\n */\nexport function createDirectAdapters(options: DirectAdaptersOptions): {\n  navigationAdapter: NavigationAdapter;\n  automationAdapter?: AutomationAdapter;\n} {\n  const navigationAdapter = new DirectNavigationAdapter({\n    navigate: options.navigate,\n    getCurrentPath: options.getCurrentPath,\n    routes: options.routes\n  });\n\n  const automationAdapter = options.enableAutomation !== false\n    ? new DirectAutomationAdapter()\n    : undefined;\n\n  return {\n    navigationAdapter,\n    automationAdapter\n  };\n}\n\n/**\n * Options for creating controlled adapters (traditional sites)\n */\nexport interface ControlledAdaptersOptions {\n  /**\n   * BroadcastChannel name for communication\n   * Default: 'vowel-control'\n   */\n  channelName?: string;\n\n  /**\n   * Optional: Array of routes\n   */\n  routes?: VowelRoute[];\n\n  /**\n   * Enable automation (default: true)\n   * Set to false to disable page interaction\n   */\n  enableAutomation?: boolean;\n}\n\n/**\n * Create controlled adapters for traditional sites\n * \n * Perfect for Shopify, WordPress, and other server-rendered platforms.\n * \n * @param options - Configuration options\n * @returns Navigation and automation adapters\n * \n * @example\n * ```ts\n * import { createControlledAdapters } from '@vowel.to/client/adapters/helpers';\n * import { Vowel } from '@vowel.to/client';\n * \n * const { navigationAdapter, automationAdapter } = createControlledAdapters({\n *   channelName: 'vowel-shopify',\n *   enableAutomation: true\n * });\n * \n * const vowel = new Vowel({\n *   appId: 'app-id',\n *   navigationAdapter,\n *   automationAdapter\n * });\n * ```\n */\nexport function createControlledAdapters(options: ControlledAdaptersOptions = {}): {\n  navigationAdapter: NavigationAdapter;\n  automationAdapter?: AutomationAdapter;\n} {\n  const channelName = options.channelName || 'vowel-control';\n\n  const navigationAdapter = new ControlledNavigationAdapter({\n    channelName,\n    routes: options.routes\n  });\n\n  const automationAdapter = options.enableAutomation !== false\n    ? new ControlledAutomationAdapter(channelName)\n    : undefined;\n\n  return {\n    navigationAdapter,\n    automationAdapter\n  };\n}\n\n/**\n * Options for creating TanStack adapters\n */\nexport interface TanStackAdaptersOptions {\n  /**\n   * TanStack Router instance\n   */\n  router: Router<any, any>;\n\n  /**\n   * Enable automation (default: true)\n   * Set to false to disable page interaction\n   */\n  enableAutomation?: boolean;\n}\n\n/**\n * Create TanStack adapters\n * \n * Specialized adapters for TanStack Router with automatic route extraction.\n * \n * @param options - Configuration options\n * @returns Navigation and automation adapters\n * \n * @example\n * ```ts\n * import { createTanStackAdapters } from '@vowel.to/client/adapters/helpers';\n * import { Vowel } from '@vowel.to/client';\n * import { useRouter } from '@tanstack/react-router';\n * \n * const router = useRouter();\n * \n * const { navigationAdapter, automationAdapter } = createTanStackAdapters({\n *   router,\n *   enableAutomation: true\n * });\n * \n * const vowel = new Vowel({\n *   appId: 'app-id',\n *   navigationAdapter,\n *   automationAdapter\n * });\n * ```\n */\nexport function createTanStackAdapters(options: TanStackAdaptersOptions): {\n  navigationAdapter: NavigationAdapter;\n  automationAdapter?: AutomationAdapter;\n} {\n  const navigationAdapter = new TanStackNavigationAdapter(options.router);\n\n  const automationAdapter = options.enableAutomation !== false\n    ? new DirectAutomationAdapter()\n    : undefined;\n\n  return {\n    navigationAdapter,\n    automationAdapter\n  };\n}\n\n/**\n * Quick setup for Next.js\n * \n * @example\n * ```ts\n * import { createNextJSAdapters } from '@vowel.to/client/adapters/helpers';\n * import { useRouter } from 'next/navigation';\n * \n * const router = useRouter();\n * const adapters = createNextJSAdapters(router, {\n *   routes: [{ path: '/', description: 'Home' }]\n * });\n * ```\n */\nexport function createNextJSAdapters(\n  router: { push: (path: string) => void },\n  options?: { routes?: VowelRoute[]; enableAutomation?: boolean }\n): {\n  navigationAdapter: NavigationAdapter;\n  automationAdapter?: AutomationAdapter;\n} {\n  return createDirectAdapters({\n    navigate: (path) => router.push(path),\n    routes: options?.routes,\n    enableAutomation: options?.enableAutomation\n  });\n}\n\n/**\n * Quick setup for Vue Router\n * \n * @example\n * ```ts\n * import { createVueRouterAdapters } from '@vowel.to/client/adapters/helpers';\n * import { useRouter } from 'vue-router';\n * \n * const router = useRouter();\n * const adapters = createVueRouterAdapters(router, {\n *   routes: [{ path: '/', description: 'Home' }]\n * });\n * ```\n */\nexport function createVueRouterAdapters(\n  router: { push: (path: string) => void; currentRoute: { value: { path: string } } },\n  options?: { routes?: VowelRoute[]; enableAutomation?: boolean }\n): {\n  navigationAdapter: NavigationAdapter;\n  automationAdapter?: AutomationAdapter;\n} {\n  return createDirectAdapters({\n    navigate: (path) => router.push(path),\n    getCurrentPath: () => router.currentRoute.value.path,\n    routes: options?.routes,\n    enableAutomation: options?.enableAutomation\n  });\n}\n\n/**\n * Options for creating React Router adapters\n */\nexport interface ReactRouterAdaptersOptions {\n  /**\n   * Navigate function from useNavigate() hook\n   */\n  navigate: ReactRouterNavigateFunction;\n\n  /**\n   * Location object from useLocation() hook\n   */\n  location: ReactRouterLocation;\n\n  /**\n   * Optional: Array of routes\n   */\n  routes?: VowelRoute[];\n\n  /**\n   * Enable automation (default: true)\n   * Set to false to disable page interaction\n   */\n  enableAutomation?: boolean;\n\n  /**\n   * Optional: Whether to use replace instead of push for navigation\n   * Default: false\n   */\n  useReplace?: boolean;\n}\n\n/**\n * Create React Router adapters\n * \n * Specialized adapters for React Router with proper location tracking.\n * \n * @param options - Configuration options\n * @returns Navigation and automation adapters\n * \n * @example\n * ```ts\n * import { createReactRouterAdapters } from '@vowel.to/client/adapters/helpers';\n * import { Vowel } from '@vowel.to/client';\n * import { useNavigate, useLocation } from 'react-router-dom';\n * \n * const navigate = useNavigate();\n * const location = useLocation();\n * \n * const { navigationAdapter, automationAdapter } = createReactRouterAdapters({\n *   navigate,\n *   location,\n *   routes: [\n *     { path: '/', description: 'Home' },\n *     { path: '/about', description: 'About' }\n *   ],\n *   enableAutomation: true\n * });\n * \n * const vowel = new Vowel({\n *   appId: 'app-id',\n *   navigationAdapter,\n *   automationAdapter\n * });\n * ```\n */\nexport function createReactRouterAdapters(options: ReactRouterAdaptersOptions): {\n  navigationAdapter: NavigationAdapter;\n  automationAdapter?: AutomationAdapter;\n} {\n  const navigationAdapter = new ReactRouterNavigationAdapter({\n    navigate: options.navigate,\n    location: options.location,\n    routes: options.routes,\n    useReplace: options.useReplace\n  });\n\n  const automationAdapter = options.enableAutomation !== false\n    ? new DirectAutomationAdapter()\n    : undefined;\n\n  return {\n    navigationAdapter,\n    automationAdapter\n  };\n}\n\n"],"names":["DirectNavigationAdapter","DirectAutomationAdapter","ControlledNavigationAdapter","ControlledAutomationAdapter"],"mappings":";;;;;;;;;;;;AAwBA,SAAS,gCAAgC,MAAA,EAAwC;AAC/E,EAAA,IAAI;AAMF,IAAA,IAAS,cAAA,GAAT,SAAwB,KAAA,EAAY,UAAA,GAAa,EAAA,EAAU;AACzD,MAAA,IAAI,CAAC,KAAA,EAAO;AAEZ,MAAA,MAAM,QAAA,GAAW,UAAA,IAAc,KAAA,CAAM,IAAA,IAAQ,EAAA,CAAA;AAG7C,MAAA,IAAI,KAAA,CAAM,IAAA,IAAQ,KAAA,CAAM,IAAA,KAAS,GAAA,EAAK;AACpC,QAAA,MAAM,SAAA,GAAwB;AAAA,UAC5B,IAAA,EAAM,QAAA;AAAA,UACN,WAAA,EAAa,KAAA,CAAM,OAAA,EAAS,IAAA,EAAM,WAAA,IACtB,MAAM,OAAA,EAAS,IAAA,EAAM,KAAA,IACrB,CAAA,OAAA,EAAU,QAAQ,CAAA;AAAA,SAChC;AAGA,QAAA,MAAM,YAAA,GAAe,QAAA,CAAS,KAAA,CAAM,YAAY,CAAA;AAChD,QAAA,IAAI,YAAA,EAAc;AAChB,UAAA,SAAA,CAAU,cAAc,YAAA,CAAa,GAAA,CAAI,WAAS,KAAA,CAAM,SAAA,CAAU,CAAC,CAAC,CAAA;AAAA,QACtE;AAEA,QAAA,MAAA,CAAO,KAAK,SAAS,CAAA;AAAA,MACvB;AAGA,MAAA,IAAI,MAAM,QAAA,EAAU;AAClB,QAAA,KAAA,CAAM,QAAA,CAAS,OAAA,CAAQ,CAAC,KAAA,KAAe;AACrC,UAAA,cAAA,CAAe,OAAO,QAAQ,CAAA;AAAA,QAChC,CAAC,CAAA;AAAA,MACH;AAAA,IACF,CAAA;AAlCA,IAAA,MAAM,SAAuB,EAAC;AAG9B,IAAA,MAAM,YAAY,MAAA,CAAO,SAAA;AAiCzB,IAAA,cAAA,CAAe,SAAS,CAAA;AAGxB,IAAA,IAAI,MAAA,CAAO,MAAM,OAAA,EAAS;AACxB,MAAA,MAAA,CAAO,KAAA,CAAM,OAAA,CAAQ,OAAA,CAAQ,CAAC,KAAA,KAAe;AAC3C,QAAA,MAAM,YAAY,KAAA,CAAM,QAAA;AACxB,QAAA,MAAM,UAAU,KAAA,CAAM,OAAA;AAGtB,QAAA,MAAM,WAAW,MAAA,CAAO,IAAA,CAAK,CAAA,CAAA,KAAK,CAAA,CAAE,SAAS,SAAS,CAAA;AACtD,QAAA,IAAI,CAAC,QAAA,IAAY,SAAA,IAAa,SAAA,KAAc,GAAA,EAAK;AAC/C,UAAA,MAAA,CAAO,IAAA,CAAK;AAAA,YACV,IAAA,EAAM,SAAA;AAAA,YACN,WAAA,EAAa,CAAA,eAAA,EAAkB,OAAA,IAAW,SAAS,CAAA,CAAA;AAAA,YACnD,aAAa,KAAA,CAAM,MAAA,GAAS,OAAO,IAAA,CAAK,KAAA,CAAM,MAAM,CAAA,GAAI,KAAA;AAAA,WACzD,CAAA;AAAA,QACH;AAAA,MACF,CAAC,CAAA;AAAA,IACH;AAEA,IAAA,OAAO,MAAA;AAAA,EACT,SAAS,KAAA,EAAO;AACd,IAAA,OAAA,CAAQ,IAAA,CAAK,kDAAkD,KAAK,CAAA;AACpE,IAAA,OAAO,EAAC;AAAA,EACV;AACF;AAUO,MAAM,yBAAA,CAAuD;AAAA,EAC1D,MAAA;AAAA,EAER,YAAY,MAAA,EAA0B;AACpC,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AACd,IAAA,OAAA,CAAQ,IAAI,iEAAiE,CAAA;AAAA,EAC/E;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,SAAS,IAAA,EAA6B;AAC1C,IAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,8CAAA,EAAiD,IAAI,CAAA,CAAE,CAAA;AAEnE,IAAA,IAAI;AAEF,MAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAI,IAAA,CAAK,MAAM,GAAG,CAAA;AAC9C,MAAA,MAAM,eAAuC,EAAC;AAE9C,MAAA,IAAI,WAAA,EAAa;AAGf,QAAA,MAAM,MAAA,GAAS,IAAI,eAAA,CAAgB,WAAW,CAAA;AAC9C,QAAA,MAAA,CAAO,OAAA,CAAQ,CAAC,KAAA,EAAO,GAAA,KAAQ;AAC7B,UAAA,YAAA,CAAa,GAAG,CAAA,GAAI,KAAA;AAAA,QACtB,CAAC,CAAA;AAAA,MACH;AAGA,MAAA,MAAM,IAAA,CAAK,OAAO,QAAA,CAAS;AAAA,QACzB,EAAA,EAAI,QAAA;AAAA,QACJ,QAAQ,MAAA,CAAO,IAAA,CAAK,YAAY,CAAA,CAAE,MAAA,GAAS,IAAI,YAAA,GAAe,KAAA;AAAA,OAC/D,CAAA;AACD,MAAA,OAAA,CAAQ,IAAI,CAAA,0BAAA,CAA4B,CAAA;AAAA,IAC1C,SAAS,KAAA,EAAO;AACd,MAAA,OAAA,CAAQ,KAAA,CAAM,2BAA2B,KAAK,CAAA;AAC9C,MAAA,MAAM,KAAA;AAAA,IACR;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,cAAA,GAAyB;AACvB,IAAA,OAAO,IAAA,CAAK,MAAA,CAAO,KAAA,CAAM,QAAA,CAAS,QAAA;AAAA,EACpC;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,SAAA,GAAmC;AACvC,IAAA,MAAM,MAAA,GAAS,+BAAA,CAAgC,IAAA,CAAK,MAAM,CAAA;AAC1D,IAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,yCAAA,EAA4C,MAAA,CAAO,MAAM,CAAA,mBAAA,CAAqB,CAAA;AAC1F,IAAA,OAAO,MAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,UAAA,GAAkB;AAChB,IAAA,MAAM,MAAA,GAAS,+BAAA,CAAgC,IAAA,CAAK,MAAM,CAAA;AAE1D,IAAA,OAAO;AAAA,MACL,QAAA,EAAU,IAAA,CAAK,MAAA,CAAO,KAAA,CAAM,QAAA;AAAA,MAC5B,OAAA,EAAS,IAAA,CAAK,MAAA,CAAO,KAAA,CAAM,OAAA;AAAA,MAC3B,MAAA;AAAA,MACA,SAAA,EAAW,KAAK,MAAA,CAAO;AAAA,KACzB;AAAA,EACF;AACF;AA4BO,SAAS,yBAAA,CACd,UACA,QAAA,EACmB;AACnB,EAAA,OAAO;AAAA,IACL,QAAA,EAAU,OAAO,IAAA,KAAiB;AAChC,MAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,wCAAA,EAA2C,IAAI,CAAA,CAAE,CAAA;AAC7D,MAAA,MAAM,QAAA,CAAS,EAAE,EAAA,EAAI,IAAA,EAAM,CAAA;AAAA,IAC7B,CAAA;AAAA,IAEA,gBAAgB,MAAM;AACpB,MAAA,OAAO,QAAA;AAAA,IACT,CAAA;AAAA,IAEA,WAAW,YAAY;AAGrB,MAAA,OAAO,EAAC;AAAA,IACV;AAAA,GACF;AACF;;ACnIO,MAAM,4BAAA,CAA0D;AAAA,EAC7D,gBAAA;AAAA,EACA,QAAA;AAAA,EACA,MAAA;AAAA,EACA,UAAA;AAAA,EAER,YAAY,OAAA,EAA8C;AACxD,IAAA,IAAA,CAAK,mBAAmB,OAAA,CAAQ,QAAA;AAChC,IAAA,IAAA,CAAK,WAAW,OAAA,CAAQ,QAAA;AACxB,IAAA,IAAA,CAAK,SAAS,OAAA,CAAQ,MAAA;AACtB,IAAA,IAAA,CAAK,UAAA,GAAa,QAAQ,UAAA,IAAc,KAAA;AAExC,IAAA,OAAA,CAAQ,IAAI,iEAAiE,CAAA;AAC7E,IAAA,IAAI,KAAK,MAAA,EAAQ;AACf,MAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,eAAA,EAAkB,IAAA,CAAK,MAAA,CAAO,MAAM,CAAA,OAAA,CAAS,CAAA;AAAA,IAC3D,CAAA,MAAO;AACL,MAAA,OAAA,CAAQ,IAAI,6EAA6E,CAAA;AAAA,IAC3F;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,SAAS,IAAA,EAA6B;AAC1C,IAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,iDAAA,EAAoD,IAAI,CAAA,CAAE,CAAA;AAEtE,IAAA,IAAI;AACF,MAAA,IAAA,CAAK,iBAAiB,IAAA,EAAM;AAAA,QAC1B,SAAS,IAAA,CAAK;AAAA,OACf,CAAA;AACD,MAAA,OAAA,CAAQ,IAAI,CAAA,0BAAA,CAA4B,CAAA;AAAA,IAC1C,SAAS,KAAA,EAAO;AACd,MAAA,OAAA,CAAQ,KAAA,CAAM,2BAA2B,KAAK,CAAA;AAC9C,MAAA,MAAM,KAAA;AAAA,IACR;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,cAAA,GAAyB;AACvB,IAAA,OAAO,KAAK,QAAA,CAAS,QAAA;AAAA,EACvB;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,SAAA,GAAmC;AACvC,IAAA,IAAI,KAAK,MAAA,EAAQ;AACf,MAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,4CAAA,EAA+C,IAAA,CAAK,MAAA,CAAO,MAAM,CAAA,kBAAA,CAAoB,CAAA;AACjG,MAAA,OAAO,IAAA,CAAK,MAAA;AAAA,IACd;AAEA,IAAA,OAAA,CAAQ,IAAI,wDAAwD,CAAA;AACpE,IAAA,OAAO,EAAC;AAAA,EACV;AAAA;AAAA;AAAA;AAAA,EAKA,UAAA,GAAkB;AAChB,IAAA,OAAO;AAAA,MACL,UAAU,IAAA,CAAK,QAAA;AAAA,MACf,MAAA,EAAQ,IAAA,CAAK,MAAA,IAAU,EAAC;AAAA,MACxB,QAAA,EAAU,KAAK,QAAA,CAAS,QAAA;AAAA,MACxB,MAAA,EAAQ,KAAK,QAAA,CAAS,MAAA;AAAA,MACtB,IAAA,EAAM,KAAK,QAAA,CAAS,IAAA;AAAA,MACpB,KAAA,EAAO,KAAK,QAAA,CAAS;AAAA,KACvB;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,eAAe,QAAA,EAAqC;AAClD,IAAA,IAAA,CAAK,QAAA,GAAW,QAAA;AAAA,EAClB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,aAAa,MAAA,EAA4B;AACvC,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AACd,IAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,kDAAA,EAAqD,MAAA,CAAO,MAAM,CAAA,OAAA,CAAS,CAAA;AAAA,EACzF;AACF;AAiCO,SAAS,wBAAA,CACd,QAAA,EACA,QAAA,EACA,MAAA,EACmB;AACnB,EAAA,OAAO,IAAI,4BAAA,CAA6B;AAAA,IACtC,QAAA;AAAA,IACA,QAAA;AAAA,IACA;AAAA,GACD,CAAA;AACH;AA4BO,SAAS,4BAAA,CACd,QAAA,EACA,QAAA,EACA,MAAA,EACmB;AACnB,EAAA,OAAO;AAAA,IACL,QAAA,EAAU,OAAO,IAAA,KAAiB;AAChC,MAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,2CAAA,EAA8C,IAAI,CAAA,CAAE,CAAA;AAChE,MAAA,QAAA,CAAS,IAAI,CAAA;AAAA,IACf,CAAA;AAAA,IAEA,gBAAgB,MAAM;AACpB,MAAA,OAAO,QAAA;AAAA,IACT,CAAA;AAAA,IAEA,WAAW,YAAY;AACrB,MAAA,OAAO,UAAU,EAAC;AAAA,IACpB;AAAA,GACF;AACF;;AC/JO,SAAS,qBAAqB,OAAA,EAGnC;AACA,EAAA,MAAM,iBAAA,GAAoB,IAAIA,+CAAA,CAAwB;AAAA,IACpD,UAAU,OAAA,CAAQ,QAAA;AAAA,IAClB,gBAAgB,OAAA,CAAQ,cAAA;AAAA,IACxB,QAAQ,OAAA,CAAQ;AAAA,GACjB,CAAA;AAED,EAAA,MAAM,oBAAoB,OAAA,CAAQ,gBAAA,KAAqB,KAAA,GACnD,IAAIC,iDAAwB,GAC5B,MAAA;AAEJ,EAAA,OAAO;AAAA,IACL,iBAAA;AAAA,IACA;AAAA,GACF;AACF;AAiDO,SAAS,wBAAA,CAAyB,OAAA,GAAqC,EAAC,EAG7E;AACA,EAAA,MAAM,WAAA,GAAc,QAAQ,WAAA,IAAe,eAAA;AAE3C,EAAA,MAAM,iBAAA,GAAoB,IAAIC,uDAAA,CAA4B;AAAA,IACxD,WAAA;AAAA,IACA,QAAQ,OAAA,CAAQ;AAAA,GACjB,CAAA;AAED,EAAA,MAAM,oBAAoB,OAAA,CAAQ,gBAAA,KAAqB,QACnD,IAAIC,uDAAA,CAA4B,WAAW,CAAA,GAC3C,MAAA;AAEJ,EAAA,OAAO;AAAA,IACL,iBAAA;AAAA,IACA;AAAA,GACF;AACF;AA8CO,SAAS,uBAAuB,OAAA,EAGrC;AACA,EAAA,MAAM,iBAAA,GAAoB,IAAI,yBAAA,CAA0B,OAAA,CAAQ,MAAM,CAAA;AAEtE,EAAA,MAAM,oBAAoB,OAAA,CAAQ,gBAAA,KAAqB,KAAA,GACnD,IAAIF,iDAAwB,GAC5B,MAAA;AAEJ,EAAA,OAAO;AAAA,IACL,iBAAA;AAAA,IACA;AAAA,GACF;AACF;AAgBO,SAAS,oBAAA,CACd,QACA,OAAA,EAIA;AACA,EAAA,OAAO,oBAAA,CAAqB;AAAA,IAC1B,QAAA,EAAU,CAAC,IAAA,KAAS,MAAA,CAAO,KAAK,IAAI,CAAA;AAAA,IACpC,QAAQ,OAAA,EAAS,MAAA;AAAA,IACjB,kBAAkB,OAAA,EAAS;AAAA,GAC5B,CAAA;AACH;AAgBO,SAAS,uBAAA,CACd,QACA,OAAA,EAIA;AACA,EAAA,OAAO,oBAAA,CAAqB;AAAA,IAC1B,QAAA,EAAU,CAAC,IAAA,KAAS,MAAA,CAAO,KAAK,IAAI,CAAA;AAAA,IACpC,cAAA,EAAgB,MAAM,MAAA,CAAO,YAAA,CAAa,KAAA,CAAM,IAAA;AAAA,IAChD,QAAQ,OAAA,EAAS,MAAA;AAAA,IACjB,kBAAkB,OAAA,EAAS;AAAA,GAC5B,CAAA;AACH;AAoEO,SAAS,0BAA0B,OAAA,EAGxC;AACA,EAAA,MAAM,iBAAA,GAAoB,IAAI,4BAAA,CAA6B;AAAA,IACzD,UAAU,OAAA,CAAQ,QAAA;AAAA,IAClB,UAAU,OAAA,CAAQ,QAAA;AAAA,IAClB,QAAQ,OAAA,CAAQ,MAAA;AAAA,IAChB,YAAY,OAAA,CAAQ;AAAA,GACrB,CAAA;AAED,EAAA,MAAM,oBAAoB,OAAA,CAAQ,gBAAA,KAAqB,KAAA,GACnD,IAAIA,iDAAwB,GAC5B,MAAA;AAEJ,EAAA,OAAO;AAAA,IACL,iBAAA;AAAA,IACA;AAAA,GACF;AACF;;;;;;;;;;;;;;;;;;;;;;;;"}