+
{post.subheadline}
{/if}
{#if post.excerpt}
-
+
{post.excerpt}
{/if}
diff --git a/src/components/Tag.svelte b/src/components/Tag.svelte
index 8c06669..f2f03be 100644
--- a/src/components/Tag.svelte
+++ b/src/components/Tag.svelte
@@ -1,4 +1,7 @@
{#if href}
-
{label}
+
+ {#if icon}
+
+ {/if}
+ {label}
+
{:else if onclick}
-
+
{:else}
-
{label}
+
+ {#if icon}
+
+ {/if}
+ {label}
+
{/if}
diff --git a/src/components/Tags.svelte b/src/components/Tags.svelte
index b4f5f7d..c7ac3c2 100644
--- a/src/components/Tags.svelte
+++ b/src/components/Tags.svelte
@@ -1,7 +1,9 @@
@@ -32,6 +52,8 @@
label={name}
variant={variant}
href={tagBase ? `${tagBase}/${slug(t)}` : null}
+ icon={tagIcon(t)}
+ customColor={tagColor(t)}
/>
{/if}
{/each}
diff --git a/src/components/blocks/OpnFormBlock.svelte b/src/components/blocks/OpnFormBlock.svelte
index e80c4ec..b436e3a 100644
--- a/src/components/blocks/OpnFormBlock.svelte
+++ b/src/components/blocks/OpnFormBlock.svelte
@@ -13,25 +13,41 @@
: "https://opnform.pm86.de"
).replace(/\/$/, ""),
);
- const iframeSrc = $derived(
- formId ? `${baseUrl}/forms/${formId}` : "",
- );
- const iframeTitle = $derived(
- block.iframeTitle?.trim() || "Kontaktformular",
- );
+ const iframeSrc = $derived(formId ? `${baseUrl}/forms/${formId}` : "");
+ const iframeTitle = $derived(block.iframeTitle?.trim() || "Kontaktformular");
- /**
- * Wie im OpnForm-Embed: initEmbed erst wenn iframe.min.js fertig geladen ist
- * (entspricht
diff --git a/src/components/blocks/QuoteBlock.svelte b/src/components/blocks/QuoteBlock.svelte
index a5aaaca..1ac2ff6 100644
--- a/src/components/blocks/QuoteBlock.svelte
+++ b/src/components/blocks/QuoteBlock.svelte
@@ -9,10 +9,10 @@
-
- "{block.quote ?? ""}"
+
+ {block.quote ?? ""}
{#if block.author}
- — {block.author}
+ {block.author}
{/if}
diff --git a/src/lib/block-types.ts b/src/lib/block-types.ts
index 6b2dd95..09a049a 100644
--- a/src/lib/block-types.ts
+++ b/src/lib/block-types.ts
@@ -229,6 +229,8 @@ export interface OrganisationsBlockData {
presentation?: "default" | "compact";
addOrganisationTitle?: string;
addOrganisationMarkdown?: string;
+ /** Referenz auf link-Collection (aufgelöst: url, linkName, newTab) */
+ addOrganisationLink?: string | { url?: string; linkName?: string; newTab?: boolean };
organisations?: (string | OrganisationEntry)[];
layout?: BlockLayout;
}
diff --git a/src/lib/blog-utils.ts b/src/lib/blog-utils.ts
index ec48533..784398d 100644
--- a/src/lib/blog-utils.ts
+++ b/src/lib/blog-utils.ts
@@ -11,35 +11,74 @@ import type { RowContentLayout } from "./block-types";
import type { CalendarItemData } from "./block-types";
/** rusty-image nur dynamisch importieren, damit client-seitige Importe (z. B. PostOverviewBlock) nicht node:crypto in den Browser ziehen. */
-/** Slug → Anzeigename (name) aus der Tag-API. Für Auflösung von post.postTag in Lesbarkeit. */
-export async function getTagsMap(): Promise