From 0f0ec33408490d0b26153e4ee6d958cf7870ffb1 Mon Sep 17 00:00:00 2001 From: Tristan Michael Date: Sun, 29 Mar 2026 15:56:15 -0700 Subject: [PATCH] Animated completed section, updated PLAN.md and CLAUDE.md with current status --- CLAUDE.md | 47 ++++++++++++++++++- PLAN.md | 46 ++++++++++-------- apps/tauri/src/lib/screens/TasksScreen.svelte | 23 ++++++--- 3 files changed, 89 insertions(+), 27 deletions(-) diff --git a/CLAUDE.md b/CLAUDE.md index c0441f9..24601b2 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -17,12 +17,14 @@ cargo run -p bevy-tasks-cli -- # Run CLI with arguments # Tauri GUI cd apps/tauri && npm install # Install frontend dependencies -npm run tauri dev # Run Tauri in dev mode +WEBKIT_DISABLE_DMABUF_RENDERER=1 npm run tauri dev # Run Tauri in dev mode (Wayland) npm run tauri build # Build for production ``` The CLI binary is named `bevy-tasks` (from the `bevy-tasks-cli` crate). +The Tauri dev server runs on port 1422 (`vite.config.ts` and `tauri.conf.json`). + ## Architecture Two-crate workspace (`resolver = "2"`, edition 2021) plus a Tauri app: @@ -41,6 +43,47 @@ Two-crate workspace (`resolver = "2"`, edition 2021) plus a Tauri app: Workspaces are plain folders. Each task list is a subfolder containing `.listdata.json` (metadata/ordering) and one `.md` file per task. The workspace root has `.metadata.json` for list ordering. +### Tauri GUI structure + +The GUI uses Svelte 5 runes mode (`$state`, `$derived`, `$effect`, `$props()`). Key UI patterns: + +- **Sliding drawer**: Left panel (lists) slides with main content as one piece via `translateX`. 80vw wide. +- **Settings popup**: Floating overlay card with backdrop, not a sliding panel. +- **Workspace switcher**: Custom drop-up menu in drawer footer (left), settings gear (right). +- **Task animations**: Grid-rows `0fr`/`1fr` trick for smooth collapse/expand. Module-level `animateInIds` Set coordinates expand-in after toggle. +- **Inline editing**: Click task to edit, auto-save on blur, shared `editingTaskId` across instances. +- **Kebab menus**: Tasks, lists, and workspaces all use kebab → submenu pattern for delete. +- **New task**: FAB button opens bottom toast sheet (outside sliding container for fixed positioning). + +### Current state (2026-03-29) + +- **Phase 1** (Core + CLI): Complete +- **Phase 2** (WebDAV sync): Backend done, CLI done, GUI partially wired (empty credentials issue) +- **Phase 3** (GUI MVP): In progress — core task CRUD working, UI polished with animations + +### GUI features done + +- Task CRUD (create, read, update, delete) +- Task completion/restoration with animated transitions +- Drag-and-drop task reordering +- Inline task editing (auto-save on blur) +- Sliding lists drawer with checkmark selection +- Settings popup overlay +- Workspace switcher drop-up with add/remove +- Dark mode (GNOME-style neutral grays, cyan-blue accent) +- Completed tasks section with animated show/hide + +### GUI features NOT yet done (CLI has these) + +- Due date editing (model supports it, not exposed in UI) +- WebDAV setup flow (GUI passes empty credentials) +- Push-only / pull-only sync modes +- Sync status view +- Workspace retarget/migrate +- Group-by-due-date toggle +- Subtask hierarchy (data model exists, not used anywhere) +- List/workspace rename + ## Roadmap -See `PLAN.md` for the 7-phase roadmap. Phase 1 is complete. Detailed API docs in `docs/API.md`, development practices in `docs/DEVELOPMENT.md`. +See `PLAN.md` for the 7-phase roadmap. Detailed API docs in `docs/API.md`, development practices in `docs/DEVELOPMENT.md`. diff --git a/PLAN.md b/PLAN.md index 5a2b60a..ddd5083 100644 --- a/PLAN.md +++ b/PLAN.md @@ -692,24 +692,32 @@ WorkspaceConfig { ### Features -- [ ] Tauri v2 + Svelte 5 + Tailwind CSS 4 framework integration -- [ ] Workspace setup dialog on first launch -- [ ] Workspace selector in toolbar -- [ ] Quick-switch between workspaces -- [ ] Basic task list view -- [ ] Create new tasks -- [ ] Edit existing tasks -- [ ] Delete tasks -- [ ] Mark tasks complete/incomplete -- [ ] Settings screen (manage workspaces, WebDAV config) +- [x] Tauri v2 + Svelte 5 + Tailwind CSS 4 framework integration +- [x] Workspace setup dialog on first launch +- [x] Workspace selector (drop-up menu in drawer footer) +- [x] Quick-switch between workspaces +- [x] Basic task list view with pending/completed sections +- [x] Create new tasks (FAB + bottom toast sheet with title/description) +- [x] Edit existing tasks (inline editing, auto-save on blur) +- [x] Delete tasks (kebab menu → delete) +- [x] Mark tasks complete/incomplete with animated transitions +- [x] Drag-and-drop task reordering +- [x] Sliding lists drawer (80vw, left side) +- [x] Settings popup overlay (WebDAV config, dark mode toggle) +- [x] Dark mode (GNOME-style neutral theme, cyan-blue accent) +- [x] Animated completed section show/hide +- [ ] Due date picker/editor +- [ ] WebDAV setup flow with credentials - [ ] Sync status indicators (per workspace) -- [ ] Desktop support (Windows, Linux, macOS) +- [ ] Push/pull sync mode selection +- [ ] List/workspace rename +- [ ] Desktop packaging (Windows, Linux, macOS) ### Deliverables -- [ ] Functional desktop GUI app -- [ ] Sub-300ms startup time -- [ ] Clean, minimal UI +- [x] Functional desktop GUI app (Linux verified, Wayland native) +- [ ] Sub-300ms startup time (not yet measured/optimized) +- [x] Clean, minimal UI - [ ] Feature parity with CLI ### Build & Release @@ -802,23 +810,23 @@ Tauri v2 supports iOS and Android natively. The same Svelte frontend and Rust ba ### Features #### Desktop & Mobile -- [ ] Multiple task lists (folders) -- [ ] Switch between lists +- [x] Multiple task lists (folders) +- [x] Switch between lists - [ ] Subtasks support - [ ] Due dates with date picker - [ ] Rich markdown editor for task notes - [ ] Move tasks between lists - [ ] Change storage folder location in settings - [ ] Search functionality -- [ ] Theme selection (light/dark mode) +- [x] Theme selection (light/dark mode) #### Desktop-Specific -- [ ] Drag & drop reordering +- [x] Drag & drop reordering - [ ] Keyboard shortcuts - [ ] Multiple windows (optional) #### Mobile-Specific -- [ ] Swipe gestures (swipe to complete, swipe to delete) +- [x] Swipe gestures (swipe to complete, swipe to delete) - [ ] Pull-to-refresh - [ ] Touch-optimized UI elements - [ ] Larger touch targets diff --git a/apps/tauri/src/lib/screens/TasksScreen.svelte b/apps/tauri/src/lib/screens/TasksScreen.svelte index 9380a0c..c95d603 100644 --- a/apps/tauri/src/lib/screens/TasksScreen.svelte +++ b/apps/tauri/src/lib/screens/TasksScreen.svelte @@ -24,6 +24,7 @@ } let newListName = $state(""); let showCompleted = $state(true); + let completedVisible = $state(true); let listMenuId = $state(null); let wsMenuName = $state(null); let dragId = $state(null); @@ -356,8 +357,16 @@ {#if app.completedTasks.length > 0}
- {#if showCompleted} - {#each app.completedTasks as task (task.id)} - - {/each} + {#if completedVisible} +
+ {#each app.completedTasks as task (task.id)} + + {/each} +
{/if} {/if} {/if}