@atlaskit/editor-plugin-table 0.0.0 → 0.0.1

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 (617) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/dist/cjs/plugins/table/commands/clear.js +64 -0
  3. package/dist/cjs/plugins/table/commands/collapse.js +24 -0
  4. package/dist/cjs/plugins/table/commands/go-to-next-cell.js +66 -0
  5. package/dist/cjs/plugins/table/commands/hover.js +183 -0
  6. package/dist/cjs/plugins/table/commands/index.js +235 -0
  7. package/dist/cjs/plugins/table/commands/insert.js +186 -0
  8. package/dist/cjs/plugins/table/commands/misc.js +509 -0
  9. package/dist/cjs/plugins/table/commands/selection.js +419 -0
  10. package/dist/cjs/plugins/table/commands/sort.js +94 -0
  11. package/dist/cjs/plugins/table/commands/split-cell.js +38 -0
  12. package/dist/cjs/plugins/table/commands/toggle.js +124 -0
  13. package/dist/cjs/plugins/table/commands-with-analytics.js +543 -0
  14. package/dist/cjs/plugins/table/create-plugin-config.js +31 -0
  15. package/dist/cjs/plugins/table/event-handlers.js +441 -0
  16. package/dist/cjs/plugins/table/handlers.js +155 -0
  17. package/dist/cjs/plugins/table/index.js +347 -0
  18. package/dist/cjs/plugins/table/nodeviews/OverflowShadowsObserver.js +182 -0
  19. package/dist/cjs/plugins/table/nodeviews/TableComponent.js +610 -0
  20. package/dist/cjs/plugins/table/nodeviews/table.js +261 -0
  21. package/dist/cjs/plugins/table/nodeviews/tableCell.js +123 -0
  22. package/dist/cjs/plugins/table/nodeviews/types.js +5 -0
  23. package/dist/cjs/plugins/table/nodeviews/update-overflow-shadows.js +67 -0
  24. package/dist/cjs/plugins/table/pm-plugins/decorations/plugin.js +81 -0
  25. package/dist/cjs/plugins/table/pm-plugins/decorations/utils/column-controls.js +88 -0
  26. package/dist/cjs/plugins/table/pm-plugins/decorations/utils/column-resizing.js +55 -0
  27. package/dist/cjs/plugins/table/pm-plugins/decorations/utils/compose-decorations.js +21 -0
  28. package/dist/cjs/plugins/table/pm-plugins/decorations/utils/index.js +35 -0
  29. package/dist/cjs/plugins/table/pm-plugins/decorations/utils/types.js +5 -0
  30. package/dist/cjs/plugins/table/pm-plugins/default-table-selection.js +12 -0
  31. package/dist/cjs/plugins/table/pm-plugins/keymap.js +59 -0
  32. package/dist/cjs/plugins/table/pm-plugins/main.js +308 -0
  33. package/dist/cjs/plugins/table/pm-plugins/plugin-factory.js +65 -0
  34. package/dist/cjs/plugins/table/pm-plugins/plugin-key.js +11 -0
  35. package/dist/cjs/plugins/table/pm-plugins/safari-delayed-dom-selection-syncing-workaround.js +79 -0
  36. package/dist/cjs/plugins/table/pm-plugins/safari-delete-composition-text-issue-workaround.js +118 -0
  37. package/dist/cjs/plugins/table/pm-plugins/sticky-headers/commands.js +30 -0
  38. package/dist/cjs/plugins/table/pm-plugins/sticky-headers/index.js +51 -0
  39. package/dist/cjs/plugins/table/pm-plugins/sticky-headers/nodeviews/dom.js +46 -0
  40. package/dist/cjs/plugins/table/pm-plugins/sticky-headers/nodeviews/tableRow.js +590 -0
  41. package/dist/cjs/plugins/table/pm-plugins/sticky-headers/plugin-key.js +11 -0
  42. package/dist/cjs/plugins/table/pm-plugins/sticky-headers/plugin-state.js +68 -0
  43. package/dist/cjs/plugins/table/pm-plugins/sticky-headers/plugin.js +34 -0
  44. package/dist/cjs/plugins/table/pm-plugins/sticky-headers/types.js +5 -0
  45. package/dist/cjs/plugins/table/pm-plugins/sticky-headers/util.js +25 -0
  46. package/dist/cjs/plugins/table/pm-plugins/table-local-id.js +205 -0
  47. package/dist/cjs/plugins/table/pm-plugins/table-resizing/commands.js +158 -0
  48. package/dist/cjs/plugins/table/pm-plugins/table-resizing/event-handlers.js +182 -0
  49. package/dist/cjs/plugins/table/pm-plugins/table-resizing/index.js +29 -0
  50. package/dist/cjs/plugins/table/pm-plugins/table-resizing/plugin-factory.js +40 -0
  51. package/dist/cjs/plugins/table/pm-plugins/table-resizing/plugin-key.js +11 -0
  52. package/dist/cjs/plugins/table/pm-plugins/table-resizing/plugin.js +70 -0
  53. package/dist/cjs/plugins/table/pm-plugins/table-resizing/reducer.js +46 -0
  54. package/dist/cjs/plugins/table/pm-plugins/table-resizing/utils/colgroup.js +71 -0
  55. package/dist/cjs/plugins/table/pm-plugins/table-resizing/utils/column-state.js +107 -0
  56. package/dist/cjs/plugins/table/pm-plugins/table-resizing/utils/content-width.js +112 -0
  57. package/dist/cjs/plugins/table/pm-plugins/table-resizing/utils/dom.js +158 -0
  58. package/dist/cjs/plugins/table/pm-plugins/table-resizing/utils/index.js +209 -0
  59. package/dist/cjs/plugins/table/pm-plugins/table-resizing/utils/misc.js +115 -0
  60. package/dist/cjs/plugins/table/pm-plugins/table-resizing/utils/resize-column.js +19 -0
  61. package/dist/cjs/plugins/table/pm-plugins/table-resizing/utils/resize-logic.js +279 -0
  62. package/dist/cjs/plugins/table/pm-plugins/table-resizing/utils/resize-state.js +364 -0
  63. package/dist/cjs/plugins/table/pm-plugins/table-resizing/utils/scale-table.js +132 -0
  64. package/dist/cjs/plugins/table/pm-plugins/table-resizing/utils/types.js +5 -0
  65. package/dist/cjs/plugins/table/pm-plugins/table-resizing/utils/unit-to-number.js +12 -0
  66. package/dist/cjs/plugins/table/pm-plugins/table-selection-keymap.js +23 -0
  67. package/dist/cjs/plugins/table/reducer.js +107 -0
  68. package/dist/cjs/plugins/table/todo-stubs.js +10 -0
  69. package/dist/cjs/plugins/table/toolbar.js +325 -0
  70. package/dist/cjs/plugins/table/transforms/column-width.js +196 -0
  71. package/dist/cjs/plugins/table/transforms/delete-columns.js +293 -0
  72. package/dist/cjs/plugins/table/transforms/delete-rows.js +176 -0
  73. package/dist/cjs/plugins/table/transforms/fix-tables.js +250 -0
  74. package/dist/cjs/plugins/table/transforms/index.js +85 -0
  75. package/dist/cjs/plugins/table/transforms/merge.js +349 -0
  76. package/dist/cjs/plugins/table/transforms/metadata.js +23 -0
  77. package/dist/cjs/plugins/table/transforms/replace-table.js +48 -0
  78. package/dist/cjs/plugins/table/transforms/split.js +92 -0
  79. package/dist/cjs/plugins/table/types.js +106 -0
  80. package/dist/cjs/plugins/table/ui/FloatingContextualButton/index.js +194 -0
  81. package/dist/cjs/plugins/table/ui/FloatingContextualButton/styles.js +26 -0
  82. package/dist/cjs/plugins/table/ui/FloatingContextualMenu/ContextualMenu.js +529 -0
  83. package/dist/cjs/plugins/table/ui/FloatingContextualMenu/index.js +116 -0
  84. package/dist/cjs/plugins/table/ui/FloatingContextualMenu/styles.js +34 -0
  85. package/dist/cjs/plugins/table/ui/FloatingDeleteButton/DeleteButton.js +49 -0
  86. package/dist/cjs/plugins/table/ui/FloatingDeleteButton/getPopUpOptions.js +71 -0
  87. package/dist/cjs/plugins/table/ui/FloatingDeleteButton/index.js +365 -0
  88. package/dist/cjs/plugins/table/ui/FloatingDeleteButton/types.js +5 -0
  89. package/dist/cjs/plugins/table/ui/FloatingInsertButton/InsertButton.js +118 -0
  90. package/dist/cjs/plugins/table/ui/FloatingInsertButton/getPopupOptions.js +108 -0
  91. package/dist/cjs/plugins/table/ui/FloatingInsertButton/index.js +244 -0
  92. package/dist/cjs/plugins/table/ui/LayoutButton/index.js +255 -0
  93. package/dist/cjs/plugins/table/ui/TableFloatingControls/CornerControls/index.js +140 -0
  94. package/dist/cjs/plugins/table/ui/TableFloatingControls/NumberColumn/index.js +146 -0
  95. package/dist/cjs/plugins/table/ui/TableFloatingControls/RowControls/index.js +135 -0
  96. package/dist/cjs/plugins/table/ui/TableFloatingControls/index.js +229 -0
  97. package/dist/cjs/plugins/table/ui/common-styles.js +48 -0
  98. package/dist/cjs/plugins/table/ui/consts.js +109 -0
  99. package/dist/cjs/plugins/table/ui/messages.js +48 -0
  100. package/dist/cjs/plugins/table/ui/ui-styles.js +116 -0
  101. package/dist/cjs/plugins/table/utils/analytics.js +86 -0
  102. package/dist/cjs/plugins/table/utils/collapse.js +98 -0
  103. package/dist/cjs/plugins/table/utils/column-controls.js +234 -0
  104. package/dist/cjs/plugins/table/utils/decoration.js +405 -0
  105. package/dist/cjs/plugins/table/utils/dom.js +224 -0
  106. package/dist/cjs/plugins/table/utils/get-allow-add-column-custom-step.js +13 -0
  107. package/dist/cjs/plugins/table/utils/index.js +355 -0
  108. package/dist/cjs/plugins/table/utils/nodes.js +159 -0
  109. package/dist/cjs/plugins/table/utils/paste.js +148 -0
  110. package/dist/cjs/plugins/table/utils/referentiality.js +29 -0
  111. package/dist/cjs/plugins/table/utils/row-controls.js +254 -0
  112. package/dist/cjs/plugins/table/utils/selection.js +116 -0
  113. package/dist/cjs/plugins/table/utils/table.js +48 -0
  114. package/dist/cjs/plugins/table/utils/update-plugin-state-decorations.js +16 -0
  115. package/dist/cjs/plugins/table-plugin.js +4 -45
  116. package/dist/cjs/version.json +1 -1
  117. package/dist/es2019/plugins/table/commands/clear.js +48 -0
  118. package/dist/es2019/plugins/table/commands/collapse.js +14 -0
  119. package/dist/es2019/plugins/table/commands/go-to-next-cell.js +47 -0
  120. package/dist/es2019/plugins/table/commands/hover.js +117 -0
  121. package/dist/es2019/plugins/table/commands/index.js +7 -0
  122. package/dist/es2019/plugins/table/commands/insert.js +141 -0
  123. package/dist/es2019/plugins/table/commands/misc.js +405 -0
  124. package/dist/es2019/plugins/table/commands/selection.js +369 -0
  125. package/dist/es2019/plugins/table/commands/sort.js +74 -0
  126. package/dist/es2019/plugins/table/commands/split-cell.js +29 -0
  127. package/dist/es2019/plugins/table/commands/toggle.js +76 -0
  128. package/dist/es2019/plugins/table/commands-with-analytics.js +409 -0
  129. package/dist/es2019/plugins/table/create-plugin-config.js +14 -0
  130. package/dist/es2019/plugins/table/event-handlers.js +387 -0
  131. package/dist/es2019/plugins/table/handlers.js +123 -0
  132. package/dist/es2019/plugins/table/index.js +308 -0
  133. package/dist/es2019/plugins/table/nodeviews/OverflowShadowsObserver.js +159 -0
  134. package/dist/es2019/plugins/table/nodeviews/TableComponent.js +578 -0
  135. package/dist/es2019/plugins/table/nodeviews/table.js +200 -0
  136. package/dist/es2019/plugins/table/nodeviews/tableCell.js +77 -0
  137. package/dist/es2019/plugins/table/nodeviews/types.js +1 -0
  138. package/dist/es2019/plugins/table/nodeviews/update-overflow-shadows.js +52 -0
  139. package/dist/es2019/plugins/table/pm-plugins/decorations/plugin.js +52 -0
  140. package/dist/es2019/plugins/table/pm-plugins/decorations/utils/column-controls.js +67 -0
  141. package/dist/es2019/plugins/table/pm-plugins/decorations/utils/column-resizing.js +27 -0
  142. package/dist/es2019/plugins/table/pm-plugins/decorations/utils/compose-decorations.js +7 -0
  143. package/dist/es2019/plugins/table/pm-plugins/decorations/utils/index.js +3 -0
  144. package/dist/es2019/plugins/table/pm-plugins/decorations/utils/types.js +1 -0
  145. package/dist/es2019/plugins/table/pm-plugins/default-table-selection.js +5 -0
  146. package/dist/es2019/plugins/table/pm-plugins/keymap.js +34 -0
  147. package/dist/es2019/plugins/table/pm-plugins/main.js +274 -0
  148. package/dist/es2019/plugins/table/pm-plugins/plugin-factory.js +46 -0
  149. package/dist/es2019/plugins/table/pm-plugins/plugin-key.js +2 -0
  150. package/dist/es2019/plugins/table/pm-plugins/safari-delayed-dom-selection-syncing-workaround.js +66 -0
  151. package/dist/es2019/plugins/table/pm-plugins/safari-delete-composition-text-issue-workaround.js +106 -0
  152. package/dist/es2019/plugins/table/pm-plugins/sticky-headers/commands.js +9 -0
  153. package/dist/es2019/plugins/table/pm-plugins/sticky-headers/index.js +5 -0
  154. package/dist/es2019/plugins/table/pm-plugins/sticky-headers/nodeviews/dom.js +34 -0
  155. package/dist/es2019/plugins/table/pm-plugins/sticky-headers/nodeviews/tableRow.js +546 -0
  156. package/dist/es2019/plugins/table/pm-plugins/sticky-headers/plugin-key.js +2 -0
  157. package/dist/es2019/plugins/table/pm-plugins/sticky-headers/plugin-state.js +47 -0
  158. package/dist/es2019/plugins/table/pm-plugins/sticky-headers/plugin.js +17 -0
  159. package/dist/es2019/plugins/table/pm-plugins/sticky-headers/types.js +1 -0
  160. package/dist/es2019/plugins/table/pm-plugins/sticky-headers/util.js +14 -0
  161. package/dist/es2019/plugins/table/pm-plugins/table-local-id.js +203 -0
  162. package/dist/es2019/plugins/table/pm-plugins/table-resizing/commands.js +109 -0
  163. package/dist/es2019/plugins/table/pm-plugins/table-resizing/event-handlers.js +173 -0
  164. package/dist/es2019/plugins/table/pm-plugins/table-resizing/index.js +3 -0
  165. package/dist/es2019/plugins/table/pm-plugins/table-resizing/plugin-factory.js +20 -0
  166. package/dist/es2019/plugins/table/pm-plugins/table-resizing/plugin-key.js +2 -0
  167. package/dist/es2019/plugins/table/pm-plugins/table-resizing/plugin.js +58 -0
  168. package/dist/es2019/plugins/table/pm-plugins/table-resizing/reducer.js +31 -0
  169. package/dist/es2019/plugins/table/pm-plugins/table-resizing/utils/colgroup.js +45 -0
  170. package/dist/es2019/plugins/table/pm-plugins/table-resizing/utils/column-state.js +78 -0
  171. package/dist/es2019/plugins/table/pm-plugins/table-resizing/utils/content-width.js +97 -0
  172. package/dist/es2019/plugins/table/pm-plugins/table-resizing/utils/dom.js +124 -0
  173. package/dist/es2019/plugins/table/pm-plugins/table-resizing/utils/index.js +9 -0
  174. package/dist/es2019/plugins/table/pm-plugins/table-resizing/utils/misc.js +90 -0
  175. package/dist/es2019/plugins/table/pm-plugins/table-resizing/utils/resize-column.js +8 -0
  176. package/dist/es2019/plugins/table/pm-plugins/table-resizing/utils/resize-logic.js +221 -0
  177. package/dist/es2019/plugins/table/pm-plugins/table-resizing/utils/resize-state.js +276 -0
  178. package/dist/es2019/plugins/table/pm-plugins/table-resizing/utils/scale-table.js +105 -0
  179. package/dist/es2019/plugins/table/pm-plugins/table-resizing/utils/types.js +1 -0
  180. package/dist/es2019/plugins/table/pm-plugins/table-resizing/utils/unit-to-number.js +1 -0
  181. package/dist/es2019/plugins/table/pm-plugins/table-selection-keymap.js +10 -0
  182. package/dist/es2019/plugins/table/reducer.js +103 -0
  183. package/dist/es2019/plugins/table/todo-stubs.js +1 -0
  184. package/dist/es2019/plugins/table/toolbar.js +287 -0
  185. package/dist/es2019/plugins/table/transforms/column-width.js +163 -0
  186. package/dist/es2019/plugins/table/transforms/delete-columns.js +247 -0
  187. package/dist/es2019/plugins/table/transforms/delete-rows.js +135 -0
  188. package/dist/es2019/plugins/table/transforms/fix-tables.js +218 -0
  189. package/dist/es2019/plugins/table/transforms/index.js +7 -0
  190. package/dist/es2019/plugins/table/transforms/merge.js +312 -0
  191. package/dist/es2019/plugins/table/transforms/metadata.js +11 -0
  192. package/dist/es2019/plugins/table/transforms/replace-table.js +33 -0
  193. package/dist/es2019/plugins/table/transforms/split.js +72 -0
  194. package/dist/es2019/plugins/table/types.js +84 -0
  195. package/dist/es2019/plugins/table/ui/FloatingContextualButton/index.js +142 -0
  196. package/dist/es2019/plugins/table/ui/FloatingContextualButton/styles.js +28 -0
  197. package/dist/es2019/plugins/table/ui/FloatingContextualMenu/ContextualMenu.js +482 -0
  198. package/dist/es2019/plugins/table/ui/FloatingContextualMenu/index.js +99 -0
  199. package/dist/es2019/plugins/table/ui/FloatingContextualMenu/styles.js +48 -0
  200. package/dist/es2019/plugins/table/ui/FloatingDeleteButton/DeleteButton.js +36 -0
  201. package/dist/es2019/plugins/table/ui/FloatingDeleteButton/getPopUpOptions.js +59 -0
  202. package/dist/es2019/plugins/table/ui/FloatingDeleteButton/index.js +302 -0
  203. package/dist/es2019/plugins/table/ui/FloatingDeleteButton/types.js +1 -0
  204. package/dist/es2019/plugins/table/ui/FloatingInsertButton/InsertButton.js +96 -0
  205. package/dist/es2019/plugins/table/ui/FloatingInsertButton/getPopupOptions.js +96 -0
  206. package/dist/es2019/plugins/table/ui/FloatingInsertButton/index.js +199 -0
  207. package/dist/es2019/plugins/table/ui/LayoutButton/index.js +195 -0
  208. package/dist/es2019/plugins/table/ui/TableFloatingControls/CornerControls/index.js +95 -0
  209. package/dist/es2019/plugins/table/ui/TableFloatingControls/NumberColumn/index.js +91 -0
  210. package/dist/es2019/plugins/table/ui/TableFloatingControls/RowControls/index.js +82 -0
  211. package/dist/es2019/plugins/table/ui/TableFloatingControls/index.js +158 -0
  212. package/dist/es2019/plugins/table/ui/common-styles.js +647 -0
  213. package/dist/es2019/plugins/table/ui/consts.js +61 -0
  214. package/dist/es2019/plugins/table/ui/messages.js +38 -0
  215. package/dist/es2019/plugins/table/ui/ui-styles.js +398 -0
  216. package/dist/es2019/plugins/table/utils/analytics.js +65 -0
  217. package/dist/es2019/plugins/table/utils/collapse.js +84 -0
  218. package/dist/es2019/plugins/table/utils/column-controls.js +178 -0
  219. package/dist/es2019/plugins/table/utils/decoration.js +346 -0
  220. package/dist/es2019/plugins/table/utils/dom.js +160 -0
  221. package/dist/es2019/plugins/table/utils/get-allow-add-column-custom-step.js +5 -0
  222. package/dist/es2019/plugins/table/utils/index.js +10 -0
  223. package/dist/es2019/plugins/table/utils/nodes.js +104 -0
  224. package/dist/es2019/plugins/table/utils/paste.js +117 -0
  225. package/dist/es2019/plugins/table/utils/referentiality.js +18 -0
  226. package/dist/es2019/plugins/table/utils/row-controls.js +210 -0
  227. package/dist/es2019/plugins/table/utils/selection.js +95 -0
  228. package/dist/es2019/plugins/table/utils/table.js +27 -0
  229. package/dist/es2019/plugins/table/utils/update-plugin-state-decorations.js +3 -0
  230. package/dist/es2019/plugins/table-plugin.js +1 -44
  231. package/dist/es2019/version.json +1 -1
  232. package/dist/esm/plugins/table/commands/clear.js +48 -0
  233. package/dist/esm/plugins/table/commands/collapse.js +14 -0
  234. package/dist/esm/plugins/table/commands/go-to-next-cell.js +50 -0
  235. package/dist/esm/plugins/table/commands/hover.js +149 -0
  236. package/dist/esm/plugins/table/commands/index.js +7 -0
  237. package/dist/esm/plugins/table/commands/insert.js +153 -0
  238. package/dist/esm/plugins/table/commands/misc.js +427 -0
  239. package/dist/esm/plugins/table/commands/selection.js +401 -0
  240. package/dist/esm/plugins/table/commands/sort.js +79 -0
  241. package/dist/esm/plugins/table/commands/split-cell.js +28 -0
  242. package/dist/esm/plugins/table/commands/toggle.js +97 -0
  243. package/dist/esm/plugins/table/commands-with-analytics.js +464 -0
  244. package/dist/esm/plugins/table/create-plugin-config.js +20 -0
  245. package/dist/esm/plugins/table/event-handlers.js +387 -0
  246. package/dist/esm/plugins/table/handlers.js +140 -0
  247. package/dist/esm/plugins/table/index.js +312 -0
  248. package/dist/esm/plugins/table/nodeviews/OverflowShadowsObserver.js +177 -0
  249. package/dist/esm/plugins/table/nodeviews/TableComponent.js +596 -0
  250. package/dist/esm/plugins/table/nodeviews/table.js +235 -0
  251. package/dist/esm/plugins/table/nodeviews/tableCell.js +111 -0
  252. package/dist/esm/plugins/table/nodeviews/types.js +1 -0
  253. package/dist/esm/plugins/table/nodeviews/update-overflow-shadows.js +54 -0
  254. package/dist/esm/plugins/table/pm-plugins/decorations/plugin.js +58 -0
  255. package/dist/esm/plugins/table/pm-plugins/decorations/utils/column-controls.js +71 -0
  256. package/dist/esm/plugins/table/pm-plugins/decorations/utils/column-resizing.js +40 -0
  257. package/dist/esm/plugins/table/pm-plugins/decorations/utils/compose-decorations.js +12 -0
  258. package/dist/esm/plugins/table/pm-plugins/decorations/utils/index.js +3 -0
  259. package/dist/esm/plugins/table/pm-plugins/decorations/utils/types.js +1 -0
  260. package/dist/esm/plugins/table/pm-plugins/default-table-selection.js +5 -0
  261. package/dist/esm/plugins/table/pm-plugins/keymap.js +36 -0
  262. package/dist/esm/plugins/table/pm-plugins/main.js +278 -0
  263. package/dist/esm/plugins/table/pm-plugins/plugin-factory.js +51 -0
  264. package/dist/esm/plugins/table/pm-plugins/plugin-key.js +2 -0
  265. package/dist/esm/plugins/table/pm-plugins/safari-delayed-dom-selection-syncing-workaround.js +66 -0
  266. package/dist/esm/plugins/table/pm-plugins/safari-delete-composition-text-issue-workaround.js +102 -0
  267. package/dist/esm/plugins/table/pm-plugins/sticky-headers/commands.js +17 -0
  268. package/dist/esm/plugins/table/pm-plugins/sticky-headers/index.js +5 -0
  269. package/dist/esm/plugins/table/pm-plugins/sticky-headers/nodeviews/dom.js +34 -0
  270. package/dist/esm/plugins/table/pm-plugins/sticky-headers/nodeviews/tableRow.js +588 -0
  271. package/dist/esm/plugins/table/pm-plugins/sticky-headers/plugin-key.js +2 -0
  272. package/dist/esm/plugins/table/pm-plugins/sticky-headers/plugin-state.js +57 -0
  273. package/dist/esm/plugins/table/pm-plugins/sticky-headers/plugin.js +21 -0
  274. package/dist/esm/plugins/table/pm-plugins/sticky-headers/types.js +1 -0
  275. package/dist/esm/plugins/table/pm-plugins/sticky-headers/util.js +16 -0
  276. package/dist/esm/plugins/table/pm-plugins/table-local-id.js +205 -0
  277. package/dist/esm/plugins/table/pm-plugins/table-resizing/commands.js +127 -0
  278. package/dist/esm/plugins/table/pm-plugins/table-resizing/event-handlers.js +159 -0
  279. package/dist/esm/plugins/table/pm-plugins/table-resizing/index.js +3 -0
  280. package/dist/esm/plugins/table/pm-plugins/table-resizing/plugin-factory.js +26 -0
  281. package/dist/esm/plugins/table/pm-plugins/table-resizing/plugin-key.js +2 -0
  282. package/dist/esm/plugins/table/pm-plugins/table-resizing/plugin.js +52 -0
  283. package/dist/esm/plugins/table/pm-plugins/table-resizing/reducer.js +35 -0
  284. package/dist/esm/plugins/table/pm-plugins/table-resizing/utils/colgroup.js +50 -0
  285. package/dist/esm/plugins/table/pm-plugins/table-resizing/utils/column-state.js +80 -0
  286. package/dist/esm/plugins/table/pm-plugins/table-resizing/utils/content-width.js +104 -0
  287. package/dist/esm/plugins/table/pm-plugins/table-resizing/utils/dom.js +125 -0
  288. package/dist/esm/plugins/table/pm-plugins/table-resizing/utils/index.js +9 -0
  289. package/dist/esm/plugins/table/pm-plugins/table-resizing/utils/misc.js +88 -0
  290. package/dist/esm/plugins/table/pm-plugins/table-resizing/utils/resize-column.js +8 -0
  291. package/dist/esm/plugins/table/pm-plugins/table-resizing/utils/resize-logic.js +257 -0
  292. package/dist/esm/plugins/table/pm-plugins/table-resizing/utils/resize-state.js +320 -0
  293. package/dist/esm/plugins/table/pm-plugins/table-resizing/utils/scale-table.js +109 -0
  294. package/dist/esm/plugins/table/pm-plugins/table-resizing/utils/types.js +1 -0
  295. package/dist/esm/plugins/table/pm-plugins/table-resizing/utils/unit-to-number.js +3 -0
  296. package/dist/esm/plugins/table/pm-plugins/table-selection-keymap.js +10 -0
  297. package/dist/esm/plugins/table/reducer.js +95 -0
  298. package/dist/esm/plugins/table/todo-stubs.js +1 -0
  299. package/dist/esm/plugins/table/toolbar.js +290 -0
  300. package/dist/esm/plugins/table/transforms/column-width.js +175 -0
  301. package/dist/esm/plugins/table/transforms/delete-columns.js +271 -0
  302. package/dist/esm/plugins/table/transforms/delete-rows.js +156 -0
  303. package/dist/esm/plugins/table/transforms/fix-tables.js +229 -0
  304. package/dist/esm/plugins/table/transforms/index.js +7 -0
  305. package/dist/esm/plugins/table/transforms/merge.js +324 -0
  306. package/dist/esm/plugins/table/transforms/metadata.js +13 -0
  307. package/dist/esm/plugins/table/transforms/replace-table.js +34 -0
  308. package/dist/esm/plugins/table/transforms/split.js +82 -0
  309. package/dist/esm/plugins/table/types.js +90 -0
  310. package/dist/esm/plugins/table/ui/FloatingContextualButton/index.js +167 -0
  311. package/dist/esm/plugins/table/ui/FloatingContextualButton/styles.js +11 -0
  312. package/dist/esm/plugins/table/ui/FloatingContextualMenu/ContextualMenu.js +501 -0
  313. package/dist/esm/plugins/table/ui/FloatingContextualMenu/index.js +96 -0
  314. package/dist/esm/plugins/table/ui/FloatingContextualMenu/styles.js +15 -0
  315. package/dist/esm/plugins/table/ui/FloatingDeleteButton/DeleteButton.js +37 -0
  316. package/dist/esm/plugins/table/ui/FloatingDeleteButton/getPopUpOptions.js +61 -0
  317. package/dist/esm/plugins/table/ui/FloatingDeleteButton/index.js +333 -0
  318. package/dist/esm/plugins/table/ui/FloatingDeleteButton/types.js +1 -0
  319. package/dist/esm/plugins/table/ui/FloatingInsertButton/InsertButton.js +90 -0
  320. package/dist/esm/plugins/table/ui/FloatingInsertButton/getPopupOptions.js +96 -0
  321. package/dist/esm/plugins/table/ui/FloatingInsertButton/index.js +214 -0
  322. package/dist/esm/plugins/table/ui/LayoutButton/index.js +227 -0
  323. package/dist/esm/plugins/table/ui/TableFloatingControls/CornerControls/index.js +120 -0
  324. package/dist/esm/plugins/table/ui/TableFloatingControls/NumberColumn/index.js +126 -0
  325. package/dist/esm/plugins/table/ui/TableFloatingControls/RowControls/index.js +113 -0
  326. package/dist/esm/plugins/table/ui/TableFloatingControls/index.js +207 -0
  327. package/dist/esm/plugins/table/ui/common-styles.js +25 -0
  328. package/dist/esm/plugins/table/ui/consts.js +61 -0
  329. package/dist/esm/plugins/table/ui/messages.js +38 -0
  330. package/dist/esm/plugins/table/ui/ui-styles.js +73 -0
  331. package/dist/esm/plugins/table/utils/analytics.js +71 -0
  332. package/dist/esm/plugins/table/utils/collapse.js +84 -0
  333. package/dist/esm/plugins/table/utils/column-controls.js +202 -0
  334. package/dist/esm/plugins/table/utils/decoration.js +366 -0
  335. package/dist/esm/plugins/table/utils/dom.js +175 -0
  336. package/dist/esm/plugins/table/utils/get-allow-add-column-custom-step.js +5 -0
  337. package/dist/esm/plugins/table/utils/index.js +10 -0
  338. package/dist/esm/plugins/table/utils/nodes.js +112 -0
  339. package/dist/esm/plugins/table/utils/paste.js +115 -0
  340. package/dist/esm/plugins/table/utils/referentiality.js +20 -0
  341. package/dist/esm/plugins/table/utils/row-controls.js +221 -0
  342. package/dist/esm/plugins/table/utils/selection.js +96 -0
  343. package/dist/esm/plugins/table/utils/table.js +30 -0
  344. package/dist/esm/plugins/table/utils/update-plugin-state-decorations.js +5 -0
  345. package/dist/esm/plugins/table-plugin.js +1 -42
  346. package/dist/esm/version.json +1 -1
  347. package/dist/types/plugins/table/commands/clear.d.ts +3 -0
  348. package/dist/types/plugins/table/commands/collapse.d.ts +2 -0
  349. package/dist/types/plugins/table/commands/go-to-next-cell.d.ts +4 -0
  350. package/dist/types/plugins/table/commands/hover.d.ts +8 -0
  351. package/dist/types/plugins/table/commands/index.d.ts +7 -0
  352. package/dist/types/plugins/table/commands/insert.d.ts +10 -0
  353. package/dist/types/plugins/table/commands/misc.d.ts +27 -0
  354. package/dist/types/plugins/table/commands/selection.d.ts +8 -0
  355. package/dist/types/plugins/table/commands/sort.d.ts +3 -0
  356. package/dist/types/plugins/table/commands/split-cell.d.ts +6 -0
  357. package/dist/types/plugins/table/commands/toggle.d.ts +12 -0
  358. package/dist/types/plugins/table/commands-with-analytics.d.ts +26 -0
  359. package/dist/types/plugins/table/create-plugin-config.d.ts +2 -0
  360. package/dist/types/plugins/table/event-handlers.d.ts +16 -0
  361. package/dist/types/plugins/table/handlers.d.ts +3 -0
  362. package/dist/types/plugins/table/index.d.ts +18 -0
  363. package/dist/types/plugins/table/nodeviews/OverflowShadowsObserver.d.ts +26 -0
  364. package/dist/types/plugins/table/nodeviews/TableComponent.d.ts +72 -0
  365. package/dist/types/plugins/table/nodeviews/__mocks__/OverflowShadowsObserver.d.ts +9 -0
  366. package/dist/types/plugins/table/nodeviews/__mocks__/OverridableMock.d.ts +9 -0
  367. package/dist/types/plugins/table/nodeviews/table.d.ts +31 -0
  368. package/dist/types/plugins/table/nodeviews/tableCell.d.ts +19 -0
  369. package/dist/types/plugins/table/nodeviews/types.d.ts +23 -0
  370. package/dist/types/plugins/table/nodeviews/update-overflow-shadows.d.ts +8 -0
  371. package/dist/types/plugins/table/pm-plugins/decorations/plugin.d.ts +7 -0
  372. package/dist/types/plugins/table/pm-plugins/decorations/utils/column-controls.d.ts +3 -0
  373. package/dist/types/plugins/table/pm-plugins/decorations/utils/column-resizing.d.ts +2 -0
  374. package/dist/types/plugins/table/pm-plugins/decorations/utils/compose-decorations.d.ts +2 -0
  375. package/dist/types/plugins/table/pm-plugins/decorations/utils/index.d.ts +3 -0
  376. package/dist/types/plugins/table/pm-plugins/decorations/utils/types.d.ts +6 -0
  377. package/dist/types/plugins/table/pm-plugins/default-table-selection.d.ts +5 -0
  378. package/dist/types/plugins/table/pm-plugins/keymap.d.ts +5 -0
  379. package/dist/types/plugins/table/pm-plugins/main.d.ts +8 -0
  380. package/dist/types/plugins/table/pm-plugins/plugin-factory.d.ts +1 -0
  381. package/dist/types/plugins/table/pm-plugins/plugin-key.d.ts +3 -0
  382. package/dist/types/plugins/table/pm-plugins/safari-delayed-dom-selection-syncing-workaround.d.ts +4 -0
  383. package/dist/types/plugins/table/pm-plugins/safari-delete-composition-text-issue-workaround.d.ts +15 -0
  384. package/dist/types/plugins/table/pm-plugins/sticky-headers/commands.d.ts +3 -0
  385. package/dist/types/plugins/table/pm-plugins/sticky-headers/index.d.ts +6 -0
  386. package/dist/types/plugins/table/pm-plugins/sticky-headers/nodeviews/dom.d.ts +6 -0
  387. package/dist/types/plugins/table/pm-plugins/sticky-headers/nodeviews/tableRow.d.ts +65 -0
  388. package/dist/types/plugins/table/pm-plugins/sticky-headers/plugin-key.d.ts +3 -0
  389. package/dist/types/plugins/table/pm-plugins/sticky-headers/plugin-state.d.ts +3 -0
  390. package/dist/types/plugins/table/pm-plugins/sticky-headers/plugin.d.ts +4 -0
  391. package/dist/types/plugins/table/pm-plugins/sticky-headers/types.d.ts +16 -0
  392. package/dist/types/plugins/table/pm-plugins/sticky-headers/util.d.ts +2 -0
  393. package/dist/types/plugins/table/pm-plugins/table-local-id.d.ts +22 -0
  394. package/dist/types/plugins/table/pm-plugins/table-resizing/commands.d.ts +25 -0
  395. package/dist/types/plugins/table/pm-plugins/table-resizing/event-handlers.d.ts +4 -0
  396. package/dist/types/plugins/table/pm-plugins/table-resizing/index.d.ts +3 -0
  397. package/dist/types/plugins/table/pm-plugins/table-resizing/plugin-factory.d.ts +4 -0
  398. package/dist/types/plugins/table/pm-plugins/table-resizing/plugin-key.d.ts +3 -0
  399. package/dist/types/plugins/table/pm-plugins/table-resizing/plugin.d.ts +6 -0
  400. package/dist/types/plugins/table/pm-plugins/table-resizing/reducer.d.ts +3 -0
  401. package/dist/types/plugins/table/pm-plugins/table-resizing/utils/colgroup.d.ts +8 -0
  402. package/dist/types/plugins/table/pm-plugins/table-resizing/utils/column-state.d.ts +14 -0
  403. package/dist/types/plugins/table/pm-plugins/table-resizing/utils/content-width.d.ts +4 -0
  404. package/dist/types/plugins/table/pm-plugins/table-resizing/utils/dom.d.ts +13 -0
  405. package/dist/types/plugins/table/pm-plugins/table-resizing/utils/index.d.ts +12 -0
  406. package/dist/types/plugins/table/pm-plugins/table-resizing/utils/misc.d.ts +22 -0
  407. package/dist/types/plugins/table/pm-plugins/table-resizing/utils/resize-column.d.ts +2 -0
  408. package/dist/types/plugins/table/pm-plugins/table-resizing/utils/resize-logic.d.ts +4 -0
  409. package/dist/types/plugins/table/pm-plugins/table-resizing/utils/resize-state.d.ts +29 -0
  410. package/dist/types/plugins/table/pm-plugins/table-resizing/utils/scale-table.d.ts +17 -0
  411. package/dist/types/plugins/table/pm-plugins/table-resizing/utils/types.d.ts +22 -0
  412. package/dist/types/plugins/table/pm-plugins/table-resizing/utils/unit-to-number.d.ts +1 -0
  413. package/dist/types/plugins/table/pm-plugins/table-selection-keymap.d.ts +4 -0
  414. package/dist/types/plugins/table/reducer.d.ts +3 -0
  415. package/dist/types/plugins/table/todo-stubs.d.ts +1 -0
  416. package/dist/types/plugins/table/toolbar.d.ts +36 -0
  417. package/dist/types/plugins/table/transforms/column-width.d.ts +18 -0
  418. package/dist/types/plugins/table/transforms/delete-columns.d.ts +3 -0
  419. package/dist/types/plugins/table/transforms/delete-rows.d.ts +3 -0
  420. package/dist/types/plugins/table/transforms/fix-tables.d.ts +10 -0
  421. package/dist/types/plugins/table/transforms/index.d.ts +7 -0
  422. package/dist/types/plugins/table/transforms/merge.d.ts +5 -0
  423. package/dist/types/plugins/table/transforms/metadata.d.ts +21 -0
  424. package/dist/types/plugins/table/transforms/replace-table.d.ts +5 -0
  425. package/dist/types/plugins/table/transforms/split.d.ts +9 -0
  426. package/dist/types/plugins/table/types.d.ts +328 -0
  427. package/dist/types/plugins/table/ui/FloatingContextualButton/index.d.ts +29 -0
  428. package/dist/types/plugins/table/ui/FloatingContextualButton/styles.d.ts +1 -0
  429. package/dist/types/plugins/table/ui/FloatingContextualMenu/ContextualMenu.d.ts +87 -0
  430. package/dist/types/plugins/table/ui/FloatingContextualMenu/index.d.ts +22 -0
  431. package/dist/types/plugins/table/ui/FloatingContextualMenu/styles.d.ts +2 -0
  432. package/dist/types/plugins/table/ui/FloatingDeleteButton/DeleteButton.d.ts +14 -0
  433. package/dist/types/plugins/table/ui/FloatingDeleteButton/getPopUpOptions.d.ts +10 -0
  434. package/dist/types/plugins/table/ui/FloatingDeleteButton/index.d.ts +54 -0
  435. package/dist/types/plugins/table/ui/FloatingDeleteButton/types.d.ts +1 -0
  436. package/dist/types/plugins/table/ui/FloatingInsertButton/InsertButton.d.ts +12 -0
  437. package/dist/types/plugins/table/ui/FloatingInsertButton/getPopupOptions.d.ts +3 -0
  438. package/dist/types/plugins/table/ui/FloatingInsertButton/index.d.ts +35 -0
  439. package/dist/types/plugins/table/ui/LayoutButton/index.d.ts +21 -0
  440. package/dist/types/plugins/table/ui/TableFloatingControls/CornerControls/index.d.ts +19 -0
  441. package/dist/types/plugins/table/ui/TableFloatingControls/NumberColumn/index.d.ts +21 -0
  442. package/dist/types/plugins/table/ui/TableFloatingControls/RowControls/index.d.ts +17 -0
  443. package/dist/types/plugins/table/ui/TableFloatingControls/index.d.ts +40 -0
  444. package/dist/types/plugins/table/ui/common-styles.d.ts +4 -0
  445. package/dist/types/plugins/table/ui/consts.d.ts +39 -0
  446. package/dist/types/plugins/table/ui/messages.d.ts +38 -0
  447. package/dist/types/plugins/table/ui/ui-styles.d.ts +15 -0
  448. package/dist/types/plugins/table/utils/analytics.d.ts +18 -0
  449. package/dist/types/plugins/table/utils/collapse.d.ts +29 -0
  450. package/dist/types/plugins/table/utils/column-controls.d.ts +10 -0
  451. package/dist/types/plugins/table/utils/decoration.d.ts +13 -0
  452. package/dist/types/plugins/table/utils/dom.d.ts +17 -0
  453. package/dist/types/plugins/table/utils/get-allow-add-column-custom-step.d.ts +2 -0
  454. package/dist/types/plugins/table/utils/index.d.ts +11 -0
  455. package/dist/types/plugins/table/utils/nodes.d.ts +12 -0
  456. package/dist/types/plugins/table/utils/paste.d.ts +14 -0
  457. package/dist/types/plugins/table/utils/referentiality.d.ts +2 -0
  458. package/dist/types/plugins/table/utils/row-controls.d.ts +16 -0
  459. package/dist/types/plugins/table/utils/selection.d.ts +6 -0
  460. package/dist/types/plugins/table/utils/table.d.ts +4 -0
  461. package/dist/types/plugins/table/utils/update-plugin-state-decorations.d.ts +4 -0
  462. package/dist/types/plugins/table-plugin.d.ts +1 -1
  463. package/package.json +27 -5
  464. package/report.api.md +50 -1
  465. package/src/plugins/table/__tests__/integration/block-node-selection.ts +164 -0
  466. package/src/plugins/table/__tests__/unit/commands/go-to-next-cell.ts +155 -0
  467. package/src/plugins/table/__tests__/unit/commands/insert.ts +116 -0
  468. package/src/plugins/table/__tests__/unit/commands/misc.ts +165 -0
  469. package/src/plugins/table/__tests__/unit/commands.ts +982 -0
  470. package/src/plugins/table/__tests__/unit/event-handlers.ts +130 -0
  471. package/src/plugins/table/__tests__/unit/get-toolbar-config.ts +140 -0
  472. package/src/plugins/table/__tests__/unit/nodeviews/OverflowShadowsObserver.ts +153 -0
  473. package/src/plugins/table/__tests__/unit/nodeviews/TableComponent.tsx +388 -0
  474. package/src/plugins/table/__tests__/unit/nodeviews/table.ts +121 -0
  475. package/src/plugins/table/__tests__/unit/pm-plugins/decorations/column-controls.ts +34 -0
  476. package/src/plugins/table/__tests__/unit/pm-plugins/decorations/column-resizing.ts +152 -0
  477. package/src/plugins/table/__tests__/unit/pm-plugins/decorations/plugin.ts +140 -0
  478. package/src/plugins/table/__tests__/unit/pm-plugins/main-with-allow-collapse.ts +100 -0
  479. package/src/plugins/table/__tests__/unit/pm-plugins/main.ts +187 -0
  480. package/src/plugins/table/__tests__/unit/pm-plugins/safari-delete-composition-text-issue-workaround.ts +83 -0
  481. package/src/plugins/table/__tests__/unit/pm-plugins/sticky-headers/tableRow.tsx +603 -0
  482. package/src/plugins/table/__tests__/unit/pm-plugins/table-local-id.ts +515 -0
  483. package/src/plugins/table/__tests__/unit/pm-plugins/table-resizing/colgroup.ts +86 -0
  484. package/src/plugins/table/__tests__/unit/pm-plugins/table-resizing/event-handlers.ts +132 -0
  485. package/src/plugins/table/__tests__/unit/pm-plugins/table-selection-keymap.ts +564 -0
  486. package/src/plugins/table/__tests__/unit/toolbar.ts +240 -0
  487. package/src/plugins/table/__tests__/unit/utils/collapse.ts +74 -0
  488. package/src/plugins/table/__tests__/unit/utils/column-controls.ts +61 -0
  489. package/src/plugins/table/__tests__/visual-regression/__fixtures__/table-with-100-numbered-list-items.json +20272 -0
  490. package/src/plugins/table/__tests__/visual-regression/__image_snapshots__/cell-options-menu-ts-table-cell-options-menu-delete-column-menu-item-should-remove-the-table-column-on-click-1-snap.png +3 -0
  491. package/src/plugins/table/__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 +3 -0
  492. package/src/plugins/table/__tests__/visual-regression/__image_snapshots__/cell-options-menu-ts-table-cell-options-menu-delete-row-menu-item-should-remove-the-table-row-on-click-1-snap.png +3 -0
  493. package/src/plugins/table/__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 +3 -0
  494. package/src/plugins/table/__tests__/visual-regression/__image_snapshots__/copy-button-ts-floating-toolbar-copy-button-table-target-node-displays-blue-border-when-copy-button-is-hovered-1-snap.png +3 -0
  495. package/src/plugins/table/__tests__/visual-regression/__image_snapshots__/index-ts-snapshot-test-table-numbered-list-should-not-overflow-table-cell-when-there-are-more-than-100-ordered-list-items-1-snap.png +3 -0
  496. package/src/plugins/table/__tests__/visual-regression/__image_snapshots__/index-ts-snapshot-test-table-numbered-list-should-not-overflow-table-cell-when-there-are-more-than-100-ordered-list-items-2-snap.png +3 -0
  497. package/src/plugins/table/__tests__/visual-regression/__image_snapshots__/index-ts-snapshot-test-table-numbered-list-should-not-overflow-table-cell-when-there-are-more-than-100-ordered-list-items-3-snap.png +3 -0
  498. package/src/plugins/table/__tests__/visual-regression/cell-options-menu.ts +97 -0
  499. package/src/plugins/table/__tests__/visual-regression/index.ts +42 -0
  500. package/src/plugins/table/commands/clear.ts +58 -0
  501. package/src/plugins/table/commands/collapse.ts +16 -0
  502. package/src/plugins/table/commands/go-to-next-cell.ts +56 -0
  503. package/src/plugins/table/commands/hover.ts +192 -0
  504. package/src/plugins/table/commands/index.ts +40 -0
  505. package/src/plugins/table/commands/insert.ts +174 -0
  506. package/src/plugins/table/commands/misc.ts +506 -0
  507. package/src/plugins/table/commands/selection.ts +406 -0
  508. package/src/plugins/table/commands/sort.ts +109 -0
  509. package/src/plugins/table/commands/split-cell.ts +28 -0
  510. package/src/plugins/table/commands/toggle.ts +93 -0
  511. package/src/plugins/table/commands-with-analytics.ts +523 -0
  512. package/src/plugins/table/create-plugin-config.ts +18 -0
  513. package/src/plugins/table/event-handlers.ts +514 -0
  514. package/src/plugins/table/handlers.ts +169 -0
  515. package/src/plugins/table/index.tsx +413 -0
  516. package/src/plugins/table/nodeviews/OverflowShadowsObserver.ts +189 -0
  517. package/src/plugins/table/nodeviews/TableComponent.tsx +693 -0
  518. package/src/plugins/table/nodeviews/__mocks__/OverflowShadowsObserver.ts +13 -0
  519. package/src/plugins/table/nodeviews/__mocks__/OverridableMock.ts +21 -0
  520. package/src/plugins/table/nodeviews/table.tsx +241 -0
  521. package/src/plugins/table/nodeviews/tableCell.tsx +110 -0
  522. package/src/plugins/table/nodeviews/types.ts +29 -0
  523. package/src/plugins/table/nodeviews/update-overflow-shadows.ts +72 -0
  524. package/src/plugins/table/pm-plugins/decorations/plugin.ts +74 -0
  525. package/src/plugins/table/pm-plugins/decorations/utils/column-controls.ts +89 -0
  526. package/src/plugins/table/pm-plugins/decorations/utils/column-resizing.ts +46 -0
  527. package/src/plugins/table/pm-plugins/decorations/utils/compose-decorations.ts +11 -0
  528. package/src/plugins/table/pm-plugins/decorations/utils/index.ts +6 -0
  529. package/src/plugins/table/pm-plugins/decorations/utils/types.ts +10 -0
  530. package/src/plugins/table/pm-plugins/default-table-selection.ts +5 -0
  531. package/src/plugins/table/pm-plugins/keymap.ts +108 -0
  532. package/src/plugins/table/pm-plugins/main.ts +399 -0
  533. package/src/plugins/table/pm-plugins/plugin-factory.ts +43 -0
  534. package/src/plugins/table/pm-plugins/plugin-key.ts +4 -0
  535. package/src/plugins/table/pm-plugins/safari-delayed-dom-selection-syncing-workaround.ts +78 -0
  536. package/src/plugins/table/pm-plugins/safari-delete-composition-text-issue-workaround.ts +118 -0
  537. package/src/plugins/table/pm-plugins/sticky-headers/commands.ts +12 -0
  538. package/src/plugins/table/pm-plugins/sticky-headers/index.ts +7 -0
  539. package/src/plugins/table/pm-plugins/sticky-headers/nodeviews/dom.ts +37 -0
  540. package/src/plugins/table/pm-plugins/sticky-headers/nodeviews/tableRow.ts +658 -0
  541. package/src/plugins/table/pm-plugins/sticky-headers/plugin-key.ts +6 -0
  542. package/src/plugins/table/pm-plugins/sticky-headers/plugin-state.ts +55 -0
  543. package/src/plugins/table/pm-plugins/sticky-headers/plugin.ts +36 -0
  544. package/src/plugins/table/pm-plugins/sticky-headers/types.ts +20 -0
  545. package/src/plugins/table/pm-plugins/sticky-headers/util.ts +18 -0
  546. package/src/plugins/table/pm-plugins/table-local-id.ts +203 -0
  547. package/src/plugins/table/pm-plugins/table-resizing/commands.ts +168 -0
  548. package/src/plugins/table/pm-plugins/table-resizing/event-handlers.ts +218 -0
  549. package/src/plugins/table/pm-plugins/table-resizing/index.ts +3 -0
  550. package/src/plugins/table/pm-plugins/table-resizing/plugin-factory.ts +28 -0
  551. package/src/plugins/table/pm-plugins/table-resizing/plugin-key.ts +6 -0
  552. package/src/plugins/table/pm-plugins/table-resizing/plugin.ts +79 -0
  553. package/src/plugins/table/pm-plugins/table-resizing/reducer.ts +40 -0
  554. package/src/plugins/table/pm-plugins/table-resizing/utils/colgroup.ts +58 -0
  555. package/src/plugins/table/pm-plugins/table-resizing/utils/column-state.ts +122 -0
  556. package/src/plugins/table/pm-plugins/table-resizing/utils/content-width.ts +130 -0
  557. package/src/plugins/table/pm-plugins/table-resizing/utils/dom.ts +176 -0
  558. package/src/plugins/table/pm-plugins/table-resizing/utils/index.ts +37 -0
  559. package/src/plugins/table/pm-plugins/table-resizing/utils/misc.ts +136 -0
  560. package/src/plugins/table/pm-plugins/table-resizing/utils/resize-column.ts +23 -0
  561. package/src/plugins/table/pm-plugins/table-resizing/utils/resize-logic.ts +275 -0
  562. package/src/plugins/table/pm-plugins/table-resizing/utils/resize-state.ts +348 -0
  563. package/src/plugins/table/pm-plugins/table-resizing/utils/scale-table.ts +142 -0
  564. package/src/plugins/table/pm-plugins/table-resizing/utils/types.ts +23 -0
  565. package/src/plugins/table/pm-plugins/table-resizing/utils/unit-to-number.ts +2 -0
  566. package/src/plugins/table/pm-plugins/table-selection-keymap.ts +32 -0
  567. package/src/plugins/table/reducer.ts +106 -0
  568. package/src/plugins/table/todo-stubs.ts +1 -0
  569. package/src/plugins/table/toolbar.ts +401 -0
  570. package/src/plugins/table/transforms/column-width.ts +187 -0
  571. package/src/plugins/table/transforms/delete-columns.ts +251 -0
  572. package/src/plugins/table/transforms/delete-rows.ts +150 -0
  573. package/src/plugins/table/transforms/fix-tables.ts +296 -0
  574. package/src/plugins/table/transforms/index.ts +7 -0
  575. package/src/plugins/table/transforms/merge.ts +312 -0
  576. package/src/plugins/table/transforms/metadata.ts +35 -0
  577. package/src/plugins/table/transforms/replace-table.ts +48 -0
  578. package/src/plugins/table/transforms/split.ts +99 -0
  579. package/src/plugins/table/types.ts +345 -0
  580. package/src/plugins/table/ui/FloatingContextualButton/index.tsx +196 -0
  581. package/src/plugins/table/ui/FloatingContextualButton/styles.ts +29 -0
  582. package/src/plugins/table/ui/FloatingContextualMenu/ContextualMenu.tsx +524 -0
  583. package/src/plugins/table/ui/FloatingContextualMenu/__tests__/ContextualMenu.tsx +55 -0
  584. package/src/plugins/table/ui/FloatingContextualMenu/__tests__/FloatingContextualMenu.tsx +49 -0
  585. package/src/plugins/table/ui/FloatingContextualMenu/index.tsx +131 -0
  586. package/src/plugins/table/ui/FloatingContextualMenu/styles.ts +53 -0
  587. package/src/plugins/table/ui/FloatingDeleteButton/DeleteButton.tsx +49 -0
  588. package/src/plugins/table/ui/FloatingDeleteButton/getPopUpOptions.ts +75 -0
  589. package/src/plugins/table/ui/FloatingDeleteButton/index.tsx +384 -0
  590. package/src/plugins/table/ui/FloatingDeleteButton/types.ts +1 -0
  591. package/src/plugins/table/ui/FloatingInsertButton/InsertButton.tsx +132 -0
  592. package/src/plugins/table/ui/FloatingInsertButton/getPopupOptions.ts +122 -0
  593. package/src/plugins/table/ui/FloatingInsertButton/index.tsx +268 -0
  594. package/src/plugins/table/ui/LayoutButton/index.tsx +220 -0
  595. package/src/plugins/table/ui/TableFloatingControls/CornerControls/index.tsx +105 -0
  596. package/src/plugins/table/ui/TableFloatingControls/NumberColumn/index.tsx +108 -0
  597. package/src/plugins/table/ui/TableFloatingControls/RowControls/index.tsx +119 -0
  598. package/src/plugins/table/ui/TableFloatingControls/index.tsx +202 -0
  599. package/src/plugins/table/ui/common-styles.ts +726 -0
  600. package/src/plugins/table/ui/consts.ts +100 -0
  601. package/src/plugins/table/ui/messages.ts +43 -0
  602. package/src/plugins/table/ui/ui-styles.ts +459 -0
  603. package/src/plugins/table/utils/analytics.ts +81 -0
  604. package/src/plugins/table/utils/collapse.ts +99 -0
  605. package/src/plugins/table/utils/column-controls.ts +225 -0
  606. package/src/plugins/table/utils/decoration.ts +456 -0
  607. package/src/plugins/table/utils/dom.ts +211 -0
  608. package/src/plugins/table/utils/get-allow-add-column-custom-step.ts +11 -0
  609. package/src/plugins/table/utils/index.ts +69 -0
  610. package/src/plugins/table/utils/nodes.ts +140 -0
  611. package/src/plugins/table/utils/paste.ts +164 -0
  612. package/src/plugins/table/utils/referentiality.ts +24 -0
  613. package/src/plugins/table/utils/row-controls.ts +238 -0
  614. package/src/plugins/table/utils/selection.ts +107 -0
  615. package/src/plugins/table/utils/table.ts +31 -0
  616. package/src/plugins/table/utils/update-plugin-state-decorations.ts +14 -0
  617. package/src/plugins/table-plugin.ts +1 -38
@@ -0,0 +1,178 @@
1
+ import { TableMap } from '@atlaskit/editor-tables/table-map';
2
+ import { CellSelection } from '@atlaskit/editor-tables/cell-selection';
3
+ import { findDomRefAtPos } from 'prosemirror-utils';
4
+ import { findTable, getCellsInColumn, getSelectionRect, isColumnSelected, isTableSelected } from '@atlaskit/editor-tables/utils';
5
+ // import { maphElem } from '@atlaskit/editor-core/src/utils/dom';
6
+ import { maphElem } from '@atlaskit/editor-common/utils';
7
+ import { TableCssClassName as ClassName } from '../types';
8
+ import { tableDeleteButtonSize } from '../ui/consts';
9
+ export const getColumnsWidths = view => {
10
+ const {
11
+ selection
12
+ } = view.state;
13
+ let widths = [];
14
+ const table = findTable(selection);
15
+
16
+ if (table) {
17
+ const map = TableMap.get(table.node);
18
+ const domAtPos = view.domAtPos.bind(view); // When there is no cell we need to fill it with undefined
19
+
20
+ widths = Array.from({
21
+ length: map.width
22
+ });
23
+
24
+ for (let i = 0; i < map.width; i++) {
25
+ const cells = getCellsInColumn(i)(selection);
26
+ const cell = cells[0];
27
+
28
+ if (cell) {
29
+ const cellRef = findDomRefAtPos(cell.pos, domAtPos);
30
+ const rect = cellRef.getBoundingClientRect();
31
+ widths[i] = (rect ? rect.width : cellRef.offsetWidth) + 1;
32
+ i += cell.node.attrs.colspan - 1;
33
+ }
34
+ }
35
+ }
36
+
37
+ return widths;
38
+ };
39
+ export const isColumnDeleteButtonVisible = selection => {
40
+ if (!isTableSelected(selection) && selection instanceof CellSelection && selection.isColSelection()) {
41
+ return true;
42
+ }
43
+
44
+ return false;
45
+ };
46
+ export const getColumnDeleteButtonParams = (columnsWidths, selection) => {
47
+ const rect = getSelectionRect(selection);
48
+
49
+ if (!rect) {
50
+ return null;
51
+ }
52
+
53
+ let width = 0;
54
+ let offset = 0; // find the columns before the selection
55
+
56
+ for (let i = 0; i < rect.left; i++) {
57
+ const colWidth = columnsWidths[i];
58
+
59
+ if (colWidth) {
60
+ offset += colWidth - 1;
61
+ }
62
+ } // these are the selected columns widths
63
+
64
+
65
+ const indexes = [];
66
+
67
+ for (let i = rect.left; i < rect.right; i++) {
68
+ const colWidth = columnsWidths[i];
69
+
70
+ if (colWidth) {
71
+ width += colWidth;
72
+ indexes.push(i);
73
+ }
74
+ }
75
+
76
+ const left = offset + width / 2 - tableDeleteButtonSize / 2;
77
+ return {
78
+ left,
79
+ indexes
80
+ };
81
+ };
82
+ export const getColumnClassNames = (index, selection, hoveredColumns = [], isInDanger, isResizing) => {
83
+ const classNames = [];
84
+
85
+ if (isColumnSelected(index)(selection) || hoveredColumns.indexOf(index) > -1 && !isResizing) {
86
+ classNames.push(ClassName.HOVERED_CELL_ACTIVE);
87
+
88
+ if (isInDanger) {
89
+ classNames.push(ClassName.HOVERED_CELL_IN_DANGER);
90
+ }
91
+ }
92
+
93
+ return classNames.join(' ');
94
+ }; // give a row colspan and a colwidths
95
+ // and map to a row's colwidths
96
+
97
+ const mapTableColwidthsToRow = (rowColSpans, tableColWidths) => {
98
+ let curColIdx = 0;
99
+ const colWidths = [];
100
+ rowColSpans.forEach(cellColSpan => {
101
+ const colWidth = tableColWidths.slice(curColIdx, curColIdx + cellColSpan).reduce((acc, val) => acc + val, 0);
102
+ curColIdx += cellColSpan;
103
+ colWidths.push(colWidth);
104
+ });
105
+ return colWidths;
106
+ };
107
+
108
+ const getRelativeDomCellWidths = ({
109
+ width,
110
+ colspan,
111
+ colwidth
112
+ }) => {
113
+ // For cells with colSpan 1
114
+ // or
115
+ // for cells in a table with unchanged column widths,
116
+ // these are identified by the lack of colwidth data attribute,
117
+ // return equally partitioned total cell width in DOM for each cell.
118
+ if (colspan <= 1 || !colwidth) {
119
+ return new Array(colspan).fill(width / colspan);
120
+ } // For cells that have colSpan > 1 and
121
+ // are part of a table with resized columns
122
+ // return the current total DOM width of the cell multiplied
123
+ // by the percentage of the each individual cell's size.
124
+ // The cell size percentage is calculated using individual colwidth of the cell,
125
+ // from data-colwidth attribute on the cell,
126
+ // divided by the total width of the cells from colwidths for merged cells.
127
+ // Ex:
128
+ // colwidth = ‘201,102’
129
+ // Total colWidth = 303
130
+ // returned cellWidths = [303 * (201/303), 303 * (102/303)]
131
+ // For merged cells we get back colwidth as `201,102`
132
+
133
+
134
+ const cellColWidths = colwidth.split(',').map(colwidth => Number(colwidth));
135
+ const totalCalculatedCellWidth = cellColWidths.reduce((acc, cellColWidth) => acc + cellColWidth, 0);
136
+ return cellColWidths.map(cellColWidth => width * (cellColWidth / totalCalculatedCellWidth));
137
+ };
138
+
139
+ export const colWidthsForRow = (colGroup, tr) => {
140
+ // get the colspans
141
+ const rowColSpans = maphElem(tr, cell => Number(cell.getAttribute('colspan') || 1
142
+ /* default to span of 1 */
143
+ )); // Chrome has trouble aligning borders with auto tables
144
+ // and the rest of the page grid. tables with defined
145
+ // column widths align fine.
146
+ //
147
+ // eg a 4x25% table might end up as 189px 190px 190px 190px
148
+ //
149
+ // prefer copying the widths via the DOM
150
+ // or inferring from the next row if one exists
151
+
152
+ const copyTarget = tr.nextElementSibling || tr;
153
+
154
+ if (copyTarget) {
155
+ // either from the first row while it's still in the table
156
+ const cellInfos = maphElem(copyTarget, cell => ({
157
+ width: cell.offsetWidth,
158
+ colspan: Number(cell.getAttribute('colspan') || 1),
159
+ colwidth: cell.dataset.colwidth
160
+ })); // reverse engineer cell widths from table widths
161
+
162
+ let domBasedCellWidths = [];
163
+ cellInfos.map((cell, idx) => {
164
+ domBasedCellWidths.push(...getRelativeDomCellWidths(cell));
165
+ });
166
+
167
+ if (cellInfos.reduce((acc, cell) => acc + cell.width, 0) !== 0) {
168
+ const newWidths = mapTableColwidthsToRow(rowColSpans, domBasedCellWidths);
169
+ return newWidths.map(px => `${px}px`).join(' ');
170
+ }
171
+ } // as a fallback, just calculate a %, and hope that
172
+ // it aligns perfectly in the user's browser
173
+
174
+
175
+ const visualColCount = rowColSpans.reduce((acc, val) => acc + val, 0);
176
+ const pctWidths = rowColSpans.map(cellColSpan => cellColSpan / visualColCount * 100);
177
+ return pctWidths.map(pct => `${pct}%`).join(' ');
178
+ };
@@ -0,0 +1,346 @@
1
+ import { TableMap } from '@atlaskit/editor-tables/table-map';
2
+ import { findTable, getCellsInRow, getSelectionRect } from '@atlaskit/editor-tables/utils';
3
+ import { Decoration } from 'prosemirror-view';
4
+ // import { nonNullable } from '@atlaskit/editor-core/src/utils';
5
+ import { nonNullable } from '@atlaskit/editor-common/utils';
6
+ import { TableCssClassName as ClassName, TableDecorations } from '../types';
7
+
8
+ const filterDecorationByKey = (key, decorationSet) => decorationSet.find(undefined, undefined, spec => spec.key.indexOf(key) > -1);
9
+
10
+ export const findColumnControlSelectedDecoration = decorationSet => filterDecorationByKey(TableDecorations.COLUMN_SELECTED, decorationSet);
11
+ export const findControlsHoverDecoration = decorationSet => filterDecorationByKey(TableDecorations.ALL_CONTROLS_HOVER, decorationSet);
12
+ export const createCellHoverDecoration = (cells, type) => cells.map(cell => Decoration.node(cell.pos, cell.pos + cell.node.nodeSize, {
13
+ class: ClassName.HOVERED_CELL_WARNING
14
+ }, {
15
+ key: TableDecorations.CELL_CONTROLS_HOVER
16
+ }));
17
+ export const createControlsHoverDecoration = (cells, type, danger, selected) => cells.map(cell => {
18
+ const classes = [ClassName.HOVERED_CELL];
19
+
20
+ if (danger) {
21
+ classes.push(ClassName.HOVERED_CELL_IN_DANGER);
22
+ }
23
+
24
+ if (selected) {
25
+ classes.push(ClassName.SELECTED_CELL);
26
+ }
27
+
28
+ classes.push(type === 'column' ? ClassName.HOVERED_COLUMN : type === 'row' ? ClassName.HOVERED_ROW : ClassName.HOVERED_TABLE);
29
+ let key;
30
+
31
+ switch (type) {
32
+ case 'row':
33
+ key = TableDecorations.ROW_CONTROLS_HOVER;
34
+ break;
35
+
36
+ case 'column':
37
+ key = TableDecorations.COLUMN_CONTROLS_HOVER;
38
+ break;
39
+
40
+ default:
41
+ key = TableDecorations.TABLE_CONTROLS_HOVER;
42
+ break;
43
+ }
44
+
45
+ return Decoration.node(cell.pos, cell.pos + cell.node.nodeSize, {
46
+ class: classes.join(' ')
47
+ }, {
48
+ key
49
+ });
50
+ });
51
+ export const createColumnSelectedDecoration = tr => {
52
+ const {
53
+ selection,
54
+ doc
55
+ } = tr;
56
+ const table = findTable(selection);
57
+ const rect = getSelectionRect(selection);
58
+
59
+ if (!table || !rect) {
60
+ return [];
61
+ }
62
+
63
+ const map = TableMap.get(table.node);
64
+ const cellPositions = map.cellsInRect(rect);
65
+ return cellPositions.map((pos, index) => {
66
+ const cell = doc.nodeAt(pos + table.start);
67
+ return Decoration.node(pos + table.start, pos + table.start + cell.nodeSize, {
68
+ class: ClassName.COLUMN_SELECTED
69
+ }, {
70
+ key: `${TableDecorations.COLUMN_SELECTED}_${index}`
71
+ });
72
+ });
73
+ };
74
+ export const createColumnControlsDecoration = selection => {
75
+ const cells = getCellsInRow(0)(selection) || [];
76
+ let index = 0;
77
+ return cells.map(cell => {
78
+ const colspan = cell.node.attrs.colspan || 1;
79
+ const element = document.createElement('div');
80
+ element.classList.add(ClassName.COLUMN_CONTROLS_DECORATIONS);
81
+ element.dataset.startIndex = `${index}`;
82
+ index += colspan;
83
+ element.dataset.endIndex = `${index}`;
84
+ return Decoration.widget(cell.pos + 1, () => element, {
85
+ key: `${TableDecorations.COLUMN_CONTROLS_DECORATIONS}_${index}`,
86
+ // this decoration should be the first one, even before gap cursor.
87
+ side: -100
88
+ });
89
+ });
90
+ };
91
+ export const updateDecorations = (node, decorationSet, decorations, key) => {
92
+ const filteredDecorations = filterDecorationByKey(key, decorationSet);
93
+ const decorationSetFiltered = decorationSet.remove(filteredDecorations);
94
+ return decorationSetFiltered.add(node, decorations);
95
+ };
96
+
97
+ const makeArray = n => Array.from(Array(n).keys());
98
+ /*
99
+ * This function will create two specific decorations for each cell in a column index target,
100
+ * for example given that table:
101
+ *
102
+ * ```
103
+ * 0 1 2 3
104
+ * _____________________ _______
105
+ * | | | |
106
+ * | B1 | C1 | A1 |
107
+ * |______|______ ______|______|
108
+ * | | | |
109
+ * | B2 | | A2 |
110
+ * |______ ______| |______|
111
+ * | | | D1 | |
112
+ * | B3 | C2 | | A3 |
113
+ * |______|______|______|______|
114
+ * ^ ^ ^ ^
115
+ * | | | |
116
+ * | | | |
117
+ * | | | |
118
+ * 0 1 3 4
119
+ * \ | | /
120
+ * \ | | /
121
+ * \ | | /
122
+ * \ | | /
123
+ * \ | | /
124
+ * columnEndIndexTarget === CellColumnPositioning.right
125
+ * ```
126
+ *
127
+ * When a user wants to resize a cell,
128
+ * they need to grab and hold the end of that column,
129
+ * and this will be the `columnEndIndexTarget` using
130
+ * the CellColumnPositioning interface.
131
+ *
132
+ * Let's say the `columnEndIndexTarget.right` is 3,
133
+ * so this function will return two types of decorations for each cell on that column,
134
+ * that means 2 `resizerHandle` and 2 `lastCellElement`,
135
+ * here is the explanation for each one of them :
136
+ *
137
+ * - resizerHandle:
138
+ *
139
+ * Given the cell C1, this decoration will add a div to create this area
140
+ * ```
141
+ * ▁▁▁▁▁▁▁▁▁▁▁▁▁
142
+ * | ▒▒|
143
+ * | C1 ▒▒|
144
+ * | ▒▒|
145
+ * ▔▔▔▔▔▔▔▔▔▔▔▔▔
146
+ * ```
147
+ * This ▒ represents the area where table resizing will start,
148
+ * and you can follow that using checking the class name `ClassName.RESIZE_HANDLE_DECORATION` on the code
149
+ *
150
+ * - lastCellElementDecoration
151
+ *
152
+ * Given the content of the cell C1
153
+ * ▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁
154
+ * | |
155
+ * | _____________ |
156
+ * | | | |
157
+ * | | <p> | |
158
+ * | |_____________| |
159
+ * | |
160
+ * | _____________ |
161
+ * | | | |
162
+ * | | <media> | |
163
+ * | |_____________| |
164
+ * | |
165
+ * | _____________ |
166
+ * | | | |
167
+ * | | <media> | |
168
+ * | |_____________| |
169
+ * | |
170
+ * ▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
171
+ * Currently, we are removing the margin-bottom from the last media using this kind of CSS rule:
172
+ * `div:last-of-type`; This is quite unstable, and after we create the `resizerHandle` div,
173
+ * that logic will apply the margin in the wrong element, to avoid that,
174
+ * we will add a new class on the last item for each cell,
175
+ * hence the second media will receive this class `ClassName.LAST_ITEM_IN_CELL`
176
+ */
177
+
178
+
179
+ export const createResizeHandleDecoration = (tr, columnEndIndexTarget) => {
180
+ const emptyResult = [[], []];
181
+ const table = findTable(tr.selection);
182
+
183
+ if (!table || !table.node) {
184
+ return emptyResult;
185
+ }
186
+
187
+ const map = TableMap.get(table.node);
188
+
189
+ if (!map.width) {
190
+ return emptyResult;
191
+ }
192
+
193
+ const createResizerHandleDecoration = (cellColumnPositioning, columnIndex, rowIndex, cellPos, cellNode) => {
194
+ const element = document.createElement('div');
195
+ element.classList.add(ClassName.RESIZE_HANDLE_DECORATION);
196
+ element.dataset.startIndex = `${cellColumnPositioning.left}`;
197
+ element.dataset.endIndex = `${cellColumnPositioning.right}`;
198
+ const position = cellPos + cellNode.nodeSize - 1;
199
+ return Decoration.widget(position, element, {
200
+ key: `${TableDecorations.COLUMN_RESIZING_HANDLE}_${rowIndex}_${columnIndex}`
201
+ });
202
+ };
203
+
204
+ const createLastCellElementDecoration = (cellColumnPositioning, cellPos, cellNode) => {
205
+ let lastItemPositions;
206
+ cellNode.forEach((childNode, offset, index) => {
207
+ if (index === cellNode.childCount - 1) {
208
+ const from = offset + cellPos + 1;
209
+ lastItemPositions = {
210
+ from,
211
+ to: from + childNode.nodeSize
212
+ };
213
+ }
214
+ });
215
+
216
+ if (!lastItemPositions) {
217
+ return null;
218
+ }
219
+
220
+ return Decoration.node(lastItemPositions.from, lastItemPositions.to, {
221
+ class: ClassName.LAST_ITEM_IN_CELL
222
+ }, {
223
+ key: `${TableDecorations.LAST_CELL_ELEMENT}_${cellColumnPositioning.left}_${cellColumnPositioning.right}`
224
+ });
225
+ };
226
+
227
+ const resizeHandleCellDecorations = [];
228
+ const lastCellElementsDecorations = [];
229
+
230
+ for (let rowIndex = 0; rowIndex < map.height; rowIndex++) {
231
+ const seen = {};
232
+
233
+ for (let columnIndex = 0; columnIndex < map.width; columnIndex++) {
234
+ const cellPosition = map.map[map.width * rowIndex + columnIndex];
235
+
236
+ if (seen[cellPosition]) {
237
+ continue;
238
+ }
239
+
240
+ seen[cellPosition] = true;
241
+ const cellPos = table.start + cellPosition;
242
+ const cell = tr.doc.nodeAt(cellPos);
243
+
244
+ if (!cell) {
245
+ continue;
246
+ }
247
+
248
+ const colspan = cell.attrs.colspan || 1;
249
+ const startIndex = columnIndex;
250
+ const endIndex = colspan + startIndex;
251
+
252
+ if (endIndex !== columnEndIndexTarget.right) {
253
+ continue;
254
+ }
255
+
256
+ const resizerHandleDec = createResizerHandleDecoration({
257
+ left: startIndex,
258
+ right: endIndex
259
+ }, columnIndex, rowIndex, cellPos, cell);
260
+ const lastCellDec = createLastCellElementDecoration({
261
+ left: startIndex,
262
+ right: endIndex
263
+ }, cellPos, cell);
264
+ resizeHandleCellDecorations.push(resizerHandleDec);
265
+ lastCellElementsDecorations.push(lastCellDec);
266
+ }
267
+ }
268
+
269
+ return [resizeHandleCellDecorations, lastCellElementsDecorations.filter(nonNullable)];
270
+ };
271
+ /*
272
+ * This function will create a decoration for each cell using the right position on the CellColumnPositioning
273
+ * for example given that table:
274
+ *
275
+ * ```
276
+ * 0 1 2 3 <--- column indexes
277
+ * _____________________ _______
278
+ * | | | |
279
+ * | B1 | C1 | A1 |
280
+ * |______|______ ______|______|
281
+ * | | | |
282
+ * | B2 | D1 | A2 |
283
+ * |______ ______|______|______|
284
+ * | | | |
285
+ * | B3 | C2 | D2 |
286
+ * |______|______|_____________|
287
+ * ```
288
+ *
289
+ * and given the left and right represents the C1 cell:
290
+ *
291
+ * ```
292
+ * left right
293
+ * 1 3
294
+ * | |
295
+ * | |
296
+ * | |
297
+ * _______∨_____________∨_______
298
+ * | | | |
299
+ * | B1 | C1 | A1 |
300
+ * |______|______ ______|______|
301
+ * | | | |
302
+ * | B2 | D1 | A2 |
303
+ * |______ ______|______|______|
304
+ * | | | |
305
+ * | B3 | C2 | D2 |
306
+ * |______|______|_____________|
307
+ * ```
308
+ *
309
+ * Taking that table, and the right as parameters,
310
+ * this function will return two decorations applying a new class `ClassName.WITH_RESIZE_LINE`
311
+ * only on the cells: `C1` and `D1`.
312
+ */
313
+
314
+ export const createColumnLineResize = (selection, cellColumnPositioning) => {
315
+ const table = findTable(selection);
316
+
317
+ if (!table || cellColumnPositioning.right === null) {
318
+ return [];
319
+ }
320
+
321
+ const columnIndex = cellColumnPositioning.right - 1;
322
+ const map = TableMap.get(table.node);
323
+ const cellPositions = makeArray(map.height).map(rowIndex => map.map[map.width * rowIndex + columnIndex]).filter((cellPosition, rowIndex) => {
324
+ if (columnIndex === map.width) {
325
+ return true; // If is the last column no filter applied
326
+ }
327
+
328
+ const nextPosition = map.map[map.width * rowIndex + columnIndex + 1];
329
+ return cellPosition !== nextPosition; // Removed it if next position is merged
330
+ });
331
+ const cells = cellPositions.map(pos => ({
332
+ pos: pos + table.start,
333
+ node: table.node.nodeAt(pos)
334
+ }));
335
+ return cells.map((cell, index) => {
336
+ if (!cell || !cell.node) {
337
+ return;
338
+ }
339
+
340
+ return Decoration.node(cell.pos, cell.pos + cell.node.nodeSize, {
341
+ class: ClassName.WITH_RESIZE_LINE
342
+ }, {
343
+ key: `${TableDecorations.COLUMN_RESIZING_HANDLE_LINE}_${cellColumnPositioning.right}_${index}`
344
+ });
345
+ }).filter(nonNullable);
346
+ };
@@ -0,0 +1,160 @@
1
+ // import { containsClassName } from '@atlaskit/editor-core/src/utils';
2
+ // import { closestElement } from '@atlaskit/editor-core/src/utils/dom';
3
+ import { closestElement, containsClassName } from '@atlaskit/editor-common/utils';
4
+ import { TableCssClassName as ClassName } from '../types';
5
+ import { tableToolbarSize } from '../ui/consts';
6
+ const SELECTOR_TABLE_LEAFS = `.${ClassName.TABLE_CELL}, .${ClassName.TABLE_HEADER_CELL}`;
7
+ export const isCell = node => {
8
+ return Boolean(node && (['TH', 'TD'].indexOf(node.tagName) > -1 || !!closestElement(node, `.${ClassName.TABLE_HEADER_CELL}`) || !!closestElement(node, `.${ClassName.TABLE_CELL}`)));
9
+ };
10
+ export const isCornerButton = node => containsClassName(node, ClassName.CONTROLS_CORNER_BUTTON);
11
+ export const isInsertRowButton = node => containsClassName(node, ClassName.CONTROLS_INSERT_ROW) || closestElement(node, `.${ClassName.CONTROLS_INSERT_ROW}`) || containsClassName(node, ClassName.CONTROLS_BUTTON_OVERLAY) && closestElement(node, `.${ClassName.ROW_CONTROLS}`);
12
+ export const getColumnOrRowIndex = target => [parseInt(target.getAttribute('data-start-index') || '-1', 10), parseInt(target.getAttribute('data-end-index') || '-1', 10)];
13
+ export const isColumnControlsDecorations = node => containsClassName(node, ClassName.COLUMN_CONTROLS_DECORATIONS);
14
+ export const isRowControlsButton = node => containsClassName(node, ClassName.ROW_CONTROLS_BUTTON) || containsClassName(node, ClassName.NUMBERED_COLUMN_BUTTON);
15
+ export const isResizeHandleDecoration = node => containsClassName(node, ClassName.RESIZE_HANDLE_DECORATION);
16
+ export const isTableControlsButton = node => containsClassName(node, ClassName.CONTROLS_BUTTON) || containsClassName(node, ClassName.ROW_CONTROLS_BUTTON_WRAP);
17
+ export const isTableContainerOrWrapper = node => containsClassName(node, ClassName.TABLE_CONTAINER) || containsClassName(node, ClassName.TABLE_NODE_WRAPPER);
18
+ /*
19
+ * This function returns which side of a given element the mouse cursor is,
20
+ * using as a base the half of the width by default, for example:
21
+ *
22
+ * legend
23
+ * ⌖ = mouse pointer
24
+ * ▒ = gap
25
+ *
26
+ * given this box:
27
+ * ┏━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━┓
28
+ * ┃ ┊ ┃
29
+ * ┃ left ┊ right ┃
30
+ * ┃ ┊ ┃
31
+ * ┗━━━━━━━━━━━━━━━━━━━━┻━━━━━━━━━━━━━━━━━━━━━┛
32
+ *
33
+ * if the mouse is on the left, it will return `left`,
34
+ * if it is on the right it will return `right`.
35
+ *
36
+ * You can extend this behavior using the parameter `gapInPixels`
37
+ * to determinate if the mouse is inside of a gap for each side,
38
+ * for example:
39
+ *
40
+ * given `gapInPixels` is `5`
41
+ * and given this box:
42
+ * ┏━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━┓
43
+ * ┃▒▒▒▒▒ ┊ ▒▒▒▒▒┃
44
+ * ┃▒▒▒▒▒ left ┊ right ▒▒▒▒▒┃
45
+ * ┃▒▒▒▒▒ ┊ ▒▒▒▒▒┃
46
+ * ┗━━━━━━━━━━━━━━━━━━━━┻━━━━━━━━━━━━━━━━━━━━━┛
47
+ *
48
+ * if the mouse cursor is inside of the gap like that:
49
+ *
50
+ * ┏━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━┓
51
+ * ┃▒▒▒▒▒ ┊ ▒▒▒▒▒┃
52
+ * ┃▒▒⌖▒▒ left ┊ right ▒▒▒▒▒┃
53
+ * ┃▒▒▒▒▒ ┊ ▒▒▒▒▒┃
54
+ * ┗━━━━━━━━━━━━━━━━━━━━┻━━━━━━━━━━━━━━━━━━━━━┛
55
+ *
56
+ * the function will return `left` because the mouse is inside of the gap on the left side.
57
+ *
58
+ * if the mouse cursor is outside of the gap like that:
59
+ *
60
+ * ┏━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━┓
61
+ * ┃▒▒▒▒▒ ┊ ▒▒▒▒▒┃
62
+ * ┃▒▒▒▒▒ left ⌖ ┊ right ▒▒▒▒▒┃
63
+ * ┃▒▒▒▒▒ ┊ ▒▒▒▒▒┃
64
+ * ┗━━━━━━━━━━━━━━━━━━━━┻━━━━━━━━━━━━━━━━━━━━━┛
65
+ *
66
+ * the function will return `null` because the mouse is inside of left
67
+ * but is outside of the gap.
68
+ *
69
+ * the same is valid to the right side.
70
+ */
71
+
72
+ export const getMousePositionHorizontalRelativeByElement = (mouseEvent, mouseMoveOptimization, elementContentRects, gapInPixels) => {
73
+ const element = mouseEvent.target;
74
+
75
+ if (element instanceof HTMLElement) {
76
+ let width, x;
77
+ const closestCell = element.closest(SELECTOR_TABLE_LEAFS);
78
+
79
+ if (mouseMoveOptimization) {
80
+ var _closestCell$id, _elementContentRects$, _elementContentRects$2;
81
+
82
+ const id = (_closestCell$id = closestCell === null || closestCell === void 0 ? void 0 : closestCell.id) !== null && _closestCell$id !== void 0 ? _closestCell$id : '';
83
+ width = (_elementContentRects$ = elementContentRects === null || elementContentRects === void 0 ? void 0 : (_elementContentRects$2 = elementContentRects[id]) === null || _elementContentRects$2 === void 0 ? void 0 : _elementContentRects$2.width) !== null && _elementContentRects$ !== void 0 ? _elementContentRects$ : 0;
84
+ x = mouseEvent.offsetX;
85
+ } else {
86
+ const elementRect = element.getBoundingClientRect();
87
+ width = elementRect.width;
88
+ const left = elementRect.left;
89
+ x = mouseEvent.clientX - left;
90
+ }
91
+
92
+ if (width <= 0) {
93
+ return null;
94
+ }
95
+
96
+ if (!gapInPixels) {
97
+ return x / width > 0.5 ? 'right' : 'left';
98
+ } else {
99
+ if (x <= gapInPixels) {
100
+ return 'left';
101
+ } else if (x >= width - gapInPixels) {
102
+ return 'right';
103
+ }
104
+ }
105
+ }
106
+
107
+ return null;
108
+ };
109
+ export const getMousePositionVerticalRelativeByElement = mouseEvent => {
110
+ const element = mouseEvent.target;
111
+
112
+ if (element instanceof HTMLElement) {
113
+ const elementRect = element.getBoundingClientRect();
114
+
115
+ if (elementRect.height <= 0) {
116
+ return null;
117
+ }
118
+
119
+ const y = mouseEvent.clientY - elementRect.top;
120
+ return y / elementRect.height > 0.5 ? 'bottom' : 'top';
121
+ }
122
+
123
+ return null;
124
+ };
125
+ export const updateResizeHandles = tableRef => {
126
+ if (!tableRef) {
127
+ return;
128
+ }
129
+
130
+ const height = tableRef.offsetHeight + tableToolbarSize; // see ED-7600
131
+
132
+ const nodes = Array.from(tableRef.querySelectorAll(`.${ClassName.RESIZE_HANDLE}`));
133
+
134
+ if (!nodes || !nodes.length) {
135
+ return;
136
+ }
137
+
138
+ nodes.forEach(node => {
139
+ node.style.height = `${height}px`;
140
+ });
141
+ };
142
+ export const hasResizeHandler = ({
143
+ columnEndIndexTarget,
144
+ target
145
+ }) => {
146
+ const tableElement = closestElement(target, 'table');
147
+
148
+ if (!tableElement) {
149
+ return false;
150
+ }
151
+
152
+ const query = [`.${ClassName.RESIZE_HANDLE_DECORATION}`, `[data-end-index="${columnEndIndexTarget}"]`];
153
+ const decorationElement = tableElement.querySelectorAll(query.join(''));
154
+
155
+ if (!decorationElement || decorationElement.length === 0) {
156
+ return false;
157
+ }
158
+
159
+ return true;
160
+ };
@@ -0,0 +1,5 @@
1
+ import { getPluginState } from '../pm-plugins/plugin-factory';
2
+ export function getAllowAddColumnCustomStep(state) {
3
+ const tablePluginState = getPluginState(state);
4
+ return Boolean(tablePluginState) && Boolean(tablePluginState.pluginConfig.allowAddColumnWithCustomStep);
5
+ }