@fluixi/dom 1.0.0-alpha.53

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 (195) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +657 -0
  3. package/dist/cdn/dom.cjs +1 -0
  4. package/dist/cdn/dom.d.ts +16 -0
  5. package/dist/cdn/dom.d.ts.map +1 -0
  6. package/dist/cdn/dom.global.js +1 -0
  7. package/dist/cdn/dom.js +15 -0
  8. package/dist/cdn/dom.mjs +1 -0
  9. package/dist/index.cjs +1 -0
  10. package/dist/index.d.ts +38 -0
  11. package/dist/index.d.ts.map +1 -0
  12. package/dist/index.js +39 -0
  13. package/dist/index.mjs +1 -0
  14. package/dist/lib/component/index.cjs +1 -0
  15. package/dist/lib/component/index.d.ts +2 -0
  16. package/dist/lib/component/index.d.ts.map +1 -0
  17. package/dist/lib/component/index.js +1 -0
  18. package/dist/lib/component/index.mjs +1 -0
  19. package/dist/lib/component/modifiers.cjs +1 -0
  20. package/dist/lib/component/modifiers.d.ts +21 -0
  21. package/dist/lib/component/modifiers.d.ts.map +1 -0
  22. package/dist/lib/component/modifiers.js +171 -0
  23. package/dist/lib/component/modifiers.mjs +1 -0
  24. package/dist/lib/dom/delegate.cjs +1 -0
  25. package/dist/lib/dom/delegate.d.ts +17 -0
  26. package/dist/lib/dom/delegate.d.ts.map +1 -0
  27. package/dist/lib/dom/delegate.js +50 -0
  28. package/dist/lib/dom/delegate.mjs +1 -0
  29. package/dist/lib/dom/hydration-state.cjs +1 -0
  30. package/dist/lib/dom/hydration-state.d.ts +45 -0
  31. package/dist/lib/dom/hydration-state.d.ts.map +1 -0
  32. package/dist/lib/dom/hydration-state.js +94 -0
  33. package/dist/lib/dom/hydration-state.mjs +1 -0
  34. package/dist/lib/dom/hydration.cjs +1 -0
  35. package/dist/lib/dom/hydration.d.ts +10 -0
  36. package/dist/lib/dom/hydration.d.ts.map +1 -0
  37. package/dist/lib/dom/hydration.js +143 -0
  38. package/dist/lib/dom/hydration.mjs +1 -0
  39. package/dist/lib/dom/index.cjs +1 -0
  40. package/dist/lib/dom/index.d.ts +9 -0
  41. package/dist/lib/dom/index.d.ts.map +1 -0
  42. package/dist/lib/dom/index.js +12 -0
  43. package/dist/lib/dom/index.mjs +1 -0
  44. package/dist/lib/dom/integration.cjs +1 -0
  45. package/dist/lib/dom/integration.d.ts +16 -0
  46. package/dist/lib/dom/integration.d.ts.map +1 -0
  47. package/dist/lib/dom/integration.js +25 -0
  48. package/dist/lib/dom/integration.mjs +1 -0
  49. package/dist/lib/dom/island.cjs +1 -0
  50. package/dist/lib/dom/island.d.ts +23 -0
  51. package/dist/lib/dom/island.d.ts.map +1 -0
  52. package/dist/lib/dom/island.js +100 -0
  53. package/dist/lib/dom/island.mjs +1 -0
  54. package/dist/lib/dom/runtime.cjs +1 -0
  55. package/dist/lib/dom/runtime.d.ts +131 -0
  56. package/dist/lib/dom/runtime.d.ts.map +1 -0
  57. package/dist/lib/dom/runtime.js +1425 -0
  58. package/dist/lib/dom/runtime.mjs +1 -0
  59. package/dist/lib/dom/server/fx-data.cjs +1 -0
  60. package/dist/lib/dom/server/fx-data.d.ts +36 -0
  61. package/dist/lib/dom/server/fx-data.d.ts.map +1 -0
  62. package/dist/lib/dom/server/fx-data.js +60 -0
  63. package/dist/lib/dom/server/fx-data.mjs +1 -0
  64. package/dist/lib/dom/server/host.cjs +1 -0
  65. package/dist/lib/dom/server/host.d.ts +14 -0
  66. package/dist/lib/dom/server/host.d.ts.map +1 -0
  67. package/dist/lib/dom/server/host.js +38 -0
  68. package/dist/lib/dom/server/host.mjs +1 -0
  69. package/dist/lib/dom/server/index.cjs +1 -0
  70. package/dist/lib/dom/server/index.d.ts +13 -0
  71. package/dist/lib/dom/server/index.d.ts.map +1 -0
  72. package/dist/lib/dom/server/index.js +12 -0
  73. package/dist/lib/dom/server/index.mjs +1 -0
  74. package/dist/lib/dom/server/nodes.cjs +1 -0
  75. package/dist/lib/dom/server/nodes.d.ts +105 -0
  76. package/dist/lib/dom/server/nodes.d.ts.map +1 -0
  77. package/dist/lib/dom/server/nodes.js +304 -0
  78. package/dist/lib/dom/server/nodes.mjs +1 -0
  79. package/dist/lib/dom/server/render.cjs +1 -0
  80. package/dist/lib/dom/server/render.d.ts +45 -0
  81. package/dist/lib/dom/server/render.d.ts.map +1 -0
  82. package/dist/lib/dom/server/render.js +174 -0
  83. package/dist/lib/dom/server/render.mjs +1 -0
  84. package/dist/lib/dom/server/request-context.cjs +1 -0
  85. package/dist/lib/dom/server/request-context.d.ts +85 -0
  86. package/dist/lib/dom/server/request-context.d.ts.map +1 -0
  87. package/dist/lib/dom/server/request-context.js +122 -0
  88. package/dist/lib/dom/server/request-context.mjs +1 -0
  89. package/dist/lib/dom/server/serialize.cjs +1 -0
  90. package/dist/lib/dom/server/serialize.d.ts +2 -0
  91. package/dist/lib/dom/server/serialize.d.ts.map +1 -0
  92. package/dist/lib/dom/server/serialize.js +98 -0
  93. package/dist/lib/dom/server/serialize.mjs +1 -0
  94. package/dist/lib/dom/server-renderer.cjs +1 -0
  95. package/dist/lib/dom/server-renderer.d.ts +2 -0
  96. package/dist/lib/dom/server-renderer.d.ts.map +1 -0
  97. package/dist/lib/dom/server-renderer.js +5 -0
  98. package/dist/lib/dom/server-renderer.mjs +1 -0
  99. package/dist/lib/dom/types.cjs +1 -0
  100. package/dist/lib/dom/types.d.ts +119 -0
  101. package/dist/lib/dom/types.d.ts.map +1 -0
  102. package/dist/lib/dom/types.js +1 -0
  103. package/dist/lib/dom/types.mjs +0 -0
  104. package/dist/lib/dom/utils.cjs +1 -0
  105. package/dist/lib/dom/utils.d.ts +411 -0
  106. package/dist/lib/dom/utils.d.ts.map +1 -0
  107. package/dist/lib/dom/utils.js +746 -0
  108. package/dist/lib/dom/utils.mjs +1 -0
  109. package/dist/lib/element/index.cjs +1 -0
  110. package/dist/lib/element/index.d.ts +2 -0
  111. package/dist/lib/element/index.d.ts.map +1 -0
  112. package/dist/lib/element/index.js +1 -0
  113. package/dist/lib/element/index.mjs +0 -0
  114. package/dist/lib/element/types.cjs +1 -0
  115. package/dist/lib/element/types.d.ts +129 -0
  116. package/dist/lib/element/types.d.ts.map +1 -0
  117. package/dist/lib/element/types.js +5 -0
  118. package/dist/lib/element/types.mjs +0 -0
  119. package/dist/lib/flow/class-map.cjs +1 -0
  120. package/dist/lib/flow/class-map.d.ts +40 -0
  121. package/dist/lib/flow/class-map.d.ts.map +1 -0
  122. package/dist/lib/flow/class-map.js +44 -0
  123. package/dist/lib/flow/class-map.mjs +1 -0
  124. package/dist/lib/flow/dynamic.cjs +1 -0
  125. package/dist/lib/flow/dynamic.d.ts +27 -0
  126. package/dist/lib/flow/dynamic.d.ts.map +1 -0
  127. package/dist/lib/flow/dynamic.js +30 -0
  128. package/dist/lib/flow/dynamic.mjs +1 -0
  129. package/dist/lib/flow/error-boundary.cjs +1 -0
  130. package/dist/lib/flow/error-boundary.d.ts +34 -0
  131. package/dist/lib/flow/error-boundary.d.ts.map +1 -0
  132. package/dist/lib/flow/error-boundary.js +49 -0
  133. package/dist/lib/flow/error-boundary.mjs +1 -0
  134. package/dist/lib/flow/for.cjs +1 -0
  135. package/dist/lib/flow/for.d.ts +64 -0
  136. package/dist/lib/flow/for.d.ts.map +1 -0
  137. package/dist/lib/flow/for.js +28 -0
  138. package/dist/lib/flow/for.mjs +1 -0
  139. package/dist/lib/flow/index-flow.cjs +1 -0
  140. package/dist/lib/flow/index-flow.d.ts +34 -0
  141. package/dist/lib/flow/index-flow.d.ts.map +1 -0
  142. package/dist/lib/flow/index-flow.js +27 -0
  143. package/dist/lib/flow/index-flow.mjs +1 -0
  144. package/dist/lib/flow/index.cjs +1 -0
  145. package/dist/lib/flow/index.d.ts +20 -0
  146. package/dist/lib/flow/index.d.ts.map +1 -0
  147. package/dist/lib/flow/index.js +11 -0
  148. package/dist/lib/flow/index.mjs +1 -0
  149. package/dist/lib/flow/portal.cjs +1 -0
  150. package/dist/lib/flow/portal.d.ts +30 -0
  151. package/dist/lib/flow/portal.d.ts.map +1 -0
  152. package/dist/lib/flow/portal.js +44 -0
  153. package/dist/lib/flow/portal.mjs +1 -0
  154. package/dist/lib/flow/show.cjs +1 -0
  155. package/dist/lib/flow/show.d.ts +35 -0
  156. package/dist/lib/flow/show.d.ts.map +1 -0
  157. package/dist/lib/flow/show.js +162 -0
  158. package/dist/lib/flow/show.mjs +1 -0
  159. package/dist/lib/flow/style-map.cjs +1 -0
  160. package/dist/lib/flow/style-map.d.ts +49 -0
  161. package/dist/lib/flow/style-map.d.ts.map +1 -0
  162. package/dist/lib/flow/style-map.js +58 -0
  163. package/dist/lib/flow/style-map.mjs +1 -0
  164. package/dist/lib/flow/switch.cjs +1 -0
  165. package/dist/lib/flow/switch.d.ts +63 -0
  166. package/dist/lib/flow/switch.d.ts.map +1 -0
  167. package/dist/lib/flow/switch.js +69 -0
  168. package/dist/lib/flow/switch.mjs +1 -0
  169. package/dist/lib/flow/utils.cjs +1 -0
  170. package/dist/lib/flow/utils.d.ts +19 -0
  171. package/dist/lib/flow/utils.d.ts.map +1 -0
  172. package/dist/lib/flow/utils.js +34 -0
  173. package/dist/lib/flow/utils.mjs +1 -0
  174. package/dist/lib/index.cjs +1 -0
  175. package/dist/lib/index.d.ts +21 -0
  176. package/dist/lib/index.d.ts.map +1 -0
  177. package/dist/lib/index.js +30 -0
  178. package/dist/lib/index.mjs +1 -0
  179. package/dist/lib/jsx/control-flow/flow.cjs +1 -0
  180. package/dist/lib/jsx/control-flow/flow.d.ts +2 -0
  181. package/dist/lib/jsx/control-flow/flow.d.ts.map +1 -0
  182. package/dist/lib/jsx/control-flow/flow.js +627 -0
  183. package/dist/lib/jsx/control-flow/flow.mjs +0 -0
  184. package/dist/lib/jsx/control-flow/for-flow.cjs +1 -0
  185. package/dist/lib/jsx/control-flow/for-flow.d.ts +2 -0
  186. package/dist/lib/jsx/control-flow/for-flow.d.ts.map +1 -0
  187. package/dist/lib/jsx/control-flow/for-flow.js +1 -0
  188. package/dist/lib/jsx/control-flow/for-flow.mjs +0 -0
  189. package/dist/lib/shared/types.cjs +1 -0
  190. package/dist/lib/shared/types.d.ts +47 -0
  191. package/dist/lib/shared/types.d.ts.map +1 -0
  192. package/dist/lib/shared/types.js +1 -0
  193. package/dist/lib/shared/types.mjs +0 -0
  194. package/dist/tsconfig.lib.tsbuildinfo +1 -0
  195. package/package.json +99 -0
@@ -0,0 +1,143 @@
1
+ /**
2
+ * DOM-reuse hydration walker.
3
+ *
4
+ * Walk the server-rendered DOM with a single depth-first cursor, adopting the
5
+ * existing nodes instead of recreating them. The runtime's leaf factories call the
6
+ * walker registered here (hydrateElement/hydrateText/hydrateMarker); insert() and
7
+ * control flow use the small cursor helpers in ./hydration-state.ts. This module is
8
+ * the heavy half — pulled in only when an app imports hydrate().
9
+ *
10
+ * This matches the depth-first nested order the imperative codegen emits (each
11
+ * element is fully built before the next sibling is created).
12
+ */
13
+ import { render } from './runtime.js';
14
+ import { setResourceIdSource, setServerDataGetter } from '@fluixi/reactive/signal';
15
+ import { getServerData } from './server/fx-data.js';
16
+ import { hydration, registerHydrationWalker } from './hydration-state.js';
17
+ /**
18
+ * Re-sync the cursor onto the next adoptable server node. Two things can leave it off-target
19
+ * after an element subtree is built by user code (e.g. `list.map(...)`): it's `null` (sibling
20
+ * list exhausted — ascend to an open parent's next sibling) or it's a client-only empty-text
21
+ * insertion anchor (skip past it). Loop until a real node is found or nothing's left.
22
+ */
23
+ function recoverCursor() {
24
+ for (;;) {
25
+ while (hydration.cursor &&
26
+ hydration.cursor.nodeType === 3 &&
27
+ hydration.cursor.data === '') {
28
+ hydration.cursor = hydration.cursor.nextSibling;
29
+ }
30
+ if (hydration.cursor != null || !hydration.parents.length)
31
+ return;
32
+ hydration.cursor = hydration.parents.pop().nextSibling;
33
+ }
34
+ }
35
+ // Void elements have no children — ascend to nextSibling instead of descending into a
36
+ // null firstChild (which would strand the cursor). Matches VOID_ELEMENTS in the serializer.
37
+ const VOID_ELEMENTS = new Set([
38
+ 'area', 'base', 'br', 'col', 'embed', 'hr', 'img', 'input',
39
+ 'link', 'meta', 'param', 'source', 'track', 'wbr',
40
+ ]);
41
+ // Tree-shaken out of production (vite/esbuild replace process.env.NODE_ENV).
42
+ const DEV = typeof process !== 'undefined' && process.env && process.env.NODE_ENV !== 'production';
43
+ /** Dev-only: warn when the cursor node diverges from what the client builds. */
44
+ function warnMismatch(expected, found) {
45
+ const f = found.nodeType === 1
46
+ ? `<${found.tagName.toLowerCase()}>`
47
+ : found.nodeType === 3
48
+ ? `text ${JSON.stringify((found.nodeValue ?? '').slice(0, 24))}`
49
+ : found.nodeType === 8
50
+ ? 'comment'
51
+ : 'node';
52
+ console.warn(`[fluixi] hydration mismatch: expected ${expected} but the server DOM has ${f}. ` +
53
+ `Server and client rendered different markup; recreating this node on the client. ` +
54
+ `Check for non-deterministic render (Date.now(), Math.random(), browser-only branches, untransported data).`);
55
+ }
56
+ /** Reuse the matched element at the cursor and descend into its children. */
57
+ function hydrateElement(tag) {
58
+ recoverCursor();
59
+ const c = hydration.cursor;
60
+ if (c && c.nodeType === 1 && c.tagName.toLowerCase() === tag.toLowerCase()) {
61
+ if (VOID_ELEMENTS.has(tag.toLowerCase())) {
62
+ hydration.cursor = c.nextSibling;
63
+ }
64
+ else {
65
+ hydration.parents.push(c);
66
+ hydration.cursor = c.firstChild;
67
+ }
68
+ return c;
69
+ }
70
+ if (DEV && c)
71
+ warnMismatch(`<${tag}>`, c);
72
+ return null;
73
+ }
74
+ /** Reuse the text node at the cursor (syncing its value) and advance. */
75
+ function hydrateText(value) {
76
+ // Empty text is a client-only insertion anchor (createTextNode('') in insert()); the
77
+ // server serialized nothing for it, so never consume a server text node — build fresh.
78
+ if (value === '')
79
+ return null;
80
+ recoverCursor();
81
+ const c = hydration.cursor;
82
+ if (c && c.nodeType === 3) {
83
+ hydration.cursor = c.nextSibling;
84
+ if (c.nodeValue !== value)
85
+ c.nodeValue = value;
86
+ return c;
87
+ }
88
+ if (DEV && c)
89
+ warnMismatch(`text ${JSON.stringify(value.slice(0, 24))}`, c);
90
+ return null;
91
+ }
92
+ /** Reuse a matching comment marker at the cursor and advance. */
93
+ function hydrateMarker(value) {
94
+ recoverCursor();
95
+ const c = hydration.cursor;
96
+ if (c && c.nodeType === 8 && c.data === value) {
97
+ hydration.cursor = c.nextSibling;
98
+ return c;
99
+ }
100
+ // Empty markers ARE serialized (`<!---->`), so a missing/diverged one is a real divergence.
101
+ if (DEV && c)
102
+ warnMismatch(`marker <!--${value.slice(0, 24)}-->`, c);
103
+ return null;
104
+ }
105
+ // Registered on first hydrate() rather than at module load, so it survives
106
+ // sideEffects:false tree-shaking (tied to the used hydrate export).
107
+ let _walkerRegistered = false;
108
+ function ensureWalker() {
109
+ if (_walkerRegistered)
110
+ return;
111
+ _walkerRegistered = true;
112
+ registerHydrationWalker({ hydrateElement, hydrateText, hydrateMarker });
113
+ }
114
+ /**
115
+ * Hydrate `element` over the server-rendered markup already in `container`: reuse the
116
+ * existing DOM and wire events/reactivity in place (no re-render).
117
+ *
118
+ * `options.resourceNamespace` scopes resource ids for partial (island) hydration.
119
+ */
120
+ export function hydrate(element, container, options) {
121
+ ensureWalker();
122
+ hydration.active = true;
123
+ hydration.cursor = container.firstChild;
124
+ hydration.parents = [];
125
+ // Seed resources from server-serialized data (__FX_DATA__) so they don't refetch — ids
126
+ // match by creation order. hydrate() is synchronous, so setting these module-globals is safe.
127
+ const data = getServerData();
128
+ const ns = options?.resourceNamespace;
129
+ let rid = 0;
130
+ setResourceIdSource(() => (ns ? `${ns}:r${rid++}` : `r${rid++}`));
131
+ setServerDataGetter(data ? (id) => (id in data ? { value: data[id] } : undefined) : null);
132
+ try {
133
+ return render(element, container);
134
+ }
135
+ finally {
136
+ // Stop DOM-reuse after the synchronous pass, but KEEP the resource id source + server-data
137
+ // getter active — lazy file-routes create resources after this returns and still seed
138
+ // from __FX_DATA__ by creation order (later ids simply aren't present and fetch).
139
+ hydration.active = false;
140
+ hydration.cursor = null;
141
+ hydration.parents = [];
142
+ }
143
+ }
@@ -0,0 +1 @@
1
+ import{isSignal as h}from"@fluixi/reactive/signal";function N(n){return typeof n=="function"&&n[Symbol.for("fluixi-component")]===!0}import{batch as q,createEffect as pe,createRenderEffect as J,createRoot as G,onCleanup as U,readChildren as he}from"@fluixi/reactive/signal";var L=typeof document>"u";var D=Symbol.for("fluixi.server-node"),$=null;function M(){if(!$)throw new Error("[fluixi] server render ran before @fluixi/dom/server loaded");return $}function S(n){return n!=null&&n[D]===!0?!0:typeof Node<"u"&&n instanceof Node}function R(n){return n!=null&&n[D]===!0?n.nodeType===3:typeof Text<"u"&&n instanceof Text}var l={active:!1,cursor:null,parents:[]},k=null;function F(n){k=n}function O(){return k}function A(n,e){return l.active&&e.parentNode===n}function j(n){let e=l.parents.lastIndexOf(n);e!==-1&&(l.parents.length=e),l.cursor=n.nextSibling}function m(n){if(L)return M().createText(n);if(l.active){let e=O()?.hydrateText(n);if(e)return e}return document.createTextNode(n)}var g=0,Y=200;function z(n,e,t,i,d){let f=i,s=new Map;return J(()=>{let r;if(N(n)&&!h(n)){if(!s.has(n)){g++;try{let o=n();s.set(n,o)}finally{g--}}for(r=s.get(n);typeof r=="function"&&h(r);)r=r()}else for(r=n();typeof r=="function"&&h(r);)r=r();{let o=0;for(;typeof r=="function"&&o++<50;)if(N(r)){if(!s.has(r)){let u=r;g++;try{let a=u();s.set(u,a)}finally{g--}}r=s.get(r)}else if(h(r))r=r();else if(r=r(),typeof r!="function"||!h(r)&&!N(r))break}g++;try{f=E(e,r,t,f,s),d(f)}finally{g--}})}function I(n,e,t,i){if(g>Y)return console.error("[insert] Exceeded max call depth — possible infinite loop."),()=>null;t!==void 0&&!t&&(t=m(""),n.appendChild(t));let d=i??null;if(typeof e!="function"){g++;try{d=E(n,e,t,null)}finally{g--}return()=>d}let f=z(e,n,t,d,s=>{d=s});return()=>(f?.(),d)}function E(n,e,t,i,d){if(e==null||typeof e=="boolean")return b(n,i,t);if(typeof e=="function")for(;typeof e=="function";)e=e();if(e==null||typeof e=="boolean")return b(n,i,t);if(T(e)){let s=m("");return Array.isArray(i)?i.length>0?(n.replaceChild(s,i[0]),b(n,i.slice(1),t)):p(n,s,t):i?n.replaceChild(s,i):p(n,s,t),e.then(r=>{s.parentNode===n&&E(n,r,s.nextSibling,s)}).catch(r=>{console.error("Error resolving promise in insertExpression:",r)}),s}let f=typeof e;if(f==="string"||f==="number"){if(f==="number"&&(e=String(e)),Array.isArray(i)){if(i.length===0){let r=m(e);return p(n,r,t),r}if(i.length===1&&i[0].nodeType===3)return i[0].data=e,i;i=b(n,i,t)}if(i&&R(i))return i.data=e,i;let s=m(e);return i&&i.parentNode===n?n.replaceChild(s,i):A(n,s)||p(n,s,t),s}if(S(e))return A(n,e)?(j(e),e):Array.isArray(i)?(i.length===0?p(n,e,t):i[0].parentNode===n?(n.replaceChild(e,i[0]),b(n,i.slice(1),t)):p(n,e,t),e):(i?i!==e&&(i.parentNode===n?n.replaceChild(e,i):p(n,e,t)):p(n,e,t),e);if(Array.isArray(e)){let s=[],r=Array.isArray(i)?i:i?[i]:[],o=[];x(e,s,n,t,!0,d,o);let u=Q(n,r,s,t);for(let a of o){let c=I(n,a.sig,a.marker);U(()=>{b(n,c()),a.marker.parentNode===n&&n.removeChild(a.marker)})}return u}if(f==="object"&&e!==null&&typeof e=="object"){let s=e;if("_$litType$"in s||"_$litDirective$"in s)return E(n,V(e),t,i);if("type"in s&&"props"in s){let r=s;if(typeof r.type=="function"){let o=r.type(r.props||{});return E(n,o,t,i)}}}return b(n,i,t)}function x(n,e,t,i,d=!0,f,s){for(let r=0;r<n.length;r++){let o=n[r];if(!(o==null||typeof o=="boolean")){for(;typeof o=="function"&&!T(o)&&!h(o)&&!N(o)&&(o=o(),!(o==null||typeof o=="boolean")););if(!(o==null||typeof o=="boolean")){if(typeof o=="function"){let u;for(N(o)&&!h(o)?(f||(f=new Map),f.has(o)||f.set(o,o()),u=f.get(o)):u=o();typeof u=="function"&&!T(u)&&!h(u)&&!N(u);)f||(f=new Map),f.has(u)||f.set(u,u()),u=f.get(u);if(u==null||typeof u=="boolean")continue;if(typeof u=="function"){if(h(u)){if(s){let c=m("");e.push(c),s.push({marker:c,sig:u});continue}let a=u();for(;typeof a=="function"&&h(a);)a=a();if(a==null||typeof a=="boolean")continue;Array.isArray(a)?x(a,e,t,i,d,f):x([a],e,t,i,d,f);continue}continue}Array.isArray(u)?x(u,e,t,i,d,f,s):x([u],e,t,i,d,f,s);continue}if(T(o)){let u=m("");e.push(u),o.then(a=>{if(u.parentNode){let c=[];if(x([a],c,u.parentNode,void 0,!1,f),c.length>0){u.parentNode.replaceChild(c[0],u);for(let y=1;y<c.length;y++)u.parentNode?.insertBefore(c[y],c[y-1].nextSibling)}}}).catch(a=>console.error("Error resolving promise in array:",a));continue}if(Array.isArray(o)){x(o,e,t,i,d,f,s);continue}if(S(o)){e.push(o);continue}if(typeof o=="object"&&o!==null&&("_$litType$"in o||"_$litDirective$"in o)){let u=V(o);for(let a of u)e.push(a);continue}if(typeof o=="object"&&o!==null&&"type"in o&&"props"in o){let u=o;if(typeof u.type=="function"){let a=u.type(u.props||{});Array.isArray(a)?x(a,e,t,i,!1,f):x([a],e,t,i,!1,f);continue}}if(typeof o=="string"||typeof o=="number"){let u=String(o);if(u.trim()===""&&u!==" ")continue;e.push(m(u));continue}e.push(m(String(o)))}}}}function Q(n,e,t,i){for(let c=0;c<t.length;c++)t[c].parentNode!==null&&t[c].parentNode!==n&&(t=t.slice(),t[c]=t[c].cloneNode(!0));let d=t.length,f=e.length,s=d,r=0,o=0,u=f>0?e[f-1].nextSibling??void 0:i,a=null;for(;r<f||o<s;){if(e[r]===t[o]){r++,o++;continue}for(;f>r&&s>o&&e[f-1]===t[s-1];)f--,s--;if(f===r){let c=s<d?o?t[o-1].nextSibling??void 0:t[s-o]:u;for(;o<s;)p(n,t[o++],c)}else if(s===o)for(;r<f;)(!a||!a.has(e[r]))&&e[r].parentNode===n&&n.removeChild(e[r]),r++;else if(e[r]===t[s-1]&&t[o]===e[f-1]){let c=e[--f].nextSibling;p(n,t[o++],e[r++].nextSibling),p(n,t[--s],c),e[f]=e[r-1]}else{if(!a){a=new Map;let y=o;for(;y<s;)a.set(t[y],y++)}let c=a.get(e[r]);if(c!=null)if(o<c&&c<s){let y=r,w=1;for(;++y<f&&y<s&&!(!a.has(e[y])||a.get(e[y])!==c+w);)w++;if(w>c-o){let X=e[r];for(;o<c;)p(n,t[o++],X)}else e[r].parentNode===n?n.replaceChild(t[o++],e[r++]):(p(n,t[o++],u),r++)}else r++;else e[r].parentNode===n&&n.removeChild(e[r]),r++}}return t}function b(n,e,t){if(e)if(Array.isArray(e))for(let i=0;i<e.length;i++)e[i].parentNode===n&&n.removeChild(e[i]);else e.parentNode===n&&n.removeChild(e);return null}function p(n,e,t){l.active&&e.parentNode===n||(t&&t.parentNode===n?n.insertBefore(e,t):n.appendChild(e))}var H=null;function V(n){let e=[];if(!H)return console.warn("Lit render not registered. Call registerLitRender first."),e;try{let t=document.createElement("div");for(H(n,t);t.firstChild;)e.push(t.firstChild),t.removeChild(t.firstChild)}catch(t){console.warn("Could not render Lit template:",t)}return e}function T(n){return n!=null&&(typeof n=="object"||typeof n=="function")&&typeof n.then=="function"||n instanceof Promise}function K(n,e,t){if(!e)throw new Error("Container element is required");let i,d,f=[];return G(s=>{q(()=>{l.active||(e.textContent=""),I(e,n)}),d=s}),()=>{d?.(),i?.(),f.forEach(s=>s()),e.textContent=""}}import{setResourceIdSource as ee,setServerDataGetter as ne}from"@fluixi/reactive/signal";var Z="__FX_DATA__";var v;function W(){let n=globalThis.__FX_DATA__;if(n)return n;if(v!==void 0)return v;let e=null;if(typeof document<"u"){let t=document.getElementById(Z)?.textContent;if(t)try{e=JSON.parse(t)}catch{e=null}}return v=e}function C(){for(;;){for(;l.cursor&&l.cursor.nodeType===3&&l.cursor.data==="";)l.cursor=l.cursor.nextSibling;if(l.cursor!=null||!l.parents.length)return;l.cursor=l.parents.pop().nextSibling}}var te=new Set(["area","base","br","col","embed","hr","img","input","link","meta","param","source","track","wbr"]),_=typeof process<"u"&&process.env&&!1;function P(n,e){let t=e.nodeType===1?`<${e.tagName.toLowerCase()}>`:e.nodeType===3?`text ${JSON.stringify((e.nodeValue??"").slice(0,24))}`:e.nodeType===8?"comment":"node";console.warn(`[fluixi] hydration mismatch: expected ${n} but the server DOM has ${t}. Server and client rendered different markup; recreating this node on the client. Check for non-deterministic render (Date.now(), Math.random(), browser-only branches, untransported data).`)}function oe(n){C();let e=l.cursor;return e&&e.nodeType===1&&e.tagName.toLowerCase()===n.toLowerCase()?(te.has(n.toLowerCase())?l.cursor=e.nextSibling:(l.parents.push(e),l.cursor=e.firstChild),e):(_&&e&&P(`<${n}>`,e),null)}function re(n){if(n==="")return null;C();let e=l.cursor;return e&&e.nodeType===3?(l.cursor=e.nextSibling,e.nodeValue!==n&&(e.nodeValue=n),e):(_&&e&&P(`text ${JSON.stringify(n.slice(0,24))}`,e),null)}function ie(n){C();let e=l.cursor;return e&&e.nodeType===8&&e.data===n?(l.cursor=e.nextSibling,e):(_&&e&&P(`marker <!--${n.slice(0,24)}-->`,e),null)}var B=!1;function se(){B||(B=!0,F({hydrateElement:oe,hydrateText:re,hydrateMarker:ie}))}function Ae(n,e,t){se(),l.active=!0,l.cursor=e.firstChild,l.parents=[];let i=W(),d=t?.resourceNamespace,f=0;ee(()=>d?`${d}:r${f++}`:`r${f++}`),ne(i?s=>s in i?{value:i[s]}:void 0:null);try{return K(n,e)}finally{l.active=!1,l.cursor=null,l.parents=[]}}export{Ae as hydrate};
@@ -0,0 +1 @@
1
+ "use strict";var K=Object.defineProperty;var _e=Object.getOwnPropertyDescriptor;var $e=Object.getOwnPropertyNames;var Ie=Object.prototype.hasOwnProperty;var De=(e,t)=>{for(var n in t)K(e,n,{get:t[n],enumerable:!0})},Oe=(e,t,n,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of $e(t))!Ie.call(e,r)&&r!==n&&K(e,r,{get:()=>t[r],enumerable:!(o=_e(t,r))||o.enumerable});return e};var je=e=>Oe(K({},"__esModule",{value:!0}),e);var on={};De(on,{Island:()=>Le,JSX_PROPERTIES:()=>$,SVG_ELEMENTS:()=>We,SVG_NAMESPACE:()=>M,VOID_ELEMENTS:()=>Ve,addClass:()=>Be,addDelegatedEventListener:()=>Ne,appendChildren:()=>tt,applyElementProp:()=>_,applyProps:()=>_t,captureHydrationCursor:()=>ge,cleanChildren:()=>T,cloneTemplate:()=>Ct,closest:()=>Ge,createComponent:()=>Kt,createElement:()=>Qe,createNativeElement:()=>ee,createPortal:()=>Ot,createTemplate:()=>St,delegate:()=>it,delegateEvents:()=>Q,escapeHTML:()=>qt,fnName:()=>vt,generateID:()=>Et,getAttribute:()=>Ue,getGlobal:()=>mt,getLitEventName:()=>He,getOffset:()=>rt,getStableElementId:()=>ht,getStyle:()=>Ze,handleRef:()=>te,hasClass:()=>ze,hydrate:()=>V,hydrateAdvancePast:()=>Ee,hydrateIslands:()=>Pe,initializeIntegration:()=>Wt,insert:()=>A,insertExpression:()=>v,intergartionInitialized:()=>Gt,isAccessor:()=>Ht,isCustomElement:()=>le,isDOMNode:()=>pt,isDelegatedEvent:()=>Tt,isDomElement:()=>I,isDomNode:()=>S,isDomText:()=>D,isEventHandler:()=>qe,isFunction:()=>wt,isIntegrationInitialized:()=>Bt,isJSXTemplate:()=>dt,isLitTemplateResult:()=>ce,isNativeElement:()=>jt,isPromise:()=>R,isReactElement:()=>ut,isSVGElement:()=>kt,isServer:()=>E,isTemplateFactory:()=>ct,isVisible:()=>nt,iterateFn:()=>At,makeArrayFlat:()=>Te,mergeProps:()=>$t,observeIntersection:()=>at,observeResize:()=>ft,query:()=>G,queryAll:()=>Ke,registerCreateComponent:()=>Vt,registerGlobal:()=>yt,registerLitRender:()=>Dt,removeAttribute:()=>Ye,removeChildren:()=>et,removeClass:()=>Je,removeDelegatedEventListener:()=>Y,render:()=>oe,renderLitToNodes:()=>ne,resetIntegration:()=>Jt,runHydrationAt:()=>xe,runWithoutHydration:()=>he,scrollIntoView:()=>ot,setAttribute:()=>x,setClassList:()=>P,setClassName:()=>L,setDynamicAttribute:()=>we,setDynamicProperty:()=>Se,setProperty:()=>j,setServerMode:()=>pe,setStyle:()=>k,setStyles:()=>ue,shouldSetAsProperty:()=>Fe,splitProps:()=>It,spread:()=>Mt,toAttributeName:()=>ke,toggleClass:()=>Xe,waitForElement:()=>st});module.exports=je(on);function ke(e){return e.startsWith("aria-")||e.startsWith("data-")?e:/[A-Z]/.test(e)?e.replace(/([A-Z])/g,"-$1").toLowerCase():e}function qe(e){return e.startsWith("@")||e.startsWith("on")&&e.length>2}function He(e){return e.startsWith("@")?e.slice(1):e.startsWith("on")?e.slice(2).toLowerCase():e}function Fe(e,t){let n=new Set(["checked","value","selected","disabled","readonly","required","multiple","open","contenteditable","draggable","spellcheck"]),o={input:new Set(["value","checked","indeterminate"]),textarea:new Set(["value"]),select:new Set(["value"]),option:new Set(["selected","value"]),audio:new Set(["volume","currentTime","paused"]),video:new Set(["volume","currentTime","paused"]),img:new Set(["src","srcset"]),iframe:new Set(["src"]),a:new Set(["href"])};return n.has(t)||o[e]&&o[e].has(t)}var Ve=new Set(["area","base","br","col","embed","hr","img","input","link","meta","param","source","track","wbr"]),We=new Set(["svg","g","path","circle","rect","line","polyline","polygon","ellipse","text","tspan","use","defs","symbol","mask","clipPath","pattern","linearGradient","radialGradient","stop","filter","feGaussianBlur","feOffset","feMerge","feMergeNode","foreignObject"]),M="http://www.w3.org/2000/svg";function le(e){return e.localName.includes("-")}function _(e,t,n,o=!1){if(n==null){e.removeAttribute(t);return}if(le(e)){e[t]=n;return}x(e,t,n,o)}var $=new Set(["className","value","checked","selected","innerHTML","innerText","textContent","indeterminate","htmlFor"]);function G(e,t=document){return t.querySelector(e)}function Ke(e,t=document){return Array.from(t.querySelectorAll(e))}function Ge(e,t){return e.closest(t)}function Be(e,...t){e.classList.add(...t)}function Je(e,...t){e.classList.remove(...t)}function Xe(e,...t){t.forEach(n=>e.classList.toggle(n))}function ze(e,t){return e.classList.contains(t)}function x(e,t,n,o=!1){if(n==null||n===!1){e.removeAttribute(t);return}if(n===!0){e.setAttribute(t,"");return}if(typeof n=="object"){e.setAttribute(t,JSON.stringify(n));return}e.setAttribute(t,String(n))}function Ue(e,t){return e.getAttribute(t)}function Ye(e,t){e.removeAttribute(t)}function ue(e,t){Object.assign(e.style,t)}function Ze(e,t){return window.getComputedStyle(e).getPropertyValue(t)}function Qe(e,t={},...n){let o=document.createElement(e);return Object.entries(t).forEach(([r,a])=>{if(r==="class"||r==="className")o.className=a;else if(r==="style"&&typeof a=="object")ue(o,a);else if(r.startsWith("on")&&typeof a=="function"){let s=r.slice(2).toLowerCase();o.addEventListener(s,a)}else x(o,r,a)}),n.forEach(r=>{typeof r=="string"?o.appendChild(document.createTextNode(r)):o.appendChild(r)}),o}function et(e){for(;e.firstChild;)e.removeChild(e.firstChild)}function tt(e,...t){t.forEach(n=>{typeof n=="string"?e.appendChild(document.createTextNode(n)):e.appendChild(n)})}function nt(e){let t=e.getBoundingClientRect();return t.top>=0&&t.left>=0&&t.bottom<=window.innerHeight&&t.right<=window.innerWidth}function ot(e,t={behavior:"smooth",block:"nearest"}){e.scrollIntoView(t)}function rt(e){let t=e.getBoundingClientRect();return{top:t.top+window.pageYOffset,left:t.left+window.pageXOffset}}function it(e,t,n,o){let r=a=>{let s=a.target.closest(n);s&&e.contains(s)&&o(a,s)};return e.addEventListener(t,r),()=>{e.removeEventListener(t,r)}}function st(e,t=5e3){return new Promise((n,o)=>{let r=G(e);if(r){n(r);return}let a=new MutationObserver(()=>{let i=G(e);i&&(a.disconnect(),clearTimeout(s),n(i))});a.observe(document.body,{childList:!0,subtree:!0});let s=setTimeout(()=>{a.disconnect(),o(new Error(`Element ${e} not found within ${t}ms`))},t)})}function at(e,t,n={}){let o=new IntersectionObserver(r=>{r.forEach(a=>{t(a.isIntersecting)})},n);return o.observe(e),()=>{o.disconnect()}}function ft(e,t){let n=new ResizeObserver(o=>{o.forEach(t)});return n.observe(e),()=>{n.disconnect()}}var lt=typeof Symbol=="function"&&Symbol.for?Symbol.for("react.element"):60103;function ut(e){return typeof e=="object"&&e!==null&&e.$$typeof===lt}function ce(e){return e&&typeof e=="object"&&e.strings&&Array.isArray(e.strings)&&e.values&&Array.isArray(e.values)}function ct(e){if(typeof e!="function")return!1;try{let t=e();return ce(t)}catch{return!1}}function dt(e){return typeof e=="object"&&e!==null&&(e.$$typeof==="template"||typeof e.type=="function")}function pt(e){return e instanceof Node}function yt(e,t,n="Fluixi"){typeof globalThis<"u"&&(typeof globalThis[n]>"u"&&(globalThis[n]={}),typeof globalThis[n][e]>"u"&&(globalThis[n][e]=t))}function mt(e,t,n="Fluixi"){return typeof globalThis<"u"&&typeof globalThis[n]<"u"&&typeof globalThis[n][e]<"u"?globalThis[n][e]:t}var y=require("@fluixi/reactive/signal");function h(e){return typeof e=="function"&&e[Symbol.for("fluixi-component")]===!0}var p=require("@fluixi/reactive/signal");var E=typeof document>"u";function pe(e){E=e}var B=Symbol.for("fluixi.server-node"),de=null;function J(){if(!de)throw new Error("[fluixi] server render ran before @fluixi/dom/server loaded");return de}function S(e){return e!=null&&e[B]===!0?!0:typeof Node<"u"&&e instanceof Node}function I(e){return e!=null&&e[B]===!0?e.nodeType===1:typeof Element<"u"&&e instanceof Element}function D(e){return e!=null&&e[B]===!0?e.nodeType===3:typeof Text<"u"&&e instanceof Text}var u={active:!1,cursor:null,parents:[]},ye=null;function me(e){ye=e}function X(){return ye}function z(e,t){return u.active&&t.parentNode===e}function U(e){let t=u.parents.lastIndexOf(e);t!==-1&&(u.parents.length=t),u.cursor=e.nextSibling}function ge(){return u.active?u.cursor:null}function xe(e,t){if(!e||e.parentNode==null)return t();let n=u.active,o=u.cursor,r=u.parents;u.active=!0,u.cursor=e,u.parents=[];try{return t()}finally{u.active=n,u.cursor=o,u.parents=r}}function he(e){if(!u.active)return e();let t=u.cursor,n=u.parents;u.active=!1,u.parents=[];try{return e()}finally{u.active=!0,u.cursor=t,u.parents=n}}function Ee(e){if(!u.active||e==null)return;let t=Array.isArray(e)?e[e.length-1]:e;t&&typeof t.nodeType=="number"&&U(t)}function gt(e){let t=[];for(;e&&e.nodeType===1;){let n=e.tagName.toLowerCase();if(e.id){n+=`#${e.id}`,t.unshift(n);break}e.getAttribute("data-id")&&(n+=`[data-id="${e.getAttribute("data-id")}"]`);let o=0,r=e;for(;r=r.previousElementSibling;)r.tagName===e.tagName&&o++;n+=`:nth-of-type(${o+1})`,t.unshift(n),e=e.parentElement}return t.join(">")}function xt(e){let t=0;for(let n=0;n<e.length;n++)t=(t<<5)-t+e.charCodeAt(n),t|=0;return`el_${Math.abs(t)}`}function ht(e){return xt(gt(e))}var Et=()=>"xxyxxxxxxy-4xx8".replace(/[xy]/g,function(e){let t=Math.random()*16|0;return(e==="x"?t:t&3|8).toString(16)}),bt={};var be=new Map,O=new Set,q=new Set(["scroll","focus","blur","load","error","resize","mouseenter","mouseleave","pointerenter","pointerleave","gotpointercapture","lostpointercapture"]);function Q(e){if(!E)for(let t of e)O.has(t)||q.has(t)||(O.add(t),document.addEventListener(t,Nt))}function Nt(e){let t=`$$${e.type}`,n=e.composedPath&&e.composedPath()[0]||e.target;for(;n;){let o=n[t];if(o&&!n.disabled&&(o(e),e.cancelBubble))return;n=n.host&&n.host!==n&&n.host instanceof Element?n.host:n.parentNode}}function Ne(e,t,n){if(e[`$$${t}`]=n,q.has(t)){let o=`__fx_${t}`;if(!e[o]){let r=a=>{e[`$$${t}`]?.(a)};e.addEventListener(t,r),e[o]=r}return}O.has(t)||Q([t])}function Y(e,t){delete e[`$$${t}`];let n=`__fx_${t}`,o=e[n];o&&(e.removeEventListener(t,o),delete e[n])}function Tt(e){return!q.has(e)}function wt(e){return typeof e=="function"}function w(e){if(E)return J().createText(e);if(u.active){let t=X()?.hydrateText(e);if(t)return t}return document.createTextNode(e)}function ee(e,t=!1){if(E)return J().createElement(e,t);if(u.active){let n=X()?.hydrateElement(e);if(n)return n}return t?document.createElementNS(M,e):document.createElement(e)}function St(e,t=!1){let n=be.get(e);if(n)return n;let o=document.createElement("template");return t?o.innerHTML=`<svg>${e}</svg>`:o.innerHTML=e,be.set(e,o),o}function Ct(e,t=!1){let n=e.content.cloneNode(!0);return t?n.firstChild:n}function Te(e){return Array.isArray(e)?e.length===2&&e[1]===" "?Array.isArray(e[0])?Te(e[0]):(typeof e[0]=="function",e[0]):e.length===1&&typeof e[0]=="function"?e[0]:e:e}function vt(e){return typeof e!="function"?null:e._name||e.name||"anonymous"}function At(e){if((0,y.isSignal)(e)||h(e)||typeof e!="function")return e;let t=e();for(;typeof t=="function"&&!(0,y.isSignal)(t)&&!h(t);)t=t();return t}var N=0,Rt=200;function Lt(e,t,n,o,r){let a=o,s=new Map;return(0,p.createRenderEffect)(()=>{let i;if(h(e)&&!(0,y.isSignal)(e)){if(!s.has(e)){N++;try{let f=e();s.set(e,f)}finally{N--}}for(i=s.get(e);typeof i=="function"&&(0,y.isSignal)(i);)i=i()}else for(i=e();typeof i=="function"&&(0,y.isSignal)(i);)i=i();{let f=0;for(;typeof i=="function"&&f++<50;)if(h(i)){if(!s.has(i)){let l=i;N++;try{let c=l();s.set(l,c)}finally{N--}}i=s.get(i)}else if((0,y.isSignal)(i))i=i();else if(i=i(),typeof i!="function"||!(0,y.isSignal)(i)&&!h(i))break}N++;try{a=v(t,i,n,a,s),r(a)}finally{N--}})}function A(e,t,n,o){if(N>Rt)return console.error("[insert] Exceeded max call depth — possible infinite loop."),()=>null;n!==void 0&&!n&&(n=w(""),e.appendChild(n));let r=o??null;if(typeof t!="function"){N++;try{r=v(e,t,n,null)}finally{N--}return()=>r}let a=Lt(t,e,n,r,s=>{r=s});return()=>(a?.(),r)}function v(e,t,n,o,r){if(t==null||typeof t=="boolean")return T(e,o,n);if(typeof t=="function")for(;typeof t=="function";)t=t();if(t==null||typeof t=="boolean")return T(e,o,n);if(R(t)){let s=w("");return Array.isArray(o)?o.length>0?(e.replaceChild(s,o[0]),T(e,o.slice(1),n)):g(e,s,n):o?e.replaceChild(s,o):g(e,s,n),t.then(i=>{s.parentNode===e&&v(e,i,s.nextSibling,s)}).catch(i=>{console.error("Error resolving promise in insertExpression:",i)}),s}let a=typeof t;if(a==="string"||a==="number"){if(a==="number"&&(t=String(t)),Array.isArray(o)){if(o.length===0){let i=w(t);return g(e,i,n),i}if(o.length===1&&o[0].nodeType===3)return o[0].data=t,o;o=T(e,o,n)}if(o&&D(o))return o.data=t,o;let s=w(t);return o&&o.parentNode===e?e.replaceChild(s,o):z(e,s)||g(e,s,n),s}if(S(t))return z(e,t)?(U(t),t):Array.isArray(o)?(o.length===0?g(e,t,n):o[0].parentNode===e?(e.replaceChild(t,o[0]),T(e,o.slice(1),n)):g(e,t,n),t):(o?o!==t&&(o.parentNode===e?e.replaceChild(t,o):g(e,t,n)):g(e,t,n),t);if(Array.isArray(t)){let s=[],i=Array.isArray(o)?o:o?[o]:[],f=[];b(t,s,e,n,!0,r,f);let l=Pt(e,i,s,n);for(let c of f){let d=A(e,c.sig,c.marker);(0,p.onCleanup)(()=>{T(e,d()),c.marker.parentNode===e&&e.removeChild(c.marker)})}return l}if(a==="object"&&t!==null&&typeof t=="object"){let s=t;if("_$litType$"in s||"_$litDirective$"in s)return v(e,ne(t),n,o);if("type"in s&&"props"in s){let i=s;if(typeof i.type=="function"){let f=i.type(i.props||{});return v(e,f,n,o)}}}return T(e,o,n)}function b(e,t,n,o,r=!0,a,s){for(let i=0;i<e.length;i++){let f=e[i];if(!(f==null||typeof f=="boolean")){for(;typeof f=="function"&&!R(f)&&!(0,y.isSignal)(f)&&!h(f)&&(f=f(),!(f==null||typeof f=="boolean")););if(!(f==null||typeof f=="boolean")){if(typeof f=="function"){let l;for(h(f)&&!(0,y.isSignal)(f)?(a||(a=new Map),a.has(f)||a.set(f,f()),l=a.get(f)):l=f();typeof l=="function"&&!R(l)&&!(0,y.isSignal)(l)&&!h(l);)a||(a=new Map),a.has(l)||a.set(l,l()),l=a.get(l);if(l==null||typeof l=="boolean")continue;if(typeof l=="function"){if((0,y.isSignal)(l)){if(s){let d=w("");t.push(d),s.push({marker:d,sig:l});continue}let c=l();for(;typeof c=="function"&&(0,y.isSignal)(c);)c=c();if(c==null||typeof c=="boolean")continue;Array.isArray(c)?b(c,t,n,o,r,a):b([c],t,n,o,r,a);continue}continue}Array.isArray(l)?b(l,t,n,o,r,a,s):b([l],t,n,o,r,a,s);continue}if(R(f)){let l=w("");t.push(l),f.then(c=>{if(l.parentNode){let d=[];if(b([c],d,l.parentNode,void 0,!1,a),d.length>0){l.parentNode.replaceChild(d[0],l);for(let m=1;m<d.length;m++)l.parentNode?.insertBefore(d[m],d[m-1].nextSibling)}}}).catch(c=>console.error("Error resolving promise in array:",c));continue}if(Array.isArray(f)){b(f,t,n,o,r,a,s);continue}if(S(f)){t.push(f);continue}if(typeof f=="object"&&f!==null&&("_$litType$"in f||"_$litDirective$"in f)){let l=ne(f);for(let c of l)t.push(c);continue}if(typeof f=="object"&&f!==null&&"type"in f&&"props"in f){let l=f;if(typeof l.type=="function"){let c=l.type(l.props||{});Array.isArray(c)?b(c,t,n,o,!1,a):b([c],t,n,o,!1,a);continue}}if(typeof f=="string"||typeof f=="number"){let l=String(f);if(l.trim()===""&&l!==" ")continue;t.push(w(l));continue}t.push(w(String(f)))}}}}function Pt(e,t,n,o){for(let d=0;d<n.length;d++)n[d].parentNode!==null&&n[d].parentNode!==e&&(n=n.slice(),n[d]=n[d].cloneNode(!0));let r=n.length,a=t.length,s=r,i=0,f=0,l=a>0?t[a-1].nextSibling??void 0:o,c=null;for(;i<a||f<s;){if(t[i]===n[f]){i++,f++;continue}for(;a>i&&s>f&&t[a-1]===n[s-1];)a--,s--;if(a===i){let d=s<r?f?n[f-1].nextSibling??void 0:n[s-f]:l;for(;f<s;)g(e,n[f++],d)}else if(s===f)for(;i<a;)(!c||!c.has(t[i]))&&t[i].parentNode===e&&e.removeChild(t[i]),i++;else if(t[i]===n[s-1]&&n[f]===t[a-1]){let d=t[--a].nextSibling;g(e,n[f++],t[i++].nextSibling),g(e,n[--s],d),t[a]=t[i-1]}else{if(!c){c=new Map;let m=f;for(;m<s;)c.set(n[m],m++)}let d=c.get(t[i]);if(d!=null)if(f<d&&d<s){let m=i,W=1;for(;++m<a&&m<s&&!(!c.has(t[m])||c.get(t[m])!==d+W);)W++;if(W>d-f){let Me=t[i];for(;f<d;)g(e,n[f++],Me)}else t[i].parentNode===e?e.replaceChild(n[f++],t[i++]):(g(e,n[f++],l),i++)}else i++;else t[i].parentNode===e&&e.removeChild(t[i]),i++}}return n}function T(e,t,n){if(t)if(Array.isArray(t))for(let o=0;o<t.length;o++)t[o].parentNode===e&&e.removeChild(t[o]);else t.parentNode===e&&e.removeChild(t);return null}function g(e,t,n){u.active&&t.parentNode===e||(n&&n.parentNode===e?e.insertBefore(t,n):e.appendChild(t))}function j(e,t,n){n==null?delete e[t]:e[t]=n}function we(e,t,n,o=!1){return typeof n!="function"?(x(e,t,n,o),()=>{}):(0,p.createRenderEffect)(()=>{let r=typeof n=="function"?n():n;x(e,t,r,o)})}function Se(e,t,n){return typeof n!="function"?(j(e,t,n),()=>{}):(0,p.createRenderEffect)(()=>{let o=typeof n=="function"?n():n;j(e,t,o)})}function L(e,t){if(t==null){e.removeAttribute("class");return}if(typeof t=="function"){(0,p.createEffect)(()=>{L(e,t())});return}if(typeof t=="string"){e.setAttribute("class",t);return}if(Array.isArray(t)){e.setAttribute("class",t.filter(Boolean).join(" "));return}if(typeof t=="object"){let n=Object.keys(t).filter(o=>{let r=t[o];return typeof r=="function"?r():!!r}).join(" ");e.setAttribute("class",n);return}e.setAttribute("class",String(t))}function P(e,t,n){if(!(!t||typeof t!="object"))for(let o in t){let r=t[o],a=o.split(/\s+/).filter(Boolean);if(typeof r=="function"&&n)n.push((0,p.createRenderEffect)(()=>{let s=!!r();for(let i of a)e.classList.toggle(i,s)}));else{let s=!!(typeof r=="function"?r():r);for(let i of a)e.classList.toggle(i,s)}}}function k(e,t){let n=t;for(;typeof n=="function";)n=n();if(n==null){e.removeAttribute("style");return}if(typeof n=="string"){e.style.cssText=n;return}if(typeof n=="object")for(let o in n){let r=n[o];r==null?e.style[o]="":e.style[o]=r}}function Mt(e){let{element:t,props:n,prevProps:o=bt,isSVG:r=!1,skipChildren:a=!1}=e;if(!t||!I(t))return console.error("[spread] Error: element is not a DOM Element!"),()=>{};if(!n)return console.warn("[spread] Warning: props is undefined!"),()=>{};let s=r||t.namespaceURI===M,i=[];for(let f in n){if(a&&f==="children")continue;let l=n[f],c=o[f];if(l!==c){if(f==="ref"){te(l,t);continue}if(f==="class"||f==="className"){typeof l=="function"?i.push((0,p.createRenderEffect)(()=>L(t,l()))):L(t,l);continue}if(f==="classList"){typeof l=="function"?i.push((0,p.createRenderEffect)(()=>P(t,l()))):P(t,l,i);continue}if(f==="style"){typeof l=="function"?i.push((0,p.createRenderEffect)(()=>k(t,l()))):k(t,l);continue}if(f.startsWith("on")){let d=f.slice(2).toLowerCase();c&&Y(t,d),l&&Ne(t,d,l);continue}$.has(f)||!s&&f in t?i.push(Se(t,f,l)):i.push(we(t,f,l,s))}}for(let f in o)if(!(f in n))if(f.startsWith("on")){let l=f.slice(2).toLowerCase();Y(t,l)}else $.has(f)?j(t,f,null):t.removeAttribute(f);return()=>{i.forEach(f=>f())}}function _t(e,t,n=!1){for(let o in t){let r=t[o];if(o==="ref"){te(r,e);continue}if(o!=="children"){if(o.startsWith("on")&&o.length>2){let a=o.slice(2).toLowerCase();if(typeof r=="function")if(q.has(a)){e[`$$${a}`]=r;let s=`__fx_${a}`;if(!e[s]){let i=f=>{e[`$$${a}`]?.(f)};e.addEventListener(a,i),e[s]=i}}else e[`$$${a}`]=r,O.has(a)||Q([a]);continue}if(o==="class"||o==="className"){L(e,r);continue}if(o==="classList"){typeof r=="function"?(0,p.createRenderEffect)(()=>P(e,r())):P(e,r);continue}if(o==="style"){k(e,r);continue}if(o==="innerHTML"){if(typeof r=="function"){let a=(0,p.createEffect)(()=>{let s=r();for(;typeof s=="function";)s=s();e.innerHTML=s});(0,p.onCleanup)(()=>a())}else e.innerHTML=r;continue}if(o==="value"&&(e.tagName==="INPUT"||e.tagName==="TEXTAREA")){if(typeof r=="function"){let a=(0,p.createEffect)(()=>{let s=r();for(;typeof s=="function"&&s.length===0;)s=s();document.activeElement!==e&&(e.value=s??"")});(0,p.onCleanup)(()=>{a()})}else e.value=r??"";continue}if(o==="checked"&&e.tagName==="INPUT"){if(typeof r=="function"){let a=(0,p.createEffect)(()=>{let s=r();for(;typeof s=="function"&&s.length===0;)s=s();document.activeElement!==e&&(e.checked=s??"")});(0,p.onCleanup)(()=>{a()})}else e.checked=r??"";continue}if(o==="value"&&e.tagName==="SELECT"){if(typeof r=="function"){let a=!0,s=(0,p.createEffect)(()=>{let i=r();for(;typeof i=="function"&&i.length===0;)i=i();a?(a=!1,queueMicrotask(()=>{e.value=i??""})):e.value=i??""});(0,p.onCleanup)(()=>{s()})}else queueMicrotask(()=>{e.value=r??""});continue}if(typeof r=="function"){let a=(0,p.createEffect)(()=>{let s=r();for(;typeof s=="function"&&s.length===0;)s=s();_(e,o,s,n)});(0,p.onCleanup)(()=>{a()})}else _(e,o,r,n)}}}function $t(...e){let t=o=>{for(let r=e.length-1;r>=0;r--){let a=e[r];if(a&&o in a&&a[o]!==void 0)return a[o]}},n=o=>{for(let r of e)if(r&&o in r)return!0;return!1};return new Proxy({},{get:(o,r)=>t(r),has:(o,r)=>n(r),ownKeys:()=>{let o=new Set;for(let r of e)if(r)for(let a of Reflect.ownKeys(r))o.add(a);return[...o]},getOwnPropertyDescriptor:(o,r)=>n(r)?{enumerable:!0,configurable:!0,get:()=>t(r)}:void 0})}function It(e,...t){let n=new Set;for(let s of t)for(let i of s)n.add(i);let o=s=>({enumerable:!0,configurable:!0,get:()=>e[s]}),r=t.map(s=>{let i=new Set(s);return new Proxy({},{get:(f,l)=>i.has(l)?e[l]:void 0,has:(f,l)=>i.has(l)&&l in e,ownKeys:()=>Array.from(i).filter(f=>f in e),getOwnPropertyDescriptor:(f,l)=>i.has(l)&&l in e?o(l):void 0})}),a=new Proxy({},{get:(s,i)=>n.has(i)?void 0:e[i],has:(s,i)=>!n.has(i)&&i in e,ownKeys:()=>Reflect.ownKeys(e).filter(s=>!n.has(s)),getOwnPropertyDescriptor:(s,i)=>!n.has(i)&&i in e?o(i):void 0});return[...r,a]}function te(e,t){if(e){if(S(e)){let n=t,o=e;if(!n)return;typeof n=="function"?n(o):typeof n=="object"&&"current"in n&&(n.current=o);return}typeof e=="function"?e(t):typeof e=="object"&&"current"in e&&(e.current=t)}}var Z=null;function Dt(e){Z=e}function ne(e){let t=[];if(!Z)return console.warn("Lit render not registered. Call registerLitRender first."),t;try{let n=document.createElement("div");for(Z(e,n);n.firstChild;)t.push(n.firstChild),n.removeChild(n.firstChild)}catch(n){console.warn("Could not render Lit template:",n)}return t}function Ot(e,t,n){let o=t||document.body,r=(0,p.readChildren)(()=>e),a=[];return(0,p.batch)(()=>{let s=(0,p.createRenderEffect)(()=>{let i=r();Array.isArray(i)?(i.forEach(f=>o.appendChild(f)),a.push(()=>{i.forEach(f=>{f.parentNode===o&&o.removeChild(f)})})):S(i)&&(o.appendChild(i),a.push(()=>{i.parentNode===o&&o.removeChild(i)}))});a.push(s),(0,p.onCleanup)(()=>{a.forEach(i=>i())})}),null}function jt(e){return typeof e=="string"&&e.toLowerCase()===e}function kt(e){return e==="svg"||e==="path"||e==="circle"||e==="rect"||e==="line"||e==="polygon"||e==="polyline"||e==="ellipse"||e==="g"||e==="defs"||e==="clipPath"||e==="text"}function qt(e){return e.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#39;")}function R(e){return e!=null&&(typeof e=="object"||typeof e=="function")&&typeof e.then=="function"||e instanceof Promise}function Ht(e){return typeof e=="function"&&e.length===0&&(0,y.isSignal)(e)}function oe(e,t,n){if(!t)throw new Error("Container element is required");let o,r,a=[];return(0,p.createRoot)(s=>{(0,p.batch)(()=>{u.active||(t.textContent=""),A(t,e)}),r=s}),()=>{r?.(),o?.(),a.forEach(s=>s()),t.textContent=""}}var Ft="__fx_dom_create_component__",C=globalThis[Ft]??={fn:null};function Vt(e){C.fn=e}function Wt(e={}){let t=e.signalSystem?.createComponent;t&&(C.fn=t)}function Kt(e,t){return C.fn?C.fn(e,t):(()=>e(t))}var Gt=()=>C.fn!==null,Bt=()=>C.fn!==null;function Jt(){C.fn=null}var H,Xt={getStore:()=>H,run(e,t){let n=H;H=e;try{return t()}finally{H=n}}},zt=Xt;function Ce(){return zt.getStore()}var F=require("@fluixi/reactive/signal");var Ut="__FX_DATA__";var re;function ve(){let e=globalThis.__FX_DATA__;if(e)return e;if(re!==void 0)return re;let t=null;if(typeof document<"u"){let n=document.getElementById(Ut)?.textContent;if(n)try{t=JSON.parse(n)}catch{t=null}}return re=t}function ie(){for(;;){for(;u.cursor&&u.cursor.nodeType===3&&u.cursor.data==="";)u.cursor=u.cursor.nextSibling;if(u.cursor!=null||!u.parents.length)return;u.cursor=u.parents.pop().nextSibling}}var Yt=new Set(["area","base","br","col","embed","hr","img","input","link","meta","param","source","track","wbr"]),se=typeof process<"u"&&process.env&&!1;function ae(e,t){let n=t.nodeType===1?`<${t.tagName.toLowerCase()}>`:t.nodeType===3?`text ${JSON.stringify((t.nodeValue??"").slice(0,24))}`:t.nodeType===8?"comment":"node";console.warn(`[fluixi] hydration mismatch: expected ${e} but the server DOM has ${n}. Server and client rendered different markup; recreating this node on the client. Check for non-deterministic render (Date.now(), Math.random(), browser-only branches, untransported data).`)}function Zt(e){ie();let t=u.cursor;return t&&t.nodeType===1&&t.tagName.toLowerCase()===e.toLowerCase()?(Yt.has(e.toLowerCase())?u.cursor=t.nextSibling:(u.parents.push(t),u.cursor=t.firstChild),t):(se&&t&&ae(`<${e}>`,t),null)}function Qt(e){if(e==="")return null;ie();let t=u.cursor;return t&&t.nodeType===3?(u.cursor=t.nextSibling,t.nodeValue!==e&&(t.nodeValue=e),t):(se&&t&&ae(`text ${JSON.stringify(e.slice(0,24))}`,t),null)}function en(e){ie();let t=u.cursor;return t&&t.nodeType===8&&t.data===e?(u.cursor=t.nextSibling,t):(se&&t&&ae(`marker <!--${e.slice(0,24)}-->`,t),null)}var Ae=!1;function tn(){Ae||(Ae=!0,me({hydrateElement:Zt,hydrateText:Qt,hydrateMarker:en}))}function V(e,t,n){tn(),u.active=!0,u.cursor=t.firstChild,u.parents=[];let o=ve(),r=n?.resourceNamespace,a=0;(0,F.setResourceIdSource)(()=>r?`${r}:r${a++}`:`r${a++}`),(0,F.setServerDataGetter)(o?s=>s in o?{value:o[s]}:void 0:null);try{return oe(e,t)}finally{u.active=!1,u.cursor=null,u.parents=[]}}var fe="fluixi-island";function Le(e){let{component:t,props:n={},name:o}=e,r=ee(fe),a=o??t.name??"Island";x(r,"name",a),x(r,"props",JSON.stringify(n??{}));let s=E?Ce():void 0;if(s){let i=s.nextIslandNamespace(a);A(r,()=>s.withResourceScope(i,()=>t(n)))}else A(r,()=>t(n));return r}var Re=!1;function nn(){if(Re||typeof document>"u")return;Re=!0;let e=document.createElement("style");e.textContent=`${fe}{display:contents}`,document.head.appendChild(e)}function Pe(e){if(typeof document>"u")return;nn();let t=document.querySelectorAll(fe),n=new Map;t.forEach(o=>{let r=o.getAttribute("name")??"",a=n.get(r)??0;n.set(r,a+1);let s=e[r];if(!s){typeof process>"u"&&console.warn(`[fluixi] island "${r}" has no component in the registry — left static.`);return}let i={};try{i=JSON.parse(o.getAttribute("props")||"{}")}catch{}V(()=>s(i),o,{resourceNamespace:`${r}#${a}`})})}
@@ -0,0 +1,9 @@
1
+ export * from './utils.js';
2
+ export * from './runtime.js';
3
+ export * from './integration.js';
4
+ export { isServer, setServerMode, isDomNode, isDomElement, isDomText, } from './server/host.js';
5
+ export { Island, hydrateIslands, type IslandProps, type IslandRegistry } from './island.js';
6
+ export { hydrate } from './hydration.js';
7
+ export { captureHydrationCursor, runHydrationAt, runWithoutHydration, hydrateAdvancePast, } from './hydration-state.js';
8
+ export type { CreateComponentReturnType, CreateComponent } from './types.js';
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/dom/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,kBAAkB,CAAC;AAIjC,OAAO,EACL,QAAQ,EACR,aAAa,EACb,SAAS,EACT,YAAY,EACZ,SAAS,GACV,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,KAAK,WAAW,EAAE,KAAK,cAAc,EAAE,MAAM,aAAa,CAAC;AAG5F,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AACzC,OAAO,EACL,sBAAsB,EACtB,cAAc,EACd,mBAAmB,EACnB,kBAAkB,GACnB,MAAM,sBAAsB,CAAC;AAC9B,YAAY,EAAC,yBAAyB,EAAE,eAAe,EAAC,MAAM,YAAY,CAAA"}
@@ -0,0 +1,12 @@
1
+ export * from './utils.js';
2
+ export * from './runtime.js';
3
+ export * from './integration.js';
4
+ // Client barrel exposes only the server seam (flag + guards). The ServerNode
5
+ // classes are registered through host.ts and exported from @fluixi/dom/server, so
6
+ // they stay out of client bundles.
7
+ export { isServer, setServerMode, isDomNode, isDomElement, isDomText, } from './server/host.js';
8
+ export { Island, hydrateIslands } from './island.js';
9
+ // hydrate() is the heavy DOM-reuse walker — its own module so render-only apps
10
+ // tree-shake it. The small cursor helpers stay in the weightless state module.
11
+ export { hydrate } from './hydration.js';
12
+ export { captureHydrationCursor, runHydrationAt, runWithoutHydration, hydrateAdvancePast, } from './hydration-state.js';
@@ -0,0 +1 @@
1
+ function tt(e){return e.startsWith("aria-")||e.startsWith("data-")?e:/[A-Z]/.test(e)?e.replace(/([A-Z])/g,"-$1").toLowerCase():e}function nt(e){return e.startsWith("@")||e.startsWith("on")&&e.length>2}function ot(e){return e.startsWith("@")?e.slice(1):e.startsWith("on")?e.slice(2).toLowerCase():e}function rt(e,t){let n=new Set(["checked","value","selected","disabled","readonly","required","multiple","open","contenteditable","draggable","spellcheck"]),o={input:new Set(["value","checked","indeterminate"]),textarea:new Set(["value"]),select:new Set(["value"]),option:new Set(["selected","value"]),audio:new Set(["volume","currentTime","paused"]),video:new Set(["volume","currentTime","paused"]),img:new Set(["src","srcset"]),iframe:new Set(["src"]),a:new Set(["href"])};return n.has(t)||o[e]&&o[e].has(t)}var it=new Set(["area","base","br","col","embed","hr","img","input","link","meta","param","source","track","wbr"]),st=new Set(["svg","g","path","circle","rect","line","polyline","polygon","ellipse","text","tspan","use","defs","symbol","mask","clipPath","pattern","linearGradient","radialGradient","stop","filter","feGaussianBlur","feOffset","feMerge","feMergeNode","foreignObject"]),j="http://www.w3.org/2000/svg";function Ee(e){return e.localName.includes("-")}function k(e,t,n,o=!1){if(n==null){e.removeAttribute(t);return}if(Ee(e)){e[t]=n;return}b(e,t,n,o)}var q=new Set(["className","value","checked","selected","innerHTML","innerText","textContent","indeterminate","htmlFor"]);function ne(e,t=document){return t.querySelector(e)}function at(e,t=document){return Array.from(t.querySelectorAll(e))}function ft(e,t){return e.closest(t)}function lt(e,...t){e.classList.add(...t)}function ut(e,...t){e.classList.remove(...t)}function ct(e,...t){t.forEach(n=>e.classList.toggle(n))}function dt(e,t){return e.classList.contains(t)}function b(e,t,n,o=!1){if(n==null||n===!1){e.removeAttribute(t);return}if(n===!0){e.setAttribute(t,"");return}if(typeof n=="object"){e.setAttribute(t,JSON.stringify(n));return}e.setAttribute(t,String(n))}function pt(e,t){return e.getAttribute(t)}function yt(e,t){e.removeAttribute(t)}function be(e,t){Object.assign(e.style,t)}function mt(e,t){return window.getComputedStyle(e).getPropertyValue(t)}function gt(e,t={},...n){let o=document.createElement(e);return Object.entries(t).forEach(([r,a])=>{if(r==="class"||r==="className")o.className=a;else if(r==="style"&&typeof a=="object")be(o,a);else if(r.startsWith("on")&&typeof a=="function"){let s=r.slice(2).toLowerCase();o.addEventListener(s,a)}else b(o,r,a)}),n.forEach(r=>{typeof r=="string"?o.appendChild(document.createTextNode(r)):o.appendChild(r)}),o}function xt(e){for(;e.firstChild;)e.removeChild(e.firstChild)}function ht(e,...t){t.forEach(n=>{typeof n=="string"?e.appendChild(document.createTextNode(n)):e.appendChild(n)})}function Et(e){let t=e.getBoundingClientRect();return t.top>=0&&t.left>=0&&t.bottom<=window.innerHeight&&t.right<=window.innerWidth}function bt(e,t={behavior:"smooth",block:"nearest"}){e.scrollIntoView(t)}function Nt(e){let t=e.getBoundingClientRect();return{top:t.top+window.pageYOffset,left:t.left+window.pageXOffset}}function Tt(e,t,n,o){let r=a=>{let s=a.target.closest(n);s&&e.contains(s)&&o(a,s)};return e.addEventListener(t,r),()=>{e.removeEventListener(t,r)}}function wt(e,t=5e3){return new Promise((n,o)=>{let r=ne(e);if(r){n(r);return}let a=new MutationObserver(()=>{let i=ne(e);i&&(a.disconnect(),clearTimeout(s),n(i))});a.observe(document.body,{childList:!0,subtree:!0});let s=setTimeout(()=>{a.disconnect(),o(new Error(`Element ${e} not found within ${t}ms`))},t)})}function St(e,t,n={}){let o=new IntersectionObserver(r=>{r.forEach(a=>{t(a.isIntersecting)})},n);return o.observe(e),()=>{o.disconnect()}}function Ct(e,t){let n=new ResizeObserver(o=>{o.forEach(t)});return n.observe(e),()=>{n.disconnect()}}var Ne=typeof Symbol=="function"&&Symbol.for?Symbol.for("react.element"):60103;function vt(e){return typeof e=="object"&&e!==null&&e.$$typeof===Ne}function Te(e){return e&&typeof e=="object"&&e.strings&&Array.isArray(e.strings)&&e.values&&Array.isArray(e.values)}function At(e){if(typeof e!="function")return!1;try{let t=e();return Te(t)}catch{return!1}}function Rt(e){return typeof e=="object"&&e!==null&&(e.$$typeof==="template"||typeof e.type=="function")}function Lt(e){return e instanceof Node}function Pt(e,t,n="Fluixi"){typeof globalThis<"u"&&(typeof globalThis[n]>"u"&&(globalThis[n]={}),typeof globalThis[n][e]>"u"&&(globalThis[n][e]=t))}function Mt(e,t,n="Fluixi"){return typeof globalThis<"u"&&typeof globalThis[n]<"u"&&typeof globalThis[n][e]<"u"?globalThis[n][e]:t}import{isSignal as m}from"@fluixi/reactive/signal";function g(e){return typeof e=="function"&&e[Symbol.for("fluixi-component")]===!0}import{batch as fe,createEffect as A,createRenderEffect as E,createRoot as Re,onCleanup as S,readChildren as Le}from"@fluixi/reactive/signal";var N=typeof document>"u";function we(e){N=e}var H=Symbol.for("fluixi.server-node"),oe=null;function F(){if(!oe)throw new Error("[fluixi] server render ran before @fluixi/dom/server loaded");return oe}function v(e){return e!=null&&e[H]===!0?!0:typeof Node<"u"&&e instanceof Node}function V(e){return e!=null&&e[H]===!0?e.nodeType===1:typeof Element<"u"&&e instanceof Element}function W(e){return e!=null&&e[H]===!0?e.nodeType===3:typeof Text<"u"&&e instanceof Text}var u={active:!1,cursor:null,parents:[]},re=null;function ie(e){re=e}function K(){return re}function G(e,t){return u.active&&t.parentNode===e}function B(e){let t=u.parents.lastIndexOf(e);t!==-1&&(u.parents.length=t),u.cursor=e.nextSibling}function Se(){return u.active?u.cursor:null}function Ce(e,t){if(!e||e.parentNode==null)return t();let n=u.active,o=u.cursor,r=u.parents;u.active=!0,u.cursor=e,u.parents=[];try{return t()}finally{u.active=n,u.cursor=o,u.parents=r}}function ve(e){if(!u.active)return e();let t=u.cursor,n=u.parents;u.active=!1,u.parents=[];try{return e()}finally{u.active=!0,u.cursor=t,u.parents=n}}function Ae(e){if(!u.active||e==null)return;let t=Array.isArray(e)?e[e.length-1]:e;t&&typeof t.nodeType=="number"&&B(t)}function Pe(e){let t=[];for(;e&&e.nodeType===1;){let n=e.tagName.toLowerCase();if(e.id){n+=`#${e.id}`,t.unshift(n);break}e.getAttribute("data-id")&&(n+=`[data-id="${e.getAttribute("data-id")}"]`);let o=0,r=e;for(;r=r.previousElementSibling;)r.tagName===e.tagName&&o++;n+=`:nth-of-type(${o+1})`,t.unshift(n),e=e.parentElement}return t.join(">")}function Me(e){let t=0;for(let n=0;n<e.length;n++)t=(t<<5)-t+e.charCodeAt(n),t|=0;return`el_${Math.abs(t)}`}function Wt(e){return Me(Pe(e))}var Kt=()=>"xxyxxxxxxy-4xx8".replace(/[xy]/g,function(e){let t=Math.random()*16|0;return(e==="x"?t:t&3|8).toString(16)}),_e={};var se=new Map,M=new Set,I=new Set(["scroll","focus","blur","load","error","resize","mouseenter","mouseleave","pointerenter","pointerleave","gotpointercapture","lostpointercapture"]);function le(e){if(!N)for(let t of e)M.has(t)||I.has(t)||(M.add(t),document.addEventListener(t,$e))}function $e(e){let t=`$$${e.type}`,n=e.composedPath&&e.composedPath()[0]||e.target;for(;n;){let o=n[t];if(o&&!n.disabled&&(o(e),e.cancelBubble))return;n=n.host&&n.host!==n&&n.host instanceof Element?n.host:n.parentNode}}function Ie(e,t,n){if(e[`$$${t}`]=n,I.has(t)){let o=`__fx_${t}`;if(!e[o]){let r=a=>{e[`$$${t}`]?.(a)};e.addEventListener(t,r),e[o]=r}return}M.has(t)||le([t])}function ae(e,t){delete e[`$$${t}`];let n=`__fx_${t}`,o=e[n];o&&(e.removeEventListener(t,o),delete e[n])}function Gt(e){return!I.has(e)}function Bt(e){return typeof e=="function"}function T(e){if(N)return F().createText(e);if(u.active){let t=K()?.hydrateText(e);if(t)return t}return document.createTextNode(e)}function ue(e,t=!1){if(N)return F().createElement(e,t);if(u.active){let n=K()?.hydrateElement(e);if(n)return n}return t?document.createElementNS(j,e):document.createElement(e)}function Jt(e,t=!1){let n=se.get(e);if(n)return n;let o=document.createElement("template");return t?o.innerHTML=`<svg>${e}</svg>`:o.innerHTML=e,se.set(e,o),o}function Xt(e,t=!1){let n=e.content.cloneNode(!0);return t?n.firstChild:n}function De(e){return Array.isArray(e)?e.length===2&&e[1]===" "?Array.isArray(e[0])?De(e[0]):(typeof e[0]=="function",e[0]):e.length===1&&typeof e[0]=="function"?e[0]:e:e}function zt(e){return typeof e!="function"?null:e._name||e.name||"anonymous"}function Ut(e){if(m(e)||g(e)||typeof e!="function")return e;let t=e();for(;typeof t=="function"&&!m(t)&&!g(t);)t=t();return t}var h=0,Oe=200;function je(e,t,n,o,r){let a=o,s=new Map;return E(()=>{let i;if(g(e)&&!m(e)){if(!s.has(e)){h++;try{let f=e();s.set(e,f)}finally{h--}}for(i=s.get(e);typeof i=="function"&&m(i);)i=i()}else for(i=e();typeof i=="function"&&m(i);)i=i();{let f=0;for(;typeof i=="function"&&f++<50;)if(g(i)){if(!s.has(i)){let l=i;h++;try{let c=l();s.set(l,c)}finally{h--}}i=s.get(i)}else if(m(i))i=i();else if(i=i(),typeof i!="function"||!m(i)&&!g(i))break}h++;try{a=R(t,i,n,a,s),r(a)}finally{h--}})}function L(e,t,n,o){if(h>Oe)return console.error("[insert] Exceeded max call depth — possible infinite loop."),()=>null;n!==void 0&&!n&&(n=T(""),e.appendChild(n));let r=o??null;if(typeof t!="function"){h++;try{r=R(e,t,n,null)}finally{h--}return()=>r}let a=je(t,e,n,r,s=>{r=s});return()=>(a?.(),r)}function R(e,t,n,o,r){if(t==null||typeof t=="boolean")return w(e,o,n);if(typeof t=="function")for(;typeof t=="function";)t=t();if(t==null||typeof t=="boolean")return w(e,o,n);if(P(t)){let s=T("");return Array.isArray(o)?o.length>0?(e.replaceChild(s,o[0]),w(e,o.slice(1),n)):y(e,s,n):o?e.replaceChild(s,o):y(e,s,n),t.then(i=>{s.parentNode===e&&R(e,i,s.nextSibling,s)}).catch(i=>{console.error("Error resolving promise in insertExpression:",i)}),s}let a=typeof t;if(a==="string"||a==="number"){if(a==="number"&&(t=String(t)),Array.isArray(o)){if(o.length===0){let i=T(t);return y(e,i,n),i}if(o.length===1&&o[0].nodeType===3)return o[0].data=t,o;o=w(e,o,n)}if(o&&W(o))return o.data=t,o;let s=T(t);return o&&o.parentNode===e?e.replaceChild(s,o):G(e,s)||y(e,s,n),s}if(v(t))return G(e,t)?(B(t),t):Array.isArray(o)?(o.length===0?y(e,t,n):o[0].parentNode===e?(e.replaceChild(t,o[0]),w(e,o.slice(1),n)):y(e,t,n),t):(o?o!==t&&(o.parentNode===e?e.replaceChild(t,o):y(e,t,n)):y(e,t,n),t);if(Array.isArray(t)){let s=[],i=Array.isArray(o)?o:o?[o]:[],f=[];x(t,s,e,n,!0,r,f);let l=ke(e,i,s,n);for(let c of f){let d=L(e,c.sig,c.marker);S(()=>{w(e,d()),c.marker.parentNode===e&&e.removeChild(c.marker)})}return l}if(a==="object"&&t!==null&&typeof t=="object"){let s=t;if("_$litType$"in s||"_$litDirective$"in s)return R(e,de(t),n,o);if("type"in s&&"props"in s){let i=s;if(typeof i.type=="function"){let f=i.type(i.props||{});return R(e,f,n,o)}}}return w(e,o,n)}function x(e,t,n,o,r=!0,a,s){for(let i=0;i<e.length;i++){let f=e[i];if(!(f==null||typeof f=="boolean")){for(;typeof f=="function"&&!P(f)&&!m(f)&&!g(f)&&(f=f(),!(f==null||typeof f=="boolean")););if(!(f==null||typeof f=="boolean")){if(typeof f=="function"){let l;for(g(f)&&!m(f)?(a||(a=new Map),a.has(f)||a.set(f,f()),l=a.get(f)):l=f();typeof l=="function"&&!P(l)&&!m(l)&&!g(l);)a||(a=new Map),a.has(l)||a.set(l,l()),l=a.get(l);if(l==null||typeof l=="boolean")continue;if(typeof l=="function"){if(m(l)){if(s){let d=T("");t.push(d),s.push({marker:d,sig:l});continue}let c=l();for(;typeof c=="function"&&m(c);)c=c();if(c==null||typeof c=="boolean")continue;Array.isArray(c)?x(c,t,n,o,r,a):x([c],t,n,o,r,a);continue}continue}Array.isArray(l)?x(l,t,n,o,r,a,s):x([l],t,n,o,r,a,s);continue}if(P(f)){let l=T("");t.push(l),f.then(c=>{if(l.parentNode){let d=[];if(x([c],d,l.parentNode,void 0,!1,a),d.length>0){l.parentNode.replaceChild(d[0],l);for(let p=1;p<d.length;p++)l.parentNode?.insertBefore(d[p],d[p-1].nextSibling)}}}).catch(c=>console.error("Error resolving promise in array:",c));continue}if(Array.isArray(f)){x(f,t,n,o,r,a,s);continue}if(v(f)){t.push(f);continue}if(typeof f=="object"&&f!==null&&("_$litType$"in f||"_$litDirective$"in f)){let l=de(f);for(let c of l)t.push(c);continue}if(typeof f=="object"&&f!==null&&"type"in f&&"props"in f){let l=f;if(typeof l.type=="function"){let c=l.type(l.props||{});Array.isArray(c)?x(c,t,n,o,!1,a):x([c],t,n,o,!1,a);continue}}if(typeof f=="string"||typeof f=="number"){let l=String(f);if(l.trim()===""&&l!==" ")continue;t.push(T(l));continue}t.push(T(String(f)))}}}}function ke(e,t,n,o){for(let d=0;d<n.length;d++)n[d].parentNode!==null&&n[d].parentNode!==e&&(n=n.slice(),n[d]=n[d].cloneNode(!0));let r=n.length,a=t.length,s=r,i=0,f=0,l=a>0?t[a-1].nextSibling??void 0:o,c=null;for(;i<a||f<s;){if(t[i]===n[f]){i++,f++;continue}for(;a>i&&s>f&&t[a-1]===n[s-1];)a--,s--;if(a===i){let d=s<r?f?n[f-1].nextSibling??void 0:n[s-f]:l;for(;f<s;)y(e,n[f++],d)}else if(s===f)for(;i<a;)(!c||!c.has(t[i]))&&t[i].parentNode===e&&e.removeChild(t[i]),i++;else if(t[i]===n[s-1]&&n[f]===t[a-1]){let d=t[--a].nextSibling;y(e,n[f++],t[i++].nextSibling),y(e,n[--s],d),t[a]=t[i-1]}else{if(!c){c=new Map;let p=f;for(;p<s;)c.set(n[p],p++)}let d=c.get(t[i]);if(d!=null)if(f<d&&d<s){let p=i,O=1;for(;++p<a&&p<s&&!(!c.has(t[p])||c.get(t[p])!==d+O);)O++;if(O>d-f){let he=t[i];for(;f<d;)y(e,n[f++],he)}else t[i].parentNode===e?e.replaceChild(n[f++],t[i++]):(y(e,n[f++],l),i++)}else i++;else t[i].parentNode===e&&e.removeChild(t[i]),i++}}return n}function w(e,t,n){if(t)if(Array.isArray(t))for(let o=0;o<t.length;o++)t[o].parentNode===e&&e.removeChild(t[o]);else t.parentNode===e&&e.removeChild(t);return null}function y(e,t,n){u.active&&t.parentNode===e||(n&&n.parentNode===e?e.insertBefore(t,n):e.appendChild(t))}function J(e,t,n){n==null?delete e[t]:e[t]=n}function qe(e,t,n,o=!1){return typeof n!="function"?(b(e,t,n,o),()=>{}):E(()=>{let r=typeof n=="function"?n():n;b(e,t,r,o)})}function He(e,t,n){return typeof n!="function"?(J(e,t,n),()=>{}):E(()=>{let o=typeof n=="function"?n():n;J(e,t,o)})}function _(e,t){if(t==null){e.removeAttribute("class");return}if(typeof t=="function"){A(()=>{_(e,t())});return}if(typeof t=="string"){e.setAttribute("class",t);return}if(Array.isArray(t)){e.setAttribute("class",t.filter(Boolean).join(" "));return}if(typeof t=="object"){let n=Object.keys(t).filter(o=>{let r=t[o];return typeof r=="function"?r():!!r}).join(" ");e.setAttribute("class",n);return}e.setAttribute("class",String(t))}function $(e,t,n){if(!(!t||typeof t!="object"))for(let o in t){let r=t[o],a=o.split(/\s+/).filter(Boolean);if(typeof r=="function"&&n)n.push(E(()=>{let s=!!r();for(let i of a)e.classList.toggle(i,s)}));else{let s=!!(typeof r=="function"?r():r);for(let i of a)e.classList.toggle(i,s)}}}function X(e,t){let n=t;for(;typeof n=="function";)n=n();if(n==null){e.removeAttribute("style");return}if(typeof n=="string"){e.style.cssText=n;return}if(typeof n=="object")for(let o in n){let r=n[o];r==null?e.style[o]="":e.style[o]=r}}function Yt(e){let{element:t,props:n,prevProps:o=_e,isSVG:r=!1,skipChildren:a=!1}=e;if(!t||!V(t))return console.error("[spread] Error: element is not a DOM Element!"),()=>{};if(!n)return console.warn("[spread] Warning: props is undefined!"),()=>{};let s=r||t.namespaceURI===j,i=[];for(let f in n){if(a&&f==="children")continue;let l=n[f],c=o[f];if(l!==c){if(f==="ref"){ce(l,t);continue}if(f==="class"||f==="className"){typeof l=="function"?i.push(E(()=>_(t,l()))):_(t,l);continue}if(f==="classList"){typeof l=="function"?i.push(E(()=>$(t,l()))):$(t,l,i);continue}if(f==="style"){typeof l=="function"?i.push(E(()=>X(t,l()))):X(t,l);continue}if(f.startsWith("on")){let d=f.slice(2).toLowerCase();c&&ae(t,d),l&&Ie(t,d,l);continue}q.has(f)||!s&&f in t?i.push(He(t,f,l)):i.push(qe(t,f,l,s))}}for(let f in o)if(!(f in n))if(f.startsWith("on")){let l=f.slice(2).toLowerCase();ae(t,l)}else q.has(f)?J(t,f,null):t.removeAttribute(f);return()=>{i.forEach(f=>f())}}function Zt(e,t,n=!1){for(let o in t){let r=t[o];if(o==="ref"){ce(r,e);continue}if(o!=="children"){if(o.startsWith("on")&&o.length>2){let a=o.slice(2).toLowerCase();if(typeof r=="function")if(I.has(a)){e[`$$${a}`]=r;let s=`__fx_${a}`;if(!e[s]){let i=f=>{e[`$$${a}`]?.(f)};e.addEventListener(a,i),e[s]=i}}else e[`$$${a}`]=r,M.has(a)||le([a]);continue}if(o==="class"||o==="className"){_(e,r);continue}if(o==="classList"){typeof r=="function"?E(()=>$(e,r())):$(e,r);continue}if(o==="style"){X(e,r);continue}if(o==="innerHTML"){if(typeof r=="function"){let a=A(()=>{let s=r();for(;typeof s=="function";)s=s();e.innerHTML=s});S(()=>a())}else e.innerHTML=r;continue}if(o==="value"&&(e.tagName==="INPUT"||e.tagName==="TEXTAREA")){if(typeof r=="function"){let a=A(()=>{let s=r();for(;typeof s=="function"&&s.length===0;)s=s();document.activeElement!==e&&(e.value=s??"")});S(()=>{a()})}else e.value=r??"";continue}if(o==="checked"&&e.tagName==="INPUT"){if(typeof r=="function"){let a=A(()=>{let s=r();for(;typeof s=="function"&&s.length===0;)s=s();document.activeElement!==e&&(e.checked=s??"")});S(()=>{a()})}else e.checked=r??"";continue}if(o==="value"&&e.tagName==="SELECT"){if(typeof r=="function"){let a=!0,s=A(()=>{let i=r();for(;typeof i=="function"&&i.length===0;)i=i();a?(a=!1,queueMicrotask(()=>{e.value=i??""})):e.value=i??""});S(()=>{s()})}else queueMicrotask(()=>{e.value=r??""});continue}if(typeof r=="function"){let a=A(()=>{let s=r();for(;typeof s=="function"&&s.length===0;)s=s();k(e,o,s,n)});S(()=>{a()})}else k(e,o,r,n)}}}function Qt(...e){let t=o=>{for(let r=e.length-1;r>=0;r--){let a=e[r];if(a&&o in a&&a[o]!==void 0)return a[o]}},n=o=>{for(let r of e)if(r&&o in r)return!0;return!1};return new Proxy({},{get:(o,r)=>t(r),has:(o,r)=>n(r),ownKeys:()=>{let o=new Set;for(let r of e)if(r)for(let a of Reflect.ownKeys(r))o.add(a);return[...o]},getOwnPropertyDescriptor:(o,r)=>n(r)?{enumerable:!0,configurable:!0,get:()=>t(r)}:void 0})}function en(e,...t){let n=new Set;for(let s of t)for(let i of s)n.add(i);let o=s=>({enumerable:!0,configurable:!0,get:()=>e[s]}),r=t.map(s=>{let i=new Set(s);return new Proxy({},{get:(f,l)=>i.has(l)?e[l]:void 0,has:(f,l)=>i.has(l)&&l in e,ownKeys:()=>Array.from(i).filter(f=>f in e),getOwnPropertyDescriptor:(f,l)=>i.has(l)&&l in e?o(l):void 0})}),a=new Proxy({},{get:(s,i)=>n.has(i)?void 0:e[i],has:(s,i)=>!n.has(i)&&i in e,ownKeys:()=>Reflect.ownKeys(e).filter(s=>!n.has(s)),getOwnPropertyDescriptor:(s,i)=>!n.has(i)&&i in e?o(i):void 0});return[...r,a]}function ce(e,t){if(e){if(v(e)){let n=t,o=e;if(!n)return;typeof n=="function"?n(o):typeof n=="object"&&"current"in n&&(n.current=o);return}typeof e=="function"?e(t):typeof e=="object"&&"current"in e&&(e.current=t)}}var z=null;function tn(e){z=e}function de(e){let t=[];if(!z)return console.warn("Lit render not registered. Call registerLitRender first."),t;try{let n=document.createElement("div");for(z(e,n);n.firstChild;)t.push(n.firstChild),n.removeChild(n.firstChild)}catch(n){console.warn("Could not render Lit template:",n)}return t}function nn(e,t,n){let o=t||document.body,r=Le(()=>e),a=[];return fe(()=>{let s=E(()=>{let i=r();Array.isArray(i)?(i.forEach(f=>o.appendChild(f)),a.push(()=>{i.forEach(f=>{f.parentNode===o&&o.removeChild(f)})})):v(i)&&(o.appendChild(i),a.push(()=>{i.parentNode===o&&o.removeChild(i)}))});a.push(s),S(()=>{a.forEach(i=>i())})}),null}function on(e){return typeof e=="string"&&e.toLowerCase()===e}function rn(e){return e==="svg"||e==="path"||e==="circle"||e==="rect"||e==="line"||e==="polygon"||e==="polyline"||e==="ellipse"||e==="g"||e==="defs"||e==="clipPath"||e==="text"}function sn(e){return e.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#39;")}function P(e){return e!=null&&(typeof e=="object"||typeof e=="function")&&typeof e.then=="function"||e instanceof Promise}function an(e){return typeof e=="function"&&e.length===0&&m(e)}function pe(e,t,n){if(!t)throw new Error("Container element is required");let o,r,a=[];return Re(s=>{fe(()=>{u.active||(t.textContent=""),L(t,e)}),r=s}),()=>{r?.(),o?.(),a.forEach(s=>s()),t.textContent=""}}var Fe="__fx_dom_create_component__",C=globalThis[Fe]??={fn:null};function ln(e){C.fn=e}function un(e={}){let t=e.signalSystem?.createComponent;t&&(C.fn=t)}function cn(e,t){return C.fn?C.fn(e,t):(()=>e(t))}var dn=()=>C.fn!==null,pn=()=>C.fn!==null;function yn(){C.fn=null}var D,Ve={getStore:()=>D,run(e,t){let n=D;D=e;try{return t()}finally{D=n}}},We=Ve;function ye(){return We.getStore()}import{setResourceIdSource as Ge,setServerDataGetter as Be}from"@fluixi/reactive/signal";var Ke="__FX_DATA__";var U;function me(){let e=globalThis.__FX_DATA__;if(e)return e;if(U!==void 0)return U;let t=null;if(typeof document<"u"){let n=document.getElementById(Ke)?.textContent;if(n)try{t=JSON.parse(n)}catch{t=null}}return U=t}function Y(){for(;;){for(;u.cursor&&u.cursor.nodeType===3&&u.cursor.data==="";)u.cursor=u.cursor.nextSibling;if(u.cursor!=null||!u.parents.length)return;u.cursor=u.parents.pop().nextSibling}}var Je=new Set(["area","base","br","col","embed","hr","img","input","link","meta","param","source","track","wbr"]),Z=typeof process<"u"&&process.env&&!1;function Q(e,t){let n=t.nodeType===1?`<${t.tagName.toLowerCase()}>`:t.nodeType===3?`text ${JSON.stringify((t.nodeValue??"").slice(0,24))}`:t.nodeType===8?"comment":"node";console.warn(`[fluixi] hydration mismatch: expected ${e} but the server DOM has ${n}. Server and client rendered different markup; recreating this node on the client. Check for non-deterministic render (Date.now(), Math.random(), browser-only branches, untransported data).`)}function Xe(e){Y();let t=u.cursor;return t&&t.nodeType===1&&t.tagName.toLowerCase()===e.toLowerCase()?(Je.has(e.toLowerCase())?u.cursor=t.nextSibling:(u.parents.push(t),u.cursor=t.firstChild),t):(Z&&t&&Q(`<${e}>`,t),null)}function ze(e){if(e==="")return null;Y();let t=u.cursor;return t&&t.nodeType===3?(u.cursor=t.nextSibling,t.nodeValue!==e&&(t.nodeValue=e),t):(Z&&t&&Q(`text ${JSON.stringify(e.slice(0,24))}`,t),null)}function Ue(e){Y();let t=u.cursor;return t&&t.nodeType===8&&t.data===e?(u.cursor=t.nextSibling,t):(Z&&t&&Q(`marker <!--${e.slice(0,24)}-->`,t),null)}var ge=!1;function Ye(){ge||(ge=!0,ie({hydrateElement:Xe,hydrateText:ze,hydrateMarker:Ue}))}function ee(e,t,n){Ye(),u.active=!0,u.cursor=t.firstChild,u.parents=[];let o=me(),r=n?.resourceNamespace,a=0;Ge(()=>r?`${r}:r${a++}`:`r${a++}`),Be(o?s=>s in o?{value:o[s]}:void 0:null);try{return pe(e,t)}finally{u.active=!1,u.cursor=null,u.parents=[]}}var te="fluixi-island";function Ze(e){let{component:t,props:n={},name:o}=e,r=ue(te),a=o??t.name??"Island";b(r,"name",a),b(r,"props",JSON.stringify(n??{}));let s=N?ye():void 0;if(s){let i=s.nextIslandNamespace(a);L(r,()=>s.withResourceScope(i,()=>t(n)))}else L(r,()=>t(n));return r}var xe=!1;function Qe(){if(xe||typeof document>"u")return;xe=!0;let e=document.createElement("style");e.textContent=`${te}{display:contents}`,document.head.appendChild(e)}function et(e){if(typeof document>"u")return;Qe();let t=document.querySelectorAll(te),n=new Map;t.forEach(o=>{let r=o.getAttribute("name")??"",a=n.get(r)??0;n.set(r,a+1);let s=e[r];if(!s){typeof process>"u"&&console.warn(`[fluixi] island "${r}" has no component in the registry — left static.`);return}let i={};try{i=JSON.parse(o.getAttribute("props")||"{}")}catch{}ee(()=>s(i),o,{resourceNamespace:`${r}#${a}`})})}export{Ze as Island,q as JSX_PROPERTIES,st as SVG_ELEMENTS,j as SVG_NAMESPACE,it as VOID_ELEMENTS,lt as addClass,Ie as addDelegatedEventListener,ht as appendChildren,k as applyElementProp,Zt as applyProps,Se as captureHydrationCursor,w as cleanChildren,Xt as cloneTemplate,ft as closest,cn as createComponent,gt as createElement,ue as createNativeElement,nn as createPortal,Jt as createTemplate,Tt as delegate,le as delegateEvents,sn as escapeHTML,zt as fnName,Kt as generateID,pt as getAttribute,Mt as getGlobal,ot as getLitEventName,Nt as getOffset,Wt as getStableElementId,mt as getStyle,ce as handleRef,dt as hasClass,ee as hydrate,Ae as hydrateAdvancePast,et as hydrateIslands,un as initializeIntegration,L as insert,R as insertExpression,dn as intergartionInitialized,an as isAccessor,Ee as isCustomElement,Lt as isDOMNode,Gt as isDelegatedEvent,V as isDomElement,v as isDomNode,W as isDomText,nt as isEventHandler,Bt as isFunction,pn as isIntegrationInitialized,Rt as isJSXTemplate,Te as isLitTemplateResult,on as isNativeElement,P as isPromise,vt as isReactElement,rn as isSVGElement,N as isServer,At as isTemplateFactory,Et as isVisible,Ut as iterateFn,De as makeArrayFlat,Qt as mergeProps,St as observeIntersection,Ct as observeResize,ne as query,at as queryAll,ln as registerCreateComponent,Pt as registerGlobal,tn as registerLitRender,yt as removeAttribute,xt as removeChildren,ut as removeClass,ae as removeDelegatedEventListener,pe as render,de as renderLitToNodes,yn as resetIntegration,Ce as runHydrationAt,ve as runWithoutHydration,bt as scrollIntoView,b as setAttribute,$ as setClassList,_ as setClassName,qe as setDynamicAttribute,He as setDynamicProperty,J as setProperty,we as setServerMode,X as setStyle,be as setStyles,rt as shouldSetAsProperty,en as splitProps,Yt as spread,tt as toAttributeName,ct as toggleClass,wt as waitForElement};
@@ -0,0 +1 @@
1
+ "use strict";var a=Object.defineProperty;var p=Object.getOwnPropertyDescriptor;var s=Object.getOwnPropertyNames;var l=Object.prototype.hasOwnProperty;var f=(e,n)=>{for(var r in n)a(e,r,{get:n[r],enumerable:!0})},c=(e,n,r,i)=>{if(n&&typeof n=="object"||typeof n=="function")for(let o of s(n))!l.call(e,o)&&o!==r&&a(e,o,{get:()=>n[o],enumerable:!(i=p(n,o))||i.enumerable});return e};var y=e=>c(a({},"__esModule",{value:!0}),e);var I={};f(I,{createComponent:()=>g,initializeIntegration:()=>u,intergartionInitialized:()=>d,isIntegrationInitialized:()=>x,registerCreateComponent:()=>C,resetIntegration:()=>_});module.exports=y(I);var m="__fx_dom_create_component__",t=globalThis[m]??={fn:null};function C(e){t.fn=e}function u(e={}){let n=e.signalSystem?.createComponent;n&&(t.fn=n)}function g(e,n){return t.fn?t.fn(e,n):(()=>e(n))}var d=()=>t.fn!==null,x=()=>t.fn!==null;function _(){t.fn=null}
@@ -0,0 +1,16 @@
1
+ import type { CreateComponentReturnType } from './types.js';
2
+ type CreateComponentFn = (fn: () => any, props?: any) => any;
3
+ export interface IntegrationOptions {
4
+ signalSystem?: {
5
+ createComponent?: CreateComponentFn;
6
+ } & Record<string, any>;
7
+ storeSystem?: Record<string, any>;
8
+ }
9
+ export declare function registerCreateComponent(createComponent: CreateComponentFn): void;
10
+ export declare function initializeIntegration(options?: IntegrationOptions): void;
11
+ export declare function createComponent<T extends (props?: any) => any, U = any>(Comp: T, props?: U | undefined): CreateComponentReturnType<T, U>;
12
+ export declare const intergartionInitialized: () => boolean;
13
+ export declare const isIntegrationInitialized: () => boolean;
14
+ export declare function resetIntegration(): void;
15
+ export {};
16
+ //# sourceMappingURL=integration.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"integration.d.ts","sourceRoot":"","sources":["../../../src/lib/dom/integration.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,YAAY,CAAC;AAE5D,KAAK,iBAAiB,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,EAAE,KAAK,CAAC,EAAE,GAAG,KAAK,GAAG,CAAC;AAO7D,MAAM,WAAW,kBAAkB;IAEjC,YAAY,CAAC,EAAE;QAAE,eAAe,CAAC,EAAE,iBAAiB,CAAA;KAAE,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC7E,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CACnC;AAED,wBAAgB,uBAAuB,CAAC,eAAe,EAAE,iBAAiB,GAAG,IAAI,CAEhF;AAGD,wBAAgB,qBAAqB,CAAC,OAAO,GAAE,kBAAuB,GAAG,IAAI,CAG5E;AAED,wBAAgB,eAAe,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,GAAG,KAAK,GAAG,EAAE,CAAC,GAAG,GAAG,EACrE,IAAI,EAAE,CAAC,EACP,KAAK,CAAC,EAAE,CAAC,GAAG,SAAS,GACpB,yBAAyB,CAAC,CAAC,EAAE,CAAC,CAAC,CAGjC;AAED,eAAO,MAAM,uBAAuB,QAAO,OAA4B,CAAC;AACxE,eAAO,MAAM,wBAAwB,QAAO,OAA4B,CAAC;AAEzE,wBAAgB,gBAAgB,IAAI,IAAI,CAEvC"}
@@ -0,0 +1,25 @@
1
+ // createComponent lives in @fluixi/core, not the reactive core, so the runtime
2
+ // can't import it — core registers it here at startup. Everything else the runtime
3
+ // needs comes straight from @fluixi/reactive (shared globalThis graph, no bridge).
4
+ // On globalThis so every bundled copy shares the slot.
5
+ const _slotKey = '__fx_dom_create_component__';
6
+ const _slot = (globalThis[_slotKey] ??= { fn: null });
7
+ export function registerCreateComponent(createComponent) {
8
+ _slot.fn = createComponent;
9
+ }
10
+ // Old init entry — now just picks createComponent off the passed system.
11
+ export function initializeIntegration(options = {}) {
12
+ const cc = options.signalSystem?.createComponent;
13
+ if (cc)
14
+ _slot.fn = cc;
15
+ }
16
+ export function createComponent(Comp, props) {
17
+ if (_slot.fn)
18
+ return _slot.fn(Comp, props);
19
+ return (() => Comp(props));
20
+ }
21
+ export const intergartionInitialized = () => _slot.fn !== null;
22
+ export const isIntegrationInitialized = () => _slot.fn !== null;
23
+ export function resetIntegration() {
24
+ _slot.fn = null;
25
+ }
@@ -0,0 +1 @@
1
+ var o="__fx_dom_create_component__",n=globalThis[o]??={fn:null};function r(e){n.fn=e}function a(e={}){let t=e.signalSystem?.createComponent;t&&(n.fn=t)}function i(e,t){return n.fn?n.fn(e,t):(()=>e(t))}var p=()=>n.fn!==null,s=()=>n.fn!==null;function l(){n.fn=null}export{i as createComponent,a as initializeIntegration,p as intergartionInitialized,s as isIntegrationInitialized,r as registerCreateComponent,l as resetIntegration};
@@ -0,0 +1 @@
1
+ "use strict";var P=Object.defineProperty;var oe=Object.getOwnPropertyDescriptor;var re=Object.getOwnPropertyNames;var ie=Object.prototype.hasOwnProperty;var se=(t,e)=>{for(var n in e)P(t,n,{get:e[n],enumerable:!0})},ae=(t,e,n,o)=>{if(e&&typeof e=="object"||typeof e=="function")for(let u of re(e))!ie.call(t,u)&&u!==n&&P(t,u,{get:()=>e[u],enumerable:!(o=oe(e,u))||o.enumerable});return t};var fe=t=>ae(P({},"__esModule",{value:!0}),t);var we={};se(we,{Island:()=>be,hydrateIslands:()=>Te});module.exports=fe(we);var g=require("@fluixi/reactive/signal");var H="http://www.w3.org/2000/svg";function v(t,e,n,o=!1){if(n==null||n===!1){t.removeAttribute(e);return}if(n===!0){t.setAttribute(e,"");return}if(typeof n=="object"){t.setAttribute(e,JSON.stringify(n));return}t.setAttribute(e,String(n))}var ve=typeof Symbol=="function"&&Symbol.for?Symbol.for("react.element"):60103;function b(t){return typeof t=="function"&&t[Symbol.for("fluixi-component")]===!0}var m=require("@fluixi/reactive/signal");var T=typeof document>"u";var V=Symbol.for("fluixi.server-node"),F=null;function M(){if(!F)throw new Error("[fluixi] server render ran before @fluixi/dom/server loaded");return F}function $(t){return t!=null&&t[V]===!0?!0:typeof Node<"u"&&t instanceof Node}function W(t){return t!=null&&t[V]===!0?t.nodeType===3:typeof Text<"u"&&t instanceof Text}var c={active:!1,cursor:null,parents:[]},K=null;function G(t){K=t}function _(){return K}function D(t,e){return c.active&&e.parentNode===t}function B(t){let e=c.parents.lastIndexOf(t);e!==-1&&(c.parents.length=e),c.cursor=t.nextSibling}function E(t){if(T)return M().createText(t);if(c.active){let e=_()?.hydrateText(t);if(e)return e}return document.createTextNode(t)}function X(t,e=!1){if(T)return M().createElement(t,e);if(c.active){let n=_()?.hydrateElement(t);if(n)return n}return e?document.createElementNS(H,t):document.createElement(t)}var h=0,ue=200;function le(t,e,n,o,u){let a=o,s=new Map;return(0,m.createRenderEffect)(()=>{let r;if(b(t)&&!(0,g.isSignal)(t)){if(!s.has(t)){h++;try{let i=t();s.set(t,i)}finally{h--}}for(r=s.get(t);typeof r=="function"&&(0,g.isSignal)(r);)r=r()}else for(r=t();typeof r=="function"&&(0,g.isSignal)(r);)r=r();{let i=0;for(;typeof r=="function"&&i++<50;)if(b(r)){if(!s.has(r)){let f=r;h++;try{let l=f();s.set(f,l)}finally{h--}}r=s.get(r)}else if((0,g.isSignal)(r))r=r();else if(r=r(),typeof r!="function"||!(0,g.isSignal)(r)&&!b(r))break}h++;try{a=w(e,r,n,a,s),u(a)}finally{h--}})}function S(t,e,n,o){if(h>ue)return console.error("[insert] Exceeded max call depth — possible infinite loop."),()=>null;n!==void 0&&!n&&(n=E(""),t.appendChild(n));let u=o??null;if(typeof e!="function"){h++;try{u=w(t,e,n,null)}finally{h--}return()=>u}let a=le(e,t,n,u,s=>{u=s});return()=>(a?.(),u)}function w(t,e,n,o,u){if(e==null||typeof e=="boolean")return N(t,o,n);if(typeof e=="function")for(;typeof e=="function";)e=e();if(e==null||typeof e=="boolean")return N(t,o,n);if(C(e)){let s=E("");return Array.isArray(o)?o.length>0?(t.replaceChild(s,o[0]),N(t,o.slice(1),n)):y(t,s,n):o?t.replaceChild(s,o):y(t,s,n),e.then(r=>{s.parentNode===t&&w(t,r,s.nextSibling,s)}).catch(r=>{console.error("Error resolving promise in insertExpression:",r)}),s}let a=typeof e;if(a==="string"||a==="number"){if(a==="number"&&(e=String(e)),Array.isArray(o)){if(o.length===0){let r=E(e);return y(t,r,n),r}if(o.length===1&&o[0].nodeType===3)return o[0].data=e,o;o=N(t,o,n)}if(o&&W(o))return o.data=e,o;let s=E(e);return o&&o.parentNode===t?t.replaceChild(s,o):D(t,s)||y(t,s,n),s}if($(e))return D(t,e)?(B(e),e):Array.isArray(o)?(o.length===0?y(t,e,n):o[0].parentNode===t?(t.replaceChild(e,o[0]),N(t,o.slice(1),n)):y(t,e,n),e):(o?o!==e&&(o.parentNode===t?t.replaceChild(e,o):y(t,e,n)):y(t,e,n),e);if(Array.isArray(e)){let s=[],r=Array.isArray(o)?o:o?[o]:[],i=[];x(e,s,t,n,!0,u,i);let f=ce(t,r,s,n);for(let l of i){let d=S(t,l.sig,l.marker);(0,m.onCleanup)(()=>{N(t,d()),l.marker.parentNode===t&&t.removeChild(l.marker)})}return f}if(a==="object"&&e!==null&&typeof e=="object"){let s=e;if("_$litType$"in s||"_$litDirective$"in s)return w(t,z(e),n,o);if("type"in s&&"props"in s){let r=s;if(typeof r.type=="function"){let i=r.type(r.props||{});return w(t,i,n,o)}}}return N(t,o,n)}function x(t,e,n,o,u=!0,a,s){for(let r=0;r<t.length;r++){let i=t[r];if(!(i==null||typeof i=="boolean")){for(;typeof i=="function"&&!C(i)&&!(0,g.isSignal)(i)&&!b(i)&&(i=i(),!(i==null||typeof i=="boolean")););if(!(i==null||typeof i=="boolean")){if(typeof i=="function"){let f;for(b(i)&&!(0,g.isSignal)(i)?(a||(a=new Map),a.has(i)||a.set(i,i()),f=a.get(i)):f=i();typeof f=="function"&&!C(f)&&!(0,g.isSignal)(f)&&!b(f);)a||(a=new Map),a.has(f)||a.set(f,f()),f=a.get(f);if(f==null||typeof f=="boolean")continue;if(typeof f=="function"){if((0,g.isSignal)(f)){if(s){let d=E("");e.push(d),s.push({marker:d,sig:f});continue}let l=f();for(;typeof l=="function"&&(0,g.isSignal)(l);)l=l();if(l==null||typeof l=="boolean")continue;Array.isArray(l)?x(l,e,n,o,u,a):x([l],e,n,o,u,a);continue}continue}Array.isArray(f)?x(f,e,n,o,u,a,s):x([f],e,n,o,u,a,s);continue}if(C(i)){let f=E("");e.push(f),i.then(l=>{if(f.parentNode){let d=[];if(x([l],d,f.parentNode,void 0,!1,a),d.length>0){f.parentNode.replaceChild(d[0],f);for(let p=1;p<d.length;p++)f.parentNode?.insertBefore(d[p],d[p-1].nextSibling)}}}).catch(l=>console.error("Error resolving promise in array:",l));continue}if(Array.isArray(i)){x(i,e,n,o,u,a,s);continue}if($(i)){e.push(i);continue}if(typeof i=="object"&&i!==null&&("_$litType$"in i||"_$litDirective$"in i)){let f=z(i);for(let l of f)e.push(l);continue}if(typeof i=="object"&&i!==null&&"type"in i&&"props"in i){let f=i;if(typeof f.type=="function"){let l=f.type(f.props||{});Array.isArray(l)?x(l,e,n,o,!1,a):x([l],e,n,o,!1,a);continue}}if(typeof i=="string"||typeof i=="number"){let f=String(i);if(f.trim()===""&&f!==" ")continue;e.push(E(f));continue}e.push(E(String(i)))}}}}function ce(t,e,n,o){for(let d=0;d<n.length;d++)n[d].parentNode!==null&&n[d].parentNode!==t&&(n=n.slice(),n[d]=n[d].cloneNode(!0));let u=n.length,a=e.length,s=u,r=0,i=0,f=a>0?e[a-1].nextSibling??void 0:o,l=null;for(;r<a||i<s;){if(e[r]===n[i]){r++,i++;continue}for(;a>r&&s>i&&e[a-1]===n[s-1];)a--,s--;if(a===r){let d=s<u?i?n[i-1].nextSibling??void 0:n[s-i]:f;for(;i<s;)y(t,n[i++],d)}else if(s===i)for(;r<a;)(!l||!l.has(e[r]))&&e[r].parentNode===t&&t.removeChild(e[r]),r++;else if(e[r]===n[s-1]&&n[i]===e[a-1]){let d=e[--a].nextSibling;y(t,n[i++],e[r++].nextSibling),y(t,n[--s],d),e[a]=e[r-1]}else{if(!l){l=new Map;let p=i;for(;p<s;)l.set(n[p],p++)}let d=l.get(e[r]);if(d!=null)if(i<d&&d<s){let p=r,L=1;for(;++p<a&&p<s&&!(!l.has(e[p])||l.get(e[p])!==d+L);)L++;if(L>d-i){let ne=e[r];for(;i<d;)y(t,n[i++],ne)}else e[r].parentNode===t?t.replaceChild(n[i++],e[r++]):(y(t,n[i++],f),r++)}else r++;else e[r].parentNode===t&&t.removeChild(e[r]),r++}}return n}function N(t,e,n){if(e)if(Array.isArray(e))for(let o=0;o<e.length;o++)e[o].parentNode===t&&t.removeChild(e[o]);else e.parentNode===t&&t.removeChild(e);return null}function y(t,e,n){c.active&&e.parentNode===t||(n&&n.parentNode===t?t.insertBefore(e,n):t.appendChild(e))}var J=null;function z(t){let e=[];if(!J)return console.warn("Lit render not registered. Call registerLitRender first."),e;try{let n=document.createElement("div");for(J(t,n);n.firstChild;)e.push(n.firstChild),n.removeChild(n.firstChild)}catch(n){console.warn("Could not render Lit template:",n)}return e}function C(t){return t!=null&&(typeof t=="object"||typeof t=="function")&&typeof t.then=="function"||t instanceof Promise}function Y(t,e,n){if(!e)throw new Error("Container element is required");let o,u,a=[];return(0,m.createRoot)(s=>{(0,m.batch)(()=>{c.active||(e.textContent=""),S(e,t)}),u=s}),()=>{u?.(),o?.(),a.forEach(s=>s()),e.textContent=""}}var A,de={getStore:()=>A,run(t,e){let n=A;A=t;try{return e()}finally{A=n}}},pe=de;function U(){return pe.getStore()}var R=require("@fluixi/reactive/signal");var ye="__FX_DATA__";var O;function Z(){let t=globalThis.__FX_DATA__;if(t)return t;if(O!==void 0)return O;let e=null;if(typeof document<"u"){let n=document.getElementById(ye)?.textContent;if(n)try{e=JSON.parse(n)}catch{e=null}}return O=e}function I(){for(;;){for(;c.cursor&&c.cursor.nodeType===3&&c.cursor.data==="";)c.cursor=c.cursor.nextSibling;if(c.cursor!=null||!c.parents.length)return;c.cursor=c.parents.pop().nextSibling}}var ge=new Set(["area","base","br","col","embed","hr","img","input","link","meta","param","source","track","wbr"]),k=typeof process<"u"&&process.env&&!1;function q(t,e){let n=e.nodeType===1?`<${e.tagName.toLowerCase()}>`:e.nodeType===3?`text ${JSON.stringify((e.nodeValue??"").slice(0,24))}`:e.nodeType===8?"comment":"node";console.warn(`[fluixi] hydration mismatch: expected ${t} but the server DOM has ${n}. Server and client rendered different markup; recreating this node on the client. Check for non-deterministic render (Date.now(), Math.random(), browser-only branches, untransported data).`)}function me(t){I();let e=c.cursor;return e&&e.nodeType===1&&e.tagName.toLowerCase()===t.toLowerCase()?(ge.has(t.toLowerCase())?c.cursor=e.nextSibling:(c.parents.push(e),c.cursor=e.firstChild),e):(k&&e&&q(`<${t}>`,e),null)}function xe(t){if(t==="")return null;I();let e=c.cursor;return e&&e.nodeType===3?(c.cursor=e.nextSibling,e.nodeValue!==t&&(e.nodeValue=t),e):(k&&e&&q(`text ${JSON.stringify(t.slice(0,24))}`,e),null)}function he(t){I();let e=c.cursor;return e&&e.nodeType===8&&e.data===t?(c.cursor=e.nextSibling,e):(k&&e&&q(`marker <!--${t.slice(0,24)}-->`,e),null)}var Q=!1;function Ee(){Q||(Q=!0,G({hydrateElement:me,hydrateText:xe,hydrateMarker:he}))}function ee(t,e,n){Ee(),c.active=!0,c.cursor=e.firstChild,c.parents=[];let o=Z(),u=n?.resourceNamespace,a=0;(0,R.setResourceIdSource)(()=>u?`${u}:r${a++}`:`r${a++}`),(0,R.setServerDataGetter)(o?s=>s in o?{value:o[s]}:void 0:null);try{return Y(t,e)}finally{c.active=!1,c.cursor=null,c.parents=[]}}var j="fluixi-island";function be(t){let{component:e,props:n={},name:o}=t,u=X(j),a=o??e.name??"Island";v(u,"name",a),v(u,"props",JSON.stringify(n??{}));let s=T?U():void 0;if(s){let r=s.nextIslandNamespace(a);S(u,()=>s.withResourceScope(r,()=>e(n)))}else S(u,()=>e(n));return u}var te=!1;function Ne(){if(te||typeof document>"u")return;te=!0;let t=document.createElement("style");t.textContent=`${j}{display:contents}`,document.head.appendChild(t)}function Te(t){if(typeof document>"u")return;Ne();let e=document.querySelectorAll(j),n=new Map;e.forEach(o=>{let u=o.getAttribute("name")??"",a=n.get(u)??0;n.set(u,a+1);let s=t[u];if(!s){typeof process>"u"&&console.warn(`[fluixi] island "${u}" has no component in the registry — left static.`);return}let r={};try{r=JSON.parse(o.getAttribute("props")||"{}")}catch{}ee(()=>s(r),o,{resourceNamespace:`${u}#${a}`})})}
@@ -0,0 +1,23 @@
1
+ export interface IslandProps<P = any> {
2
+ /** The interactive component to render + hydrate. */
3
+ component: (props: P) => any;
4
+ /** Props passed to the component (must be JSON-serializable for transport). */
5
+ props?: P;
6
+ /** Registry key the client looks this island up by. Defaults to `component.name`. */
7
+ name?: string;
8
+ }
9
+ /**
10
+ * Wrap a component in an island boundary. Renders the component normally (so the static
11
+ * HTML is server-rendered), inside a `<fluixi-island>` element carrying the name + the
12
+ * serialized props for the client to hydrate from.
13
+ */
14
+ export declare function Island<P = any>(props: IslandProps<P>): any;
15
+ export type IslandRegistry = Record<string, (props: any) => any>;
16
+ /**
17
+ * Client entry for an islands page: find every `<fluixi-island>`, look its component up
18
+ * in `registry` by name, parse its props, and hydrate that subtree in place. The rest of
19
+ * the page stays static (never hydrated → no reactivity wired, no extra JS executed).
20
+ * Call this instead of `startClient(App)`.
21
+ */
22
+ export declare function hydrateIslands(registry: IslandRegistry): void;
23
+ //# sourceMappingURL=island.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"island.d.ts","sourceRoot":"","sources":["../../../src/lib/dom/island.ts"],"names":[],"mappings":"AA+BA,MAAM,WAAW,WAAW,CAAC,CAAC,GAAG,GAAG;IAClC,qDAAqD;IACrD,SAAS,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,GAAG,CAAC;IAC7B,+EAA+E;IAC/E,KAAK,CAAC,EAAE,CAAC,CAAC;IACV,qFAAqF;IACrF,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;;;GAIG;AACH,wBAAgB,MAAM,CAAC,CAAC,GAAG,GAAG,EAAE,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC,GAAG,GAAG,CAkB1D;AAYD,MAAM,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,GAAG,CAAC,CAAC;AAEjE;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,cAAc,GAAG,IAAI,CA2B7D"}
@@ -0,0 +1,100 @@
1
+ /**
2
+ * Islands — partial hydration. By default Fluixi hydrates the whole app; an island
3
+ * hydrates ONLY its own interactive subtree, leaving the rest of the page as inert
4
+ * static server HTML (less client JS, faster TTI).
5
+ *
6
+ * // server-rendered page
7
+ * <Island name="Counter" component={Counter} props={{ start: 0 }} />
8
+ *
9
+ * // client entry — instead of startClient(App):
10
+ * hydrateIslands({ Counter });
11
+ *
12
+ * The server wraps the component in a `<fluixi-island name props>` boundary (props as a
13
+ * JSON attribute). On the client, `hydrateIslands` finds those boundaries, looks each up
14
+ * in the registry, and hydrates just that subtree in place.
15
+ *
16
+ * Note: islands are self-contained interactivity — pass data via `props`. Resources read
17
+ * inside an island ARE seeded per-island from `__FX_DATA__`: the server namespaces each
18
+ * island's resource ids (`Counter#0:r0`, …) and the client reproduces that namespace when
19
+ * it hydrates the island, so the island's resources don't refetch. (A resource created
20
+ * lazily in a data WATERFALL — after the first resolves during the async drain — falls
21
+ * outside the synchronous island scope and refetches on the client; pass such data via
22
+ * `props` instead.)
23
+ */
24
+ import { createNativeElement, insert } from './runtime.js';
25
+ import { isServer } from './server/host.js';
26
+ import { getRequestContext } from './server/request-context.js';
27
+ import { setAttribute } from './utils.js';
28
+ import { hydrate } from './hydration.js';
29
+ const TAG = 'fluixi-island';
30
+ /**
31
+ * Wrap a component in an island boundary. Renders the component normally (so the static
32
+ * HTML is server-rendered), inside a `<fluixi-island>` element carrying the name + the
33
+ * serialized props for the client to hydrate from.
34
+ */
35
+ export function Island(props) {
36
+ const { component, props: cprops = {}, name } = props;
37
+ const el = createNativeElement(TAG);
38
+ const islandName = name ?? component.name ?? 'Island';
39
+ setAttribute(el, 'name', islandName);
40
+ setAttribute(el, 'props', JSON.stringify(cprops ?? {}));
41
+ // On the server, scope this island's resource ids to a per-island namespace
42
+ // (`name#N` in render order). The render-once model runs the insert effect
43
+ // synchronously, so resources created while the island's subtree renders are
44
+ // numbered within the scope — and the client reproduces the same ids per island.
45
+ const ctx = isServer ? getRequestContext() : undefined;
46
+ if (ctx) {
47
+ const ns = ctx.nextIslandNamespace(islandName);
48
+ insert(el, () => ctx.withResourceScope(ns, () => component(cprops)));
49
+ }
50
+ else {
51
+ insert(el, () => component(cprops));
52
+ }
53
+ return el;
54
+ }
55
+ let _styleInjected = false;
56
+ function ensureDisplayContents() {
57
+ if (_styleInjected || typeof document === 'undefined')
58
+ return;
59
+ _styleInjected = true;
60
+ const style = document.createElement('style');
61
+ // The boundary element must not affect layout.
62
+ style.textContent = `${TAG}{display:contents}`;
63
+ document.head.appendChild(style);
64
+ }
65
+ /**
66
+ * Client entry for an islands page: find every `<fluixi-island>`, look its component up
67
+ * in `registry` by name, parse its props, and hydrate that subtree in place. The rest of
68
+ * the page stays static (never hydrated → no reactivity wired, no extra JS executed).
69
+ * Call this instead of `startClient(App)`.
70
+ */
71
+ export function hydrateIslands(registry) {
72
+ if (typeof document === 'undefined')
73
+ return;
74
+ ensureDisplayContents();
75
+ const els = document.querySelectorAll(TAG);
76
+ // Per-name occurrence counter, in document order — mirrors the server's render-order
77
+ // `nextIslandNamespace`, so island `name#N` here maps to the same namespace the server
78
+ // used when it numbered that island's resource ids.
79
+ const counts = new Map();
80
+ els.forEach((el) => {
81
+ const name = el.getAttribute('name') ?? '';
82
+ const occ = counts.get(name) ?? 0;
83
+ counts.set(name, occ + 1);
84
+ const Comp = registry[name];
85
+ if (!Comp) {
86
+ if (typeof process === 'undefined' || process.env?.NODE_ENV !== 'production') {
87
+ console.warn(`[fluixi] island "${name}" has no component in the registry — left static.`);
88
+ }
89
+ return;
90
+ }
91
+ let props = {};
92
+ try {
93
+ props = JSON.parse(el.getAttribute('props') || '{}');
94
+ }
95
+ catch {
96
+ /* malformed props → hydrate with none */
97
+ }
98
+ hydrate(() => Comp(props), el, { resourceNamespace: `${name}#${occ}` });
99
+ });
100
+ }
@@ -0,0 +1 @@
1
+ import{isSignal as g}from"@fluixi/reactive/signal";var k="http://www.w3.org/2000/svg";function S(t,e,n,o=!1){if(n==null||n===!1){t.removeAttribute(e);return}if(n===!0){t.setAttribute(e,"");return}if(typeof n=="object"){t.setAttribute(e,JSON.stringify(n));return}t.setAttribute(e,String(n))}var he=typeof Symbol=="function"&&Symbol.for?Symbol.for("react.element"):60103;function E(t){return typeof t=="function"&&t[Symbol.for("fluixi-component")]===!0}import{batch as ee,createEffect as Pe,createRenderEffect as te,createRoot as ne,onCleanup as oe,readChildren as Me}from"@fluixi/reactive/signal";var N=typeof document>"u";var j=Symbol.for("fluixi.server-node"),q=null;function R(){if(!q)throw new Error("[fluixi] server render ran before @fluixi/dom/server loaded");return q}function L(t){return t!=null&&t[j]===!0?!0:typeof Node<"u"&&t instanceof Node}function H(t){return t!=null&&t[j]===!0?t.nodeType===3:typeof Text<"u"&&t instanceof Text}var c={active:!1,cursor:null,parents:[]},F=null;function V(t){F=t}function P(){return F}function M(t,e){return c.active&&e.parentNode===t}function W(t){let e=c.parents.lastIndexOf(t);e!==-1&&(c.parents.length=e),c.cursor=t.nextSibling}function h(t){if(N)return R().createText(t);if(c.active){let e=P()?.hydrateText(t);if(e)return e}return document.createTextNode(t)}function G(t,e=!1){if(N)return R().createElement(t,e);if(c.active){let n=P()?.hydrateElement(t);if(n)return n}return e?document.createElementNS(k,t):document.createElement(t)}var x=0,re=200;function ie(t,e,n,o,u){let a=o,s=new Map;return te(()=>{let r;if(E(t)&&!g(t)){if(!s.has(t)){x++;try{let i=t();s.set(t,i)}finally{x--}}for(r=s.get(t);typeof r=="function"&&g(r);)r=r()}else for(r=t();typeof r=="function"&&g(r);)r=r();{let i=0;for(;typeof r=="function"&&i++<50;)if(E(r)){if(!s.has(r)){let f=r;x++;try{let l=f();s.set(f,l)}finally{x--}}r=s.get(r)}else if(g(r))r=r();else if(r=r(),typeof r!="function"||!g(r)&&!E(r))break}x++;try{a=T(e,r,n,a,s),u(a)}finally{x--}})}function w(t,e,n,o){if(x>re)return console.error("[insert] Exceeded max call depth — possible infinite loop."),()=>null;n!==void 0&&!n&&(n=h(""),t.appendChild(n));let u=o??null;if(typeof e!="function"){x++;try{u=T(t,e,n,null)}finally{x--}return()=>u}let a=ie(e,t,n,u,s=>{u=s});return()=>(a?.(),u)}function T(t,e,n,o,u){if(e==null||typeof e=="boolean")return b(t,o,n);if(typeof e=="function")for(;typeof e=="function";)e=e();if(e==null||typeof e=="boolean")return b(t,o,n);if(v(e)){let s=h("");return Array.isArray(o)?o.length>0?(t.replaceChild(s,o[0]),b(t,o.slice(1),n)):y(t,s,n):o?t.replaceChild(s,o):y(t,s,n),e.then(r=>{s.parentNode===t&&T(t,r,s.nextSibling,s)}).catch(r=>{console.error("Error resolving promise in insertExpression:",r)}),s}let a=typeof e;if(a==="string"||a==="number"){if(a==="number"&&(e=String(e)),Array.isArray(o)){if(o.length===0){let r=h(e);return y(t,r,n),r}if(o.length===1&&o[0].nodeType===3)return o[0].data=e,o;o=b(t,o,n)}if(o&&H(o))return o.data=e,o;let s=h(e);return o&&o.parentNode===t?t.replaceChild(s,o):M(t,s)||y(t,s,n),s}if(L(e))return M(t,e)?(W(e),e):Array.isArray(o)?(o.length===0?y(t,e,n):o[0].parentNode===t?(t.replaceChild(e,o[0]),b(t,o.slice(1),n)):y(t,e,n),e):(o?o!==e&&(o.parentNode===t?t.replaceChild(e,o):y(t,e,n)):y(t,e,n),e);if(Array.isArray(e)){let s=[],r=Array.isArray(o)?o:o?[o]:[],i=[];m(e,s,t,n,!0,u,i);let f=se(t,r,s,n);for(let l of i){let d=w(t,l.sig,l.marker);oe(()=>{b(t,d()),l.marker.parentNode===t&&t.removeChild(l.marker)})}return f}if(a==="object"&&e!==null&&typeof e=="object"){let s=e;if("_$litType$"in s||"_$litDirective$"in s)return T(t,B(e),n,o);if("type"in s&&"props"in s){let r=s;if(typeof r.type=="function"){let i=r.type(r.props||{});return T(t,i,n,o)}}}return b(t,o,n)}function m(t,e,n,o,u=!0,a,s){for(let r=0;r<t.length;r++){let i=t[r];if(!(i==null||typeof i=="boolean")){for(;typeof i=="function"&&!v(i)&&!g(i)&&!E(i)&&(i=i(),!(i==null||typeof i=="boolean")););if(!(i==null||typeof i=="boolean")){if(typeof i=="function"){let f;for(E(i)&&!g(i)?(a||(a=new Map),a.has(i)||a.set(i,i()),f=a.get(i)):f=i();typeof f=="function"&&!v(f)&&!g(f)&&!E(f);)a||(a=new Map),a.has(f)||a.set(f,f()),f=a.get(f);if(f==null||typeof f=="boolean")continue;if(typeof f=="function"){if(g(f)){if(s){let d=h("");e.push(d),s.push({marker:d,sig:f});continue}let l=f();for(;typeof l=="function"&&g(l);)l=l();if(l==null||typeof l=="boolean")continue;Array.isArray(l)?m(l,e,n,o,u,a):m([l],e,n,o,u,a);continue}continue}Array.isArray(f)?m(f,e,n,o,u,a,s):m([f],e,n,o,u,a,s);continue}if(v(i)){let f=h("");e.push(f),i.then(l=>{if(f.parentNode){let d=[];if(m([l],d,f.parentNode,void 0,!1,a),d.length>0){f.parentNode.replaceChild(d[0],f);for(let p=1;p<d.length;p++)f.parentNode?.insertBefore(d[p],d[p-1].nextSibling)}}}).catch(l=>console.error("Error resolving promise in array:",l));continue}if(Array.isArray(i)){m(i,e,n,o,u,a,s);continue}if(L(i)){e.push(i);continue}if(typeof i=="object"&&i!==null&&("_$litType$"in i||"_$litDirective$"in i)){let f=B(i);for(let l of f)e.push(l);continue}if(typeof i=="object"&&i!==null&&"type"in i&&"props"in i){let f=i;if(typeof f.type=="function"){let l=f.type(f.props||{});Array.isArray(l)?m(l,e,n,o,!1,a):m([l],e,n,o,!1,a);continue}}if(typeof i=="string"||typeof i=="number"){let f=String(i);if(f.trim()===""&&f!==" ")continue;e.push(h(f));continue}e.push(h(String(i)))}}}}function se(t,e,n,o){for(let d=0;d<n.length;d++)n[d].parentNode!==null&&n[d].parentNode!==t&&(n=n.slice(),n[d]=n[d].cloneNode(!0));let u=n.length,a=e.length,s=u,r=0,i=0,f=a>0?e[a-1].nextSibling??void 0:o,l=null;for(;r<a||i<s;){if(e[r]===n[i]){r++,i++;continue}for(;a>r&&s>i&&e[a-1]===n[s-1];)a--,s--;if(a===r){let d=s<u?i?n[i-1].nextSibling??void 0:n[s-i]:f;for(;i<s;)y(t,n[i++],d)}else if(s===i)for(;r<a;)(!l||!l.has(e[r]))&&e[r].parentNode===t&&t.removeChild(e[r]),r++;else if(e[r]===n[s-1]&&n[i]===e[a-1]){let d=e[--a].nextSibling;y(t,n[i++],e[r++].nextSibling),y(t,n[--s],d),e[a]=e[r-1]}else{if(!l){l=new Map;let p=i;for(;p<s;)l.set(n[p],p++)}let d=l.get(e[r]);if(d!=null)if(i<d&&d<s){let p=r,A=1;for(;++p<a&&p<s&&!(!l.has(e[p])||l.get(e[p])!==d+A);)A++;if(A>d-i){let Q=e[r];for(;i<d;)y(t,n[i++],Q)}else e[r].parentNode===t?t.replaceChild(n[i++],e[r++]):(y(t,n[i++],f),r++)}else r++;else e[r].parentNode===t&&t.removeChild(e[r]),r++}}return n}function b(t,e,n){if(e)if(Array.isArray(e))for(let o=0;o<e.length;o++)e[o].parentNode===t&&t.removeChild(e[o]);else e.parentNode===t&&t.removeChild(e);return null}function y(t,e,n){c.active&&e.parentNode===t||(n&&n.parentNode===t?t.insertBefore(e,n):t.appendChild(e))}var K=null;function B(t){let e=[];if(!K)return console.warn("Lit render not registered. Call registerLitRender first."),e;try{let n=document.createElement("div");for(K(t,n);n.firstChild;)e.push(n.firstChild),n.removeChild(n.firstChild)}catch(n){console.warn("Could not render Lit template:",n)}return e}function v(t){return t!=null&&(typeof t=="object"||typeof t=="function")&&typeof t.then=="function"||t instanceof Promise}function J(t,e,n){if(!e)throw new Error("Container element is required");let o,u,a=[];return ne(s=>{ee(()=>{c.active||(e.textContent=""),w(e,t)}),u=s}),()=>{u?.(),o?.(),a.forEach(s=>s()),e.textContent=""}}var C,ae={getStore:()=>C,run(t,e){let n=C;C=t;try{return e()}finally{C=n}}},fe=ae;function X(){return fe.getStore()}import{setResourceIdSource as le,setServerDataGetter as ce}from"@fluixi/reactive/signal";var ue="__FX_DATA__";var $;function z(){let t=globalThis.__FX_DATA__;if(t)return t;if($!==void 0)return $;let e=null;if(typeof document<"u"){let n=document.getElementById(ue)?.textContent;if(n)try{e=JSON.parse(n)}catch{e=null}}return $=e}function _(){for(;;){for(;c.cursor&&c.cursor.nodeType===3&&c.cursor.data==="";)c.cursor=c.cursor.nextSibling;if(c.cursor!=null||!c.parents.length)return;c.cursor=c.parents.pop().nextSibling}}var de=new Set(["area","base","br","col","embed","hr","img","input","link","meta","param","source","track","wbr"]),D=typeof process<"u"&&process.env&&!1;function O(t,e){let n=e.nodeType===1?`<${e.tagName.toLowerCase()}>`:e.nodeType===3?`text ${JSON.stringify((e.nodeValue??"").slice(0,24))}`:e.nodeType===8?"comment":"node";console.warn(`[fluixi] hydration mismatch: expected ${t} but the server DOM has ${n}. Server and client rendered different markup; recreating this node on the client. Check for non-deterministic render (Date.now(), Math.random(), browser-only branches, untransported data).`)}function pe(t){_();let e=c.cursor;return e&&e.nodeType===1&&e.tagName.toLowerCase()===t.toLowerCase()?(de.has(t.toLowerCase())?c.cursor=e.nextSibling:(c.parents.push(e),c.cursor=e.firstChild),e):(D&&e&&O(`<${t}>`,e),null)}function ye(t){if(t==="")return null;_();let e=c.cursor;return e&&e.nodeType===3?(c.cursor=e.nextSibling,e.nodeValue!==t&&(e.nodeValue=t),e):(D&&e&&O(`text ${JSON.stringify(t.slice(0,24))}`,e),null)}function ge(t){_();let e=c.cursor;return e&&e.nodeType===8&&e.data===t?(c.cursor=e.nextSibling,e):(D&&e&&O(`marker <!--${t.slice(0,24)}-->`,e),null)}var Y=!1;function me(){Y||(Y=!0,V({hydrateElement:pe,hydrateText:ye,hydrateMarker:ge}))}function U(t,e,n){me(),c.active=!0,c.cursor=e.firstChild,c.parents=[];let o=z(),u=n?.resourceNamespace,a=0;le(()=>u?`${u}:r${a++}`:`r${a++}`),ce(o?s=>s in o?{value:o[s]}:void 0:null);try{return J(t,e)}finally{c.active=!1,c.cursor=null,c.parents=[]}}var I="fluixi-island";function Xe(t){let{component:e,props:n={},name:o}=t,u=G(I),a=o??e.name??"Island";S(u,"name",a),S(u,"props",JSON.stringify(n??{}));let s=N?X():void 0;if(s){let r=s.nextIslandNamespace(a);w(u,()=>s.withResourceScope(r,()=>e(n)))}else w(u,()=>e(n));return u}var Z=!1;function xe(){if(Z||typeof document>"u")return;Z=!0;let t=document.createElement("style");t.textContent=`${I}{display:contents}`,document.head.appendChild(t)}function ze(t){if(typeof document>"u")return;xe();let e=document.querySelectorAll(I),n=new Map;e.forEach(o=>{let u=o.getAttribute("name")??"",a=n.get(u)??0;n.set(u,a+1);let s=t[u];if(!s){typeof process>"u"&&console.warn(`[fluixi] island "${u}" has no component in the registry — left static.`);return}let r={};try{r=JSON.parse(o.getAttribute("props")||"{}")}catch{}U(()=>s(r),o,{resourceNamespace:`${u}#${a}`})})}export{Xe as Island,ze as hydrateIslands};