Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
50 changes: 50 additions & 0 deletions components/knowledge/KatexFormula.jsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
import katex from "katex";

/*
* Split out from KnowledgeLayout.jsx so pages that never render maths don't
* pull the katex JS (and its CSS, imported alongside these components) into
* their bundle. Only the ~39 knowledge topics that use <Formula>/<TeX> import
* from this module.
*/

/**
* Centred display formula, rendered with KaTeX.
* `children` is a LaTeX string (use a template literal; `\\` starts a new line,
* and `\begin{aligned}…\end{aligned}` lays out a multi-step derivation).
* `label` is the accessible description read by screen readers.
* `caption` optionally annotates the formula beneath it.
*/
export function Formula({ children, label, caption }) {
const tex = typeof children === "string" ? children : String(children ?? "");
const html = katex.renderToString(tex, {
displayMode: true,
throwOnError: false,
strict: false,
});
return (
<div className="not-prose my-7">
<div
className="px-5 py-5 bg-[#F7F7F7] dark:bg-[#0D0D0D] border border-[#E0E0E0] dark:border-[#2A2A2A] overflow-x-auto text-[#1A1A1A] dark:text-[#E8E8E8]"
role="math"
aria-label={label}
dangerouslySetInnerHTML={{ __html: html }}
/>
{caption && (
<p className="mt-2 text-[12px] text-[#7A7A7A] dark:text-[#6E6E6E] [text-wrap:pretty]">
{caption}
</p>
)}
</div>
);
}

/** Inline maths, rendered with KaTeX. `children` is a LaTeX string. */
export function TeX({ children, label }) {
const tex = typeof children === "string" ? children : String(children ?? "");
const html = katex.renderToString(tex, {
displayMode: false,
throwOnError: false,
strict: false,
});
return <span role="math" aria-label={label || tex} dangerouslySetInnerHTML={{ __html: html }} />;
}
50 changes: 4 additions & 46 deletions components/knowledge/KnowledgeLayout.jsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
import Head from "next/head";
import Link from "next/link";
import katex from "katex";
import SeoHead from "@/components/seo/SeoHead";
import { useI18n } from "@/contexts/I18nContext";

Expand All @@ -12,12 +11,13 @@
* frame — header, provenance strip, table of contents, prose body, refresher,
* footer nav, SEO + JSON-LD — so each topic page only writes its content.
*
* Companion primitives (KSection, Callout, Formula, Figure, Term, KList) are
* exported from this module and are designed to sit inside <prose> safely
* (they opt out with `not-prose` where the typography plugin would interfere).
* Companion primitives (KSection, Callout, Figure, Term) are exported from
* this module and are designed to sit inside <prose> safely (they opt out
* with `not-prose` where the typography plugin would interfere). Formula/TeX
* live in ./KatexFormula.jsx so pages without maths don't bundle katex.
*/

const ACCENT = "#FF3C3C";

Check warning on line 20 in components/knowledge/KnowledgeLayout.jsx

View workflow job for this annotation

GitHub Actions / Lint

'ACCENT' is assigned a value but never used

/** Provenance row — "where this knowledge comes from". */
function MetaItem({ label, children }) {
Expand Down Expand Up @@ -289,48 +289,6 @@
);
}

/**
* Centred display formula, rendered with KaTeX.
* `children` is a LaTeX string (use a template literal; `\\` starts a new line,
* and `\begin{aligned}…\end{aligned}` lays out a multi-step derivation).
* `label` is the accessible description read by screen readers.
* `caption` optionally annotates the formula beneath it.
*/
export function Formula({ children, label, caption }) {
const tex = typeof children === "string" ? children : String(children ?? "");
const html = katex.renderToString(tex, {
displayMode: true,
throwOnError: false,
strict: false,
});
return (
<div className="not-prose my-7">
<div
className="px-5 py-5 bg-[#F7F7F7] dark:bg-[#0D0D0D] border border-[#E0E0E0] dark:border-[#2A2A2A] overflow-x-auto text-[#1A1A1A] dark:text-[#E8E8E8]"
role="math"
aria-label={label}
dangerouslySetInnerHTML={{ __html: html }}
/>
{caption && (
<p className="mt-2 text-[12px] text-[#7A7A7A] dark:text-[#6E6E6E] [text-wrap:pretty]">
{caption}
</p>
)}
</div>
);
}

/** Inline maths, rendered with KaTeX. `children` is a LaTeX string. */
export function TeX({ children, label }) {
const tex = typeof children === "string" ? children : String(children ?? "");
const html = katex.renderToString(tex, {
displayMode: false,
throwOnError: false,
strict: false,
});
return <span role="math" aria-label={label || tex} dangerouslySetInnerHTML={{ __html: html }} />;
}

/** Figure wrapper for inline SVG diagrams + caption. */
export function Figure({ children, caption }) {
return (
Expand Down
10 changes: 2 additions & 8 deletions components/knowledge/content/artificial-intelligence.jsx
Original file line number Diff line number Diff line change
@@ -1,12 +1,6 @@
import Link from "next/link";
import {
KSection,
Callout,
Formula,
Figure,
TeX,
Term,
} from "@/components/knowledge/KnowledgeLayout";
import { KSection, Callout, Figure, Term } from "@/components/knowledge/KnowledgeLayout";
import { Formula, TeX } from "@/components/knowledge/KatexFormula";

/**
* Per-locale content for /knowledge/artificial-intelligence.
Expand Down
10 changes: 2 additions & 8 deletions components/knowledge/content/bayesian-statistics.jsx
Original file line number Diff line number Diff line change
@@ -1,12 +1,6 @@
import Link from "next/link";
import {
KSection,
Callout,
Formula,
Figure,
TeX,
Term,
} from "@/components/knowledge/KnowledgeLayout";
import { KSection, Callout, Figure, Term } from "@/components/knowledge/KnowledgeLayout";
import { Formula, TeX } from "@/components/knowledge/KatexFormula";

/**
* Per-locale content for /knowledge/bayesian-statistics.
Expand Down
3 changes: 2 additions & 1 deletion components/knowledge/content/calculus-optimisation.jsx
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import Link from "next/link";
import { KSection, Callout, Formula, Figure, Term } from "@/components/knowledge/KnowledgeLayout";
import { KSection, Callout, Figure, Term } from "@/components/knowledge/KnowledgeLayout";
import { Formula } from "@/components/knowledge/KatexFormula";

/**
* Per-locale content for /knowledge/calculus-optimisation.
Expand Down
10 changes: 2 additions & 8 deletions components/knowledge/content/causal-inference.jsx
Original file line number Diff line number Diff line change
@@ -1,12 +1,6 @@
import Link from "next/link";
import {
KSection,
Callout,
Formula,
Figure,
TeX,
Term,
} from "@/components/knowledge/KnowledgeLayout";
import { KSection, Callout, Figure, Term } from "@/components/knowledge/KnowledgeLayout";
import { Formula, TeX } from "@/components/knowledge/KatexFormula";

/**
* Per-locale content for /knowledge/causal-inference.
Expand Down
10 changes: 2 additions & 8 deletions components/knowledge/content/cluster-cloud-computing.jsx
Original file line number Diff line number Diff line change
@@ -1,12 +1,6 @@
import Link from "next/link";
import {
KSection,
Callout,
Formula,
Figure,
TeX,
Term,
} from "@/components/knowledge/KnowledgeLayout";
import { KSection, Callout, Figure, Term } from "@/components/knowledge/KnowledgeLayout";
import { Formula, TeX } from "@/components/knowledge/KatexFormula";

/**
* Per-locale content for /knowledge/cluster-cloud-computing.
Expand Down
10 changes: 2 additions & 8 deletions components/knowledge/content/clustering.jsx
Original file line number Diff line number Diff line change
@@ -1,12 +1,6 @@
import Link from "next/link";
import {
KSection,
Callout,
Formula,
Figure,
TeX,
Term,
} from "@/components/knowledge/KnowledgeLayout";
import { KSection, Callout, Figure, Term } from "@/components/knowledge/KnowledgeLayout";
import { Formula, TeX } from "@/components/knowledge/KatexFormula";

/**
* Per-locale content for /knowledge/clustering.
Expand Down
10 changes: 2 additions & 8 deletions components/knowledge/content/computational-statistics.jsx
Original file line number Diff line number Diff line change
@@ -1,12 +1,6 @@
import Link from "next/link";
import {
KSection,
Callout,
Formula,
Figure,
TeX,
Term,
} from "@/components/knowledge/KnowledgeLayout";
import { KSection, Callout, Figure, Term } from "@/components/knowledge/KnowledgeLayout";
import { Formula, TeX } from "@/components/knowledge/KatexFormula";

/**
* Per-locale content for /knowledge/computational-statistics.
Expand Down
10 changes: 2 additions & 8 deletions components/knowledge/content/conformal-prediction.jsx
Original file line number Diff line number Diff line change
@@ -1,12 +1,6 @@
import Link from "next/link";
import {
KSection,
Callout,
Formula,
Figure,
TeX,
Term,
} from "@/components/knowledge/KnowledgeLayout";
import { KSection, Callout, Figure, Term } from "@/components/knowledge/KnowledgeLayout";
import { Formula, TeX } from "@/components/knowledge/KatexFormula";

/**
* Per-locale content for /knowledge/conformal-prediction.
Expand Down
10 changes: 2 additions & 8 deletions components/knowledge/content/deep-learning.jsx
Original file line number Diff line number Diff line change
@@ -1,12 +1,6 @@
import Link from "next/link";
import {
KSection,
Callout,
Formula,
Figure,
TeX,
Term,
} from "@/components/knowledge/KnowledgeLayout";
import { KSection, Callout, Figure, Term } from "@/components/knowledge/KnowledgeLayout";
import { Formula, TeX } from "@/components/knowledge/KatexFormula";

/**
* Per-locale content for /knowledge/deep-learning.
Expand Down
10 changes: 2 additions & 8 deletions components/knowledge/content/differential-privacy.jsx
Original file line number Diff line number Diff line change
@@ -1,12 +1,6 @@
import Link from "next/link";
import {
KSection,
Callout,
Formula,
Figure,
TeX,
Term,
} from "@/components/knowledge/KnowledgeLayout";
import { KSection, Callout, Figure, Term } from "@/components/knowledge/KnowledgeLayout";
import { Formula, TeX } from "@/components/knowledge/KatexFormula";

/**
* Per-locale content for /knowledge/differential-privacy.
Expand Down
10 changes: 2 additions & 8 deletions components/knowledge/content/ensemble-methods.jsx
Original file line number Diff line number Diff line change
@@ -1,12 +1,6 @@
import Link from "next/link";
import {
KSection,
Callout,
Formula,
Figure,
TeX,
Term,
} from "@/components/knowledge/KnowledgeLayout";
import { KSection, Callout, Figure, Term } from "@/components/knowledge/KnowledgeLayout";
import { Formula, TeX } from "@/components/knowledge/KatexFormula";

/**
* Per-locale content for /knowledge/ensemble-methods.
Expand Down
10 changes: 2 additions & 8 deletions components/knowledge/content/extreme-value-theory.jsx
Original file line number Diff line number Diff line change
@@ -1,12 +1,6 @@
import Link from "next/link";
import {
KSection,
Callout,
Formula,
Figure,
TeX,
Term,
} from "@/components/knowledge/KnowledgeLayout";
import { KSection, Callout, Figure, Term } from "@/components/knowledge/KnowledgeLayout";
import { Formula, TeX } from "@/components/knowledge/KatexFormula";

/**
* Per-locale content for /knowledge/extreme-value-theory.
Expand Down
10 changes: 2 additions & 8 deletions components/knowledge/content/feature-engineering.jsx
Original file line number Diff line number Diff line change
@@ -1,12 +1,6 @@
import Link from "next/link";
import {
KSection,
Callout,
Formula,
Figure,
TeX,
Term,
} from "@/components/knowledge/KnowledgeLayout";
import { KSection, Callout, Figure, Term } from "@/components/knowledge/KnowledgeLayout";
import { Formula, TeX } from "@/components/knowledge/KatexFormula";

/**
* Per-locale content for /knowledge/feature-engineering.
Expand Down
10 changes: 2 additions & 8 deletions components/knowledge/content/gaussian-processes.jsx
Original file line number Diff line number Diff line change
@@ -1,12 +1,6 @@
import Link from "next/link";
import {
KSection,
Callout,
Formula,
Figure,
TeX,
Term,
} from "@/components/knowledge/KnowledgeLayout";
import { KSection, Callout, Figure, Term } from "@/components/knowledge/KnowledgeLayout";
import { Formula, TeX } from "@/components/knowledge/KatexFormula";

/**
* Per-locale content for /knowledge/gaussian-processes.
Expand Down
10 changes: 2 additions & 8 deletions components/knowledge/content/graph-neural-networks.jsx
Original file line number Diff line number Diff line change
@@ -1,12 +1,6 @@
import Link from "next/link";
import {
KSection,
Callout,
Formula,
Figure,
TeX,
Term,
} from "@/components/knowledge/KnowledgeLayout";
import { KSection, Callout, Figure, Term } from "@/components/knowledge/KnowledgeLayout";
import { Formula, TeX } from "@/components/knowledge/KatexFormula";

/**
* Per-locale content for /knowledge/graph-neural-networks.
Expand Down
10 changes: 2 additions & 8 deletions components/knowledge/content/information-retrieval.jsx
Original file line number Diff line number Diff line change
@@ -1,12 +1,6 @@
import Link from "next/link";
import {
KSection,
Callout,
Formula,
Figure,
TeX,
Term,
} from "@/components/knowledge/KnowledgeLayout";
import { KSection, Callout, Figure, Term } from "@/components/knowledge/KnowledgeLayout";
import { Formula, TeX } from "@/components/knowledge/KatexFormula";

/**
* Per-locale content for /knowledge/information-retrieval.
Expand Down
10 changes: 2 additions & 8 deletions components/knowledge/content/kalman-filter.jsx
Original file line number Diff line number Diff line change
@@ -1,12 +1,6 @@
import Link from "next/link";
import {
KSection,
Callout,
Formula,
Figure,
TeX,
Term,
} from "@/components/knowledge/KnowledgeLayout";
import { KSection, Callout, Figure, Term } from "@/components/knowledge/KnowledgeLayout";
import { Formula, TeX } from "@/components/knowledge/KatexFormula";

/**
* Per-locale content for /knowledge/kalman-filter.
Expand Down
10 changes: 2 additions & 8 deletions components/knowledge/content/large-language-models.jsx
Original file line number Diff line number Diff line change
@@ -1,12 +1,6 @@
import Link from "next/link";
import {
KSection,
Callout,
Formula,
Figure,
TeX,
Term,
} from "@/components/knowledge/KnowledgeLayout";
import { KSection, Callout, Figure, Term } from "@/components/knowledge/KnowledgeLayout";
import { Formula, TeX } from "@/components/knowledge/KatexFormula";

/**
* Per-locale content for /knowledge/large-language-models.
Expand Down
3 changes: 2 additions & 1 deletion components/knowledge/content/linear-algebra.jsx
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import Link from "next/link";
import { KSection, Callout, Formula, Figure, Term } from "@/components/knowledge/KnowledgeLayout";
import { KSection, Callout, Figure, Term } from "@/components/knowledge/KnowledgeLayout";
import { Formula } from "@/components/knowledge/KatexFormula";

/**
* Per-locale content for /knowledge/linear-algebra.
Expand Down
3 changes: 2 additions & 1 deletion components/knowledge/content/linear-statistical-models.jsx
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import Link from "next/link";
import { KSection, Callout, Formula, Figure, Term } from "@/components/knowledge/KnowledgeLayout";
import { KSection, Callout, Figure, Term } from "@/components/knowledge/KnowledgeLayout";
import { Formula } from "@/components/knowledge/KatexFormula";

/**
* Per-locale content for /knowledge/linear-statistical-models.
Expand Down
Loading
Loading