Composants PageBuilder
Objet : Composants Astro PageBuilder
Type : Composants
Slice : Slice 1 (Page dâaccueil)
Cycle : DOC â SPEC â CODE â TEST â INTĂG
Statut : INTĂG
1. Description et périmÚtre
Section titled â1. Description et pĂ©rimĂštreâ1.1. Objectif
Section titled â1.1. ObjectifâLes composants PageBuilder sont des composants Astro qui rendent les diffĂ©rents blocs de contenu dĂ©finis dans le schĂ©ma Sanity page. Chaque composant correspond Ă un type de bloc PageBuilder.
1.2. Utilisation principale
Section titled â1.2. Utilisation principaleâ- Page dâaccueil
- Pages marketing (landing pages)
- Pages de présentation
1.3. PérimÚtre concerné
Section titled â1.3. PĂ©rimĂštre concernĂ©â- Type : Composants Astro
- Blocs implémentés : hero, features, testimonials, cta, richText, imageGallery
- Source des données : Sanity (via GROQ queries)
- Rendu : Server-side rendering
2. Contrats dâentrĂ©e
Section titled â2. Contrats dâentrĂ©eâ2.1. Props des composants
Section titled â2.1. Props des composantsâEntrĂ©e : Props passĂ©es aux composants
Structure commune :
interface PageBuilderBlock { _type: string; _key: string;}Props spécifiques par bloc :
interface HeroBlock extends PageBuilderBlock { _type: 'hero'; heading: string; subheading?: string; ctaText?: string; ctaLink?: string; image?: { asset: { _ref: string; }; };}Features
Section titled âFeaturesâinterface FeaturesBlock extends PageBuilderBlock { _type: 'features'; heading?: string; features: Array<{ title: string; description: string; icon?: string; }>;}Testimonials
Section titled âTestimonialsâinterface TestimonialsBlock extends PageBuilderBlock { _type: 'testimonials'; heading?: string; testimonials: Array<{ name: string; role?: string; quote: string; avatar?: { asset: { _ref: string; }; }; }>;}interface CTABlock extends PageBuilderBlock { _type: 'cta'; heading: string; description?: string; buttonText: string; buttonLink: string;}RichText
Section titled âRichTextâinterface RichTextBlock extends PageBuilderBlock { _type: 'richText'; content: any[]; // Portable Text}ImageGallery
Section titled âImageGalleryâinterface ImageGalleryBlock extends PageBuilderBlock { _type: 'imageGallery'; heading?: string; images: Array<{ asset: { _ref: string; }; alt?: string; caption?: string; }>;}2.2. RĂšgles de validation
Section titled â2.2. RĂšgles de validationâRĂšgles gĂ©nĂ©rales :
- Tous les blocs ont
_typeet_key - Les champs obligatoires doivent ĂȘtre prĂ©sents
- Les champs optionnels peuvent ĂȘtre absents
- Les rĂ©fĂ©rences dâimages Sanity sont valides
3. Contrats de sortie
Section titled â3. Contrats de sortieâ3.1. Structure HTML
Section titled â3.1. Structure HTMLâSortie : Structure HTML pour chaque bloc
Comportement :
- Chaque composant rend une section HTML sémantique
- Utilisation de balises appropriées (
<section>,<h2>, etc.) - Classes CSS pour le styling
- Images optimisées via Sanity
3.2. Accessibilité
Section titled â3.2. AccessibilitĂ©âSortie : AccessibilitĂ© respectĂ©e
Comportement :
- Attributs
altpour les images - Structure hiérarchique des titres
- Liens avec textes descriptifs
- ARIA labels si nécessaire
4. Side effects
Section titled â4. Side effectsâ4.1. Impact sur le rendu
Section titled â4.1. Impact sur le renduâEffet : Les composants PageBuilder influencent le rendu de la page
Impact :
- Chaque bloc ajoute du contenu Ă la page
- La structure de la page dĂ©pend de lâordre des blocs
- Le temps de chargement dĂ©pend du nombre dâimages
4.2. Impact sur le SEO
Section titled â4.2. Impact sur le SEOâEffet : Les composants influencent le SEO
Impact :
- Contenu textuel indexable
- Images avec alt text
- Structure sémantique HTML
5. Erreurs et gestion
Section titled â5. Erreurs et gestionâ5.1. Erreurs potentielles
Section titled â5.1. Erreurs potentiellesâ| Erreur | Cause probable | Solution |
|---|---|---|
| Bloc inconnu | _type non reconnu |
Ignorer ou afficher erreur |
| Données manquantes | Champs obligatoires absents | Afficher placeholder ou erreur |
| Image invalide | Référence Sanity corrompue | Afficher placeholder |
5.2. Codes HTTP
Section titled â5.2. Codes HTTPâNon applicable (composants Astro)
6. Checklist de validation
Section titled â6. Checklist de validationâAvant de passer Ă lâĂ©tape SPEC, vĂ©rifier :
- La structure des composants est documentée
- Les contrats dâentrĂ©e/sortie sont documentĂ©s
- Les side effects sont identifiés
- Les erreurs potentielles sont documentées
7. Implémentation réalisée
Section titled â7. ImplĂ©mentation rĂ©alisĂ©eâ7.1. Fichiers créés
Section titled â7.1. Fichiers créésâRĂ©pertoire : apps/web/src/components/pagebuilder/
Composants implémentés :
Hero.astro: Section hero avec responsive designFeatures.astro: Grille CSS responsiveTestimonials.astro: TĂ©moignages avec avatars circulairesCTA.astro: Call-to-action centrĂ©RichText.astro: Rendu Portable Text basiqueImageGallery.astro: Galerie dâimages avec captions
7.2. Styles CSS
Section titled â7.2. Styles CSSâChaque composant inclut des styles scoped :
- Design responsive avec media queries
- Variables CSS pour les couleurs
- Classes utilitaires pour le layout
- Optimisation mobile-first
7.3. Interfaces TypeScript
Section titled â7.3. Interfaces TypeScriptâProps typĂ©es selon les schĂ©mas Sanity :
- Interfaces correspondantes aux schémas blocks
- Types optionnels pour les champs non obligatoires
- Type
anypour les références Sanity (images)
8. Approbation
Section titled â8. ApprobationâValidation requise : Confirmer que la documentation des composants PageBuilder peut passer Ă lâĂ©tape SPEC.
9. Historique des modifications
Section titled â9. Historique des modificationsâ| Date | Version | Description | Auteur |
|---|---|---|---|
| 2026-09-16 | 1.0 | Création initiale | Devin |
| 2026-09-17 | 2.0 | Implémentation des 6 composants PageBuilder | Devin |