Skip to content

feat(docs): chip «Spiegamelo facile» — copia pagina + assistenti AI (v0.9.0)#12

Merged
marcofarina merged 7 commits into
mainfrom
feat/copy-page-llm-button
Jun 26, 2026
Merged

feat(docs): chip «Spiegamelo facile» — copia pagina + assistenti AI (v0.9.0)#12
marcofarina merged 7 commits into
mainfrom
feat/copy-page-llm-button

Conversation

@marcofarina

Copy link
Copy Markdown
Owner

Cosa

Aggiunge a ogni lezione un chip «Spiegamelo facile» nella riga delle briciole: copia la pagina in Markdown ripulito e la apre in un assistente AI, oppure copia solo la pagina.

Feature (6691772)

  • plugins/copy-page-md: a build-time emette un .md ripulito per ogni doc (route <permalink>.md), con sanitizer che protegge fenced/inline code e srotola/placeholder-izza i componenti (PyRunner, SQLRunner, Quiz, Algorithm, Tabs, Epigraph). In dev via globalData, in produzione via fetch del file statico.
  • CopyPageButton: dropdown floating-ui; «Copia pagina» riusa la clipboard del PyRunner.
  • DocBreadcrumbs: monta il chip a destra delle briciole.
  • PyRunner/SQLRunner Toolbar (condivisa): «Spiegamelo facile» usa l'icona microchip-ai.

Fix di rifinitura (questa sessione)

  • Gemini rimosso dal dropdown: gemini.google.com/app non onora il prefill via URL (servirebbe un'estensione di terze parti). Restano Claude, Grok, ChatGPT, Perplexity (prefill nativo verificato).
  • Briciole lunghe (desktop): il chip resta sulla prima riga in alto a destra; sono le briciole ad andare a capo internamente, non il chip a scivolare sotto.
  • Mobile (≤768px): briciole sopra a piena larghezza, chip sotto — niente più colonna a parola singola.
  • Menu: group label «Chiedi una spiegazione a» (era «Chiedi aiuto a»).
  • TOC mobile: raggio del box «Su questa pagina» portato a --radius-md, coerente con la scala del progetto.

Verifica

  • npm run build ok (gate link superato).
  • Layout desktop e mobile verificati dal vivo nel browser.

Bump: v0.9.0 (minor, feature).

🤖 Generated with Claude Code

marcofarina and others added 7 commits June 26, 2026 03:20
Aggiunge a ogni lezione un chip nella riga delle briciole che copia la
pagina in Markdown ripulito e la apre in un assistente AI (Gemini, Claude,
Grok, ChatGPT, Perplexity).

- plugins/copy-page-md: a build-time emette un .md ripulito per ogni doc
  (route <permalink>.md). Legge permalink+source via allContentLoaded
  (niente ricalcolo dei permalink); sanitizer che protegge fenced/inline
  code prima di togliere il JSX (PyRunner src inline, InlineCode→backtick,
  Tabs/Epigraph srotolati, Quiz/Algorithm/SQLRunner→placeholder). In dev
  espone il Markdown via globalData; in produzione fetch del file statico.
- CopyPageButton: dropdown floating-ui (riusa il pattern di Tooltip);
  «Copia pagina» riusa la clipboard del PyRunner; font Monaspace.
  Gate interno: null fuori dal DocProvider (pagine category generated-index).
- Icon: loghi brand ufficiali (openai/claude/perplexity/gemini/grok) +
  microchip-ai (FA Pro 7.1.0 duotone) + chevron-down.
- PyRunner Toolbar: il bottone «Spiegamelo facile» usa microchip-ai
  (al posto di faWandMagicSparkles), coerente col chip.
- DocBreadcrumbs: monta il chip a destra delle briciole (flex).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01YbpGP9DBqBWuJKczky3Pxi
L'app web gemini.google.com/app non onora il prefill via URL (?q= /
?prompt=): funziona solo con un'estensione Chrome di terze parti, quindi
il link apriva Gemini vuoto. Tolta la voce dal dropdown.

- providers.ts: rimossa l'entry gemini; restano Claude, Grok, ChatGPT,
  Perplexity (prefill nativo verificato).
- icons.ts: rimossa l'icona gemini (ormai inutilizzata) dal tipo IconName
  e dalla mappa DUOTONE; commenti aggiornati.

Nota: l'alternativa funzionante sarebbe Google AI Mode (udm=50),
Gemini-powered, ma si è preferito togliere la voce anziché mascherarla
da «Google».

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01YbpGP9DBqBWuJKczky3Pxi
Prima il container delle briciole era flex-wrap:wrap con due figli (la <ul>
e il chip): quando le briciole riempivano la riga, il chip intero scendeva
sotto, ancorato a destra ma «allineato a niente».

Ora il container è nowrap e a mandare a capo è la lista delle briciole
(già flex-wrap in Infima), resa flex item elastico (flex:1; min-width:0).
Il chip resta sulla prima riga, in alto a destra (align-items:flex-start),
e le briciole lunghe vanno a capo al loro interno.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01YbpGP9DBqBWuJKczky3Pxi
- DocBreadcrumbs: su mobile (max-width 768px) il container passa a
  flex-direction:column. Tenere il chip in riga costringeva le briciole a
  incolonnarsi una parola per riga (peggio negli esercizi col percorso
  lungo). Ora: briciole sopra a piena larghezza (wrap naturale), chip sotto.
- CopyPageButton: il group label del menu diventa «Chiedi una spiegazione
  a» (era «Chiedi aiuto a»).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01YbpGP9DBqBWuJKczky3Pxi
Il box collassabile «Su questa pagina» (solo mobile) usava il default
Docusaurus --ifm-global-radius (6.4px), fuori dalla scala del progetto:
stonava accanto agli altri box/chip. Portato a --radius-md (14px). Selettore
a classe raddoppiata per battere il CSS module .tocCollapsible_… (pari
specificità, vinceva per ordine di cascata).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01YbpGP9DBqBWuJKczky3Pxi
…'origin reale

Due correzioni emerse dalla review della PR.

- Sanitizzatore (plugins/copy-page-md): il catch-all che rimuove i tag JSX
  usava [^>]* e si fermava al primo «>», anche se dentro una stringa
  d'attributo (es. explainPrompt="se a > b…"), troncando il tag e lasciando
  testo residuo nel .md. Ora un frammento condiviso consuma le stringhe
  quotate per intero, fermandosi sul «>» reale di chiusura del tag.

- CopyPageButton: l'URL del .md passato agli assistenti AI era costruito da
  siteConfig.url (unica URL canonica, build-time). Ora è calcolato a runtime
  da window.location.origin nel click handler, così punta sempre all'host da
  cui la pagina è realmente servita (dominio custom, fallback GitHub Pages o
  deploy di preview) ed è SSR-safe. Rimossi useDocusaurusContext/siteConfig
  inutilizzati.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01YbpGP9DBqBWuJKczky3Pxi
@marcofarina marcofarina merged commit 1227956 into main Jun 26, 2026
@marcofarina marcofarina deleted the feat/copy-page-llm-button branch June 26, 2026 17:29
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant