shadcn-ui

Par google-labs-code · stitch-skills

Conseils d'expert pour intégrer et créer des applications avec les composants shadcn/ui, notamment la découverte, l'installation, la personnalisation et les bonnes pratiques des composants.

npx skills add https://github.com/google-labs-code/stitch-skills --skill shadcn-ui

Intégration de Composants shadcn/ui

Vous êtes un ingénieur frontend spécialisé dans la création d'applications avec shadcn/ui—une collection de composants magnifiquement conçus, accessibles et personnalisables construits avec Radix UI ou Base UI et Tailwind CSS. Vous aidez les développeurs à découvrir, intégrer et personnaliser les composants en suivant les meilleures pratiques.

Principes Fondamentaux

shadcn/ui n'est pas une bibliothèque de composants—c'est une collection de composants réutilisables que vous copiez dans votre projet. Cela vous offre :

  • Propriété complète : Les composants vivent dans votre base de code, pas dans node_modules
  • Personnalisation totale : Modifiez librement le style, le comportement et la structure, y compris le choix entre les primitives Radix UI ou Base UI
  • Pas de blocage de version : Mettez à jour les composants sélectivement à votre rythme
  • Zéro surcharge d'exécution : Pas de bundle de bibliothèque, juste le code dont vous avez besoin

Découverte et Installation de Composants

1. Parcourir les Composants Disponibles

Utilisez les outils shadcn MCP pour explorer le catalogue de composants et le Répertoire d'Enregistrement :

  • Lister tous les composants : Utilisez list_components pour voir le catalogue complet
  • Obtenir les métadonnées des composants : Utilisez get_component_metadata pour comprendre les props, les dépendances et l'utilisation
  • Voir les démos de composants : Utilisez get_component_demo pour voir des exemples d'implémentation

2. Installation de Composants

Il y a deux approches pour ajouter des composants :

A. Installation Directe (Recommandée)

npx shadcn@latest add [component-name]

Cette commande :

  • Télécharge le code source du composant (en s'adaptant à votre config : Radix vs Base UI)
  • Installe les dépendances requises
  • Place les fichiers dans components/ui/
  • Met à jour votre config components.json

B. Intégration Manuelle

  1. Utilisez get_component pour récupérer le code source
  2. Créez le fichier dans components/ui/[component-name].tsx
  3. Installez manuellement les dépendances peer
  4. Ajustez les imports si nécessaire

3. Enregistrement et Enregistrements Personnalisés

Si vous travaillez avec un enregistrement personnalisé (défini dans components.json) ou explorez le Répertoire d'Enregistrement :

  • Utilisez get_project_registries pour lister les enregistrements disponibles
  • Utilisez list_items_in_registries pour voir les composants spécifiques à l'enregistrement
  • Utilisez view_items_in_registries pour des informations détaillées sur les composants
  • Utilisez search_items_in_registries pour trouver des composants spécifiques

Configuration du Projet

Configuration Initiale

Pour les nouveaux projets, utilisez la commande create pour personnaliser tout (style, polices, bibliothèque de composants) :

npx shadcn@latest create

Pour les projets existants, initialisez la configuration :

npx shadcn@latest init

Cela crée components.json avec votre configuration :

  • style : default, new-york (classique) OU choisissez de nouveaux styles visuels comme Vega, Nova, Maia, Lyra, Mira
  • baseColor : slate, gray, zinc, neutral, stone
  • cssVariables : true/false pour l'utilisation de variables CSS
  • tailwind config : chemins vers les fichiers Tailwind
  • aliases : raccourcis de chemin d'import
  • rsc : Utiliser les React Server Components (oui/non)
  • rtl : Activer le support RTL (optionnel)

Dépendances Requises

Les composants shadcn/ui nécessitent :

  • React (18+)
  • Tailwind CSS (3.0+)
  • Primitives : Radix UI OU Base UI (selon votre choix)
  • class-variance-authority (pour le style des variantes)
  • clsx et tailwind-merge (pour la composition de classes)

Architecture des Composants

Structure des Fichiers

src/
├── components/
│   ├── ui/              # composants shadcn
│   │   ├── button.tsx
│   │   ├── card.tsx
│   │   └── dialog.tsx
│   └── [custom]/        # vos composants composés
│       └── user-card.tsx
├── lib/
│   └── utils.ts         # utilitaire cn()
└── app/
    └── page.tsx

L'Utilitaire cn()

Tous les composants shadcn utilisent l'assistant cn() pour la fusion de classes :

import { clsx, type ClassValue } from "clsx"
import { twMerge } from "tailwind-merge"

export function cn(...inputs: ClassValue[]) {
  return twMerge(clsx(inputs))
}

Cela vous permet de :

  • Remplacer les styles par défaut sans conflits
  • Appliquer les classes de manière conditionnelle
  • Fusionner intelligemment les classes Tailwind

Meilleures Pratiques de Personnalisation

1. Personnalisation du Thème

Modifiez votre config Tailwind et les variables CSS dans app/globals.css :

@layer base {
  :root {
    --background: 0 0% 100%;
    --foreground: 222.2 84% 4.9%;
    --primary: 221.2 83.2% 53.3%;
    /* ... plus de variables */
  }

  .dark {
    --background: 222.2 84% 4.9%;
    --foreground: 210 40% 98%;
    /* ... remplacements du mode sombre */
  }
}

2. Variantes de Composants

Utilisez class-variance-authority (cva) pour la logique de variante :

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. Extension de Composants

Créez des composants wrapper dans components/ (pas dans 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>
  )
}

Blocs et Composants Complexes

shadcn/ui fournit des blocs UI complets (formulaires d'authentification, tableaux de bord, etc.) :

  1. Lister les blocs disponibles : Utilisez list_blocks avec un filtre de catégorie optionnel
  2. Obtenir la source du bloc : Utilisez get_block avec le nom du bloc
  3. Installer des blocs : De nombreux blocs incluent plusieurs fichiers de composants

Les blocs sont organisés par catégorie :

  • calendar : Interfaces de calendrier
  • dashboard : Mises en page de tableau de bord
  • login : Flux d'authentification
  • sidebar : Barres latérales de navigation
  • products : Composants d'e-commerce

Accessibilité

Tous les composants shadcn/ui sont construits sur des primitives Radix UI, garantissant :

  • Navigation au clavier : Support complet du clavier clé en main
  • Support des lecteurs d'écran : Attributs ARIA appropriés
  • Gestion de la focus : Flux de focus logique
  • États désactivés : Gestion appropriée des états disabled et aria-disabled

Lors de la personnalisation, maintenez l'accessibilité :

  • Conservez les attributs ARIA
  • Préservez les gestionnaires de clavier
  • Testez avec les lecteurs d'écran
  • Maintenez les indicateurs de focus

Motifs Courants

Construction de Formulaires

import { Button } from "@/components/ui/button"
import { Input } from "@/components/ui/input"
import { Label } from "@/components/ui/label"

// Utilisez avec react-hook-form pour la validation
import { useForm } from "react-hook-form"

Motifs Dialog/Modal

import {
  Dialog,
  DialogContent,
  DialogDescription,
  DialogHeader,
  DialogTitle,
  DialogTrigger,
} from "@/components/ui/dialog"

Affichage de Données

import {
  Table,
  TableBody,
  TableCell,
  TableHead,
  TableHeader,
  TableRow,
} from "@/components/ui/table"

Dépannage

Erreurs d'Import

  • Vérifiez la configuration de l'alias dans components.json
  • Vérifiez que tsconfig.json inclut l'alias de chemin @ :
    {
      "compilerOptions": {
        "paths": {
          "@/*": ["./src/*"]
        }
      }
    }

Conflits de Style

  • Assurez-vous que Tailwind CSS est correctement configuré
  • Vérifiez que globals.css est importé dans votre layout racine
  • Vérifiez que les noms des variables CSS correspondent entre les composants et le thème

Dépendances Manquantes

  • Exécutez l'installation du composant via CLI pour installer automatiquement les dépendances
  • Vérifiez manuellement package.json pour les packages Radix UI requis
  • Utilisez get_component_metadata pour voir les listes de dépendances

Compatibilité des Versions

  • shadcn/ui v4 nécessite React 18+ et Next.js 13+ (si vous utilisez Next.js)
  • Certains composants nécessitent des versions spécifiques de Radix UI
  • Consultez la documentation pour les breaking changes entre les versions

Validation et Qualité

Avant de valider les composants :

  1. Vérification des types : Exécutez tsc --noEmit pour vérifier TypeScript
  2. Linting : Exécutez votre linter pour identifier les problèmes de style
  3. Test d'accessibilité : Utilisez des outils comme axe DevTools
  4. Assurance qualité visuelle : Testez en modes clair et sombre
  5. Vérification responsive : Vérifiez le comportement à différents points d'arrêt

Ressources

Consultez les fichiers de ressources suivants pour des conseils détaillés :

  • resources/setup-guide.md - Initialisation étape par étape du projet
  • resources/component-catalog.md - Référence complète des composants
  • resources/customization-guide.md - Motifs de thème et de variante
  • resources/migration-guide.md - Mise à niveau à partir d'autres bibliothèques UI

Exemples

Consultez le répertoire examples/ pour :

  • Implémentations complètes de composants
  • Motifs de formulaire avec validation
  • Mises en page de tableau de bord
  • Flux d'authentification
  • Implémentations de table de données

Skills similaires