@ckeditor/ckeditor5-table 0.0.0-nightly-next-20260127.0 → 0.0.0-nightly-20260128.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (356) hide show
  1. package/build/table.js +5 -0
  2. package/build/translations/af.js +1 -0
  3. package/build/translations/ar.js +1 -0
  4. package/build/translations/ast.js +1 -0
  5. package/build/translations/az.js +1 -0
  6. package/build/translations/be.js +1 -0
  7. package/build/translations/bg.js +1 -0
  8. package/build/translations/bn.js +1 -0
  9. package/build/translations/bs.js +1 -0
  10. package/build/translations/ca.js +1 -0
  11. package/build/translations/cs.js +1 -0
  12. package/build/translations/da.js +1 -0
  13. package/build/translations/de-ch.js +1 -0
  14. package/build/translations/de.js +1 -0
  15. package/build/translations/el.js +1 -0
  16. package/build/translations/en-au.js +1 -0
  17. package/build/translations/en-gb.js +1 -0
  18. package/build/translations/eo.js +1 -0
  19. package/build/translations/es-co.js +1 -0
  20. package/build/translations/es.js +1 -0
  21. package/build/translations/et.js +1 -0
  22. package/build/translations/eu.js +1 -0
  23. package/build/translations/fa.js +1 -0
  24. package/build/translations/fi.js +1 -0
  25. package/build/translations/fr.js +1 -0
  26. package/build/translations/gl.js +1 -0
  27. package/build/translations/gu.js +1 -0
  28. package/build/translations/he.js +1 -0
  29. package/build/translations/hi.js +1 -0
  30. package/build/translations/hr.js +1 -0
  31. package/build/translations/hu.js +1 -0
  32. package/build/translations/hy.js +1 -0
  33. package/build/translations/id.js +1 -0
  34. package/build/translations/it.js +1 -0
  35. package/build/translations/ja.js +1 -0
  36. package/build/translations/jv.js +1 -0
  37. package/build/translations/kk.js +1 -0
  38. package/build/translations/km.js +1 -0
  39. package/build/translations/kn.js +1 -0
  40. package/build/translations/ko.js +1 -0
  41. package/build/translations/ku.js +1 -0
  42. package/build/translations/lt.js +1 -0
  43. package/build/translations/lv.js +1 -0
  44. package/build/translations/ms.js +1 -0
  45. package/build/translations/nb.js +1 -0
  46. package/build/translations/ne.js +1 -0
  47. package/build/translations/nl.js +1 -0
  48. package/build/translations/no.js +1 -0
  49. package/build/translations/oc.js +1 -0
  50. package/build/translations/pl.js +1 -0
  51. package/build/translations/pt-br.js +1 -0
  52. package/build/translations/pt.js +1 -0
  53. package/build/translations/ro.js +1 -0
  54. package/build/translations/ru.js +1 -0
  55. package/build/translations/si.js +1 -0
  56. package/build/translations/sk.js +1 -0
  57. package/build/translations/sl.js +1 -0
  58. package/build/translations/sq.js +1 -0
  59. package/build/translations/sr-latn.js +1 -0
  60. package/build/translations/sr.js +1 -0
  61. package/build/translations/sv.js +1 -0
  62. package/build/translations/th.js +1 -0
  63. package/build/translations/ti.js +1 -0
  64. package/build/translations/tk.js +1 -0
  65. package/build/translations/tr.js +1 -0
  66. package/build/translations/tt.js +1 -0
  67. package/build/translations/ug.js +1 -0
  68. package/build/translations/uk.js +1 -0
  69. package/build/translations/ur.js +1 -0
  70. package/build/translations/uz.js +1 -0
  71. package/build/translations/vi.js +1 -0
  72. package/build/translations/zh-cn.js +1 -0
  73. package/build/translations/zh.js +1 -0
  74. package/ckeditor5-metadata.json +7 -16
  75. package/dist/index-content.css +30 -30
  76. package/dist/index-editor.css +170 -104
  77. package/dist/index.css +237 -147
  78. package/dist/index.css.map +1 -1
  79. package/dist/index.js +2433 -448
  80. package/dist/index.js.map +1 -1
  81. package/lang/contexts.json +82 -0
  82. package/lang/translations/af.po +332 -0
  83. package/lang/translations/ar.po +332 -0
  84. package/lang/translations/ast.po +332 -0
  85. package/lang/translations/az.po +332 -0
  86. package/lang/translations/be.po +332 -0
  87. package/lang/translations/bg.po +332 -0
  88. package/lang/translations/bn.po +334 -0
  89. package/lang/translations/bs.po +332 -0
  90. package/lang/translations/ca.po +332 -0
  91. package/lang/translations/cs.po +332 -0
  92. package/lang/translations/da.po +332 -0
  93. package/lang/translations/de-ch.po +332 -0
  94. package/lang/translations/de.po +332 -0
  95. package/lang/translations/el.po +332 -0
  96. package/lang/translations/en-au.po +332 -0
  97. package/lang/translations/en-gb.po +332 -0
  98. package/lang/translations/en.po +332 -0
  99. package/lang/translations/eo.po +332 -0
  100. package/lang/translations/es-co.po +332 -0
  101. package/lang/translations/es.po +332 -0
  102. package/lang/translations/et.po +332 -0
  103. package/lang/translations/eu.po +332 -0
  104. package/lang/translations/fa.po +332 -0
  105. package/lang/translations/fi.po +332 -0
  106. package/lang/translations/fr.po +332 -0
  107. package/lang/translations/gl.po +332 -0
  108. package/lang/translations/gu.po +332 -0
  109. package/lang/translations/he.po +332 -0
  110. package/lang/translations/hi.po +332 -0
  111. package/lang/translations/hr.po +332 -0
  112. package/lang/translations/hu.po +332 -0
  113. package/lang/translations/hy.po +332 -0
  114. package/lang/translations/id.po +332 -0
  115. package/lang/translations/it.po +332 -0
  116. package/lang/translations/ja.po +332 -0
  117. package/lang/translations/jv.po +332 -0
  118. package/lang/translations/kk.po +332 -0
  119. package/lang/translations/km.po +332 -0
  120. package/lang/translations/kn.po +332 -0
  121. package/lang/translations/ko.po +332 -0
  122. package/lang/translations/ku.po +332 -0
  123. package/lang/translations/lt.po +332 -0
  124. package/lang/translations/lv.po +332 -0
  125. package/lang/translations/ms.po +332 -0
  126. package/lang/translations/nb.po +332 -0
  127. package/lang/translations/ne.po +332 -0
  128. package/lang/translations/nl.po +332 -0
  129. package/lang/translations/no.po +332 -0
  130. package/lang/translations/oc.po +332 -0
  131. package/lang/translations/pl.po +332 -0
  132. package/lang/translations/pt-br.po +332 -0
  133. package/lang/translations/pt.po +332 -0
  134. package/lang/translations/ro.po +332 -0
  135. package/lang/translations/ru.po +332 -0
  136. package/lang/translations/si.po +332 -0
  137. package/lang/translations/sk.po +332 -0
  138. package/lang/translations/sl.po +332 -0
  139. package/lang/translations/sq.po +332 -0
  140. package/lang/translations/sr-latn.po +332 -0
  141. package/lang/translations/sr.po +332 -0
  142. package/lang/translations/sv.po +332 -0
  143. package/lang/translations/th.po +332 -0
  144. package/lang/translations/ti.po +332 -0
  145. package/lang/translations/tk.po +332 -0
  146. package/lang/translations/tr.po +332 -0
  147. package/lang/translations/tt.po +332 -0
  148. package/lang/translations/ug.po +332 -0
  149. package/lang/translations/uk.po +332 -0
  150. package/lang/translations/ur.po +332 -0
  151. package/lang/translations/uz.po +332 -0
  152. package/lang/translations/vi.po +332 -0
  153. package/lang/translations/zh-cn.po +332 -0
  154. package/lang/translations/zh.po +332 -0
  155. package/package.json +49 -26
  156. package/{dist → src}/augmentation.d.ts +15 -0
  157. package/src/augmentation.js +5 -0
  158. package/{dist → src}/commands/insertcolumncommand.d.ts +1 -1
  159. package/src/commands/insertcolumncommand.js +71 -0
  160. package/{dist → src}/commands/insertrowcommand.d.ts +1 -1
  161. package/src/commands/insertrowcommand.js +70 -0
  162. package/{dist → src}/commands/inserttablecommand.d.ts +1 -1
  163. package/src/commands/inserttablecommand.js +69 -0
  164. package/{dist → src}/commands/inserttablelayoutcommand.d.ts +1 -1
  165. package/src/commands/inserttablelayoutcommand.js +65 -0
  166. package/{dist → src}/commands/mergecellcommand.d.ts +3 -3
  167. package/src/commands/mergecellcommand.js +206 -0
  168. package/{dist → src}/commands/mergecellscommand.d.ts +1 -1
  169. package/src/commands/mergecellscommand.js +94 -0
  170. package/{dist → src}/commands/removecolumncommand.d.ts +1 -1
  171. package/src/commands/removecolumncommand.js +109 -0
  172. package/{dist → src}/commands/removerowcommand.d.ts +1 -1
  173. package/src/commands/removerowcommand.js +82 -0
  174. package/{dist → src}/commands/selectcolumncommand.d.ts +1 -1
  175. package/src/commands/selectcolumncommand.js +60 -0
  176. package/{dist → src}/commands/selectrowcommand.d.ts +1 -1
  177. package/src/commands/selectrowcommand.js +56 -0
  178. package/{dist → src}/commands/setheadercolumncommand.d.ts +1 -1
  179. package/src/commands/setheadercolumncommand.js +76 -0
  180. package/{dist → src}/commands/setheaderrowcommand.d.ts +1 -1
  181. package/src/commands/setheaderrowcommand.js +83 -0
  182. package/{dist → src}/commands/splitcellcommand.d.ts +1 -1
  183. package/src/commands/splitcellcommand.js +58 -0
  184. package/{dist → src}/converters/downcast.d.ts +2 -2
  185. package/src/converters/downcast.js +298 -0
  186. package/{dist → src}/converters/table-caption-post-fixer.d.ts +1 -1
  187. package/src/converters/table-caption-post-fixer.js +55 -0
  188. package/{dist → src}/converters/table-cell-paragraph-post-fixer.d.ts +1 -1
  189. package/src/converters/table-cell-paragraph-post-fixer.js +109 -0
  190. package/{dist → src}/converters/table-cell-refresh-handler.d.ts +1 -1
  191. package/src/converters/table-cell-refresh-handler.js +47 -0
  192. package/{dist → src}/converters/table-headings-refresh-handler.d.ts +1 -1
  193. package/src/converters/table-headings-refresh-handler.js +51 -0
  194. package/{dist → src}/converters/table-layout-post-fixer.d.ts +1 -1
  195. package/src/converters/table-layout-post-fixer.js +369 -0
  196. package/{dist → src}/converters/tableproperties.d.ts +2 -2
  197. package/src/converters/tableproperties.js +444 -0
  198. package/{dist → src}/converters/upcasttable.d.ts +1 -1
  199. package/src/converters/upcasttable.js +385 -0
  200. package/{dist → src}/index.d.ts +5 -2
  201. package/src/index.js +98 -0
  202. package/{dist → src}/plaintableoutput.d.ts +1 -1
  203. package/src/plaintableoutput.js +49 -0
  204. package/{dist → src}/table.d.ts +2 -2
  205. package/src/table.js +50 -0
  206. package/{dist → src}/tablecaption/tablecaptionediting.d.ts +2 -2
  207. package/src/tablecaption/tablecaptionediting.js +136 -0
  208. package/{dist → src}/tablecaption/tablecaptionui.d.ts +1 -1
  209. package/src/tablecaption/tablecaptionui.js +64 -0
  210. package/{dist → src}/tablecaption/toggletablecaptioncommand.d.ts +1 -1
  211. package/src/tablecaption/toggletablecaptioncommand.js +105 -0
  212. package/{dist → src}/tablecaption/utils.d.ts +1 -1
  213. package/src/tablecaption/utils.js +61 -0
  214. package/{dist → src}/tablecaption.d.ts +1 -1
  215. package/src/tablecaption.js +34 -0
  216. package/{dist → src}/tablecellproperties/commands/tablecellbackgroundcolorcommand.d.ts +1 -1
  217. package/src/tablecellproperties/commands/tablecellbackgroundcolorcommand.js +30 -0
  218. package/{dist → src}/tablecellproperties/commands/tablecellbordercolorcommand.d.ts +2 -2
  219. package/src/tablecellproperties/commands/tablecellbordercolorcommand.js +44 -0
  220. package/{dist → src}/tablecellproperties/commands/tablecellborderstylecommand.d.ts +2 -2
  221. package/src/tablecellproperties/commands/tablecellborderstylecommand.js +44 -0
  222. package/{dist → src}/tablecellproperties/commands/tablecellborderwidthcommand.d.ts +2 -2
  223. package/src/tablecellproperties/commands/tablecellborderwidthcommand.js +64 -0
  224. package/{dist → src}/tablecellproperties/commands/tablecellheightcommand.d.ts +1 -1
  225. package/src/tablecellproperties/commands/tablecellheightcommand.js +51 -0
  226. package/{dist → src}/tablecellproperties/commands/tablecellhorizontalalignmentcommand.d.ts +1 -1
  227. package/src/tablecellproperties/commands/tablecellhorizontalalignmentcommand.js +30 -0
  228. package/{dist → src}/tablecellproperties/commands/tablecellpaddingcommand.d.ts +2 -2
  229. package/src/tablecellproperties/commands/tablecellpaddingcommand.js +64 -0
  230. package/{dist → src}/tablecellproperties/commands/tablecellpropertycommand.d.ts +2 -2
  231. package/src/tablecellproperties/commands/tablecellpropertycommand.js +138 -0
  232. package/{dist → src}/tablecellproperties/commands/tablecelltypecommand.d.ts +6 -2
  233. package/src/tablecellproperties/commands/tablecelltypecommand.js +167 -0
  234. package/{dist → src}/tablecellproperties/commands/tablecellverticalalignmentcommand.d.ts +1 -1
  235. package/src/tablecellproperties/commands/tablecellverticalalignmentcommand.js +38 -0
  236. package/{dist → src}/tablecellproperties/tablecellpropertiesediting.d.ts +1 -1
  237. package/src/tablecellproperties/tablecellpropertiesediting.js +412 -0
  238. package/{dist → src}/tablecellproperties/tablecellpropertiesui.d.ts +2 -2
  239. package/src/tablecellproperties/tablecellpropertiesui.js +385 -0
  240. package/src/tablecellproperties/tablecellpropertiesuiexperimental.d.ts +128 -0
  241. package/src/tablecellproperties/tablecellpropertiesuiexperimental.js +408 -0
  242. package/src/tablecellproperties/ui/tablecellpropertiesview.d.ts +229 -0
  243. package/src/tablecellproperties/ui/tablecellpropertiesview.js +612 -0
  244. package/{dist/tablecellproperties/ui/tablecellpropertiesview.d.ts → src/tablecellproperties/ui/tablecellpropertiesviewexperimental.d.ts} +12 -11
  245. package/src/tablecellproperties/ui/tablecellpropertiesviewexperimental.js +744 -0
  246. package/{dist → src}/tablecellproperties.d.ts +1 -1
  247. package/src/tablecellproperties.js +40 -0
  248. package/{dist → src}/tablecellwidth/commands/tablecellwidthcommand.d.ts +1 -1
  249. package/src/tablecellwidth/commands/tablecellwidthcommand.js +51 -0
  250. package/{dist → src}/tablecellwidth/tablecellwidthediting.d.ts +1 -1
  251. package/src/tablecellwidth/tablecellwidthediting.js +53 -0
  252. package/{dist → src}/tableclipboard.d.ts +3 -3
  253. package/src/tableclipboard.js +500 -0
  254. package/src/tablecolumnresize/constants.js +33 -0
  255. package/{dist → src}/tablecolumnresize/converters.d.ts +1 -1
  256. package/src/tablecolumnresize/converters.js +62 -0
  257. package/{dist → src}/tablecolumnresize/tablecolumnresizeediting.d.ts +2 -2
  258. package/src/tablecolumnresize/tablecolumnresizeediting.js +734 -0
  259. package/{dist → src}/tablecolumnresize/tablewidthscommand.d.ts +2 -2
  260. package/src/tablecolumnresize/tablewidthscommand.js +61 -0
  261. package/{dist → src}/tablecolumnresize/utils.d.ts +2 -2
  262. package/src/tablecolumnresize/utils.js +370 -0
  263. package/{dist → src}/tablecolumnresize.d.ts +1 -1
  264. package/src/tablecolumnresize.js +36 -0
  265. package/{dist → src}/tableconfig.d.ts +6 -26
  266. package/src/tableconfig.js +5 -0
  267. package/{dist → src}/tableediting.d.ts +3 -3
  268. package/src/tableediting.js +246 -0
  269. package/{dist → src}/tablekeyboard.d.ts +3 -3
  270. package/src/tablekeyboard.js +273 -0
  271. package/{dist → src}/tablelayout/commands/tabletypecommand.d.ts +1 -1
  272. package/src/tablelayout/commands/tabletypecommand.js +68 -0
  273. package/{dist → src}/tablelayout/tablelayoutediting.d.ts +1 -1
  274. package/src/tablelayout/tablelayoutediting.js +295 -0
  275. package/{dist → src}/tablelayout/tablelayoutui.d.ts +1 -1
  276. package/src/tablelayout/tablelayoutui.js +196 -0
  277. package/{dist → src}/tablelayout.d.ts +1 -1
  278. package/src/tablelayout.js +37 -0
  279. package/{dist → src}/tablemouse/mouseeventsobserver.d.ts +1 -1
  280. package/src/tablemouse/mouseeventsobserver.js +34 -0
  281. package/{dist → src}/tablemouse.d.ts +1 -1
  282. package/src/tablemouse.js +178 -0
  283. package/{dist → src}/tableproperties/commands/tablealignmentcommand.d.ts +1 -1
  284. package/src/tableproperties/commands/tablealignmentcommand.js +30 -0
  285. package/{dist → src}/tableproperties/commands/tablebackgroundcolorcommand.d.ts +1 -1
  286. package/src/tableproperties/commands/tablebackgroundcolorcommand.js +30 -0
  287. package/{dist → src}/tableproperties/commands/tablebordercolorcommand.d.ts +2 -2
  288. package/src/tableproperties/commands/tablebordercolorcommand.js +44 -0
  289. package/{dist → src}/tableproperties/commands/tableborderstylecommand.d.ts +2 -2
  290. package/src/tableproperties/commands/tableborderstylecommand.js +44 -0
  291. package/{dist → src}/tableproperties/commands/tableborderwidthcommand.d.ts +2 -2
  292. package/src/tableproperties/commands/tableborderwidthcommand.js +64 -0
  293. package/{dist → src}/tableproperties/commands/tableheightcommand.d.ts +1 -1
  294. package/src/tableproperties/commands/tableheightcommand.js +54 -0
  295. package/{dist → src}/tableproperties/commands/tablepropertycommand.d.ts +2 -2
  296. package/src/tableproperties/commands/tablepropertycommand.js +103 -0
  297. package/{dist → src}/tableproperties/commands/tablewidthcommand.d.ts +1 -1
  298. package/src/tableproperties/commands/tablewidthcommand.js +54 -0
  299. package/{dist → src}/tableproperties/tablepropertiesediting.d.ts +1 -1
  300. package/src/tableproperties/tablepropertiesediting.js +546 -0
  301. package/{dist → src}/tableproperties/tablepropertiesui.d.ts +2 -2
  302. package/src/tableproperties/tablepropertiesui.js +374 -0
  303. package/src/tableproperties/tablepropertiesuiexperimental.d.ts +136 -0
  304. package/src/tableproperties/tablepropertiesuiexperimental.js +375 -0
  305. package/{dist → src}/tableproperties/ui/tablepropertiesview.d.ts +2 -10
  306. package/src/tableproperties/ui/tablepropertiesview.js +520 -0
  307. package/src/tableproperties/ui/tablepropertiesviewexperimental.d.ts +216 -0
  308. package/src/tableproperties/ui/tablepropertiesviewexperimental.js +544 -0
  309. package/{dist → src}/tableproperties.d.ts +1 -1
  310. package/src/tableproperties.js +40 -0
  311. package/{dist → src}/tableselection.d.ts +2 -2
  312. package/src/tableselection.js +323 -0
  313. package/{dist → src}/tabletoolbar.d.ts +2 -2
  314. package/src/tabletoolbar.js +63 -0
  315. package/{dist → src}/tableui.d.ts +1 -1
  316. package/src/tableui.js +335 -0
  317. package/{dist → src}/tableutils.d.ts +2 -2
  318. package/src/tableutils.js +1282 -0
  319. package/{dist → src}/tablewalker.d.ts +1 -1
  320. package/src/tablewalker.js +489 -0
  321. package/{dist → src}/ui/colorinputview.d.ts +2 -2
  322. package/src/ui/colorinputview.js +305 -0
  323. package/{dist → src}/ui/inserttableview.d.ts +2 -2
  324. package/src/ui/inserttableview.js +192 -0
  325. package/{dist → src}/utils/common.d.ts +2 -2
  326. package/src/utils/common.js +118 -0
  327. package/{dist → src}/utils/structure.d.ts +1 -1
  328. package/src/utils/structure.js +452 -0
  329. package/{dist → src}/utils/table-properties.d.ts +1 -1
  330. package/src/utils/table-properties.js +121 -0
  331. package/{dist → src}/utils/ui/contextualballoon.d.ts +2 -2
  332. package/src/utils/ui/contextualballoon.js +111 -0
  333. package/{dist → src}/utils/ui/table-properties.d.ts +2 -2
  334. package/src/utils/ui/table-properties.js +390 -0
  335. package/src/utils/ui/table-propertiesexperimental.d.ts +215 -0
  336. package/src/utils/ui/table-propertiesexperimental.js +391 -0
  337. package/{dist → src}/utils/ui/widget.d.ts +1 -1
  338. package/src/utils/ui/widget.js +56 -0
  339. package/theme/colorinput.css +39 -0
  340. package/theme/formrow-experimental.css +15 -0
  341. package/theme/formrow.css +13 -0
  342. package/theme/inserttable.css +10 -0
  343. package/theme/table.css +144 -0
  344. package/theme/tablecaption.css +66 -0
  345. package/theme/tablecellproperties-experimental.css +4 -0
  346. package/theme/tablecellproperties.css +28 -0
  347. package/theme/tablecolumnresize.css +62 -0
  348. package/theme/tableediting.css +10 -0
  349. package/theme/tableform-experimental.css +61 -0
  350. package/theme/tableform.css +64 -0
  351. package/theme/tablelayout.css +74 -0
  352. package/theme/tableproperties-experimental.css +78 -0
  353. package/theme/tableproperties.css +18 -0
  354. package/theme/tableselection.css +10 -0
  355. package/dist/tablecellproperties/tablecellpropertiesutils.d.ts +0 -18
  356. /package/{dist → src}/tablecolumnresize/constants.d.ts +0 -0
@@ -0,0 +1,412 @@
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/tablecellpropertiesediting
7
+ */
8
+ import { priorities } from 'ckeditor5/src/utils.js';
9
+ import { Plugin } from 'ckeditor5/src/core.js';
10
+ import { addBorderStylesRules, addPaddingStylesRules, addBackgroundStylesRules } from 'ckeditor5/src/engine.js';
11
+ import { downcastAttributeToStyle, getDefaultValueAdjusted, upcastBorderStyles } from '../converters/tableproperties.js';
12
+ import { TableEditing } from './../tableediting.js';
13
+ import { TableCellWidthEditing } from '../tablecellwidth/tablecellwidthediting.js';
14
+ import { TableCellPaddingCommand } from './commands/tablecellpaddingcommand.js';
15
+ import { TableCellHeightCommand } from './commands/tablecellheightcommand.js';
16
+ import { TableCellBackgroundColorCommand } from './commands/tablecellbackgroundcolorcommand.js';
17
+ import { TableCellVerticalAlignmentCommand } from './commands/tablecellverticalalignmentcommand.js';
18
+ import { TableCellHorizontalAlignmentCommand } from './commands/tablecellhorizontalalignmentcommand.js';
19
+ import { TableCellBorderStyleCommand } from './commands/tablecellborderstylecommand.js';
20
+ import { TableCellBorderColorCommand } from './commands/tablecellbordercolorcommand.js';
21
+ import { TableCellBorderWidthCommand } from './commands/tablecellborderwidthcommand.js';
22
+ import { TableCellTypeCommand, updateTablesHeadingAttributes } from './commands/tablecelltypecommand.js';
23
+ import { getNormalizedDefaultCellProperties } from '../utils/table-properties.js';
24
+ import { enableProperty } from '../utils/common.js';
25
+ import { TableUtils } from '../tableutils.js';
26
+ import { TableWalker } from '../tablewalker.js';
27
+ const VALIGN_VALUES_REG_EXP = /^(top|middle|bottom)$/;
28
+ const ALIGN_VALUES_REG_EXP = /^(left|center|right|justify)$/;
29
+ /**
30
+ * The table cell properties editing feature.
31
+ *
32
+ * Introduces table cell model attributes and their conversion:
33
+ *
34
+ * - border: `tableCellBorderStyle`, `tableCellBorderColor` and `tableCellBorderWidth`
35
+ * - background color: `tableCellBackgroundColor`
36
+ * - cell padding: `tableCellPadding`
37
+ * - horizontal and vertical alignment: `tableCellHorizontalAlignment`, `tableCellVerticalAlignment`
38
+ * - cell width and height: `tableCellWidth`, `tableCellHeight`
39
+ *
40
+ * It also registers commands used to manipulate the above attributes:
41
+ *
42
+ * - border: the `'tableCellBorderStyle'`, `'tableCellBorderColor'` and `'tableCellBorderWidth'` commands
43
+ * - background color: the `'tableCellBackgroundColor'` command
44
+ * - cell padding: the `'tableCellPadding'` command
45
+ * - horizontal and vertical alignment: the `'tableCellHorizontalAlignment'` and `'tableCellVerticalAlignment'` commands
46
+ * - width and height: the `'tableCellWidth'` and `'tableCellHeight'` commands
47
+ */
48
+ export class TableCellPropertiesEditing extends Plugin {
49
+ /**
50
+ * @inheritDoc
51
+ */
52
+ static get pluginName() {
53
+ return 'TableCellPropertiesEditing';
54
+ }
55
+ /**
56
+ * @inheritDoc
57
+ * @internal
58
+ */
59
+ static get licenseFeatureCode() {
60
+ return 'TCP';
61
+ }
62
+ /**
63
+ * @inheritDoc
64
+ */
65
+ static get isOfficialPlugin() {
66
+ return true;
67
+ }
68
+ /**
69
+ * @inheritDoc
70
+ */
71
+ static get isPremiumPlugin() {
72
+ return true;
73
+ }
74
+ /**
75
+ * @inheritDoc
76
+ */
77
+ static get requires() {
78
+ return [TableEditing, TableCellWidthEditing];
79
+ }
80
+ /**
81
+ * @inheritDoc
82
+ */
83
+ init() {
84
+ const editor = this.editor;
85
+ const schema = editor.model.schema;
86
+ const conversion = editor.conversion;
87
+ editor.config.define('table.tableCellProperties.defaultProperties', {});
88
+ const defaultTableCellProperties = getNormalizedDefaultCellProperties(editor.config.get('table.tableCellProperties.defaultProperties'), {
89
+ includeVerticalAlignmentProperty: true,
90
+ includeHorizontalAlignmentProperty: true,
91
+ includePaddingProperty: true,
92
+ isRightToLeftContent: editor.locale.contentLanguageDirection === 'rtl'
93
+ });
94
+ editor.data.addStyleProcessorRules(addBorderStylesRules);
95
+ enableBorderProperties(editor, {
96
+ color: defaultTableCellProperties.borderColor,
97
+ style: defaultTableCellProperties.borderStyle,
98
+ width: defaultTableCellProperties.borderWidth
99
+ });
100
+ editor.commands.add('tableCellBorderStyle', new TableCellBorderStyleCommand(editor, defaultTableCellProperties.borderStyle));
101
+ editor.commands.add('tableCellBorderColor', new TableCellBorderColorCommand(editor, defaultTableCellProperties.borderColor));
102
+ editor.commands.add('tableCellBorderWidth', new TableCellBorderWidthCommand(editor, defaultTableCellProperties.borderWidth));
103
+ enableProperty(schema, conversion, {
104
+ modelAttribute: 'tableCellHeight',
105
+ styleName: 'height',
106
+ attributeName: 'height',
107
+ attributeType: 'length',
108
+ defaultValue: defaultTableCellProperties.height
109
+ });
110
+ editor.commands.add('tableCellHeight', new TableCellHeightCommand(editor, defaultTableCellProperties.height));
111
+ editor.data.addStyleProcessorRules(addPaddingStylesRules);
112
+ enableProperty(schema, conversion, {
113
+ modelAttribute: 'tableCellPadding',
114
+ styleName: 'padding',
115
+ reduceBoxSides: true,
116
+ defaultValue: defaultTableCellProperties.padding
117
+ });
118
+ editor.commands.add('tableCellPadding', new TableCellPaddingCommand(editor, defaultTableCellProperties.padding));
119
+ editor.data.addStyleProcessorRules(addBackgroundStylesRules);
120
+ enableProperty(schema, conversion, {
121
+ modelAttribute: 'tableCellBackgroundColor',
122
+ styleName: 'background-color',
123
+ attributeName: 'bgcolor',
124
+ attributeType: 'color',
125
+ defaultValue: defaultTableCellProperties.backgroundColor
126
+ });
127
+ editor.commands.add('tableCellBackgroundColor', new TableCellBackgroundColorCommand(editor, defaultTableCellProperties.backgroundColor));
128
+ enableHorizontalAlignmentProperty(schema, conversion, defaultTableCellProperties.horizontalAlignment);
129
+ editor.commands.add('tableCellHorizontalAlignment', new TableCellHorizontalAlignmentCommand(editor, defaultTableCellProperties.horizontalAlignment));
130
+ enableVerticalAlignmentProperty(schema, conversion, defaultTableCellProperties.verticalAlignment);
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
+ }
136
+ }
137
+ }
138
+ /**
139
+ * Enables the `'tableCellBorderStyle'`, `'tableCellBorderColor'` and `'tableCellBorderWidth'` attributes for table cells.
140
+ *
141
+ * @param editor The editor instance.
142
+ * @param defaultBorder The default border values.
143
+ * @param defaultBorder.color The default `tableCellBorderColor` value.
144
+ * @param defaultBorder.style The default `tableCellBorderStyle` value.
145
+ * @param defaultBorder.width The default `tableCellBorderWidth` value.
146
+ */
147
+ function enableBorderProperties(editor, defaultBorder) {
148
+ const { conversion } = editor;
149
+ const { schema } = editor.model;
150
+ const modelAttributes = {
151
+ width: 'tableCellBorderWidth',
152
+ color: 'tableCellBorderColor',
153
+ style: 'tableCellBorderStyle'
154
+ };
155
+ schema.extend('tableCell', {
156
+ allowAttributes: Object.values(modelAttributes)
157
+ });
158
+ for (const modelAttribute of Object.values(modelAttributes)) {
159
+ schema.setAttributeProperties(modelAttribute, { isFormatting: true });
160
+ }
161
+ upcastBorderStyles(editor, 'td', modelAttributes, defaultBorder);
162
+ upcastBorderStyles(editor, 'th', modelAttributes, defaultBorder);
163
+ downcastAttributeToStyle(conversion, { modelElement: 'tableCell', modelAttribute: modelAttributes.style, styleName: 'border-style' });
164
+ downcastAttributeToStyle(conversion, { modelElement: 'tableCell', modelAttribute: modelAttributes.color, styleName: 'border-color' });
165
+ downcastAttributeToStyle(conversion, { modelElement: 'tableCell', modelAttribute: modelAttributes.width, styleName: 'border-width' });
166
+ }
167
+ /**
168
+ * Enables the `'tableCellHorizontalAlignment'` attribute for table cells.
169
+ *
170
+ * @param defaultValue The default horizontal alignment value.
171
+ */
172
+ function enableHorizontalAlignmentProperty(schema, conversion, defaultValue) {
173
+ schema.extend('tableCell', {
174
+ allowAttributes: ['tableCellHorizontalAlignment']
175
+ });
176
+ schema.setAttributeProperties('tableCellHorizontalAlignment', { isFormatting: true });
177
+ conversion.for('downcast')
178
+ .attributeToAttribute({
179
+ model: {
180
+ name: 'tableCell',
181
+ key: 'tableCellHorizontalAlignment'
182
+ },
183
+ view: alignment => ({
184
+ key: 'style',
185
+ value: {
186
+ 'text-align': alignment
187
+ }
188
+ })
189
+ });
190
+ conversion.for('upcast')
191
+ // Support for the `text-align:*;` CSS definition for the table cell alignment.
192
+ .attributeToAttribute({
193
+ view: {
194
+ name: /^(td|th)$/,
195
+ styles: {
196
+ 'text-align': ALIGN_VALUES_REG_EXP
197
+ }
198
+ },
199
+ model: {
200
+ key: 'tableCellHorizontalAlignment',
201
+ value: (viewElement, conversionApi, data) => {
202
+ const localDefaultValue = getDefaultValueAdjusted(defaultValue, 'left', data);
203
+ const align = viewElement.getStyle('text-align');
204
+ if (align !== localDefaultValue) {
205
+ return align;
206
+ }
207
+ // Consume the style even if not applied to the element so it won't be processed by other converters.
208
+ conversionApi.consumable.consume(viewElement, { styles: 'text-align' });
209
+ }
210
+ }
211
+ })
212
+ // Support for the `align` attribute as the backward compatibility while pasting from other sources.
213
+ .attributeToAttribute({
214
+ view: {
215
+ name: /^(td|th)$/,
216
+ attributes: {
217
+ align: ALIGN_VALUES_REG_EXP
218
+ }
219
+ },
220
+ model: {
221
+ key: 'tableCellHorizontalAlignment',
222
+ value: (viewElement, conversionApi, data) => {
223
+ const localDefaultValue = getDefaultValueAdjusted(defaultValue, 'left', data);
224
+ const align = viewElement.getAttribute('align');
225
+ if (align !== localDefaultValue) {
226
+ return align;
227
+ }
228
+ // Consume the style even if not applied to the element so it won't be processed by other converters.
229
+ conversionApi.consumable.consume(viewElement, { attributes: 'align' });
230
+ }
231
+ }
232
+ });
233
+ }
234
+ /**
235
+ * Enables the `'verticalAlignment'` attribute for table cells.
236
+ *
237
+ * @param defaultValue The default vertical alignment value.
238
+ */
239
+ function enableVerticalAlignmentProperty(schema, conversion, defaultValue) {
240
+ schema.extend('tableCell', {
241
+ allowAttributes: ['tableCellVerticalAlignment']
242
+ });
243
+ schema.setAttributeProperties('tableCellVerticalAlignment', { isFormatting: true });
244
+ conversion.for('downcast')
245
+ .attributeToAttribute({
246
+ model: {
247
+ name: 'tableCell',
248
+ key: 'tableCellVerticalAlignment'
249
+ },
250
+ view: alignment => ({
251
+ key: 'style',
252
+ value: {
253
+ 'vertical-align': alignment
254
+ }
255
+ })
256
+ });
257
+ conversion.for('upcast')
258
+ // Support for the `vertical-align:*;` CSS definition for the table cell alignment.
259
+ .attributeToAttribute({
260
+ view: {
261
+ name: /^(td|th)$/,
262
+ styles: {
263
+ 'vertical-align': VALIGN_VALUES_REG_EXP
264
+ }
265
+ },
266
+ model: {
267
+ key: 'tableCellVerticalAlignment',
268
+ value: (viewElement, conversionApi, data) => {
269
+ const localDefaultValue = getDefaultValueAdjusted(defaultValue, 'middle', data);
270
+ const align = viewElement.getStyle('vertical-align');
271
+ if (align !== localDefaultValue) {
272
+ return align;
273
+ }
274
+ // Consume the style even if not applied to the element so it won't be processed by other converters.
275
+ conversionApi.consumable.consume(viewElement, { styles: 'vertical-align' });
276
+ }
277
+ }
278
+ })
279
+ // Support for the `align` attribute as the backward compatibility while pasting from other sources.
280
+ .attributeToAttribute({
281
+ view: {
282
+ name: /^(td|th)$/,
283
+ attributes: {
284
+ valign: VALIGN_VALUES_REG_EXP
285
+ }
286
+ },
287
+ model: {
288
+ key: 'tableCellVerticalAlignment',
289
+ value: (viewElement, conversionApi, data) => {
290
+ const localDefaultValue = getDefaultValueAdjusted(defaultValue, 'middle', data);
291
+ const valign = viewElement.getAttribute('valign');
292
+ if (valign !== localDefaultValue) {
293
+ return valign;
294
+ }
295
+ // Consume the attribute even if not applied to the element so it won't be processed by other converters.
296
+ conversionApi.consumable.consume(viewElement, { attributes: 'valign' });
297
+ }
298
+ }
299
+ });
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
+ }
@@ -5,8 +5,8 @@
5
5
  /**
6
6
  * @module table/tablecellproperties/tablecellpropertiesui
7
7
  */
8
- import { Plugin, type Editor } from '@ckeditor/ckeditor5-core';
9
- import { ContextualBalloon } from '@ckeditor/ckeditor5-ui';
8
+ import { Plugin, type Editor } from 'ckeditor5/src/core.js';
9
+ import { ContextualBalloon } from 'ckeditor5/src/ui.js';
10
10
  import { TableCellPropertiesView } from './ui/tablecellpropertiesview.js';
11
11
  /**
12
12
  * The table cell properties UI plugin. It introduces the `'tableCellProperties'` button