@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,444 @@
1
+ /**
2
+ * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.
3
+ * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options
4
+ */
5
+ import { first } from 'ckeditor5/src/utils.js';
6
+ const ALIGN_VALUES_REG_EXP = /^(left|center|right)$/;
7
+ const FLOAT_VALUES_REG_EXP = /^(left|none|right)$/;
8
+ /**
9
+ * Conversion helper for upcasting attributes using normalized styles.
10
+ *
11
+ * @param options.modelAttribute The attribute to set.
12
+ * @param options.styleName The style name to convert.
13
+ * @param options.attributeName The HTML attribute name to convert.
14
+ * @param options.attributeType The HTML attribute type for value normalization.
15
+ * @param options.viewElement The view element name that should be converted.
16
+ * @param options.defaultValue The default value for the specified `modelAttribute`.
17
+ * @param options.shouldUpcast The function which returns `true` if style should be upcasted from this element.
18
+ * @internal
19
+ */
20
+ export function upcastStyleToAttribute(conversion, options) {
21
+ const { modelAttribute, styleName, attributeName, attributeType, viewElement, defaultValue, shouldUpcast = () => true, reduceBoxSides = false } = options;
22
+ conversion.for('upcast').attributeToAttribute({
23
+ view: {
24
+ name: viewElement,
25
+ styles: {
26
+ [styleName]: /[\s\S]+/
27
+ }
28
+ },
29
+ model: {
30
+ key: modelAttribute,
31
+ value: (viewElement, conversionApi, data) => {
32
+ // Ignore table elements inside figures and figures without the table class.
33
+ if (!shouldUpcast(viewElement)) {
34
+ return;
35
+ }
36
+ const localDefaultValue = getDefaultValueAdjusted(defaultValue, '', data);
37
+ const normalized = viewElement.getNormalizedStyle(styleName);
38
+ const value = reduceBoxSides ? reduceBoxSidesValue(normalized) : normalized;
39
+ if (localDefaultValue !== value) {
40
+ return value;
41
+ }
42
+ // Consume the style even if not applied to the element so it won't be processed by other converters.
43
+ conversionApi.consumable.consume(viewElement, { styles: styleName });
44
+ }
45
+ }
46
+ });
47
+ if (attributeName) {
48
+ conversion.for('upcast').attributeToAttribute({
49
+ view: {
50
+ name: viewElement,
51
+ attributes: {
52
+ [attributeName]: /.+/
53
+ }
54
+ },
55
+ model: {
56
+ key: modelAttribute,
57
+ value: (viewElement, conversionApi, data) => {
58
+ // Convert attributes of table and table cell elements, ignore figure.
59
+ // Do not convert attribute if related style is set as it has a higher priority.
60
+ // Do not convert attribute if the element is a table inside a figure with the related style set.
61
+ if (viewElement.name == 'figure' ||
62
+ viewElement.hasStyle(styleName) ||
63
+ viewElement.name == 'table' && viewElement.parent.name == 'figure' && viewElement.parent.hasStyle(styleName)) {
64
+ return;
65
+ }
66
+ const localDefaultValue = getDefaultValueAdjusted(defaultValue, '', data);
67
+ let value = viewElement.getAttribute(attributeName);
68
+ if (value && attributeType == 'length') {
69
+ value = parseFloat(value) + (value.endsWith('%') ? '%' : 'px');
70
+ }
71
+ if (localDefaultValue !== value) {
72
+ return value;
73
+ }
74
+ // Consume the attribute even if not applied to the element so it won't be processed by other converters.
75
+ conversionApi.consumable.consume(viewElement, { attributes: attributeName });
76
+ }
77
+ }
78
+ });
79
+ }
80
+ }
81
+ /**
82
+ * Conversion helper for upcasting border styles for view elements.
83
+ *
84
+ * @param editor The editor instance.
85
+ * @param defaultBorder The default border values.
86
+ * @param defaultBorder.color The default `borderColor` value.
87
+ * @param defaultBorder.style The default `borderStyle` value.
88
+ * @param defaultBorder.width The default `borderWidth` value.
89
+ * @internal
90
+ */
91
+ export function upcastBorderStyles(editor, viewElementName, modelAttributes, defaultBorder) {
92
+ const { conversion } = editor;
93
+ conversion.for('upcast').add(dispatcher => dispatcher.on('element:' + viewElementName, (evt, data, conversionApi) => {
94
+ // If the element was not converted by element-to-element converter,
95
+ // we should not try to convert the style. See #8393.
96
+ if (!data.modelRange) {
97
+ return;
98
+ }
99
+ // Check the most detailed properties. These will be always set directly or
100
+ // when using the "group" properties like: `border-(top|right|bottom|left)` or `border`.
101
+ const stylesToConsume = [
102
+ 'border-top-width',
103
+ 'border-top-color',
104
+ 'border-top-style',
105
+ 'border-bottom-width',
106
+ 'border-bottom-color',
107
+ 'border-bottom-style',
108
+ 'border-right-width',
109
+ 'border-right-color',
110
+ 'border-right-style',
111
+ 'border-left-width',
112
+ 'border-left-color',
113
+ 'border-left-style'
114
+ ].filter(styleName => data.viewItem.hasStyle(styleName));
115
+ if (!stylesToConsume.length) {
116
+ return;
117
+ }
118
+ const matcherPattern = {
119
+ styles: stylesToConsume
120
+ };
121
+ // Try to consume appropriate values from consumable values list.
122
+ if (!conversionApi.consumable.test(data.viewItem, matcherPattern)) {
123
+ return;
124
+ }
125
+ const modelElement = [...data.modelRange.getItems({ shallow: true })].pop();
126
+ const tableElement = modelElement.findAncestor('table', { includeSelf: true });
127
+ let localDefaultBorder = defaultBorder;
128
+ if (tableElement && tableElement.getAttribute('tableType') == 'layout') {
129
+ localDefaultBorder = {
130
+ style: 'none',
131
+ color: '',
132
+ width: ''
133
+ };
134
+ }
135
+ conversionApi.consumable.consume(data.viewItem, matcherPattern);
136
+ const normalizedBorder = {
137
+ style: data.viewItem.getNormalizedStyle('border-style'),
138
+ color: data.viewItem.getNormalizedStyle('border-color'),
139
+ width: data.viewItem.getNormalizedStyle('border-width')
140
+ };
141
+ const reducedBorder = {
142
+ style: reduceBoxSidesValue(normalizedBorder.style),
143
+ color: reduceBoxSidesValue(normalizedBorder.color),
144
+ width: reduceBoxSidesValue(normalizedBorder.width)
145
+ };
146
+ if (reducedBorder.style !== localDefaultBorder.style) {
147
+ conversionApi.writer.setAttribute(modelAttributes.style, reducedBorder.style, modelElement);
148
+ }
149
+ if (reducedBorder.color !== localDefaultBorder.color) {
150
+ conversionApi.writer.setAttribute(modelAttributes.color, reducedBorder.color, modelElement);
151
+ }
152
+ if (reducedBorder.width !== localDefaultBorder.width) {
153
+ conversionApi.writer.setAttribute(modelAttributes.width, reducedBorder.width, modelElement);
154
+ }
155
+ }));
156
+ if (editor.config.get('experimentalFlags.upcastTableBorderZeroAttributes')) {
157
+ // If parent table has `border="0"` attribute then set border style to `none`
158
+ // all table cells of that table and table itself.
159
+ conversion.for('upcast').add(dispatcher => {
160
+ dispatcher.on(`element:${viewElementName}`, (evt, data, conversionApi) => {
161
+ const { modelRange, viewItem } = data;
162
+ const viewTable = (viewItem.is('element', 'table') ?
163
+ viewItem :
164
+ viewItem.findAncestor('table'));
165
+ // If something already consumed the border attribute on the nearest table element, skip the conversion.
166
+ if (!conversionApi.consumable.test(viewTable, { attributes: 'border' })) {
167
+ return;
168
+ }
169
+ // Ignore tables with border different than "0".
170
+ if (viewTable.getAttribute('border') !== '0') {
171
+ return;
172
+ }
173
+ const modelElement = modelRange?.start?.nodeAfter;
174
+ // If model element has already border style attribute, skip the conversion.
175
+ if (!modelElement || modelElement.hasAttribute(modelAttributes.style)) {
176
+ return;
177
+ }
178
+ conversionApi.writer.setAttribute(modelAttributes.style, 'none', modelElement);
179
+ if (viewItem.is('element', 'table')) {
180
+ conversionApi.consumable.consume(viewItem, { attributes: 'border' });
181
+ }
182
+ });
183
+ });
184
+ }
185
+ }
186
+ /**
187
+ * Conversion helper for downcasting an attribute to a style.
188
+ *
189
+ * @internal
190
+ */
191
+ export function downcastAttributeToStyle(conversion, options) {
192
+ const { modelElement, modelAttribute, styleName } = options;
193
+ conversion.for('downcast').attributeToAttribute({
194
+ model: {
195
+ name: modelElement,
196
+ key: modelAttribute
197
+ },
198
+ view: modelAttributeValue => ({
199
+ key: 'style',
200
+ value: {
201
+ [styleName]: modelAttributeValue
202
+ }
203
+ })
204
+ });
205
+ }
206
+ /**
207
+ * Conversion helper for downcasting attributes from the model table to a view table (not to `<figure>`).
208
+ *
209
+ * @internal
210
+ */
211
+ export function downcastTableAttribute(conversion, options) {
212
+ const { modelAttribute, styleName } = options;
213
+ conversion.for('downcast').add(dispatcher => dispatcher.on(`attribute:${modelAttribute}:table`, (evt, data, conversionApi) => {
214
+ const { item, attributeNewValue } = data;
215
+ const { mapper, writer } = conversionApi;
216
+ if (!conversionApi.consumable.consume(data.item, evt.name)) {
217
+ return;
218
+ }
219
+ const table = [...mapper.toViewElement(item).getChildren()].find(child => child.is('element', 'table'));
220
+ if (attributeNewValue) {
221
+ writer.setStyle(styleName, attributeNewValue, table);
222
+ }
223
+ else {
224
+ writer.removeStyle(styleName, table);
225
+ }
226
+ }));
227
+ }
228
+ /**
229
+ * Returns the default value for table or table cell property adjusted for layout tables.
230
+ *
231
+ * @internal
232
+ */
233
+ export function getDefaultValueAdjusted(defaultValue, layoutTableDefault, data) {
234
+ const modelElement = data.modelRange && first(data.modelRange.getItems({ shallow: true }));
235
+ const tableElement = modelElement && modelElement.is('element') && modelElement.findAncestor('table', { includeSelf: true });
236
+ if (tableElement && tableElement.getAttribute('tableType') === 'layout') {
237
+ return layoutTableDefault;
238
+ }
239
+ return defaultValue;
240
+ }
241
+ /**
242
+ * Reduces the full top, right, bottom, left object to a single string if all sides are equal.
243
+ * Returns original style otherwise.
244
+ */
245
+ function reduceBoxSidesValue(style) {
246
+ if (!style) {
247
+ return;
248
+ }
249
+ const sides = ['top', 'right', 'bottom', 'left'];
250
+ const allSidesDefined = sides.every(side => style[side]);
251
+ if (!allSidesDefined) {
252
+ return style;
253
+ }
254
+ const topSideStyle = style.top;
255
+ const allSidesEqual = sides.every(side => style[side] === topSideStyle);
256
+ if (!allSidesEqual) {
257
+ return style;
258
+ }
259
+ return topSideStyle;
260
+ }
261
+ /**
262
+ * Default table alignment options.
263
+ */
264
+ export const DEFAULT_TABLE_ALIGNMENT_OPTIONS = {
265
+ left: { className: 'table-style-align-left' },
266
+ center: { className: 'table-style-align-center' },
267
+ right: { className: 'table-style-align-right' },
268
+ blockLeft: { className: 'table-style-block-align-left' },
269
+ blockRight: { className: 'table-style-block-align-right' }
270
+ };
271
+ /**
272
+ * Configuration for upcasting table alignment from view to model.
273
+ */
274
+ export const upcastTableAlignmentConfig = [
275
+ // Support for the `float:*;` CSS definition for the table alignment.
276
+ {
277
+ view: {
278
+ name: /^(table|figure)$/,
279
+ styles: {
280
+ float: FLOAT_VALUES_REG_EXP
281
+ }
282
+ },
283
+ getAlign: (viewElement) => {
284
+ let align = viewElement.getStyle('float');
285
+ if (align === 'none') {
286
+ align = 'center';
287
+ }
288
+ return align;
289
+ },
290
+ getConsumables(viewElement) {
291
+ const float = viewElement.getStyle('float');
292
+ const styles = ['float'];
293
+ if (float === 'left' && viewElement.hasStyle('margin-right')) {
294
+ styles.push('margin-right');
295
+ }
296
+ else if (float === 'right' && viewElement.hasStyle('margin-left')) {
297
+ styles.push('margin-left');
298
+ }
299
+ return { styles };
300
+ }
301
+ },
302
+ // Support for the `margin-left:auto; margin-right:auto;` CSS definition for the table alignment.
303
+ {
304
+ view: {
305
+ name: /^(table|figure)$/,
306
+ styles: {
307
+ 'margin-left': 'auto',
308
+ 'margin-right': 'auto'
309
+ }
310
+ },
311
+ getAlign: () => 'center',
312
+ getConsumables: () => {
313
+ return { styles: ['margin-left', 'margin-right'] };
314
+ }
315
+ },
316
+ // Support for the left alignment using CSS classes.
317
+ {
318
+ view: {
319
+ name: /^(table|figure)$/,
320
+ key: 'class',
321
+ value: 'table-style-align-left'
322
+ },
323
+ getAlign: () => 'left',
324
+ getConsumables() {
325
+ return { classes: DEFAULT_TABLE_ALIGNMENT_OPTIONS.left.className };
326
+ }
327
+ },
328
+ // Support for the right alignment using CSS classes.
329
+ {
330
+ view: {
331
+ name: /^(table|figure)$/,
332
+ key: 'class',
333
+ value: DEFAULT_TABLE_ALIGNMENT_OPTIONS.right.className
334
+ },
335
+ getAlign: () => 'right',
336
+ getConsumables() {
337
+ return { classes: DEFAULT_TABLE_ALIGNMENT_OPTIONS.right.className };
338
+ }
339
+ },
340
+ // Support for the center alignment using CSS classes.
341
+ {
342
+ view: {
343
+ name: /^(table|figure)$/,
344
+ key: 'class',
345
+ value: DEFAULT_TABLE_ALIGNMENT_OPTIONS.center.className
346
+ },
347
+ getAlign: () => 'center',
348
+ getConsumables() {
349
+ return { classes: DEFAULT_TABLE_ALIGNMENT_OPTIONS.center.className };
350
+ }
351
+ },
352
+ // Support for the block alignment left using CSS classes.
353
+ {
354
+ view: {
355
+ name: /^(table|figure)$/,
356
+ key: 'class',
357
+ value: DEFAULT_TABLE_ALIGNMENT_OPTIONS.blockLeft.className
358
+ },
359
+ getAlign: () => 'blockLeft',
360
+ getConsumables() {
361
+ return { classes: DEFAULT_TABLE_ALIGNMENT_OPTIONS.blockLeft.className };
362
+ }
363
+ },
364
+ // Support for the block alignment right using CSS classes.
365
+ {
366
+ view: {
367
+ name: /^(table|figure)$/,
368
+ key: 'class',
369
+ value: DEFAULT_TABLE_ALIGNMENT_OPTIONS.blockRight.className
370
+ },
371
+ getAlign: () => 'blockRight',
372
+ getConsumables() {
373
+ return { classes: DEFAULT_TABLE_ALIGNMENT_OPTIONS.blockRight.className };
374
+ }
375
+ },
376
+ // Support for the block alignment left using margin CSS styles.
377
+ {
378
+ view: {
379
+ name: /^(table|figure)$/,
380
+ styles: {
381
+ 'margin-left': '0',
382
+ 'margin-right': 'auto'
383
+ }
384
+ },
385
+ getAlign: () => 'blockLeft',
386
+ getConsumables() {
387
+ return { styles: ['margin-left', 'margin-right'] };
388
+ }
389
+ },
390
+ // Support for the block alignment right using margin CSS styles.
391
+ {
392
+ view: {
393
+ name: /^(table|figure)$/,
394
+ styles: {
395
+ 'margin-left': 'auto',
396
+ 'margin-right': '0'
397
+ }
398
+ },
399
+ getAlign: () => 'blockRight',
400
+ getConsumables() {
401
+ return { styles: ['margin-left', 'margin-right'] };
402
+ }
403
+ },
404
+ // Support for the `align` attribute as the backward compatibility while pasting from other sources.
405
+ {
406
+ view: {
407
+ name: 'table',
408
+ attributes: {
409
+ align: ALIGN_VALUES_REG_EXP
410
+ }
411
+ },
412
+ getAlign: (viewElement) => viewElement.getAttribute('align'),
413
+ getConsumables() {
414
+ return { attributes: 'align' };
415
+ }
416
+ }
417
+ ];
418
+ export const downcastTableAlignmentConfig = {
419
+ center: {
420
+ align: 'center',
421
+ style: 'margin-left: auto; margin-right: auto;',
422
+ className: 'table-style-align-center'
423
+ },
424
+ left: {
425
+ align: 'left',
426
+ style: 'float: left;',
427
+ className: 'table-style-align-left'
428
+ },
429
+ right: {
430
+ align: 'right',
431
+ style: 'float: right;',
432
+ className: 'table-style-align-right'
433
+ },
434
+ blockLeft: {
435
+ align: undefined,
436
+ style: 'margin-left: 0; margin-right: auto;',
437
+ className: DEFAULT_TABLE_ALIGNMENT_OPTIONS.blockLeft.className
438
+ },
439
+ blockRight: {
440
+ align: undefined,
441
+ style: 'margin-left: auto; margin-right: 0;',
442
+ className: DEFAULT_TABLE_ALIGNMENT_OPTIONS.blockRight.className
443
+ }
444
+ };
@@ -5,7 +5,7 @@
5
5
  /**
6
6
  * @module table/converters/upcasttable
7
7
  */
8
- import type { UpcastDispatcher } from '@ckeditor/ckeditor5-engine';
8
+ import type { UpcastDispatcher } from 'ckeditor5/src/engine.js';
9
9
  /**
10
10
  * Returns a function that converts the table view representation:
11
11
  *