v1.0.0
What's Changed
- fix(tracking): Reset mouse distance after persist to prevent double-counting by @owieth in #44
- fix(events): Use passUnretained to prevent CGEvent memory leak by @owieth in #45
- fix(data): Flush pending data on app termination by @owieth in #46
- fix(events): Extract CGEvent values before async dispatch by @owieth in #47
- style(settings): Remove gradient on gear icon by @owieth in #48
- fix(db): Remove redundant indexes on primary key columns by @owieth in #49
- fix(ui): Surface errors to users instead of silent failures by @owieth in #50
- fix(tracker): Cast screen ID to NSNumber before stringValue by @owieth in #51
- fix(dates): Set en_US_POSIX locale on all DateFormatters by @owieth in #53
- fix(tracker): Convert CG to AppKit coordinates for heatmap by @owieth in #52
- fix(heatmap): Add negative bounds check for bucket indices by @owieth in #54
- fix(export): Properly escape CSV fields to handle commas and quotes by @owieth in #56
- fix(events): Re-enable event tap on system timeout or user disable by @owieth in #57
- fix(keyboard): Filter modifier flags to meaningful keys only by @owieth in #55
- fix(ui): Respect user's distance unit preference in all views by @owieth in #58
- fix(data): Clear in-memory trackers when resetting data by @owieth in #59
- fix(settings): Update to macOS 13+ System Settings URL scheme by @owieth in #60
- fix(ui): Use composite id for ForEach to prevent key collisions by @owieth in #61
- fix(a11y): Add VoiceOver labels to heatmaps and icon buttons by @owieth in #62
- fix(chart): Fix date formatting on chart x-axis by @owieth in #63
- fix(stats): Aggregate all daily summaries for all-time mouse stats by @owieth in #64
- chore: Remove dead hourly_summary code by @owieth in #65
- perf(stats): Move live stats DB read off main thread by @owieth in #67
- perf(keyboard): Batch keyboard heatmap DB writes by @owieth in #66
- perf(db): Use SQL-level upserts instead of fetch-then-update by @owieth in #68
- chore: Add App Sandbox and input monitoring entitlements by @owieth in #70
- perf(mouse): Batch mouse heatmap DB writes by @owieth in #71
- perf(export): Use array joining instead of O(n²) string concatenation by @owieth in #73
- perf(heatmap): Precompute max value outside Canvas draw closure by @owieth in #74
- refactor: Consolidate duplicate distance formatting logic by @owieth in #76
- perf(mouse): Cache screen bounds instead of recalculating per click by @owieth in #77
- perf(stats): Cache all-time stats to avoid repeated table scans by @owieth in #78
- perf(events): Replace per-event Task with synchronous dispatch by @owieth in #80
- feat(data): Add configurable data retention/cleanup policy by @owieth in #81
- test: Add unit tests for DistanceConverter and KeyCodeMapping by @owieth in #82
- chore(db): Add incremental database migration versioning by @owieth in #69
- feat(tracking): Implement hourly granularity tracking by @owieth in #75
- refactor: Use RawRepresentable for DistanceUnit and typed table names by @owieth in #79
- feat(heatmap): Add multi-screen heatmap filtering by @owieth in #72
- refactor: Split MenuBarView.swift into separate files by @owieth in #83
- feat(tracking): Add scroll wheel distance tracking by @owieth in #84
- refactor: Extract shared utilities (DateHelper, HeatmapColor, HeatmapGridBuilder) by @owieth in #86
- refactor: Extract ViewModel layer from views by @owieth in #85
- fix(charts): Include live tracker data for current day by @owieth in #88
- refactor(charts): Replace bar charts with line charts by @owieth in #89
- feat(charts): Add hover tooltips showing exact values by @owieth in #91
- feat(Info.plist): Add missing App Store metadata keys by @owieth in #95
- feat(scripts): Add notarized DMG build script for GitHub Releases by @owieth in #96
- feat(docs): Add GitHub Pages site with privacy policy by @owieth in #97
- fix(EventMonitor): Accessibility permission not detected on TestFlight by @owieth in #99
- fix(HourlySummary): Add CodingKeys for snake_case column mapping by @owieth in #101
- feat(MenuBar): Use app icon and vertically stacked stats by @owieth in #103
- feat(DailySummary): Track daily first/last activity timestamps by @owieth in #127
- chore: Add project CLAUDE.md by @owieth in #130
- fix(CSV): Include scroll distance columns in export by @owieth in #128
- fix(MenuBar): Add Dashboard button to popover by @owieth in #144
- feat: Error logging system by @owieth in #149
- feat: JSON export format by @owieth in #131
- fix(Distance): Query actual display DPI by @owieth in #132
- test: Expand test coverage by @owieth in #141
- feat(UI): Add hourly breakdown view by @owieth in #129
- feat(UI): Add date navigation for historical data by @owieth in #133
- feat: Database backup and restore by @owieth in #134
- feat: Global keyboard shortcut by @owieth in #136
- fix(Chart): Aggregate year chart data by week by @owieth in #146
- fix(Heatmap): Auto-detect keyboard layout by @owieth in #147
- feat: macOS Widgets (WidgetKit) by @owieth in #140
- feat: Daily goals and streaks tracking by @owieth in #135
- feat: Notifications and insights by @owieth in #137
- feat: First-launch onboarding by @owieth in #148
- feat: Idle time detection and active minutes tracking by @owieth in #138
- feat: Per-application input tracking by @owieth in #142
- feat: Mouse speed and typing speed tracking by @owieth in #143
- fix: Background event monitoring suspended by App Nap by @owieth in #151
- fix: Detect and prompt for missing Input Monitoring permission by @owieth in #153
- fix: Use grouped cards with dividers for settings sections by @owieth in #155
- fix: Prevent CMD+Q from accidentally quitting the menu bar app by @owieth in #157
- chore: GitHub Actions CI workflow by @owieth in #139
- feat: Auto-tag on CI pass + release workflow for signed app distribution by @owieth in #159
- fix(ci): Override signing to Developer ID Application in release build by @owieth in #160
- fix: Re-sign LaunchAtLogin nested helpers for notarization by @owieth in #162
- fix(ci): Remove invalid --entitlements /dev/null from codesign by @owieth in #163
New Contributors
Full Changelog: https://github.com/owieth/InputStats/commits/v1.0.0