Files
AfiS-Aktensystem/web/components/Skeleton.tsx
T
HarlekinandClaude Opus 5 6b0cd331bb Web-Anwendung: Design-Tokens, Texte, Gesundheitsendpunkt
Design-Tokens aus docs/10-design-system.md als CSS-Variablen: Grundpalette,
die sechs Klassifizierungsfarben, Eckenradius durchgehend 2 px, keine Schatten
ausser dem Fokusring. Der Schwärzungsbalken mit dem einmaligen Durchwischen
respektiert prefers-reduced-motion. Vier Tests halten die Tokens gegen das
Dokument.

IBM Plex selbst gehostet als woff2, latin und latin-ext getrennt über
unicode-range, font-display: swap, immutable-Cache.

Alle Oberflächentexte in lib/i18n/de.ts. Ein Test durchsucht app/ und
components/ nach Umlauten im JSX und schlägt fehl, wenn dort deutscher Text
steht. Er hat beim ersten Lauf gleich einen Verstoss gefunden.

/api/health prüft Datenbank, Discord-Gateway und ClamAV. Die Gesamtbewertung
fällt nur auf "down", wenn die Datenbank weg ist: die anderen Dienste haben
eigene Healthchecks im Stack, und ein ausgefallener Virenscanner soll nicht
den Web-Container als tot markieren.

Strikte CSP mit Nonce, kein unsafe-inline für Skripte. Die erste Route liegt
bei 100 kB JavaScript nach Kompression, Budget sind 120 kB.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-01 00:01:41 +02:00

25 lines
652 B
TypeScript

/**
* Platzhalterflaeche fuer Ladezustaende. Das Skelett bildet die spaetere
* Struktur exakt nach (gleiche Hoehen, gleiche Spaltenbreiten), damit beim
* Eintreffen der Daten nichts springt. Siehe docs/09-performance-und-ux.md.
*/
export function Skeleton({
className = '',
width,
}: {
className?: string
width?: string | number
}) {
return (
<span
aria-hidden
className={`block bg-raised ${className}`}
style={width === undefined ? undefined : { width }}
/>
)
}
export function SkeletonLine({ width = '100%' }: { width?: string | number }) {
return <Skeleton className="h-[0.9rem] my-2" width={width} />
}