@fluixi/core 1.0.0-alpha.82 → 1.0.0-alpha.84

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (179) hide show
  1. package/dist/cdn/core.global.js +2 -1
  2. package/dist/cli/generate.cjs +4117 -292
  3. package/dist/cli/generate.mjs +4122 -292
  4. package/dist/cli/index.cjs +4117 -292
  5. package/dist/cli/index.mjs +4122 -292
  6. package/dist/cli/run.cjs +63 -1
  7. package/dist/cli/run.mjs +39 -1
  8. package/dist/src/cdn/chunk-VNLCQBFQ.mjs +747 -0
  9. package/dist/src/cdn/core.cjs +1279 -1
  10. package/dist/src/cdn/core.d.ts +3 -3
  11. package/dist/src/cdn/core.js +3 -3
  12. package/dist/src/cdn/core.mjs +642 -1
  13. package/dist/src/cdn/router-WMN2AA7E.mjs +66 -0
  14. package/dist/src/index.cjs +1201 -1
  15. package/dist/src/index.d.ts.map +1 -1
  16. package/dist/src/index.js +1 -11
  17. package/dist/src/index.mjs +1313 -1
  18. package/dist/src/jsx-dev-runtime.cjs +26 -1
  19. package/dist/src/jsx-dev-runtime.mjs +24 -1
  20. package/dist/src/jsx-runtime.cjs +26 -1
  21. package/dist/src/jsx-runtime.js +0 -9
  22. package/dist/src/jsx-runtime.mjs +24 -1
  23. package/dist/src/lib/client/chunk-2C2KDDQV.mjs +133 -0
  24. package/dist/src/lib/client/index.cjs +870 -1
  25. package/dist/src/lib/client/index.d.ts +10 -14
  26. package/dist/src/lib/client/index.d.ts.map +1 -1
  27. package/dist/src/lib/client/index.js +36 -21
  28. package/dist/src/lib/client/index.mjs +222 -1
  29. package/dist/src/lib/client/router-X526HSWQ.mjs +548 -0
  30. package/dist/src/lib/context/context.cjs +118 -1
  31. package/dist/src/lib/context/context.d.ts +20 -38
  32. package/dist/src/lib/context/context.d.ts.map +1 -1
  33. package/dist/src/lib/context/context.js +10 -47
  34. package/dist/src/lib/context/context.mjs +99 -1
  35. package/dist/src/lib/context/index.cjs +120 -1
  36. package/dist/src/lib/context/index.mjs +99 -1
  37. package/dist/src/lib/control-flow.cjs +35 -1
  38. package/dist/src/lib/control-flow.mjs +25 -1
  39. package/dist/src/lib/core.cjs +1200 -1
  40. package/dist/src/lib/core.d.ts +0 -2
  41. package/dist/src/lib/core.d.ts.map +1 -1
  42. package/dist/src/lib/core.js +14 -48
  43. package/dist/src/lib/core.mjs +1313 -1
  44. package/dist/src/lib/env/index.cjs +60 -1
  45. package/dist/src/lib/env/index.d.ts +7 -8
  46. package/dist/src/lib/env/index.d.ts.map +1 -1
  47. package/dist/src/lib/env/index.js +14 -9
  48. package/dist/src/lib/env/index.mjs +39 -1
  49. package/dist/src/lib/i18n/index.cjs +108 -1
  50. package/dist/src/lib/i18n/index.d.ts +31 -10
  51. package/dist/src/lib/i18n/index.d.ts.map +1 -1
  52. package/dist/src/lib/i18n/index.js +31 -10
  53. package/dist/src/lib/i18n/index.mjs +88 -1
  54. package/dist/src/lib/index.cjs +633 -1
  55. package/dist/src/lib/index.d.ts +0 -2
  56. package/dist/src/lib/index.d.ts.map +1 -1
  57. package/dist/src/lib/index.js +5 -11
  58. package/dist/src/lib/index.mjs +721 -1
  59. package/dist/src/lib/isomorphic.cjs +85 -1
  60. package/dist/src/lib/isomorphic.d.ts +41 -8
  61. package/dist/src/lib/isomorphic.d.ts.map +1 -1
  62. package/dist/src/lib/isomorphic.js +38 -5
  63. package/dist/src/lib/isomorphic.mjs +64 -1
  64. package/dist/src/lib/jsx-runtime/index.cjs +21 -1
  65. package/dist/src/lib/jsx-runtime/index.d.ts +1 -1
  66. package/dist/src/lib/jsx-runtime/index.js +1 -11
  67. package/dist/src/lib/jsx-runtime/index.mjs +4 -1
  68. package/dist/src/lib/jsx-runtime/jsx-dev-runtime.cjs +21 -1
  69. package/dist/src/lib/jsx-runtime/jsx-dev-runtime.mjs +4 -1
  70. package/dist/src/lib/plugins/fluixi-routes-plugin.cjs +302 -8
  71. package/dist/src/lib/plugins/fluixi-routes-plugin.d.ts +15 -1
  72. package/dist/src/lib/plugins/fluixi-routes-plugin.d.ts.map +1 -1
  73. package/dist/src/lib/plugins/fluixi-routes-plugin.js +19 -5
  74. package/dist/src/lib/plugins/fluixi-routes-plugin.mjs +271 -8
  75. package/dist/src/lib/plugins/index.cjs +311 -8
  76. package/dist/src/lib/plugins/index.mjs +279 -8
  77. package/dist/src/lib/plugins/route-codegen.cjs +73 -8
  78. package/dist/src/lib/plugins/route-codegen.d.ts +0 -1
  79. package/dist/src/lib/plugins/route-codegen.d.ts.map +1 -1
  80. package/dist/src/lib/plugins/route-codegen.js +4 -5
  81. package/dist/src/lib/plugins/route-codegen.mjs +52 -8
  82. package/dist/src/lib/plugins/route-scanner.cjs +189 -1
  83. package/dist/src/lib/plugins/route-scanner.d.ts +1 -2
  84. package/dist/src/lib/plugins/route-scanner.d.ts.map +1 -1
  85. package/dist/src/lib/plugins/route-scanner.js +7 -8
  86. package/dist/src/lib/plugins/route-scanner.mjs +158 -1
  87. package/dist/src/lib/plugins/vite.cjs +27 -1
  88. package/dist/src/lib/plugins/vite.mjs +6 -1
  89. package/dist/src/lib/render/await.cjs +38 -1
  90. package/dist/src/lib/render/await.d.ts +18 -0
  91. package/dist/src/lib/render/await.d.ts.map +1 -1
  92. package/dist/src/lib/render/await.js +20 -2
  93. package/dist/src/lib/render/await.mjs +17 -1
  94. package/dist/src/lib/render/component.cjs +221 -1
  95. package/dist/src/lib/render/component.d.ts +3 -44
  96. package/dist/src/lib/render/component.d.ts.map +1 -1
  97. package/dist/src/lib/render/component.js +32 -59
  98. package/dist/src/lib/render/component.mjs +214 -1
  99. package/dist/src/lib/render/deferred.cjs +175 -1
  100. package/dist/src/lib/render/deferred.d.ts.map +1 -1
  101. package/dist/src/lib/render/deferred.js +8 -8
  102. package/dist/src/lib/render/deferred.mjs +158 -1
  103. package/dist/src/lib/render/index.cjs +573 -1
  104. package/dist/src/lib/render/index.d.ts +3 -17
  105. package/dist/src/lib/render/index.d.ts.map +1 -1
  106. package/dist/src/lib/render/index.js +12 -26
  107. package/dist/src/lib/render/index.mjs +590 -1
  108. package/dist/src/lib/render/lazy.cjs +67 -1
  109. package/dist/src/lib/render/lazy.d.ts +22 -1
  110. package/dist/src/lib/render/lazy.d.ts.map +1 -1
  111. package/dist/src/lib/render/lazy.js +47 -8
  112. package/dist/src/lib/render/lazy.mjs +50 -1
  113. package/dist/src/lib/render/suspense.cjs +141 -1
  114. package/dist/src/lib/render/suspense.d.ts +40 -0
  115. package/dist/src/lib/render/suspense.d.ts.map +1 -1
  116. package/dist/src/lib/render/suspense.js +47 -7
  117. package/dist/src/lib/render/suspense.mjs +136 -1
  118. package/dist/src/lib/render/versions.cjs +35 -1
  119. package/dist/src/lib/render/versions.js +6 -6
  120. package/dist/src/lib/render/versions.mjs +14 -1
  121. package/dist/src/lib/router/data.cjs +230 -1
  122. package/dist/src/lib/router/data.d.ts +1 -13
  123. package/dist/src/lib/router/data.d.ts.map +1 -1
  124. package/dist/src/lib/router/data.js +1 -13
  125. package/dist/src/lib/router/data.mjs +214 -1
  126. package/dist/src/lib/router/index.cjs +627 -1
  127. package/dist/src/lib/router/index.d.ts +62 -10
  128. package/dist/src/lib/router/index.d.ts.map +1 -1
  129. package/dist/src/lib/router/index.js +90 -39
  130. package/dist/src/lib/router/index.mjs +639 -1
  131. package/dist/src/lib/server/hydration.cjs +169 -1
  132. package/dist/src/lib/server/hydration.d.ts +15 -55
  133. package/dist/src/lib/server/hydration.d.ts.map +1 -1
  134. package/dist/src/lib/server/hydration.js +23 -62
  135. package/dist/src/lib/server/hydration.mjs +148 -1
  136. package/dist/src/lib/server/index.cjs +401 -11
  137. package/dist/src/lib/server/index.d.ts +30 -6
  138. package/dist/src/lib/server/index.d.ts.map +1 -1
  139. package/dist/src/lib/server/index.js +34 -11
  140. package/dist/src/lib/server/index.mjs +379 -11
  141. package/dist/src/lib/server/reactive.cjs +197 -1
  142. package/dist/src/lib/server/reactive.d.ts +18 -77
  143. package/dist/src/lib/server/reactive.d.ts.map +1 -1
  144. package/dist/src/lib/server/reactive.js +19 -78
  145. package/dist/src/lib/server/reactive.mjs +176 -1
  146. package/dist/src/lib/theme/index.cjs +110 -1
  147. package/dist/src/lib/theme/index.d.ts +19 -4
  148. package/dist/src/lib/theme/index.d.ts.map +1 -1
  149. package/dist/src/lib/theme/index.js +17 -2
  150. package/dist/src/lib/theme/index.mjs +89 -1
  151. package/dist/src/lib/utils/index.cjs +209 -1
  152. package/dist/src/lib/utils/index.d.ts +0 -93
  153. package/dist/src/lib/utils/index.d.ts.map +1 -1
  154. package/dist/src/lib/utils/index.js +0 -93
  155. package/dist/src/lib/utils/index.mjs +188 -1
  156. package/dist/src/routes.cjs +37 -1
  157. package/dist/src/routes.d.ts +1 -1
  158. package/dist/src/routes.js +2 -2
  159. package/dist/src/routes.mjs +17 -1
  160. package/dist/src/server.cjs +400 -11
  161. package/dist/src/server.d.ts +0 -1
  162. package/dist/src/server.d.ts.map +1 -1
  163. package/dist/src/server.js +0 -1
  164. package/dist/src/server.mjs +377 -11
  165. package/dist/src/utils.cjs +21 -1
  166. package/dist/src/utils.d.ts +1 -1
  167. package/dist/src/utils.js +1 -1
  168. package/dist/src/utils.mjs +4 -1
  169. package/dist/src/version.generated.cjs +26 -1
  170. package/dist/src/version.generated.d.ts +1 -1
  171. package/dist/src/version.generated.js +2 -2
  172. package/dist/src/version.generated.mjs +5 -1
  173. package/dist/tsconfig.lib.tsbuildinfo +1 -1
  174. package/package.json +17 -16
  175. package/src/index.ts +2 -14
  176. package/dist/src/cdn/chunk-RN7C7HNS.mjs +0 -1
  177. package/dist/src/cdn/router-QB3W43UQ.mjs +0 -1
  178. package/dist/src/lib/client/chunk-FT22BLCQ.mjs +0 -1
  179. package/dist/src/lib/client/router-IH7JYMRU.mjs +0 -1
@@ -1 +1,1201 @@
1
- "use strict";var ee=Object.defineProperty;var tt=Object.getOwnPropertyDescriptor;var nt=Object.getOwnPropertyNames;var rt=Object.prototype.hasOwnProperty;var ot=(e,t)=>{for(var n in t)ee(e,n,{get:t[n],enumerable:!0})},it=(e,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of nt(t))!rt.call(e,o)&&o!==n&&ee(e,o,{get:()=>t[o],enumerable:!(r=tt(t,o))||r.enumerable});return e};var st=e=>it(ee({},"__esModule",{value:!0}),e);var It={};ot(It,{$component:()=>ne,Await:()=>pe,ClientOnly:()=>h.ClientOnly,Dynamic:()=>h.Dynamic,ErrorBoundary:()=>h.ErrorBoundary,FRAMEWORK_NAME:()=>Qe,For:()=>h.For,Index:()=>h.Index,Island:()=>T.Island,Link:()=>G,Match:()=>h.Match,NoSsr:()=>h.NoSsr,Portal:()=>h.Portal,Router:()=>X,Show:()=>h.Show,Store:()=>R.Store,Suspense:()=>j,SuspenseList:()=>le,Switch:()=>h.Switch,VERSION:()=>U,addClass:()=>c.addClass,appendChildren:()=>c.appendChildren,batch:()=>a.batch,classMap:()=>T.classMap,cleanupDelegation:()=>Ve,clientOnly:()=>Be,closest:()=>c.closest,composeProviders:()=>ge,createComponent:()=>F,createComputed:()=>a.createComputed,createConsumer:()=>$e,createContext:()=>L,createContextWithProvider:()=>Ue,createDebounce:()=>S.createDebounce,createDebouncedResource:()=>S.createDebouncedResource,createDebouncedSignal:()=>S.createDebouncedSignal,createDeferred:()=>a.createDeferred,createEffect:()=>a.createEffect,createIsomorphicState:()=>he,createIsomorphicStore:()=>Je,createMemo:()=>a.createMemo,createMemoryStorage:()=>Te,createProvider:()=>J,createRenderEffect:()=>a.createRenderEffect,createResource:()=>a.createResource,createRoot:()=>a.createRoot,createSelector:()=>S.createSelector,createSignal:()=>a.createSignal,createStore:()=>R.createStore,createTheme:()=>Xe,default:()=>Ze,deferred:()=>fe,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:()=>Z.html,hydrateIslands:()=>T.hydrateIslands,initDelegation:()=>_e,isClient:()=>ve,isJSXElement:()=>de,isLitResult:()=>ue,isNode:()=>ce,isRenderable:()=>Fe,isServer:()=>xe,isVisible:()=>c.isVisible,lazy:()=>D,memo:()=>a.memo,mergeProps:()=>T.mergeProps,observeIntersection:()=>c.observeIntersection,observeResize:()=>c.observeResize,onCleanup:()=>a.onCleanup,onMount:()=>_,onUnmount:()=>V,portal:()=>Ne,query:()=>c.query,queryAll:()=>c.queryAll,read:()=>N.readSignal,reduce:()=>N.reduceSignal,removeAttribute:()=>c.removeAttribute,removeChildren:()=>c.removeChildren,removeClass:()=>c.removeClass,render:()=>ye,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:()=>Z.svg,toggleClass:()=>c.toggleClass,untrack:()=>a.untrack,untrackStore:()=>R.untrackStore,unwrap:()=>R.unwrap,useCallback:()=>ae,useContext:()=>E,useEffect:()=>z,useEventListener:()=>se,useLocation:()=>Ge,useMemo:()=>re,useNavigate:()=>Y,useParams:()=>Ye,useProvide:()=>ze,useReducer:()=>ie,useRef:()=>oe,useRouter:()=>M,waitForElement:()=>c.waitForElement});module.exports=st(It);var U="1.0.0-alpha.82";var a=require("@fluixi/reactive/signal"),S=require("@fluixi/reactive/signal"),N=require("@fluixi/reactive/operators");var Ie=require("@fluixi/reactive/signal");var Pe=require("@fluixi/dom");var A=require("@fluixi/dom");(0,Pe.registerCoreVersion)(U);var O=require("@fluixi/dom");var $=require("@fluixi/dom"),l=require("@fluixi/reactive/signal");var te=Symbol.for("fluixi-lifecycle");function Re(){let e=(0,l.getOwner)();if(!e)return null;if(!e[te]){let t={mounts:[],effects:[],scheduled:!1};e[te]=t}return e[te]}var Ae=typeof window>"u";function ke(e){if(e.scheduled)return;if(Ae){e.mounts=[],e.effects=[];return}e.scheduled=!0;let t=(0,l.getOwner)();queueMicrotask(()=>{if((0,l.isOwnerDisposed)(t)){e.mounts=[],e.effects=[];return}(0,l.runWithOwner)(t,()=>{for(let n of e.mounts)try{let r=n();typeof r=="function"&&(0,l.onCleanup)(r)}catch(r){console.error("Error in onMount callback:",r)}for(let n of e.effects){let r;(0,l.createEffect)(()=>{r&&r(),r=n()}),(0,l.onCleanup)(()=>{r&&r()})}e.mounts=[],e.effects=[]})})}function F(e,t){return(0,$.createComponent)(e,t)}function ne(e,t){let n=typeof e=="function"?(0,l.untrack)(()=>e(t)):e;if(n!=null&&(typeof n=="function"||typeof n=="object")&&!(0,l.isSignal)(n)){try{n.$name=e.name}catch{}return(0,$.asComponent)(n)}return n}function _(e,t=!0){if(Ae)return;let n=Re();if(n){if(!t){n.scheduled||e();return}n.mounts.push(e),ke(n)}else{if(!t){e();return}(0,l.createEffect)(()=>{let r=(0,l.untrack)(e);typeof r=="function"&&(0,l.onCleanup)(r)})}}function V(e){(0,l.onCleanup)(e)}function z(e){let t=Re();if(t)t.effects.push(e),ke(t);else{let n;(0,l.createEffect)(()=>{n&&n(),n=e()}),(0,l.onCleanup)(()=>{n&&n()})}}function re(e){return(0,l.createMemo)(e)}function oe(e){let t={current:e};return(0,l.onCleanup)(()=>{t.current=null}),t}function ie(e,t){let[n,r]=(0,l.createSignal)(t);return[n,s=>{r(e(n(),s))}]}function se(e,t,n,r){z(()=>{let o=e&&"current"in e?e.current:e;if(o)return o.addEventListener(t,n,r),()=>{o.removeEventListener(t,n,r)}})}function ae(e){return e}var m=require("@fluixi/reactive/signal"),C=require("@fluixi/dom");function ce(e){return typeof window>"u"?!1:typeof Node=="function"&&e instanceof Node?!0:!!(e&&typeof e=="object"&&typeof e.nodeType=="number")}function ue(e){return!e||typeof e!="object"?!1:!!(typeof e._$litType$<"u"||typeof e._$litDirective$<"u"||Array.isArray(e.strings)&&Array.isArray(e.values))}function Oe(e){return!!(e&&typeof e=="object"&&typeof e.then=="function"||e instanceof Promise)}function de(e){return!!(e&&typeof e=="object"&&"type"in e&&"props"in e)}var Le=(0,m.createContext)();function j(e){return(0,C.createComponent)(at,e)}function at(e){let t=(0,m.createSuspenseBoundary)(),n=(0,m.useContext)(Le),r=n?n.register(t.inFallback):void 0;function o(f){return f==null||typeof f=="boolean"?null:typeof f=="function"&&(0,C.isComponent)(f)&&!(0,m.isSignal)(f)?f():f}let s=(0,C.runWithoutHydration)(()=>o(e.fallback??null)),i=(0,m.provideSuspense)(t,()=>(0,m.readChildren)(()=>e.children)),u=(f,w)=>{if(!(w>8))if(Array.isArray(f))for(let we of f)u(we,w+1);else typeof f=="function"&&(0,m.isSignal)(f)&&u(f(),w+1)};(0,m.provideSuspense)(t,()=>{(0,m.createRenderEffect)(()=>u(i,0))});let[d,g]=(0,m.createSignal)(void 0),v=Oe(i);return v&&(t.increment(),i.then(f=>{g(()=>f),t.decrement()},()=>t.decrement())),(0,m.createMemo)(()=>(r?r.showFallback():t.inFallback())?s:v?d():i)}function le(e){return(0,C.createComponent)(ct,e)}function ct(e){let{revealOrder:t="together",tail:n}=e,r=[];function o(){if(t==="together"){let i=r.every(u=>!u.inFallback());r.forEach(u=>{u.setShowContent(i),u.setShowFallback(!i)})}else{let i=t==="backwards"?[...r].reverse():r,u=!1;for(let d of i)u||d.inFallback()?(u=!0,d.setShowContent(!1),d.setShowFallback(n!=="hidden")):(d.setShowContent(!0),d.setShowFallback(!1))}}let s={register:i=>{let[u,d]=(0,m.createSignal)(!0),[g,v]=(0,m.createSignal)(!1);return r.push({inFallback:i,setShowContent:d,setShowFallback:v}),(0,m.createEffect)(()=>{i(),o()}),{showContent:u,showFallback:g}}};return Le.Provider({value:s,children:e.children})}(0,C.asSuspense)(j);Object.defineProperty(j,"__suspense",{value:!0,enumerable:!0});var k=require("@fluixi/reactive/signal");function D(e,t){let n,r,o;function s(){return r||(r=e().then(u=>n=u.default)),r}t?.preload&&s();let i=(u=>{if(n){let d=n;return(0,k.untrack)(()=>d(u))}if(!o){let[d]=(0,k.createResource)(()=>s(),{transport:!1});if(o=d,d.error)throw d.error}return(0,k.createMemo)(()=>{let d=o();return d?(0,k.untrack)(()=>d(u)):void 0},void 0,{name:"lazy"})});return i.preload=()=>s().then(()=>{}),i.$lazy=!0,i.loader=e,i}var W=require("@fluixi/reactive/signal"),Me=require("@fluixi/dom/utils");var Ee=typeof window>"u";function fe(e,t){let n=t.export??"default",r=D(()=>e().then(s=>{let i=s[n];if(typeof i!="function")throw new Error(`deferred(): module has no '${n}' export (got ${typeof i}).`);return{default:i}}),{fallback:t.fallback});function o(s){if(t.strategy.kind==="never")return Ee?r(s):null;if(Ee||t.strategy.kind==="eager")return r(s);let[i,u]=(0,W.createSignal)(!1),d=()=>{r.preload().then(()=>u(!0))},g=t.strategy.kind==="visible"?ut():void 0;return dt(t.strategy,d,g),(0,W.createMemo)(()=>i()?r(s):g??t.fallback??null,void 0,{name:"deferred"})}return o.preload=r.preload,o}function ut(){let e=document.createElement("span");return e.setAttribute("data-fx-load","visible"),e.style.display="block",e}function dt(e,t,n){let r=!1,o=()=>{r||(r=!0,t())};switch(e.kind){case"idle":{let s=globalThis.requestIdleCallback;s?s(o):setTimeout(o,1);return}case"visible":{if(!n||typeof IntersectionObserver>"u"){o();return}let s=(0,Me.observeIntersection)(n,i=>{i&&(s(),o())},{rootMargin:e.rootMargin??"0px"});return}case"interaction":{let s=()=>{for(let i of e.events)document.removeEventListener(i,s,!0);o()};for(let i of e.events)document.addEventListener(i,s,{capture:!0,passive:!0});return}case"media":{if(typeof matchMedia>"u"){o();return}let s=matchMedia(e.query);if(s.matches){o();return}let i=u=>{u.matches&&(s.removeEventListener("change",i),o())};s.addEventListener("change",i);return}default:o()}}var De=require("@fluixi/reactive/signal");function pe(e){let t=()=>{let r=e.value;return typeof r=="function"?r():r},[n]=(0,De.createResource)(t);return()=>{if(n.loading)return e.fallback;let r=e.children;return typeof r=="function"?r(n()):r}}var me=typeof window>"u";function ye(e,t,n={}){if((0,O.delegateEvents)(["click","input","change","submit"]),me)throw new Error("render() is for client-side only. Use renderToString() on server.");if(!t)throw new Error("Container element is required");let r;return(0,Ie.createRoot)(o=>{r=o;let s=typeof e=="function"?e():e;t.textContent="",(0,A.stampVersions)(t),(0,A.warnOnVersionSkew)(),(0,O.insert)(t,()=>s)}),()=>{r&&(r(),r=void 0)}}function lt(e){return e&&typeof e=="object"&&(e._$litType$!==void 0||e._$litDirective$!==void 0)}function Ne(e,t,n={}){let r=document.createElement("div");r.setAttribute("data-portal","true"),t.appendChild(r);let o=ye(e,r,n);return()=>{o(),t.contains(r)&&t.removeChild(r)}}function Fe(e){return!!(e==null||typeof e=="function"||(0,O.isDOMNode)(e)||lt(e)||Array.isArray(e)||typeof e=="string"||typeof e=="number"||typeof e=="boolean")}function _e(){me||(0,O.delegateEvents)(["click","input","change","submit"])}function Ve(){}var Ke=require("@fluixi/dom"),q=require("@fluixi/reactive/signal"),He=require("@fluixi/reactive/signal"),je=!1;function ft(){je||(je=!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 J(e,t,n){let r=!!e?.Provider,o=r?e:e.context,s=r?t:e.value,i=r?!1:e.debug??!1;r||ft();let u=typeof s=="function"?s():s,d=r?n:e;return o.Provider({value:u,get children(){return d?.children},debug:i})}function Ue(e){let t=L(e);return[t,r=>J(t,r.value,r)]}function ge(e,t){if(e.length===0)return(0,He.readChildren)(()=>t);let[n,r]=e[0],o=e.slice(1);return J(n,r,{get children(){return ge(o,t)}})}function $e(e){return t=>{let n=E(e);return t.children(n)}}function ze(e,t){let n=E(e);return n===e.defaultValue?t():n}function L(e){let t=(0,q.createContext)(e),n=r=>(r.debug,t.Provider({value:r.value,get children(){return r.children},debug:r.debug}));return typeof Symbol<"u"&&Symbol.for&&(n.$$typeof=Symbol.for("react.provider")),n.$$typeof=Symbol.for("react.provider"),{id:t.id,Provider:(0,Ke.asProvider)(n),defaultValue:e}}function E(e){let t=(0,q.useContext)(e);return t!==void 0?t:e.defaultValue}var B=require("@fluixi/reactive/signal"),We=require("@fluixi/dom"),pt="__fluixi_iso_states__",mt="__iso:";function yt(){return globalThis[pt]??=new Map}function qe(e){if(typeof window>"u")return;let t=(0,We.getServerData)();return t?t[mt+e]:void 0}function he(e,t){let n=qe(e),r=n!==void 0?n:typeof window<"u"&&t.client?t.client():t.fallback,[o,s]=(0,B.createSignal)(r);return yt().set(e,{server:t.server,set:s}),{value:o,set:s,key:e}}function Je(e,t){let n=qe(e)!==void 0,r=he(e,{server:t.server,fallback:t.fallback}),o=()=>r.value()??t.fallback,s=f=>{if(!(!t.persist||typeof localStorage>"u"))try{localStorage.setItem(t.persist,JSON.stringify(f))}catch{}},i=f=>{r.set(f),s(f)},u=(f,w)=>{i({...o(),[f]:w})},d={};for(let f of Object.keys(t.fallback))d[f]=(0,B.createMemo)(()=>o()[f]);let g=null;return{value:o,fields:d,set:i,setField:u,ensureInit:()=>n||!t.client?Promise.resolve():(g||(g=Promise.resolve(t.client()).then(f=>{i(f)}).catch(f=>{throw g=null,f})),g),key:e}}var xe=typeof document>"u",ve=!xe;function Te(){let e=new Map;return{getItem:t=>e.has(t)?e.get(t):null,setItem:(t,n)=>{e.set(t,String(n))},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:Te(),H={get window(){return typeof window<"u"?window:void 0},get document(){return typeof document<"u"?document:void 0}};function Be(e,t){return ve?e():t}var Ce=require("@fluixi/reactive/signal");function gt(e){return e?e===!0?{dark:"dark",light:"light"}:e:null}function Xe(e){let t=e.storageKey??"theme",n=e.attribute??"data-theme",r=gt(e.system),o=()=>{let x=K.getItem(t);return x&&e.themes.includes(x)?x:r&&H.window?.matchMedia?.("(prefers-color-scheme: dark)")?.matches?r.dark:r?r.light:e.default},[s,i]=(0,Ce.createSignal)(o()),[u,d]=(0,Ce.createSignal)(!1),g=x=>{H.document?.documentElement.setAttribute(n,x);try{K.setItem(t,x)}catch{}},v=x=>{if(!e.themes.includes(x))return;let et=s();i(()=>x),g(x),e.onChange?.(x,et),e.load&&(d(!0),e.onLoading?.(x),Promise.resolve(e.load(x)).finally(()=>{d(!1),e.onLoaded?.(x)}))};return{value:s,isLoading:u,set:v,toggle:()=>{let x=e.themes.indexOf(s());v(e.themes[(x+1)%e.themes.length])},init:()=>g(s()),headScript:()=>`<script>(function(){try{var c=${JSON.stringify({k:t,a:n,d:e.default,sys:r})},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"),Ct=require("@fluixi/utils/object"),bt=require("@fluixi/utils/compare"),I=require("@fluixi/router"),Q=require("@fluixi/router");var be=require("@fluixi/reactive/signal");var ht=new Map;function xt(){ht.clear()}function vt(){if(typeof window>"u")return;let e=document.getElementById("__FLUIXI_HYDRATION__");e&&e.remove();let t=document.createTreeWalker(document.body,NodeFilter.SHOW_COMMENT,null),n=[],r;for(;r=t.nextNode();){let o=r,s=o.nodeValue||"";(s.startsWith("#")||s.startsWith("/"))&&n.push(o)}n.forEach(o=>o.remove()),xt()}typeof window<"u"&&window.addEventListener("load",()=>{setTimeout(vt,100)});var[En,Mn]=(0,be.createSignal)(0);var Tt=L(),Dn=Tt.Provider;var Mt=require("@fluixi/reactive/signal"),Se=(0,P.createContext)(),St=(0,P.createContext)(),wt=(0,P.createContext)(),Pt=(0,P.createContext)();function Rt(e,t,n){let r,o=e.route.data;if(typeof o=="function"){let v=!1;(0,p.onCleanup)(()=>{v=!0});let f=(0,p.getOwner)(),[w]=(0,p.createResource)(()=>o({params:n.params,location:n.location},f,()=>v));r=w}let s=()=>Pt.Provider({value:r,get children(){return wt.Provider({value:e.params,get children(){return St.Provider({value:{depth:t,...n},get children(){return(0,y.createComponent)(e.component,{})}})}})}});if(!r)return s();let i=r,u=()=>i.loading,[d,g]=(0,p.createSignal)((0,p.untrack)(()=>!u()));return(0,p.createEffect)(()=>g(!u())),(0,p.createMemo)(()=>d()?s():null)}function At(e){let t=e.depth+1,[n,r]=(0,p.createSignal)((0,p.untrack)(()=>e.matched()[t]?.component));return(0,p.createEffect)(()=>{let o=e.matched()[t]?.component;r(()=>o)}),(0,p.createMemo)(()=>{if(!n())return e.notFound?e.notFound():null;let s=(0,p.untrack)(()=>e.matched())[t];return Rt(s,t,{matched:e.matched,params:e.params,location:e.location})})}function kt(e){return e==null?Ot():typeof e=="function"?(0,y.createComponent)(e,{}):e}function Ot(){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 n=(0,y.createNativeElement)("p");return(0,y.setAttribute)(n,"style","margin:0;opacity:.7"),(0,y.insert)(n,"This page could not be found."),e.appendChild(t),e.appendChild(n),e}function X(e){let t=e.history??(0,I.createBrowserHistory)(),n=(0,I.createRouter)({routes:e.routes,base:e.base,history:t}),[r,o]=(0,p.createSignal)(n.state()),s=n.subscribe(o);(0,p.onCleanup)(()=>{s(),n.destroy()});let i=(0,p.createMemo)(()=>(r().match?.matched??[]).filter(v=>v.component)),u={router:n,location:(0,p.createMemo)(()=>r().location),params:(0,p.createMemo)(()=>r().match?.params??{})},d={depth:-1,matched:i,params:u.params,location:u.location,notFound:()=>kt(e.notFound)},g;return Se.Provider({value:u,get children(){return g??=At(d)}})}var Lt={router:{navigate:()=>{}},location:()=>({pathname:"",search:"",hash:"",query:{}}),params:()=>({})};function M(){let e=(0,P.useContext)(Se);if(e)return e;if(typeof window>"u")return Lt;throw new Error("[router] useRouter must be used within <Router>")}function Ye(){let e=M().params;return(0,p.createMemo)(()=>e(),{},{equals:(t,n)=>JSON.stringify(t)===JSON.stringify(n)})}function Ge(){let{location:e}=M();return new Proxy({},{get:(t,n)=>e()[n],has:(t,n)=>n in e(),ownKeys:()=>Reflect.ownKeys(e()),getOwnPropertyDescriptor:(t,n)=>Object.getOwnPropertyDescriptor(e(),n)})}function Y(){let{router:e}=M();return(t,n)=>e.navigate(t,n)}var b=e=>typeof e=="function"?e():e,Et=new Set(["href","slot","class","className","active","activeClass","replace","children"]);function G(e){let t=(0,P.useContext)(Se),n=typeof document>"u",r=()=>t?.router.navigate(b(e.href)??"",{replace:b(e.replace)}),o=(0,y.createNativeElement)("a");(0,y.setAttribute)(o,"href",b(e.href)??""),e.slot&&(0,y.setAttribute)(o,"slot",b(e.slot));for(let i of Object.keys(e)){if(Et.has(i))continue;let u=e[i];u!=null&&typeof u!="function"&&(0,y.setAttribute)(o,i,String(u))}if(typeof o.addEventListener=="function")o.addEventListener("click",i=>{i.metaKey||i.ctrlKey||i.shiftKey||i.altKey||(i.preventDefault(),r())});else{let i=b(e.className??e.class)??"";i&&(0,y.setAttribute)(o,"class",i)}typeof o.addEventListener=="function"&&(0,p.createEffect)(()=>{let i=b(e.href)??"";o.setAttribute("href",i);let u=b(e.className??e.class)??"",d=b(e.activeClass)??"",g=b(e.active)??t?.location().pathname===i;o.className=[u,g?d:""].filter(Boolean).join(" ")});let s=e.children;return s!=null&&(0,y.insert)(o,s),o}var Z=require("@fluixi/dom"),c=require("@fluixi/dom"),T=require("@fluixi/dom");var h=require("@fluixi/dom");var R=require("@fluixi/reactive/store"),Dt="0.0.1",Qe="Fluixi";var Ze={createComponent:F,onMount:_,onUnmount:V,createEffect:a.createEffect,createMemo:a.createMemo,createSignal:a.createSignal,createContext:L,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:E,setOwner:a.setOwner,Router:X,Link:G,useRouter:M,useNavigate:Y,read:N.readSignal,reduce:N.reduceSignal,VERSION:Dt,FRAMEWORK_NAME:Qe};
1
+ /*! @fluixi/core v1.0.0-alpha.84 | (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.84";
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
+ var import_dom15 = require("@fluixi/dom");
891
+ var import_signal13 = require("@fluixi/reactive/signal");
892
+ var import_object = require("@fluixi/utils/object");
893
+ var import_compare = require("@fluixi/utils/compare");
894
+ var import_router = require("@fluixi/router");
895
+ var import_router2 = require("@fluixi/router");
896
+
897
+ // src/lib/router/data.ts
898
+ var import_signal11 = require("@fluixi/reactive/signal");
899
+
900
+ // src/lib/server/hydration.ts
901
+ var import_dom14 = require("@fluixi/dom");
902
+ var hydrationDataMap = /* @__PURE__ */ new Map();
903
+ function clearHydrationData() {
904
+ hydrationDataMap.clear();
905
+ }
906
+ function cleanupHydration() {
907
+ if (typeof window === "undefined") {
908
+ return;
909
+ }
910
+ const script = document.getElementById("__FLUIXI_HYDRATION__");
911
+ if (script) {
912
+ script.remove();
913
+ }
914
+ const walker = document.createTreeWalker(
915
+ document.body,
916
+ NodeFilter.SHOW_COMMENT,
917
+ null
918
+ );
919
+ const comments = [];
920
+ let node;
921
+ while (node = walker.nextNode()) {
922
+ const comment = node;
923
+ const text = comment.nodeValue || "";
924
+ if (text.startsWith("#") || text.startsWith("/")) {
925
+ comments.push(comment);
926
+ }
927
+ }
928
+ comments.forEach((comment) => comment.remove());
929
+ clearHydrationData();
930
+ }
931
+ if (typeof window !== "undefined") {
932
+ window.addEventListener("load", () => {
933
+ setTimeout(cleanupHydration, 100);
934
+ });
935
+ }
936
+
937
+ // src/lib/router/data.ts
938
+ var [revalidationVersion, setRevalidationVersion] = (0, import_signal11.createSignal)(0);
939
+ var RouteDataContext = createContext3(void 0, "route-data");
940
+ var RouteDataProvider = RouteDataContext.Provider;
941
+
942
+ // src/lib/router/index.ts
943
+ var import_signal14 = require("@fluixi/reactive/signal");
944
+ var RouterContext = (0, import_signal13.createContext)(void 0, "router");
945
+ var OutletContext = (0, import_signal13.createContext)(void 0, "outlet");
946
+ var LevelParamsContext = (0, import_signal13.createContext)(void 0, "route-params");
947
+ var RouteDataContext2 = (0, import_signal13.createContext)(void 0, "route-data");
948
+ function renderLayer(m, depth, base) {
949
+ let data;
950
+ const loader = m.route.data;
951
+ if (typeof loader === "function") {
952
+ let cancelled = false;
953
+ (0, import_signal12.onCleanup)(() => {
954
+ cancelled = true;
955
+ });
956
+ const owner = (0, import_signal12.getOwner)();
957
+ const [resource2] = (0, import_signal12.createResource)(
958
+ () => loader({ params: base.params, location: base.location }, owner, () => cancelled)
959
+ );
960
+ data = resource2;
961
+ }
962
+ const buildPage = () => RouteDataContext2.Provider({
963
+ value: data,
964
+ get children() {
965
+ return LevelParamsContext.Provider({
966
+ value: m.params,
967
+ get children() {
968
+ return OutletContext.Provider({
969
+ value: { depth, ...base },
970
+ get children() {
971
+ return (0, import_dom15.createComponent)(m.component, {});
972
+ }
973
+ });
974
+ }
975
+ });
976
+ }
977
+ });
978
+ if (!data) return buildPage();
979
+ const res = data;
980
+ const isLoading = () => res.loading;
981
+ const [ready, setReady] = (0, import_signal12.createSignal)((0, import_signal12.untrack)(() => !isLoading()));
982
+ (0, import_signal12.createEffect)(() => setReady(!isLoading()));
983
+ return (0, import_signal12.createMemo)(() => ready() ? buildPage() : null);
984
+ }
985
+ function renderChild(ctx) {
986
+ const childIdx = ctx.depth + 1;
987
+ const [childComp, setChildComp] = (0, import_signal12.createSignal)(
988
+ (0, import_signal12.untrack)(() => ctx.matched()[childIdx]?.component)
989
+ );
990
+ (0, import_signal12.createEffect)(() => {
991
+ const c = ctx.matched()[childIdx]?.component;
992
+ setChildComp(() => c);
993
+ });
994
+ return (0, import_signal12.createMemo)(() => {
995
+ const component = childComp();
996
+ if (!component) {
997
+ return ctx.notFound ? ctx.notFound() : null;
998
+ }
999
+ const m = (0, import_signal12.untrack)(() => ctx.matched())[childIdx];
1000
+ return renderLayer(m, childIdx, {
1001
+ matched: ctx.matched,
1002
+ params: ctx.params,
1003
+ location: ctx.location
1004
+ });
1005
+ });
1006
+ }
1007
+ function renderNotFound(notFound) {
1008
+ if (notFound == null) return buildDefaultNotFound();
1009
+ return typeof notFound === "function" ? (0, import_dom15.createComponent)(notFound, {}) : notFound;
1010
+ }
1011
+ function buildDefaultNotFound() {
1012
+ const el = (0, import_dom15.createNativeElement)("div");
1013
+ (0, import_dom15.setAttribute)(el, "class", "fx-not-found");
1014
+ (0, import_dom15.setAttribute)(el, "role", "main");
1015
+ (0, import_dom15.setAttribute)(
1016
+ el,
1017
+ "style",
1018
+ "min-height:60vh;display:grid;place-content:center;gap:.25rem;text-align:center;font-family:system-ui,-apple-system,sans-serif"
1019
+ );
1020
+ const h1 = (0, import_dom15.createNativeElement)("h1");
1021
+ (0, import_dom15.setAttribute)(h1, "style", "margin:0;font-size:2.5rem;font-weight:700");
1022
+ (0, import_dom15.insert)(h1, "404");
1023
+ const p = (0, import_dom15.createNativeElement)("p");
1024
+ (0, import_dom15.setAttribute)(p, "style", "margin:0;opacity:.7");
1025
+ (0, import_dom15.insert)(p, "This page could not be found.");
1026
+ el.appendChild(h1);
1027
+ el.appendChild(p);
1028
+ return el;
1029
+ }
1030
+ function Router(props) {
1031
+ const history = props.history ?? (0, import_router.createBrowserHistory)();
1032
+ const router = (0, import_router.createRouter)({
1033
+ routes: props.routes,
1034
+ base: props.base,
1035
+ history
1036
+ });
1037
+ const [state, setState] = (0, import_signal12.createSignal)(router.state());
1038
+ const unsub = router.subscribe(setState);
1039
+ (0, import_signal12.onCleanup)(() => {
1040
+ unsub();
1041
+ router.destroy();
1042
+ });
1043
+ const matched = (0, import_signal12.createMemo)(
1044
+ () => (state().match?.matched ?? []).filter((m) => m.component)
1045
+ );
1046
+ const ctx = {
1047
+ router,
1048
+ location: (0, import_signal12.createMemo)(() => state().location),
1049
+ params: (0, import_signal12.createMemo)(() => state().match?.params ?? {})
1050
+ };
1051
+ const root = {
1052
+ depth: -1,
1053
+ matched,
1054
+ params: ctx.params,
1055
+ location: ctx.location,
1056
+ // Only the root carries this: renderChild shows it when the URL matched nothing.
1057
+ notFound: () => renderNotFound(props.notFound)
1058
+ };
1059
+ let rootView;
1060
+ return RouterContext.Provider({
1061
+ value: ctx,
1062
+ get children() {
1063
+ return rootView ??= renderChild(root);
1064
+ }
1065
+ });
1066
+ }
1067
+ var _ssrRouterStub = {
1068
+ router: { navigate: () => {
1069
+ } },
1070
+ location: () => ({ pathname: "", search: "", hash: "", query: {} }),
1071
+ params: () => ({})
1072
+ };
1073
+ function useRouter() {
1074
+ const ctx = (0, import_signal13.useContext)(RouterContext);
1075
+ if (ctx) return ctx;
1076
+ if (typeof window === "undefined") return _ssrRouterStub;
1077
+ throw new Error("[router] useRouter must be used within <Router>");
1078
+ }
1079
+ function useParams() {
1080
+ const params = useRouter().params;
1081
+ return (0, import_signal12.createMemo)(() => params(), {}, {
1082
+ equals: (a, b) => JSON.stringify(a) === JSON.stringify(b)
1083
+ });
1084
+ }
1085
+ function useLocation() {
1086
+ const { location } = useRouter();
1087
+ return new Proxy({}, {
1088
+ get: (_t, key) => location()[key],
1089
+ has: (_t, key) => key in location(),
1090
+ ownKeys: () => Reflect.ownKeys(location()),
1091
+ getOwnPropertyDescriptor: (_t, key) => Object.getOwnPropertyDescriptor(location(), key)
1092
+ });
1093
+ }
1094
+ function useNavigate() {
1095
+ const { router } = useRouter();
1096
+ return (to, options) => router.navigate(to, options);
1097
+ }
1098
+ var read = (v) => typeof v === "function" ? v() : v;
1099
+ var LINK_OWN_PROPS = /* @__PURE__ */ new Set([
1100
+ "href",
1101
+ "slot",
1102
+ "class",
1103
+ "className",
1104
+ "active",
1105
+ "activeClass",
1106
+ "replace",
1107
+ "children"
1108
+ ]);
1109
+ function Link(props) {
1110
+ const ctx = (0, import_signal13.useContext)(RouterContext);
1111
+ const navigate = () => ctx?.router.navigate(read(props.href) ?? "", { replace: read(props.replace) });
1112
+ const a = (0, import_dom15.createNativeElement)("a");
1113
+ (0, import_dom15.setAttribute)(a, "href", read(props.href) ?? "");
1114
+ if (props.slot) (0, import_dom15.setAttribute)(a, "slot", read(props.slot));
1115
+ for (const k of Object.keys(props)) {
1116
+ if (LINK_OWN_PROPS.has(k)) continue;
1117
+ const v = props[k];
1118
+ if (v != null && typeof v !== "function") (0, import_dom15.setAttribute)(a, k, String(v));
1119
+ }
1120
+ if (typeof a.addEventListener === "function") {
1121
+ a.addEventListener("click", (e) => {
1122
+ if (e.metaKey || e.ctrlKey || e.shiftKey || e.altKey) return;
1123
+ e.preventDefault();
1124
+ navigate();
1125
+ });
1126
+ } else {
1127
+ const base = read(props.className ?? props.class) ?? "";
1128
+ if (base) (0, import_dom15.setAttribute)(a, "class", base);
1129
+ }
1130
+ if (typeof a.addEventListener === "function") {
1131
+ (0, import_signal12.createEffect)(() => {
1132
+ const href = read(props.href) ?? "";
1133
+ a.setAttribute("href", href);
1134
+ const base = read(props.className ?? props.class) ?? "";
1135
+ const activeClass = read(props.activeClass) ?? "";
1136
+ const active = read(props.active) ?? ctx?.location().pathname === href;
1137
+ a.className = [base, active ? activeClass : ""].filter(Boolean).join(" ");
1138
+ });
1139
+ }
1140
+ const linkChildren = props.children;
1141
+ if (linkChildren != null) (0, import_dom15.insert)(a, linkChildren);
1142
+ return a;
1143
+ }
1144
+
1145
+ // src/lib/core.ts
1146
+ var import_dom17 = require("@fluixi/dom");
1147
+ var import_dom18 = require("@fluixi/dom");
1148
+ var import_dom19 = require("@fluixi/dom");
1149
+
1150
+ // src/lib/control-flow.ts
1151
+ var import_dom16 = require("@fluixi/dom");
1152
+
1153
+ // src/lib/core.ts
1154
+ var import_store = require("@fluixi/reactive/store");
1155
+ var VERSION2 = "0.0.1";
1156
+ var FRAMEWORK_NAME = "Fluixi";
1157
+ var core_default = {
1158
+ // Core
1159
+ createComponent,
1160
+ // render,
1161
+ onMount,
1162
+ onUnmount,
1163
+ createEffect: import_signal15.createEffect,
1164
+ createMemo: import_signal15.createMemo,
1165
+ createSignal: import_signal15.createSignal,
1166
+ createContext: createContext3,
1167
+ createRoot: import_signal15.createRoot,
1168
+ createDeferred: import_signal15.createDeferred,
1169
+ createComputed: import_signal15.createComputed,
1170
+ createRenderEffect: import_signal15.createRenderEffect,
1171
+ createSelector: import_signal16.createSelector,
1172
+ onCleanup: import_signal15.onCleanup,
1173
+ getOwner: import_signal15.getOwner,
1174
+ runWithOwner: import_signal15.runWithOwner,
1175
+ batch: import_signal15.batch,
1176
+ untrack: import_signal15.untrack,
1177
+ useContext: useContext3,
1178
+ setOwner: import_signal15.setOwner,
1179
+ // Control Flow
1180
+ // Show,
1181
+ // For,
1182
+ // Switch,
1183
+ // Match,
1184
+ // Portal,
1185
+ // Dynamic,
1186
+ // Context
1187
+ // Provider,
1188
+ // Resources
1189
+ // createResource,
1190
+ // Router
1191
+ // createRouter,
1192
+ Router,
1193
+ Link,
1194
+ useRouter,
1195
+ useNavigate,
1196
+ read: import_operators.readSignal,
1197
+ reduce: import_operators.reduceSignal,
1198
+ // Meta
1199
+ VERSION: VERSION2,
1200
+ FRAMEWORK_NAME
1201
+ };