Skip to content

Commit 35ae6d2

Browse files
Merge bugfix/demo-improvements into main: v1.1.0 release
2 parents 7552400 + 8f92516 commit 35ae6d2

163 files changed

Lines changed: 21020 additions & 6107 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.gitignore

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,15 @@
22
.claude/
33
*.txt
44

5-
# Private Strategy Documents (Not for public repository)
5+
# Private / internal documents (not for public repository)
6+
doc/internal/
67
STRATEGIC_POSITIONING.md
78
EXECUTIVE_SUMMARY.md
89
PITCH_DECK.md
9-
TEST_SUMMARY.md
10-
11-
# Internal Development Documents (Not for public)
12-
docs/internal/
1310
COMPREHENSIVE_REVIEW_REPORT.md
1411
IMPLEMENTATION_STATUS.md
1512
TEST_FIX_SUMMARY.md
13+
TEST_SUMMARY.md
1614
IMPROVEMENTS_SUMMARY.md
1715
PRIORITY_ACTION_PLAN.md
1816

CHANGELOG.md

Lines changed: 35 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -5,29 +5,46 @@ All notable changes to HyperRender will be documented in this file.
55
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
66
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
77

8-
## [1.1.0] - 2026-03-17
8+
## [1.1.0] - 2026-03-20
99

10-
### ✨ Aesthetic & Visual Quality Enhancements (Phase 1 & 2)
10+
### 🏗️ Architecture
11+
- **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.
1113

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`.
1724

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.
2728
- **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.
32+
- **Layout — float double-layout**: Float intrinsic size uses `getMaxIntrinsicWidth/Height` instead of `child.layout()`.
33+
- **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.
2839

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)
43+
- `float_layout_test.dart` — HyperFloat/HyperClear enums, LineInfo insets (30 tests)
44+
- `text_breaking_test.dart` — canBreak, isWhitespace, Kinsoku CJK (44 tests)
45+
- `layout_algorithm_test.dart` — Bug 1–4 regression tests, link context, rect cache (52 tests)
46+
- `details_element_test.dart``<details>/<summary>` model + widget (32 tests)
47+
- `rtl_bidi_test.dart` — HyperTextDirection, Arabic/Hebrew, RTL widget integration (53 tests)
3148

3249
---
3350

0 commit comments

Comments
 (0)