Initial commit
This commit is contained in:
101
shared/types/time.ts
Normal file
101
shared/types/time.ts
Normal file
@@ -0,0 +1,101 @@
|
||||
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<string, TabSummary>
|
||||
lastUpdated: string
|
||||
}
|
||||
|
||||
export interface DaySummary {
|
||||
totalDuration: number
|
||||
sessions: number
|
||||
topTabs: Array<{ fileName: string; duration: number }>
|
||||
}
|
||||
|
||||
export interface MonthTimeData {
|
||||
year: number
|
||||
month: number
|
||||
days: Record<string, DaySummary>
|
||||
monthlyTotal: number
|
||||
averageDaily: number
|
||||
activeDays: number
|
||||
lastUpdated: string
|
||||
}
|
||||
|
||||
export interface YearTimeData {
|
||||
year: number
|
||||
months: Record<string, { totalDuration: number; activeDays: number }>
|
||||
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
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user