Commit graph

15 commits

Author SHA1 Message Date
Tristan Michael 753cb1cad5 Rename workspace metadata and add WebDAV folder browsing
Rework WebDAV workspace setup to use .onyx-workspace.json instead of
.metadata.json and to let users pick a remote folder instead of forcing
an Onyx/ subfolder. This updates storage, sync, config types, tests, and
CLI/Tauri commands to store a webdav_path in WorkspaceConfig and to
combine webdav_url + webdav_path for sync.

Changes include:
- Rename .metadata.json → .onyx-workspace.json across storage, sync, and tests so workspace detection and root metadata use the new filename.
- Remove hardcoded automatic "Onyx/" subfolder in sync and use the user-selected remote path directly.
- Add webdav_path field to WorkspaceConfig (Rust and TypeScript types) and thread it through add_webdav_workspace and frontend addWebdavWorkspace.
- Add three Tauri commands (list_remote_folder, inspect_remote_workspace, create_remote_workspace) to support remote folder browsing, workspace preview, and remote workspace creation.
- Rewrite SetupScreen WebDAV flow to Connect → Browse (lazy folder explorer) → Preview or Create, and wire UI state/handlers to the new commands.
- Update CLAUDE.md to document the new on-disk filename and note development phase allowing breaking changes.
2026-04-05 14:30:22 -07:00
Tristan Michael bb735ecd4a Add workspace rename and restructure settings screen
Full-stack workspace rename: renames folder on disk, updates config
key/path, refreshes frontend. Restructure settings screen with generic
'Workspace Settings' header, workspace name row with kebab menu
(Rename + Delete). Replace per-workspace kebab dropdown in workspace
list with a direct settings gear button. Remove Appearance heading
and border box from theme section. Clean up unused wsMenuName state.
2026-04-05 14:30:22 -07:00
Tristan Michael 2a2e362a8f fix: WebDAV sync — Onyx subfolder, timeouts, error display, light theme 2026-04-03 10:11:40 -07:00
Tristan Michael a1e97bc0fe feat: per-workspace theme system with 5 theme options
Replaces in-memory darkMode toggle with persisted per-workspace theme
selection. Adds dark, nord, dracula, and solarized CSS theme definitions.
Theme is applied via data-theme attribute and derived isDark class.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-03 04:02:39 -07:00
Tristan Michael 7fde1a09f9 fix: harden frontend — toggle race guard, fresh debounce snapshot, error surfacing
Add toggling guard to TaskItem preventing double-toggle from rapid clicks
or swipes. Fix debounced save in TaskDetailView to read task at timeout
time instead of capturing a stale snapshot at call time. Remove unused
_unlistenFs variable. Surface reorder_task and watch_workspace errors
instead of silently swallowing them.
2026-04-02 09:37:43 -07:00
Tristan Michael 54836f14e7 fix: improve frontend accessibility, consistency, and resource cleanup
Fix nested interactive elements in TaskItem (button inside button) by
restructuring as div + button with aria-label. Replace native confirm()
with ConfirmDialog for workspace removal. Store fs-changed event unlisten
function for cleanup. Log file watcher errors instead of swallowing them.
Fix var usage to const. Add Firefox scrollbar-width support.
2026-04-02 09:35:38 -07:00
Tristan Michael 2f2327e4ca feat: overhaul subtask UX with three-panel navigation, custom confirmations, and main panel header redesign
- Remove subtask expand/collapse foldout from main task list
- Add three-panel slide navigation (task list → task detail → subtask detail) via taskStack
- Create ConfirmDialog component replacing native confirm() dialogs
- Cascade delete: deleting a task with subtasks warns and deletes all children
- Subtask detail view: no nested subtasks, collapsible completed section, inline add at top
- Redesign Move To as inline list in kebab menu (no overflow submenu)
- Main panel header: list name + kebab below divider (matching task detail layout)
- Move list management kebab from drawer to main panel; drawer shows chevrons
- Add Delete Completed to both main panel and subtask kebab menus
- Fix debouncedSave stale reference by snapshotting task before timer
- New subtasks prepend to top of list
2026-04-02 07:22:41 -07:00
Claude 45b7cc57de
feat: add subtask hierarchy UI to Tauri GUI
Wire up the existing parent_id data model into a full subtask UI:
- Backend: create_task accepts parent_id, cascade delete/toggle for subtasks
- Store: subtask-aware derived state (root tasks only in pending/completed),
  childrenMap for O(1) subtask lookup, createTask accepts parentId
- TaskItem: depth-based indentation, subtask completion counter badge
- TasksScreen: expand/collapse chevron for parent tasks, indented subtask
  rendering with left border, subtasks shown under completed parents
- TaskDetailView: "Add subtask" inline input, subtask list with toggleable
  checkboxes, parent task breadcrumb for subtasks

https://claude.ai/code/session_01XWcSekaCAJ7qnr4hN3tgL8
2026-04-02 12:14:56 +00:00
Tristan Michael 70d519de64 feat: sync status indicators and push/pull mode selection
Add workspace_name and mode params to sync_workspace Tauri command.
After each sync, persist last_sync to WorkspaceConfig and save config.
Frontend gains lastSyncResult and syncMode state; triggerSync reloads
config post-sync and stores the result. SettingsScreen shows a sync
direction selector (Full/Push/Pull) and a last-sync status line.
TasksScreen shows an upload/download count chip after sync completes.
2026-04-01 01:06:10 -07:00
Tristan Michael 1a967c7fdd feat(tauri): move-to-list, rename, group toggle, keyboard shortcuts, WebDAV fix
- TaskDetailView: 'Move to...' submenu in kebab menu
- TasksScreen: list rename (inline input), group-by-due-date toggle,
  global Escape key handler for closing overlays
- SettingsScreen: auto-populate WebDAV URL/credentials on open
- SetupScreen: add window dragging, minimize/close buttons, 'Open
  Existing Folder' button
- Store: moveTask, renameList, setGroupByDueDate methods + fs-changed
  event listener for file watcher

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-31 13:28:06 -07:00
Tristan Michael c138a8bcf6 fix(gui): wire sync credentials, fix memory leak, race condition, add delete confirmations
- Add load_credentials Tauri command and use it in triggerSync() instead
  of passing empty username/password strings
- Replace raw __TAURI_INTERNALS__.invoke() with proper invoke import in
  SettingsScreen
- Wrap window event listeners in $effect() with cleanup to prevent
  memory leak on component remount
- Return created Task from createTask() and use it directly in
  NewTaskInput instead of guessing from array index
- Add confirm() dialogs before deleting tasks, lists, and workspaces
2026-03-30 16:24:46 -07:00
Tristan Michael 1cf05584e6 Add smooth task toggle animations with collapse/expand transitions 2026-03-29 15:43:25 -07:00
Tristan Michael 68dfbb078a Add drag-and-drop task reordering, sliding settings panel, and inline task editing 2026-03-29 13:49:10 -07:00
Tristan Michael f810cfa2a3 Commit to Tauri GUI: remove Flutter/egui, redesign task UI
- Remove Flutter app and egui placeholder crate, commit to Tauri as sole GUI
- Update PLAN.md to replace egui with Tauri across all phases (v4.0)
- Redesign task screen: sliding drawer for list picker, floating FAB for new tasks,
  bottom sheet toast for task creation with title + description fields
- Add description support to create_task Tauri command
- Lighten dark theme to GNOME-style neutral grays, shift primary to cyan-blue
- Fix Wayland compatibility (dev port change)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-29 09:49:30 -07:00
Tristan Michael ec17d6274f tauri and flutter guis 2026-03-17 09:38:53 -07:00