Initial commit

This commit is contained in:
2026-07-19 13:09:04 +02:00
commit 8cf57d7878
215 changed files with 30417 additions and 0 deletions

114
docs/design-system.md Normal file
View File

@@ -0,0 +1,114 @@
# Designsystem
Das Frontend verwendet ein eigenes, schlankes Designsystem ohne externe
UI-Library. Es besteht aus zentralen CSS Custom Properties, globalen
Grundklassen und wenigen Angular-UI-Komponenten unter
`apps/frontend/src/app/shared/ui`.
## Prinzipien
- sachliche Business-Oberflaeche statt Marketing-Optik
- mobile first, keine globale Mindestbreite
- klare Hierarchie durch Typografie, Abstand und Rahmen
- Farben immer semantisch ueber Tokens
- sichtbare Fokuszustaende und grosse Touch-Flaechen
- Komponenten nur dort, wo sie Verhalten oder Wiederverwendung bringen
## Tokens
Die Tokens liegen in `apps/frontend/src/styles/_tokens.scss` und werden ueber
`apps/frontend/src/styles.scss` eingebunden.
Wichtige Gruppen:
- Farben: `--color-primary`, `--color-danger`, `--color-surface`,
`--color-text-primary`, `--color-border`, `--color-focus`
- Abstaende: `--space-1` bis `--space-9`
- Typografie: `--font-size-xs` bis `--font-size-2xl`, `--line-height-*`,
`--font-weight-*`
- Layout: `--container-width`, `--sidebar-width`, `--header-height`,
`--touch-target`, `--input-height`, `--button-height`
- Oberflaeche: `--radius-*`, `--shadow-*`, `--z-*`, `--transition-*`
Feature-Komponenten duerfen keine direkten Hex-Farben enthalten. Neue Farben
werden zuerst als semantische Tokens angelegt.
## Globale Klassen
Globale Klassen sind bewusst begrenzt:
- Layout: `.ui-page`, `.ui-page-header`, `.ui-grid`, `.ui-card`,
`.ui-toolbar`, `.ui-actions`
- Formulare: `.ui-form`, `.ui-form-field`, `.ui-control`, `.ui-checkbox`,
`.ui-field-error`
- Buttons: `.ui-button`, `.ui-icon-button`
- Tabellen: `.ui-table-wrap`, `.ui-table`
- Status: `.ui-badge`, `.ui-badge--success`, `.ui-badge--warning`,
`.ui-badge--danger`, `.ui-badge--info`
- Utilities: `.visually-hidden`, `.truncate`, `.stack`, `.cluster`,
`.full-width`, `.text-muted`
Keine neuen Utility-Klassen einfuehren, wenn eine lokale Klasse oder bestehende
UI-Komponente ausreicht.
## Angular-Komponenten
Wiederverwendbare UI-Bausteine:
- `UiButtonComponent`
- `UiIconComponent`
- `UiIconButtonComponent`
- `UiFormFieldComponent`
- `UiStatusBadgeComponent`
- `UiConfirmDialogComponent`
- `ToastService` und `UiToastHostComponent`
- `UiEmptyStateComponent`
- `UiLoadingStateComponent`
- `UiPaginationComponent`
- `UiPageHeaderComponent`
Neue Feature-Seiten sollen diese Bausteine bevorzugen, wenn sie Button-, Badge-,
Dialog-, Toast-, Empty-, Loading- oder Pagination-Verhalten brauchen.
## Responsive Regeln
- Mobile Layouts sind einspaltig.
- Aktionen duerfen mobil untereinander stehen und volle Breite nutzen.
- Business-Listen werden mobil als Karten dargestellt.
- Tabellen liegen in `.ui-table-wrap`, wenn eine echte Tabelle sinnvoll bleibt.
- Touch-Ziele orientieren sich an `--touch-target`.
- Breakpoints werden in rem formuliert und nicht nach Geraetetyp benannt.
## Accessibility
- native HTML-Elemente vor ARIA verwenden
- interaktive Elemente sind Buttons oder Links
- sichtbare Fokuszustaende nicht entfernen
- Labels ersetzen Placeholder nicht
- Fehlertexte stehen direkt am Feld
- Status ist nicht nur Farbe, sondern auch Text/Marker
- Dialoge setzen Fokus, schliessen per Escape und geben Fokus zurueck
- Navigation und Drawer sind per Tastatur bedienbar
- Animationen respektieren `prefers-reduced-motion`
## Entwicklungsseite
Die interne Referenzseite liegt unter:
```text
/dev/design-system
```
Sie ist mit `devOnlyGuard` geschuetzt und im Production-Modus nicht matchbar.
Sie ersetzt kein Storybook, sondern zeigt die vorhandenen Tokens und Komponenten
innerhalb der echten Anwendung.
## Regeln fuer neue UI
1. Bestehende UI-Komponenten oder globale Klassen wiederverwenden.
2. Keine direkte Hex-Farbe in Feature-Komponenten.
3. Keine neue UI-Library einfuehren.
4. Keine tiefen Selektoren, kein `::ng-deep`, kein unkontrolliertes
`!important`.
5. Keine klickbaren `div`-Elemente als Ersatz fuer Buttons oder Links.
6. Verhalten mit Vitest testen, insbesondere Accessibility-relevante Zustaende.