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