"use client"; import { memo, PropsWithChildren } from "react"; import ReactMarkdown, { type Components } from "react-markdown"; import remarkGfm from "remark-gfm"; import remarkMath from "remark-math"; import rehypeKatex from "rehype-katex"; import { PreBlock } from "./pre-block"; import { isJson, isString, toAny } from "lib/utils"; import JsonView from "ui/json-view"; import { LinkIcon } from "lucide-react"; import { Table, TableHeader, TableBody, TableRow, TableHead, TableCell, } from "ui/table"; const FadeIn = memo(({ children }: PropsWithChildren) => { return {children} ; }); FadeIn.displayName = "FadeIn"; export const WordByWordFadeIn = memo(({ children }: PropsWithChildren) => { const childrens = [children] .flat() .flatMap((child) => (isString(child) ? child.split(" ") : child)); return childrens.map((word, index) => isString(word) ? {word} : word, ); }); WordByWordFadeIn.displayName = "WordByWordFadeIn"; const components: Partial = { table: ({ node, children, ...props }) => { return (
{children}
); }, thead: ({ node, children, ...props }) => { return {children}; }, tbody: ({ node, children, ...props }) => { return {children}; }, tr: ({ node, children, ...props }) => { return {children}; }, th: ({ node, children, ...props }) => { return ( {children} ); }, td: ({ node, children, ...props }) => { return ( {children} ); }, code: ({ children }) => { return ( {children} ); }, blockquote: ({ children }) => { return (
{children}
); }, p: ({ children }) => { return (

{children}

); }, pre: ({ children }) => { return (
{children}
); }, ol: ({ node, children, ...props }) => { return (
    {children}
); }, li: ({ node, children, ...props }) => { return (
  • {children}
  • ); }, ul: ({ node, children, ...props }) => { return ( ); }, strong: ({ node, children, ...props }) => { return ( {children} ); }, a: ({ node, children, ...props }) => { return ( {children} ); }, h1: ({ node, children, ...props }) => { return (

    {children}

    ); }, h2: ({ node, children, ...props }) => { return (

    {children}

    ); }, h3: ({ node, children, ...props }) => { return (

    {children}

    ); }, h4: ({ node, children, ...props }) => { return (

    {children}

    ); }, h5: ({ node, children, ...props }) => { return (
    {children}
    ); }, h6: ({ node, children, ...props }) => { return (
    {children}
    ); }, img: ({ node, children, ...props }) => { const { src, alt, ...rest } = props; return src ? ( // eslint-disable-next-line @next/next/no-img-element {alt} ) : null; }, }; const NonMemoizedMarkdown = ({ children }: { children: string }) => { return (
    {isJson(children) ? ( ) : ( {children} )}
    ); }; export const Markdown = memo( NonMemoizedMarkdown, (prevProps, nextProps) => prevProps.children === nextProps.children, );