[Nom du Composant]
Type de ressource : Composant Astro (UI atomique / Ălot interactif)
Fichier source :src/components/[ui|interactive]/[NomComposant].astro
Statut : [Actif / Déprécié / En développement]
Slice : [Numéro de la tranche verticale]
Version : 1.0
1. Vue dâensemble (DOC)
Section titled â1. Vue dâensemble (DOC)â1.1. Description
Section titled â1.1. Descriptionâ[Description concise du rĂŽle de ce composant dans lâinterface utilisateur]
1.2. Objectif
Section titled â1.2. Objectifâ- [Objectif principal : ex. afficher un bouton dâaction rĂ©utilisable]
- [BĂ©nĂ©fice pour lâUX ou lâarchitecture]
1.3. Caractéristiques
Section titled â1.3. CaractĂ©ristiquesâ| PropriĂ©tĂ© | Valeur |
|---|---|
| Type | [UI atomique / Ălot interactif] |
| Hydratation | [Aucune / client:load / client:visible / client:idle] |
| Framework JS | [Aucun / React / Vue / Svelte / Web Component] |
| Accessibilité | [WCAG AA conforme / Partiellement conforme / Non testé] |
| Responsive | [Mobile-first / Desktop-first] |
2. Architecture et structure (DOC)
Section titled â2. Architecture et structure (DOC)â2.1. Emplacement dans lâarborescence
Section titled â2.1. Emplacement dans lâarborescenceâsrc/components/âââ ui/ # Composants atomiques (HTML + CSS purs)â âââ Button.astroâ âââ Badge.astroâ âââ [NomComposant].astroâââ interactive/ # Ălots dynamiques (React/Vue/Svelte) âââ MobileNav.tsx âââ Carousel.tsx âââ [NomComposant].tsx2.2. Composants dĂ©pendants
Section titled â2.2. Composants dĂ©pendantsâ| Composant parent | Fichier | Relation |
|---|---|---|
| [Nom du parent] | src/components/[chemin] |
[Composition / Wrapper] |
2.3. Composants enfants utilisés
Section titled â2.3. Composants enfants utilisĂ©sâ| Composant enfant | Fichier | RĂŽle |
|---|---|---|
| [Nom de lâenfant] | src/components/[chemin] |
[Description] |
3. Implémentation (CODE)
Section titled â3. ImplĂ©mentation (CODE)â3.1. Variante : Composant UI atomique (HTML + CSS purs)
Section titled â3.1. Variante : Composant UI atomique (HTML + CSS purs)â---interface Props { label: string; variant?: 'primary' | 'secondary' | 'outline'; size?: 'sm' | 'md' | 'lg'; disabled?: boolean; href?: string; onClick?: () => void;}
const { label, variant = 'primary', size = 'md', disabled = false, href, onClick,} = Astro.props;
const baseClasses = 'inline-flex items-center justify-center font-medium rounded-lg transition-colors focus:outline-none focus:ring-2 focus:ring-offset-2';
const variantClasses = { primary: 'bg-blue-600 text-white hover:bg-blue-700 focus:ring-blue-500', secondary: 'bg-gray-600 text-white hover:bg-gray-700 focus:ring-gray-500', outline: 'border-2 border-blue-600 text-blue-600 hover:bg-blue-50 focus:ring-blue-500',};
const sizeClasses = { sm: 'px-3 py-1.5 text-sm', md: 'px-4 py-2 text-base', lg: 'px-6 py-3 text-lg',};
const classes = `${baseClasses} ${variantClasses[variant]} ${sizeClasses[size]} ${disabled ? 'opacity-50 cursor-not-allowed' : ''}`;---
{href ? ( <a href={href} class={classes} aria-disabled={disabled} > {label} </a>) : ( <button class={classes} disabled={disabled} onClick={onClick} > {label} </button>)}3.2. Variante : Ălot interactif (React)
Section titled â3.2. Variante : Ălot interactif (React)âimport { useState } from 'react';
interface Props { initialValue?: number;}
export default function Counter({ initialValue = 0 }: Props) { const [count, setCount] = useState(initialValue);
return ( <div class="flex items-center gap-4"> <button onClick={() => setCount(c => c - 1)}>-</button> <span>{count}</span> <button onClick={() => setCount(c => c + 1)}>+</button> </div> );}4. Contrats dâEntrĂ©e/Sortie (SPEC)
Section titled â4. Contrats dâEntrĂ©e/Sortie (SPEC)â4.1. Inputs (Props)
Section titled â4.1. Inputs (Props)â| Prop | Type | Obligatoire | Validation |
|---|---|---|---|
label |
string |
â | Non vide |
variant |
enum |
â | Valeur par dĂ©faut |
size |
enum |
â | Valeur par dĂ©faut |
4.2. Outputs (Rendu)
Section titled â4.2. Outputs (Rendu)â| ĂlĂ©ment | Type | Description |
|---|---|---|
| HTML | HTMLElement |
Composant rendu |
| ĂvĂ©nements | Event |
onClick, onChange, etc. |
4.3. Ătats (si interactif)
Section titled â4.3. Ătats (si interactif)â| Ătat | Type | Description |
|---|---|---|
count |
number |
Valeur du compteur |
5. Tests attendus (TEST)
Section titled â5. Tests attendus (TEST)â5.1. Tests unitaires
Section titled â5.1. Tests unitairesâ| ScĂ©nario | Description | RĂ©sultat attendu |
|---|---|---|
| Rendu avec props | Props valides | Composant rendu correctement |
| Accessibilité | Test ARIA | Conforme WCAG AA |
| Responsive | Test mobile/desktop | Adaptation correcte |
5.2. Tests dâintĂ©gration
Section titled â5.2. Tests dâintĂ©grationâ| ScĂ©nario | DĂ©pendances | Description | RĂ©sultat attendu |
|---|---|---|---|
| Intégration parent | Composant parent | Utilisation dans une page | Fonctionne correctement |
5.3. Tests E2E
Section titled â5.3. Tests E2Eâ| ScĂ©nario | Parcours utilisateur | Description | RĂ©sultat attendu |
|---|---|---|---|
| Interaction utilisateur | Clic / Interaction | Action utilisateur | Réponse attendue |
6. IntĂ©gration (INTĂG)
Section titled â6. IntĂ©gration (INTĂG)â6.1. IntĂ©gration avec les composants
Section titled â6.1. IntĂ©gration avec les composantsâ| Composant | Type | RĂŽle | MĂ©thode dâintĂ©gration |
|---|---|---|---|
| Page parent | L2 | Utilisation du composant | Import et rendu |
| Layout | L2 | Inclusion globale | Import dans layout |
6.2. Points dâattention
Section titled â6.2. Points dâattentionâ- Les props doivent ĂȘtre typĂ©es avec TypeScript
- LâaccessibilitĂ© doit ĂȘtre conforme WCAG AA
- Le composant doit ĂȘtre responsive
6.3. Vérification de cohérence
Section titled â6.3. VĂ©rification de cohĂ©renceâ- Le composant fonctionne en isolation
- Le composant sâintĂšgre correctement avec les parents
- Les tests dâaccessibilitĂ© passent
- Les tests E2E passent
7. Sécurité
Section titled â7. SĂ©curitĂ©â7.1. MĂ©canismes de sĂ©curitĂ©
Section titled â7.1. MĂ©canismes de sĂ©curitĂ©â- â Validation des props
- â Protection XSS (Astro par dĂ©faut)
- â Sanitization du contenu utilisateur
7.2. RÚgles de sécurité
Section titled â7.2. RĂšgles de sĂ©curitĂ©â- â Ne jamais exĂ©cuter de code utilisateur non sĂ©curisĂ©
- â Valider toutes les entrĂ©es
- â Utiliser les attributs ARIA appropriĂ©s
8. Performance et limites
Section titled â8. Performance et limitesâ8.1. Hydratation
Section titled â8.1. Hydratationâ| Directive | Description |
|---|---|
client:load |
Hydratation immédiate |
client:visible |
Hydratation quand visible |
client:idle |
Hydratation quand le navigateur est inactif |
8.2. Limitations
Section titled â8.2. Limitationsâ- â Les Ăźlots interactifs augmentent le bundle size
- â Lâhydratation peut affecter le LCP
9. Débogage et troubleshooting
Section titled â9. DĂ©bogage et troubleshootingâ9.1. ProblĂšmes courants
Section titled â9.1. ProblĂšmes courantsâ| SymptĂŽme | Cause probable | Solution |
|---|---|---|
| Composant non rendu | Props manquantes | Vérifier les props |
| Hydratation échoue | Erreur JavaScript | Vérifier la console |
| Accessibilité échoue | ARIA manquant | Ajouter les attributs |
9.2. Commandes de debug
Section titled â9.2. Commandes de debugâ# Lancer les testsnpm run test
# Lancer les tests E2Enpm run test:e2e10. Bonnes pratiques
Section titled â10. Bonnes pratiquesâ10.1. Architecture
Section titled â10.1. Architectureâ- â Composants atomiques rĂ©utilisables
- â Props typĂ©es avec TypeScript
- â AccessibilitĂ© par dĂ©faut
10.2. Code
Section titled â10.2. Codeâ- â Utiliser les classes Tailwind pour le style
- â Ăviter les effets de bord
- â Documenter les props complexes
10.3. Maintenance
Section titled â10.3. Maintenanceâ- â Documenter les changements dans ce fichier
- â Tester les modifications en local
11. Ăvolutions et roadmap
Section titled â11. Ăvolutions et roadmapâ11.1. AmĂ©liorations planifiĂ©es
Section titled â11.1. AmĂ©liorations planifiĂ©esâ- [Ăvolution 1]
- [Ăvolution 2]
11.2. Limitations connues
Section titled â11.2. Limitations connuesâ- â [Limitation 1]
- â [Limitation 2]
12. Ressources liées
Section titled â12. Ressources liĂ©esâ- Documentation Astro : Components
- Documentation Astro : Islands
- DAT L2 : §5.4 - StratĂ©gie dâHydratation
13. Historique des modifications
Section titled â13. Historique des modificationsâ| Date | Version | Description | Auteur |
|---|---|---|---|
| YYYY-MM-DD | 1.0 | Création initiale | [Nom] |