@atlaskit/editor-plugin-table 7.16.11 → 7.16.13

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 (254) hide show
  1. package/.eslintrc.js +3 -3
  2. package/CHANGELOG.md +16 -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 +83 -27
  6. package/dist/cjs/nodeviews/TableResizer.js +40 -19
  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/guidelines.js +7 -4
  16. package/dist/cjs/utils/merged-cells.js +3 -3
  17. package/dist/cjs/utils/snapping.js +7 -8
  18. package/dist/es2019/commands/misc.js +3 -3
  19. package/dist/es2019/nodeviews/TableContainer.js +70 -9
  20. package/dist/es2019/nodeviews/TableResizer.js +42 -21
  21. package/dist/es2019/nodeviews/TableRow.js +21 -21
  22. package/dist/es2019/pm-plugins/table-resizing/plugin.js +3 -3
  23. package/dist/es2019/pm-plugins/table-resizing/utils/resize-state.js +4 -4
  24. package/dist/es2019/pm-plugins/table-resizing/utils/scale-table.js +3 -3
  25. package/dist/es2019/ui/FloatingContextualMenu/styles.js +47 -47
  26. package/dist/es2019/ui/FloatingDragMenu/styles.js +30 -30
  27. package/dist/es2019/ui/common-styles.js +802 -816
  28. package/dist/es2019/ui/ui-styles.js +665 -678
  29. package/dist/es2019/utils/guidelines.js +5 -2
  30. package/dist/es2019/utils/merged-cells.js +3 -3
  31. package/dist/es2019/utils/snapping.js +5 -6
  32. package/dist/esm/commands/misc.js +3 -3
  33. package/dist/esm/nodeviews/TableCell.js +10 -10
  34. package/dist/esm/nodeviews/TableContainer.js +85 -29
  35. package/dist/esm/nodeviews/TableResizer.js +42 -21
  36. package/dist/esm/nodeviews/TableRow.js +23 -23
  37. package/dist/esm/pm-plugins/table-resizing/plugin.js +3 -3
  38. package/dist/esm/pm-plugins/table-resizing/utils/resize-state.js +4 -4
  39. package/dist/esm/pm-plugins/table-resizing/utils/scale-table.js +3 -3
  40. package/dist/esm/ui/FloatingContextualMenu/styles.js +1 -1
  41. package/dist/esm/ui/FloatingDragMenu/styles.js +1 -1
  42. package/dist/esm/ui/common-styles.js +13 -13
  43. package/dist/esm/ui/ui-styles.js +25 -25
  44. package/dist/esm/utils/guidelines.js +6 -3
  45. package/dist/esm/utils/merged-cells.js +3 -3
  46. package/dist/esm/utils/snapping.js +6 -7
  47. package/dist/types/nodeviews/TableResizer.d.ts +2 -1
  48. package/dist/types/pm-plugins/decorations/utils/index.d.ts +1 -1
  49. package/dist/types/pm-plugins/drag-and-drop/utils/autoscrollers.d.ts +1 -1
  50. package/dist/types/pm-plugins/drag-and-drop/utils/getDragBehaviour.d.ts +1 -1
  51. package/dist/types/pm-plugins/table-resizing/utils/index.d.ts +1 -1
  52. package/dist/types/ui/ColumnResizeWidget/index.d.ts +1 -1
  53. package/dist/types/ui/FloatingAlignmentButtons/FloatingAlignmentButtons.d.ts +1 -1
  54. package/dist/types/ui/FloatingToolbarLabel/FloatingToolbarLabel.d.ts +1 -1
  55. package/dist/types/ui/TableFloatingColumnControls/ColumnDropTargets/ColumnDropTarget.d.ts +1 -1
  56. package/dist/types/ui/TableFloatingControls/CornerControls/index.d.ts +1 -1
  57. package/dist/types/ui/icons/DragHandleDisabledIcon.d.ts +1 -1
  58. package/dist/types/utils/guidelines.d.ts +2 -1
  59. package/dist/types/utils/snapping.d.ts +3 -2
  60. package/dist/types-ts4.5/nodeviews/TableResizer.d.ts +2 -1
  61. package/dist/types-ts4.5/pm-plugins/decorations/utils/index.d.ts +1 -1
  62. package/dist/types-ts4.5/pm-plugins/drag-and-drop/utils/autoscrollers.d.ts +1 -1
  63. package/dist/types-ts4.5/pm-plugins/drag-and-drop/utils/getDragBehaviour.d.ts +1 -1
  64. package/dist/types-ts4.5/pm-plugins/table-resizing/utils/index.d.ts +1 -1
  65. package/dist/types-ts4.5/ui/ColumnResizeWidget/index.d.ts +1 -1
  66. package/dist/types-ts4.5/ui/FloatingAlignmentButtons/FloatingAlignmentButtons.d.ts +1 -1
  67. package/dist/types-ts4.5/ui/FloatingToolbarLabel/FloatingToolbarLabel.d.ts +1 -1
  68. package/dist/types-ts4.5/ui/TableFloatingColumnControls/ColumnDropTargets/ColumnDropTarget.d.ts +1 -1
  69. package/dist/types-ts4.5/ui/TableFloatingControls/CornerControls/index.d.ts +1 -1
  70. package/dist/types-ts4.5/ui/icons/DragHandleDisabledIcon.d.ts +1 -1
  71. package/dist/types-ts4.5/utils/guidelines.d.ts +2 -1
  72. package/dist/types-ts4.5/utils/snapping.d.ts +3 -2
  73. package/docs/0-intro.tsx +9 -7
  74. package/package.json +3 -3
  75. package/report.api.md +67 -66
  76. package/src/commands/clear.ts +36 -44
  77. package/src/commands/collapse.ts +8 -8
  78. package/src/commands/column-resize.ts +412 -452
  79. package/src/commands/delete.ts +14 -14
  80. package/src/commands/display-mode.ts +10 -11
  81. package/src/commands/go-to-next-cell.ts +48 -54
  82. package/src/commands/hover.ts +210 -227
  83. package/src/commands/index.ts +35 -35
  84. package/src/commands/insert.ts +208 -235
  85. package/src/commands/misc.ts +655 -748
  86. package/src/commands/referentiality.ts +9 -9
  87. package/src/commands/selection.ts +433 -563
  88. package/src/commands/sort.ts +68 -86
  89. package/src/commands/split-cell.ts +14 -14
  90. package/src/commands/toggle.ts +69 -67
  91. package/src/commands-with-analytics.ts +570 -639
  92. package/src/create-plugin-config.ts +13 -13
  93. package/src/event-handlers.ts +513 -612
  94. package/src/handlers.ts +120 -133
  95. package/src/nodeviews/ExternalDropTargets.tsx +68 -73
  96. package/src/nodeviews/OverflowShadowsObserver.ts +148 -157
  97. package/src/nodeviews/TableCell.ts +47 -54
  98. package/src/nodeviews/TableComponent.tsx +1018 -1112
  99. package/src/nodeviews/TableComponentWithSharedState.tsx +91 -94
  100. package/src/nodeviews/TableContainer.tsx +384 -340
  101. package/src/nodeviews/TableNodeViewBase.ts +19 -24
  102. package/src/nodeviews/TableResizer.tsx +642 -653
  103. package/src/nodeviews/TableRow.ts +580 -629
  104. package/src/nodeviews/TableStickyScrollbar.ts +173 -190
  105. package/src/nodeviews/__mocks__/OverflowShadowsObserver.ts +8 -8
  106. package/src/nodeviews/__mocks__/OverridableMock.ts +14 -15
  107. package/src/nodeviews/table.tsx +345 -375
  108. package/src/nodeviews/types.ts +21 -24
  109. package/src/nodeviews/update-overflow-shadows.ts +8 -14
  110. package/src/plugin.tsx +578 -603
  111. package/src/pm-plugins/analytics/actions.ts +10 -12
  112. package/src/pm-plugins/analytics/commands.ts +31 -37
  113. package/src/pm-plugins/analytics/plugin-factory.ts +4 -2
  114. package/src/pm-plugins/analytics/plugin-key.ts +1 -3
  115. package/src/pm-plugins/analytics/plugin.ts +60 -70
  116. package/src/pm-plugins/analytics/reducer.ts +19 -19
  117. package/src/pm-plugins/analytics/types.ts +10 -10
  118. package/src/pm-plugins/analytics/utils/moved-event.ts +38 -38
  119. package/src/pm-plugins/decorations/plugin.ts +58 -77
  120. package/src/pm-plugins/decorations/utils/column-controls.ts +59 -71
  121. package/src/pm-plugins/decorations/utils/column-resizing.ts +50 -57
  122. package/src/pm-plugins/decorations/utils/compose-decorations.ts +6 -6
  123. package/src/pm-plugins/decorations/utils/index.ts +3 -6
  124. package/src/pm-plugins/decorations/utils/types.ts +7 -12
  125. package/src/pm-plugins/default-table-selection.ts +3 -3
  126. package/src/pm-plugins/drag-and-drop/actions.ts +25 -25
  127. package/src/pm-plugins/drag-and-drop/commands-with-analytics.ts +158 -190
  128. package/src/pm-plugins/drag-and-drop/commands.ts +154 -170
  129. package/src/pm-plugins/drag-and-drop/consts.ts +4 -5
  130. package/src/pm-plugins/drag-and-drop/plugin-factory.ts +23 -20
  131. package/src/pm-plugins/drag-and-drop/plugin-key.ts +1 -3
  132. package/src/pm-plugins/drag-and-drop/plugin.ts +329 -383
  133. package/src/pm-plugins/drag-and-drop/reducer.ts +30 -30
  134. package/src/pm-plugins/drag-and-drop/types.ts +8 -8
  135. package/src/pm-plugins/drag-and-drop/utils/autoscrollers.ts +38 -41
  136. package/src/pm-plugins/drag-and-drop/utils/getDragBehaviour.ts +3 -6
  137. package/src/pm-plugins/drag-and-drop/utils/monitor.ts +57 -70
  138. package/src/pm-plugins/keymap.ts +208 -220
  139. package/src/pm-plugins/main.ts +348 -400
  140. package/src/pm-plugins/plugin-factory.ts +32 -34
  141. package/src/pm-plugins/safari-delete-composition-text-issue-workaround.ts +83 -97
  142. package/src/pm-plugins/sticky-headers/commands.ts +2 -6
  143. package/src/pm-plugins/sticky-headers/plugin-key.ts +1 -3
  144. package/src/pm-plugins/sticky-headers/plugin-state.ts +41 -44
  145. package/src/pm-plugins/sticky-headers/plugin.ts +4 -4
  146. package/src/pm-plugins/sticky-headers/types.ts +8 -8
  147. package/src/pm-plugins/sticky-headers/util.ts +10 -10
  148. package/src/pm-plugins/table-analytics.ts +70 -72
  149. package/src/pm-plugins/table-local-id.ts +180 -184
  150. package/src/pm-plugins/table-resizing/commands.ts +72 -85
  151. package/src/pm-plugins/table-resizing/event-handlers.ts +298 -317
  152. package/src/pm-plugins/table-resizing/plugin-factory.ts +10 -10
  153. package/src/pm-plugins/table-resizing/plugin-key.ts +1 -3
  154. package/src/pm-plugins/table-resizing/plugin.ts +61 -68
  155. package/src/pm-plugins/table-resizing/reducer.ts +30 -33
  156. package/src/pm-plugins/table-resizing/utils/colgroup.ts +84 -84
  157. package/src/pm-plugins/table-resizing/utils/column-state.ts +78 -81
  158. package/src/pm-plugins/table-resizing/utils/content-width.ts +94 -114
  159. package/src/pm-plugins/table-resizing/utils/dom.ts +93 -110
  160. package/src/pm-plugins/table-resizing/utils/index.ts +29 -34
  161. package/src/pm-plugins/table-resizing/utils/misc.ts +94 -119
  162. package/src/pm-plugins/table-resizing/utils/resize-column.ts +93 -106
  163. package/src/pm-plugins/table-resizing/utils/resize-logic.ts +240 -257
  164. package/src/pm-plugins/table-resizing/utils/resize-state.ts +343 -372
  165. package/src/pm-plugins/table-resizing/utils/scale-table.ts +202 -207
  166. package/src/pm-plugins/table-resizing/utils/types.ts +17 -17
  167. package/src/pm-plugins/table-resizing/utils/unit-to-number.ts +1 -2
  168. package/src/pm-plugins/table-selection-keymap.ts +25 -51
  169. package/src/pm-plugins/table-width.ts +191 -204
  170. package/src/pm-plugins/view-mode-sort/index.ts +223 -227
  171. package/src/pm-plugins/view-mode-sort/plugin-key.ts +3 -2
  172. package/src/pm-plugins/view-mode-sort/types.ts +12 -12
  173. package/src/pm-plugins/view-mode-sort/utils.ts +108 -117
  174. package/src/reducer.ts +139 -155
  175. package/src/toolbar.tsx +815 -905
  176. package/src/transforms/column-width.ts +186 -213
  177. package/src/transforms/delete-columns.ts +208 -222
  178. package/src/transforms/delete-rows.ts +117 -121
  179. package/src/transforms/fix-tables.ts +190 -215
  180. package/src/transforms/merge.ts +263 -269
  181. package/src/transforms/replace-table.ts +27 -43
  182. package/src/transforms/split.ts +65 -75
  183. package/src/types.ts +421 -427
  184. package/src/ui/ColumnResizeWidget/index.tsx +40 -47
  185. package/src/ui/DragHandle/HandleIconComponent.tsx +9 -13
  186. package/src/ui/DragHandle/index.tsx +221 -250
  187. package/src/ui/DragPreview/index.tsx +35 -35
  188. package/src/ui/FloatingAlignmentButtons/FloatingAlignmentButtons.tsx +33 -41
  189. package/src/ui/FloatingContextualButton/FixedButton.tsx +154 -157
  190. package/src/ui/FloatingContextualButton/index.tsx +109 -115
  191. package/src/ui/FloatingContextualButton/styles.ts +43 -46
  192. package/src/ui/FloatingContextualMenu/ContextualMenu.tsx +634 -694
  193. package/src/ui/FloatingContextualMenu/index.tsx +83 -101
  194. package/src/ui/FloatingContextualMenu/styles.ts +57 -65
  195. package/src/ui/FloatingDeleteButton/DeleteButton.tsx +37 -37
  196. package/src/ui/FloatingDeleteButton/getPopUpOptions.ts +47 -57
  197. package/src/ui/FloatingDeleteButton/index.tsx +319 -350
  198. package/src/ui/FloatingDragMenu/DragMenu.tsx +555 -596
  199. package/src/ui/FloatingDragMenu/DropdownMenu.tsx +152 -162
  200. package/src/ui/FloatingDragMenu/index.tsx +88 -102
  201. package/src/ui/FloatingDragMenu/styles.ts +51 -54
  202. package/src/ui/FloatingInsertButton/InsertButton.tsx +204 -217
  203. package/src/ui/FloatingInsertButton/getPopupOptions.ts +100 -115
  204. package/src/ui/FloatingInsertButton/index.tsx +248 -292
  205. package/src/ui/FloatingToolbarLabel/FloatingToolbarLabel.tsx +24 -29
  206. package/src/ui/TableFloatingColumnControls/ColumnControls/index.tsx +308 -329
  207. package/src/ui/TableFloatingColumnControls/ColumnDropTargets/ColumnDropTarget.tsx +85 -94
  208. package/src/ui/TableFloatingColumnControls/ColumnDropTargets/index.tsx +46 -46
  209. package/src/ui/TableFloatingColumnControls/index.tsx +116 -136
  210. package/src/ui/TableFloatingControls/CornerControls/ClassicCornerControls.tsx +79 -91
  211. package/src/ui/TableFloatingControls/CornerControls/DragCornerControls.tsx +95 -102
  212. package/src/ui/TableFloatingControls/CornerControls/index.tsx +1 -4
  213. package/src/ui/TableFloatingControls/CornerControls/types.ts +8 -8
  214. package/src/ui/TableFloatingControls/FloatingControlsWithSelection.tsx +50 -50
  215. package/src/ui/TableFloatingControls/NumberColumn/index.tsx +111 -124
  216. package/src/ui/TableFloatingControls/RowControls/ClassicControls.tsx +86 -105
  217. package/src/ui/TableFloatingControls/RowControls/DragControls.tsx +305 -341
  218. package/src/ui/TableFloatingControls/RowDropTarget/index.tsx +72 -75
  219. package/src/ui/TableFloatingControls/index.tsx +191 -193
  220. package/src/ui/TableFullWidthLabel/index.tsx +20 -20
  221. package/src/ui/common-styles.ts +880 -912
  222. package/src/ui/consts.ts +29 -74
  223. package/src/ui/icons/AddColLeftIcon.tsx +33 -39
  224. package/src/ui/icons/AddColRightIcon.tsx +33 -39
  225. package/src/ui/icons/AddRowAboveIcon.tsx +16 -22
  226. package/src/ui/icons/AddRowBelowIcon.tsx +33 -39
  227. package/src/ui/icons/DisplayModeIcon.tsx +31 -31
  228. package/src/ui/icons/DragHandleDisabledIcon.tsx +19 -21
  229. package/src/ui/icons/DragHandleIcon.tsx +12 -12
  230. package/src/ui/icons/DragInMotionIcon.tsx +45 -52
  231. package/src/ui/icons/MergeCellsIcon.tsx +22 -28
  232. package/src/ui/icons/MinimisedHandle.tsx +9 -9
  233. package/src/ui/icons/SplitCellIcon.tsx +30 -36
  234. package/src/ui/ui-styles.ts +769 -798
  235. package/src/utils/alignment.ts +1 -1
  236. package/src/utils/analytics.ts +192 -208
  237. package/src/utils/collapse.ts +55 -64
  238. package/src/utils/column-controls.ts +237 -254
  239. package/src/utils/create.ts +30 -30
  240. package/src/utils/decoration.ts +482 -502
  241. package/src/utils/dom.ts +127 -134
  242. package/src/utils/drag-menu.ts +322 -373
  243. package/src/utils/get-allow-add-column-custom-step.ts +4 -5
  244. package/src/utils/guidelines.ts +16 -21
  245. package/src/utils/index.ts +68 -68
  246. package/src/utils/merged-cells.ts +245 -254
  247. package/src/utils/nodes.ts +91 -106
  248. package/src/utils/paste.ts +119 -135
  249. package/src/utils/row-controls.ts +199 -213
  250. package/src/utils/selection.ts +77 -87
  251. package/src/utils/snapping.ts +87 -100
  252. package/src/utils/table.ts +44 -44
  253. package/src/utils/transforms.ts +5 -5
  254. package/src/utils/update-plugin-state-decorations.ts +5 -9
@@ -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
  }