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.
- package/LICENSE +21 -0
- package/README.md +1630 -0
- package/dist/browser.cjs +815 -0
- package/dist/browser.d.cts +174 -0
- package/dist/browser.d.ts +174 -0
- package/dist/browser.js +458 -0
- package/dist/build.cjs +4970 -0
- package/dist/build.d.cts +630 -0
- package/dist/build.d.ts +630 -0
- package/dist/build.js +2478 -0
- package/dist/cdn.global.js +115 -0
- package/dist/chunk-27QC4FPL.js +67 -0
- package/dist/chunk-2ABBWCGC.js +65 -0
- package/dist/chunk-2MUNQYZ7.js +26 -0
- package/dist/chunk-2PSPKNUI.js +1711 -0
- package/dist/chunk-35CDLDX5.js +1758 -0
- package/dist/chunk-36MU4CFV.js +41 -0
- package/dist/chunk-3FIQOFI6.js +182 -0
- package/dist/chunk-3GHNC2BN.js +28 -0
- package/dist/chunk-3HLWWEPU.js +909 -0
- package/dist/chunk-3IVI3J54.js +252 -0
- package/dist/chunk-3KZ72WNW.js +944 -0
- package/dist/chunk-4AU64SQV.js +182 -0
- package/dist/chunk-4MOK7HAR.js +84 -0
- package/dist/chunk-4QK6FBDH.js +1429 -0
- package/dist/chunk-566Z7HXB.js +737 -0
- package/dist/chunk-5CRBB7XP.js +358 -0
- package/dist/chunk-5G67D3IZ.js +168 -0
- package/dist/chunk-5NCPAWBE.js +99 -0
- package/dist/chunk-5O2RKXR3.js +1444 -0
- package/dist/chunk-6BTBDO6A.js +633 -0
- package/dist/chunk-6IWEHW57.js +43 -0
- package/dist/chunk-6JGMNCD6.js +282 -0
- package/dist/chunk-6QRLJNXR.js +1425 -0
- package/dist/chunk-7HM5UE5T.js +270 -0
- package/dist/chunk-7JOLTGUH.js +58 -0
- package/dist/chunk-7MCWJCQK.js +909 -0
- package/dist/chunk-7RIIFP3E.js +1758 -0
- package/dist/chunk-7UASYN3G.js +254 -0
- package/dist/chunk-7W2WYHDI.js +741 -0
- package/dist/chunk-7Y35RDSJ.js +872 -0
- package/dist/chunk-A65GFJBL.js +65 -0
- package/dist/chunk-AD6ZIEDK.js +67 -0
- package/dist/chunk-AK5Y72F3.js +1426 -0
- package/dist/chunk-APOMMWH4.js +282 -0
- package/dist/chunk-ARZVTWIQ.js +1750 -0
- package/dist/chunk-AWWBM2BI.js +664 -0
- package/dist/chunk-AX5VEQTY.js +58 -0
- package/dist/chunk-AYTXVOW3.js +1708 -0
- package/dist/chunk-BG4A246G.js +1746 -0
- package/dist/chunk-BNFJJA2L.js +1425 -0
- package/dist/chunk-BPKPBVU5.js +59 -0
- package/dist/chunk-BPKPPSXC.js +282 -0
- package/dist/chunk-BPWKKK7F.js +1711 -0
- package/dist/chunk-CCKX6YTC.js +1735 -0
- package/dist/chunk-CIF5Z3MP.js +58 -0
- package/dist/chunk-CSXYU7IO.js +457 -0
- package/dist/chunk-D6JD4FDC.js +26 -0
- package/dist/chunk-E7NGA7X2.js +59 -0
- package/dist/chunk-EEPPJKAE.js +443 -0
- package/dist/chunk-EJMYGAGQ.js +717 -0
- package/dist/chunk-EL6Z5MDY.js +55 -0
- package/dist/chunk-EP7VRLEB.js +41 -0
- package/dist/chunk-ETMEC6FH.js +99 -0
- package/dist/chunk-EZ2WHYVL.js +65 -0
- package/dist/chunk-EZRVMSZK.js +67 -0
- package/dist/chunk-F2TRGINX.js +254 -0
- package/dist/chunk-F5JCIH3Q.js +642 -0
- package/dist/chunk-FGK3JKMN.js +909 -0
- package/dist/chunk-FQWPKSTD.js +1437 -0
- package/dist/chunk-FWHVLMCI.js +26 -0
- package/dist/chunk-GBEYQRO2.js +303 -0
- package/dist/chunk-GBLES3NK.js +248 -0
- package/dist/chunk-GQVGUQW6.js +1436 -0
- package/dist/chunk-HCV2T76T.js +457 -0
- package/dist/chunk-HS7ZKVPR.js +182 -0
- package/dist/chunk-HXDVV7HZ.js +909 -0
- package/dist/chunk-IB23VMO3.js +1746 -0
- package/dist/chunk-IEMZ7RTT.js +99 -0
- package/dist/chunk-IPGRSN42.js +1750 -0
- package/dist/chunk-IVMOK2QN.js +1750 -0
- package/dist/chunk-JCLGQO7T.js +443 -0
- package/dist/chunk-JDXL7KDB.js +1436 -0
- package/dist/chunk-JIIFW636.js +270 -0
- package/dist/chunk-JWGEEH7H.js +944 -0
- package/dist/chunk-K2BESAG7.js +1688 -0
- package/dist/chunk-K2U5YGF4.js +877 -0
- package/dist/chunk-K45FQ4Y4.js +175 -0
- package/dist/chunk-K7BPE427.js +1432 -0
- package/dist/chunk-KL3266RS.js +26 -0
- package/dist/chunk-KNN4P7DZ.js +84 -0
- package/dist/chunk-KP2DZH5Q.js +254 -0
- package/dist/chunk-KZHAJSQR.js +1636 -0
- package/dist/chunk-LBKGHMQV.js +1750 -0
- package/dist/chunk-LBTEPL7A.js +1731 -0
- package/dist/chunk-LEBBPTDB.js +1444 -0
- package/dist/chunk-LLH63WVQ.js +98 -0
- package/dist/chunk-LWVR2C4G.js +1711 -0
- package/dist/chunk-M3MDTVV2.js +896 -0
- package/dist/chunk-M5GNLDEO.js +303 -0
- package/dist/chunk-MFHVGKET.js +267 -0
- package/dist/chunk-MGWSG3PM.js +358 -0
- package/dist/chunk-MJNB47HB.js +19 -0
- package/dist/chunk-MLKGABMK.js +9 -0
- package/dist/chunk-MQWTY3JY.js +944 -0
- package/dist/chunk-MZZOQHNI.js +642 -0
- package/dist/chunk-NIHWGZS4.js +1426 -0
- package/dist/chunk-NSVVHQK5.js +41 -0
- package/dist/chunk-NVI2WE7D.js +443 -0
- package/dist/chunk-O7QBO3PH.js +58 -0
- package/dist/chunk-OAUPQBO2.js +270 -0
- package/dist/chunk-OB2LMD7C.js +297 -0
- package/dist/chunk-OHEYBWQU.js +58 -0
- package/dist/chunk-OI6OXUHJ.js +443 -0
- package/dist/chunk-OX2VMRMV.js +633 -0
- package/dist/chunk-P4FYE5TX.js +866 -0
- package/dist/chunk-P5KFWM4H.js +98 -0
- package/dist/chunk-PUMLE7RJ.js +1711 -0
- package/dist/chunk-Q4MFANBF.js +282 -0
- package/dist/chunk-QLEKZMMU.js +282 -0
- package/dist/chunk-RGGNGVO3.js +98 -0
- package/dist/chunk-RKJDRVV6.js +443 -0
- package/dist/chunk-S5BHU353.js +43 -0
- package/dist/chunk-SHQUSFH7.js +1426 -0
- package/dist/chunk-SMB4DBMD.js +182 -0
- package/dist/chunk-SNYHQP3D.js +743 -0
- package/dist/chunk-T24L3TBF.js +1717 -0
- package/dist/chunk-TAQNSOKT.js +692 -0
- package/dist/chunk-TDNY4SUA.js +41 -0
- package/dist/chunk-TNNF56IQ.js +1750 -0
- package/dist/chunk-TR7E6LYX.js +457 -0
- package/dist/chunk-URWUFH45.js +98 -0
- package/dist/chunk-UUSIH3XH.js +1429 -0
- package/dist/chunk-UYFNXLKR.js +1436 -0
- package/dist/chunk-V6F7KUWD.js +270 -0
- package/dist/chunk-VCZLXRMR.js +254 -0
- package/dist/chunk-VDHXSSBT.js +1426 -0
- package/dist/chunk-VM4QMKVK.js +254 -0
- package/dist/chunk-VWGYKYL2.js +737 -0
- package/dist/chunk-VX2OFBJN.js +1426 -0
- package/dist/chunk-VXVIE6DG.js +84 -0
- package/dist/chunk-W4OH7HG4.js +40 -0
- package/dist/chunk-WBVJX4GZ.js +98 -0
- package/dist/chunk-WDU2ZV4I.js +1426 -0
- package/dist/chunk-X6VUCICU.js +457 -0
- package/dist/chunk-XAY7FM7Y.js +618 -0
- package/dist/chunk-XJZ5Z2CM.js +642 -0
- package/dist/chunk-XKVFQTJJ.js +254 -0
- package/dist/chunk-XRLFASCY.js +22 -0
- package/dist/chunk-XYU6TZOW.js +182 -0
- package/dist/chunk-Y745CBVB.js +944 -0
- package/dist/chunk-YLBJSXYY.js +944 -0
- package/dist/chunk-YQJIKVPZ.js +1429 -0
- package/dist/chunk-YRM2VCZF.js +457 -0
- package/dist/chunk-YS33KBVJ.js +944 -0
- package/dist/chunk-Z27DZPDG.js +41 -0
- package/dist/chunk-ZXQ5NAEN.js +32 -0
- package/dist/contracts-B552GopR.d.cts +245 -0
- package/dist/contracts-B552GopR.d.ts +245 -0
- package/dist/contracts-Bg1ECISC.d.cts +245 -0
- package/dist/contracts-Bg1ECISC.d.ts +245 -0
- package/dist/contracts-CMriKJ6P.d.cts +245 -0
- package/dist/contracts-CMriKJ6P.d.ts +245 -0
- package/dist/contracts-DOrhwbke.d.cts +245 -0
- package/dist/contracts-DOrhwbke.d.ts +245 -0
- package/dist/data.cjs +1373 -0
- package/dist/data.d.cts +434 -0
- package/dist/data.d.ts +434 -0
- package/dist/data.js +945 -0
- package/dist/devtools.cjs +1357 -0
- package/dist/devtools.d.cts +473 -0
- package/dist/devtools.d.ts +473 -0
- package/dist/devtools.js +1084 -0
- package/dist/ecosystem.cjs +1046 -0
- package/dist/ecosystem.d.cts +247 -0
- package/dist/ecosystem.d.ts +247 -0
- package/dist/ecosystem.js +369 -0
- package/dist/extras.cjs +8457 -0
- package/dist/extras.d.cts +2356 -0
- package/dist/extras.d.ts +2356 -0
- package/dist/extras.js +5152 -0
- package/dist/index.cjs +2648 -0
- package/dist/index.d.cts +869 -0
- package/dist/index.d.ts +869 -0
- package/dist/index.js +386 -0
- package/dist/motion.cjs +604 -0
- package/dist/motion.d.cts +146 -0
- package/dist/motion.d.ts +146 -0
- package/dist/motion.js +346 -0
- package/dist/patterns.cjs +815 -0
- package/dist/patterns.d.cts +163 -0
- package/dist/patterns.d.ts +163 -0
- package/dist/patterns.js +296 -0
- package/dist/performance.cjs +927 -0
- package/dist/performance.d.cts +416 -0
- package/dist/performance.d.ts +416 -0
- package/dist/performance.js +654 -0
- package/dist/plugins.cjs +2487 -0
- package/dist/plugins.d.cts +393 -0
- package/dist/plugins.d.ts +393 -0
- package/dist/plugins.js +1504 -0
- package/dist/signal-BnWpq6WB.d.cts +5 -0
- package/dist/signal-BnWpq6WB.d.ts +5 -0
- package/dist/src/components/ErrorBoundary.d.ts +15 -0
- package/dist/src/components/ErrorBoundary.js +119 -0
- package/dist/src/core/catch.d.ts +11 -0
- package/dist/src/core/catch.js +28 -0
- package/dist/src/core/each.d.ts +13 -0
- package/dist/src/core/each.js +68 -0
- package/dist/src/core/for.d.ts +12 -0
- package/dist/src/core/for.js +67 -0
- package/dist/src/core/html.d.ts +137 -0
- package/dist/src/core/html.js +155 -0
- package/dist/src/core/htmlIf.d.ts +11 -0
- package/dist/src/core/htmlIf.js +18 -0
- package/dist/src/core/lazy.d.ts +7 -0
- package/dist/src/core/lazy.js +16 -0
- package/dist/src/core/mount.d.ts +7 -0
- package/dist/src/core/mount.js +12 -0
- package/dist/src/core/slots.d.ts +3 -0
- package/dist/src/core/slots.js +3 -0
- package/dist/src/core/suspense.d.ts +10 -0
- package/dist/src/core/suspense.js +33 -0
- package/dist/src/core/tagFactory.d.ts +13 -0
- package/dist/src/core/tagFactory.js +86 -0
- package/dist/src/core/test.d.ts +11 -0
- package/dist/src/core/test.js +28 -0
- package/dist/src/core/types.d.ts +2 -0
- package/dist/src/core/types.js +1 -0
- package/dist/src/core/useComputed.d.ts +6 -0
- package/dist/src/core/useComputed.js +30 -0
- package/dist/src/core/useEffect.d.ts +6 -0
- package/dist/src/core/useEffect.js +23 -0
- package/dist/src/core/useState.d.ts +10 -0
- package/dist/src/core/useState.js +34 -0
- package/dist/src/core/useStore.d.ts +19 -0
- package/dist/src/core/useStore.js +53 -0
- package/dist/src/core/useWatch.d.ts +8 -0
- package/dist/src/core/useWatch.js +23 -0
- package/dist/src/plugins/i18n.d.ts +6 -0
- package/dist/src/plugins/i18n.js +16 -0
- package/dist/src/plugins/router.d.ts +188 -0
- package/dist/src/plugins/router.js +1178 -0
- package/dist/src/reactivity/bindAttribute.d.ts +5 -0
- package/dist/src/reactivity/bindAttribute.js +31 -0
- package/dist/src/reactivity/bindChildNode.d.ts +10 -0
- package/dist/src/reactivity/bindChildNode.js +46 -0
- package/dist/src/reactivity/bindTextNode.d.ts +10 -0
- package/dist/src/reactivity/bindTextNode.js +27 -0
- package/dist/src/reactivity/signal.d.ts +3 -0
- package/dist/src/reactivity/signal.js +1 -0
- package/dist/src/reactivity/track.d.ts +18 -0
- package/dist/src/reactivity/track.js +73 -0
- package/dist/src/reactivity/useComputed.d.ts +6 -0
- package/dist/src/reactivity/useComputed.js +30 -0
- package/dist/src/reactivity/useEffect.d.ts +6 -0
- package/dist/src/reactivity/useEffect.js +23 -0
- package/dist/src/reactivity/useState.d.ts +10 -0
- package/dist/src/reactivity/useState.js +34 -0
- package/dist/src/reactivity/useStore.d.ts +19 -0
- package/dist/src/reactivity/useStore.js +53 -0
- package/dist/src/reactivity/useWatch.d.ts +8 -0
- package/dist/src/reactivity/useWatch.js +23 -0
- package/dist/src/utils/sanitize.d.ts +1 -0
- package/dist/src/utils/sanitize.js +8 -0
- package/dist/ssr-27FOM46T.js +35 -0
- package/dist/ssr-GFUTTSJD.js +22 -0
- package/dist/ssr-K7DCR6BZ.js +35 -0
- package/dist/ssr-O6LFMRFP.js +35 -0
- package/dist/ssr-QZEVGMMK.js +35 -0
- package/dist/ssr-SGVBCAGC.js +35 -0
- package/dist/ssr-UB2IXCYX.js +35 -0
- package/dist/ssr-XBZQNV4O.js +22 -0
- package/dist/ssr-Y76FSXDU.js +35 -0
- package/dist/ssr-YQJ4AYBD.js +35 -0
- package/dist/ssr.cjs +1757 -0
- package/dist/ssr.d.cts +478 -0
- package/dist/ssr.d.ts +478 -0
- package/dist/ssr.js +743 -0
- package/dist/tagFactory-CZPO4RXF.d.cts +34 -0
- package/dist/tagFactory-CZPO4RXF.d.ts +34 -0
- package/dist/tagFactory-CgImPVMY.d.cts +22 -0
- package/dist/tagFactory-CgImPVMY.d.ts +22 -0
- package/dist/tagFactory-Cw1iv5if.d.cts +22 -0
- package/dist/tagFactory-Cw1iv5if.d.ts +22 -0
- package/dist/tagFactory-DeAXq9ef.d.cts +30 -0
- package/dist/tagFactory-DeAXq9ef.d.ts +30 -0
- package/dist/tagFactory-SkY0a7L1.d.cts +22 -0
- package/dist/tagFactory-SkY0a7L1.d.ts +22 -0
- package/dist/testing.cjs +1919 -0
- package/dist/testing.d.cts +491 -0
- package/dist/testing.d.ts +491 -0
- package/dist/testing.js +1862 -0
- package/dist/ui.cjs +1497 -0
- package/dist/ui.d.cts +264 -0
- package/dist/ui.d.ts +264 -0
- package/dist/ui.js +900 -0
- package/dist/widgets.cjs +919 -0
- package/dist/widgets.d.cts +165 -0
- package/dist/widgets.d.ts +165 -0
- package/dist/widgets.js +545 -0
- package/package.json +134 -0
|
@@ -0,0 +1,247 @@
|
|
|
1
|
+
import { T as TagProps } from './tagFactory-DeAXq9ef.cjs';
|
|
2
|
+
|
|
3
|
+
interface PluginContext {
|
|
4
|
+
/** Register a global hook */
|
|
5
|
+
onInit: (callback: () => void) => void;
|
|
6
|
+
onMount: (callback: (element: HTMLElement) => void) => void;
|
|
7
|
+
onUnmount: (callback: (element: HTMLElement) => void) => void;
|
|
8
|
+
onError: (callback: (error: Error) => void) => void;
|
|
9
|
+
/** Provide a value globally */
|
|
10
|
+
provide: (key: string, value: unknown) => void;
|
|
11
|
+
}
|
|
12
|
+
interface SibuPlugin {
|
|
13
|
+
name: string;
|
|
14
|
+
install: (ctx: PluginContext, options?: unknown) => void;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
/** MobX autorun disposer function type. */
|
|
18
|
+
type MobXReactionDisposer = () => void;
|
|
19
|
+
interface MobXAdapterOptions {
|
|
20
|
+
/** MobX's autorun function — passed to avoid importing MobX directly. */
|
|
21
|
+
autorun: (view: () => void) => MobXReactionDisposer;
|
|
22
|
+
}
|
|
23
|
+
interface MobXAdapterAPI {
|
|
24
|
+
/**
|
|
25
|
+
* Bridge a MobX observable into a SibuJS reactive getter.
|
|
26
|
+
*
|
|
27
|
+
* Takes a MobX expression (function reading MobX observables)
|
|
28
|
+
* and returns a SibuJS getter that updates when the observables change.
|
|
29
|
+
*/
|
|
30
|
+
fromMobX: <T>(expression: () => T) => () => T;
|
|
31
|
+
/**
|
|
32
|
+
* Bridge a SibuJS getter into a MobX reaction.
|
|
33
|
+
*
|
|
34
|
+
* Runs a callback whenever a SibuJS signal changes.
|
|
35
|
+
*/
|
|
36
|
+
toMobX: (sibuGetter: () => unknown, callback: (value: unknown) => void) => () => void;
|
|
37
|
+
/** Dispose all active bridges. */
|
|
38
|
+
destroy: () => void;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Creates a MobX adapter plugin for SibuJS.
|
|
42
|
+
*
|
|
43
|
+
* Unlike Redux/Zustand, MobX has distributed observables rather than
|
|
44
|
+
* a single store. The adapter provides `fromMobX()` to bridge any
|
|
45
|
+
* MobX expression into a SibuJS reactive getter.
|
|
46
|
+
*
|
|
47
|
+
* @example
|
|
48
|
+
* ```ts
|
|
49
|
+
* import { mobXAdapter } from "sibu/extras";
|
|
50
|
+
* import { autorun, makeAutoObservable } from "mobx";
|
|
51
|
+
*
|
|
52
|
+
* class TodoStore {
|
|
53
|
+
* todos: string[] = [];
|
|
54
|
+
* constructor() { makeAutoObservable(this); }
|
|
55
|
+
* addTodo(t: string) { this.todos.push(t); }
|
|
56
|
+
* }
|
|
57
|
+
*
|
|
58
|
+
* const todoStore = new TodoStore();
|
|
59
|
+
* const plugin = mobXAdapter({ autorun });
|
|
60
|
+
* plugin(plugin);
|
|
61
|
+
*
|
|
62
|
+
* const mobx = inject<MobXAdapterAPI>("mobx");
|
|
63
|
+
* const todoCount = mobx.fromMobX(() => todoStore.todos.length);
|
|
64
|
+
* div({ nodes: () => `Todos: ${todoCount()}` });
|
|
65
|
+
* ```
|
|
66
|
+
*/
|
|
67
|
+
declare function mobXAdapter(options: MobXAdapterOptions): SibuPlugin;
|
|
68
|
+
|
|
69
|
+
/** Minimal Redux store interface (peer dependency — no import from redux). */
|
|
70
|
+
interface ReduxStore<S = unknown> {
|
|
71
|
+
getState(): S;
|
|
72
|
+
dispatch(action: unknown): unknown;
|
|
73
|
+
subscribe(listener: () => void): () => void;
|
|
74
|
+
}
|
|
75
|
+
interface ReduxAdapterOptions<S = unknown> {
|
|
76
|
+
store: ReduxStore<S>;
|
|
77
|
+
}
|
|
78
|
+
interface ReduxAdapterAPI<S = unknown> {
|
|
79
|
+
/** Full store state as a SibuJS reactive getter */
|
|
80
|
+
getState: () => S;
|
|
81
|
+
/** Create a SibuJS reactive getter from a Redux selector */
|
|
82
|
+
useSelector: <R>(selector: (state: S) => R) => () => R;
|
|
83
|
+
/** Dispatch an action to the Redux store */
|
|
84
|
+
dispatch: ReduxStore<S>["dispatch"];
|
|
85
|
+
/** Unsubscribe from the Redux store */
|
|
86
|
+
destroy: () => void;
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Creates a Redux adapter plugin for SibuJS.
|
|
90
|
+
*
|
|
91
|
+
* Bridges Redux store subscriptions into SibuJS signal-based reactivity.
|
|
92
|
+
* Each selector becomes a reactive getter that auto-updates when Redux
|
|
93
|
+
* state changes.
|
|
94
|
+
*
|
|
95
|
+
* @example
|
|
96
|
+
* ```ts
|
|
97
|
+
* import { reduxAdapter } from "sibu/extras";
|
|
98
|
+
* import { createStore } from "redux";
|
|
99
|
+
*
|
|
100
|
+
* const reduxStore = createStore(rootReducer);
|
|
101
|
+
* const reduxPlugin = reduxAdapter({ store: reduxStore });
|
|
102
|
+
* plugin(reduxPlugin);
|
|
103
|
+
*
|
|
104
|
+
* const redux = inject<ReduxAdapterAPI>("redux");
|
|
105
|
+
* const count = redux.useSelector(s => s.counter);
|
|
106
|
+
* div({ nodes: () => `Count: ${count()}` });
|
|
107
|
+
* ```
|
|
108
|
+
*/
|
|
109
|
+
declare function reduxAdapter<S>(options: ReduxAdapterOptions<S>): SibuPlugin;
|
|
110
|
+
|
|
111
|
+
/** Minimal Zustand store interface (peer dependency). */
|
|
112
|
+
interface ZustandStore<S> {
|
|
113
|
+
getState(): S;
|
|
114
|
+
setState(partial: Partial<S> | ((state: S) => Partial<S>), replace?: boolean): void;
|
|
115
|
+
subscribe(listener: (state: S, prevState: S) => void): () => void;
|
|
116
|
+
destroy(): void;
|
|
117
|
+
}
|
|
118
|
+
interface ZustandAdapterOptions<S> {
|
|
119
|
+
store: ZustandStore<S>;
|
|
120
|
+
}
|
|
121
|
+
interface ZustandAdapterAPI<S> {
|
|
122
|
+
/** Full Zustand state as a SibuJS reactive getter */
|
|
123
|
+
getState: () => S;
|
|
124
|
+
/** Create a SibuJS reactive getter from a Zustand selector */
|
|
125
|
+
useSelector: <R>(selector: (state: S) => R) => () => R;
|
|
126
|
+
/** Set state on the Zustand store */
|
|
127
|
+
setState: ZustandStore<S>["setState"];
|
|
128
|
+
/** Destroy the subscription and the Zustand store */
|
|
129
|
+
destroy: () => void;
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Creates a Zustand adapter plugin for SibuJS.
|
|
133
|
+
*
|
|
134
|
+
* @example
|
|
135
|
+
* ```ts
|
|
136
|
+
* import { zustandAdapter } from "sibu/extras";
|
|
137
|
+
* import { createStore } from "zustand/vanilla";
|
|
138
|
+
*
|
|
139
|
+
* const bearStore = createStore((set) => ({
|
|
140
|
+
* bears: 0,
|
|
141
|
+
* increase: () => set((s) => ({ bears: s.bears + 1 })),
|
|
142
|
+
* }));
|
|
143
|
+
*
|
|
144
|
+
* const plugin = zustandAdapter({ store: bearStore });
|
|
145
|
+
* plugin(plugin);
|
|
146
|
+
*
|
|
147
|
+
* const zs = inject<ZustandAdapterAPI>("zustand");
|
|
148
|
+
* const bears = zs.useSelector(s => s.bears);
|
|
149
|
+
* div({ nodes: () => `Bears: ${bears()}` });
|
|
150
|
+
* ```
|
|
151
|
+
*/
|
|
152
|
+
declare function zustandAdapter<S>(options: ZustandAdapterOptions<S>): SibuPlugin;
|
|
153
|
+
|
|
154
|
+
interface ThemeConfig {
|
|
155
|
+
/** CSS class prefix for the design system (e.g., "mdc", "ant", "chakra") */
|
|
156
|
+
prefix: string;
|
|
157
|
+
/** CSS variables to inject as custom properties */
|
|
158
|
+
variables?: Record<string, string>;
|
|
159
|
+
/** Overrides for default class mappings */
|
|
160
|
+
classOverrides?: Record<string, string>;
|
|
161
|
+
}
|
|
162
|
+
interface ThemeAPI {
|
|
163
|
+
/** Get the current theme config reactively */
|
|
164
|
+
config: () => ThemeConfig;
|
|
165
|
+
/** Update the theme */
|
|
166
|
+
setTheme: (config: Partial<ThemeConfig>) => void;
|
|
167
|
+
/** Resolve a component class name using prefix and overrides */
|
|
168
|
+
resolveClass: (component: string, variant?: string) => string;
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Creates a reactive theme for a UI component library adapter.
|
|
172
|
+
*/
|
|
173
|
+
declare function createTheme(initial: ThemeConfig): ThemeAPI;
|
|
174
|
+
interface ComponentMapping {
|
|
175
|
+
/** HTML tag to use (default: "div") */
|
|
176
|
+
tag?: string;
|
|
177
|
+
/** Base CSS class for this component */
|
|
178
|
+
baseClass: string;
|
|
179
|
+
/** Variant-to-class mapping */
|
|
180
|
+
variants?: Record<string, string>;
|
|
181
|
+
/** Size-to-class mapping */
|
|
182
|
+
sizes?: Record<string, string>;
|
|
183
|
+
/** Additional default props */
|
|
184
|
+
defaultProps?: Partial<TagProps>;
|
|
185
|
+
}
|
|
186
|
+
interface AdapterConfig {
|
|
187
|
+
/** Name of the CSS framework */
|
|
188
|
+
name: string;
|
|
189
|
+
/** CSS class prefix */
|
|
190
|
+
prefix: string;
|
|
191
|
+
/** Component mappings */
|
|
192
|
+
components: Record<string, ComponentMapping>;
|
|
193
|
+
}
|
|
194
|
+
interface AdaptedComponentProps extends TagProps {
|
|
195
|
+
/** Component variant (e.g., "primary", "outlined") */
|
|
196
|
+
variant?: string;
|
|
197
|
+
/** Component size (e.g., "sm", "md", "lg") */
|
|
198
|
+
size?: string;
|
|
199
|
+
}
|
|
200
|
+
type AdaptedComponent = (props?: AdaptedComponentProps) => Element;
|
|
201
|
+
/**
|
|
202
|
+
* Creates a set of SibuJS components from a CSS framework's class mappings.
|
|
203
|
+
*
|
|
204
|
+
* @example
|
|
205
|
+
* ```ts
|
|
206
|
+
* const adapter = componentAdapter({
|
|
207
|
+
* name: "material",
|
|
208
|
+
* prefix: "mdc",
|
|
209
|
+
* components: {
|
|
210
|
+
* Button: {
|
|
211
|
+
* tag: "button",
|
|
212
|
+
* baseClass: "mdc-button",
|
|
213
|
+
* variants: { raised: "mdc-button--raised" },
|
|
214
|
+
* sizes: { sm: "mdc-button--dense" },
|
|
215
|
+
* },
|
|
216
|
+
* },
|
|
217
|
+
* });
|
|
218
|
+
*
|
|
219
|
+
* const { Button } = adapter.components;
|
|
220
|
+
* Button({ variant: "raised", nodes: "Click me" });
|
|
221
|
+
* ```
|
|
222
|
+
*/
|
|
223
|
+
declare function componentAdapter(config: AdapterConfig): {
|
|
224
|
+
name: string;
|
|
225
|
+
components: Record<string, AdaptedComponent>;
|
|
226
|
+
theme: ThemeAPI;
|
|
227
|
+
};
|
|
228
|
+
|
|
229
|
+
declare const antdAdapter: {
|
|
230
|
+
name: string;
|
|
231
|
+
components: Record<string, AdaptedComponent>;
|
|
232
|
+
theme: ThemeAPI;
|
|
233
|
+
};
|
|
234
|
+
|
|
235
|
+
declare const chakraAdapter: {
|
|
236
|
+
name: string;
|
|
237
|
+
components: Record<string, AdaptedComponent>;
|
|
238
|
+
theme: ThemeAPI;
|
|
239
|
+
};
|
|
240
|
+
|
|
241
|
+
declare const materialAdapter: {
|
|
242
|
+
name: string;
|
|
243
|
+
components: Record<string, AdaptedComponent>;
|
|
244
|
+
theme: ThemeAPI;
|
|
245
|
+
};
|
|
246
|
+
|
|
247
|
+
export { type AdaptedComponent, type AdaptedComponentProps, type AdapterConfig, type ComponentMapping, type MobXAdapterAPI, type MobXAdapterOptions, type MobXReactionDisposer, type ReduxAdapterAPI, type ReduxAdapterOptions, type ReduxStore, type ThemeAPI, type ThemeConfig, type ZustandAdapterAPI, type ZustandAdapterOptions, type ZustandStore, antdAdapter, chakraAdapter, componentAdapter, createTheme, materialAdapter, mobXAdapter, reduxAdapter, zustandAdapter };
|
|
@@ -0,0 +1,247 @@
|
|
|
1
|
+
import { T as TagProps } from './tagFactory-DeAXq9ef.js';
|
|
2
|
+
|
|
3
|
+
interface PluginContext {
|
|
4
|
+
/** Register a global hook */
|
|
5
|
+
onInit: (callback: () => void) => void;
|
|
6
|
+
onMount: (callback: (element: HTMLElement) => void) => void;
|
|
7
|
+
onUnmount: (callback: (element: HTMLElement) => void) => void;
|
|
8
|
+
onError: (callback: (error: Error) => void) => void;
|
|
9
|
+
/** Provide a value globally */
|
|
10
|
+
provide: (key: string, value: unknown) => void;
|
|
11
|
+
}
|
|
12
|
+
interface SibuPlugin {
|
|
13
|
+
name: string;
|
|
14
|
+
install: (ctx: PluginContext, options?: unknown) => void;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
/** MobX autorun disposer function type. */
|
|
18
|
+
type MobXReactionDisposer = () => void;
|
|
19
|
+
interface MobXAdapterOptions {
|
|
20
|
+
/** MobX's autorun function — passed to avoid importing MobX directly. */
|
|
21
|
+
autorun: (view: () => void) => MobXReactionDisposer;
|
|
22
|
+
}
|
|
23
|
+
interface MobXAdapterAPI {
|
|
24
|
+
/**
|
|
25
|
+
* Bridge a MobX observable into a SibuJS reactive getter.
|
|
26
|
+
*
|
|
27
|
+
* Takes a MobX expression (function reading MobX observables)
|
|
28
|
+
* and returns a SibuJS getter that updates when the observables change.
|
|
29
|
+
*/
|
|
30
|
+
fromMobX: <T>(expression: () => T) => () => T;
|
|
31
|
+
/**
|
|
32
|
+
* Bridge a SibuJS getter into a MobX reaction.
|
|
33
|
+
*
|
|
34
|
+
* Runs a callback whenever a SibuJS signal changes.
|
|
35
|
+
*/
|
|
36
|
+
toMobX: (sibuGetter: () => unknown, callback: (value: unknown) => void) => () => void;
|
|
37
|
+
/** Dispose all active bridges. */
|
|
38
|
+
destroy: () => void;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Creates a MobX adapter plugin for SibuJS.
|
|
42
|
+
*
|
|
43
|
+
* Unlike Redux/Zustand, MobX has distributed observables rather than
|
|
44
|
+
* a single store. The adapter provides `fromMobX()` to bridge any
|
|
45
|
+
* MobX expression into a SibuJS reactive getter.
|
|
46
|
+
*
|
|
47
|
+
* @example
|
|
48
|
+
* ```ts
|
|
49
|
+
* import { mobXAdapter } from "sibu/extras";
|
|
50
|
+
* import { autorun, makeAutoObservable } from "mobx";
|
|
51
|
+
*
|
|
52
|
+
* class TodoStore {
|
|
53
|
+
* todos: string[] = [];
|
|
54
|
+
* constructor() { makeAutoObservable(this); }
|
|
55
|
+
* addTodo(t: string) { this.todos.push(t); }
|
|
56
|
+
* }
|
|
57
|
+
*
|
|
58
|
+
* const todoStore = new TodoStore();
|
|
59
|
+
* const plugin = mobXAdapter({ autorun });
|
|
60
|
+
* plugin(plugin);
|
|
61
|
+
*
|
|
62
|
+
* const mobx = inject<MobXAdapterAPI>("mobx");
|
|
63
|
+
* const todoCount = mobx.fromMobX(() => todoStore.todos.length);
|
|
64
|
+
* div({ nodes: () => `Todos: ${todoCount()}` });
|
|
65
|
+
* ```
|
|
66
|
+
*/
|
|
67
|
+
declare function mobXAdapter(options: MobXAdapterOptions): SibuPlugin;
|
|
68
|
+
|
|
69
|
+
/** Minimal Redux store interface (peer dependency — no import from redux). */
|
|
70
|
+
interface ReduxStore<S = unknown> {
|
|
71
|
+
getState(): S;
|
|
72
|
+
dispatch(action: unknown): unknown;
|
|
73
|
+
subscribe(listener: () => void): () => void;
|
|
74
|
+
}
|
|
75
|
+
interface ReduxAdapterOptions<S = unknown> {
|
|
76
|
+
store: ReduxStore<S>;
|
|
77
|
+
}
|
|
78
|
+
interface ReduxAdapterAPI<S = unknown> {
|
|
79
|
+
/** Full store state as a SibuJS reactive getter */
|
|
80
|
+
getState: () => S;
|
|
81
|
+
/** Create a SibuJS reactive getter from a Redux selector */
|
|
82
|
+
useSelector: <R>(selector: (state: S) => R) => () => R;
|
|
83
|
+
/** Dispatch an action to the Redux store */
|
|
84
|
+
dispatch: ReduxStore<S>["dispatch"];
|
|
85
|
+
/** Unsubscribe from the Redux store */
|
|
86
|
+
destroy: () => void;
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Creates a Redux adapter plugin for SibuJS.
|
|
90
|
+
*
|
|
91
|
+
* Bridges Redux store subscriptions into SibuJS signal-based reactivity.
|
|
92
|
+
* Each selector becomes a reactive getter that auto-updates when Redux
|
|
93
|
+
* state changes.
|
|
94
|
+
*
|
|
95
|
+
* @example
|
|
96
|
+
* ```ts
|
|
97
|
+
* import { reduxAdapter } from "sibu/extras";
|
|
98
|
+
* import { createStore } from "redux";
|
|
99
|
+
*
|
|
100
|
+
* const reduxStore = createStore(rootReducer);
|
|
101
|
+
* const reduxPlugin = reduxAdapter({ store: reduxStore });
|
|
102
|
+
* plugin(reduxPlugin);
|
|
103
|
+
*
|
|
104
|
+
* const redux = inject<ReduxAdapterAPI>("redux");
|
|
105
|
+
* const count = redux.useSelector(s => s.counter);
|
|
106
|
+
* div({ nodes: () => `Count: ${count()}` });
|
|
107
|
+
* ```
|
|
108
|
+
*/
|
|
109
|
+
declare function reduxAdapter<S>(options: ReduxAdapterOptions<S>): SibuPlugin;
|
|
110
|
+
|
|
111
|
+
/** Minimal Zustand store interface (peer dependency). */
|
|
112
|
+
interface ZustandStore<S> {
|
|
113
|
+
getState(): S;
|
|
114
|
+
setState(partial: Partial<S> | ((state: S) => Partial<S>), replace?: boolean): void;
|
|
115
|
+
subscribe(listener: (state: S, prevState: S) => void): () => void;
|
|
116
|
+
destroy(): void;
|
|
117
|
+
}
|
|
118
|
+
interface ZustandAdapterOptions<S> {
|
|
119
|
+
store: ZustandStore<S>;
|
|
120
|
+
}
|
|
121
|
+
interface ZustandAdapterAPI<S> {
|
|
122
|
+
/** Full Zustand state as a SibuJS reactive getter */
|
|
123
|
+
getState: () => S;
|
|
124
|
+
/** Create a SibuJS reactive getter from a Zustand selector */
|
|
125
|
+
useSelector: <R>(selector: (state: S) => R) => () => R;
|
|
126
|
+
/** Set state on the Zustand store */
|
|
127
|
+
setState: ZustandStore<S>["setState"];
|
|
128
|
+
/** Destroy the subscription and the Zustand store */
|
|
129
|
+
destroy: () => void;
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Creates a Zustand adapter plugin for SibuJS.
|
|
133
|
+
*
|
|
134
|
+
* @example
|
|
135
|
+
* ```ts
|
|
136
|
+
* import { zustandAdapter } from "sibu/extras";
|
|
137
|
+
* import { createStore } from "zustand/vanilla";
|
|
138
|
+
*
|
|
139
|
+
* const bearStore = createStore((set) => ({
|
|
140
|
+
* bears: 0,
|
|
141
|
+
* increase: () => set((s) => ({ bears: s.bears + 1 })),
|
|
142
|
+
* }));
|
|
143
|
+
*
|
|
144
|
+
* const plugin = zustandAdapter({ store: bearStore });
|
|
145
|
+
* plugin(plugin);
|
|
146
|
+
*
|
|
147
|
+
* const zs = inject<ZustandAdapterAPI>("zustand");
|
|
148
|
+
* const bears = zs.useSelector(s => s.bears);
|
|
149
|
+
* div({ nodes: () => `Bears: ${bears()}` });
|
|
150
|
+
* ```
|
|
151
|
+
*/
|
|
152
|
+
declare function zustandAdapter<S>(options: ZustandAdapterOptions<S>): SibuPlugin;
|
|
153
|
+
|
|
154
|
+
interface ThemeConfig {
|
|
155
|
+
/** CSS class prefix for the design system (e.g., "mdc", "ant", "chakra") */
|
|
156
|
+
prefix: string;
|
|
157
|
+
/** CSS variables to inject as custom properties */
|
|
158
|
+
variables?: Record<string, string>;
|
|
159
|
+
/** Overrides for default class mappings */
|
|
160
|
+
classOverrides?: Record<string, string>;
|
|
161
|
+
}
|
|
162
|
+
interface ThemeAPI {
|
|
163
|
+
/** Get the current theme config reactively */
|
|
164
|
+
config: () => ThemeConfig;
|
|
165
|
+
/** Update the theme */
|
|
166
|
+
setTheme: (config: Partial<ThemeConfig>) => void;
|
|
167
|
+
/** Resolve a component class name using prefix and overrides */
|
|
168
|
+
resolveClass: (component: string, variant?: string) => string;
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Creates a reactive theme for a UI component library adapter.
|
|
172
|
+
*/
|
|
173
|
+
declare function createTheme(initial: ThemeConfig): ThemeAPI;
|
|
174
|
+
interface ComponentMapping {
|
|
175
|
+
/** HTML tag to use (default: "div") */
|
|
176
|
+
tag?: string;
|
|
177
|
+
/** Base CSS class for this component */
|
|
178
|
+
baseClass: string;
|
|
179
|
+
/** Variant-to-class mapping */
|
|
180
|
+
variants?: Record<string, string>;
|
|
181
|
+
/** Size-to-class mapping */
|
|
182
|
+
sizes?: Record<string, string>;
|
|
183
|
+
/** Additional default props */
|
|
184
|
+
defaultProps?: Partial<TagProps>;
|
|
185
|
+
}
|
|
186
|
+
interface AdapterConfig {
|
|
187
|
+
/** Name of the CSS framework */
|
|
188
|
+
name: string;
|
|
189
|
+
/** CSS class prefix */
|
|
190
|
+
prefix: string;
|
|
191
|
+
/** Component mappings */
|
|
192
|
+
components: Record<string, ComponentMapping>;
|
|
193
|
+
}
|
|
194
|
+
interface AdaptedComponentProps extends TagProps {
|
|
195
|
+
/** Component variant (e.g., "primary", "outlined") */
|
|
196
|
+
variant?: string;
|
|
197
|
+
/** Component size (e.g., "sm", "md", "lg") */
|
|
198
|
+
size?: string;
|
|
199
|
+
}
|
|
200
|
+
type AdaptedComponent = (props?: AdaptedComponentProps) => Element;
|
|
201
|
+
/**
|
|
202
|
+
* Creates a set of SibuJS components from a CSS framework's class mappings.
|
|
203
|
+
*
|
|
204
|
+
* @example
|
|
205
|
+
* ```ts
|
|
206
|
+
* const adapter = componentAdapter({
|
|
207
|
+
* name: "material",
|
|
208
|
+
* prefix: "mdc",
|
|
209
|
+
* components: {
|
|
210
|
+
* Button: {
|
|
211
|
+
* tag: "button",
|
|
212
|
+
* baseClass: "mdc-button",
|
|
213
|
+
* variants: { raised: "mdc-button--raised" },
|
|
214
|
+
* sizes: { sm: "mdc-button--dense" },
|
|
215
|
+
* },
|
|
216
|
+
* },
|
|
217
|
+
* });
|
|
218
|
+
*
|
|
219
|
+
* const { Button } = adapter.components;
|
|
220
|
+
* Button({ variant: "raised", nodes: "Click me" });
|
|
221
|
+
* ```
|
|
222
|
+
*/
|
|
223
|
+
declare function componentAdapter(config: AdapterConfig): {
|
|
224
|
+
name: string;
|
|
225
|
+
components: Record<string, AdaptedComponent>;
|
|
226
|
+
theme: ThemeAPI;
|
|
227
|
+
};
|
|
228
|
+
|
|
229
|
+
declare const antdAdapter: {
|
|
230
|
+
name: string;
|
|
231
|
+
components: Record<string, AdaptedComponent>;
|
|
232
|
+
theme: ThemeAPI;
|
|
233
|
+
};
|
|
234
|
+
|
|
235
|
+
declare const chakraAdapter: {
|
|
236
|
+
name: string;
|
|
237
|
+
components: Record<string, AdaptedComponent>;
|
|
238
|
+
theme: ThemeAPI;
|
|
239
|
+
};
|
|
240
|
+
|
|
241
|
+
declare const materialAdapter: {
|
|
242
|
+
name: string;
|
|
243
|
+
components: Record<string, AdaptedComponent>;
|
|
244
|
+
theme: ThemeAPI;
|
|
245
|
+
};
|
|
246
|
+
|
|
247
|
+
export { type AdaptedComponent, type AdaptedComponentProps, type AdapterConfig, type ComponentMapping, type MobXAdapterAPI, type MobXAdapterOptions, type MobXReactionDisposer, type ReduxAdapterAPI, type ReduxAdapterOptions, type ReduxStore, type ThemeAPI, type ThemeConfig, type ZustandAdapterAPI, type ZustandAdapterOptions, type ZustandStore, antdAdapter, chakraAdapter, componentAdapter, createTheme, materialAdapter, mobXAdapter, reduxAdapter, zustandAdapter };
|