@uiw/react-md-editor 3.9.8 → 3.10.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +46 -21
- package/dist/mdeditor.css +0 -2
- package/dist/mdeditor.js +478 -233
- package/dist/mdeditor.min.css +1 -1
- package/dist/mdeditor.min.js +1 -1
- package/esm/Editor.d.ts +4 -0
- package/esm/Editor.js +4 -2
- package/esm/Editor.js.map +3 -2
- package/esm/components/TextArea/Markdown.js +3 -3
- package/esm/components/TextArea/Markdown.js.map +2 -2
- package/esm/components/Toolbar/index.d.ts +1 -0
- package/esm/components/Toolbar/index.js +6 -3
- package/esm/components/Toolbar/index.js.map +4 -3
- package/lib/Editor.d.ts +4 -0
- package/lib/Editor.js +5 -2
- package/lib/Editor.js.map +3 -2
- package/lib/components/TextArea/Markdown.js +3 -3
- package/lib/components/TextArea/Markdown.js.map +2 -2
- package/lib/components/Toolbar/index.d.ts +1 -0
- package/lib/components/Toolbar/index.js +6 -3
- package/lib/components/Toolbar/index.js.map +4 -3
- package/package.json +5 -4
- package/src/Editor.tsx +6 -1
- package/src/components/TextArea/Markdown.tsx +3 -3
- package/src/components/Toolbar/index.tsx +6 -3
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
"ToolbarItems",
|
|
8
8
|
"props",
|
|
9
9
|
"prefixCls",
|
|
10
|
+
"overflow",
|
|
10
11
|
"EditorContext",
|
|
11
12
|
"fullscreen",
|
|
12
13
|
"preview",
|
|
@@ -33,7 +34,6 @@
|
|
|
33
34
|
"document",
|
|
34
35
|
"body",
|
|
35
36
|
"style",
|
|
36
|
-
"overflow",
|
|
37
37
|
"current",
|
|
38
38
|
"window",
|
|
39
39
|
"getComputedStyle",
|
|
@@ -55,6 +55,7 @@
|
|
|
55
55
|
"React",
|
|
56
56
|
"createElement",
|
|
57
57
|
"type",
|
|
58
|
+
"key",
|
|
58
59
|
"onClick",
|
|
59
60
|
"evn",
|
|
60
61
|
"stopPropagation",
|
|
@@ -65,8 +66,8 @@
|
|
|
65
66
|
"isChild",
|
|
66
67
|
"extraCommands"
|
|
67
68
|
],
|
|
68
|
-
"mappings": ";;;;;;;;;;;;;;AAAA;;AAEA;;AAEA;;;;
|
|
69
|
+
"mappings": "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",
|
|
69
70
|
"sourcesContent": [
|
|
70
|
-
"import React, { Fragment, useContext, useEffect, useRef } from 'react';\nimport { IProps } from '../../Editor';\nimport { EditorContext, PreviewType, ContextStore } from '../../Context';\nimport { ICommand } from '../../commands';\nimport Child from './Child';\nimport './index.less';\n\nexport interface IToolbarProps extends IProps {\n height?: React.CSSProperties['height'];\n onCommand?: (command: ICommand<string>, groupName?: string) => void;\n commands?: ICommand<string>[];\n isChild?: boolean;\n}\n\nexport function ToolbarItems(props: IToolbarProps) {\n const { prefixCls } = props;\n const { fullscreen, preview, barPopup = {}, commandOrchestrator, dispatch } = useContext(EditorContext);\n const originalOverflow = useRef('');\n\n function handleClick(command: ICommand<string>, name?: string) {\n if (!dispatch) return;\n const state: ContextStore = { barPopup: { ...barPopup } };\n if (command.keyCommand === 'preview') {\n state.preview = command.value as PreviewType;\n }\n if (command.keyCommand === 'fullscreen') {\n state.fullscreen = !fullscreen;\n }\n if (props.commands && command.keyCommand === 'group') {\n props.commands.forEach((item) => {\n if (name === item.groupName) {\n state.barPopup![name!] = true;\n } else if (item.keyCommand) {\n state.barPopup![item.groupName!] = false;\n }\n });\n } else if (name || command.parent) {\n Object.keys(state.barPopup || {}).forEach((keyName) => {\n state.barPopup![keyName] = false;\n });\n }\n\n if (Object.keys(state).length) {\n dispatch({ ...state });\n }\n commandOrchestrator && commandOrchestrator.executeCommand(command);\n }\n\n useEffect(() => {\n if (document) {\n if (fullscreen) {\n // prevent scroll on fullscreen\n document.body.style.overflow = 'hidden';\n } else {\n // get the original overflow only the first time\n if (!originalOverflow.current) {\n originalOverflow.current = window.getComputedStyle(document.body, null).overflow;\n }\n // reset to the original overflow\n document.body.style.overflow = originalOverflow.current;\n }\n }\n }, [fullscreen, originalOverflow]);\n\n return (\n <ul>\n {(props.commands || []).map((item, idx) => {\n if (item.keyCommand === 'divider') {\n return <li key={idx} {...item.liProps} className={`${prefixCls}-toolbar-divider`} />;\n }\n if (!item.keyCommand) return <Fragment key={idx} />;\n const activeBtn =\n (fullscreen && item.keyCommand === 'fullscreen') || (item.keyCommand === 'preview' && preview === item.value);\n const childNode =\n item.children && typeof item.children === 'function'\n ? item.children({\n getState: () => commandOrchestrator!.getState(),\n textApi: commandOrchestrator ? commandOrchestrator!.textApi : undefined,\n close: () => handleClick({}, item.groupName),\n execute: () => handleClick({ execute: item.execute }),\n })\n : undefined;\n const disabled = barPopup && preview && preview === 'preview' && !/(preview|fullscreen)/.test(item.keyCommand);\n return (\n <li key={idx} {...item.liProps} className={activeBtn ? `active` : ''}>\n {!item.buttonProps && item.icon}\n {item.buttonProps &&\n React.createElement(\n 'button',\n {\n type: 'button',\n disabled,\n 'data-name': item.name,\n ...item.buttonProps,\n onClick: (evn: React.MouseEvent<HTMLButtonElement, MouseEvent>) => {\n evn.stopPropagation();\n handleClick(item, item.groupName);\n },\n },\n item.icon,\n )}\n {item.children && (\n <Child\n groupName={item.groupName}\n prefixCls={prefixCls}\n children={childNode}\n commands={Array.isArray(item.children) ? item.children : undefined}\n />\n )}\n </li>\n );\n })}\n </ul>\n );\n}\n\nexport default function Toolbar(props: IToolbarProps = {}) {\n const { prefixCls, height = 29, isChild } = props;\n const { commands, extraCommands } = useContext(EditorContext);\n return (\n <div className={`${prefixCls}-toolbar`} style={{ height }}>\n <ToolbarItems {...props} commands={props.commands || commands || []} />\n {!isChild && <ToolbarItems {...props} commands={extraCommands || []} />}\n </div>\n );\n}\n"
|
|
71
|
+
"import React, { Fragment, useContext, useEffect, useRef } from 'react';\nimport { IProps } from '../../Editor';\nimport { EditorContext, PreviewType, ContextStore } from '../../Context';\nimport { ICommand } from '../../commands';\nimport Child from './Child';\nimport './index.less';\n\nexport interface IToolbarProps extends IProps {\n overflow?: boolean;\n height?: React.CSSProperties['height'];\n onCommand?: (command: ICommand<string>, groupName?: string) => void;\n commands?: ICommand<string>[];\n isChild?: boolean;\n}\n\nexport function ToolbarItems(props: IToolbarProps) {\n const { prefixCls, overflow } = props;\n const { fullscreen, preview, barPopup = {}, commandOrchestrator, dispatch } = useContext(EditorContext);\n const originalOverflow = useRef('');\n\n function handleClick(command: ICommand<string>, name?: string) {\n if (!dispatch) return;\n const state: ContextStore = { barPopup: { ...barPopup } };\n if (command.keyCommand === 'preview') {\n state.preview = command.value as PreviewType;\n }\n if (command.keyCommand === 'fullscreen') {\n state.fullscreen = !fullscreen;\n }\n if (props.commands && command.keyCommand === 'group') {\n props.commands.forEach((item) => {\n if (name === item.groupName) {\n state.barPopup![name!] = true;\n } else if (item.keyCommand) {\n state.barPopup![item.groupName!] = false;\n }\n });\n } else if (name || command.parent) {\n Object.keys(state.barPopup || {}).forEach((keyName) => {\n state.barPopup![keyName] = false;\n });\n }\n\n if (Object.keys(state).length) {\n dispatch({ ...state });\n }\n commandOrchestrator && commandOrchestrator.executeCommand(command);\n }\n\n useEffect(() => {\n if (document && overflow) {\n if (fullscreen) {\n // prevent scroll on fullscreen\n document.body.style.overflow = 'hidden';\n } else {\n // get the original overflow only the first time\n if (!originalOverflow.current) {\n originalOverflow.current = window.getComputedStyle(document.body, null).overflow;\n }\n // reset to the original overflow\n document.body.style.overflow = originalOverflow.current;\n }\n }\n }, [fullscreen, originalOverflow, overflow]);\n\n return (\n <ul>\n {(props.commands || []).map((item, idx) => {\n if (item.keyCommand === 'divider') {\n return <li key={idx} {...item.liProps} className={`${prefixCls}-toolbar-divider`} />;\n }\n if (!item.keyCommand) return <Fragment key={idx} />;\n const activeBtn =\n (fullscreen && item.keyCommand === 'fullscreen') || (item.keyCommand === 'preview' && preview === item.value);\n const childNode =\n item.children && typeof item.children === 'function'\n ? item.children({\n getState: () => commandOrchestrator!.getState(),\n textApi: commandOrchestrator ? commandOrchestrator!.textApi : undefined,\n close: () => handleClick({}, item.groupName),\n execute: () => handleClick({ execute: item.execute }),\n })\n : undefined;\n const disabled = barPopup && preview && preview === 'preview' && !/(preview|fullscreen)/.test(item.keyCommand);\n return (\n <li key={idx} {...item.liProps} className={activeBtn ? `active` : ''}>\n {!item.buttonProps && item.icon}\n {item.buttonProps &&\n React.createElement(\n 'button',\n {\n type: 'button',\n key: idx,\n disabled,\n 'data-name': item.name,\n ...item.buttonProps,\n onClick: (evn: React.MouseEvent<HTMLButtonElement, MouseEvent>) => {\n evn.stopPropagation();\n handleClick(item, item.groupName);\n },\n },\n item.icon,\n )}\n {item.children && (\n <Child\n overflow={overflow}\n groupName={item.groupName}\n prefixCls={prefixCls}\n children={childNode}\n commands={Array.isArray(item.children) ? item.children : undefined}\n />\n )}\n </li>\n );\n })}\n </ul>\n );\n}\n\nexport default function Toolbar(props: IToolbarProps = {}) {\n const { prefixCls, height = 29, isChild } = props;\n const { commands, extraCommands } = useContext(EditorContext);\n return (\n <div className={`${prefixCls}-toolbar`} style={{ height }}>\n <ToolbarItems {...props} commands={props.commands || commands || []} />\n {!isChild && <ToolbarItems {...props} commands={extraCommands || []} />}\n </div>\n );\n}\n"
|
|
71
72
|
]
|
|
72
73
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@uiw/react-md-editor",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.10.1",
|
|
4
4
|
"description": "A markdown editor with preview, implemented with React.js and TypeScript.",
|
|
5
5
|
"homepage": "https://uiwjs.github.io/react-md-editor/",
|
|
6
6
|
"author": "kenny wang <wowohoo@qq.com>",
|
|
@@ -15,6 +15,7 @@
|
|
|
15
15
|
"css:watch": "compile-less -d src -o esm --watch",
|
|
16
16
|
"css:build:dist": "compile-less -d src --combine markdown-editor.css --rm-global",
|
|
17
17
|
"bundle": "ncc build src/index.tsx --target web --filename mdeditor",
|
|
18
|
+
"bundle:watch": "ncc watch src/index.tsx --target web --filename mdeditor",
|
|
18
19
|
"bundle:min": "ncc build src/index.tsx --target web --filename mdeditor --minify",
|
|
19
20
|
"watch": "tsbb watch & npm run css:watch",
|
|
20
21
|
"build": "tsbb build && npm run css:build && npm run css:build:dist",
|
|
@@ -41,7 +42,7 @@
|
|
|
41
42
|
},
|
|
42
43
|
"devDependencies": {
|
|
43
44
|
"@kkt/less-modules": "~7.1.1",
|
|
44
|
-
"@kkt/ncc": "~1.0.
|
|
45
|
+
"@kkt/ncc": "~1.0.9",
|
|
45
46
|
"@kkt/raw-modules": "~7.1.1",
|
|
46
47
|
"@kkt/scope-plugin-options": "~7.1.1",
|
|
47
48
|
"@types/katex": "~0.11.1",
|
|
@@ -49,13 +50,13 @@
|
|
|
49
50
|
"@types/react-dom": "~17.0.11",
|
|
50
51
|
"@types/react-test-renderer": "~17.0.1",
|
|
51
52
|
"@uiw/react-github-corners": "~1.5.3",
|
|
52
|
-
"@uiw/react-codesandbox": "~1.1.4",
|
|
53
53
|
"@uiw/react-shields": "~1.1.2",
|
|
54
54
|
"compile-less-cli": "~1.8.11",
|
|
55
55
|
"katex": "~0.15.2",
|
|
56
56
|
"husky": "~7.0.4",
|
|
57
57
|
"kkt": "~7.1.5",
|
|
58
58
|
"lint-staged": "~12.3.4",
|
|
59
|
+
"mermaid": "~8.14.0",
|
|
59
60
|
"prettier": "~2.5.1",
|
|
60
61
|
"react": "~17.0.2",
|
|
61
62
|
"react-dom": "~17.0.2",
|
|
@@ -65,7 +66,7 @@
|
|
|
65
66
|
},
|
|
66
67
|
"dependencies": {
|
|
67
68
|
"@babel/runtime": "^7.14.6",
|
|
68
|
-
"@uiw/react-markdown-preview": "~3.
|
|
69
|
+
"@uiw/react-markdown-preview": "~3.5.0",
|
|
69
70
|
"rehype-sanitize": "~5.0.1",
|
|
70
71
|
"rehype": "~12.0.1"
|
|
71
72
|
},
|
package/src/Editor.tsx
CHANGED
|
@@ -48,6 +48,10 @@ export interface MDEditorProps extends Omit<React.HTMLAttributes<HTMLDivElement>
|
|
|
48
48
|
* Full screen display editor.
|
|
49
49
|
*/
|
|
50
50
|
fullscreen?: boolean;
|
|
51
|
+
/**
|
|
52
|
+
* Disable `fullscreen` setting body styles
|
|
53
|
+
*/
|
|
54
|
+
overflow?: boolean;
|
|
51
55
|
/**
|
|
52
56
|
* Maximum drag height. `visiableDragbar=true`
|
|
53
57
|
*/
|
|
@@ -126,6 +130,7 @@ const InternalMDEditor = (
|
|
|
126
130
|
highlightEnable = true,
|
|
127
131
|
preview: previewType = 'live',
|
|
128
132
|
fullscreen = false,
|
|
133
|
+
overflow = true,
|
|
129
134
|
previewOptions = {},
|
|
130
135
|
textareaProps,
|
|
131
136
|
maxHeight = 1200,
|
|
@@ -280,7 +285,7 @@ const InternalMDEditor = (
|
|
|
280
285
|
height: state.fullscreen ? '100%' : hideToolbar ? Number(state.height) - toolbarHeight : state.height,
|
|
281
286
|
}}
|
|
282
287
|
>
|
|
283
|
-
{!hideToolbar && <Toolbar prefixCls={prefixCls} height={toolbarHeight} />}
|
|
288
|
+
{!hideToolbar && <Toolbar prefixCls={prefixCls} height={toolbarHeight} overflow={overflow} />}
|
|
284
289
|
<div
|
|
285
290
|
className={`${prefixCls}-content`}
|
|
286
291
|
style={{
|
|
@@ -19,14 +19,14 @@ export default function Markdown(props: MarkdownProps) {
|
|
|
19
19
|
}, []);
|
|
20
20
|
function html2Escape(sHtml: string) {
|
|
21
21
|
return sHtml
|
|
22
|
-
.replace(/```(.*)\s+([\s\S]*?)(\s.+)?```/g, (str: string) => {
|
|
22
|
+
.replace(/```(tsx?|jsx?|html|xml)(.*)\s+([\s\S]*?)(\s.+)?```/g, (str: string) => {
|
|
23
23
|
return str.replace(
|
|
24
|
-
/[
|
|
24
|
+
/[<&"]/g,
|
|
25
25
|
(c: string) => (({ '<': '<', '>': '>', '&': '&', '"': '"' } as Record<string, string>)[c]),
|
|
26
26
|
);
|
|
27
27
|
})
|
|
28
28
|
.replace(
|
|
29
|
-
/[
|
|
29
|
+
/[<&"]/g,
|
|
30
30
|
(c: string) => (({ '<': '<', '>': '>', '&': '&', '"': '"' } as Record<string, string>)[c]),
|
|
31
31
|
);
|
|
32
32
|
}
|
|
@@ -6,6 +6,7 @@ import Child from './Child';
|
|
|
6
6
|
import './index.less';
|
|
7
7
|
|
|
8
8
|
export interface IToolbarProps extends IProps {
|
|
9
|
+
overflow?: boolean;
|
|
9
10
|
height?: React.CSSProperties['height'];
|
|
10
11
|
onCommand?: (command: ICommand<string>, groupName?: string) => void;
|
|
11
12
|
commands?: ICommand<string>[];
|
|
@@ -13,7 +14,7 @@ export interface IToolbarProps extends IProps {
|
|
|
13
14
|
}
|
|
14
15
|
|
|
15
16
|
export function ToolbarItems(props: IToolbarProps) {
|
|
16
|
-
const { prefixCls } = props;
|
|
17
|
+
const { prefixCls, overflow } = props;
|
|
17
18
|
const { fullscreen, preview, barPopup = {}, commandOrchestrator, dispatch } = useContext(EditorContext);
|
|
18
19
|
const originalOverflow = useRef('');
|
|
19
20
|
|
|
@@ -47,7 +48,7 @@ export function ToolbarItems(props: IToolbarProps) {
|
|
|
47
48
|
}
|
|
48
49
|
|
|
49
50
|
useEffect(() => {
|
|
50
|
-
if (document) {
|
|
51
|
+
if (document && overflow) {
|
|
51
52
|
if (fullscreen) {
|
|
52
53
|
// prevent scroll on fullscreen
|
|
53
54
|
document.body.style.overflow = 'hidden';
|
|
@@ -60,7 +61,7 @@ export function ToolbarItems(props: IToolbarProps) {
|
|
|
60
61
|
document.body.style.overflow = originalOverflow.current;
|
|
61
62
|
}
|
|
62
63
|
}
|
|
63
|
-
}, [fullscreen, originalOverflow]);
|
|
64
|
+
}, [fullscreen, originalOverflow, overflow]);
|
|
64
65
|
|
|
65
66
|
return (
|
|
66
67
|
<ul>
|
|
@@ -89,6 +90,7 @@ export function ToolbarItems(props: IToolbarProps) {
|
|
|
89
90
|
'button',
|
|
90
91
|
{
|
|
91
92
|
type: 'button',
|
|
93
|
+
key: idx,
|
|
92
94
|
disabled,
|
|
93
95
|
'data-name': item.name,
|
|
94
96
|
...item.buttonProps,
|
|
@@ -101,6 +103,7 @@ export function ToolbarItems(props: IToolbarProps) {
|
|
|
101
103
|
)}
|
|
102
104
|
{item.children && (
|
|
103
105
|
<Child
|
|
106
|
+
overflow={overflow}
|
|
104
107
|
groupName={item.groupName}
|
|
105
108
|
prefixCls={prefixCls}
|
|
106
109
|
children={childNode}
|