diff --git a/frontend/src/App.vue b/frontend/src/App.vue
index 52b9039..effdcfb 100644
--- a/frontend/src/App.vue
+++ b/frontend/src/App.vue
@@ -1498,7 +1498,7 @@ onUnmounted(() => {
- {{node.task.title}}{{node.subtasks.filter(t=>t.completed).length}}/{{node.subtasks.length}}
+ {{node.task.title}}{{node.subtasks.filter(t=>t.completed).length}}/{{node.subtasks.length}}
diff --git a/frontend/src/style.test.ts b/frontend/src/style.test.ts
index 119fc42..240e903 100644
--- a/frontend/src/style.test.ts
+++ b/frontend/src/style.test.ts
@@ -256,6 +256,18 @@ describe('completion feedback motion', () => {
expect(css).toContain('@keyframes completion-slide-out')
})
+ it('gives overdue tasks the same right-swipe completion motion as regular tasks and habits', () => {
+ const overdueBlock = app.slice(app.indexOf('= 64")
+ expect(overdueBlock).toContain("'--swipe-x': `${taskSwipeOffsets[node.task.id] ?? 0}px`")
+ expect(overdueBlock).toContain('@pointerdown="startTaskPointer(node.task, $event)"')
+ expect(overdueBlock).toContain('@touchstart.passive="startTaskSwipe(node.task, $event)"')
+ expect(overdueBlock).toContain('@click="selectTaskUnlessSwiped(node.task)"')
+ expect(overdueBlock).toContain('@keydown.space.prevent="selectTaskUnlessSwiped(node.task)"')
+ })
+
it('animates only transient just-completed rows and respects reduced motion', () => {
expect(css).toContain('.task-row.just-completed,.habit-row.just-completed{animation:completion-row-settle .34s cubic-bezier(.2,.85,.3,1)}')
expect(css).toContain('.task-row.just-completed .task-check-mark,.habit-row.just-completed .task-check-mark{animation:completion-check-pop .38s cubic-bezier(.2,1.4,.35,1)}')
@@ -561,11 +573,11 @@ describe('task and habit row decoration', () => {
expect(purgeBlock).toContain("await mutateTrashTask(task, () => api(`/trash/${task.id}`")
})
- it('supports pointer dragging for desktop visible task completion', () => {
- expect(app.match(/@pointerdown="startTaskPointer/g)?.length).toBe(1)
- expect(app.match(/@pointermove="moveTaskPointer/g)?.length).toBe(1)
- expect(app.match(/@pointerup="finishTaskPointer/g)?.length).toBe(1)
- expect(app.match(/@pointercancel="cancelTaskPointer/g)?.length).toBe(1)
+ it('supports pointer dragging for desktop task completion in regular and overdue rows', () => {
+ expect(app.match(/@pointerdown="startTaskPointer/g)?.length).toBe(2)
+ expect(app.match(/@pointermove="moveTaskPointer/g)?.length).toBe(2)
+ expect(app.match(/@pointerup="finishTaskPointer/g)?.length).toBe(2)
+ expect(app.match(/@pointercancel="cancelTaskPointer/g)?.length).toBe(2)
})
it('supports pointer dragging for desktop habit rows in Today and Habits views', () => {