feat(blocks): SectionGrid/InfoCard/ContactForm + Konsolidierung (Tier 1)
Neue Komponenten: SectionGrid, InfoCard (tone/compact), ArrowLink, ContactFormBlock, SectionGridBlock. CMS-Blöcke section_grid + contact_form (info_card-Collection). OrganisationsBlock: presentation "grid" (SectionGrid + InfoCard-Tiles). Kontaktformular-Submit: size md + Send-Icon. Konsolidierung Tier 1: - .card-surface + Card-Atom → rounded-lg, .chip → rounded-full, Input-Atome → rounded-md - tote .btn-*-Klassen aus app.css entfernt (Atom nutzt --color-btn-*-Tokens) - hardcoded Hex → stein-Tokens (InfoCard, ContactFormBlock) - redundante rounded-sm auf card-surface-Nutzern entfernt Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -10,6 +10,8 @@
|
||||
import RustyImage from "$lib/components/RustyImage.svelte";
|
||||
import Button from "$lib/ui/Button.svelte";
|
||||
import SectionHeader from "$lib/components/SectionHeader.svelte";
|
||||
import SectionGrid from "$lib/components/SectionGrid.svelte";
|
||||
import InfoCard from "$lib/components/InfoCard.svelte";
|
||||
|
||||
function organisationLogoField(o: OrganisationEntry) {
|
||||
return extractCmsImageField(o.logo);
|
||||
@@ -32,6 +34,8 @@
|
||||
);
|
||||
const compact = $derived(block.presentation === "compact");
|
||||
const carousel = $derived(block.presentation === "carousel");
|
||||
// "grid" = SectionGrid + InfoCard-Tiles (Logo im Kreis, Name, Beschreibung).
|
||||
const grid = $derived(block.presentation === "grid");
|
||||
const orgs = $derived(block.organisations ?? []);
|
||||
const ctaHtml = $derived(
|
||||
block.addOrganisationMarkdown
|
||||
@@ -166,7 +170,7 @@
|
||||
{/snippet}
|
||||
|
||||
<div class={layoutClasses} data-block="Organisations" data-block-type="organisations" data-block-slug={block._slug}>
|
||||
{#if block.headline}
|
||||
{#if block.headline && !grid}
|
||||
{#if compact}
|
||||
<h3 class="mb-2 text-lg font-semibold text-stein-900">{block.headline}</h3>
|
||||
{:else}
|
||||
@@ -183,7 +187,29 @@
|
||||
{/if}
|
||||
{/if}
|
||||
|
||||
{#if carousel}
|
||||
{#if grid}
|
||||
<SectionGrid
|
||||
number={block.number}
|
||||
kicker={block.kicker}
|
||||
title={block.headline}
|
||||
subtitle={block.description}
|
||||
actionLabel={actionRef?.linkName}
|
||||
actionHref={actionRef?.url}
|
||||
columns={3}
|
||||
>
|
||||
{#each orgs as org}
|
||||
{#if typeof org === "object" && org !== null}
|
||||
{@const o = org as OrganisationEntry}
|
||||
{@const logoField = organisationLogoField(o)}
|
||||
<InfoCard
|
||||
icon={logoField?.url ?? "mdi:account-group"}
|
||||
title={o.name ?? ""}
|
||||
description={o.description}
|
||||
/>
|
||||
{/if}
|
||||
{/each}
|
||||
</SectionGrid>
|
||||
{:else if carousel}
|
||||
<div class="relative">
|
||||
<div
|
||||
bind:this={scroller}
|
||||
|
||||
Reference in New Issue
Block a user