@uiw/react-md-editor 3.10.0 → 3.11.0
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 +35 -9
- package/dist/mdeditor.css +959 -321
- package/dist/mdeditor.js +43808 -57874
- package/dist/mdeditor.min.css +1 -1
- package/dist/mdeditor.min.js +1 -1
- package/esm/Editor.js +1 -1
- package/esm/Editor.js.map +2 -2
- package/esm/components/TextArea/Markdown.js +7 -9
- package/esm/components/TextArea/Markdown.js.map +2 -3
- package/esm/components/TextArea/index.css +17 -25
- package/esm/components/TextArea/index.js +10 -3
- package/esm/components/TextArea/index.js.map +4 -2
- package/esm/components/TextArea/index.less +17 -27
- package/esm/components/Toolbar/Child.css +2 -2
- package/esm/components/Toolbar/Child.less +3 -2
- package/esm/components/Toolbar/index.css +12 -12
- package/esm/components/Toolbar/index.less +12 -12
- package/esm/index.css +5 -5
- package/esm/index.less +6 -5
- package/lib/Editor.js +1 -1
- package/lib/Editor.js.map +2 -2
- package/lib/components/TextArea/Markdown.js +7 -9
- package/lib/components/TextArea/Markdown.js.map +2 -3
- package/lib/components/TextArea/index.js +11 -4
- package/lib/components/TextArea/index.js.map +4 -2
- package/lib/components/TextArea/index.less +17 -27
- package/lib/components/Toolbar/Child.less +3 -2
- package/lib/components/Toolbar/index.less +12 -12
- package/lib/index.less +6 -5
- package/markdown-editor.css +36 -44
- package/package.json +4 -3
- package/src/Editor.tsx +1 -0
- package/src/__test__/editor.test.tsx +1 -1
- package/src/components/TextArea/Markdown.tsx +7 -8
- package/src/components/TextArea/index.less +17 -27
- package/src/components/TextArea/index.tsx +6 -3
- package/src/components/Toolbar/Child.less +3 -2
- package/src/components/Toolbar/index.less +12 -12
- package/src/index.less +6 -5
package/lib/Editor.js.map
CHANGED
|
@@ -89,8 +89,8 @@
|
|
|
89
89
|
"Markdown",
|
|
90
90
|
"MarkdownPreview"
|
|
91
91
|
],
|
|
92
|
-
"mappings": "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
|
|
92
|
+
"mappings": "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",
|
|
93
93
|
"sourcesContent": [
|
|
94
|
-
"import React, { useEffect, useReducer, useMemo, useRef, useImperativeHandle } from 'react';\nimport MarkdownPreview, { MarkdownPreviewProps, MarkdownPreviewRef } from '@uiw/react-markdown-preview';\nimport TextArea, { ITextAreaProps } from './components/TextArea';\nimport Toolbar from './components/Toolbar';\nimport DragBar from './components/DragBar';\nimport { getCommands, getExtraCommands, ICommand } from './commands';\nimport { reducer, EditorContext, ContextStore, PreviewType } from './Context';\nimport './index.less';\n\nexport interface IProps {\n prefixCls?: string;\n className?: string;\n}\n\nexport interface MDEditorProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange'>, IProps {\n /**\n * The Markdown value.\n */\n value?: string;\n /**\n * Event handler for the `onChange` event.\n */\n onChange?: (value?: string) => void;\n /**\n * Can be used to make `Markdown Editor` focus itself on initialization. Defaults to on.\n * it will be set to true when either the source `textarea` is focused,\n * or it has an `autofocus` attribute and no other element is focused.\n */\n autoFocus?: ITextAreaProps['autoFocus'];\n /**\n * The height of the editor.\n */\n height?: number;\n /**\n * Custom toolbar heigth\n * @default 29px\n */\n toolbarHeight?: number;\n /**\n * Show drag and drop tool. Set the height of the editor.\n */\n visiableDragbar?: boolean;\n /**\n * Show markdown preview.\n */\n preview?: PreviewType;\n /**\n * Full screen display editor.\n */\n fullscreen?: boolean;\n /**\n * Disable `fullscreen` setting body styles\n */\n overflow?: boolean;\n /**\n * Maximum drag height. `visiableDragbar=true`\n */\n maxHeight?: number;\n /**\n * Minimum drag height. `visiableDragbar=true`\n */\n minHeight?: number;\n /**\n * This is reset [react-markdown](https://github.com/rexxars/react-markdown) settings.\n */\n previewOptions?: Omit<MarkdownPreviewProps, 'source'>;\n /**\n * Set the `textarea` related props.\n */\n textareaProps?: ITextAreaProps;\n /** Use div to replace TextArea or re-render TextArea */\n renderTextarea?: ITextAreaProps['renderTextarea'];\n /**\n * Disable editing area code highlighting. The value is `false`, which increases the editing speed.\n * @default true\n */\n highlightEnable?: boolean;\n /**\n * The number of characters to insert when pressing tab key.\n * Default `2` spaces.\n */\n tabSize?: number;\n /**\n * If `false`, the `tab` key inserts a tab character into the textarea. If `true`, the `tab` key executes default behavior e.g. focus shifts to next element.\n */\n defaultTabEnable?: boolean;\n /**\n * You can create your own commands or reuse existing commands.\n */\n commands?: ICommand[];\n /**\n * Filter or modify your commands.\n * https://github.com/uiwjs/react-md-editor/issues/296\n */\n commandsFilter?: (command: ICommand, isExtra: boolean) => false | ICommand;\n /**\n * You can create your own commands or reuse existing commands.\n */\n extraCommands?: ICommand[];\n /**\n * Hide the tool bar\n */\n hideToolbar?: boolean;\n /** Whether to enable scrolling */\n enableScroll?: boolean;\n}\n\nfunction setGroupPopFalse(data: Record<string, boolean> = {}) {\n Object.keys(data).forEach((keyname) => {\n data[keyname] = false;\n });\n return data;\n}\n\nconst InternalMDEditor = (\n props: MDEditorProps,\n ref?: ((instance: ContextStore) => void) | React.RefObject<ContextStore> | null,\n) => {\n const {\n prefixCls = 'w-md-editor',\n className,\n value: propsValue,\n commands = getCommands(),\n commandsFilter,\n extraCommands = getExtraCommands(),\n height = 200,\n toolbarHeight = 29,\n enableScroll = true,\n visiableDragbar = true,\n highlightEnable = true,\n preview: previewType = 'live',\n fullscreen = false,\n overflow = true,\n previewOptions = {},\n textareaProps,\n maxHeight = 1200,\n minHeight = 100,\n autoFocus,\n tabSize = 2,\n defaultTabEnable = false,\n onChange,\n hideToolbar,\n renderTextarea,\n ...other\n } = props || {};\n const cmds = commands\n .map((item) => (commandsFilter ? commandsFilter(item, false) : item))\n .filter(Boolean) as ICommand[];\n const extraCmds = extraCommands\n .map((item) => (commandsFilter ? commandsFilter(item, true) : item))\n .filter(Boolean) as ICommand[];\n let [state, dispatch] = useReducer(reducer, {\n markdown: propsValue,\n preview: previewType,\n height,\n highlightEnable,\n tabSize,\n defaultTabEnable,\n scrollTop: 0,\n scrollTopPreview: 0,\n commands: cmds,\n extraCommands: extraCmds,\n fullscreen,\n barPopup: {},\n });\n const container = useRef<HTMLDivElement>(null);\n const previewRef = useRef<MarkdownPreviewRef>(null);\n const enableScrollRef = useRef(enableScroll);\n\n useImperativeHandle(ref, () => ({ ...state }));\n useMemo(() => (enableScrollRef.current = enableScroll), [enableScroll]);\n useEffect(() => {\n const stateInit: ContextStore = {};\n if (container.current) {\n stateInit.container = container.current || undefined;\n }\n stateInit.markdown = propsValue || '';\n stateInit.barPopup = {};\n if (dispatch) {\n dispatch({ ...state, ...stateInit });\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const cls = [\n className,\n prefixCls,\n state.preview ? `${prefixCls}-show-${state.preview}` : null,\n state.fullscreen ? `${prefixCls}-fullscreen` : null,\n ]\n .filter(Boolean)\n .join(' ')\n .trim();\n\n useMemo(\n () => propsValue !== state.markdown && dispatch({ markdown: propsValue || '' }),\n [propsValue, state.markdown],\n );\n // eslint-disable-next-line react-hooks/exhaustive-deps\n useMemo(() => previewType !== state.preview && dispatch({ preview: previewType }), [previewType]);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n useMemo(() => height !== state.height && dispatch({ height: height }), [height]);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n useMemo(() => tabSize !== state.tabSize && dispatch({ tabSize }), [tabSize]);\n useMemo(\n () => highlightEnable !== state.highlightEnable && dispatch({ highlightEnable }),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [highlightEnable],\n );\n // eslint-disable-next-line react-hooks/exhaustive-deps\n useMemo(() => autoFocus !== state.autoFocus && dispatch({ autoFocus: autoFocus }), [autoFocus]);\n useMemo(\n () => fullscreen !== state.fullscreen && dispatch({ fullscreen: fullscreen }),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [fullscreen],\n );\n\n const textareaDomRef = useRef<HTMLDivElement>();\n const active = useRef<'text' | 'preview'>('preview');\n const initScroll = useRef(false);\n\n useMemo(() => {\n textareaDomRef.current = state.textareaWarp;\n if (state.textareaWarp) {\n state.textareaWarp.addEventListener('mouseover', () => {\n active.current = 'text';\n });\n state.textareaWarp.addEventListener('mouseleave', () => {\n active.current = 'preview';\n });\n }\n }, [state.textareaWarp]);\n\n const handleScroll = (e: React.UIEvent<HTMLDivElement>, type: 'text' | 'preview') => {\n if (!enableScrollRef.current) return;\n const textareaDom = textareaDomRef.current;\n const previewDom = previewRef.current ? previewRef.current.mdp.current : undefined;\n if (!initScroll.current) {\n active.current = type;\n initScroll.current = true;\n }\n if (textareaDom && previewDom) {\n const scale =\n (textareaDom.scrollHeight - textareaDom.offsetHeight) / (previewDom.scrollHeight - previewDom.offsetHeight);\n if (e.target === textareaDom && active.current === 'text') {\n previewDom.scrollTop = textareaDom.scrollTop / scale;\n }\n if (e.target === previewDom && active.current === 'preview') {\n textareaDom.scrollTop = previewDom.scrollTop * scale;\n }\n let scrollTop = 0;\n if (active.current === 'text') {\n scrollTop = textareaDom.scrollTop || 0;\n } else if (active.current === 'preview') {\n scrollTop = previewDom.scrollTop || 0;\n }\n dispatch({ scrollTop });\n }\n };\n\n const mdPreview = useMemo(\n () => (\n <MarkdownPreview\n {...previewOptions}\n onScroll={(e) => handleScroll(e, 'preview')}\n ref={previewRef}\n source={state.markdown || ''}\n className={`${prefixCls}-preview ${previewOptions.className || ''}`}\n />\n ),\n [prefixCls, previewOptions, state.markdown],\n );\n\n return (\n <EditorContext.Provider value={{ ...state, dispatch }}>\n <div\n ref={container}\n className={cls}\n {...other}\n onClick={() => {\n dispatch({ barPopup: { ...setGroupPopFalse(state.barPopup) } });\n }}\n style={{\n ...other.style,\n height: state.fullscreen ? '100%' : hideToolbar ? Number(state.height) - toolbarHeight : state.height,\n }}\n >\n {!hideToolbar && <Toolbar prefixCls={prefixCls} height={toolbarHeight} overflow={overflow} />}\n <div\n className={`${prefixCls}-content`}\n style={{\n height: state.fullscreen ? `calc(100% - ${toolbarHeight}px)` : Number(state.height) - toolbarHeight,\n }}\n >\n {/(edit|live)/.test(state.preview || '') && (\n <TextArea\n className={`${prefixCls}-input`}\n prefixCls={prefixCls}\n autoFocus={autoFocus}\n {...textareaProps}\n onChange={(evn) => {\n onChange && onChange(evn.target.value);\n if (textareaProps && textareaProps.onChange) {\n textareaProps.onChange(evn);\n }\n }}\n renderTextarea={renderTextarea}\n onScroll={(e) => handleScroll(e, 'text')}\n />\n )}\n {/(live|preview)/.test(state.preview || '') && mdPreview}\n </div>\n {visiableDragbar && !state.fullscreen && (\n <DragBar\n prefixCls={prefixCls}\n height={state.height as number}\n maxHeight={maxHeight!}\n minHeight={minHeight!}\n onChange={(newHeight) => {\n dispatch({ height: newHeight });\n }}\n />\n )}\n </div>\n </EditorContext.Provider>\n );\n};\n\nconst mdEditor = React.forwardRef<ContextStore, MDEditorProps>(InternalMDEditor);\n\ntype MDEditor = typeof mdEditor & {\n Markdown: typeof MarkdownPreview;\n};\n\n(mdEditor as MDEditor).Markdown = MarkdownPreview;\n\nexport default mdEditor as MDEditor;\n"
|
|
94
|
+
"import React, { useEffect, useReducer, useMemo, useRef, useImperativeHandle } from 'react';\nimport MarkdownPreview, { MarkdownPreviewProps, MarkdownPreviewRef } from '@uiw/react-markdown-preview';\nimport TextArea, { ITextAreaProps } from './components/TextArea';\nimport Toolbar from './components/Toolbar';\nimport DragBar from './components/DragBar';\nimport { getCommands, getExtraCommands, ICommand } from './commands';\nimport { reducer, EditorContext, ContextStore, PreviewType } from './Context';\nimport './index.less';\n\nexport interface IProps {\n prefixCls?: string;\n className?: string;\n}\n\nexport interface MDEditorProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange'>, IProps {\n /**\n * The Markdown value.\n */\n value?: string;\n /**\n * Event handler for the `onChange` event.\n */\n onChange?: (value?: string) => void;\n /**\n * Can be used to make `Markdown Editor` focus itself on initialization. Defaults to on.\n * it will be set to true when either the source `textarea` is focused,\n * or it has an `autofocus` attribute and no other element is focused.\n */\n autoFocus?: ITextAreaProps['autoFocus'];\n /**\n * The height of the editor.\n */\n height?: number;\n /**\n * Custom toolbar heigth\n * @default 29px\n */\n toolbarHeight?: number;\n /**\n * Show drag and drop tool. Set the height of the editor.\n */\n visiableDragbar?: boolean;\n /**\n * Show markdown preview.\n */\n preview?: PreviewType;\n /**\n * Full screen display editor.\n */\n fullscreen?: boolean;\n /**\n * Disable `fullscreen` setting body styles\n */\n overflow?: boolean;\n /**\n * Maximum drag height. `visiableDragbar=true`\n */\n maxHeight?: number;\n /**\n * Minimum drag height. `visiableDragbar=true`\n */\n minHeight?: number;\n /**\n * This is reset [react-markdown](https://github.com/rexxars/react-markdown) settings.\n */\n previewOptions?: Omit<MarkdownPreviewProps, 'source'>;\n /**\n * Set the `textarea` related props.\n */\n textareaProps?: ITextAreaProps;\n /** Use div to replace TextArea or re-render TextArea */\n renderTextarea?: ITextAreaProps['renderTextarea'];\n /**\n * Disable editing area code highlighting. The value is `false`, which increases the editing speed.\n * @default true\n */\n highlightEnable?: boolean;\n /**\n * The number of characters to insert when pressing tab key.\n * Default `2` spaces.\n */\n tabSize?: number;\n /**\n * If `false`, the `tab` key inserts a tab character into the textarea. If `true`, the `tab` key executes default behavior e.g. focus shifts to next element.\n */\n defaultTabEnable?: boolean;\n /**\n * You can create your own commands or reuse existing commands.\n */\n commands?: ICommand[];\n /**\n * Filter or modify your commands.\n * https://github.com/uiwjs/react-md-editor/issues/296\n */\n commandsFilter?: (command: ICommand, isExtra: boolean) => false | ICommand;\n /**\n * You can create your own commands or reuse existing commands.\n */\n extraCommands?: ICommand[];\n /**\n * Hide the tool bar\n */\n hideToolbar?: boolean;\n /** Whether to enable scrolling */\n enableScroll?: boolean;\n}\n\nfunction setGroupPopFalse(data: Record<string, boolean> = {}) {\n Object.keys(data).forEach((keyname) => {\n data[keyname] = false;\n });\n return data;\n}\n\nconst InternalMDEditor = (\n props: MDEditorProps,\n ref?: ((instance: ContextStore) => void) | React.RefObject<ContextStore> | null,\n) => {\n const {\n prefixCls = 'w-md-editor',\n className,\n value: propsValue,\n commands = getCommands(),\n commandsFilter,\n extraCommands = getExtraCommands(),\n height = 200,\n toolbarHeight = 29,\n enableScroll = true,\n visiableDragbar = true,\n highlightEnable = true,\n preview: previewType = 'live',\n fullscreen = false,\n overflow = true,\n previewOptions = {},\n textareaProps,\n maxHeight = 1200,\n minHeight = 100,\n autoFocus,\n tabSize = 2,\n defaultTabEnable = false,\n onChange,\n hideToolbar,\n renderTextarea,\n ...other\n } = props || {};\n const cmds = commands\n .map((item) => (commandsFilter ? commandsFilter(item, false) : item))\n .filter(Boolean) as ICommand[];\n const extraCmds = extraCommands\n .map((item) => (commandsFilter ? commandsFilter(item, true) : item))\n .filter(Boolean) as ICommand[];\n let [state, dispatch] = useReducer(reducer, {\n markdown: propsValue,\n preview: previewType,\n height,\n highlightEnable,\n tabSize,\n defaultTabEnable,\n scrollTop: 0,\n scrollTopPreview: 0,\n commands: cmds,\n extraCommands: extraCmds,\n fullscreen,\n barPopup: {},\n });\n const container = useRef<HTMLDivElement>(null);\n const previewRef = useRef<MarkdownPreviewRef>(null);\n const enableScrollRef = useRef(enableScroll);\n\n useImperativeHandle(ref, () => ({ ...state }));\n useMemo(() => (enableScrollRef.current = enableScroll), [enableScroll]);\n useEffect(() => {\n const stateInit: ContextStore = {};\n if (container.current) {\n stateInit.container = container.current || undefined;\n }\n stateInit.markdown = propsValue || '';\n stateInit.barPopup = {};\n if (dispatch) {\n dispatch({ ...state, ...stateInit });\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const cls = [\n className,\n 'wmde-markdown-var',\n prefixCls,\n state.preview ? `${prefixCls}-show-${state.preview}` : null,\n state.fullscreen ? `${prefixCls}-fullscreen` : null,\n ]\n .filter(Boolean)\n .join(' ')\n .trim();\n\n useMemo(\n () => propsValue !== state.markdown && dispatch({ markdown: propsValue || '' }),\n [propsValue, state.markdown],\n );\n // eslint-disable-next-line react-hooks/exhaustive-deps\n useMemo(() => previewType !== state.preview && dispatch({ preview: previewType }), [previewType]);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n useMemo(() => height !== state.height && dispatch({ height: height }), [height]);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n useMemo(() => tabSize !== state.tabSize && dispatch({ tabSize }), [tabSize]);\n useMemo(\n () => highlightEnable !== state.highlightEnable && dispatch({ highlightEnable }),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [highlightEnable],\n );\n // eslint-disable-next-line react-hooks/exhaustive-deps\n useMemo(() => autoFocus !== state.autoFocus && dispatch({ autoFocus: autoFocus }), [autoFocus]);\n useMemo(\n () => fullscreen !== state.fullscreen && dispatch({ fullscreen: fullscreen }),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [fullscreen],\n );\n\n const textareaDomRef = useRef<HTMLDivElement>();\n const active = useRef<'text' | 'preview'>('preview');\n const initScroll = useRef(false);\n\n useMemo(() => {\n textareaDomRef.current = state.textareaWarp;\n if (state.textareaWarp) {\n state.textareaWarp.addEventListener('mouseover', () => {\n active.current = 'text';\n });\n state.textareaWarp.addEventListener('mouseleave', () => {\n active.current = 'preview';\n });\n }\n }, [state.textareaWarp]);\n\n const handleScroll = (e: React.UIEvent<HTMLDivElement>, type: 'text' | 'preview') => {\n if (!enableScrollRef.current) return;\n const textareaDom = textareaDomRef.current;\n const previewDom = previewRef.current ? previewRef.current.mdp.current : undefined;\n if (!initScroll.current) {\n active.current = type;\n initScroll.current = true;\n }\n if (textareaDom && previewDom) {\n const scale =\n (textareaDom.scrollHeight - textareaDom.offsetHeight) / (previewDom.scrollHeight - previewDom.offsetHeight);\n if (e.target === textareaDom && active.current === 'text') {\n previewDom.scrollTop = textareaDom.scrollTop / scale;\n }\n if (e.target === previewDom && active.current === 'preview') {\n textareaDom.scrollTop = previewDom.scrollTop * scale;\n }\n let scrollTop = 0;\n if (active.current === 'text') {\n scrollTop = textareaDom.scrollTop || 0;\n } else if (active.current === 'preview') {\n scrollTop = previewDom.scrollTop || 0;\n }\n dispatch({ scrollTop });\n }\n };\n\n const mdPreview = useMemo(\n () => (\n <MarkdownPreview\n {...previewOptions}\n onScroll={(e) => handleScroll(e, 'preview')}\n ref={previewRef}\n source={state.markdown || ''}\n className={`${prefixCls}-preview ${previewOptions.className || ''}`}\n />\n ),\n [prefixCls, previewOptions, state.markdown],\n );\n\n return (\n <EditorContext.Provider value={{ ...state, dispatch }}>\n <div\n ref={container}\n className={cls}\n {...other}\n onClick={() => {\n dispatch({ barPopup: { ...setGroupPopFalse(state.barPopup) } });\n }}\n style={{\n ...other.style,\n height: state.fullscreen ? '100%' : hideToolbar ? Number(state.height) - toolbarHeight : state.height,\n }}\n >\n {!hideToolbar && <Toolbar prefixCls={prefixCls} height={toolbarHeight} overflow={overflow} />}\n <div\n className={`${prefixCls}-content`}\n style={{\n height: state.fullscreen ? `calc(100% - ${toolbarHeight}px)` : Number(state.height) - toolbarHeight,\n }}\n >\n {/(edit|live)/.test(state.preview || '') && (\n <TextArea\n className={`${prefixCls}-input`}\n prefixCls={prefixCls}\n autoFocus={autoFocus}\n {...textareaProps}\n onChange={(evn) => {\n onChange && onChange(evn.target.value);\n if (textareaProps && textareaProps.onChange) {\n textareaProps.onChange(evn);\n }\n }}\n renderTextarea={renderTextarea}\n onScroll={(e) => handleScroll(e, 'text')}\n />\n )}\n {/(live|preview)/.test(state.preview || '') && mdPreview}\n </div>\n {visiableDragbar && !state.fullscreen && (\n <DragBar\n prefixCls={prefixCls}\n height={state.height as number}\n maxHeight={maxHeight!}\n minHeight={minHeight!}\n onChange={(newHeight) => {\n dispatch({ height: newHeight });\n }}\n />\n )}\n </div>\n </EditorContext.Provider>\n );\n};\n\nconst mdEditor = React.forwardRef<ContextStore, MDEditorProps>(InternalMDEditor);\n\ntype MDEditor = typeof mdEditor & {\n Markdown: typeof MarkdownPreview;\n};\n\n(mdEditor as MDEditor).Markdown = MarkdownPreview;\n\nexport default mdEditor as MDEditor;\n"
|
|
95
95
|
]
|
|
96
96
|
}
|
|
@@ -13,20 +13,18 @@ var _react = _interopRequireWildcard(require("react"));
|
|
|
13
13
|
|
|
14
14
|
var _rehype = require("rehype");
|
|
15
15
|
|
|
16
|
-
var
|
|
16
|
+
var _rehypePrismPlus = _interopRequireDefault(require("rehype-prism-plus"));
|
|
17
17
|
|
|
18
18
|
var _Context = require("../../Context");
|
|
19
19
|
|
|
20
20
|
var _jsxRuntime = require("react/jsx-runtime");
|
|
21
21
|
|
|
22
|
-
// @ts-ignore
|
|
23
22
|
function Markdown(props) {
|
|
24
23
|
var prefixCls = props.prefixCls;
|
|
25
24
|
|
|
26
25
|
var _useContext = (0, _react.useContext)(_Context.EditorContext),
|
|
27
26
|
_useContext$markdown = _useContext.markdown,
|
|
28
27
|
markdown = _useContext$markdown === void 0 ? '' : _useContext$markdown,
|
|
29
|
-
highlightEnable = _useContext.highlightEnable,
|
|
30
28
|
dispatch = _useContext.dispatch;
|
|
31
29
|
|
|
32
30
|
var preRef = /*#__PURE__*/_react.default.createRef();
|
|
@@ -41,8 +39,8 @@ function Markdown(props) {
|
|
|
41
39
|
}, []);
|
|
42
40
|
|
|
43
41
|
function html2Escape(sHtml) {
|
|
44
|
-
return sHtml.replace(/```(.*)\s+([\s\S]*?)(\s.+)?```/g, function (str) {
|
|
45
|
-
return str.replace(/[
|
|
42
|
+
return sHtml.replace(/```(tsx?|jsx?|html|xml)(.*)\s+([\s\S]*?)(\s.+)?```/g, function (str) {
|
|
43
|
+
return str.replace(/[<&"]/g, function (c) {
|
|
46
44
|
return {
|
|
47
45
|
'<': '<',
|
|
48
46
|
'>': '>',
|
|
@@ -50,7 +48,7 @@ function Markdown(props) {
|
|
|
50
48
|
'"': '"'
|
|
51
49
|
}[c];
|
|
52
50
|
});
|
|
53
|
-
}).replace(/[
|
|
51
|
+
}).replace(/[<&"]/g, function (c) {
|
|
54
52
|
return {
|
|
55
53
|
'<': '<',
|
|
56
54
|
'>': '>',
|
|
@@ -61,7 +59,7 @@ function Markdown(props) {
|
|
|
61
59
|
}
|
|
62
60
|
|
|
63
61
|
return (0, _react.useMemo)(function () {
|
|
64
|
-
if (!
|
|
62
|
+
if (!markdown) {
|
|
65
63
|
return /*#__PURE__*/(0, _jsxRuntime.jsx)("pre", {
|
|
66
64
|
children: markdown || '',
|
|
67
65
|
ref: preRef,
|
|
@@ -71,7 +69,7 @@ function Markdown(props) {
|
|
|
71
69
|
|
|
72
70
|
var str = (0, _rehype.rehype)().data('settings', {
|
|
73
71
|
fragment: true
|
|
74
|
-
}).use(
|
|
72
|
+
}).use(_rehypePrismPlus.default, {
|
|
75
73
|
ignoreMissing: true
|
|
76
74
|
}).processSync("<pre class=\"language-markdown ".concat(prefixCls, "-text-pre wmde-markdown-color\"><code class=\"language-markdown\">").concat(html2Escape(markdown), "\n</code></pre>"));
|
|
77
75
|
return /*#__PURE__*/_react.default.createElement('div', {
|
|
@@ -80,7 +78,7 @@ function Markdown(props) {
|
|
|
80
78
|
__html: str.value
|
|
81
79
|
}
|
|
82
80
|
});
|
|
83
|
-
}, [
|
|
81
|
+
}, [markdown, preRef, prefixCls]);
|
|
84
82
|
}
|
|
85
83
|
|
|
86
84
|
module.exports = exports.default;
|
|
@@ -9,7 +9,6 @@
|
|
|
9
9
|
"prefixCls",
|
|
10
10
|
"EditorContext",
|
|
11
11
|
"markdown",
|
|
12
|
-
"highlightEnable",
|
|
13
12
|
"dispatch",
|
|
14
13
|
"preRef",
|
|
15
14
|
"React",
|
|
@@ -33,8 +32,8 @@
|
|
|
33
32
|
"__html",
|
|
34
33
|
"value"
|
|
35
34
|
],
|
|
36
|
-
"mappings": ";;;;;;;;;;;AAAA;;AACA;;
|
|
35
|
+
"mappings": ";;;;;;;;;;;AAAA;;AACA;;AACA;;AAEA;;;;AAIe,SAASA,QAAT,CAAkBC,KAAlB,EAAwC;AACrD,MAAQC,SAAR,GAAsBD,KAAtB,CAAQC,SAAR;;AACA,oBAAoC,uBAAWC,sBAAX,CAApC;AAAA,yCAAQC,QAAR;AAAA,MAAQA,QAAR,qCAAmB,EAAnB;AAAA,MAAuBC,QAAvB,eAAuBA,QAAvB;;AACA,MAAMC,MAAM,gBAAGC,eAAMC,SAAN,EAAf;;AACA,wBAAU,YAAM;AACd,QAAIF,MAAM,CAACG,OAAP,IAAkBJ,QAAtB,EAAgC;AAC9BA,MAAAA,QAAQ,CAAC;AAAEK,QAAAA,WAAW,EAAEJ,MAAM,CAACG;AAAtB,OAAD,CAAR;AACD,KAHa,CAId;;AACD,GALD,EAKG,EALH;;AAMA,WAASE,WAAT,CAAqBC,KAArB,EAAoC;AAClC,WAAOA,KAAK,CACTC,OADI,CACI,qDADJ,EAC2D,UAACC,GAAD,EAAiB;AAC/E,aAAOA,GAAG,CAACD,OAAJ,CACL,QADK,EAEL,UAACE,CAAD;AAAA,eAAiB;AAAE,eAAK,MAAP;AAAe,eAAK,MAApB;AAA4B,eAAK,OAAjC;AAA0C,eAAK;AAA/C,SAAD,CAAsFA,CAAtF,CAAhB;AAAA,OAFK,CAAP;AAID,KANI,EAOJF,OAPI,CAQH,QARG,EASH,UAACE,CAAD;AAAA,aAAiB;AAAE,aAAK,MAAP;AAAe,aAAK,MAApB;AAA4B,aAAK,OAAjC;AAA0C,aAAK;AAA/C,OAAD,CAAsFA,CAAtF,CAAhB;AAAA,KATG,CAAP;AAWD;;AAED,SAAO,oBAAQ,YAAM;AACnB,QAAI,CAACX,QAAL,EAAe;AACb,0BAAO;AAAK,QAAA,QAAQ,EAAEA,QAAQ,IAAI,EAA3B;AAA+B,QAAA,GAAG,EAAEE,MAApC;AAA4C,QAAA,SAAS,YAAKJ,SAAL;AAArD,QAAP;AACD;;AACD,QAAMY,GAAG,GAAG,sBACTE,IADS,CACJ,UADI,EACQ;AAAEC,MAAAA,QAAQ,EAAE;AAAZ,KADR,EAETC,GAFS,CAELC,wBAFK,EAEQ;AAAEC,MAAAA,aAAa,EAAE;AAAjB,KAFR,EAGTC,WAHS,0CAIyBnB,SAJzB,+EAIoGS,WAAW,CACrHP,QADqH,CAJ/G,qBAAZ;AAQA,wBAAOG,eAAMe,aAAN,CAAoB,KAApB,EAA2B;AAChCC,MAAAA,SAAS,EAAE,qBADqB;AAEhCC,MAAAA,uBAAuB,EAAE;AAAEC,QAAAA,MAAM,EAAEX,GAAG,CAACY;AAAd;AAFO,KAA3B,CAAP;AAID,GAhBM,EAgBJ,CAACtB,QAAD,EAAWE,MAAX,EAAmBJ,SAAnB,CAhBI,CAAP;AAiBD",
|
|
37
36
|
"sourcesContent": [
|
|
38
|
-
"import React, { useContext, useEffect, useMemo } from 'react';\nimport { rehype } from 'rehype';\
|
|
37
|
+
"import React, { useContext, useEffect, useMemo } from 'react';\nimport { rehype } from 'rehype';\nimport rehypePrism from 'rehype-prism-plus';\nimport { IProps } from '../../Editor';\nimport { EditorContext } from '../../Context';\n\nexport interface MarkdownProps extends IProps, React.HTMLAttributes<HTMLPreElement> {}\n\nexport default function Markdown(props: MarkdownProps) {\n const { prefixCls } = props;\n const { markdown = '', dispatch } = useContext(EditorContext);\n const preRef = React.createRef<HTMLPreElement>();\n useEffect(() => {\n if (preRef.current && dispatch) {\n dispatch({ textareaPre: preRef.current });\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n function html2Escape(sHtml: string) {\n return sHtml\n .replace(/```(tsx?|jsx?|html|xml)(.*)\\s+([\\s\\S]*?)(\\s.+)?```/g, (str: string) => {\n return str.replace(\n /[<&\"]/g,\n (c: string) => (({ '<': '<', '>': '>', '&': '&', '\"': '"' } as Record<string, string>)[c]),\n );\n })\n .replace(\n /[<&\"]/g,\n (c: string) => (({ '<': '<', '>': '>', '&': '&', '\"': '"' } as Record<string, string>)[c]),\n );\n }\n\n return useMemo(() => {\n if (!markdown) {\n return <pre children={markdown || ''} ref={preRef} className={`${prefixCls}-text-pre wmde-markdown-color`} />;\n }\n const str = rehype()\n .data('settings', { fragment: true })\n .use(rehypePrism, { ignoreMissing: true })\n .processSync(\n `<pre class=\"language-markdown ${prefixCls}-text-pre wmde-markdown-color\"><code class=\"language-markdown\">${html2Escape(\n markdown,\n )}\\n</code></pre>`,\n );\n return React.createElement('div', {\n className: 'wmde-markdown-color',\n dangerouslySetInnerHTML: { __html: str.value as string },\n });\n }, [markdown, preRef, prefixCls]);\n}\n"
|
|
39
38
|
]
|
|
40
39
|
}
|
|
@@ -41,6 +41,7 @@ function TextArea(props) {
|
|
|
41
41
|
markdown = _useContext.markdown,
|
|
42
42
|
scrollTop = _useContext.scrollTop,
|
|
43
43
|
commands = _useContext.commands,
|
|
44
|
+
highlightEnable = _useContext.highlightEnable,
|
|
44
45
|
extraCommands = _useContext.extraCommands,
|
|
45
46
|
dispatch = _useContext.dispatch;
|
|
46
47
|
|
|
@@ -74,7 +75,11 @@ function TextArea(props) {
|
|
|
74
75
|
});
|
|
75
76
|
} // eslint-disable-next-line react-hooks/exhaustive-deps
|
|
76
77
|
|
|
77
|
-
}, []);
|
|
78
|
+
}, []); // @ts-ignore
|
|
79
|
+
|
|
80
|
+
var textStyle = highlightEnable ? {} : {
|
|
81
|
+
'-webkit-text-fill-color': 'inherit'
|
|
82
|
+
};
|
|
78
83
|
return /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
|
|
79
84
|
ref: warp,
|
|
80
85
|
className: "".concat(prefixCls, "-aree ").concat(className || ''),
|
|
@@ -104,11 +109,13 @@ function TextArea(props) {
|
|
|
104
109
|
}), {
|
|
105
110
|
ref: textRef
|
|
106
111
|
}) : /*#__PURE__*/(0, _jsxRuntime.jsxs)(_react.Fragment, {
|
|
107
|
-
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_Markdown.default, {
|
|
112
|
+
children: [highlightEnable && /*#__PURE__*/(0, _jsxRuntime.jsx)(_Markdown.default, {
|
|
108
113
|
prefixCls: prefixCls
|
|
109
|
-
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Textarea.default, (0, _objectSpread2.default)({
|
|
114
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Textarea.default, (0, _objectSpread2.default)((0, _objectSpread2.default)({
|
|
110
115
|
prefixCls: prefixCls
|
|
111
|
-
}, otherProps)
|
|
116
|
+
}, otherProps), {}, {
|
|
117
|
+
style: textStyle
|
|
118
|
+
}))]
|
|
112
119
|
})
|
|
113
120
|
})
|
|
114
121
|
});
|
|
@@ -15,6 +15,7 @@
|
|
|
15
15
|
"markdown",
|
|
16
16
|
"scrollTop",
|
|
17
17
|
"commands",
|
|
18
|
+
"highlightEnable",
|
|
18
19
|
"extraCommands",
|
|
19
20
|
"dispatch",
|
|
20
21
|
"textRef",
|
|
@@ -30,6 +31,7 @@
|
|
|
30
31
|
"commandOrchestrator",
|
|
31
32
|
"TextAreaCommandOrchestrator",
|
|
32
33
|
"textarea",
|
|
34
|
+
"textStyle",
|
|
33
35
|
"cloneElement",
|
|
34
36
|
"value",
|
|
35
37
|
"autoComplete",
|
|
@@ -44,8 +46,8 @@
|
|
|
44
46
|
"useContext",
|
|
45
47
|
"ref"
|
|
46
48
|
],
|
|
47
|
-
"mappings": ";;;;;;;;;;;;;;;AAAA;;AACA;;AACA;;AACA;;AACA;;AAEA;;;;;;AAoCe,SAASA,QAAT,CAAkBC,KAAlB,EAAyC;AACtD,aAA0EA,KAAK,IAAI,EAAnF;AAAA,MAAQC,SAAR,QAAQA,SAAR;AAAA,MAAmBC,SAAnB,QAAmBA,SAAnB;AAAA,MAA8BC,QAA9B,QAA8BA,QAA9B;AAAA,MAAwCC,cAAxC,QAAwCA,cAAxC;AAAA,MAA2DC,UAA3D;;AACA,
|
|
49
|
+
"mappings": "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",
|
|
48
50
|
"sourcesContent": [
|
|
49
|
-
"import React, { useEffect, Fragment, useContext } from 'react';\nimport { EditorContext, ContextStore, ExecuteCommandState } from '../../Context';\nimport shortcuts from './shortcuts';\nimport Markdown from './Markdown';\nimport Textarea, { TextAreaProps } from './Textarea';\nimport { IProps } from '../../Editor';\nimport { TextAreaCommandOrchestrator, ICommand } from '../../commands';\nimport './index.less';\n\ntype RenderTextareaHandle = {\n dispatch: ContextStore['dispatch'];\n onChange?: TextAreaProps['onChange'];\n useContext?: {\n commands: ContextStore['commands'];\n extraCommands: ContextStore['extraCommands'];\n commandOrchestrator?: TextAreaCommandOrchestrator;\n };\n shortcuts?: (\n e: KeyboardEvent | React.KeyboardEvent<HTMLTextAreaElement>,\n commands: ICommand[],\n commandOrchestrator?: TextAreaCommandOrchestrator,\n dispatch?: React.Dispatch<ContextStore>,\n state?: ExecuteCommandState,\n ) => void;\n};\n\nexport interface ITextAreaProps\n extends Omit<React.TextareaHTMLAttributes<HTMLTextAreaElement>, 'value' | 'onScroll'>,\n IProps {\n value?: string;\n onScroll?: (e: React.UIEvent<HTMLDivElement>) => void;\n renderTextarea?: (\n props: React.TextareaHTMLAttributes<HTMLTextAreaElement> | React.HTMLAttributes<HTMLDivElement>,\n opts: RenderTextareaHandle,\n ) => JSX.Element;\n}\n\nexport type TextAreaRef = {\n text?: HTMLTextAreaElement;\n warp?: HTMLDivElement;\n};\n\nexport default function TextArea(props: ITextAreaProps) {\n const { prefixCls, className, onScroll, renderTextarea, ...otherProps } = props || {};\n const { markdown, scrollTop, commands, extraCommands, dispatch } = useContext(EditorContext);\n const textRef = React.useRef<HTMLTextAreaElement>(null);\n const executeRef = React.useRef<TextAreaCommandOrchestrator>();\n const warp = React.createRef<HTMLDivElement>();\n useEffect(() => {\n const state: ContextStore = {};\n if (warp.current) {\n state.textareaWarp = warp.current || undefined;\n warp.current.scrollTop = scrollTop || 0;\n }\n if (dispatch) {\n dispatch({ ...state });\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n useEffect(() => {\n if (textRef.current && dispatch) {\n const commandOrchestrator = new TextAreaCommandOrchestrator(textRef.current);\n executeRef.current = commandOrchestrator;\n dispatch({ textarea: textRef.current, commandOrchestrator });\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return (\n <div ref={warp} className={`${prefixCls}-aree ${className || ''}`} onScroll={onScroll}>\n <div className={`${prefixCls}-text`}>\n {renderTextarea ? (\n React.cloneElement(\n renderTextarea(\n {\n ...otherProps,\n value: markdown,\n autoComplete: 'off',\n autoCorrect: 'off',\n spellCheck: 'false',\n autoCapitalize: 'off',\n className: `${prefixCls}-text-input`,\n style: {\n WebkitTextFillColor: 'inherit',\n overflow: 'auto',\n },\n },\n {\n dispatch,\n onChange: otherProps.onChange,\n shortcuts,\n useContext: { commands, extraCommands, commandOrchestrator: executeRef.current },\n },\n ),\n {\n ref: textRef,\n },\n )\n ) : (\n <Fragment>\n <Markdown prefixCls={prefixCls}
|
|
51
|
+
"import React, { useEffect, Fragment, useContext } from 'react';\nimport { EditorContext, ContextStore, ExecuteCommandState } from '../../Context';\nimport shortcuts from './shortcuts';\nimport Markdown from './Markdown';\nimport Textarea, { TextAreaProps } from './Textarea';\nimport { IProps } from '../../Editor';\nimport { TextAreaCommandOrchestrator, ICommand } from '../../commands';\nimport './index.less';\n\ntype RenderTextareaHandle = {\n dispatch: ContextStore['dispatch'];\n onChange?: TextAreaProps['onChange'];\n useContext?: {\n commands: ContextStore['commands'];\n extraCommands: ContextStore['extraCommands'];\n commandOrchestrator?: TextAreaCommandOrchestrator;\n };\n shortcuts?: (\n e: KeyboardEvent | React.KeyboardEvent<HTMLTextAreaElement>,\n commands: ICommand[],\n commandOrchestrator?: TextAreaCommandOrchestrator,\n dispatch?: React.Dispatch<ContextStore>,\n state?: ExecuteCommandState,\n ) => void;\n};\n\nexport interface ITextAreaProps\n extends Omit<React.TextareaHTMLAttributes<HTMLTextAreaElement>, 'value' | 'onScroll'>,\n IProps {\n value?: string;\n onScroll?: (e: React.UIEvent<HTMLDivElement>) => void;\n renderTextarea?: (\n props: React.TextareaHTMLAttributes<HTMLTextAreaElement> | React.HTMLAttributes<HTMLDivElement>,\n opts: RenderTextareaHandle,\n ) => JSX.Element;\n}\n\nexport type TextAreaRef = {\n text?: HTMLTextAreaElement;\n warp?: HTMLDivElement;\n};\n\nexport default function TextArea(props: ITextAreaProps) {\n const { prefixCls, className, onScroll, renderTextarea, ...otherProps } = props || {};\n const { markdown, scrollTop, commands, highlightEnable, extraCommands, dispatch } = useContext(EditorContext);\n const textRef = React.useRef<HTMLTextAreaElement>(null);\n const executeRef = React.useRef<TextAreaCommandOrchestrator>();\n const warp = React.createRef<HTMLDivElement>();\n useEffect(() => {\n const state: ContextStore = {};\n if (warp.current) {\n state.textareaWarp = warp.current || undefined;\n warp.current.scrollTop = scrollTop || 0;\n }\n if (dispatch) {\n dispatch({ ...state });\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n useEffect(() => {\n if (textRef.current && dispatch) {\n const commandOrchestrator = new TextAreaCommandOrchestrator(textRef.current);\n executeRef.current = commandOrchestrator;\n dispatch({ textarea: textRef.current, commandOrchestrator });\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n // @ts-ignore\n const textStyle: React.CSSProperties = highlightEnable ? {} : { '-webkit-text-fill-color': 'inherit' };\n\n return (\n <div ref={warp} className={`${prefixCls}-aree ${className || ''}`} onScroll={onScroll}>\n <div className={`${prefixCls}-text`}>\n {renderTextarea ? (\n React.cloneElement(\n renderTextarea(\n {\n ...otherProps,\n value: markdown,\n autoComplete: 'off',\n autoCorrect: 'off',\n spellCheck: 'false',\n autoCapitalize: 'off',\n className: `${prefixCls}-text-input`,\n style: {\n WebkitTextFillColor: 'inherit',\n overflow: 'auto',\n },\n },\n {\n dispatch,\n onChange: otherProps.onChange,\n shortcuts,\n useContext: { commands, extraCommands, commandOrchestrator: executeRef.current },\n },\n ),\n {\n ref: textRef,\n },\n )\n ) : (\n <Fragment>\n {highlightEnable && <Markdown prefixCls={prefixCls} />}\n <Textarea prefixCls={prefixCls} {...otherProps} style={textStyle} />\n </Fragment>\n )}\n </div>\n </div>\n );\n}\n"
|
|
50
52
|
]
|
|
51
53
|
}
|
|
@@ -95,42 +95,32 @@
|
|
|
95
95
|
}
|
|
96
96
|
|
|
97
97
|
.@{md-editor}-text-pre {
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
.punctuation {
|
|
101
|
-
color: #c3c3c3;
|
|
102
|
-
}
|
|
103
|
-
.table-header {
|
|
104
|
-
color: #000;
|
|
105
|
-
}
|
|
98
|
+
.punctuation {
|
|
99
|
+
color: var(--color-prettylights-syntax-comment) !important;
|
|
106
100
|
}
|
|
107
|
-
|
|
108
|
-
.
|
|
109
|
-
color:
|
|
110
|
-
.content {
|
|
111
|
-
color: #0366d6;
|
|
112
|
-
}
|
|
101
|
+
.token.url,
|
|
102
|
+
.token.content {
|
|
103
|
+
color: var(--color-prettylights-syntax-constant) !important;
|
|
113
104
|
}
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
color: #999;
|
|
105
|
+
.token.title.important {
|
|
106
|
+
color: var(--color-prettylights-syntax-markup-bold);
|
|
117
107
|
}
|
|
118
|
-
.
|
|
119
|
-
color:
|
|
108
|
+
.token.code-block .function {
|
|
109
|
+
color: var(--color-prettylights-syntax-entity);
|
|
120
110
|
}
|
|
121
|
-
.
|
|
122
|
-
|
|
123
|
-
color: #000 !important;
|
|
111
|
+
.token.bold {
|
|
112
|
+
font-weight: unset !important;
|
|
124
113
|
}
|
|
125
|
-
.title {
|
|
114
|
+
.token.title {
|
|
126
115
|
line-height: unset !important;
|
|
127
116
|
font-size: unset !important;
|
|
128
117
|
font-weight: unset !important;
|
|
129
118
|
}
|
|
130
|
-
.code.keyword {
|
|
131
|
-
color:
|
|
119
|
+
.token.code.keyword {
|
|
120
|
+
color: var(--color-prettylights-syntax-constant) !important;
|
|
132
121
|
}
|
|
133
|
-
.strike
|
|
134
|
-
|
|
122
|
+
.token.strike,
|
|
123
|
+
.token.strike .content {
|
|
124
|
+
color: var(--color-prettylights-syntax-markup-deleted-text) !important;
|
|
135
125
|
}
|
|
136
126
|
}
|
|
@@ -4,8 +4,9 @@
|
|
|
4
4
|
&-toolbar-child {
|
|
5
5
|
position: absolute;
|
|
6
6
|
border-radius: 3px;
|
|
7
|
-
box-shadow: 0 0 0 1px
|
|
8
|
-
|
|
7
|
+
box-shadow: 0 0 0 1px var(--color-border-default), 0 0 0 var(--color-border-default),
|
|
8
|
+
0 1px 1px var(--color-border-default);
|
|
9
|
+
background-color: var(--color-canvas-default);
|
|
9
10
|
z-index: 1;
|
|
10
11
|
display: none;
|
|
11
12
|
&.active {
|
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
.@{md-editor} {
|
|
4
4
|
&-toolbar {
|
|
5
|
-
border-bottom: 1px solid
|
|
6
|
-
background-color:
|
|
5
|
+
border-bottom: 1px solid var(--color-border-default);
|
|
6
|
+
background-color: var(--color-canvas-default);
|
|
7
7
|
padding: 0 5px 0 5px;
|
|
8
8
|
display: flex;
|
|
9
9
|
justify-content: space-between;
|
|
@@ -24,7 +24,6 @@
|
|
|
24
24
|
height: 20px;
|
|
25
25
|
line-height: 14px;
|
|
26
26
|
background: none;
|
|
27
|
-
color: #586069;
|
|
28
27
|
padding: 4px;
|
|
29
28
|
margin: 0 1px;
|
|
30
29
|
border-radius: 2px;
|
|
@@ -35,27 +34,28 @@
|
|
|
35
34
|
cursor: pointer;
|
|
36
35
|
transition: all 0.3s;
|
|
37
36
|
white-space: nowrap;
|
|
37
|
+
color: var(--color-fg-default);
|
|
38
38
|
&:hover,
|
|
39
39
|
&:focus {
|
|
40
|
-
color:
|
|
41
|
-
|
|
40
|
+
background-color: var(--color-neutral-muted);
|
|
41
|
+
color: var(--color-accent-fg);
|
|
42
42
|
}
|
|
43
43
|
&:active {
|
|
44
|
-
color:
|
|
45
|
-
|
|
44
|
+
background-color: var(--color-neutral-muted);
|
|
45
|
+
color: var(--color-danger-fg);
|
|
46
46
|
}
|
|
47
47
|
&:disabled {
|
|
48
|
-
color:
|
|
48
|
+
color: var(--color-border-default);
|
|
49
49
|
cursor: not-allowed;
|
|
50
50
|
&:hover {
|
|
51
51
|
background-color: transparent;
|
|
52
|
-
color:
|
|
52
|
+
color: var(--color-border-default);
|
|
53
53
|
}
|
|
54
54
|
}
|
|
55
55
|
}
|
|
56
56
|
&.active > button {
|
|
57
|
-
color:
|
|
58
|
-
background-color:
|
|
57
|
+
color: var(--color-accent-fg);
|
|
58
|
+
background-color: var(--color-neutral-muted);
|
|
59
59
|
}
|
|
60
60
|
}
|
|
61
61
|
&-divider {
|
|
@@ -63,7 +63,7 @@
|
|
|
63
63
|
width: 1px;
|
|
64
64
|
margin: -3px 3px 0 3px !important;
|
|
65
65
|
vertical-align: middle;
|
|
66
|
-
background-color:
|
|
66
|
+
background-color: var(--color-border-default);
|
|
67
67
|
}
|
|
68
68
|
}
|
|
69
69
|
}
|
package/lib/index.less
CHANGED
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
@md-editor:~ "w-md-editor";
|
|
2
2
|
|
|
3
3
|
.@{md-editor} {
|
|
4
|
-
color: #24292e;
|
|
5
4
|
text-align: left;
|
|
6
|
-
box-shadow: 0 0 0 1px rgba(16, 22, 26, 0.1), 0 0 0 rgba(16, 22, 26, 0), 0 1px 1px rgba(16, 22, 26, 0.2);
|
|
7
5
|
border-radius: 3px;
|
|
8
6
|
padding-bottom: 1px;
|
|
9
7
|
position: relative;
|
|
10
|
-
|
|
8
|
+
color: var(--color-fg-default);
|
|
9
|
+
box-shadow: 0 0 0 1px var(--color-border-default), 0 0 0 var(--color-border-default),
|
|
10
|
+
0 1px 1px var(--color-border-default);
|
|
11
|
+
background-color: var(--color-canvas-default);
|
|
11
12
|
font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;
|
|
12
13
|
&-content {
|
|
13
14
|
position: relative;
|
|
@@ -21,7 +22,7 @@
|
|
|
21
22
|
&-preview {
|
|
22
23
|
width: 50%;
|
|
23
24
|
box-sizing: border-box;
|
|
24
|
-
box-shadow: inset 1px 0 0 0
|
|
25
|
+
box-shadow: inset 1px 0 0 0 var(--color-border-default);
|
|
25
26
|
position: absolute;
|
|
26
27
|
padding: 10px 20px;
|
|
27
28
|
overflow: auto;
|
|
@@ -38,7 +39,7 @@
|
|
|
38
39
|
&-show-preview &-input {
|
|
39
40
|
width: 0%;
|
|
40
41
|
overflow: hidden;
|
|
41
|
-
background-color:
|
|
42
|
+
background-color: var(--color-canvas-default);
|
|
42
43
|
}
|
|
43
44
|
&-show-preview &-preview {
|
|
44
45
|
width: 100%;
|
package/markdown-editor.css
CHANGED
|
@@ -110,47 +110,39 @@
|
|
|
110
110
|
color: transparent !important;
|
|
111
111
|
}
|
|
112
112
|
}
|
|
113
|
-
.w-md-editor-text-pre {
|
|
114
|
-
color:
|
|
115
|
-
}
|
|
116
|
-
.w-md-editor-text-pre .table .punctuation {
|
|
117
|
-
color: #c3c3c3;
|
|
118
|
-
}
|
|
119
|
-
.w-md-editor-text-pre .table .table-header {
|
|
120
|
-
color: #000;
|
|
113
|
+
.w-md-editor-text-pre .punctuation {
|
|
114
|
+
color: var(--color-prettylights-syntax-comment) !important;
|
|
121
115
|
}
|
|
122
|
-
.w-md-editor-text-pre .url
|
|
123
|
-
|
|
116
|
+
.w-md-editor-text-pre .token.url,
|
|
117
|
+
.w-md-editor-text-pre .token.content {
|
|
118
|
+
color: var(--color-prettylights-syntax-constant) !important;
|
|
124
119
|
}
|
|
125
|
-
.w-md-editor-text-pre .
|
|
126
|
-
color:
|
|
120
|
+
.w-md-editor-text-pre .token.title.important {
|
|
121
|
+
color: var(--color-prettylights-syntax-markup-bold);
|
|
127
122
|
}
|
|
128
|
-
.w-md-editor-text-pre .
|
|
129
|
-
color:
|
|
123
|
+
.w-md-editor-text-pre .token.code-block .function {
|
|
124
|
+
color: var(--color-prettylights-syntax-entity);
|
|
130
125
|
}
|
|
131
|
-
.w-md-editor-text-pre .
|
|
132
|
-
|
|
133
|
-
}
|
|
134
|
-
.w-md-editor-text-pre .title,
|
|
135
|
-
.w-md-editor-text-pre .bold {
|
|
136
|
-
color: #000 !important;
|
|
126
|
+
.w-md-editor-text-pre .token.bold {
|
|
127
|
+
font-weight: unset !important;
|
|
137
128
|
}
|
|
138
|
-
.w-md-editor-text-pre .title {
|
|
129
|
+
.w-md-editor-text-pre .token.title {
|
|
139
130
|
line-height: unset !important;
|
|
140
131
|
font-size: unset !important;
|
|
141
132
|
font-weight: unset !important;
|
|
142
133
|
}
|
|
143
|
-
.w-md-editor-text-pre .code.keyword {
|
|
144
|
-
color:
|
|
134
|
+
.w-md-editor-text-pre .token.code.keyword {
|
|
135
|
+
color: var(--color-prettylights-syntax-constant) !important;
|
|
145
136
|
}
|
|
146
|
-
.w-md-editor-text-pre .strike
|
|
147
|
-
|
|
137
|
+
.w-md-editor-text-pre .token.strike,
|
|
138
|
+
.w-md-editor-text-pre .token.strike .content {
|
|
139
|
+
color: var(--color-prettylights-syntax-markup-deleted-text) !important;
|
|
148
140
|
}
|
|
149
141
|
.w-md-editor-toolbar-child {
|
|
150
142
|
position: absolute;
|
|
151
143
|
border-radius: 3px;
|
|
152
|
-
box-shadow: 0 0 0 1px
|
|
153
|
-
background-color:
|
|
144
|
+
box-shadow: 0 0 0 1px var(--color-border-default), 0 0 0 var(--color-border-default), 0 1px 1px var(--color-border-default);
|
|
145
|
+
background-color: var(--color-canvas-default);
|
|
154
146
|
z-index: 1;
|
|
155
147
|
display: none;
|
|
156
148
|
}
|
|
@@ -173,8 +165,8 @@
|
|
|
173
165
|
margin: 0;
|
|
174
166
|
}
|
|
175
167
|
.w-md-editor-toolbar {
|
|
176
|
-
border-bottom: 1px solid
|
|
177
|
-
background-color:
|
|
168
|
+
border-bottom: 1px solid var(--color-border-default);
|
|
169
|
+
background-color: var(--color-canvas-default);
|
|
178
170
|
padding: 0 5px 0 5px;
|
|
179
171
|
display: flex;
|
|
180
172
|
justify-content: space-between;
|
|
@@ -198,7 +190,6 @@
|
|
|
198
190
|
height: 20px;
|
|
199
191
|
line-height: 14px;
|
|
200
192
|
background: none;
|
|
201
|
-
color: #586069;
|
|
202
193
|
padding: 4px;
|
|
203
194
|
margin: 0 1px;
|
|
204
195
|
border-radius: 2px;
|
|
@@ -209,43 +200,44 @@
|
|
|
209
200
|
cursor: pointer;
|
|
210
201
|
transition: all 0.3s;
|
|
211
202
|
white-space: nowrap;
|
|
203
|
+
color: var(--color-fg-default);
|
|
212
204
|
}
|
|
213
205
|
.w-md-editor-toolbar li > button:hover,
|
|
214
206
|
.w-md-editor-toolbar li > button:focus {
|
|
215
|
-
color:
|
|
216
|
-
|
|
207
|
+
background-color: var(--color-neutral-muted);
|
|
208
|
+
color: var(--color-accent-fg);
|
|
217
209
|
}
|
|
218
210
|
.w-md-editor-toolbar li > button:active {
|
|
219
|
-
color:
|
|
220
|
-
|
|
211
|
+
background-color: var(--color-neutral-muted);
|
|
212
|
+
color: var(--color-danger-fg);
|
|
221
213
|
}
|
|
222
214
|
.w-md-editor-toolbar li > button:disabled {
|
|
223
|
-
color:
|
|
215
|
+
color: var(--color-border-default);
|
|
224
216
|
cursor: not-allowed;
|
|
225
217
|
}
|
|
226
218
|
.w-md-editor-toolbar li > button:disabled:hover {
|
|
227
219
|
background-color: transparent;
|
|
228
|
-
color:
|
|
220
|
+
color: var(--color-border-default);
|
|
229
221
|
}
|
|
230
222
|
.w-md-editor-toolbar li.active > button {
|
|
231
|
-
color:
|
|
232
|
-
background-color:
|
|
223
|
+
color: var(--color-accent-fg);
|
|
224
|
+
background-color: var(--color-neutral-muted);
|
|
233
225
|
}
|
|
234
226
|
.w-md-editor-toolbar-divider {
|
|
235
227
|
height: 14px;
|
|
236
228
|
width: 1px;
|
|
237
229
|
margin: -3px 3px 0 3px !important;
|
|
238
230
|
vertical-align: middle;
|
|
239
|
-
background-color:
|
|
231
|
+
background-color: var(--color-border-default);
|
|
240
232
|
}
|
|
241
233
|
.w-md-editor {
|
|
242
|
-
color: #24292e;
|
|
243
234
|
text-align: left;
|
|
244
|
-
box-shadow: 0 0 0 1px rgba(16, 22, 26, 0.1), 0 0 0 rgba(16, 22, 26, 0), 0 1px 1px rgba(16, 22, 26, 0.2);
|
|
245
235
|
border-radius: 3px;
|
|
246
236
|
padding-bottom: 1px;
|
|
247
237
|
position: relative;
|
|
248
|
-
|
|
238
|
+
color: var(--color-fg-default);
|
|
239
|
+
box-shadow: 0 0 0 1px var(--color-border-default), 0 0 0 var(--color-border-default), 0 1px 1px var(--color-border-default);
|
|
240
|
+
background-color: var(--color-canvas-default);
|
|
249
241
|
font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;
|
|
250
242
|
}
|
|
251
243
|
.w-md-editor-content {
|
|
@@ -260,7 +252,7 @@
|
|
|
260
252
|
.w-md-editor-preview {
|
|
261
253
|
width: 50%;
|
|
262
254
|
box-sizing: border-box;
|
|
263
|
-
box-shadow: inset 1px 0 0 0
|
|
255
|
+
box-shadow: inset 1px 0 0 0 var(--color-border-default);
|
|
264
256
|
position: absolute;
|
|
265
257
|
padding: 10px 20px;
|
|
266
258
|
overflow: auto;
|
|
@@ -277,7 +269,7 @@
|
|
|
277
269
|
.w-md-editor-show-preview .w-md-editor-input {
|
|
278
270
|
width: 0%;
|
|
279
271
|
overflow: hidden;
|
|
280
|
-
background-color:
|
|
272
|
+
background-color: var(--color-canvas-default);
|
|
281
273
|
}
|
|
282
274
|
.w-md-editor-show-preview .w-md-editor-preview {
|
|
283
275
|
width: 100%;
|