Features
- destroy event; Transformer, Tween, pointer captures and stage timers release destroyed nodes (Anton Lavrevov)
Bug Fixes
- size the buffer canvas of cache() and toCanvas() to the target, allocate it lazily and release it (Anton Lavrevov)
- memoize isCSSFiltersSupported() and release its probe canvas (Anton Lavrevov)
- stop the frame interval of a Sprite on destroy() (Anton Lavrevov)
- keep descendant caches on clearCache() and release the previous canvases on re-cache (Anton Lavrevov)
- setAbsolutePosition() under a zero-scale ancestor no longer writes NaN (Anton Lavrevov)
- negative radius and cornerRadius no longer throw and blank the layer (Anton Lavrevov)
- batchDraw() no longer freezes the layer after a throwing draw (Anton Lavrevov)
- Blur keeps the colour of semi-transparent pixels and survives large radii (Anton Lavrevov)
- Tween ownership bookkeeping (Anton Lavrevov)
- clamp a negative cornerRadius in drawRoundedRectPath (Anton Lavrevov)
- hasShadow() follows shadowOffsetX and shadowOffsetY changes (Anton Lavrevov)
- cache() and transform batching clean up after a throw (Anton Lavrevov)
- split text into graphemes with Intl.Segmenter (Anton Lavrevov)
- toObject() copies attributes instead of mutating them, accepts frozen values and skips methods named like custom attributes (Anton Lavrevov)
- drawHitFromCache() honours hitCanvasPixelRatio (Anton Lavrevov)
- Path arc bounds, SVGO arc flags, empty data, and segment-relative getPointAtLength (Anton Lavrevov)
- Transformer follows the grabbing pointer, guards zero-size boxes, and resolves its anchors directly (Anton Lavrevov)
- Tween of component attributes, of array attributes the node lacks, and to() no longer mutates its params (Anton Lavrevov)
- absolute getters and derived caches of nodes under a cached container, fire(type, null), non-finite child rects (Anton Lavrevov)
- Canvas size equals the truncated bitmap at a fractional pixel ratio and keeps its logical size; setSizeIfChanged() with NaN (Anton Lavrevov)
- drag with several pointers releases only the lifted pointer; startDrag() without an event ends on release (Anton Lavrevov)
- Transformer suppresses the hit graph of its own layers only (gate moved to Layer.shouldDrawHit), forwards getClientRect(config), honours top in getAbsoluteTransform() (Anton Lavrevov)
- RegularPolygon without sides, Sprite getSelfRect() and guards for a missing animation or frame (Anton Lavrevov)
- report a non-finite number at the core aggregation points instead of silently drawing nothing (Anton Lavrevov)
- Tag.getSelfRect() grows by exactly the pointer for a left or right pointer (Anton Lavrevov)
- eleven one-line bugs (Anton Lavrevov)
- layer.size() no longer resizes the layer canvas; getChildren() returns a copy (Anton Lavrevov)
- review follow-ups for the polishing batch (Anton Lavrevov)
- Transformer follows node changes made between pointer moves of a resize (Anton Lavrevov)
Documentation
- JSDoc that contradicted the code, wrong names and types, examples that did not run (Anton Lavrevov)
- rewrite the unreleased changelog in the usual short style (Anton Lavrevov)
Performance Improvements
- keep a running grapheme index for charRenderFunc instead of recounting previous lines per character (Anton Lavrevov)
- upload filter chain result once and stop reallocating the filter canvas (Anton Lavrevov)
- release the per-layer canvases of a stage export and skip the client rect when the box is given (Anton Lavrevov)
- resize a canvas in one pass (Anton Lavrevov)
- drop the two Maps every node allocated (Anton Lavrevov)
- wrap fixed-width text in linear time (Anton Lavrevov)
- resolve edge pixels of the hit graph directly and bound the search (Anton Lavrevov)
- relayout listeners of Text and TextPath on the prototype, listener cache keyed by class (Anton Lavrevov)
- getClientRect() no longer scans the subtree at every nesting level (Anton Lavrevov)
- drag reads pointer positions once per stage, skips the redraw on a plain click, and resets the drag position per drag (Anton Lavrevov)
- hoisted component getter names, single-array Transform, direct drawImage, hoisted TypedArray (Anton Lavrevov)
- Animation keeps its running animations in a Set; an animation stopping itself no longer skips the next one; setLayers() copies its argument (Anton Lavrevov)
Tests
- hygiene (Anton Lavrevov)
Builds
- keep JSDoc in the published .d.ts files (Anton Lavrevov)
- size budget of 48 KB, CI runs size, import and type checks on Node 22 (Anton Lavrevov)
- release script runs the tests, drops the empty cdn-link commit and the hard-coded directory (Anton Lavrevov)
- named exports and prepublishOnly (Anton Lavrevov)
- drop the named exports and the separate UMD entry (Anton Lavrevov)
Chores
- remove dead Node internals and hoist the non-bubbling event list (Anton Lavrevov)
- build the browser tests from a clean Parcel cache (Anton Lavrevov)
- drop the unregistered fillLinearRadial* declarations, build ellipses with context.ellipse() (Anton Lavrevov)
- remove dead code (hit fill/stroke duplicates, lineDash fallbacks, trace branch, unused globals, addDeprecatedGetterSetter) (Anton Lavrevov)
- red/green/blue registered once with the shared component validator, alpha uses afterSetFilter (Anton Lavrevov)
- remove dead code; cloneObject() copies nested arrays and typed arrays; shadow probe releases its canvas (Anton Lavrevov)
- resolve every TODO comment in src and tests (Anton Lavrevov)
- remove dead code, dead files and unused devDependencies (Anton Lavrevov)
Commits
- ad94d9d: update CHANGELOG (Anton Lavrevov)
- f142b6e: update CHANGELOG (Anton Lavrevov)
- 7ee3232: update CHANGELOG (Anton Lavrevov)
- c9f3830: update CHANGELOG (Anton Lavrevov)
- 0f88c28: update CHANGELOG (Anton Lavrevov)
- declarations that contradicted the runtime or the docs (Anton Lavrevov)
- ac581a4: update CHANGELOG with new version (Anton Lavrevov)
- e51c16d: build for 10.4.0 (Anton Lavrevov)