import { createSignal, Show } from "solid-js"; import { render } from "solid-js/web"; const GRAPH_EDGES: Array<{ from: string; to: string }> = [ { from: "quadratic", to: "sequences" }, { from: "quadratic", to: "functions" }, { from: "sequences", to: "linear-programming" }, { from: "functions", to: "linear-programming" }, ]; function GraphPrereqDemo() { const [focus, setFocus] = createSignal(null); const nodeLit = (id: string) => { const active = focus(); if (!active) return false; if (id === active) return true; return GRAPH_EDGES.some( (edge) => (edge.from === active && edge.to === id) || (edge.from === id && edge.to === active) ); }; const toggle = (id: string) => setFocus((prev) => (prev === id ? null : id)); return (

Click a topic to highlight its prerequisites and follow-on chapters.

); } function CatalogViewsDemo() { const [view, setView] = createSignal<"list" | "map" | "compare">("list"); return (
Number & Algebra Directed numbers Quadratic equations
Sequences Functions

Arrows come from graph.edges only — strand order in JSON does not draw links.

} >
  1. 01 Quadratic equations DSE
  2. 02 Sequences & series Coming soon

List order follows the chapters[] array — your table of contents.

} >

Mathematics only: curricula comparison doc at{" "} ?view=compare (HTML partial, not JSON).

); } export function mountContributingDemos() { const graphRoot = document.getElementById("contributing-demo-graph"); if (graphRoot) { render(() => , graphRoot); } const viewsRoot = document.getElementById("contributing-demo-views"); if (viewsRoot) { render(() => , viewsRoot); } }