@real-router/vue 0.3.5 → 0.3.6

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.
@@ -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/createRouterPlugin.ts","../../src/RouterProvider.ts","../../src/context.ts"],"mappings":";;;;;;;UAEiB,cAAA;EAAA,SACN,QAAA;EAAA,SACA,SAAA;AAAA;AAAA,UAGM,UAAA;EAAA,SACN,OAAA;EAAA,SACA,KAAA;EAAA,SACA,QAAA,GAAW,KAAA,UAAe,KAAA;EAAA,SAC1B,SAAA;AAAA;AAAA,KAGC,aAAA,GAAgB,MAAA;;;cC6Lf,SAAA;EAAA,sBAtDO,KAAA,CAAA,uCAAA;;;;;;;;;4BAAL,KAAA,qBAAK,KAAA,CAAO,qBAAA,EAAA,KAAA,CAAA,qBAAA,MAAA,KAAA,CAAA,WAAA;;mBAAA,KAAA,CAAA,gBAAA;;;;;;;;;;;;;;;;4BAAZ,KAAA;;;;;;;;;;;;;;;0BAAA,KAAA,qBAAK,KAAA,CAAO,qBAAA,EAAA,KAAA,CAAA,qBAAA;;mBAAA,KAAA,CAAA,gBAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cC3Id,IAAA,QAAI,eAAA,OAAA,gBAAA;;;;;;UAQK,QAAA,CAAS,MAAA;;;;UAIT,QAAA,CAAS,iBAAA;;;;;;;;;;;;;;;;;;;;;;;sBAZd,KAAA,CAAA,YAAA;;;;;;;;UAQK,QAAA,CAAS,MAAA;;;;UAIT,QAAA,CAAS,iBAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cCflB,mBAAA,QAAmB,eAAA,CAUA,KAAA,CAVA,gBAAA;;UAIR,QAAA,EACf,KAAA,EAAO,WAAA,EAAa,UAAA,iBAA2B,KAAA;;;;UAKhC,QAAA,EAEd,KAAA,EAAO,WAAA,EACP,OAAA,EAAS,KAAA,SACT,SAAA,EAAW,KAAA;;;gBAdW,KAAA,CAAA,YAAA;;kHAUA,KAAA,CAAA,gBAAA;;UANR,QAAA,EACf,KAAA,EAAO,WAAA,EAAa,UAAA,iBAA2B,KAAA;;;;UAKhC,QAAA,EAEd,KAAA,EAAO,WAAA,EACP,OAAA,EAAS,KAAA,SACT,SAAA,EAAW,KAAA;;;;mBAFJ,WAAA,EAAW,OAAA,EACT,KAAA,SAAY,SAAA,EACV,KAAA;AAAA,uBAAK,KAAA,CAAA,uBAAA;AAAA,KA6Cd,wBAAA,GAA2B,YAAA,QAC9B,mBAAA;;;UC9DQ,kBAAA;EACf,IAAA;EACA,MAAA,GAAS,MAAA;EACT,OAAA,GAAU,iBAAA;AAAA;AAAA,cAsFC,KAAA,EAAO,SAAA,CAAU,WAAA,EAAa,kBAAA;;;cCxF9B,SAAA,QAAgB,MAAA;;;cCAhB,YAAA,QAAmB,WAAA;;;cCCnB,aAAA,QAAoB,UAAA;;;UCChB,YAAA;EACf,SAAA,EAAW,WAAA;EACX,KAAA,EAAO,UAAA,CAAW,KAAA;EAClB,aAAA,EAAe,UAAA,CAAW,KAAA;AAAA;AAAA,UAGX,SAAA,WAAoB,MAAA,GAAS,MAAA;EAC5C,SAAA;EACA,WAAA,GAAc,CAAA;EACd,YAAA,GAAe,iBAAA;EACf,KAAA;EACA,eAAA;EACA,YAAA;EACA,iBAAA;EACA,MAAA;AAAA;;;cChBW,QAAA,QAAe,YAAA;;;iBCIZ,YAAA,CAAa,QAAA,WAAmB,YAAA;;;iBCFhC,mBAAA,CAAA,GAAuB,UAAA,CAAW,0BAAA;;;iBCElC,kBAAA,CAAmB,MAAA,EAAQ,MAAA,GAAS,MAAA;;;cCQvC,cAAA,QAAc,eAAA,OAAA,gBAAA;;UAIL,QAAA,CAAS,MAAA;;;;;;;sBAJJ,KAAA,CAAA,YAAA;;;;UAIL,QAAA,CAAS,MAAA;;;;;;;;;;;;cClBlB,SAAA,EAAW,YAAA,CAAa,MAAA;AAAA,cAExB,YAAA,EAAc,YAAA,CAAa,WAAA;AAAA,cAE3B,QAAA,EAAU,YAAA,CAAa,YAAA"}
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/createRouterPlugin.ts","../../src/RouterProvider.ts","../../src/context.ts"],"mappings":";;;;;;;UAEiB,cAAA;EAAA,SACN,QAAA;EAAA,SACA,SAAA;AAAA;AAAA,UAGM,UAAA;EAAA,SACN,OAAA;EAAA,SACA,KAAA;EAAA,SACA,QAAA,GAAW,KAAA,UAAe,KAAA;EAAA,SAC1B,SAAA;AAAA;AAAA,KAGC,aAAA,GAAgB,MAAA;;;cC6Lf,SAAA;EAAA,sBAtDO,KAAA,CAAA,uCAAA;;;;;;;;;4BAAL,KAAA,qBAAK,KAAA,CAAO,qBAAA,EAAA,KAAA,CAAA,qBAAA,MAAA,KAAA,CAAA,WAAA;;mBAAA,KAAA,CAAA,gBAAA;;;;;;;;;;;;;;;;4BAAZ,KAAA;;;;;;;;;;;;;;;0BAAA,KAAA,qBAAK,KAAA,CAAO,qBAAA,EAAA,KAAA,CAAA,qBAAA;;mBAAA,KAAA,CAAA,gBAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cCvId,IAAA,QAAI,eAAA,OAAA,gBAAA;;;;;;UAQK,QAAA,CAAS,MAAA;;;;UAIT,QAAA,CAAS,iBAAA;;;;;;;;;;;;;;;;;;;;;;;sBAZd,KAAA,CAAA,YAAA;;;;;;;;UAQK,QAAA,CAAS,MAAA;;;;UAIT,QAAA,CAAS,iBAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cCnBlB,mBAAA,QAAmB,eAAA,CAUA,KAAA,CAVA,gBAAA;;UAIR,QAAA,EACf,KAAA,EAAO,WAAA,EAAa,UAAA,iBAA2B,KAAA;;;;UAKhC,QAAA,EAEd,KAAA,EAAO,WAAA,EACP,OAAA,EAAS,KAAA,SACT,SAAA,EAAW,KAAA;;;gBAdW,KAAA,CAAA,YAAA;;kHAUA,KAAA,CAAA,gBAAA;;UANR,QAAA,EACf,KAAA,EAAO,WAAA,EAAa,UAAA,iBAA2B,KAAA;;;;UAKhC,QAAA,EAEd,KAAA,EAAO,WAAA,EACP,OAAA,EAAS,KAAA,SACT,SAAA,EAAW,KAAA;;;;mBAFJ,WAAA,EAAW,OAAA,EACT,KAAA,SAAY,SAAA,EACV,KAAA;AAAA,uBAAK,KAAA,CAAA,uBAAA;AAAA,KA6Cd,wBAAA,GAA2B,YAAA,QAC9B,mBAAA;;;UC9DQ,kBAAA;EACf,IAAA;EACA,MAAA,GAAS,MAAA;EACT,OAAA,GAAU,iBAAA;AAAA;AAAA,cAsFC,KAAA,EAAO,SAAA,CAAU,WAAA,EAAa,kBAAA;;;cCxF9B,SAAA,QAAgB,MAAA;;;cCAhB,YAAA,QAAmB,WAAA;;;cCCnB,aAAA,QAAoB,UAAA;;;UCChB,YAAA;EACf,SAAA,EAAW,WAAA;EACX,KAAA,EAAO,UAAA,CAAW,KAAA;EAClB,aAAA,EAAe,UAAA,CAAW,KAAA;AAAA;AAAA,UAGX,SAAA,WAAoB,MAAA,GAAS,MAAA;EAC5C,SAAA;EACA,WAAA,GAAc,CAAA;EACd,YAAA,GAAe,iBAAA;EACf,KAAA;EACA,eAAA;EACA,YAAA;EACA,iBAAA;EACA,MAAA;AAAA;;;cChBW,QAAA,QAAe,YAAA;;;iBCIZ,YAAA,CAAa,QAAA,WAAmB,YAAA;;;iBCFhC,mBAAA,CAAA,GAAuB,UAAA,CAAW,0BAAA;;;iBCElC,kBAAA,CAAmB,MAAA,EAAQ,MAAA,GAAS,MAAA;;;cCQvC,cAAA,QAAc,eAAA,OAAA,gBAAA;;UAIL,QAAA,CAAS,MAAA;;;;;;;sBAJJ,KAAA,CAAA,YAAA;;;;UAIL,QAAA,CAAS,MAAA;;;;;;;;;;;;cClBlB,SAAA,EAAW,YAAA,CAAa,MAAA;AAAA,cAExB,YAAA,EAAc,YAAA,CAAa,WAAA;AAAA,cAE3B,QAAA,EAAU,YAAA,CAAa,YAAA"}
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.NotFound`,render:a});function c(e,t,r){return r?e===t:(0,n.startsWithSegment)(e,t)}function l(t){if(Array.isArray(t)){let n=[];for(let r of t)Array.isArray(r)?n.push(...l(r)):(0,e.isVNode)(r)&&n.push(r);return n}return(0,e.isVNode)(t)?[t]:[]}function u(t,n){let r=l(t);for(let t of r)t.type===o||t.type===s?n.push(t):t.type===e.Fragment&&u(t.children,n)}function d(e,n,r){let i=null,a=!1,o,l=[];for(let t of e){if(t.type===s){i=t.children;continue}let e=t.props,u=e?.segment??``,d=e?.exact??!1,f=r?`${r}.${u}`:u;!a&&c(n,f,d)&&(a=!0,o=e?.fallback,l.push(t))}if(!a&&n===t.UNKNOWN_ROUTE&&i!==null){let t=e.filter(e=>e.type===s).at(-1);t&&l.push(t)}return{rendered:l,activeMatchFound:a,fallback:o}}function f(t){let n=(0,e.shallowRef)(t.getSnapshot());return(0,e.onScopeDispose)(t.subscribe(()=>{n.value=t.getSnapshot()})),n}const p=Symbol(`RouterKey`),m=Symbol(`NavigatorKey`),h=Symbol(`RouteKey`),g=()=>{let t=(0,e.inject)(p);if(!t)throw Error(`useRouter must be used within a RouterProvider`);return t};function _(n){let i=g(),a=f((0,r.createRouteNodeSource)(i,n)),o=(0,t.getNavigator)(i),s=(0,e.shallowRef)(a.value.route),c=(0,e.shallowRef)(a.value.previousRoute);return(0,e.watch)(a,e=>{s.value=e.route,c.value=e.previousRoute},{flush:`sync`}),{navigator:o,route:s,previousRoute:c}}function v(e){return e.children?.default?.()??null}function y(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 b(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 x=(0,e.markRaw)((0,e.defineComponent)({name:`KeepAlive-placeholder`,render(){return null}}));function S(t,n,r){let i=t.props?.segment??`__not-found__`,a=y(n,i),o=v(t)??[];return b((0,e.h)(e.KeepAlive,null,{default:()=>(0,e.h)(a,{key:i},{default:()=>o})}),r)}function C(t,n,r){let i=t.props;if(i?.keepAlive===!0&&t.type===o){let r=i.segment??`__not-found__`,a=y(n,r),o=v(t)??[];return(0,e.h)(e.Fragment,[(0,e.h)(e.KeepAlive,null,{default:()=>(0,e.h)(a,{key:r},{default:()=>o})})])}let a=v(t);return a?(0,e.h)(e.Fragment,[(0,e.h)(e.KeepAlive,null,{default:()=>(0,e.h)(x)}),b((0,e.h)(e.Fragment,a),r)]):null}const w=(0,e.defineComponent)({name:`RouteView`,props:{nodeName:{type:String,required:!0},keepAlive:{type:Boolean,default:!1}},setup(t,{slots:n}){let r=_(t.nodeName),i=new Map;return()=>{let a=r.route.value;if(!a)return null;let c=[];u(n.default?.(),c);let{rendered:l,fallback:f}=d(c,a.name,t.nodeName);if(l.length===0)return null;let p=l[0];if(t.keepAlive)return S(p,i,f);if(p.type!==o&&p.type!==s)return null;if(c.some(e=>e.type===o&&e.props?.keepAlive===!0))return C(p,i,f);let m=v(p);return m?b((0,e.h)(e.Fragment,m),f):null}}}),T=Object.assign(w,{Match:o,NotFound:s}),E=`data-real-router-announcer`;function D(e,t){let n=t?.prefix??`Navigated to `,r=t?.getAnnouncementText,i=!0,a=!1,o=!1,s=``,c,l=O(),u=setTimeout(()=>{a=!0},100),d=e.subscribe(({route:e})=>{if(i){i=!1;return}requestAnimationFrame(()=>{requestAnimationFrame(()=>{if(o)return;let t=A(e,n,r);t&&t!==s&&a&&(s=t,clearTimeout(c),l.textContent=t,c=setTimeout(()=>{l.textContent=``,s=``},7e3),j())})})});return{destroy(){o=!0,d(),clearTimeout(c),clearTimeout(u),k()}}}function O(){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.prepend(t),t}function k(){document.querySelector(`[${E}]`)?.remove()}function A(e,t,n){if(n)return n(e);let r=document.querySelector(`h1`)?.textContent.trim()??``,i=e.name.startsWith(`@@`)?``:e.name;return`${t}${r||document.title||i||globalThis.location.pathname}`}function j(){let e=document.querySelector(`h1`);e&&(e.hasAttribute(`tabindex`)||e.setAttribute(`tabindex`,`-1`),e.focus({preventScroll:!0}))}function M(e){return e.button===0&&!e.metaKey&&!e.altKey&&!e.ctrlKey&&!e.shiftKey}function N(e,t,n){try{let r=e.buildUrl;return r?r(t,n):e.buildPath(t,n)}catch{console.error(`[real-router] Route "${t}" is not defined. The element will render without an href attribute.`);return}}function P(e,t,n){return e&&t?n?`${n} ${t}`.trim():t:n??void 0}function F(e){e instanceof HTMLAnchorElement||e instanceof HTMLButtonElement||(e.getAttribute(`role`)||e.setAttribute(`role`,`link`),e.getAttribute(`tabindex`)||e.setAttribute(`tabindex`,`0`))}function I(e,t,n=!1,i=!0){return f((0,r.createActiveRouteSource)(g(),e,t,{strict:n,ignoreQueryParams:i}))}const L=Object.freeze({}),R=Object.freeze({}),z=(0,e.defineComponent)({name:`Link`,props:{routeName:{type:String,required:!0},routeParams:{type:Object,default:()=>L},routeOptions:{type:Object,default:()=>R},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}},setup(t,{slots:n,attrs:r}){let i=g(),a=I(t.routeName,t.routeParams,t.activeStrict,t.ignoreQueryParams),o=(0,e.computed)(()=>N(i,t.routeName,t.routeParams)),s=(0,e.computed)(()=>P(a.value,t.activeClassName,t.class)),c=e=>{r.onClick&&typeof r.onClick==`function`&&(r.onClick(e),e.defaultPrevented)||!M(e)||t.target===`_blank`||(e.preventDefault(),i.navigate(t.routeName,t.routeParams,t.routeOptions).catch(()=>{}))};return()=>(0,e.h)(`a`,{...r,href:o.value,class:s.value,target:t.target,onClick:c},n.default?.())}}),B=new WeakMap;function V(){let e=g(),t=B.get(e);return t||(t=(0,r.createErrorSource)(e),B.set(e,t)),f(t)}const H=(0,e.defineComponent)({name:`RouterErrorBoundary`,props:{fallback:{type:Function,required:!0},onError:{type:Function,default:void 0}},setup(t,{slots:n}){let r=V(),i=(0,e.ref)(-1);(0,e.watch)(()=>r.value.version,()=>{r.value.error&&t.onError?.(r.value.error,r.value.toRoute,r.value.fromRoute)},{immediate:!0});let a=(0,e.computed)(()=>r.value.version>i.value?r.value.error:null),o=()=>{i.value=r.value.version};return()=>{let r=n.default?.()??[],i=a.value?t.fallback(a.value,o):null;return(0,e.h)(e.Fragment,null,[...r,i])}}});let U=null;function W(e){U=e}function G(){if(!U)throw Error(`v-link directive requires a RouterProvider ancestor. Make sure RouterProvider is mounted.`);return U}const K=new WeakMap,q=new WeakMap;function J(e,t){return n=>{M(n)&&(n.preventDefault(),e.navigate(t.name,t.params??{},t.options??{}).catch(()=>{}))}}function Y(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=J(t,n),i=Y(t,n,e);e.addEventListener(`click`,r),e.addEventListener(`keydown`,i),K.set(e,r),q.set(e,i)}function Z(e){let t=K.get(e),n=q.get(e);t&&e.removeEventListener(`click`,t),n&&e.removeEventListener(`keydown`,n),K.delete(e),q.delete(e)}const Q={mounted(e,t){let n=G();F(e),e.style.cursor=`pointer`,X(e,n,t.value)},updated(e,t){let n=G();Z(e),X(e,n,t.value)},beforeUnmount(e){Z(e)}},$=()=>{let t=(0,e.inject)(m);if(!t)throw Error(`useNavigator must be used within a RouterProvider`);return t},ee=()=>(0,n.getRouteUtils)((0,i.getPluginApi)(g()).getTree()),te=()=>{let t=(0,e.inject)(h);if(!t)throw Error(`useRoute must be used within a RouterProvider`);return t};function ne(){return f((0,r.createTransitionSource)(g()))}function re(n){return{install(i){let a=(0,t.getNavigator)(n);W(n);let o=(0,r.createRouteSource)(n),s=o.getSnapshot(),c=(0,e.shallowRef)(s.route),l=(0,e.shallowRef)(s.previousRoute);o.subscribe(()=>{let e=o.getSnapshot();c.value=e.route,l.value=e.previousRoute}),i.provide(p,n),i.provide(m,a),i.provide(h,{navigator:a,route:c,previousRoute:l})}}}const ie=(0,e.defineComponent)({name:`RouterProvider`,props:{router:{type:Object,required:!0},announceNavigation:{type:Boolean,default:!1}},setup(n,{slots:i}){(0,e.onMounted)(()=>{if(!n.announceNavigation)return;let t=D(n.router);(0,e.onUnmounted)(()=>{t.destroy()})});let a=(0,t.getNavigator)(n.router);W(n.router);let o=(0,r.createRouteSource)(n.router),s=o.getSnapshot(),c=(0,e.shallowRef)(s.route),l=(0,e.shallowRef)(s.previousRoute);return(0,e.onScopeDispose)(o.subscribe(()=>{let e=o.getSnapshot();c.value=e.route,l.value=e.previousRoute})),(0,e.provide)(p,n.router),(0,e.provide)(m,a),(0,e.provide)(h,{navigator:a,route:c,previousRoute:l}),()=>i.default?.()}});exports.Link=z,exports.NavigatorKey=m,exports.RouteKey=h,exports.RouteView=T,exports.RouterErrorBoundary=H,exports.RouterKey=p,exports.RouterProvider=ie,exports.createRouterPlugin=re,exports.useNavigator=$,exports.useRoute=te,exports.useRouteNode=_,exports.useRouteUtils=ee,exports.useRouter=g,exports.useRouterTransition=ne,exports.vLink=Q;
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.NotFound`,render:a});function c(e,t,r){return r?e===t:(0,n.startsWithSegment)(e,t)}function l(t){if(Array.isArray(t)){let n=[];for(let r of t)Array.isArray(r)?n.push(...l(r)):(0,e.isVNode)(r)&&n.push(r);return n}return(0,e.isVNode)(t)?[t]:[]}function u(t,n){let r=l(t);for(let t of r)t.type===o||t.type===s?n.push(t):t.type===e.Fragment&&u(t.children,n)}function d(e,n,r){let i=null,a=!1,o,l=[];for(let t of e){if(t.type===s){i=t.children;continue}let e=t.props,u=e?.segment??``,d=e?.exact??!1,f=r?`${r}.${u}`:u;!a&&c(n,f,d)&&(a=!0,o=e?.fallback,l.push(t))}if(!a&&n===t.UNKNOWN_ROUTE&&i!==null){let t=e.filter(e=>e.type===s).at(-1);t&&l.push(t)}return{rendered:l,activeMatchFound:a,fallback:o}}function f(t){let n=(0,e.shallowRef)(t.getSnapshot());return(0,e.onScopeDispose)(t.subscribe(()=>{n.value=t.getSnapshot()})),n}const p=Symbol(`RouterKey`),m=Symbol(`NavigatorKey`),h=Symbol(`RouteKey`),g=()=>{let t=(0,e.inject)(p);if(!t)throw Error(`useRouter must be used within a RouterProvider`);return t};function _(n){let i=g(),a=f((0,r.createRouteNodeSource)(i,n)),o=(0,t.getNavigator)(i),s=(0,e.shallowRef)(a.value.route),c=(0,e.shallowRef)(a.value.previousRoute);return(0,e.watch)(a,e=>{s.value=e.route,c.value=e.previousRoute},{flush:`sync`}),{navigator:o,route:s,previousRoute:c}}function v(e){return e.children?.default?.()??null}function y(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 b(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 x=(0,e.markRaw)((0,e.defineComponent)({name:`KeepAlive-placeholder`,render(){return null}}));function S(t,n,r){let i=t.props?.segment??`__not-found__`,a=y(n,i),o=v(t)??[];return b((0,e.h)(e.KeepAlive,null,{default:()=>(0,e.h)(a,{key:i},{default:()=>o})}),r)}function C(t,n,r){let i=t.props;if(i?.keepAlive===!0&&t.type===o){let r=i.segment??`__not-found__`,a=y(n,r),o=v(t)??[];return(0,e.h)(e.Fragment,[(0,e.h)(e.KeepAlive,null,{default:()=>(0,e.h)(a,{key:r},{default:()=>o})})])}let a=v(t);return a?(0,e.h)(e.Fragment,[(0,e.h)(e.KeepAlive,null,{default:()=>(0,e.h)(x)}),b((0,e.h)(e.Fragment,a),r)]):null}const w=(0,e.defineComponent)({name:`RouteView`,props:{nodeName:{type:String,required:!0},keepAlive:{type:Boolean,default:!1}},setup(t,{slots:n}){let r=_(t.nodeName),i=new Map;return()=>{let a=r.route.value;if(!a)return null;let c=[];u(n.default?.(),c);let{rendered:l,fallback:f}=d(c,a.name,t.nodeName);if(l.length===0)return null;let p=l[0];if(t.keepAlive)return S(p,i,f);if(p.type!==o&&p.type!==s)return null;if(c.some(e=>e.type===o&&e.props?.keepAlive===!0))return C(p,i,f);let m=v(p);return m?b((0,e.h)(e.Fragment,m),f):null}}}),T=Object.assign(w,{Match:o,NotFound:s});function E(e,t,n=!1,i=!0){return f((0,r.createActiveRouteSource)(g(),e,t,{strict:n,ignoreQueryParams:i}))}const D=Object.freeze({}),O=Object.freeze({}),k=`data-real-router-announcer`;function A(e,t){let n=t?.prefix??`Navigated to `,r=t?.getAnnouncementText,i=!0,a=!1,o=!1,s=``,c,l=j(),u=setTimeout(()=>{a=!0},100),d=e.subscribe(({route:e})=>{if(i){i=!1;return}requestAnimationFrame(()=>{requestAnimationFrame(()=>{if(o)return;let t=N(e,n,r);t&&t!==s&&a&&(s=t,clearTimeout(c),l.textContent=t,c=setTimeout(()=>{l.textContent=``,s=``},7e3),P())})})});return{destroy(){o=!0,d(),clearTimeout(c),clearTimeout(u),M()}}}function j(){let e=document.querySelector(`[${k}]`);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(k,``),document.body.prepend(t),t}function M(){document.querySelector(`[${k}]`)?.remove()}function N(e,t,n){if(n)return n(e);let r=document.querySelector(`h1`)?.textContent.trim()??``,i=e.name.startsWith(`@@`)?``:e.name;return`${t}${r||document.title||i||globalThis.location.pathname}`}function P(){let e=document.querySelector(`h1`);e&&(e.hasAttribute(`tabindex`)||e.setAttribute(`tabindex`,`-1`),e.focus({preventScroll:!0}))}function F(e){return e.button===0&&!e.metaKey&&!e.altKey&&!e.ctrlKey&&!e.shiftKey}function I(e,t,n){try{let r=e.buildUrl;return r?r(t,n):e.buildPath(t,n)}catch{console.error(`[real-router] Route "${t}" is not defined. The element will render without an href attribute.`);return}}function L(e,t,n){return e&&t?n?`${n} ${t}`.trim():t:n??void 0}function R(e){e instanceof HTMLAnchorElement||e instanceof HTMLButtonElement||(e.getAttribute(`role`)||e.setAttribute(`role`,`link`),e.getAttribute(`tabindex`)||e.setAttribute(`tabindex`,`0`))}const z=(0,e.defineComponent)({name:`Link`,props:{routeName:{type:String,required:!0},routeParams:{type:Object,default:()=>D},routeOptions:{type:Object,default:()=>O},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}},setup(t,{slots:n,attrs:r}){let i=g(),a=E(t.routeName,t.routeParams,t.activeStrict,t.ignoreQueryParams),o=(0,e.computed)(()=>I(i,t.routeName,t.routeParams)),s=(0,e.computed)(()=>L(a.value,t.activeClassName,t.class)),c=e=>{r.onClick&&typeof r.onClick==`function`&&(r.onClick(e),e.defaultPrevented)||!F(e)||t.target===`_blank`||(e.preventDefault(),i.navigate(t.routeName,t.routeParams,t.routeOptions).catch(()=>{}))};return()=>(0,e.h)(`a`,{...r,href:o.value,class:s.value,target:t.target,onClick:c},n.default?.())}}),B=new WeakMap;function V(){let e=g(),t=B.get(e);return t||(t=(0,r.createErrorSource)(e),B.set(e,t)),f(t)}const H=(0,e.defineComponent)({name:`RouterErrorBoundary`,props:{fallback:{type:Function,required:!0},onError:{type:Function,default:void 0}},setup(t,{slots:n}){let r=V(),i=(0,e.ref)(-1);(0,e.watch)(()=>r.value.version,()=>{r.value.error&&t.onError?.(r.value.error,r.value.toRoute,r.value.fromRoute)},{immediate:!0});let a=(0,e.computed)(()=>r.value.version>i.value?r.value.error:null),o=()=>{i.value=r.value.version};return()=>{let r=n.default?.()??[],i=a.value?t.fallback(a.value,o):null;return(0,e.h)(e.Fragment,null,[...r,i])}}});let U=null;function W(e){U=e}function G(){if(!U)throw Error(`v-link directive requires a RouterProvider ancestor. Make sure RouterProvider is mounted.`);return U}const K=new WeakMap,q=new WeakMap;function J(e,t){return n=>{F(n)&&(n.preventDefault(),e.navigate(t.name,t.params??{},t.options??{}).catch(()=>{}))}}function Y(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=J(t,n),i=Y(t,n,e);e.addEventListener(`click`,r),e.addEventListener(`keydown`,i),K.set(e,r),q.set(e,i)}function Z(e){let t=K.get(e),n=q.get(e);t&&e.removeEventListener(`click`,t),n&&e.removeEventListener(`keydown`,n),K.delete(e),q.delete(e)}const Q={mounted(e,t){let n=G();R(e),e.style.cursor=`pointer`,X(e,n,t.value)},updated(e,t){let n=G();Z(e),X(e,n,t.value)},beforeUnmount(e){Z(e)}},$=()=>{let t=(0,e.inject)(m);if(!t)throw Error(`useNavigator must be used within a RouterProvider`);return t},ee=()=>(0,n.getRouteUtils)((0,i.getPluginApi)(g()).getTree()),te=()=>{let t=(0,e.inject)(h);if(!t)throw Error(`useRoute must be used within a RouterProvider`);return t};function ne(){return f((0,r.createTransitionSource)(g()))}function re(n){return{install(i){let a=(0,t.getNavigator)(n);W(n);let o=(0,r.createRouteSource)(n),s=o.getSnapshot(),c=(0,e.shallowRef)(s.route),l=(0,e.shallowRef)(s.previousRoute);o.subscribe(()=>{let e=o.getSnapshot();c.value=e.route,l.value=e.previousRoute}),i.provide(p,n),i.provide(m,a),i.provide(h,{navigator:a,route:c,previousRoute:l})}}}const ie=(0,e.defineComponent)({name:`RouterProvider`,props:{router:{type:Object,required:!0},announceNavigation:{type:Boolean,default:!1}},setup(n,{slots:i}){(0,e.onMounted)(()=>{if(!n.announceNavigation)return;let t=A(n.router);(0,e.onUnmounted)(()=>{t.destroy()})});let a=(0,t.getNavigator)(n.router);W(n.router);let o=(0,r.createRouteSource)(n.router),s=o.getSnapshot(),c=(0,e.shallowRef)(s.route),l=(0,e.shallowRef)(s.previousRoute);return(0,e.onScopeDispose)(o.subscribe(()=>{let e=o.getSnapshot();c.value=e.route,l.value=e.previousRoute})),(0,e.provide)(p,n.router),(0,e.provide)(m,a),(0,e.provide)(h,{navigator:a,route:c,previousRoute:l}),()=>i.default?.()}});exports.Link=z,exports.NavigatorKey=m,exports.RouteKey=h,exports.RouteView=T,exports.RouterErrorBoundary=H,exports.RouterKey=p,exports.RouterProvider=ie,exports.createRouterPlugin=re,exports.useNavigator=$,exports.useRoute=te,exports.useRouteNode=_,exports.useRouteUtils=ee,exports.useRouter=g,exports.useRouterTransition=ne,exports.vLink=Q;
2
2
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["Fragment","UNKNOWN_ROUTE","Suspense","KeepAlive","Fragment","buildHref","buildActiveClassName","shouldNavigate","Fragment","shouldNavigate","createRouteAnnouncer"],"sources":["../../src/components/RouteView/components.ts","../../src/components/RouteView/helpers.ts","../../src/useRefFromSource.ts","../../src/context.ts","../../src/composables/useRouter.ts","../../src/composables/useRouteNode.ts","../../src/components/RouteView/RouteView.ts","../../../dom-utils/dist/esm/index.mjs","../../src/composables/useIsActiveRoute.ts","../../src/constants.ts","../../src/components/Link.ts","../../src/composables/useRouterError.ts","../../src/components/RouterErrorBoundary.ts","../../src/directives/vLink.ts","../../src/composables/useNavigator.ts","../../src/composables/useRouteUtils.ts","../../src/composables/useRoute.ts","../../src/composables/useRouterTransition.ts","../../src/createRouterPlugin.ts","../../src/RouterProvider.ts"],"sourcesContent":["import { defineComponent } from \"vue\";\n\nimport type { PropType, VNode } from \"vue\";\n\nfunction renderNull() {\n return null;\n}\n\nexport const Match = defineComponent({\n name: \"RouteView.Match\",\n props: {\n segment: {\n type: String as PropType<string>,\n required: true,\n },\n exact: {\n type: Boolean,\n default: false,\n },\n fallback: {\n type: [Object, Function] as PropType<VNode | (() => VNode)>,\n default: undefined,\n },\n keepAlive: {\n type: Boolean,\n default: false,\n },\n },\n render: renderNull,\n});\n\nexport const NotFound = defineComponent({\n name: \"RouteView.NotFound\",\n render: renderNull,\n});\n","import { UNKNOWN_ROUTE } from \"@real-router/core\";\nimport { startsWithSegment } from \"@real-router/route-utils\";\nimport { Fragment, isVNode } from \"vue\";\n\nimport { Match, NotFound } from \"./components\";\n\nimport type { VNode } from \"vue\";\n\ntype FallbackType = VNode | (() => VNode) | undefined;\n\nfunction isSegmentMatch(\n routeName: string,\n fullSegmentName: string,\n exact: boolean,\n): boolean {\n if (exact) {\n return routeName === fullSegmentName;\n }\n\n return startsWithSegment(routeName, fullSegmentName);\n}\n\nfunction normalizeChildren(children: unknown): VNode[] {\n if (Array.isArray(children)) {\n const result: VNode[] = [];\n\n for (const child of children) {\n if (Array.isArray(child)) {\n result.push(...normalizeChildren(child));\n } else if (isVNode(child)) {\n result.push(child);\n }\n }\n\n return result;\n }\n\n if (isVNode(children)) {\n return [children];\n }\n\n return [];\n}\n\nexport function collectElements(children: unknown, result: VNode[]): void {\n const vnodes = normalizeChildren(children);\n\n for (const child of vnodes) {\n if (child.type === Match || child.type === NotFound) {\n result.push(child);\n } else if (child.type === Fragment) {\n collectElements(child.children, result);\n }\n }\n}\n\nexport function buildRenderList(\n elements: VNode[],\n routeName: string,\n nodeName: string,\n): {\n rendered: VNode[];\n activeMatchFound: boolean;\n fallback?: FallbackType;\n} {\n let notFoundChildren: unknown = null;\n let activeMatchFound = false;\n let fallback: FallbackType = undefined;\n const rendered: VNode[] = [];\n\n for (const child of elements) {\n if (child.type === NotFound) {\n notFoundChildren = child.children;\n continue;\n }\n\n const props = child.props as {\n segment: string;\n exact?: boolean;\n fallback?: FallbackType;\n } | null;\n const segment = props?.segment ?? \"\";\n const exact = props?.exact ?? false;\n const fullSegmentName = nodeName ? `${nodeName}.${segment}` : segment;\n const isActive =\n !activeMatchFound && isSegmentMatch(routeName, fullSegmentName, exact);\n\n if (isActive) {\n activeMatchFound = true;\n fallback = props?.fallback;\n rendered.push(child);\n }\n }\n\n if (\n !activeMatchFound &&\n routeName === UNKNOWN_ROUTE &&\n notFoundChildren !== null\n ) {\n const nfElements = elements.filter((element) => element.type === NotFound);\n /* v8 ignore next 3 */\n const lastNf = nfElements.at(-1);\n\n if (lastNf) {\n rendered.push(lastNf);\n }\n }\n\n return { rendered, activeMatchFound, fallback };\n}\n","import { shallowRef, onScopeDispose } from \"vue\";\n\nimport type { RouterSource } from \"@real-router/sources\";\nimport type { ShallowRef } from \"vue\";\n\nexport function useRefFromSource<T>(source: RouterSource<T>): ShallowRef<T> {\n const ref = shallowRef(source.getSnapshot());\n\n const unsub = source.subscribe(() => {\n ref.value = source.getSnapshot();\n });\n\n onScopeDispose(unsub);\n\n return ref;\n}\n","import type { RouteContext as RouteContextType } from \"./types\";\nimport type { Router, Navigator } from \"@real-router/core\";\nimport type { InjectionKey } from \"vue\";\n\nexport const RouterKey: InjectionKey<Router> = Symbol(\"RouterKey\");\n\nexport const NavigatorKey: InjectionKey<Navigator> = Symbol(\"NavigatorKey\");\n\nexport const RouteKey: InjectionKey<RouteContextType> = Symbol(\"RouteKey\");\n","import { inject } from \"vue\";\n\nimport { RouterKey } from \"../context\";\n\nimport type { Router } from \"@real-router/core\";\n\nexport const useRouter = (): Router => {\n const router = inject(RouterKey);\n\n if (!router) {\n throw new Error(\"useRouter must be used within a RouterProvider\");\n }\n\n return router;\n};\n","import { getNavigator } from \"@real-router/core\";\nimport { createRouteNodeSource } from \"@real-router/sources\";\nimport { shallowRef, watch } from \"vue\";\n\nimport { useRefFromSource } from \"../useRefFromSource\";\nimport { useRouter } from \"./useRouter\";\n\nimport type { RouteContext } from \"../types\";\nimport type { State } from \"@real-router/core\";\n\nexport function useRouteNode(nodeName: string): RouteContext {\n const router = useRouter();\n\n const source = createRouteNodeSource(router, nodeName);\n const snapshot = useRefFromSource(source);\n\n const navigator = getNavigator(router);\n\n const route = shallowRef<State | undefined>(snapshot.value.route);\n const previousRoute = shallowRef<State | undefined>(\n snapshot.value.previousRoute,\n );\n\n watch(\n snapshot,\n (newSnapshot) => {\n route.value = newSnapshot.route;\n previousRoute.value = newSnapshot.previousRoute;\n },\n { flush: \"sync\" },\n );\n\n return {\n navigator,\n route,\n previousRoute,\n };\n}\n","import {\n Fragment,\n defineComponent,\n h,\n KeepAlive,\n markRaw,\n Suspense,\n} from \"vue\";\n\nimport { Match, NotFound } from \"./components\";\nimport { buildRenderList, collectElements } from \"./helpers\";\nimport { useRouteNode } from \"../../composables/useRouteNode\";\n\nimport type { Component, VNode } from \"vue\";\n\ntype SlotChildren = Record<string, (() => VNode[]) | undefined> | null;\n\nfunction getSlotContent(vnode: VNode): VNode[] | null {\n const slots = vnode.children as SlotChildren;\n\n return slots?.default?.() ?? null;\n}\n\nfunction getOrCreateWrapper(\n cache: Map<string, Component>,\n segment: string,\n): Component {\n const existing = cache.get(segment);\n\n if (existing) {\n return existing;\n }\n\n const wrapper = markRaw(\n defineComponent({\n name: `KeepAlive-${segment}`,\n setup(_wrapperProps, wrapperCtx) {\n return () => wrapperCtx.slots.default?.();\n },\n }),\n );\n\n cache.set(segment, wrapper);\n\n return wrapper;\n}\n\nfunction wrapWithSuspense(content: VNode, fallback: unknown): VNode {\n if (fallback === undefined) {\n return content;\n }\n\n const fallbackContent =\n typeof fallback === \"function\" ? (fallback as () => VNode)() : fallback;\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-assignment\n const suspenseComponent = Suspense as any;\n\n return h(\n suspenseComponent,\n {},\n {\n default: () => content,\n fallback: () => fallbackContent,\n },\n );\n}\n\nconst emptyKeepAlivePlaceholder = markRaw(\n defineComponent({\n name: \"KeepAlive-placeholder\",\n render() {\n return null;\n },\n }),\n);\n\nfunction renderWithRootKA(\n activeChild: VNode,\n wrapperCache: Map<string, Component>,\n fallback: unknown,\n): VNode {\n const activeProps = activeChild.props as { segment?: string } | null;\n const segment = activeProps?.segment ?? \"__not-found__\";\n const WrapperComponent = getOrCreateWrapper(wrapperCache, segment);\n const slotContent = getSlotContent(activeChild) ?? [];\n const keepAliveContent = h(KeepAlive, null, {\n default: () =>\n h(WrapperComponent, { key: segment }, { default: () => slotContent }),\n });\n\n return wrapWithSuspense(keepAliveContent, fallback);\n}\n\nfunction renderWithPerMatchKA(\n activeChild: VNode,\n wrapperCache: Map<string, Component>,\n fallback: unknown,\n): VNode | null {\n const matchProps = activeChild.props as {\n segment?: string;\n keepAlive?: boolean;\n } | null;\n\n if (matchProps?.keepAlive === true && activeChild.type === Match) {\n /* v8 ignore start */\n const segment = matchProps.segment ?? \"__not-found__\";\n /* v8 ignore stop */\n const WrapperComponent = getOrCreateWrapper(wrapperCache, segment);\n const slotContent = getSlotContent(activeChild) ?? [];\n\n return h(Fragment, [\n h(KeepAlive, null, {\n default: () =>\n h(WrapperComponent, { key: segment }, { default: () => slotContent }),\n }),\n ]);\n }\n\n const content = getSlotContent(activeChild);\n\n /* v8 ignore start */\n if (!content) {\n return null;\n }\n /* v8 ignore stop */\n\n return h(Fragment, [\n h(KeepAlive, null, { default: () => h(emptyKeepAlivePlaceholder) }),\n wrapWithSuspense(h(Fragment, content), fallback),\n ]);\n}\n\nconst RouteViewComponent = defineComponent({\n name: \"RouteView\",\n props: {\n nodeName: {\n type: String,\n required: true,\n },\n keepAlive: {\n type: Boolean,\n default: false,\n },\n },\n setup(props, { slots }) {\n const routeContext = useRouteNode(props.nodeName);\n const wrapperCache = new Map<string, Component>();\n\n return (): VNode | null => {\n const route = routeContext.route.value;\n\n if (!route) {\n return null;\n }\n\n const elements: VNode[] = [];\n\n collectElements(slots.default?.(), elements);\n\n const { rendered, fallback } = buildRenderList(\n elements,\n route.name,\n props.nodeName,\n );\n\n if (rendered.length === 0) {\n return null;\n }\n\n const activeChild = rendered[0];\n\n if (props.keepAlive) {\n return renderWithRootKA(activeChild, wrapperCache, fallback);\n }\n\n /* v8 ignore start */\n if (activeChild.type !== Match && activeChild.type !== NotFound) {\n return null;\n }\n /* v8 ignore stop */\n\n const hasPerMatchKA = elements.some(\n (element) =>\n element.type === Match &&\n (element.props as { keepAlive?: boolean } | null)?.keepAlive === true,\n );\n\n if (hasPerMatchKA) {\n return renderWithPerMatchKA(activeChild, wrapperCache, fallback);\n }\n\n const content = getSlotContent(activeChild);\n\n if (!content) {\n return null;\n }\n\n return wrapWithSuspense(h(Fragment, content), fallback);\n };\n },\n});\n\nexport const RouteView = Object.assign(RouteViewComponent, { Match, NotFound });\n\nexport type {\n RouteViewProps,\n MatchProps as RouteViewMatchProps,\n NotFoundProps as RouteViewNotFoundProps,\n} from \"./types\";\n","const e=`data-real-router-announcer`;function t(e,t){let o=t?.prefix??`Navigated to `,s=t?.getAnnouncementText,c=!0,l=!1,u=!1,d=``,f,p=n(),m=setTimeout(()=>{l=!0},100),h=e.subscribe(({route:e})=>{if(c){c=!1;return}requestAnimationFrame(()=>{requestAnimationFrame(()=>{if(u)return;let t=i(e,o,s);t&&t!==d&&l&&(d=t,clearTimeout(f),p.textContent=t,f=setTimeout(()=>{p.textContent=``,d=``},7e3),a())})})});return{destroy(){u=!0,h(),clearTimeout(f),clearTimeout(m),r()}}}function n(){let t=document.querySelector(`[${e}]`);if(t)return t;let n=document.createElement(`div`);return n.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`),n.setAttribute(`aria-live`,`assertive`),n.setAttribute(`aria-atomic`,`true`),n.setAttribute(e,``),document.body.prepend(n),n}function r(){document.querySelector(`[${e}]`)?.remove()}function i(e,t,n){if(n)return n(e);let r=document.querySelector(`h1`)?.textContent.trim()??``,i=e.name.startsWith(`@@`)?``:e.name;return`${t}${r||document.title||i||globalThis.location.pathname}`}function a(){let e=document.querySelector(`h1`);e&&(e.hasAttribute(`tabindex`)||e.setAttribute(`tabindex`,`-1`),e.focus({preventScroll:!0}))}function o(e){return e.button===0&&!e.metaKey&&!e.altKey&&!e.ctrlKey&&!e.shiftKey}function s(e,t,n){try{let r=e.buildUrl;return r?r(t,n):e.buildPath(t,n)}catch{console.error(`[real-router] Route \"${t}\" is not defined. The element will render without an href attribute.`);return}}function c(e,t,n){return e&&t?n?`${n} ${t}`.trim():t:n??void 0}function l(e){e instanceof HTMLAnchorElement||e instanceof HTMLButtonElement||(e.getAttribute(`role`)||e.setAttribute(`role`,`link`),e.getAttribute(`tabindex`)||e.setAttribute(`tabindex`,`0`))}export{l as applyLinkA11y,c as buildActiveClassName,s as buildHref,t as createRouteAnnouncer,o as shouldNavigate};\n//# sourceMappingURL=index.mjs.map","import { createActiveRouteSource } from \"@real-router/sources\";\n\nimport { useRefFromSource } from \"../useRefFromSource\";\nimport { useRouter } from \"./useRouter\";\n\nimport type { Params } from \"@real-router/core\";\nimport type { ShallowRef } from \"vue\";\n\nexport function useIsActiveRoute(\n routeName: string,\n params?: Params,\n strict = false,\n ignoreQueryParams = true,\n): ShallowRef<boolean> {\n const router = useRouter();\n\n const source = createActiveRouteSource(router, routeName, params, {\n strict,\n ignoreQueryParams,\n });\n\n return useRefFromSource(source);\n}\n","/**\n * Stable empty object for default params\n */\nexport const EMPTY_PARAMS = Object.freeze({});\n\n/**\n * Stable empty options object\n */\nexport const EMPTY_OPTIONS = Object.freeze({});\n","import { shouldNavigate, buildHref, buildActiveClassName } from \"dom-utils\";\nimport { defineComponent, h, computed } from \"vue\";\n\nimport { useIsActiveRoute } from \"../composables/useIsActiveRoute\";\nimport { useRouter } from \"../composables/useRouter\";\nimport { EMPTY_PARAMS, EMPTY_OPTIONS } from \"../constants\";\n\nimport type { Params, NavigationOptions } from \"@real-router/core\";\nimport type { PropType } from \"vue\";\n\nexport const Link = defineComponent({\n name: \"Link\",\n props: {\n routeName: {\n type: String,\n required: true,\n },\n routeParams: {\n type: Object as PropType<Params>,\n default: () => EMPTY_PARAMS,\n },\n routeOptions: {\n type: Object as PropType<NavigationOptions>,\n default: () => EMPTY_OPTIONS,\n },\n class: {\n type: String,\n default: undefined,\n },\n activeClassName: {\n type: String,\n default: \"active\",\n },\n activeStrict: {\n type: Boolean,\n default: false,\n },\n ignoreQueryParams: {\n type: Boolean,\n default: true,\n },\n target: {\n type: String,\n default: undefined,\n },\n },\n setup(props, { slots, attrs }) {\n const router = useRouter();\n\n const isActive = useIsActiveRoute(\n props.routeName,\n props.routeParams,\n props.activeStrict,\n props.ignoreQueryParams,\n );\n\n const href = computed(() =>\n buildHref(router, props.routeName, props.routeParams),\n );\n\n const finalClassName = computed(() =>\n buildActiveClassName(isActive.value, props.activeClassName, props.class),\n );\n\n const handleClick = (evt: MouseEvent) => {\n if (attrs.onClick && typeof attrs.onClick === \"function\") {\n (attrs.onClick as (evt: MouseEvent) => void)(evt);\n\n if (evt.defaultPrevented) {\n return;\n }\n }\n\n if (!shouldNavigate(evt) || props.target === \"_blank\") {\n return;\n }\n\n evt.preventDefault();\n router\n .navigate(props.routeName, props.routeParams, props.routeOptions)\n .catch(() => {});\n };\n\n return () =>\n h(\n \"a\",\n {\n ...attrs,\n href: href.value,\n class: finalClassName.value,\n target: props.target,\n onClick: handleClick,\n },\n slots.default?.(),\n );\n },\n});\n","import { createErrorSource } from \"@real-router/sources\";\n\nimport { useRefFromSource } from \"../useRefFromSource\";\nimport { useRouter } from \"./useRouter\";\n\nimport type { Router } from \"@real-router/core\";\nimport type { RouterErrorSnapshot, RouterSource } from \"@real-router/sources\";\nimport type { ShallowRef } from \"vue\";\n\nconst cache = new WeakMap<Router, RouterSource<RouterErrorSnapshot>>();\n\nexport function useRouterError(): ShallowRef<RouterErrorSnapshot> {\n const router = useRouter();\n\n let source = cache.get(router);\n\n if (!source) {\n source = createErrorSource(router);\n cache.set(router, source);\n }\n\n return useRefFromSource(source);\n}\n","import { defineComponent, h, ref, watch, computed, Fragment } from \"vue\";\n\nimport { useRouterError } from \"../composables/useRouterError\";\n\nimport type { RouterError, State } from \"@real-router/core\";\nimport type { VNode, PropType } from \"vue\";\n\nexport const RouterErrorBoundary = defineComponent({\n name: \"RouterErrorBoundary\",\n props: {\n fallback: {\n type: Function as PropType<\n (error: RouterError, resetError: () => void) => VNode\n >,\n required: true,\n },\n onError: {\n type: Function as PropType<\n (\n error: RouterError,\n toRoute: State | null,\n fromRoute: State | null,\n ) => void\n >,\n default: undefined,\n },\n },\n setup(props, { slots }) {\n const snapshot = useRouterError();\n const dismissedVersion = ref(-1);\n\n watch(\n () => snapshot.value.version,\n () => {\n if (snapshot.value.error) {\n props.onError?.(\n snapshot.value.error,\n snapshot.value.toRoute,\n snapshot.value.fromRoute,\n );\n }\n },\n { immediate: true },\n );\n\n const visibleError = computed(() =>\n snapshot.value.version > dismissedVersion.value\n ? snapshot.value.error\n : null,\n );\n\n const resetError = () => {\n dismissedVersion.value = snapshot.value.version;\n };\n\n return () => {\n const children = slots.default?.() ?? [];\n const errorVNode = visibleError.value\n ? props.fallback(visibleError.value, resetError)\n : null;\n\n return h(Fragment, null, [...children, errorVNode]);\n };\n },\n});\n\nexport type RouterErrorBoundaryProps = InstanceType<\n typeof RouterErrorBoundary\n>[\"$props\"];\n","import { shouldNavigate, applyLinkA11y } from \"dom-utils\";\n\nimport type { Router, NavigationOptions, Params } from \"@real-router/core\";\nimport type { Directive } from \"vue\";\n\nexport interface LinkDirectiveValue {\n name: string;\n params?: Params;\n options?: NavigationOptions;\n}\n\nlet _router: Router | null = null;\n\nexport function setDirectiveRouter(router: Router): void {\n _router = router;\n}\n\nexport function getDirectiveRouter(): Router {\n if (!_router) {\n /* v8 ignore next 3 -- @preserve Defensive: router always initialized by RouterProvider */\n throw new Error(\n \"v-link directive requires a RouterProvider ancestor. Make sure RouterProvider is mounted.\",\n );\n }\n\n return _router;\n}\n\nconst clickHandlers = new WeakMap<HTMLElement, (evt: MouseEvent) => void>();\nconst keydownHandlers = new WeakMap<\n HTMLElement,\n (evt: KeyboardEvent) => void\n>();\n\nfunction createClickHandler(\n router: Router,\n value: LinkDirectiveValue,\n): (evt: MouseEvent) => void {\n return (evt: MouseEvent) => {\n if (!shouldNavigate(evt)) {\n return;\n }\n\n evt.preventDefault();\n router\n .navigate(value.name, value.params ?? {}, value.options ?? {})\n .catch(() => {});\n };\n}\n\nfunction createKeydownHandler(\n router: Router,\n value: LinkDirectiveValue,\n element: HTMLElement,\n): (evt: KeyboardEvent) => void {\n return (evt: KeyboardEvent) => {\n if (evt.key === \"Enter\" && !(element instanceof HTMLButtonElement)) {\n router\n .navigate(value.name, value.params ?? {}, value.options ?? {})\n .catch(() => {});\n }\n };\n}\n\nfunction attachHandlers(\n element: HTMLElement,\n router: Router,\n value: LinkDirectiveValue,\n): void {\n const handleClick = createClickHandler(router, value);\n const handleKeyDown = createKeydownHandler(router, value, element);\n\n element.addEventListener(\"click\", handleClick);\n element.addEventListener(\"keydown\", handleKeyDown);\n\n clickHandlers.set(element, handleClick);\n keydownHandlers.set(element, handleKeyDown);\n}\n\nfunction detachHandlers(element: HTMLElement): void {\n const clickHandler = clickHandlers.get(element);\n const keydownHandler = keydownHandlers.get(element);\n\n if (clickHandler) {\n element.removeEventListener(\"click\", clickHandler);\n }\n if (keydownHandler) {\n element.removeEventListener(\"keydown\", keydownHandler);\n }\n\n clickHandlers.delete(element);\n keydownHandlers.delete(element);\n}\n\nexport const vLink: Directive<HTMLElement, LinkDirectiveValue> = {\n mounted(element, binding) {\n const router = getDirectiveRouter();\n\n applyLinkA11y(element);\n\n element.style.cursor = \"pointer\";\n\n attachHandlers(element, router, binding.value);\n },\n\n updated(element, binding) {\n const router = getDirectiveRouter();\n\n detachHandlers(element);\n attachHandlers(element, router, binding.value);\n },\n\n beforeUnmount(element) {\n detachHandlers(element);\n },\n};\n","import { inject } from \"vue\";\n\nimport { NavigatorKey } from \"../context\";\n\nimport type { Navigator } from \"@real-router/core\";\n\nexport const useNavigator = (): Navigator => {\n const navigator = inject(NavigatorKey);\n\n if (!navigator) {\n throw new Error(\"useNavigator must be used within a RouterProvider\");\n }\n\n return navigator;\n};\n","import { getPluginApi } from \"@real-router/core/api\";\nimport { getRouteUtils } from \"@real-router/route-utils\";\n\nimport { useRouter } from \"./useRouter\";\n\nimport type { RouteUtils } from \"@real-router/route-utils\";\n\nexport const useRouteUtils = (): RouteUtils => {\n const router = useRouter();\n\n return getRouteUtils(getPluginApi(router).getTree());\n};\n","import { inject } from \"vue\";\n\nimport { RouteKey } from \"../context\";\n\nimport type { RouteContext } from \"../types\";\n\nexport const useRoute = (): RouteContext => {\n const routeContext = inject(RouteKey);\n\n if (!routeContext) {\n throw new Error(\"useRoute must be used within a RouterProvider\");\n }\n\n return routeContext;\n};\n","import { createTransitionSource } from \"@real-router/sources\";\n\nimport { useRefFromSource } from \"../useRefFromSource\";\nimport { useRouter } from \"./useRouter\";\n\nimport type { RouterTransitionSnapshot } from \"@real-router/sources\";\nimport type { ShallowRef } from \"vue\";\n\nexport function useRouterTransition(): ShallowRef<RouterTransitionSnapshot> {\n const router = useRouter();\n\n const source = createTransitionSource(router);\n\n return useRefFromSource(source);\n}\n","import { getNavigator } from \"@real-router/core\";\nimport { createRouteSource } from \"@real-router/sources\";\nimport { shallowRef } from \"vue\";\n\nimport { NavigatorKey, RouteKey, RouterKey } from \"./context\";\nimport { setDirectiveRouter } from \"./directives/vLink\";\n\nimport type { Router } from \"@real-router/core\";\nimport type { Plugin } from \"vue\";\n\nexport function createRouterPlugin(router: Router): Plugin<[]> {\n return {\n install(app): void {\n const navigator = getNavigator(router);\n\n setDirectiveRouter(router);\n\n const source = createRouteSource(router);\n const initialSnapshot = source.getSnapshot();\n\n const route = shallowRef(initialSnapshot.route);\n const previousRoute = shallowRef(initialSnapshot.previousRoute);\n\n source.subscribe(() => {\n const snapshot = source.getSnapshot();\n\n route.value = snapshot.route;\n previousRoute.value = snapshot.previousRoute;\n });\n\n app.provide(RouterKey, router);\n app.provide(NavigatorKey, navigator);\n app.provide(RouteKey, { navigator, route, previousRoute });\n },\n };\n}\n","import { getNavigator } from \"@real-router/core\";\nimport { createRouteSource } from \"@real-router/sources\";\nimport { createRouteAnnouncer } from \"dom-utils\";\nimport {\n defineComponent,\n onMounted,\n onUnmounted,\n provide,\n shallowRef,\n onScopeDispose,\n} from \"vue\";\n\nimport { NavigatorKey, RouteKey, RouterKey } from \"./context\";\nimport { setDirectiveRouter } from \"./directives/vLink\";\n\nimport type { Router } from \"@real-router/core\";\nimport type { PropType } from \"vue\";\n\nexport const RouterProvider = defineComponent({\n name: \"RouterProvider\",\n props: {\n router: {\n type: Object as PropType<Router>,\n required: true,\n },\n announceNavigation: {\n type: Boolean,\n default: false,\n },\n },\n setup(props, { slots }) {\n onMounted(() => {\n if (!props.announceNavigation) {\n return;\n }\n\n const announcer = createRouteAnnouncer(props.router);\n\n onUnmounted(() => {\n announcer.destroy();\n });\n });\n\n const navigator = getNavigator(props.router);\n\n setDirectiveRouter(props.router);\n\n const source = createRouteSource(props.router);\n const initialSnapshot = source.getSnapshot();\n\n const route = shallowRef(initialSnapshot.route);\n const previousRoute = shallowRef(initialSnapshot.previousRoute);\n\n const unsub = source.subscribe(() => {\n const snapshot = source.getSnapshot();\n\n route.value = snapshot.route;\n previousRoute.value = snapshot.previousRoute;\n });\n\n onScopeDispose(unsub);\n\n provide(RouterKey, props.router);\n provide(NavigatorKey, navigator);\n provide(RouteKey, { navigator, route, previousRoute });\n\n return () => slots.default?.();\n },\n});\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":["Fragment","UNKNOWN_ROUTE","Suspense","KeepAlive","Fragment","Fragment"],"sources":["../../src/components/RouteView/components.ts","../../src/components/RouteView/helpers.ts","../../src/useRefFromSource.ts","../../src/context.ts","../../src/composables/useRouter.ts","../../src/composables/useRouteNode.ts","../../src/components/RouteView/RouteView.ts","../../src/composables/useIsActiveRoute.ts","../../src/constants.ts","../../../../shared/dom-utils/route-announcer.ts","../../../../shared/dom-utils/link-utils.ts","../../src/components/Link.ts","../../src/composables/useRouterError.ts","../../src/components/RouterErrorBoundary.ts","../../src/directives/vLink.ts","../../src/composables/useNavigator.ts","../../src/composables/useRouteUtils.ts","../../src/composables/useRoute.ts","../../src/composables/useRouterTransition.ts","../../src/createRouterPlugin.ts","../../src/RouterProvider.ts"],"sourcesContent":["import { defineComponent } from \"vue\";\n\nimport type { PropType, VNode } from \"vue\";\n\nfunction renderNull() {\n return null;\n}\n\nexport const Match = defineComponent({\n name: \"RouteView.Match\",\n props: {\n segment: {\n type: String as PropType<string>,\n required: true,\n },\n exact: {\n type: Boolean,\n default: false,\n },\n fallback: {\n type: [Object, Function] as PropType<VNode | (() => VNode)>,\n default: undefined,\n },\n keepAlive: {\n type: Boolean,\n default: false,\n },\n },\n render: renderNull,\n});\n\nexport const NotFound = defineComponent({\n name: \"RouteView.NotFound\",\n render: renderNull,\n});\n","import { UNKNOWN_ROUTE } from \"@real-router/core\";\nimport { startsWithSegment } from \"@real-router/route-utils\";\nimport { Fragment, isVNode } from \"vue\";\n\nimport { Match, NotFound } from \"./components\";\n\nimport type { VNode } from \"vue\";\n\ntype FallbackType = VNode | (() => VNode) | undefined;\n\nfunction isSegmentMatch(\n routeName: string,\n fullSegmentName: string,\n exact: boolean,\n): boolean {\n if (exact) {\n return routeName === fullSegmentName;\n }\n\n return startsWithSegment(routeName, fullSegmentName);\n}\n\nfunction normalizeChildren(children: unknown): VNode[] {\n if (Array.isArray(children)) {\n const result: VNode[] = [];\n\n for (const child of children) {\n if (Array.isArray(child)) {\n result.push(...normalizeChildren(child));\n } else if (isVNode(child)) {\n result.push(child);\n }\n }\n\n return result;\n }\n\n if (isVNode(children)) {\n return [children];\n }\n\n return [];\n}\n\nexport function collectElements(children: unknown, result: VNode[]): void {\n const vnodes = normalizeChildren(children);\n\n for (const child of vnodes) {\n if (child.type === Match || child.type === NotFound) {\n result.push(child);\n } else if (child.type === Fragment) {\n collectElements(child.children, result);\n }\n }\n}\n\nexport function buildRenderList(\n elements: VNode[],\n routeName: string,\n nodeName: string,\n): {\n rendered: VNode[];\n activeMatchFound: boolean;\n fallback?: FallbackType;\n} {\n let notFoundChildren: unknown = null;\n let activeMatchFound = false;\n let fallback: FallbackType = undefined;\n const rendered: VNode[] = [];\n\n for (const child of elements) {\n if (child.type === NotFound) {\n notFoundChildren = child.children;\n continue;\n }\n\n const props = child.props as {\n segment: string;\n exact?: boolean;\n fallback?: FallbackType;\n } | null;\n const segment = props?.segment ?? \"\";\n const exact = props?.exact ?? false;\n const fullSegmentName = nodeName ? `${nodeName}.${segment}` : segment;\n const isActive =\n !activeMatchFound && isSegmentMatch(routeName, fullSegmentName, exact);\n\n if (isActive) {\n activeMatchFound = true;\n fallback = props?.fallback;\n rendered.push(child);\n }\n }\n\n if (\n !activeMatchFound &&\n routeName === UNKNOWN_ROUTE &&\n notFoundChildren !== null\n ) {\n const nfElements = elements.filter((element) => element.type === NotFound);\n /* v8 ignore next 3 */\n const lastNf = nfElements.at(-1);\n\n if (lastNf) {\n rendered.push(lastNf);\n }\n }\n\n return { rendered, activeMatchFound, fallback };\n}\n","import { shallowRef, onScopeDispose } from \"vue\";\n\nimport type { RouterSource } from \"@real-router/sources\";\nimport type { ShallowRef } from \"vue\";\n\nexport function useRefFromSource<T>(source: RouterSource<T>): ShallowRef<T> {\n const ref = shallowRef(source.getSnapshot());\n\n const unsub = source.subscribe(() => {\n ref.value = source.getSnapshot();\n });\n\n onScopeDispose(unsub);\n\n return ref;\n}\n","import type { RouteContext as RouteContextType } from \"./types\";\nimport type { Router, Navigator } from \"@real-router/core\";\nimport type { InjectionKey } from \"vue\";\n\nexport const RouterKey: InjectionKey<Router> = Symbol(\"RouterKey\");\n\nexport const NavigatorKey: InjectionKey<Navigator> = Symbol(\"NavigatorKey\");\n\nexport const RouteKey: InjectionKey<RouteContextType> = Symbol(\"RouteKey\");\n","import { inject } from \"vue\";\n\nimport { RouterKey } from \"../context\";\n\nimport type { Router } from \"@real-router/core\";\n\nexport const useRouter = (): Router => {\n const router = inject(RouterKey);\n\n if (!router) {\n throw new Error(\"useRouter must be used within a RouterProvider\");\n }\n\n return router;\n};\n","import { getNavigator } from \"@real-router/core\";\nimport { createRouteNodeSource } from \"@real-router/sources\";\nimport { shallowRef, watch } from \"vue\";\n\nimport { useRefFromSource } from \"../useRefFromSource\";\nimport { useRouter } from \"./useRouter\";\n\nimport type { RouteContext } from \"../types\";\nimport type { State } from \"@real-router/core\";\n\nexport function useRouteNode(nodeName: string): RouteContext {\n const router = useRouter();\n\n const source = createRouteNodeSource(router, nodeName);\n const snapshot = useRefFromSource(source);\n\n const navigator = getNavigator(router);\n\n const route = shallowRef<State | undefined>(snapshot.value.route);\n const previousRoute = shallowRef<State | undefined>(\n snapshot.value.previousRoute,\n );\n\n watch(\n snapshot,\n (newSnapshot) => {\n route.value = newSnapshot.route;\n previousRoute.value = newSnapshot.previousRoute;\n },\n { flush: \"sync\" },\n );\n\n return {\n navigator,\n route,\n previousRoute,\n };\n}\n","import {\n Fragment,\n defineComponent,\n h,\n KeepAlive,\n markRaw,\n Suspense,\n} from \"vue\";\n\nimport { Match, NotFound } from \"./components\";\nimport { buildRenderList, collectElements } from \"./helpers\";\nimport { useRouteNode } from \"../../composables/useRouteNode\";\n\nimport type { Component, VNode } from \"vue\";\n\ntype SlotChildren = Record<string, (() => VNode[]) | undefined> | null;\n\nfunction getSlotContent(vnode: VNode): VNode[] | null {\n const slots = vnode.children as SlotChildren;\n\n return slots?.default?.() ?? null;\n}\n\nfunction getOrCreateWrapper(\n cache: Map<string, Component>,\n segment: string,\n): Component {\n const existing = cache.get(segment);\n\n if (existing) {\n return existing;\n }\n\n const wrapper = markRaw(\n defineComponent({\n name: `KeepAlive-${segment}`,\n setup(_wrapperProps, wrapperCtx) {\n return () => wrapperCtx.slots.default?.();\n },\n }),\n );\n\n cache.set(segment, wrapper);\n\n return wrapper;\n}\n\nfunction wrapWithSuspense(content: VNode, fallback: unknown): VNode {\n if (fallback === undefined) {\n return content;\n }\n\n const fallbackContent =\n typeof fallback === \"function\" ? (fallback as () => VNode)() : fallback;\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-assignment\n const suspenseComponent = Suspense as any;\n\n return h(\n suspenseComponent,\n {},\n {\n default: () => content,\n fallback: () => fallbackContent,\n },\n );\n}\n\nconst emptyKeepAlivePlaceholder = markRaw(\n defineComponent({\n name: \"KeepAlive-placeholder\",\n render() {\n return null;\n },\n }),\n);\n\nfunction renderWithRootKA(\n activeChild: VNode,\n wrapperCache: Map<string, Component>,\n fallback: unknown,\n): VNode {\n const activeProps = activeChild.props as { segment?: string } | null;\n const segment = activeProps?.segment ?? \"__not-found__\";\n const WrapperComponent = getOrCreateWrapper(wrapperCache, segment);\n const slotContent = getSlotContent(activeChild) ?? [];\n const keepAliveContent = h(KeepAlive, null, {\n default: () =>\n h(WrapperComponent, { key: segment }, { default: () => slotContent }),\n });\n\n return wrapWithSuspense(keepAliveContent, fallback);\n}\n\nfunction renderWithPerMatchKA(\n activeChild: VNode,\n wrapperCache: Map<string, Component>,\n fallback: unknown,\n): VNode | null {\n const matchProps = activeChild.props as {\n segment?: string;\n keepAlive?: boolean;\n } | null;\n\n if (matchProps?.keepAlive === true && activeChild.type === Match) {\n /* v8 ignore start */\n const segment = matchProps.segment ?? \"__not-found__\";\n /* v8 ignore stop */\n const WrapperComponent = getOrCreateWrapper(wrapperCache, segment);\n const slotContent = getSlotContent(activeChild) ?? [];\n\n return h(Fragment, [\n h(KeepAlive, null, {\n default: () =>\n h(WrapperComponent, { key: segment }, { default: () => slotContent }),\n }),\n ]);\n }\n\n const content = getSlotContent(activeChild);\n\n /* v8 ignore start */\n if (!content) {\n return null;\n }\n /* v8 ignore stop */\n\n return h(Fragment, [\n h(KeepAlive, null, { default: () => h(emptyKeepAlivePlaceholder) }),\n wrapWithSuspense(h(Fragment, content), fallback),\n ]);\n}\n\nconst RouteViewComponent = defineComponent({\n name: \"RouteView\",\n props: {\n nodeName: {\n type: String,\n required: true,\n },\n keepAlive: {\n type: Boolean,\n default: false,\n },\n },\n setup(props, { slots }) {\n const routeContext = useRouteNode(props.nodeName);\n const wrapperCache = new Map<string, Component>();\n\n return (): VNode | null => {\n const route = routeContext.route.value;\n\n if (!route) {\n return null;\n }\n\n const elements: VNode[] = [];\n\n collectElements(slots.default?.(), elements);\n\n const { rendered, fallback } = buildRenderList(\n elements,\n route.name,\n props.nodeName,\n );\n\n if (rendered.length === 0) {\n return null;\n }\n\n const activeChild = rendered[0];\n\n if (props.keepAlive) {\n return renderWithRootKA(activeChild, wrapperCache, fallback);\n }\n\n /* v8 ignore start */\n if (activeChild.type !== Match && activeChild.type !== NotFound) {\n return null;\n }\n /* v8 ignore stop */\n\n const hasPerMatchKA = elements.some(\n (element) =>\n element.type === Match &&\n (element.props as { keepAlive?: boolean } | null)?.keepAlive === true,\n );\n\n if (hasPerMatchKA) {\n return renderWithPerMatchKA(activeChild, wrapperCache, fallback);\n }\n\n const content = getSlotContent(activeChild);\n\n if (!content) {\n return null;\n }\n\n return wrapWithSuspense(h(Fragment, content), fallback);\n };\n },\n});\n\nexport const RouteView = Object.assign(RouteViewComponent, { Match, NotFound });\n\nexport type {\n RouteViewProps,\n MatchProps as RouteViewMatchProps,\n NotFoundProps as RouteViewNotFoundProps,\n} from \"./types\";\n","import { createActiveRouteSource } from \"@real-router/sources\";\n\nimport { useRefFromSource } from \"../useRefFromSource\";\nimport { useRouter } from \"./useRouter\";\n\nimport type { Params } from \"@real-router/core\";\nimport type { ShallowRef } from \"vue\";\n\nexport function useIsActiveRoute(\n routeName: string,\n params?: Params,\n strict = false,\n ignoreQueryParams = true,\n): ShallowRef<boolean> {\n const router = useRouter();\n\n const source = createActiveRouteSource(router, routeName, params, {\n strict,\n ignoreQueryParams,\n });\n\n return useRefFromSource(source);\n}\n","/**\n * Stable empty object for default params\n */\nexport const EMPTY_PARAMS = Object.freeze({});\n\n/**\n * Stable empty options object\n */\nexport const EMPTY_OPTIONS = Object.freeze({});\n","import type { Router, State } from \"@real-router/core\";\n\nconst CLEAR_DELAY = 7000;\nconst SAFARI_READY_DELAY = 100;\nconst ANNOUNCER_ATTR = \"data-real-router-announcer\";\nconst INTERNAL_ROUTE_PREFIX = \"@@\";\nconst VISUALLY_HIDDEN =\n \"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\";\n\nexport interface RouteAnnouncerOptions {\n prefix?: string;\n getAnnouncementText?: (route: State) => string;\n}\n\nexport function createRouteAnnouncer(\n router: Router,\n options?: RouteAnnouncerOptions,\n): { destroy: () => void } {\n const prefix = options?.prefix ?? \"Navigated to \";\n const getCustomText = options?.getAnnouncementText;\n\n let isInitialNavigation = true;\n let isReady = false;\n let isDestroyed = false;\n let lastAnnouncedText = \"\";\n let clearTimeoutId: ReturnType<typeof setTimeout> | undefined;\n\n const announcer = getOrCreateAnnouncer();\n\n const safariTimeoutId = setTimeout(() => {\n isReady = true;\n }, SAFARI_READY_DELAY);\n\n const unsubscribe = router.subscribe(({ route }) => {\n if (isInitialNavigation) {\n isInitialNavigation = false;\n\n return;\n }\n\n requestAnimationFrame(() => {\n requestAnimationFrame(() => {\n if (isDestroyed) {\n return;\n }\n\n const text = resolveText(route, prefix, getCustomText);\n\n if (text && text !== lastAnnouncedText && isReady) {\n lastAnnouncedText = text;\n clearTimeout(clearTimeoutId);\n announcer.textContent = text;\n clearTimeoutId = setTimeout(() => {\n announcer.textContent = \"\";\n lastAnnouncedText = \"\";\n }, CLEAR_DELAY);\n\n manageFocus();\n }\n });\n });\n });\n\n return {\n destroy() {\n isDestroyed = true;\n unsubscribe();\n clearTimeout(clearTimeoutId);\n clearTimeout(safariTimeoutId);\n removeAnnouncer();\n },\n };\n}\n\nfunction getOrCreateAnnouncer(): HTMLElement {\n const existing = document.querySelector<HTMLElement>(`[${ANNOUNCER_ATTR}]`);\n\n if (existing) {\n return existing;\n }\n\n const element = document.createElement(\"div\");\n\n element.setAttribute(\"style\", VISUALLY_HIDDEN);\n element.setAttribute(\"aria-live\", \"assertive\");\n element.setAttribute(\"aria-atomic\", \"true\");\n element.setAttribute(ANNOUNCER_ATTR, \"\");\n\n document.body.prepend(element);\n\n return element;\n}\n\nfunction removeAnnouncer(): void {\n document.querySelector(`[${ANNOUNCER_ATTR}]`)?.remove();\n}\n\nfunction resolveText(\n route: State,\n prefix: string,\n getCustomText?: (route: State) => string,\n): string {\n if (getCustomText) {\n return getCustomText(route);\n }\n\n const h1 = document.querySelector<HTMLElement>(\"h1\");\n const h1Text = h1?.textContent.trim() ?? \"\";\n const routeName = route.name.startsWith(INTERNAL_ROUTE_PREFIX)\n ? \"\"\n : route.name;\n const rawText =\n h1Text || document.title || routeName || globalThis.location.pathname;\n\n return `${prefix}${rawText}`;\n}\n\nfunction manageFocus(): void {\n const h1 = document.querySelector<HTMLElement>(\"h1\");\n\n if (!h1) {\n return;\n }\n\n if (!h1.hasAttribute(\"tabindex\")) {\n h1.setAttribute(\"tabindex\", \"-1\");\n }\n\n h1.focus({ preventScroll: true });\n}\n","import type { Router, Params } from \"@real-router/core\";\n\nexport function shouldNavigate(evt: MouseEvent): boolean {\n return (\n evt.button === 0 &&\n !evt.metaKey &&\n !evt.altKey &&\n !evt.ctrlKey &&\n !evt.shiftKey\n );\n}\n\ntype BuildUrlFn = (name: string, params: Params) => string;\n\nexport function buildHref(\n router: Router,\n routeName: string,\n routeParams: Params,\n): string | undefined {\n try {\n const buildUrl = router.buildUrl as BuildUrlFn | undefined;\n\n if (buildUrl) {\n return buildUrl(routeName, routeParams);\n }\n\n return router.buildPath(routeName, routeParams);\n } catch {\n console.error(\n `[real-router] Route \"${routeName}\" is not defined. The element will render without an href attribute.`,\n );\n\n return undefined;\n }\n}\n\nexport function buildActiveClassName(\n isActive: boolean,\n activeClassName: string | undefined,\n baseClassName: string | undefined,\n): string | undefined {\n if (isActive && activeClassName) {\n return baseClassName\n ? `${baseClassName} ${activeClassName}`.trim()\n : activeClassName;\n }\n\n return baseClassName ?? undefined;\n}\n\nexport function applyLinkA11y(element: HTMLElement): void {\n if (\n element instanceof HTMLAnchorElement ||\n element instanceof HTMLButtonElement\n ) {\n return;\n }\n if (!element.getAttribute(\"role\")) {\n element.setAttribute(\"role\", \"link\");\n }\n if (!element.getAttribute(\"tabindex\")) {\n element.setAttribute(\"tabindex\", \"0\");\n }\n}\n","import { defineComponent, h, computed } from \"vue\";\n\nimport { useIsActiveRoute } from \"../composables/useIsActiveRoute\";\nimport { useRouter } from \"../composables/useRouter\";\nimport { EMPTY_PARAMS, EMPTY_OPTIONS } from \"../constants\";\nimport {\n shouldNavigate,\n buildHref,\n buildActiveClassName,\n} from \"../dom-utils/index.js\";\n\nimport type { Params, NavigationOptions } from \"@real-router/core\";\nimport type { PropType } from \"vue\";\n\nexport const Link = defineComponent({\n name: \"Link\",\n props: {\n routeName: {\n type: String,\n required: true,\n },\n routeParams: {\n type: Object as PropType<Params>,\n default: () => EMPTY_PARAMS,\n },\n routeOptions: {\n type: Object as PropType<NavigationOptions>,\n default: () => EMPTY_OPTIONS,\n },\n class: {\n type: String,\n default: undefined,\n },\n activeClassName: {\n type: String,\n default: \"active\",\n },\n activeStrict: {\n type: Boolean,\n default: false,\n },\n ignoreQueryParams: {\n type: Boolean,\n default: true,\n },\n target: {\n type: String,\n default: undefined,\n },\n },\n setup(props, { slots, attrs }) {\n const router = useRouter();\n\n const isActive = useIsActiveRoute(\n props.routeName,\n props.routeParams,\n props.activeStrict,\n props.ignoreQueryParams,\n );\n\n const href = computed(() =>\n buildHref(router, props.routeName, props.routeParams),\n );\n\n const finalClassName = computed(() =>\n buildActiveClassName(isActive.value, props.activeClassName, props.class),\n );\n\n const handleClick = (evt: MouseEvent) => {\n if (attrs.onClick && typeof attrs.onClick === \"function\") {\n (attrs.onClick as (evt: MouseEvent) => void)(evt);\n\n if (evt.defaultPrevented) {\n return;\n }\n }\n\n if (!shouldNavigate(evt) || props.target === \"_blank\") {\n return;\n }\n\n evt.preventDefault();\n router\n .navigate(props.routeName, props.routeParams, props.routeOptions)\n .catch(() => {});\n };\n\n return () =>\n h(\n \"a\",\n {\n ...attrs,\n href: href.value,\n class: finalClassName.value,\n target: props.target,\n onClick: handleClick,\n },\n slots.default?.(),\n );\n },\n});\n","import { createErrorSource } from \"@real-router/sources\";\n\nimport { useRefFromSource } from \"../useRefFromSource\";\nimport { useRouter } from \"./useRouter\";\n\nimport type { Router } from \"@real-router/core\";\nimport type { RouterErrorSnapshot, RouterSource } from \"@real-router/sources\";\nimport type { ShallowRef } from \"vue\";\n\nconst cache = new WeakMap<Router, RouterSource<RouterErrorSnapshot>>();\n\nexport function useRouterError(): ShallowRef<RouterErrorSnapshot> {\n const router = useRouter();\n\n let source = cache.get(router);\n\n if (!source) {\n source = createErrorSource(router);\n cache.set(router, source);\n }\n\n return useRefFromSource(source);\n}\n","import { defineComponent, h, ref, watch, computed, Fragment } from \"vue\";\n\nimport { useRouterError } from \"../composables/useRouterError\";\n\nimport type { RouterError, State } from \"@real-router/core\";\nimport type { VNode, PropType } from \"vue\";\n\nexport const RouterErrorBoundary = defineComponent({\n name: \"RouterErrorBoundary\",\n props: {\n fallback: {\n type: Function as PropType<\n (error: RouterError, resetError: () => void) => VNode\n >,\n required: true,\n },\n onError: {\n type: Function as PropType<\n (\n error: RouterError,\n toRoute: State | null,\n fromRoute: State | null,\n ) => void\n >,\n default: undefined,\n },\n },\n setup(props, { slots }) {\n const snapshot = useRouterError();\n const dismissedVersion = ref(-1);\n\n watch(\n () => snapshot.value.version,\n () => {\n if (snapshot.value.error) {\n props.onError?.(\n snapshot.value.error,\n snapshot.value.toRoute,\n snapshot.value.fromRoute,\n );\n }\n },\n { immediate: true },\n );\n\n const visibleError = computed(() =>\n snapshot.value.version > dismissedVersion.value\n ? snapshot.value.error\n : null,\n );\n\n const resetError = () => {\n dismissedVersion.value = snapshot.value.version;\n };\n\n return () => {\n const children = slots.default?.() ?? [];\n const errorVNode = visibleError.value\n ? props.fallback(visibleError.value, resetError)\n : null;\n\n return h(Fragment, null, [...children, errorVNode]);\n };\n },\n});\n\nexport type RouterErrorBoundaryProps = InstanceType<\n typeof RouterErrorBoundary\n>[\"$props\"];\n","import { shouldNavigate, applyLinkA11y } from \"../dom-utils/index.js\";\n\nimport type { Router, NavigationOptions, Params } from \"@real-router/core\";\nimport type { Directive } from \"vue\";\n\nexport interface LinkDirectiveValue {\n name: string;\n params?: Params;\n options?: NavigationOptions;\n}\n\nlet _router: Router | null = null;\n\nexport function setDirectiveRouter(router: Router): void {\n _router = router;\n}\n\nexport function getDirectiveRouter(): Router {\n if (!_router) {\n /* v8 ignore next 3 -- @preserve Defensive: router always initialized by RouterProvider */\n throw new Error(\n \"v-link directive requires a RouterProvider ancestor. Make sure RouterProvider is mounted.\",\n );\n }\n\n return _router;\n}\n\nconst clickHandlers = new WeakMap<HTMLElement, (evt: MouseEvent) => void>();\nconst keydownHandlers = new WeakMap<\n HTMLElement,\n (evt: KeyboardEvent) => void\n>();\n\nfunction createClickHandler(\n router: Router,\n value: LinkDirectiveValue,\n): (evt: MouseEvent) => void {\n return (evt: MouseEvent) => {\n if (!shouldNavigate(evt)) {\n return;\n }\n\n evt.preventDefault();\n router\n .navigate(value.name, value.params ?? {}, value.options ?? {})\n .catch(() => {});\n };\n}\n\nfunction createKeydownHandler(\n router: Router,\n value: LinkDirectiveValue,\n element: HTMLElement,\n): (evt: KeyboardEvent) => void {\n return (evt: KeyboardEvent) => {\n if (evt.key === \"Enter\" && !(element instanceof HTMLButtonElement)) {\n router\n .navigate(value.name, value.params ?? {}, value.options ?? {})\n .catch(() => {});\n }\n };\n}\n\nfunction attachHandlers(\n element: HTMLElement,\n router: Router,\n value: LinkDirectiveValue,\n): void {\n const handleClick = createClickHandler(router, value);\n const handleKeyDown = createKeydownHandler(router, value, element);\n\n element.addEventListener(\"click\", handleClick);\n element.addEventListener(\"keydown\", handleKeyDown);\n\n clickHandlers.set(element, handleClick);\n keydownHandlers.set(element, handleKeyDown);\n}\n\nfunction detachHandlers(element: HTMLElement): void {\n const clickHandler = clickHandlers.get(element);\n const keydownHandler = keydownHandlers.get(element);\n\n if (clickHandler) {\n element.removeEventListener(\"click\", clickHandler);\n }\n if (keydownHandler) {\n element.removeEventListener(\"keydown\", keydownHandler);\n }\n\n clickHandlers.delete(element);\n keydownHandlers.delete(element);\n}\n\nexport const vLink: Directive<HTMLElement, LinkDirectiveValue> = {\n mounted(element, binding) {\n const router = getDirectiveRouter();\n\n applyLinkA11y(element);\n\n element.style.cursor = \"pointer\";\n\n attachHandlers(element, router, binding.value);\n },\n\n updated(element, binding) {\n const router = getDirectiveRouter();\n\n detachHandlers(element);\n attachHandlers(element, router, binding.value);\n },\n\n beforeUnmount(element) {\n detachHandlers(element);\n },\n};\n","import { inject } from \"vue\";\n\nimport { NavigatorKey } from \"../context\";\n\nimport type { Navigator } from \"@real-router/core\";\n\nexport const useNavigator = (): Navigator => {\n const navigator = inject(NavigatorKey);\n\n if (!navigator) {\n throw new Error(\"useNavigator must be used within a RouterProvider\");\n }\n\n return navigator;\n};\n","import { getPluginApi } from \"@real-router/core/api\";\nimport { getRouteUtils } from \"@real-router/route-utils\";\n\nimport { useRouter } from \"./useRouter\";\n\nimport type { RouteUtils } from \"@real-router/route-utils\";\n\nexport const useRouteUtils = (): RouteUtils => {\n const router = useRouter();\n\n return getRouteUtils(getPluginApi(router).getTree());\n};\n","import { inject } from \"vue\";\n\nimport { RouteKey } from \"../context\";\n\nimport type { RouteContext } from \"../types\";\n\nexport const useRoute = (): RouteContext => {\n const routeContext = inject(RouteKey);\n\n if (!routeContext) {\n throw new Error(\"useRoute must be used within a RouterProvider\");\n }\n\n return routeContext;\n};\n","import { createTransitionSource } from \"@real-router/sources\";\n\nimport { useRefFromSource } from \"../useRefFromSource\";\nimport { useRouter } from \"./useRouter\";\n\nimport type { RouterTransitionSnapshot } from \"@real-router/sources\";\nimport type { ShallowRef } from \"vue\";\n\nexport function useRouterTransition(): ShallowRef<RouterTransitionSnapshot> {\n const router = useRouter();\n\n const source = createTransitionSource(router);\n\n return useRefFromSource(source);\n}\n","import { getNavigator } from \"@real-router/core\";\nimport { createRouteSource } from \"@real-router/sources\";\nimport { shallowRef } from \"vue\";\n\nimport { NavigatorKey, RouteKey, RouterKey } from \"./context\";\nimport { setDirectiveRouter } from \"./directives/vLink\";\n\nimport type { Router } from \"@real-router/core\";\nimport type { Plugin } from \"vue\";\n\nexport function createRouterPlugin(router: Router): Plugin<[]> {\n return {\n install(app): void {\n const navigator = getNavigator(router);\n\n setDirectiveRouter(router);\n\n const source = createRouteSource(router);\n const initialSnapshot = source.getSnapshot();\n\n const route = shallowRef(initialSnapshot.route);\n const previousRoute = shallowRef(initialSnapshot.previousRoute);\n\n source.subscribe(() => {\n const snapshot = source.getSnapshot();\n\n route.value = snapshot.route;\n previousRoute.value = snapshot.previousRoute;\n });\n\n app.provide(RouterKey, router);\n app.provide(NavigatorKey, navigator);\n app.provide(RouteKey, { navigator, route, previousRoute });\n },\n };\n}\n","import { getNavigator } from \"@real-router/core\";\nimport { createRouteSource } from \"@real-router/sources\";\nimport {\n defineComponent,\n onMounted,\n onUnmounted,\n provide,\n shallowRef,\n onScopeDispose,\n} from \"vue\";\n\nimport { NavigatorKey, RouteKey, RouterKey } from \"./context\";\nimport { setDirectiveRouter } from \"./directives/vLink\";\nimport { createRouteAnnouncer } from \"./dom-utils/index.js\";\n\nimport type { Router } from \"@real-router/core\";\nimport type { PropType } from \"vue\";\n\nexport const RouterProvider = defineComponent({\n name: \"RouterProvider\",\n props: {\n router: {\n type: Object as PropType<Router>,\n required: true,\n },\n announceNavigation: {\n type: Boolean,\n default: false,\n },\n },\n setup(props, { slots }) {\n onMounted(() => {\n if (!props.announceNavigation) {\n return;\n }\n\n const announcer = createRouteAnnouncer(props.router);\n\n onUnmounted(() => {\n announcer.destroy();\n });\n });\n\n const navigator = getNavigator(props.router);\n\n setDirectiveRouter(props.router);\n\n const source = createRouteSource(props.router);\n const initialSnapshot = source.getSnapshot();\n\n const route = shallowRef(initialSnapshot.route);\n const previousRoute = shallowRef(initialSnapshot.previousRoute);\n\n const unsub = source.subscribe(() => {\n const snapshot = source.getSnapshot();\n\n route.value = snapshot.route;\n previousRoute.value = snapshot.previousRoute;\n });\n\n onScopeDispose(unsub);\n\n provide(RouterKey, props.router);\n provide(NavigatorKey, navigator);\n provide(RouteKey, { navigator, route, previousRoute });\n\n return () => slots.default?.();\n },\n});\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.mts","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/createRouterPlugin.ts","../../src/RouterProvider.ts","../../src/context.ts"],"mappings":";;;;;;;UAEiB,cAAA;EAAA,SACN,QAAA;EAAA,SACA,SAAA;AAAA;AAAA,UAGM,UAAA;EAAA,SACN,OAAA;EAAA,SACA,KAAA;EAAA,SACA,QAAA,GAAW,KAAA,UAAe,KAAA;EAAA,SAC1B,SAAA;AAAA;AAAA,KAGC,aAAA,GAAgB,MAAA;;;cC6Lf,SAAA;EAAA,sBAtDO,KAAA,CAAA,uCAAA;;;;;;;;;4BAAL,KAAA,qBAAK,KAAA,CAAO,qBAAA,EAAA,KAAA,CAAA,qBAAA,MAAA,KAAA,CAAA,WAAA;;mBAAA,KAAA,CAAA,gBAAA;;;;;;;;;;;;;;;;4BAAZ,KAAA;;;;;;;;;;;;;;;0BAAA,KAAA,qBAAK,KAAA,CAAO,qBAAA,EAAA,KAAA,CAAA,qBAAA;;mBAAA,KAAA,CAAA,gBAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cC3Id,IAAA,QAAI,eAAA,OAAA,gBAAA;;;;;;UAQK,QAAA,CAAS,MAAA;;;;UAIT,QAAA,CAAS,iBAAA;;;;;;;;;;;;;;;;;;;;;;;sBAZd,KAAA,CAAA,YAAA;;;;;;;;UAQK,QAAA,CAAS,MAAA;;;;UAIT,QAAA,CAAS,iBAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cCflB,mBAAA,QAAmB,eAAA,CAUA,KAAA,CAVA,gBAAA;;UAIR,QAAA,EACf,KAAA,EAAO,WAAA,EAAa,UAAA,iBAA2B,KAAA;;;;UAKhC,QAAA,EAEd,KAAA,EAAO,WAAA,EACP,OAAA,EAAS,KAAA,SACT,SAAA,EAAW,KAAA;;;gBAdW,KAAA,CAAA,YAAA;;kHAUA,KAAA,CAAA,gBAAA;;UANR,QAAA,EACf,KAAA,EAAO,WAAA,EAAa,UAAA,iBAA2B,KAAA;;;;UAKhC,QAAA,EAEd,KAAA,EAAO,WAAA,EACP,OAAA,EAAS,KAAA,SACT,SAAA,EAAW,KAAA;;;;mBAFJ,WAAA,EAAW,OAAA,EACT,KAAA,SAAY,SAAA,EACV,KAAA;AAAA,uBAAK,KAAA,CAAA,uBAAA;AAAA,KA6Cd,wBAAA,GAA2B,YAAA,QAC9B,mBAAA;;;UC9DQ,kBAAA;EACf,IAAA;EACA,MAAA,GAAS,MAAA;EACT,OAAA,GAAU,iBAAA;AAAA;AAAA,cAsFC,KAAA,EAAO,SAAA,CAAU,WAAA,EAAa,kBAAA;;;cCxF9B,SAAA,QAAgB,MAAA;;;cCAhB,YAAA,QAAmB,WAAA;;;cCCnB,aAAA,QAAoB,UAAA;;;UCChB,YAAA;EACf,SAAA,EAAW,WAAA;EACX,KAAA,EAAO,UAAA,CAAW,KAAA;EAClB,aAAA,EAAe,UAAA,CAAW,KAAA;AAAA;AAAA,UAGX,SAAA,WAAoB,MAAA,GAAS,MAAA;EAC5C,SAAA;EACA,WAAA,GAAc,CAAA;EACd,YAAA,GAAe,iBAAA;EACf,KAAA;EACA,eAAA;EACA,YAAA;EACA,iBAAA;EACA,MAAA;AAAA;;;cChBW,QAAA,QAAe,YAAA;;;iBCIZ,YAAA,CAAa,QAAA,WAAmB,YAAA;;;iBCFhC,mBAAA,CAAA,GAAuB,UAAA,CAAW,0BAAA;;;iBCElC,kBAAA,CAAmB,MAAA,EAAQ,MAAA,GAAS,MAAA;;;cCQvC,cAAA,QAAc,eAAA,OAAA,gBAAA;;UAIL,QAAA,CAAS,MAAA;;;;;;;sBAJJ,KAAA,CAAA,YAAA;;;;UAIL,QAAA,CAAS,MAAA;;;;;;;;;;;;cClBlB,SAAA,EAAW,YAAA,CAAa,MAAA;AAAA,cAExB,YAAA,EAAc,YAAA,CAAa,WAAA;AAAA,cAE3B,QAAA,EAAU,YAAA,CAAa,YAAA"}
1
+ {"version":3,"file":"index.d.mts","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/createRouterPlugin.ts","../../src/RouterProvider.ts","../../src/context.ts"],"mappings":";;;;;;;UAEiB,cAAA;EAAA,SACN,QAAA;EAAA,SACA,SAAA;AAAA;AAAA,UAGM,UAAA;EAAA,SACN,OAAA;EAAA,SACA,KAAA;EAAA,SACA,QAAA,GAAW,KAAA,UAAe,KAAA;EAAA,SAC1B,SAAA;AAAA;AAAA,KAGC,aAAA,GAAgB,MAAA;;;cC6Lf,SAAA;EAAA,sBAtDO,KAAA,CAAA,uCAAA;;;;;;;;;4BAAL,KAAA,qBAAK,KAAA,CAAO,qBAAA,EAAA,KAAA,CAAA,qBAAA,MAAA,KAAA,CAAA,WAAA;;mBAAA,KAAA,CAAA,gBAAA;;;;;;;;;;;;;;;;4BAAZ,KAAA;;;;;;;;;;;;;;;0BAAA,KAAA,qBAAK,KAAA,CAAO,qBAAA,EAAA,KAAA,CAAA,qBAAA;;mBAAA,KAAA,CAAA,gBAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cCvId,IAAA,QAAI,eAAA,OAAA,gBAAA;;;;;;UAQK,QAAA,CAAS,MAAA;;;;UAIT,QAAA,CAAS,iBAAA;;;;;;;;;;;;;;;;;;;;;;;sBAZd,KAAA,CAAA,YAAA;;;;;;;;UAQK,QAAA,CAAS,MAAA;;;;UAIT,QAAA,CAAS,iBAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cCnBlB,mBAAA,QAAmB,eAAA,CAUA,KAAA,CAVA,gBAAA;;UAIR,QAAA,EACf,KAAA,EAAO,WAAA,EAAa,UAAA,iBAA2B,KAAA;;;;UAKhC,QAAA,EAEd,KAAA,EAAO,WAAA,EACP,OAAA,EAAS,KAAA,SACT,SAAA,EAAW,KAAA;;;gBAdW,KAAA,CAAA,YAAA;;kHAUA,KAAA,CAAA,gBAAA;;UANR,QAAA,EACf,KAAA,EAAO,WAAA,EAAa,UAAA,iBAA2B,KAAA;;;;UAKhC,QAAA,EAEd,KAAA,EAAO,WAAA,EACP,OAAA,EAAS,KAAA,SACT,SAAA,EAAW,KAAA;;;;mBAFJ,WAAA,EAAW,OAAA,EACT,KAAA,SAAY,SAAA,EACV,KAAA;AAAA,uBAAK,KAAA,CAAA,uBAAA;AAAA,KA6Cd,wBAAA,GAA2B,YAAA,QAC9B,mBAAA;;;UC9DQ,kBAAA;EACf,IAAA;EACA,MAAA,GAAS,MAAA;EACT,OAAA,GAAU,iBAAA;AAAA;AAAA,cAsFC,KAAA,EAAO,SAAA,CAAU,WAAA,EAAa,kBAAA;;;cCxF9B,SAAA,QAAgB,MAAA;;;cCAhB,YAAA,QAAmB,WAAA;;;cCCnB,aAAA,QAAoB,UAAA;;;UCChB,YAAA;EACf,SAAA,EAAW,WAAA;EACX,KAAA,EAAO,UAAA,CAAW,KAAA;EAClB,aAAA,EAAe,UAAA,CAAW,KAAA;AAAA;AAAA,UAGX,SAAA,WAAoB,MAAA,GAAS,MAAA;EAC5C,SAAA;EACA,WAAA,GAAc,CAAA;EACd,YAAA,GAAe,iBAAA;EACf,KAAA;EACA,eAAA;EACA,YAAA;EACA,iBAAA;EACA,MAAA;AAAA;;;cChBW,QAAA,QAAe,YAAA;;;iBCIZ,YAAA,CAAa,QAAA,WAAmB,YAAA;;;iBCFhC,mBAAA,CAAA,GAAuB,UAAA,CAAW,0BAAA;;;iBCElC,kBAAA,CAAmB,MAAA,EAAQ,MAAA,GAAS,MAAA;;;cCQvC,cAAA,QAAc,eAAA,OAAA,gBAAA;;UAIL,QAAA,CAAS,MAAA;;;;;;;sBAJJ,KAAA,CAAA,YAAA;;;;UAIL,QAAA,CAAS,MAAA;;;;;;;;;;;;cClBlB,SAAA,EAAW,YAAA,CAAa,MAAA;AAAA,cAExB,YAAA,EAAc,YAAA,CAAa,WAAA;AAAA,cAE3B,QAAA,EAAU,YAAA,CAAa,YAAA"}
@@ -1,2 +1,2 @@
1
- import{Fragment as e,KeepAlive as t,Suspense as n,computed as r,defineComponent as i,h as a,inject as o,isVNode as s,markRaw as c,onMounted as l,onScopeDispose as u,onUnmounted as d,provide as f,ref as ee,shallowRef as p,watch as m}from"vue";import{UNKNOWN_ROUTE as te,getNavigator as h}from"@real-router/core";import{getRouteUtils as ne,startsWithSegment as re}from"@real-router/route-utils";import{createActiveRouteSource as ie,createErrorSource as ae,createRouteNodeSource as oe,createRouteSource as g,createTransitionSource as se}from"@real-router/sources";import{getPluginApi as _}from"@real-router/core/api";function v(){return null}const y=i({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:v}),b=i({name:`RouteView.NotFound`,render:v});function x(e,t,n){return n?e===t:re(e,t)}function S(e){if(Array.isArray(e)){let t=[];for(let n of e)Array.isArray(n)?t.push(...S(n)):s(n)&&t.push(n);return t}return s(e)?[e]:[]}function C(t,n){let r=S(t);for(let t of r)t.type===y||t.type===b?n.push(t):t.type===e&&C(t.children,n)}function ce(e,t,n){let r=null,i=!1,a,o=[];for(let s of e){if(s.type===b){r=s.children;continue}let e=s.props,c=e?.segment??``,l=e?.exact??!1,u=n?`${n}.${c}`:c;!i&&x(t,u,l)&&(i=!0,a=e?.fallback,o.push(s))}if(!i&&t===te&&r!==null){let t=e.filter(e=>e.type===b).at(-1);t&&o.push(t)}return{rendered:o,activeMatchFound:i,fallback:a}}function w(e){let t=p(e.getSnapshot());return u(e.subscribe(()=>{t.value=e.getSnapshot()})),t}const T=Symbol(`RouterKey`),E=Symbol(`NavigatorKey`),D=Symbol(`RouteKey`),O=()=>{let e=o(T);if(!e)throw Error(`useRouter must be used within a RouterProvider`);return e};function k(e){let t=O(),n=w(oe(t,e)),r=h(t),i=p(n.value.route),a=p(n.value.previousRoute);return m(n,e=>{i.value=e.route,a.value=e.previousRoute},{flush:`sync`}),{navigator:r,route:i,previousRoute:a}}function A(e){return e.children?.default?.()??null}function j(e,t){let n=e.get(t);if(n)return n;let r=c(i({name:`KeepAlive-${t}`,setup(e,t){return()=>t.slots.default?.()}}));return e.set(t,r),r}function M(e,t){if(t===void 0)return e;let r=typeof t==`function`?t():t;return a(n,{},{default:()=>e,fallback:()=>r})}const le=c(i({name:`KeepAlive-placeholder`,render(){return null}}));function N(e,n,r){let i=e.props?.segment??`__not-found__`,o=j(n,i),s=A(e)??[];return M(a(t,null,{default:()=>a(o,{key:i},{default:()=>s})}),r)}function P(n,r,i){let o=n.props;if(o?.keepAlive===!0&&n.type===y){let i=o.segment??`__not-found__`,s=j(r,i),c=A(n)??[];return a(e,[a(t,null,{default:()=>a(s,{key:i},{default:()=>c})})])}let s=A(n);return s?a(e,[a(t,null,{default:()=>a(le)}),M(a(e,s),i)]):null}const F=i({name:`RouteView`,props:{nodeName:{type:String,required:!0},keepAlive:{type:Boolean,default:!1}},setup(t,{slots:n}){let r=k(t.nodeName),i=new Map;return()=>{let o=r.route.value;if(!o)return null;let s=[];C(n.default?.(),s);let{rendered:c,fallback:l}=ce(s,o.name,t.nodeName);if(c.length===0)return null;let u=c[0];if(t.keepAlive)return N(u,i,l);if(u.type!==y&&u.type!==b)return null;if(s.some(e=>e.type===y&&e.props?.keepAlive===!0))return P(u,i,l);let d=A(u);return d?M(a(e,d),l):null}}}),I=Object.assign(F,{Match:y,NotFound:b}),L=`data-real-router-announcer`;function R(e,t){let n=t?.prefix??`Navigated to `,r=t?.getAnnouncementText,i=!0,a=!1,o=!1,s=``,c,l=z(),u=setTimeout(()=>{a=!0},100),d=e.subscribe(({route:e})=>{if(i){i=!1;return}requestAnimationFrame(()=>{requestAnimationFrame(()=>{if(o)return;let t=V(e,n,r);t&&t!==s&&a&&(s=t,clearTimeout(c),l.textContent=t,c=setTimeout(()=>{l.textContent=``,s=``},7e3),H())})})});return{destroy(){o=!0,d(),clearTimeout(c),clearTimeout(u),B()}}}function z(){let e=document.querySelector(`[${L}]`);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(L,``),document.body.prepend(t),t}function B(){document.querySelector(`[${L}]`)?.remove()}function V(e,t,n){if(n)return n(e);let r=document.querySelector(`h1`)?.textContent.trim()??``,i=e.name.startsWith(`@@`)?``:e.name;return`${t}${r||document.title||i||globalThis.location.pathname}`}function H(){let e=document.querySelector(`h1`);e&&(e.hasAttribute(`tabindex`)||e.setAttribute(`tabindex`,`-1`),e.focus({preventScroll:!0}))}function U(e){return e.button===0&&!e.metaKey&&!e.altKey&&!e.ctrlKey&&!e.shiftKey}function W(e,t,n){try{let r=e.buildUrl;return r?r(t,n):e.buildPath(t,n)}catch{console.error(`[real-router] Route "${t}" is not defined. The element will render without an href attribute.`);return}}function ue(e,t,n){return e&&t?n?`${n} ${t}`.trim():t:n??void 0}function de(e){e instanceof HTMLAnchorElement||e instanceof HTMLButtonElement||(e.getAttribute(`role`)||e.setAttribute(`role`,`link`),e.getAttribute(`tabindex`)||e.setAttribute(`tabindex`,`0`))}function G(e,t,n=!1,r=!0){return w(ie(O(),e,t,{strict:n,ignoreQueryParams:r}))}const fe=Object.freeze({}),pe=Object.freeze({}),me=i({name:`Link`,props:{routeName:{type:String,required:!0},routeParams:{type:Object,default:()=>fe},routeOptions:{type:Object,default:()=>pe},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}},setup(e,{slots:t,attrs:n}){let i=O(),o=G(e.routeName,e.routeParams,e.activeStrict,e.ignoreQueryParams),s=r(()=>W(i,e.routeName,e.routeParams)),c=r(()=>ue(o.value,e.activeClassName,e.class)),l=t=>{n.onClick&&typeof n.onClick==`function`&&(n.onClick(t),t.defaultPrevented)||!U(t)||e.target===`_blank`||(t.preventDefault(),i.navigate(e.routeName,e.routeParams,e.routeOptions).catch(()=>{}))};return()=>a(`a`,{...n,href:s.value,class:c.value,target:e.target,onClick:l},t.default?.())}}),K=new WeakMap;function he(){let e=O(),t=K.get(e);return t||(t=ae(e),K.set(e,t)),w(t)}const ge=i({name:`RouterErrorBoundary`,props:{fallback:{type:Function,required:!0},onError:{type:Function,default:void 0}},setup(t,{slots:n}){let i=he(),o=ee(-1);m(()=>i.value.version,()=>{i.value.error&&t.onError?.(i.value.error,i.value.toRoute,i.value.fromRoute)},{immediate:!0});let s=r(()=>i.value.version>o.value?i.value.error:null),c=()=>{o.value=i.value.version};return()=>{let r=n.default?.()??[],i=s.value?t.fallback(s.value,c):null;return a(e,null,[...r,i])}}});let q=null;function J(e){q=e}function Y(){if(!q)throw Error(`v-link directive requires a RouterProvider ancestor. Make sure RouterProvider is mounted.`);return q}const X=new WeakMap,Z=new WeakMap;function _e(e,t){return n=>{U(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 Q(e,t,n){let r=_e(t,n),i=ve(t,n,e);e.addEventListener(`click`,r),e.addEventListener(`keydown`,i),X.set(e,r),Z.set(e,i)}function $(e){let t=X.get(e),n=Z.get(e);t&&e.removeEventListener(`click`,t),n&&e.removeEventListener(`keydown`,n),X.delete(e),Z.delete(e)}const ye={mounted(e,t){let n=Y();de(e),e.style.cursor=`pointer`,Q(e,n,t.value)},updated(e,t){let n=Y();$(e),Q(e,n,t.value)},beforeUnmount(e){$(e)}},be=()=>{let e=o(E);if(!e)throw Error(`useNavigator must be used within a RouterProvider`);return e},xe=()=>ne(_(O()).getTree()),Se=()=>{let e=o(D);if(!e)throw Error(`useRoute must be used within a RouterProvider`);return e};function Ce(){return w(se(O()))}function we(e){return{install(t){let n=h(e);J(e);let r=g(e),i=r.getSnapshot(),a=p(i.route),o=p(i.previousRoute);r.subscribe(()=>{let e=r.getSnapshot();a.value=e.route,o.value=e.previousRoute}),t.provide(T,e),t.provide(E,n),t.provide(D,{navigator:n,route:a,previousRoute:o})}}}const Te=i({name:`RouterProvider`,props:{router:{type:Object,required:!0},announceNavigation:{type:Boolean,default:!1}},setup(e,{slots:t}){l(()=>{if(!e.announceNavigation)return;let t=R(e.router);d(()=>{t.destroy()})});let n=h(e.router);J(e.router);let r=g(e.router),i=r.getSnapshot(),a=p(i.route),o=p(i.previousRoute);return u(r.subscribe(()=>{let e=r.getSnapshot();a.value=e.route,o.value=e.previousRoute})),f(T,e.router),f(E,n),f(D,{navigator:n,route:a,previousRoute:o}),()=>t.default?.()}});export{me as Link,E as NavigatorKey,D as RouteKey,I as RouteView,ge as RouterErrorBoundary,T as RouterKey,Te as RouterProvider,we as createRouterPlugin,be as useNavigator,Se as useRoute,k as useRouteNode,xe as useRouteUtils,O as useRouter,Ce as useRouterTransition,ye as vLink};
1
+ import{Fragment as e,KeepAlive as t,Suspense as n,computed as r,defineComponent as i,h as a,inject as o,isVNode as s,markRaw as c,onMounted as l,onScopeDispose as u,onUnmounted as d,provide as f,ref as ee,shallowRef as p,watch as m}from"vue";import{UNKNOWN_ROUTE as te,getNavigator as h}from"@real-router/core";import{getRouteUtils as ne,startsWithSegment as re}from"@real-router/route-utils";import{createActiveRouteSource as ie,createErrorSource as g,createRouteNodeSource as ae,createRouteSource as _,createTransitionSource as oe}from"@real-router/sources";import{getPluginApi as se}from"@real-router/core/api";function v(){return null}const y=i({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:v}),b=i({name:`RouteView.NotFound`,render:v});function ce(e,t,n){return n?e===t:re(e,t)}function x(e){if(Array.isArray(e)){let t=[];for(let n of e)Array.isArray(n)?t.push(...x(n)):s(n)&&t.push(n);return t}return s(e)?[e]:[]}function S(t,n){let r=x(t);for(let t of r)t.type===y||t.type===b?n.push(t):t.type===e&&S(t.children,n)}function le(e,t,n){let r=null,i=!1,a,o=[];for(let s of e){if(s.type===b){r=s.children;continue}let e=s.props,c=e?.segment??``,l=e?.exact??!1,u=n?`${n}.${c}`:c;!i&&ce(t,u,l)&&(i=!0,a=e?.fallback,o.push(s))}if(!i&&t===te&&r!==null){let t=e.filter(e=>e.type===b).at(-1);t&&o.push(t)}return{rendered:o,activeMatchFound:i,fallback:a}}function C(e){let t=p(e.getSnapshot());return u(e.subscribe(()=>{t.value=e.getSnapshot()})),t}const w=Symbol(`RouterKey`),T=Symbol(`NavigatorKey`),E=Symbol(`RouteKey`),D=()=>{let e=o(w);if(!e)throw Error(`useRouter must be used within a RouterProvider`);return e};function O(e){let t=D(),n=C(ae(t,e)),r=h(t),i=p(n.value.route),a=p(n.value.previousRoute);return m(n,e=>{i.value=e.route,a.value=e.previousRoute},{flush:`sync`}),{navigator:r,route:i,previousRoute:a}}function k(e){return e.children?.default?.()??null}function A(e,t){let n=e.get(t);if(n)return n;let r=c(i({name:`KeepAlive-${t}`,setup(e,t){return()=>t.slots.default?.()}}));return e.set(t,r),r}function j(e,t){if(t===void 0)return e;let r=typeof t==`function`?t():t;return a(n,{},{default:()=>e,fallback:()=>r})}const ue=c(i({name:`KeepAlive-placeholder`,render(){return null}}));function M(e,n,r){let i=e.props?.segment??`__not-found__`,o=A(n,i),s=k(e)??[];return j(a(t,null,{default:()=>a(o,{key:i},{default:()=>s})}),r)}function N(n,r,i){let o=n.props;if(o?.keepAlive===!0&&n.type===y){let i=o.segment??`__not-found__`,s=A(r,i),c=k(n)??[];return a(e,[a(t,null,{default:()=>a(s,{key:i},{default:()=>c})})])}let s=k(n);return s?a(e,[a(t,null,{default:()=>a(ue)}),j(a(e,s),i)]):null}const P=i({name:`RouteView`,props:{nodeName:{type:String,required:!0},keepAlive:{type:Boolean,default:!1}},setup(t,{slots:n}){let r=O(t.nodeName),i=new Map;return()=>{let o=r.route.value;if(!o)return null;let s=[];S(n.default?.(),s);let{rendered:c,fallback:l}=le(s,o.name,t.nodeName);if(c.length===0)return null;let u=c[0];if(t.keepAlive)return M(u,i,l);if(u.type!==y&&u.type!==b)return null;if(s.some(e=>e.type===y&&e.props?.keepAlive===!0))return N(u,i,l);let d=k(u);return d?j(a(e,d),l):null}}}),F=Object.assign(P,{Match:y,NotFound:b});function I(e,t,n=!1,r=!0){return C(ie(D(),e,t,{strict:n,ignoreQueryParams:r}))}const L=Object.freeze({}),R=Object.freeze({}),z=`data-real-router-announcer`;function B(e,t){let n=t?.prefix??`Navigated to `,r=t?.getAnnouncementText,i=!0,a=!1,o=!1,s=``,c,l=V(),u=setTimeout(()=>{a=!0},100),d=e.subscribe(({route:e})=>{if(i){i=!1;return}requestAnimationFrame(()=>{requestAnimationFrame(()=>{if(o)return;let t=U(e,n,r);t&&t!==s&&a&&(s=t,clearTimeout(c),l.textContent=t,c=setTimeout(()=>{l.textContent=``,s=``},7e3),de())})})});return{destroy(){o=!0,d(),clearTimeout(c),clearTimeout(u),H()}}}function V(){let e=document.querySelector(`[${z}]`);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(z,``),document.body.prepend(t),t}function H(){document.querySelector(`[${z}]`)?.remove()}function U(e,t,n){if(n)return n(e);let r=document.querySelector(`h1`)?.textContent.trim()??``,i=e.name.startsWith(`@@`)?``:e.name;return`${t}${r||document.title||i||globalThis.location.pathname}`}function de(){let e=document.querySelector(`h1`);e&&(e.hasAttribute(`tabindex`)||e.setAttribute(`tabindex`,`-1`),e.focus({preventScroll:!0}))}function W(e){return e.button===0&&!e.metaKey&&!e.altKey&&!e.ctrlKey&&!e.shiftKey}function fe(e,t,n){try{let r=e.buildUrl;return r?r(t,n):e.buildPath(t,n)}catch{console.error(`[real-router] Route "${t}" is not defined. The element will render without an href attribute.`);return}}function pe(e,t,n){return e&&t?n?`${n} ${t}`.trim():t:n??void 0}function me(e){e instanceof HTMLAnchorElement||e instanceof HTMLButtonElement||(e.getAttribute(`role`)||e.setAttribute(`role`,`link`),e.getAttribute(`tabindex`)||e.setAttribute(`tabindex`,`0`))}const he=i({name:`Link`,props:{routeName:{type:String,required:!0},routeParams:{type:Object,default:()=>L},routeOptions:{type:Object,default:()=>R},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}},setup(e,{slots:t,attrs:n}){let i=D(),o=I(e.routeName,e.routeParams,e.activeStrict,e.ignoreQueryParams),s=r(()=>fe(i,e.routeName,e.routeParams)),c=r(()=>pe(o.value,e.activeClassName,e.class)),l=t=>{n.onClick&&typeof n.onClick==`function`&&(n.onClick(t),t.defaultPrevented)||!W(t)||e.target===`_blank`||(t.preventDefault(),i.navigate(e.routeName,e.routeParams,e.routeOptions).catch(()=>{}))};return()=>a(`a`,{...n,href:s.value,class:c.value,target:e.target,onClick:l},t.default?.())}}),G=new WeakMap;function ge(){let e=D(),t=G.get(e);return t||(t=g(e),G.set(e,t)),C(t)}const _e=i({name:`RouterErrorBoundary`,props:{fallback:{type:Function,required:!0},onError:{type:Function,default:void 0}},setup(t,{slots:n}){let i=ge(),o=ee(-1);m(()=>i.value.version,()=>{i.value.error&&t.onError?.(i.value.error,i.value.toRoute,i.value.fromRoute)},{immediate:!0});let s=r(()=>i.value.version>o.value?i.value.error:null),c=()=>{o.value=i.value.version};return()=>{let r=n.default?.()??[],i=s.value?t.fallback(s.value,c):null;return a(e,null,[...r,i])}}});let K=null;function q(e){K=e}function J(){if(!K)throw Error(`v-link directive requires a RouterProvider ancestor. Make sure RouterProvider is mounted.`);return K}const Y=new WeakMap,X=new WeakMap;function ve(e,t){return n=>{W(n)&&(n.preventDefault(),e.navigate(t.name,t.params??{},t.options??{}).catch(()=>{}))}}function ye(e,t,n){return r=>{r.key===`Enter`&&!(n instanceof HTMLButtonElement)&&e.navigate(t.name,t.params??{},t.options??{}).catch(()=>{})}}function Z(e,t,n){let r=ve(t,n),i=ye(t,n,e);e.addEventListener(`click`,r),e.addEventListener(`keydown`,i),Y.set(e,r),X.set(e,i)}function Q(e){let t=Y.get(e),n=X.get(e);t&&e.removeEventListener(`click`,t),n&&e.removeEventListener(`keydown`,n),Y.delete(e),X.delete(e)}const be={mounted(e,t){let n=J();me(e),e.style.cursor=`pointer`,Z(e,n,t.value)},updated(e,t){let n=J();Q(e),Z(e,n,t.value)},beforeUnmount(e){Q(e)}},$=()=>{let e=o(T);if(!e)throw Error(`useNavigator must be used within a RouterProvider`);return e},xe=()=>ne(se(D()).getTree()),Se=()=>{let e=o(E);if(!e)throw Error(`useRoute must be used within a RouterProvider`);return e};function Ce(){return C(oe(D()))}function we(e){return{install(t){let n=h(e);q(e);let r=_(e),i=r.getSnapshot(),a=p(i.route),o=p(i.previousRoute);r.subscribe(()=>{let e=r.getSnapshot();a.value=e.route,o.value=e.previousRoute}),t.provide(w,e),t.provide(T,n),t.provide(E,{navigator:n,route:a,previousRoute:o})}}}const Te=i({name:`RouterProvider`,props:{router:{type:Object,required:!0},announceNavigation:{type:Boolean,default:!1}},setup(e,{slots:t}){l(()=>{if(!e.announceNavigation)return;let t=B(e.router);d(()=>{t.destroy()})});let n=h(e.router);q(e.router);let r=_(e.router),i=r.getSnapshot(),a=p(i.route),o=p(i.previousRoute);return u(r.subscribe(()=>{let e=r.getSnapshot();a.value=e.route,o.value=e.previousRoute})),f(w,e.router),f(T,n),f(E,{navigator:n,route:a,previousRoute:o}),()=>t.default?.()}});export{he as Link,T as NavigatorKey,E as RouteKey,F as RouteView,_e as RouterErrorBoundary,w as RouterKey,Te as RouterProvider,we as createRouterPlugin,$ as useNavigator,Se as useRoute,O as useRouteNode,xe as useRouteUtils,D as useRouter,Ce as useRouterTransition,be as vLink};
2
2
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","names":["buildHref","buildActiveClassName","shouldNavigate","shouldNavigate","createRouteAnnouncer"],"sources":["../../src/components/RouteView/components.ts","../../src/components/RouteView/helpers.ts","../../src/useRefFromSource.ts","../../src/context.ts","../../src/composables/useRouter.ts","../../src/composables/useRouteNode.ts","../../src/components/RouteView/RouteView.ts","../../../dom-utils/dist/esm/index.mjs","../../src/composables/useIsActiveRoute.ts","../../src/constants.ts","../../src/components/Link.ts","../../src/composables/useRouterError.ts","../../src/components/RouterErrorBoundary.ts","../../src/directives/vLink.ts","../../src/composables/useNavigator.ts","../../src/composables/useRouteUtils.ts","../../src/composables/useRoute.ts","../../src/composables/useRouterTransition.ts","../../src/createRouterPlugin.ts","../../src/RouterProvider.ts"],"sourcesContent":["import { defineComponent } from \"vue\";\n\nimport type { PropType, VNode } from \"vue\";\n\nfunction renderNull() {\n return null;\n}\n\nexport const Match = defineComponent({\n name: \"RouteView.Match\",\n props: {\n segment: {\n type: String as PropType<string>,\n required: true,\n },\n exact: {\n type: Boolean,\n default: false,\n },\n fallback: {\n type: [Object, Function] as PropType<VNode | (() => VNode)>,\n default: undefined,\n },\n keepAlive: {\n type: Boolean,\n default: false,\n },\n },\n render: renderNull,\n});\n\nexport const NotFound = defineComponent({\n name: \"RouteView.NotFound\",\n render: renderNull,\n});\n","import { UNKNOWN_ROUTE } from \"@real-router/core\";\nimport { startsWithSegment } from \"@real-router/route-utils\";\nimport { Fragment, isVNode } from \"vue\";\n\nimport { Match, NotFound } from \"./components\";\n\nimport type { VNode } from \"vue\";\n\ntype FallbackType = VNode | (() => VNode) | undefined;\n\nfunction isSegmentMatch(\n routeName: string,\n fullSegmentName: string,\n exact: boolean,\n): boolean {\n if (exact) {\n return routeName === fullSegmentName;\n }\n\n return startsWithSegment(routeName, fullSegmentName);\n}\n\nfunction normalizeChildren(children: unknown): VNode[] {\n if (Array.isArray(children)) {\n const result: VNode[] = [];\n\n for (const child of children) {\n if (Array.isArray(child)) {\n result.push(...normalizeChildren(child));\n } else if (isVNode(child)) {\n result.push(child);\n }\n }\n\n return result;\n }\n\n if (isVNode(children)) {\n return [children];\n }\n\n return [];\n}\n\nexport function collectElements(children: unknown, result: VNode[]): void {\n const vnodes = normalizeChildren(children);\n\n for (const child of vnodes) {\n if (child.type === Match || child.type === NotFound) {\n result.push(child);\n } else if (child.type === Fragment) {\n collectElements(child.children, result);\n }\n }\n}\n\nexport function buildRenderList(\n elements: VNode[],\n routeName: string,\n nodeName: string,\n): {\n rendered: VNode[];\n activeMatchFound: boolean;\n fallback?: FallbackType;\n} {\n let notFoundChildren: unknown = null;\n let activeMatchFound = false;\n let fallback: FallbackType = undefined;\n const rendered: VNode[] = [];\n\n for (const child of elements) {\n if (child.type === NotFound) {\n notFoundChildren = child.children;\n continue;\n }\n\n const props = child.props as {\n segment: string;\n exact?: boolean;\n fallback?: FallbackType;\n } | null;\n const segment = props?.segment ?? \"\";\n const exact = props?.exact ?? false;\n const fullSegmentName = nodeName ? `${nodeName}.${segment}` : segment;\n const isActive =\n !activeMatchFound && isSegmentMatch(routeName, fullSegmentName, exact);\n\n if (isActive) {\n activeMatchFound = true;\n fallback = props?.fallback;\n rendered.push(child);\n }\n }\n\n if (\n !activeMatchFound &&\n routeName === UNKNOWN_ROUTE &&\n notFoundChildren !== null\n ) {\n const nfElements = elements.filter((element) => element.type === NotFound);\n /* v8 ignore next 3 */\n const lastNf = nfElements.at(-1);\n\n if (lastNf) {\n rendered.push(lastNf);\n }\n }\n\n return { rendered, activeMatchFound, fallback };\n}\n","import { shallowRef, onScopeDispose } from \"vue\";\n\nimport type { RouterSource } from \"@real-router/sources\";\nimport type { ShallowRef } from \"vue\";\n\nexport function useRefFromSource<T>(source: RouterSource<T>): ShallowRef<T> {\n const ref = shallowRef(source.getSnapshot());\n\n const unsub = source.subscribe(() => {\n ref.value = source.getSnapshot();\n });\n\n onScopeDispose(unsub);\n\n return ref;\n}\n","import type { RouteContext as RouteContextType } from \"./types\";\nimport type { Router, Navigator } from \"@real-router/core\";\nimport type { InjectionKey } from \"vue\";\n\nexport const RouterKey: InjectionKey<Router> = Symbol(\"RouterKey\");\n\nexport const NavigatorKey: InjectionKey<Navigator> = Symbol(\"NavigatorKey\");\n\nexport const RouteKey: InjectionKey<RouteContextType> = Symbol(\"RouteKey\");\n","import { inject } from \"vue\";\n\nimport { RouterKey } from \"../context\";\n\nimport type { Router } from \"@real-router/core\";\n\nexport const useRouter = (): Router => {\n const router = inject(RouterKey);\n\n if (!router) {\n throw new Error(\"useRouter must be used within a RouterProvider\");\n }\n\n return router;\n};\n","import { getNavigator } from \"@real-router/core\";\nimport { createRouteNodeSource } from \"@real-router/sources\";\nimport { shallowRef, watch } from \"vue\";\n\nimport { useRefFromSource } from \"../useRefFromSource\";\nimport { useRouter } from \"./useRouter\";\n\nimport type { RouteContext } from \"../types\";\nimport type { State } from \"@real-router/core\";\n\nexport function useRouteNode(nodeName: string): RouteContext {\n const router = useRouter();\n\n const source = createRouteNodeSource(router, nodeName);\n const snapshot = useRefFromSource(source);\n\n const navigator = getNavigator(router);\n\n const route = shallowRef<State | undefined>(snapshot.value.route);\n const previousRoute = shallowRef<State | undefined>(\n snapshot.value.previousRoute,\n );\n\n watch(\n snapshot,\n (newSnapshot) => {\n route.value = newSnapshot.route;\n previousRoute.value = newSnapshot.previousRoute;\n },\n { flush: \"sync\" },\n );\n\n return {\n navigator,\n route,\n previousRoute,\n };\n}\n","import {\n Fragment,\n defineComponent,\n h,\n KeepAlive,\n markRaw,\n Suspense,\n} from \"vue\";\n\nimport { Match, NotFound } from \"./components\";\nimport { buildRenderList, collectElements } from \"./helpers\";\nimport { useRouteNode } from \"../../composables/useRouteNode\";\n\nimport type { Component, VNode } from \"vue\";\n\ntype SlotChildren = Record<string, (() => VNode[]) | undefined> | null;\n\nfunction getSlotContent(vnode: VNode): VNode[] | null {\n const slots = vnode.children as SlotChildren;\n\n return slots?.default?.() ?? null;\n}\n\nfunction getOrCreateWrapper(\n cache: Map<string, Component>,\n segment: string,\n): Component {\n const existing = cache.get(segment);\n\n if (existing) {\n return existing;\n }\n\n const wrapper = markRaw(\n defineComponent({\n name: `KeepAlive-${segment}`,\n setup(_wrapperProps, wrapperCtx) {\n return () => wrapperCtx.slots.default?.();\n },\n }),\n );\n\n cache.set(segment, wrapper);\n\n return wrapper;\n}\n\nfunction wrapWithSuspense(content: VNode, fallback: unknown): VNode {\n if (fallback === undefined) {\n return content;\n }\n\n const fallbackContent =\n typeof fallback === \"function\" ? (fallback as () => VNode)() : fallback;\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-assignment\n const suspenseComponent = Suspense as any;\n\n return h(\n suspenseComponent,\n {},\n {\n default: () => content,\n fallback: () => fallbackContent,\n },\n );\n}\n\nconst emptyKeepAlivePlaceholder = markRaw(\n defineComponent({\n name: \"KeepAlive-placeholder\",\n render() {\n return null;\n },\n }),\n);\n\nfunction renderWithRootKA(\n activeChild: VNode,\n wrapperCache: Map<string, Component>,\n fallback: unknown,\n): VNode {\n const activeProps = activeChild.props as { segment?: string } | null;\n const segment = activeProps?.segment ?? \"__not-found__\";\n const WrapperComponent = getOrCreateWrapper(wrapperCache, segment);\n const slotContent = getSlotContent(activeChild) ?? [];\n const keepAliveContent = h(KeepAlive, null, {\n default: () =>\n h(WrapperComponent, { key: segment }, { default: () => slotContent }),\n });\n\n return wrapWithSuspense(keepAliveContent, fallback);\n}\n\nfunction renderWithPerMatchKA(\n activeChild: VNode,\n wrapperCache: Map<string, Component>,\n fallback: unknown,\n): VNode | null {\n const matchProps = activeChild.props as {\n segment?: string;\n keepAlive?: boolean;\n } | null;\n\n if (matchProps?.keepAlive === true && activeChild.type === Match) {\n /* v8 ignore start */\n const segment = matchProps.segment ?? \"__not-found__\";\n /* v8 ignore stop */\n const WrapperComponent = getOrCreateWrapper(wrapperCache, segment);\n const slotContent = getSlotContent(activeChild) ?? [];\n\n return h(Fragment, [\n h(KeepAlive, null, {\n default: () =>\n h(WrapperComponent, { key: segment }, { default: () => slotContent }),\n }),\n ]);\n }\n\n const content = getSlotContent(activeChild);\n\n /* v8 ignore start */\n if (!content) {\n return null;\n }\n /* v8 ignore stop */\n\n return h(Fragment, [\n h(KeepAlive, null, { default: () => h(emptyKeepAlivePlaceholder) }),\n wrapWithSuspense(h(Fragment, content), fallback),\n ]);\n}\n\nconst RouteViewComponent = defineComponent({\n name: \"RouteView\",\n props: {\n nodeName: {\n type: String,\n required: true,\n },\n keepAlive: {\n type: Boolean,\n default: false,\n },\n },\n setup(props, { slots }) {\n const routeContext = useRouteNode(props.nodeName);\n const wrapperCache = new Map<string, Component>();\n\n return (): VNode | null => {\n const route = routeContext.route.value;\n\n if (!route) {\n return null;\n }\n\n const elements: VNode[] = [];\n\n collectElements(slots.default?.(), elements);\n\n const { rendered, fallback } = buildRenderList(\n elements,\n route.name,\n props.nodeName,\n );\n\n if (rendered.length === 0) {\n return null;\n }\n\n const activeChild = rendered[0];\n\n if (props.keepAlive) {\n return renderWithRootKA(activeChild, wrapperCache, fallback);\n }\n\n /* v8 ignore start */\n if (activeChild.type !== Match && activeChild.type !== NotFound) {\n return null;\n }\n /* v8 ignore stop */\n\n const hasPerMatchKA = elements.some(\n (element) =>\n element.type === Match &&\n (element.props as { keepAlive?: boolean } | null)?.keepAlive === true,\n );\n\n if (hasPerMatchKA) {\n return renderWithPerMatchKA(activeChild, wrapperCache, fallback);\n }\n\n const content = getSlotContent(activeChild);\n\n if (!content) {\n return null;\n }\n\n return wrapWithSuspense(h(Fragment, content), fallback);\n };\n },\n});\n\nexport const RouteView = Object.assign(RouteViewComponent, { Match, NotFound });\n\nexport type {\n RouteViewProps,\n MatchProps as RouteViewMatchProps,\n NotFoundProps as RouteViewNotFoundProps,\n} from \"./types\";\n","const e=`data-real-router-announcer`;function t(e,t){let o=t?.prefix??`Navigated to `,s=t?.getAnnouncementText,c=!0,l=!1,u=!1,d=``,f,p=n(),m=setTimeout(()=>{l=!0},100),h=e.subscribe(({route:e})=>{if(c){c=!1;return}requestAnimationFrame(()=>{requestAnimationFrame(()=>{if(u)return;let t=i(e,o,s);t&&t!==d&&l&&(d=t,clearTimeout(f),p.textContent=t,f=setTimeout(()=>{p.textContent=``,d=``},7e3),a())})})});return{destroy(){u=!0,h(),clearTimeout(f),clearTimeout(m),r()}}}function n(){let t=document.querySelector(`[${e}]`);if(t)return t;let n=document.createElement(`div`);return n.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`),n.setAttribute(`aria-live`,`assertive`),n.setAttribute(`aria-atomic`,`true`),n.setAttribute(e,``),document.body.prepend(n),n}function r(){document.querySelector(`[${e}]`)?.remove()}function i(e,t,n){if(n)return n(e);let r=document.querySelector(`h1`)?.textContent.trim()??``,i=e.name.startsWith(`@@`)?``:e.name;return`${t}${r||document.title||i||globalThis.location.pathname}`}function a(){let e=document.querySelector(`h1`);e&&(e.hasAttribute(`tabindex`)||e.setAttribute(`tabindex`,`-1`),e.focus({preventScroll:!0}))}function o(e){return e.button===0&&!e.metaKey&&!e.altKey&&!e.ctrlKey&&!e.shiftKey}function s(e,t,n){try{let r=e.buildUrl;return r?r(t,n):e.buildPath(t,n)}catch{console.error(`[real-router] Route \"${t}\" is not defined. The element will render without an href attribute.`);return}}function c(e,t,n){return e&&t?n?`${n} ${t}`.trim():t:n??void 0}function l(e){e instanceof HTMLAnchorElement||e instanceof HTMLButtonElement||(e.getAttribute(`role`)||e.setAttribute(`role`,`link`),e.getAttribute(`tabindex`)||e.setAttribute(`tabindex`,`0`))}export{l as applyLinkA11y,c as buildActiveClassName,s as buildHref,t as createRouteAnnouncer,o as shouldNavigate};\n//# sourceMappingURL=index.mjs.map","import { createActiveRouteSource } from \"@real-router/sources\";\n\nimport { useRefFromSource } from \"../useRefFromSource\";\nimport { useRouter } from \"./useRouter\";\n\nimport type { Params } from \"@real-router/core\";\nimport type { ShallowRef } from \"vue\";\n\nexport function useIsActiveRoute(\n routeName: string,\n params?: Params,\n strict = false,\n ignoreQueryParams = true,\n): ShallowRef<boolean> {\n const router = useRouter();\n\n const source = createActiveRouteSource(router, routeName, params, {\n strict,\n ignoreQueryParams,\n });\n\n return useRefFromSource(source);\n}\n","/**\n * Stable empty object for default params\n */\nexport const EMPTY_PARAMS = Object.freeze({});\n\n/**\n * Stable empty options object\n */\nexport const EMPTY_OPTIONS = Object.freeze({});\n","import { shouldNavigate, buildHref, buildActiveClassName } from \"dom-utils\";\nimport { defineComponent, h, computed } from \"vue\";\n\nimport { useIsActiveRoute } from \"../composables/useIsActiveRoute\";\nimport { useRouter } from \"../composables/useRouter\";\nimport { EMPTY_PARAMS, EMPTY_OPTIONS } from \"../constants\";\n\nimport type { Params, NavigationOptions } from \"@real-router/core\";\nimport type { PropType } from \"vue\";\n\nexport const Link = defineComponent({\n name: \"Link\",\n props: {\n routeName: {\n type: String,\n required: true,\n },\n routeParams: {\n type: Object as PropType<Params>,\n default: () => EMPTY_PARAMS,\n },\n routeOptions: {\n type: Object as PropType<NavigationOptions>,\n default: () => EMPTY_OPTIONS,\n },\n class: {\n type: String,\n default: undefined,\n },\n activeClassName: {\n type: String,\n default: \"active\",\n },\n activeStrict: {\n type: Boolean,\n default: false,\n },\n ignoreQueryParams: {\n type: Boolean,\n default: true,\n },\n target: {\n type: String,\n default: undefined,\n },\n },\n setup(props, { slots, attrs }) {\n const router = useRouter();\n\n const isActive = useIsActiveRoute(\n props.routeName,\n props.routeParams,\n props.activeStrict,\n props.ignoreQueryParams,\n );\n\n const href = computed(() =>\n buildHref(router, props.routeName, props.routeParams),\n );\n\n const finalClassName = computed(() =>\n buildActiveClassName(isActive.value, props.activeClassName, props.class),\n );\n\n const handleClick = (evt: MouseEvent) => {\n if (attrs.onClick && typeof attrs.onClick === \"function\") {\n (attrs.onClick as (evt: MouseEvent) => void)(evt);\n\n if (evt.defaultPrevented) {\n return;\n }\n }\n\n if (!shouldNavigate(evt) || props.target === \"_blank\") {\n return;\n }\n\n evt.preventDefault();\n router\n .navigate(props.routeName, props.routeParams, props.routeOptions)\n .catch(() => {});\n };\n\n return () =>\n h(\n \"a\",\n {\n ...attrs,\n href: href.value,\n class: finalClassName.value,\n target: props.target,\n onClick: handleClick,\n },\n slots.default?.(),\n );\n },\n});\n","import { createErrorSource } from \"@real-router/sources\";\n\nimport { useRefFromSource } from \"../useRefFromSource\";\nimport { useRouter } from \"./useRouter\";\n\nimport type { Router } from \"@real-router/core\";\nimport type { RouterErrorSnapshot, RouterSource } from \"@real-router/sources\";\nimport type { ShallowRef } from \"vue\";\n\nconst cache = new WeakMap<Router, RouterSource<RouterErrorSnapshot>>();\n\nexport function useRouterError(): ShallowRef<RouterErrorSnapshot> {\n const router = useRouter();\n\n let source = cache.get(router);\n\n if (!source) {\n source = createErrorSource(router);\n cache.set(router, source);\n }\n\n return useRefFromSource(source);\n}\n","import { defineComponent, h, ref, watch, computed, Fragment } from \"vue\";\n\nimport { useRouterError } from \"../composables/useRouterError\";\n\nimport type { RouterError, State } from \"@real-router/core\";\nimport type { VNode, PropType } from \"vue\";\n\nexport const RouterErrorBoundary = defineComponent({\n name: \"RouterErrorBoundary\",\n props: {\n fallback: {\n type: Function as PropType<\n (error: RouterError, resetError: () => void) => VNode\n >,\n required: true,\n },\n onError: {\n type: Function as PropType<\n (\n error: RouterError,\n toRoute: State | null,\n fromRoute: State | null,\n ) => void\n >,\n default: undefined,\n },\n },\n setup(props, { slots }) {\n const snapshot = useRouterError();\n const dismissedVersion = ref(-1);\n\n watch(\n () => snapshot.value.version,\n () => {\n if (snapshot.value.error) {\n props.onError?.(\n snapshot.value.error,\n snapshot.value.toRoute,\n snapshot.value.fromRoute,\n );\n }\n },\n { immediate: true },\n );\n\n const visibleError = computed(() =>\n snapshot.value.version > dismissedVersion.value\n ? snapshot.value.error\n : null,\n );\n\n const resetError = () => {\n dismissedVersion.value = snapshot.value.version;\n };\n\n return () => {\n const children = slots.default?.() ?? [];\n const errorVNode = visibleError.value\n ? props.fallback(visibleError.value, resetError)\n : null;\n\n return h(Fragment, null, [...children, errorVNode]);\n };\n },\n});\n\nexport type RouterErrorBoundaryProps = InstanceType<\n typeof RouterErrorBoundary\n>[\"$props\"];\n","import { shouldNavigate, applyLinkA11y } from \"dom-utils\";\n\nimport type { Router, NavigationOptions, Params } from \"@real-router/core\";\nimport type { Directive } from \"vue\";\n\nexport interface LinkDirectiveValue {\n name: string;\n params?: Params;\n options?: NavigationOptions;\n}\n\nlet _router: Router | null = null;\n\nexport function setDirectiveRouter(router: Router): void {\n _router = router;\n}\n\nexport function getDirectiveRouter(): Router {\n if (!_router) {\n /* v8 ignore next 3 -- @preserve Defensive: router always initialized by RouterProvider */\n throw new Error(\n \"v-link directive requires a RouterProvider ancestor. Make sure RouterProvider is mounted.\",\n );\n }\n\n return _router;\n}\n\nconst clickHandlers = new WeakMap<HTMLElement, (evt: MouseEvent) => void>();\nconst keydownHandlers = new WeakMap<\n HTMLElement,\n (evt: KeyboardEvent) => void\n>();\n\nfunction createClickHandler(\n router: Router,\n value: LinkDirectiveValue,\n): (evt: MouseEvent) => void {\n return (evt: MouseEvent) => {\n if (!shouldNavigate(evt)) {\n return;\n }\n\n evt.preventDefault();\n router\n .navigate(value.name, value.params ?? {}, value.options ?? {})\n .catch(() => {});\n };\n}\n\nfunction createKeydownHandler(\n router: Router,\n value: LinkDirectiveValue,\n element: HTMLElement,\n): (evt: KeyboardEvent) => void {\n return (evt: KeyboardEvent) => {\n if (evt.key === \"Enter\" && !(element instanceof HTMLButtonElement)) {\n router\n .navigate(value.name, value.params ?? {}, value.options ?? {})\n .catch(() => {});\n }\n };\n}\n\nfunction attachHandlers(\n element: HTMLElement,\n router: Router,\n value: LinkDirectiveValue,\n): void {\n const handleClick = createClickHandler(router, value);\n const handleKeyDown = createKeydownHandler(router, value, element);\n\n element.addEventListener(\"click\", handleClick);\n element.addEventListener(\"keydown\", handleKeyDown);\n\n clickHandlers.set(element, handleClick);\n keydownHandlers.set(element, handleKeyDown);\n}\n\nfunction detachHandlers(element: HTMLElement): void {\n const clickHandler = clickHandlers.get(element);\n const keydownHandler = keydownHandlers.get(element);\n\n if (clickHandler) {\n element.removeEventListener(\"click\", clickHandler);\n }\n if (keydownHandler) {\n element.removeEventListener(\"keydown\", keydownHandler);\n }\n\n clickHandlers.delete(element);\n keydownHandlers.delete(element);\n}\n\nexport const vLink: Directive<HTMLElement, LinkDirectiveValue> = {\n mounted(element, binding) {\n const router = getDirectiveRouter();\n\n applyLinkA11y(element);\n\n element.style.cursor = \"pointer\";\n\n attachHandlers(element, router, binding.value);\n },\n\n updated(element, binding) {\n const router = getDirectiveRouter();\n\n detachHandlers(element);\n attachHandlers(element, router, binding.value);\n },\n\n beforeUnmount(element) {\n detachHandlers(element);\n },\n};\n","import { inject } from \"vue\";\n\nimport { NavigatorKey } from \"../context\";\n\nimport type { Navigator } from \"@real-router/core\";\n\nexport const useNavigator = (): Navigator => {\n const navigator = inject(NavigatorKey);\n\n if (!navigator) {\n throw new Error(\"useNavigator must be used within a RouterProvider\");\n }\n\n return navigator;\n};\n","import { getPluginApi } from \"@real-router/core/api\";\nimport { getRouteUtils } from \"@real-router/route-utils\";\n\nimport { useRouter } from \"./useRouter\";\n\nimport type { RouteUtils } from \"@real-router/route-utils\";\n\nexport const useRouteUtils = (): RouteUtils => {\n const router = useRouter();\n\n return getRouteUtils(getPluginApi(router).getTree());\n};\n","import { inject } from \"vue\";\n\nimport { RouteKey } from \"../context\";\n\nimport type { RouteContext } from \"../types\";\n\nexport const useRoute = (): RouteContext => {\n const routeContext = inject(RouteKey);\n\n if (!routeContext) {\n throw new Error(\"useRoute must be used within a RouterProvider\");\n }\n\n return routeContext;\n};\n","import { createTransitionSource } from \"@real-router/sources\";\n\nimport { useRefFromSource } from \"../useRefFromSource\";\nimport { useRouter } from \"./useRouter\";\n\nimport type { RouterTransitionSnapshot } from \"@real-router/sources\";\nimport type { ShallowRef } from \"vue\";\n\nexport function useRouterTransition(): ShallowRef<RouterTransitionSnapshot> {\n const router = useRouter();\n\n const source = createTransitionSource(router);\n\n return useRefFromSource(source);\n}\n","import { getNavigator } from \"@real-router/core\";\nimport { createRouteSource } from \"@real-router/sources\";\nimport { shallowRef } from \"vue\";\n\nimport { NavigatorKey, RouteKey, RouterKey } from \"./context\";\nimport { setDirectiveRouter } from \"./directives/vLink\";\n\nimport type { Router } from \"@real-router/core\";\nimport type { Plugin } from \"vue\";\n\nexport function createRouterPlugin(router: Router): Plugin<[]> {\n return {\n install(app): void {\n const navigator = getNavigator(router);\n\n setDirectiveRouter(router);\n\n const source = createRouteSource(router);\n const initialSnapshot = source.getSnapshot();\n\n const route = shallowRef(initialSnapshot.route);\n const previousRoute = shallowRef(initialSnapshot.previousRoute);\n\n source.subscribe(() => {\n const snapshot = source.getSnapshot();\n\n route.value = snapshot.route;\n previousRoute.value = snapshot.previousRoute;\n });\n\n app.provide(RouterKey, router);\n app.provide(NavigatorKey, navigator);\n app.provide(RouteKey, { navigator, route, previousRoute });\n },\n };\n}\n","import { getNavigator } from \"@real-router/core\";\nimport { createRouteSource } from \"@real-router/sources\";\nimport { createRouteAnnouncer } from \"dom-utils\";\nimport {\n defineComponent,\n onMounted,\n onUnmounted,\n provide,\n shallowRef,\n onScopeDispose,\n} from \"vue\";\n\nimport { NavigatorKey, RouteKey, RouterKey } from \"./context\";\nimport { setDirectiveRouter } from \"./directives/vLink\";\n\nimport type { Router } from \"@real-router/core\";\nimport type { PropType } from \"vue\";\n\nexport const RouterProvider = defineComponent({\n name: \"RouterProvider\",\n props: {\n router: {\n type: Object as PropType<Router>,\n required: true,\n },\n announceNavigation: {\n type: Boolean,\n default: false,\n },\n },\n setup(props, { slots }) {\n onMounted(() => {\n if (!props.announceNavigation) {\n return;\n }\n\n const announcer = createRouteAnnouncer(props.router);\n\n onUnmounted(() => {\n announcer.destroy();\n });\n });\n\n const navigator = getNavigator(props.router);\n\n setDirectiveRouter(props.router);\n\n const source = createRouteSource(props.router);\n const initialSnapshot = source.getSnapshot();\n\n const route = shallowRef(initialSnapshot.route);\n const previousRoute = shallowRef(initialSnapshot.previousRoute);\n\n const unsub = source.subscribe(() => {\n const snapshot = source.getSnapshot();\n\n route.value = snapshot.route;\n previousRoute.value = snapshot.previousRoute;\n });\n\n onScopeDispose(unsub);\n\n provide(RouterKey, props.router);\n provide(NavigatorKey, navigator);\n provide(RouteKey, { navigator, route, previousRoute });\n\n return () => slots.default?.();\n },\n});\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.mjs","names":[],"sources":["../../src/components/RouteView/components.ts","../../src/components/RouteView/helpers.ts","../../src/useRefFromSource.ts","../../src/context.ts","../../src/composables/useRouter.ts","../../src/composables/useRouteNode.ts","../../src/components/RouteView/RouteView.ts","../../src/composables/useIsActiveRoute.ts","../../src/constants.ts","../../../../shared/dom-utils/route-announcer.ts","../../../../shared/dom-utils/link-utils.ts","../../src/components/Link.ts","../../src/composables/useRouterError.ts","../../src/components/RouterErrorBoundary.ts","../../src/directives/vLink.ts","../../src/composables/useNavigator.ts","../../src/composables/useRouteUtils.ts","../../src/composables/useRoute.ts","../../src/composables/useRouterTransition.ts","../../src/createRouterPlugin.ts","../../src/RouterProvider.ts"],"sourcesContent":["import { defineComponent } from \"vue\";\n\nimport type { PropType, VNode } from \"vue\";\n\nfunction renderNull() {\n return null;\n}\n\nexport const Match = defineComponent({\n name: \"RouteView.Match\",\n props: {\n segment: {\n type: String as PropType<string>,\n required: true,\n },\n exact: {\n type: Boolean,\n default: false,\n },\n fallback: {\n type: [Object, Function] as PropType<VNode | (() => VNode)>,\n default: undefined,\n },\n keepAlive: {\n type: Boolean,\n default: false,\n },\n },\n render: renderNull,\n});\n\nexport const NotFound = defineComponent({\n name: \"RouteView.NotFound\",\n render: renderNull,\n});\n","import { UNKNOWN_ROUTE } from \"@real-router/core\";\nimport { startsWithSegment } from \"@real-router/route-utils\";\nimport { Fragment, isVNode } from \"vue\";\n\nimport { Match, NotFound } from \"./components\";\n\nimport type { VNode } from \"vue\";\n\ntype FallbackType = VNode | (() => VNode) | undefined;\n\nfunction isSegmentMatch(\n routeName: string,\n fullSegmentName: string,\n exact: boolean,\n): boolean {\n if (exact) {\n return routeName === fullSegmentName;\n }\n\n return startsWithSegment(routeName, fullSegmentName);\n}\n\nfunction normalizeChildren(children: unknown): VNode[] {\n if (Array.isArray(children)) {\n const result: VNode[] = [];\n\n for (const child of children) {\n if (Array.isArray(child)) {\n result.push(...normalizeChildren(child));\n } else if (isVNode(child)) {\n result.push(child);\n }\n }\n\n return result;\n }\n\n if (isVNode(children)) {\n return [children];\n }\n\n return [];\n}\n\nexport function collectElements(children: unknown, result: VNode[]): void {\n const vnodes = normalizeChildren(children);\n\n for (const child of vnodes) {\n if (child.type === Match || child.type === NotFound) {\n result.push(child);\n } else if (child.type === Fragment) {\n collectElements(child.children, result);\n }\n }\n}\n\nexport function buildRenderList(\n elements: VNode[],\n routeName: string,\n nodeName: string,\n): {\n rendered: VNode[];\n activeMatchFound: boolean;\n fallback?: FallbackType;\n} {\n let notFoundChildren: unknown = null;\n let activeMatchFound = false;\n let fallback: FallbackType = undefined;\n const rendered: VNode[] = [];\n\n for (const child of elements) {\n if (child.type === NotFound) {\n notFoundChildren = child.children;\n continue;\n }\n\n const props = child.props as {\n segment: string;\n exact?: boolean;\n fallback?: FallbackType;\n } | null;\n const segment = props?.segment ?? \"\";\n const exact = props?.exact ?? false;\n const fullSegmentName = nodeName ? `${nodeName}.${segment}` : segment;\n const isActive =\n !activeMatchFound && isSegmentMatch(routeName, fullSegmentName, exact);\n\n if (isActive) {\n activeMatchFound = true;\n fallback = props?.fallback;\n rendered.push(child);\n }\n }\n\n if (\n !activeMatchFound &&\n routeName === UNKNOWN_ROUTE &&\n notFoundChildren !== null\n ) {\n const nfElements = elements.filter((element) => element.type === NotFound);\n /* v8 ignore next 3 */\n const lastNf = nfElements.at(-1);\n\n if (lastNf) {\n rendered.push(lastNf);\n }\n }\n\n return { rendered, activeMatchFound, fallback };\n}\n","import { shallowRef, onScopeDispose } from \"vue\";\n\nimport type { RouterSource } from \"@real-router/sources\";\nimport type { ShallowRef } from \"vue\";\n\nexport function useRefFromSource<T>(source: RouterSource<T>): ShallowRef<T> {\n const ref = shallowRef(source.getSnapshot());\n\n const unsub = source.subscribe(() => {\n ref.value = source.getSnapshot();\n });\n\n onScopeDispose(unsub);\n\n return ref;\n}\n","import type { RouteContext as RouteContextType } from \"./types\";\nimport type { Router, Navigator } from \"@real-router/core\";\nimport type { InjectionKey } from \"vue\";\n\nexport const RouterKey: InjectionKey<Router> = Symbol(\"RouterKey\");\n\nexport const NavigatorKey: InjectionKey<Navigator> = Symbol(\"NavigatorKey\");\n\nexport const RouteKey: InjectionKey<RouteContextType> = Symbol(\"RouteKey\");\n","import { inject } from \"vue\";\n\nimport { RouterKey } from \"../context\";\n\nimport type { Router } from \"@real-router/core\";\n\nexport const useRouter = (): Router => {\n const router = inject(RouterKey);\n\n if (!router) {\n throw new Error(\"useRouter must be used within a RouterProvider\");\n }\n\n return router;\n};\n","import { getNavigator } from \"@real-router/core\";\nimport { createRouteNodeSource } from \"@real-router/sources\";\nimport { shallowRef, watch } from \"vue\";\n\nimport { useRefFromSource } from \"../useRefFromSource\";\nimport { useRouter } from \"./useRouter\";\n\nimport type { RouteContext } from \"../types\";\nimport type { State } from \"@real-router/core\";\n\nexport function useRouteNode(nodeName: string): RouteContext {\n const router = useRouter();\n\n const source = createRouteNodeSource(router, nodeName);\n const snapshot = useRefFromSource(source);\n\n const navigator = getNavigator(router);\n\n const route = shallowRef<State | undefined>(snapshot.value.route);\n const previousRoute = shallowRef<State | undefined>(\n snapshot.value.previousRoute,\n );\n\n watch(\n snapshot,\n (newSnapshot) => {\n route.value = newSnapshot.route;\n previousRoute.value = newSnapshot.previousRoute;\n },\n { flush: \"sync\" },\n );\n\n return {\n navigator,\n route,\n previousRoute,\n };\n}\n","import {\n Fragment,\n defineComponent,\n h,\n KeepAlive,\n markRaw,\n Suspense,\n} from \"vue\";\n\nimport { Match, NotFound } from \"./components\";\nimport { buildRenderList, collectElements } from \"./helpers\";\nimport { useRouteNode } from \"../../composables/useRouteNode\";\n\nimport type { Component, VNode } from \"vue\";\n\ntype SlotChildren = Record<string, (() => VNode[]) | undefined> | null;\n\nfunction getSlotContent(vnode: VNode): VNode[] | null {\n const slots = vnode.children as SlotChildren;\n\n return slots?.default?.() ?? null;\n}\n\nfunction getOrCreateWrapper(\n cache: Map<string, Component>,\n segment: string,\n): Component {\n const existing = cache.get(segment);\n\n if (existing) {\n return existing;\n }\n\n const wrapper = markRaw(\n defineComponent({\n name: `KeepAlive-${segment}`,\n setup(_wrapperProps, wrapperCtx) {\n return () => wrapperCtx.slots.default?.();\n },\n }),\n );\n\n cache.set(segment, wrapper);\n\n return wrapper;\n}\n\nfunction wrapWithSuspense(content: VNode, fallback: unknown): VNode {\n if (fallback === undefined) {\n return content;\n }\n\n const fallbackContent =\n typeof fallback === \"function\" ? (fallback as () => VNode)() : fallback;\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-assignment\n const suspenseComponent = Suspense as any;\n\n return h(\n suspenseComponent,\n {},\n {\n default: () => content,\n fallback: () => fallbackContent,\n },\n );\n}\n\nconst emptyKeepAlivePlaceholder = markRaw(\n defineComponent({\n name: \"KeepAlive-placeholder\",\n render() {\n return null;\n },\n }),\n);\n\nfunction renderWithRootKA(\n activeChild: VNode,\n wrapperCache: Map<string, Component>,\n fallback: unknown,\n): VNode {\n const activeProps = activeChild.props as { segment?: string } | null;\n const segment = activeProps?.segment ?? \"__not-found__\";\n const WrapperComponent = getOrCreateWrapper(wrapperCache, segment);\n const slotContent = getSlotContent(activeChild) ?? [];\n const keepAliveContent = h(KeepAlive, null, {\n default: () =>\n h(WrapperComponent, { key: segment }, { default: () => slotContent }),\n });\n\n return wrapWithSuspense(keepAliveContent, fallback);\n}\n\nfunction renderWithPerMatchKA(\n activeChild: VNode,\n wrapperCache: Map<string, Component>,\n fallback: unknown,\n): VNode | null {\n const matchProps = activeChild.props as {\n segment?: string;\n keepAlive?: boolean;\n } | null;\n\n if (matchProps?.keepAlive === true && activeChild.type === Match) {\n /* v8 ignore start */\n const segment = matchProps.segment ?? \"__not-found__\";\n /* v8 ignore stop */\n const WrapperComponent = getOrCreateWrapper(wrapperCache, segment);\n const slotContent = getSlotContent(activeChild) ?? [];\n\n return h(Fragment, [\n h(KeepAlive, null, {\n default: () =>\n h(WrapperComponent, { key: segment }, { default: () => slotContent }),\n }),\n ]);\n }\n\n const content = getSlotContent(activeChild);\n\n /* v8 ignore start */\n if (!content) {\n return null;\n }\n /* v8 ignore stop */\n\n return h(Fragment, [\n h(KeepAlive, null, { default: () => h(emptyKeepAlivePlaceholder) }),\n wrapWithSuspense(h(Fragment, content), fallback),\n ]);\n}\n\nconst RouteViewComponent = defineComponent({\n name: \"RouteView\",\n props: {\n nodeName: {\n type: String,\n required: true,\n },\n keepAlive: {\n type: Boolean,\n default: false,\n },\n },\n setup(props, { slots }) {\n const routeContext = useRouteNode(props.nodeName);\n const wrapperCache = new Map<string, Component>();\n\n return (): VNode | null => {\n const route = routeContext.route.value;\n\n if (!route) {\n return null;\n }\n\n const elements: VNode[] = [];\n\n collectElements(slots.default?.(), elements);\n\n const { rendered, fallback } = buildRenderList(\n elements,\n route.name,\n props.nodeName,\n );\n\n if (rendered.length === 0) {\n return null;\n }\n\n const activeChild = rendered[0];\n\n if (props.keepAlive) {\n return renderWithRootKA(activeChild, wrapperCache, fallback);\n }\n\n /* v8 ignore start */\n if (activeChild.type !== Match && activeChild.type !== NotFound) {\n return null;\n }\n /* v8 ignore stop */\n\n const hasPerMatchKA = elements.some(\n (element) =>\n element.type === Match &&\n (element.props as { keepAlive?: boolean } | null)?.keepAlive === true,\n );\n\n if (hasPerMatchKA) {\n return renderWithPerMatchKA(activeChild, wrapperCache, fallback);\n }\n\n const content = getSlotContent(activeChild);\n\n if (!content) {\n return null;\n }\n\n return wrapWithSuspense(h(Fragment, content), fallback);\n };\n },\n});\n\nexport const RouteView = Object.assign(RouteViewComponent, { Match, NotFound });\n\nexport type {\n RouteViewProps,\n MatchProps as RouteViewMatchProps,\n NotFoundProps as RouteViewNotFoundProps,\n} from \"./types\";\n","import { createActiveRouteSource } from \"@real-router/sources\";\n\nimport { useRefFromSource } from \"../useRefFromSource\";\nimport { useRouter } from \"./useRouter\";\n\nimport type { Params } from \"@real-router/core\";\nimport type { ShallowRef } from \"vue\";\n\nexport function useIsActiveRoute(\n routeName: string,\n params?: Params,\n strict = false,\n ignoreQueryParams = true,\n): ShallowRef<boolean> {\n const router = useRouter();\n\n const source = createActiveRouteSource(router, routeName, params, {\n strict,\n ignoreQueryParams,\n });\n\n return useRefFromSource(source);\n}\n","/**\n * Stable empty object for default params\n */\nexport const EMPTY_PARAMS = Object.freeze({});\n\n/**\n * Stable empty options object\n */\nexport const EMPTY_OPTIONS = Object.freeze({});\n","import type { Router, State } from \"@real-router/core\";\n\nconst CLEAR_DELAY = 7000;\nconst SAFARI_READY_DELAY = 100;\nconst ANNOUNCER_ATTR = \"data-real-router-announcer\";\nconst INTERNAL_ROUTE_PREFIX = \"@@\";\nconst VISUALLY_HIDDEN =\n \"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\";\n\nexport interface RouteAnnouncerOptions {\n prefix?: string;\n getAnnouncementText?: (route: State) => string;\n}\n\nexport function createRouteAnnouncer(\n router: Router,\n options?: RouteAnnouncerOptions,\n): { destroy: () => void } {\n const prefix = options?.prefix ?? \"Navigated to \";\n const getCustomText = options?.getAnnouncementText;\n\n let isInitialNavigation = true;\n let isReady = false;\n let isDestroyed = false;\n let lastAnnouncedText = \"\";\n let clearTimeoutId: ReturnType<typeof setTimeout> | undefined;\n\n const announcer = getOrCreateAnnouncer();\n\n const safariTimeoutId = setTimeout(() => {\n isReady = true;\n }, SAFARI_READY_DELAY);\n\n const unsubscribe = router.subscribe(({ route }) => {\n if (isInitialNavigation) {\n isInitialNavigation = false;\n\n return;\n }\n\n requestAnimationFrame(() => {\n requestAnimationFrame(() => {\n if (isDestroyed) {\n return;\n }\n\n const text = resolveText(route, prefix, getCustomText);\n\n if (text && text !== lastAnnouncedText && isReady) {\n lastAnnouncedText = text;\n clearTimeout(clearTimeoutId);\n announcer.textContent = text;\n clearTimeoutId = setTimeout(() => {\n announcer.textContent = \"\";\n lastAnnouncedText = \"\";\n }, CLEAR_DELAY);\n\n manageFocus();\n }\n });\n });\n });\n\n return {\n destroy() {\n isDestroyed = true;\n unsubscribe();\n clearTimeout(clearTimeoutId);\n clearTimeout(safariTimeoutId);\n removeAnnouncer();\n },\n };\n}\n\nfunction getOrCreateAnnouncer(): HTMLElement {\n const existing = document.querySelector<HTMLElement>(`[${ANNOUNCER_ATTR}]`);\n\n if (existing) {\n return existing;\n }\n\n const element = document.createElement(\"div\");\n\n element.setAttribute(\"style\", VISUALLY_HIDDEN);\n element.setAttribute(\"aria-live\", \"assertive\");\n element.setAttribute(\"aria-atomic\", \"true\");\n element.setAttribute(ANNOUNCER_ATTR, \"\");\n\n document.body.prepend(element);\n\n return element;\n}\n\nfunction removeAnnouncer(): void {\n document.querySelector(`[${ANNOUNCER_ATTR}]`)?.remove();\n}\n\nfunction resolveText(\n route: State,\n prefix: string,\n getCustomText?: (route: State) => string,\n): string {\n if (getCustomText) {\n return getCustomText(route);\n }\n\n const h1 = document.querySelector<HTMLElement>(\"h1\");\n const h1Text = h1?.textContent.trim() ?? \"\";\n const routeName = route.name.startsWith(INTERNAL_ROUTE_PREFIX)\n ? \"\"\n : route.name;\n const rawText =\n h1Text || document.title || routeName || globalThis.location.pathname;\n\n return `${prefix}${rawText}`;\n}\n\nfunction manageFocus(): void {\n const h1 = document.querySelector<HTMLElement>(\"h1\");\n\n if (!h1) {\n return;\n }\n\n if (!h1.hasAttribute(\"tabindex\")) {\n h1.setAttribute(\"tabindex\", \"-1\");\n }\n\n h1.focus({ preventScroll: true });\n}\n","import type { Router, Params } from \"@real-router/core\";\n\nexport function shouldNavigate(evt: MouseEvent): boolean {\n return (\n evt.button === 0 &&\n !evt.metaKey &&\n !evt.altKey &&\n !evt.ctrlKey &&\n !evt.shiftKey\n );\n}\n\ntype BuildUrlFn = (name: string, params: Params) => string;\n\nexport function buildHref(\n router: Router,\n routeName: string,\n routeParams: Params,\n): string | undefined {\n try {\n const buildUrl = router.buildUrl as BuildUrlFn | undefined;\n\n if (buildUrl) {\n return buildUrl(routeName, routeParams);\n }\n\n return router.buildPath(routeName, routeParams);\n } catch {\n console.error(\n `[real-router] Route \"${routeName}\" is not defined. The element will render without an href attribute.`,\n );\n\n return undefined;\n }\n}\n\nexport function buildActiveClassName(\n isActive: boolean,\n activeClassName: string | undefined,\n baseClassName: string | undefined,\n): string | undefined {\n if (isActive && activeClassName) {\n return baseClassName\n ? `${baseClassName} ${activeClassName}`.trim()\n : activeClassName;\n }\n\n return baseClassName ?? undefined;\n}\n\nexport function applyLinkA11y(element: HTMLElement): void {\n if (\n element instanceof HTMLAnchorElement ||\n element instanceof HTMLButtonElement\n ) {\n return;\n }\n if (!element.getAttribute(\"role\")) {\n element.setAttribute(\"role\", \"link\");\n }\n if (!element.getAttribute(\"tabindex\")) {\n element.setAttribute(\"tabindex\", \"0\");\n }\n}\n","import { defineComponent, h, computed } from \"vue\";\n\nimport { useIsActiveRoute } from \"../composables/useIsActiveRoute\";\nimport { useRouter } from \"../composables/useRouter\";\nimport { EMPTY_PARAMS, EMPTY_OPTIONS } from \"../constants\";\nimport {\n shouldNavigate,\n buildHref,\n buildActiveClassName,\n} from \"../dom-utils/index.js\";\n\nimport type { Params, NavigationOptions } from \"@real-router/core\";\nimport type { PropType } from \"vue\";\n\nexport const Link = defineComponent({\n name: \"Link\",\n props: {\n routeName: {\n type: String,\n required: true,\n },\n routeParams: {\n type: Object as PropType<Params>,\n default: () => EMPTY_PARAMS,\n },\n routeOptions: {\n type: Object as PropType<NavigationOptions>,\n default: () => EMPTY_OPTIONS,\n },\n class: {\n type: String,\n default: undefined,\n },\n activeClassName: {\n type: String,\n default: \"active\",\n },\n activeStrict: {\n type: Boolean,\n default: false,\n },\n ignoreQueryParams: {\n type: Boolean,\n default: true,\n },\n target: {\n type: String,\n default: undefined,\n },\n },\n setup(props, { slots, attrs }) {\n const router = useRouter();\n\n const isActive = useIsActiveRoute(\n props.routeName,\n props.routeParams,\n props.activeStrict,\n props.ignoreQueryParams,\n );\n\n const href = computed(() =>\n buildHref(router, props.routeName, props.routeParams),\n );\n\n const finalClassName = computed(() =>\n buildActiveClassName(isActive.value, props.activeClassName, props.class),\n );\n\n const handleClick = (evt: MouseEvent) => {\n if (attrs.onClick && typeof attrs.onClick === \"function\") {\n (attrs.onClick as (evt: MouseEvent) => void)(evt);\n\n if (evt.defaultPrevented) {\n return;\n }\n }\n\n if (!shouldNavigate(evt) || props.target === \"_blank\") {\n return;\n }\n\n evt.preventDefault();\n router\n .navigate(props.routeName, props.routeParams, props.routeOptions)\n .catch(() => {});\n };\n\n return () =>\n h(\n \"a\",\n {\n ...attrs,\n href: href.value,\n class: finalClassName.value,\n target: props.target,\n onClick: handleClick,\n },\n slots.default?.(),\n );\n },\n});\n","import { createErrorSource } from \"@real-router/sources\";\n\nimport { useRefFromSource } from \"../useRefFromSource\";\nimport { useRouter } from \"./useRouter\";\n\nimport type { Router } from \"@real-router/core\";\nimport type { RouterErrorSnapshot, RouterSource } from \"@real-router/sources\";\nimport type { ShallowRef } from \"vue\";\n\nconst cache = new WeakMap<Router, RouterSource<RouterErrorSnapshot>>();\n\nexport function useRouterError(): ShallowRef<RouterErrorSnapshot> {\n const router = useRouter();\n\n let source = cache.get(router);\n\n if (!source) {\n source = createErrorSource(router);\n cache.set(router, source);\n }\n\n return useRefFromSource(source);\n}\n","import { defineComponent, h, ref, watch, computed, Fragment } from \"vue\";\n\nimport { useRouterError } from \"../composables/useRouterError\";\n\nimport type { RouterError, State } from \"@real-router/core\";\nimport type { VNode, PropType } from \"vue\";\n\nexport const RouterErrorBoundary = defineComponent({\n name: \"RouterErrorBoundary\",\n props: {\n fallback: {\n type: Function as PropType<\n (error: RouterError, resetError: () => void) => VNode\n >,\n required: true,\n },\n onError: {\n type: Function as PropType<\n (\n error: RouterError,\n toRoute: State | null,\n fromRoute: State | null,\n ) => void\n >,\n default: undefined,\n },\n },\n setup(props, { slots }) {\n const snapshot = useRouterError();\n const dismissedVersion = ref(-1);\n\n watch(\n () => snapshot.value.version,\n () => {\n if (snapshot.value.error) {\n props.onError?.(\n snapshot.value.error,\n snapshot.value.toRoute,\n snapshot.value.fromRoute,\n );\n }\n },\n { immediate: true },\n );\n\n const visibleError = computed(() =>\n snapshot.value.version > dismissedVersion.value\n ? snapshot.value.error\n : null,\n );\n\n const resetError = () => {\n dismissedVersion.value = snapshot.value.version;\n };\n\n return () => {\n const children = slots.default?.() ?? [];\n const errorVNode = visibleError.value\n ? props.fallback(visibleError.value, resetError)\n : null;\n\n return h(Fragment, null, [...children, errorVNode]);\n };\n },\n});\n\nexport type RouterErrorBoundaryProps = InstanceType<\n typeof RouterErrorBoundary\n>[\"$props\"];\n","import { shouldNavigate, applyLinkA11y } from \"../dom-utils/index.js\";\n\nimport type { Router, NavigationOptions, Params } from \"@real-router/core\";\nimport type { Directive } from \"vue\";\n\nexport interface LinkDirectiveValue {\n name: string;\n params?: Params;\n options?: NavigationOptions;\n}\n\nlet _router: Router | null = null;\n\nexport function setDirectiveRouter(router: Router): void {\n _router = router;\n}\n\nexport function getDirectiveRouter(): Router {\n if (!_router) {\n /* v8 ignore next 3 -- @preserve Defensive: router always initialized by RouterProvider */\n throw new Error(\n \"v-link directive requires a RouterProvider ancestor. Make sure RouterProvider is mounted.\",\n );\n }\n\n return _router;\n}\n\nconst clickHandlers = new WeakMap<HTMLElement, (evt: MouseEvent) => void>();\nconst keydownHandlers = new WeakMap<\n HTMLElement,\n (evt: KeyboardEvent) => void\n>();\n\nfunction createClickHandler(\n router: Router,\n value: LinkDirectiveValue,\n): (evt: MouseEvent) => void {\n return (evt: MouseEvent) => {\n if (!shouldNavigate(evt)) {\n return;\n }\n\n evt.preventDefault();\n router\n .navigate(value.name, value.params ?? {}, value.options ?? {})\n .catch(() => {});\n };\n}\n\nfunction createKeydownHandler(\n router: Router,\n value: LinkDirectiveValue,\n element: HTMLElement,\n): (evt: KeyboardEvent) => void {\n return (evt: KeyboardEvent) => {\n if (evt.key === \"Enter\" && !(element instanceof HTMLButtonElement)) {\n router\n .navigate(value.name, value.params ?? {}, value.options ?? {})\n .catch(() => {});\n }\n };\n}\n\nfunction attachHandlers(\n element: HTMLElement,\n router: Router,\n value: LinkDirectiveValue,\n): void {\n const handleClick = createClickHandler(router, value);\n const handleKeyDown = createKeydownHandler(router, value, element);\n\n element.addEventListener(\"click\", handleClick);\n element.addEventListener(\"keydown\", handleKeyDown);\n\n clickHandlers.set(element, handleClick);\n keydownHandlers.set(element, handleKeyDown);\n}\n\nfunction detachHandlers(element: HTMLElement): void {\n const clickHandler = clickHandlers.get(element);\n const keydownHandler = keydownHandlers.get(element);\n\n if (clickHandler) {\n element.removeEventListener(\"click\", clickHandler);\n }\n if (keydownHandler) {\n element.removeEventListener(\"keydown\", keydownHandler);\n }\n\n clickHandlers.delete(element);\n keydownHandlers.delete(element);\n}\n\nexport const vLink: Directive<HTMLElement, LinkDirectiveValue> = {\n mounted(element, binding) {\n const router = getDirectiveRouter();\n\n applyLinkA11y(element);\n\n element.style.cursor = \"pointer\";\n\n attachHandlers(element, router, binding.value);\n },\n\n updated(element, binding) {\n const router = getDirectiveRouter();\n\n detachHandlers(element);\n attachHandlers(element, router, binding.value);\n },\n\n beforeUnmount(element) {\n detachHandlers(element);\n },\n};\n","import { inject } from \"vue\";\n\nimport { NavigatorKey } from \"../context\";\n\nimport type { Navigator } from \"@real-router/core\";\n\nexport const useNavigator = (): Navigator => {\n const navigator = inject(NavigatorKey);\n\n if (!navigator) {\n throw new Error(\"useNavigator must be used within a RouterProvider\");\n }\n\n return navigator;\n};\n","import { getPluginApi } from \"@real-router/core/api\";\nimport { getRouteUtils } from \"@real-router/route-utils\";\n\nimport { useRouter } from \"./useRouter\";\n\nimport type { RouteUtils } from \"@real-router/route-utils\";\n\nexport const useRouteUtils = (): RouteUtils => {\n const router = useRouter();\n\n return getRouteUtils(getPluginApi(router).getTree());\n};\n","import { inject } from \"vue\";\n\nimport { RouteKey } from \"../context\";\n\nimport type { RouteContext } from \"../types\";\n\nexport const useRoute = (): RouteContext => {\n const routeContext = inject(RouteKey);\n\n if (!routeContext) {\n throw new Error(\"useRoute must be used within a RouterProvider\");\n }\n\n return routeContext;\n};\n","import { createTransitionSource } from \"@real-router/sources\";\n\nimport { useRefFromSource } from \"../useRefFromSource\";\nimport { useRouter } from \"./useRouter\";\n\nimport type { RouterTransitionSnapshot } from \"@real-router/sources\";\nimport type { ShallowRef } from \"vue\";\n\nexport function useRouterTransition(): ShallowRef<RouterTransitionSnapshot> {\n const router = useRouter();\n\n const source = createTransitionSource(router);\n\n return useRefFromSource(source);\n}\n","import { getNavigator } from \"@real-router/core\";\nimport { createRouteSource } from \"@real-router/sources\";\nimport { shallowRef } from \"vue\";\n\nimport { NavigatorKey, RouteKey, RouterKey } from \"./context\";\nimport { setDirectiveRouter } from \"./directives/vLink\";\n\nimport type { Router } from \"@real-router/core\";\nimport type { Plugin } from \"vue\";\n\nexport function createRouterPlugin(router: Router): Plugin<[]> {\n return {\n install(app): void {\n const navigator = getNavigator(router);\n\n setDirectiveRouter(router);\n\n const source = createRouteSource(router);\n const initialSnapshot = source.getSnapshot();\n\n const route = shallowRef(initialSnapshot.route);\n const previousRoute = shallowRef(initialSnapshot.previousRoute);\n\n source.subscribe(() => {\n const snapshot = source.getSnapshot();\n\n route.value = snapshot.route;\n previousRoute.value = snapshot.previousRoute;\n });\n\n app.provide(RouterKey, router);\n app.provide(NavigatorKey, navigator);\n app.provide(RouteKey, { navigator, route, previousRoute });\n },\n };\n}\n","import { getNavigator } from \"@real-router/core\";\nimport { createRouteSource } from \"@real-router/sources\";\nimport {\n defineComponent,\n onMounted,\n onUnmounted,\n provide,\n shallowRef,\n onScopeDispose,\n} from \"vue\";\n\nimport { NavigatorKey, RouteKey, RouterKey } from \"./context\";\nimport { setDirectiveRouter } from \"./directives/vLink\";\nimport { createRouteAnnouncer } from \"./dom-utils/index.js\";\n\nimport type { Router } from \"@real-router/core\";\nimport type { PropType } from \"vue\";\n\nexport const RouterProvider = defineComponent({\n name: \"RouterProvider\",\n props: {\n router: {\n type: Object as PropType<Router>,\n required: true,\n },\n announceNavigation: {\n type: Boolean,\n default: false,\n },\n },\n setup(props, { slots }) {\n onMounted(() => {\n if (!props.announceNavigation) {\n return;\n }\n\n const announcer = createRouteAnnouncer(props.router);\n\n onUnmounted(() => {\n announcer.destroy();\n });\n });\n\n const navigator = getNavigator(props.router);\n\n setDirectiveRouter(props.router);\n\n const source = createRouteSource(props.router);\n const initialSnapshot = source.getSnapshot();\n\n const route = shallowRef(initialSnapshot.route);\n const previousRoute = shallowRef(initialSnapshot.previousRoute);\n\n const unsub = source.subscribe(() => {\n const snapshot = source.getSnapshot();\n\n route.value = snapshot.route;\n previousRoute.value = snapshot.previousRoute;\n });\n\n onScopeDispose(unsub);\n\n provide(RouterKey, props.router);\n provide(NavigatorKey, navigator);\n provide(RouteKey, { navigator, route, previousRoute });\n\n return () => slots.default?.();\n },\n});\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@real-router/vue",
3
- "version": "0.3.5",
3
+ "version": "0.3.6",
4
4
  "type": "commonjs",
5
5
  "description": "Vue 3 integration for Real-Router",
6
6
  "main": "./dist/cjs/index.js",
@@ -49,16 +49,15 @@
49
49
  "license": "MIT",
50
50
  "sideEffects": false,
51
51
  "dependencies": {
52
- "@real-router/route-utils": "^0.1.14",
53
52
  "@real-router/core": "^0.46.0",
53
+ "@real-router/route-utils": "^0.1.14",
54
54
  "@real-router/sources": "^0.4.4"
55
55
  },
56
56
  "devDependencies": {
57
57
  "@testing-library/jest-dom": "6.9.1",
58
58
  "@vue/test-utils": "2.4.6",
59
59
  "vue": "3.5.13",
60
- "@real-router/browser-plugin": "^0.11.7",
61
- "dom-utils": "^0.2.8"
60
+ "@real-router/browser-plugin": "^0.11.8"
62
61
  },
63
62
  "peerDependencies": {
64
63
  "vue": ">=3.3.0"
@@ -1,6 +1,5 @@
1
1
  import { getNavigator } from "@real-router/core";
2
2
  import { createRouteSource } from "@real-router/sources";
3
- import { createRouteAnnouncer } from "dom-utils";
4
3
  import {
5
4
  defineComponent,
6
5
  onMounted,
@@ -12,6 +11,7 @@ import {
12
11
 
13
12
  import { NavigatorKey, RouteKey, RouterKey } from "./context";
14
13
  import { setDirectiveRouter } from "./directives/vLink";
14
+ import { createRouteAnnouncer } from "./dom-utils/index.js";
15
15
 
16
16
  import type { Router } from "@real-router/core";
17
17
  import type { PropType } from "vue";
@@ -1,9 +1,13 @@
1
- import { shouldNavigate, buildHref, buildActiveClassName } from "dom-utils";
2
1
  import { defineComponent, h, computed } from "vue";
3
2
 
4
3
  import { useIsActiveRoute } from "../composables/useIsActiveRoute";
5
4
  import { useRouter } from "../composables/useRouter";
6
5
  import { EMPTY_PARAMS, EMPTY_OPTIONS } from "../constants";
6
+ import {
7
+ shouldNavigate,
8
+ buildHref,
9
+ buildActiveClassName,
10
+ } from "../dom-utils/index.js";
7
11
 
8
12
  import type { Params, NavigationOptions } from "@real-router/core";
9
13
  import type { PropType } from "vue";
@@ -1,4 +1,4 @@
1
- import { shouldNavigate, applyLinkA11y } from "dom-utils";
1
+ import { shouldNavigate, applyLinkA11y } from "../dom-utils/index.js";
2
2
 
3
3
  import type { Router, NavigationOptions, Params } from "@real-router/core";
4
4
  import type { Directive } from "vue";