@ctzhian/tiptap 1.13.9 → 2.0.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 (47) hide show
  1. package/dist/Editor/demo.js +1 -1
  2. package/dist/Editor/index.js +17 -0
  3. package/dist/component/CustomBubbleMenu/index.js +1 -1
  4. package/dist/component/CustomDragHandle/index.js +3 -59
  5. package/dist/component/Icons/delete-back-2-line-icon.d.ts +6 -0
  6. package/dist/component/Icons/delete-back-2-line-icon.js +13 -0
  7. package/dist/component/Menu/index.js +5 -1
  8. package/dist/contants/enums.d.ts +9 -0
  9. package/dist/contants/enums.js +61 -1
  10. package/dist/extension/component/TableCellHandleMenu/index.d.ts +9 -0
  11. package/dist/extension/component/TableCellHandleMenu/index.js +443 -0
  12. package/dist/extension/component/TableExtendButton/TableExtendButton.css +30 -0
  13. package/dist/extension/component/TableExtendButton/index.d.ts +23 -0
  14. package/dist/extension/component/TableExtendButton/index.js +201 -0
  15. package/dist/extension/component/TableExtendButton/use-table-extend-row-column.d.ts +15 -0
  16. package/dist/extension/component/TableExtendButton/use-table-extend-row-column.js +87 -0
  17. package/dist/extension/component/TableHandle/TableHandleMenu.css +36 -0
  18. package/dist/extension/component/TableHandle/TableHandleMenu.d.ts +17 -0
  19. package/dist/extension/component/TableHandle/TableHandleMenu.js +685 -0
  20. package/dist/extension/component/TableHandle/index.d.ts +28 -0
  21. package/dist/extension/component/TableHandle/index.js +93 -0
  22. package/dist/extension/component/TableHandle/use-table-handle-positioning.d.ts +40 -0
  23. package/dist/extension/component/TableHandle/use-table-handle-positioning.js +193 -0
  24. package/dist/extension/component/TableHandle/use-table-handle-state.d.ts +22 -0
  25. package/dist/extension/component/TableHandle/use-table-handle-state.js +45 -0
  26. package/dist/extension/component/TableSelectionOverlay/index.d.ts +16 -0
  27. package/dist/extension/component/TableSelectionOverlay/index.js +460 -0
  28. package/dist/extension/component/UploadProgress/index.d.ts +1 -1
  29. package/dist/extension/node/FileHandler.d.ts +1 -1
  30. package/dist/extension/node/Table.js +226 -43
  31. package/dist/extension/node/TableHandler/create-image.d.ts +9 -0
  32. package/dist/extension/node/TableHandler/create-image.js +235 -0
  33. package/dist/extension/node/TableHandler/index.d.ts +15 -0
  34. package/dist/extension/node/TableHandler/index.js +33 -0
  35. package/dist/extension/node/TableHandler/plugin.d.ts +49 -0
  36. package/dist/extension/node/TableHandler/plugin.js +1030 -0
  37. package/dist/index.css +29 -10
  38. package/dist/type/index.d.ts +2 -0
  39. package/dist/util/table-utils.d.ts +161 -0
  40. package/dist/util/table-utils.js +605 -0
  41. package/package.json +2 -1
  42. package/dist/extension/component/Table/ContextMenu.d.ts +0 -11
  43. package/dist/extension/component/Table/ContextMenu.js +0 -186
  44. package/dist/extension/component/Table/TableContextMenuPlugin.d.ts +0 -9
  45. package/dist/extension/component/Table/TableContextMenuPlugin.js +0 -336
  46. package/dist/extension/component/Table/index.d.ts +0 -2
  47. package/dist/extension/component/Table/index.js +0 -2
@@ -0,0 +1,443 @@
1
+ var _excluded = ["editor", "onOpenChange", "className", "onResizeStart"];
2
+ function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
3
+ function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
4
+ function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
5
+ function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
6
+ function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
7
+ function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
8
+ function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
9
+ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
10
+ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
11
+ function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
12
+ function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
13
+ function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
14
+ function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
15
+ import { Menu } from "../../../component";
16
+ import { AlignBottomIcon, AlignCenterIcon, AlignJustifyIcon, AlignLeftIcon, AlignRightIcon, AlignTopIcon, ArrowDownSLineIcon, BrushLineIcon, MergeCellsVerticalIcon, MoreLineIcon, SplitCellsVerticalIcon } from "../../../component/Icons";
17
+ import { DeleteBack2LineIcon } from "../../../component/Icons/delete-back-2-line-icon";
18
+ import { getThemeTextBgColor, getThemeTextColor } from "../../../contants/enums";
19
+ import { Box, Divider, Typography } from '@mui/material';
20
+ import { useTheme } from '@mui/material/styles';
21
+ import { CellSelection, cellAround, deleteCellSelection, mergeCells, splitCell } from '@tiptap/pm/tables';
22
+ import { useEditorState } from '@tiptap/react';
23
+ import React, { forwardRef, useCallback, useEffect, useState } from 'react';
24
+ export var TableCellHandleMenu = /*#__PURE__*/forwardRef(function (_ref, ref) {
25
+ var editor = _ref.editor,
26
+ onOpenChange = _ref.onOpenChange,
27
+ className = _ref.className,
28
+ onResizeStart = _ref.onResizeStart,
29
+ props = _objectWithoutProperties(_ref, _excluded);
30
+ var _useState = useState(false),
31
+ _useState2 = _slicedToArray(_useState, 2),
32
+ isMenuOpen = _useState2[0],
33
+ setIsMenuOpen = _useState2[1];
34
+ var theme = useTheme();
35
+ var editorState = useEditorState({
36
+ editor: editor,
37
+ selector: function selector(context) {
38
+ if (!context.editor) return null;
39
+ return {
40
+ selection: context.editor.state.selection,
41
+ isEditable: context.editor.isEditable
42
+ };
43
+ }
44
+ });
45
+ var handleMenuToggle = useCallback(function (isOpen) {
46
+ setIsMenuOpen(isOpen);
47
+ if (!editor) return;
48
+ if (isOpen) {
49
+ editor.commands.freezeHandles();
50
+ } else {
51
+ editor.commands.unfreezeHandles();
52
+ }
53
+ }, [editor]);
54
+ useEffect(function () {
55
+ onOpenChange === null || onOpenChange === void 0 || onOpenChange(isMenuOpen);
56
+ }, [isMenuOpen, onOpenChange]);
57
+ var menuList = React.useMemo(function () {
58
+ if (!editor || !editor.isEditable) return [];
59
+ var canMerge = function () {
60
+ try {
61
+ return mergeCells(editor.state, undefined);
62
+ } catch (_unused) {
63
+ return false;
64
+ }
65
+ }();
66
+ var canSplit = function () {
67
+ try {
68
+ return splitCell(editor.state, undefined);
69
+ } catch (_unused2) {
70
+ return false;
71
+ }
72
+ }();
73
+ var menuItems = [];
74
+ if (canMerge || canSplit) {
75
+ if (canMerge) {
76
+ menuItems.push({
77
+ key: 'merge-cells',
78
+ label: '合并单元格',
79
+ icon: /*#__PURE__*/React.createElement(MergeCellsVerticalIcon, {
80
+ sx: {
81
+ fontSize: '1rem'
82
+ }
83
+ }),
84
+ onClick: function onClick() {
85
+ var state = editor.state,
86
+ view = editor.view;
87
+ mergeCells(state, view.dispatch.bind(view));
88
+ }
89
+ });
90
+ }
91
+ if (canSplit) {
92
+ menuItems.push({
93
+ key: 'split-cell',
94
+ label: '拆分单元格',
95
+ icon: /*#__PURE__*/React.createElement(SplitCellsVerticalIcon, {
96
+ sx: {
97
+ fontSize: '1rem'
98
+ }
99
+ }),
100
+ onClick: function onClick() {
101
+ var state = editor.state,
102
+ view = editor.view;
103
+ splitCell(state, view.dispatch.bind(view));
104
+ }
105
+ });
106
+ }
107
+ menuItems.push({
108
+ customLabel: /*#__PURE__*/React.createElement(Divider, {
109
+ sx: {
110
+ my: 0.5
111
+ }
112
+ }),
113
+ key: 'divider1'
114
+ });
115
+ }
116
+ menuItems.push({
117
+ key: 'color',
118
+ label: '颜色',
119
+ icon: /*#__PURE__*/React.createElement(BrushLineIcon, {
120
+ sx: {
121
+ fontSize: '1rem'
122
+ }
123
+ }),
124
+ children: [{
125
+ customLabel: /*#__PURE__*/React.createElement(Typography, {
126
+ sx: {
127
+ p: 1,
128
+ fontSize: '0.75rem',
129
+ color: 'text.secondary',
130
+ fontWeight: 'bold'
131
+ }
132
+ }, "\u6587\u5B57\u989C\u8272"),
133
+ key: 'text-color'
134
+ }].concat(_toConsumableArray(getThemeTextColor(theme).map(function (it) {
135
+ return {
136
+ label: it.label,
137
+ key: it.value,
138
+ icon: /*#__PURE__*/React.createElement(Box, {
139
+ sx: {
140
+ color: it.value,
141
+ width: '1rem',
142
+ height: '1rem',
143
+ borderRadius: '50%',
144
+ bgcolor: it.value,
145
+ border: '1px solid',
146
+ borderColor: it.value === theme.palette.common.white ? 'divider' : 'transparent'
147
+ }
148
+ }),
149
+ onClick: function onClick() {
150
+ setTimeout(function () {
151
+ editor.chain().focus().toggleMark('textStyle', {
152
+ color: it.value
153
+ }).run();
154
+ }, 0);
155
+ }
156
+ };
157
+ })), [{
158
+ customLabel: /*#__PURE__*/React.createElement(Typography, {
159
+ sx: {
160
+ p: 1,
161
+ fontSize: '0.75rem',
162
+ color: 'text.secondary',
163
+ fontWeight: 'bold'
164
+ }
165
+ }, "\u80CC\u666F\u989C\u8272"),
166
+ key: 'background-color'
167
+ }], _toConsumableArray(getThemeTextBgColor(theme).map(function (it) {
168
+ return {
169
+ label: it.label,
170
+ key: it.value,
171
+ icon: /*#__PURE__*/React.createElement(Box, {
172
+ sx: {
173
+ width: '1rem',
174
+ height: '1rem',
175
+ borderRadius: '50%',
176
+ bgcolor: it.value,
177
+ border: '1px solid',
178
+ borderColor: 'divider'
179
+ }
180
+ }),
181
+ onClick: function onClick() {
182
+ var bgColor = it.value === 'transparent' || it.value === 'var(--mui-palette-background-paper)' ? 'transparent' : it.value;
183
+ setTimeout(function () {
184
+ editor.chain().focus().setCellAttribute('bgcolor', bgColor).run();
185
+ }, 0);
186
+ }
187
+ };
188
+ })))
189
+ }, {
190
+ key: 'align',
191
+ label: '对齐方式',
192
+ icon: /*#__PURE__*/React.createElement(AlignLeftIcon, {
193
+ sx: {
194
+ fontSize: '1rem'
195
+ }
196
+ }),
197
+ children: [{
198
+ customLabel: /*#__PURE__*/React.createElement(Typography, {
199
+ sx: {
200
+ p: 1,
201
+ fontSize: '0.75rem',
202
+ color: 'text.secondary',
203
+ fontWeight: 'bold'
204
+ }
205
+ }, "\u6C34\u5E73\u5BF9\u9F50\u65B9\u5F0F"),
206
+ key: 'align-horizontal'
207
+ }, {
208
+ label: '左侧对齐',
209
+ key: 'align-horizontal-left',
210
+ icon: /*#__PURE__*/React.createElement(AlignLeftIcon, {
211
+ sx: {
212
+ fontSize: '1rem'
213
+ }
214
+ }),
215
+ onClick: function onClick() {
216
+ if (!editor) return;
217
+ setTimeout(function () {
218
+ editor.chain().focus().setCellAttribute('textAlign', 'left').run();
219
+ }, 0);
220
+ }
221
+ }, {
222
+ label: '居中对齐',
223
+ key: 'align-horizontal-center',
224
+ icon: /*#__PURE__*/React.createElement(AlignCenterIcon, {
225
+ sx: {
226
+ fontSize: '1rem'
227
+ }
228
+ }),
229
+ onClick: function onClick() {
230
+ if (!editor) return;
231
+ setTimeout(function () {
232
+ editor.chain().focus().setCellAttribute('textAlign', 'center').run();
233
+ }, 0);
234
+ }
235
+ }, {
236
+ label: '右侧对齐',
237
+ key: 'align-horizontal-right',
238
+ icon: /*#__PURE__*/React.createElement(AlignRightIcon, {
239
+ sx: {
240
+ fontSize: '1rem'
241
+ }
242
+ }),
243
+ onClick: function onClick() {
244
+ if (!editor) return;
245
+ setTimeout(function () {
246
+ editor.chain().focus().setCellAttribute('textAlign', 'right').run();
247
+ }, 0);
248
+ }
249
+ }, {
250
+ label: '两端对齐',
251
+ key: 'align-horizontal-justify',
252
+ icon: /*#__PURE__*/React.createElement(AlignJustifyIcon, {
253
+ sx: {
254
+ fontSize: '1rem'
255
+ }
256
+ }),
257
+ onClick: function onClick() {
258
+ if (!editor) return;
259
+ setTimeout(function () {
260
+ editor.chain().focus().setCellAttribute('textAlign', 'justify').run();
261
+ }, 0);
262
+ }
263
+ }, {
264
+ customLabel: /*#__PURE__*/React.createElement(Typography, {
265
+ sx: {
266
+ p: 1,
267
+ fontSize: '0.75rem',
268
+ color: 'text.secondary',
269
+ fontWeight: 'bold'
270
+ }
271
+ }, "\u5782\u76F4\u5BF9\u9F50\u65B9\u5F0F"),
272
+ key: 'align-vertical'
273
+ }, {
274
+ label: '顶部对齐',
275
+ key: 'align-vertical-top',
276
+ icon: /*#__PURE__*/React.createElement(AlignTopIcon, {
277
+ sx: {
278
+ fontSize: '1rem'
279
+ }
280
+ }),
281
+ onClick: function onClick() {
282
+ if (!editor) return;
283
+ setTimeout(function () {
284
+ editor.chain().focus().setCellAttribute('verticalAlign', 'top').run();
285
+ }, 0);
286
+ }
287
+ }, {
288
+ label: '居中对齐',
289
+ key: 'align-vertical-center',
290
+ icon: /*#__PURE__*/React.createElement(AlignCenterIcon, {
291
+ sx: {
292
+ fontSize: '1rem'
293
+ }
294
+ }),
295
+ onClick: function onClick() {
296
+ if (!editor) return;
297
+ setTimeout(function () {
298
+ editor.chain().focus().setCellAttribute('verticalAlign', 'middle').run();
299
+ }, 0);
300
+ }
301
+ }, {
302
+ label: '底部对齐',
303
+ key: 'align-vertical-bottom',
304
+ icon: /*#__PURE__*/React.createElement(AlignBottomIcon, {
305
+ sx: {
306
+ fontSize: '1rem'
307
+ }
308
+ }),
309
+ onClick: function onClick() {
310
+ if (!editor) return;
311
+ setTimeout(function () {
312
+ editor.chain().focus().setCellAttribute('verticalAlign', 'bottom').run();
313
+ }, 0);
314
+ }
315
+ }]
316
+ });
317
+ menuItems.push({
318
+ key: 'clear-content',
319
+ label: '清空单元格内容',
320
+ icon: /*#__PURE__*/React.createElement(DeleteBack2LineIcon, {
321
+ sx: {
322
+ fontSize: '1rem'
323
+ }
324
+ }),
325
+ onClick: function onClick() {
326
+ if (!editor) return;
327
+ var state = editor.state,
328
+ view = editor.view;
329
+ if (state.selection instanceof CellSelection) {
330
+ deleteCellSelection(state, view.dispatch.bind(view));
331
+ } else {
332
+ var $anchor = state.selection.$anchor;
333
+ var cell = cellAround($anchor);
334
+ if (cell) {
335
+ var cellNode = state.doc.nodeAt(cell.pos);
336
+ if (cellNode) {
337
+ var from = cell.pos + 1;
338
+ var to = cell.pos + cellNode.nodeSize - 1;
339
+ if (from < to) {
340
+ view.dispatch(state.tr.delete(from, to));
341
+ }
342
+ }
343
+ }
344
+ }
345
+ },
346
+ attrs: function () {
347
+ if (!editor) return {
348
+ disabled: true
349
+ };
350
+ var selection = editor.state.selection;
351
+ if (selection instanceof CellSelection) {
352
+ var hasContent = false;
353
+ selection.forEachCell(function (cell) {
354
+ if (cell.content.size > 0) {
355
+ hasContent = true;
356
+ }
357
+ });
358
+ return hasContent ? {} : {
359
+ disabled: true
360
+ };
361
+ } else {
362
+ var $anchor = selection.$anchor;
363
+ var cell = cellAround($anchor);
364
+ if (cell) {
365
+ var cellNode = editor.state.doc.nodeAt(cell.pos);
366
+ return cellNode && cellNode.content.size > 0 ? {} : {
367
+ disabled: true
368
+ };
369
+ }
370
+ return {
371
+ disabled: true
372
+ };
373
+ }
374
+ }()
375
+ });
376
+ return menuItems;
377
+ }, [editor, theme, editorState]);
378
+ var handleButton = /*#__PURE__*/React.createElement(Box, _extends({
379
+ component: "button",
380
+ ref: ref,
381
+ className: className,
382
+ "aria-label": "Table cells option",
383
+ "aria-haspopup": "menu",
384
+ "aria-expanded": isMenuOpen,
385
+ onMouseDown: function onMouseDown(e) {
386
+ e.stopPropagation();
387
+ if (onResizeStart) {
388
+ onResizeStart('br')(e);
389
+ }
390
+ },
391
+ sx: {
392
+ position: 'absolute',
393
+ top: '50%',
394
+ right: '-8px',
395
+ transform: 'translateY(-50%)',
396
+ border: 'none',
397
+ display: 'flex',
398
+ alignItems: 'center',
399
+ justifyContent: 'center',
400
+ borderRadius: 'var(--mui-shape-borderRadius)',
401
+ cursor: 'pointer',
402
+ padding: '4px',
403
+ width: '14px',
404
+ height: '14px',
405
+ zIndex: 4,
406
+ backgroundColor: 'var(--mui-palette-primary-main)',
407
+ '& .MuiSvgIcon-root': {
408
+ color: 'var(--mui-palette-common-white)'
409
+ }
410
+ }
411
+ }, props), /*#__PURE__*/React.createElement(MoreLineIcon, {
412
+ sx: {
413
+ width: '0.75rem',
414
+ height: '0.75rem'
415
+ }
416
+ }));
417
+ return /*#__PURE__*/React.createElement(Menu, {
418
+ width: 216,
419
+ context: handleButton,
420
+ list: menuList,
421
+ anchorOrigin: {
422
+ vertical: 'bottom',
423
+ horizontal: 'left'
424
+ },
425
+ transformOrigin: {
426
+ vertical: 'top',
427
+ horizontal: 'left'
428
+ },
429
+ onOpen: function onOpen() {
430
+ return handleMenuToggle(true);
431
+ },
432
+ onClose: function onClose() {
433
+ return handleMenuToggle(false);
434
+ },
435
+ arrowIcon: /*#__PURE__*/React.createElement(ArrowDownSLineIcon, {
436
+ sx: {
437
+ fontSize: '1rem',
438
+ transform: 'rotate(-90deg)'
439
+ }
440
+ })
441
+ });
442
+ });
443
+ TableCellHandleMenu.displayName = 'TableCellHandleMenu';
@@ -0,0 +1,30 @@
1
+ .tiptap-table-extend-row-column-button {
2
+ border: none;
3
+ display: flex;
4
+ align-items: center;
5
+ justify-content: center;
6
+ background-color: var(--mui-palette-background-paper3);
7
+ border-radius: var(--mui-shape-borderRadius);
8
+ cursor: pointer;
9
+ }
10
+
11
+ .tiptap-table-extend-row-column-button .tiptap-button-icon {
12
+ color: var(--mui-palette-text-disabled);
13
+ }
14
+
15
+ .tiptap-table-extend-row-column-button:hover {
16
+ background-color: var(--mui-palette-primary-main);
17
+ }
18
+
19
+ .tiptap-table-extend-row-column-button:hover .tiptap-button-icon {
20
+ color: var(--mui-palette-common-white);
21
+ }
22
+
23
+ .tiptap-table-extend-row-column-button.tiptap-table-row-end-add-remove {
24
+ width: 100%;
25
+ height: 0.75rem;
26
+ }
27
+
28
+ .tiptap-table-extend-row-column-button.tiptap-table-column-end-add-remove {
29
+ width: 0.75rem;
30
+ }
@@ -0,0 +1,23 @@
1
+ import type { Node } from '@tiptap/pm/model';
2
+ import type { Editor } from '@tiptap/react';
3
+ import React from 'react';
4
+ import type { Orientation } from '../../../util/table-utils';
5
+ import './TableExtendButton.css';
6
+ interface TableExtendRowColumnButtonProps {
7
+ editor?: Editor | null;
8
+ block: Node;
9
+ onMouseDown: () => void;
10
+ onMouseUp: () => void;
11
+ orientation: Orientation;
12
+ }
13
+ /**
14
+ * Simplified button component for extending/reducing table dimensions
15
+ */
16
+ export declare const TableExtendRowColumnButton: React.FC<TableExtendRowColumnButtonProps>;
17
+ export interface TableExtendRowColumnButtonsProps {
18
+ editor?: Editor | null;
19
+ onMouseDown?: () => void;
20
+ onMouseUp?: () => void;
21
+ }
22
+ export declare const TableExtendRowColumnButtons: React.FC<TableExtendRowColumnButtonsProps>;
23
+ export {};