This commit replaces the original vanilla JavaScript implementation with a modern frontend stack. The entire application has been rewritten to improve maintainability, developer experience, and leverage modern web technologies. Key changes include: - Replaced plain HTML, CSS, and JS with a Nuxt 4 project structure. - Migrated state management from a global state object to a Pinia store for better organization and reactivity. - Rebuilt the UI with Vue 3 components and styled with TailwindCSS. - Changed the primary persistence mechanism from manual file I/O to automatic LocalStorage saving, while retaining import/export functionality. - All core features, including drag-and-drop, task management, and the import/merge diffing logic, have been ported to the new architecture.
55 lines
769 B
TypeScript
55 lines
769 B
TypeScript
export interface Category {
|
|
uuid: string
|
|
title: string
|
|
color?: string
|
|
}
|
|
|
|
export interface Step {
|
|
details: string
|
|
done: boolean
|
|
}
|
|
|
|
export interface Task {
|
|
uuid: string
|
|
title: string
|
|
description?: string
|
|
category?: string | null
|
|
steps?: Step[]
|
|
}
|
|
|
|
export interface Stage {
|
|
uuid: string
|
|
title: string
|
|
tasks: string[]
|
|
}
|
|
|
|
export interface Layout {
|
|
columns: string[][]
|
|
}
|
|
|
|
export interface HistoryEntry {
|
|
id: string
|
|
ts: string
|
|
actor?: string
|
|
type: string
|
|
payload?: any
|
|
}
|
|
|
|
export interface Meta {
|
|
id: 'open-kanban'
|
|
version: string
|
|
createdAt: string
|
|
modifiedAt: string
|
|
actor?: string
|
|
history: HistoryEntry[]
|
|
}
|
|
|
|
export interface Board {
|
|
categories: Category[]
|
|
stages: Stage[]
|
|
tasks: Task[]
|
|
layout: Layout
|
|
meta?: Meta
|
|
}
|
|
|