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.
Files changed (190) hide show
  1. package/README.md +105 -119
  2. package/dist/browser.cjs +288 -80
  3. package/dist/browser.d.cts +19 -9
  4. package/dist/browser.d.ts +19 -9
  5. package/dist/browser.js +6 -6
  6. package/dist/build.cjs +1019 -313
  7. package/dist/build.d.cts +1 -1
  8. package/dist/build.d.ts +1 -1
  9. package/dist/build.js +15 -13
  10. package/dist/cdn.global.js +17 -16
  11. package/dist/chunk-2RA7SHDA.js +65 -0
  12. package/dist/chunk-2UPRY23K.js +80 -0
  13. package/dist/chunk-3JHCYHWN.js +125 -0
  14. package/dist/{chunk-ZWKZCBO6.js → chunk-3LR7GLWQ.js} +154 -33
  15. package/dist/{chunk-3AIRKM3B.js → chunk-3NSGB5JN.js} +115 -34
  16. package/dist/{chunk-3ARAQO7B.js → chunk-52YJLLRO.js} +29 -6
  17. package/dist/chunk-54EDRCEF.js +93 -0
  18. package/dist/chunk-7JDB7I65.js +1327 -0
  19. package/dist/{chunk-WZSPOOER.js → chunk-CC65Y57T.js} +8 -5
  20. package/dist/{chunk-23VV7YD3.js → chunk-DFPFITST.js} +25 -30
  21. package/dist/{chunk-WR5D4EGH.js → chunk-GTBNNBJ6.js} +14 -2
  22. package/dist/chunk-HB24TBAF.js +121 -0
  23. package/dist/{chunk-CZUGLNJS.js → chunk-ITX6OO3F.js} +3 -3
  24. package/dist/{chunk-JAKHTMQU.js → chunk-JA6667UN.js} +206 -46
  25. package/dist/{chunk-77L6NL3X.js → chunk-JXMMDLBY.js} +306 -183
  26. package/dist/{chunk-3X2YG6YM.js → chunk-JYD2PWXH.js} +59 -28
  27. package/dist/{chunk-F3FA4F32.js → chunk-KLRMB5ZS.js} +135 -79
  28. package/dist/{chunk-5X6PP2UK.js → chunk-LMLD24FC.js} +2 -2
  29. package/dist/{chunk-M4NLBH4I.js → chunk-LYTCUZ7H.js} +3 -2
  30. package/dist/{chunk-TSOKIX5Z.js → chunk-MIUAXB7K.js} +126 -74
  31. package/dist/{chunk-QWZG56ET.js → chunk-ND2664SF.js} +558 -190
  32. package/dist/{chunk-JCI5M6U6.js → chunk-O2MNQFLP.js} +261 -79
  33. package/dist/{chunk-EWFVA3TJ.js → chunk-R73P76YZ.js} +1 -1
  34. package/dist/{chunk-2BYQDGN3.js → chunk-SAHNHTFC.js} +234 -63
  35. package/dist/chunk-UCS6AMJ7.js +79 -0
  36. package/dist/{chunk-ZD6OAMTH.js → chunk-VLPPXTYG.js} +90 -35
  37. package/dist/{chunk-OUZZEE4S.js → chunk-WOMYAHHI.js} +17 -11
  38. package/dist/{contracts-xo5ckdRP.d.cts → contracts-ey_Qh8ef.d.cts} +7 -8
  39. package/dist/{contracts-xo5ckdRP.d.ts → contracts-ey_Qh8ef.d.ts} +7 -8
  40. package/dist/{customElement-D2DJp_xn.d.cts → customElement-CPfIrbvg.d.cts} +18 -9
  41. package/dist/{customElement-D2DJp_xn.d.ts → customElement-CPfIrbvg.d.ts} +18 -9
  42. package/dist/data.cjs +452 -100
  43. package/dist/data.d.cts +20 -2
  44. package/dist/data.d.ts +20 -2
  45. package/dist/data.js +11 -9
  46. package/dist/devtools.cjs +535 -247
  47. package/dist/devtools.d.cts +1 -1
  48. package/dist/devtools.d.ts +1 -1
  49. package/dist/devtools.js +34 -30
  50. package/dist/ecosystem.cjs +499 -143
  51. package/dist/ecosystem.d.cts +13 -11
  52. package/dist/ecosystem.d.ts +13 -11
  53. package/dist/ecosystem.js +12 -11
  54. package/dist/extras.cjs +3639 -1629
  55. package/dist/extras.d.cts +11 -11
  56. package/dist/extras.d.ts +11 -11
  57. package/dist/extras.js +58 -45
  58. package/dist/index.cjs +1023 -313
  59. package/dist/index.d.cts +128 -55
  60. package/dist/index.d.ts +128 -55
  61. package/dist/index.js +28 -16
  62. package/dist/{introspect-BumjnBKr.d.cts → introspect-BWNjNw64.d.cts} +22 -2
  63. package/dist/{introspect-CZrlcaYy.d.ts → introspect-cY2pg9pW.d.ts} +22 -2
  64. package/dist/motion.cjs +90 -36
  65. package/dist/motion.d.cts +1 -1
  66. package/dist/motion.d.ts +1 -1
  67. package/dist/motion.js +4 -4
  68. package/dist/patterns.cjs +414 -81
  69. package/dist/patterns.d.cts +53 -20
  70. package/dist/patterns.d.ts +53 -20
  71. package/dist/patterns.js +7 -7
  72. package/dist/performance.cjs +364 -108
  73. package/dist/performance.d.cts +29 -17
  74. package/dist/performance.d.ts +29 -17
  75. package/dist/performance.js +13 -6
  76. package/dist/plugin-D30wlGW5.d.cts +71 -0
  77. package/dist/plugin-D30wlGW5.d.ts +71 -0
  78. package/dist/plugins.cjs +652 -271
  79. package/dist/plugins.d.cts +13 -6
  80. package/dist/plugins.d.ts +13 -6
  81. package/dist/plugins.js +116 -50
  82. package/dist/{ssr-Do_SiVoL.d.cts → ssr-CrVNy6Pa.d.cts} +9 -15
  83. package/dist/{ssr-Do_SiVoL.d.ts → ssr-CrVNy6Pa.d.ts} +9 -15
  84. package/dist/{ssr-4PBXAOO3.js → ssr-FXD2PPMC.js} +4 -3
  85. package/dist/ssr.cjs +648 -219
  86. package/dist/ssr.d.cts +27 -7
  87. package/dist/ssr.d.ts +27 -7
  88. package/dist/ssr.js +12 -11
  89. package/dist/{tagFactory-DaJ0YWX6.d.ts → tagFactory-S17H2qxu.d.cts} +9 -1
  90. package/dist/{tagFactory-DaJ0YWX6.d.cts → tagFactory-S17H2qxu.d.ts} +9 -1
  91. package/dist/testing.cjs +252 -63
  92. package/dist/testing.d.cts +17 -4
  93. package/dist/testing.d.ts +17 -4
  94. package/dist/testing.js +100 -44
  95. package/dist/ui.cjs +576 -168
  96. package/dist/ui.d.cts +13 -16
  97. package/dist/ui.d.ts +13 -16
  98. package/dist/ui.js +20 -17
  99. package/dist/widgets.cjs +1001 -93
  100. package/dist/widgets.d.cts +104 -2
  101. package/dist/widgets.d.ts +104 -2
  102. package/dist/widgets.js +9 -7
  103. package/package.json +8 -2
  104. package/dist/chunk-32DY64NT.js +0 -282
  105. package/dist/chunk-3CRQALYP.js +0 -877
  106. package/dist/chunk-4EI4AG32.js +0 -482
  107. package/dist/chunk-4MYMUBRS.js +0 -21
  108. package/dist/chunk-6HLLIF3K.js +0 -398
  109. package/dist/chunk-6LSNVCS2.js +0 -937
  110. package/dist/chunk-6SA3QQES.js +0 -61
  111. package/dist/chunk-7BF6TK55.js +0 -1097
  112. package/dist/chunk-7TQKR4PP.js +0 -294
  113. package/dist/chunk-7V26P53V.js +0 -712
  114. package/dist/chunk-AZ3ISID5.js +0 -298
  115. package/dist/chunk-B7SWRFUT.js +0 -332
  116. package/dist/chunk-BGN5ZMP4.js +0 -26
  117. package/dist/chunk-BTU3TJDS.js +0 -365
  118. package/dist/chunk-BW3WT46K.js +0 -937
  119. package/dist/chunk-C6KFWOFV.js +0 -616
  120. package/dist/chunk-CHF5OHIA.js +0 -61
  121. package/dist/chunk-CHJ27IGK.js +0 -26
  122. package/dist/chunk-CMBFNA7L.js +0 -27
  123. package/dist/chunk-DAHRH4ON.js +0 -331
  124. package/dist/chunk-DKOHBI74.js +0 -924
  125. package/dist/chunk-DTCOOBMX.js +0 -725
  126. package/dist/chunk-EBGIRKQY.js +0 -616
  127. package/dist/chunk-EUZND3CB.js +0 -27
  128. package/dist/chunk-EVCZO745.js +0 -365
  129. package/dist/chunk-FGOEVHY3.js +0 -60
  130. package/dist/chunk-G3BOQPVO.js +0 -365
  131. package/dist/chunk-GCOK2LC3.js +0 -282
  132. package/dist/chunk-HGMJFBC7.js +0 -654
  133. package/dist/chunk-K5ZUMYVS.js +0 -89
  134. package/dist/chunk-KQPDEVVS.js +0 -398
  135. package/dist/chunk-L6JRBDNS.js +0 -60
  136. package/dist/chunk-LA6KQEDU.js +0 -712
  137. package/dist/chunk-MDVXJWFN.js +0 -304
  138. package/dist/chunk-MEZVEBPN.js +0 -2008
  139. package/dist/chunk-MK4ERFYL.js +0 -2249
  140. package/dist/chunk-MLKGABMK.js +0 -9
  141. package/dist/chunk-MQ5GOYPH.js +0 -2249
  142. package/dist/chunk-N6IZB6KJ.js +0 -567
  143. package/dist/chunk-NEKUBFPT.js +0 -60
  144. package/dist/chunk-NHUC2QWH.js +0 -282
  145. package/dist/chunk-NMRUZALC.js +0 -1097
  146. package/dist/chunk-NYVAC6P5.js +0 -37
  147. package/dist/chunk-OF7UZIVB.js +0 -725
  148. package/dist/chunk-P6W3STU4.js +0 -2249
  149. package/dist/chunk-PBHF5WKN.js +0 -616
  150. package/dist/chunk-PTQJDMRT.js +0 -146
  151. package/dist/chunk-PZEGYCF5.js +0 -61
  152. package/dist/chunk-QBMDLBU2.js +0 -975
  153. package/dist/chunk-RQGQSLQK.js +0 -725
  154. package/dist/chunk-SDLZDHKP.js +0 -107
  155. package/dist/chunk-TNQWPPE6.js +0 -37
  156. package/dist/chunk-UHNL42EF.js +0 -2730
  157. package/dist/chunk-UNXCEF6S.js +0 -21
  158. package/dist/chunk-V2XTI523.js +0 -347
  159. package/dist/chunk-VAU366PN.js +0 -2241
  160. package/dist/chunk-VMVDTCXB.js +0 -712
  161. package/dist/chunk-VRW3FULF.js +0 -725
  162. package/dist/chunk-WADYRCO2.js +0 -304
  163. package/dist/chunk-WILQZRO4.js +0 -282
  164. package/dist/chunk-WUHJISPP.js +0 -298
  165. package/dist/chunk-XYU6TZOW.js +0 -182
  166. package/dist/chunk-Y6GP4QGG.js +0 -276
  167. package/dist/chunk-YECR7UIA.js +0 -347
  168. package/dist/chunk-YUTWTI4B.js +0 -654
  169. package/dist/chunk-Z65KYU7I.js +0 -26
  170. package/dist/chunk-Z6POF5YC.js +0 -975
  171. package/dist/chunk-ZBJP6WFL.js +0 -482
  172. package/dist/contracts-DDrwxvJ-.d.cts +0 -245
  173. package/dist/contracts-DDrwxvJ-.d.ts +0 -245
  174. package/dist/contracts-DOrhwbke.d.cts +0 -245
  175. package/dist/contracts-DOrhwbke.d.ts +0 -245
  176. package/dist/customElement-BKQfbSZQ.d.cts +0 -262
  177. package/dist/customElement-BKQfbSZQ.d.ts +0 -262
  178. package/dist/customElement-yz8uyk-0.d.cts +0 -308
  179. package/dist/customElement-yz8uyk-0.d.ts +0 -308
  180. package/dist/introspect-Cb0zgpi2.d.cts +0 -477
  181. package/dist/introspect-Y2xNXGSf.d.ts +0 -477
  182. package/dist/plugin-Bek4RhJY.d.cts +0 -43
  183. package/dist/plugin-Bek4RhJY.d.ts +0 -43
  184. package/dist/ssr-3RXHP5ES.js +0 -38
  185. package/dist/ssr-6GIMY5MX.js +0 -38
  186. package/dist/ssr-BA6sxxUd.d.cts +0 -135
  187. package/dist/ssr-BA6sxxUd.d.ts +0 -135
  188. package/dist/ssr-WKUPVSSK.js +0 -36
  189. package/dist/tagFactory-Dl8QCLga.d.cts +0 -23
  190. package/dist/tagFactory-Dl8QCLga.d.ts +0 -23
@@ -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-xo5ckdRP.cjs';
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: async (v) => aesGcmEncrypt(v, await getKey()),
78
- * decrypt: async (v) => aesGcmDecrypt(v, await getKey()),
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
- * Note: concurrent optimistic updates on the same value are inherently
100
- * ambiguous. If multiple operations are in flight, a failed revert restores
101
- * the value captured before that specific operation started.
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): [() => T, (optimisticValue: T, asyncAction: () => Promise<T>) => Promise<void>];
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
- * reverts to a snapshot taken before the operation started.
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
- addOptimistic: (item: T, asyncAction: () => Promise<T>) => Promise<void>;
114
- removeOptimistic: (predicate: (item: T) => boolean, asyncAction: () => Promise<void>) => Promise<void>;
115
- updateOptimistic: (predicate: (item: T) => boolean, update: Partial<T>, asyncAction: () => Promise<T>) => Promise<void>;
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 OptimisticAction, type PersistOptions, type Selector, type TimeTravelReturn, globalStore, machine, optimistic, optimisticList, persisted, timeline };
187
+ export { type GlobalStore, type MachineConfig, type MachineReturn, type Middleware, type PersistOptions, type Selector, type TimeTravelReturn, globalStore, machine, optimistic, optimisticList, persisted, timeline };
@@ -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-xo5ckdRP.js';
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: async (v) => aesGcmEncrypt(v, await getKey()),
78
- * decrypt: async (v) => aesGcmDecrypt(v, await getKey()),
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
- * Note: concurrent optimistic updates on the same value are inherently
100
- * ambiguous. If multiple operations are in flight, a failed revert restores
101
- * the value captured before that specific operation started.
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): [() => T, (optimisticValue: T, asyncAction: () => Promise<T>) => Promise<void>];
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
- * reverts to a snapshot taken before the operation started.
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
- addOptimistic: (item: T, asyncAction: () => Promise<T>) => Promise<void>;
114
- removeOptimistic: (predicate: (item: T) => boolean, asyncAction: () => Promise<void>) => Promise<void>;
115
- updateOptimistic: (predicate: (item: T) => boolean, update: Partial<T>, asyncAction: () => Promise<T>) => Promise<void>;
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 OptimisticAction, type PersistOptions, type Selector, type TimeTravelReturn, globalStore, machine, optimistic, optimisticList, persisted, timeline };
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-ZWKZCBO6.js";
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-NEKUBFPT.js";
26
- import "./chunk-CHF5OHIA.js";
27
- import "./chunk-EUZND3CB.js";
28
- import "./chunk-WZSPOOER.js";
29
- import "./chunk-ZD6OAMTH.js";
30
- import "./chunk-5X6PP2UK.js";
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,