@atlaskit/editor-tables 2.2.4 → 2.2.6

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 (158) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/dist/cjs/cell-bookmark.js +0 -10
  3. package/dist/cjs/cell-selection.js +37 -102
  4. package/dist/cjs/index.js +0 -4
  5. package/dist/cjs/pm-plugins/input.js +17 -83
  6. package/dist/cjs/pm-plugins/plugin-key.js +0 -2
  7. package/dist/cjs/pm-plugins/table-editing.js +17 -18
  8. package/dist/cjs/pm-plugins.js +0 -2
  9. package/dist/cjs/table-map.js +67 -138
  10. package/dist/cjs/utils/add-column-at.js +0 -9
  11. package/dist/cjs/utils/add-column.js +8 -24
  12. package/dist/cjs/utils/add-row-at.js +8 -37
  13. package/dist/cjs/utils/add-row.js +2 -23
  14. package/dist/cjs/utils/analytics-helpers.js +4 -15
  15. package/dist/cjs/utils/cells.js +0 -12
  16. package/dist/cjs/utils/clone-tr.js +0 -2
  17. package/dist/cjs/utils/colspan.js +2 -18
  18. package/dist/cjs/utils/copy-paste.js +51 -139
  19. package/dist/cjs/utils/create-table.js +14 -28
  20. package/dist/cjs/utils/draw-cell-selection.js +0 -4
  21. package/dist/cjs/utils/empty-cells.js +0 -6
  22. package/dist/cjs/utils/find.js +6 -18
  23. package/dist/cjs/utils/fix-tables.js +13 -56
  24. package/dist/cjs/utils/for-each-cell.js +3 -17
  25. package/dist/cjs/utils/get-cell-selection-ranges.js +2 -9
  26. package/dist/cjs/utils/get-cells-in-column.js +0 -7
  27. package/dist/cjs/utils/get-cells-in-row.js +0 -7
  28. package/dist/cjs/utils/get-cells-in-table.js +0 -8
  29. package/dist/cjs/utils/get-selection-range-in-column.js +6 -27
  30. package/dist/cjs/utils/get-selection-range-in-row.js +6 -27
  31. package/dist/cjs/utils/get-selection-rect.js +0 -7
  32. package/dist/cjs/utils/go-to-next-cell.js +3 -22
  33. package/dist/cjs/utils/handle-paste.js +5 -34
  34. package/dist/cjs/utils/is-selected.js +6 -23
  35. package/dist/cjs/utils/is-selection-type.js +0 -2
  36. package/dist/cjs/utils/move-column.js +0 -12
  37. package/dist/cjs/utils/move-row.js +0 -11
  38. package/dist/cjs/utils/normalize-selection.js +3 -27
  39. package/dist/cjs/utils/remove-column.js +10 -46
  40. package/dist/cjs/utils/remove-row.js +8 -49
  41. package/dist/cjs/utils/remove-table.js +0 -6
  42. package/dist/cjs/utils/reorder-utils.js +13 -37
  43. package/dist/cjs/utils/replace-table.js +0 -8
  44. package/dist/cjs/utils/select-nodes.js +11 -31
  45. package/dist/cjs/utils/selection-cell.js +0 -5
  46. package/dist/cjs/utils/selection-rect.js +0 -10
  47. package/dist/cjs/utils/set-cell-attrs.js +0 -4
  48. package/dist/cjs/utils/split-cell-with-type.js +2 -35
  49. package/dist/cjs/utils/split-cell.js +0 -4
  50. package/dist/cjs/utils/table-node-types.js +4 -8
  51. package/dist/cjs/utils/tables.js +0 -4
  52. package/dist/cjs/utils/test-utils.js +9 -26
  53. package/dist/cjs/utils/toggle-header.js +3 -16
  54. package/dist/cjs/utils/uuid.js +0 -3
  55. package/dist/cjs/utils.js +0 -42
  56. package/dist/cjs/version.json +1 -1
  57. package/dist/es2019/cell-bookmark.js +0 -5
  58. package/dist/es2019/cell-selection.js +37 -81
  59. package/dist/es2019/index.js +1 -0
  60. package/dist/es2019/pm-plugins/input.js +15 -67
  61. package/dist/es2019/pm-plugins/table-editing.js +3 -12
  62. package/dist/es2019/table-map.js +57 -127
  63. package/dist/es2019/utils/add-column-at.js +2 -4
  64. package/dist/es2019/utils/add-column.js +6 -16
  65. package/dist/es2019/utils/add-row-at.js +8 -22
  66. package/dist/es2019/utils/add-row.js +2 -17
  67. package/dist/es2019/utils/analytics-helpers.js +0 -5
  68. package/dist/es2019/utils/cells.js +4 -9
  69. package/dist/es2019/utils/colspan.js +6 -11
  70. package/dist/es2019/utils/copy-paste.js +41 -115
  71. package/dist/es2019/utils/create-table.js +3 -12
  72. package/dist/es2019/utils/draw-cell-selection.js +0 -1
  73. package/dist/es2019/utils/empty-cells.js +2 -3
  74. package/dist/es2019/utils/find.js +8 -8
  75. package/dist/es2019/utils/fix-tables.js +17 -47
  76. package/dist/es2019/utils/for-each-cell.js +6 -11
  77. package/dist/es2019/utils/get-cell-selection-ranges.js +2 -4
  78. package/dist/es2019/utils/get-cells-in-column.js +2 -3
  79. package/dist/es2019/utils/get-cells-in-row.js +2 -3
  80. package/dist/es2019/utils/get-cells-in-table.js +2 -4
  81. package/dist/es2019/utils/get-selection-range-in-column.js +8 -22
  82. package/dist/es2019/utils/get-selection-range-in-row.js +8 -22
  83. package/dist/es2019/utils/get-selection-rect.js +2 -2
  84. package/dist/es2019/utils/go-to-next-cell.js +3 -19
  85. package/dist/es2019/utils/handle-paste.js +3 -14
  86. package/dist/es2019/utils/is-selected.js +8 -10
  87. package/dist/es2019/utils/is-selection-type.js +0 -1
  88. package/dist/es2019/utils/move-column.js +3 -8
  89. package/dist/es2019/utils/move-row.js +3 -7
  90. package/dist/es2019/utils/normalize-selection.js +0 -16
  91. package/dist/es2019/utils/remove-column.js +10 -27
  92. package/dist/es2019/utils/remove-row.js +12 -32
  93. package/dist/es2019/utils/remove-table.js +2 -4
  94. package/dist/es2019/utils/reorder-utils.js +11 -26
  95. package/dist/es2019/utils/replace-table.js +0 -2
  96. package/dist/es2019/utils/select-nodes.js +9 -20
  97. package/dist/es2019/utils/selection-cell.js +0 -2
  98. package/dist/es2019/utils/selection-rect.js +0 -4
  99. package/dist/es2019/utils/set-cell-attrs.js +2 -2
  100. package/dist/es2019/utils/split-cell-with-type.js +8 -28
  101. package/dist/es2019/utils/split-cell.js +3 -2
  102. package/dist/es2019/utils/table-node-types.js +4 -7
  103. package/dist/es2019/utils/tables.js +0 -2
  104. package/dist/es2019/utils/test-utils.js +12 -16
  105. package/dist/es2019/utils/toggle-header.js +3 -10
  106. package/dist/es2019/utils/uuid.js +0 -2
  107. package/dist/es2019/version.json +1 -1
  108. package/dist/esm/cell-bookmark.js +0 -5
  109. package/dist/esm/cell-selection.js +37 -79
  110. package/dist/esm/index.js +1 -0
  111. package/dist/esm/pm-plugins/input.js +17 -71
  112. package/dist/esm/pm-plugins/table-editing.js +8 -13
  113. package/dist/esm/table-map.js +68 -133
  114. package/dist/esm/utils/add-column-at.js +2 -4
  115. package/dist/esm/utils/add-column.js +8 -20
  116. package/dist/esm/utils/add-row-at.js +8 -23
  117. package/dist/esm/utils/add-row.js +2 -21
  118. package/dist/esm/utils/analytics-helpers.js +4 -10
  119. package/dist/esm/utils/cells.js +0 -5
  120. package/dist/esm/utils/colspan.js +2 -14
  121. package/dist/esm/utils/copy-paste.js +44 -125
  122. package/dist/esm/utils/create-table.js +14 -25
  123. package/dist/esm/utils/draw-cell-selection.js +0 -1
  124. package/dist/esm/utils/empty-cells.js +2 -3
  125. package/dist/esm/utils/find.js +8 -8
  126. package/dist/esm/utils/fix-tables.js +13 -49
  127. package/dist/esm/utils/for-each-cell.js +6 -11
  128. package/dist/esm/utils/get-cell-selection-ranges.js +2 -4
  129. package/dist/esm/utils/get-cells-in-column.js +2 -3
  130. package/dist/esm/utils/get-cells-in-row.js +2 -3
  131. package/dist/esm/utils/get-cells-in-table.js +2 -4
  132. package/dist/esm/utils/get-selection-range-in-column.js +8 -24
  133. package/dist/esm/utils/get-selection-range-in-row.js +8 -24
  134. package/dist/esm/utils/get-selection-rect.js +2 -2
  135. package/dist/esm/utils/go-to-next-cell.js +3 -19
  136. package/dist/esm/utils/handle-paste.js +5 -23
  137. package/dist/esm/utils/is-selected.js +8 -10
  138. package/dist/esm/utils/is-selection-type.js +0 -1
  139. package/dist/esm/utils/move-column.js +3 -8
  140. package/dist/esm/utils/move-row.js +3 -7
  141. package/dist/esm/utils/normalize-selection.js +3 -22
  142. package/dist/esm/utils/remove-column.js +10 -31
  143. package/dist/esm/utils/remove-row.js +8 -35
  144. package/dist/esm/utils/remove-table.js +2 -4
  145. package/dist/esm/utils/reorder-utils.js +11 -26
  146. package/dist/esm/utils/replace-table.js +0 -2
  147. package/dist/esm/utils/select-nodes.js +11 -22
  148. package/dist/esm/utils/selection-cell.js +0 -2
  149. package/dist/esm/utils/selection-rect.js +0 -4
  150. package/dist/esm/utils/set-cell-attrs.js +2 -2
  151. package/dist/esm/utils/split-cell-with-type.js +2 -28
  152. package/dist/esm/utils/split-cell.js +3 -2
  153. package/dist/esm/utils/table-node-types.js +4 -7
  154. package/dist/esm/utils/tables.js +0 -2
  155. package/dist/esm/utils/test-utils.js +12 -16
  156. package/dist/esm/utils/toggle-header.js +3 -10
  157. package/dist/esm/version.json +1 -1
  158. package/package.json +6 -4
@@ -1,7 +1,6 @@
1
1
  "use strict";
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
4
  Object.defineProperty(exports, "__esModule", {
6
5
  value: true
7
6
  });
@@ -9,31 +8,28 @@ exports.clipCells = clipCells;
9
8
  exports.fitSlice = fitSlice;
10
9
  exports.insertCells = insertCells;
11
10
  exports.pastedCells = pastedCells;
12
-
13
11
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
14
-
15
12
  var _prosemirrorModel = require("prosemirror-model");
16
-
17
13
  var _prosemirrorTransform = require("prosemirror-transform");
18
-
19
14
  var _cellSelection = require("../cell-selection");
20
-
21
15
  var _tableMap = require("../table-map");
22
-
23
16
  var _colspan = require("./colspan");
24
-
25
17
  var _selectionRect = require("./selection-rect");
26
-
27
18
  var _tableNodeTypes = require("./table-node-types");
28
-
29
19
  var _toggleHeader = require("./toggle-header");
30
-
31
20
  function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
32
-
33
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
34
-
21
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; } // Utilities used for copy/paste handling.
22
+ //
23
+ // This module handles pasting cell content into tables, or pasting
24
+ // anything into a cell selection, as replacing a block of cells with
25
+ // the content of the selection. When pasting cells into a cell, that
26
+ // involves placing the block of pasted content so that its top left
27
+ // aligns with the selection cell, optionally extending the table to
28
+ // the right or bottom to make sure it is large enough. Pasting into a
29
+ // cell selection is different, here the cells in the selection are
30
+ // clipped to the selection's rectangle, optionally repeating the
31
+ // pasted cells when they are smaller than the selection.
35
32
  // Utilities to help with copying and pasting table cells
36
-
37
33
  /**
38
34
  * Replace any header cells with table cells.
39
35
  *
@@ -45,56 +41,47 @@ function stripHeaderType(schema, cells) {
45
41
  var newCells = [];
46
42
  cells.forEach(function (cell) {
47
43
  var _cellNodeType$createA;
48
-
49
44
  // Convert to cell type if not already
50
45
  var cellNodeType = (0, _tableNodeTypes.tableNodeTypes)(schema).cell;
51
46
  var tableCell = cell.type === cellNodeType ? cell : (_cellNodeType$createA = cellNodeType.createAndFill(cell.attrs, cell.content, cell.marks)) !== null && _cellNodeType$createA !== void 0 ? _cellNodeType$createA : cell;
52
47
  newCells.push(tableCell);
53
48
  });
54
49
  return _prosemirrorModel.Fragment.from(newCells);
55
- } // : (Slice) → ?{width: number, height: number, rows: [Fragment]}
50
+ }
51
+
52
+ // : (Slice) → ?{width: number, height: number, rows: [Fragment]}
56
53
  // Get a rectangular area of cells from a slice, or null if the outer
57
54
  // nodes of the slice aren't table cells or rows.
58
-
59
-
60
55
  function pastedCells(slice) {
61
56
  if (!slice.size) {
62
57
  return null;
63
58
  }
64
-
65
59
  var content = slice.content,
66
- openStart = slice.openStart,
67
- openEnd = slice.openEnd;
68
-
60
+ openStart = slice.openStart,
61
+ openEnd = slice.openEnd;
69
62
  if (!content.firstChild) {
70
63
  throw new Error('pastedCells: no firstChild defined for content');
71
64
  }
72
-
73
65
  while (content.childCount === 1 && (openStart > 0 && openEnd > 0 || content.firstChild.type.spec.tableRole === 'table')) {
74
66
  openStart--;
75
67
  openEnd--;
76
68
  content = content.firstChild.content;
77
-
78
69
  if (!content.firstChild) {
79
70
  throw new Error('pastedCells: no firstChild defined for content');
80
71
  }
81
72
  }
82
-
83
73
  var first = content.firstChild;
84
74
  var role = first.type.spec.tableRole;
85
75
  var schema = first.type.schema;
86
76
  var rows = [];
87
-
88
77
  if (role === 'row') {
89
78
  for (var i = 0; i < content.childCount; i++) {
90
79
  var cells = content.child(i).content;
91
80
  var left = i ? 0 : Math.max(0, openStart - 1);
92
81
  var right = i < content.childCount - 1 ? 0 : Math.max(0, openEnd - 1);
93
-
94
82
  if (left || right) {
95
83
  cells = fitSlice((0, _tableNodeTypes.tableNodeTypes)(schema).row, new _prosemirrorModel.Slice(cells, left, right)).content;
96
84
  }
97
-
98
85
  rows.push(cells);
99
86
  }
100
87
  } else if (role === 'cell' || role === 'header_cell') {
@@ -102,389 +89,314 @@ function pastedCells(slice) {
102
89
  } else {
103
90
  return null;
104
91
  }
105
-
106
92
  var rowsWithoutHeaders = rows.map(function (row) {
107
93
  return stripHeaderType(schema, row);
108
94
  });
109
95
  return ensureRectangular(schema, rowsWithoutHeaders);
110
- } // : (Schema, [Fragment]) → {width: number, height: number, rows: [Fragment]}
96
+ }
97
+
98
+ // : (Schema, [Fragment]) → {width: number, height: number, rows: [Fragment]}
111
99
  // Compute the width and height of a set of cells, and make sure each
112
100
  // row has the same number of cells.
113
-
114
-
115
101
  function ensureRectangular(schema, rowsFragment) {
116
102
  var rows = rowsFragment;
117
103
  var widths = [];
118
-
119
104
  for (var i = 0; i < rows.length; i++) {
120
105
  var row = rows[i];
121
-
122
106
  for (var j = row.childCount - 1; j >= 0; j--) {
123
107
  var _row$child$attrs = row.child(j).attrs,
124
- rowspan = _row$child$attrs.rowspan,
125
- colspan = _row$child$attrs.colspan;
126
-
108
+ rowspan = _row$child$attrs.rowspan,
109
+ colspan = _row$child$attrs.colspan;
127
110
  for (var r = i; r < i + rowspan; r++) {
128
111
  widths[r] = (widths[r] || 0) + colspan;
129
112
  }
130
113
  }
131
114
  }
132
-
133
115
  var width = 0;
134
-
135
116
  for (var _r = 0; _r < widths.length; _r++) {
136
117
  width = Math.max(width, widths[_r]);
137
118
  }
138
-
139
119
  for (var _r2 = 0; _r2 < widths.length; _r2++) {
140
120
  if (_r2 >= rows.length) {
141
121
  rows.push(_prosemirrorModel.Fragment.empty);
142
122
  }
143
-
144
123
  if (widths[_r2] < width) {
145
124
  var empty = (0, _tableNodeTypes.tableNodeTypes)(schema).cell.createAndFill();
146
125
  var cells = [];
147
-
148
126
  for (var _i = widths[_r2]; _i < width; _i++) {
149
127
  cells.push(empty);
150
128
  }
151
-
152
129
  rows[_r2] = rows[_r2].append(_prosemirrorModel.Fragment.from(cells));
153
130
  }
154
131
  }
155
-
156
132
  return {
157
133
  height: rows.length,
158
134
  width: width,
159
135
  rows: rows
160
136
  };
161
137
  }
162
-
163
138
  function fitSlice(nodeType, slice) {
164
139
  var node = nodeType.createAndFill();
165
-
166
140
  if (!node) {
167
141
  throw new Error("fitSlice: unable to create node");
168
142
  }
169
-
170
143
  var tr = new _prosemirrorTransform.Transform(node).replace(0, node.content.size, slice);
171
144
  return tr.doc;
172
- } // : ({width: number, height: number, rows: [Fragment]}, number, number) → {width: number, height: number, rows: [Fragment]}
145
+ }
146
+
147
+ // : ({width: number, height: number, rows: [Fragment]}, number, number) → {width: number, height: number, rows: [Fragment]}
173
148
  // Clip or extend (repeat) the given set of cells to cover the given
174
149
  // width and height. Will clip rowspan/colspan cells at the edges when
175
150
  // they stick out.
176
-
177
-
178
151
  function clipCells(_ref, newWidth, newHeight) {
179
152
  var currentWidth = _ref.width,
180
- currentHeight = _ref.height,
181
- currentRows = _ref.rows;
153
+ currentHeight = _ref.height,
154
+ currentRows = _ref.rows;
182
155
  var rows = currentRows;
183
156
  var width = currentWidth;
184
157
  var height = currentHeight;
185
-
186
158
  if (width !== newWidth) {
187
159
  var added = [];
188
160
  var newRows = [];
189
-
190
161
  for (var row = 0; row < rows.length; row++) {
191
162
  var frag = rows[row];
192
163
  var cells = [];
193
-
194
164
  for (var col = added[row] || 0, i = 0; col < newWidth; i++) {
195
165
  var cell = frag.child(i % frag.childCount);
196
-
197
166
  if (col + cell.attrs.colspan > newWidth) {
198
167
  cell = cell.type.create((0, _colspan.removeColSpan)(cell.attrs, cell.attrs.colspan, col + cell.attrs.colspan - newWidth), cell.content);
199
168
  }
200
-
201
169
  cells.push(cell);
202
170
  col += cell.attrs.colspan;
203
-
204
171
  for (var j = 1; j < cell.attrs.rowspan; j++) {
205
172
  added[row + j] = (added[row + j] || 0) + cell.attrs.colspan;
206
173
  }
207
174
  }
208
-
209
175
  newRows.push(_prosemirrorModel.Fragment.from(cells));
210
176
  }
211
-
212
177
  rows = newRows;
213
178
  width = newWidth;
214
179
  }
215
-
216
180
  if (height !== newHeight) {
217
181
  var _newRows = [];
218
-
219
182
  for (var _row = 0, _i2 = 0; _row < newHeight; _row++, _i2++) {
220
183
  var _cells = [];
221
184
  var source = rows[_i2 % height];
222
-
223
185
  for (var _j = 0; _j < source.childCount; _j++) {
224
186
  var _cell = source.child(_j);
225
-
226
187
  if (_row + _cell.attrs.rowspan > newHeight) {
227
188
  _cell = _cell.type.create(_objectSpread(_objectSpread({}, _cell.attrs), {}, {
228
189
  rowspan: Math.max(1, newHeight - _cell.attrs.rowspan)
229
190
  }), _cell.content);
230
191
  }
231
-
232
192
  _cells.push(_cell);
233
193
  }
234
-
235
194
  _newRows.push(_prosemirrorModel.Fragment.from(_cells));
236
195
  }
237
-
238
196
  rows = _newRows;
239
197
  height = newHeight;
240
198
  }
241
-
242
199
  return {
243
200
  width: width,
244
201
  height: height,
245
202
  rows: rows
246
203
  };
247
- } // Make sure a table has at least the given width and height. Return
248
- // true if something was changed.
249
-
204
+ }
250
205
 
206
+ // Make sure a table has at least the given width and height. Return
207
+ // true if something was changed.
251
208
  function growTable(tr, map, table, start, width, height, mapFrom) {
252
209
  var schema = tr.doc.type.schema;
253
210
  var types = (0, _tableNodeTypes.tableNodeTypes)(schema);
254
211
  var empty;
255
212
  var emptyHead;
256
-
257
213
  if (width > map.width) {
258
214
  for (var row = 0, rowEnd = 0; row < map.height; row++) {
259
215
  var rowNode = table.child(row);
260
216
  rowEnd += rowNode.nodeSize;
261
217
  var cells = [];
262
218
  var add = void 0;
263
-
264
219
  if (rowNode.lastChild == null || rowNode.lastChild.type === types.cell) {
265
220
  add = empty || (empty = types.cell.createAndFill());
266
221
  } else {
267
222
  add = emptyHead || (emptyHead = types.header_cell.createAndFill());
268
223
  }
269
-
270
224
  for (var i = map.width; i < width; i++) {
271
225
  cells.push(add);
272
226
  }
273
-
274
227
  tr.insert(tr.mapping.slice(mapFrom).map(rowEnd - 1 + start), cells);
275
228
  }
276
229
  }
277
-
278
230
  if (height > map.height) {
279
231
  var _cells2 = [];
280
-
281
232
  for (var _i3 = 0, k = (map.height - 1) * map.width; _i3 < Math.max(map.width, width); _i3++) {
282
233
  var header = void 0;
283
-
284
234
  if (_i3 >= map.width) {
285
235
  header = false;
286
236
  } else {
287
237
  var mappedPos = map.map[k + _i3];
288
238
  var node = table.nodeAt(mappedPos);
289
-
290
239
  if (!node) {
291
240
  throw new Error("growTable: no node found at pos ".concat(mappedPos));
292
241
  }
293
-
294
242
  header = node.type === types.header_cell;
295
243
  }
296
-
297
244
  _cells2.push(header ? emptyHead || (emptyHead = types.header_cell.createAndFill()) : empty || (empty = types.cell.createAndFill()));
298
245
  }
299
-
300
246
  var emptyRow = types.row.create(null, _prosemirrorModel.Fragment.from(_cells2));
301
247
  var rows = [];
302
-
303
248
  for (var _i4 = map.height; _i4 < height; _i4++) {
304
249
  rows.push(emptyRow);
305
250
  }
306
-
307
251
  tr.insert(tr.mapping.slice(mapFrom).map(start + table.nodeSize - 2), rows);
308
252
  }
309
-
310
253
  return !!(empty || emptyHead);
311
- } // Make sure the given line (left, top) to (right, top) doesn't cross
254
+ }
255
+
256
+ // Make sure the given line (left, top) to (right, top) doesn't cross
312
257
  // any rowspan cells by splitting cells that cross it. Return true if
313
258
  // something changed.
314
-
315
-
316
259
  function isolateHorizontal(tr, map, table, start, left, right, top, mapFrom) {
317
260
  if (top === 0 || top === map.height) {
318
261
  return false;
319
262
  }
320
-
321
263
  var found = false;
322
-
323
264
  for (var col = left; col < right; col++) {
324
265
  var index = top * map.width + col;
325
266
  var pos = map.map[index];
326
-
327
267
  if (map.map[index - map.width] === pos) {
328
268
  found = true;
329
269
  var cell = table.nodeAt(pos);
330
-
331
270
  if (!cell) {
332
271
  throw new Error("isolateHorizontal: no cell found at pos ".concat(pos));
333
272
  }
334
-
335
273
  var _map$findCell = map.findCell(pos),
336
- cellTop = _map$findCell.top,
337
- cellLeft = _map$findCell.left;
338
-
274
+ cellTop = _map$findCell.top,
275
+ cellLeft = _map$findCell.left;
339
276
  tr.setNodeMarkup(tr.mapping.slice(mapFrom).map(pos + start), undefined, _objectSpread(_objectSpread({}, cell.attrs), {}, {
340
277
  rowspan: top - cellTop
341
278
  }));
342
279
  var newCell = cell.type.createAndFill(_objectSpread(_objectSpread({}, cell.attrs), {}, {
343
280
  rowspan: cellTop + cell.attrs.rowspan - top
344
281
  }));
345
-
346
282
  if (!newCell) {
347
283
  throw new Error('isolateHorizontal: failed to create cell');
348
284
  }
349
-
350
285
  tr.insert(tr.mapping.slice(mapFrom).map(map.positionAt(top, cellLeft, table)), newCell);
351
286
  col += cell.attrs.colspan - 1;
352
287
  }
353
288
  }
354
-
355
289
  return found;
356
- } // Make sure the given line (left, top) to (left, bottom) doesn't
290
+ }
291
+
292
+ // Make sure the given line (left, top) to (left, bottom) doesn't
357
293
  // cross any colspan cells by splitting cells that cross it. Return
358
294
  // true if something changed.
359
-
360
-
361
295
  function isolateVertical(tr, map, table, start, top, bottom, left, mapFrom) {
362
296
  if (left === 0 || left === map.width) {
363
297
  return false;
364
298
  }
365
-
366
299
  var found = false;
367
-
368
300
  for (var row = top; row < bottom; row++) {
369
301
  var index = row * map.width + left;
370
302
  var pos = map.map[index];
371
-
372
303
  if (map.map[index - 1] === pos) {
373
304
  found = true;
374
305
  var cell = table.nodeAt(pos);
375
-
376
306
  if (!cell) {
377
307
  throw new Error("isolateVertical: could not find cell at pos ".concat(pos));
378
308
  }
379
-
380
309
  var cellLeft = map.colCount(pos);
381
310
  var updatePos = tr.mapping.slice(mapFrom).map(pos + start);
382
311
  tr.setNodeMarkup(updatePos, undefined, (0, _colspan.removeColSpan)(cell.attrs, left - cellLeft, cell.attrs.colspan - (left - cellLeft)));
383
312
  var newCell = cell.type.createAndFill((0, _colspan.removeColSpan)(cell.attrs, 0, left - cellLeft));
384
-
385
313
  if (!newCell) {
386
314
  throw new Error('isolateVertical: failed to create cell');
387
315
  }
388
-
389
316
  tr.insert(updatePos + cell.nodeSize, newCell);
390
317
  row += cell.attrs.rowspan - 1;
391
318
  }
392
319
  }
393
-
394
320
  return found;
395
321
  }
396
-
397
322
  function applyHeaderCells(tr, tableMap, state, tableStart, table, headerRowEnabled, headerColumnEnabled) {
398
323
  var schema = state.schema;
399
-
400
324
  var setMarkup = function setMarkup(tr, row, col, headerEnabled) {
401
325
  var cellPos = tableStart + tableMap.positionAt(row, col, table);
402
326
  var cell = tr.doc.nodeAt(cellPos);
403
327
  var newType = headerEnabled ? schema.nodes.tableHeader : schema.nodes.tableCell;
404
328
  var isCellTypeChanged = newType !== (cell === null || cell === void 0 ? void 0 : cell.type);
405
329
  var isCellTypeValid = [schema.nodes.tableCell, schema.nodes.tableHeader].includes(cell === null || cell === void 0 ? void 0 : cell.type);
406
-
407
330
  if (isCellTypeChanged && isCellTypeValid) {
408
331
  tr.setNodeMarkup(cellPos, newType, cell === null || cell === void 0 ? void 0 : cell.attrs, cell === null || cell === void 0 ? void 0 : cell.marks);
409
332
  }
410
- }; // For row === 0 && col === 0 it is enabled if either are enabled
411
-
333
+ };
412
334
 
413
- setMarkup(tr, 0, 0, headerColumnEnabled || headerRowEnabled); // Header Column
335
+ // For row === 0 && col === 0 it is enabled if either are enabled
336
+ setMarkup(tr, 0, 0, headerColumnEnabled || headerRowEnabled);
414
337
 
338
+ // Header Column
415
339
  for (var col = 1; col < tableMap.width; col++) {
416
340
  setMarkup(tr, 0, col, headerRowEnabled);
417
- } // Header Row
418
-
419
-
341
+ }
342
+ // Header Row
420
343
  for (var row = 1; row < tableMap.height; row++) {
421
344
  setMarkup(tr, row, 0, headerColumnEnabled);
422
345
  }
423
- } // Insert the given set of cells (as returned by `pastedCells`) into a
424
- // table, at the position pointed at by rect.
425
-
346
+ }
426
347
 
348
+ // Insert the given set of cells (as returned by `pastedCells`) into a
349
+ // table, at the position pointed at by rect.
427
350
  function insertCells(state, dispatch, tableStart, rect, cells) {
428
351
  var table = state.doc;
429
352
  var newRect = (0, _selectionRect.selectedRect)(state);
430
- var types = (0, _tableNodeTypes.tableNodeTypes)(state.schema); // Get if the header row and column are enabled on the original table
353
+ var types = (0, _tableNodeTypes.tableNodeTypes)(state.schema);
431
354
 
355
+ // Get if the header row and column are enabled on the original table
432
356
  var headerRowEnabled = (0, _toggleHeader.isHeaderEnabledByType)('row', newRect, types);
433
357
  var headerColumnEnabled = (0, _toggleHeader.isHeaderEnabledByType)('column', newRect, types);
434
-
435
358
  if (tableStart) {
436
359
  table = state.doc.nodeAt(tableStart - 1);
437
-
438
360
  if (!table) {
439
361
  throw new Error("insertCells: could not find table at pos ".concat(tableStart - 1));
440
362
  }
441
363
  }
442
-
443
364
  var map = _tableMap.TableMap.get(table);
444
-
445
365
  var top = rect.top,
446
- left = rect.left;
366
+ left = rect.left;
447
367
  var right = left + cells.width;
448
368
  var bottom = top + cells.height;
449
369
  var tr = state.tr;
450
370
  var mapFrom = 0;
451
-
452
371
  function recomp() {
453
372
  table = tableStart ? tr.doc.nodeAt(tableStart - 1) : tr.doc;
454
373
  map = _tableMap.TableMap.get(table);
455
374
  mapFrom = tr.mapping.maps.length;
456
- } // Prepare the table to be large enough and not have any cells
375
+ }
376
+ // Prepare the table to be large enough and not have any cells
457
377
  // crossing the boundaries of the rectangle that we want to
458
378
  // insert into. If anything about it changes, recompute the table
459
379
  // map so that subsequent operations can see the current shape.
460
-
461
-
462
380
  if (growTable(tr, map, table, tableStart, right, bottom, mapFrom)) {
463
381
  recomp();
464
382
  }
465
-
466
383
  if (isolateHorizontal(tr, map, table, tableStart, left, right, top, mapFrom)) {
467
384
  recomp();
468
385
  }
469
-
470
386
  if (isolateHorizontal(tr, map, table, tableStart, left, right, bottom, mapFrom)) {
471
387
  recomp();
472
388
  }
473
-
474
389
  if (isolateVertical(tr, map, table, tableStart, top, bottom, left, mapFrom)) {
475
390
  recomp();
476
391
  }
477
-
478
392
  if (isolateVertical(tr, map, table, tableStart, top, bottom, right, mapFrom)) {
479
393
  recomp();
480
394
  }
481
-
482
395
  for (var row = top; row < bottom; row++) {
483
396
  var from = map.positionAt(row, left, table);
484
397
  var to = map.positionAt(row, right, table);
485
398
  tr.replace(tr.mapping.slice(mapFrom).map(from + tableStart), tr.mapping.slice(mapFrom).map(to + tableStart), new _prosemirrorModel.Slice(cells.rows[row - top], 0, 0));
486
399
  }
487
-
488
400
  recomp();
489
401
  applyHeaderCells(tr, map, state, tableStart, table, headerRowEnabled, headerColumnEnabled);
490
402
  tr.setSelection(new _cellSelection.CellSelection(tr.doc.resolve(tableStart + map.positionAt(top, left, table)), tr.doc.resolve(tableStart + map.positionAt(bottom - 1, right - 1, table))));
@@ -4,66 +4,52 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.createTable = void 0;
7
-
8
7
  var _tableNodeTypes2 = require("./table-node-types");
9
-
10
8
  var _uuid = require("./uuid");
11
-
12
9
  var createCell = function createCell(cellType, cellContent) {
13
10
  if (cellContent) {
14
11
  return cellType.createChecked(null, cellContent);
15
12
  }
16
-
17
13
  return cellType.createAndFill();
18
- }; // Returns a table node of a given size.
14
+ };
15
+
16
+ // Returns a table node of a given size.
19
17
  // `withHeaderRow` defines whether the first row of the table will be a header row.
20
18
  // `cellContent` defines the content of each cell.
21
-
22
-
23
19
  var createTable = function createTable(_ref) {
24
20
  var schema = _ref.schema,
25
- _ref$rowsCount = _ref.rowsCount,
26
- rowsCount = _ref$rowsCount === void 0 ? 3 : _ref$rowsCount,
27
- _ref$colsCount = _ref.colsCount,
28
- colsCount = _ref$colsCount === void 0 ? 3 : _ref$colsCount,
29
- _ref$withHeaderRow = _ref.withHeaderRow,
30
- withHeaderRow = _ref$withHeaderRow === void 0 ? true : _ref$withHeaderRow,
31
- cellContent = _ref.cellContent;
32
-
21
+ _ref$rowsCount = _ref.rowsCount,
22
+ rowsCount = _ref$rowsCount === void 0 ? 3 : _ref$rowsCount,
23
+ _ref$colsCount = _ref.colsCount,
24
+ colsCount = _ref$colsCount === void 0 ? 3 : _ref$colsCount,
25
+ _ref$withHeaderRow = _ref.withHeaderRow,
26
+ withHeaderRow = _ref$withHeaderRow === void 0 ? true : _ref$withHeaderRow,
27
+ cellContent = _ref.cellContent;
33
28
  var _tableNodeTypes = (0, _tableNodeTypes2.tableNodeTypes)(schema),
34
- tableCell = _tableNodeTypes.cell,
35
- tableHeader = _tableNodeTypes.header_cell,
36
- tableRow = _tableNodeTypes.row,
37
- table = _tableNodeTypes.table;
38
-
29
+ tableCell = _tableNodeTypes.cell,
30
+ tableHeader = _tableNodeTypes.header_cell,
31
+ tableRow = _tableNodeTypes.row,
32
+ table = _tableNodeTypes.table;
39
33
  var cells = [];
40
34
  var headerCells = [];
41
-
42
35
  for (var i = 0; i < colsCount; i++) {
43
36
  var cell = createCell(tableCell, cellContent);
44
-
45
37
  if (cell) {
46
38
  cells.push(cell);
47
39
  }
48
-
49
40
  if (withHeaderRow) {
50
41
  var headerCell = createCell(tableHeader, cellContent);
51
-
52
42
  if (headerCell) {
53
43
  headerCells.push(headerCell);
54
44
  }
55
45
  }
56
46
  }
57
-
58
47
  var rows = [];
59
-
60
48
  for (var _i = 0; _i < rowsCount; _i++) {
61
49
  rows.push(tableRow.createChecked(null, withHeaderRow && _i === 0 ? headerCells : cells));
62
50
  }
63
-
64
51
  return table.createChecked({
65
52
  localId: _uuid.uuid.generate()
66
53
  }, rows);
67
54
  };
68
-
69
55
  exports.createTable = createTable;
@@ -4,16 +4,12 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.drawCellSelection = drawCellSelection;
7
-
8
7
  var _prosemirrorView = require("prosemirror-view");
9
-
10
8
  var _cellSelection = require("../cell-selection");
11
-
12
9
  function drawCellSelection(state) {
13
10
  if (!(state.selection instanceof _cellSelection.CellSelection)) {
14
11
  return null;
15
12
  }
16
-
17
13
  var cells = [];
18
14
  state.selection.forEachCell(function (node, pos) {
19
15
  cells.push(_prosemirrorView.Decoration.node(pos, pos + node.nodeSize, {
@@ -4,25 +4,19 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.emptyCell = void 0;
7
-
8
7
  var _cloneTr = require("./clone-tr");
9
-
10
8
  var _tableNodeTypes = require("./table-node-types");
11
-
12
9
  // Returns a new transaction that clears the content of a given `cell`.
13
10
  var emptyCell = function emptyCell(cell, schema) {
14
11
  return function (tr) {
15
12
  if (cell) {
16
13
  var node = (0, _tableNodeTypes.tableNodeTypes)(schema).cell.createAndFill();
17
-
18
14
  if (node && !cell.node.content.eq(node.content)) {
19
15
  tr.replaceWith(cell.pos + 1, cell.pos + cell.node.nodeSize, node.content);
20
16
  return (0, _cloneTr.cloneTr)(tr);
21
17
  }
22
18
  }
23
-
24
19
  return tr;
25
20
  };
26
21
  };
27
-
28
22
  exports.emptyCell = emptyCell;