feat(calendar): image/attachment per event, direct links, copy link, ImageModal component
Deploy / verify (push) Successful in 58s
Deploy / deploy (push) Successful in 53s

- calendar_item schema: flyer → image (type: image), attachment (assetUrl)
- CalendarItemData: image + attachment fields
- event anchor IDs (#event-{slug}) with onMount hash scroll + auto-open
- share button uses direct calendar anchor URL
- copy link button (mdi:link-variant) copies anchor URL to clipboard
- ImageModal extracted as reusable component
- action buttons always show text (no expand-on-hover)
- onDestroy window guard (SSR fix)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Peter Meier
2026-05-12 20:02:30 +02:00
parent 6fc2c0a345
commit 23faef550e
4 changed files with 183 additions and 26 deletions
+19 -4
View File
@@ -383,15 +383,30 @@ export interface LiveStrommixBlockData {
}
/** Kalender-Item (calendar_item) aus OpenAPI; terminZeit = ISO date-time.
* Lokale Erweiterungen (terminEnde, location, tags) sind im RustyCMS-Schema
* ergänzt und werden bis zur OpenAPI-Regen hier inline mitgeführt. */
* Lokale Erweiterungen sind im RustyCMS-Schema ergänzt und werden bis zur
* OpenAPI-Regen hier inline mitgeführt. */
export type CalendarItemData = components["schemas"]["calendar_item"] & {
/** Optionales Endedatum für Mehrtagesveranstaltungen (ISO date-time). */
terminEnde?: string;
/** Optionale Veranstaltungsort-Beschreibung (Adresse oder Name). */
location?: string;
/** Optionaler Veranstaltungsort (string oder {text, lat, lng}). */
location?: string | { text?: string; lat?: number; lng?: number };
/** Optionale Tags zur Filterung. */
tags?: string[];
/** Optionales Veranstaltungsbild (aufgelöstes image-Feld oder Slug). */
image?:
| string
| {
_type?: "img";
_slug?: string;
src?: string;
description?: string;
file?: { url?: string };
};
/** Optionaler Dateianhang (z.B. PDF-Flyer). */
attachment?: {
src?: string;
label?: string;
};
};
/** Kalender-Block (_type: "calendar"). items nach Resolve: CalendarItemData[]. Basis aus OpenAPI (calendar). */