@ersbeth/picoflow 0.2.3 → 1.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 (248) hide show
  1. package/.cursor/plans/update-js-e795d61b.plan.md +567 -0
  2. package/.gitlab-ci.yml +24 -0
  3. package/.vscode/settings.json +3 -3
  4. package/CHANGELOG.md +51 -0
  5. package/IMPLEMENTATION_GUIDE.md +1578 -0
  6. package/README.md +62 -25
  7. package/biome.json +32 -32
  8. package/dist/picoflow.js +557 -1099
  9. package/dist/types/advanced/array.d.ts +0 -6
  10. package/dist/types/advanced/array.d.ts.map +1 -1
  11. package/dist/types/advanced/index.d.ts +5 -5
  12. package/dist/types/advanced/index.d.ts.map +1 -1
  13. package/dist/types/advanced/map.d.ts +114 -23
  14. package/dist/types/advanced/map.d.ts.map +1 -1
  15. package/dist/types/advanced/resource.d.ts +51 -12
  16. package/dist/types/advanced/resource.d.ts.map +1 -1
  17. package/dist/types/advanced/resourceAsync.d.ts +28 -13
  18. package/dist/types/advanced/resourceAsync.d.ts.map +1 -1
  19. package/dist/types/advanced/stream.d.ts +74 -16
  20. package/dist/types/advanced/stream.d.ts.map +1 -1
  21. package/dist/types/advanced/streamAsync.d.ts +69 -15
  22. package/dist/types/advanced/streamAsync.d.ts.map +1 -1
  23. package/dist/types/basic/constant.d.ts +44 -16
  24. package/dist/types/basic/constant.d.ts.map +1 -1
  25. package/dist/types/basic/derivation.d.ts +73 -24
  26. package/dist/types/basic/derivation.d.ts.map +1 -1
  27. package/dist/types/basic/disposable.d.ts +65 -6
  28. package/dist/types/basic/disposable.d.ts.map +1 -1
  29. package/dist/types/basic/effect.d.ts +27 -16
  30. package/dist/types/basic/effect.d.ts.map +1 -1
  31. package/dist/types/basic/index.d.ts +7 -8
  32. package/dist/types/basic/index.d.ts.map +1 -1
  33. package/dist/types/basic/observable.d.ts +62 -13
  34. package/dist/types/basic/observable.d.ts.map +1 -1
  35. package/dist/types/basic/signal.d.ts +35 -6
  36. package/dist/types/basic/signal.d.ts.map +1 -1
  37. package/dist/types/basic/state.d.ts +25 -4
  38. package/dist/types/basic/state.d.ts.map +1 -1
  39. package/dist/types/basic/trackingContext.d.ts +33 -0
  40. package/dist/types/basic/trackingContext.d.ts.map +1 -0
  41. package/dist/types/creators.d.ts +271 -26
  42. package/dist/types/creators.d.ts.map +1 -1
  43. package/dist/types/index.d.ts +60 -7
  44. package/dist/types/index.d.ts.map +1 -1
  45. package/dist/types/solid/converters.d.ts +5 -5
  46. package/dist/types/solid/converters.d.ts.map +1 -1
  47. package/dist/types/solid/index.d.ts +2 -2
  48. package/dist/types/solid/index.d.ts.map +1 -1
  49. package/dist/types/solid/primitives.d.ts +96 -4
  50. package/dist/types/solid/primitives.d.ts.map +1 -1
  51. package/docs/.vitepress/config.mts +110 -0
  52. package/docs/api/classes/FlowArray.md +489 -0
  53. package/docs/api/classes/FlowConstant.md +350 -0
  54. package/docs/api/classes/FlowDerivation.md +334 -0
  55. package/docs/api/classes/FlowEffect.md +100 -0
  56. package/docs/api/classes/FlowMap.md +512 -0
  57. package/docs/api/classes/FlowObservable.md +306 -0
  58. package/docs/api/classes/FlowResource.md +380 -0
  59. package/docs/api/classes/FlowResourceAsync.md +362 -0
  60. package/docs/api/classes/FlowSignal.md +160 -0
  61. package/docs/api/classes/FlowState.md +368 -0
  62. package/docs/api/classes/FlowStream.md +367 -0
  63. package/docs/api/classes/FlowStreamAsync.md +364 -0
  64. package/docs/api/classes/SolidDerivation.md +75 -0
  65. package/docs/api/classes/SolidResource.md +91 -0
  66. package/docs/api/classes/SolidState.md +71 -0
  67. package/docs/api/classes/TrackingContext.md +33 -0
  68. package/docs/api/functions/array.md +58 -0
  69. package/docs/api/functions/constant.md +45 -0
  70. package/docs/api/functions/derivation.md +53 -0
  71. package/docs/api/functions/effect.md +49 -0
  72. package/docs/api/functions/from.md +220 -0
  73. package/docs/api/functions/isDisposable.md +49 -0
  74. package/docs/api/functions/map.md +57 -0
  75. package/docs/api/functions/resource.md +52 -0
  76. package/docs/api/functions/resourceAsync.md +50 -0
  77. package/docs/api/functions/signal.md +36 -0
  78. package/docs/api/functions/state.md +47 -0
  79. package/docs/api/functions/stream.md +53 -0
  80. package/docs/api/functions/streamAsync.md +50 -0
  81. package/docs/api/index.md +118 -0
  82. package/docs/api/interfaces/FlowDisposable.md +65 -0
  83. package/docs/api/interfaces/SolidObservable.md +19 -0
  84. package/docs/api/type-aliases/FlowArrayAction.md +49 -0
  85. package/docs/api/type-aliases/FlowStreamDisposer.md +15 -0
  86. package/docs/api/type-aliases/FlowStreamSetter.md +27 -0
  87. package/docs/api/type-aliases/FlowStreamUpdater.md +32 -0
  88. package/docs/api/type-aliases/NotPromise.md +18 -0
  89. package/docs/api/type-aliases/SolidGetter.md +17 -0
  90. package/docs/api/typedoc-sidebar.json +1 -0
  91. package/docs/examples/examples.md +2313 -0
  92. package/docs/examples/patterns.md +649 -0
  93. package/docs/guide/advanced/disposal.md +426 -0
  94. package/docs/guide/advanced/solidjs.md +221 -0
  95. package/docs/guide/advanced/upgrading.md +464 -0
  96. package/docs/guide/introduction/concepts.md +56 -0
  97. package/docs/guide/introduction/conventions.md +61 -0
  98. package/docs/guide/introduction/getting-started.md +134 -0
  99. package/docs/guide/introduction/lifecycle.md +371 -0
  100. package/docs/guide/primitives/array.md +400 -0
  101. package/docs/guide/primitives/constant.md +380 -0
  102. package/docs/guide/primitives/derivations.md +348 -0
  103. package/docs/guide/primitives/effects.md +458 -0
  104. package/docs/guide/primitives/map.md +387 -0
  105. package/docs/guide/primitives/overview.md +175 -0
  106. package/docs/guide/primitives/resources.md +858 -0
  107. package/docs/guide/primitives/signal.md +259 -0
  108. package/docs/guide/primitives/state.md +368 -0
  109. package/docs/guide/primitives/streams.md +931 -0
  110. package/docs/index.md +47 -0
  111. package/docs/public/logo.svg +1 -0
  112. package/package.json +57 -41
  113. package/src/advanced/array.ts +208 -210
  114. package/src/advanced/index.ts +7 -7
  115. package/src/advanced/map.ts +178 -68
  116. package/src/advanced/resource.ts +87 -43
  117. package/src/advanced/resourceAsync.ts +62 -42
  118. package/src/advanced/stream.ts +113 -50
  119. package/src/advanced/streamAsync.ts +120 -61
  120. package/src/basic/constant.ts +82 -49
  121. package/src/basic/derivation.ts +128 -84
  122. package/src/basic/disposable.ts +74 -15
  123. package/src/basic/effect.ts +85 -77
  124. package/src/basic/index.ts +7 -8
  125. package/src/basic/observable.ts +94 -36
  126. package/src/basic/signal.ts +133 -105
  127. package/src/basic/state.ts +46 -25
  128. package/src/basic/trackingContext.ts +45 -0
  129. package/src/creators.ts +297 -54
  130. package/src/index.ts +96 -43
  131. package/src/solid/converters.ts +186 -67
  132. package/src/solid/index.ts +8 -2
  133. package/src/solid/primitives.ts +167 -65
  134. package/test/array.test.ts +592 -612
  135. package/test/constant.test.ts +31 -33
  136. package/test/derivation.test.ts +531 -536
  137. package/test/effect.test.ts +21 -21
  138. package/test/map.test.ts +233 -137
  139. package/test/resource.test.ts +119 -121
  140. package/test/resourceAsync.test.ts +98 -100
  141. package/test/signal.test.ts +51 -55
  142. package/test/state.test.ts +186 -168
  143. package/test/stream.test.ts +189 -189
  144. package/test/streamAsync.test.ts +186 -186
  145. package/tsconfig.json +19 -18
  146. package/typedoc.json +37 -0
  147. package/vite.config.ts +23 -20
  148. package/vitest.config.ts +7 -7
  149. package/api/doc/index.md +0 -31
  150. package/api/doc/picoflow.array.md +0 -55
  151. package/api/doc/picoflow.constant.md +0 -55
  152. package/api/doc/picoflow.derivation.md +0 -55
  153. package/api/doc/picoflow.effect.md +0 -55
  154. package/api/doc/picoflow.flowarray._constructor_.md +0 -49
  155. package/api/doc/picoflow.flowarray._lastaction.md +0 -13
  156. package/api/doc/picoflow.flowarray.clear.md +0 -17
  157. package/api/doc/picoflow.flowarray.dispose.md +0 -55
  158. package/api/doc/picoflow.flowarray.get.md +0 -19
  159. package/api/doc/picoflow.flowarray.length.md +0 -13
  160. package/api/doc/picoflow.flowarray.md +0 -273
  161. package/api/doc/picoflow.flowarray.pop.md +0 -17
  162. package/api/doc/picoflow.flowarray.push.md +0 -53
  163. package/api/doc/picoflow.flowarray.set.md +0 -53
  164. package/api/doc/picoflow.flowarray.setitem.md +0 -69
  165. package/api/doc/picoflow.flowarray.shift.md +0 -17
  166. package/api/doc/picoflow.flowarray.splice.md +0 -85
  167. package/api/doc/picoflow.flowarray.unshift.md +0 -53
  168. package/api/doc/picoflow.flowarrayaction.md +0 -37
  169. package/api/doc/picoflow.flowconstant._constructor_.md +0 -49
  170. package/api/doc/picoflow.flowconstant.get.md +0 -25
  171. package/api/doc/picoflow.flowconstant.md +0 -88
  172. package/api/doc/picoflow.flowderivation._constructor_.md +0 -49
  173. package/api/doc/picoflow.flowderivation.get.md +0 -23
  174. package/api/doc/picoflow.flowderivation.md +0 -86
  175. package/api/doc/picoflow.flowdisposable.dispose.md +0 -55
  176. package/api/doc/picoflow.flowdisposable.md +0 -43
  177. package/api/doc/picoflow.floweffect._constructor_.md +0 -54
  178. package/api/doc/picoflow.floweffect.dispose.md +0 -21
  179. package/api/doc/picoflow.floweffect.disposed.md +0 -13
  180. package/api/doc/picoflow.floweffect.md +0 -131
  181. package/api/doc/picoflow.flowgetter.md +0 -15
  182. package/api/doc/picoflow.flowmap._lastdeleted.md +0 -21
  183. package/api/doc/picoflow.flowmap._lastset.md +0 -21
  184. package/api/doc/picoflow.flowmap.delete.md +0 -61
  185. package/api/doc/picoflow.flowmap.md +0 -133
  186. package/api/doc/picoflow.flowmap.setat.md +0 -77
  187. package/api/doc/picoflow.flowobservable.get.md +0 -19
  188. package/api/doc/picoflow.flowobservable.md +0 -68
  189. package/api/doc/picoflow.flowobservable.subscribe.md +0 -55
  190. package/api/doc/picoflow.flowresource._constructor_.md +0 -49
  191. package/api/doc/picoflow.flowresource.fetch.md +0 -27
  192. package/api/doc/picoflow.flowresource.get.md +0 -23
  193. package/api/doc/picoflow.flowresource.md +0 -100
  194. package/api/doc/picoflow.flowresourceasync._constructor_.md +0 -49
  195. package/api/doc/picoflow.flowresourceasync.fetch.md +0 -27
  196. package/api/doc/picoflow.flowresourceasync.get.md +0 -23
  197. package/api/doc/picoflow.flowresourceasync.md +0 -100
  198. package/api/doc/picoflow.flowsignal.dispose.md +0 -59
  199. package/api/doc/picoflow.flowsignal.disposed.md +0 -18
  200. package/api/doc/picoflow.flowsignal.md +0 -112
  201. package/api/doc/picoflow.flowsignal.trigger.md +0 -21
  202. package/api/doc/picoflow.flowstate.md +0 -52
  203. package/api/doc/picoflow.flowstate.set.md +0 -61
  204. package/api/doc/picoflow.flowstream._constructor_.md +0 -49
  205. package/api/doc/picoflow.flowstream.dispose.md +0 -21
  206. package/api/doc/picoflow.flowstream.get.md +0 -23
  207. package/api/doc/picoflow.flowstream.md +0 -100
  208. package/api/doc/picoflow.flowstreamasync._constructor_.md +0 -54
  209. package/api/doc/picoflow.flowstreamasync.dispose.md +0 -21
  210. package/api/doc/picoflow.flowstreamasync.get.md +0 -23
  211. package/api/doc/picoflow.flowstreamasync.md +0 -100
  212. package/api/doc/picoflow.flowstreamdisposer.md +0 -13
  213. package/api/doc/picoflow.flowstreamsetter.md +0 -13
  214. package/api/doc/picoflow.flowstreamupdater.md +0 -19
  215. package/api/doc/picoflow.flowwatcher.md +0 -15
  216. package/api/doc/picoflow.from.md +0 -55
  217. package/api/doc/picoflow.from_1.md +0 -55
  218. package/api/doc/picoflow.from_2.md +0 -55
  219. package/api/doc/picoflow.from_3.md +0 -55
  220. package/api/doc/picoflow.from_4.md +0 -55
  221. package/api/doc/picoflow.from_5.md +0 -55
  222. package/api/doc/picoflow.isdisposable.md +0 -55
  223. package/api/doc/picoflow.map.md +0 -59
  224. package/api/doc/picoflow.md +0 -544
  225. package/api/doc/picoflow.resource.md +0 -55
  226. package/api/doc/picoflow.resourceasync.md +0 -55
  227. package/api/doc/picoflow.signal.md +0 -19
  228. package/api/doc/picoflow.solidderivation._constructor_.md +0 -49
  229. package/api/doc/picoflow.solidderivation.get.md +0 -13
  230. package/api/doc/picoflow.solidderivation.md +0 -94
  231. package/api/doc/picoflow.solidgetter.md +0 -13
  232. package/api/doc/picoflow.solidobservable.get.md +0 -13
  233. package/api/doc/picoflow.solidobservable.md +0 -57
  234. package/api/doc/picoflow.solidresource._constructor_.md +0 -49
  235. package/api/doc/picoflow.solidresource.get.md +0 -13
  236. package/api/doc/picoflow.solidresource.latest.md +0 -13
  237. package/api/doc/picoflow.solidresource.md +0 -157
  238. package/api/doc/picoflow.solidresource.refetch.md +0 -13
  239. package/api/doc/picoflow.solidresource.state.md +0 -13
  240. package/api/doc/picoflow.solidstate._constructor_.md +0 -49
  241. package/api/doc/picoflow.solidstate.get.md +0 -13
  242. package/api/doc/picoflow.solidstate.md +0 -115
  243. package/api/doc/picoflow.solidstate.set.md +0 -13
  244. package/api/doc/picoflow.state.md +0 -55
  245. package/api/doc/picoflow.stream.md +0 -55
  246. package/api/doc/picoflow.streamasync.md +0 -55
  247. package/api/picoflow.public.api.md +0 -244
  248. package/api-extractor.json +0 -61
@@ -0,0 +1,100 @@
1
+ [@ersbeth/picoflow](/api/index.md) / FlowEffect
2
+
3
+ # Class: FlowEffect
4
+
5
+ Defined in: [basic/effect.ts:31](https://gitlab.com/ersbeth-web/picoflow/-/blob/a6cd2e5702b60b87a8efe22e2fe7d2ce3b0ccca4/src/basic/effect.ts#L31)
6
+
7
+ Represents a reactive effect that executes side-effect functions based
8
+ on its tracked dependencies.
9
+
10
+ ## Remarks
11
+
12
+ FlowEffect executes an apply function that performs side effects. The effect always runs
13
+ with a tracking context, allowing you to explicitly control which observables and signals
14
+ become dependencies using `.get(t)` for tracked reads or `.pick()` for untracked reads.
15
+
16
+ When any tracked dependency changes, the effect automatically re-executes. The effect
17
+ runs immediately upon creation and whenever its dependencies trigger updates.
18
+
19
+ Unlike the old API, effects in the new TrackingContext-based system always execute with
20
+ a tracking context available. You control reactivity by choosing which observables to track
21
+ within the effect body.
22
+
23
+ ## Example
24
+
25
+ ```typescript
26
+ const fx = effect((t) => {
27
+ const reactive = $stateA.get(t); // Tracked - effect re-runs when $stateA changes
28
+ const snapshot = $stateB.pick(); // Not tracked - changes don't trigger re-runs
29
+ console.log(reactive, snapshot);
30
+ });
31
+ ```
32
+
33
+ ## Constructors
34
+
35
+ ### Constructor
36
+
37
+ ```ts
38
+ new FlowEffect(apply): FlowEffect;
39
+ ```
40
+
41
+ Defined in: [basic/effect.ts:45](https://gitlab.com/ersbeth-web/picoflow/-/blob/a6cd2e5702b60b87a8efe22e2fe7d2ce3b0ccca4/src/basic/effect.ts#L45)
42
+
43
+ Creates a new FlowEffect.
44
+
45
+ #### Parameters
46
+
47
+ | Parameter | Type | Description |
48
+ | ------ | ------ | ------ |
49
+ | `apply` | (`t`) => `void` | A side-effect function that receives a tracking context to access and register dependencies on reactive observables and signals. |
50
+
51
+ #### Returns
52
+
53
+ `FlowEffect`
54
+
55
+ #### Remarks
56
+
57
+ The provided function is executed immediately upon construction with a tracking context.
58
+ Use the context parameter to call `.get(t)` on observables you want to track, or `.pick()`
59
+ on observables you want to read without creating dependencies.
60
+
61
+ ## Accessors
62
+
63
+ ### disposed
64
+
65
+ #### Get Signature
66
+
67
+ ```ts
68
+ get disposed(): boolean;
69
+ ```
70
+
71
+ Defined in: [basic/effect.ts:75](https://gitlab.com/ersbeth-web/picoflow/-/blob/a6cd2e5702b60b87a8efe22e2fe7d2ce3b0ccca4/src/basic/effect.ts#L75)
72
+
73
+ Indicates whether this effect has been disposed.
74
+
75
+ ##### Returns
76
+
77
+ `boolean`
78
+
79
+ A boolean value that is true if the effect is disposed, false otherwise.
80
+
81
+ ## Methods
82
+
83
+ ### dispose()
84
+
85
+ ```ts
86
+ dispose(): void;
87
+ ```
88
+
89
+ Defined in: [basic/effect.ts:60](https://gitlab.com/ersbeth-web/picoflow/-/blob/a6cd2e5702b60b87a8efe22e2fe7d2ce3b0ccca4/src/basic/effect.ts#L60)
90
+
91
+ Disposes the effect, unregistering all its tracked dependencies.
92
+
93
+ #### Returns
94
+
95
+ `void`
96
+
97
+ #### Remarks
98
+
99
+ Once disposed, the effect must no longer be used. Trying to dispose an effect
100
+ that is already disposed will throw an error.
@@ -0,0 +1,512 @@
1
+ [@ersbeth/picoflow](/api/index.md) / FlowMap
2
+
3
+ # Class: FlowMap\<K, V\>
4
+
5
+ Defined in: [advanced/map.ts:75](https://gitlab.com/ersbeth-web/picoflow/-/blob/a6cd2e5702b60b87a8efe22e2fe7d2ce3b0ccca4/src/advanced/map.ts#L75)
6
+
7
+ Represents a reactive map that extends [FlowState](/api/classes/FlowState.md) for tracking key-value pairs.
8
+
9
+ ## Remarks
10
+
11
+ FlowMap wraps a native JavaScript Map and provides reactive tracking at multiple granularity levels.
12
+ Unlike plain reactive state, FlowMap offers fine-grained reactivity that lets you track:
13
+
14
+ 1. **Whole map changes**: Via `get(t)` or `pick()` on the FlowMap itself
15
+ 2. **Last add operation**: Via the `$lastAdded` signal, track which key-value pair was most recently added
16
+ 3. **Last update operation**: Via the `$lastUpdated` signal, track which key-value pair was most recently updated
17
+ 4. **Last delete operation**: Via the `$lastDeleted` signal, track which key-value pair was most recently removed
18
+
19
+ **Reactive Signals:**
20
+ - **$lastAdded**: A FlowState containing `{ key?: K, value?: V }` updated on each `add()` call
21
+ - **$lastUpdated**: A FlowState containing `{ key?: K, value?: V }` updated on each `update()` call
22
+ - **$lastDeleted**: A FlowState containing `{ key?: K, value?: V }` updated on each `delete()` call
23
+
24
+ These signals enable fine-grained reactivity patterns where effects can respond to specific
25
+ map operations without re-processing the entire map.
26
+
27
+ **Use Cases:**
28
+ - Entity stores where you want to track additions/removals separately
29
+ - Cache implementations with granular invalidation
30
+ - Collections where operations on individual keys matter
31
+ - UI state where you want to animate specific additions or removals
32
+
33
+ ## Example
34
+
35
+ ```typescript
36
+ const $users = map<string, User>();
37
+
38
+ // Track the whole map
39
+ effect((t) => {
40
+ const users = $users.get(t);
41
+ console.log(`Total users: ${users.size}`);
42
+ });
43
+
44
+ // Track only additions
45
+ effect((t) => {
46
+ const { key, value } = $users.$lastAdded.get(t);
47
+ if (key && value) {
48
+ console.log(`User ${key} was added:`, value);
49
+ }
50
+ });
51
+
52
+ // Track only updates
53
+ effect((t) => {
54
+ const { key, value } = $users.$lastUpdated.get(t);
55
+ if (key && value) {
56
+ console.log(`User ${key} was updated:`, value);
57
+ }
58
+ });
59
+
60
+ // Track only deletions
61
+ effect((t) => {
62
+ const { key, value } = $users.$lastDeleted.get(t);
63
+ if (key && value) {
64
+ console.log(`User ${key} was deleted:`, value);
65
+ }
66
+ });
67
+
68
+ // Modify the map
69
+ $users.add('user1', { name: 'John', age: 30 });
70
+ $users.add('user2', { name: 'Jane', age: 25 });
71
+ $users.update('user1', { name: 'John', age: 31 });
72
+ $users.delete('user1');
73
+ ```
74
+
75
+ ## Extends
76
+
77
+ - [`FlowState`](/api/classes/FlowState.md)\<`Map`\<`K`, `V`\>\>
78
+
79
+ ## Type Parameters
80
+
81
+ | Type Parameter | Description |
82
+ | ------ | ------ |
83
+ | `K` | The type of the map keys. |
84
+ | `V` | The type of the map values. |
85
+
86
+ ## Constructors
87
+
88
+ ### Constructor
89
+
90
+ ```ts
91
+ new FlowMap<K, V>(value): FlowMap<K, V>;
92
+ ```
93
+
94
+ Defined in: [basic/constant.ts:59](https://gitlab.com/ersbeth-web/picoflow/-/blob/a6cd2e5702b60b87a8efe22e2fe7d2ce3b0ccca4/src/basic/constant.ts#L59)
95
+
96
+ Creates a new FlowConstant instance.
97
+
98
+ #### Parameters
99
+
100
+ | Parameter | Type | Description |
101
+ | ------ | ------ | ------ |
102
+ | `value` | `Map`\<`K`, `V`\> \| () => `Map` | Either a direct value of type T or a function returning a value of type T. If a function is provided, it will be invoked lazily on the first value access. If a direct value is provided, it is stored immediately. |
103
+
104
+ #### Returns
105
+
106
+ `FlowMap`\<`K`, `V`\>
107
+
108
+ #### Inherited from
109
+
110
+ [`FlowState`](/api/classes/FlowState.md).[`constructor`](/api/classes/FlowState.md#constructor)
111
+
112
+ ## Properties
113
+
114
+ | Property | Modifier | Type | Description | Defined in |
115
+ | ------ | ------ | ------ | ------ | ------ |
116
+ | <a id="lastadded"></a> `$lastAdded` | `public` | [`FlowState`](/api/classes/FlowState.md)\< \| \{ `key`: `K`; `value`: `V`; \} \| `null`\> | A reactive state that holds the most recent key and value that were added. **Remarks** When a key is added via [FlowMap.add](/api/classes/FlowMap.md#add), this state is updated with the corresponding key and value. | [advanced/map.ts:85](https://gitlab.com/ersbeth-web/picoflow/-/blob/a6cd2e5702b60b87a8efe22e2fe7d2ce3b0ccca4/src/advanced/map.ts#L85) |
117
+ | <a id="lastdeleted"></a> `$lastDeleted` | `public` | [`FlowState`](/api/classes/FlowState.md)\< \| \{ `key`: `K`; `value`: `V`; \} \| `null`\> | A reactive state that holds the most recent key and value that were deleted. **Remarks** When a key is deleted via [FlowMap.delete](/api/classes/FlowMap.md#delete), this state is updated with the corresponding key and its last known value. | [advanced/map.ts:107](https://gitlab.com/ersbeth-web/picoflow/-/blob/a6cd2e5702b60b87a8efe22e2fe7d2ce3b0ccca4/src/advanced/map.ts#L107) |
118
+ | <a id="lastupdated"></a> `$lastUpdated` | `public` | [`FlowState`](/api/classes/FlowState.md)\< \| \{ `key`: `K`; `value`: `V`; \} \| `null`\> | A reactive state that holds the most recent key and value that were updated. **Remarks** When a key is updated via [FlowMap.update](/api/classes/FlowMap.md#update), this state is updated with the corresponding key and value. | [advanced/map.ts:96](https://gitlab.com/ersbeth-web/picoflow/-/blob/a6cd2e5702b60b87a8efe22e2fe7d2ce3b0ccca4/src/advanced/map.ts#L96) |
119
+
120
+ ## Accessors
121
+
122
+ ### disposed
123
+
124
+ #### Get Signature
125
+
126
+ ```ts
127
+ get disposed(): boolean;
128
+ ```
129
+
130
+ Defined in: [basic/signal.ts:97](https://gitlab.com/ersbeth-web/picoflow/-/blob/a6cd2e5702b60b87a8efe22e2fe7d2ce3b0ccca4/src/basic/signal.ts#L97)
131
+
132
+ Indicates whether the FlowSignal has been disposed.
133
+
134
+ ##### Remarks
135
+
136
+ Once disposed, the signal should not be used.
137
+
138
+ ##### Returns
139
+
140
+ `boolean`
141
+
142
+ #### Inherited from
143
+
144
+ [`FlowState`](/api/classes/FlowState.md).[`disposed`](/api/classes/FlowState.md#disposed)
145
+
146
+ ## Methods
147
+
148
+ ### add()
149
+
150
+ ```ts
151
+ add(key, value): void;
152
+ ```
153
+
154
+ Defined in: [advanced/map.ts:123](https://gitlab.com/ersbeth-web/picoflow/-/blob/a6cd2e5702b60b87a8efe22e2fe7d2ce3b0ccca4/src/advanced/map.ts#L123)
155
+
156
+ Adds a new key-value pair to the map.
157
+
158
+ #### Parameters
159
+
160
+ | Parameter | Type | Description |
161
+ | ------ | ------ | ------ |
162
+ | `key` | `K` | The key to add. |
163
+ | `value` | `V` | The value to associate with the key. |
164
+
165
+ #### Returns
166
+
167
+ `void`
168
+
169
+ #### Throws
170
+
171
+ If the FlowMap instance is disposed.
172
+
173
+ #### Throws
174
+
175
+ If the key already exists in the map.
176
+
177
+ #### Remarks
178
+
179
+ Adds a new entry to the internal map, emits the key-value pair via [FlowMap.$lastAdded](/api/classes/FlowMap.md#lastadded),
180
+ and notifies all subscribers of the change.
181
+
182
+ ***
183
+
184
+ ### delete()
185
+
186
+ ```ts
187
+ delete(key): void;
188
+ ```
189
+
190
+ Defined in: [advanced/map.ts:169](https://gitlab.com/ersbeth-web/picoflow/-/blob/a6cd2e5702b60b87a8efe22e2fe7d2ce3b0ccca4/src/advanced/map.ts#L169)
191
+
192
+ Deletes the value at the specified key from the underlying map.
193
+
194
+ #### Parameters
195
+
196
+ | Parameter | Type | Description |
197
+ | ------ | ------ | ------ |
198
+ | `key` | `K` | The key to delete. |
199
+
200
+ #### Returns
201
+
202
+ `void`
203
+
204
+ #### Throws
205
+
206
+ If the FlowMap instance is disposed.
207
+
208
+ #### Remarks
209
+
210
+ Removes the key from the internal map, emits the deleted key and its value via [FlowMap.$lastDeleted](/api/classes/FlowMap.md#lastdeleted),
211
+ and notifies all subscribers of the change.
212
+
213
+ ***
214
+
215
+ ### dispose()
216
+
217
+ ```ts
218
+ dispose(options?): void;
219
+ ```
220
+
221
+ Defined in: [advanced/map.ts:183](https://gitlab.com/ersbeth-web/picoflow/-/blob/a6cd2e5702b60b87a8efe22e2fe7d2ce3b0ccca4/src/advanced/map.ts#L183)
222
+
223
+ Disposes the FlowMap and its values.
224
+
225
+ #### Parameters
226
+
227
+ | Parameter | Type | Description |
228
+ | ------ | ------ | ------ |
229
+ | `options?` | \{ `self`: `boolean`; \} | Disposal options. |
230
+ | `options.self?` | `boolean` | - |
231
+
232
+ #### Returns
233
+
234
+ `void`
235
+
236
+ #### Overrides
237
+
238
+ [`FlowState`](/api/classes/FlowState.md).[`dispose`](/api/classes/FlowState.md#dispose)
239
+
240
+ ***
241
+
242
+ ### get()
243
+
244
+ ```ts
245
+ get(context): Map;
246
+ ```
247
+
248
+ Defined in: [basic/observable.ts:47](https://gitlab.com/ersbeth-web/picoflow/-/blob/a6cd2e5702b60b87a8efe22e2fe7d2ce3b0ccca4/src/basic/observable.ts#L47)
249
+
250
+ Gets the current value with optional dependency tracking.
251
+
252
+ #### Parameters
253
+
254
+ | Parameter | Type | Description |
255
+ | ------ | ------ | ------ |
256
+ | `context` | [`TrackingContext`](/api/classes/TrackingContext.md) \| `null` | The tracking context for reactive tracking, or null for untracked access. When a context is provided, this observable is registered as a dependency. When null, the value is read without any tracking. |
257
+
258
+ #### Returns
259
+
260
+ `Map`
261
+
262
+ The current value of type T.
263
+
264
+ #### Remarks
265
+
266
+ Use `get(t)` within effects and derivations to create reactive dependencies.
267
+ Use `get(null)` when you need to read a value without tracking (though `pick()` is more idiomatic).
268
+
269
+ #### Example
270
+
271
+ ```typescript
272
+ effect((t) => {
273
+ const tracked = $state.get(t); // Dependency registered
274
+ const untracked = $other.get(null); // No dependency
275
+ });
276
+ ```
277
+
278
+ #### Inherited from
279
+
280
+ [`FlowState`](/api/classes/FlowState.md).[`get`](/api/classes/FlowState.md#get)
281
+
282
+ ***
283
+
284
+ ### pick()
285
+
286
+ ```ts
287
+ pick(): Map;
288
+ ```
289
+
290
+ Defined in: [basic/observable.ts:82](https://gitlab.com/ersbeth-web/picoflow/-/blob/a6cd2e5702b60b87a8efe22e2fe7d2ce3b0ccca4/src/basic/observable.ts#L82)
291
+
292
+ Gets the current value without any dependency tracking.
293
+
294
+ #### Returns
295
+
296
+ `Map`
297
+
298
+ The current value of type T.
299
+
300
+ #### Remarks
301
+
302
+ This method is equivalent to calling `get(null)` but provides a more semantic and readable API.
303
+ Use `pick()` when you want to read a snapshot of the current value without creating a reactive
304
+ dependency. This is useful for:
305
+ - Reading initial values
306
+ - Accessing configuration that shouldn't trigger updates
307
+ - Mixing tracked and untracked reads in the same effect
308
+
309
+ #### Example
310
+
311
+ ```typescript
312
+ // Read a snapshot outside reactive context
313
+ const currentValue = $state.pick();
314
+
315
+ // Mix tracked and untracked reads
316
+ effect((t) => {
317
+ const tracked = $reactive.get(t); // Triggers re-runs
318
+ const snapshot = $config.pick(); // Doesn't trigger re-runs
319
+ processData(tracked, snapshot);
320
+ });
321
+ ```
322
+
323
+ #### Inherited from
324
+
325
+ [`FlowState`](/api/classes/FlowState.md).[`pick`](/api/classes/FlowState.md#pick)
326
+
327
+ ***
328
+
329
+ ### set()
330
+
331
+ ```ts
332
+ set(value): void;
333
+ ```
334
+
335
+ Defined in: [basic/state.ts:46](https://gitlab.com/ersbeth-web/picoflow/-/blob/a6cd2e5702b60b87a8efe22e2fe7d2ce3b0ccca4/src/basic/state.ts#L46)
336
+
337
+ Updates the state with a new value.
338
+
339
+ #### Parameters
340
+
341
+ | Parameter | Type | Description |
342
+ | ------ | ------ | ------ |
343
+ | `value` | `Map`\<`K`, `V`\> \| (`current`) => `Map` | A new value or a callback function that computes a new value based on the current state. |
344
+
345
+ #### Returns
346
+
347
+ `void`
348
+
349
+ #### Remarks
350
+
351
+ If the computed new value is strictly equal to the current state value, no change is made and subscribers
352
+ will not be notified. Otherwise, the state is updated and all subscribers are informed of the change.
353
+
354
+ #### Throws
355
+
356
+ Error if the state has been disposed.
357
+
358
+ #### Inherited from
359
+
360
+ [`FlowState`](/api/classes/FlowState.md).[`set`](/api/classes/FlowState.md#set)
361
+
362
+ ***
363
+
364
+ ### subscribe()
365
+
366
+ ```ts
367
+ subscribe(listener): () => void;
368
+ ```
369
+
370
+ Defined in: [basic/observable.ts:103](https://gitlab.com/ersbeth-web/picoflow/-/blob/a6cd2e5702b60b87a8efe22e2fe7d2ce3b0ccca4/src/basic/observable.ts#L103)
371
+
372
+ Subscribes a listener function to changes of the observable.
373
+ The listener is executed immediately with the current value and on subsequent updates.
374
+
375
+ #### Parameters
376
+
377
+ | Parameter | Type | Description |
378
+ | ------ | ------ | ------ |
379
+ | `listener` | (`value`) => `void` | A callback function that receives the new value. |
380
+
381
+ #### Returns
382
+
383
+ A disposer function to cancel the subscription.
384
+
385
+ ```ts
386
+ (): void;
387
+ ```
388
+
389
+ ##### Returns
390
+
391
+ `void`
392
+
393
+ #### Inherited from
394
+
395
+ [`FlowState`](/api/classes/FlowState.md).[`subscribe`](/api/classes/FlowState.md#subscribe)
396
+
397
+ ***
398
+
399
+ ### trigger()
400
+
401
+ ```ts
402
+ trigger(): void;
403
+ ```
404
+
405
+ Defined in: [basic/signal.ts:19](https://gitlab.com/ersbeth-web/picoflow/-/blob/a6cd2e5702b60b87a8efe22e2fe7d2ce3b0ccca4/src/basic/signal.ts#L19)
406
+
407
+ Triggers the FlowSignal.
408
+ Notifies all registered listeners and schedules execution of associated effects.
409
+
410
+ #### Returns
411
+
412
+ `void`
413
+
414
+ #### Throws
415
+
416
+ If the FlowSignal has already been disposed.
417
+
418
+ #### Inherited from
419
+
420
+ [`FlowState`](/api/classes/FlowState.md).[`trigger`](/api/classes/FlowState.md#trigger)
421
+
422
+ ***
423
+
424
+ ### update()
425
+
426
+ ```ts
427
+ update(key, value): void;
428
+ ```
429
+
430
+ Defined in: [advanced/map.ts:147](https://gitlab.com/ersbeth-web/picoflow/-/blob/a6cd2e5702b60b87a8efe22e2fe7d2ce3b0ccca4/src/advanced/map.ts#L147)
431
+
432
+ Updates an existing key-value pair in the map.
433
+
434
+ #### Parameters
435
+
436
+ | Parameter | Type | Description |
437
+ | ------ | ------ | ------ |
438
+ | `key` | `K` | The key to update. |
439
+ | `value` | `V` | The new value to associate with the key. |
440
+
441
+ #### Returns
442
+
443
+ `void`
444
+
445
+ #### Throws
446
+
447
+ If the FlowMap instance is disposed.
448
+
449
+ #### Throws
450
+
451
+ If the key does not exist in the map.
452
+
453
+ #### Remarks
454
+
455
+ Updates an existing entry in the internal map, emits the key-value pair via [FlowMap.$lastUpdated](/api/classes/FlowMap.md#lastupdated),
456
+ and notifies all subscribers of the change.
457
+
458
+ ***
459
+
460
+ ### watch()
461
+
462
+ ```ts
463
+ watch(context): void;
464
+ ```
465
+
466
+ Defined in: [basic/signal.ts:57](https://gitlab.com/ersbeth-web/picoflow/-/blob/a6cd2e5702b60b87a8efe22e2fe7d2ce3b0ccca4/src/basic/signal.ts#L57)
467
+
468
+ Watches the signal, registering it as a dependency in the tracking context.
469
+
470
+ #### Parameters
471
+
472
+ | Parameter | Type | Description |
473
+ | ------ | ------ | ------ |
474
+ | `context` | [`TrackingContext`](/api/classes/TrackingContext.md) | The tracking context in which to register this signal as a dependency. |
475
+
476
+ #### Returns
477
+
478
+ `void`
479
+
480
+ #### Remarks
481
+
482
+ Use `watch()` when you want to track a signal without reading its value (signals don't
483
+ have values to read). This is useful for triggering effects based on signal events
484
+ without needing associated data.
485
+
486
+ When the signal is triggered via `trigger()`, any effects or derivations that have
487
+ watched this signal will automatically re-execute.
488
+
489
+ This method must be called within an effect or derivation context where a TrackingContext
490
+ is available. For observables (which hold values), use `.get(t)` instead, which both
491
+ reads the value and watches for changes.
492
+
493
+ #### Throws
494
+
495
+ Error if the signal has been disposed.
496
+
497
+ #### Example
498
+
499
+ ```typescript
500
+ const $signal = signal();
501
+
502
+ effect((t) => {
503
+ $signal.watch(t); // Track the signal
504
+ console.log('Signal triggered!');
505
+ });
506
+
507
+ $signal.trigger(); // Logs: "Signal triggered!"
508
+ ```
509
+
510
+ #### Inherited from
511
+
512
+ [`FlowState`](/api/classes/FlowState.md).[`watch`](/api/classes/FlowState.md#watch)