1
1
import type { CodeProps } from './code' ;
2
2
3
+ import clsx from '../../../utils/tailwind' ;
4
+
3
5
const DEFAULT_LANGUAGE_CLASS = 'language-bash' ;
4
6
7
+ export interface PreProps {
8
+ children : React . ReactElement [ ] | React . ReactElement ;
9
+ className ?: string ;
10
+ }
11
+
5
12
export function parseTitleFromMeta ( meta : string ) : string {
6
13
if ( ! meta ) {
7
14
return '' ;
@@ -16,24 +23,36 @@ export function parseTitleFromMeta(meta: string): string {
16
23
return result ?. replace ( / [ " ' ` ] / g, '' ) ;
17
24
}
18
25
26
+ const renderChildren = ( children : React . ReactElement ) => {
27
+ const { className, meta, ...restProps } = children . props as CodeProps ;
28
+ const codeTitle = parseTitleFromMeta ( meta ) ;
29
+ return (
30
+ < >
31
+ { codeTitle && < div className = "rspress-code-title" > { codeTitle } </ div > }
32
+ < div
33
+ { ...restProps }
34
+ className = { clsx ( 'rspress-code-content rspress-scrollbar' , className ) }
35
+ >
36
+ { children }
37
+ </ div >
38
+ </ >
39
+ ) ;
40
+ } ;
41
+
19
42
export function Pre ( {
20
43
children,
21
- } : {
22
- children : React . ReactElement [ ] | React . ReactElement ;
23
- } ) {
24
- const renderChildren = ( children : React . ReactElement ) => {
25
- const { className, meta } = children . props as CodeProps ;
26
- const codeTitle = parseTitleFromMeta ( meta ) ;
44
+ className = DEFAULT_LANGUAGE_CLASS ,
45
+ } : PreProps ) {
46
+ if ( Array . isArray ( children ) ) {
27
47
return (
28
- < div className = { className || DEFAULT_LANGUAGE_CLASS } >
29
- { codeTitle && < div className = "rspress-code-title" > { codeTitle } </ div > }
30
- < div className = "rspress-code-content rspress-scrollbar" > { children } </ div >
48
+ < div >
49
+ { children . map ( ( child , index ) => (
50
+ < div key = { index } className = { className } >
51
+ { renderChildren ( child ) }
52
+ </ div >
53
+ ) ) }
31
54
</ div >
32
55
) ;
33
- } ;
34
-
35
- if ( Array . isArray ( children ) ) {
36
- return < div > { children . map ( child => renderChildren ( child ) ) } </ div > ;
37
56
}
38
- return renderChildren ( children ) ;
57
+ return < div className = { className } > { renderChildren ( children ) } </ div > ;
39
58
}
0 commit comments