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,163 @@
1
+ export { C as ComponentProps, P as PropDef, a as PropSchema, R as RenderProp, V as Validator, b as assertType, c as composable, d as compose, e as createGuard, f as createSlots, g as defineComponent, h as defineSlottedComponent, i as defineStrictComponent, v as validateProps, j as validators, w as withBoundary, k as withDefaults, l as withProps, m as withWrapper } from './contracts-DOrhwbke.cjs';
2
+
3
+ interface MachineConfig<S extends string, E extends string, C extends Record<string, unknown> = Record<string, unknown>> {
4
+ initial: S;
5
+ context?: C;
6
+ states: {
7
+ [K in S]: {
8
+ on?: {
9
+ [Event in E]?: {
10
+ target: S;
11
+ guard?: (context: C) => boolean;
12
+ action?: (context: C) => Partial<C>;
13
+ } | S;
14
+ };
15
+ entry?: (context: C) => void;
16
+ exit?: (context: C) => void;
17
+ };
18
+ };
19
+ }
20
+ interface MachineReturn<S extends string, E extends string, C extends Record<string, unknown>> {
21
+ state: () => S;
22
+ context: () => C;
23
+ send: (event: E) => void;
24
+ matches: (state: S) => boolean;
25
+ can: (event: E) => boolean;
26
+ }
27
+ /**
28
+ * machine creates a finite state machine with states, events, guards, and actions.
29
+ */
30
+ declare function machine<S extends string, E extends string, C extends Record<string, unknown> = Record<string, unknown>>(config: MachineConfig<S, E, C>): MachineReturn<S, E, C>;
31
+
32
+ /**
33
+ * Creates a reactive state that automatically persists to localStorage
34
+ * or sessionStorage. Restores persisted value on initialization.
35
+ *
36
+ * @param key Storage key
37
+ * @param initial Default value when no persisted value exists
38
+ * @param options Storage options
39
+ * @returns Same tuple as signal: [getter, setter]
40
+ *
41
+ * @example
42
+ * ```ts
43
+ * const [theme, setTheme] = persisted("theme", "light");
44
+ * setTheme("dark"); // Automatically saved to localStorage
45
+ * // On page reload, theme() returns "dark"
46
+ * ```
47
+ */
48
+ interface PersistOptions<T = unknown> {
49
+ /** Use sessionStorage instead of localStorage */
50
+ session?: boolean;
51
+ /** Custom serializer (defaults to JSON.stringify) */
52
+ serialize?: (value: unknown) => string;
53
+ /** Custom deserializer (defaults to JSON.parse) */
54
+ deserialize?: (raw: string) => unknown;
55
+ /** Optional type guard to validate deserialized data. Falls back to initial on failure. */
56
+ validate?: (value: unknown) => value is T;
57
+ }
58
+ declare function persisted<T>(key: string, initial: T, options?: PersistOptions<T>): [() => T, (next: T | ((prev: T) => T)) => void];
59
+
60
+ interface OptimisticAction<T> {
61
+ optimisticValue: T;
62
+ revert: T;
63
+ }
64
+ /**
65
+ * optimistic provides optimistic UI updates that can be reverted on failure.
66
+ * The value updates immediately, then reverts if the async operation fails.
67
+ */
68
+ declare function optimistic<T>(initialValue: T): [() => T, (optimisticValue: T, asyncAction: () => Promise<T>) => Promise<void>];
69
+ /**
70
+ * optimisticList provides optimistic updates for array state.
71
+ */
72
+ declare function optimisticList<T>(initialValue: T[]): {
73
+ items: () => T[];
74
+ addOptimistic: (item: T, asyncAction: () => Promise<T>) => Promise<void>;
75
+ removeOptimistic: (predicate: (item: T) => boolean, asyncAction: () => Promise<void>) => Promise<void>;
76
+ updateOptimistic: (predicate: (item: T) => boolean, update: Partial<T>, asyncAction: () => Promise<T>) => Promise<void>;
77
+ };
78
+
79
+ interface TimeTravelReturn<T> {
80
+ value: () => T;
81
+ set: (next: T | ((prev: T) => T)) => void;
82
+ undo: () => void;
83
+ redo: () => void;
84
+ canUndo: () => boolean;
85
+ canRedo: () => boolean;
86
+ history: () => T[];
87
+ index: () => number;
88
+ reset: () => void;
89
+ jumpTo: (index: number) => void;
90
+ }
91
+ /**
92
+ * timeline wraps a state value with undo/redo history.
93
+ */
94
+ declare function timeline<T>(initial: T, maxHistory?: number): TimeTravelReturn<T>;
95
+
96
+ type Middleware<S> = (state: S, action: string, payload: unknown, next: () => void) => void;
97
+ type Selector<S, R> = (state: S) => R;
98
+ interface GlobalStore<S extends Record<string, unknown>, A extends Record<string, (state: S, payload?: unknown) => Partial<S>>> {
99
+ getState: () => S;
100
+ select: <R>(selector: Selector<S, R>) => () => R;
101
+ dispatch: <K extends keyof A>(action: K, payload?: Parameters<A[K]>[1]) => void;
102
+ subscribe: (callback: (state: S) => void) => () => void;
103
+ reset: () => void;
104
+ }
105
+ /**
106
+ * globalStore creates a centralized state management store
107
+ * with actions, selectors, and middleware support.
108
+ */
109
+ declare function globalStore<S extends Record<string, unknown>, A extends Record<string, (state: S, payload?: unknown) => Partial<S>>>(config: {
110
+ state: S;
111
+ actions: A;
112
+ middleware?: Middleware<S>[];
113
+ }): GlobalStore<S, A>;
114
+
115
+ /**
116
+ * SolidJS-style reactive primitives — standalone APIs that don't require
117
+ * being inside a component. These are thin wrappers around the signal system.
118
+ */
119
+ /**
120
+ * Creates a reactive signal. Equivalent to signal but with SolidJS naming.
121
+ *
122
+ * @param value Initial value
123
+ * @returns Tuple [getter, setter]
124
+ *
125
+ * @example
126
+ * ```ts
127
+ * const [count, setCount] = createSignal(0);
128
+ * console.log(count()); // 0
129
+ * setCount(5);
130
+ * ```
131
+ */
132
+ declare function createSignal<T>(value: T): [() => T, (next: T | ((prev: T) => T)) => void];
133
+ /**
134
+ * Creates a derived/computed reactive value. Equivalent to derived.
135
+ *
136
+ * @param fn Computation function that reads other signals
137
+ * @returns Getter for the computed value
138
+ *
139
+ * @example
140
+ * ```ts
141
+ * const [count] = createSignal(5);
142
+ * const doubled = createMemo(() => count() * 2);
143
+ * console.log(doubled()); // 10
144
+ * ```
145
+ */
146
+ declare function createMemo<T>(fn: () => T): () => T;
147
+ /**
148
+ * Creates a reactive side effect. Equivalent to effect.
149
+ *
150
+ * @param fn Effect function that reads reactive signals
151
+ * @returns Cleanup/teardown function
152
+ *
153
+ * @example
154
+ * ```ts
155
+ * const [count] = createSignal(0);
156
+ * const cleanup = createEffect(() => {
157
+ * console.log("Count is:", count());
158
+ * });
159
+ * ```
160
+ */
161
+ declare function createEffect(fn: () => void): () => void;
162
+
163
+ export { type GlobalStore, type MachineConfig, type MachineReturn, type Middleware, type OptimisticAction, type PersistOptions, type Selector, type TimeTravelReturn, createEffect, createMemo, createSignal, globalStore, machine, optimistic, optimisticList, persisted, timeline };
@@ -0,0 +1,163 @@
1
+ export { C as ComponentProps, P as PropDef, a as PropSchema, R as RenderProp, V as Validator, b as assertType, c as composable, d as compose, e as createGuard, f as createSlots, g as defineComponent, h as defineSlottedComponent, i as defineStrictComponent, v as validateProps, j as validators, w as withBoundary, k as withDefaults, l as withProps, m as withWrapper } from './contracts-DOrhwbke.js';
2
+
3
+ interface MachineConfig<S extends string, E extends string, C extends Record<string, unknown> = Record<string, unknown>> {
4
+ initial: S;
5
+ context?: C;
6
+ states: {
7
+ [K in S]: {
8
+ on?: {
9
+ [Event in E]?: {
10
+ target: S;
11
+ guard?: (context: C) => boolean;
12
+ action?: (context: C) => Partial<C>;
13
+ } | S;
14
+ };
15
+ entry?: (context: C) => void;
16
+ exit?: (context: C) => void;
17
+ };
18
+ };
19
+ }
20
+ interface MachineReturn<S extends string, E extends string, C extends Record<string, unknown>> {
21
+ state: () => S;
22
+ context: () => C;
23
+ send: (event: E) => void;
24
+ matches: (state: S) => boolean;
25
+ can: (event: E) => boolean;
26
+ }
27
+ /**
28
+ * machine creates a finite state machine with states, events, guards, and actions.
29
+ */
30
+ declare function machine<S extends string, E extends string, C extends Record<string, unknown> = Record<string, unknown>>(config: MachineConfig<S, E, C>): MachineReturn<S, E, C>;
31
+
32
+ /**
33
+ * Creates a reactive state that automatically persists to localStorage
34
+ * or sessionStorage. Restores persisted value on initialization.
35
+ *
36
+ * @param key Storage key
37
+ * @param initial Default value when no persisted value exists
38
+ * @param options Storage options
39
+ * @returns Same tuple as signal: [getter, setter]
40
+ *
41
+ * @example
42
+ * ```ts
43
+ * const [theme, setTheme] = persisted("theme", "light");
44
+ * setTheme("dark"); // Automatically saved to localStorage
45
+ * // On page reload, theme() returns "dark"
46
+ * ```
47
+ */
48
+ interface PersistOptions<T = unknown> {
49
+ /** Use sessionStorage instead of localStorage */
50
+ session?: boolean;
51
+ /** Custom serializer (defaults to JSON.stringify) */
52
+ serialize?: (value: unknown) => string;
53
+ /** Custom deserializer (defaults to JSON.parse) */
54
+ deserialize?: (raw: string) => unknown;
55
+ /** Optional type guard to validate deserialized data. Falls back to initial on failure. */
56
+ validate?: (value: unknown) => value is T;
57
+ }
58
+ declare function persisted<T>(key: string, initial: T, options?: PersistOptions<T>): [() => T, (next: T | ((prev: T) => T)) => void];
59
+
60
+ interface OptimisticAction<T> {
61
+ optimisticValue: T;
62
+ revert: T;
63
+ }
64
+ /**
65
+ * optimistic provides optimistic UI updates that can be reverted on failure.
66
+ * The value updates immediately, then reverts if the async operation fails.
67
+ */
68
+ declare function optimistic<T>(initialValue: T): [() => T, (optimisticValue: T, asyncAction: () => Promise<T>) => Promise<void>];
69
+ /**
70
+ * optimisticList provides optimistic updates for array state.
71
+ */
72
+ declare function optimisticList<T>(initialValue: T[]): {
73
+ items: () => T[];
74
+ addOptimistic: (item: T, asyncAction: () => Promise<T>) => Promise<void>;
75
+ removeOptimistic: (predicate: (item: T) => boolean, asyncAction: () => Promise<void>) => Promise<void>;
76
+ updateOptimistic: (predicate: (item: T) => boolean, update: Partial<T>, asyncAction: () => Promise<T>) => Promise<void>;
77
+ };
78
+
79
+ interface TimeTravelReturn<T> {
80
+ value: () => T;
81
+ set: (next: T | ((prev: T) => T)) => void;
82
+ undo: () => void;
83
+ redo: () => void;
84
+ canUndo: () => boolean;
85
+ canRedo: () => boolean;
86
+ history: () => T[];
87
+ index: () => number;
88
+ reset: () => void;
89
+ jumpTo: (index: number) => void;
90
+ }
91
+ /**
92
+ * timeline wraps a state value with undo/redo history.
93
+ */
94
+ declare function timeline<T>(initial: T, maxHistory?: number): TimeTravelReturn<T>;
95
+
96
+ type Middleware<S> = (state: S, action: string, payload: unknown, next: () => void) => void;
97
+ type Selector<S, R> = (state: S) => R;
98
+ interface GlobalStore<S extends Record<string, unknown>, A extends Record<string, (state: S, payload?: unknown) => Partial<S>>> {
99
+ getState: () => S;
100
+ select: <R>(selector: Selector<S, R>) => () => R;
101
+ dispatch: <K extends keyof A>(action: K, payload?: Parameters<A[K]>[1]) => void;
102
+ subscribe: (callback: (state: S) => void) => () => void;
103
+ reset: () => void;
104
+ }
105
+ /**
106
+ * globalStore creates a centralized state management store
107
+ * with actions, selectors, and middleware support.
108
+ */
109
+ declare function globalStore<S extends Record<string, unknown>, A extends Record<string, (state: S, payload?: unknown) => Partial<S>>>(config: {
110
+ state: S;
111
+ actions: A;
112
+ middleware?: Middleware<S>[];
113
+ }): GlobalStore<S, A>;
114
+
115
+ /**
116
+ * SolidJS-style reactive primitives — standalone APIs that don't require
117
+ * being inside a component. These are thin wrappers around the signal system.
118
+ */
119
+ /**
120
+ * Creates a reactive signal. Equivalent to signal but with SolidJS naming.
121
+ *
122
+ * @param value Initial value
123
+ * @returns Tuple [getter, setter]
124
+ *
125
+ * @example
126
+ * ```ts
127
+ * const [count, setCount] = createSignal(0);
128
+ * console.log(count()); // 0
129
+ * setCount(5);
130
+ * ```
131
+ */
132
+ declare function createSignal<T>(value: T): [() => T, (next: T | ((prev: T) => T)) => void];
133
+ /**
134
+ * Creates a derived/computed reactive value. Equivalent to derived.
135
+ *
136
+ * @param fn Computation function that reads other signals
137
+ * @returns Getter for the computed value
138
+ *
139
+ * @example
140
+ * ```ts
141
+ * const [count] = createSignal(5);
142
+ * const doubled = createMemo(() => count() * 2);
143
+ * console.log(doubled()); // 10
144
+ * ```
145
+ */
146
+ declare function createMemo<T>(fn: () => T): () => T;
147
+ /**
148
+ * Creates a reactive side effect. Equivalent to effect.
149
+ *
150
+ * @param fn Effect function that reads reactive signals
151
+ * @returns Cleanup/teardown function
152
+ *
153
+ * @example
154
+ * ```ts
155
+ * const [count] = createSignal(0);
156
+ * const cleanup = createEffect(() => {
157
+ * console.log("Count is:", count());
158
+ * });
159
+ * ```
160
+ */
161
+ declare function createEffect(fn: () => void): () => void;
162
+
163
+ export { type GlobalStore, type MachineConfig, type MachineReturn, type Middleware, type OptimisticAction, type PersistOptions, type Selector, type TimeTravelReturn, createEffect, createMemo, createSignal, globalStore, machine, optimistic, optimisticList, persisted, timeline };
@@ -0,0 +1,296 @@
1
+ import {
2
+ RenderProp,
3
+ assertType,
4
+ composable,
5
+ compose,
6
+ createGuard,
7
+ createSlots,
8
+ defineComponent,
9
+ defineSlottedComponent,
10
+ defineStrictComponent,
11
+ validateProps,
12
+ validators,
13
+ withBoundary,
14
+ withDefaults,
15
+ withProps,
16
+ withWrapper
17
+ } from "./chunk-XYU6TZOW.js";
18
+ import {
19
+ derived
20
+ } from "./chunk-2ABBWCGC.js";
21
+ import {
22
+ effect
23
+ } from "./chunk-AX5VEQTY.js";
24
+ import "./chunk-MJNB47HB.js";
25
+ import {
26
+ signal
27
+ } from "./chunk-M5GNLDEO.js";
28
+ import "./chunk-MLKGABMK.js";
29
+
30
+ // src/patterns/machine.ts
31
+ function machine(config) {
32
+ const [state, setState] = signal(config.initial);
33
+ const [context, setContext] = signal(config.context || {});
34
+ const initialDef = config.states[config.initial];
35
+ if (initialDef?.entry) {
36
+ initialDef.entry(context());
37
+ }
38
+ function send(event) {
39
+ const currentState = state();
40
+ const stateDef = config.states[currentState];
41
+ if (!stateDef?.on) return;
42
+ const transition = stateDef.on[event];
43
+ if (!transition) return;
44
+ let target;
45
+ let guard;
46
+ let action;
47
+ if (typeof transition === "string") {
48
+ target = transition;
49
+ } else {
50
+ target = transition.target;
51
+ guard = transition.guard;
52
+ action = transition.action;
53
+ }
54
+ const ctx = context();
55
+ if (guard && !guard(ctx)) return;
56
+ if (stateDef.exit) {
57
+ stateDef.exit(ctx);
58
+ }
59
+ if (action) {
60
+ const patch = action(ctx);
61
+ setContext({ ...ctx, ...patch });
62
+ }
63
+ setState(target);
64
+ const targetDef = config.states[target];
65
+ if (targetDef?.entry) {
66
+ targetDef.entry(context());
67
+ }
68
+ }
69
+ function matches(s) {
70
+ return state() === s;
71
+ }
72
+ function can(event) {
73
+ const currentState = state();
74
+ const stateDef = config.states[currentState];
75
+ if (!stateDef?.on) return false;
76
+ const transition = stateDef.on[event];
77
+ if (!transition) return false;
78
+ if (typeof transition === "string") return true;
79
+ if (transition.guard) {
80
+ return transition.guard(context());
81
+ }
82
+ return true;
83
+ }
84
+ return { state, context, send, matches, can };
85
+ }
86
+
87
+ // src/patterns/persist.ts
88
+ function persisted(key, initial, options = {}) {
89
+ const storage = options.session ? sessionStorage : localStorage;
90
+ const serialize = options.serialize || JSON.stringify;
91
+ const deserialize = options.deserialize || JSON.parse;
92
+ let restored = initial;
93
+ try {
94
+ const raw = storage.getItem(key);
95
+ if (raw !== null) {
96
+ const parsed = deserialize(raw);
97
+ restored = options.validate && !options.validate(parsed) ? initial : parsed;
98
+ }
99
+ } catch {
100
+ }
101
+ const [value, setValue] = signal(restored);
102
+ effect(() => {
103
+ const current = value();
104
+ try {
105
+ storage.setItem(key, serialize(current));
106
+ } catch {
107
+ }
108
+ });
109
+ return [value, setValue];
110
+ }
111
+
112
+ // src/patterns/optimistic.ts
113
+ function optimistic(initialValue) {
114
+ const [value, setValue] = signal(initialValue);
115
+ const [_pending, setPending] = signal(false);
116
+ async function addOptimistic(optimisticValue, asyncAction) {
117
+ const previousValue = value();
118
+ setValue(optimisticValue);
119
+ setPending(true);
120
+ try {
121
+ const result = await asyncAction();
122
+ setValue(result);
123
+ } catch {
124
+ setValue(previousValue);
125
+ } finally {
126
+ setPending(false);
127
+ }
128
+ }
129
+ return [value, addOptimistic];
130
+ }
131
+ function optimisticList(initialValue) {
132
+ const [items, setItems] = signal([...initialValue]);
133
+ async function addOptimistic(item, asyncAction) {
134
+ const prev = items();
135
+ setItems([...prev, item]);
136
+ try {
137
+ const result = await asyncAction();
138
+ setItems([...prev, result]);
139
+ } catch {
140
+ setItems(prev);
141
+ }
142
+ }
143
+ async function removeOptimistic(predicate, asyncAction) {
144
+ const prev = items();
145
+ setItems(prev.filter((item) => !predicate(item)));
146
+ try {
147
+ await asyncAction();
148
+ } catch {
149
+ setItems(prev);
150
+ }
151
+ }
152
+ async function updateOptimistic(predicate, update, asyncAction) {
153
+ const prev = items();
154
+ setItems(prev.map((item) => predicate(item) ? { ...item, ...update } : item));
155
+ try {
156
+ const result = await asyncAction();
157
+ setItems(prev.map((item) => predicate(item) ? result : item));
158
+ } catch {
159
+ setItems(prev);
160
+ }
161
+ }
162
+ return { items, addOptimistic, removeOptimistic, updateOptimistic };
163
+ }
164
+
165
+ // src/patterns/timeTravel.ts
166
+ function timeline(initial, maxHistory = 100) {
167
+ const [history, setHistory] = signal([initial]);
168
+ const [index, setIndex] = signal(0);
169
+ const value = derived(() => history()[index()]);
170
+ const canUndo = derived(() => index() > 0);
171
+ const canRedo = derived(() => index() < history().length - 1);
172
+ function set(next) {
173
+ const current = value();
174
+ const newValue = typeof next === "function" ? next(current) : next;
175
+ if (Object.is(newValue, current)) return;
176
+ const hist = history();
177
+ const idx = index();
178
+ const newHistory = hist.slice(0, idx + 1);
179
+ newHistory.push(newValue);
180
+ if (newHistory.length > maxHistory) {
181
+ newHistory.shift();
182
+ setHistory(newHistory);
183
+ setIndex(newHistory.length - 1);
184
+ } else {
185
+ setHistory(newHistory);
186
+ setIndex(idx + 1);
187
+ }
188
+ }
189
+ function undo() {
190
+ if (canUndo()) {
191
+ setIndex(index() - 1);
192
+ }
193
+ }
194
+ function redo() {
195
+ if (canRedo()) {
196
+ setIndex(index() + 1);
197
+ }
198
+ }
199
+ function reset() {
200
+ setHistory([initial]);
201
+ setIndex(0);
202
+ }
203
+ function jumpTo(targetIndex) {
204
+ const hist = history();
205
+ if (targetIndex >= 0 && targetIndex < hist.length) {
206
+ setIndex(targetIndex);
207
+ }
208
+ }
209
+ return { value, set, undo, redo, canUndo, canRedo, history, index, reset, jumpTo };
210
+ }
211
+
212
+ // src/patterns/globalStore.ts
213
+ function globalStore(config) {
214
+ const initialState = { ...config.state };
215
+ const [getState, setState] = signal({ ...initialState });
216
+ const listeners = /* @__PURE__ */ new Set();
217
+ const middlewares = config.middleware || [];
218
+ function dispatch(action, payload) {
219
+ const actionFn = config.actions[action];
220
+ if (!actionFn) throw new Error(`Unknown action: ${String(action)}`);
221
+ const execute = () => {
222
+ const current = getState();
223
+ const patch = actionFn(current, payload);
224
+ setState({ ...current, ...patch });
225
+ const newState = getState();
226
+ for (const listener of listeners) {
227
+ listener(newState);
228
+ }
229
+ };
230
+ if (middlewares.length === 0) {
231
+ execute();
232
+ return;
233
+ }
234
+ let index = 0;
235
+ const next = () => {
236
+ if (index < middlewares.length) {
237
+ const mw = middlewares[index++];
238
+ mw(getState(), String(action), payload, next);
239
+ } else {
240
+ execute();
241
+ }
242
+ };
243
+ next();
244
+ }
245
+ function select(selector) {
246
+ return derived(() => selector(getState()));
247
+ }
248
+ function subscribe(callback) {
249
+ listeners.add(callback);
250
+ return () => listeners.delete(callback);
251
+ }
252
+ function reset() {
253
+ setState({ ...initialState });
254
+ for (const listener of listeners) {
255
+ listener(getState());
256
+ }
257
+ }
258
+ return { getState, select, dispatch, subscribe, reset };
259
+ }
260
+
261
+ // src/patterns/primitives.ts
262
+ function createSignal(value) {
263
+ return signal(value);
264
+ }
265
+ function createMemo(fn) {
266
+ return derived(fn);
267
+ }
268
+ function createEffect(fn) {
269
+ return effect(fn);
270
+ }
271
+ export {
272
+ RenderProp,
273
+ assertType,
274
+ composable,
275
+ compose,
276
+ createEffect,
277
+ createGuard,
278
+ createMemo,
279
+ createSignal,
280
+ createSlots,
281
+ defineComponent,
282
+ defineSlottedComponent,
283
+ defineStrictComponent,
284
+ globalStore,
285
+ machine,
286
+ optimistic,
287
+ optimisticList,
288
+ persisted,
289
+ timeline,
290
+ validateProps,
291
+ validators,
292
+ withBoundary,
293
+ withDefaults,
294
+ withProps,
295
+ withWrapper
296
+ };