sibujs 1.4.0 → 2.0.0
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/README.md +105 -119
- package/dist/browser.cjs +288 -80
- package/dist/browser.d.cts +19 -9
- package/dist/browser.d.ts +19 -9
- package/dist/browser.js +6 -6
- package/dist/build.cjs +1019 -313
- package/dist/build.d.cts +1 -1
- package/dist/build.d.ts +1 -1
- package/dist/build.js +15 -13
- package/dist/cdn.global.js +17 -16
- package/dist/chunk-2RA7SHDA.js +65 -0
- package/dist/chunk-2UPRY23K.js +80 -0
- package/dist/chunk-3JHCYHWN.js +125 -0
- package/dist/{chunk-ZWKZCBO6.js → chunk-3LR7GLWQ.js} +154 -33
- package/dist/{chunk-3AIRKM3B.js → chunk-3NSGB5JN.js} +115 -34
- package/dist/{chunk-3ARAQO7B.js → chunk-52YJLLRO.js} +29 -6
- package/dist/chunk-54EDRCEF.js +93 -0
- package/dist/chunk-7JDB7I65.js +1327 -0
- package/dist/{chunk-WZSPOOER.js → chunk-CC65Y57T.js} +8 -5
- package/dist/{chunk-23VV7YD3.js → chunk-DFPFITST.js} +25 -30
- package/dist/{chunk-WR5D4EGH.js → chunk-GTBNNBJ6.js} +14 -2
- package/dist/chunk-HB24TBAF.js +121 -0
- package/dist/{chunk-CZUGLNJS.js → chunk-ITX6OO3F.js} +3 -3
- package/dist/{chunk-JAKHTMQU.js → chunk-JA6667UN.js} +206 -46
- package/dist/{chunk-77L6NL3X.js → chunk-JXMMDLBY.js} +306 -183
- package/dist/{chunk-3X2YG6YM.js → chunk-JYD2PWXH.js} +59 -28
- package/dist/{chunk-F3FA4F32.js → chunk-KLRMB5ZS.js} +135 -79
- package/dist/{chunk-5X6PP2UK.js → chunk-LMLD24FC.js} +2 -2
- package/dist/{chunk-M4NLBH4I.js → chunk-LYTCUZ7H.js} +3 -2
- package/dist/{chunk-TSOKIX5Z.js → chunk-MIUAXB7K.js} +126 -74
- package/dist/{chunk-QWZG56ET.js → chunk-ND2664SF.js} +558 -190
- package/dist/{chunk-JCI5M6U6.js → chunk-O2MNQFLP.js} +261 -79
- package/dist/{chunk-EWFVA3TJ.js → chunk-R73P76YZ.js} +1 -1
- package/dist/{chunk-2BYQDGN3.js → chunk-SAHNHTFC.js} +234 -63
- package/dist/chunk-UCS6AMJ7.js +79 -0
- package/dist/{chunk-ZD6OAMTH.js → chunk-VLPPXTYG.js} +90 -35
- package/dist/{chunk-OUZZEE4S.js → chunk-WOMYAHHI.js} +17 -11
- package/dist/{contracts-xo5ckdRP.d.cts → contracts-ey_Qh8ef.d.cts} +7 -8
- package/dist/{contracts-xo5ckdRP.d.ts → contracts-ey_Qh8ef.d.ts} +7 -8
- package/dist/{customElement-D2DJp_xn.d.cts → customElement-CPfIrbvg.d.cts} +18 -9
- package/dist/{customElement-D2DJp_xn.d.ts → customElement-CPfIrbvg.d.ts} +18 -9
- package/dist/data.cjs +452 -100
- package/dist/data.d.cts +20 -2
- package/dist/data.d.ts +20 -2
- package/dist/data.js +11 -9
- package/dist/devtools.cjs +535 -247
- package/dist/devtools.d.cts +1 -1
- package/dist/devtools.d.ts +1 -1
- package/dist/devtools.js +34 -30
- package/dist/ecosystem.cjs +499 -143
- package/dist/ecosystem.d.cts +13 -11
- package/dist/ecosystem.d.ts +13 -11
- package/dist/ecosystem.js +12 -11
- package/dist/extras.cjs +3639 -1629
- package/dist/extras.d.cts +11 -11
- package/dist/extras.d.ts +11 -11
- package/dist/extras.js +58 -45
- package/dist/index.cjs +1023 -313
- package/dist/index.d.cts +128 -55
- package/dist/index.d.ts +128 -55
- package/dist/index.js +28 -16
- package/dist/{introspect-BumjnBKr.d.cts → introspect-BWNjNw64.d.cts} +22 -2
- package/dist/{introspect-CZrlcaYy.d.ts → introspect-cY2pg9pW.d.ts} +22 -2
- package/dist/motion.cjs +90 -36
- package/dist/motion.d.cts +1 -1
- package/dist/motion.d.ts +1 -1
- package/dist/motion.js +4 -4
- package/dist/patterns.cjs +414 -81
- package/dist/patterns.d.cts +53 -20
- package/dist/patterns.d.ts +53 -20
- package/dist/patterns.js +7 -7
- package/dist/performance.cjs +364 -108
- package/dist/performance.d.cts +29 -17
- package/dist/performance.d.ts +29 -17
- package/dist/performance.js +13 -6
- package/dist/plugin-D30wlGW5.d.cts +71 -0
- package/dist/plugin-D30wlGW5.d.ts +71 -0
- package/dist/plugins.cjs +652 -271
- package/dist/plugins.d.cts +13 -6
- package/dist/plugins.d.ts +13 -6
- package/dist/plugins.js +116 -50
- package/dist/{ssr-Do_SiVoL.d.cts → ssr-CrVNy6Pa.d.cts} +9 -15
- package/dist/{ssr-Do_SiVoL.d.ts → ssr-CrVNy6Pa.d.ts} +9 -15
- package/dist/{ssr-4PBXAOO3.js → ssr-FXD2PPMC.js} +4 -3
- package/dist/ssr.cjs +648 -219
- package/dist/ssr.d.cts +27 -7
- package/dist/ssr.d.ts +27 -7
- package/dist/ssr.js +12 -11
- package/dist/{tagFactory-DaJ0YWX6.d.ts → tagFactory-S17H2qxu.d.cts} +9 -1
- package/dist/{tagFactory-DaJ0YWX6.d.cts → tagFactory-S17H2qxu.d.ts} +9 -1
- package/dist/testing.cjs +252 -63
- package/dist/testing.d.cts +17 -4
- package/dist/testing.d.ts +17 -4
- package/dist/testing.js +100 -44
- package/dist/ui.cjs +576 -168
- package/dist/ui.d.cts +13 -16
- package/dist/ui.d.ts +13 -16
- package/dist/ui.js +20 -17
- package/dist/widgets.cjs +1001 -93
- package/dist/widgets.d.cts +104 -2
- package/dist/widgets.d.ts +104 -2
- package/dist/widgets.js +9 -7
- package/package.json +8 -2
- package/dist/chunk-32DY64NT.js +0 -282
- package/dist/chunk-3CRQALYP.js +0 -877
- package/dist/chunk-4EI4AG32.js +0 -482
- package/dist/chunk-4MYMUBRS.js +0 -21
- package/dist/chunk-6HLLIF3K.js +0 -398
- package/dist/chunk-6LSNVCS2.js +0 -937
- package/dist/chunk-6SA3QQES.js +0 -61
- package/dist/chunk-7BF6TK55.js +0 -1097
- package/dist/chunk-7TQKR4PP.js +0 -294
- package/dist/chunk-7V26P53V.js +0 -712
- package/dist/chunk-AZ3ISID5.js +0 -298
- package/dist/chunk-B7SWRFUT.js +0 -332
- package/dist/chunk-BGN5ZMP4.js +0 -26
- package/dist/chunk-BTU3TJDS.js +0 -365
- package/dist/chunk-BW3WT46K.js +0 -937
- package/dist/chunk-C6KFWOFV.js +0 -616
- package/dist/chunk-CHF5OHIA.js +0 -61
- package/dist/chunk-CHJ27IGK.js +0 -26
- package/dist/chunk-CMBFNA7L.js +0 -27
- package/dist/chunk-DAHRH4ON.js +0 -331
- package/dist/chunk-DKOHBI74.js +0 -924
- package/dist/chunk-DTCOOBMX.js +0 -725
- package/dist/chunk-EBGIRKQY.js +0 -616
- package/dist/chunk-EUZND3CB.js +0 -27
- package/dist/chunk-EVCZO745.js +0 -365
- package/dist/chunk-FGOEVHY3.js +0 -60
- package/dist/chunk-G3BOQPVO.js +0 -365
- package/dist/chunk-GCOK2LC3.js +0 -282
- package/dist/chunk-HGMJFBC7.js +0 -654
- package/dist/chunk-K5ZUMYVS.js +0 -89
- package/dist/chunk-KQPDEVVS.js +0 -398
- package/dist/chunk-L6JRBDNS.js +0 -60
- package/dist/chunk-LA6KQEDU.js +0 -712
- package/dist/chunk-MDVXJWFN.js +0 -304
- package/dist/chunk-MEZVEBPN.js +0 -2008
- package/dist/chunk-MK4ERFYL.js +0 -2249
- package/dist/chunk-MLKGABMK.js +0 -9
- package/dist/chunk-MQ5GOYPH.js +0 -2249
- package/dist/chunk-N6IZB6KJ.js +0 -567
- package/dist/chunk-NEKUBFPT.js +0 -60
- package/dist/chunk-NHUC2QWH.js +0 -282
- package/dist/chunk-NMRUZALC.js +0 -1097
- package/dist/chunk-NYVAC6P5.js +0 -37
- package/dist/chunk-OF7UZIVB.js +0 -725
- package/dist/chunk-P6W3STU4.js +0 -2249
- package/dist/chunk-PBHF5WKN.js +0 -616
- package/dist/chunk-PTQJDMRT.js +0 -146
- package/dist/chunk-PZEGYCF5.js +0 -61
- package/dist/chunk-QBMDLBU2.js +0 -975
- package/dist/chunk-RQGQSLQK.js +0 -725
- package/dist/chunk-SDLZDHKP.js +0 -107
- package/dist/chunk-TNQWPPE6.js +0 -37
- package/dist/chunk-UHNL42EF.js +0 -2730
- package/dist/chunk-UNXCEF6S.js +0 -21
- package/dist/chunk-V2XTI523.js +0 -347
- package/dist/chunk-VAU366PN.js +0 -2241
- package/dist/chunk-VMVDTCXB.js +0 -712
- package/dist/chunk-VRW3FULF.js +0 -725
- package/dist/chunk-WADYRCO2.js +0 -304
- package/dist/chunk-WILQZRO4.js +0 -282
- package/dist/chunk-WUHJISPP.js +0 -298
- package/dist/chunk-XYU6TZOW.js +0 -182
- package/dist/chunk-Y6GP4QGG.js +0 -276
- package/dist/chunk-YECR7UIA.js +0 -347
- package/dist/chunk-YUTWTI4B.js +0 -654
- package/dist/chunk-Z65KYU7I.js +0 -26
- package/dist/chunk-Z6POF5YC.js +0 -975
- package/dist/chunk-ZBJP6WFL.js +0 -482
- package/dist/contracts-DDrwxvJ-.d.cts +0 -245
- package/dist/contracts-DDrwxvJ-.d.ts +0 -245
- package/dist/contracts-DOrhwbke.d.cts +0 -245
- package/dist/contracts-DOrhwbke.d.ts +0 -245
- package/dist/customElement-BKQfbSZQ.d.cts +0 -262
- package/dist/customElement-BKQfbSZQ.d.ts +0 -262
- package/dist/customElement-yz8uyk-0.d.cts +0 -308
- package/dist/customElement-yz8uyk-0.d.ts +0 -308
- package/dist/introspect-Cb0zgpi2.d.cts +0 -477
- package/dist/introspect-Y2xNXGSf.d.ts +0 -477
- package/dist/plugin-Bek4RhJY.d.cts +0 -43
- package/dist/plugin-Bek4RhJY.d.ts +0 -43
- package/dist/ssr-3RXHP5ES.js +0 -38
- package/dist/ssr-6GIMY5MX.js +0 -38
- package/dist/ssr-BA6sxxUd.d.cts +0 -135
- package/dist/ssr-BA6sxxUd.d.ts +0 -135
- package/dist/ssr-WKUPVSSK.js +0 -36
- package/dist/tagFactory-Dl8QCLga.d.cts +0 -23
- package/dist/tagFactory-Dl8QCLga.d.ts +0 -23
package/dist/patterns.d.cts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { C as ComponentProps, P as PropDef, a as PropSchema, R as RenderProp, V as Validator, b as assertType, c as compose, d as createGuard, e as createSlots, f as defineComponent, g as defineSlottedComponent, h as defineStrictComponent, v as validateProps, i as validators, w as withBoundary, j as withDefaults, k as withProps, l as withWrapper } from './contracts-
|
|
1
|
+
export { C as ComponentProps, P as PropDef, a as PropSchema, R as RenderProp, V as Validator, b as assertType, c as compose, d as createGuard, e as createSlots, f as defineComponent, g as defineSlottedComponent, h as defineStrictComponent, v as validateProps, i as validators, w as withBoundary, j as withDefaults, k as withProps, l as withWrapper } from './contracts-ey_Qh8ef.cjs';
|
|
2
2
|
|
|
3
3
|
interface MachineConfig<S extends string, E extends string, C extends Record<string, unknown> = Record<string, unknown>> {
|
|
4
4
|
initial: S;
|
|
@@ -71,48 +71,81 @@ interface PersistOptions<T = unknown> {
|
|
|
71
71
|
* - use XOR with a static key — trivially reversible
|
|
72
72
|
* - roll your own cipher — nearly always broken
|
|
73
73
|
*
|
|
74
|
+
* **Sync only:** because `persisted()` exposes synchronous getters and
|
|
75
|
+
* setters, both `encrypt` and `decrypt` must be SYNCHRONOUS. Async
|
|
76
|
+
* crypto (e.g. `crypto.subtle.encrypt`) is NOT supported here — derive
|
|
77
|
+
* keys ahead of time and use a sync wrapper, or pre/post-process the
|
|
78
|
+
* value yourself before/after `setValue`.
|
|
79
|
+
*
|
|
74
80
|
* @example
|
|
75
81
|
* ```ts
|
|
82
|
+
* // Pre-derived key + sync wrapper
|
|
76
83
|
* persisted("token", "", {
|
|
77
|
-
* encrypt:
|
|
78
|
-
* decrypt:
|
|
84
|
+
* encrypt: (v) => syncAesGcmEncrypt(v, derivedKey),
|
|
85
|
+
* decrypt: (v) => syncAesGcmDecrypt(v, derivedKey),
|
|
79
86
|
* });
|
|
80
87
|
* ```
|
|
81
|
-
*
|
|
82
|
-
* Note that because localStorage is synchronous, any real AES-GCM
|
|
83
|
-
* flow needs pre-derived keys and is inherently best-effort.
|
|
84
88
|
*/
|
|
85
89
|
encrypt?: (value: string) => string;
|
|
86
|
-
/** Decrypt the stored value before deserialization. Required if `encrypt` is set.
|
|
90
|
+
/** Decrypt the stored value before deserialization. Required if `encrypt` is set.
|
|
91
|
+
* Must be synchronous — see `encrypt` docs. */
|
|
87
92
|
decrypt?: (value: string) => string;
|
|
88
93
|
}
|
|
89
94
|
declare function persisted<T>(key: string, initial: T, options?: PersistOptions<T>): [() => T, (next: T | ((prev: T) => T)) => void];
|
|
90
95
|
|
|
91
|
-
interface OptimisticAction<T> {
|
|
92
|
-
optimisticValue: T;
|
|
93
|
-
revert: T;
|
|
94
|
-
}
|
|
95
96
|
/**
|
|
96
97
|
* optimistic provides optimistic UI updates that can be reverted on failure.
|
|
97
98
|
* The value updates immediately, then reverts if the async operation fails.
|
|
98
99
|
*
|
|
99
|
-
*
|
|
100
|
-
*
|
|
101
|
-
*
|
|
100
|
+
* Returns a named object with `value`, `pending`, and `update`.
|
|
101
|
+
*
|
|
102
|
+
* Concurrent safety: each operation is tagged with a version counter.
|
|
103
|
+
* A failing operation only reverts if no newer operation has started since,
|
|
104
|
+
* preventing stale snapshots from overwriting fresher optimistic state.
|
|
105
|
+
*
|
|
106
|
+
* @example
|
|
107
|
+
* ```ts
|
|
108
|
+
* const likes = optimistic(42);
|
|
109
|
+
*
|
|
110
|
+
* button(
|
|
111
|
+
* { on: { click: () => likes.update(likes.value() + 1, () => api.like()) } },
|
|
112
|
+
* () => `${likes.value()} ${likes.pending() ? "(saving…)" : ""}`,
|
|
113
|
+
* );
|
|
114
|
+
* ```
|
|
102
115
|
*/
|
|
103
|
-
declare function optimistic<T>(initialValue: T):
|
|
116
|
+
declare function optimistic<T>(initialValue: T): {
|
|
117
|
+
value: () => T;
|
|
118
|
+
pending: () => boolean;
|
|
119
|
+
update: (optimisticValue: T, asyncAction: () => Promise<T>) => Promise<void>;
|
|
120
|
+
};
|
|
104
121
|
/**
|
|
105
122
|
* optimisticList provides optimistic updates for array state.
|
|
106
123
|
*
|
|
107
124
|
* Uses functional updates (setItems(current => ...)) for the success path
|
|
108
125
|
* to avoid losing changes made by concurrent operations. The failure path
|
|
109
|
-
*
|
|
126
|
+
* uses a version guard so stale reverts don't overwrite newer state.
|
|
127
|
+
*
|
|
128
|
+
* @example
|
|
129
|
+
* ```ts
|
|
130
|
+
* const todos = optimisticList<Todo>([]);
|
|
131
|
+
*
|
|
132
|
+
* todos.add(
|
|
133
|
+
* { id: tempId(), text: "New" },
|
|
134
|
+
* async () => api.createTodo("New"),
|
|
135
|
+
* );
|
|
136
|
+
*
|
|
137
|
+
* div([
|
|
138
|
+
* () => todos.pending() ? span("Saving…") : null,
|
|
139
|
+
* each(() => todos.items(), (t) => div(t().text), { key: (t) => t.id }),
|
|
140
|
+
* ]);
|
|
141
|
+
* ```
|
|
110
142
|
*/
|
|
111
143
|
declare function optimisticList<T>(initialValue: T[]): {
|
|
112
144
|
items: () => T[];
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
145
|
+
pending: () => boolean;
|
|
146
|
+
add: (item: T, asyncAction: () => Promise<T>) => Promise<void>;
|
|
147
|
+
remove: (predicate: (item: T) => boolean, asyncAction: () => Promise<void>) => Promise<void>;
|
|
148
|
+
update: (predicate: (item: T) => boolean, patch: Partial<T>, asyncAction: () => Promise<T>) => Promise<void>;
|
|
116
149
|
};
|
|
117
150
|
|
|
118
151
|
interface TimeTravelReturn<T> {
|
|
@@ -151,4 +184,4 @@ declare function globalStore<S extends Record<string, unknown>, A extends Record
|
|
|
151
184
|
middleware?: Middleware<S>[];
|
|
152
185
|
}): GlobalStore<S, A>;
|
|
153
186
|
|
|
154
|
-
export { type GlobalStore, type MachineConfig, type MachineReturn, type Middleware, type
|
|
187
|
+
export { type GlobalStore, type MachineConfig, type MachineReturn, type Middleware, type PersistOptions, type Selector, type TimeTravelReturn, globalStore, machine, optimistic, optimisticList, persisted, timeline };
|
package/dist/patterns.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { C as ComponentProps, P as PropDef, a as PropSchema, R as RenderProp, V as Validator, b as assertType, c as compose, d as createGuard, e as createSlots, f as defineComponent, g as defineSlottedComponent, h as defineStrictComponent, v as validateProps, i as validators, w as withBoundary, j as withDefaults, k as withProps, l as withWrapper } from './contracts-
|
|
1
|
+
export { C as ComponentProps, P as PropDef, a as PropSchema, R as RenderProp, V as Validator, b as assertType, c as compose, d as createGuard, e as createSlots, f as defineComponent, g as defineSlottedComponent, h as defineStrictComponent, v as validateProps, i as validators, w as withBoundary, j as withDefaults, k as withProps, l as withWrapper } from './contracts-ey_Qh8ef.js';
|
|
2
2
|
|
|
3
3
|
interface MachineConfig<S extends string, E extends string, C extends Record<string, unknown> = Record<string, unknown>> {
|
|
4
4
|
initial: S;
|
|
@@ -71,48 +71,81 @@ interface PersistOptions<T = unknown> {
|
|
|
71
71
|
* - use XOR with a static key — trivially reversible
|
|
72
72
|
* - roll your own cipher — nearly always broken
|
|
73
73
|
*
|
|
74
|
+
* **Sync only:** because `persisted()` exposes synchronous getters and
|
|
75
|
+
* setters, both `encrypt` and `decrypt` must be SYNCHRONOUS. Async
|
|
76
|
+
* crypto (e.g. `crypto.subtle.encrypt`) is NOT supported here — derive
|
|
77
|
+
* keys ahead of time and use a sync wrapper, or pre/post-process the
|
|
78
|
+
* value yourself before/after `setValue`.
|
|
79
|
+
*
|
|
74
80
|
* @example
|
|
75
81
|
* ```ts
|
|
82
|
+
* // Pre-derived key + sync wrapper
|
|
76
83
|
* persisted("token", "", {
|
|
77
|
-
* encrypt:
|
|
78
|
-
* decrypt:
|
|
84
|
+
* encrypt: (v) => syncAesGcmEncrypt(v, derivedKey),
|
|
85
|
+
* decrypt: (v) => syncAesGcmDecrypt(v, derivedKey),
|
|
79
86
|
* });
|
|
80
87
|
* ```
|
|
81
|
-
*
|
|
82
|
-
* Note that because localStorage is synchronous, any real AES-GCM
|
|
83
|
-
* flow needs pre-derived keys and is inherently best-effort.
|
|
84
88
|
*/
|
|
85
89
|
encrypt?: (value: string) => string;
|
|
86
|
-
/** Decrypt the stored value before deserialization. Required if `encrypt` is set.
|
|
90
|
+
/** Decrypt the stored value before deserialization. Required if `encrypt` is set.
|
|
91
|
+
* Must be synchronous — see `encrypt` docs. */
|
|
87
92
|
decrypt?: (value: string) => string;
|
|
88
93
|
}
|
|
89
94
|
declare function persisted<T>(key: string, initial: T, options?: PersistOptions<T>): [() => T, (next: T | ((prev: T) => T)) => void];
|
|
90
95
|
|
|
91
|
-
interface OptimisticAction<T> {
|
|
92
|
-
optimisticValue: T;
|
|
93
|
-
revert: T;
|
|
94
|
-
}
|
|
95
96
|
/**
|
|
96
97
|
* optimistic provides optimistic UI updates that can be reverted on failure.
|
|
97
98
|
* The value updates immediately, then reverts if the async operation fails.
|
|
98
99
|
*
|
|
99
|
-
*
|
|
100
|
-
*
|
|
101
|
-
*
|
|
100
|
+
* Returns a named object with `value`, `pending`, and `update`.
|
|
101
|
+
*
|
|
102
|
+
* Concurrent safety: each operation is tagged with a version counter.
|
|
103
|
+
* A failing operation only reverts if no newer operation has started since,
|
|
104
|
+
* preventing stale snapshots from overwriting fresher optimistic state.
|
|
105
|
+
*
|
|
106
|
+
* @example
|
|
107
|
+
* ```ts
|
|
108
|
+
* const likes = optimistic(42);
|
|
109
|
+
*
|
|
110
|
+
* button(
|
|
111
|
+
* { on: { click: () => likes.update(likes.value() + 1, () => api.like()) } },
|
|
112
|
+
* () => `${likes.value()} ${likes.pending() ? "(saving…)" : ""}`,
|
|
113
|
+
* );
|
|
114
|
+
* ```
|
|
102
115
|
*/
|
|
103
|
-
declare function optimistic<T>(initialValue: T):
|
|
116
|
+
declare function optimistic<T>(initialValue: T): {
|
|
117
|
+
value: () => T;
|
|
118
|
+
pending: () => boolean;
|
|
119
|
+
update: (optimisticValue: T, asyncAction: () => Promise<T>) => Promise<void>;
|
|
120
|
+
};
|
|
104
121
|
/**
|
|
105
122
|
* optimisticList provides optimistic updates for array state.
|
|
106
123
|
*
|
|
107
124
|
* Uses functional updates (setItems(current => ...)) for the success path
|
|
108
125
|
* to avoid losing changes made by concurrent operations. The failure path
|
|
109
|
-
*
|
|
126
|
+
* uses a version guard so stale reverts don't overwrite newer state.
|
|
127
|
+
*
|
|
128
|
+
* @example
|
|
129
|
+
* ```ts
|
|
130
|
+
* const todos = optimisticList<Todo>([]);
|
|
131
|
+
*
|
|
132
|
+
* todos.add(
|
|
133
|
+
* { id: tempId(), text: "New" },
|
|
134
|
+
* async () => api.createTodo("New"),
|
|
135
|
+
* );
|
|
136
|
+
*
|
|
137
|
+
* div([
|
|
138
|
+
* () => todos.pending() ? span("Saving…") : null,
|
|
139
|
+
* each(() => todos.items(), (t) => div(t().text), { key: (t) => t.id }),
|
|
140
|
+
* ]);
|
|
141
|
+
* ```
|
|
110
142
|
*/
|
|
111
143
|
declare function optimisticList<T>(initialValue: T[]): {
|
|
112
144
|
items: () => T[];
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
145
|
+
pending: () => boolean;
|
|
146
|
+
add: (item: T, asyncAction: () => Promise<T>) => Promise<void>;
|
|
147
|
+
remove: (predicate: (item: T) => boolean, asyncAction: () => Promise<void>) => Promise<void>;
|
|
148
|
+
update: (predicate: (item: T) => boolean, patch: Partial<T>, asyncAction: () => Promise<T>) => Promise<void>;
|
|
116
149
|
};
|
|
117
150
|
|
|
118
151
|
interface TimeTravelReturn<T> {
|
|
@@ -151,4 +184,4 @@ declare function globalStore<S extends Record<string, unknown>, A extends Record
|
|
|
151
184
|
middleware?: Middleware<S>[];
|
|
152
185
|
}): GlobalStore<S, A>;
|
|
153
186
|
|
|
154
|
-
export { type GlobalStore, type MachineConfig, type MachineReturn, type Middleware, type
|
|
187
|
+
export { type GlobalStore, type MachineConfig, type MachineReturn, type Middleware, type PersistOptions, type Selector, type TimeTravelReturn, globalStore, machine, optimistic, optimisticList, persisted, timeline };
|
package/dist/patterns.js
CHANGED
|
@@ -5,7 +5,7 @@ import {
|
|
|
5
5
|
optimisticList,
|
|
6
6
|
persisted,
|
|
7
7
|
timeline
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-3LR7GLWQ.js";
|
|
9
9
|
import {
|
|
10
10
|
RenderProp,
|
|
11
11
|
assertType,
|
|
@@ -22,12 +22,12 @@ import {
|
|
|
22
22
|
withProps,
|
|
23
23
|
withWrapper
|
|
24
24
|
} from "./chunk-CNZ35WI2.js";
|
|
25
|
-
import "./chunk-
|
|
26
|
-
import "./chunk-
|
|
27
|
-
import "./chunk-
|
|
28
|
-
import "./chunk-
|
|
29
|
-
import "./chunk-
|
|
30
|
-
import "./chunk-
|
|
25
|
+
import "./chunk-54EDRCEF.js";
|
|
26
|
+
import "./chunk-HB24TBAF.js";
|
|
27
|
+
import "./chunk-2RA7SHDA.js";
|
|
28
|
+
import "./chunk-CC65Y57T.js";
|
|
29
|
+
import "./chunk-VLPPXTYG.js";
|
|
30
|
+
import "./chunk-LMLD24FC.js";
|
|
31
31
|
export {
|
|
32
32
|
RenderProp,
|
|
33
33
|
assertType,
|