Theorem v1.0.9
Pre-release
Pre-release
Added
- Reading Goal Notifications — Three-tier notification system:
- Real-time goal-met detection: OS notification + in-app toast when you hit your daily reading goal
- Session-end reminder: notifies when you close a reading session short of your goal
- Scheduled daily reminder: periodic Rust-side check at your configured reminder time
- Sync Completion Notifications — OS notification on sync finish or error (toggleable in Settings)
- Notification Settings UI — Goal Notifications toggle, Daily Reminder Time picker, Sync Notifications toggle
- Rust command
sqlite_check_goal_reminder— Reads today's reading stats from SQLite for the reminder timer - Proactive notification permission request — Calls
requestNotificationPermission()on app startup so the OS prompt appears immediately instead of waiting for the first lazy notification call - QR scan cancel toast — Shows a sonner toast when the native QR scanner is dismissed, instead of silently swallowing the cancel
Fixed
- Reader scroll mode blank screen on switch — When switching from paged to scroll mode, the
overflow: hiddenfromcolumnize()persisted on the iframe<html>element, clipping content to the viewport.scrolled()now setsoverflow: visible. Additionally, thetransform: translateX/Y()that#setViewPosition()applied during paginated mode was never cleared — the view element stayed positioned off-screen.Paginator.render()now resets the transform when entering scroll mode. - Notifications never triggered —
notifyIfGranted()callers existed inuseReadingTime.ts,useDailyGoalReminder.ts, andsync-orchestrator.ts, butrequestNotificationPermission()was never called, so the OS permission prompt never appeared on Android 13+ or desktop.
Changed
annotations.find()→ O(1) Map lookups — Reader hot paths (highlight tap, note save, bookmark toggle) now useuseMemo'dMap<string, Annotation>lookups instead of linear array scans. The foliate engine also gained aannotationLocationsMap for O(1) highlight-click detection.- Onboarding flow text updated — Steps 3-5 now mention TTS immersion reading, speed-reading, reading status filter, P2P LAN sync alongside markdown export.
docs/onboarding.mdrewritten to match the actual component.