@real-router/vue 0.14.0 → 0.15.1

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.
package/README.md CHANGED
@@ -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 (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.
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/hash-examples/link-hash/`](../../examples/web/react/hash-examples/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
 
@@ -609,6 +609,32 @@ h(
609
609
 
610
610
  Restores scroll on back/forward, scrolls to top (or `#hash`) on push. Three modes: `"restore"` (default), `"top"`, `"native"`. Custom containers via `scrollContainer: () => HTMLElement | null`. Prop is reactive — toggling mode at runtime reconfigures the utility (watched by primitive fields, so inline objects with the same fields do not thrash). Under `@real-router/browser-plugin`, replace transitions now preserve scroll position and programmatic reloads restore from `sessionStorage` (portable via `state.transition.replace` / `state.transition.reload`). See [Scroll Restoration guide](https://github.com/greydragon888/real-router/wiki/Scroll-Restoration) for the full behaviour matrix.
611
611
 
612
+ ## Scroll Spy
613
+
614
+ Opt-in router-coordinated `IntersectionObserver` scroll spy — the URL hash tracks the topmost visible anchor as the user scrolls, syncing `state.context.url.hash` so sibling `<Link hash>` highlights stay current:
615
+
616
+ ```vue
617
+ <RouterProvider :router="router" :scroll-spy="{ selector: '[id]:is(h2,h3)' }">
618
+ <!-- Your app -->
619
+ </RouterProvider>
620
+ ```
621
+
622
+ Or via `h()`:
623
+
624
+ ```typescript
625
+ h(
626
+ RouterProvider,
627
+ { router, scrollSpy: { selector: "[id]:is(h2,h3)" } },
628
+ { default: () => [/* Your app */] },
629
+ );
630
+ ```
631
+
632
+ Emits a forced same-route transition with `{ hash, replace: true, force: true, hashChange: true }` — same write API as `<Link hash>` (#532), `replace: true` so spy doesn't pollute history. Anti-flicker via `isTransitioning` + `coolingDown` gates with `selfEmitting` guard. Hardcoded internals: rAF + 150 ms debounce, MutationObserver 250 ms.
633
+
634
+ Options: `{ selector: string, rootMargin?: string, scrollContainer?: () => HTMLElement | null }`. Empty `selector` / `undefined` = off. Reactive — toggling via ref creates/destroys the utility (watched by primitive fields, so inline objects with the same `selector`/`rootMargin` don't thrash). SSR / browsers without `IntersectionObserver` = NOOP. Requires `browser-plugin` or `navigation-plugin` (hash-plugin / memory-plugin → warn-once + NOOP).
635
+
636
+ Behaviour is identical to the React adapter — see the [React Scroll Spy demo](../../examples/web/react/hash-examples/scroll-spy/) (12 sections, TOC sidebar, 10 e2e scenarios) and the [Scroll Spy guide](https://github.com/greydragon888/real-router/wiki/Scroll-Spy).
637
+
612
638
  ## View Transitions
613
639
 
614
640
  Opt-in animated route transitions via the browser's [View Transitions API](https://developer.mozilla.org/en-US/docs/Web/API/View_Transitions_API):
@@ -635,7 +661,7 @@ Prop is reactive — toggling `true`/`false` at runtime creates/destroys the uti
635
661
 
636
662
  Full documentation: [Wiki](https://github.com/greydragon888/real-router/wiki)
637
663
 
638
- - [RouterProvider](https://github.com/greydragon888/real-router/wiki/RouterProvider) · [RouteView](https://github.com/greydragon888/real-router/wiki/RouteView) · [RouterErrorBoundary](https://github.com/greydragon888/real-router/wiki/RouterErrorBoundary) · [Link](https://github.com/greydragon888/real-router/wiki/Link) · [Scroll Restoration](https://github.com/greydragon888/real-router/wiki/Scroll-Restoration) · [View Transitions](https://github.com/greydragon888/real-router/wiki/View-Transitions)
664
+ - [RouterProvider](https://github.com/greydragon888/real-router/wiki/RouterProvider) · [RouteView](https://github.com/greydragon888/real-router/wiki/RouteView) · [RouterErrorBoundary](https://github.com/greydragon888/real-router/wiki/RouterErrorBoundary) · [Link](https://github.com/greydragon888/real-router/wiki/Link) · [Scroll Restoration](https://github.com/greydragon888/real-router/wiki/Scroll-Restoration) · [Scroll Spy](https://github.com/greydragon888/real-router/wiki/Scroll-Spy) · [View Transitions](https://github.com/greydragon888/real-router/wiki/View-Transitions)
639
665
  - [useRouter](https://github.com/greydragon888/real-router/wiki/useRouter) · [useRoute](https://github.com/greydragon888/real-router/wiki/useRoute) · [useRouteNode](https://github.com/greydragon888/real-router/wiki/useRouteNode) · [useNavigator](https://github.com/greydragon888/real-router/wiki/useNavigator) · [useRouteUtils](https://github.com/greydragon888/real-router/wiki/useRouteUtils) · [useRouterTransition](https://github.com/greydragon888/real-router/wiki/useRouterTransition) · [useRouteExit](https://github.com/greydragon888/real-router/wiki/useRouteExit) · [useRouteEnter](https://github.com/greydragon888/real-router/wiki/useRouteEnter)
640
666
 
641
667
  ## Examples
@@ -29,4 +29,4 @@ interface HttpStatusSink {
29
29
  declare function createHttpStatusSink(): HttpStatusSink;
30
30
  //#endregion
31
31
  export { createHttpStatusSink as n, HttpStatusSink as t };
32
- //# sourceMappingURL=createHttpStatusSink-XDu5aGhc.d.ts.map
32
+ //# sourceMappingURL=createHttpStatusSink-BENH-5-J.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"createHttpStatusSink-XDu5aGhc.d.ts","names":[],"sources":["../../src/utils/createHttpStatusSink.ts"],"mappings":";;AAwBA;;;;AACM;AAGN;;;;AAAsD;;;;;;;;;;;;;;UAJrC,cAAA;EACf,IAAI;AAAA;AAAA,iBAGU,oBAAA,CAAA,GAAwB,cAAc"}
1
+ {"version":3,"file":"createHttpStatusSink-BENH-5-J.d.ts","names":[],"sources":["../../src/utils/createHttpStatusSink.ts"],"mappings":";;AAwBA;;;;AACM;AAGN;;;;AAAsD;;;;;;;;;;;;;;UAJrC,cAAA;EACf,IAAI;AAAA;AAAA,iBAGU,oBAAA,CAAA,GAAwB,cAAc"}
@@ -496,6 +496,66 @@ interface ScrollRestorationOptions {
496
496
  storageKey?: string | undefined;
497
497
  }
498
498
  //#endregion
499
+ //#region ../../shared/dom-utils/scroll-spy.d.ts
500
+ /**
501
+ * Router-coordinated scroll spy (#575).
502
+ *
503
+ * On `IntersectionObserver` notifications the utility picks the topmost
504
+ * visible anchor inside the configured scroll container and emits a forced
505
+ * same-route transition with `{ hash, replace: true, force: true, hashChange:
506
+ * true }` through `router.navigate(...)`. The URL plugin
507
+ * (`@real-router/browser-plugin` or `@real-router/navigation-plugin`) updates
508
+ * `state.context.url.hash` so sibling hash-aware `<Link hash>` re-highlights
509
+ * via the standard `createActiveRouteSource` pipeline.
510
+ *
511
+ * **Anti-flicker gates** (RFC §5.2):
512
+ * 1. `getTransitionSource(router).getSnapshot().isTransitioning` — skip emits
513
+ * while a transition is in-flight (re-entrant lock).
514
+ * 2. `coolingDown` — set on a user-driven hash transition (e.g. `<Link hash>`
515
+ * click + smooth `scrollIntoView`). Cleared on `scrollend` or after a
516
+ * 500ms safety timeout. Spy's own emits are excluded via the synchronous
517
+ * `selfEmitting` flag — required so the spy doesn't rate-limit itself.
518
+ *
519
+ * **Self-healing** (RFC §7.3): if the initial URL contains a hash without a
520
+ * matching `id` (e.g. `/page#nonexistent`), the first IO event emitted right
521
+ * after observe()-ing picks the topmost real anchor and corrects the URL.
522
+ *
523
+ * **Hash-only transition pipeline cost** (RFC §5.3): for same-route same-
524
+ * params hash-only navigations, `getTransitionPath` returns empty
525
+ * `toDeactivate` / `toActivate` arrays, so `runGuards` is a no-op. The only
526
+ * work is the URL plugin's `onTransitionSuccess` write and the
527
+ * `getTransitionSource` flip — cheap.
528
+ *
529
+ * **Architecture**: decomposed into 4 private subsystem closure factories
530
+ * (`createUrlPluginDetector`, `createCooldown`, `createDebouncer`,
531
+ * `createObserverPair`). The main `createScrollSpy` wires them together
532
+ * around the shared `silenced` / `destroyed` / `selfEmitting` flags and the
533
+ * `flush()` emit logic. Each subsystem owns its state + cleanup; `destroy()`
534
+ * delegates to each. See section banners below.
535
+ *
536
+ * @returns A `ScrollSpy` handle whose `destroy()` is idempotent.
537
+ */
538
+ interface ScrollSpyOptions {
539
+ /**
540
+ * CSS selector for anchor candidates. Empty string `""` or `undefined`
541
+ * disables the spy (returns a NOOP handle). Common values:
542
+ * `"[id]"`, `"[id]:is(h1,h2,h3)"`, `"section[id]"`.
543
+ */
544
+ selector: string;
545
+ /**
546
+ * `IntersectionObserver` `rootMargin`. Default
547
+ * `"-20% 0px -60% 0px"` — an anchor is considered "active" once it crosses
548
+ * into the top 20 % of the viewport (or scroll container).
549
+ */
550
+ rootMargin?: string | undefined;
551
+ /**
552
+ * Lazy getter for the scrollable container. Resolved on every event.
553
+ * `null` (or missing getter) falls back to the window viewport
554
+ * (`root: null` on the `IntersectionObserver`).
555
+ */
556
+ scrollContainer?: (() => HTMLElement | null) | undefined;
557
+ }
558
+ //#endregion
499
559
  //#region src/RouterProvider.d.ts
500
560
  declare const RouterProvider: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
501
561
  router: {
@@ -509,6 +569,9 @@ declare const RouterProvider: import("vue").DefineComponent<import("vue").Extrac
509
569
  scrollRestoration: {
510
570
  type: PropType<ScrollRestorationOptions>;
511
571
  };
572
+ scrollSpy: {
573
+ type: PropType<ScrollSpyOptions>;
574
+ };
512
575
  viewTransitions: {
513
576
  type: BooleanConstructor;
514
577
  default: boolean;
@@ -527,6 +590,9 @@ declare const RouterProvider: import("vue").DefineComponent<import("vue").Extrac
527
590
  scrollRestoration: {
528
591
  type: PropType<ScrollRestorationOptions>;
529
592
  };
593
+ scrollSpy: {
594
+ type: PropType<ScrollSpyOptions>;
595
+ };
530
596
  viewTransitions: {
531
597
  type: BooleanConstructor;
532
598
  default: boolean;
@@ -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","../../../../shared/dom-utils/scroll-spy.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`});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`){p(e);return}if(!(e.transition.replace||r?.navigationType===`replace`)){if(e.transition.reload||r?.navigationType===`reload`){let t=g(e);f(t===null?0:c()[t]??0);return}if(r?.direction===`back`||r?.navigationType===`traverse`){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;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./useRoute-Dba_kop6.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 ne(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 re=(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 ne(h,i,f);let g=x(h);return g?C((0,t.h)(t.Fragment,g),f):null}}}),T=Object.assign(re,{Match:s,Self:c,NotFound:l}),ie=Object.freeze({}),ae=Object.freeze({}),E=`data-real-router-announcer`,D=Object.freeze({destroy:()=>{}});function oe(e,t){if(typeof document>`u`)return D;let n=t?.prefix??`Navigated to `,r=t?.getAnnouncementText,i=!0,a=!1,o=!1,s=``,c=null,l,u=se(),d=(e,t)=>{s=e,clearTimeout(l),u.textContent=e,l=setTimeout(()=>{u.textContent=``,s=``},7e3),ue(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=le(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),ce()}}}function se(){let e=document.querySelector(`[${E}]`);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(E,``),(document.body??document.documentElement).prepend(t),t}function ce(){document.querySelector(`[${E}]`)?.remove()}function le(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 ue(e){e&&(e.hasAttribute(`tabindex`)||e.setAttribute(`tabindex`,`-1`),e.focus({preventScroll:!0}))}const O=Object.freeze({destroy:()=>{}});function de(e,t){if(globalThis.window===void 0)return O;let n=t?.mode??`restore`;if(n===`native`)return O;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=>{if(!i){globalThis.scrollTo({top:e,left:0,behavior:a});return}let t=0,n=()=>{if(h)return;let r=i();if(r){if(r.scrollTo({top:e,left:0,behavior:a}),a!==`smooth`&&Math.abs(r.scrollTop-e)<=1)return}else globalThis.scrollTo({top:e,left:0,behavior:a});t>=10||(t+=1,requestAnimationFrame(n))};n()},m=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)},h=!1,g=!1,_=e=>{try{return fe(e)}catch{return g||(g=!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}},v=e.subscribe(({route:e,previousRoute:t})=>{let r=e.context.navigation;if(t){let e=_(t);e!==null&&l(e,d())}requestAnimationFrame(()=>{if(!h){if(n===`top`){m(e);return}if(e.transition.reload||r?.navigationType===`reload`){let t=_(e);p(t===null?0:c()[t]??0);return}if(r?.direction===`back`||r?.navigationType===`traverse`){let t=_(e);p(t===null?0:c()[t]??0);return}e.transition.replace||r?.navigationType===`replace`||m(e)}})}),y=()=>{let t=e.getState();if(t){let e=_(t);e!==null&&l(e,d())}};return globalThis.addEventListener(`pagehide`,y),{destroy:()=>{if(!h){h=!0,v(),globalThis.removeEventListener(`pagehide`,y);try{history.scrollRestoration=u}catch{}}}}}const k=new WeakMap;function fe(e){let t=k.get(e);if(t!==void 0)return t;let n=`${e.name}:${A(e.params)}`;return k.set(e,n),n}function A(e){return JSON.stringify(e,j)}function j(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 M=Object.freeze({destroy:()=>{}}),N=e=>e.context?.url,P=e=>{let t=null,n=1/0,r=null,i=-1/0;for(let a of e){if(!a.isIntersecting)continue;let e=a.rootBounds?.top??0,o=a.boundingClientRect.top-e;o>=0?o<n&&(t=a,n=o):o>i&&(r=a,i=o)}return t??r},F=(e,t)=>{let n=null,r=e=>{let n=e.context;n&&n.url===void 0&&(console.warn(`[real-router] scroll-spy: state.context.url is not claimed. Spy requires browser-plugin or navigation-plugin. Disabling.`),t())},i=e.getState();if(i)r(i);else{let t=!1;n=e.subscribe(({route:e})=>{t||(t=!0,r(e),n?.(),n=null)})}return{destroy(){n?.(),n=null}}},I=e=>{let t=!1,n=null,r=null,i=null,a=()=>{n!==null&&(clearTimeout(n),n=null),i&&(r??globalThis).removeEventListener(`scrollend`,i),i=null,r=null,t=!1};return{get active(){return t},start(){a(),t=!0;let o=()=>{a()};i=o,r=e(),(r??globalThis).addEventListener(`scrollend`,o,{once:!0}),n=setTimeout(o,500)},destroy(){a()}}},L=(e,t)=>{let n=null,r=null;return{schedule(){n===null&&(n=requestAnimationFrame(()=>{n=null,r!==null&&clearTimeout(r),r=setTimeout(()=>{r=null,e()},t)}))},destroy(){n!==null&&(cancelAnimationFrame(n),n=null),r!==null&&(clearTimeout(r),r=null)}}},R=(e,t,n,r,i,a)=>{let o=new Set,s=new Map,c=!1,l=null,u=new IntersectionObserver(e=>{if(!a()){for(let t of e)s.set(t.target,t);r()}},{root:n(),rootMargin:t,threshold:0}),d=()=>{let t=n()??document,r;try{r=t.querySelectorAll(e)}catch{i();return}let a=new Set;for(let e of r){let t=e.id;t&&!c&&(a.has(t)&&(c=!0,console.warn(`[real-router] scroll-spy: duplicate id "${t}" observed. Selection picks the topmost visible match deterministically.`)),a.add(t)),!o.has(e)&&(u.observe(e),o.add(e))}},f=()=>{for(let e of o)e.isConnected||(u.unobserve(e),o.delete(e),s.delete(e));d()};d();let p=n()??document.body,m=new MutationObserver(()=>{l!==null&&clearTimeout(l),l=setTimeout(()=>{l=null,f()},250)});return m.observe(p,{childList:!0,subtree:!0,attributes:!0,attributeFilter:[`id`]}),{pending:s,destroy(){u.disconnect(),m.disconnect(),l!==null&&(clearTimeout(l),l=null),o.clear(),s.clear()}}};function z(e,t){if(typeof document>`u`||typeof IntersectionObserver>`u`)return M;let{selector:n}=t;if(!n)return M;let r=t.rootMargin??`-20% 0px -60% 0px`,a=t.scrollContainer,o=()=>a?.()??null,s=!1,c=!1,l=!1,u=()=>c||s,d=null,f=(0,i.getTransitionSource)(e),p=F(e,()=>{c=!0}),m=I(o),h=L(()=>{d?.()},150),g=R(n,r,o,()=>{h.schedule()},()=>{c||(c=!0,console.warn(`[real-router] scroll-spy: invalid selector "${n}". Disabling.`))},u);d=()=>{if(s||c){g.pending.clear();return}if(f.getSnapshot().isTransitioning||m.active||g.pending.size===0)return;let t=P(g.pending.values());if(g.pending.clear(),!t)return;let n=t.target.id;if(!n)return;let r=e.getState();if(!r||n===(N(r)?.hash??``))return;let i={hash:n,replace:!0,force:!0,hashChange:!0};l=!0,e.navigate(r.name,r.params,i).catch(()=>{}).finally(()=>{l=!1})};let _=e.subscribe(({route:e})=>{l||N(e)?.hashChanged&&m.start()});return{destroy(){s||(s=!0,_(),g.destroy(),h.destroy(),m.destroy(),p.destroy())}}}const B=Object.freeze({destroy:()=>{}});function V(e){if(typeof document>`u`||typeof document.startViewTransition!=`function`)return B;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 H(e){return e.button===0&&!e.metaKey&&!e.altKey&&!e.ctrlKey&&!e.shiftKey}const pe=/%[\dA-Fa-f]{2}/;function me(e){if(pe.test(e))try{return encodeURI(decodeURIComponent(e)).replaceAll(`#`,`%23`)}catch{}return encodeURI(e).replaceAll(`#`,`%23`)}function he(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}#${me(a)}`:s}catch{console.error(`[real-router] Route "${t}" is not defined. The element will render without an href attribute.`);return}}function ge(e,t,n,r,i){let a={...i};r!==void 0&&(a.hash=r);let o=e.getState();if(o?.name===t&&ye(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 _e=/\s/,U=/\S+/g;function W(e){return e?_e.test(e)?e.match(U)??[]:[e]:[]}function ve(e,t,n){if(e&&t){let e=W(t);if(e.length===0)return n??void 0;if(!n)return e.join(` `);let r=W(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 ye(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 be(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 xe(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 Se=(0,t.defineComponent)({name:`Link`,inheritAttrs:!1,props:{routeName:{type:String,required:!0},routeParams:{type:Object,default:()=>ie},routeOptions:{type:Object,default:()=>ae},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)(()=>he(a,e.routeName,e.routeParams,e.hash===void 0?void 0:{hash:e.hash})),c=(0,t.computed)(()=>ve(o.value,e.activeClassName,e.class)),l=t=>{r.onClick!==void 0&&r.onClick!==null&&(xe(r.onClick,t),t.defaultPrevented)||!H(t)||e.target===`_blank`||(t.preventDefault(),ge(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?.())}}}),Ce=(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])}}}),G=[];function K(e){return G.push(e),()=>{let t=G.lastIndexOf(e);t!==-1&&G.splice(t,1)}}function q(){let e=G.at(-1);if(!e)throw Error(`v-link directive requires a RouterProvider ancestor. Make sure RouterProvider is mounted.`);return e}const J=new WeakMap;function Y(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 we(e,t){return n=>{H(n)&&(n.preventDefault(),e.navigate(t.name,t.params??{},t.options??{}).catch(()=>{}))}}function Te(e,t,n){return r=>{r.key===`Enter`&&!(n instanceof HTMLButtonElement)&&e.navigate(t.name,t.params??{},t.options??{}).catch(()=>{})}}function X(e,t,n){let r=we(t,n),i=Te(t,n,e);e.addEventListener(`click`,r),e.addEventListener(`keydown`,i),J.set(e,{click:r,keydown:i})}function Z(e){let t=J.get(e);t&&(e.removeEventListener(`click`,t.click),e.removeEventListener(`keydown`,t.keydown),J.delete(e))}const Ee={mounted(e,t){let n=q();be(e),e.style.cursor=`pointer`,Y(t.value)&&X(e,n,t.value)},updated(e,t){if(t.value===t.oldValue)return;let n=q();Z(e),Y(t.value)&&X(e,n,t.value)},beforeUnmount(e){Z(e)}},De=()=>{let n=(0,t.inject)(e.r);if(!n)throw Error(`useNavigator must be used within a RouterProvider`);return n},Oe=()=>(0,r.getRouteUtils)((0,a.getPluginApi)(y()).getTree());function ke(){return v((0,i.getTransitionSource)(y()))}function Ae(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 je(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 Me(t){return{install(n){let r=K(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 Ne=(0,t.defineComponent)({name:`RouterProvider`,props:{router:{type:Object,required:!0},announceNavigation:{type:Boolean,default:!1},scrollRestoration:{type:Object},scrollSpy:{type:Object},viewTransitions:{type:Boolean,default:!1}},setup(n,{slots:r}){$(()=>[n.router,n.announceNavigation],([e,t])=>t?oe(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 de(e,{mode:r,anchorScrolling:i,behavior:a,storageKey:o,scrollContainer:n.scrollRestoration?.scrollContainer})}),$(()=>[n.router,n.scrollSpy!==void 0&&n.scrollSpy.selector!==``,n.scrollSpy?.selector,n.scrollSpy?.rootMargin],([e,t,r,i])=>{if(!(!t||!r))return z(e,{selector:r,rootMargin:i,scrollContainer:n.scrollSpy?.scrollContainer})}),$(()=>[n.router,n.viewTransitions],([e,t])=>t?V(e):void 0);let i=K(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=Se,exports.NavigatorKey=e.r,exports.RouteKey=e.i,exports.RouteView=T,exports.RouterErrorBoundary=Ce,exports.RouterKey=e.a,exports.RouterProvider=Ne,exports.createRouterPlugin=Me,exports.useNavigator=De,exports.useRoute=e.t,exports.useRouteEnter=je,exports.useRouteExit=Ae,exports.useRouteNode=b,exports.useRouteUtils=Oe,exports.useRouter=y,exports.useRouterTransition=ke,exports.vLink=Ee;
2
2
  //# sourceMappingURL=index.js.map