Skip to content

Theorem v1.0.9

Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 25 Jul 07:21
· 280 commits to main since this 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: hidden from columnize() persisted on the iframe <html> element, clipping content to the viewport. scrolled() now sets overflow: visible. Additionally, the transform: 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 triggerednotifyIfGranted() callers existed in useReadingTime.ts, useDailyGoalReminder.ts, and sync-orchestrator.ts, but requestNotificationPermission() 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 use useMemo'd Map<string, Annotation> lookups instead of linear array scans. The foliate engine also gained a annotationLocations Map 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.md rewritten to match the actual component.