From eabd9200a36fd4a60109bd3dbd634c6ae0e6fade Mon Sep 17 00:00:00 2001 From: Till JS Date: Thu, 2 Apr 2026 14:33:22 +0200 Subject: [PATCH] feat(manacore/web): theme-aware AppViews with inline creation Rewrite Todo, Calendar, and Contacts AppView components for the workbench paper-sheet pages: - Theme-aware styling (light paper-sheet + dark mode) - Todo: quick-add input, checkbox toggle, filter tabs - Calendar: week strip with event dots, inline event creation - Contacts: search + inline create form (name, email) Co-Authored-By: Claude Opus 4.6 (1M context) --- .../src/lib/modules/calendar/AppView.svelte | 281 ++++++++++++++++-- .../src/lib/modules/contacts/AppView.svelte | 280 +++++++++++++++-- .../web/src/lib/modules/todo/AppView.svelte | 231 +++++++++++--- 3 files changed, 709 insertions(+), 83 deletions(-) diff --git a/apps/manacore/apps/web/src/lib/modules/calendar/AppView.svelte b/apps/manacore/apps/web/src/lib/modules/calendar/AppView.svelte index 8c7f42993..cf5aaf4d2 100644 --- a/apps/manacore/apps/web/src/lib/modules/calendar/AppView.svelte +++ b/apps/manacore/apps/web/src/lib/modules/calendar/AppView.svelte @@ -1,11 +1,13 @@ -
+
-
+
{#each weekDays() as day, i} {@const isToday = day.toISOString().split('T')[0] === todayStr} -
- {dayNames[i]} - + {@const dayEvents = events.filter((e) => + e.startDate.startsWith(day.toISOString().split('T')[0]) + )} +
+ {dayNames[i]} + {day.getDate()} + {#if dayEvents.length > 0} + + {/if}
{/each}
-
-

Heute

+
+
+

Heute

+ +
+ + {#if showNewEvent} +
{ + e.preventDefault(); + createEvent(); + }} + class="new-event-form" + > + + + +
+ {/if} + {#each todayEvents as event (event.id)} -
-

{event.title}

-

+

+

{event.title}

+

{#if event.allDay} Ganztägig {:else} @@ -80,13 +133,203 @@ {/if}

{#if event.location} -

{event.location}

+

{event.location}

{/if}
{/each} - {#if todayEvents.length === 0} -

Keine Termine heute

+ {#if todayEvents.length === 0 && !showNewEvent} +

Keine Termine heute

{/if}
+ + diff --git a/apps/manacore/apps/web/src/lib/modules/contacts/AppView.svelte b/apps/manacore/apps/web/src/lib/modules/contacts/AppView.svelte index ef78c42a2..a59bd523f 100644 --- a/apps/manacore/apps/web/src/lib/modules/contacts/AppView.svelte +++ b/apps/manacore/apps/web/src/lib/modules/contacts/AppView.svelte @@ -1,11 +1,13 @@ -
- +
+
+ + +
-

{filtered().length} Kontakte

+ {#if showCreate} +
{ + e.preventDefault(); + createContact(); + }} + class="create-form" + > +
+ + +
+
+ + +
+
+ {/if} -
+

{filtered().length} Kontakte

+ +
{#each filtered() as contact (contact.id)} -
-
- {initials(contact)} -
-
-

{displayName(contact)}

+
+
{initials(contact)}
+
+

{displayName(contact)}

{#if contact.company} -

{contact.company}

+

{contact.company}

{/if}
{#if contact.isFavorite} - + {/if}
{/each} {#if filtered().length === 0} -

Keine Kontakte gefunden

+

Keine Kontakte gefunden

{/if}
+ + diff --git a/apps/manacore/apps/web/src/lib/modules/todo/AppView.svelte b/apps/manacore/apps/web/src/lib/modules/todo/AppView.svelte index cfba65f35..982012936 100644 --- a/apps/manacore/apps/web/src/lib/modules/todo/AppView.svelte +++ b/apps/manacore/apps/web/src/lib/modules/todo/AppView.svelte @@ -1,9 +1,8 @@ -
- -
+
+
{stats.total} gesamt {stats.today} heute - 0}>{stats.overdue} überfällig + 0}>{stats.overdue} überfällig
- -
+
{#each ['inbox', 'today', 'overdue'] as f} {/each}
-
{ e.preventDefault(); addTask(); }} - class="flex gap-2" + class="quick-add" > - - + +
- -
+
{#each filtered() as task (task.id)} - {/each} {#if filtered().length === 0} -

Keine Aufgaben

+

Keine Aufgaben

{/if}
+ +