@atlaskit/editor-plugin-table 1.1.1 → 1.1.3

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 (305) hide show
  1. package/CHANGELOG.md +18 -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 +95 -191
  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 +18 -43
  46. package/dist/cjs/plugins/table/pm-plugins/table-resizing/event-handlers.js +20 -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 +16 -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 +51 -40
  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 +17 -73
  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 +58 -49
  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 +10 -22
  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 +40 -103
  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 +14 -17
  144. package/dist/es2019/plugins/table/pm-plugins/table-resizing/event-handlers.js +13 -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 +14 -3
  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 +46 -21
  153. package/dist/es2019/plugins/table/pm-plugins/table-resizing/utils/resize-logic.js +31 -61
  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 +60 -32
  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 +11 -7
  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 +95 -184
  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 +18 -25
  230. package/dist/esm/plugins/table/pm-plugins/table-resizing/event-handlers.js +20 -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 +14 -3
  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 +49 -26
  239. package/dist/esm/plugins/table/pm-plugins/table-resizing/utils/resize-logic.js +17 -62
  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 +58 -36
  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 +9 -10
  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/dist/types/plugins/table/pm-plugins/table-resizing/utils/colgroup.d.ts +7 -0
  284. package/dist/types/plugins/table/pm-plugins/table-resizing/utils/misc.d.ts +2 -1
  285. package/dist/types/plugins/table/ui/common-styles.d.ts +1 -0
  286. package/package.json +8 -6
  287. package/src/__tests__/integration/__fixtures__/empty-layout.ts +35 -0
  288. package/src/__tests__/integration/__fixtures__/nested-in-expand.ts +129 -0
  289. package/src/__tests__/integration/horizontal-scroll.ts +489 -0
  290. package/src/__tests__/unit/commands/insert.ts +3 -3
  291. package/src/__tests__/unit/keymap.ts +3 -1
  292. package/src/__tests__/unit/pm-plugins/table-resizing/colgroup.ts +38 -0
  293. package/src/__tests__/unit/pm-plugins/table-resizing/event-handlers.ts +5 -2
  294. package/src/__tests__/visual-regression/__image_snapshots__/cell-options-menu-ts-table-cell-options-menu-delete-column-menu-item-visual-hints-should-be-added-to-the-table-column-on-hover-1-snap.png +2 -2
  295. package/src/__tests__/visual-regression/__image_snapshots__/cell-options-menu-ts-table-cell-options-menu-delete-row-menu-item-visual-hints-should-be-added-to-the-table-row-on-hover-1-snap.png +2 -2
  296. package/src/__tests__/visual-regression/__image_snapshots__/sticky-header-ts-snapshot-test-table-sticky-header-should-align-with-table-cell-when-active-2-snap.png +2 -2
  297. package/src/__tests__/visual-regression/sticky-header.ts +2 -1
  298. package/src/plugins/table/nodeviews/TableComponent.tsx +16 -3
  299. package/src/plugins/table/pm-plugins/table-resizing/commands.ts +6 -2
  300. package/src/plugins/table/pm-plugins/table-resizing/event-handlers.ts +9 -1
  301. package/src/plugins/table/pm-plugins/table-resizing/utils/colgroup.ts +19 -1
  302. package/src/plugins/table/pm-plugins/table-resizing/utils/misc.ts +57 -5
  303. package/src/plugins/table/pm-plugins/table-resizing/utils/resize-logic.ts +2 -2
  304. package/src/plugins/table/transforms/column-width.ts +60 -6
  305. package/src/plugins/table/ui/common-styles.ts +5 -2
@@ -10,27 +10,25 @@
10
10
  * TODO: https://product-fabric.atlassian.net/browse/ED-12714
11
11
  *
12
12
  */
13
+
13
14
  import { SafePlugin } from '@atlaskit/editor-common/safe-plugin';
14
15
  import { PluginKey } from 'prosemirror-state';
15
16
  import rafSchedule from 'raf-schd';
16
17
  import { uuid } from '@atlaskit/adf-schema';
17
18
  import { stepAddsOneOf } from '@atlaskit/editor-common/utils';
18
19
  const pluginKey = new PluginKey('tableLocalIdPlugin');
19
-
20
20
  const getPluginState = state => state && pluginKey.getState(state);
21
+
21
22
  /**
22
23
  * Traverses a transaction's steps to see if we're inserting any tables
23
24
  */
24
-
25
-
26
25
  const checkIsAddingTable = (transaction, nodeType) => {
27
26
  return transaction.steps.some(step => stepAddsOneOf(step, new Set([nodeType])));
28
27
  };
28
+
29
29
  /**
30
30
  * Ensures uniqueness of `localId`s on tables being created or edited
31
31
  */
32
-
33
-
34
32
  const createPlugin = dispatch => new SafePlugin({
35
33
  key: pluginKey,
36
34
  state: {
@@ -39,28 +37,24 @@ const createPlugin = dispatch => new SafePlugin({
39
37
  parsedForLocalIds: false
40
38
  };
41
39
  },
42
-
43
40
  apply(tr, pluginState) {
44
41
  const meta = tr.getMeta(pluginKey);
45
-
46
42
  if (meta) {
47
43
  const keys = Object.keys(meta);
48
44
  const changed = keys.some(key => {
49
45
  return pluginState[key] !== meta[key];
50
46
  });
51
-
52
47
  if (changed) {
53
- const newState = { ...pluginState,
48
+ const newState = {
49
+ ...pluginState,
54
50
  ...meta
55
51
  };
56
52
  dispatch(pluginKey, newState);
57
53
  return newState;
58
54
  }
59
55
  }
60
-
61
56
  return pluginState;
62
57
  }
63
-
64
58
  },
65
59
  view: () => {
66
60
  return {
@@ -86,17 +80,13 @@ const createPlugin = dispatch => new SafePlugin({
86
80
  state
87
81
  } = editorView;
88
82
  const pluginState = getPluginState(state);
89
-
90
83
  if (!pluginState) {
91
84
  return;
92
85
  }
93
-
94
86
  const parsed = pluginState.parsedForLocalIds;
95
-
96
87
  if (parsed) {
97
88
  return;
98
89
  }
99
-
100
90
  const {
101
91
  table
102
92
  } = state.schema.nodes;
@@ -106,10 +96,10 @@ const createPlugin = dispatch => new SafePlugin({
106
96
  editorView.state.doc.descendants((node, pos) => {
107
97
  const isTable = node.type === table;
108
98
  const localId = node.attrs.localId;
109
-
110
99
  if (isTable && !localId) {
111
100
  tableIdWasAdded = true;
112
- tr.setNodeMarkup(pos, undefined, { ...node.attrs,
101
+ tr.setNodeMarkup(pos, undefined, {
102
+ ...node.attrs,
113
103
  localId: uuid.generate()
114
104
  });
115
105
  return false;
@@ -118,11 +108,8 @@ const createPlugin = dispatch => new SafePlugin({
118
108
  * Otherwise continue traversing, we can encounter tables nested in
119
109
  * expands/bodiedExtensions
120
110
  */
121
-
122
-
123
111
  return true;
124
112
  });
125
-
126
113
  if (tableIdWasAdded) {
127
114
  tr.setMeta('addToHistory', false);
128
115
  editorView.dispatch(tr);
@@ -132,7 +119,6 @@ const createPlugin = dispatch => new SafePlugin({
132
119
  parsedForLocalIds: true
133
120
  }));
134
121
  }
135
-
136
122
  };
137
123
  },
138
124
  appendTransaction: (transactions, _oldState, newState) => {
@@ -145,57 +131,52 @@ const createPlugin = dispatch => new SafePlugin({
145
131
  transactions.forEach(transaction => {
146
132
  if (!transaction.docChanged) {
147
133
  return;
148
- } // Don't interfere with cut as it clashes with fixTables & we don't need
149
- // to handle any extra cut cases in this plugin
150
-
134
+ }
151
135
 
136
+ // Don't interfere with cut as it clashes with fixTables & we don't need
137
+ // to handle any extra cut cases in this plugin
152
138
  const uiEvent = transaction.getMeta('uiEvent');
153
-
154
139
  if (uiEvent === 'cut') {
155
140
  return;
156
141
  }
157
- /** Check if we're actually inserting a table, otherwise we can ignore this tr */
158
-
159
142
 
143
+ /** Check if we're actually inserting a table, otherwise we can ignore this tr */
160
144
  const isAddingTable = checkIsAddingTable(transaction, table);
161
-
162
145
  if (!isAddingTable) {
163
146
  return;
164
- } // Can't simply look at changed nodes, as we could be adding a table
165
-
147
+ }
166
148
 
149
+ // Can't simply look at changed nodes, as we could be adding a table
167
150
  newState.doc.descendants((node, pos) => {
168
151
  const isTable = node.type === table;
169
- const localId = node.attrs.localId; // Dealing with a table - make sure it's a unique ID
152
+ const localId = node.attrs.localId;
170
153
 
154
+ // Dealing with a table - make sure it's a unique ID
171
155
  if (isTable) {
172
156
  if (localId && !idsObserved.has(localId)) {
173
- idsObserved.add(localId); // Also add a localId if it happens to not have one,
157
+ idsObserved.add(localId);
158
+ // Also add a localId if it happens to not have one,
174
159
  } else if (!localId || idsObserved.has(localId)) {
175
160
  modified = true;
176
- tr.setNodeMarkup(pos, undefined, { ...node.attrs,
161
+ tr.setNodeMarkup(pos, undefined, {
162
+ ...node.attrs,
177
163
  localId: uuid.generate()
178
164
  });
179
165
  }
180
-
181
166
  return false;
182
167
  }
168
+
183
169
  /**
184
170
  * Otherwise continue traversing, we can encounter tables nested in
185
171
  * expands/bodiedExtensions
186
172
  */
187
-
188
-
189
173
  return true;
190
174
  });
191
175
  });
192
-
193
176
  if (modified) {
194
177
  return tr;
195
178
  }
196
-
197
179
  return;
198
180
  }
199
181
  });
200
-
201
182
  export { createPlugin };
@@ -7,45 +7,45 @@ export const scaleTable = (tableRef, options, domAtPos) => (state, dispatch) =>
7
7
  if (!tableRef) {
8
8
  return false;
9
9
  }
10
-
11
10
  const {
12
11
  node,
13
12
  start,
14
- parentWidth
15
- } = options; // If a table has not been resized yet, columns should be auto.
13
+ parentWidth,
14
+ layoutChanged
15
+ } = options;
16
16
 
17
+ // If a table has not been resized yet, columns should be auto.
17
18
  if (hasTableBeenResized(node) === false) {
18
19
  // If its not a re-sized table, we still want to re-create cols
19
20
  // To force reflow of columns upon delete.
20
21
  recreateResizeColsByNode(tableRef, node);
21
22
  return false;
22
23
  }
23
-
24
24
  let resizeState;
25
-
26
25
  if (parentWidth) {
27
26
  resizeState = scaleWithParent(tableRef, parentWidth, node, start, domAtPos);
28
27
  } else {
29
28
  resizeState = scale(tableRef, options, domAtPos);
30
29
  }
31
-
32
30
  if (resizeState) {
33
31
  let {
34
32
  tr
35
33
  } = state;
36
34
  tr = updateColumnWidths(resizeState, node, start)(tr);
37
-
38
35
  if (tr.docChanged && dispatch) {
39
- tr.setMeta('scrollIntoView', false); // TODO: ED-8995
36
+ tr.setMeta('scrollIntoView', false);
37
+ // TODO: ED-8995
40
38
  // We need to do this check to reduce the number of race conditions when working with tables.
41
39
  // This metadata is been used in the sendTransaction function in the Collab plugin
42
-
43
- tr.setMeta('scaleTable', true);
40
+ /* Added !layoutChanged check here to solve unnecessary scroll bar after publish when click on breakout button multiple times and publish
41
+ scaleTable is only called once every time a breakout button is clicked, so it is safe not to add the meta 'scaleTable' to the tr.
42
+ Leaving the tr.setMeta('scaleTable', true) here for race conditions that we aren't aware of.
43
+ */
44
+ !layoutChanged && tr.setMeta('scaleTable', true);
44
45
  dispatch(tr);
45
46
  return true;
46
47
  }
47
48
  }
48
-
49
49
  return false;
50
50
  };
51
51
  export const evenColumns = ({
@@ -56,21 +56,19 @@ export const evenColumns = ({
56
56
  }) => (state, dispatch) => {
57
57
  if (!isTableSelected(state.selection)) {
58
58
  return false;
59
- } // double click detection logic
60
- // Note: ProseMirror's handleDoubleClick doesn't quite work with DOM mousedown event handler
61
-
59
+ }
62
60
 
61
+ // double click detection logic
62
+ // Note: ProseMirror's handleDoubleClick doesn't quite work with DOM mousedown event handler
63
63
  const {
64
64
  lastClick
65
65
  } = getPluginState(state);
66
66
  const now = Date.now();
67
-
68
67
  if (lastClick && now - lastClick.time < 500 && isClickNear(event, lastClick)) {
69
68
  const newState = evenAllColumnsWidths(resizeState);
70
69
  setLastClick(null, tr => updateColumnWidths(newState, table, start)(tr))(state, dispatch);
71
70
  return true;
72
71
  }
73
-
74
72
  setLastClick({
75
73
  x: event.clientX,
76
74
  y: event.clientY,
@@ -83,7 +81,6 @@ export const distributeColumnsWidths = (newResizeState, table) => (state, dispat
83
81
  const tr = updateColumnWidths(newResizeState, table.node, table.start)(state.tr);
84
82
  stopResizing(tr)(state, dispatch);
85
83
  }
86
-
87
84
  return true;
88
85
  };
89
86
  export const setResizeHandlePos = resizeHandlePos => createCommand({
@@ -9,6 +9,7 @@ import { evenColumns, setDragging, stopResizing } from './commands';
9
9
  import { getPluginState } from './plugin-factory';
10
10
  import { currentColWidth, getLayoutSize, getResizeState, pointsAtCell, resizeColumn, updateControls } from './utils';
11
11
  import { ACTION_SUBJECT, EVENT_TYPE, TABLE_ACTION } from '@atlaskit/editor-common/analytics';
12
+ import { getParentWidthWithoutPadding } from './utils/misc';
12
13
  export const handleMouseDown = (view, event, localResizeHandlePos, getEditorContainerWidth, getEditorFeatureFlags, editorAnalyticsAPI) => {
13
14
  const {
14
15
  state,
@@ -16,11 +17,9 @@ export const handleMouseDown = (view, event, localResizeHandlePos, getEditorCont
16
17
  } = view;
17
18
  const editorDisabled = !view.editable;
18
19
  const domAtPos = view.domAtPos.bind(view);
19
-
20
20
  if (editorDisabled || localResizeHandlePos === null || !pointsAtCell(state.doc.resolve(localResizeHandlePos))) {
21
21
  return false;
22
22
  }
23
-
24
23
  event.preventDefault();
25
24
  const mouseDownTime = event.timeStamp;
26
25
  const cell = state.doc.nodeAt(localResizeHandlePos);
@@ -28,19 +27,18 @@ export const handleMouseDown = (view, event, localResizeHandlePos, getEditorCont
28
27
  const originalTable = $cell.node(-1);
29
28
  const start = $cell.start(-1);
30
29
  let dom = domAtPos(start).node;
31
-
32
30
  if (dom && dom.nodeName !== 'TABLE') {
33
31
  dom = dom.closest('table');
34
32
  }
35
-
36
33
  const containerWidth = getEditorContainerWidth();
37
34
  const parentWidth = getParentNodeWidth(start, state, containerWidth);
38
- let maxSize = parentWidth || getLayoutSize(dom.getAttribute('data-layout'), containerWidth.width, {});
39
35
 
36
+ // TODO - refactor this logic into getParentNodeWidth() in editor-common [ED-16718]
37
+ const parentActualWidth = getParentWidthWithoutPadding(parentWidth, start, state);
38
+ let maxSize = parentActualWidth || getLayoutSize(dom.getAttribute('data-layout'), containerWidth.width, {});
40
39
  if (originalTable.attrs.isNumberColumnEnabled) {
41
40
  maxSize -= akEditorTableNumberColumnWidth;
42
41
  }
43
-
44
42
  const resizeState = getResizeState({
45
43
  minWidth: tableCellMinWidth,
46
44
  maxSize,
@@ -49,7 +47,6 @@ export const handleMouseDown = (view, event, localResizeHandlePos, getEditorCont
49
47
  start,
50
48
  domAtPos
51
49
  });
52
-
53
50
  if (evenColumns({
54
51
  resizeState,
55
52
  table: originalTable,
@@ -59,13 +56,11 @@ export const handleMouseDown = (view, event, localResizeHandlePos, getEditorCont
59
56
  finish(event);
60
57
  return true;
61
58
  }
62
-
63
59
  const width = currentColWidth(view, localResizeHandlePos, cell.attrs);
64
60
  setDragging({
65
61
  startX: event.clientX,
66
62
  startWidth: width
67
63
  })(state, dispatch);
68
-
69
64
  function finish(event) {
70
65
  window.removeEventListener('mouseup', finish);
71
66
  window.removeEventListener('mousemove', move);
@@ -80,46 +75,42 @@ export const handleMouseDown = (view, event, localResizeHandlePos, getEditorCont
80
75
  dragging,
81
76
  resizeHandlePos
82
77
  } = getPluginState(state);
83
-
84
78
  if (resizeHandlePos === null) {
85
79
  return stopResizing()(state, dispatch);
86
80
  }
87
-
88
81
  if (!pointsAtCell(state.doc.resolve(resizeHandlePos))) {
89
82
  return;
90
- } // resizeHandlePos could be remapped via a collab change.
83
+ }
84
+ // resizeHandlePos could be remapped via a collab change.
91
85
  // Fetch a fresh reference of the table.
92
-
93
-
94
86
  const $cell = state.doc.resolve(resizeHandlePos);
95
87
  const start = $cell.start(-1);
96
- const table = $cell.node(-1); // If we let go in the same place we started, dont need to do anything.
88
+ const table = $cell.node(-1);
97
89
 
90
+ // If we let go in the same place we started, dont need to do anything.
98
91
  if (dragging && clientX === dragging.startX) {
99
92
  return stopResizing()(state, dispatch);
100
93
  }
101
-
102
94
  let {
103
95
  tr
104
96
  } = state;
105
-
106
97
  if (dragging) {
107
98
  const {
108
99
  startX
109
- } = dragging; // If the table has changed (via collab for example) don't apply column widths
100
+ } = dragging;
101
+
102
+ // If the table has changed (via collab for example) don't apply column widths
110
103
  // For example, if a table col is deleted we won't be able to reliably remap the new widths
111
104
  // There may be a more elegant solution to this, to avoid a jarring experience.
112
-
113
105
  if (table.eq(originalTable)) {
114
106
  const map = TableMap.get(table);
115
107
  const colIndex = map.colCount($cell.pos - start) + ($cell.nodeAfter ? $cell.nodeAfter.attrs.colspan : 1) - 1;
116
108
  const selectionRect = getSelectionRect(state.selection);
117
- const selectedColumns = selectionRect ? getSelectedColumnIndexes(selectionRect) : []; // only selected (or selected - 1) columns should be distributed
118
-
109
+ const selectedColumns = selectionRect ? getSelectedColumnIndexes(selectionRect) : [];
110
+ // only selected (or selected - 1) columns should be distributed
119
111
  const resizingSelectedColumns = selectedColumns.indexOf(colIndex) > -1 || selectedColumns.indexOf(colIndex + 1) > -1;
120
112
  const newResizeState = resizeColumn(resizeState, colIndex, clientX - startX, dom, resizingSelectedColumns ? selectedColumns : undefined);
121
113
  tr = updateColumnWidths(newResizeState, table, start)(tr);
122
-
123
114
  if (colIndex === map.width - 1) {
124
115
  const mouseUpTime = event.timeStamp;
125
116
  editorAnalyticsAPI === null || editorAnalyticsAPI === void 0 ? void 0 : editorAnalyticsAPI.attachAnalyticsEvent({
@@ -136,11 +127,9 @@ export const handleMouseDown = (view, event, localResizeHandlePos, getEditorCont
136
127
  })(tr);
137
128
  }
138
129
  }
139
-
140
130
  return stopResizing(tr)(state, dispatch);
141
131
  }
142
132
  }
143
-
144
133
  function move(event) {
145
134
  const {
146
135
  clientX,
@@ -153,11 +142,9 @@ export const handleMouseDown = (view, event, localResizeHandlePos, getEditorCont
153
142
  dragging,
154
143
  resizeHandlePos
155
144
  } = getPluginState(state);
156
-
157
145
  if (!which || !dragging || resizeHandlePos === null || !pointsAtCell(state.doc.resolve(resizeHandlePos))) {
158
146
  return finish(event);
159
147
  }
160
-
161
148
  const $cell = state.doc.resolve(resizeHandlePos);
162
149
  const table = $cell.node(-1);
163
150
  const map = TableMap.get(table);
@@ -166,7 +153,6 @@ export const handleMouseDown = (view, event, localResizeHandlePos, getEditorCont
166
153
  updateControls(getEditorFeatureFlags)(state);
167
154
  updateResizeHandles(dom);
168
155
  }
169
-
170
156
  window.addEventListener('mouseup', finish);
171
157
  window.addEventListener('mousemove', move);
172
158
  return true;
@@ -1,17 +1,15 @@
1
1
  import { pluginFactory } from '@atlaskit/editor-common/utils';
2
2
  import { pluginKey } from './plugin-key';
3
3
  import reducer from './reducer';
4
-
5
4
  function mapping(tr, pluginState) {
6
5
  if (pluginState && pluginState.resizeHandlePos !== null) {
7
- return { ...pluginState,
6
+ return {
7
+ ...pluginState,
8
8
  resizeHandlePos: tr.mapping.map(pluginState.resizeHandlePos)
9
9
  };
10
10
  }
11
-
12
11
  return pluginState;
13
12
  }
14
-
15
13
  const factory = pluginFactory(pluginKey, reducer, {
16
14
  mapping
17
15
  });
@@ -27,18 +27,17 @@ export function createPlugin(dispatch, {
27
27
  })
28
28
  };
29
29
  },
30
-
31
30
  handleDOMEvents: {
32
31
  mousedown(view, event) {
33
32
  const {
34
33
  state
35
34
  } = view;
36
- const resizeHandlePos = // we're setting `resizeHandlePos` via command in unit tests
35
+ const resizeHandlePos =
36
+ // we're setting `resizeHandlePos` via command in unit tests
37
37
  getPluginState(state).resizeHandlePos || getResizeCellPos(view, event, lastColumnResizable);
38
38
  const {
39
39
  dragging
40
40
  } = getPluginState(state);
41
-
42
41
  if (resizeHandlePos !== null && !dragging) {
43
42
  if (handleMouseDown(view, event, resizeHandlePos, getEditorContainerWidth, getEditorFeatureFlags, editorAnalyticsAPI)) {
44
43
  const {
@@ -48,10 +47,8 @@ export function createPlugin(dispatch, {
48
47
  return setResizeHandlePos(resizeHandlePos)(state, dispatch);
49
48
  }
50
49
  }
51
-
52
50
  return false;
53
51
  }
54
-
55
52
  }
56
53
  }
57
54
  });
@@ -1,30 +1,30 @@
1
1
  export default ((pluginState, action) => {
2
2
  switch (action.type) {
3
3
  case 'STOP_RESIZING':
4
- return { ...pluginState,
4
+ return {
5
+ ...pluginState,
5
6
  resizeHandlePos: null,
6
7
  dragging: null
7
8
  };
8
-
9
9
  case 'SET_RESIZE_HANDLE_POSITION':
10
- return { ...pluginState,
10
+ return {
11
+ ...pluginState,
11
12
  resizeHandlePos: action.data.resizeHandlePos
12
13
  };
13
-
14
14
  case 'SET_DRAGGING':
15
- return { ...pluginState,
15
+ return {
16
+ ...pluginState,
16
17
  dragging: action.data.dragging
17
18
  };
18
-
19
19
  case 'SET_LAST_CLICK':
20
20
  const {
21
21
  lastClick
22
22
  } = action.data;
23
- return { ...pluginState,
23
+ return {
24
+ ...pluginState,
24
25
  lastClick,
25
26
  resizeHandlePos: lastClick ? pluginState.resizeHandlePos : null
26
27
  };
27
-
28
28
  default:
29
29
  return pluginState;
30
30
  }
@@ -1,10 +1,10 @@
1
1
  import { DOMSerializer } from 'prosemirror-model';
2
2
  import { getFragmentBackingArray } from '@atlaskit/editor-common/utils';
3
+ import { tableCellMinWidth } from '@atlaskit/editor-common/styles';
3
4
  export const generateColgroup = table => {
4
5
  const cols = [];
5
6
  table.content.firstChild.content.forEach(cell => {
6
7
  const colspan = cell.attrs.colspan || 1;
7
-
8
8
  if (Array.isArray(cell.attrs.colwidth)) {
9
9
  // We slice here to guard against our colwidth array having more entries
10
10
  // Than the we actually span. We'll patch the document at a later point.
@@ -26,11 +26,9 @@ export const generateColgroup = table => {
26
26
  };
27
27
  export const insertColgroupFromNode = (tableRef, table) => {
28
28
  let colgroup = tableRef.querySelector('colgroup');
29
-
30
29
  if (colgroup) {
31
30
  tableRef.removeChild(colgroup);
32
31
  }
33
-
34
32
  colgroup = renderColgroupFromNode(table);
35
33
  tableRef.insertBefore(colgroup, tableRef.firstChild);
36
34
  return colgroup.children;
@@ -39,6 +37,19 @@ export const hasTableBeenResized = table => {
39
37
  return !!getFragmentBackingArray(table.content.firstChild.content).find(cell => cell.attrs.colwidth);
40
38
  };
41
39
 
40
+ /**
41
+ * Check if a table has all the column width set to tableCellMinWidth(48px) or null
42
+ *
43
+ * @param table
44
+ * @returns true if all column width is equal to tableCellMinWidth or null, false otherwise
45
+ */
46
+ export const isMinCellWidthTable = table => {
47
+ const cellArray = getFragmentBackingArray(table.content.firstChild.content);
48
+ const isTableMinCellWidth = cellArray.every(cell => {
49
+ return cell.attrs.colwidth && cell.attrs.colwidth[0] === tableCellMinWidth || cell.attrs.colwidth === null;
50
+ });
51
+ return isTableMinCellWidth;
52
+ };
42
53
  function renderColgroupFromNode(table) {
43
54
  const rendered = DOMSerializer.renderSpec(document, ['colgroup', {}, ...generateColgroup(table)]);
44
55
  return rendered.dom;
@@ -6,7 +6,8 @@ import { unitToNumber } from './unit-to-number';
6
6
  // Reads `width` and `minWidth` of each column from DOM and returns `ColumnState` containing those values
7
7
  export const getColumnStateFromDOM = (cells, index, minWidth) => {
8
8
  const width = calculateColumnWidth(cells, calculateColumnWidthCallback);
9
- const minColumnWidth = width < minWidth ? // for newly created column (where width < minWidth) we set minWidth = tableNewColumnMinWidth (140px atm)
9
+ const minColumnWidth = width < minWidth ?
10
+ // for newly created column (where width < minWidth) we set minWidth = tableNewColumnMinWidth (140px atm)
10
11
  tableNewColumnMinWidth : calculateColumnWidth(cells, calculateColumnMinWidthCallback(minWidth));
11
12
  return {
12
13
  index,
@@ -16,8 +17,9 @@ export const getColumnStateFromDOM = (cells, index, minWidth) => {
16
17
  };
17
18
  export const getFreeSpace = state => {
18
19
  return Math.max(state.width - state.minWidth, 0);
19
- }; // Returns DOM refs of all cells in a column by `columnIndex`
20
+ };
20
21
 
22
+ // Returns DOM refs of all cells in a column by `columnIndex`
21
23
  export const getCellsRefsInColumn = (columnIndex, table, tableStart, domAtPos) => {
22
24
  const map = TableMap.get(table);
23
25
  const cellsPositions = map.cellsInRect({
@@ -29,26 +31,24 @@ export const getCellsRefsInColumn = (columnIndex, table, tableStart, domAtPos) =
29
31
  const cells = [];
30
32
  cellsPositions.forEach(pos => {
31
33
  const col = findDomRefAtPos(pos + tableStart, domAtPos);
32
-
33
34
  if (col) {
34
35
  cells.push(col);
35
36
  }
36
37
  });
37
38
  return cells;
38
- }; // calculates column widths based on `cells` DOM refs
39
+ };
39
40
 
41
+ // calculates column widths based on `cells` DOM refs
40
42
  export const calculateColumnWidth = (cells, calculateColumnWidthCb) => {
41
43
  let maxColWidth = 0;
42
44
  let colSpanWidth = 0;
43
45
  cells.forEach(cellRef => {
44
46
  const css = getComputedStyle(cellRef);
45
47
  const colspan = Number(cellRef.getAttribute('colspan') || 1);
46
-
47
48
  if (colspan > 1) {
48
49
  colSpanWidth = calculateColumnWidthCb(css, cellRef, colspan);
49
50
  return;
50
51
  }
51
-
52
52
  if (css) {
53
53
  const colWidth = calculateColumnWidthCb(css, cellRef, colspan);
54
54
  maxColWidth = Math.max(colWidth, maxColWidth);
@@ -57,22 +57,19 @@ export const calculateColumnWidth = (cells, calculateColumnWidthCb) => {
57
57
  return maxColWidth || colSpanWidth;
58
58
  };
59
59
  export const addContainerLeftRightPadding = (amount, css) => amount + unitToNumber(css.paddingLeft) + unitToNumber(css.paddingRight);
60
-
61
60
  function calculateColumnWidthCallback(css) {
62
61
  return unitToNumber(css.width);
63
62
  }
64
-
65
63
  function calculateColumnMinWidthCallback(minColumnWidth) {
66
64
  return (css, cellRef, colSpan) => {
67
65
  if (colSpan && colSpan > 1) {
68
66
  return unitToNumber(css.width);
69
67
  }
70
-
71
68
  const {
72
69
  minWidth: minContentWidth
73
- } = contentWidth(cellRef, cellRef); // Override the min width, if there is content that can't collapse
70
+ } = contentWidth(cellRef, cellRef);
71
+ // Override the min width, if there is content that can't collapse
74
72
  // Past a certain width.
75
-
76
73
  return Math.max(addContainerLeftRightPadding(minContentWidth, css), minContentWidth, minColumnWidth);
77
74
  };
78
75
  }