// template-pack-1-universal.jsx // PACK 1 · UNIVERSAL TEMPLATES — Allo Education Books v1.2 // 10 production-ready templates. Built strictly from locked blocks // (PageShell, PageTitle, Box variants, Cols, KettyBubble, QRBlock). // No header/footer, no margins, no spacing, no typo redefined locally. // All icons via or block iconKey prop. Zero emoji. const { Fragment: U_F } = React; /* ──────────────────────────────────────────────────────────────────────── Local helpers (composed from locked primitives only — never restyle them) ──────────────────────────────────────────────────────────────────────── */ // Tag with a number: used in match / TF / writing rows function PackNumTag({ n, tone = "primary" }) { return ( {n} ); } // V / F square checkboxes used in true/false rows function VFCell() { return ( ); } // Letter chip (A, B, C…) used in match-exercise function LetterChip({ ch, tone = "primary" }) { return ( {ch} ); } // Ruled writing area (multi-line) — composes AnswerBox to keep typo locked function WritingLines({ lines = 8 }) { // Render N stacked AnswerBox-equivalent rules, each 0.28in tall. // Using inline div instead of AnswerBox to control exact line spacing. return (
{Array.from({ length: lines }).map((_, i) => (
))}
); } /* ════════════════════════════════════════════════════════════════════════ 1 · DIAGNOSTIC DE DÉPART (template: "diagnostic") Test rapide multi-thèmes · 8–12 questions · score · Ketty · QR optionnel ════════════════════════════════════════════════════════════════════════ */ function U1Diagnostic({ density, qrVisible, scoreVisible, scale = 1 }) { return ( 247 + 158 = 8 × 9 = 1 000 − 367 = Quart de 80 = 72 ÷ 9 = Écris en chiffres : « cinq mille soixante-trois » Combien de cm dans 1,25 m ? Périmètre d'un carré de 7 cm ? Aire d'un rectangle 4 × 6 cm ? 30 minutes = heure Ce diagnostic ne compte pas pour la note. Il sert à cibler ce qu'on travaillera ensemble dans les premières pages du cahier. ); } /* ════════════════════════════════════════════════════════════════════════ 2 · EXERCICE PROBLÈME (template: "problem-exercise") ════════════════════════════════════════════════════════════════════════ */ function U2Problem({ density, qrVisible, scoreVisible, scale = 1 }) { return (

La cantine du collège commande chaque mois 180 kg de fruits auprès d'un producteur local. Le tarif normal est de 2,80 €/kg. Comme le collège passe une commande importante, le producteur applique une remise de 15 % sur la facture totale, mais ajoute des frais de livraison fixes de 22 €. Le collège souhaite savoir combien coûte réellement le kilo de fruits livrés, et combien il économise par rapport au tarif normal.

  • Quantité : 180 kg
  • Prix tarif normal : 2,80 €/kg
  • Remise : 15 % sur le total
  • Frais de livraison : 22 €
Mes calculs
Ma réponse en phrase
Une remise s'applique après avoir calculé le total. Frais fixes ajoutés après la remise.
); } /* ════════════════════════════════════════════════════════════════════════ 3 · TABLEAU À COMPLÉTER (template: "table-exercise") ════════════════════════════════════════════════════════════════════════ */ function U3Table({ density, qrVisible, scoreVisible, scale = 1 }) { return ( Les verbes être, avoir, aller, faire, dire, voir sont irréguliers au présent : leur radical change selon la personne. À mémoriser absolument.
aller · 1ʳᵉ pers. plur. → nous allons
); } /* ════════════════════════════════════════════════════════════════════════ 4 · RELIER / ASSOCIER (template: "match-exercise") ════════════════════════════════════════════════════════════════════════ */ function U4Match({ density, qrVisible, scoreVisible, scale = 1 }) { const left = [ ["1", "Photosynthèse"], ["2", "Respiration cellulaire"], ["3", "Transpiration"], ["4", "Germination"], ]; const right = [ ["A", "Production de glucose à partir de CO₂ et de lumière."], ["B", "Évaporation d'eau au niveau des feuilles."], ["C", "Développement d'une graine en plantule."], ["D", "Libération d'énergie à partir du glucose et de l'O₂."], ]; return (
{/* Column A */}
Colonne A — Mot
{left.map(([n, w]) => (
{w}
))}
{/* Connector lane (visual) */}
relier
{/* Column B */}
Colonne B — Définition
{right.map(([ch, d]) => (
{d}
))}
Mes réponses
Choisis la définition qui te paraît la plus difficile et reformule-la avec tes mots, en 2 lignes maximum.
Pour fixer le vocabulaire, lis chaque mot à voix haute avec sa définition, puis ferme le cahier et réessaie.
); } /* ════════════════════════════════════════════════════════════════════════ 5 · VRAI / FAUX (template: "true-false") ════════════════════════════════════════════════════════════════════════ */ function U5TrueFalse({ density, qrVisible, scoreVisible, scale = 1 }) { const items = [ ["L'eau bout à 100 °C au niveau de la mer.", true], ["Le Soleil tourne autour de la Terre.", false], ["Un kilomètre vaut 1 000 mètres.", true], ["Tous les nombres pairs sont divisibles par 4.", false], ["La Lune émet sa propre lumière.", false], ["Le triangle rectangle a un angle de 90°.", true], ["Un litre d'eau pèse environ 1 kilogramme.", true], ["L'air est composé majoritairement d'oxygène.", false], ]; return (
Affirmation
V
F
{items.map(([txt], i) => ( {txt} ))}
Justification (1 ligne pour chaque « Faux »)
Une affirmation est fausse dès qu'un seul mot la rend incorrecte. Cherche ce mot avant de te décider.
); } /* ════════════════════════════════════════════════════════════════════════ 6 · MINI-SUJET EXAMEN (template: "mini-exam") ════════════════════════════════════════════════════════════════════════ */ function U6Exam({ density, qrVisible, scoreVisible, scale = 1 }) { return (
Durée conseillée
45 minutes
Barème
Ex. 1 : /6 · Ex. 2 : /7 · Ex. 3 : /7 — Total /20
Matériel
Calculatrice, règle, équerre. Brouillon à part.
a) Développe : (2x + 3)(x − 5).
b) Réduis : 4x² − 3x + 2x² + 7x − 1.
c) Factorise : 9x² − 25.
a) Calcule AC. b) Calcule l'aire du triangle ABC.
a) Moyenne. b) Médiane. c) Étendue.

Lis les 3 exercices avant de démarrer. Commence par celui que tu maîtrises le mieux pour sécuriser des points. Reporte ton total après auto-correction au QR.

); } /* ════════════════════════════════════════════════════════════════════════ 7 · ÉTUDE DE DOCUMENT (template: "document-study") ════════════════════════════════════════════════════════════════════════ */ function DocSourceCard() { return (
« Lettre d'un poilu à sa femme — 14 octobre 1916 »

« Ma chère Marie, voilà six jours que nous tenons la cote 304. Les obus tombent sans relâche, mais le moral des hommes est bon. La pluie a fait des tranchées une mer de boue. J'ai reçu ton colis hier — le pain et la confiture ont été partagés avec mes camarades, ils t'embrassent tous. Le caporal Lefèvre, qui était de Verdun, m'a dit hier que les Allemands étaient à bout : c'est ce qui nous fait tenir. Embrasse les enfants. »

— Henri Vaillant, soldat au 152ᵉ régiment d'infanterie.

); } function U7Document({ density, qrVisible, scoreVisible, scale = 1 }) { return (
  • Nature :
  • Auteur :
  • Date :
  • Lieu :
Quels éléments du quotidien des soldats sont décrits ? Que révèle la lettre sur le moral des troupes ?
En quoi cette lettre est-elle un témoignage partial ?
); } /* ════════════════════════════════════════════════════════════════════════ 8 · EXPRESSION ÉCRITE (template: "writing-task") ════════════════════════════════════════════════════════════════════════ */ function U8Writing({ density, qrVisible, scoreVisible, scale = 1 }) { return (

Tu rentres tard de la bibliothèque municipale après une journée de révisions. La porte se referme derrière toi. Soudain, l'un des livres glisse seul de l'étagère. Raconte la suite en respectant les codes du récit fantastique : un cadre réaliste, un évènement inexplicable, l'hésitation du narrateur entre rationnel et surnaturel.

Mon récit respecte le genre fantastique. Mes phrases sont correctement ponctuées. J'ai relu et corrigé les fautes d'accord.
Avant la version au propre, écris ton brouillon et lis-le à voix haute : tu repèreras les répétitions et les phrases trop longues.
); } /* ════════════════════════════════════════════════════════════════════════ 9 · CARTE MENTALE (template: "mindmap") ════════════════════════════════════════════════════════════════════════ */ function MindMapSVG() { // 6 branches autour d'un nœud central — version "universelle" (claire & aérée) const branches = [ { x: 90, y: 60, label: "Causes", color: "var(--ae-primary)", align: "end" }, { x: 360, y: 60, label: "Acteurs", color: "var(--ae-orange)", align: "start" }, { x: 60, y: 160, label: "Dates clés", color: "var(--ae-primary)", align: "end" }, { x: 390, y: 160, label: "Lieux", color: "var(--ae-orange)", align: "start" }, { x: 90, y: 260, label: "Conséquences", color: "var(--ae-primary)", align: "end" }, { x: 360, y: 260, label: "Mots clés", color: "var(--ae-orange)", align: "start" }, ]; return ( {/* central node */} Sujet central À écrire au centre {/* branches */} {branches.map((b, i) => { const cx = 225, cy = 160; return ( {b.label} {/* sub-line */} ); })} ); } function U9Mindmap({ density, qrVisible, scoreVisible, scale = 1 }) { return ( Ajoute une 7ᵉ branche avec ton angle préféré du chapitre, en 3 mots-clés.
Une carte mentale efficace tient sur une seule page. Si tu écris des phrases entières, ce n'est plus une carte mais un cours.
); } /* ════════════════════════════════════════════════════════════════════════ 10 · CORRECTION COMPACTE (template: "compact-correction") ════════════════════════════════════════════════════════════════════════ */ function CorrigeCard({ ref: refId, title, color = "primary", children }) { return (
{refId} {title}
{children}
); } function U10Compact({ density, qrVisible, scoreVisible, scale = 1 }) { return (
{[ ["Ex. 1", "p. 122"], ["Ex. 2", "p. 124"], ["Ex. 3", "p. 126"], ["Ex. 4", "p. 128"], ["Ex. 5", "p. 131"], ["Ex. 6", "p. 134"], ].map(([n, p]) => (
{n}
{p}
))}
AB = 6 cm, AC = 8 cm → BC² = 36 + 64 = 100, donc BC = 10 cm.
Étape clé : bien identifier les deux côtés adjacents à l'angle droit.
5² + 12² = 25 + 144 = 169 = 13². Triangle rectangle (en l'angle opposé à 13).
Étape clé : comparer la somme des carrés des petits côtés au carré du plus grand.
AM/AB = AN/AC → 3/9 = AN/12 → AN = 4 cm.
Étape clé : écrire le rapport dans le bon sens (numérateurs sur la même demi-droite).
On vérifie l'égalité AM/AB = AN/AC et l'alignement sur deux droites sécantes.
Étape clé : ne pas oublier la condition d'alignement avant de conclure.
cos(α) = adjacent / hypoténuse = 4 / 5 → α ≈ 36,9°.
Étape clé : identifier hypoténuse avant côté adjacent.
Hauteur du mât = 2,40 / tan(20°) ≈ 6,6 m.
Étape clé : faire un schéma à main levée avant tout calcul.
Recopie l'étape clé de chaque exercice sur ta fiche de révision. C'est ce que tu dois retenir, pas le résultat numérique.

Pour les démonstrations détaillées, scanne le QR du footer : chaque exercice est repris en vidéo (1 min 30 max).

); } /* ──────────────────────────────────────────────────────────────────────── Export ──────────────────────────────────────────────────────────────────────── */ Object.assign(window, { U1Diagnostic, U2Problem, U3Table, U4Match, U5TrueFalse, U6Exam, U7Document, U8Writing, U9Mindmap, U10Compact, });