Zum Hauptinhalt springen
Version: latest
Universell einsetzbar

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

Button

Die Button-Komponente is the core interactive element in @prokodo/ui. It unterstützt text labels, icon-only mode, loading states, full-width layout, and seamless redirect (SSR-safe link conversion).


Übersicht

import { Button } from "@prokodo/ui/button"
;<Button
title="Click Me"
color="primary"
variant="contained"
onClick={handleClick}
/>

Import

import { Button } from "@prokodo/ui/button"

CSS (import once at app root):

import "@prokodo/ui/button.css"

Props

ButtonProps is a discriminated union of ButtonDefaultProps (labeled button) and ButtonIconProps (icon-only button).

ButtonDefaultProps

PropTypStandardPflichtBeschreibung
titlestringButton label text (also used as fallback aria-label).
variant"contained" | "outlined" | "text""contained"Visual style variant.
color"primary" | "secondary" | "success" | "error" | "info" | "warning" | "inherit""inherit"Semantic color token.
prioritybooleanfalseEmphasize the button (higher visual weight).
fullWidthbooleanfalseStretch button to 100% of parent width.
loadingbooleanfalseShow loading spinner and disable interaction.
disabledbooleanfalseDeaktiviere all interaction.
iconPropsIconPropsIcon to display left of (or alongside) the label.
redirectLinkPropsConvert button into an SSR-safe link.
aria-labelstringtitleOverride accessible label.
refButtonRefRef to the underlying <button> element.
contentClassNamestringCSS class on the inner content wrapper.
classNamestringCSS-Klasse am Root-Element.
onClickMouseEventHandlerClick handler.
imageImagePropsBackground image (alternative to icon).

ButtonIconProps

Icon-only variant. Requires either aria-label (interactive) or inert (decorative).

PropTypStandardPflichtBeschreibung
iconPropsIconPropsIcon to render.
aria-labelstring✅*Accessible label for screen readers.
inertboolean✅*Mark as decorative (no a11y label needed).

* Either aria-label or inert must be provided (not both).


Design-Tokens

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

TokenStandardBeschreibung
--pk-button-bgvar(--pk-color-surface-raised)Standard-Hintergrundfarbe (Contained/Inherit-Fallback).
--pk-button-fgvar(--pk-color-fg)Standard-Text-/Icon-Farbe.
--pk-button-shadownoneBasis-Schatten; farbige Glow-Schatten werden automatisch gesetzt.
--pk-button-radiusvar(--pk-radius-md)Rahmen-Radius.
--pk-button-padding-xvar(--pk-space-lg)Horizontales Padding.
--pk-button-padding-yvar(--pk-space-md)Vertikales Padding.
--pk-button-disabled-bgHintergrundfarbe im deaktivierten Zustand (optional).
--pk-button-disabled-fgvar(--pk-color-muted)Textfarbe im deaktivierten Zustand (optional).

Deaktivierter Zustand verwendet standardmäßig opacity: 0.45 und pointer-events: none. Überschreibe --pk-button-disabled-bg / --pk-button-disabled-fg nur, wenn ein abweichendes Erscheinungsbild gewünscht ist (z. B. bei Brand-Vorgaben statt reduzierter Deckkraft).
Ladezustand zeigt einen Inline-Spinner, der die Textfarbe des Buttons übernimmt (currentColor), und sperrt die Pointer-Interaktion mit cursor: progress.

AIC-Hinweis

Verwende im Anwendungscode immer den Standard-Importpfad:

import { Button } from "@prokodo/ui/button"

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.
2.5.3Label im Namen (A)✅ ErfülltBei Komponenten mit sichtbarem Label muss der zugängliche Name den sichtbaren Labeltext enthalten oder diesem entsprechen.
2.5.8Zielgröße (Minimum) (AA)🔍 Manuell prüfenInteraktive Zielbereiche müssen mindestens 24 × 24 CSS-Pixel groß sein. Prüfung in der integrierten Produkt-UI erforderlich.
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: 5 jest-axe-Assertion(s) in 4 Testdatei(en) · 1 ARIA-Attribut-Vorkommen im Quellcode-Scan. Kriterien mit 🔍 erfordern manuelle Prüfung im finalen Integrations- und Theme-Kontext.

Storybook

Explore all Button variants, controls, and a11y annotations live:

👉 Button in Storybook öffnen


Quellcode

TypeScript-Typen: src/components/button/Button.model.ts