@uiw/react-md-editor 3.6.4 → 3.8.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 CHANGED
@@ -55,7 +55,6 @@ npm i @uiw/react-md-editor
55
55
 
56
56
  ```jsx
57
57
  import React from "react";
58
- import ReactDOM from "react-dom";
59
58
  import MDEditor from '@uiw/react-md-editor';
60
59
 
61
60
  export default function App() {
@@ -201,7 +200,7 @@ export default function App() {
201
200
  value={mdKaTeX}
202
201
  previewOptions={{
203
202
  components: {
204
- code: ({ inline, children, className, ...props }) => {
203
+ code: ({ inline, children = [], className, ...props }) => {
205
204
  const txt = children[0] || '';
206
205
  if (inline) {
207
206
  if (typeof txt === 'string' && /^\$\$(.*)\$\$/.test(txt)) {
@@ -231,7 +230,7 @@ export default function App() {
231
230
  }
232
231
  ```
233
232
 
234
- ### Markdown text to Imgage
233
+ ### Markdown text to Image
235
234
 
236
235
  [![Open in CodeSandbox](https://img.shields.io/badge/Open%20in-CodeSandbox-blue?logo=codesandbox)](https://codesandbox.io/embed/react-md-editor-text-to-images-ijqmx?fontsize=14&hidenavigation=1&theme=dark)
237
236
 
@@ -316,6 +315,15 @@ Bob-->>John: Jolly good!
316
315
  \`\`\`
317
316
  `;
318
317
 
318
+ const getCode = (arr = []) => arr.map(dt => {
319
+ if (typeof dt === 'string') {
320
+ return dt;
321
+ }
322
+ if (dt.props && dt.props.children) {
323
+ return getCode(dt.props.children);
324
+ }
325
+ }).filter(Boolean).join('');
326
+
319
327
  export default function App() {
320
328
  return (
321
329
  <MDEditor
@@ -323,19 +331,19 @@ export default function App() {
323
331
  value={mdMermaid || ""}
324
332
  previewOptions={{
325
333
  components: {
326
- code: ({ inline, children, className, ...props }) => {
327
- const txt = children[0] || '';
334
+ code: ({ inline, children = [], className, ...props }) => {
335
+ const code = getCode(children);
328
336
  if (
329
- typeof txt === 'string' &&
337
+ typeof code === 'string' &&
330
338
  typeof className === 'string' &&
331
339
  /^language-mermaid/.test(className.toLocaleLowerCase())
332
340
  ) {
333
341
  const Elm = document.createElement("div");
334
342
  Elm.id = "demo";
335
- const svg = mermaid.render("demo", txt);
343
+ const svg = mermaid.render("demo", code);
336
344
  return <code dangerouslySetInnerHTML={{ __html: svg }} />
337
345
  }
338
- return <code className={String(className)}>{txt}</code>;
346
+ return <code className={String(className)}>{children}</code>;
339
347
  },
340
348
  },
341
349
  }}
@@ -370,7 +378,7 @@ import dynamic from "next/dynamic";
370
378
  import { useState } from "react";
371
379
 
372
380
  const MDEditor = dynamic(
373
- () => import("@uiw/react-md-editor").then((mod) => mod.default),
381
+ () => import("@uiw/react-md-editor"),
374
382
  { ssr: false }
375
383
  );
376
384
 
@@ -391,6 +399,7 @@ export default HomePage;
391
399
  - `value: string`: The Markdown value.
392
400
  - `onChange?: (value: string)`: Event handler for the `onChange` event.
393
401
  - `commands?: ICommand[]`: An array of [`ICommand`](https://github.com/uiwjs/react-md-editor/blob/d02543050c9abd8f7c72ae02b6421ac2e6ae421a/src/commands/index.ts#L39-L57), which, each one, contain a [`commands`](https://github.com/uiwjs/react-md-editor/blob/d02543050c9abd8f7c72ae02b6421ac2e6ae421a/src/commands/index.ts#L155-L180) property. If no commands are specified, the default will be used. Commands are explained in more details below.
402
+ - `commandsFilter?: (command: ICommand) => boolean | ICommand`: Filter or modify your commands.
394
403
  - `extraCommands?: ICommand[]`: Displayed on the right side of the toolbar.
395
404
  - `autoFocus?: true`: Can be used to make `Markdown Editor` focus itself on initialization.
396
405
  - `previewOptions?: ReactMarkdown.ReactMarkdownProps`: This is reset [@uiw/react-markdown-preview](https://github.com/uiwjs/react-markdown-preview/tree/e6e8462d9a5c64a7045e25adcb4928095d74ca37#options-props) settings.
package/esm/Editor.d.ts CHANGED
@@ -76,6 +76,11 @@ export interface MDEditorProps extends Omit<React.HTMLAttributes<HTMLDivElement>
76
76
  * You can create your own commands or reuse existing commands.
77
77
  */
78
78
  commands?: ICommand[];
79
+ /**
80
+ * Filter or modify your commands.
81
+ * https://github.com/uiwjs/react-md-editor/issues/296
82
+ */
83
+ commandsFilter?: (command: ICommand) => boolean | ICommand;
79
84
  /**
80
85
  * You can create your own commands or reuse existing commands.
81
86
  */
package/esm/Editor.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import _extends from "@babel/runtime/helpers/extends";
2
2
  import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/objectWithoutPropertiesLoose";
3
- var _excluded = ["prefixCls", "className", "value", "commands", "extraCommands", "height", "toolbarHeight", "enableScroll", "visiableDragbar", "highlightEnable", "preview", "fullscreen", "previewOptions", "textareaProps", "maxHeight", "minHeight", "autoFocus", "tabSize", "onChange", "hideToolbar", "renderTextarea"];
3
+ var _excluded = ["prefixCls", "className", "value", "commands", "commandsFilter", "extraCommands", "height", "toolbarHeight", "enableScroll", "visiableDragbar", "highlightEnable", "preview", "fullscreen", "previewOptions", "textareaProps", "maxHeight", "minHeight", "autoFocus", "tabSize", "onChange", "hideToolbar", "renderTextarea"];
4
4
  import React, { useEffect, useReducer, useMemo, useRef, useImperativeHandle } from 'react';
5
5
  import MarkdownPreview from '@uiw/react-markdown-preview';
6
6
  import TextArea from './components/TextArea';
@@ -30,6 +30,7 @@ var InternalMDEditor = (props, ref) => {
30
30
  className,
31
31
  value: propsValue,
32
32
  commands = getCommands(),
33
+ commandsFilter,
33
34
  extraCommands = getExtraCommands(),
34
35
  height = 200,
35
36
  toolbarHeight = 29,
@@ -50,6 +51,7 @@ var InternalMDEditor = (props, ref) => {
50
51
  } = _ref,
51
52
  other = _objectWithoutPropertiesLoose(_ref, _excluded);
52
53
 
54
+ var cmds = commands.map(item => commandsFilter ? commandsFilter(item) : item).filter(Boolean);
53
55
  var [state, dispatch] = useReducer(reducer, {
54
56
  markdown: propsValue,
55
57
  preview: previewType,
@@ -58,7 +60,7 @@ var InternalMDEditor = (props, ref) => {
58
60
  tabSize,
59
61
  scrollTop: 0,
60
62
  scrollTopPreview: 0,
61
- commands,
63
+ commands: cmds,
62
64
  extraCommands,
63
65
  fullscreen,
64
66
  onChange,
@@ -198,7 +200,7 @@ var InternalMDEditor = (props, ref) => {
198
200
  onScroll: e => handleScroll(e, 'preview'),
199
201
  ref: previewRef,
200
202
  source: state.markdown || '',
201
- className: prefixCls + "-preview"
203
+ className: prefixCls + "-preview " + (previewOptions.className || '')
202
204
  }))]
203
205
  }), visiableDragbar && !state.fullscreen && /*#__PURE__*/_jsx(DragBar, {
204
206
  prefixCls: prefixCls,
package/esm/Editor.js.map CHANGED
@@ -32,6 +32,7 @@
32
32
  "value",
33
33
  "propsValue",
34
34
  "commands",
35
+ "commandsFilter",
35
36
  "extraCommands",
36
37
  "height",
37
38
  "toolbarHeight",
@@ -51,6 +52,11 @@
51
52
  "hideToolbar",
52
53
  "renderTextarea",
53
54
  "other",
55
+ "cmds",
56
+ "map",
57
+ "item",
58
+ "filter",
59
+ "Boolean",
54
60
  "state",
55
61
  "dispatch",
56
62
  "markdown",
@@ -64,8 +70,6 @@
64
70
  "stateInit",
65
71
  "undefined",
66
72
  "cls",
67
- "filter",
68
- "Boolean",
69
73
  "join",
70
74
  "trim",
71
75
  "textareaDomRef",
@@ -91,8 +95,8 @@
91
95
  "forwardRef",
92
96
  "Markdown"
93
97
  ],
94
- "mappings": "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",
98
+ "mappings": "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",
95
99
  "sourcesContent": [
96
- "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 * 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 * You can create your own commands or reuse existing commands.\n */\n commands?: 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 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 previewOptions = {},\n textareaProps,\n maxHeight = 1200,\n minHeight = 100,\n autoFocus,\n tabSize = 2,\n onChange,\n hideToolbar,\n renderTextarea,\n ...other\n } = props || {};\n let [state, dispatch] = useReducer(reducer, {\n markdown: propsValue,\n preview: previewType,\n height,\n highlightEnable,\n tabSize,\n scrollTop: 0,\n scrollTopPreview: 0,\n commands,\n extraCommands,\n fullscreen,\n onChange,\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 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} />}\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 renderTextarea={renderTextarea}\n onScroll={(e) => handleScroll(e, 'text')}\n />\n )}\n {/(live|preview)/.test(state.preview || '') && (\n <MarkdownPreview\n {...(previewOptions as unknown)}\n onScroll={(e) => handleScroll(e, 'preview')}\n ref={previewRef}\n source={state.markdown || ''}\n className={`${prefixCls}-preview`}\n />\n )}\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"
100
+ "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 * 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 * 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) => boolean | 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 previewOptions = {},\n textareaProps,\n maxHeight = 1200,\n minHeight = 100,\n autoFocus,\n tabSize = 2,\n onChange,\n hideToolbar,\n renderTextarea,\n ...other\n } = props || {};\n\n const cmds = commands.map((item) => (commandsFilter ? commandsFilter(item) : item)).filter(Boolean) as ICommand[];\n let [state, dispatch] = useReducer(reducer, {\n markdown: propsValue,\n preview: previewType,\n height,\n highlightEnable,\n tabSize,\n scrollTop: 0,\n scrollTopPreview: 0,\n commands: cmds,\n extraCommands,\n fullscreen,\n onChange,\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 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} />}\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 renderTextarea={renderTextarea}\n onScroll={(e) => handleScroll(e, 'text')}\n />\n )}\n {/(live|preview)/.test(state.preview || '') && (\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 </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"
97
101
  ]
98
102
  }
@@ -1,6 +1,6 @@
1
1
  import _extends from "@babel/runtime/helpers/extends";
2
2
  import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/objectWithoutPropertiesLoose";
3
- var _excluded = ["prefixCls"];
3
+ var _excluded = ["prefixCls", "onChange"];
4
4
  import React, { useContext, useEffect } from 'react';
5
5
  import { EditorContext } from '../../Context';
6
6
  import { TextAreaCommandOrchestrator } from '../../commands';
@@ -10,7 +10,8 @@ import "./index.css";
10
10
  import { jsx as _jsx } from "react/jsx-runtime";
11
11
  export default function Textarea(props) {
12
12
  var {
13
- prefixCls
13
+ prefixCls,
14
+ onChange: onChangeFromProps
14
15
  } = props,
15
16
  other = _objectWithoutPropertiesLoose(props, _excluded);
16
17
 
@@ -81,6 +82,7 @@ export default function Textarea(props) {
81
82
  markdown: e.target.value
82
83
  });
83
84
  _onChange && _onChange(e.target.value);
85
+ onChangeFromProps && onChangeFromProps(e);
84
86
  }
85
87
  }));
86
88
  }
@@ -14,6 +14,8 @@
14
14
  "Textarea",
15
15
  "props",
16
16
  "prefixCls",
17
+ "onChange",
18
+ "onChangeFromProps",
17
19
  "other",
18
20
  "markdown",
19
21
  "commands",
@@ -22,7 +24,6 @@
22
24
  "highlightEnable",
23
25
  "extraCommands",
24
26
  "tabSize",
25
- "onChange",
26
27
  "dispatch",
27
28
  "textRef",
28
29
  "useRef",
@@ -39,8 +40,8 @@
39
40
  "target",
40
41
  "value"
41
42
  ],
42
- "mappings": "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",
43
+ "mappings": "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",
43
44
  "sourcesContent": [
44
- "import React, { useContext, useEffect } from 'react';\nimport { IProps } from '../../Editor';\nimport { EditorContext, ExecuteCommandState } from '../../Context';\nimport { TextAreaCommandOrchestrator } from '../../commands';\nimport handleKeyDown from './handleKeyDown';\nimport shortcuts from './shortcuts';\nimport './index.less';\n\nexport interface TextAreaProps extends Omit<React.TextareaHTMLAttributes<HTMLTextAreaElement>, 'value'>, IProps {}\n\nexport default function Textarea(props: TextAreaProps) {\n const { prefixCls, ...other } = props;\n const { markdown, commands, fullscreen, preview, highlightEnable, extraCommands, tabSize, onChange, dispatch } =\n useContext(EditorContext);\n const textRef = React.useRef<HTMLTextAreaElement>(null);\n const executeRef = React.useRef<TextAreaCommandOrchestrator>();\n const statesRef = React.useRef<ExecuteCommandState>({ fullscreen, preview });\n\n useEffect(() => {\n statesRef.current = { fullscreen, preview, highlightEnable };\n }, [fullscreen, preview, highlightEnable]);\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 const onKeyDown = (e: KeyboardEvent | React.KeyboardEvent<HTMLTextAreaElement>) => {\n handleKeyDown(e, tabSize);\n shortcuts(e, [...(commands || []), ...(extraCommands || [])], executeRef.current, dispatch, statesRef.current);\n };\n useEffect(() => {\n if (textRef.current) {\n textRef.current.addEventListener('keydown', onKeyDown);\n }\n return () => {\n if (textRef.current) {\n // eslint-disable-next-line react-hooks/exhaustive-deps\n textRef.current.removeEventListener('keydown', onKeyDown);\n }\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return (\n <textarea\n autoComplete=\"off\"\n autoCorrect=\"off\"\n autoCapitalize=\"off\"\n spellCheck={false}\n {...other}\n ref={textRef}\n className={`${prefixCls}-text-input ${other.className ? other.className : ''}`}\n value={markdown}\n onChange={(e) => {\n dispatch && dispatch({ markdown: e.target.value });\n onChange && onChange(e.target.value);\n }}\n />\n );\n}\n"
45
+ "import React, { useContext, useEffect } from 'react';\nimport { IProps } from '../../Editor';\nimport { EditorContext, ExecuteCommandState } from '../../Context';\nimport { TextAreaCommandOrchestrator } from '../../commands';\nimport handleKeyDown from './handleKeyDown';\nimport shortcuts from './shortcuts';\nimport './index.less';\n\nexport interface TextAreaProps extends Omit<React.TextareaHTMLAttributes<HTMLTextAreaElement>, 'value'>, IProps {}\n\nexport default function Textarea(props: TextAreaProps) {\n const { prefixCls, onChange: onChangeFromProps, ...other } = props;\n const { markdown, commands, fullscreen, preview, highlightEnable, extraCommands, tabSize, onChange, dispatch } =\n useContext(EditorContext);\n const textRef = React.useRef<HTMLTextAreaElement>(null);\n const executeRef = React.useRef<TextAreaCommandOrchestrator>();\n const statesRef = React.useRef<ExecuteCommandState>({ fullscreen, preview });\n\n useEffect(() => {\n statesRef.current = { fullscreen, preview, highlightEnable };\n }, [fullscreen, preview, highlightEnable]);\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 const onKeyDown = (e: KeyboardEvent | React.KeyboardEvent<HTMLTextAreaElement>) => {\n handleKeyDown(e, tabSize);\n shortcuts(e, [...(commands || []), ...(extraCommands || [])], executeRef.current, dispatch, statesRef.current);\n };\n useEffect(() => {\n if (textRef.current) {\n textRef.current.addEventListener('keydown', onKeyDown);\n }\n return () => {\n if (textRef.current) {\n // eslint-disable-next-line react-hooks/exhaustive-deps\n textRef.current.removeEventListener('keydown', onKeyDown);\n }\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return (\n <textarea\n autoComplete=\"off\"\n autoCorrect=\"off\"\n autoCapitalize=\"off\"\n spellCheck={false}\n {...other}\n ref={textRef}\n className={`${prefixCls}-text-input ${other.className ? other.className : ''}`}\n value={markdown}\n onChange={(e) => {\n dispatch && dispatch({ markdown: e.target.value });\n onChange && onChange(e.target.value);\n onChangeFromProps && onChangeFromProps(e);\n }}\n />\n );\n}\n"
45
46
  ]
46
47
  }
@@ -13,7 +13,7 @@ declare type RenderTextareaHandle = {
13
13
  };
14
14
  shortcuts?: (e: KeyboardEvent | React.KeyboardEvent<HTMLTextAreaElement>, commands: ICommand[], commandOrchestrator?: TextAreaCommandOrchestrator, dispatch?: React.Dispatch<ContextStore>, state?: ExecuteCommandState) => void;
15
15
  };
16
- export interface ITextAreaProps extends Omit<React.TextareaHTMLAttributes<HTMLTextAreaElement>, 'value' | 'onChange' | 'onScroll'>, IProps {
16
+ export interface ITextAreaProps extends Omit<React.TextareaHTMLAttributes<HTMLTextAreaElement>, 'value' | 'onScroll'>, IProps {
17
17
  value?: string;
18
18
  onScroll?: (e: React.UIEvent<HTMLDivElement>) => void;
19
19
  renderTextarea?: (props: React.TextareaHTMLAttributes<HTMLTextAreaElement> | React.HTMLAttributes<HTMLDivElement>, opts: RenderTextareaHandle) => JSX.Element;
@@ -50,6 +50,6 @@
50
50
  ],
51
51
  "mappings": "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",
52
52
  "sourcesContent": [
53
- "import React, { useEffect, Fragment, useContext } from 'react';\nimport { EditorContext, ContextStore, ExecuteCommandState } from '../../Context';\nimport shortcuts from './shortcuts';\nimport Markdown from './Markdown';\nimport Textarea from './Textarea';\nimport { MDEditorProps, IProps } from '../../Editor';\nimport { TextAreaCommandOrchestrator, ICommand } from '../../commands';\nimport './index.less';\n\ntype RenderTextareaHandle = {\n dispatch: ContextStore['dispatch'];\n onChange?: MDEditorProps['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' | 'onChange' | '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, onChange, 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,\n shortcuts,\n useContext: { commands, extraCommands, commandOrchestrator: executeRef.current },\n },\n ),\n {\n ref: textRef,\n },\n )\n ) : (\n <Fragment>\n <Markdown prefixCls={prefixCls} />\n <Textarea prefixCls={prefixCls} {...otherProps} />\n </Fragment>\n )}\n </div>\n </div>\n );\n}\n"
53
+ "import React, { useEffect, Fragment, useContext } from 'react';\nimport { EditorContext, ContextStore, ExecuteCommandState } from '../../Context';\nimport shortcuts from './shortcuts';\nimport Markdown from './Markdown';\nimport Textarea from './Textarea';\nimport { MDEditorProps, IProps } from '../../Editor';\nimport { TextAreaCommandOrchestrator, ICommand } from '../../commands';\nimport './index.less';\n\ntype RenderTextareaHandle = {\n dispatch: ContextStore['dispatch'];\n onChange?: MDEditorProps['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, onChange, 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,\n shortcuts,\n useContext: { commands, extraCommands, commandOrchestrator: executeRef.current },\n },\n ),\n {\n ref: textRef,\n },\n )\n ) : (\n <Fragment>\n <Markdown prefixCls={prefixCls} />\n <Textarea prefixCls={prefixCls} {...otherProps} />\n </Fragment>\n )}\n </div>\n </div>\n );\n}\n"
54
54
  ]
55
55
  }
package/lib/Context.js CHANGED
@@ -5,8 +5,8 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
5
5
  Object.defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
- exports.reducer = reducer;
9
8
  exports.EditorContext = void 0;
9
+ exports.reducer = reducer;
10
10
 
11
11
  var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
12
12
 
package/lib/Editor.d.ts CHANGED
@@ -76,6 +76,11 @@ export interface MDEditorProps extends Omit<React.HTMLAttributes<HTMLDivElement>
76
76
  * You can create your own commands or reuse existing commands.
77
77
  */
78
78
  commands?: ICommand[];
79
+ /**
80
+ * Filter or modify your commands.
81
+ * https://github.com/uiwjs/react-md-editor/issues/296
82
+ */
83
+ commandsFilter?: (command: ICommand) => boolean | ICommand;
79
84
  /**
80
85
  * You can create your own commands or reuse existing commands.
81
86
  */
package/lib/Editor.js CHANGED
@@ -31,7 +31,7 @@ var _Context = require("./Context");
31
31
 
32
32
  var _jsxRuntime = require("react/jsx-runtime");
33
33
 
34
- var _excluded = ["prefixCls", "className", "value", "commands", "extraCommands", "height", "toolbarHeight", "enableScroll", "visiableDragbar", "highlightEnable", "preview", "fullscreen", "previewOptions", "textareaProps", "maxHeight", "minHeight", "autoFocus", "tabSize", "onChange", "hideToolbar", "renderTextarea"];
34
+ var _excluded = ["prefixCls", "className", "value", "commands", "commandsFilter", "extraCommands", "height", "toolbarHeight", "enableScroll", "visiableDragbar", "highlightEnable", "preview", "fullscreen", "previewOptions", "textareaProps", "maxHeight", "minHeight", "autoFocus", "tabSize", "onChange", "hideToolbar", "renderTextarea"];
35
35
 
36
36
  function setGroupPopFalse() {
37
37
  var data = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
@@ -49,6 +49,7 @@ var InternalMDEditor = function InternalMDEditor(props, ref) {
49
49
  propsValue = _ref.value,
50
50
  _ref$commands = _ref.commands,
51
51
  commands = _ref$commands === void 0 ? (0, _commands.getCommands)() : _ref$commands,
52
+ commandsFilter = _ref.commandsFilter,
52
53
  _ref$extraCommands = _ref.extraCommands,
53
54
  extraCommands = _ref$extraCommands === void 0 ? (0, _commands.getExtraCommands)() : _ref$extraCommands,
54
55
  _ref$height = _ref.height,
@@ -80,6 +81,10 @@ var InternalMDEditor = function InternalMDEditor(props, ref) {
80
81
  renderTextarea = _ref.renderTextarea,
81
82
  other = (0, _objectWithoutProperties2.default)(_ref, _excluded);
82
83
 
84
+ var cmds = commands.map(function (item) {
85
+ return commandsFilter ? commandsFilter(item) : item;
86
+ }).filter(Boolean);
87
+
83
88
  var _useReducer = (0, _react.useReducer)(_Context.reducer, {
84
89
  markdown: propsValue,
85
90
  preview: previewType,
@@ -88,7 +93,7 @@ var InternalMDEditor = function InternalMDEditor(props, ref) {
88
93
  tabSize: tabSize,
89
94
  scrollTop: 0,
90
95
  scrollTopPreview: 0,
91
- commands: commands,
96
+ commands: cmds,
92
97
  extraCommands: extraCommands,
93
98
  fullscreen: fullscreen,
94
99
  onChange: onChange,
@@ -254,7 +259,7 @@ var InternalMDEditor = function InternalMDEditor(props, ref) {
254
259
  },
255
260
  ref: previewRef,
256
261
  source: state.markdown || '',
257
- className: "".concat(prefixCls, "-preview")
262
+ className: "".concat(prefixCls, "-preview ").concat(previewOptions.className || '')
258
263
  }))]
259
264
  }), visiableDragbar && !state.fullscreen && /*#__PURE__*/(0, _jsxRuntime.jsx)(_DragBar.default, {
260
265
  prefixCls: prefixCls,
package/lib/Editor.js.map CHANGED
@@ -18,6 +18,7 @@
18
18
  "propsValue",
19
19
  "value",
20
20
  "commands",
21
+ "commandsFilter",
21
22
  "extraCommands",
22
23
  "height",
23
24
  "toolbarHeight",
@@ -37,6 +38,11 @@
37
38
  "hideToolbar",
38
39
  "renderTextarea",
39
40
  "other",
41
+ "cmds",
42
+ "map",
43
+ "item",
44
+ "filter",
45
+ "Boolean",
40
46
  "reducer",
41
47
  "markdown",
42
48
  "scrollTop",
@@ -51,8 +57,6 @@
51
57
  "stateInit",
52
58
  "undefined",
53
59
  "cls",
54
- "filter",
55
- "Boolean",
56
60
  "join",
57
61
  "trim",
58
62
  "textareaDomRef",
@@ -80,8 +84,8 @@
80
84
  "Markdown",
81
85
  "MarkdownPreview"
82
86
  ],
83
- "mappings": "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",
87
+ "mappings": ";;;;;;;;;;;;;;;;;AAAA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;;;;;AA6FA,SAASA,gBAAT,GAA8D;AAAA,MAApCC,IAAoC,uEAAJ,EAAI;AAC5DC,EAAAA,MAAM,CAACC,IAAP,CAAYF,IAAZ,EAAkBG,OAAlB,CAA0B,UAACC,OAAD,EAAa;AACrCJ,IAAAA,IAAI,CAACI,OAAD,CAAJ,GAAgB,KAAhB;AACD,GAFD;AAGA,SAAOJ,IAAP;AACD;;AAED,IAAMK,gBAAgB,GAAG,SAAnBA,gBAAmB,CACvBC,KADuB,EAEvBC,GAFuB,EAGpB;AACH,aAwBID,KAAK,IAAI,EAxBb;AAAA,4BACEE,SADF;AAAA,MACEA,SADF,+BACc,aADd;AAAA,MAEEC,SAFF,QAEEA,SAFF;AAAA,MAGSC,UAHT,QAGEC,KAHF;AAAA,2BAIEC,QAJF;AAAA,MAIEA,QAJF,8BAIa,4BAJb;AAAA,MAKEC,cALF,QAKEA,cALF;AAAA,gCAMEC,aANF;AAAA,MAMEA,aANF,mCAMkB,iCANlB;AAAA,yBAOEC,MAPF;AAAA,MAOEA,MAPF,4BAOW,GAPX;AAAA,gCAQEC,aARF;AAAA,MAQEA,aARF,mCAQkB,EARlB;AAAA,+BASEC,YATF;AAAA,MASEA,YATF,kCASiB,IATjB;AAAA,kCAUEC,eAVF;AAAA,MAUEA,eAVF,qCAUoB,IAVpB;AAAA,kCAWEC,eAXF;AAAA,MAWEA,eAXF,qCAWoB,IAXpB;AAAA,0BAYEC,OAZF;AAAA,MAYWC,WAZX,6BAYyB,MAZzB;AAAA,6BAaEC,UAbF;AAAA,MAaEA,UAbF,gCAae,KAbf;AAAA,iCAcEC,cAdF;AAAA,MAcEA,cAdF,oCAcmB,EAdnB;AAAA,MAeEC,aAfF,QAeEA,aAfF;AAAA,4BAgBEC,SAhBF;AAAA,MAgBEA,SAhBF,+BAgBc,IAhBd;AAAA,4BAiBEC,SAjBF;AAAA,MAiBEA,SAjBF,+BAiBc,GAjBd;AAAA,MAkBEC,SAlBF,QAkBEA,SAlBF;AAAA,0BAmBEC,OAnBF;AAAA,MAmBEA,OAnBF,6BAmBY,CAnBZ;AAAA,MAoBEC,QApBF,QAoBEA,QApBF;AAAA,MAqBEC,WArBF,QAqBEA,WArBF;AAAA,MAsBEC,cAtBF,QAsBEA,cAtBF;AAAA,MAuBKC,KAvBL;;AA0BA,MAAMC,IAAI,GAAGrB,QAAQ,CAACsB,GAAT,CAAa,UAACC,IAAD;AAAA,WAAWtB,cAAc,GAAGA,cAAc,CAACsB,IAAD,CAAjB,GAA0BA,IAAnD;AAAA,GAAb,EAAuEC,MAAvE,CAA8EC,OAA9E,CAAb;;AACA,oBAAwB,uBAAWC,gBAAX,EAAoB;AAC1CC,IAAAA,QAAQ,EAAE7B,UADgC;AAE1CU,IAAAA,OAAO,EAAEC,WAFiC;AAG1CN,IAAAA,MAAM,EAANA,MAH0C;AAI1CI,IAAAA,eAAe,EAAfA,eAJ0C;AAK1CS,IAAAA,OAAO,EAAPA,OAL0C;AAM1CY,IAAAA,SAAS,EAAE,CAN+B;AAO1CC,IAAAA,gBAAgB,EAAE,CAPwB;AAQ1C7B,IAAAA,QAAQ,EAAEqB,IARgC;AAS1CnB,IAAAA,aAAa,EAAbA,aAT0C;AAU1CQ,IAAAA,UAAU,EAAVA,UAV0C;AAW1CO,IAAAA,QAAQ,EAARA,QAX0C;AAY1Ca,IAAAA,QAAQ,EAAE;AAZgC,GAApB,CAAxB;AAAA;AAAA,MAAKC,KAAL;AAAA,MAAYC,QAAZ;;AAcA,MAAMC,SAAS,GAAG,mBAAuB,IAAvB,CAAlB;AACA,MAAMC,UAAU,GAAG,mBAA2B,IAA3B,CAAnB;AACA,MAAMC,eAAe,GAAG,mBAAO9B,YAAP,CAAxB;AAEA,kCAAoBV,GAApB,EAAyB;AAAA,2CAAYoC,KAAZ;AAAA,GAAzB;AACA,sBAAQ;AAAA,WAAOI,eAAe,CAACC,OAAhB,GAA0B/B,YAAjC;AAAA,GAAR,EAAwD,CAACA,YAAD,CAAxD;AACA,wBAAU,YAAM;AACd,QAAMgC,SAAuB,GAAG,EAAhC;;AACA,QAAIJ,SAAS,CAACG,OAAd,EAAuB;AACrBC,MAAAA,SAAS,CAACJ,SAAV,GAAsBA,SAAS,CAACG,OAAV,IAAqBE,SAA3C;AACD;;AACDD,IAAAA,SAAS,CAACV,QAAV,GAAqB7B,UAAU,IAAI,EAAnC;AACAuC,IAAAA,SAAS,CAACP,QAAV,GAAqB,EAArB;;AACA,QAAIE,QAAJ,EAAc;AACZA,MAAAA,QAAQ,6DAAMD,KAAN,GAAgBM,SAAhB,EAAR;AACD,KATa,CAUd;;AACD,GAXD,EAWG,EAXH;AAaA,MAAME,GAAG,GAAG,CACV1C,SADU,EAEVD,SAFU,EAGVmC,KAAK,CAACvB,OAAN,aAAmBZ,SAAnB,mBAAqCmC,KAAK,CAACvB,OAA3C,IAAuD,IAH7C,EAIVuB,KAAK,CAACrB,UAAN,aAAsBd,SAAtB,mBAA+C,IAJrC,EAMT4B,MANS,CAMFC,OANE,EAOTe,IAPS,CAOJ,GAPI,EAQTC,IARS,EAAZ;AAUA,sBACE;AAAA,WAAM3C,UAAU,KAAKiC,KAAK,CAACJ,QAArB,IAAiCK,QAAQ,CAAC;AAAEL,MAAAA,QAAQ,EAAE7B,UAAU,IAAI;AAA1B,KAAD,CAA/C;AAAA,GADF,EAEE,CAACA,UAAD,EAAaiC,KAAK,CAACJ,QAAnB,CAFF,EAvEG,CA2EH;;AACA,sBAAQ;AAAA,WAAMlB,WAAW,KAAKsB,KAAK,CAACvB,OAAtB,IAAiCwB,QAAQ,CAAC;AAAExB,MAAAA,OAAO,EAAEC;AAAX,KAAD,CAA/C;AAAA,GAAR,EAAmF,CAACA,WAAD,CAAnF,EA5EG,CA6EH;;AACA,sBAAQ;AAAA,WAAMN,MAAM,KAAK4B,KAAK,CAAC5B,MAAjB,IAA2B6B,QAAQ,CAAC;AAAE7B,MAAAA,MAAM,EAAEA;AAAV,KAAD,CAAzC;AAAA,GAAR,EAAuE,CAACA,MAAD,CAAvE,EA9EG,CA+EH;;AACA,sBAAQ;AAAA,WAAMa,OAAO,KAAKe,KAAK,CAACf,OAAlB,IAA6BgB,QAAQ,CAAC;AAAEhB,MAAAA,OAAO,EAAPA;AAAF,KAAD,CAA3C;AAAA,GAAR,EAAkE,CAACA,OAAD,CAAlE;AACA,sBACE;AAAA,WAAMT,eAAe,KAAKwB,KAAK,CAACxB,eAA1B,IAA6CyB,QAAQ,CAAC;AAAEzB,MAAAA,eAAe,EAAfA;AAAF,KAAD,CAA3D;AAAA,GADF,EAEE;AACA,GAACA,eAAD,CAHF,EAjFG,CAsFH;;AACA,sBAAQ;AAAA,WAAMQ,SAAS,KAAKgB,KAAK,CAAChB,SAApB,IAAiCiB,QAAQ,CAAC;AAAEjB,MAAAA,SAAS,EAAEA;AAAb,KAAD,CAA/C;AAAA,GAAR,EAAmF,CAACA,SAAD,CAAnF;AACA,sBACE;AAAA,WAAML,UAAU,KAAKqB,KAAK,CAACrB,UAArB,IAAmCsB,QAAQ,CAAC;AAAEtB,MAAAA,UAAU,EAAEA;AAAd,KAAD,CAAjD;AAAA,GADF,EAEE;AACA,GAACA,UAAD,CAHF;AAMA,MAAMgC,cAAc,GAAG,oBAAvB;AACA,MAAMC,MAAM,GAAG,mBAA2B,SAA3B,CAAf;AACA,MAAMC,UAAU,GAAG,mBAAO,KAAP,CAAnB;AAEA,sBAAQ,YAAM;AACZF,IAAAA,cAAc,CAACN,OAAf,GAAyBL,KAAK,CAACc,YAA/B;;AACA,QAAId,KAAK,CAACc,YAAV,EAAwB;AACtBd,MAAAA,KAAK,CAACc,YAAN,CAAmBC,gBAAnB,CAAoC,WAApC,EAAiD,YAAM;AACrDH,QAAAA,MAAM,CAACP,OAAP,GAAiB,MAAjB;AACD,OAFD;AAGAL,MAAAA,KAAK,CAACc,YAAN,CAAmBC,gBAAnB,CAAoC,YAApC,EAAkD,YAAM;AACtDH,QAAAA,MAAM,CAACP,OAAP,GAAiB,SAAjB;AACD,OAFD;AAGD;AACF,GAVD,EAUG,CAACL,KAAK,CAACc,YAAP,CAVH;;AAYA,MAAME,YAAY,GAAG,SAAfA,YAAe,CAACC,CAAD,EAAmCC,IAAnC,EAAgE;AACnF,QAAI,CAACd,eAAe,CAACC,OAArB,EAA8B;AAC9B,QAAMc,WAAW,GAAGR,cAAc,CAACN,OAAnC;AACA,QAAMe,UAAU,GAAGjB,UAAU,CAACE,OAAX,GAAqBF,UAAU,CAACE,OAAX,CAAmBgB,GAAnB,CAAuBhB,OAA5C,GAAsDE,SAAzE;;AACA,QAAI,CAACM,UAAU,CAACR,OAAhB,EAAyB;AACvBO,MAAAA,MAAM,CAACP,OAAP,GAAiBa,IAAjB;AACAL,MAAAA,UAAU,CAACR,OAAX,GAAqB,IAArB;AACD;;AACD,QAAIc,WAAW,IAAIC,UAAnB,EAA+B;AAC7B,UAAME,KAAK,GACT,CAACH,WAAW,CAACI,YAAZ,GAA2BJ,WAAW,CAACK,YAAxC,KAAyDJ,UAAU,CAACG,YAAX,GAA0BH,UAAU,CAACI,YAA9F,CADF;;AAEA,UAAIP,CAAC,CAACQ,MAAF,KAAaN,WAAb,IAA4BP,MAAM,CAACP,OAAP,KAAmB,MAAnD,EAA2D;AACzDe,QAAAA,UAAU,CAACvB,SAAX,GAAuBsB,WAAW,CAACtB,SAAZ,GAAwByB,KAA/C;AACD;;AACD,UAAIL,CAAC,CAACQ,MAAF,KAAaL,UAAb,IAA2BR,MAAM,CAACP,OAAP,KAAmB,SAAlD,EAA6D;AAC3Dc,QAAAA,WAAW,CAACtB,SAAZ,GAAwBuB,UAAU,CAACvB,SAAX,GAAuByB,KAA/C;AACD;;AACD,UAAIzB,SAAS,GAAG,CAAhB;;AACA,UAAIe,MAAM,CAACP,OAAP,KAAmB,MAAvB,EAA+B;AAC7BR,QAAAA,SAAS,GAAGsB,WAAW,CAACtB,SAAZ,IAAyB,CAArC;AACD,OAFD,MAEO,IAAIe,MAAM,CAACP,OAAP,KAAmB,SAAvB,EAAkC;AACvCR,QAAAA,SAAS,GAAGuB,UAAU,CAACvB,SAAX,IAAwB,CAApC;AACD;;AACDI,MAAAA,QAAQ,CAAC;AAAEJ,QAAAA,SAAS,EAATA;AAAF,OAAD,CAAR;AACD;AACF,GAzBD;;AA2BA,sBACE,qBAAC,sBAAD,CAAe,QAAf;AAAwB,IAAA,KAAK,8DAAOG,KAAP;AAAcC,MAAAA,QAAQ,EAARA;AAAd,MAA7B;AAAA,2BACE;AACE,MAAA,GAAG,EAAEC,SADP;AAEE,MAAA,SAAS,EAAEM;AAFb,OAGMnB,KAHN;AAIE,MAAA,OAAO,EAAE,mBAAM;AACbY,QAAAA,QAAQ,CAAC;AAAEF,UAAAA,QAAQ,kCAAO3C,gBAAgB,CAAC4C,KAAK,CAACD,QAAP,CAAvB;AAAV,SAAD,CAAR;AACD,OANH;AAOE,MAAA,KAAK,8DACAV,KAAK,CAACqC,KADN;AAEHtD,QAAAA,MAAM,EAAE4B,KAAK,CAACrB,UAAN,GAAmB,MAAnB,GAA4BQ,WAAW,GAAGwC,MAAM,CAAC3B,KAAK,CAAC5B,MAAP,CAAN,GAAuBC,aAA1B,GAA0C2B,KAAK,CAAC5B;AAF5F,QAPP;AAAA,iBAYG,CAACe,WAAD,iBAAgB,qBAAC,gBAAD;AAAS,QAAA,SAAS,EAAEtB,SAApB;AAA+B,QAAA,MAAM,EAAEQ;AAAvC,QAZnB,eAaE;AACE,QAAA,SAAS,YAAKR,SAAL,aADX;AAEE,QAAA,KAAK,EAAE;AACLO,UAAAA,MAAM,EAAE4B,KAAK,CAACrB,UAAN,yBAAkCN,aAAlC,WAAuDsD,MAAM,CAAC3B,KAAK,CAAC5B,MAAP,CAAN,GAAuBC;AADjF,SAFT;AAAA,mBAMG,cAAcuD,IAAd,CAAmB5B,KAAK,CAACvB,OAAN,IAAiB,EAApC,kBACC,qBAAC,iBAAD;AACE,UAAA,SAAS,YAAKZ,SAAL,WADX;AAEE,UAAA,SAAS,EAAEA,SAFb;AAGE,UAAA,SAAS,EAAEmB;AAHb,WAIMH,aAJN;AAKE,UAAA,cAAc,EAAEO,cALlB;AAME,UAAA,QAAQ,EAAE,kBAAC6B,CAAD;AAAA,mBAAOD,YAAY,CAACC,CAAD,EAAI,MAAJ,CAAnB;AAAA;AANZ,WAPJ,EAgBG,iBAAiBW,IAAjB,CAAsB5B,KAAK,CAACvB,OAAN,IAAiB,EAAvC,kBACC,qBAAC,6BAAD,8DACMG,cADN;AAEE,UAAA,QAAQ,EAAE,kBAACqC,CAAD;AAAA,mBAAOD,YAAY,CAACC,CAAD,EAAI,SAAJ,CAAnB;AAAA,WAFZ;AAGE,UAAA,GAAG,EAAEd,UAHP;AAIE,UAAA,MAAM,EAAEH,KAAK,CAACJ,QAAN,IAAkB,EAJ5B;AAKE,UAAA,SAAS,YAAK/B,SAAL,sBAA0Be,cAAc,CAACd,SAAf,IAA4B,EAAtD;AALX,WAjBJ;AAAA,QAbF,EAuCGS,eAAe,IAAI,CAACyB,KAAK,CAACrB,UAA1B,iBACC,qBAAC,gBAAD;AACE,QAAA,SAAS,EAAEd,SADb;AAEE,QAAA,MAAM,EAAEmC,KAAK,CAAC5B,MAFhB;AAGE,QAAA,SAAS,EAAEU,SAHb;AAIE,QAAA,SAAS,EAAEC,SAJb;AAKE,QAAA,QAAQ,EAAE,kBAAC8C,SAAD,EAAe;AACvB5B,UAAAA,QAAQ,CAAC;AAAE7B,YAAAA,MAAM,EAAEyD;AAAV,WAAD,CAAR;AACD;AAPH,QAxCJ;AAAA;AADF,IADF;AAuDD,CAnMD;;AAqMA,IAAMC,QAAQ,gBAAGC,eAAMC,UAAN,CAA8CtE,gBAA9C,CAAjB;;AAMCoE,QAAD,CAAuBG,QAAvB,GAAkCC,6BAAlC;eAEeJ,Q",
84
88
  "sourcesContent": [
85
- "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 * 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 * You can create your own commands or reuse existing commands.\n */\n commands?: 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 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 previewOptions = {},\n textareaProps,\n maxHeight = 1200,\n minHeight = 100,\n autoFocus,\n tabSize = 2,\n onChange,\n hideToolbar,\n renderTextarea,\n ...other\n } = props || {};\n let [state, dispatch] = useReducer(reducer, {\n markdown: propsValue,\n preview: previewType,\n height,\n highlightEnable,\n tabSize,\n scrollTop: 0,\n scrollTopPreview: 0,\n commands,\n extraCommands,\n fullscreen,\n onChange,\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 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} />}\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 renderTextarea={renderTextarea}\n onScroll={(e) => handleScroll(e, 'text')}\n />\n )}\n {/(live|preview)/.test(state.preview || '') && (\n <MarkdownPreview\n {...(previewOptions as unknown)}\n onScroll={(e) => handleScroll(e, 'preview')}\n ref={previewRef}\n source={state.markdown || ''}\n className={`${prefixCls}-preview`}\n />\n )}\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"
89
+ "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 * 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 * 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) => boolean | 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 previewOptions = {},\n textareaProps,\n maxHeight = 1200,\n minHeight = 100,\n autoFocus,\n tabSize = 2,\n onChange,\n hideToolbar,\n renderTextarea,\n ...other\n } = props || {};\n\n const cmds = commands.map((item) => (commandsFilter ? commandsFilter(item) : item)).filter(Boolean) as ICommand[];\n let [state, dispatch] = useReducer(reducer, {\n markdown: propsValue,\n preview: previewType,\n height,\n highlightEnable,\n tabSize,\n scrollTop: 0,\n scrollTopPreview: 0,\n commands: cmds,\n extraCommands,\n fullscreen,\n onChange,\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 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} />}\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 renderTextarea={renderTextarea}\n onScroll={(e) => handleScroll(e, 'text')}\n />\n )}\n {/(live|preview)/.test(state.preview || '') && (\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 </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"
86
90
  ]
87
91
  }
@@ -5,13 +5,19 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
5
5
  Object.defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
- exports.getStateFromTextArea = getStateFromTextArea;
8
+ exports.TextAreaTextApi = exports.TextAreaCommandOrchestrator = void 0;
9
9
  Object.defineProperty(exports, "bold", {
10
10
  enumerable: true,
11
11
  get: function get() {
12
12
  return _bold.bold;
13
13
  }
14
14
  });
15
+ Object.defineProperty(exports, "checkedListCommand", {
16
+ enumerable: true,
17
+ get: function get() {
18
+ return _list.checkedListCommand;
19
+ }
20
+ });
15
21
  Object.defineProperty(exports, "code", {
16
22
  enumerable: true,
17
23
  get: function get() {
@@ -24,40 +30,42 @@ Object.defineProperty(exports, "codeBlock", {
24
30
  return _code.codeBlock;
25
31
  }
26
32
  });
27
- Object.defineProperty(exports, "italic", {
33
+ Object.defineProperty(exports, "codeEdit", {
28
34
  enumerable: true,
29
35
  get: function get() {
30
- return _italic.italic;
36
+ return _preview.codeEdit;
31
37
  }
32
38
  });
33
- Object.defineProperty(exports, "link", {
39
+ Object.defineProperty(exports, "codeLive", {
34
40
  enumerable: true,
35
41
  get: function get() {
36
- return _link.link;
42
+ return _preview.codeLive;
37
43
  }
38
44
  });
39
- Object.defineProperty(exports, "unorderedListCommand", {
45
+ Object.defineProperty(exports, "codePreview", {
40
46
  enumerable: true,
41
47
  get: function get() {
42
- return _list.unorderedListCommand;
48
+ return _preview.codePreview;
43
49
  }
44
50
  });
45
- Object.defineProperty(exports, "orderedListCommand", {
51
+ Object.defineProperty(exports, "divider", {
46
52
  enumerable: true,
47
53
  get: function get() {
48
- return _list.orderedListCommand;
54
+ return _divider.divider;
49
55
  }
50
56
  });
51
- Object.defineProperty(exports, "checkedListCommand", {
57
+ Object.defineProperty(exports, "fullscreen", {
52
58
  enumerable: true,
53
59
  get: function get() {
54
- return _list.checkedListCommand;
60
+ return _fullscreen.fullscreen;
55
61
  }
56
62
  });
57
- Object.defineProperty(exports, "quote", {
63
+ exports.getExtraCommands = exports.getCommands = void 0;
64
+ exports.getStateFromTextArea = getStateFromTextArea;
65
+ Object.defineProperty(exports, "group", {
58
66
  enumerable: true,
59
67
  get: function get() {
60
- return _quote.quote;
68
+ return _group.group;
61
69
  }
62
70
  });
63
71
  Object.defineProperty(exports, "hr", {
@@ -66,97 +74,90 @@ Object.defineProperty(exports, "hr", {
66
74
  return _hr.hr;
67
75
  }
68
76
  });
69
- Object.defineProperty(exports, "title", {
70
- enumerable: true,
71
- get: function get() {
72
- return _title.title;
73
- }
74
- });
75
- Object.defineProperty(exports, "title1", {
77
+ Object.defineProperty(exports, "image", {
76
78
  enumerable: true,
77
79
  get: function get() {
78
- return _title2.title1;
80
+ return _image.image;
79
81
  }
80
82
  });
81
- Object.defineProperty(exports, "title2", {
83
+ Object.defineProperty(exports, "italic", {
82
84
  enumerable: true,
83
85
  get: function get() {
84
- return _title3.title2;
86
+ return _italic.italic;
85
87
  }
86
88
  });
87
- Object.defineProperty(exports, "title3", {
89
+ Object.defineProperty(exports, "link", {
88
90
  enumerable: true,
89
91
  get: function get() {
90
- return _title4.title3;
92
+ return _link.link;
91
93
  }
92
94
  });
93
- Object.defineProperty(exports, "title4", {
95
+ Object.defineProperty(exports, "orderedListCommand", {
94
96
  enumerable: true,
95
97
  get: function get() {
96
- return _title5.title4;
98
+ return _list.orderedListCommand;
97
99
  }
98
100
  });
99
- Object.defineProperty(exports, "title5", {
101
+ Object.defineProperty(exports, "quote", {
100
102
  enumerable: true,
101
103
  get: function get() {
102
- return _title6.title5;
104
+ return _quote.quote;
103
105
  }
104
106
  });
105
- Object.defineProperty(exports, "title6", {
107
+ Object.defineProperty(exports, "strikethrough", {
106
108
  enumerable: true,
107
109
  get: function get() {
108
- return _title7.title6;
110
+ return _strikeThrough.strikethrough;
109
111
  }
110
112
  });
111
- Object.defineProperty(exports, "group", {
113
+ Object.defineProperty(exports, "title", {
112
114
  enumerable: true,
113
115
  get: function get() {
114
- return _group.group;
116
+ return _title.title;
115
117
  }
116
118
  });
117
- Object.defineProperty(exports, "divider", {
119
+ Object.defineProperty(exports, "title1", {
118
120
  enumerable: true,
119
121
  get: function get() {
120
- return _divider.divider;
122
+ return _title2.title1;
121
123
  }
122
124
  });
123
- Object.defineProperty(exports, "codePreview", {
125
+ Object.defineProperty(exports, "title2", {
124
126
  enumerable: true,
125
127
  get: function get() {
126
- return _preview.codePreview;
128
+ return _title3.title2;
127
129
  }
128
130
  });
129
- Object.defineProperty(exports, "codeEdit", {
131
+ Object.defineProperty(exports, "title3", {
130
132
  enumerable: true,
131
133
  get: function get() {
132
- return _preview.codeEdit;
134
+ return _title4.title3;
133
135
  }
134
136
  });
135
- Object.defineProperty(exports, "codeLive", {
137
+ Object.defineProperty(exports, "title4", {
136
138
  enumerable: true,
137
139
  get: function get() {
138
- return _preview.codeLive;
140
+ return _title5.title4;
139
141
  }
140
142
  });
141
- Object.defineProperty(exports, "fullscreen", {
143
+ Object.defineProperty(exports, "title5", {
142
144
  enumerable: true,
143
145
  get: function get() {
144
- return _fullscreen.fullscreen;
146
+ return _title6.title5;
145
147
  }
146
148
  });
147
- Object.defineProperty(exports, "image", {
149
+ Object.defineProperty(exports, "title6", {
148
150
  enumerable: true,
149
151
  get: function get() {
150
- return _image.image;
152
+ return _title7.title6;
151
153
  }
152
154
  });
153
- Object.defineProperty(exports, "strikethrough", {
155
+ Object.defineProperty(exports, "unorderedListCommand", {
154
156
  enumerable: true,
155
157
  get: function get() {
156
- return _strikeThrough.strikethrough;
158
+ return _list.unorderedListCommand;
157
159
  }
158
160
  });
159
- exports.TextAreaTextApi = exports.TextAreaCommandOrchestrator = exports.getExtraCommands = exports.getCommands = void 0;
160
161
 
161
162
  var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
162
163
 
@@ -45,7 +45,7 @@
45
45
  "state",
46
46
  "execute"
47
47
  ],
48
- "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AAoDA,IAAMA,WAA6B,GAAG,SAAhCA,WAAgC;AAAA,SAAM,CAC1CC,gBAD0C,EAE1CC,UAF0C,EAG1CC,cAH0C,EAI1CC,4BAJ0C,EAK1CC,MAL0C,EAM1CC,YAN0C,EAO1CC,gBAP0C,EAQ1CC,UAR0C,EAS1CC,YAT0C,EAU1CC,UAV0C,EAW1CC,eAX0C,EAY1CC,YAZ0C,EAa1CL,gBAb0C,EAc1CM,0BAd0C,EAe1CC,wBAf0C,EAgB1CC,wBAhB0C,CAAN;AAAA,CAAtC;;;;AAmBA,IAAMC,gBAAkC,GAAG,SAArCA,gBAAqC;AAAA,SAAM,CAACC,iBAAD,EAAWC,iBAAX,EAAqBC,oBAArB,EAAkCZ,gBAAlC,EAA2Ca,sBAA3C,CAAN;AAAA,CAA3C;;;;AAEA,SAASC,oBAAT,CAA8BC,QAA9B,EAAwE;AACtE,SAAO;AACLC,IAAAA,SAAS,EAAE;AACTC,MAAAA,KAAK,EAAEF,QAAQ,CAACG,cADP;AAETC,MAAAA,GAAG,EAAEJ,QAAQ,CAACK;AAFL,KADN;AAKLC,IAAAA,IAAI,EAAEN,QAAQ,CAACO,KALV;AAMLC,IAAAA,YAAY,EAAER,QAAQ,CAACO,KAAT,CAAeE,KAAf,CAAqBT,QAAQ,CAACG,cAA9B,EAA8CH,QAAQ,CAACK,YAAvD;AANT,GAAP;AAQD;;IAEKK,e;AAGJ,2BAAYV,QAAZ,EAA2C;AAAA;AAAA;AACzC,SAAKA,QAAL,GAAgBA,QAAhB;AACD;AAED;AACF;AACA;AACA;AACA;;;;;WACE,0BAAiBM,IAAjB,EAA0C;AACxC,sDAAqB,KAAKN,QAA1B,EAAoCM,IAApC;AACA,aAAOP,oBAAoB,CAAC,KAAKC,QAAN,CAA3B;AACD;AAED;AACF;AACA;AACA;;;;WACE,2BAAkBC,SAAlB,EAAmD;AACjD,WAAKD,QAAL,CAAcW,KAAd;AACA,WAAKX,QAAL,CAAcG,cAAd,GAA+BF,SAAS,CAACC,KAAzC;AACA,WAAKF,QAAL,CAAcK,YAAd,GAA6BJ,SAAS,CAACG,GAAvC;AACA,aAAOL,oBAAoB,CAAC,KAAKC,QAAN,CAA3B;AACD;;;;;;;IAGGY,2B;AAIJ,uCAAYZ,QAAZ,EAA2C;AAAA;AAAA;AAAA;AACzC,SAAKA,QAAL,GAAgBA,QAAhB;AACA,SAAKa,OAAL,GAAe,IAAIH,eAAJ,CAAoBV,QAApB,CAAf;AACD;;;;WAED,oBAAW;AACT,UAAI,CAAC,KAAKA,QAAV,EAAoB,OAAO,KAAP;AACpB,aAAOD,oBAAoB,CAAC,KAAKC,QAAN,CAA3B;AACD;;;WAED,wBACEc,OADF,EAEEC,QAFF,EAGEC,KAHF,EAIQ;AACNF,MAAAA,OAAO,CAACG,OAAR,IAAmBH,OAAO,CAACG,OAAR,CAAgBlB,oBAAoB,CAAC,KAAKC,QAAN,CAApC,EAAqD,KAAKa,OAA1D,EAAmEE,QAAnE,EAA6EC,KAA7E,CAAnB;AACD",
48
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AAoDA,IAAMA,WAA6B,GAAG,SAAhCA,WAAgC;AAAA,SAAM,CAC1CC,gBAD0C,EAE1CC,UAF0C,EAG1CC,cAH0C,EAI1CC,4BAJ0C,EAK1CC,MAL0C,EAM1CC,YAN0C,EAO1CC,gBAP0C,EAQ1CC,UAR0C,EAS1CC,YAT0C,EAU1CC,UAV0C,EAW1CC,eAX0C,EAY1CC,YAZ0C,EAa1CL,gBAb0C,EAc1CM,0BAd0C,EAe1CC,wBAf0C,EAgB1CC,wBAhB0C,CAAN;AAAA,CAAtC;;;;AAmBA,IAAMC,gBAAkC,GAAG,SAArCA,gBAAqC;AAAA,SAAM,CAACC,iBAAD,EAAWC,iBAAX,EAAqBC,oBAArB,EAAkCZ,gBAAlC,EAA2Ca,sBAA3C,CAAN;AAAA,CAA3C;;;;AAEA,SAASC,oBAAT,CAA8BC,QAA9B,EAAwE;AACtE,SAAO;AACLC,IAAAA,SAAS,EAAE;AACTC,MAAAA,KAAK,EAAEF,QAAQ,CAACG,cADP;AAETC,MAAAA,GAAG,EAAEJ,QAAQ,CAACK;AAFL,KADN;AAKLC,IAAAA,IAAI,EAAEN,QAAQ,CAACO,KALV;AAMLC,IAAAA,YAAY,EAAER,QAAQ,CAACO,KAAT,CAAeE,KAAf,CAAqBT,QAAQ,CAACG,cAA9B,EAA8CH,QAAQ,CAACK,YAAvD;AANT,GAAP;AAQD;;IAEKK,e;AAGJ,2BAAYV,QAAZ,EAA2C;AAAA;AAAA;AACzC,SAAKA,QAAL,GAAgBA,QAAhB;AACD;AAED;AACF;AACA;AACA;AACA;;;;;WACE,0BAAiBM,IAAjB,EAA0C;AACxC,sDAAqB,KAAKN,QAA1B,EAAoCM,IAApC;AACA,aAAOP,oBAAoB,CAAC,KAAKC,QAAN,CAA3B;AACD;AAED;AACF;AACA;AACA;;;;WACE,2BAAkBC,SAAlB,EAAmD;AACjD,WAAKD,QAAL,CAAcW,KAAd;AACA,WAAKX,QAAL,CAAcG,cAAd,GAA+BF,SAAS,CAACC,KAAzC;AACA,WAAKF,QAAL,CAAcK,YAAd,GAA6BJ,SAAS,CAACG,GAAvC;AACA,aAAOL,oBAAoB,CAAC,KAAKC,QAAN,CAA3B;AACD;;;;;;;IAGGY,2B;AAIJ,uCAAYZ,QAAZ,EAA2C;AAAA;AAAA;AAAA;AACzC,SAAKA,QAAL,GAAgBA,QAAhB;AACA,SAAKa,OAAL,GAAe,IAAIH,eAAJ,CAAoBV,QAApB,CAAf;AACD;;;;WAED,oBAAW;AACT,UAAI,CAAC,KAAKA,QAAV,EAAoB,OAAO,KAAP;AACpB,aAAOD,oBAAoB,CAAC,KAAKC,QAAN,CAA3B;AACD;;;WAED,wBACEc,OADF,EAEEC,QAFF,EAGEC,KAHF,EAIQ;AACNF,MAAAA,OAAO,CAACG,OAAR,IAAmBH,OAAO,CAACG,OAAR,CAAgBlB,oBAAoB,CAAC,KAAKC,QAAN,CAApC,EAAqD,KAAKa,OAA1D,EAAmEE,QAAnE,EAA6EC,KAA7E,CAAnB;AACD",
49
49
  "sourcesContent": [
50
50
  "import { bold } from './bold';\nimport { code, codeBlock } from './code';\nimport { italic } from './italic';\nimport { link } from './link';\nimport { unorderedListCommand, orderedListCommand, checkedListCommand } from './list';\nimport { quote } from './quote';\nimport { hr } from './hr';\nimport { title } from './title';\nimport { title1 } from './title1';\nimport { title2 } from './title2';\nimport { title3 } from './title3';\nimport { title4 } from './title4';\nimport { title5 } from './title5';\nimport { title6 } from './title6';\nimport { comment } from './comment';\nimport { group } from './group';\nimport { divider } from './divider';\nimport { codePreview, codeEdit, codeLive } from './preview';\nimport { fullscreen } from './fullscreen';\nimport { image } from './image';\nimport { strikethrough } from './strikeThrough';\nimport { insertTextAtPosition } from '../utils/InsertTextAtPosition';\nimport { ContextStore, ExecuteCommandState } from '../Context';\n\nexport interface CommandOrchestrator {\n executeCommand(command: ICommand): void;\n}\n\nexport interface ICommandChildHandle<T = string> extends ICommandBase<T> {\n children?: (handle: {\n close: () => void;\n execute: () => void;\n getState?: TextAreaCommandOrchestrator['getState'];\n textApi?: TextAreaTextApi;\n }) => React.ReactElement;\n}\n\nexport interface ICommandChildCommands<T = string> extends ICommandBase<T> {\n children?: Array<ICommand<T>>;\n}\n\nexport interface ICommandBase<T> {\n parent?: ICommand<any>;\n keyCommand?: string;\n name?: string;\n shortcuts?: string;\n groupName?: string;\n icon?: React.ReactElement;\n value?: T;\n position?: 'right';\n liProps?: React.LiHTMLAttributes<HTMLLIElement>;\n buttonProps?: React.ButtonHTMLAttributes<HTMLButtonElement> | null;\n execute?: (\n state: TextState,\n api: TextAreaTextApi,\n dispatch?: React.Dispatch<ContextStore>,\n executeCommandState?: ExecuteCommandState,\n ) => void;\n}\n\nexport type ICommand<T = string> = ICommandChildCommands<T> | ICommandChildHandle<T>;\n\nexport interface TextRange {\n start: number;\n end: number;\n}\n\nexport interface TextState {\n text: string;\n selectedText: string;\n selection: TextRange;\n}\n\nconst getCommands: () => ICommand[] = () => [\n comment,\n bold,\n italic,\n strikethrough,\n hr,\n title,\n divider,\n link,\n quote,\n code,\n codeBlock,\n image,\n divider,\n unorderedListCommand,\n orderedListCommand,\n checkedListCommand,\n];\n\nconst getExtraCommands: () => ICommand[] = () => [codeEdit, codeLive, codePreview, divider, fullscreen];\n\nfunction getStateFromTextArea(textArea: HTMLTextAreaElement): TextState {\n return {\n selection: {\n start: textArea.selectionStart,\n end: textArea.selectionEnd,\n },\n text: textArea.value,\n selectedText: textArea.value.slice(textArea.selectionStart, textArea.selectionEnd),\n };\n}\n\nclass TextAreaTextApi {\n textArea: HTMLTextAreaElement;\n\n constructor(textArea: HTMLTextAreaElement) {\n this.textArea = textArea;\n }\n\n /**\n * Replaces the current selection with the new text. This will make the new selectedText to be empty, the\n * selection start and selection end will be the same and will both point to the end\n * @param text Text that should replace the current selection\n */\n replaceSelection(text: string): TextState {\n insertTextAtPosition(this.textArea, text);\n return getStateFromTextArea(this.textArea);\n }\n\n /**\n * Selects the specified text range\n * @param selection\n */\n setSelectionRange(selection: TextRange): TextState {\n this.textArea.focus();\n this.textArea.selectionStart = selection.start;\n this.textArea.selectionEnd = selection.end;\n return getStateFromTextArea(this.textArea);\n }\n}\n\nclass TextAreaCommandOrchestrator implements CommandOrchestrator {\n textArea: HTMLTextAreaElement;\n textApi: TextAreaTextApi;\n\n constructor(textArea: HTMLTextAreaElement) {\n this.textArea = textArea;\n this.textApi = new TextAreaTextApi(textArea);\n }\n\n getState() {\n if (!this.textArea) return false;\n return getStateFromTextArea(this.textArea);\n }\n\n executeCommand(\n command: ICommand<string>,\n dispatch?: React.Dispatch<ContextStore>,\n state?: ExecuteCommandState,\n ): void {\n command.execute && command.execute(getStateFromTextArea(this.textArea), this.textApi, dispatch, state);\n }\n}\n\nexport {\n // Toolbars.\n title,\n title1,\n title2,\n title3,\n title4,\n title5,\n title6,\n bold,\n codeBlock,\n italic,\n strikethrough,\n hr,\n group,\n divider,\n link,\n quote,\n code,\n image,\n unorderedListCommand,\n orderedListCommand,\n checkedListCommand,\n codeEdit,\n codeLive,\n codePreview,\n fullscreen,\n // Tool method.\n getCommands,\n getExtraCommands,\n getStateFromTextArea,\n TextAreaCommandOrchestrator,\n TextAreaTextApi,\n};\n"
51
51
  ]
@@ -5,8 +5,9 @@ var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWild
5
5
  Object.defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
+ exports.checkedListCommand = void 0;
8
9
  exports.insertBeforeEachLine = insertBeforeEachLine;
9
- exports.checkedListCommand = exports.orderedListCommand = exports.unorderedListCommand = exports.makeList = void 0;
10
+ exports.unorderedListCommand = exports.orderedListCommand = exports.makeList = void 0;
10
11
 
11
12
  var React = _interopRequireWildcard(require("react"));
12
13
 
@@ -49,7 +49,7 @@
49
49
  "orderedListCommand",
50
50
  "checkedListCommand"
51
51
  ],
52
- "mappings": ";;;;;;;;;;AAAA;;AAEA;;;;AAQA;AACA;AACA;AACO,SAASA,oBAAT,CACLC,YADK,EAELC,YAFK,EAG8C;AACnD,MAAMC,KAAK,GAAGF,YAAY,CAACG,KAAb,CAAmB,IAAnB,CAAd;AAEA,MAAIC,eAAe,GAAG,CAAtB;AACA,MAAMC,YAAY,GAAGH,KAAK,CACvBI,GADkB,CACd,UAACC,IAAD,EAAOC,KAAP,EAAiB;AACpB,QAAI,OAAOP,YAAP,KAAwB,QAA5B,EAAsC;AACpCG,MAAAA,eAAe,IAAIH,YAAY,CAACQ,MAAhC;AACA,aAAOR,YAAY,GAAGM,IAAtB;AACD,KAHD,MAGO,IAAI,OAAON,YAAP,KAAwB,UAA5B,EAAwC;AAC7C,UAAMS,eAAe,GAAGT,YAAY,CAACM,IAAD,EAAOC,KAAP,CAApC;AACAJ,MAAAA,eAAe,IAAIM,eAAe,CAACD,MAAnC;AACA,aAAOR,YAAY,CAACM,IAAD,EAAOC,KAAP,CAAZ,GAA4BD,IAAnC;AACD;;AACD,UAAMI,KAAK,CAAC,2DAAD,CAAX;AACD,GAXkB,EAYlBC,IAZkB,CAYb,IAZa,CAArB;AAcA,SAAO;AAAEP,IAAAA,YAAY,EAAZA,YAAF;AAAgBD,IAAAA,eAAe,EAAfA;AAAhB,GAAP;AACD;;AAEM,IAAMS,QAAQ,GAAG,SAAXA,QAAW,CAACC,KAAD,EAAmBC,GAAnB,EAAyCd,YAAzC,EAAsF;AAC5G;AACA,MAAMe,iBAAiB,GAAG,+BAAW;AAAEC,IAAAA,IAAI,EAAEH,KAAK,CAACG,IAAd;AAAoBC,IAAAA,SAAS,EAAEJ,KAAK,CAACI;AAArC,GAAX,CAA1B;AACA,MAAMC,MAAM,GAAGJ,GAAG,CAACK,iBAAJ,CAAsBJ,iBAAtB,CAAf;AAEA,MAAMK,iBAAiB,GAAG,sDAAkCF,MAAM,CAACF,IAAzC,EAA+CE,MAAM,CAACD,SAAP,CAAiBI,KAAhE,CAA1B;AACA,MAAMC,YAAY,GAAGC,KAAK,CAACH,iBAAiB,GAAG,CAArB,CAAL,CAA6BT,IAA7B,CAAkC,IAAlC,CAArB;AAEA,MAAMa,gBAAgB,GAAG,qDAAiCN,MAAM,CAACF,IAAxC,EAA8CE,MAAM,CAACD,SAAP,CAAiBQ,GAA/D,CAAzB;AACA,MAAMC,WAAW,GAAGH,KAAK,CAACC,gBAAgB,GAAG,CAApB,CAAL,CAA4Bb,IAA5B,CAAiC,IAAjC,CAApB;AAEA,MAAMP,YAAY,GAAGN,oBAAoB,CAACoB,MAAM,CAACnB,YAAR,EAAsBC,YAAtB,CAAzC;AAEAc,EAAAA,GAAG,CAACa,gBAAJ,WAAwBL,YAAxB,SAAuClB,YAAY,CAACA,YAApD,SAAmEsB,WAAnE,GAb4G,CAe5G;;AACA,MAAME,cAAc,GAAGV,MAAM,CAACnB,YAAP,CAAoB8B,OAApB,CAA4B,IAA5B,MAAsC,CAAC,CAAvC,GAA2CzB,YAAY,CAACD,eAAxD,GAA0E,CAAjG;AAEA,MAAM2B,cAAc,GAAGZ,MAAM,CAACD,SAAP,CAAiBI,KAAjB,GAAyBD,iBAAzB,GAA6CQ,cAApE;AACA,MAAMG,YAAY,GAAGD,cAAc,GAAG1B,YAAY,CAACA,YAAb,CAA0BI,MAA3C,GAAoDoB,cAAzE,CAnB4G,CAqB5G;;AACAd,EAAAA,GAAG,CAACK,iBAAJ,CAAsB;AACpBE,IAAAA,KAAK,EAAES,cADa;AAEpBL,IAAAA,GAAG,EAAEM;AAFe,GAAtB;AAID,CA1BM;;;AA4BA,IAAMC,oBAA8B,GAAG;AAC5CC,EAAAA,IAAI,EAAE,gBADsC;AAE5CC,EAAAA,UAAU,EAAE,MAFgC;AAG5CC,EAAAA,SAAS,EAAE,cAHiC;AAI5CC,EAAAA,WAAW,EAAE;AAAE,kBAAc,oBAAhB;AAAsCC,IAAAA,KAAK,EAAE;AAA7C,GAJ+B;AAK5CC,EAAAA,IAAI,eACF;AAAK,iBAAU,gBAAf;AAAgC,IAAA,KAAK,EAAC,IAAtC;AAA2C,IAAA,MAAM,EAAC,IAAlD;AAAuD,IAAA,OAAO,EAAC,aAA/D;AAAA,2BACE;AACE,MAAA,IAAI,EAAC,cADP;AAEE,MAAA,CAAC,EAAC;AAFJ;AADF,IAN0C;AAa5CC,EAAAA,OAAO,EAAE,iBAAC1B,KAAD,EAAmBC,GAAnB,EAA4C;AACnDF,IAAAA,QAAQ,CAACC,KAAD,EAAQC,GAAR,EAAa,IAAb,CAAR;AACD;AAf2C,CAAvC;;AAkBA,IAAM0B,kBAA4B,GAAG;AAC1CP,EAAAA,IAAI,EAAE,cADoC;AAE1CC,EAAAA,UAAU,EAAE,MAF8B;AAG1CC,EAAAA,SAAS,EAAE,cAH+B;AAI1CC,EAAAA,WAAW,EAAE;AAAE,kBAAc,kBAAhB;AAAoCC,IAAAA,KAAK,EAAE;AAA3C,GAJ6B;AAK1CC,EAAAA,IAAI,eACF;AAAK,iBAAU,cAAf;AAA8B,IAAA,KAAK,EAAC,IAApC;AAAyC,IAAA,MAAM,EAAC,IAAhD;AAAqD,IAAA,IAAI,EAAC,KAA1D;AAAgE,IAAA,OAAO,EAAC,aAAxE;AAAA,2BACE;AACE,MAAA,IAAI,EAAC,cADP;AAEE,MAAA,CAAC,EAAC;AAFJ;AADF,IANwC;AAa1CC,EAAAA,OAAO,EAAE,iBAAC1B,KAAD,EAAmBC,GAAnB,EAA4C;AACnDF,IAAAA,QAAQ,CAACC,KAAD,EAAQC,GAAR,EAAa,UAACR,IAAD,EAAOC,KAAP;AAAA,uBAAoBA,KAAK,GAAG,CAA5B;AAAA,KAAb,CAAR;AACD;AAfyC,CAArC;;AAkBA,IAAMkC,kBAA4B,GAAG;AAC1CR,EAAAA,IAAI,EAAE,cADoC;AAE1CC,EAAAA,UAAU,EAAE,MAF8B;AAG1CC,EAAAA,SAAS,EAAE,cAH+B;AAI1CC,EAAAA,WAAW,EAAE;AAAE,kBAAc,kBAAhB;AAAoCC,IAAAA,KAAK,EAAE;AAA3C,GAJ6B;AAK1CC,EAAAA,IAAI,eACF;AAAK,iBAAU,cAAf;AAA8B,IAAA,KAAK,EAAC,IAApC;AAAyC,IAAA,MAAM,EAAC,IAAhD;AAAqD,IAAA,IAAI,EAAC,KAA1D;AAAgE,IAAA,OAAO,EAAC,aAAxE;AAAA,2BACE;AACE,MAAA,IAAI,EAAC,cADP;AAEE,MAAA,CAAC,EAAC;AAFJ;AADF,IANwC;AAa1CC,EAAAA,OAAO,EAAE,iBAAC1B,KAAD,EAAmBC,GAAnB,EAA4C;AACnDF,IAAAA,QAAQ,CAACC,KAAD,EAAQC,GAAR,EAAa,UAACR,IAAD,EAAOC,KAAP;AAAA;AAAA,KAAb,CAAR;AACD;AAfyC,CAArC",
52
+ "mappings": "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",
53
53
  "sourcesContent": [
54
54
  "import * as React from 'react';\nimport { ICommand, TextState, TextAreaTextApi } from './';\nimport {\n selectWord,\n getBreaksNeededForEmptyLineBefore,\n getBreaksNeededForEmptyLineAfter,\n} from '../utils/markdownUtils';\n\nexport type AlterLineFunction = (line: string, index: number) => string;\n\n/**\n * Inserts insertionString before each line\n */\nexport function insertBeforeEachLine(\n selectedText: string,\n insertBefore: string | AlterLineFunction,\n): { modifiedText: string; insertionLength: number } {\n const lines = selectedText.split(/\\n/);\n\n let insertionLength = 0;\n const modifiedText = lines\n .map((item, index) => {\n if (typeof insertBefore === 'string') {\n insertionLength += insertBefore.length;\n return insertBefore + item;\n } else if (typeof insertBefore === 'function') {\n const insertionResult = insertBefore(item, index);\n insertionLength += insertionResult.length;\n return insertBefore(item, index) + item;\n }\n throw Error('insertion is expected to be either a string or a function');\n })\n .join('\\n');\n\n return { modifiedText, insertionLength };\n}\n\nexport const makeList = (state: TextState, api: TextAreaTextApi, insertBefore: string | AlterLineFunction) => {\n // Adjust the selection to encompass the whole word if the caret is inside one\n const newSelectionRange = selectWord({ text: state.text, selection: state.selection });\n const state1 = api.setSelectionRange(newSelectionRange);\n\n const breaksBeforeCount = getBreaksNeededForEmptyLineBefore(state1.text, state1.selection.start);\n const breaksBefore = Array(breaksBeforeCount + 1).join('\\n');\n\n const breaksAfterCount = getBreaksNeededForEmptyLineAfter(state1.text, state1.selection.end);\n const breaksAfter = Array(breaksAfterCount + 1).join('\\n');\n\n const modifiedText = insertBeforeEachLine(state1.selectedText, insertBefore);\n\n api.replaceSelection(`${breaksBefore}${modifiedText.modifiedText}${breaksAfter}`);\n\n // Specifically when the text has only one line, we can exclude the \"- \", for example, from the selection\n const oneLinerOffset = state1.selectedText.indexOf('\\n') === -1 ? modifiedText.insertionLength : 0;\n\n const selectionStart = state1.selection.start + breaksBeforeCount + oneLinerOffset;\n const selectionEnd = selectionStart + modifiedText.modifiedText.length - oneLinerOffset;\n\n // Adjust the selection to not contain the **\n api.setSelectionRange({\n start: selectionStart,\n end: selectionEnd,\n });\n};\n\nexport const unorderedListCommand: ICommand = {\n name: 'unordered-list',\n keyCommand: 'list',\n shortcuts: 'ctrl+shift+l',\n buttonProps: { 'aria-label': 'Add unordered list', title: 'Add unordered list' },\n icon: (\n <svg data-name=\"unordered-list\" width=\"12\" height=\"12\" viewBox=\"0 0 512 512\">\n <path\n fill=\"currentColor\"\n d=\"M96 96c0 26.51-21.49 48-48 48S0 122.51 0 96s21.49-48 48-48 48 21.49 48 48zM48 208c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48-21.49-48-48-48zm0 160c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48-21.49-48-48-48zm96-236h352c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H144c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h352c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H144c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h352c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H144c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z\"\n />\n </svg>\n ),\n execute: (state: TextState, api: TextAreaTextApi) => {\n makeList(state, api, '- ');\n },\n};\n\nexport const orderedListCommand: ICommand = {\n name: 'ordered-list',\n keyCommand: 'list',\n shortcuts: 'ctrl+shift+o',\n buttonProps: { 'aria-label': 'Add ordered list', title: 'Add ordered list' },\n icon: (\n <svg data-name=\"ordered-list\" width=\"12\" height=\"12\" role=\"img\" viewBox=\"0 0 512 512\">\n <path\n fill=\"currentColor\"\n d=\"M3.263 139.527c0-7.477 3.917-11.572 11.573-11.572h15.131V88.078c0-5.163.534-10.503.534-10.503h-.356s-1.779 2.67-2.848 3.738c-4.451 4.273-10.504 4.451-15.666-1.068l-5.518-6.231c-5.342-5.341-4.984-11.216.534-16.379l21.72-19.938C32.815 33.602 36.732 32 42.785 32H54.89c7.656 0 11.749 3.916 11.749 11.572v84.384h15.488c7.655 0 11.572 4.094 11.572 11.572v8.901c0 7.477-3.917 11.572-11.572 11.572H14.836c-7.656 0-11.573-4.095-11.573-11.572v-8.902zM2.211 304.591c0-47.278 50.955-56.383 50.955-69.165 0-7.18-5.954-8.755-9.28-8.755-3.153 0-6.479 1.051-9.455 3.852-5.079 4.903-10.507 7.004-16.111 2.451l-8.579-6.829c-5.779-4.553-7.18-9.805-2.803-15.409C13.592 201.981 26.025 192 47.387 192c19.437 0 44.476 10.506 44.476 39.573 0 38.347-46.753 46.402-48.679 56.909h39.049c7.529 0 11.557 4.027 11.557 11.382v8.755c0 7.354-4.028 11.382-11.557 11.382h-67.94c-7.005 0-12.083-4.028-12.083-11.382v-4.028zM5.654 454.61l5.603-9.28c3.853-6.654 9.105-7.004 15.584-3.152 4.903 2.101 9.63 3.152 14.359 3.152 10.155 0 14.358-3.502 14.358-8.23 0-6.654-5.604-9.106-15.934-9.106h-4.728c-5.954 0-9.28-2.101-12.258-7.88l-1.05-1.926c-2.451-4.728-1.226-9.806 2.801-14.884l5.604-7.004c6.829-8.405 12.257-13.483 12.257-13.483v-.35s-4.203 1.051-12.608 1.051H16.685c-7.53 0-11.383-4.028-11.383-11.382v-8.755c0-7.53 3.853-11.382 11.383-11.382h58.484c7.529 0 11.382 4.027 11.382 11.382v3.327c0 5.778-1.401 9.806-5.079 14.183l-17.509 20.137c19.611 5.078 28.716 20.487 28.716 34.845 0 21.363-14.358 44.126-48.503 44.126-16.636 0-28.192-4.728-35.896-9.455-5.779-4.202-6.304-9.805-2.626-15.934zM144 132h352c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H144c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h352c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H144c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h352c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H144c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z\"\n />\n </svg>\n ),\n execute: (state: TextState, api: TextAreaTextApi) => {\n makeList(state, api, (item, index) => `${index + 1}. `);\n },\n};\n\nexport const checkedListCommand: ICommand = {\n name: 'checked-list',\n keyCommand: 'list',\n shortcuts: 'ctrl+shift+c',\n buttonProps: { 'aria-label': 'Add checked list', title: 'Add checked list' },\n icon: (\n <svg data-name=\"checked-list\" width=\"12\" height=\"12\" role=\"img\" viewBox=\"0 0 512 512\">\n <path\n fill=\"currentColor\"\n d=\"M208 132h288c8.8 0 16-7.2 16-16V76c0-8.8-7.2-16-16-16H208c-8.8 0-16 7.2-16 16v40c0 8.8 7.2 16 16 16zm0 160h288c8.8 0 16-7.2 16-16v-40c0-8.8-7.2-16-16-16H208c-8.8 0-16 7.2-16 16v40c0 8.8 7.2 16 16 16zm0 160h288c8.8 0 16-7.2 16-16v-40c0-8.8-7.2-16-16-16H208c-8.8 0-16 7.2-16 16v40c0 8.8 7.2 16 16 16zM64 368c-26.5 0-48.6 21.5-48.6 48s22.1 48 48.6 48 48-21.5 48-48-21.5-48-48-48zm92.5-299l-72.2 72.2-15.6 15.6c-4.7 4.7-12.9 4.7-17.6 0L3.5 109.4c-4.7-4.7-4.7-12.3 0-17l15.7-15.7c4.7-4.7 12.3-4.7 17 0l22.7 22.1 63.7-63.3c4.7-4.7 12.3-4.7 17 0l17 16.5c4.6 4.7 4.6 12.3-.1 17zm0 159.6l-72.2 72.2-15.7 15.7c-4.7 4.7-12.9 4.7-17.6 0L3.5 269c-4.7-4.7-4.7-12.3 0-17l15.7-15.7c4.7-4.7 12.3-4.7 17 0l22.7 22.1 63.7-63.7c4.7-4.7 12.3-4.7 17 0l17 17c4.6 4.6 4.6 12.2-.1 16.9z\"\n />\n </svg>\n ),\n execute: (state: TextState, api: TextAreaTextApi) => {\n makeList(state, api, (item, index) => `- [ ] `);\n },\n};\n"
55
55
  ]
@@ -5,7 +5,7 @@ var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWild
5
5
  Object.defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
- exports.codeLive = exports.codeEdit = exports.codePreview = void 0;
8
+ exports.codePreview = exports.codeLive = exports.codeEdit = void 0;
9
9
 
10
10
  var React = _interopRequireWildcard(require("react"));
11
11
 
@@ -27,10 +27,11 @@ var _shortcuts = _interopRequireDefault(require("./shortcuts"));
27
27
 
28
28
  var _jsxRuntime = require("react/jsx-runtime");
29
29
 
30
- var _excluded = ["prefixCls"];
30
+ var _excluded = ["prefixCls", "onChange"];
31
31
 
32
32
  function Textarea(props) {
33
33
  var prefixCls = props.prefixCls,
34
+ onChangeFromProps = props.onChange,
34
35
  other = (0, _objectWithoutProperties2.default)(props, _excluded);
35
36
 
36
37
  var _useContext = (0, _react.useContext)(_Context.EditorContext),
@@ -103,6 +104,7 @@ function Textarea(props) {
103
104
  markdown: e.target.value
104
105
  });
105
106
  _onChange && _onChange(e.target.value);
107
+ onChangeFromProps && onChangeFromProps(e);
106
108
  }
107
109
  }));
108
110
  }
@@ -7,6 +7,8 @@
7
7
  "Textarea",
8
8
  "props",
9
9
  "prefixCls",
10
+ "onChangeFromProps",
11
+ "onChange",
10
12
  "other",
11
13
  "EditorContext",
12
14
  "markdown",
@@ -16,7 +18,6 @@
16
18
  "highlightEnable",
17
19
  "extraCommands",
18
20
  "tabSize",
19
- "onChange",
20
21
  "dispatch",
21
22
  "textRef",
22
23
  "React",
@@ -35,8 +36,8 @@
35
36
  "target",
36
37
  "value"
37
38
  ],
38
- "mappings": "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",
39
+ "mappings": "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",
39
40
  "sourcesContent": [
40
- "import React, { useContext, useEffect } from 'react';\nimport { IProps } from '../../Editor';\nimport { EditorContext, ExecuteCommandState } from '../../Context';\nimport { TextAreaCommandOrchestrator } from '../../commands';\nimport handleKeyDown from './handleKeyDown';\nimport shortcuts from './shortcuts';\nimport './index.less';\n\nexport interface TextAreaProps extends Omit<React.TextareaHTMLAttributes<HTMLTextAreaElement>, 'value'>, IProps {}\n\nexport default function Textarea(props: TextAreaProps) {\n const { prefixCls, ...other } = props;\n const { markdown, commands, fullscreen, preview, highlightEnable, extraCommands, tabSize, onChange, dispatch } =\n useContext(EditorContext);\n const textRef = React.useRef<HTMLTextAreaElement>(null);\n const executeRef = React.useRef<TextAreaCommandOrchestrator>();\n const statesRef = React.useRef<ExecuteCommandState>({ fullscreen, preview });\n\n useEffect(() => {\n statesRef.current = { fullscreen, preview, highlightEnable };\n }, [fullscreen, preview, highlightEnable]);\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 const onKeyDown = (e: KeyboardEvent | React.KeyboardEvent<HTMLTextAreaElement>) => {\n handleKeyDown(e, tabSize);\n shortcuts(e, [...(commands || []), ...(extraCommands || [])], executeRef.current, dispatch, statesRef.current);\n };\n useEffect(() => {\n if (textRef.current) {\n textRef.current.addEventListener('keydown', onKeyDown);\n }\n return () => {\n if (textRef.current) {\n // eslint-disable-next-line react-hooks/exhaustive-deps\n textRef.current.removeEventListener('keydown', onKeyDown);\n }\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return (\n <textarea\n autoComplete=\"off\"\n autoCorrect=\"off\"\n autoCapitalize=\"off\"\n spellCheck={false}\n {...other}\n ref={textRef}\n className={`${prefixCls}-text-input ${other.className ? other.className : ''}`}\n value={markdown}\n onChange={(e) => {\n dispatch && dispatch({ markdown: e.target.value });\n onChange && onChange(e.target.value);\n }}\n />\n );\n}\n"
41
+ "import React, { useContext, useEffect } from 'react';\nimport { IProps } from '../../Editor';\nimport { EditorContext, ExecuteCommandState } from '../../Context';\nimport { TextAreaCommandOrchestrator } from '../../commands';\nimport handleKeyDown from './handleKeyDown';\nimport shortcuts from './shortcuts';\nimport './index.less';\n\nexport interface TextAreaProps extends Omit<React.TextareaHTMLAttributes<HTMLTextAreaElement>, 'value'>, IProps {}\n\nexport default function Textarea(props: TextAreaProps) {\n const { prefixCls, onChange: onChangeFromProps, ...other } = props;\n const { markdown, commands, fullscreen, preview, highlightEnable, extraCommands, tabSize, onChange, dispatch } =\n useContext(EditorContext);\n const textRef = React.useRef<HTMLTextAreaElement>(null);\n const executeRef = React.useRef<TextAreaCommandOrchestrator>();\n const statesRef = React.useRef<ExecuteCommandState>({ fullscreen, preview });\n\n useEffect(() => {\n statesRef.current = { fullscreen, preview, highlightEnable };\n }, [fullscreen, preview, highlightEnable]);\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 const onKeyDown = (e: KeyboardEvent | React.KeyboardEvent<HTMLTextAreaElement>) => {\n handleKeyDown(e, tabSize);\n shortcuts(e, [...(commands || []), ...(extraCommands || [])], executeRef.current, dispatch, statesRef.current);\n };\n useEffect(() => {\n if (textRef.current) {\n textRef.current.addEventListener('keydown', onKeyDown);\n }\n return () => {\n if (textRef.current) {\n // eslint-disable-next-line react-hooks/exhaustive-deps\n textRef.current.removeEventListener('keydown', onKeyDown);\n }\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return (\n <textarea\n autoComplete=\"off\"\n autoCorrect=\"off\"\n autoCapitalize=\"off\"\n spellCheck={false}\n {...other}\n ref={textRef}\n className={`${prefixCls}-text-input ${other.className ? other.className : ''}`}\n value={markdown}\n onChange={(e) => {\n dispatch && dispatch({ markdown: e.target.value });\n onChange && onChange(e.target.value);\n onChangeFromProps && onChangeFromProps(e);\n }}\n />\n );\n}\n"
41
42
  ]
42
43
  }
@@ -13,7 +13,7 @@ declare type RenderTextareaHandle = {
13
13
  };
14
14
  shortcuts?: (e: KeyboardEvent | React.KeyboardEvent<HTMLTextAreaElement>, commands: ICommand[], commandOrchestrator?: TextAreaCommandOrchestrator, dispatch?: React.Dispatch<ContextStore>, state?: ExecuteCommandState) => void;
15
15
  };
16
- export interface ITextAreaProps extends Omit<React.TextareaHTMLAttributes<HTMLTextAreaElement>, 'value' | 'onChange' | 'onScroll'>, IProps {
16
+ export interface ITextAreaProps extends Omit<React.TextareaHTMLAttributes<HTMLTextAreaElement>, 'value' | 'onScroll'>, IProps {
17
17
  value?: string;
18
18
  onScroll?: (e: React.UIEvent<HTMLDivElement>) => void;
19
19
  renderTextarea?: (props: React.TextareaHTMLAttributes<HTMLTextAreaElement> | React.HTMLAttributes<HTMLDivElement>, opts: RenderTextareaHandle) => JSX.Element;
@@ -46,6 +46,6 @@
46
46
  ],
47
47
  "mappings": "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",
48
48
  "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 from './Textarea';\nimport { MDEditorProps, IProps } from '../../Editor';\nimport { TextAreaCommandOrchestrator, ICommand } from '../../commands';\nimport './index.less';\n\ntype RenderTextareaHandle = {\n dispatch: ContextStore['dispatch'];\n onChange?: MDEditorProps['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' | 'onChange' | '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, onChange, 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,\n shortcuts,\n useContext: { commands, extraCommands, commandOrchestrator: executeRef.current },\n },\n ),\n {\n ref: textRef,\n },\n )\n ) : (\n <Fragment>\n <Markdown prefixCls={prefixCls} />\n <Textarea prefixCls={prefixCls} {...otherProps} />\n </Fragment>\n )}\n </div>\n </div>\n );\n}\n"
49
+ "import React, { useEffect, Fragment, useContext } from 'react';\nimport { EditorContext, ContextStore, ExecuteCommandState } from '../../Context';\nimport shortcuts from './shortcuts';\nimport Markdown from './Markdown';\nimport Textarea from './Textarea';\nimport { MDEditorProps, IProps } from '../../Editor';\nimport { TextAreaCommandOrchestrator, ICommand } from '../../commands';\nimport './index.less';\n\ntype RenderTextareaHandle = {\n dispatch: ContextStore['dispatch'];\n onChange?: MDEditorProps['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, onChange, 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,\n shortcuts,\n useContext: { commands, extraCommands, commandOrchestrator: executeRef.current },\n },\n ),\n {\n ref: textRef,\n },\n )\n ) : (\n <Fragment>\n <Markdown prefixCls={prefixCls} />\n <Textarea prefixCls={prefixCls} {...otherProps} />\n </Fragment>\n )}\n </div>\n </div>\n );\n}\n"
50
50
  ]
51
51
  }
package/lib/index.js CHANGED
@@ -9,7 +9,7 @@ var _exportNames = {
9
9
  commands: true,
10
10
  MarkdownUtil: true
11
11
  };
12
- exports.MarkdownUtil = exports.commands = exports.default = void 0;
12
+ exports.default = exports.commands = exports.MarkdownUtil = void 0;
13
13
 
14
14
  var _Editor = _interopRequireWildcard(require("./Editor"));
15
15
 
@@ -3,10 +3,10 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.selectWord = selectWord;
7
- exports.getBreaksNeededForEmptyLineBefore = getBreaksNeededForEmptyLineBefore;
8
6
  exports.getBreaksNeededForEmptyLineAfter = getBreaksNeededForEmptyLineAfter;
7
+ exports.getBreaksNeededForEmptyLineBefore = getBreaksNeededForEmptyLineBefore;
9
8
  exports.getSurroundingWord = getSurroundingWord;
9
+ exports.selectWord = selectWord;
10
10
 
11
11
  function selectWord(_ref) {
12
12
  var text = _ref.text,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@uiw/react-md-editor",
3
- "version": "3.6.4",
3
+ "version": "3.8.0",
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>",
@@ -44,28 +44,28 @@
44
44
  "@kkt/react-library": "6.11.0",
45
45
  "@kkt/scope-plugin-options": "6.11.0",
46
46
  "@types/katex": "0.11.1",
47
- "@types/react": "17.0.21",
48
- "@types/react-dom": "17.0.9",
47
+ "@types/react": "17.0.34",
48
+ "@types/react-dom": "17.0.11",
49
49
  "@types/react-test-renderer": "17.0.1",
50
50
  "@uiw/react-github-corners": "1.5.3",
51
51
  "@uiw/react-codesandbox": "1.1.0",
52
52
  "@uiw/react-shields": "1.1.2",
53
- "compile-less-cli": "1.8.8",
54
- "katex": "0.13.18",
55
- "husky": "7.0.2",
56
- "jest-environment-jsdom": "27.2.0",
53
+ "compile-less-cli": "1.8.9",
54
+ "katex": "0.15.1",
55
+ "husky": "7.0.4",
56
+ "jest-environment-jsdom": "27.3.1",
57
57
  "kkt": "6.11.0",
58
- "lint-staged": "11.1.2",
58
+ "lint-staged": "11.2.6",
59
59
  "prettier": "2.4.1",
60
60
  "react": "17.0.2",
61
61
  "react-dom": "17.0.2",
62
62
  "react-test-renderer": "17.0.2",
63
63
  "source-map-explorer": "2.5.2",
64
- "tsbb": "3.2.1"
64
+ "tsbb": "3.4.4"
65
65
  },
66
66
  "dependencies": {
67
67
  "@babel/runtime": "^7.14.6",
68
- "@uiw/react-markdown-preview": "3.3.3",
68
+ "@uiw/react-markdown-preview": "3.4.1",
69
69
  "rehype": "12.0.0"
70
70
  },
71
71
  "keywords": [
@@ -87,21 +87,8 @@
87
87
  "<rootDir>/test/*.{ts,tsx}",
88
88
  "<rootDir>/test/**/*.{ts,tsx}"
89
89
  ],
90
- "coverageReporters": [
91
- "lcov",
92
- "json-summary"
93
- ],
94
90
  "transformIgnorePatterns": [
95
91
  "<rootDir>/node_modules/?!(.*)"
96
- ],
97
- "collectCoverageFrom": [
98
- "**/*.{tsx,ts}",
99
- "!.kktrc.ts",
100
- "!**/*.{js,d.ts}",
101
- "!**/node_modules/**",
102
- "!<rootDir>/coverage/**",
103
- "!**/website/**",
104
- "!**/vendor/**"
105
92
  ]
106
93
  },
107
94
  "lint-staged": {
package/src/Editor.tsx CHANGED
@@ -80,6 +80,11 @@ export interface MDEditorProps extends Omit<React.HTMLAttributes<HTMLDivElement>
80
80
  * You can create your own commands or reuse existing commands.
81
81
  */
82
82
  commands?: ICommand[];
83
+ /**
84
+ * Filter or modify your commands.
85
+ * https://github.com/uiwjs/react-md-editor/issues/296
86
+ */
87
+ commandsFilter?: (command: ICommand) => boolean | ICommand;
83
88
  /**
84
89
  * You can create your own commands or reuse existing commands.
85
90
  */
@@ -108,6 +113,7 @@ const InternalMDEditor = (
108
113
  className,
109
114
  value: propsValue,
110
115
  commands = getCommands(),
116
+ commandsFilter,
111
117
  extraCommands = getExtraCommands(),
112
118
  height = 200,
113
119
  toolbarHeight = 29,
@@ -127,6 +133,8 @@ const InternalMDEditor = (
127
133
  renderTextarea,
128
134
  ...other
129
135
  } = props || {};
136
+
137
+ const cmds = commands.map((item) => (commandsFilter ? commandsFilter(item) : item)).filter(Boolean) as ICommand[];
130
138
  let [state, dispatch] = useReducer(reducer, {
131
139
  markdown: propsValue,
132
140
  preview: previewType,
@@ -135,7 +143,7 @@ const InternalMDEditor = (
135
143
  tabSize,
136
144
  scrollTop: 0,
137
145
  scrollTopPreview: 0,
138
- commands,
146
+ commands: cmds,
139
147
  extraCommands,
140
148
  fullscreen,
141
149
  onChange,
@@ -269,11 +277,11 @@ const InternalMDEditor = (
269
277
  )}
270
278
  {/(live|preview)/.test(state.preview || '') && (
271
279
  <MarkdownPreview
272
- {...(previewOptions as unknown)}
280
+ {...previewOptions}
273
281
  onScroll={(e) => handleScroll(e, 'preview')}
274
282
  ref={previewRef}
275
283
  source={state.markdown || ''}
276
- className={`${prefixCls}-preview`}
284
+ className={`${prefixCls}-preview ${previewOptions.className || ''}`}
277
285
  />
278
286
  )}
279
287
  </div>
@@ -9,7 +9,7 @@ import './index.less';
9
9
  export interface TextAreaProps extends Omit<React.TextareaHTMLAttributes<HTMLTextAreaElement>, 'value'>, IProps {}
10
10
 
11
11
  export default function Textarea(props: TextAreaProps) {
12
- const { prefixCls, ...other } = props;
12
+ const { prefixCls, onChange: onChangeFromProps, ...other } = props;
13
13
  const { markdown, commands, fullscreen, preview, highlightEnable, extraCommands, tabSize, onChange, dispatch } =
14
14
  useContext(EditorContext);
15
15
  const textRef = React.useRef<HTMLTextAreaElement>(null);
@@ -59,6 +59,7 @@ export default function Textarea(props: TextAreaProps) {
59
59
  onChange={(e) => {
60
60
  dispatch && dispatch({ markdown: e.target.value });
61
61
  onChange && onChange(e.target.value);
62
+ onChangeFromProps && onChangeFromProps(e);
62
63
  }}
63
64
  />
64
65
  );
@@ -25,7 +25,7 @@ type RenderTextareaHandle = {
25
25
  };
26
26
 
27
27
  export interface ITextAreaProps
28
- extends Omit<React.TextareaHTMLAttributes<HTMLTextAreaElement>, 'value' | 'onChange' | 'onScroll'>,
28
+ extends Omit<React.TextareaHTMLAttributes<HTMLTextAreaElement>, 'value' | 'onScroll'>,
29
29
  IProps {
30
30
  value?: string;
31
31
  onScroll?: (e: React.UIEvent<HTMLDivElement>) => void;