Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 | export type TimerPhase = 'focus' | 'shortBreak' | 'longBreak'
export type TimerStatus = 'idle' | 'running' | 'paused' | 'completed'
export type CompletionReason = 'completed' | 'skipped' | 'abandoned' | 'needs-confirmation'
export type ThemePreference = 'system' | 'light' | 'dark'
export interface AppSettings {
focusMinutes: number
shortBreakMinutes: number
longBreakMinutes: number
longBreakInterval: number
autoStartBreaks: boolean
autoStartFocus: boolean
notificationsEnabled: boolean
soundEnabled: boolean
openAtLogin: boolean
startToTray: boolean
closeToTray: boolean
themePreference: ThemePreference
}
export interface Task {
id: string
title: string
sortOrder: number
completedAt: string | null
createdAt: string
updatedAt: string
}
export interface TaskBoardItem {
id: string
title: string
sortOrder: number
completedAt: string | null
createdAt: string
updatedAt: string
focusMinutes: number
completedPomodoros: number
}
export interface TaskBoardCounts {
all: number
active: number
completed: number
}
export interface TaskBoardSnapshot {
counts: TaskBoardCounts
activeItems: TaskBoardItem[]
completedItems: TaskBoardItem[]
}
export interface TimerSession {
id: string
phase: TimerPhase
taskId: string | null
startedAt: string
endedAt: string | null
durationMs: number
actualDurationMs: number | null
completed: boolean
completionReason: CompletionReason | null
createdAt: string
updatedAt: string
}
export interface TimerState {
status: TimerStatus
phase: TimerPhase
taskId: string | null
startedAt: number | null
targetEndAt: number | null
durationMs: number
remainingMs: number
focusCount: number
unboundFocusCount: number
lastFocusTaskId: string | null
sessionId: string | null
updatedAt: number
}
export interface TimerSnapshot extends TimerState {
elapsedMs: number
progress: number
}
export interface TodayStats {
focusMinutes: number
shortBreakMinutes: number
longBreakMinutes: number
completedPomodoros: number
completedTasks: number
}
export interface MonthStatsSummary {
focusMinutes: number
completedPomodoros: number
completedTasks: number
shortBreakMinutes: number
longBreakMinutes: number
}
export interface CalendarDayStats extends MonthStatsSummary {
date: string
isFuture: boolean
taskFocusMinutes: TaskFocusPoint[]
unboundFocusMinutes: number
}
export interface MonthStats {
year: number
month: number
summary: MonthStatsSummary
days: CalendarDayStats[]
maxFocusMinutes: number
}
export interface TaskFocusPoint {
taskId: string
title: string
minutes: number
status: 'active' | 'completed'
}
export interface FocusStats {
today: TodayStats
hourlyFocusMinutes: number[]
taskFocusMinutes: TaskFocusPoint[]
unboundFocusMinutes: number
}
export interface AppEvent {
id: string
type: string
payload: Record<string, unknown>
createdAt: string
}
|