/* global React */
const { useState } = React;
// Helper — shape glyphs (matches mastery legend)
const Shape = ({ kind, mastery = "mastered", size = 12 }) => {
const fill = mastery === "frontier" ? "var(--accent)" :
mastery === "mastered" ? "var(--ink)" : "none";
const stroke = mastery === "locked" ? "var(--ink-4)" :
mastery === "review" ? "var(--ink-3)" : "var(--ink)";
const sw = 1.5;
const dash = mastery === "locked" ? "2,2" : "0";
if (kind === "def") return (
);
if (kind === "thm" || kind === "lem") return (
);
if (kind === "ax") return (
);
if (kind === "proc") return (
);
return null;
};
// ─── Peek primitive ─────────────────────────────────────
// pattern: 'drawer' | 'popover' | 'inline'
function Peek({ pattern = "drawer", entity, anchor, onClose, scope }) {
if (!entity) return null;
const card = (
e.stopPropagation()}>
{entity.kindLabel}
{entity.name}
{entity.id}
{entity.statement}
{entity.uses && (
{entity.uses.map((u, i) => (
{u}
))}
)}
);
if (pattern === "drawer") {
return {card}
;
}
if (pattern === "popover") {
return (
{card}
);
}
return {card}
;
}
// Cite — clickable entity reference
function Cite({ entity, onPeek }) {
return (
{ e.preventDefault(); onPeek(entity); }} href="#">
{entity.short || entity.name}
);
}
// Demo entity registry
const ENT = {
productRule: {
id: "thm.calc.product_rule", kind: "thm", kindLabel: "Theorem",
name: "Product rule", short: "product rule", mastery: "mastered",
statement: "If f and g are differentiable at x, then (fg)′(x) = f′(x)·g(x) + f(x)·g′(x).",
uses: ["lim.calc.0", "def.calc.derivative"]
},
derivative: {
id: "def.calc.derivative", kind: "def", kindLabel: "Definition",
name: "Derivative", short: "derivative", mastery: "frontier",
statement: "f′(x) = lim_{h→0} [f(x+h) − f(x)] / h, when the limit exists.",
uses: ["def.calc.limit"]
},
limit: {
id: "def.calc.limit", kind: "def", kindLabel: "Definition",
name: "Limit", short: "limit", mastery: "mastered",
statement: "lim_{x→a} f(x) = L iff ∀ε>0 ∃δ>0 such that 0 < |x−a| < δ ⟹ |f(x)−L| < ε.",
uses: []
},
composition: {
id: "def.calc.composition", kind: "def", kindLabel: "Definition",
name: "Function composition", short: "composition", mastery: "mastered",
statement: "(f ∘ g)(x) = f(g(x)).",
uses: []
},
diffAtPoint: {
id: "def.calc.diff_at_point", kind: "def", kindLabel: "Definition",
name: "Differentiable at a point", short: "differentiable", mastery: "mastered",
statement: "f is differentiable at a iff f′(a) exists.",
uses: ["def.calc.derivative"]
},
};
window.Shape = Shape;
window.Peek = Peek;
window.Cite = Cite;
window.ENT = ENT;