import { Box, Typography, type TypographyProps } from '@mui/material'
import type { Components } from 'react-markdown'
import { MarkdownContent } from './markdown-content'
import { styles } from './style'
export interface MarkdownUIProps {
content: string
}
/** MUI-styled element mapping for `react-markdown`. */
const components: Components = {
h1: (props) => mdHeading(props, 'h4'),
h2: (props) => mdHeading(props, 'h5'),
h3: (props) => mdHeading(props, 'h6'),
h4: (props) => mdHeading(props, 'subtitle1'),
h5: (props) => mdHeading(props, 'subtitle2'),
h6: (props) => mdHeading(props, 'subtitle2'),
p: ({ children }) => (
{children}
),
}
function mdHeading(
props: { children?: React.ReactNode },
variant: TypographyProps['variant'],
) {
return (
{props.children}
)
}
/**
* Pure presentational component for the Markdown widget. Delegates the
* `react-markdown` engine to {@link MarkdownContent} and supplies a
* document-style MUI element mapping (body2 paragraphs, real heading
* typography). Opts INTO raw HTML and inline images — the Markdown widget is
* the one slot in the library where authors can ship rich content. Caption
* slots like `Note` keep the conservative defaults.
*/
export function MarkdownUI({ content }: MarkdownUIProps) {
return (
)
}