diff --git a/.planning/STATE.md b/.planning/STATE.md index a6c84d2..27886f3 100644 --- a/.planning/STATE.md +++ b/.planning/STATE.md @@ -414,6 +414,7 @@ Gerettet aus `.continue-here.md`. Relevant fuer die noch offenen Live-Tests. | 260916-htc | **Kalender-Widget nach Vorbild personal-dashboard.** Monatsraster (Zurueck/Monat/Weiter, Mo-So, 42 Zellen ab Montag, heute hervorgehoben, Zaehler-Plakette je Tag, Termine beim Ueberfahren als Tooltip per `createPortal`/`position: fixed`, weil die Kachel `overflow-hidden` ist) + Block "Naechste Termine" (Datum/Uhrzeit, Titel, Ort, Farbpunkt). Drei Einstellungen unter Einstellungen -> Dashboard -> Widgets (`CalendarConfig`, Muster ClockConfig): `showMonth` (Standard an), `maxEvents` 0..10 (Standard 3, 0 = ausblenden), `lookaheadDays` 7/14/30/60/90 (Standard 30). Ein `fetchEvents(from,to)`-Aufruf je Ladevorgang mit lokalen Tagesgrenzen (Backend-Cache-Schluessel bleibt stabil), Neuladen bei Monatswechsel, 5-Minuten-Intervall bleibt. Neues reines Modul `calendar-month.ts` (resolveCalendarConfig, buildCalendarDays, groupEventsByDate, computeFetchWindow, selectUpcomingEvents). Mindestgroesse calendar 6x8 (Registry-Test mitgezogen). Keine Quellenauswahl pro Widget (User-Entscheidung: nur Optik). 16 i18n-Schluessel de/en, Changelog "Geändert", Anwenderhandbuch. Tests Web 315 -> 332 / 51 Dateien, tsc 0, 12 Dateien. | 2026-09-16 | 0858102,61996dc,6d8c7c4 | [260916-htc-kalender-widget-nach-vorbild-personal-da](./quick/260916-htc-kalender-widget-nach-vorbild-personal-da/) | | 260916-iex | **Dashboard-Widgets: Notiz-Haekchen, Favoriten-Titel, Link-Widget entfernt.** (1) Notiz-Widget: Aufgabenlisten (`- [ ]`/`- [x]`) in der Ansicht direkt abhakbar — `previewOptions.components.input` ersetzt das von rehypeSanitize erzwungene `disabled`-Kaestchen durch `NoteCheckbox` (greift NACH Sanitize, per Spike bestaetigt), delegierter Klick auf dem Vorschau-Container, Index = Reihenfolge der Kaestchen, `toggleTaskLine` kippt genau diese Zeile (strenge Regex, Code-Zaeune uebersprungen), Sofort-Speichern. (2) Favoriten-Widget: `config.title` optional — Kopfzeile im Notiz-Look nur bei Titel, im Bearbeitungsmodus Textfeld (`widgetNoDrag`, 1500 ms entprellt), `FavoritesConfig` + "— {title}" im Einstellungsfeld, NoteConfig-Beschriftung uebersetzt. (3) Link-Widget restlos entfernt: Registry/Union/Constraints/Katalog/page.tsx, `widgets.link` de/en, API-DTO, Migration `20260916120000_remove_link_widget` (`DELETE FROM "WidgetInstance" WHERE "widgetType" = 'link'`, FavoriteLink kaskadiert, Migrationsrolle tessera = Superuser/BYPASSRLS), `widget-wrapper.test.tsx` (unbekannter Typ -> grauer Text), Handbuch, Changelog. Tests Web 332 -> 344 / 52 Dateien, API dashboard 31 gruen, tsc Web+API 0. | 2026-09-16 | 684f063,7f1ee3b,39ea147 | [260916-iex-dashboard-widgets-notiz-haekchen-in-der-](./quick/260916-iex-dashboard-widgets-notiz-haekchen-in-der-/) | | 260916-j4f | **Nachtraege nach Browser-Pruefung.** Kalender-Tooltip bricht lange Termintitel um (`break-words` + `min-w-0`, Breite/Klemmung aus `TOOLTIP_WIDTH_PX = 288`); Notiz-Widget nimmt `data-color-mode` aus `useTheme().resolvedTheme` mit mounted-Guard (Muster changelog-view) statt `auto` — Textbereich blieb bei OS-dunkel/Tessera-hell dunkel (User-Meldung); CHANGELOG.md auf kurze Stichpunkte gestrafft (User: "Kein Fliesstext"), alle drei Abschnitte, Ueberschriften unveraendert, `publish-release.sh --dry-run --tag v1.1.0` Exit 0. Tests Web 344 -> 347 / 52 Dateien, tsc 0. | 2026-09-16 | b16e4b8,4c2495b,a6bb7aa | [260916-j4f-nachtraege-kalender-tooltip-umbrechen-no](./quick/260916-j4f-nachtraege-kalender-tooltip-umbrechen-no/) | +| 260916-jvj | **Kalender-Plaketten in Kalenderfarbe + Aufzaehlungspunkte in Markdown-Ansichten.** Tages-Plakette nimmt `day.events[0].color` (groupEventsByDate sortiert jetzt je Tag nach Start) als Inline-Hintergrund mit weisser Schrift, ohne Farbe unveraendert `bg-primary`; Farbpunkt je Tooltip-Zeile. Tailwind-v4-Preflight entfernt `list-style` global, markdown.css setzt es nicht zurueck -> Vier-Regeln-Block am Ende von `globals.css` (`.wmde-markdown ul/ol`, Abhak-Listen bleiben ohne Punkt) fuer "Was ist neu" und Notiz-Ansicht. Changelog. Tests Web 347 -> 350 / 52 Dateien, tsc 0. | 2026-09-16 | 1e4ec30,c85cf9a | [260916-jvj-kalender-plaketten-in-kalenderfarbe-stat](./quick/260916-jvj-kalender-plaketten-in-kalenderfarbe-stat/) | ## Deferred Items @@ -459,4 +460,4 @@ Last session: 2026-09-16T10:15:09.000Z Resumed: 2026-09-14 — Sitzung ueber /gsd-resume-work fortgesetzt; #29 und 3c als /gsd-quick --validate mit voller Kette durchgefuehrt. Stopped at: **VERSION 1.1.0 FREIGEGEBEN — 2026-09-16.** CHANGELOG `Unveröffentlicht` -> `1.1.0 – 2026-09-16` (e0d4532), `live` per ff-merge auf e0d4532, Tag `v1.1.0` gepusht; CI (Beta, live-Pruefung, Tag) gruen; Registry traegt `live`/`v1.1.0` (Stempel `v1.1.0 live e0d4532`); **erster echter CI-Beweis des Release-Wegs: Gitea-Release "Tessera 1.1.0" von der Pipeline angelegt** (Body 2146 Zeichen). Der User spielt 1.1.0 auf tessera.ctl.de ein (pull + up -d --force-recreate api web). Inhalt: Dashboard-Umbau + Nachbesserung, Seite "Was ist neu", Uebersetzungs-Fix. Offen ohne Dringlichkeit: Desktop-Client-Todo, Ship Phase 17, Ledger #35/#36/#37. Mandantenfaehigkeit RUHT. Schalter AUS. Einstieg: `/gsd-resume-work`. Resume file: .planning/HANDOFF.json + .planning/.continue-here.md (2026-09-16T10:28Z) -Last activity: 2026-09-16 - Completed quick task 260916-j4f: Nachtraege (Tooltip-Umbruch, Notiz-Farbmodus, Changelog-Stichpunkte); Browser-Pruefung + Push ausstehend +Last activity: 2026-09-16 - Completed quick task 260916-jvj: Plaketten in Kalenderfarbe, Markdown-Aufzaehlungspunkte; Folgeaufgabe Mehrfach-Kreise je Kalender laeuft diff --git a/.planning/quick/260916-jvj-kalender-plaketten-in-kalenderfarbe-stat/260916-jvj-SUMMARY.md b/.planning/quick/260916-jvj-kalender-plaketten-in-kalenderfarbe-stat/260916-jvj-SUMMARY.md new file mode 100644 index 0000000..0ef606a --- /dev/null +++ b/.planning/quick/260916-jvj-kalender-plaketten-in-kalenderfarbe-stat/260916-jvj-SUMMARY.md @@ -0,0 +1,155 @@ +--- +phase: quick-260916-jvj +plan: 01 +subsystem: ui +tags: [react, tailwind, vitest, calendar, markdown] + +requires: + - phase: quick-260916-htc + provides: Kalender-Widget Monatsraster mit Zähl-Plakette und Farbpunkt in „Nächste Termine“ + - phase: quick-260916-j4f + provides: Termin-Tooltip per createPortal (Breite/Klemmung aus TOOLTIP_WIDTH_PX/TOOLTIP_EDGE_PX) +provides: + - Kalender-Plakette im Monatsraster trägt die Kalenderfarbe des frühesten Termins des Tages + - Tooltip-Zeilen mit Farbpunkt in derselben Reihenfolge/Rückfallregel wie „Nächste Termine“ + - groupEventsByDate sortiert jede Tagesgruppe deterministisch nach Startzeit + - Aufzählungspunkte in .wmde-markdown-Ansichten (Was ist neu, Notiz-Vorschau) wieder sichtbar +affects: [dashboard-calendar, changelog-page, note-widget] + +actuals: + tokens: 2855 + tasks: 2 + commits: 2 + +tech-stack: + added: [] + patterns: + - "Klassenstring-Array + .filter(Boolean).join(' ') für bedingte Tailwind-Klassen (bereits durch cellClass etabliert, jetzt auch für die Plakette)" + - "Ungeschichtetes CSS in globals.css zum gezielten Überschreiben von Tailwind-Preflight-Regeln aus @layer base" + +key-files: + created: [] + modified: + - apps/web/src/components/dashboard/widgets/calendar-month.ts + - apps/web/src/components/dashboard/widgets/calendar-month.test.ts + - apps/web/src/components/dashboard/widgets/calendar-widget.tsx + - apps/web/src/components/dashboard/widgets/calendar-widget.test.tsx + - apps/web/src/app/globals.css + - CHANGELOG.md + +key-decisions: + - "Plakettenfarbe = Farbe des frühesten Termins des Tages (Gruppe sortiert nach Start); bei mehreren Kalenderquellen an einem Tag keine Mischfarbe — bewusst einfach gehalten, vom Plan so vorgegeben" + - "groupEventsByDate sortiert jetzt selbst (vorher API-Reihenfolge unsortiert); Sortierung an einer Stelle hält Plakettenfarbe und Tooltip-Reihenfolge konsistent" + - "CSS-Block für .wmde-markdown-Listen bewusst ohne @layer, weil Preflight in @layer base liegt und ungeschichtetes CSS jede @layer-Regel unabhängig von Spezifität schlägt" + +patterns-established: + - "Bedingte Badge-Farbe: style nur setzen wenn event.color vorhanden, sonst kein style-Attribut (Testbarkeit über style.backgroundColor === '')" + +requirements-completed: [QUICK-260916-JVJ] + +coverage: + - id: D1 + description: "Kalender-Plakette im Monatsraster zeigt die Kalenderfarbe des frühesten Termins (weiße Schrift), ohne Farbe unverändert bg-primary" + requirement: "QUICK-260916-JVJ" + verification: + - kind: unit + ref: "apps/web/src/components/dashboard/widgets/calendar-widget.test.tsx#Test 3b: Plakette traegt die Kalenderfarbe des fruehesten Termins, Tooltip-Zeilen mit Farbpunkt" + status: pass + - kind: unit + ref: "apps/web/src/components/dashboard/widgets/calendar-widget.test.tsx#Test 3c: Plakette ohne Kalenderfarbe behaelt bg-primary" + status: pass + human_judgment: false + - id: D2 + description: "Tooltip-Zeilen zeigen einen Farbpunkt je Termin (gleiche Rückfallregel wie die Liste), Reihenfolge nach Startzeit" + requirement: "QUICK-260916-JVJ" + verification: + - kind: unit + ref: "apps/web/src/components/dashboard/widgets/calendar-widget.test.tsx#Test 3b: Plakette traegt die Kalenderfarbe des fruehesten Termins, Tooltip-Zeilen mit Farbpunkt" + status: pass + human_judgment: false + - id: D3 + description: "groupEventsByDate sortiert jede Tagesgruppe nach Startzeit aufsteigend" + requirement: "QUICK-260916-JVJ" + verification: + - kind: unit + ref: "apps/web/src/components/dashboard/widgets/calendar-month.test.ts#Test 2b: groupEventsByDate sortiert jede Tagesgruppe nach Start aufsteigend" + status: pass + human_judgment: false + - id: D4 + description: "Aufzählungspunkte in .wmde-markdown-Ansichten (Was ist neu, Notiz-Vorschau) wieder sichtbar, Aufgabenlisten mit Kästchen bleiben ohne Punkt" + requirement: "QUICK-260916-JVJ" + verification: [] + human_judgment: true + rationale: "CSS-Regeln sind über grep-Gates auf Vorhandensein geprüft, aber die visuelle Wirkung (Punkte sichtbar, Aufgabenlisten ohne Punkt) hat kein automatisiertes Browser-Rendering-Assert in diesem Auftrag — erfordert einen kurzen Blick in den Browser." + - id: D5 + description: "CHANGELOG.md um zwei Stichpunkte ergänzt (Geändert: Plakette, Behoben: Aufzählungspunkte)" + requirement: "QUICK-260916-JVJ" + verification: + - kind: other + ref: "grep -qx -- '- Kalender-Widget: Plakette am Tag in der Farbe des Kalenders' CHANGELOG.md && grep -qx -- '- „Was ist neu“ und Notiz-Ansicht: Aufzählungspunkte wieder sichtbar' CHANGELOG.md" + status: pass + human_judgment: false + +duration: 3min +completed: 2026-09-16 +status: complete +--- + +# Quick 260916-jvj: Kalender-Plaketten in Kalenderfarbe, Aufzählungspunkte in Markdown-Ansichten Summary + +**Kalender-Widget: Tages-Plakette und Tooltip-Zeilen tragen jetzt die Kalenderfarbe des frühesten Termins; Markdown-Listen (Was ist neu, Notiz-Vorschau) zeigen wieder Aufzählungspunkte** + +## Performance + +- **Duration:** 3 min (14:23:30 – 14:26:12) +- **Tasks:** 2/2 +- **Files modified:** 6 + +## Accomplishments +- Zähl-Plakette im Monatsraster des Kalender-Widgets trägt die Farbe des Kalenders des frühesten Termins des Tages (weiße Schrift), ohne Farbe unverändert `bg-primary text-primary-foreground` +- Tooltip-Zeilen beim Überfahren eines Tages zeigen denselben Farbpunkt wie die Liste „Nächste Termine“ (Rückfall `var(--muted-foreground)`), in Startzeit-Reihenfolge +- `groupEventsByDate` sortiert jede Tagesgruppe jetzt selbst nach Start aufsteigend (vorher API-Reihenfolge unsortiert) — eine Stelle, an der Plakettenfarbe und Tooltip-Reihenfolge konsistent bleiben +- Aufzählungspunkte auf „Was ist neu“ und in der Notiz-Vorschau wieder sichtbar (Tailwind-Preflight `list-style: none` in `@layer base` wurde durch markdown.css nicht wiederhergestellt); Aufgabenlisten mit Kästchen bleiben ohne Punkt +- CHANGELOG.md um zwei Stichpunkte ergänzt + +## Task Commits + +Each task was committed atomically: + +1. **Task 1: Kalender-Plakette in Kalenderfarbe, Farbpunkt im Tooltip, Sortierung je Tag + Tests** - `1e4ec30` (feat) +2. **Task 2: Aufzählungspunkte in Markdown-Ansichten (globals.css), CHANGELOG, voller Testlauf** - `c85cf9a` (fix) + +_TDD-Task 1: RED (drei Tests geschrieben, liefen fehlschlagend) → GREEN (Implementierung, alle drei plus Bestand grün) in einem Commit — der Plan verlangte keine separaten RED/GREEN-Commits._ + +## Files Created/Modified +- `apps/web/src/components/dashboard/widgets/calendar-month.ts` - `groupEventsByDate` sortiert jede Tagesgruppe nach Start aufsteigend; Kopf-/Funktionskommentar ergänzt +- `apps/web/src/components/dashboard/widgets/calendar-month.test.ts` - Test 2b (unsortierte Eingabe → Tagesgruppe sortiert) +- `apps/web/src/components/dashboard/widgets/calendar-widget.tsx` - Plakette mit bedingtem `style={{ backgroundColor }}` + `text-white` bei Farbe, sonst `bg-primary text-primary-foreground` ohne style; Tooltip-Zeile mit Farbpunkt (`data-testid="tooltip-color-dot"`); Doc-Kommentar ergänzt +- `apps/web/src/components/dashboard/widgets/calendar-widget.test.tsx` - Test 3b (Farbe des frühesten Termins, Tooltip-Punkte, Reihenfolge) und Test 3c (ohne Farbe bleibt bg-primary) +- `apps/web/src/app/globals.css` - Block `.wmde-markdown`-Listenregeln am Dateiende mit deutschem Kommentar +- `CHANGELOG.md` - zwei neue Stichpunkte unter „Unveröffentlicht“ (Geändert, Behoben) + +## Decisions Made +- Plakettenfarbe = Farbe des frühesten Termins des Tages; bei mehreren Kalenderquellen an einem Tag keine Mischfarbe (bewusst einfach, so im Plan vorgegeben) +- CSS-Block für die Markdown-Listen bewusst ungeschichtet (kein `@layer`), weil Tailwind-Preflight in `@layer base` liegt — ungeschichtetes CSS schlägt jede `@layer`-Regel unabhängig von Spezifität + +## Deviations from Plan + +None - plan executed exactly as written. + +## Issues Encountered +None + +## User Setup Required + +None - no external service configuration required. + +## Next Phase Readiness +- Kein Folgeauftrag angelegt; beide Nachträge aus der heutigen Browser-Prüfung (260916-htc/iex/j4f) sind damit geschlossen +- Optional: kurzer Blick in den Browser auf „Was ist neu“ und die Notiz-Vorschau, um D4 (visuelle Wirkung der CSS-Regeln) zu bestätigen + +--- +*Phase: quick-260916-jvj* +*Completed: 2026-09-16* + +## Self-Check: PASSED