import { BodyText, BodyTextProps, Headline, Link } from '@servicetitan/design-system'; import classNames from 'classnames'; import DOMpurify from 'dompurify'; import { FC, ReactNode, useMemo } from 'react'; import Markdown, { Components } from 'react-markdown'; import rehypeRaw from 'rehype-raw'; import remarkBreaks from 'remark-breaks'; import remarkGfm from 'remark-gfm'; import * as Styles from './markdown-text.module.less'; type Node = { children: ReactNode } & { [key: string]: any }; type MarkdownTextProps = BodyTextProps & { text: string; }; export const MarkdownText: FC = ({ className, text, ...rest }) => { const markdownComponents: Components = useMemo( () => ({ code({ children, ...rest }: Node) { return ( {children} ); }, u({ children }: Node) { return {children}; }, a({ children, href }: Node & { href?: string }) { return ( {children} ); }, h1({ children }: Node) { return ( {children} ); }, h2({ children }: Node) { return ( {children} ); }, h3({ children }: Node) { return ( {children} ); }, h4({ children }: Node) { return ( {children} ); }, h5({ children }: Node) { return ( {children} ); }, h6({ children }: Node) { return ( {children} ); }, }), [] ); return ( {DOMpurify.sanitize(text)} ); };