You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
-**Code consolidation**: Eliminated 26 duplicate source files between `lib/src/` and `packages/hyper_render_core/lib/src/`. `hyper_render` is now a true thin wrapper — core engine lives exclusively in `hyper_render_core`.
12
+
-**Single source of truth**: All fixes and features now only need to be applied in one place.
11
13
12
-
#### 🎨 Advanced CSS Support
13
-
-**CSS Box Shadow**: Full support for box-shadow property with multiple shadows, blur, and spread.
14
-
-**CSS Gradients**: Support for linear-gradient in background and background-image properties.
15
-
-**Typography Enhancements**: Enabled font features (ligatures, proportional figures) by default for superior readability.
16
-
-**Consistent Text Rendering**: Implemented TextHeightBehavior for predictable vertical rhythm across all platforms.
14
+
### ✨ New Features
15
+
-**CSS Box Shadow**: Full support for box-shadow with multiple shadows, blur, and spread.
16
+
-**CSS Gradients**: `linear-gradient` in `background` and `background-image`.
17
+
-**Typography**: Font features (ligatures, proportional figures) enabled by default.
18
+
-**Consistent Text Rendering**: `TextHeightBehavior` for predictable vertical rhythm across platforms.
19
+
-**Retina-Ready Images**: `FilterQuality.medium` for all images — crisp on high-DPI displays.
20
+
-**Anti-Aliasing**: Anti-aliasing explicitly enabled on all paint operations.
21
+
-**Crisp Borders**: `StrokeCap.square` for professional-looking corners.
22
+
-**Adaptive Selection**: Text selection colors adapt to platform (iOS Blue vs Material Blue).
23
+
-**Theme-Aware Selection**: Added `selectionColor` property to `HyperViewer` and `HyperRenderWidget`.
17
24
18
-
#### 🚀 Rendering Quality
19
-
-**Retina-Ready Images**: Explicitly set FilterQuality.medium for all images, ensuring crisp rendering on high-DPI displays.
20
-
-**Anti-Aliasing Guarantee**: Explicitly enabled anti-aliasing on all paint operations to eliminate jagged edges on borders and shapes.
21
-
-**Crisp Borders**: Improved border rendering with StrokeCap.square for professional-looking corners.
22
-
23
-
#### 🛠️ Core Improvements
24
-
-**Adaptive Selection**: Native-feeling text selection colors that automatically adapt to the platform (iOS Blue vs Material Blue).
25
-
-**Theme-Aware Selection**: Added selectionColor property to HyperViewer and HyperRenderWidget for custom branding.
26
-
-**Stability**: Added comprehensive error boundaries to layout and paint cycles to prevent app crashes from malformed content.
25
+
### 🐛 Bug Fixes
26
+
-**Copy/paste newlines**: Text selection spanning block elements (`<li>`, `<h3>`, `<p>`) now correctly inserts `\n` between blocks when copied to clipboard.
27
+
-**Stability**: Comprehensive error boundaries in layout and paint cycles prevent crashes from malformed content.
27
28
-**Security**: Reinforced JSON parsing error handling in Delta adapters.
29
+
-**Layout — characterOffset**: Second fragment after forced split no longer adds trimmed leading spaces to `characterOffset` — selection mapping is now accurate.
30
+
-**Layout — link boundary**: `_sameLinkContext()` guard prevents merging text nodes from different `<a>` ancestors — fixes incorrect link tap targets.
31
+
-**Layout — float crash**: Early-return guard in `_layoutFloat()` for unconstrained (`Infinite`) parent width.
-**Layout — null fragment text**: `_measureFragments` guards against null `text` on atomic/ruby fragments.
34
+
-**Memory — recognizer leak**: `_disposeLinkRecognizers()` called when `document` is replaced — prevents `TapGestureRecognizer` leak.
35
+
-**Performance — `enableComplexFilters`**: New flag on `HyperViewer` / `HyperRenderWidget` gates all `canvas.saveLayer` calls for `backdrop-filter`/`filter` effects — eliminates unnecessary GPU compositing layers when effects are unused.
36
+
-**Performance — O(1) child lookup**: `_fragmentChildMap` replaces O(N) linear scan in paint cycle.
37
+
-**Performance — O(1) accessibility**: `_nodeRectCache` built during layout (Step 8) replaces O(N²) VoiceOver/TalkBack rect computation.
38
+
-**Nested Decorations**: `nodeToDecorated` changed to `Map<UDTNode, List<UDTNode>>` — inner spans no longer overwrite outer spans in text decoration maps.
28
39
29
-
### 📦 Packages Updated
30
-
- hyper_render (wrapper)
40
+
### 🔬 Tests (hyper_render_core)
41
+
-**+238 new tests** across 6 new test files covering previously-untested areas:
42
+
-`ruby_layout_test.dart` — RubyNode model + Fragment.ruby lifecycle (27 tests)
0 commit comments