v4.20.1
·
45 commits
to main
since this release
Focus: Hydration state fixes — theme, below-the-fold blocks and the anchor rail stay alive.
Changes
- 🎨 Fixed dark-theme users seeing light code blocks on server-rendered pages: Vue adopts server DOM without patching class mismatches, so theme-dependent tones now use two-pass rendering (
useSsrSafeDark) — hydrate in the serialized tone, flip to the real theme right after mount - 💧 Fixed below-the-fold blocks never hydrating (dead theme classes, unregistered ToC anchors):
hydrateOnVisible's IntersectionObserver proved unreliable for multi-block fragments inside the scroll area — tail chunks now hydrate on idle, one small task each - ⚓ Fixed the desktop anchor rail rendering empty until toggled: components mount before Quasar's Screen plugin measures (width 0 reads as "mobile"), and the mobile no-auto-open rule permanently hid the rail — viewport-dependent decisions now wait for the first real measurement
- ✅ Validated: zero hydration mismatches across routes and viewports, all code blocks live and theme-reactive, anchor tree fully populated (335 passing tests)