@real-router/vue 0.12.0 → 0.13.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 (45) hide show
  1. package/README.md +97 -13
  2. package/dist/cjs/createHttpStatusSink-XDu5aGhc.d.ts +32 -0
  3. package/dist/cjs/createHttpStatusSink-XDu5aGhc.d.ts.map +1 -0
  4. package/dist/cjs/index.d.ts +19 -2
  5. package/dist/cjs/index.d.ts.map +1 -1
  6. package/dist/cjs/index.js +1 -1
  7. package/dist/cjs/index.js.map +1 -1
  8. package/dist/cjs/ssr.d.ts +181 -0
  9. package/dist/cjs/ssr.d.ts.map +1 -0
  10. package/dist/cjs/ssr.js +2 -0
  11. package/dist/cjs/ssr.js.map +1 -0
  12. package/dist/cjs/useRoute-BT3SkdOc.js +2 -0
  13. package/dist/cjs/useRoute-BT3SkdOc.js.map +1 -0
  14. package/dist/esm/createHttpStatusSink-DduXvbGr.d.mts +32 -0
  15. package/dist/esm/createHttpStatusSink-DduXvbGr.d.mts.map +1 -0
  16. package/dist/esm/index.d.mts +19 -2
  17. package/dist/esm/index.d.mts.map +1 -1
  18. package/dist/esm/index.mjs +1 -1
  19. package/dist/esm/index.mjs.map +1 -1
  20. package/dist/esm/ssr.d.mts +181 -0
  21. package/dist/esm/ssr.d.mts.map +1 -0
  22. package/dist/esm/ssr.mjs +2 -0
  23. package/dist/esm/ssr.mjs.map +1 -0
  24. package/dist/esm/useRoute-2ocUdDHc.mjs +2 -0
  25. package/dist/esm/useRoute-2ocUdDHc.mjs.map +1 -0
  26. package/package.json +20 -4
  27. package/src/RouterProvider.ts +45 -39
  28. package/src/components/Await.ts +47 -0
  29. package/src/components/ClientOnly.ts +16 -0
  30. package/src/components/HttpStatusCode.ts +74 -0
  31. package/src/components/HttpStatusProvider.ts +22 -0
  32. package/src/components/Link.ts +33 -13
  33. package/src/components/RouteView/RouteView.ts +30 -51
  34. package/src/components/RouteView/helpers.ts +33 -2
  35. package/src/components/ServerOnly.ts +16 -0
  36. package/src/components/Streamed.ts +31 -0
  37. package/src/composables/useDeferred.ts +37 -0
  38. package/src/composables/useIsActiveRoute.ts +33 -3
  39. package/src/composables/useRoute.ts +11 -5
  40. package/src/context.ts +4 -0
  41. package/src/directives/vLink.ts +18 -1
  42. package/src/index.ts +2 -1
  43. package/src/ssr.ts +39 -0
  44. package/src/types.ts +10 -0
  45. package/src/utils/createHttpStatusSink.ts +31 -0
package/README.md CHANGED
@@ -112,16 +112,16 @@ All composables (`useRouter`, `useRoute`, etc.) and the `v-link` directive work
112
112
 
113
113
  ## Composables
114
114
 
115
- Route state composables return `ShallowRef` values. Read `.value` in script, or use them directly in templates where Vue auto-unwraps refs.
116
-
117
- | Composable | Returns | Reactive? |
118
- | ----------------------- | ------------------------------------------------------------- | ---------------------------------------- |
119
- | `useRouter()` | `Router` | Never |
120
- | `useNavigator()` | `Navigator` | Never (stable ref, safe to use directly) |
121
- | `useRoute()` | `{ navigator, route: ShallowRef, previousRoute: ShallowRef }` | route/previousRoute on every navigation |
122
- | `useRouteNode(name)` | `{ navigator, route: ShallowRef, previousRoute: ShallowRef }` | Only when node activates/deactivates |
123
- | `useRouteUtils()` | `RouteUtils` | Never |
124
- | `useRouterTransition()` | `ShallowRef<RouterTransitionSnapshot>` | On transition start/end |
115
+ Route state composables return `Readonly<Ref>` values `useRoute` mirrors a `shallowRef`, `useRouteNode` derives a `computed`, and `useRouterTransition` returns a `ShallowRef` directly. Consumers only need `.value` read access; in templates Vue auto-unwraps refs.
116
+
117
+ | Composable | Returns | Reactive? |
118
+ | ----------------------- | ---------------------------------------------------------------------------- | ---------------------------------------- |
119
+ | `useRouter()` | `Router` | Never |
120
+ | `useNavigator()` | `Navigator` | Never (stable ref, safe to use directly) |
121
+ | `useRoute()` | `{ navigator, route: Readonly<Ref<State>>, previousRoute: Readonly<Ref<State \| undefined>> }` | route/previousRoute on every navigation |
122
+ | `useRouteNode(name)` | `{ navigator, route: Readonly<Ref<State \| undefined>>, previousRoute: Readonly<Ref<State \| undefined>> }` (computed under the hood) | Only when node activates/deactivates |
123
+ | `useRouteUtils()` | `RouteUtils` | Never |
124
+ | `useRouterTransition()` | `ShallowRef<RouterTransitionSnapshot>` | On transition start/end |
125
125
  | `useRouteExit(handler, options?)` | `void` — wraps `subscribeLeave` with abort + same-route guards | Never (handler captured in `setup()`) |
126
126
  | `useRouteEnter(handler, options?)` | `void` — fires once on nav-driven mount via `watch(route)` + `transition.from` | Never (handler captured in `setup()`) |
127
127
 
@@ -246,7 +246,7 @@ In a template:
246
246
  <Link routeName="settings" hash="account">Account</Link>
247
247
  ```
248
248
 
249
- Tri-state: `undefined` preserves the current hash, `""` clears it, a value sets it. Active class is hash-aware — only the matching tab lights up. Live demo: [`examples/web/react/link-hash/`](../../examples/web/react/link-hash/) — behavior is identical across adapters, only template syntax differs. See the [Hash Fragment Support](https://github.com/greydragon888/real-router/wiki/Hash) wiki page for the full surface.
249
+ Tri-state: `undefined` preserves the current hash, `""` clears it, a value sets it. Active class is hash-aware — only the matching tab lights up. Live demo (React adapter, same API): [`examples/web/react/link-hash/`](../../examples/web/react/link-hash/) — template syntax differs, behavior is identical. See the [Hash Fragment Support](https://github.com/greydragon888/real-router/wiki/Hash) wiki page for the full surface.
250
250
 
251
251
  ### `<RouteView>`
252
252
 
@@ -281,6 +281,30 @@ h(
281
281
  // Only matches "users" exactly, not "users.profile"
282
282
  ```
283
283
 
284
+ **`<RouteView.Self>`** — renders when the active route name **exactly equals** the parent `<RouteView>`'s `nodeName`. Use for leaf pages where the parent route itself is the destination. Self outranks `<NotFound>` and yields to any activating `<Match>`. First-`<Self>`-wins if multiple are provided.
285
+
286
+ ```typescript
287
+ h(
288
+ RouteView,
289
+ { nodeName: "users" },
290
+ {
291
+ default: () => [
292
+ // Active when route.name === "users" — the "directory index" of the node
293
+ h(RouteView.Self, null, { default: () => h(UsersIndex) }),
294
+ // Active when route.name === "users.profile"
295
+ h(
296
+ RouteView.Match,
297
+ { segment: "users.profile" },
298
+ { default: () => h(UserProfile) },
299
+ ),
300
+ h(RouteView.NotFound, null, { default: () => h(NotFoundPage) }),
301
+ ],
302
+ },
303
+ );
304
+ ```
305
+
306
+ `RouteView.Self` also accepts an optional `fallback` prop (same semantics as `RouteView.Match.fallback`) for Suspense integration with `defineAsyncComponent`.
307
+
284
308
  **`keepAlive` prop:** Vue's native `<KeepAlive>` preserves component state across navigations. Each segment gets a dedicated wrapper component so `<KeepAlive>` can track them independently.
285
309
 
286
310
  ```typescript
@@ -296,6 +320,37 @@ h(
296
320
  );
297
321
  ```
298
322
 
323
+ **Per-Match `keepAlive`:** `RouteView.Match` also accepts its own `keepAlive` prop for fine-grained control. This lets you keep only specific routes alive without enabling `keepAlive` on the parent `<RouteView>`.
324
+
325
+ ```typescript
326
+ h(
327
+ RouteView,
328
+ { nodeName: "" },
329
+ {
330
+ default: () => [
331
+ // Only UsersPage is kept alive; SettingsPage always remounts
332
+ h(RouteView.Match, { segment: "users", keepAlive: true }, { default: () => h(UsersPage) }),
333
+ h(RouteView.Match, { segment: "settings" }, { default: () => h(SettingsPage) }),
334
+ ],
335
+ },
336
+ );
337
+ ```
338
+
339
+ In a template:
340
+
341
+ ```vue
342
+ <RouteView nodeName="">
343
+ <RouteView.Match segment="users" keepAlive>
344
+ <UsersPage />
345
+ </RouteView.Match>
346
+ <RouteView.Match segment="settings">
347
+ <SettingsPage />
348
+ </RouteView.Match>
349
+ </RouteView>
350
+ ```
351
+
352
+ Per-Match `keepAlive` is checked first; if any `Match` child has `keepAlive: true`, the `<KeepAlive>` wrapper is created for that segment even if the parent `<RouteView>` prop is not set.
353
+
299
354
  **Lazy loading with `fallback`:** Pass a `fallback` prop (`VNode | (() => VNode)`) to wrap the matched content in Vue's `<Suspense>`. This lets you show a loading state while a `defineAsyncComponent` chunk is fetching. Works with both `keepAlive` and non-`keepAlive` modes.
300
355
 
301
356
  ```typescript
@@ -378,6 +433,31 @@ In a template:
378
433
 
379
434
  Auto-resets on next successful navigation. Works with both `<Link>` and imperative `router.navigate()`.
380
435
 
436
+ ### `<ClientOnly>` / `<ServerOnly>`
437
+
438
+ Paired SSR-aware boundaries. `<ClientOnly>` renders the `fallback` slot on the server (and on the client first paint, to match SSR HTML), then swaps in the `default` slot after mount. `<ServerOnly>` is the symmetric inverse.
439
+
440
+ ```vue
441
+ <script setup lang="ts">
442
+ import { ClientOnly, ServerOnly } from "@real-router/vue";
443
+ </script>
444
+
445
+ <template>
446
+ <ClientOnly>
447
+ <BrowserApiWidget />
448
+ <template #fallback>
449
+ <Skeleton />
450
+ </template>
451
+ </ClientOnly>
452
+
453
+ <ServerOnly>
454
+ <SeoMetaStrip />
455
+ </ServerOnly>
456
+ </template>
457
+ ```
458
+
459
+ Implementation: `ref(false)` + `onMounted(() => mounted.value = true)`. Slots `default` (children) and `fallback`. End-to-end dogfooding lives in [`examples/web/vue/ssr-examples/ssr/`](../../examples/web/vue/ssr-examples/ssr/) (see `e2e/ssr-boundaries.spec.ts`).
460
+
381
461
  ## Directives
382
462
 
383
463
  ### `v-link`
@@ -560,9 +640,13 @@ Full documentation: [Wiki](https://github.com/greydragon888/real-router/wiki)
560
640
 
561
641
  ## Examples
562
642
 
563
- 14 runnable examples — each is a standalone Vite app. Run: `cd examples/web/vue/basic && pnpm dev`
643
+ 23 runnable examples — each is a standalone Vite app. Run: `cd examples/web/vue/basic && pnpm dev`
644
+
645
+ **Routing patterns:** [basic](../../examples/web/vue/basic) · [nested-routes](../../examples/web/vue/nested-routes) · [auth-guards](../../examples/web/vue/auth-guards) · [data-loading](../../examples/web/vue/data-loading) · [lazy-loading](../../examples/web/vue/lazy-loading) · [async-guards](../../examples/web/vue/async-guards) · [hash-routing](../../examples/web/vue/hash-routing) · [persistent-params](../../examples/web/vue/persistent-params) · [error-handling](../../examples/web/vue/error-handling) · [dynamic-routes](../../examples/web/vue/dynamic-routes) · [plugin-installation](../../examples/web/vue/plugin-installation) · [v-link-directive](../../examples/web/vue/v-link-directive) · [keep-alive](../../examples/web/vue/keep-alive) · [search-schema](../../examples/web/vue/search-schema) · [combined](../../examples/web/vue/combined)
646
+
647
+ **Animations:** [view-transitions](../../examples/web/vue/animation-examples/view-transitions) · [route-animations](../../examples/web/vue/animation-examples/route-animations) · [page-animations](../../examples/web/vue/animation-examples/page-animations) · [motion-animations](../../examples/web/vue/animation-examples/motion-animations)
564
648
 
565
- [basic](../../examples/web/vue/basic) · [nested-routes](../../examples/web/vue/nested-routes) · [auth-guards](../../examples/web/vue/auth-guards) · [data-loading](../../examples/web/vue/data-loading) · [lazy-loading](../../examples/web/vue/lazy-loading) · [async-guards](../../examples/web/vue/async-guards) · [hash-routing](../../examples/web/vue/hash-routing) · [persistent-params](../../examples/web/vue/persistent-params) · [error-handling](../../examples/web/vue/error-handling) · [dynamic-routes](../../examples/web/vue/dynamic-routes) · [plugin-installation](../../examples/web/vue/plugin-installation) · [v-link-directive](../../examples/web/vue/v-link-directive) · [keep-alive](../../examples/web/vue/keep-alive) · [combined](../../examples/web/vue/combined)
649
+ **Server-side rendering:** [ssr](../../examples/web/vue/ssr-examples/ssr) · [ssr-streaming](../../examples/web/vue/ssr-examples/ssr-streaming) · [ssr-mixed](../../examples/web/vue/ssr-examples/ssr-mixed) · [ssg](../../examples/web/vue/ssr-examples/ssg)
566
650
 
567
651
  ## Related Packages
568
652
 
@@ -0,0 +1,32 @@
1
+ //#region src/utils/createHttpStatusSink.d.ts
2
+ /**
3
+ * Render-scoped HTTP status sink. Created per request on the server, passed to
4
+ * `<HttpStatusProvider :sink="...">`, and read after `renderToString` /
5
+ * `renderToWebStream` to apply the value to the HTTP response.
6
+ *
7
+ * Last write wins: if the rendered tree mounts more than one
8
+ * `<HttpStatusCode />`, the value reflects the last component that ran during
9
+ * the render pass.
10
+ *
11
+ * No-op on the client — `<HttpStatusCode />` reads the optional injected sink
12
+ * and skips the write when no provider is mounted, so the same component tree
13
+ * can be hydrated without changing behaviour.
14
+ *
15
+ * Constraints:
16
+ * - **Per-request only.** Don't share a sink across requests; the rendered
17
+ * tree mutates `code` in place. Module-level singletons leak status
18
+ * between concurrent requests.
19
+ * - **Don't `Object.freeze` the sink.** The component writes to `.code`;
20
+ * freezing makes the assignment throw under ESM strict mode.
21
+ * - **Hydration symmetry:** mount `<HttpStatusProvider>` on both server and
22
+ * client (with a throwaway client sink). Vue emits `<!--[-->` / `<!--]-->`
23
+ * fragment markers around the provider's slot; an extra provider on one
24
+ * side trips Vue with "Hydration completed but contains mismatches".
25
+ */
26
+ interface HttpStatusSink {
27
+ code: number | undefined;
28
+ }
29
+ declare function createHttpStatusSink(): HttpStatusSink;
30
+ //#endregion
31
+ export { createHttpStatusSink as n, HttpStatusSink as t };
32
+ //# sourceMappingURL=createHttpStatusSink-XDu5aGhc.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createHttpStatusSink-XDu5aGhc.d.ts","names":[],"sources":["../../src/utils/createHttpStatusSink.ts"],"mappings":";;AAwBA;;;;;AAIA;;;;;;;;;;;;;;;;;;UAJiB,cAAA;EACf,IAAA;AAAA;AAAA,iBAGc,oBAAA,CAAA,GAAwB,cAAA"}
@@ -277,12 +277,29 @@ interface LinkProps<P extends Params = Params> {
277
277
  activeStrict?: boolean;
278
278
  ignoreQueryParams?: boolean;
279
279
  target?: string;
280
+ /**
281
+ * URL fragment (#532). Decoded, no leading `#`. Tri-state:
282
+ * - `undefined` (default) — preserves current `state.context.url.hash` on click.
283
+ * - `""` — clears the hash.
284
+ * - `"value"` — sets the hash; click routes through `navigateWithHash`,
285
+ * which auto-adds `force: true, hashChange: true` for same-route hash
286
+ * transitions (bypasses core's SAME_STATES check).
287
+ * Active state is hash-aware when `hash` is set.
288
+ */
289
+ hash?: string;
280
290
  }
281
291
  //#endregion
282
292
  //#region src/composables/useRoute.d.ts
283
- declare const useRoute: <P extends Params = Params>() => Omit<RouteContext<P>, "route"> & {
293
+ /**
294
+ * Return shape for `useRoute()` — `RouteContext<P>` with `route` narrowed
295
+ * to the non-nullable variant. The composable throws when `route.value`
296
+ * would be `undefined`, so consumers can read `.value.params.x` without a
297
+ * nullable guard. Extracted from inline duplication at two call sites.
298
+ */
299
+ type UseRouteReturn<P extends Params = Params> = Omit<RouteContext<P>, "route"> & {
284
300
  route: Readonly<Ref<State<P>>>;
285
301
  };
302
+ declare const useRoute: <P extends Params = Params>() => UseRouteReturn<P>;
286
303
  //#endregion
287
304
  //#region src/composables/useRouteNode.d.ts
288
305
  declare function useRouteNode(nodeName: string): RouteContext;
@@ -525,5 +542,5 @@ declare const RouterKey: InjectionKey<Router>;
525
542
  declare const NavigatorKey: InjectionKey<Navigator$1>;
526
543
  declare const RouteKey: InjectionKey<RouteContext>;
527
544
  //#endregion
528
- export { Link, type LinkDirectiveValue, type LinkProps, type Navigator, NavigatorKey, type RouteEnterContext, type RouteEnterHandler, type RouteExitContext, type RouteExitHandler, RouteKey, RouteView, type MatchProps as RouteViewMatchProps, type NotFoundProps as RouteViewNotFoundProps, type RouteViewProps, RouterErrorBoundary, type RouterErrorBoundaryProps, RouterKey, RouterProvider, type RouterTransitionSnapshot, type UseRouteEnterOptions, type UseRouteExitOptions, createRouterPlugin, useNavigator, useRoute, useRouteEnter, useRouteExit, useRouteNode, useRouteUtils, useRouter, useRouterTransition, vLink };
545
+ export { Link, type LinkDirectiveValue, type LinkProps, type Navigator, NavigatorKey, type RouteContext, type RouteEnterContext, type RouteEnterHandler, type RouteExitContext, type RouteExitHandler, RouteKey, RouteView, type MatchProps as RouteViewMatchProps, type NotFoundProps as RouteViewNotFoundProps, type RouteViewProps, type SelfProps as RouteViewSelfProps, RouterErrorBoundary, type RouterErrorBoundaryProps, RouterKey, RouterProvider, type RouterTransitionSnapshot, type UseRouteEnterOptions, type UseRouteExitOptions, createRouterPlugin, useNavigator, useRoute, useRouteEnter, useRouteExit, useRouteNode, useRouteUtils, useRouter, useRouterTransition, vLink };
529
546
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","names":[],"sources":["../../src/components/RouteView/types.ts","../../src/components/RouteView/RouteView.ts","../../src/components/Link.ts","../../src/components/RouterErrorBoundary.ts","../../src/directives/vLink.ts","../../src/composables/useRouter.ts","../../src/composables/useNavigator.ts","../../src/composables/useRouteUtils.ts","../../src/types.ts","../../src/composables/useRoute.ts","../../src/composables/useRouteNode.ts","../../src/composables/useRouterTransition.ts","../../src/composables/useRouteExit.ts","../../src/composables/useRouteEnter.ts","../../src/createRouterPlugin.ts","../../../../shared/dom-utils/scroll-restore.ts","../../src/RouterProvider.ts","../../src/context.ts"],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","names":[],"sources":["../../src/components/RouteView/types.ts","../../src/components/RouteView/RouteView.ts","../../src/components/Link.ts","../../src/components/RouterErrorBoundary.ts","../../src/directives/vLink.ts","../../src/composables/useRouter.ts","../../src/composables/useNavigator.ts","../../src/composables/useRouteUtils.ts","../../src/types.ts","../../src/composables/useRoute.ts","../../src/composables/useRouteNode.ts","../../src/composables/useRouterTransition.ts","../../src/composables/useRouteExit.ts","../../src/composables/useRouteEnter.ts","../../src/createRouterPlugin.ts","../../../../shared/dom-utils/scroll-restore.ts","../../src/RouterProvider.ts","../../src/context.ts"],"mappings":"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"}
package/dist/cjs/index.js CHANGED
@@ -1,2 +1,2 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});let e=require(`vue`),t=require(`@real-router/core`),n=require(`@real-router/route-utils`),r=require(`@real-router/sources`),i=require(`@real-router/core/api`);function a(){return null}const o=(0,e.defineComponent)({name:`RouteView.Match`,props:{segment:{type:String,required:!0},exact:{type:Boolean,default:!1},fallback:{type:[Object,Function],default:void 0},keepAlive:{type:Boolean,default:!1}},render:a}),s=(0,e.defineComponent)({name:`RouteView.Self`,props:{fallback:{type:[Object,Function],default:void 0}},render:a}),c=(0,e.defineComponent)({name:`RouteView.NotFound`,render:a});function l(e,t,r){return r?e===t:(0,n.startsWithSegment)(e,t)}function u(t){if(Array.isArray(t)){let n=[];for(let r of t)Array.isArray(r)?n.push(...u(r)):(0,e.isVNode)(r)&&n.push(r);return n}return(0,e.isVNode)(t)?[t]:[]}function d(t,n){let r=u(t);for(let t of r)t.type===o||t.type===s||t.type===c?n.push(t):t.type===e.Fragment&&d(t.children,n)}function f(e,t){return e.type===c?(t.notFoundChildren=e.children,!0):e.type===s?(t.selfVNode===null&&(t.selfVNode=e,t.selfFallback=e.props?.fallback),!0):!1}function p(e,t,n){let r=e.props,i=r?.segment??``,a=r?.exact??!1;return{isActive:l(t,n?`${n}.${i}`:i,a),fallback:r?.fallback}}function m(e,n,r,i,a){if(i.selfVNode!==null&&n===r)return e.push(i.selfVNode),i.selfFallback;if(n===t.UNKNOWN_ROUTE&&i.notFoundChildren!==null){let t=a.filter(e=>e.type===c).at(-1);t&&e.push(t)}}function h(e,t,n){let r={selfVNode:null,selfFallback:void 0,notFoundChildren:null},i=!1,a,o=[];for(let s of e){if(f(s,r)||i)continue;let e=p(s,t,n);e.isActive&&(i=!0,a=e.fallback,o.push(s))}return i||(a=m(o,t,n,r,e)),{rendered:o,activeMatchFound:i,fallback:a}}function g(t){let n=(0,e.shallowRef)(t.getSnapshot());return(0,e.onScopeDispose)(t.subscribe(()=>{n.value=t.getSnapshot()})),n}const _=Symbol(`RouterKey`),v=Symbol(`NavigatorKey`),y=Symbol(`RouteKey`),b=()=>{let t=(0,e.inject)(_);if(!t)throw Error(`useRouter must be used within a RouterProvider`);return t};function x(n){let i=b(),a=g((0,r.createRouteNodeSource)(i,n));return{navigator:(0,t.getNavigator)(i),route:(0,e.computed)(()=>a.value.route),previousRoute:(0,e.computed)(()=>a.value.previousRoute)}}function S(e){return e.children?.default?.()??null}function C(t,n){let r=t.get(n);if(r)return r;let i=(0,e.markRaw)((0,e.defineComponent)({name:`KeepAlive-${n}`,setup(e,t){return()=>t.slots.default?.()}}));return t.set(n,i),i}function w(t,n){if(n===void 0)return t;let r=typeof n==`function`?n():n;return(0,e.h)(e.Suspense,{},{default:()=>t,fallback:()=>r})}const ee=(0,e.markRaw)((0,e.defineComponent)({name:`KeepAlive-placeholder`,render(){return null}}));function te(t,n,r){let i=t.props?.segment??`__not-found__`,a=C(n,i),o=S(t)??[];return w((0,e.h)(e.KeepAlive,null,{default:()=>(0,e.h)(a,{key:i},{default:()=>o})}),r)}function T(e){return e===!0||e===``||e===`keep-alive`}function ne(t,n,r){let i=t.props;if(T(i?.keepAlive)&&t.type===o){let r=i?.segment??`__not-found__`,a=C(n,r),o=S(t)??[];return(0,e.h)(e.Fragment,[(0,e.h)(e.KeepAlive,null,{default:()=>(0,e.h)(a,{key:r},{default:()=>o})})])}let a=S(t);return a?(0,e.h)(e.Fragment,[(0,e.h)(e.KeepAlive,null,{default:()=>(0,e.h)(ee)}),w((0,e.h)(e.Fragment,a),r)]):null}const E=(0,e.defineComponent)({name:`RouteView`,props:{nodeName:{type:String,required:!0},keepAlive:{type:Boolean,default:!1}},setup(t,{slots:n}){let r=x(t.nodeName),i=new Map,a=null,l=!1;function u(e,t){return t===a?l:(a=t,l=e.some(e=>e.type===o&&T(e.props?.keepAlive)),l)}return()=>{let a=r.route.value;if(!a)return null;let l=n.default?.(),f=[];d(l,f);let{rendered:p,fallback:m}=h(f,a.name,t.nodeName);if(p.length===0)return null;let g=p[0];if(t.keepAlive)return te(g,i,m);if(g.type!==o&&g.type!==s&&g.type!==c)return null;if(u(f,l))return ne(g,i,m);let _=S(g);return _?w((0,e.h)(e.Fragment,_),m):null}}}),D=Object.assign(E,{Match:o,Self:s,NotFound:c}),re=Object.freeze({}),ie=Object.freeze({}),O=`data-real-router-announcer`;function ae(e,t){let n=t?.prefix??`Navigated to `,r=t?.getAnnouncementText,i=!0,a=!1,o=!1,s=``,c=null,l,u=oe(),d=(e,t)=>{s=e,clearTimeout(l),u.textContent=e,l=setTimeout(()=>{u.textContent=``,s=``},7e3),le(t)},f=setTimeout(()=>{if(a=!0,c!==null&&!o){let e=c;c=null,d(e,document.querySelector(`h1`))}},100),p=e.subscribe(({route:e})=>{if(i){i=!1;return}requestAnimationFrame(()=>{requestAnimationFrame(()=>{if(o)return;let t=document.querySelector(`h1`),i=ce(e,n,r,t);if(!(!i||i===s)){if(!a){c=i;return}d(i,t)}})})});return{destroy(){o=!0,p(),clearTimeout(l),clearTimeout(f),se()}}}function oe(){let e=document.querySelector(`[${O}]`);if(e)return e;let t=document.createElement(`div`);return t.setAttribute(`style`,`position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);clip-path:inset(50%);white-space:nowrap;border:0`),t.setAttribute(`aria-live`,`assertive`),t.setAttribute(`aria-atomic`,`true`),t.setAttribute(O,``),document.body.prepend(t),t}function se(){document.querySelector(`[${O}]`)?.remove()}function ce(e,t,n,r){if(n)return n(e);let i=(r?.textContent??``).trim(),a=e.name.startsWith(`@@`)?``:e.name;return`${t}${i||document.title||a||globalThis.location.pathname}`}function le(e){e&&(e.hasAttribute(`tabindex`)||e.setAttribute(`tabindex`,`-1`),e.focus({preventScroll:!0}))}const k=Object.freeze({destroy:()=>{}});function ue(e,t){if(globalThis.window===void 0)return k;let n=t?.mode??`restore`;if(n===`native`)return k;let r=t?.anchorScrolling??!0,i=t?.scrollContainer,a=t?.behavior??`auto`,o=t?.storageKey??`real-router:scroll`,s=()=>{try{let e=sessionStorage.getItem(o);return e?JSON.parse(e):{}}catch{return{}}},c=(e,t)=>{try{let n=s();n[e]=t,sessionStorage.setItem(o,JSON.stringify(n))}catch{}},l=history.scrollRestoration;try{history.scrollRestoration=`manual`}catch{}let u=()=>{let e=i?.();return e?e.scrollTop:globalThis.scrollY},d=e=>{let t=i?.();t?t.scrollTo({top:e,left:0,behavior:a}):globalThis.scrollTo({top:e,left:0,behavior:a})},f=e=>{let t=e.context?.url?.hash;if(t!==void 0){if(r&&t.length>0){let e=document.getElementById(t);if(e){e.scrollIntoView({behavior:a});return}}d(0);return}let n=globalThis.location.hash;if(r&&n.length>1){let e;try{e=decodeURIComponent(n.slice(1))}catch{e=n.slice(1)}let t=document.getElementById(e);if(t){t.scrollIntoView({behavior:a});return}}d(0)},p=!1,m=e.subscribe(({route:e,previousRoute:t})=>{let r=e.context.navigation;t&&c(A(t),u()),requestAnimationFrame(()=>{if(!p){if(n===`top`||!r){f(e);return}if(r.navigationType!==`replace`){if(r.direction===`back`||r.navigationType===`traverse`||r.navigationType===`reload`){d(s()[A(e)]??0);return}f(e)}}})}),h=()=>{let t=e.getState();t&&c(A(t),u())};return globalThis.addEventListener(`pagehide`,h),{destroy:()=>{if(!p){p=!0,m(),globalThis.removeEventListener(`pagehide`,h);try{history.scrollRestoration=l}catch{}}}}}function A(e){return`${e.name}:${j(e.params)}`}function j(e){return JSON.stringify(e,M)}function M(e,t){if(typeof t==`object`&&t&&!Array.isArray(t)){let e={},n=Object.keys(t).sort((e,t)=>e.localeCompare(t));for(let r of n)e[r]=t[r];return e}return t}const N=Object.freeze({destroy:()=>{}});function P(e){if(typeof document>`u`||typeof document.startViewTransition!=`function`)return N;let t=null,n=null,r=!1,i=()=>{t?.(),t=null},a=e.subscribeLeave(({signal:e})=>{if(!e.aborted)return r=!1,i(),new Promise(a=>{let o=new Promise(e=>{t=e});e.addEventListener(`abort`,()=>{r||(i(),n?.skipTransition?.(),a())},{once:!0});try{n=document.startViewTransition(()=>(a(),o))}catch{i(),a()}})}),o=e.subscribe(()=>{let e=t;r=!0,t=null,e===null?n=null:setTimeout(()=>{e(),n=null},0)});return{destroy:()=>{a(),o(),n?.skipTransition?.(),n=null,i()}}}function F(e){return e.button===0&&!e.metaKey&&!e.altKey&&!e.ctrlKey&&!e.shiftKey}function I(e){return encodeURI(e).replaceAll(`#`,`%23`)}function L(e,t,n,r){try{let i=r?.hash,a;i!==void 0&&(a=i.startsWith(`#`)?i.slice(1):i);let o=e.buildUrl;if(o){let e=o(t,n,a===void 0?void 0:{hash:a});if(e!==void 0)return e}let s=e.buildPath(t,n);return a?`${s}#${I(a)}`:s}catch{console.error(`[real-router] Route "${t}" is not defined. The element will render without an href attribute.`);return}}function R(e,t,n,r,i){let a={...i};r!==void 0&&(a.hash=r);let o=e.getState();if(o?.name===t&&V(o.params,n)){let e=o.context?.url?.hash??``;e!==(r??e)&&(a.force=!0,a.hashChange=!0)}return e.navigate(t,n,a)}function z(e){return e?e.match(/\S+/g)??[]:[]}function B(e,t,n){if(e&&t){let e=z(t);if(e.length===0)return n??void 0;if(!n)return e.join(` `);let r=z(n),i=new Set(r);for(let t of e)i.has(t)||(i.add(t),r.push(t));return r.join(` `)}return n??void 0}function V(e,t){if(Object.is(e,t))return!0;if(!e||!t)return!1;let n=Object.keys(e);if(n.length!==Object.keys(t).length)return!1;let r=e,i=t;for(let e of n)if(!Object.is(r[e],i[e]))return!1;return!0}function H(e){e&&(e instanceof HTMLAnchorElement||e instanceof HTMLButtonElement||(e.hasAttribute(`role`)||e.setAttribute(`role`,`link`),e.hasAttribute(`tabindex`)||e.setAttribute(`tabindex`,`0`)))}function U(e,t){if(typeof e==`function`){e(t);return}if(Array.isArray(e)){let n=e;for(let e of n)if(typeof e==`function`&&(e(t),t.defaultPrevented))return}}const de=(0,e.defineComponent)({name:`Link`,inheritAttrs:!1,props:{routeName:{type:String,required:!0},routeParams:{type:Object,default:()=>re},routeOptions:{type:Object,default:()=>ie},class:{type:String,default:void 0},activeClassName:{type:String,default:`active`},activeStrict:{type:Boolean,default:!1},ignoreQueryParams:{type:Boolean,default:!0},target:{type:String,default:void 0},hash:{type:String,default:void 0}},setup(t,{slots:n,attrs:i}){let a=b(),o=(0,e.shallowRef)(!1);(0,e.watch)(()=>[t.routeName,t.routeParams,t.activeStrict,t.ignoreQueryParams,t.hash],([e,t,n,i,s],c,l)=>{let u=(0,r.createActiveRouteSource)(a,e,t,s===void 0?{strict:n,ignoreQueryParams:i}:{strict:n,ignoreQueryParams:i,hash:s});o.value=u.getSnapshot(),l(u.subscribe(()=>{o.value=u.getSnapshot()}))},{immediate:!0,flush:`sync`});let s=(0,e.computed)(()=>L(a,t.routeName,t.routeParams,t.hash===void 0?void 0:{hash:t.hash})),c=(0,e.computed)(()=>B(o.value,t.activeClassName,t.class)),l=e=>{i.onClick!==void 0&&i.onClick!==null&&(U(i.onClick,e),e.defaultPrevented)||!F(e)||t.target===`_blank`||(e.preventDefault(),R(a,t.routeName,t.routeParams,t.hash,t.routeOptions).catch(()=>{}))};return()=>{let r={};for(let e of Object.keys(i))e!==`onClick`&&(r[e]=i[e]);return(0,e.h)(`a`,{...r,href:s.value,class:c.value,target:t.target,onClick:l},n.default?.())}}}),fe=(0,e.defineComponent)({name:`RouterErrorBoundary`,props:{fallback:{type:Function,required:!0},onError:{type:Function,default:void 0}},setup(t,{slots:n}){let i=g((0,r.createDismissableError)(b()));return(0,e.watch)(()=>i.value.version,()=>{i.value.error&&t.onError?.(i.value.error,i.value.toRoute,i.value.fromRoute)},{immediate:!0}),()=>{let r=n.default?.()??[],a=i.value.error?t.fallback(i.value.error,i.value.resetError):null;return(0,e.h)(e.Fragment,null,[...r,a])}}}),W=[];function G(e){return W.push(e),()=>{let t=W.lastIndexOf(e);t!==-1&&W.splice(t,1)}}function K(){let e=W.at(-1);if(!e)throw Error(`v-link directive requires a RouterProvider ancestor. Make sure RouterProvider is mounted.`);return e}const q=new WeakMap;function J(e){return e==null?(console.error(`[real-router] v-link directive received null/undefined value. The element will not be wired for navigation.`),!1):typeof e.name==`string`?!0:(console.error("[real-router] v-link directive value is missing a string `name` field. The element will not be wired for navigation."),!1)}function pe(e,t){return n=>{F(n)&&(n.preventDefault(),e.navigate(t.name,t.params??{},t.options??{}).catch(()=>{}))}}function me(e,t,n){return r=>{r.key===`Enter`&&!(n instanceof HTMLButtonElement)&&e.navigate(t.name,t.params??{},t.options??{}).catch(()=>{})}}function Y(e,t,n){let r=pe(t,n),i=me(t,n,e);e.addEventListener(`click`,r),e.addEventListener(`keydown`,i),q.set(e,{click:r,keydown:i})}function X(e){let t=q.get(e);t&&(e.removeEventListener(`click`,t.click),e.removeEventListener(`keydown`,t.keydown),q.delete(e))}const he={mounted(e,t){let n=K();H(e),e.style.cursor=`pointer`,J(t.value)&&Y(e,n,t.value)},updated(e,t){let n=K();X(e),J(t.value)&&Y(e,n,t.value)},beforeUnmount(e){X(e)}},Z=()=>{let t=(0,e.inject)(v);if(!t)throw Error(`useNavigator must be used within a RouterProvider`);return t},ge=()=>(0,n.getRouteUtils)((0,i.getPluginApi)(b()).getTree()),Q=()=>{let t=(0,e.inject)(y);if(!t)throw Error(`useRoute must be used within a RouterProvider`);if(!t.route.value)throw Error(`useRoute called with no active route. Did you forget to await router.start() before rendering, or is the router stopped/disposed?`);return t};function _e(){return g((0,r.getTransitionSource)(b()))}function ve(t,n){let r=b(),i=n?.skipSameRoute??!0;(0,e.onScopeDispose)(r.subscribeLeave(({route:e,nextRoute:n,signal:r})=>{if(!(i&&e.name===n.name)&&!r.aborted)return t({route:e,nextRoute:n,signal:r})}))}function ye(t,n){let{route:r,previousRoute:i}=Q(),a=n?.skipSameRoute??!0,o=null;(0,e.watch)(r,e=>{let n=i.value;e.transition.from&&(a&&e.transition.from===e.name||o===e||!n||(o=e,t({route:e,previousRoute:n})))})}function $(n){let i=(0,t.getNavigator)(n),a=(0,r.createRouteSource)(n),o=a.getSnapshot(),s=(0,e.shallowRef)(o.route),c=(0,e.shallowRef)(o.previousRoute);return{navigator:i,route:s,previousRoute:c,unsubscribe:a.subscribe(()=>{let e=a.getSnapshot();s.value=e.route,c.value=e.previousRoute})}}function be(e){return{install(t){let n=G(e),{navigator:r,route:i,previousRoute:a,unsubscribe:o}=$(e);`onUnmount`in t&&t.onUnmount(()=>{n(),o()}),t.provide(_,e),t.provide(v,r),t.provide(y,{navigator:r,route:i,previousRoute:a})}}}const xe=(0,e.defineComponent)({name:`RouterProvider`,props:{router:{type:Object,required:!0},announceNavigation:{type:Boolean,default:!1},scrollRestoration:{type:Object},viewTransitions:{type:Boolean,default:!1}},setup(t,{slots:n}){(0,e.watch)(()=>[t.router,t.announceNavigation],([e,t],n,r)=>{if(!t)return;let i=ae(e);r(()=>{i.destroy()})},{immediate:!0}),(0,e.watch)(()=>[t.router,t.scrollRestoration!==void 0,t.scrollRestoration?.mode,t.scrollRestoration?.anchorScrolling,t.scrollRestoration?.behavior,t.scrollRestoration?.storageKey],([e,n,r,i,a,o],s,c)=>{if(!n)return;let l=ue(e,{mode:r,anchorScrolling:i,behavior:a,storageKey:o,scrollContainer:t.scrollRestoration?.scrollContainer});c(()=>{l.destroy()})},{immediate:!0}),(0,e.watch)(()=>[t.router,t.viewTransitions],([e,t],n,r)=>{if(!t)return;let i=P(e);r(()=>{i.destroy()})},{immediate:!0});let r=G(t.router),{navigator:i,route:a,previousRoute:o,unsubscribe:s}=$(t.router);return(0,e.onScopeDispose)(()=>{r(),s()}),(0,e.provide)(_,t.router),(0,e.provide)(v,i),(0,e.provide)(y,{navigator:i,route:a,previousRoute:o}),()=>n.default?.()}});exports.Link=de,exports.NavigatorKey=v,exports.RouteKey=y,exports.RouteView=D,exports.RouterErrorBoundary=fe,exports.RouterKey=_,exports.RouterProvider=xe,exports.createRouterPlugin=be,exports.useNavigator=Z,exports.useRoute=Q,exports.useRouteEnter=ye,exports.useRouteExit=ve,exports.useRouteNode=x,exports.useRouteUtils=ge,exports.useRouter=b,exports.useRouterTransition=_e,exports.vLink=he;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./useRoute-BT3SkdOc.js`);let t=require(`vue`),n=require(`@real-router/core`),r=require(`@real-router/route-utils`),i=require(`@real-router/sources`),a=require(`@real-router/core/api`);function o(){return null}const s=(0,t.defineComponent)({name:`RouteView.Match`,props:{segment:{type:String,required:!0},exact:{type:Boolean,default:!1},fallback:{type:[Object,Function],default:void 0},keepAlive:{type:Boolean,default:!1}},render:o}),c=(0,t.defineComponent)({name:`RouteView.Self`,props:{fallback:{type:[Object,Function],default:void 0}},render:o}),l=(0,t.defineComponent)({name:`RouteView.NotFound`,render:o});function u(e,t,n){return n?e===t:(0,r.startsWithSegment)(e,t)}function d(e){return e===!0||e===``||e===`keep-alive`}function f(e){if(Array.isArray(e)){let n=[];for(let r of e)Array.isArray(r)?n.push(...f(r)):(0,t.isVNode)(r)&&n.push(r);return n}return(0,t.isVNode)(e)?[e]:[]}function p(e,n){let r=f(e);for(let e of r)e.type===s||e.type===c||e.type===l?n.push(e):e.type===t.Fragment&&p(e.children,n)}function m(e,t){return e.type===l?(t.notFoundChildren=e.children,!0):e.type===c?(t.selfVNode===null&&(t.selfVNode=e,t.selfFallback=e.props?.fallback),!0):!1}function h(e,t,n){let r=e.props,i=r?.segment??``,a=r?.exact??!1;return{isActive:u(t,n?`${n}.${i}`:i,a),fallback:r?.fallback}}function g(e,t,r,i,a){if(i.selfVNode!==null&&t===r)return e.push(i.selfVNode),i.selfFallback;if(t===n.UNKNOWN_ROUTE&&i.notFoundChildren!==null){let t=a.filter(e=>e.type===l).at(-1);t&&e.push(t)}}function _(e,t,n){let r={selfVNode:null,selfFallback:void 0,notFoundChildren:null},i=!1,a,o=!1,c=[];for(let l of e){if(!o&&l.type===s){let e=l.props;d(e?.keepAlive)&&(o=!0)}if(m(l,r)||i)continue;let e=h(l,t,n);e.isActive&&(i=!0,a=e.fallback,c.push(l))}return i||(a=g(c,t,n,r,e)),{rendered:c,activeMatchFound:i,fallback:a,hasPerMatchKA:o}}function v(e){let n=(0,t.shallowRef)(e.getSnapshot());return(0,t.onScopeDispose)(e.subscribe(()=>{n.value=e.getSnapshot()})),n}const y=()=>{let n=(0,t.inject)(e.a);if(!n)throw Error(`useRouter must be used within a RouterProvider`);return n};function b(e){let r=y(),a=v((0,i.createRouteNodeSource)(r,e));return{navigator:(0,n.getNavigator)(r),route:(0,t.computed)(()=>a.value.route),previousRoute:(0,t.computed)(()=>a.value.previousRoute)}}function x(e){return e.children?.default?.()??null}function S(e,n){let r=e.get(n);if(r)return r;let i=(0,t.markRaw)((0,t.defineComponent)({name:`KeepAlive-${n}`,setup(e,t){return()=>t.slots.default?.()}}));return e.set(n,i),i}function C(e,n){if(n===void 0)return e;let r=typeof n==`function`?n():n;return(0,t.h)(t.Suspense,{},{default:()=>e,fallback:()=>r})}let w=null;function ee(){return w??=(0,t.markRaw)((0,t.defineComponent)({name:`KeepAlive-placeholder`,render(){return null}})),w}function te(e,n,r){let i=e.props?.segment??`__not-found__`,a=S(n,i),o=x(e)??[];return C((0,t.h)(t.KeepAlive,null,{default:()=>(0,t.h)(a,{key:i},{default:()=>o})}),r)}function T(e,n,r){let i=e.props;if(d(i?.keepAlive)&&e.type===s){let r=i?.segment??`__not-found__`,a=S(n,r),o=x(e)??[];return(0,t.h)(t.Fragment,[(0,t.h)(t.KeepAlive,null,{default:()=>(0,t.h)(a,{key:r},{default:()=>o})})])}let a=x(e);return a?(0,t.h)(t.Fragment,[(0,t.h)(t.KeepAlive,null,{default:()=>(0,t.h)(ee())}),C((0,t.h)(t.Fragment,a),r)]):null}const E=(0,t.defineComponent)({name:`RouteView`,props:{nodeName:{type:String,required:!0},keepAlive:{type:Boolean,default:!1}},setup(e,{slots:n}){let r=b(e.nodeName),i=new Map;return()=>{let a=r.route.value;if(!a)return null;let o=n.default?.(),u=[];p(o,u);let{rendered:d,fallback:f,hasPerMatchKA:m}=_(u,a.name,e.nodeName);if(d.length===0)return null;let h=d[0];if(e.keepAlive)return te(h,i,f);if(h.type!==s&&h.type!==c&&h.type!==l)return null;if(m)return T(h,i,f);let g=x(h);return g?C((0,t.h)(t.Fragment,g),f):null}}}),D=Object.assign(E,{Match:s,Self:c,NotFound:l}),ne=Object.freeze({}),re=Object.freeze({}),O=`data-real-router-announcer`,ie=Object.freeze({destroy:()=>{}});function ae(e,t){if(typeof document>`u`)return ie;let n=t?.prefix??`Navigated to `,r=t?.getAnnouncementText,i=!0,a=!1,o=!1,s=``,c=null,l,u=oe(),d=(e,t)=>{s=e,clearTimeout(l),u.textContent=e,l=setTimeout(()=>{u.textContent=``,s=``},7e3),le(t)},f=setTimeout(()=>{if(a=!0,c!==null&&!o){let e=c;c=null,d(e,document.querySelector(`h1`))}},100),p=e.subscribe(({route:e})=>{if(i){i=!1;return}requestAnimationFrame(()=>{requestAnimationFrame(()=>{if(o)return;let t=document.querySelector(`h1`),i=ce(e,n,r,t);if(!(!i||i===s)){if(!a){c=i;return}d(i,t)}})})});return{destroy(){o=!0,p(),clearTimeout(l),clearTimeout(f),se()}}}function oe(){let e=document.querySelector(`[${O}]`);if(e)return e;let t=document.createElement(`div`);return t.setAttribute(`style`,`position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);clip-path:inset(50%);white-space:nowrap;border:0`),t.setAttribute(`aria-live`,`assertive`),t.setAttribute(`aria-atomic`,`true`),t.setAttribute(O,``),(document.body??document.documentElement).prepend(t),t}function se(){document.querySelector(`[${O}]`)?.remove()}function ce(e,t,n,r){if(n)try{let t=n(e);if(t)return t}catch(e){console.error(`[real-router] getAnnouncementText threw; falling back to default resolution.`,e)}let i=(r?.textContent??``).trim(),a=e.name.startsWith(`@@`)?``:e.name;return`${t}${i||document.title||a||globalThis.location.pathname}`}function le(e){e&&(e.hasAttribute(`tabindex`)||e.setAttribute(`tabindex`,`-1`),e.focus({preventScroll:!0}))}const k=Object.freeze({destroy:()=>{}});function ue(e,t){if(globalThis.window===void 0)return k;let n=t?.mode??`restore`;if(n===`native`)return k;let r=t?.anchorScrolling??!0,i=t?.scrollContainer,a=t?.behavior??`auto`,o=t?.storageKey??`real-router:scroll`,s,c=()=>{if(s!==void 0)return s;try{let e=sessionStorage.getItem(o);s=e?JSON.parse(e):{}}catch{s={}}return s},l=(e,t)=>{try{let n=c();if(n[e]===t)return;n[e]=t,sessionStorage.setItem(o,JSON.stringify(n))}catch{}},u=history.scrollRestoration;try{history.scrollRestoration=`manual`}catch{}let d=()=>{let e=i?.();return e?e.scrollTop:globalThis.scrollY},f=e=>{let t=i?.();t?t.scrollTo({top:e,left:0,behavior:a}):globalThis.scrollTo({top:e,left:0,behavior:a})},p=e=>{let t=e.context?.url?.hash;if(t!==void 0){if(r&&t.length>0){let e=document.getElementById(t);if(e){e.scrollIntoView({behavior:a});return}}f(0);return}let n=globalThis.location.hash;if(r&&n.length>1){let e;try{e=decodeURIComponent(n.slice(1))}catch{e=n.slice(1)}let t=document.getElementById(e);if(t){t.scrollIntoView({behavior:a});return}}f(0)},m=!1,h=!1,g=e=>{try{return j(e)}catch{return h||(h=!0,console.error(`[real-router] scroll-restore: route "${e.name}" has params that cannot be canonicalized (e.g. BigInt or cyclic structure). Scroll position will not be captured or restored for this route.`)),null}},_=e.subscribe(({route:e,previousRoute:t})=>{let r=e.context.navigation;if(t){let e=g(t);e!==null&&l(e,d())}requestAnimationFrame(()=>{if(!m){if(n===`top`||!r){p(e);return}if(r.navigationType!==`replace`){if(r.direction===`back`||r.navigationType===`traverse`||r.navigationType===`reload`){let t=g(e);f(t===null?0:c()[t]??0);return}p(e)}}})}),v=()=>{let t=e.getState();if(t){let e=g(t);e!==null&&l(e,d())}};return globalThis.addEventListener(`pagehide`,v),{destroy:()=>{if(!m){m=!0,_(),globalThis.removeEventListener(`pagehide`,v);try{history.scrollRestoration=u}catch{}}}}}const A=new WeakMap;function j(e){let t=A.get(e);if(t!==void 0)return t;let n=`${e.name}:${M(e.params)}`;return A.set(e,n),n}function M(e){return JSON.stringify(e,N)}function N(e,t){if(typeof t==`function`)return`<fn>`;if(typeof t==`symbol`)return`<sym>`;if(typeof t==`object`&&t&&!Array.isArray(t)){let e=Object.create(null),n=Object.keys(t).sort((e,t)=>e.localeCompare(t));for(let r of n)e[r]=t[r];return e}return t}const P=Object.freeze({destroy:()=>{}});function F(e){if(typeof document>`u`||typeof document.startViewTransition!=`function`)return P;let t=null,n=null,r=!1,i=()=>{t?.(),t=null},a=e.subscribeLeave(({signal:e})=>{if(!e.aborted)return r=!1,i(),new Promise(a=>{let o=new Promise(e=>{t=e});e.addEventListener(`abort`,()=>{r||(i(),n?.skipTransition?.(),a())},{once:!0});try{n=document.startViewTransition(()=>(a(),o))}catch{i(),a()}})}),o=e.subscribe(()=>{let e=t;r=!0,t=null,e===null?n=null:setTimeout(()=>{e(),n=null},0)});return{destroy:()=>{a(),o(),n?.skipTransition?.(),n=null,i()}}}function I(e){return e.button===0&&!e.metaKey&&!e.altKey&&!e.ctrlKey&&!e.shiftKey}const L=/%[\dA-Fa-f]{2}/;function R(e){if(L.test(e))try{return encodeURI(decodeURIComponent(e)).replaceAll(`#`,`%23`)}catch{}return encodeURI(e).replaceAll(`#`,`%23`)}function z(e,t,n,r){try{let i=r?.hash,a;i!==void 0&&(a=i.startsWith(`#`)?i.slice(1):i);let o=e.buildUrl;if(o){let e=o(t,n,a===void 0?void 0:{hash:a});if(typeof e==`string`&&e.length>0)return e}let s=e.buildPath(t,n);if(typeof s!=`string`||s.length===0){console.error(`[real-router] Route "${t}" yielded an empty path. The element will render without an href attribute.`);return}return a?`${s}#${R(a)}`:s}catch{console.error(`[real-router] Route "${t}" is not defined. The element will render without an href attribute.`);return}}function B(e,t,n,r,i){let a={...i};r!==void 0&&(a.hash=r);let o=e.getState();if(o?.name===t&&fe(o.params,n)){let e=o.context?.url?.hash??``;e!==(r??e)&&(a.force=!0,a.hashChange=!0)}return e.navigate(t,n,a)}const V=/\s/,H=/\S+/g;function U(e){return e?V.test(e)?e.match(H)??[]:[e]:[]}function de(e,t,n){if(e&&t){let e=U(t);if(e.length===0)return n??void 0;if(!n)return e.join(` `);let r=U(n),i=new Set(r);for(let t of e)i.has(t)||(i.add(t),r.push(t));return r.join(` `)}return n??void 0}function fe(e,t){if(Object.is(e,t))return!0;if(!e||!t)return!1;let n=Object.keys(e);if(n.length!==Object.keys(t).length)return!1;let r=e,i=t;for(let e of n)if(!Object.prototype.hasOwnProperty.call(t,e)||!Object.is(r[e],i[e]))return!1;return!0}function pe(e){if(!e)return;let t=e.tagName;t===`A`||t===`BUTTON`||(e.hasAttribute(`role`)||e.setAttribute(`role`,`link`),e.hasAttribute(`tabindex`)||e.setAttribute(`tabindex`,`0`))}function me(e,t){if(typeof e==`function`){e(t);return}if(Array.isArray(e)){let n=e;for(let e of n)if(typeof e==`function`&&(e(t),t.defaultPrevented))return}}const he=(0,t.defineComponent)({name:`Link`,inheritAttrs:!1,props:{routeName:{type:String,required:!0},routeParams:{type:Object,default:()=>ne},routeOptions:{type:Object,default:()=>re},class:{type:String,default:void 0},activeClassName:{type:String,default:`active`},activeStrict:{type:Boolean,default:!1},ignoreQueryParams:{type:Boolean,default:!0},target:{type:String,default:void 0},hash:{type:String,default:void 0}},setup(e,{slots:n,attrs:r}){let a=y(),o=(0,t.shallowRef)(!1);(0,t.watch)(()=>[e.routeName,(0,i.canonicalJson)(e.routeParams),e.activeStrict,e.ignoreQueryParams,e.hash],([t,n,r,s,c],l,u)=>{let d=e.routeParams,f=(0,i.createActiveRouteSource)(a,t,d,c===void 0?{strict:r,ignoreQueryParams:s}:{strict:r,ignoreQueryParams:s,hash:c});o.value=f.getSnapshot(),u(f.subscribe(()=>{o.value=f.getSnapshot()}))},{immediate:!0,flush:`sync`});let s=(0,t.computed)(()=>z(a,e.routeName,e.routeParams,e.hash===void 0?void 0:{hash:e.hash})),c=(0,t.computed)(()=>de(o.value,e.activeClassName,e.class)),l=t=>{r.onClick!==void 0&&r.onClick!==null&&(me(r.onClick,t),t.defaultPrevented)||!I(t)||e.target===`_blank`||(t.preventDefault(),B(a,e.routeName,e.routeParams,e.hash,e.routeOptions).catch(()=>{}))};return()=>{let i={...r};return delete i.onClick,(0,t.h)(`a`,{...i,href:s.value,class:c.value,target:e.target,onClick:l},n.default?.())}}}),ge=(0,t.defineComponent)({name:`RouterErrorBoundary`,props:{fallback:{type:Function,required:!0},onError:{type:Function,default:void 0}},setup(e,{slots:n}){let r=v((0,i.createDismissableError)(y()));return(0,t.watch)(()=>r.value.version,()=>{r.value.error&&e.onError?.(r.value.error,r.value.toRoute,r.value.fromRoute)},{immediate:!0}),()=>{let i=n.default?.()??[],a=r.value.error?e.fallback(r.value.error,r.value.resetError):null;return(0,t.h)(t.Fragment,null,[...i,a])}}}),W=[];function G(e){return W.push(e),()=>{let t=W.lastIndexOf(e);t!==-1&&W.splice(t,1)}}function K(){let e=W.at(-1);if(!e)throw Error(`v-link directive requires a RouterProvider ancestor. Make sure RouterProvider is mounted.`);return e}const q=new WeakMap;function J(e){return e==null?(console.error(`[real-router] v-link directive received null/undefined value. The element will not be wired for navigation.`),!1):typeof e.name==`string`?!0:(console.error("[real-router] v-link directive value is missing a string `name` field. The element will not be wired for navigation."),!1)}function _e(e,t){return n=>{I(n)&&(n.preventDefault(),e.navigate(t.name,t.params??{},t.options??{}).catch(()=>{}))}}function ve(e,t,n){return r=>{r.key===`Enter`&&!(n instanceof HTMLButtonElement)&&e.navigate(t.name,t.params??{},t.options??{}).catch(()=>{})}}function Y(e,t,n){let r=_e(t,n),i=ve(t,n,e);e.addEventListener(`click`,r),e.addEventListener(`keydown`,i),q.set(e,{click:r,keydown:i})}function X(e){let t=q.get(e);t&&(e.removeEventListener(`click`,t.click),e.removeEventListener(`keydown`,t.keydown),q.delete(e))}const ye={mounted(e,t){let n=K();pe(e),e.style.cursor=`pointer`,J(t.value)&&Y(e,n,t.value)},updated(e,t){if(t.value===t.oldValue)return;let n=K();X(e),J(t.value)&&Y(e,n,t.value)},beforeUnmount(e){X(e)}},be=()=>{let n=(0,t.inject)(e.r);if(!n)throw Error(`useNavigator must be used within a RouterProvider`);return n},xe=()=>(0,r.getRouteUtils)((0,a.getPluginApi)(y()).getTree());function Se(){return v((0,i.getTransitionSource)(y()))}function Z(e,n){let r=y(),i=n?.skipSameRoute??!0;(0,t.onScopeDispose)(r.subscribeLeave(({route:t,nextRoute:n,signal:r})=>{if(!(i&&t.name===n.name)&&!r.aborted)return e({route:t,nextRoute:n,signal:r})}))}function Ce(n,r){let{route:i,previousRoute:a}=e.t(),o=r?.skipSameRoute??!0,s=null;(0,t.watch)(i,e=>{let t=a.value;e.transition.from&&(o&&e.transition.from===e.name||s===e||!t||(s=e,n({route:e,previousRoute:t})))})}function Q(e){let r=(0,n.getNavigator)(e),a=(0,i.createRouteSource)(e),o=a.getSnapshot(),s=(0,t.shallowRef)(o.route),c=(0,t.shallowRef)(o.previousRoute);return{navigator:r,route:s,previousRoute:c,unsubscribe:a.subscribe(()=>{let e=a.getSnapshot();s.value=e.route,c.value=e.previousRoute})}}function we(t){return{install(n){let r=G(t),{navigator:i,route:a,previousRoute:o,unsubscribe:s}=Q(t);`onUnmount`in n&&n.onUnmount(()=>{r(),s()}),n.provide(e.a,t),n.provide(e.r,i),n.provide(e.i,{navigator:i,route:a,previousRoute:o})}}}function $(e,n){(0,t.watch)(e,(e,t,r)=>{let i=n(e);i&&r(()=>{i.destroy()})},{immediate:!0})}const Te=(0,t.defineComponent)({name:`RouterProvider`,props:{router:{type:Object,required:!0},announceNavigation:{type:Boolean,default:!1},scrollRestoration:{type:Object},viewTransitions:{type:Boolean,default:!1}},setup(n,{slots:r}){$(()=>[n.router,n.announceNavigation],([e,t])=>t?ae(e):void 0),$(()=>[n.router,n.scrollRestoration!==void 0,n.scrollRestoration?.mode,n.scrollRestoration?.anchorScrolling,n.scrollRestoration?.behavior,n.scrollRestoration?.storageKey],([e,t,r,i,a,o])=>{if(t)return ue(e,{mode:r,anchorScrolling:i,behavior:a,storageKey:o,scrollContainer:n.scrollRestoration?.scrollContainer})}),$(()=>[n.router,n.viewTransitions],([e,t])=>t?F(e):void 0);let i=G(n.router),{navigator:a,route:o,previousRoute:s,unsubscribe:c}=Q(n.router);return(0,t.onScopeDispose)(()=>{i(),c()}),(0,t.provide)(e.a,n.router),(0,t.provide)(e.r,a),(0,t.provide)(e.i,{navigator:a,route:o,previousRoute:s}),()=>r.default?.()}});exports.Link=he,exports.NavigatorKey=e.r,exports.RouteKey=e.i,exports.RouteView=D,exports.RouterErrorBoundary=ge,exports.RouterKey=e.a,exports.RouterProvider=Te,exports.createRouterPlugin=we,exports.useNavigator=be,exports.useRoute=e.t,exports.useRouteEnter=Ce,exports.useRouteExit=Z,exports.useRouteNode=b,exports.useRouteUtils=xe,exports.useRouter=y,exports.useRouterTransition=Se,exports.vLink=ye;
2
2
  //# sourceMappingURL=index.js.map