2024-10-07 18:36:07 -05:00
|
|
|
import { Link, Table } from '@radix-ui/themes';
|
|
|
|
|
import MarkdownToJSX from 'markdown-to-jsx';
|
2025-08-18 11:11:35 -05:00
|
|
|
import type { ComponentProps } from 'react';
|
2026-10-08 20:28:02 +13:00
|
|
|
import { docImageUrl, isExternalImage } from '../core/blitzkit/docImages';
|
2024-10-07 18:36:07 -05:00
|
|
|
|
|
|
|
|
interface MarkdownProps {
|
|
|
|
|
children: string;
|
|
|
|
|
}
|
|
|
|
|
|
2026-10-08 20:28:02 +13:00
|
|
|
function Image({ src, ...props }: ComponentProps<'img'>) {
|
|
|
|
|
return (
|
|
|
|
|
<img
|
|
|
|
|
style={{ maxWidth: '100%' }}
|
|
|
|
|
src={src && isExternalImage(src) ? docImageUrl(src) : src}
|
|
|
|
|
{...props}
|
|
|
|
|
/>
|
|
|
|
|
);
|
2025-08-18 11:11:35 -05:00
|
|
|
}
|
|
|
|
|
|
2024-10-07 18:36:07 -05:00
|
|
|
export function Markdown({ children }: MarkdownProps) {
|
|
|
|
|
return (
|
|
|
|
|
<MarkdownToJSX
|
|
|
|
|
options={{
|
|
|
|
|
overrides: {
|
|
|
|
|
a: { component: Link },
|
|
|
|
|
table: { component: Table.Root },
|
|
|
|
|
thead: { component: Table.Header },
|
|
|
|
|
tbody: { component: Table.Body },
|
|
|
|
|
tr: { component: Table.Row },
|
|
|
|
|
th: { component: Table.ColumnHeaderCell },
|
|
|
|
|
td: { component: Table.Cell },
|
2025-08-18 11:11:35 -05:00
|
|
|
img: { component: Image },
|
2024-10-07 18:36:07 -05:00
|
|
|
},
|
|
|
|
|
}}
|
|
|
|
|
>
|
|
|
|
|
{children}
|
|
|
|
|
</MarkdownToJSX>
|
|
|
|
|
);
|
|
|
|
|
}
|