Skip to content

Commit e386467

Browse files
committed
feat(theme): doc-layout pre component merge class-names
1 parent 93936da commit e386467

File tree

1 file changed

+33
-14
lines changed
  • packages/theme-default/src/layout/DocLayout/docComponents

1 file changed

+33
-14
lines changed
Lines changed: 33 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,14 @@
11
import type { CodeProps } from './code';
22

3+
import clsx from '../../../utils/tailwind';
4+
35
const DEFAULT_LANGUAGE_CLASS = 'language-bash';
46

7+
export interface PreProps {
8+
children: React.ReactElement[] | React.ReactElement;
9+
className?: string;
10+
}
11+
512
export function parseTitleFromMeta(meta: string): string {
613
if (!meta) {
714
return '';
@@ -16,24 +23,36 @@ export function parseTitleFromMeta(meta: string): string {
1623
return result?.replace(/["'`]/g, '');
1724
}
1825

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+
1942
export function Pre({
2043
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)) {
2747
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+
))}
3154
</div>
3255
);
33-
};
34-
35-
if (Array.isArray(children)) {
36-
return <div>{children.map(child => renderChildren(child))}</div>;
3756
}
38-
return renderChildren(children);
57+
return <div className={className}>{renderChildren(children)}</div>;
3958
}

0 commit comments

Comments
 (0)