import { renderLatex } from "@ofb/katex"; import { createMemo, createSignal, For } from "solid-js"; const PRESETS = [ { id: "difference-squares", label: "Difference of squares", original: String.raw`\frac{x^2 - 1}{x^2 + x}`, factored: String.raw`\frac{(x-1)(x+1)}{x(x+1)}`, simplified: String.raw`\frac{x-1}{x}`, restriction: String.raw`x \neq 0,\; x \neq -1`, }, { id: "common-factor", label: "Common factor in numerator", original: String.raw`\frac{2x^2 - 8}{x^2 - 4}`, factored: String.raw`\frac{2(x-2)(x+2)}{(x-2)(x+2)}`, simplified: String.raw`2`, restriction: String.raw`x \neq 2,\; x \neq -2`, }, { id: "quadratic-denom", label: "Factorised quadratic denominator", original: String.raw`\frac{x}{x^2 - 5x + 6}`, factored: String.raw`\frac{x}{(x-2)(x-3)}`, simplified: String.raw`\frac{x}{(x-2)(x-3)}`, restriction: String.raw`x \neq 2,\; x \neq 3`, }, ] as const; type PresetId = (typeof PRESETS)[number]["id"]; function FractionSimplifyDemo() { const [presetId, setPresetId] = createSignal(PRESETS[0].id); const preset = createMemo(() => PRESETS.find((p) => p.id === presetId()) ?? PRESETS[0]); const originalHtml = createMemo(() => renderLatex(preset().original, { displayMode: true })); const factoredHtml = createMemo(() => renderLatex(preset().factored, { displayMode: true })); const simplifiedHtml = createMemo(() => renderLatex(preset().simplified, { displayMode: true })); const restrictionHtml = createMemo(() => renderLatex(preset().restriction)); return (
  1. Original
  2. Factorise
  3. Cancel common factors

Cancel only factors that appear in both numerator and denominator.

Restrictions
); } export default FractionSimplifyDemo;