import type { Components } from "react-markdown"; import Divider from "@moduletrace/twui/layout/Divider"; import H3 from "@moduletrace/twui/layout/H3"; import H4 from "@moduletrace/twui/layout/H4"; import H5 from "@moduletrace/twui/layout/H5"; import P from "@moduletrace/twui/layout/P"; import Span from "@moduletrace/twui/layout/Span"; import Stack from "@moduletrace/twui/layout/Stack"; import MarkdownCodeBlock from "../(partials)/markdown-code-block"; import MarkdownLink from "../(partials)/markdown-link"; import MarkdownList from "../(partials)/markdown-list"; const HeadingClassName = "my-0! text-[15px]! leading-6! tracking-normal! font-bold text-ink"; /** * How a bot message's markdown renders: chat-sized twui elements (headings * no bigger than the bot's name), lists through twui's `List`, code on the * sunken surface, and links that open in a new tab or switch computers. * Tables (GFM) have no children-based twui equivalent, so they're styled * elements. */ export const MessageMarkdownComponents: Components = { p: ({ children }) => (

{children}

), h1: ({ children }) =>

{children}

, h2: ({ children }) =>

{children}

, h3: ({ children }) =>

{children}

, h4: ({ children }) =>
{children}
, h5: ({ children }) =>
{children}
, h6: ({ children }) =>
{children}
, strong: ({ children }) => {children}, em: ({ children }) => {children}, del: ({ children }) => {children}, a: MarkdownLink, ul: ({ children }) => {children}, ol: ({ children, start }) => ( {children} ), code: ({ children }) => ( {children} ), pre: ({ children }) => {children}, blockquote: ({ children }) => ( {children} ), hr: () => , img: ({ src, alt }) => ( {alt || "Image"} ), table: ({ children }) => ( {children}
), th: ({ children }) => ( {children} ), td: ({ children }) => ( {children} ), };