@atlaskit/editor-tables 3.1.14 → 3.2.0

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 (647) hide show
  1. package/CHANGELOG.md +24 -0
  2. package/cell-bookmark/package.json +4 -4
  3. package/cell-selection/package.json +4 -4
  4. package/dist/cjs/add-to-cache.js +10 -0
  5. package/dist/cjs/cell-bookmark.js +2 -2
  6. package/dist/cjs/cell-selection.js +6 -6
  7. package/dist/cjs/compute-map.js +133 -0
  8. package/dist/cjs/find-bad-col-widths.js +51 -0
  9. package/dist/cjs/find-width.js +41 -0
  10. package/dist/cjs/index.js +4 -3
  11. package/dist/cjs/pm-plugins/handle-mouse-down.js +154 -0
  12. package/dist/cjs/pm-plugins/handle-triple-click.js +20 -0
  13. package/dist/cjs/pm-plugins/input.js +3 -156
  14. package/dist/cjs/pm-plugins/table-editing.js +4 -2
  15. package/dist/cjs/read-from-cache.js +10 -0
  16. package/dist/cjs/rect.js +18 -0
  17. package/dist/cjs/table-map-cache.js +49 -0
  18. package/dist/cjs/table-map.js +42 -253
  19. package/dist/cjs/utils/add-col-span.js +26 -0
  20. package/dist/cjs/utils/add-column-after.js +21 -0
  21. package/dist/cjs/utils/add-column-at.js +2 -2
  22. package/dist/cjs/utils/add-column-before.js +21 -0
  23. package/dist/cjs/utils/add-column.js +13 -15
  24. package/dist/cjs/utils/add-row-after.js +21 -0
  25. package/dist/cjs/utils/add-row-at.js +5 -83
  26. package/dist/cjs/utils/add-row-before.js +21 -0
  27. package/dist/cjs/utils/analytics-helpers.js +12 -45
  28. package/dist/cjs/utils/array-of-rows.js +5 -0
  29. package/dist/cjs/utils/assert-colspan.js +14 -0
  30. package/dist/cjs/utils/cell-around.js +14 -0
  31. package/dist/cjs/utils/cell-near.js +21 -0
  32. package/dist/cjs/utils/cell-wrapping.js +16 -0
  33. package/dist/cjs/utils/cells.js +25 -36
  34. package/dist/cjs/utils/changed-descendants.js +33 -0
  35. package/dist/cjs/utils/clip-cells.js +80 -0
  36. package/dist/cjs/utils/clone-column.js +4 -4
  37. package/dist/cjs/utils/clone-row-at.js +86 -0
  38. package/dist/cjs/utils/clone-row.js +4 -4
  39. package/dist/cjs/utils/colspan.js +18 -47
  40. package/dist/cjs/utils/column-is-header.js +17 -0
  41. package/dist/cjs/utils/convert-array-of-rows-to-table-node.js +57 -0
  42. package/dist/cjs/utils/convert-table-node-to-array-of-rows.js +54 -0
  43. package/dist/cjs/utils/find-cell-closest-to-pos.js +18 -0
  44. package/dist/cjs/utils/find-cell-rect-closest-to-pos.js +21 -0
  45. package/dist/cjs/utils/find-table-closest-to-pos.js +14 -0
  46. package/dist/cjs/utils/find-table.js +13 -0
  47. package/dist/cjs/utils/find.js +27 -41
  48. package/dist/cjs/utils/fit-slice.js +27 -0
  49. package/dist/cjs/utils/fix-table.js +112 -0
  50. package/dist/cjs/utils/fix-tables.js +4 -138
  51. package/dist/cjs/utils/for-each-cell-in-column.js +27 -0
  52. package/dist/cjs/utils/for-each-cell-in-row.js +25 -0
  53. package/dist/cjs/utils/for-each-cell.js +14 -41
  54. package/dist/cjs/utils/get-cell-type-callback.js +5 -0
  55. package/dist/cjs/utils/get-cells-in-column.js +2 -2
  56. package/dist/cjs/utils/get-cells-in-row.js +2 -2
  57. package/dist/cjs/utils/get-cells-in-table.js +2 -2
  58. package/dist/cjs/utils/get-selected-cell-info.js +33 -0
  59. package/dist/cjs/utils/get-selected-table-info.js +25 -0
  60. package/dist/cjs/utils/get-table-selection-closes-to-pos.js +23 -0
  61. package/dist/cjs/utils/go-to-next-cell.js +2 -2
  62. package/dist/cjs/utils/handle-paste.js +11 -8
  63. package/dist/cjs/utils/in-same-table.js +9 -0
  64. package/dist/cjs/utils/{copy-paste.js → insert-cells.js} +13 -194
  65. package/dist/cjs/utils/is-column-selected.js +24 -0
  66. package/dist/cjs/utils/is-header-enabled-by-type.js +22 -0
  67. package/dist/cjs/utils/is-in-table.js +15 -0
  68. package/dist/cjs/utils/is-rect-selected.js +26 -0
  69. package/dist/cjs/utils/is-row-selected.js +24 -0
  70. package/dist/cjs/utils/is-selected.js +27 -66
  71. package/dist/cjs/utils/is-table-selected.js +22 -0
  72. package/dist/cjs/utils/is-valid-reorder.js +20 -0
  73. package/dist/cjs/utils/move-column.js +4 -4
  74. package/dist/cjs/utils/move-row-in-array-of-rows.js +23 -0
  75. package/dist/cjs/utils/move-row.js +4 -4
  76. package/dist/cjs/utils/move-table-column.js +16 -0
  77. package/dist/cjs/utils/move-table-row.js +14 -0
  78. package/dist/cjs/utils/next-cell.js +13 -0
  79. package/dist/cjs/utils/pasted-cells.js +129 -0
  80. package/dist/cjs/utils/points-at-cell.js +9 -0
  81. package/dist/cjs/utils/remove-col-span.js +29 -0
  82. package/dist/cjs/utils/remove-column-at.js +31 -0
  83. package/dist/cjs/utils/remove-column-closest-to-pos.js +19 -0
  84. package/dist/cjs/utils/remove-column.js +31 -80
  85. package/dist/cjs/utils/remove-row-at.js +31 -0
  86. package/dist/cjs/utils/remove-row-closest-to-pos.js +19 -0
  87. package/dist/cjs/utils/remove-row.js +26 -75
  88. package/dist/cjs/utils/remove-selected-columns.js +49 -0
  89. package/dist/cjs/utils/remove-selected-rows.js +49 -0
  90. package/dist/cjs/utils/reorder-utils.js +45 -178
  91. package/dist/cjs/utils/replace-table.js +4 -4
  92. package/dist/cjs/utils/select-nodes.js +43 -60
  93. package/dist/cjs/utils/select-table-closest-to-pos.js +36 -0
  94. package/dist/cjs/utils/select-table.js +26 -0
  95. package/dist/cjs/utils/selection-cell.js +3 -2
  96. package/dist/cjs/utils/split-cell-with-type.js +11 -15
  97. package/dist/cjs/utils/tables.js +13 -13
  98. package/dist/cjs/utils/toggle-header.js +7 -24
  99. package/dist/cjs/utils/transpose.js +39 -0
  100. package/dist/cjs/utils.js +66 -43
  101. package/dist/es2019/add-to-cache.js +4 -0
  102. package/dist/es2019/cell-bookmark.js +1 -1
  103. package/dist/es2019/cell-selection.js +3 -3
  104. package/dist/es2019/compute-map.js +128 -0
  105. package/dist/es2019/find-bad-col-widths.js +46 -0
  106. package/dist/es2019/find-width.js +35 -0
  107. package/dist/es2019/index.js +3 -2
  108. package/dist/es2019/pm-plugins/handle-mouse-down.js +148 -0
  109. package/dist/es2019/pm-plugins/handle-triple-click.js +16 -0
  110. package/dist/es2019/pm-plugins/input.js +2 -155
  111. package/dist/es2019/pm-plugins/table-editing.js +3 -1
  112. package/dist/es2019/pm-plugins.js +9 -1
  113. package/dist/es2019/read-from-cache.js +4 -0
  114. package/dist/es2019/rect.js +11 -0
  115. package/dist/es2019/table-map-cache.js +36 -0
  116. package/dist/es2019/table-map.js +17 -245
  117. package/dist/es2019/utils/add-col-span.js +17 -0
  118. package/dist/es2019/utils/add-column-after.js +16 -0
  119. package/dist/es2019/utils/add-column-at.js +1 -1
  120. package/dist/es2019/utils/add-column-before.js +16 -0
  121. package/dist/es2019/utils/add-column.js +6 -11
  122. package/dist/es2019/utils/add-row-after.js +16 -0
  123. package/dist/es2019/utils/add-row-at.js +2 -70
  124. package/dist/es2019/utils/add-row-before.js +16 -0
  125. package/dist/es2019/utils/analytics-helpers.js +12 -46
  126. package/dist/es2019/utils/array-of-rows.js +1 -0
  127. package/dist/es2019/utils/assert-colspan.js +8 -0
  128. package/dist/es2019/utils/cell-around.js +8 -0
  129. package/dist/es2019/utils/cell-near.js +19 -0
  130. package/dist/es2019/utils/cell-wrapping.js +10 -0
  131. package/dist/es2019/utils/cells.js +21 -38
  132. package/dist/es2019/utils/changed-descendants.js +27 -0
  133. package/dist/es2019/utils/clip-cells.js +75 -0
  134. package/dist/es2019/utils/clone-column.js +2 -2
  135. package/dist/es2019/utils/clone-row-at.js +71 -0
  136. package/dist/es2019/utils/clone-row.js +2 -2
  137. package/dist/es2019/utils/colspan.js +16 -40
  138. package/dist/es2019/utils/column-is-header.js +11 -0
  139. package/dist/es2019/utils/convert-array-of-rows-to-table-node.js +51 -0
  140. package/dist/es2019/utils/convert-table-node-to-array-of-rows.js +48 -0
  141. package/dist/es2019/utils/find-cell-closest-to-pos.js +10 -0
  142. package/dist/es2019/utils/find-cell-rect-closest-to-pos.js +16 -0
  143. package/dist/es2019/utils/find-table-closest-to-pos.js +6 -0
  144. package/dist/es2019/utils/find-table.js +3 -0
  145. package/dist/es2019/utils/find.js +21 -32
  146. package/dist/es2019/utils/fit-slice.js +21 -0
  147. package/dist/es2019/utils/fix-table.js +105 -0
  148. package/dist/es2019/utils/fix-tables.js +2 -133
  149. package/dist/es2019/utils/for-each-cell-in-column.js +20 -0
  150. package/dist/es2019/utils/for-each-cell-in-row.js +18 -0
  151. package/dist/es2019/utils/for-each-cell.js +11 -36
  152. package/dist/es2019/utils/get-cell-type-callback.js +1 -0
  153. package/dist/es2019/utils/get-cells-in-column.js +1 -1
  154. package/dist/es2019/utils/get-cells-in-row.js +1 -1
  155. package/dist/es2019/utils/get-cells-in-table.js +1 -1
  156. package/dist/es2019/utils/get-selected-cell-info.js +28 -0
  157. package/dist/es2019/utils/get-selected-table-info.js +19 -0
  158. package/dist/es2019/utils/get-table-selection-closes-to-pos.js +18 -0
  159. package/dist/es2019/utils/go-to-next-cell.js +1 -1
  160. package/dist/es2019/utils/handle-paste.js +5 -2
  161. package/dist/es2019/utils/in-same-table.js +3 -0
  162. package/dist/es2019/utils/{copy-paste.js → insert-cells.js} +2 -185
  163. package/dist/es2019/utils/is-column-selected.js +17 -0
  164. package/dist/es2019/utils/is-header-enabled-by-type.js +16 -0
  165. package/dist/es2019/utils/is-in-table.js +11 -0
  166. package/dist/es2019/utils/is-rect-selected.js +19 -0
  167. package/dist/es2019/utils/is-row-selected.js +17 -0
  168. package/dist/es2019/utils/is-selected.js +21 -60
  169. package/dist/es2019/utils/is-table-selected.js +17 -0
  170. package/dist/es2019/utils/is-valid-reorder.js +14 -0
  171. package/dist/es2019/utils/move-column.js +2 -2
  172. package/dist/es2019/utils/move-row-in-array-of-rows.js +17 -0
  173. package/dist/es2019/utils/move-row.js +2 -2
  174. package/dist/es2019/utils/move-table-column.js +10 -0
  175. package/dist/es2019/utils/move-table-row.js +8 -0
  176. package/dist/es2019/utils/next-cell.js +7 -0
  177. package/dist/es2019/utils/pasted-cells.js +127 -0
  178. package/dist/es2019/utils/points-at-cell.js +3 -0
  179. package/dist/es2019/utils/remove-col-span.js +17 -0
  180. package/dist/es2019/utils/remove-column-at.js +24 -0
  181. package/dist/es2019/utils/remove-column-closest-to-pos.js +12 -0
  182. package/dist/es2019/utils/remove-column.js +10 -74
  183. package/dist/es2019/utils/remove-row-at.js +24 -0
  184. package/dist/es2019/utils/remove-row-closest-to-pos.js +12 -0
  185. package/dist/es2019/utils/remove-row.js +8 -73
  186. package/dist/es2019/utils/remove-selected-columns.js +43 -0
  187. package/dist/es2019/utils/remove-selected-rows.js +43 -0
  188. package/dist/es2019/utils/reorder-utils.js +40 -178
  189. package/dist/es2019/utils/replace-table.js +2 -2
  190. package/dist/es2019/utils/select-nodes.js +19 -59
  191. package/dist/es2019/utils/select-table-closest-to-pos.js +31 -0
  192. package/dist/es2019/utils/select-table.js +22 -0
  193. package/dist/es2019/utils/selection-cell.js +2 -1
  194. package/dist/es2019/utils/split-cell-with-type.js +5 -11
  195. package/dist/es2019/utils/tables.js +12 -14
  196. package/dist/es2019/utils/toggle-header.js +3 -19
  197. package/dist/es2019/utils/transpose.js +31 -0
  198. package/dist/es2019/utils.js +272 -14
  199. package/dist/esm/add-to-cache.js +4 -0
  200. package/dist/esm/cell-bookmark.js +1 -1
  201. package/dist/esm/cell-selection.js +3 -3
  202. package/dist/esm/compute-map.js +127 -0
  203. package/dist/esm/find-bad-col-widths.js +46 -0
  204. package/dist/esm/find-width.js +35 -0
  205. package/dist/esm/index.js +3 -2
  206. package/dist/esm/pm-plugins/handle-mouse-down.js +148 -0
  207. package/dist/esm/pm-plugins/handle-triple-click.js +14 -0
  208. package/dist/esm/pm-plugins/input.js +2 -153
  209. package/dist/esm/pm-plugins/table-editing.js +3 -1
  210. package/dist/esm/pm-plugins.js +9 -1
  211. package/dist/esm/read-from-cache.js +4 -0
  212. package/dist/esm/rect.js +12 -0
  213. package/dist/esm/table-map-cache.js +42 -0
  214. package/dist/esm/table-map.js +19 -247
  215. package/dist/esm/utils/add-col-span.js +20 -0
  216. package/dist/esm/utils/add-column-after.js +16 -0
  217. package/dist/esm/utils/add-column-at.js +1 -1
  218. package/dist/esm/utils/add-column-before.js +16 -0
  219. package/dist/esm/utils/add-column.js +6 -11
  220. package/dist/esm/utils/add-row-after.js +16 -0
  221. package/dist/esm/utils/add-row-at.js +2 -78
  222. package/dist/esm/utils/add-row-before.js +16 -0
  223. package/dist/esm/utils/analytics-helpers.js +12 -45
  224. package/dist/esm/utils/array-of-rows.js +1 -0
  225. package/dist/esm/utils/assert-colspan.js +8 -0
  226. package/dist/esm/utils/cell-around.js +8 -0
  227. package/dist/esm/utils/cell-near.js +15 -0
  228. package/dist/esm/utils/cell-wrapping.js +10 -0
  229. package/dist/esm/utils/cells.js +21 -34
  230. package/dist/esm/utils/changed-descendants.js +27 -0
  231. package/dist/esm/utils/clip-cells.js +76 -0
  232. package/dist/esm/utils/clone-column.js +2 -2
  233. package/dist/esm/utils/clone-row-at.js +79 -0
  234. package/dist/esm/utils/clone-row.js +2 -2
  235. package/dist/esm/utils/colspan.js +16 -45
  236. package/dist/esm/utils/column-is-header.js +11 -0
  237. package/dist/esm/utils/convert-array-of-rows-to-table-node.js +51 -0
  238. package/dist/esm/utils/convert-table-node-to-array-of-rows.js +48 -0
  239. package/dist/esm/utils/find-cell-closest-to-pos.js +12 -0
  240. package/dist/esm/utils/find-cell-rect-closest-to-pos.js +16 -0
  241. package/dist/esm/utils/find-table-closest-to-pos.js +8 -0
  242. package/dist/esm/utils/find-table.js +7 -0
  243. package/dist/esm/utils/find.js +21 -40
  244. package/dist/esm/utils/fit-slice.js +21 -0
  245. package/dist/esm/utils/fix-table.js +106 -0
  246. package/dist/esm/utils/fix-tables.js +2 -134
  247. package/dist/esm/utils/for-each-cell-in-column.js +22 -0
  248. package/dist/esm/utils/for-each-cell-in-row.js +20 -0
  249. package/dist/esm/utils/for-each-cell.js +11 -40
  250. package/dist/esm/utils/get-cell-type-callback.js +1 -0
  251. package/dist/esm/utils/get-cells-in-column.js +1 -1
  252. package/dist/esm/utils/get-cells-in-row.js +1 -1
  253. package/dist/esm/utils/get-cells-in-table.js +1 -1
  254. package/dist/esm/utils/get-selected-cell-info.js +27 -0
  255. package/dist/esm/utils/get-selected-table-info.js +19 -0
  256. package/dist/esm/utils/get-table-selection-closes-to-pos.js +17 -0
  257. package/dist/esm/utils/go-to-next-cell.js +1 -1
  258. package/dist/esm/utils/handle-paste.js +5 -2
  259. package/dist/esm/utils/in-same-table.js +3 -0
  260. package/dist/esm/utils/{copy-paste.js → insert-cells.js} +9 -187
  261. package/dist/esm/utils/is-column-selected.js +19 -0
  262. package/dist/esm/utils/is-header-enabled-by-type.js +16 -0
  263. package/dist/esm/utils/is-in-table.js +9 -0
  264. package/dist/esm/utils/is-rect-selected.js +21 -0
  265. package/dist/esm/utils/is-row-selected.js +19 -0
  266. package/dist/esm/utils/is-selected.js +21 -66
  267. package/dist/esm/utils/is-table-selected.js +17 -0
  268. package/dist/esm/utils/is-valid-reorder.js +14 -0
  269. package/dist/esm/utils/move-column.js +2 -2
  270. package/dist/esm/utils/move-row-in-array-of-rows.js +17 -0
  271. package/dist/esm/utils/move-row.js +2 -2
  272. package/dist/esm/utils/move-table-column.js +10 -0
  273. package/dist/esm/utils/move-table-row.js +8 -0
  274. package/dist/esm/utils/next-cell.js +7 -0
  275. package/dist/esm/utils/pasted-cells.js +124 -0
  276. package/dist/esm/utils/points-at-cell.js +3 -0
  277. package/dist/esm/utils/remove-col-span.js +22 -0
  278. package/dist/esm/utils/remove-column-at.js +26 -0
  279. package/dist/esm/utils/remove-column-closest-to-pos.js +14 -0
  280. package/dist/esm/utils/remove-column.js +10 -78
  281. package/dist/esm/utils/remove-row-at.js +26 -0
  282. package/dist/esm/utils/remove-row-closest-to-pos.js +14 -0
  283. package/dist/esm/utils/remove-row.js +8 -74
  284. package/dist/esm/utils/remove-selected-columns.js +43 -0
  285. package/dist/esm/utils/remove-selected-rows.js +43 -0
  286. package/dist/esm/utils/reorder-utils.js +40 -180
  287. package/dist/esm/utils/replace-table.js +2 -2
  288. package/dist/esm/utils/select-nodes.js +19 -56
  289. package/dist/esm/utils/select-table-closest-to-pos.js +30 -0
  290. package/dist/esm/utils/select-table.js +21 -0
  291. package/dist/esm/utils/selection-cell.js +2 -1
  292. package/dist/esm/utils/split-cell-with-type.js +5 -11
  293. package/dist/esm/utils/tables.js +12 -12
  294. package/dist/esm/utils/toggle-header.js +3 -19
  295. package/dist/esm/utils/transpose.js +33 -0
  296. package/dist/esm/utils.js +272 -14
  297. package/dist/types/add-to-cache.d.ts +3 -0
  298. package/dist/types/compute-map.d.ts +3 -0
  299. package/dist/types/find-bad-col-widths.d.ts +3 -0
  300. package/dist/types/find-width.d.ts +2 -0
  301. package/dist/types/index.d.ts +3 -2
  302. package/dist/types/pm-plugins/handle-mouse-down.d.ts +2 -0
  303. package/dist/types/pm-plugins/handle-triple-click.d.ts +2 -0
  304. package/dist/types/pm-plugins/input.d.ts +0 -2
  305. package/dist/types/pm-plugins.d.ts +6 -0
  306. package/dist/types/read-from-cache.d.ts +3 -0
  307. package/dist/types/rect.d.ts +7 -0
  308. package/dist/types/table-map-cache.d.ts +6 -0
  309. package/dist/types/table-map.d.ts +13 -7
  310. package/dist/types/utils/add-col-span.d.ts +2 -0
  311. package/dist/types/utils/add-column-after.d.ts +2 -0
  312. package/dist/types/utils/add-column-before.d.ts +2 -0
  313. package/dist/types/utils/add-column.d.ts +2 -3
  314. package/dist/types/utils/add-row-after.d.ts +2 -0
  315. package/dist/types/utils/add-row-at.d.ts +0 -1
  316. package/dist/types/utils/add-row-before.d.ts +2 -0
  317. package/dist/types/utils/analytics-helpers.d.ts +8 -16
  318. package/dist/types/utils/array-of-rows.d.ts +2 -0
  319. package/dist/types/utils/assert-colspan.d.ts +2 -0
  320. package/dist/types/utils/cell-around.d.ts +2 -0
  321. package/dist/types/utils/cell-near.d.ts +2 -0
  322. package/dist/types/utils/cell-wrapping.d.ts +2 -0
  323. package/dist/types/utils/cells.d.ts +16 -7
  324. package/dist/types/utils/changed-descendants.d.ts +2 -0
  325. package/dist/types/utils/clip-cells.d.ts +2 -0
  326. package/dist/types/utils/clone-row-at.d.ts +2 -0
  327. package/dist/types/utils/colspan.d.ts +12 -4
  328. package/dist/types/utils/column-is-header.d.ts +3 -0
  329. package/dist/types/utils/convert-array-of-rows-to-table-node.d.ts +3 -0
  330. package/dist/types/utils/convert-table-node-to-array-of-rows.d.ts +3 -0
  331. package/dist/types/utils/find-cell-closest-to-pos.d.ts +3 -0
  332. package/dist/types/utils/find-cell-rect-closest-to-pos.d.ts +3 -0
  333. package/dist/types/utils/find-table-closest-to-pos.d.ts +3 -0
  334. package/dist/types/utils/find-table.d.ts +3 -0
  335. package/dist/types/utils/find.d.ts +16 -8
  336. package/dist/types/utils/fit-slice.d.ts +2 -0
  337. package/dist/types/utils/fix-table.d.ts +4 -0
  338. package/dist/types/utils/fix-tables.d.ts +0 -2
  339. package/dist/types/utils/for-each-cell-in-column.d.ts +3 -0
  340. package/dist/types/utils/for-each-cell-in-row.d.ts +3 -0
  341. package/dist/types/utils/for-each-cell.d.ts +8 -4
  342. package/dist/types/utils/get-cell-type-callback.d.ts +3 -0
  343. package/dist/types/utils/get-selected-cell-info.d.ts +8 -0
  344. package/dist/types/utils/get-selected-table-info.d.ts +9 -0
  345. package/dist/types/utils/get-selection-rect.d.ts +1 -1
  346. package/dist/types/utils/get-table-selection-closes-to-pos.d.ts +3 -0
  347. package/dist/types/utils/in-same-table.d.ts +2 -0
  348. package/dist/types/utils/insert-cells.d.ts +4 -0
  349. package/dist/types/utils/is-column-selected.d.ts +2 -0
  350. package/dist/types/utils/is-header-enabled-by-type.d.ts +4 -0
  351. package/dist/types/utils/is-in-table.d.ts +2 -0
  352. package/dist/types/utils/is-rect-selected.d.ts +3 -0
  353. package/dist/types/utils/is-row-selected.d.ts +2 -0
  354. package/dist/types/utils/is-selected.d.ts +16 -6
  355. package/dist/types/utils/is-table-selected.d.ts +2 -0
  356. package/dist/types/utils/is-valid-reorder.d.ts +1 -0
  357. package/dist/types/utils/move-row-in-array-of-rows.d.ts +2 -0
  358. package/dist/types/utils/move-table-column.d.ts +3 -0
  359. package/dist/types/utils/move-table-row.d.ts +3 -0
  360. package/dist/types/utils/next-cell.d.ts +3 -0
  361. package/dist/types/utils/pasted-cells.d.ts +3 -0
  362. package/dist/types/utils/points-at-cell.d.ts +2 -0
  363. package/dist/types/utils/remove-col-span.d.ts +2 -0
  364. package/dist/types/utils/remove-column-at.d.ts +2 -0
  365. package/dist/types/utils/remove-column-closest-to-pos.d.ts +3 -0
  366. package/dist/types/utils/remove-column.d.ts +5 -4
  367. package/dist/types/utils/remove-row-at.d.ts +2 -0
  368. package/dist/types/utils/remove-row-closest-to-pos.d.ts +3 -0
  369. package/dist/types/utils/remove-row.d.ts +5 -4
  370. package/dist/types/utils/remove-selected-columns.d.ts +2 -0
  371. package/dist/types/utils/remove-selected-rows.d.ts +2 -0
  372. package/dist/types/utils/reorder-utils.d.ts +32 -10
  373. package/dist/types/utils/select-nodes.d.ts +12 -5
  374. package/dist/types/utils/select-table-closest-to-pos.d.ts +3 -0
  375. package/dist/types/utils/select-table.d.ts +2 -0
  376. package/dist/types/utils/selection-rect.d.ts +2 -1
  377. package/dist/types/utils/split-cell-with-type.d.ts +3 -5
  378. package/dist/types/utils/tables.d.ts +8 -4
  379. package/dist/types/utils/toggle-header.d.ts +0 -3
  380. package/dist/types/utils/transpose.d.ts +1 -0
  381. package/dist/types/utils.d.ts +201 -13
  382. package/find-bad-col-widths/package.json +8 -0
  383. package/find-width/package.json +8 -0
  384. package/get-table-selection-closes-to-pos/package.json +8 -0
  385. package/package.json +3 -3
  386. package/pm-plugins/plugin-key/package.json +4 -4
  387. package/pm-plugins/table-editing/package.json +4 -4
  388. package/rect/package.json +8 -0
  389. package/select-table/package.json +8 -0
  390. package/select-table-closest-to-pos/package.json +8 -0
  391. package/table-map/package.json +4 -4
  392. package/types/package.json +4 -4
  393. package/utils/add-column/package.json +4 -4
  394. package/utils/add-column-at/package.json +4 -4
  395. package/utils/add-row/package.json +4 -4
  396. package/utils/add-row-at/package.json +4 -4
  397. package/utils/analytics-helpers/package.json +4 -4
  398. package/utils/cells/package.json +4 -4
  399. package/utils/clone-column/package.json +4 -4
  400. package/utils/clone-row/package.json +4 -4
  401. package/utils/clone-tr/package.json +4 -4
  402. package/utils/colspan/package.json +4 -4
  403. package/utils/create-table/package.json +4 -4
  404. package/utils/draw-cell-selection/package.json +4 -4
  405. package/utils/empty-cells/package.json +4 -4
  406. package/utils/find/package.json +4 -4
  407. package/utils/fix-tables/package.json +4 -4
  408. package/utils/for-each-cell/package.json +4 -4
  409. package/utils/get-cell-selection-ranges/package.json +4 -4
  410. package/utils/get-cells-in-column/package.json +4 -4
  411. package/utils/get-cells-in-row/package.json +4 -4
  412. package/utils/get-cells-in-table/package.json +4 -4
  413. package/utils/get-selection-range-in-column/package.json +4 -4
  414. package/utils/get-selection-range-in-row/package.json +4 -4
  415. package/utils/get-selection-rect/package.json +4 -4
  416. package/utils/go-to-next-cell/package.json +4 -4
  417. package/utils/handle-paste/package.json +4 -4
  418. package/utils/is-selected/package.json +4 -4
  419. package/utils/is-selection-type/package.json +4 -4
  420. package/utils/move-column/package.json +4 -4
  421. package/utils/move-row/package.json +4 -4
  422. package/utils/normalize-selection/package.json +4 -4
  423. package/utils/remove-column/package.json +4 -4
  424. package/utils/remove-row/package.json +4 -4
  425. package/utils/remove-table/package.json +4 -4
  426. package/utils/reorder-utils/package.json +4 -4
  427. package/utils/replace-table/package.json +4 -4
  428. package/utils/select-nodes/package.json +4 -4
  429. package/utils/selection-cell/package.json +4 -4
  430. package/utils/selection-rect/package.json +4 -4
  431. package/utils/set-cell-attrs/package.json +4 -4
  432. package/utils/split-cell/package.json +4 -4
  433. package/utils/split-cell-with-type/package.json +4 -4
  434. package/utils/table-node-types/package.json +4 -4
  435. package/utils/tables/package.json +4 -4
  436. package/utils/toggle-header/package.json +4 -4
  437. package/utils/uuid/package.json +4 -4
  438. package/afm-cc/tsconfig.json +0 -35
  439. package/dist/cjs/entry-points/cell-bookmark.js +0 -12
  440. package/dist/cjs/entry-points/cell-selection.js +0 -12
  441. package/dist/cjs/entry-points/pm-plugins-plugin-key.js +0 -12
  442. package/dist/cjs/entry-points/pm-plugins-table-editing.js +0 -12
  443. package/dist/cjs/entry-points/table-map.js +0 -30
  444. package/dist/cjs/entry-points/types.js +0 -1
  445. package/dist/cjs/entry-points/utils-add-column-at.js +0 -12
  446. package/dist/cjs/entry-points/utils-add-column.js +0 -18
  447. package/dist/cjs/entry-points/utils-add-row-at.js +0 -12
  448. package/dist/cjs/entry-points/utils-add-row.js +0 -12
  449. package/dist/cjs/entry-points/utils-analytics-helpers.js +0 -18
  450. package/dist/cjs/entry-points/utils-cells.js +0 -30
  451. package/dist/cjs/entry-points/utils-clone-column.js +0 -12
  452. package/dist/cjs/entry-points/utils-clone-row.js +0 -12
  453. package/dist/cjs/entry-points/utils-clone-tr.js +0 -12
  454. package/dist/cjs/entry-points/utils-colspan.js +0 -18
  455. package/dist/cjs/entry-points/utils-create-table.js +0 -12
  456. package/dist/cjs/entry-points/utils-draw-cell-selection.js +0 -12
  457. package/dist/cjs/entry-points/utils-empty-cells.js +0 -12
  458. package/dist/cjs/entry-points/utils-find.js +0 -30
  459. package/dist/cjs/entry-points/utils-fix-tables.js +0 -12
  460. package/dist/cjs/entry-points/utils-for-each-cell.js +0 -18
  461. package/dist/cjs/entry-points/utils-get-cell-selection-ranges.js +0 -12
  462. package/dist/cjs/entry-points/utils-get-cells-in-column.js +0 -12
  463. package/dist/cjs/entry-points/utils-get-cells-in-row.js +0 -12
  464. package/dist/cjs/entry-points/utils-get-cells-in-table.js +0 -12
  465. package/dist/cjs/entry-points/utils-get-selection-range-in-column.js +0 -12
  466. package/dist/cjs/entry-points/utils-get-selection-range-in-row.js +0 -12
  467. package/dist/cjs/entry-points/utils-get-selection-rect.js +0 -12
  468. package/dist/cjs/entry-points/utils-go-to-next-cell.js +0 -12
  469. package/dist/cjs/entry-points/utils-handle-paste.js +0 -12
  470. package/dist/cjs/entry-points/utils-is-selected.js +0 -30
  471. package/dist/cjs/entry-points/utils-is-selection-type.js +0 -12
  472. package/dist/cjs/entry-points/utils-move-column.js +0 -12
  473. package/dist/cjs/entry-points/utils-move-row.js +0 -12
  474. package/dist/cjs/entry-points/utils-normalize-selection.js +0 -12
  475. package/dist/cjs/entry-points/utils-remove-column.js +0 -24
  476. package/dist/cjs/entry-points/utils-remove-row.js +0 -24
  477. package/dist/cjs/entry-points/utils-remove-table.js +0 -12
  478. package/dist/cjs/entry-points/utils-reorder-utils.js +0 -18
  479. package/dist/cjs/entry-points/utils-replace-table.js +0 -12
  480. package/dist/cjs/entry-points/utils-select-nodes.js +0 -48
  481. package/dist/cjs/entry-points/utils-selection-cell.js +0 -12
  482. package/dist/cjs/entry-points/utils-selection-rect.js +0 -12
  483. package/dist/cjs/entry-points/utils-set-cell-attrs.js +0 -12
  484. package/dist/cjs/entry-points/utils-split-cell-with-type.js +0 -18
  485. package/dist/cjs/entry-points/utils-split-cell.js +0 -12
  486. package/dist/cjs/entry-points/utils-table-node-types.js +0 -12
  487. package/dist/cjs/entry-points/utils-tables.js +0 -18
  488. package/dist/cjs/entry-points/utils-toggle-header.js +0 -12
  489. package/dist/cjs/entry-points/utils-uuid.js +0 -12
  490. package/dist/cjs/utils/test-utils.js +0 -61
  491. package/dist/es2019/entry-points/cell-bookmark.js +0 -2
  492. package/dist/es2019/entry-points/cell-selection.js +0 -2
  493. package/dist/es2019/entry-points/pm-plugins-plugin-key.js +0 -2
  494. package/dist/es2019/entry-points/pm-plugins-table-editing.js +0 -2
  495. package/dist/es2019/entry-points/table-map.js +0 -2
  496. package/dist/es2019/entry-points/types.js +0 -0
  497. package/dist/es2019/entry-points/utils-add-column-at.js +0 -2
  498. package/dist/es2019/entry-points/utils-add-column.js +0 -2
  499. package/dist/es2019/entry-points/utils-add-row-at.js +0 -2
  500. package/dist/es2019/entry-points/utils-add-row.js +0 -2
  501. package/dist/es2019/entry-points/utils-analytics-helpers.js +0 -2
  502. package/dist/es2019/entry-points/utils-cells.js +0 -2
  503. package/dist/es2019/entry-points/utils-clone-column.js +0 -2
  504. package/dist/es2019/entry-points/utils-clone-row.js +0 -2
  505. package/dist/es2019/entry-points/utils-clone-tr.js +0 -2
  506. package/dist/es2019/entry-points/utils-colspan.js +0 -2
  507. package/dist/es2019/entry-points/utils-create-table.js +0 -2
  508. package/dist/es2019/entry-points/utils-draw-cell-selection.js +0 -2
  509. package/dist/es2019/entry-points/utils-empty-cells.js +0 -2
  510. package/dist/es2019/entry-points/utils-find.js +0 -2
  511. package/dist/es2019/entry-points/utils-fix-tables.js +0 -2
  512. package/dist/es2019/entry-points/utils-for-each-cell.js +0 -2
  513. package/dist/es2019/entry-points/utils-get-cell-selection-ranges.js +0 -2
  514. package/dist/es2019/entry-points/utils-get-cells-in-column.js +0 -2
  515. package/dist/es2019/entry-points/utils-get-cells-in-row.js +0 -2
  516. package/dist/es2019/entry-points/utils-get-cells-in-table.js +0 -2
  517. package/dist/es2019/entry-points/utils-get-selection-range-in-column.js +0 -2
  518. package/dist/es2019/entry-points/utils-get-selection-range-in-row.js +0 -2
  519. package/dist/es2019/entry-points/utils-get-selection-rect.js +0 -2
  520. package/dist/es2019/entry-points/utils-go-to-next-cell.js +0 -2
  521. package/dist/es2019/entry-points/utils-handle-paste.js +0 -2
  522. package/dist/es2019/entry-points/utils-is-selected.js +0 -2
  523. package/dist/es2019/entry-points/utils-is-selection-type.js +0 -2
  524. package/dist/es2019/entry-points/utils-move-column.js +0 -2
  525. package/dist/es2019/entry-points/utils-move-row.js +0 -2
  526. package/dist/es2019/entry-points/utils-normalize-selection.js +0 -2
  527. package/dist/es2019/entry-points/utils-remove-column.js +0 -2
  528. package/dist/es2019/entry-points/utils-remove-row.js +0 -2
  529. package/dist/es2019/entry-points/utils-remove-table.js +0 -2
  530. package/dist/es2019/entry-points/utils-reorder-utils.js +0 -2
  531. package/dist/es2019/entry-points/utils-replace-table.js +0 -2
  532. package/dist/es2019/entry-points/utils-select-nodes.js +0 -2
  533. package/dist/es2019/entry-points/utils-selection-cell.js +0 -2
  534. package/dist/es2019/entry-points/utils-selection-rect.js +0 -2
  535. package/dist/es2019/entry-points/utils-set-cell-attrs.js +0 -2
  536. package/dist/es2019/entry-points/utils-split-cell-with-type.js +0 -2
  537. package/dist/es2019/entry-points/utils-split-cell.js +0 -2
  538. package/dist/es2019/entry-points/utils-table-node-types.js +0 -2
  539. package/dist/es2019/entry-points/utils-tables.js +0 -2
  540. package/dist/es2019/entry-points/utils-toggle-header.js +0 -2
  541. package/dist/es2019/entry-points/utils-uuid.js +0 -2
  542. package/dist/es2019/utils/test-utils.js +0 -56
  543. package/dist/esm/entry-points/cell-bookmark.js +0 -2
  544. package/dist/esm/entry-points/cell-selection.js +0 -2
  545. package/dist/esm/entry-points/pm-plugins-plugin-key.js +0 -2
  546. package/dist/esm/entry-points/pm-plugins-table-editing.js +0 -2
  547. package/dist/esm/entry-points/table-map.js +0 -2
  548. package/dist/esm/entry-points/types.js +0 -0
  549. package/dist/esm/entry-points/utils-add-column-at.js +0 -2
  550. package/dist/esm/entry-points/utils-add-column.js +0 -2
  551. package/dist/esm/entry-points/utils-add-row-at.js +0 -2
  552. package/dist/esm/entry-points/utils-add-row.js +0 -2
  553. package/dist/esm/entry-points/utils-analytics-helpers.js +0 -2
  554. package/dist/esm/entry-points/utils-cells.js +0 -2
  555. package/dist/esm/entry-points/utils-clone-column.js +0 -2
  556. package/dist/esm/entry-points/utils-clone-row.js +0 -2
  557. package/dist/esm/entry-points/utils-clone-tr.js +0 -2
  558. package/dist/esm/entry-points/utils-colspan.js +0 -2
  559. package/dist/esm/entry-points/utils-create-table.js +0 -2
  560. package/dist/esm/entry-points/utils-draw-cell-selection.js +0 -2
  561. package/dist/esm/entry-points/utils-empty-cells.js +0 -2
  562. package/dist/esm/entry-points/utils-find.js +0 -2
  563. package/dist/esm/entry-points/utils-fix-tables.js +0 -2
  564. package/dist/esm/entry-points/utils-for-each-cell.js +0 -2
  565. package/dist/esm/entry-points/utils-get-cell-selection-ranges.js +0 -2
  566. package/dist/esm/entry-points/utils-get-cells-in-column.js +0 -2
  567. package/dist/esm/entry-points/utils-get-cells-in-row.js +0 -2
  568. package/dist/esm/entry-points/utils-get-cells-in-table.js +0 -2
  569. package/dist/esm/entry-points/utils-get-selection-range-in-column.js +0 -2
  570. package/dist/esm/entry-points/utils-get-selection-range-in-row.js +0 -2
  571. package/dist/esm/entry-points/utils-get-selection-rect.js +0 -2
  572. package/dist/esm/entry-points/utils-go-to-next-cell.js +0 -2
  573. package/dist/esm/entry-points/utils-handle-paste.js +0 -2
  574. package/dist/esm/entry-points/utils-is-selected.js +0 -2
  575. package/dist/esm/entry-points/utils-is-selection-type.js +0 -2
  576. package/dist/esm/entry-points/utils-move-column.js +0 -2
  577. package/dist/esm/entry-points/utils-move-row.js +0 -2
  578. package/dist/esm/entry-points/utils-normalize-selection.js +0 -2
  579. package/dist/esm/entry-points/utils-remove-column.js +0 -2
  580. package/dist/esm/entry-points/utils-remove-row.js +0 -2
  581. package/dist/esm/entry-points/utils-remove-table.js +0 -2
  582. package/dist/esm/entry-points/utils-reorder-utils.js +0 -2
  583. package/dist/esm/entry-points/utils-replace-table.js +0 -2
  584. package/dist/esm/entry-points/utils-select-nodes.js +0 -2
  585. package/dist/esm/entry-points/utils-selection-cell.js +0 -2
  586. package/dist/esm/entry-points/utils-selection-rect.js +0 -2
  587. package/dist/esm/entry-points/utils-set-cell-attrs.js +0 -2
  588. package/dist/esm/entry-points/utils-split-cell-with-type.js +0 -2
  589. package/dist/esm/entry-points/utils-split-cell.js +0 -2
  590. package/dist/esm/entry-points/utils-table-node-types.js +0 -2
  591. package/dist/esm/entry-points/utils-tables.js +0 -2
  592. package/dist/esm/entry-points/utils-toggle-header.js +0 -2
  593. package/dist/esm/entry-points/utils-uuid.js +0 -2
  594. package/dist/esm/utils/test-utils.js +0 -56
  595. package/dist/types/entry-points/cell-bookmark.d.ts +0 -1
  596. package/dist/types/entry-points/cell-selection.d.ts +0 -1
  597. package/dist/types/entry-points/pm-plugins-plugin-key.d.ts +0 -1
  598. package/dist/types/entry-points/pm-plugins-table-editing.d.ts +0 -1
  599. package/dist/types/entry-points/table-map.d.ts +0 -2
  600. package/dist/types/entry-points/types.d.ts +0 -1
  601. package/dist/types/entry-points/utils-add-column-at.d.ts +0 -1
  602. package/dist/types/entry-points/utils-add-column.d.ts +0 -1
  603. package/dist/types/entry-points/utils-add-row-at.d.ts +0 -1
  604. package/dist/types/entry-points/utils-add-row.d.ts +0 -1
  605. package/dist/types/entry-points/utils-analytics-helpers.d.ts +0 -1
  606. package/dist/types/entry-points/utils-cells.d.ts +0 -1
  607. package/dist/types/entry-points/utils-clone-column.d.ts +0 -1
  608. package/dist/types/entry-points/utils-clone-row.d.ts +0 -1
  609. package/dist/types/entry-points/utils-clone-tr.d.ts +0 -1
  610. package/dist/types/entry-points/utils-colspan.d.ts +0 -1
  611. package/dist/types/entry-points/utils-create-table.d.ts +0 -1
  612. package/dist/types/entry-points/utils-draw-cell-selection.d.ts +0 -1
  613. package/dist/types/entry-points/utils-empty-cells.d.ts +0 -1
  614. package/dist/types/entry-points/utils-find.d.ts +0 -1
  615. package/dist/types/entry-points/utils-fix-tables.d.ts +0 -1
  616. package/dist/types/entry-points/utils-for-each-cell.d.ts +0 -1
  617. package/dist/types/entry-points/utils-get-cell-selection-ranges.d.ts +0 -1
  618. package/dist/types/entry-points/utils-get-cells-in-column.d.ts +0 -1
  619. package/dist/types/entry-points/utils-get-cells-in-row.d.ts +0 -1
  620. package/dist/types/entry-points/utils-get-cells-in-table.d.ts +0 -1
  621. package/dist/types/entry-points/utils-get-selection-range-in-column.d.ts +0 -1
  622. package/dist/types/entry-points/utils-get-selection-range-in-row.d.ts +0 -1
  623. package/dist/types/entry-points/utils-get-selection-rect.d.ts +0 -1
  624. package/dist/types/entry-points/utils-go-to-next-cell.d.ts +0 -1
  625. package/dist/types/entry-points/utils-handle-paste.d.ts +0 -1
  626. package/dist/types/entry-points/utils-is-selected.d.ts +0 -1
  627. package/dist/types/entry-points/utils-is-selection-type.d.ts +0 -1
  628. package/dist/types/entry-points/utils-move-column.d.ts +0 -1
  629. package/dist/types/entry-points/utils-move-row.d.ts +0 -1
  630. package/dist/types/entry-points/utils-normalize-selection.d.ts +0 -1
  631. package/dist/types/entry-points/utils-remove-column.d.ts +0 -1
  632. package/dist/types/entry-points/utils-remove-row.d.ts +0 -1
  633. package/dist/types/entry-points/utils-remove-table.d.ts +0 -1
  634. package/dist/types/entry-points/utils-reorder-utils.d.ts +0 -1
  635. package/dist/types/entry-points/utils-replace-table.d.ts +0 -1
  636. package/dist/types/entry-points/utils-select-nodes.d.ts +0 -1
  637. package/dist/types/entry-points/utils-selection-cell.d.ts +0 -1
  638. package/dist/types/entry-points/utils-selection-rect.d.ts +0 -2
  639. package/dist/types/entry-points/utils-set-cell-attrs.d.ts +0 -1
  640. package/dist/types/entry-points/utils-split-cell-with-type.d.ts +0 -1
  641. package/dist/types/entry-points/utils-split-cell.d.ts +0 -1
  642. package/dist/types/entry-points/utils-table-node-types.d.ts +0 -1
  643. package/dist/types/entry-points/utils-tables.d.ts +0 -1
  644. package/dist/types/entry-points/utils-toggle-header.d.ts +0 -1
  645. package/dist/types/entry-points/utils-uuid.d.ts +0 -1
  646. package/dist/types/utils/copy-paste.d.ts +0 -9
  647. package/dist/types/utils/test-utils.d.ts +0 -5
@@ -0,0 +1,27 @@
1
+ // Helper for iterating through the nodes in a document that changed
2
+ // compared to the given previous document. Useful for avoiding
3
+ // duplicate work on each transaction.
4
+ export function changedDescendants(old, cur, offsetStart, f) {
5
+ let offset = offsetStart;
6
+ const oldSize = old.childCount;
7
+ const curSize = cur.childCount;
8
+ // eslint-disable-next-line no-labels
9
+ outer: for (let i = 0, j = 0; i < curSize; i++) {
10
+ const child = cur.child(i);
11
+ for (let scan = j, e = Math.min(oldSize, i + 3); scan < e; scan++) {
12
+ if (old.child(scan) === child) {
13
+ j = scan + 1;
14
+ offset += child.nodeSize;
15
+ // eslint-disable-next-line no-continue, no-labels
16
+ continue outer;
17
+ }
18
+ }
19
+ f(child, offset);
20
+ if (j < oldSize && old.child(j).sameMarkup(child)) {
21
+ changedDescendants(old.child(j), child, offset + 1, f);
22
+ } else {
23
+ child.nodesBetween(0, child.content.size, f, offset + 1);
24
+ }
25
+ offset += child.nodeSize;
26
+ }
27
+ }
@@ -0,0 +1,75 @@
1
+ // Utilities used for copy/paste handling.
2
+ //
3
+ // This module handles pasting cell content into tables, or pasting
4
+ // anything into a cell selection, as replacing a block of cells with
5
+ // the content of the selection. When pasting cells into a cell, that
6
+ // involves placing the block of pasted content so that its top left
7
+ // aligns with the selection cell, optionally extending the table to
8
+ // the right or bottom to make sure it is large enough. Pasting into a
9
+ // cell selection is different, here the cells in the selection are
10
+ // clipped to the selection's rectangle, optionally repeating the
11
+ // pasted cells when they are smaller than the selection.
12
+
13
+ import { Fragment } from '@atlaskit/editor-prosemirror/model';
14
+ import { removeColSpan } from './remove-col-span';
15
+
16
+ // : ({width: number, height: number, rows: [Fragment]}, number, number) → {width: number, height: number, rows: [Fragment]}
17
+ // Clip or extend (repeat) the given set of cells to cover the given
18
+ // width and height. Will clip rowspan/colspan cells at the edges when
19
+ // they stick out.
20
+ export function clipCells({
21
+ width: currentWidth,
22
+ height: currentHeight,
23
+ rows: currentRows
24
+ }, newWidth, newHeight) {
25
+ let rows = currentRows;
26
+ let width = currentWidth;
27
+ let height = currentHeight;
28
+ if (width !== newWidth) {
29
+ const added = [];
30
+ const newRows = [];
31
+ for (let row = 0; row < rows.length; row++) {
32
+ const frag = rows[row];
33
+ const cells = [];
34
+ for (let col = added[row] || 0, i = 0; col < newWidth; i++) {
35
+ let cell = frag.child(i % frag.childCount);
36
+ if (col + cell.attrs.colspan > newWidth) {
37
+ cell = cell.type.create(removeColSpan(cell.attrs, cell.attrs.colspan, col + cell.attrs.colspan - newWidth), cell.content);
38
+ }
39
+ cells.push(cell);
40
+ col += cell.attrs.colspan;
41
+ for (let j = 1; j < cell.attrs.rowspan; j++) {
42
+ added[row + j] = (added[row + j] || 0) + cell.attrs.colspan;
43
+ }
44
+ }
45
+ newRows.push(Fragment.from(cells));
46
+ }
47
+ rows = newRows;
48
+ width = newWidth;
49
+ }
50
+ if (height !== newHeight) {
51
+ const newRows = [];
52
+ for (let row = 0, i = 0; row < newHeight; row++, i++) {
53
+ const cells = [];
54
+ const source = rows[i % height];
55
+ for (let j = 0; j < source.childCount; j++) {
56
+ let cell = source.child(j);
57
+ if (row + cell.attrs.rowspan > newHeight) {
58
+ cell = cell.type.create({
59
+ ...cell.attrs,
60
+ rowspan: Math.max(1, newHeight - cell.attrs.rowspan)
61
+ }, cell.content);
62
+ }
63
+ cells.push(cell);
64
+ }
65
+ newRows.push(Fragment.from(cells));
66
+ }
67
+ rows = newRows;
68
+ height = newHeight;
69
+ }
70
+ return {
71
+ width,
72
+ height,
73
+ rows
74
+ };
75
+ }
@@ -2,9 +2,9 @@ import { CellSelection } from '../cell-selection';
2
2
  import { TableMap } from '../table-map';
3
3
  import { determineTableHeaderStateFromTableNode } from './analyse-table';
4
4
  import { cloneTr } from './clone-tr';
5
- import { findTable } from './find';
5
+ import { findTable } from './find-table';
6
6
  import { getSelectionRangeInColumn } from './get-selection-range-in-column';
7
- import { isValidReorder } from './reorder-utils';
7
+ import { isValidReorder } from './is-valid-reorder';
8
8
  import { tableNodeTypes } from './table-node-types';
9
9
  function normalizeDirection(targetDirection, options) {
10
10
  var _options$direction;
@@ -0,0 +1,71 @@
1
+ import { safeInsert } from '@atlaskit/editor-prosemirror/utils';
2
+ import { TableMap } from '../table-map';
3
+ import { findTable } from './find-table';
4
+ import { getCellsInRow } from './get-cells-in-row';
5
+ import { setCellAttrs } from './set-cell-attrs';
6
+ import { tableNodeTypes } from './table-node-types';
7
+ const filterCellsInRow = (rowIndex, predicate) => tr => {
8
+ const foundCells = [];
9
+ const cells = getCellsInRow(rowIndex)(tr.selection);
10
+ if (cells) {
11
+ for (let j = cells.length - 1; j >= 0; j--) {
12
+ if (predicate(cells[j], tr)) {
13
+ foundCells.push(cells[j]);
14
+ }
15
+ }
16
+ }
17
+ return foundCells;
18
+ };
19
+
20
+ // Returns a new transaction that adds a new row after `cloneRowIndex`, cloning the row attributes at `cloneRowIndex`.
21
+ export const cloneRowAt = rowIndex => tr => {
22
+ const table = findTable(tr.selection);
23
+ if (table) {
24
+ const map = TableMap.get(table.node);
25
+ if (rowIndex >= 0 && rowIndex <= map.height) {
26
+ const tableNode = table.node;
27
+ const tableNodes = tableNodeTypes(tableNode.type.schema);
28
+ let rowPos = table.start;
29
+ for (let i = 0; i < rowIndex + 1; i++) {
30
+ rowPos += tableNode.child(i).nodeSize;
31
+ }
32
+ const cloneRow = tableNode.child(rowIndex);
33
+ // Re-create the same nodes with same attrs, dropping the node content.
34
+ const cells = [];
35
+ let rowWidth = 0;
36
+ cloneRow.forEach(cell => {
37
+ // If we're copying a row with rowspan somewhere, we dont want to copy that cell
38
+ // We'll increment its span below.
39
+ if (cell.attrs.rowspan === 1) {
40
+ rowWidth += cell.attrs.colspan;
41
+ const node = tableNodes[cell.type.spec.tableRole].createAndFill(cell.attrs, [], cell.marks);
42
+ if (node) {
43
+ cells.push(node);
44
+ }
45
+ }
46
+ });
47
+
48
+ // If a higher row spans past our clone row, bump the higher row to cover this new row too.
49
+ if (rowWidth < map.width) {
50
+ const rowSpanCells = [];
51
+ for (let i = rowIndex; i >= 0; i--) {
52
+ const foundCells = filterCellsInRow(i, (cell, _tr) => {
53
+ const rowspan = cell.node.attrs.rowspan;
54
+ const spanRange = i + rowspan;
55
+ return rowspan > 1 && spanRange > rowIndex;
56
+ })(tr);
57
+ rowSpanCells.push(...foundCells);
58
+ }
59
+ if (rowSpanCells.length) {
60
+ rowSpanCells.forEach(cell => {
61
+ tr = setCellAttrs(cell, {
62
+ rowspan: cell.node.attrs.rowspan + 1
63
+ })(tr);
64
+ });
65
+ }
66
+ }
67
+ return safeInsert(tableNodes.row.create(cloneRow.attrs, cells), rowPos)(tr);
68
+ }
69
+ }
70
+ return tr;
71
+ };
@@ -2,9 +2,9 @@ import { CellSelection } from '../cell-selection';
2
2
  import { TableMap } from '../table-map';
3
3
  import { determineTableHeaderStateFromTableNode } from './analyse-table';
4
4
  import { cloneTr } from './clone-tr';
5
- import { findTable } from './find';
5
+ import { findTable } from './find-table';
6
6
  import { getSelectionRangeInRow } from './get-selection-range-in-row';
7
- import { isValidReorder } from './reorder-utils';
7
+ import { isValidReorder } from './is-valid-reorder';
8
8
  import { tableNodeTypes } from './table-node-types';
9
9
  function normalizeDirection(targetDirection, options) {
10
10
  var _options$direction;
@@ -1,41 +1,17 @@
1
- export function removeColSpan(attrs, pos, n = 1) {
2
- if (!attrs.colspan) {
3
- throw new Error('removeColSpan(): attrs.colspan not defined');
4
- }
5
- const result = {
6
- ...attrs,
7
- colspan: attrs.colspan - n
8
- };
9
- if (result.colwidth) {
10
- result.colwidth = result.colwidth.slice();
11
- result.colwidth.splice(pos, n);
12
- if (!result.colwidth.some(w => w > 0)) {
13
- result.colwidth = undefined;
14
- }
15
- }
16
- return result;
17
- }
18
- export function assertColspan(attrs) {
19
- if (typeof attrs.colspan === 'undefined') {
20
- throw new Error('addColSpan: attrs.colspan is not defined');
21
- }
22
- if (typeof attrs.colspan !== 'number' || Number.isNaN(attrs.colspan) || attrs.colspan < 1) {
23
- throw new Error(`addColSpan: attrs.colspan must be number >= 1, received: ${attrs.colspan}`);
24
- }
25
- }
1
+ /* eslint-disable @repo/internal/deprecations/deprecation-ticket-required -- VOLTC-139 tracks removal of these deprecated re-export shims. */
26
2
 
27
- // TODO: ED-26961 - replace "addColSpan" from table plugin with this function
28
- export function addColSpan(attrs, pos, n = 1) {
29
- assertColspan(attrs);
30
- const result = {
31
- ...attrs,
32
- colspan: attrs.colspan + n
33
- };
34
- if (result.colwidth) {
35
- result.colwidth = result.colwidth.slice();
36
- for (let i = 0; i < n; i++) {
37
- result.colwidth.splice(pos, 0, 0);
38
- }
39
- }
40
- return result;
41
- }
3
+ /**
4
+ * @deprecated Use `import { removeColSpan } from '@atlaskit/editor-tables/utils'` instead.
5
+ */
6
+ // eslint-disable-next-line @atlaskit/editor/no-re-export -- Compatibility shim for deprecated API
7
+ export { removeColSpan } from './remove-col-span';
8
+ /**
9
+ * @deprecated Use `import { assertColspan } from '@atlaskit/editor-tables/utils/colspan'` instead.
10
+ */
11
+ // eslint-disable-next-line @atlaskit/editor/no-re-export -- Compatibility shim for deprecated API
12
+ export { assertColspan } from './assert-colspan';
13
+ /**
14
+ * @deprecated Use `import { addColSpan } from '@atlaskit/editor-tables/utils'` instead.
15
+ */
16
+ // eslint-disable-next-line @atlaskit/editor/no-re-export -- Compatibility shim for deprecated API
17
+ export { addColSpan } from './add-col-span';
@@ -0,0 +1,11 @@
1
+ import { tableNodeTypes } from './table-node-types';
2
+ export function columnIsHeader(map, table, col) {
3
+ const headerCell = tableNodeTypes(table.type.schema).header_cell;
4
+ for (let row = 0; row < map.height; row++) {
5
+ const cell = table.nodeAt(map.map[col + row * map.width]);
6
+ if (cell && cell.type !== headerCell) {
7
+ return false;
8
+ }
9
+ }
10
+ return true;
11
+ }
@@ -0,0 +1,51 @@
1
+ import { TableMap } from '../table-map';
2
+ // :: (tableNode: Node, tableArray: Array<Node>) -> Node
3
+ // This function will transform a matrix of nodes
4
+ // into table node respecting merged cells and rows configurations,
5
+ // for example this array will be convert to the table below:
6
+ //
7
+ // ```javascript
8
+ // array = [
9
+ // [A1, B1, C1, null],
10
+ // [A2, B2, null, D1],
11
+ // [A3. B3, C2, null],
12
+ // ]
13
+ // ```
14
+ //
15
+ // ```
16
+ // ____________________________
17
+ // | | | |
18
+ // | A1 | B1 | C1 |
19
+ // |______|______|______ ______|
20
+ // | | | |
21
+ // | A2 | B2 | |
22
+ // |______|______ ______| |
23
+ // | | | | D1 |
24
+ // | A3 | B3 | C2 | |
25
+ // |______|______|______|______|
26
+ // ```
27
+ //
28
+ export const convertArrayOfRowsToTableNode = (tableNode, arrayOfNodes) => {
29
+ const rowsPM = [];
30
+ const map = TableMap.get(tableNode);
31
+ for (let rowIndex = 0; rowIndex < map.height; rowIndex++) {
32
+ const row = tableNode.child(rowIndex);
33
+ const rowCells = [];
34
+ for (let colIndex = 0; colIndex < map.width; colIndex++) {
35
+ if (!arrayOfNodes[rowIndex][colIndex]) {
36
+ continue;
37
+ }
38
+ const cellPos = map.map[rowIndex * map.width + colIndex];
39
+ const cell = arrayOfNodes[rowIndex][colIndex];
40
+ const oldCell = tableNode.nodeAt(cellPos);
41
+ if (!cell || !oldCell) {
42
+ continue;
43
+ }
44
+ const newCell = oldCell.type.createChecked(Object.assign({}, cell.attrs), cell.content, cell.marks);
45
+ rowCells.push(newCell);
46
+ }
47
+ rowsPM.push(row.type.createChecked(row.attrs, rowCells, row.marks));
48
+ }
49
+ const newTable = tableNode.type.createChecked(tableNode.attrs, rowsPM, tableNode.marks);
50
+ return newTable;
51
+ };
@@ -0,0 +1,48 @@
1
+ import { TableMap } from '../table-map';
2
+ // :: (tableNode: Node) -> Array<Node>
3
+ // This function will transform the table node
4
+ // into a matrix of rows and columns respecting merged cells,
5
+ // for example this table will be convert to the below:
6
+ //
7
+ // ```
8
+ // ____________________________
9
+ // | | | |
10
+ // | A1 | B1 | C1 |
11
+ // |______|______|______ ______|
12
+ // | | | |
13
+ // | A2 | B2 | |
14
+ // |______|______ ______| |
15
+ // | | | | D1 |
16
+ // | A3 | B3 | C2 | |
17
+ // |______|______|______|______|
18
+ // ```
19
+ //
20
+ //
21
+ // ```javascript
22
+ // array = [
23
+ // [A1, B1, C1, null],
24
+ // [A2, B2, null, D1],
25
+ // [A3. B3, C2, null],
26
+ // ]
27
+ // ```
28
+ export const convertTableNodeToArrayOfRows = tableNode => {
29
+ const map = TableMap.get(tableNode);
30
+ const rows = [];
31
+ for (let rowIndex = 0; rowIndex < map.height; rowIndex++) {
32
+ const rowCells = [];
33
+ const seen = {};
34
+ for (let colIndex = 0; colIndex < map.width; colIndex++) {
35
+ const cellPos = map.map[rowIndex * map.width + colIndex];
36
+ const cell = tableNode.nodeAt(cellPos);
37
+ const rect = map.findCell(cellPos);
38
+ if (!cell || seen[cellPos] || rect.top !== rowIndex) {
39
+ rowCells.push(null);
40
+ continue;
41
+ }
42
+ seen[cellPos] = true;
43
+ rowCells.push(cell);
44
+ }
45
+ rows.push(rowCells);
46
+ }
47
+ return rows;
48
+ };
@@ -0,0 +1,10 @@
1
+ import { findParentNodeClosestToPos } from '@atlaskit/editor-prosemirror/utils';
2
+ // Ignored via go/ees005
3
+ // eslint-disable-next-line require-unicode-regexp
4
+ const CELL_ROLE_REGEX = /cell/i;
5
+
6
+ // Iterates over parent nodes, returning a table cell or a table header node closest to a given `$pos`.
7
+ export const findCellClosestToPos = $pos => {
8
+ const predicate = node => node.type.spec.tableRole && CELL_ROLE_REGEX.test(node.type.spec.tableRole);
9
+ return findParentNodeClosestToPos($pos, predicate);
10
+ };
@@ -0,0 +1,16 @@
1
+ import { TableMap } from '../table-map';
2
+ import { findCellClosestToPos } from './find-cell-closest-to-pos';
3
+ import { findTableClosestToPos } from './find-table-closest-to-pos';
4
+
5
+ // Returns the rectangle spanning a cell closest to a given `$pos`.
6
+ export const findCellRectClosestToPos = $pos => {
7
+ const cell = findCellClosestToPos($pos);
8
+ if (cell) {
9
+ const table = findTableClosestToPos($pos);
10
+ if (table) {
11
+ const map = TableMap.get(table.node);
12
+ const cellPos = cell.pos - table.start;
13
+ return map.rectBetween(cellPos, cellPos);
14
+ }
15
+ }
16
+ };
@@ -0,0 +1,6 @@
1
+ import { findParentNodeClosestToPos } from '@atlaskit/editor-prosemirror/utils';
2
+ // Iterates over parent nodes, returning a table node closest to a given `$pos`.
3
+ export const findTableClosestToPos = $pos => {
4
+ const predicate = node => node.type.spec.tableRole && node.type.spec.tableRole === 'table';
5
+ return findParentNodeClosestToPos($pos, predicate);
6
+ };
@@ -0,0 +1,3 @@
1
+ import { findParentNode } from '@atlaskit/editor-prosemirror/utils';
2
+ // Iterates over parent nodes, returning the closest table node.
3
+ export const findTable = selection => findParentNode(node => node.type.spec.tableRole && node.type.spec.tableRole === 'table')(selection);
@@ -1,33 +1,22 @@
1
- import { findParentNode, findParentNodeClosestToPos } from '@atlaskit/editor-prosemirror/utils';
2
- import { TableMap } from '../table-map';
3
- // Ignored via go/ees005
4
- // eslint-disable-next-line require-unicode-regexp
5
- const CELL_ROLE_REGEX = /cell/i;
1
+ /* eslint-disable @repo/internal/deprecations/deprecation-ticket-required -- VOLTC-139 tracks removal of these deprecated re-export shims. */
6
2
 
7
- // Iterates over parent nodes, returning the closest table node.
8
- export const findTable = selection => findParentNode(node => node.type.spec.tableRole && node.type.spec.tableRole === 'table')(selection);
9
-
10
- // Iterates over parent nodes, returning a table node closest to a given `$pos`.
11
- export const findTableClosestToPos = $pos => {
12
- const predicate = node => node.type.spec.tableRole && node.type.spec.tableRole === 'table';
13
- return findParentNodeClosestToPos($pos, predicate);
14
- };
15
-
16
- // Iterates over parent nodes, returning a table cell or a table header node closest to a given `$pos`.
17
- export const findCellClosestToPos = $pos => {
18
- const predicate = node => node.type.spec.tableRole && CELL_ROLE_REGEX.test(node.type.spec.tableRole);
19
- return findParentNodeClosestToPos($pos, predicate);
20
- };
21
-
22
- // Returns the rectangle spanning a cell closest to a given `$pos`.
23
- export const findCellRectClosestToPos = $pos => {
24
- const cell = findCellClosestToPos($pos);
25
- if (cell) {
26
- const table = findTableClosestToPos($pos);
27
- if (table) {
28
- const map = TableMap.get(table.node);
29
- const cellPos = cell.pos - table.start;
30
- return map.rectBetween(cellPos, cellPos);
31
- }
32
- }
33
- };
3
+ /**
4
+ * @deprecated Use `import { findTable } from '@atlaskit/editor-tables/utils'` instead.
5
+ */
6
+ // eslint-disable-next-line @atlaskit/editor/no-re-export -- Compatibility shim for deprecated API
7
+ export { findTable } from './find-table';
8
+ /**
9
+ * @deprecated Use `import { findTableClosestToPos } from '@atlaskit/editor-tables/utils'` instead.
10
+ */
11
+ // eslint-disable-next-line @atlaskit/editor/no-re-export -- Compatibility shim for deprecated API
12
+ export { findTableClosestToPos } from './find-table-closest-to-pos';
13
+ /**
14
+ * @deprecated Use `import { findCellClosestToPos } from '@atlaskit/editor-tables/utils'` instead.
15
+ */
16
+ // eslint-disable-next-line @atlaskit/editor/no-re-export -- Compatibility shim for deprecated API
17
+ export { findCellClosestToPos } from './find-cell-closest-to-pos';
18
+ /**
19
+ * @deprecated Use `import { findCellRectClosestToPos } from '@atlaskit/editor-tables/utils'` instead.
20
+ */
21
+ // eslint-disable-next-line @atlaskit/editor/no-re-export -- Compatibility shim for deprecated API
22
+ export { findCellRectClosestToPos } from './find-cell-rect-closest-to-pos';
@@ -0,0 +1,21 @@
1
+ // Utilities used for copy/paste handling.
2
+ //
3
+ // This module handles pasting cell content into tables, or pasting
4
+ // anything into a cell selection, as replacing a block of cells with
5
+ // the content of the selection. When pasting cells into a cell, that
6
+ // involves placing the block of pasted content so that its top left
7
+ // aligns with the selection cell, optionally extending the table to
8
+ // the right or bottom to make sure it is large enough. Pasting into a
9
+ // cell selection is different, here the cells in the selection are
10
+ // clipped to the selection's rectangle, optionally repeating the
11
+ // pasted cells when they are smaller than the selection.
12
+
13
+ import { Transform } from '@atlaskit/editor-prosemirror/transform';
14
+ export function fitSlice(nodeType, slice) {
15
+ const node = nodeType.createAndFill();
16
+ if (!node) {
17
+ throw new Error(`fitSlice: unable to create node`);
18
+ }
19
+ const tr = new Transform(node).replace(0, node.content.size, slice);
20
+ return tr.doc;
21
+ }
@@ -0,0 +1,105 @@
1
+ import { fixTablesKey } from '../pm-plugins/plugin-key';
2
+ import { TableMap, TableProblemTypes } from '../table-map';
3
+ import { removeColSpan } from './remove-col-span';
4
+ import { tableNodeTypes } from './table-node-types';
5
+
6
+ // : (EditorState, Node, number, ?Transaction) → ?Transaction
7
+ // Fix the given table, if necessary. Will append to the transaction
8
+ // it was given, if non-null, or create a new one if necessary.
9
+ export function fixTable(state, table, tablePos, transaction, reportFixedTable) {
10
+ let tr = transaction;
11
+ const map = TableMap.get(table);
12
+ if (!map.problems) {
13
+ return tr;
14
+ }
15
+ if (!tr) {
16
+ tr = state.tr;
17
+ }
18
+
19
+ // Track which rows we must add cells to, so that we can adjust that
20
+ // when fixing collisions.
21
+ const mustAdd = [];
22
+ for (let i = 0; i < map.height; i++) {
23
+ mustAdd.push(0);
24
+ }
25
+ for (let i = 0; i < map.problems.length; i++) {
26
+ const prob = map.problems[i];
27
+ if (reportFixedTable) {
28
+ reportFixedTable({
29
+ state,
30
+ tr,
31
+ reason: prob.type || 'unknown'
32
+ });
33
+ }
34
+ if (prob.type === TableProblemTypes.COLLISION) {
35
+ const collision = prob;
36
+ const cell = table.nodeAt(prob.pos);
37
+ if (!cell) {
38
+ throw new Error(`fixTable: unable to find cell at pos ${prob.pos}`);
39
+ }
40
+ for (let j = 0; j < cell.attrs.rowspan; j++) {
41
+ mustAdd[collision.row + j] += collision.n;
42
+ }
43
+ tr.setNodeMarkup(tr.mapping.map(tablePos + 1 + prob.pos), undefined, removeColSpan(cell.attrs, cell.attrs.colspan - collision.n, collision.n));
44
+ } else if (prob.type === TableProblemTypes.MISSING) {
45
+ const missing = prob;
46
+ mustAdd[missing.row] += missing.n;
47
+ } else if (prob.type === TableProblemTypes.OVERLONG_ROWSPAN) {
48
+ const overlong = prob;
49
+ const cell = table.nodeAt(overlong.pos);
50
+ if (!cell) {
51
+ throw new Error(`fixTable: unable to find cell at pos ${prob.pos}`);
52
+ }
53
+ tr.setNodeMarkup(tr.mapping.map(tablePos + 1 + overlong.pos), undefined, {
54
+ ...cell.attrs,
55
+ rowspan: cell.attrs.rowspan - overlong.n
56
+ });
57
+ } else if (prob.type === TableProblemTypes.COLWIDTH_MISMATCH) {
58
+ const cell = table.nodeAt(prob.pos);
59
+ if (!cell) {
60
+ throw new Error(`fixTable: unable to find cell at pos ${prob.pos}`);
61
+ }
62
+ tr.setNodeMarkup(tr.mapping.map(tablePos + 1 + prob.pos), undefined, {
63
+ ...cell.attrs,
64
+ colwidth: prob.colwidth
65
+ });
66
+ }
67
+ }
68
+ let first;
69
+ let last;
70
+ for (let i = 0; i < mustAdd.length; i++) {
71
+ if (mustAdd[i]) {
72
+ if (first == null) {
73
+ first = i;
74
+ }
75
+ last = i;
76
+ }
77
+ }
78
+ // Add the necessary cells, using a heuristic for whether to add the
79
+ // cells at the start or end of the rows (if it looks like a 'bite'
80
+ // was taken out of the table, add cells at the start of the row
81
+ // after the bite. Otherwise add them at the end).
82
+ for (let i = 0, pos = tablePos + 1; i < map.height; i++) {
83
+ const row = table.child(i);
84
+ const end = pos + row.nodeSize;
85
+ const add = mustAdd[i];
86
+ if (add > 0) {
87
+ let tableNodeType = 'cell';
88
+ if (row.firstChild) {
89
+ tableNodeType = row.firstChild.type.spec.tableRole;
90
+ }
91
+ const nodes = [];
92
+ for (let j = 0; j < add; j++) {
93
+ // Ignored via go/ees005
94
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
95
+ nodes.push(tableNodeTypes(state.schema)[tableNodeType].createAndFill());
96
+ }
97
+ const side = (i === 0 || first === i - 1) && last === i ? pos + 1 : end - 1;
98
+ tr.insert(tr.mapping.map(side), nodes);
99
+ }
100
+ pos = end;
101
+ }
102
+ return tr.setMeta(fixTablesKey, {
103
+ fixTables: true
104
+ });
105
+ }