From 657f726edb1dbf8db5c8dcd26f6d73c46b5b876e Mon Sep 17 00:00:00 2001 From: Peter Meier Date: Sun, 12 Jul 2026 10:53:43 +0200 Subject: [PATCH] refactor(consolidate): ArrowLink tone + FormSuccess-Komponente MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit A: ArrowLink um tone-Prop (himmel/wald/stein/white) — PostOverview + CalendarCompact inline Arrow-Links → ArrowLink. B: 3× identische Formular-Success-Boxen → internal/FormSuccess.svelte (rounded-lg). Co-Authored-By: Claude Opus 4.8 (1M context) --- src/lib/components/ArrowLink.stories.ts | 3 +++ src/lib/components/ArrowLink.svelte | 11 ++++++++++- src/lib/components/blocks/CalendarCompactBlock.svelte | 11 ++++------- src/lib/components/blocks/PostOverviewBlock.svelte | 8 +++----- .../components/internal/ContactFormComponent.svelte | 6 ++---- src/lib/components/internal/FormSuccess.svelte | 9 +++++++++ .../components/internal/MitmachenFormComponent.svelte | 6 ++---- .../internal/NewsletterFormComponent.svelte | 6 ++---- 8 files changed, 35 insertions(+), 25 deletions(-) create mode 100644 src/lib/components/internal/FormSuccess.svelte diff --git a/src/lib/components/ArrowLink.stories.ts b/src/lib/components/ArrowLink.stories.ts index 843c854..8874955 100644 --- a/src/lib/components/ArrowLink.stories.ts +++ b/src/lib/components/ArrowLink.stories.ts @@ -9,6 +9,7 @@ const meta = { args: { href: '#', label: 'Mehr erfahren' }, argTypes: { size: { control: 'select', options: ['sm', 'md'] }, + tone: { control: 'select', options: ['himmel', 'wald', 'stein', 'white'] }, external: { control: 'boolean' }, }, } satisfies Meta; @@ -19,3 +20,5 @@ type Story = StoryObj; export const Medium: Story = { args: { size: 'md', label: 'Zum Adressbuch' } }; export const Klein: Story = { args: { size: 'sm', label: 'cloud.windwiderstand.de' } }; export const Extern: Story = { args: { size: 'sm', label: 'Beitreten', external: true } }; +export const Wald: Story = { args: { tone: 'wald', label: 'Alle Termine' } }; +export const Stein: Story = { args: { tone: 'stein', size: 'sm', label: 'Alle Beiträge' } }; diff --git a/src/lib/components/ArrowLink.svelte b/src/lib/components/ArrowLink.svelte index 22acfc0..f368ae4 100644 --- a/src/lib/components/ArrowLink.svelte +++ b/src/lib/components/ArrowLink.svelte @@ -5,17 +5,20 @@ * `size`: sm (kompakt, z.B. in Cards) · md (Sektionsköpfe). */ type Size = "sm" | "md"; + type Tone = "himmel" | "wald" | "stein" | "white"; let { href, label, external = false, size = "md", + tone = "himmel", }: { href: string; label: string; external?: boolean; size?: Size; + tone?: Tone; } = $props(); const textClass: Record = { @@ -26,13 +29,19 @@ sm: "size-3.5", md: "size-4", }; + const toneClass: Record = { + himmel: "text-himmel-500 hover:text-himmel-600", + wald: "text-wald-700 hover:text-wald-800", + stein: "text-stein-600 hover:text-stein-900", + white: "text-white hover:text-white/80", + }; {label} diff --git a/src/lib/components/blocks/CalendarCompactBlock.svelte b/src/lib/components/blocks/CalendarCompactBlock.svelte index e2d42c4..28b6173 100644 --- a/src/lib/components/blocks/CalendarCompactBlock.svelte +++ b/src/lib/components/blocks/CalendarCompactBlock.svelte @@ -1,5 +1,6 @@ {#if formState === "success"} -
-

{t(T.contact_success_title)}

-

{t(T.contact_success_body)}

-
+ {:else}
+ /** Erfolgs-Box nach Formular-Absenden (Kontakt/Newsletter/Mitmachen). */ + let { title, body }: { title: string; body: string } = $props(); + + +
+

{title}

+

{body}

+
diff --git a/src/lib/components/internal/MitmachenFormComponent.svelte b/src/lib/components/internal/MitmachenFormComponent.svelte index 54110dd..99a53e4 100644 --- a/src/lib/components/internal/MitmachenFormComponent.svelte +++ b/src/lib/components/internal/MitmachenFormComponent.svelte @@ -6,6 +6,7 @@ import Textarea from "$lib/ui/Textarea.svelte"; import Checkbox from "$lib/ui/Checkbox.svelte"; import { useTranslate, T } from "$lib/translations"; + import FormSuccess from "./FormSuccess.svelte"; import { FILE_ACCEPT, LIMITS, @@ -225,10 +226,7 @@ {#if formState === "success"} -
-

{t(T.mitmachen_success_title)}

-

{t(T.mitmachen_success_body)}

-
+ {:else} {#if formState === "success"} -
-

{t(T.newsletter_success_title)}

-

{t(T.newsletter_success_body)}

-
+ {:else}