@uiw/react-md-editor 3.12.1 → 3.13.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/dist/mdeditor.css +26 -16
- package/dist/mdeditor.js +2188 -1638
- package/dist/mdeditor.min.css +1 -1
- package/dist/mdeditor.min.js +1 -1
- package/dist/mdeditor.min.js.LICENSE.txt +1 -15
- package/esm/Context.js.map +5 -5
- package/esm/Editor.d.ts +2 -0
- package/esm/Editor.js +10 -3
- package/esm/Editor.js.map +7 -6
- package/esm/commands/bold.js.map +5 -5
- package/esm/commands/code.js +4 -2
- package/esm/commands/code.js.map +7 -6
- package/esm/commands/comment.js.map +5 -5
- package/esm/commands/divider.js.map +5 -5
- package/esm/commands/fullscreen.js.map +5 -5
- package/esm/commands/group.js.map +5 -5
- package/esm/commands/hr.js.map +5 -5
- package/esm/commands/image.js.map +5 -5
- package/esm/commands/index.js.map +5 -5
- package/esm/commands/italic.js.map +5 -5
- package/esm/commands/link.js.map +5 -5
- package/esm/commands/list.js.map +5 -5
- package/esm/commands/preview.js.map +5 -5
- package/esm/commands/quote.js.map +5 -5
- package/esm/commands/strikeThrough.js.map +5 -5
- package/esm/commands/title.js.map +5 -5
- package/esm/commands/title1.js.map +5 -5
- package/esm/commands/title2.js.map +5 -5
- package/esm/commands/title3.js.map +5 -5
- package/esm/commands/title4.js.map +5 -5
- package/esm/commands/title5.js.map +5 -5
- package/esm/commands/title6.js.map +5 -5
- package/esm/components/DragBar/index.js.map +5 -5
- package/esm/components/TextArea/Markdown.js.map +5 -5
- package/esm/components/TextArea/Textarea.js.map +5 -5
- package/esm/components/TextArea/handleKeyDown.js.map +5 -5
- package/esm/components/TextArea/index.css +8 -1
- package/esm/components/TextArea/index.js.map +5 -5
- package/esm/components/TextArea/index.less +8 -1
- package/esm/components/TextArea/shortcuts.js.map +5 -5
- package/esm/components/Toolbar/Child.js.map +5 -5
- package/esm/components/Toolbar/index.css +5 -0
- package/esm/components/Toolbar/index.d.ts +1 -0
- package/esm/components/Toolbar/index.js +3 -1
- package/esm/components/Toolbar/index.js.map +9 -7
- package/esm/components/Toolbar/index.less +5 -0
- package/esm/index.css +3 -0
- package/esm/index.js.map +5 -5
- package/esm/index.less +3 -0
- package/esm/utils/InsertTextAtPosition.js.map +5 -5
- package/esm/utils/markdownUtils.js.map +5 -5
- package/lib/Context.js.map +5 -5
- package/lib/Editor.d.ts +2 -0
- package/lib/Editor.js +11 -3
- package/lib/Editor.js.map +14 -6
- package/lib/commands/bold.js.map +6 -5
- package/lib/commands/code.js +4 -2
- package/lib/commands/code.js.map +10 -6
- package/lib/commands/comment.js.map +6 -5
- package/lib/commands/divider.js.map +5 -5
- package/lib/commands/fullscreen.js.map +5 -5
- package/lib/commands/group.js.map +5 -5
- package/lib/commands/hr.js.map +5 -5
- package/lib/commands/image.js.map +6 -5
- package/lib/commands/index.js.map +6 -5
- package/lib/commands/italic.js.map +6 -5
- package/lib/commands/link.js.map +6 -5
- package/lib/commands/list.js.map +8 -5
- package/lib/commands/preview.js.map +5 -5
- package/lib/commands/quote.js.map +8 -5
- package/lib/commands/strikeThrough.js.map +6 -5
- package/lib/commands/title.js.map +5 -5
- package/lib/commands/title1.js.map +6 -5
- package/lib/commands/title2.js.map +6 -5
- package/lib/commands/title3.js.map +6 -5
- package/lib/commands/title4.js.map +6 -5
- package/lib/commands/title5.js.map +6 -5
- package/lib/commands/title6.js.map +6 -5
- package/lib/components/DragBar/index.js.map +9 -6
- package/lib/components/TextArea/Markdown.js.map +9 -5
- package/lib/components/TextArea/Textarea.js.map +9 -5
- package/lib/components/TextArea/handleKeyDown.js.map +7 -5
- package/lib/components/TextArea/index.js.map +7 -6
- package/lib/components/TextArea/index.less +8 -1
- package/lib/components/TextArea/shortcuts.js.map +5 -5
- package/lib/components/Toolbar/Child.js.map +7 -5
- package/lib/components/Toolbar/index.d.ts +1 -0
- package/lib/components/Toolbar/index.js +3 -1
- package/lib/components/Toolbar/index.js.map +12 -7
- package/lib/components/Toolbar/index.less +5 -0
- package/lib/index.js.map +5 -5
- package/lib/index.less +3 -0
- package/lib/utils/InsertTextAtPosition.js.map +5 -5
- package/lib/utils/markdownUtils.js.map +5 -5
- package/markdown-editor.css +16 -1
- package/package.json +11 -11
- package/src/Editor.tsx +9 -1
- package/src/__test__/editor.test.tsx +1 -1
- package/src/commands/code.tsx +2 -2
- package/src/components/TextArea/index.less +8 -1
- package/src/components/Toolbar/index.less +5 -0
- package/src/components/Toolbar/index.tsx +4 -2
- package/src/index.less +3 -0
|
@@ -1,8 +1,5 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": [
|
|
4
|
-
"../../../src/components/TextArea/shortcuts.ts"
|
|
5
|
-
],
|
|
6
3
|
"names": [
|
|
7
4
|
"getCommands",
|
|
8
5
|
"data",
|
|
@@ -45,8 +42,11 @@
|
|
|
45
42
|
"preventDefault",
|
|
46
43
|
"executeCommand"
|
|
47
44
|
],
|
|
48
|
-
"
|
|
45
|
+
"sources": [
|
|
46
|
+
"../../../src/components/TextArea/shortcuts.ts"
|
|
47
|
+
],
|
|
49
48
|
"sourcesContent": [
|
|
50
49
|
"import { ICommand, TextAreaCommandOrchestrator } from '../../commands';\nimport { ContextStore, ExecuteCommandState } from '../../Context';\n\nfunction getCommands(data: ICommand[] = [], resulte: Record<string, ICommand> = {}): Record<string, ICommand> {\n data.forEach((item) => {\n if (item.children && Array.isArray(item.children)) {\n resulte = { ...resulte, ...getCommands(item.children || []) };\n } else if (item.keyCommand && item.shortcuts && item.execute) {\n resulte[item.shortcuts.toLocaleLowerCase()] = item;\n }\n });\n return resulte;\n}\n\nexport default function shortcutsHandle(\n e: KeyboardEvent | React.KeyboardEvent<HTMLTextAreaElement>,\n commands: ICommand[] = [],\n commandOrchestrator?: TextAreaCommandOrchestrator,\n dispatch?: React.Dispatch<ContextStore>,\n state?: ExecuteCommandState,\n) {\n const data = getCommands(commands || []);\n const shortcuts: (string | number)[] = [];\n if (e.altKey) {\n shortcuts.push('alt');\n }\n if (e.shiftKey) {\n shortcuts.push('shift');\n }\n if (e.metaKey) {\n shortcuts.push('cmd');\n }\n if (e.ctrlKey) {\n shortcuts.push('ctrl');\n }\n if (shortcuts.length > 0 && !/(control|alt|meta|shift)/.test(e.key.toLocaleLowerCase())) {\n shortcuts.push(e.key.toLocaleLowerCase());\n }\n if (/escape/.test(e.key.toLocaleLowerCase())) {\n shortcuts.push('escape');\n }\n if (shortcuts.length < 1) {\n return;\n }\n\n let equal = !!data[shortcuts.join('+')];\n let command = equal ? data[shortcuts.join('+')] : undefined;\n\n Object.keys(data).forEach((item) => {\n const isequal = item.split('+').every((v) => {\n if (/ctrlcmd/.test(v)) {\n return shortcuts.includes('ctrl') || shortcuts.includes('cmd');\n }\n return shortcuts.includes(v);\n });\n if (isequal) {\n command = data[item];\n }\n });\n if (command && commandOrchestrator) {\n e.stopPropagation();\n e.preventDefault();\n commandOrchestrator.executeCommand(command, dispatch, state);\n return;\n }\n}\n"
|
|
51
|
-
]
|
|
50
|
+
],
|
|
51
|
+
"mappings": "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"
|
|
52
52
|
}
|
|
@@ -1,8 +1,5 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": [
|
|
4
|
-
"../../../src/components/Toolbar/Child.tsx"
|
|
5
|
-
],
|
|
6
3
|
"names": [
|
|
7
4
|
"React",
|
|
8
5
|
"useContext",
|
|
@@ -21,8 +18,11 @@
|
|
|
21
18
|
"Array",
|
|
22
19
|
"isArray"
|
|
23
20
|
],
|
|
24
|
-
"
|
|
21
|
+
"sources": [
|
|
22
|
+
"../../../src/components/Toolbar/Child.tsx"
|
|
23
|
+
],
|
|
25
24
|
"sourcesContent": [
|
|
26
25
|
"import React, { useContext, useMemo } from 'react';\nimport './Child.less';\nimport Toolbar, { IToolbarProps } from './';\nimport { EditorContext } from '../../Context';\n\nexport type ChildProps = IToolbarProps & {\n children?: JSX.Element;\n groupName?: string;\n};\n\nexport default function Child(props: ChildProps) {\n const { prefixCls, groupName, commands, children } = props || {};\n const { barPopup = {} } = useContext(EditorContext);\n return useMemo(\n () => (\n <div\n className={`${prefixCls}-toolbar-child ${groupName && barPopup[groupName] ? 'active' : ''}`}\n onClick={(e) => e.stopPropagation()}\n >\n {Array.isArray(commands) ? <Toolbar commands={commands} {...props} height=\"\" isChild /> : children}\n </div>\n ),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [commands, barPopup, groupName, prefixCls],\n );\n}\n"
|
|
27
|
-
]
|
|
26
|
+
],
|
|
27
|
+
"mappings": ";AAAA,OAAOA,KAAP,IAAgBC,UAAhB,EAA4BC,OAA5B,QAA2C,OAA3C;AACA;AACA,OAAOC,OAAP,MAAuC,IAAvC;AACA,SAASC,aAAT,QAA8B,eAA9B;;AAOA,eAAe,SAASC,KAAT,CAAeC,KAAf,EAAkC;EAC/C,IAAM;IAAEC,SAAF;IAAaC,SAAb;IAAwBC,QAAxB;IAAkCC;EAAlC,IAA+CJ,KAAK,IAAI,EAA9D;EACA,IAAM;IAAEK,QAAQ,GAAG;EAAb,IAAoBV,UAAU,CAACG,aAAD,CAApC;EACA,OAAOF,OAAO,CACZ,mBACE;IACE,SAAS,EAAKK,SAAL,wBAAgCC,SAAS,IAAIG,QAAQ,CAACH,SAAD,CAArB,GAAmC,QAAnC,GAA8C,EAA9E,CADX;IAEE,OAAO,EAAGI,CAAD,IAAOA,CAAC,CAACC,eAAF,EAFlB;IAAA,UAIGC,KAAK,CAACC,OAAN,CAAcN,QAAd,iBAA0B,KAAC,OAAD;MAAS,QAAQ,EAAEA;IAAnB,GAAiCH,KAAjC;MAAwC,MAAM,EAAC,EAA/C;MAAkD,OAAO;IAAzD,GAA1B,GAAyFI;EAJ5F,EAFU,EASZ;EACA,CAACD,QAAD,EAAWE,QAAX,EAAqBH,SAArB,EAAgCD,SAAhC,CAVY,CAAd;AAYD"
|
|
28
28
|
}
|
|
@@ -9,6 +9,11 @@
|
|
|
9
9
|
-webkit-user-select: none;
|
|
10
10
|
user-select: none;
|
|
11
11
|
}
|
|
12
|
+
.w-md-editor-toolbar.bottom {
|
|
13
|
+
border-bottom: 0px;
|
|
14
|
+
border-top: 1px solid var(--color-border-default);
|
|
15
|
+
border-radius: 0 0 3px 3px;
|
|
16
|
+
}
|
|
12
17
|
.w-md-editor-toolbar ul,
|
|
13
18
|
.w-md-editor-toolbar li {
|
|
14
19
|
margin: 0;
|
|
@@ -5,6 +5,7 @@ import './index.less';
|
|
|
5
5
|
export interface IToolbarProps extends IProps {
|
|
6
6
|
overflow?: boolean;
|
|
7
7
|
height?: React.CSSProperties['height'];
|
|
8
|
+
toolbarBottom?: boolean;
|
|
8
9
|
onCommand?: (command: ICommand<string>, groupName?: string) => void;
|
|
9
10
|
commands?: ICommand<string>[];
|
|
10
11
|
isChild?: boolean;
|
|
@@ -120,14 +120,16 @@ export default function Toolbar(props) {
|
|
|
120
120
|
var {
|
|
121
121
|
prefixCls,
|
|
122
122
|
height = 29,
|
|
123
|
+
toolbarBottom,
|
|
123
124
|
isChild
|
|
124
125
|
} = props;
|
|
125
126
|
var {
|
|
126
127
|
commands,
|
|
127
128
|
extraCommands
|
|
128
129
|
} = useContext(EditorContext);
|
|
130
|
+
var bottomClassName = toolbarBottom ? 'bottom' : '';
|
|
129
131
|
return /*#__PURE__*/_jsxs("div", {
|
|
130
|
-
className: prefixCls + "-toolbar",
|
|
132
|
+
className: prefixCls + "-toolbar " + bottomClassName,
|
|
131
133
|
style: {
|
|
132
134
|
height
|
|
133
135
|
},
|
|
@@ -1,8 +1,5 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": [
|
|
4
|
-
"../../../src/components/Toolbar/index.tsx"
|
|
5
|
-
],
|
|
6
3
|
"names": [
|
|
7
4
|
"React",
|
|
8
5
|
"Fragment",
|
|
@@ -68,11 +65,16 @@
|
|
|
68
65
|
"isArray",
|
|
69
66
|
"Toolbar",
|
|
70
67
|
"height",
|
|
68
|
+
"toolbarBottom",
|
|
71
69
|
"isChild",
|
|
72
|
-
"extraCommands"
|
|
70
|
+
"extraCommands",
|
|
71
|
+
"bottomClassName"
|
|
72
|
+
],
|
|
73
|
+
"sources": [
|
|
74
|
+
"../../../src/components/Toolbar/index.tsx"
|
|
73
75
|
],
|
|
74
|
-
"mappings": "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",
|
|
75
76
|
"sourcesContent": [
|
|
76
|
-
"import React, { Fragment, useContext, useEffect, useRef } from 'react';\nimport { IProps } from '../../Editor';\nimport { EditorContext, PreviewType, ContextStore } from '../../Context';\nimport { ICommand } from '../../commands';\nimport Child from './Child';\nimport './index.less';\n\nexport interface IToolbarProps extends IProps {\n overflow?: boolean;\n height?: React.CSSProperties['height'];\n onCommand?: (command: ICommand<string>, groupName?: string) => void;\n commands?: ICommand<string>[];\n isChild?: boolean;\n}\n\nexport function ToolbarItems(props: IToolbarProps) {\n const { prefixCls, overflow } = props;\n const { fullscreen, preview, barPopup = {}, commandOrchestrator, dispatch } = useContext(EditorContext);\n const originalOverflow = useRef('');\n\n function handleClick(command: ICommand<string>, name?: string) {\n if (!dispatch) return;\n const state: ContextStore = { barPopup: { ...barPopup } };\n if (command.keyCommand === 'preview') {\n state.preview = command.value as PreviewType;\n }\n if (command.keyCommand === 'fullscreen') {\n state.fullscreen = !fullscreen;\n }\n if (props.commands && command.keyCommand === 'group') {\n props.commands.forEach((item) => {\n if (name === item.groupName) {\n state.barPopup![name!] = true;\n } else if (item.keyCommand) {\n state.barPopup![item.groupName!] = false;\n }\n });\n } else if (name || command.parent) {\n Object.keys(state.barPopup || {}).forEach((keyName) => {\n state.barPopup![keyName] = false;\n });\n }\n\n if (Object.keys(state).length) {\n dispatch({ ...state });\n }\n commandOrchestrator && commandOrchestrator.executeCommand(command);\n }\n\n useEffect(() => {\n if (document && overflow) {\n if (fullscreen) {\n // prevent scroll on fullscreen\n document.body.style.overflow = 'hidden';\n } else {\n // get the original overflow only the first time\n if (!originalOverflow.current) {\n originalOverflow.current = window.getComputedStyle(document.body, null).overflow;\n }\n // reset to the original overflow\n document.body.style.overflow = originalOverflow.current;\n }\n }\n }, [fullscreen, originalOverflow, overflow]);\n\n return (\n <ul>\n {(props.commands || []).map((item, idx) => {\n if (item.keyCommand === 'divider') {\n return <li key={idx} {...item.liProps} className={`${prefixCls}-toolbar-divider`} />;\n }\n if (!item.keyCommand) return <Fragment key={idx} />;\n const activeBtn =\n (fullscreen && item.keyCommand === 'fullscreen') || (item.keyCommand === 'preview' && preview === item.value);\n const childNode =\n item.children && typeof item.children === 'function'\n ? item.children({\n getState: () => commandOrchestrator!.getState(),\n textApi: commandOrchestrator ? commandOrchestrator!.textApi : undefined,\n close: () => handleClick({}, item.groupName),\n execute: () => handleClick({ execute: item.execute }),\n })\n : undefined;\n const disabled = barPopup && preview && preview === 'preview' && !/(preview|fullscreen)/.test(item.keyCommand);\n return (\n <li key={idx} {...item.liProps} className={activeBtn ? `active` : ''}>\n {!item.buttonProps && item.icon}\n {item.buttonProps &&\n React.createElement(\n 'button',\n {\n type: 'button',\n key: idx,\n disabled,\n 'data-name': item.name,\n ...item.buttonProps,\n onClick: (evn: React.MouseEvent<HTMLButtonElement, MouseEvent>) => {\n evn.stopPropagation();\n handleClick(item, item.groupName);\n },\n },\n item.icon,\n )}\n {item.children && (\n <Child\n overflow={overflow}\n groupName={item.groupName}\n prefixCls={prefixCls}\n children={childNode}\n commands={Array.isArray(item.children) ? item.children : undefined}\n />\n )}\n </li>\n );\n })}\n </ul>\n );\n}\n\nexport default function Toolbar(props: IToolbarProps = {}) {\n const { prefixCls, height = 29, isChild } = props;\n const { commands, extraCommands } = useContext(EditorContext);\n return (\n <div className={`${prefixCls}-toolbar`} style={{ height }}>\n <ToolbarItems {...props} commands={props.commands || commands || []} />\n {!isChild && <ToolbarItems {...props} commands={extraCommands || []} />}\n </div>\n );\n}\n"
|
|
77
|
-
]
|
|
77
|
+
"import React, { Fragment, useContext, useEffect, useRef } from 'react';\nimport { IProps } from '../../Editor';\nimport { EditorContext, PreviewType, ContextStore } from '../../Context';\nimport { ICommand } from '../../commands';\nimport Child from './Child';\nimport './index.less';\n\nexport interface IToolbarProps extends IProps {\n overflow?: boolean;\n height?: React.CSSProperties['height'];\n toolbarBottom?: boolean;\n onCommand?: (command: ICommand<string>, groupName?: string) => void;\n commands?: ICommand<string>[];\n isChild?: boolean;\n}\n\nexport function ToolbarItems(props: IToolbarProps) {\n const { prefixCls, overflow } = props;\n const { fullscreen, preview, barPopup = {}, commandOrchestrator, dispatch } = useContext(EditorContext);\n const originalOverflow = useRef('');\n\n function handleClick(command: ICommand<string>, name?: string) {\n if (!dispatch) return;\n const state: ContextStore = { barPopup: { ...barPopup } };\n if (command.keyCommand === 'preview') {\n state.preview = command.value as PreviewType;\n }\n if (command.keyCommand === 'fullscreen') {\n state.fullscreen = !fullscreen;\n }\n if (props.commands && command.keyCommand === 'group') {\n props.commands.forEach((item) => {\n if (name === item.groupName) {\n state.barPopup![name!] = true;\n } else if (item.keyCommand) {\n state.barPopup![item.groupName!] = false;\n }\n });\n } else if (name || command.parent) {\n Object.keys(state.barPopup || {}).forEach((keyName) => {\n state.barPopup![keyName] = false;\n });\n }\n\n if (Object.keys(state).length) {\n dispatch({ ...state });\n }\n commandOrchestrator && commandOrchestrator.executeCommand(command);\n }\n\n useEffect(() => {\n if (document && overflow) {\n if (fullscreen) {\n // prevent scroll on fullscreen\n document.body.style.overflow = 'hidden';\n } else {\n // get the original overflow only the first time\n if (!originalOverflow.current) {\n originalOverflow.current = window.getComputedStyle(document.body, null).overflow;\n }\n // reset to the original overflow\n document.body.style.overflow = originalOverflow.current;\n }\n }\n }, [fullscreen, originalOverflow, overflow]);\n\n return (\n <ul>\n {(props.commands || []).map((item, idx) => {\n if (item.keyCommand === 'divider') {\n return <li key={idx} {...item.liProps} className={`${prefixCls}-toolbar-divider`} />;\n }\n if (!item.keyCommand) return <Fragment key={idx} />;\n const activeBtn =\n (fullscreen && item.keyCommand === 'fullscreen') || (item.keyCommand === 'preview' && preview === item.value);\n const childNode =\n item.children && typeof item.children === 'function'\n ? item.children({\n getState: () => commandOrchestrator!.getState(),\n textApi: commandOrchestrator ? commandOrchestrator!.textApi : undefined,\n close: () => handleClick({}, item.groupName),\n execute: () => handleClick({ execute: item.execute }),\n })\n : undefined;\n const disabled = barPopup && preview && preview === 'preview' && !/(preview|fullscreen)/.test(item.keyCommand);\n return (\n <li key={idx} {...item.liProps} className={activeBtn ? `active` : ''}>\n {!item.buttonProps && item.icon}\n {item.buttonProps &&\n React.createElement(\n 'button',\n {\n type: 'button',\n key: idx,\n disabled,\n 'data-name': item.name,\n ...item.buttonProps,\n onClick: (evn: React.MouseEvent<HTMLButtonElement, MouseEvent>) => {\n evn.stopPropagation();\n handleClick(item, item.groupName);\n },\n },\n item.icon,\n )}\n {item.children && (\n <Child\n overflow={overflow}\n groupName={item.groupName}\n prefixCls={prefixCls}\n children={childNode}\n commands={Array.isArray(item.children) ? item.children : undefined}\n />\n )}\n </li>\n );\n })}\n </ul>\n );\n}\n\nexport default function Toolbar(props: IToolbarProps = {}) {\n const { prefixCls, height = 29, toolbarBottom, isChild } = props;\n const { commands, extraCommands } = useContext(EditorContext);\n const bottomClassName = toolbarBottom ? 'bottom' : '';\n return (\n <div className={`${prefixCls}-toolbar ${bottomClassName}`} style={{ height }}>\n <ToolbarItems {...props} commands={props.commands || commands || []} />\n {!isChild && <ToolbarItems {...props} commands={extraCommands || []} />}\n </div>\n );\n}\n"
|
|
78
|
+
],
|
|
79
|
+
"mappings": "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"
|
|
78
80
|
}
|
package/esm/index.css
CHANGED
package/esm/index.js.map
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": [
|
|
4
|
-
"../src/index.tsx"
|
|
5
|
-
],
|
|
6
3
|
"names": [
|
|
7
4
|
"MDEditor",
|
|
8
5
|
"commands",
|
|
9
6
|
"MarkdownUtil"
|
|
10
7
|
],
|
|
11
|
-
"
|
|
8
|
+
"sources": [
|
|
9
|
+
"../src/index.tsx"
|
|
10
|
+
],
|
|
12
11
|
"sourcesContent": [
|
|
13
12
|
"import MDEditor from './Editor';\nimport * as commands from './commands';\nimport * as MarkdownUtil from './utils/markdownUtils';\n\nexport * from './commands';\nexport * from './utils/markdownUtils';\nexport * from './Editor';\nexport * from './Context';\n\nexport { MarkdownUtil, commands };\n\nexport default MDEditor;\n"
|
|
14
|
-
]
|
|
13
|
+
],
|
|
14
|
+
"mappings": "AAAA,OAAOA,QAAP,MAAqB,UAArB;AACA,OAAO,KAAKC,QAAZ,MAA0B,YAA1B;AACA,OAAO,KAAKC,YAAZ,MAA8B,uBAA9B;AAEA,cAAc,YAAd;AACA,cAAc,uBAAd;AACA,cAAc,UAAd;AACA,cAAc,WAAd;AAEA,SAASA,YAAT,EAAuBD,QAAvB;AAEA,eAAeD,QAAf"
|
|
15
15
|
}
|
package/esm/index.less
CHANGED
|
@@ -1,8 +1,5 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": [
|
|
4
|
-
"../../src/utils/InsertTextAtPosition.ts"
|
|
5
|
-
],
|
|
6
3
|
"names": [
|
|
7
4
|
"browserSupportsTextareaTextNodes",
|
|
8
5
|
"canManipulateViaTextNodes",
|
|
@@ -60,8 +57,11 @@
|
|
|
60
57
|
"createEvent",
|
|
61
58
|
"initEvent"
|
|
62
59
|
],
|
|
63
|
-
"
|
|
60
|
+
"sources": [
|
|
61
|
+
"../../src/utils/InsertTextAtPosition.ts"
|
|
62
|
+
],
|
|
64
63
|
"sourcesContent": [
|
|
65
64
|
"/**\n * The MIT License\n * Copyright (c) 2018 Dmitriy Kubyshkin\n * Copied from https://github.com/grassator/insert-text-at-cursor\n */\n\nlet browserSupportsTextareaTextNodes: any;\n\n/**\n * @param {HTMLElement} input\n * @return {boolean}\n */\nfunction canManipulateViaTextNodes(input: HTMLTextAreaElement | HTMLInputElement): boolean {\n if (input.nodeName !== 'TEXTAREA') {\n return false;\n }\n if (typeof browserSupportsTextareaTextNodes === 'undefined') {\n const textarea: HTMLTextAreaElement = document.createElement('textarea');\n textarea.value = '1';\n browserSupportsTextareaTextNodes = !!textarea.firstChild;\n }\n return browserSupportsTextareaTextNodes;\n}\n\n/**\n * @param {string} val\n * @param {number} cursorIdx\n * @param {HTMLTextAreaElement|HTMLInputElement} input\n * @return {void}\n */\nexport const insertAtLineStart = (\n val: string,\n cursorIdx: number,\n input: HTMLTextAreaElement | HTMLInputElement,\n): void => {\n const content = input.value;\n let startIdx = 0;\n\n while (cursorIdx--) {\n let char = content[cursorIdx];\n if (char === '\\n') {\n startIdx = cursorIdx + 1;\n break;\n }\n }\n\n input.focus();\n input.setRangeText(val, startIdx, startIdx);\n input.dispatchEvent(new Event('input', { bubbles: true }));\n};\n\n/**\n * @param {HTMLTextAreaElement|HTMLInputElement} input\n * @param {string} text\n * @returns {void}\n */\nexport function insertTextAtPosition(input: HTMLTextAreaElement | HTMLInputElement, text: string): void {\n // Most of the used APIs only work with the field selected\n input.focus();\n\n // IE 8-10\n if ((document as any).selection) {\n const ieRange = (document as any).selection.createRange();\n ieRange.text = text;\n\n // Move cursor after the inserted text\n ieRange.collapse(false /* to the end */);\n ieRange.select();\n\n return;\n }\n\n // Webkit + Edge\n const isSuccess = document.execCommand && document.execCommand('insertText', false, text);\n if (!isSuccess) {\n const start = input.selectionStart!;\n const end = input.selectionEnd!;\n // Firefox (non-standard method)\n if (typeof input.setRangeText === 'function') {\n input.setRangeText(text);\n } else {\n // To make a change we just need a Range, not a Selection\n const range = document.createRange();\n const textNode = document.createTextNode(text);\n\n if (canManipulateViaTextNodes(input)) {\n let node = input.firstChild;\n\n // If textarea is empty, just insert the text\n if (!node) {\n input.appendChild(textNode);\n } else {\n // Otherwise we need to find a nodes for start and end\n let offset = 0;\n let startNode = null;\n let endNode = null;\n\n while (node && (startNode === null || endNode === null)) {\n const nodeLength = node.nodeValue!.length;\n\n // if start of the selection falls into current node\n if (start >= offset && start <= offset + nodeLength) {\n range.setStart((startNode = node), start - offset);\n }\n\n // if end of the selection falls into current node\n if (end >= offset && end <= offset + nodeLength) {\n range.setEnd((endNode = node), end - offset);\n }\n\n offset += nodeLength;\n node = node.nextSibling;\n }\n\n // If there is some text selected, remove it as we should replace it\n if (start !== end) {\n range.deleteContents();\n }\n }\n }\n\n // If the node is a textarea and the range doesn't span outside the element\n //\n // Get the commonAncestorContainer of the selected range and test its type\n // If the node is of type `#text` it means that we're still working with text nodes within our textarea element\n // otherwise, if it's of type `#document` for example it means our selection spans outside the textarea.\n if (canManipulateViaTextNodes(input) && range.commonAncestorContainer.nodeName === '#text') {\n // Finally insert a new node. The browser will automatically split start and end nodes into two if necessary\n range.insertNode(textNode);\n } else {\n // If the node is not a textarea or the range spans outside a textarea the only way is to replace the whole value\n const value = input.value;\n input.value = value.slice(0, start) + text + value.slice(end);\n }\n }\n\n // Correct the cursor position to be at the end of the insertion\n input.setSelectionRange(start + text.length, start + text.length);\n\n // Notify any possible listeners of the change\n const e = document.createEvent('UIEvent');\n e.initEvent('input', true, false);\n input.dispatchEvent(e);\n }\n}\n"
|
|
66
|
-
]
|
|
65
|
+
],
|
|
66
|
+
"mappings": "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"
|
|
67
67
|
}
|
|
@@ -1,8 +1,5 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": [
|
|
4
|
-
"../../src/utils/markdownUtils.ts"
|
|
5
|
-
],
|
|
6
3
|
"names": [
|
|
7
4
|
"selectWord",
|
|
8
5
|
"text",
|
|
@@ -24,8 +21,11 @@
|
|
|
24
21
|
"isWordDelimiter",
|
|
25
22
|
"c"
|
|
26
23
|
],
|
|
27
|
-
"
|
|
24
|
+
"sources": [
|
|
25
|
+
"../../src/utils/markdownUtils.ts"
|
|
26
|
+
],
|
|
28
27
|
"sourcesContent": [
|
|
29
28
|
"import { TextRange } from '../commands';\n\nexport interface TextSection {\n text: string;\n selection: TextRange;\n}\n\nexport function selectWord({ text, selection }: TextSection): TextRange {\n if (text && text.length && selection.start === selection.end) {\n // the user is pointing to a word\n return getSurroundingWord(text, selection.start);\n }\n return selection;\n}\n\n/**\n * Gets the number of line-breaks that would have to be inserted before the given 'startPosition'\n * to make sure there's an empty line between 'startPosition' and the previous text\n */\nexport function getBreaksNeededForEmptyLineBefore(text = '', startPosition: number): number {\n if (startPosition === 0) return 0;\n\n // rules:\n // - If we're in the first line, no breaks are needed\n // - Otherwise there must be 2 breaks before the previous character. Depending on how many breaks exist already, we\n // may need to insert 0, 1 or 2 breaks\n\n let neededBreaks = 2;\n let isInFirstLine = true;\n for (let i = startPosition - 1; i >= 0 && neededBreaks >= 0; i--) {\n switch (text.charCodeAt(i)) {\n case 32: // blank space\n continue;\n case 10: // line break\n neededBreaks--;\n isInFirstLine = false;\n break;\n default:\n return neededBreaks;\n }\n }\n return isInFirstLine ? 0 : neededBreaks;\n}\n\n/**\n * Gets the number of line-breaks that would have to be inserted after the given 'startPosition'\n * to make sure there's an empty line between 'startPosition' and the next text\n */\nexport function getBreaksNeededForEmptyLineAfter(text = '', startPosition: number): number {\n if (startPosition === text.length - 1) return 0;\n\n // rules:\n // - If we're in the first line, no breaks are needed\n // - Otherwise there must be 2 breaks before the previous character. Depending on how many breaks exist already, we\n // may need to insert 0, 1 or 2 breaks\n\n let neededBreaks = 2;\n let isInLastLine = true;\n for (let i = startPosition; i < text.length && neededBreaks >= 0; i++) {\n switch (text.charCodeAt(i)) {\n case 32:\n continue;\n case 10: {\n neededBreaks--;\n isInLastLine = false;\n break;\n }\n default:\n return neededBreaks;\n }\n }\n return isInLastLine ? 0 : neededBreaks;\n}\n\nexport function getSurroundingWord(text: string, position: number): TextRange {\n if (!text) throw Error(\"Argument 'text' should be truthy\");\n\n const isWordDelimiter = (c: string) => c === ' ' || c.charCodeAt(0) === 10;\n\n // leftIndex is initialized to 0 because if selection is 0, it won't even enter the iteration\n let start = 0;\n // rightIndex is initialized to text.length because if selection is equal to text.length it won't even enter the interation\n let end = text.length;\n\n // iterate to the left\n for (let i = position; i - 1 > -1; i--) {\n if (isWordDelimiter(text[i - 1])) {\n start = i;\n break;\n }\n }\n\n // iterate to the right\n for (let i = position; i < text.length; i++) {\n if (isWordDelimiter(text[i])) {\n end = i;\n break;\n }\n }\n\n return { start, end };\n}\n"
|
|
30
|
-
]
|
|
29
|
+
],
|
|
30
|
+
"mappings": "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"
|
|
31
31
|
}
|
package/lib/Context.js.map
CHANGED
|
@@ -1,8 +1,5 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": [
|
|
4
|
-
"../src/Context.tsx"
|
|
5
|
-
],
|
|
6
3
|
"names": [
|
|
7
4
|
"reducer",
|
|
8
5
|
"state",
|
|
@@ -12,8 +9,11 @@
|
|
|
12
9
|
"createContext",
|
|
13
10
|
"markdown"
|
|
14
11
|
],
|
|
15
|
-
"
|
|
12
|
+
"sources": [
|
|
13
|
+
"../src/Context.tsx"
|
|
14
|
+
],
|
|
16
15
|
"sourcesContent": [
|
|
17
16
|
"import React from 'react';\nimport { ICommand, TextAreaCommandOrchestrator } from './commands';\n\nexport type PreviewType = 'live' | 'edit' | 'preview';\n\nexport type ContextStore = {\n commands?: ICommand<string>[];\n extraCommands?: ICommand<string>[];\n markdown?: string;\n preview?: PreviewType;\n height?: number;\n fullscreen?: boolean;\n highlightEnable?: boolean;\n autoFocus?: boolean;\n textarea?: HTMLTextAreaElement;\n commandOrchestrator?: TextAreaCommandOrchestrator;\n textareaWarp?: HTMLDivElement;\n textareaPre?: HTMLPreElement;\n container?: HTMLDivElement | null;\n dispatch?: React.Dispatch<ContextStore>;\n barPopup?: Record<string, boolean>;\n scrollTop?: number;\n scrollTopPreview?: number;\n tabSize?: number;\n defaultTabEnable?: boolean;\n};\n\nexport type ExecuteCommandState = Pick<ContextStore, 'fullscreen' | 'preview' | 'highlightEnable'>;\n\nexport function reducer(state: ContextStore, action: ContextStore) {\n return { ...state, ...action };\n}\n\nexport const EditorContext = React.createContext<ContextStore>({ markdown: '' });\n"
|
|
18
|
-
]
|
|
17
|
+
],
|
|
18
|
+
"mappings": ";;;;;;;;;;;;AAAA;;AA6BO,SAASA,OAAT,CAAiBC,KAAjB,EAAsCC,MAAtC,EAA4D;EACjE,mEAAYD,KAAZ,GAAsBC,MAAtB;AACD;;AAEM,IAAMC,aAAa,gBAAGC,cAAA,CAAMC,aAAN,CAAkC;EAAEC,QAAQ,EAAE;AAAZ,CAAlC,CAAtB"
|
|
19
19
|
}
|
package/lib/Editor.d.ts
CHANGED
|
@@ -103,6 +103,8 @@ export interface MDEditorProps extends Omit<React.HTMLAttributes<HTMLDivElement>
|
|
|
103
103
|
hideToolbar?: boolean;
|
|
104
104
|
/** Whether to enable scrolling */
|
|
105
105
|
enableScroll?: boolean;
|
|
106
|
+
/** Toolbar on bottom */
|
|
107
|
+
toolbarBottom?: boolean;
|
|
106
108
|
}
|
|
107
109
|
declare const mdEditor: React.ForwardRefExoticComponent<MDEditorProps & React.RefAttributes<ContextStore>>;
|
|
108
110
|
declare type MDEditor = typeof mdEditor & {
|
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", "commandsFilter", "extraCommands", "height", "toolbarHeight", "enableScroll", "visiableDragbar", "highlightEnable", "preview", "fullscreen", "overflow", "previewOptions", "textareaProps", "maxHeight", "minHeight", "autoFocus", "tabSize", "defaultTabEnable", "onChange", "onHeightChange", "hideToolbar", "renderTextarea"];
|
|
34
|
+
var _excluded = ["prefixCls", "className", "value", "commands", "commandsFilter", "extraCommands", "height", "toolbarHeight", "enableScroll", "visiableDragbar", "highlightEnable", "preview", "fullscreen", "overflow", "previewOptions", "textareaProps", "maxHeight", "minHeight", "autoFocus", "tabSize", "defaultTabEnable", "onChange", "onHeightChange", "hideToolbar", "toolbarBottom", "renderTextarea"];
|
|
35
35
|
|
|
36
36
|
function setGroupPopFalse() {
|
|
37
37
|
var data = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
@@ -83,6 +83,8 @@ var InternalMDEditor = function InternalMDEditor(props, ref) {
|
|
|
83
83
|
_onChange = _ref.onChange,
|
|
84
84
|
onHeightChange = _ref.onHeightChange,
|
|
85
85
|
hideToolbar = _ref.hideToolbar,
|
|
86
|
+
_ref$toolbarBottom = _ref.toolbarBottom,
|
|
87
|
+
toolbarBottom = _ref$toolbarBottom === void 0 ? false : _ref$toolbarBottom,
|
|
86
88
|
renderTextarea = _ref.renderTextarea,
|
|
87
89
|
other = (0, _objectWithoutProperties2.default)(_ref, _excluded);
|
|
88
90
|
|
|
@@ -257,10 +259,11 @@ var InternalMDEditor = function InternalMDEditor(props, ref) {
|
|
|
257
259
|
style: (0, _objectSpread2.default)((0, _objectSpread2.default)({}, other.style), {}, {
|
|
258
260
|
height: state.fullscreen ? '100%' : hideToolbar ? Number(state.height) - toolbarHeight : state.height
|
|
259
261
|
}),
|
|
260
|
-
children: [!hideToolbar && /*#__PURE__*/(0, _jsxRuntime.jsx)(_Toolbar.default, {
|
|
262
|
+
children: [!hideToolbar && !toolbarBottom && /*#__PURE__*/(0, _jsxRuntime.jsx)(_Toolbar.default, {
|
|
261
263
|
prefixCls: prefixCls,
|
|
262
264
|
height: toolbarHeight,
|
|
263
|
-
overflow: overflow
|
|
265
|
+
overflow: overflow,
|
|
266
|
+
toolbarBottom: toolbarBottom
|
|
264
267
|
}), /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
|
|
265
268
|
className: "".concat(prefixCls, "-content"),
|
|
266
269
|
style: {
|
|
@@ -293,6 +296,11 @@ var InternalMDEditor = function InternalMDEditor(props, ref) {
|
|
|
293
296
|
height: newHeight
|
|
294
297
|
});
|
|
295
298
|
}
|
|
299
|
+
}), !hideToolbar && toolbarBottom && /*#__PURE__*/(0, _jsxRuntime.jsx)(_Toolbar.default, {
|
|
300
|
+
prefixCls: prefixCls,
|
|
301
|
+
height: toolbarHeight,
|
|
302
|
+
overflow: overflow,
|
|
303
|
+
toolbarBottom: toolbarBottom
|
|
296
304
|
})]
|
|
297
305
|
}))
|
|
298
306
|
});
|
package/lib/Editor.js.map
CHANGED
|
@@ -1,8 +1,5 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": [
|
|
4
|
-
"../src/Editor.tsx"
|
|
5
|
-
],
|
|
6
3
|
"names": [
|
|
7
4
|
"setGroupPopFalse",
|
|
8
5
|
"data",
|
|
@@ -18,8 +15,10 @@
|
|
|
18
15
|
"propsValue",
|
|
19
16
|
"value",
|
|
20
17
|
"commands",
|
|
18
|
+
"getCommands",
|
|
21
19
|
"commandsFilter",
|
|
22
20
|
"extraCommands",
|
|
21
|
+
"getExtraCommands",
|
|
23
22
|
"height",
|
|
24
23
|
"toolbarHeight",
|
|
25
24
|
"enableScroll",
|
|
@@ -39,6 +38,7 @@
|
|
|
39
38
|
"onChange",
|
|
40
39
|
"onHeightChange",
|
|
41
40
|
"hideToolbar",
|
|
41
|
+
"toolbarBottom",
|
|
42
42
|
"renderTextarea",
|
|
43
43
|
"other",
|
|
44
44
|
"cmds",
|
|
@@ -47,6 +47,7 @@
|
|
|
47
47
|
"filter",
|
|
48
48
|
"Boolean",
|
|
49
49
|
"extraCmds",
|
|
50
|
+
"useReducer",
|
|
50
51
|
"reducer",
|
|
51
52
|
"markdown",
|
|
52
53
|
"scrollTop",
|
|
@@ -55,9 +56,13 @@
|
|
|
55
56
|
"state",
|
|
56
57
|
"dispatch",
|
|
57
58
|
"container",
|
|
59
|
+
"useRef",
|
|
58
60
|
"previewRef",
|
|
59
61
|
"enableScrollRef",
|
|
62
|
+
"useImperativeHandle",
|
|
63
|
+
"useMemo",
|
|
60
64
|
"current",
|
|
65
|
+
"useEffect",
|
|
61
66
|
"stateInit",
|
|
62
67
|
"undefined",
|
|
63
68
|
"cls",
|
|
@@ -90,8 +95,11 @@
|
|
|
90
95
|
"Markdown",
|
|
91
96
|
"MarkdownPreview"
|
|
92
97
|
],
|
|
93
|
-
"
|
|
98
|
+
"sources": [
|
|
99
|
+
"../src/Editor.tsx"
|
|
100
|
+
],
|
|
94
101
|
"sourcesContent": [
|
|
95
|
-
"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, event?: React.ChangeEvent<HTMLTextAreaElement>, state?: ContextStore) => void;\n /**\n * editor height change listener\n */\n onHeightChange?: (value?: number, oldValue?: number, state?: ContextStore) => void;\n /**\n * Can be used to make `Markdown Editor` focus itself on initialization. Defaults to on.\n * it will be set to true when either the source `textarea` is focused,\n * or it has an `autofocus` attribute and no other element is focused.\n */\n autoFocus?: ITextAreaProps['autoFocus'];\n /**\n * The height of the editor.\n */\n height?: number;\n /**\n * Custom toolbar heigth\n * @default 29px\n */\n toolbarHeight?: number;\n /**\n * Show drag and drop tool. Set the height of the editor.\n */\n visiableDragbar?: boolean;\n /**\n * Show markdown preview.\n */\n preview?: PreviewType;\n /**\n * Full screen display editor.\n */\n fullscreen?: boolean;\n /**\n * Disable `fullscreen` setting body styles\n */\n overflow?: boolean;\n /**\n * Maximum drag height. `visiableDragbar=true`\n */\n maxHeight?: number;\n /**\n * Minimum drag height. `visiableDragbar=true`\n */\n minHeight?: number;\n /**\n * This is reset [react-markdown](https://github.com/rexxars/react-markdown) settings.\n */\n previewOptions?: Omit<MarkdownPreviewProps, 'source'>;\n /**\n * Set the `textarea` related props.\n */\n textareaProps?: ITextAreaProps;\n /** Use div to replace TextArea or re-render TextArea */\n renderTextarea?: ITextAreaProps['renderTextarea'];\n /**\n * Disable editing area code highlighting. The value is `false`, which increases the editing speed.\n * @default true\n */\n highlightEnable?: boolean;\n /**\n * The number of characters to insert when pressing tab key.\n * Default `2` spaces.\n */\n tabSize?: number;\n /**\n * If `false`, the `tab` key inserts a tab character into the textarea. If `true`, the `tab` key executes default behavior e.g. focus shifts to next element.\n */\n defaultTabEnable?: boolean;\n /**\n * You can create your own commands or reuse existing commands.\n */\n commands?: ICommand[];\n /**\n * Filter or modify your commands.\n * https://github.com/uiwjs/react-md-editor/issues/296\n */\n commandsFilter?: (command: ICommand, isExtra: boolean) => false | ICommand;\n /**\n * You can create your own commands or reuse existing commands.\n */\n extraCommands?: ICommand[];\n /**\n * Hide the tool bar\n */\n hideToolbar?: boolean;\n /** Whether to enable scrolling */\n enableScroll?: boolean;\n}\n\nfunction setGroupPopFalse(data: Record<string, boolean> = {}) {\n Object.keys(data).forEach((keyname) => {\n data[keyname] = false;\n });\n return data;\n}\n\nconst InternalMDEditor = (\n props: MDEditorProps,\n ref?: ((instance: ContextStore) => void) | React.RefObject<ContextStore> | null,\n) => {\n const {\n prefixCls = 'w-md-editor',\n className,\n value: propsValue,\n commands = getCommands(),\n commandsFilter,\n extraCommands = getExtraCommands(),\n height = 200,\n toolbarHeight = 29,\n enableScroll = true,\n visiableDragbar = true,\n highlightEnable = true,\n preview: previewType = 'live',\n fullscreen = false,\n overflow = true,\n previewOptions = {},\n textareaProps,\n maxHeight = 1200,\n minHeight = 100,\n autoFocus,\n tabSize = 2,\n defaultTabEnable = false,\n onChange,\n onHeightChange,\n hideToolbar,\n renderTextarea,\n ...other\n } = props || {};\n const cmds = commands\n .map((item) => (commandsFilter ? commandsFilter(item, false) : item))\n .filter(Boolean) as ICommand[];\n const extraCmds = extraCommands\n .map((item) => (commandsFilter ? commandsFilter(item, true) : item))\n .filter(Boolean) as ICommand[];\n let [state, dispatch] = useReducer(reducer, {\n markdown: propsValue,\n preview: previewType,\n height,\n highlightEnable,\n tabSize,\n defaultTabEnable,\n scrollTop: 0,\n scrollTopPreview: 0,\n commands: cmds,\n extraCommands: extraCmds,\n fullscreen,\n barPopup: {},\n });\n const container = useRef<HTMLDivElement>(null);\n const previewRef = useRef<MarkdownPreviewRef>(null);\n const enableScrollRef = useRef(enableScroll);\n\n useImperativeHandle(ref, () => ({ ...state }));\n useMemo(() => (enableScrollRef.current = enableScroll), [enableScroll]);\n useEffect(() => {\n const stateInit: ContextStore = {};\n if (container.current) {\n stateInit.container = container.current || undefined;\n }\n stateInit.markdown = propsValue || '';\n stateInit.barPopup = {};\n if (dispatch) {\n dispatch({ ...state, ...stateInit });\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const cls = [\n className,\n 'wmde-markdown-var',\n prefixCls,\n state.preview ? `${prefixCls}-show-${state.preview}` : null,\n state.fullscreen ? `${prefixCls}-fullscreen` : null,\n ]\n .filter(Boolean)\n .join(' ')\n .trim();\n\n useMemo(\n () => propsValue !== state.markdown && dispatch({ markdown: propsValue || '' }),\n [propsValue, state.markdown],\n );\n // eslint-disable-next-line react-hooks/exhaustive-deps\n useMemo(() => previewType !== state.preview && dispatch({ preview: previewType }), [previewType]);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n useMemo(() => 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 // eslint-disable-next-line react-hooks/exhaustive-deps\n useMemo(() => height !== state.height && dispatch({ height: height }), [height]);\n useMemo(\n () => height !== state.height && onHeightChange && onHeightChange(state.height, height, state),\n [height, onHeightChange, state],\n );\n\n const textareaDomRef = useRef<HTMLDivElement>();\n const active = useRef<'text' | 'preview'>('preview');\n const initScroll = useRef(false);\n\n useMemo(() => {\n textareaDomRef.current = state.textareaWarp;\n if (state.textareaWarp) {\n state.textareaWarp.addEventListener('mouseover', () => {\n active.current = 'text';\n });\n state.textareaWarp.addEventListener('mouseleave', () => {\n active.current = 'preview';\n });\n }\n }, [state.textareaWarp]);\n\n const handleScroll = (e: React.UIEvent<HTMLDivElement>, type: 'text' | 'preview') => {\n if (!enableScrollRef.current) return;\n const textareaDom = textareaDomRef.current;\n const previewDom = previewRef.current ? previewRef.current.mdp.current : undefined;\n if (!initScroll.current) {\n active.current = type;\n initScroll.current = true;\n }\n if (textareaDom && previewDom) {\n const scale =\n (textareaDom.scrollHeight - textareaDom.offsetHeight) / (previewDom.scrollHeight - previewDom.offsetHeight);\n if (e.target === textareaDom && active.current === 'text') {\n previewDom.scrollTop = textareaDom.scrollTop / scale;\n }\n if (e.target === previewDom && active.current === 'preview') {\n textareaDom.scrollTop = previewDom.scrollTop * scale;\n }\n let scrollTop = 0;\n if (active.current === 'text') {\n scrollTop = textareaDom.scrollTop || 0;\n } else if (active.current === 'preview') {\n scrollTop = previewDom.scrollTop || 0;\n }\n dispatch({ scrollTop });\n }\n };\n\n const mdPreview = useMemo(\n () => (\n <MarkdownPreview\n {...previewOptions}\n onScroll={(e) => handleScroll(e, 'preview')}\n ref={previewRef}\n source={state.markdown || ''}\n className={`${prefixCls}-preview ${previewOptions.className || ''}`}\n />\n ),\n [prefixCls, previewOptions, state.markdown],\n );\n\n return (\n <EditorContext.Provider value={{ ...state, dispatch }}>\n <div\n ref={container}\n className={cls}\n {...other}\n onClick={() => {\n dispatch({ barPopup: { ...setGroupPopFalse(state.barPopup) } });\n }}\n style={{\n ...other.style,\n height: state.fullscreen ? '100%' : hideToolbar ? Number(state.height) - toolbarHeight : state.height,\n }}\n >\n {!hideToolbar && <Toolbar prefixCls={prefixCls} height={toolbarHeight} overflow={overflow} />}\n <div\n className={`${prefixCls}-content`}\n style={{\n height: state.fullscreen ? `calc(100% - ${toolbarHeight}px)` : Number(state.height) - toolbarHeight,\n }}\n >\n {/(edit|live)/.test(state.preview || '') && (\n <TextArea\n className={`${prefixCls}-input`}\n prefixCls={prefixCls}\n autoFocus={autoFocus}\n {...textareaProps}\n onChange={(evn) => {\n onChange && onChange(evn.target.value, evn, state);\n if (textareaProps && textareaProps.onChange) {\n textareaProps.onChange(evn);\n }\n }}\n renderTextarea={renderTextarea}\n onScroll={(e) => handleScroll(e, 'text')}\n />\n )}\n {/(live|preview)/.test(state.preview || '') && mdPreview}\n </div>\n {visiableDragbar && !state.fullscreen && (\n <DragBar\n prefixCls={prefixCls}\n height={state.height as number}\n maxHeight={maxHeight!}\n minHeight={minHeight!}\n onChange={(newHeight) => {\n dispatch({ height: newHeight });\n }}\n />\n )}\n </div>\n </EditorContext.Provider>\n );\n};\n\nconst mdEditor = React.forwardRef<ContextStore, MDEditorProps>(InternalMDEditor);\n\ntype MDEditor = typeof mdEditor & {\n Markdown: typeof MarkdownPreview;\n};\n\n(mdEditor as MDEditor).Markdown = MarkdownPreview;\n\nexport default mdEditor as MDEditor;\n"
|
|
96
|
-
]
|
|
102
|
+
"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, event?: React.ChangeEvent<HTMLTextAreaElement>, state?: ContextStore) => void;\n /**\n * editor height change listener\n */\n onHeightChange?: (value?: number, oldValue?: number, state?: ContextStore) => void;\n /**\n * Can be used to make `Markdown Editor` focus itself on initialization. Defaults to on.\n * it will be set to true when either the source `textarea` is focused,\n * or it has an `autofocus` attribute and no other element is focused.\n */\n autoFocus?: ITextAreaProps['autoFocus'];\n /**\n * The height of the editor.\n */\n height?: number;\n /**\n * Custom toolbar heigth\n * @default 29px\n */\n toolbarHeight?: number;\n /**\n * Show drag and drop tool. Set the height of the editor.\n */\n visiableDragbar?: boolean;\n /**\n * Show markdown preview.\n */\n preview?: PreviewType;\n /**\n * Full screen display editor.\n */\n fullscreen?: boolean;\n /**\n * Disable `fullscreen` setting body styles\n */\n overflow?: boolean;\n /**\n * Maximum drag height. `visiableDragbar=true`\n */\n maxHeight?: number;\n /**\n * Minimum drag height. `visiableDragbar=true`\n */\n minHeight?: number;\n /**\n * This is reset [react-markdown](https://github.com/rexxars/react-markdown) settings.\n */\n previewOptions?: Omit<MarkdownPreviewProps, 'source'>;\n /**\n * Set the `textarea` related props.\n */\n textareaProps?: ITextAreaProps;\n /** Use div to replace TextArea or re-render TextArea */\n renderTextarea?: ITextAreaProps['renderTextarea'];\n /**\n * Disable editing area code highlighting. The value is `false`, which increases the editing speed.\n * @default true\n */\n highlightEnable?: boolean;\n /**\n * The number of characters to insert when pressing tab key.\n * Default `2` spaces.\n */\n tabSize?: number;\n /**\n * If `false`, the `tab` key inserts a tab character into the textarea. If `true`, the `tab` key executes default behavior e.g. focus shifts to next element.\n */\n defaultTabEnable?: boolean;\n /**\n * You can create your own commands or reuse existing commands.\n */\n commands?: ICommand[];\n /**\n * Filter or modify your commands.\n * https://github.com/uiwjs/react-md-editor/issues/296\n */\n commandsFilter?: (command: ICommand, isExtra: boolean) => false | ICommand;\n /**\n * You can create your own commands or reuse existing commands.\n */\n extraCommands?: ICommand[];\n /**\n * Hide the tool bar\n */\n hideToolbar?: boolean;\n /** Whether to enable scrolling */\n enableScroll?: boolean;\n /** Toolbar on bottom */\n toolbarBottom?: boolean;\n}\n\nfunction setGroupPopFalse(data: Record<string, boolean> = {}) {\n Object.keys(data).forEach((keyname) => {\n data[keyname] = false;\n });\n return data;\n}\n\nconst InternalMDEditor = (\n props: MDEditorProps,\n ref?: ((instance: ContextStore) => void) | React.RefObject<ContextStore> | null,\n) => {\n const {\n prefixCls = 'w-md-editor',\n className,\n value: propsValue,\n commands = getCommands(),\n commandsFilter,\n extraCommands = getExtraCommands(),\n height = 200,\n toolbarHeight = 29,\n enableScroll = true,\n visiableDragbar = true,\n highlightEnable = true,\n preview: previewType = 'live',\n fullscreen = false,\n overflow = true,\n previewOptions = {},\n textareaProps,\n maxHeight = 1200,\n minHeight = 100,\n autoFocus,\n tabSize = 2,\n defaultTabEnable = false,\n onChange,\n onHeightChange,\n hideToolbar,\n toolbarBottom = false,\n renderTextarea,\n ...other\n } = props || {};\n const cmds = commands\n .map((item) => (commandsFilter ? commandsFilter(item, false) : item))\n .filter(Boolean) as ICommand[];\n const extraCmds = extraCommands\n .map((item) => (commandsFilter ? commandsFilter(item, true) : item))\n .filter(Boolean) as ICommand[];\n let [state, dispatch] = useReducer(reducer, {\n markdown: propsValue,\n preview: previewType,\n height,\n highlightEnable,\n tabSize,\n defaultTabEnable,\n scrollTop: 0,\n scrollTopPreview: 0,\n commands: cmds,\n extraCommands: extraCmds,\n fullscreen,\n barPopup: {},\n });\n const container = useRef<HTMLDivElement>(null);\n const previewRef = useRef<MarkdownPreviewRef>(null);\n const enableScrollRef = useRef(enableScroll);\n\n useImperativeHandle(ref, () => ({ ...state }));\n useMemo(() => (enableScrollRef.current = enableScroll), [enableScroll]);\n useEffect(() => {\n const stateInit: ContextStore = {};\n if (container.current) {\n stateInit.container = container.current || undefined;\n }\n stateInit.markdown = propsValue || '';\n stateInit.barPopup = {};\n if (dispatch) {\n dispatch({ ...state, ...stateInit });\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const cls = [\n className,\n 'wmde-markdown-var',\n prefixCls,\n state.preview ? `${prefixCls}-show-${state.preview}` : null,\n state.fullscreen ? `${prefixCls}-fullscreen` : null,\n ]\n .filter(Boolean)\n .join(' ')\n .trim();\n\n useMemo(\n () => propsValue !== state.markdown && dispatch({ markdown: propsValue || '' }),\n [propsValue, state.markdown],\n );\n // eslint-disable-next-line react-hooks/exhaustive-deps\n useMemo(() => previewType !== state.preview && dispatch({ preview: previewType }), [previewType]);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n useMemo(() => 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 // eslint-disable-next-line react-hooks/exhaustive-deps\n useMemo(() => height !== state.height && dispatch({ height: height }), [height]);\n useMemo(\n () => height !== state.height && onHeightChange && onHeightChange(state.height, height, state),\n [height, onHeightChange, state],\n );\n\n const textareaDomRef = useRef<HTMLDivElement>();\n const active = useRef<'text' | 'preview'>('preview');\n const initScroll = useRef(false);\n\n useMemo(() => {\n textareaDomRef.current = state.textareaWarp;\n if (state.textareaWarp) {\n state.textareaWarp.addEventListener('mouseover', () => {\n active.current = 'text';\n });\n state.textareaWarp.addEventListener('mouseleave', () => {\n active.current = 'preview';\n });\n }\n }, [state.textareaWarp]);\n\n const handleScroll = (e: React.UIEvent<HTMLDivElement>, type: 'text' | 'preview') => {\n if (!enableScrollRef.current) return;\n const textareaDom = textareaDomRef.current;\n const previewDom = previewRef.current ? previewRef.current.mdp.current : undefined;\n if (!initScroll.current) {\n active.current = type;\n initScroll.current = true;\n }\n if (textareaDom && previewDom) {\n const scale =\n (textareaDom.scrollHeight - textareaDom.offsetHeight) / (previewDom.scrollHeight - previewDom.offsetHeight);\n if (e.target === textareaDom && active.current === 'text') {\n previewDom.scrollTop = textareaDom.scrollTop / scale;\n }\n if (e.target === previewDom && active.current === 'preview') {\n textareaDom.scrollTop = previewDom.scrollTop * scale;\n }\n let scrollTop = 0;\n if (active.current === 'text') {\n scrollTop = textareaDom.scrollTop || 0;\n } else if (active.current === 'preview') {\n scrollTop = previewDom.scrollTop || 0;\n }\n dispatch({ scrollTop });\n }\n };\n\n const mdPreview = useMemo(\n () => (\n <MarkdownPreview\n {...previewOptions}\n onScroll={(e) => handleScroll(e, 'preview')}\n ref={previewRef}\n source={state.markdown || ''}\n className={`${prefixCls}-preview ${previewOptions.className || ''}`}\n />\n ),\n [prefixCls, previewOptions, state.markdown],\n );\n\n return (\n <EditorContext.Provider value={{ ...state, dispatch }}>\n <div\n ref={container}\n className={cls}\n {...other}\n onClick={() => {\n dispatch({ barPopup: { ...setGroupPopFalse(state.barPopup) } });\n }}\n style={{\n ...other.style,\n height: state.fullscreen ? '100%' : hideToolbar ? Number(state.height) - toolbarHeight : state.height,\n }}\n >\n {!hideToolbar && !toolbarBottom && (\n <Toolbar prefixCls={prefixCls} height={toolbarHeight} overflow={overflow} toolbarBottom={toolbarBottom} />\n )}\n <div\n className={`${prefixCls}-content`}\n style={{\n height: state.fullscreen ? `calc(100% - ${toolbarHeight}px)` : Number(state.height) - toolbarHeight,\n }}\n >\n {/(edit|live)/.test(state.preview || '') && (\n <TextArea\n className={`${prefixCls}-input`}\n prefixCls={prefixCls}\n autoFocus={autoFocus}\n {...textareaProps}\n onChange={(evn) => {\n onChange && onChange(evn.target.value, evn, state);\n if (textareaProps && textareaProps.onChange) {\n textareaProps.onChange(evn);\n }\n }}\n renderTextarea={renderTextarea}\n onScroll={(e) => handleScroll(e, 'text')}\n />\n )}\n {/(live|preview)/.test(state.preview || '') && mdPreview}\n </div>\n {visiableDragbar && !state.fullscreen && (\n <DragBar\n prefixCls={prefixCls}\n height={state.height as number}\n maxHeight={maxHeight!}\n minHeight={minHeight!}\n onChange={(newHeight) => {\n dispatch({ height: newHeight });\n }}\n />\n )}\n {!hideToolbar && toolbarBottom && (\n <Toolbar prefixCls={prefixCls} height={toolbarHeight} overflow={overflow} toolbarBottom={toolbarBottom} />\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"
|
|
103
|
+
],
|
|
104
|
+
"mappings": "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"
|
|
97
105
|
}
|
package/lib/commands/bold.js.map
CHANGED
|
@@ -1,8 +1,5 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": [
|
|
4
|
-
"../../src/commands/bold.tsx"
|
|
5
|
-
],
|
|
6
3
|
"names": [
|
|
7
4
|
"bold",
|
|
8
5
|
"name",
|
|
@@ -15,6 +12,7 @@
|
|
|
15
12
|
"state",
|
|
16
13
|
"api",
|
|
17
14
|
"newSelectionRange",
|
|
15
|
+
"selectWord",
|
|
18
16
|
"text",
|
|
19
17
|
"selection",
|
|
20
18
|
"state1",
|
|
@@ -26,8 +24,11 @@
|
|
|
26
24
|
"end",
|
|
27
25
|
"length"
|
|
28
26
|
],
|
|
29
|
-
"
|
|
27
|
+
"sources": [
|
|
28
|
+
"../../src/commands/bold.tsx"
|
|
29
|
+
],
|
|
30
30
|
"sourcesContent": [
|
|
31
31
|
"import * as React from 'react';\nimport { ICommand, TextState, TextAreaTextApi } from './';\nimport { selectWord } from '../utils/markdownUtils';\n\nexport const bold: ICommand = {\n name: 'bold',\n keyCommand: 'bold',\n shortcuts: 'ctrlcmd+b',\n buttonProps: { 'aria-label': 'Add bold text', title: 'Add bold text' },\n icon: (\n <svg role=\"img\" width=\"12\" height=\"12\" viewBox=\"0 0 384 512\">\n <path\n fill=\"currentColor\"\n d=\"M304.793 243.891c33.639-18.537 53.657-54.16 53.657-95.693 0-48.236-26.25-87.626-68.626-104.179C265.138 34.01 240.849 32 209.661 32H24c-8.837 0-16 7.163-16 16v33.049c0 8.837 7.163 16 16 16h33.113v318.53H24c-8.837 0-16 7.163-16 16V464c0 8.837 7.163 16 16 16h195.69c24.203 0 44.834-1.289 66.866-7.584C337.52 457.193 376 410.647 376 350.014c0-52.168-26.573-91.684-71.207-106.123zM142.217 100.809h67.444c16.294 0 27.536 2.019 37.525 6.717 15.828 8.479 24.906 26.502 24.906 49.446 0 35.029-20.32 56.79-53.029 56.79h-76.846V100.809zm112.642 305.475c-10.14 4.056-22.677 4.907-31.409 4.907h-81.233V281.943h84.367c39.645 0 63.057 25.38 63.057 63.057.001 28.425-13.66 52.483-34.782 61.284z\"\n />\n </svg>\n ),\n execute: (state: TextState, api: TextAreaTextApi) => {\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 // Replaces the current selection with the bold mark up\n const state2 = api.replaceSelection(`**${state1.selectedText}**`);\n // Adjust the selection to not contain the **\n api.setSelectionRange({\n start: state2.selection.end - 2 - state1.selectedText.length,\n end: state2.selection.end - 2,\n });\n },\n};\n"
|
|
32
|
-
]
|
|
32
|
+
],
|
|
33
|
+
"mappings": ";;;;;;;;;AAAA;;AAEA;;;;AAEO,IAAMA,IAAc,GAAG;EAC5BC,IAAI,EAAE,MADsB;EAE5BC,UAAU,EAAE,MAFgB;EAG5BC,SAAS,EAAE,WAHiB;EAI5BC,WAAW,EAAE;IAAE,cAAc,eAAhB;IAAiCC,KAAK,EAAE;EAAxC,CAJe;EAK5BC,IAAI,eACF;IAAK,IAAI,EAAC,KAAV;IAAgB,KAAK,EAAC,IAAtB;IAA2B,MAAM,EAAC,IAAlC;IAAuC,OAAO,EAAC,aAA/C;IAAA,uBACE;MACE,IAAI,EAAC,cADP;MAEE,CAAC,EAAC;IAFJ;EADF,EAN0B;EAa5BC,OAAO,EAAE,iBAACC,KAAD,EAAmBC,GAAnB,EAA4C;IACnD;IACA,IAAMC,iBAAiB,GAAG,IAAAC,yBAAA,EAAW;MAAEC,IAAI,EAAEJ,KAAK,CAACI,IAAd;MAAoBC,SAAS,EAAEL,KAAK,CAACK;IAArC,CAAX,CAA1B;IACA,IAAMC,MAAM,GAAGL,GAAG,CAACM,iBAAJ,CAAsBL,iBAAtB,CAAf,CAHmD,CAInD;;IACA,IAAMM,MAAM,GAAGP,GAAG,CAACQ,gBAAJ,aAA0BH,MAAM,CAACI,YAAjC,QAAf,CALmD,CAMnD;;IACAT,GAAG,CAACM,iBAAJ,CAAsB;MACpBI,KAAK,EAAEH,MAAM,CAACH,SAAP,CAAiBO,GAAjB,GAAuB,CAAvB,GAA2BN,MAAM,CAACI,YAAP,CAAoBG,MADlC;MAEpBD,GAAG,EAAEJ,MAAM,CAACH,SAAP,CAAiBO,GAAjB,GAAuB;IAFR,CAAtB;EAID;AAxB2B,CAAvB"
|
|
33
34
|
}
|
package/lib/commands/code.js
CHANGED
|
@@ -18,7 +18,8 @@ var code = {
|
|
|
18
18
|
keyCommand: 'code',
|
|
19
19
|
shortcuts: 'ctrlcmd+j',
|
|
20
20
|
buttonProps: {
|
|
21
|
-
'aria-label': 'Insert code'
|
|
21
|
+
'aria-label': 'Insert code',
|
|
22
|
+
title: 'Insert code'
|
|
22
23
|
},
|
|
23
24
|
icon: /*#__PURE__*/(0, _jsxRuntime.jsx)("svg", {
|
|
24
25
|
width: "12",
|
|
@@ -81,7 +82,8 @@ var codeBlock = {
|
|
|
81
82
|
})
|
|
82
83
|
}),
|
|
83
84
|
buttonProps: {
|
|
84
|
-
'aria-label': 'Insert Code Block'
|
|
85
|
+
'aria-label': 'Insert Code Block',
|
|
86
|
+
title: 'Insert Code Block'
|
|
85
87
|
},
|
|
86
88
|
execute: function execute(tate, api) {
|
|
87
89
|
// Adjust the selection to encompass the whole word if the caret is inside one
|