@fluixi/core 1.0.0-alpha.74 → 1.0.0-alpha.76

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (44) hide show
  1. package/dist/cdn/core.global.js +1 -1
  2. package/dist/src/cdn/chunk-MYXLT5LG.mjs +1 -0
  3. package/dist/src/cdn/core.cjs +1 -1
  4. package/dist/src/cdn/core.mjs +1 -1
  5. package/dist/src/cdn/router-next-YWV2KJP4.mjs +1 -0
  6. package/dist/src/index.cjs +1 -1
  7. package/dist/src/index.mjs +1 -1
  8. package/dist/src/lib/client/index.cjs +1 -1
  9. package/dist/src/lib/client/index.mjs +1 -1
  10. package/dist/src/lib/client/router-next-2FH6DRYT.mjs +1 -0
  11. package/dist/src/lib/core.cjs +1 -1
  12. package/dist/src/lib/core.d.ts +2 -2
  13. package/dist/src/lib/core.d.ts.map +1 -1
  14. package/dist/src/lib/core.js +4 -2
  15. package/dist/src/lib/core.mjs +1 -1
  16. package/dist/src/lib/index.cjs +1 -1
  17. package/dist/src/lib/index.mjs +1 -1
  18. package/dist/src/lib/plugins/index.cjs +2 -2
  19. package/dist/src/lib/plugins/index.d.ts +2 -0
  20. package/dist/src/lib/plugins/index.d.ts.map +1 -1
  21. package/dist/src/lib/plugins/index.js +4 -0
  22. package/dist/src/lib/plugins/index.mjs +2 -2
  23. package/dist/src/lib/render/index.cjs +1 -1
  24. package/dist/src/lib/render/index.mjs +1 -1
  25. package/dist/src/lib/render/suspense.cjs +1 -1
  26. package/dist/src/lib/render/suspense.d.ts.map +1 -1
  27. package/dist/src/lib/render/suspense.js +32 -13
  28. package/dist/src/lib/render/suspense.mjs +1 -1
  29. package/dist/src/lib/render/versions.cjs +1 -1
  30. package/dist/src/lib/render/versions.mjs +1 -1
  31. package/dist/src/lib/router-next/index.cjs +1 -1
  32. package/dist/src/lib/router-next/index.d.ts +33 -0
  33. package/dist/src/lib/router-next/index.d.ts.map +1 -1
  34. package/dist/src/lib/router-next/index.js +64 -2
  35. package/dist/src/lib/router-next/index.mjs +1 -1
  36. package/dist/src/version.generated.cjs +1 -1
  37. package/dist/src/version.generated.d.ts +1 -1
  38. package/dist/src/version.generated.js +1 -1
  39. package/dist/src/version.generated.mjs +1 -1
  40. package/dist/tsconfig.lib.tsbuildinfo +1 -1
  41. package/package.json +11 -11
  42. package/dist/src/cdn/chunk-GHLSTCTM.mjs +0 -1
  43. package/dist/src/cdn/router-next-D6BFFTFL.mjs +0 -1
  44. package/dist/src/lib/client/router-next-CYGMKUQN.mjs +0 -1
@@ -1 +1 @@
1
- import{createRoot as Re}from"@fluixi/reactive/signal";import{registerCoreVersion as _}from"@fluixi/dom";var S="1.0.0-alpha.74";import{stampVersions as g,warnOnVersionSkew as k,versions as Ve}from"@fluixi/dom";_(S);import{isDOMNode as Ae,delegateEvents as V,insert as Me}from"@fluixi/dom";import{registerCreateComponent as U,asComponent as W}from"@fluixi/dom";import{untrack as T,onCleanup as d,getOwner as m,createEffect as p,createMemo as L,createSignal as q,isSignal as H,batch as B,runWithOwner as E,isOwnerDisposed as K}from"@fluixi/reactive/signal";var J={context:null,owner:null};function X(){return J}var b=typeof process<"u"&&!1,y=Symbol.for("fluixi-lifecycle");function O(){let e=m();if(!e)return null;if(!e[y]){let t={mounts:[],effects:[],scheduled:!1};e[y]=t}return e[y]}function P(e){if(e.scheduled)return;e.scheduled=!0;let t=m();queueMicrotask(()=>{if(K(t)){e.mounts=[],e.effects=[];return}E(t,()=>{for(let o of e.mounts)try{let n=o();typeof n=="function"&&d(n)}catch(n){console.error("Error in onMount callback:",n)}for(let o of e.effects){let n;p(()=>{n&&n(),n=o()}),d(()=>{n&&n()})}e.mounts=[],e.effects=[]})})}function R(e){U(A)}function A(e,t){return M(e,t)}function M(e,t){let o=typeof e=="function"?T(()=>e(t)):e;if(o!=null&&(typeof o=="function"||typeof o=="object")&&!H(o)){try{o.$name=e.name}catch{}return W(o)}return o}function Q(e,t=!0){let o=O();if(o){if(!t){o.scheduled||e();return}o.mounts.push(e),P(o)}else{if(!t){e();return}p(()=>{let n=T(e);typeof n=="function"&&d(n)})}}function Y(e){d(e)}function D(e){let t=O();if(t)t.effects.push(e),P(t);else{let o;p(()=>{o&&o(),o=e()}),d(()=>{o&&o()})}}function G(e){return L(e)}function Z(e){let t={current:e};return d(()=>{t.current=null}),t}function ee(e,t){let[o,n]=q(t);return[o,s=>{n(e(o(),s))}]}function ne(e,t,o,n){D(()=>{let i=e&&"current"in e?e.current:e;if(i)return i.addEventListener(t,o,n),()=>{i.removeEventListener(t,o,n)}})}function te(e){return e}function oe(){return b}function re(e){b&&e()}import{createSignal as h,createMemo as ie,createEffect as se,createRenderEffect as ae,isSignal as v,useContext as ce,createContext as fe,createSuspenseBoundary as ue,provideSuspense as j}from"@fluixi/reactive/signal";import{asSuspense as de,isComponent as pe,createComponent as F,runWithoutHydration as le}from"@fluixi/dom";function ye(e){return typeof window>"u"?!1:typeof Node=="function"&&e instanceof Node?!0:!!(e&&typeof e=="object"&&typeof e.nodeType=="number")}function me(e){return!e||typeof e!="object"?!1:!!(typeof e._$litType$<"u"||typeof e._$litDirective$<"u"||Array.isArray(e.strings)&&Array.isArray(e.values))}function $(e){return!!(e&&typeof e=="object"&&typeof e.then=="function"||e instanceof Promise)}function be(e){return!!(e&&typeof e=="object"&&"type"in e&&"props"in e)}var z=fe();function x(e){return F(ve,e)}function ve(e){let t=ue(),o=ce(z),n=o?o.register(t.inFallback):void 0;function i(f){return f==null||typeof f=="boolean"?null:typeof f=="function"&&pe(f)&&!v(f)?f():f}let s=le(()=>i(e.fallback??null)),r=j(t,()=>e.children);j(t,()=>{ae(()=>{let f=r;if(Array.isArray(f))for(let l of f)typeof l=="function"&&v(l)&&l();else typeof f=="function"&&v(f)&&f()})});let[a,c]=h(void 0),u=$(r);return u&&(t.increment(),r.then(f=>{c(()=>f),t.decrement()},()=>t.decrement())),ie(()=>(n?n.showFallback():t.inFallback())?s:u?a():r)}function he(e){return F(xe,e)}function xe(e){let{revealOrder:t="together",tail:o}=e,n=[];function i(){if(t==="together"){let r=n.every(a=>!a.inFallback());n.forEach(a=>{a.setShowContent(r),a.setShowFallback(!r)})}else{let r=t==="backwards"?[...n].reverse():n,a=!1;for(let c of r)a||c.inFallback()?(a=!0,c.setShowContent(!1),c.setShowFallback(o!=="hidden")):(c.setShowContent(!0),c.setShowFallback(!1))}}let s={register:r=>{let[a,c]=h(!0),[u,f]=h(!1);return n.push({inFallback:r,setShowContent:c,setShowFallback:f}),se(()=>{r(),i()}),{showContent:a,showFallback:u}}};return z.Provider({value:s,children:e.children})}de(x);Object.defineProperty(x,"__suspense",{value:!0,enumerable:!0});import{untrack as N,createMemo as we,createResource as Ce}from"@fluixi/reactive/signal";function w(e,t){let o,n,i;function s(){return n||(n=e().then(a=>o=a.default)),n}t?.preload&&s();let r=(a=>{if(o){let c=o;return N(()=>c(a))}if(!i){let[c]=Ce(()=>s(),{transport:!1});if(i=c,c.error)throw c.error}return we(()=>{let c=i();return c?N(()=>c(a)):void 0},void 0,{name:"lazy"})});return r.preload=()=>s().then(()=>{}),r.$lazy=!0,r.loader=e,r}import{createMemo as Se,createSignal as ge}from"@fluixi/reactive/signal";import{observeIntersection as ke}from"@fluixi/dom/utils";var I=typeof window>"u";function Te(e,t){let o=t.export??"default",n=w(()=>e().then(s=>{let r=s[o];if(typeof r!="function")throw new Error(`deferred(): module has no '${o}' export (got ${typeof r}).`);return{default:r}}),{fallback:t.fallback});function i(s){if(t.strategy.kind==="never")return I?n(s):null;if(I||t.strategy.kind==="eager")return n(s);let[r,a]=ge(!1),c=()=>{n.preload().then(()=>a(!0))},u=t.strategy.kind==="visible"?Le():void 0;return Ee(t.strategy,c,u),Se(()=>r()?n(s):u??t.fallback??null,void 0,{name:"deferred"})}return i.preload=n.preload,i}function Le(){let e=document.createElement("span");return e.setAttribute("data-fx-load","visible"),e.style.display="block",e}function Ee(e,t,o){let n=!1,i=()=>{n||(n=!0,t())};switch(e.kind){case"idle":{let s=globalThis.requestIdleCallback;s?s(i):setTimeout(i,1);return}case"visible":{if(!o||typeof IntersectionObserver>"u"){i();return}let s=ke(o,r=>{r&&(s(),i())},{rootMargin:e.rootMargin??"0px"});return}case"interaction":{let s=()=>{for(let r of e.events)document.removeEventListener(r,s,!0);i()};for(let r of e.events)document.addEventListener(r,s,{capture:!0,passive:!0});return}case"media":{if(typeof matchMedia>"u"){i();return}let s=matchMedia(e.query);if(s.matches){i();return}let r=a=>{a.matches&&(s.removeEventListener("change",r),i())};s.addEventListener("change",r);return}default:i()}}import{createResource as Oe}from"@fluixi/reactive/signal";function Pe(e){let t=()=>{let n=e.value;return typeof n=="function"?n():n},[o]=Oe(t);return()=>{if(o.loading)return e.fallback;let n=e.children;return typeof n=="function"?n(o()):n}}var C=typeof window>"u";function De(e,t,o={}){if(R("render"),V(["click","input","change","submit"]),C)throw new Error("render() is for client-side only. Use renderToString() on server.");if(!t)throw new Error("Container element is required");let n;return Re(i=>{n=i;let s=typeof e=="function"?e():e;t.textContent="",g(t),k(),Me(t,()=>s)}),()=>{n&&(n(),n=void 0)}}function je(e){return e&&typeof e=="object"&&(e._$litType$!==void 0||e._$litDirective$!==void 0)}function bn(e,t,o={}){let n=document.createElement("div");n.setAttribute("data-portal","true"),t.appendChild(n);let i=De(e,n,o);return()=>{i(),t.contains(n)&&t.removeChild(n)}}function vn(e){return!!(e==null||typeof e=="function"||Ae(e)||je(e)||Array.isArray(e)||typeof e=="string"||typeof e=="number"||typeof e=="boolean")}function hn(){C||V(["click","input","change","submit"])}function xn(){}export{M as $component,Pe as Await,b as DEV,x as Suspense,he as SuspenseList,B as batch,xn as cleanupDelegation,A as createComponent,p as createEffect,L as createMemo,Te as deferred,re as devOnly,m as getOwner,X as getSharedConfig,hn as initDelegation,oe as isDev,be as isJSXElement,me as isLitResult,ye as isNode,$ as isPromise,vn as isRenderable,w as lazy,d as onCleanup,Q as onMount,Y as onUnmount,bn as portal,De as render,E as runWithOwner,te as useCallback,D as useEffect,ne as useEventListener,G as useMemo,ee as useReducer,Z as useRef};
1
+ import{createRoot as De}from"@fluixi/reactive/signal";import{registerCoreVersion as W}from"@fluixi/dom";var S="1.0.0-alpha.76";import{stampVersions as g,warnOnVersionSkew as k,versions as We}from"@fluixi/dom";W(S);import{isDOMNode as Fe,delegateEvents as U,insert as je}from"@fluixi/dom";import{registerCreateComponent as q,asComponent as H}from"@fluixi/dom";import{untrack as T,onCleanup as u,getOwner as b,createEffect as l,createMemo as E,createSignal as B,isSignal as K,batch as X,runWithOwner as L,isOwnerDisposed as J}from"@fluixi/reactive/signal";var G={context:null,owner:null};function Q(){return G}var v=typeof process<"u"&&!1,m=Symbol.for("fluixi-lifecycle");function O(){let e=b();if(!e)return null;if(!e[m]){let t={mounts:[],effects:[],scheduled:!1};e[m]=t}return e[m]}function P(e){if(e.scheduled)return;e.scheduled=!0;let t=b();queueMicrotask(()=>{if(J(t)){e.mounts=[],e.effects=[];return}L(t,()=>{for(let o of e.mounts)try{let n=o();typeof n=="function"&&u(n)}catch(n){console.error("Error in onMount callback:",n)}for(let o of e.effects){let n;l(()=>{n&&n(),n=o()}),u(()=>{n&&n()})}e.mounts=[],e.effects=[]})})}function R(e){q(A)}function A(e,t){return M(e,t)}function M(e,t){let o=typeof e=="function"?T(()=>e(t)):e;if(o!=null&&(typeof o=="function"||typeof o=="object")&&!K(o)){try{o.$name=e.name}catch{}return H(o)}return o}function Y(e,t=!0){let o=O();if(o){if(!t){o.scheduled||e();return}o.mounts.push(e),P(o)}else{if(!t){e();return}l(()=>{let n=T(e);typeof n=="function"&&u(n)})}}function Z(e){u(e)}function D(e){let t=O();if(t)t.effects.push(e),P(t);else{let o;l(()=>{o&&o(),o=e()}),u(()=>{o&&o()})}}function ee(e){return E(e)}function ne(e){let t={current:e};return u(()=>{t.current=null}),t}function te(e,t){let[o,n]=B(t);return[o,s=>{n(e(o(),s))}]}function oe(e,t,o,n){D(()=>{let i=e&&"current"in e?e.current:e;if(i)return i.addEventListener(t,o,n),()=>{i.removeEventListener(t,o,n)}})}function re(e){return e}function ie(){return v}function se(e){v&&e()}import{createSignal as h,createMemo as ae,createEffect as ce,createRenderEffect as fe,isSignal as F,readChildren as ue,useContext as de,createContext as pe,createSuspenseBoundary as le,provideSuspense as j}from"@fluixi/reactive/signal";import{asSuspense as ye,isComponent as me,createComponent as $,runWithoutHydration as be}from"@fluixi/dom";function ve(e){return typeof window>"u"?!1:typeof Node=="function"&&e instanceof Node?!0:!!(e&&typeof e=="object"&&typeof e.nodeType=="number")}function he(e){return!e||typeof e!="object"?!1:!!(typeof e._$litType$<"u"||typeof e._$litDirective$<"u"||Array.isArray(e.strings)&&Array.isArray(e.values))}function z(e){return!!(e&&typeof e=="object"&&typeof e.then=="function"||e instanceof Promise)}function xe(e){return!!(e&&typeof e=="object"&&"type"in e&&"props"in e)}var N=pe();function x(e){return $(we,e)}function we(e){let t=le(),o=de(N),n=o?o.register(t.inFallback):void 0;function i(f){return f==null||typeof f=="boolean"?null:typeof f=="function"&&me(f)&&!F(f)?f():f}let s=be(()=>i(e.fallback??null)),r=j(t,()=>ue(()=>e.children)),a=(f,y)=>{if(!(y>8))if(Array.isArray(f))for(let V of f)a(V,y+1);else typeof f=="function"&&F(f)&&a(f(),y+1)};j(t,()=>{fe(()=>a(r,0))});let[c,d]=h(void 0),p=z(r);return p&&(t.increment(),r.then(f=>{d(()=>f),t.decrement()},()=>t.decrement())),ae(()=>{let f=n?n.showFallback():t.inFallback();return process.env.FX_DEBUG&&console.log("[s] output; showFallback:",f),f?s:p?c():r})}function Ce(e){return $(Se,e)}function Se(e){let{revealOrder:t="together",tail:o}=e,n=[];function i(){if(t==="together"){let r=n.every(a=>!a.inFallback());n.forEach(a=>{a.setShowContent(r),a.setShowFallback(!r)})}else{let r=t==="backwards"?[...n].reverse():n,a=!1;for(let c of r)a||c.inFallback()?(a=!0,c.setShowContent(!1),c.setShowFallback(o!=="hidden")):(c.setShowContent(!0),c.setShowFallback(!1))}}let s={register:r=>{let[a,c]=h(!0),[d,p]=h(!1);return n.push({inFallback:r,setShowContent:c,setShowFallback:p}),ce(()=>{r(),i()}),{showContent:a,showFallback:d}}};return N.Provider({value:s,children:e.children})}ye(x);Object.defineProperty(x,"__suspense",{value:!0,enumerable:!0});import{untrack as _,createMemo as ge,createResource as ke}from"@fluixi/reactive/signal";function w(e,t){let o,n,i;function s(){return n||(n=e().then(a=>o=a.default)),n}t?.preload&&s();let r=(a=>{if(o){let c=o;return _(()=>c(a))}if(!i){let[c]=ke(()=>s(),{transport:!1});if(i=c,c.error)throw c.error}return ge(()=>{let c=i();return c?_(()=>c(a)):void 0},void 0,{name:"lazy"})});return r.preload=()=>s().then(()=>{}),r.$lazy=!0,r.loader=e,r}import{createMemo as Te,createSignal as Ee}from"@fluixi/reactive/signal";import{observeIntersection as Le}from"@fluixi/dom/utils";var I=typeof window>"u";function Oe(e,t){let o=t.export??"default",n=w(()=>e().then(s=>{let r=s[o];if(typeof r!="function")throw new Error(`deferred(): module has no '${o}' export (got ${typeof r}).`);return{default:r}}),{fallback:t.fallback});function i(s){if(t.strategy.kind==="never")return I?n(s):null;if(I||t.strategy.kind==="eager")return n(s);let[r,a]=Ee(!1),c=()=>{n.preload().then(()=>a(!0))},d=t.strategy.kind==="visible"?Pe():void 0;return Re(t.strategy,c,d),Te(()=>r()?n(s):d??t.fallback??null,void 0,{name:"deferred"})}return i.preload=n.preload,i}function Pe(){let e=document.createElement("span");return e.setAttribute("data-fx-load","visible"),e.style.display="block",e}function Re(e,t,o){let n=!1,i=()=>{n||(n=!0,t())};switch(e.kind){case"idle":{let s=globalThis.requestIdleCallback;s?s(i):setTimeout(i,1);return}case"visible":{if(!o||typeof IntersectionObserver>"u"){i();return}let s=Le(o,r=>{r&&(s(),i())},{rootMargin:e.rootMargin??"0px"});return}case"interaction":{let s=()=>{for(let r of e.events)document.removeEventListener(r,s,!0);i()};for(let r of e.events)document.addEventListener(r,s,{capture:!0,passive:!0});return}case"media":{if(typeof matchMedia>"u"){i();return}let s=matchMedia(e.query);if(s.matches){i();return}let r=a=>{a.matches&&(s.removeEventListener("change",r),i())};s.addEventListener("change",r);return}default:i()}}import{createResource as Ae}from"@fluixi/reactive/signal";function Me(e){let t=()=>{let n=e.value;return typeof n=="function"?n():n},[o]=Ae(t);return()=>{if(o.loading)return e.fallback;let n=e.children;return typeof n=="function"?n(o()):n}}var C=typeof window>"u";function $e(e,t,o={}){if(R("render"),U(["click","input","change","submit"]),C)throw new Error("render() is for client-side only. Use renderToString() on server.");if(!t)throw new Error("Container element is required");let n;return De(i=>{n=i;let s=typeof e=="function"?e():e;t.textContent="",g(t),k(),je(t,()=>s)}),()=>{n&&(n(),n=void 0)}}function ze(e){return e&&typeof e=="object"&&(e._$litType$!==void 0||e._$litDirective$!==void 0)}function xn(e,t,o={}){let n=document.createElement("div");n.setAttribute("data-portal","true"),t.appendChild(n);let i=$e(e,n,o);return()=>{i(),t.contains(n)&&t.removeChild(n)}}function wn(e){return!!(e==null||typeof e=="function"||Fe(e)||ze(e)||Array.isArray(e)||typeof e=="string"||typeof e=="number"||typeof e=="boolean")}function Cn(){C||U(["click","input","change","submit"])}function Sn(){}export{M as $component,Me as Await,v as DEV,x as Suspense,Ce as SuspenseList,X as batch,Sn as cleanupDelegation,A as createComponent,l as createEffect,E as createMemo,Oe as deferred,se as devOnly,b as getOwner,Q as getSharedConfig,Cn as initDelegation,ie as isDev,xe as isJSXElement,he as isLitResult,ve as isNode,z as isPromise,wn as isRenderable,w as lazy,u as onCleanup,Y as onMount,Z as onUnmount,xn as portal,$e as render,L as runWithOwner,re as useCallback,D as useEffect,oe as useEventListener,ee as useMemo,te as useReducer,ne as useRef};
@@ -1 +1 @@
1
- "use strict";var y=Object.defineProperty;var m=Object.getOwnPropertyDescriptor;var w=Object.getOwnPropertyNames;var k=Object.prototype.hasOwnProperty;var C=(e,t)=>{for(var a in t)y(e,a,{get:t[a],enumerable:!0})},F=(e,t,a,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let c of w(t))!k.call(e,c)&&c!==a&&y(e,c,{get:()=>t[c],enumerable:!(r=m(t,c))||r.enumerable});return e};var P=e=>F(y({},"__esModule",{value:!0}),e);var N={};C(N,{$SUSPENSE:()=>g,Suspense:()=>b,SuspenseList:()=>E,isJSXElement:()=>x,isLitResult:()=>L,isNode:()=>A,isPromise:()=>S});module.exports=P(N);var n=require("@fluixi/reactive/signal"),f=require("@fluixi/dom"),g=Symbol.for("suspense");function A(e){return typeof window>"u"?!1:typeof Node=="function"&&e instanceof Node?!0:!!(e&&typeof e=="object"&&typeof e.nodeType=="number")}function L(e){return!e||typeof e!="object"?!1:!!(typeof e._$litType$<"u"||typeof e._$litDirective$<"u"||Array.isArray(e.strings)&&Array.isArray(e.values))}function S(e){return!!(e&&typeof e=="object"&&typeof e.then=="function"||e instanceof Promise)}function x(e){return!!(e&&typeof e=="object"&&"type"in e&&"props"in e)}var h=(0,n.createContext)();function b(e){return(0,f.createComponent)(R,e)}function R(e){let t=(0,n.createSuspenseBoundary)(),a=(0,n.useContext)(h),r=a?a.register(t.inFallback):void 0;function c(o){return o==null||typeof o=="boolean"?null:typeof o=="function"&&(0,f.isComponent)(o)&&!(0,n.isSignal)(o)?o():o}let p=(0,f.runWithoutHydration)(()=>c(e.fallback??null)),s=(0,n.provideSuspense)(t,()=>e.children);(0,n.provideSuspense)(t,()=>{(0,n.createRenderEffect)(()=>{let o=s;if(Array.isArray(o))for(let d of o)typeof d=="function"&&(0,n.isSignal)(d)&&d();else typeof o=="function"&&(0,n.isSignal)(o)&&o()})});let[i,l]=(0,n.createSignal)(void 0),u=S(s);return u&&(t.increment(),s.then(o=>{l(()=>o),t.decrement()},()=>t.decrement())),(0,n.createMemo)(()=>(r?r.showFallback():t.inFallback())?p:u?i():s)}function E(e){return(0,f.createComponent)(j,e)}function j(e){let{revealOrder:t="together",tail:a}=e,r=[];function c(){if(t==="together"){let s=r.every(i=>!i.inFallback());r.forEach(i=>{i.setShowContent(s),i.setShowFallback(!s)})}else{let s=t==="backwards"?[...r].reverse():r,i=!1;for(let l of s)i||l.inFallback()?(i=!0,l.setShowContent(!1),l.setShowFallback(a!=="hidden")):(l.setShowContent(!0),l.setShowFallback(!1))}}let p={register:s=>{let[i,l]=(0,n.createSignal)(!0),[u,o]=(0,n.createSignal)(!1);return r.push({inFallback:s,setShowContent:l,setShowFallback:o}),(0,n.createEffect)(()=>{s(),c()}),{showContent:i,showFallback:u}}};return h.Provider({value:p,children:e.children})}(0,f.asSuspense)(b);Object.defineProperty(b,"__suspense",{value:!0,enumerable:!0});
1
+ "use strict";var b=Object.defineProperty;var w=Object.getOwnPropertyDescriptor;var C=Object.getOwnPropertyNames;var F=Object.prototype.hasOwnProperty;var g=(e,t)=>{for(var a in t)b(e,a,{get:t[a],enumerable:!0})},P=(e,t,a,i)=>{if(t&&typeof t=="object"||typeof t=="function")for(let c of C(t))!F.call(e,c)&&c!==a&&b(e,c,{get:()=>t[c],enumerable:!(i=w(t,c))||i.enumerable});return e};var A=e=>P(b({},"__esModule",{value:!0}),e);var $={};g($,{$SUSPENSE:()=>L,Suspense:()=>S,SuspenseList:()=>N,isJSXElement:()=>R,isLitResult:()=>E,isNode:()=>x,isPromise:()=>h});module.exports=A($);var n=require("@fluixi/reactive/signal"),f=require("@fluixi/dom"),L=Symbol.for("suspense");function x(e){return typeof window>"u"?!1:typeof Node=="function"&&e instanceof Node?!0:!!(e&&typeof e=="object"&&typeof e.nodeType=="number")}function E(e){return!e||typeof e!="object"?!1:!!(typeof e._$litType$<"u"||typeof e._$litDirective$<"u"||Array.isArray(e.strings)&&Array.isArray(e.values))}function h(e){return!!(e&&typeof e=="object"&&typeof e.then=="function"||e instanceof Promise)}function R(e){return!!(e&&typeof e=="object"&&"type"in e&&"props"in e)}var m=(0,n.createContext)();function S(e){return(0,f.createComponent)(j,e)}function j(e){let t=(0,n.createSuspenseBoundary)(),a=(0,n.useContext)(m),i=a?a.register(t.inFallback):void 0;function c(o){return o==null||typeof o=="boolean"?null:typeof o=="function"&&(0,f.isComponent)(o)&&!(0,n.isSignal)(o)?o():o}let p=(0,f.runWithoutHydration)(()=>c(e.fallback??null)),r=(0,n.provideSuspense)(t,()=>(0,n.readChildren)(()=>e.children)),s=(o,y)=>{if(!(y>8))if(Array.isArray(o))for(let k of o)s(k,y+1);else typeof o=="function"&&(0,n.isSignal)(o)&&s(o(),y+1)};(0,n.provideSuspense)(t,()=>{(0,n.createRenderEffect)(()=>s(r,0))});let[l,d]=(0,n.createSignal)(void 0),u=h(r);return u&&(t.increment(),r.then(o=>{d(()=>o),t.decrement()},()=>t.decrement())),(0,n.createMemo)(()=>{let o=i?i.showFallback():t.inFallback();return process.env.FX_DEBUG&&console.log("[s] output; showFallback:",o),o?p:u?l():r})}function N(e){return(0,f.createComponent)(_,e)}function _(e){let{revealOrder:t="together",tail:a}=e,i=[];function c(){if(t==="together"){let r=i.every(s=>!s.inFallback());i.forEach(s=>{s.setShowContent(r),s.setShowFallback(!r)})}else{let r=t==="backwards"?[...i].reverse():i,s=!1;for(let l of r)s||l.inFallback()?(s=!0,l.setShowContent(!1),l.setShowFallback(a!=="hidden")):(l.setShowContent(!0),l.setShowFallback(!1))}}let p={register:r=>{let[s,l]=(0,n.createSignal)(!0),[d,u]=(0,n.createSignal)(!1);return i.push({inFallback:r,setShowContent:l,setShowFallback:u}),(0,n.createEffect)(()=>{r(),c()}),{showContent:s,showFallback:d}}};return m.Provider({value:p,children:e.children})}(0,f.asSuspense)(S);Object.defineProperty(S,"__suspense",{value:!0,enumerable:!0});
@@ -1 +1 @@
1
- {"version":3,"file":"suspense.d.ts","sourceRoot":"","sources":["../../../../src/lib/render/suspense.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAsBH,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,EAAE,GAAG,CAAC;IACf,QAAQ,CAAC,EAAE,GAAG,CAAC;IACf,EAAE,CAAC,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,GAAG,CAAC;IACd,WAAW,CAAC,EAAE,UAAU,GAAG,WAAW,GAAG,UAAU,CAAC;IACpD,IAAI,CAAC,EAAE,WAAW,GAAG,QAAQ,CAAC;CAC/B;AAED,eAAO,MAAM,SAAS,eAAyB,CAAC;AAEhD,iBAAS,MAAM,CAAC,KAAK,EAAE,GAAG,GAAG,KAAK,IAAI,IAAI,CAIzC;AAED,iBAAS,WAAW,CAAC,KAAK,EAAE,GAAG,GAAG,OAAO,CAOxC;AAED,iBAAS,SAAS,CAAC,CAAC,GAAG,GAAG,EAAE,KAAK,EAAE,GAAG,GAAG,KAAK,IAAI,OAAO,CAAC,CAAC,CAAC,CAK3D;AAED,iBAAS,YAAY,CAAC,KAAK,EAAE,GAAG,GAAG,OAAO,CAEzC;AAYD,wBAAgB,QAAQ,CAAC,KAAK,EAAE,aAAa,GAAG,GAAG,CAElD;AA6DD,wBAAgB,YAAY,CAAC,KAAK,EAAE,iBAAiB,GAAG,GAAG,CAE1D;AAwDD,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC"}
1
+ {"version":3,"file":"suspense.d.ts","sourceRoot":"","sources":["../../../../src/lib/render/suspense.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAuBH,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,EAAE,GAAG,CAAC;IACf,QAAQ,CAAC,EAAE,GAAG,CAAC;IACf,EAAE,CAAC,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,GAAG,CAAC;IACd,WAAW,CAAC,EAAE,UAAU,GAAG,WAAW,GAAG,UAAU,CAAC;IACpD,IAAI,CAAC,EAAE,WAAW,GAAG,QAAQ,CAAC;CAC/B;AAED,eAAO,MAAM,SAAS,eAAyB,CAAC;AAEhD,iBAAS,MAAM,CAAC,KAAK,EAAE,GAAG,GAAG,KAAK,IAAI,IAAI,CAIzC;AAED,iBAAS,WAAW,CAAC,KAAK,EAAE,GAAG,GAAG,OAAO,CAOxC;AAED,iBAAS,SAAS,CAAC,CAAC,GAAG,GAAG,EAAE,KAAK,EAAE,GAAG,GAAG,KAAK,IAAI,OAAO,CAAC,CAAC,CAAC,CAK3D;AAED,iBAAS,YAAY,CAAC,KAAK,EAAE,GAAG,GAAG,OAAO,CAEzC;AAYD,wBAAgB,QAAQ,CAAC,KAAK,EAAE,aAAa,GAAG,GAAG,CAElD;AAgFD,wBAAgB,YAAY,CAAC,KAAK,EAAE,iBAAiB,GAAG,GAAG,CAE1D;AAwDD,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC"}
@@ -4,7 +4,7 @@
4
4
  * SuspenseContext on this component's owner), which flips inFallback. The output
5
5
  * memo swaps between fallback and children on that signal.
6
6
  */
7
- import { createSignal, createMemo, createEffect, createRenderEffect, isSignal, useContext, createContext, createSuspenseBoundary, provideSuspense, } from '@fluixi/reactive/signal';
7
+ import { createSignal, createMemo, createEffect, createRenderEffect, isSignal, readChildren, useContext, createContext, createSuspenseBoundary, provideSuspense, } from '@fluixi/reactive/signal';
8
8
  import { asSuspense, isComponent, createComponent, runWithoutHydration, } from '@fluixi/dom';
9
9
  export const $SUSPENSE = Symbol.for('suspense');
10
10
  function isNode(value) {
@@ -49,24 +49,41 @@ function SuspenseImpl(props) {
49
49
  const fallback = runWithoutHydration(() => instantiateOnce(props.fallback ?? null));
50
50
  // Read the children under the boundary so the memos they create capture its owner;
51
51
  // then a suspended resource read inside them throws to THIS boundary, not the parent.
52
- const children = provideSuspense(boundary, () => props.children);
52
+ //
53
+ // `readChildren`, not a bare `props.children` read: a component child arrives as a THUNK
54
+ // that instantiates when called, so reading the prop alone hands back a function and the
55
+ // component never runs here. It would then be instantiated later, downstream of the output
56
+ // memo, where a suspend has no boundary that can re-run it — the failure that produced an
57
+ // empty node on a client navigation into a not-yet-loaded lazy route: no fallback, no
58
+ // content, no error. `readChildren` unwraps the thunks (so the lazy component runs under
59
+ // this boundary), stops at signals so dynamic children stay reactive, and memoises the
60
+ // result so the tracking effect below and the output render the same instantiation.
61
+ const children = provideSuspense(boundary, () => readChildren(() => props.children));
53
62
  // Instantiate the children now, in their own effect under the boundary. A suspended
54
63
  // resource read inside them throws here synchronously — a sibling of the output memo
55
64
  // below — so the increment reschedules the output cleanly (matching the canary). If we
56
65
  // only rendered children through the output's return, the resource read would be nested
57
66
  // inside the output's own insert effect, which then never re-runs to show the fallback.
67
+ //
68
+ // Follow NESTED accessors, not just the outer one: the compiler wraps a dynamic child in
69
+ // its own memo, and `readChildren` stops at signals on purpose so they stay reactive. Stop
70
+ // at the outer read and a lazy component behind a condition is never instantiated here —
71
+ // it runs later, downstream, where its suspend reaches no boundary. Reading a memo is
72
+ // idempotent (it caches, and the output reads the same one), so following the chain costs
73
+ // nothing and cannot duplicate the subtree.
74
+ const track = (value, depth) => {
75
+ if (depth > 8)
76
+ return;
77
+ if (Array.isArray(value)) {
78
+ for (const x of value)
79
+ track(x, depth + 1);
80
+ }
81
+ else if (typeof value === 'function' && isSignal(value)) {
82
+ track(value(), depth + 1);
83
+ }
84
+ };
58
85
  provideSuspense(boundary, () => {
59
- createRenderEffect(() => {
60
- const c = children;
61
- if (Array.isArray(c)) {
62
- for (const x of c)
63
- if (typeof x === 'function' && isSignal(x))
64
- x();
65
- }
66
- else if (typeof c === 'function' && isSignal(c)) {
67
- c();
68
- }
69
- });
86
+ createRenderEffect(() => track(children, 0));
70
87
  });
71
88
  // A raw promise child: track it directly on the boundary.
72
89
  const [resolved, setResolved] = createSignal(undefined);
@@ -80,6 +97,8 @@ function SuspenseImpl(props) {
80
97
  }
81
98
  return createMemo(() => {
82
99
  const showFallback = listState ? listState.showFallback() : boundary.inFallback();
100
+ if (process.env.FX_DEBUG)
101
+ console.log('[s] output; showFallback:', showFallback);
83
102
  if (showFallback)
84
103
  return fallback;
85
104
  if (childIsPromise)
@@ -1 +1 @@
1
- import{createSignal as d,createMemo as m,createEffect as w,createRenderEffect as k,isSignal as p,useContext as C,createContext as F,createSuspenseBoundary as P,provideSuspense as y}from"@fluixi/reactive/signal";import{asSuspense as g,isComponent as A,createComponent as b,runWithoutHydration as L}from"@fluixi/dom";var $=Symbol.for("suspense");function O(e){return typeof window>"u"?!1:typeof Node=="function"&&e instanceof Node?!0:!!(e&&typeof e=="object"&&typeof e.nodeType=="number")}function T(e){return!e||typeof e!="object"?!1:!!(typeof e._$litType$<"u"||typeof e._$litDirective$<"u"||Array.isArray(e.strings)&&Array.isArray(e.values))}function x(e){return!!(e&&typeof e=="object"&&typeof e.then=="function"||e instanceof Promise)}function _(e){return!!(e&&typeof e=="object"&&"type"in e&&"props"in e)}var S=F();function h(e){return b(R,e)}function R(e){let s=P(),a=C(S),i=a?a.register(s.inFallback):void 0;function l(n){return n==null||typeof n=="boolean"?null:typeof n=="function"&&A(n)&&!p(n)?n():n}let f=L(()=>l(e.fallback??null)),t=y(s,()=>e.children);y(s,()=>{k(()=>{let n=t;if(Array.isArray(n))for(let u of n)typeof u=="function"&&p(u)&&u();else typeof n=="function"&&p(n)&&n()})});let[o,r]=d(void 0),c=x(t);return c&&(s.increment(),t.then(n=>{r(()=>n),s.decrement()},()=>s.decrement())),m(()=>(i?i.showFallback():s.inFallback())?f:c?o():t)}function B(e){return b(E,e)}function E(e){let{revealOrder:s="together",tail:a}=e,i=[];function l(){if(s==="together"){let t=i.every(o=>!o.inFallback());i.forEach(o=>{o.setShowContent(t),o.setShowFallback(!t)})}else{let t=s==="backwards"?[...i].reverse():i,o=!1;for(let r of t)o||r.inFallback()?(o=!0,r.setShowContent(!1),r.setShowFallback(a!=="hidden")):(r.setShowContent(!0),r.setShowFallback(!1))}}let f={register:t=>{let[o,r]=d(!0),[c,n]=d(!1);return i.push({inFallback:t,setShowContent:r,setShowFallback:n}),w(()=>{t(),l()}),{showContent:o,showFallback:c}}};return S.Provider({value:f,children:e.children})}g(h);Object.defineProperty(h,"__suspense",{value:!0,enumerable:!0});export{$ as $SUSPENSE,h as Suspense,B as SuspenseList,_ as isJSXElement,T as isLitResult,O as isNode,x as isPromise};
1
+ import{createSignal as d,createMemo as w,createEffect as C,createRenderEffect as F,isSignal as y,readChildren as g,useContext as P,createContext as A,createSuspenseBoundary as L,provideSuspense as b}from"@fluixi/reactive/signal";import{asSuspense as x,isComponent as E,createComponent as S,runWithoutHydration as R}from"@fluixi/dom";var O=Symbol.for("suspense");function T(e){return typeof window>"u"?!1:typeof Node=="function"&&e instanceof Node?!0:!!(e&&typeof e=="object"&&typeof e.nodeType=="number")}function I(e){return!e||typeof e!="object"?!1:!!(typeof e._$litType$<"u"||typeof e._$litDirective$<"u"||Array.isArray(e.strings)&&Array.isArray(e.values))}function j(e){return!!(e&&typeof e=="object"&&typeof e.then=="function"||e instanceof Promise)}function D(e){return!!(e&&typeof e=="object"&&"type"in e&&"props"in e)}var h=A();function m(e){return S(N,e)}function N(e){let s=L(),a=P(h),i=a?a.register(s.inFallback):void 0;function l(n){return n==null||typeof n=="boolean"?null:typeof n=="function"&&E(n)&&!y(n)?n():n}let f=R(()=>l(e.fallback??null)),o=b(s,()=>g(()=>e.children)),t=(n,p)=>{if(!(p>8))if(Array.isArray(n))for(let k of n)t(k,p+1);else typeof n=="function"&&y(n)&&t(n(),p+1)};b(s,()=>{F(()=>t(o,0))});let[r,u]=d(void 0),c=j(o);return c&&(s.increment(),o.then(n=>{u(()=>n),s.decrement()},()=>s.decrement())),w(()=>{let n=i?i.showFallback():s.inFallback();return process.env.FX_DEBUG&&console.log("[s] output; showFallback:",n),n?f:c?r():o})}function U(e){return S(_,e)}function _(e){let{revealOrder:s="together",tail:a}=e,i=[];function l(){if(s==="together"){let o=i.every(t=>!t.inFallback());i.forEach(t=>{t.setShowContent(o),t.setShowFallback(!o)})}else{let o=s==="backwards"?[...i].reverse():i,t=!1;for(let r of o)t||r.inFallback()?(t=!0,r.setShowContent(!1),r.setShowFallback(a!=="hidden")):(r.setShowContent(!0),r.setShowFallback(!1))}}let f={register:o=>{let[t,r]=d(!0),[u,c]=d(!1);return i.push({inFallback:o,setShowContent:r,setShowFallback:c}),C(()=>{o(),l()}),{showContent:t,showFallback:u}}};return h.Provider({value:f,children:e.children})}x(m);Object.defineProperty(m,"__suspense",{value:!0,enumerable:!0});export{O as $SUSPENSE,m as Suspense,U as SuspenseList,D as isJSXElement,I as isLitResult,T as isNode,j as isPromise};
@@ -1 +1 @@
1
- "use strict";var n=Object.defineProperty;var V=Object.getOwnPropertyDescriptor;var a=Object.getOwnPropertyNames;var O=Object.prototype.hasOwnProperty;var f=(o,r)=>{for(var i in r)n(o,i,{get:r[i],enumerable:!0})},x=(o,r,i,t)=>{if(r&&typeof r=="object"||typeof r=="function")for(let s of a(r))!O.call(o,s)&&s!==i&&n(o,s,{get:()=>r[s],enumerable:!(t=V(r,s))||t.enumerable});return o};var E=o=>x(n({},"__esModule",{value:!0}),o);var R={};f(R,{stampVersions:()=>e.stampVersions,versions:()=>e.versions,warnOnVersionSkew:()=>e.warnOnVersionSkew});module.exports=E(R);var m=require("@fluixi/dom");var p="1.0.0-alpha.74";var e=require("@fluixi/dom");(0,m.registerCoreVersion)(p);
1
+ "use strict";var n=Object.defineProperty;var V=Object.getOwnPropertyDescriptor;var a=Object.getOwnPropertyNames;var O=Object.prototype.hasOwnProperty;var f=(o,r)=>{for(var i in r)n(o,i,{get:r[i],enumerable:!0})},x=(o,r,i,t)=>{if(r&&typeof r=="object"||typeof r=="function")for(let s of a(r))!O.call(o,s)&&s!==i&&n(o,s,{get:()=>r[s],enumerable:!(t=V(r,s))||t.enumerable});return o};var E=o=>x(n({},"__esModule",{value:!0}),o);var R={};f(R,{stampVersions:()=>e.stampVersions,versions:()=>e.versions,warnOnVersionSkew:()=>e.warnOnVersionSkew});module.exports=E(R);var m=require("@fluixi/dom");var p="1.0.0-alpha.76";var e=require("@fluixi/dom");(0,m.registerCoreVersion)(p);
@@ -1 +1 @@
1
- import{registerCoreVersion as o}from"@fluixi/dom";var r="1.0.0-alpha.74";import{stampVersions as p,warnOnVersionSkew as m,versions as V}from"@fluixi/dom";o(r);export{p as stampVersions,V as versions,m as warnOnVersionSkew};
1
+ import{registerCoreVersion as o}from"@fluixi/dom";var r="1.0.0-alpha.76";import{stampVersions as p,warnOnVersionSkew as m,versions as V}from"@fluixi/dom";o(r);export{p as stampVersions,V as versions,m as warnOnVersionSkew};
@@ -1 +1 @@
1
- "use strict";var w=Object.defineProperty;var re=Object.getOwnPropertyDescriptor;var oe=Object.getOwnPropertyNames;var ae=Object.prototype.hasOwnProperty;var ie=(e,n)=>{for(var t in n)w(e,t,{get:n[t],enumerable:!0})},se=(e,n,t,o)=>{if(n&&typeof n=="object"||typeof n=="function")for(let r of oe(n))!ae.call(e,r)&&r!==t&&w(e,r,{get:()=>n[r],enumerable:!(o=re(n,r))||o.enumerable});return e};var ce=e=>se(w({},"__esModule",{value:!0}),e);var He={};ie(He,{A:()=>Me,Form:()=>Ne,Link:()=>Z,Outlet:()=>be,Redirect:()=>Re,Router:()=>Ce,action:()=>E,cache:()=>F,createAsync:()=>I,createBrowserHistory:()=>g.createBrowserHistory,createMemoryHistory:()=>g.createMemoryHistory,lazy:()=>$,matchPath:()=>g.matchPath,matchRoutes:()=>g.matchRoutes,preloadRoutes:()=>_e,revalidate:()=>U,runWithOwner:()=>ee.runWithOwner,select:()=>Le,useAction:()=>W,useLevelParams:()=>we,useLocation:()=>D,useMatch:()=>Oe,useNavigate:()=>Q,useParam:()=>Ae,useParamSelector:()=>Se,useParams:()=>L,useRouteData:()=>De,useRouter:()=>P,useSearchParams:()=>Ee,useSubmission:()=>z});module.exports=ce(He);var s=require("@fluixi/reactive/signal"),u=require("@fluixi/dom"),l=require("@fluixi/reactive/signal"),q=require("@fluixi/utils/object"),B=require("@fluixi/utils/compare"),m=require("@fluixi/router"),g=require("@fluixi/router");var T=require("@fluixi/reactive/signal");var ue=!1,A=new Map;function k(){return ue}function M(e,n){A.set(e,n)}function N(e){return A.get(e)}function de(){A.clear()}function fe(){if(typeof window>"u")return;let e=document.getElementById("__FLUIXI_HYDRATION__");e&&e.remove();let n=document.createTreeWalker(document.body,NodeFilter.SHOW_COMMENT,null),t=[],o;for(;o=n.nextNode();){let r=o,a=r.nodeValue||"";(a.startsWith("#")||a.startsWith("/"))&&t.push(r)}t.forEach(r=>r.remove()),de()}typeof window<"u"&&window.addEventListener("load",()=>{setTimeout(fe,100)});function _(){return typeof window>"u"}var V=require("@fluixi/dom"),S=require("@fluixi/reactive/signal"),ye=require("@fluixi/reactive/signal");var b=require("@fluixi/dom"),f=require("@fluixi/reactive/signal");function H(e){(0,b.registerCreateComponent)(le)}function le(e,n){return pe(e,n)}function pe(e,n){let t=typeof e=="function"?(0,f.untrack)(()=>e(n)):e;if(t!=null&&(typeof t=="function"||typeof t=="object")&&!(0,f.isSignal)(t)){try{t.$name=e.name}catch{}return(0,b.asComponent)(t)}return t}H("index");function j(e){let n=(0,S.createContext)(e),t=o=>(o.debug,n.Provider({value:o.value,get children(){return o.children},debug:o.debug}));return typeof Symbol<"u"&&Symbol.for&&(t.$$typeof=Symbol.for("react.provider")),t.$$typeof=Symbol.for("react.provider"),{id:n.id,Provider:(0,V.asProvider)(t),defaultValue:e}}var v=new Map,h=new Map;function F(e,n){return async(...t)=>{let o=n+":"+JSON.stringify(t);if(k()||typeof window<"u"){let a=N(o);if(a!==void 0)return a}if(v.has(o))return v.get(o);if(h.has(o))return h.get(o);let r=Promise.resolve(e(...t)).then(a=>(v.set(o,a),h.delete(o),_()&&M(o,a),a),a=>{throw h.delete(o),a});return h.set(o,r),r}}var[rt,me]=(0,T.createSignal)(0),ge=new Set;function U(e){let n=typeof e=="string"?t=>t.startsWith(e):e;for(let t of v.keys())n(t)&&(v.delete(t),ge.add(t));me(t=>t+1)}function I(e,n){let[t]=(0,T.createResource)(n||(()=>!0),e);return t}var O=new Map;function K(e){return O.has(e)||O.set(e,(0,T.createSignal)(void 0)),O.get(e)}function E(e,n){let t=n||e.name||"action",o=async r=>{let[,a]=K(t),i=()=>a(void 0),c=()=>o(r);a({input:r,pending:!0,clear:i,retry:c});try{let d=await e(r);return a({input:r,result:d,pending:!1,clear:i,retry:c}),d}catch(d){throw a({input:r,error:d,pending:!1,clear:i,retry:c}),d}};return o.url=t,o.with=r=>E((...a)=>e(r,...a),n),o}function z(e){let[n]=K(e.url);return n}function W(e){return e}var xe=j(),ot=xe.Provider;var x=require("@fluixi/reactive/signal");function $(e,n){let t,o,r;function a(){return o||(o=e().then(c=>t=c.default)),o}n?.preload&&a();let i=(c=>{if(t){let d=t;return(0,x.untrack)(()=>d(c))}if(!r){let[d]=(0,x.createResource)(()=>a(),{transport:!1});if(r=d,d.error)throw d.error}return(0,x.createMemo)(()=>{let d=r();return d?(0,x.untrack)(()=>d(c)):void 0},void 0,{name:"lazy"})});return i.preload=()=>a().then(()=>{}),i.$lazy=!0,i.loader=e,i}var ee=require("@fluixi/reactive/signal"),R=(0,l.createContext)(),J=(0,l.createContext)(),X=(0,l.createContext)(),Y=(0,l.createContext)();function he(e,n,t){let o,r=e.route.data;if(typeof r=="function"){let C=!1;(0,s.onCleanup)(()=>{C=!0});let te=(0,s.getOwner)(),[ne]=(0,s.createResource)(()=>r({params:t.params,location:t.location},te,()=>C));o=ne}let a=()=>Y.Provider({value:o,get children(){return X.Provider({value:e.params,get children(){return J.Provider({value:{depth:n,...t},get children(){return(0,u.createComponent)(e.component,{})}})}})}});if(!o)return a();let i=o,c=()=>i.loading,[d,p]=(0,s.createSignal)((0,s.untrack)(()=>!c()));return(0,s.createEffect)(()=>p(!c())),(0,s.createMemo)(()=>d()?a():null)}function G(e){let n=e.depth+1,[t,o]=(0,s.createSignal)((0,s.untrack)(()=>e.matched()[n]?.component));return(0,s.createEffect)(()=>{let r=e.matched()[n]?.component;o(()=>r)}),(0,s.createMemo)(()=>{if(!t())return e.notFound?e.notFound():null;let a=(0,s.untrack)(()=>e.matched())[n];return he(a,n,{matched:e.matched,params:e.params,location:e.location})})}function ve(e){return e==null?Te():typeof e=="function"?(0,u.createComponent)(e,{}):e}function Te(){let e=(0,u.createNativeElement)("div");(0,u.setAttribute)(e,"class","fx-not-found"),(0,u.setAttribute)(e,"role","main"),(0,u.setAttribute)(e,"style","min-height:60vh;display:grid;place-content:center;gap:.25rem;text-align:center;font-family:system-ui,-apple-system,sans-serif");let n=(0,u.createNativeElement)("h1");(0,u.setAttribute)(n,"style","margin:0;font-size:2.5rem;font-weight:700"),(0,u.insert)(n,"404");let t=(0,u.createNativeElement)("p");return(0,u.setAttribute)(t,"style","margin:0;opacity:.7"),(0,u.insert)(t,"This page could not be found."),e.appendChild(n),e.appendChild(t),e}function Ce(e){let n=e.history??(0,m.createBrowserHistory)(),t=(0,m.createRouter)({routes:e.routes,base:e.base,history:n}),[o,r]=(0,s.createSignal)(t.state()),a=t.subscribe(r);(0,s.onCleanup)(()=>{a(),t.destroy()});let i=(0,s.createMemo)(()=>(o().match?.matched??[]).filter(C=>C.component)),c={router:t,location:(0,s.createMemo)(()=>o().location),params:(0,s.createMemo)(()=>o().match?.params??{})},d={depth:-1,matched:i,params:c.params,location:c.location,notFound:()=>ve(e.notFound)},p;return R.Provider({value:c,get children(){return p??=G(d)}})}function be(){let e=(0,l.useContext)(J);return e?G(e):null}function Re(e){let n=(0,l.useContext)(R);if(!n||typeof window>"u")return null;let t=!1;return(0,s.onCleanup)(()=>t=!0),queueMicrotask(()=>{t||n.router.navigate(e.to,{replace:e.replace!==!1})}),null}var Pe={router:{navigate:()=>{}},location:()=>({pathname:"",search:"",hash:"",query:{}}),params:()=>({})};function P(){let e=(0,l.useContext)(R);if(e)return e;if(typeof window>"u")return Pe;throw new Error("[router-next] useRouter must be used within <Router>")}function L(){let e=P().params;return(0,s.createMemo)(()=>e(),{},{equals:(n,t)=>JSON.stringify(n)===JSON.stringify(t)})}function we(){return(0,l.useContext)(X)??{}}function Ae(e){let n=L();return(0,s.createMemo)(()=>n()[e])}function Se(e,n){let t=L();return(0,s.createMemo)(()=>e(t()),void 0,n?{equals:n}:void 0)}function Oe(e){let n=D();return(0,s.createMemo)(()=>(0,m.matchPath)(typeof e=="function"?e():e,n.pathname))}function Ee(){let e=D(),n=Q();return[(0,s.createMemo)(()=>e.query),(r,a)=>{let i=new URLSearchParams(e.search);for(let[d,p]of Object.entries(r))p===null?i.delete(d):i.set(d,p);let c=i.toString();n(e.pathname+(c?`?${c}`:""),a)}]}function Le(e,n){let t=(o,r)=>(0,B.deepEqual)(o,r);return n!==void 0?(0,s.createMemo)(()=>(0,q.get)(e(),n),void 0,{equals:t}):(0,s.createMemo)(e,void 0,{equals:t})}function D(){let{location:e}=P();return new Proxy({},{get:(n,t)=>e()[t],has:(n,t)=>t in e(),ownKeys:()=>Reflect.ownKeys(e()),getOwnPropertyDescriptor:(n,t)=>Object.getOwnPropertyDescriptor(e(),t)})}function Q(){let{router:e}=P();return(n,t)=>e.navigate(n,t)}function De(){return(0,l.useContext)(Y)??(()=>{})}var y=e=>typeof e=="function"?e():e,ke=new Set(["href","slot","class","className","active","activeClass","replace","children"]);function Z(e){let n=(0,l.useContext)(R),t=typeof document>"u",o=()=>n?.router.navigate(y(e.href)??"",{replace:y(e.replace)}),r=(0,u.createNativeElement)("a");(0,u.setAttribute)(r,"href",y(e.href)??""),e.slot&&(0,u.setAttribute)(r,"slot",y(e.slot));for(let[i,c]of Object.entries(e))ke.has(i)||c!=null&&typeof c!="function"&&(0,u.setAttribute)(r,i,String(c));if(typeof r.addEventListener=="function")r.addEventListener("click",i=>{i.metaKey||i.ctrlKey||i.shiftKey||i.altKey||(i.preventDefault(),o())});else{let i=y(e.className??e.class)??"";i&&(0,u.setAttribute)(r,"class",i)}typeof r.addEventListener=="function"&&(0,s.createEffect)(()=>{let i=y(e.href)??"";r.setAttribute("href",i);let c=y(e.className??e.class)??"",d=y(e.activeClass)??"",p=y(e.active)??n?.location().pathname===i;r.className=[c,p?d:""].filter(Boolean).join(" ")});let a=e.children;return a!=null&&(0,u.insert)(r,a),r}var Me=Z;function Ne(e){let n=e.action,t=e.className??e.class,o=n.url??"",r=(0,u.createNativeElement)("form");(0,u.setAttribute)(r,"method","post"),o&&(0,u.setAttribute)(r,"action",o),t&&(0,u.setAttribute)(r,"class",t);for(let[i,c]of Object.entries(e))i==="action"||i==="children"||i==="class"||i==="className"||c!=null&&typeof c!="function"&&(0,u.setAttribute)(r,i,String(c));typeof r.addEventListener=="function"&&r.addEventListener("submit",i=>{i.preventDefault();let c={};new FormData(r).forEach((d,p)=>{c[p]=d}),Promise.resolve(n(c)).catch(()=>{})});let a=e.children;return a!=null&&(0,u.insert)(r,a),r}async function _e(e,n){let t=(0,m.matchRoutes)(e,n);if(!t)return;let o=[];for(let r of t.matched){let a=r.component;a&&typeof a.preload=="function"&&o.push(a.preload())}await Promise.all(o)}
1
+ "use strict";var P=Object.defineProperty;var re=Object.getOwnPropertyDescriptor;var oe=Object.getOwnPropertyNames;var ae=Object.prototype.hasOwnProperty;var ie=(e,n)=>{for(var t in n)P(e,t,{get:n[t],enumerable:!0})},se=(e,n,t,o)=>{if(n&&typeof n=="object"||typeof n=="function")for(let r of oe(n))!ae.call(e,r)&&r!==t&&P(e,r,{get:()=>n[r],enumerable:!(o=re(n,r))||o.enumerable});return e};var ce=e=>se(P({},"__esModule",{value:!0}),e);var Ve={};ie(Ve,{A:()=>Ne,Form:()=>_e,Link:()=>Z,Outlet:()=>be,Redirect:()=>Re,Router:()=>Ce,action:()=>L,cache:()=>F,createAsync:()=>K,createBrowserHistory:()=>g.createBrowserHistory,createMemoryHistory:()=>g.createMemoryHistory,lazy:()=>$,matchPath:()=>g.matchPath,matchRoutes:()=>g.matchRoutes,preloadRoutes:()=>He,revalidate:()=>U,runWithOwner:()=>ee.runWithOwner,select:()=>Ee,useAction:()=>W,useLevelParams:()=>Pe,useLinkNavigation:()=>ke,useLocation:()=>k,useMatch:()=>Oe,useNavigate:()=>Q,useParam:()=>Ae,useParamSelector:()=>Se,useParams:()=>E,useRouteData:()=>De,useRouter:()=>w,useSearchParams:()=>Le,useSubmission:()=>z});module.exports=ce(Ve);var s=require("@fluixi/reactive/signal"),u=require("@fluixi/dom"),l=require("@fluixi/reactive/signal"),q=require("@fluixi/utils/object"),B=require("@fluixi/utils/compare"),m=require("@fluixi/router"),g=require("@fluixi/router");var T=require("@fluixi/reactive/signal");var ue=!1,A=new Map;function D(){return ue}function M(e,n){A.set(e,n)}function N(e){return A.get(e)}function de(){A.clear()}function le(){if(typeof window>"u")return;let e=document.getElementById("__FLUIXI_HYDRATION__");e&&e.remove();let n=document.createTreeWalker(document.body,NodeFilter.SHOW_COMMENT,null),t=[],o;for(;o=n.nextNode();){let r=o,a=r.nodeValue||"";(a.startsWith("#")||a.startsWith("/"))&&t.push(r)}t.forEach(r=>r.remove()),de()}typeof window<"u"&&window.addEventListener("load",()=>{setTimeout(le,100)});function _(){return typeof window>"u"}var V=require("@fluixi/dom"),S=require("@fluixi/reactive/signal"),ye=require("@fluixi/reactive/signal");var R=require("@fluixi/dom"),f=require("@fluixi/reactive/signal");function H(e){(0,R.registerCreateComponent)(fe)}function fe(e,n){return pe(e,n)}function pe(e,n){let t=typeof e=="function"?(0,f.untrack)(()=>e(n)):e;if(t!=null&&(typeof t=="function"||typeof t=="object")&&!(0,f.isSignal)(t)){try{t.$name=e.name}catch{}return(0,R.asComponent)(t)}return t}H("index");function j(e){let n=(0,S.createContext)(e),t=o=>(o.debug,n.Provider({value:o.value,get children(){return o.children},debug:o.debug}));return typeof Symbol<"u"&&Symbol.for&&(t.$$typeof=Symbol.for("react.provider")),t.$$typeof=Symbol.for("react.provider"),{id:n.id,Provider:(0,V.asProvider)(t),defaultValue:e}}var v=new Map,x=new Map;function F(e,n){return async(...t)=>{let o=n+":"+JSON.stringify(t);if(D()||typeof window<"u"){let a=N(o);if(a!==void 0)return a}if(v.has(o))return v.get(o);if(x.has(o))return x.get(o);let r=Promise.resolve(e(...t)).then(a=>(v.set(o,a),x.delete(o),_()&&M(o,a),a),a=>{throw x.delete(o),a});return x.set(o,r),r}}var[ot,me]=(0,T.createSignal)(0),ge=new Set;function U(e){let n=typeof e=="string"?t=>t.startsWith(e):e;for(let t of v.keys())n(t)&&(v.delete(t),ge.add(t));me(t=>t+1)}function K(e,n){let[t]=(0,T.createResource)(n||(()=>!0),e);return t}var O=new Map;function I(e){return O.has(e)||O.set(e,(0,T.createSignal)(void 0)),O.get(e)}function L(e,n){let t=n||e.name||"action",o=async r=>{let[,a]=I(t),i=()=>a(void 0),c=()=>o(r);a({input:r,pending:!0,clear:i,retry:c});try{let d=await e(r);return a({input:r,result:d,pending:!1,clear:i,retry:c}),d}catch(d){throw a({input:r,error:d,pending:!1,clear:i,retry:c}),d}};return o.url=t,o.with=r=>L((...a)=>e(r,...a),n),o}function z(e){let[n]=I(e.url);return n}function W(e){return e}var he=j(),at=he.Provider;var h=require("@fluixi/reactive/signal");function $(e,n){let t,o,r;function a(){return o||(o=e().then(c=>t=c.default)),o}n?.preload&&a();let i=(c=>{if(t){let d=t;return(0,h.untrack)(()=>d(c))}if(!r){let[d]=(0,h.createResource)(()=>a(),{transport:!1});if(r=d,d.error)throw d.error}return(0,h.createMemo)(()=>{let d=r();return d?(0,h.untrack)(()=>d(c)):void 0},void 0,{name:"lazy"})});return i.preload=()=>a().then(()=>{}),i.$lazy=!0,i.loader=e,i}var ee=require("@fluixi/reactive/signal"),C=(0,l.createContext)(),J=(0,l.createContext)(),X=(0,l.createContext)(),Y=(0,l.createContext)();function xe(e,n,t){let o,r=e.route.data;if(typeof r=="function"){let b=!1;(0,s.onCleanup)(()=>{b=!0});let te=(0,s.getOwner)(),[ne]=(0,s.createResource)(()=>r({params:t.params,location:t.location},te,()=>b));o=ne}let a=()=>Y.Provider({value:o,get children(){return X.Provider({value:e.params,get children(){return J.Provider({value:{depth:n,...t},get children(){return(0,u.createComponent)(e.component,{})}})}})}});if(!o)return a();let i=o,c=()=>i.loading,[d,p]=(0,s.createSignal)((0,s.untrack)(()=>!c()));return(0,s.createEffect)(()=>p(!c())),(0,s.createMemo)(()=>d()?a():null)}function G(e){let n=e.depth+1,[t,o]=(0,s.createSignal)((0,s.untrack)(()=>e.matched()[n]?.component));return(0,s.createEffect)(()=>{let r=e.matched()[n]?.component;o(()=>r)}),(0,s.createMemo)(()=>{if(!t())return e.notFound?e.notFound():null;let a=(0,s.untrack)(()=>e.matched())[n];return xe(a,n,{matched:e.matched,params:e.params,location:e.location})})}function ve(e){return e==null?Te():typeof e=="function"?(0,u.createComponent)(e,{}):e}function Te(){let e=(0,u.createNativeElement)("div");(0,u.setAttribute)(e,"class","fx-not-found"),(0,u.setAttribute)(e,"role","main"),(0,u.setAttribute)(e,"style","min-height:60vh;display:grid;place-content:center;gap:.25rem;text-align:center;font-family:system-ui,-apple-system,sans-serif");let n=(0,u.createNativeElement)("h1");(0,u.setAttribute)(n,"style","margin:0;font-size:2.5rem;font-weight:700"),(0,u.insert)(n,"404");let t=(0,u.createNativeElement)("p");return(0,u.setAttribute)(t,"style","margin:0;opacity:.7"),(0,u.insert)(t,"This page could not be found."),e.appendChild(n),e.appendChild(t),e}function Ce(e){let n=e.history??(0,m.createBrowserHistory)(),t=(0,m.createRouter)({routes:e.routes,base:e.base,history:n}),[o,r]=(0,s.createSignal)(t.state()),a=t.subscribe(r);(0,s.onCleanup)(()=>{a(),t.destroy()});let i=(0,s.createMemo)(()=>(o().match?.matched??[]).filter(b=>b.component)),c={router:t,location:(0,s.createMemo)(()=>o().location),params:(0,s.createMemo)(()=>o().match?.params??{})},d={depth:-1,matched:i,params:c.params,location:c.location,notFound:()=>ve(e.notFound)},p;return C.Provider({value:c,get children(){return p??=G(d)}})}function be(){let e=(0,l.useContext)(J);return e?G(e):null}function Re(e){let n=(0,l.useContext)(C);if(!n||typeof window>"u")return null;let t=!1;return(0,s.onCleanup)(()=>t=!0),queueMicrotask(()=>{t||n.router.navigate(e.to,{replace:e.replace!==!1})}),null}var we={router:{navigate:()=>{}},location:()=>({pathname:"",search:"",hash:"",query:{}}),params:()=>({})};function w(){let e=(0,l.useContext)(C);if(e)return e;if(typeof window>"u")return we;throw new Error("[router-next] useRouter must be used within <Router>")}function E(){let e=w().params;return(0,s.createMemo)(()=>e(),{},{equals:(n,t)=>JSON.stringify(n)===JSON.stringify(t)})}function Pe(){return(0,l.useContext)(X)??{}}function Ae(e){let n=E();return(0,s.createMemo)(()=>n()[e])}function Se(e,n){let t=E();return(0,s.createMemo)(()=>e(t()),void 0,n?{equals:n}:void 0)}function Oe(e){let n=k();return(0,s.createMemo)(()=>(0,m.matchPath)(typeof e=="function"?e():e,n.pathname))}function Le(){let e=k(),n=Q();return[(0,s.createMemo)(()=>e.query),(r,a)=>{let i=new URLSearchParams(e.search);for(let[d,p]of Object.entries(r))p===null?i.delete(d):i.set(d,p);let c=i.toString();n(e.pathname+(c?`?${c}`:""),a)}]}function Ee(e,n){let t=(o,r)=>(0,B.deepEqual)(o,r);return n!==void 0?(0,s.createMemo)(()=>(0,q.get)(e(),n),void 0,{equals:t}):(0,s.createMemo)(e,void 0,{equals:t})}function k(){let{location:e}=w();return new Proxy({},{get:(n,t)=>e()[t],has:(n,t)=>t in e(),ownKeys:()=>Reflect.ownKeys(e()),getOwnPropertyDescriptor:(n,t)=>Object.getOwnPropertyDescriptor(e(),t)})}function ke(e={}){let n=(0,l.useContext)(C);return t=>{if(!n||t.defaultPrevented||t.button!==0||t.metaKey||t.ctrlKey||t.shiftKey||t.altKey)return;let r=t.target?.closest?.("a");if(!r||!r.getAttribute("href")||r.target&&r.target!=="_self"||r.hasAttribute("download")||/(^|\s)external(\s|$)/.test(r.getAttribute("rel")??""))return;let a=new URL(r.href);a.protocol!=="http:"&&a.protocol!=="https:"||a.origin===window.location.origin&&(a.hash&&a.pathname===window.location.pathname&&a.search===window.location.search||e.shouldNavigate&&!e.shouldNavigate(a,r)||(t.preventDefault(),n.router.navigate(a.pathname+a.search+a.hash,{replace:e.replace})))}}function Q(){let{router:e}=w();return(n,t)=>e.navigate(n,t)}function De(){return(0,l.useContext)(Y)??(()=>{})}var y=e=>typeof e=="function"?e():e,Me=new Set(["href","slot","class","className","active","activeClass","replace","children"]);function Z(e){let n=(0,l.useContext)(C),t=typeof document>"u",o=()=>n?.router.navigate(y(e.href)??"",{replace:y(e.replace)}),r=(0,u.createNativeElement)("a");(0,u.setAttribute)(r,"href",y(e.href)??""),e.slot&&(0,u.setAttribute)(r,"slot",y(e.slot));for(let i of Object.keys(e)){if(Me.has(i))continue;let c=e[i];c!=null&&typeof c!="function"&&(0,u.setAttribute)(r,i,String(c))}if(typeof r.addEventListener=="function")r.addEventListener("click",i=>{i.metaKey||i.ctrlKey||i.shiftKey||i.altKey||(i.preventDefault(),o())});else{let i=y(e.className??e.class)??"";i&&(0,u.setAttribute)(r,"class",i)}typeof r.addEventListener=="function"&&(0,s.createEffect)(()=>{let i=y(e.href)??"";r.setAttribute("href",i);let c=y(e.className??e.class)??"",d=y(e.activeClass)??"",p=y(e.active)??n?.location().pathname===i;r.className=[c,p?d:""].filter(Boolean).join(" ")});let a=e.children;return a!=null&&(0,u.insert)(r,a),r}var Ne=Z;function _e(e){let n=e.action,t=e.className??e.class,o=n.url??"",r=(0,u.createNativeElement)("form");(0,u.setAttribute)(r,"method","post"),o&&(0,u.setAttribute)(r,"action",o),t&&(0,u.setAttribute)(r,"class",t);for(let i of Object.keys(e)){if(i==="action"||i==="children"||i==="class"||i==="className")continue;let c=e[i];c!=null&&typeof c!="function"&&(0,u.setAttribute)(r,i,String(c))}typeof r.addEventListener=="function"&&r.addEventListener("submit",i=>{i.preventDefault();let c={};new FormData(r).forEach((d,p)=>{c[p]=d}),Promise.resolve(n(c)).catch(()=>{})});let a=e.children;return a!=null&&(0,u.insert)(r,a),r}async function He(e,n){let t=(0,m.matchRoutes)(e,n);if(!t)return;let o=[];for(let r of t.matched){let a=r.component;a&&typeof a.preload=="function"&&o.push(a.preload())}await Promise.all(o)}
@@ -94,6 +94,39 @@ export declare function select<T, K extends string = never>(source: () => T, key
94
94
  * subscribes to location changes. Matches the old router's useLocation().
95
95
  */
96
96
  export declare function useLocation(): RouterLocation;
97
+ export interface LinkNavigationOptions {
98
+ /** Replace the current history entry instead of pushing a new one. */
99
+ replace?: boolean;
100
+ /**
101
+ * Called with the resolved URL before navigating. Return false to leave the click
102
+ * alone — for a section of the app that must load as a document (a different
103
+ * bundle, a server-rendered admin area, a file route).
104
+ */
105
+ shouldNavigate?: (url: URL, anchor: HTMLAnchorElement) => boolean;
106
+ }
107
+ /**
108
+ * A delegated click handler that turns plain `<a>` elements into client-side navigations.
109
+ *
110
+ * `<Link>` covers the links an app writes as JSX. This covers the ones it doesn't own:
111
+ * markdown or CMS HTML dropped in through `innerHTML`, where there is no component to
112
+ * bind to and the anchors arrive as prerendered text. Put it on the container and every
113
+ * link inside it navigates without reloading the document:
114
+ *
115
+ * ```tsx
116
+ * const onClick = useLinkNavigation();
117
+ * <article onClick={onClick} innerHTML={doc.html} />
118
+ * ```
119
+ *
120
+ * The anchors stay real anchors — middle-click, right-click → open in new tab, "copy
121
+ * link address" and crawlers all keep working, because the element is untouched and only
122
+ * a plain left-click is intercepted.
123
+ *
124
+ * Left alone: modified clicks, anything but the primary button, an already-prevented
125
+ * event, `target`, `download`, `rel="external"`, a non-http scheme (`mailto:`, `tel:`),
126
+ * another origin, and a hash pointing inside the current page — that last one is the
127
+ * browser's scroll, and hijacking it breaks in-page anchors.
128
+ */
129
+ export declare function useLinkNavigation(options?: LinkNavigationOptions): (event: MouseEvent) => void;
97
130
  export declare function useNavigate(): (to: string, options?: NavigateOptions) => void;
98
131
  /**
99
132
  * The resolved data for the nearest route that declared a `data` loader. Always
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/lib/router-next/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/lib/router-next/index.ts"],"names":[],"mappings":"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"}
@@ -317,6 +317,60 @@ export function useLocation() {
317
317
  getOwnPropertyDescriptor: (_t, key) => Object.getOwnPropertyDescriptor(location(), key),
318
318
  });
319
319
  }
320
+ /**
321
+ * A delegated click handler that turns plain `<a>` elements into client-side navigations.
322
+ *
323
+ * `<Link>` covers the links an app writes as JSX. This covers the ones it doesn't own:
324
+ * markdown or CMS HTML dropped in through `innerHTML`, where there is no component to
325
+ * bind to and the anchors arrive as prerendered text. Put it on the container and every
326
+ * link inside it navigates without reloading the document:
327
+ *
328
+ * ```tsx
329
+ * const onClick = useLinkNavigation();
330
+ * <article onClick={onClick} innerHTML={doc.html} />
331
+ * ```
332
+ *
333
+ * The anchors stay real anchors — middle-click, right-click → open in new tab, "copy
334
+ * link address" and crawlers all keep working, because the element is untouched and only
335
+ * a plain left-click is intercepted.
336
+ *
337
+ * Left alone: modified clicks, anything but the primary button, an already-prevented
338
+ * event, `target`, `download`, `rel="external"`, a non-http scheme (`mailto:`, `tel:`),
339
+ * another origin, and a hash pointing inside the current page — that last one is the
340
+ * browser's scroll, and hijacking it breaks in-page anchors.
341
+ */
342
+ export function useLinkNavigation(options = {}) {
343
+ const ctx = useContext(RouterContext);
344
+ return (event) => {
345
+ if (!ctx || event.defaultPrevented || event.button !== 0)
346
+ return;
347
+ if (event.metaKey || event.ctrlKey || event.shiftKey || event.altKey)
348
+ return;
349
+ const target = event.target;
350
+ const anchor = target?.closest?.('a');
351
+ if (!anchor || !anchor.getAttribute('href'))
352
+ return;
353
+ if (anchor.target && anchor.target !== '_self')
354
+ return;
355
+ if (anchor.hasAttribute('download'))
356
+ return;
357
+ if (/(^|\s)external(\s|$)/.test(anchor.getAttribute('rel') ?? ''))
358
+ return;
359
+ // `anchor.href` is resolved against the document, so a relative `./guide` from
360
+ // prerendered markdown lands on the right absolute path.
361
+ const url = new URL(anchor.href);
362
+ if (url.protocol !== 'http:' && url.protocol !== 'https:')
363
+ return;
364
+ if (url.origin !== window.location.origin)
365
+ return;
366
+ if (url.hash && url.pathname === window.location.pathname && url.search === window.location.search)
367
+ return;
368
+ if (options.shouldNavigate && !options.shouldNavigate(url, anchor))
369
+ return;
370
+ event.preventDefault();
371
+ ctx.router.navigate(url.pathname + url.search + url.hash, { replace: options.replace });
372
+ };
373
+ }
320
374
  export function useNavigate() {
321
375
  // useRouter is SSR-safe (returns a no-op stub on the server when the context is
322
376
  // detached), so navigation degrades to a no-op during SSR and only throws on
@@ -362,9 +416,14 @@ export function Link(props) {
362
416
  // the element renders unstyled. Own-props handled elsewhere are skipped:
363
417
  // href/slot above, class/className/active/activeClass in the effect, and
364
418
  // children/replace by navigation.
365
- for (const [k, v] of Object.entries(props)) {
419
+ // Keys, not entries: `Object.entries` reads every prop, and `children` is a getter
420
+ // that builds fresh nodes per access. Under hydration that discarded first build
421
+ // consumes the server's nodes, so the real read below produced a second copy of
422
+ // them — a duplicated logo and pager on every prerendered page.
423
+ for (const k of Object.keys(props)) {
366
424
  if (LINK_OWN_PROPS.has(k))
367
425
  continue;
426
+ const v = props[k];
368
427
  if (v != null && typeof v !== 'function')
369
428
  setAttribute(a, k, String(v));
370
429
  }
@@ -428,9 +487,12 @@ export function Form(props) {
428
487
  setAttribute(form, 'action', url);
429
488
  if (cls)
430
489
  setAttribute(form, 'class', cls);
431
- for (const [k, v] of Object.entries(props)) {
490
+ // Keys, not entries — same reason as Link: reading `children` here would build its
491
+ // nodes once and throw them away.
492
+ for (const k of Object.keys(props)) {
432
493
  if (k === 'action' || k === 'children' || k === 'class' || k === 'className')
433
494
  continue;
495
+ const v = props[k];
434
496
  if (v != null && typeof v !== 'function')
435
497
  setAttribute(form, k, String(v));
436
498
  }
@@ -1 +1 @@
1
- import{createSignal as P,createMemo as d,createResource as ge,createEffect as w,getOwner as xe,onCleanup as A,untrack as R}from"@fluixi/reactive/signal";import{insert as h,createComponent as j,createNativeElement as g,setAttribute as u}from"@fluixi/dom";import{createContext as v,useContext as p}from"@fluixi/reactive/signal";import{get as he}from"@fluixi/utils/object";import{deepEqual as ve}from"@fluixi/utils/compare";import{createRouter as Te,createBrowserHistory as Ce,matchRoutes as be,matchPath as Re}from"@fluixi/router";import{createMemoryHistory as Ft,createBrowserHistory as Ut,matchRoutes as It,matchPath as Kt}from"@fluixi/router";import{createResource as oe,createSignal as N}from"@fluixi/reactive/signal";var B=!1,C=new Map;function O(){return B}function E(e,n){C.set(e,n)}function L(e){return C.get(e)}function J(){C.clear()}function X(){if(typeof window>"u")return;let e=document.getElementById("__FLUIXI_HYDRATION__");e&&e.remove();let n=document.createTreeWalker(document.body,NodeFilter.SHOW_COMMENT,null),t=[],o;for(;o=n.nextNode();){let r=o,a=r.nodeValue||"";(a.startsWith("#")||a.startsWith("/"))&&t.push(r)}t.forEach(r=>r.remove()),J()}typeof window<"u"&&window.addEventListener("load",()=>{setTimeout(X,100)});function D(){return typeof window>"u"}import{asProvider as ne}from"@fluixi/dom";import{createContext as re,useContext as et}from"@fluixi/reactive/signal";import{readChildren as ot}from"@fluixi/reactive/signal";import{registerCreateComponent as Y,asComponent as G}from"@fluixi/dom";import{untrack as Q,onCleanup as _e,getOwner as He,createEffect as Ve,createMemo as je,createSignal as Fe,isSignal as Z,batch as Ue,runWithOwner as Ke,isOwnerDisposed as ze}from"@fluixi/reactive/signal";function k(e){Y(ee)}function ee(e,n){return te(e,n)}function te(e,n){let t=typeof e=="function"?Q(()=>e(n)):e;if(t!=null&&(typeof t=="function"||typeof t=="object")&&!Z(t)){try{t.$name=e.name}catch{}return G(t)}return t}k("index");function M(e){let n=re(e),t=o=>(o.debug,n.Provider({value:o.value,get children(){return o.children},debug:o.debug}));return typeof Symbol<"u"&&Symbol.for&&(t.$$typeof=Symbol.for("react.provider")),t.$$typeof=Symbol.for("react.provider"),{id:n.id,Provider:ne(t),defaultValue:e}}var m=new Map,y=new Map;function ae(e,n){return async(...t)=>{let o=n+":"+JSON.stringify(t);if(O()||typeof window<"u"){let a=L(o);if(a!==void 0)return a}if(m.has(o))return m.get(o);if(y.has(o))return y.get(o);let r=Promise.resolve(e(...t)).then(a=>(m.set(o,a),y.delete(o),D()&&E(o,a),a),a=>{throw y.delete(o),a});return y.set(o,r),r}}var[lt,ie]=N(0),se=new Set;function ce(e){let n=typeof e=="string"?t=>t.startsWith(e):e;for(let t of m.keys())n(t)&&(m.delete(t),se.add(t));ie(t=>t+1)}function ue(e,n){let[t]=oe(n||(()=>!0),e);return t}var b=new Map;function _(e){return b.has(e)||b.set(e,N(void 0)),b.get(e)}function H(e,n){let t=n||e.name||"action",o=async r=>{let[,a]=_(t),i=()=>a(void 0),s=()=>o(r);a({input:r,pending:!0,clear:i,retry:s});try{let c=await e(r);return a({input:r,result:c,pending:!1,clear:i,retry:s}),c}catch(c){throw a({input:r,error:c,pending:!1,clear:i,retry:s}),c}};return o.url=t,o.with=r=>H((...a)=>e(r,...a),n),o}function de(e){let[n]=_(e.url);return n}function fe(e){return e}var le=M(),pt=le.Provider;import{untrack as V,createMemo as pe,createResource as ye}from"@fluixi/reactive/signal";function me(e,n){let t,o,r;function a(){return o||(o=e().then(s=>t=s.default)),o}n?.preload&&a();let i=(s=>{if(t){let c=t;return V(()=>c(s))}if(!r){let[c]=ye(()=>a(),{transport:!1});if(r=c,c.error)throw c.error}return pe(()=>{let c=r();return c?V(()=>c(s)):void 0},void 0,{name:"lazy"})});return i.preload=()=>a().then(()=>{}),i.$lazy=!0,i.loader=e,i}import{runWithOwner as qt}from"@fluixi/reactive/signal";var T=v(),F=v(),U=v(),I=v();function Pe(e,n,t){let o,r=e.route.data;if(typeof r=="function"){let x=!1;A(()=>{x=!0});let $=xe(),[q]=ge(()=>r({params:t.params,location:t.location},$,()=>x));o=q}let a=()=>I.Provider({value:o,get children(){return U.Provider({value:e.params,get children(){return F.Provider({value:{depth:n,...t},get children(){return j(e.component,{})}})}})}});if(!o)return a();let i=o,s=()=>i.loading,[c,f]=P(R(()=>!s()));return w(()=>f(!s())),d(()=>c()?a():null)}function K(e){let n=e.depth+1,[t,o]=P(R(()=>e.matched()[n]?.component));return w(()=>{let r=e.matched()[n]?.component;o(()=>r)}),d(()=>{if(!t())return e.notFound?e.notFound():null;let a=R(()=>e.matched())[n];return Pe(a,n,{matched:e.matched,params:e.params,location:e.location})})}function we(e){return e==null?Ae():typeof e=="function"?j(e,{}):e}function Ae(){let e=g("div");u(e,"class","fx-not-found"),u(e,"role","main"),u(e,"style","min-height:60vh;display:grid;place-content:center;gap:.25rem;text-align:center;font-family:system-ui,-apple-system,sans-serif");let n=g("h1");u(n,"style","margin:0;font-size:2.5rem;font-weight:700"),h(n,"404");let t=g("p");return u(t,"style","margin:0;opacity:.7"),h(t,"This page could not be found."),e.appendChild(n),e.appendChild(t),e}function Pt(e){let n=e.history??Ce(),t=Te({routes:e.routes,base:e.base,history:n}),[o,r]=P(t.state()),a=t.subscribe(r);A(()=>{a(),t.destroy()});let i=d(()=>(o().match?.matched??[]).filter(x=>x.component)),s={router:t,location:d(()=>o().location),params:d(()=>o().match?.params??{})},c={depth:-1,matched:i,params:s.params,location:s.location,notFound:()=>we(e.notFound)},f;return T.Provider({value:s,get children(){return f??=K(c)}})}function wt(){let e=p(F);return e?K(e):null}function At(e){let n=p(T);if(!n||typeof window>"u")return null;let t=!1;return A(()=>t=!0),queueMicrotask(()=>{t||n.router.navigate(e.to,{replace:e.replace!==!1})}),null}var Se={router:{navigate:()=>{}},location:()=>({pathname:"",search:"",hash:"",query:{}}),params:()=>({})};function S(){let e=p(T);if(e)return e;if(typeof window>"u")return Se;throw new Error("[router-next] useRouter must be used within <Router>")}function z(){let e=S().params;return d(()=>e(),{},{equals:(n,t)=>JSON.stringify(n)===JSON.stringify(t)})}function St(){return p(U)??{}}function Ot(e){let n=z();return d(()=>n()[e])}function Et(e,n){let t=z();return d(()=>e(t()),void 0,n?{equals:n}:void 0)}function Lt(e){let n=W();return d(()=>Re(typeof e=="function"?e():e,n.pathname))}function Dt(){let e=W(),n=Oe();return[d(()=>e.query),(r,a)=>{let i=new URLSearchParams(e.search);for(let[c,f]of Object.entries(r))f===null?i.delete(c):i.set(c,f);let s=i.toString();n(e.pathname+(s?`?${s}`:""),a)}]}function kt(e,n){let t=(o,r)=>ve(o,r);return n!==void 0?d(()=>he(e(),n),void 0,{equals:t}):d(e,void 0,{equals:t})}function W(){let{location:e}=S();return new Proxy({},{get:(n,t)=>e()[t],has:(n,t)=>t in e(),ownKeys:()=>Reflect.ownKeys(e()),getOwnPropertyDescriptor:(n,t)=>Object.getOwnPropertyDescriptor(e(),t)})}function Oe(){let{router:e}=S();return(n,t)=>e.navigate(n,t)}function Mt(){return p(I)??(()=>{})}var l=e=>typeof e=="function"?e():e,Ee=new Set(["href","slot","class","className","active","activeClass","replace","children"]);function Le(e){let n=p(T),t=typeof document>"u",o=()=>n?.router.navigate(l(e.href)??"",{replace:l(e.replace)}),r=g("a");u(r,"href",l(e.href)??""),e.slot&&u(r,"slot",l(e.slot));for(let[i,s]of Object.entries(e))Ee.has(i)||s!=null&&typeof s!="function"&&u(r,i,String(s));if(typeof r.addEventListener=="function")r.addEventListener("click",i=>{i.metaKey||i.ctrlKey||i.shiftKey||i.altKey||(i.preventDefault(),o())});else{let i=l(e.className??e.class)??"";i&&u(r,"class",i)}typeof r.addEventListener=="function"&&w(()=>{let i=l(e.href)??"";r.setAttribute("href",i);let s=l(e.className??e.class)??"",c=l(e.activeClass)??"",f=l(e.active)??n?.location().pathname===i;r.className=[s,f?c:""].filter(Boolean).join(" ")});let a=e.children;return a!=null&&h(r,a),r}var Nt=Le;function _t(e){let n=e.action,t=e.className??e.class,o=n.url??"",r=g("form");u(r,"method","post"),o&&u(r,"action",o),t&&u(r,"class",t);for(let[i,s]of Object.entries(e))i==="action"||i==="children"||i==="class"||i==="className"||s!=null&&typeof s!="function"&&u(r,i,String(s));typeof r.addEventListener=="function"&&r.addEventListener("submit",i=>{i.preventDefault();let s={};new FormData(r).forEach((c,f)=>{s[f]=c}),Promise.resolve(n(s)).catch(()=>{})});let a=e.children;return a!=null&&h(r,a),r}async function Ht(e,n){let t=be(e,n);if(!t)return;let o=[];for(let r of t.matched){let a=r.component;a&&typeof a.preload=="function"&&o.push(a.preload())}await Promise.all(o)}export{Nt as A,_t as Form,Le as Link,wt as Outlet,At as Redirect,Pt as Router,H as action,ae as cache,ue as createAsync,Ut as createBrowserHistory,Ft as createMemoryHistory,me as lazy,Kt as matchPath,It as matchRoutes,Ht as preloadRoutes,ce as revalidate,qt as runWithOwner,kt as select,fe as useAction,St as useLevelParams,W as useLocation,Lt as useMatch,Oe as useNavigate,Ot as useParam,Et as useParamSelector,z as useParams,Mt as useRouteData,S as useRouter,Dt as useSearchParams,de as useSubmission};
1
+ import{createSignal as w,createMemo as d,createResource as ge,createEffect as P,getOwner as he,onCleanup as A,untrack as R}from"@fluixi/reactive/signal";import{insert as v,createComponent as j,createNativeElement as g,setAttribute as u}from"@fluixi/dom";import{createContext as T,useContext as p}from"@fluixi/reactive/signal";import{get as xe}from"@fluixi/utils/object";import{deepEqual as ve}from"@fluixi/utils/compare";import{createRouter as Te,createBrowserHistory as Ce,matchRoutes as be,matchPath as Re}from"@fluixi/router";import{createMemoryHistory as Ut,createBrowserHistory as Kt,matchRoutes as It,matchPath as zt}from"@fluixi/router";import{createResource as oe,createSignal as N}from"@fluixi/reactive/signal";var B=!1,C=new Map;function O(){return B}function L(e,n){C.set(e,n)}function E(e){return C.get(e)}function J(){C.clear()}function X(){if(typeof window>"u")return;let e=document.getElementById("__FLUIXI_HYDRATION__");e&&e.remove();let n=document.createTreeWalker(document.body,NodeFilter.SHOW_COMMENT,null),t=[],a;for(;a=n.nextNode();){let r=a,o=r.nodeValue||"";(o.startsWith("#")||o.startsWith("/"))&&t.push(r)}t.forEach(r=>r.remove()),J()}typeof window<"u"&&window.addEventListener("load",()=>{setTimeout(X,100)});function k(){return typeof window>"u"}import{asProvider as ne}from"@fluixi/dom";import{createContext as re,useContext as et}from"@fluixi/reactive/signal";import{readChildren as ot}from"@fluixi/reactive/signal";import{registerCreateComponent as Y,asComponent as G}from"@fluixi/dom";import{untrack as Q,onCleanup as _e,getOwner as He,createEffect as Ve,createMemo as je,createSignal as Fe,isSignal as Z,batch as Ue,runWithOwner as Ie,isOwnerDisposed as ze}from"@fluixi/reactive/signal";function D(e){Y(ee)}function ee(e,n){return te(e,n)}function te(e,n){let t=typeof e=="function"?Q(()=>e(n)):e;if(t!=null&&(typeof t=="function"||typeof t=="object")&&!Z(t)){try{t.$name=e.name}catch{}return G(t)}return t}D("index");function M(e){let n=re(e),t=a=>(a.debug,n.Provider({value:a.value,get children(){return a.children},debug:a.debug}));return typeof Symbol<"u"&&Symbol.for&&(t.$$typeof=Symbol.for("react.provider")),t.$$typeof=Symbol.for("react.provider"),{id:n.id,Provider:ne(t),defaultValue:e}}var m=new Map,y=new Map;function ae(e,n){return async(...t)=>{let a=n+":"+JSON.stringify(t);if(O()||typeof window<"u"){let o=E(a);if(o!==void 0)return o}if(m.has(a))return m.get(a);if(y.has(a))return y.get(a);let r=Promise.resolve(e(...t)).then(o=>(m.set(a,o),y.delete(a),k()&&L(a,o),o),o=>{throw y.delete(a),o});return y.set(a,r),r}}var[ft,ie]=N(0),se=new Set;function ce(e){let n=typeof e=="string"?t=>t.startsWith(e):e;for(let t of m.keys())n(t)&&(m.delete(t),se.add(t));ie(t=>t+1)}function ue(e,n){let[t]=oe(n||(()=>!0),e);return t}var b=new Map;function _(e){return b.has(e)||b.set(e,N(void 0)),b.get(e)}function H(e,n){let t=n||e.name||"action",a=async r=>{let[,o]=_(t),i=()=>o(void 0),s=()=>a(r);o({input:r,pending:!0,clear:i,retry:s});try{let c=await e(r);return o({input:r,result:c,pending:!1,clear:i,retry:s}),c}catch(c){throw o({input:r,error:c,pending:!1,clear:i,retry:s}),c}};return a.url=t,a.with=r=>H((...o)=>e(r,...o),n),a}function de(e){let[n]=_(e.url);return n}function le(e){return e}var fe=M(),pt=fe.Provider;import{untrack as V,createMemo as pe,createResource as ye}from"@fluixi/reactive/signal";function me(e,n){let t,a,r;function o(){return a||(a=e().then(s=>t=s.default)),a}n?.preload&&o();let i=(s=>{if(t){let c=t;return V(()=>c(s))}if(!r){let[c]=ye(()=>o(),{transport:!1});if(r=c,c.error)throw c.error}return pe(()=>{let c=r();return c?V(()=>c(s)):void 0},void 0,{name:"lazy"})});return i.preload=()=>o().then(()=>{}),i.$lazy=!0,i.loader=e,i}import{runWithOwner as Bt}from"@fluixi/reactive/signal";var h=T(),F=T(),U=T(),K=T();function we(e,n,t){let a,r=e.route.data;if(typeof r=="function"){let x=!1;A(()=>{x=!0});let $=he(),[q]=ge(()=>r({params:t.params,location:t.location},$,()=>x));a=q}let o=()=>K.Provider({value:a,get children(){return U.Provider({value:e.params,get children(){return F.Provider({value:{depth:n,...t},get children(){return j(e.component,{})}})}})}});if(!a)return o();let i=a,s=()=>i.loading,[c,l]=w(R(()=>!s()));return P(()=>l(!s())),d(()=>c()?o():null)}function I(e){let n=e.depth+1,[t,a]=w(R(()=>e.matched()[n]?.component));return P(()=>{let r=e.matched()[n]?.component;a(()=>r)}),d(()=>{if(!t())return e.notFound?e.notFound():null;let o=R(()=>e.matched())[n];return we(o,n,{matched:e.matched,params:e.params,location:e.location})})}function Pe(e){return e==null?Ae():typeof e=="function"?j(e,{}):e}function Ae(){let e=g("div");u(e,"class","fx-not-found"),u(e,"role","main"),u(e,"style","min-height:60vh;display:grid;place-content:center;gap:.25rem;text-align:center;font-family:system-ui,-apple-system,sans-serif");let n=g("h1");u(n,"style","margin:0;font-size:2.5rem;font-weight:700"),v(n,"404");let t=g("p");return u(t,"style","margin:0;opacity:.7"),v(t,"This page could not be found."),e.appendChild(n),e.appendChild(t),e}function wt(e){let n=e.history??Ce(),t=Te({routes:e.routes,base:e.base,history:n}),[a,r]=w(t.state()),o=t.subscribe(r);A(()=>{o(),t.destroy()});let i=d(()=>(a().match?.matched??[]).filter(x=>x.component)),s={router:t,location:d(()=>a().location),params:d(()=>a().match?.params??{})},c={depth:-1,matched:i,params:s.params,location:s.location,notFound:()=>Pe(e.notFound)},l;return h.Provider({value:s,get children(){return l??=I(c)}})}function Pt(){let e=p(F);return e?I(e):null}function At(e){let n=p(h);if(!n||typeof window>"u")return null;let t=!1;return A(()=>t=!0),queueMicrotask(()=>{t||n.router.navigate(e.to,{replace:e.replace!==!1})}),null}var Se={router:{navigate:()=>{}},location:()=>({pathname:"",search:"",hash:"",query:{}}),params:()=>({})};function S(){let e=p(h);if(e)return e;if(typeof window>"u")return Se;throw new Error("[router-next] useRouter must be used within <Router>")}function z(){let e=S().params;return d(()=>e(),{},{equals:(n,t)=>JSON.stringify(n)===JSON.stringify(t)})}function St(){return p(U)??{}}function Ot(e){let n=z();return d(()=>n()[e])}function Lt(e,n){let t=z();return d(()=>e(t()),void 0,n?{equals:n}:void 0)}function Et(e){let n=W();return d(()=>Re(typeof e=="function"?e():e,n.pathname))}function kt(){let e=W(),n=Oe();return[d(()=>e.query),(r,o)=>{let i=new URLSearchParams(e.search);for(let[c,l]of Object.entries(r))l===null?i.delete(c):i.set(c,l);let s=i.toString();n(e.pathname+(s?`?${s}`:""),o)}]}function Dt(e,n){let t=(a,r)=>ve(a,r);return n!==void 0?d(()=>xe(e(),n),void 0,{equals:t}):d(e,void 0,{equals:t})}function W(){let{location:e}=S();return new Proxy({},{get:(n,t)=>e()[t],has:(n,t)=>t in e(),ownKeys:()=>Reflect.ownKeys(e()),getOwnPropertyDescriptor:(n,t)=>Object.getOwnPropertyDescriptor(e(),t)})}function Mt(e={}){let n=p(h);return t=>{if(!n||t.defaultPrevented||t.button!==0||t.metaKey||t.ctrlKey||t.shiftKey||t.altKey)return;let r=t.target?.closest?.("a");if(!r||!r.getAttribute("href")||r.target&&r.target!=="_self"||r.hasAttribute("download")||/(^|\s)external(\s|$)/.test(r.getAttribute("rel")??""))return;let o=new URL(r.href);o.protocol!=="http:"&&o.protocol!=="https:"||o.origin===window.location.origin&&(o.hash&&o.pathname===window.location.pathname&&o.search===window.location.search||e.shouldNavigate&&!e.shouldNavigate(o,r)||(t.preventDefault(),n.router.navigate(o.pathname+o.search+o.hash,{replace:e.replace})))}}function Oe(){let{router:e}=S();return(n,t)=>e.navigate(n,t)}function Nt(){return p(K)??(()=>{})}var f=e=>typeof e=="function"?e():e,Le=new Set(["href","slot","class","className","active","activeClass","replace","children"]);function Ee(e){let n=p(h),t=typeof document>"u",a=()=>n?.router.navigate(f(e.href)??"",{replace:f(e.replace)}),r=g("a");u(r,"href",f(e.href)??""),e.slot&&u(r,"slot",f(e.slot));for(let i of Object.keys(e)){if(Le.has(i))continue;let s=e[i];s!=null&&typeof s!="function"&&u(r,i,String(s))}if(typeof r.addEventListener=="function")r.addEventListener("click",i=>{i.metaKey||i.ctrlKey||i.shiftKey||i.altKey||(i.preventDefault(),a())});else{let i=f(e.className??e.class)??"";i&&u(r,"class",i)}typeof r.addEventListener=="function"&&P(()=>{let i=f(e.href)??"";r.setAttribute("href",i);let s=f(e.className??e.class)??"",c=f(e.activeClass)??"",l=f(e.active)??n?.location().pathname===i;r.className=[s,l?c:""].filter(Boolean).join(" ")});let o=e.children;return o!=null&&v(r,o),r}var _t=Ee;function Ht(e){let n=e.action,t=e.className??e.class,a=n.url??"",r=g("form");u(r,"method","post"),a&&u(r,"action",a),t&&u(r,"class",t);for(let i of Object.keys(e)){if(i==="action"||i==="children"||i==="class"||i==="className")continue;let s=e[i];s!=null&&typeof s!="function"&&u(r,i,String(s))}typeof r.addEventListener=="function"&&r.addEventListener("submit",i=>{i.preventDefault();let s={};new FormData(r).forEach((c,l)=>{s[l]=c}),Promise.resolve(n(s)).catch(()=>{})});let o=e.children;return o!=null&&v(r,o),r}async function Vt(e,n){let t=be(e,n);if(!t)return;let a=[];for(let r of t.matched){let o=r.component;o&&typeof o.preload=="function"&&a.push(o.preload())}await Promise.all(a)}export{_t as A,Ht as Form,Ee as Link,Pt as Outlet,At as Redirect,wt as Router,H as action,ae as cache,ue as createAsync,Kt as createBrowserHistory,Ut as createMemoryHistory,me as lazy,zt as matchPath,It as matchRoutes,Vt as preloadRoutes,ce as revalidate,Bt as runWithOwner,Dt as select,le as useAction,St as useLevelParams,Mt as useLinkNavigation,W as useLocation,Et as useMatch,Oe as useNavigate,Ot as useParam,Lt as useParamSelector,z as useParams,Nt as useRouteData,S as useRouter,kt as useSearchParams,de as useSubmission};
@@ -1 +1 @@
1
- "use strict";var c=Object.defineProperty;var h=Object.getOwnPropertyDescriptor;var l=Object.getOwnPropertyNames;var n=Object.prototype.hasOwnProperty;var r=(o,a)=>{for(var t in a)c(o,t,{get:a[t],enumerable:!0})},s=(o,a,t,e)=>{if(a&&typeof a=="object"||typeof a=="function")for(let p of l(a))!n.call(o,p)&&p!==t&&c(o,p,{get:()=>a[p],enumerable:!(e=h(a,p))||e.enumerable});return o};var x=o=>s(c({},"__esModule",{value:!0}),o);var I={};r(I,{VERSION:()=>E});module.exports=x(I);var E="1.0.0-alpha.74";
1
+ "use strict";var c=Object.defineProperty;var h=Object.getOwnPropertyDescriptor;var l=Object.getOwnPropertyNames;var n=Object.prototype.hasOwnProperty;var r=(o,a)=>{for(var t in a)c(o,t,{get:a[t],enumerable:!0})},s=(o,a,t,e)=>{if(a&&typeof a=="object"||typeof a=="function")for(let p of l(a))!n.call(o,p)&&p!==t&&c(o,p,{get:()=>a[p],enumerable:!(e=h(a,p))||e.enumerable});return o};var x=o=>s(c({},"__esModule",{value:!0}),o);var I={};r(I,{VERSION:()=>E});module.exports=x(I);var E="1.0.0-alpha.76";
@@ -1,3 +1,3 @@
1
1
  /** The published version of @fluixi/core that this build came from. */
2
- export declare const VERSION = "1.0.0-alpha.74";
2
+ export declare const VERSION = "1.0.0-alpha.76";
3
3
  //# sourceMappingURL=version.generated.d.ts.map
@@ -1,3 +1,3 @@
1
1
  // GENERATED by scripts/gen-version.mjs — do not edit.
2
2
  /** The published version of @fluixi/core that this build came from. */
3
- export const VERSION = '1.0.0-alpha.74';
3
+ export const VERSION = '1.0.0-alpha.76';
@@ -1 +1 @@
1
- var a="1.0.0-alpha.74";export{a as VERSION};
1
+ var a="1.0.0-alpha.76";export{a as VERSION};