feat(apprendista): template esercizi Volume 4 - #11
Merged
Conversation
…debar) Infrastruttura per gli esercizi della Biblioteca dell'Apprendista (Vol. 4): - <ExerciseLink>: card-link lato lezione per gli «Esercizi assegnati». - <LessonMeta>/<Exercise>/<Solution>: pagina-esercizio con provenienza, esercizi numerati e soluzioni in PyRunner readonly. Card di provenienza con lo stile del redesign Claude Design (ancora icona+numero, breadcrumb, teoria), riadattata a token/font/icone del progetto. Niente bordo-accento sinistro. - Modello ibrido: lezione = pagina singola se ha solo esercizi rapidi, categoria se ha anche esercizi dedicati/laboratori. Badge tipo pagina (rapidi/esercizio/laboratorio) con icone duotone (dumbbell/pen/flask). - Sidebar apprendista ristrutturata (volume-sorgente aperto, resto chiuso). - Pagine demo segnaposto + _esercizio-template.mdx (escluso dal build). - Linking solo on-site (doc id/permalink), mai paideia_id. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Ogni pagina-esercizio della Biblioteca dell'Apprendista è monocroma nel colore del suo tipo — rapidi=ambra, esercizio=viola, laboratorio=teal — così il Vol.4 si stacca visivamente dagli altri 3 (che restano blu). La card non-blu era già arrivata; ora il colore si propaga a titolo, chip-numero, bottoni PyRunner, icone e link in prosa. Meccanismo: - frontmatter `exercise_kind` (rapidi|esercizio|laboratorio); - swizzle DocItem/Content imposta `data-exercise-kind` sul solo wrapper del contenuto (sidebar e briciole escluse); - custom.css: blocco [data-exercise-kind] che deriva l'intera famiglia --ifm-color-primary, --at-accent e il gradiente titolo --at-grad-accent da due variabili --ex-pa/--ex-pa-soft (per-tipo, light+dark). - <LessonMeta> non ha più colori hardcoded: eredita l'accento di pagina. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Swizzle di DocBreadcrumbs: dopo la casetta (che punta alla home del sito) inserisce una briciola col nome del volume corrente, linkata all'indice del volume. In Biblioteca dell'Apprendista le briciole erano fuorvianti — la prima voce era il volume-sorgente (es. «Manuale del Programmatore») e sembrava di essere nel Vol.1 invece che negli esercizi del Vol.4. Ora: 🏠 › Biblioteca dell'Apprendista › Manuale del Programmatore › Le basi › … Vale per tutti i volumi (pluginId → nome leggibile). Copia fedele dell'originale a parte la briciola del volume: da ricontrollare agli upgrade. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Il link esercizio↔lezione era scritto a mano in due punti (LessonMeta sull'esercizio + ExerciseLink sulla lezione), da tenere allineati a mano. Ora la fonte di verità è una sola: il frontmatter dell'esercizio (assigned_in/theory). Provenienza e backlink si derivano e si validano a build-time, e gli autori scrivono solo frontmatter + corpo. - plugins/exercise-graph/index.js: nuovo plugin (modello pyrunner) che cammina i 4 volumi, parsa il frontmatter via @docusaurus/utils (parseMarkdownFile + DEFAULT_PARSE_FRONT_MATTER, niente nuova dep), costruisce exercises/byLesson/lessons e li espone via setGlobalData. Validazione strict: assigned_in/theory che non risolvono → throw. Esclude i file con prefisso _/. come content-docs. - src/lib/docResolve.ts: VOLUME_LABELS condiviso (estratto da DocBreadcrumbs) + resolvePermalink via useAllDocsData/versions.current + tipi del global data. - LessonMeta: rifattorizzato propless/derivato; AssignedExercises: nuovo componente che riusa ExerciseLink. - Auto-injection: LessonMeta prepend in DocItem/Content; nuovo wrapper swizzle DocItem/Footer che appende AssignedExercises. - Demo + template migrati al modello solo-frontmatter. Capitolo della lezione-sorgente non mostrato: non derivabile a build-time coi volumi flat (crumb Volume › Lezione). Verificato: typecheck/lint/build verdi; backlink bidirezionali presenti nell'HTML SSR sia sulla lezione sia sull'esercizio. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Il box <Solution> non si apre più al click (rischio spoiler da misclick): ora richiede una pressione continua di 3s. Feedback durante l'hold: barra di avanzamento che riempie il pulsante e cross-fade dell'icona da faccina (face-awesome) a mano-che-preme (hand-pointer); al rilascio anticipato tutto rientra. Una volta rivelata, il pulsante diventa un normale toggle. - progress guidato da requestAnimationFrame inline (resta visibile anche con prefers-reduced-motion, dove le transition globali sono azzerate) - soppressione del click sintetico post-gesto per non richiudere subito - attivazione da tastiera (Enter/Space) deliberata, senza hold - accento legato a --at-accent: ambra su rapidi, viola su esercizio, teal su laboratorio - icone face-awesome + hand-pointer da Font Awesome 7.1.0 duotone Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Nella Biblioteca dell'Apprendista le briciole affiancavano due titoli di libro interi — «Biblioteca dell'Apprendista» (volume corrente) e il volume-sorgente «Manuale del Programmatore» — dando l'impressione di navigare fra due libri. Ora la prima briciola della sidebar (il volume-sorgente) è accorciata a «Vol. N»: si legge come una sezione, non come un libro concorrente, e conserva la provenienza. 🏠 › Biblioteca dell'Apprendista › Vol. 1 › Le basi › … Rietichetta solo client-side e limitata a pluginId 'apprendista'; la sidebar resta col nome lungo. Mappa corta VOLUME_SHORT + helper volumeShortByLabel in docResolve (lookup inverso nome-lungo → Vol. N). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017qp2CZ92ExM3WsDzuVQXRC
Le cifre del numero non hanno discendenti: lo spazio vuoto del descender dell'em-box si accumulava sotto l'inchiostro (≈3,8px), rendendo il chip basso-pesante. line-height:1 + padding verticale asimmetrico in em (0.3em sopra / 0.14em sotto) ricentra; in em scala col font. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017qp2CZ92ExM3WsDzuVQXRC
- soluzione: tessera di puzzle (FA 7.1.0 duotone) al posto della faccina come icona "a riposo", ingrandita (32px) per pareggiare l'altezza di label + hint - card esercizio: la tile del tipo ora è quadrata (46px) e centrata, non più rettangolare stirata a tutta l'altezza della card - bump 0.8.0 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017qp2CZ92ExM3WsDzuVQXRC
Rilievi della review della PR #11, tutti pulizia (nessun cambio a runtime): - Icon: rimossa l'icona morta `face-awesome` (tipo + glifo duotone): la soluzione a riposo usa `puzzle`, `face-awesome` non era mai referenziata. - ExerciseLink: riusa il tipo `Difficulty` da src/lib/docResolve invece di ridichiararlo (una sola fonte per la union). - exercise-graph: `loadContent` non espone piu `lessons` nel global data (serve solo internamente alla validazione; i client usano exercises/byLesson). Tipo `ExerciseGraphData` allineato. - Commenti: aggiornati i riferimenti all'icona a riposo da «faccina»/«lampadina» a «tessera-di-puzzle» (Exercise/index.tsx e styles). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019kfksKgmzWoiSuMLCgFdQb
# Conflicts: # package-lock.json # package.json
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Sintesi
Introduce il template degli esercizi per il Volume 4 (Biblioteca dell'Apprendista): componenti, demo, sidebar e tutte le rifiniture visive successive.
Cosa include
<Exercise>/<ExerciseLink>, pagina demo e voce in sidebar.Versione
Bump minor → 0.8.0.
🤖 Generated with Claude Code