epoch-tui 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (147) hide show
  1. package/dist/App.d.ts +3 -0
  2. package/dist/App.js +38 -0
  3. package/dist/components/calendar/CalendarPane.d.ts +2 -0
  4. package/dist/components/calendar/CalendarPane.js +91 -0
  5. package/dist/components/calendar/DayCell.d.ts +7 -0
  6. package/dist/components/calendar/DayCell.js +26 -0
  7. package/dist/components/calendar/MonthView.d.ts +7 -0
  8. package/dist/components/calendar/MonthView.js +10 -0
  9. package/dist/components/common/BorderedBox.d.ts +18 -0
  10. package/dist/components/common/BorderedBox.js +29 -0
  11. package/dist/components/common/ClearTimelineDialog.d.ts +2 -0
  12. package/dist/components/common/ClearTimelineDialog.js +33 -0
  13. package/dist/components/common/FullscreenBackground.d.ts +11 -0
  14. package/dist/components/common/FullscreenBackground.js +12 -0
  15. package/dist/components/common/HelpDialog.d.ts +2 -0
  16. package/dist/components/common/HelpDialog.js +40 -0
  17. package/dist/components/common/Modal.d.ts +10 -0
  18. package/dist/components/common/Modal.js +15 -0
  19. package/dist/components/common/Separator.d.ts +8 -0
  20. package/dist/components/common/Separator.js +10 -0
  21. package/dist/components/common/ThemeDialog.d.ts +2 -0
  22. package/dist/components/common/ThemeDialog.js +117 -0
  23. package/dist/components/common/ThemedScreen.d.ts +22 -0
  24. package/dist/components/common/ThemedScreen.js +36 -0
  25. package/dist/components/common/ThemedText.d.ts +11 -0
  26. package/dist/components/common/ThemedText.js +20 -0
  27. package/dist/components/layout/Pane.d.ts +12 -0
  28. package/dist/components/layout/Pane.js +10 -0
  29. package/dist/components/layout/ThreeColumnLayout.d.ts +13 -0
  30. package/dist/components/layout/ThreeColumnLayout.js +22 -0
  31. package/dist/components/overview/OverviewScreen.d.ts +2 -0
  32. package/dist/components/overview/OverviewScreen.js +138 -0
  33. package/dist/components/tasks/TaskHeader.d.ts +7 -0
  34. package/dist/components/tasks/TaskHeader.js +8 -0
  35. package/dist/components/tasks/TaskItem.d.ts +10 -0
  36. package/dist/components/tasks/TaskItem.js +25 -0
  37. package/dist/components/tasks/TaskList.d.ts +11 -0
  38. package/dist/components/tasks/TaskList.js +11 -0
  39. package/dist/components/tasks/TasksPane.d.ts +2 -0
  40. package/dist/components/tasks/TasksPane.js +410 -0
  41. package/dist/components/timeline/TimelineEntry.d.ts +9 -0
  42. package/dist/components/timeline/TimelineEntry.js +26 -0
  43. package/dist/components/timeline/TimelinePane.d.ts +2 -0
  44. package/dist/components/timeline/TimelinePane.js +78 -0
  45. package/dist/contexts/AppContext.d.ts +47 -0
  46. package/dist/contexts/AppContext.js +104 -0
  47. package/dist/contexts/StorageContext.d.ts +15 -0
  48. package/dist/contexts/StorageContext.js +83 -0
  49. package/dist/contexts/ThemeContext.d.ts +15 -0
  50. package/dist/contexts/ThemeContext.js +44 -0
  51. package/dist/hooks/useKeyboardNav.d.ts +1 -0
  52. package/dist/hooks/useKeyboardNav.js +89 -0
  53. package/dist/hooks/useTerminalSize.d.ts +9 -0
  54. package/dist/hooks/useTerminalSize.js +34 -0
  55. package/dist/index.d.ts +2 -0
  56. package/dist/index.js +8 -0
  57. package/dist/services/calendarService.d.ts +18 -0
  58. package/dist/services/calendarService.js +57 -0
  59. package/dist/services/storage.d.ts +14 -0
  60. package/dist/services/storage.js +130 -0
  61. package/dist/services/taskService.d.ts +17 -0
  62. package/dist/services/taskService.js +106 -0
  63. package/dist/services/timelineService.d.ts +25 -0
  64. package/dist/services/timelineService.js +78 -0
  65. package/dist/themes/amazon.d.ts +2 -0
  66. package/dist/themes/amazon.js +37 -0
  67. package/dist/themes/amazonLight.d.ts +2 -0
  68. package/dist/themes/amazonLight.js +38 -0
  69. package/dist/themes/apple.d.ts +2 -0
  70. package/dist/themes/apple.js +38 -0
  71. package/dist/themes/appleLight.d.ts +2 -0
  72. package/dist/themes/appleLight.js +38 -0
  73. package/dist/themes/atomOneDark.d.ts +2 -0
  74. package/dist/themes/atomOneDark.js +37 -0
  75. package/dist/themes/atomOneLight.d.ts +2 -0
  76. package/dist/themes/atomOneLight.js +38 -0
  77. package/dist/themes/batman.d.ts +2 -0
  78. package/dist/themes/batman.js +37 -0
  79. package/dist/themes/catppuccin.d.ts +2 -0
  80. package/dist/themes/catppuccin.js +37 -0
  81. package/dist/themes/catppuccinLatte.d.ts +2 -0
  82. package/dist/themes/catppuccinLatte.js +38 -0
  83. package/dist/themes/claude.d.ts +2 -0
  84. package/dist/themes/claude.js +48 -0
  85. package/dist/themes/claudeCode.d.ts +2 -0
  86. package/dist/themes/claudeCode.js +47 -0
  87. package/dist/themes/cursor.d.ts +2 -0
  88. package/dist/themes/cursor.js +38 -0
  89. package/dist/themes/cursorLight.d.ts +2 -0
  90. package/dist/themes/cursorLight.js +38 -0
  91. package/dist/themes/dark.d.ts +2 -0
  92. package/dist/themes/dark.js +38 -0
  93. package/dist/themes/githubDark.d.ts +2 -0
  94. package/dist/themes/githubDark.js +37 -0
  95. package/dist/themes/githubLight.d.ts +2 -0
  96. package/dist/themes/githubLight.js +38 -0
  97. package/dist/themes/index.d.ts +9 -0
  98. package/dist/themes/index.js +83 -0
  99. package/dist/themes/instagram.d.ts +2 -0
  100. package/dist/themes/instagram.js +37 -0
  101. package/dist/themes/instagramLight.d.ts +2 -0
  102. package/dist/themes/instagramLight.js +38 -0
  103. package/dist/themes/intellij.d.ts +2 -0
  104. package/dist/themes/intellij.js +37 -0
  105. package/dist/themes/intellijLight.d.ts +2 -0
  106. package/dist/themes/intellijLight.js +38 -0
  107. package/dist/themes/light.d.ts +2 -0
  108. package/dist/themes/light.js +38 -0
  109. package/dist/themes/nord.d.ts +2 -0
  110. package/dist/themes/nord.js +37 -0
  111. package/dist/themes/nordLight.d.ts +2 -0
  112. package/dist/themes/nordLight.js +38 -0
  113. package/dist/themes/postman.d.ts +2 -0
  114. package/dist/themes/postman.js +37 -0
  115. package/dist/themes/postmanLight.d.ts +2 -0
  116. package/dist/themes/postmanLight.js +38 -0
  117. package/dist/themes/spiderman.d.ts +2 -0
  118. package/dist/themes/spiderman.js +37 -0
  119. package/dist/themes/terminal.d.ts +2 -0
  120. package/dist/themes/terminal.js +37 -0
  121. package/dist/themes/ubuntu.d.ts +2 -0
  122. package/dist/themes/ubuntu.js +37 -0
  123. package/dist/themes/ubuntuLight.d.ts +2 -0
  124. package/dist/themes/ubuntuLight.js +38 -0
  125. package/dist/themes/x.d.ts +2 -0
  126. package/dist/themes/x.js +38 -0
  127. package/dist/themes/xLight.d.ts +2 -0
  128. package/dist/themes/xLight.js +38 -0
  129. package/dist/types/calendar.d.ts +19 -0
  130. package/dist/types/calendar.js +1 -0
  131. package/dist/types/storage.d.ts +21 -0
  132. package/dist/types/storage.js +1 -0
  133. package/dist/types/task.d.ts +21 -0
  134. package/dist/types/task.js +1 -0
  135. package/dist/types/theme.d.ts +38 -0
  136. package/dist/types/theme.js +1 -0
  137. package/dist/types/timeline.d.ts +23 -0
  138. package/dist/types/timeline.js +9 -0
  139. package/dist/utils/date.d.ts +7 -0
  140. package/dist/utils/date.js +37 -0
  141. package/dist/utils/logger.d.ts +3 -0
  142. package/dist/utils/logger.js +39 -0
  143. package/dist/utils/tree.d.ts +11 -0
  144. package/dist/utils/tree.js +64 -0
  145. package/dist/utils/validation.d.ts +7 -0
  146. package/dist/utils/validation.js +35 -0
  147. package/package.json +44 -0
@@ -0,0 +1,106 @@
1
+ import { v4 as uuid } from 'uuid';
2
+ import { findTaskById, updateTaskInTree, deleteTaskFromTree, addSubtaskToTree, getTaskStats, } from '../utils/tree';
3
+ import { validateTaskTitle, validateTaskTimes } from '../utils/validation';
4
+ export class TaskService {
5
+ createTask(title, date, state = 'todo') {
6
+ const validation = validateTaskTitle(title);
7
+ if (!validation.valid) {
8
+ throw new Error(validation.error);
9
+ }
10
+ const now = new Date();
11
+ return {
12
+ id: uuid(),
13
+ title,
14
+ state,
15
+ createdAt: now,
16
+ updatedAt: now,
17
+ children: [],
18
+ date,
19
+ };
20
+ }
21
+ updateTask(tasks, taskId, updates) {
22
+ const dateStr = Object.keys(tasks).find(date => findTaskById(tasks[date], taskId));
23
+ if (!dateStr) {
24
+ throw new Error('Task not found');
25
+ }
26
+ if (updates.title) {
27
+ const validation = validateTaskTitle(updates.title);
28
+ if (!validation.valid) {
29
+ throw new Error(validation.error);
30
+ }
31
+ }
32
+ if (updates.startTime || updates.endTime) {
33
+ const task = findTaskById(tasks[dateStr], taskId);
34
+ if (task) {
35
+ const updated = { ...task, ...updates };
36
+ const validation = validateTaskTimes(updated);
37
+ if (!validation.valid) {
38
+ throw new Error(validation.error);
39
+ }
40
+ }
41
+ }
42
+ return {
43
+ ...tasks,
44
+ [dateStr]: updateTaskInTree(tasks[dateStr], taskId, {
45
+ ...updates,
46
+ updatedAt: new Date(),
47
+ }),
48
+ };
49
+ }
50
+ deleteTask(tasks, taskId) {
51
+ const dateStr = Object.keys(tasks).find(date => findTaskById(tasks[date], taskId));
52
+ if (!dateStr) {
53
+ throw new Error('Task not found');
54
+ }
55
+ return {
56
+ ...tasks,
57
+ [dateStr]: deleteTaskFromTree(tasks[dateStr], taskId),
58
+ };
59
+ }
60
+ addSubtask(tasks, parentId, title) {
61
+ const parentTask = Object.values(tasks)
62
+ .flat()
63
+ .find(t => findTaskById([t], parentId));
64
+ if (!parentTask) {
65
+ throw new Error('Parent task not found');
66
+ }
67
+ const newSubtask = this.createTask(title, parentTask.date);
68
+ const dateStr = Object.keys(tasks).find(date => findTaskById(tasks[date], parentId));
69
+ if (!dateStr) {
70
+ throw new Error('Parent task not found');
71
+ }
72
+ return {
73
+ ...tasks,
74
+ [dateStr]: addSubtaskToTree(tasks[dateStr], parentId, {
75
+ ...newSubtask,
76
+ parentId,
77
+ }),
78
+ };
79
+ }
80
+ changeTaskState(tasks, taskId, newState) {
81
+ return this.updateTask(tasks, taskId, {
82
+ state: newState,
83
+ endTime: ['completed', 'delegated', 'delayed'].includes(newState)
84
+ ? new Date()
85
+ : undefined,
86
+ });
87
+ }
88
+ startTask(tasks, taskId, startTime) {
89
+ // Clear endTime when starting a task (in case it was previously completed)
90
+ return this.updateTask(tasks, taskId, {
91
+ startTime: startTime || new Date(),
92
+ endTime: undefined,
93
+ state: 'todo', // Reset to todo when starting
94
+ });
95
+ }
96
+ getTasksForDate(tasks, date) {
97
+ return tasks[date] || [];
98
+ }
99
+ getAllTasks(tasks) {
100
+ return Object.values(tasks).flat();
101
+ }
102
+ getTaskStats(tasks, date) {
103
+ return getTaskStats(this.getTasksForDate(tasks, date));
104
+ }
105
+ }
106
+ export const taskService = new TaskService();
@@ -0,0 +1,25 @@
1
+ import type { TimelineEvent, TimelineEventType } from '../types/timeline';
2
+ import type { TaskState } from '../types/task';
3
+ export declare class TimelineService {
4
+ createEvent(taskId: string, taskTitle: string, eventType: TimelineEventType, timestamp?: Date, previousState?: TaskState, newState?: TaskState): TimelineEvent;
5
+ getEventsForDate(timeline: {
6
+ [date: string]: TimelineEvent[];
7
+ }, date: string): TimelineEvent[];
8
+ addEvent(timeline: {
9
+ [date: string]: TimelineEvent[];
10
+ }, event: TimelineEvent): {
11
+ [date: string]: TimelineEvent[];
12
+ };
13
+ removeEventsByTaskId(timeline: {
14
+ [date: string]: TimelineEvent[];
15
+ }, taskId: string): {
16
+ [date: string]: TimelineEvent[];
17
+ };
18
+ removeLastEventByType(timeline: {
19
+ [date: string]: TimelineEvent[];
20
+ }, taskId: string, eventType: TimelineEventType): {
21
+ [date: string]: TimelineEvent[];
22
+ };
23
+ formatEventDescription(event: TimelineEvent): string;
24
+ }
25
+ export declare const timelineService: TimelineService;
@@ -0,0 +1,78 @@
1
+ import { v4 as uuid } from 'uuid';
2
+ import { getDateString } from '../utils/date';
3
+ export class TimelineService {
4
+ createEvent(taskId, taskTitle, eventType, timestamp = new Date(), previousState, newState) {
5
+ return {
6
+ id: uuid(),
7
+ taskId,
8
+ taskTitle,
9
+ type: eventType,
10
+ timestamp,
11
+ previousState,
12
+ newState,
13
+ };
14
+ }
15
+ getEventsForDate(timeline, date) {
16
+ return timeline[date] || [];
17
+ }
18
+ addEvent(timeline, event) {
19
+ const dateStr = getDateString(event.timestamp);
20
+ return {
21
+ ...timeline,
22
+ [dateStr]: [...(timeline[dateStr] || []), event],
23
+ };
24
+ }
25
+ // Remove all events for a specific task (used when deleting a task)
26
+ removeEventsByTaskId(timeline, taskId) {
27
+ const result = {};
28
+ for (const [date, events] of Object.entries(timeline)) {
29
+ const filtered = events.filter(e => e.taskId !== taskId);
30
+ if (filtered.length > 0) {
31
+ result[date] = filtered;
32
+ }
33
+ }
34
+ return result;
35
+ }
36
+ // Remove the last event of a specific type for a task (used for undo operations)
37
+ removeLastEventByType(timeline, taskId, eventType) {
38
+ const result = {};
39
+ let removed = false;
40
+ // Process dates in reverse order to find the most recent event
41
+ const dates = Object.keys(timeline).sort().reverse();
42
+ for (const date of dates) {
43
+ const events = timeline[date];
44
+ if (!removed) {
45
+ // Find the last matching event in this date's events
46
+ const lastIndex = events.map((e, i) => ({ e, i }))
47
+ .filter(({ e }) => e.taskId === taskId && e.type === eventType)
48
+ .pop()?.i;
49
+ if (lastIndex !== undefined) {
50
+ const filtered = events.filter((_, i) => i !== lastIndex);
51
+ if (filtered.length > 0) {
52
+ result[date] = filtered;
53
+ }
54
+ removed = true;
55
+ }
56
+ else {
57
+ result[date] = events;
58
+ }
59
+ }
60
+ else {
61
+ result[date] = events;
62
+ }
63
+ }
64
+ return result;
65
+ }
66
+ formatEventDescription(event) {
67
+ const timeStr = event.timestamp.toLocaleTimeString('en-US', {
68
+ hour: '2-digit',
69
+ minute: '2-digit',
70
+ hour12: true,
71
+ });
72
+ const stateInfo = event.newState
73
+ ? ` (${event.previousState} -> ${event.newState})`
74
+ : '';
75
+ return `${timeStr} - ${event.type.charAt(0).toUpperCase() + event.type.slice(1)}: ${event.taskTitle}${stateInfo}`;
76
+ }
77
+ }
78
+ export const timelineService = new TimelineService();
@@ -0,0 +1,2 @@
1
+ import type { Theme } from '../types/theme';
2
+ export declare const amazonTheme: Theme;
@@ -0,0 +1,37 @@
1
+ export const amazonTheme = {
2
+ name: 'amazon',
3
+ colors: {
4
+ background: '#131A22',
5
+ foreground: '#ffffff',
6
+ border: '#232f3e',
7
+ calendarBorder: '#232f3e',
8
+ calendarHeader: '#ff9900', // Amazon Orange
9
+ calendarToday: '#ff9900',
10
+ calendarSelected: '#ff9900',
11
+ calendarDayWithTasks: '#ff9900',
12
+ calendarDayOtherMonth: '#3a4553',
13
+ taskBorder: '#232f3e',
14
+ taskHeader: '#ff9900',
15
+ taskCheckboxEmpty: '#3a4553',
16
+ taskCheckboxFilled: '#ff9900',
17
+ taskStateTodo: '#ffffff',
18
+ taskStateCompleted: '#565959',
19
+ taskStateDelegated: '#146eb4', // Amazon Prime blueish
20
+ taskStateDelayed: '#ff9900',
21
+ taskIndent: '#232f3e',
22
+ timelineBorder: '#232f3e',
23
+ timelineHeader: '#ff9900',
24
+ timelineTimestamp: '#565959',
25
+ timelineEventCreated: '#ff9900',
26
+ timelineEventStarted: '#ff9900',
27
+ timelineEventCompleted: '#ff9900',
28
+ timelineEventDelegated: '#146eb4',
29
+ timelineEventDelayed: '#cc0c39',
30
+ separator: '#232f3e',
31
+ keyboardHint: '#565959',
32
+ helpDialogBorder: '#ff9900',
33
+ focusIndicator: '#ff9900',
34
+ modalOverlay: '#00000099',
35
+ modalBackground: '#232f3e',
36
+ },
37
+ };
@@ -0,0 +1,2 @@
1
+ import type { Theme } from '../types/theme';
2
+ export declare const amazonLightTheme: Theme;
@@ -0,0 +1,38 @@
1
+ // Amazon Light theme - Official Amazon light mode colors
2
+ export const amazonLightTheme = {
3
+ name: 'amazon-light',
4
+ colors: {
5
+ background: '#ffffff',
6
+ foreground: '#0f1111',
7
+ border: '#ddd',
8
+ calendarBorder: '#ddd',
9
+ calendarHeader: '#ff9900', // Amazon Orange
10
+ calendarToday: '#ff9900',
11
+ calendarSelected: '#ff9900',
12
+ calendarDayWithTasks: '#ff9900',
13
+ calendarDayOtherMonth: '#565959',
14
+ taskBorder: '#ddd',
15
+ taskHeader: '#ff9900',
16
+ taskCheckboxEmpty: '#565959',
17
+ taskCheckboxFilled: '#ff9900',
18
+ taskStateTodo: '#0f1111',
19
+ taskStateCompleted: '#565959',
20
+ taskStateDelegated: '#146eb4', // Amazon Prime blue
21
+ taskStateDelayed: '#b12704', // Amazon red/warning
22
+ taskIndent: '#ddd',
23
+ timelineBorder: '#ddd',
24
+ timelineHeader: '#ff9900',
25
+ timelineTimestamp: '#565959',
26
+ timelineEventCreated: '#ff9900',
27
+ timelineEventStarted: '#ff9900',
28
+ timelineEventCompleted: '#007600', // Amazon green (success)
29
+ timelineEventDelegated: '#146eb4',
30
+ timelineEventDelayed: '#b12704',
31
+ separator: '#ddd',
32
+ keyboardHint: '#565959',
33
+ helpDialogBorder: '#ff9900',
34
+ focusIndicator: '#ff9900',
35
+ modalOverlay: '#00000033',
36
+ modalBackground: '#f7f8f8',
37
+ },
38
+ };
@@ -0,0 +1,2 @@
1
+ import type { Theme } from '../types/theme';
2
+ export declare const appleTheme: Theme;
@@ -0,0 +1,38 @@
1
+ // Apple Dark theme - Official macOS Dark Mode system colors
2
+ export const appleTheme = {
3
+ name: 'apple',
4
+ colors: {
5
+ background: '#1c1c1e', // System Background Dark
6
+ foreground: '#ffffff',
7
+ border: '#38383a', // System Gray 5 Dark
8
+ calendarBorder: '#38383a',
9
+ calendarHeader: '#0a84ff', // System Blue Dark
10
+ calendarToday: '#0a84ff',
11
+ calendarSelected: '#0a84ff',
12
+ calendarDayWithTasks: '#30d158', // System Green Dark
13
+ calendarDayOtherMonth: '#636366', // System Gray 3 Dark
14
+ taskBorder: '#38383a',
15
+ taskHeader: '#0a84ff',
16
+ taskCheckboxEmpty: '#636366',
17
+ taskCheckboxFilled: '#30d158',
18
+ taskStateTodo: '#ffffff',
19
+ taskStateCompleted: '#8e8e93', // System Gray Dark
20
+ taskStateDelegated: '#bf5af2', // System Purple Dark
21
+ taskStateDelayed: '#ff9f0a', // System Orange Dark
22
+ taskIndent: '#48484a', // System Gray 4 Dark
23
+ timelineBorder: '#38383a',
24
+ timelineHeader: '#0a84ff',
25
+ timelineTimestamp: '#8e8e93',
26
+ timelineEventCreated: '#0a84ff',
27
+ timelineEventStarted: '#ff9f0a',
28
+ timelineEventCompleted: '#30d158',
29
+ timelineEventDelegated: '#bf5af2',
30
+ timelineEventDelayed: '#ff453a', // System Red Dark
31
+ separator: '#38383a',
32
+ keyboardHint: '#8e8e93',
33
+ helpDialogBorder: '#0a84ff',
34
+ focusIndicator: '#0a84ff',
35
+ modalOverlay: '#00000066',
36
+ modalBackground: '#2c2c2e', // System Gray 5 Dark
37
+ },
38
+ };
@@ -0,0 +1,2 @@
1
+ import type { Theme } from '../types/theme';
2
+ export declare const appleLightTheme: Theme;
@@ -0,0 +1,38 @@
1
+ // Apple Light theme using official macOS Light Mode colors
2
+ export const appleLightTheme = {
3
+ name: 'apple-light',
4
+ colors: {
5
+ background: '#ffffff', // System Background Light
6
+ foreground: '#000000',
7
+ border: '#d1d1d6', // System Gray 4 Light
8
+ calendarBorder: '#d1d1d6',
9
+ calendarHeader: '#007aff', // System Blue Light
10
+ calendarToday: '#007aff',
11
+ calendarSelected: '#007aff',
12
+ calendarDayWithTasks: '#34c759', // System Green Light
13
+ calendarDayOtherMonth: '#8e8e93', // System Gray Light
14
+ taskBorder: '#d1d1d6',
15
+ taskHeader: '#007aff',
16
+ taskCheckboxEmpty: '#8e8e93',
17
+ taskCheckboxFilled: '#34c759',
18
+ taskStateTodo: '#000000',
19
+ taskStateCompleted: '#8e8e93',
20
+ taskStateDelegated: '#af52de', // System Purple Light
21
+ taskStateDelayed: '#ff9500', // System Orange Light
22
+ taskIndent: '#c7c7cc',
23
+ timelineBorder: '#d1d1d6',
24
+ timelineHeader: '#007aff',
25
+ timelineTimestamp: '#8e8e93',
26
+ timelineEventCreated: '#007aff',
27
+ timelineEventStarted: '#ff9500',
28
+ timelineEventCompleted: '#34c759',
29
+ timelineEventDelegated: '#af52de',
30
+ timelineEventDelayed: '#ff3b30', // System Red Light
31
+ separator: '#d1d1d6',
32
+ keyboardHint: '#8e8e93',
33
+ helpDialogBorder: '#007aff',
34
+ focusIndicator: '#007aff',
35
+ modalOverlay: '#00000033',
36
+ modalBackground: '#f2f2f7', // System Gray 6 Light
37
+ },
38
+ };
@@ -0,0 +1,2 @@
1
+ import type { Theme } from '../types/theme';
2
+ export declare const atomOneDarkTheme: Theme;
@@ -0,0 +1,37 @@
1
+ export const atomOneDarkTheme = {
2
+ name: 'atom',
3
+ colors: {
4
+ background: '#282c34',
5
+ foreground: '#abb2bf',
6
+ border: '#4b5263',
7
+ calendarBorder: '#4b5263',
8
+ calendarHeader: '#61afef', // Blue
9
+ calendarToday: '#c678dd', // Purple
10
+ calendarSelected: '#c678dd',
11
+ calendarDayWithTasks: '#98c379', // Green
12
+ calendarDayOtherMonth: '#5c6370',
13
+ taskBorder: '#4b5263',
14
+ taskHeader: '#61afef',
15
+ taskCheckboxEmpty: '#5c6370',
16
+ taskCheckboxFilled: '#98c379',
17
+ taskStateTodo: '#abb2bf',
18
+ taskStateCompleted: '#5c6370',
19
+ taskStateDelegated: '#c678dd',
20
+ taskStateDelayed: '#e5c07b', // Yellow
21
+ taskIndent: '#5c6370',
22
+ timelineBorder: '#4b5263',
23
+ timelineHeader: '#61afef',
24
+ timelineTimestamp: '#5c6370',
25
+ timelineEventCreated: '#61afef',
26
+ timelineEventStarted: '#e5c07b',
27
+ timelineEventCompleted: '#98c379',
28
+ timelineEventDelegated: '#c678dd',
29
+ timelineEventDelayed: '#e06c75', // Red
30
+ separator: '#4b5263',
31
+ keyboardHint: '#5c6370',
32
+ helpDialogBorder: '#61afef',
33
+ focusIndicator: '#56b6c2', // Cyan
34
+ modalOverlay: '#21252b',
35
+ modalBackground: '#282c34',
36
+ },
37
+ };
@@ -0,0 +1,2 @@
1
+ import type { Theme } from '../types/theme';
2
+ export declare const atomOneLightTheme: Theme;
@@ -0,0 +1,38 @@
1
+ // Atom One Light theme - official Atom One Light palette
2
+ export const atomOneLightTheme = {
3
+ name: 'atom-light',
4
+ colors: {
5
+ background: '#fafafa',
6
+ foreground: '#383a42',
7
+ border: '#a0a1a7',
8
+ calendarBorder: '#a0a1a7',
9
+ calendarHeader: '#4078f2', // Blue
10
+ calendarToday: '#a626a4', // Purple
11
+ calendarSelected: '#a626a4',
12
+ calendarDayWithTasks: '#50a14f', // Green
13
+ calendarDayOtherMonth: '#a0a1a7',
14
+ taskBorder: '#a0a1a7',
15
+ taskHeader: '#4078f2',
16
+ taskCheckboxEmpty: '#a0a1a7',
17
+ taskCheckboxFilled: '#50a14f',
18
+ taskStateTodo: '#383a42',
19
+ taskStateCompleted: '#a0a1a7',
20
+ taskStateDelegated: '#a626a4',
21
+ taskStateDelayed: '#c18401', // Yellow/Orange
22
+ taskIndent: '#d0d0d0',
23
+ timelineBorder: '#a0a1a7',
24
+ timelineHeader: '#4078f2',
25
+ timelineTimestamp: '#a0a1a7',
26
+ timelineEventCreated: '#4078f2',
27
+ timelineEventStarted: '#c18401',
28
+ timelineEventCompleted: '#50a14f',
29
+ timelineEventDelegated: '#a626a4',
30
+ timelineEventDelayed: '#e45649', // Red
31
+ separator: '#a0a1a7',
32
+ keyboardHint: '#a0a1a7',
33
+ helpDialogBorder: '#4078f2',
34
+ focusIndicator: '#0184bc', // Cyan
35
+ modalOverlay: '#e8e8e8',
36
+ modalBackground: '#fafafa',
37
+ },
38
+ };
@@ -0,0 +1,2 @@
1
+ import type { Theme } from '../types/theme';
2
+ export declare const batmanTheme: Theme;
@@ -0,0 +1,37 @@
1
+ export const batmanTheme = {
2
+ name: 'batman',
3
+ colors: {
4
+ background: '#000000',
5
+ foreground: '#d6d6d6',
6
+ border: '#333333',
7
+ calendarBorder: '#333333',
8
+ calendarHeader: '#ffff00', // Bright Yellow
9
+ calendarToday: '#ffff00',
10
+ calendarSelected: '#ffff00',
11
+ calendarDayWithTasks: '#ffff00',
12
+ calendarDayOtherMonth: '#444444',
13
+ taskBorder: '#333333',
14
+ taskHeader: '#ffff00',
15
+ taskCheckboxEmpty: '#444444',
16
+ taskCheckboxFilled: '#ffff00',
17
+ taskStateTodo: '#d6d6d6',
18
+ taskStateCompleted: '#555555',
19
+ taskStateDelegated: '#2a3c5f', // Dark Knight Blue
20
+ taskStateDelayed: '#e6aa5f', // Goldish
21
+ taskIndent: '#333333',
22
+ timelineBorder: '#333333',
23
+ timelineHeader: '#ffff00',
24
+ timelineTimestamp: '#555555',
25
+ timelineEventCreated: '#ffff00',
26
+ timelineEventStarted: '#e6aa5f',
27
+ timelineEventCompleted: '#ffff00',
28
+ timelineEventDelegated: '#2a3c5f',
29
+ timelineEventDelayed: '#8c541c',
30
+ separator: '#333333',
31
+ keyboardHint: '#444444',
32
+ helpDialogBorder: '#ffff00',
33
+ focusIndicator: '#ffff00',
34
+ modalOverlay: '#00000099',
35
+ modalBackground: '#1a1a1a',
36
+ },
37
+ };
@@ -0,0 +1,2 @@
1
+ import type { Theme } from '../types/theme';
2
+ export declare const catppuccinTheme: Theme;
@@ -0,0 +1,37 @@
1
+ export const catppuccinTheme = {
2
+ name: 'catppuccin',
3
+ colors: {
4
+ background: '#1e1e2e',
5
+ foreground: '#cdd6f4',
6
+ border: '#45475a',
7
+ calendarBorder: '#45475a',
8
+ calendarHeader: '#89b4fa', // Blue
9
+ calendarToday: '#cba6f7', // Mauve
10
+ calendarSelected: '#cba6f7',
11
+ calendarDayWithTasks: '#a6e3a1', // Green
12
+ calendarDayOtherMonth: '#585b70', // Surface 2
13
+ taskBorder: '#45475a',
14
+ taskHeader: '#89b4fa',
15
+ taskCheckboxEmpty: '#585b70',
16
+ taskCheckboxFilled: '#a6e3a1',
17
+ taskStateTodo: '#cdd6f4',
18
+ taskStateCompleted: '#a6adc8', // Subtext 0
19
+ taskStateDelegated: '#f5c2e7', // Pink
20
+ taskStateDelayed: '#fab387', // Peach
21
+ taskIndent: '#585b70',
22
+ timelineBorder: '#45475a',
23
+ timelineHeader: '#89b4fa',
24
+ timelineTimestamp: '#a6adc8',
25
+ timelineEventCreated: '#89b4fa',
26
+ timelineEventStarted: '#fab387',
27
+ timelineEventCompleted: '#a6e3a1',
28
+ timelineEventDelegated: '#f5c2e7',
29
+ timelineEventDelayed: '#f38ba8', // Red
30
+ separator: '#45475a',
31
+ keyboardHint: '#a6adc8',
32
+ helpDialogBorder: '#cba6f7',
33
+ focusIndicator: '#cba6f7',
34
+ modalOverlay: '#181825', // Mantle
35
+ modalBackground: '#1e1e2e',
36
+ },
37
+ };
@@ -0,0 +1,2 @@
1
+ import type { Theme } from '../types/theme';
2
+ export declare const catppuccinLatteTheme: Theme;
@@ -0,0 +1,38 @@
1
+ // Catppuccin Latte (Light variant) - official Catppuccin palette
2
+ export const catppuccinLatteTheme = {
3
+ name: 'catppuccin-latte',
4
+ colors: {
5
+ background: '#eff1f5', // Base
6
+ foreground: '#4c4f69', // Text
7
+ border: '#ccd0da', // Surface 0
8
+ calendarBorder: '#ccd0da',
9
+ calendarHeader: '#1e66f5', // Blue
10
+ calendarToday: '#8839ef', // Mauve
11
+ calendarSelected: '#8839ef',
12
+ calendarDayWithTasks: '#40a02b', // Green
13
+ calendarDayOtherMonth: '#9ca0b0', // Overlay 0
14
+ taskBorder: '#ccd0da',
15
+ taskHeader: '#1e66f5',
16
+ taskCheckboxEmpty: '#9ca0b0',
17
+ taskCheckboxFilled: '#40a02b',
18
+ taskStateTodo: '#4c4f69',
19
+ taskStateCompleted: '#6c6f85', // Subtext 0
20
+ taskStateDelegated: '#ea76cb', // Pink
21
+ taskStateDelayed: '#fe640b', // Peach
22
+ taskIndent: '#bcc0cc', // Surface 1
23
+ timelineBorder: '#ccd0da',
24
+ timelineHeader: '#1e66f5',
25
+ timelineTimestamp: '#6c6f85',
26
+ timelineEventCreated: '#1e66f5',
27
+ timelineEventStarted: '#fe640b',
28
+ timelineEventCompleted: '#40a02b',
29
+ timelineEventDelegated: '#ea76cb',
30
+ timelineEventDelayed: '#d20f39', // Red
31
+ separator: '#ccd0da',
32
+ keyboardHint: '#6c6f85',
33
+ helpDialogBorder: '#8839ef',
34
+ focusIndicator: '#8839ef',
35
+ modalOverlay: '#e6e9ef', // Mantle
36
+ modalBackground: '#eff1f5',
37
+ },
38
+ };
@@ -0,0 +1,2 @@
1
+ import type { Theme } from '../types/theme';
2
+ export declare const claudeTheme: Theme;
@@ -0,0 +1,48 @@
1
+ // Claude theme with warm, sophisticated color palette
2
+ // Primary accent: Rust (#C15F3C)
3
+ // Secondary: Taupe (#B1ADA1)
4
+ // Background: Cream (#F4F3EE)
5
+ // Foreground: White (#FFFFFF)
6
+ export const claudeTheme = {
7
+ name: 'claude',
8
+ colors: {
9
+ // Warm cream background with white text
10
+ background: '#F4F3EE',
11
+ foreground: '#1a1614',
12
+ border: '#B1ADA1',
13
+ // Calendar - Rust accents
14
+ calendarBorder: '#B1ADA1',
15
+ calendarHeader: '#C15F3C',
16
+ calendarToday: '#C15F3C',
17
+ calendarSelected: '#C15F3C',
18
+ calendarDayWithTasks: '#C15F3C',
19
+ calendarDayOtherMonth: '#736F66', // Darker for readability
20
+ // Tasks - Warm palette
21
+ taskBorder: '#B1ADA1',
22
+ taskHeader: '#C15F3C',
23
+ taskCheckboxEmpty: '#736F66', // Darker for readability
24
+ taskCheckboxFilled: '#98C379',
25
+ taskStateTodo: '#1a1614',
26
+ taskStateCompleted: '#98C379',
27
+ taskStateDelegated: '#736F66', // Darker for readability
28
+ taskStateDelayed: '#E06C75',
29
+ taskIndent: '#B1ADA1',
30
+ // Timeline - Rust theme
31
+ timelineBorder: '#B1ADA1',
32
+ timelineHeader: '#C15F3C',
33
+ timelineTimestamp: '#736F66', // Darker for readability
34
+ timelineEventCreated: '#61AFEF',
35
+ timelineEventStarted: '#C15F3C',
36
+ timelineEventCompleted: '#98C379',
37
+ timelineEventDelegated: '#736F66',
38
+ timelineEventDelayed: '#E06C75',
39
+ // UI elements
40
+ separator: '#B1ADA1',
41
+ keyboardHint: '#736F66', // Darker for readability
42
+ helpDialogBorder: '#C15F3C',
43
+ focusIndicator: '#C15F3C',
44
+ // Modal - Light overlay
45
+ modalOverlay: '#F4F3EE',
46
+ modalBackground: '#FFFFFF',
47
+ },
48
+ };
@@ -0,0 +1,2 @@
1
+ import type { Theme } from '../types/theme';
2
+ export declare const claudeCodeTheme: Theme;