@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,368 @@
1
+ [@ersbeth/picoflow](/api/index.md) / FlowState
2
+
3
+ # Class: FlowState\<T\>
4
+
5
+ Defined in: [basic/state.ts:36](https://gitlab.com/ersbeth-web/picoflow/-/blob/a6cd2e5702b60b87a8efe22e2fe7d2ce3b0ccca4/src/basic/state.ts#L36)
6
+
7
+ Represents a reactive state that holds a mutable value.
8
+
9
+ ## Remarks
10
+
11
+ FlowState extends FlowConstant and inherits reactive value access methods from FlowObservable.
12
+ You can read the state value using `get(context)` for tracked access or `pick()` for untracked access.
13
+ Use the [FlowState.set](/api/classes/FlowState.md#set) method to update the state value.
14
+
15
+ When the state is updated with a new value that differs from the current value, all dependent
16
+ effects and derivations are automatically notified and re-executed. If the new value is strictly
17
+ equal to the current value, no notification occurs.
18
+
19
+ ## Example
20
+
21
+ ```typescript
22
+ const $count = state(0);
23
+
24
+ // Read with tracking
25
+ effect((t) => {
26
+ console.log($count.get(t)); // Effect re-runs when $count changes
27
+ });
28
+
29
+ // Read without tracking
30
+ const snapshot = $count.pick();
31
+
32
+ // Update the value
33
+ $count.set(1);
34
+ $count.set(current => current + 1);
35
+ ```
36
+
37
+ ## Extends
38
+
39
+ - [`FlowConstant`](/api/classes/FlowConstant.md)\<`T`\>
40
+
41
+ ## Extended by
42
+
43
+ - [`FlowMap`](/api/classes/FlowMap.md)
44
+
45
+ ## Type Parameters
46
+
47
+ | Type Parameter | Description |
48
+ | ------ | ------ |
49
+ | `T` | The type of the state value. |
50
+
51
+ ## Constructors
52
+
53
+ ### Constructor
54
+
55
+ ```ts
56
+ new FlowState<T>(value): FlowState<T>;
57
+ ```
58
+
59
+ Defined in: [basic/constant.ts:59](https://gitlab.com/ersbeth-web/picoflow/-/blob/a6cd2e5702b60b87a8efe22e2fe7d2ce3b0ccca4/src/basic/constant.ts#L59)
60
+
61
+ Creates a new FlowConstant instance.
62
+
63
+ #### Parameters
64
+
65
+ | Parameter | Type | Description |
66
+ | ------ | ------ | ------ |
67
+ | `value` | `T` \| () => `T` | 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. |
68
+
69
+ #### Returns
70
+
71
+ `FlowState`\<`T`\>
72
+
73
+ #### Inherited from
74
+
75
+ [`FlowConstant`](/api/classes/FlowConstant.md).[`constructor`](/api/classes/FlowConstant.md#constructor)
76
+
77
+ ## Accessors
78
+
79
+ ### disposed
80
+
81
+ #### Get Signature
82
+
83
+ ```ts
84
+ get disposed(): boolean;
85
+ ```
86
+
87
+ Defined in: [basic/signal.ts:97](https://gitlab.com/ersbeth-web/picoflow/-/blob/a6cd2e5702b60b87a8efe22e2fe7d2ce3b0ccca4/src/basic/signal.ts#L97)
88
+
89
+ Indicates whether the FlowSignal has been disposed.
90
+
91
+ ##### Remarks
92
+
93
+ Once disposed, the signal should not be used.
94
+
95
+ ##### Returns
96
+
97
+ `boolean`
98
+
99
+ #### Inherited from
100
+
101
+ [`FlowConstant`](/api/classes/FlowConstant.md).[`disposed`](/api/classes/FlowConstant.md#disposed)
102
+
103
+ ## Methods
104
+
105
+ ### dispose()
106
+
107
+ ```ts
108
+ dispose(options?): void;
109
+ ```
110
+
111
+ Defined in: [basic/signal.ts:69](https://gitlab.com/ersbeth-web/picoflow/-/blob/a6cd2e5702b60b87a8efe22e2fe7d2ce3b0ccca4/src/basic/signal.ts#L69)
112
+
113
+ Disposes the FlowSignal.
114
+ Cleans up all registered effects, listeners, and dependencies.
115
+ Once disposed, further usage of the signal will throw an error.
116
+
117
+ #### Parameters
118
+
119
+ | Parameter | Type |
120
+ | ------ | ------ |
121
+ | `options?` | \{ `self`: `boolean`; \} |
122
+ | `options.self?` | `boolean` |
123
+
124
+ #### Returns
125
+
126
+ `void`
127
+
128
+ #### Throws
129
+
130
+ If the FlowSignal is already disposed.
131
+
132
+ #### Inherited from
133
+
134
+ [`FlowConstant`](/api/classes/FlowConstant.md).[`dispose`](/api/classes/FlowConstant.md#dispose)
135
+
136
+ ***
137
+
138
+ ### get()
139
+
140
+ ```ts
141
+ get(context): T;
142
+ ```
143
+
144
+ Defined in: [basic/observable.ts:47](https://gitlab.com/ersbeth-web/picoflow/-/blob/a6cd2e5702b60b87a8efe22e2fe7d2ce3b0ccca4/src/basic/observable.ts#L47)
145
+
146
+ Gets the current value with optional dependency tracking.
147
+
148
+ #### Parameters
149
+
150
+ | Parameter | Type | Description |
151
+ | ------ | ------ | ------ |
152
+ | `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. |
153
+
154
+ #### Returns
155
+
156
+ `T`
157
+
158
+ The current value of type T.
159
+
160
+ #### Remarks
161
+
162
+ Use `get(t)` within effects and derivations to create reactive dependencies.
163
+ Use `get(null)` when you need to read a value without tracking (though `pick()` is more idiomatic).
164
+
165
+ #### Example
166
+
167
+ ```typescript
168
+ effect((t) => {
169
+ const tracked = $state.get(t); // Dependency registered
170
+ const untracked = $other.get(null); // No dependency
171
+ });
172
+ ```
173
+
174
+ #### Inherited from
175
+
176
+ [`FlowConstant`](/api/classes/FlowConstant.md).[`get`](/api/classes/FlowConstant.md#get)
177
+
178
+ ***
179
+
180
+ ### pick()
181
+
182
+ ```ts
183
+ pick(): T;
184
+ ```
185
+
186
+ Defined in: [basic/observable.ts:82](https://gitlab.com/ersbeth-web/picoflow/-/blob/a6cd2e5702b60b87a8efe22e2fe7d2ce3b0ccca4/src/basic/observable.ts#L82)
187
+
188
+ Gets the current value without any dependency tracking.
189
+
190
+ #### Returns
191
+
192
+ `T`
193
+
194
+ The current value of type T.
195
+
196
+ #### Remarks
197
+
198
+ This method is equivalent to calling `get(null)` but provides a more semantic and readable API.
199
+ Use `pick()` when you want to read a snapshot of the current value without creating a reactive
200
+ dependency. This is useful for:
201
+ - Reading initial values
202
+ - Accessing configuration that shouldn't trigger updates
203
+ - Mixing tracked and untracked reads in the same effect
204
+
205
+ #### Example
206
+
207
+ ```typescript
208
+ // Read a snapshot outside reactive context
209
+ const currentValue = $state.pick();
210
+
211
+ // Mix tracked and untracked reads
212
+ effect((t) => {
213
+ const tracked = $reactive.get(t); // Triggers re-runs
214
+ const snapshot = $config.pick(); // Doesn't trigger re-runs
215
+ processData(tracked, snapshot);
216
+ });
217
+ ```
218
+
219
+ #### Inherited from
220
+
221
+ [`FlowConstant`](/api/classes/FlowConstant.md).[`pick`](/api/classes/FlowConstant.md#pick)
222
+
223
+ ***
224
+
225
+ ### set()
226
+
227
+ ```ts
228
+ set(value): void;
229
+ ```
230
+
231
+ Defined in: [basic/state.ts:46](https://gitlab.com/ersbeth-web/picoflow/-/blob/a6cd2e5702b60b87a8efe22e2fe7d2ce3b0ccca4/src/basic/state.ts#L46)
232
+
233
+ Updates the state with a new value.
234
+
235
+ #### Parameters
236
+
237
+ | Parameter | Type | Description |
238
+ | ------ | ------ | ------ |
239
+ | `value` | `T` \| (`current`) => `T` | A new value or a callback function that computes a new value based on the current state. |
240
+
241
+ #### Returns
242
+
243
+ `void`
244
+
245
+ #### Remarks
246
+
247
+ If the computed new value is strictly equal to the current state value, no change is made and subscribers
248
+ will not be notified. Otherwise, the state is updated and all subscribers are informed of the change.
249
+
250
+ #### Throws
251
+
252
+ Error if the state has been disposed.
253
+
254
+ ***
255
+
256
+ ### subscribe()
257
+
258
+ ```ts
259
+ subscribe(listener): () => void;
260
+ ```
261
+
262
+ Defined in: [basic/observable.ts:103](https://gitlab.com/ersbeth-web/picoflow/-/blob/a6cd2e5702b60b87a8efe22e2fe7d2ce3b0ccca4/src/basic/observable.ts#L103)
263
+
264
+ Subscribes a listener function to changes of the observable.
265
+ The listener is executed immediately with the current value and on subsequent updates.
266
+
267
+ #### Parameters
268
+
269
+ | Parameter | Type | Description |
270
+ | ------ | ------ | ------ |
271
+ | `listener` | (`value`) => `void` | A callback function that receives the new value. |
272
+
273
+ #### Returns
274
+
275
+ A disposer function to cancel the subscription.
276
+
277
+ ```ts
278
+ (): void;
279
+ ```
280
+
281
+ ##### Returns
282
+
283
+ `void`
284
+
285
+ #### Inherited from
286
+
287
+ [`FlowConstant`](/api/classes/FlowConstant.md).[`subscribe`](/api/classes/FlowConstant.md#subscribe)
288
+
289
+ ***
290
+
291
+ ### trigger()
292
+
293
+ ```ts
294
+ trigger(): void;
295
+ ```
296
+
297
+ Defined in: [basic/signal.ts:19](https://gitlab.com/ersbeth-web/picoflow/-/blob/a6cd2e5702b60b87a8efe22e2fe7d2ce3b0ccca4/src/basic/signal.ts#L19)
298
+
299
+ Triggers the FlowSignal.
300
+ Notifies all registered listeners and schedules execution of associated effects.
301
+
302
+ #### Returns
303
+
304
+ `void`
305
+
306
+ #### Throws
307
+
308
+ If the FlowSignal has already been disposed.
309
+
310
+ #### Inherited from
311
+
312
+ [`FlowConstant`](/api/classes/FlowConstant.md).[`trigger`](/api/classes/FlowConstant.md#trigger)
313
+
314
+ ***
315
+
316
+ ### watch()
317
+
318
+ ```ts
319
+ watch(context): void;
320
+ ```
321
+
322
+ Defined in: [basic/signal.ts:57](https://gitlab.com/ersbeth-web/picoflow/-/blob/a6cd2e5702b60b87a8efe22e2fe7d2ce3b0ccca4/src/basic/signal.ts#L57)
323
+
324
+ Watches the signal, registering it as a dependency in the tracking context.
325
+
326
+ #### Parameters
327
+
328
+ | Parameter | Type | Description |
329
+ | ------ | ------ | ------ |
330
+ | `context` | [`TrackingContext`](/api/classes/TrackingContext.md) | The tracking context in which to register this signal as a dependency. |
331
+
332
+ #### Returns
333
+
334
+ `void`
335
+
336
+ #### Remarks
337
+
338
+ Use `watch()` when you want to track a signal without reading its value (signals don't
339
+ have values to read). This is useful for triggering effects based on signal events
340
+ without needing associated data.
341
+
342
+ When the signal is triggered via `trigger()`, any effects or derivations that have
343
+ watched this signal will automatically re-execute.
344
+
345
+ This method must be called within an effect or derivation context where a TrackingContext
346
+ is available. For observables (which hold values), use `.get(t)` instead, which both
347
+ reads the value and watches for changes.
348
+
349
+ #### Throws
350
+
351
+ Error if the signal has been disposed.
352
+
353
+ #### Example
354
+
355
+ ```typescript
356
+ const $signal = signal();
357
+
358
+ effect((t) => {
359
+ $signal.watch(t); // Track the signal
360
+ console.log('Signal triggered!');
361
+ });
362
+
363
+ $signal.trigger(); // Logs: "Signal triggered!"
364
+ ```
365
+
366
+ #### Inherited from
367
+
368
+ [`FlowConstant`](/api/classes/FlowConstant.md).[`watch`](/api/classes/FlowConstant.md#watch)