@ckeditor/ckeditor5-table 47.6.1 → 48.0.0-alpha.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 (505) hide show
  1. package/LICENSE.md +1 -1
  2. package/ckeditor5-metadata.json +35 -22
  3. package/{src → dist}/augmentation.d.ts +2 -30
  4. package/{src → dist}/commands/insertcolumncommand.d.ts +1 -1
  5. package/{src → dist}/commands/insertrowcommand.d.ts +1 -1
  6. package/{src → dist}/commands/inserttablecommand.d.ts +5 -1
  7. package/{src → dist}/commands/inserttablelayoutcommand.d.ts +1 -1
  8. package/{src → dist}/commands/mergecellcommand.d.ts +3 -3
  9. package/{src → dist}/commands/mergecellscommand.d.ts +1 -1
  10. package/{src → dist}/commands/removecolumncommand.d.ts +1 -1
  11. package/{src → dist}/commands/removerowcommand.d.ts +1 -1
  12. package/{src → dist}/commands/selectcolumncommand.d.ts +1 -1
  13. package/{src → dist}/commands/selectrowcommand.d.ts +1 -1
  14. package/dist/commands/setfooterrowcommand.d.ts +53 -0
  15. package/{src → dist}/commands/setheadercolumncommand.d.ts +1 -1
  16. package/{src → dist}/commands/setheaderrowcommand.d.ts +1 -1
  17. package/{src → dist}/commands/splitcellcommand.d.ts +1 -1
  18. package/{src → dist}/converters/downcast.d.ts +3 -3
  19. package/{src → dist}/converters/table-caption-post-fixer.d.ts +1 -1
  20. package/{src → dist}/converters/table-cell-paragraph-post-fixer.d.ts +1 -1
  21. package/{src → dist}/converters/table-cell-refresh-handler.d.ts +1 -1
  22. package/{src → dist}/converters/table-layout-post-fixer.d.ts +1 -1
  23. package/dist/converters/table-structure-post-fixer.d.ts +20 -0
  24. package/{src/converters/table-headings-refresh-handler.d.ts → dist/converters/table-structure-refresh-handler.d.ts} +3 -3
  25. package/{src → dist}/converters/tableproperties.d.ts +11 -2
  26. package/{src → dist}/converters/upcasttable.d.ts +6 -2
  27. package/dist/index-content.css +100 -110
  28. package/dist/index-editor.css +620 -289
  29. package/dist/index.css +692 -585
  30. package/dist/index.css.map +1 -1
  31. package/{src → dist}/index.d.ts +5 -7
  32. package/dist/index.js +11002 -12488
  33. package/dist/index.js.map +1 -1
  34. package/{src → dist}/plaintableoutput.d.ts +1 -1
  35. package/{src → dist}/table.d.ts +2 -2
  36. package/{src → dist}/tablecaption/tablecaptionediting.d.ts +2 -2
  37. package/{src → dist}/tablecaption/tablecaptionui.d.ts +1 -1
  38. package/{src → dist}/tablecaption/toggletablecaptioncommand.d.ts +1 -1
  39. package/{src → dist}/tablecaption/utils.d.ts +1 -1
  40. package/{src → dist}/tablecaption.d.ts +1 -1
  41. package/{src → dist}/tablecellproperties/commands/tablecellbackgroundcolorcommand.d.ts +1 -1
  42. package/{src → dist}/tablecellproperties/commands/tablecellbordercolorcommand.d.ts +2 -2
  43. package/{src → dist}/tablecellproperties/commands/tablecellborderstylecommand.d.ts +2 -2
  44. package/{src → dist}/tablecellproperties/commands/tablecellborderwidthcommand.d.ts +2 -2
  45. package/{src → dist}/tablecellproperties/commands/tablecellheightcommand.d.ts +1 -1
  46. package/{src → dist}/tablecellproperties/commands/tablecellhorizontalalignmentcommand.d.ts +1 -1
  47. package/{src → dist}/tablecellproperties/commands/tablecellpaddingcommand.d.ts +2 -2
  48. package/{src → dist}/tablecellproperties/commands/tablecellpropertycommand.d.ts +2 -2
  49. package/{src → dist}/tablecellproperties/commands/tablecelltypecommand.d.ts +2 -6
  50. package/{src → dist}/tablecellproperties/commands/tablecellverticalalignmentcommand.d.ts +1 -1
  51. package/{src → dist}/tablecellproperties/tablecellpropertiesediting.d.ts +1 -1
  52. package/{src → dist}/tablecellproperties/tablecellpropertiesui.d.ts +2 -2
  53. package/dist/tablecellproperties/tablecellpropertiesutils.d.ts +18 -0
  54. package/{src/tablecellproperties/ui/tablecellpropertiesviewexperimental.d.ts → dist/tablecellproperties/ui/tablecellpropertiesview.d.ts} +11 -13
  55. package/{src → dist}/tablecellproperties.d.ts +1 -1
  56. package/{src → dist}/tablecellwidth/commands/tablecellwidthcommand.d.ts +1 -1
  57. package/{src → dist}/tablecellwidth/tablecellwidthediting.d.ts +1 -1
  58. package/{src → dist}/tableclipboard.d.ts +3 -3
  59. package/{src → dist}/tablecolumnresize/converters.d.ts +1 -1
  60. package/{src → dist}/tablecolumnresize/tablecolumnresizeediting.d.ts +2 -2
  61. package/{src → dist}/tablecolumnresize/tablewidthscommand.d.ts +2 -2
  62. package/{src → dist}/tablecolumnresize/utils.d.ts +2 -2
  63. package/{src → dist}/tablecolumnresize.d.ts +1 -1
  64. package/{src → dist}/tableconfig.d.ts +57 -8
  65. package/{src → dist}/tableediting.d.ts +3 -3
  66. package/{src → dist}/tablekeyboard.d.ts +3 -3
  67. package/{src → dist}/tablelayout/commands/tabletypecommand.d.ts +1 -1
  68. package/{src → dist}/tablelayout/tablelayoutediting.d.ts +1 -1
  69. package/{src → dist}/tablelayout/tablelayoutui.d.ts +1 -1
  70. package/{src → dist}/tablelayout.d.ts +1 -1
  71. package/{src → dist}/tablemouse/mouseeventsobserver.d.ts +1 -1
  72. package/{src → dist}/tablemouse.d.ts +1 -1
  73. package/{src → dist}/tableproperties/commands/tablealignmentcommand.d.ts +1 -1
  74. package/{src → dist}/tableproperties/commands/tablebackgroundcolorcommand.d.ts +1 -1
  75. package/{src → dist}/tableproperties/commands/tablebordercolorcommand.d.ts +2 -2
  76. package/{src → dist}/tableproperties/commands/tableborderstylecommand.d.ts +2 -2
  77. package/{src → dist}/tableproperties/commands/tableborderwidthcommand.d.ts +2 -2
  78. package/{src → dist}/tableproperties/commands/tableheightcommand.d.ts +1 -1
  79. package/{src → dist}/tableproperties/commands/tablepropertycommand.d.ts +2 -2
  80. package/{src → dist}/tableproperties/commands/tablewidthcommand.d.ts +1 -1
  81. package/{src → dist}/tableproperties/tablepropertiesediting.d.ts +1 -1
  82. package/{src → dist}/tableproperties/tablepropertiesui.d.ts +2 -2
  83. package/{src → dist}/tableproperties/ui/tablepropertiesview.d.ts +10 -3
  84. package/{src → dist}/tableproperties.d.ts +1 -1
  85. package/{src → dist}/tableselection.d.ts +2 -2
  86. package/{src → dist}/tabletoolbar.d.ts +2 -2
  87. package/{src → dist}/tableui.d.ts +1 -1
  88. package/{src → dist}/tableutils.d.ts +69 -17
  89. package/{src → dist}/tablewalker.d.ts +1 -1
  90. package/dist/translations/af.js +1 -1
  91. package/dist/translations/af.umd.js +1 -1
  92. package/dist/translations/ar.js +1 -1
  93. package/dist/translations/ar.umd.js +1 -1
  94. package/dist/translations/ast.js +1 -1
  95. package/dist/translations/ast.umd.js +1 -1
  96. package/dist/translations/az.js +1 -1
  97. package/dist/translations/az.umd.js +1 -1
  98. package/dist/translations/be.js +1 -1
  99. package/dist/translations/be.umd.js +1 -1
  100. package/dist/translations/bg.js +1 -1
  101. package/dist/translations/bg.umd.js +1 -1
  102. package/dist/translations/bn.js +1 -1
  103. package/dist/translations/bn.umd.js +1 -1
  104. package/dist/translations/bs.js +1 -1
  105. package/dist/translations/bs.umd.js +1 -1
  106. package/dist/translations/ca.js +1 -1
  107. package/dist/translations/ca.umd.js +1 -1
  108. package/dist/translations/cs.js +1 -1
  109. package/dist/translations/cs.umd.js +1 -1
  110. package/dist/translations/da.js +1 -1
  111. package/dist/translations/da.umd.js +1 -1
  112. package/dist/translations/de-ch.js +1 -1
  113. package/dist/translations/de-ch.umd.js +1 -1
  114. package/dist/translations/de.js +1 -1
  115. package/dist/translations/de.umd.js +1 -1
  116. package/dist/translations/el.js +1 -1
  117. package/dist/translations/el.umd.js +1 -1
  118. package/dist/translations/en-au.js +1 -1
  119. package/dist/translations/en-au.umd.js +1 -1
  120. package/dist/translations/en-gb.js +1 -1
  121. package/dist/translations/en-gb.umd.js +1 -1
  122. package/dist/translations/en.js +1 -1
  123. package/dist/translations/en.umd.js +1 -1
  124. package/dist/translations/eo.js +1 -1
  125. package/dist/translations/eo.umd.js +1 -1
  126. package/dist/translations/es-co.js +1 -1
  127. package/dist/translations/es-co.umd.js +1 -1
  128. package/dist/translations/es.js +1 -1
  129. package/dist/translations/es.umd.js +1 -1
  130. package/dist/translations/et.js +1 -1
  131. package/dist/translations/et.umd.js +1 -1
  132. package/dist/translations/eu.js +1 -1
  133. package/dist/translations/eu.umd.js +1 -1
  134. package/dist/translations/fa.js +1 -1
  135. package/dist/translations/fa.umd.js +1 -1
  136. package/dist/translations/fi.js +1 -1
  137. package/dist/translations/fi.umd.js +1 -1
  138. package/dist/translations/fr.js +1 -1
  139. package/dist/translations/fr.umd.js +1 -1
  140. package/dist/translations/gl.js +1 -1
  141. package/dist/translations/gl.umd.js +1 -1
  142. package/dist/translations/gu.js +1 -1
  143. package/dist/translations/gu.umd.js +1 -1
  144. package/dist/translations/he.js +1 -1
  145. package/dist/translations/he.umd.js +1 -1
  146. package/dist/translations/hi.js +1 -1
  147. package/dist/translations/hi.umd.js +1 -1
  148. package/dist/translations/hr.js +1 -1
  149. package/dist/translations/hr.umd.js +1 -1
  150. package/dist/translations/hu.js +1 -1
  151. package/dist/translations/hu.umd.js +1 -1
  152. package/dist/translations/hy.js +1 -1
  153. package/dist/translations/hy.umd.js +1 -1
  154. package/dist/translations/id.js +1 -1
  155. package/dist/translations/id.umd.js +1 -1
  156. package/dist/translations/it.js +1 -1
  157. package/dist/translations/it.umd.js +1 -1
  158. package/dist/translations/ja.js +1 -1
  159. package/dist/translations/ja.umd.js +1 -1
  160. package/dist/translations/jv.js +1 -1
  161. package/dist/translations/jv.umd.js +1 -1
  162. package/dist/translations/kk.js +1 -1
  163. package/dist/translations/kk.umd.js +1 -1
  164. package/dist/translations/km.js +1 -1
  165. package/dist/translations/km.umd.js +1 -1
  166. package/dist/translations/kn.js +1 -1
  167. package/dist/translations/kn.umd.js +1 -1
  168. package/dist/translations/ko.js +1 -1
  169. package/dist/translations/ko.umd.js +1 -1
  170. package/dist/translations/ku.js +1 -1
  171. package/dist/translations/ku.umd.js +1 -1
  172. package/dist/translations/lt.js +1 -1
  173. package/dist/translations/lt.umd.js +1 -1
  174. package/dist/translations/lv.js +1 -1
  175. package/dist/translations/lv.umd.js +1 -1
  176. package/dist/translations/ms.js +1 -1
  177. package/dist/translations/ms.umd.js +1 -1
  178. package/dist/translations/nb.js +1 -1
  179. package/dist/translations/nb.umd.js +1 -1
  180. package/dist/translations/ne.js +1 -1
  181. package/dist/translations/ne.umd.js +1 -1
  182. package/dist/translations/nl.js +1 -1
  183. package/dist/translations/nl.umd.js +1 -1
  184. package/dist/translations/no.js +1 -1
  185. package/dist/translations/no.umd.js +1 -1
  186. package/dist/translations/oc.js +1 -1
  187. package/dist/translations/oc.umd.js +1 -1
  188. package/dist/translations/pl.js +1 -1
  189. package/dist/translations/pl.umd.js +1 -1
  190. package/dist/translations/pt-br.js +1 -1
  191. package/dist/translations/pt-br.umd.js +1 -1
  192. package/dist/translations/pt.js +1 -1
  193. package/dist/translations/pt.umd.js +1 -1
  194. package/dist/translations/ro.js +1 -1
  195. package/dist/translations/ro.umd.js +1 -1
  196. package/dist/translations/ru.js +1 -1
  197. package/dist/translations/ru.umd.js +1 -1
  198. package/dist/translations/si.js +1 -1
  199. package/dist/translations/si.umd.js +1 -1
  200. package/dist/translations/sk.js +1 -1
  201. package/dist/translations/sk.umd.js +1 -1
  202. package/dist/translations/sl.js +1 -1
  203. package/dist/translations/sl.umd.js +1 -1
  204. package/dist/translations/sq.js +1 -1
  205. package/dist/translations/sq.umd.js +1 -1
  206. package/dist/translations/sr-latn.js +1 -1
  207. package/dist/translations/sr-latn.umd.js +1 -1
  208. package/dist/translations/sr.js +1 -1
  209. package/dist/translations/sr.umd.js +1 -1
  210. package/dist/translations/sv.js +1 -1
  211. package/dist/translations/sv.umd.js +1 -1
  212. package/dist/translations/th.js +1 -1
  213. package/dist/translations/th.umd.js +1 -1
  214. package/dist/translations/ti.js +1 -1
  215. package/dist/translations/ti.umd.js +1 -1
  216. package/dist/translations/tk.js +1 -1
  217. package/dist/translations/tk.umd.js +1 -1
  218. package/dist/translations/tr.js +1 -1
  219. package/dist/translations/tr.umd.js +1 -1
  220. package/dist/translations/tt.js +1 -1
  221. package/dist/translations/tt.umd.js +1 -1
  222. package/dist/translations/ug.js +1 -1
  223. package/dist/translations/ug.umd.js +1 -1
  224. package/dist/translations/uk.js +1 -1
  225. package/dist/translations/uk.umd.js +1 -1
  226. package/dist/translations/ur.js +1 -1
  227. package/dist/translations/ur.umd.js +1 -1
  228. package/dist/translations/uz.js +1 -1
  229. package/dist/translations/uz.umd.js +1 -1
  230. package/dist/translations/vi.js +1 -1
  231. package/dist/translations/vi.umd.js +1 -1
  232. package/dist/translations/zh-cn.js +1 -1
  233. package/dist/translations/zh-cn.umd.js +1 -1
  234. package/dist/translations/zh.js +1 -1
  235. package/dist/translations/zh.umd.js +1 -1
  236. package/{src → dist}/ui/colorinputview.d.ts +2 -2
  237. package/{src → dist}/ui/inserttableview.d.ts +2 -2
  238. package/{src → dist}/utils/common.d.ts +2 -2
  239. package/{src → dist}/utils/structure.d.ts +1 -1
  240. package/{src → dist}/utils/table-properties.d.ts +1 -1
  241. package/{src → dist}/utils/ui/contextualballoon.d.ts +2 -2
  242. package/{src → dist}/utils/ui/table-properties.d.ts +2 -2
  243. package/{src → dist}/utils/ui/widget.d.ts +1 -1
  244. package/package.json +27 -50
  245. package/build/table.js +0 -5
  246. package/build/translations/af.js +0 -1
  247. package/build/translations/ar.js +0 -1
  248. package/build/translations/ast.js +0 -1
  249. package/build/translations/az.js +0 -1
  250. package/build/translations/be.js +0 -1
  251. package/build/translations/bg.js +0 -1
  252. package/build/translations/bn.js +0 -1
  253. package/build/translations/bs.js +0 -1
  254. package/build/translations/ca.js +0 -1
  255. package/build/translations/cs.js +0 -1
  256. package/build/translations/da.js +0 -1
  257. package/build/translations/de-ch.js +0 -1
  258. package/build/translations/de.js +0 -1
  259. package/build/translations/el.js +0 -1
  260. package/build/translations/en-au.js +0 -1
  261. package/build/translations/en-gb.js +0 -1
  262. package/build/translations/eo.js +0 -1
  263. package/build/translations/es-co.js +0 -1
  264. package/build/translations/es.js +0 -1
  265. package/build/translations/et.js +0 -1
  266. package/build/translations/eu.js +0 -1
  267. package/build/translations/fa.js +0 -1
  268. package/build/translations/fi.js +0 -1
  269. package/build/translations/fr.js +0 -1
  270. package/build/translations/gl.js +0 -1
  271. package/build/translations/gu.js +0 -1
  272. package/build/translations/he.js +0 -1
  273. package/build/translations/hi.js +0 -1
  274. package/build/translations/hr.js +0 -1
  275. package/build/translations/hu.js +0 -1
  276. package/build/translations/hy.js +0 -1
  277. package/build/translations/id.js +0 -1
  278. package/build/translations/it.js +0 -1
  279. package/build/translations/ja.js +0 -1
  280. package/build/translations/jv.js +0 -1
  281. package/build/translations/kk.js +0 -1
  282. package/build/translations/km.js +0 -1
  283. package/build/translations/kn.js +0 -1
  284. package/build/translations/ko.js +0 -1
  285. package/build/translations/ku.js +0 -1
  286. package/build/translations/lt.js +0 -1
  287. package/build/translations/lv.js +0 -1
  288. package/build/translations/ms.js +0 -1
  289. package/build/translations/nb.js +0 -1
  290. package/build/translations/ne.js +0 -1
  291. package/build/translations/nl.js +0 -1
  292. package/build/translations/no.js +0 -1
  293. package/build/translations/oc.js +0 -1
  294. package/build/translations/pl.js +0 -1
  295. package/build/translations/pt-br.js +0 -1
  296. package/build/translations/pt.js +0 -1
  297. package/build/translations/ro.js +0 -1
  298. package/build/translations/ru.js +0 -1
  299. package/build/translations/si.js +0 -1
  300. package/build/translations/sk.js +0 -1
  301. package/build/translations/sl.js +0 -1
  302. package/build/translations/sq.js +0 -1
  303. package/build/translations/sr-latn.js +0 -1
  304. package/build/translations/sr.js +0 -1
  305. package/build/translations/sv.js +0 -1
  306. package/build/translations/th.js +0 -1
  307. package/build/translations/ti.js +0 -1
  308. package/build/translations/tk.js +0 -1
  309. package/build/translations/tr.js +0 -1
  310. package/build/translations/tt.js +0 -1
  311. package/build/translations/ug.js +0 -1
  312. package/build/translations/uk.js +0 -1
  313. package/build/translations/ur.js +0 -1
  314. package/build/translations/uz.js +0 -1
  315. package/build/translations/vi.js +0 -1
  316. package/build/translations/zh-cn.js +0 -1
  317. package/build/translations/zh.js +0 -1
  318. package/lang/contexts.json +0 -82
  319. package/lang/translations/af.po +0 -332
  320. package/lang/translations/ar.po +0 -332
  321. package/lang/translations/ast.po +0 -332
  322. package/lang/translations/az.po +0 -332
  323. package/lang/translations/be.po +0 -332
  324. package/lang/translations/bg.po +0 -332
  325. package/lang/translations/bn.po +0 -334
  326. package/lang/translations/bs.po +0 -332
  327. package/lang/translations/ca.po +0 -332
  328. package/lang/translations/cs.po +0 -332
  329. package/lang/translations/da.po +0 -332
  330. package/lang/translations/de-ch.po +0 -332
  331. package/lang/translations/de.po +0 -332
  332. package/lang/translations/el.po +0 -332
  333. package/lang/translations/en-au.po +0 -332
  334. package/lang/translations/en-gb.po +0 -332
  335. package/lang/translations/en.po +0 -332
  336. package/lang/translations/eo.po +0 -332
  337. package/lang/translations/es-co.po +0 -332
  338. package/lang/translations/es.po +0 -332
  339. package/lang/translations/et.po +0 -332
  340. package/lang/translations/eu.po +0 -332
  341. package/lang/translations/fa.po +0 -332
  342. package/lang/translations/fi.po +0 -332
  343. package/lang/translations/fr.po +0 -332
  344. package/lang/translations/gl.po +0 -332
  345. package/lang/translations/gu.po +0 -332
  346. package/lang/translations/he.po +0 -332
  347. package/lang/translations/hi.po +0 -332
  348. package/lang/translations/hr.po +0 -332
  349. package/lang/translations/hu.po +0 -332
  350. package/lang/translations/hy.po +0 -332
  351. package/lang/translations/id.po +0 -332
  352. package/lang/translations/it.po +0 -332
  353. package/lang/translations/ja.po +0 -332
  354. package/lang/translations/jv.po +0 -332
  355. package/lang/translations/kk.po +0 -332
  356. package/lang/translations/km.po +0 -332
  357. package/lang/translations/kn.po +0 -332
  358. package/lang/translations/ko.po +0 -332
  359. package/lang/translations/ku.po +0 -332
  360. package/lang/translations/lt.po +0 -332
  361. package/lang/translations/lv.po +0 -332
  362. package/lang/translations/ms.po +0 -332
  363. package/lang/translations/nb.po +0 -332
  364. package/lang/translations/ne.po +0 -332
  365. package/lang/translations/nl.po +0 -332
  366. package/lang/translations/no.po +0 -332
  367. package/lang/translations/oc.po +0 -332
  368. package/lang/translations/pl.po +0 -332
  369. package/lang/translations/pt-br.po +0 -332
  370. package/lang/translations/pt.po +0 -332
  371. package/lang/translations/ro.po +0 -332
  372. package/lang/translations/ru.po +0 -332
  373. package/lang/translations/si.po +0 -332
  374. package/lang/translations/sk.po +0 -332
  375. package/lang/translations/sl.po +0 -332
  376. package/lang/translations/sq.po +0 -332
  377. package/lang/translations/sr-latn.po +0 -332
  378. package/lang/translations/sr.po +0 -332
  379. package/lang/translations/sv.po +0 -332
  380. package/lang/translations/th.po +0 -332
  381. package/lang/translations/ti.po +0 -332
  382. package/lang/translations/tk.po +0 -332
  383. package/lang/translations/tr.po +0 -332
  384. package/lang/translations/tt.po +0 -332
  385. package/lang/translations/ug.po +0 -332
  386. package/lang/translations/uk.po +0 -332
  387. package/lang/translations/ur.po +0 -332
  388. package/lang/translations/uz.po +0 -332
  389. package/lang/translations/vi.po +0 -332
  390. package/lang/translations/zh-cn.po +0 -332
  391. package/lang/translations/zh.po +0 -332
  392. package/src/augmentation.js +0 -5
  393. package/src/commands/insertcolumncommand.js +0 -71
  394. package/src/commands/insertrowcommand.js +0 -70
  395. package/src/commands/inserttablecommand.js +0 -69
  396. package/src/commands/inserttablelayoutcommand.js +0 -65
  397. package/src/commands/mergecellcommand.js +0 -206
  398. package/src/commands/mergecellscommand.js +0 -94
  399. package/src/commands/removecolumncommand.js +0 -109
  400. package/src/commands/removerowcommand.js +0 -82
  401. package/src/commands/selectcolumncommand.js +0 -60
  402. package/src/commands/selectrowcommand.js +0 -56
  403. package/src/commands/setheadercolumncommand.js +0 -76
  404. package/src/commands/setheaderrowcommand.js +0 -83
  405. package/src/commands/splitcellcommand.js +0 -58
  406. package/src/converters/downcast.js +0 -322
  407. package/src/converters/table-caption-post-fixer.js +0 -55
  408. package/src/converters/table-cell-paragraph-post-fixer.js +0 -109
  409. package/src/converters/table-cell-refresh-handler.js +0 -47
  410. package/src/converters/table-headings-refresh-handler.js +0 -51
  411. package/src/converters/table-layout-post-fixer.js +0 -369
  412. package/src/converters/tableproperties.js +0 -451
  413. package/src/converters/upcasttable.js +0 -385
  414. package/src/index.js +0 -98
  415. package/src/plaintableoutput.js +0 -49
  416. package/src/table.js +0 -50
  417. package/src/tablecaption/tablecaptionediting.js +0 -178
  418. package/src/tablecaption/tablecaptionui.js +0 -64
  419. package/src/tablecaption/toggletablecaptioncommand.js +0 -105
  420. package/src/tablecaption/utils.js +0 -61
  421. package/src/tablecaption.js +0 -34
  422. package/src/tablecellproperties/commands/tablecellbackgroundcolorcommand.js +0 -30
  423. package/src/tablecellproperties/commands/tablecellbordercolorcommand.js +0 -44
  424. package/src/tablecellproperties/commands/tablecellborderstylecommand.js +0 -44
  425. package/src/tablecellproperties/commands/tablecellborderwidthcommand.js +0 -64
  426. package/src/tablecellproperties/commands/tablecellheightcommand.js +0 -51
  427. package/src/tablecellproperties/commands/tablecellhorizontalalignmentcommand.js +0 -30
  428. package/src/tablecellproperties/commands/tablecellpaddingcommand.js +0 -64
  429. package/src/tablecellproperties/commands/tablecellpropertycommand.js +0 -138
  430. package/src/tablecellproperties/commands/tablecelltypecommand.js +0 -167
  431. package/src/tablecellproperties/commands/tablecellverticalalignmentcommand.js +0 -38
  432. package/src/tablecellproperties/tablecellpropertiesediting.js +0 -412
  433. package/src/tablecellproperties/tablecellpropertiesui.js +0 -385
  434. package/src/tablecellproperties/tablecellpropertiesuiexperimental.d.ts +0 -128
  435. package/src/tablecellproperties/tablecellpropertiesuiexperimental.js +0 -408
  436. package/src/tablecellproperties/ui/tablecellpropertiesview.d.ts +0 -229
  437. package/src/tablecellproperties/ui/tablecellpropertiesview.js +0 -612
  438. package/src/tablecellproperties/ui/tablecellpropertiesviewexperimental.js +0 -744
  439. package/src/tablecellproperties.js +0 -40
  440. package/src/tablecellwidth/commands/tablecellwidthcommand.js +0 -51
  441. package/src/tablecellwidth/tablecellwidthediting.js +0 -53
  442. package/src/tableclipboard.js +0 -500
  443. package/src/tablecolumnresize/constants.js +0 -33
  444. package/src/tablecolumnresize/converters.js +0 -62
  445. package/src/tablecolumnresize/tablecolumnresizeediting.js +0 -734
  446. package/src/tablecolumnresize/tablewidthscommand.js +0 -61
  447. package/src/tablecolumnresize/utils.js +0 -370
  448. package/src/tablecolumnresize.js +0 -36
  449. package/src/tableconfig.js +0 -5
  450. package/src/tableediting.js +0 -246
  451. package/src/tablekeyboard.js +0 -273
  452. package/src/tablelayout/commands/tabletypecommand.js +0 -68
  453. package/src/tablelayout/tablelayoutediting.js +0 -295
  454. package/src/tablelayout/tablelayoutui.js +0 -196
  455. package/src/tablelayout.js +0 -36
  456. package/src/tablemouse/mouseeventsobserver.js +0 -34
  457. package/src/tablemouse.js +0 -178
  458. package/src/tableproperties/commands/tablealignmentcommand.js +0 -30
  459. package/src/tableproperties/commands/tablebackgroundcolorcommand.js +0 -30
  460. package/src/tableproperties/commands/tablebordercolorcommand.js +0 -44
  461. package/src/tableproperties/commands/tableborderstylecommand.js +0 -44
  462. package/src/tableproperties/commands/tableborderwidthcommand.js +0 -64
  463. package/src/tableproperties/commands/tableheightcommand.js +0 -54
  464. package/src/tableproperties/commands/tablepropertycommand.js +0 -103
  465. package/src/tableproperties/commands/tablewidthcommand.js +0 -54
  466. package/src/tableproperties/tablepropertiesediting.js +0 -546
  467. package/src/tableproperties/tablepropertiesui.js +0 -374
  468. package/src/tableproperties/tablepropertiesuiexperimental.d.ts +0 -136
  469. package/src/tableproperties/tablepropertiesuiexperimental.js +0 -375
  470. package/src/tableproperties/ui/tablepropertiesview.js +0 -520
  471. package/src/tableproperties/ui/tablepropertiesviewexperimental.d.ts +0 -216
  472. package/src/tableproperties/ui/tablepropertiesviewexperimental.js +0 -544
  473. package/src/tableproperties.js +0 -40
  474. package/src/tableselection.js +0 -323
  475. package/src/tabletoolbar.js +0 -63
  476. package/src/tableui.js +0 -335
  477. package/src/tableutils.js +0 -1282
  478. package/src/tablewalker.js +0 -489
  479. package/src/ui/colorinputview.js +0 -305
  480. package/src/ui/inserttableview.js +0 -192
  481. package/src/utils/common.js +0 -118
  482. package/src/utils/structure.js +0 -452
  483. package/src/utils/table-properties.js +0 -121
  484. package/src/utils/ui/contextualballoon.js +0 -111
  485. package/src/utils/ui/table-properties.js +0 -390
  486. package/src/utils/ui/table-propertiesexperimental.d.ts +0 -215
  487. package/src/utils/ui/table-propertiesexperimental.js +0 -391
  488. package/src/utils/ui/widget.js +0 -56
  489. package/theme/colorinput.css +0 -39
  490. package/theme/formrow-experimental.css +0 -15
  491. package/theme/formrow.css +0 -13
  492. package/theme/inserttable.css +0 -10
  493. package/theme/table.css +0 -144
  494. package/theme/tablecaption.css +0 -66
  495. package/theme/tablecellproperties-experimental.css +0 -4
  496. package/theme/tablecellproperties.css +0 -28
  497. package/theme/tablecolumnresize.css +0 -62
  498. package/theme/tableediting.css +0 -10
  499. package/theme/tableform-experimental.css +0 -61
  500. package/theme/tableform.css +0 -64
  501. package/theme/tablelayout.css +0 -74
  502. package/theme/tableproperties-experimental.css +0 -78
  503. package/theme/tableproperties.css +0 -18
  504. package/theme/tableselection.css +0 -10
  505. /package/{src → dist}/tablecolumnresize/constants.d.ts +0 -0
@@ -1,734 +0,0 @@
1
- /**
2
- * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.
3
- * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options
4
- */
5
- /**
6
- * @module table/tablecolumnresize/tablecolumnresizeediting
7
- */
8
- import { throttle, isEqual } from 'es-toolkit/compat';
9
- import { global, DomEmitterMixin, Rect, toUnit } from 'ckeditor5/src/utils.js';
10
- import { Plugin } from 'ckeditor5/src/core.js';
11
- import { MouseEventsObserver } from '../../src/tablemouse/mouseeventsobserver.js';
12
- import { TableEditing } from '../tableediting.js';
13
- import { TableUtils } from '../tableutils.js';
14
- import { TableWalker } from '../tablewalker.js';
15
- import { TableWidthsCommand } from './tablewidthscommand.js';
16
- import { downcastTableResizedClass, upcastColgroupElement, upcastTableResizedClass } from './converters.js';
17
- import { clamp, createFilledArray, sumArray, getColumnEdgesIndexes, getChangedResizedTables, getColumnMinWidthAsPercentage, getElementWidthInPixels, getTableWidthInPixels, normalizeColumnWidths, toPrecision, getDomCellOuterWidth, updateColumnElements, getColumnGroupElement, getTableColumnElements, getTableColumnsWidths } from './utils.js';
18
- import { COLUMN_MIN_WIDTH_IN_PIXELS, COLUMN_RESIZE_DISTANCE_THRESHOLD } from './constants.js';
19
- const toPx = /* #__PURE__ */ toUnit('px');
20
- /**
21
- * The table column resize editing plugin.
22
- */
23
- export class TableColumnResizeEditing extends Plugin {
24
- /**
25
- * A flag indicating if the column resizing is in progress.
26
- */
27
- _isResizingActive;
28
- /**
29
- * A temporary storage for the required data needed to correctly calculate the widths of the resized columns. This storage is
30
- * initialized when column resizing begins, and is purged upon completion.
31
- */
32
- _resizingData;
33
- /**
34
- * DOM emitter.
35
- */
36
- _domEmitter;
37
- /**
38
- * A local reference to the {@link module:table/tableutils~TableUtils} plugin.
39
- */
40
- _tableUtilsPlugin;
41
- /**
42
- * Starting mouse position data used to add a threshold to the resizing process.
43
- */
44
- _initialMouseEventData = null;
45
- /**
46
- * @inheritDoc
47
- */
48
- static get requires() {
49
- return [TableEditing, TableUtils];
50
- }
51
- /**
52
- * @inheritDoc
53
- */
54
- static get pluginName() {
55
- return 'TableColumnResizeEditing';
56
- }
57
- /**
58
- * @inheritDoc
59
- * @internal
60
- */
61
- static get licenseFeatureCode() {
62
- return 'TCR';
63
- }
64
- /**
65
- * @inheritDoc
66
- */
67
- static get isOfficialPlugin() {
68
- return true;
69
- }
70
- /**
71
- * @inheritDoc
72
- */
73
- static get isPremiumPlugin() {
74
- return true;
75
- }
76
- /**
77
- * @inheritDoc
78
- */
79
- constructor(editor) {
80
- super(editor);
81
- this._isResizingActive = false;
82
- this.set('_isResizingAllowed', true);
83
- this._resizingData = null;
84
- this._domEmitter = new (DomEmitterMixin())();
85
- this._tableUtilsPlugin = editor.plugins.get('TableUtils');
86
- this.on('change:_isResizingAllowed', (evt, name, value) => {
87
- // Toggling the `ck-column-resize_disabled` class shows and hides the resizers through CSS.
88
- const classAction = value ? 'removeClass' : 'addClass';
89
- editor.editing.view.change(writer => {
90
- for (const root of editor.editing.view.document.roots) {
91
- writer[classAction]('ck-column-resize_disabled', editor.editing.view.document.getRoot(root.rootName));
92
- }
93
- });
94
- });
95
- }
96
- /**
97
- * @inheritDoc
98
- */
99
- init() {
100
- this._extendSchema();
101
- this._registerPostFixer();
102
- this._registerConverters();
103
- this._registerResizingListeners();
104
- this._registerResizerInserter();
105
- const editor = this.editor;
106
- const columnResizePlugin = editor.plugins.get('TableColumnResize');
107
- const tableEditing = editor.plugins.get('TableEditing');
108
- tableEditing.registerAdditionalSlot({
109
- filter: element => element.is('element', 'tableColumnGroup'),
110
- positionOffset: 0
111
- });
112
- const tableWidthsCommand = new TableWidthsCommand(editor);
113
- // For backwards compatibility we have two commands that perform exactly the same operation.
114
- editor.commands.add('resizeTableWidth', tableWidthsCommand);
115
- editor.commands.add('resizeColumnWidths', tableWidthsCommand);
116
- // Currently the states of column resize and table resize (which is actually the last column resize) features
117
- // are bound together. They can be separated in the future by adding distinct listeners and applying
118
- // different CSS classes (e.g. `ck-column-resize_disabled` and `ck-table-resize_disabled`) to the editor root.
119
- // See #12148 for the details.
120
- this.bind('_isResizingAllowed').to(editor, 'isReadOnly', columnResizePlugin, 'isEnabled', tableWidthsCommand, 'isEnabled', (isEditorReadOnly, isPluginEnabled, isTableWidthsCommandCommandEnabled) => !isEditorReadOnly && isPluginEnabled && isTableWidthsCommandCommandEnabled);
121
- }
122
- /**
123
- * @inheritDoc
124
- */
125
- destroy() {
126
- this._domEmitter.stopListening();
127
- super.destroy();
128
- }
129
- /**
130
- * Returns a 'tableColumnGroup' element from the 'table'.
131
- *
132
- * @param element A 'table' or 'tableColumnGroup' element.
133
- * @returns A 'tableColumnGroup' element.
134
- */
135
- getColumnGroupElement(element) {
136
- return getColumnGroupElement(element);
137
- }
138
- /**
139
- * Returns an array of 'tableColumn' elements.
140
- *
141
- * @param element A 'table' or 'tableColumnGroup' element.
142
- * @returns An array of 'tableColumn' elements.
143
- */
144
- getTableColumnElements(element) {
145
- return getTableColumnElements(element);
146
- }
147
- /**
148
- * Returns an array of table column widths.
149
- *
150
- * @param element A 'table' or 'tableColumnGroup' element.
151
- * @returns An array of table column widths.
152
- */
153
- getTableColumnsWidths(element) {
154
- return getTableColumnsWidths(element);
155
- }
156
- /**
157
- * Registers new attributes for a table model element.
158
- */
159
- _extendSchema() {
160
- const schema = this.editor.model.schema;
161
- schema.extend('table', {
162
- allowAttributes: ['tableWidth']
163
- });
164
- schema.register('tableColumnGroup', {
165
- allowIn: 'table',
166
- isLimit: true
167
- });
168
- schema.register('tableColumn', {
169
- allowIn: 'tableColumnGroup',
170
- allowAttributes: ['columnWidth', 'colSpan'],
171
- isLimit: true
172
- });
173
- schema.setAttributeProperties('columnWidth', { isFormatting: true });
174
- }
175
- /**
176
- * Registers table column resize post-fixer.
177
- *
178
- * It checks if the change from the differ concerns a table-related element or attribute. For detected changes it:
179
- * * Adjusts the `columnWidths` attribute to guarantee that the sum of the widths from all columns is 100%.
180
- * * Checks if the `columnWidths` attribute gets updated accordingly after columns have been added or removed.
181
- */
182
- _registerPostFixer() {
183
- const editor = this.editor;
184
- const model = editor.model;
185
- model.document.registerPostFixer(writer => {
186
- let changed = false;
187
- for (const table of getChangedResizedTables(model)) {
188
- const tableColumnGroup = this.getColumnGroupElement(table);
189
- const columns = this.getTableColumnElements(tableColumnGroup);
190
- const columnWidths = this.getTableColumnsWidths(tableColumnGroup);
191
- // Adjust the `columnWidths` attribute to guarantee that the sum of the widths from all columns is 100%.
192
- let normalizedWidths = normalizeColumnWidths(columnWidths);
193
- // If the number of columns has changed, then we need to adjust the widths of the affected columns.
194
- normalizedWidths = adjustColumnWidths(normalizedWidths, table, this);
195
- if (isEqual(columnWidths, normalizedWidths)) {
196
- continue;
197
- }
198
- updateColumnElements(columns, tableColumnGroup, normalizedWidths, writer);
199
- changed = true;
200
- }
201
- return changed;
202
- });
203
- /**
204
- * Adjusts if necessary the `columnWidths` in case if the number of column has changed.
205
- *
206
- * @param columnWidths Note: this array **may be modified** by the function.
207
- * @param table Table to be checked.
208
- */
209
- function adjustColumnWidths(columnWidths, table, plugin) {
210
- const newTableColumnsCount = plugin._tableUtilsPlugin.getColumns(table);
211
- const columnsCountDelta = newTableColumnsCount - columnWidths.length;
212
- if (columnsCountDelta === 0) {
213
- return columnWidths;
214
- }
215
- const widths = columnWidths.map(width => Number(width.replace('%', '')));
216
- // Collect all cells that are affected by the change.
217
- const cellSet = getAffectedCells(plugin.editor.model.document.differ, table);
218
- for (const cell of cellSet) {
219
- const currentColumnsDelta = newTableColumnsCount - widths.length;
220
- if (currentColumnsDelta === 0) {
221
- continue;
222
- }
223
- // If the column count in the table changed, adjust the widths of the affected columns.
224
- const hasMoreColumns = currentColumnsDelta > 0;
225
- const currentColumnIndex = plugin._tableUtilsPlugin.getCellLocation(cell).column;
226
- if (hasMoreColumns) {
227
- const columnMinWidthAsPercentage = getColumnMinWidthAsPercentage(table, plugin.editor);
228
- const columnWidthsToInsert = createFilledArray(currentColumnsDelta, columnMinWidthAsPercentage);
229
- widths.splice(currentColumnIndex, 0, ...columnWidthsToInsert);
230
- }
231
- else {
232
- // Moves the widths of the removed columns to the preceding one.
233
- // Other editors either reduce the width of the whole table or adjust the widths
234
- // proportionally, so change of this behavior can be considered in the future.
235
- const removedColumnWidths = widths.splice(currentColumnIndex, Math.abs(currentColumnsDelta));
236
- widths[currentColumnIndex] += sumArray(removedColumnWidths);
237
- }
238
- }
239
- return widths.map(width => width + '%');
240
- }
241
- /**
242
- * Returns a set of cells that have been changed in a given table.
243
- */
244
- function getAffectedCells(differ, table) {
245
- const cellSet = new Set();
246
- for (const change of differ.getChanges()) {
247
- if (change.type == 'insert' &&
248
- change.position.nodeAfter &&
249
- change.position.nodeAfter.name == 'tableCell' &&
250
- change.position.nodeAfter.getAncestors().includes(table)) {
251
- cellSet.add(change.position.nodeAfter);
252
- }
253
- else if (change.type == 'remove') {
254
- // If the first cell was removed, use the node after the change position instead.
255
- const referenceNode = (change.position.nodeBefore || change.position.nodeAfter);
256
- if (referenceNode.name == 'tableCell' && referenceNode.getAncestors().includes(table)) {
257
- cellSet.add(referenceNode);
258
- }
259
- }
260
- }
261
- return cellSet;
262
- }
263
- }
264
- /**
265
- * Registers table column resize converters.
266
- */
267
- _registerConverters() {
268
- const editor = this.editor;
269
- const conversion = editor.conversion;
270
- // Table width style
271
- conversion.for('upcast').attributeToAttribute({
272
- view: {
273
- name: /^(figure|table)$/,
274
- styles: {
275
- width: /[\s\S]+/
276
- }
277
- },
278
- model: {
279
- key: 'tableWidth',
280
- value: (viewElement) => {
281
- const parent = viewElement.parent;
282
- if (parent.is('element', 'figure')) {
283
- return;
284
- }
285
- return viewElement.getStyle('width');
286
- }
287
- }
288
- });
289
- conversion.for('downcast').attributeToAttribute({
290
- model: {
291
- name: 'table',
292
- key: 'tableWidth'
293
- },
294
- view: (width) => ({
295
- name: 'figure',
296
- key: 'style',
297
- value: {
298
- width
299
- }
300
- })
301
- });
302
- conversion.elementToElement({ model: 'tableColumnGroup', view: 'colgroup' });
303
- conversion.elementToElement({ model: 'tableColumn', view: 'col' });
304
- conversion.for('downcast').add(downcastTableResizedClass());
305
- conversion.for('upcast').add(upcastTableResizedClass());
306
- conversion.for('upcast').add(upcastColgroupElement(this._tableUtilsPlugin));
307
- conversion.for('upcast').attributeToAttribute({
308
- view: {
309
- name: 'col',
310
- styles: {
311
- width: /.*/
312
- }
313
- },
314
- model: {
315
- key: 'columnWidth',
316
- value: (viewElement) => {
317
- const viewColWidth = viewElement.getStyle('width');
318
- // 'pt' is the default unit for table column width pasted from MS Office.
319
- // See https://github.com/ckeditor/ckeditor5/issues/14521#issuecomment-1662102889 for more details.
320
- if (!viewColWidth || (!viewColWidth.endsWith('%') && !viewColWidth.endsWith('pt'))) {
321
- return 'auto';
322
- }
323
- return viewColWidth;
324
- }
325
- }
326
- });
327
- // The `col[span]` attribute is present in tables pasted from MS Excel. We use it to set the temporary `colSpan` model attribute,
328
- // which is consumed during the `colgroup` element upcast.
329
- // See https://github.com/ckeditor/ckeditor5/issues/14521#issuecomment-1662102889 for more details.
330
- conversion.for('upcast').attributeToAttribute({
331
- view: {
332
- name: 'col',
333
- key: 'span'
334
- },
335
- model: 'colSpan'
336
- });
337
- conversion.for('downcast').attributeToAttribute({
338
- model: {
339
- name: 'tableColumn',
340
- key: 'columnWidth'
341
- },
342
- view: width => ({ key: 'style', value: { width } })
343
- });
344
- }
345
- /**
346
- * Registers listeners to handle resizing process.
347
- */
348
- _registerResizingListeners() {
349
- const editingView = this.editor.editing.view;
350
- editingView.addObserver(MouseEventsObserver);
351
- editingView.document.on('mouseover', this._onMouseOverHandler.bind(this), { priority: 'high' });
352
- editingView.document.on('mousedown', this._onMouseDownHandler.bind(this), { priority: 'high' });
353
- editingView.document.on('mouseout', this._onMouseOutHandler.bind(this), { priority: 'high' });
354
- this._domEmitter.listenTo(global.window.document, 'mousemove', throttle(this._onMouseMoveHandler.bind(this), 50));
355
- this._domEmitter.listenTo(global.window.document, 'mouseup', this._onMouseUpHandler.bind(this));
356
- }
357
- /**
358
- * Calculate and set `top` and `bottom` styles to the column resizer element to fit the height of the table.
359
- *
360
- * @param viewResizer The column resizer element.
361
- */
362
- _recalculateResizerElement(viewResizer) {
363
- const editor = this.editor;
364
- const domConverter = editor.editing.view.domConverter;
365
- // Get DOM target figure ancestor element.
366
- const domTable = domConverter.mapViewToDom(viewResizer.findAncestor('table'));
367
- // Get DOM table cell element.
368
- const domCell = domConverter.mapViewToDom(viewResizer.findAncestor(item => ['td', 'th'].includes(item.name)));
369
- const rectTable = new Rect(domTable);
370
- const rectCell = new Rect(domCell);
371
- // Calculate the top, and bottom positions of the column resizer element.
372
- const targetTopPosition = toPx(Number((rectTable.top - rectCell.top).toFixed(4)));
373
- const targetBottomPosition = toPx(Number((rectCell.bottom - rectTable.bottom).toFixed(4)));
374
- // Set `top` and `bottom` styles to the column resizer element.
375
- editor.editing.view.change(viewWriter => {
376
- viewWriter.setStyle('top', targetTopPosition, viewResizer);
377
- viewWriter.setStyle('bottom', targetBottomPosition, viewResizer);
378
- });
379
- }
380
- /**
381
- * Remove `top` and `bottom` styles of the column resizer element.
382
- *
383
- * @param viewResizer The column resizer element.
384
- */
385
- _resetResizerStyles(viewResizer) {
386
- this.editor.editing.view.change(viewWriter => {
387
- viewWriter.removeStyle('top', viewResizer);
388
- viewWriter.removeStyle('bottom', viewResizer);
389
- });
390
- }
391
- /**
392
- * Handles the `mouseover` event on column resizer element.
393
- * Recalculates the `top` and `bottom` styles of the column resizer element to fit the height of the table.
394
- *
395
- * @param eventInfo An object containing information about the fired event.
396
- * @param domEventData The data related to the DOM event.
397
- */
398
- _onMouseOverHandler(eventInfo, domEventData) {
399
- const target = domEventData.target;
400
- if (!target.hasClass('ck-table-column-resizer')) {
401
- return;
402
- }
403
- if (!this._isResizingAllowed) {
404
- return;
405
- }
406
- this._recalculateResizerElement(target);
407
- }
408
- /**
409
- * Handles the `mouseout` event on column resizer element.
410
- * When resizing is not active, it resets the `top` and `bottom` styles of the column resizer element.
411
- *
412
- * @param eventInfo An object containing information about the fired event.
413
- * @param domEventData The data related to the DOM event.
414
- */
415
- _onMouseOutHandler(eventInfo, domEventData) {
416
- const target = domEventData.target;
417
- if (!target.hasClass('ck-table-column-resizer')) {
418
- return;
419
- }
420
- if (!this._isResizingAllowed) {
421
- return;
422
- }
423
- if (this._isResizingActive) {
424
- return;
425
- }
426
- this._resetResizerStyles(target);
427
- }
428
- /**
429
- * Handles the `mousedown` event on column resizer element:
430
- * * calculates the initial column pixel widths,
431
- * * inserts the `<colgroup>` element if it is not present in the `<table>`,
432
- * * puts the necessary data in the temporary storage,
433
- * * applies the attributes to the `<table>` view element.
434
- *
435
- * @param eventInfo An object containing information about the fired event.
436
- * @param domEventData The data related to the DOM event.
437
- */
438
- _onMouseDownHandler(eventInfo, domEventData) {
439
- const target = domEventData.target;
440
- if (!target.hasClass('ck-table-column-resizer')) {
441
- return;
442
- }
443
- if (!this._isResizingAllowed) {
444
- return;
445
- }
446
- const editor = this.editor;
447
- const modelTable = editor.editing.mapper.toModelElement(target.findAncestor('figure'));
448
- // Do not resize if table model is in non-editable place.
449
- if (!editor.model.canEditAt(modelTable)) {
450
- return;
451
- }
452
- domEventData.preventDefault();
453
- eventInfo.stop();
454
- this._initialMouseEventData = domEventData;
455
- }
456
- /**
457
- * Starts the resizing process after the threshold is reached.
458
- */
459
- _startResizingAfterThreshold() {
460
- const domEventData = this._initialMouseEventData;
461
- const { target } = domEventData;
462
- const modelTable = this.editor.editing.mapper.toModelElement(target.findAncestor('figure'));
463
- const viewTable = target.findAncestor('table');
464
- // Calculate the initial column widths in pixels.
465
- const columnWidthsInPx = _calculateDomColumnWidths(modelTable, this._tableUtilsPlugin, this.editor);
466
- // Insert colgroup for the table that is resized for the first time.
467
- if (!Array.from(viewTable.getChildren()).find(viewCol => viewCol.is('element', 'colgroup'))) {
468
- this.editor.editing.view.change(viewWriter => {
469
- _insertColgroupElement(viewWriter, columnWidthsInPx, viewTable);
470
- });
471
- }
472
- this._isResizingActive = true;
473
- this._resizingData = this._getResizingData(domEventData, columnWidthsInPx);
474
- // At this point we change only the editor view - we don't want other users to see our changes yet,
475
- // so we can't apply them in the model.
476
- this.editor.editing.view.change(writer => _applyResizingAttributesToTable(writer, viewTable, this._resizingData));
477
- /**
478
- * Calculates the DOM columns' widths. It is done by taking the width of the widest cell
479
- * from each table column (we rely on the {@link module:table/tablewalker~TableWalker}
480
- * to determine which column the cell belongs to).
481
- *
482
- * @param modelTable A table which columns should be measured.
483
- * @param tableUtils The Table Utils plugin instance.
484
- * @param editor The editor instance.
485
- * @returns Columns' widths expressed in pixels (without unit).
486
- */
487
- function _calculateDomColumnWidths(modelTable, tableUtilsPlugin, editor) {
488
- const columnWidthsInPx = Array(tableUtilsPlugin.getColumns(modelTable));
489
- const tableWalker = new TableWalker(modelTable);
490
- for (const cellSlot of tableWalker) {
491
- const viewCell = editor.editing.mapper.toViewElement(cellSlot.cell);
492
- const domCell = editor.editing.view.domConverter.mapViewToDom(viewCell);
493
- const domCellWidth = getDomCellOuterWidth(domCell);
494
- if (!columnWidthsInPx[cellSlot.column] || domCellWidth < columnWidthsInPx[cellSlot.column]) {
495
- columnWidthsInPx[cellSlot.column] = toPrecision(domCellWidth);
496
- }
497
- }
498
- return columnWidthsInPx;
499
- }
500
- /**
501
- * Creates a `<colgroup>` element with `<col>`s and inserts it into a given view table.
502
- *
503
- * @param viewWriter A writer instance.
504
- * @param columnWidthsInPx Column widths.
505
- * @param viewTable A table view element.
506
- */
507
- function _insertColgroupElement(viewWriter, columnWidthsInPx, viewTable) {
508
- const colgroup = viewWriter.createContainerElement('colgroup');
509
- for (let i = 0; i < columnWidthsInPx.length; i++) {
510
- const viewColElement = viewWriter.createEmptyElement('col');
511
- const columnWidthInPc = `${toPrecision(columnWidthsInPx[i] / sumArray(columnWidthsInPx) * 100)}%`;
512
- viewWriter.setStyle('width', columnWidthInPc, viewColElement);
513
- viewWriter.insert(viewWriter.createPositionAt(colgroup, 'end'), viewColElement);
514
- }
515
- viewWriter.insert(viewWriter.createPositionAt(viewTable, 0), colgroup);
516
- }
517
- /**
518
- * Applies the style and classes to the view table as the resizing begun.
519
- *
520
- * @param viewWriter A writer instance.
521
- * @param viewTable A table containing the clicked resizer.
522
- * @param resizingData Data related to the resizing.
523
- */
524
- function _applyResizingAttributesToTable(viewWriter, viewTable, resizingData) {
525
- const figureInitialPcWidth = resizingData.widths.viewFigureWidth / resizingData.widths.viewFigureParentWidth;
526
- viewWriter.addClass('ck-table-resized', viewTable);
527
- viewWriter.addClass('ck-table-column-resizer__active', resizingData.elements.viewResizer);
528
- viewWriter.setStyle('width', `${toPrecision(figureInitialPcWidth * 100)}%`, viewTable.findAncestor('figure'));
529
- }
530
- }
531
- /**
532
- * Handles the `mousemove` event.
533
- * * If resizing process is not in progress, it does nothing.
534
- * * If resizing is active but not allowed, it stops the resizing process instantly calling the `mousedown` event handler.
535
- * * Otherwise it dynamically updates the widths of the resized columns.
536
- *
537
- * @param eventInfo An object containing information about the fired event.
538
- * @param mouseEventData The native DOM event.
539
- */
540
- _onMouseMoveHandler(eventInfo, mouseEventData) {
541
- if (this._initialMouseEventData) {
542
- const mouseEvent = this._initialMouseEventData.domEvent;
543
- const distanceX = Math.abs(mouseEventData.clientX - mouseEvent.clientX);
544
- if (distanceX >= COLUMN_RESIZE_DISTANCE_THRESHOLD) {
545
- this._startResizingAfterThreshold();
546
- this._initialMouseEventData = null;
547
- }
548
- else {
549
- return;
550
- }
551
- }
552
- if (!this._isResizingActive) {
553
- return;
554
- }
555
- if (!this._isResizingAllowed) {
556
- this._onMouseUpHandler();
557
- return;
558
- }
559
- const { columnPosition, flags: { isRightEdge, isTableCentered, isLtrContent }, elements: { viewFigure, viewLeftColumn, viewRightColumn, viewResizer }, widths: { viewFigureParentWidth, tableWidth, leftColumnWidth, rightColumnWidth } } = this._resizingData;
560
- const dxLowerBound = -leftColumnWidth + COLUMN_MIN_WIDTH_IN_PIXELS;
561
- const dxUpperBound = isRightEdge ?
562
- viewFigureParentWidth - tableWidth :
563
- rightColumnWidth - COLUMN_MIN_WIDTH_IN_PIXELS;
564
- // The multiplier is needed for calculating the proper movement offset:
565
- // - it should negate the sign if content language direction is right-to-left,
566
- // - it should double the offset if the table edge is resized and table is centered.
567
- const multiplier = (isLtrContent ? 1 : -1) * (isRightEdge && isTableCentered ? 2 : 1);
568
- const dx = clamp((mouseEventData.clientX - columnPosition) * multiplier, Math.min(dxLowerBound, 0), Math.max(dxUpperBound, 0));
569
- if (dx === 0) {
570
- return;
571
- }
572
- this.editor.editing.view.change(writer => {
573
- const leftColumnWidthAsPercentage = toPrecision((leftColumnWidth + dx) * 100 / tableWidth);
574
- writer.setStyle('width', `${leftColumnWidthAsPercentage}%`, viewLeftColumn);
575
- if (isRightEdge) {
576
- const tableWidthAsPercentage = toPrecision((tableWidth + dx) * 100 / viewFigureParentWidth);
577
- writer.setStyle('width', `${tableWidthAsPercentage}%`, viewFigure);
578
- }
579
- else {
580
- const rightColumnWidthAsPercentage = toPrecision((rightColumnWidth - dx) * 100 / tableWidth);
581
- writer.setStyle('width', `${rightColumnWidthAsPercentage}%`, viewRightColumn);
582
- }
583
- });
584
- this._recalculateResizerElement(viewResizer);
585
- }
586
- /**
587
- * Handles the `mouseup` event.
588
- * * If resizing process is not in progress, it does nothing.
589
- * * If resizing is active but not allowed, it cancels the resizing process restoring the original widths.
590
- * * Otherwise it propagates the changes from view to the model by executing the adequate commands.
591
- */
592
- _onMouseUpHandler() {
593
- this._initialMouseEventData = null;
594
- if (!this._isResizingActive) {
595
- return;
596
- }
597
- const { viewResizer, modelTable, viewFigure, viewColgroup } = this._resizingData.elements;
598
- const editor = this.editor;
599
- const editingView = editor.editing.view;
600
- const tableColumnGroup = this.getColumnGroupElement(modelTable);
601
- const viewColumns = Array
602
- .from(viewColgroup.getChildren())
603
- .filter((column) => column.is('view:element'));
604
- const columnWidthsAttributeOld = tableColumnGroup ?
605
- this.getTableColumnsWidths(tableColumnGroup) :
606
- null;
607
- const columnWidthsAttributeNew = viewColumns.map(column => column.getStyle('width'));
608
- const isColumnWidthsAttributeChanged = !isEqual(columnWidthsAttributeOld, columnWidthsAttributeNew);
609
- const tableWidthAttributeOld = modelTable.getAttribute('tableWidth');
610
- const tableWidthAttributeNew = viewFigure.getStyle('width');
611
- const isTableWidthAttributeChanged = tableWidthAttributeOld !== tableWidthAttributeNew;
612
- if (isColumnWidthsAttributeChanged || isTableWidthAttributeChanged) {
613
- if (this._isResizingAllowed) {
614
- editor.execute('resizeTableWidth', {
615
- table: modelTable,
616
- tableWidth: `${toPrecision(tableWidthAttributeNew)}%`,
617
- columnWidths: columnWidthsAttributeNew
618
- });
619
- }
620
- else {
621
- // In read-only mode revert all changes in the editing view. The model is not touched so it does not need to be restored.
622
- // This case can occur if the read-only mode kicks in during the resizing process.
623
- editingView.change(writer => {
624
- // If table had resized columns before, restore the previous column widths.
625
- // Otherwise clean up the view from the temporary column resizing markup.
626
- if (columnWidthsAttributeOld) {
627
- for (const viewCol of viewColumns) {
628
- writer.setStyle('width', columnWidthsAttributeOld.shift(), viewCol);
629
- }
630
- }
631
- else {
632
- writer.remove(viewColgroup);
633
- }
634
- if (isTableWidthAttributeChanged) {
635
- // If the whole table was already resized before, restore the previous table width.
636
- // Otherwise clean up the view from the temporary table resizing markup.
637
- if (tableWidthAttributeOld) {
638
- writer.setStyle('width', tableWidthAttributeOld, viewFigure);
639
- }
640
- else {
641
- writer.removeStyle('width', viewFigure);
642
- }
643
- }
644
- // If a table and its columns weren't resized before,
645
- // prune the remaining common resizing markup.
646
- if (!columnWidthsAttributeOld && !tableWidthAttributeOld) {
647
- writer.removeClass('ck-table-resized', [...viewFigure.getChildren()].find(element => element.name === 'table'));
648
- }
649
- });
650
- }
651
- }
652
- editingView.change(writer => {
653
- writer.removeClass('ck-table-column-resizer__active', viewResizer);
654
- });
655
- const element = editingView.domConverter.mapViewToDom(viewResizer);
656
- if (!element.matches(':hover')) {
657
- this._resetResizerStyles(viewResizer);
658
- }
659
- this._isResizingActive = false;
660
- this._resizingData = null;
661
- }
662
- /**
663
- * Retrieves and returns required data needed for the resizing process.
664
- *
665
- * @param domEventData The data of the `mousedown` event.
666
- * @param columnWidths The current widths of the columns.
667
- * @returns The data needed for the resizing process.
668
- */
669
- _getResizingData(domEventData, columnWidths) {
670
- const editor = this.editor;
671
- const columnPosition = domEventData.domEvent.clientX;
672
- const viewResizer = domEventData.target;
673
- const viewLeftCell = viewResizer.findAncestor('td') || viewResizer.findAncestor('th');
674
- const modelLeftCell = editor.editing.mapper.toModelElement(viewLeftCell);
675
- const modelTable = modelLeftCell.findAncestor('table');
676
- const leftColumnIndex = getColumnEdgesIndexes(modelLeftCell, this._tableUtilsPlugin).rightEdge;
677
- const lastColumnIndex = this._tableUtilsPlugin.getColumns(modelTable) - 1;
678
- let tableAlignment = modelTable.getAttribute('tableAlignment');
679
- if (modelTable.getAttribute('tableType') !== 'layout') {
680
- tableAlignment ||= editor.config.get('table.tableProperties.defaultProperties.alignment');
681
- tableAlignment ||= 'center';
682
- }
683
- const isRightEdge = leftColumnIndex === lastColumnIndex;
684
- const isLtrContent = editor.locale.contentLanguageDirection !== 'rtl';
685
- const isTableCentered = tableAlignment === 'center';
686
- const viewTable = viewLeftCell.findAncestor('table');
687
- const viewFigure = viewTable.findAncestor('figure');
688
- const viewColgroup = [...viewTable.getChildren()]
689
- .find(viewCol => viewCol.is('element', 'colgroup'));
690
- const viewLeftColumn = viewColgroup.getChild(leftColumnIndex);
691
- const viewRightColumn = isRightEdge ? undefined : viewColgroup.getChild(leftColumnIndex + 1);
692
- const viewFigureParentWidth = getElementWidthInPixels(editor.editing.view.domConverter.mapViewToDom(viewFigure.parent));
693
- const viewFigureWidth = getElementWidthInPixels(editor.editing.view.domConverter.mapViewToDom(viewFigure));
694
- const tableWidth = getTableWidthInPixels(modelTable, editor);
695
- const leftColumnWidth = columnWidths[leftColumnIndex];
696
- const rightColumnWidth = isRightEdge ? undefined : columnWidths[leftColumnIndex + 1];
697
- return {
698
- columnPosition,
699
- flags: {
700
- isRightEdge,
701
- isTableCentered,
702
- isLtrContent
703
- },
704
- elements: {
705
- viewResizer,
706
- modelTable,
707
- viewFigure,
708
- viewColgroup,
709
- viewLeftColumn,
710
- viewRightColumn
711
- },
712
- widths: {
713
- viewFigureParentWidth,
714
- viewFigureWidth,
715
- tableWidth,
716
- leftColumnWidth,
717
- rightColumnWidth
718
- }
719
- };
720
- }
721
- /**
722
- * Registers a listener ensuring that each resizable cell have a resizer handle.
723
- */
724
- _registerResizerInserter() {
725
- this.editor.conversion.for('editingDowncast').add(dispatcher => {
726
- dispatcher.on('insert:tableCell', (evt, data, conversionApi) => {
727
- const modelElement = data.item;
728
- const viewElement = conversionApi.mapper.toViewElement(modelElement);
729
- const viewWriter = conversionApi.writer;
730
- viewWriter.insert(viewWriter.createPositionAt(viewElement, 'end'), viewWriter.createUIElement('div', { class: 'ck-table-column-resizer' }));
731
- }, { priority: 'lowest' });
732
- });
733
- }
734
- }