@blocknote/xl-multi-column 0.19.0 → 0.19.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.
@@ -1 +1 @@
1
- {"builtAt":1730893824879,"assets":[{"name":"blocknote-xl-multi-column.umd.cjs","size":68564},{"name":"blocknote-xl-multi-column.umd.cjs.map","size":3630227}],"chunks":[{"id":"a1ee98a","entry":true,"initial":true,"files":["blocknote-xl-multi-column.umd.cjs"],"names":["index"]}],"modules":[{"name":"./src/i18n/locales/ar.ts","size":364,"chunks":["a1ee98a"]},{"name":"./src/i18n/locales/de.ts","size":400,"chunks":["a1ee98a"]},{"name":"./src/i18n/locales/en.ts","size":378,"chunks":["a1ee98a"]},{"name":"./src/i18n/locales/es.ts","size":392,"chunks":["a1ee98a"]},{"name":"./src/i18n/locales/fr.ts","size":398,"chunks":["a1ee98a"]},{"name":"./src/i18n/locales/hr.ts","size":396,"chunks":["a1ee98a"]},{"name":"./src/i18n/locales/is.ts","size":376,"chunks":["a1ee98a"]},{"name":"./src/i18n/locales/ja.ts","size":284,"chunks":["a1ee98a"]},{"name":"./src/i18n/locales/ko.ts","size":288,"chunks":["a1ee98a"]},{"name":"./src/i18n/locales/nl.ts","size":390,"chunks":["a1ee98a"]},{"name":"./src/i18n/locales/pl.ts","size":394,"chunks":["a1ee98a"]},{"name":"./src/i18n/locales/pt.ts","size":388,"chunks":["a1ee98a"]},{"name":"./src/i18n/locales/ru.ts","size":370,"chunks":["a1ee98a"]},{"name":"./src/i18n/locales/vi.ts","size":340,"chunks":["a1ee98a"]},{"name":"./src/i18n/locales/zh.ts","size":274,"chunks":["a1ee98a"]},{"name":"./src/i18n/locales/index.ts","size":0,"chunks":["a1ee98a"]},{"name":"./src/i18n/dictionary.ts","size":189,"chunks":["a1ee98a"]},{"name":"./src/extensions/ColumnResize/ColumnResizeExtension.ts","size":8106,"chunks":["a1ee98a"]},{"name":"./src/pm-nodes/Column.ts","size":2567,"chunks":["a1ee98a"]},{"name":"./src/pm-nodes/ColumnList.ts","size":1120,"chunks":["a1ee98a"]},{"name":"./src/blocks/Columns/index.ts","size":210,"chunks":["a1ee98a"]},{"name":"./src/blocks/schema.ts","size":425,"chunks":["a1ee98a"]},{"name":"./src/extensions/DropCursor/MultiColumnDropCursorPlugin.ts","size":11324,"chunks":["a1ee98a"]},{"name":"./commonjsHelpers.js","size":140,"chunks":["a1ee98a"]},{"name":"../../node_modules/react/jsx-runtime.js?commonjs-module","size":31,"chunks":["a1ee98a"]},{"name":"../../node_modules/react/cjs/react-jsx-runtime.production.min.js?commonjs-exports","size":40,"chunks":["a1ee98a"]},{"name":"../../node_modules/react/index.js?commonjs-module","size":26,"chunks":["a1ee98a"]},{"name":"../../node_modules/react/cjs/react.production.min.js?commonjs-exports","size":30,"chunks":["a1ee98a"]},{"name":"../../node_modules/react/cjs/react.production.min.js","size":7647,"chunks":["a1ee98a"]},{"name":"../../node_modules/react/cjs/react.development.js?commonjs-module","size":38,"chunks":["a1ee98a"]},{"name":"../../node_modules/react/cjs/react.development.js","size":92443,"chunks":["a1ee98a"]},{"name":"../../node_modules/react/index.js","size":299,"chunks":["a1ee98a"]},{"name":"../../node_modules/react/cjs/react-jsx-runtime.production.min.js","size":1192,"chunks":["a1ee98a"]},{"name":"../../node_modules/react/cjs/react-jsx-runtime.development.js?commonjs-exports","size":37,"chunks":["a1ee98a"]},{"name":"../../node_modules/react/cjs/react-jsx-runtime.development.js","size":43835,"chunks":["a1ee98a"]},{"name":"../../node_modules/react/jsx-runtime.js","size":225,"chunks":["a1ee98a"]},{"name":"../../node_modules/react/index.js?commonjs-es-import","size":100,"chunks":["a1ee98a"]},{"name":"../../node_modules/react-icons/lib/iconContext.mjs","size":217,"chunks":["a1ee98a"]},{"name":"../../node_modules/react-icons/lib/iconBase.mjs","size":3929,"chunks":["a1ee98a"]},{"name":"../../node_modules/react-icons/tb/index.mjs","size":732,"chunks":["a1ee98a"]},{"name":"./src/extensions/SuggestionMenu/getMultiColumnSlashMenuItems.tsx","size":2087,"chunks":["a1ee98a"]},{"name":"./src/index.ts","size":0,"chunks":["a1ee98a"]}]}
1
+ {"builtAt":1732122433737,"assets":[{"name":"blocknote-xl-multi-column.umd.cjs","size":69012},{"name":"blocknote-xl-multi-column.umd.cjs.map","size":3631734}],"chunks":[{"id":"a1ee98a","entry":true,"initial":true,"files":["blocknote-xl-multi-column.umd.cjs"],"names":["index"]}],"modules":[{"name":"./src/i18n/locales/ar.ts","size":364,"chunks":["a1ee98a"]},{"name":"./src/i18n/locales/de.ts","size":400,"chunks":["a1ee98a"]},{"name":"./src/i18n/locales/en.ts","size":378,"chunks":["a1ee98a"]},{"name":"./src/i18n/locales/es.ts","size":392,"chunks":["a1ee98a"]},{"name":"./src/i18n/locales/fr.ts","size":398,"chunks":["a1ee98a"]},{"name":"./src/i18n/locales/hr.ts","size":396,"chunks":["a1ee98a"]},{"name":"./src/i18n/locales/is.ts","size":376,"chunks":["a1ee98a"]},{"name":"./src/i18n/locales/ja.ts","size":284,"chunks":["a1ee98a"]},{"name":"./src/i18n/locales/ko.ts","size":288,"chunks":["a1ee98a"]},{"name":"./src/i18n/locales/nl.ts","size":390,"chunks":["a1ee98a"]},{"name":"./src/i18n/locales/pl.ts","size":394,"chunks":["a1ee98a"]},{"name":"./src/i18n/locales/pt.ts","size":388,"chunks":["a1ee98a"]},{"name":"./src/i18n/locales/ru.ts","size":370,"chunks":["a1ee98a"]},{"name":"./src/i18n/locales/vi.ts","size":340,"chunks":["a1ee98a"]},{"name":"./src/i18n/locales/zh.ts","size":274,"chunks":["a1ee98a"]},{"name":"./src/i18n/locales/index.ts","size":0,"chunks":["a1ee98a"]},{"name":"./src/i18n/dictionary.ts","size":189,"chunks":["a1ee98a"]},{"name":"./src/extensions/ColumnResize/ColumnResizeExtension.ts","size":8309,"chunks":["a1ee98a"]},{"name":"./src/pm-nodes/Column.ts","size":2567,"chunks":["a1ee98a"]},{"name":"./src/pm-nodes/ColumnList.ts","size":1120,"chunks":["a1ee98a"]},{"name":"./src/blocks/Columns/index.ts","size":210,"chunks":["a1ee98a"]},{"name":"./src/blocks/schema.ts","size":425,"chunks":["a1ee98a"]},{"name":"./src/extensions/DropCursor/MultiColumnDropCursorPlugin.ts","size":11957,"chunks":["a1ee98a"]},{"name":"./commonjsHelpers.js","size":140,"chunks":["a1ee98a"]},{"name":"../../node_modules/react/jsx-runtime.js?commonjs-module","size":31,"chunks":["a1ee98a"]},{"name":"../../node_modules/react/cjs/react-jsx-runtime.production.min.js?commonjs-exports","size":40,"chunks":["a1ee98a"]},{"name":"../../node_modules/react/index.js?commonjs-module","size":26,"chunks":["a1ee98a"]},{"name":"../../node_modules/react/cjs/react.production.min.js?commonjs-exports","size":30,"chunks":["a1ee98a"]},{"name":"../../node_modules/react/cjs/react.production.min.js","size":7647,"chunks":["a1ee98a"]},{"name":"../../node_modules/react/cjs/react.development.js?commonjs-module","size":38,"chunks":["a1ee98a"]},{"name":"../../node_modules/react/cjs/react.development.js","size":92443,"chunks":["a1ee98a"]},{"name":"../../node_modules/react/index.js","size":299,"chunks":["a1ee98a"]},{"name":"../../node_modules/react/cjs/react-jsx-runtime.production.min.js","size":1192,"chunks":["a1ee98a"]},{"name":"../../node_modules/react/cjs/react-jsx-runtime.development.js?commonjs-exports","size":37,"chunks":["a1ee98a"]},{"name":"../../node_modules/react/cjs/react-jsx-runtime.development.js","size":43835,"chunks":["a1ee98a"]},{"name":"../../node_modules/react/jsx-runtime.js","size":225,"chunks":["a1ee98a"]},{"name":"../../node_modules/react/index.js?commonjs-es-import","size":100,"chunks":["a1ee98a"]},{"name":"../../node_modules/react-icons/lib/iconContext.mjs","size":217,"chunks":["a1ee98a"]},{"name":"../../node_modules/react-icons/lib/iconBase.mjs","size":3929,"chunks":["a1ee98a"]},{"name":"../../node_modules/react-icons/tb/index.mjs","size":732,"chunks":["a1ee98a"]},{"name":"./src/extensions/SuggestionMenu/getMultiColumnSlashMenuItems.tsx","size":2087,"chunks":["a1ee98a"]},{"name":"./src/index.ts","size":0,"chunks":["a1ee98a"]}]}
package/package.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "homepage": "https://github.com/TypeCellOS/BlockNote",
4
4
  "private": false,
5
5
  "license": "AGPL-3.0 OR PROPRIETARY",
6
- "version": "0.19.0",
6
+ "version": "0.19.2",
7
7
  "files": [
8
8
  "dist",
9
9
  "types",
@@ -45,8 +45,8 @@
45
45
  "clean": "rimraf dist && rimraf types"
46
46
  },
47
47
  "dependencies": {
48
- "@blocknote/core": "^0.19.0",
49
- "@blocknote/react": "^0.19.0",
48
+ "@blocknote/core": "^0.19.2",
49
+ "@blocknote/react": "^0.19.2",
50
50
  "@tiptap/core": "^2.7.1",
51
51
  "prosemirror-model": "^1.23.0",
52
52
  "prosemirror-state": "^1.4.3",
@@ -76,5 +76,5 @@
76
76
  "access": "public",
77
77
  "registry": "https://registry.npmjs.org/"
78
78
  },
79
- "gitHead": "c48248efc5ceab7962ed6ba39cf8db0cbf3f0d5c"
79
+ "gitHead": "203b0be11ecc5d667bd42e179c5f76dec8b6a19c"
80
80
  }
@@ -56,6 +56,10 @@ class ColumnResizePluginView implements PluginView {
56
56
  getColumnHoverOrDefaultState = (
57
57
  event: MouseEvent
58
58
  ): ColumnDefaultState | ColumnHoverState => {
59
+ if (!this.editor.isEditable) {
60
+ return { type: "default" };
61
+ }
62
+
59
63
  const target = event.target as HTMLElement;
60
64
 
61
65
  // Do nothing if the event target is outside the editor.
@@ -296,9 +300,11 @@ class ColumnResizePluginView implements PluginView {
296
300
  this.editor.sideMenu.unfreezeMenu();
297
301
  };
298
302
 
299
- // This is a required method for PluginView, so we get a type error if we
300
- // don't implement it.
301
- update: undefined;
303
+ destroy() {
304
+ this.view.dom.removeEventListener("mousedown", this.mouseDownHandler);
305
+ document.body.removeEventListener("mousemove", this.mouseMoveHandler);
306
+ document.body.removeEventListener("mouseup", this.mouseUpHandler);
307
+ }
302
308
  }
303
309
 
304
310
  const createColumnResizePlugin = (editor: BlockNoteEditor<any, any, any>) =>
@@ -2,7 +2,7 @@ import type { BlockNoteEditor } from "@blocknote/core";
2
2
  import {
3
3
  UniqueID,
4
4
  getBlockInfo,
5
- getNearestBlockContainerPos,
5
+ getNearestBlockPos,
6
6
  nodeToBlock,
7
7
  } from "@blocknote/core";
8
8
  import { EditorState, Plugin } from "prosemirror-state";
@@ -130,17 +130,24 @@ export function multiColumnDropCursor(
130
130
  (b) => b.id === blockInfo.bnBlock.node.attrs.id
131
131
  );
132
132
 
133
- const newChildren = columnList.children.toSpliced(
134
- position === "left" ? index : index + 1,
135
- 0,
136
- {
133
+ const newChildren = columnList.children
134
+ // If the dragged block is in one of the columns, remove it.
135
+ .map((column) => ({
136
+ ...column,
137
+ children: column.children.filter(
138
+ (block) => block.id !== draggedBlock.id
139
+ ),
140
+ }))
141
+ // Remove empty columns (can happen when dragged block is removed).
142
+ .filter((column) => column.children.length > 0)
143
+ // Insert the dragged block in the correct position.
144
+ .toSpliced(position === "left" ? index : index + 1, 0, {
137
145
  type: "column",
138
146
  children: [draggedBlock],
139
147
  props: {},
140
148
  content: undefined,
141
149
  id: UniqueID.options.generateID(),
142
- }
143
- );
150
+ });
144
151
 
145
152
  editor.removeBlocks([draggedBlock]);
146
153
 
@@ -201,14 +208,25 @@ class DropCursorView {
201
208
  const handler = (e: Event) => {
202
209
  (this as any)[name](e);
203
210
  };
204
- editorView.dom.addEventListener(name, handler);
211
+ editorView.dom.addEventListener(
212
+ name,
213
+ handler,
214
+ // drop event captured in bubbling phase to make sure
215
+ // "cursorPos" is set to undefined before the "handleDrop" handler is called
216
+ // (otherwise an error could be thrown, see https://github.com/TypeCellOS/BlockNote/pull/1240)
217
+ name === "drop" ? true : undefined
218
+ );
205
219
  return { name, handler };
206
220
  });
207
221
  }
208
222
 
209
223
  destroy() {
210
224
  this.handlers.forEach(({ name, handler }) =>
211
- this.editorView.dom.removeEventListener(name, handler)
225
+ this.editorView.dom.removeEventListener(
226
+ name,
227
+ handler,
228
+ name === "drop" ? true : undefined
229
+ )
212
230
  );
213
231
  }
214
232
 
@@ -267,6 +285,10 @@ class DropCursorView {
267
285
  ) {
268
286
  const block = this.editorView.nodeDOM(this.cursorPos.pos);
269
287
 
288
+ if (!block) {
289
+ throw new Error("nodeDOM returned null in updateOverlay");
290
+ }
291
+
270
292
  const blockRect = (block as HTMLElement).getBoundingClientRect();
271
293
  const halfWidth = (this.width / 2) * scaleY;
272
294
  const left =
@@ -434,7 +456,7 @@ class DropCursorView {
434
456
  target = point;
435
457
  }
436
458
  }
437
- // console.log("target", target);
459
+
438
460
  this.setCursor({ pos: target, position });
439
461
  this.scheduleRemoval(5000);
440
462
  }
@@ -445,7 +467,7 @@ class DropCursorView {
445
467
  }
446
468
 
447
469
  drop() {
448
- this.scheduleRemoval(20);
470
+ this.setCursor(undefined);
449
471
  }
450
472
 
451
473
  dragleave(event: DragEvent) {
@@ -465,7 +487,7 @@ function getTargetPosInfo(
465
487
  state: EditorState,
466
488
  eventPos: { pos: number; inside: number }
467
489
  ) {
468
- const blockPos = getNearestBlockContainerPos(state.doc, eventPos.pos);
490
+ const blockPos = getNearestBlockPos(state.doc, eventPos.pos);
469
491
 
470
492
  // if we're at a block that's in a column, we want to compare the mouse position to the column, not the block inside it
471
493
  // why? because we want to insert a new column in the columnList, instead of a new columnList inside of the column
@@ -0,0 +1,226 @@
1
+ // Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
2
+
3
+ exports[`Test removeBlocks > Remove all blocks in column 1`] = `
4
+ [
5
+ {
6
+ "children": [
7
+ {
8
+ "children": [],
9
+ "content": [
10
+ {
11
+ "styles": {},
12
+ "text": "Nested Paragraph 0",
13
+ "type": "text",
14
+ },
15
+ ],
16
+ "id": "nested-paragraph-0",
17
+ "props": {
18
+ "backgroundColor": "default",
19
+ "textAlignment": "left",
20
+ "textColor": "default",
21
+ },
22
+ "type": "paragraph",
23
+ },
24
+ ],
25
+ "content": [
26
+ {
27
+ "styles": {},
28
+ "text": "Paragraph 0",
29
+ "type": "text",
30
+ },
31
+ ],
32
+ "id": "paragraph-0",
33
+ "props": {
34
+ "backgroundColor": "default",
35
+ "textAlignment": "left",
36
+ "textColor": "default",
37
+ },
38
+ "type": "paragraph",
39
+ },
40
+ {
41
+ "children": [
42
+ {
43
+ "children": [
44
+ {
45
+ "children": [],
46
+ "content": [],
47
+ "id": "0",
48
+ "props": {
49
+ "backgroundColor": "default",
50
+ "textAlignment": "left",
51
+ "textColor": "default",
52
+ },
53
+ "type": "paragraph",
54
+ },
55
+ ],
56
+ "content": undefined,
57
+ "id": "column-0",
58
+ "props": {
59
+ "width": 1,
60
+ },
61
+ "type": "column",
62
+ },
63
+ {
64
+ "children": [
65
+ {
66
+ "children": [],
67
+ "content": [
68
+ {
69
+ "styles": {},
70
+ "text": "Column Paragraph 2",
71
+ "type": "text",
72
+ },
73
+ ],
74
+ "id": "column-paragraph-2",
75
+ "props": {
76
+ "backgroundColor": "default",
77
+ "textAlignment": "left",
78
+ "textColor": "default",
79
+ },
80
+ "type": "paragraph",
81
+ },
82
+ {
83
+ "children": [],
84
+ "content": [
85
+ {
86
+ "styles": {},
87
+ "text": "Column Paragraph 3",
88
+ "type": "text",
89
+ },
90
+ ],
91
+ "id": "column-paragraph-3",
92
+ "props": {
93
+ "backgroundColor": "default",
94
+ "textAlignment": "left",
95
+ "textColor": "default",
96
+ },
97
+ "type": "paragraph",
98
+ },
99
+ ],
100
+ "content": undefined,
101
+ "id": "column-1",
102
+ "props": {
103
+ "width": 1,
104
+ },
105
+ "type": "column",
106
+ },
107
+ ],
108
+ "content": undefined,
109
+ "id": "column-list-0",
110
+ "props": {},
111
+ "type": "columnList",
112
+ },
113
+ {
114
+ "children": [],
115
+ "content": [],
116
+ "id": "trailing-paragraph",
117
+ "props": {
118
+ "backgroundColor": "default",
119
+ "textAlignment": "left",
120
+ "textColor": "default",
121
+ },
122
+ "type": "paragraph",
123
+ },
124
+ ]
125
+ `;
126
+
127
+ exports[`Test removeBlocks > Remove all columns in columnList 1`] = `
128
+ [
129
+ {
130
+ "children": [
131
+ {
132
+ "children": [],
133
+ "content": [
134
+ {
135
+ "styles": {},
136
+ "text": "Nested Paragraph 0",
137
+ "type": "text",
138
+ },
139
+ ],
140
+ "id": "nested-paragraph-0",
141
+ "props": {
142
+ "backgroundColor": "default",
143
+ "textAlignment": "left",
144
+ "textColor": "default",
145
+ },
146
+ "type": "paragraph",
147
+ },
148
+ ],
149
+ "content": [
150
+ {
151
+ "styles": {},
152
+ "text": "Paragraph 0",
153
+ "type": "text",
154
+ },
155
+ ],
156
+ "id": "paragraph-0",
157
+ "props": {
158
+ "backgroundColor": "default",
159
+ "textAlignment": "left",
160
+ "textColor": "default",
161
+ },
162
+ "type": "paragraph",
163
+ },
164
+ {
165
+ "children": [
166
+ {
167
+ "children": [
168
+ {
169
+ "children": [],
170
+ "content": [],
171
+ "id": "1",
172
+ "props": {
173
+ "backgroundColor": "default",
174
+ "textAlignment": "left",
175
+ "textColor": "default",
176
+ },
177
+ "type": "paragraph",
178
+ },
179
+ ],
180
+ "content": undefined,
181
+ "id": "0",
182
+ "props": {
183
+ "width": 1,
184
+ },
185
+ "type": "column",
186
+ },
187
+ {
188
+ "children": [
189
+ {
190
+ "children": [],
191
+ "content": [],
192
+ "id": "3",
193
+ "props": {
194
+ "backgroundColor": "default",
195
+ "textAlignment": "left",
196
+ "textColor": "default",
197
+ },
198
+ "type": "paragraph",
199
+ },
200
+ ],
201
+ "content": undefined,
202
+ "id": "2",
203
+ "props": {
204
+ "width": 1,
205
+ },
206
+ "type": "column",
207
+ },
208
+ ],
209
+ "content": undefined,
210
+ "id": "column-list-0",
211
+ "props": {},
212
+ "type": "columnList",
213
+ },
214
+ {
215
+ "children": [],
216
+ "content": [],
217
+ "id": "trailing-paragraph",
218
+ "props": {
219
+ "backgroundColor": "default",
220
+ "textAlignment": "left",
221
+ "textColor": "default",
222
+ },
223
+ "type": "paragraph",
224
+ },
225
+ ]
226
+ `;
@@ -0,0 +1,175 @@
1
+ // Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
2
+
3
+ exports[`Test replaceBlocks > Replace paragraph with column list above column list empty column list 1`] = `
4
+ [
5
+ {
6
+ "children": [
7
+ {
8
+ "children": [
9
+ {
10
+ "children": [],
11
+ "content": [
12
+ {
13
+ "styles": {},
14
+ "text": "Inserted Column Paragraph",
15
+ "type": "text",
16
+ },
17
+ ],
18
+ "id": "2",
19
+ "props": {
20
+ "backgroundColor": "default",
21
+ "textAlignment": "left",
22
+ "textColor": "default",
23
+ },
24
+ "type": "paragraph",
25
+ },
26
+ ],
27
+ "content": undefined,
28
+ "id": "1",
29
+ "props": {
30
+ "width": 1,
31
+ },
32
+ "type": "column",
33
+ },
34
+ {
35
+ "children": [
36
+ {
37
+ "children": [],
38
+ "content": [
39
+ {
40
+ "styles": {},
41
+ "text": "Inserted Column Paragraph",
42
+ "type": "text",
43
+ },
44
+ ],
45
+ "id": "4",
46
+ "props": {
47
+ "backgroundColor": "default",
48
+ "textAlignment": "left",
49
+ "textColor": "default",
50
+ },
51
+ "type": "paragraph",
52
+ },
53
+ ],
54
+ "content": undefined,
55
+ "id": "3",
56
+ "props": {
57
+ "width": 1,
58
+ },
59
+ "type": "column",
60
+ },
61
+ ],
62
+ "content": undefined,
63
+ "id": "0",
64
+ "props": {},
65
+ "type": "columnList",
66
+ },
67
+ {
68
+ "children": [
69
+ {
70
+ "children": [
71
+ {
72
+ "children": [],
73
+ "content": [
74
+ {
75
+ "styles": {},
76
+ "text": "Column Paragraph 0",
77
+ "type": "text",
78
+ },
79
+ ],
80
+ "id": "column-paragraph-0",
81
+ "props": {
82
+ "backgroundColor": "default",
83
+ "textAlignment": "left",
84
+ "textColor": "default",
85
+ },
86
+ "type": "paragraph",
87
+ },
88
+ {
89
+ "children": [],
90
+ "content": [
91
+ {
92
+ "styles": {},
93
+ "text": "Column Paragraph 1",
94
+ "type": "text",
95
+ },
96
+ ],
97
+ "id": "column-paragraph-1",
98
+ "props": {
99
+ "backgroundColor": "default",
100
+ "textAlignment": "left",
101
+ "textColor": "default",
102
+ },
103
+ "type": "paragraph",
104
+ },
105
+ ],
106
+ "content": undefined,
107
+ "id": "column-0",
108
+ "props": {
109
+ "width": 1,
110
+ },
111
+ "type": "column",
112
+ },
113
+ {
114
+ "children": [
115
+ {
116
+ "children": [],
117
+ "content": [
118
+ {
119
+ "styles": {},
120
+ "text": "Column Paragraph 2",
121
+ "type": "text",
122
+ },
123
+ ],
124
+ "id": "column-paragraph-2",
125
+ "props": {
126
+ "backgroundColor": "default",
127
+ "textAlignment": "left",
128
+ "textColor": "default",
129
+ },
130
+ "type": "paragraph",
131
+ },
132
+ {
133
+ "children": [],
134
+ "content": [
135
+ {
136
+ "styles": {},
137
+ "text": "Column Paragraph 3",
138
+ "type": "text",
139
+ },
140
+ ],
141
+ "id": "column-paragraph-3",
142
+ "props": {
143
+ "backgroundColor": "default",
144
+ "textAlignment": "left",
145
+ "textColor": "default",
146
+ },
147
+ "type": "paragraph",
148
+ },
149
+ ],
150
+ "content": undefined,
151
+ "id": "column-1",
152
+ "props": {
153
+ "width": 1,
154
+ },
155
+ "type": "column",
156
+ },
157
+ ],
158
+ "content": undefined,
159
+ "id": "column-list-0",
160
+ "props": {},
161
+ "type": "columnList",
162
+ },
163
+ {
164
+ "children": [],
165
+ "content": [],
166
+ "id": "trailing-paragraph",
167
+ "props": {
168
+ "backgroundColor": "default",
169
+ "textAlignment": "left",
170
+ "textColor": "default",
171
+ },
172
+ "type": "paragraph",
173
+ },
174
+ ]
175
+ `;
@@ -0,0 +1,19 @@
1
+ import { describe, expect, it } from "vitest";
2
+
3
+ import { setupTestEnv } from "../setupTestEnv.js";
4
+
5
+ const getEditor = setupTestEnv();
6
+
7
+ describe("Test removeBlocks", () => {
8
+ it("Remove all blocks in column", () => {
9
+ getEditor().removeBlocks(["column-paragraph-0", "column-paragraph-1"]);
10
+
11
+ expect(getEditor().document).toMatchSnapshot();
12
+ });
13
+
14
+ it("Remove all columns in columnList", () => {
15
+ getEditor().removeBlocks(["column-0", "column-1"]);
16
+
17
+ expect(getEditor().document).toMatchSnapshot();
18
+ });
19
+ });
@@ -0,0 +1,40 @@
1
+ import { describe, expect, it } from "vitest";
2
+
3
+ import { setupTestEnv } from "../setupTestEnv.js";
4
+
5
+ const getEditor = setupTestEnv();
6
+
7
+ describe("Test replaceBlocks", () => {
8
+ it("Replace paragraph with column list above column list empty column list", () => {
9
+ getEditor().replaceBlocks(
10
+ ["paragraph-0"],
11
+ [
12
+ {
13
+ type: "columnList",
14
+ children: [
15
+ {
16
+ type: "column",
17
+ children: [
18
+ {
19
+ type: "paragraph",
20
+ content: "Inserted Column Paragraph",
21
+ },
22
+ ],
23
+ },
24
+ {
25
+ type: "column",
26
+ children: [
27
+ {
28
+ type: "paragraph",
29
+ content: "Inserted Column Paragraph",
30
+ },
31
+ ],
32
+ },
33
+ ],
34
+ },
35
+ ]
36
+ );
37
+
38
+ expect(getEditor().document).toMatchSnapshot();
39
+ });
40
+ });
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};