From 4ec4694f8f9a454b5c41058db5f07d84e38d295f Mon Sep 17 00:00:00 2001 From: Till JS Date: Fri, 3 Apr 2026 14:02:00 +0200 Subject: [PATCH] fix(manacore/web): make notes and finance workbench panels directly usable MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Notes: always-visible compose field at top (title + content), expands on focus, Cmd+Enter to save. Note list below. Finance: always-visible quick-add with type toggle, amount + description inline, category chips. No hidden button — ready to use immediately. Co-Authored-By: Claude Opus 4.6 (1M context) --- .../src/lib/modules/finance/ListView.svelte | 395 ++++++++---------- .../web/src/lib/modules/notes/ListView.svelte | 360 ++++++++-------- 2 files changed, 346 insertions(+), 409 deletions(-) diff --git a/apps/manacore/apps/web/src/lib/modules/finance/ListView.svelte b/apps/manacore/apps/web/src/lib/modules/finance/ListView.svelte index 4a902cfe1..c623348d7 100644 --- a/apps/manacore/apps/web/src/lib/modules/finance/ListView.svelte +++ b/apps/manacore/apps/web/src/lib/modules/finance/ListView.svelte @@ -1,6 +1,6 @@
+ +
+
+ + +
+
+ + + + +
+ +
+ {#each filteredCats as cat (cat.id)} + + {/each} +
+
+
-
- Einnahmen +
+{formatCurrency(income)} + Einnahmen
-
- Ausgaben +
-{formatCurrency(expenses)} + Ausgaben
-
- Bilanz +
= 0} class:expense={balance < 0}> {balance >= 0 ? '+' : ''}{formatCurrency(balance)} + Bilanz
- - {#if !showAdd} - - {/if} - - - {#if showAdd} -
-
- - -
-
- - \u20ac -
- -
- {#each filteredCats as cat (cat.id)} - - {/each} -
-
- - -
-
- {/if} - {#if recentTxs.length > 0}
@@ -163,10 +167,10 @@ {#each dayTxs as tx (tx.id)} {@const cat = tx.categoryId ? catMap.get(tx.categoryId) : null}
- {cat?.emoji ?? '\ud83d\udcb3'} + {cat?.emoji ?? '\ud83d\udcb3'}
{tx.description} - {#if cat}{cat.name}{/if} + {#if cat}{cat.name}{/if}
- {/if} - - {#if txs.length === 0 && !showAdd} -
-

Noch keine Transaktionen.

- -
+ {:else} +
Noch keine Transaktionen diesen Monat.
{/if}
diff --git a/apps/manacore/apps/web/src/lib/modules/notes/ListView.svelte b/apps/manacore/apps/web/src/lib/modules/notes/ListView.svelte index be6f7a49b..4a2922cdb 100644 --- a/apps/manacore/apps/web/src/lib/modules/notes/ListView.svelte +++ b/apps/manacore/apps/web/src/lib/modules/notes/ListView.svelte @@ -1,12 +1,11 @@
- -
- - -
- - - {#if showCreate} -
- + +
+ (composeFocused = true)} + onkeydown={handleComposeKeydown} + /> + {#if composeFocused || composeTitle || composeContent} - + + + {#if notes.length > 3} + {/if}
{#each filtered as note (note.id)} {#if editingId === note.id} - -
+
{ + if (e.key === 'Escape') cancelEdit(); + }} + >
@@ -132,7 +136,6 @@
{:else} -
{getPreview(note.content)}
@@ -152,13 +155,8 @@ {/each}
- {#if notes.length === 0 && !showCreate} -
-

Noch keine Notizen.

- -
+ {#if notes.length === 0 && !composeFocused} +
Tippe oben, um deine erste Notiz zu schreiben.
{/if}
@@ -170,13 +168,73 @@ padding: 0.5rem; } - .search-row { + /* ── Compose Area (always visible) ──────────── */ + .compose-area { + display: flex; + flex-direction: column; + gap: 0.25rem; + padding: 0.5rem 0.625rem; + border-radius: 0.625rem; + background: var(--color-surface, rgba(255, 255, 255, 0.04)); + border: 1px solid var(--color-border, rgba(255, 255, 255, 0.1)); + transition: + border-color 0.15s, + background 0.15s; + } + + .compose-area.expanded { + border-color: var(--color-primary, #6366f1); + background: var(--color-surface, rgba(255, 255, 255, 0.06)); + } + + .compose-title { + background: transparent; + border: none; + color: var(--color-foreground); + font-size: 0.875rem; + font-weight: 600; + padding: 0.25rem 0; + outline: none; + } + .compose-title::placeholder { + color: var(--color-muted-foreground); + font-weight: 400; + } + + .compose-content { + background: transparent; + border: none; + color: var(--color-foreground); + font-size: 0.8125rem; + padding: 0.25rem 0; + outline: none; + resize: vertical; + min-height: 2.5rem; + font-family: inherit; + } + .compose-content::placeholder { + color: var(--color-muted-foreground); + } + + .compose-footer { + display: flex; + justify-content: space-between; + align-items: center; + } + + .compose-hint { + font-size: 0.625rem; + color: var(--color-muted-foreground); + opacity: 0.6; + } + + .compose-actions { display: flex; gap: 0.375rem; } + /* ── Search ─────────────────────────────────── */ .search-input { - flex: 1; background: var(--color-surface, rgba(255, 255, 255, 0.04)); border: 1px solid var(--color-border, rgba(255, 255, 255, 0.1)); border-radius: 0.5rem; @@ -192,102 +250,7 @@ color: var(--color-muted-foreground); } - .add-btn { - width: 2rem; - height: 2rem; - border-radius: 0.5rem; - background: var(--color-primary, #6366f1); - color: white; - border: none; - font-size: 1.125rem; - font-weight: 300; - cursor: pointer; - display: flex; - align-items: center; - justify-content: center; - flex-shrink: 0; - transition: filter 0.15s; - } - .add-btn:hover { - filter: brightness(1.1); - } - - /* ── Create / Edit Form ─────────────────────── */ - .create-form { - display: flex; - flex-direction: column; - gap: 0.375rem; - padding: 0.625rem; - border-radius: 0.625rem; - background: var(--color-surface, rgba(255, 255, 255, 0.06)); - border: 1px solid var(--color-border, rgba(255, 255, 255, 0.1)); - } - - .create-title, - .edit-title { - background: transparent; - border: none; - color: var(--color-foreground); - font-size: 0.875rem; - font-weight: 600; - padding: 0.25rem 0; - outline: none; - } - .create-title::placeholder, - .edit-title::placeholder { - color: var(--color-muted-foreground); - } - - .create-content, - .edit-content { - background: transparent; - border: none; - color: var(--color-foreground); - font-size: 0.8125rem; - padding: 0.25rem 0; - outline: none; - resize: vertical; - min-height: 3rem; - font-family: inherit; - } - .create-content::placeholder { - color: var(--color-muted-foreground); - } - - .create-footer { - display: flex; - justify-content: space-between; - align-items: center; - gap: 0.5rem; - } - - .color-row { - display: flex; - gap: 0.25rem; - } - - .color-dot { - width: 1rem; - height: 1rem; - border-radius: 50%; - border: 2px solid transparent; - cursor: pointer; - transition: transform 0.15s; - } - .color-dot:hover { - transform: scale(1.25); - } - .color-dot.selected { - border-color: white; - box-shadow: 0 0 0 1px var(--color-primary, #6366f1); - } - - .create-actions, - .edit-actions { - display: flex; - gap: 0.375rem; - } - + /* ── Buttons ────────────────────────────────── */ .btn-cancel, .btn-save { padding: 0.3rem 0.625rem; @@ -297,7 +260,6 @@ cursor: pointer; border: none; } - .btn-cancel { background: transparent; color: var(--color-muted-foreground); @@ -305,14 +267,17 @@ .btn-cancel:hover { background: var(--color-muted, rgba(255, 255, 255, 0.08)); } - .btn-save { background: var(--color-primary, #6366f1); color: white; } - .btn-save:hover { + .btn-save:hover:not(:disabled) { filter: brightness(1.1); } + .btn-save:disabled { + opacity: 0.4; + cursor: not-allowed; + } /* ── Note Cards ─────────────────────────────── */ .note-list { @@ -338,12 +303,10 @@ .note-card:hover { background: var(--color-muted, rgba(255, 255, 255, 0.08)); } - .note-card.editing { cursor: default; border-left-color: var(--color-primary, #6366f1) !important; } - .note-card.pinned { background: rgba(99, 102, 241, 0.04); } @@ -353,7 +316,6 @@ align-items: center; gap: 0.375rem; } - .note-title { font-size: 0.8125rem; font-weight: 600; @@ -363,12 +325,10 @@ text-overflow: ellipsis; white-space: nowrap; } - .pin-icon { font-size: 0.6875rem; flex-shrink: 0; } - .note-preview { font-size: 0.75rem; color: var(--color-muted-foreground); @@ -376,36 +336,42 @@ text-overflow: ellipsis; white-space: nowrap; } - .note-meta { font-size: 0.6875rem; color: var(--color-muted-foreground); opacity: 0.7; } - /* ── Empty ──────────────────────────────────── */ + .edit-title { + background: transparent; + border: none; + color: var(--color-foreground); + font-size: 0.875rem; + font-weight: 600; + padding: 0.25rem 0; + outline: none; + } + .edit-content { + background: transparent; + border: none; + color: var(--color-foreground); + font-size: 0.8125rem; + padding: 0.25rem 0; + outline: none; + resize: vertical; + min-height: 3rem; + font-family: inherit; + } + .edit-actions { + display: flex; + gap: 0.375rem; + justify-content: flex-end; + } + .empty { text-align: center; color: var(--color-muted-foreground); - font-size: 0.875rem; - padding: 2rem 0; - display: flex; - flex-direction: column; - align-items: center; - gap: 0.75rem; - } - - .empty-add-btn { - padding: 0.5rem 1rem; - border-radius: 0.5rem; - background: var(--color-primary, #6366f1); - color: white; - border: none; font-size: 0.8125rem; - font-weight: 500; - cursor: pointer; - } - .empty-add-btn:hover { - filter: brightness(1.1); + padding: 1.5rem 0; }