+ {/* Header */}
+
+
+
+
+ Timeline
+
+
+ Visualize your memories on an interactive timeline
+
+
+
+
+ {/* Tab Navigation */}
+
+
+
+
+ {/* Timeline Implementation */}
+
+ {activeImplementation === 'frappe' && (
+
+ )}
+ {activeImplementation === 'mycelia' && (
+
+ )}
+
+
+ )
+}
diff --git a/ushadow/frontend/src/types/frappe-gantt.d.ts b/ushadow/frontend/src/types/frappe-gantt.d.ts
new file mode 100644
index 00000000..51455c2c
--- /dev/null
+++ b/ushadow/frontend/src/types/frappe-gantt.d.ts
@@ -0,0 +1,33 @@
+declare module 'frappe-gantt' {
+ export interface GanttTask {
+ id: string
+ name: string
+ start: string
+ end: string
+ progress?: number
+ dependencies?: string
+ custom_class?: string
+ }
+
+ export interface GanttOptions {
+ view_mode?: 'Day' | 'Week' | 'Month' | 'Year' | 'Quarter Day' | 'Half Day'
+ bar_height?: number
+ bar_corner_radius?: number
+ arrow_curve?: number
+ padding?: number
+ date_format?: string
+ language?: string
+ custom_popup_html?: (task: GanttTask) => string
+ popup_trigger?: 'click' | 'mouseover'
+ on_click?: (task: GanttTask) => void
+ on_date_change?: (task: GanttTask, start: Date, end: Date) => void
+ on_progress_change?: (task: GanttTask, progress: number) => void
+ on_view_change?: (mode: string) => void
+ }
+
+ export default class Gantt {
+ constructor(element: string | HTMLElement, tasks: GanttTask[], options?: GanttOptions)
+ change_view_mode(mode: string): void
+ refresh(tasks: GanttTask[]): void
+ }
+}