@atlaskit/editor-plugin-table 1.1.0 → 1.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (284) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/dist/cjs/index.js +0 -2
  3. package/dist/cjs/plugins/table/commands/clear.js +4 -16
  4. package/dist/cjs/plugins/table/commands/collapse.js +0 -6
  5. package/dist/cjs/plugins/table/commands/go-to-next-cell.js +7 -18
  6. package/dist/cjs/plugins/table/commands/hover.js +7 -37
  7. package/dist/cjs/plugins/table/commands/index.js +0 -8
  8. package/dist/cjs/plugins/table/commands/insert.js +17 -56
  9. package/dist/cjs/plugins/table/commands/misc.js +36 -132
  10. package/dist/cjs/plugins/table/commands/referentiality.js +0 -4
  11. package/dist/cjs/plugins/table/commands/selection.js +21 -87
  12. package/dist/cjs/plugins/table/commands/sort.js +2 -23
  13. package/dist/cjs/plugins/table/commands/split-cell.js +3 -11
  14. package/dist/cjs/plugins/table/commands/toggle.js +8 -34
  15. package/dist/cjs/plugins/table/commands-with-analytics.js +50 -139
  16. package/dist/cjs/plugins/table/create-plugin-config.js +0 -6
  17. package/dist/cjs/plugins/table/event-handlers.js +58 -160
  18. package/dist/cjs/plugins/table/handlers.js +10 -39
  19. package/dist/cjs/plugins/table/index.js +47 -91
  20. package/dist/cjs/plugins/table/nodeviews/OverflowShadowsObserver.js +8 -41
  21. package/dist/cjs/plugins/table/nodeviews/TableComponent.js +82 -188
  22. package/dist/cjs/plugins/table/nodeviews/table.js +12 -70
  23. package/dist/cjs/plugins/table/nodeviews/tableCell.js +15 -39
  24. package/dist/cjs/plugins/table/nodeviews/update-overflow-shadows.js +3 -15
  25. package/dist/cjs/plugins/table/pm-plugins/decorations/plugin.js +0 -18
  26. package/dist/cjs/plugins/table/pm-plugins/decorations/utils/column-controls.js +8 -27
  27. package/dist/cjs/plugins/table/pm-plugins/decorations/utils/column-resizing.js +8 -20
  28. package/dist/cjs/plugins/table/pm-plugins/decorations/utils/compose-decorations.js +1 -3
  29. package/dist/cjs/plugins/table/pm-plugins/decorations/utils/index.js +0 -3
  30. package/dist/cjs/plugins/table/pm-plugins/keymap.js +2 -15
  31. package/dist/cjs/plugins/table/pm-plugins/main.js +20 -72
  32. package/dist/cjs/plugins/table/pm-plugins/plugin-factory.js +25 -42
  33. package/dist/cjs/plugins/table/pm-plugins/plugin-key.js +0 -2
  34. package/dist/cjs/plugins/table/pm-plugins/safari-delayed-dom-selection-syncing-workaround.js +8 -8
  35. package/dist/cjs/plugins/table/pm-plugins/safari-delete-composition-text-issue-workaround.js +4 -23
  36. package/dist/cjs/plugins/table/pm-plugins/sticky-headers/commands.js +0 -5
  37. package/dist/cjs/plugins/table/pm-plugins/sticky-headers/index.js +0 -5
  38. package/dist/cjs/plugins/table/pm-plugins/sticky-headers/nodeviews/dom.js +4 -13
  39. package/dist/cjs/plugins/table/pm-plugins/sticky-headers/nodeviews/tableRow.js +56 -138
  40. package/dist/cjs/plugins/table/pm-plugins/sticky-headers/plugin-key.js +0 -2
  41. package/dist/cjs/plugins/table/pm-plugins/sticky-headers/plugin-state.js +15 -30
  42. package/dist/cjs/plugins/table/pm-plugins/sticky-headers/plugin.js +0 -6
  43. package/dist/cjs/plugins/table/pm-plugins/sticky-headers/util.js +0 -5
  44. package/dist/cjs/plugins/table/pm-plugins/table-local-id.js +13 -44
  45. package/dist/cjs/plugins/table/pm-plugins/table-resizing/commands.js +12 -42
  46. package/dist/cjs/plugins/table/pm-plugins/table-resizing/event-handlers.js +16 -52
  47. package/dist/cjs/plugins/table/pm-plugins/table-resizing/index.js +0 -4
  48. package/dist/cjs/plugins/table/pm-plugins/table-resizing/plugin-factory.js +0 -10
  49. package/dist/cjs/plugins/table/pm-plugins/table-resizing/plugin-key.js +0 -2
  50. package/dist/cjs/plugins/table/pm-plugins/table-resizing/plugin.js +5 -19
  51. package/dist/cjs/plugins/table/pm-plugins/table-resizing/reducer.js +0 -10
  52. package/dist/cjs/plugins/table/pm-plugins/table-resizing/utils/colgroup.js +0 -15
  53. package/dist/cjs/plugins/table/pm-plugins/table-resizing/utils/column-state.js +8 -28
  54. package/dist/cjs/plugins/table/pm-plugins/table-resizing/utils/content-width.js +3 -23
  55. package/dist/cjs/plugins/table/pm-plugins/table-resizing/utils/dom.js +4 -46
  56. package/dist/cjs/plugins/table/pm-plugins/table-resizing/utils/index.js +0 -9
  57. package/dist/cjs/plugins/table/pm-plugins/table-resizing/utils/misc.js +15 -36
  58. package/dist/cjs/plugins/table/pm-plugins/table-resizing/utils/resize-column.js +1 -4
  59. package/dist/cjs/plugins/table/pm-plugins/table-resizing/utils/resize-logic.js +15 -71
  60. package/dist/cjs/plugins/table/pm-plugins/table-resizing/utils/resize-state.js +34 -82
  61. package/dist/cjs/plugins/table/pm-plugins/table-resizing/utils/scale-table.js +12 -36
  62. package/dist/cjs/plugins/table/pm-plugins/table-resizing/utils/unit-to-number.js +0 -2
  63. package/dist/cjs/plugins/table/pm-plugins/table-selection-keymap.js +0 -5
  64. package/dist/cjs/plugins/table/reducer.js +0 -24
  65. package/dist/cjs/plugins/table/toolbar.js +14 -94
  66. package/dist/cjs/plugins/table/transforms/column-width.js +12 -45
  67. package/dist/cjs/plugins/table/transforms/delete-columns.js +11 -76
  68. package/dist/cjs/plugins/table/transforms/delete-rows.js +4 -42
  69. package/dist/cjs/plugins/table/transforms/fix-tables.js +24 -61
  70. package/dist/cjs/plugins/table/transforms/index.js +0 -7
  71. package/dist/cjs/plugins/table/transforms/merge.js +14 -90
  72. package/dist/cjs/plugins/table/transforms/metadata.js +0 -5
  73. package/dist/cjs/plugins/table/transforms/replace-table.js +2 -13
  74. package/dist/cjs/plugins/table/transforms/split.js +18 -32
  75. package/dist/cjs/plugins/table/types.js +0 -11
  76. package/dist/cjs/plugins/table/ui/FloatingContextualButton/index.js +10 -51
  77. package/dist/cjs/plugins/table/ui/FloatingContextualButton/styles.js +0 -12
  78. package/dist/cjs/plugins/table/ui/FloatingContextualMenu/ContextualMenu.js +46 -145
  79. package/dist/cjs/plugins/table/ui/FloatingContextualMenu/index.js +12 -35
  80. package/dist/cjs/plugins/table/ui/FloatingContextualMenu/styles.js +0 -11
  81. package/dist/cjs/plugins/table/ui/FloatingDeleteButton/DeleteButton.js +5 -12
  82. package/dist/cjs/plugins/table/ui/FloatingDeleteButton/getPopUpOptions.js +3 -16
  83. package/dist/cjs/plugins/table/ui/FloatingDeleteButton/index.js +19 -89
  84. package/dist/cjs/plugins/table/ui/FloatingInsertButton/InsertButton.js +6 -31
  85. package/dist/cjs/plugins/table/ui/FloatingInsertButton/getPopupOptions.js +5 -22
  86. package/dist/cjs/plugins/table/ui/FloatingInsertButton/index.js +25 -80
  87. package/dist/cjs/plugins/table/ui/LayoutButton/index.js +16 -64
  88. package/dist/cjs/plugins/table/ui/TableFloatingControls/CornerControls/index.js +14 -47
  89. package/dist/cjs/plugins/table/ui/TableFloatingControls/NumberColumn/index.js +20 -48
  90. package/dist/cjs/plugins/table/ui/TableFloatingControls/RowControls/index.js +10 -43
  91. package/dist/cjs/plugins/table/ui/TableFloatingControls/index.js +33 -74
  92. package/dist/cjs/plugins/table/ui/common-styles.js +6 -19
  93. package/dist/cjs/plugins/table/ui/consts.js +3 -8
  94. package/dist/cjs/plugins/table/ui/messages.js +0 -3
  95. package/dist/cjs/plugins/table/ui/ui-styles.js +0 -32
  96. package/dist/cjs/plugins/table/utils/analytics.js +4 -19
  97. package/dist/cjs/plugins/table/utils/collapse.js +4 -21
  98. package/dist/cjs/plugins/table/utils/column-controls.js +25 -61
  99. package/dist/cjs/plugins/table/utils/decoration.js +46 -114
  100. package/dist/cjs/plugins/table/utils/dom.js +4 -51
  101. package/dist/cjs/plugins/table/utils/get-allow-add-column-custom-step.js +0 -2
  102. package/dist/cjs/plugins/table/utils/index.js +0 -10
  103. package/dist/cjs/plugins/table/utils/nodes.js +5 -48
  104. package/dist/cjs/plugins/table/utils/paste.js +22 -47
  105. package/dist/cjs/plugins/table/utils/row-controls.js +6 -67
  106. package/dist/cjs/plugins/table/utils/selection.js +3 -36
  107. package/dist/cjs/plugins/table/utils/table.js +0 -11
  108. package/dist/cjs/plugins/table/utils/update-plugin-state-decorations.js +0 -4
  109. package/dist/cjs/plugins/table-plugin.js +0 -3
  110. package/dist/cjs/version.json +1 -1
  111. package/dist/es2019/plugins/table/commands/clear.js +3 -8
  112. package/dist/es2019/plugins/table/commands/collapse.js +0 -3
  113. package/dist/es2019/plugins/table/commands/go-to-next-cell.js +4 -7
  114. package/dist/es2019/plugins/table/commands/hover.js +7 -17
  115. package/dist/es2019/plugins/table/commands/insert.js +16 -36
  116. package/dist/es2019/plugins/table/commands/misc.js +37 -67
  117. package/dist/es2019/plugins/table/commands/selection.js +7 -62
  118. package/dist/es2019/plugins/table/commands/sort.js +0 -12
  119. package/dist/es2019/plugins/table/commands/split-cell.js +0 -4
  120. package/dist/es2019/plugins/table/commands/toggle.js +13 -15
  121. package/dist/es2019/plugins/table/commands-with-analytics.js +4 -14
  122. package/dist/es2019/plugins/table/event-handlers.js +14 -62
  123. package/dist/es2019/plugins/table/handlers.js +16 -26
  124. package/dist/es2019/plugins/table/index.js +12 -25
  125. package/dist/es2019/plugins/table/nodeviews/OverflowShadowsObserver.js +8 -40
  126. package/dist/es2019/plugins/table/nodeviews/TableComponent.js +27 -100
  127. package/dist/es2019/plugins/table/nodeviews/table.js +3 -33
  128. package/dist/es2019/plugins/table/nodeviews/tableCell.js +7 -16
  129. package/dist/es2019/plugins/table/nodeviews/update-overflow-shadows.js +3 -10
  130. package/dist/es2019/plugins/table/pm-plugins/decorations/plugin.js +0 -5
  131. package/dist/es2019/plugins/table/pm-plugins/decorations/utils/column-controls.js +4 -13
  132. package/dist/es2019/plugins/table/pm-plugins/decorations/utils/column-resizing.js +0 -3
  133. package/dist/es2019/plugins/table/pm-plugins/keymap.js +2 -3
  134. package/dist/es2019/plugins/table/pm-plugins/main.js +19 -43
  135. package/dist/es2019/plugins/table/pm-plugins/plugin-factory.js +2 -6
  136. package/dist/es2019/plugins/table/pm-plugins/safari-delayed-dom-selection-syncing-workaround.js +8 -3
  137. package/dist/es2019/plugins/table/pm-plugins/safari-delete-composition-text-issue-workaround.js +0 -12
  138. package/dist/es2019/plugins/table/pm-plugins/sticky-headers/nodeviews/dom.js +4 -9
  139. package/dist/es2019/plugins/table/pm-plugins/sticky-headers/nodeviews/tableRow.js +55 -130
  140. package/dist/es2019/plugins/table/pm-plugins/sticky-headers/plugin-state.js +2 -9
  141. package/dist/es2019/plugins/table/pm-plugins/sticky-headers/util.js +0 -3
  142. package/dist/es2019/plugins/table/pm-plugins/table-local-id.js +20 -39
  143. package/dist/es2019/plugins/table/pm-plugins/table-resizing/commands.js +7 -15
  144. package/dist/es2019/plugins/table/pm-plugins/table-resizing/event-handlers.js +9 -27
  145. package/dist/es2019/plugins/table/pm-plugins/table-resizing/plugin-factory.js +2 -4
  146. package/dist/es2019/plugins/table/pm-plugins/table-resizing/plugin.js +2 -5
  147. package/dist/es2019/plugins/table/pm-plugins/table-resizing/reducer.js +8 -8
  148. package/dist/es2019/plugins/table/pm-plugins/table-resizing/utils/colgroup.js +0 -4
  149. package/dist/es2019/plugins/table/pm-plugins/table-resizing/utils/column-state.js +8 -11
  150. package/dist/es2019/plugins/table/pm-plugins/table-resizing/utils/content-width.js +4 -21
  151. package/dist/es2019/plugins/table/pm-plugins/table-resizing/utils/dom.js +3 -22
  152. package/dist/es2019/plugins/table/pm-plugins/table-resizing/utils/misc.js +10 -18
  153. package/dist/es2019/plugins/table/pm-plugins/table-resizing/utils/resize-logic.js +29 -59
  154. package/dist/es2019/plugins/table/pm-plugins/table-resizing/utils/resize-state.js +54 -51
  155. package/dist/es2019/plugins/table/pm-plugins/table-resizing/utils/scale-table.js +9 -14
  156. package/dist/es2019/plugins/table/reducer.js +26 -30
  157. package/dist/es2019/plugins/table/toolbar.js +5 -48
  158. package/dist/es2019/plugins/table/transforms/column-width.js +16 -28
  159. package/dist/es2019/plugins/table/transforms/delete-columns.js +17 -58
  160. package/dist/es2019/plugins/table/transforms/delete-rows.js +8 -25
  161. package/dist/es2019/plugins/table/transforms/fix-tables.js +25 -42
  162. package/dist/es2019/plugins/table/transforms/merge.js +22 -70
  163. package/dist/es2019/plugins/table/transforms/metadata.js +3 -2
  164. package/dist/es2019/plugins/table/transforms/replace-table.js +0 -2
  165. package/dist/es2019/plugins/table/transforms/split.js +16 -19
  166. package/dist/es2019/plugins/table/types.js +2 -4
  167. package/dist/es2019/plugins/table/ui/FloatingContextualButton/index.js +2 -16
  168. package/dist/es2019/plugins/table/ui/FloatingContextualMenu/ContextualMenu.js +8 -54
  169. package/dist/es2019/plugins/table/ui/FloatingContextualMenu/index.js +4 -13
  170. package/dist/es2019/plugins/table/ui/FloatingDeleteButton/DeleteButton.js +0 -2
  171. package/dist/es2019/plugins/table/ui/FloatingDeleteButton/getPopUpOptions.js +2 -11
  172. package/dist/es2019/plugins/table/ui/FloatingDeleteButton/index.js +13 -49
  173. package/dist/es2019/plugins/table/ui/FloatingInsertButton/InsertButton.js +0 -8
  174. package/dist/es2019/plugins/table/ui/FloatingInsertButton/getPopupOptions.js +16 -24
  175. package/dist/es2019/plugins/table/ui/FloatingInsertButton/index.js +3 -31
  176. package/dist/es2019/plugins/table/ui/LayoutButton/index.js +2 -29
  177. package/dist/es2019/plugins/table/ui/TableFloatingControls/CornerControls/index.js +0 -12
  178. package/dist/es2019/plugins/table/ui/TableFloatingControls/NumberColumn/index.js +6 -12
  179. package/dist/es2019/plugins/table/ui/TableFloatingControls/RowControls/index.js +0 -9
  180. package/dist/es2019/plugins/table/ui/TableFloatingControls/index.js +4 -19
  181. package/dist/es2019/plugins/table/ui/common-styles.js +6 -5
  182. package/dist/es2019/plugins/table/ui/consts.js +4 -3
  183. package/dist/es2019/plugins/table/ui/ui-styles.js +0 -10
  184. package/dist/es2019/plugins/table/utils/analytics.js +0 -8
  185. package/dist/es2019/plugins/table/utils/collapse.js +3 -14
  186. package/dist/es2019/plugins/table/utils/column-controls.js +22 -37
  187. package/dist/es2019/plugins/table/utils/decoration.js +13 -51
  188. package/dist/es2019/plugins/table/utils/dom.js +3 -19
  189. package/dist/es2019/plugins/table/utils/nodes.js +2 -15
  190. package/dist/es2019/plugins/table/utils/paste.js +17 -22
  191. package/dist/es2019/plugins/table/utils/row-controls.js +12 -45
  192. package/dist/es2019/plugins/table/utils/selection.js +0 -21
  193. package/dist/es2019/plugins/table/utils/table.js +0 -2
  194. package/dist/es2019/version.json +1 -1
  195. package/dist/esm/plugins/table/commands/clear.js +3 -8
  196. package/dist/esm/plugins/table/commands/collapse.js +0 -3
  197. package/dist/esm/plugins/table/commands/go-to-next-cell.js +6 -9
  198. package/dist/esm/plugins/table/commands/hover.js +8 -18
  199. package/dist/esm/plugins/table/commands/insert.js +16 -36
  200. package/dist/esm/plugins/table/commands/misc.js +39 -78
  201. package/dist/esm/plugins/table/commands/selection.js +21 -78
  202. package/dist/esm/plugins/table/commands/sort.js +2 -14
  203. package/dist/esm/plugins/table/commands/split-cell.js +3 -8
  204. package/dist/esm/plugins/table/commands/toggle.js +11 -20
  205. package/dist/esm/plugins/table/commands-with-analytics.js +50 -85
  206. package/dist/esm/plugins/table/create-plugin-config.js +0 -3
  207. package/dist/esm/plugins/table/event-handlers.js +58 -123
  208. package/dist/esm/plugins/table/handlers.js +11 -29
  209. package/dist/esm/plugins/table/index.js +47 -60
  210. package/dist/esm/plugins/table/nodeviews/OverflowShadowsObserver.js +8 -44
  211. package/dist/esm/plugins/table/nodeviews/TableComponent.js +82 -181
  212. package/dist/esm/plugins/table/nodeviews/table.js +12 -52
  213. package/dist/esm/plugins/table/nodeviews/tableCell.js +15 -33
  214. package/dist/esm/plugins/table/nodeviews/update-overflow-shadows.js +3 -10
  215. package/dist/esm/plugins/table/pm-plugins/decorations/plugin.js +0 -5
  216. package/dist/esm/plugins/table/pm-plugins/decorations/utils/column-controls.js +8 -19
  217. package/dist/esm/plugins/table/pm-plugins/decorations/utils/column-resizing.js +8 -13
  218. package/dist/esm/plugins/table/pm-plugins/decorations/utils/compose-decorations.js +1 -1
  219. package/dist/esm/plugins/table/pm-plugins/keymap.js +2 -3
  220. package/dist/esm/plugins/table/pm-plugins/main.js +20 -47
  221. package/dist/esm/plugins/table/pm-plugins/plugin-factory.js +25 -37
  222. package/dist/esm/plugins/table/pm-plugins/safari-delayed-dom-selection-syncing-workaround.js +8 -3
  223. package/dist/esm/plugins/table/pm-plugins/safari-delete-composition-text-issue-workaround.js +3 -15
  224. package/dist/esm/plugins/table/pm-plugins/sticky-headers/nodeviews/dom.js +4 -9
  225. package/dist/esm/plugins/table/pm-plugins/sticky-headers/nodeviews/tableRow.js +58 -147
  226. package/dist/esm/plugins/table/pm-plugins/sticky-headers/plugin-state.js +15 -27
  227. package/dist/esm/plugins/table/pm-plugins/sticky-headers/util.js +0 -3
  228. package/dist/esm/plugins/table/pm-plugins/table-local-id.js +14 -37
  229. package/dist/esm/plugins/table/pm-plugins/table-resizing/commands.js +12 -24
  230. package/dist/esm/plugins/table/pm-plugins/table-resizing/event-handlers.js +16 -36
  231. package/dist/esm/plugins/table/pm-plugins/table-resizing/plugin-factory.js +0 -6
  232. package/dist/esm/plugins/table/pm-plugins/table-resizing/plugin.js +5 -8
  233. package/dist/esm/plugins/table/pm-plugins/table-resizing/reducer.js +0 -7
  234. package/dist/esm/plugins/table/pm-plugins/table-resizing/utils/colgroup.js +0 -4
  235. package/dist/esm/plugins/table/pm-plugins/table-resizing/utils/column-state.js +8 -12
  236. package/dist/esm/plugins/table/pm-plugins/table-resizing/utils/content-width.js +5 -22
  237. package/dist/esm/plugins/table/pm-plugins/table-resizing/utils/dom.js +4 -23
  238. package/dist/esm/plugins/table/pm-plugins/table-resizing/utils/misc.js +15 -23
  239. package/dist/esm/plugins/table/pm-plugins/table-resizing/utils/resize-logic.js +15 -60
  240. package/dist/esm/plugins/table/pm-plugins/table-resizing/utils/resize-state.js +34 -55
  241. package/dist/esm/plugins/table/pm-plugins/table-resizing/utils/scale-table.js +12 -24
  242. package/dist/esm/plugins/table/reducer.js +0 -20
  243. package/dist/esm/plugins/table/toolbar.js +13 -63
  244. package/dist/esm/plugins/table/transforms/column-width.js +12 -32
  245. package/dist/esm/plugins/table/transforms/delete-columns.js +11 -62
  246. package/dist/esm/plugins/table/transforms/delete-rows.js +4 -30
  247. package/dist/esm/plugins/table/transforms/fix-tables.js +24 -49
  248. package/dist/esm/plugins/table/transforms/merge.js +16 -75
  249. package/dist/esm/plugins/table/transforms/metadata.js +3 -2
  250. package/dist/esm/plugins/table/transforms/replace-table.js +2 -6
  251. package/dist/esm/plugins/table/transforms/split.js +18 -29
  252. package/dist/esm/plugins/table/types.js +0 -6
  253. package/dist/esm/plugins/table/ui/FloatingContextualButton/index.js +10 -31
  254. package/dist/esm/plugins/table/ui/FloatingContextualButton/styles.js +0 -2
  255. package/dist/esm/plugins/table/ui/FloatingContextualMenu/ContextualMenu.js +46 -126
  256. package/dist/esm/plugins/table/ui/FloatingContextualMenu/index.js +13 -24
  257. package/dist/esm/plugins/table/ui/FloatingContextualMenu/styles.js +0 -2
  258. package/dist/esm/plugins/table/ui/FloatingDeleteButton/DeleteButton.js +5 -7
  259. package/dist/esm/plugins/table/ui/FloatingDeleteButton/getPopUpOptions.js +3 -13
  260. package/dist/esm/plugins/table/ui/FloatingDeleteButton/index.js +19 -68
  261. package/dist/esm/plugins/table/ui/FloatingInsertButton/InsertButton.js +6 -14
  262. package/dist/esm/plugins/table/ui/FloatingInsertButton/getPopupOptions.js +5 -18
  263. package/dist/esm/plugins/table/ui/FloatingInsertButton/index.js +25 -57
  264. package/dist/esm/plugins/table/ui/LayoutButton/index.js +16 -47
  265. package/dist/esm/plugins/table/ui/TableFloatingControls/CornerControls/index.js +14 -35
  266. package/dist/esm/plugins/table/ui/TableFloatingControls/NumberColumn/index.js +20 -38
  267. package/dist/esm/plugins/table/ui/TableFloatingControls/RowControls/index.js +10 -29
  268. package/dist/esm/plugins/table/ui/TableFloatingControls/index.js +33 -62
  269. package/dist/esm/plugins/table/ui/common-styles.js +6 -7
  270. package/dist/esm/plugins/table/ui/consts.js +4 -3
  271. package/dist/esm/plugins/table/ui/ui-styles.js +0 -12
  272. package/dist/esm/plugins/table/utils/analytics.js +4 -13
  273. package/dist/esm/plugins/table/utils/collapse.js +4 -15
  274. package/dist/esm/plugins/table/utils/column-controls.js +25 -41
  275. package/dist/esm/plugins/table/utils/decoration.js +46 -88
  276. package/dist/esm/plugins/table/utils/dom.js +4 -20
  277. package/dist/esm/plugins/table/utils/nodes.js +5 -18
  278. package/dist/esm/plugins/table/utils/paste.js +24 -29
  279. package/dist/esm/plugins/table/utils/row-controls.js +6 -46
  280. package/dist/esm/plugins/table/utils/selection.js +3 -26
  281. package/dist/esm/plugins/table/utils/table.js +0 -2
  282. package/dist/esm/version.json +1 -1
  283. package/package.json +2 -2
  284. package/src/__tests__/visual-regression/cell-options-menu.ts +1 -12
@@ -5,19 +5,15 @@ import { removeEmptyColumns } from './merge';
5
5
  import { setMeta } from './metadata';
6
6
  export const deleteRows = (rect, isHeaderRowRequired = false) => tr => {
7
7
  const table = findTable(tr.selection);
8
-
9
8
  if (!table) {
10
9
  return tr;
11
10
  }
12
-
13
11
  const rowsToDelete = [];
14
12
  const map = TableMap.get(table.node);
15
-
16
13
  for (let i = rect.top; i < rect.bottom; i++) {
17
14
  // skip header row if its required
18
15
  if (isHeaderRowRequired) {
19
16
  const cell = table.node.nodeAt(map.map[i * map.width]);
20
-
21
17
  if (cell && cell.type !== cell.type.schema.nodes.tableHeader) {
22
18
  rowsToDelete.push(i);
23
19
  }
@@ -25,34 +21,27 @@ export const deleteRows = (rect, isHeaderRowRequired = false) => tr => {
25
21
  rowsToDelete.push(i);
26
22
  }
27
23
  }
28
-
29
24
  if (!rowsToDelete.length) {
30
25
  return tr;
31
26
  }
32
-
33
27
  const rows = [];
34
28
  const seen = {};
35
29
  const deletedCells = {};
36
-
37
30
  for (let rowIndex = 0; rowIndex < map.height; rowIndex++) {
38
31
  const rowCells = [];
39
32
  const row = table.node.child(rowIndex);
40
-
41
33
  for (let colIndex = 0; colIndex < map.width; colIndex++) {
42
34
  const cellPos = map.map[rowIndex * map.width + colIndex];
43
35
  const cell = table.node.nodeAt(cellPos);
44
-
45
36
  if (!cell) {
46
37
  continue;
47
38
  }
48
-
49
39
  const cellsInRow = map.cellsInRect({
50
40
  left: 0,
51
41
  top: rowIndex,
52
42
  right: map.width,
53
43
  bottom: rowIndex + 1
54
44
  });
55
-
56
45
  if (rowsToDelete.indexOf(rowIndex) === -1 && !seen[cellPos]) {
57
46
  // decrement rowspans for row-spanning cells that overlap deleted rows
58
47
  if (cellsInRow.indexOf(cellPos) > -1) {
@@ -62,9 +51,9 @@ export const deleteRows = (rect, isHeaderRowRequired = false) => tr => {
62
51
  overlappingRows += 1;
63
52
  }
64
53
  });
65
-
66
54
  if (overlappingRows > 0) {
67
- const newCell = cell.type.createChecked({ ...cell.attrs,
55
+ const newCell = cell.type.createChecked({
56
+ ...cell.attrs,
68
57
  rowspan: cell.attrs.rowspan - overlappingRows
69
58
  }, cell.content, cell.marks);
70
59
  rowCells.push(newCell);
@@ -73,22 +62,21 @@ export const deleteRows = (rect, isHeaderRowRequired = false) => tr => {
73
62
  }
74
63
  } else if (deletedCells[cellPos]) {
75
64
  // if we're removing a row-spanning cell, we need to add missing cells to rows below
76
- const attrs = { ...cell.attrs,
65
+ const attrs = {
66
+ ...cell.attrs,
77
67
  colspan: 1,
78
68
  rowspan: 1
79
69
  };
80
-
81
70
  if (cell.attrs.colwidth) {
82
71
  const pos = colIndex > 0 ? colIndex - map.colCount(cellPos) : 0;
83
72
  attrs.colwidth = cell.attrs.colwidth.slice().splice(pos, 1);
84
73
  }
85
-
86
74
  const newCell = cell.type.createChecked(attrs, cell.type.schema.nodes.paragraph.createChecked(), cell.marks);
87
75
  rowCells.push(newCell);
88
76
  continue;
89
- } // normal cells that we want to keep
90
-
77
+ }
91
78
 
79
+ // normal cells that we want to keep
92
80
  if (!seen[cellPos]) {
93
81
  seen[cellPos] = true;
94
82
  rowCells.push(cell);
@@ -97,36 +85,31 @@ export const deleteRows = (rect, isHeaderRowRequired = false) => tr => {
97
85
  deletedCells[cellPos] = true;
98
86
  }
99
87
  }
100
-
101
88
  if (rowCells.length) {
102
89
  rows.push(row.type.createChecked(row.attrs, rowCells, row.marks));
103
90
  }
104
91
  }
105
-
106
92
  if (!rows.length) {
107
93
  return setMeta({
108
94
  type: 'DELETE_ROWS',
109
95
  problem: 'EMPTY_TABLE'
110
96
  })(tr);
111
97
  }
112
-
113
98
  const newTable = table.node.type.createChecked(table.node.attrs, rows, table.node.marks);
114
99
  const fixedTable = removeEmptyColumns(newTable);
115
-
116
100
  if (fixedTable === null) {
117
101
  return setMeta({
118
102
  type: 'DELETE_ROWS',
119
103
  problem: 'REMOVE_EMPTY_COLUMNS'
120
104
  })(tr);
121
105
  }
122
-
123
106
  const cursorPos = getNextCursorPos(newTable, rowsToDelete);
124
107
  return setMeta({
125
108
  type: 'DELETE_ROWS'
126
- })(tr.replaceWith(table.pos, table.pos + table.node.nodeSize, fixedTable) // move cursor before the deleted rows if possible, otherwise - to the first row
109
+ })(tr.replaceWith(table.pos, table.pos + table.node.nodeSize, fixedTable)
110
+ // move cursor before the deleted rows if possible, otherwise - to the first row
127
111
  .setSelection(Selection.near(tr.doc.resolve(table.pos + cursorPos))));
128
112
  };
129
-
130
113
  function getNextCursorPos(table, deletedRows) {
131
114
  const minRow = Math.min(...deletedRows);
132
115
  const nextRowWithCursor = minRow > 0 ? minRow - 1 : 0;
@@ -12,7 +12,6 @@ export const fireAnalytics = (properties = {}) => sendLogs({
12
12
  user: '-'
13
13
  }]
14
14
  });
15
-
16
15
  const validateTableCellNodeAttrs = ({
17
16
  colspan,
18
17
  rowspan,
@@ -27,7 +26,6 @@ const validateTableCellNodeAttrs = ({
27
26
  spanValue: colspan
28
27
  });
29
28
  }
30
-
31
29
  if (rowspan && rowspan < 0) {
32
30
  reportInvalidTableCellSpanAttrs({
33
31
  nodeType: 'tableCell',
@@ -37,17 +35,16 @@ const validateTableCellNodeAttrs = ({
37
35
  spanValue: rowspan
38
36
  });
39
37
  }
40
-
41
38
  return;
42
- }; // We attempt to patch the document when we have extra, unneeded, column widths
39
+ };
40
+
41
+ // We attempt to patch the document when we have extra, unneeded, column widths
43
42
  // Take this node for example:
44
43
  //
45
44
  // ['td', { colwidth: [100, 100, 100], colspan: 2 }]
46
45
  //
47
46
  // This row only spans two columns, yet it contains widths for 3.
48
47
  // We remove the third width here, assumed duplicate content.
49
-
50
-
51
48
  export const removeExtraneousColumnWidths = (node, basePos, tr, reportInvalidTableCellSpanAttrs) => {
52
49
  let hasProblems = false;
53
50
  tr = replaceCells(tr, node, basePos, cell => {
@@ -56,7 +53,6 @@ export const removeExtraneousColumnWidths = (node, basePos, tr, reportInvalidTab
56
53
  colspan,
57
54
  rowspan
58
55
  } = cell.attrs;
59
-
60
56
  if (reportInvalidTableCellSpanAttrs) {
61
57
  validateTableCellNodeAttrs({
62
58
  colspan,
@@ -64,24 +60,21 @@ export const removeExtraneousColumnWidths = (node, basePos, tr, reportInvalidTab
64
60
  tableLocalId: node.attrs.localId
65
61
  }, reportInvalidTableCellSpanAttrs);
66
62
  }
67
-
68
63
  if (colwidth && colwidth.length > colspan) {
69
64
  hasProblems = true;
70
- return cell.type.createChecked({ ...cell.attrs,
65
+ return cell.type.createChecked({
66
+ ...cell.attrs,
71
67
  colwidth: colwidth.slice(0, colspan)
72
68
  }, cell.content, cell.marks);
73
69
  }
74
-
75
70
  return cell;
76
71
  });
77
-
78
72
  if (hasProblems) {
79
73
  fireAnalytics({
80
74
  message: 'removeExtraneousColumnWidths'
81
75
  });
82
76
  return true;
83
77
  }
84
-
85
78
  return false;
86
79
  };
87
80
  export const fixTables = (tr, reportInvalidTableCellSpanAttrs) => {
@@ -92,11 +85,12 @@ export const fixTables = (tr, reportInvalidTableCellSpanAttrs) => {
92
85
  hasProblems = removeExtraneousColumnWidths(node, tr.mapping.map(pos), tr, reportInvalidTableCellSpanAttrs);
93
86
  }
94
87
  });
95
-
96
88
  if (hasProblems) {
97
89
  return tr;
98
90
  }
99
- }; // When we get a table with an 'auto' attribute, we want to:
91
+ };
92
+
93
+ // When we get a table with an 'auto' attribute, we want to:
100
94
  // 1. render with table-layout: auto
101
95
  // 2. capture the column widths
102
96
  // 3. set the column widths as attributes, and remove the 'auto' attribute,
@@ -107,7 +101,6 @@ export const fixTables = (tr, reportInvalidTableCellSpanAttrs) => {
107
101
  //
108
102
  // We use this when migrating TinyMCE tables for Confluence, for example:
109
103
  // https://pug.jira-dev.com/wiki/spaces/AEC/pages/3362882215/How+do+we+map+TinyMCE+tables+to+Fabric+tables
110
-
111
104
  export const fixAutoSizedTable = (view, tableNode, tableRef, tablePos, opts) => {
112
105
  let {
113
106
  tr
@@ -117,30 +110,31 @@ export const fixAutoSizedTable = (view, tableNode, tableRef, tablePos, opts) =>
117
110
  const colWidths = parseDOMColumnWidths(domAtPos, tableNode, tableStart, tableRef);
118
111
  const totalContentWidth = colWidths.reduce((acc, current) => acc + current, 0);
119
112
  const tableLayout = getLayoutBasedOnWidth(totalContentWidth);
120
- const maxLayoutSize = getLayoutSize(tableLayout, opts.containerWidth, {}); // Content width will generally not meet the constraints of the layout
113
+ const maxLayoutSize = getLayoutSize(tableLayout, opts.containerWidth, {});
114
+
115
+ // Content width will generally not meet the constraints of the layout
121
116
  // whether it be below or above, so we scale our columns widths
122
117
  // to meet these requirements
123
-
124
118
  let scale = 1;
125
-
126
119
  if (totalContentWidth !== maxLayoutSize) {
127
120
  scale = maxLayoutSize / totalContentWidth;
128
121
  }
129
-
130
122
  const scaledColumnWidths = colWidths.map(width => Math.floor(width * scale));
131
123
  tr = replaceCells(tr, tableNode, tablePos, (cell, _rowIndex, colIndex) => {
132
124
  const newColWidths = scaledColumnWidths.slice(colIndex, colIndex + cell.attrs.colspan);
133
- return cell.type.createChecked({ ...cell.attrs,
125
+ return cell.type.createChecked({
126
+ ...cell.attrs,
134
127
  colwidth: newColWidths.length ? newColWidths : null
135
128
  }, cell.content, cell.marks);
136
- }); // clear autosizing on the table node
129
+ });
137
130
 
138
- return tr.setNodeMarkup(tablePos, undefined, { ...tableNode.attrs,
131
+ // clear autosizing on the table node
132
+ return tr.setNodeMarkup(tablePos, undefined, {
133
+ ...tableNode.attrs,
139
134
  layout: tableLayout,
140
135
  __autoSize: false
141
136
  }).setMeta('addToHistory', false);
142
137
  };
143
-
144
138
  const getLayoutBasedOnWidth = totalWidth => {
145
139
  if (totalWidth > akEditorWideLayoutWidth) {
146
140
  return 'full-width';
@@ -150,20 +144,15 @@ const getLayoutBasedOnWidth = totalWidth => {
150
144
  return 'default';
151
145
  }
152
146
  };
153
-
154
147
  function parseDOMColumnWidths(domAtPos, tableNode, tableStart, tableRef) {
155
148
  const row = tableRef.querySelector('tr');
156
-
157
149
  if (!row) {
158
150
  return [];
159
151
  }
160
-
161
152
  let cols = [];
162
-
163
153
  for (let col = 0; col < row.childElementCount; col++) {
164
154
  const currentCol = row.children[col];
165
155
  const colspan = Number(currentCol.getAttribute('colspan') || 1);
166
-
167
156
  for (let span = 0; span < colspan; span++) {
168
157
  const colIdx = col + span;
169
158
  const cells = getCellsRefsInColumn(colIdx, tableNode, tableStart, domAtPos);
@@ -173,44 +162,38 @@ function parseDOMColumnWidths(domAtPos, tableNode, tableStart, tableRef) {
173
162
  cols[colIdx] = Math.max(colWidth, tableCellMinWidth);
174
163
  }
175
164
  }
176
-
177
165
  return cols;
178
- } // TODO: move to prosemirror-utils
179
-
166
+ }
180
167
 
168
+ // TODO: move to prosemirror-utils
181
169
  const replaceCells = (tr, table, tablePos, modifyCell) => {
182
170
  const rows = [];
183
171
  let modifiedCells = 0;
184
-
185
172
  for (let rowIndex = 0; rowIndex < table.childCount; rowIndex++) {
186
173
  const row = table.child(rowIndex);
187
174
  const cells = [];
188
-
189
175
  for (let colIndex = 0; colIndex < row.childCount; colIndex++) {
190
- const cell = row.child(colIndex); // FIXME
176
+ const cell = row.child(colIndex);
177
+
178
+ // FIXME
191
179
  // The rowIndex and colIndex are not accurate in a merged cell scenario
192
180
  // e.g. table with 5 columns might have only one cell in a row, colIndex will be 1, where it should be 4
193
-
194
181
  const node = modifyCell(cell, rowIndex, colIndex);
195
-
196
182
  if (node.sameMarkup(cell) === false) {
197
183
  modifiedCells++;
198
184
  }
199
-
200
185
  cells.push(node);
201
186
  }
202
-
203
187
  if (cells.length) {
204
188
  rows.push(row.type.createChecked(row.attrs, cells, row.marks));
205
189
  }
206
- } // Check if the table has changed before replacing.
207
- // If no cells are modified our counter will be zero.
208
-
190
+ }
209
191
 
192
+ // Check if the table has changed before replacing.
193
+ // If no cells are modified our counter will be zero.
210
194
  if (rows.length && modifiedCells !== 0) {
211
195
  const newTable = table.type.createChecked(table.attrs, rows, table.marks);
212
196
  return tr.replaceWith(tablePos, tablePos + table.nodeSize, newTable);
213
197
  }
214
-
215
198
  return tr;
216
199
  };
@@ -3,17 +3,16 @@ import { Selection } from 'prosemirror-state';
3
3
  import { TableMap } from '@atlaskit/editor-tables/table-map';
4
4
  import { CellSelection } from '@atlaskit/editor-tables/cell-selection';
5
5
  import { findTable, getSelectionRect } from '@atlaskit/editor-tables/utils';
6
- import { setMeta } from './metadata'; // re-creates table node with merged cells
6
+ import { setMeta } from './metadata';
7
7
 
8
+ // re-creates table node with merged cells
8
9
  export function mergeCells(tr) {
9
10
  const {
10
11
  selection
11
12
  } = tr;
12
-
13
13
  if (!(selection instanceof CellSelection) || !canMergeCells(tr)) {
14
14
  return tr;
15
15
  }
16
-
17
16
  const rect = getSelectionRect(selection);
18
17
  const table = findTable(selection);
19
18
  const map = TableMap.get(table.node);
@@ -21,53 +20,45 @@ export function mergeCells(tr) {
21
20
  const selectedCells = map.cellsInRect(rect);
22
21
  let mergedCellPos;
23
22
  const rows = [];
24
-
25
23
  for (let rowIndex = 0; rowIndex < map.height; rowIndex++) {
26
24
  const rowCells = [];
27
25
  const row = table.node.child(rowIndex);
28
-
29
26
  for (let colIndex = 0; colIndex < map.width; colIndex++) {
30
27
  const cellPos = map.map[rowIndex * map.width + colIndex];
31
28
  const cell = table.node.nodeAt(cellPos);
32
-
33
29
  if (!cell || seen.indexOf(cellPos) > -1) {
34
30
  continue;
35
31
  }
32
+ seen.push(cellPos);
36
33
 
37
- seen.push(cellPos); // merged cell
38
-
34
+ // merged cell
39
35
  if (colIndex === rect.left && rowIndex === rect.top) {
40
- mergedCellPos = cellPos; // merge content of the selected cells, dropping empty cells
41
-
36
+ mergedCellPos = cellPos;
37
+ // merge content of the selected cells, dropping empty cells
42
38
  let content = isEmptyCell(cell) ? Fragment.empty : cell.content;
43
39
  const seenContent = [mergedCellPos];
44
-
45
40
  for (let i = rect.top; i < rect.bottom; i++) {
46
41
  for (let j = rect.left; j < rect.right; j++) {
47
42
  const pos = map.map[i * map.width + j];
48
-
49
43
  if (seenContent.indexOf(pos) === -1) {
50
44
  seenContent.push(pos);
51
45
  const copyCell = table.node.nodeAt(pos);
52
-
53
46
  if (copyCell && !isEmptyCell(copyCell)) {
54
47
  content = content.append(copyCell.content);
55
48
  }
56
49
  }
57
50
  }
58
51
  }
59
-
60
52
  const rowspan = rect.bottom - rect.top;
61
-
62
53
  if (rowspan < 1) {
63
54
  return setMeta({
64
55
  type: 'MERGE_CELLS',
65
56
  problem: 'NEGATIVE_ROWSPAN'
66
57
  })(tr);
67
- } // update colspan and rowspan of the merged cell to span the selection
68
-
69
-
70
- const attrs = addColSpan({ ...cell.attrs,
58
+ }
59
+ // update colspan and rowspan of the merged cell to span the selection
60
+ const attrs = addColSpan({
61
+ ...cell.attrs,
71
62
  rowspan
72
63
  }, cell.attrs.colspan, rect.right - rect.left - cell.attrs.colspan);
73
64
  const newCell = content === Fragment.empty ? cell.type.createAndFill(attrs, content, cell.marks) : cell.type.createChecked(attrs, content, cell.marks);
@@ -78,7 +69,6 @@ export function mergeCells(tr) {
78
69
  rowCells.push(cell);
79
70
  }
80
71
  }
81
-
82
72
  if (rowCells.length) {
83
73
  rows.push(row.type.createChecked(row.attrs, rowCells, row.marks));
84
74
  } else {
@@ -87,56 +77,49 @@ export function mergeCells(tr) {
87
77
  const prevRow = rows[i];
88
78
  const cells = [];
89
79
  let rowChanged = false;
90
-
91
80
  for (let j = 0; j < prevRow.childCount; j++) {
92
81
  const cell = prevRow.child(j);
93
82
  const {
94
83
  rowspan
95
84
  } = cell.attrs;
96
-
97
85
  if (rowspan && rowspan + i - 1 >= rows.length) {
98
86
  rowChanged = true;
99
-
100
87
  if (rowspan < 2) {
101
88
  return setMeta({
102
89
  type: 'MERGE_CELLS',
103
90
  problem: 'NEGATIVE_ROWSPAN'
104
91
  })(tr);
105
92
  }
106
-
107
- cells.push(cell.type.createChecked({ ...cell.attrs,
93
+ cells.push(cell.type.createChecked({
94
+ ...cell.attrs,
108
95
  rowspan: rowspan - 1
109
96
  }, cell.content, cell.marks));
110
97
  } else {
111
98
  cells.push(cell);
112
99
  }
113
100
  }
114
-
115
101
  if (rowChanged) {
116
102
  rows[i] = row.type.createChecked(prevRow.attrs, cells, prevRow.marks);
117
103
  }
118
104
  }
119
105
  }
120
- } // empty tables? cancel merging like nothing happened
121
-
106
+ }
122
107
 
108
+ // empty tables? cancel merging like nothing happened
123
109
  if (!rows.length) {
124
110
  return setMeta({
125
111
  type: 'MERGE_CELLS',
126
112
  problem: 'EMPTY_TABLE'
127
113
  })(tr);
128
114
  }
129
-
130
115
  const newTable = table.node.type.createChecked(table.node.attrs, rows, table.node.marks);
131
116
  const fixedTable = removeEmptyColumns(newTable);
132
-
133
117
  if (fixedTable === null) {
134
118
  return setMeta({
135
119
  type: 'MERGE_CELLS',
136
120
  problem: 'REMOVE_EMPTY_COLUMNS'
137
121
  })(tr);
138
122
  }
139
-
140
123
  return setMeta({
141
124
  type: 'MERGE_CELLS'
142
125
  })(tr.replaceWith(table.pos, table.pos + table.node.nodeSize, fixedTable).setSelection(Selection.near(tr.doc.resolve((mergedCellPos || 0) + table.start))));
@@ -145,50 +128,39 @@ export function canMergeCells(tr) {
145
128
  const {
146
129
  selection
147
130
  } = tr;
148
-
149
131
  if (!(selection instanceof CellSelection) || selection.$anchorCell.pos === selection.$headCell.pos) {
150
132
  return false;
151
133
  }
152
-
153
134
  const rect = getSelectionRect(selection);
154
-
155
135
  if (!rect) {
156
136
  return false;
157
137
  }
158
-
159
138
  const table = selection.$anchorCell.node(-1);
160
139
  const map = TableMap.get(table);
161
-
162
140
  if (cellsOverlapRectangle(map, rect)) {
163
141
  return false;
164
142
  }
165
-
166
143
  return true;
167
144
  }
168
-
169
145
  function isEmptyCell(cell) {
170
146
  const {
171
147
  content
172
148
  } = cell;
173
149
  return content.childCount === 1 && content.firstChild && content.firstChild.isTextblock && content.firstChild.childCount === 0;
174
150
  }
175
-
176
151
  function addColSpan(attrs, pos, span = 1) {
177
- const newAttrs = { ...attrs,
152
+ const newAttrs = {
153
+ ...attrs,
178
154
  colspan: (attrs.colspan || 1) + span
179
155
  };
180
-
181
156
  if (newAttrs.colwidth) {
182
157
  newAttrs.colwidth = newAttrs.colwidth.slice();
183
-
184
158
  for (let i = 0; i < span; i++) {
185
159
  newAttrs.colwidth.splice(pos, 0, 0);
186
160
  }
187
161
  }
188
-
189
162
  return newAttrs;
190
163
  }
191
-
192
164
  function cellsOverlapRectangle({
193
165
  width,
194
166
  height,
@@ -198,33 +170,27 @@ function cellsOverlapRectangle({
198
170
  let indexLeft = indexTop;
199
171
  let indexBottom = (rect.bottom - 1) * width + rect.left;
200
172
  let indexRight = indexTop + (rect.right - rect.left - 1);
201
-
202
173
  for (let i = rect.top; i < rect.bottom; i++) {
203
174
  if (rect.left > 0 && map[indexLeft] === map[indexLeft - 1] || rect.right < width && map[indexRight] === map[indexRight + 1]) {
204
175
  return true;
205
176
  }
206
-
207
177
  indexLeft += width;
208
178
  indexRight += width;
209
179
  }
210
-
211
180
  for (let i = rect.left; i < rect.right; i++) {
212
181
  if (rect.top > 0 && map[indexTop] === map[indexTop - width] || rect.bottom < height && map[indexBottom] === map[indexBottom + width]) {
213
182
  return true;
214
183
  }
215
-
216
184
  indexTop++;
217
185
  indexBottom++;
218
186
  }
219
-
220
187
  return false;
221
- } // returns an array of numbers, each number indicates the minimum colSpan in each column
222
-
188
+ }
223
189
 
190
+ // returns an array of numbers, each number indicates the minimum colSpan in each column
224
191
  function getMinColSpans(table) {
225
192
  const map = TableMap.get(table);
226
193
  const minColspans = [];
227
-
228
194
  for (let colIndex = map.width - 1; colIndex >= 0; colIndex--) {
229
195
  const cellsPositions = map.cellsInRect({
230
196
  left: colIndex,
@@ -232,17 +198,15 @@ function getMinColSpans(table) {
232
198
  top: 0,
233
199
  bottom: map.height
234
200
  });
235
-
236
201
  if (cellsPositions.length) {
237
202
  const colspans = cellsPositions.map(cellPos => {
238
203
  const cell = table.nodeAt(cellPos);
239
-
240
204
  if (cell) {
241
205
  return cell.attrs.colspan;
242
206
  }
243
207
  });
244
- const minColspan = Math.min(...colspans); // only care about the case when the next column is invisible
245
-
208
+ const minColspan = Math.min(...colspans);
209
+ // only care about the case when the next column is invisible
246
210
  if (!minColspans[colIndex + 1]) {
247
211
  minColspans[colIndex] = minColspan;
248
212
  } else {
@@ -250,42 +214,34 @@ function getMinColSpans(table) {
250
214
  }
251
215
  }
252
216
  }
253
-
254
217
  return minColspans;
255
218
  }
256
-
257
219
  export function removeEmptyColumns(table) {
258
220
  const map = TableMap.get(table);
259
221
  const minColSpans = getMinColSpans(table);
260
-
261
222
  if (!minColSpans.some(colspan => colspan > 1)) {
262
223
  return table;
263
224
  }
264
-
265
225
  const rows = [];
266
-
267
226
  for (let rowIndex = 0; rowIndex < map.height; rowIndex++) {
268
227
  const cellsByCols = {};
269
228
  const cols = Object.keys(minColSpans).map(Number);
270
-
271
229
  for (let idx in cols) {
272
230
  const colIndex = cols[idx];
273
231
  const cellPos = map.map[colIndex + rowIndex * map.width];
274
232
  const rect = map.findCell(cellPos);
275
233
  const cell = cellsByCols[rect.left] || table.nodeAt(cellPos);
276
-
277
234
  if (cell && rect.top === rowIndex) {
278
235
  if (minColSpans[colIndex] > 1) {
279
236
  const colspan = cell.attrs.colspan - minColSpans[colIndex] + 1;
280
-
281
237
  if (colspan < 1) {
282
238
  return null;
283
239
  }
284
-
285
240
  const {
286
241
  colwidth
287
242
  } = cell.attrs;
288
- const newCell = cell.type.createChecked({ ...cell.attrs,
243
+ const newCell = cell.type.createChecked({
244
+ ...cell.attrs,
289
245
  colspan,
290
246
  colwidth: colwidth ? colwidth.slice(0, colspan) : null
291
247
  }, cell.content, cell.marks);
@@ -295,18 +251,14 @@ export function removeEmptyColumns(table) {
295
251
  }
296
252
  }
297
253
  }
298
-
299
254
  const rowCells = Object.keys(cellsByCols).map(col => cellsByCols[col]);
300
255
  const row = table.child(rowIndex);
301
-
302
256
  if (row) {
303
257
  rows.push(row.type.createChecked(row.attrs, rowCells, row.marks));
304
258
  }
305
259
  }
306
-
307
260
  if (!rows.length) {
308
261
  return null;
309
262
  }
310
-
311
263
  return table.type.createChecked(table.attrs, rows, table.marks);
312
264
  }
@@ -1,11 +1,12 @@
1
1
  import { pluginKey } from '../pm-plugins/plugin-key';
2
- import { fireAnalytics } from './fix-tables'; // Set metadata on a ProseMirror transaction for debugging purposes in Synchrony
2
+ import { fireAnalytics } from './fix-tables';
3
+
4
+ // Set metadata on a ProseMirror transaction for debugging purposes in Synchrony
3
5
 
4
6
  export const setMeta = meta => tr => {
5
7
  if ('problem' in meta) {
6
8
  // Send analytics event whenever we encounter with a problem
7
9
  fireAnalytics(meta);
8
10
  }
9
-
10
11
  return tr.setMeta(pluginKey, meta);
11
12
  };
@@ -6,7 +6,6 @@ import { getSelectedTableInfo } from '../utils';
6
6
  export const replaceSelectedTable = (state, content, inputMethod, editorAnalyticsAPI) => {
7
7
  if (isTableSelected(state.selection)) {
8
8
  const table = findTable(state.selection);
9
-
10
9
  if (table) {
11
10
  const slice = typeof content === 'string' ? new Slice(Fragment.from(state.schema.text(content)), 0, 0) : content;
12
11
  let tr = state.tr.replace(table.pos, table.pos + table.node.nodeSize, slice);
@@ -28,6 +27,5 @@ export const replaceSelectedTable = (state, content, inputMethod, editorAnalytic
28
27
  return tr;
29
28
  }
30
29
  }
31
-
32
30
  return state.tr;
33
31
  };