@atlaskit/editor-plugin-table 7.16.11 → 7.16.12

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 (242) hide show
  1. package/.eslintrc.js +3 -3
  2. package/CHANGELOG.md +8 -0
  3. package/dist/cjs/commands/misc.js +3 -3
  4. package/dist/cjs/nodeviews/TableCell.js +10 -10
  5. package/dist/cjs/nodeviews/TableContainer.js +41 -6
  6. package/dist/cjs/nodeviews/TableResizer.js +7 -7
  7. package/dist/cjs/nodeviews/TableRow.js +23 -23
  8. package/dist/cjs/pm-plugins/table-resizing/plugin.js +3 -3
  9. package/dist/cjs/pm-plugins/table-resizing/utils/resize-state.js +4 -4
  10. package/dist/cjs/pm-plugins/table-resizing/utils/scale-table.js +3 -3
  11. package/dist/cjs/ui/FloatingContextualMenu/styles.js +1 -1
  12. package/dist/cjs/ui/FloatingDragMenu/styles.js +1 -1
  13. package/dist/cjs/ui/common-styles.js +13 -13
  14. package/dist/cjs/ui/ui-styles.js +25 -25
  15. package/dist/cjs/utils/merged-cells.js +3 -3
  16. package/dist/es2019/commands/misc.js +3 -3
  17. package/dist/es2019/nodeviews/TableContainer.js +43 -5
  18. package/dist/es2019/nodeviews/TableResizer.js +7 -7
  19. package/dist/es2019/nodeviews/TableRow.js +21 -21
  20. package/dist/es2019/pm-plugins/table-resizing/plugin.js +3 -3
  21. package/dist/es2019/pm-plugins/table-resizing/utils/resize-state.js +4 -4
  22. package/dist/es2019/pm-plugins/table-resizing/utils/scale-table.js +3 -3
  23. package/dist/es2019/ui/FloatingContextualMenu/styles.js +47 -47
  24. package/dist/es2019/ui/FloatingDragMenu/styles.js +30 -30
  25. package/dist/es2019/ui/common-styles.js +802 -816
  26. package/dist/es2019/ui/ui-styles.js +665 -678
  27. package/dist/es2019/utils/merged-cells.js +3 -3
  28. package/dist/esm/commands/misc.js +3 -3
  29. package/dist/esm/nodeviews/TableCell.js +10 -10
  30. package/dist/esm/nodeviews/TableContainer.js +42 -7
  31. package/dist/esm/nodeviews/TableResizer.js +7 -7
  32. package/dist/esm/nodeviews/TableRow.js +23 -23
  33. package/dist/esm/pm-plugins/table-resizing/plugin.js +3 -3
  34. package/dist/esm/pm-plugins/table-resizing/utils/resize-state.js +4 -4
  35. package/dist/esm/pm-plugins/table-resizing/utils/scale-table.js +3 -3
  36. package/dist/esm/ui/FloatingContextualMenu/styles.js +1 -1
  37. package/dist/esm/ui/FloatingDragMenu/styles.js +1 -1
  38. package/dist/esm/ui/common-styles.js +13 -13
  39. package/dist/esm/ui/ui-styles.js +25 -25
  40. package/dist/esm/utils/merged-cells.js +3 -3
  41. package/dist/types/pm-plugins/decorations/utils/index.d.ts +1 -1
  42. package/dist/types/pm-plugins/drag-and-drop/utils/autoscrollers.d.ts +1 -1
  43. package/dist/types/pm-plugins/drag-and-drop/utils/getDragBehaviour.d.ts +1 -1
  44. package/dist/types/pm-plugins/table-resizing/utils/index.d.ts +1 -1
  45. package/dist/types/ui/ColumnResizeWidget/index.d.ts +1 -1
  46. package/dist/types/ui/FloatingAlignmentButtons/FloatingAlignmentButtons.d.ts +1 -1
  47. package/dist/types/ui/FloatingToolbarLabel/FloatingToolbarLabel.d.ts +1 -1
  48. package/dist/types/ui/TableFloatingColumnControls/ColumnDropTargets/ColumnDropTarget.d.ts +1 -1
  49. package/dist/types/ui/TableFloatingControls/CornerControls/index.d.ts +1 -1
  50. package/dist/types/ui/icons/DragHandleDisabledIcon.d.ts +1 -1
  51. package/dist/types-ts4.5/pm-plugins/decorations/utils/index.d.ts +1 -1
  52. package/dist/types-ts4.5/pm-plugins/drag-and-drop/utils/autoscrollers.d.ts +1 -1
  53. package/dist/types-ts4.5/pm-plugins/drag-and-drop/utils/getDragBehaviour.d.ts +1 -1
  54. package/dist/types-ts4.5/pm-plugins/table-resizing/utils/index.d.ts +1 -1
  55. package/dist/types-ts4.5/ui/ColumnResizeWidget/index.d.ts +1 -1
  56. package/dist/types-ts4.5/ui/FloatingAlignmentButtons/FloatingAlignmentButtons.d.ts +1 -1
  57. package/dist/types-ts4.5/ui/FloatingToolbarLabel/FloatingToolbarLabel.d.ts +1 -1
  58. package/dist/types-ts4.5/ui/TableFloatingColumnControls/ColumnDropTargets/ColumnDropTarget.d.ts +1 -1
  59. package/dist/types-ts4.5/ui/TableFloatingControls/CornerControls/index.d.ts +1 -1
  60. package/dist/types-ts4.5/ui/icons/DragHandleDisabledIcon.d.ts +1 -1
  61. package/docs/0-intro.tsx +9 -7
  62. package/package.json +2 -2
  63. package/report.api.md +67 -66
  64. package/src/commands/clear.ts +36 -44
  65. package/src/commands/collapse.ts +8 -8
  66. package/src/commands/column-resize.ts +412 -452
  67. package/src/commands/delete.ts +14 -14
  68. package/src/commands/display-mode.ts +10 -11
  69. package/src/commands/go-to-next-cell.ts +48 -54
  70. package/src/commands/hover.ts +210 -227
  71. package/src/commands/index.ts +35 -35
  72. package/src/commands/insert.ts +208 -235
  73. package/src/commands/misc.ts +655 -748
  74. package/src/commands/referentiality.ts +9 -9
  75. package/src/commands/selection.ts +433 -563
  76. package/src/commands/sort.ts +68 -86
  77. package/src/commands/split-cell.ts +14 -14
  78. package/src/commands/toggle.ts +69 -67
  79. package/src/commands-with-analytics.ts +570 -639
  80. package/src/create-plugin-config.ts +13 -13
  81. package/src/event-handlers.ts +513 -612
  82. package/src/handlers.ts +120 -133
  83. package/src/nodeviews/ExternalDropTargets.tsx +68 -73
  84. package/src/nodeviews/OverflowShadowsObserver.ts +148 -157
  85. package/src/nodeviews/TableCell.ts +47 -54
  86. package/src/nodeviews/TableComponent.tsx +1018 -1112
  87. package/src/nodeviews/TableComponentWithSharedState.tsx +91 -94
  88. package/src/nodeviews/TableContainer.tsx +363 -339
  89. package/src/nodeviews/TableNodeViewBase.ts +19 -24
  90. package/src/nodeviews/TableResizer.tsx +565 -657
  91. package/src/nodeviews/TableRow.ts +580 -629
  92. package/src/nodeviews/TableStickyScrollbar.ts +173 -190
  93. package/src/nodeviews/__mocks__/OverflowShadowsObserver.ts +8 -8
  94. package/src/nodeviews/__mocks__/OverridableMock.ts +14 -15
  95. package/src/nodeviews/table.tsx +345 -375
  96. package/src/nodeviews/types.ts +21 -24
  97. package/src/nodeviews/update-overflow-shadows.ts +8 -14
  98. package/src/plugin.tsx +578 -603
  99. package/src/pm-plugins/analytics/actions.ts +10 -12
  100. package/src/pm-plugins/analytics/commands.ts +31 -37
  101. package/src/pm-plugins/analytics/plugin-factory.ts +4 -2
  102. package/src/pm-plugins/analytics/plugin-key.ts +1 -3
  103. package/src/pm-plugins/analytics/plugin.ts +60 -70
  104. package/src/pm-plugins/analytics/reducer.ts +19 -19
  105. package/src/pm-plugins/analytics/types.ts +10 -10
  106. package/src/pm-plugins/analytics/utils/moved-event.ts +38 -38
  107. package/src/pm-plugins/decorations/plugin.ts +58 -77
  108. package/src/pm-plugins/decorations/utils/column-controls.ts +59 -71
  109. package/src/pm-plugins/decorations/utils/column-resizing.ts +50 -57
  110. package/src/pm-plugins/decorations/utils/compose-decorations.ts +6 -6
  111. package/src/pm-plugins/decorations/utils/index.ts +3 -6
  112. package/src/pm-plugins/decorations/utils/types.ts +7 -12
  113. package/src/pm-plugins/default-table-selection.ts +3 -3
  114. package/src/pm-plugins/drag-and-drop/actions.ts +25 -25
  115. package/src/pm-plugins/drag-and-drop/commands-with-analytics.ts +158 -190
  116. package/src/pm-plugins/drag-and-drop/commands.ts +154 -170
  117. package/src/pm-plugins/drag-and-drop/consts.ts +4 -5
  118. package/src/pm-plugins/drag-and-drop/plugin-factory.ts +23 -20
  119. package/src/pm-plugins/drag-and-drop/plugin-key.ts +1 -3
  120. package/src/pm-plugins/drag-and-drop/plugin.ts +329 -383
  121. package/src/pm-plugins/drag-and-drop/reducer.ts +30 -30
  122. package/src/pm-plugins/drag-and-drop/types.ts +8 -8
  123. package/src/pm-plugins/drag-and-drop/utils/autoscrollers.ts +38 -41
  124. package/src/pm-plugins/drag-and-drop/utils/getDragBehaviour.ts +3 -6
  125. package/src/pm-plugins/drag-and-drop/utils/monitor.ts +57 -70
  126. package/src/pm-plugins/keymap.ts +208 -220
  127. package/src/pm-plugins/main.ts +348 -400
  128. package/src/pm-plugins/plugin-factory.ts +32 -34
  129. package/src/pm-plugins/safari-delete-composition-text-issue-workaround.ts +83 -97
  130. package/src/pm-plugins/sticky-headers/commands.ts +2 -6
  131. package/src/pm-plugins/sticky-headers/plugin-key.ts +1 -3
  132. package/src/pm-plugins/sticky-headers/plugin-state.ts +41 -44
  133. package/src/pm-plugins/sticky-headers/plugin.ts +4 -4
  134. package/src/pm-plugins/sticky-headers/types.ts +8 -8
  135. package/src/pm-plugins/sticky-headers/util.ts +10 -10
  136. package/src/pm-plugins/table-analytics.ts +70 -72
  137. package/src/pm-plugins/table-local-id.ts +180 -184
  138. package/src/pm-plugins/table-resizing/commands.ts +72 -85
  139. package/src/pm-plugins/table-resizing/event-handlers.ts +298 -317
  140. package/src/pm-plugins/table-resizing/plugin-factory.ts +10 -10
  141. package/src/pm-plugins/table-resizing/plugin-key.ts +1 -3
  142. package/src/pm-plugins/table-resizing/plugin.ts +61 -68
  143. package/src/pm-plugins/table-resizing/reducer.ts +30 -33
  144. package/src/pm-plugins/table-resizing/utils/colgroup.ts +84 -84
  145. package/src/pm-plugins/table-resizing/utils/column-state.ts +78 -81
  146. package/src/pm-plugins/table-resizing/utils/content-width.ts +94 -114
  147. package/src/pm-plugins/table-resizing/utils/dom.ts +93 -110
  148. package/src/pm-plugins/table-resizing/utils/index.ts +29 -34
  149. package/src/pm-plugins/table-resizing/utils/misc.ts +94 -119
  150. package/src/pm-plugins/table-resizing/utils/resize-column.ts +93 -106
  151. package/src/pm-plugins/table-resizing/utils/resize-logic.ts +240 -257
  152. package/src/pm-plugins/table-resizing/utils/resize-state.ts +343 -372
  153. package/src/pm-plugins/table-resizing/utils/scale-table.ts +202 -207
  154. package/src/pm-plugins/table-resizing/utils/types.ts +17 -17
  155. package/src/pm-plugins/table-resizing/utils/unit-to-number.ts +1 -2
  156. package/src/pm-plugins/table-selection-keymap.ts +25 -51
  157. package/src/pm-plugins/table-width.ts +191 -204
  158. package/src/pm-plugins/view-mode-sort/index.ts +223 -227
  159. package/src/pm-plugins/view-mode-sort/plugin-key.ts +3 -2
  160. package/src/pm-plugins/view-mode-sort/types.ts +12 -12
  161. package/src/pm-plugins/view-mode-sort/utils.ts +108 -117
  162. package/src/reducer.ts +139 -155
  163. package/src/toolbar.tsx +815 -905
  164. package/src/transforms/column-width.ts +186 -213
  165. package/src/transforms/delete-columns.ts +208 -222
  166. package/src/transforms/delete-rows.ts +117 -121
  167. package/src/transforms/fix-tables.ts +190 -215
  168. package/src/transforms/merge.ts +263 -269
  169. package/src/transforms/replace-table.ts +27 -43
  170. package/src/transforms/split.ts +65 -75
  171. package/src/types.ts +421 -427
  172. package/src/ui/ColumnResizeWidget/index.tsx +40 -47
  173. package/src/ui/DragHandle/HandleIconComponent.tsx +9 -13
  174. package/src/ui/DragHandle/index.tsx +221 -250
  175. package/src/ui/DragPreview/index.tsx +35 -35
  176. package/src/ui/FloatingAlignmentButtons/FloatingAlignmentButtons.tsx +33 -41
  177. package/src/ui/FloatingContextualButton/FixedButton.tsx +154 -157
  178. package/src/ui/FloatingContextualButton/index.tsx +109 -115
  179. package/src/ui/FloatingContextualButton/styles.ts +43 -46
  180. package/src/ui/FloatingContextualMenu/ContextualMenu.tsx +634 -694
  181. package/src/ui/FloatingContextualMenu/index.tsx +83 -101
  182. package/src/ui/FloatingContextualMenu/styles.ts +57 -65
  183. package/src/ui/FloatingDeleteButton/DeleteButton.tsx +37 -37
  184. package/src/ui/FloatingDeleteButton/getPopUpOptions.ts +47 -57
  185. package/src/ui/FloatingDeleteButton/index.tsx +319 -350
  186. package/src/ui/FloatingDragMenu/DragMenu.tsx +555 -596
  187. package/src/ui/FloatingDragMenu/DropdownMenu.tsx +152 -162
  188. package/src/ui/FloatingDragMenu/index.tsx +88 -102
  189. package/src/ui/FloatingDragMenu/styles.ts +51 -54
  190. package/src/ui/FloatingInsertButton/InsertButton.tsx +204 -217
  191. package/src/ui/FloatingInsertButton/getPopupOptions.ts +100 -115
  192. package/src/ui/FloatingInsertButton/index.tsx +248 -292
  193. package/src/ui/FloatingToolbarLabel/FloatingToolbarLabel.tsx +24 -29
  194. package/src/ui/TableFloatingColumnControls/ColumnControls/index.tsx +308 -329
  195. package/src/ui/TableFloatingColumnControls/ColumnDropTargets/ColumnDropTarget.tsx +85 -94
  196. package/src/ui/TableFloatingColumnControls/ColumnDropTargets/index.tsx +46 -46
  197. package/src/ui/TableFloatingColumnControls/index.tsx +116 -136
  198. package/src/ui/TableFloatingControls/CornerControls/ClassicCornerControls.tsx +79 -91
  199. package/src/ui/TableFloatingControls/CornerControls/DragCornerControls.tsx +95 -102
  200. package/src/ui/TableFloatingControls/CornerControls/index.tsx +1 -4
  201. package/src/ui/TableFloatingControls/CornerControls/types.ts +8 -8
  202. package/src/ui/TableFloatingControls/FloatingControlsWithSelection.tsx +50 -50
  203. package/src/ui/TableFloatingControls/NumberColumn/index.tsx +111 -124
  204. package/src/ui/TableFloatingControls/RowControls/ClassicControls.tsx +86 -105
  205. package/src/ui/TableFloatingControls/RowControls/DragControls.tsx +305 -341
  206. package/src/ui/TableFloatingControls/RowDropTarget/index.tsx +72 -75
  207. package/src/ui/TableFloatingControls/index.tsx +191 -193
  208. package/src/ui/TableFullWidthLabel/index.tsx +20 -20
  209. package/src/ui/common-styles.ts +880 -912
  210. package/src/ui/consts.ts +29 -74
  211. package/src/ui/icons/AddColLeftIcon.tsx +33 -39
  212. package/src/ui/icons/AddColRightIcon.tsx +33 -39
  213. package/src/ui/icons/AddRowAboveIcon.tsx +16 -22
  214. package/src/ui/icons/AddRowBelowIcon.tsx +33 -39
  215. package/src/ui/icons/DisplayModeIcon.tsx +31 -31
  216. package/src/ui/icons/DragHandleDisabledIcon.tsx +19 -21
  217. package/src/ui/icons/DragHandleIcon.tsx +12 -12
  218. package/src/ui/icons/DragInMotionIcon.tsx +45 -52
  219. package/src/ui/icons/MergeCellsIcon.tsx +22 -28
  220. package/src/ui/icons/MinimisedHandle.tsx +9 -9
  221. package/src/ui/icons/SplitCellIcon.tsx +30 -36
  222. package/src/ui/ui-styles.ts +769 -798
  223. package/src/utils/alignment.ts +1 -1
  224. package/src/utils/analytics.ts +192 -208
  225. package/src/utils/collapse.ts +55 -64
  226. package/src/utils/column-controls.ts +237 -254
  227. package/src/utils/create.ts +30 -30
  228. package/src/utils/decoration.ts +482 -502
  229. package/src/utils/dom.ts +127 -134
  230. package/src/utils/drag-menu.ts +322 -373
  231. package/src/utils/get-allow-add-column-custom-step.ts +4 -5
  232. package/src/utils/guidelines.ts +10 -21
  233. package/src/utils/index.ts +68 -68
  234. package/src/utils/merged-cells.ts +245 -254
  235. package/src/utils/nodes.ts +91 -106
  236. package/src/utils/paste.ts +119 -135
  237. package/src/utils/row-controls.ts +199 -213
  238. package/src/utils/selection.ts +77 -87
  239. package/src/utils/snapping.ts +84 -97
  240. package/src/utils/table.ts +44 -44
  241. package/src/utils/transforms.ts +5 -5
  242. package/src/utils/update-plugin-state-decorations.ts +5 -9
@@ -15,261 +15,247 @@ import { rescaleColumns } from './column-width';
15
15
  import { splitCellsInColumns } from './split';
16
16
 
17
17
  const deleteColumnsCustomStep =
18
- (rect: Rect) =>
19
- (tr: Transaction): Transaction => {
20
- const table = findTable(tr.selection);
21
- if (!table) {
22
- return tr;
23
- }
18
+ (rect: Rect) =>
19
+ (tr: Transaction): Transaction => {
20
+ const table = findTable(tr.selection);
21
+ if (!table) {
22
+ return tr;
23
+ }
24
24
 
25
- // Need to split all the merge in the ranges (this is the current behaviour)
26
- // Maybe is better to split only the last column?
27
- // TODO: After talking with Roto about this behaviour, he likes when we dont split the columns, I am keeping this for consistency of the current implementation.
28
- splitCellsInColumns(tr, table.pos, rect.left, rect.right);
25
+ // Need to split all the merge in the ranges (this is the current behaviour)
26
+ // Maybe is better to split only the last column?
27
+ // TODO: After talking with Roto about this behaviour, he likes when we dont split the columns, I am keeping this for consistency of the current implementation.
28
+ splitCellsInColumns(tr, table.pos, rect.left, rect.right);
29
29
 
30
- // Delete the columns
31
- let mapStart = tr.mapping.maps.length;
32
- const originalDoc = tr.doc;
33
- const deletedColumns: number[] = [];
34
- for (let i = rect.left; i < rect.right; i++) {
35
- const step = AddColumnStep.create(originalDoc, table.pos, i, true);
36
- deletedColumns.push(i);
37
- tr.step(step.map(tr.mapping.slice(mapStart))!);
38
- }
30
+ // Delete the columns
31
+ let mapStart = tr.mapping.maps.length;
32
+ const originalDoc = tr.doc;
33
+ const deletedColumns: number[] = [];
34
+ for (let i = rect.left; i < rect.right; i++) {
35
+ const step = AddColumnStep.create(originalDoc, table.pos, i, true);
36
+ deletedColumns.push(i);
37
+ tr.step(step.map(tr.mapping.slice(mapStart))!);
38
+ }
39
39
 
40
- const tablePosResult = tr.mapping.mapResult(table.pos);
41
- if (tablePosResult.deleted) {
42
- const pos = Math.min(tablePosResult.pos, tr.doc.nodeSize - 1);
43
- tr.setSelection(Selection.near(tr.doc.resolve(pos)));
44
- } else {
45
- const newTable = tr.doc.nodeAt(tablePosResult.pos);
46
- if (newTable) {
47
- const cursorPos = getNextCursorPos(newTable, deletedColumns);
48
- tr.setSelection(Selection.near(tr.doc.resolve(table.pos + cursorPos)));
49
- }
50
- }
40
+ const tablePosResult = tr.mapping.mapResult(table.pos);
41
+ if (tablePosResult.deleted) {
42
+ const pos = Math.min(tablePosResult.pos, tr.doc.nodeSize - 1);
43
+ tr.setSelection(Selection.near(tr.doc.resolve(pos)));
44
+ } else {
45
+ const newTable = tr.doc.nodeAt(tablePosResult.pos);
46
+ if (newTable) {
47
+ const cursorPos = getNextCursorPos(newTable, deletedColumns);
48
+ tr.setSelection(Selection.near(tr.doc.resolve(table.pos + cursorPos)));
49
+ }
50
+ }
51
51
 
52
- return tr;
53
- };
52
+ return tr;
53
+ };
54
54
 
55
55
  const deleteColumnsLegacy =
56
- (rect: Rect) =>
57
- (tr: Transaction): Transaction => {
58
- const table = findTable(tr.selection);
59
- if (!table) {
60
- return tr;
61
- }
56
+ (rect: Rect) =>
57
+ (tr: Transaction): Transaction => {
58
+ const table = findTable(tr.selection);
59
+ if (!table) {
60
+ return tr;
61
+ }
62
62
 
63
- const columnsToDelete: number[] = [];
64
- for (let i = rect.left; i < rect.right; i++) {
65
- columnsToDelete.push(i);
66
- }
63
+ const columnsToDelete: number[] = [];
64
+ for (let i = rect.left; i < rect.right; i++) {
65
+ columnsToDelete.push(i);
66
+ }
67
67
 
68
- if (!columnsToDelete.length) {
69
- return tr;
70
- }
68
+ if (!columnsToDelete.length) {
69
+ return tr;
70
+ }
71
71
 
72
- const map = TableMap.get(table.node);
73
- const rows: PMNode[] = [];
74
- const seen: { [key: string]: boolean } = {};
75
- const deletedCells: { [key: string]: boolean } = {};
72
+ const map = TableMap.get(table.node);
73
+ const rows: PMNode[] = [];
74
+ const seen: { [key: string]: boolean } = {};
75
+ const deletedCells: { [key: string]: boolean } = {};
76
76
 
77
- for (let rowIndex = 0; rowIndex < map.height; rowIndex++) {
78
- const rowCells: PMNode[] = [];
79
- const row = table.node.child(rowIndex);
77
+ for (let rowIndex = 0; rowIndex < map.height; rowIndex++) {
78
+ const rowCells: PMNode[] = [];
79
+ const row = table.node.child(rowIndex);
80
80
 
81
- for (let colIndex = 0; colIndex < map.width; colIndex++) {
82
- const cellPos = map.map[rowIndex * map.width + colIndex];
83
- const cell = table.node.nodeAt(cellPos);
84
- if (!cell) {
85
- continue;
86
- }
87
- const cellsInColumn = map.cellsInRect({
88
- left: colIndex,
89
- top: 0,
90
- right: colIndex + 1,
91
- bottom: map.height,
92
- });
93
- if (columnsToDelete.indexOf(colIndex) === -1) {
94
- // decrement colspans for col-spanning cells that overlap deleted columns
95
- if (cellsInColumn.indexOf(cellPos) > -1 && !seen[cellPos]) {
96
- let overlappingCols = 0;
97
- columnsToDelete.forEach((colIndexToDelete) => {
98
- if (
99
- colIndex < colIndexToDelete &&
100
- cell.attrs.colspan + colIndex - 1 >= colIndexToDelete
101
- ) {
102
- overlappingCols += 1;
103
- }
104
- });
105
- if (overlappingCols > 0) {
106
- const attrs: CellAttributes = {
107
- ...cell.attrs,
108
- colspan: cell.attrs.colspan - overlappingCols,
109
- };
110
- if (cell.attrs.colwidth) {
111
- const minColIndex = Math.min(...columnsToDelete);
112
- const pos =
113
- minColIndex > 0 ? minColIndex - map.colCount(cellPos) : 0;
114
- const colwidth = cell.attrs.colwidth.slice() || [];
115
- colwidth.splice(pos, overlappingCols);
116
- attrs.colwidth = colwidth;
117
- }
118
- const newCell = cell.type.createChecked(
119
- attrs,
120
- cell.content,
121
- cell.marks,
122
- );
123
- rowCells.push(newCell);
124
- seen[cellPos] = true;
125
- continue;
126
- }
127
- } else if (deletedCells[cellPos]) {
128
- // if we're removing a col-spanning cell, we need to add missing cells to columns to the right
129
- const attrs: CellAttributes = {
130
- ...cell.attrs,
131
- colspan: 1,
132
- rowspan: 1,
133
- };
134
- if (cell.attrs.colwidth) {
135
- const pos = colIndex > 0 ? colIndex - map.colCount(cellPos) : 0;
136
- attrs.colwidth = cell.attrs.colwidth.slice().splice(pos, 1);
137
- }
138
- const newCell = cell.type.createChecked(
139
- attrs,
140
- cell.type.schema.nodes.paragraph.createChecked(),
141
- cell.marks,
142
- );
143
- rowCells.push(newCell);
144
- continue;
145
- }
81
+ for (let colIndex = 0; colIndex < map.width; colIndex++) {
82
+ const cellPos = map.map[rowIndex * map.width + colIndex];
83
+ const cell = table.node.nodeAt(cellPos);
84
+ if (!cell) {
85
+ continue;
86
+ }
87
+ const cellsInColumn = map.cellsInRect({
88
+ left: colIndex,
89
+ top: 0,
90
+ right: colIndex + 1,
91
+ bottom: map.height,
92
+ });
93
+ if (columnsToDelete.indexOf(colIndex) === -1) {
94
+ // decrement colspans for col-spanning cells that overlap deleted columns
95
+ if (cellsInColumn.indexOf(cellPos) > -1 && !seen[cellPos]) {
96
+ let overlappingCols = 0;
97
+ columnsToDelete.forEach((colIndexToDelete) => {
98
+ if (
99
+ colIndex < colIndexToDelete &&
100
+ cell.attrs.colspan + colIndex - 1 >= colIndexToDelete
101
+ ) {
102
+ overlappingCols += 1;
103
+ }
104
+ });
105
+ if (overlappingCols > 0) {
106
+ const attrs: CellAttributes = {
107
+ ...cell.attrs,
108
+ colspan: cell.attrs.colspan - overlappingCols,
109
+ };
110
+ if (cell.attrs.colwidth) {
111
+ const minColIndex = Math.min(...columnsToDelete);
112
+ const pos = minColIndex > 0 ? minColIndex - map.colCount(cellPos) : 0;
113
+ const colwidth = cell.attrs.colwidth.slice() || [];
114
+ colwidth.splice(pos, overlappingCols);
115
+ attrs.colwidth = colwidth;
116
+ }
117
+ const newCell = cell.type.createChecked(attrs, cell.content, cell.marks);
118
+ rowCells.push(newCell);
119
+ seen[cellPos] = true;
120
+ continue;
121
+ }
122
+ } else if (deletedCells[cellPos]) {
123
+ // if we're removing a col-spanning cell, we need to add missing cells to columns to the right
124
+ const attrs: CellAttributes = {
125
+ ...cell.attrs,
126
+ colspan: 1,
127
+ rowspan: 1,
128
+ };
129
+ if (cell.attrs.colwidth) {
130
+ const pos = colIndex > 0 ? colIndex - map.colCount(cellPos) : 0;
131
+ attrs.colwidth = cell.attrs.colwidth.slice().splice(pos, 1);
132
+ }
133
+ const newCell = cell.type.createChecked(
134
+ attrs,
135
+ cell.type.schema.nodes.paragraph.createChecked(),
136
+ cell.marks,
137
+ );
138
+ rowCells.push(newCell);
139
+ continue;
140
+ }
146
141
 
147
- // normal cells that we want to keep
148
- if (!seen[cellPos]) {
149
- seen[cellPos] = true;
150
- rowCells.push(cell);
151
- }
152
- } else if (cellsInColumn.indexOf(cellPos) > -1) {
153
- deletedCells[cellPos] = true;
154
- }
155
- }
142
+ // normal cells that we want to keep
143
+ if (!seen[cellPos]) {
144
+ seen[cellPos] = true;
145
+ rowCells.push(cell);
146
+ }
147
+ } else if (cellsInColumn.indexOf(cellPos) > -1) {
148
+ deletedCells[cellPos] = true;
149
+ }
150
+ }
156
151
 
157
- if (rowCells.length) {
158
- rows.push(row.type.createChecked(row.attrs, rowCells, row.marks));
159
- }
160
- }
152
+ if (rowCells.length) {
153
+ rows.push(row.type.createChecked(row.attrs, rowCells, row.marks));
154
+ }
155
+ }
161
156
 
162
- if (!rows.length) {
163
- return tr;
164
- }
157
+ if (!rows.length) {
158
+ return tr;
159
+ }
165
160
 
166
- const newTable = table.node.type.createChecked(
167
- table.node.attrs,
168
- rows,
169
- table.node.marks,
170
- );
161
+ const newTable = table.node.type.createChecked(table.node.attrs, rows, table.node.marks);
171
162
 
172
- const fixedTable = fixRowSpans(newTable);
173
- if (fixedTable === null) {
174
- return tr;
175
- }
163
+ const fixedTable = fixRowSpans(newTable);
164
+ if (fixedTable === null) {
165
+ return tr;
166
+ }
176
167
 
177
- const cursorPos = getNextCursorPos(newTable, columnsToDelete);
168
+ const cursorPos = getNextCursorPos(newTable, columnsToDelete);
178
169
 
179
- return (
180
- tr
181
- .replaceWith(table.pos, table.pos + table.node.nodeSize, fixedTable)
182
- // move cursor to the left of the deleted columns if possible, otherwise - to the first column
183
- .setSelection(Selection.near(tr.doc.resolve(table.pos + cursorPos)))
184
- );
185
- };
170
+ return (
171
+ tr
172
+ .replaceWith(table.pos, table.pos + table.node.nodeSize, fixedTable)
173
+ // move cursor to the left of the deleted columns if possible, otherwise - to the first column
174
+ .setSelection(Selection.near(tr.doc.resolve(table.pos + cursorPos)))
175
+ );
176
+ };
186
177
 
187
178
  function getNextCursorPos(table: PMNode, deletedColumns: number[]): number {
188
- const minColumn = Math.min(...deletedColumns);
189
- const nextColumnWithCursor = minColumn > 0 ? minColumn - 1 : 0;
190
- const map = TableMap.get(table);
191
- return map.map[nextColumnWithCursor];
179
+ const minColumn = Math.min(...deletedColumns);
180
+ const nextColumnWithCursor = minColumn > 0 ? minColumn - 1 : 0;
181
+ const map = TableMap.get(table);
182
+ return map.map[nextColumnWithCursor];
192
183
  }
193
184
 
194
185
  // returns an array of numbers, each number indicates the minimum rowSpan in each row
195
186
  function getMinRowSpans(table: PMNode): number[] {
196
- const minRowSpans: number[] = [];
197
- for (let rowIndex = 0; rowIndex < table.childCount; rowIndex++) {
198
- const rowSpans: number[] = [];
199
- const row = table.child(rowIndex);
200
- for (let colIndex = 0; colIndex < row.childCount; colIndex++) {
201
- const cell = row.child(colIndex);
202
- rowSpans.push(cell.attrs.rowspan);
203
- }
204
- minRowSpans[rowIndex] = Math.min(...rowSpans);
205
- }
187
+ const minRowSpans: number[] = [];
188
+ for (let rowIndex = 0; rowIndex < table.childCount; rowIndex++) {
189
+ const rowSpans: number[] = [];
190
+ const row = table.child(rowIndex);
191
+ for (let colIndex = 0; colIndex < row.childCount; colIndex++) {
192
+ const cell = row.child(colIndex);
193
+ rowSpans.push(cell.attrs.rowspan);
194
+ }
195
+ minRowSpans[rowIndex] = Math.min(...rowSpans);
196
+ }
206
197
 
207
- return minRowSpans;
198
+ return minRowSpans;
208
199
  }
209
200
 
210
201
  function fixRowSpans(table: PMNode): PMNode | null {
211
- const map = TableMap.get(table);
212
- const minRowSpans = getMinRowSpans(table);
213
- if (!minRowSpans.some((rowspan) => rowspan > 1)) {
214
- return table;
215
- }
202
+ const map = TableMap.get(table);
203
+ const minRowSpans = getMinRowSpans(table);
204
+ if (!minRowSpans.some((rowspan) => rowspan > 1)) {
205
+ return table;
206
+ }
216
207
 
217
- const rows: PMNode[] = [];
218
- for (let rowIndex = 0; rowIndex < map.height; rowIndex++) {
219
- const row = table.child(rowIndex);
220
- if (minRowSpans[rowIndex] === 1) {
221
- rows.push(row);
222
- } else {
223
- const rowCells: PMNode[] = [];
224
- for (let colIndex = 0; colIndex < row.childCount; colIndex++) {
225
- const cell = row.child(colIndex);
226
- const rowspan = cell.attrs.rowspan - minRowSpans[rowIndex] + 1;
227
- if (rowspan < 1) {
228
- return null;
229
- }
230
- const newCell = cell.type.createChecked(
231
- {
232
- ...cell.attrs,
233
- rowspan,
234
- },
235
- cell.content,
236
- cell.marks,
237
- );
238
- rowCells.push(newCell);
239
- }
240
- rows.push(row.type.createChecked(row.attrs, rowCells, row.marks));
241
- }
242
- }
208
+ const rows: PMNode[] = [];
209
+ for (let rowIndex = 0; rowIndex < map.height; rowIndex++) {
210
+ const row = table.child(rowIndex);
211
+ if (minRowSpans[rowIndex] === 1) {
212
+ rows.push(row);
213
+ } else {
214
+ const rowCells: PMNode[] = [];
215
+ for (let colIndex = 0; colIndex < row.childCount; colIndex++) {
216
+ const cell = row.child(colIndex);
217
+ const rowspan = cell.attrs.rowspan - minRowSpans[rowIndex] + 1;
218
+ if (rowspan < 1) {
219
+ return null;
220
+ }
221
+ const newCell = cell.type.createChecked(
222
+ {
223
+ ...cell.attrs,
224
+ rowspan,
225
+ },
226
+ cell.content,
227
+ cell.marks,
228
+ );
229
+ rowCells.push(newCell);
230
+ }
231
+ rows.push(row.type.createChecked(row.attrs, rowCells, row.marks));
232
+ }
233
+ }
243
234
 
244
- if (!rows.length) {
245
- return null;
246
- }
235
+ if (!rows.length) {
236
+ return null;
237
+ }
247
238
 
248
- return table.type.createChecked(table.attrs, rows, table.marks);
239
+ return table.type.createChecked(table.attrs, rows, table.marks);
249
240
  }
250
241
 
251
242
  export const deleteColumns =
252
- (
253
- rect: Rect,
254
- allowCustomStep: boolean,
255
- view?: EditorView,
256
- isTableScalingEnabled = false,
257
- ) =>
258
- (tr: Transaction) => {
259
- let updatedTr = tr;
260
- updatedTr.setMeta(META_KEYS.OVERFLOW_TRIGGER, {
261
- name: TABLE_OVERFLOW_CHANGE_TRIGGER.DELETED_COLUMN,
262
- });
243
+ (rect: Rect, allowCustomStep: boolean, view?: EditorView, isTableScalingEnabled = false) =>
244
+ (tr: Transaction) => {
245
+ let updatedTr = tr;
246
+ updatedTr.setMeta(META_KEYS.OVERFLOW_TRIGGER, {
247
+ name: TABLE_OVERFLOW_CHANGE_TRIGGER.DELETED_COLUMN,
248
+ });
263
249
 
264
- if (allowCustomStep) {
265
- updatedTr = deleteColumnsCustomStep(rect)(updatedTr);
266
- } else {
267
- updatedTr = deleteColumnsLegacy(rect)(updatedTr);
268
- }
269
- const table = findTable(updatedTr.selection);
250
+ if (allowCustomStep) {
251
+ updatedTr = deleteColumnsCustomStep(rect)(updatedTr);
252
+ } else {
253
+ updatedTr = deleteColumnsLegacy(rect)(updatedTr);
254
+ }
255
+ const table = findTable(updatedTr.selection);
270
256
 
271
- if (table) {
272
- updatedTr = rescaleColumns(isTableScalingEnabled)(table, view)(updatedTr);
273
- }
274
- return updatedTr;
275
- };
257
+ if (table) {
258
+ updatedTr = rescaleColumns(isTableScalingEnabled)(table, view)(updatedTr);
259
+ }
260
+ return updatedTr;
261
+ };