@ckeditor/ckeditor5-table 47.3.0 → 47.4.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 (574) hide show
  1. package/LICENSE.md +1 -1
  2. package/build/table.js +3 -3
  3. package/build/translations/af.js +1 -1
  4. package/build/translations/ar.js +1 -1
  5. package/build/translations/ast.js +1 -1
  6. package/build/translations/az.js +1 -1
  7. package/build/translations/be.js +1 -1
  8. package/build/translations/bg.js +1 -1
  9. package/build/translations/bn.js +1 -1
  10. package/build/translations/bs.js +1 -1
  11. package/build/translations/ca.js +1 -1
  12. package/build/translations/cs.js +1 -1
  13. package/build/translations/da.js +1 -1
  14. package/build/translations/de-ch.js +1 -1
  15. package/build/translations/de.js +1 -1
  16. package/build/translations/el.js +1 -1
  17. package/build/translations/en-au.js +1 -1
  18. package/build/translations/en-gb.js +1 -1
  19. package/build/translations/eo.js +1 -1
  20. package/build/translations/es-co.js +1 -1
  21. package/build/translations/es.js +1 -1
  22. package/build/translations/et.js +1 -1
  23. package/build/translations/eu.js +1 -1
  24. package/build/translations/fa.js +1 -1
  25. package/build/translations/fi.js +1 -1
  26. package/build/translations/fr.js +1 -1
  27. package/build/translations/gl.js +1 -1
  28. package/build/translations/gu.js +1 -1
  29. package/build/translations/he.js +1 -1
  30. package/build/translations/hi.js +1 -1
  31. package/build/translations/hr.js +1 -1
  32. package/build/translations/hu.js +1 -1
  33. package/build/translations/hy.js +1 -1
  34. package/build/translations/id.js +1 -1
  35. package/build/translations/it.js +1 -1
  36. package/build/translations/ja.js +1 -1
  37. package/build/translations/jv.js +1 -1
  38. package/build/translations/kk.js +1 -1
  39. package/build/translations/km.js +1 -1
  40. package/build/translations/kn.js +1 -1
  41. package/build/translations/ko.js +1 -1
  42. package/build/translations/ku.js +1 -1
  43. package/build/translations/lt.js +1 -1
  44. package/build/translations/lv.js +1 -1
  45. package/build/translations/ms.js +1 -1
  46. package/build/translations/nb.js +1 -1
  47. package/build/translations/ne.js +1 -1
  48. package/build/translations/nl.js +1 -1
  49. package/build/translations/no.js +1 -1
  50. package/build/translations/oc.js +1 -1
  51. package/build/translations/pl.js +1 -1
  52. package/build/translations/pt-br.js +1 -1
  53. package/build/translations/pt.js +1 -1
  54. package/build/translations/ro.js +1 -1
  55. package/build/translations/ru.js +1 -1
  56. package/build/translations/si.js +1 -1
  57. package/build/translations/sk.js +1 -1
  58. package/build/translations/sl.js +1 -1
  59. package/build/translations/sq.js +1 -1
  60. package/build/translations/sr-latn.js +1 -1
  61. package/build/translations/sr.js +1 -1
  62. package/build/translations/sv.js +1 -1
  63. package/build/translations/th.js +1 -1
  64. package/build/translations/ti.js +1 -1
  65. package/build/translations/tk.js +1 -1
  66. package/build/translations/tr.js +1 -1
  67. package/build/translations/tt.js +1 -1
  68. package/build/translations/ug.js +1 -1
  69. package/build/translations/uk.js +1 -1
  70. package/build/translations/ur.js +1 -1
  71. package/build/translations/uz.js +1 -1
  72. package/build/translations/vi.js +1 -1
  73. package/build/translations/zh-cn.js +1 -1
  74. package/build/translations/zh.js +1 -1
  75. package/dist/index-content.css +5 -1
  76. package/dist/index-editor.css +77 -86
  77. package/dist/index.css +124 -127
  78. package/dist/index.css.map +1 -1
  79. package/dist/index.js +863 -138
  80. package/dist/index.js.map +1 -1
  81. package/dist/translations/af.d.ts +1 -1
  82. package/dist/translations/af.js +2 -2
  83. package/dist/translations/af.umd.js +2 -2
  84. package/dist/translations/ar.d.ts +1 -1
  85. package/dist/translations/ar.js +2 -2
  86. package/dist/translations/ar.umd.js +2 -2
  87. package/dist/translations/ast.d.ts +1 -1
  88. package/dist/translations/ast.js +2 -2
  89. package/dist/translations/ast.umd.js +2 -2
  90. package/dist/translations/az.d.ts +1 -1
  91. package/dist/translations/az.js +2 -2
  92. package/dist/translations/az.umd.js +2 -2
  93. package/dist/translations/be.d.ts +1 -1
  94. package/dist/translations/be.js +2 -2
  95. package/dist/translations/be.umd.js +2 -2
  96. package/dist/translations/bg.d.ts +1 -1
  97. package/dist/translations/bg.js +2 -2
  98. package/dist/translations/bg.umd.js +2 -2
  99. package/dist/translations/bn.d.ts +1 -1
  100. package/dist/translations/bn.js +2 -2
  101. package/dist/translations/bn.umd.js +2 -2
  102. package/dist/translations/bs.d.ts +1 -1
  103. package/dist/translations/bs.js +2 -2
  104. package/dist/translations/bs.umd.js +2 -2
  105. package/dist/translations/ca.d.ts +1 -1
  106. package/dist/translations/ca.js +2 -2
  107. package/dist/translations/ca.umd.js +2 -2
  108. package/dist/translations/cs.d.ts +1 -1
  109. package/dist/translations/cs.js +2 -2
  110. package/dist/translations/cs.umd.js +2 -2
  111. package/dist/translations/da.d.ts +1 -1
  112. package/dist/translations/da.js +2 -2
  113. package/dist/translations/da.umd.js +2 -2
  114. package/dist/translations/de-ch.d.ts +1 -1
  115. package/dist/translations/de-ch.js +2 -2
  116. package/dist/translations/de-ch.umd.js +2 -2
  117. package/dist/translations/de.d.ts +1 -1
  118. package/dist/translations/de.js +2 -2
  119. package/dist/translations/de.umd.js +2 -2
  120. package/dist/translations/el.d.ts +1 -1
  121. package/dist/translations/el.js +2 -2
  122. package/dist/translations/el.umd.js +2 -2
  123. package/dist/translations/en-au.d.ts +1 -1
  124. package/dist/translations/en-au.js +2 -2
  125. package/dist/translations/en-au.umd.js +2 -2
  126. package/dist/translations/en-gb.d.ts +1 -1
  127. package/dist/translations/en-gb.js +2 -2
  128. package/dist/translations/en-gb.umd.js +2 -2
  129. package/dist/translations/en.d.ts +1 -1
  130. package/dist/translations/en.js +2 -2
  131. package/dist/translations/en.umd.js +2 -2
  132. package/dist/translations/eo.d.ts +1 -1
  133. package/dist/translations/eo.js +2 -2
  134. package/dist/translations/eo.umd.js +2 -2
  135. package/dist/translations/es-co.d.ts +1 -1
  136. package/dist/translations/es-co.js +2 -2
  137. package/dist/translations/es-co.umd.js +2 -2
  138. package/dist/translations/es.d.ts +1 -1
  139. package/dist/translations/es.js +2 -2
  140. package/dist/translations/es.umd.js +2 -2
  141. package/dist/translations/et.d.ts +1 -1
  142. package/dist/translations/et.js +2 -2
  143. package/dist/translations/et.umd.js +2 -2
  144. package/dist/translations/eu.d.ts +1 -1
  145. package/dist/translations/eu.js +2 -2
  146. package/dist/translations/eu.umd.js +2 -2
  147. package/dist/translations/fa.d.ts +1 -1
  148. package/dist/translations/fa.js +2 -2
  149. package/dist/translations/fa.umd.js +2 -2
  150. package/dist/translations/fi.d.ts +1 -1
  151. package/dist/translations/fi.js +2 -2
  152. package/dist/translations/fi.umd.js +2 -2
  153. package/dist/translations/fr.d.ts +1 -1
  154. package/dist/translations/fr.js +2 -2
  155. package/dist/translations/fr.umd.js +2 -2
  156. package/dist/translations/gl.d.ts +1 -1
  157. package/dist/translations/gl.js +2 -2
  158. package/dist/translations/gl.umd.js +2 -2
  159. package/dist/translations/gu.d.ts +1 -1
  160. package/dist/translations/gu.js +2 -2
  161. package/dist/translations/gu.umd.js +2 -2
  162. package/dist/translations/he.d.ts +1 -1
  163. package/dist/translations/he.js +2 -2
  164. package/dist/translations/he.umd.js +2 -2
  165. package/dist/translations/hi.d.ts +1 -1
  166. package/dist/translations/hi.js +2 -2
  167. package/dist/translations/hi.umd.js +2 -2
  168. package/dist/translations/hr.d.ts +1 -1
  169. package/dist/translations/hr.js +2 -2
  170. package/dist/translations/hr.umd.js +2 -2
  171. package/dist/translations/hu.d.ts +1 -1
  172. package/dist/translations/hu.js +2 -2
  173. package/dist/translations/hu.umd.js +2 -2
  174. package/dist/translations/hy.d.ts +1 -1
  175. package/dist/translations/hy.js +2 -2
  176. package/dist/translations/hy.umd.js +2 -2
  177. package/dist/translations/id.d.ts +1 -1
  178. package/dist/translations/id.js +2 -2
  179. package/dist/translations/id.umd.js +2 -2
  180. package/dist/translations/it.d.ts +1 -1
  181. package/dist/translations/it.js +2 -2
  182. package/dist/translations/it.umd.js +2 -2
  183. package/dist/translations/ja.d.ts +1 -1
  184. package/dist/translations/ja.js +2 -2
  185. package/dist/translations/ja.umd.js +2 -2
  186. package/dist/translations/jv.d.ts +1 -1
  187. package/dist/translations/jv.js +2 -2
  188. package/dist/translations/jv.umd.js +2 -2
  189. package/dist/translations/kk.d.ts +1 -1
  190. package/dist/translations/kk.js +2 -2
  191. package/dist/translations/kk.umd.js +2 -2
  192. package/dist/translations/km.d.ts +1 -1
  193. package/dist/translations/km.js +2 -2
  194. package/dist/translations/km.umd.js +2 -2
  195. package/dist/translations/kn.d.ts +1 -1
  196. package/dist/translations/kn.js +2 -2
  197. package/dist/translations/kn.umd.js +2 -2
  198. package/dist/translations/ko.d.ts +1 -1
  199. package/dist/translations/ko.js +2 -2
  200. package/dist/translations/ko.umd.js +2 -2
  201. package/dist/translations/ku.d.ts +1 -1
  202. package/dist/translations/ku.js +2 -2
  203. package/dist/translations/ku.umd.js +2 -2
  204. package/dist/translations/lt.d.ts +1 -1
  205. package/dist/translations/lt.js +2 -2
  206. package/dist/translations/lt.umd.js +2 -2
  207. package/dist/translations/lv.d.ts +1 -1
  208. package/dist/translations/lv.js +2 -2
  209. package/dist/translations/lv.umd.js +2 -2
  210. package/dist/translations/ms.d.ts +1 -1
  211. package/dist/translations/ms.js +2 -2
  212. package/dist/translations/ms.umd.js +2 -2
  213. package/dist/translations/nb.d.ts +1 -1
  214. package/dist/translations/nb.js +2 -2
  215. package/dist/translations/nb.umd.js +2 -2
  216. package/dist/translations/ne.d.ts +1 -1
  217. package/dist/translations/ne.js +2 -2
  218. package/dist/translations/ne.umd.js +2 -2
  219. package/dist/translations/nl.d.ts +1 -1
  220. package/dist/translations/nl.js +2 -2
  221. package/dist/translations/nl.umd.js +2 -2
  222. package/dist/translations/no.d.ts +1 -1
  223. package/dist/translations/no.js +2 -2
  224. package/dist/translations/no.umd.js +2 -2
  225. package/dist/translations/oc.d.ts +1 -1
  226. package/dist/translations/oc.js +2 -2
  227. package/dist/translations/oc.umd.js +2 -2
  228. package/dist/translations/pl.d.ts +1 -1
  229. package/dist/translations/pl.js +2 -2
  230. package/dist/translations/pl.umd.js +2 -2
  231. package/dist/translations/pt-br.d.ts +1 -1
  232. package/dist/translations/pt-br.js +2 -2
  233. package/dist/translations/pt-br.umd.js +2 -2
  234. package/dist/translations/pt.d.ts +1 -1
  235. package/dist/translations/pt.js +2 -2
  236. package/dist/translations/pt.umd.js +2 -2
  237. package/dist/translations/ro.d.ts +1 -1
  238. package/dist/translations/ro.js +2 -2
  239. package/dist/translations/ro.umd.js +2 -2
  240. package/dist/translations/ru.d.ts +1 -1
  241. package/dist/translations/ru.js +2 -2
  242. package/dist/translations/ru.umd.js +2 -2
  243. package/dist/translations/si.d.ts +1 -1
  244. package/dist/translations/si.js +2 -2
  245. package/dist/translations/si.umd.js +2 -2
  246. package/dist/translations/sk.d.ts +1 -1
  247. package/dist/translations/sk.js +2 -2
  248. package/dist/translations/sk.umd.js +2 -2
  249. package/dist/translations/sl.d.ts +1 -1
  250. package/dist/translations/sl.js +2 -2
  251. package/dist/translations/sl.umd.js +2 -2
  252. package/dist/translations/sq.d.ts +1 -1
  253. package/dist/translations/sq.js +2 -2
  254. package/dist/translations/sq.umd.js +2 -2
  255. package/dist/translations/sr-latn.d.ts +1 -1
  256. package/dist/translations/sr-latn.js +2 -2
  257. package/dist/translations/sr-latn.umd.js +2 -2
  258. package/dist/translations/sr.d.ts +1 -1
  259. package/dist/translations/sr.js +2 -2
  260. package/dist/translations/sr.umd.js +2 -2
  261. package/dist/translations/sv.d.ts +1 -1
  262. package/dist/translations/sv.js +2 -2
  263. package/dist/translations/sv.umd.js +2 -2
  264. package/dist/translations/th.d.ts +1 -1
  265. package/dist/translations/th.js +2 -2
  266. package/dist/translations/th.umd.js +2 -2
  267. package/dist/translations/ti.d.ts +1 -1
  268. package/dist/translations/ti.js +2 -2
  269. package/dist/translations/ti.umd.js +2 -2
  270. package/dist/translations/tk.d.ts +1 -1
  271. package/dist/translations/tk.js +2 -2
  272. package/dist/translations/tk.umd.js +2 -2
  273. package/dist/translations/tr.d.ts +1 -1
  274. package/dist/translations/tr.js +2 -2
  275. package/dist/translations/tr.umd.js +2 -2
  276. package/dist/translations/tt.d.ts +1 -1
  277. package/dist/translations/tt.js +2 -2
  278. package/dist/translations/tt.umd.js +2 -2
  279. package/dist/translations/ug.d.ts +1 -1
  280. package/dist/translations/ug.js +2 -2
  281. package/dist/translations/ug.umd.js +2 -2
  282. package/dist/translations/uk.d.ts +1 -1
  283. package/dist/translations/uk.js +2 -2
  284. package/dist/translations/uk.umd.js +2 -2
  285. package/dist/translations/ur.d.ts +1 -1
  286. package/dist/translations/ur.js +2 -2
  287. package/dist/translations/ur.umd.js +2 -2
  288. package/dist/translations/uz.d.ts +1 -1
  289. package/dist/translations/uz.js +2 -2
  290. package/dist/translations/uz.umd.js +2 -2
  291. package/dist/translations/vi.d.ts +1 -1
  292. package/dist/translations/vi.js +2 -2
  293. package/dist/translations/vi.umd.js +2 -2
  294. package/dist/translations/zh-cn.d.ts +1 -1
  295. package/dist/translations/zh-cn.js +2 -2
  296. package/dist/translations/zh-cn.umd.js +2 -2
  297. package/dist/translations/zh.d.ts +1 -1
  298. package/dist/translations/zh.js +2 -2
  299. package/dist/translations/zh.umd.js +2 -2
  300. package/lang/contexts.json +3 -0
  301. package/lang/translations/af.po +13 -1
  302. package/lang/translations/ar.po +13 -1
  303. package/lang/translations/ast.po +13 -1
  304. package/lang/translations/az.po +13 -1
  305. package/lang/translations/be.po +13 -1
  306. package/lang/translations/bg.po +13 -1
  307. package/lang/translations/bn.po +13 -1
  308. package/lang/translations/bs.po +13 -1
  309. package/lang/translations/ca.po +13 -1
  310. package/lang/translations/cs.po +13 -1
  311. package/lang/translations/da.po +13 -1
  312. package/lang/translations/de-ch.po +13 -1
  313. package/lang/translations/de.po +13 -1
  314. package/lang/translations/el.po +13 -1
  315. package/lang/translations/en-au.po +13 -1
  316. package/lang/translations/en-gb.po +13 -1
  317. package/lang/translations/en.po +13 -1
  318. package/lang/translations/eo.po +13 -1
  319. package/lang/translations/es-co.po +13 -1
  320. package/lang/translations/es.po +13 -1
  321. package/lang/translations/et.po +13 -1
  322. package/lang/translations/eu.po +13 -1
  323. package/lang/translations/fa.po +13 -1
  324. package/lang/translations/fi.po +13 -1
  325. package/lang/translations/fr.po +13 -1
  326. package/lang/translations/gl.po +13 -1
  327. package/lang/translations/gu.po +13 -1
  328. package/lang/translations/he.po +13 -1
  329. package/lang/translations/hi.po +13 -1
  330. package/lang/translations/hr.po +13 -1
  331. package/lang/translations/hu.po +13 -1
  332. package/lang/translations/hy.po +13 -1
  333. package/lang/translations/id.po +13 -1
  334. package/lang/translations/it.po +13 -1
  335. package/lang/translations/ja.po +13 -1
  336. package/lang/translations/jv.po +13 -1
  337. package/lang/translations/kk.po +13 -1
  338. package/lang/translations/km.po +13 -1
  339. package/lang/translations/kn.po +13 -1
  340. package/lang/translations/ko.po +13 -1
  341. package/lang/translations/ku.po +13 -1
  342. package/lang/translations/lt.po +13 -1
  343. package/lang/translations/lv.po +13 -1
  344. package/lang/translations/ms.po +13 -1
  345. package/lang/translations/nb.po +13 -1
  346. package/lang/translations/ne.po +13 -1
  347. package/lang/translations/nl.po +13 -1
  348. package/lang/translations/no.po +13 -1
  349. package/lang/translations/oc.po +13 -1
  350. package/lang/translations/pl.po +13 -1
  351. package/lang/translations/pt-br.po +13 -1
  352. package/lang/translations/pt.po +13 -1
  353. package/lang/translations/ro.po +13 -1
  354. package/lang/translations/ru.po +13 -1
  355. package/lang/translations/si.po +13 -1
  356. package/lang/translations/sk.po +13 -1
  357. package/lang/translations/sl.po +13 -1
  358. package/lang/translations/sq.po +13 -1
  359. package/lang/translations/sr-latn.po +13 -1
  360. package/lang/translations/sr.po +13 -1
  361. package/lang/translations/sv.po +13 -1
  362. package/lang/translations/th.po +13 -1
  363. package/lang/translations/ti.po +13 -1
  364. package/lang/translations/tk.po +13 -1
  365. package/lang/translations/tr.po +13 -1
  366. package/lang/translations/tt.po +13 -1
  367. package/lang/translations/ug.po +13 -1
  368. package/lang/translations/uk.po +13 -1
  369. package/lang/translations/ur.po +13 -1
  370. package/lang/translations/uz.po +13 -1
  371. package/lang/translations/vi.po +13 -1
  372. package/lang/translations/zh-cn.po +13 -1
  373. package/lang/translations/zh.po +13 -1
  374. package/package.json +10 -10
  375. package/src/augmentation.d.ts +11 -2
  376. package/src/augmentation.js +1 -1
  377. package/src/commands/insertcolumncommand.d.ts +1 -1
  378. package/src/commands/insertcolumncommand.js +1 -1
  379. package/src/commands/insertrowcommand.d.ts +1 -1
  380. package/src/commands/insertrowcommand.js +1 -1
  381. package/src/commands/inserttablecommand.d.ts +1 -1
  382. package/src/commands/inserttablecommand.js +1 -1
  383. package/src/commands/inserttablelayoutcommand.d.ts +1 -1
  384. package/src/commands/inserttablelayoutcommand.js +1 -1
  385. package/src/commands/mergecellcommand.d.ts +1 -1
  386. package/src/commands/mergecellcommand.js +1 -1
  387. package/src/commands/mergecellscommand.d.ts +1 -1
  388. package/src/commands/mergecellscommand.js +1 -1
  389. package/src/commands/removecolumncommand.d.ts +1 -1
  390. package/src/commands/removecolumncommand.js +1 -1
  391. package/src/commands/removerowcommand.d.ts +1 -1
  392. package/src/commands/removerowcommand.js +1 -1
  393. package/src/commands/selectcolumncommand.d.ts +1 -1
  394. package/src/commands/selectcolumncommand.js +1 -1
  395. package/src/commands/selectrowcommand.d.ts +1 -1
  396. package/src/commands/selectrowcommand.js +1 -1
  397. package/src/commands/setheadercolumncommand.d.ts +1 -1
  398. package/src/commands/setheadercolumncommand.js +3 -3
  399. package/src/commands/setheaderrowcommand.d.ts +1 -1
  400. package/src/commands/setheaderrowcommand.js +2 -3
  401. package/src/commands/splitcellcommand.d.ts +1 -1
  402. package/src/commands/splitcellcommand.js +1 -1
  403. package/src/converters/downcast.d.ts +5 -3
  404. package/src/converters/downcast.js +21 -9
  405. package/src/converters/table-caption-post-fixer.d.ts +1 -1
  406. package/src/converters/table-caption-post-fixer.js +1 -1
  407. package/src/converters/table-cell-paragraph-post-fixer.d.ts +1 -1
  408. package/src/converters/table-cell-paragraph-post-fixer.js +1 -1
  409. package/src/converters/table-cell-refresh-handler.d.ts +1 -1
  410. package/src/converters/table-cell-refresh-handler.js +1 -1
  411. package/src/converters/table-headings-refresh-handler.d.ts +1 -1
  412. package/src/converters/table-headings-refresh-handler.js +1 -1
  413. package/src/converters/table-layout-post-fixer.d.ts +1 -1
  414. package/src/converters/table-layout-post-fixer.js +1 -1
  415. package/src/converters/tableproperties.d.ts +1 -1
  416. package/src/converters/tableproperties.js +1 -1
  417. package/src/converters/upcasttable.d.ts +1 -1
  418. package/src/converters/upcasttable.js +13 -6
  419. package/src/index.d.ts +3 -2
  420. package/src/index.js +3 -2
  421. package/src/plaintableoutput.d.ts +1 -1
  422. package/src/plaintableoutput.js +1 -1
  423. package/src/table.d.ts +1 -1
  424. package/src/table.js +1 -1
  425. package/src/tablecaption/tablecaptionediting.d.ts +1 -1
  426. package/src/tablecaption/tablecaptionediting.js +1 -1
  427. package/src/tablecaption/tablecaptionui.d.ts +1 -1
  428. package/src/tablecaption/tablecaptionui.js +1 -1
  429. package/src/tablecaption/toggletablecaptioncommand.d.ts +1 -1
  430. package/src/tablecaption/toggletablecaptioncommand.js +1 -1
  431. package/src/tablecaption/utils.d.ts +1 -1
  432. package/src/tablecaption/utils.js +1 -1
  433. package/src/tablecaption.d.ts +1 -1
  434. package/src/tablecaption.js +1 -1
  435. package/src/tablecellproperties/commands/tablecellbackgroundcolorcommand.d.ts +1 -1
  436. package/src/tablecellproperties/commands/tablecellbackgroundcolorcommand.js +1 -1
  437. package/src/tablecellproperties/commands/tablecellbordercolorcommand.d.ts +1 -1
  438. package/src/tablecellproperties/commands/tablecellbordercolorcommand.js +1 -1
  439. package/src/tablecellproperties/commands/tablecellborderstylecommand.d.ts +1 -1
  440. package/src/tablecellproperties/commands/tablecellborderstylecommand.js +1 -1
  441. package/src/tablecellproperties/commands/tablecellborderwidthcommand.d.ts +1 -1
  442. package/src/tablecellproperties/commands/tablecellborderwidthcommand.js +1 -1
  443. package/src/tablecellproperties/commands/tablecellheightcommand.d.ts +1 -1
  444. package/src/tablecellproperties/commands/tablecellheightcommand.js +1 -1
  445. package/src/tablecellproperties/commands/tablecellhorizontalalignmentcommand.d.ts +1 -1
  446. package/src/tablecellproperties/commands/tablecellhorizontalalignmentcommand.js +1 -1
  447. package/src/tablecellproperties/commands/tablecellpaddingcommand.d.ts +1 -1
  448. package/src/tablecellproperties/commands/tablecellpaddingcommand.js +1 -1
  449. package/src/tablecellproperties/commands/tablecellpropertycommand.d.ts +20 -2
  450. package/src/tablecellproperties/commands/tablecellpropertycommand.js +9 -1
  451. package/src/tablecellproperties/commands/tablecelltypecommand.d.ts +53 -0
  452. package/src/tablecellproperties/commands/tablecelltypecommand.js +167 -0
  453. package/src/tablecellproperties/commands/tablecellverticalalignmentcommand.d.ts +1 -1
  454. package/src/tablecellproperties/commands/tablecellverticalalignmentcommand.js +1 -1
  455. package/src/tablecellproperties/tablecellpropertiesediting.d.ts +1 -4
  456. package/src/tablecellproperties/tablecellpropertiesediting.js +121 -1
  457. package/src/tablecellproperties/tablecellpropertiesui.d.ts +1 -1
  458. package/src/tablecellproperties/tablecellpropertiesui.js +1 -1
  459. package/src/tablecellproperties/tablecellpropertiesuiexperimental.d.ts +1 -1
  460. package/src/tablecellproperties/tablecellpropertiesuiexperimental.js +34 -12
  461. package/src/tablecellproperties/ui/tablecellpropertiesview.d.ts +1 -1
  462. package/src/tablecellproperties/ui/tablecellpropertiesview.js +1 -1
  463. package/src/tablecellproperties/ui/tablecellpropertiesviewexperimental.d.ts +33 -4
  464. package/src/tablecellproperties/ui/tablecellpropertiesviewexperimental.js +130 -19
  465. package/src/tablecellproperties.d.ts +1 -1
  466. package/src/tablecellproperties.js +1 -1
  467. package/src/tablecellwidth/commands/tablecellwidthcommand.d.ts +1 -1
  468. package/src/tablecellwidth/commands/tablecellwidthcommand.js +1 -1
  469. package/src/tablecellwidth/tablecellwidthediting.d.ts +1 -1
  470. package/src/tablecellwidth/tablecellwidthediting.js +1 -1
  471. package/src/tableclipboard.d.ts +1 -1
  472. package/src/tableclipboard.js +1 -1
  473. package/src/tablecolumnresize/constants.d.ts +1 -1
  474. package/src/tablecolumnresize/constants.js +1 -1
  475. package/src/tablecolumnresize/converters.d.ts +1 -1
  476. package/src/tablecolumnresize/converters.js +1 -1
  477. package/src/tablecolumnresize/tablecolumnresizeediting.d.ts +1 -1
  478. package/src/tablecolumnresize/tablecolumnresizeediting.js +1 -1
  479. package/src/tablecolumnresize/tablewidthscommand.d.ts +1 -1
  480. package/src/tablecolumnresize/tablewidthscommand.js +1 -1
  481. package/src/tablecolumnresize/utils.d.ts +1 -1
  482. package/src/tablecolumnresize/utils.js +1 -1
  483. package/src/tablecolumnresize.d.ts +1 -1
  484. package/src/tablecolumnresize.js +1 -1
  485. package/src/tableconfig.d.ts +19 -1
  486. package/src/tableconfig.js +1 -1
  487. package/src/tableediting.d.ts +1 -1
  488. package/src/tableediting.js +24 -6
  489. package/src/tablekeyboard.d.ts +1 -1
  490. package/src/tablekeyboard.js +1 -1
  491. package/src/tablelayout/commands/tabletypecommand.d.ts +1 -1
  492. package/src/tablelayout/commands/tabletypecommand.js +1 -1
  493. package/src/tablelayout/tablelayoutediting.d.ts +1 -1
  494. package/src/tablelayout/tablelayoutediting.js +1 -1
  495. package/src/tablelayout/tablelayoutui.d.ts +1 -1
  496. package/src/tablelayout/tablelayoutui.js +12 -5
  497. package/src/tablelayout.d.ts +1 -1
  498. package/src/tablelayout.js +1 -1
  499. package/src/tablemouse/mouseeventsobserver.d.ts +1 -1
  500. package/src/tablemouse/mouseeventsobserver.js +1 -1
  501. package/src/tablemouse.d.ts +1 -1
  502. package/src/tablemouse.js +1 -1
  503. package/src/tableproperties/commands/tablealignmentcommand.d.ts +1 -1
  504. package/src/tableproperties/commands/tablealignmentcommand.js +1 -1
  505. package/src/tableproperties/commands/tablebackgroundcolorcommand.d.ts +1 -1
  506. package/src/tableproperties/commands/tablebackgroundcolorcommand.js +1 -1
  507. package/src/tableproperties/commands/tablebordercolorcommand.d.ts +1 -1
  508. package/src/tableproperties/commands/tablebordercolorcommand.js +1 -1
  509. package/src/tableproperties/commands/tableborderstylecommand.d.ts +1 -1
  510. package/src/tableproperties/commands/tableborderstylecommand.js +1 -1
  511. package/src/tableproperties/commands/tableborderwidthcommand.d.ts +1 -1
  512. package/src/tableproperties/commands/tableborderwidthcommand.js +1 -1
  513. package/src/tableproperties/commands/tableheightcommand.d.ts +1 -1
  514. package/src/tableproperties/commands/tableheightcommand.js +1 -1
  515. package/src/tableproperties/commands/tablepropertycommand.d.ts +1 -1
  516. package/src/tableproperties/commands/tablepropertycommand.js +1 -1
  517. package/src/tableproperties/commands/tablewidthcommand.d.ts +1 -1
  518. package/src/tableproperties/commands/tablewidthcommand.js +1 -1
  519. package/src/tableproperties/tablepropertiesediting.d.ts +1 -1
  520. package/src/tableproperties/tablepropertiesediting.js +1 -1
  521. package/src/tableproperties/tablepropertiesui.d.ts +1 -1
  522. package/src/tableproperties/tablepropertiesui.js +1 -1
  523. package/src/tableproperties/tablepropertiesuiexperimental.d.ts +1 -1
  524. package/src/tableproperties/tablepropertiesuiexperimental.js +1 -1
  525. package/src/tableproperties/ui/tablepropertiesview.d.ts +1 -1
  526. package/src/tableproperties/ui/tablepropertiesview.js +1 -1
  527. package/src/tableproperties/ui/tablepropertiesviewexperimental.d.ts +1 -1
  528. package/src/tableproperties/ui/tablepropertiesviewexperimental.js +1 -1
  529. package/src/tableproperties.d.ts +1 -1
  530. package/src/tableproperties.js +1 -1
  531. package/src/tableselection.d.ts +1 -1
  532. package/src/tableselection.js +1 -1
  533. package/src/tabletoolbar.d.ts +1 -1
  534. package/src/tabletoolbar.js +1 -1
  535. package/src/tableui.d.ts +1 -1
  536. package/src/tableui.js +1 -1
  537. package/src/tableutils.d.ts +39 -1
  538. package/src/tableutils.js +220 -14
  539. package/src/tablewalker.d.ts +1 -1
  540. package/src/tablewalker.js +1 -1
  541. package/src/ui/colorinputview.d.ts +1 -1
  542. package/src/ui/colorinputview.js +1 -1
  543. package/src/ui/inserttableview.d.ts +1 -1
  544. package/src/ui/inserttableview.js +1 -1
  545. package/src/utils/common.d.ts +24 -1
  546. package/src/utils/common.js +43 -1
  547. package/src/utils/structure.d.ts +1 -1
  548. package/src/utils/structure.js +1 -1
  549. package/src/utils/table-properties.d.ts +1 -1
  550. package/src/utils/table-properties.js +1 -1
  551. package/src/utils/ui/contextualballoon.d.ts +1 -1
  552. package/src/utils/ui/contextualballoon.js +1 -1
  553. package/src/utils/ui/table-properties.d.ts +1 -1
  554. package/src/utils/ui/table-properties.js +1 -1
  555. package/src/utils/ui/table-propertiesexperimental.d.ts +1 -1
  556. package/src/utils/ui/table-propertiesexperimental.js +1 -1
  557. package/src/utils/ui/widget.d.ts +1 -1
  558. package/src/utils/ui/widget.js +1 -1
  559. package/theme/colorinput.css +1 -1
  560. package/theme/formrow-experimental.css +1 -1
  561. package/theme/formrow.css +1 -1
  562. package/theme/inserttable.css +1 -1
  563. package/theme/table.css +7 -2
  564. package/theme/tablecaption.css +1 -1
  565. package/theme/tablecellproperties-experimental.css +4 -0
  566. package/theme/tablecellproperties.css +1 -1
  567. package/theme/tablecolumnresize.css +1 -1
  568. package/theme/tableediting.css +1 -1
  569. package/theme/tableform-experimental.css +1 -13
  570. package/theme/tableform.css +6 -7
  571. package/theme/tablelayout.css +1 -1
  572. package/theme/tableproperties-experimental.css +1 -1
  573. package/theme/tableproperties.css +1 -1
  574. package/theme/tableselection.css +1 -1
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Copyright (c) 2003-2025, CKSource Holding sp. z o.o. All rights reserved.
2
+ * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.
3
3
  * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options
4
4
  */
5
5
  /**
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Copyright (c) 2003-2025, CKSource Holding sp. z o.o. All rights reserved.
2
+ * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.
3
3
  * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options
4
4
  */
5
5
  import { createEmptyTableCell } from '../utils/common.js';
@@ -159,10 +159,13 @@ export function ensureParagraphInTableCell(elementName) {
159
159
  * headingRows - The number of rows that go as table headers.
160
160
  * headingColumns - The maximum number of row headings.
161
161
  * rows - Sorted `<tr>` elements as they should go into the model - ie. if `<thead>` is inserted after `<tbody>` in the view.
162
+ *
163
+ * @param viewTable The view table element.
164
+ * @returns The table metadata.
162
165
  */
163
166
  function scanTable(viewTable) {
164
- let headingRows = 0;
165
167
  let headingColumns = undefined;
168
+ let shouldAccumulateHeadingRows = true;
166
169
  // The `<tbody>` and `<thead>` sections in the DOM do not have to be in order `<thead>` -> `<tbody>` and there might be more than one
167
170
  // of them.
168
171
  // As the model does not have these sections, rows from different sections must be sorted.
@@ -188,6 +191,7 @@ function scanTable(viewTable) {
188
191
  }
189
192
  // Save the first `<thead>` in the table as table header - all other ones will be converted to table body rows.
190
193
  if (tableChild.name === 'thead' && !firstTheadElement) {
194
+ shouldAccumulateHeadingRows = true;
191
195
  firstTheadElement = tableChild;
192
196
  }
193
197
  // There might be some extra empty text nodes between the `<tr>`s.
@@ -208,12 +212,15 @@ function scanTable(viewTable) {
208
212
  // of the cell span from the previous row.
209
213
  // Issue: https://github.com/ckeditor/ckeditor5/issues/17556
210
214
  (maxPrevColumns === null || trColumns.length === maxPrevColumns) &&
211
- trColumns.every(e => e.is('element', 'th')))) {
212
- headingRows++;
215
+ trColumns.every(e => e.is('element', 'th')) &&
216
+ // If there is at least one "normal" table row between heading rows, then stop accumulating heading rows.
217
+ shouldAccumulateHeadingRows)) {
213
218
  headRows.push(tr);
219
+ shouldAccumulateHeadingRows = true;
214
220
  }
215
221
  else {
216
222
  bodyRows.push(tr);
223
+ shouldAccumulateHeadingRows = false;
217
224
  }
218
225
  // We use the maximum number of columns to avoid false positives when detecting
219
226
  // multiple rows with single column within `rowspan`. Without it the last row of `rowspan=3`
@@ -233,12 +240,12 @@ function scanTable(viewTable) {
233
240
  index += 1;
234
241
  }
235
242
  // Update headingColumns.
236
- if (!headingColumns || index < headingColumns) {
243
+ if (headingColumns === undefined || index < headingColumns) {
237
244
  headingColumns = index;
238
245
  }
239
246
  }
240
247
  return {
241
- headingRows,
248
+ headingRows: headRows.length,
242
249
  headingColumns: headingColumns || 0,
243
250
  rows: [...headRows, ...bodyRows]
244
251
  };
package/src/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Copyright (c) 2003-2025, CKSource Holding sp. z o.o. All rights reserved.
2
+ * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.
3
3
  * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options
4
4
  */
5
5
  /**
@@ -61,7 +61,6 @@ export { TableCellHeightCommand } from './tablecellproperties/commands/tablecell
61
61
  export { TableCellHorizontalAlignmentCommand } from './tablecellproperties/commands/tablecellhorizontalalignmentcommand.js';
62
62
  export { TableCellPaddingCommand } from './tablecellproperties/commands/tablecellpaddingcommand.js';
63
63
  export { TableCellVerticalAlignmentCommand } from './tablecellproperties/commands/tablecellverticalalignmentcommand.js';
64
- export { TableCellPropertyCommand } from './tablecellproperties/commands/tablecellpropertycommand.js';
65
64
  export { TableCellWidthCommand } from './tablecellwidth/commands/tablecellwidthcommand.js';
66
65
  export { TableAlignmentCommand } from './tableproperties/commands/tablealignmentcommand.js';
67
66
  export { TableBackgroundColorCommand } from './tableproperties/commands/tablebackgroundcolorcommand.js';
@@ -71,6 +70,8 @@ export { TableBorderWidthCommand } from './tableproperties/commands/tableborderw
71
70
  export { TableHeightCommand } from './tableproperties/commands/tableheightcommand.js';
72
71
  export { TableWidthCommand } from './tableproperties/commands/tablewidthcommand.js';
73
72
  export { TablePropertyCommand, type TablePropertyCommandExecuteOptions } from './tableproperties/commands/tablepropertycommand.js';
73
+ export { TableCellTypeCommand, type TableCellType } from './tablecellproperties/commands/tablecelltypecommand.js';
74
+ export { TableCellPropertyCommand, type TableCellPropertyCommandAfterExecuteEvent, type TableCellPropertyCommandAfterExecuteEventData } from './tablecellproperties/commands/tablecellpropertycommand.js';
74
75
  export type { ViewDocumentTableMouseMoveEvent, ViewDocumentTableMouseLeaveEvent } from './tablemouse/mouseeventsobserver.js';
75
76
  export type { TableConfig, TableAlignmentConfig, TablePropertiesConfig, TablePropertiesOptions, TableCellPropertiesConfig, TableColorConfig, TableCellPropertiesOptions, TableLayoutConfig, TableCaptionConfig, TableType } from './tableconfig.js';
76
77
  export { downcastTable as _downcastTable, downcastRow as _downcastTableRow, downcastCell as _downcastTableCell, convertParagraphInTableCell as _convertParagraphInTableCell, isSingleParagraphWithoutAttributes as _isSingleTableParagraphWithoutAttributes } from './converters/downcast.js';
package/src/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Copyright (c) 2003-2025, CKSource Holding sp. z o.o. All rights reserved.
2
+ * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.
3
3
  * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options
4
4
  */
5
5
  /**
@@ -62,7 +62,6 @@ export { TableCellHeightCommand } from './tablecellproperties/commands/tablecell
62
62
  export { TableCellHorizontalAlignmentCommand } from './tablecellproperties/commands/tablecellhorizontalalignmentcommand.js';
63
63
  export { TableCellPaddingCommand } from './tablecellproperties/commands/tablecellpaddingcommand.js';
64
64
  export { TableCellVerticalAlignmentCommand } from './tablecellproperties/commands/tablecellverticalalignmentcommand.js';
65
- export { TableCellPropertyCommand } from './tablecellproperties/commands/tablecellpropertycommand.js';
66
65
  export { TableCellWidthCommand } from './tablecellwidth/commands/tablecellwidthcommand.js';
67
66
  export { TableAlignmentCommand } from './tableproperties/commands/tablealignmentcommand.js';
68
67
  export { TableBackgroundColorCommand } from './tableproperties/commands/tablebackgroundcolorcommand.js';
@@ -72,6 +71,8 @@ export { TableBorderWidthCommand } from './tableproperties/commands/tableborderw
72
71
  export { TableHeightCommand } from './tableproperties/commands/tableheightcommand.js';
73
72
  export { TableWidthCommand } from './tableproperties/commands/tablewidthcommand.js';
74
73
  export { TablePropertyCommand } from './tableproperties/commands/tablepropertycommand.js';
74
+ export { TableCellTypeCommand } from './tablecellproperties/commands/tablecelltypecommand.js';
75
+ export { TableCellPropertyCommand } from './tablecellproperties/commands/tablecellpropertycommand.js';
75
76
  // Internal exports.
76
77
  export { downcastTable as _downcastTable, downcastRow as _downcastTableRow, downcastCell as _downcastTableCell, convertParagraphInTableCell as _convertParagraphInTableCell, isSingleParagraphWithoutAttributes as _isSingleTableParagraphWithoutAttributes } from './converters/downcast.js';
77
78
  export { injectTableCaptionPostFixer as _injectTableCaptionPostFixer } from './converters/table-caption-post-fixer.js';
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Copyright (c) 2003-2025, CKSource Holding sp. z o.o. All rights reserved.
2
+ * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.
3
3
  * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options
4
4
  */
5
5
  /**
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Copyright (c) 2003-2025, CKSource Holding sp. z o.o. All rights reserved.
2
+ * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.
3
3
  * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options
4
4
  */
5
5
  /**
package/src/table.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Copyright (c) 2003-2025, CKSource Holding sp. z o.o. All rights reserved.
2
+ * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.
3
3
  * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options
4
4
  */
5
5
  /**
package/src/table.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Copyright (c) 2003-2025, CKSource Holding sp. z o.o. All rights reserved.
2
+ * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.
3
3
  * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options
4
4
  */
5
5
  /**
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Copyright (c) 2003-2025, CKSource Holding sp. z o.o. All rights reserved.
2
+ * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.
3
3
  * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options
4
4
  */
5
5
  /**
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Copyright (c) 2003-2025, CKSource Holding sp. z o.o. All rights reserved.
2
+ * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.
3
3
  * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options
4
4
  */
5
5
  /**
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Copyright (c) 2003-2025, CKSource Holding sp. z o.o. All rights reserved.
2
+ * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.
3
3
  * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options
4
4
  */
5
5
  /**
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Copyright (c) 2003-2025, CKSource Holding sp. z o.o. All rights reserved.
2
+ * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.
3
3
  * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options
4
4
  */
5
5
  /**
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Copyright (c) 2003-2025, CKSource Holding sp. z o.o. All rights reserved.
2
+ * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.
3
3
  * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options
4
4
  */
5
5
  /**
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Copyright (c) 2003-2025, CKSource Holding sp. z o.o. All rights reserved.
2
+ * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.
3
3
  * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options
4
4
  */
5
5
  /**
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Copyright (c) 2003-2025, CKSource Holding sp. z o.o. All rights reserved.
2
+ * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.
3
3
  * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options
4
4
  */
5
5
  /**
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Copyright (c) 2003-2025, CKSource Holding sp. z o.o. All rights reserved.
2
+ * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.
3
3
  * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options
4
4
  */
5
5
  import { getSelectionAffectedTable } from '../utils/common.js';
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Copyright (c) 2003-2025, CKSource Holding sp. z o.o. All rights reserved.
2
+ * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.
3
3
  * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options
4
4
  */
5
5
  /**
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Copyright (c) 2003-2025, CKSource Holding sp. z o.o. All rights reserved.
2
+ * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.
3
3
  * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options
4
4
  */
5
5
  /**
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Copyright (c) 2003-2025, CKSource Holding sp. z o.o. All rights reserved.
2
+ * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.
3
3
  * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options
4
4
  */
5
5
  /**
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Copyright (c) 2003-2025, CKSource Holding sp. z o.o. All rights reserved.
2
+ * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.
3
3
  * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options
4
4
  */
5
5
  import { TableCellPropertyCommand } from './tablecellpropertycommand.js';
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Copyright (c) 2003-2025, CKSource Holding sp. z o.o. All rights reserved.
2
+ * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.
3
3
  * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options
4
4
  */
5
5
  /**
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Copyright (c) 2003-2025, CKSource Holding sp. z o.o. All rights reserved.
2
+ * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.
3
3
  * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options
4
4
  */
5
5
  import { TableCellPropertyCommand } from './tablecellpropertycommand.js';
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Copyright (c) 2003-2025, CKSource Holding sp. z o.o. All rights reserved.
2
+ * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.
3
3
  * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options
4
4
  */
5
5
  /**
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Copyright (c) 2003-2025, CKSource Holding sp. z o.o. All rights reserved.
2
+ * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.
3
3
  * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options
4
4
  */
5
5
  import { TableCellPropertyCommand } from './tablecellpropertycommand.js';
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Copyright (c) 2003-2025, CKSource Holding sp. z o.o. All rights reserved.
2
+ * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.
3
3
  * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options
4
4
  */
5
5
  /**
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Copyright (c) 2003-2025, CKSource Holding sp. z o.o. All rights reserved.
2
+ * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.
3
3
  * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options
4
4
  */
5
5
  import { TableCellPropertyCommand } from './tablecellpropertycommand.js';
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Copyright (c) 2003-2025, CKSource Holding sp. z o.o. All rights reserved.
2
+ * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.
3
3
  * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options
4
4
  */
5
5
  /**
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Copyright (c) 2003-2025, CKSource Holding sp. z o.o. All rights reserved.
2
+ * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.
3
3
  * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options
4
4
  */
5
5
  import { TableCellPropertyCommand } from './tablecellpropertycommand.js';
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Copyright (c) 2003-2025, CKSource Holding sp. z o.o. All rights reserved.
2
+ * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.
3
3
  * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options
4
4
  */
5
5
  /**
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Copyright (c) 2003-2025, CKSource Holding sp. z o.o. All rights reserved.
2
+ * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.
3
3
  * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options
4
4
  */
5
5
  import { TableCellPropertyCommand } from './tablecellpropertycommand.js';
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Copyright (c) 2003-2025, CKSource Holding sp. z o.o. All rights reserved.
2
+ * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.
3
3
  * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options
4
4
  */
5
5
  /**
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Copyright (c) 2003-2025, CKSource Holding sp. z o.o. All rights reserved.
2
+ * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.
3
3
  * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options
4
4
  */
5
5
  import { TableCellPropertyCommand } from './tablecellpropertycommand.js';
@@ -1,12 +1,12 @@
1
1
  /**
2
- * @license Copyright (c) 2003-2025, CKSource Holding sp. z o.o. All rights reserved.
2
+ * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.
3
3
  * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options
4
4
  */
5
5
  /**
6
6
  * @module table/tablecellproperties/commands/tablecellpropertycommand
7
7
  */
8
8
  import { Command, type Editor } from 'ckeditor5/src/core.js';
9
- import type { ModelElement, Batch } from 'ckeditor5/src/engine.js';
9
+ import type { ModelElement, Batch, ModelWriter } from 'ckeditor5/src/engine.js';
10
10
  /**
11
11
  * The table cell attribute command.
12
12
  *
@@ -70,3 +70,21 @@ export declare class TableCellPropertyCommand extends Command {
70
70
  */
71
71
  private _getSingleValue;
72
72
  }
73
+ /**
74
+ * Fired after the {@link module:table/tablecellproperties/commands/tablecellpropertycommand~TableCellPropertyCommand}
75
+ *
76
+ * @eventName ~TableCellPropertyCommand#afterExecute
77
+ */
78
+ export type TableCellPropertyCommandAfterExecuteEvent = {
79
+ name: 'afterExecute';
80
+ args: [data: TableCellPropertyCommandAfterExecuteEventData];
81
+ };
82
+ /**
83
+ * The data of the
84
+ * {@link module:table/tablecellproperties/commands/tablecellpropertycommand~TableCellPropertyCommandAfterExecuteEvent} event.
85
+ */
86
+ export type TableCellPropertyCommandAfterExecuteEventData = {
87
+ writer: ModelWriter;
88
+ tableCells: Array<ModelElement>;
89
+ valueToSet: unknown;
90
+ };
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Copyright (c) 2003-2025, CKSource Holding sp. z o.o. All rights reserved.
2
+ * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.
3
3
  * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options
4
4
  */
5
5
  /**
@@ -44,6 +44,9 @@ export class TableCellPropertyCommand extends Command {
44
44
  this._defaultContentTableValue = defaultValue;
45
45
  // Hardcoded defaults for layout table.
46
46
  switch (attributeName) {
47
+ case 'tableCellType':
48
+ this._defaultLayoutTableValue = 'data';
49
+ break;
47
50
  case 'tableCellBorderStyle':
48
51
  this._defaultLayoutTableValue = 'none';
49
52
  break;
@@ -94,6 +97,11 @@ export class TableCellPropertyCommand extends Command {
94
97
  else {
95
98
  tableCells.forEach(tableCell => writer.removeAttribute(this.attributeName, tableCell));
96
99
  }
100
+ this.fire('afterExecute', {
101
+ writer,
102
+ tableCells,
103
+ valueToSet
104
+ });
97
105
  });
98
106
  }
99
107
  /**
@@ -0,0 +1,53 @@
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/tablecellproperties/commands/tablecelltypecommand
7
+ */
8
+ import type { Editor } from 'ckeditor5/src/core.js';
9
+ import type { ModelElement, ModelWriter } from 'ckeditor5/src/engine.js';
10
+ import { TableUtils } from '../../tableutils.js';
11
+ import { TableCellPropertyCommand } from './tablecellpropertycommand.js';
12
+ /**
13
+ * The table cell type command.
14
+ *
15
+ * The command is registered by the {@link module:table/tablecellproperties/tablecellpropertiesediting~TableCellPropertiesEditing} as
16
+ * the `'tableCellType'` editor command.
17
+ *
18
+ * To change the type of selected cells, execute the command:
19
+ *
20
+ * ```ts
21
+ * editor.execute( 'tableCellType', {
22
+ * value: 'header'
23
+ * } );
24
+ * ```
25
+ *
26
+ * The `value` can be either `'header'` or `'data'`.
27
+ * It'll return `undefined` if multiple types are selected.
28
+ */
29
+ export declare class TableCellTypeCommand extends TableCellPropertyCommand {
30
+ /**
31
+ * Creates a new `TableCellTypeCommand` instance.
32
+ *
33
+ * @param editor An editor in which this command will be used.
34
+ */
35
+ constructor(editor: Editor);
36
+ /**
37
+ * @inheritDoc
38
+ */
39
+ refresh(): void;
40
+ /**
41
+ * Returns the attribute value for a table cell.
42
+ */
43
+ protected _getAttribute(tableCell: ModelElement | undefined): unknown;
44
+ }
45
+ /**
46
+ * Type of the table cell.
47
+ */
48
+ export type TableCellType = 'data' | 'header';
49
+ /**
50
+ * Updates the `headingRows` and `headingColumns` attributes of the given tables
51
+ * based on the `tableCellType` of their cells.
52
+ */
53
+ export declare function updateTablesHeadingAttributes(tableUtils: TableUtils, writer: ModelWriter, tables: Iterable<ModelElement>): boolean;
@@ -0,0 +1,167 @@
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
+ import { TableUtils } from '../../tableutils.js';
6
+ import { TableCellPropertyCommand } from './tablecellpropertycommand.js';
7
+ import { groupCellsByTable, getSelectionAffectedTable } from '../../utils/common.js';
8
+ import { TableWalker } from '../../tablewalker.js';
9
+ /**
10
+ * The table cell type command.
11
+ *
12
+ * The command is registered by the {@link module:table/tablecellproperties/tablecellpropertiesediting~TableCellPropertiesEditing} as
13
+ * the `'tableCellType'` editor command.
14
+ *
15
+ * To change the type of selected cells, execute the command:
16
+ *
17
+ * ```ts
18
+ * editor.execute( 'tableCellType', {
19
+ * value: 'header'
20
+ * } );
21
+ * ```
22
+ *
23
+ * The `value` can be either `'header'` or `'data'`.
24
+ * It'll return `undefined` if multiple types are selected.
25
+ */
26
+ export class TableCellTypeCommand extends TableCellPropertyCommand {
27
+ /**
28
+ * Creates a new `TableCellTypeCommand` instance.
29
+ *
30
+ * @param editor An editor in which this command will be used.
31
+ */
32
+ constructor(editor) {
33
+ super(editor, 'tableCellType', 'data');
34
+ this.on('afterExecute', (_, data) => {
35
+ const { writer, tableCells } = data;
36
+ const tableUtils = this.editor.plugins.get(TableUtils);
37
+ const tablesMap = groupCellsByTable(tableCells);
38
+ updateTablesHeadingAttributes(tableUtils, writer, tablesMap.keys());
39
+ });
40
+ }
41
+ /**
42
+ * @inheritDoc
43
+ */
44
+ refresh() {
45
+ super.refresh();
46
+ const table = getSelectionAffectedTable(this.editor.model.document.selection);
47
+ if (this.isEnabled && table && table.getAttribute('tableType') === 'layout') {
48
+ this.isEnabled = false;
49
+ }
50
+ }
51
+ /**
52
+ * Returns the attribute value for a table cell.
53
+ */
54
+ _getAttribute(tableCell) {
55
+ return tableCell?.getAttribute(this.attributeName) || 'data';
56
+ }
57
+ }
58
+ /**
59
+ * Updates the `headingRows` and `headingColumns` attributes of the given tables
60
+ * based on the `tableCellType` of their cells.
61
+ */
62
+ export function updateTablesHeadingAttributes(tableUtils, writer, tables) {
63
+ let changed = false;
64
+ for (const table of tables) {
65
+ let headingRows = table.getAttribute('headingRows') || 0;
66
+ let headingColumns = table.getAttribute('headingColumns') || 0;
67
+ // Prioritize the dimension that is already larger to prevent the other dimension from
68
+ // aggressively consuming "orphaned" header cells. In other words, if table has three
69
+ // heading columns (which fills entire table), we should not count all rows as heading rows.
70
+ // User might later add column to the right which should not be heading.
71
+ //
72
+ // The other example, in a 2x2 table where all cells are headers (e.g. due to concurrent edits),
73
+ // if headingColumns=0 and headingRows=0 (but all cells are headers):
74
+ // - Processing rows first would expand headingRows to 2 (covering all cells), leaving headingColumns at 0.
75
+ // - Processing columns first expands headingColumns to 2, leaving headingRows at 0.
76
+ //
77
+ // It should be good enough to resolve conflicts in most cases.
78
+ const processColumnsFirst = headingColumns > headingRows;
79
+ if (processColumnsFirst) {
80
+ const newHeadingColumns = getAdjustedHeadingSectionSize(tableUtils, table, 'column', headingColumns, headingRows);
81
+ if (newHeadingColumns !== headingColumns) {
82
+ tableUtils.setHeadingColumnsCount(writer, table, newHeadingColumns, { shallow: true });
83
+ headingColumns = newHeadingColumns;
84
+ changed = true;
85
+ }
86
+ }
87
+ const newHeadingRows = getAdjustedHeadingSectionSize(tableUtils, table, 'row', headingRows, headingColumns);
88
+ if (newHeadingRows !== headingRows) {
89
+ tableUtils.setHeadingRowsCount(writer, table, newHeadingRows, { shallow: true });
90
+ headingRows = newHeadingRows;
91
+ changed = true;
92
+ }
93
+ if (!processColumnsFirst) {
94
+ const newHeadingColumns = getAdjustedHeadingSectionSize(tableUtils, table, 'column', headingColumns, headingRows);
95
+ if (newHeadingColumns !== headingColumns) {
96
+ tableUtils.setHeadingColumnsCount(writer, table, newHeadingColumns, { shallow: true });
97
+ changed = true;
98
+ }
99
+ }
100
+ }
101
+ return changed;
102
+ }
103
+ /**
104
+ * Calculates the adjusted size of a heading section (rows or columns).
105
+ *
106
+ * The algorithm iterates through rows (or columns) to determine if they should be part of the heading section.
107
+ * A row/column is included if:
108
+ * 1. All its cells are of type 'header'.
109
+ * 2. AND it contains at least one header cell that is NOT already covered by the perpendicular heading section.
110
+ *
111
+ * This check prevents the algorithm from aggressively expanding the heading section when cells are already
112
+ * headers due to the other dimension.
113
+ *
114
+ * Consider a 2x2 table where all cells are headers:
115
+ *
116
+ * ```
117
+ * C0 C1
118
+ * +---+---+
119
+ * R0| H | H |
120
+ * +---+---+
121
+ * R1| H | H |
122
+ * +---+---+
123
+ * ```
124
+ *
125
+ * If `headingColumns=2`, both C0 and C1 are heading columns.
126
+ * If we want `headingRows=1` (only R0), the algorithm must NOT include R1, even though R1 consists of header cells.
127
+ * R1's cells are headers because of C0 and C1.
128
+ *
129
+ * Without this check, the algorithm would see that R1 is all headers and force `headingRows` to 2.
130
+ * This would prevent the user from reducing `headingRows` from 2 to 1 without converting R1 cells to 'data'
131
+ * (which would incorrectly break C0 and C1).
132
+ */
133
+ function getAdjustedHeadingSectionSize(tableUtils, table, mode, currentSize, perpendicularHeadingSize) {
134
+ const totalRowsOrColumns = mode === 'row' ? tableUtils.getRows(table) : tableUtils.getColumns(table);
135
+ let size = currentSize;
136
+ // Iterate through each row/column to check if all cells are headers.
137
+ for (let currentIndex = 0; currentIndex < totalRowsOrColumns; currentIndex++) {
138
+ const walker = new TableWalker(table, { [mode]: currentIndex });
139
+ let allCellsAreHeaders = true;
140
+ let hasHeaderOutsidePerpendicularSection = false;
141
+ // Check each cell in the current row/column.
142
+ for (const { cell, row, column } of walker) {
143
+ // If we find a non-header cell, this row/column can't be part of the heading section.
144
+ if (cell.getAttribute('tableCellType') !== 'header') {
145
+ allCellsAreHeaders = false;
146
+ break;
147
+ }
148
+ // Check if this header cell extends beyond the perpendicular heading section.
149
+ // E.g., when checking rows, see if the cell extends beyond headingColumns.
150
+ const perpendicularIndex = mode === 'row' ? column : row;
151
+ if (perpendicularIndex >= perpendicularHeadingSize) {
152
+ hasHeaderOutsidePerpendicularSection = true;
153
+ }
154
+ }
155
+ // If not all cells are headers, we can't extend the heading section any further.
156
+ if (!allCellsAreHeaders) {
157
+ // The section cannot extend beyond the last valid header row/column.
158
+ return Math.min(size, currentIndex);
159
+ }
160
+ // If there's a header extending beyond the perpendicular section,
161
+ // we must include this row/column in the heading section.
162
+ if (hasHeaderOutsidePerpendicularSection) {
163
+ size = Math.max(size, currentIndex + 1);
164
+ }
165
+ }
166
+ return Math.min(size, totalRowsOrColumns);
167
+ }