github konvajs/konva 10.4.0

2 hours ago

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

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)

Don't miss a new konva release

NewReleases is sending notifications on new releases.