From d45e69117130b4c0653bcca3f1d30bba660b9792 Mon Sep 17 00:00:00 2001 From: Peter Meier Date: Thu, 28 May 2026 13:27:07 +0200 Subject: [PATCH] feat(stellungnahme): Notizfeld pro Argument + editierbare Einleitung/Abschluss MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Notizfeld an jedem Argument (expanded) → erscheint im Output als "Anmerkung:" - Einleitung und Abschluss in Step 5 via
editierbar - Beide mit Zurücksetzen-Button auf Default - Alles in localStorage persistiert Co-Authored-By: Claude Sonnet 4.6 --- .../blocks/StellingnahmeGeneratorBlock.svelte | 102 ++++++++++++++++-- 1 file changed, 92 insertions(+), 10 deletions(-) diff --git a/src/lib/components/blocks/StellingnahmeGeneratorBlock.svelte b/src/lib/components/blocks/StellingnahmeGeneratorBlock.svelte index 2e497bd..adfe0ae 100644 --- a/src/lib/components/blocks/StellingnahmeGeneratorBlock.svelte +++ b/src/lib/components/blocks/StellingnahmeGeneratorBlock.svelte @@ -105,13 +105,15 @@ absenderName, absenderAnschrift, absenderOrt, + argNotes, + openingOverride, + closingOverride, })); } catch {} } $effect(() => { - // track all persisted fields reactively - void [selectedSlugs, persoenlicheEingabe, absenderName, absenderAnschrift, absenderOrt]; + void [selectedSlugs, persoenlicheEingabe, absenderName, absenderAnschrift, absenderOrt, argNotes, openingOverride, closingOverride]; if (mounted) saveState(); }); @@ -138,6 +140,22 @@ let absenderOrt = $state(""); let showOutput = $state(false); + // Per-argument notes (appear in output after bullet points) + let argNotes = $state>({}); + function setArgNote(slug: string, value: string) { + argNotes = { ...argNotes, [slug]: value }; + } + + // Editable opening/closing — null = use reactive default + const defaultOpening = $derived( + `ich erhebe Einwendung gegen die Ausweisung des Windenergie-Vorranggebiets ${gebietsBez} im 2. Entwurf des Regionalplans Südwestthüringen.`, + ); + const defaultClosing = "Ich fordere die Regionalplanung auf, das Vorranggebiet aus dem Regionalplan zu streichen oder zumindest einer erneuten, umfassenden Überprüfung zu unterziehen."; + let openingOverride = $state(null); + let closingOverride = $state(null); + const effectiveOpening = $derived(openingOverride ?? defaultOpening); + const effectiveClosing = $derived(closingOverride ?? defaultClosing); + function toggleSlug(slug: string) { const next = new Set(selectedSlugs); @@ -221,7 +239,7 @@ Karl-Liebknecht-Straße 4 Stichpunkte müssen vor dem Einreichen in eigene, ausformulierte Sätze überführt werden. Text individuell anpassen. ${"=".repeat(64)}`; - let body = `ich erhebe Einwendung gegen die Ausweisung des Windenergie-Vorranggebiets ${gebietsBez} im 2. Entwurf des Regionalplans Südwestthüringen.\n\n`; + let body = `${effectiveOpening}\n\n`; for (const f of selectedFragments) { if (f.title) body += `${f.title}\n\n`; if (f.bulletPoints?.length) { @@ -230,10 +248,12 @@ ${"=".repeat(64)}`; } else if (f.text) { body += `${stripMd(f.text)}\n\n`; } + const note = argNotes[f._slug]?.trim(); + if (note) body += `Anmerkung: ${note}\n\n`; } if (persoenlicheEingabe.trim()) body += `Persönliche Betroffenheit\n\n${persoenlicheEingabe.trim()}\n\n`; - body += `Ich fordere die Regionalplanung auf, das Vorranggebiet aus dem Regionalplan zu streichen oder zumindest einer erneuten, umfassenden Überprüfung zu unterziehen.\n\n${closing}`; + body += `${effectiveClosing}\n\n${closing}`; return [disclaimer, "", sender, "", heute, "", "An:", RECIPIENT, "", "Betreff: " + betreff.split("\n")[0], betreff.split("\n")[1] ?? "", "", "Sehr geehrte Damen und Herren,", "", body.trimEnd()] .join("\n") @@ -276,6 +296,9 @@ ${"=".repeat(64)}`; selectedSlugs = new Set(); expandedItems = new Set(); expandedGroups = new Set(); + argNotes = {}; + openingOverride = null; + closingOverride = null; persoenlicheEingabe = ""; absenderName = ""; absenderAnschrift = ""; @@ -385,6 +408,9 @@ ${"=".repeat(64)}`; if (typeof s.absenderName === "string") absenderName = s.absenderName; if (typeof s.absenderAnschrift === "string") absenderAnschrift = s.absenderAnschrift; if (typeof s.absenderOrt === "string") absenderOrt = s.absenderOrt; + if (s.argNotes && typeof s.argNotes === "object") argNotes = s.argNotes; + if (typeof s.openingOverride === "string") openingOverride = s.openingOverride; + if (typeof s.closingOverride === "string") closingOverride = s.closingOverride; if ((s.selectedSlugs?.length ?? 0) > 0 || s.absenderName || s.persoenlicheEingabe) { hadSavedState = true; } @@ -637,9 +663,18 @@ ${"=".repeat(64)}`; - {#if k.text && expandedItems.has(k._slug)} -
-
{@html md(k.text)}
+ {#if expandedItems.has(k._slug)} +
+ {#if k.text} +
{@html md(k.text)}
+ {/if} +
{/if}
@@ -729,9 +764,18 @@ ${"=".repeat(64)}`; - {#if f.text && expandedItems.has(f._slug)} -
-
{@html md(f.text)}
+ {#if expandedItems.has(f._slug)} +
+ {#if f.text} +
{@html md(f.text)}
+ {/if} +
{/if}
@@ -810,6 +854,44 @@ ${"=".repeat(64)}`;
{RECIPIENT}
+ +
+
+ + Einleitung anpassen + + +
+ + {#if openingOverride !== null} + + {/if} +
+
+
+ + Abschluss anpassen + + +
+ + {#if closingOverride !== null} + + {/if} +
+
+
+