@milkdown/preset-gfm 7.3.6 → 7.5.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.
Files changed (69) hide show
  1. package/lib/__internal__/index.d.ts.map +1 -1
  2. package/lib/__internal__/with-meta.d.ts.map +1 -1
  3. package/lib/composed/commands.d.ts +5 -1
  4. package/lib/composed/commands.d.ts.map +1 -1
  5. package/lib/composed/index.d.ts.map +1 -1
  6. package/lib/composed/inputrules.d.ts.map +1 -1
  7. package/lib/composed/keymap.d.ts.map +1 -1
  8. package/lib/composed/plugins.d.ts.map +1 -1
  9. package/lib/composed/schema.d.ts.map +1 -1
  10. package/lib/index.d.ts.map +1 -1
  11. package/lib/index.es.js +545 -482
  12. package/lib/index.es.js.map +1 -1
  13. package/lib/mark/index.d.ts.map +1 -1
  14. package/lib/mark/strike-through.d.ts.map +1 -1
  15. package/lib/node/footnote/definition.d.ts.map +1 -1
  16. package/lib/node/footnote/index.d.ts.map +1 -1
  17. package/lib/node/footnote/reference.d.ts.map +1 -1
  18. package/lib/node/index.d.ts.map +1 -1
  19. package/lib/node/table/command.d.ts +33 -0
  20. package/lib/node/table/command.d.ts.map +1 -0
  21. package/lib/node/table/index.d.ts +3 -30
  22. package/lib/node/table/index.d.ts.map +1 -1
  23. package/lib/node/table/input.d.ts +3 -0
  24. package/lib/node/table/input.d.ts.map +1 -0
  25. package/lib/node/table/schema.d.ts +6 -0
  26. package/lib/node/table/schema.d.ts.map +1 -0
  27. package/lib/node/table/utils.d.ts +21 -7
  28. package/lib/node/table/utils.d.ts.map +1 -1
  29. package/lib/node/task-list-item.d.ts.map +1 -1
  30. package/lib/plugin/auto-insert-span-plugin.d.ts +2 -0
  31. package/lib/plugin/auto-insert-span-plugin.d.ts.map +1 -0
  32. package/lib/plugin/column-resizing-plugin.d.ts.map +1 -1
  33. package/lib/plugin/index.d.ts +2 -1
  34. package/lib/plugin/index.d.ts.map +1 -1
  35. package/lib/plugin/keep-table-align-plugin.d.ts +2 -0
  36. package/lib/plugin/keep-table-align-plugin.d.ts.map +1 -0
  37. package/lib/plugin/remark-gfm-plugin.d.ts.map +1 -1
  38. package/lib/plugin/table-editing-plugin.d.ts.map +1 -1
  39. package/package.json +12 -17
  40. package/src/__internal__/index.ts +0 -2
  41. package/src/__internal__/with-meta.ts +0 -1
  42. package/src/composed/commands.ts +2 -3
  43. package/src/composed/index.ts +0 -1
  44. package/src/composed/inputrules.ts +0 -1
  45. package/src/composed/keymap.ts +0 -1
  46. package/src/composed/plugins.ts +5 -6
  47. package/src/composed/schema.ts +11 -2
  48. package/src/index.ts +1 -3
  49. package/src/mark/index.ts +0 -1
  50. package/src/mark/strike-through.ts +0 -1
  51. package/src/node/footnote/definition.ts +0 -2
  52. package/src/node/footnote/index.ts +0 -1
  53. package/src/node/footnote/reference.ts +0 -2
  54. package/src/node/index.ts +0 -1
  55. package/src/node/table/command.ts +228 -0
  56. package/src/node/table/index.ts +3 -451
  57. package/src/node/table/input.ts +73 -0
  58. package/src/node/table/schema.ts +216 -0
  59. package/src/node/table/utils.ts +49 -20
  60. package/src/node/task-list-item.ts +1 -2
  61. package/src/plugin/auto-insert-span-plugin.ts +12 -0
  62. package/src/plugin/column-resizing-plugin.ts +0 -1
  63. package/src/plugin/index.ts +2 -2
  64. package/src/plugin/keep-table-align-plugin.ts +60 -0
  65. package/src/plugin/remark-gfm-plugin.ts +0 -1
  66. package/src/plugin/table-editing-plugin.ts +1 -2
  67. package/lib/plugin/auto-insert-zero-space-plugin.d.ts +0 -2
  68. package/lib/plugin/auto-insert-zero-space-plugin.d.ts.map +0 -1
  69. package/src/plugin/auto-insert-zero-space-plugin.ts +0 -56
@@ -1 +1 @@
1
- {"version":3,"file":"task-list-item.d.ts","sourceRoot":"","sources":["../../src/node/task-list-item.ts"],"names":[],"mappings":"AAQA,eAAO,MAAM,2BAA2B,wCAkFtC,CAAA;AASF,eAAO,MAAM,uBAAuB,sCAuBlC,CAAA"}
1
+ {"version":3,"file":"task-list-item.d.ts","sourceRoot":"","sources":["../../src/node/task-list-item.ts"],"names":[],"mappings":"AAOA,eAAO,MAAM,2BAA2B,wCAkFtC,CAAA;AASF,eAAO,MAAM,uBAAuB,sCAuBlC,CAAA"}
@@ -0,0 +1,2 @@
1
+ export declare const autoInsertSpanPlugin: import("@milkdown/utils").$Prose;
2
+ //# sourceMappingURL=auto-insert-span-plugin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auto-insert-span-plugin.d.ts","sourceRoot":"","sources":["../../src/plugin/auto-insert-span-plugin.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,oBAAoB,kCAAwB,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"column-resizing-plugin.d.ts","sourceRoot":"","sources":["../../src/plugin/column-resizing-plugin.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,oBAAoB,kCAAmC,CAAA"}
1
+ {"version":3,"file":"column-resizing-plugin.d.ts","sourceRoot":"","sources":["../../src/plugin/column-resizing-plugin.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,oBAAoB,kCAAmC,CAAA"}
@@ -1,5 +1,6 @@
1
- export * from './auto-insert-zero-space-plugin';
1
+ export * from './auto-insert-span-plugin';
2
2
  export * from './column-resizing-plugin';
3
3
  export * from './table-editing-plugin';
4
4
  export * from './remark-gfm-plugin';
5
+ export * from './keep-table-align-plugin';
5
6
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/plugin/index.ts"],"names":[],"mappings":"AACA,cAAc,iCAAiC,CAAA;AAC/C,cAAc,0BAA0B,CAAA;AACxC,cAAc,wBAAwB,CAAA;AACtC,cAAc,qBAAqB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/plugin/index.ts"],"names":[],"mappings":"AAAA,cAAc,2BAA2B,CAAA;AACzC,cAAc,0BAA0B,CAAA;AACxC,cAAc,wBAAwB,CAAA;AACtC,cAAc,qBAAqB,CAAA;AACnC,cAAc,2BAA2B,CAAA"}
@@ -0,0 +1,2 @@
1
+ export declare const keepTableAlignPlugin: import("@milkdown/utils").$Prose;
2
+ //# sourceMappingURL=keep-table-align-plugin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keep-table-align-plugin.d.ts","sourceRoot":"","sources":["../../src/plugin/keep-table-align-plugin.ts"],"names":[],"mappings":"AAiBA,eAAO,MAAM,oBAAoB,kCAqC/B,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"remark-gfm-plugin.d.ts","sourceRoot":"","sources":["../../src/plugin/remark-gfm-plugin.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAA;AAE9C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAA;AAKzC,eAAO,MAAM,eAAe,EAAE,OAAO,CAAC,WAAW,EAAE,OAAO,GAAG,IAAI,GAAG,SAAS,CAAyC,CAAA"}
1
+ {"version":3,"file":"remark-gfm-plugin.d.ts","sourceRoot":"","sources":["../../src/plugin/remark-gfm-plugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAA;AAE9C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAA;AAKzC,eAAO,MAAM,eAAe,EAAE,OAAO,CAAC,WAAW,EAAE,OAAO,GAAG,IAAI,GAAG,SAAS,CAAyC,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"table-editing-plugin.d.ts","sourceRoot":"","sources":["../../src/plugin/table-editing-plugin.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,kBAAkB,kCAA+B,CAAA"}
1
+ {"version":3,"file":"table-editing-plugin.d.ts","sourceRoot":"","sources":["../../src/plugin/table-editing-plugin.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,kBAAkB,kCAAgE,CAAA"}
package/package.json CHANGED
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "@milkdown/preset-gfm",
3
3
  "type": "module",
4
- "version": "7.3.6",
4
+ "version": "7.5.0",
5
5
  "license": "MIT",
6
6
  "repository": {
7
7
  "type": "git",
8
8
  "url": "git+https://github.com/Milkdown/milkdown.git",
9
- "directory": "packages/preset-gfm"
9
+ "directory": "packages/plugins/preset-gfm"
10
10
  },
11
11
  "keywords": [
12
12
  "milkdown",
@@ -34,17 +34,18 @@
34
34
  "@milkdown/transformer": "^7.2.0"
35
35
  },
36
36
  "dependencies": {
37
+ "prosemirror-safari-ime-span": "^1.0.1",
37
38
  "remark-gfm": "^4.0.0",
38
39
  "tslib": "^2.5.0",
39
- "@milkdown/exception": "7.3.6",
40
- "@milkdown/utils": "7.3.6"
40
+ "@milkdown/exception": "7.5.0",
41
+ "@milkdown/utils": "7.5.0"
41
42
  },
42
43
  "devDependencies": {
43
- "@milkdown/core": "7.3.6",
44
- "@milkdown/ctx": "7.3.6",
45
- "@milkdown/preset-commonmark": "7.3.6",
46
- "@milkdown/prose": "7.3.6",
47
- "@milkdown/transformer": "7.3.6"
44
+ "@milkdown/core": "7.5.0",
45
+ "@milkdown/ctx": "7.5.0",
46
+ "@milkdown/preset-commonmark": "7.5.0",
47
+ "@milkdown/prose": "7.5.0",
48
+ "@milkdown/transformer": "7.5.0"
48
49
  },
49
50
  "nx": {
50
51
  "targets": {
@@ -53,19 +54,13 @@
53
54
  "{projectRoot}/lib"
54
55
  ],
55
56
  "dependsOn": [
56
- {
57
- "target": "build",
58
- "projects": "dependencies"
59
- }
57
+ "build"
60
58
  ]
61
59
  },
62
60
  "tsc": {
63
61
  "outputs": [],
64
62
  "dependsOn": [
65
- {
66
- "target": "build",
67
- "projects": "dependencies"
68
- }
63
+ "build"
69
64
  ]
70
65
  }
71
66
  }
@@ -1,3 +1 @@
1
- /* Copyright 2021, Milkdown by Mirone. */
2
1
  export * from './with-meta'
3
- /* Copyright 2021, Milkdown by Mirone. */
@@ -1,4 +1,3 @@
1
- /* Copyright 2021, Milkdown by Mirone. */
2
1
  import type { Meta, MilkdownPlugin } from '@milkdown/ctx'
3
2
 
4
3
  export function withMeta<T extends MilkdownPlugin>(plugin: T, meta: Partial<Meta> & Pick<Meta, 'displayName'>): T {
@@ -1,12 +1,11 @@
1
- /* Copyright 2021, Milkdown by Mirone. */
2
1
  import { toggleStrikethroughCommand } from '../mark'
3
- import { addColAfterCommand, addColBeforeCommand, addRowAfterCommand, addRowBeforeCommand, breakTableCommand, deleteSelectedCellsCommand, goToNextTableCellCommand, goToPrevTableCellCommand, insertTableCommand, moveColCommand, moveRowCommand, selectColCommand, selectRowCommand, selectTableCommand, setAlignCommand } from '../node'
2
+ import { addColAfterCommand, addColBeforeCommand, addRowAfterCommand, addRowBeforeCommand, deleteSelectedCellsCommand, exitTable, goToNextTableCellCommand, goToPrevTableCellCommand, insertTableCommand, moveColCommand, moveRowCommand, selectColCommand, selectRowCommand, selectTableCommand, setAlignCommand } from '../node'
4
3
 
5
4
  /// @internal
6
5
  export const commands = [
7
6
  goToNextTableCellCommand,
8
7
  goToPrevTableCellCommand,
9
- breakTableCommand,
8
+ exitTable,
10
9
  insertTableCommand,
11
10
  moveRowCommand,
12
11
  moveColCommand,
@@ -1,4 +1,3 @@
1
- /* Copyright 2021, Milkdown by Mirone. */
2
1
  export * from './keymap'
3
2
  export * from './inputrules'
4
3
  export * from './plugins'
@@ -1,4 +1,3 @@
1
- /* Copyright 2021, Milkdown by Mirone. */
2
1
  import type { MilkdownPlugin } from '@milkdown/ctx'
3
2
  import { insertTableInputRule, wrapInTaskListInputRule } from '../node'
4
3
  import { strikethroughInputRule } from '../mark'
@@ -1,4 +1,3 @@
1
- /* Copyright 2021, Milkdown by Mirone. */
2
1
  import type { MilkdownPlugin } from '@milkdown/ctx'
3
2
  import { strikethroughKeymap } from '../mark'
4
3
  import { tableKeymap } from '../node'
@@ -1,16 +1,15 @@
1
- /* Copyright 2021, Milkdown by Mirone. */
2
1
  import type { MilkdownPlugin } from '@milkdown/ctx'
3
2
  import {
4
- autoInsertZeroSpaceInTablePlugin,
5
- columnResizingPlugin,
3
+ autoInsertSpanPlugin,
4
+ keepTableAlignPlugin,
6
5
  remarkGFMPlugin,
7
6
  tableEditingPlugin,
8
7
  } from '../plugin'
9
8
 
10
9
  /// @internal
11
10
  export const plugins: MilkdownPlugin[] = [
12
- autoInsertZeroSpaceInTablePlugin,
13
- columnResizingPlugin,
14
- tableEditingPlugin,
11
+ keepTableAlignPlugin,
12
+ autoInsertSpanPlugin,
15
13
  remarkGFMPlugin,
14
+ tableEditingPlugin,
16
15
  ].flat()
@@ -1,13 +1,22 @@
1
- /* Copyright 2021, Milkdown by Mirone. */
2
1
  import type { MilkdownPlugin } from '@milkdown/ctx'
3
2
  import { strikethroughAttr, strikethroughSchema } from '../mark'
4
- import { extendListItemSchemaForTask, footnoteDefinitionSchema, footnoteReferenceSchema, tableCellSchema, tableHeaderSchema, tableRowSchema, tableSchema } from '../node'
3
+ import {
4
+ extendListItemSchemaForTask,
5
+ footnoteDefinitionSchema,
6
+ footnoteReferenceSchema,
7
+ tableCellSchema,
8
+ tableHeaderRowSchema,
9
+ tableHeaderSchema,
10
+ tableRowSchema,
11
+ tableSchema,
12
+ } from '../node'
5
13
 
6
14
  /// @internal
7
15
  export const schema: MilkdownPlugin[] = [
8
16
  extendListItemSchemaForTask,
9
17
 
10
18
  tableSchema,
19
+ tableHeaderRowSchema,
11
20
  tableRowSchema,
12
21
  tableHeaderSchema,
13
22
  tableCellSchema,
package/src/index.ts CHANGED
@@ -1,5 +1,3 @@
1
- /* Copyright 2021, Milkdown by Mirone. */
2
-
3
1
  import { commands, inputRules, keymap, markInputRules, plugins, schema } from './composed'
4
2
 
5
3
  export * from './node'
@@ -8,4 +6,4 @@ export * from './plugin'
8
6
  export * from './composed'
9
7
 
10
8
  /// The GFM preset, includes all the plugins.
11
- export const gfm = [schema, inputRules, markInputRules, keymap, plugins, commands].flat()
9
+ export const gfm = [schema, inputRules, markInputRules, keymap, commands, plugins].flat()
package/src/mark/index.ts CHANGED
@@ -1,2 +1 @@
1
- /* Copyright 2021, Milkdown by Mirone. */
2
1
  export * from './strike-through'
@@ -1,4 +1,3 @@
1
- /* Copyright 2021, Milkdown by Mirone. */
2
1
  import { commandsCtx } from '@milkdown/core'
3
2
  import { $command, $inputRule, $markAttr, $markSchema, $useKeymap } from '@milkdown/utils'
4
3
  import { toggleMark } from '@milkdown/prose/commands'
@@ -1,5 +1,3 @@
1
- /* Copyright 2021, Milkdown by Mirone. */
2
-
3
1
  import { expectDomTypeError } from '@milkdown/exception'
4
2
  import { $nodeSchema } from '@milkdown/utils'
5
3
  import { withMeta } from '../../__internal__'
@@ -1,3 +1,2 @@
1
- /* Copyright 2021, Milkdown by Mirone. */
2
1
  export * from './definition'
3
2
  export * from './reference'
@@ -1,5 +1,3 @@
1
- /* Copyright 2021, Milkdown by Mirone. */
2
-
3
1
  import { expectDomTypeError } from '@milkdown/exception'
4
2
  import { $nodeSchema } from '@milkdown/utils'
5
3
  import { withMeta } from '../../__internal__'
package/src/node/index.ts CHANGED
@@ -1,4 +1,3 @@
1
- /* Copyright 2021, Milkdown by Mirone. */
2
1
  export * from './table'
3
2
  export * from './footnote'
4
3
  export * from './task-list-item'
@@ -0,0 +1,228 @@
1
+ import { paragraphSchema } from '@milkdown/preset-commonmark'
2
+ import { Selection } from '@milkdown/prose/state'
3
+ import { CellSelection, addColumnAfter, addColumnBefore, deleteColumn, deleteRow, deleteTable, goToNextCell, isInTable, selectedRect, setCellAttr } from '@milkdown/prose/tables'
4
+ import { $command } from '@milkdown/utils'
5
+ import { findParentNodeType } from '@milkdown/prose'
6
+ import { withMeta } from '../../__internal__'
7
+ import { addRowWithAlignment, createTable, moveCol, moveRow, selectCol, selectRow, selectTable } from './utils'
8
+ import { tableSchema } from './schema'
9
+
10
+ /// A command for moving cursor to previous cell.
11
+ export const goToPrevTableCellCommand = $command('GoToPrevTableCell', () => () => goToNextCell(-1))
12
+
13
+ withMeta(goToPrevTableCellCommand, {
14
+ displayName: 'Command<goToPrevTableCellCommand>',
15
+ group: 'Table',
16
+ })
17
+
18
+ /// A command for moving cursor to next cell.
19
+ export const goToNextTableCellCommand = $command('GoToNextTableCell', () => () => goToNextCell(1))
20
+
21
+ withMeta(goToNextTableCellCommand, {
22
+ displayName: 'Command<goToNextTableCellCommand>',
23
+ group: 'Table',
24
+ })
25
+
26
+ /// A command for quitting current table and insert a new paragraph node.
27
+ export const exitTable = $command('ExitTable', ctx => () => (state, dispatch) => {
28
+ if (!isInTable(state))
29
+ return false
30
+
31
+ const { $head } = state.selection
32
+ const table = findParentNodeType($head, tableSchema.type(ctx))
33
+ if (!table)
34
+ return false
35
+
36
+ const { to } = table
37
+
38
+ const tr = state.tr
39
+ .replaceWith(to, to, paragraphSchema.type(ctx).createAndFill()!)
40
+
41
+ tr.setSelection(Selection.near(tr.doc.resolve(to), 1)).scrollIntoView()
42
+ dispatch?.(tr)
43
+ return true
44
+ })
45
+
46
+ withMeta(exitTable, {
47
+ displayName: 'Command<breakTableCommand>',
48
+ group: 'Table',
49
+ })
50
+
51
+ /// A command for inserting a table.
52
+ /// You can specify the number of rows and columns.
53
+ /// By default, it will insert a 3x3 table.
54
+ export const insertTableCommand = $command('InsertTable', ctx => ({ row, col }: { row?: number, col?: number } = {}) => (state, dispatch) => {
55
+ const { selection, tr } = state
56
+ const { from } = selection
57
+ const table = createTable(ctx, row, col)
58
+ const _tr = tr.replaceSelectionWith(table)
59
+ const sel = Selection.findFrom(_tr.doc.resolve(from), 1, true)
60
+ if (sel)
61
+ _tr.setSelection(sel)
62
+
63
+ dispatch?.(_tr)
64
+
65
+ return true
66
+ })
67
+
68
+ withMeta(insertTableCommand, {
69
+ displayName: 'Command<insertTableCommand>',
70
+ group: 'Table',
71
+ })
72
+
73
+ /// A command for moving a row in a table.
74
+ /// You should specify the `from` and `to` index.
75
+ export const moveRowCommand = $command('MoveRow', () =>
76
+ ({ from, to, pos }: { from?: number, to?: number, pos?: number } = {}) =>
77
+ (state, dispatch) => {
78
+ const { tr } = state
79
+ const result = dispatch?.(moveRow({ tr, origin: from ?? 0, target: to ?? 0, pos, select: true }))
80
+
81
+ return Boolean(result)
82
+ })
83
+
84
+ withMeta(moveRowCommand, {
85
+ displayName: 'Command<moveRowCommand>',
86
+ group: 'Table',
87
+ })
88
+
89
+ /// A command for moving a column in a table.
90
+ /// You should specify the `from` and `to` index.
91
+ export const moveColCommand = $command('MoveCol', () =>
92
+ ({ from, to, pos }: { from?: number, to?: number, pos?: number } = {}) =>
93
+ (state, dispatch) => {
94
+ const { tr } = state
95
+ const result = dispatch?.(moveCol({ tr, origin: from ?? 0, target: to ?? 0, pos, select: true }))
96
+
97
+ return Boolean(result)
98
+ })
99
+
100
+ withMeta(moveColCommand, {
101
+ displayName: 'Command<moveColCommand>',
102
+ group: 'Table',
103
+ })
104
+
105
+ /// A command for selecting a row.
106
+ export const selectRowCommand = $command<{ index: number, pos?: number }, 'SelectRow'>('SelectRow', () =>
107
+ (payload: { index: number, pos?: number } = { index: 0 }) => (state, dispatch) => {
108
+ const { tr } = state
109
+ const result = dispatch?.(selectRow(payload.index, payload.pos)(tr))
110
+
111
+ return Boolean(result)
112
+ })
113
+
114
+ withMeta(selectRowCommand, {
115
+ displayName: 'Command<selectRowCommand>',
116
+ group: 'Table',
117
+ })
118
+
119
+ /// A command for selecting a column.
120
+ export const selectColCommand = $command<{ index: number, pos?: number }, 'SelectCol'>('SelectCol', () =>
121
+ (payload: { index: number, pos?: number } = { index: 0 }) => (state, dispatch) => {
122
+ const { tr } = state
123
+ const result = dispatch?.(selectCol(payload.index, payload.pos)(tr))
124
+
125
+ return Boolean(result)
126
+ })
127
+
128
+ withMeta(selectColCommand, {
129
+ displayName: 'Command<selectColCommand>',
130
+ group: 'Table',
131
+ })
132
+
133
+ /// A command for selecting a table.
134
+ export const selectTableCommand = $command('SelectTable', () => () => (state, dispatch) => {
135
+ const { tr } = state
136
+ const result = dispatch?.(selectTable(tr))
137
+
138
+ return Boolean(result)
139
+ })
140
+
141
+ withMeta(selectTableCommand, {
142
+ displayName: 'Command<selectTableCommand>',
143
+ group: 'Table',
144
+ })
145
+
146
+ /// A command for deleting selected cells.
147
+ /// If the selection is a row or column, the row or column will be deleted.
148
+ /// If all cells are selected, the table will be deleted.
149
+ export const deleteSelectedCellsCommand = $command('DeleteSelectedCells', () => () => (state, dispatch) => {
150
+ const { selection } = state
151
+ if (!(selection instanceof CellSelection))
152
+ return false
153
+
154
+ const isRow = selection.isRowSelection()
155
+ const isCol = selection.isColSelection()
156
+
157
+ if (isRow && isCol)
158
+ return deleteTable(state, dispatch)
159
+
160
+ if (isCol)
161
+ return deleteColumn(state, dispatch)
162
+
163
+ else
164
+ return deleteRow(state, dispatch)
165
+ })
166
+
167
+ withMeta(deleteSelectedCellsCommand, {
168
+ displayName: 'Command<deleteSelectedCellsCommand>',
169
+ group: 'Table',
170
+ })
171
+
172
+ /// A command for adding a column before the current column.
173
+ export const addColBeforeCommand = $command('AddColBefore', () => () => addColumnBefore)
174
+
175
+ withMeta(addColBeforeCommand, {
176
+ displayName: 'Command<addColBeforeCommand>',
177
+ group: 'Table',
178
+ })
179
+
180
+ /// A command for adding a column after the current column.
181
+ export const addColAfterCommand = $command('AddColAfter', () => () => addColumnAfter)
182
+
183
+ withMeta(addColAfterCommand, {
184
+ displayName: 'Command<addColAfterCommand>',
185
+ group: 'Table',
186
+ })
187
+
188
+ /// A command for adding a row before the current row.
189
+ export const addRowBeforeCommand = $command('AddRowBefore', ctx => () => (state, dispatch) => {
190
+ if (!isInTable(state))
191
+ return false
192
+ if (dispatch) {
193
+ const rect = selectedRect(state)
194
+ dispatch(addRowWithAlignment(ctx, state.tr, rect, rect.top))
195
+ }
196
+ return true
197
+ })
198
+
199
+ withMeta(addRowBeforeCommand, {
200
+ displayName: 'Command<addRowBeforeCommand>',
201
+ group: 'Table',
202
+ })
203
+
204
+ /// A command for adding a row after the current row.
205
+ export const addRowAfterCommand = $command('AddRowAfter', ctx => () => (state, dispatch) => {
206
+ if (!isInTable(state))
207
+ return false
208
+ if (dispatch) {
209
+ const rect = selectedRect(state)
210
+ dispatch(addRowWithAlignment(ctx, state.tr, rect, rect.bottom))
211
+ }
212
+ return true
213
+ })
214
+
215
+ withMeta(addRowAfterCommand, {
216
+ displayName: 'Command<addRowAfterCommand>',
217
+ group: 'Table',
218
+ })
219
+
220
+ /// A command for setting alignment property for selected cells.
221
+ /// You can specify the alignment as `left`, `center`, or `right`.
222
+ /// It's `left` by default.
223
+ export const setAlignCommand = $command<'left' | 'center' | 'right', 'SetAlign'>('SetAlign', () => (alignment = 'left') => setCellAttr('alignment', alignment))
224
+
225
+ withMeta(setAlignCommand, {
226
+ displayName: 'Command<setAlignCommand>',
227
+ group: 'Table',
228
+ })