eleva 1.0.1 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (97) hide show
  1. package/README.md +21 -10
  2. package/dist/{eleva-plugins.cjs.js → eleva-plugins.cjs} +1002 -292
  3. package/dist/eleva-plugins.cjs.map +1 -0
  4. package/dist/eleva-plugins.d.cts +1352 -0
  5. package/dist/eleva-plugins.d.cts.map +1 -0
  6. package/dist/eleva-plugins.d.ts +1352 -0
  7. package/dist/eleva-plugins.d.ts.map +1 -0
  8. package/dist/{eleva-plugins.esm.js → eleva-plugins.js} +1002 -292
  9. package/dist/eleva-plugins.js.map +1 -0
  10. package/dist/eleva-plugins.umd.js +1001 -291
  11. package/dist/eleva-plugins.umd.js.map +1 -1
  12. package/dist/eleva-plugins.umd.min.js +1 -1
  13. package/dist/eleva-plugins.umd.min.js.map +1 -1
  14. package/dist/{eleva.cjs.js → eleva.cjs} +421 -191
  15. package/dist/eleva.cjs.map +1 -0
  16. package/dist/eleva.d.cts +1329 -0
  17. package/dist/eleva.d.cts.map +1 -0
  18. package/dist/eleva.d.ts +473 -226
  19. package/dist/eleva.d.ts.map +1 -0
  20. package/dist/{eleva.esm.js → eleva.js} +422 -192
  21. package/dist/eleva.js.map +1 -0
  22. package/dist/eleva.umd.js +420 -190
  23. package/dist/eleva.umd.js.map +1 -1
  24. package/dist/eleva.umd.min.js +1 -1
  25. package/dist/eleva.umd.min.js.map +1 -1
  26. package/dist/plugins/attr.cjs +279 -0
  27. package/dist/plugins/attr.cjs.map +1 -0
  28. package/dist/plugins/attr.d.cts +101 -0
  29. package/dist/plugins/attr.d.cts.map +1 -0
  30. package/dist/plugins/attr.d.ts +101 -0
  31. package/dist/plugins/attr.d.ts.map +1 -0
  32. package/dist/plugins/attr.js +276 -0
  33. package/dist/plugins/attr.js.map +1 -0
  34. package/dist/plugins/attr.umd.js +111 -22
  35. package/dist/plugins/attr.umd.js.map +1 -1
  36. package/dist/plugins/attr.umd.min.js +1 -1
  37. package/dist/plugins/attr.umd.min.js.map +1 -1
  38. package/dist/plugins/router.cjs +1873 -0
  39. package/dist/plugins/router.cjs.map +1 -0
  40. package/dist/plugins/router.d.cts +1296 -0
  41. package/dist/plugins/router.d.cts.map +1 -0
  42. package/dist/plugins/router.d.ts +1296 -0
  43. package/dist/plugins/router.d.ts.map +1 -0
  44. package/dist/plugins/router.js +1870 -0
  45. package/dist/plugins/router.js.map +1 -0
  46. package/dist/plugins/router.umd.js +482 -186
  47. package/dist/plugins/router.umd.js.map +1 -1
  48. package/dist/plugins/router.umd.min.js +1 -1
  49. package/dist/plugins/router.umd.min.js.map +1 -1
  50. package/dist/plugins/store.cjs +920 -0
  51. package/dist/plugins/store.cjs.map +1 -0
  52. package/dist/plugins/store.d.cts +266 -0
  53. package/dist/plugins/store.d.cts.map +1 -0
  54. package/dist/plugins/store.d.ts +266 -0
  55. package/dist/plugins/store.d.ts.map +1 -0
  56. package/dist/plugins/store.js +917 -0
  57. package/dist/plugins/store.js.map +1 -0
  58. package/dist/plugins/store.umd.js +410 -85
  59. package/dist/plugins/store.umd.js.map +1 -1
  60. package/dist/plugins/store.umd.min.js +1 -1
  61. package/dist/plugins/store.umd.min.js.map +1 -1
  62. package/package.json +112 -68
  63. package/src/core/Eleva.js +195 -115
  64. package/src/index.cjs +10 -0
  65. package/src/index.js +11 -0
  66. package/src/modules/Emitter.js +68 -20
  67. package/src/modules/Renderer.js +82 -20
  68. package/src/modules/Signal.js +43 -15
  69. package/src/modules/TemplateEngine.js +50 -9
  70. package/src/plugins/Attr.js +121 -19
  71. package/src/plugins/Router.js +526 -181
  72. package/src/plugins/Store.js +448 -69
  73. package/src/plugins/index.js +1 -0
  74. package/types/core/Eleva.d.ts +263 -169
  75. package/types/core/Eleva.d.ts.map +1 -1
  76. package/types/index.d.cts +3 -0
  77. package/types/index.d.cts.map +1 -0
  78. package/types/index.d.ts +5 -0
  79. package/types/index.d.ts.map +1 -1
  80. package/types/modules/Emitter.d.ts +73 -30
  81. package/types/modules/Emitter.d.ts.map +1 -1
  82. package/types/modules/Renderer.d.ts +48 -18
  83. package/types/modules/Renderer.d.ts.map +1 -1
  84. package/types/modules/Signal.d.ts +44 -16
  85. package/types/modules/Signal.d.ts.map +1 -1
  86. package/types/modules/TemplateEngine.d.ts +46 -11
  87. package/types/modules/TemplateEngine.d.ts.map +1 -1
  88. package/types/plugins/Attr.d.ts +83 -16
  89. package/types/plugins/Attr.d.ts.map +1 -1
  90. package/types/plugins/Router.d.ts +498 -207
  91. package/types/plugins/Router.d.ts.map +1 -1
  92. package/types/plugins/Store.d.ts +211 -37
  93. package/types/plugins/Store.d.ts.map +1 -1
  94. package/dist/eleva-plugins.cjs.js.map +0 -1
  95. package/dist/eleva-plugins.esm.js.map +0 -1
  96. package/dist/eleva.cjs.js.map +0 -1
  97. package/dist/eleva.esm.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"eleva-plugins.d.ts","sources":["../types/plugins/Attr.d.ts","../types/plugins/Router.d.ts","../types/plugins/Store.d.ts"],"sourcesContent":["export namespace AttrPlugin {\n let name: string;\n let version: string;\n let description: string;\n /**\n * Installs the plugin into the Eleva instance.\n *\n * @public\n * Method wrapping behavior:\n * - Stores original `_patchNode` in `renderer._originalPatchNode`\n * - Overrides `renderer._patchNode` to use enhanced attribute handling\n * - Adds `renderer.updateAttributes` and `eleva.updateElementAttributes` helpers\n * - Call `uninstall()` to restore original behavior\n *\n * @param {Eleva} eleva - The Eleva instance to enhance.\n * @param {AttrPluginOptions} options - Plugin configuration options.\n * @param {boolean} [options.enableAria=true] - Enable ARIA attribute handling.\n * Maps aria-* attributes to DOM properties (e.g., aria-expanded → ariaExpanded).\n * @param {boolean} [options.enableData=true] - Enable data attribute handling.\n * Syncs data-* attributes with element.dataset for consistent access.\n * @param {boolean} [options.enableBoolean=true] - Enable boolean attribute handling.\n * Treats empty strings and attribute names as true, \"false\" string as false.\n * @param {boolean} [options.enableDynamic=true] - Enable dynamic property detection.\n * Searches element prototype chain for property matches (useful for custom elements).\n * @returns {void}\n * @example\n * // Basic installation with defaults\n * app.use(AttrPlugin);\n *\n * @example\n * // Custom configuration\n * app.use(AttrPlugin, {\n * enableAria: true,\n * enableData: true,\n * enableBoolean: true,\n * enableDynamic: false // Disable for performance\n * });\n *\n * @example\n * // Using ARIA attributes in templates\n * template: (ctx) => `\n * <div role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"title\">\n * <h2 id=\"title\">Modal Title</h2>\n * <button aria-expanded=\"${ctx.isOpen.value}\">Toggle</button>\n * </div>\n * `\n * @see uninstall - Remove the plugin and restore original behavior.\n */\n function install(eleva: Eleva, options?: AttrPluginOptions): void;\n /**\n * Uninstalls the plugin from the Eleva instance.\n *\n * @public\n * @param {Eleva} eleva - The Eleva instance.\n * @returns {void}\n * @description\n * Restores the original renderer patching behavior and removes\n * `eleva.updateElementAttributes`.\n * @example\n * // Uninstall the plugin\n * AttrPlugin.uninstall(app);\n * @see install - Install the plugin.\n */\n function uninstall(eleva: Eleva): void;\n}\nexport { AttrPlugin as Attr };\n/**\n * Type imports from the Eleva core library.\n */\nexport type Eleva = import(\"eleva\").Eleva;\n/**\n * Configuration options for the AttrPlugin.\n */\nexport type AttrPluginOptions = {\n /**\n * Enable ARIA attribute handling.\n */\n enableAria?: boolean | undefined;\n /**\n * Enable data attribute handling.\n */\n enableData?: boolean | undefined;\n /**\n * Enable boolean attribute handling.\n */\n enableBoolean?: boolean | undefined;\n /**\n * Enable dynamic property detection.\n */\n enableDynamic?: boolean | undefined;\n};\n/**\n * Function signature for attribute update operations.\n */\nexport type AttributeUpdateFunction = (oldEl: HTMLElement, newEl: HTMLElement) => void;\n//# sourceMappingURL=Attr.d.ts.map","/**\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:notFound When no matching route is found.\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 * @emits router:error When an error occurs during navigation.\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","export namespace StorePlugin {\n let name: string;\n let version: string;\n let description: string;\n /**\n * Installs the plugin into the Eleva instance.\n *\n * @public\n * @param {Eleva} eleva - The Eleva instance.\n * @param {StoreOptions} options - Plugin configuration options.\n * @param {Record<string, unknown>} [options.state={}] - Initial state object.\n * @param {Record<string, ActionFunction>} [options.actions={}] - Action functions for state mutations.\n * @param {Record<string, StoreModule>} [options.namespaces={}] - Namespaced modules for organizing store.\n * @param {StorePersistenceOptions} [options.persistence] - Persistence configuration.\n * @param {boolean} [options.persistence.enabled=false] - Enable state persistence.\n * @param {string} [options.persistence.key=\"eleva-store\"] - Storage key.\n * @param {'localStorage' | 'sessionStorage'} [options.persistence.storage=\"localStorage\"] - Storage type.\n * @param {string[]} [options.persistence.include] - Dot-path prefixes to persist (e.g., \"auth.user\")\n * @param {string[]} [options.persistence.exclude] - Dot-path prefixes to exclude (applies when include is empty).\n * @param {boolean} [options.devTools=false] - Enable development tools integration.\n * @param {(error: Error, context: string) => void} [options.onError=null] - Error handler function.\n * @returns {void}\n * @description\n * Installs the store and injects `store` into component setup context by wrapping\n * `eleva.mount` and `eleva._mountComponents`. Also exposes `eleva.store` and\n * helper methods (`eleva.dispatch`, `eleva.getState`, `eleva.subscribe`, `eleva.createAction`).\n * Uninstall restores the originals.\n *\n * @example\n * // Basic installation\n * app.use(StorePlugin, {\n * state: { count: 0, user: null },\n * actions: {\n * increment: (state) => state.count.value++,\n * setUser: (state, user) => state.user.value = user\n * }\n * });\n *\n * // Advanced installation with persistence and namespaces\n * app.use(StorePlugin, {\n * state: { theme: \"light\" },\n * namespaces: {\n * auth: {\n * state: { user: null, token: null },\n * actions: {\n * login: (state, { user, token }) => {\n * state.auth.user.value = user;\n * state.auth.token.value = token;\n * },\n * logout: (state) => {\n * state.auth.user.value = null;\n * state.auth.token.value = null;\n * }\n * }\n * }\n * },\n * persistence: {\n * enabled: true,\n * include: [\"theme\", \"auth.user\"]\n * }\n * });\n */\n function install(eleva: Eleva, options?: StoreOptions): void;\n /**\n * Uninstalls the plugin from the Eleva instance.\n *\n * @public\n * @param {Eleva} eleva - The Eleva instance.\n * @returns {void}\n * @description\n * Restores the original Eleva methods and removes all plugin-specific\n * functionality. This method should be called when the plugin is no\n * longer needed.\n * Also removes `eleva.store` and top-level helpers (`eleva.dispatch`,\n * `eleva.getState`, `eleva.subscribe`, `eleva.createAction`).\n *\n * @example\n * // Uninstall the plugin\n * StorePlugin.uninstall(app);\n */\n function uninstall(eleva: Eleva): void;\n}\nexport { StorePlugin as Store };\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 ComponentContext = import(\"eleva\").ComponentContext;\n/**\n * Type imports from the Eleva core library.\n */\nexport type SetupResult = import(\"eleva\").SetupResult;\n/**\n * Type imports from the Eleva core library.\n */\nexport type ComponentProps = import(\"eleva\").ComponentProps;\n/**\n * Type imports from the Eleva core library.\n */\nexport type ChildrenMap = import(\"eleva\").ChildrenMap;\n/**\n * Type imports from the Eleva core library.\n */\nexport type MountResult = import(\"eleva\").MountResult;\n/**\n * Generic type import.\n */\nexport type Signal<T> = import(\"eleva\").Signal<T>;\n/**\n * Mutation record emitted to subscribers.\n */\nexport type StoreMutation = {\n /**\n * The action name that was dispatched.\n */\n type: string;\n /**\n * The payload passed to the action.\n */\n payload: unknown;\n /**\n * Unix timestamp of when the mutation occurred.\n */\n timestamp: number;\n};\n/**\n * Store configuration options.\n */\nexport type StoreOptions = {\n /**\n * Initial state object.\n */\n state?: Record<string, unknown> | undefined;\n /**\n * Action functions for state mutations.\n */\n actions?: Record<string, ActionFunction> | undefined;\n /**\n * Namespaced modules for organizing store.\n */\n namespaces?: Record<string, StoreModule> | undefined;\n /**\n * Persistence configuration.\n */\n persistence?: StorePersistenceOptions | undefined;\n /**\n * Enable development tools integration.\n */\n devTools?: boolean | undefined;\n /**\n * Error handler function.\n */\n onError?: StoreErrorHandler | undefined;\n};\n/**\n * Namespaced store module definition.\n */\nexport type StoreModule = {\n /**\n * Module state.\n */\n state: Record<string, unknown>;\n /**\n * Module actions.\n */\n actions?: Record<string, ActionFunction> | undefined;\n};\n/**\n * Store persistence configuration.\n */\nexport type StorePersistenceOptions = {\n /**\n * Enable state persistence.\n */\n enabled?: boolean | undefined;\n /**\n * Storage key (default: \"eleva-store\").\n */\n key?: string | undefined;\n /**\n * Storage type.\n */\n storage?: \"localStorage\" | \"sessionStorage\" | undefined;\n /**\n * Dot-path prefixes to persist (e.g., \"auth.user\").\n */\n include?: string[] | undefined;\n /**\n * Dot-path prefixes to exclude.\n */\n exclude?: string[] | undefined;\n};\n/**\n * Store error handler callback.\n */\nexport type StoreErrorHandler = (error: Error, context: string) => void;\n/**\n * Reactive state tree containing signals and nested namespaces.\n */\nexport type StoreState = Record<string, Signal<unknown> | Record<string, unknown>>;\n/**\n * Action function signature for store actions.\n */\nexport type ActionFunction = (state: StoreState, payload?: unknown) => unknown;\n/**\n * Dispatch function signature for triggering actions.\n */\nexport type DispatchFunction = (actionName: string, payload?: unknown) => Promise<unknown>;\n/**\n * Subscribe callback signature for mutation listeners.\n */\nexport type SubscribeCallback = (mutation: StoreMutation, state: StoreState) => void;\n/**\n * Store API exposed to components via ctx.store.\n */\nexport type StoreApi = {\n /**\n * Reactive state signals (supports nested modules).\n */\n state: StoreState;\n /**\n * Dispatch an action by name with optional payload.\n */\n dispatch: DispatchFunction;\n /**\n * Subscribe to state mutations. Returns unsubscribe function.\n */\n subscribe: (callback: SubscribeCallback) => () => void;\n /**\n * Get a snapshot of current state values.\n */\n getState: () => Record<string, unknown>;\n /**\n * Register a namespaced module dynamically.\n */\n registerModule: (namespace: string, module: StoreModule) => void;\n /**\n * Unregister a namespaced module.\n */\n unregisterModule: (namespace: string) => void;\n /**\n * Create a new state signal dynamically.\n */\n createState: (key: string, initialValue: unknown) => Signal<unknown>;\n /**\n * Register a new action dynamically.\n */\n createAction: (name: string, actionFn: ActionFunction) => void;\n /**\n * Signal class constructor for manual state creation.\n */\n signal: new <T>(value: T) => Signal<T>;\n};\n//# sourceMappingURL=Store.d.ts.map"],"names":["Eleva","Signal"],"mappings":";;AAAO,kBAAA,UAAA;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;AACA;AACA;AACA,4BAAAA,OAAA,YAAA,iBAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAAAA,OAAA;AACA;;AAEA;AACA;AACA;AACO,KAAAA,OAAA,GAAa,KAAe,CAAA,KAAA;AACnC;AACA;AACA;AACO,KAAA,iBAAA;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1FA;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,4BAAAA,OAAA,YAAA,aAAA,GAAA,MAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAAAA,OAAA,GAAA,OAAA;AACA;;AAEA;AACA;AACA;AACO,KAAAA,OAAA,GAAa,KAAe,CAAA,KAAA;AACnC;AACA;AACA;AACO,KAAA,mBAAA,GAA2B,KAAe,CAAA,mBAAA;AAKjD;AACA;AACA;AACO,KAAA,WAAA,GAAmB,KAAe,CAAA,WAAA;AAKzC;AACA;AACA;AACO,KAAAC,QAAA,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;AAKP;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,YAAA;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AA0EA;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;AAgGP;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,uBAAAD,OAAA,YAAA,aAAA;AACA;AACA,WAAAA,OAAA;AACA;AACA,aAAA,aAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAAC,QAAA,CAAA,aAAA;AACA;AACA,mBAAAA,QAAA,CAAA,aAAA;AACA;AACA,mBAAAA,QAAA,CAAA,WAAA;AACA;AACA,kBAAAA,QAAA,CAAA,WAAA;AACA;AACA,mBAAAA,QAAA,CAAA,WAAA;AACA;AACA,iBAAAA,QAAA,CAAA,WAAA;AACA;AACA,aAAAA,QAAA;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;;ACzwCO,kBAAA,WAAA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAAA,KAAA,YAAA,YAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAAA,KAAA;AACA;;AAEA;AACA;AACA;AACO,KAAA,KAAA,GAAa,KAAe,CAAA,KAAA;AAyBnC;AACA;AACA;AACO,KAAA,MAAA,MAAiB,KAAe,CAAA,MAAA;AAkBvC;AACA;AACA;AACO,KAAA,YAAA;AACP;AACA;AACA;AACA,YAAA,MAAA;AACA;AACA;AACA;AACA,cAAA,MAAA,SAAA,cAAA;AACA;AACA;AACA;AACA,iBAAA,MAAA,SAAA,WAAA;AACA;AACA;AACA;AACA,kBAAA,uBAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAA,iBAAA;AACA;AACA;AACA;AACA;AACO,KAAA,WAAA;AACP;AACA;AACA;AACA,WAAA,MAAA;AACA;AACA;AACA;AACA,cAAA,MAAA,SAAA,cAAA;AACA;AACA;AACA;AACA;AACO,KAAA,uBAAA;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,KAAA,iBAAA,WAAA,KAAA;AACP;AACA;AACA;AACO,KAAA,UAAA,GAAA,MAAA,SAAA,MAAA,YAAA,MAAA;AACP;AACA;AACA;AACO,KAAA,cAAA,WAAA,UAAA;;;;"}