Files
Dashboard/features/dashboard/components/layout/navigation.ts
T
dejanandClaude Opus 5 aa86dfe44d fix(nav,schrift): nur eigene Features in der Leiste, Instrument Sans laden
Zwei Korrekturen aus dem Review.

1. Die Seitenleiste zeigte die komplette Software-Navigation nach. Falsch:
   Kontakte, Leads, Pipelines, Postfach, Termine und Einstellungen stehen dort
   bereits, der Prototyp verdoppelt sie nur. Jetzt stehen in der Leiste
   ausschließlich unsere beiden Features — Dashboard (eigenes Feature, hier
   nicht enthalten) und Analytics — plus die Bausteingalerie im sekundären
   Bereich, die zum Prototyp und nicht zum Produkt gehört.

2. Die Schrift stimmte nicht. Die Software nutzt Instrument Sans, selbst
   gehostet als variable Schrift. Der Prototyp lud Inter über next/font,
   während ui/theme.css für sämtliche Subframe-Typo-Token bereits
   'Instrument Sans' verlangte — die Schrift war aber nie geladen und fiel auf
   die Systemschrift zurück. Ergebnis waren zwei verschiedene Schriften auf
   einer Seite, keine davon die der Software.

   Jetzt liegen dieselben woff2-Dateien unter public/fonts/, mit denselben
   @font-face-Regeln und derselben Alias-Zuordnung für Komponenten, die noch
   direkt auf Inter verweisen. next/font entfällt.

Der Layout-Prüfer lief nach dem Schriftwechsel erneut durch: andere Metrik,
andere Textbreiten — weiterhin keine Kollisionen über 6 Seiten × 7 Breiten.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QPeZNwSeU7qG3RRCwaxEZX
2026-08-29 20:34:35 +02:00

124 lines
3.8 KiB
TypeScript

import type { SeitenId } from "../../data/filtering";
/**
* Navigationsstruktur des Prototyps.
*
* Hier stehen **nur unsere beiden Features**: Dashboard und Analytics. Alles
* andere — Kontakte, Leads, Pipelines, Postfach, Termine, Einstellungen — ist
* in der Seitenleiste der Software bereits vorhanden und wird hier nicht
* verdoppelt. Der Prototyp zeigt, was dazukommt, nicht was schon da ist.
*
* Gerendert wird mit derselben Komponente wie in der Software
* (`ui/components/SidebarWithSections`, aus der Cloud-Fassung portiert), damit
* Aussehen und Verhalten übereinstimmen.
*
* „Dashboard" führt hier nirgendwohin: Es ist ein eigenes Feature und nicht
* Teil dieses Prototyps (siehe `docs/SCOPE-ANALYTICS-DASHBOARD.md`). Der
* Eintrag meldet das beim Klick, statt still zu bleiben.
*/
export type NavZiel = { art: "route"; href: string } | { art: "software" };
export interface NavEintrag {
id: string;
label: string;
/** Icon-Name aus @subframe/core (ohne das Präfix "Feather"). */
icon: string;
ziel: NavZiel;
}
export interface NavGruppe {
id: string;
/** Leerer Titel = Startgruppe ohne Überschrift, wie in der Software. */
titel: string;
eintraege: NavEintrag[];
}
/** Einstieg des Analytics-Bereichs — auch das Ziel der Weiterleitung von „/". */
export const ANALYTICS_START = "/analytics";
export const NAV_GRUPPEN: NavGruppe[] = [
{
id: "start",
titel: "",
eintraege: [
{
// Gehört zu uns, ist aber ein eigenes Feature und nicht Teil dieses
// Prototyps — siehe docs/SCOPE-ANALYTICS-DASHBOARD.md.
id: "dashboard",
label: "Dashboard",
icon: "LayoutDashboard",
ziel: { art: "software" },
},
{
// Der neue Menüpunkt. Die fünf Analyse-Seiten sind ausschließlich hier
// drin über Reiter navigierbar, nicht als Unterpunkte in der Leiste.
id: "analytics",
label: "Analytics",
icon: "BarChart",
ziel: { art: "route", href: ANALYTICS_START },
},
],
},
];
/**
* 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.
*/
export const NAV_SEKUNDAER: NavEintrag[] = [
{
id: "komponenten",
label: "Komponenten",
icon: "Component",
ziel: { art: "route", href: "/komponenten" },
},
];
/**
* Die fünf Analyse-Seiten. Sie erscheinen **nicht** in der Seitenleiste,
* sondern als Reiter innerhalb des Menüpunkts „Analytics" — dem Hausmuster
* für Unter-Navigation in HiveGrid (`SettingsHubShell.tsx`: ein `Link` um ein
* `Tabs.Item`, damit jeder Reiter eine echte Navigation ist).
*/
export interface AnalyseSeite {
id: SeitenId;
label: string;
href: string;
beschreibung: string;
}
export const ANALYSE_SEITEN: AnalyseSeite[] = [
{
id: "uebersicht",
label: "Übersicht",
href: "/analytics",
beschreibung: "Die Kennzahlen, nach denen der Betrieb gesteuert wird — Umsatz, Auslastung, offene Posten und Handlungsbedarf.",
},
{
id: "finanzen",
label: "Finanzen",
href: "/analytics/finanzen",
beschreibung: "Umsatz, Zahlungseingang und offene Forderungen — die Sicht der Buchhaltung auf den Betrieb.",
},
{
id: "auftraege",
label: "Aufträge",
href: "/analytics/auftraege",
beschreibung: "Von der Anfrage bis zur Abnahme — wo die Vorgänge stehen, was gebunden ist und was über Termin läuft.",
},
{
id: "kunden",
label: "Kunden",
href: "/analytics/kunden",
beschreibung: "Woher Kunden kommen, wie viel sie bringen und wo Nachfassen lohnt.",
},
{
id: "team",
label: "Team",
href: "/analytics/team",
beschreibung: "Auslastung, produktive Stunden und Abschlüsse der Monteure — die Kennzahl hinter der Terminplanung.",
},
];