{"version":3,"file":"router.d.ts","sources":["../../types/plugins/Router.d.ts"],"sourcesContent":["/**\n * Interface for router plugins.\n */\nexport type RouterPlugin = {\n    /**\n     *           Unique plugin identifier.\n     */\n    name: string;\n    /**\n     * Plugin version (recommended to match router version).\n     */\n    version?: string | undefined;\n    /**\n     *           Installation function.\n     */\n    install: (router: Router, options?: Record<string, unknown>) => void;\n    /**\n     * Cleanup function called on router.destroy().\n     */\n    destroy?: ((router: Router) => void | Promise<void>) | undefined;\n};\nexport namespace RouterPlugin {\n    let name: string;\n    let version: string;\n    let description: string;\n    /**\n     * Installs the RouterPlugin into an Eleva instance.\n     *\n     * @public\n     * @param {Eleva} eleva - The Eleva instance.\n     * @param {RouterOptions} options - Router configuration options.\n     * @param {string} options.mount - A CSS selector for the main element where the app is mounted.\n     * @param {RouteDefinition[]} options.routes - An array of route definitions.\n     * @param {'hash' | 'query' | 'history'} [options.mode='hash'] - The routing mode.\n     * @param {string} [options.queryParam='view'] - The query parameter to use in 'query' mode.\n     * @param {string} [options.viewSelector='view'] - Base selector for the view element (matched as #id, .class, [data-*], or raw selector).\n     * @param {boolean} [options.autoStart=true] - Whether to start the router automatically.\n     * @param {NavigationGuard} [options.onBeforeEach] - A global guard executed before every navigation.\n     * @param {RouteComponent} [options.globalLayout] - A global layout for all routes.\n     * @returns {Router} The created router instance.\n     * @throws {Error} If 'mount' option is not provided.\n     * @throws {Error} If 'routes' option is not an array.\n     * @throws {Error} If component registration fails during route processing.\n     * @description\n     * Registers route/layout components, sets `eleva.router`, and adds helpers\n     * (`eleva.navigate`, `eleva.getCurrentRoute`, `eleva.getRouteParams`, `eleva.getRouteQuery`).\n     * When `autoStart` is enabled, startup is scheduled via microtask.\n     *\n     * @example\n     * // main.js\n     * import Eleva from 'eleva';\n     * import { RouterPlugin } from './plugins/RouterPlugin.js';\n     *\n     * const app = new Eleva('myApp');\n     *\n     * const HomePage = { template: () => `<h1>Home</h1>` };\n     * const AboutPage = { template: () => `<h1>About Us</h1>` };\n     *\n     * app.use(RouterPlugin, {\n     *  mount: '#app',\n     *  routes: [\n     *    { path: '/', component: HomePage },\n     *    { path: '/about', component: AboutPage }\n     *  ]\n     * });\n     */\n    function install(eleva: Eleva, options?: RouterOptions): Router;\n    /**\n     * Uninstalls the plugin from the Eleva instance.\n     *\n     * @public\n     * @async\n     * @param {Eleva} eleva - The Eleva instance.\n     * @returns {Promise<void>}\n     * @description\n     * Destroys the router instance, removes `eleva.router`, and deletes helper methods\n     * (`eleva.navigate`, `eleva.getCurrentRoute`, `eleva.getRouteParams`, `eleva.getRouteQuery`).\n     */\n    function uninstall(eleva: Eleva): Promise<void>;\n}\nexport { RouterPlugin as Router };\n/**\n * Type imports from the Eleva core library.\n */\nexport type Eleva = import(\"eleva\").Eleva;\n/**\n * Type imports from the Eleva core library.\n */\nexport type ComponentDefinition = import(\"eleva\").ComponentDefinition;\n/**\n * Type imports from the Eleva core library.\n */\nexport type Emitter = import(\"eleva\").Emitter;\n/**\n * Type imports from the Eleva core library.\n */\nexport type MountResult = import(\"eleva\").MountResult;\n/**\n * Type imports from the Eleva core library.\n */\nexport type UnsubscribeFunction = import(\"eleva\").UnsubscribeFunction;\n/**\n * Generic type import.\n */\nexport type Signal<T> = import(\"eleva\").Signal<T>;\n/**\n * The routing mode determines how the router manages URL state.\n * - `hash`: Uses URL hash (e.g., `/#/path`) - works without server config\n * - `history`: Uses HTML5 History API (e.g., `/path`) - requires server config\n * - `query`: Uses query parameters (e.g., `?view=/path`) - useful for embedded apps\n */\nexport type RouterMode = \"hash\" | \"history\" | \"query\";\n/**\n * Route parameters extracted from the URL path.\n */\nexport type RouteParams = Record<string, string>;\n/**\n * Query parameters from the URL query string.\n */\nexport type QueryParams = Record<string, string>;\n/**\n * Navigation input parameters supporting multiple value types.\n */\nexport type NavigationParams = Record<string, string | number | boolean>;\n/**\n * Function signature for programmatic navigation.\n */\nexport type NavigateFunction = (location: string | NavigationTarget, params?: NavigationParams) => Promise<boolean>;\n/**\n * Router configuration options.\n */\nexport type RouterOptions = {\n    /**\n     * The routing mode to use.\n     */\n    mode?: RouterMode | undefined;\n    /**\n     * Query parameter name for 'query' mode.\n     */\n    queryParam?: string | undefined;\n    /**\n     * Base selector for the view element.\n     */\n    viewSelector?: string | undefined;\n    /**\n     *           CSS selector for the mount point element.\n     */\n    mount: string;\n    /**\n     *           Array of route definitions.\n     */\n    routes: RouteDefinition[];\n    /**\n     * Default layout for all routes.\n     */\n    globalLayout?: RouteComponent | undefined;\n    /**\n     * Global navigation guard.\n     */\n    onBeforeEach?: NavigationGuard | undefined;\n    /**\n     * Whether to start the router automatically.\n     */\n    autoStart?: boolean | undefined;\n};\n/**\n * Object describing a navigation target for `router.navigate()`.\n */\nexport type NavigationTarget = {\n    /**\n     *           The target path (can include params like '/users/:id').\n     */\n    path: string;\n    /**\n     * Route parameters to inject.\n     */\n    params?: NavigationParams | undefined;\n    /**\n     * Query parameters to append.\n     */\n    query?: NavigationParams | undefined;\n    /**\n     * Whether to replace current history entry.\n     */\n    replace?: boolean | undefined;\n    /**\n     * History state to pass.\n     */\n    state?: unknown;\n};\n/**\n * Saved scroll position.\n */\nexport type ScrollPosition = {\n    /**\n     *           Horizontal scroll position.\n     */\n    x: number;\n    /**\n     *           Vertical scroll position.\n     */\n    y: number;\n};\n/**\n * Internal representation of a parsed route path segment.\n */\nexport type RouteSegment = {\n    /**\n     *           The segment type.\n     */\n    type: \"static\" | \"param\";\n    /**\n     * The segment value (static segments).\n     */\n    value?: string | undefined;\n    /**\n     * The parameter name (param segments).\n     */\n    name?: string | undefined;\n};\n/**\n * Result of matching a path against route definitions.\n */\nexport type RouteMatch = {\n    /**\n     *           The matched route definition.\n     */\n    route: RouteDefinition;\n    /**\n     *           The extracted route parameters.\n     */\n    params: RouteParams;\n};\n/**\n * Arbitrary metadata attached to routes for use in guards and components.\n */\nexport type RouteMeta = Record<string, unknown>;\n/**\n * Interface for the router's error handling system.\n */\nexport type RouterErrorHandler = {\n    /**\n     *           Throws a formatted error.\n     */\n    handle: (error: Error, context: string, details?: Record<string, unknown>) => void;\n    /**\n     *           Logs a warning.\n     */\n    warn: (message: string, details?: Record<string, unknown>) => void;\n    /**\n     *           Logs an error without throwing.\n     */\n    log: (message: string, error: Error, details?: Record<string, unknown>) => void;\n};\n/**\n * Callback for `router:beforeEach` event.\n */\nexport type NavigationContextCallback = (context: NavigationContext) => void | Promise<void>;\n/**\n * Callback for `router:beforeResolve` and `router:afterResolve` events.\n */\nexport type ResolveContextCallback = (context: ResolveContext) => void | Promise<void>;\n/**\n * Callback for `router:beforeRender` and `router:afterRender` events.\n */\nexport type RenderContextCallback = (context: RenderContext) => void | Promise<void>;\n/**\n * Callback for `router:scroll` event.\n */\nexport type ScrollContextCallback = (context: ScrollContext) => void | Promise<void>;\n/**\n * Callback for `router:afterEnter`, `router:afterLeave`, `router:afterEach` events.\n */\nexport type RouteChangeCallback = (to: RouteLocation, from: RouteLocation | null) => void | Promise<void>;\n/**\n * Router context injected into component setup as `ctx.router`.\n */\nexport type RouterContext = {\n    /**\n     *           Programmatic navigation function.\n     */\n    navigate: NavigateFunction;\n    /**\n     *           Reactive signal for current route.\n     */\n    current: Signal<RouteLocation | null>;\n    /**\n     *           Reactive signal for previous route.\n     */\n    previous: Signal<RouteLocation | null>;\n    /**\n     *           Current route params (getter).\n     */\n    params: RouteParams;\n    /**\n     *           Current route query (getter).\n     */\n    query: QueryParams;\n    /**\n     *           Current route path (getter).\n     */\n    path: string;\n    /**\n     *           Current routed URL string (getter).\n     */\n    fullUrl: string;\n    /**\n     *           Current route meta (getter).\n     */\n    meta: RouteMeta;\n};\n/**\n * Callback for `router:error` event.\n */\nexport type RouterErrorCallback = (error: Error, to?: RouteLocation | undefined, from?: RouteLocation | null | undefined) => void | Promise<void>;\n/**\n * Callback for `router:ready` event.\n */\nexport type RouterReadyCallback = (router: Router) => void | Promise<void>;\n/**\n * Callback for `router:routeAdded` event.\n */\nexport type RouteAddedCallback = (route: RouteDefinition) => void | Promise<void>;\n/**\n * Callback for `router:routeRemoved` event.\n */\nexport type RouteRemovedCallback = (route: RouteDefinition) => void | Promise<void>;\n/**\n * Represents the current or target location in the router.\n */\nexport type RouteLocation = {\n    /**\n     *           The path of the route (e.g., '/users/123').\n     */\n    path: string;\n    /**\n     *           Query parameters as key-value pairs.\n     */\n    query: QueryParams;\n    /**\n     *           The routed URL string (path plus query).\n     */\n    fullUrl: string;\n    /**\n     *           Dynamic route parameters.\n     */\n    params: RouteParams;\n    /**\n     *           Metadata associated with the matched route.\n     */\n    meta: RouteMeta;\n    /**\n     * The optional name of the matched route.\n     */\n    name?: string | undefined;\n    /**\n     *           The raw route definition that was matched.\n     */\n    matched: RouteDefinition;\n};\n/**\n * Return value of a navigation guard.\n * - `true` or `undefined/void`: Allow navigation\n * - `false`: Abort navigation\n * - `string`: Redirect to path\n * - `NavigationTarget`: Redirect with options\n */\nexport type NavigationGuardResult = boolean | string | NavigationTarget | void;\n/**\n * Navigation guard function that controls navigation flow.\n */\nexport type NavigationGuard = (to: RouteLocation, from: RouteLocation | null) => NavigationGuardResult | Promise<NavigationGuardResult>;\n/**\n * Navigation hook for side effects. Does not affect navigation flow.\n */\nexport type NavigationHook = (to: RouteLocation, from: RouteLocation | null) => void | Promise<void>;\n/**\n * Context object for navigation events that plugins can modify.\n */\nexport type NavigationContext = {\n    /**\n     *           The target route location.\n     */\n    to: RouteLocation;\n    /**\n     *           The source route location.\n     */\n    from: RouteLocation | null;\n    /**\n     *           Whether navigation has been cancelled.\n     */\n    cancelled: boolean;\n    /**\n     *           Redirect target if set.\n     */\n    redirectTo: string | NavigationTarget | null;\n};\n/**\n * Context object for component resolution events.\n */\nexport type ResolveContext = {\n    /**\n     *           The target route location.\n     */\n    to: RouteLocation;\n    /**\n     *           The source route location.\n     */\n    from: RouteLocation | null;\n    /**\n     *           The matched route definition.\n     */\n    route: RouteDefinition;\n    /**\n     *           The resolved layout component (available in afterResolve).\n     */\n    layoutComponent: ComponentDefinition | null;\n    /**\n     *           The resolved page component (available in afterResolve).\n     */\n    pageComponent: ComponentDefinition | null;\n    /**\n     *           Whether navigation has been cancelled.\n     */\n    cancelled: boolean;\n    /**\n     *           Redirect target if set.\n     */\n    redirectTo: string | NavigationTarget | null;\n};\n/**\n * Context object for render events.\n */\nexport type RenderContext = {\n    /**\n     *           The target route location.\n     */\n    to: RouteLocation;\n    /**\n     *           The source route location.\n     */\n    from: RouteLocation | null;\n    /**\n     *           The layout component being rendered.\n     */\n    layoutComponent: ComponentDefinition | null;\n    /**\n     *           The page component being rendered.\n     */\n    pageComponent: ComponentDefinition;\n};\n/**\n * Context object for scroll events.\n */\nexport type ScrollContext = {\n    /**\n     *           The target route location.\n     */\n    to: RouteLocation;\n    /**\n     *           The source route location.\n     */\n    from: RouteLocation | null;\n    /**\n     *           Saved position (back/forward nav).\n     */\n    savedPosition: {\n        x: number;\n        y: number;\n    } | null;\n};\n/**\n * A component that can be rendered for a route.\n * - `string`: Name of a registered component\n * - `ComponentDefinition`: Inline component definition\n * - `() => ComponentDefinition`: Factory function returning a component\n * - `() => Promise<ComponentDefinition>`: Async factory function\n * - `() => Promise<{default: ComponentDefinition}>`: Lazy-loaded module (e.g., `() => import('./Page.js')`)\n */\nexport type RouteComponent = string | ComponentDefinition | (() => ComponentDefinition | Promise<ComponentDefinition | {\n    default: ComponentDefinition;\n}>);\n/**\n * Defines a route in the application.\n */\nexport type RouteDefinition = {\n    /**\n     *           URL path pattern. Supports:\n     *           - Static: '/about'\n     *           - Dynamic params: '/users/:id'\n     *           - Wildcard: '*' (catch-all, conventionally last)\n     */\n    path: string;\n    /**\n     *           The component to render for this route.\n     */\n    component: RouteComponent;\n    /**\n     * Optional layout component to wrap the route component.\n     */\n    layout?: RouteComponent | undefined;\n    /**\n     * Optional route name for programmatic navigation.\n     */\n    name?: string | undefined;\n    /**\n     * Optional metadata (auth flags, titles, etc.).\n     */\n    meta?: RouteMeta | undefined;\n    /**\n     * Route-specific guard before entering.\n     */\n    beforeEnter?: NavigationGuard | undefined;\n    /**\n     * Hook after entering and component is mounted.\n     */\n    afterEnter?: NavigationHook | undefined;\n    /**\n     * Guard before leaving this route.\n     */\n    beforeLeave?: NavigationGuard | undefined;\n    /**\n     * Hook after leaving and component is unmounted.\n     */\n    afterLeave?: NavigationHook | undefined;\n    /**\n     * Internal: parsed path segments (added by router).\n     */\n    segments?: RouteSegment[] | undefined;\n};\n/**\n * Represents the current or target location in the router.\n * @typedef {Object} RouteLocation\n * @property {string} path\n *           The path of the route (e.g., '/users/123').\n * @property {QueryParams} query\n *           Query parameters as key-value pairs.\n * @property {string} fullUrl\n *           The routed URL string (path plus query).\n * @property {RouteParams} params\n *           Dynamic route parameters.\n * @property {RouteMeta} meta\n *           Metadata associated with the matched route.\n * @property {string} [name]\n *           The optional name of the matched route.\n * @property {RouteDefinition} matched\n *           The raw route definition that was matched.\n * @description Represents the current or target location in the router.\n */\n/**\n * Return value of a navigation guard.\n * - `true` or `undefined/void`: Allow navigation\n * - `false`: Abort navigation\n * - `string`: Redirect to path\n * - `NavigationTarget`: Redirect with options\n * @typedef {boolean | string | NavigationTarget | void} NavigationGuardResult\n */\n/**\n * Navigation guard function that controls navigation flow.\n * @callback NavigationGuard\n * @param {RouteLocation} to\n *        The target route location.\n * @param {RouteLocation | null} from\n *        The source route location (null on initial).\n * @returns {NavigationGuardResult | Promise<NavigationGuardResult>}\n * @description A function that controls navigation flow. Runs before navigation is confirmed.\n * @example\n * // Simple auth guard\n * const authGuard = (to, from) => {\n *   if (to.meta.requiresAuth && !isLoggedIn()) {\n *     return '/login'; // Redirect\n *   }\n *   // Allow navigation (implicit return undefined)\n * };\n */\n/**\n * Navigation hook for side effects. Does not affect navigation flow.\n * @callback NavigationHook\n * @param {RouteLocation} to\n *        The target route location.\n * @param {RouteLocation | null} from\n *        The source route location.\n * @returns {void | Promise<void>}\n * @description A lifecycle hook for side effects. Does not affect navigation flow.\n * @example\n * // Analytics hook\n * const analyticsHook = (to, from) => {\n *   analytics.trackPageView(to.path);\n * };\n */\n/**\n * Interface for router plugins.\n * @typedef {Object} RouterPlugin\n * @property {string} name\n *           Unique plugin identifier.\n * @property {string} [version]\n *           Plugin version (recommended to match router version).\n * @property {(router: Router, options?: Record<string, unknown>) => void} install\n *           Installation function.\n * @property {(router: Router) => void | Promise<void>} [destroy]\n *           Cleanup function called on router.destroy().\n * @description Interface for router plugins. Plugins can extend router functionality.\n * @example\n * const AnalyticsPlugin = {\n *   name: 'analytics',\n *   version: '1.0.0',\n *   install(router, options) {\n *     router.emitter.on('router:afterEach', (to, from) => {\n *       analytics.track(to.path);\n *     });\n *   }\n * };\n */\n/**\n * Context object for navigation events that plugins can modify.\n * @typedef {Object} NavigationContext\n * @property {RouteLocation} to\n *           The target route location.\n * @property {RouteLocation | null} from\n *           The source route location.\n * @property {boolean} cancelled\n *           Whether navigation has been cancelled.\n * @property {string | NavigationTarget | null} redirectTo\n *           Redirect target if set.\n * @description Passed to navigation events. Plugins can modify to control navigation flow.\n */\n/**\n * Context object for component resolution events.\n * @typedef {Object} ResolveContext\n * @property {RouteLocation} to\n *           The target route location.\n * @property {RouteLocation | null} from\n *           The source route location.\n * @property {RouteDefinition} route\n *           The matched route definition.\n * @property {ComponentDefinition | null} layoutComponent\n *           The resolved layout component (available in afterResolve).\n * @property {ComponentDefinition | null} pageComponent\n *           The resolved page component (available in afterResolve).\n * @property {boolean} cancelled\n *           Whether navigation has been cancelled.\n * @property {string | NavigationTarget | null} redirectTo\n *           Redirect target if set.\n * @description Passed to component resolution events.\n */\n/**\n * Context object for render events.\n * @typedef {Object} RenderContext\n * @property {RouteLocation} to\n *           The target route location.\n * @property {RouteLocation | null} from\n *           The source route location.\n * @property {ComponentDefinition | null} layoutComponent\n *           The layout component being rendered.\n * @property {ComponentDefinition} pageComponent\n *           The page component being rendered.\n * @description Passed to render events.\n */\n/**\n * Context object for scroll events.\n * @typedef {Object} ScrollContext\n * @property {RouteLocation} to\n *           The target route location.\n * @property {RouteLocation | null} from\n *           The source route location.\n * @property {{x: number, y: number} | null} savedPosition\n *           Saved position (back/forward nav).\n * @description Passed to scroll events for plugins to handle scroll behavior.\n */\n/**\n * A component that can be rendered for a route.\n * - `string`: Name of a registered component\n * - `ComponentDefinition`: Inline component definition\n * - `() => ComponentDefinition`: Factory function returning a component\n * - `() => Promise<ComponentDefinition>`: Async factory function\n * - `() => Promise<{default: ComponentDefinition}>`: Lazy-loaded module (e.g., `() => import('./Page.js')`)\n * @typedef {string | ComponentDefinition | (() => ComponentDefinition | Promise<ComponentDefinition | {default: ComponentDefinition}>)} RouteComponent\n */\n/**\n * Defines a route in the application.\n * @typedef {Object} RouteDefinition\n * @property {string} path\n *           URL path pattern. Supports:\n *           - Static: '/about'\n *           - Dynamic params: '/users/:id'\n *           - Wildcard: '*' (catch-all, conventionally last)\n * @property {RouteComponent} component\n *           The component to render for this route.\n * @property {RouteComponent} [layout]\n *           Optional layout component to wrap the route component.\n * @property {string} [name]\n *           Optional route name for programmatic navigation.\n * @property {RouteMeta} [meta]\n *           Optional metadata (auth flags, titles, etc.).\n * @property {NavigationGuard} [beforeEnter]\n *           Route-specific guard before entering.\n * @property {NavigationHook} [afterEnter]\n *           Hook after entering and component is mounted.\n * @property {NavigationGuard} [beforeLeave]\n *           Guard before leaving this route.\n * @property {NavigationHook} [afterLeave]\n *           Hook after leaving and component is unmounted.\n * @property {RouteSegment[]} [segments]\n *           Internal: parsed path segments (added by router).\n * @description Defines a route in the application.\n * @note Nested routes are not supported. Use shared layouts with flat routes instead.\n * @example\n * // Static route\n * { path: '/about', component: AboutPage }\n *\n * // Dynamic route with params\n * { path: '/users/:id', component: UserPage, meta: { requiresAuth: true } }\n *\n * // Lazy-loaded route with layout\n * {\n *   path: '/dashboard',\n *   component: () => import('./Dashboard.js'),\n *   layout: DashboardLayout,\n *   beforeEnter: (to, from) => isLoggedIn() || '/login'\n * }\n *\n * // Catch-all 404 route (conventionally last)\n * { path: '*', component: NotFoundPage }\n */\n/**\n * @class 🛤️ Router\n * @classdesc A powerful, reactive, and flexible Router Plugin for Eleva.\n * This class manages all routing logic, including state, navigation, and rendering.\n *\n * ## Features\n * - Multiple routing modes (hash, history, query)\n * - Reactive route state via Signals\n * - Navigation guards and lifecycle hooks\n * - Lazy-loaded components\n * - Layout system\n * - Plugin architecture\n * - Scroll position management\n *\n * ## Events Reference\n * | Event | Callback Type | Can Block | Description |\n * |-------|--------------|-----------|-------------|\n * | `router:ready` | {@link RouterReadyCallback} | No | Router initialized |\n * | `router:beforeEach` | {@link NavigationContextCallback} | Yes | Before guards run |\n * | `router:beforeResolve` | {@link ResolveContextCallback} | Yes | Before component loading |\n * | `router:afterResolve` | {@link ResolveContextCallback} | No | After components loaded |\n * | `router:afterLeave` | {@link RouteChangeCallback} | No | After leaving route |\n * | `router:beforeRender` | {@link RenderContextCallback} | No | Before DOM update |\n * | `router:afterRender` | {@link RenderContextCallback} | No | After DOM update |\n * | `router:scroll` | {@link ScrollContextCallback} | No | For scroll behavior |\n * | `router:afterEnter` | {@link RouteChangeCallback} | No | After entering route |\n * | `router:afterEach` | {@link RouteChangeCallback} | No | Navigation complete |\n * | `router:error` | {@link RouterErrorCallback} | No | Navigation error |\n * | `router:routeAdded` | {@link RouteAddedCallback} | No | Dynamic route added |\n * | `router:routeRemoved` | {@link RouteRemovedCallback} | No | Dynamic route removed |\n *\n * ## Reactive Signals\n * - `currentRoute: Signal<RouteLocation | null>` - Current route info\n * - `previousRoute: Signal<RouteLocation | null>` - Previous route info\n * - `currentParams: Signal<RouteParams>` - Current route params\n * - `currentQuery: Signal<QueryParams>` - Current query params\n * - `currentLayout: Signal<MountResult | null>` - Mounted layout instance\n * - `currentView: Signal<MountResult | null>` - Mounted view instance\n * - `isReady: Signal<boolean>` - Router readiness state\n *\n * @note Internal API Access Policy:\n * As a core Eleva plugin, the Router may access internal Eleva APIs (prefixed with _)\n * such as `eleva._components`. This is intentional and these internal APIs are\n * considered stable for official plugins. Third-party plugins should avoid\n * accessing internal APIs as they may change without notice.\n *\n * @example\n * // Basic setup\n * const router = new Router(eleva, {\n *   mode: 'hash',\n *   mount: '#app',\n *   routes: [\n *     { path: '/', component: HomePage },\n *     { path: '/users/:id', component: UserPage },\n *     { path: '*', component: NotFoundPage }\n *   ]\n * });\n *\n * // Start router\n * await router.start();\n *\n * // Navigate programmatically\n * const success = await router.navigate('/users/123');\n *\n * // Watch for route changes\n * router.currentRoute.watch((route) => {\n *   document.title = route?.meta?.title || 'My App';\n * });\n *\n * @private\n */\ndeclare class Router {\n    /**\n     * Creates an instance of the Router.\n     * @param {Eleva} eleva - The Eleva framework instance.\n     * @param {RouterOptions} options - The configuration options for the router.\n     * @throws {Error} If the routing mode is invalid.\n     */\n    constructor(eleva: Eleva, options?: RouterOptions);\n    /** @type {Eleva} The Eleva framework instance. */\n    eleva: Eleva;\n    /** @type {RouterOptions} The merged router options. */\n    options: RouterOptions;\n    /** @private @type {RouteDefinition[]} The processed list of route definitions. */\n    private routes;\n    /** @private @type {Emitter} The shared Eleva event emitter for global hooks. */\n    private emitter;\n    /** @private @type {boolean} A flag indicating if the router has been started. */\n    private isStarted;\n    /** @private @type {boolean} A flag to prevent navigation loops from history events. */\n    private _isNavigating;\n    /** @private @type {number} Counter for tracking navigation operations to prevent race conditions. */\n    private _navigationId;\n    /** @private @type {UnsubscribeFunction[]} A collection of cleanup functions for event listeners. */\n    private eventListeners;\n    /** @type {Signal<RouteLocation | null>} A reactive signal holding the current route's information. */\n    currentRoute: Signal<RouteLocation | null>;\n    /** @type {Signal<RouteLocation | null>} A reactive signal holding the previous route's information. */\n    previousRoute: Signal<RouteLocation | null>;\n    /** @type {Signal<RouteParams>} A reactive signal holding the current route's parameters. */\n    currentParams: Signal<RouteParams>;\n    /** @type {Signal<QueryParams>} A reactive signal holding the current route's query parameters. */\n    currentQuery: Signal<QueryParams>;\n    /** @type {Signal<MountResult | null>} A reactive signal for the currently mounted layout instance. */\n    currentLayout: Signal<MountResult | null>;\n    /** @type {Signal<MountResult | null>} A reactive signal for the currently mounted view (page) instance. */\n    currentView: Signal<MountResult | null>;\n    /** @type {Signal<boolean>} A reactive signal indicating if the router is ready (started and initial navigation complete). */\n    isReady: Signal<boolean>;\n    /** @private @type {Map<string, RouterPlugin>} Map of registered plugins by name. */\n    private plugins;\n    /** @private @type {NavigationGuard[]} Array of global before-each navigation guards. */\n    private _beforeEachGuards;\n    /** @type {RouterErrorHandler} The error handler instance. Can be overridden by plugins. */\n    errorHandler: RouterErrorHandler;\n    /** @private @type {Map<string, {x: number, y: number}>} Saved scroll positions by route path. */\n    private _scrollPositions;\n    /**\n     * Validates the provided router options.\n     * @private\n     * @throws {Error} If the routing mode is invalid.\n     */\n    private _validateOptions;\n    /**\n     * Pre-processes route definitions to parse their path segments for efficient matching.\n     * @private\n     * @param {RouteDefinition[]} routes - The raw route definitions.\n     * @returns {RouteDefinition[]} The processed routes.\n     */\n    private _processRoutes;\n    /**\n     * Parses a route path string into an array of static and parameter segments.\n     * @private\n     * @param {string} path - The path pattern to parse.\n     * @returns {{type: 'static' | 'param', value?: string, name?: string}[]} An array of segment objects.\n     * @throws {Error} If the route path is not a valid string.\n     */\n    private _parsePathIntoSegments;\n    /**\n     * Finds the view element within a container using multiple selector strategies.\n     * @private\n     * @param {HTMLElement} container - The parent element to search within.\n     * @returns {HTMLElement} The found view element or the container itself as a fallback.\n     */\n    private _findViewElement;\n    /**\n     * Starts the router, initializes event listeners, and performs the initial navigation.\n     * @returns {Promise<Router>} The router instance for method chaining.\n     * @listens window:hashchange In hash mode, triggers route changes.\n     * @listens window:popstate In history/query mode, triggers route changes.\n     * @emits router:ready When initialization completes successfully.\n     * @see destroy - Stop the router and clean up listeners.\n     * @see navigate - Programmatically navigate to a route.\n     *\n     * @example\n     * // Basic usage\n     * await router.start();\n     *\n     * // Method chaining\n     * await router.start().then(r => r.navigate('/home'));\n     *\n     * // Reactive readiness\n     * router.isReady.watch((ready) => {\n     *   if (ready) console.log('Router is ready!');\n     * });\n     */\n    start(): Promise<Router>;\n    /**\n     * Stops the router and cleans up event listeners.\n     * Unmounts the current layout instance if present.\n     * @async\n     * @returns {Promise<void>}\n     * @see start - Restart the router after destroying.\n     */\n    destroy(): Promise<void>;\n    /**\n     * Alias for destroy(). Stops the router and cleans up all resources.\n     * Provided for semantic consistency (start/stop pattern).\n     * @async\n     * @returns {Promise<void>}\n     *\n     * @example\n     * await router.start();\n     * // ... later\n     * await router.stop();\n     */\n    stop(): Promise<void>;\n    /**\n     * Programmatically navigates to a new route.\n     * @async\n     * @param {string | NavigationTarget} location - The target location as a path string or navigation target object.\n     * @param {NavigationParams} [params] - Route parameters (only used when location is a string).\n     * @returns {Promise<boolean>} True if navigation succeeded, false if blocked by guards or failed.\n     * @emits router:error When navigation fails due to an exception.\n     * @see start - Initialize the router before navigating.\n     * @see currentRoute - Access the current route after navigation.\n     *\n     * @example\n     * // Basic navigation\n     * await router.navigate('/users/123');\n     *\n     * // Check if navigation succeeded\n     * const success = await router.navigate('/protected');\n     * if (!success) {\n     *   console.log('Navigation was blocked by a guard');\n     * }\n     *\n     * // Navigate with options\n     * await router.navigate({\n     *   path: '/users/:id',\n     *   params: { id: '123' },\n     *   query: { tab: 'profile' },\n     *   replace: true\n     * });\n     */\n    navigate(location: string | NavigationTarget, params?: NavigationParams): Promise<boolean>;\n    /**\n     * Builds a URL for query mode.\n     * @private\n     * @param {string} path - The path to set as the query parameter.\n     * @returns {string} The full URL with the updated query string.\n     */\n    private _buildQueryUrl;\n    /**\n     * Checks if the target route is identical to the current route.\n     * @private\n     * @param {string} path - The target path with query string.\n     * @param {object} params - The target params.\n     * @param {object} query - The target query.\n     * @returns {boolean} True if the routes are the same.\n     */\n    private _isSameRoute;\n    /**\n     * Injects dynamic parameters into a path string.\n     * Replaces `:param` placeholders with URL-encoded values from the params object.\n     *\n     * @private\n     * @param {string} path - The path pattern containing `:param` placeholders.\n     * @param {RouteParams} params - Key-value pairs to inject into the path.\n     * @returns {string} The path with all parameters replaced.\n     *\n     * @example\n     * this._buildPath('/users/:id/posts/:postId', { id: '123', postId: '456' });\n     * // Returns: '/users/123/posts/456'\n     */\n    private _buildPath;\n    /**\n     * The handler for browser-initiated route changes (e.g., back/forward buttons).\n     *\n     * @private\n     * @async\n     * @param {boolean} [isPopState=true] - Whether this is a popstate event (back/forward navigation).\n     * @returns {Promise<void>}\n     * @emits router:error When route change handling fails.\n     */\n    private _handleRouteChange;\n    /**\n     * Manages the core navigation lifecycle. Runs guards before committing changes.\n     *\n     * @private\n     * @async\n     * @param {string} fullPath - The full path (e.g., '/users/123?foo=bar') to navigate to.\n     * @param {boolean} [isPopState=false] - Whether this navigation was triggered by popstate (back/forward).\n     * @returns {Promise<boolean>} `true` if navigation succeeded, `false` if aborted.\n     * @emits router:error When no matching route is found (and no catch-all route exists),\n     * or when an error occurs during navigation.\n     * @emits router:beforeResolve Before component resolution (can block/redirect).\n     * @emits router:afterResolve After components are resolved.\n     * @emits router:afterLeave After leaving the previous route.\n     * @emits router:beforeRender Before DOM rendering.\n     * @emits router:afterRender After DOM rendering completes.\n     * @emits router:scroll After render, for scroll behavior handling.\n     * @emits router:afterEnter After entering the new route.\n     * @emits router:afterEach After navigation completes successfully.\n     * @see _runGuards - Guard execution.\n     * @see _resolveComponents - Component resolution.\n     * @see _render - DOM rendering.\n     */\n    private _proceedWithNavigation;\n    /**\n     * Executes all applicable navigation guards for a transition in order.\n     * Guards are executed in the following order:\n     * 1. Global beforeEach event (emitter-based, can block via context)\n     * 2. Global beforeEach guards (registered via onBeforeEach)\n     * 3. Route-specific beforeLeave guard (from the route being left)\n     * 4. Route-specific beforeEnter guard (from the route being entered)\n     *\n     * @private\n     * @param {RouteLocation} to - The target route location.\n     * @param {RouteLocation | null} from - The current route location (null on initial navigation).\n     * @param {RouteDefinition} route - The matched route definition.\n     * @returns {Promise<boolean>} `false` if navigation should be aborted.\n     * @emits router:beforeEach Before guards run (can block/redirect via context).\n     */\n    private _runGuards;\n    /**\n     * Resolves a string component definition to a component object.\n     * @private\n     * @param {string} def - The component name to resolve.\n     * @returns {ComponentDefinition} The resolved component.\n     * @throws {Error} If the component is not registered.\n     *\n     * @note Core plugins (Router, Attr, Store) may access eleva._components\n     * directly. This is intentional and stable for official Eleva plugins shipped\n     * with the framework. Third-party plugins should use eleva.component() for\n     * registration and avoid direct access to internal APIs.\n     */\n    private _resolveStringComponent;\n    /**\n     * Resolves a function component definition to a component object.\n     * @private\n     * @async\n     * @param {() => ComponentDefinition | Promise<ComponentDefinition | { default: ComponentDefinition }>} def - The function to resolve.\n     * @returns {Promise<ComponentDefinition>} The resolved component.\n     * @throws {Error} If the function fails to load the component.\n     */\n    private _resolveFunctionComponent;\n    /**\n     * Validates a component definition object.\n     * @private\n     * @param {unknown} def - The component definition to validate.\n     * @returns {ComponentDefinition} The validated component.\n     * @throws {Error} If the component definition is invalid.\n     */\n    private _validateComponentDefinition;\n    /**\n     * Resolves a component definition to a component object.\n     * @private\n     * @param {unknown} def - The component definition to resolve.\n     * @returns {Promise<ComponentDefinition | null>} The resolved component or null.\n     */\n    private _resolveComponent;\n    /**\n     * Asynchronously resolves the layout and page components for a route.\n     * @private\n     * @async\n     * @param {RouteDefinition} route - The route to resolve components for.\n     * @returns {Promise<{layoutComponent: ComponentDefinition | null, pageComponent: ComponentDefinition}>}\n     * @throws {Error} If page component cannot be resolved.\n     */\n    private _resolveComponents;\n    /**\n     * Renders the components for the current route into the DOM.\n     *\n     * Rendering algorithm:\n     * 1. Find the mount element using options.mount selector\n     * 2. If layoutComponent exists:\n     *    a. Mount layout to mount element\n     *    b. Find view element within layout (using viewSelector)\n     *    c. Mount page component to view element\n     * 3. If no layoutComponent:\n     *    a. Mount page component directly to mount element\n     *    b. Set currentLayout to null\n     *\n     * @private\n     * @async\n     * @param {ComponentDefinition | null} layoutComponent - The pre-loaded layout component.\n     * @param {ComponentDefinition} pageComponent - The pre-loaded page component.\n     * @returns {Promise<void>}\n     * @throws {Error} If mount element is not found in the DOM.\n     * @throws {Error} If component mounting fails (propagated from eleva.mount).\n     */\n    private _render;\n    /**\n     * Creates a getter function for router context properties.\n     * @private\n     * @param {string} property - The property name to access.\n     * @param {unknown} defaultValue - The default value if property is undefined.\n     * @returns {() => unknown} A getter function.\n     */\n    private _createRouteGetter;\n    /**\n     * Wraps a component definition to inject router-specific context into its setup function.\n     * @private\n     * @param {ComponentDefinition} component - The component to wrap.\n     * @returns {ComponentDefinition} The wrapped component definition.\n     */\n    private _wrapComponent;\n    /**\n     * Recursively wraps all child components to ensure they have access to router context.\n     * String component references are returned as-is (context injected during mount).\n     * Objects are wrapped with router context and their children are recursively wrapped.\n     *\n     * @private\n     * @param {ComponentDefinition | string} component - The component to wrap (can be a definition object or a registered component name).\n     * @returns {ComponentDefinition | string} The wrapped component definition or the original string reference.\n     * @see _wrapComponent - Single component wrapping.\n     */\n    private _wrapComponentWithChildren;\n    /**\n     * Gets the current location information from the browser's window object.\n     * @private\n     * @returns {Omit<RouteLocation, 'params' | 'meta' | 'name' | 'matched'>}\n     */\n    private _getCurrentLocation;\n    /**\n     * Parses a query string into a key-value object.\n     * Uses URLSearchParams for robust parsing of encoded values.\n     *\n     * @private\n     * @param {string} queryString - The query string to parse (without leading '?').\n     * @returns {QueryParams} Key-value pairs from the query string.\n     *\n     * @example\n     * this._parseQuery('foo=bar&baz=qux');\n     * // Returns: { foo: 'bar', baz: 'qux' }\n     */\n    private _parseQuery;\n    /**\n     * Matches a given path against the registered routes.\n     * @private\n     * @param {string} path - The path to match.\n     * @returns {{route: RouteDefinition, params: Object<string, string>} | null} The matched route and its params, or null.\n     */\n    private _matchRoute;\n    /**\n     * Adds a new route dynamically at runtime.\n     * The route will be processed and available for navigation immediately.\n     * Routes are inserted before the wildcard (*) route if one exists.\n     *\n     * @param {RouteDefinition} route - The route definition to add.\n     * @param {RouteDefinition} [parentRoute] - Optional parent route to add as a child (not yet implemented).\n     * @returns {() => void} A function to remove the added route (returns no-op if route was invalid).\n     * @emits router:routeAdded When a route is successfully added.\n     *\n     * @example\n     * // Add a route dynamically\n     * const removeRoute = router.addRoute({\n     *   path: '/dynamic',\n     *   component: DynamicPage,\n     *   meta: { title: 'Dynamic Page' }\n     * });\n     *\n     * // Later, remove the route\n     * removeRoute();\n     */\n    addRoute(route: RouteDefinition, parentRoute?: RouteDefinition): () => void;\n    /**\n     * Removes a route by its path.\n     *\n     * @param {string} path - The path of the route to remove.\n     * @returns {boolean} True if the route was removed, false if not found.\n     * @emits router:routeRemoved When a route is successfully removed.\n     *\n     * @example\n     * router.removeRoute('/dynamic');\n     */\n    removeRoute(path: string): boolean;\n    /**\n     * Checks if a route with the given path exists.\n     *\n     * @param {string} path - The path to check.\n     * @returns {boolean} True if the route exists.\n     *\n     * @example\n     * if (router.hasRoute('/users/:id')) {\n     *   console.log('User route exists');\n     * }\n     */\n    hasRoute(path: string): boolean;\n    /**\n     * Gets all registered routes.\n     *\n     * @returns {RouteDefinition[]} A copy of the routes array.\n     *\n     * @example\n     * const routes = router.getRoutes();\n     * console.log('Available routes:', routes.map(r => r.path));\n     */\n    getRoutes(): RouteDefinition[];\n    /**\n     * Gets a route by its path.\n     *\n     * @param {string} path - The path of the route to get.\n     * @returns {RouteDefinition | undefined} The route definition or undefined.\n     *\n     * @example\n     * const route = router.getRoute('/users/:id');\n     * if (route) {\n     *   console.log('Route meta:', route.meta);\n     * }\n     */\n    getRoute(path: string): RouteDefinition | undefined;\n    /**\n     * Registers a global pre-navigation guard.\n     * Multiple guards can be registered and will be executed in order.\n     * Guards can also be registered via the emitter using `router:beforeEach` event.\n     *\n     * @param {NavigationGuard} guard - The guard function to register.\n     * @returns {() => void} A function to unregister the guard.\n     *\n     * @example\n     * // Register a guard\n     * const unregister = router.onBeforeEach((to, from) => {\n     *   if (to.meta.requiresAuth && !isAuthenticated()) {\n     *     return '/login';\n     *   }\n     * });\n     *\n     * // Later, unregister the guard\n     * unregister();\n     */\n    onBeforeEach(guard: NavigationGuard): () => void;\n    /**\n     * Registers a global hook that runs after a new route component has been mounted.\n     * @param {NavigationHook} hook - The hook function to register.\n     * @returns {() => void} A function to unregister the hook.\n     * @listens router:afterEnter\n     */\n    onAfterEnter(hook: NavigationHook): () => void;\n    /**\n     * Registers a global hook that runs after a route component has been unmounted.\n     * @param {NavigationHook} hook - The hook function to register.\n     * @returns {() => void} A function to unregister the hook.\n     * @listens router:afterLeave\n     */\n    onAfterLeave(hook: NavigationHook): () => void;\n    /**\n     * Registers a global hook that runs after a navigation has been confirmed and all hooks have completed.\n     * @param {NavigationHook} hook - The hook function to register.\n     * @returns {() => void} A function to unregister the hook.\n     * @listens router:afterEach\n     */\n    onAfterEach(hook: NavigationHook): () => void;\n    /**\n     * Registers a global error handler for navigation errors.\n     * @param {(error: Error, to?: RouteLocation, from?: RouteLocation) => void} handler - The error handler function.\n     * @returns {() => void} A function to unregister the handler.\n     * @listens router:error\n     */\n    onError(handler: (error: Error, to?: RouteLocation, from?: RouteLocation) => void): () => void;\n    /**\n     * Registers a plugin with the router.\n     * Logs a warning if the plugin is already registered.\n     *\n     * @param {RouterPlugin} plugin - The plugin to register (must have install method).\n     * @param {Record<string, unknown>} [options={}] - Options to pass to plugin.install().\n     * @returns {void}\n     * @throws {Error} If plugin does not have an install method.\n     */\n    use(plugin: RouterPlugin, options?: Record<string, unknown>): void;\n    /**\n     * Gets all registered plugins.\n     * @returns {RouterPlugin[]} Array of registered plugins.\n     */\n    getPlugins(): RouterPlugin[];\n    /**\n     * Gets a plugin by name.\n     * @param {string} name - The plugin name.\n     * @returns {RouterPlugin | undefined} The plugin or undefined.\n     */\n    getPlugin(name: string): RouterPlugin | undefined;\n    /**\n     * Removes a plugin from the router.\n     * @param {string} name - The plugin name.\n     * @returns {boolean} True if the plugin was removed.\n     */\n    removePlugin(name: string): boolean;\n    /**\n     * Sets a custom error handler. Used by error handling plugins.\n     * Logs a warning if the provided handler is invalid (missing required methods).\n     * @param {RouterErrorHandler} errorHandler - The error handler object with handle, warn, and log methods.\n     * @returns {void}\n     */\n    setErrorHandler(errorHandler: RouterErrorHandler): void;\n}\n//# sourceMappingURL=Router.d.ts.map"],"names":[],"mappings":";;AAAA;AACA;AACA;AACO,KAAA,YAAA;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAA,MAAA,YAAA,MAAA;AACA;AACA;AACA;AACA,wBAAA,MAAA,YAAA,OAAA;AACA;AACO,kBAAA,YAAA;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAAA,KAAA,YAAA,aAAA,GAAA,MAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAAA,KAAA,GAAA,OAAA;AACA;;AAEA;AACA;AACA;AACO,KAAA,KAAA,GAAa,KAAe,CAAA,KAAA;AACnC;AACA;AACA;AACO,KAAA,mBAAA,GAA2B,KAAe,CAAA,mBAAA;AACjD;AACA;AACA;AACO,KAAA,OAAA,GAAe,KAAe,CAAA,OAAA;AACrC;AACA;AACA;AACO,KAAA,WAAA,GAAmB,KAAe,CAAA,WAAA;AACzC;AACA;AACA;AACO,KAAA,mBAAA,GAA2B,KAAe,CAAA,mBAAA;AACjD;AACA;AACA;AACO,KAAA,MAAA,MAAiB,KAAe,CAAA,MAAA;AACvC;AACA;AACA;AACA;AACA;AACA;AACO,KAAA,UAAA;AACP;AACA;AACA;AACO,KAAA,WAAA,GAAA,MAAA;AACP;AACA;AACA;AACO,KAAA,WAAA,GAAA,MAAA;AACP;AACA;AACA;AACO,KAAA,gBAAA,GAAA,MAAA;AACP;AACA;AACA;AACO,KAAA,gBAAA,uBAAA,gBAAA,WAAA,gBAAA,KAAA,OAAA;AACP;AACA;AACA;AACO,KAAA,aAAA;AACP;AACA;AACA;AACA,WAAA,UAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAA,eAAA;AACA;AACA;AACA;AACA,mBAAA,cAAA;AACA;AACA;AACA;AACA,mBAAA,eAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,KAAA,gBAAA;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAA,gBAAA;AACA;AACA;AACA;AACA,YAAA,gBAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,KAAA,cAAA;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,KAAA,YAAA;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,KAAA,UAAA;AACP;AACA;AACA;AACA,WAAA,eAAA;AACA;AACA;AACA;AACA,YAAA,WAAA;AACA;AACA;AACA;AACA;AACO,KAAA,SAAA,GAAA,MAAA;AACP;AACA;AACA;AACO,KAAA,kBAAA;AACP;AACA;AACA;AACA,oBAAA,KAAA,6BAAA,MAAA;AACA;AACA;AACA;AACA,sCAAA,MAAA;AACA;AACA;AACA;AACA,kCAAA,KAAA,YAAA,MAAA;AACA;AACA;AACA;AACA;AACO,KAAA,yBAAA,aAAA,iBAAA,YAAA,OAAA;AACP;AACA;AACA;AACO,KAAA,sBAAA,aAAA,cAAA,YAAA,OAAA;AACP;AACA;AACA;AACO,KAAA,qBAAA,aAAA,aAAA,YAAA,OAAA;AACP;AACA;AACA;AACO,KAAA,qBAAA,aAAA,aAAA,YAAA,OAAA;AACP;AACA;AACA;AACO,KAAA,mBAAA,QAAA,aAAA,QAAA,aAAA,mBAAA,OAAA;AACP;AACA;AACA;AACO,KAAA,aAAA;AACP;AACA;AACA;AACA,cAAA,gBAAA;AACA;AACA;AACA;AACA,aAAA,MAAA,CAAA,aAAA;AACA;AACA;AACA;AACA,cAAA,MAAA,CAAA,aAAA;AACA;AACA;AACA;AACA,YAAA,WAAA;AACA;AACA;AACA;AACA,WAAA,WAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAA,SAAA;AACA;AACA;AACA;AACA;AACO,KAAA,mBAAA,WAAA,KAAA,OAAA,aAAA,qBAAA,aAAA,+BAAA,OAAA;AACP;AACA;AACA;AACO,KAAA,mBAAA,YAAA,MAAA,YAAA,OAAA;AACP;AACA;AACA;AACO,KAAA,kBAAA,WAAA,eAAA,YAAA,OAAA;AACP;AACA;AACA;AACO,KAAA,oBAAA,WAAA,eAAA,YAAA,OAAA;AACP;AACA;AACA;AACO,KAAA,aAAA;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAA,WAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAA,WAAA;AACA;AACA;AACA;AACA,UAAA,SAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAA,eAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,KAAA,qBAAA,sBAAA,gBAAA;AACP;AACA;AACA;AACO,KAAA,eAAA,QAAA,aAAA,QAAA,aAAA,YAAA,qBAAA,GAAA,OAAA,CAAA,qBAAA;AACP;AACA;AACA;AACO,KAAA,cAAA,QAAA,aAAA,QAAA,aAAA,mBAAA,OAAA;AACP;AACA;AACA;AACO,KAAA,iBAAA;AACP;AACA;AACA;AACA,QAAA,aAAA;AACA;AACA;AACA;AACA,UAAA,aAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAA,gBAAA;AACA;AACA;AACA;AACA;AACO,KAAA,cAAA;AACP;AACA;AACA;AACA,QAAA,aAAA;AACA;AACA;AACA;AACA,UAAA,aAAA;AACA;AACA;AACA;AACA,WAAA,eAAA;AACA;AACA;AACA;AACA,qBAAA,mBAAA;AACA;AACA;AACA;AACA,mBAAA,mBAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAA,gBAAA;AACA;AACA;AACA;AACA;AACO,KAAA,aAAA;AACP;AACA;AACA;AACA,QAAA,aAAA;AACA;AACA;AACA;AACA,UAAA,aAAA;AACA;AACA;AACA;AACA,qBAAA,mBAAA;AACA;AACA;AACA;AACA,mBAAA,mBAAA;AACA;AACA;AACA;AACA;AACO,KAAA,aAAA;AACP;AACA;AACA;AACA,QAAA,aAAA;AACA;AACA;AACA;AACA,UAAA,aAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,KAAA,cAAA,YAAA,mBAAA,UAAA,mBAAA,GAAA,OAAA,CAAA,mBAAA;AACP,aAAA,mBAAA;AACA;AACA;AACA;AACA;AACO,KAAA,eAAA;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAA,cAAA;AACA;AACA;AACA;AACA,aAAA,cAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAA,SAAA;AACA;AACA;AACA;AACA,kBAAA,eAAA;AACA;AACA;AACA;AACA,iBAAA,cAAA;AACA;AACA;AACA;AACA,kBAAA,eAAA;AACA;AACA;AACA;AACA,iBAAA,cAAA;AACA;AACA;AACA;AACA,eAAA,YAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAA,MAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAA,KAAA,YAAA,aAAA;AACA;AACA,WAAA,KAAA;AACA;AACA,aAAA,aAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAA,MAAA,CAAA,aAAA;AACA;AACA,mBAAA,MAAA,CAAA,aAAA;AACA;AACA,mBAAA,MAAA,CAAA,WAAA;AACA;AACA,kBAAA,MAAA,CAAA,WAAA;AACA;AACA,mBAAA,MAAA,CAAA,WAAA;AACA;AACA,iBAAA,MAAA,CAAA,WAAA;AACA;AACA,aAAA,MAAA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAA,kBAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAA,OAAA,CAAA,MAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAA,OAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAA,OAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAA,gBAAA,WAAA,gBAAA,GAAA,OAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAA,eAAA,gBAAA,eAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAA,eAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAAA,eAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAA,eAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAA,cAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAA,cAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAA,cAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAAA,KAAA,OAAA,aAAA,SAAA,aAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAA,YAAA,YAAA,MAAA;AACA;AACA;AACA;AACA;AACA,kBAAA,YAAA;AACA;AACA;AACA;AACA;AACA;AACA,6BAAA,YAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAA,kBAAA;AACA;;;;"}