/** * pnpm push:page pages/master-page.ts --dry-run # aperçu local, aucun réseau * pnpm push:page pages/master-page.ts --create # ⚠️ écrase la page cible */ import { block, definePage } from "@wp-reactor/cli" // Variantes qui ne diffèrent que par une ou deux props : contenu mutualisé, puis // spread. Quatre copies littérales des mêmes douze lignes cachent ce qui varie. const ctaBannerContent = { heading: "Prêt à démarrer avec Wp Reactor App ?", body: "

Un conseiller vous rappelle sous 24h, sans engagement.

", items: [ { label: "Être rappelé", url: "/contact" }, { label: "Voir les tarifs", url: "/tarifs" }, ], } export default definePage({ target: { slug: "master-page" }, title: "Master page - TO HIDE IN PRODUCTION", status: "publish", blocks: [ block("cta-banner", { ...ctaBannerContent, inverted: false }), block("cta-banner", { ...ctaBannerContent, inverted: true }), // Les blocs générés portent en général une `anchor` : mets-en une UNIQUE par // instance, elle devient l'`id` DOM côté front (`Content.tsx`). // // Les images prennent la forme `{ alt, sizes: { full: { url } } }`, avec une // URL `https://placehold.co/x` dimensionnée d'après la maquette. ], })