sibujs 1.0.0-beta.1

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 (302) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +1630 -0
  3. package/dist/browser.cjs +815 -0
  4. package/dist/browser.d.cts +174 -0
  5. package/dist/browser.d.ts +174 -0
  6. package/dist/browser.js +458 -0
  7. package/dist/build.cjs +4970 -0
  8. package/dist/build.d.cts +630 -0
  9. package/dist/build.d.ts +630 -0
  10. package/dist/build.js +2478 -0
  11. package/dist/cdn.global.js +115 -0
  12. package/dist/chunk-27QC4FPL.js +67 -0
  13. package/dist/chunk-2ABBWCGC.js +65 -0
  14. package/dist/chunk-2MUNQYZ7.js +26 -0
  15. package/dist/chunk-2PSPKNUI.js +1711 -0
  16. package/dist/chunk-35CDLDX5.js +1758 -0
  17. package/dist/chunk-36MU4CFV.js +41 -0
  18. package/dist/chunk-3FIQOFI6.js +182 -0
  19. package/dist/chunk-3GHNC2BN.js +28 -0
  20. package/dist/chunk-3HLWWEPU.js +909 -0
  21. package/dist/chunk-3IVI3J54.js +252 -0
  22. package/dist/chunk-3KZ72WNW.js +944 -0
  23. package/dist/chunk-4AU64SQV.js +182 -0
  24. package/dist/chunk-4MOK7HAR.js +84 -0
  25. package/dist/chunk-4QK6FBDH.js +1429 -0
  26. package/dist/chunk-566Z7HXB.js +737 -0
  27. package/dist/chunk-5CRBB7XP.js +358 -0
  28. package/dist/chunk-5G67D3IZ.js +168 -0
  29. package/dist/chunk-5NCPAWBE.js +99 -0
  30. package/dist/chunk-5O2RKXR3.js +1444 -0
  31. package/dist/chunk-6BTBDO6A.js +633 -0
  32. package/dist/chunk-6IWEHW57.js +43 -0
  33. package/dist/chunk-6JGMNCD6.js +282 -0
  34. package/dist/chunk-6QRLJNXR.js +1425 -0
  35. package/dist/chunk-7HM5UE5T.js +270 -0
  36. package/dist/chunk-7JOLTGUH.js +58 -0
  37. package/dist/chunk-7MCWJCQK.js +909 -0
  38. package/dist/chunk-7RIIFP3E.js +1758 -0
  39. package/dist/chunk-7UASYN3G.js +254 -0
  40. package/dist/chunk-7W2WYHDI.js +741 -0
  41. package/dist/chunk-7Y35RDSJ.js +872 -0
  42. package/dist/chunk-A65GFJBL.js +65 -0
  43. package/dist/chunk-AD6ZIEDK.js +67 -0
  44. package/dist/chunk-AK5Y72F3.js +1426 -0
  45. package/dist/chunk-APOMMWH4.js +282 -0
  46. package/dist/chunk-ARZVTWIQ.js +1750 -0
  47. package/dist/chunk-AWWBM2BI.js +664 -0
  48. package/dist/chunk-AX5VEQTY.js +58 -0
  49. package/dist/chunk-AYTXVOW3.js +1708 -0
  50. package/dist/chunk-BG4A246G.js +1746 -0
  51. package/dist/chunk-BNFJJA2L.js +1425 -0
  52. package/dist/chunk-BPKPBVU5.js +59 -0
  53. package/dist/chunk-BPKPPSXC.js +282 -0
  54. package/dist/chunk-BPWKKK7F.js +1711 -0
  55. package/dist/chunk-CCKX6YTC.js +1735 -0
  56. package/dist/chunk-CIF5Z3MP.js +58 -0
  57. package/dist/chunk-CSXYU7IO.js +457 -0
  58. package/dist/chunk-D6JD4FDC.js +26 -0
  59. package/dist/chunk-E7NGA7X2.js +59 -0
  60. package/dist/chunk-EEPPJKAE.js +443 -0
  61. package/dist/chunk-EJMYGAGQ.js +717 -0
  62. package/dist/chunk-EL6Z5MDY.js +55 -0
  63. package/dist/chunk-EP7VRLEB.js +41 -0
  64. package/dist/chunk-ETMEC6FH.js +99 -0
  65. package/dist/chunk-EZ2WHYVL.js +65 -0
  66. package/dist/chunk-EZRVMSZK.js +67 -0
  67. package/dist/chunk-F2TRGINX.js +254 -0
  68. package/dist/chunk-F5JCIH3Q.js +642 -0
  69. package/dist/chunk-FGK3JKMN.js +909 -0
  70. package/dist/chunk-FQWPKSTD.js +1437 -0
  71. package/dist/chunk-FWHVLMCI.js +26 -0
  72. package/dist/chunk-GBEYQRO2.js +303 -0
  73. package/dist/chunk-GBLES3NK.js +248 -0
  74. package/dist/chunk-GQVGUQW6.js +1436 -0
  75. package/dist/chunk-HCV2T76T.js +457 -0
  76. package/dist/chunk-HS7ZKVPR.js +182 -0
  77. package/dist/chunk-HXDVV7HZ.js +909 -0
  78. package/dist/chunk-IB23VMO3.js +1746 -0
  79. package/dist/chunk-IEMZ7RTT.js +99 -0
  80. package/dist/chunk-IPGRSN42.js +1750 -0
  81. package/dist/chunk-IVMOK2QN.js +1750 -0
  82. package/dist/chunk-JCLGQO7T.js +443 -0
  83. package/dist/chunk-JDXL7KDB.js +1436 -0
  84. package/dist/chunk-JIIFW636.js +270 -0
  85. package/dist/chunk-JWGEEH7H.js +944 -0
  86. package/dist/chunk-K2BESAG7.js +1688 -0
  87. package/dist/chunk-K2U5YGF4.js +877 -0
  88. package/dist/chunk-K45FQ4Y4.js +175 -0
  89. package/dist/chunk-K7BPE427.js +1432 -0
  90. package/dist/chunk-KL3266RS.js +26 -0
  91. package/dist/chunk-KNN4P7DZ.js +84 -0
  92. package/dist/chunk-KP2DZH5Q.js +254 -0
  93. package/dist/chunk-KZHAJSQR.js +1636 -0
  94. package/dist/chunk-LBKGHMQV.js +1750 -0
  95. package/dist/chunk-LBTEPL7A.js +1731 -0
  96. package/dist/chunk-LEBBPTDB.js +1444 -0
  97. package/dist/chunk-LLH63WVQ.js +98 -0
  98. package/dist/chunk-LWVR2C4G.js +1711 -0
  99. package/dist/chunk-M3MDTVV2.js +896 -0
  100. package/dist/chunk-M5GNLDEO.js +303 -0
  101. package/dist/chunk-MFHVGKET.js +267 -0
  102. package/dist/chunk-MGWSG3PM.js +358 -0
  103. package/dist/chunk-MJNB47HB.js +19 -0
  104. package/dist/chunk-MLKGABMK.js +9 -0
  105. package/dist/chunk-MQWTY3JY.js +944 -0
  106. package/dist/chunk-MZZOQHNI.js +642 -0
  107. package/dist/chunk-NIHWGZS4.js +1426 -0
  108. package/dist/chunk-NSVVHQK5.js +41 -0
  109. package/dist/chunk-NVI2WE7D.js +443 -0
  110. package/dist/chunk-O7QBO3PH.js +58 -0
  111. package/dist/chunk-OAUPQBO2.js +270 -0
  112. package/dist/chunk-OB2LMD7C.js +297 -0
  113. package/dist/chunk-OHEYBWQU.js +58 -0
  114. package/dist/chunk-OI6OXUHJ.js +443 -0
  115. package/dist/chunk-OX2VMRMV.js +633 -0
  116. package/dist/chunk-P4FYE5TX.js +866 -0
  117. package/dist/chunk-P5KFWM4H.js +98 -0
  118. package/dist/chunk-PUMLE7RJ.js +1711 -0
  119. package/dist/chunk-Q4MFANBF.js +282 -0
  120. package/dist/chunk-QLEKZMMU.js +282 -0
  121. package/dist/chunk-RGGNGVO3.js +98 -0
  122. package/dist/chunk-RKJDRVV6.js +443 -0
  123. package/dist/chunk-S5BHU353.js +43 -0
  124. package/dist/chunk-SHQUSFH7.js +1426 -0
  125. package/dist/chunk-SMB4DBMD.js +182 -0
  126. package/dist/chunk-SNYHQP3D.js +743 -0
  127. package/dist/chunk-T24L3TBF.js +1717 -0
  128. package/dist/chunk-TAQNSOKT.js +692 -0
  129. package/dist/chunk-TDNY4SUA.js +41 -0
  130. package/dist/chunk-TNNF56IQ.js +1750 -0
  131. package/dist/chunk-TR7E6LYX.js +457 -0
  132. package/dist/chunk-URWUFH45.js +98 -0
  133. package/dist/chunk-UUSIH3XH.js +1429 -0
  134. package/dist/chunk-UYFNXLKR.js +1436 -0
  135. package/dist/chunk-V6F7KUWD.js +270 -0
  136. package/dist/chunk-VCZLXRMR.js +254 -0
  137. package/dist/chunk-VDHXSSBT.js +1426 -0
  138. package/dist/chunk-VM4QMKVK.js +254 -0
  139. package/dist/chunk-VWGYKYL2.js +737 -0
  140. package/dist/chunk-VX2OFBJN.js +1426 -0
  141. package/dist/chunk-VXVIE6DG.js +84 -0
  142. package/dist/chunk-W4OH7HG4.js +40 -0
  143. package/dist/chunk-WBVJX4GZ.js +98 -0
  144. package/dist/chunk-WDU2ZV4I.js +1426 -0
  145. package/dist/chunk-X6VUCICU.js +457 -0
  146. package/dist/chunk-XAY7FM7Y.js +618 -0
  147. package/dist/chunk-XJZ5Z2CM.js +642 -0
  148. package/dist/chunk-XKVFQTJJ.js +254 -0
  149. package/dist/chunk-XRLFASCY.js +22 -0
  150. package/dist/chunk-XYU6TZOW.js +182 -0
  151. package/dist/chunk-Y745CBVB.js +944 -0
  152. package/dist/chunk-YLBJSXYY.js +944 -0
  153. package/dist/chunk-YQJIKVPZ.js +1429 -0
  154. package/dist/chunk-YRM2VCZF.js +457 -0
  155. package/dist/chunk-YS33KBVJ.js +944 -0
  156. package/dist/chunk-Z27DZPDG.js +41 -0
  157. package/dist/chunk-ZXQ5NAEN.js +32 -0
  158. package/dist/contracts-B552GopR.d.cts +245 -0
  159. package/dist/contracts-B552GopR.d.ts +245 -0
  160. package/dist/contracts-Bg1ECISC.d.cts +245 -0
  161. package/dist/contracts-Bg1ECISC.d.ts +245 -0
  162. package/dist/contracts-CMriKJ6P.d.cts +245 -0
  163. package/dist/contracts-CMriKJ6P.d.ts +245 -0
  164. package/dist/contracts-DOrhwbke.d.cts +245 -0
  165. package/dist/contracts-DOrhwbke.d.ts +245 -0
  166. package/dist/data.cjs +1373 -0
  167. package/dist/data.d.cts +434 -0
  168. package/dist/data.d.ts +434 -0
  169. package/dist/data.js +945 -0
  170. package/dist/devtools.cjs +1357 -0
  171. package/dist/devtools.d.cts +473 -0
  172. package/dist/devtools.d.ts +473 -0
  173. package/dist/devtools.js +1084 -0
  174. package/dist/ecosystem.cjs +1046 -0
  175. package/dist/ecosystem.d.cts +247 -0
  176. package/dist/ecosystem.d.ts +247 -0
  177. package/dist/ecosystem.js +369 -0
  178. package/dist/extras.cjs +8457 -0
  179. package/dist/extras.d.cts +2356 -0
  180. package/dist/extras.d.ts +2356 -0
  181. package/dist/extras.js +5152 -0
  182. package/dist/index.cjs +2648 -0
  183. package/dist/index.d.cts +869 -0
  184. package/dist/index.d.ts +869 -0
  185. package/dist/index.js +386 -0
  186. package/dist/motion.cjs +604 -0
  187. package/dist/motion.d.cts +146 -0
  188. package/dist/motion.d.ts +146 -0
  189. package/dist/motion.js +346 -0
  190. package/dist/patterns.cjs +815 -0
  191. package/dist/patterns.d.cts +163 -0
  192. package/dist/patterns.d.ts +163 -0
  193. package/dist/patterns.js +296 -0
  194. package/dist/performance.cjs +927 -0
  195. package/dist/performance.d.cts +416 -0
  196. package/dist/performance.d.ts +416 -0
  197. package/dist/performance.js +654 -0
  198. package/dist/plugins.cjs +2487 -0
  199. package/dist/plugins.d.cts +393 -0
  200. package/dist/plugins.d.ts +393 -0
  201. package/dist/plugins.js +1504 -0
  202. package/dist/signal-BnWpq6WB.d.cts +5 -0
  203. package/dist/signal-BnWpq6WB.d.ts +5 -0
  204. package/dist/src/components/ErrorBoundary.d.ts +15 -0
  205. package/dist/src/components/ErrorBoundary.js +119 -0
  206. package/dist/src/core/catch.d.ts +11 -0
  207. package/dist/src/core/catch.js +28 -0
  208. package/dist/src/core/each.d.ts +13 -0
  209. package/dist/src/core/each.js +68 -0
  210. package/dist/src/core/for.d.ts +12 -0
  211. package/dist/src/core/for.js +67 -0
  212. package/dist/src/core/html.d.ts +137 -0
  213. package/dist/src/core/html.js +155 -0
  214. package/dist/src/core/htmlIf.d.ts +11 -0
  215. package/dist/src/core/htmlIf.js +18 -0
  216. package/dist/src/core/lazy.d.ts +7 -0
  217. package/dist/src/core/lazy.js +16 -0
  218. package/dist/src/core/mount.d.ts +7 -0
  219. package/dist/src/core/mount.js +12 -0
  220. package/dist/src/core/slots.d.ts +3 -0
  221. package/dist/src/core/slots.js +3 -0
  222. package/dist/src/core/suspense.d.ts +10 -0
  223. package/dist/src/core/suspense.js +33 -0
  224. package/dist/src/core/tagFactory.d.ts +13 -0
  225. package/dist/src/core/tagFactory.js +86 -0
  226. package/dist/src/core/test.d.ts +11 -0
  227. package/dist/src/core/test.js +28 -0
  228. package/dist/src/core/types.d.ts +2 -0
  229. package/dist/src/core/types.js +1 -0
  230. package/dist/src/core/useComputed.d.ts +6 -0
  231. package/dist/src/core/useComputed.js +30 -0
  232. package/dist/src/core/useEffect.d.ts +6 -0
  233. package/dist/src/core/useEffect.js +23 -0
  234. package/dist/src/core/useState.d.ts +10 -0
  235. package/dist/src/core/useState.js +34 -0
  236. package/dist/src/core/useStore.d.ts +19 -0
  237. package/dist/src/core/useStore.js +53 -0
  238. package/dist/src/core/useWatch.d.ts +8 -0
  239. package/dist/src/core/useWatch.js +23 -0
  240. package/dist/src/plugins/i18n.d.ts +6 -0
  241. package/dist/src/plugins/i18n.js +16 -0
  242. package/dist/src/plugins/router.d.ts +188 -0
  243. package/dist/src/plugins/router.js +1178 -0
  244. package/dist/src/reactivity/bindAttribute.d.ts +5 -0
  245. package/dist/src/reactivity/bindAttribute.js +31 -0
  246. package/dist/src/reactivity/bindChildNode.d.ts +10 -0
  247. package/dist/src/reactivity/bindChildNode.js +46 -0
  248. package/dist/src/reactivity/bindTextNode.d.ts +10 -0
  249. package/dist/src/reactivity/bindTextNode.js +27 -0
  250. package/dist/src/reactivity/signal.d.ts +3 -0
  251. package/dist/src/reactivity/signal.js +1 -0
  252. package/dist/src/reactivity/track.d.ts +18 -0
  253. package/dist/src/reactivity/track.js +73 -0
  254. package/dist/src/reactivity/useComputed.d.ts +6 -0
  255. package/dist/src/reactivity/useComputed.js +30 -0
  256. package/dist/src/reactivity/useEffect.d.ts +6 -0
  257. package/dist/src/reactivity/useEffect.js +23 -0
  258. package/dist/src/reactivity/useState.d.ts +10 -0
  259. package/dist/src/reactivity/useState.js +34 -0
  260. package/dist/src/reactivity/useStore.d.ts +19 -0
  261. package/dist/src/reactivity/useStore.js +53 -0
  262. package/dist/src/reactivity/useWatch.d.ts +8 -0
  263. package/dist/src/reactivity/useWatch.js +23 -0
  264. package/dist/src/utils/sanitize.d.ts +1 -0
  265. package/dist/src/utils/sanitize.js +8 -0
  266. package/dist/ssr-27FOM46T.js +35 -0
  267. package/dist/ssr-GFUTTSJD.js +22 -0
  268. package/dist/ssr-K7DCR6BZ.js +35 -0
  269. package/dist/ssr-O6LFMRFP.js +35 -0
  270. package/dist/ssr-QZEVGMMK.js +35 -0
  271. package/dist/ssr-SGVBCAGC.js +35 -0
  272. package/dist/ssr-UB2IXCYX.js +35 -0
  273. package/dist/ssr-XBZQNV4O.js +22 -0
  274. package/dist/ssr-Y76FSXDU.js +35 -0
  275. package/dist/ssr-YQJ4AYBD.js +35 -0
  276. package/dist/ssr.cjs +1757 -0
  277. package/dist/ssr.d.cts +478 -0
  278. package/dist/ssr.d.ts +478 -0
  279. package/dist/ssr.js +743 -0
  280. package/dist/tagFactory-CZPO4RXF.d.cts +34 -0
  281. package/dist/tagFactory-CZPO4RXF.d.ts +34 -0
  282. package/dist/tagFactory-CgImPVMY.d.cts +22 -0
  283. package/dist/tagFactory-CgImPVMY.d.ts +22 -0
  284. package/dist/tagFactory-Cw1iv5if.d.cts +22 -0
  285. package/dist/tagFactory-Cw1iv5if.d.ts +22 -0
  286. package/dist/tagFactory-DeAXq9ef.d.cts +30 -0
  287. package/dist/tagFactory-DeAXq9ef.d.ts +30 -0
  288. package/dist/tagFactory-SkY0a7L1.d.cts +22 -0
  289. package/dist/tagFactory-SkY0a7L1.d.ts +22 -0
  290. package/dist/testing.cjs +1919 -0
  291. package/dist/testing.d.cts +491 -0
  292. package/dist/testing.d.ts +491 -0
  293. package/dist/testing.js +1862 -0
  294. package/dist/ui.cjs +1497 -0
  295. package/dist/ui.d.cts +264 -0
  296. package/dist/ui.d.ts +264 -0
  297. package/dist/ui.js +900 -0
  298. package/dist/widgets.cjs +919 -0
  299. package/dist/widgets.d.cts +165 -0
  300. package/dist/widgets.d.ts +165 -0
  301. package/dist/widgets.js +545 -0
  302. package/package.json +134 -0
package/dist/ssr.d.ts ADDED
@@ -0,0 +1,478 @@
1
+ /**
2
+ * Converts an HTMLElement tree to an HTML string for server-side rendering.
3
+ */
4
+ declare function renderToString(element: HTMLElement | DocumentFragment | Node): string;
5
+ /**
6
+ * Hydrates a server-rendered DOM tree by attaching event listeners
7
+ * and activating reactive bindings.
8
+ */
9
+ declare function hydrate(component: () => HTMLElement, container: HTMLElement): void;
10
+ /**
11
+ * Renders a component to a full HTML document string.
12
+ *
13
+ * **Security warning:** `headExtra` is injected as raw HTML into the document head.
14
+ * Never pass unsanitized user input to `headExtra` — it is intended for trusted,
15
+ * developer-controlled content only (e.g. inline styles, custom meta tags).
16
+ */
17
+ declare function renderToDocument(component: () => HTMLElement, options?: {
18
+ title?: string;
19
+ meta?: Record<string, string>[];
20
+ links?: Record<string, string>[];
21
+ scripts?: string[];
22
+ bodyAttrs?: Record<string, string>;
23
+ /** Raw HTML injected into <head>. Must not contain unsanitized user input. */
24
+ headExtra?: string;
25
+ }): string;
26
+ /**
27
+ * Renders a component tree to an async iterable of HTML chunks.
28
+ * Enables progressive server-side rendering — the consumer can write
29
+ * each chunk to a response stream as it becomes available.
30
+ */
31
+ declare function renderToStream(element: HTMLElement | DocumentFragment | Node): AsyncGenerator<string>;
32
+ /**
33
+ * Collects the full output of renderToStream into a string.
34
+ */
35
+ declare function collectStream(stream: AsyncGenerator<string> | AsyncIterable<string>): Promise<string>;
36
+ /**
37
+ * Renders a component tree to a Web ReadableStream<string>.
38
+ * Compatible with Node 18+, Deno, and edge runtimes.
39
+ * Uses pull-based backpressure — chunks are produced on demand.
40
+ */
41
+ declare function renderToReadableStream(element: HTMLElement | DocumentFragment | Node): ReadableStream<string>;
42
+ /**
43
+ * Marks an element as a hydration island. During partial hydration
44
+ * only elements marked with `data-sibu-island` will be hydrated.
45
+ */
46
+ declare function island(id: string, component: () => HTMLElement): HTMLElement;
47
+ /**
48
+ * Hydrate only elements marked as islands (`data-sibu-island`).
49
+ * Non-island content keeps its server-rendered HTML untouched.
50
+ */
51
+ declare function hydrateIslands(container: HTMLElement, islands: Record<string, () => HTMLElement>): void;
52
+ /**
53
+ * Progressively hydrate islands only when they enter the viewport.
54
+ * Uses IntersectionObserver to defer hydration of off-screen islands,
55
+ * reducing initial JavaScript execution cost.
56
+ *
57
+ * Returns a cleanup function that disconnects all observers.
58
+ */
59
+ declare function hydrateProgressively(container: HTMLElement, islands: Record<string, () => HTMLElement>, options?: IntersectionObserverInit): () => void;
60
+ /**
61
+ * Reset SSR state between requests. Call at the start of each SSR render
62
+ * to prevent ID drift in long-lived server processes.
63
+ */
64
+ declare function resetSSRState(): void;
65
+ /**
66
+ * Create a suspense boundary for SSR streaming.
67
+ * Renders fallback HTML inline and returns a promise for the resolved content.
68
+ *
69
+ * The returned element contains the fallback UI with a `data-sibu-suspense-id`
70
+ * marker. The promise resolves to `{ id, html }` once async content is ready.
71
+ */
72
+ declare function ssrSuspense(props: {
73
+ fallback: () => HTMLElement;
74
+ content: () => Promise<HTMLElement>;
75
+ }): {
76
+ element: HTMLElement;
77
+ promise: Promise<{
78
+ id: string;
79
+ html: string;
80
+ }>;
81
+ };
82
+ /**
83
+ * Generate an inline script that swaps a suspense fallback with resolved content.
84
+ * The id is escaped for both JS string and HTML attribute contexts to prevent injection.
85
+ */
86
+ declare function suspenseSwapScript(id: string): string;
87
+ /**
88
+ * Renders a component tree with suspense boundaries as a stream.
89
+ * Yields the main tree HTML first (including fallback content for suspended
90
+ * boundaries), then flushes resolved content with inline swap scripts.
91
+ */
92
+ declare function renderToSuspenseStream(element: HTMLElement | DocumentFragment | Node, pendingBoundaries?: Promise<{
93
+ id: string;
94
+ html: string;
95
+ }>[]): AsyncGenerator<string>;
96
+ /**
97
+ * Serialize application state into an HTML script tag for SSR.
98
+ * The serialized data is embedded in the document and picked up
99
+ * on the client with `deserializeState()`.
100
+ */
101
+ declare function serializeState(state: Record<string, unknown>): string;
102
+ /**
103
+ * Retrieve state that was embedded by `serializeState()` during SSR.
104
+ */
105
+ declare function deserializeState<T = Record<string, unknown>>(): T | undefined;
106
+
107
+ interface HeadProps {
108
+ title?: string | (() => string);
109
+ meta?: Record<string, string | (() => string)>[];
110
+ link?: Record<string, string>[];
111
+ script?: Record<string, string>[];
112
+ base?: {
113
+ href?: string;
114
+ target?: string;
115
+ };
116
+ }
117
+ /**
118
+ * Head() manages document <head> tags reactively.
119
+ * Supports dynamic title, meta tags, link tags, and structured data.
120
+ * Cleans up managed elements when called again.
121
+ */
122
+ declare function Head(props: HeadProps): Comment;
123
+ /**
124
+ * Sets structured data (JSON-LD) for SEO.
125
+ */
126
+ declare function setStructuredData(data: Record<string, unknown>): void;
127
+ /**
128
+ * Sets the canonical URL for the page.
129
+ */
130
+ declare function setCanonical(url: string): void;
131
+
132
+ interface SSGOptions {
133
+ routes: string[];
134
+ renderFn: (path: string) => Promise<string>;
135
+ outDir?: string;
136
+ }
137
+ interface SSGResult {
138
+ pages: Array<{
139
+ path: string;
140
+ html: string;
141
+ }>;
142
+ errors: Array<{
143
+ path: string;
144
+ error: Error;
145
+ }>;
146
+ }
147
+ /**
148
+ * Generate a static site by iterating over routes and collecting rendered HTML.
149
+ * This is a pure async function — it does NOT write files, only returns results.
150
+ */
151
+ declare function generateStaticSite(options: SSGOptions): Promise<SSGResult>;
152
+
153
+ interface ISROptions<T> {
154
+ revalidateAfter: number;
155
+ fetcher: () => Promise<T>;
156
+ initialData?: T;
157
+ }
158
+ /**
159
+ * Creates an Incremental Static Regeneration (ISR) resource.
160
+ * Data is fetched initially, then automatically revalidated after the
161
+ * specified interval using setInterval.
162
+ */
163
+ declare function createISR<T>(options: ISROptions<T>): {
164
+ data: () => T | undefined;
165
+ isStale: () => boolean;
166
+ revalidate: () => Promise<void>;
167
+ dispose: () => void;
168
+ };
169
+
170
+ type ActionFn<T = unknown> = (data: FormData | Record<string, unknown>) => Promise<T>;
171
+ interface ActionResult<T> {
172
+ data: () => T | undefined;
173
+ error: () => Error | undefined;
174
+ loading: () => boolean;
175
+ submit: (data: FormData | Record<string, unknown>) => Promise<T>;
176
+ }
177
+ /**
178
+ * Creates a managed action for handling POST/PUT/DELETE-style mutations.
179
+ * Provides reactive loading, error, and data state via signal.
180
+ * State updates are batched to avoid redundant notifications.
181
+ */
182
+ declare function createAction<T>(actionFn: ActionFn<T>): ActionResult<T>;
183
+
184
+ interface ScrollRestorationOptions {
185
+ mode?: "auto" | "manual";
186
+ }
187
+ /**
188
+ * Manages scroll position saving and restoration keyed by route/key.
189
+ * Uses a Map to store positions and window.scrollTo to restore them.
190
+ */
191
+ declare function scrollRestoration(options?: ScrollRestorationOptions): {
192
+ save: (key: string) => void;
193
+ restore: (key: string) => void;
194
+ getPosition: (key: string) => {
195
+ x: number;
196
+ y: number;
197
+ } | undefined;
198
+ dispose: () => void;
199
+ };
200
+
201
+ type MiddlewareFn = (context: {
202
+ path: string;
203
+ params: Record<string, string>;
204
+ }, next: () => void | Promise<void>) => void | Promise<void>;
205
+ /**
206
+ * Composes multiple middleware functions into a single middleware.
207
+ * Each middleware must call next() to proceed to the next one.
208
+ */
209
+ declare function composeMiddleware(...fns: MiddlewareFn[]): MiddlewareFn;
210
+ /**
211
+ * Creates a middleware chain with a builder API.
212
+ * Use `use()` to add middleware, and `run()` to execute the chain.
213
+ */
214
+ declare function createMiddlewareChain(): {
215
+ use: (fn: MiddlewareFn) => void;
216
+ run: (context: {
217
+ path: string;
218
+ params: Record<string, string>;
219
+ }) => Promise<void>;
220
+ };
221
+
222
+ interface MicroAppConfig {
223
+ /** Unique name for this micro-frontend instance */
224
+ name: string;
225
+ /** Optional host element to mount into. Defaults to a new div. */
226
+ container?: HTMLElement;
227
+ /** If true, use Shadow DOM for style isolation */
228
+ shadow?: boolean;
229
+ }
230
+ interface MicroApp {
231
+ /** Mount a component into this micro-app container */
232
+ mount(component: () => HTMLElement): void;
233
+ /** Unmount the currently rendered component and clean up */
234
+ unmount(): void;
235
+ /** The outer host element */
236
+ element: HTMLElement;
237
+ }
238
+ interface SharedScope<T extends Record<string, unknown>> {
239
+ /** Get the current value for a key */
240
+ get<K extends keyof T>(key: K): T[K];
241
+ /** Set a value for a key, notifying all subscribers */
242
+ set<K extends keyof T>(key: K, value: T[K]): void;
243
+ /** Subscribe to changes on a specific key. Returns an unsubscribe function. */
244
+ subscribe<K extends keyof T>(key: K, callback: (value: T[K]) => void): () => void;
245
+ }
246
+ /**
247
+ * Creates an isolated micro-frontend container.
248
+ *
249
+ * Each micro-app gets its own DOM boundary. When `shadow: true` is set the
250
+ * component renders inside a Shadow DOM root so its styles are fully isolated
251
+ * from the host page.
252
+ *
253
+ * @example
254
+ * ```ts
255
+ * const app = createMicroApp({ name: "widget", shadow: true });
256
+ * document.body.appendChild(app.element);
257
+ *
258
+ * app.mount(() => div({ nodes: "Hello from micro-app!" }));
259
+ *
260
+ * // Later, tear it down:
261
+ * app.unmount();
262
+ * ```
263
+ */
264
+ declare function createMicroApp(config: MicroAppConfig): MicroApp;
265
+ /**
266
+ * Dynamically load a remote ES module by URL.
267
+ *
268
+ * Modules are cached by URL so repeated calls with the same URL return the
269
+ * same promise without issuing another network request.
270
+ *
271
+ * @example
272
+ * ```ts
273
+ * const charts = await loadRemoteModule("https://cdn.example.com/charts.js");
274
+ * const el = charts.BarChart({ data: [1, 2, 3] });
275
+ * ```
276
+ */
277
+ declare function loadRemoteModule(url: string): Promise<unknown>;
278
+ type Component = () => HTMLElement;
279
+ type RemoteLoader = () => Promise<{
280
+ default: Component;
281
+ }>;
282
+ /**
283
+ * Register a remote component that loads on demand.
284
+ *
285
+ * Returns a component factory function. On first call it shows a loading
286
+ * placeholder, fetches the remote module, then swaps in the real component.
287
+ * Subsequent calls render instantly from the cached module.
288
+ *
289
+ * @example
290
+ * ```ts
291
+ * const RemoteHeader = defineRemoteComponent(
292
+ * "remote-header",
293
+ * () => loadRemoteModule("https://cdn.example.com/header.js")
294
+ * );
295
+ *
296
+ * // Use it like any local component
297
+ * document.body.appendChild(RemoteHeader());
298
+ * ```
299
+ */
300
+ declare function defineRemoteComponent(name: string, loader: RemoteLoader): Component;
301
+ /**
302
+ * Create a shared state scope that enables communication between independent
303
+ * micro-frontend instances.
304
+ *
305
+ * Each key in the scope can be read, written, and subscribed to independently.
306
+ * This is intentionally kept simpler than a full global store so micro-apps
307
+ * can share data with minimal coupling.
308
+ *
309
+ * @example
310
+ * ```ts
311
+ * const shared = createSharedScope({ user: null, theme: "light" });
312
+ *
313
+ * // Micro-app A sets a value
314
+ * shared.set("user", { name: "Alice" });
315
+ *
316
+ * // Micro-app B subscribes to changes
317
+ * const unsub = shared.subscribe("user", (user) => {
318
+ * console.log("User changed:", user);
319
+ * });
320
+ *
321
+ * // Later
322
+ * unsub();
323
+ * ```
324
+ */
325
+ declare function createSharedScope<T extends Record<string, unknown>>(initialState: T): SharedScope<T>;
326
+
327
+ interface ServiceWorkerState {
328
+ registration: () => ServiceWorkerRegistration | null;
329
+ isReady: () => boolean;
330
+ isUpdateAvailable: () => boolean;
331
+ error: () => Error | null;
332
+ update: () => Promise<void>;
333
+ unregister: () => Promise<boolean>;
334
+ }
335
+ /**
336
+ * serviceWorker registers and manages a service worker.
337
+ */
338
+ declare function serviceWorker(scriptUrl: string, options?: RegistrationOptions): ServiceWorkerState;
339
+
340
+ interface UseWorkerReturn<TInput, TOutput> {
341
+ post(data: TInput): void;
342
+ result: () => TOutput | null;
343
+ error: () => Error | null;
344
+ loading: () => boolean;
345
+ terminate(): void;
346
+ }
347
+ /**
348
+ * worker creates a Web Worker from an inline function and provides
349
+ * reactive state for its result, error, and loading status.
350
+ *
351
+ * The workerFn receives messages via the standard `onmessage` handler
352
+ * and should call `postMessage` to send results back. It is serialized
353
+ * into a Blob URL, so it must be self-contained (no closures).
354
+ *
355
+ * @param workerFn The function body to run inside the worker.
356
+ * It receives `self` as the worker global scope.
357
+ * @returns An object with post, result, error, loading, and terminate.
358
+ */
359
+ declare function worker<TInput = unknown, TOutput = unknown>(workerFn: (e: MessageEvent<TInput>) => void): UseWorkerReturn<TInput, TOutput>;
360
+ interface UseWorkerFnReturn<TArgs extends unknown[], TResult> {
361
+ run(...args: TArgs): Promise<TResult>;
362
+ loading: () => boolean;
363
+ terminate(): void;
364
+ }
365
+ /**
366
+ * workerFn wraps a pure function so it runs inside a Web Worker.
367
+ *
368
+ * The function must be self-contained -- it cannot reference variables
369
+ * from the outer scope. Arguments are serialized via postMessage.
370
+ *
371
+ * @param fn A pure function to execute in a worker thread.
372
+ * @returns An object with run, loading, and terminate.
373
+ */
374
+ declare function workerFn<TArgs extends unknown[], TResult>(fn: (...args: TArgs) => TResult): UseWorkerFnReturn<TArgs, TResult>;
375
+ interface WorkerPool<TInput, TOutput> {
376
+ execute(data: TInput): Promise<TOutput>;
377
+ terminate(): void;
378
+ }
379
+ /**
380
+ * createWorkerPool creates a pool of workers for parallel task execution.
381
+ *
382
+ * Tasks are distributed across workers using round-robin scheduling.
383
+ * Each worker is created from the same inline function.
384
+ *
385
+ * @param workerFn The function body to run inside each worker.
386
+ * @param poolSize Number of workers in the pool (defaults to navigator.hardwareConcurrency or 4).
387
+ * @returns An object with execute and terminate.
388
+ */
389
+ declare function createWorkerPool<TInput = unknown, TOutput = unknown>(workerFn: (e: MessageEvent<TInput>) => void, poolSize?: number): WorkerPool<TInput, TOutput>;
390
+
391
+ /**
392
+ * WebAssembly integration for SibuJS.
393
+ * Provides hooks and utilities to load, cache, and use WASM modules
394
+ * for performance-critical operations.
395
+ */
396
+ interface WasmModuleState<T extends Record<string, unknown> = Record<string, unknown>> {
397
+ /** The instantiated WASM module exports, null until loaded */
398
+ instance: T | null;
399
+ /** Loading state */
400
+ loading: boolean;
401
+ /** Error if loading failed */
402
+ error: Error | null;
403
+ /** Whether the module has been loaded successfully */
404
+ ready: boolean;
405
+ }
406
+ interface WasmConfig {
407
+ /** Import object passed to WebAssembly.instantiate */
408
+ imports?: WebAssembly.Imports;
409
+ /** Cache key for module caching (defaults to URL) */
410
+ cacheKey?: string;
411
+ }
412
+ /**
413
+ * Hook to load and use a WebAssembly module reactively.
414
+ * Returns reactive state that updates when the module loads.
415
+ *
416
+ * @example
417
+ * ```ts
418
+ * const wasm = wasm<{ add: (a: number, b: number) => number }>('/math.wasm');
419
+ * // In reactive context:
420
+ * if (wasm.ready()) {
421
+ * const result = wasm.instance()!.add(1, 2);
422
+ * }
423
+ * ```
424
+ */
425
+ declare function wasm<T extends Record<string, unknown> = Record<string, unknown>>(source: string | ArrayBuffer | Uint8Array, config?: WasmConfig): {
426
+ instance: () => T | null;
427
+ loading: () => boolean;
428
+ error: () => Error | null;
429
+ ready: () => boolean;
430
+ reload: () => Promise<void>;
431
+ };
432
+ /**
433
+ * Load and instantiate a WebAssembly module.
434
+ * Supports loading from URL, ArrayBuffer, or Uint8Array.
435
+ * Caches compiled modules for reuse.
436
+ */
437
+ declare function loadWasmModule(source: string | ArrayBuffer | Uint8Array, imports?: WebAssembly.Imports, cacheKey?: string): Promise<WebAssembly.Instance>;
438
+ /**
439
+ * Preload and compile a WASM module without instantiating it.
440
+ * The compiled module is cached for instant instantiation later.
441
+ */
442
+ declare function preloadWasm(url: string): Promise<void>;
443
+ /**
444
+ * Create a type-safe bridge to a WASM module with automatic memory management.
445
+ * Provides helpers for passing strings and arrays between JS and WASM.
446
+ */
447
+ declare function createWasmBridge<T extends Record<string, unknown>>(instance: WebAssembly.Instance): {
448
+ exports: T;
449
+ memory: WebAssembly.Memory;
450
+ /** Allocate bytes in WASM memory (requires WASM to export malloc) */
451
+ alloc: (size: number) => number;
452
+ /** Free allocated memory (requires WASM to export free) */
453
+ free: (ptr: number) => void;
454
+ /** Write a string to WASM memory, returns pointer */
455
+ writeString: (str: string) => {
456
+ ptr: number;
457
+ len: number;
458
+ };
459
+ /** Read a string from WASM memory */
460
+ readString: (ptr: number, len: number) => string;
461
+ /** Write a typed array to WASM memory, returns pointer */
462
+ writeArray: (arr: ArrayLike<number>) => {
463
+ ptr: number;
464
+ len: number;
465
+ };
466
+ /** Read a Float64Array from WASM memory */
467
+ readF64Array: (ptr: number, len: number) => Float64Array;
468
+ };
469
+ /**
470
+ * Clear all cached WASM modules and instances.
471
+ */
472
+ declare function clearWasmCache(): void;
473
+ /**
474
+ * Check if a WASM module is cached.
475
+ */
476
+ declare function isWasmCached(key: string): boolean;
477
+
478
+ export { type ActionFn, type ActionResult, Head, type ISROptions, type MicroApp, type MicroAppConfig, type MiddlewareFn, type SSGOptions, type SSGResult, type ScrollRestorationOptions, type ServiceWorkerState, type SharedScope, type UseWorkerFnReturn, type UseWorkerReturn, type WasmConfig, type WasmModuleState, type WorkerPool, clearWasmCache, collectStream, composeMiddleware, createAction, createISR, createMicroApp, createMiddlewareChain, createSharedScope, createWasmBridge, createWorkerPool, defineRemoteComponent, deserializeState, generateStaticSite, hydrate, hydrateIslands, hydrateProgressively, isWasmCached, island, loadRemoteModule, loadWasmModule, preloadWasm, renderToDocument, renderToReadableStream, renderToStream, renderToString, renderToSuspenseStream, resetSSRState, scrollRestoration, serializeState, serviceWorker, setCanonical, setStructuredData, ssrSuspense, suspenseSwapScript, wasm, worker, workerFn };