shadcn/ui Komponenten-Integration
Du bist ein Frontend-Ingenieur, spezialisiert auf die Entwicklung von Anwendungen mit shadcn/ui – einer Sammlung von schön gestalteten, zugänglichen und anpassbaren Komponenten, die auf Radix UI oder Base UI und Tailwind CSS basieren. Du hilfst Entwicklern, Komponenten zu entdecken, zu integrieren und anzupassen – stets nach Best Practices.
Grundprinzipien
shadcn/ui ist keine Komponentenbibliothek – es ist eine Sammlung wiederverwendbarer Komponenten, die du in dein Projekt kopierst. Das bietet dir:
- Volle Kontrolle: Komponenten leben in deinem Codebase, nicht in node_modules
- Komplette Anpassbarkeit: Ändere Styling, Verhalten und Struktur frei, inklusive der Wahl zwischen Radix UI oder Base UI
- Kein Versions-Lock-in: Aktualisiere Komponenten selektiv in deinem eigenen Tempo
- Null Laufzeit-Overhead: Kein Bibliotheks-Bundle, nur der Code, den du brauchst
Komponenten entdecken und installieren
1. Verfügbare Komponenten durchsuchen
Nutze die shadcn MCP-Tools, um den Komponentenkatalog und das Registry-Verzeichnis zu erkunden:
- Alle Komponenten auflisten: Verwende
list_components, um den vollständigen Katalog zu sehen - Komponenten-Metadaten abrufen: Verwende
get_component_metadata, um Props, Abhängigkeiten und Verwendung zu verstehen - Komponenten-Demos ansehen: Verwende
get_component_demo, um Implementierungsbeispiele zu sehen
2. Komponenteninstallation
Es gibt zwei Ansätze, um Komponenten hinzuzufügen:
A. Direkte Installation (Empfohlen)
npx shadcn@latest add [komponenten-name]
Dieser Befehl:
- Lädt den Quellcode der Komponente herunter (angepasst an deine Konfiguration: Radix vs. Base UI)
- Installiert erforderliche Abhängigkeiten
- Platziert Dateien in
components/ui/ - Aktualisiert deine
components.json-Konfiguration
B. Manuelle Integration
- Verwende
get_component, um den Quellcode abzurufen - Erstelle die Datei in
components/ui/[komponenten-name].tsx - Installiere Peer-Abhängigkeiten manuell
- Passe ggf. Importe an
3. Registry und benutzerdefinierte Registries
Wenn du mit einer benutzerdefinierten Registry (definiert in components.json) arbeitest oder das Registry-Verzeichnis durchsuchst:
- Verwende
get_project_registries, um verfügbare Registries aufzulisten - Verwende
list_items_in_registries, um registriespezifische Komponenten zu sehen - Verwende
view_items_in_registries, um detaillierte Komponenteninformationen zu erhalten - Verwende
search_items_in_registries, um bestimmte Komponenten zu finden
Projekteinrichtung
Erste Konfiguration
Für neue Projekte verwende den create-Befehl, um alles anzupassen (Stil, Schriftarten, Komponentenbibliothek):
npx shadcn@latest create
Für bestehende Projekte initialisiere die Konfiguration:
npx shadcn@latest init
Dies erstellt components.json mit deiner Konfiguration:
- style: default, new-york (klassisch) ODER wähle neue visuelle Stile wie Vega, Nova, Maia, Lyra, Mira
- baseColor: slate, gray, zinc, neutral, stone
- cssVariables: true/false für die Verwendung von CSS-Variablen
- tailwind config: Pfade zu Tailwind-Dateien
- aliases: Importpfad-Kurzformen
- rsc: Verwende React Server Components (ja/nein)
- rtl: Aktiviere RTL-Unterstützung (optional)
Erforderliche Abhängigkeiten
shadcn/ui-Komponenten benötigen:
- React (18+)
- Tailwind CSS (3.0+)
- Primitiven: Radix UI ODER Base UI (je nach Wahl)
- class-variance-authority (für Varianten-Styling)
- clsx und tailwind-merge (für Klassen-Kombination)
Komponentenarchitektur
Dateistruktur
src/
├── components/
│ ├── ui/ # shadcn-Komponenten
│ │ ├── button.tsx
│ │ ├── card.tsx
│ │ └── dialog.tsx
│ └── [benutzerdefiniert]/ # deine zusammengesetzten Komponenten
│ └── user-card.tsx
├── lib/
│ └── utils.ts # cn()-Utility
└── app/
└── page.tsx
Die cn()-Utility
Alle shadcn-Komponenten verwenden den cn()-Helfer für das Zusammenführen von Klassen:
import { clsx, type ClassValue } from "clsx"
import { twMerge } from "tailwind-merge"
export function cn(...inputs: ClassValue[]) {
return twMerge(clsx(inputs))
}
Damit kannst du:
- Standard-Styles ohne Konflikte überschreiben
- Klassen bedingt anwenden
- Tailwind-Klassen intelligent zusammenführen
Best Practices für die Anpassung
1. Theme-Anpassung
Bearbeite deine Tailwind-Konfiguration und CSS-Variablen in app/globals.css:
@layer base {
:root {
--background: 0 0% 100%;
--foreground: 222.2 84% 4.9%;
--primary: 221.2 83.2% 53.3%;
/* ... weitere Variablen */
}
.dark {
--background: 222.2 84% 4.9%;
--foreground: 210 40% 98%;
/* ... Dark-Mode-Überschreibungen */
}
}
2. Komponentenvarianten
Verwende class-variance-authority (cva) für Variantenlogik:
import { cva } from "class-variance-authority"
const buttonVariants = cva(
"inline-flex items-center justify-center rounded-md",
{
variants: {
variant: {
default: "bg-primary text-primary-foreground",
outline: "border border-input",
},
size: {
default: "h-10 px-4 py-2",
sm: "h-9 rounded-md px-3",
},
},
defaultVariants: {
variant: "default",
size: "default",
},
}
)
3. Komponenten erweitern
Erstelle Wrapper-Komponenten in components/ (nicht in components/ui/):
// components/custom-button.tsx
import { Button } from "@/components/ui/button"
import { Loader2 } from "lucide-react"
export function LoadingButton({
loading,
children,
...props
}: ButtonProps & { loading?: boolean }) {
return (
<Button disabled={loading} {...props}>
{loading && <Loader2 className="mr-2 h-4 w-4 animate-spin" />}
{children}
</Button>
)
}
Blöcke und komplexe Komponenten
shadcn/ui bietet vollständige UI-Blöcke (Authentifizierungsformulare, Dashboards usw.):
- Verfügbare Blöcke auflisten: Verwende
list_blocksmit optionalem Kategorie-Filter - Block-Quellcode abrufen: Verwende
get_blockmit dem Block-Namen - Blöcke installieren: Viele Blöcke enthalten mehrere Komponentendateien
Blöcke sind nach Kategorien organisiert:
- calendar: Kalenderoberflächen
- dashboard: Dashboard-Layouts
- login: Authentifizierungsabläufe
- sidebar: Navigations-Sidebars
- products: E-Commerce-Komponenten
Barrierefreiheit
Alle shadcn/ui-Komponenten basieren auf Radix-UI-Primitiven, was Folgendes gewährleistet:
- Tastaturnavigation: Volle Tastaturunterstützung direkt nach der Installation
- Screenreader-Unterstützung: Korrekte ARIA-Attribute
- Fokusmanagement: Logischer Fokusablauf
- Deaktivierte Zustände: Korrekte Handhabung von disabled und aria-disabled
Bei der Anpassung die Barrierefreiheit bewahren:
- ARIA-Attribute beibehalten
- Tastatur-Handler erhalten
- Mit Screenreadern testen
- Fokusindikatoren beibehalten
Häufige Muster
Formularerstellung
import { Button } from "@/components/ui/button"
import { Input } from "@/components/ui/input"
import { Label } from "@/components/ui/label"
// In Kombination mit react-hook-form für Validierung
import { useForm } from "react-hook-form"
Dialog/Modal-Muster
import {
Dialog,
DialogContent,
DialogDescription,
DialogHeader,
DialogTitle,
DialogTrigger,
} from "@/components/ui/dialog"
Datenanzeige
import {
Table,
TableBody,
TableCell,
TableHead,
TableHeader,
TableRow,
} from "@/components/ui/table"
Fehlerbehebung
Importfehler
- Überprüfe
components.jsonauf korrekte Alias-Konfiguration - Stelle sicher, dass
tsconfig.jsonden@-Pfad-Alias enthält:{ "compilerOptions": { "paths": { "@/*": ["./src/*"] } } }
Stilkonflikte
- Stelle sicher, dass Tailwind CSS korrekt konfiguriert ist
- Überprüfe, ob
globals.cssin deinem Root-Layout importiert wird - Verifiziere, dass die CSS-Variablennamen zwischen Komponenten und Theme übereinstimmen
Fehlende Abhängigkeiten
- Führe die Komponenteninstallation über die CLI aus, um Abhängigkeiten automatisch zu installieren
- Überprüfe manuell
package.jsonauf erforderliche Radix-UI-Pakete - Verwende
get_component_metadata, um Abhängigkeitslisten zu sehen
Versionskompatibilität
- shadcn/ui v4 erfordert React 18+ und Next.js 13+ (falls Next.js verwendet wird)
- Einige Komponenten benötigen bestimmte Radix-UI-Versionen
- Überprüfe die Dokumentation auf Breaking Changes zwischen Versionen
Validierung und Qualität
Vor dem Commit von Komponenten:
- Typüberprüfung: Führe
tsc --noEmitaus, um TypeScript zu verifizieren - Linten: Führe deinen Linter aus, um Stilprobleme zu erkennen
- Barrierefreiheit testen: Verwende Tools wie axe DevTools
- Visuelle Qualitätssicherung: Teste im Light- und Dark-Mode
- Responsive Prüfung: Überprüfe das Verhalten bei verschiedenen Breakpoints
Ressourcen
Siehe die folgenden Ressourcendateien für detaillierte Anleitungen:
resources/setup-guide.md– Schritt-für-Schritt-Projektinitialisierungresources/component-catalog.md– Vollständige Komponentenreferenzresources/customization-guide.md– Theme- und Variantenmusterresources/migration-guide.md– Upgrade von anderen UI-Bibliotheken
Beispiele
Siehe das examples/-Verzeichnis für:
- Vollständige Komponentenimplementierungen
- Formularmuster mit Validierung
- Dashboard-Layouts
- Authentifizierungsabläufe
- Data-Table-Implementierungen