Skip to content

Commit 95c681f

Browse files
committed
refactor: refactor code.
1 parent d4d6330 commit 95c681f

25 files changed

+413
-444
lines changed

core/README.md

Lines changed: 122 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -14,82 +14,129 @@ npm install react-code-preview-layout --save
1414

1515
## 基本用法
1616

17-
```tsx
17+
```jsx mdx:preview
1818
import React from "react"
1919
import CodeLayout from "react-code-preview-layout"
2020
const code = `import React from "react";\nimport { Button } from "uiw";\nconst Demo = ()=>{\n return<div><Button>按钮</Button></div>\n};\nexport default Demo;`
2121

22-
const Demo = ()=>{
23-
return <CodeLayout
24-
title="示例"
25-
code={<code style={{color:"red"}} >{code}</code>}
26-
copyNodes={code}
27-
>
28-
<div>示例内容</div>
29-
</CodeLayout>
22+
const Demo = () => {
23+
return (
24+
<CodeLayout
25+
title="示例"
26+
code={<code>{code}</code>}
27+
copyNodes={code}
28+
>
29+
<div>这里是示例展示</div>
30+
</CodeLayout>
31+
);
32+
}
33+
export default Demo;
34+
```
35+
36+
## 禁用方格背景
37+
38+
```jsx mdx:preview
39+
import React from "react"
40+
import CodeLayout from "react-code-preview-layout"
41+
const code = `import React from "react";\nimport { Button } from "uiw";\nconst Demo = ()=>{\n return<div><Button>按钮</Button></div>\n};\nexport default Demo;`
42+
43+
const Demo = () => {
44+
return (
45+
<CodeLayout
46+
title="示例"
47+
code={<code>{code}</code>}
48+
copyNodes={code}
49+
disableCheckered
50+
>
51+
<div>这里方格背景被禁用了</div>
52+
</CodeLayout>
53+
);
3054
}
3155
export default Demo;
3256
```
3357

3458
## 无边框
3559

36-
```tsx
60+
```jsx mdx:preview
3761
import React from "react"
3862
import CodeLayout from "react-code-preview-layout"
3963
const code = `import React from "react";\nimport { Button } from "uiw";\nconst Demo = ()=>{\n return<div><Button>按钮</Button></div>\n};\nexport default Demo;`
40-
const Demo = ()=>{
41-
return <CodeLayout
42-
code={<code style={{color:"red"}} >{code}</code>}
43-
copyNodes={code}
44-
bordered={false}
64+
const Demo = () => (
65+
<CodeLayout
66+
code={<code>{code}</code>}
67+
text={code}
68+
bordered={false}
4569
>
4670
<div>示例内容</div>
4771
</CodeLayout>
48-
}
72+
);
4973
export default Demo;
5074
```
5175

5276
## 自定义操作按钮
5377

54-
```tsx
78+
```jsx mdx:preview?title=自定义操作按钮
5579
import React from "react"
5680
import CodeLayout from "react-code-preview-layout"
5781
const code = `import React from "react";\nimport { Button } from "uiw";\nconst Demo = ()=>{\n return<div><Button>按钮</Button></div>\n};\nexport default Demo;`
5882
const Demo = () => {
59-
return <CodeLayout
60-
code={<code style={{color:"red"}} >{code}</code>}
61-
copyNodes={code}
62-
customButton={<div>按钮</div>}
83+
return (
84+
<CodeLayout
85+
code={<code>{code}</code>}
86+
copyNodes={code}
87+
toolbar={<div>按钮</div>}
88+
>
89+
<div>示例内容</div>
90+
</CodeLayout>
91+
);
92+
}
93+
export default Demo;
94+
```
95+
96+
## 禁用工具栏
97+
98+
```jsx mdx:preview?title=禁用工具栏
99+
import React from "react"
100+
import CodeLayout from "react-code-preview-layout"
101+
const code = `import React from "react";\nimport { Button } from "uiw";\nconst Demo = ()=>{\n return<div><Button>按钮</Button></div>\n};\nexport default Demo;`;
102+
103+
const Demo = ()=> (
104+
<CodeLayout
105+
code={<code>{code}</code>}
106+
text={code}
107+
disableTollbar
63108
>
64109
<div>示例内容</div>
65110
</CodeLayout>
66-
}
111+
);
67112
export default Demo;
68113
```
69114

70-
## 无操作按钮
115+
## 禁用代码展示
71116

72-
```tsx
117+
```jsx mdx:preview?title=禁用代码展示
73118
import React from "react"
74119
import CodeLayout from "react-code-preview-layout"
75-
const code = `import React from "react";\nimport { Button } from "uiw";\nconst Demo = ()=>{\n return<div><Button>按钮</Button></div>\n};\nexport default Demo;`
76-
const Demo = ()=>{
77-
return <CodeLayout
78-
code={<code style={{color:"red"}} >{code}</code>}
79-
copyNodes={code}
80-
noButton={true}
120+
const code = `import React from "react";\nimport { Button } from "uiw";\nconst Demo = ()=>{\n return<div><Button>按钮</Button></div>\n};\nexport default Demo;`;
121+
122+
const Demo = ()=> (
123+
<CodeLayout
124+
code={<code>{code}</code>}
125+
text={code}
126+
disableCode
81127
>
82128
<div>示例内容</div>
83129
</CodeLayout>
84-
}
130+
);
85131
export default Demo;
86132
```
87133

88-
## 第三方预览参数
134+
## 添加 Codepen 按钮
89135

90-
```tsx
136+
```jsx mdx:preview?title=添加 Codepen 按钮
91137
import React from "react"
92138
import CodeLayout from "react-code-preview-layout"
139+
import Codepen from '@uiw/react-codepen';
93140
const code = `import React from "react";\nimport { Button } from "uiw";\nconst Demo = ()=>{\n return<div><Button>按钮</Button></div>\n};\nexport default Demo;`
94141

95142
const codePenOptions = {
@@ -101,32 +148,56 @@ const codePenOptions = {
101148
js_external: `https://unpkg.com/[email protected]/umd/react.development.js;https://unpkg.com/[email protected]/umd/react-dom.development.js;https://unpkg.com/[email protected]/index.js;https://unpkg.com/[email protected]/dist/uiw.min.js;https://unpkg.com/@uiw/[email protected]/index.js`,
102149
}
103150

104-
const Demo = ()=>{
105-
return <CodeLayout
106-
code={<code style={{color:"red"}} >{code}</code>}
107-
copyNodes={code}
108-
codePenOptions={codePenOptions}
151+
const Demo = () => (
152+
<CodeLayout
153+
code={
154+
<code>{code}</code>
155+
}
156+
text={code}
157+
toolbarExtra={
158+
<Codepen {...codePenOptions}>
159+
<svg viewBox="0 0 1024 1024" width="18" height="18">
160+
<path
161+
d="M123.428571 668l344.571429 229.714286v-205.142857L277.142857 565.142857z m-35.428571-82.285714l110.285714-73.714286-110.285714-73.714286v147.428572z m468 312l344.571429-229.714286-153.714286-102.857143-190.857143 127.428572v205.142857z m-44-281.714286l155.428571-104-155.428571-104-155.428571 104zM277.142857 458.857143l190.857143-127.428572V126.285714L123.428571 356z m548.571429 53.142857l110.285714 73.714286V438.285714z m-78.857143-53.142857l153.714286-102.857143-344.571429-229.714286v205.142857z m277.142857-102.857143v312q0 23.428571-19.428571 36.571429l-468 312q-12 7.428571-24.571429 7.428571t-24.571429-7.428571L19.428571 704.571429q-19.428571-13.142857-19.428571-36.571429V356q0-23.428571 19.428571-36.571429L487.428571 7.428571q12-7.428571 24.571429-7.428571t24.571429 7.428571l468 312q19.428571 13.142857 19.428571 36.571429z"
162+
p-id="2071"
163+
></path>
164+
</svg>
165+
</Codepen>
166+
}
109167
>
110168
<div>示例内容</div>
111169
</CodeLayout>
112-
}
170+
);
113171
export default Demo;
114172
```
115173

116174
## Props
117175

118-
| 参数 | 说明 | 类型 | 默认值 |
119-
|--------- |-------- |---------- |-------- |
120-
| code | 代码块内容展示 | `React.ReactNode` | - |
121-
| copyNodes | 复制按钮复制的内容 | `string` | false |
122-
| customButton | 自定义操作按钮 | `React.ReactNode` | - |
123-
| codePadding |代码块内容展示内边距 | number | `16` |
124-
| noButton | 不展示操作按钮 | `boolean` | `false` |
125-
| bordered | 是否设置边框 | `boolean` | `true` |
126-
| codeSandboxOptions | codeSandbox 预览配置参数 | `codeSandboxOptions` | - |
127-
| codePenOptions | codePen 预览配置参数 | `CodePenOption & { includeModule?: string[] }` | - |
128-
| className | | `string` | - |
129-
| title | 左侧标题部分 | `React.ReactNode` | - |
176+
```ts
177+
interface CodeLayoutProps extends React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement> {
178+
prefixCls?: string;
179+
/** 原始 代码块 渲染**/
180+
code?: React.ReactNode;
181+
text?: string;
182+
/** 标题部分,也可以放置按钮 **/
183+
toolbar?: React.ReactNode;
184+
/** 额外内容,展示 toolbar 右侧内容 */
185+
toolbarExtra?: React.ReactNode;
186+
disableTollbar?: boolean;
187+
disableCode?: boolean;
188+
disablePreview?: boolean;
189+
/**
190+
* 是否需要边框
191+
* @default true
192+
*/
193+
bordered?: boolean;
194+
/**
195+
* 是否显示复制按钮
196+
* @default true
197+
*/
198+
copied?: boolean;
199+
}
200+
```
130201

131202

132203
## 开发

core/package.json

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,8 +44,6 @@
4444
"react-dom": ">=18.0.0"
4545
},
4646
"dependencies": {
47-
"@uiw/react-codepen": "~1.0.2",
48-
"@uiw/react-codesandbox": "~1.1.5",
4947
"@uiw/copy-to-clipboard": "^1.0.12"
5048
}
5149
}

core/src/Copied.tsx

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
import { useState } from 'react';
2+
import copyTextToClipboard from '@uiw/copy-to-clipboard';
3+
import { CopyIcon, CopySuccessIcon } from './icons';
4+
5+
export const Copied = (props: { text?: string }) => {
6+
const [copied, setCopied] = useState(false);
7+
const handle = () => {
8+
setCopied(true);
9+
copyTextToClipboard(props.text || '', () => {
10+
const timer = setTimeout(() => {
11+
setCopied(false);
12+
clearTimeout(timer);
13+
}, 2000);
14+
});
15+
};
16+
return <button onClick={handle}>{copied ? <CopySuccessIcon /> : <CopyIcon />}</button>;
17+
};

core/src/assets/checkSign.svg

Lines changed: 0 additions & 4 deletions
This file was deleted.

core/src/assets/copy.svg

Lines changed: 0 additions & 5 deletions
This file was deleted.

core/src/assets/expand.svg

Lines changed: 0 additions & 8 deletions
This file was deleted.

core/src/assets/unexpand.svg

Lines changed: 0 additions & 11 deletions
This file was deleted.

core/src/code/Copy.tsx

Lines changed: 0 additions & 46 deletions
This file was deleted.

core/src/code/ShowHide.tsx

Lines changed: 0 additions & 21 deletions
This file was deleted.

0 commit comments

Comments
 (0)