✨ feat
- feat: add snapdom.stream, a live canvas that repaints only what changed
5ef8168 - feat: export JPEG files beyond the canvas limit
a595422 - feat(stream): add broadcast overlay templates
85f0d31 - feat(debug): keep the console quiet unless debug is true
91a95f5 - feat(stream): patch out-of-flow boxes that move or resize
0eab5ca - feat(engine): lay a capture root out at a subpixel offset on request
59ddd11
🛠 fix
- fix(fonts): embed families whose name holds "__"
#542 - fix: right-to-left fidelity found by the new RTL demos
193ab04 - fix(icons): keep an icon font's share of the line in the clone
09ebf09 - fix(svg): size a body capture from the body box, not the margins around it
9bddee9 - fix: keep live-page mounts styled under a strict style-src CSP
80313aa - fix(toCanvas): keep emoji and late nested images in Safari exports
3842f3e - fix(svg): place page-anchored boxes of a body capture where the page does
c992d6e - fix(styles): resolve oklch, lab and color() through a canvas for gradient text
7aa2290 - fix(clone): capture opaque WebGL canvases that clear every frame
49512cf - fix(prepare): top-align an atomic inline capture root
e76e9d8 - fix(toCanvas): keep 1px borders in downscaled Firefox exports at DPR 1
a3ee108 - fix(prepare): carry the capture root's language into the clone
442f845 - fix(fetch): strip whitespace from the header of fetched data URLs
b255f98 - fix(svg): grow a right-to-left body capture on the side its content spills
5de36e9 - fix(styles): never freeze the width of a MathML token
1fc05b9 - perf(stream): keep full frames from freezing the page
ab4b6c4 - fix(engine): give a __subpixel root its exact width at phase zero too
0198ded
📦 other (chore/refactor/test/demo)
- test(visual): load Orbit locally in d3-zumly and stamp a fixed text
05fe871 - demo: add stream demos for WebGL textures, video overlays and a lab
137546b - refactor(stream): move the stream into @zumer/snapdom-plugins/stream
eb6e990 - test: add a live parity check of every demo against the page
0873b9d - test: cover counters, cross-origin font imports, clip fonts, selection, backdrop siblings and canvas retry
938cc5c - demo(stream): bend live video through liquid glass overlay boxes
5145eaf - demo(stream): place two live elements in a 3D virtual set
d28eaa7 - demo(stream): style the overlay templates with shader looks
4287419 - demo(stream): send an HTML overlay inside a WebRTC video track
8557f5e - test(visual): serve Roboto locally to d21 and d25
824abab - test(visual): add d-modern-css and d-text-layout demos
654601b - demo(stream): a playground for the overlay templates
f995bf4 - chore(scripts): cut package.json scripts down to the release flow
2de95bb - test(visual): add d-rtl-body and d-rtl-layout demos
6969b2e - chore(scripts): bring back publish:dev, test:coverage and cross:report
37fba91 - test(engine): pin the __subpixel root layout in the core
54aaf64 - test: stop two tests from failing under the full BROWSER=all run
1b25c3d - test(visual): serve d24's fonts locally
bd97b5d - test: run four workers per engine under BROWSER=all
462b243 - test(parity): tolerate sub-pixel drift, time-box each demo
6426184 - chore(coverage): mark Firefox- and WebKit-only blocks with c8 ignore
5c565cb - chore(plugins): require SnapDOM 3.3.8 for the stream
ad3db94 - refactor(stream): allow form controls as patch hosts again
b78f610 - test(parity): wait for d60's own capture, note d11 and d42
44bb292 - test: give the #531 stroked-text test 30 s for its WebKit screenshots
d69ac62 - chore(scripts): leave the visual suites out of test:coverage
5f6be3a - Full Changelog: v3.3.7...v3.4.0