@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.
- package/dist/cdn/core.global.js +1 -1
- package/dist/src/cdn/chunk-MYXLT5LG.mjs +1 -0
- package/dist/src/cdn/core.cjs +1 -1
- package/dist/src/cdn/core.mjs +1 -1
- package/dist/src/cdn/router-next-YWV2KJP4.mjs +1 -0
- package/dist/src/index.cjs +1 -1
- package/dist/src/index.mjs +1 -1
- package/dist/src/lib/client/index.cjs +1 -1
- package/dist/src/lib/client/index.mjs +1 -1
- package/dist/src/lib/client/router-next-2FH6DRYT.mjs +1 -0
- package/dist/src/lib/core.cjs +1 -1
- package/dist/src/lib/core.d.ts +2 -2
- package/dist/src/lib/core.d.ts.map +1 -1
- package/dist/src/lib/core.js +4 -2
- package/dist/src/lib/core.mjs +1 -1
- package/dist/src/lib/index.cjs +1 -1
- package/dist/src/lib/index.mjs +1 -1
- package/dist/src/lib/plugins/index.cjs +2 -2
- package/dist/src/lib/plugins/index.d.ts +2 -0
- package/dist/src/lib/plugins/index.d.ts.map +1 -1
- package/dist/src/lib/plugins/index.js +4 -0
- package/dist/src/lib/plugins/index.mjs +2 -2
- package/dist/src/lib/render/index.cjs +1 -1
- package/dist/src/lib/render/index.mjs +1 -1
- package/dist/src/lib/render/suspense.cjs +1 -1
- package/dist/src/lib/render/suspense.d.ts.map +1 -1
- package/dist/src/lib/render/suspense.js +32 -13
- package/dist/src/lib/render/suspense.mjs +1 -1
- package/dist/src/lib/render/versions.cjs +1 -1
- package/dist/src/lib/render/versions.mjs +1 -1
- package/dist/src/lib/router-next/index.cjs +1 -1
- package/dist/src/lib/router-next/index.d.ts +33 -0
- package/dist/src/lib/router-next/index.d.ts.map +1 -1
- package/dist/src/lib/router-next/index.js +64 -2
- package/dist/src/lib/router-next/index.mjs +1 -1
- package/dist/src/version.generated.cjs +1 -1
- package/dist/src/version.generated.d.ts +1 -1
- package/dist/src/version.generated.js +1 -1
- package/dist/src/version.generated.mjs +1 -1
- package/dist/tsconfig.lib.tsbuildinfo +1 -1
- package/package.json +11 -11
- package/dist/src/cdn/chunk-GHLSTCTM.mjs +0 -1
- package/dist/src/cdn/router-next-D6BFFTFL.mjs +0 -1
- package/dist/src/lib/client/router-next-CYGMKUQN.mjs +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
import{createRoot as
|
|
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
|
|
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;
|
|
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
|
-
|
|
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
|
|
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.
|
|
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.
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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.
|
|
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 +1 @@
|
|
|
1
|
-
var a="1.0.0-alpha.
|
|
1
|
+
var a="1.0.0-alpha.76";export{a as VERSION};
|