@@ -4,10 +4,11 @@ import * as R from "remeda";
44
55import { evaluate } from "@mdx-js/mdx" ;
66import * as provider from "@mdx-js/react" ;
7- import { CircularProgress } from "@mui/material" ;
7+ import { CircularProgress , Table , TableBody , TableCell , TableContainer , TableFooter , TableHead , TableRow } from "@mui/material" ;
88import { ErrorBoundary } from "@suspensive/react" ;
99import type { MDXComponents } from "mdx/types" ;
1010import muiComponents from 'mui-mdx-components' ;
11+ import remarkGfm from 'remark-gfm' ;
1112
1213import Hooks from "../hooks" ;
1314import { ErrorFallback } from "./error_handler" ;
@@ -24,6 +25,13 @@ const CustomMDXComponents: MDXComponents = {
2425 'ul' : ( props ) => < ul { ...props } /> ,
2526 'ol' : ( props ) => < ol { ...props } /> ,
2627 'li' : ( props ) => < li { ...props } /> ,
28+ 'table' : ( props ) => < TableContainer > < Table { ...props } /> </ TableContainer > ,
29+ 'thead' : ( props ) => < TableHead { ...props } /> ,
30+ 'tbody' : ( props ) => < TableBody { ...props } /> ,
31+ 'tfoot' : ( props ) => < TableFooter { ...props } /> , // MDX에서는 <tfoot>을 사용하지 않지만, 호환성을 위해 추가합니다.
32+ 'tr' : ( props ) => < TableRow { ...props } /> ,
33+ 'th' : ( props ) => < TableCell { ...props } /> ,
34+ 'td' : ( props ) => < TableCell { ...props } /> ,
2735}
2836
2937const lineFormatterForMDX = ( line : string ) => {
@@ -35,6 +43,9 @@ const lineFormatterForMDX = (line: string) => {
3543 // 그러나 \n\n으로 변환할 경우, 다음 단계에서 <br />로 변환되므로, import문 다음에 공백이 있는 줄을 넣어서 <br />로 변환되지 않도록 합니다.
3644 if ( trimmedLine . startsWith ( "import" ) ) return `${ trimmedLine } \n \n` ;
3745
46+ // Table인 경우, 뒤에 공백을 추가하지 않습니다.
47+ if ( trimmedLine . startsWith ( "|" ) && trimmedLine . endsWith ( "|" ) ) return `${ trimmedLine } \n` ;
48+
3849 return `${ trimmedLine } \n` ;
3950}
4051
@@ -55,7 +66,7 @@ export const MDXRenderer: React.FC<{ text: string; resetKey?: number }> = ({ tex
5566 // 원래 MDX는 각 줄의 마지막에 공백 2개가 있어야 줄바꿈이 되고, 또 연속 줄바꿈은 무시되지만,
5667 // 편의성을 위해 렌더러 단에서 공백 2개를 추가하고 연속 줄바꿈을 <br />로 변환합니다.
5768 const processedText = text . split ( "\n" ) . map ( lineFormatterForMDX ) . join ( "" ) . replaceAll ( "\n\n" , "\n<br />\n" ) ;
58- const { default : RenderResult } = await evaluate ( processedText , { ...runtime , ...provider , baseUrl } ) ;
69+ const { default : RenderResult } = await evaluate ( processedText , { ...runtime , ...provider , baseUrl, remarkPlugins : [ remarkGfm ] } ) ;
5970 setRenderResult ( < RenderResult components = { muiComponents ( { overrides : { ...CustomMDXComponents , ...( mdxComponents || { } ) } } ) } /> ) ;
6071 } catch ( error ) {
6172 setRenderResult ( < ErrorFallback error = { error as Error } reset = { setRandomResetKey } /> ) ;
0 commit comments