@uiw/react-md-editor 4.0.6 → 4.0.8

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.
Files changed (69) hide show
  1. package/README.md +83 -2
  2. package/commands.d.ts +14 -7
  3. package/dist/mdeditor.js +61 -17
  4. package/dist/mdeditor.min.js +1 -1
  5. package/esm/Context.d.ts +2 -0
  6. package/esm/Editor.js +5 -1
  7. package/esm/Editor.nohighlight.js +5 -1
  8. package/esm/Types.d.ts +6 -2
  9. package/esm/commands/index.cn.js +4 -4
  10. package/esm/commands/index.d.ts +8 -8
  11. package/esm/commands/index.js +8 -8
  12. package/esm/commands/title.d.ts +7 -1
  13. package/esm/commands/title.js +11 -4
  14. package/esm/commands/title1.d.ts +6 -0
  15. package/esm/commands/title1.js +16 -9
  16. package/esm/commands/title2.d.ts +6 -0
  17. package/esm/commands/title2.js +16 -9
  18. package/esm/commands/title3.d.ts +6 -0
  19. package/esm/commands/title3.js +16 -9
  20. package/esm/commands/title4.d.ts +6 -0
  21. package/esm/commands/title4.js +16 -9
  22. package/esm/commands/title5.d.ts +6 -0
  23. package/esm/commands/title5.js +16 -9
  24. package/esm/commands/title6.d.ts +6 -0
  25. package/esm/commands/title6.js +16 -9
  26. package/esm/components/TextArea/Textarea.js +18 -1
  27. package/esm/index.d.ts +1 -0
  28. package/esm/index.js +1 -0
  29. package/lib/Context.d.ts +2 -0
  30. package/lib/Editor.js +8 -1
  31. package/lib/Editor.nohighlight.js +8 -1
  32. package/lib/Types.d.ts +6 -2
  33. package/lib/commands/index.cn.js +4 -4
  34. package/lib/commands/index.d.ts +8 -8
  35. package/lib/commands/index.js +42 -0
  36. package/lib/commands/title.d.ts +7 -1
  37. package/lib/commands/title.js +12 -4
  38. package/lib/commands/title1.d.ts +6 -0
  39. package/lib/commands/title1.js +16 -9
  40. package/lib/commands/title2.d.ts +6 -0
  41. package/lib/commands/title2.js +16 -9
  42. package/lib/commands/title3.d.ts +6 -0
  43. package/lib/commands/title3.js +16 -9
  44. package/lib/commands/title4.d.ts +6 -0
  45. package/lib/commands/title4.js +16 -9
  46. package/lib/commands/title5.d.ts +6 -0
  47. package/lib/commands/title5.js +16 -9
  48. package/lib/commands/title6.d.ts +6 -0
  49. package/lib/commands/title6.js +16 -9
  50. package/lib/components/TextArea/Textarea.js +18 -1
  51. package/lib/index.d.ts +1 -0
  52. package/lib/index.js +9 -1
  53. package/nohighlight.d.ts +2 -0
  54. package/package.json +1 -1
  55. package/src/Context.tsx +1 -0
  56. package/src/Editor.nohighlight.tsx +2 -0
  57. package/src/Editor.tsx +2 -0
  58. package/src/Types.ts +6 -2
  59. package/src/commands/index.cn.ts +3 -3
  60. package/src/commands/index.ts +14 -7
  61. package/src/commands/title.tsx +11 -4
  62. package/src/commands/title1.tsx +14 -7
  63. package/src/commands/title2.tsx +14 -7
  64. package/src/commands/title3.tsx +14 -7
  65. package/src/commands/title4.tsx +14 -7
  66. package/src/commands/title5.tsx +14 -7
  67. package/src/commands/title6.tsx +14 -7
  68. package/src/components/TextArea/Textarea.tsx +18 -0
  69. package/src/index.tsx +1 -0
package/lib/index.d.ts CHANGED
@@ -2,6 +2,7 @@ import MDEditor from './Editor';
2
2
  import * as commands from './commands/';
3
3
  import * as MarkdownUtil from './utils/markdownUtils';
4
4
  import './index.less';
5
+ export { headingExecute } from './commands/title';
5
6
  export * from './commands/';
6
7
  export * from './commands/group';
7
8
  export * from './utils/markdownUtils';
package/lib/index.js CHANGED
@@ -6,9 +6,16 @@ Object.defineProperty(exports, "__esModule", {
6
6
  });
7
7
  var _exportNames = {
8
8
  commands: true,
9
- MarkdownUtil: true
9
+ MarkdownUtil: true,
10
+ headingExecute: true
10
11
  };
11
12
  exports["default"] = exports.commands = exports.MarkdownUtil = void 0;
13
+ Object.defineProperty(exports, "headingExecute", {
14
+ enumerable: true,
15
+ get: function get() {
16
+ return _title.headingExecute;
17
+ }
18
+ });
12
19
  var _Editor = _interopRequireWildcard(require("./Editor"));
13
20
  Object.keys(_Editor).forEach(function (key) {
14
21
  if (key === "default" || key === "__esModule") return;
@@ -47,6 +54,7 @@ Object.keys(MarkdownUtil).forEach(function (key) {
47
54
  }
48
55
  });
49
56
  });
57
+ var _title = require("./commands/title");
50
58
  var _group = require("./commands/group");
51
59
  Object.keys(_group).forEach(function (key) {
52
60
  if (key === "default" || key === "__esModule") return;
package/nohighlight.d.ts CHANGED
@@ -2,12 +2,14 @@ declare module '@uiw/react-md-editor/nohighlight' {
2
2
  import MDEditor from '@uiw/react-md-editor/esm/Editor.nohighlight';
3
3
  import * as commands from '@uiw/react-md-editor/esm/commands';
4
4
  import * as MarkdownUtil from '@uiw/react-md-editor/esm/utils/markdownUtils';
5
+ export { headingExecute } from '@uiw/react-md-editor/esm/commands/title';
5
6
  export * from '@uiw/react-md-editor/esm/commands';
6
7
  export * from '@uiw/react-md-editor/esm/commands/group';
7
8
  export * from '@uiw/react-md-editor/esm/utils/markdownUtils';
8
9
  export * from '@uiw/react-md-editor/esm/utils/InsertTextAtPosition';
9
10
  export * from '@uiw/react-md-editor/esm/Editor.nohighlight';
10
11
  export * from '@uiw/react-md-editor/esm/Context';
12
+ export * from '@uiw/react-md-editor/esm/Types';
11
13
  export { MarkdownUtil, commands };
12
14
  export default MDEditor;
13
15
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@uiw/react-md-editor",
3
- "version": "4.0.6",
3
+ "version": "4.0.8",
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
  "funding": "https://jaywcjlove.github.io/#/sponsor",
package/src/Context.tsx CHANGED
@@ -14,6 +14,7 @@ export interface ContextStore {
14
14
  fullscreen?: boolean;
15
15
  highlightEnable?: boolean;
16
16
  autoFocus?: boolean;
17
+ autoFocusEnd?: boolean;
17
18
  textarea?: HTMLTextAreaElement;
18
19
  commandOrchestrator?: TextAreaCommandOrchestrator;
19
20
  textareaWarp?: HTMLDivElement;
@@ -38,6 +38,7 @@ const InternalMDEditor = React.forwardRef<RefMDEditor, MDEditorProps>(
38
38
  maxHeight = 1200,
39
39
  minHeight = 100,
40
40
  autoFocus,
41
+ autoFocusEnd = false,
41
42
  tabSize = 2,
42
43
  defaultTabEnable = false,
43
44
  onChange,
@@ -117,6 +118,7 @@ const InternalMDEditor = React.forwardRef<RefMDEditor, MDEditorProps>(
117
118
  );
118
119
  // eslint-disable-next-line react-hooks/exhaustive-deps
119
120
  useMemo(() => autoFocus !== state.autoFocus && dispatch({ autoFocus: autoFocus }), [autoFocus]);
121
+ useMemo(() => autoFocusEnd !== state.autoFocusEnd && dispatch({ autoFocusEnd: autoFocusEnd }), [autoFocusEnd]);
120
122
  useMemo(
121
123
  () => fullscreen !== state.fullscreen && dispatch({ fullscreen: fullscreen }),
122
124
  // eslint-disable-next-line react-hooks/exhaustive-deps
package/src/Editor.tsx CHANGED
@@ -38,6 +38,7 @@ const InternalMDEditor = React.forwardRef<RefMDEditor, MDEditorProps>(
38
38
  maxHeight = 1200,
39
39
  minHeight = 100,
40
40
  autoFocus,
41
+ autoFocusEnd = false,
41
42
  tabSize = 2,
42
43
  defaultTabEnable = false,
43
44
  onChange,
@@ -117,6 +118,7 @@ const InternalMDEditor = React.forwardRef<RefMDEditor, MDEditorProps>(
117
118
  );
118
119
  // eslint-disable-next-line react-hooks/exhaustive-deps
119
120
  useMemo(() => autoFocus !== state.autoFocus && dispatch({ autoFocus: autoFocus }), [autoFocus]);
121
+ useMemo(() => autoFocusEnd !== state.autoFocusEnd && dispatch({ autoFocusEnd: autoFocusEnd }), [autoFocusEnd]);
120
122
  useMemo(
121
123
  () => fullscreen !== state.fullscreen && dispatch({ fullscreen: fullscreen }),
122
124
  // eslint-disable-next-line react-hooks/exhaustive-deps
package/src/Types.ts CHANGED
@@ -37,6 +37,10 @@ export interface MDEditorProps extends Omit<React.HTMLAttributes<HTMLDivElement>
37
37
  * or it has an `autofocus` attribute and no other element is focused.
38
38
  */
39
39
  autoFocus?: ITextAreaProps['autoFocus'];
40
+ /**
41
+ * Can be used to make `Markdown Editor` focus on the end of text on initialization.
42
+ */
43
+ autoFocusEnd?: boolean;
40
44
  /**
41
45
  * The height of the editor.
42
46
  * ⚠️ `Dragbar` is invalid when **`height`** parameter percentage.
@@ -55,7 +59,7 @@ export interface MDEditorProps extends Omit<React.HTMLAttributes<HTMLDivElement>
55
59
  */
56
60
  visibleDragbar?: boolean;
57
61
  /**
58
- * @deprecated use `visibleDragbar`
62
+ * @deprecated use {@link MDEditorProps.visibleDragbar}
59
63
  */
60
64
  visiableDragbar?: boolean;
61
65
  /**
@@ -88,7 +92,7 @@ export interface MDEditorProps extends Omit<React.HTMLAttributes<HTMLDivElement>
88
92
  textareaProps?: ITextAreaProps;
89
93
  /**
90
94
  * Use div to replace TextArea or re-render TextArea
91
- * @deprecated Please use ~~`renderTextarea`~~ -> `components`
95
+ * @deprecated Please use {@link components}
92
96
  */
93
97
  renderTextarea?: ITextAreaProps['renderTextarea'];
94
98
  /**
@@ -46,7 +46,7 @@ let fullscreen: ICommand = {
46
46
  ...fullscreenInit,
47
47
  buttonProps: { 'aria-label': '切换全屏(ctrl + 0)', title: '切换全屏(ctrl + 0)' },
48
48
  };
49
- let hr: ICommand = { ...hrInit, buttonProps: { 'aria-label': '插入HR (ctrl + h)', title: '插入HR (ctrl + h)' } };
49
+ let hr: ICommand = { ...hrInit, buttonProps: { 'aria-label': '插入分割线 (ctrl + h)', title: '插入分割线 (ctrl + h)' } };
50
50
  let image: ICommand = {
51
51
  ...imageInit,
52
52
  buttonProps: { 'aria-label': '添加图像(ctrl + k)', title: '添加图像(ctrl + k)' },
@@ -91,8 +91,8 @@ let quote: ICommand = {
91
91
  let strikethrough: ICommand = {
92
92
  ...strikethroughInit,
93
93
  buttonProps: {
94
- 'aria-label': 'Add strikethrough text (ctrl + shift + x)',
95
- title: 'Add strikethrough text (ctrl + shift + x)',
94
+ 'aria-label': '添加删除线文本 (ctrl + shift + x)',
95
+ title: '添加删除线文本 (ctrl + shift + x)',
96
96
  },
97
97
  };
98
98
  let issue: ICommand = { ...issueInit, buttonProps: { 'aria-label': '添加 issue', title: '添加 issue' } };
@@ -15,13 +15,13 @@ import { checkedListCommand, orderedListCommand, unorderedListCommand } from './
15
15
  import { codeEdit, codeLive, codePreview } from './preview';
16
16
  import { quote } from './quote';
17
17
  import { strikethrough } from './strikeThrough';
18
- import { title } from './title';
19
- import { title1 } from './title1';
20
- import { title2 } from './title2';
21
- import { title3 } from './title3';
22
- import { title4 } from './title4';
23
- import { title5 } from './title5';
24
- import { title6 } from './title6';
18
+ import { title, heading } from './title';
19
+ import { title1, heading1 } from './title1';
20
+ import { title2, heading2 } from './title2';
21
+ import { title3, heading3 } from './title3';
22
+ import { title4, heading4 } from './title4';
23
+ import { title5, heading5 } from './title5';
24
+ import { title6, heading6 } from './title6';
25
25
  import { table } from './table';
26
26
  import { issue } from './issue';
27
27
  import { help } from './help';
@@ -188,6 +188,13 @@ export {
188
188
  title4,
189
189
  title5,
190
190
  title6,
191
+ heading,
192
+ heading1,
193
+ heading2,
194
+ heading3,
195
+ heading4,
196
+ heading5,
197
+ heading6,
191
198
  bold,
192
199
  codeBlock,
193
200
  comment,
@@ -1,9 +1,9 @@
1
1
  import React from 'react';
2
2
  import { ICommand, ExecuteState, TextAreaTextApi } from './';
3
- import { title1 } from './title1';
3
+ import { heading1 } from './title1';
4
4
  import { selectLine, executeCommand } from '../utils/markdownUtils';
5
5
 
6
- export function titleExecute({
6
+ export function headingExecute({
7
7
  state,
8
8
  api,
9
9
  prefix,
@@ -19,8 +19,8 @@ export function titleExecute({
19
19
  executeCommand({ api, selectedText: state1.selectedText, selection: state.selection, prefix, suffix });
20
20
  }
21
21
 
22
- export const title: ICommand = {
23
- ...title1,
22
+ export const heading: ICommand = {
23
+ ...heading1,
24
24
  icon: (
25
25
  <svg width="12" height="12" viewBox="0 0 520 520">
26
26
  <path
@@ -30,3 +30,10 @@ export const title: ICommand = {
30
30
  </svg>
31
31
  ),
32
32
  };
33
+
34
+ /**
35
+ * @deprecated Use `heading` instead.
36
+ * This command is now deprecated and will be removed in future versions.
37
+ * Use `title` for inserting headings.
38
+ */
39
+ export const title: ICommand = heading;
@@ -1,16 +1,23 @@
1
1
  import React from 'react';
2
- import { titleExecute } from '../commands/title';
2
+ import { headingExecute } from '../commands/title';
3
3
  import { ICommand, ExecuteState, TextAreaTextApi } from './';
4
4
 
5
- export const title1: ICommand = {
6
- name: 'title1',
7
- keyCommand: 'title1',
5
+ export const heading1: ICommand = {
6
+ name: 'heading1',
7
+ keyCommand: 'heading1',
8
8
  shortcuts: 'ctrlcmd+1',
9
9
  prefix: '# ',
10
10
  suffix: '',
11
- buttonProps: { 'aria-label': 'Insert title1 (ctrl + 1)', title: 'Insert title1 (ctrl + 1)' },
12
- icon: <div style={{ fontSize: 18, textAlign: 'left' }}>Title 1</div>,
11
+ buttonProps: { 'aria-label': 'Insert Heading 1 (ctrl + 1)', title: 'Insert Heading 1 (ctrl + 1)' },
12
+ icon: <div style={{ fontSize: 18, textAlign: 'left' }}>Heading 1</div>,
13
13
  execute: (state: ExecuteState, api: TextAreaTextApi) => {
14
- titleExecute({ state, api, prefix: state.command.prefix!, suffix: state.command.suffix });
14
+ headingExecute({ state, api, prefix: state.command.prefix!, suffix: state.command.suffix });
15
15
  },
16
16
  };
17
+
18
+ /**
19
+ * @deprecated Use `heading1` instead.
20
+ * This command is now deprecated and will be removed in future versions.
21
+ * Use `title1` for inserting Heading 1.
22
+ */
23
+ export const title1: ICommand = heading1;
@@ -1,16 +1,23 @@
1
1
  import React from 'react';
2
- import { titleExecute } from '../commands/title';
2
+ import { headingExecute } from '../commands/title';
3
3
  import { ICommand, ExecuteState, TextAreaTextApi } from './';
4
4
 
5
- export const title2: ICommand = {
6
- name: 'title2',
7
- keyCommand: 'title2',
5
+ export const heading2: ICommand = {
6
+ name: 'heading2',
7
+ keyCommand: 'heading2',
8
8
  shortcuts: 'ctrlcmd+2',
9
9
  prefix: '## ',
10
10
  suffix: '',
11
- buttonProps: { 'aria-label': 'Insert title2 (ctrl + 2)', title: 'Insert title2 (ctrl + 2)' },
12
- icon: <div style={{ fontSize: 16, textAlign: 'left' }}>Title 2</div>,
11
+ buttonProps: { 'aria-label': 'Insert Heading 2 (ctrl + 2)', title: 'Insert Heading 2 (ctrl + 2)' },
12
+ icon: <div style={{ fontSize: 16, textAlign: 'left' }}>Heading 2</div>,
13
13
  execute: (state: ExecuteState, api: TextAreaTextApi) => {
14
- titleExecute({ state, api, prefix: state.command.prefix!, suffix: state.command.suffix });
14
+ headingExecute({ state, api, prefix: state.command.prefix!, suffix: state.command.suffix });
15
15
  },
16
16
  };
17
+
18
+ /**
19
+ * @deprecated Use `heading2` instead.
20
+ * This command is now deprecated and will be removed in future versions.
21
+ * Use `title2` for inserting Heading 2.
22
+ */
23
+ export const title2: ICommand = heading2;
@@ -1,16 +1,23 @@
1
1
  import React from 'react';
2
- import { titleExecute } from '../commands/title';
2
+ import { headingExecute } from '../commands/title';
3
3
  import { ICommand, ExecuteState, TextAreaTextApi } from './';
4
4
 
5
- export const title3: ICommand = {
6
- name: 'title3',
7
- keyCommand: 'title3',
5
+ export const heading3: ICommand = {
6
+ name: 'heading3',
7
+ keyCommand: 'heading3',
8
8
  shortcuts: 'ctrlcmd+3',
9
9
  prefix: '### ',
10
10
  suffix: '',
11
- buttonProps: { 'aria-label': 'Insert title3 (ctrl + 3)', title: 'Insert title3 (ctrl + 3)' },
12
- icon: <div style={{ fontSize: 15, textAlign: 'left' }}>Title 3</div>,
11
+ buttonProps: { 'aria-label': 'Insert Heading 3 (ctrl + 3)', title: 'Insert Heading 3 (ctrl + 3)' },
12
+ icon: <div style={{ fontSize: 15, textAlign: 'left' }}>Heading 3</div>,
13
13
  execute: (state: ExecuteState, api: TextAreaTextApi) => {
14
- titleExecute({ state, api, prefix: state.command.prefix!, suffix: state.command.suffix });
14
+ headingExecute({ state, api, prefix: state.command.prefix!, suffix: state.command.suffix });
15
15
  },
16
16
  };
17
+
18
+ /**
19
+ * @deprecated Use `heading3` instead.
20
+ * This command is now deprecated and will be removed in future versions.
21
+ * Use `title3` for inserting Heading 3.
22
+ */
23
+ export const title3: ICommand = heading3;
@@ -1,16 +1,23 @@
1
1
  import React from 'react';
2
- import { titleExecute } from '../commands/title';
2
+ import { headingExecute } from '../commands/title';
3
3
  import { ICommand, ExecuteState, TextAreaTextApi } from './';
4
4
 
5
- export const title4: ICommand = {
6
- name: 'title4',
7
- keyCommand: 'title4',
5
+ export const heading4: ICommand = {
6
+ name: 'heading4',
7
+ keyCommand: 'heading4',
8
8
  shortcuts: 'ctrlcmd+4',
9
9
  prefix: '#### ',
10
10
  suffix: '',
11
- buttonProps: { 'aria-label': 'Insert title4 (ctrl + 4)', title: 'Insert title4 (ctrl + 4)' },
12
- icon: <div style={{ fontSize: 14, textAlign: 'left' }}>Title 4</div>,
11
+ buttonProps: { 'aria-label': 'Insert Heading 4 (ctrl + 4)', title: 'Insert Heading 4 (ctrl + 4)' },
12
+ icon: <div style={{ fontSize: 14, textAlign: 'left' }}>Heading 4</div>,
13
13
  execute: (state: ExecuteState, api: TextAreaTextApi) => {
14
- titleExecute({ state, api, prefix: state.command.prefix!, suffix: state.command.suffix });
14
+ headingExecute({ state, api, prefix: state.command.prefix!, suffix: state.command.suffix });
15
15
  },
16
16
  };
17
+
18
+ /**
19
+ * @deprecated Use `heading4` instead.
20
+ * This command is now deprecated and will be removed in future versions.
21
+ * Use `title4` for inserting Heading 4.
22
+ */
23
+ export const title4: ICommand = heading4;
@@ -1,16 +1,23 @@
1
1
  import React from 'react';
2
- import { titleExecute } from '../commands/title';
2
+ import { headingExecute } from '../commands/title';
3
3
  import { ICommand, ExecuteState, TextAreaTextApi } from './';
4
4
 
5
- export const title5: ICommand = {
6
- name: 'title5',
7
- keyCommand: 'title5',
5
+ export const heading5: ICommand = {
6
+ name: 'heading5',
7
+ keyCommand: 'heading5',
8
8
  shortcuts: 'ctrlcmd+5',
9
9
  prefix: '##### ',
10
10
  suffix: '',
11
- buttonProps: { 'aria-label': 'Insert title5 (ctrl + 5)', title: 'Insert title5 (ctrl + 5)' },
12
- icon: <div style={{ fontSize: 12, textAlign: 'left' }}>Title 5</div>,
11
+ buttonProps: { 'aria-label': 'Insert Heading 5 (ctrl + 5)', title: 'Insert Heading 5 (ctrl + 5)' },
12
+ icon: <div style={{ fontSize: 12, textAlign: 'left' }}>Heading 5</div>,
13
13
  execute: (state: ExecuteState, api: TextAreaTextApi) => {
14
- titleExecute({ state, api, prefix: state.command.prefix!, suffix: state.command.suffix });
14
+ headingExecute({ state, api, prefix: state.command.prefix!, suffix: state.command.suffix });
15
15
  },
16
16
  };
17
+
18
+ /**
19
+ * @deprecated Use `heading5` instead.
20
+ * This command is now deprecated and will be removed in future versions.
21
+ * Use `title5` for inserting Heading 5.
22
+ */
23
+ export const title5: ICommand = heading5;
@@ -1,16 +1,23 @@
1
1
  import React from 'react';
2
- import { titleExecute } from '../commands/title';
2
+ import { headingExecute } from '../commands/title';
3
3
  import { ICommand, ExecuteState, TextAreaTextApi } from './';
4
4
 
5
- export const title6: ICommand = {
6
- name: 'title6',
7
- keyCommand: 'title6',
5
+ export const heading6: ICommand = {
6
+ name: 'heading6',
7
+ keyCommand: 'heading6',
8
8
  shortcuts: 'ctrlcmd+6',
9
9
  prefix: '###### ',
10
10
  suffix: '',
11
- buttonProps: { 'aria-label': 'Insert title6 (ctrl + 6)', title: 'Insert title6 (ctrl + 6)' },
12
- icon: <div style={{ fontSize: 12, textAlign: 'left' }}>Title 6</div>,
11
+ buttonProps: { 'aria-label': 'Insert Heading 6 (ctrl + 6)', title: 'Insert Heading 6 (ctrl + 6)' },
12
+ icon: <div style={{ fontSize: 12, textAlign: 'left' }}>Heading 6</div>,
13
13
  execute: (state: ExecuteState, api: TextAreaTextApi) => {
14
- titleExecute({ state, api, prefix: state.command.prefix!, suffix: state.command.suffix });
14
+ headingExecute({ state, api, prefix: state.command.prefix!, suffix: state.command.suffix });
15
15
  },
16
16
  };
17
+
18
+ /**
19
+ * @deprecated Use `heading6` instead.
20
+ * This command is now deprecated and will be removed in future versions.
21
+ * Use `title6` for inserting Heading 6.
22
+ */
23
+ export const title6: ICommand = heading6;
@@ -19,6 +19,8 @@ export default function Textarea(props: TextAreaProps) {
19
19
  extraCommands,
20
20
  tabSize,
21
21
  defaultTabEnable,
22
+ autoFocusEnd,
23
+ textareaWarp,
22
24
  dispatch,
23
25
  ...otherStore
24
26
  } = useContext(EditorContext);
@@ -39,6 +41,22 @@ export default function Textarea(props: TextAreaProps) {
39
41
  // eslint-disable-next-line react-hooks/exhaustive-deps
40
42
  }, []);
41
43
 
44
+ useEffect(() => {
45
+ if (autoFocusEnd && textRef.current && textareaWarp) {
46
+ textRef.current.focus();
47
+ const length = textRef.current.value.length;
48
+ textRef.current.setSelectionRange(length, length);
49
+ setTimeout(() => {
50
+ if (textareaWarp) {
51
+ textareaWarp.scrollTop = textareaWarp.scrollHeight;
52
+ }
53
+ if (textRef.current) {
54
+ textRef.current.scrollTop = textRef.current.scrollHeight;
55
+ }
56
+ }, 0);
57
+ }
58
+ }, [textareaWarp]);
59
+
42
60
  const onKeyDown = (e: KeyboardEvent | React.KeyboardEvent<HTMLTextAreaElement>) => {
43
61
  handleKeyDown(e, tabSize, defaultTabEnable);
44
62
  shortcuts(e, [...(commands || []), ...(extraCommands || [])], executeRef.current, dispatch, statesRef.current);
package/src/index.tsx CHANGED
@@ -3,6 +3,7 @@ import * as commands from './commands/';
3
3
  import * as MarkdownUtil from './utils/markdownUtils';
4
4
  import './index.less';
5
5
 
6
+ export { headingExecute } from './commands/title';
6
7
  export * from './commands/';
7
8
  export * from './commands/group';
8
9
  export * from './utils/markdownUtils';