export type { TabType } from './tab.js' export interface TimePeriod { start: string end: string } export interface TabRecord { tabId: string filePath: string | null fileName: string tabType: import('./tab.js').TabType duration: number focusedPeriods: TimePeriod[] } export interface TimingSession { id: string startTime: string endTime?: string duration: number status: 'active' | 'paused' | 'ended' tabRecords: TabRecord[] } export interface TabSummary { fileName: string tabType: import('./tab.js').TabType totalDuration: number focusCount: number } export interface DayTimeData { date: string totalDuration: number sessions: TimingSession[] tabSummary: Record lastUpdated: string } export interface DaySummary { totalDuration: number sessions: number topTabs: Array<{ fileName: string; duration: number }> } export interface MonthTimeData { year: number month: number days: Record monthlyTotal: number averageDaily: number activeDays: number lastUpdated: string } export interface YearTimeData { year: number months: Record yearlyTotal: number averageMonthly: number averageDaily: number totalActiveDays: number } export interface CurrentTimerState { isRunning: boolean isPaused: boolean currentSession: { id: string startTime: string duration: number currentTab: { tabId: string fileName: string tabType: import('./tab.js').TabType } | null } | null todayDuration: number } export interface TimeStats { totalDuration: number activeDays: number averageDaily: number longestDay: { date: string; duration: number } | null longestSession: { date: string; duration: number } | null topTabs: Array<{ fileName: string; duration: number; percentage: number }> tabTypeDistribution: Array<{ tabType: import('./tab.js').TabType; duration: number; percentage: number }> } export interface TimeTrackingEvent { type: 'tab-switch' | 'tab-open' | 'tab-close' | 'window-focus' | 'window-blur' | 'app-quit' | 'heartbeat' timestamp: string tabInfo?: { tabId: string filePath: string | null fileName: string tabType: import('./tab.js').TabType } }