From 3d65aaf50219926ce70edc0908b5f9caa21c6039 Mon Sep 17 00:00:00 2001 From: Tristan Michael Date: Mon, 6 Apr 2026 10:30:36 -0700 Subject: [PATCH 1/6] feat: left-edge swipe gesture for drawer and back navigation on mobile --- apps/tauri/src/lib/screens/TasksScreen.svelte | 61 ++++++++++++++++++- 1 file changed, 60 insertions(+), 1 deletion(-) diff --git a/apps/tauri/src/lib/screens/TasksScreen.svelte b/apps/tauri/src/lib/screens/TasksScreen.svelte index f05d2b1..127c4c6 100644 --- a/apps/tauri/src/lib/screens/TasksScreen.svelte +++ b/apps/tauri/src/lib/screens/TasksScreen.svelte @@ -210,12 +210,59 @@ let workspaceIds = $derived(app.config ? Object.keys(app.config.workspaces).sort((a, b) => (app.config!.workspaces[a].name).localeCompare(app.config!.workspaces[b].name)) : []); let translateX = $derived(showDrawer ? '0' : '-80cqi'); + + let _edgeSwipeStartX = 0; + let _edgeSwipeStartY = 0; + let _edgeSwipeActive = false; + + function handleEdgeTouchStart(e: TouchEvent) { + const t = e.touches[0]; + if (t.clientX > 20) return; + _edgeSwipeStartX = t.clientX; + _edgeSwipeStartY = t.clientY; + _edgeSwipeActive = true; + } + + function handleEdgeTouchMove(e: TouchEvent) { + if (!_edgeSwipeActive) return; + const dx = e.touches[0].clientX - _edgeSwipeStartX; + const dy = e.touches[0].clientY - _edgeSwipeStartY; + // Cancel if gesture is more vertical than horizontal + if (Math.abs(dy) > Math.abs(dx)) { _edgeSwipeActive = false; return; } + // Prevent scroll interference while swiping right from edge + e.preventDefault(); + } + + function handleEdgeTouchEnd(e: TouchEvent) { + if (!_edgeSwipeActive) return; + _edgeSwipeActive = false; + const dx = e.changedTouches[0].clientX - _edgeSwipeStartX; + if (dx < 60) return; + if (taskStack.length > 0) closeDetail(); + else if (!showDrawer) showDrawer = true; + } + + let _viewportEl = $state(null); + + // Register touchmove as non-passive so preventDefault() works + $effect(() => { + if (!_viewportEl) return; + _viewportEl.addEventListener('touchmove', handleEdgeTouchMove, { passive: false }); + return () => _viewportEl!.removeEventListener('touchmove', handleEdgeTouchMove); + }); -
+ +
+ {#if app.config?.current_workspace} + + {/if} +
From e9f7f7ab6997b9e6febd9b9305b29ecfaee04d91 Mon Sep 17 00:00:00 2001 From: Tristan Michael Date: Mon, 6 Apr 2026 10:42:11 -0700 Subject: [PATCH 2/6] feat: move Onyx header above card and enlarge on setup screen --- apps/tauri/src/lib/screens/SetupScreen.svelte | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/apps/tauri/src/lib/screens/SetupScreen.svelte b/apps/tauri/src/lib/screens/SetupScreen.svelte index 0f15b03..008e2f8 100644 --- a/apps/tauri/src/lib/screens/SetupScreen.svelte +++ b/apps/tauri/src/lib/screens/SetupScreen.svelte @@ -262,12 +262,11 @@ {/if} -
+
+

Onyx

-

Onyx

- {#if mode === null}

From 9a9dc80e267a5c6403fec65ca9b408ed6c13a9e6 Mon Sep 17 00:00:00 2001 From: Tristan Michael Date: Mon, 6 Apr 2026 10:57:11 -0700 Subject: [PATCH 3/6] fix: set fixed height on calendar grid Add content-start alignment and fixed 192px height to the calendar grid to prevent layout shift when switching between months with different numbers of weeks. This ensures consistent spacing and prevents the calendar from changing size based on the month being displayed. --- apps/tauri/src/lib/components/DateTimePicker.svelte | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/tauri/src/lib/components/DateTimePicker.svelte b/apps/tauri/src/lib/components/DateTimePicker.svelte index df7d969..98ceef2 100644 --- a/apps/tauri/src/lib/components/DateTimePicker.svelte +++ b/apps/tauri/src/lib/components/DateTimePicker.svelte @@ -121,7 +121,7 @@

-
+
{#each calendarCells as day} {#if day === null}
From a705a5ca26a00a60a0c434ef8d7e0ae45fdafa9f Mon Sep 17 00:00:00 2001 From: Tristan Michael Date: Mon, 6 Apr 2026 11:02:32 -0700 Subject: [PATCH 4/6] feat: add Claude tool hooks configuration Add .claude/settings.json to configure pre and post tool use hooks for Edit, MultiEdit, and Write operations. These hooks integrate with the but CLI to execute validation and cleanup commands before and after file modifications, and on stop events. --- .claude/settings.json | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/.claude/settings.json b/.claude/settings.json index e69de29..b4b7cb5 100644 --- a/.claude/settings.json +++ b/.claude/settings.json @@ -0,0 +1,37 @@ +{ + "hooks": { + "PreToolUse": [ + { + "matcher": "Edit|MultiEdit|Write", + "hooks": [ + { + "type": "command", + "command": "but claude pre-tool" + } + ] + } + ], + "PostToolUse": [ + { + "matcher": "Edit|MultiEdit|Write", + "hooks": [ + { + "type": "command", + "command": "but claude post-tool" + } + ] + } + ], + "Stop": [ + { + "matcher": "", + "hooks": [ + { + "type": "command", + "command": "but claude stop" + } + ] + } + ] + } +} From c772e3251a3bd89f0cb2267f6df17dbf2c981354 Mon Sep 17 00:00:00 2001 From: Tristan Michael Date: Mon, 6 Apr 2026 11:02:54 -0700 Subject: [PATCH 5/6] fix: add safe area bottom padding to DateTimePicker Add bottom padding to DateTimePicker component to prevent content from being obscured by notches or home indicators on mobile devices. Uses CSS max() function to ensure minimum 0.75rem spacing while respecting device safe area insets. --- apps/tauri/src/lib/components/DateTimePicker.svelte | 1 + 1 file changed, 1 insertion(+) diff --git a/apps/tauri/src/lib/components/DateTimePicker.svelte b/apps/tauri/src/lib/components/DateTimePicker.svelte index 98ceef2..f6415d3 100644 --- a/apps/tauri/src/lib/components/DateTimePicker.svelte +++ b/apps/tauri/src/lib/components/DateTimePicker.svelte @@ -183,5 +183,6 @@
{/if} +
From 5e5773d14632f92da012f17fd764bb5dd1f48aa7 Mon Sep 17 00:00:00 2001 From: Tristan Michael Date: Mon, 6 Apr 2026 11:03:06 -0700 Subject: [PATCH 6/6] fix: add safe area padding to scrollable content Add safe area padding to scrollable main content areas and adjust drawer footer padding to prevent content from being hidden behind notches and home indicators on mobile devices. This ensures proper spacing on devices with safe area insets. --- apps/tauri/src/lib/components/TaskDetailView.svelte | 2 +- apps/tauri/src/lib/screens/TasksScreen.svelte | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/apps/tauri/src/lib/components/TaskDetailView.svelte b/apps/tauri/src/lib/components/TaskDetailView.svelte index dcb6f00..88a3498 100644 --- a/apps/tauri/src/lib/components/TaskDetailView.svelte +++ b/apps/tauri/src/lib/components/TaskDetailView.svelte @@ -148,7 +148,7 @@ -
+