forked from ant-design/ant-design
-
Notifications
You must be signed in to change notification settings - Fork 0
/
LiveCode.tsx
71 lines (63 loc) · 1.92 KB
/
LiveCode.tsx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
import type { ComponentProps, FC } from 'react';
import React from 'react';
import { createStyles } from 'antd-style';
import SourceCodeEditor from 'dumi/theme-default/slots/SourceCodeEditor';
import LiveError from '../slots/LiveError';
const useStyle = createStyles(({ token, css }) => {
const { colorBgContainer } = token;
return {
editor: css`
// override dumi editor styles
.dumi-default-source-code-editor {
.dumi-default-source-code {
background: ${colorBgContainer};
&-scroll-container {
scrollbar-width: thin;
scrollbar-gutter: stable;
}
}
.dumi-default-source-code > pre,
.dumi-default-source-code-scroll-content > pre,
.dumi-default-source-code-editor-textarea {
padding: ${token.paddingSM}px ${token.padding}px;
}
.dumi-default-source-code > pre,
.dumi-default-source-code-scroll-content > pre {
font-size: ${token.fontSize}px;
line-height: 2;
font-family: 'Lucida Console', Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;
}
// disable dumi default copy button
.dumi-default-source-code-copy {
display: none;
}
&::after {
border-radius: 0 !important;
}
&:hover:not(:focus-within) {
&::after {
box-shadow: 0 0 0 1px ${token.colorPrimaryBorderHover} inset;
}
}
}
`,
};
});
const LiveCode: FC<
{
error: Error | null;
} & Pick<ComponentProps<typeof SourceCodeEditor>, 'lang' | 'initialValue' | 'onChange'>
> = (props) => {
const { styles } = useStyle();
return (
<div className={styles.editor}>
<SourceCodeEditor
lang={props.lang}
initialValue={props.initialValue}
onChange={props.onChange}
/>
<LiveError error={props.error} />
</div>
);
};
export default LiveCode;