@blocknote/core 0.30.0 → 0.31.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.
- package/dist/blocknote.cjs +9 -9
- package/dist/blocknote.cjs.map +1 -1
- package/dist/blocknote.js +2771 -2245
- package/dist/blocknote.js.map +1 -1
- package/dist/comments.cjs.map +1 -1
- package/dist/comments.js.map +1 -1
- package/dist/{en-D4taoCs4.cjs → en-BXVKCwYt.cjs} +2 -2
- package/dist/en-BXVKCwYt.cjs.map +1 -0
- package/dist/{en-B7ycW7c8.js → en-qGo6sk9V.js} +2 -3
- package/dist/en-qGo6sk9V.js.map +1 -0
- package/dist/locales.cjs +1 -1
- package/dist/locales.cjs.map +1 -1
- package/dist/locales.js +20 -39
- package/dist/locales.js.map +1 -1
- package/dist/style.css +1 -1
- package/dist/webpack-stats.json +1 -1
- package/package.json +8 -7
- package/src/api/README.md +1 -1
- package/src/api/blockManipulation/commands/insertBlocks/insertBlocks.test.ts +19 -14
- package/src/api/blockManipulation/commands/insertBlocks/insertBlocks.ts +7 -8
- package/src/api/blockManipulation/commands/mergeBlocks/mergeBlocks.test.ts +3 -3
- package/src/api/blockManipulation/commands/mergeBlocks/mergeBlocks.ts +12 -12
- package/src/api/blockManipulation/commands/moveBlocks/moveBlocks.test.ts +14 -14
- package/src/api/blockManipulation/commands/moveBlocks/moveBlocks.ts +16 -16
- package/src/api/blockManipulation/commands/nestBlock/nestBlock.ts +8 -8
- package/src/api/blockManipulation/commands/replaceBlocks/replaceBlocks.test.ts +12 -12
- package/src/api/blockManipulation/commands/replaceBlocks/replaceBlocks.ts +8 -8
- package/src/api/blockManipulation/commands/splitBlock/splitBlock.test.ts +10 -10
- package/src/api/blockManipulation/commands/splitBlock/splitBlock.ts +2 -2
- package/src/api/blockManipulation/commands/updateBlock/__snapshots__/updateBlock.test.ts.snap +2816 -0
- package/src/api/blockManipulation/commands/updateBlock/updateBlock.test.ts +200 -42
- package/src/api/blockManipulation/commands/updateBlock/updateBlock.ts +104 -34
- package/src/api/blockManipulation/getBlock/getBlock.ts +9 -9
- package/src/api/blockManipulation/insertContentAt.ts +1 -1
- package/src/api/blockManipulation/selections/selection.ts +59 -12
- package/src/api/blockManipulation/selections/{textCursorPosition/textCursorPosition.ts → textCursorPosition.ts} +13 -13
- package/src/api/blockManipulation/tables/tables.test.ts +106 -106
- package/src/api/blockManipulation/tables/tables.ts +35 -35
- package/src/api/clipboard/fromClipboard/fileDropExtension.ts +2 -2
- package/src/api/clipboard/fromClipboard/handleFileInsertion.ts +9 -9
- package/src/api/clipboard/fromClipboard/handleVSCodePaste.ts +3 -3
- package/src/api/clipboard/fromClipboard/pasteExtension.ts +3 -3
- package/src/api/clipboard/toClipboard/copyExtension.ts +22 -22
- package/src/api/exporters/html/externalHTMLExporter.ts +6 -6
- package/src/api/exporters/html/internalHTMLSerializer.ts +3 -3
- package/src/api/exporters/html/util/serializeBlocksExternalHTML.ts +16 -16
- package/src/api/exporters/html/util/serializeBlocksInternalHTML.ts +14 -14
- package/src/api/exporters/markdown/markdownExporter.ts +3 -3
- package/src/api/exporters/markdown/util/addSpacesToCheckboxesRehypePlugin.ts +3 -3
- package/src/api/getBlockInfoFromPos.ts +6 -6
- package/src/api/nodeConversions/blockToNode.ts +31 -28
- package/src/api/nodeConversions/fragmentToBlocks.ts +1 -1
- package/src/api/nodeConversions/nodeToBlock.ts +240 -41
- package/src/api/nodeUtil.test.ts +16 -16
- package/src/api/nodeUtil.ts +10 -10
- package/src/api/parsers/html/parseHTML.ts +1 -1
- package/src/api/parsers/html/util/nestedLists.ts +2 -2
- package/src/api/parsers/markdown/parseMarkdown.ts +1 -1
- package/src/api/pmUtil.ts +7 -7
- package/src/api/positionMapping.test.ts +3 -3
- package/src/api/positionMapping.ts +5 -5
- package/src/blocks/AudioBlockContent/AudioBlockContent.ts +4 -4
- package/src/blocks/CodeBlockContent/CodeBlockContent.ts +18 -18
- package/src/blocks/FileBlockContent/FileBlockContent.ts +2 -2
- package/src/blocks/FileBlockContent/helpers/parse/parseFigureElement.ts +2 -2
- package/src/blocks/FileBlockContent/helpers/render/createAddFileButton.ts +6 -6
- package/src/blocks/FileBlockContent/helpers/render/createFileBlockWrapper.ts +2 -2
- package/src/blocks/FileBlockContent/helpers/render/createFileNameWithIcon.ts +1 -1
- package/src/blocks/FileBlockContent/helpers/render/createResizableFileBlockWrapper.ts +7 -7
- package/src/blocks/FileBlockContent/helpers/toExternalHTML/createFigureWithCaption.ts +1 -1
- package/src/blocks/FileBlockContent/helpers/toExternalHTML/createLinkWithCaption.ts +1 -1
- package/src/blocks/FileBlockContent/uploadToTmpFilesDotOrg_DEV_ONLY.ts +2 -2
- package/src/blocks/HeadingBlockContent/HeadingBlockContent.ts +6 -6
- package/src/blocks/ImageBlockContent/ImageBlockContent.ts +4 -4
- package/src/blocks/ListItemBlockContent/BulletListItemBlockContent/BulletListItemBlockContent.ts +4 -4
- package/src/blocks/ListItemBlockContent/CheckListItemBlockContent/CheckListItemBlockContent.ts +10 -10
- package/src/blocks/ListItemBlockContent/ListItemKeyboardShortcuts.ts +1 -1
- package/src/blocks/ListItemBlockContent/NumberedListItemBlockContent/NumberedListIndexingPlugin.ts +1 -1
- package/src/blocks/ListItemBlockContent/NumberedListItemBlockContent/NumberedListItemBlockContent.ts +4 -4
- package/src/blocks/ListItemBlockContent/getListItemContent.ts +5 -5
- package/src/blocks/PageBreakBlockContent/PageBreakBlockContent.ts +1 -1
- package/src/blocks/PageBreakBlockContent/getPageBreakSlashMenuItems.ts +3 -3
- package/src/blocks/PageBreakBlockContent/schema.ts +2 -2
- package/src/blocks/ParagraphBlockContent/ParagraphBlockContent.ts +3 -3
- package/src/blocks/QuoteBlockContent/QuoteBlockContent.ts +4 -4
- package/src/blocks/README.md +1 -1
- package/src/blocks/TableBlockContent/TableBlockContent.ts +37 -7
- package/src/blocks/TableBlockContent/TableExtension.ts +3 -3
- package/src/blocks/VideoBlockContent/VideoBlockContent.ts +4 -4
- package/src/blocks/defaultBlockHelpers.ts +8 -8
- package/src/blocks/defaultBlockTypeGuards.ts +16 -16
- package/src/blocks/defaultBlocks.ts +3 -3
- package/src/comments/threadstore/DefaultThreadStoreAuth.ts +3 -3
- package/src/comments/threadstore/ThreadStore.ts +1 -1
- package/src/comments/threadstore/TipTapThreadStore.ts +10 -10
- package/src/comments/threadstore/yjs/RESTYjsThreadStore.ts +4 -4
- package/src/comments/threadstore/yjs/YjsThreadStore.test.ts +2 -2
- package/src/comments/threadstore/yjs/YjsThreadStore.ts +14 -14
- package/src/comments/threadstore/yjs/YjsThreadStoreBase.ts +1 -1
- package/src/comments/threadstore/yjs/yjsHelpers.ts +6 -6
- package/src/editor/Block.css +35 -1
- package/src/editor/BlockNoteEditor.test.ts +10 -3
- package/src/editor/BlockNoteEditor.ts +95 -38
- package/src/editor/BlockNoteExtension.ts +26 -0
- package/src/editor/BlockNoteExtensions.ts +38 -22
- package/src/editor/BlockNoteSchema.ts +4 -4
- package/src/editor/BlockNoteTipTapEditor.ts +33 -12
- package/src/editor/README.md +1 -1
- package/src/editor/cursorPositionTypes.ts +1 -1
- package/src/editor/editor.css +15 -3
- package/src/editor/selectionTypes.ts +1 -1
- package/src/editor/transformPasted.ts +2 -2
- package/src/exporter/Exporter.ts +5 -5
- package/src/exporter/mapping.ts +7 -7
- package/src/extensions/BackgroundColor/BackgroundColorMark.ts +1 -1
- package/src/extensions/Collaboration/CursorPlugin.ts +15 -9
- package/src/extensions/Collaboration/ForkYDocPlugin.test.ts +166 -0
- package/src/extensions/Collaboration/ForkYDocPlugin.ts +174 -0
- package/src/extensions/Collaboration/SyncPlugin.ts +7 -4
- package/src/extensions/Collaboration/UndoPlugin.ts +7 -4
- package/src/extensions/Collaboration/__snapshots__/fork-yjs-snap-editor-forked.json +30 -0
- package/src/extensions/Collaboration/__snapshots__/fork-yjs-snap-editor.json +30 -0
- package/src/extensions/Collaboration/__snapshots__/fork-yjs-snap-forked.html +1 -0
- package/src/extensions/Collaboration/__snapshots__/fork-yjs-snap.html +1 -0
- package/src/extensions/Comments/CommentsPlugin.ts +80 -75
- package/src/extensions/Comments/userstore/UserStore.ts +2 -2
- package/src/extensions/FilePanel/FilePanelPlugin.ts +56 -55
- package/src/extensions/FormattingToolbar/FormattingToolbarPlugin.ts +60 -30
- package/src/extensions/KeyboardShortcuts/KeyboardShortcutsExtension.ts +26 -26
- package/src/extensions/LinkToolbar/LinkToolbarPlugin.ts +33 -32
- package/src/extensions/NodeSelectionKeyboard/NodeSelectionKeyboardPlugin.ts +45 -42
- package/src/extensions/Placeholder/PlaceholderPlugin.ts +113 -110
- package/src/extensions/PreviousBlockType/PreviousBlockTypePlugin.ts +179 -170
- package/src/extensions/README.md +1 -1
- package/src/extensions/ShowSelection/ShowSelectionPlugin.ts +22 -19
- package/src/extensions/SideMenu/MultipleNodeSelection.ts +1 -1
- package/src/extensions/SideMenu/SideMenuPlugin.ts +49 -48
- package/src/extensions/SideMenu/dragging.ts +8 -8
- package/src/extensions/SuggestionMenu/SuggestionPlugin.ts +176 -176
- package/src/extensions/SuggestionMenu/getDefaultEmojiPickerItems.ts +2 -2
- package/src/extensions/SuggestionMenu/getDefaultSlashMenuItems.ts +16 -16
- package/src/extensions/Suggestions/SuggestionMarks.ts +175 -0
- package/src/extensions/TableHandles/TableHandlesPlugin.ts +199 -195
- package/src/extensions/TrailingNode/TrailingNodeExtension.ts +1 -1
- package/src/extensions/UniqueID/UniqueID.ts +6 -6
- package/src/extensions/getDraggableBlockFromElement.ts +1 -1
- package/src/fonts/inter.css +18 -9
- package/src/i18n/locales/ar.ts +0 -1
- package/src/i18n/locales/de.ts +0 -1
- package/src/i18n/locales/en.ts +0 -1
- package/src/i18n/locales/es.ts +0 -1
- package/src/i18n/locales/fr.ts +0 -1
- package/src/i18n/locales/hr.ts +0 -1
- package/src/i18n/locales/is.ts +0 -1
- package/src/i18n/locales/it.ts +0 -1
- package/src/i18n/locales/ja.ts +0 -1
- package/src/i18n/locales/ko.ts +0 -1
- package/src/i18n/locales/nl.ts +0 -1
- package/src/i18n/locales/no.ts +0 -1
- package/src/i18n/locales/pl.ts +0 -1
- package/src/i18n/locales/pt.ts +0 -1
- package/src/i18n/locales/ru.ts +0 -1
- package/src/i18n/locales/sk.ts +0 -1
- package/src/i18n/locales/uk.ts +0 -1
- package/src/i18n/locales/vi.ts +0 -1
- package/src/i18n/locales/zh-tw.ts +0 -1
- package/src/i18n/locales/zh.ts +0 -1
- package/src/index.ts +18 -8
- package/src/locales.ts +1 -1
- package/src/pm-nodes/BlockContainer.ts +1 -1
- package/src/pm-nodes/BlockGroup.ts +2 -2
- package/src/pm-nodes/Doc.ts +5 -4
- package/src/schema/README.md +1 -1
- package/src/schema/blocks/createSpec.ts +14 -14
- package/src/schema/blocks/internal.ts +17 -17
- package/src/schema/blocks/types.ts +25 -25
- package/src/schema/inlineContent/createSpec.ts +16 -20
- package/src/schema/inlineContent/internal.ts +9 -9
- package/src/schema/inlineContent/types.ts +26 -26
- package/src/schema/propTypes.ts +8 -8
- package/src/schema/styles/createSpec.ts +2 -2
- package/src/schema/styles/internal.ts +7 -7
- package/src/schema/styles/types.ts +2 -2
- package/src/util/EventEmitter.ts +4 -4
- package/src/util/README.md +1 -1
- package/src/util/combineByGroup.ts +1 -1
- package/src/util/table.ts +33 -30
- package/types/src/api/blockManipulation/commands/insertBlocks/insertBlocks.d.ts +1 -1
- package/types/src/api/blockManipulation/commands/removeBlocks/removeBlocks.d.ts +4 -0
- package/types/src/api/blockManipulation/commands/removeBlocks/removeBlocks.test.d.ts +1 -0
- package/types/src/api/blockManipulation/commands/updateBlock/updateBlock.d.ts +3 -1
- package/types/src/api/blockManipulation/selections/selection.d.ts +10 -0
- package/types/src/api/blockManipulation/selections/textCursorPosition.d.ts +5 -0
- package/types/src/api/blockManipulation/transactions.test.d.ts +0 -0
- package/types/src/api/clipboard/clipboardExternal.test.d.ts +1 -0
- package/types/src/api/clipboard/clipboardInternal.test.d.ts +1 -0
- package/types/src/api/clipboard/testUtil.d.ts +541 -0
- package/types/src/api/exporters/html/htmlConversion.test.d.ts +1 -0
- package/types/src/api/exporters/markdown/markdownExporter.test.d.ts +1 -0
- package/types/src/api/nodeConversions/nodeConversions.test.d.ts +1 -0
- package/types/src/api/nodeConversions/nodeToBlock.d.ts +39 -2
- package/types/src/api/parsers/html/parseHTML.test.d.ts +1 -0
- package/types/src/api/parsers/markdown/parseMarkdown.test.d.ts +1 -0
- package/types/src/api/pmUtil.d.ts +3 -3
- package/types/src/api/testUtil/cases/customBlocks.d.ts +670 -0
- package/types/src/api/testUtil/cases/customInlineContent.d.ts +558 -0
- package/types/src/api/testUtil/cases/customStyles.d.ts +552 -0
- package/types/src/api/testUtil/cases/defaultSchema.d.ts +4 -0
- package/types/src/api/testUtil/index.d.ts +14 -0
- package/types/src/api/testUtil/partialBlockTestUtil.d.ts +9 -0
- package/types/src/api/testUtil/paste.d.ts +2 -0
- package/types/src/blocks/CodeBlockContent/defaultSupportedLanguages.d.ts +6 -0
- package/types/src/blocks/TableBlockContent/TableBlockContent.d.ts +9 -1
- package/types/src/editor/BlockNoteEditor.d.ts +58 -10
- package/types/src/editor/BlockNoteExtension.d.ts +9 -0
- package/types/src/editor/BlockNoteExtensions.d.ts +2 -2
- package/types/src/editor/BlockNoteTipTapEditor.d.ts +2 -2
- package/types/src/extensions/Collaboration/CursorPlugin.d.ts +3 -3
- package/types/src/extensions/Collaboration/ForkYDocPlugin.d.ts +41 -0
- package/types/src/extensions/Collaboration/ForkYDocPlugin.test.d.ts +1 -0
- package/types/src/extensions/Collaboration/SyncPlugin.d.ts +3 -3
- package/types/src/extensions/Collaboration/UndoPlugin.d.ts +3 -3
- package/types/src/extensions/Collaboration/createCollaborationExtensions.d.ts +17 -0
- package/types/src/extensions/Comments/CommentsPlugin.d.ts +2 -4
- package/types/src/extensions/FilePanel/FilePanelPlugin.d.ts +3 -4
- package/types/src/extensions/FormattingToolbar/FormattingToolbarPlugin.d.ts +5 -5
- package/types/src/extensions/LinkToolbar/LinkToolbarPlugin.d.ts +3 -4
- package/types/src/extensions/NodeSelectionKeyboard/NodeSelectionKeyboardPlugin.d.ts +2 -3
- package/types/src/extensions/Placeholder/PlaceholderPlugin.d.ts +2 -3
- package/types/src/extensions/PreviousBlockType/PreviousBlockTypePlugin.d.ts +2 -3
- package/types/src/extensions/ShowSelection/ShowSelectionPlugin.d.ts +2 -3
- package/types/src/extensions/SideMenu/SideMenuPlugin.d.ts +3 -4
- package/types/src/extensions/SuggestionMenu/SuggestionPlugin.d.ts +2 -4
- package/types/src/extensions/Suggestions/SuggestionMarks.d.ts +4 -0
- package/types/src/extensions/TableHandles/TableHandlesPlugin.d.ts +5 -6
- package/types/src/i18n/locales/en.d.ts +0 -1
- package/types/src/i18n/locales/sk.d.ts +0 -1
- package/types/src/index.d.ts +15 -8
- package/dist/en-B7ycW7c8.js.map +0 -1
- package/dist/en-D4taoCs4.cjs.map +0 -1
- package/dist/tsconfig.tsbuildinfo +0 -1
- package/src/api/blockManipulation/selections/__snapshots__/selection.test.ts.snap +0 -844
- package/src/api/blockManipulation/selections/selection.test.ts +0 -72
- package/src/api/blockManipulation/selections/textCursorPosition/__snapshots__/textCursorPosition.test.ts.snap +0 -316
- package/src/api/blockManipulation/selections/textCursorPosition/textCursorPosition.test.ts +0 -74
|
@@ -32,13 +32,13 @@ import {
|
|
|
32
32
|
} from "../../blocks/defaultBlockTypeGuards.js";
|
|
33
33
|
import { DefaultBlockSchema } from "../../blocks/defaultBlocks.js";
|
|
34
34
|
import type { BlockNoteEditor } from "../../editor/BlockNoteEditor.js";
|
|
35
|
+
import { BlockNoteExtension } from "../../editor/BlockNoteExtension.js";
|
|
35
36
|
import {
|
|
36
37
|
BlockFromConfigNoChildren,
|
|
37
38
|
BlockSchemaWithBlock,
|
|
38
39
|
InlineContentSchema,
|
|
39
40
|
StyleSchema,
|
|
40
41
|
} from "../../schema/index.js";
|
|
41
|
-
import { EventEmitter } from "../../util/EventEmitter.js";
|
|
42
42
|
import { getDraggableBlockFromElement } from "../getDraggableBlockFromElement.js";
|
|
43
43
|
|
|
44
44
|
let dragImageElement: HTMLElement | undefined;
|
|
@@ -46,7 +46,7 @@ let dragImageElement: HTMLElement | undefined;
|
|
|
46
46
|
// TODO consider switching this to jotai, it is a bit messy and noisy
|
|
47
47
|
export type TableHandlesState<
|
|
48
48
|
I extends InlineContentSchema,
|
|
49
|
-
S extends StyleSchema
|
|
49
|
+
S extends StyleSchema,
|
|
50
50
|
> = {
|
|
51
51
|
show: boolean;
|
|
52
52
|
showAddOrRemoveRowsButton: boolean;
|
|
@@ -146,7 +146,7 @@ function hideElements(selector: string, rootEl: Document | ShadowRoot) {
|
|
|
146
146
|
|
|
147
147
|
export class TableHandlesView<
|
|
148
148
|
I extends InlineContentSchema,
|
|
149
|
-
S extends StyleSchema
|
|
149
|
+
S extends StyleSchema,
|
|
150
150
|
> implements PluginView
|
|
151
151
|
{
|
|
152
152
|
public state?: TableHandlesState<I, S>;
|
|
@@ -169,7 +169,7 @@ export class TableHandlesView<
|
|
|
169
169
|
S
|
|
170
170
|
>,
|
|
171
171
|
private readonly pmView: EditorView,
|
|
172
|
-
emitUpdate: (state: TableHandlesState<I, S>) => void
|
|
172
|
+
emitUpdate: (state: TableHandlesState<I, S>) => void,
|
|
173
173
|
) {
|
|
174
174
|
this.emitUpdate = () => {
|
|
175
175
|
if (!this.state) {
|
|
@@ -185,11 +185,11 @@ export class TableHandlesView<
|
|
|
185
185
|
|
|
186
186
|
pmView.root.addEventListener(
|
|
187
187
|
"dragover",
|
|
188
|
-
this.dragOverHandler as EventListener
|
|
188
|
+
this.dragOverHandler as EventListener,
|
|
189
189
|
);
|
|
190
190
|
pmView.root.addEventListener(
|
|
191
191
|
"drop",
|
|
192
|
-
this.dropHandler as unknown as EventListener
|
|
192
|
+
this.dropHandler as unknown as EventListener,
|
|
193
193
|
);
|
|
194
194
|
}
|
|
195
195
|
|
|
@@ -264,7 +264,7 @@ export class TableHandlesView<
|
|
|
264
264
|
| undefined;
|
|
265
265
|
|
|
266
266
|
const pmNodeInfo = this.editor.transact((tr) =>
|
|
267
|
-
getNodeById(blockEl.id, tr.doc)
|
|
267
|
+
getNodeById(blockEl.id, tr.doc),
|
|
268
268
|
);
|
|
269
269
|
if (!pmNodeInfo) {
|
|
270
270
|
throw new Error(`Block with ID ${blockEl.id} not found`);
|
|
@@ -275,7 +275,7 @@ export class TableHandlesView<
|
|
|
275
275
|
this.editor.pmSchema,
|
|
276
276
|
this.editor.schema.blockSchema,
|
|
277
277
|
this.editor.schema.inlineContentSchema,
|
|
278
|
-
this.editor.schema.styleSchema
|
|
278
|
+
this.editor.schema.styleSchema,
|
|
279
279
|
);
|
|
280
280
|
|
|
281
281
|
if (checkBlockIsDefaultType("table", block, this.editor)) {
|
|
@@ -368,7 +368,7 @@ export class TableHandlesView<
|
|
|
368
368
|
|
|
369
369
|
hideElements(
|
|
370
370
|
".prosemirror-dropcursor-block, .prosemirror-dropcursor-inline",
|
|
371
|
-
this.pmView.root
|
|
371
|
+
this.pmView.root,
|
|
372
372
|
);
|
|
373
373
|
|
|
374
374
|
// The mouse cursor coordinates, bounded to the table's bounding box. The
|
|
@@ -377,11 +377,11 @@ export class TableHandlesView<
|
|
|
377
377
|
const boundedMouseCoords = {
|
|
378
378
|
left: Math.min(
|
|
379
379
|
Math.max(event.clientX, this.state.referencePosTable.left + 1),
|
|
380
|
-
this.state.referencePosTable.right - 1
|
|
380
|
+
this.state.referencePosTable.right - 1,
|
|
381
381
|
),
|
|
382
382
|
top: Math.min(
|
|
383
383
|
Math.max(event.clientY, this.state.referencePosTable.top + 1),
|
|
384
|
-
this.state.referencePosTable.bottom - 1
|
|
384
|
+
this.state.referencePosTable.bottom - 1,
|
|
385
385
|
),
|
|
386
386
|
};
|
|
387
387
|
|
|
@@ -390,7 +390,7 @@ export class TableHandlesView<
|
|
|
390
390
|
const tableCellElements = this.pmView.root
|
|
391
391
|
.elementsFromPoint(boundedMouseCoords.left, boundedMouseCoords.top)
|
|
392
392
|
.filter(
|
|
393
|
-
(element) => element.tagName === "TD" || element.tagName === "TH"
|
|
393
|
+
(element) => element.tagName === "TD" || element.tagName === "TH",
|
|
394
394
|
);
|
|
395
395
|
if (tableCellElements.length === 0) {
|
|
396
396
|
return;
|
|
@@ -461,7 +461,7 @@ export class TableHandlesView<
|
|
|
461
461
|
this.state.colIndex === undefined
|
|
462
462
|
) {
|
|
463
463
|
throw new Error(
|
|
464
|
-
"Attempted to drop table row or column, but no table block was hovered prior."
|
|
464
|
+
"Attempted to drop table row or column, but no table block was hovered prior.",
|
|
465
465
|
);
|
|
466
466
|
}
|
|
467
467
|
|
|
@@ -476,7 +476,7 @@ export class TableHandlesView<
|
|
|
476
476
|
!canRowBeDraggedInto(
|
|
477
477
|
this.state.block,
|
|
478
478
|
draggingState.originalIndex,
|
|
479
|
-
rowIndex
|
|
479
|
+
rowIndex,
|
|
480
480
|
)
|
|
481
481
|
) {
|
|
482
482
|
// If the target row is invalid, don't move the row
|
|
@@ -485,7 +485,7 @@ export class TableHandlesView<
|
|
|
485
485
|
const newTable = moveRow(
|
|
486
486
|
this.state.block,
|
|
487
487
|
draggingState.originalIndex,
|
|
488
|
-
rowIndex
|
|
488
|
+
rowIndex,
|
|
489
489
|
);
|
|
490
490
|
this.editor.updateBlock(this.state.block, {
|
|
491
491
|
type: "table",
|
|
@@ -499,7 +499,7 @@ export class TableHandlesView<
|
|
|
499
499
|
!canColumnBeDraggedInto(
|
|
500
500
|
this.state.block,
|
|
501
501
|
draggingState.originalIndex,
|
|
502
|
-
colIndex
|
|
502
|
+
colIndex,
|
|
503
503
|
)
|
|
504
504
|
) {
|
|
505
505
|
// If the target column is invalid, don't move the column
|
|
@@ -508,7 +508,7 @@ export class TableHandlesView<
|
|
|
508
508
|
const newTable = moveColumn(
|
|
509
509
|
this.state.block,
|
|
510
510
|
draggingState.originalIndex,
|
|
511
|
-
colIndex
|
|
511
|
+
colIndex,
|
|
512
512
|
);
|
|
513
513
|
const [columnWidth] = columnWidths.splice(draggingState.originalIndex, 1);
|
|
514
514
|
columnWidths.splice(colIndex, 0, columnWidth);
|
|
@@ -538,6 +538,7 @@ export class TableHandlesView<
|
|
|
538
538
|
this.state.block = this.editor.getBlock(this.state.block.id)!;
|
|
539
539
|
if (
|
|
540
540
|
!this.state.block ||
|
|
541
|
+
this.state.block.type !== "table" ||
|
|
541
542
|
// when collaborating, the table element might be replaced and out of date
|
|
542
543
|
// because yjs replaces the element when for example you change the color via the side menu
|
|
543
544
|
!this.tableElement?.isConnected
|
|
@@ -551,7 +552,7 @@ export class TableHandlesView<
|
|
|
551
552
|
}
|
|
552
553
|
|
|
553
554
|
const { height: rowCount, width: colCount } = getDimensionsOfTable(
|
|
554
|
-
this.state.block
|
|
555
|
+
this.state.block,
|
|
555
556
|
);
|
|
556
557
|
|
|
557
558
|
if (
|
|
@@ -574,7 +575,7 @@ export class TableHandlesView<
|
|
|
574
575
|
|
|
575
576
|
if (!tableBody) {
|
|
576
577
|
throw new Error(
|
|
577
|
-
"Table block does not contain a 'tbody' HTML element. This should never happen."
|
|
578
|
+
"Table block does not contain a 'tbody' HTML element. This should never happen.",
|
|
578
579
|
);
|
|
579
580
|
}
|
|
580
581
|
|
|
@@ -602,11 +603,11 @@ export class TableHandlesView<
|
|
|
602
603
|
this.pmView.dom.removeEventListener("mousedown", this.viewMousedownHandler);
|
|
603
604
|
this.pmView.root.removeEventListener(
|
|
604
605
|
"dragover",
|
|
605
|
-
this.dragOverHandler as EventListener
|
|
606
|
+
this.dragOverHandler as EventListener,
|
|
606
607
|
);
|
|
607
608
|
this.pmView.root.removeEventListener(
|
|
608
609
|
"drop",
|
|
609
|
-
this.dropHandler as unknown as EventListener
|
|
610
|
+
this.dropHandler as unknown as EventListener,
|
|
610
611
|
);
|
|
611
612
|
}
|
|
612
613
|
}
|
|
@@ -615,172 +616,175 @@ export const tableHandlesPluginKey = new PluginKey("TableHandlesPlugin");
|
|
|
615
616
|
|
|
616
617
|
export class TableHandlesProsemirrorPlugin<
|
|
617
618
|
I extends InlineContentSchema,
|
|
618
|
-
S extends StyleSchema
|
|
619
|
-
> extends
|
|
619
|
+
S extends StyleSchema,
|
|
620
|
+
> extends BlockNoteExtension {
|
|
620
621
|
private view: TableHandlesView<I, S> | undefined;
|
|
621
|
-
public readonly plugin: Plugin;
|
|
622
622
|
|
|
623
623
|
constructor(
|
|
624
624
|
private readonly editor: BlockNoteEditor<
|
|
625
625
|
BlockSchemaWithBlock<"table", DefaultBlockSchema["table"]>,
|
|
626
626
|
I,
|
|
627
627
|
S
|
|
628
|
-
|
|
628
|
+
>,
|
|
629
629
|
) {
|
|
630
630
|
super();
|
|
631
|
-
this.
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
this.
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
|
|
659
|
-
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
|
|
678
|
-
|
|
679
|
-
|
|
680
|
-
|
|
681
|
-
|
|
682
|
-
|
|
683
|
-
|
|
684
|
-
|
|
685
|
-
|
|
686
|
-
this.view.state.
|
|
687
|
-
|
|
688
|
-
|
|
689
|
-
|
|
690
|
-
|
|
691
|
-
// Gets each row in the table.
|
|
692
|
-
const rowResolvedPos = state.doc.resolve(
|
|
693
|
-
tableResolvedPos.posAtIndex(row) + 1
|
|
631
|
+
this.addProsemirrorPlugin(
|
|
632
|
+
new Plugin({
|
|
633
|
+
key: tableHandlesPluginKey,
|
|
634
|
+
view: (editorView) => {
|
|
635
|
+
this.view = new TableHandlesView(editor, editorView, (state) => {
|
|
636
|
+
this.emit("update", state);
|
|
637
|
+
});
|
|
638
|
+
return this.view;
|
|
639
|
+
},
|
|
640
|
+
// We use decorations to render the drop cursor when dragging a table row
|
|
641
|
+
// or column. The decorations are updated in the `dragOverHandler` method.
|
|
642
|
+
props: {
|
|
643
|
+
decorations: (state) => {
|
|
644
|
+
if (
|
|
645
|
+
this.view === undefined ||
|
|
646
|
+
this.view.state === undefined ||
|
|
647
|
+
this.view.state.draggingState === undefined ||
|
|
648
|
+
this.view.tablePos === undefined
|
|
649
|
+
) {
|
|
650
|
+
return;
|
|
651
|
+
}
|
|
652
|
+
|
|
653
|
+
const newIndex =
|
|
654
|
+
this.view.state.draggingState.draggedCellOrientation === "row"
|
|
655
|
+
? this.view.state.rowIndex
|
|
656
|
+
: this.view.state.colIndex;
|
|
657
|
+
|
|
658
|
+
if (newIndex === undefined) {
|
|
659
|
+
return;
|
|
660
|
+
}
|
|
661
|
+
|
|
662
|
+
const decorations: Decoration[] = [];
|
|
663
|
+
const { block, draggingState } = this.view.state;
|
|
664
|
+
const { originalIndex, draggedCellOrientation } = draggingState;
|
|
665
|
+
|
|
666
|
+
// Return empty decorations if:
|
|
667
|
+
// - Dragging to same position
|
|
668
|
+
// - No block exists
|
|
669
|
+
// - Row drag not allowed
|
|
670
|
+
// - Column drag not allowed
|
|
671
|
+
if (
|
|
672
|
+
newIndex === originalIndex ||
|
|
673
|
+
!block ||
|
|
674
|
+
(draggedCellOrientation === "row" &&
|
|
675
|
+
!canRowBeDraggedInto(block, originalIndex, newIndex)) ||
|
|
676
|
+
(draggedCellOrientation === "col" &&
|
|
677
|
+
!canColumnBeDraggedInto(block, originalIndex, newIndex))
|
|
678
|
+
) {
|
|
679
|
+
return DecorationSet.create(state.doc, decorations);
|
|
680
|
+
}
|
|
681
|
+
|
|
682
|
+
// Gets the table to show the drop cursor in.
|
|
683
|
+
const tableResolvedPos = state.doc.resolve(this.view.tablePos + 1);
|
|
684
|
+
|
|
685
|
+
if (
|
|
686
|
+
this.view.state.draggingState.draggedCellOrientation === "row"
|
|
687
|
+
) {
|
|
688
|
+
const cellsInRow = getCellsAtRowHandle(
|
|
689
|
+
this.view.state.block,
|
|
690
|
+
newIndex,
|
|
694
691
|
);
|
|
695
692
|
|
|
696
|
-
|
|
697
|
-
|
|
698
|
-
rowResolvedPos.
|
|
699
|
-
|
|
700
|
-
|
|
701
|
-
|
|
702
|
-
|
|
703
|
-
|
|
704
|
-
|
|
705
|
-
|
|
706
|
-
|
|
707
|
-
|
|
708
|
-
//
|
|
709
|
-
|
|
710
|
-
|
|
711
|
-
|
|
712
|
-
|
|
713
|
-
|
|
714
|
-
//
|
|
715
|
-
|
|
716
|
-
|
|
717
|
-
|
|
718
|
-
|
|
719
|
-
|
|
720
|
-
|
|
721
|
-
|
|
722
|
-
|
|
723
|
-
|
|
724
|
-
|
|
725
|
-
|
|
726
|
-
|
|
727
|
-
|
|
728
|
-
|
|
729
|
-
|
|
730
|
-
|
|
731
|
-
|
|
732
|
-
|
|
733
|
-
|
|
734
|
-
|
|
735
|
-
|
|
736
|
-
|
|
737
|
-
|
|
738
|
-
|
|
739
|
-
|
|
693
|
+
cellsInRow.forEach(({ row, col }) => {
|
|
694
|
+
// Gets each row in the table.
|
|
695
|
+
const rowResolvedPos = state.doc.resolve(
|
|
696
|
+
tableResolvedPos.posAtIndex(row) + 1,
|
|
697
|
+
);
|
|
698
|
+
|
|
699
|
+
// Gets the cell within the row.
|
|
700
|
+
const cellResolvedPos = state.doc.resolve(
|
|
701
|
+
rowResolvedPos.posAtIndex(col) + 1,
|
|
702
|
+
);
|
|
703
|
+
const cellNode = cellResolvedPos.node();
|
|
704
|
+
// Creates a decoration at the start or end of each cell,
|
|
705
|
+
// depending on whether the new index is before or after the
|
|
706
|
+
// original index.
|
|
707
|
+
const decorationPos =
|
|
708
|
+
cellResolvedPos.pos +
|
|
709
|
+
(newIndex > originalIndex ? cellNode.nodeSize - 2 : 0);
|
|
710
|
+
decorations.push(
|
|
711
|
+
// The widget is a small bar which spans the width of the cell.
|
|
712
|
+
Decoration.widget(decorationPos, () => {
|
|
713
|
+
const widget = document.createElement("div");
|
|
714
|
+
widget.className = "bn-table-drop-cursor";
|
|
715
|
+
widget.style.left = "0";
|
|
716
|
+
widget.style.right = "0";
|
|
717
|
+
// This is only necessary because the drop indicator's height
|
|
718
|
+
// is an even number of pixels, whereas the border between
|
|
719
|
+
// table cells is an odd number of pixels. So this makes the
|
|
720
|
+
// positioning slightly more consistent regardless of where
|
|
721
|
+
// the row is being dropped.
|
|
722
|
+
if (newIndex > originalIndex) {
|
|
723
|
+
widget.style.bottom = "-2px";
|
|
724
|
+
} else {
|
|
725
|
+
widget.style.top = "-3px";
|
|
726
|
+
}
|
|
727
|
+
widget.style.height = "4px";
|
|
728
|
+
|
|
729
|
+
return widget;
|
|
730
|
+
}),
|
|
731
|
+
);
|
|
732
|
+
});
|
|
733
|
+
} else {
|
|
734
|
+
const cellsInColumn = getCellsAtColumnHandle(
|
|
735
|
+
this.view.state.block,
|
|
736
|
+
newIndex,
|
|
740
737
|
);
|
|
741
738
|
|
|
742
|
-
|
|
743
|
-
|
|
744
|
-
rowResolvedPos.
|
|
745
|
-
|
|
746
|
-
|
|
747
|
-
|
|
748
|
-
|
|
749
|
-
|
|
750
|
-
|
|
751
|
-
|
|
752
|
-
cellResolvedPos.
|
|
753
|
-
|
|
754
|
-
|
|
755
|
-
|
|
756
|
-
//
|
|
757
|
-
|
|
758
|
-
|
|
759
|
-
|
|
760
|
-
|
|
761
|
-
|
|
762
|
-
//
|
|
763
|
-
|
|
764
|
-
|
|
765
|
-
|
|
766
|
-
|
|
767
|
-
|
|
768
|
-
|
|
769
|
-
|
|
770
|
-
|
|
771
|
-
|
|
772
|
-
|
|
773
|
-
|
|
774
|
-
|
|
775
|
-
|
|
776
|
-
|
|
777
|
-
|
|
778
|
-
|
|
739
|
+
cellsInColumn.forEach(({ row, col }) => {
|
|
740
|
+
// Gets each row in the table.
|
|
741
|
+
const rowResolvedPos = state.doc.resolve(
|
|
742
|
+
tableResolvedPos.posAtIndex(row) + 1,
|
|
743
|
+
);
|
|
744
|
+
|
|
745
|
+
// Gets the cell within the row.
|
|
746
|
+
const cellResolvedPos = state.doc.resolve(
|
|
747
|
+
rowResolvedPos.posAtIndex(col) + 1,
|
|
748
|
+
);
|
|
749
|
+
const cellNode = cellResolvedPos.node();
|
|
750
|
+
|
|
751
|
+
// Creates a decoration at the start or end of each cell,
|
|
752
|
+
// depending on whether the new index is before or after the
|
|
753
|
+
// original index.
|
|
754
|
+
const decorationPos =
|
|
755
|
+
cellResolvedPos.pos +
|
|
756
|
+
(newIndex > originalIndex ? cellNode.nodeSize - 2 : 0);
|
|
757
|
+
|
|
758
|
+
decorations.push(
|
|
759
|
+
// The widget is a small bar which spans the height of the cell.
|
|
760
|
+
Decoration.widget(decorationPos, () => {
|
|
761
|
+
const widget = document.createElement("div");
|
|
762
|
+
widget.className = "bn-table-drop-cursor";
|
|
763
|
+
widget.style.top = "0";
|
|
764
|
+
widget.style.bottom = "0";
|
|
765
|
+
// This is only necessary because the drop indicator's width
|
|
766
|
+
// is an even number of pixels, whereas the border between
|
|
767
|
+
// table cells is an odd number of pixels. So this makes the
|
|
768
|
+
// positioning slightly more consistent regardless of where
|
|
769
|
+
// the column is being dropped.
|
|
770
|
+
if (newIndex > originalIndex) {
|
|
771
|
+
widget.style.right = "-2px";
|
|
772
|
+
} else {
|
|
773
|
+
widget.style.left = "-3px";
|
|
774
|
+
}
|
|
775
|
+
widget.style.width = "4px";
|
|
776
|
+
|
|
777
|
+
return widget;
|
|
778
|
+
}),
|
|
779
|
+
);
|
|
780
|
+
});
|
|
781
|
+
}
|
|
779
782
|
|
|
780
|
-
|
|
783
|
+
return DecorationSet.create(state.doc, decorations);
|
|
784
|
+
},
|
|
781
785
|
},
|
|
782
|
-
},
|
|
783
|
-
|
|
786
|
+
}),
|
|
787
|
+
);
|
|
784
788
|
}
|
|
785
789
|
|
|
786
790
|
public onUpdate(callback: (state: TableHandlesState<I, S>) => void) {
|
|
@@ -800,7 +804,7 @@ export class TableHandlesProsemirrorPlugin<
|
|
|
800
804
|
this.view!.state.colIndex === undefined
|
|
801
805
|
) {
|
|
802
806
|
throw new Error(
|
|
803
|
-
"Attempted to drag table column, but no table block was hovered prior."
|
|
807
|
+
"Attempted to drag table column, but no table block was hovered prior.",
|
|
804
808
|
);
|
|
805
809
|
}
|
|
806
810
|
|
|
@@ -818,7 +822,7 @@ export class TableHandlesProsemirrorPlugin<
|
|
|
818
822
|
originalIndex: this.view!.state!.colIndex,
|
|
819
823
|
newIndex: this.view!.state!.colIndex,
|
|
820
824
|
tablePos: this.view!.tablePos,
|
|
821
|
-
})
|
|
825
|
+
}),
|
|
822
826
|
);
|
|
823
827
|
|
|
824
828
|
if (!this.editor.prosemirrorView) {
|
|
@@ -843,7 +847,7 @@ export class TableHandlesProsemirrorPlugin<
|
|
|
843
847
|
this.view!.state.rowIndex === undefined
|
|
844
848
|
) {
|
|
845
849
|
throw new Error(
|
|
846
|
-
"Attempted to drag table row, but no table block was hovered prior."
|
|
850
|
+
"Attempted to drag table row, but no table block was hovered prior.",
|
|
847
851
|
);
|
|
848
852
|
}
|
|
849
853
|
|
|
@@ -861,7 +865,7 @@ export class TableHandlesProsemirrorPlugin<
|
|
|
861
865
|
originalIndex: this.view!.state!.rowIndex,
|
|
862
866
|
newIndex: this.view!.state!.rowIndex,
|
|
863
867
|
tablePos: this.view!.tablePos,
|
|
864
|
-
})
|
|
868
|
+
}),
|
|
865
869
|
);
|
|
866
870
|
|
|
867
871
|
if (!this.editor.prosemirrorView) {
|
|
@@ -880,7 +884,7 @@ export class TableHandlesProsemirrorPlugin<
|
|
|
880
884
|
dragEnd = () => {
|
|
881
885
|
if (this.view!.state === undefined) {
|
|
882
886
|
throw new Error(
|
|
883
|
-
"Attempted to drag table row, but no table block was hovered prior."
|
|
887
|
+
"Attempted to drag table row, but no table block was hovered prior.",
|
|
884
888
|
);
|
|
885
889
|
}
|
|
886
890
|
|
|
@@ -914,7 +918,7 @@ export class TableHandlesProsemirrorPlugin<
|
|
|
914
918
|
|
|
915
919
|
getCellsAtRowHandle = (
|
|
916
920
|
block: BlockFromConfigNoChildren<DefaultBlockSchema["table"], any, any>,
|
|
917
|
-
relativeRowIndex: RelativeCellIndices["row"]
|
|
921
|
+
relativeRowIndex: RelativeCellIndices["row"],
|
|
918
922
|
) => {
|
|
919
923
|
return getCellsAtRowHandle(block, relativeRowIndex);
|
|
920
924
|
};
|
|
@@ -924,7 +928,7 @@ export class TableHandlesProsemirrorPlugin<
|
|
|
924
928
|
*/
|
|
925
929
|
getCellsAtColumnHandle = (
|
|
926
930
|
block: BlockFromConfigNoChildren<DefaultBlockSchema["table"], any, any>,
|
|
927
|
-
relativeColumnIndex: RelativeCellIndices["col"]
|
|
931
|
+
relativeColumnIndex: RelativeCellIndices["col"],
|
|
928
932
|
) => {
|
|
929
933
|
return getCellsAtColumnHandle(block, relativeColumnIndex);
|
|
930
934
|
};
|
|
@@ -936,7 +940,7 @@ export class TableHandlesProsemirrorPlugin<
|
|
|
936
940
|
private setCellSelection = (
|
|
937
941
|
state: EditorState,
|
|
938
942
|
relativeStartCell: RelativeCellIndices,
|
|
939
|
-
relativeEndCell: RelativeCellIndices = relativeStartCell
|
|
943
|
+
relativeEndCell: RelativeCellIndices = relativeStartCell,
|
|
940
944
|
) => {
|
|
941
945
|
const view = this.view;
|
|
942
946
|
|
|
@@ -946,18 +950,18 @@ export class TableHandlesProsemirrorPlugin<
|
|
|
946
950
|
|
|
947
951
|
const tableResolvedPos = state.doc.resolve(view.tablePos! + 1);
|
|
948
952
|
const startRowResolvedPos = state.doc.resolve(
|
|
949
|
-
tableResolvedPos.posAtIndex(relativeStartCell.row) + 1
|
|
953
|
+
tableResolvedPos.posAtIndex(relativeStartCell.row) + 1,
|
|
950
954
|
);
|
|
951
955
|
const startCellResolvedPos = state.doc.resolve(
|
|
952
956
|
// No need for +1, since CellSelection expects the position before the cell
|
|
953
|
-
startRowResolvedPos.posAtIndex(relativeStartCell.col)
|
|
957
|
+
startRowResolvedPos.posAtIndex(relativeStartCell.col),
|
|
954
958
|
);
|
|
955
959
|
const endRowResolvedPos = state.doc.resolve(
|
|
956
|
-
tableResolvedPos.posAtIndex(relativeEndCell.row) + 1
|
|
960
|
+
tableResolvedPos.posAtIndex(relativeEndCell.row) + 1,
|
|
957
961
|
);
|
|
958
962
|
const endCellResolvedPos = state.doc.resolve(
|
|
959
963
|
// No need for +1, since CellSelection expects the position before the cell
|
|
960
|
-
endRowResolvedPos.posAtIndex(relativeEndCell.col)
|
|
964
|
+
endRowResolvedPos.posAtIndex(relativeEndCell.col),
|
|
961
965
|
);
|
|
962
966
|
|
|
963
967
|
// Begin a new transaction to set the selection
|
|
@@ -965,7 +969,7 @@ export class TableHandlesProsemirrorPlugin<
|
|
|
965
969
|
|
|
966
970
|
// Set the selection to the given cell or a range of cells
|
|
967
971
|
tr.setSelection(
|
|
968
|
-
new CellSelection(startCellResolvedPos, endCellResolvedPos)
|
|
972
|
+
new CellSelection(startCellResolvedPos, endCellResolvedPos),
|
|
969
973
|
);
|
|
970
974
|
|
|
971
975
|
// Quickly apply the transaction to get the new state to update the selection before splitting the cell
|
|
@@ -979,14 +983,14 @@ export class TableHandlesProsemirrorPlugin<
|
|
|
979
983
|
index: RelativeCellIndices["row"] | RelativeCellIndices["col"],
|
|
980
984
|
direction:
|
|
981
985
|
| { orientation: "row"; side: "above" | "below" }
|
|
982
|
-
| { orientation: "column"; side: "left" | "right" }
|
|
986
|
+
| { orientation: "column"; side: "left" | "right" },
|
|
983
987
|
) => {
|
|
984
988
|
this.editor.exec((beforeState, dispatch) => {
|
|
985
989
|
const state = this.setCellSelection(
|
|
986
990
|
beforeState,
|
|
987
991
|
direction.orientation === "row"
|
|
988
992
|
? { row: index, col: 0 }
|
|
989
|
-
: { row: 0, col: index }
|
|
993
|
+
: { row: 0, col: index },
|
|
990
994
|
);
|
|
991
995
|
|
|
992
996
|
if (direction.orientation === "row") {
|
|
@@ -1010,7 +1014,7 @@ export class TableHandlesProsemirrorPlugin<
|
|
|
1010
1014
|
*/
|
|
1011
1015
|
removeRowOrColumn = (
|
|
1012
1016
|
index: RelativeCellIndices["row"] | RelativeCellIndices["col"],
|
|
1013
|
-
direction: "row" | "column"
|
|
1017
|
+
direction: "row" | "column",
|
|
1014
1018
|
) => {
|
|
1015
1019
|
if (direction === "row") {
|
|
1016
1020
|
return this.editor.exec((beforeState, dispatch) => {
|
|
@@ -1043,7 +1047,7 @@ export class TableHandlesProsemirrorPlugin<
|
|
|
1043
1047
|
? this.setCellSelection(
|
|
1044
1048
|
beforeState,
|
|
1045
1049
|
cellsToMerge.relativeStartCell,
|
|
1046
|
-
cellsToMerge.relativeEndCell
|
|
1050
|
+
cellsToMerge.relativeEndCell,
|
|
1047
1051
|
)
|
|
1048
1052
|
: beforeState;
|
|
1049
1053
|
|
|
@@ -1099,10 +1103,10 @@ export class TableHandlesProsemirrorPlugin<
|
|
|
1099
1103
|
// Assumes we are within a tableParagraph
|
|
1100
1104
|
// And find the from and to cells by resolving the positions
|
|
1101
1105
|
$fromCell = tr.doc.resolve(
|
|
1102
|
-
selection.$from.pos - selection.$from.parentOffset - 1
|
|
1106
|
+
selection.$from.pos - selection.$from.parentOffset - 1,
|
|
1103
1107
|
);
|
|
1104
1108
|
$toCell = tr.doc.resolve(
|
|
1105
|
-
selection.$to.pos - selection.$to.parentOffset - 1
|
|
1109
|
+
selection.$to.pos - selection.$to.parentOffset - 1,
|
|
1106
1110
|
);
|
|
1107
1111
|
|
|
1108
1112
|
// Opt-out when the selection is not pointing into cells
|
|
@@ -1113,7 +1117,7 @@ export class TableHandlesProsemirrorPlugin<
|
|
|
1113
1117
|
|
|
1114
1118
|
// Find the row and table that the from and to cells are in
|
|
1115
1119
|
const $fromRow = tr.doc.resolve(
|
|
1116
|
-
$fromCell.pos - $fromCell.parentOffset - 1
|
|
1120
|
+
$fromCell.pos - $fromCell.parentOffset - 1,
|
|
1117
1121
|
);
|
|
1118
1122
|
const $toRow = tr.doc.resolve($toCell.pos - $toCell.parentOffset - 1);
|
|
1119
1123
|
|
|
@@ -1155,7 +1159,7 @@ export class TableHandlesProsemirrorPlugin<
|
|
|
1155
1159
|
getMergeDirection = (
|
|
1156
1160
|
block:
|
|
1157
1161
|
| BlockFromConfigNoChildren<DefaultBlockSchema["table"], any, any>
|
|
1158
|
-
| undefined
|
|
1162
|
+
| undefined,
|
|
1159
1163
|
) => {
|
|
1160
1164
|
return this.editor.transact((tr) => {
|
|
1161
1165
|
const isSelectingTableCells = isTableCellSelection(tr.selection)
|
|
@@ -1187,7 +1191,7 @@ export class TableHandlesProsemirrorPlugin<
|
|
|
1187
1191
|
|
|
1188
1192
|
cropEmptyRowsOrColumns = (
|
|
1189
1193
|
block: BlockFromConfigNoChildren<DefaultBlockSchema["table"], any, any>,
|
|
1190
|
-
removeEmpty: "columns" | "rows"
|
|
1194
|
+
removeEmpty: "columns" | "rows",
|
|
1191
1195
|
) => {
|
|
1192
1196
|
return cropEmptyRowsOrColumns(block, removeEmpty);
|
|
1193
1197
|
};
|
|
@@ -1195,7 +1199,7 @@ export class TableHandlesProsemirrorPlugin<
|
|
|
1195
1199
|
addRowsOrColumns = (
|
|
1196
1200
|
block: BlockFromConfigNoChildren<DefaultBlockSchema["table"], any, any>,
|
|
1197
1201
|
addType: "columns" | "rows",
|
|
1198
|
-
numToAdd: number
|
|
1202
|
+
numToAdd: number,
|
|
1199
1203
|
) => {
|
|
1200
1204
|
return addRowsOrColumns(block, addType, numToAdd);
|
|
1201
1205
|
};
|