@bquery/bquery 1.2.0 → 1.3.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 (305) hide show
  1. package/README.md +501 -427
  2. package/dist/batch-4LAvfLE7.js +13 -0
  3. package/dist/batch-4LAvfLE7.js.map +1 -0
  4. package/dist/component/component.d.ts +69 -0
  5. package/dist/component/component.d.ts.map +1 -0
  6. package/dist/component/html.d.ts +35 -0
  7. package/dist/component/html.d.ts.map +1 -0
  8. package/dist/component/index.d.ts +3 -126
  9. package/dist/component/index.d.ts.map +1 -1
  10. package/dist/component/props.d.ts +18 -0
  11. package/dist/component/props.d.ts.map +1 -0
  12. package/dist/component/types.d.ts +77 -0
  13. package/dist/component/types.d.ts.map +1 -0
  14. package/dist/component.es.mjs +90 -59
  15. package/dist/component.es.mjs.map +1 -1
  16. package/dist/core/collection.d.ts +36 -0
  17. package/dist/core/collection.d.ts.map +1 -1
  18. package/dist/core/dom.d.ts +6 -0
  19. package/dist/core/dom.d.ts.map +1 -0
  20. package/dist/core/element.d.ts +8 -0
  21. package/dist/core/element.d.ts.map +1 -1
  22. package/dist/core/index.d.ts +1 -0
  23. package/dist/core/index.d.ts.map +1 -1
  24. package/dist/core/utils/array.d.ts +74 -0
  25. package/dist/core/utils/array.d.ts.map +1 -0
  26. package/dist/core/utils/function.d.ts +70 -0
  27. package/dist/core/utils/function.d.ts.map +1 -0
  28. package/dist/core/utils/index.d.ts +70 -0
  29. package/dist/core/utils/index.d.ts.map +1 -0
  30. package/dist/core/utils/misc.d.ts +63 -0
  31. package/dist/core/utils/misc.d.ts.map +1 -0
  32. package/dist/core/utils/number.d.ts +65 -0
  33. package/dist/core/utils/number.d.ts.map +1 -0
  34. package/dist/core/utils/object.d.ts +133 -0
  35. package/dist/core/utils/object.d.ts.map +1 -0
  36. package/dist/core/utils/string.d.ts +80 -0
  37. package/dist/core/utils/string.d.ts.map +1 -0
  38. package/dist/core/utils/type-guards.d.ts +79 -0
  39. package/dist/core/utils/type-guards.d.ts.map +1 -0
  40. package/dist/core-COenAZjD.js +145 -0
  41. package/dist/core-COenAZjD.js.map +1 -0
  42. package/dist/core.es.mjs +411 -448
  43. package/dist/core.es.mjs.map +1 -1
  44. package/dist/full.d.ts +2 -2
  45. package/dist/full.d.ts.map +1 -1
  46. package/dist/full.es.mjs +87 -64
  47. package/dist/full.es.mjs.map +1 -1
  48. package/dist/full.iife.js +2 -2
  49. package/dist/full.iife.js.map +1 -1
  50. package/dist/full.umd.js +2 -2
  51. package/dist/full.umd.js.map +1 -1
  52. package/dist/index.es.mjs +138 -68
  53. package/dist/index.es.mjs.map +1 -1
  54. package/dist/motion/animate.d.ts +25 -0
  55. package/dist/motion/animate.d.ts.map +1 -0
  56. package/dist/motion/easing.d.ts +30 -0
  57. package/dist/motion/easing.d.ts.map +1 -0
  58. package/dist/motion/flip.d.ts +55 -0
  59. package/dist/motion/flip.d.ts.map +1 -0
  60. package/dist/motion/index.d.ts +11 -138
  61. package/dist/motion/index.d.ts.map +1 -1
  62. package/dist/motion/keyframes.d.ts +21 -0
  63. package/dist/motion/keyframes.d.ts.map +1 -0
  64. package/dist/motion/reduced-motion.d.ts +12 -0
  65. package/dist/motion/reduced-motion.d.ts.map +1 -0
  66. package/dist/motion/scroll.d.ts +15 -0
  67. package/dist/motion/scroll.d.ts.map +1 -0
  68. package/dist/motion/spring.d.ts +42 -0
  69. package/dist/motion/spring.d.ts.map +1 -0
  70. package/dist/motion/stagger.d.ts +22 -0
  71. package/dist/motion/stagger.d.ts.map +1 -0
  72. package/dist/motion/timeline.d.ts +21 -0
  73. package/dist/motion/timeline.d.ts.map +1 -0
  74. package/dist/motion/transition.d.ts +22 -0
  75. package/dist/motion/transition.d.ts.map +1 -0
  76. package/dist/motion/types.d.ts +182 -0
  77. package/dist/motion/types.d.ts.map +1 -0
  78. package/dist/motion.es.mjs +320 -61
  79. package/dist/motion.es.mjs.map +1 -1
  80. package/dist/persisted-Dz_ryNuC.js +278 -0
  81. package/dist/persisted-Dz_ryNuC.js.map +1 -0
  82. package/dist/reactive/batch.d.ts +13 -0
  83. package/dist/reactive/batch.d.ts.map +1 -0
  84. package/dist/reactive/computed.d.ts +50 -0
  85. package/dist/reactive/computed.d.ts.map +1 -0
  86. package/dist/reactive/core.d.ts +60 -0
  87. package/dist/reactive/core.d.ts.map +1 -0
  88. package/dist/reactive/effect.d.ts +15 -0
  89. package/dist/reactive/effect.d.ts.map +1 -0
  90. package/dist/reactive/index.d.ts +2 -2
  91. package/dist/reactive/index.d.ts.map +1 -1
  92. package/dist/reactive/internals.d.ts +36 -0
  93. package/dist/reactive/internals.d.ts.map +1 -0
  94. package/dist/reactive/linked.d.ts +36 -0
  95. package/dist/reactive/linked.d.ts.map +1 -0
  96. package/dist/reactive/persisted.d.ts +14 -0
  97. package/dist/reactive/persisted.d.ts.map +1 -0
  98. package/dist/reactive/readonly.d.ts +26 -0
  99. package/dist/reactive/readonly.d.ts.map +1 -0
  100. package/dist/reactive/signal.d.ts +13 -312
  101. package/dist/reactive/signal.d.ts.map +1 -1
  102. package/dist/reactive/type-guards.d.ts +20 -0
  103. package/dist/reactive/type-guards.d.ts.map +1 -0
  104. package/dist/reactive/untrack.d.ts +29 -0
  105. package/dist/reactive/untrack.d.ts.map +1 -0
  106. package/dist/reactive/watch.d.ts +42 -0
  107. package/dist/reactive/watch.d.ts.map +1 -0
  108. package/dist/reactive.es.mjs +30 -163
  109. package/dist/reactive.es.mjs.map +1 -1
  110. package/dist/router/index.d.ts +6 -252
  111. package/dist/router/index.d.ts.map +1 -1
  112. package/dist/router/links.d.ts +44 -0
  113. package/dist/router/links.d.ts.map +1 -0
  114. package/dist/router/match.d.ts +20 -0
  115. package/dist/router/match.d.ts.map +1 -0
  116. package/dist/router/navigation.d.ts +45 -0
  117. package/dist/router/navigation.d.ts.map +1 -0
  118. package/dist/router/query.d.ts +16 -0
  119. package/dist/router/query.d.ts.map +1 -0
  120. package/dist/router/router.d.ts +34 -0
  121. package/dist/router/router.d.ts.map +1 -0
  122. package/dist/router/state.d.ts +27 -0
  123. package/dist/router/state.d.ts.map +1 -0
  124. package/dist/router/types.d.ts +88 -0
  125. package/dist/router/types.d.ts.map +1 -0
  126. package/dist/router/utils.d.ts +65 -0
  127. package/dist/router/utils.d.ts.map +1 -0
  128. package/dist/router.es.mjs +168 -132
  129. package/dist/router.es.mjs.map +1 -1
  130. package/dist/sanitize-1FBEPAFH.js +272 -0
  131. package/dist/sanitize-1FBEPAFH.js.map +1 -0
  132. package/dist/security/constants.d.ts +42 -0
  133. package/dist/security/constants.d.ts.map +1 -0
  134. package/dist/security/csp.d.ts +24 -0
  135. package/dist/security/csp.d.ts.map +1 -0
  136. package/dist/security/index.d.ts +4 -2
  137. package/dist/security/index.d.ts.map +1 -1
  138. package/dist/security/sanitize-core.d.ts +13 -0
  139. package/dist/security/sanitize-core.d.ts.map +1 -0
  140. package/dist/security/sanitize.d.ts +5 -57
  141. package/dist/security/sanitize.d.ts.map +1 -1
  142. package/dist/security/trusted-types.d.ts +25 -0
  143. package/dist/security/trusted-types.d.ts.map +1 -0
  144. package/dist/security/types.d.ts +36 -0
  145. package/dist/security/types.d.ts.map +1 -0
  146. package/dist/security.es.mjs +50 -277
  147. package/dist/security.es.mjs.map +1 -1
  148. package/dist/store/create-store.d.ts +15 -0
  149. package/dist/store/create-store.d.ts.map +1 -0
  150. package/dist/store/define-store.d.ts +28 -0
  151. package/dist/store/define-store.d.ts.map +1 -0
  152. package/dist/store/devtools.d.ts +22 -0
  153. package/dist/store/devtools.d.ts.map +1 -0
  154. package/dist/store/index.d.ts +10 -286
  155. package/dist/store/index.d.ts.map +1 -1
  156. package/dist/store/mapping.d.ts +28 -0
  157. package/dist/store/mapping.d.ts.map +1 -0
  158. package/dist/store/persisted.d.ts +13 -0
  159. package/dist/store/persisted.d.ts.map +1 -0
  160. package/dist/store/plugins.d.ts +13 -0
  161. package/dist/store/plugins.d.ts.map +1 -0
  162. package/dist/store/registry.d.ts +28 -0
  163. package/dist/store/registry.d.ts.map +1 -0
  164. package/dist/store/types.d.ts +71 -0
  165. package/dist/store/types.d.ts.map +1 -0
  166. package/dist/store/utils.d.ts +28 -0
  167. package/dist/store/utils.d.ts.map +1 -0
  168. package/dist/store/watch.d.ts +23 -0
  169. package/dist/store/watch.d.ts.map +1 -0
  170. package/dist/store.es.mjs +22 -224
  171. package/dist/store.es.mjs.map +1 -1
  172. package/dist/type-guards-DRma3-Kc.js +16 -0
  173. package/dist/type-guards-DRma3-Kc.js.map +1 -0
  174. package/dist/untrack-BuEQKH7_.js +6 -0
  175. package/dist/untrack-BuEQKH7_.js.map +1 -0
  176. package/dist/view/directives/bind.d.ts +7 -0
  177. package/dist/view/directives/bind.d.ts.map +1 -0
  178. package/dist/view/directives/class.d.ts +8 -0
  179. package/dist/view/directives/class.d.ts.map +1 -0
  180. package/dist/view/directives/for.d.ts +23 -0
  181. package/dist/view/directives/for.d.ts.map +1 -0
  182. package/dist/view/directives/html.d.ts +7 -0
  183. package/dist/view/directives/html.d.ts.map +1 -0
  184. package/dist/view/directives/if.d.ts +7 -0
  185. package/dist/view/directives/if.d.ts.map +1 -0
  186. package/dist/view/directives/index.d.ts +12 -0
  187. package/dist/view/directives/index.d.ts.map +1 -0
  188. package/dist/view/directives/model.d.ts +7 -0
  189. package/dist/view/directives/model.d.ts.map +1 -0
  190. package/dist/view/directives/on.d.ts +7 -0
  191. package/dist/view/directives/on.d.ts.map +1 -0
  192. package/dist/view/directives/ref.d.ts +7 -0
  193. package/dist/view/directives/ref.d.ts.map +1 -0
  194. package/dist/view/directives/show.d.ts +7 -0
  195. package/dist/view/directives/show.d.ts.map +1 -0
  196. package/dist/view/directives/style.d.ts +7 -0
  197. package/dist/view/directives/style.d.ts.map +1 -0
  198. package/dist/view/directives/text.d.ts +7 -0
  199. package/dist/view/directives/text.d.ts.map +1 -0
  200. package/dist/view/evaluate.d.ts +43 -0
  201. package/dist/view/evaluate.d.ts.map +1 -0
  202. package/dist/view/index.d.ts +3 -93
  203. package/dist/view/index.d.ts.map +1 -1
  204. package/dist/view/mount.d.ts +69 -0
  205. package/dist/view/mount.d.ts.map +1 -0
  206. package/dist/view/process.d.ts +26 -0
  207. package/dist/view/process.d.ts.map +1 -0
  208. package/dist/view/types.d.ts +36 -0
  209. package/dist/view/types.d.ts.map +1 -0
  210. package/dist/view.es.mjs +368 -267
  211. package/dist/view.es.mjs.map +1 -1
  212. package/dist/watch-CXyaBC_9.js +58 -0
  213. package/dist/watch-CXyaBC_9.js.map +1 -0
  214. package/package.json +132 -132
  215. package/src/component/component.ts +289 -0
  216. package/src/component/html.ts +53 -0
  217. package/src/component/index.ts +40 -414
  218. package/src/component/props.ts +116 -0
  219. package/src/component/types.ts +85 -0
  220. package/src/core/collection.ts +588 -454
  221. package/src/core/dom.ts +38 -0
  222. package/src/core/element.ts +746 -740
  223. package/src/core/index.ts +43 -0
  224. package/src/core/utils/array.ts +102 -0
  225. package/src/core/utils/function.ts +110 -0
  226. package/src/core/utils/index.ts +83 -0
  227. package/src/core/utils/misc.ts +82 -0
  228. package/src/core/utils/number.ts +78 -0
  229. package/src/core/utils/object.ts +206 -0
  230. package/src/core/utils/string.ts +112 -0
  231. package/src/core/utils/type-guards.ts +112 -0
  232. package/src/full.ts +187 -150
  233. package/src/index.ts +36 -36
  234. package/src/motion/animate.ts +113 -0
  235. package/src/motion/easing.ts +40 -0
  236. package/src/motion/flip.ts +176 -0
  237. package/src/motion/index.ts +41 -358
  238. package/src/motion/keyframes.ts +46 -0
  239. package/src/motion/reduced-motion.ts +17 -0
  240. package/src/motion/scroll.ts +57 -0
  241. package/src/motion/spring.ts +150 -0
  242. package/src/motion/stagger.ts +43 -0
  243. package/src/motion/timeline.ts +246 -0
  244. package/src/motion/transition.ts +51 -0
  245. package/src/motion/types.ts +198 -0
  246. package/src/reactive/batch.ts +22 -0
  247. package/src/reactive/computed.ts +92 -0
  248. package/src/reactive/core.ts +93 -0
  249. package/src/reactive/effect.ts +43 -0
  250. package/src/reactive/index.ts +23 -22
  251. package/src/reactive/internals.ts +105 -0
  252. package/src/reactive/linked.ts +56 -0
  253. package/src/reactive/persisted.ts +74 -0
  254. package/src/reactive/readonly.ts +35 -0
  255. package/src/reactive/signal.ts +20 -520
  256. package/src/reactive/type-guards.ts +22 -0
  257. package/src/reactive/untrack.ts +31 -0
  258. package/src/reactive/watch.ts +73 -0
  259. package/src/router/index.ts +41 -718
  260. package/src/router/links.ts +130 -0
  261. package/src/router/match.ts +106 -0
  262. package/src/router/navigation.ts +71 -0
  263. package/src/router/query.ts +35 -0
  264. package/src/router/router.ts +211 -0
  265. package/src/router/state.ts +46 -0
  266. package/src/router/types.ts +93 -0
  267. package/src/router/utils.ts +116 -0
  268. package/src/security/constants.ts +209 -0
  269. package/src/security/csp.ts +77 -0
  270. package/src/security/index.ts +4 -12
  271. package/src/security/sanitize-core.ts +343 -0
  272. package/src/security/sanitize.ts +66 -625
  273. package/src/security/trusted-types.ts +69 -0
  274. package/src/security/types.ts +40 -0
  275. package/src/store/create-store.ts +329 -0
  276. package/src/store/define-store.ts +48 -0
  277. package/src/store/devtools.ts +45 -0
  278. package/src/store/index.ts +22 -848
  279. package/src/store/mapping.ts +73 -0
  280. package/src/store/persisted.ts +61 -0
  281. package/src/store/plugins.ts +32 -0
  282. package/src/store/registry.ts +51 -0
  283. package/src/store/types.ts +94 -0
  284. package/src/store/utils.ts +141 -0
  285. package/src/store/watch.ts +52 -0
  286. package/src/view/directives/bind.ts +23 -0
  287. package/src/view/directives/class.ts +70 -0
  288. package/src/view/directives/for.ts +275 -0
  289. package/src/view/directives/html.ts +19 -0
  290. package/src/view/directives/if.ts +30 -0
  291. package/src/view/directives/index.ts +11 -0
  292. package/src/view/directives/model.ts +56 -0
  293. package/src/view/directives/on.ts +41 -0
  294. package/src/view/directives/ref.ts +41 -0
  295. package/src/view/directives/show.ts +26 -0
  296. package/src/view/directives/style.ts +47 -0
  297. package/src/view/directives/text.ts +15 -0
  298. package/src/view/evaluate.ts +274 -0
  299. package/src/view/index.ts +112 -1041
  300. package/src/view/mount.ts +200 -0
  301. package/src/view/process.ts +92 -0
  302. package/src/view/types.ts +44 -0
  303. package/dist/core/utils.d.ts +0 -313
  304. package/dist/core/utils.d.ts.map +0 -1
  305. package/src/core/utils.ts +0 -444
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Reactive effects.
3
+ */
4
+ import { CleanupFn } from './internals';
5
+ /**
6
+ * Creates a side effect that automatically re-runs when dependencies change.
7
+ *
8
+ * The effect runs immediately upon creation and then re-runs whenever
9
+ * any signal or computed value read inside it changes.
10
+ *
11
+ * @param fn - The effect function to run
12
+ * @returns A cleanup function to stop the effect
13
+ */
14
+ export declare const effect: (fn: () => void | CleanupFn) => CleanupFn;
15
+ //# sourceMappingURL=effect.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"effect.d.ts","sourceRoot":"","sources":["../../src/reactive/effect.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,SAAS,EAAsC,MAAM,aAAa,CAAC;AAE5E;;;;;;;;GAQG;AACH,eAAO,MAAM,MAAM,GAAI,IAAI,MAAM,IAAI,GAAG,SAAS,KAAG,SA2BnD,CAAC"}
@@ -3,6 +3,6 @@
3
3
  *
4
4
  * @module bquery/reactive
5
5
  */
6
- export { Computed, Signal, batch, computed, effect, isComputed, isSignal, persistedSignal, readonly, signal, untrack, watch, } from './signal';
7
- export type { CleanupFn, Observer, ReadonlySignal } from './signal';
6
+ export { Computed, Signal, batch, computed, effect, isComputed, isSignal, linkedSignal, persistedSignal, readonly, signal, untrack, watch, } from './signal';
7
+ export type { CleanupFn, LinkedSignal, Observer, ReadonlySignal } from './signal';
8
8
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/reactive/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,QAAQ,EACR,MAAM,EACN,KAAK,EACL,QAAQ,EACR,MAAM,EACN,UAAU,EACV,QAAQ,EACR,eAAe,EACf,QAAQ,EACR,MAAM,EACN,OAAO,EACP,KAAK,GACN,MAAM,UAAU,CAAC;AAElB,YAAY,EAAE,SAAS,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/reactive/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,QAAQ,EACR,MAAM,EACN,KAAK,EACL,QAAQ,EACR,MAAM,EACN,UAAU,EACV,QAAQ,EACR,YAAY,EACZ,eAAe,EACf,QAAQ,EACR,MAAM,EACN,OAAO,EACP,KAAK,GACN,MAAM,UAAU,CAAC;AAElB,YAAY,EAAE,SAAS,EAAE,YAAY,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC"}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * Internal reactive plumbing shared across primitives.
3
+ * @internal
4
+ */
5
+ export type Observer = () => void;
6
+ export type CleanupFn = () => void;
7
+ /**
8
+ * Interface for reactive sources (Signals, Computed) that can unsubscribe observers.
9
+ * @internal
10
+ */
11
+ export interface ReactiveSource {
12
+ unsubscribe(observer: Observer): void;
13
+ }
14
+ export declare const track: <T>(observer: Observer, fn: () => T) => T;
15
+ export declare const getCurrentObserver: () => Observer | undefined;
16
+ /**
17
+ * Executes a function without exposing the current observer to dependencies.
18
+ * Unlike disabling tracking globally, this still allows nested reactive internals
19
+ * (e.g., computed recomputation) to track their own dependencies.
20
+ * @internal
21
+ */
22
+ export declare const withoutCurrentObserver: <T>(fn: () => T) => T;
23
+ export declare const scheduleObserver: (observer: Observer) => void;
24
+ export declare const beginBatch: () => void;
25
+ export declare const endBatch: () => void;
26
+ /**
27
+ * Registers a dependency between an observer and a reactive source.
28
+ * @internal
29
+ */
30
+ export declare const registerDependency: (observer: Observer, source: ReactiveSource) => void;
31
+ /**
32
+ * Clears all dependencies for an observer, unsubscribing from all sources.
33
+ * @internal
34
+ */
35
+ export declare const clearDependencies: (observer: Observer) => void;
36
+ //# sourceMappingURL=internals.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"internals.d.ts","sourceRoot":"","sources":["../../src/reactive/internals.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC;AAClC,MAAM,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC;AAEnC;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B,WAAW,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAAC;CACvC;AASD,eAAO,MAAM,KAAK,GAAI,CAAC,EAAE,UAAU,QAAQ,EAAE,IAAI,MAAM,CAAC,KAAG,CAO1D,CAAC;AAEF,eAAO,MAAM,kBAAkB,QAAO,QAAQ,GAAG,SACR,CAAC;AAE1C;;;;;GAKG;AACH,eAAO,MAAM,sBAAsB,GAAI,CAAC,EAAE,IAAI,MAAM,CAAC,KAAG,CAUvD,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAAI,UAAU,QAAQ,KAAG,IAMrD,CAAC;AASF,eAAO,MAAM,UAAU,QAAO,IAE7B,CAAC;AAEF,eAAO,MAAM,QAAQ,QAAO,IAK3B,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,kBAAkB,GAAI,UAAU,QAAQ,EAAE,QAAQ,cAAc,KAAG,IAO/E,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,iBAAiB,GAAI,UAAU,QAAQ,KAAG,IAQtD,CAAC"}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * Linked (writable) computed helpers.
3
+ */
4
+ /**
5
+ * A writable computed-like signal.
6
+ */
7
+ export interface LinkedSignal<T> {
8
+ /** Gets or sets the current value with dependency tracking. */
9
+ value: T;
10
+ /** Gets the current value without dependency tracking. */
11
+ peek(): T;
12
+ }
13
+ /**
14
+ * Creates a writable computed signal by linking a getter and setter.
15
+ *
16
+ * @template T - The derived value type
17
+ * @param getValue - Getter that derives the current value
18
+ * @param setValue - Setter that writes back to underlying signals
19
+ * @returns A writable computed-like signal
20
+ *
21
+ * @example
22
+ * ```ts
23
+ * const first = signal('Ada');
24
+ * const last = signal('Lovelace');
25
+ * const fullName = linkedSignal(
26
+ * () => `${first.value} ${last.value}`,
27
+ * (next) => {
28
+ * const [a, b] = next.split(' ');
29
+ * first.value = a ?? '';
30
+ * last.value = b ?? '';
31
+ * }
32
+ * );
33
+ * ```
34
+ */
35
+ export declare const linkedSignal: <T>(getValue: () => T, setValue: (value: T) => void) => LinkedSignal<T>;
36
+ //# sourceMappingURL=linked.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"linked.d.ts","sourceRoot":"","sources":["../../src/reactive/linked.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH;;GAEG;AACH,MAAM,WAAW,YAAY,CAAC,CAAC;IAC7B,+DAA+D;IAC/D,KAAK,EAAE,CAAC,CAAC;IACT,0DAA0D;IAC1D,IAAI,IAAI,CAAC,CAAC;CACX;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,eAAO,MAAM,YAAY,GAAI,CAAC,EAC5B,UAAU,MAAM,CAAC,EACjB,UAAU,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,KAC3B,YAAY,CAAC,CAAC,CAchB,CAAC"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * LocalStorage-backed signals.
3
+ */
4
+ import { Signal } from './core';
5
+ /**
6
+ * Creates a signal that persists to localStorage.
7
+ *
8
+ * @template T - The type of the signal value
9
+ * @param key - The localStorage key
10
+ * @param initialValue - The initial value if not found in storage
11
+ * @returns A Signal that syncs with localStorage (falls back to in-memory if unavailable)
12
+ */
13
+ export declare const persistedSignal: <T>(key: string, initialValue: T) => Signal<T>;
14
+ //# sourceMappingURL=persisted.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"persisted.d.ts","sourceRoot":"","sources":["../../src/reactive/persisted.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAU,MAAM,EAAE,MAAM,QAAQ,CAAC;AAGxC;;;;;;;GAOG;AACH,eAAO,MAAM,eAAe,GAAI,CAAC,EAAE,KAAK,MAAM,EAAE,cAAc,CAAC,KAAG,MAAM,CAAC,CAAC,CA0DzE,CAAC"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Read-only signal wrappers.
3
+ */
4
+ import type { Signal } from './core';
5
+ /**
6
+ * A readonly wrapper around a signal that prevents writes.
7
+ * Provides read-only access to a signal's value while maintaining reactivity.
8
+ *
9
+ * @template T - The type of the wrapped value
10
+ */
11
+ export interface ReadonlySignal<T> {
12
+ /** Gets the current value with dependency tracking. */
13
+ readonly value: T;
14
+ /** Gets the current value without dependency tracking. */
15
+ peek(): T;
16
+ }
17
+ /**
18
+ * Creates a read-only view of a signal.
19
+ * Useful for exposing reactive state without allowing modifications.
20
+ *
21
+ * @template T - The type of the signal value
22
+ * @param sig - The signal to wrap
23
+ * @returns A readonly signal wrapper
24
+ */
25
+ export declare const readonly: <T>(sig: Signal<T>) => ReadonlySignal<T>;
26
+ //# sourceMappingURL=readonly.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"readonly.d.ts","sourceRoot":"","sources":["../../src/reactive/readonly.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAErC;;;;;GAKG;AACH,MAAM,WAAW,cAAc,CAAC,CAAC;IAC/B,uDAAuD;IACvD,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC;IAClB,0DAA0D;IAC1D,IAAI,IAAI,CAAC,CAAC;CACX;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,QAAQ,GAAI,CAAC,EAAE,KAAK,MAAM,CAAC,CAAC,CAAC,KAAG,cAAc,CAAC,CAAC,CAO3D,CAAC"}
@@ -1,318 +1,19 @@
1
1
  /**
2
2
  * Reactive primitives inspired by fine-grained reactivity.
3
3
  *
4
- * This module provides a minimal but powerful reactive system:
5
- * - Signal: A reactive value that notifies subscribers when changed
6
- * - Computed: A derived value that automatically updates when dependencies change
7
- * - Effect: A side effect that re-runs when its dependencies change
8
- * - Batch: Group multiple updates to prevent intermediate re-renders
9
- *
10
4
  * @module bquery/reactive
11
- *
12
- * @example
13
- * ```ts
14
- * const count = signal(0);
15
- * const doubled = computed(() => count.value * 2);
16
- *
17
- * effect(() => {
18
- * console.log(`Count: ${count.value}, Doubled: ${doubled.value}`);
19
- * });
20
- *
21
- * batch(() => {
22
- * count.value = 1;
23
- * count.value = 2;
24
- * });
25
- * // Logs: "Count: 2, Doubled: 4" (only once due to batching)
26
- * ```
27
- */
28
- /**
29
- * Observer function type used internally for tracking reactivity.
30
- */
31
- export type Observer = () => void;
32
- /**
33
- * Cleanup function returned by effects for disposal.
34
- */
35
- export type CleanupFn = () => void;
36
- /**
37
- * A reactive value container that notifies subscribers on change.
38
- *
39
- * Signals are the foundational primitive of the reactive system.
40
- * Reading a signal's value inside an effect or computed automatically
41
- * establishes a reactive dependency.
42
- *
43
- * @template T - The type of the stored value
44
- *
45
- * @example
46
- * ```ts
47
- * const name = signal('World');
48
- * console.log(name.value); // 'World'
49
- *
50
- * name.value = 'bQuery';
51
- * console.log(name.value); // 'bQuery'
52
- * ```
53
- */
54
- export declare class Signal<T> {
55
- private _value;
56
- private subscribers;
57
- /**
58
- * Creates a new signal with an initial value.
59
- * @param _value - The initial value
60
- */
61
- constructor(_value: T);
62
- /**
63
- * Gets the current value and tracks the read if inside an observer.
64
- * Respects the global tracking state (disabled during untrack calls).
65
- */
66
- get value(): T;
67
- /**
68
- * Sets a new value and notifies all subscribers if the value changed.
69
- * Uses Object.is for equality comparison.
70
- */
71
- set value(next: T);
72
- /**
73
- * Reads the current value without tracking.
74
- * Useful when you need the value but don't want to create a dependency.
75
- *
76
- * @returns The current value
77
- */
78
- peek(): T;
79
- /**
80
- * Updates the value using a function.
81
- * Useful for updates based on the current value.
82
- *
83
- * @param updater - Function that receives current value and returns new value
84
- */
85
- update(updater: (current: T) => T): void;
86
- }
87
- /**
88
- * A computed value that derives from other reactive sources.
89
- *
90
- * Computed values are lazily evaluated and cached. They only
91
- * recompute when their dependencies change.
92
- *
93
- * @template T - The type of the computed value
94
- *
95
- * @example
96
- * ```ts
97
- * const price = signal(100);
98
- * const quantity = signal(2);
99
- * const total = computed(() => price.value * quantity.value);
100
- *
101
- * console.log(total.value); // 200
102
- * price.value = 150;
103
- * console.log(total.value); // 300
104
- * ```
105
- */
106
- export declare class Computed<T> {
107
- private readonly compute;
108
- private cachedValue;
109
- private dirty;
110
- private subscribers;
111
- private readonly markDirty;
112
- /**
113
- * Creates a new computed value.
114
- * @param compute - Function that computes the value
115
- */
116
- constructor(compute: () => T);
117
- /**
118
- * Gets the computed value, recomputing if dependencies changed.
119
- */
120
- get value(): T;
121
- /**
122
- * Reads the current computed value without tracking.
123
- * Useful when you need the value but don't want to create a dependency.
124
- *
125
- * @returns The current cached value (recomputes if dirty)
126
- */
127
- peek(): T;
128
- }
129
- /**
130
- * Creates a new reactive signal.
131
- *
132
- * @template T - The type of the signal value
133
- * @param value - The initial value
134
- * @returns A new Signal instance
135
- *
136
- * @example
137
- * ```ts
138
- * const count = signal(0);
139
- * count.value++; // Triggers subscribers
140
- * ```
141
- */
142
- export declare const signal: <T>(value: T) => Signal<T>;
143
- /**
144
- * Creates a new computed value.
145
- *
146
- * @template T - The type of the computed value
147
- * @param fn - Function that computes the value from reactive sources
148
- * @returns A new Computed instance
149
- *
150
- * @example
151
- * ```ts
152
- * const doubled = computed(() => count.value * 2);
153
- * ```
154
- */
155
- export declare const computed: <T>(fn: () => T) => Computed<T>;
156
- /**
157
- * Creates a side effect that automatically re-runs when dependencies change.
158
- *
159
- * The effect runs immediately upon creation and then re-runs whenever
160
- * any signal or computed value read inside it changes.
161
- *
162
- * @param fn - The effect function to run
163
- * @returns A cleanup function to stop the effect
164
- *
165
- * @example
166
- * ```ts
167
- * const count = signal(0);
168
- *
169
- * const cleanup = effect(() => {
170
- * document.title = `Count: ${count.value}`;
171
- * });
172
- *
173
- * // Later, to stop the effect:
174
- * cleanup();
175
- * ```
176
- */
177
- export declare const effect: (fn: () => void | CleanupFn) => CleanupFn;
178
- /**
179
- * Batches multiple signal updates into a single notification cycle.
180
- *
181
- * Updates made inside the batch function are deferred until the batch
182
- * completes, preventing intermediate re-renders and improving performance.
183
- *
184
- * @param fn - Function containing multiple signal updates
185
- *
186
- * @example
187
- * ```ts
188
- * batch(() => {
189
- * firstName.value = 'John';
190
- * lastName.value = 'Doe';
191
- * age.value = 30;
192
- * });
193
- * // Effects only run once with all three updates
194
- * ```
195
- */
196
- export declare const batch: (fn: () => void) => void;
197
- /**
198
- * Creates a signal that persists to localStorage.
199
- *
200
- * @template T - The type of the signal value
201
- * @param key - The localStorage key
202
- * @param initialValue - The initial value if not found in storage
203
- * @returns A Signal that syncs with localStorage
204
- *
205
- * @example
206
- * ```ts
207
- * const theme = persistedSignal('theme', 'light');
208
- * theme.value = 'dark'; // Automatically saved to localStorage
209
- * ```
210
- */
211
- export declare const persistedSignal: <T>(key: string, initialValue: T) => Signal<T>;
212
- /**
213
- * A readonly wrapper around a signal that prevents writes.
214
- * Provides read-only access to a signal's value while maintaining reactivity.
215
- *
216
- * @template T - The type of the wrapped value
217
- */
218
- export interface ReadonlySignal<T> {
219
- /** Gets the current value with dependency tracking. */
220
- readonly value: T;
221
- /** Gets the current value without dependency tracking. */
222
- peek(): T;
223
- }
224
- /**
225
- * Creates a read-only view of a signal.
226
- * Useful for exposing reactive state without allowing modifications.
227
- *
228
- * @template T - The type of the signal value
229
- * @param sig - The signal to wrap
230
- * @returns A readonly signal wrapper
231
- *
232
- * @example
233
- * ```ts
234
- * const _count = signal(0);
235
- * const count = readonly(_count); // Expose read-only version
236
- *
237
- * console.log(count.value); // 0
238
- * count.value = 1; // TypeScript error: Cannot assign to 'value'
239
- * ```
240
- */
241
- export declare const readonly: <T>(sig: Signal<T>) => ReadonlySignal<T>;
242
- /**
243
- * Watches a signal or computed value and calls a callback with old and new values.
244
- * Unlike effect, watch provides access to the previous value.
245
- *
246
- * @template T - The type of the watched value
247
- * @param source - The signal or computed to watch
248
- * @param callback - Function called with (newValue, oldValue) on changes
249
- * @param options - Watch options
250
- * @returns A cleanup function to stop watching
251
- *
252
- * @example
253
- * ```ts
254
- * const count = signal(0);
255
- *
256
- * const cleanup = watch(count, (newVal, oldVal) => {
257
- * console.log(`Changed from ${oldVal} to ${newVal}`);
258
- * });
259
- *
260
- * count.value = 5; // Logs: "Changed from 0 to 5"
261
- * cleanup();
262
- * ```
263
- */
264
- export declare const watch: <T>(source: Signal<T> | Computed<T>, callback: (newValue: T, oldValue: T | undefined) => void, options?: {
265
- immediate?: boolean;
266
- }) => CleanupFn;
267
- /**
268
- * Executes a function without tracking any signal dependencies.
269
- * Useful when reading a signal value without creating a reactive dependency.
270
- *
271
- * @template T - The return type of the function
272
- * @param fn - The function to execute without tracking
273
- * @returns The result of the function
274
- *
275
- * @example
276
- * ```ts
277
- * const count = signal(0);
278
- *
279
- * effect(() => {
280
- * // This creates a dependency
281
- * console.log('Tracked:', count.value);
282
- *
283
- * // This does NOT create a dependency
284
- * const untracked = untrack(() => otherSignal.value);
285
- * });
286
- * ```
287
- */
288
- export declare const untrack: <T>(fn: () => T) => T;
289
- /**
290
- * Type guard to check if a value is a Signal instance.
291
- *
292
- * @param value - The value to check
293
- * @returns True if the value is a Signal
294
- *
295
- * @example
296
- * ```ts
297
- * const count = signal(0);
298
- * const num = 42;
299
- *
300
- * isSignal(count); // true
301
- * isSignal(num); // false
302
- * ```
303
- */
304
- export declare const isSignal: (value: unknown) => value is Signal<unknown>;
305
- /**
306
- * Type guard to check if a value is a Computed instance.
307
- *
308
- * @param value - The value to check
309
- * @returns True if the value is a Computed
310
- *
311
- * @example
312
- * ```ts
313
- * const doubled = computed(() => count.value * 2);
314
- * isComputed(doubled); // true
315
- * ```
316
5
  */
317
- export declare const isComputed: (value: unknown) => value is Computed<unknown>;
6
+ export { batch } from './batch';
7
+ export { Computed, computed } from './computed';
8
+ export { Signal, signal } from './core';
9
+ export { effect } from './effect';
10
+ export { linkedSignal } from './linked';
11
+ export { persistedSignal } from './persisted';
12
+ export { readonly } from './readonly';
13
+ export { isComputed, isSignal } from './type-guards';
14
+ export { untrack } from './untrack';
15
+ export { watch } from './watch';
16
+ export type { CleanupFn, Observer } from './internals';
17
+ export type { LinkedSignal } from './linked';
18
+ export type { ReadonlySignal } from './readonly';
318
19
  //# sourceMappingURL=signal.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"signal.d.ts","sourceRoot":"","sources":["../../src/reactive/signal.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"signal.d.ts","sourceRoot":"","sources":["../../src/reactive/signal.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AACxC,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AACxC,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAEhC,YAAY,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvD,YAAY,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAC7C,YAAY,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Type guards for reactive primitives.
3
+ */
4
+ import { Computed } from './computed';
5
+ import { Signal } from './core';
6
+ /**
7
+ * Type guard to check if a value is a Signal instance.
8
+ *
9
+ * @param value - The value to check
10
+ * @returns True if the value is a Signal
11
+ */
12
+ export declare const isSignal: (value: unknown) => value is Signal<unknown>;
13
+ /**
14
+ * Type guard to check if a value is a Computed instance.
15
+ *
16
+ * @param value - The value to check
17
+ * @returns True if the value is a Computed
18
+ */
19
+ export declare const isComputed: (value: unknown) => value is Computed<unknown>;
20
+ //# sourceMappingURL=type-guards.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"type-guards.d.ts","sourceRoot":"","sources":["../../src/reactive/type-guards.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEhC;;;;;GAKG;AACH,eAAO,MAAM,QAAQ,GAAI,OAAO,OAAO,KAAG,KAAK,IAAI,MAAM,CAAC,OAAO,CAA4B,CAAC;AAE9F;;;;;GAKG;AACH,eAAO,MAAM,UAAU,GAAI,OAAO,OAAO,KAAG,KAAK,IAAI,QAAQ,CAAC,OAAO,CAA8B,CAAC"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Dependency tracking control helpers.
3
+ */
4
+ /**
5
+ * Executes a function without tracking any signal dependencies.
6
+ * Useful when reading a signal value without creating a reactive dependency.
7
+ *
8
+ * This implementation temporarily hides the current observer rather than
9
+ * disabling tracking globally. This ensures that nested reactive internals
10
+ * (e.g., computed recomputation triggered during untrack) can still properly
11
+ * track their own dependencies.
12
+ *
13
+ * @template T - The return type of the function
14
+ * @param fn - The function to execute without tracking
15
+ * @returns The result of the function
16
+ *
17
+ * @example
18
+ * ```ts
19
+ * const count = signal(0);
20
+ * effect(() => {
21
+ * // This read creates a dependency
22
+ * console.log(count.value);
23
+ * // This read does not create a dependency
24
+ * const snapshot = untrack(() => count.value);
25
+ * });
26
+ * ```
27
+ */
28
+ export declare const untrack: <T>(fn: () => T) => T;
29
+ //# sourceMappingURL=untrack.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"untrack.d.ts","sourceRoot":"","sources":["../../src/reactive/untrack.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,eAAO,MAAM,OAAO,GAAI,CAAC,EAAE,IAAI,MAAM,CAAC,KAAG,CAA+B,CAAC"}
@@ -0,0 +1,42 @@
1
+ /**
2
+ * Value watching helpers.
3
+ */
4
+ import type { Computed } from './computed';
5
+ import type { Signal } from './core';
6
+ import type { CleanupFn } from './internals';
7
+ /**
8
+ * Options for the watch function.
9
+ */
10
+ export interface WatchOptions<T> {
11
+ /** If true, the callback is invoked immediately with the current value. */
12
+ immediate?: boolean;
13
+ /** Custom equality function. Defaults to Object.is. */
14
+ equals?: (a: T, b: T | undefined) => boolean;
15
+ }
16
+ /**
17
+ * Watches a signal or computed value and calls a callback with old and new values.
18
+ * Unlike effect, watch provides access to the previous value.
19
+ * The callback is only invoked when the value actually changes (compared via Object.is or custom equals).
20
+ *
21
+ * @template T - The type of the watched value
22
+ * @param source - The signal or computed to watch
23
+ * @param callback - Function called with (newValue, oldValue) on changes
24
+ * @param options - Watch options
25
+ * @returns A cleanup function to stop watching
26
+ *
27
+ * @example
28
+ * ```ts
29
+ * const count = signal(0);
30
+ * watch(count, (newVal, oldVal) => {
31
+ * console.log(`Changed from ${oldVal} to ${newVal}`);
32
+ * });
33
+ *
34
+ * // With custom equality for objects
35
+ * const user = signal({ id: 1, name: 'Alice' });
36
+ * watch(user, (newVal, oldVal) => { ... }, {
37
+ * equals: (a, b) => a?.id === b?.id
38
+ * });
39
+ * ```
40
+ */
41
+ export declare const watch: <T>(source: Signal<T> | Computed<T>, callback: (newValue: T, oldValue: T | undefined) => void, options?: WatchOptions<T>) => CleanupFn;
42
+ //# sourceMappingURL=watch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"watch.d.ts","sourceRoot":"","sources":["../../src/reactive/watch.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AACrC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAI7C;;GAEG;AACH,MAAM,WAAW,YAAY,CAAC,CAAC;IAC7B,2EAA2E;IAC3E,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,uDAAuD;IACvD,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,SAAS,KAAK,OAAO,CAAC;CAC9C;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,eAAO,MAAM,KAAK,GAAI,CAAC,EACrB,QAAQ,MAAM,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,EAC/B,UAAU,CAAC,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,GAAG,SAAS,KAAK,IAAI,EACxD,UAAS,YAAY,CAAC,CAAC,CAAM,KAC5B,SAuBF,CAAC"}