balises 0.7.0 → 0.7.2

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.
package/README.md CHANGED
@@ -689,23 +689,23 @@ Performance comparison of Balises against other popular reactive libraries. Benc
689
689
  ┌───────┬───────────────────┬───────┬───────────────┬──────────────────┐
690
690
  │ Rank │ Library │ Score │ Avg Time (μs) │ vs Fastest │
691
691
  ├───────┼───────────────────┼───────┼───────────────┼──────────────────┤
692
- │ #1 🏆 │ preact@1.12.1 │ 0.000 │ 63.51 │ 1.00x (baseline) │
692
+ │ #1 🏆 │ preact@1.12.1 │ 0.000 │ 64.17 │ 1.00x (baseline) │
693
693
  ├───────┼───────────────────┼───────┼───────────────┼──────────────────┤
694
- │ #2 │ balises@0.6.0 │ 0.02386.17 │ 1.36x
694
+ │ #2 │ balises@0.7.0 │ 0.03385.48 │ 1.33x
695
695
  ├───────┼───────────────────┼───────┼───────────────┼──────────────────┤
696
- │ #3 │ vue@3.5.26 │ 0.09395.06 │ 1.50x
696
+ │ #3 │ vue@3.5.26 │ 0.09594.27 │ 1.47x
697
697
  ├───────┼───────────────────┼───────┼───────────────┼──────────────────┤
698
- │ #4 │ maverick@6.0.0 │ 0.143122.79 │ 1.93x
698
+ │ #4 │ maverick@6.0.0 │ 0.146124.89 │ 1.95x
699
699
  ├───────┼───────────────────┼───────┼───────────────┼──────────────────┤
700
- │ #5 │ usignal@0.10.0 │ 0.180134.11 │ 2.11x
700
+ │ #5 │ usignal@0.10.0 │ 0.175133.48 │ 2.08x
701
701
  ├───────┼───────────────────┼───────┼───────────────┼──────────────────┤
702
- │ #6 │ angular@19.2.17 │ 0.201154.19 │ 2.43x
702
+ │ #6 │ angular@19.2.17 │ 0.214169.86 │ 2.65x
703
703
  ├───────┼───────────────────┼───────┼───────────────┼──────────────────┤
704
- │ #7 │ solid@1.9.10 │ 0.340 │ 260.44 │ 4.10x
704
+ │ #7 │ solid@1.9.10 │ 0.343 │ 260.01 │ 4.05x
705
705
  ├───────┼───────────────────┼───────┼───────────────┼──────────────────┤
706
- │ #8 │ mobx@6.15.0 │ 0.857896.48 │ 14.12x
706
+ │ #8 │ mobx@6.15.0 │ 0.854910.41 │ 14.19x
707
707
  ├───────┼───────────────────┼───────┼───────────────┼──────────────────┤
708
- │ #9 │ hyperactiv@0.11.3 │ 1.000 │ 1029.95 │ 16.22x
708
+ │ #9 │ hyperactiv@0.11.3 │ 1.000 │ 1051.12 │ 16.38x
709
709
  └───────┴───────────────────┴───────┴───────────────┴──────────────────┘
710
710
  ```
711
711
 
@@ -715,19 +715,19 @@ Performance comparison of Balises against other popular reactive libraries. Benc
715
715
  ┌───────────────────┬───────────────┬─────────────┬────────────────┬────────────────────┬─────────────┬──────────────┬──────────┐
716
716
  │ Library │ S1: 1: Layers │ S2: 2: Wide │ S3: 3: Diamond │ S4: 4: Conditional │ S5: 5: List │ S6: 6: Batch │ Avg Rank │
717
717
  ├───────────────────┼───────────────┼─────────────┼────────────────┼────────────────────┼─────────────┼──────────────┼──────────┤
718
- │ preact@1.12.1 │ #1 🏆 │ #2 │ #2 │ #1 🏆 │ #1 🏆 │ #2 │ 1.5
718
+ │ preact@1.12.1 │ #1 🏆 │ #1 🏆 │ #2 │ #1 🏆 │ #1 🏆 │ #2 │ 1.3
719
719
  ├───────────────────┼───────────────┼─────────────┼────────────────┼────────────────────┼─────────────┼──────────────┼──────────┤
720
- │ balises@0.6.0 │ #3 │ #1 🏆 │ #1 🏆 │ #2 │ #2 │ #1 🏆 │ 1.7
720
+ │ balises@0.7.0 │ #3 │ #2 │ #1 🏆 │ #2 │ #2 │ #1 🏆 │ 1.8
721
721
  ├───────────────────┼───────────────┼─────────────┼────────────────┼────────────────────┼─────────────┼──────────────┼──────────┤
722
722
  │ vue@3.5.26 │ #2 │ #3 │ #5 │ #3 │ #3 │ #5 │ 3.5 │
723
723
  ├───────────────────┼───────────────┼─────────────┼────────────────┼────────────────────┼─────────────┼──────────────┼──────────┤
724
724
  │ maverick@6.0.0 │ #5 │ #5 │ #4 │ #4 │ #4 │ #4 │ 4.3 │
725
725
  ├───────────────────┼───────────────┼─────────────┼────────────────┼────────────────────┼─────────────┼──────────────┼──────────┤
726
- │ usignal@0.10.0 │ #4 │ #4 │ #3 │ #5 │ #8 │ #7 │ 5.2
726
+ │ usignal@0.10.0 │ #4 │ #4 │ #3 │ #5 │ #8 │ #6 │ 5.0
727
727
  ├───────────────────┼───────────────┼─────────────┼────────────────┼────────────────────┼─────────────┼──────────────┼──────────┤
728
728
  │ angular@19.2.17 │ #6 │ #6 │ #6 │ #6 │ #5 │ #3 │ 5.3 │
729
729
  ├───────────────────┼───────────────┼─────────────┼────────────────┼────────────────────┼─────────────┼──────────────┼──────────┤
730
- │ solid@1.9.10 │ #7 │ #8 │ #7 │ #7 │ #7 │ #6 │ 7.0
730
+ │ solid@1.9.10 │ #7 │ #8 │ #7 │ #7 │ #7 │ #7 │ 7.2
731
731
  ├───────────────────┼───────────────┼─────────────┼────────────────┼────────────────────┼─────────────┼──────────────┼──────────┤
732
732
  │ mobx@6.15.0 │ #9 │ #7 │ #8 │ #8 │ #6 │ #8 │ 7.7 │
733
733
  ├───────────────────┼───────────────┼─────────────┼────────────────┼────────────────────┼─────────────┼──────────────┼──────────┤
@@ -750,7 +750,7 @@ Performance comparison of Balises against other popular reactive libraries. Benc
750
750
  - These are synthetic benchmarks measuring pure reactivity - real apps should consider the whole picture (ecosystem, docs, community, etc.)
751
751
  - Lower rank = better performance
752
752
 
753
- _Last updated: 2026-01-04_
753
+ _Last updated: 2026-01-05_
754
754
 
755
755
  <!-- BENCHMARK_RESULTS_END -->
756
756
 
@@ -1 +1 @@
1
- {"version":3,"file":"async.js","sourceRoot":"","sources":["../../src/async.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"async.js","sourceRoot":"","sources":["../../src/async.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Async generator support for templates.\n *\n * This module provides opt-in support for async generators in templates,\n * enabling loading states, progressive content, and automatic restart\n * when signal dependencies change.\n *\n * @example\n * ```ts\n * import { html as baseHtml, signal } from \"balises\";\n * import asyncPlugin from \"balises/async\";\n *\n * const html = baseHtml.with(asyncPlugin);\n * const userId = signal(1);\n *\n * // Async generators are auto-detected - no wrapper needed!\n * html`<div>${async function* () {\n * yield html`<span>Loading user ${userId.value}...</span>`;\n * const user = await fetchUser(userId.value);\n * return html`<span>${user.name}</span>`;\n * }}</div>`.render();\n * ```\n */\n\nimport { onTrack, type Subscriber } from \"./signals/context.js\";\nimport { Template, type InterpolationPlugin } from \"./template.js\";\nimport type { Computed } from \"./signals/computed.js\";\nimport type { Signal } from \"./signals/signal.js\";\n\n/** Reactive source type */\ntype ReactiveSource = Signal<unknown> | Computed<unknown>;\n\n/**\n * Opaque handle representing settled content from an async generator.\n *\n * When an async generator restarts due to signal changes, it receives the\n * previous settled content as its first argument. Return this value to\n * preserve the existing DOM instead of re-rendering.\n *\n * @example\n * ```ts\n * import asyncPlugin, { type RenderedContent } from \"balises/async\";\n *\n * async function* loadUser(settled?: RenderedContent) {\n * const id = userId.value; // Track dependency\n *\n * if (settled) {\n * // Restart: update state, keep existing DOM\n * const user = await fetchUser(id);\n * state.user = user; // Triggers surgical updates via reactive bindings\n * return settled; // Preserve DOM\n * }\n *\n * // First load\n * yield html`<div class=\"skeleton\">...</div>`;\n * const user = await fetchUser(id);\n * state.user = user;\n * return UserCard({ state });\n * }\n * ```\n */\nexport interface RenderedContent {\n /** @internal Brand to prevent construction outside the library */\n readonly __brand: \"RenderedContent\";\n}\n\n/** Internal structure for RenderedContent */\ninterface RenderedContentInternal extends RenderedContent {\n readonly nodes: Node[];\n readonly childDisposers: (() => void)[];\n}\n\n/** Async generator function type */\ntype AsyncGenFn = (\n settled?: RenderedContent,\n) => AsyncGenerator<unknown, unknown, unknown>;\n\n/**\n * Check if a value is an async generator function.\n */\nfunction isAsyncGeneratorFunction(\n value: unknown,\n): value is AsyncGeneratorFunction {\n if (typeof value !== \"function\") return false;\n const constructor = value.constructor;\n return (\n constructor &&\n (constructor.name === \"AsyncGeneratorFunction\" ||\n // Check prototype chain for async generator\n Object.prototype.toString.call(constructor.prototype) ===\n \"[object AsyncGeneratorFunction]\")\n );\n}\n\n/**\n * Render content and insert nodes before marker.\n * Handles Templates and primitives.\n */\nfunction insertContent(\n marker: Comment,\n value: unknown,\n nodes: Node[],\n disposers: (() => void)[],\n): void {\n const parent = marker.parentNode!;\n\n for (const item of Array.isArray(value) ? value : [value]) {\n if (item instanceof Template) {\n const { fragment, dispose } = item.render();\n disposers.push(dispose);\n nodes.push(...fragment.childNodes);\n parent.insertBefore(fragment, marker);\n } else if (item != null && typeof item !== \"boolean\") {\n const node = document.createTextNode(String(item));\n nodes.push(node);\n parent.insertBefore(node, marker);\n }\n }\n}\n\n/**\n * Plugin that handles async generator functions.\n * Auto-detects `async function*` without needing a wrapper.\n */\nconst asyncPlugin: InterpolationPlugin = (value) => {\n if (!isAsyncGeneratorFunction(value)) return null;\n\n return (marker, disposers) => {\n bindAsyncGenerator(value as AsyncGenFn, marker, disposers);\n };\n};\n\nexport default asyncPlugin;\n\n/** Result of tracking dependencies during a function call */\ninterface TrackResult<T> {\n value: T;\n subscribe: (callback: Subscriber) => void;\n unsubscribe: () => void;\n}\n\n/**\n * Track reactive dependencies accessed during a function call.\n * Sets up the onTrack hook temporarily to capture signal/computed accesses.\n */\nfunction track<T>(fn: () => T): TrackResult<T> {\n const sources = new Set<ReactiveSource>();\n const prevHook = onTrack.current;\n onTrack.current = (source) => sources.add(source);\n\n let value: T;\n try {\n value = fn();\n } finally {\n onTrack.current = prevHook;\n }\n\n let unsubscribers: (() => void)[] = [];\n let subscribed = false;\n\n return {\n value,\n subscribe: (callback: Subscriber) => {\n if (subscribed) return;\n subscribed = true;\n for (const source of sources) {\n unsubscribers.push(source.subscribe(callback));\n }\n },\n unsubscribe: () => {\n for (const unsub of unsubscribers) unsub();\n unsubscribers = [];\n subscribed = false;\n },\n };\n}\n\n/**\n * Bind an async generator function to a marker position.\n * Tracks signal dependencies during generator execution and restarts\n * the generator when those dependencies change.\n */\nfunction bindAsyncGenerator(\n genFn: AsyncGenFn,\n marker: Comment,\n disposers: (() => void)[],\n): void {\n let generator: AsyncGenerator<unknown> | null = null;\n let currentNodes: Node[] = [];\n let childDisposers: (() => void)[] = [];\n let disposed = false;\n let iterationId = 0;\n let depUnsubscribers: (() => void)[] = [];\n let lastSettled: RenderedContentInternal | null = null;\n\n const clearNodes = () => {\n for (let i = 0; i < childDisposers.length; i++) childDisposers[i]!();\n for (let i = 0; i < currentNodes.length; i++)\n currentNodes[i]!.parentNode?.removeChild(currentNodes[i]!);\n childDisposers = [];\n currentNodes = [];\n };\n\n const clearDeps = () => {\n for (let i = 0; i < depUnsubscribers.length; i++) depUnsubscribers[i]!();\n depUnsubscribers = [];\n };\n\n const cleanupGenerator = () => {\n clearDeps();\n if (generator) {\n generator.return(undefined);\n generator = null;\n }\n };\n\n const cleanup = () => {\n cleanupGenerator();\n clearNodes();\n };\n\n const render = (value: unknown) => {\n clearNodes();\n insertContent(marker, value, currentNodes, childDisposers);\n };\n\n const runGenerator = async () => {\n const thisIteration = ++iterationId;\n cleanupGenerator();\n\n if (disposed) return;\n\n generator = genFn(lastSettled ?? undefined);\n let lastYielded: unknown = null;\n\n while (!disposed && thisIteration === iterationId) {\n let result: IteratorResult<unknown>;\n\n try {\n const tracked = track(() => generator!.next());\n\n tracked.subscribe(() => {\n if (!disposed && thisIteration === iterationId) {\n void runGenerator();\n }\n });\n depUnsubscribers.push(tracked.unsubscribe);\n\n result = await tracked.value;\n } catch (e) {\n cleanup();\n if (!disposed) throw e;\n return;\n }\n\n if (thisIteration !== iterationId) return;\n\n const { value, done } = result;\n\n if (done) {\n if (value === lastSettled && lastSettled !== null) {\n currentNodes = lastSettled.nodes;\n childDisposers = lastSettled.childDisposers;\n } else {\n render(value !== undefined ? value : lastYielded);\n lastSettled = {\n __brand: \"RenderedContent\" as const,\n nodes: currentNodes,\n childDisposers: childDisposers,\n };\n }\n return;\n }\n\n lastYielded = value;\n render(value);\n }\n };\n\n void runGenerator();\n\n disposers.push(() => {\n disposed = true;\n cleanup();\n lastSettled = null;\n });\n}\n"]}
package/dist/esm/each.js CHANGED
@@ -221,9 +221,14 @@ function reorderNodes(entries, newKeys, prevKeys, marker, parent) {
221
221
  }
222
222
  // Build array of old indices for keys that existed before (-1 for new)
223
223
  const oldIndices = [];
224
+ let allNew = true;
224
225
  for (let i = 0; i < len; i++) {
225
226
  const oldIdx = prevIndexMap.get(newKeys[i]);
226
- oldIndices.push(oldIdx !== undefined ? oldIdx : -1);
227
+ oldIndices.push(oldIdx !== undefined ? ((allNew = false), oldIdx) : -1);
228
+ }
229
+ // Skip reordering if ALL items are new - nodes were just created in correct order
230
+ if (allNew) {
231
+ return;
227
232
  }
228
233
  // Find LIS of old indices (only considering items that existed before)
229
234
  const lisIndices = longestIncreasingSubsequence(oldIndices);
@@ -238,6 +243,7 @@ function reorderNodes(entries, newKeys, prevKeys, marker, parent) {
238
243
  // This item needs to be moved
239
244
  for (let j = nodes.length - 1; j >= 0; j--) {
240
245
  parent.insertBefore(nodes[j], insertionPoint);
246
+ insertionPoint = nodes[j];
241
247
  }
242
248
  }
243
249
  // Update insertion point to the first node of current entry
@@ -1 +1 @@
1
- {"version":3,"file":"each.js","sourceRoot":"","sources":["../../src/each.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"each.js","sourceRoot":"","sources":["../../src/each.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,EACL,QAAQ,EACR,QAAQ,EACR,MAAM,EACN,cAAc,GAEf,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAA4B,MAAM,eAAe,CAAC;AAEnE,2CAA2C;AAC3C,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;AAE5B,gCAAgC;AAChC,MAAM,WAAW,GAAG,CAAC,CAAU,EAA2C,EAAE,CAC1E,OAAO,CAAC,KAAK,QAAQ,IAAI,OAAO,CAAC,KAAK,UAAU,CAAC;AAyBnD;;;GAGG;AACH,SAAS,aAAa,CACpB,MAAe,EACf,KAAc,EACd,KAAa,EACb,SAAyB;IAEzB,MAAM,MAAM,GAAG,MAAM,CAAC,UAAW,CAAC;IAElC,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1D,IAAI,IAAI,YAAY,QAAQ,EAAE,CAAC;YAC7B,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;YAC5C,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACxB,KAAK,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,UAAU,CAAC,CAAC;YACnC,MAAM,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QACxC,CAAC;aAAM,IAAI,IAAI,IAAI,IAAI,IAAI,OAAO,IAAI,KAAK,SAAS,EAAE,CAAC;YACrD,MAAM,IAAI,GAAG,QAAQ,CAAC,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;YACnD,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACjB,MAAM,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QACpC,CAAC;IACH,CAAC;AACH,CAAC;AA8BD,MAAM,UAAU,IAAI,CAClB,IAAuC,EACvC,eAE0C,EAC1C,aAAoE;IAEpE,MAAM,gBAAgB,GAAG,aAAa,KAAK,SAAS,CAAC;IACrD,MAAM,KAAK,GAAG,gBAAgB;QAC5B,CAAC,CAAE,eAAuD;QAC1D,CAAC,CAAC,CAAC,IAAO,EAAE,KAAa,EAAE,EAAE,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IACnE,MAAM,QAAQ,GAAG,gBAAgB;QAC/B,CAAC,CAAC,aAAa;QACf,CAAC,CAAE,eAAwD,CAAC;IAE9D,OAAO;QACL,CAAC,IAAI,CAAC,EAAE,IAAI;QACZ,QAAQ,EAAE,IAAI;QACd,SAAS,EAAE,KAAK;QAChB,YAAY,EAAE,QAAQ;QACtB,SAAS,EAAE,gBAAgB;KAC5B,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,GAAwB,CAAC,KAAK,EAAE,EAAE;IAChD,IAAI,CAAC,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,IAAI,IAAI,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAExE,OAAO,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE;QAC3B,MAAM,IAAI,GAAG,KAAgC,CAAC;QAC9C,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;IACpC,CAAC,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,UAAU,CAAC;AAE1B;;GAEG;AACH,SAAS,QAAQ,CACf,IAAuB,EACvB,MAAe,EACf,SAAyB;IAEzB,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,YAAY,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC;IAC9D,MAAM,MAAM,GAAG,MAAM,CAAC,UAAW,CAAC;IAElC,0BAA0B;IAC1B,MAAM,OAAO,GAAG,GAAQ,EAAE;QACxB,IAAI,OAAO,QAAQ,KAAK,UAAU,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC1D,OAAQ,QAAsB,EAAE,CAAC;QACnC,CAAC;QACD,OAAO,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAE,QAAQ,CAAC,KAAa,CAAC,CAAC,CAAE,QAAgB,CAAC;IAC1E,CAAC,CAAC;IAEF,kCAAkC;IAClC,MAAM,YAAY,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC;IAEvC,sDAAsD;IACtD,MAAM,KAAK,GAAG,IAAI,GAAG,EAA0B,CAAC;IAEhD,gDAAgD;IAChD,IAAI,QAAQ,GAAc,EAAE,CAAC;IAE7B,MAAM,SAAS,GAAG,GAAG,EAAE;QACrB,MAAM,KAAK,GAAG,YAAY,CAAC,KAAK,CAAC;QACjC,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAW,CAAC;QACpC,MAAM,OAAO,GAAc,EAAE,CAAC;QAC9B,MAAM,UAAU,GAAoB,EAAE,CAAC;QACvC,IAAI,mBAAmB,GAAG,KAAK,CAAC;QAEhC,sCAAsC;QACtC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACtC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAE,CAAC;YACvB,MAAM,GAAG,GAAG,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;YAE/B,4CAA4C;YAC5C,IAAI,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;gBACtB,IAAI,CAAC,mBAAmB,EAAE,CAAC;oBACzB,OAAO,CAAC,IAAI,CAAC,yBAAyB,MAAM,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;oBAChE,mBAAmB,GAAG,IAAI,CAAC;gBAC7B,CAAC;gBACD,SAAS;YACX,CAAC;YACD,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAElB,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAE9B,IAAI,SAAS,EAAE,CAAC;gBACd,qDAAqD;gBACrD,IAAI,MAAM,EAAE,CAAC;oBACX,MAAM,CAAC,UAAW,CAAC,KAAK,GAAG,IAAI,CAAC;oBAChC,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC;oBACnB,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;oBAClB,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBAC1B,CAAC;qBAAM,CAAC;oBACN,+BAA+B;oBAC/B,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;oBAChC,MAAM,cAAc,GAAG,IAAI,cAAc,CAAC,UAAU,CAAC,CAAC;oBACtD,MAAM,KAAK,GAAW,EAAE,CAAC;oBACzB,MAAM,aAAa,GAAmB,EAAE,CAAC;oBACzC,aAAa,CACX,MAAM,EAEJ,YAID,CAAC,cAAc,EAAE,CAAC,CAAC,EACpB,KAAK,EACL,aAAa,CACd,CAAC;oBACF,MAAM,KAAK,GAAkB;wBAC3B,KAAK;wBACL,OAAO,EAAE,GAAG,EAAE,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC;wBAChD,IAAI;wBACJ,UAAU;qBACX,CAAC;oBACF,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;oBACtB,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;oBAClB,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBACzB,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,oDAAoD;gBACpD,IAAI,MAAM,IAAI,MAAM,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;oBACnC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;oBAClB,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBAC1B,CAAC;qBAAM,CAAC;oBACN,mDAAmD;oBACnD,IAAI,MAAM,EAAE,CAAC;wBACX,MAAM,CAAC,OAAO,EAAE,CAAC;wBACjB,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;4BAC/B,IAAkB,CAAC,MAAM,EAAE,CAAC;wBAC/B,CAAC;wBACD,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;oBACpB,CAAC;oBACD,mBAAmB;oBACnB,MAAM,KAAK,GAAW,EAAE,CAAC;oBACzB,MAAM,aAAa,GAAmB,EAAE,CAAC;oBACzC,aAAa,CACX,MAAM,EACL,YAAqD,CAAC,IAAI,EAAE,CAAC,CAAC,EAC/D,KAAK,EACL,aAAa,CACd,CAAC;oBACF,MAAM,KAAK,GAAkB;wBAC3B,KAAK;wBACL,OAAO,EAAE,GAAG,EAAE,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC;wBAChD,IAAI;qBACL,CAAC;oBACF,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;oBACtB,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;oBAClB,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBACzB,CAAC;YACH,CAAC;QACH,CAAC;QAED,uBAAuB;QACvB,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,KAAK,EAAE,CAAC;YACjC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;gBACvB,KAAK,CAAC,OAAO,EAAE,CAAC;gBAChB,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;oBAC9B,IAAkB,CAAC,MAAM,EAAE,CAAC;gBAC/B,CAAC;gBACD,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACpB,CAAC;QACH,CAAC;QAED,uCAAuC;QACvC,YAAY,CAAC,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;QAC5D,QAAQ,GAAG,OAAO,CAAC;IACrB,CAAC,CAAC;IAEF,+BAA+B;IAC/B,SAAS,EAAE,CAAC;IACZ,MAAM,KAAK,GAAG,YAAY,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;IAEhD,SAAS,CAAC,IAAI,CAAC,GAAG,EAAE;QAClB,KAAK,EAAE,CAAC;QACR,YAAY,CAAC,OAAO,EAAE,CAAC;QACvB,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC;YACnC,KAAK,CAAC,OAAO,EAAE,CAAC;YAChB,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;gBAC9B,IAAkB,CAAC,MAAM,EAAE,CAAC;YAC/B,CAAC;QACH,CAAC;QACD,KAAK,CAAC,KAAK,EAAE,CAAC;IAChB,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;;GAKG;AACH,SAAS,YAAY,CACnB,OAAwB,EACxB,OAAkB,EAClB,QAAmB,EACnB,MAAe,EACf,MAAkB;IAElB,MAAM,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC;IAC3B,IAAI,GAAG,KAAK,CAAC;QAAE,OAAO;IAEtB,uEAAuE;IACvE,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IAElC,kCAAkC;IAClC,MAAM,YAAY,GAAG,IAAI,GAAG,EAAmB,CAAC;IAChD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACzC,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACnC,CAAC;IAED,uEAAuE;IACvE,MAAM,UAAU,GAAa,EAAE,CAAC;IAChC,IAAI,MAAM,GAAG,IAAI,CAAC;IAClB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;QAC7B,MAAM,MAAM,GAAG,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5C,UAAU,CAAC,IAAI,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,KAAK,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1E,CAAC;IAED,kFAAkF;IAClF,IAAI,MAAM,EAAE,CAAC;QACX,OAAO;IACT,CAAC;IAED,uEAAuE;IACvE,MAAM,UAAU,GAAG,4BAA4B,CAAC,UAAU,CAAC,CAAC;IAC5D,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,CAAC;IAEnC,qCAAqC;IACrC,8DAA8D;IAC9D,IAAI,cAAc,GAAgB,MAAM,CAAC;IAEzC,KAAK,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAClC,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,CAAE,CAAC;QAC1B,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;QAE1B,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;YACnB,8BAA8B;YAC9B,KAAK,IAAI,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC3C,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAE,EAAE,cAAc,CAAC,CAAC;gBAC/C,cAAc,GAAG,KAAK,CAAC,CAAC,CAAE,CAAC;YAC7B,CAAC;QACH,CAAC;QAED,4DAA4D;QAC5D,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACrB,cAAc,GAAG,KAAK,CAAC,CAAC,CAAE,CAAC;QAC7B,CAAC;IACH,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,SAAS,4BAA4B,CAAC,GAAa;IACjD,MAAM,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC;IACvB,IAAI,GAAG,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAEzB,yEAAyE;IACzE,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,oEAAoE;IACpE,MAAM,WAAW,GAAa,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IAEtD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;QAC7B,MAAM,GAAG,GAAG,GAAG,CAAC,CAAC,CAAE,CAAC;QACpB,sBAAsB;QACtB,IAAI,GAAG,KAAK,CAAC,CAAC;YAAE,SAAS;QAEzB,sCAAsC;QACtC,IAAI,EAAE,GAAG,CAAC,CAAC;QACX,IAAI,EAAE,GAAG,KAAK,CAAC,MAAM,CAAC;QACtB,OAAO,EAAE,GAAG,EAAE,EAAE,CAAC;YACf,MAAM,GAAG,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;YAC3B,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAE,CAAE,GAAG,GAAG,EAAE,CAAC;gBAC5B,EAAE,GAAG,GAAG,GAAG,CAAC,CAAC;YACf,CAAC;iBAAM,CAAC;gBACN,EAAE,GAAG,GAAG,CAAC;YACX,CAAC;QACH,CAAC;QAED,yCAAyC;QACzC,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC;YACX,WAAW,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,EAAE,GAAG,CAAC,CAAE,CAAC;QAClC,CAAC;QAED,IAAI,EAAE,KAAK,KAAK,CAAC,MAAM,EAAE,CAAC;YACxB,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAChB,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;QAChB,CAAC;IACH,CAAC;IAED,0BAA0B;IAC1B,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,IAAI,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACzD,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;QAChB,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACf,CAAC,GAAG,WAAW,CAAC,CAAC,CAAE,CAAC;IACtB,CAAC;IACD,MAAM,CAAC,OAAO,EAAE,CAAC;IAEjB,OAAO,MAAM,CAAC;AAChB,CAAC","sourcesContent":["/**\n * Keyed list rendering plugin for templates.\n *\n * Provides efficient, keyed list rendering with minimal DOM operations.\n * Supports signals, computeds, getters, and plain arrays.\n *\n * Two forms:\n * - Two-arg: uses object reference as key, render receives raw item\n * - Three-arg: uses explicit keyFn, render receives ReadonlySignal<T> for DOM reuse\n *\n * @example\n * ```ts\n * import { html as baseHtml, signal } from \"balises\";\n * import eachPlugin, { each } from \"balises/each\";\n *\n * const html = baseHtml.with(eachPlugin);\n * const items = signal([{ id: 1, name: \"Alice\" }, { id: 2, name: \"Bob\" }]);\n *\n * // Three-arg form: DOM reused when keys match\n * html`<ul>\n * ${each(items, i => i.id, itemSignal => html`<li>${() => itemSignal.value.name}</li>`)}\n * </ul>`.render();\n * ```\n */\n\nimport {\n computed,\n isSignal,\n signal,\n ReadonlySignal,\n type Reactive,\n} from \"./signals/index.js\";\nimport { Signal } from \"./signals/signal.js\";\nimport { Template, type InterpolationPlugin } from \"./template.js\";\n\n/** Marker symbol for each() descriptors */\nconst EACH = Symbol(\"each\");\n\n/** Type guard for primitives */\nconst isPrimitive = (v: unknown): v is string | number | boolean | symbol =>\n typeof v !== \"object\" && typeof v !== \"function\";\n\n/** Each descriptor - returned by each() */\nexport interface EachDescriptor<T> {\n readonly [EACH]: true;\n /** @internal List source (array, signal, or getter) */\n __list__: T[] | Reactive<T[]> | (() => T[]);\n /** @internal Key extraction function */\n __keyFn__: (item: T, index: number) => unknown;\n /** @internal Render function for each item (type varies by form) */\n __renderFn__:\n | ((item: T, index: number) => Template)\n | ((item: ReadonlySignal<T>, index: number) => Template);\n /** @internal Whether this is the three-arg (keyed) form */\n __keyed__: boolean;\n}\n\n/** Cache entry for list items */\ninterface CacheEntry<T> {\n nodes: Node[];\n dispose: () => void;\n item: T;\n itemSignal?: Signal<T>;\n}\n\n/**\n * Render content and insert nodes before marker.\n * Handles Templates and primitives.\n */\nfunction insertContent(\n marker: Comment,\n value: unknown,\n nodes: Node[],\n disposers: (() => void)[],\n): void {\n const parent = marker.parentNode!;\n\n for (const item of Array.isArray(value) ? value : [value]) {\n if (item instanceof Template) {\n const { fragment, dispose } = item.render();\n disposers.push(dispose);\n nodes.push(...fragment.childNodes);\n parent.insertBefore(fragment, marker);\n } else if (item != null && typeof item !== \"boolean\") {\n const node = document.createTextNode(String(item));\n nodes.push(node);\n parent.insertBefore(node, marker);\n }\n }\n}\n\n/**\n * Create a keyed list descriptor.\n *\n * Two-argument form: uses object reference as key (or index for primitives).\n * Render function receives the raw item. DOM is reused only when object reference matches.\n *\n * Three-argument form: uses explicit keyFn.\n * Render function receives a ReadonlySignal<T> wrapping the item.\n * DOM is reused when keys match, and the signal is updated with new item data.\n *\n * @example\n * ```ts\n * // Two-arg: object reference as key, receives raw item\n * each(items, item => html`<li>${item.name}</li>`)\n *\n * // Three-arg: explicit key, receives ReadonlySignal for DOM reuse\n * each(items, item => item.id, itemSignal => html`<li>${() => itemSignal.value.name}</li>`)\n * ```\n */\nexport function each<T>(\n list: T[] | Reactive<T[]> | (() => T[]),\n renderFn: (item: T, index: number) => Template,\n): EachDescriptor<T>;\nexport function each<T>(\n list: T[] | Reactive<T[]> | (() => T[]),\n keyFn: (item: T, index: number) => unknown,\n renderFn: (item: ReadonlySignal<T>, index: number) => Template,\n): EachDescriptor<T>;\nexport function each<T>(\n list: T[] | Reactive<T[]> | (() => T[]),\n keyFnOrRenderFn:\n | ((item: T, index: number) => unknown)\n | ((item: T, index: number) => Template),\n maybeRenderFn?: (item: ReadonlySignal<T>, index: number) => Template,\n): EachDescriptor<T> {\n const hasExplicitKeyFn = maybeRenderFn !== undefined;\n const keyFn = hasExplicitKeyFn\n ? (keyFnOrRenderFn as (item: T, index: number) => unknown)\n : (item: T, index: number) => (isPrimitive(item) ? index : item);\n const renderFn = hasExplicitKeyFn\n ? maybeRenderFn\n : (keyFnOrRenderFn as (item: T, index: number) => Template);\n\n return {\n [EACH]: true,\n __list__: list,\n __keyFn__: keyFn,\n __renderFn__: renderFn,\n __keyed__: hasExplicitKeyFn,\n };\n}\n\n/**\n * Plugin that handles each() descriptors.\n */\nconst eachPlugin: InterpolationPlugin = (value) => {\n if (!(value && typeof value === \"object\" && EACH in value)) return null;\n\n return (marker, disposers) => {\n const desc = value as EachDescriptor<unknown>;\n bindEach(desc, marker, disposers);\n };\n};\n\nexport default eachPlugin;\n\n/**\n * Bind an each() descriptor to a marker position.\n */\nfunction bindEach<T>(\n desc: EachDescriptor<T>,\n marker: Comment,\n disposers: (() => void)[],\n): void {\n const { __list__, __keyFn__, __renderFn__, __keyed__ } = desc;\n const parent = marker.parentNode!;\n\n // Get current array value\n const getList = (): T[] => {\n if (typeof __list__ === \"function\" && !isSignal(__list__)) {\n return (__list__ as () => T[])();\n }\n return isSignal(__list__) ? (__list__.value as T[]) : (__list__ as T[]);\n };\n\n // Wrap in computed for reactivity\n const listComputed = computed(getList);\n\n // Cache: key -> { nodes, dispose, item, itemSignal? }\n const cache = new Map<unknown, CacheEntry<T>>();\n\n // Track previous order for LIS-based reordering\n let prevKeys: unknown[] = [];\n\n const reconcile = () => {\n const items = listComputed.value;\n const seenKeys = new Set<unknown>();\n const newKeys: unknown[] = [];\n const newEntries: CacheEntry<T>[] = [];\n let hasDuplicateWarning = false;\n\n // Process items, create/reuse entries\n for (let i = 0; i < items.length; i++) {\n const item = items[i]!;\n const key = __keyFn__(item, i);\n\n // Warn and skip duplicates (only warn once)\n if (seenKeys.has(key)) {\n if (!hasDuplicateWarning) {\n console.warn(`[each] Duplicate key: ${String(key)}. Skipping.`);\n hasDuplicateWarning = true;\n }\n continue;\n }\n seenKeys.add(key);\n\n const cached = cache.get(key);\n\n if (__keyed__) {\n // Three-arg form: reuse if key exists, update signal\n if (cached) {\n cached.itemSignal!.value = item;\n cached.item = item;\n newKeys.push(key);\n newEntries.push(cached);\n } else {\n // Create new entry with signal\n const itemSignal = signal(item);\n const readonlySignal = new ReadonlySignal(itemSignal);\n const nodes: Node[] = [];\n const itemDisposers: (() => void)[] = [];\n insertContent(\n marker,\n (\n __renderFn__ as (\n item: ReadonlySignal<T>,\n index: number,\n ) => Template\n )(readonlySignal, i),\n nodes,\n itemDisposers,\n );\n const entry: CacheEntry<T> = {\n nodes,\n dispose: () => itemDisposers.forEach((d) => d()),\n item,\n itemSignal,\n };\n cache.set(key, entry);\n newKeys.push(key);\n newEntries.push(entry);\n }\n } else {\n // Two-arg form: reuse only if same object reference\n if (cached && cached.item === item) {\n newKeys.push(key);\n newEntries.push(cached);\n } else {\n // Dispose old entry if key exists but item changed\n if (cached) {\n cached.dispose();\n for (const node of cached.nodes) {\n (node as ChildNode).remove();\n }\n cache.delete(key);\n }\n // Create new entry\n const nodes: Node[] = [];\n const itemDisposers: (() => void)[] = [];\n insertContent(\n marker,\n (__renderFn__ as (item: T, index: number) => Template)(item, i),\n nodes,\n itemDisposers,\n );\n const entry: CacheEntry<T> = {\n nodes,\n dispose: () => itemDisposers.forEach((d) => d()),\n item,\n };\n cache.set(key, entry);\n newKeys.push(key);\n newEntries.push(entry);\n }\n }\n }\n\n // Remove stale entries\n for (const [key, entry] of cache) {\n if (!seenKeys.has(key)) {\n entry.dispose();\n for (const node of entry.nodes) {\n (node as ChildNode).remove();\n }\n cache.delete(key);\n }\n }\n\n // Reorder nodes using LIS optimization\n reorderNodes(newEntries, newKeys, prevKeys, marker, parent);\n prevKeys = newKeys;\n };\n\n // Initial render and subscribe\n reconcile();\n const unsub = listComputed.subscribe(reconcile);\n\n disposers.push(() => {\n unsub();\n listComputed.dispose();\n for (const entry of cache.values()) {\n entry.dispose();\n for (const node of entry.nodes) {\n (node as ChildNode).remove();\n }\n }\n cache.clear();\n });\n}\n\n/**\n * Reorder nodes to match the new order using LIS optimization.\n *\n * Uses Longest Increasing Subsequence to minimize DOM moves.\n * Only nodes that are NOT part of the LIS need to be moved.\n */\nfunction reorderNodes<T>(\n entries: CacheEntry<T>[],\n newKeys: unknown[],\n prevKeys: unknown[],\n marker: Comment,\n parent: ParentNode,\n): void {\n const len = entries.length;\n if (len === 0) return;\n\n // Skip reordering on first render - nodes are already in correct order\n if (prevKeys.length === 0) return;\n\n // Build a map of key -> old index\n const prevIndexMap = new Map<unknown, number>();\n for (let i = 0; i < prevKeys.length; i++) {\n prevIndexMap.set(prevKeys[i], i);\n }\n\n // Build array of old indices for keys that existed before (-1 for new)\n const oldIndices: number[] = [];\n let allNew = true;\n for (let i = 0; i < len; i++) {\n const oldIdx = prevIndexMap.get(newKeys[i]);\n oldIndices.push(oldIdx !== undefined ? ((allNew = false), oldIdx) : -1);\n }\n\n // Skip reordering if ALL items are new - nodes were just created in correct order\n if (allNew) {\n return;\n }\n\n // Find LIS of old indices (only considering items that existed before)\n const lisIndices = longestIncreasingSubsequence(oldIndices);\n const lisSet = new Set(lisIndices);\n\n // Move nodes that are NOT in the LIS\n // Process in reverse order, using insertBefore to place nodes\n let insertionPoint: Node | null = marker;\n\n for (let i = len - 1; i >= 0; i--) {\n const entry = entries[i]!;\n const nodes = entry.nodes;\n\n if (!lisSet.has(i)) {\n // This item needs to be moved\n for (let j = nodes.length - 1; j >= 0; j--) {\n parent.insertBefore(nodes[j]!, insertionPoint);\n insertionPoint = nodes[j]!;\n }\n }\n\n // Update insertion point to the first node of current entry\n if (nodes.length > 0) {\n insertionPoint = nodes[0]!;\n }\n }\n}\n\n/**\n * Find the longest increasing subsequence indices.\n * Returns the indices in the input array that form the LIS.\n *\n * Uses binary search for O(n log n) complexity.\n * Items with value -1 (new items) are never part of the LIS.\n */\nfunction longestIncreasingSubsequence(arr: number[]): number[] {\n const len = arr.length;\n if (len === 0) return [];\n\n // tails[i] = index in arr of smallest tail element for LIS of length i+1\n const tails: number[] = [];\n // predecessor[i] = index in arr of element before arr[i] in the LIS\n const predecessor: number[] = new Array(len).fill(-1);\n\n for (let i = 0; i < len; i++) {\n const val = arr[i]!;\n // Skip new items (-1)\n if (val === -1) continue;\n\n // Binary search for position in tails\n let lo = 0;\n let hi = tails.length;\n while (lo < hi) {\n const mid = (lo + hi) >> 1;\n if (arr[tails[mid]!]! < val) {\n lo = mid + 1;\n } else {\n hi = mid;\n }\n }\n\n // lo is the position where val should go\n if (lo > 0) {\n predecessor[i] = tails[lo - 1]!;\n }\n\n if (lo === tails.length) {\n tails.push(i);\n } else {\n tails[lo] = i;\n }\n }\n\n // Reconstruct LIS indices\n const result: number[] = [];\n let k = tails.length > 0 ? tails[tails.length - 1]! : -1;\n while (k !== -1) {\n result.push(k);\n k = predecessor[k]!;\n }\n result.reverse();\n\n return result;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,IAAI,GAIL,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,MAAM,EACN,QAAQ,EACR,MAAM,EACN,KAAK,EACL,KAAK,EACL,KAAK,GACN,MAAM,oBAAoB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,IAAI,GAIL,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,MAAM,EACN,QAAQ,EACR,MAAM,EACN,KAAK,EACL,KAAK,EACL,KAAK,GACN,MAAM,oBAAoB,CAAC","sourcesContent":["export {\n html,\n type HtmlTag,\n type InterpolationPlugin,\n type Template,\n} from \"./template.js\";\nexport {\n signal,\n computed,\n effect,\n store,\n batch,\n scope,\n} from \"./signals/index.js\";\nexport type {\n Signal,\n Computed,\n Reactive,\n Subscriber,\n ReadonlySignal,\n} from \"./signals/index.js\";\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"parser.js","sourceRoot":"","sources":["../../src/parser.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"parser.js","sourceRoot":"","sources":["../../src/parser.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Streaming HTML parser for template literals.\n * State machine: Text=0, TagOpen=1, TagName=2, InTag=3, AttrName=4, AttrEq=5, AttrVal=6, CloseTag=7, Comment=8\n */\n\n/** Pre-compiled attribute: static strings interleaved with slot indexes */\nexport type Attr = [name: string, statics: string[], indexes: number[]];\n\nexport interface ParseCallbacks {\n onText: (text: string) => void;\n onOpenTag: (tag: string, attrs: Attr[], selfClosing: boolean) => void;\n onClose: () => void;\n onSlot: (index: number) => void;\n}\n\nexport class HTMLParser {\n private s = 0; // state\n private tag = \"\";\n private attr = \"\";\n private statics: string[] = [];\n private indexes: number[] = [];\n private attrs: Attr[] = [];\n private text = \"\";\n private q = \"\";\n\n parseTemplate(strings: TemplateStringsArray, cb: ParseCallbacks) {\n for (let i = 0; i < strings.length; i++) {\n this.parse(strings[i]!, cb);\n if (i < strings.length - 1) this.slot(i, cb);\n }\n if (this.text) {\n cb.onText(this.text);\n this.text = \"\";\n }\n }\n\n private parse(str: string, cb: ParseCallbacks) {\n for (let i = 0; i < str.length; i++) {\n const ch = str[i]!,\n nx = str[i + 1],\n n2 = str[i + 2];\n\n if (this.s === 0) {\n // Text\n if (ch === \"<\") {\n if (this.text) {\n cb.onText(this.text);\n this.text = \"\";\n }\n this.s = 1;\n } else this.text += ch;\n } else if (this.s === 1) {\n // TagOpen\n if (ch === \"/\") this.s = 7;\n else if (ch === \"!\" && nx === \"-\" && n2 === \"-\") {\n i += 2;\n this.s = 8;\n } else if (ch === \"!\" || ch === \"?\") {\n while (i < str.length && str[i] !== \">\") i++;\n this.s = 0;\n } else if (this.isA(ch)) {\n this.tag = ch;\n this.s = 2;\n } else {\n this.text += \"<\" + ch;\n this.s = 0;\n }\n } else if (this.s === 2) {\n // TagName\n if (this.isT(ch)) this.tag += ch;\n else if (this.isW(ch)) {\n this.s = 3;\n } else if (ch === \">\") {\n this.emit(cb, false);\n } else if (ch === \"/\" && nx === \">\") {\n i++;\n this.emit(cb, true);\n }\n } else if (this.s === 3) {\n // InTag\n if (this.isW(ch)) continue;\n if (ch === \">\") this.emit(cb, false);\n else if (ch === \"/\" && nx === \">\") {\n i++;\n this.emit(cb, true);\n } else {\n this.attr = ch;\n this.statics = [\"\"];\n this.indexes = [];\n this.s = 4;\n }\n } else if (this.s === 4) {\n // AttrName\n if (this.isT(ch) || ch === \"_\") this.attr += ch;\n else if (ch === \"=\") this.s = 5;\n else if (this.isW(ch)) {\n this.emitAttr();\n this.s = 3;\n } else if (ch === \">\") {\n this.emitAttr();\n this.emit(cb, false);\n } else if (ch === \"/\" && nx === \">\") {\n this.emitAttr();\n i++;\n this.emit(cb, true);\n }\n } else if (this.s === 5) {\n // AttrEq\n if (ch === '\"' || ch === \"'\") {\n this.q = ch;\n this.s = 6;\n } else if (!this.isW(ch)) {\n this.q = \"\";\n this.statics[0] += ch;\n this.s = 6;\n }\n } else if (this.s === 6) {\n // AttrVal\n const end = this.q\n ? ch === this.q\n : this.isW(ch) || ch === \">\" || ch === \"/\";\n if (end) {\n this.emitAttr();\n this.q = \"\";\n this.s = 3;\n if (ch === \">\") this.emit(cb, false);\n else if (ch === \"/\" && nx === \">\") {\n i++;\n this.emit(cb, true);\n }\n } else {\n this.statics[this.statics.length - 1] += ch;\n }\n } else if (this.s === 7) {\n // CloseTag\n if (ch === \">\") {\n cb.onClose();\n this.s = 0;\n }\n } else if (this.s === 8) {\n // Comment\n if (ch === \"-\" && nx === \"-\" && n2 === \">\") {\n i += 2;\n this.s = 0;\n }\n }\n }\n }\n\n private slot(index: number, cb: ParseCallbacks) {\n if (this.s === 5 || this.s === 6) {\n this.indexes.push(index);\n this.statics.push(\"\");\n if (this.s === 5) this.s = 6;\n } else {\n if (this.text) {\n cb.onText(this.text);\n this.text = \"\";\n }\n cb.onSlot(index);\n }\n }\n\n private emit(cb: ParseCallbacks, self: boolean) {\n cb.onOpenTag(this.tag, this.attrs, self);\n this.tag = \"\";\n this.attrs = [];\n this.s = 0;\n }\n\n private emitAttr() {\n if (this.attr) this.attrs.push([this.attr, this.statics, this.indexes]);\n this.attr = \"\";\n this.statics = [];\n this.indexes = [];\n }\n\n private isA(c: string) {\n return (c >= \"a\" && c <= \"z\") || (c >= \"A\" && c <= \"Z\");\n }\n private isT(c: string) {\n return (\n (c >= \"a\" && c <= \"z\") ||\n (c >= \"A\" && c <= \"Z\") ||\n (c >= \"0\" && c <= \"9\") ||\n c === \"-\" ||\n c === \":\"\n );\n }\n private isW(c: string) {\n return c <= \" \" && c !== \"\";\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"computed.js","sourceRoot":"","sources":["../../../src/signals/computed.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"computed.js","sourceRoot":"","sources":["../../../src/signals/computed.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Computed - A derived reactive value.\n */\n\nimport { Signal, removeFromArray } from \"./signal.js\";\nimport {\n context,\n setContext,\n isBatching,\n enqueueBatchOne,\n registerDisposer,\n onTrack,\n type Subscriber,\n} from \"./context.js\";\n\n/**\n * A derived reactive value. Automatically tracks dependencies and\n * recomputes when any dependency changes.\n *\n * Uses Object.is() for equality checks to correctly handle NaN values.\n */\nexport class Computed<T> {\n #fn: (() => T) | undefined;\n #value: T | undefined;\n #dirty = true;\n #computing = false;\n #subs: Subscriber[] = [];\n #targets: Computed<unknown>[] = [];\n #sources: (Signal<unknown> | Computed<unknown>)[] = [];\n #sourceIndex = 0;\n\n constructor(fn: () => T) {\n this.#fn = fn;\n this.#recompute();\n\n // Auto-register disposal in current root scope\n registerDisposer(() => this.dispose());\n }\n\n get value(): T {\n if (this.#dirty) this.#recompute();\n if (context && context !== this) context.trackSource(this);\n if (onTrack.current) onTrack.current(this);\n return this.#value as T;\n }\n\n subscribe(fn: Subscriber): () => void {\n this.#subs.push(fn);\n return () => removeFromArray(this.#subs, fn);\n }\n\n dispose(): void {\n this.#fn = undefined;\n const sources = this.#sources;\n for (let i = 0; i < sources.length; i++) {\n const source = sources[i];\n if (source) source.deleteTarget(this);\n }\n this.#sources = [];\n this.#subs.length = 0;\n }\n\n /**\n * Called by sources when accessed during recompute.\n * @internal\n */\n trackSource(source: Signal<unknown> | Computed<unknown>): void {\n // Skip tracking if disposed (can happen if dispose() is called during #fn execution)\n if (!this.#fn) return;\n\n const sources = this.#sources;\n const idx = this.#sourceIndex++;\n\n if (idx < sources.length) {\n if (sources[idx] === source) {\n // Same source at same position - nothing to do\n return;\n }\n // Different source - unlink old ones from this position\n for (let i = idx; i < sources.length; i++) {\n const s = sources[i];\n if (s) s.deleteTarget(this);\n }\n sources.length = idx;\n }\n // Add new source\n sources.push(source);\n source.targets.push(this);\n }\n\n /**\n * Mark this computed and all its dependents as dirty.\n * Uses a two-phase approach to avoid cascading issues:\n * 1. Mark all dependents as dirty (no subscriber calls)\n * 2. Notify subscribers after all dirty flags are set\n * @internal\n */\n markDirty(): void {\n if (this.#dirty) return;\n\n // Phase 1: Mark all dependents as dirty, collect subscribers\n const queue: Computed<unknown>[] = [this];\n const toNotify: Array<{ c: Computed<unknown>; old: unknown }> = [];\n\n for (let i = 0; i < queue.length; i++) {\n const c = queue[i]!;\n if (c.#dirty) continue;\n c.#dirty = true;\n\n // Propagate to all targets\n const targets = c.#targets;\n for (let j = 0; j < targets.length; j++) {\n const t = targets[j]!;\n if (!t.#dirty) queue.push(t);\n }\n\n // Collect computeds with subscribers for later notification\n if (c.#subs.length && c.#fn) {\n toNotify.push({ c, old: c.#value });\n }\n }\n\n // Phase 2: Notify subscribers (after all dirty flags are set)\n for (let i = 0; i < toNotify.length; i++) {\n const { c, old } = toNotify[i]!;\n const notify = () => {\n if (c.#fn) {\n c.#recompute();\n if (!Object.is(c.#value, old)) {\n const subs = c.#subs;\n for (let j = 0; j < subs.length; j++) subs[j]!();\n }\n }\n };\n void (isBatching() ? enqueueBatchOne(notify) : notify());\n }\n }\n\n /** @internal */\n get targets(): Computed<unknown>[] {\n return this.#targets;\n }\n\n /** @internal */\n deleteTarget(target: Computed<unknown>): void {\n removeFromArray(this.#targets, target);\n }\n\n #recompute(): void {\n if (this.#computing || !this.#fn) return;\n this.#computing = true;\n\n this.#sourceIndex = 0;\n const prevLen = this.#sources.length;\n\n const prev = context;\n setContext(this);\n try {\n this.#value = this.#fn();\n } finally {\n setContext(prev);\n\n // Unlink removed sources\n const newLen = this.#sourceIndex;\n if (newLen < prevLen) {\n const sources = this.#sources;\n for (let i = newLen; i < prevLen; i++) {\n const source = sources[i];\n if (source) {\n source.deleteTarget(this);\n }\n }\n sources.length = newLen;\n }\n\n this.#dirty = false;\n this.#computing = false;\n }\n }\n}\n\n/** Create a new computed from the given function. */\nexport const computed = <T>(fn: () => T) => new Computed(fn);\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"context.js","sourceRoot":"","sources":["../../../src/signals/context.ts"],"names":[],"mappings":"AAAA;;GAEG;AAQH,iEAAiE;AACjE,MAAM,CAAC,IAAI,OAAO,GAA6B,IAAI,CAAC;AAEpD,wCAAwC;AACxC,MAAM,UAAU,UAAU,CAAC,CAA2B;IACpD,OAAO,GAAG,CAAC,CAAC;AACd,CAAC;AAED,qEAAqE;AACrE,IAAI,UAAU,GAAG,CAAC,CAAC;AACnB,IAAI,UAAU,GAA2B,IAAI,CAAC;AAE9C;;;GAGG;AACH,MAAM,UAAU,KAAK,CAAI,EAAW;IAClC,UAAU,EAAE,CAAC;IACb,IAAI,UAAU,KAAK,CAAC;QAAE,UAAU,GAAG,IAAI,GAAG,EAAE,CAAC;IAC7C,IAAI,CAAC;QACH,OAAO,EAAE,EAAE,CAAC;IACd,CAAC;YAAS,CAAC;QACT,IAAI,EAAE,UAAU,KAAK,CAAC,EAAE,CAAC;YACvB,MAAM,CAAC,GAAG,UAAW,CAAC;YACtB,UAAU,GAAG,IAAI,CAAC;YAClB,KAAK,MAAM,GAAG,IAAI,CAAC;gBAAE,GAAG,EAAE,CAAC;QAC7B,CAAC;IACH,CAAC;AACH,CAAC;AAED,kCAAkC;AAClC,MAAM,UAAU,UAAU;IACxB,OAAO,UAAU,GAAG,CAAC,CAAC;AACxB,CAAC;AAED,0CAA0C;AAC1C,MAAM,UAAU,eAAe,CAAC,GAAe;IAC7C,UAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACvB,CAAC;AAED,kDAAkD;AAClD,MAAM,UAAU,eAAe,CAAC,IAAkB;IAChD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE;QAAE,UAAW,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAE,CAAC,CAAC;AAClE,CAAC;AAED,uDAAuD;AACvD,IAAI,aAAa,GAAoC,IAAI,CAAC;AAE1D;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,KAAK,CAAI,EAAW;IAClC,MAAM,SAAS,GAAsB,EAAE,CAAC;IAExC,4BAA4B;IAC5B,IAAI,CAAC,aAAa;QAAE,aAAa,GAAG,EAAE,CAAC;IACvC,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAE9B,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,EAAE,EAAE,CAAC;QACpB,OAAO;YACL,MAAM;YACN,GAAG,EAAE;gBACH,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;oBAC/C,SAAS,CAAC,CAAC,CAAE,EAAE,CAAC;gBAClB,CAAC;gBACD,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;YACvB,CAAC;SACF,CAAC;IACJ,CAAC;YAAS,CAAC;QACT,uBAAuB;QACvB,aAAa,CAAC,GAAG,EAAE,CAAC;QACpB,IAAI,CAAC,aAAa,CAAC,MAAM;YAAE,aAAa,GAAG,IAAI,CAAC;IAClD,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,OAAmB;IAClD,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;AACvC,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,MAAM,OAAO,GAEhB,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC"}
1
+ {"version":3,"file":"context.js","sourceRoot":"","sources":["../../../src/signals/context.ts"],"names":[],"mappings":"AAAA;;GAEG;AAQH,iEAAiE;AACjE,MAAM,CAAC,IAAI,OAAO,GAA6B,IAAI,CAAC;AAEpD,wCAAwC;AACxC,MAAM,UAAU,UAAU,CAAC,CAA2B;IACpD,OAAO,GAAG,CAAC,CAAC;AACd,CAAC;AAED,qEAAqE;AACrE,IAAI,UAAU,GAAG,CAAC,CAAC;AACnB,IAAI,UAAU,GAA2B,IAAI,CAAC;AAE9C;;;GAGG;AACH,MAAM,UAAU,KAAK,CAAI,EAAW;IAClC,UAAU,EAAE,CAAC;IACb,IAAI,UAAU,KAAK,CAAC;QAAE,UAAU,GAAG,IAAI,GAAG,EAAE,CAAC;IAC7C,IAAI,CAAC;QACH,OAAO,EAAE,EAAE,CAAC;IACd,CAAC;YAAS,CAAC;QACT,IAAI,EAAE,UAAU,KAAK,CAAC,EAAE,CAAC;YACvB,MAAM,CAAC,GAAG,UAAW,CAAC;YACtB,UAAU,GAAG,IAAI,CAAC;YAClB,KAAK,MAAM,GAAG,IAAI,CAAC;gBAAE,GAAG,EAAE,CAAC;QAC7B,CAAC;IACH,CAAC;AACH,CAAC;AAED,kCAAkC;AAClC,MAAM,UAAU,UAAU;IACxB,OAAO,UAAU,GAAG,CAAC,CAAC;AACxB,CAAC;AAED,0CAA0C;AAC1C,MAAM,UAAU,eAAe,CAAC,GAAe;IAC7C,UAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACvB,CAAC;AAED,kDAAkD;AAClD,MAAM,UAAU,eAAe,CAAC,IAAkB;IAChD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE;QAAE,UAAW,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAE,CAAC,CAAC;AAClE,CAAC;AAED,uDAAuD;AACvD,IAAI,aAAa,GAAoC,IAAI,CAAC;AAE1D;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,KAAK,CAAI,EAAW;IAClC,MAAM,SAAS,GAAsB,EAAE,CAAC;IAExC,4BAA4B;IAC5B,IAAI,CAAC,aAAa;QAAE,aAAa,GAAG,EAAE,CAAC;IACvC,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAE9B,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,EAAE,EAAE,CAAC;QACpB,OAAO;YACL,MAAM;YACN,GAAG,EAAE;gBACH,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;oBAC/C,SAAS,CAAC,CAAC,CAAE,EAAE,CAAC;gBAClB,CAAC;gBACD,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;YACvB,CAAC;SACF,CAAC;IACJ,CAAC;YAAS,CAAC;QACT,uBAAuB;QACvB,aAAa,CAAC,GAAG,EAAE,CAAC;QACpB,IAAI,CAAC,aAAa,CAAC,MAAM;YAAE,aAAa,GAAG,IAAI,CAAC;IAClD,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,OAAmB;IAClD,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;AACvC,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,MAAM,OAAO,GAEhB,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC","sourcesContent":["/**\n * Global state and batching for the reactive system.\n */\n\nimport type { Computed } from \"./computed.js\";\nimport type { Signal } from \"./signal.js\";\n\n/** Callback function for subscribers */\nexport type Subscriber = () => void;\n\n/** The currently executing computed (for dependency tracking) */\nexport let context: Computed<unknown> | null = null;\n\n/** Set the current execution context */\nexport function setContext(c: Computed<unknown> | null): void {\n context = c;\n}\n\n/** Batching: defer subscriber notifications until batch completes */\nlet batchDepth = 0;\nlet batchQueue: Set<Subscriber> | null = null;\n\n/**\n * Batch multiple signal updates into a single notification pass.\n * Subscribers are only notified after the batch function completes.\n */\nexport function batch<T>(fn: () => T): T {\n batchDepth++;\n if (batchDepth === 1) batchQueue = new Set();\n try {\n return fn();\n } finally {\n if (--batchDepth === 0) {\n const q = batchQueue!;\n batchQueue = null;\n for (const sub of q) sub();\n }\n }\n}\n\n/** Check if currently batching */\nexport function isBatching(): boolean {\n return batchDepth > 0;\n}\n\n/** Add a subscriber to the batch queue */\nexport function enqueueBatchOne(sub: Subscriber): void {\n batchQueue!.add(sub);\n}\n\n/** Add multiple subscribers to the batch queue */\nexport function enqueueBatchAll(subs: Subscriber[]): void {\n for (let i = 0; i < subs.length; i++) batchQueue!.add(subs[i]!);\n}\n\n/** Scope disposal: collect all disposers in a scope */\nlet disposalStack: Array<Array<() => void>> | null = null;\n\n/**\n * Create a disposal scope that collects all subscriptions and computeds created within.\n * Returns the result of the function and a dispose function that cleans up all resources.\n *\n * @example\n * ```ts\n * const [result, dispose] = scope(() => {\n * const count = signal(0);\n * const doubled = computed(() => count.value * 2);\n * effect(() => console.log(doubled.value));\n * return { count, doubled };\n * });\n *\n * // Later: clean up all subscriptions and computeds\n * dispose();\n * ```\n */\nexport function scope<T>(fn: () => T): [result: T, dispose: () => void] {\n const disposers: Array<() => void> = [];\n\n // Push new disposal context\n if (!disposalStack) disposalStack = [];\n disposalStack.push(disposers);\n\n try {\n const result = fn();\n return [\n result,\n () => {\n for (let i = disposers.length - 1; i >= 0; i--) {\n disposers[i]!();\n }\n disposers.length = 0;\n },\n ];\n } finally {\n // Pop disposal context\n disposalStack.pop();\n if (!disposalStack.length) disposalStack = null;\n }\n}\n\n/**\n * Register a disposer in the current scope (if any).\n * This is called internally by computed/effect when they create cleanup functions.\n */\nexport function registerDisposer(dispose: () => void): void {\n disposalStack?.at(-1)?.push(dispose);\n}\n\n/**\n * Hook for tracking signal/computed accesses.\n * Set by async.ts when track() is active to capture dependencies.\n * Using an object wrapper so async.ts can mutate the current value.\n */\nexport const onTrack: {\n current: ((source: Signal<unknown> | Computed<unknown>) => void) | null;\n} = { current: null };\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"effect.js","sourceRoot":"","sources":["../../../src/signals/effect.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAErE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,MAAM,UAAU,MAAM,CAAC,EAA6B;IAClD,IAAI,OAAiC,CAAC;IACtC,IAAI,QAAQ,GAAG,KAAK,CAAC;IAErB,MAAM,CAAC,GAAG,QAAQ,CAAC,GAAG,EAAE;QACtB,mDAAmD;QACnD,sDAAsD;QACtD,IAAI,OAAO,EAAE,CAAC;YACZ,MAAM,IAAI,GAAG,OAAO,CAAC;YACrB,UAAU,CAAC,IAAI,CAAC,CAAC;YACjB,IAAI,CAAC;gBACH,OAAO,EAAE,CAAC;YACZ,CAAC;oBAAS,CAAC;gBACT,UAAU,CAAC,IAAI,CAAC,CAAC;YACnB,CAAC;QACH,CAAC;QACD,OAAO,GAAG,EAAE,EAAE,IAAI,SAAS,CAAC;QAC5B,OAAO,SAAS,CAAC;IACnB,CAAC,CAAC,CAAC;IACH,8DAA8D;IAC9D,MAAM,KAAK,GAAG,CAAC,CAAC,SAAS,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IAEpC,MAAM,OAAO,GAAG,GAAG,EAAE;QACnB,IAAI,QAAQ;YAAE,OAAO;QACrB,QAAQ,GAAG,IAAI,CAAC;QAChB,KAAK,EAAE,CAAC;QACR,CAAC,CAAC,OAAO,EAAE,CAAC;QACZ,OAAO,EAAE,EAAE,CAAC;IACd,CAAC,CAAC;IAEF,+DAA+D;IAC/D,+EAA+E;IAC/E,gBAAgB,CAAC,OAAO,CAAC,CAAC;IAE1B,OAAO,OAAO,CAAC;AACjB,CAAC"}
1
+ {"version":3,"file":"effect.js","sourceRoot":"","sources":["../../../src/signals/effect.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAErE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,MAAM,UAAU,MAAM,CAAC,EAA6B;IAClD,IAAI,OAAiC,CAAC;IACtC,IAAI,QAAQ,GAAG,KAAK,CAAC;IAErB,MAAM,CAAC,GAAG,QAAQ,CAAC,GAAG,EAAE;QACtB,mDAAmD;QACnD,sDAAsD;QACtD,IAAI,OAAO,EAAE,CAAC;YACZ,MAAM,IAAI,GAAG,OAAO,CAAC;YACrB,UAAU,CAAC,IAAI,CAAC,CAAC;YACjB,IAAI,CAAC;gBACH,OAAO,EAAE,CAAC;YACZ,CAAC;oBAAS,CAAC;gBACT,UAAU,CAAC,IAAI,CAAC,CAAC;YACnB,CAAC;QACH,CAAC;QACD,OAAO,GAAG,EAAE,EAAE,IAAI,SAAS,CAAC;QAC5B,OAAO,SAAS,CAAC;IACnB,CAAC,CAAC,CAAC;IACH,8DAA8D;IAC9D,MAAM,KAAK,GAAG,CAAC,CAAC,SAAS,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IAEpC,MAAM,OAAO,GAAG,GAAG,EAAE;QACnB,IAAI,QAAQ;YAAE,OAAO;QACrB,QAAQ,GAAG,IAAI,CAAC;QAChB,KAAK,EAAE,CAAC;QACR,CAAC,CAAC,OAAO,EAAE,CAAC;QACZ,OAAO,EAAE,EAAE,CAAC;IACd,CAAC,CAAC;IAEF,+DAA+D;IAC/D,+EAA+E;IAC/E,gBAAgB,CAAC,OAAO,CAAC,CAAC;IAE1B,OAAO,OAAO,CAAC;AACjB,CAAC","sourcesContent":["/**\n * Effect - Run side effects reactively.\n */\n\nimport { computed } from \"./computed.js\";\nimport { context, setContext, registerDisposer } from \"./context.js\";\n\n/**\n * Create a reactive effect that automatically tracks dependencies\n * and re-runs when they change.\n *\n * The effect function can optionally return a cleanup function that will be\n * called before the effect re-runs and when the effect is disposed.\n *\n * @param fn - The effect function to run. May return a cleanup function.\n * @returns A dispose function to stop the effect\n *\n * @example\n * const count = signal(0);\n * const dispose = effect(() => {\n * console.log(\"Count is:\", count.value);\n * });\n *\n * count.value = 1; // logs: \"Count is: 1\"\n * dispose(); // stop the effect\n *\n * @example\n * // With cleanup function\n * const userId = signal(1);\n * const dispose = effect(() => {\n * const subscription = api.subscribe(userId.value);\n * return () => subscription.unsubscribe(); // cleanup\n * });\n *\n * userId.value = 2; // cleanup runs, then effect re-runs with new subscription\n * dispose(); // final cleanup runs\n */\nexport function effect(fn: () => void | (() => void)): () => void {\n let cleanup: (() => void) | undefined;\n let disposed = false;\n\n const c = computed(() => {\n // Run cleanup outside of tracking context to avoid\n // reactive reads in cleanup creating new dependencies\n if (cleanup) {\n const prev = context;\n setContext(null);\n try {\n cleanup();\n } finally {\n setContext(prev);\n }\n }\n cleanup = fn() ?? undefined;\n return undefined;\n });\n // Subscribe to make it reactive (rerun on dependency changes)\n const unsub = c.subscribe(() => {});\n\n const dispose = () => {\n if (disposed) return;\n disposed = true;\n unsub();\n c.dispose();\n cleanup?.();\n };\n\n // Register full effect dispose (with cleanup) in current scope\n // This overrides the computed's auto-registration with a more complete cleanup\n registerDisposer(dispose);\n\n return dispose;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/signals/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7D,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAmB,MAAM,cAAc,CAAC;AAE7D,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAQzC,mEAAmE;AACnE,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,KAAc,EAA8B,EAAE,CACrE,KAAK,YAAY,MAAM;IACvB,KAAK,YAAY,QAAQ;IACzB,KAAK,YAAY,cAAc,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/signals/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7D,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAmB,MAAM,cAAc,CAAC;AAE7D,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAQzC,mEAAmE;AACnE,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,KAAc,EAA8B,EAAE,CACrE,KAAK,YAAY,MAAM;IACvB,KAAK,YAAY,QAAQ;IACzB,KAAK,YAAY,cAAc,CAAC","sourcesContent":["/**\n * Reactive signals with automatic dependency tracking.\n *\n * Uses index-based tracking: computed functions are assumed to access\n * their dependencies in the same order on each run. This enables O(1)\n * dependency checks without complex linked-list structures.\n */\n\nexport { Signal, signal, ReadonlySignal } from \"./signal.js\";\nexport { Computed, computed } from \"./computed.js\";\nexport { effect } from \"./effect.js\";\nexport { store } from \"./store.js\";\nexport { batch, scope, type Subscriber } from \"./context.js\";\n\nimport { Signal, ReadonlySignal } from \"./signal.js\";\nimport { Computed } from \"./computed.js\";\n\n/** Common interface for reactive values (Signal or Computed). */\nexport interface Reactive<T> {\n readonly value: T;\n subscribe(fn: () => void): () => void;\n}\n\n/** Check if a value is a reactive signal or computed. @internal */\nexport const isSignal = (value: unknown): value is Reactive<unknown> =>\n value instanceof Signal ||\n value instanceof Computed ||\n value instanceof ReadonlySignal;\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"signal.js","sourceRoot":"","sources":["../../../src/signals/signal.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"signal.js","sourceRoot":"","sources":["../../../src/signals/signal.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Signal - A reactive value container.\n */\n\nimport type { Computed } from \"./computed.js\";\nimport {\n context,\n isBatching,\n enqueueBatchAll,\n onTrack,\n type Subscriber,\n} from \"./context.js\";\n\n/**\n * Remove an item from an array using swap-and-pop (O(1) removal).\n */\nexport function removeFromArray<T>(array: T[], item: T): void {\n const i = array.indexOf(item);\n if (i >= 0) {\n array[i] = array[array.length - 1]!;\n array.pop();\n }\n}\n\n/**\n * A reactive value container. When the value changes, all dependent\n * computeds are marked dirty and subscribers are notified.\n *\n * Uses Object.is() for equality checks to correctly handle NaN values.\n */\nexport class Signal<T> {\n #value: T;\n #subs: Subscriber[] = [];\n #targets: Computed<unknown>[] = [];\n\n constructor(value: T) {\n this.#value = value;\n }\n\n get value(): T {\n if (context) context.trackSource(this);\n if (onTrack.current) onTrack.current(this);\n return this.#value;\n }\n\n set value(v: T) {\n if (Object.is(this.#value, v)) return;\n this.#value = v;\n\n // Mark all dependent computeds as dirty\n const targets = this.#targets;\n for (let i = 0; i < targets.length; i++) {\n targets[i]!.markDirty();\n }\n\n // Notify subscribers\n if (this.#subs.length) {\n if (isBatching()) {\n enqueueBatchAll(this.#subs);\n } else {\n // Copy array to avoid issues if subscribers modify the array during iteration\n const subs = [...this.#subs];\n for (let i = 0; i < subs.length; i++) subs[i]!();\n }\n }\n }\n\n subscribe(fn: Subscriber): () => void {\n this.#subs.push(fn);\n return () => removeFromArray(this.#subs, fn);\n }\n\n /**\n * Update the signal value using an updater function.\n *\n * @param fn - Function that receives current value and returns new value\n *\n * @example\n * const count = signal(0);\n * count.update(n => n + 1); // increment\n */\n update(fn: (current: T) => T): void {\n this.value = fn(this.#value);\n }\n\n /**\n * Read the signal value without tracking dependencies.\n * Useful in event handlers where you want the current value\n * but don't want to create a reactive dependency.\n *\n * @example\n * const count = signal(0);\n * // In an event handler - no dependency tracking\n * button.onclick = () => console.log(count.peek());\n */\n peek(): T {\n return this.#value;\n }\n\n /** @internal */\n get targets(): Computed<unknown>[] {\n return this.#targets;\n }\n\n /** @internal */\n deleteTarget(target: Computed<unknown>): void {\n removeFromArray(this.#targets, target);\n }\n}\n\n/** Create a new signal with the given initial value. */\nexport const signal = <T>(value: T) => new Signal(value);\n\n/**\n * A read-only view of a Signal.\n * Provides reactive access without allowing external mutation.\n * Used by `each()` to pass item signals to render functions.\n */\nexport class ReadonlySignal<T> {\n #signal: Signal<T>;\n\n /** @internal */\n constructor(signal: Signal<T>) {\n this.#signal = signal;\n }\n\n get value(): T {\n return this.#signal.value;\n }\n\n /**\n * Read the signal value without tracking dependencies.\n * Useful in event handlers where you want the current value\n * but don't want to create a reactive dependency.\n */\n peek(): T {\n return this.#signal.peek();\n }\n\n subscribe(fn: Subscriber): () => void {\n return this.#signal.subscribe(fn);\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"store.js","sourceRoot":"","sources":["../../../src/signals/store.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC;AAEvB;;;GAGG;AACH,MAAM,UAAU,KAAK,CAAmB,GAAM;IAC5C,MAAM,OAAO,GAAG,IAAI,GAAG,EAAoC,CAAC;IAE5D,iDAAiD;IACjD,MAAM,IAAI,GAAG,CAAC,KAAc,EAAW,EAAE;QACvC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI;YAAE,OAAO,KAAK,CAAC;QAC9D,IAAI,KAAK,IAAI,KAAK;YAAE,OAAO,KAAK,CAAC,CAAC,kBAAkB;QACpD,IAAK,KAAgB,CAAC,WAAW,KAAK,MAAM,EAAE,CAAC;YAC7C,OAAO,KAAK,CAAC,KAAgC,CAAC,CAAC;QACjD,CAAC;QACD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACzB,OAAO,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACzB,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC,CAAC;IAEF,4CAA4C;IAC5C,MAAM,SAAS,GAAG,CAAC,GAAoB,EAAE,YAAqB,EAAE,EAAE;QAChE,IAAI,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC3B,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,GAAG,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;YACrC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QACxB,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC,CAAC;IAEF,OAAO,IAAI,KAAK,CAAC,GAAG,EAAE;QACpB,GAAG,CAAC,MAAM,EAAE,GAAG;YACb,mEAAmE;YACnE,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;gBAC5B,OAAO,MAAM,CAAC,GAAc,CAAC,CAAC;YAChC,CAAC;YACD,OAAO,SAAS,CAAC,GAAG,EAAE,MAAM,CAAC,GAAc,CAAC,CAAC,CAAC,KAAK,CAAC;QACtD,CAAC;QAED,GAAG,CAAC,MAAM,EAAE,GAAG,EAAE,KAAK;YACpB,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;gBAC5B,MAAM,CAAC,GAAc,CAAC,GAAG,KAAK,CAAC;gBAC/B,OAAO,IAAI,CAAC;YACd,CAAC;YACD,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;YAC5B,SAAS,CAAC,GAAG,EAAE,MAAM,CAAC,GAAc,CAAC,CAAC,CAAC,KAAK,GAAG,OAAO,CAAC;YACvD,MAAM,CAAC,GAAc,CAAC,GAAG,OAAqB,CAAC;YAC/C,OAAO,IAAI,CAAC;QACd,CAAC;QAED,GAAG,CAAC,MAAM,EAAE,GAAG;YACb,OAAO,GAAG,KAAK,KAAK,IAAI,GAAG,IAAI,MAAM,CAAC;QACxC,CAAC;KACF,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"store.js","sourceRoot":"","sources":["../../../src/signals/store.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC;AAEvB;;;GAGG;AACH,MAAM,UAAU,KAAK,CAAmB,GAAM;IAC5C,MAAM,OAAO,GAAG,IAAI,GAAG,EAAoC,CAAC;IAE5D,iDAAiD;IACjD,MAAM,IAAI,GAAG,CAAC,KAAc,EAAW,EAAE;QACvC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI;YAAE,OAAO,KAAK,CAAC;QAC9D,IAAI,KAAK,IAAI,KAAK;YAAE,OAAO,KAAK,CAAC,CAAC,kBAAkB;QACpD,IAAK,KAAgB,CAAC,WAAW,KAAK,MAAM,EAAE,CAAC;YAC7C,OAAO,KAAK,CAAC,KAAgC,CAAC,CAAC;QACjD,CAAC;QACD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACzB,OAAO,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACzB,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC,CAAC;IAEF,4CAA4C;IAC5C,MAAM,SAAS,GAAG,CAAC,GAAoB,EAAE,YAAqB,EAAE,EAAE;QAChE,IAAI,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC3B,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,GAAG,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;YACrC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QACxB,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC,CAAC;IAEF,OAAO,IAAI,KAAK,CAAC,GAAG,EAAE;QACpB,GAAG,CAAC,MAAM,EAAE,GAAG;YACb,mEAAmE;YACnE,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;gBAC5B,OAAO,MAAM,CAAC,GAAc,CAAC,CAAC;YAChC,CAAC;YACD,OAAO,SAAS,CAAC,GAAG,EAAE,MAAM,CAAC,GAAc,CAAC,CAAC,CAAC,KAAK,CAAC;QACtD,CAAC;QAED,GAAG,CAAC,MAAM,EAAE,GAAG,EAAE,KAAK;YACpB,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;gBAC5B,MAAM,CAAC,GAAc,CAAC,GAAG,KAAK,CAAC;gBAC/B,OAAO,IAAI,CAAC;YACd,CAAC;YACD,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;YAC5B,SAAS,CAAC,GAAG,EAAE,MAAM,CAAC,GAAc,CAAC,CAAC,CAAC,KAAK,GAAG,OAAO,CAAC;YACvD,MAAM,CAAC,GAAc,CAAC,GAAG,OAAqB,CAAC;YAC/C,OAAO,IAAI,CAAC;QACd,CAAC;QAED,GAAG,CAAC,MAAM,EAAE,GAAG;YACb,OAAO,GAAG,KAAK,KAAK,IAAI,GAAG,IAAI,MAAM,CAAC;QACxC,CAAC;KACF,CAAC,CAAC;AACL,CAAC","sourcesContent":["/**\n * Store - Reactive wrapper for plain objects.\n */\n\nimport { Signal } from \"./signal.js\";\n\nconst STORE = Symbol();\n\n/**\n * Create a reactive store from a plain object.\n * Each property becomes a signal, and nested objects are recursively wrapped.\n */\nexport function store<T extends object>(obj: T): T {\n const signals = new Map<string | symbol, Signal<unknown>>();\n\n /** Recursively wrap nested objects and arrays */\n const wrap = (value: unknown): unknown => {\n if (typeof value !== \"object\" || value === null) return value;\n if (STORE in value) return value; // Already a store\n if ((value as object).constructor === Object) {\n return store(value as Record<string, unknown>);\n }\n if (Array.isArray(value)) {\n return value.map(wrap);\n }\n return value;\n };\n\n /** Get or create a signal for a property */\n const getSignal = (key: string | symbol, initialValue: unknown) => {\n let sig = signals.get(key);\n if (!sig) {\n sig = new Signal(wrap(initialValue));\n signals.set(key, sig);\n }\n return sig;\n };\n\n return new Proxy(obj, {\n get(target, key) {\n // Allow symbol access (for STORE check and other internal symbols)\n if (typeof key === \"symbol\") {\n return target[key as keyof T];\n }\n return getSignal(key, target[key as keyof T]).value;\n },\n\n set(target, key, value) {\n if (typeof key === \"symbol\") {\n target[key as keyof T] = value;\n return true;\n }\n const wrapped = wrap(value);\n getSignal(key, target[key as keyof T]).value = wrapped;\n target[key as keyof T] = wrapped as T[keyof T];\n return true;\n },\n\n has(target, key) {\n return key === STORE || key in target;\n },\n });\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"template.js","sourceRoot":"","sources":["../../src/template.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"template.js","sourceRoot":"","sources":["../../src/template.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * HTML template rendering with reactive bindings.\n *\n * Uses tagged template literals to create reactive DOM:\n * - Text interpolation: ${value} or ${signal}\n * - Attribute binding: class=\"${signal}\" (reactive)\n * - Event binding: @click=${handler}\n * - Property binding: .value=${signal} (sets DOM property, not attribute)\n * - Nested templates: ${html`<span>...</span>`}\n * - Arrays: ${items.map(i => html`<li>${i}</li>`)}\n *\n * Extend with plugins via html.with(...plugins) for additional interpolation types.\n */\n\nimport { computed, isSignal, scope, type Reactive } from \"./signals/index.js\";\nimport { HTMLParser, type Attr } from \"./parser.js\";\n\nconst SVG_NS = \"http://www.w3.org/2000/svg\";\n\n/**\n * Plugin that handles custom interpolation types.\n * Return a bind function if this plugin handles the value, null otherwise.\n * First plugin to return non-null wins.\n */\nexport interface InterpolationPlugin {\n (\n value: unknown,\n ): ((marker: Comment, disposers: (() => void)[]) => void) | null;\n}\n\n/**\n * Html template tag function with plugin composition.\n */\nexport interface HtmlTag {\n (strings: TemplateStringsArray, ...values: unknown[]): Template;\n /** Create a new html tag with additional plugins */\n with(...plugins: InterpolationPlugin[]): HtmlTag;\n}\n\n/**\n * Create a computed that wraps function execution in a scope.\n * Nested computeds/effects are automatically disposed on re-run.\n * Returns [computed, dispose] - dispose cleans up both the computed\n * and any nested reactives from the last run.\n */\nfunction scopedComputed<T>(fn: () => T) {\n let disposeScope: (() => void) | undefined;\n\n const c = computed(() => {\n disposeScope?.();\n const [result, dispose] = scope(fn);\n disposeScope = dispose;\n return result;\n });\n\n return [c, () => (c.dispose(), disposeScope?.())] as const;\n}\n\n/**\n * Bind a value to an update function.\n * If reactive, subscribes and returns unsubscribe. Otherwise returns null.\n * Functions are wrapped in computed() for automatic reactivity.\n * Nested computeds/effects created inside functions are automatically\n * disposed when the function re-runs or the binding is disposed.\n */\nfunction bind(\n value: unknown,\n update: (v: unknown) => void,\n): (() => void) | null | undefined {\n let dispose: (() => void) | undefined;\n if (typeof value === \"function\") {\n [value, dispose] = scopedComputed(value as () => unknown);\n }\n if (isSignal(value)) {\n update(value.value);\n const unsub = value.subscribe(() =>\n update((value as Reactive<unknown>).value),\n );\n return dispose ? () => (unsub(), dispose()) : unsub;\n }\n update(value);\n}\n\n/** Result of rendering a template */\nexport interface RenderResult {\n fragment: DocumentFragment;\n dispose: () => void;\n}\n\n/** A parsed HTML template. Call render() to create live DOM. */\nexport class Template {\n constructor(\n private strings: TemplateStringsArray,\n private values: unknown[],\n private plugins: InterpolationPlugin[] = [],\n ) {}\n\n /**\n * Parse template and create live DOM.\n * Returns the fragment and a dispose function to clean up subscriptions.\n */\n render(): RenderResult {\n const fragment = document.createDocumentFragment();\n const disposers: (() => void)[] = [];\n const stack: (Element | DocumentFragment)[] = [fragment];\n const parser = new HTMLParser();\n const values = this.values;\n const plugins = this.plugins;\n\n const handleAttribute = (el: Element, [name, statics, indexes]: Attr) => {\n const idx0 = indexes[0];\n\n // Event binding: @click=${handler}\n if (name[0] === \"@\") {\n if (idx0 != null) {\n const handler = values[idx0] as EventListener;\n el.addEventListener(name.slice(1), handler);\n disposers.push(() => el.removeEventListener(name.slice(1), handler));\n }\n return;\n }\n\n // Property binding: .value=${data} - sets DOM property directly\n if (name[0] === \".\") {\n if (idx0 != null) {\n const unsub = bind(values[idx0], (v) => {\n (el as unknown as Record<string, unknown>)[name.slice(1)] = v;\n });\n if (unsub) disposers.push(unsub);\n }\n return;\n }\n\n // Static attribute (no dynamic parts)\n if (!indexes.length) {\n const value = statics[0] ?? \"\";\n el.setAttribute(name, value);\n return;\n }\n\n // Wrap functions in scoped computed, collect all reactive sources\n const reactives: Reactive<unknown>[] = [];\n for (const idx of indexes) {\n const v = values[idx];\n if (typeof v === \"function\") {\n const [c, dispose] = scopedComputed(v as () => unknown);\n values[idx] = c;\n reactives.push(c);\n disposers.push(dispose);\n } else if (isSignal(v)) {\n reactives.push(v);\n }\n }\n\n const update = () => {\n let result = statics[0]!;\n for (let i = 0; i < indexes.length; i++) {\n const v = values[indexes[i]!];\n const val = isSignal(v) ? (v as Reactive<unknown>).value : v;\n // Single dynamic attr: handle boolean/null specially\n if (indexes.length === 1 && (val == null || val === false)) {\n el.removeAttribute(name);\n return;\n }\n result += (val === true ? \"\" : (val ?? \"\")) + statics[i + 1]!;\n }\n el.setAttribute(name, result);\n };\n\n update();\n for (const s of reactives) disposers.push(s.subscribe(update));\n };\n\n /**\n * Bind dynamic content at a marker position.\n * Tries plugins first (first match wins), then falls back to default handling.\n */\n const bindContent = (marker: Comment, value: unknown): (() => void) => {\n // Try plugins first (first match wins)\n for (const plugin of plugins) {\n const binder = plugin(value);\n if (binder) {\n const pluginDisposers: (() => void)[] = [];\n binder(marker, pluginDisposers);\n return () => pluginDisposers.forEach((d) => d());\n }\n }\n\n // Default handling\n let nodes: Node[] = [];\n let childDisposers: (() => void)[] = [];\n\n const clear = () => {\n childDisposers.forEach((d) => d());\n childDisposers = [];\n nodes.forEach((n) => (n as ChildNode).remove());\n nodes = [];\n };\n\n const update = (v: unknown) => {\n clear();\n renderContent(marker, v, nodes, childDisposers);\n };\n\n const unsub = bind(value, update);\n return () => {\n unsub?.();\n clear();\n };\n };\n\n parser.parseTemplate(this.strings, {\n onText: (text) => {\n stack.at(-1)!.append(text);\n },\n\n onOpenTag: (tag, attrs, selfClosing) => {\n const parent = stack.at(-1)!;\n const isSvg =\n tag === \"svg\" ||\n tag === \"SVG\" ||\n (parent instanceof Element && parent.namespaceURI === SVG_NS);\n const el = isSvg\n ? document.createElementNS(SVG_NS, tag)\n : document.createElement(tag);\n for (const attr of attrs) handleAttribute(el, attr);\n parent.appendChild(el);\n if (!selfClosing) stack.push(el);\n },\n\n onClose: () => {\n if (stack.length > 1) stack.pop();\n },\n\n onSlot: (index) => {\n // Marker comment anchors dynamic content\n const marker = document.createComment(\"\");\n stack.at(-1)!.appendChild(marker);\n disposers.push(bindContent(marker, values[index]));\n },\n });\n\n return { fragment, dispose: () => disposers.forEach((d) => d()) };\n }\n}\n\n/**\n * Render content and insert nodes before marker.\n * Handles Templates, primitives, arrays.\n */\nfunction renderContent(\n marker: Comment,\n v: unknown,\n nodes: Node[],\n childDisposers: (() => void)[],\n): void {\n const parent = marker.parentNode!;\n\n for (const item of Array.isArray(v) ? v : [v]) {\n // Handle templates\n if (item instanceof Template) {\n const { fragment, dispose } = item.render();\n childDisposers.push(dispose);\n nodes.push(...fragment.childNodes);\n parent.insertBefore(fragment, marker);\n }\n // Handle primitives (ignore null/undefined/boolean)\n else if (item != null && typeof item !== \"boolean\") {\n const node = document.createTextNode(String(item));\n nodes.push(node);\n parent.insertBefore(node, marker);\n }\n }\n}\n\n/**\n * Create an html tag function with the given plugins.\n */\nfunction createHtmlWithPlugins(plugins: InterpolationPlugin[]): HtmlTag {\n const tag = ((strings: TemplateStringsArray, ...values: unknown[]) =>\n new Template(strings, values, plugins)) as HtmlTag;\n\n tag.with = (...morePlugins: InterpolationPlugin[]) =>\n createHtmlWithPlugins([...plugins, ...morePlugins]);\n\n return tag;\n}\n\n/**\n * Tagged template literal for creating reactive HTML templates.\n * Use .with(...plugins) to add interpolation handlers like each() or async generators.\n *\n * @example\n * ```ts\n * import { html } from \"balises\";\n * import eachPlugin, { each } from \"balises/each\";\n * import asyncPlugin from \"balises/async\";\n *\n * const html = baseHtml.with(eachPlugin, asyncPlugin);\n *\n * html`<div>${async function* () { ... }}</div>`.render();\n * ```\n */\nexport const html: HtmlTag = createHtmlWithPlugins([]);\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "balises",
3
- "version": "0.7.0",
3
+ "version": "0.7.2",
4
4
  "description": "A very simple reactive html templating library",
5
5
  "author": "Julien Elbaz <elbywan@hotmail.com>",
6
6
  "type": "module",
@@ -98,6 +98,6 @@
98
98
  "typescript-eslint": "8.50.1"
99
99
  },
100
100
  "dependencies": {
101
- "balises": "0.7.0"
101
+ "balises": "0.7.2"
102
102
  }
103
103
  }