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
@@ -0,0 +1,869 @@
1
+ import { T as TagProps, N as NodeChildren, a as NodeChild } from './tagFactory-DeAXq9ef.js';
2
+ export { S as SVG_NS, t as tagFactory } from './tagFactory-DeAXq9ef.js';
3
+ import { R as ReactiveSignal } from './signal-BnWpq6WB.js';
4
+
5
+ declare const head: (first?: TagProps | NodeChildren, second?: NodeChildren) => Element;
6
+ declare const body: (first?: TagProps | NodeChildren, second?: NodeChildren) => Element;
7
+ declare const title: (first?: TagProps | NodeChildren, second?: NodeChildren) => Element;
8
+ declare const div: (first?: TagProps | NodeChildren, second?: NodeChildren) => Element;
9
+ declare const span: (first?: TagProps | NodeChildren, second?: NodeChildren) => Element;
10
+ declare const section: (first?: TagProps | NodeChildren, second?: NodeChildren) => Element;
11
+ declare const article: (first?: TagProps | NodeChildren, second?: NodeChildren) => Element;
12
+ declare const header: (first?: TagProps | NodeChildren, second?: NodeChildren) => Element;
13
+ declare const footer: (first?: TagProps | NodeChildren, second?: NodeChildren) => Element;
14
+ declare const nav: (first?: TagProps | NodeChildren, second?: NodeChildren) => Element;
15
+ declare const main: (first?: TagProps | NodeChildren, second?: NodeChildren) => Element;
16
+ declare const aside: (first?: TagProps | NodeChildren, second?: NodeChildren) => Element;
17
+ declare const address: (first?: TagProps | NodeChildren, second?: NodeChildren) => Element;
18
+ declare const p: (first?: TagProps | NodeChildren, second?: NodeChildren) => Element;
19
+ declare const h1: (first?: TagProps | NodeChildren, second?: NodeChildren) => Element;
20
+ declare const h2: (first?: TagProps | NodeChildren, second?: NodeChildren) => Element;
21
+ declare const h3: (first?: TagProps | NodeChildren, second?: NodeChildren) => Element;
22
+ declare const h4: (first?: TagProps | NodeChildren, second?: NodeChildren) => Element;
23
+ declare const h5: (first?: TagProps | NodeChildren, second?: NodeChildren) => Element;
24
+ declare const h6: (first?: TagProps | NodeChildren, second?: NodeChildren) => Element;
25
+ declare const blockquote: (first?: TagProps | NodeChildren, second?: NodeChildren) => Element;
26
+ declare const dd: (first?: TagProps | NodeChildren, second?: NodeChildren) => Element;
27
+ declare const dl: (first?: TagProps | NodeChildren, second?: NodeChildren) => Element;
28
+ declare const dt: (first?: TagProps | NodeChildren, second?: NodeChildren) => Element;
29
+ declare const figcaption: (first?: TagProps | NodeChildren, second?: NodeChildren) => Element;
30
+ declare const figure: (first?: TagProps | NodeChildren, second?: NodeChildren) => Element;
31
+ declare const hr: (first?: TagProps | NodeChildren, second?: NodeChildren) => Element;
32
+ declare const li: (first?: TagProps | NodeChildren, second?: NodeChildren) => Element;
33
+ declare const ol: (first?: TagProps | NodeChildren, second?: NodeChildren) => Element;
34
+ declare const ul: (first?: TagProps | NodeChildren, second?: NodeChildren) => Element;
35
+ declare const pre: (first?: TagProps | NodeChildren, second?: NodeChildren) => Element;
36
+ declare const a: (first?: TagProps | NodeChildren, second?: NodeChildren) => Element;
37
+ declare const abbr: (first?: TagProps | NodeChildren, second?: NodeChildren) => Element;
38
+ declare const b: (first?: TagProps | NodeChildren, second?: NodeChildren) => Element;
39
+ declare const bdi: (first?: TagProps | NodeChildren, second?: NodeChildren) => Element;
40
+ declare const bdo: (first?: TagProps | NodeChildren, second?: NodeChildren) => Element;
41
+ declare const br: (first?: TagProps | NodeChildren, second?: NodeChildren) => Element;
42
+ declare const cite: (first?: TagProps | NodeChildren, second?: NodeChildren) => Element;
43
+ declare const code: (first?: TagProps | NodeChildren, second?: NodeChildren) => Element;
44
+ declare const data: (first?: TagProps | NodeChildren, second?: NodeChildren) => Element;
45
+ declare const dfn: (first?: TagProps | NodeChildren, second?: NodeChildren) => Element;
46
+ declare const em: (first?: TagProps | NodeChildren, second?: NodeChildren) => Element;
47
+ declare const i: (first?: TagProps | NodeChildren, second?: NodeChildren) => Element;
48
+ declare const kbd: (first?: TagProps | NodeChildren, second?: NodeChildren) => Element;
49
+ declare const mark: (first?: TagProps | NodeChildren, second?: NodeChildren) => Element;
50
+ declare const q: (first?: TagProps | NodeChildren, second?: NodeChildren) => Element;
51
+ declare const rp: (first?: TagProps | NodeChildren, second?: NodeChildren) => Element;
52
+ declare const rt: (first?: TagProps | NodeChildren, second?: NodeChildren) => Element;
53
+ declare const ruby: (first?: TagProps | NodeChildren, second?: NodeChildren) => Element;
54
+ declare const s: (first?: TagProps | NodeChildren, second?: NodeChildren) => Element;
55
+ declare const samp: (first?: TagProps | NodeChildren, second?: NodeChildren) => Element;
56
+ declare const small: (first?: TagProps | NodeChildren, second?: NodeChildren) => Element;
57
+ declare const strong: (first?: TagProps | NodeChildren, second?: NodeChildren) => Element;
58
+ declare const sub: (first?: TagProps | NodeChildren, second?: NodeChildren) => Element;
59
+ declare const sup: (first?: TagProps | NodeChildren, second?: NodeChildren) => Element;
60
+ declare const time: (first?: TagProps | NodeChildren, second?: NodeChildren) => Element;
61
+ declare const u: (first?: TagProps | NodeChildren, second?: NodeChildren) => Element;
62
+ declare const var_: (first?: TagProps | NodeChildren, second?: NodeChildren) => Element;
63
+ declare const area: (first?: TagProps | NodeChildren, second?: NodeChildren) => Element;
64
+ declare const audio: (first?: TagProps | NodeChildren, second?: NodeChildren) => Element;
65
+ declare const img: (first?: TagProps | NodeChildren, second?: NodeChildren) => Element;
66
+ declare const map: (first?: TagProps | NodeChildren, second?: NodeChildren) => Element;
67
+ declare const track: (first?: TagProps | NodeChildren, second?: NodeChildren) => Element;
68
+ declare const video: (first?: TagProps | NodeChildren, second?: NodeChildren) => Element;
69
+ declare const embed: (first?: TagProps | NodeChildren, second?: NodeChildren) => Element;
70
+ declare const iframe: (first?: TagProps | NodeChildren, second?: NodeChildren) => Element;
71
+ declare const object: (first?: TagProps | NodeChildren, second?: NodeChildren) => Element;
72
+ declare const param: (first?: TagProps | NodeChildren, second?: NodeChildren) => Element;
73
+ declare const picture: (first?: TagProps | NodeChildren, second?: NodeChildren) => Element;
74
+ declare const portal: (first?: TagProps | NodeChildren, second?: NodeChildren) => Element;
75
+ declare const source: (first?: TagProps | NodeChildren, second?: NodeChildren) => Element;
76
+ declare const svg: (first?: TagProps | NodeChildren, second?: NodeChildren) => Element;
77
+ declare const math: (first?: TagProps | NodeChildren, second?: NodeChildren) => Element;
78
+ declare const canvas: (first?: TagProps | NodeChildren, second?: NodeChildren) => Element;
79
+ declare const noscript: (first?: TagProps | NodeChildren, second?: NodeChildren) => Element;
80
+ declare const script: (first?: TagProps | NodeChildren, second?: NodeChildren) => Element;
81
+ declare const del: (first?: TagProps | NodeChildren, second?: NodeChildren) => Element;
82
+ declare const ins: (first?: TagProps | NodeChildren, second?: NodeChildren) => Element;
83
+ declare const caption: (first?: TagProps | NodeChildren, second?: NodeChildren) => Element;
84
+ declare const col: (first?: TagProps | NodeChildren, second?: NodeChildren) => Element;
85
+ declare const colgroup: (first?: TagProps | NodeChildren, second?: NodeChildren) => Element;
86
+ declare const table: (first?: TagProps | NodeChildren, second?: NodeChildren) => Element;
87
+ declare const tbody: (first?: TagProps | NodeChildren, second?: NodeChildren) => Element;
88
+ declare const td: (first?: TagProps | NodeChildren, second?: NodeChildren) => Element;
89
+ declare const tfoot: (first?: TagProps | NodeChildren, second?: NodeChildren) => Element;
90
+ declare const th: (first?: TagProps | NodeChildren, second?: NodeChildren) => Element;
91
+ declare const thead: (first?: TagProps | NodeChildren, second?: NodeChildren) => Element;
92
+ declare const tr: (first?: TagProps | NodeChildren, second?: NodeChildren) => Element;
93
+ declare const button: (first?: TagProps | NodeChildren, second?: NodeChildren) => Element;
94
+ declare const datalist: (first?: TagProps | NodeChildren, second?: NodeChildren) => Element;
95
+ declare const fieldset: (first?: TagProps | NodeChildren, second?: NodeChildren) => Element;
96
+ declare const form: (first?: TagProps | NodeChildren, second?: NodeChildren) => Element;
97
+ declare const input: (first?: TagProps | NodeChildren, second?: NodeChildren) => Element;
98
+ declare const label: (first?: TagProps | NodeChildren, second?: NodeChildren) => Element;
99
+ declare const legend: (first?: TagProps | NodeChildren, second?: NodeChildren) => Element;
100
+ declare const meter: (first?: TagProps | NodeChildren, second?: NodeChildren) => Element;
101
+ declare const optgroup: (first?: TagProps | NodeChildren, second?: NodeChildren) => Element;
102
+ declare const option: (first?: TagProps | NodeChildren, second?: NodeChildren) => Element;
103
+ declare const output: (first?: TagProps | NodeChildren, second?: NodeChildren) => Element;
104
+ declare const progress: (first?: TagProps | NodeChildren, second?: NodeChildren) => Element;
105
+ declare const select: (first?: TagProps | NodeChildren, second?: NodeChildren) => Element;
106
+ declare const textarea: (first?: TagProps | NodeChildren, second?: NodeChildren) => Element;
107
+ declare const details: (first?: TagProps | NodeChildren, second?: NodeChildren) => Element;
108
+ declare const dialog: (first?: TagProps | NodeChildren, second?: NodeChildren) => Element;
109
+ declare const menu: (first?: TagProps | NodeChildren, second?: NodeChildren) => Element;
110
+ declare const summary: (first?: TagProps | NodeChildren, second?: NodeChildren) => Element;
111
+ declare const slot: (first?: TagProps | NodeChildren, second?: NodeChildren) => Element;
112
+ declare const template: (first?: TagProps | NodeChildren, second?: NodeChildren) => Element;
113
+ declare const base: (first?: TagProps | NodeChildren, second?: NodeChildren) => Element;
114
+ declare const link: (first?: TagProps | NodeChildren, second?: NodeChildren) => Element;
115
+ declare const meta: (first?: TagProps | NodeChildren, second?: NodeChildren) => Element;
116
+ declare const style: (first?: TagProps | NodeChildren, second?: NodeChildren) => Element;
117
+ declare const circle: (first?: TagProps | NodeChildren, second?: NodeChildren) => Element;
118
+ declare const ellipse: (first?: TagProps | NodeChildren, second?: NodeChildren) => Element;
119
+ declare const g: (first?: TagProps | NodeChildren, second?: NodeChildren) => Element;
120
+ declare const line: (first?: TagProps | NodeChildren, second?: NodeChildren) => Element;
121
+ declare const path: (first?: TagProps | NodeChildren, second?: NodeChildren) => Element;
122
+ declare const polygon: (first?: TagProps | NodeChildren, second?: NodeChildren) => Element;
123
+ declare const polyline: (first?: TagProps | NodeChildren, second?: NodeChildren) => Element;
124
+ declare const rect: (first?: TagProps | NodeChildren, second?: NodeChildren) => Element;
125
+ declare const text: (first?: TagProps | NodeChildren, second?: NodeChildren) => Element;
126
+ declare const tspan: (first?: TagProps | NodeChildren, second?: NodeChildren) => Element;
127
+ declare const defs: (first?: TagProps | NodeChildren, second?: NodeChildren) => Element;
128
+ declare const clipPath: (first?: TagProps | NodeChildren, second?: NodeChildren) => Element;
129
+ declare const mask: (first?: TagProps | NodeChildren, second?: NodeChildren) => Element;
130
+ declare const pattern: (first?: TagProps | NodeChildren, second?: NodeChildren) => Element;
131
+ declare const linearGradient: (first?: TagProps | NodeChildren, second?: NodeChildren) => Element;
132
+ declare const radialGradient: (first?: TagProps | NodeChildren, second?: NodeChildren) => Element;
133
+ declare const stop: (first?: TagProps | NodeChildren, second?: NodeChildren) => Element;
134
+ declare const use: (first?: TagProps | NodeChildren, second?: NodeChildren) => Element;
135
+ declare const symbol: (first?: TagProps | NodeChildren, second?: NodeChildren) => Element;
136
+ declare const marker: (first?: TagProps | NodeChildren, second?: NodeChildren) => Element;
137
+ declare const center: (first?: TagProps | NodeChildren, second?: NodeChildren) => Element;
138
+ declare const font: (first?: TagProps | NodeChildren, second?: NodeChildren) => Element;
139
+ declare const marquee: (first?: TagProps | NodeChildren, second?: NodeChildren) => Element;
140
+ declare const customElement: (tagName: string) => (first?: TagProps | NodeChildren, second?: NodeChildren) => Element;
141
+
142
+ /**
143
+ * Tagged template literal for building Sibu elements with HTML-like syntax.
144
+ * Runtime-only — no compiler or build step required.
145
+ *
146
+ * Templates are parsed once per call site and cached. Subsequent calls at the
147
+ * same source location skip parsing entirely and only replay the cached
148
+ * structure with fresh expression values.
149
+ *
150
+ * Usage:
151
+ * html`<div class="container">
152
+ * <h1>${() => title()}</h1>
153
+ * <button on:click=${handler}>Click me</button>
154
+ * ${each(() => items(), item => html`<li>${item.name}</li>`)}
155
+ * </div>`
156
+ *
157
+ * Supports:
158
+ * - All HTML/SVG tags → Sibu elements via tagFactory
159
+ * - Static attributes: class="foo"
160
+ * - Dynamic attributes: class=${() => "active"}, id=${myId}
161
+ * - Event handlers: on:click=${handler}
162
+ * - Reactive children: ${() => count()}
163
+ * - Sibu directives as children: ${each(...)}, ${when(...)}
164
+ * - Self-closing tags: <br />, <img src="..." />
165
+ * - Void elements: <br>, <input type="text">
166
+ */
167
+ declare function html(strings: TemplateStringsArray, ...values: unknown[]): Element;
168
+
169
+ /**
170
+ * Mounts a root component into a DOM element.
171
+ * Supports both function components and pre-created HTMLElements.
172
+ */
173
+ declare function mount(component: (() => Element) | Element | Node, container: Element | null): {
174
+ node: Node;
175
+ unmount: () => void;
176
+ };
177
+
178
+ /**
179
+ * Renders a list of nodes efficiently with key-based diffing and
180
+ * LIS-based move minimization.
181
+ *
182
+ * The reconciliation algorithm works as follows:
183
+ * 1. Build or reuse nodes by key (create new, keep existing).
184
+ * 2. Remove nodes whose keys no longer exist.
185
+ * 3. For nodes that existed in both old and new lists, compute their
186
+ * old indices and find the Longest Increasing Subsequence (LIS).
187
+ * Nodes in the LIS are already in the correct relative order and
188
+ * do NOT need to be moved. Only nodes outside the LIS are moved.
189
+ * 4. Walk the new key list in reverse and insert/position each node,
190
+ * skipping DOM operations for nodes that are part of the LIS.
191
+ *
192
+ * @param getArray A reactive getter returning an array.
193
+ * @param render A function that returns a NodeChild for each item.
194
+ * @param options A key function for unique identity of items.
195
+ * @returns A Comment node serving as the anchor for the list.
196
+ */
197
+ declare function each<T>(getArray: () => T[], render: (item: T, index: number) => NodeChild, options: {
198
+ key: (item: T) => string | number;
199
+ }): Comment;
200
+
201
+ /**
202
+ * Fragment groups multiple nodes without adding a wrapper DOM element.
203
+ * Returns a DocumentFragment that can be appended to any parent.
204
+ *
205
+ * @example
206
+ * ```ts
207
+ * div({
208
+ * nodes: [
209
+ * Fragment([
210
+ * p({ nodes: "First" }),
211
+ * p({ nodes: "Second" }),
212
+ * ])
213
+ * ]
214
+ * });
215
+ * ```
216
+ *
217
+ * @param nodes Array of child nodes to include in the fragment
218
+ * @returns A DocumentFragment containing all nodes
219
+ */
220
+ declare function Fragment(nodes: NodeChildren[]): DocumentFragment;
221
+
222
+ /**
223
+ * Portal renders nodes into a DOM node outside the parent component hierarchy.
224
+ * Useful for modals, tooltips, dropdowns, and overlays.
225
+ *
226
+ * @param nodes Function that returns the content to render
227
+ * @param target Target DOM element (defaults to document.body)
228
+ * @returns A Comment anchor node in the original position
229
+ *
230
+ * @example
231
+ * ```ts
232
+ * // Render modal at document.body
233
+ * Portal(() => div({ class: "modal", nodes: "Modal content" }));
234
+ *
235
+ * // Render into specific container
236
+ * const overlay = document.getElementById("overlay-root")!;
237
+ * Portal(() => div({ nodes: "Tooltip" }), overlay);
238
+ * ```
239
+ */
240
+ declare function Portal(nodes: () => HTMLElement, target?: HTMLElement): Comment;
241
+
242
+ type Component$1 = () => HTMLElement;
243
+ /**
244
+ * Register a component by name for dynamic resolution.
245
+ *
246
+ * @param name Unique component identifier
247
+ * @param component The component function
248
+ *
249
+ * @example
250
+ * ```ts
251
+ * registerComponent("UserCard", UserCard);
252
+ * registerComponent("AdminPanel", AdminPanel);
253
+ * ```
254
+ */
255
+ declare function registerComponent(name: string, component: Component$1): void;
256
+ /**
257
+ * Unregister a previously registered component.
258
+ */
259
+ declare function unregisterComponent(name: string): void;
260
+ /**
261
+ * Resolve and render a dynamically registered component by name.
262
+ * Returns a placeholder if the component is not found.
263
+ *
264
+ * @param name Component name to resolve
265
+ * @returns The rendered HTMLElement or a fallback
266
+ *
267
+ * @example
268
+ * ```ts
269
+ * registerComponent("Widget", MyWidget);
270
+ * div({ nodes: [resolveComponent("Widget")] });
271
+ * ```
272
+ */
273
+ declare function resolveComponent(name: string): HTMLElement;
274
+ /**
275
+ * Dynamic component that reactively switches between components
276
+ * based on a reactive getter returning a component name or function.
277
+ *
278
+ * @param is Reactive getter returning component name (string) or component function
279
+ * @param props Optional props to pass
280
+ * @returns Container element that swaps content reactively
281
+ *
282
+ * @example
283
+ * ```ts
284
+ * const [view, setView] = signal("list");
285
+ * DynamicComponent(() => view()); // Renders registered "list" component
286
+ * setView("grid"); // Swaps to registered "grid" component
287
+ * ```
288
+ */
289
+ declare function DynamicComponent(is: () => string | Component$1): HTMLElement;
290
+
291
+ type SlotFn = () => Element | string | number | null | undefined;
292
+ type Slots = Record<string, SlotFn>;
293
+ declare function getSlot(slots: Slots | undefined, name?: string): SlotFn | undefined;
294
+
295
+ /**
296
+ * Conditional rendering directive. Shows or hides an element reactively.
297
+ * Unlike `when()`, the element is always created — it just toggles display.
298
+ *
299
+ * @param condition Reactive getter returning boolean
300
+ * @param element The element to show/hide
301
+ * @returns The element with reactive display binding
302
+ *
303
+ * @example
304
+ * ```ts
305
+ * const [visible, setVisible] = signal(true);
306
+ * div({ nodes: [show(() => visible(), span({ nodes: "I toggle!" }))] });
307
+ * ```
308
+ */
309
+ declare function show(condition: () => boolean, element: HTMLElement): HTMLElement;
310
+ /**
311
+ * Conditional rendering directive. Renders content only when condition is true.
312
+ * When false, renders nothing (comment placeholder). Re-evaluates reactively.
313
+ *
314
+ * @param condition Reactive getter returning boolean
315
+ * @param thenBranch Function returning element when true
316
+ * @param elseBranch Optional function returning element when false
317
+ * @returns A Comment anchor that manages the conditional content
318
+ *
319
+ * @example
320
+ * ```ts
321
+ * when(
322
+ * () => isLoggedIn(),
323
+ * () => div({ nodes: "Welcome!" }),
324
+ * () => div({ nodes: "Please log in" })
325
+ * );
326
+ * ```
327
+ */
328
+ declare function when(condition: () => boolean, thenBranch: () => NodeChild, elseBranch?: () => NodeChild): Comment;
329
+ /**
330
+ * Pattern matching directive. Renders content based on matching a reactive value
331
+ * against multiple cases. Similar to a switch statement.
332
+ *
333
+ * @param value Reactive getter returning the value to match
334
+ * @param cases Object mapping values to render functions
335
+ * @param fallback Optional default case if no match found
336
+ * @returns A Comment anchor that manages the matched content
337
+ *
338
+ * @example
339
+ * ```ts
340
+ * match(
341
+ * () => status(),
342
+ * {
343
+ * loading: () => Spinner(),
344
+ * error: () => ErrorMessage(),
345
+ * success: () => Content(),
346
+ * },
347
+ * () => div({ nodes: "Unknown status" })
348
+ * );
349
+ * ```
350
+ */
351
+ declare function match<T extends string | number>(value: () => T, cases: Record<string, () => NodeChild>, fallback?: () => NodeChild): Comment;
352
+
353
+ type ErrorHandler = (error: unknown, context?: string) => void;
354
+ /**
355
+ * Wraps a function in a try/catch block with typed error handling.
356
+ * Supports both sync and async functions (catches Promise rejections).
357
+ *
358
+ * @param fn Function to execute safely
359
+ * @param onError Optional error handler (receives error and optional context)
360
+ * @returns The function's return value, or null on error
361
+ */
362
+ declare function catchError<T>(fn: () => T, onError?: ErrorHandler): T | null;
363
+ /**
364
+ * Async version of catchError for explicit async/await usage.
365
+ *
366
+ * @param fn Async function to execute safely
367
+ * @param onError Optional error handler
368
+ * @returns Promise resolving to the result or null on error
369
+ */
370
+ declare function catchErrorAsync<T>(fn: () => Promise<T>, onError?: ErrorHandler): Promise<T | null>;
371
+ /**
372
+ * Sets a global error handler used by default if no onError is provided.
373
+ */
374
+ declare function setGlobalErrorHandler(handler: ErrorHandler): void;
375
+
376
+ /**
377
+ * Register a teardown function for a DOM node.
378
+ * When dispose(node) is called, all registered teardowns run.
379
+ */
380
+ declare function registerDisposer(node: Node, teardown: () => void): void;
381
+ /**
382
+ * Run all registered teardowns for a node and its descendants,
383
+ * cleaning up reactive subscriptions to prevent memory leaks.
384
+ * Call this when removing elements from the DOM.
385
+ */
386
+ declare function dispose(node: Node): void;
387
+ /**
388
+ * Check for potential binding leaks. Returns the number of active DOM bindings.
389
+ * In dev mode, logs a warning if the count is unexpectedly high.
390
+ *
391
+ * Usage in tests or dev tools:
392
+ * const before = checkLeaks();
393
+ * // mount and unmount component
394
+ * const after = checkLeaks();
395
+ * assert(after === before); // no leaked bindings
396
+ */
397
+ declare function checkLeaks(warnThreshold?: number): number;
398
+
399
+ type SetState<T> = (next: T | ((prev: T) => T)) => void;
400
+ type StateTuple<T> = [() => T, SetState<T>];
401
+ /** Options for signal */
402
+ interface SignalOptions {
403
+ /** Debug name for devtools inspection. Only used in development. */
404
+ name?: string;
405
+ }
406
+ /**
407
+ * signal creates a reactive signal that holds a value of type T.
408
+ * Returns a tuple: [getter, setter].
409
+ *
410
+ * @param initial Initial value
411
+ * @param options Optional config: `{ name: "count" }` for devtools labeling
412
+ *
413
+ * When __SIBU_DEVTOOLS_GLOBAL_HOOK__ is present on the window,
414
+ * signals are automatically registered and state changes are emitted.
415
+ * The hook check is a single property read — zero overhead when absent.
416
+ */
417
+ declare function signal<T>(initial: T, options?: SignalOptions): StateTuple<T>;
418
+
419
+ /**
420
+ * effect runs the provided effectFn immediately and re-runs it whenever
421
+ * any reactive dependency changes.
422
+ * Returns a cleanup function to stop further executions.
423
+ *
424
+ * In SSR mode, effect is a no-op — side effects should not run on the server.
425
+ */
426
+ declare function effect(effectFn: () => void): () => void;
427
+
428
+ /**
429
+ * derived creates a derived reactive signal whose value updates when dependencies change.
430
+ *
431
+ * Uses lazy pull-based evaluation with dirty flagging:
432
+ * - When a dependency changes, the computed is marked dirty (no re-evaluation).
433
+ * - Dirtiness propagates downstream via notifySubscribers.
434
+ * - The getter only re-evaluates when actually read (pull-based).
435
+ */
436
+ declare function derived<T>(getter: () => T, options?: {
437
+ name?: string;
438
+ }): () => T;
439
+
440
+ /**
441
+ * Watches a reactive getter and calls callback with (newValue, oldValue) when it changes.
442
+ *
443
+ * In SSR mode, watch is a no-op — subscriptions should not run on the server.
444
+ *
445
+ * @param getter Function that returns the value to watch (reads reactive signals).
446
+ * @param callback Function called when the watched value changes.
447
+ * @returns Teardown function to cancel the watcher.
448
+ */
449
+ declare function watch<T>(getter: () => T, callback: (value: T, prev: T | undefined) => void): () => void;
450
+
451
+ type StoreSubscriber<T> = (state: T) => void;
452
+ interface StoreActions<T> {
453
+ /** Apply a partial patch or updater function */
454
+ setState: (patch: Partial<T> | ((state: T) => T)) => void;
455
+ /** Revert to initial state */
456
+ reset: () => void;
457
+ /** Subscribe to all state changes. Returns unsubscribe function. */
458
+ subscribe: (callback: StoreSubscriber<T>) => () => void;
459
+ /** Subscribe to changes on a specific key. Returns unsubscribe function. */
460
+ subscribeKey: <K extends keyof T>(key: K, callback: (value: T[K], prev: T[K]) => void) => () => void;
461
+ /** Get a snapshot of the current state (non-reactive) */
462
+ getSnapshot: () => T;
463
+ }
464
+ /**
465
+ * Creates a global store with reactive properties and subscription support.
466
+ *
467
+ * @param initialState Initial state object
468
+ * @returns A tuple [store, actions]
469
+ *
470
+ * @example
471
+ * ```ts
472
+ * const [store, { setState, subscribe, subscribeKey }] = store({
473
+ * count: 0,
474
+ * name: "Alice"
475
+ * });
476
+ *
477
+ * // Subscribe to all changes
478
+ * const unsub = subscribe((state) => console.log("Changed:", state));
479
+ *
480
+ * // Subscribe to specific key
481
+ * const unsub2 = subscribeKey("count", (val, prev) => {
482
+ * console.log(`count: ${prev} → ${val}`);
483
+ * });
484
+ * ```
485
+ */
486
+ declare function store<T extends object>(initialState: T): [store: {
487
+ readonly [K in keyof T]: T[K];
488
+ }, actions: StoreActions<T>];
489
+
490
+ /**
491
+ * ref creates a mutable reference object that persists across renders.
492
+ * Unlike signal, updating a ref does NOT trigger re-renders.
493
+ *
494
+ * Common uses:
495
+ * - Storing DOM element references
496
+ * - Holding mutable values without causing reactivity
497
+ * - Imperative API handles (e.g., focus, scroll)
498
+ *
499
+ * @param initial Optional initial value for the ref
500
+ * @returns An object with a mutable `current` property
501
+ */
502
+ interface Ref<T> {
503
+ current: T;
504
+ }
505
+ declare function ref<T>(initial: T): Ref<T>;
506
+ declare function ref<T = undefined>(): Ref<T | undefined>;
507
+
508
+ /**
509
+ * memo returns a memoized value that only recomputes when its
510
+ * reactive dependencies change. This is semantically identical to
511
+ * derived but named for convenience.
512
+ *
513
+ * Use this to avoid expensive computations on every render cycle.
514
+ *
515
+ * @param factory Function that computes the memoized value
516
+ * @returns Getter function that returns the memoized value
517
+ */
518
+ declare function memo<T>(factory: () => T): () => T;
519
+
520
+ /**
521
+ * memoFn returns a memoized callback function that only updates
522
+ * when its reactive dependencies change. This prevents unnecessary
523
+ * re-creations of callback functions passed to child components.
524
+ *
525
+ * @param callback The callback function to memoize
526
+ * @returns Getter that returns the current memoized callback
527
+ */
528
+ declare function memoFn<T extends (...args: any[]) => any>(callback: () => T): () => T;
529
+
530
+ /**
531
+ * Reactive array hook. Provides common array operations that
532
+ * automatically trigger reactive updates.
533
+ *
534
+ * @param initial Initial array value
535
+ * @returns Tuple [getter, actions]
536
+ *
537
+ * @example
538
+ * ```ts
539
+ * const [items, { push, remove, clear }] = array([1, 2, 3]);
540
+ * push(4); // [1, 2, 3, 4]
541
+ * remove(1); // [1, 3, 4] (removes index 1)
542
+ * clear(); // []
543
+ * ```
544
+ */
545
+ interface ArrayActions<T> {
546
+ /** Add one or more items to the end */
547
+ push(...items: T[]): void;
548
+ /** Remove and return the last item */
549
+ pop(): T | undefined;
550
+ /** Remove and return the first item */
551
+ shift(): T | undefined;
552
+ /** Add one or more items to the beginning */
553
+ unshift(...items: T[]): void;
554
+ /** Remove/replace elements at a position */
555
+ splice(start: number, deleteCount?: number, ...items: T[]): T[];
556
+ /** Remove item at index */
557
+ remove(index: number): void;
558
+ /** Remove first item matching predicate */
559
+ removeWhere(predicate: (item: T) => boolean): void;
560
+ /** Replace the entire array */
561
+ set(items: T[]): void;
562
+ /** Update item at a specific index */
563
+ update(index: number, value: T): void;
564
+ /** Update item at a specific index via updater function */
565
+ updateWhere(predicate: (item: T) => boolean, updater: (item: T) => T): void;
566
+ /** Sort the array in place */
567
+ sort(compareFn?: (a: T, b: T) => number): void;
568
+ /** Reverse the array in place */
569
+ reverse(): void;
570
+ /** Filter the array (returns new reactive array) */
571
+ filter(predicate: (item: T, index: number) => boolean): void;
572
+ /** Map and replace (transforms all items) */
573
+ map(transform: (item: T, index: number) => T): void;
574
+ /** Clear all items */
575
+ clear(): void;
576
+ }
577
+ declare function array<T>(initial?: T[]): [() => T[], ArrayActions<T>];
578
+ /**
579
+ * Optimized reactive array hook. Uses in-place mutations with a version
580
+ * counter to avoid full array copies on every operation.
581
+ *
582
+ * Internally maintains a mutable array and only creates a frozen snapshot
583
+ * when the getter is called after a mutation. Operations like push, pop,
584
+ * splice, sort, and reverse mutate in-place (O(1) or O(n) as appropriate)
585
+ * instead of copying the entire array.
586
+ *
587
+ * The public API is identical to `array`.
588
+ *
589
+ * @param initial Initial array value
590
+ * @returns Tuple [getter, actions]
591
+ *
592
+ * @example
593
+ * ```ts
594
+ * const [items, { push, remove, clear }] = reactiveArray([1, 2, 3]);
595
+ * push(4); // [1, 2, 3, 4] — mutates in-place, no copy
596
+ * remove(1); // [1, 3, 4]
597
+ * clear(); // []
598
+ * ```
599
+ */
600
+ declare function reactiveArray<T>(initial?: T[]): [() => readonly T[], ArrayActions<T>];
601
+
602
+ /**
603
+ * Like signal but uses deep equality comparison instead of Object.is.
604
+ * This prevents unnecessary re-renders when setting an object/array
605
+ * to a structurally identical value.
606
+ *
607
+ * @param initial Initial value
608
+ * @returns Tuple [getter, setter]
609
+ *
610
+ * @example
611
+ * ```ts
612
+ * const [user, setUser] = deepSignal({ name: "Alice", age: 25 });
613
+ * setUser({ name: "Alice", age: 25 }); // No notification — same structure
614
+ * setUser({ name: "Bob", age: 25 }); // Notifies — different value
615
+ * ```
616
+ */
617
+ declare function deepSignal<T>(initial: T): [() => T, (next: T | ((prev: T) => T)) => void];
618
+
619
+ /**
620
+ * Lifecycle hooks for SibuJS components.
621
+ *
622
+ * These hooks schedule callbacks to run after the component's DOM
623
+ * has been mounted or when it is removed from the document.
624
+ *
625
+ * @example
626
+ * ```ts
627
+ * function MyComponent() {
628
+ * onMount(() => {
629
+ * console.log("Component is in the DOM");
630
+ * });
631
+ *
632
+ * onUnmount(() => {
633
+ * console.log("Component was removed");
634
+ * });
635
+ *
636
+ * return div({ nodes: "Hello" });
637
+ * }
638
+ * ```
639
+ */
640
+ type CleanupFn = () => void;
641
+ /**
642
+ * Runs a callback once the component's element has been inserted into the DOM.
643
+ * Uses queueMicrotask to defer execution until after the current synchronous
644
+ * rendering pass completes.
645
+ *
646
+ * Optionally returns a cleanup function that will be called on unmount
647
+ * (if you also use onUnmount, prefer that for explicit cleanup).
648
+ *
649
+ * @param callback Function to run after mount. May return a cleanup function.
650
+ * @param element Optional element to observe; if provided, waits until it's connected.
651
+ */
652
+ declare function onMount(callback: () => undefined | CleanupFn, element?: HTMLElement): void;
653
+ /**
654
+ * Runs a callback when the given element is removed from the DOM.
655
+ * Uses MutationObserver to watch for disconnection.
656
+ *
657
+ * @param callback Function to run on unmount
658
+ * @param element The element to watch for removal
659
+ */
660
+ declare function onUnmount(callback: CleanupFn, element: HTMLElement): void;
661
+
662
+ /**
663
+ * Context API for SibuJS — provides dependency injection across
664
+ * component trees without prop drilling.
665
+ *
666
+ * Inspired by React's Context and Vue's provide/inject patterns.
667
+ *
668
+ * @example
669
+ * ```ts
670
+ * // Create a context with a default value
671
+ * const ThemeContext = context("light");
672
+ *
673
+ * // Provide a value at a parent level
674
+ * function App() {
675
+ * ThemeContext.provide("dark");
676
+ * return div({ nodes: [Child()] });
677
+ * }
678
+ *
679
+ * // Consume the value anywhere below
680
+ * function Child() {
681
+ * const theme = ThemeContext.use(); // reactive getter
682
+ * return div({ nodes: () => `Theme: ${theme()}` });
683
+ * }
684
+ * ```
685
+ */
686
+ interface Context<T> {
687
+ /** Provide a value for this context. Overrides any parent provider. */
688
+ provide(value: T): void;
689
+ /** Get a reactive getter for the current context value. */
690
+ use(): () => T;
691
+ /** Get the current value directly (non-reactive). */
692
+ get(): T;
693
+ /** Update the provided value reactively. */
694
+ set(value: T): void;
695
+ }
696
+ /**
697
+ * Creates a new context with an optional default value.
698
+ *
699
+ * @param defaultValue The fallback value when no provider is found
700
+ * @returns A Context object with provide, use, get, and set methods
701
+ */
702
+ declare function context<T>(defaultValue: T): Context<T>;
703
+
704
+ /**
705
+ * SSR context for SibuJS.
706
+ *
707
+ * During server-side rendering, side effects (effect, watch, onMount)
708
+ * should not run. This module provides a flag to enable/disable SSR mode.
709
+ *
710
+ * Usage:
711
+ * enableSSR(); // Call before rendering on the server
712
+ * renderToString(...);
713
+ * disableSSR(); // Call after rendering (cleanup)
714
+ *
715
+ * Or use the scoped helper:
716
+ * withSSR(() => renderToString(...));
717
+ */
718
+ /** Returns true when running in SSR mode. */
719
+ declare function isSSR(): boolean;
720
+ /** Enable SSR mode. Side effects (effect, watch, onMount) become no-ops. */
721
+ declare function enableSSR(): void;
722
+ /** Disable SSR mode. Side effects resume normal behavior. */
723
+ declare function disableSSR(): void;
724
+ /**
725
+ * Run a function in SSR mode. Automatically enables/disables SSR around the callback.
726
+ * Returns whatever the callback returns.
727
+ */
728
+ declare function withSSR<T>(fn: () => T): T;
729
+
730
+ /**
731
+ * Batch multiple state updates into a single notification pass.
732
+ * Subscribers are only notified once after the batch completes,
733
+ * preventing excessive re-renders during bulk updates.
734
+ *
735
+ * Can be nested — only the outermost batch triggers notifications.
736
+ *
737
+ * @param fn Function containing state updates to batch
738
+ *
739
+ * @example
740
+ * ```ts
741
+ * const [name, setName] = signal("Alice");
742
+ * const [age, setAge] = signal(25);
743
+ *
744
+ * batch(() => {
745
+ * setName("Bob");
746
+ * setAge(30);
747
+ * }); // Only one notification pass
748
+ * ```
749
+ */
750
+ declare function batch(fn: () => void): void;
751
+ /**
752
+ * Queue a signal for deferred notification during a batch.
753
+ * If not batching, returns false so the caller can notify immediately.
754
+ */
755
+ declare function enqueueBatchedSignal(signal: ReactiveSignal): boolean;
756
+ /**
757
+ * Check if we're currently inside a batch.
758
+ */
759
+ declare function isBatching(): boolean;
760
+
761
+ /**
762
+ * Bind a dynamic attribute where both name and value can change reactively.
763
+ * Useful for `:attr.name` style dynamic keys.
764
+ *
765
+ * When the attribute name changes, the old attribute is removed and the
766
+ * new one is set. Returns a teardown function that stops reactive tracking
767
+ * and removes the current attribute from the element.
768
+ */
769
+ declare function bindDynamic(el: HTMLElement, nameGetter: string | (() => string), valueGetter: string | (() => unknown)): () => void;
770
+
771
+ type Component = () => HTMLElement;
772
+ type LazyImport = () => Promise<{
773
+ default: Component;
774
+ }>;
775
+ /**
776
+ * lazy() enables code-splitting by deferring the import of a component
777
+ * until it is first rendered. Returns a wrapper component that shows a
778
+ * loading state while the import resolves.
779
+ *
780
+ * @example
781
+ * ```ts
782
+ * const LazyDashboard = lazy(() => import("./Dashboard"));
783
+ *
784
+ * // Use inside Suspense for custom loading UI
785
+ * Suspense({
786
+ * nodes: () => LazyDashboard(),
787
+ * fallback: () => div({ nodes: "Loading dashboard..." }),
788
+ * });
789
+ *
790
+ * // Or use standalone — shows default "Loading..." text
791
+ * LazyDashboard();
792
+ * ```
793
+ *
794
+ * @param importFn Dynamic import function returning `{ default: Component }`
795
+ * @returns A component function that lazy-loads on first call
796
+ */
797
+ declare function lazy(importFn: LazyImport): Component;
798
+ /**
799
+ * Suspense provides a fallback UI while lazy or async nodes are loading.
800
+ *
801
+ * @example
802
+ * ```ts
803
+ * Suspense({
804
+ * nodes: () => LazyChart(),
805
+ * fallback: () => div({ nodes: "Loading chart..." }),
806
+ * });
807
+ * ```
808
+ *
809
+ * @param props.nodes Function that returns the async/lazy component
810
+ * @param props.fallback Function that returns the loading UI
811
+ * @returns An HTMLElement that swaps from fallback to content when ready
812
+ */
813
+ interface SuspenseProps {
814
+ nodes: () => HTMLElement;
815
+ fallback: () => HTMLElement;
816
+ }
817
+ declare function Suspense({ nodes, fallback }: SuspenseProps): HTMLElement;
818
+
819
+ interface ErrorBoundaryProps {
820
+ /**
821
+ * Function that renders child content or throws.
822
+ */
823
+ nodes: () => Element;
824
+ /**
825
+ * Fallback renderer given an Error and retry callback.
826
+ * Memoized internally — only re-created when the error changes.
827
+ */
828
+ fallback?: (error: Error, retry: () => void) => Element;
829
+ /**
830
+ * Called when an error is caught (sync or async).
831
+ */
832
+ onError?: (error: Error) => void;
833
+ }
834
+ /**
835
+ * ErrorBoundary component using SibuJS reactive pattern.
836
+ *
837
+ * Features:
838
+ * - Catches sync errors thrown by nodes
839
+ * - Catches async errors (Promise rejections) from nodes
840
+ * - Supports nested ErrorBoundaries (inner catches first, outer catches propagation)
841
+ * - Retry functionality to clear error and re-render nodes
842
+ * - Memoized fallback to avoid re-creating fallback UI on every render
843
+ * - onError callback for logging/telemetry
844
+ * - Improved CSS styling
845
+ */
846
+ declare function ErrorBoundary({ nodes, fallback, onError }: ErrorBoundaryProps): Element;
847
+
848
+ interface LoadingProps {
849
+ /** Text to show alongside the spinner */
850
+ text?: string;
851
+ /** Visual variant: "spinner" (default) or "dots" */
852
+ variant?: "spinner" | "dots";
853
+ /** Size: "sm", "md" (default), "lg" */
854
+ size?: "sm" | "md" | "lg";
855
+ }
856
+ /**
857
+ * Built-in loading indicator component.
858
+ *
859
+ * @example
860
+ * ```ts
861
+ * Loading(); // Default spinner
862
+ * Loading({ text: "Loading data..." }); // With text
863
+ * Loading({ variant: "dots" }); // Dots animation
864
+ * Loading({ size: "lg" }); // Large spinner
865
+ * ```
866
+ */
867
+ declare function Loading(props?: LoadingProps): HTMLElement;
868
+
869
+ export { type ArrayActions, type Context, DynamicComponent, ErrorBoundary, type ErrorBoundaryProps, Fragment, Loading, type LoadingProps, Portal, type Ref, type SignalOptions, type SlotFn, type Slots, type StoreActions, Suspense, type SuspenseProps, TagProps, a, abbr, address, area, array, article, aside, audio, b, base, batch, bdi, bdo, bindDynamic, blockquote, body, br, button, canvas, caption, catchError, catchErrorAsync, center, checkLeaks, circle, cite, clipPath, code, col, colgroup, context, customElement, data, datalist, dd, deepSignal, defs, del, derived, details, dfn, dialog, disableSSR, dispose, div, dl, dt, each, effect, ellipse, em, embed, enableSSR, enqueueBatchedSignal, fieldset, figcaption, figure, font, footer, form, g, getSlot, h1, h2, h3, h4, h5, h6, head, header, hr, html, i, iframe, img, input, ins, isBatching, isSSR, kbd, label, lazy, legend, li, line, linearGradient, link, main, map, mark, marker, marquee, mask, match, math, memo, memoFn, menu, meta, meter, mount, nav, noscript, object, ol, onMount, onUnmount, optgroup, option, output, p, param, path, pattern, picture, polygon, polyline, portal, pre, progress, q, radialGradient, reactiveArray, rect, ref, registerComponent, registerDisposer, resolveComponent, rp, rt, ruby, s, samp, script, section, select, setGlobalErrorHandler, show, signal, slot, small, source, span, stop, store, strong, style, sub, summary, sup, svg, symbol, table, tbody, td, template, text, textarea, tfoot, th, thead, time, title, tr, track, tspan, u, ul, unregisterComponent, use, var_, video, watch, when, withSSR };