|
| 1 | +--- |
| 2 | +title: Sponsors |
| 3 | +description: Afficher des cartes sponsors sous la table des matières dans la documentation et le blog. |
| 4 | +icon: heart |
| 5 | +order: 6 |
| 6 | +--- |
| 7 | + |
| 8 | +# Sponsors |
| 9 | + |
| 10 | +Explainer inclut une section sponsors intégrée qui s'affiche sous la table des matières dans la colonne droite. La configuration est centralisée dans le package `@explainer/ui` et partagée entre les apps docs et blog. |
| 11 | + |
| 12 | +## Fonctionnement |
| 13 | + |
| 14 | +Les cartes sponsors apparaissent automatiquement sous le TOC sur toute page disposant d'une table des matières. Elles ne sont visibles qu'à partir du breakpoint `xl`, comme le TOC. |
| 15 | + |
| 16 | +Chaque sponsor affiche : |
| 17 | +- Un **logo** (petit, arrondi) |
| 18 | +- Un **nom** |
| 19 | +- Un **badge de tier** (gold, silver ou bronze) avec un style visuel distinct |
| 20 | + |
| 21 | +## Configuration |
| 22 | + |
| 23 | +### Ajouter des sponsors |
| 24 | + |
| 25 | +Éditez `packages/ui/src/lib/sponsors.ts` et ajoutez des entrées au tableau `defaultSponsors` : |
| 26 | + |
| 27 | +```ts title="packages/ui/src/lib/sponsors.ts" |
| 28 | +import type { Sponsor } from '@explainer/ui' |
| 29 | + |
| 30 | +export const defaultSponsors: Sponsor[] = [ |
| 31 | + { |
| 32 | + id: 'acme', |
| 33 | + name: 'Acme Corp', |
| 34 | + href: 'https://acme.example.com', |
| 35 | + logoUrl: 'https://acme.example.com/logo.svg', |
| 36 | + tier: 'gold', |
| 37 | + }, |
| 38 | + { |
| 39 | + id: 'widgets', |
| 40 | + name: 'Widgets Inc', |
| 41 | + href: 'https://widgets.example.com', |
| 42 | + logoUrl: 'https://widgets.example.com/logo.png', |
| 43 | + tier: 'silver', |
| 44 | + }, |
| 45 | +] |
| 46 | +``` |
| 47 | + |
| 48 | +### Type Sponsor |
| 49 | + |
| 50 | +```ts |
| 51 | +interface Sponsor { |
| 52 | + id: string // Identifiant unique |
| 53 | + name: string // Nom affiché |
| 54 | + href: string // URL du lien (ouvre un nouvel onglet) |
| 55 | + logoUrl: string // URL du logo |
| 56 | + tier: 'gold' | 'silver' | 'bronze' |
| 57 | +} |
| 58 | +``` |
| 59 | + |
| 60 | +### Style par tier |
| 61 | + |
| 62 | +Les tiers par défaut et leurs couleurs sont définis dans `packages/ui/src/lib/sponsors.ts` via deux objets : `sponsorTierStyles` (bordure et fond de la carte) et `sponsorBadgeStyles` (couleurs du badge). Vous pouvez les personnaliser directement : |
| 63 | + |
| 64 | +```ts title="packages/ui/src/lib/sponsors.ts" |
| 65 | +export const sponsorTierStyles: Record<Sponsor['tier'], string> = { |
| 66 | + gold: 'border-yellow-500/50 bg-yellow-500/5', |
| 67 | + silver: 'border-zinc-400/50 bg-zinc-400/5', |
| 68 | + bronze: 'border-orange-700/50 bg-orange-700/5', |
| 69 | +} |
| 70 | + |
| 71 | +export const sponsorBadgeStyles: Record<Sponsor['tier'], string> = { |
| 72 | + gold: 'bg-yellow-500/15 text-yellow-700 dark:text-yellow-400', |
| 73 | + silver: 'bg-zinc-400/15 text-zinc-600 dark:text-zinc-400', |
| 74 | + bronze: 'bg-orange-700/15 text-orange-800 dark:text-orange-400', |
| 75 | +} |
| 76 | +``` |
| 77 | + |
| 78 | +Pour ajouter un nouveau palier ou modifier les couleurs, mettez à jour les deux objets ainsi que le type union `Sponsor['tier']`. |
| 79 | + |
| 80 | +| Tier | Bordure et fond | Couleur du badge | |
| 81 | +|------|----------------|-----------------| |
| 82 | +| **Gold** | Accent jaune | Jaune | |
| 83 | +| **Silver** | Accent zinc/gris | Gris | |
| 84 | +| **Bronze** | Accent orange | Orange | |
| 85 | + |
| 86 | +## Personnalisation |
| 87 | + |
| 88 | +### Utiliser le composant directement |
| 89 | + |
| 90 | +Vous pouvez utiliser le composant `SponsorCards` n'importe où dans votre layout : |
| 91 | + |
| 92 | +```tsx |
| 93 | +import { SponsorCards, defaultSponsors } from '@explainer/ui' |
| 94 | + |
| 95 | +<SponsorCards |
| 96 | + sponsors={defaultSponsors} |
| 97 | + title="Nos Sponsors" // optionnel, "Sponsors" par défaut |
| 98 | + className="mt-8" // classes CSS additionnelles optionnelles |
| 99 | +/> |
| 100 | +``` |
| 101 | + |
| 102 | +### Liste de sponsors personnalisée |
| 103 | + |
| 104 | +Utilisez le helper `getSponsors` pour surcharger des sponsors individuels : |
| 105 | + |
| 106 | +```ts |
| 107 | +import { getSponsors } from '@explainer/ui' |
| 108 | + |
| 109 | +const sponsors = getSponsors({ |
| 110 | + acme: { name: 'Acme Corp (Premium)' }, |
| 111 | +}) |
| 112 | +``` |
| 113 | + |
| 114 | +## Visibilité |
| 115 | + |
| 116 | +- Les sponsors n'apparaissent que sur les pages ayant une table des matières |
| 117 | +- La section est masquée lorsque le tableau `defaultSponsors` est vide |
| 118 | +- Sur les écrans plus petits (`< xl`), toute la colonne droite (TOC + sponsors) est masquée |
0 commit comments