KERN-UX Design System als Blazor Component Library – typsichere, barrierefreie Komponenten für die deutsche Verwaltung (WCAG 2.1 AA).
- Was ist PublicKernBlazor.Components?
- Voraussetzungen
- Installation
- Schnellstart
- CSS-Assets einbinden
- Theming (Light / Dark)
- Komponenten-Übersicht
- Barrierefreiheit
- Erweiterungen gegenüber KERN-UX
- Projektstruktur
- Entwicklung & Tests
- Beitragen
- Changelog
- Lizenz
PublicKernBlazor.Components übersetzt das offizielle KERN-UX Design System in
eine Razor Class Library. Entwicklerinnen und Entwickler können alle KERN-Komponenten
direkt als Blazor-Komponenten verwenden – ohne KERN-CSS-Klassen manuell kennen zu müssen.
Kern-Vorteile:
- ✅ Alle 48 KERN-UX-Komponenten als typsichere Blazor-Komponenten
- ✅ KERN-CSS als statische Assets (
_content/PublicKernBlazor.Components/css/) inklusive - ✅ WCAG 2.1 AA – ARIA-Attribute, semantisches HTML, Fokus-Management
- ✅ Light- und Dark-Theme out-of-the-box
- ✅ Kein JavaScript außer dem technisch unvermeidbaren Minimum
- ✅ Vollständige XML-Dokumentation für IntelliSense
| Anforderung | Version |
|---|---|
| .NET | 10.0 |
| Blazor Server oder WebAssembly | 10.0 |
dotnet add package PublicKernBlazor.Componentsusing PublicKernBlazor.Components.Extensions;
builder.Services.AddKernUx();AddKernUx() registriert:
ThemeService(Scoped) – Theme-Verwaltung (Light/Dark)IdGeneratorService(Scoped) – eindeutige IDs füraria-describedby
@using PublicKernBlazor.Components.Components.Content
@using PublicKernBlazor.Components.Components.Feedback
@using PublicKernBlazor.Components.Components.Forms
@using PublicKernBlazor.Components.Components.Layout
@using PublicKernBlazor.Components.Components.Navigation
@using PublicKernBlazor.Components.Components.Shared
@using PublicKernBlazor.Components.Components.Typography
@using PublicKernBlazor.Components.Enums
@using PublicKernBlazor.Components.Services@* App.razor oder MainLayout.razor *@
<KernStyles />Die Komponente rendert automatisch alle notwendigen <link>-Elemente.
<link rel="stylesheet" href="_content/PublicKernBlazor.Components/css/themes/kern/index.css"/><script src="_content/PublicKernBlazor.Components/js/kern-dialog.js"></script><KernThemeProvider Theme="KernTheme.Light">
<Router AppAssembly="typeof(App).Assembly">
<Found Context="routeData">
<RouteView RouteData="routeData" />
</Found>
</Router>
</KernThemeProvider>@inject ThemeService ThemeService
<KernButton OnClick="ThemeService.Toggle">Theme wechseln</KernButton>Das Theme wird über das Attribut data-kern-theme="light|dark" am Wrapper-Element gesteuert
und im Cookie kern-theme persistiert.
| Komponente | Beschreibung | Wichtigste Parameter |
|---|---|---|
KernContainer |
Inhalts-Container mit optionalem Fluid-Modus | Fluid |
KernRow |
Grid-Zeile | AlignItems, JustifyContent |
KernCol |
Grid-Spalte | Span, SpanSm–SpanXxl, Offset |
KernThemeProvider |
Theme-Root-Wrapper | Theme |
| Komponente | Beschreibung | Wichtigste Parameter |
|---|---|---|
KernHeading |
Überschrift (Display–Small) | Level, Element |
KernTitle |
Seiten-/Abschnittstitel | Size |
KernBody |
Fließtext | Bold, Muted, Size |
KernLabel |
Formular-Label | For, Optional |
KernSubline |
Unterzeile | Size |
KernPreline |
Vortext | Size |
| Komponente | Beschreibung | Wichtigste Parameter |
|---|---|---|
KernIcon |
Symbolschrift-Icon | Glyph, Size, AriaHidden, AriaLabel |
KernDivider |
Horizontale Trennlinie | AriaHidden |
KernStyles |
CSS-Link-Einbindung | – |
KernLink |
Anker-Link | Href, Stretched, Target |
KernList |
Listen (Bullet/Nummeriert) | Variant, Size |
| Komponente | Beschreibung | Wichtigste Parameter |
|---|---|---|
KernKopfzeile |
Bundesbehörden-Kopfzeile | Label, Fluid |
| Komponente | Beschreibung | Wichtigste Parameter |
|---|---|---|
KernButton |
Aktions-Schaltfläche | Variant, Icon, IconOnly, Block, Disabled |
KernInputText |
Text-Eingabe | Label, Value, Hint, Error, Optional |
KernInputEmail |
E-Mail-Eingabe | Label, Value, Autocomplete |
KernInputPassword |
Passwort-Eingabe | Label, Value |
KernInputTel |
Telefon-Eingabe | Label, Value, Autocomplete |
KernInputUrl |
URL-Eingabe | Label, Value |
KernInputNumber |
Numerische Eingabe | Label, Value |
KernInputDate |
Datum (TT/MM/JJJJ) | Label, Day, Month, Year |
KernInputFile |
Datei-Upload | Label, Accept, OnFileSelected |
KernInputCurrency |
Währungsbetrag (DACH) | Label, Value, CurrencySymbol, CultureName |
KernTextarea |
Mehrzeiliger Text | Label, Value, Rows |
KernSelect |
Auswahlmenü | Label, Value, Options |
KernCheckbox |
Einzelne Checkbox | Label, Checked |
KernCheckboxList |
Checkbox-Gruppe | Legend, Items, SelectedValues |
KernRadioGroup |
Radio-Button-Gruppe | Legend, Items, Value |
KernFieldset |
Formular-Gruppe | Legend, Hint, Error, Horizontal |
| Komponente | Beschreibung | Wichtigste Parameter |
|---|---|---|
KernAlert |
Hinweis-/Fehlermeldung | Type, Title |
KernBadge |
Status-Kennzeichnung | Variant |
KernLoader |
Ladeindikator | Visible, ScreenReaderText |
KernProgress |
Fortschrittsanzeige | Value, Max, Label |
| Komponente | Beschreibung | Wichtigste Parameter |
|---|---|---|
KernAccordion |
Auf-/Zuklappbarer Bereich | Title, Open, OnToggle |
KernAccordionGroup |
Accordion-Container | – |
KernCard |
Inhalts-Karte | Size, Active |
KernCardMedia |
Karten-Bild | – |
KernCardContainer |
Karten-Inhalt-Wrapper | – |
KernDialog |
Modaler Dialog | Title, Open, OnClose |
KernTable |
Datentabelle | Caption, Small, Striped, Responsive |
KernDescriptionList |
Beschreibungsliste | Column, Items |
KernSummary |
Zusammenfassungs-Block | Title, EditHref, Number |
KernSummaryGroup |
Summary-Gruppen-Container | – |
KernTaskList |
Aufgaben-/Schritt-Liste | – |
KernTaskListItem |
Einzelner Aufgaben-Schritt | Title, Number, Href, StatusContent |
KernTaskListGroup |
Aufgaben-Gruppen-Container | Title |
PublicKernBlazor.Components implementiert WCAG 2.1 AA:
| Anforderung | Umsetzung |
|---|---|
| Semantisches HTML | <button>, <fieldset>, <legend>, <dialog>, <caption> |
| ARIA-Attribute | aria-describedby, aria-expanded, aria-hidden, aria-label, role="alert" |
| Eindeutige IDs | IdGeneratorService generiert kollisionsfreie IDs pro Instanz |
| Fokus-Management | KERN-Fokus-Styles werden nie unterdrückt |
| Tastatur-Navigation | Alle interaktiven Elemente sind per Tastatur bedienbar |
| Kontrast | KERN-Theme erfüllt WCAG 2.1 AA Kontrastanforderungen |
Folgende Komponenten sind Blazor-Library-Erweiterungen und nicht Teil des offiziellen KERN-UX-Standards:
| Komponente | Beschreibung |
|---|---|
KernInputCurrency |
Währungseingabe optimiert für DACH (de-DE/de-CH), mit decimal?-Binding |
Die zugehörigen SCSS-Erweiterungen liegen in Styles/extensions/ und werden bei KERN-UX-Updates
nicht überschrieben. Siehe Styles/extensions/README.md.
PublicKernBlazor.Components/ ← Repository-Root
├── src/
│ ├── PublicKernBlazor.Components/ ← Razor Class Library (NuGet-Paket)
│ │ ├── Components/
│ │ │ ├── Content/ # Accordion, Card, Dialog, Table, Summary, TaskList
│ │ │ ├── Feedback/ # Alert, Badge, Loader, Progress
│ │ │ ├── Forms/ # Button, alle Input-Typen, Select, Checkbox, Radio, Fieldset
│ │ │ ├── Layout/ # Container, Row, Col, ThemeProvider
│ │ │ ├── Navigation/ # Kopfzeile, Link, List
│ │ │ ├── Shared/ # Icon, Divider, KernStyles
│ │ │ └── Typography/ # Heading, Title, Body, Label, Subline, Preline
│ │ ├── Enums/ # Typsichere Enums für alle Parameter
│ │ ├── Extensions/ # AddKernUx() DI-Erweiterung
│ │ ├── Services/ # ThemeService, IdGeneratorService
│ │ ├── Styles/
│ │ │ ├── core/ # KERN-UX SCSS (nicht bearbeiten – wird bei Updates überschrieben)
│ │ │ ├── extensions/ # Projekt-spezifische SCSS-Ergänzungen (update-sicher)
│ │ │ └── themes/kern/ # KERN-Theme Entry Point
│ │ ├── Utilities/ # CssBuilder, EnumCssExtensions
│ │ └── wwwroot/
│ │ ├── css/ # Kompilierte CSS-Dateien
│ │ └── js/ # kern-dialog.js
│ └── PublicKernBlazor.Demo/ ← Interaktive Showcase-App
├── tests/
│ ├── PublicKernBlazor.Components.Tests/ ← bUnit-Unit-Tests (Rendering, Interaktion, Accessibility)
│ └── PublicKernBlazor.Demo.SmokeTests/ ← Playwright-Smoke-Tests
├── docs/
│ ├── contributing/ # Entwickler-Dokumentation
│ └── internal/ # Interne Planungsdokumente
├── scripts/ # PowerShell-Hilfsskripte
└── .github/
├── workflows/ # CI- und Release-Workflows
├── ISSUE_TEMPLATE/ # Strukturierte Issue-Formulare
└── PULL_REQUEST_TEMPLATE.md
dotnet test tests/PublicKernBlazor.Components.Tests/PublicKernBlazor.Components.Tests.csprojDas Testprojekt enthält:
- Rendering-Tests – alle Komponenten werden auf korrekte HTML-Ausgabe geprüft
- Interaktions-Tests – EventCallbacks, State-Änderungen
- Accessibility-Audit-Tests – ARIA-Attribute, semantisches HTML
dotnet pack src/PublicKernBlazor.Components/PublicKernBlazor.Components.csproj --configuration ReleaseSCSS wird beim Build automatisch via AspNetCore.SassCompiler nach wwwroot/css/ kompiliert.
Neue Stile gehören nach Styles/extensions/components/ und müssen in
Styles/extensions/index.scss per @use registriert werden.
Niemals Styles/core/ direkt bearbeiten.
Ausführliche Anleitung: docs/contributing/development-setup.md
Contributions sind willkommen! Bitte lies zuerst CONTRIBUTING.md.
- 🐛 Bug melden: Bug-Report-Vorlage
- ✨ Feature vorschlagen: Feature-Request-Vorlage
- 🛡️ Sicherheitslücke melden: Bitte vertraulich über SECURITY.md
Alle Änderungen sind in CHANGELOG.md dokumentiert.
MIT – siehe LICENSE.
KERN-UX ist ein offener UX-Standard für die deutsche Verwaltung. Mehr Infos: kern-ux.de | GitLab