// MaterialDetail — reading view for a single material. function MaterialDetail({ materialId, onBack }) { const { MATERIALS, SUBJECTS, KINDS, COMMENTS } = window.ECC_DATA; const m = MATERIALS.find(x => x.id === materialId); if (!m) return null; const s = SUBJECTS.find(x => x.id === m.subject); const k = KINDS[m.kind]; const comments = COMMENTS[m.id] || []; return (
{/* Breadcrumb */}
{/* MAIN CONTENT */}
{/* Header */}
{k.label} · {m.chapter}

{m.title}

{m.desc}

{m.time} · {m.pages} páginas · actualizado {m.updated}
{/* Body */}
{m.body.map((block, i) => { const [tag, content] = block; if (tag === 'h3') return

{content}

; if (tag === 'p') return

{content}

; if (tag === 'list') return (
    {content.map((it, j) =>
  • {it}
  • )}
); if (tag === 'note') return ( ); return null; })}
{/* Actions */}
{/* Comments */} {comments.length > 0 && (

Comentarios

{comments.map((c, i) => )}
)}
{/* SIDE TOC */}
); } function CommentRow({ c }) { const isPapa = c.who === 'papá'; return (
{c.who} {c.when}

{c.text}

); } function CommentComposer() { const [val, setVal] = React.useState(''); return (