@ckeditor/ckeditor5-table 0.0.0-nightly-20260118.0 → 0.0.0-nightly-next-20260118.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 (356) hide show
  1. package/ckeditor5-metadata.json +16 -7
  2. package/{src → dist}/augmentation.d.ts +0 -15
  3. package/{src → dist}/commands/insertcolumncommand.d.ts +1 -1
  4. package/{src → dist}/commands/insertrowcommand.d.ts +1 -1
  5. package/{src → dist}/commands/inserttablecommand.d.ts +1 -1
  6. package/{src → dist}/commands/inserttablelayoutcommand.d.ts +1 -1
  7. package/{src → dist}/commands/mergecellcommand.d.ts +3 -3
  8. package/{src → dist}/commands/mergecellscommand.d.ts +1 -1
  9. package/{src → dist}/commands/removecolumncommand.d.ts +1 -1
  10. package/{src → dist}/commands/removerowcommand.d.ts +1 -1
  11. package/{src → dist}/commands/selectcolumncommand.d.ts +1 -1
  12. package/{src → dist}/commands/selectrowcommand.d.ts +1 -1
  13. package/{src → dist}/commands/setheadercolumncommand.d.ts +1 -1
  14. package/{src → dist}/commands/setheaderrowcommand.d.ts +1 -1
  15. package/{src → dist}/commands/splitcellcommand.d.ts +1 -1
  16. package/{src → dist}/converters/downcast.d.ts +2 -2
  17. package/{src → dist}/converters/table-caption-post-fixer.d.ts +1 -1
  18. package/{src → dist}/converters/table-cell-paragraph-post-fixer.d.ts +1 -1
  19. package/{src → dist}/converters/table-cell-refresh-handler.d.ts +1 -1
  20. package/{src → dist}/converters/table-headings-refresh-handler.d.ts +1 -1
  21. package/{src → dist}/converters/table-layout-post-fixer.d.ts +1 -1
  22. package/{src → dist}/converters/tableproperties.d.ts +2 -2
  23. package/{src → dist}/converters/upcasttable.d.ts +1 -1
  24. package/dist/index-content.css +30 -30
  25. package/dist/index-editor.css +104 -170
  26. package/dist/index.css +147 -237
  27. package/dist/index.css.map +1 -1
  28. package/{src → dist}/index.d.ts +2 -5
  29. package/dist/index.js +423 -2408
  30. package/dist/index.js.map +1 -1
  31. package/{src → dist}/plaintableoutput.d.ts +1 -1
  32. package/{src → dist}/table.d.ts +2 -2
  33. package/{src → dist}/tablecaption/tablecaptionediting.d.ts +2 -2
  34. package/{src → dist}/tablecaption/tablecaptionui.d.ts +1 -1
  35. package/{src → dist}/tablecaption/toggletablecaptioncommand.d.ts +1 -1
  36. package/{src → dist}/tablecaption/utils.d.ts +1 -1
  37. package/{src → dist}/tablecaption.d.ts +1 -1
  38. package/{src → dist}/tablecellproperties/commands/tablecellbackgroundcolorcommand.d.ts +1 -1
  39. package/{src → dist}/tablecellproperties/commands/tablecellbordercolorcommand.d.ts +2 -2
  40. package/{src → dist}/tablecellproperties/commands/tablecellborderstylecommand.d.ts +2 -2
  41. package/{src → dist}/tablecellproperties/commands/tablecellborderwidthcommand.d.ts +2 -2
  42. package/{src → dist}/tablecellproperties/commands/tablecellheightcommand.d.ts +1 -1
  43. package/{src → dist}/tablecellproperties/commands/tablecellhorizontalalignmentcommand.d.ts +1 -1
  44. package/{src → dist}/tablecellproperties/commands/tablecellpaddingcommand.d.ts +2 -2
  45. package/{src → dist}/tablecellproperties/commands/tablecellpropertycommand.d.ts +2 -2
  46. package/{src → dist}/tablecellproperties/commands/tablecelltypecommand.d.ts +2 -6
  47. package/{src → dist}/tablecellproperties/commands/tablecellverticalalignmentcommand.d.ts +1 -1
  48. package/{src → dist}/tablecellproperties/tablecellpropertiesediting.d.ts +1 -1
  49. package/{src → dist}/tablecellproperties/tablecellpropertiesui.d.ts +2 -2
  50. package/dist/tablecellproperties/tablecellpropertiesutils.d.ts +18 -0
  51. package/{src/tablecellproperties/ui/tablecellpropertiesviewexperimental.d.ts → dist/tablecellproperties/ui/tablecellpropertiesview.d.ts} +11 -12
  52. package/{src → dist}/tablecellproperties.d.ts +1 -1
  53. package/{src → dist}/tablecellwidth/commands/tablecellwidthcommand.d.ts +1 -1
  54. package/{src → dist}/tablecellwidth/tablecellwidthediting.d.ts +1 -1
  55. package/{src → dist}/tableclipboard.d.ts +3 -3
  56. package/{src → dist}/tablecolumnresize/converters.d.ts +1 -1
  57. package/{src → dist}/tablecolumnresize/tablecolumnresizeediting.d.ts +2 -2
  58. package/{src → dist}/tablecolumnresize/tablewidthscommand.d.ts +2 -2
  59. package/{src → dist}/tablecolumnresize/utils.d.ts +2 -2
  60. package/{src → dist}/tablecolumnresize.d.ts +1 -1
  61. package/{src → dist}/tableconfig.d.ts +26 -6
  62. package/{src → dist}/tableediting.d.ts +3 -3
  63. package/{src → dist}/tablekeyboard.d.ts +3 -3
  64. package/{src → dist}/tablelayout/commands/tabletypecommand.d.ts +1 -1
  65. package/{src → dist}/tablelayout/tablelayoutediting.d.ts +1 -1
  66. package/{src → dist}/tablelayout/tablelayoutui.d.ts +1 -1
  67. package/{src → dist}/tablelayout.d.ts +1 -1
  68. package/{src → dist}/tablemouse/mouseeventsobserver.d.ts +1 -1
  69. package/{src → dist}/tablemouse.d.ts +1 -1
  70. package/{src → dist}/tableproperties/commands/tablealignmentcommand.d.ts +1 -1
  71. package/{src → dist}/tableproperties/commands/tablebackgroundcolorcommand.d.ts +1 -1
  72. package/{src → dist}/tableproperties/commands/tablebordercolorcommand.d.ts +2 -2
  73. package/{src → dist}/tableproperties/commands/tableborderstylecommand.d.ts +2 -2
  74. package/{src → dist}/tableproperties/commands/tableborderwidthcommand.d.ts +2 -2
  75. package/{src → dist}/tableproperties/commands/tableheightcommand.d.ts +1 -1
  76. package/{src → dist}/tableproperties/commands/tablepropertycommand.d.ts +2 -2
  77. package/{src → dist}/tableproperties/commands/tablewidthcommand.d.ts +1 -1
  78. package/{src → dist}/tableproperties/tablepropertiesediting.d.ts +1 -1
  79. package/{src → dist}/tableproperties/tablepropertiesui.d.ts +2 -2
  80. package/{src → dist}/tableproperties/ui/tablepropertiesview.d.ts +10 -2
  81. package/{src → dist}/tableproperties.d.ts +1 -1
  82. package/{src → dist}/tableselection.d.ts +2 -2
  83. package/{src → dist}/tabletoolbar.d.ts +2 -2
  84. package/{src → dist}/tableui.d.ts +1 -1
  85. package/{src → dist}/tableutils.d.ts +2 -2
  86. package/{src → dist}/tablewalker.d.ts +1 -1
  87. package/{src → dist}/ui/colorinputview.d.ts +2 -2
  88. package/{src → dist}/ui/inserttableview.d.ts +2 -2
  89. package/{src → dist}/utils/common.d.ts +2 -2
  90. package/{src → dist}/utils/structure.d.ts +1 -1
  91. package/{src → dist}/utils/table-properties.d.ts +1 -1
  92. package/{src → dist}/utils/ui/contextualballoon.d.ts +2 -2
  93. package/{src → dist}/utils/ui/table-properties.d.ts +2 -2
  94. package/{src → dist}/utils/ui/widget.d.ts +1 -1
  95. package/package.json +26 -49
  96. package/build/table.js +0 -5
  97. package/build/translations/af.js +0 -1
  98. package/build/translations/ar.js +0 -1
  99. package/build/translations/ast.js +0 -1
  100. package/build/translations/az.js +0 -1
  101. package/build/translations/be.js +0 -1
  102. package/build/translations/bg.js +0 -1
  103. package/build/translations/bn.js +0 -1
  104. package/build/translations/bs.js +0 -1
  105. package/build/translations/ca.js +0 -1
  106. package/build/translations/cs.js +0 -1
  107. package/build/translations/da.js +0 -1
  108. package/build/translations/de-ch.js +0 -1
  109. package/build/translations/de.js +0 -1
  110. package/build/translations/el.js +0 -1
  111. package/build/translations/en-au.js +0 -1
  112. package/build/translations/en-gb.js +0 -1
  113. package/build/translations/eo.js +0 -1
  114. package/build/translations/es-co.js +0 -1
  115. package/build/translations/es.js +0 -1
  116. package/build/translations/et.js +0 -1
  117. package/build/translations/eu.js +0 -1
  118. package/build/translations/fa.js +0 -1
  119. package/build/translations/fi.js +0 -1
  120. package/build/translations/fr.js +0 -1
  121. package/build/translations/gl.js +0 -1
  122. package/build/translations/gu.js +0 -1
  123. package/build/translations/he.js +0 -1
  124. package/build/translations/hi.js +0 -1
  125. package/build/translations/hr.js +0 -1
  126. package/build/translations/hu.js +0 -1
  127. package/build/translations/hy.js +0 -1
  128. package/build/translations/id.js +0 -1
  129. package/build/translations/it.js +0 -1
  130. package/build/translations/ja.js +0 -1
  131. package/build/translations/jv.js +0 -1
  132. package/build/translations/kk.js +0 -1
  133. package/build/translations/km.js +0 -1
  134. package/build/translations/kn.js +0 -1
  135. package/build/translations/ko.js +0 -1
  136. package/build/translations/ku.js +0 -1
  137. package/build/translations/lt.js +0 -1
  138. package/build/translations/lv.js +0 -1
  139. package/build/translations/ms.js +0 -1
  140. package/build/translations/nb.js +0 -1
  141. package/build/translations/ne.js +0 -1
  142. package/build/translations/nl.js +0 -1
  143. package/build/translations/no.js +0 -1
  144. package/build/translations/oc.js +0 -1
  145. package/build/translations/pl.js +0 -1
  146. package/build/translations/pt-br.js +0 -1
  147. package/build/translations/pt.js +0 -1
  148. package/build/translations/ro.js +0 -1
  149. package/build/translations/ru.js +0 -1
  150. package/build/translations/si.js +0 -1
  151. package/build/translations/sk.js +0 -1
  152. package/build/translations/sl.js +0 -1
  153. package/build/translations/sq.js +0 -1
  154. package/build/translations/sr-latn.js +0 -1
  155. package/build/translations/sr.js +0 -1
  156. package/build/translations/sv.js +0 -1
  157. package/build/translations/th.js +0 -1
  158. package/build/translations/ti.js +0 -1
  159. package/build/translations/tk.js +0 -1
  160. package/build/translations/tr.js +0 -1
  161. package/build/translations/tt.js +0 -1
  162. package/build/translations/ug.js +0 -1
  163. package/build/translations/uk.js +0 -1
  164. package/build/translations/ur.js +0 -1
  165. package/build/translations/uz.js +0 -1
  166. package/build/translations/vi.js +0 -1
  167. package/build/translations/zh-cn.js +0 -1
  168. package/build/translations/zh.js +0 -1
  169. package/lang/contexts.json +0 -82
  170. package/lang/translations/af.po +0 -332
  171. package/lang/translations/ar.po +0 -332
  172. package/lang/translations/ast.po +0 -332
  173. package/lang/translations/az.po +0 -332
  174. package/lang/translations/be.po +0 -332
  175. package/lang/translations/bg.po +0 -332
  176. package/lang/translations/bn.po +0 -334
  177. package/lang/translations/bs.po +0 -332
  178. package/lang/translations/ca.po +0 -332
  179. package/lang/translations/cs.po +0 -332
  180. package/lang/translations/da.po +0 -332
  181. package/lang/translations/de-ch.po +0 -332
  182. package/lang/translations/de.po +0 -332
  183. package/lang/translations/el.po +0 -332
  184. package/lang/translations/en-au.po +0 -332
  185. package/lang/translations/en-gb.po +0 -332
  186. package/lang/translations/en.po +0 -332
  187. package/lang/translations/eo.po +0 -332
  188. package/lang/translations/es-co.po +0 -332
  189. package/lang/translations/es.po +0 -332
  190. package/lang/translations/et.po +0 -332
  191. package/lang/translations/eu.po +0 -332
  192. package/lang/translations/fa.po +0 -332
  193. package/lang/translations/fi.po +0 -332
  194. package/lang/translations/fr.po +0 -332
  195. package/lang/translations/gl.po +0 -332
  196. package/lang/translations/gu.po +0 -332
  197. package/lang/translations/he.po +0 -332
  198. package/lang/translations/hi.po +0 -332
  199. package/lang/translations/hr.po +0 -332
  200. package/lang/translations/hu.po +0 -332
  201. package/lang/translations/hy.po +0 -332
  202. package/lang/translations/id.po +0 -332
  203. package/lang/translations/it.po +0 -332
  204. package/lang/translations/ja.po +0 -332
  205. package/lang/translations/jv.po +0 -332
  206. package/lang/translations/kk.po +0 -332
  207. package/lang/translations/km.po +0 -332
  208. package/lang/translations/kn.po +0 -332
  209. package/lang/translations/ko.po +0 -332
  210. package/lang/translations/ku.po +0 -332
  211. package/lang/translations/lt.po +0 -332
  212. package/lang/translations/lv.po +0 -332
  213. package/lang/translations/ms.po +0 -332
  214. package/lang/translations/nb.po +0 -332
  215. package/lang/translations/ne.po +0 -332
  216. package/lang/translations/nl.po +0 -332
  217. package/lang/translations/no.po +0 -332
  218. package/lang/translations/oc.po +0 -332
  219. package/lang/translations/pl.po +0 -332
  220. package/lang/translations/pt-br.po +0 -332
  221. package/lang/translations/pt.po +0 -332
  222. package/lang/translations/ro.po +0 -332
  223. package/lang/translations/ru.po +0 -332
  224. package/lang/translations/si.po +0 -332
  225. package/lang/translations/sk.po +0 -332
  226. package/lang/translations/sl.po +0 -332
  227. package/lang/translations/sq.po +0 -332
  228. package/lang/translations/sr-latn.po +0 -332
  229. package/lang/translations/sr.po +0 -332
  230. package/lang/translations/sv.po +0 -332
  231. package/lang/translations/th.po +0 -332
  232. package/lang/translations/ti.po +0 -332
  233. package/lang/translations/tk.po +0 -332
  234. package/lang/translations/tr.po +0 -332
  235. package/lang/translations/tt.po +0 -332
  236. package/lang/translations/ug.po +0 -332
  237. package/lang/translations/uk.po +0 -332
  238. package/lang/translations/ur.po +0 -332
  239. package/lang/translations/uz.po +0 -332
  240. package/lang/translations/vi.po +0 -332
  241. package/lang/translations/zh-cn.po +0 -332
  242. package/lang/translations/zh.po +0 -332
  243. package/src/augmentation.js +0 -5
  244. package/src/commands/insertcolumncommand.js +0 -71
  245. package/src/commands/insertrowcommand.js +0 -70
  246. package/src/commands/inserttablecommand.js +0 -69
  247. package/src/commands/inserttablelayoutcommand.js +0 -65
  248. package/src/commands/mergecellcommand.js +0 -206
  249. package/src/commands/mergecellscommand.js +0 -94
  250. package/src/commands/removecolumncommand.js +0 -109
  251. package/src/commands/removerowcommand.js +0 -82
  252. package/src/commands/selectcolumncommand.js +0 -60
  253. package/src/commands/selectrowcommand.js +0 -56
  254. package/src/commands/setheadercolumncommand.js +0 -76
  255. package/src/commands/setheaderrowcommand.js +0 -83
  256. package/src/commands/splitcellcommand.js +0 -58
  257. package/src/converters/downcast.js +0 -298
  258. package/src/converters/table-caption-post-fixer.js +0 -55
  259. package/src/converters/table-cell-paragraph-post-fixer.js +0 -109
  260. package/src/converters/table-cell-refresh-handler.js +0 -47
  261. package/src/converters/table-headings-refresh-handler.js +0 -51
  262. package/src/converters/table-layout-post-fixer.js +0 -369
  263. package/src/converters/tableproperties.js +0 -444
  264. package/src/converters/upcasttable.js +0 -385
  265. package/src/index.js +0 -98
  266. package/src/plaintableoutput.js +0 -49
  267. package/src/table.js +0 -50
  268. package/src/tablecaption/tablecaptionediting.js +0 -136
  269. package/src/tablecaption/tablecaptionui.js +0 -64
  270. package/src/tablecaption/toggletablecaptioncommand.js +0 -105
  271. package/src/tablecaption/utils.js +0 -61
  272. package/src/tablecaption.js +0 -34
  273. package/src/tablecellproperties/commands/tablecellbackgroundcolorcommand.js +0 -30
  274. package/src/tablecellproperties/commands/tablecellbordercolorcommand.js +0 -44
  275. package/src/tablecellproperties/commands/tablecellborderstylecommand.js +0 -44
  276. package/src/tablecellproperties/commands/tablecellborderwidthcommand.js +0 -64
  277. package/src/tablecellproperties/commands/tablecellheightcommand.js +0 -51
  278. package/src/tablecellproperties/commands/tablecellhorizontalalignmentcommand.js +0 -30
  279. package/src/tablecellproperties/commands/tablecellpaddingcommand.js +0 -64
  280. package/src/tablecellproperties/commands/tablecellpropertycommand.js +0 -138
  281. package/src/tablecellproperties/commands/tablecelltypecommand.js +0 -167
  282. package/src/tablecellproperties/commands/tablecellverticalalignmentcommand.js +0 -38
  283. package/src/tablecellproperties/tablecellpropertiesediting.js +0 -412
  284. package/src/tablecellproperties/tablecellpropertiesui.js +0 -385
  285. package/src/tablecellproperties/tablecellpropertiesuiexperimental.d.ts +0 -128
  286. package/src/tablecellproperties/tablecellpropertiesuiexperimental.js +0 -408
  287. package/src/tablecellproperties/ui/tablecellpropertiesview.d.ts +0 -229
  288. package/src/tablecellproperties/ui/tablecellpropertiesview.js +0 -612
  289. package/src/tablecellproperties/ui/tablecellpropertiesviewexperimental.js +0 -744
  290. package/src/tablecellproperties.js +0 -40
  291. package/src/tablecellwidth/commands/tablecellwidthcommand.js +0 -51
  292. package/src/tablecellwidth/tablecellwidthediting.js +0 -53
  293. package/src/tableclipboard.js +0 -500
  294. package/src/tablecolumnresize/constants.js +0 -33
  295. package/src/tablecolumnresize/converters.js +0 -62
  296. package/src/tablecolumnresize/tablecolumnresizeediting.js +0 -729
  297. package/src/tablecolumnresize/tablewidthscommand.js +0 -61
  298. package/src/tablecolumnresize/utils.js +0 -370
  299. package/src/tablecolumnresize.js +0 -36
  300. package/src/tableconfig.js +0 -5
  301. package/src/tableediting.js +0 -246
  302. package/src/tablekeyboard.js +0 -273
  303. package/src/tablelayout/commands/tabletypecommand.js +0 -68
  304. package/src/tablelayout/tablelayoutediting.js +0 -295
  305. package/src/tablelayout/tablelayoutui.js +0 -196
  306. package/src/tablelayout.js +0 -37
  307. package/src/tablemouse/mouseeventsobserver.js +0 -34
  308. package/src/tablemouse.js +0 -178
  309. package/src/tableproperties/commands/tablealignmentcommand.js +0 -30
  310. package/src/tableproperties/commands/tablebackgroundcolorcommand.js +0 -30
  311. package/src/tableproperties/commands/tablebordercolorcommand.js +0 -44
  312. package/src/tableproperties/commands/tableborderstylecommand.js +0 -44
  313. package/src/tableproperties/commands/tableborderwidthcommand.js +0 -64
  314. package/src/tableproperties/commands/tableheightcommand.js +0 -54
  315. package/src/tableproperties/commands/tablepropertycommand.js +0 -103
  316. package/src/tableproperties/commands/tablewidthcommand.js +0 -54
  317. package/src/tableproperties/tablepropertiesediting.js +0 -546
  318. package/src/tableproperties/tablepropertiesui.js +0 -374
  319. package/src/tableproperties/tablepropertiesuiexperimental.d.ts +0 -136
  320. package/src/tableproperties/tablepropertiesuiexperimental.js +0 -375
  321. package/src/tableproperties/ui/tablepropertiesview.js +0 -520
  322. package/src/tableproperties/ui/tablepropertiesviewexperimental.d.ts +0 -216
  323. package/src/tableproperties/ui/tablepropertiesviewexperimental.js +0 -544
  324. package/src/tableproperties.js +0 -40
  325. package/src/tableselection.js +0 -323
  326. package/src/tabletoolbar.js +0 -63
  327. package/src/tableui.js +0 -335
  328. package/src/tableutils.js +0 -1282
  329. package/src/tablewalker.js +0 -489
  330. package/src/ui/colorinputview.js +0 -305
  331. package/src/ui/inserttableview.js +0 -192
  332. package/src/utils/common.js +0 -118
  333. package/src/utils/structure.js +0 -452
  334. package/src/utils/table-properties.js +0 -121
  335. package/src/utils/ui/contextualballoon.js +0 -111
  336. package/src/utils/ui/table-properties.js +0 -390
  337. package/src/utils/ui/table-propertiesexperimental.d.ts +0 -215
  338. package/src/utils/ui/table-propertiesexperimental.js +0 -391
  339. package/src/utils/ui/widget.js +0 -56
  340. package/theme/colorinput.css +0 -39
  341. package/theme/formrow-experimental.css +0 -15
  342. package/theme/formrow.css +0 -13
  343. package/theme/inserttable.css +0 -10
  344. package/theme/table.css +0 -144
  345. package/theme/tablecaption.css +0 -66
  346. package/theme/tablecellproperties-experimental.css +0 -4
  347. package/theme/tablecellproperties.css +0 -28
  348. package/theme/tablecolumnresize.css +0 -62
  349. package/theme/tableediting.css +0 -10
  350. package/theme/tableform-experimental.css +0 -61
  351. package/theme/tableform.css +0 -64
  352. package/theme/tablelayout.css +0 -74
  353. package/theme/tableproperties-experimental.css +0 -78
  354. package/theme/tableproperties.css +0 -18
  355. package/theme/tableselection.css +0 -10
  356. /package/{src → dist}/tablecolumnresize/constants.d.ts +0 -0
@@ -1,323 +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/tableselection
7
- */
8
- import { Plugin } from 'ckeditor5/src/core.js';
9
- import { first } from 'ckeditor5/src/utils.js';
10
- import { TableWalker } from './tablewalker.js';
11
- import { TableUtils } from './tableutils.js';
12
- import { cropTableToDimensions, adjustLastRowIndex, adjustLastColumnIndex } from './utils/structure.js';
13
- import '../theme/tableselection.css';
14
- /**
15
- * This plugin enables the advanced table cells, rows and columns selection.
16
- * It is loaded automatically by the {@link module:table/table~Table} plugin.
17
- */
18
- export class TableSelection extends Plugin {
19
- /**
20
- * @inheritDoc
21
- */
22
- static get pluginName() {
23
- return 'TableSelection';
24
- }
25
- /**
26
- * @inheritDoc
27
- */
28
- static get isOfficialPlugin() {
29
- return true;
30
- }
31
- /**
32
- * @inheritDoc
33
- */
34
- static get requires() {
35
- return [TableUtils, TableUtils];
36
- }
37
- /**
38
- * @inheritDoc
39
- */
40
- init() {
41
- const editor = this.editor;
42
- const model = editor.model;
43
- const view = editor.editing.view;
44
- this.listenTo(model, 'deleteContent', (evt, args) => this._handleDeleteContent(evt, args), { priority: 'high' });
45
- this.listenTo(view.document, 'insertText', (evt, data) => this._handleInsertTextEvent(evt, data), { priority: 'high' });
46
- this._defineSelectionConverter();
47
- this._enablePluginDisabling(); // sic!
48
- }
49
- /**
50
- * Returns the currently selected table cells or `null` if it is not a table cells selection.
51
- */
52
- getSelectedTableCells() {
53
- const tableUtils = this.editor.plugins.get(TableUtils);
54
- const selection = this.editor.model.document.selection;
55
- const selectedCells = tableUtils.getSelectedTableCells(selection);
56
- if (selectedCells.length == 0) {
57
- return null;
58
- }
59
- // This should never happen, but let's know if it ever happens.
60
- // @if CK_DEBUG // if ( selectedCells.length != selection.rangeCount ) {
61
- // @if CK_DEBUG // console.warn( 'Mixed selection warning. The selection contains table cells and some other ranges.' );
62
- // @if CK_DEBUG // }
63
- return selectedCells;
64
- }
65
- /**
66
- * Returns the selected table fragment as a document fragment.
67
- */
68
- getSelectionAsFragment() {
69
- const tableUtils = this.editor.plugins.get(TableUtils);
70
- const selectedCells = this.getSelectedTableCells();
71
- if (!selectedCells) {
72
- return null;
73
- }
74
- return this.editor.model.change(writer => {
75
- const documentFragment = writer.createDocumentFragment();
76
- const { first: firstColumn, last: lastColumn } = tableUtils.getColumnIndexes(selectedCells);
77
- const { first: firstRow, last: lastRow } = tableUtils.getRowIndexes(selectedCells);
78
- const sourceTable = selectedCells[0].findAncestor('table');
79
- let adjustedLastRow = lastRow;
80
- let adjustedLastColumn = lastColumn;
81
- // If the selection is rectangular there could be a case of all cells in the last row/column spanned over
82
- // next row/column so the real lastRow/lastColumn should be updated.
83
- if (tableUtils.isSelectionRectangular(selectedCells)) {
84
- const dimensions = {
85
- firstColumn,
86
- lastColumn,
87
- firstRow,
88
- lastRow
89
- };
90
- adjustedLastRow = adjustLastRowIndex(sourceTable, dimensions);
91
- adjustedLastColumn = adjustLastColumnIndex(sourceTable, dimensions);
92
- }
93
- const cropDimensions = {
94
- startRow: firstRow,
95
- startColumn: firstColumn,
96
- endRow: adjustedLastRow,
97
- endColumn: adjustedLastColumn
98
- };
99
- const table = cropTableToDimensions(sourceTable, cropDimensions, writer);
100
- writer.insert(table, documentFragment, 0);
101
- return documentFragment;
102
- });
103
- }
104
- /**
105
- * Sets the model selection based on given anchor and target cells (can be the same cell).
106
- * Takes care of setting the backward flag.
107
- *
108
- * ```ts
109
- * const modelRoot = editor.model.document.getRoot();
110
- * const firstCell = modelRoot.getNodeByPath( [ 0, 0, 0 ] );
111
- * const lastCell = modelRoot.getNodeByPath( [ 0, 0, 1 ] );
112
- *
113
- * const tableSelection = editor.plugins.get( 'TableSelection' );
114
- * tableSelection.setCellSelection( firstCell, lastCell );
115
- * ```
116
- */
117
- setCellSelection(anchorCell, targetCell) {
118
- const cellsToSelect = this._getCellsToSelect(anchorCell, targetCell);
119
- this.editor.model.change(writer => {
120
- writer.setSelection(cellsToSelect.cells.map(cell => writer.createRangeOn(cell)), { backward: cellsToSelect.backward });
121
- });
122
- }
123
- /**
124
- * Returns the focus cell from the current selection.
125
- */
126
- getFocusCell() {
127
- const selection = this.editor.model.document.selection;
128
- const focusCellRange = [...selection.getRanges()].pop();
129
- const element = focusCellRange.getContainedElement();
130
- if (element && element.is('element', 'tableCell')) {
131
- return element;
132
- }
133
- return null;
134
- }
135
- /**
136
- * Returns the anchor cell from the current selection.
137
- */
138
- getAnchorCell() {
139
- const selection = this.editor.model.document.selection;
140
- const anchorCellRange = first(selection.getRanges());
141
- const element = anchorCellRange.getContainedElement();
142
- if (element && element.is('element', 'tableCell')) {
143
- return element;
144
- }
145
- return null;
146
- }
147
- /**
148
- * Defines a selection converter which marks the selected cells with a specific class.
149
- *
150
- * The real DOM selection is put in the last cell. Since the order of ranges is dependent on whether the
151
- * selection is backward or not, the last cell will usually be close to the "focus" end of the selection
152
- * (a selection has anchor and focus).
153
- *
154
- * The real DOM selection is then hidden with CSS.
155
- */
156
- _defineSelectionConverter() {
157
- const editor = this.editor;
158
- const highlighted = new Set();
159
- editor.conversion.for('editingDowncast').add(dispatcher => dispatcher.on('selection', (evt, data, conversionApi) => {
160
- const viewWriter = conversionApi.writer;
161
- clearHighlightedTableCells(viewWriter);
162
- const selectedCells = this.getSelectedTableCells();
163
- if (!selectedCells) {
164
- return;
165
- }
166
- for (const tableCell of selectedCells) {
167
- const viewElement = conversionApi.mapper.toViewElement(tableCell);
168
- viewWriter.addClass('ck-editor__editable_selected', viewElement);
169
- highlighted.add(viewElement);
170
- }
171
- const lastViewCell = conversionApi.mapper.toViewElement(selectedCells[selectedCells.length - 1]);
172
- viewWriter.setSelection(lastViewCell, 0);
173
- }, { priority: 'lowest' }));
174
- function clearHighlightedTableCells(viewWriter) {
175
- for (const previouslyHighlighted of highlighted) {
176
- viewWriter.removeClass('ck-editor__editable_selected', previouslyHighlighted);
177
- }
178
- highlighted.clear();
179
- }
180
- }
181
- /**
182
- * Creates a listener that reacts to changes in {@link #isEnabled} and, if the plugin was disabled,
183
- * it collapses the multi-cell selection to a regular selection placed inside a table cell.
184
- *
185
- * This listener helps features that disable the table selection plugin bring the selection
186
- * to a clear state they can work with (for instance, because they don't support multiple cell selection).
187
- */
188
- _enablePluginDisabling() {
189
- const editor = this.editor;
190
- this.on('change:isEnabled', () => {
191
- if (!this.isEnabled) {
192
- const selectedCells = this.getSelectedTableCells();
193
- if (!selectedCells) {
194
- return;
195
- }
196
- editor.model.change(writer => {
197
- const position = writer.createPositionAt(selectedCells[0], 0);
198
- const range = editor.model.schema.getNearestSelectionRange(position);
199
- writer.setSelection(range);
200
- });
201
- }
202
- });
203
- }
204
- /**
205
- * Overrides the default `model.deleteContent()` behavior over a selected table fragment.
206
- *
207
- * @param args Delete content method arguments.
208
- */
209
- _handleDeleteContent(event, args) {
210
- const tableUtils = this.editor.plugins.get(TableUtils);
211
- const selection = args[0];
212
- const options = args[1];
213
- const model = this.editor.model;
214
- const isBackward = !options || options.direction == 'backward';
215
- const selectedTableCells = tableUtils.getSelectedTableCells(selection);
216
- if (!selectedTableCells.length) {
217
- return;
218
- }
219
- event.stop();
220
- model.change(writer => {
221
- const tableCellToSelect = selectedTableCells[isBackward ? selectedTableCells.length - 1 : 0];
222
- model.change(writer => {
223
- for (const tableCell of selectedTableCells) {
224
- model.deleteContent(writer.createSelection(tableCell, 'in'));
225
- }
226
- });
227
- const rangeToSelect = model.schema.getNearestSelectionRange(writer.createPositionAt(tableCellToSelect, 0));
228
- // Note: we ignore the case where rangeToSelect may be null because deleteContent() will always (unless someone broke it)
229
- // create an empty paragraph to accommodate the selection.
230
- if (selection.is('documentSelection')) {
231
- writer.setSelection(rangeToSelect);
232
- }
233
- else {
234
- selection.setTo(rangeToSelect);
235
- }
236
- });
237
- }
238
- /**
239
- * This handler makes it possible to remove the content of all selected cells by starting to type.
240
- * If you take a look at {@link #_defineSelectionConverter} you will find out that despite the multi-cell selection being set
241
- * in the model, the view selection is collapsed in the last cell (because most browsers are unable to render multi-cell selections;
242
- * yes, it's a hack).
243
- *
244
- * When multiple cells are selected in the model and the user starts to type, the
245
- * {@link module:engine/view/document~ViewDocument#event:insertText} event carries information provided by the
246
- * beforeinput DOM event, that in turn only knows about this collapsed DOM selection in the last cell.
247
- *
248
- * As a result, the selected cells have no chance to be cleaned up. To fix this, this listener intercepts
249
- * the event and injects the custom view selection in the data that translates correctly to the actual state
250
- * of the multi-cell selection in the model.
251
- *
252
- * @param data Insert text event data.
253
- */
254
- _handleInsertTextEvent(evt, data) {
255
- const editor = this.editor;
256
- const selectedCells = this.getSelectedTableCells();
257
- if (!selectedCells) {
258
- return;
259
- }
260
- const view = editor.editing.view;
261
- const mapper = editor.editing.mapper;
262
- const viewRanges = selectedCells.map(tableCell => view.createRangeOn(mapper.toViewElement(tableCell)));
263
- data.selection = view.createSelection(viewRanges);
264
- // Do not let the browser handle it itself. We must modify the model and then apply changes to the view and DOM.
265
- data.preventDefault();
266
- }
267
- /**
268
- * Returns an array of table cells that should be selected based on the
269
- * given anchor cell and target (focus) cell.
270
- *
271
- * The cells are returned in a reverse direction if the selection is backward.
272
- */
273
- _getCellsToSelect(anchorCell, targetCell) {
274
- const tableUtils = this.editor.plugins.get('TableUtils');
275
- const startLocation = tableUtils.getCellLocation(anchorCell);
276
- const endLocation = tableUtils.getCellLocation(targetCell);
277
- const startRow = Math.min(startLocation.row, endLocation.row);
278
- const endRow = Math.max(startLocation.row, endLocation.row);
279
- const startColumn = Math.min(startLocation.column, endLocation.column);
280
- // Adjust the selection to include the entire row if a cell with colspan is selected.
281
- // This ensures that the selection covers the full width of the colspan cell.
282
- //
283
- // Example:
284
- // +---+---+---+---+
285
- // | A | B | C | D |
286
- // +---+---+---+---+
287
- // | E |
288
- // +---+---+---+---+
289
- //
290
- // If the selection starts at `B` and ends at `E`, the entire first row should be selected.
291
- //
292
- // In other words, the selection will represent the following cells:
293
- // * Without this adjustment, only `B`, `A` and `E` would be selected.
294
- // * With this adjustment, `A`, `B`, `C`, `D`, and `E` are selected.
295
- //
296
- // See: https://github.com/ckeditor/ckeditor5/issues/17538
297
- const endColumnExtraColspan = (parseInt(targetCell.getAttribute('colspan') || '1') - 1);
298
- const endColumn = Math.max(startLocation.column, endLocation.column + endColumnExtraColspan);
299
- // 2-dimensional array of the selected cells to ease flipping the order of cells for backward selections.
300
- const selectionMap = new Array(endRow - startRow + 1).fill(null).map(() => []);
301
- const walkerOptions = {
302
- startRow,
303
- endRow,
304
- startColumn,
305
- endColumn
306
- };
307
- for (const { row, cell } of new TableWalker(anchorCell.findAncestor('table'), walkerOptions)) {
308
- selectionMap[row - startRow].push(cell);
309
- }
310
- const flipVertically = endLocation.row < startLocation.row;
311
- const flipHorizontally = endLocation.column < startLocation.column;
312
- if (flipVertically) {
313
- selectionMap.reverse();
314
- }
315
- if (flipHorizontally) {
316
- selectionMap.forEach(row => row.reverse());
317
- }
318
- return {
319
- cells: selectionMap.flat(),
320
- backward: flipVertically || flipHorizontally
321
- };
322
- }
323
- }
@@ -1,63 +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/tabletoolbar
7
- */
8
- import { Plugin } from 'ckeditor5/src/core.js';
9
- import { WidgetToolbarRepository } from 'ckeditor5/src/widget.js';
10
- import { getSelectedTableWidget, getTableWidgetAncestor } from './utils/ui/widget.js';
11
- /**
12
- * The table toolbar class. It creates toolbars for the table feature and its content (for now only for the table cell content).
13
- *
14
- * The table toolbar shows up when a table widget is selected. Its components (e.g. buttons) are created based on the
15
- * {@link module:table/tableconfig~TableConfig#tableToolbar `table.tableToolbar` configuration option}.
16
- *
17
- * Table content toolbar shows up when the selection is inside the content of a table. It creates its component based on the
18
- * {@link module:table/tableconfig~TableConfig#contentToolbar `table.contentToolbar` configuration option}.
19
- */
20
- export class TableToolbar extends Plugin {
21
- /**
22
- * @inheritDoc
23
- */
24
- static get requires() {
25
- return [WidgetToolbarRepository];
26
- }
27
- /**
28
- * @inheritDoc
29
- */
30
- static get pluginName() {
31
- return 'TableToolbar';
32
- }
33
- /**
34
- * @inheritDoc
35
- */
36
- static get isOfficialPlugin() {
37
- return true;
38
- }
39
- /**
40
- * @inheritDoc
41
- */
42
- afterInit() {
43
- const editor = this.editor;
44
- const t = editor.t;
45
- const widgetToolbarRepository = editor.plugins.get(WidgetToolbarRepository);
46
- const tableContentToolbarItems = editor.config.get('table.contentToolbar');
47
- const tableToolbarItems = editor.config.get('table.tableToolbar');
48
- if (tableContentToolbarItems) {
49
- widgetToolbarRepository.register('tableContent', {
50
- ariaLabel: t('Table toolbar'),
51
- items: tableContentToolbarItems,
52
- getRelatedElement: getTableWidgetAncestor
53
- });
54
- }
55
- if (tableToolbarItems) {
56
- widgetToolbarRepository.register('table', {
57
- ariaLabel: t('Table toolbar'),
58
- items: tableToolbarItems,
59
- getRelatedElement: getSelectedTableWidget
60
- });
61
- }
62
- }
63
- }