From 03ec7e7b3e3b5d141c5589fdcd8b9ef04e0d3168 Mon Sep 17 00:00:00 2001 From: Till JS Date: Sun, 10 May 2026 15:57:37 +0200 Subject: [PATCH] feat(decks): Edit-Icon auf Deck-Karten + Deck-Edit-Page MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - DeckStack: Pencil-Icon absolut unten-rechts, erscheint beim Hover (z-index über Card, ausserhalb des -Links zur Detail-Page) - Neuer Route /decks/[id]/edit: Form für Name, Beschreibung, Farbe - i18n deck_edit keys (de + en) Co-Authored-By: Claude Sonnet 4.6 --- apps/web/src/lib/components/DeckStack.svelte | 41 +++ apps/web/src/lib/i18n/de.ts | 12 + apps/web/src/lib/i18n/en.ts | 12 + .../src/routes/decks/[id]/edit/+page.svelte | 233 ++++++++++++++++++ 4 files changed, 298 insertions(+) create mode 100644 apps/web/src/routes/decks/[id]/edit/+page.svelte diff --git a/apps/web/src/lib/components/DeckStack.svelte b/apps/web/src/lib/components/DeckStack.svelte index 5014b4f..0251e72 100644 --- a/apps/web/src/lib/components/DeckStack.svelte +++ b/apps/web/src/lib/components/DeckStack.svelte @@ -5,6 +5,7 @@ import { t, tn } from '$lib/i18n/index.svelte.ts'; import CardSurface from './CardSurface.svelte'; import DeckCategoryIcon from './DeckCategoryIcon.svelte'; + import { PencilSimple } from '@mana/shared-icons'; interface Props { deck: Deck; @@ -43,6 +44,16 @@ {/each} {/if} + e.stopPropagation()} + aria-label="Deck bearbeiten" + title="Deck bearbeiten" + > + + + diff --git a/apps/web/src/lib/i18n/de.ts b/apps/web/src/lib/i18n/de.ts index da90080..23b4cf2 100644 --- a/apps/web/src/lib/i18n/de.ts +++ b/apps/web/src/lib/i18n/de.ts @@ -57,6 +57,18 @@ export const de: TranslationNode = { deck_stack: { aria_label: 'Stapel "{name}" — {cards} Karten, {due} fällig', }, + deck_edit: { + title: 'Deck bearbeiten', + back: '← Zurück zum Deck', + name_label: 'Name', + description_label: 'Beschreibung (optional)', + color_label: 'Farbe', + save: 'Speichern', + saving: 'Speichere…', + cancel: 'Abbrechen', + save_failed: 'Speichern fehlgeschlagen: {msg}', + saved: 'Deck gespeichert', + }, deck_new: { title: 'Neues Deck', name_label: 'Name', diff --git a/apps/web/src/lib/i18n/en.ts b/apps/web/src/lib/i18n/en.ts index eb99780..f80aecd 100644 --- a/apps/web/src/lib/i18n/en.ts +++ b/apps/web/src/lib/i18n/en.ts @@ -54,6 +54,18 @@ export const en: TranslationNode = { deck_stack: { aria_label: 'Stack "{name}" — {cards} cards, {due} due', }, + deck_edit: { + title: 'Edit deck', + back: '← Back to deck', + name_label: 'Name', + description_label: 'Description (optional)', + color_label: 'Color', + save: 'Save', + saving: 'Saving…', + cancel: 'Cancel', + save_failed: 'Save failed: {msg}', + saved: 'Deck saved', + }, deck_new: { title: 'New deck', name_label: 'Name', diff --git a/apps/web/src/routes/decks/[id]/edit/+page.svelte b/apps/web/src/routes/decks/[id]/edit/+page.svelte new file mode 100644 index 0000000..ba1ee50 --- /dev/null +++ b/apps/web/src/routes/decks/[id]/edit/+page.svelte @@ -0,0 +1,233 @@ + + +{#if !loading} +
+ {t('deck_edit.back')} +

{t('deck_edit.title')}

+ +
+
+ + + + +
+ {t('deck_edit.color_label')} +
+ + {color} + +
+
+
+ +
+ + {t('deck_edit.cancel')} +
+
+
+{/if} + +