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,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 };
|
package/dist/patterns.js
ADDED
|
@@ -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
|
+
};
|