1234567891011121314151617181920212223242526272829303132333435363738394041 |
- import ReactMarkdown from "react-markdown";
- import "katex/dist/katex.min.css";
- import RemarkMath from "remark-math";
- import RehypeKatex from "rehype-katex";
- import RemarkGfm from "remark-gfm";
- import RehypePrsim from "rehype-prism-plus";
- import { useRef } from "react";
- import { copyToClipboard } from "../utils";
- export function PreCode(props: { children: any }) {
- const ref = useRef<HTMLPreElement>(null);
- return (
- <pre ref={ref}>
- <span
- className="copy-code-button"
- onClick={() => {
- if (ref.current) {
- const code = ref.current.innerText;
- copyToClipboard(code);
- }
- }}
- ></span>
- {props.children}
- </pre>
- );
- }
- export function Markdown(props: { content: string }) {
- return (
- <ReactMarkdown
- remarkPlugins={[RemarkMath, RemarkGfm]}
- rehypePlugins={[RehypeKatex, [RehypePrsim, { ignoreMissing: true }]]}
- components={{
- pre: PreCode,
- }}
- >
- {props.content}
- </ReactMarkdown>
- );
- }
|