Zum Hauptinhalt springen
Version: latest
Universell einsetzbar

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

Sidenav

Sidenav rendert eine vertical navigation panel. Unterstützt nested sections, icon labels, collapsible groups, and automatic active-item highlighting based on the current URL.


Übersicht

import { Sidenav } from "@prokodo/ui/sidenav"
;<Sidenav
items={[
{ label: "Home", href: "/", icon: "home" },
{
label: "Products",
icon: "box",
children: [
{ label: "All products", href: "/products" },
{ label: "Categories", href: "/products/categories" },
],
},
]}
/>

Import

import { Sidenav } from "@prokodo/ui/sidenav"

CSS:

import "@prokodo/ui/sidenav.css"

Props

PropTypStandardPflichtBeschreibung
itemsSideNavItem[]Einfache Liste von Navigationseinträgen. Wird ignoriert, wenn sections gesetzt ist.
sectionsSideNavSection[]Navigation in benannte Abschnitte unterteilt. Hat Vorrang vor items.
headlinePropsOmit<HeadlineProps, "children">Standard-Props für die Headline-Komponente jedes Abschnitts. Abschnitts-headlineProps haben Vorrang.
descriptionPropsOmit<HTMLAttributes<p>, "children">Standard-Props für das Beschreibungs-<p> jedes Abschnitts. Abschnitts-descriptionProps haben Vorrang.
collapsedbooleanfalseKlappt die Navigation auf Icon-Only-Modus zusammen.
onCollapse(collapsed: boolean) => voidWird beim Umschalten des Collapse-Zustands aufgerufen.
classNamestringCSS-Klasse am Root-<aside>-Element.

SideNavSection

PropTypStandardPflichtBeschreibung
itemsSideNavItem[]Navigationseinträge dieses Abschnitts.
headlinestringKlartext-Überschrift des Abschnitts, gerendert via der internen Headline-Komponente (im Collapsed-Modus versteckt).
descriptionstringKurzbeschreibung unterhalb der Überschrift.
headlineComponentComponentType<{ className?: string }>Benutzerdefinierte React-Komponente statt headline-String.
headlinePropsOmit<HeadlineProps, "children">Props für die Headline-Komponente dieses Abschnitts (überschreibt globale headlineProps).
descriptionPropsOmit<HTMLAttributes<p>, "children">Props für das Beschreibungs-<p> dieses Abschnitts (überschreibt globale descriptionProps).

Siehe src/components/sidenav/Sidenav.model.ts für den vollständigen SidenavProps-Typ.


AIC-Hinweis

Verwende im Anwendungscode immer den Standard-Importpfad:

import { Sidenav } from "@prokodo/ui/sidenav"

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)🔍 Manuell prüfenAlle Funktionalität muss allein über Tastatur bedienbar sein, ohne Timing-Anforderungen.
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.

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


Design Tokens

Sidenav lässt sich über CSS Custom Properties an :root oder einem umgebenden Element anpassen.

TokenStandardwertBeschreibung
--pk-sidenav-bgvar(--pk-color-surface)Hintergrundfarbe des Seitenleisten-Panels
--pk-sidenav-shadowvar(--pk-shadow-md)Box-Shadow des Seitenleisten-Panels
--pk-sidenav-toggle-hovervar(--pk-color-surface-raised)Hintergrundfarbe des Toggle-Buttons bei Hover
--pk-sidenav-link-hover-bgcolor-mix(in srgb, var(--pk-color-brand) 10%, transparent)Hintergrundfarbe der Nav-Einträge bei Hover/Aktiv
--pk-sidenav-link-active-bgcolor-mix(in srgb, var(--pk-color-brand) 5%, transparent)Hintergrundfarbe des aktuellen Seiten-Nav-Eintrags
--pk-sidenav-icon-colorvar(--pk-color-fg)Icon-Vordergrundfarbe
--pk-sidenav-icon-bgvar(--pk-color-surface-raised)Hintergrundfarbe des Icon-Wrappers
--pk-sidenav-label-colorcolor-mix(in srgb, var(--pk-color-fg) 70%, transparent)Farbe von Collapse-Icon und -Label
--pk-sidenav-fgvar(--pk-color-fg)Hauptfarbe der Nav-Eintrags-Labels
--pk-sidenav-radiusvar(--pk-radius-sm)Border-Radius für Nav-Einträge und Icon-Wrapper
--pk-sidenav-gapvar(--pk-space-xs)Abstand zwischen den Nav-Listen-Einträgen
--pk-sidenav-link-gapvar(--pk-space-md)Interner Abstand innerhalb eines Nav-Eintrags
--pk-sidenav-section-headline-colorcolor-mix(in srgb, var(--pk-color-fg) 45%, transparent)Farbe der Abschnitts-Überschriften

Storybook

👉 Sidenav in Storybook öffnen


Quellcode

src/components/sidenav/Sidenav.model.ts