From 885c7b96092fc8d2c348c815a86b9902dbda9521 Mon Sep 17 00:00:00 2001 From: DeeCee03 Date: Mon, 31 Aug 2026 18:07:50 +0200 Subject: [PATCH] Komponentenseite auf ihren tatsaechlichen Zweck schaerfen MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sie war als "Referenz fuer den Einbau" ausgeschildert. Das trifft es nicht: Wer den Prototyp einbaut, liest Code und Doku und kann sich keine gerenderte Seite ansehen — die Datei-Pfade und DESIGN-SYSTEM.md tun diese Arbeit ohnehin. Nuetzlich ist die Seite fuer die Abstimmung mit Menschen: Auf den Analyse-Seiten sieht man von jedem Baustein immer nur den Zustand, den die Daten gerade hergeben. Neu ausgeschildert, und die fehlenden Zustaende ergaenzt: - Seitenzustaende (laedt / leer / Fehler). In HiveGrid sind alle fuenf VMState-Zustaende Pflicht, im Prototyp ist keiner davon je zu sehen, weil die Demo-Daten immer liefern. Gestaltet werden muessen sie trotzdem — "laedt", "nichts gefunden" und "kaputt" sind drei verschiedene Aussagen. - Dashboard-Kacheln: Begruessung, WidgetKachel, reservierte Kachel. Das Dashboard benutzt nicht ChartCard, sondern einen eigenen Rahmen; bisher war der in der Galerie gar nicht vertreten. Zwei Fehler dabei gefunden und behoben: - Die Regelliste nannte noch den dunklen Tooltip (#393939). Seit Carbon v11 ist er hell (#ffffff auf #161616); im Code war das laengst umgestellt, auf dieser Seite nicht. Eine Referenzseite, die eine ueberholte Regel behauptet, ist schlimmer als keine. - Die Abschnittstexte beginnen mit einem Dateipfad, und ein Pfad ist ein Wort ohne Trennstelle. Bei 375 px lief "features/dashboard/components/layout/SeitenZustand.tsx" neun Pixel ueber den Rand — von verify:layout gefunden. Die Regel zu den Kartenhoehen aus dem letzten Commit steht jetzt auch hier. Co-Authored-By: Claude Opus 5 (1M context) Claude-Session: https://claude.ai/code/session_01QPeZNwSeU7qG3RRCwaxEZX --- .../dashboard/components/layout/navigation.ts | 11 +- features/dashboard/pages/KomponentenSeite.tsx | 102 +++++++++++++++++- 2 files changed, 107 insertions(+), 6 deletions(-) diff --git a/features/dashboard/components/layout/navigation.ts b/features/dashboard/components/layout/navigation.ts index 0138f72..4a7f516 100644 --- a/features/dashboard/components/layout/navigation.ts +++ b/features/dashboard/components/layout/navigation.ts @@ -67,8 +67,15 @@ export const NAV_GRUPPEN: NavGruppe[] = [ /** * Unterer Bereich, durch einen Trenner abgesetzt — wie in der Software. - * Hier steht nur, was zum Prototyp gehört: die Bausteingalerie für die - * Entwicklung. Sie ist kein Produktfeature und wandert beim Einbau nicht mit. + * + * Hier steht nur, was zum Prototyp gehört: die Bausteingalerie. Sie ist für + * die **Abstimmung** da, nicht für die Umsetzung — sie zeigt jeden Baustein in + * allen Zuständen, auch in denen, die die Demo-Daten nie erzeugen (negativer + * Trend, leer, Fehler, „kleiner ist besser"). Wer den Prototyp einbaut, + * braucht sie nicht: Dafür sind die Datei-Pfade und `docs/DESIGN-SYSTEM.md` + * maßgeblich. + * + * Kein Produktfeature, wandert beim Einbau nicht mit. */ export const NAV_SEKUNDAER: NavEintrag[] = [ { diff --git a/features/dashboard/pages/KomponentenSeite.tsx b/features/dashboard/pages/KomponentenSeite.tsx index 290c3cb..8ad7be0 100644 --- a/features/dashboard/pages/KomponentenSeite.tsx +++ b/features/dashboard/pages/KomponentenSeite.tsx @@ -16,6 +16,11 @@ import { AuslastungsBalken } from "../components/charts/AuslastungsBalken"; import { ChartLeer } from "../components/charts/ChartLeer"; import { ChartLegende } from "../components/charts/ChartLegende"; import { AuftragBadge, RechnungBadge } from "../components/tables/StatusBadge"; +import { SeitenZustand } from "../components/layout/SeitenZustand"; +import { WidgetKachel } from "../components/dashboard/WidgetKachel"; +import { ReservierteKachel } from "../components/dashboard/ReservierteKachel"; +import { Begruessung } from "../components/dashboard/Begruessung"; +import type { VMState } from "../view-models"; import { KATEGORIE_FARBEN, MAX_KATEGORIEN, @@ -54,14 +59,15 @@ export function KomponentenSeite() { <> + + +
+ {([ + ["Lädt", { status: "loading" } as VMState], + ["Leer — Filter schneiden alles weg", { status: "empty" } as VMState], + [ + "Fehler", + { + status: "error", + error: { messageKey: "Zeitüberschreitung beim Laden der Kennzahlen" }, + } as VMState, + ], + ] as const).map(([titel, vm]) => ( +
+ {titel} + {/* -mx-4: SeitenZustand bringt seinen eigenen Seitenrand mit, weil + er im Normalfall die ganze Seite füllt. Hier steht er in einer + Rasterspalte und braucht ihn nicht. + + Ohne zusätzlichen Rahmen: Die Komponente hat bereits eine + gestrichelte Kante. Ein Kasten darum wäre ein zweiter Rahmen + und zeigte den Baustein anders, als er in der Anwendung + aussieht. */} +
+ +
+
+ ))} +
+ + + {/* Wie bei den Seitenzuständen: Die Begrüßung trägt ihren eigenen + Seitenrand, weil sie im Dashboard direkt auf der Seite steht. In der + Galerie liegt sie schon im Innenabstand des Containers und wäre + sonst doppelt eingerückt. */} +
+ +
+
+ + + + + +
+ + (
  • @@ -338,7 +426,13 @@ function Abschnitt({ titel, text }: { titel: string; text: string }) { return (

    {titel}

    -

    {text}

    + {/* break-words: Diese Absätze beginnen mit einem Dateipfad, und ein Pfad + ist ein einziges Wort ohne Trennstelle. Bei 375 px lief + "features/dashboard/components/layout/SeitenZustand.tsx" neun Pixel + über den Rand. */} +

    + {text} +

    ); }