Wie kuratierte Zeitstrahl-Ereignisse entstehen und wie Briefe gruppiert werden — von zwei Seiten in ein Datenmodell (TimelineEvent.documents): der Ereignis-Editor unter /zeitstrahl/events/[id]/edit (Kurator baut, verlinkt viele Briefe) und die Quick-Action im Dokument-Detail (beim Lesen schnell zuordnen). Beide bauen auf bereits ausgelieferten Komponenten auf.
Manuelle Gruppierung = ein TimelineEvent mit verknüpften Dokumenten. Kuratoren arbeiten in beide Richtungen — wir bauen beide, statt eine zu erzwingen.
/zeitstrahl/events/new · [id]/edit mit Dokument-Mehrfach-Picker = Bulk-Linking vieler Briefe auf einmal. Spiegelt 1:1 den GeschichteEditor (gleiche zwei-Spalten-Form, Sidebar-Picker, Sticky-Save-Bar).
DocumentMetadataDrawer.svelte).
/zeitstrahl/events/[id]/editForm-Actions-Muster, gegated mit WRITE_ALL. Layout & Verhalten 1:1 vom GeschichteEditor übernommen: Hauptspalte + Sidebar (lg:grid-cols-[2fr_1fr]), Sticky-Save-Bar, beforeNavigate-Warnung bei ungespeicherten Änderungen.
PERSONAL / HISTORICAL Segmented-Control. Steuert Rendering (Mint-Pille vs. Welt-Band).DatePrecisionInput (gleiche Logik wie Dokument-Datum, metaDatePrecision). „Zeitspanne" blendet End-Datum ein.TEXT), bewusst schlicht.DocumentMultiSelect (Typeahead, Chips, Hidden-Inputs).PersonMultiSelect. Bestimmt, in welchem „Lebensweg" das Ereignis auftaucht.?documentId=… ist Feld ⑤ vorbefüllt (aus der Quick-Action, §4-D).Feld ⑤ ist der unveränderte DocumentMultiSelect: Tippen sucht über /api/documents/search?q=… (debounced 300 ms), Treffer mit ehrlichem Datums-Label, bereits gewählte werden gefiltert. Jeder Klick fügt einen Brief zum Cluster.
title · formatDocumentDate(precision). Bereits verknüpfte Briefe erscheinen nicht in den Treffern (Dedup).Die Dokument-Detailseite ist ein vollflächiger Viewer ohne Sidebar (fixed inset). Aktions-Flächen gibt es nur zwei: die DocumentTopBar und den aufklappbaren Details-Drawer. Die Quick-Action lebt an beiden — primär als „Zeitstrahl"-Spalte im Drawer (spiegelt die Geschichten-Spalte), plus ein Top-Bar-Button für den Ein-Klick-Weg.
canBlogWrite, DocumentMetadataDrawer.svelte:210). Zeitstrahl-Ereignisse sind strukturell identisch („dieser Brief gehört zu diesen Ereignissen") und bekommen daher eine gleichwertige vierte/fünfte Spalte. Konsistent & auffindbar dort, wo Nutzer ohnehin „Zugehörigkeit" suchen.DocumentTopBarActions). Öffnet ein kleines Popover zum Ein-Klick-Zuordnen, ohne den Drawer zu öffnen. Im Mobile-Menü als Eintrag.×, plus Quick-Add-Zeile. Nur sichtbar/aktiv bei canWrite./zeitstrahl/events/new?documentId={id} — öffnet den Editor (§2) mit diesem Brief in Feld ⑤ vorbefüllt. Spiegelt /geschichten/new?documentId=.Der Typeahead in der Zeitstrahl-Spalte (oder im Top-Bar-Popover). Gleiches Muster wie DocumentMultiSelect, nur sucht es Ereignisse statt Dokumente.
aria-live. Unlink über × (DELETE).DocumentMultiSelect (Brief-Gruppierung, unverändert) · PersonMultiSelect (Beteiligte) · GeschichteEditor-Layout (zwei Spalten, Sticky-Save, beforeNavigate) · DocumentMetadataDrawer-Spaltenmuster (Quick-Action) · useUnsavedWarning · formatDocumentDate / DatePrecision. Brand-Tokens wie im Zeitstrahl-Spec: Navy #012851, Mint #a1dcd8, Linie #e4e2d7, ink-3 #6b7280, danger #c0392b; Serifen-Titel (Tinos), Sans-Chrome (Montserrat).| Baustein | Datei / Endpoint | Verantwortung |
|---|---|---|
| Editor-Route (neu) | /zeitstrahl/events/new · [id]/edit | +page.server.ts (Form-Actions, WRITE_ALL) + +page.svelte; ?documentId= vorbefüllt Feld ⑤ |
| Editor-Komponente (neu) | TimelineEventEditor.svelte | Spiegelt GeschichteEditor: Titel, Typ, Datum+Präzision, Beschreibung; Sidebar-Picker; Sticky-Save; beforeNavigate |
| Brief-Gruppierung (reuse) | DocumentMultiSelect.svelte | Unverändert — Typeahead /api/documents/search, Chips, Hidden-Inputs documentIds |
| Personen (reuse) | PersonMultiSelect.svelte | Unverändert — Beteiligte Personen |
| Datum + Präzision | DatePrecisionInput (geteilt) | Wie Dokument-Datum (metaDatePrecision); „Zeitspanne" → End-Datum; formatDocumentDate fürs Label |
| Quick-Action-Spalte (neu) | DocumentTimelineColumn.svelte | Im DocumentMetadataDrawer neben Geschichten; verknüpfte Ereignisse + Quick-Add; nur bei canWrite |
| Quick-Add-Picker (neu) | DocumentTimelineEventPicker.svelte | Ereignis-Typeahead; sofort verlinken oder ?documentId= zum Editor; auch im Top-Bar-Popover |
| Top-Bar-Button (neu) | DocumentTopBarActions · DocumentMobileMenu | „⊕ Zeitstrahl"-Button (canWrite); öffnet Quick-Add-Popover |
| Backend — CRUD | POST · PUT · DELETE /api/timeline/events | TimelineEventController, WRITE_ALL; TimelineEventRequest mit documentIds / personIds |
| Backend — Link/Unlink | PUT /api/timeline/events/{id} | Verlinken/Lösen läuft über das Event-Update (documents-Set); kein neuer ErrorCode nötig |
| Barrierefreiheit | — | Picker-Dropdowns Tastatur-navigierbar (↑↓↵), aria-live für „verknüpft/gelöst"; 44px-Ziele; sichtbarer Fokus-Ring; Löschen/Unlink mit Bestätigung |