@ckeditor/ckeditor5-table 47.3.0-alpha.7 → 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 { TableCellPropertyCommand } from './tablecellpropertycommand.js';
@@ -1,10 +1,7 @@
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
- /**
6
- * @module table/tablecellproperties/tablecellpropertiesediting
7
- */
8
5
  import { Plugin } from 'ckeditor5/src/core.js';
9
6
  import { TableEditing } from './../tableediting.js';
10
7
  import { TableCellWidthEditing } from '../tablecellwidth/tablecellwidthediting.js';
@@ -1,10 +1,11 @@
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/tablecellpropertiesediting
7
7
  */
8
+ import { priorities } from 'ckeditor5/src/utils.js';
8
9
  import { Plugin } from 'ckeditor5/src/core.js';
9
10
  import { addBorderStylesRules, addPaddingStylesRules, addBackgroundStylesRules } from 'ckeditor5/src/engine.js';
10
11
  import { downcastAttributeToStyle, getDefaultValueAdjusted, upcastBorderStyles } from '../converters/tableproperties.js';
@@ -18,8 +19,11 @@ import { TableCellHorizontalAlignmentCommand } from './commands/tablecellhorizon
18
19
  import { TableCellBorderStyleCommand } from './commands/tablecellborderstylecommand.js';
19
20
  import { TableCellBorderColorCommand } from './commands/tablecellbordercolorcommand.js';
20
21
  import { TableCellBorderWidthCommand } from './commands/tablecellborderwidthcommand.js';
22
+ import { TableCellTypeCommand, updateTablesHeadingAttributes } from './commands/tablecelltypecommand.js';
21
23
  import { getNormalizedDefaultCellProperties } from '../utils/table-properties.js';
22
24
  import { enableProperty } from '../utils/common.js';
25
+ import { TableUtils } from '../tableutils.js';
26
+ import { TableWalker } from '../tablewalker.js';
23
27
  const VALIGN_VALUES_REG_EXP = /^(top|middle|bottom)$/;
24
28
  const ALIGN_VALUES_REG_EXP = /^(left|center|right|justify)$/;
25
29
  /**
@@ -125,6 +129,10 @@ export class TableCellPropertiesEditing extends Plugin {
125
129
  editor.commands.add('tableCellHorizontalAlignment', new TableCellHorizontalAlignmentCommand(editor, defaultTableCellProperties.horizontalAlignment));
126
130
  enableVerticalAlignmentProperty(schema, conversion, defaultTableCellProperties.verticalAlignment);
127
131
  editor.commands.add('tableCellVerticalAlignment', new TableCellVerticalAlignmentCommand(editor, defaultTableCellProperties.verticalAlignment));
132
+ if (editor.config.get('experimentalFlags.tableCellTypeSupport')) {
133
+ enableCellTypeProperty(editor);
134
+ editor.commands.add('tableCellType', new TableCellTypeCommand(editor));
135
+ }
128
136
  }
129
137
  }
130
138
  /**
@@ -290,3 +298,115 @@ function enableVerticalAlignmentProperty(schema, conversion, defaultValue) {
290
298
  }
291
299
  });
292
300
  }
301
+ /**
302
+ * Enables the `tableCellType` attribute for table cells.
303
+ */
304
+ function enableCellTypeProperty(editor) {
305
+ const { model, conversion, editing } = editor;
306
+ const { schema } = model;
307
+ const tableUtils = editor.plugins.get(TableUtils);
308
+ schema.extend('tableCell', {
309
+ allowAttributes: ['tableCellType']
310
+ });
311
+ schema.setAttributeProperties('tableCellType', {
312
+ isFormatting: true
313
+ });
314
+ // Do not allow setting `tableCellType` in layout tables.
315
+ schema.addAttributeCheck(context => {
316
+ const nearestTable = Array.from(context).reverse().find(item => item.name === 'table');
317
+ if (nearestTable?.getAttribute('tableType') === 'layout') {
318
+ return false;
319
+ }
320
+ }, 'tableCellType');
321
+ // Upcast conversion for td/th elements.
322
+ conversion.for('upcast').add(dispatcher => {
323
+ dispatcher.on('element:th', (evt, data, conversionApi) => {
324
+ const { writer } = conversionApi;
325
+ const { modelRange } = data;
326
+ const modelElement = modelRange?.start.nodeAfter;
327
+ if (modelElement?.is('element', 'tableCell')) {
328
+ writer.setAttribute('tableCellType', 'header', modelElement);
329
+ }
330
+ });
331
+ // Table type is examined after all other cell converters, on low priority, so
332
+ // we double check if there is any `th` left in the table. If so, the table is converted to a content table.
333
+ dispatcher.on('element:table', (evt, data, conversionApi) => {
334
+ const { writer } = conversionApi;
335
+ const { modelRange } = data;
336
+ const modelElement = modelRange?.start.nodeAfter;
337
+ if (modelElement?.is('element', 'table') && modelElement.getAttribute('tableType') === 'layout') {
338
+ for (const { cell } of new TableWalker(modelElement)) {
339
+ if (cell.getAttribute('tableCellType') === 'header') {
340
+ writer.setAttribute('tableType', 'content', modelElement);
341
+ break;
342
+ }
343
+ }
344
+ }
345
+ }, { priority: priorities.low - 1 });
346
+ });
347
+ // Registers a post-fixer that ensures the `headingRows` and `headingColumns` attributes
348
+ // are consistent with the `tableCellType` attribute of the cells. `tableCellType` has priority
349
+ // over `headingRows` and `headingColumns` and we use it to adjust the heading sections of the table.
350
+ model.document.registerPostFixer(writer => {
351
+ // 1. Collect all tables that need to be checked.
352
+ const changes = model.document.differ.getChanges();
353
+ const tablesToCheck = new Set();
354
+ for (const change of changes) {
355
+ // Check if headingRows or headingColumns changed.
356
+ if (change.type === 'attribute' && (change.attributeKey === 'headingRows' || change.attributeKey === 'headingColumns')) {
357
+ const table = change.range.start.nodeAfter;
358
+ if (table?.is('element', 'table') && table.root.rootName !== '$graveyard') {
359
+ tablesToCheck.add(table);
360
+ }
361
+ }
362
+ // Check if tableCellType changed.
363
+ if (change.type === 'attribute' && change.attributeKey === 'tableCellType') {
364
+ const cell = change.range.start.nodeAfter;
365
+ if (cell?.is('element', 'tableCell') && cell.root.rootName !== '$graveyard') {
366
+ const table = cell.findAncestor('table');
367
+ if (table) {
368
+ tablesToCheck.add(table);
369
+ }
370
+ }
371
+ }
372
+ // Check if new headers were inserted.
373
+ if (change.type === 'insert' && change.position.nodeAfter) {
374
+ for (const { item } of model.createRangeOn(change.position.nodeAfter)) {
375
+ if (item.is('element', 'tableCell') &&
376
+ item.getAttribute('tableCellType') &&
377
+ item.root.rootName !== '$graveyard') {
378
+ const table = item.findAncestor('table');
379
+ if (table) {
380
+ tablesToCheck.add(table);
381
+ }
382
+ }
383
+ }
384
+ }
385
+ }
386
+ // 2. Update the attributes of the collected tables.
387
+ return updateTablesHeadingAttributes(tableUtils, writer, tablesToCheck);
388
+ });
389
+ // Refresh the table cells in the editing view when their `tableCellType` attribute changes.
390
+ model.document.on('change:data', () => {
391
+ const { differ } = model.document;
392
+ const cellsToReconvert = new Set();
393
+ for (const change of differ.getChanges()) {
394
+ // If the `tableCellType` attribute changed, the entire cell needs to be re-rendered.
395
+ if (change.type === 'attribute' && change.attributeKey === 'tableCellType') {
396
+ const tableCell = change.range.start.nodeAfter;
397
+ if (tableCell.is('element', 'tableCell')) {
398
+ cellsToReconvert.add(tableCell);
399
+ }
400
+ }
401
+ }
402
+ // Reconvert table cells that had their `tableCellType` attribute changed.
403
+ for (const tableCell of cellsToReconvert) {
404
+ const viewElement = editing.mapper.toViewElement(tableCell);
405
+ const cellType = tableCell.getAttribute('tableCellType');
406
+ const expectedElementName = cellType === 'header' ? 'th' : 'td';
407
+ if (viewElement?.name !== expectedElementName) {
408
+ editing.reconvertItem(tableCell);
409
+ }
410
+ }
411
+ });
412
+ }
@@ -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
  /**
@@ -26,7 +26,8 @@ const propertyToCommandMap = {
26
26
  padding: 'tableCellPadding',
27
27
  backgroundColor: 'tableCellBackgroundColor',
28
28
  horizontalAlignment: 'tableCellHorizontalAlignment',
29
- verticalAlignment: 'tableCellVerticalAlignment'
29
+ verticalAlignment: 'tableCellVerticalAlignment',
30
+ cellType: 'tableCellType'
30
31
  };
31
32
  /**
32
33
  * The table cell properties UI plugin. It introduces the `'tableCellProperties'` button
@@ -125,8 +126,10 @@ export class TableCellPropertiesUIExperimental extends Plugin {
125
126
  tooltip: true
126
127
  });
127
128
  this.listenTo(view, 'execute', () => this._showView());
128
- const commands = Object.values(propertyToCommandMap)
129
- .map(commandName => editor.commands.get(commandName));
129
+ const commands = (Object
130
+ .values(propertyToCommandMap)
131
+ .map(commandName => editor.commands.get(commandName))
132
+ .filter(val => !!val));
130
133
  view.bind('isEnabled').toMany(commands, 'isEnabled', (...areEnabled) => (areEnabled.some(isCommandEnabled => isCommandEnabled)));
131
134
  return view;
132
135
  });
@@ -155,11 +158,13 @@ export class TableCellPropertiesUIExperimental extends Plugin {
155
158
  const backgroundColorsConfig = normalizeColorOptions(config.backgroundColors);
156
159
  const localizedBackgroundColors = getLocalizedColorOptions(editor.locale, backgroundColorsConfig);
157
160
  const hasColorPicker = config.colorPicker !== false;
161
+ const isTableCellTypeSupported = !!editor.config.get('experimentalFlags.tableCellTypeSupport');
158
162
  const view = new TableCellPropertiesViewExperimental(editor.locale, {
159
163
  borderColors: localizedBorderColors,
160
164
  backgroundColors: localizedBackgroundColors,
161
165
  defaultTableCellProperties,
162
- colorPickerConfig: hasColorPicker ? (config.colorPicker || {}) : false
166
+ colorPickerConfig: hasColorPicker ? (config.colorPicker || {}) : false,
167
+ isTableCellTypeSupported
163
168
  });
164
169
  const t = editor.t;
165
170
  // Render the view so its #element is available for the clickOutsideHandler.
@@ -232,6 +237,11 @@ export class TableCellPropertiesUIExperimental extends Plugin {
232
237
  }));
233
238
  view.on('change:horizontalAlignment', this._getPropertyChangeCallback('tableCellHorizontalAlignment'));
234
239
  view.on('change:verticalAlignment', this._getPropertyChangeCallback('tableCellVerticalAlignment'));
240
+ const cellTypeCommand = editor.commands.get('tableCellType');
241
+ if (cellTypeCommand) {
242
+ view.cellTypeDropdown.bind('isEnabled').to(cellTypeCommand, 'isEnabled');
243
+ view.on('change:cellType', this._getPropertyChangeCallback('tableCellType'));
244
+ }
235
245
  return view;
236
246
  }
237
247
  /**
@@ -245,16 +255,28 @@ export class TableCellPropertiesUIExperimental extends Plugin {
245
255
  _fillViewFormFromCommandValues() {
246
256
  const commands = this.editor.commands;
247
257
  const borderStyleCommand = commands.get('tableCellBorderStyle');
248
- Object.entries(propertyToCommandMap)
249
- .map(([property, commandName]) => {
258
+ Object
259
+ .entries(propertyToCommandMap)
260
+ .flatMap(([property, commandName]) => {
261
+ const command = commands.get(commandName);
262
+ if (!command) {
263
+ return [];
264
+ }
250
265
  const propertyKey = property;
251
- const defaultValue = this.view === this._viewWithContentTableDefaults ?
252
- this._defaultContentTableCellProperties[propertyKey] || '' :
253
- this._defaultLayoutTableCellProperties[propertyKey] || '';
254
- return [
266
+ let defaultValue;
267
+ if (propertyKey === 'cellType') {
268
+ defaultValue = '';
269
+ }
270
+ else {
271
+ defaultValue = this.view === this._viewWithContentTableDefaults ?
272
+ this._defaultContentTableCellProperties[propertyKey] || '' :
273
+ this._defaultLayoutTableCellProperties[propertyKey] || '';
274
+ }
275
+ const entry = [
255
276
  property,
256
- commands.get(commandName).value || defaultValue
277
+ command.value || defaultValue
257
278
  ];
279
+ return [entry];
258
280
  })
259
281
  .forEach(([property, value]) => {
260
282
  // Do not set the `border-color` and `border-width` fields if `border-style:none`.
@@ -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
  /**
@@ -10,14 +10,15 @@ import { KeystrokeHandler, FocusTracker, type Locale } from 'ckeditor5/src/utils
10
10
  import { type ColorInputView } from '../../ui/colorinputview.js';
11
11
  import type { TableCellPropertiesOptions } from '../../tableconfig.js';
12
12
  import '@ckeditor/ckeditor5-ui/theme/components/form/form.css';
13
- import '../../../theme/formrow.css';
14
- import '../../../theme/tableform.css';
15
- import '../../../theme/tablecellproperties.css';
13
+ import '../../../theme/formrow-experimental.css';
14
+ import '../../../theme/tableform-experimental.css';
15
+ import '../../../theme/tablecellproperties-experimental.css';
16
16
  export interface TableCellPropertiesViewOptionsExperimental {
17
17
  borderColors: Array<NormalizedColorOption>;
18
18
  backgroundColors: Array<NormalizedColorOption>;
19
19
  defaultTableCellProperties: TableCellPropertiesOptions;
20
20
  colorPickerConfig: false | ColorPickerConfig;
21
+ isTableCellTypeSupported: boolean;
21
22
  }
22
23
  /**
23
24
  * The class representing a table cell properties form, allowing users to customize
@@ -87,6 +88,13 @@ export declare class TableCellPropertiesViewExperimental extends View {
87
88
  * @default ''
88
89
  */
89
90
  verticalAlignment: string;
91
+ /**
92
+ * The type of the table cell ('data' or 'header').
93
+ *
94
+ * @observable
95
+ * @default ''
96
+ */
97
+ cellType: string;
90
98
  /**
91
99
  * Options passed to the view. See {@link #constructor} to learn more.
92
100
  */
@@ -119,6 +127,10 @@ export declare class TableCellPropertiesViewExperimental extends View {
119
127
  * An input that allows specifying the table cell background color.
120
128
  */
121
129
  readonly backgroundInput: LabeledFieldView<ColorInputView>;
130
+ /**
131
+ * A dropdown that allows selecting the type of the table cell (data or header).
132
+ */
133
+ readonly cellTypeDropdown: LabeledFieldView<FocusableView>;
122
134
  /**
123
135
  * An input that allows specifying the table cell padding.
124
136
  */
@@ -167,6 +179,7 @@ export declare class TableCellPropertiesViewExperimental extends View {
167
179
  * @param options.backgroundColors A configuration of the background color palette used by the
168
180
  * {@link module:table/tablecellproperties/ui/tablecellpropertiesview~TableCellPropertiesView#backgroundInput}.
169
181
  * @param options.defaultTableCellProperties The default table cell properties.
182
+ * @param options.isTableCellTypeSupported A flag indicating whether the table cell type is supported.
170
183
  */
171
184
  constructor(locale: Locale, options: TableCellPropertiesViewOptionsExperimental);
172
185
  /**
@@ -195,6 +208,14 @@ export declare class TableCellPropertiesViewExperimental extends View {
195
208
  * * {@link #backgroundInput}.
196
209
  */
197
210
  private _createBackgroundFields;
211
+ /**
212
+ * Create cell type field.
213
+ *
214
+ * * {@link #cellTypeDropdown}.
215
+ *
216
+ * @internal
217
+ */
218
+ private _createCellTypeField;
198
219
  /**
199
220
  * Creates the following form fields:
200
221
  *
@@ -226,6 +247,10 @@ export declare class TableCellPropertiesViewExperimental extends View {
226
247
  * Creates a back button view that cancels the form.
227
248
  */
228
249
  private _createBackButton;
250
+ /**
251
+ * Creates the cell type dropdown definitions.
252
+ */
253
+ private _getCellTypeDefinitions;
229
254
  /**
230
255
  * Provides localized labels for {@link #horizontalAlignmentToolbar} buttons.
231
256
  */
@@ -234,4 +259,8 @@ export declare class TableCellPropertiesViewExperimental extends View {
234
259
  * Provides localized labels for {@link #verticalAlignmentToolbar} buttons.
235
260
  */
236
261
  private get _verticalAlignmentLabels();
262
+ /**
263
+ * Provides localized labels for {@link #cellTypeDropdown}.
264
+ */
265
+ private get _cellTypeLabels();
237
266
  }
@@ -1,20 +1,20 @@
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/ui/tablecellpropertiesviewexperimental
7
7
  */
8
8
  /* istanbul ignore file -- @preserve */
9
- import { addListToDropdown, ButtonView, createLabeledDropdown, createLabeledInputText, FocusCycler, FormRowView, FormHeaderView, LabeledFieldView, LabelView, submitHandler, ToolbarView, View, ViewCollection } from 'ckeditor5/src/ui.js';
10
- import { KeystrokeHandler, FocusTracker } from 'ckeditor5/src/utils.js';
9
+ import { addListToDropdown, ButtonView, createLabeledDropdown, createLabeledInputText, FocusCycler, FormRowView, FormHeaderView, LabeledFieldView, LabelView, submitHandler, ToolbarView, UIModel, View, ViewCollection } from 'ckeditor5/src/ui.js';
10
+ import { Collection, KeystrokeHandler, FocusTracker } from 'ckeditor5/src/utils.js';
11
11
  import { IconAlignBottom, IconAlignCenter, IconAlignJustify, IconAlignLeft, IconAlignMiddle, IconAlignRight, IconAlignTop, IconPreviousArrow } from 'ckeditor5/src/icons.js';
12
12
  import { fillToolbar, getBorderStyleDefinitions, getBorderStyleLabels, getLabeledColorInputCreator } from '../../utils/ui/table-propertiesexperimental.js';
13
13
  // eslint-disable-next-line ckeditor5-rules/ckeditor-imports
14
14
  import '@ckeditor/ckeditor5-ui/theme/components/form/form.css';
15
- import '../../../theme/formrow.css';
16
- import '../../../theme/tableform.css';
17
- import '../../../theme/tablecellproperties.css';
15
+ import '../../../theme/formrow-experimental.css';
16
+ import '../../../theme/tableform-experimental.css';
17
+ import '../../../theme/tablecellproperties-experimental.css';
18
18
  /**
19
19
  * The class representing a table cell properties form, allowing users to customize
20
20
  * certain style aspects of a table cell, for instance, border, padding, text alignment, etc..
@@ -52,6 +52,10 @@ export class TableCellPropertiesViewExperimental extends View {
52
52
  * An input that allows specifying the table cell background color.
53
53
  */
54
54
  backgroundInput;
55
+ /**
56
+ * A dropdown that allows selecting the type of the table cell (data or header).
57
+ */
58
+ cellTypeDropdown;
55
59
  /**
56
60
  * An input that allows specifying the table cell padding.
57
61
  */
@@ -100,6 +104,7 @@ export class TableCellPropertiesViewExperimental extends View {
100
104
  * @param options.backgroundColors A configuration of the background color palette used by the
101
105
  * {@link module:table/tablecellproperties/ui/tablecellpropertiesview~TableCellPropertiesView#backgroundInput}.
102
106
  * @param options.defaultTableCellProperties The default table cell properties.
107
+ * @param options.isTableCellTypeSupported A flag indicating whether the table cell type is supported.
103
108
  */
104
109
  constructor(locale, options) {
105
110
  super(locale);
@@ -112,11 +117,13 @@ export class TableCellPropertiesViewExperimental extends View {
112
117
  width: '',
113
118
  height: '',
114
119
  horizontalAlignment: '',
115
- verticalAlignment: ''
120
+ verticalAlignment: '',
121
+ cellType: ''
116
122
  });
117
123
  this.options = options;
118
124
  const { borderStyleDropdown, borderWidthInput, borderColorInput, borderRowLabel } = this._createBorderFields();
119
125
  const { backgroundRowLabel, backgroundInput } = this._createBackgroundFields();
126
+ const { cellTypeRowLabel, cellTypeDropdown } = this._createCellTypeField();
120
127
  const { widthInput, operatorLabel, heightInput, dimensionsLabel } = this._createDimensionFields();
121
128
  const { horizontalAlignmentToolbar, verticalAlignmentToolbar, alignmentLabel } = this._createAlignmentFields();
122
129
  this.focusTracker = new FocusTracker();
@@ -126,6 +133,7 @@ export class TableCellPropertiesViewExperimental extends View {
126
133
  this.borderWidthInput = borderWidthInput;
127
134
  this.borderColorInput = borderColorInput;
128
135
  this.backgroundInput = backgroundInput;
136
+ this.cellTypeDropdown = cellTypeDropdown;
129
137
  this.paddingInput = this._createPaddingField();
130
138
  this.widthInput = widthInput;
131
139
  this.heightInput = heightInput;
@@ -159,22 +167,48 @@ export class TableCellPropertiesViewExperimental extends View {
159
167
  // Border row.
160
168
  this.children.add(new FormRowView(locale, {
161
169
  labelView: borderRowLabel,
162
- children: [
170
+ children: this.options.isTableCellTypeSupported ? [
171
+ borderRowLabel,
172
+ borderStyleDropdown,
173
+ borderWidthInput,
174
+ borderColorInput
175
+ ] : [
163
176
  borderRowLabel,
164
177
  borderStyleDropdown,
165
178
  borderColorInput,
166
179
  borderWidthInput
167
180
  ],
168
- class: 'ck-table-form__border-row'
181
+ class: `ck-table-form__border-row${this.options.isTableCellTypeSupported ? ' ck-table-form__border-row_experimental' : ''}`
169
182
  }));
170
- // Background.
183
+ // Background and cell type.
171
184
  this.children.add(new FormRowView(locale, {
172
- labelView: backgroundRowLabel,
173
- children: [
174
- backgroundRowLabel,
175
- backgroundInput
176
- ],
177
- class: 'ck-table-form__background-row'
185
+ children: this.options.isTableCellTypeSupported ? [
186
+ new FormRowView(locale, {
187
+ labelView: cellTypeRowLabel,
188
+ children: [
189
+ cellTypeRowLabel,
190
+ cellTypeDropdown
191
+ ],
192
+ class: 'ck-table-form__cell-type-row'
193
+ }),
194
+ new FormRowView(locale, {
195
+ labelView: backgroundRowLabel,
196
+ children: [
197
+ backgroundRowLabel,
198
+ backgroundInput
199
+ ],
200
+ class: 'ck-table-form__background-row'
201
+ })
202
+ ] : [
203
+ new FormRowView(locale, {
204
+ labelView: backgroundRowLabel,
205
+ children: [
206
+ backgroundRowLabel,
207
+ backgroundInput
208
+ ],
209
+ class: 'ck-table-form__background-row'
210
+ })
211
+ ]
178
212
  }));
179
213
  // Dimensions row and padding.
180
214
  this.children.add(new FormRowView(locale, {
@@ -224,7 +258,9 @@ export class TableCellPropertiesViewExperimental extends View {
224
258
  'ck',
225
259
  'ck-form',
226
260
  'ck-table-form',
227
- 'ck-table-cell-properties-form'
261
+ 'ck-table-cell-properties-form',
262
+ 'ck-table-cell-properties-form_experimental',
263
+ this.options.isTableCellTypeSupported ? 'ck-table-cell-properties-form_experimental-no-cell-type' : ''
228
264
  ],
229
265
  // https://github.com/ckeditor/ckeditor5-link/issues/90
230
266
  tabindex: '-1'
@@ -250,6 +286,7 @@ export class TableCellPropertiesViewExperimental extends View {
250
286
  this.borderStyleDropdown,
251
287
  this.borderColorInput,
252
288
  this.borderWidthInput,
289
+ this.cellTypeDropdown,
253
290
  this.backgroundInput,
254
291
  this.widthInput,
255
292
  this.heightInput,
@@ -408,6 +445,47 @@ export class TableCellPropertiesViewExperimental extends View {
408
445
  backgroundInput
409
446
  };
410
447
  }
448
+ /**
449
+ * Create cell type field.
450
+ *
451
+ * * {@link #cellTypeDropdown}.
452
+ *
453
+ * @internal
454
+ */
455
+ _createCellTypeField() {
456
+ const locale = this.locale;
457
+ const t = this.t;
458
+ const cellTypeRowLabel = new LabelView(locale);
459
+ cellTypeRowLabel.text = t('Cell type');
460
+ const cellTypeLabels = this._cellTypeLabels;
461
+ const cellTypeDropdown = new LabeledFieldView(locale, createLabeledDropdown);
462
+ cellTypeDropdown.set({
463
+ label: t('Cell type'),
464
+ class: 'ck-table-cell-properties-form__cell-type'
465
+ });
466
+ cellTypeDropdown.fieldView.buttonView.set({
467
+ ariaLabel: t('Cell type'),
468
+ ariaLabelledBy: undefined,
469
+ isOn: false,
470
+ withText: true,
471
+ tooltip: t('Cell type')
472
+ });
473
+ cellTypeDropdown.fieldView.buttonView.bind('label').to(this, 'cellType', value => {
474
+ return cellTypeLabels[value || 'data'];
475
+ });
476
+ cellTypeDropdown.fieldView.on('execute', evt => {
477
+ this.cellType = evt.source._cellTypeValue;
478
+ });
479
+ cellTypeDropdown.bind('isEmpty').to(this, 'cellType', value => !value);
480
+ addListToDropdown(cellTypeDropdown.fieldView, this._getCellTypeDefinitions(), {
481
+ role: 'menu',
482
+ ariaLabel: t('Cell type')
483
+ });
484
+ return {
485
+ cellTypeRowLabel,
486
+ cellTypeDropdown
487
+ };
488
+ }
411
489
  /**
412
490
  * Creates the following form fields:
413
491
  *
@@ -505,7 +583,8 @@ export class TableCellPropertiesViewExperimental extends View {
505
583
  horizontalAlignmentToolbar.set({
506
584
  isCompact: true,
507
585
  role: 'radiogroup',
508
- ariaLabel: t('Horizontal text alignment toolbar')
586
+ ariaLabel: t('Horizontal text alignment toolbar'),
587
+ class: 'ck-table-cell-properties-form__horizontal-alignment-toolbar'
509
588
  });
510
589
  fillToolbar({
511
590
  view: this,
@@ -532,7 +611,8 @@ export class TableCellPropertiesViewExperimental extends View {
532
611
  verticalAlignmentToolbar.set({
533
612
  isCompact: true,
534
613
  role: 'radiogroup',
535
- ariaLabel: t('Vertical text alignment toolbar')
614
+ ariaLabel: t('Vertical text alignment toolbar'),
615
+ class: 'ck-table-cell-properties-form__vertical-alignment-toolbar'
536
616
  });
537
617
  fillToolbar({
538
618
  view: this,
@@ -598,6 +678,27 @@ export class TableCellPropertiesViewExperimental extends View {
598
678
  backButton.delegate('execute').to(this, 'cancel');
599
679
  return backButton;
600
680
  }
681
+ /**
682
+ * Creates the cell type dropdown definitions.
683
+ */
684
+ _getCellTypeDefinitions() {
685
+ const itemDefinitions = new Collection();
686
+ const cellTypeLabels = this._cellTypeLabels;
687
+ for (const type of ['data', 'header']) {
688
+ const definition = {
689
+ type: 'button',
690
+ model: new UIModel({
691
+ _cellTypeValue: type,
692
+ label: cellTypeLabels[type],
693
+ role: 'menuitemradio',
694
+ withText: true
695
+ })
696
+ };
697
+ definition.model.bind('isOn').to(this, 'cellType', value => value === type);
698
+ itemDefinitions.add(definition);
699
+ }
700
+ return itemDefinitions;
701
+ }
601
702
  /**
602
703
  * Provides localized labels for {@link #horizontalAlignmentToolbar} buttons.
603
704
  */
@@ -627,6 +728,16 @@ export class TableCellPropertiesViewExperimental extends View {
627
728
  bottom: t('Align cell text to the bottom')
628
729
  };
629
730
  }
731
+ /**
732
+ * Provides localized labels for {@link #cellTypeDropdown}.
733
+ */
734
+ get _cellTypeLabels() {
735
+ const t = this.t;
736
+ return {
737
+ data: t('Data cell'),
738
+ header: t('Header cell')
739
+ };
740
+ }
630
741
  }
631
742
  function isBorderStyleSet(value) {
632
743
  return value !== 'none';