feat(design-system): Storybook + Button-Atom-Vereinheitlichung + SectionHeader
Storybook (SvelteKit-Framework, Tailwind v4, MSW, Translation-Decorator): Stories für Atoms/Molecules/Organisms + alle CMS-Blocks. Button-Atom: 5 .btn-*-Varianten (primary/secondary/tertiary/outline/warning), class-Merge-Prop, href→<a>, Loading-Spinner neben Label, rounded-md/font-medium. Alle rohen .btn-*- und Hand-Style-Buttons app-weit aufs Atom migriert. SectionHeader-Molecule (kicker/number/title/subtitle/action) + Integration in 7 CMS-Blocks (post_overview, organisations, organisations_map, searchable_text, image_gallery, youtube_video_gallery, files) via neuem section_header-Schema. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -2,14 +2,19 @@
|
||||
import "leaflet/dist/leaflet.css";
|
||||
import { onMount, onDestroy } from "svelte";
|
||||
import { getBlockLayoutClasses } from "$lib/block-layout";
|
||||
import SectionHeader from "$lib/components/SectionHeader.svelte";
|
||||
import type { OrganisationsMapBlockData, OrganisationEntry, ContactEntry } from "$lib/block-types";
|
||||
import Icon from "@iconify/svelte";
|
||||
import "$lib/iconify-offline";
|
||||
import { marked } from "$lib/markdown-safe";
|
||||
import Button from "$lib/ui/Button.svelte";
|
||||
|
||||
let { block }: { block: OrganisationsMapBlockData } = $props();
|
||||
|
||||
const layoutClasses = $derived(getBlockLayoutClasses(block.layout));
|
||||
const actionRef = $derived(
|
||||
block.action && typeof block.action === "object" ? block.action : null,
|
||||
);
|
||||
|
||||
const orgs = $derived(
|
||||
(block.organisations ?? []).filter(
|
||||
@@ -127,7 +132,15 @@
|
||||
|
||||
<div class="not-prose {layoutClasses}" data-block-type="organisations_map">
|
||||
{#if block.headline}
|
||||
<h2 class="mb-3 text-xl font-bold text-stein-900">{block.headline}</h2>
|
||||
<div class="mb-3">
|
||||
<SectionHeader
|
||||
number={block.number}
|
||||
kicker={block.kicker}
|
||||
title={block.headline}
|
||||
actionLabel={actionRef?.linkName}
|
||||
actionHref={actionRef?.url}
|
||||
/>
|
||||
</div>
|
||||
{/if}
|
||||
|
||||
<div
|
||||
@@ -222,15 +235,17 @@
|
||||
{/if}
|
||||
|
||||
{#if getLink(selectedOrg)}
|
||||
<a
|
||||
href={getLink(selectedOrg)}
|
||||
<Button
|
||||
href={getLink(selectedOrg) ?? undefined}
|
||||
variant="outline"
|
||||
size="sm"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
class="btn-outline btn-sm w-full justify-center no-underline!"
|
||||
class="w-full"
|
||||
>
|
||||
<Icon icon="lucide:external-link" class="size-3.5" />
|
||||
{getLinkLabel(selectedOrg)}
|
||||
</a>
|
||||
</Button>
|
||||
{/if}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
Reference in New Issue
Block a user