/* * Vencord, a Discord client mod * Copyright (c) 2024 Vendicated and contributors * SPDX-License-Identifier: GPL-3.0-or-later */ import "./style.css"; import { Devs } from "@utils/constants"; import { classes } from "@utils/misc"; import definePlugin from "@utils/types"; import { React, Tooltip, useMemo } from "@webpack/common"; import { useKatex } from "./katexLoader"; export default definePlugin({ name: "TeX", description: "Typesets math in messages, written as `$x$` or `$$x$$`.", authors: [Devs.Kyuuhachi], patches: [ { find: "inlineCode:{react", replacement: { match: /inlineCode:\{react:\((\i,\i,\i)\)=>/, replace: "$&$self.render($1)??" }, }, ], render({ content }) { const displayMatch = /^\$\$(.*)\$\$$/.exec(content); const inlineMatch = /^\$(.*)\$$/.exec(content); if (displayMatch) return ; if (inlineMatch) return ; } }); function LazyLatex(props) { const { formula, delim } = props; const katex = useKatex(); return katex ? : {formula}; } function Latex({ katex, formula, displayMode, delim }) { const result = useMemo(() => { try { const html = katex.renderToString(formula, { displayMode }); return { html }; } catch (error) { return { error }; } }, [formula, displayMode]); return result.html ? : ; } function LatexError({ formula, delim, error }) { const { rawMessage, position, length } = error; const pre = formula.slice(0, position); const mid = formula.slice(position, position + length); const suf = formula.slice(position + length); return ( {({ onMouseLeave, onMouseEnter }) => ( {pre}{mid}{suf} )} ); } function LatexPlaceholder({ className, delim, children, ...props }) { return ( {delim} {children} {delim} ); }