sigmx 0.1.0 → 0.2.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 (308) hide show
  1. package/README.md +54 -43
  2. package/dist/cli.js +3 -1
  3. package/dist/cli.js.map +2 -2
  4. package/dist/kernel/compile.d.ts +8 -9
  5. package/dist/kernel/compile.js +102 -67
  6. package/dist/kernel/compile.js.map +2 -2
  7. package/dist/kernel/contracts.d.ts +12 -13
  8. package/dist/kernel/index.d.ts +11 -12
  9. package/dist/kernel/index.js +14 -12
  10. package/dist/kernel/index.js.map +3 -3
  11. package/dist/kernel/precompile.d.ts +8 -12
  12. package/dist/kernel/precompile.js +33 -76
  13. package/dist/kernel/precompile.js.map +2 -2
  14. package/dist/kernel/precompiled.d.ts +7 -4
  15. package/dist/kernel/precompiled.js +5 -5
  16. package/dist/kernel/precompiled.js.map +2 -2
  17. package/dist/kernel/reactive.d.ts +13 -11
  18. package/dist/kernel/reactive.js +96 -71
  19. package/dist/kernel/reactive.js.map +3 -3
  20. package/dist/kernel/runtime.js +85 -63
  21. package/dist/kernel/runtime.js.map +3 -3
  22. package/dist/kernel/scan.d.ts +2 -11
  23. package/dist/kernel/scan.js +26 -9
  24. package/dist/kernel/scan.js.map +2 -2
  25. package/dist/kernel/state.d.ts +5 -8
  26. package/dist/kernel/state.js +114 -76
  27. package/dist/kernel/state.js.map +2 -2
  28. package/dist/kernel/strict-csp.d.ts +0 -5
  29. package/dist/kernel/strict-csp.js +2 -2
  30. package/dist/kernel/strict-csp.js.map +2 -2
  31. package/dist/lib/casing.d.ts +4 -1
  32. package/dist/lib/casing.js +8 -1
  33. package/dist/lib/casing.js.map +2 -2
  34. package/dist/lib/objects.d.ts +5 -4
  35. package/dist/lib/objects.js +13 -5
  36. package/dist/lib/objects.js.map +2 -2
  37. package/dist/lib/schedule.d.ts +3 -5
  38. package/dist/lib/schedule.js +12 -10
  39. package/dist/lib/schedule.js.map +2 -2
  40. package/dist/lib/sse.d.ts +10 -1
  41. package/dist/lib/sse.js +32 -28
  42. package/dist/lib/sse.js.map +2 -2
  43. package/dist/plugins/def.d.ts +5 -0
  44. package/dist/plugins/def.js +22 -0
  45. package/dist/plugins/def.js.map +7 -0
  46. package/dist/plugins/directives/attribute-sync.js +8 -12
  47. package/dist/plugins/directives/attribute-sync.js.map +2 -2
  48. package/dist/plugins/directives/boost.d.ts +1 -1
  49. package/dist/plugins/directives/boost.js +34 -30
  50. package/dist/plugins/directives/boost.js.map +2 -2
  51. package/dist/plugins/directives/busy-flag.js +13 -16
  52. package/dist/plugins/directives/busy-flag.js.map +2 -2
  53. package/dist/plugins/directives/class-toggle.js +17 -16
  54. package/dist/plugins/directives/class-toggle.js.map +2 -2
  55. package/dist/plugins/directives/cloak.js +2 -7
  56. package/dist/plugins/directives/cloak.js.map +2 -2
  57. package/dist/plugins/directives/collapse.js +36 -37
  58. package/dist/plugins/directives/collapse.js.map +2 -2
  59. package/dist/plugins/directives/declare.js +5 -8
  60. package/dist/plugins/directives/declare.js.map +2 -2
  61. package/dist/plugins/directives/derive.js +9 -15
  62. package/dist/plugins/directives/derive.js.map +2 -2
  63. package/dist/plugins/directives/element-ref.js +8 -8
  64. package/dist/plugins/directives/element-ref.js.map +2 -2
  65. package/dist/plugins/directives/event-listener.js +18 -23
  66. package/dist/plugins/directives/event-listener.js.map +2 -2
  67. package/dist/plugins/directives/frame-loop.js +9 -14
  68. package/dist/plugins/directives/frame-loop.js.map +2 -2
  69. package/dist/plugins/directives/html.js +6 -7
  70. package/dist/plugins/directives/html.js.map +2 -2
  71. package/dist/plugins/directives/inline-style.js +17 -20
  72. package/dist/plugins/directives/inline-style.js.map +2 -2
  73. package/dist/plugins/directives/mask.js +19 -23
  74. package/dist/plugins/directives/mask.js.map +2 -2
  75. package/dist/plugins/directives/media-query.d.ts +4 -1
  76. package/dist/plugins/directives/media-query.js +13 -12
  77. package/dist/plugins/directives/media-query.js.map +2 -2
  78. package/dist/plugins/directives/on-mount.js +4 -9
  79. package/dist/plugins/directives/on-mount.js.map +2 -2
  80. package/dist/plugins/directives/patch-listener.js +24 -19
  81. package/dist/plugins/directives/patch-listener.js.map +2 -2
  82. package/dist/plugins/directives/remove-me.js +7 -8
  83. package/dist/plugins/directives/remove-me.js.map +2 -2
  84. package/dist/plugins/directives/scroll-to.d.ts +4 -1
  85. package/dist/plugins/directives/scroll-to.js +8 -14
  86. package/dist/plugins/directives/scroll-to.js.map +2 -2
  87. package/dist/plugins/directives/size-watch.js +7 -12
  88. package/dist/plugins/directives/size-watch.js.map +2 -2
  89. package/dist/plugins/directives/state-dump.js +6 -10
  90. package/dist/plugins/directives/state-dump.js.map +2 -2
  91. package/dist/plugins/directives/storage-sync.js +13 -9
  92. package/dist/plugins/directives/storage-sync.js.map +2 -2
  93. package/dist/plugins/directives/teleport.js +8 -14
  94. package/dist/plugins/directives/teleport.js.map +2 -2
  95. package/dist/plugins/directives/text-content.js +6 -7
  96. package/dist/plugins/directives/text-content.js.map +2 -2
  97. package/dist/plugins/directives/timer.js +7 -13
  98. package/dist/plugins/directives/timer.js.map +2 -2
  99. package/dist/plugins/directives/transition.d.ts +1 -2
  100. package/dist/plugins/directives/transition.js +32 -34
  101. package/dist/plugins/directives/transition.js.map +2 -2
  102. package/dist/plugins/directives/tween.d.ts +2 -2
  103. package/dist/plugins/directives/tween.js +34 -50
  104. package/dist/plugins/directives/tween.js.map +2 -2
  105. package/dist/plugins/directives/two-way-bind.d.ts +1 -1
  106. package/dist/plugins/directives/two-way-bind.js +70 -67
  107. package/dist/plugins/directives/two-way-bind.js.map +2 -2
  108. package/dist/plugins/directives/url-params.js +36 -59
  109. package/dist/plugins/directives/url-params.js.map +3 -3
  110. package/dist/plugins/directives/url-replace.js +6 -7
  111. package/dist/plugins/directives/url-replace.js.map +2 -2
  112. package/dist/plugins/directives/validity.js +6 -9
  113. package/dist/plugins/directives/validity.js.map +2 -2
  114. package/dist/plugins/directives/viewport.js +18 -23
  115. package/dist/plugins/directives/viewport.js.map +2 -2
  116. package/dist/plugins/directives/visibility.js +9 -14
  117. package/dist/plugins/directives/visibility.js.map +2 -2
  118. package/dist/plugins/directives/watch.d.ts +0 -1
  119. package/dist/plugins/directives/watch.js +2 -8
  120. package/dist/plugins/directives/watch.js.map +2 -2
  121. package/dist/plugins/functions/bulk-set.js +10 -7
  122. package/dist/plugins/functions/bulk-set.js.map +2 -2
  123. package/dist/plugins/functions/bulk-toggle.js +10 -7
  124. package/dist/plugins/functions/bulk-toggle.js.map +2 -2
  125. package/dist/plugins/functions/confirm.js +2 -2
  126. package/dist/plugins/functions/confirm.js.map +2 -2
  127. package/dist/plugins/functions/copy-text.js +5 -5
  128. package/dist/plugins/functions/copy-text.js.map +2 -2
  129. package/dist/plugins/functions/dispatch.js +5 -5
  130. package/dist/plugins/functions/dispatch.js.map +2 -2
  131. package/dist/plugins/functions/locale-format.d.ts +4 -1
  132. package/dist/plugins/functions/locale-format.js +9 -16
  133. package/dist/plugins/functions/locale-format.js.map +2 -2
  134. package/dist/plugins/functions/range-map.js +6 -6
  135. package/dist/plugins/functions/range-map.js.map +2 -2
  136. package/dist/plugins/functions/request.d.ts +7 -3
  137. package/dist/plugins/functions/request.js +85 -80
  138. package/dist/plugins/functions/request.js.map +2 -2
  139. package/dist/plugins/functions/untracked-read.js +3 -2
  140. package/dist/plugins/functions/untracked-read.js.map +2 -2
  141. package/dist/plugins/functions/websocket.d.ts +3 -3
  142. package/dist/plugins/functions/websocket.js +18 -25
  143. package/dist/plugins/functions/websocket.js.map +2 -2
  144. package/dist/plugins/index.d.ts +34 -36
  145. package/dist/plugins/index.js +31 -35
  146. package/dist/plugins/index.js.map +2 -2
  147. package/dist/plugins/server-events/apply-elements.d.ts +1 -1
  148. package/dist/plugins/server-events/apply-elements.js +41 -40
  149. package/dist/plugins/server-events/apply-elements.js.map +2 -2
  150. package/dist/plugins/server-events/apply-state.js +9 -12
  151. package/dist/plugins/server-events/apply-state.js.map +2 -2
  152. package/dist/plugins/server-events/morph.d.ts +0 -2
  153. package/dist/plugins/server-events/morph.js +58 -55
  154. package/dist/plugins/server-events/morph.js.map +3 -3
  155. package/dist/presets/all.d.ts +0 -1
  156. package/dist/presets/all.js +22 -26
  157. package/dist/presets/all.js.map +2 -2
  158. package/dist/presets/essentials.d.ts +0 -1
  159. package/dist/presets/essentials.js +27 -9
  160. package/dist/presets/essentials.js.map +2 -2
  161. package/dist/presets/minimal.d.ts +0 -1
  162. package/dist/presets/minimal.js +2 -2
  163. package/dist/presets/minimal.js.map +2 -2
  164. package/dist/server.d.ts +108 -0
  165. package/dist/server.js +218 -0
  166. package/dist/server.js.map +7 -0
  167. package/dist/sigmx.standalone.js +1 -1
  168. package/dist/standalone.js.map +2 -2
  169. package/dist/vite.d.ts +2 -2
  170. package/dist/vite.js +48 -15
  171. package/dist/vite.js.map +2 -2
  172. package/package.json +21 -2
  173. package/dist/auto.d.ts +0 -1
  174. package/dist/auto.js +0 -7
  175. package/dist/auto.js.map +0 -7
  176. package/dist/core/csp.d.ts +0 -7
  177. package/dist/core/csp.js +0 -20
  178. package/dist/core/csp.js.map +0 -7
  179. package/dist/core/engine.d.ts +0 -10
  180. package/dist/core/engine.js +0 -200
  181. package/dist/core/engine.js.map +0 -7
  182. package/dist/core/expr.d.ts +0 -12
  183. package/dist/core/expr.js +0 -94
  184. package/dist/core/expr.js.map +0 -7
  185. package/dist/core/index.d.ts +0 -16
  186. package/dist/core/index.js +0 -46
  187. package/dist/core/index.js.map +0 -7
  188. package/dist/core/signals.d.ts +0 -42
  189. package/dist/core/signals.js +0 -195
  190. package/dist/core/signals.js.map +0 -7
  191. package/dist/core/store.d.ts +0 -32
  192. package/dist/core/store.js +0 -185
  193. package/dist/core/store.js.map +0 -7
  194. package/dist/core/types.d.ts +0 -101
  195. package/dist/core/types.js +0 -1
  196. package/dist/core/types.js.map +0 -7
  197. package/dist/plugins/actions/clipboard.d.ts +0 -2
  198. package/dist/plugins/actions/clipboard.js +0 -11
  199. package/dist/plugins/actions/clipboard.js.map +0 -7
  200. package/dist/plugins/actions/fit.d.ts +0 -2
  201. package/dist/plugins/actions/fit.js +0 -14
  202. package/dist/plugins/actions/fit.js.map +0 -7
  203. package/dist/plugins/actions/intl.d.ts +0 -2
  204. package/dist/plugins/actions/intl.js +0 -21
  205. package/dist/plugins/actions/intl.js.map +0 -7
  206. package/dist/plugins/actions/peek.d.ts +0 -2
  207. package/dist/plugins/actions/peek.js +0 -6
  208. package/dist/plugins/actions/peek.js.map +0 -7
  209. package/dist/plugins/actions/setAll.d.ts +0 -2
  210. package/dist/plugins/actions/setAll.js +0 -11
  211. package/dist/plugins/actions/setAll.js.map +0 -7
  212. package/dist/plugins/actions/toggleAll.d.ts +0 -2
  213. package/dist/plugins/actions/toggleAll.js +0 -11
  214. package/dist/plugins/actions/toggleAll.js.map +0 -7
  215. package/dist/plugins/attributes/attr.d.ts +0 -2
  216. package/dist/plugins/attributes/attr.js +0 -20
  217. package/dist/plugins/attributes/attr.js.map +0 -7
  218. package/dist/plugins/attributes/bind.d.ts +0 -6
  219. package/dist/plugins/attributes/bind.js +0 -81
  220. package/dist/plugins/attributes/bind.js.map +0 -7
  221. package/dist/plugins/attributes/class.d.ts +0 -2
  222. package/dist/plugins/attributes/class.js +0 -22
  223. package/dist/plugins/attributes/class.js.map +0 -7
  224. package/dist/plugins/attributes/computed.d.ts +0 -2
  225. package/dist/plugins/attributes/computed.js +0 -20
  226. package/dist/plugins/attributes/computed.js.map +0 -7
  227. package/dist/plugins/attributes/customValidity.d.ts +0 -2
  228. package/dist/plugins/attributes/customValidity.js +0 -14
  229. package/dist/plugins/attributes/customValidity.js.map +0 -7
  230. package/dist/plugins/attributes/effect.d.ts +0 -2
  231. package/dist/plugins/attributes/effect.js +0 -12
  232. package/dist/plugins/attributes/effect.js.map +0 -7
  233. package/dist/plugins/attributes/indicator.d.ts +0 -2
  234. package/dist/plugins/attributes/indicator.js +0 -20
  235. package/dist/plugins/attributes/indicator.js.map +0 -7
  236. package/dist/plugins/attributes/init.d.ts +0 -2
  237. package/dist/plugins/attributes/init.js +0 -14
  238. package/dist/plugins/attributes/init.js.map +0 -7
  239. package/dist/plugins/attributes/jsonSignals.d.ts +0 -2
  240. package/dist/plugins/attributes/jsonSignals.js +0 -15
  241. package/dist/plugins/attributes/jsonSignals.js.map +0 -7
  242. package/dist/plugins/attributes/matchMedia.d.ts +0 -2
  243. package/dist/plugins/attributes/matchMedia.js +0 -19
  244. package/dist/plugins/attributes/matchMedia.js.map +0 -7
  245. package/dist/plugins/attributes/on.d.ts +0 -5
  246. package/dist/plugins/attributes/on.js +0 -28
  247. package/dist/plugins/attributes/on.js.map +0 -7
  248. package/dist/plugins/attributes/onIntersect.d.ts +0 -2
  249. package/dist/plugins/attributes/onIntersect.js +0 -28
  250. package/dist/plugins/attributes/onIntersect.js.map +0 -7
  251. package/dist/plugins/attributes/onInterval.d.ts +0 -2
  252. package/dist/plugins/attributes/onInterval.js +0 -18
  253. package/dist/plugins/attributes/onInterval.js.map +0 -7
  254. package/dist/plugins/attributes/onRaf.d.ts +0 -1
  255. package/dist/plugins/attributes/onRaf.js +0 -19
  256. package/dist/plugins/attributes/onRaf.js.map +0 -7
  257. package/dist/plugins/attributes/onResize.d.ts +0 -1
  258. package/dist/plugins/attributes/onResize.js +0 -17
  259. package/dist/plugins/attributes/onResize.js.map +0 -7
  260. package/dist/plugins/attributes/onSignalPatch.d.ts +0 -5
  261. package/dist/plugins/attributes/onSignalPatch.js +0 -35
  262. package/dist/plugins/attributes/onSignalPatch.js.map +0 -7
  263. package/dist/plugins/attributes/persist.d.ts +0 -6
  264. package/dist/plugins/attributes/persist.js +0 -16
  265. package/dist/plugins/attributes/persist.js.map +0 -7
  266. package/dist/plugins/attributes/queryString.d.ts +0 -5
  267. package/dist/plugins/attributes/queryString.js +0 -54
  268. package/dist/plugins/attributes/queryString.js.map +0 -7
  269. package/dist/plugins/attributes/ref.d.ts +0 -2
  270. package/dist/plugins/attributes/ref.js +0 -13
  271. package/dist/plugins/attributes/ref.js.map +0 -7
  272. package/dist/plugins/attributes/replaceUrl.d.ts +0 -1
  273. package/dist/plugins/attributes/replaceUrl.js +0 -11
  274. package/dist/plugins/attributes/replaceUrl.js.map +0 -7
  275. package/dist/plugins/attributes/scrollIntoView.d.ts +0 -2
  276. package/dist/plugins/attributes/scrollIntoView.js +0 -19
  277. package/dist/plugins/attributes/scrollIntoView.js.map +0 -7
  278. package/dist/plugins/attributes/show.d.ts +0 -2
  279. package/dist/plugins/attributes/show.js +0 -19
  280. package/dist/plugins/attributes/show.js.map +0 -7
  281. package/dist/plugins/attributes/signals.d.ts +0 -2
  282. package/dist/plugins/attributes/signals.js +0 -13
  283. package/dist/plugins/attributes/signals.js.map +0 -7
  284. package/dist/plugins/attributes/style.d.ts +0 -2
  285. package/dist/plugins/attributes/style.js +0 -25
  286. package/dist/plugins/attributes/style.js.map +0 -7
  287. package/dist/plugins/attributes/text.d.ts +0 -1
  288. package/dist/plugins/attributes/text.js +0 -13
  289. package/dist/plugins/attributes/text.js.map +0 -7
  290. package/dist/plugins/attributes/viewTransition.d.ts +0 -1
  291. package/dist/plugins/attributes/viewTransition.js +0 -11
  292. package/dist/plugins/attributes/viewTransition.js.map +0 -7
  293. package/dist/plugins/directives/transition-name.d.ts +0 -1
  294. package/dist/plugins/directives/transition-name.js +0 -11
  295. package/dist/plugins/directives/transition-name.js.map +0 -7
  296. package/dist/plugins/directives/trap.d.ts +0 -5
  297. package/dist/plugins/directives/trap.js +0 -48
  298. package/dist/plugins/directives/trap.js.map +0 -7
  299. package/dist/sigmx.auto.js +0 -5
  300. package/dist/utils/object.d.ts +0 -9
  301. package/dist/utils/object.js +0 -26
  302. package/dist/utils/object.js.map +0 -7
  303. package/dist/utils/text.d.ts +0 -7
  304. package/dist/utils/text.js +0 -15
  305. package/dist/utils/text.js.map +0 -7
  306. package/dist/utils/timing.d.ts +0 -14
  307. package/dist/utils/timing.js +0 -58
  308. package/dist/utils/timing.js.map +0 -7
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/core/signals.ts"],
4
- "sourcesContent": ["// Reactive primitives: push invalidation, pull recomputation, version-checked effects.\n// No DOM dependency, so this module is unit-testable in plain Node.\n// Members prefixed with `_` are internal and get mangled by the build.\n\ninterface Tracker {\n _deps: Map<Signal<any>, number>\n _invalidate(): void\n}\n\nlet active: Tracker | undefined\nlet owner: Effect | undefined\nlet depth = 0\nlet flushing = false\nconst queue = new Set<Effect>()\nconst settled = new Set<() => void>()\n\nexport class Signal<T> {\n /** @internal */ _v: T\n /** @internal */ _ver = 0\n /** @internal */ _subs = new Set<Tracker>()\n constructor(v: T) {\n this._v = v\n }\n get value(): T {\n if (active) {\n active._deps.set(this, this._ver)\n this._subs.add(active)\n }\n return this._v\n }\n set value(x: T) {\n if (!Object.is(x, this._v)) {\n this._v = x\n this.bump()\n }\n }\n /** Read without subscribing. */\n peek(): T {\n return this._v\n }\n /** Notify subscribers without replacing the value (after mutating an array or object in place). */\n bump(): void {\n this._ver++\n for (const s of [...this._subs]) s._invalidate()\n if (!depth) flush()\n }\n}\n\nconst release = (t: Tracker): void => {\n for (const d of t._deps.keys()) d._subs.delete(t)\n t._deps.clear()\n}\n\n/** True when any dependency's version moved since the tracker last ran. Refreshes computeds on the way. */\nconst stale = (t: Tracker): boolean => {\n for (const [d, seen] of t._deps) {\n if (d instanceof Computed) d._refresh()\n if (d._ver !== seen) return true\n }\n return false\n}\n\nconst capture = <R>(t: Tracker, fn: () => R): R => {\n release(t)\n const prev = active\n active = t\n try {\n return fn()\n } finally {\n active = prev\n }\n}\n\nexport class Computed<T> extends Signal<T> implements Tracker {\n _deps = new Map<Signal<any>, number>()\n /** @internal */ _dirty = true\n /** @internal */ _fn: () => T\n constructor(fn: () => T) {\n super(undefined as T)\n this._fn = fn\n }\n /** @internal */ _refresh(): void {\n if (!this._dirty) return\n this._dirty = false\n if (this._deps.size && !stale(this)) return\n const x = capture(this, this._fn)\n if (!Object.is(x, this._v)) {\n this._v = x\n this._ver++\n }\n }\n override get value(): T {\n this._refresh()\n return super.value\n }\n override set value(_: T) {\n throw new Error('computed signals are read-only')\n }\n override peek(): T {\n this._refresh()\n return this._v\n }\n _invalidate(): void {\n if (!this._dirty) {\n this._dirty = true\n for (const s of this._subs) s._invalidate()\n }\n }\n}\n\nclass Effect implements Tracker {\n _deps = new Map<Signal<any>, number>()\n _queued = false\n _dead = false\n _kids = new Set<Effect>()\n _fn: () => void\n _onError?: (e: unknown) => void\n constructor(fn: () => void, onError?: (e: unknown) => void) {\n this._fn = fn\n this._onError = onError\n }\n _invalidate(): void {\n if (!this._dead && !this._queued) {\n this._queued = true\n queue.add(this)\n }\n }\n _exec(): void {\n this._queued = false\n if (this._dead || (this._deps.size && !stale(this))) return\n for (const c of this._kids) c._dispose()\n this._kids.clear()\n const prevOwner = owner\n owner = this\n depth++\n try {\n capture(this, this._fn)\n } catch (e) {\n if (!this._onError) throw e\n this._onError(e)\n } finally {\n depth--\n owner = prevOwner\n }\n }\n _dispose(): void {\n this._dead = true\n release(this)\n for (const c of this._kids) c._dispose()\n this._kids.clear()\n queue.delete(this)\n }\n}\n\nexport const signal = <T>(value: T): Signal<T> => new Signal(value)\nexport const computed = <T>(fn: () => T): Computed<T> => new Computed(fn)\n\n/**\n * Run `fn` now and again whenever a signal it read changes. Effects created inside another\n * effect are disposed when the parent re-runs. Returns a disposer.\n */\nexport const effect = (fn: () => void, onError?: (e: unknown) => void): (() => void) => {\n const e = new Effect(fn, onError)\n owner?._kids.add(e)\n e._exec()\n if (!depth) flush()\n return () => e._dispose()\n}\n\n/** Coalesce many writes into one round of effect runs. */\nexport const batch = <R>(fn: () => R): R => {\n depth++\n try {\n return fn()\n } finally {\n if (!--depth) flush()\n }\n}\n\n/** Read signals inside `fn` without subscribing the current effect to them. */\nexport const untracked = <R>(fn: () => R): R => {\n const prev = active\n active = undefined\n try {\n return fn()\n } finally {\n active = prev\n }\n}\n\n/** Called after each flush once every queued effect has run. */\nexport const onSettled = (fn: () => void): (() => void) => {\n settled.add(fn)\n return () => settled.delete(fn)\n}\n\nexport const flush = (): void => {\n if (flushing || depth) return\n flushing = true\n try {\n let guard = 0\n while (queue.size) {\n if (++guard > 1e5) throw new Error('effect loop: a signal is written by an effect that reads it')\n const e: Effect = queue.values().next().value!\n queue.delete(e)\n e._exec()\n }\n } finally {\n flushing = false\n }\n for (const fn of settled) fn()\n}\n"],
5
- "mappings": "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",
6
- "names": ["_ver", "_subs", "_v", "_deps", "_invalidate", "_refresh", "_dirty", "_fn", "_queued", "_dead", "_kids", "_onError", "_exec", "_dispose"]
7
- }
@@ -1,32 +0,0 @@
1
- import { Signal } from './signals.js';
2
- import { type Filter } from '../utils/object.js';
3
- export type Patch = Record<string, any>;
4
- export interface Store {
5
- /** Value at a dotted path: a leaf value, a namespace proxy, or undefined. Reads subscribe. */
6
- get(path: string): any;
7
- /** Replace the value at a path. Plain objects become namespaces; null/undefined removes. */
8
- set(path: string, value: any): void;
9
- /** JSON merge-patch (RFC 7396): objects merge, null removes, everything else replaces. */
10
- merge(patch: Patch, options?: {
11
- at?: string;
12
- ifMissing?: boolean;
13
- }): void;
14
- remove(path: string): void;
15
- has(path: string): boolean;
16
- /** Install a computed (or any signal) as the leaf at a path. */
17
- define(path: string, node: Signal<any>): void;
18
- /** Leaf paths, optionally filtered. */
19
- paths(filter?: Filter): string[];
20
- /** Plain-object copy of the store or a namespace. */
21
- snapshot(filter?: Filter, options?: {
22
- at?: string;
23
- computed?: boolean;
24
- }): Patch;
25
- /** Called after each settled batch with the nested object of changed paths (null = removed). */
26
- onPatch(fn: (patch: Patch) => void): () => void;
27
- /** Root namespace proxy: `$.count`, `$.user.name = 'x'`, `JSON.stringify($)`. */
28
- readonly $: any;
29
- /** Identifier scope for compiled expressions: resolves `$count`, `$user`, and `$`. */
30
- readonly scope: object;
31
- }
32
- export declare const createStore: () => Store;
@@ -1,185 +0,0 @@
1
- import { Computed, Signal, batch, onSettled } from "./signals.js";
2
- import { expand, isPlain, toPredicate } from "../utils/object.js";
3
- const parentOf = (p) => p.slice(0, Math.max(0, p.lastIndexOf(".")));
4
- const nameOf = (p) => p.slice(p.lastIndexOf(".") + 1);
5
- const join = (a, b) => a ? `${a}.${b}` : b;
6
- const under = (p, at) => !at || p === at || p.startsWith(`${at}.`);
7
- const createStore = () => {
8
- const leaves = /* @__PURE__ */ new Map();
9
- const kids = /* @__PURE__ */ new Map([["", /* @__PURE__ */ new Set()]]);
10
- const shape = new Signal(0);
11
- const pending = /* @__PURE__ */ new Map();
12
- const listeners = /* @__PURE__ */ new Set();
13
- const nsCache = /* @__PURE__ */ new Map();
14
- const arrCache = /* @__PURE__ */ new WeakMap();
15
- const ensureNs = (p) => {
16
- let set2 = kids.get(p);
17
- if (!set2) {
18
- if (leaves.has(p)) dropLeaf(p);
19
- kids.set(p, set2 = /* @__PURE__ */ new Set());
20
- ensureNs(parentOf(p)).add(nameOf(p));
21
- shape.bump();
22
- }
23
- return set2;
24
- };
25
- const dropLeaf = (p) => {
26
- const s = leaves.get(p);
27
- if (!s) return;
28
- leaves.delete(p);
29
- kids.get(parentOf(p))?.delete(nameOf(p));
30
- pending.set(p, null);
31
- s.bump();
32
- shape.bump();
33
- };
34
- const dropNs = (p) => {
35
- const set2 = kids.get(p);
36
- if (!set2) return;
37
- for (const k of [...set2]) remove(join(p, k));
38
- if (p) {
39
- kids.delete(p);
40
- kids.get(parentOf(p))?.delete(nameOf(p));
41
- nsCache.delete(p);
42
- }
43
- shape.bump();
44
- };
45
- const remove = (p) => batch(() => {
46
- dropLeaf(p);
47
- dropNs(p);
48
- });
49
- const define = (p, node) => batch(() => {
50
- if (kids.has(p)) dropNs(p);
51
- const old = leaves.get(p);
52
- leaves.set(p, node);
53
- ensureNs(parentOf(p)).add(nameOf(p));
54
- old?.bump();
55
- shape.bump();
56
- });
57
- const set = (p, v) => batch(() => {
58
- if (v == null) return remove(p);
59
- if (isPlain(v)) {
60
- const names = ensureNs(p);
61
- for (const k of [...names]) if (!(k in v)) remove(join(p, k));
62
- for (const k in v) set(join(p, k), v[k]);
63
- return;
64
- }
65
- if (kids.has(p)) dropNs(p);
66
- const s = leaves.get(p);
67
- if (s instanceof Computed) throw new Error(`"${p}" is a computed signal and cannot be assigned`);
68
- if (s) {
69
- if (Object.is(s.peek(), v)) return;
70
- s.value = v;
71
- } else {
72
- define(p, new Signal(v));
73
- }
74
- pending.set(p, v);
75
- });
76
- const merge = (patch, { at = "", ifMissing = false } = {}) => batch(() => {
77
- if (!isPlain(patch)) return;
78
- ensureNs(at);
79
- for (const k in patch) {
80
- const p = join(at, k);
81
- const v = patch[k];
82
- if (v === null) {
83
- if (!ifMissing) remove(p);
84
- } else if (isPlain(v)) {
85
- merge(v, { at: p, ifMissing });
86
- } else if (!(ifMissing && (leaves.has(p) || kids.has(p))) && !(leaves.get(p) instanceof Computed)) {
87
- set(p, v);
88
- }
89
- }
90
- });
91
- const wrapArray = (raw, s, p) => {
92
- let px = arrCache.get(raw);
93
- if (!px) {
94
- const touch = () => {
95
- pending.set(p, raw);
96
- s.bump();
97
- };
98
- px = new Proxy(raw, {
99
- set: (t, k, v) => (t[k] = v, touch(), true),
100
- deleteProperty: (t, k) => (delete t[k], touch(), true)
101
- });
102
- arrCache.set(raw, px);
103
- }
104
- return px;
105
- };
106
- const get = (p) => {
107
- const s = leaves.get(p);
108
- if (s) {
109
- const v = s.value;
110
- return Array.isArray(v) ? wrapArray(v, s, p) : v;
111
- }
112
- if (kids.has(p)) return ns(p);
113
- shape.value;
114
- return void 0;
115
- };
116
- const ns = (p) => {
117
- let px = nsCache.get(p);
118
- if (!px) {
119
- const names = () => (shape.value, kids.get(p));
120
- px = new Proxy(/* @__PURE__ */ Object.create(null), {
121
- get: (_, k) => typeof k !== "string" ? void 0 : k === "toJSON" ? () => snapshot(void 0, { at: p }) : get(join(p, k)),
122
- set: (_, k, v) => (typeof k === "string" && set(join(p, k), v), true),
123
- deleteProperty: (_, k) => (typeof k === "string" && remove(join(p, k)), true),
124
- has: (_, k) => typeof k === "string" && !!names()?.has(k),
125
- ownKeys: () => [...names() ?? []],
126
- getOwnPropertyDescriptor: (_, k) => typeof k === "string" && names()?.has(k) ? { enumerable: true, configurable: true, writable: true, value: get(join(p, k)) } : void 0
127
- });
128
- nsCache.set(p, px);
129
- }
130
- return px;
131
- };
132
- const scope = new Proxy(/* @__PURE__ */ Object.create(null), {
133
- has: (_, k) => typeof k === "string" && k[0] === "$",
134
- get: (_, k) => typeof k !== "string" ? void 0 : k === "$" ? ns("") : get(k.slice(1)),
135
- set: (_, k, v) => {
136
- if (typeof k === "string") k === "$" ? merge(v) : set(k.slice(1), v);
137
- return true;
138
- }
139
- });
140
- const paths = (filter) => {
141
- shape.value;
142
- const ok = toPredicate(filter);
143
- return [...leaves.keys()].filter(ok);
144
- };
145
- const snapshot = (filter, { at = "", computed = true } = {}) => {
146
- shape.value;
147
- const ok = toPredicate(filter);
148
- const out = {};
149
- const rel = (p) => at ? p.slice(at.length + 1) : p;
150
- for (const [p, s] of leaves) {
151
- if (!under(p, at) || !ok(p) || !computed && s instanceof Computed) continue;
152
- expand(out, rel(p), s.value);
153
- }
154
- for (const p of kids.keys()) {
155
- if (p && p !== at && under(p, at) && ok(p) && !kids.get(p).size) expand(out, rel(p), {});
156
- }
157
- return out;
158
- };
159
- onSettled(() => {
160
- if (!pending.size) return;
161
- const patch = {};
162
- for (const [p, v] of pending) expand(patch, p, v);
163
- pending.clear();
164
- for (const fn of listeners) fn(patch);
165
- });
166
- return {
167
- get,
168
- set,
169
- merge,
170
- remove,
171
- has: (p) => leaves.has(p) || kids.has(p),
172
- define,
173
- paths,
174
- snapshot,
175
- onPatch: (fn) => (listeners.add(fn), () => listeners.delete(fn)),
176
- get $() {
177
- return ns("");
178
- },
179
- scope
180
- };
181
- };
182
- export {
183
- createStore
184
- };
185
- //# sourceMappingURL=store.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/core/store.ts"],
4
- "sourcesContent": ["// Path-keyed signal store with JSON merge-patch semantics. No DOM dependency.\nimport { Computed, Signal, batch, onSettled } from './signals.js'\nimport { expand, isPlain, toPredicate, type Filter } from '../utils/object.js'\n\nexport type Patch = Record<string, any>\n\nexport interface Store {\n /** Value at a dotted path: a leaf value, a namespace proxy, or undefined. Reads subscribe. */\n get(path: string): any\n /** Replace the value at a path. Plain objects become namespaces; null/undefined removes. */\n set(path: string, value: any): void\n /** JSON merge-patch (RFC 7396): objects merge, null removes, everything else replaces. */\n merge(patch: Patch, options?: { at?: string; ifMissing?: boolean }): void\n remove(path: string): void\n has(path: string): boolean\n /** Install a computed (or any signal) as the leaf at a path. */\n define(path: string, node: Signal<any>): void\n /** Leaf paths, optionally filtered. */\n paths(filter?: Filter): string[]\n /** Plain-object copy of the store or a namespace. */\n snapshot(filter?: Filter, options?: { at?: string; computed?: boolean }): Patch\n /** Called after each settled batch with the nested object of changed paths (null = removed). */\n onPatch(fn: (patch: Patch) => void): () => void\n /** Root namespace proxy: `$.count`, `$.user.name = 'x'`, `JSON.stringify($)`. */\n readonly $: any\n /** Identifier scope for compiled expressions: resolves `$count`, `$user`, and `$`. */\n readonly scope: object\n}\n\nconst parentOf = (p: string): string => p.slice(0, Math.max(0, p.lastIndexOf('.')))\nconst nameOf = (p: string): string => p.slice(p.lastIndexOf('.') + 1)\nconst join = (a: string, b: string): string => (a ? `${a}.${b}` : b)\nconst under = (p: string, at: string): boolean => !at || p === at || p.startsWith(`${at}.`)\n\nexport const createStore = (): Store => {\n const leaves = new Map<string, Signal<any>>()\n const kids = new Map<string, Set<string>>([['', new Set()]])\n const shape = new Signal(0) // bumped on any structural change; enumerations subscribe to it\n const pending = new Map<string, any>()\n const listeners = new Set<(p: Patch) => void>()\n const nsCache = new Map<string, any>()\n const arrCache = new WeakMap<object, any>()\n\n const ensureNs = (p: string): Set<string> => {\n let set = kids.get(p)\n if (!set) {\n if (leaves.has(p)) dropLeaf(p)\n kids.set(p, (set = new Set()))\n ensureNs(parentOf(p)).add(nameOf(p))\n shape.bump()\n }\n return set\n }\n\n const dropLeaf = (p: string): void => {\n const s = leaves.get(p)\n if (!s) return\n leaves.delete(p)\n kids.get(parentOf(p))?.delete(nameOf(p))\n pending.set(p, null)\n s.bump()\n shape.bump()\n }\n\n const dropNs = (p: string): void => {\n const set = kids.get(p)\n if (!set) return\n for (const k of [...set]) remove(join(p, k))\n if (p) {\n kids.delete(p)\n kids.get(parentOf(p))?.delete(nameOf(p))\n nsCache.delete(p)\n }\n shape.bump()\n }\n\n const remove = (p: string): void =>\n batch(() => {\n dropLeaf(p)\n dropNs(p)\n })\n\n const define = (p: string, node: Signal<any>): void =>\n batch(() => {\n if (kids.has(p)) dropNs(p)\n const old = leaves.get(p)\n leaves.set(p, node)\n ensureNs(parentOf(p)).add(nameOf(p))\n old?.bump()\n shape.bump()\n })\n\n const set = (p: string, v: any): void =>\n batch(() => {\n if (v == null) return remove(p)\n if (isPlain(v)) {\n const names = ensureNs(p)\n for (const k of [...names]) if (!(k in v)) remove(join(p, k))\n for (const k in v) set(join(p, k), v[k])\n return\n }\n if (kids.has(p)) dropNs(p)\n const s = leaves.get(p)\n if (s instanceof Computed) throw new Error(`\"${p}\" is a computed signal and cannot be assigned`)\n if (s) {\n if (Object.is(s.peek(), v)) return\n s.value = v\n } else {\n define(p, new Signal(v))\n }\n pending.set(p, v)\n })\n\n const merge = (patch: Patch, { at = '', ifMissing = false } = {}): void =>\n batch(() => {\n if (!isPlain(patch)) return\n ensureNs(at)\n for (const k in patch) {\n const p = join(at, k)\n const v = patch[k]\n if (v === null) {\n if (!ifMissing) remove(p)\n } else if (isPlain(v)) {\n merge(v, { at: p, ifMissing })\n } else if (!(ifMissing && (leaves.has(p) || kids.has(p))) && !(leaves.get(p) instanceof Computed)) {\n set(p, v) // computed leaves are skipped: patches from storage or a server cannot overwrite them\n }\n }\n })\n\n /** Arrays are returned through a proxy so in-place mutation notifies the leaf. */\n const wrapArray = (raw: any[], s: Signal<any>, p: string): any => {\n let px = arrCache.get(raw)\n if (!px) {\n const touch = () => {\n pending.set(p, raw)\n s.bump()\n }\n px = new Proxy(raw, {\n set: (t, k, v) => ((t as any)[k] = v, touch(), true),\n deleteProperty: (t, k) => (delete (t as any)[k], touch(), true),\n })\n arrCache.set(raw, px)\n }\n return px\n }\n\n const get = (p: string): any => {\n const s = leaves.get(p)\n if (s) {\n const v = s.value\n return Array.isArray(v) ? wrapArray(v, s, p) : v\n }\n if (kids.has(p)) return ns(p)\n shape.value // subscribe, so creating this path later re-runs the reader\n return undefined\n }\n\n const ns = (p: string): any => {\n let px = nsCache.get(p)\n if (!px) {\n const names = () => (shape.value, kids.get(p))\n px = new Proxy(Object.create(null), {\n get: (_, k) =>\n typeof k !== 'string' ? undefined : k === 'toJSON' ? () => snapshot(undefined, { at: p }) : get(join(p, k)),\n set: (_, k, v) => (typeof k === 'string' && set(join(p, k), v), true),\n deleteProperty: (_, k) => (typeof k === 'string' && remove(join(p, k)), true),\n has: (_, k) => typeof k === 'string' && !!names()?.has(k),\n ownKeys: () => [...(names() ?? [])],\n getOwnPropertyDescriptor: (_, k) =>\n typeof k === 'string' && names()?.has(k)\n ? { enumerable: true, configurable: true, writable: true, value: get(join(p, k)) }\n : undefined,\n })\n nsCache.set(p, px)\n }\n return px\n }\n\n const scope = new Proxy(Object.create(null), {\n has: (_, k) => typeof k === 'string' && k[0] === '$',\n get: (_, k) => (typeof k !== 'string' ? undefined : k === '$' ? ns('') : get(k.slice(1))),\n set: (_, k, v) => {\n if (typeof k === 'string') k === '$' ? merge(v) : set(k.slice(1), v)\n return true\n },\n })\n\n const paths = (filter?: Filter): string[] => {\n shape.value\n const ok = toPredicate(filter)\n return [...leaves.keys()].filter(ok)\n }\n\n const snapshot = (filter?: Filter, { at = '', computed = true } = {}): Patch => {\n shape.value\n const ok = toPredicate(filter)\n const out: Patch = {}\n const rel = (p: string) => (at ? p.slice(at.length + 1) : p)\n for (const [p, s] of leaves) {\n if (!under(p, at) || !ok(p) || (!computed && s instanceof Computed)) continue\n expand(out, rel(p), s.value)\n }\n // Empty namespaces still appear as `{}`.\n for (const p of kids.keys()) {\n if (p && p !== at && under(p, at) && ok(p) && !kids.get(p)!.size) expand(out, rel(p), {})\n }\n return out\n }\n\n onSettled(() => {\n if (!pending.size) return\n const patch: Patch = {}\n for (const [p, v] of pending) expand(patch, p, v)\n pending.clear()\n for (const fn of listeners) fn(patch)\n })\n\n return {\n get,\n set,\n merge,\n remove,\n has: (p) => leaves.has(p) || kids.has(p),\n define,\n paths,\n snapshot,\n onPatch: (fn) => (listeners.add(fn), () => listeners.delete(fn)),\n get $() {\n return ns('')\n },\n scope,\n }\n}\n"],
5
- "mappings": "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",
6
- "names": ["set"]
7
- }
@@ -1,101 +0,0 @@
1
- import type { Compiler } from './expr.js';
2
- import type { Store } from './store.js';
3
- import type { CaseStyle } from '../utils/text.js';
4
- export type El = HTMLElement | SVGElement | MathMLElement;
5
- export type Mods = Map<string, string[]>;
6
- export interface Runtime {
7
- /** Attribute prefixes being scanned; the first is primary. */
8
- readonly prefixes: readonly string[];
9
- /** Full attribute name under the primary prefix: attr('on') → 'data-on'. */
10
- attr(name: string): string;
11
- readonly store: Store;
12
- readonly compiler: Compiler;
13
- /** Dispatch a `sigmx-<type>` CustomEvent on `document`. */
14
- emit(type: string, detail?: unknown): void;
15
- /** Call a registered action by name. */
16
- call(name: string, ctx: ActionCtx, args: any[]): any;
17
- readonly attributes: Record<string, AttributePlugin>;
18
- readonly actions: Record<string, ActionPlugin>;
19
- readonly handlers: Record<string, HandlerPlugin>;
20
- }
21
- export interface Ctx {
22
- el: El;
23
- /** Plugin name, e.g. 'on'. */
24
- plugin: string;
25
- /** Full attribute name as written, e.g. 'data-on:click__debounce.300ms'. */
26
- attr: string;
27
- /** The `:key` part, if any. */
28
- key: string | undefined;
29
- /** Attribute value (the expression source). */
30
- value: string;
31
- mods: Mods;
32
- /** The key recased per `__case.<style>`, defaulting to `style`. */
33
- cased(style?: CaseStyle): string;
34
- /** Evaluate the attribute expression. `evt` and any `args` are exposed to it by name. */
35
- evaluate(evt?: Event, ...args: any[]): any;
36
- /** Reactive effect disposed with the attribute. Errors are reported, not thrown. */
37
- effect(fn: () => void): void;
38
- /** addEventListener with automatic removal on cleanup. */
39
- listen(target: EventTarget, type: string, fn: (e: any) => void, options?: AddEventListenerOptions): void;
40
- cleanup(fn: () => void): void;
41
- error(message: string, extra?: Record<string, unknown>): Error;
42
- store: Store;
43
- runtime: Runtime;
44
- }
45
- export interface ActionCtx {
46
- el: El;
47
- evt?: Event;
48
- store: Store;
49
- runtime: Runtime;
50
- error(message: string, extra?: Record<string, unknown>): Error;
51
- }
52
- export interface AttributePlugin {
53
- type: 'attribute';
54
- name: string;
55
- key?: 'required' | 'forbidden';
56
- value?: 'required' | 'forbidden';
57
- /** Whether the expression yields a value (default) or is a statement body. */
58
- returns?: boolean;
59
- /** Extra parameter names the expression can reference, in the order passed to `evaluate`. */
60
- args?: string[];
61
- mount(ctx: Ctx): void | (() => void);
62
- }
63
- export interface ActionPlugin {
64
- type: 'action';
65
- name: string;
66
- call(ctx: ActionCtx, ...args: any[]): any;
67
- }
68
- /** Handles a named server event (for example a streamed patch). */
69
- export interface HandlerPlugin {
70
- type: 'handler';
71
- name: string;
72
- handle(runtime: Runtime, data: Record<string, string>): void;
73
- }
74
- export type Plugin = AttributePlugin | ActionPlugin | HandlerPlugin;
75
- export interface SigmxOptions {
76
- plugins?: Plugin[];
77
- /** Attribute prefix or prefixes to scan. Default 'data-'. */
78
- prefix?: string | string[];
79
- compile?: Compiler;
80
- /** Share a store between instances. */
81
- store?: Store;
82
- /** Called for any plugin or expression error. Default: console.error. */
83
- onError?: (error: unknown, info: {
84
- plugin?: string;
85
- el?: Element;
86
- attr?: string;
87
- }) => void;
88
- /** Scan `document.documentElement` on creation (after DOM ready). Default true. */
89
- autoStart?: boolean;
90
- }
91
- export interface Sigmx {
92
- runtime: Runtime;
93
- store: Store;
94
- /** Root namespace proxy for use from JavaScript: `sigmx.$.count++`. */
95
- $: any;
96
- /** Mount plugins under `root` and observe it for changes. */
97
- apply(root?: El | ShadowRoot, observe?: boolean): void;
98
- /** Register more plugins; attribute plugins are applied to observed roots immediately. */
99
- use(...plugins: Plugin[]): void;
100
- destroy(): void;
101
- }
@@ -1 +0,0 @@
1
- //# sourceMappingURL=types.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": [],
4
- "sourcesContent": [],
5
- "mappings": "",
6
- "names": []
7
- }
@@ -1,2 +0,0 @@
1
- /** `@clipboard(text, isBase64?)` copies text; base64 input is decoded first. */
2
- export declare const clipboard: import("../../core/types.js").ActionPlugin;
@@ -1,11 +0,0 @@
1
- import { action } from "../../core/index.js";
2
- const clipboard = action({
3
- name: "clipboard",
4
- call: (_, text, base64 = false) => navigator.clipboard.writeText(
5
- base64 ? new TextDecoder().decode(Uint8Array.from(atob(text), (c) => c.charCodeAt(0))) : text
6
- )
7
- });
8
- export {
9
- clipboard
10
- };
11
- //# sourceMappingURL=clipboard.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/plugins/actions/clipboard.ts"],
4
- "sourcesContent": ["import { action } from '../../core/index.js'\n\n/** `@clipboard(text, isBase64?)` copies text; base64 input is decoded first. */\nexport const clipboard = action({\n name: 'clipboard',\n call: (_, text: string, base64 = false) =>\n navigator.clipboard.writeText(\n base64 ? new TextDecoder().decode(Uint8Array.from(atob(text), (c) => c.charCodeAt(0))) : text,\n ),\n})\n"],
5
- "mappings": "AAAA,SAAS,cAAc;AAGhB,MAAM,YAAY,OAAO;AAAA,EAC9B,MAAM;AAAA,EACN,MAAM,CAAC,GAAG,MAAc,SAAS,UAC/B,UAAU,UAAU;AAAA,IAClB,SAAS,IAAI,YAAY,EAAE,OAAO,WAAW,KAAK,KAAK,IAAI,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC,IAAI;AAAA,EAC3F;AACJ,CAAC;",
6
- "names": []
7
- }
@@ -1,2 +0,0 @@
1
- /** Map `v` from [inMin, inMax] onto [outMin, outMax]; optionally clamp and round. */
2
- export declare const fit: import("../../core/types.js").ActionPlugin;
@@ -1,14 +0,0 @@
1
- import { action } from "../../core/index.js";
2
- const fit = action({
3
- name: "fit",
4
- call: (_, v, inMin, inMax, outMin, outMax, clamp = false, round = false) => {
5
- let t = (v - inMin) / (inMax - inMin);
6
- if (clamp) t = Math.min(1, Math.max(0, t));
7
- const out = outMin + t * (outMax - outMin);
8
- return round ? Math.round(out) : out;
9
- }
10
- });
11
- export {
12
- fit
13
- };
14
- //# sourceMappingURL=fit.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/plugins/actions/fit.ts"],
4
- "sourcesContent": ["import { action } from '../../core/index.js'\n\n/** Map `v` from [inMin, inMax] onto [outMin, outMax]; optionally clamp and round. */\nexport const fit = action({\n name: 'fit',\n call: (_, v: number, inMin: number, inMax: number, outMin: number, outMax: number, clamp = false, round = false) => {\n let t = (v - inMin) / (inMax - inMin)\n if (clamp) t = Math.min(1, Math.max(0, t))\n const out = outMin + t * (outMax - outMin)\n return round ? Math.round(out) : out\n },\n})\n"],
5
- "mappings": "AAAA,SAAS,cAAc;AAGhB,MAAM,MAAM,OAAO;AAAA,EACxB,MAAM;AAAA,EACN,MAAM,CAAC,GAAG,GAAW,OAAe,OAAe,QAAgB,QAAgB,QAAQ,OAAO,QAAQ,UAAU;AAClH,QAAI,KAAK,IAAI,UAAU,QAAQ;AAC/B,QAAI,MAAO,KAAI,KAAK,IAAI,GAAG,KAAK,IAAI,GAAG,CAAC,CAAC;AACzC,UAAM,MAAM,SAAS,KAAK,SAAS;AACnC,WAAO,QAAQ,KAAK,MAAM,GAAG,IAAI;AAAA,EACnC;AACF,CAAC;",
6
- "names": []
7
- }
@@ -1,2 +0,0 @@
1
- /** `@intl('number', 1234.5, { style: 'currency', currency: 'USD' }, 'en-US')`. */
2
- export declare const intl: import("../../core/types.js").ActionPlugin;
@@ -1,21 +0,0 @@
1
- import { action } from "../../core/index.js";
2
- const formats = {
3
- number: (l, v, o) => new Intl.NumberFormat(l, o).format(v),
4
- datetime: (l, v, o) => new Intl.DateTimeFormat(l, o).format(v),
5
- pluralRules: (l, v, o) => new Intl.PluralRules(l, o).select(v),
6
- relativeTime: (l, v, o) => new Intl.RelativeTimeFormat(l, o).format(v[0], v[1]),
7
- list: (l, v, o) => new Intl.ListFormat(l, o).format(v),
8
- displayNames: (l, v, o) => new Intl.DisplayNames(l, o).of(v) ?? ""
9
- };
10
- const intl = action({
11
- name: "intl",
12
- call: ({ error }, type, value, options, locale) => {
13
- const f = formats[type];
14
- if (!f) throw error(`unknown @intl type "${type}"`);
15
- return f(locale, value, options);
16
- }
17
- });
18
- export {
19
- intl
20
- };
21
- //# sourceMappingURL=intl.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/plugins/actions/intl.ts"],
4
- "sourcesContent": ["import { action } from '../../core/index.js'\n\ntype Fmt = (locale: string | string[] | undefined, value: any, options: any) => string\nconst formats: Record<string, Fmt> = {\n number: (l, v, o) => new Intl.NumberFormat(l, o).format(v),\n datetime: (l, v, o) => new Intl.DateTimeFormat(l, o).format(v),\n pluralRules: (l, v, o) => new Intl.PluralRules(l, o).select(v),\n relativeTime: (l, v, o) => new Intl.RelativeTimeFormat(l, o).format(v[0], v[1]),\n list: (l, v, o) => new Intl.ListFormat(l, o).format(v),\n displayNames: (l, v, o) => new Intl.DisplayNames(l, o).of(v) ?? '',\n}\n\n/** `@intl('number', 1234.5, { style: 'currency', currency: 'USD' }, 'en-US')`. */\nexport const intl = action({\n name: 'intl',\n call: ({ error }, type: string, value: unknown, options?: Record<string, unknown>, locale?: string | string[]) => {\n const f = formats[type]\n if (!f) throw error(`unknown @intl type \"${type}\"`)\n return f(locale, value, options)\n },\n})\n"],
5
- "mappings": "AAAA,SAAS,cAAc;AAGvB,MAAM,UAA+B;AAAA,EACnC,QAAQ,CAAC,GAAG,GAAG,MAAM,IAAI,KAAK,aAAa,GAAG,CAAC,EAAE,OAAO,CAAC;AAAA,EACzD,UAAU,CAAC,GAAG,GAAG,MAAM,IAAI,KAAK,eAAe,GAAG,CAAC,EAAE,OAAO,CAAC;AAAA,EAC7D,aAAa,CAAC,GAAG,GAAG,MAAM,IAAI,KAAK,YAAY,GAAG,CAAC,EAAE,OAAO,CAAC;AAAA,EAC7D,cAAc,CAAC,GAAG,GAAG,MAAM,IAAI,KAAK,mBAAmB,GAAG,CAAC,EAAE,OAAO,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AAAA,EAC9E,MAAM,CAAC,GAAG,GAAG,MAAM,IAAI,KAAK,WAAW,GAAG,CAAC,EAAE,OAAO,CAAC;AAAA,EACrD,cAAc,CAAC,GAAG,GAAG,MAAM,IAAI,KAAK,aAAa,GAAG,CAAC,EAAE,GAAG,CAAC,KAAK;AAClE;AAGO,MAAM,OAAO,OAAO;AAAA,EACzB,MAAM;AAAA,EACN,MAAM,CAAC,EAAE,MAAM,GAAG,MAAc,OAAgB,SAAmC,WAA+B;AAChH,UAAM,IAAI,QAAQ,IAAI;AACtB,QAAI,CAAC,EAAG,OAAM,MAAM,uBAAuB,IAAI,GAAG;AAClD,WAAO,EAAE,QAAQ,OAAO,OAAO;AAAA,EACjC;AACF,CAAC;",
6
- "names": []
7
- }
@@ -1,2 +0,0 @@
1
- /** `@peek(() => $x)` reads signals without subscribing the surrounding effect. */
2
- export declare const peek: import("../../core/types.js").ActionPlugin;
@@ -1,6 +0,0 @@
1
- import { action, untracked } from "../../core/index.js";
2
- const peek = action({ name: "peek", call: (_, fn) => untracked(fn) });
3
- export {
4
- peek
5
- };
6
- //# sourceMappingURL=peek.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/plugins/actions/peek.ts"],
4
- "sourcesContent": ["import { action, untracked } from '../../core/index.js'\n\n/** `@peek(() => $x)` reads signals without subscribing the surrounding effect. */\nexport const peek = action({ name: 'peek', call: (_, fn: () => unknown) => untracked(fn) })\n"],
5
- "mappings": "AAAA,SAAS,QAAQ,iBAAiB;AAG3B,MAAM,OAAO,OAAO,EAAE,MAAM,QAAQ,MAAM,CAAC,GAAG,OAAsB,UAAU,EAAE,EAAE,CAAC;",
6
- "names": []
7
- }
@@ -1,2 +0,0 @@
1
- /** `@setAll(value, { include: /^form\./ })` assigns every matching signal. */
2
- export declare const setAll: import("../../core/types.js").ActionPlugin;
@@ -1,11 +0,0 @@
1
- import { action, batch, untracked } from "../../core/index.js";
2
- const setAll = action({
3
- name: "setAll",
4
- call: ({ store }, value, filter) => batch(() => untracked(() => {
5
- for (const p of store.paths(filter)) store.set(p, value);
6
- }))
7
- });
8
- export {
9
- setAll
10
- };
11
- //# sourceMappingURL=setAll.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/plugins/actions/setAll.ts"],
4
- "sourcesContent": ["import { action, batch, untracked, type Filter } from '../../core/index.js'\n\n/** `@setAll(value, { include: /^form\\./ })` assigns every matching signal. */\nexport const setAll = action({\n name: 'setAll',\n call: ({ store }, value: unknown, filter?: Filter) =>\n batch(() => untracked(() => { for (const p of store.paths(filter)) store.set(p, value) })),\n})\n"],
5
- "mappings": "AAAA,SAAS,QAAQ,OAAO,iBAA8B;AAG/C,MAAM,SAAS,OAAO;AAAA,EAC3B,MAAM;AAAA,EACN,MAAM,CAAC,EAAE,MAAM,GAAG,OAAgB,WAChC,MAAM,MAAM,UAAU,MAAM;AAAE,eAAW,KAAK,MAAM,MAAM,MAAM,EAAG,OAAM,IAAI,GAAG,KAAK;AAAA,EAAE,CAAC,CAAC;AAC7F,CAAC;",
6
- "names": []
7
- }
@@ -1,2 +0,0 @@
1
- /** `@toggleAll({ include: /^flags\./ })` negates every matching boolean signal. */
2
- export declare const toggleAll: import("../../core/types.js").ActionPlugin;
@@ -1,11 +0,0 @@
1
- import { action, batch, untracked } from "../../core/index.js";
2
- const toggleAll = action({
3
- name: "toggleAll",
4
- call: ({ store }, filter) => batch(() => untracked(() => {
5
- for (const p of store.paths(filter)) store.set(p, !store.get(p));
6
- }))
7
- });
8
- export {
9
- toggleAll
10
- };
11
- //# sourceMappingURL=toggleAll.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/plugins/actions/toggleAll.ts"],
4
- "sourcesContent": ["import { action, batch, untracked, type Filter } from '../../core/index.js'\n\n/** `@toggleAll({ include: /^flags\\./ })` negates every matching boolean signal. */\nexport const toggleAll = action({\n name: 'toggleAll',\n call: ({ store }, filter?: Filter) =>\n batch(() => untracked(() => { for (const p of store.paths(filter)) store.set(p, !store.get(p)) })),\n})\n"],
5
- "mappings": "AAAA,SAAS,QAAQ,OAAO,iBAA8B;AAG/C,MAAM,YAAY,OAAO;AAAA,EAC9B,MAAM;AAAA,EACN,MAAM,CAAC,EAAE,MAAM,GAAG,WAChB,MAAM,MAAM,UAAU,MAAM;AAAE,eAAW,KAAK,MAAM,MAAM,MAAM,EAAG,OAAM,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC,CAAC;AAAA,EAAE,CAAC,CAAC;AACrG,CAAC;",
6
- "names": []
7
- }
@@ -1,2 +0,0 @@
1
- /** `attr:title="expr"` or `attr="{ title: expr }"`. true → present, false/null → removed. */
2
- export declare const attr: import("../../core/types.js").AttributePlugin;
@@ -1,20 +0,0 @@
1
- import { attribute } from "../../core/index.js";
2
- const put = (el, name, v) => {
3
- if (v === false || v == null) el.removeAttribute(name);
4
- else el.setAttribute(name, v === true ? "" : typeof v === "object" ? JSON.stringify(v) : String(v));
5
- };
6
- const attr = attribute({
7
- name: "attr",
8
- value: "required",
9
- mount({ el, key, cased, evaluate, effect }) {
10
- effect(() => {
11
- if (key) return put(el, cased("kebab"), evaluate());
12
- const map = evaluate();
13
- for (const k in map) put(el, k, map[k]);
14
- });
15
- }
16
- });
17
- export {
18
- attr
19
- };
20
- //# sourceMappingURL=attr.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/plugins/attributes/attr.ts"],
4
- "sourcesContent": ["import { attribute } from '../../core/index.js'\n\nconst put = (el: Element, name: string, v: unknown) => {\n if (v === false || v == null) el.removeAttribute(name)\n else el.setAttribute(name, v === true ? '' : typeof v === 'object' ? JSON.stringify(v) : String(v))\n}\n\n/** `attr:title=\"expr\"` or `attr=\"{ title: expr }\"`. true \u2192 present, false/null \u2192 removed. */\nexport const attr = attribute({\n name: 'attr',\n value: 'required',\n mount({ el, key, cased, evaluate, effect }) {\n effect(() => {\n if (key) return put(el, cased('kebab'), evaluate())\n const map = evaluate()\n for (const k in map) put(el, k, map[k])\n })\n },\n})\n"],
5
- "mappings": "AAAA,SAAS,iBAAiB;AAE1B,MAAM,MAAM,CAAC,IAAa,MAAc,MAAe;AACrD,MAAI,MAAM,SAAS,KAAK,KAAM,IAAG,gBAAgB,IAAI;AAAA,MAChD,IAAG,aAAa,MAAM,MAAM,OAAO,KAAK,OAAO,MAAM,WAAW,KAAK,UAAU,CAAC,IAAI,OAAO,CAAC,CAAC;AACpG;AAGO,MAAM,OAAO,UAAU;AAAA,EAC5B,MAAM;AAAA,EACN,OAAO;AAAA,EACP,MAAM,EAAE,IAAI,KAAK,OAAO,UAAU,OAAO,GAAG;AAC1C,WAAO,MAAM;AACX,UAAI,IAAK,QAAO,IAAI,IAAI,MAAM,OAAO,GAAG,SAAS,CAAC;AAClD,YAAM,MAAM,SAAS;AACrB,iBAAW,KAAK,IAAK,KAAI,IAAI,GAAG,IAAI,CAAC,CAAC;AAAA,IACxC,CAAC;AAAA,EACH;AACF,CAAC;",
6
- "names": []
7
- }
@@ -1,6 +0,0 @@
1
- /**
2
- * Two-way binding: `bind:name` or `bind="name"`. Creates the signal from the element when missing.
3
- * Checkbox groups bind to arrays, radios to the checked value, `select multiple` to arrays.
4
- * `__prop.value` binds a custom element property; `__event.change` picks the events to listen for.
5
- */
6
- export declare const bind: import("../../core/types.js").AttributePlugin;