@atlaskit/editor-plugin-table 7.16.10 → 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 (244) hide show
  1. package/.eslintrc.js +3 -3
  2. package/CHANGELOG.md +1836 -1831
  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 +19 -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 +808 -814
  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 +19 -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 +5 -4
  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 +881 -903
  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
  243. package/tsconfig.app.json +107 -107
  244. package/tsconfig.dev.json +47 -47
@@ -1,155 +1,143 @@
1
1
  import { mapChildren } from '@atlaskit/editor-common/utils';
2
2
  import type { Node as PmNode } from '@atlaskit/editor-prosemirror/model';
3
- import type {
4
- EditorState,
5
- Selection,
6
- } from '@atlaskit/editor-prosemirror/state';
3
+ import type { EditorState, Selection } from '@atlaskit/editor-prosemirror/state';
7
4
  import { TableMap } from '@atlaskit/editor-tables/table-map';
8
5
  import { findTable } from '@atlaskit/editor-tables/utils';
9
6
 
10
7
  export const isIsolating = (node: PmNode): boolean => {
11
- return !!node.type.spec.isolating;
8
+ return !!node.type.spec.isolating;
12
9
  };
13
10
 
14
11
  export const containsHeaderColumn = (table: PmNode): boolean => {
15
- const map = TableMap.get(table);
16
- // Get cell positions for first column.
17
- const cellPositions = map.cellsInRect({
18
- left: 0,
19
- top: 0,
20
- right: 1,
21
- bottom: map.height,
22
- });
23
-
24
- for (let i = 0; i < cellPositions.length; i++) {
25
- try {
26
- const cell = table.nodeAt(cellPositions[i]);
27
- if (cell && cell.type !== table.type.schema.nodes.tableHeader) {
28
- return false;
29
- }
30
- } catch (e) {
31
- return false;
32
- }
33
- }
34
-
35
- return true;
12
+ const map = TableMap.get(table);
13
+ // Get cell positions for first column.
14
+ const cellPositions = map.cellsInRect({
15
+ left: 0,
16
+ top: 0,
17
+ right: 1,
18
+ bottom: map.height,
19
+ });
20
+
21
+ for (let i = 0; i < cellPositions.length; i++) {
22
+ try {
23
+ const cell = table.nodeAt(cellPositions[i]);
24
+ if (cell && cell.type !== table.type.schema.nodes.tableHeader) {
25
+ return false;
26
+ }
27
+ } catch (e) {
28
+ return false;
29
+ }
30
+ }
31
+
32
+ return true;
36
33
  };
37
34
 
38
35
  export const containsHeaderRow = (table: PmNode): boolean => {
39
- const map = TableMap.get(table);
40
- for (let i = 0; i < map.width; i++) {
41
- const cell = table.nodeAt(map.map[i]);
42
- if (cell && cell.type !== table.type.schema.nodes.tableHeader) {
43
- return false;
44
- }
45
- }
46
- return true;
36
+ const map = TableMap.get(table);
37
+ for (let i = 0; i < map.width; i++) {
38
+ const cell = table.nodeAt(map.map[i]);
39
+ if (cell && cell.type !== table.type.schema.nodes.tableHeader) {
40
+ return false;
41
+ }
42
+ }
43
+ return true;
47
44
  };
48
45
 
49
46
  export const checkIfHeaderColumnEnabled = (selection: Selection): boolean =>
50
- filterNearSelection(selection, findTable, containsHeaderColumn, false);
47
+ filterNearSelection(selection, findTable, containsHeaderColumn, false);
51
48
 
52
49
  export const checkIfHeaderRowEnabled = (selection: Selection): boolean =>
53
- filterNearSelection(selection, findTable, containsHeaderRow, false);
50
+ filterNearSelection(selection, findTable, containsHeaderRow, false);
54
51
 
55
52
  export const checkIfNumberColumnEnabled = (selection: Selection): boolean =>
56
- filterNearSelection(
57
- selection,
58
- findTable,
59
- (table) => !!table.attrs.isNumberColumnEnabled,
60
- false,
61
- );
53
+ filterNearSelection(selection, findTable, (table) => !!table.attrs.isNumberColumnEnabled, false);
62
54
 
63
55
  export const getTableWidth = (node: PmNode) => {
64
- return getTableWidths(node).reduce((acc, current) => acc + current, 0);
56
+ return getTableWidths(node).reduce((acc, current) => acc + current, 0);
65
57
  };
66
58
 
67
59
  export const tablesHaveDifferentColumnWidths = (
68
- currentTable: PmNode,
69
- previousTable: PmNode,
60
+ currentTable: PmNode,
61
+ previousTable: PmNode,
70
62
  ): boolean => {
71
- let currentTableWidths = getTableWidths(currentTable);
72
- let previousTableWidths = getTableWidths(previousTable);
63
+ let currentTableWidths = getTableWidths(currentTable);
64
+ let previousTableWidths = getTableWidths(previousTable);
73
65
 
74
- if (currentTableWidths.length !== previousTableWidths.length) {
75
- return true;
76
- }
66
+ if (currentTableWidths.length !== previousTableWidths.length) {
67
+ return true;
68
+ }
77
69
 
78
- const sameWidths = currentTableWidths.every(
79
- (value: number, index: number) => {
80
- return value === previousTableWidths[index];
81
- },
82
- );
70
+ const sameWidths = currentTableWidths.every((value: number, index: number) => {
71
+ return value === previousTableWidths[index];
72
+ });
83
73
 
84
- return sameWidths === false;
74
+ return sameWidths === false;
85
75
  };
86
76
 
87
77
  export const tablesHaveDifferentNoOfColumns = (
88
- currentTable: PmNode,
89
- previousTable: PmNode,
78
+ currentTable: PmNode,
79
+ previousTable: PmNode,
90
80
  ): boolean => {
91
- const prevMap = TableMap.get(previousTable);
92
- const currentMap = TableMap.get(currentTable);
81
+ const prevMap = TableMap.get(previousTable);
82
+ const currentMap = TableMap.get(currentTable);
93
83
 
94
- return prevMap.width !== currentMap.width;
84
+ return prevMap.width !== currentMap.width;
95
85
  };
96
86
 
97
87
  export const tablesHaveDifferentNoOfRows = (
98
- currentTable: PmNode,
99
- previousTable: PmNode,
88
+ currentTable: PmNode,
89
+ previousTable: PmNode,
100
90
  ): boolean => {
101
- const prevMap = TableMap.get(previousTable);
102
- const currentMap = TableMap.get(currentTable);
91
+ const prevMap = TableMap.get(previousTable);
92
+ const currentMap = TableMap.get(currentTable);
103
93
 
104
- return prevMap.height !== currentMap.height;
94
+ return prevMap.height !== currentMap.height;
105
95
  };
106
96
 
107
97
  function filterNearSelection<T, U>(
108
- selection: Selection,
109
- findNode: (selection: Selection) => { pos: number; node: PmNode } | undefined,
110
- predicate: (node: PmNode, pos?: number) => T,
111
- defaultValue: U,
98
+ selection: Selection,
99
+ findNode: (selection: Selection) => { pos: number; node: PmNode } | undefined,
100
+ predicate: (node: PmNode, pos?: number) => T,
101
+ defaultValue: U,
112
102
  ): T | U {
113
- const found = findNode(selection);
114
- if (!found) {
115
- return defaultValue;
116
- }
103
+ const found = findNode(selection);
104
+ if (!found) {
105
+ return defaultValue;
106
+ }
117
107
 
118
- return predicate(found.node, found.pos);
108
+ return predicate(found.node, found.pos);
119
109
  }
120
110
 
121
111
  function getTableWidths(node: PmNode): number[] {
122
- if (!node.content.firstChild) {
123
- return [];
124
- }
125
-
126
- let tableWidths: Array<number> = [];
127
- node.content.firstChild.content.forEach((cell) => {
128
- if (Array.isArray(cell.attrs.colwidth)) {
129
- const colspan = cell.attrs.colspan || 1;
130
- tableWidths.push(...cell.attrs.colwidth.slice(0, colspan));
131
- }
132
- });
133
-
134
- return tableWidths;
112
+ if (!node.content.firstChild) {
113
+ return [];
114
+ }
115
+
116
+ let tableWidths: Array<number> = [];
117
+ node.content.firstChild.content.forEach((cell) => {
118
+ if (Array.isArray(cell.attrs.colwidth)) {
119
+ const colspan = cell.attrs.colspan || 1;
120
+ tableWidths.push(...cell.attrs.colwidth.slice(0, colspan));
121
+ }
122
+ });
123
+
124
+ return tableWidths;
135
125
  }
136
126
 
137
127
  export const isTableNested = (state: EditorState, tablePos = 0): boolean => {
138
- const parent = state.doc.resolve(tablePos).parent;
139
- const nodeTypes = state.schema.nodes;
140
-
141
- return (
142
- parent.type === nodeTypes.layoutColumn ||
143
- parent.type === nodeTypes.expand ||
144
- parent.type === nodeTypes.bodiedExtension ||
145
- parent.type === nodeTypes.extensionFrame
146
- );
128
+ const parent = state.doc.resolve(tablePos).parent;
129
+ const nodeTypes = state.schema.nodes;
130
+
131
+ return (
132
+ parent.type === nodeTypes.layoutColumn ||
133
+ parent.type === nodeTypes.expand ||
134
+ parent.type === nodeTypes.bodiedExtension ||
135
+ parent.type === nodeTypes.extensionFrame
136
+ );
147
137
  };
148
138
 
149
139
  export const anyChildCellMergedAcrossRow = (node: PmNode): boolean =>
150
- mapChildren(node, (child) => child.attrs.rowspan || 0).some(
151
- (rowspan) => rowspan > 1,
152
- );
140
+ mapChildren(node, (child) => child.attrs.rowspan || 0).some((rowspan) => rowspan > 1);
153
141
 
154
142
  /**
155
143
  * Check if a given node is a header row with this definition:
@@ -160,12 +148,9 @@ export const anyChildCellMergedAcrossRow = (node: PmNode): boolean =>
160
148
  * @return boolean if it meets definition
161
149
  */
162
150
  export const supportedHeaderRow = (node: PmNode): boolean => {
163
- const allHeaders = mapChildren(
164
- node,
165
- (child) => child.type.name === 'tableHeader',
166
- ).every(Boolean);
151
+ const allHeaders = mapChildren(node, (child) => child.type.name === 'tableHeader').every(Boolean);
167
152
 
168
- const someMerged = anyChildCellMergedAcrossRow(node);
153
+ const someMerged = anyChildCellMergedAcrossRow(node);
169
154
 
170
- return allHeaders && !someMerged;
155
+ return allHeaders && !someMerged;
171
156
  };
@@ -1,8 +1,5 @@
1
1
  import { flatmap, mapSlice } from '@atlaskit/editor-common/utils';
2
- import type {
3
- Node as PMNode,
4
- Schema,
5
- } from '@atlaskit/editor-prosemirror/model';
2
+ import type { Node as PMNode, Schema } from '@atlaskit/editor-prosemirror/model';
6
3
  import { Fragment, Slice } from '@atlaskit/editor-prosemirror/model';
7
4
  import type { EditorState } from '@atlaskit/editor-prosemirror/state';
8
5
  import { flatten } from '@atlaskit/editor-prosemirror/utils';
@@ -10,37 +7,32 @@ import { flatten } from '@atlaskit/editor-prosemirror/utils';
10
7
  import { getPluginState } from '../pm-plugins/plugin-factory';
11
8
 
12
9
  // lifts up the content of each cell, returning an array of nodes
13
- export const unwrapContentFromTable = (
14
- maybeTable: PMNode,
15
- ): PMNode | PMNode[] => {
16
- const { schema } = maybeTable.type;
17
- if (maybeTable.type === schema.nodes.table) {
18
- const content: PMNode[] = [];
19
- const { tableCell, tableHeader } = schema.nodes;
20
- maybeTable.descendants((maybeCell) => {
21
- if (maybeCell.type === tableCell || maybeCell.type === tableHeader) {
22
- content.push(...flatten(maybeCell, false).map((child) => child.node));
23
- }
24
- return true;
25
- });
26
- return content;
27
- }
28
- return maybeTable;
10
+ export const unwrapContentFromTable = (maybeTable: PMNode): PMNode | PMNode[] => {
11
+ const { schema } = maybeTable.type;
12
+ if (maybeTable.type === schema.nodes.table) {
13
+ const content: PMNode[] = [];
14
+ const { tableCell, tableHeader } = schema.nodes;
15
+ maybeTable.descendants((maybeCell) => {
16
+ if (maybeCell.type === tableCell || maybeCell.type === tableHeader) {
17
+ content.push(...flatten(maybeCell, false).map((child) => child.node));
18
+ }
19
+ return true;
20
+ });
21
+ return content;
22
+ }
23
+ return maybeTable;
29
24
  };
30
25
 
31
- export const removeTableFromFirstChild = (
32
- node: PMNode,
33
- i: number,
34
- ): PMNode | PMNode[] => {
35
- return i === 0 ? unwrapContentFromTable(node) : node;
26
+ export const removeTableFromFirstChild = (node: PMNode, i: number): PMNode | PMNode[] => {
27
+ return i === 0 ? unwrapContentFromTable(node) : node;
36
28
  };
37
29
 
38
30
  export const removeTableFromLastChild = (
39
- node: PMNode,
40
- i: number,
41
- fragment: Fragment,
31
+ node: PMNode,
32
+ i: number,
33
+ fragment: Fragment,
42
34
  ): PMNode | PMNode[] => {
43
- return i === fragment.childCount - 1 ? unwrapContentFromTable(node) : node;
35
+ return i === fragment.childCount - 1 ? unwrapContentFromTable(node) : node;
44
36
  };
45
37
 
46
38
  /**
@@ -49,118 +41,110 @@ export const removeTableFromLastChild = (
49
41
  * This code will look for that pattern and fix it.
50
42
  */
51
43
  export const transformSliceToFixHardBreakProblemOnCopyFromCell = (
52
- slice: Slice,
53
- schema: Schema,
44
+ slice: Slice,
45
+ schema: Schema,
54
46
  ): Slice => {
55
- const { paragraph, table, hardBreak } = schema.nodes;
56
- const emptyParagraphNode = paragraph.createAndFill();
57
-
58
- const hardBreakNode = hardBreak?.createAndFill();
59
- const paragraphNodeSize = emptyParagraphNode
60
- ? emptyParagraphNode.nodeSize
61
- : 0;
62
- const hardBreakNodeSize = hardBreakNode ? hardBreakNode.nodeSize : 0;
63
- const paragraphWithHardBreakSize = paragraphNodeSize + hardBreakNodeSize;
64
-
65
- if (
66
- slice.content.childCount === 2 &&
67
- slice.content.firstChild &&
68
- slice.content.lastChild &&
69
- slice.content.firstChild.type === table &&
70
- slice.content.lastChild.type === paragraph &&
71
- slice.content.lastChild.nodeSize === paragraphWithHardBreakSize
72
- ) {
73
- const nodes = unwrapContentFromTable(slice.content.firstChild);
74
- if (nodes instanceof Array) {
75
- return new Slice(
76
- Fragment.from(
77
- // keep only the content and discard the hardBreak
78
- nodes[0],
79
- ),
80
- slice.openStart,
81
- slice.openEnd,
82
- );
83
- }
84
- }
85
-
86
- return slice;
47
+ const { paragraph, table, hardBreak } = schema.nodes;
48
+ const emptyParagraphNode = paragraph.createAndFill();
49
+
50
+ const hardBreakNode = hardBreak?.createAndFill();
51
+ const paragraphNodeSize = emptyParagraphNode ? emptyParagraphNode.nodeSize : 0;
52
+ const hardBreakNodeSize = hardBreakNode ? hardBreakNode.nodeSize : 0;
53
+ const paragraphWithHardBreakSize = paragraphNodeSize + hardBreakNodeSize;
54
+
55
+ if (
56
+ slice.content.childCount === 2 &&
57
+ slice.content.firstChild &&
58
+ slice.content.lastChild &&
59
+ slice.content.firstChild.type === table &&
60
+ slice.content.lastChild.type === paragraph &&
61
+ slice.content.lastChild.nodeSize === paragraphWithHardBreakSize
62
+ ) {
63
+ const nodes = unwrapContentFromTable(slice.content.firstChild);
64
+ if (nodes instanceof Array) {
65
+ return new Slice(
66
+ Fragment.from(
67
+ // keep only the content and discard the hardBreak
68
+ nodes[0],
69
+ ),
70
+ slice.openStart,
71
+ slice.openEnd,
72
+ );
73
+ }
74
+ }
75
+
76
+ return slice;
87
77
  };
88
78
 
89
- export const transformSliceToRemoveOpenTable = (
90
- slice: Slice,
91
- schema: Schema,
92
- ): Slice => {
93
- // we're removing the table, tableRow and tableCell reducing the open depth by 3
94
- const depthDecrement = 3;
95
-
96
- // Case 1: A slice entirely within a single CELL
97
- if (
98
- // starts and ends inside of a cell
99
- slice.openStart >= 4 &&
100
- slice.openEnd >= 4 &&
101
- // slice is a table node
102
- slice.content.childCount === 1 &&
103
- slice.content.firstChild!.type === schema.nodes.table
104
- ) {
105
- // prosemirror-view has a bug that it duplicates table entry when selecting multiple paragraphs in a table cell.
106
- // https://github.com/ProseMirror/prosemirror/issues/1270
107
- // The structure becomes
108
- // table(genuine) > tableRow(genuine) > table(duplicated) > tableRow(duplicated) > tableCell/tableHeader(genuine) > contents(genuine)
109
- // As we are removing wrapping table anyway, we keep duplicated table and tableRow for simplicity
110
- let cleaned = slice;
111
- if (
112
- slice.content.firstChild?.content?.firstChild?.content?.firstChild
113
- ?.type === schema.nodes.table
114
- ) {
115
- cleaned = new Slice(
116
- slice.content.firstChild.content.firstChild.content,
117
- slice.openStart - 2,
118
- slice.openEnd - 2,
119
- );
120
- }
121
-
122
- return new Slice(
123
- flatmap(cleaned.content, unwrapContentFromTable),
124
- cleaned.openStart - depthDecrement,
125
- cleaned.openEnd - depthDecrement,
126
- );
127
- }
128
-
129
- // Case 2: A slice starting within a CELL and ending outside the table
130
- if (
131
- // starts inside of a cell but ends outside of the starting table
132
- slice.openStart >= 4 &&
133
- // slice starts from a table node (and spans across more than one node)
134
- slice.content.childCount > 1 &&
135
- slice.content.firstChild?.type === schema.nodes.table
136
- ) {
137
- // repoint the slice's cutting depth so that cell content where the slice starts
138
- // does not get lifted out of the cell on paste
139
- return new Slice(slice.content, 1, slice.openEnd);
140
- }
141
-
142
- return slice;
79
+ export const transformSliceToRemoveOpenTable = (slice: Slice, schema: Schema): Slice => {
80
+ // we're removing the table, tableRow and tableCell reducing the open depth by 3
81
+ const depthDecrement = 3;
82
+
83
+ // Case 1: A slice entirely within a single CELL
84
+ if (
85
+ // starts and ends inside of a cell
86
+ slice.openStart >= 4 &&
87
+ slice.openEnd >= 4 &&
88
+ // slice is a table node
89
+ slice.content.childCount === 1 &&
90
+ slice.content.firstChild!.type === schema.nodes.table
91
+ ) {
92
+ // prosemirror-view has a bug that it duplicates table entry when selecting multiple paragraphs in a table cell.
93
+ // https://github.com/ProseMirror/prosemirror/issues/1270
94
+ // The structure becomes
95
+ // table(genuine) > tableRow(genuine) > table(duplicated) > tableRow(duplicated) > tableCell/tableHeader(genuine) > contents(genuine)
96
+ // As we are removing wrapping table anyway, we keep duplicated table and tableRow for simplicity
97
+ let cleaned = slice;
98
+ if (
99
+ slice.content.firstChild?.content?.firstChild?.content?.firstChild?.type ===
100
+ schema.nodes.table
101
+ ) {
102
+ cleaned = new Slice(
103
+ slice.content.firstChild.content.firstChild.content,
104
+ slice.openStart - 2,
105
+ slice.openEnd - 2,
106
+ );
107
+ }
108
+
109
+ return new Slice(
110
+ flatmap(cleaned.content, unwrapContentFromTable),
111
+ cleaned.openStart - depthDecrement,
112
+ cleaned.openEnd - depthDecrement,
113
+ );
114
+ }
115
+
116
+ // Case 2: A slice starting within a CELL and ending outside the table
117
+ if (
118
+ // starts inside of a cell but ends outside of the starting table
119
+ slice.openStart >= 4 &&
120
+ // slice starts from a table node (and spans across more than one node)
121
+ slice.content.childCount > 1 &&
122
+ slice.content.firstChild?.type === schema.nodes.table
123
+ ) {
124
+ // repoint the slice's cutting depth so that cell content where the slice starts
125
+ // does not get lifted out of the cell on paste
126
+ return new Slice(slice.content, 1, slice.openEnd);
127
+ }
128
+
129
+ return slice;
143
130
  };
144
131
 
145
- export const transformSliceToCorrectEmptyTableCells = (
146
- slice: Slice,
147
- schema: Schema,
148
- ): Slice => {
149
- const { tableCell, tableHeader } = schema.nodes;
150
- return mapSlice(slice, (node) => {
151
- if (
152
- node &&
153
- (node.type === tableCell || node.type === tableHeader) &&
154
- !node.content.childCount
155
- ) {
156
- return node.type.createAndFill(node.attrs) || node;
157
- }
158
-
159
- return node;
160
- });
132
+ export const transformSliceToCorrectEmptyTableCells = (slice: Slice, schema: Schema): Slice => {
133
+ const { tableCell, tableHeader } = schema.nodes;
134
+ return mapSlice(slice, (node) => {
135
+ if (
136
+ node &&
137
+ (node.type === tableCell || node.type === tableHeader) &&
138
+ !node.content.childCount
139
+ ) {
140
+ return node.type.createAndFill(node.attrs) || node;
141
+ }
142
+
143
+ return node;
144
+ });
161
145
  };
162
146
 
163
147
  export function isHeaderRowRequired(state: EditorState) {
164
- const tableState = getPluginState(state);
165
- return tableState && tableState.pluginConfig.isHeaderRowRequired;
148
+ const tableState = getPluginState(state);
149
+ return tableState && tableState.pluginConfig.isHeaderRowRequired;
166
150
  }