From 0deab50a9cf94be1982dd7a3eeee605757b8ec7b Mon Sep 17 00:00:00 2001 From: Till JS Date: Sun, 12 Apr 2026 16:07:52 +0200 Subject: [PATCH] feat(todo): minimal ListView redesign with floating input MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Stripped stats counters, filter tabs, and VoiceCaptureBar. Now shows a flat list with round monochrome checkboxes, inline due-date badges (Überfällig/Heute/date), completed tasks below a divider with completion timestamp, and a pill-shaped FloatingInputBar at the bottom with integrated voice input. Co-Authored-By: Claude Opus 4.6 (1M context) --- .../web/src/lib/modules/todo/ListView.svelte | 385 ++++++++---------- 1 file changed, 160 insertions(+), 225 deletions(-) diff --git a/apps/mana/apps/web/src/lib/modules/todo/ListView.svelte b/apps/mana/apps/web/src/lib/modules/todo/ListView.svelte index b6adceb2f..85b89a831 100644 --- a/apps/mana/apps/web/src/lib/modules/todo/ListView.svelte +++ b/apps/mana/apps/web/src/lib/modules/todo/ListView.svelte @@ -1,28 +1,21 @@ -
-
- {stats.total} gesamt - {stats.today} heute - 0}>{stats.overdue} überfällig -
- -
- {#each ['inbox', 'today', 'overdue'] as f} - - {/each} -
- -
{ - e.preventDefault(); - addTask(); - }} - class="quick-add" - > - - -
- - - +
- {#each filtered() as task (task.id)} + {#each sorted as task, i (task.id)} {@const taskTagIds = getTaskTagIds(task)} {@const taskTags = getTagsByIds(allTags, taskTagIds)} - + +
+ {#each taskTags as tag (tag.id)} + + {/each} + {#if badge} + {badge.label} + {/if} + {#if task.isCompleted && task.completedAt} + {new Date(task.completedAt).toLocaleTimeString('de', { + hour: '2-digit', + minute: '2-digit', + })} Uhr, {new Date(task.completedAt).toLocaleDateString('de', { + day: 'numeric', + month: 'short', + })} {/if}
- +
{/each} - {#if filtered().length === 0} + {#if sorted.length === 0}

Keine Aufgaben

{/if}
+ +