Zum Hauptinhalt springen
Version: latest
Universell einsetzbar

Dialog funktioniert sowohl auf dem Server als auch im Browser. Nutze immer den Standard-Import (z. B. @prokodo/ui/dialog) — die Library erkennt die Umgebung automatisch.

Dialog

Dialog rendert einen modalen Overlay-Dialog mit Focus-Trap, ESC-Close und flexiblen Größen-/Layout-Optionen.


Übersicht

import { Dialog } from "@prokodo/ui/dialog"
;<Dialog open={isOpen} title="Confirm action" onClose={() => setIsOpen(false)}>
<p>Are you sure you want to delete this item?</p>
</Dialog>

Import

import { Dialog } from "@prokodo/ui/dialog"

CSS:

import "@prokodo/ui/dialog.css"

Props

PropTypStandardPflichtBeschreibung
openbooleanSteuert die Sichtbarkeit des Dialogs.
titlestringDialog-Titeltext.
titlePropsHeadlinePropsProps für die Überschrifts-Komponente.
hideTitlebooleanfalseTitel visuell ausblenden (bleibt barrierefrei).
hideCloseButtonbooleanfalseStandard-Schließen-Button ausblenden.
heightnumber | stringFeste Höhe des Dialog-Inhaltsbereichs.
fullScreenbooleanfalseDialog als Vollbild-Overlay rendern.
scroll"paper" | "body""paper""paper" scrollt Inhalt im Dialog; "body" scrollt die Seite.
closeOnBackdropClickbooleantrueDialog beim Klick auf den Hintergrund schließen.
actionsDialogAction[]Aktions-Buttons im Dialog-Footer.
renderHeader() => ReactNodeBenutzerdefinierte Header-Render-Funktion.
contentPropsobjectProps für den Inhalts-Wrapper.
wrapperPropsobjectProps für den äußeren Dialog-Wrapper.
translationsDialogTranslationsStandardbeschriftungen überschreiben (Schließen-Button usw.).
onClose() => voidKlick-Handler des Schließen-Buttons.
onChange(event: unknown, reason: "backdropClick" | "escapeKeyDown", state: boolean) => voidWird bei jeder Zustandsänderung (Öffnen/Schließen) ausgelöst.
refRef<DialogRef>Imperatives Ref für programmatische openDialog/closeDialog-Steuerung.
classNamestringCSS-Klasse am Root-Element.

Siehe src/components/dialog/Dialog.model.ts für den vollständigen DialogProps-Typ.


Design-Tokens

Passe Dialog über CSS Custom Properties auf :root oder einem übergeordneten Element an.

TokenStandardBeschreibung
--pk-dialog-bgvar(--pk-color-surface)Dialog-Hintergrundfarbe
--pk-dialog-fgvar(--pk-color-fg)Dialog-Textfarbe
--pk-dialog-radiusvar(--pk-radius-md)Eckenradius
--pk-dialog-shadowvar(--pk-shadow-lg)Box-Shadow
--pk-dialog-padding-xvar(--pk-space-lg)Horizontaler Innenabstand
--pk-dialog-padding-yvar(--pk-space-xl)Vertikaler Innenabstand
--pk-dialog-header-fgvar(--pk-color-fg)Überschriften-Textfarbe
--pk-dialog-close-fgvar(--pk-palette-grey-500)Schließen-Button-Iconfarbe

--pk-z-modal (1301) und --pk-z-modal-backdrop (1300) sind globale Semantic-Tokens, die das Z-Index-Layering des Dialogs steuern und auf :root überschrieben werden können.

AIC-Hinweis

Verwende im Anwendungscode immer den Standard-Importpfad:

import { Dialog } from "@prokodo/ui/dialog"

Eine separate Auswahl von /client oder /lazy ist im Consumer-Code nicht erforderlich.

AIC-Komponenten unterstützen außerdem ein priority-Flag für kritische Above-the-fold-Elemente. Am sichtbarsten ist das bei Image (natives Preloading via <link rel="preload"> für Above-the-fold-Inhalte).


WCAG-2.2-Status

KriteriumBezeichnungStatusHinweis
1.3.1Info und Beziehungen (A)✅ ErfülltSemantische Struktur (Überschriften, Listen, Labels, Landmarks) muss programmatisch via HTML oder ARIA vermittelt werden.
2.1.1Tastatur (A)✅ ErfülltAlle Funktionalität muss allein über Tastatur bedienbar sein, ohne Timing-Anforderungen.
2.1.2Keine Tastaturfalle (A)🔍 Manuell prüfenDer Tastaturfokus darf niemals innerhalb einer Komponente eingeschlossen sein; Nutzer müssen immer mit Standardtasten navigieren können.
2.4.3Fokusreihenfolge (A)🔍 Manuell prüfenDie Tastaturfokus-Reihenfolge muss im vollständigen seitenseitigen Integrationskontext Bedeutung und Bedienbarkeit erhalten.
2.4.7Fokus sichtbar (AA)🔍 Manuell prüfenAuf jedem interaktiven Element muss ein sichtbarer Tastaturfokus-Indikator vorhanden sein. Prüfung gegen das angewendete Produkt-Theme erforderlich.
2.4.11Fokus nicht verdeckt (Min.) (AA)🔍 Manuell prüfenDie fokussierte Komponente darf nicht vollständig durch Sticky-Header, Overlays oder andere positionierte Seitenelemente verdeckt sein.
4.1.2Name, Rolle, Wert (A)✅ ErfülltName, Rolle und Zustand aller interaktiven UI-Komponenten müssen via nativer HTML-Semantik oder ARIA programmatisch bestimmbar sein.
4.1.3Statusmeldungen (AA)🔍 Manuell prüfenStatusmeldungen (Laden, Erfolg, Fehler, Fortschritt) müssen assistiven Technologien ohne Fokusverschiebung mitgeteilt werden (aria-live oder role='status').

Testabdeckung: 1 jest-axe-Assertion(s) in 4 Testdatei(en) · 7 ARIA-Attribut-Vorkommen im Quellcode-Scan. Kriterien mit 🔍 erfordern manuelle Prüfung im finalen Integrations- und Theme-Kontext.

Storybook

👉 Dialog in Storybook öffnen


Quellcode

src/components/dialog/Dialog.model.ts