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.
- package/dist/App.d.ts +3 -0
- package/dist/App.js +38 -0
- package/dist/components/calendar/CalendarPane.d.ts +2 -0
- package/dist/components/calendar/CalendarPane.js +91 -0
- package/dist/components/calendar/DayCell.d.ts +7 -0
- package/dist/components/calendar/DayCell.js +26 -0
- package/dist/components/calendar/MonthView.d.ts +7 -0
- package/dist/components/calendar/MonthView.js +10 -0
- package/dist/components/common/BorderedBox.d.ts +18 -0
- package/dist/components/common/BorderedBox.js +29 -0
- package/dist/components/common/ClearTimelineDialog.d.ts +2 -0
- package/dist/components/common/ClearTimelineDialog.js +33 -0
- package/dist/components/common/FullscreenBackground.d.ts +11 -0
- package/dist/components/common/FullscreenBackground.js +12 -0
- package/dist/components/common/HelpDialog.d.ts +2 -0
- package/dist/components/common/HelpDialog.js +40 -0
- package/dist/components/common/Modal.d.ts +10 -0
- package/dist/components/common/Modal.js +15 -0
- package/dist/components/common/Separator.d.ts +8 -0
- package/dist/components/common/Separator.js +10 -0
- package/dist/components/common/ThemeDialog.d.ts +2 -0
- package/dist/components/common/ThemeDialog.js +117 -0
- package/dist/components/common/ThemedScreen.d.ts +22 -0
- package/dist/components/common/ThemedScreen.js +36 -0
- package/dist/components/common/ThemedText.d.ts +11 -0
- package/dist/components/common/ThemedText.js +20 -0
- package/dist/components/layout/Pane.d.ts +12 -0
- package/dist/components/layout/Pane.js +10 -0
- package/dist/components/layout/ThreeColumnLayout.d.ts +13 -0
- package/dist/components/layout/ThreeColumnLayout.js +22 -0
- package/dist/components/overview/OverviewScreen.d.ts +2 -0
- package/dist/components/overview/OverviewScreen.js +138 -0
- package/dist/components/tasks/TaskHeader.d.ts +7 -0
- package/dist/components/tasks/TaskHeader.js +8 -0
- package/dist/components/tasks/TaskItem.d.ts +10 -0
- package/dist/components/tasks/TaskItem.js +25 -0
- package/dist/components/tasks/TaskList.d.ts +11 -0
- package/dist/components/tasks/TaskList.js +11 -0
- package/dist/components/tasks/TasksPane.d.ts +2 -0
- package/dist/components/tasks/TasksPane.js +410 -0
- package/dist/components/timeline/TimelineEntry.d.ts +9 -0
- package/dist/components/timeline/TimelineEntry.js +26 -0
- package/dist/components/timeline/TimelinePane.d.ts +2 -0
- package/dist/components/timeline/TimelinePane.js +78 -0
- package/dist/contexts/AppContext.d.ts +47 -0
- package/dist/contexts/AppContext.js +104 -0
- package/dist/contexts/StorageContext.d.ts +15 -0
- package/dist/contexts/StorageContext.js +83 -0
- package/dist/contexts/ThemeContext.d.ts +15 -0
- package/dist/contexts/ThemeContext.js +44 -0
- package/dist/hooks/useKeyboardNav.d.ts +1 -0
- package/dist/hooks/useKeyboardNav.js +89 -0
- package/dist/hooks/useTerminalSize.d.ts +9 -0
- package/dist/hooks/useTerminalSize.js +34 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +8 -0
- package/dist/services/calendarService.d.ts +18 -0
- package/dist/services/calendarService.js +57 -0
- package/dist/services/storage.d.ts +14 -0
- package/dist/services/storage.js +130 -0
- package/dist/services/taskService.d.ts +17 -0
- package/dist/services/taskService.js +106 -0
- package/dist/services/timelineService.d.ts +25 -0
- package/dist/services/timelineService.js +78 -0
- package/dist/themes/amazon.d.ts +2 -0
- package/dist/themes/amazon.js +37 -0
- package/dist/themes/amazonLight.d.ts +2 -0
- package/dist/themes/amazonLight.js +38 -0
- package/dist/themes/apple.d.ts +2 -0
- package/dist/themes/apple.js +38 -0
- package/dist/themes/appleLight.d.ts +2 -0
- package/dist/themes/appleLight.js +38 -0
- package/dist/themes/atomOneDark.d.ts +2 -0
- package/dist/themes/atomOneDark.js +37 -0
- package/dist/themes/atomOneLight.d.ts +2 -0
- package/dist/themes/atomOneLight.js +38 -0
- package/dist/themes/batman.d.ts +2 -0
- package/dist/themes/batman.js +37 -0
- package/dist/themes/catppuccin.d.ts +2 -0
- package/dist/themes/catppuccin.js +37 -0
- package/dist/themes/catppuccinLatte.d.ts +2 -0
- package/dist/themes/catppuccinLatte.js +38 -0
- package/dist/themes/claude.d.ts +2 -0
- package/dist/themes/claude.js +48 -0
- package/dist/themes/claudeCode.d.ts +2 -0
- package/dist/themes/claudeCode.js +47 -0
- package/dist/themes/cursor.d.ts +2 -0
- package/dist/themes/cursor.js +38 -0
- package/dist/themes/cursorLight.d.ts +2 -0
- package/dist/themes/cursorLight.js +38 -0
- package/dist/themes/dark.d.ts +2 -0
- package/dist/themes/dark.js +38 -0
- package/dist/themes/githubDark.d.ts +2 -0
- package/dist/themes/githubDark.js +37 -0
- package/dist/themes/githubLight.d.ts +2 -0
- package/dist/themes/githubLight.js +38 -0
- package/dist/themes/index.d.ts +9 -0
- package/dist/themes/index.js +83 -0
- package/dist/themes/instagram.d.ts +2 -0
- package/dist/themes/instagram.js +37 -0
- package/dist/themes/instagramLight.d.ts +2 -0
- package/dist/themes/instagramLight.js +38 -0
- package/dist/themes/intellij.d.ts +2 -0
- package/dist/themes/intellij.js +37 -0
- package/dist/themes/intellijLight.d.ts +2 -0
- package/dist/themes/intellijLight.js +38 -0
- package/dist/themes/light.d.ts +2 -0
- package/dist/themes/light.js +38 -0
- package/dist/themes/nord.d.ts +2 -0
- package/dist/themes/nord.js +37 -0
- package/dist/themes/nordLight.d.ts +2 -0
- package/dist/themes/nordLight.js +38 -0
- package/dist/themes/postman.d.ts +2 -0
- package/dist/themes/postman.js +37 -0
- package/dist/themes/postmanLight.d.ts +2 -0
- package/dist/themes/postmanLight.js +38 -0
- package/dist/themes/spiderman.d.ts +2 -0
- package/dist/themes/spiderman.js +37 -0
- package/dist/themes/terminal.d.ts +2 -0
- package/dist/themes/terminal.js +37 -0
- package/dist/themes/ubuntu.d.ts +2 -0
- package/dist/themes/ubuntu.js +37 -0
- package/dist/themes/ubuntuLight.d.ts +2 -0
- package/dist/themes/ubuntuLight.js +38 -0
- package/dist/themes/x.d.ts +2 -0
- package/dist/themes/x.js +38 -0
- package/dist/themes/xLight.d.ts +2 -0
- package/dist/themes/xLight.js +38 -0
- package/dist/types/calendar.d.ts +19 -0
- package/dist/types/calendar.js +1 -0
- package/dist/types/storage.d.ts +21 -0
- package/dist/types/storage.js +1 -0
- package/dist/types/task.d.ts +21 -0
- package/dist/types/task.js +1 -0
- package/dist/types/theme.d.ts +38 -0
- package/dist/types/theme.js +1 -0
- package/dist/types/timeline.d.ts +23 -0
- package/dist/types/timeline.js +9 -0
- package/dist/utils/date.d.ts +7 -0
- package/dist/utils/date.js +37 -0
- package/dist/utils/logger.d.ts +3 -0
- package/dist/utils/logger.js +39 -0
- package/dist/utils/tree.d.ts +11 -0
- package/dist/utils/tree.js +64 -0
- package/dist/utils/validation.d.ts +7 -0
- package/dist/utils/validation.js +35 -0
- 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,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,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,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,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,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,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,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,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,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,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
|
+
};
|