""" Öffentlicher Widget-Katalog (Dashboard-Lab / später Produkt-Dashboard). Single Source für: erlaubte IDs, Standard-Reihenfolge, Anzeige-Metadaten für API/GUI. Frontend-Komponenten registrieren dieselben IDs lokal (siehe widgetSystem/registerPilotLabWidgets). """ from __future__ import annotations from typing import Any, TypedDict class WidgetCatalogEntry(TypedDict): id: str title: str description: str # Reihenfolge in der Liste = Standard-Layout (alle default_enabled: True im Default-Layout) WIDGET_CATALOG: list[WidgetCatalogEntry] = [ { "id": "welcome", "title": "Willkommen", "description": "Begrüßung und Kurzkontext", }, { "id": "quick_capture", "title": "Schnelleingabe", "description": "Gewicht und Vitalwerte erfassen", }, { "id": "kpi_board", "title": "KPI-Kacheln", "description": "Referenzwerte, KF%, Kalorien", }, { "id": "body_overview", "title": "Körper (Chart)", "description": "Gewicht & Kennzahlen (optional: config chart_days 7–90)", }, { "id": "activity_overview", "title": "Aktivität", "description": "Training & Konsistenz", }, ] ALLOWED_WIDGET_IDS: frozenset[str] = frozenset(e["id"] for e in WIDGET_CATALOG) def catalog_response() -> dict[str, Any]: """Payload für GET /api/app/widgets/catalog.""" return { "catalog_version": 1, "widgets": list(WIDGET_CATALOG), }