@tiptap/extension-table 2.0.0-beta.9 → 2.0.0-rc.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +4 -4
- package/dist/index.cjs +305 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.js +299 -0
- package/dist/index.js.map +1 -0
- package/dist/index.umd.js +307 -0
- package/dist/index.umd.js.map +1 -0
- package/dist/packages/extension-table/src/TableView.d.ts +2 -2
- package/dist/packages/extension-table/src/index.d.ts +1 -0
- package/dist/packages/extension-table/src/table.d.ts +28 -23
- package/dist/packages/extension-table/src/utilities/createCell.d.ts +2 -2
- package/dist/packages/extension-table/src/utilities/createTable.d.ts +2 -2
- package/dist/packages/extension-table/src/utilities/getTableNodeTypes.d.ts +1 -1
- package/dist/packages/extension-table/src/utilities/isCellSelection.d.ts +1 -1
- package/package.json +27 -11
- package/src/TableView.ts +17 -6
- package/src/index.ts +1 -0
- package/src/table.ts +181 -144
- package/src/utilities/createCell.ts +5 -6
- package/src/utilities/createTable.ts +12 -5
- package/src/utilities/deleteTableWhenAllCellsSelected.ts +2 -1
- package/src/utilities/getTableNodeTypes.ts +1 -1
- package/src/utilities/isCellSelection.ts +1 -1
- package/CHANGELOG.md +0 -134
- package/LICENSE.md +0 -21
- package/dist/tiptap-extension-table.bundle.umd.min.js +0 -2
- package/dist/tiptap-extension-table.bundle.umd.min.js.map +0 -1
- package/dist/tiptap-extension-table.cjs.js +0 -5920
- package/dist/tiptap-extension-table.cjs.js.map +0 -1
- package/dist/tiptap-extension-table.esm.js +0 -5916
- package/dist/tiptap-extension-table.esm.js.map +0 -1
- package/dist/tiptap-extension-table.umd.js +0 -5923
- package/dist/tiptap-extension-table.umd.js.map +0 -1
package/README.md
CHANGED
|
@@ -5,10 +5,10 @@
|
|
|
5
5
|
[](https://github.com/sponsors/ueberdosis)
|
|
6
6
|
|
|
7
7
|
## Introduction
|
|
8
|
-
|
|
8
|
+
Tiptap is a headless wrapper around [ProseMirror](https://ProseMirror.net) – a toolkit for building rich text WYSIWYG editors, which is already in use at many well-known companies such as *New York Times*, *The Guardian* or *Atlassian*.
|
|
9
9
|
|
|
10
|
-
##
|
|
11
|
-
Documentation can be found on the [
|
|
10
|
+
## Official Documentation
|
|
11
|
+
Documentation can be found on the [Tiptap website](https://tiptap.dev).
|
|
12
12
|
|
|
13
13
|
## License
|
|
14
|
-
|
|
14
|
+
Tiptap is open sourced software licensed under the [MIT license](https://github.com/ueberdosis/tiptap/blob/main/LICENSE.md).
|
package/dist/index.cjs
ADDED
|
@@ -0,0 +1,305 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
var core = require('@tiptap/core');
|
|
6
|
+
var state = require('@tiptap/pm/state');
|
|
7
|
+
var tables = require('@tiptap/pm/tables');
|
|
8
|
+
|
|
9
|
+
function updateColumns(node, colgroup, table, cellMinWidth, overrideCol, overrideValue) {
|
|
10
|
+
let totalWidth = 0;
|
|
11
|
+
let fixedWidth = true;
|
|
12
|
+
let nextDOM = colgroup.firstChild;
|
|
13
|
+
const row = node.firstChild;
|
|
14
|
+
for (let i = 0, col = 0; i < row.childCount; i += 1) {
|
|
15
|
+
const { colspan, colwidth } = row.child(i).attrs;
|
|
16
|
+
for (let j = 0; j < colspan; j += 1, col += 1) {
|
|
17
|
+
const hasWidth = overrideCol === col ? overrideValue : colwidth && colwidth[j];
|
|
18
|
+
const cssWidth = hasWidth ? `${hasWidth}px` : '';
|
|
19
|
+
totalWidth += hasWidth || cellMinWidth;
|
|
20
|
+
if (!hasWidth) {
|
|
21
|
+
fixedWidth = false;
|
|
22
|
+
}
|
|
23
|
+
if (!nextDOM) {
|
|
24
|
+
colgroup.appendChild(document.createElement('col')).style.width = cssWidth;
|
|
25
|
+
}
|
|
26
|
+
else {
|
|
27
|
+
if (nextDOM.style.width !== cssWidth) {
|
|
28
|
+
nextDOM.style.width = cssWidth;
|
|
29
|
+
}
|
|
30
|
+
nextDOM = nextDOM.nextSibling;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
while (nextDOM) {
|
|
35
|
+
const after = nextDOM.nextSibling;
|
|
36
|
+
nextDOM.parentNode.removeChild(nextDOM);
|
|
37
|
+
nextDOM = after;
|
|
38
|
+
}
|
|
39
|
+
if (fixedWidth) {
|
|
40
|
+
table.style.width = `${totalWidth}px`;
|
|
41
|
+
table.style.minWidth = '';
|
|
42
|
+
}
|
|
43
|
+
else {
|
|
44
|
+
table.style.width = '';
|
|
45
|
+
table.style.minWidth = `${totalWidth}px`;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
class TableView {
|
|
49
|
+
constructor(node, cellMinWidth) {
|
|
50
|
+
this.node = node;
|
|
51
|
+
this.cellMinWidth = cellMinWidth;
|
|
52
|
+
this.dom = document.createElement('div');
|
|
53
|
+
this.dom.className = 'tableWrapper';
|
|
54
|
+
this.table = this.dom.appendChild(document.createElement('table'));
|
|
55
|
+
this.colgroup = this.table.appendChild(document.createElement('colgroup'));
|
|
56
|
+
updateColumns(node, this.colgroup, this.table, cellMinWidth);
|
|
57
|
+
this.contentDOM = this.table.appendChild(document.createElement('tbody'));
|
|
58
|
+
}
|
|
59
|
+
update(node) {
|
|
60
|
+
if (node.type !== this.node.type) {
|
|
61
|
+
return false;
|
|
62
|
+
}
|
|
63
|
+
this.node = node;
|
|
64
|
+
updateColumns(node, this.colgroup, this.table, this.cellMinWidth);
|
|
65
|
+
return true;
|
|
66
|
+
}
|
|
67
|
+
ignoreMutation(mutation) {
|
|
68
|
+
return (mutation.type === 'attributes'
|
|
69
|
+
&& (mutation.target === this.table || this.colgroup.contains(mutation.target)));
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
function createCell(cellType, cellContent) {
|
|
74
|
+
if (cellContent) {
|
|
75
|
+
return cellType.createChecked(null, cellContent);
|
|
76
|
+
}
|
|
77
|
+
return cellType.createAndFill();
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
function getTableNodeTypes(schema) {
|
|
81
|
+
if (schema.cached.tableNodeTypes) {
|
|
82
|
+
return schema.cached.tableNodeTypes;
|
|
83
|
+
}
|
|
84
|
+
const roles = {};
|
|
85
|
+
Object.keys(schema.nodes).forEach(type => {
|
|
86
|
+
const nodeType = schema.nodes[type];
|
|
87
|
+
if (nodeType.spec.tableRole) {
|
|
88
|
+
roles[nodeType.spec.tableRole] = nodeType;
|
|
89
|
+
}
|
|
90
|
+
});
|
|
91
|
+
schema.cached.tableNodeTypes = roles;
|
|
92
|
+
return roles;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
function createTable(schema, rowsCount, colsCount, withHeaderRow, cellContent) {
|
|
96
|
+
const types = getTableNodeTypes(schema);
|
|
97
|
+
const headerCells = [];
|
|
98
|
+
const cells = [];
|
|
99
|
+
for (let index = 0; index < colsCount; index += 1) {
|
|
100
|
+
const cell = createCell(types.cell, cellContent);
|
|
101
|
+
if (cell) {
|
|
102
|
+
cells.push(cell);
|
|
103
|
+
}
|
|
104
|
+
if (withHeaderRow) {
|
|
105
|
+
const headerCell = createCell(types.header_cell, cellContent);
|
|
106
|
+
if (headerCell) {
|
|
107
|
+
headerCells.push(headerCell);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
const rows = [];
|
|
112
|
+
for (let index = 0; index < rowsCount; index += 1) {
|
|
113
|
+
rows.push(types.row.createChecked(null, withHeaderRow && index === 0 ? headerCells : cells));
|
|
114
|
+
}
|
|
115
|
+
return types.table.createChecked(null, rows);
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
function isCellSelection(value) {
|
|
119
|
+
return value instanceof tables.CellSelection;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
const deleteTableWhenAllCellsSelected = ({ editor }) => {
|
|
123
|
+
const { selection } = editor.state;
|
|
124
|
+
if (!isCellSelection(selection)) {
|
|
125
|
+
return false;
|
|
126
|
+
}
|
|
127
|
+
let cellCount = 0;
|
|
128
|
+
const table = core.findParentNodeClosestToPos(selection.ranges[0].$from, node => {
|
|
129
|
+
return node.type.name === 'table';
|
|
130
|
+
});
|
|
131
|
+
table === null || table === void 0 ? void 0 : table.node.descendants(node => {
|
|
132
|
+
if (node.type.name === 'table') {
|
|
133
|
+
return false;
|
|
134
|
+
}
|
|
135
|
+
if (['tableCell', 'tableHeader'].includes(node.type.name)) {
|
|
136
|
+
cellCount += 1;
|
|
137
|
+
}
|
|
138
|
+
});
|
|
139
|
+
const allCellsSelected = cellCount === selection.ranges.length;
|
|
140
|
+
if (!allCellsSelected) {
|
|
141
|
+
return false;
|
|
142
|
+
}
|
|
143
|
+
editor.commands.deleteTable();
|
|
144
|
+
return true;
|
|
145
|
+
};
|
|
146
|
+
|
|
147
|
+
const Table = core.Node.create({
|
|
148
|
+
name: 'table',
|
|
149
|
+
// @ts-ignore
|
|
150
|
+
addOptions() {
|
|
151
|
+
return {
|
|
152
|
+
HTMLAttributes: {},
|
|
153
|
+
resizable: false,
|
|
154
|
+
handleWidth: 5,
|
|
155
|
+
cellMinWidth: 25,
|
|
156
|
+
// TODO: fix
|
|
157
|
+
View: TableView,
|
|
158
|
+
lastColumnResizable: true,
|
|
159
|
+
allowTableNodeSelection: false,
|
|
160
|
+
};
|
|
161
|
+
},
|
|
162
|
+
content: 'tableRow+',
|
|
163
|
+
tableRole: 'table',
|
|
164
|
+
isolating: true,
|
|
165
|
+
group: 'block',
|
|
166
|
+
parseHTML() {
|
|
167
|
+
return [{ tag: 'table' }];
|
|
168
|
+
},
|
|
169
|
+
renderHTML({ HTMLAttributes }) {
|
|
170
|
+
return ['table', core.mergeAttributes(this.options.HTMLAttributes, HTMLAttributes), ['tbody', 0]];
|
|
171
|
+
},
|
|
172
|
+
addCommands() {
|
|
173
|
+
return {
|
|
174
|
+
insertTable: ({ rows = 3, cols = 3, withHeaderRow = true } = {}) => ({ tr, dispatch, editor }) => {
|
|
175
|
+
const node = createTable(editor.schema, rows, cols, withHeaderRow);
|
|
176
|
+
if (dispatch) {
|
|
177
|
+
const offset = tr.selection.anchor + 1;
|
|
178
|
+
tr.replaceSelectionWith(node)
|
|
179
|
+
.scrollIntoView()
|
|
180
|
+
.setSelection(state.TextSelection.near(tr.doc.resolve(offset)));
|
|
181
|
+
}
|
|
182
|
+
return true;
|
|
183
|
+
},
|
|
184
|
+
addColumnBefore: () => ({ state, dispatch }) => {
|
|
185
|
+
return tables.addColumnBefore(state, dispatch);
|
|
186
|
+
},
|
|
187
|
+
addColumnAfter: () => ({ state, dispatch }) => {
|
|
188
|
+
return tables.addColumnAfter(state, dispatch);
|
|
189
|
+
},
|
|
190
|
+
deleteColumn: () => ({ state, dispatch }) => {
|
|
191
|
+
return tables.deleteColumn(state, dispatch);
|
|
192
|
+
},
|
|
193
|
+
addRowBefore: () => ({ state, dispatch }) => {
|
|
194
|
+
return tables.addRowBefore(state, dispatch);
|
|
195
|
+
},
|
|
196
|
+
addRowAfter: () => ({ state, dispatch }) => {
|
|
197
|
+
return tables.addRowAfter(state, dispatch);
|
|
198
|
+
},
|
|
199
|
+
deleteRow: () => ({ state, dispatch }) => {
|
|
200
|
+
return tables.deleteRow(state, dispatch);
|
|
201
|
+
},
|
|
202
|
+
deleteTable: () => ({ state, dispatch }) => {
|
|
203
|
+
return tables.deleteTable(state, dispatch);
|
|
204
|
+
},
|
|
205
|
+
mergeCells: () => ({ state, dispatch }) => {
|
|
206
|
+
return tables.mergeCells(state, dispatch);
|
|
207
|
+
},
|
|
208
|
+
splitCell: () => ({ state, dispatch }) => {
|
|
209
|
+
return tables.splitCell(state, dispatch);
|
|
210
|
+
},
|
|
211
|
+
toggleHeaderColumn: () => ({ state, dispatch }) => {
|
|
212
|
+
return tables.toggleHeader('column')(state, dispatch);
|
|
213
|
+
},
|
|
214
|
+
toggleHeaderRow: () => ({ state, dispatch }) => {
|
|
215
|
+
return tables.toggleHeader('row')(state, dispatch);
|
|
216
|
+
},
|
|
217
|
+
toggleHeaderCell: () => ({ state, dispatch }) => {
|
|
218
|
+
return tables.toggleHeaderCell(state, dispatch);
|
|
219
|
+
},
|
|
220
|
+
mergeOrSplit: () => ({ state, dispatch }) => {
|
|
221
|
+
if (tables.mergeCells(state, dispatch)) {
|
|
222
|
+
return true;
|
|
223
|
+
}
|
|
224
|
+
return tables.splitCell(state, dispatch);
|
|
225
|
+
},
|
|
226
|
+
setCellAttribute: (name, value) => ({ state, dispatch }) => {
|
|
227
|
+
return tables.setCellAttr(name, value)(state, dispatch);
|
|
228
|
+
},
|
|
229
|
+
goToNextCell: () => ({ state, dispatch }) => {
|
|
230
|
+
return tables.goToNextCell(1)(state, dispatch);
|
|
231
|
+
},
|
|
232
|
+
goToPreviousCell: () => ({ state, dispatch }) => {
|
|
233
|
+
return tables.goToNextCell(-1)(state, dispatch);
|
|
234
|
+
},
|
|
235
|
+
fixTables: () => ({ state, dispatch }) => {
|
|
236
|
+
if (dispatch) {
|
|
237
|
+
tables.fixTables(state);
|
|
238
|
+
}
|
|
239
|
+
return true;
|
|
240
|
+
},
|
|
241
|
+
setCellSelection: position => ({ tr, dispatch }) => {
|
|
242
|
+
if (dispatch) {
|
|
243
|
+
const selection = tables.CellSelection.create(tr.doc, position.anchorCell, position.headCell);
|
|
244
|
+
// @ts-ignore
|
|
245
|
+
tr.setSelection(selection);
|
|
246
|
+
}
|
|
247
|
+
return true;
|
|
248
|
+
},
|
|
249
|
+
};
|
|
250
|
+
},
|
|
251
|
+
addKeyboardShortcuts() {
|
|
252
|
+
return {
|
|
253
|
+
Tab: () => {
|
|
254
|
+
if (this.editor.commands.goToNextCell()) {
|
|
255
|
+
return true;
|
|
256
|
+
}
|
|
257
|
+
if (!this.editor.can().addRowAfter()) {
|
|
258
|
+
return false;
|
|
259
|
+
}
|
|
260
|
+
return this.editor.chain().addRowAfter().goToNextCell().run();
|
|
261
|
+
},
|
|
262
|
+
'Shift-Tab': () => this.editor.commands.goToPreviousCell(),
|
|
263
|
+
Backspace: deleteTableWhenAllCellsSelected,
|
|
264
|
+
'Mod-Backspace': deleteTableWhenAllCellsSelected,
|
|
265
|
+
Delete: deleteTableWhenAllCellsSelected,
|
|
266
|
+
'Mod-Delete': deleteTableWhenAllCellsSelected,
|
|
267
|
+
};
|
|
268
|
+
},
|
|
269
|
+
addProseMirrorPlugins() {
|
|
270
|
+
const isResizable = this.options.resizable && this.editor.isEditable;
|
|
271
|
+
return [
|
|
272
|
+
...(isResizable
|
|
273
|
+
? [
|
|
274
|
+
tables.columnResizing({
|
|
275
|
+
handleWidth: this.options.handleWidth,
|
|
276
|
+
cellMinWidth: this.options.cellMinWidth,
|
|
277
|
+
// @ts-ignore (incorrect type)
|
|
278
|
+
View: this.options.View,
|
|
279
|
+
// TODO: PR for @types/prosemirror-tables
|
|
280
|
+
// @ts-ignore (incorrect type)
|
|
281
|
+
lastColumnResizable: this.options.lastColumnResizable,
|
|
282
|
+
}),
|
|
283
|
+
]
|
|
284
|
+
: []),
|
|
285
|
+
tables.tableEditing({
|
|
286
|
+
allowTableNodeSelection: this.options.allowTableNodeSelection,
|
|
287
|
+
}),
|
|
288
|
+
];
|
|
289
|
+
},
|
|
290
|
+
extendNodeSchema(extension) {
|
|
291
|
+
const context = {
|
|
292
|
+
name: extension.name,
|
|
293
|
+
options: extension.options,
|
|
294
|
+
storage: extension.storage,
|
|
295
|
+
};
|
|
296
|
+
return {
|
|
297
|
+
tableRole: core.callOrReturn(core.getExtensionField(extension, 'tableRole', context)),
|
|
298
|
+
};
|
|
299
|
+
},
|
|
300
|
+
});
|
|
301
|
+
|
|
302
|
+
exports.Table = Table;
|
|
303
|
+
exports.createTable = createTable;
|
|
304
|
+
exports["default"] = Table;
|
|
305
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../src/TableView.ts","../src/utilities/createCell.ts","../src/utilities/getTableNodeTypes.ts","../src/utilities/createTable.ts","../src/utilities/isCellSelection.ts","../src/utilities/deleteTableWhenAllCellsSelected.ts","../src/table.ts"],"sourcesContent":["// @ts-nocheck\nimport { Node as ProseMirrorNode } from '@tiptap/pm/model'\nimport { NodeView } from '@tiptap/pm/view'\n\nexport function updateColumns(\n node: ProseMirrorNode,\n colgroup: Element,\n table: Element,\n cellMinWidth: number,\n overrideCol?: number,\n overrideValue?: any,\n) {\n let totalWidth = 0\n let fixedWidth = true\n let nextDOM = colgroup.firstChild\n const row = node.firstChild\n\n for (let i = 0, col = 0; i < row.childCount; i += 1) {\n const { colspan, colwidth } = row.child(i).attrs\n\n for (let j = 0; j < colspan; j += 1, col += 1) {\n const hasWidth = overrideCol === col ? overrideValue : colwidth && colwidth[j]\n const cssWidth = hasWidth ? `${hasWidth}px` : ''\n\n totalWidth += hasWidth || cellMinWidth\n\n if (!hasWidth) {\n fixedWidth = false\n }\n\n if (!nextDOM) {\n colgroup.appendChild(document.createElement('col')).style.width = cssWidth\n } else {\n if (nextDOM.style.width !== cssWidth) {\n nextDOM.style.width = cssWidth\n }\n\n nextDOM = nextDOM.nextSibling\n }\n }\n }\n\n while (nextDOM) {\n const after = nextDOM.nextSibling\n\n nextDOM.parentNode.removeChild(nextDOM)\n nextDOM = after\n }\n\n if (fixedWidth) {\n table.style.width = `${totalWidth}px`\n table.style.minWidth = ''\n } else {\n table.style.width = ''\n table.style.minWidth = `${totalWidth}px`\n }\n}\n\nexport class TableView implements NodeView {\n node: ProseMirrorNode\n\n cellMinWidth: number\n\n dom: Element\n\n table: Element\n\n colgroup: Element\n\n contentDOM: Element\n\n constructor(node: ProseMirrorNode, cellMinWidth: number) {\n this.node = node\n this.cellMinWidth = cellMinWidth\n this.dom = document.createElement('div')\n this.dom.className = 'tableWrapper'\n this.table = this.dom.appendChild(document.createElement('table'))\n this.colgroup = this.table.appendChild(document.createElement('colgroup'))\n updateColumns(node, this.colgroup, this.table, cellMinWidth)\n this.contentDOM = this.table.appendChild(document.createElement('tbody'))\n }\n\n update(node: ProseMirrorNode) {\n if (node.type !== this.node.type) {\n return false\n }\n\n this.node = node\n updateColumns(node, this.colgroup, this.table, this.cellMinWidth)\n\n return true\n }\n\n ignoreMutation(mutation: MutationRecord | { type: 'selection'; target: Element }) {\n return (\n mutation.type === 'attributes'\n && (mutation.target === this.table || this.colgroup.contains(mutation.target))\n )\n }\n}\n","import { Fragment, Node as ProsemirrorNode, NodeType } from '@tiptap/pm/model'\n\nexport function createCell(\n cellType: NodeType,\n cellContent?: Fragment | ProsemirrorNode | Array<ProsemirrorNode>,\n): ProsemirrorNode | null | undefined {\n if (cellContent) {\n return cellType.createChecked(null, cellContent)\n }\n\n return cellType.createAndFill()\n}\n","import { NodeType, Schema } from '@tiptap/pm/model'\n\nexport function getTableNodeTypes(schema: Schema): { [key: string]: NodeType } {\n if (schema.cached.tableNodeTypes) {\n return schema.cached.tableNodeTypes\n }\n\n const roles: { [key: string]: NodeType } = {}\n\n Object.keys(schema.nodes).forEach(type => {\n const nodeType = schema.nodes[type]\n\n if (nodeType.spec.tableRole) {\n roles[nodeType.spec.tableRole] = nodeType\n }\n })\n\n schema.cached.tableNodeTypes = roles\n\n return roles\n}\n","import { Fragment, Node as ProsemirrorNode, Schema } from '@tiptap/pm/model'\n\nimport { createCell } from './createCell'\nimport { getTableNodeTypes } from './getTableNodeTypes'\n\nexport function createTable(\n schema: Schema,\n rowsCount: number,\n colsCount: number,\n withHeaderRow: boolean,\n cellContent?: Fragment | ProsemirrorNode | Array<ProsemirrorNode>,\n): ProsemirrorNode {\n const types = getTableNodeTypes(schema)\n const headerCells: ProsemirrorNode[] = []\n const cells: ProsemirrorNode[] = []\n\n for (let index = 0; index < colsCount; index += 1) {\n const cell = createCell(types.cell, cellContent)\n\n if (cell) {\n cells.push(cell)\n }\n\n if (withHeaderRow) {\n const headerCell = createCell(types.header_cell, cellContent)\n\n if (headerCell) {\n headerCells.push(headerCell)\n }\n }\n }\n\n const rows: ProsemirrorNode[] = []\n\n for (let index = 0; index < rowsCount; index += 1) {\n rows.push(types.row.createChecked(null, withHeaderRow && index === 0 ? headerCells : cells))\n }\n\n return types.table.createChecked(null, rows)\n}\n","import { CellSelection } from '@tiptap/pm/tables'\n\nexport function isCellSelection(value: unknown): value is CellSelection {\n return value instanceof CellSelection\n}\n","import { findParentNodeClosestToPos, KeyboardShortcutCommand } from '@tiptap/core'\n\nimport { isCellSelection } from './isCellSelection'\n\nexport const deleteTableWhenAllCellsSelected: KeyboardShortcutCommand = ({ editor }) => {\n const { selection } = editor.state\n\n if (!isCellSelection(selection)) {\n return false\n }\n\n let cellCount = 0\n const table = findParentNodeClosestToPos(selection.ranges[0].$from, node => {\n return node.type.name === 'table'\n })\n\n table?.node.descendants(node => {\n if (node.type.name === 'table') {\n return false\n }\n\n if (['tableCell', 'tableHeader'].includes(node.type.name)) {\n cellCount += 1\n }\n })\n\n const allCellsSelected = cellCount === selection.ranges.length\n\n if (!allCellsSelected) {\n return false\n }\n\n editor.commands.deleteTable()\n\n return true\n}\n","import {\n callOrReturn, getExtensionField, mergeAttributes, Node, ParentConfig,\n} from '@tiptap/core'\nimport { TextSelection } from '@tiptap/pm/state'\nimport {\n addColumnAfter,\n addColumnBefore,\n addRowAfter,\n addRowBefore,\n CellSelection,\n columnResizing,\n deleteColumn,\n deleteRow,\n deleteTable,\n fixTables,\n goToNextCell,\n mergeCells,\n setCellAttr,\n splitCell,\n tableEditing,\n toggleHeader,\n toggleHeaderCell,\n} from '@tiptap/pm/tables'\nimport { NodeView } from '@tiptap/pm/view'\n\nimport { TableView } from './TableView'\nimport { createTable } from './utilities/createTable'\nimport { deleteTableWhenAllCellsSelected } from './utilities/deleteTableWhenAllCellsSelected'\n\nexport interface TableOptions {\n HTMLAttributes: Record<string, any>\n resizable: boolean\n handleWidth: number\n cellMinWidth: number\n View: NodeView\n lastColumnResizable: boolean\n allowTableNodeSelection: boolean\n}\n\ndeclare module '@tiptap/core' {\n interface Commands<ReturnType> {\n table: {\n insertTable: (options?: {\n rows?: number\n cols?: number\n withHeaderRow?: boolean\n }) => ReturnType\n addColumnBefore: () => ReturnType\n addColumnAfter: () => ReturnType\n deleteColumn: () => ReturnType\n addRowBefore: () => ReturnType\n addRowAfter: () => ReturnType\n deleteRow: () => ReturnType\n deleteTable: () => ReturnType\n mergeCells: () => ReturnType\n splitCell: () => ReturnType\n toggleHeaderColumn: () => ReturnType\n toggleHeaderRow: () => ReturnType\n toggleHeaderCell: () => ReturnType\n mergeOrSplit: () => ReturnType\n setCellAttribute: (name: string, value: any) => ReturnType\n goToNextCell: () => ReturnType\n goToPreviousCell: () => ReturnType\n fixTables: () => ReturnType\n setCellSelection: (position: { anchorCell: number; headCell?: number }) => ReturnType\n }\n }\n\n interface NodeConfig<Options, Storage> {\n /**\n * Table Role\n */\n tableRole?:\n | string\n | ((this: {\n name: string\n options: Options\n storage: Storage\n parent: ParentConfig<NodeConfig<Options>>['tableRole']\n }) => string)\n }\n}\n\nexport const Table = Node.create<TableOptions>({\n name: 'table',\n\n // @ts-ignore\n addOptions() {\n return {\n HTMLAttributes: {},\n resizable: false,\n handleWidth: 5,\n cellMinWidth: 25,\n // TODO: fix\n View: TableView,\n lastColumnResizable: true,\n allowTableNodeSelection: false,\n }\n },\n\n content: 'tableRow+',\n\n tableRole: 'table',\n\n isolating: true,\n\n group: 'block',\n\n parseHTML() {\n return [{ tag: 'table' }]\n },\n\n renderHTML({ HTMLAttributes }) {\n return ['table', mergeAttributes(this.options.HTMLAttributes, HTMLAttributes), ['tbody', 0]]\n },\n\n addCommands() {\n return {\n insertTable:\n ({ rows = 3, cols = 3, withHeaderRow = true } = {}) => ({ tr, dispatch, editor }) => {\n const node = createTable(editor.schema, rows, cols, withHeaderRow)\n\n if (dispatch) {\n const offset = tr.selection.anchor + 1\n\n tr.replaceSelectionWith(node)\n .scrollIntoView()\n .setSelection(TextSelection.near(tr.doc.resolve(offset)))\n }\n\n return true\n },\n addColumnBefore:\n () => ({ state, dispatch }) => {\n return addColumnBefore(state, dispatch)\n },\n addColumnAfter:\n () => ({ state, dispatch }) => {\n return addColumnAfter(state, dispatch)\n },\n deleteColumn:\n () => ({ state, dispatch }) => {\n return deleteColumn(state, dispatch)\n },\n addRowBefore:\n () => ({ state, dispatch }) => {\n return addRowBefore(state, dispatch)\n },\n addRowAfter:\n () => ({ state, dispatch }) => {\n return addRowAfter(state, dispatch)\n },\n deleteRow:\n () => ({ state, dispatch }) => {\n return deleteRow(state, dispatch)\n },\n deleteTable:\n () => ({ state, dispatch }) => {\n return deleteTable(state, dispatch)\n },\n mergeCells:\n () => ({ state, dispatch }) => {\n return mergeCells(state, dispatch)\n },\n splitCell:\n () => ({ state, dispatch }) => {\n return splitCell(state, dispatch)\n },\n toggleHeaderColumn:\n () => ({ state, dispatch }) => {\n return toggleHeader('column')(state, dispatch)\n },\n toggleHeaderRow:\n () => ({ state, dispatch }) => {\n return toggleHeader('row')(state, dispatch)\n },\n toggleHeaderCell:\n () => ({ state, dispatch }) => {\n return toggleHeaderCell(state, dispatch)\n },\n mergeOrSplit:\n () => ({ state, dispatch }) => {\n if (mergeCells(state, dispatch)) {\n return true\n }\n\n return splitCell(state, dispatch)\n },\n setCellAttribute:\n (name, value) => ({ state, dispatch }) => {\n return setCellAttr(name, value)(state, dispatch)\n },\n goToNextCell:\n () => ({ state, dispatch }) => {\n return goToNextCell(1)(state, dispatch)\n },\n goToPreviousCell:\n () => ({ state, dispatch }) => {\n return goToNextCell(-1)(state, dispatch)\n },\n fixTables:\n () => ({ state, dispatch }) => {\n if (dispatch) {\n fixTables(state)\n }\n\n return true\n },\n setCellSelection:\n position => ({ tr, dispatch }) => {\n if (dispatch) {\n const selection = CellSelection.create(tr.doc, position.anchorCell, position.headCell)\n\n // @ts-ignore\n tr.setSelection(selection)\n }\n\n return true\n },\n }\n },\n\n addKeyboardShortcuts() {\n return {\n Tab: () => {\n if (this.editor.commands.goToNextCell()) {\n return true\n }\n\n if (!this.editor.can().addRowAfter()) {\n return false\n }\n\n return this.editor.chain().addRowAfter().goToNextCell().run()\n },\n 'Shift-Tab': () => this.editor.commands.goToPreviousCell(),\n Backspace: deleteTableWhenAllCellsSelected,\n 'Mod-Backspace': deleteTableWhenAllCellsSelected,\n Delete: deleteTableWhenAllCellsSelected,\n 'Mod-Delete': deleteTableWhenAllCellsSelected,\n }\n },\n\n addProseMirrorPlugins() {\n const isResizable = this.options.resizable && this.editor.isEditable\n\n return [\n ...(isResizable\n ? [\n columnResizing({\n handleWidth: this.options.handleWidth,\n cellMinWidth: this.options.cellMinWidth,\n // @ts-ignore (incorrect type)\n View: this.options.View,\n // TODO: PR for @types/prosemirror-tables\n // @ts-ignore (incorrect type)\n lastColumnResizable: this.options.lastColumnResizable,\n }),\n ]\n : []),\n tableEditing({\n allowTableNodeSelection: this.options.allowTableNodeSelection,\n }),\n ]\n },\n\n extendNodeSchema(extension) {\n const context = {\n name: extension.name,\n options: extension.options,\n storage: extension.storage,\n }\n\n return {\n tableRole: callOrReturn(getExtensionField(extension, 'tableRole', context)),\n }\n },\n})\n"],"names":["CellSelection","findParentNodeClosestToPos","Node","mergeAttributes","TextSelection","addColumnBefore","addColumnAfter","deleteColumn","addRowBefore","addRowAfter","deleteRow","deleteTable","mergeCells","splitCell","toggleHeader","toggleHeaderCell","setCellAttr","goToNextCell","fixTables","columnResizing","tableEditing","callOrReturn","getExtensionField"],"mappings":"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"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,299 @@
|
|
|
1
|
+
import { findParentNodeClosestToPos, Node, mergeAttributes, callOrReturn, getExtensionField } from '@tiptap/core';
|
|
2
|
+
import { TextSelection } from '@tiptap/pm/state';
|
|
3
|
+
import { CellSelection, addColumnBefore, addColumnAfter, deleteColumn, addRowBefore, addRowAfter, deleteRow, deleteTable, mergeCells, splitCell, toggleHeader, toggleHeaderCell, setCellAttr, goToNextCell, fixTables, columnResizing, tableEditing } from '@tiptap/pm/tables';
|
|
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
|
+
}
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
function createCell(cellType, cellContent) {
|
|
70
|
+
if (cellContent) {
|
|
71
|
+
return cellType.createChecked(null, cellContent);
|
|
72
|
+
}
|
|
73
|
+
return cellType.createAndFill();
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
function getTableNodeTypes(schema) {
|
|
77
|
+
if (schema.cached.tableNodeTypes) {
|
|
78
|
+
return schema.cached.tableNodeTypes;
|
|
79
|
+
}
|
|
80
|
+
const roles = {};
|
|
81
|
+
Object.keys(schema.nodes).forEach(type => {
|
|
82
|
+
const nodeType = schema.nodes[type];
|
|
83
|
+
if (nodeType.spec.tableRole) {
|
|
84
|
+
roles[nodeType.spec.tableRole] = nodeType;
|
|
85
|
+
}
|
|
86
|
+
});
|
|
87
|
+
schema.cached.tableNodeTypes = roles;
|
|
88
|
+
return roles;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
function createTable(schema, rowsCount, colsCount, withHeaderRow, cellContent) {
|
|
92
|
+
const types = getTableNodeTypes(schema);
|
|
93
|
+
const headerCells = [];
|
|
94
|
+
const cells = [];
|
|
95
|
+
for (let index = 0; index < colsCount; index += 1) {
|
|
96
|
+
const cell = createCell(types.cell, cellContent);
|
|
97
|
+
if (cell) {
|
|
98
|
+
cells.push(cell);
|
|
99
|
+
}
|
|
100
|
+
if (withHeaderRow) {
|
|
101
|
+
const headerCell = createCell(types.header_cell, cellContent);
|
|
102
|
+
if (headerCell) {
|
|
103
|
+
headerCells.push(headerCell);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
const rows = [];
|
|
108
|
+
for (let index = 0; index < rowsCount; index += 1) {
|
|
109
|
+
rows.push(types.row.createChecked(null, withHeaderRow && index === 0 ? headerCells : cells));
|
|
110
|
+
}
|
|
111
|
+
return types.table.createChecked(null, rows);
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
function isCellSelection(value) {
|
|
115
|
+
return value instanceof CellSelection;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
const deleteTableWhenAllCellsSelected = ({ editor }) => {
|
|
119
|
+
const { selection } = editor.state;
|
|
120
|
+
if (!isCellSelection(selection)) {
|
|
121
|
+
return false;
|
|
122
|
+
}
|
|
123
|
+
let cellCount = 0;
|
|
124
|
+
const table = findParentNodeClosestToPos(selection.ranges[0].$from, node => {
|
|
125
|
+
return node.type.name === 'table';
|
|
126
|
+
});
|
|
127
|
+
table === null || table === void 0 ? void 0 : table.node.descendants(node => {
|
|
128
|
+
if (node.type.name === 'table') {
|
|
129
|
+
return false;
|
|
130
|
+
}
|
|
131
|
+
if (['tableCell', 'tableHeader'].includes(node.type.name)) {
|
|
132
|
+
cellCount += 1;
|
|
133
|
+
}
|
|
134
|
+
});
|
|
135
|
+
const allCellsSelected = cellCount === selection.ranges.length;
|
|
136
|
+
if (!allCellsSelected) {
|
|
137
|
+
return false;
|
|
138
|
+
}
|
|
139
|
+
editor.commands.deleteTable();
|
|
140
|
+
return true;
|
|
141
|
+
};
|
|
142
|
+
|
|
143
|
+
const Table = Node.create({
|
|
144
|
+
name: 'table',
|
|
145
|
+
// @ts-ignore
|
|
146
|
+
addOptions() {
|
|
147
|
+
return {
|
|
148
|
+
HTMLAttributes: {},
|
|
149
|
+
resizable: false,
|
|
150
|
+
handleWidth: 5,
|
|
151
|
+
cellMinWidth: 25,
|
|
152
|
+
// TODO: fix
|
|
153
|
+
View: TableView,
|
|
154
|
+
lastColumnResizable: true,
|
|
155
|
+
allowTableNodeSelection: false,
|
|
156
|
+
};
|
|
157
|
+
},
|
|
158
|
+
content: 'tableRow+',
|
|
159
|
+
tableRole: 'table',
|
|
160
|
+
isolating: true,
|
|
161
|
+
group: 'block',
|
|
162
|
+
parseHTML() {
|
|
163
|
+
return [{ tag: 'table' }];
|
|
164
|
+
},
|
|
165
|
+
renderHTML({ HTMLAttributes }) {
|
|
166
|
+
return ['table', mergeAttributes(this.options.HTMLAttributes, HTMLAttributes), ['tbody', 0]];
|
|
167
|
+
},
|
|
168
|
+
addCommands() {
|
|
169
|
+
return {
|
|
170
|
+
insertTable: ({ rows = 3, cols = 3, withHeaderRow = true } = {}) => ({ tr, dispatch, editor }) => {
|
|
171
|
+
const node = createTable(editor.schema, rows, cols, withHeaderRow);
|
|
172
|
+
if (dispatch) {
|
|
173
|
+
const offset = tr.selection.anchor + 1;
|
|
174
|
+
tr.replaceSelectionWith(node)
|
|
175
|
+
.scrollIntoView()
|
|
176
|
+
.setSelection(TextSelection.near(tr.doc.resolve(offset)));
|
|
177
|
+
}
|
|
178
|
+
return true;
|
|
179
|
+
},
|
|
180
|
+
addColumnBefore: () => ({ state, dispatch }) => {
|
|
181
|
+
return addColumnBefore(state, dispatch);
|
|
182
|
+
},
|
|
183
|
+
addColumnAfter: () => ({ state, dispatch }) => {
|
|
184
|
+
return addColumnAfter(state, dispatch);
|
|
185
|
+
},
|
|
186
|
+
deleteColumn: () => ({ state, dispatch }) => {
|
|
187
|
+
return deleteColumn(state, dispatch);
|
|
188
|
+
},
|
|
189
|
+
addRowBefore: () => ({ state, dispatch }) => {
|
|
190
|
+
return addRowBefore(state, dispatch);
|
|
191
|
+
},
|
|
192
|
+
addRowAfter: () => ({ state, dispatch }) => {
|
|
193
|
+
return addRowAfter(state, dispatch);
|
|
194
|
+
},
|
|
195
|
+
deleteRow: () => ({ state, dispatch }) => {
|
|
196
|
+
return deleteRow(state, dispatch);
|
|
197
|
+
},
|
|
198
|
+
deleteTable: () => ({ state, dispatch }) => {
|
|
199
|
+
return deleteTable(state, dispatch);
|
|
200
|
+
},
|
|
201
|
+
mergeCells: () => ({ state, dispatch }) => {
|
|
202
|
+
return mergeCells(state, dispatch);
|
|
203
|
+
},
|
|
204
|
+
splitCell: () => ({ state, dispatch }) => {
|
|
205
|
+
return splitCell(state, dispatch);
|
|
206
|
+
},
|
|
207
|
+
toggleHeaderColumn: () => ({ state, dispatch }) => {
|
|
208
|
+
return toggleHeader('column')(state, dispatch);
|
|
209
|
+
},
|
|
210
|
+
toggleHeaderRow: () => ({ state, dispatch }) => {
|
|
211
|
+
return toggleHeader('row')(state, dispatch);
|
|
212
|
+
},
|
|
213
|
+
toggleHeaderCell: () => ({ state, dispatch }) => {
|
|
214
|
+
return toggleHeaderCell(state, dispatch);
|
|
215
|
+
},
|
|
216
|
+
mergeOrSplit: () => ({ state, dispatch }) => {
|
|
217
|
+
if (mergeCells(state, dispatch)) {
|
|
218
|
+
return true;
|
|
219
|
+
}
|
|
220
|
+
return splitCell(state, dispatch);
|
|
221
|
+
},
|
|
222
|
+
setCellAttribute: (name, value) => ({ state, dispatch }) => {
|
|
223
|
+
return setCellAttr(name, value)(state, dispatch);
|
|
224
|
+
},
|
|
225
|
+
goToNextCell: () => ({ state, dispatch }) => {
|
|
226
|
+
return goToNextCell(1)(state, dispatch);
|
|
227
|
+
},
|
|
228
|
+
goToPreviousCell: () => ({ state, dispatch }) => {
|
|
229
|
+
return goToNextCell(-1)(state, dispatch);
|
|
230
|
+
},
|
|
231
|
+
fixTables: () => ({ state, dispatch }) => {
|
|
232
|
+
if (dispatch) {
|
|
233
|
+
fixTables(state);
|
|
234
|
+
}
|
|
235
|
+
return true;
|
|
236
|
+
},
|
|
237
|
+
setCellSelection: position => ({ tr, dispatch }) => {
|
|
238
|
+
if (dispatch) {
|
|
239
|
+
const selection = CellSelection.create(tr.doc, position.anchorCell, position.headCell);
|
|
240
|
+
// @ts-ignore
|
|
241
|
+
tr.setSelection(selection);
|
|
242
|
+
}
|
|
243
|
+
return true;
|
|
244
|
+
},
|
|
245
|
+
};
|
|
246
|
+
},
|
|
247
|
+
addKeyboardShortcuts() {
|
|
248
|
+
return {
|
|
249
|
+
Tab: () => {
|
|
250
|
+
if (this.editor.commands.goToNextCell()) {
|
|
251
|
+
return true;
|
|
252
|
+
}
|
|
253
|
+
if (!this.editor.can().addRowAfter()) {
|
|
254
|
+
return false;
|
|
255
|
+
}
|
|
256
|
+
return this.editor.chain().addRowAfter().goToNextCell().run();
|
|
257
|
+
},
|
|
258
|
+
'Shift-Tab': () => this.editor.commands.goToPreviousCell(),
|
|
259
|
+
Backspace: deleteTableWhenAllCellsSelected,
|
|
260
|
+
'Mod-Backspace': deleteTableWhenAllCellsSelected,
|
|
261
|
+
Delete: deleteTableWhenAllCellsSelected,
|
|
262
|
+
'Mod-Delete': deleteTableWhenAllCellsSelected,
|
|
263
|
+
};
|
|
264
|
+
},
|
|
265
|
+
addProseMirrorPlugins() {
|
|
266
|
+
const isResizable = this.options.resizable && this.editor.isEditable;
|
|
267
|
+
return [
|
|
268
|
+
...(isResizable
|
|
269
|
+
? [
|
|
270
|
+
columnResizing({
|
|
271
|
+
handleWidth: this.options.handleWidth,
|
|
272
|
+
cellMinWidth: this.options.cellMinWidth,
|
|
273
|
+
// @ts-ignore (incorrect type)
|
|
274
|
+
View: this.options.View,
|
|
275
|
+
// TODO: PR for @types/prosemirror-tables
|
|
276
|
+
// @ts-ignore (incorrect type)
|
|
277
|
+
lastColumnResizable: this.options.lastColumnResizable,
|
|
278
|
+
}),
|
|
279
|
+
]
|
|
280
|
+
: []),
|
|
281
|
+
tableEditing({
|
|
282
|
+
allowTableNodeSelection: this.options.allowTableNodeSelection,
|
|
283
|
+
}),
|
|
284
|
+
];
|
|
285
|
+
},
|
|
286
|
+
extendNodeSchema(extension) {
|
|
287
|
+
const context = {
|
|
288
|
+
name: extension.name,
|
|
289
|
+
options: extension.options,
|
|
290
|
+
storage: extension.storage,
|
|
291
|
+
};
|
|
292
|
+
return {
|
|
293
|
+
tableRole: callOrReturn(getExtensionField(extension, 'tableRole', context)),
|
|
294
|
+
};
|
|
295
|
+
},
|
|
296
|
+
});
|
|
297
|
+
|
|
298
|
+
export { Table, createTable, Table as default };
|
|
299
|
+
//# sourceMappingURL=index.js.map
|