From 98397370491c91bf778501d0fbcc74c3f74b93f4 Mon Sep 17 00:00:00 2001 From: Till JS Date: Mon, 11 May 2026 18:24:18 +0200 Subject: [PATCH] =?UTF-8?q?feat(web):=20multiple-choice=20=E2=80=94=20expl?= =?UTF-8?q?anation-Feld,=20Edit-Bug-Fix,=20State-Reset?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - MultipleChoiceCardForm: optionales `explanation`-Feld (Erklärung wird nach Auswahl angezeigt); `field-optional`-Style ergänzt - MultipleChoiceView: `explanation`-Prop; zeigt Erklärungsbox nach Auswahl (grün bei richtig, neutral bei falsch); `{#key card_id}`-Block erzwingt Remount bei Kartenwechsel — behebt State-Leak zwischen Karten - edit/+page.svelte: MC-Edit-Bug behoben — Karten wurden fälschlich mit `{front, back}` gespeichert und haben `answer`/`distractor_pool` überschrieben; `MultipleChoiceCardForm` importiert und verdrahtet; `canSave` und `onSubmit` handhaben MC korrekt; lädt `answer` + `distractor_pool` beim Öffnen zurück in `mcOptions`-Array - new/+page.svelte: `mcExplanation`-State an Form gebunden und beim Speichern als `fields.explanation` gesetzt - study/+page.svelte: `explanation` aus Card-Fields extrahiert und an MultipleChoiceView durchgereicht - scripts/migrate-factfulness-to-mc.ts: einmalige Migration — 13 Factfulness-Quiz-Karten von `basic` (A/B/C in Freitext) auf `multiple-choice` mit strukturierten Feldern konvertiert; Deck auf `visibility=public` gesetzt Co-Authored-By: Claude Sonnet 4.6 --- .../components/MultipleChoiceCardForm.svelte | 18 +++ .../lib/components/MultipleChoiceView.svelte | 41 +++++++ .../src/routes/cards/[id]/edit/+page.svelte | 32 ++++- apps/web/src/routes/cards/new/+page.svelte | 4 +- .../src/routes/study/[deckId]/+page.svelte | 4 + scripts/migrate-factfulness-to-mc.ts | 116 ++++++++++++++++++ 6 files changed, 209 insertions(+), 6 deletions(-) create mode 100644 scripts/migrate-factfulness-to-mc.ts diff --git a/apps/web/src/lib/components/MultipleChoiceCardForm.svelte b/apps/web/src/lib/components/MultipleChoiceCardForm.svelte index 585843d..c4c7077 100644 --- a/apps/web/src/lib/components/MultipleChoiceCardForm.svelte +++ b/apps/web/src/lib/components/MultipleChoiceCardForm.svelte @@ -5,10 +5,12 @@ front = $bindable(), mcOptions = $bindable(), mcCorrectIdx = $bindable(), + mcExplanation = $bindable(''), }: { front: string; mcOptions: string[]; mcCorrectIdx: number; + mcExplanation: string; } = $props(); @@ -59,6 +61,17 @@ +
+ Erklärung (optional) + Wird nach der Auswahl angezeigt — erklärt warum die Antwort richtig ist. + +
+