// 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 (
);
}
/* ════════════════════════════════════════════════════════════════════════
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 (
N°
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.
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 (
);
}
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 (
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).