defuss-morph 0.2.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md ADDED
@@ -0,0 +1,34 @@
1
+ # Changelog
2
+
3
+ Each release of the npm package `defuss-morph`, newest first. A release bumps the version here, in `package.json`, in the plugin manifests and the skill, and on the website; `scripts/lib/version.test.ts` checks that they agree.
4
+
5
+ ## 0.3.0 (2026-11-01)
6
+
7
+ ### Added
8
+
9
+ - `reactive(config, target)` re-renders an element from a store on every change and returns a function that stops it; an `AbortSignal` stops it too. `<Reactive>` does the same as a component, and `installReactive(df$)` adds `df$(selector).reactive()` to defuss-query.
10
+ - `createRef()` for a reference to a rendered element, with optional state a parent can read and reset.
11
+ - A JSX runtime: `defuss-morph/jsx-runtime` (`jsx`, `jsxs`, `jsxDEV`, `Fragment`) and `h()` for JSX without a build step.
12
+ - An Agent Skill for Claude Code and Codex in `skills/defuss-morph/`, shipped with the package.
13
+
14
+ ### Changed
15
+
16
+ - A keyed reorder moves only the nodes that are out of order: the longest run already in order stays where it is. Swapping rows 2 and 999 of 1,000 moves 2 rows instead of 997; removing one row moves none instead of 500.
17
+ - A matched node moves with `moveBefore()` where the browser has it, which keeps focus, the caret and other live state. Elsewhere `insertBefore()` moves it and morph puts focus and the text selection back.
18
+ - Faster HTML strings and small re-renders: one parsing document per `DOMParser` instead of one per call, a cheaper conversion of parsed markup, and children that line up one to one with the existing ones are patched in order without the matching tables.
19
+
20
+ ### Fixed
21
+
22
+ - A node whose `id` another, matched node also carried was neither reused nor removed, and stayed in the DOM.
23
+ - camelCase SVG elements in HTML strings (`linearGradient`, `clipPath`, `foreignObject`) were created with lowercased names, as unknown elements, so gradients and clip paths did not render.
24
+ - A `<template>` in an HTML string arrived empty, and morph read and patched a template's `childNodes` instead of its `.content`.
25
+ - HTML fragments lost table rows and cells (`<tr>`, `<td>`) and a leading comment; fragments now parse as `<template>` content.
26
+ - `onUnmount` handlers now receive the element, as their type declares.
27
+
28
+ ## 0.2.0 (2026-10-04)
29
+
30
+ ## 0.1.1 (2026-09-14)
31
+
32
+ ## 0.1.0 (2026-09-10)
33
+
34
+ No changelog was kept before 0.3.0; the dates are those of the npm releases.