+
Ihre Daten bleiben auf Ihrem Gerät. Name, Anschrift und alle Eingaben werden nicht an Server übertragen.
-
+
+ {#if hadSavedState && step === 0}
+
+
Letzte Sitzung wiederhergestellt.
+
+ {#if outputHistory.length > 0}
+ goTo(5)}>Zur Ausgabe →
+ {:else if selectedSlugs.size > 0}
+ goTo(3)}>Fortsetzen →
+ {/if}
+ Neu starten
+
+
+ {/if}
+
{#if block.headline}
{block.headline}
{/if}
{#if block.intro}
-
- {@html md(block.intro)}
-
+
{@html md(block.intro)}
{/if}
- {#each ([0, 1, 2, 3, 4] as const) as s}
+ {#each Array.from({ length: TOTAL_STEPS }, (_, i) => i) as s}
{ if (s <= step) step = s; }}
+ onclick={() => { if (s <= step) goTo(s as Step); }}
disabled={s > step}
aria-current={s === step ? "step" : undefined}
- title={["Gebiet", "Argumente", "Modus", "Betroffenheit", "Ausgabe"][s]}
+ title={STEP_LABELS[s]}
>{s + 1}
- {#if s < 4}
+ {#if s < TOTAL_STEPS - 1}
{/if}
{/each}
-
+
{#if step === 0}
-
- Schritt 1 – Ihr Vorranggebiet
-
+
Schritt 1 – Ihr Vorranggebiet
{#if windArea}
-
- Vorranggebiet
-
+
Vorranggebiet
{windArea.gebiets_nr}
{#if windArea.bezeichnung}
{windArea.bezeichnung}
{/if}
-
{#if windArea.gemeinden?.length}
@@ -315,145 +546,228 @@ Karl-Liebknecht-Straße 4
{/if}
-
{#if windArea.notizen}
-
- {@html md(windArea.notizen)}
-
+
{@html md(windArea.notizen)}
{/if}
+
+
+ {#if browser && MapComponent && mapReady && mapAreaData.length > 0}
+
+ {#await MapComponent then Map}
+ {}}
+ />
+ {/await}
+ {#if !mapActive}
+ (mapActive = true)}
+ class="absolute inset-0 z-[500] flex cursor-pointer flex-col items-center justify-center gap-2 bg-black/10 backdrop-blur-[1px]"
+ aria-label="Karte aktivieren"
+ >
+
+ Klicken zum Aktivieren der Karte
+
+
+ {/if}
+
+ {:else if mapReady && mapAreaData.length === 0}
+
+ {:else if !mapReady}
+
+ Karte wird geladen …
+
+ {/if}
+
{:else}
- Kein Vorranggebiet konfiguriert. Bitte Seite im CMS einrichten.
+ Kein Vorranggebiet konfiguriert.
{/if}
Dieser Assistent hilft Ihnen, eine individuelle Einwendung für den
2. Entwurf des Regionalplans Südwestthüringen zu verfassen.
- Im nächsten Schritt wählen Sie die Argumente, die auf Ihre Situation zutreffen.
+ Sie wählen zuerst ortskonkrete Argumente für Ihr Gebiet, dann allgemeine Einwände.
-
-
(step = 1)}
- >
- Weiter zu den Argumenten →
-
+
+ goTo(1)}
+ >Weiter zu den Argumenten →
+ {#if selectedSlugs.size > 0 || absenderName}
+ Neu starten
+ {/if}
+
-
+
{:else if step === 1}
-
- Schritt 2 – Argumente wählen
-
+
Schritt 2 – Ortskonkrete Argumente
- Wählen Sie alle Punkte, die auf Ihr Gebiet und Ihre Situation zutreffen.
- Ortskonkrete Argumente sind vorausgewählt.
+ Diese Argumente beziehen sich direkt auf das Gebiet {windArea?.gebiets_nr ?? ""} .
+ Wählen Sie die Punkte, die auf Ihre Situation zutreffen.
- {#if ortskonkreteKriterien.length > 0}
-
-
-
- Ortskonkrete Argumente
-
-
- {#each ortskonkreteKriterien as k}
-
+ {#if kriterien.length > 0}
+
+ {#each kriterien as k}
+
+
toggleSlug(k._slug)}
/>
-
-
{k.title ?? slugLabel(k._slug)}
- {#if k.bulletPoints?.length}
-
- {#each k.bulletPoints.slice(0, 2) as bp}
- – {bp}
- {/each}
- {#if k.bulletPoints.length > 2}
- + {k.bulletPoints.length - 2} weitere …
- {/if}
-
- {/if}
+
+
+ toggleSlug(k._slug)}>{k.title ?? k._slug.replace(/_/g, " ")}
+ {#if k.text}
+ toggleItem(k._slug)}
+ aria-label={expandedItems.has(k._slug) ? "Einklappen" : "Ausklappen"}
+ >
+ {/if}
+
-
- {/each}
-
-
- {/if}
-
- {#if allgemeineArgList.length > 0}
-
-
-
- Allgemeine Argumente
-
-
- {#each allgemeineArgList as k}
-
- toggleSlug(k._slug)}
- />
-
-
{k.title ?? slugLabel(k._slug)}
- {#if k.bulletPoints?.length}
-
- {#each k.bulletPoints.slice(0, 2) as bp}
- – {bp}
- {/each}
- {#if k.bulletPoints.length > 2}
- + {k.bulletPoints.length - 2} weitere …
- {/if}
-
- {/if}
+
+ {#if k.text && expandedItems.has(k._slug)}
+
-
- {/each}
-
+ {/if}
+
+ {/each}
- {/if}
-
- {#if ortskonkreteKriterien.length === 0 && allgemeineArgList.length === 0}
+ {:else}
- Noch keine Argumente im CMS hinterlegt.
+ Für dieses Gebiet sind noch keine ortskonkreten Argumente hinterlegt.
{/if}
- (step = 0)}
- >← Zurück
- (step = 2)}
- >
- Weiter ({selectedSlugs.size} Argument{selectedSlugs.size !== 1 ? "e" : ""}) →
+ goTo(0)}>← Zurück
+ goTo(2)}>
+ Weiter{ortskonkreteSelectedCount > 0 ? ` (${ortskonkreteSelectedCount} gewählt)` : ""} →
-
+
{:else if step === 2}
-
- Schritt 3 – Ausgabeform
-
-
- Wie soll Ihre Einwendung aufgebaut sein?
+
Schritt 3 – Grundsätzliche Einwände
+
+ Welche allgemeinen Argumente teilen Sie? Diese gelten unabhängig vom konkreten Standort.
+ {#if ortskonkreteSelectedCount > 0}
+
+ Bereits aus Schritt 2 übernommen: {ortskonkreteSelectedCount} ortskonkrete{ortskonkreteSelectedCount !== 1 ? "s Argument" : " Argumente"}.
+
+ {:else}
+
Aus Schritt 2: keine ortskonkreten Argumente ausgewählt.
+ {/if}
+
+ {#if allgemeineGruppen.length > 0}
+
+ {#each allgemeineGruppen as group}
+ {@const groupSelectedCount = group.items.filter((f) => selectedSlugs.has(f._slug)).length}
+ {@const allSelected = groupSelectedCount === group.items.length}
+ {@const isExpanded = expandedGroups.has(group.slug)}
+
+
+
+ toggleGroup(group.slug)}
+ aria-expanded={isExpanded}
+ >
+
+ {group.label}
+
+ {groupSelectedCount > 0 ? `${groupSelectedCount}/` : ""}{group.items.length}
+
+
+ toggleGroupSelection(group)}
+ title={allSelected ? "Alle abwählen" : "Alle wählen"}
+ >
+ {allSelected ? "Alle ab" : "Alle"}
+
+
+
+
+ {#if isExpanded}
+
+ {#each group.items as f}
+
+
+
toggleSlug(f._slug)}
+ />
+
+
+ toggleSlug(f._slug)}>{f.title ?? f._slug.replace(/_/g, " ")}
+ {#if f.text}
+ toggleItem(f._slug)}
+ aria-label={expandedItems.has(f._slug) ? "Einklappen" : "Ausklappen"}
+ >
+ {/if}
+
+
+
+ {#if f.text && expandedItems.has(f._slug)}
+
+ {/if}
+
+ {/each}
+
+ {/if}
+
+ {/each}
+
+ {:else}
+
+ Keine allgemeinen Argumente hinterlegt.
+
+ {/if}
+
+
+ goTo(1)}>← Zurück
+ goTo(3)}
+ >
+ Weiter ({selectedFragments.length} Argument{selectedFragments.length !== 1 ? "e" : ""}) →
+
+
+
+
+
+ {:else if step === 3}
+
+
Schritt 4 – Ausgabeform
+
Wie soll Ihre Einwendung aufgebaut sein?
Fertigtext
- {#if mode === "fertig"}
- ✓
- {/if}
+ {#if mode === "fertig"}✓ {/if}
-
- Ausformulierter Brieftext auf Basis der gewählten Argumente.
- Ideal als Grundlage zum Anpassen und Ergänzen.
-
+
Ausformulierter Brieftext. Ideal als Grundlage zum Anpassen.
-
Leitfaden
- {#if mode === "leitfaden"}
- ✓
- {/if}
+ {#if mode === "leitfaden"}✓ {/if}
-
- Gegliederte Stichpunkte. Schreiben Sie Ihren Text komplett selbst –
- empfohlen für individuelle Einwendungen.
-
+ Gegliederte Stichpunkte zum selbst Ausformulieren. Für individuelle Einwendungen empfohlen.
- (step = 1)}
- >← Zurück
- (step = 3)}
- >Weiter →
+ goTo(2)}>← Zurück
+ goTo(4)}>Weiter →
-
- {:else if step === 3}
+
+ {:else if step === 4}
-
- Schritt 4 – Persönliche Betroffenheit
-
+
Schritt 5 – Persönliche Betroffenheit
Beschreiben Sie kurz, wie Sie persönlich betroffen sind.
Wichtig: Individuelle Betroffenheit stärkt Ihre Einwendung erheblich
@@ -513,7 +808,6 @@ Karl-Liebknecht-Straße 4
Beispiel: Ich wohne 800 m vom geplanten Standort entfernt und bin Eigentümer von …
-
Bleibt auf Ihrem Gerät. Wird nicht übertragen.
-
- (step = 2)}
- >← Zurück
- (step = 4)}
- >Weiter →
+ goTo(3)}>← Zurück
+ goTo(5)}>Weiter →
-
- {:else if step === 4}
+
+ {:else if step === 5}
-
- Schritt 5 – Absender & Ausgabe
-
-
- Ihre Daten werden nur lokal zur Texterstellung genutzt.
-
+
Schritt 6 – Absender & Ausgabe
+
Ihre Daten werden nur lokal zur Texterstellung genutzt.
-
Einzureichen bei:
{RECIPIENT}
@@ -594,13 +852,8 @@ Karl-Liebknecht-Straße 4
class="rounded-lg bg-wald-700 px-6 py-2.5 font-semibold text-white transition hover:bg-wald-800 disabled:opacity-40"
disabled={!absenderName.trim()}
onclick={generateOutput}
- >
- Text erstellen
-
-
(step = 3)}
- >← Zurück
+ >Text erstellen
+
goTo(4)}>← Zurück
{#if showOutput}
@@ -608,31 +861,50 @@ Karl-Liebknecht-Straße 4
Ihre Einwendung
-
- {copyFeedback || "Kopieren"}
-
-
- Drucken / Speichern
-
+ {copyFeedback || "Kopieren"}
+ Herunterladen
+ Drucken
-
{outputText}
+
{outputText}
-
Hinweis: Bitte passen Sie den Text vor dem Einreichen individuell an.
Einwendungen mit persönlichen Formulierungen sind wirksamer als identische Kopien.
- Einreichfrist: {#if windArea?.stellungnahme && typeof windArea.stellungnahme === "object" && "slug" in windArea.stellungnahme}
- siehe Verfahrensbekanntmachung
- {:else}
- bitte bei der Planungsstelle erfragen
- {/if}.
+
+ {/if}
+
+
+ {#if outputHistory.length > 0}
+
+
(historyExpanded = !historyExpanded)}
+ >
+ Frühere Versionen ({outputHistory.length})
+
+
+
+ {#if historyExpanded}
+
+ {#each outputHistory as entry, i}
+
+
+ {entry.date} · {entry.argCount} Argument{entry.argCount !== 1 ? "e" : ""}
+ { outputText = entry.text; showOutput = true; }}
+ >Wiederherstellen
+
+
{entry.text.slice(0, 400)}{entry.text.length > 400 ? " …" : ""}
+
+ {/each}
+
Verlauf löschen
+
+ {/if}
{/if}