@tiptap/extension-table 2.5.0-beta.2 → 2.5.0-beta.3

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 (177) hide show
  1. package/dist/index.cjs +328 -328
  2. package/dist/index.cjs.map +1 -1
  3. package/dist/index.js +327 -327
  4. package/dist/index.js.map +1 -1
  5. package/dist/index.umd.js +328 -328
  6. package/dist/index.umd.js.map +1 -1
  7. package/dist/packages/core/src/CommandManager.d.ts +20 -0
  8. package/dist/packages/core/src/Editor.d.ts +161 -0
  9. package/dist/packages/core/src/EventEmitter.d.ts +11 -0
  10. package/dist/packages/core/src/Extension.d.ts +343 -0
  11. package/dist/packages/core/src/ExtensionManager.d.ts +55 -0
  12. package/dist/packages/core/src/InputRule.d.ts +42 -0
  13. package/dist/packages/core/src/Mark.d.ts +451 -0
  14. package/dist/packages/core/src/Node.d.ts +611 -0
  15. package/dist/packages/core/src/NodePos.d.ts +44 -0
  16. package/dist/packages/core/src/NodeView.d.ts +31 -0
  17. package/dist/packages/core/src/PasteRule.d.ts +50 -0
  18. package/dist/packages/core/src/Tracker.d.ts +11 -0
  19. package/dist/packages/core/src/commands/blur.d.ts +13 -0
  20. package/dist/packages/core/src/commands/clearContent.d.ts +14 -0
  21. package/dist/packages/core/src/commands/clearNodes.d.ts +13 -0
  22. package/dist/packages/core/src/commands/command.d.ts +18 -0
  23. package/dist/packages/core/src/commands/createParagraphNear.d.ts +13 -0
  24. package/dist/packages/core/src/commands/cut.d.ts +20 -0
  25. package/dist/packages/core/src/commands/deleteCurrentNode.d.ts +13 -0
  26. package/dist/packages/core/src/commands/deleteNode.d.ts +15 -0
  27. package/dist/packages/core/src/commands/deleteRange.d.ts +14 -0
  28. package/dist/packages/core/src/commands/deleteSelection.d.ts +13 -0
  29. package/dist/packages/core/src/commands/enter.d.ts +13 -0
  30. package/dist/packages/core/src/commands/exitCode.d.ts +13 -0
  31. package/dist/packages/core/src/commands/extendMarkRange.d.ts +25 -0
  32. package/dist/packages/core/src/commands/first.d.ts +14 -0
  33. package/dist/packages/core/src/commands/focus.d.ts +27 -0
  34. package/dist/packages/core/src/commands/forEach.d.ts +14 -0
  35. package/dist/packages/core/src/commands/index.d.ts +55 -0
  36. package/dist/packages/core/src/commands/insertContent.d.ts +34 -0
  37. package/dist/packages/core/src/commands/insertContentAt.d.ts +47 -0
  38. package/dist/packages/core/src/commands/join.d.ts +41 -0
  39. package/dist/packages/core/src/commands/joinItemBackward.d.ts +13 -0
  40. package/dist/packages/core/src/commands/joinItemForward.d.ts +13 -0
  41. package/dist/packages/core/src/commands/joinTextblockBackward.d.ts +12 -0
  42. package/dist/packages/core/src/commands/joinTextblockForward.d.ts +12 -0
  43. package/dist/packages/core/src/commands/keyboardShortcut.d.ts +14 -0
  44. package/dist/packages/core/src/commands/lift.d.ts +17 -0
  45. package/dist/packages/core/src/commands/liftEmptyBlock.d.ts +13 -0
  46. package/dist/packages/core/src/commands/liftListItem.d.ts +15 -0
  47. package/dist/packages/core/src/commands/newlineInCode.d.ts +13 -0
  48. package/dist/packages/core/src/commands/resetAttributes.d.ts +16 -0
  49. package/dist/packages/core/src/commands/scrollIntoView.d.ts +13 -0
  50. package/dist/packages/core/src/commands/selectAll.d.ts +13 -0
  51. package/dist/packages/core/src/commands/selectNodeBackward.d.ts +13 -0
  52. package/dist/packages/core/src/commands/selectNodeForward.d.ts +13 -0
  53. package/dist/packages/core/src/commands/selectParentNode.d.ts +13 -0
  54. package/dist/packages/core/src/commands/selectTextblockEnd.d.ts +13 -0
  55. package/dist/packages/core/src/commands/selectTextblockStart.d.ts +13 -0
  56. package/dist/packages/core/src/commands/setContent.d.ts +40 -0
  57. package/dist/packages/core/src/commands/setMark.d.ts +15 -0
  58. package/dist/packages/core/src/commands/setMeta.d.ts +15 -0
  59. package/dist/packages/core/src/commands/setNode.d.ts +16 -0
  60. package/dist/packages/core/src/commands/setNodeSelection.d.ts +14 -0
  61. package/dist/packages/core/src/commands/setTextSelection.d.ts +14 -0
  62. package/dist/packages/core/src/commands/sinkListItem.d.ts +15 -0
  63. package/dist/packages/core/src/commands/splitBlock.d.ts +17 -0
  64. package/dist/packages/core/src/commands/splitListItem.d.ts +15 -0
  65. package/dist/packages/core/src/commands/toggleList.d.ts +18 -0
  66. package/dist/packages/core/src/commands/toggleMark.d.ts +30 -0
  67. package/dist/packages/core/src/commands/toggleNode.d.ts +17 -0
  68. package/dist/packages/core/src/commands/toggleWrap.d.ts +16 -0
  69. package/dist/packages/core/src/commands/undoInputRule.d.ts +13 -0
  70. package/dist/packages/core/src/commands/unsetAllMarks.d.ts +13 -0
  71. package/dist/packages/core/src/commands/unsetMark.d.ts +25 -0
  72. package/dist/packages/core/src/commands/updateAttributes.d.ts +24 -0
  73. package/dist/packages/core/src/commands/wrapIn.d.ts +16 -0
  74. package/dist/packages/core/src/commands/wrapInList.d.ts +16 -0
  75. package/dist/packages/core/src/extensions/clipboardTextSerializer.d.ts +5 -0
  76. package/dist/packages/core/src/extensions/commands.d.ts +3 -0
  77. package/dist/packages/core/src/extensions/editable.d.ts +2 -0
  78. package/dist/packages/core/src/extensions/focusEvents.d.ts +2 -0
  79. package/dist/packages/core/src/extensions/index.d.ts +6 -0
  80. package/dist/packages/core/src/extensions/keymap.d.ts +2 -0
  81. package/dist/packages/core/src/extensions/tabindex.d.ts +2 -0
  82. package/dist/packages/core/src/helpers/combineTransactionSteps.d.ts +10 -0
  83. package/dist/packages/core/src/helpers/createChainableState.d.ts +10 -0
  84. package/dist/packages/core/src/helpers/createDocument.d.ts +12 -0
  85. package/dist/packages/core/src/helpers/createNodeFromContent.d.ts +15 -0
  86. package/dist/packages/core/src/helpers/defaultBlockAt.d.ts +7 -0
  87. package/dist/packages/core/src/helpers/findChildren.d.ts +9 -0
  88. package/dist/packages/core/src/helpers/findChildrenInRange.d.ts +10 -0
  89. package/dist/packages/core/src/helpers/findParentNode.d.ts +16 -0
  90. package/dist/packages/core/src/helpers/findParentNodeClosestToPos.d.ts +17 -0
  91. package/dist/packages/core/src/helpers/generateHTML.d.ts +8 -0
  92. package/dist/packages/core/src/helpers/generateJSON.d.ts +8 -0
  93. package/dist/packages/core/src/helpers/generateText.d.ts +12 -0
  94. package/dist/packages/core/src/helpers/getAttributes.d.ts +9 -0
  95. package/dist/packages/core/src/helpers/getAttributesFromExtensions.d.ts +6 -0
  96. package/dist/packages/core/src/helpers/getChangedRanges.d.ts +11 -0
  97. package/dist/packages/core/src/helpers/getDebugJSON.d.ts +8 -0
  98. package/dist/packages/core/src/helpers/getExtensionField.d.ts +9 -0
  99. package/dist/packages/core/src/helpers/getHTMLFromFragment.d.ts +2 -0
  100. package/dist/packages/core/src/helpers/getMarkAttributes.d.ts +3 -0
  101. package/dist/packages/core/src/helpers/getMarkRange.d.ts +3 -0
  102. package/dist/packages/core/src/helpers/getMarkType.d.ts +2 -0
  103. package/dist/packages/core/src/helpers/getMarksBetween.d.ts +3 -0
  104. package/dist/packages/core/src/helpers/getNodeAtPosition.d.ts +11 -0
  105. package/dist/packages/core/src/helpers/getNodeAttributes.d.ts +3 -0
  106. package/dist/packages/core/src/helpers/getNodeType.d.ts +2 -0
  107. package/dist/packages/core/src/helpers/getRenderedAttributes.d.ts +3 -0
  108. package/dist/packages/core/src/helpers/getSchema.d.ts +4 -0
  109. package/dist/packages/core/src/helpers/getSchemaByResolvedExtensions.d.ts +10 -0
  110. package/dist/packages/core/src/helpers/getSchemaTypeByName.d.ts +8 -0
  111. package/dist/packages/core/src/helpers/getSchemaTypeNameByName.d.ts +8 -0
  112. package/dist/packages/core/src/helpers/getSplittedAttributes.d.ts +9 -0
  113. package/dist/packages/core/src/helpers/getText.d.ts +15 -0
  114. package/dist/packages/core/src/helpers/getTextBetween.d.ts +14 -0
  115. package/dist/packages/core/src/helpers/getTextContentFromNodes.d.ts +8 -0
  116. package/dist/packages/core/src/helpers/getTextSerializersFromSchema.d.ts +8 -0
  117. package/dist/packages/core/src/helpers/index.d.ts +50 -0
  118. package/dist/packages/core/src/helpers/injectExtensionAttributesToParseRule.d.ts +9 -0
  119. package/dist/packages/core/src/helpers/isActive.d.ts +2 -0
  120. package/dist/packages/core/src/helpers/isAtEndOfNode.d.ts +2 -0
  121. package/dist/packages/core/src/helpers/isAtStartOfNode.d.ts +2 -0
  122. package/dist/packages/core/src/helpers/isExtensionRulesEnabled.d.ts +2 -0
  123. package/dist/packages/core/src/helpers/isList.d.ts +2 -0
  124. package/dist/packages/core/src/helpers/isMarkActive.d.ts +3 -0
  125. package/dist/packages/core/src/helpers/isNodeActive.d.ts +3 -0
  126. package/dist/packages/core/src/helpers/isNodeEmpty.d.ts +2 -0
  127. package/dist/packages/core/src/helpers/isNodeSelection.d.ts +2 -0
  128. package/dist/packages/core/src/helpers/isTextSelection.d.ts +2 -0
  129. package/dist/packages/core/src/helpers/posToDOMRect.d.ts +2 -0
  130. package/dist/packages/core/src/helpers/resolveFocusPosition.d.ts +4 -0
  131. package/dist/packages/core/src/helpers/selectionToInsertionEnd.d.ts +2 -0
  132. package/dist/packages/core/src/helpers/splitExtensions.d.ts +9 -0
  133. package/dist/packages/core/src/index.d.ts +24 -0
  134. package/dist/packages/core/src/inputRules/index.d.ts +5 -0
  135. package/dist/packages/core/src/inputRules/markInputRule.d.ts +13 -0
  136. package/dist/packages/core/src/inputRules/nodeInputRule.d.ts +23 -0
  137. package/dist/packages/core/src/inputRules/textInputRule.d.ts +10 -0
  138. package/dist/packages/core/src/inputRules/textblockTypeInputRule.d.ts +15 -0
  139. package/dist/packages/core/src/inputRules/wrappingInputRule.d.ts +28 -0
  140. package/dist/packages/core/src/pasteRules/index.d.ts +3 -0
  141. package/dist/packages/core/src/pasteRules/markPasteRule.d.ts +13 -0
  142. package/dist/packages/core/src/pasteRules/nodePasteRule.d.ts +13 -0
  143. package/dist/packages/core/src/pasteRules/textPasteRule.d.ts +10 -0
  144. package/dist/packages/core/src/style.d.ts +1 -0
  145. package/dist/packages/core/src/types.d.ts +250 -0
  146. package/dist/packages/core/src/utilities/callOrReturn.d.ts +9 -0
  147. package/dist/packages/core/src/utilities/createStyleTag.d.ts +1 -0
  148. package/dist/packages/core/src/utilities/deleteProps.d.ts +6 -0
  149. package/dist/packages/core/src/utilities/elementFromString.d.ts +1 -0
  150. package/dist/packages/core/src/utilities/escapeForRegEx.d.ts +1 -0
  151. package/dist/packages/core/src/utilities/findDuplicates.d.ts +1 -0
  152. package/dist/packages/core/src/utilities/fromString.d.ts +1 -0
  153. package/dist/packages/core/src/utilities/index.d.ts +20 -0
  154. package/dist/packages/core/src/utilities/isAndroid.d.ts +1 -0
  155. package/dist/packages/core/src/utilities/isEmptyObject.d.ts +1 -0
  156. package/dist/packages/core/src/utilities/isFunction.d.ts +1 -0
  157. package/dist/packages/core/src/utilities/isMacOS.d.ts +1 -0
  158. package/dist/packages/core/src/utilities/isNumber.d.ts +1 -0
  159. package/dist/packages/core/src/utilities/isPlainObject.d.ts +1 -0
  160. package/dist/packages/core/src/utilities/isRegExp.d.ts +1 -0
  161. package/dist/packages/core/src/utilities/isString.d.ts +1 -0
  162. package/dist/packages/core/src/utilities/isiOS.d.ts +1 -0
  163. package/dist/packages/core/src/utilities/mergeAttributes.d.ts +1 -0
  164. package/dist/packages/core/src/utilities/mergeDeep.d.ts +1 -0
  165. package/dist/packages/core/src/utilities/minMax.d.ts +1 -0
  166. package/dist/packages/core/src/utilities/objectIncludes.d.ts +8 -0
  167. package/dist/packages/core/src/utilities/removeDuplicates.d.ts +8 -0
  168. package/dist/packages/extension-table/src/TableView.d.ts +17 -17
  169. package/dist/packages/extension-table/src/index.d.ts +5 -5
  170. package/dist/packages/extension-table/src/table.d.ts +194 -194
  171. package/dist/packages/extension-table/src/utilities/createCell.d.ts +2 -2
  172. package/dist/packages/extension-table/src/utilities/createColGroup.d.ts +19 -19
  173. package/dist/packages/extension-table/src/utilities/createTable.d.ts +2 -2
  174. package/dist/packages/extension-table/src/utilities/deleteTableWhenAllCellsSelected.d.ts +2 -2
  175. package/dist/packages/extension-table/src/utilities/getTableNodeTypes.d.ts +4 -4
  176. package/dist/packages/extension-table/src/utilities/isCellSelection.d.ts +2 -2
  177. package/package.json +3 -3
package/dist/index.js CHANGED
@@ -2,347 +2,347 @@ import { findParentNodeClosestToPos, Node, mergeAttributes, callOrReturn, getExt
2
2
  import { TextSelection } from '@tiptap/pm/state';
3
3
  import { CellSelection, addColumnBefore, addColumnAfter, deleteColumn, addRowBefore, addRowAfter, deleteRow, deleteTable, mergeCells, splitCell, toggleHeader, toggleHeaderCell, setCellAttr, goToNextCell, fixTables, columnResizing, tableEditing } from '@tiptap/pm/tables';
4
4
 
5
- function updateColumns(node, colgroup, table, cellMinWidth, overrideCol, overrideValue) {
6
- let totalWidth = 0;
7
- let fixedWidth = true;
8
- let nextDOM = colgroup.firstChild;
9
- const row = node.firstChild;
10
- for (let i = 0, col = 0; i < row.childCount; i += 1) {
11
- const { colspan, colwidth } = row.child(i).attrs;
12
- for (let j = 0; j < colspan; j += 1, col += 1) {
13
- const hasWidth = overrideCol === col ? overrideValue : colwidth && colwidth[j];
14
- const cssWidth = hasWidth ? `${hasWidth}px` : '';
15
- totalWidth += hasWidth || cellMinWidth;
16
- if (!hasWidth) {
17
- fixedWidth = false;
18
- }
19
- if (!nextDOM) {
20
- colgroup.appendChild(document.createElement('col')).style.width = cssWidth;
21
- }
22
- else {
23
- if (nextDOM.style.width !== cssWidth) {
24
- nextDOM.style.width = cssWidth;
25
- }
26
- nextDOM = nextDOM.nextSibling;
27
- }
28
- }
29
- }
30
- while (nextDOM) {
31
- const after = nextDOM.nextSibling;
32
- nextDOM.parentNode.removeChild(nextDOM);
33
- nextDOM = after;
34
- }
35
- if (fixedWidth) {
36
- table.style.width = `${totalWidth}px`;
37
- table.style.minWidth = '';
38
- }
39
- else {
40
- table.style.width = '';
41
- table.style.minWidth = `${totalWidth}px`;
42
- }
43
- }
44
- class TableView {
45
- constructor(node, cellMinWidth) {
46
- this.node = node;
47
- this.cellMinWidth = cellMinWidth;
48
- this.dom = document.createElement('div');
49
- this.dom.className = 'tableWrapper';
50
- this.table = this.dom.appendChild(document.createElement('table'));
51
- this.colgroup = this.table.appendChild(document.createElement('colgroup'));
52
- updateColumns(node, this.colgroup, this.table, cellMinWidth);
53
- this.contentDOM = this.table.appendChild(document.createElement('tbody'));
54
- }
55
- update(node) {
56
- if (node.type !== this.node.type) {
57
- return false;
58
- }
59
- this.node = node;
60
- updateColumns(node, this.colgroup, this.table, this.cellMinWidth);
61
- return true;
62
- }
63
- ignoreMutation(mutation) {
64
- return (mutation.type === 'attributes'
65
- && (mutation.target === this.table || this.colgroup.contains(mutation.target)));
66
- }
5
+ function updateColumns(node, colgroup, table, cellMinWidth, overrideCol, overrideValue) {
6
+ let totalWidth = 0;
7
+ let fixedWidth = true;
8
+ let nextDOM = colgroup.firstChild;
9
+ const row = node.firstChild;
10
+ for (let i = 0, col = 0; i < row.childCount; i += 1) {
11
+ const { colspan, colwidth } = row.child(i).attrs;
12
+ for (let j = 0; j < colspan; j += 1, col += 1) {
13
+ const hasWidth = overrideCol === col ? overrideValue : colwidth && colwidth[j];
14
+ const cssWidth = hasWidth ? `${hasWidth}px` : '';
15
+ totalWidth += hasWidth || cellMinWidth;
16
+ if (!hasWidth) {
17
+ fixedWidth = false;
18
+ }
19
+ if (!nextDOM) {
20
+ colgroup.appendChild(document.createElement('col')).style.width = cssWidth;
21
+ }
22
+ else {
23
+ if (nextDOM.style.width !== cssWidth) {
24
+ nextDOM.style.width = cssWidth;
25
+ }
26
+ nextDOM = nextDOM.nextSibling;
27
+ }
28
+ }
29
+ }
30
+ while (nextDOM) {
31
+ const after = nextDOM.nextSibling;
32
+ nextDOM.parentNode.removeChild(nextDOM);
33
+ nextDOM = after;
34
+ }
35
+ if (fixedWidth) {
36
+ table.style.width = `${totalWidth}px`;
37
+ table.style.minWidth = '';
38
+ }
39
+ else {
40
+ table.style.width = '';
41
+ table.style.minWidth = `${totalWidth}px`;
42
+ }
43
+ }
44
+ class TableView {
45
+ constructor(node, cellMinWidth) {
46
+ this.node = node;
47
+ this.cellMinWidth = cellMinWidth;
48
+ this.dom = document.createElement('div');
49
+ this.dom.className = 'tableWrapper';
50
+ this.table = this.dom.appendChild(document.createElement('table'));
51
+ this.colgroup = this.table.appendChild(document.createElement('colgroup'));
52
+ updateColumns(node, this.colgroup, this.table, cellMinWidth);
53
+ this.contentDOM = this.table.appendChild(document.createElement('tbody'));
54
+ }
55
+ update(node) {
56
+ if (node.type !== this.node.type) {
57
+ return false;
58
+ }
59
+ this.node = node;
60
+ updateColumns(node, this.colgroup, this.table, this.cellMinWidth);
61
+ return true;
62
+ }
63
+ ignoreMutation(mutation) {
64
+ return (mutation.type === 'attributes'
65
+ && (mutation.target === this.table || this.colgroup.contains(mutation.target)));
66
+ }
67
67
  }
68
68
 
69
- /**
70
- * Creates a colgroup element for a table node in ProseMirror.
71
- *
72
- * @param node - The ProseMirror node representing the table.
73
- * @param cellMinWidth - The minimum width of a cell in the table.
74
- * @param overrideCol - (Optional) The index of the column to override the width of.
75
- * @param overrideValue - (Optional) The width value to use for the overridden column.
76
- * @returns An object containing the colgroup element, the total width of the table, and the minimum width of the table.
77
- */
78
- function createColGroup(node, cellMinWidth, overrideCol, overrideValue) {
79
- let totalWidth = 0;
80
- let fixedWidth = true;
81
- const cols = [];
82
- const row = node.firstChild;
83
- if (!row) {
84
- return {};
85
- }
86
- for (let i = 0, col = 0; i < row.childCount; i += 1) {
87
- const { colspan, colwidth } = row.child(i).attrs;
88
- for (let j = 0; j < colspan; j += 1, col += 1) {
89
- const hasWidth = overrideCol === col ? overrideValue : colwidth && colwidth[j];
90
- const cssWidth = hasWidth ? `${hasWidth}px` : '';
91
- totalWidth += hasWidth || cellMinWidth;
92
- if (!hasWidth) {
93
- fixedWidth = false;
94
- }
95
- cols.push(['col', cssWidth ? { style: `width: ${cssWidth}` } : {}]);
96
- }
97
- }
98
- const tableWidth = fixedWidth ? `${totalWidth}px` : '';
99
- const tableMinWidth = fixedWidth ? '' : `${totalWidth}px`;
100
- const colgroup = ['colgroup', {}, ...cols];
101
- return { colgroup, tableWidth, tableMinWidth };
69
+ /**
70
+ * Creates a colgroup element for a table node in ProseMirror.
71
+ *
72
+ * @param node - The ProseMirror node representing the table.
73
+ * @param cellMinWidth - The minimum width of a cell in the table.
74
+ * @param overrideCol - (Optional) The index of the column to override the width of.
75
+ * @param overrideValue - (Optional) The width value to use for the overridden column.
76
+ * @returns An object containing the colgroup element, the total width of the table, and the minimum width of the table.
77
+ */
78
+ function createColGroup(node, cellMinWidth, overrideCol, overrideValue) {
79
+ let totalWidth = 0;
80
+ let fixedWidth = true;
81
+ const cols = [];
82
+ const row = node.firstChild;
83
+ if (!row) {
84
+ return {};
85
+ }
86
+ for (let i = 0, col = 0; i < row.childCount; i += 1) {
87
+ const { colspan, colwidth } = row.child(i).attrs;
88
+ for (let j = 0; j < colspan; j += 1, col += 1) {
89
+ const hasWidth = overrideCol === col ? overrideValue : colwidth && colwidth[j];
90
+ const cssWidth = hasWidth ? `${hasWidth}px` : '';
91
+ totalWidth += hasWidth || cellMinWidth;
92
+ if (!hasWidth) {
93
+ fixedWidth = false;
94
+ }
95
+ cols.push(['col', cssWidth ? { style: `width: ${cssWidth}` } : {}]);
96
+ }
97
+ }
98
+ const tableWidth = fixedWidth ? `${totalWidth}px` : '';
99
+ const tableMinWidth = fixedWidth ? '' : `${totalWidth}px`;
100
+ const colgroup = ['colgroup', {}, ...cols];
101
+ return { colgroup, tableWidth, tableMinWidth };
102
102
  }
103
103
 
104
- function createCell(cellType, cellContent) {
105
- if (cellContent) {
106
- return cellType.createChecked(null, cellContent);
107
- }
108
- return cellType.createAndFill();
104
+ function createCell(cellType, cellContent) {
105
+ if (cellContent) {
106
+ return cellType.createChecked(null, cellContent);
107
+ }
108
+ return cellType.createAndFill();
109
109
  }
110
110
 
111
- function getTableNodeTypes(schema) {
112
- if (schema.cached.tableNodeTypes) {
113
- return schema.cached.tableNodeTypes;
114
- }
115
- const roles = {};
116
- Object.keys(schema.nodes).forEach(type => {
117
- const nodeType = schema.nodes[type];
118
- if (nodeType.spec.tableRole) {
119
- roles[nodeType.spec.tableRole] = nodeType;
120
- }
121
- });
122
- schema.cached.tableNodeTypes = roles;
123
- return roles;
111
+ function getTableNodeTypes(schema) {
112
+ if (schema.cached.tableNodeTypes) {
113
+ return schema.cached.tableNodeTypes;
114
+ }
115
+ const roles = {};
116
+ Object.keys(schema.nodes).forEach(type => {
117
+ const nodeType = schema.nodes[type];
118
+ if (nodeType.spec.tableRole) {
119
+ roles[nodeType.spec.tableRole] = nodeType;
120
+ }
121
+ });
122
+ schema.cached.tableNodeTypes = roles;
123
+ return roles;
124
124
  }
125
125
 
126
- function createTable(schema, rowsCount, colsCount, withHeaderRow, cellContent) {
127
- const types = getTableNodeTypes(schema);
128
- const headerCells = [];
129
- const cells = [];
130
- for (let index = 0; index < colsCount; index += 1) {
131
- const cell = createCell(types.cell, cellContent);
132
- if (cell) {
133
- cells.push(cell);
134
- }
135
- if (withHeaderRow) {
136
- const headerCell = createCell(types.header_cell, cellContent);
137
- if (headerCell) {
138
- headerCells.push(headerCell);
139
- }
140
- }
141
- }
142
- const rows = [];
143
- for (let index = 0; index < rowsCount; index += 1) {
144
- rows.push(types.row.createChecked(null, withHeaderRow && index === 0 ? headerCells : cells));
145
- }
146
- return types.table.createChecked(null, rows);
126
+ function createTable(schema, rowsCount, colsCount, withHeaderRow, cellContent) {
127
+ const types = getTableNodeTypes(schema);
128
+ const headerCells = [];
129
+ const cells = [];
130
+ for (let index = 0; index < colsCount; index += 1) {
131
+ const cell = createCell(types.cell, cellContent);
132
+ if (cell) {
133
+ cells.push(cell);
134
+ }
135
+ if (withHeaderRow) {
136
+ const headerCell = createCell(types.header_cell, cellContent);
137
+ if (headerCell) {
138
+ headerCells.push(headerCell);
139
+ }
140
+ }
141
+ }
142
+ const rows = [];
143
+ for (let index = 0; index < rowsCount; index += 1) {
144
+ rows.push(types.row.createChecked(null, withHeaderRow && index === 0 ? headerCells : cells));
145
+ }
146
+ return types.table.createChecked(null, rows);
147
147
  }
148
148
 
149
- function isCellSelection(value) {
150
- return value instanceof CellSelection;
149
+ function isCellSelection(value) {
150
+ return value instanceof CellSelection;
151
151
  }
152
152
 
153
- const deleteTableWhenAllCellsSelected = ({ editor }) => {
154
- const { selection } = editor.state;
155
- if (!isCellSelection(selection)) {
156
- return false;
157
- }
158
- let cellCount = 0;
159
- const table = findParentNodeClosestToPos(selection.ranges[0].$from, node => {
160
- return node.type.name === 'table';
161
- });
162
- table === null || table === void 0 ? void 0 : table.node.descendants(node => {
163
- if (node.type.name === 'table') {
164
- return false;
165
- }
166
- if (['tableCell', 'tableHeader'].includes(node.type.name)) {
167
- cellCount += 1;
168
- }
169
- });
170
- const allCellsSelected = cellCount === selection.ranges.length;
171
- if (!allCellsSelected) {
172
- return false;
173
- }
174
- editor.commands.deleteTable();
175
- return true;
153
+ const deleteTableWhenAllCellsSelected = ({ editor }) => {
154
+ const { selection } = editor.state;
155
+ if (!isCellSelection(selection)) {
156
+ return false;
157
+ }
158
+ let cellCount = 0;
159
+ const table = findParentNodeClosestToPos(selection.ranges[0].$from, node => {
160
+ return node.type.name === 'table';
161
+ });
162
+ table === null || table === void 0 ? void 0 : table.node.descendants(node => {
163
+ if (node.type.name === 'table') {
164
+ return false;
165
+ }
166
+ if (['tableCell', 'tableHeader'].includes(node.type.name)) {
167
+ cellCount += 1;
168
+ }
169
+ });
170
+ const allCellsSelected = cellCount === selection.ranges.length;
171
+ if (!allCellsSelected) {
172
+ return false;
173
+ }
174
+ editor.commands.deleteTable();
175
+ return true;
176
176
  };
177
177
 
178
- /**
179
- * This extension allows you to create tables.
180
- * @see https://www.tiptap.dev/api/nodes/table
181
- */
182
- const Table = Node.create({
183
- name: 'table',
184
- // @ts-ignore
185
- addOptions() {
186
- return {
187
- HTMLAttributes: {},
188
- resizable: false,
189
- handleWidth: 5,
190
- cellMinWidth: 25,
191
- // TODO: fix
192
- View: TableView,
193
- lastColumnResizable: true,
194
- allowTableNodeSelection: false,
195
- };
196
- },
197
- content: 'tableRow+',
198
- tableRole: 'table',
199
- isolating: true,
200
- group: 'block',
201
- parseHTML() {
202
- return [{ tag: 'table' }];
203
- },
204
- renderHTML({ node, HTMLAttributes }) {
205
- const { colgroup, tableWidth, tableMinWidth } = createColGroup(node, this.options.cellMinWidth);
206
- const table = [
207
- 'table',
208
- mergeAttributes(this.options.HTMLAttributes, HTMLAttributes, {
209
- style: tableWidth
210
- ? `width: ${tableWidth}`
211
- : `minWidth: ${tableMinWidth}`,
212
- }),
213
- colgroup,
214
- ['tbody', 0],
215
- ];
216
- return table;
217
- },
218
- addCommands() {
219
- return {
220
- insertTable: ({ rows = 3, cols = 3, withHeaderRow = true } = {}) => ({ tr, dispatch, editor }) => {
221
- const node = createTable(editor.schema, rows, cols, withHeaderRow);
222
- if (dispatch) {
223
- const offset = tr.selection.from + 1;
224
- tr.replaceSelectionWith(node)
225
- .scrollIntoView()
226
- .setSelection(TextSelection.near(tr.doc.resolve(offset)));
227
- }
228
- return true;
229
- },
230
- addColumnBefore: () => ({ state, dispatch }) => {
231
- return addColumnBefore(state, dispatch);
232
- },
233
- addColumnAfter: () => ({ state, dispatch }) => {
234
- return addColumnAfter(state, dispatch);
235
- },
236
- deleteColumn: () => ({ state, dispatch }) => {
237
- return deleteColumn(state, dispatch);
238
- },
239
- addRowBefore: () => ({ state, dispatch }) => {
240
- return addRowBefore(state, dispatch);
241
- },
242
- addRowAfter: () => ({ state, dispatch }) => {
243
- return addRowAfter(state, dispatch);
244
- },
245
- deleteRow: () => ({ state, dispatch }) => {
246
- return deleteRow(state, dispatch);
247
- },
248
- deleteTable: () => ({ state, dispatch }) => {
249
- return deleteTable(state, dispatch);
250
- },
251
- mergeCells: () => ({ state, dispatch }) => {
252
- return mergeCells(state, dispatch);
253
- },
254
- splitCell: () => ({ state, dispatch }) => {
255
- return splitCell(state, dispatch);
256
- },
257
- toggleHeaderColumn: () => ({ state, dispatch }) => {
258
- return toggleHeader('column')(state, dispatch);
259
- },
260
- toggleHeaderRow: () => ({ state, dispatch }) => {
261
- return toggleHeader('row')(state, dispatch);
262
- },
263
- toggleHeaderCell: () => ({ state, dispatch }) => {
264
- return toggleHeaderCell(state, dispatch);
265
- },
266
- mergeOrSplit: () => ({ state, dispatch }) => {
267
- if (mergeCells(state, dispatch)) {
268
- return true;
269
- }
270
- return splitCell(state, dispatch);
271
- },
272
- setCellAttribute: (name, value) => ({ state, dispatch }) => {
273
- return setCellAttr(name, value)(state, dispatch);
274
- },
275
- goToNextCell: () => ({ state, dispatch }) => {
276
- return goToNextCell(1)(state, dispatch);
277
- },
278
- goToPreviousCell: () => ({ state, dispatch }) => {
279
- return goToNextCell(-1)(state, dispatch);
280
- },
281
- fixTables: () => ({ state, dispatch }) => {
282
- if (dispatch) {
283
- fixTables(state);
284
- }
285
- return true;
286
- },
287
- setCellSelection: position => ({ tr, dispatch }) => {
288
- if (dispatch) {
289
- const selection = CellSelection.create(tr.doc, position.anchorCell, position.headCell);
290
- // @ts-ignore
291
- tr.setSelection(selection);
292
- }
293
- return true;
294
- },
295
- };
296
- },
297
- addKeyboardShortcuts() {
298
- return {
299
- Tab: () => {
300
- if (this.editor.commands.goToNextCell()) {
301
- return true;
302
- }
303
- if (!this.editor.can().addRowAfter()) {
304
- return false;
305
- }
306
- return this.editor.chain().addRowAfter().goToNextCell().run();
307
- },
308
- 'Shift-Tab': () => this.editor.commands.goToPreviousCell(),
309
- Backspace: deleteTableWhenAllCellsSelected,
310
- 'Mod-Backspace': deleteTableWhenAllCellsSelected,
311
- Delete: deleteTableWhenAllCellsSelected,
312
- 'Mod-Delete': deleteTableWhenAllCellsSelected,
313
- };
314
- },
315
- addProseMirrorPlugins() {
316
- const isResizable = this.options.resizable && this.editor.isEditable;
317
- return [
318
- ...(isResizable
319
- ? [
320
- columnResizing({
321
- handleWidth: this.options.handleWidth,
322
- cellMinWidth: this.options.cellMinWidth,
323
- // @ts-ignore (incorrect type)
324
- View: this.options.View,
325
- // TODO: PR for @types/prosemirror-tables
326
- // @ts-ignore (incorrect type)
327
- lastColumnResizable: this.options.lastColumnResizable,
328
- }),
329
- ]
330
- : []),
331
- tableEditing({
332
- allowTableNodeSelection: this.options.allowTableNodeSelection,
333
- }),
334
- ];
335
- },
336
- extendNodeSchema(extension) {
337
- const context = {
338
- name: extension.name,
339
- options: extension.options,
340
- storage: extension.storage,
341
- };
342
- return {
343
- tableRole: callOrReturn(getExtensionField(extension, 'tableRole', context)),
344
- };
345
- },
178
+ /**
179
+ * This extension allows you to create tables.
180
+ * @see https://www.tiptap.dev/api/nodes/table
181
+ */
182
+ const Table = Node.create({
183
+ name: 'table',
184
+ // @ts-ignore
185
+ addOptions() {
186
+ return {
187
+ HTMLAttributes: {},
188
+ resizable: false,
189
+ handleWidth: 5,
190
+ cellMinWidth: 25,
191
+ // TODO: fix
192
+ View: TableView,
193
+ lastColumnResizable: true,
194
+ allowTableNodeSelection: false,
195
+ };
196
+ },
197
+ content: 'tableRow+',
198
+ tableRole: 'table',
199
+ isolating: true,
200
+ group: 'block',
201
+ parseHTML() {
202
+ return [{ tag: 'table' }];
203
+ },
204
+ renderHTML({ node, HTMLAttributes }) {
205
+ const { colgroup, tableWidth, tableMinWidth } = createColGroup(node, this.options.cellMinWidth);
206
+ const table = [
207
+ 'table',
208
+ mergeAttributes(this.options.HTMLAttributes, HTMLAttributes, {
209
+ style: tableWidth
210
+ ? `width: ${tableWidth}`
211
+ : `minWidth: ${tableMinWidth}`,
212
+ }),
213
+ colgroup,
214
+ ['tbody', 0],
215
+ ];
216
+ return table;
217
+ },
218
+ addCommands() {
219
+ return {
220
+ insertTable: ({ rows = 3, cols = 3, withHeaderRow = true } = {}) => ({ tr, dispatch, editor }) => {
221
+ const node = createTable(editor.schema, rows, cols, withHeaderRow);
222
+ if (dispatch) {
223
+ const offset = tr.selection.from + 1;
224
+ tr.replaceSelectionWith(node)
225
+ .scrollIntoView()
226
+ .setSelection(TextSelection.near(tr.doc.resolve(offset)));
227
+ }
228
+ return true;
229
+ },
230
+ addColumnBefore: () => ({ state, dispatch }) => {
231
+ return addColumnBefore(state, dispatch);
232
+ },
233
+ addColumnAfter: () => ({ state, dispatch }) => {
234
+ return addColumnAfter(state, dispatch);
235
+ },
236
+ deleteColumn: () => ({ state, dispatch }) => {
237
+ return deleteColumn(state, dispatch);
238
+ },
239
+ addRowBefore: () => ({ state, dispatch }) => {
240
+ return addRowBefore(state, dispatch);
241
+ },
242
+ addRowAfter: () => ({ state, dispatch }) => {
243
+ return addRowAfter(state, dispatch);
244
+ },
245
+ deleteRow: () => ({ state, dispatch }) => {
246
+ return deleteRow(state, dispatch);
247
+ },
248
+ deleteTable: () => ({ state, dispatch }) => {
249
+ return deleteTable(state, dispatch);
250
+ },
251
+ mergeCells: () => ({ state, dispatch }) => {
252
+ return mergeCells(state, dispatch);
253
+ },
254
+ splitCell: () => ({ state, dispatch }) => {
255
+ return splitCell(state, dispatch);
256
+ },
257
+ toggleHeaderColumn: () => ({ state, dispatch }) => {
258
+ return toggleHeader('column')(state, dispatch);
259
+ },
260
+ toggleHeaderRow: () => ({ state, dispatch }) => {
261
+ return toggleHeader('row')(state, dispatch);
262
+ },
263
+ toggleHeaderCell: () => ({ state, dispatch }) => {
264
+ return toggleHeaderCell(state, dispatch);
265
+ },
266
+ mergeOrSplit: () => ({ state, dispatch }) => {
267
+ if (mergeCells(state, dispatch)) {
268
+ return true;
269
+ }
270
+ return splitCell(state, dispatch);
271
+ },
272
+ setCellAttribute: (name, value) => ({ state, dispatch }) => {
273
+ return setCellAttr(name, value)(state, dispatch);
274
+ },
275
+ goToNextCell: () => ({ state, dispatch }) => {
276
+ return goToNextCell(1)(state, dispatch);
277
+ },
278
+ goToPreviousCell: () => ({ state, dispatch }) => {
279
+ return goToNextCell(-1)(state, dispatch);
280
+ },
281
+ fixTables: () => ({ state, dispatch }) => {
282
+ if (dispatch) {
283
+ fixTables(state);
284
+ }
285
+ return true;
286
+ },
287
+ setCellSelection: position => ({ tr, dispatch }) => {
288
+ if (dispatch) {
289
+ const selection = CellSelection.create(tr.doc, position.anchorCell, position.headCell);
290
+ // @ts-ignore
291
+ tr.setSelection(selection);
292
+ }
293
+ return true;
294
+ },
295
+ };
296
+ },
297
+ addKeyboardShortcuts() {
298
+ return {
299
+ Tab: () => {
300
+ if (this.editor.commands.goToNextCell()) {
301
+ return true;
302
+ }
303
+ if (!this.editor.can().addRowAfter()) {
304
+ return false;
305
+ }
306
+ return this.editor.chain().addRowAfter().goToNextCell().run();
307
+ },
308
+ 'Shift-Tab': () => this.editor.commands.goToPreviousCell(),
309
+ Backspace: deleteTableWhenAllCellsSelected,
310
+ 'Mod-Backspace': deleteTableWhenAllCellsSelected,
311
+ Delete: deleteTableWhenAllCellsSelected,
312
+ 'Mod-Delete': deleteTableWhenAllCellsSelected,
313
+ };
314
+ },
315
+ addProseMirrorPlugins() {
316
+ const isResizable = this.options.resizable && this.editor.isEditable;
317
+ return [
318
+ ...(isResizable
319
+ ? [
320
+ columnResizing({
321
+ handleWidth: this.options.handleWidth,
322
+ cellMinWidth: this.options.cellMinWidth,
323
+ // @ts-ignore (incorrect type)
324
+ View: this.options.View,
325
+ // TODO: PR for @types/prosemirror-tables
326
+ // @ts-ignore (incorrect type)
327
+ lastColumnResizable: this.options.lastColumnResizable,
328
+ }),
329
+ ]
330
+ : []),
331
+ tableEditing({
332
+ allowTableNodeSelection: this.options.allowTableNodeSelection,
333
+ }),
334
+ ];
335
+ },
336
+ extendNodeSchema(extension) {
337
+ const context = {
338
+ name: extension.name,
339
+ options: extension.options,
340
+ storage: extension.storage,
341
+ };
342
+ return {
343
+ tableRole: callOrReturn(getExtensionField(extension, 'tableRole', context)),
344
+ };
345
+ },
346
346
  });
347
347
 
348
348
  export { Table, createColGroup, createTable, Table as default };