@fluixi/core 1.0.0-alpha.83 → 1.0.0-alpha.85
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 +2 -1
- package/dist/cli/generate.cjs +4117 -292
- package/dist/cli/generate.mjs +4122 -292
- package/dist/cli/index.cjs +4117 -292
- package/dist/cli/index.mjs +4122 -292
- package/dist/cli/run.cjs +63 -1
- package/dist/cli/run.mjs +39 -1
- package/dist/src/cdn/chunk-MDJLC3PE.mjs +830 -0
- package/dist/src/cdn/core.cjs +1365 -1
- package/dist/src/cdn/core.d.ts +3 -3
- package/dist/src/cdn/core.js +3 -3
- package/dist/src/cdn/core.mjs +642 -1
- package/dist/src/cdn/router-JYFZP3EZ.mjs +70 -0
- package/dist/src/index.cjs +1280 -1
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +1 -11
- package/dist/src/index.mjs +1393 -1
- package/dist/src/jsx-dev-runtime.cjs +26 -1
- package/dist/src/jsx-dev-runtime.mjs +24 -1
- package/dist/src/jsx-runtime.cjs +26 -1
- package/dist/src/jsx-runtime.js +0 -9
- package/dist/src/jsx-runtime.mjs +24 -1
- package/dist/src/lib/client/chunk-7IUN2FLI.mjs +133 -0
- package/dist/src/lib/client/index.cjs +956 -1
- package/dist/src/lib/client/index.d.ts +17 -6
- package/dist/src/lib/client/index.d.ts.map +1 -1
- package/dist/src/lib/client/index.js +26 -19
- package/dist/src/lib/client/index.mjs +222 -1
- package/dist/src/lib/client/router-NOFEMOEH.mjs +631 -0
- package/dist/src/lib/context/context.cjs +118 -1
- package/dist/src/lib/context/context.d.ts +19 -37
- package/dist/src/lib/context/context.d.ts.map +1 -1
- package/dist/src/lib/context/context.js +8 -45
- package/dist/src/lib/context/context.mjs +99 -1
- package/dist/src/lib/context/index.cjs +120 -1
- package/dist/src/lib/context/index.mjs +99 -1
- package/dist/src/lib/control-flow.cjs +35 -1
- package/dist/src/lib/control-flow.mjs +25 -1
- package/dist/src/lib/core.cjs +1279 -1
- package/dist/src/lib/core.d.ts +0 -2
- package/dist/src/lib/core.d.ts.map +1 -1
- package/dist/src/lib/core.js +14 -48
- package/dist/src/lib/core.mjs +1393 -1
- package/dist/src/lib/env/index.cjs +60 -1
- package/dist/src/lib/env/index.d.ts +5 -5
- package/dist/src/lib/env/index.js +5 -5
- package/dist/src/lib/env/index.mjs +39 -1
- package/dist/src/lib/i18n/index.cjs +108 -1
- package/dist/src/lib/i18n/index.d.ts +31 -10
- package/dist/src/lib/i18n/index.d.ts.map +1 -1
- package/dist/src/lib/i18n/index.js +31 -10
- package/dist/src/lib/i18n/index.mjs +88 -1
- package/dist/src/lib/index.cjs +633 -1
- package/dist/src/lib/index.d.ts +0 -2
- package/dist/src/lib/index.d.ts.map +1 -1
- package/dist/src/lib/index.js +5 -11
- package/dist/src/lib/index.mjs +721 -1
- package/dist/src/lib/isomorphic.cjs +85 -1
- package/dist/src/lib/isomorphic.d.ts +41 -8
- package/dist/src/lib/isomorphic.d.ts.map +1 -1
- package/dist/src/lib/isomorphic.js +38 -5
- package/dist/src/lib/isomorphic.mjs +64 -1
- package/dist/src/lib/jsx-runtime/index.cjs +21 -1
- package/dist/src/lib/jsx-runtime/index.d.ts +1 -1
- package/dist/src/lib/jsx-runtime/index.js +1 -11
- package/dist/src/lib/jsx-runtime/index.mjs +4 -1
- package/dist/src/lib/jsx-runtime/jsx-dev-runtime.cjs +21 -1
- package/dist/src/lib/jsx-runtime/jsx-dev-runtime.mjs +4 -1
- package/dist/src/lib/plugins/fluixi-routes-plugin.cjs +302 -8
- package/dist/src/lib/plugins/fluixi-routes-plugin.d.ts +15 -1
- package/dist/src/lib/plugins/fluixi-routes-plugin.d.ts.map +1 -1
- package/dist/src/lib/plugins/fluixi-routes-plugin.js +19 -5
- package/dist/src/lib/plugins/fluixi-routes-plugin.mjs +271 -8
- package/dist/src/lib/plugins/index.cjs +311 -8
- package/dist/src/lib/plugins/index.mjs +279 -8
- package/dist/src/lib/plugins/route-codegen.cjs +73 -8
- package/dist/src/lib/plugins/route-codegen.d.ts +0 -1
- package/dist/src/lib/plugins/route-codegen.d.ts.map +1 -1
- package/dist/src/lib/plugins/route-codegen.js +4 -5
- package/dist/src/lib/plugins/route-codegen.mjs +52 -8
- package/dist/src/lib/plugins/route-scanner.cjs +189 -1
- package/dist/src/lib/plugins/route-scanner.d.ts +1 -2
- package/dist/src/lib/plugins/route-scanner.d.ts.map +1 -1
- package/dist/src/lib/plugins/route-scanner.js +7 -8
- package/dist/src/lib/plugins/route-scanner.mjs +158 -1
- package/dist/src/lib/plugins/vite.cjs +27 -1
- package/dist/src/lib/plugins/vite.mjs +6 -1
- package/dist/src/lib/render/await.cjs +38 -1
- package/dist/src/lib/render/await.d.ts +18 -0
- package/dist/src/lib/render/await.d.ts.map +1 -1
- package/dist/src/lib/render/await.js +20 -2
- package/dist/src/lib/render/await.mjs +17 -1
- package/dist/src/lib/render/component.cjs +221 -1
- package/dist/src/lib/render/component.d.ts +3 -44
- package/dist/src/lib/render/component.d.ts.map +1 -1
- package/dist/src/lib/render/component.js +23 -55
- package/dist/src/lib/render/component.mjs +214 -1
- package/dist/src/lib/render/deferred.cjs +175 -1
- package/dist/src/lib/render/deferred.js +5 -5
- package/dist/src/lib/render/deferred.mjs +158 -1
- package/dist/src/lib/render/index.cjs +573 -1
- package/dist/src/lib/render/index.d.ts +3 -17
- package/dist/src/lib/render/index.d.ts.map +1 -1
- package/dist/src/lib/render/index.js +8 -22
- package/dist/src/lib/render/index.mjs +590 -1
- package/dist/src/lib/render/lazy.cjs +67 -1
- package/dist/src/lib/render/lazy.d.ts +22 -1
- package/dist/src/lib/render/lazy.d.ts.map +1 -1
- package/dist/src/lib/render/lazy.js +26 -5
- package/dist/src/lib/render/lazy.mjs +50 -1
- package/dist/src/lib/render/suspense.cjs +141 -1
- package/dist/src/lib/render/suspense.d.ts +40 -0
- package/dist/src/lib/render/suspense.d.ts.map +1 -1
- package/dist/src/lib/render/suspense.js +46 -6
- package/dist/src/lib/render/suspense.mjs +136 -1
- package/dist/src/lib/render/versions.cjs +35 -1
- package/dist/src/lib/render/versions.js +6 -6
- package/dist/src/lib/render/versions.mjs +14 -1
- package/dist/src/lib/router/data.cjs +230 -1
- package/dist/src/lib/router/data.d.ts +1 -13
- package/dist/src/lib/router/data.d.ts.map +1 -1
- package/dist/src/lib/router/data.js +0 -12
- package/dist/src/lib/router/data.mjs +214 -1
- package/dist/src/lib/router/index.cjs +709 -1
- package/dist/src/lib/router/index.d.ts +78 -23
- package/dist/src/lib/router/index.d.ts.map +1 -1
- package/dist/src/lib/router/index.js +161 -37
- package/dist/src/lib/router/index.mjs +722 -1
- package/dist/src/lib/router/transition.cjs +75 -0
- package/dist/src/lib/router/transition.d.ts +81 -0
- package/dist/src/lib/router/transition.d.ts.map +1 -0
- package/dist/src/lib/router/transition.js +136 -0
- package/dist/src/lib/router/transition.mjs +54 -0
- package/dist/src/lib/server/hydration.cjs +169 -1
- package/dist/src/lib/server/hydration.d.ts +15 -55
- package/dist/src/lib/server/hydration.d.ts.map +1 -1
- package/dist/src/lib/server/hydration.js +23 -62
- package/dist/src/lib/server/hydration.mjs +148 -1
- package/dist/src/lib/server/index.cjs +401 -11
- package/dist/src/lib/server/index.d.ts +30 -6
- package/dist/src/lib/server/index.d.ts.map +1 -1
- package/dist/src/lib/server/index.js +34 -11
- package/dist/src/lib/server/index.mjs +379 -11
- package/dist/src/lib/server/reactive.cjs +197 -1
- package/dist/src/lib/server/reactive.d.ts +18 -77
- package/dist/src/lib/server/reactive.d.ts.map +1 -1
- package/dist/src/lib/server/reactive.js +19 -78
- package/dist/src/lib/server/reactive.mjs +176 -1
- package/dist/src/lib/theme/index.cjs +110 -1
- package/dist/src/lib/theme/index.d.ts +19 -4
- package/dist/src/lib/theme/index.d.ts.map +1 -1
- package/dist/src/lib/theme/index.js +17 -2
- package/dist/src/lib/theme/index.mjs +89 -1
- package/dist/src/lib/utils/index.cjs +209 -1
- package/dist/src/lib/utils/index.d.ts +0 -93
- package/dist/src/lib/utils/index.d.ts.map +1 -1
- package/dist/src/lib/utils/index.js +0 -93
- package/dist/src/lib/utils/index.mjs +188 -1
- package/dist/src/routes.cjs +37 -1
- package/dist/src/routes.d.ts +1 -1
- package/dist/src/routes.js +2 -2
- package/dist/src/routes.mjs +17 -1
- package/dist/src/server.cjs +400 -11
- package/dist/src/server.d.ts +0 -1
- package/dist/src/server.d.ts.map +1 -1
- package/dist/src/server.js +0 -1
- package/dist/src/server.mjs +377 -11
- package/dist/src/utils.cjs +21 -1
- package/dist/src/utils.d.ts +1 -1
- package/dist/src/utils.js +1 -1
- package/dist/src/utils.mjs +4 -1
- package/dist/src/version.generated.cjs +26 -1
- package/dist/src/version.generated.d.ts +1 -1
- package/dist/src/version.generated.js +2 -2
- package/dist/src/version.generated.mjs +5 -1
- package/dist/tsconfig.lib.tsbuildinfo +1 -1
- package/package.json +17 -16
- package/src/index.ts +2 -14
- package/dist/src/cdn/chunk-55BT3H6E.mjs +0 -1
- package/dist/src/cdn/router-5JJZBK4E.mjs +0 -1
- package/dist/src/lib/client/chunk-SM4WHBOP.mjs +0 -1
- package/dist/src/lib/client/router-IBD4WPQT.mjs +0 -1
package/dist/src/index.cjs
CHANGED
|
@@ -1 +1,1280 @@
|
|
|
1
|
-
"use strict";var te=Object.defineProperty;var ot=Object.getOwnPropertyDescriptor;var it=Object.getOwnPropertyNames;var st=Object.prototype.hasOwnProperty;var at=(e,t)=>{for(var r in t)te(e,r,{get:t[r],enumerable:!0})},ct=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of it(t))!st.call(e,i)&&i!==r&&te(e,i,{get:()=>t[i],enumerable:!(n=ot(t,i))||n.enumerable});return e};var ut=e=>ct(te({},"__esModule",{value:!0}),e);var _t={};at(_t,{$component:()=>oe,Await:()=>ge,ClientOnly:()=>g.ClientOnly,Dynamic:()=>g.Dynamic,ErrorBoundary:()=>g.ErrorBoundary,FRAMEWORK_NAME:()=>tt,For:()=>g.For,Index:()=>g.Index,Island:()=>T.Island,Link:()=>Q,Match:()=>g.Match,NoSsr:()=>g.NoSsr,Portal:()=>g.Portal,Router:()=>Y,Show:()=>g.Show,Store:()=>R.Store,Suspense:()=>j,SuspenseList:()=>pe,Switch:()=>g.Switch,VERSION:()=>U,addClass:()=>c.addClass,appendChildren:()=>c.appendChildren,batch:()=>a.batch,classMap:()=>T.classMap,cleanupDelegation:()=>Ke,clientOnly:()=>Ge,closest:()=>c.closest,composeProviders:()=>xe,createComponent:()=>F,createComputed:()=>a.createComputed,createConsumer:()=>We,createContext:()=>O,createContextWithProvider:()=>ze,createDebounce:()=>S.createDebounce,createDebouncedResource:()=>S.createDebouncedResource,createDebouncedSignal:()=>S.createDebouncedSignal,createDeferred:()=>a.createDeferred,createEffect:()=>a.createEffect,createIsomorphicState:()=>ve,createIsomorphicStore:()=>Xe,createMemo:()=>a.createMemo,createMemoryStorage:()=>Ce,createProvider:()=>B,createRenderEffect:()=>a.createRenderEffect,createResource:()=>a.createResource,createRoot:()=>a.createRoot,createSelector:()=>S.createSelector,createSignal:()=>a.createSignal,createStore:()=>R.createStore,createTheme:()=>Qe,default:()=>nt,deferred:()=>ye,delegate:()=>c.delegate,domCreateElement:()=>c.createElement,effect:()=>a.effect,env:()=>H,getAttribute:()=>c.getAttribute,getOffset:()=>c.getOffset,getOwner:()=>a.getOwner,getStyle:()=>c.getStyle,hasClass:()=>c.hasClass,html:()=>ee.html,hydrateIslands:()=>T.hydrateIslands,initDelegation:()=>je,isClient:()=>Te,isJSXElement:()=>le,isLitResult:()=>fe,isNode:()=>de,isRenderable:()=>Ve,isServer:()=>be.isServer,isVisible:()=>c.isVisible,lazy:()=>D,memo:()=>a.memo,mergeProps:()=>T.mergeProps,observeIntersection:()=>c.observeIntersection,observeResize:()=>c.observeResize,onCleanup:()=>a.onCleanup,onMount:()=>_,onUnmount:()=>V,portal:()=>_e,query:()=>c.query,queryAll:()=>c.queryAll,read:()=>N.readSignal,reduce:()=>N.reduceSignal,removeAttribute:()=>c.removeAttribute,removeChildren:()=>c.removeChildren,removeClass:()=>c.removeClass,render:()=>he,resource:()=>a.resource,runWithOwner:()=>a.runWithOwner,scrollIntoView:()=>c.scrollIntoView,setAttribute:()=>c.setAttribute,setOwner:()=>a.setOwner,setStyles:()=>c.setStyles,signal:()=>a.signal,splitProps:()=>T.splitProps,storage:()=>K,styleMap:()=>T.styleMap,svg:()=>ee.svg,toggleClass:()=>c.toggleClass,untrack:()=>a.untrack,untrackStore:()=>R.untrackStore,unwrap:()=>R.unwrap,useCallback:()=>ue,useContext:()=>L,useEffect:()=>z,useEventListener:()=>ce,useLocation:()=>et,useMemo:()=>ie,useNavigate:()=>G,useParams:()=>Ze,useProvide:()=>qe,useReducer:()=>ae,useRef:()=>se,useRouter:()=>E,waitForElement:()=>c.waitForElement});module.exports=ut(_t);var U="1.0.0-alpha.83";var a=require("@fluixi/reactive/signal"),S=require("@fluixi/reactive/signal"),N=require("@fluixi/reactive/operators");var q=require("@fluixi/dom"),Fe=require("@fluixi/reactive/signal");var Ae=require("@fluixi/dom");var A=require("@fluixi/dom");(0,Ae.registerCoreVersion)(U);var k=require("@fluixi/dom");var re=require("@fluixi/dom"),$=require("@fluixi/dom"),f=require("@fluixi/reactive/signal");var ne=Symbol.for("fluixi-lifecycle");function ke(){let e=(0,f.getOwner)();if(!e)return null;if(!e[ne]){let t={mounts:[],effects:[],scheduled:!1};e[ne]=t}return e[ne]}function Oe(e){if(e.scheduled)return;if((0,re.isServer)()){e.mounts=[],e.effects=[];return}e.scheduled=!0;let t=(0,f.getOwner)();queueMicrotask(()=>{if((0,f.isOwnerDisposed)(t)){e.mounts=[],e.effects=[];return}(0,f.runWithOwner)(t,()=>{for(let r of e.mounts)try{let n=r();typeof n=="function"&&(0,f.onCleanup)(n)}catch(n){console.error("Error in onMount callback:",n)}for(let r of e.effects){let n;(0,f.createEffect)(()=>{n&&n(),n=r()}),(0,f.onCleanup)(()=>{n&&n()})}e.mounts=[],e.effects=[]})})}function F(e,t){return(0,$.createComponent)(e,t)}function oe(e,t){let r=typeof e=="function"?(0,f.untrack)(()=>e(t)):e,n=r!=null&&(typeof r=="function"||typeof r=="object");if(n)try{r.$name=e.name}catch{}return n&&!(0,f.isSignal)(r)?(0,$.asComponent)(r):r}function _(e,t=!0){if((0,re.isServer)())return;let r=ke();if(r){if(!t){r.scheduled||e();return}r.mounts.push(e),Oe(r)}else{if(!t){e();return}(0,f.createEffect)(()=>{let n=(0,f.untrack)(e);typeof n=="function"&&(0,f.onCleanup)(n)})}}function V(e){(0,f.onCleanup)(e)}function z(e){let t=ke();if(t)t.effects.push(e),Oe(t);else{let r;(0,f.createEffect)(()=>{r&&r(),r=e()}),(0,f.onCleanup)(()=>{r&&r()})}}function ie(e){return(0,f.createMemo)(e)}function se(e){let t={current:e};return(0,f.onCleanup)(()=>{t.current=null}),t}function ae(e,t){let[r,n]=(0,f.createSignal)(t);return[r,o=>{n(e(r(),o))}]}function ce(e,t,r,n){z(()=>{let i=e&&"current"in e?e.current:e;if(i)return i.addEventListener(t,r,n),()=>{i.removeEventListener(t,r,n)}})}function ue(e){return e}var m=require("@fluixi/reactive/signal"),C=require("@fluixi/dom");function de(e){return typeof window>"u"?!1:typeof Node=="function"&&e instanceof Node?!0:!!(e&&typeof e=="object"&&typeof e.nodeType=="number")}function fe(e){return!e||typeof e!="object"?!1:!!(typeof e._$litType$<"u"||typeof e._$litDirective$<"u"||Array.isArray(e.strings)&&Array.isArray(e.values))}function Le(e){return!!(e&&typeof e=="object"&&typeof e.then=="function"||e instanceof Promise)}function le(e){return!!(e&&typeof e=="object"&&"type"in e&&"props"in e)}var Ee=(0,m.createContext)(void 0,"suspense-list");function j(e){return(0,C.createComponent)(dt,e)}function dt(e){let t=(0,m.createSuspenseBoundary)(),r=(0,m.useContext)(Ee),n=r?r.register(t.inFallback):void 0;function i(l){return l==null||typeof l=="boolean"?null:typeof l=="function"&&(0,C.isComponent)(l)&&!(0,m.isSignal)(l)?l():l}let o=(0,C.runWithoutHydration)(()=>i(e.fallback??null)),s=(0,m.provideSuspense)(t,()=>(0,m.readChildren)(()=>e.children)),u=(l,w)=>{if(!(w>8))if(Array.isArray(l))for(let Re of l)u(Re,w+1);else typeof l=="function"&&(0,m.isSignal)(l)&&u(l(),w+1)};(0,m.provideSuspense)(t,()=>{(0,m.createRenderEffect)(()=>u(s,0))});let[d,h]=(0,m.createSignal)(void 0),v=Le(s);return v&&(t.increment(),s.then(l=>{h(()=>l),t.decrement()},()=>t.decrement())),(0,m.createMemo)(()=>(n?n.showFallback():t.inFallback())?o:v?d():s)}function pe(e){return(0,C.createComponent)(ft,e)}function ft(e){let{revealOrder:t="together",tail:r}=e,n=[];function i(){if(t==="together"){let s=n.every(u=>!u.inFallback());n.forEach(u=>{u.setShowContent(s),u.setShowFallback(!s)})}else{let s=t==="backwards"?[...n].reverse():n,u=!1;for(let d of s)u||d.inFallback()?(u=!0,d.setShowContent(!1),d.setShowFallback(r!=="hidden")):(d.setShowContent(!0),d.setShowFallback(!1))}}let o={register:s=>{let[u,d]=(0,m.createSignal)(!0),[h,v]=(0,m.createSignal)(!1);return n.push({inFallback:s,setShowContent:d,setShowFallback:v}),(0,m.createEffect)(()=>{s(),i()}),{showContent:u,showFallback:h}}};return Ee.Provider({value:o,children:e.children})}(0,C.asSuspense)(j);Object.defineProperty(j,"__suspense",{value:!0,enumerable:!0});var De=require("@fluixi/dom"),M=require("@fluixi/reactive/signal");function Me(e){if(e!=null&&(typeof e=="object"||typeof e=="function"))try{e.$lazy=!0}catch{}return e}function D(e,t){let r,n,i;function o(){return n||(n=e().then(u=>r=u.default)),n}t?.preload&&o();let s=(u=>{if(r){let d=r;return Me((0,M.untrack)(()=>d(u)))}if(!i){let[d]=(0,M.createResource)(()=>o(),{transport:!1});if(i=d,d.error)throw d.error}return(0,M.createMemo)(()=>{let d=i();return d?Me((0,De.createComponent)(d,u)):void 0})});return s.preload=()=>o().then(()=>{}),s.$lazy=!0,s.loader=e,s}var me=require("@fluixi/dom"),W=require("@fluixi/reactive/signal"),Ie=require("@fluixi/dom/utils");function ye(e,t){let r=t.export??"default",n=D(()=>e().then(o=>{let s=o[r];if(typeof s!="function")throw new Error(`deferred(): module has no '${r}' export (got ${typeof s}).`);return{default:s}}),{fallback:t.fallback});function i(o){if(t.strategy.kind==="never")return(0,me.isServer)()?n(o):null;if((0,me.isServer)()||t.strategy.kind==="eager")return n(o);let[s,u]=(0,W.createSignal)(!1),d=()=>{n.preload().then(()=>u(!0))},h=t.strategy.kind==="visible"?lt():void 0;return pt(t.strategy,d,h),(0,W.createMemo)(()=>s()?n(o):h??t.fallback??null,void 0,{name:"deferred"})}return i.preload=n.preload,i}function lt(){let e=document.createElement("span");return e.setAttribute("data-fx-load","visible"),e.style.display="block",e}function pt(e,t,r){let n=!1,i=()=>{n||(n=!0,t())};switch(e.kind){case"idle":{let o=globalThis.requestIdleCallback;o?o(i):setTimeout(i,1);return}case"visible":{if(!r||typeof IntersectionObserver>"u"){i();return}let o=(0,Ie.observeIntersection)(r,s=>{s&&(o(),i())},{rootMargin:e.rootMargin??"0px"});return}case"interaction":{let o=()=>{for(let s of e.events)document.removeEventListener(s,o,!0);i()};for(let s of e.events)document.addEventListener(s,o,{capture:!0,passive:!0});return}case"media":{if(typeof matchMedia>"u"){i();return}let o=matchMedia(e.query);if(o.matches){i();return}let s=u=>{u.matches&&(o.removeEventListener("change",s),i())};o.addEventListener("change",s);return}default:i()}}var Ne=require("@fluixi/reactive/signal");function ge(e){let t=()=>{let n=e.value;return typeof n=="function"?n():n},[r]=(0,Ne.createResource)(t);return()=>{if(r.loading)return e.fallback;let n=e.children;return typeof n=="function"?n(r()):n}}function he(e,t,r={}){if((0,k.delegateEvents)(["click","input","change","submit"]),(0,q.isServer)())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(0,Fe.createRoot)(i=>{n=i;let o=typeof e=="function"?e():e;t.textContent="",(0,A.stampVersions)(t),(0,A.warnOnVersionSkew)(),(0,k.insert)(t,()=>o)}),()=>{n&&(n(),n=void 0)}}function mt(e){return e&&typeof e=="object"&&(e._$litType$!==void 0||e._$litDirective$!==void 0)}function _e(e,t,r={}){let n=document.createElement("div");n.setAttribute("data-portal","true"),t.appendChild(n);let i=he(e,n,r);return()=>{i(),t.contains(n)&&t.removeChild(n)}}function Ve(e){return!!(e==null||typeof e=="function"||(0,k.isDOMNode)(e)||mt(e)||Array.isArray(e)||typeof e=="string"||typeof e=="number"||typeof e=="boolean")}function je(){(0,q.isServer)()||(0,k.delegateEvents)(["click","input","change","submit"])}function Ke(){(0,q.isServer)()}var Ue=require("@fluixi/dom"),J=require("@fluixi/reactive/signal"),$e=require("@fluixi/reactive/signal"),He=!1;function yt(){He||(He=!0,!(typeof process<"u")&&console.warn("[fluixi] createProvider({ context, value, children }) reads `children` eagerly: the object literal materialises `children` BEFORE the context is stamped, so a routed <Outlet/> that has siblings inside the provider renders detached and its descendants see no context under SSR. Use the lazy form instead:\n createProvider(Context, value, props) // children stays a getter\n // or JSX: <Context.Provider value={…}>{props.children}</Context.Provider>"))}function B(e,t,r){let n=!!e?.Provider,i=n?e:e.context,o=n?t:e.value,s=n?!1:e.debug??!1;n||yt();let u=typeof o=="function"?o():o,d=n?r:e;return i.Provider({value:u,get children(){return d?.children},debug:s})}function ze(e){let t=O(e);return[t,n=>B(t,n.value,n)]}function xe(e,t){if(e.length===0)return(0,$e.readChildren)(()=>t);let[r,n]=e[0],i=e.slice(1);return B(r,n,{get children(){return xe(i,t)}})}function We(e){return t=>{let r=L(e);return t.children(r)}}function qe(e,t){let r=L(e);return r===e.defaultValue?t():r}function O(e,t){let r=(0,J.createContext)(e,t),n=i=>(i.debug,r.Provider({value:i.value,get children(){return i.children},debug:i.debug}));return typeof Symbol<"u"&&Symbol.for&&(n.$$typeof=Symbol.for("react.provider")),n.$$typeof=Symbol.for("react.provider"),{id:r.id,Provider:(0,Ue.asProvider)(n),defaultValue:e}}function L(e){let t=(0,J.useContext)(e);return t!==void 0?t:e.defaultValue}var X=require("@fluixi/reactive/signal"),Je=require("@fluixi/dom"),gt="__fluixi_iso_states__",ht="__iso:";function xt(){return globalThis[gt]??=new Map}function Be(e){if(typeof window>"u")return;let t=(0,Je.getServerData)();return t?t[ht+e]:void 0}function ve(e,t){let r=Be(e),n=r!==void 0?r:typeof window<"u"&&t.client?t.client():t.fallback,[i,o]=(0,X.createSignal)(n);return xt().set(e,{server:t.server,set:o}),{value:i,set:o,key:e}}function Xe(e,t){let r=Be(e)!==void 0,n=ve(e,{server:t.server,fallback:t.fallback}),i=()=>n.value()??t.fallback,o=l=>{if(!(!t.persist||typeof localStorage>"u"))try{localStorage.setItem(t.persist,JSON.stringify(l))}catch{}},s=l=>{n.set(l),o(l)},u=(l,w)=>{s({...i(),[l]:w})},d={};for(let l of Object.keys(t.fallback))d[l]=(0,X.createMemo)(()=>i()[l]);let h=null;return{value:i,fields:d,set:s,setField:u,ensureInit:()=>r||!t.client?Promise.resolve():(h||(h=Promise.resolve(t.client()).then(l=>{s(l)}).catch(l=>{throw h=null,l})),h),key:e}}var be=require("@fluixi/dom"),Ye=require("@fluixi/dom");function Te(){return!(0,Ye.isServer)()}function Ce(){let e=new Map;return{getItem:t=>e.has(t)?e.get(t):null,setItem:(t,r)=>{e.set(t,String(r))},removeItem:t=>{e.delete(t)},clear:()=>e.clear(),key:t=>Array.from(e.keys())[t]??null,get length(){return e.size}}}var K=typeof localStorage<"u"?localStorage:Ce(),H={get window(){return typeof window<"u"?window:void 0},get document(){return typeof document<"u"?document:void 0}};function Ge(e,t){return Te()?e():t}var Se=require("@fluixi/reactive/signal");function vt(e){return e?e===!0?{dark:"dark",light:"light"}:e:null}function Qe(e){let t=e.storageKey??"theme",r=e.attribute??"data-theme",n=vt(e.system),i=()=>{let x=K.getItem(t);return x&&e.themes.includes(x)?x:n&&H.window?.matchMedia?.("(prefers-color-scheme: dark)")?.matches?n.dark:n?n.light:e.default},[o,s]=(0,Se.createSignal)(i()),[u,d]=(0,Se.createSignal)(!1),h=x=>{H.document?.documentElement.setAttribute(r,x);try{K.setItem(t,x)}catch{}},v=x=>{if(!e.themes.includes(x))return;let rt=o();s(()=>x),h(x),e.onChange?.(x,rt),e.load&&(d(!0),e.onLoading?.(x),Promise.resolve(e.load(x)).finally(()=>{d(!1),e.onLoaded?.(x)}))};return{value:o,isLoading:u,set:v,toggle:()=>{let x=e.themes.indexOf(o());v(e.themes[(x+1)%e.themes.length])},init:()=>h(o()),headScript:()=>`<script>(function(){try{var c=${JSON.stringify({k:t,a:r,d:e.default,sys:n})},t=localStorage.getItem(c.k);if(!t&&c.sys)t=matchMedia('(prefers-color-scheme: dark)').matches?c.sys.dark:c.sys.light;if(!t)t=c.d;document.documentElement.setAttribute(c.a,t);}catch(e){}})();<\/script>`}}var p=require("@fluixi/reactive/signal"),y=require("@fluixi/dom"),P=require("@fluixi/reactive/signal"),wt=require("@fluixi/utils/object"),Pt=require("@fluixi/utils/compare"),I=require("@fluixi/router"),Z=require("@fluixi/router");var we=require("@fluixi/reactive/signal");var Tt=new Map;function Ct(){Tt.clear()}function bt(){if(typeof window>"u")return;let e=document.getElementById("__FLUIXI_HYDRATION__");e&&e.remove();let t=document.createTreeWalker(document.body,NodeFilter.SHOW_COMMENT,null),r=[],n;for(;n=t.nextNode();){let i=n,o=i.nodeValue||"";(o.startsWith("#")||o.startsWith("/"))&&r.push(i)}r.forEach(i=>i.remove()),Ct()}typeof window<"u"&&window.addEventListener("load",()=>{setTimeout(bt,100)});var[Fn,_n]=(0,we.createSignal)(0);var St=O(void 0,"route-data"),Vn=St.Provider;var Nt=require("@fluixi/reactive/signal"),Pe=(0,P.createContext)(void 0,"router"),Rt=(0,P.createContext)(void 0,"outlet"),At=(0,P.createContext)(void 0,"route-params"),kt=(0,P.createContext)(void 0,"route-data");function Ot(e,t,r){let n,i=e.route.data;if(typeof i=="function"){let v=!1;(0,p.onCleanup)(()=>{v=!0});let l=(0,p.getOwner)(),[w]=(0,p.createResource)(()=>i({params:r.params,location:r.location},l,()=>v));n=w}let o=()=>kt.Provider({value:n,get children(){return At.Provider({value:e.params,get children(){return Rt.Provider({value:{depth:t,...r},get children(){return(0,y.createComponent)(e.component,{})}})}})}});if(!n)return o();let s=n,u=()=>s.loading,[d,h]=(0,p.createSignal)((0,p.untrack)(()=>!u()));return(0,p.createEffect)(()=>h(!u())),(0,p.createMemo)(()=>d()?o():null)}function Lt(e){let t=e.depth+1,[r,n]=(0,p.createSignal)((0,p.untrack)(()=>e.matched()[t]?.component));return(0,p.createEffect)(()=>{let i=e.matched()[t]?.component;n(()=>i)}),(0,p.createMemo)(()=>{if(!r())return e.notFound?e.notFound():null;let o=(0,p.untrack)(()=>e.matched())[t];return Ot(o,t,{matched:e.matched,params:e.params,location:e.location})})}function Et(e){return e==null?Mt():typeof e=="function"?(0,y.createComponent)(e,{}):e}function Mt(){let e=(0,y.createNativeElement)("div");(0,y.setAttribute)(e,"class","fx-not-found"),(0,y.setAttribute)(e,"role","main"),(0,y.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 t=(0,y.createNativeElement)("h1");(0,y.setAttribute)(t,"style","margin:0;font-size:2.5rem;font-weight:700"),(0,y.insert)(t,"404");let r=(0,y.createNativeElement)("p");return(0,y.setAttribute)(r,"style","margin:0;opacity:.7"),(0,y.insert)(r,"This page could not be found."),e.appendChild(t),e.appendChild(r),e}function Y(e){let t=e.history??(0,I.createBrowserHistory)(),r=(0,I.createRouter)({routes:e.routes,base:e.base,history:t}),[n,i]=(0,p.createSignal)(r.state()),o=r.subscribe(i);(0,p.onCleanup)(()=>{o(),r.destroy()});let s=(0,p.createMemo)(()=>(n().match?.matched??[]).filter(v=>v.component)),u={router:r,location:(0,p.createMemo)(()=>n().location),params:(0,p.createMemo)(()=>n().match?.params??{})},d={depth:-1,matched:s,params:u.params,location:u.location,notFound:()=>Et(e.notFound)},h;return Pe.Provider({value:u,get children(){return h??=Lt(d)}})}var Dt={router:{navigate:()=>{}},location:()=>({pathname:"",search:"",hash:"",query:{}}),params:()=>({})};function E(){let e=(0,P.useContext)(Pe);if(e)return e;if(typeof window>"u")return Dt;throw new Error("[router] useRouter must be used within <Router>")}function Ze(){let e=E().params;return(0,p.createMemo)(()=>e(),{},{equals:(t,r)=>JSON.stringify(t)===JSON.stringify(r)})}function et(){let{location:e}=E();return new Proxy({},{get:(t,r)=>e()[r],has:(t,r)=>r in e(),ownKeys:()=>Reflect.ownKeys(e()),getOwnPropertyDescriptor:(t,r)=>Object.getOwnPropertyDescriptor(e(),r)})}function G(){let{router:e}=E();return(t,r)=>e.navigate(t,r)}var b=e=>typeof e=="function"?e():e,It=new Set(["href","slot","class","className","active","activeClass","replace","children"]);function Q(e){let t=(0,P.useContext)(Pe),r=()=>t?.router.navigate(b(e.href)??"",{replace:b(e.replace)}),n=(0,y.createNativeElement)("a");(0,y.setAttribute)(n,"href",b(e.href)??""),e.slot&&(0,y.setAttribute)(n,"slot",b(e.slot));for(let o of Object.keys(e)){if(It.has(o))continue;let s=e[o];s!=null&&typeof s!="function"&&(0,y.setAttribute)(n,o,String(s))}if(typeof n.addEventListener=="function")n.addEventListener("click",o=>{o.metaKey||o.ctrlKey||o.shiftKey||o.altKey||(o.preventDefault(),r())});else{let o=b(e.className??e.class)??"";o&&(0,y.setAttribute)(n,"class",o)}typeof n.addEventListener=="function"&&(0,p.createEffect)(()=>{let o=b(e.href)??"";n.setAttribute("href",o);let s=b(e.className??e.class)??"",u=b(e.activeClass)??"",d=b(e.active)??t?.location().pathname===o;n.className=[s,d?u:""].filter(Boolean).join(" ")});let i=e.children;return i!=null&&(0,y.insert)(n,i),n}var ee=require("@fluixi/dom"),c=require("@fluixi/dom"),T=require("@fluixi/dom");var g=require("@fluixi/dom");var R=require("@fluixi/reactive/store"),Ft="0.0.1",tt="Fluixi";var nt={createComponent:F,onMount:_,onUnmount:V,createEffect:a.createEffect,createMemo:a.createMemo,createSignal:a.createSignal,createContext:O,createRoot:a.createRoot,createDeferred:a.createDeferred,createComputed:a.createComputed,createRenderEffect:a.createRenderEffect,createSelector:S.createSelector,onCleanup:a.onCleanup,getOwner:a.getOwner,runWithOwner:a.runWithOwner,batch:a.batch,untrack:a.untrack,useContext:L,setOwner:a.setOwner,Router:Y,Link:Q,useRouter:E,useNavigate:G,read:N.readSignal,reduce:N.reduceSignal,VERSION:Ft,FRAMEWORK_NAME:tt};
|
|
1
|
+
/*! @fluixi/core v1.0.0-alpha.85 | (c) 2026 Ibrahima Touré and Fluixi contributors | MIT */
|
|
2
|
+
"use strict";
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
7
|
+
var __export = (target, all) => {
|
|
8
|
+
for (var name in all)
|
|
9
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
10
|
+
};
|
|
11
|
+
var __copyProps = (to, from, except, desc) => {
|
|
12
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
13
|
+
for (let key of __getOwnPropNames(from))
|
|
14
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
15
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
16
|
+
}
|
|
17
|
+
return to;
|
|
18
|
+
};
|
|
19
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
20
|
+
|
|
21
|
+
// src/index.ts
|
|
22
|
+
var index_exports = {};
|
|
23
|
+
__export(index_exports, {
|
|
24
|
+
$component: () => $component,
|
|
25
|
+
Await: () => Await,
|
|
26
|
+
ClientOnly: () => import_dom16.ClientOnly,
|
|
27
|
+
Dynamic: () => import_dom16.Dynamic,
|
|
28
|
+
ErrorBoundary: () => import_dom16.ErrorBoundary,
|
|
29
|
+
FRAMEWORK_NAME: () => FRAMEWORK_NAME,
|
|
30
|
+
For: () => import_dom16.For,
|
|
31
|
+
Index: () => import_dom16.Index,
|
|
32
|
+
Island: () => import_dom19.Island,
|
|
33
|
+
Link: () => Link,
|
|
34
|
+
Match: () => import_dom16.Match,
|
|
35
|
+
NoSsr: () => import_dom16.NoSsr,
|
|
36
|
+
Portal: () => import_dom16.Portal,
|
|
37
|
+
Router: () => Router,
|
|
38
|
+
Show: () => import_dom16.Show,
|
|
39
|
+
Store: () => import_store.Store,
|
|
40
|
+
Suspense: () => Suspense,
|
|
41
|
+
SuspenseList: () => SuspenseList,
|
|
42
|
+
Switch: () => import_dom16.Switch,
|
|
43
|
+
VERSION: () => VERSION,
|
|
44
|
+
addClass: () => import_dom18.addClass,
|
|
45
|
+
appendChildren: () => import_dom18.appendChildren,
|
|
46
|
+
batch: () => import_signal15.batch,
|
|
47
|
+
classMap: () => import_dom19.classMap,
|
|
48
|
+
cleanupDelegation: () => cleanupDelegation,
|
|
49
|
+
clientOnly: () => clientOnly,
|
|
50
|
+
closest: () => import_dom18.closest,
|
|
51
|
+
composeProviders: () => composeProviders,
|
|
52
|
+
createComponent: () => createComponent,
|
|
53
|
+
createComputed: () => import_signal15.createComputed,
|
|
54
|
+
createConsumer: () => createConsumer,
|
|
55
|
+
createContext: () => createContext3,
|
|
56
|
+
createContextWithProvider: () => createContextWithProvider,
|
|
57
|
+
createDebounce: () => import_signal16.createDebounce,
|
|
58
|
+
createDebouncedResource: () => import_signal16.createDebouncedResource,
|
|
59
|
+
createDebouncedSignal: () => import_signal16.createDebouncedSignal,
|
|
60
|
+
createDeferred: () => import_signal15.createDeferred,
|
|
61
|
+
createEffect: () => import_signal15.createEffect,
|
|
62
|
+
createIsomorphicState: () => createIsomorphicState,
|
|
63
|
+
createIsomorphicStore: () => createIsomorphicStore,
|
|
64
|
+
createMemo: () => import_signal15.createMemo,
|
|
65
|
+
createMemoryStorage: () => createMemoryStorage,
|
|
66
|
+
createProvider: () => createProvider,
|
|
67
|
+
createRenderEffect: () => import_signal15.createRenderEffect,
|
|
68
|
+
createResource: () => import_signal15.createResource,
|
|
69
|
+
createRoot: () => import_signal15.createRoot,
|
|
70
|
+
createSelector: () => import_signal16.createSelector,
|
|
71
|
+
createSignal: () => import_signal15.createSignal,
|
|
72
|
+
createStore: () => import_store.createStore,
|
|
73
|
+
createTheme: () => createTheme,
|
|
74
|
+
default: () => core_default,
|
|
75
|
+
deferred: () => deferred,
|
|
76
|
+
delegate: () => import_dom18.delegate,
|
|
77
|
+
domCreateElement: () => import_dom18.createElement,
|
|
78
|
+
effect: () => import_signal15.effect,
|
|
79
|
+
env: () => env,
|
|
80
|
+
getAttribute: () => import_dom18.getAttribute,
|
|
81
|
+
getOffset: () => import_dom18.getOffset,
|
|
82
|
+
getOwner: () => import_signal15.getOwner,
|
|
83
|
+
getStyle: () => import_dom18.getStyle,
|
|
84
|
+
hasClass: () => import_dom18.hasClass,
|
|
85
|
+
html: () => import_dom17.html,
|
|
86
|
+
hydrateIslands: () => import_dom19.hydrateIslands,
|
|
87
|
+
initDelegation: () => initDelegation,
|
|
88
|
+
isClient: () => isClient,
|
|
89
|
+
isJSXElement: () => isJSXElement,
|
|
90
|
+
isLitResult: () => isLitResult,
|
|
91
|
+
isNode: () => isNode,
|
|
92
|
+
isRenderable: () => isRenderable,
|
|
93
|
+
isServer: () => import_dom12.isServer,
|
|
94
|
+
isVisible: () => import_dom18.isVisible,
|
|
95
|
+
lazy: () => lazy,
|
|
96
|
+
memo: () => import_signal15.memo,
|
|
97
|
+
mergeProps: () => import_dom19.mergeProps,
|
|
98
|
+
observeIntersection: () => import_dom18.observeIntersection,
|
|
99
|
+
observeResize: () => import_dom18.observeResize,
|
|
100
|
+
onCleanup: () => import_signal15.onCleanup,
|
|
101
|
+
onMount: () => onMount,
|
|
102
|
+
onUnmount: () => onUnmount,
|
|
103
|
+
portal: () => portal,
|
|
104
|
+
query: () => import_dom18.query,
|
|
105
|
+
queryAll: () => import_dom18.queryAll,
|
|
106
|
+
read: () => import_operators.readSignal,
|
|
107
|
+
reduce: () => import_operators.reduceSignal,
|
|
108
|
+
removeAttribute: () => import_dom18.removeAttribute,
|
|
109
|
+
removeChildren: () => import_dom18.removeChildren,
|
|
110
|
+
removeClass: () => import_dom18.removeClass,
|
|
111
|
+
render: () => render,
|
|
112
|
+
resource: () => import_signal15.resource,
|
|
113
|
+
runWithOwner: () => import_signal15.runWithOwner,
|
|
114
|
+
scrollIntoView: () => import_dom18.scrollIntoView,
|
|
115
|
+
setAttribute: () => import_dom18.setAttribute,
|
|
116
|
+
setOwner: () => import_signal15.setOwner,
|
|
117
|
+
setStyles: () => import_dom18.setStyles,
|
|
118
|
+
signal: () => import_signal15.signal,
|
|
119
|
+
splitProps: () => import_dom19.splitProps,
|
|
120
|
+
storage: () => storage,
|
|
121
|
+
styleMap: () => import_dom19.styleMap,
|
|
122
|
+
svg: () => import_dom17.svg,
|
|
123
|
+
toggleClass: () => import_dom18.toggleClass,
|
|
124
|
+
untrack: () => import_signal15.untrack,
|
|
125
|
+
untrackStore: () => import_store.untrackStore,
|
|
126
|
+
unwrap: () => import_store.unwrap,
|
|
127
|
+
useCallback: () => useCallback,
|
|
128
|
+
useContext: () => useContext3,
|
|
129
|
+
useEffect: () => useEffect,
|
|
130
|
+
useEventListener: () => useEventListener,
|
|
131
|
+
useLocation: () => useLocation,
|
|
132
|
+
useMemo: () => useMemo,
|
|
133
|
+
useNavigate: () => useNavigate,
|
|
134
|
+
useParams: () => useParams,
|
|
135
|
+
useProvide: () => useProvide,
|
|
136
|
+
useReducer: () => useReducer,
|
|
137
|
+
useRef: () => useRef,
|
|
138
|
+
useRouter: () => useRouter,
|
|
139
|
+
waitForElement: () => import_dom18.waitForElement
|
|
140
|
+
});
|
|
141
|
+
module.exports = __toCommonJS(index_exports);
|
|
142
|
+
|
|
143
|
+
// src/version.generated.ts
|
|
144
|
+
var VERSION = "1.0.0-alpha.85";
|
|
145
|
+
|
|
146
|
+
// src/lib/core.ts
|
|
147
|
+
var import_signal15 = require("@fluixi/reactive/signal");
|
|
148
|
+
var import_signal16 = require("@fluixi/reactive/signal");
|
|
149
|
+
var import_operators = require("@fluixi/reactive/operators");
|
|
150
|
+
|
|
151
|
+
// src/lib/render/index.ts
|
|
152
|
+
var import_dom8 = require("@fluixi/dom");
|
|
153
|
+
var import_signal6 = require("@fluixi/reactive/signal");
|
|
154
|
+
|
|
155
|
+
// src/lib/render/versions.ts
|
|
156
|
+
var import_dom = require("@fluixi/dom");
|
|
157
|
+
var import_dom2 = require("@fluixi/dom");
|
|
158
|
+
(0, import_dom.registerCoreVersion)(VERSION);
|
|
159
|
+
|
|
160
|
+
// src/lib/render/index.ts
|
|
161
|
+
var import_dom9 = require("@fluixi/dom");
|
|
162
|
+
|
|
163
|
+
// src/lib/render/component.ts
|
|
164
|
+
var import_dom3 = require("@fluixi/dom");
|
|
165
|
+
var import_dom4 = require("@fluixi/dom");
|
|
166
|
+
var import_signal = require("@fluixi/reactive/signal");
|
|
167
|
+
var _LIFECYCLE = /* @__PURE__ */ Symbol.for("fluixi-lifecycle");
|
|
168
|
+
function getOwnerLifecycle() {
|
|
169
|
+
const owner = (0, import_signal.getOwner)();
|
|
170
|
+
if (!owner) return null;
|
|
171
|
+
if (!owner[_LIFECYCLE]) {
|
|
172
|
+
const lc = { mounts: [], effects: [], scheduled: false };
|
|
173
|
+
owner[_LIFECYCLE] = lc;
|
|
174
|
+
}
|
|
175
|
+
return owner[_LIFECYCLE];
|
|
176
|
+
}
|
|
177
|
+
function scheduleLifecycleFlush(lc) {
|
|
178
|
+
if (lc.scheduled) return;
|
|
179
|
+
if ((0, import_dom3.isServer)()) {
|
|
180
|
+
lc.mounts = [];
|
|
181
|
+
lc.effects = [];
|
|
182
|
+
return;
|
|
183
|
+
}
|
|
184
|
+
lc.scheduled = true;
|
|
185
|
+
const owner = (0, import_signal.getOwner)();
|
|
186
|
+
queueMicrotask(() => {
|
|
187
|
+
if ((0, import_signal.isOwnerDisposed)(owner)) {
|
|
188
|
+
lc.mounts = [];
|
|
189
|
+
lc.effects = [];
|
|
190
|
+
return;
|
|
191
|
+
}
|
|
192
|
+
(0, import_signal.runWithOwner)(owner, () => {
|
|
193
|
+
for (const cb of lc.mounts) {
|
|
194
|
+
try {
|
|
195
|
+
const cleanup = cb();
|
|
196
|
+
if (typeof cleanup === "function") {
|
|
197
|
+
(0, import_signal.onCleanup)(cleanup);
|
|
198
|
+
}
|
|
199
|
+
} catch (e) {
|
|
200
|
+
console.error("Error in onMount callback:", e);
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
for (const cb of lc.effects) {
|
|
204
|
+
let cleanup;
|
|
205
|
+
(0, import_signal.createEffect)(() => {
|
|
206
|
+
if (cleanup) cleanup();
|
|
207
|
+
cleanup = cb();
|
|
208
|
+
});
|
|
209
|
+
(0, import_signal.onCleanup)(() => {
|
|
210
|
+
if (cleanup) cleanup();
|
|
211
|
+
});
|
|
212
|
+
}
|
|
213
|
+
lc.mounts = [];
|
|
214
|
+
lc.effects = [];
|
|
215
|
+
});
|
|
216
|
+
});
|
|
217
|
+
}
|
|
218
|
+
function createComponent(Comp, props) {
|
|
219
|
+
return (0, import_dom4.createComponent)(Comp, props);
|
|
220
|
+
}
|
|
221
|
+
function $component(value, props) {
|
|
222
|
+
const component = typeof value === "function" ? (0, import_signal.untrack)(() => value(props)) : value;
|
|
223
|
+
const nameable = component != null && (typeof component === "function" || typeof component === "object");
|
|
224
|
+
if (nameable) {
|
|
225
|
+
try {
|
|
226
|
+
component["$name"] = value.name;
|
|
227
|
+
} catch {
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
if (nameable && !(0, import_signal.isSignal)(component)) {
|
|
231
|
+
return (0, import_dom4.asComponent)(component);
|
|
232
|
+
}
|
|
233
|
+
return component;
|
|
234
|
+
}
|
|
235
|
+
function onMount(fn, reactive = true) {
|
|
236
|
+
if ((0, import_dom3.isServer)()) return;
|
|
237
|
+
const lc = getOwnerLifecycle();
|
|
238
|
+
if (lc) {
|
|
239
|
+
if (!reactive) {
|
|
240
|
+
if (!lc.scheduled) {
|
|
241
|
+
fn();
|
|
242
|
+
}
|
|
243
|
+
return;
|
|
244
|
+
}
|
|
245
|
+
lc.mounts.push(fn);
|
|
246
|
+
scheduleLifecycleFlush(lc);
|
|
247
|
+
} else {
|
|
248
|
+
if (!reactive) {
|
|
249
|
+
fn();
|
|
250
|
+
return;
|
|
251
|
+
}
|
|
252
|
+
(0, import_signal.createEffect)(() => {
|
|
253
|
+
const cleanup = (0, import_signal.untrack)(fn);
|
|
254
|
+
if (typeof cleanup === "function") {
|
|
255
|
+
(0, import_signal.onCleanup)(cleanup);
|
|
256
|
+
}
|
|
257
|
+
});
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
function onUnmount(fn) {
|
|
261
|
+
(0, import_signal.onCleanup)(fn);
|
|
262
|
+
}
|
|
263
|
+
function useEffect(callback) {
|
|
264
|
+
const lc = getOwnerLifecycle();
|
|
265
|
+
if (lc) {
|
|
266
|
+
lc.effects.push(callback);
|
|
267
|
+
scheduleLifecycleFlush(lc);
|
|
268
|
+
} else {
|
|
269
|
+
let cleanup;
|
|
270
|
+
(0, import_signal.createEffect)(() => {
|
|
271
|
+
if (cleanup) cleanup();
|
|
272
|
+
cleanup = callback();
|
|
273
|
+
});
|
|
274
|
+
(0, import_signal.onCleanup)(() => {
|
|
275
|
+
if (cleanup) cleanup();
|
|
276
|
+
});
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
function useMemo(fn) {
|
|
280
|
+
return (0, import_signal.createMemo)(fn);
|
|
281
|
+
}
|
|
282
|
+
function useRef(initialValue) {
|
|
283
|
+
const ref = { current: initialValue };
|
|
284
|
+
(0, import_signal.onCleanup)(() => {
|
|
285
|
+
ref.current = null;
|
|
286
|
+
});
|
|
287
|
+
return ref;
|
|
288
|
+
}
|
|
289
|
+
function useReducer(reducer, initialState) {
|
|
290
|
+
const [state, setState] = (0, import_signal.createSignal)(initialState);
|
|
291
|
+
const dispatch = (action2) => {
|
|
292
|
+
setState(reducer(state(), action2));
|
|
293
|
+
};
|
|
294
|
+
return [state, dispatch];
|
|
295
|
+
}
|
|
296
|
+
function useEventListener(target, event, handler, options) {
|
|
297
|
+
useEffect(() => {
|
|
298
|
+
const element = target && "current" in target ? target.current : target;
|
|
299
|
+
if (!element) return;
|
|
300
|
+
element.addEventListener(event, handler, options);
|
|
301
|
+
return () => {
|
|
302
|
+
element.removeEventListener(event, handler, options);
|
|
303
|
+
};
|
|
304
|
+
});
|
|
305
|
+
}
|
|
306
|
+
function useCallback(callback) {
|
|
307
|
+
return callback;
|
|
308
|
+
}
|
|
309
|
+
|
|
310
|
+
// src/lib/render/suspense.ts
|
|
311
|
+
var import_signal2 = require("@fluixi/reactive/signal");
|
|
312
|
+
var import_dom5 = require("@fluixi/dom");
|
|
313
|
+
function isNode(value) {
|
|
314
|
+
if (typeof window === "undefined") return false;
|
|
315
|
+
if (typeof Node === "function" && value instanceof Node) return true;
|
|
316
|
+
return !!(value && typeof value === "object" && typeof value.nodeType === "number");
|
|
317
|
+
}
|
|
318
|
+
function isLitResult(value) {
|
|
319
|
+
if (!value || typeof value !== "object") return false;
|
|
320
|
+
return !!(typeof value["_$litType$"] !== "undefined" || typeof value["_$litDirective$"] !== "undefined" || Array.isArray(value.strings) && Array.isArray(value.values));
|
|
321
|
+
}
|
|
322
|
+
function isPromise(value) {
|
|
323
|
+
return !!(value && typeof value === "object" && typeof value.then === "function" || value instanceof Promise);
|
|
324
|
+
}
|
|
325
|
+
function isJSXElement(value) {
|
|
326
|
+
return !!(value && typeof value === "object" && "type" in value && "props" in value);
|
|
327
|
+
}
|
|
328
|
+
var SuspenseListContext = (0, import_signal2.createContext)(void 0, "suspense-list");
|
|
329
|
+
function Suspense(props) {
|
|
330
|
+
return (0, import_dom5.createComponent)(SuspenseImpl, props);
|
|
331
|
+
}
|
|
332
|
+
function SuspenseImpl(props) {
|
|
333
|
+
const boundary = (0, import_signal2.createSuspenseBoundary)();
|
|
334
|
+
const listCtx = (0, import_signal2.useContext)(SuspenseListContext);
|
|
335
|
+
const listState = listCtx ? listCtx.register(boundary.inFallback) : void 0;
|
|
336
|
+
function instantiateOnce(val) {
|
|
337
|
+
if (val == null || typeof val === "boolean") return null;
|
|
338
|
+
if (typeof val === "function" && (0, import_dom5.isComponent)(val) && !(0, import_signal2.isSignal)(val)) return val();
|
|
339
|
+
return val;
|
|
340
|
+
}
|
|
341
|
+
const fallback = (0, import_dom5.runWithoutHydration)(() => instantiateOnce(props.fallback ?? null));
|
|
342
|
+
const children = (0, import_signal2.provideSuspense)(boundary, () => (0, import_signal2.readChildren)(() => props.children));
|
|
343
|
+
const track = (value, depth) => {
|
|
344
|
+
if (depth > 8) return;
|
|
345
|
+
if (Array.isArray(value)) {
|
|
346
|
+
for (const x of value) track(x, depth + 1);
|
|
347
|
+
} else if (typeof value === "function" && (0, import_signal2.isSignal)(value)) {
|
|
348
|
+
track(value(), depth + 1);
|
|
349
|
+
}
|
|
350
|
+
};
|
|
351
|
+
(0, import_signal2.provideSuspense)(boundary, () => {
|
|
352
|
+
(0, import_signal2.createRenderEffect)(() => track(children, 0));
|
|
353
|
+
});
|
|
354
|
+
const [resolved, setResolved] = (0, import_signal2.createSignal)(void 0);
|
|
355
|
+
const childIsPromise = isPromise(children);
|
|
356
|
+
if (childIsPromise) {
|
|
357
|
+
boundary.increment();
|
|
358
|
+
children.then(
|
|
359
|
+
(v) => {
|
|
360
|
+
setResolved(() => v);
|
|
361
|
+
boundary.decrement();
|
|
362
|
+
},
|
|
363
|
+
() => boundary.decrement()
|
|
364
|
+
);
|
|
365
|
+
}
|
|
366
|
+
return (0, import_signal2.createMemo)(() => {
|
|
367
|
+
const showFallback = listState ? listState.showFallback() : boundary.inFallback();
|
|
368
|
+
if (showFallback) return fallback;
|
|
369
|
+
if (childIsPromise) return resolved();
|
|
370
|
+
return children;
|
|
371
|
+
});
|
|
372
|
+
}
|
|
373
|
+
function SuspenseList(props) {
|
|
374
|
+
return (0, import_dom5.createComponent)(SuspenseListImpl, props);
|
|
375
|
+
}
|
|
376
|
+
function SuspenseListImpl(props) {
|
|
377
|
+
const { revealOrder = "together", tail } = props;
|
|
378
|
+
const registrations = [];
|
|
379
|
+
function coordinateReveal() {
|
|
380
|
+
if (revealOrder === "together") {
|
|
381
|
+
const allResolved = registrations.every((r) => !r.inFallback());
|
|
382
|
+
registrations.forEach((r) => {
|
|
383
|
+
r.setShowContent(allResolved);
|
|
384
|
+
r.setShowFallback(!allResolved);
|
|
385
|
+
});
|
|
386
|
+
} else {
|
|
387
|
+
const items = revealOrder === "backwards" ? [...registrations].reverse() : registrations;
|
|
388
|
+
let blocked = false;
|
|
389
|
+
for (const r of items) {
|
|
390
|
+
if (blocked || r.inFallback()) {
|
|
391
|
+
blocked = true;
|
|
392
|
+
r.setShowContent(false);
|
|
393
|
+
r.setShowFallback(tail !== "hidden");
|
|
394
|
+
} else {
|
|
395
|
+
r.setShowContent(true);
|
|
396
|
+
r.setShowFallback(false);
|
|
397
|
+
}
|
|
398
|
+
}
|
|
399
|
+
}
|
|
400
|
+
}
|
|
401
|
+
const coordinator = {
|
|
402
|
+
register: (inFallback) => {
|
|
403
|
+
const [showContent, setShowContent] = (0, import_signal2.createSignal)(true);
|
|
404
|
+
const [showFallback, setShowFallback] = (0, import_signal2.createSignal)(false);
|
|
405
|
+
registrations.push({ inFallback, setShowContent, setShowFallback });
|
|
406
|
+
(0, import_signal2.createEffect)(() => {
|
|
407
|
+
inFallback();
|
|
408
|
+
coordinateReveal();
|
|
409
|
+
});
|
|
410
|
+
return { showContent, showFallback };
|
|
411
|
+
}
|
|
412
|
+
};
|
|
413
|
+
return SuspenseListContext.Provider({
|
|
414
|
+
value: coordinator,
|
|
415
|
+
children: props.children
|
|
416
|
+
});
|
|
417
|
+
}
|
|
418
|
+
(0, import_dom5.asSuspense)(Suspense);
|
|
419
|
+
Object.defineProperty(Suspense, "__suspense", { value: true, enumerable: true });
|
|
420
|
+
|
|
421
|
+
// src/lib/render/lazy.ts
|
|
422
|
+
var import_dom6 = require("@fluixi/dom");
|
|
423
|
+
var import_signal3 = require("@fluixi/reactive/signal");
|
|
424
|
+
function fromChunk(value) {
|
|
425
|
+
if (value != null && (typeof value === "object" || typeof value === "function")) {
|
|
426
|
+
try {
|
|
427
|
+
value["$lazy"] = true;
|
|
428
|
+
} catch {
|
|
429
|
+
}
|
|
430
|
+
}
|
|
431
|
+
return value;
|
|
432
|
+
}
|
|
433
|
+
function lazy(loader, options) {
|
|
434
|
+
let resolved;
|
|
435
|
+
let promise;
|
|
436
|
+
let component;
|
|
437
|
+
function load() {
|
|
438
|
+
if (!promise) {
|
|
439
|
+
promise = loader().then((mod) => resolved = mod.default);
|
|
440
|
+
}
|
|
441
|
+
return promise;
|
|
442
|
+
}
|
|
443
|
+
if (options?.preload) load();
|
|
444
|
+
const LazyWrapper = ((props) => {
|
|
445
|
+
if (resolved) {
|
|
446
|
+
const C = resolved;
|
|
447
|
+
return fromChunk((0, import_signal3.untrack)(() => C(props)));
|
|
448
|
+
}
|
|
449
|
+
if (!component) {
|
|
450
|
+
const [resource2] = (0, import_signal3.createResource)(() => load(), { transport: false });
|
|
451
|
+
component = resource2;
|
|
452
|
+
if (resource2.error) throw resource2.error;
|
|
453
|
+
}
|
|
454
|
+
return (0, import_signal3.createMemo)(() => {
|
|
455
|
+
const C = component();
|
|
456
|
+
return C ? fromChunk((0, import_dom6.createComponent)(C, props)) : void 0;
|
|
457
|
+
});
|
|
458
|
+
});
|
|
459
|
+
LazyWrapper.preload = () => load().then(() => void 0);
|
|
460
|
+
LazyWrapper.$lazy = true;
|
|
461
|
+
LazyWrapper.loader = loader;
|
|
462
|
+
return LazyWrapper;
|
|
463
|
+
}
|
|
464
|
+
|
|
465
|
+
// src/lib/render/deferred.ts
|
|
466
|
+
var import_dom7 = require("@fluixi/dom");
|
|
467
|
+
var import_signal4 = require("@fluixi/reactive/signal");
|
|
468
|
+
var import_utils = require("@fluixi/dom/utils");
|
|
469
|
+
function deferred(loader, options) {
|
|
470
|
+
const exportName = options.export ?? "default";
|
|
471
|
+
const Lazy = lazy(
|
|
472
|
+
() => loader().then((mod) => {
|
|
473
|
+
const component = mod[exportName];
|
|
474
|
+
if (typeof component !== "function") {
|
|
475
|
+
throw new Error(
|
|
476
|
+
`deferred(): module has no '${exportName}' export (got ${typeof component}).`
|
|
477
|
+
);
|
|
478
|
+
}
|
|
479
|
+
return { default: component };
|
|
480
|
+
}),
|
|
481
|
+
{ fallback: options.fallback }
|
|
482
|
+
);
|
|
483
|
+
function Deferred(props) {
|
|
484
|
+
if (options.strategy.kind === "never") return (0, import_dom7.isServer)() ? Lazy(props) : null;
|
|
485
|
+
if ((0, import_dom7.isServer)() || options.strategy.kind === "eager") return Lazy(props);
|
|
486
|
+
const [ready, setReady] = (0, import_signal4.createSignal)(false);
|
|
487
|
+
const start = () => {
|
|
488
|
+
void Lazy.preload().then(() => setReady(true));
|
|
489
|
+
};
|
|
490
|
+
const anchor = options.strategy.kind === "visible" ? createAnchor() : void 0;
|
|
491
|
+
schedule(options.strategy, start, anchor);
|
|
492
|
+
return (0, import_signal4.createMemo)(() => ready() ? Lazy(props) : anchor ?? options.fallback ?? null, void 0, {
|
|
493
|
+
name: "deferred"
|
|
494
|
+
});
|
|
495
|
+
}
|
|
496
|
+
Deferred.preload = Lazy.preload;
|
|
497
|
+
return Deferred;
|
|
498
|
+
}
|
|
499
|
+
function createAnchor() {
|
|
500
|
+
const el = document.createElement("span");
|
|
501
|
+
el.setAttribute("data-fx-load", "visible");
|
|
502
|
+
el.style.display = "block";
|
|
503
|
+
return el;
|
|
504
|
+
}
|
|
505
|
+
function schedule(strategy, start, anchor) {
|
|
506
|
+
let fired = false;
|
|
507
|
+
const once = () => {
|
|
508
|
+
if (fired) return;
|
|
509
|
+
fired = true;
|
|
510
|
+
start();
|
|
511
|
+
};
|
|
512
|
+
switch (strategy.kind) {
|
|
513
|
+
case "idle": {
|
|
514
|
+
const ric = globalThis.requestIdleCallback;
|
|
515
|
+
if (ric) ric(once);
|
|
516
|
+
else setTimeout(once, 1);
|
|
517
|
+
return;
|
|
518
|
+
}
|
|
519
|
+
case "visible": {
|
|
520
|
+
if (!anchor || typeof IntersectionObserver === "undefined") {
|
|
521
|
+
once();
|
|
522
|
+
return;
|
|
523
|
+
}
|
|
524
|
+
const stop = (0, import_utils.observeIntersection)(
|
|
525
|
+
anchor,
|
|
526
|
+
(isIntersecting) => {
|
|
527
|
+
if (!isIntersecting) return;
|
|
528
|
+
stop();
|
|
529
|
+
once();
|
|
530
|
+
},
|
|
531
|
+
{ rootMargin: strategy.rootMargin ?? "0px" }
|
|
532
|
+
);
|
|
533
|
+
return;
|
|
534
|
+
}
|
|
535
|
+
case "interaction": {
|
|
536
|
+
const handler = () => {
|
|
537
|
+
for (const event of strategy.events) {
|
|
538
|
+
document.removeEventListener(event, handler, true);
|
|
539
|
+
}
|
|
540
|
+
once();
|
|
541
|
+
};
|
|
542
|
+
for (const event of strategy.events) {
|
|
543
|
+
document.addEventListener(event, handler, { capture: true, passive: true });
|
|
544
|
+
}
|
|
545
|
+
return;
|
|
546
|
+
}
|
|
547
|
+
case "media": {
|
|
548
|
+
if (typeof matchMedia === "undefined") {
|
|
549
|
+
once();
|
|
550
|
+
return;
|
|
551
|
+
}
|
|
552
|
+
const query2 = matchMedia(strategy.query);
|
|
553
|
+
if (query2.matches) {
|
|
554
|
+
once();
|
|
555
|
+
return;
|
|
556
|
+
}
|
|
557
|
+
const onChange = (e) => {
|
|
558
|
+
if (!e.matches) return;
|
|
559
|
+
query2.removeEventListener("change", onChange);
|
|
560
|
+
once();
|
|
561
|
+
};
|
|
562
|
+
query2.addEventListener("change", onChange);
|
|
563
|
+
return;
|
|
564
|
+
}
|
|
565
|
+
/* c8 ignore next 3 */
|
|
566
|
+
default:
|
|
567
|
+
once();
|
|
568
|
+
}
|
|
569
|
+
}
|
|
570
|
+
|
|
571
|
+
// src/lib/render/await.ts
|
|
572
|
+
var import_signal5 = require("@fluixi/reactive/signal");
|
|
573
|
+
function Await(props) {
|
|
574
|
+
const fetcher = () => {
|
|
575
|
+
const v = props.value;
|
|
576
|
+
return typeof v === "function" ? v() : v;
|
|
577
|
+
};
|
|
578
|
+
const [data] = (0, import_signal5.createResource)(fetcher);
|
|
579
|
+
return () => {
|
|
580
|
+
if (data.loading) return props.fallback;
|
|
581
|
+
const child = props.children;
|
|
582
|
+
return typeof child === "function" ? child(data()) : child;
|
|
583
|
+
};
|
|
584
|
+
}
|
|
585
|
+
|
|
586
|
+
// src/lib/render/index.ts
|
|
587
|
+
function render(code, container, options = {}) {
|
|
588
|
+
(0, import_dom9.delegateEvents)(["click", "input", "change", "submit"]);
|
|
589
|
+
if ((0, import_dom8.isServer)()) {
|
|
590
|
+
throw new Error(
|
|
591
|
+
"render() is for client-side only. Use renderToString() on server."
|
|
592
|
+
);
|
|
593
|
+
}
|
|
594
|
+
if (!container) {
|
|
595
|
+
throw new Error("Container element is required");
|
|
596
|
+
}
|
|
597
|
+
let disposer;
|
|
598
|
+
(0, import_signal6.createRoot)((dispose) => {
|
|
599
|
+
disposer = dispose;
|
|
600
|
+
const result = typeof code === "function" ? code() : code;
|
|
601
|
+
container.textContent = "";
|
|
602
|
+
(0, import_dom2.stampVersions)(container);
|
|
603
|
+
(0, import_dom2.warnOnVersionSkew)();
|
|
604
|
+
(0, import_dom9.insert)(container, () => result);
|
|
605
|
+
});
|
|
606
|
+
return () => {
|
|
607
|
+
if (disposer) {
|
|
608
|
+
disposer();
|
|
609
|
+
disposer = void 0;
|
|
610
|
+
}
|
|
611
|
+
};
|
|
612
|
+
}
|
|
613
|
+
function isLitTemplateResult(value) {
|
|
614
|
+
return value && typeof value === "object" && (value["_$litType$"] !== void 0 || value["_$litDirective$"] !== void 0);
|
|
615
|
+
}
|
|
616
|
+
function portal(code, target, options = {}) {
|
|
617
|
+
const container = document.createElement("div");
|
|
618
|
+
container.setAttribute("data-portal", "true");
|
|
619
|
+
target.appendChild(container);
|
|
620
|
+
const dispose = render(code, container, options);
|
|
621
|
+
return () => {
|
|
622
|
+
dispose();
|
|
623
|
+
if (target.contains(container)) {
|
|
624
|
+
target.removeChild(container);
|
|
625
|
+
}
|
|
626
|
+
};
|
|
627
|
+
}
|
|
628
|
+
function isRenderable(value) {
|
|
629
|
+
if (value == null) return true;
|
|
630
|
+
if (typeof value === "function") return true;
|
|
631
|
+
if ((0, import_dom9.isDOMNode)(value)) return true;
|
|
632
|
+
if (isLitTemplateResult(value)) return true;
|
|
633
|
+
if (Array.isArray(value)) return true;
|
|
634
|
+
if (typeof value === "string" || typeof value === "number" || typeof value === "boolean") {
|
|
635
|
+
return true;
|
|
636
|
+
}
|
|
637
|
+
return false;
|
|
638
|
+
}
|
|
639
|
+
function initDelegation() {
|
|
640
|
+
if ((0, import_dom8.isServer)()) return;
|
|
641
|
+
(0, import_dom9.delegateEvents)(["click", "input", "change", "submit"]);
|
|
642
|
+
}
|
|
643
|
+
function cleanupDelegation() {
|
|
644
|
+
if ((0, import_dom8.isServer)()) return;
|
|
645
|
+
}
|
|
646
|
+
|
|
647
|
+
// src/lib/context/context.ts
|
|
648
|
+
var import_dom10 = require("@fluixi/dom");
|
|
649
|
+
var import_signal7 = require("@fluixi/reactive/signal");
|
|
650
|
+
var import_signal8 = require("@fluixi/reactive/signal");
|
|
651
|
+
var _warnedEagerProvider = false;
|
|
652
|
+
function warnEagerProvider() {
|
|
653
|
+
if (_warnedEagerProvider) return;
|
|
654
|
+
_warnedEagerProvider = true;
|
|
655
|
+
if (typeof process !== "undefined" && true) return;
|
|
656
|
+
console.warn(
|
|
657
|
+
"[fluixi] createProvider({ context, value, children }) reads `children` eagerly: the object literal materialises `children` BEFORE the context is stamped, so a routed <Outlet/> that has siblings inside the provider renders detached and its descendants see no context under SSR. Use the lazy form instead:\n createProvider(Context, value, props) // children stays a getter\n // or JSX: <Context.Provider value={...}>{props.children}</Context.Provider>"
|
|
658
|
+
);
|
|
659
|
+
}
|
|
660
|
+
function createProvider(a, value, childProps) {
|
|
661
|
+
const isLazyForm = !!a?.Provider;
|
|
662
|
+
const context = isLazyForm ? a : a.context;
|
|
663
|
+
const rawValue = isLazyForm ? value : a.value;
|
|
664
|
+
const debug = isLazyForm ? false : a.debug ?? false;
|
|
665
|
+
if (!isLazyForm) warnEagerProvider();
|
|
666
|
+
const resolvedValue = typeof rawValue === "function" ? rawValue() : rawValue;
|
|
667
|
+
const sourceProps = isLazyForm ? childProps : a;
|
|
668
|
+
return context.Provider({
|
|
669
|
+
value: resolvedValue,
|
|
670
|
+
get children() {
|
|
671
|
+
return sourceProps?.children;
|
|
672
|
+
},
|
|
673
|
+
debug
|
|
674
|
+
});
|
|
675
|
+
}
|
|
676
|
+
function createContextWithProvider(defaultValue) {
|
|
677
|
+
const context = createContext3(defaultValue);
|
|
678
|
+
const provider = (props) => {
|
|
679
|
+
return createProvider(context, props.value, props);
|
|
680
|
+
};
|
|
681
|
+
return [context, provider];
|
|
682
|
+
}
|
|
683
|
+
function composeProviders(contexts, children) {
|
|
684
|
+
if (contexts.length === 0) {
|
|
685
|
+
return (0, import_signal8.readChildren)(() => children);
|
|
686
|
+
}
|
|
687
|
+
const [context, value] = contexts[0];
|
|
688
|
+
const remaining = contexts.slice(1);
|
|
689
|
+
return createProvider(context, value, {
|
|
690
|
+
get children() {
|
|
691
|
+
return composeProviders(remaining, children);
|
|
692
|
+
}
|
|
693
|
+
});
|
|
694
|
+
}
|
|
695
|
+
function createConsumer(context) {
|
|
696
|
+
return (props) => {
|
|
697
|
+
const value = useContext3(context);
|
|
698
|
+
return props.children(value);
|
|
699
|
+
};
|
|
700
|
+
}
|
|
701
|
+
function useProvide(context, factory) {
|
|
702
|
+
const existing = useContext3(context);
|
|
703
|
+
if (existing === context.defaultValue) {
|
|
704
|
+
return factory();
|
|
705
|
+
}
|
|
706
|
+
return existing;
|
|
707
|
+
}
|
|
708
|
+
function createContext3(defaultValue, name) {
|
|
709
|
+
const context = (0, import_signal7.createContext)(defaultValue, name);
|
|
710
|
+
const Provider = (props) => {
|
|
711
|
+
if (props.debug === true) {
|
|
712
|
+
}
|
|
713
|
+
return context.Provider({
|
|
714
|
+
value: props.value,
|
|
715
|
+
get children() {
|
|
716
|
+
return props.children;
|
|
717
|
+
},
|
|
718
|
+
debug: props.debug
|
|
719
|
+
});
|
|
720
|
+
};
|
|
721
|
+
if (typeof Symbol !== "undefined" && Symbol.for) {
|
|
722
|
+
Provider.$$typeof = /* @__PURE__ */ Symbol.for("react.provider");
|
|
723
|
+
}
|
|
724
|
+
Provider.$$typeof = /* @__PURE__ */ Symbol.for("react.provider");
|
|
725
|
+
return {
|
|
726
|
+
id: context.id,
|
|
727
|
+
Provider: (0, import_dom10.asProvider)(Provider),
|
|
728
|
+
defaultValue
|
|
729
|
+
};
|
|
730
|
+
}
|
|
731
|
+
function useContext3(context) {
|
|
732
|
+
const value = (0, import_signal7.useContext)(context);
|
|
733
|
+
return value !== void 0 ? value : context.defaultValue;
|
|
734
|
+
}
|
|
735
|
+
|
|
736
|
+
// src/lib/isomorphic.ts
|
|
737
|
+
var import_signal9 = require("@fluixi/reactive/signal");
|
|
738
|
+
var import_dom11 = require("@fluixi/dom");
|
|
739
|
+
var REGISTRY_KEY = "__fluixi_iso_states__";
|
|
740
|
+
var SEED_PREFIX = "__iso:";
|
|
741
|
+
function registry() {
|
|
742
|
+
return globalThis[REGISTRY_KEY] ??= /* @__PURE__ */ new Map();
|
|
743
|
+
}
|
|
744
|
+
function readSeed(key) {
|
|
745
|
+
if (typeof window === "undefined") return void 0;
|
|
746
|
+
const data = (0, import_dom11.getServerData)();
|
|
747
|
+
return data ? data[SEED_PREFIX + key] : void 0;
|
|
748
|
+
}
|
|
749
|
+
function createIsomorphicState(key, options) {
|
|
750
|
+
const seed = readSeed(key);
|
|
751
|
+
const initial = seed !== void 0 ? seed : typeof window !== "undefined" && options.client ? options.client() : options.fallback;
|
|
752
|
+
const [value, set] = (0, import_signal9.createSignal)(initial);
|
|
753
|
+
registry().set(key, { server: options.server, set });
|
|
754
|
+
return { value, set, key };
|
|
755
|
+
}
|
|
756
|
+
function createIsomorphicStore(key, options) {
|
|
757
|
+
const seeded = readSeed(key) !== void 0;
|
|
758
|
+
const base = createIsomorphicState(key, {
|
|
759
|
+
server: options.server,
|
|
760
|
+
fallback: options.fallback
|
|
761
|
+
});
|
|
762
|
+
const value = () => base.value() ?? options.fallback;
|
|
763
|
+
const persistWrite = (v) => {
|
|
764
|
+
if (!options.persist || typeof localStorage === "undefined") return;
|
|
765
|
+
try {
|
|
766
|
+
localStorage.setItem(options.persist, JSON.stringify(v));
|
|
767
|
+
} catch {
|
|
768
|
+
}
|
|
769
|
+
};
|
|
770
|
+
const set = (v) => {
|
|
771
|
+
base.set(v);
|
|
772
|
+
persistWrite(v);
|
|
773
|
+
};
|
|
774
|
+
const setField = (k, val) => {
|
|
775
|
+
set({ ...value(), [k]: val });
|
|
776
|
+
};
|
|
777
|
+
const fields = {};
|
|
778
|
+
for (const k of Object.keys(options.fallback)) {
|
|
779
|
+
fields[k] = (0, import_signal9.createMemo)(() => value()[k]);
|
|
780
|
+
}
|
|
781
|
+
let initPromise = null;
|
|
782
|
+
const ensureInit = () => {
|
|
783
|
+
if (seeded || !options.client) return Promise.resolve();
|
|
784
|
+
if (!initPromise) {
|
|
785
|
+
initPromise = Promise.resolve(options.client()).then((v) => {
|
|
786
|
+
set(v);
|
|
787
|
+
}).catch((e) => {
|
|
788
|
+
initPromise = null;
|
|
789
|
+
throw e;
|
|
790
|
+
});
|
|
791
|
+
}
|
|
792
|
+
return initPromise;
|
|
793
|
+
};
|
|
794
|
+
return { value, fields, set, setField, ensureInit, key };
|
|
795
|
+
}
|
|
796
|
+
|
|
797
|
+
// src/lib/env/index.ts
|
|
798
|
+
var import_dom12 = require("@fluixi/dom");
|
|
799
|
+
var import_dom13 = require("@fluixi/dom");
|
|
800
|
+
function isClient() {
|
|
801
|
+
return !(0, import_dom13.isServer)();
|
|
802
|
+
}
|
|
803
|
+
function createMemoryStorage() {
|
|
804
|
+
const mem = /* @__PURE__ */ new Map();
|
|
805
|
+
return {
|
|
806
|
+
getItem: (k) => mem.has(k) ? mem.get(k) : null,
|
|
807
|
+
setItem: (k, v) => void mem.set(k, String(v)),
|
|
808
|
+
removeItem: (k) => void mem.delete(k),
|
|
809
|
+
clear: () => mem.clear(),
|
|
810
|
+
key: (i) => Array.from(mem.keys())[i] ?? null,
|
|
811
|
+
get length() {
|
|
812
|
+
return mem.size;
|
|
813
|
+
}
|
|
814
|
+
};
|
|
815
|
+
}
|
|
816
|
+
var storage = typeof localStorage !== "undefined" ? localStorage : createMemoryStorage();
|
|
817
|
+
var env = {
|
|
818
|
+
get window() {
|
|
819
|
+
return typeof window !== "undefined" ? window : void 0;
|
|
820
|
+
},
|
|
821
|
+
get document() {
|
|
822
|
+
return typeof document !== "undefined" ? document : void 0;
|
|
823
|
+
}
|
|
824
|
+
};
|
|
825
|
+
function clientOnly(fn, fallback) {
|
|
826
|
+
return isClient() ? fn() : fallback;
|
|
827
|
+
}
|
|
828
|
+
|
|
829
|
+
// src/lib/theme/index.ts
|
|
830
|
+
var import_signal10 = require("@fluixi/reactive/signal");
|
|
831
|
+
function systemMap(system) {
|
|
832
|
+
if (!system) return null;
|
|
833
|
+
if (system === true) return { dark: "dark", light: "light" };
|
|
834
|
+
return system;
|
|
835
|
+
}
|
|
836
|
+
function createTheme(options) {
|
|
837
|
+
const storageKey = options.storageKey ?? "theme";
|
|
838
|
+
const attribute = options.attribute ?? "data-theme";
|
|
839
|
+
const sys = systemMap(options.system);
|
|
840
|
+
const detectInitial = () => {
|
|
841
|
+
const stored = storage.getItem(storageKey);
|
|
842
|
+
if (stored && options.themes.includes(stored)) return stored;
|
|
843
|
+
if (sys && env.window?.matchMedia?.("(prefers-color-scheme: dark)")?.matches) return sys.dark;
|
|
844
|
+
if (sys) return sys.light;
|
|
845
|
+
return options.default;
|
|
846
|
+
};
|
|
847
|
+
const [value, setValue] = (0, import_signal10.createSignal)(detectInitial());
|
|
848
|
+
const [isLoading, setLoading] = (0, import_signal10.createSignal)(false);
|
|
849
|
+
const apply = (t) => {
|
|
850
|
+
env.document?.documentElement.setAttribute(attribute, t);
|
|
851
|
+
try {
|
|
852
|
+
storage.setItem(storageKey, t);
|
|
853
|
+
} catch {
|
|
854
|
+
}
|
|
855
|
+
};
|
|
856
|
+
const set = (t) => {
|
|
857
|
+
if (!options.themes.includes(t)) return;
|
|
858
|
+
const prev = value();
|
|
859
|
+
setValue(() => t);
|
|
860
|
+
apply(t);
|
|
861
|
+
options.onChange?.(t, prev);
|
|
862
|
+
if (options.load) {
|
|
863
|
+
setLoading(true);
|
|
864
|
+
options.onLoading?.(t);
|
|
865
|
+
Promise.resolve(options.load(t)).finally(() => {
|
|
866
|
+
setLoading(false);
|
|
867
|
+
options.onLoaded?.(t);
|
|
868
|
+
});
|
|
869
|
+
}
|
|
870
|
+
};
|
|
871
|
+
const toggle = () => {
|
|
872
|
+
const i = options.themes.indexOf(value());
|
|
873
|
+
set(options.themes[(i + 1) % options.themes.length]);
|
|
874
|
+
};
|
|
875
|
+
const init = () => apply(value());
|
|
876
|
+
const headScript = () => {
|
|
877
|
+
const cfg = JSON.stringify({
|
|
878
|
+
k: storageKey,
|
|
879
|
+
a: attribute,
|
|
880
|
+
d: options.default,
|
|
881
|
+
sys
|
|
882
|
+
});
|
|
883
|
+
return `<script>(function(){try{var c=${cfg},t=localStorage.getItem(c.k);if(!t&&c.sys)t=matchMedia('(prefers-color-scheme: dark)').matches?c.sys.dark:c.sys.light;if(!t)t=c.d;document.documentElement.setAttribute(c.a,t);}catch(e){}})();<\/script>`;
|
|
884
|
+
};
|
|
885
|
+
return { value, isLoading, set, toggle, init, headScript };
|
|
886
|
+
}
|
|
887
|
+
|
|
888
|
+
// src/lib/router/index.ts
|
|
889
|
+
var import_signal12 = require("@fluixi/reactive/signal");
|
|
890
|
+
|
|
891
|
+
// src/lib/router/transition.ts
|
|
892
|
+
function supportsViewTransitions() {
|
|
893
|
+
return typeof document !== "undefined" && typeof document.startViewTransition === "function";
|
|
894
|
+
}
|
|
895
|
+
function prefersReducedMotion() {
|
|
896
|
+
if (typeof window === "undefined" || typeof window.matchMedia !== "function") {
|
|
897
|
+
return false;
|
|
898
|
+
}
|
|
899
|
+
try {
|
|
900
|
+
return window.matchMedia("(prefers-reduced-motion: reduce)").matches;
|
|
901
|
+
} catch {
|
|
902
|
+
return false;
|
|
903
|
+
}
|
|
904
|
+
}
|
|
905
|
+
function shouldAnimate(mode) {
|
|
906
|
+
return mode !== "none" && supportsViewTransitions() && !prefersReducedMotion();
|
|
907
|
+
}
|
|
908
|
+
function prepareComponents(components) {
|
|
909
|
+
const pending = [];
|
|
910
|
+
for (const component of components) {
|
|
911
|
+
const preload = component?.preload;
|
|
912
|
+
if (typeof preload === "function") {
|
|
913
|
+
try {
|
|
914
|
+
const result = preload();
|
|
915
|
+
if (result && typeof result.then === "function") {
|
|
916
|
+
pending.push(result.catch(() => void 0));
|
|
917
|
+
}
|
|
918
|
+
} catch {
|
|
919
|
+
}
|
|
920
|
+
}
|
|
921
|
+
}
|
|
922
|
+
return pending.length ? Promise.all(pending).then(() => void 0) : null;
|
|
923
|
+
}
|
|
924
|
+
function runTransition(mode, commit) {
|
|
925
|
+
if (!shouldAnimate(mode)) {
|
|
926
|
+
return Promise.resolve(commit()).then(() => void 0);
|
|
927
|
+
}
|
|
928
|
+
const start = document.startViewTransition;
|
|
929
|
+
try {
|
|
930
|
+
const transition = start.call(document, () => commit());
|
|
931
|
+
transition.finished?.catch(() => void 0);
|
|
932
|
+
transition.ready?.catch(() => void 0);
|
|
933
|
+
return transition.updateCallbackDone.catch(() => void 0);
|
|
934
|
+
} catch {
|
|
935
|
+
return Promise.resolve(commit()).then(() => void 0);
|
|
936
|
+
}
|
|
937
|
+
}
|
|
938
|
+
|
|
939
|
+
// src/lib/router/index.ts
|
|
940
|
+
var import_dom15 = require("@fluixi/dom");
|
|
941
|
+
var import_signal13 = require("@fluixi/reactive/signal");
|
|
942
|
+
var import_object = require("@fluixi/utils/object");
|
|
943
|
+
var import_compare = require("@fluixi/utils/compare");
|
|
944
|
+
var import_router = require("@fluixi/router");
|
|
945
|
+
var import_router2 = require("@fluixi/router");
|
|
946
|
+
|
|
947
|
+
// src/lib/router/data.ts
|
|
948
|
+
var import_signal11 = require("@fluixi/reactive/signal");
|
|
949
|
+
|
|
950
|
+
// src/lib/server/hydration.ts
|
|
951
|
+
var import_dom14 = require("@fluixi/dom");
|
|
952
|
+
var hydrationDataMap = /* @__PURE__ */ new Map();
|
|
953
|
+
function clearHydrationData() {
|
|
954
|
+
hydrationDataMap.clear();
|
|
955
|
+
}
|
|
956
|
+
function cleanupHydration() {
|
|
957
|
+
if (typeof window === "undefined") {
|
|
958
|
+
return;
|
|
959
|
+
}
|
|
960
|
+
const script = document.getElementById("__FLUIXI_HYDRATION__");
|
|
961
|
+
if (script) {
|
|
962
|
+
script.remove();
|
|
963
|
+
}
|
|
964
|
+
const walker = document.createTreeWalker(
|
|
965
|
+
document.body,
|
|
966
|
+
NodeFilter.SHOW_COMMENT,
|
|
967
|
+
null
|
|
968
|
+
);
|
|
969
|
+
const comments = [];
|
|
970
|
+
let node;
|
|
971
|
+
while (node = walker.nextNode()) {
|
|
972
|
+
const comment = node;
|
|
973
|
+
const text = comment.nodeValue || "";
|
|
974
|
+
if (text.startsWith("#") || text.startsWith("/")) {
|
|
975
|
+
comments.push(comment);
|
|
976
|
+
}
|
|
977
|
+
}
|
|
978
|
+
comments.forEach((comment) => comment.remove());
|
|
979
|
+
clearHydrationData();
|
|
980
|
+
}
|
|
981
|
+
if (typeof window !== "undefined") {
|
|
982
|
+
window.addEventListener("load", () => {
|
|
983
|
+
setTimeout(cleanupHydration, 100);
|
|
984
|
+
});
|
|
985
|
+
}
|
|
986
|
+
|
|
987
|
+
// src/lib/router/data.ts
|
|
988
|
+
var [revalidationVersion, setRevalidationVersion] = (0, import_signal11.createSignal)(0);
|
|
989
|
+
var RouteDataContext = createContext3(void 0, "route-data");
|
|
990
|
+
var RouteDataProvider = RouteDataContext.Provider;
|
|
991
|
+
|
|
992
|
+
// src/lib/router/index.ts
|
|
993
|
+
var import_signal14 = require("@fluixi/reactive/signal");
|
|
994
|
+
var RouterContext = (0, import_signal13.createContext)(void 0, "router");
|
|
995
|
+
var OutletContext = (0, import_signal13.createContext)(void 0, "outlet");
|
|
996
|
+
var LevelParamsContext = (0, import_signal13.createContext)(void 0, "route-params");
|
|
997
|
+
var RouteDataContext2 = (0, import_signal13.createContext)(void 0, "route-data");
|
|
998
|
+
function renderLayer(m, depth, base) {
|
|
999
|
+
let data;
|
|
1000
|
+
const loader = m.route.data;
|
|
1001
|
+
if (typeof loader === "function") {
|
|
1002
|
+
let cancelled = false;
|
|
1003
|
+
(0, import_signal12.onCleanup)(() => {
|
|
1004
|
+
cancelled = true;
|
|
1005
|
+
});
|
|
1006
|
+
const owner = (0, import_signal12.getOwner)();
|
|
1007
|
+
const [resource2] = (0, import_signal12.createResource)(
|
|
1008
|
+
() => loader({ params: base.params, location: base.location }, owner, () => cancelled)
|
|
1009
|
+
);
|
|
1010
|
+
data = resource2;
|
|
1011
|
+
}
|
|
1012
|
+
const buildPage = () => RouteDataContext2.Provider({
|
|
1013
|
+
value: data,
|
|
1014
|
+
get children() {
|
|
1015
|
+
return LevelParamsContext.Provider({
|
|
1016
|
+
value: m.params,
|
|
1017
|
+
get children() {
|
|
1018
|
+
return OutletContext.Provider({
|
|
1019
|
+
value: { depth, ...base },
|
|
1020
|
+
get children() {
|
|
1021
|
+
return (0, import_dom15.createComponent)(m.component, {});
|
|
1022
|
+
}
|
|
1023
|
+
});
|
|
1024
|
+
}
|
|
1025
|
+
});
|
|
1026
|
+
}
|
|
1027
|
+
});
|
|
1028
|
+
if (!data) return buildPage();
|
|
1029
|
+
const res = data;
|
|
1030
|
+
const isLoading = () => res.loading;
|
|
1031
|
+
const [ready, setReady] = (0, import_signal12.createSignal)((0, import_signal12.untrack)(() => !isLoading()));
|
|
1032
|
+
(0, import_signal12.createEffect)(() => setReady(!isLoading()));
|
|
1033
|
+
return (0, import_signal12.createMemo)(() => ready() ? buildPage() : null);
|
|
1034
|
+
}
|
|
1035
|
+
function renderChild(ctx) {
|
|
1036
|
+
const childIdx = ctx.depth + 1;
|
|
1037
|
+
const [childComp, setChildComp] = (0, import_signal12.createSignal)(
|
|
1038
|
+
(0, import_signal12.untrack)(() => ctx.matched()[childIdx]?.component)
|
|
1039
|
+
);
|
|
1040
|
+
(0, import_signal12.createEffect)(() => {
|
|
1041
|
+
const c = ctx.matched()[childIdx]?.component;
|
|
1042
|
+
if ((0, import_signal12.untrack)(childComp) !== c) setChildComp(() => c);
|
|
1043
|
+
});
|
|
1044
|
+
return (0, import_signal12.createMemo)(() => {
|
|
1045
|
+
const component = childComp();
|
|
1046
|
+
if (!component) {
|
|
1047
|
+
return ctx.notFound ? ctx.notFound() : null;
|
|
1048
|
+
}
|
|
1049
|
+
const m = (0, import_signal12.untrack)(() => ctx.matched())[childIdx];
|
|
1050
|
+
return renderLayer(m, childIdx, {
|
|
1051
|
+
matched: ctx.matched,
|
|
1052
|
+
params: ctx.params,
|
|
1053
|
+
location: ctx.location
|
|
1054
|
+
});
|
|
1055
|
+
});
|
|
1056
|
+
}
|
|
1057
|
+
function renderNotFound(notFound) {
|
|
1058
|
+
if (notFound == null) return buildDefaultNotFound();
|
|
1059
|
+
return typeof notFound === "function" ? (0, import_dom15.createComponent)(notFound, {}) : notFound;
|
|
1060
|
+
}
|
|
1061
|
+
function buildDefaultNotFound() {
|
|
1062
|
+
const el = (0, import_dom15.createNativeElement)("div");
|
|
1063
|
+
(0, import_dom15.setAttribute)(el, "class", "fx-not-found");
|
|
1064
|
+
(0, import_dom15.setAttribute)(el, "role", "main");
|
|
1065
|
+
(0, import_dom15.setAttribute)(
|
|
1066
|
+
el,
|
|
1067
|
+
"style",
|
|
1068
|
+
"min-height:60vh;display:grid;place-content:center;gap:.25rem;text-align:center;font-family:system-ui,-apple-system,sans-serif"
|
|
1069
|
+
);
|
|
1070
|
+
const h1 = (0, import_dom15.createNativeElement)("h1");
|
|
1071
|
+
(0, import_dom15.setAttribute)(h1, "style", "margin:0;font-size:2.5rem;font-weight:700");
|
|
1072
|
+
(0, import_dom15.insert)(h1, "404");
|
|
1073
|
+
const p = (0, import_dom15.createNativeElement)("p");
|
|
1074
|
+
(0, import_dom15.setAttribute)(p, "style", "margin:0;opacity:.7");
|
|
1075
|
+
(0, import_dom15.insert)(p, "This page could not be found.");
|
|
1076
|
+
el.appendChild(h1);
|
|
1077
|
+
el.appendChild(p);
|
|
1078
|
+
return el;
|
|
1079
|
+
}
|
|
1080
|
+
var pendingTransitionMode;
|
|
1081
|
+
function Router(props) {
|
|
1082
|
+
const history = props.history ?? (0, import_router.createBrowserHistory)();
|
|
1083
|
+
const router = (0, import_router.createRouter)({
|
|
1084
|
+
routes: props.routes,
|
|
1085
|
+
base: props.base,
|
|
1086
|
+
history
|
|
1087
|
+
});
|
|
1088
|
+
const [state, setState] = (0, import_signal12.createSignal)(router.state());
|
|
1089
|
+
let navigationId = 0;
|
|
1090
|
+
const takeMode = () => {
|
|
1091
|
+
const mode = pendingTransitionMode ?? (props.transition ?? "auto");
|
|
1092
|
+
pendingTransitionMode = void 0;
|
|
1093
|
+
return mode;
|
|
1094
|
+
};
|
|
1095
|
+
const unsub = router.subscribe((next) => {
|
|
1096
|
+
const id = ++navigationId;
|
|
1097
|
+
const mode = takeMode();
|
|
1098
|
+
const prepared = prepareComponents(
|
|
1099
|
+
(next.match?.matched ?? []).map((m) => m.component).filter(Boolean)
|
|
1100
|
+
);
|
|
1101
|
+
const commit = () => {
|
|
1102
|
+
setState(next);
|
|
1103
|
+
return (0, import_signal12.flush)();
|
|
1104
|
+
};
|
|
1105
|
+
if (!prepared) {
|
|
1106
|
+
void runTransition(mode, commit);
|
|
1107
|
+
return;
|
|
1108
|
+
}
|
|
1109
|
+
void prepared.then(() => {
|
|
1110
|
+
if (id !== navigationId) return;
|
|
1111
|
+
return runTransition(mode, commit);
|
|
1112
|
+
});
|
|
1113
|
+
});
|
|
1114
|
+
(0, import_signal12.onCleanup)(() => {
|
|
1115
|
+
unsub();
|
|
1116
|
+
router.destroy();
|
|
1117
|
+
navigationId++;
|
|
1118
|
+
});
|
|
1119
|
+
const matched = (0, import_signal12.createMemo)(
|
|
1120
|
+
() => (state().match?.matched ?? []).filter((m) => m.component)
|
|
1121
|
+
);
|
|
1122
|
+
const ctx = {
|
|
1123
|
+
router,
|
|
1124
|
+
location: (0, import_signal12.createMemo)(() => state().location),
|
|
1125
|
+
params: (0, import_signal12.createMemo)(() => state().match?.params ?? {})
|
|
1126
|
+
};
|
|
1127
|
+
const root = {
|
|
1128
|
+
depth: -1,
|
|
1129
|
+
matched,
|
|
1130
|
+
params: ctx.params,
|
|
1131
|
+
location: ctx.location,
|
|
1132
|
+
// Only the root carries this: renderChild shows it when the URL matched nothing.
|
|
1133
|
+
notFound: () => renderNotFound(props.notFound)
|
|
1134
|
+
};
|
|
1135
|
+
let rootView;
|
|
1136
|
+
return RouterContext.Provider({
|
|
1137
|
+
value: ctx,
|
|
1138
|
+
get children() {
|
|
1139
|
+
return rootView ??= renderChild(root);
|
|
1140
|
+
}
|
|
1141
|
+
});
|
|
1142
|
+
}
|
|
1143
|
+
var _ssrRouterStub = {
|
|
1144
|
+
router: { navigate: () => {
|
|
1145
|
+
} },
|
|
1146
|
+
location: () => ({ pathname: "", search: "", hash: "", query: {} }),
|
|
1147
|
+
params: () => ({})
|
|
1148
|
+
};
|
|
1149
|
+
function useRouter() {
|
|
1150
|
+
const ctx = (0, import_signal13.useContext)(RouterContext);
|
|
1151
|
+
if (ctx) return ctx;
|
|
1152
|
+
if (typeof window === "undefined") return _ssrRouterStub;
|
|
1153
|
+
throw new Error("[router] useRouter must be used within <Router>");
|
|
1154
|
+
}
|
|
1155
|
+
function useParams() {
|
|
1156
|
+
const params = useRouter().params;
|
|
1157
|
+
return (0, import_signal12.createMemo)(() => params(), {}, {
|
|
1158
|
+
equals: (a, b) => JSON.stringify(a) === JSON.stringify(b)
|
|
1159
|
+
});
|
|
1160
|
+
}
|
|
1161
|
+
function useLocation() {
|
|
1162
|
+
const { location } = useRouter();
|
|
1163
|
+
return new Proxy({}, {
|
|
1164
|
+
get: (_t, key) => location()[key],
|
|
1165
|
+
has: (_t, key) => key in location(),
|
|
1166
|
+
ownKeys: () => Reflect.ownKeys(location()),
|
|
1167
|
+
getOwnPropertyDescriptor: (_t, key) => Object.getOwnPropertyDescriptor(location(), key)
|
|
1168
|
+
});
|
|
1169
|
+
}
|
|
1170
|
+
function useNavigate() {
|
|
1171
|
+
const { router } = useRouter();
|
|
1172
|
+
return (to, options) => {
|
|
1173
|
+
pendingTransitionMode = options?.transition;
|
|
1174
|
+
router.navigate(to, options);
|
|
1175
|
+
};
|
|
1176
|
+
}
|
|
1177
|
+
var read = (v) => typeof v === "function" ? v() : v;
|
|
1178
|
+
var LINK_OWN_PROPS = /* @__PURE__ */ new Set([
|
|
1179
|
+
"href",
|
|
1180
|
+
"slot",
|
|
1181
|
+
"class",
|
|
1182
|
+
"className",
|
|
1183
|
+
"active",
|
|
1184
|
+
"activeClass",
|
|
1185
|
+
"replace",
|
|
1186
|
+
"children"
|
|
1187
|
+
]);
|
|
1188
|
+
function Link(props) {
|
|
1189
|
+
const ctx = (0, import_signal13.useContext)(RouterContext);
|
|
1190
|
+
const navigate = () => ctx?.router.navigate(read(props.href) ?? "", { replace: read(props.replace) });
|
|
1191
|
+
const a = (0, import_dom15.createNativeElement)("a");
|
|
1192
|
+
(0, import_dom15.setAttribute)(a, "href", read(props.href) ?? "");
|
|
1193
|
+
if (props.slot) (0, import_dom15.setAttribute)(a, "slot", read(props.slot));
|
|
1194
|
+
for (const k of Object.keys(props)) {
|
|
1195
|
+
if (LINK_OWN_PROPS.has(k)) continue;
|
|
1196
|
+
const v = props[k];
|
|
1197
|
+
if (v != null && typeof v !== "function") (0, import_dom15.setAttribute)(a, k, String(v));
|
|
1198
|
+
}
|
|
1199
|
+
if (typeof a.addEventListener === "function") {
|
|
1200
|
+
a.addEventListener("click", (e) => {
|
|
1201
|
+
if (e.metaKey || e.ctrlKey || e.shiftKey || e.altKey) return;
|
|
1202
|
+
e.preventDefault();
|
|
1203
|
+
navigate();
|
|
1204
|
+
});
|
|
1205
|
+
} else {
|
|
1206
|
+
const base = read(props.className ?? props.class) ?? "";
|
|
1207
|
+
if (base) (0, import_dom15.setAttribute)(a, "class", base);
|
|
1208
|
+
}
|
|
1209
|
+
if (typeof a.addEventListener === "function") {
|
|
1210
|
+
(0, import_signal12.createEffect)(() => {
|
|
1211
|
+
const href = read(props.href) ?? "";
|
|
1212
|
+
a.setAttribute("href", href);
|
|
1213
|
+
const base = read(props.className ?? props.class) ?? "";
|
|
1214
|
+
const activeClass = read(props.activeClass) ?? "";
|
|
1215
|
+
const active = read(props.active) ?? ctx?.location().pathname === href;
|
|
1216
|
+
a.className = [base, active ? activeClass : ""].filter(Boolean).join(" ");
|
|
1217
|
+
});
|
|
1218
|
+
}
|
|
1219
|
+
const linkChildren = props.children;
|
|
1220
|
+
if (linkChildren != null) (0, import_dom15.insert)(a, linkChildren);
|
|
1221
|
+
return a;
|
|
1222
|
+
}
|
|
1223
|
+
|
|
1224
|
+
// src/lib/core.ts
|
|
1225
|
+
var import_dom17 = require("@fluixi/dom");
|
|
1226
|
+
var import_dom18 = require("@fluixi/dom");
|
|
1227
|
+
var import_dom19 = require("@fluixi/dom");
|
|
1228
|
+
|
|
1229
|
+
// src/lib/control-flow.ts
|
|
1230
|
+
var import_dom16 = require("@fluixi/dom");
|
|
1231
|
+
|
|
1232
|
+
// src/lib/core.ts
|
|
1233
|
+
var import_store = require("@fluixi/reactive/store");
|
|
1234
|
+
var VERSION2 = "0.0.1";
|
|
1235
|
+
var FRAMEWORK_NAME = "Fluixi";
|
|
1236
|
+
var core_default = {
|
|
1237
|
+
// Core
|
|
1238
|
+
createComponent,
|
|
1239
|
+
// render,
|
|
1240
|
+
onMount,
|
|
1241
|
+
onUnmount,
|
|
1242
|
+
createEffect: import_signal15.createEffect,
|
|
1243
|
+
createMemo: import_signal15.createMemo,
|
|
1244
|
+
createSignal: import_signal15.createSignal,
|
|
1245
|
+
createContext: createContext3,
|
|
1246
|
+
createRoot: import_signal15.createRoot,
|
|
1247
|
+
createDeferred: import_signal15.createDeferred,
|
|
1248
|
+
createComputed: import_signal15.createComputed,
|
|
1249
|
+
createRenderEffect: import_signal15.createRenderEffect,
|
|
1250
|
+
createSelector: import_signal16.createSelector,
|
|
1251
|
+
onCleanup: import_signal15.onCleanup,
|
|
1252
|
+
getOwner: import_signal15.getOwner,
|
|
1253
|
+
runWithOwner: import_signal15.runWithOwner,
|
|
1254
|
+
batch: import_signal15.batch,
|
|
1255
|
+
untrack: import_signal15.untrack,
|
|
1256
|
+
useContext: useContext3,
|
|
1257
|
+
setOwner: import_signal15.setOwner,
|
|
1258
|
+
// Control Flow
|
|
1259
|
+
// Show,
|
|
1260
|
+
// For,
|
|
1261
|
+
// Switch,
|
|
1262
|
+
// Match,
|
|
1263
|
+
// Portal,
|
|
1264
|
+
// Dynamic,
|
|
1265
|
+
// Context
|
|
1266
|
+
// Provider,
|
|
1267
|
+
// Resources
|
|
1268
|
+
// createResource,
|
|
1269
|
+
// Router
|
|
1270
|
+
// createRouter,
|
|
1271
|
+
Router,
|
|
1272
|
+
Link,
|
|
1273
|
+
useRouter,
|
|
1274
|
+
useNavigate,
|
|
1275
|
+
read: import_operators.readSignal,
|
|
1276
|
+
reduce: import_operators.reduceSignal,
|
|
1277
|
+
// Meta
|
|
1278
|
+
VERSION: VERSION2,
|
|
1279
|
+
FRAMEWORK_NAME
|
|
1280
|
+
};
|