jodit-pro 4.18.7 → 4.18.9

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 (388) hide show
  1. package/CHANGELOG.md +5 -0
  2. package/README.md +2 -0
  3. package/config.js +1 -0
  4. package/es2015/jodit.css +2 -2
  5. package/es2015/jodit.fat.min.css +1 -1
  6. package/es2015/jodit.fat.min.js +41 -26
  7. package/es2015/jodit.js +1117 -197
  8. package/es2015/jodit.min.css +1 -1
  9. package/es2015/jodit.min.js +11 -11
  10. package/es2015/plugins/ai-assistant-pro/ai-assistant-pro.css +1 -1
  11. package/es2015/plugins/ai-assistant-pro/ai-assistant-pro.js +1 -1
  12. package/es2015/plugins/ai-assistant-pro/ai-assistant-pro.min.js +1 -1
  13. package/es2015/plugins/autocomplete/autocomplete.css +1 -1
  14. package/es2015/plugins/autocomplete/autocomplete.js +1 -1
  15. package/es2015/plugins/autocomplete/autocomplete.min.js +1 -1
  16. package/es2015/plugins/backup/backup.css +1 -1
  17. package/es2015/plugins/backup/backup.js +1 -1
  18. package/es2015/plugins/backup/backup.min.js +1 -1
  19. package/es2015/plugins/button-generator/button-generator.css +1 -1
  20. package/es2015/plugins/button-generator/button-generator.js +1 -1
  21. package/es2015/plugins/button-generator/button-generator.min.js +1 -1
  22. package/es2015/plugins/change-case/change-case.js +1 -1
  23. package/es2015/plugins/change-case/change-case.min.js +1 -1
  24. package/es2015/plugins/chart/chart.css +3 -3
  25. package/es2015/plugins/chart/chart.js +1 -1
  26. package/es2015/plugins/chart/chart.min.css +1 -1
  27. package/es2015/plugins/chart/chart.min.js +1 -1
  28. package/es2015/plugins/color-picker/color-picker.css +1 -1
  29. package/es2015/plugins/color-picker/color-picker.js +1 -1
  30. package/es2015/plugins/color-picker/color-picker.min.js +1 -1
  31. package/es2015/plugins/emoji/emoji.css +1 -1
  32. package/es2015/plugins/emoji/emoji.js +1 -1
  33. package/es2015/plugins/emoji/emoji.min.js +1 -1
  34. package/es2015/plugins/export-docs/export-docs.js +1 -1
  35. package/es2015/plugins/export-docs/export-docs.min.js +1 -1
  36. package/es2015/plugins/finder/finder.css +1 -1
  37. package/es2015/plugins/finder/finder.js +1 -1
  38. package/es2015/plugins/finder/finder.min.js +1 -1
  39. package/es2015/plugins/google-maps/google-maps.css +1 -1
  40. package/es2015/plugins/google-maps/google-maps.js +1 -1
  41. package/es2015/plugins/google-maps/google-maps.min.js +1 -1
  42. package/es2015/plugins/google-search/google-search.js +1 -1
  43. package/es2015/plugins/google-search/google-search.min.js +1 -1
  44. package/es2015/plugins/highlight-signature/highlight-signature.js +1 -1
  45. package/es2015/plugins/highlight-signature/highlight-signature.min.js +1 -1
  46. package/es2015/plugins/iframe-editor/iframe-editor.css +1 -1
  47. package/es2015/plugins/iframe-editor/iframe-editor.js +1 -1
  48. package/es2015/plugins/iframe-editor/iframe-editor.min.js +1 -1
  49. package/es2015/plugins/image-editor-pro/image-editor-pro.css +1 -1
  50. package/es2015/plugins/image-editor-pro/image-editor-pro.js +1 -1
  51. package/es2015/plugins/image-editor-pro/image-editor-pro.min.js +1 -1
  52. package/es2015/plugins/keyboard/keyboard.css +1 -1
  53. package/es2015/plugins/keyboard/keyboard.js +1 -1
  54. package/es2015/plugins/keyboard/keyboard.min.js +1 -1
  55. package/es2015/plugins/math/math.css +196 -0
  56. package/es2015/plugins/math/math.js +1472 -0
  57. package/es2015/plugins/math/math.min.css +1 -0
  58. package/es2015/plugins/math/math.min.js +23 -0
  59. package/es2015/plugins/mobile-view/mobile-view.js +1 -1
  60. package/es2015/plugins/mobile-view/mobile-view.min.js +1 -1
  61. package/es2015/plugins/page-break/page-break.js +1 -1
  62. package/es2015/plugins/page-break/page-break.min.js +1 -1
  63. package/es2015/plugins/paste-code/paste-code.css +1 -1
  64. package/es2015/plugins/paste-code/paste-code.js +1 -1
  65. package/es2015/plugins/paste-code/paste-code.min.js +1 -1
  66. package/es2015/plugins/paste-from-word/paste-from-word.js +1 -1
  67. package/es2015/plugins/paste-from-word/paste-from-word.min.js +1 -1
  68. package/es2015/plugins/show-blocks/show-blocks.js +1 -1
  69. package/es2015/plugins/show-blocks/show-blocks.min.js +1 -1
  70. package/es2015/plugins/style/style.css +1 -1
  71. package/es2015/plugins/style/style.js +1 -1
  72. package/es2015/plugins/style/style.min.js +1 -1
  73. package/es2015/plugins/templates/templates.css +1 -1
  74. package/es2015/plugins/templates/templates.js +1 -1
  75. package/es2015/plugins/templates/templates.min.js +1 -1
  76. package/es2015/plugins/todo-list/todo-list.css +1 -1
  77. package/es2015/plugins/todo-list/todo-list.js +1 -1
  78. package/es2015/plugins/todo-list/todo-list.min.js +1 -1
  79. package/es2015/plugins/translate/translate.css +1 -1
  80. package/es2015/plugins/translate/translate.js +1 -1
  81. package/es2015/plugins/translate/translate.min.js +1 -1
  82. package/es2015/plugins/tune-block/tune-block.css +1 -1
  83. package/es2015/plugins/tune-block/tune-block.js +1 -1
  84. package/es2015/plugins/tune-block/tune-block.min.js +1 -1
  85. package/es2018/jodit.fat.min.css +1 -1
  86. package/es2018/jodit.fat.min.js +57 -42
  87. package/es2018/jodit.min.css +1 -1
  88. package/es2018/jodit.min.js +21 -21
  89. package/es2018/plugins/ai-assistant-pro/ai-assistant-pro.min.js +1 -1
  90. package/es2018/plugins/autocomplete/autocomplete.min.js +1 -1
  91. package/es2018/plugins/backup/backup.min.js +1 -1
  92. package/es2018/plugins/button-generator/button-generator.min.js +1 -1
  93. package/es2018/plugins/change-case/change-case.min.js +1 -1
  94. package/es2018/plugins/chart/chart.min.css +1 -1
  95. package/es2018/plugins/chart/chart.min.js +1 -1
  96. package/es2018/plugins/color-picker/color-picker.min.js +1 -1
  97. package/es2018/plugins/emoji/emoji.min.js +1 -1
  98. package/es2018/plugins/export-docs/export-docs.min.js +1 -1
  99. package/es2018/plugins/finder/finder.min.js +1 -1
  100. package/es2018/plugins/google-maps/google-maps.min.js +1 -1
  101. package/es2018/plugins/google-search/google-search.min.js +1 -1
  102. package/es2018/plugins/highlight-signature/highlight-signature.min.js +1 -1
  103. package/es2018/plugins/iframe-editor/iframe-editor.min.js +1 -1
  104. package/es2018/plugins/image-editor-pro/image-editor-pro.min.js +1 -1
  105. package/es2018/plugins/keyboard/keyboard.min.js +1 -1
  106. package/es2018/plugins/math/math.min.css +1 -0
  107. package/es2018/plugins/math/math.min.js +23 -0
  108. package/es2018/plugins/mobile-view/mobile-view.min.js +1 -1
  109. package/es2018/plugins/page-break/page-break.min.js +1 -1
  110. package/es2018/plugins/paste-code/paste-code.min.js +1 -1
  111. package/es2018/plugins/paste-from-word/paste-from-word.min.js +1 -1
  112. package/es2018/plugins/show-blocks/show-blocks.min.js +1 -1
  113. package/es2018/plugins/style/style.min.js +1 -1
  114. package/es2018/plugins/templates/templates.min.js +1 -1
  115. package/es2018/plugins/todo-list/todo-list.min.js +1 -1
  116. package/es2018/plugins/translate/translate.min.js +1 -1
  117. package/es2018/plugins/tune-block/tune-block.min.js +1 -1
  118. package/es2021/jodit.css +2 -2
  119. package/es2021/jodit.fat.min.css +1 -1
  120. package/es2021/jodit.fat.min.js +69 -54
  121. package/es2021/jodit.js +1092 -197
  122. package/es2021/jodit.min.css +1 -1
  123. package/es2021/jodit.min.js +14 -14
  124. package/es2021/plugins/ai-assistant-pro/ai-assistant-pro.css +1 -1
  125. package/es2021/plugins/ai-assistant-pro/ai-assistant-pro.js +1 -1
  126. package/es2021/plugins/ai-assistant-pro/ai-assistant-pro.min.js +1 -1
  127. package/es2021/plugins/autocomplete/autocomplete.css +1 -1
  128. package/es2021/plugins/autocomplete/autocomplete.js +1 -1
  129. package/es2021/plugins/autocomplete/autocomplete.min.js +1 -1
  130. package/es2021/plugins/backup/backup.css +1 -1
  131. package/es2021/plugins/backup/backup.js +1 -1
  132. package/es2021/plugins/backup/backup.min.js +1 -1
  133. package/es2021/plugins/button-generator/button-generator.css +1 -1
  134. package/es2021/plugins/button-generator/button-generator.js +1 -1
  135. package/es2021/plugins/button-generator/button-generator.min.js +1 -1
  136. package/es2021/plugins/change-case/change-case.js +1 -1
  137. package/es2021/plugins/change-case/change-case.min.js +1 -1
  138. package/es2021/plugins/chart/chart.css +3 -3
  139. package/es2021/plugins/chart/chart.js +1 -1
  140. package/es2021/plugins/chart/chart.min.css +1 -1
  141. package/es2021/plugins/chart/chart.min.js +1 -1
  142. package/es2021/plugins/color-picker/color-picker.css +1 -1
  143. package/es2021/plugins/color-picker/color-picker.js +1 -1
  144. package/es2021/plugins/color-picker/color-picker.min.js +1 -1
  145. package/es2021/plugins/emoji/emoji.css +1 -1
  146. package/es2021/plugins/emoji/emoji.js +1 -1
  147. package/es2021/plugins/emoji/emoji.min.js +1 -1
  148. package/es2021/plugins/export-docs/export-docs.js +1 -1
  149. package/es2021/plugins/export-docs/export-docs.min.js +1 -1
  150. package/es2021/plugins/finder/finder.css +1 -1
  151. package/es2021/plugins/finder/finder.js +1 -1
  152. package/es2021/plugins/finder/finder.min.js +1 -1
  153. package/es2021/plugins/google-maps/google-maps.css +1 -1
  154. package/es2021/plugins/google-maps/google-maps.js +1 -1
  155. package/es2021/plugins/google-maps/google-maps.min.js +1 -1
  156. package/es2021/plugins/google-search/google-search.js +1 -1
  157. package/es2021/plugins/google-search/google-search.min.js +1 -1
  158. package/es2021/plugins/highlight-signature/highlight-signature.js +1 -1
  159. package/es2021/plugins/highlight-signature/highlight-signature.min.js +1 -1
  160. package/es2021/plugins/iframe-editor/iframe-editor.css +1 -1
  161. package/es2021/plugins/iframe-editor/iframe-editor.js +1 -1
  162. package/es2021/plugins/iframe-editor/iframe-editor.min.js +1 -1
  163. package/es2021/plugins/image-editor-pro/image-editor-pro.css +1 -1
  164. package/es2021/plugins/image-editor-pro/image-editor-pro.js +1 -1
  165. package/es2021/plugins/image-editor-pro/image-editor-pro.min.js +1 -1
  166. package/es2021/plugins/keyboard/keyboard.css +1 -1
  167. package/es2021/plugins/keyboard/keyboard.js +1 -1
  168. package/es2021/plugins/keyboard/keyboard.min.js +1 -1
  169. package/es2021/plugins/math/math.css +196 -0
  170. package/es2021/plugins/math/math.js +1414 -0
  171. package/es2021/plugins/math/math.min.css +1 -0
  172. package/es2021/plugins/math/math.min.js +23 -0
  173. package/es2021/plugins/mobile-view/mobile-view.js +1 -1
  174. package/es2021/plugins/mobile-view/mobile-view.min.js +1 -1
  175. package/es2021/plugins/page-break/page-break.js +1 -1
  176. package/es2021/plugins/page-break/page-break.min.js +1 -1
  177. package/es2021/plugins/paste-code/paste-code.css +1 -1
  178. package/es2021/plugins/paste-code/paste-code.js +1 -1
  179. package/es2021/plugins/paste-code/paste-code.min.js +1 -1
  180. package/es2021/plugins/paste-from-word/paste-from-word.js +1 -1
  181. package/es2021/plugins/paste-from-word/paste-from-word.min.js +1 -1
  182. package/es2021/plugins/show-blocks/show-blocks.js +1 -1
  183. package/es2021/plugins/show-blocks/show-blocks.min.js +1 -1
  184. package/es2021/plugins/style/style.css +1 -1
  185. package/es2021/plugins/style/style.js +1 -1
  186. package/es2021/plugins/style/style.min.js +1 -1
  187. package/es2021/plugins/templates/templates.css +1 -1
  188. package/es2021/plugins/templates/templates.js +1 -1
  189. package/es2021/plugins/templates/templates.min.js +1 -1
  190. package/es2021/plugins/todo-list/todo-list.css +1 -1
  191. package/es2021/plugins/todo-list/todo-list.js +1 -1
  192. package/es2021/plugins/todo-list/todo-list.min.js +1 -1
  193. package/es2021/plugins/translate/translate.css +1 -1
  194. package/es2021/plugins/translate/translate.js +1 -1
  195. package/es2021/plugins/translate/translate.min.js +1 -1
  196. package/es2021/plugins/tune-block/tune-block.css +1 -1
  197. package/es2021/plugins/tune-block/tune-block.js +1 -1
  198. package/es2021/plugins/tune-block/tune-block.min.js +1 -1
  199. package/es2021.en/jodit.css +2 -2
  200. package/es2021.en/jodit.fat.min.css +1 -1
  201. package/es2021.en/jodit.fat.min.js +69 -54
  202. package/es2021.en/jodit.js +1092 -197
  203. package/es2021.en/jodit.min.css +1 -1
  204. package/es2021.en/jodit.min.js +30 -30
  205. package/es2021.en/plugins/ai-assistant-pro/ai-assistant-pro.css +1 -1
  206. package/es2021.en/plugins/ai-assistant-pro/ai-assistant-pro.js +1 -1
  207. package/es2021.en/plugins/ai-assistant-pro/ai-assistant-pro.min.js +1 -1
  208. package/es2021.en/plugins/autocomplete/autocomplete.css +1 -1
  209. package/es2021.en/plugins/autocomplete/autocomplete.js +1 -1
  210. package/es2021.en/plugins/autocomplete/autocomplete.min.js +1 -1
  211. package/es2021.en/plugins/backup/backup.css +1 -1
  212. package/es2021.en/plugins/backup/backup.js +1 -1
  213. package/es2021.en/plugins/backup/backup.min.js +1 -1
  214. package/es2021.en/plugins/button-generator/button-generator.css +1 -1
  215. package/es2021.en/plugins/button-generator/button-generator.js +1 -1
  216. package/es2021.en/plugins/button-generator/button-generator.min.js +1 -1
  217. package/es2021.en/plugins/change-case/change-case.js +1 -1
  218. package/es2021.en/plugins/change-case/change-case.min.js +1 -1
  219. package/es2021.en/plugins/chart/chart.css +3 -3
  220. package/es2021.en/plugins/chart/chart.js +1 -1
  221. package/es2021.en/plugins/chart/chart.min.css +1 -1
  222. package/es2021.en/plugins/chart/chart.min.js +1 -1
  223. package/es2021.en/plugins/color-picker/color-picker.css +1 -1
  224. package/es2021.en/plugins/color-picker/color-picker.js +1 -1
  225. package/es2021.en/plugins/color-picker/color-picker.min.js +1 -1
  226. package/es2021.en/plugins/emoji/emoji.css +1 -1
  227. package/es2021.en/plugins/emoji/emoji.js +1 -1
  228. package/es2021.en/plugins/emoji/emoji.min.js +1 -1
  229. package/es2021.en/plugins/export-docs/export-docs.js +1 -1
  230. package/es2021.en/plugins/export-docs/export-docs.min.js +1 -1
  231. package/es2021.en/plugins/finder/finder.css +1 -1
  232. package/es2021.en/plugins/finder/finder.js +1 -1
  233. package/es2021.en/plugins/finder/finder.min.js +1 -1
  234. package/es2021.en/plugins/google-maps/google-maps.css +1 -1
  235. package/es2021.en/plugins/google-maps/google-maps.js +1 -1
  236. package/es2021.en/plugins/google-maps/google-maps.min.js +1 -1
  237. package/es2021.en/plugins/google-search/google-search.js +1 -1
  238. package/es2021.en/plugins/google-search/google-search.min.js +1 -1
  239. package/es2021.en/plugins/highlight-signature/highlight-signature.js +1 -1
  240. package/es2021.en/plugins/highlight-signature/highlight-signature.min.js +1 -1
  241. package/es2021.en/plugins/iframe-editor/iframe-editor.css +1 -1
  242. package/es2021.en/plugins/iframe-editor/iframe-editor.js +1 -1
  243. package/es2021.en/plugins/iframe-editor/iframe-editor.min.js +1 -1
  244. package/es2021.en/plugins/image-editor-pro/image-editor-pro.css +1 -1
  245. package/es2021.en/plugins/image-editor-pro/image-editor-pro.js +1 -1
  246. package/es2021.en/plugins/image-editor-pro/image-editor-pro.min.js +1 -1
  247. package/es2021.en/plugins/keyboard/keyboard.css +1 -1
  248. package/es2021.en/plugins/keyboard/keyboard.js +1 -1
  249. package/es2021.en/plugins/keyboard/keyboard.min.js +1 -1
  250. package/es2021.en/plugins/math/math.css +196 -0
  251. package/es2021.en/plugins/math/math.js +1414 -0
  252. package/es2021.en/plugins/math/math.min.css +1 -0
  253. package/es2021.en/plugins/math/math.min.js +23 -0
  254. package/es2021.en/plugins/mobile-view/mobile-view.js +1 -1
  255. package/es2021.en/plugins/mobile-view/mobile-view.min.js +1 -1
  256. package/es2021.en/plugins/page-break/page-break.js +1 -1
  257. package/es2021.en/plugins/page-break/page-break.min.js +1 -1
  258. package/es2021.en/plugins/paste-code/paste-code.css +1 -1
  259. package/es2021.en/plugins/paste-code/paste-code.js +1 -1
  260. package/es2021.en/plugins/paste-code/paste-code.min.js +1 -1
  261. package/es2021.en/plugins/paste-from-word/paste-from-word.js +1 -1
  262. package/es2021.en/plugins/paste-from-word/paste-from-word.min.js +1 -1
  263. package/es2021.en/plugins/show-blocks/show-blocks.js +1 -1
  264. package/es2021.en/plugins/show-blocks/show-blocks.min.js +1 -1
  265. package/es2021.en/plugins/style/style.css +1 -1
  266. package/es2021.en/plugins/style/style.js +1 -1
  267. package/es2021.en/plugins/style/style.min.js +1 -1
  268. package/es2021.en/plugins/templates/templates.css +1 -1
  269. package/es2021.en/plugins/templates/templates.js +1 -1
  270. package/es2021.en/plugins/templates/templates.min.js +1 -1
  271. package/es2021.en/plugins/todo-list/todo-list.css +1 -1
  272. package/es2021.en/plugins/todo-list/todo-list.js +1 -1
  273. package/es2021.en/plugins/todo-list/todo-list.min.js +1 -1
  274. package/es2021.en/plugins/translate/translate.css +1 -1
  275. package/es2021.en/plugins/translate/translate.js +1 -1
  276. package/es2021.en/plugins/translate/translate.min.js +1 -1
  277. package/es2021.en/plugins/tune-block/tune-block.css +1 -1
  278. package/es2021.en/plugins/tune-block/tune-block.js +1 -1
  279. package/es2021.en/plugins/tune-block/tune-block.min.js +1 -1
  280. package/es5/jodit.css +3 -3
  281. package/es5/jodit.fat.min.css +1 -1
  282. package/es5/jodit.fat.min.js +2 -2
  283. package/es5/jodit.js +1254 -207
  284. package/es5/jodit.min.css +3 -3
  285. package/es5/jodit.min.js +2 -2
  286. package/es5/plugins/ai-assistant-pro/ai-assistant-pro.css +1 -1
  287. package/es5/plugins/ai-assistant-pro/ai-assistant-pro.js +1 -1
  288. package/es5/plugins/ai-assistant-pro/ai-assistant-pro.min.js +1 -1
  289. package/es5/plugins/autocomplete/autocomplete.css +1 -1
  290. package/es5/plugins/autocomplete/autocomplete.js +1 -1
  291. package/es5/plugins/autocomplete/autocomplete.min.js +1 -1
  292. package/es5/plugins/backup/backup.css +1 -1
  293. package/es5/plugins/backup/backup.js +1 -1
  294. package/es5/plugins/backup/backup.min.js +1 -1
  295. package/es5/plugins/button-generator/button-generator.css +1 -1
  296. package/es5/plugins/button-generator/button-generator.js +1 -1
  297. package/es5/plugins/button-generator/button-generator.min.js +1 -1
  298. package/es5/plugins/change-case/change-case.js +1 -1
  299. package/es5/plugins/change-case/change-case.min.js +1 -1
  300. package/es5/plugins/chart/chart.css +3 -3
  301. package/es5/plugins/chart/chart.js +1 -1
  302. package/es5/plugins/chart/chart.min.css +1 -1
  303. package/es5/plugins/chart/chart.min.js +1 -1
  304. package/es5/plugins/color-picker/color-picker.css +1 -1
  305. package/es5/plugins/color-picker/color-picker.js +1 -1
  306. package/es5/plugins/color-picker/color-picker.min.js +1 -1
  307. package/es5/plugins/emoji/emoji.css +1 -1
  308. package/es5/plugins/emoji/emoji.js +1 -1
  309. package/es5/plugins/emoji/emoji.min.js +1 -1
  310. package/es5/plugins/export-docs/export-docs.js +1 -1
  311. package/es5/plugins/export-docs/export-docs.min.js +1 -1
  312. package/es5/plugins/finder/finder.css +1 -1
  313. package/es5/plugins/finder/finder.js +1 -1
  314. package/es5/plugins/finder/finder.min.js +1 -1
  315. package/es5/plugins/google-maps/google-maps.css +1 -1
  316. package/es5/plugins/google-maps/google-maps.js +1 -1
  317. package/es5/plugins/google-maps/google-maps.min.js +1 -1
  318. package/es5/plugins/google-search/google-search.js +1 -1
  319. package/es5/plugins/google-search/google-search.min.js +1 -1
  320. package/es5/plugins/highlight-signature/highlight-signature.js +1 -1
  321. package/es5/plugins/highlight-signature/highlight-signature.min.js +1 -1
  322. package/es5/plugins/iframe-editor/iframe-editor.css +1 -1
  323. package/es5/plugins/iframe-editor/iframe-editor.js +1 -1
  324. package/es5/plugins/iframe-editor/iframe-editor.min.js +1 -1
  325. package/es5/plugins/image-editor-pro/image-editor-pro.css +1 -1
  326. package/es5/plugins/image-editor-pro/image-editor-pro.js +1 -1
  327. package/es5/plugins/image-editor-pro/image-editor-pro.min.js +1 -1
  328. package/es5/plugins/keyboard/keyboard.css +1 -1
  329. package/es5/plugins/keyboard/keyboard.js +1 -1
  330. package/es5/plugins/keyboard/keyboard.min.js +1 -1
  331. package/es5/plugins/math/math.css +196 -0
  332. package/es5/plugins/math/math.js +1624 -0
  333. package/es5/plugins/math/math.min.css +1 -0
  334. package/es5/plugins/math/math.min.js +8 -0
  335. package/es5/plugins/mobile-view/mobile-view.js +1 -1
  336. package/es5/plugins/mobile-view/mobile-view.min.js +1 -1
  337. package/es5/plugins/page-break/page-break.js +1 -1
  338. package/es5/plugins/page-break/page-break.min.js +1 -1
  339. package/es5/plugins/paste-code/paste-code.css +1 -1
  340. package/es5/plugins/paste-code/paste-code.js +1 -1
  341. package/es5/plugins/paste-code/paste-code.min.js +1 -1
  342. package/es5/plugins/paste-from-word/paste-from-word.js +1 -1
  343. package/es5/plugins/paste-from-word/paste-from-word.min.js +1 -1
  344. package/es5/plugins/show-blocks/show-blocks.js +1 -1
  345. package/es5/plugins/show-blocks/show-blocks.min.js +1 -1
  346. package/es5/plugins/style/style.css +1 -1
  347. package/es5/plugins/style/style.js +1 -1
  348. package/es5/plugins/style/style.min.js +1 -1
  349. package/es5/plugins/templates/templates.css +1 -1
  350. package/es5/plugins/templates/templates.js +1 -1
  351. package/es5/plugins/templates/templates.min.js +1 -1
  352. package/es5/plugins/todo-list/todo-list.css +1 -1
  353. package/es5/plugins/todo-list/todo-list.js +1 -1
  354. package/es5/plugins/todo-list/todo-list.min.js +1 -1
  355. package/es5/plugins/translate/translate.css +1 -1
  356. package/es5/plugins/translate/translate.js +1 -1
  357. package/es5/plugins/translate/translate.min.js +1 -1
  358. package/es5/plugins/tune-block/tune-block.css +1 -1
  359. package/es5/plugins/tune-block/tune-block.js +1 -1
  360. package/es5/plugins/tune-block/tune-block.min.js +1 -1
  361. package/es5/polyfills.fat.min.js +1 -1
  362. package/es5/polyfills.js +1 -1
  363. package/es5/polyfills.min.js +1 -1
  364. package/esm/config.d.ts +30 -0
  365. package/esm/plugins/all.js +1 -1
  366. package/esm/plugins/math/assets/math-block.svg.js +1 -0
  367. package/esm/plugins/math/assets/math-inline.svg.js +1 -0
  368. package/esm/plugins/math/assets/math.svg.js +1 -0
  369. package/esm/plugins/math/config.d.ts +34 -0
  370. package/esm/plugins/math/config.js +1 -0
  371. package/esm/plugins/math/helpers.d.ts +33 -0
  372. package/esm/plugins/math/helpers.js +1 -0
  373. package/esm/plugins/math/interface.d.ts +45 -0
  374. package/esm/plugins/math/interface.js +0 -0
  375. package/esm/plugins/math/math.d.ts +66 -0
  376. package/esm/plugins/math/math.js +1 -0
  377. package/esm/plugins/math/mathjax.d.ts +17 -0
  378. package/esm/plugins/math/mathjax.js +1 -0
  379. package/esm/plugins/math/ui/editor/editor.d.ts +56 -0
  380. package/esm/plugins/math/ui/editor/editor.js +16 -0
  381. package/package.json +1 -1
  382. package/types/config.d.ts +30 -0
  383. package/types/plugins/math/config.d.ts +34 -0
  384. package/types/plugins/math/helpers.d.ts +33 -0
  385. package/types/plugins/math/interface.d.ts +45 -0
  386. package/types/plugins/math/math.d.ts +66 -0
  387. package/types/plugins/math/mathjax.d.ts +17 -0
  388. package/types/plugins/math/ui/editor/editor.d.ts +56 -0
package/es2015/jodit.js CHANGED
@@ -1,7 +1,7 @@
1
1
  /*!
2
2
  * jodit-pro - PRO Version of Jodit Editor
3
3
  * Author: Chupurnov Valerii <chupurnov@gmail.com>
4
- * Version: v4.18.7
4
+ * Version: v4.18.9
5
5
  * Url: https://xdsoft.net/jodit/pro/
6
6
  * License(s): SEE LICENSE IN LICENSE.md
7
7
  */
@@ -1814,7 +1814,7 @@ __webpack_require__.r(__webpack_exports__);
1814
1814
  * ```
1815
1815
  * @packageDocumentation
1816
1816
  * @module constants
1817
- */ const APP_VERSION = "4.18.7";
1817
+ */ const APP_VERSION = "4.18.9";
1818
1818
  // prettier-ignore
1819
1819
  const ES = "es2015";
1820
1820
  const IS_ES_MODERN = true;
@@ -5734,10 +5734,11 @@ const isLicense = (license)=>(0,_is_string_js__WEBPACK_IMPORTED_MODULE_0__.isStr
5734
5734
  /* harmony export */ });
5735
5735
  /* harmony import */ var _constants_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(82758);
5736
5736
  /* harmony import */ var _dom_dom_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(2748);
5737
- /* harmony import */ var _string_trim_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(49055);
5738
- /* harmony import */ var _utils_attr_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(29960);
5739
- /* harmony import */ var _utils_css_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(41180);
5740
- /* harmony import */ var _utils_selector_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(76078);
5737
+ /* harmony import */ var _word_lists_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(90723);
5738
+ /* harmony import */ var _string_trim_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(49055);
5739
+ /* harmony import */ var _utils_attr_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(29960);
5740
+ /* harmony import */ var _utils_css_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(41180);
5741
+ /* harmony import */ var _utils_selector_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(76078);
5741
5742
  /*!
5742
5743
  * Jodit Editor (https://xdsoft.net/jodit/)
5743
5744
  * Released under MIT see LICENSE.txt in the project root for license information.
@@ -5750,6 +5751,7 @@ const isLicense = (license)=>(0,_is_string_js__WEBPACK_IMPORTED_MODULE_0__.isStr
5750
5751
 
5751
5752
 
5752
5753
 
5754
+
5753
5755
  function normalizeCSS(s) {
5754
5756
  return s.replace(/mso-[a-z-]+:[\s]*[^;]+;/gi, '').replace(/mso-[a-z-]+:[\s]*[^";']+$/gi, '').replace(/border[a-z-]*:[\s]*[^;]+;/gi, '').replace(/([0-9.]+)(pt|cm)/gi, (match, units, metrics)=>{
5755
5757
  switch(metrics.toLowerCase()){
@@ -5783,7 +5785,7 @@ function normalizeCSS(s) {
5783
5785
  html = html.substring(0, closeIndex + '</html>'.length);
5784
5786
  }
5785
5787
  const iframe = _constants_js__WEBPACK_IMPORTED_MODULE_0__.globalDocument.createElement('iframe');
5786
- (0,_utils_css_js__WEBPACK_IMPORTED_MODULE_4__.css)(iframe, 'display', 'none');
5788
+ (0,_utils_css_js__WEBPACK_IMPORTED_MODULE_5__.css)(iframe, 'display', 'none');
5787
5789
  _dom_dom_js__WEBPACK_IMPORTED_MODULE_1__.Dom.append(_constants_js__WEBPACK_IMPORTED_MODULE_0__.globalDocument.body, iframe);
5788
5790
  let convertedString = '', collection;
5789
5791
  try {
@@ -5792,13 +5794,14 @@ function normalizeCSS(s) {
5792
5794
  iframeDoc.open();
5793
5795
  iframeDoc.write(html);
5794
5796
  iframeDoc.close();
5797
+ const listItems = (0,_word_lists_js__WEBPACK_IMPORTED_MODULE_2__.readWordListItems)(iframeDoc.body);
5795
5798
  // Word marks its auto-generated list markers (the literal
5796
5799
  // bullet/number, e.g. `1.` or `·`) with `mso-list:Ignore`.
5797
5800
  // They are display-only and must not be imported, otherwise
5798
5801
  // the marker text leaks into the content. Drop them before any
5799
5802
  // style normalization strips the `mso-list` hint. See #948
5800
5803
  _dom_dom_js__WEBPACK_IMPORTED_MODULE_1__.Dom.each(iframeDoc.body, (node)=>{
5801
- if (_dom_dom_js__WEBPACK_IMPORTED_MODULE_1__.Dom.isElement(node) && /mso-list:\s*ignore/i.test((0,_utils_attr_js__WEBPACK_IMPORTED_MODULE_3__.attr)(node, 'style') || '')) {
5804
+ if (_dom_dom_js__WEBPACK_IMPORTED_MODULE_1__.Dom.isElement(node) && /mso-list:\s*ignore/i.test((0,_utils_attr_js__WEBPACK_IMPORTED_MODULE_4__.attr)(node, 'style') || '')) {
5802
5805
  _dom_dom_js__WEBPACK_IMPORTED_MODULE_1__.Dom.safeRemove(node);
5803
5806
  }
5804
5807
  });
@@ -5809,7 +5812,7 @@ function normalizeCSS(s) {
5809
5812
  if (rules[idx].selectorText === '') {
5810
5813
  continue;
5811
5814
  }
5812
- collection = (0,_utils_selector_js__WEBPACK_IMPORTED_MODULE_5__.$$)(rules[idx].selectorText, iframeDoc.body);
5815
+ collection = (0,_utils_selector_js__WEBPACK_IMPORTED_MODULE_6__.$$)(rules[idx].selectorText, iframeDoc.body);
5813
5816
  // `style.cssText` on purpose: the CSSOM parses the text,
5814
5817
  // drops invalid declarations and re-serializes it. The raw
5815
5818
  // `style` attribute would keep Word-only junk verbatim
@@ -5823,18 +5826,19 @@ function normalizeCSS(s) {
5823
5826
  throw e;
5824
5827
  }
5825
5828
  }
5829
+ ;(0,_word_lists_js__WEBPACK_IMPORTED_MODULE_2__.wrapWordListItems)(listItems);
5826
5830
  _dom_dom_js__WEBPACK_IMPORTED_MODULE_1__.Dom.each(iframeDoc.body, (node)=>{
5827
5831
  if (_dom_dom_js__WEBPACK_IMPORTED_MODULE_1__.Dom.isElement(node)) {
5828
- const cssText = (0,_utils_attr_js__WEBPACK_IMPORTED_MODULE_3__.attr)(node, 'style');
5832
+ const cssText = (0,_utils_attr_js__WEBPACK_IMPORTED_MODULE_4__.attr)(node, 'style');
5829
5833
  if (cssText) {
5830
5834
  node.style.cssText = normalizeCSS(cssText);
5831
5835
  }
5832
- if (!(0,_utils_attr_js__WEBPACK_IMPORTED_MODULE_3__.attr)(node, 'style')) {
5833
- (0,_utils_attr_js__WEBPACK_IMPORTED_MODULE_3__.attr)(node, 'style', null);
5836
+ if (!(0,_utils_attr_js__WEBPACK_IMPORTED_MODULE_4__.attr)(node, 'style')) {
5837
+ (0,_utils_attr_js__WEBPACK_IMPORTED_MODULE_4__.attr)(node, 'style', null);
5834
5838
  }
5835
5839
  }
5836
5840
  });
5837
- convertedString = iframeDoc.firstChild ? (0,_string_trim_js__WEBPACK_IMPORTED_MODULE_2__.trim)(iframeDoc.body.innerHTML) : '';
5841
+ convertedString = iframeDoc.firstChild ? (0,_string_trim_js__WEBPACK_IMPORTED_MODULE_3__.trim)(iframeDoc.body.innerHTML) : '';
5838
5842
  }
5839
5843
  } catch (_a) {} finally{
5840
5844
  _dom_dom_js__WEBPACK_IMPORTED_MODULE_1__.Dom.safeRemove(iframe);
@@ -5842,7 +5846,7 @@ function normalizeCSS(s) {
5842
5846
  if (convertedString) {
5843
5847
  html = convertedString;
5844
5848
  }
5845
- return (0,_string_trim_js__WEBPACK_IMPORTED_MODULE_2__.trim)(html.replace(/<(\/)?(html|colgroup|col|o:p)[^>]*>/g, '').replace(/<!--[^>]*>/g, ''));
5849
+ return (0,_string_trim_js__WEBPACK_IMPORTED_MODULE_3__.trim)(html.replace(/<(\/)?(html|colgroup|col|o:p)[^>]*>/g, '').replace(/<!--[^>]*>/g, ''));
5846
5850
  }
5847
5851
 
5848
5852
 
@@ -5857,8 +5861,9 @@ function normalizeCSS(s) {
5857
5861
  /* harmony import */ var _constants_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(82758);
5858
5862
  /* harmony import */ var _dom_dom_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(2748);
5859
5863
  /* harmony import */ var _array_to_array_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(4510);
5860
- /* harmony import */ var _string_trim_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(49055);
5861
- /* harmony import */ var _utils_attr_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(29960);
5864
+ /* harmony import */ var _word_lists_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(90723);
5865
+ /* harmony import */ var _string_trim_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(49055);
5866
+ /* harmony import */ var _utils_attr_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(29960);
5862
5867
  /*!
5863
5868
  * Jodit Editor (https://xdsoft.net/jodit/)
5864
5869
  * Released under MIT see LICENSE.txt in the project root for license information.
@@ -5870,6 +5875,7 @@ function normalizeCSS(s) {
5870
5875
 
5871
5876
 
5872
5877
 
5878
+
5873
5879
  /**
5874
5880
  * The method automatically cleans up content from Microsoft Word and other HTML sources to ensure clean, compliant
5875
5881
  * content that matches the look and feel of the site.
@@ -5883,6 +5889,7 @@ function normalizeCSS(s) {
5883
5889
  const div = _constants_js__WEBPACK_IMPORTED_MODULE_0__.globalDocument.createElement('div');
5884
5890
  div.innerHTML = html;
5885
5891
  const marks = [];
5892
+ const listItems = (0,_word_lists_js__WEBPACK_IMPORTED_MODULE_3__.readWordListItems)(div);
5886
5893
  if (div.firstChild) {
5887
5894
  _dom_dom_js__WEBPACK_IMPORTED_MODULE_1__.Dom.each(div, (node)=>{
5888
5895
  if (!node) {
@@ -5907,7 +5914,7 @@ function normalizeCSS(s) {
5907
5914
  // with `mso-list:Ignore`. They are display-only
5908
5915
  // and must not be imported, otherwise the marker
5909
5916
  // text leaks into the content. See #948
5910
- if (/mso-list:\s*ignore/i.test((0,_utils_attr_js__WEBPACK_IMPORTED_MODULE_4__.attr)(node, 'style') || '')) {
5917
+ if (/mso-list:\s*ignore/i.test((0,_utils_attr_js__WEBPACK_IMPORTED_MODULE_5__.attr)(node, 'style') || '')) {
5911
5918
  marks.push(node);
5912
5919
  break;
5913
5920
  }
@@ -5921,7 +5928,7 @@ function normalizeCSS(s) {
5921
5928
  // `attrRaw`: SVG keeps camelCase names
5922
5929
  // (`viewBox`), `attr()` would kebab-case
5923
5930
  // them and silently skip the removal
5924
- (0,_utils_attr_js__WEBPACK_IMPORTED_MODULE_4__.attrRaw)(node, attribute.name, null);
5931
+ (0,_utils_attr_js__WEBPACK_IMPORTED_MODULE_5__.attrRaw)(node, attribute.name, null);
5925
5932
  }
5926
5933
  });
5927
5934
  }
@@ -5934,12 +5941,13 @@ function normalizeCSS(s) {
5934
5941
  });
5935
5942
  }
5936
5943
  _dom_dom_js__WEBPACK_IMPORTED_MODULE_1__.Dom.safeRemove.apply(null, marks);
5944
+ (0,_word_lists_js__WEBPACK_IMPORTED_MODULE_3__.wrapWordListItems)(listItems);
5937
5945
  convertedString = div.innerHTML;
5938
5946
  } catch (e) {}
5939
5947
  if (convertedString) {
5940
5948
  html = convertedString;
5941
5949
  }
5942
- html = html.split(/(\n)/).filter(_string_trim_js__WEBPACK_IMPORTED_MODULE_3__.trim).join('\n');
5950
+ html = html.split(/(\n)/).filter(_string_trim_js__WEBPACK_IMPORTED_MODULE_4__.trim).join('\n');
5943
5951
  return html.replace(/<(\/)?(html|colgroup|col|o:p)[^>]*>/g, '').replace(/<!--[^>]*>/g, '');
5944
5952
  }
5945
5953
 
@@ -6274,7 +6282,14 @@ const NEW_LINE_TAGS = new Set([
6274
6282
  'h4',
6275
6283
  'h5',
6276
6284
  'h6',
6277
- 'hr'
6285
+ 'hr',
6286
+ 'ul',
6287
+ 'ol',
6288
+ 'li'
6289
+ ]);
6290
+ const LIST_TAGS = new Set([
6291
+ 'ul',
6292
+ 'ol'
6278
6293
  ]);
6279
6294
  const INVISIBLE_TAGS = new Set([
6280
6295
  'script',
@@ -6300,6 +6315,16 @@ const ALONE_TAGS = new Set([
6300
6315
  _dom_dom_js__WEBPACK_IMPORTED_MODULE_0__.Dom.each(tmp, (node)=>{
6301
6316
  _dom_dom_js__WEBPACK_IMPORTED_MODULE_0__.Dom.isElement(node) && all.push(node);
6302
6317
  });
6318
+ // By default blocks are joined with a single space (single-line
6319
+ // plain text). When `blockBr` is set, separate them with a line
6320
+ // break instead, so paragraph structure survives — e.g. the
6321
+ // "Insert only Text" paste option. See #1232
6322
+ const separators = new Set();
6323
+ const separator = ()=>{
6324
+ const text = doc.createTextNode(blockBr ? '%%%jodit-single-br%%%' : ' ');
6325
+ separators.add(text);
6326
+ return text;
6327
+ };
6303
6328
  all.forEach((p)=>{
6304
6329
  const pr = p.parentNode;
6305
6330
  if (!pr) {
@@ -6319,16 +6344,17 @@ const ALONE_TAGS = new Set([
6319
6344
  if (!_dom_dom_js__WEBPACK_IMPORTED_MODULE_0__.Dom.isTag(p, NEW_LINE_TAGS)) {
6320
6345
  return;
6321
6346
  }
6347
+ const pv = p.previousSibling;
6348
+ // A nested list starts on a new line after its item's own text
6349
+ if (_dom_dom_js__WEBPACK_IMPORTED_MODULE_0__.Dom.isTag(p, LIST_TAGS) && pv && !separators.has(pv) && !(_dom_dom_js__WEBPACK_IMPORTED_MODULE_0__.Dom.isText(pv) && /\s$/.test(pv.nodeValue || ''))) {
6350
+ _dom_dom_js__WEBPACK_IMPORTED_MODULE_0__.Dom.before(p, separator());
6351
+ }
6322
6352
  const nx = p.nextSibling;
6323
6353
  if (_dom_dom_js__WEBPACK_IMPORTED_MODULE_0__.Dom.isText(nx) && /^\s/.test(nx.nodeValue || '')) {
6324
6354
  return;
6325
6355
  }
6326
6356
  if (nx) {
6327
- // By default blocks are joined with a single space (single-line
6328
- // plain text). When `blockBr` is set, separate them with a line
6329
- // break instead, so paragraph structure survives — e.g. the
6330
- // "Insert only Text" paste option. See #1232
6331
- _dom_dom_js__WEBPACK_IMPORTED_MODULE_0__.Dom.before(nx, doc.createTextNode(blockBr ? '%%%jodit-single-br%%%' : ' '));
6357
+ _dom_dom_js__WEBPACK_IMPORTED_MODULE_0__.Dom.before(nx, separator());
6332
6358
  }
6333
6359
  });
6334
6360
  return restoreTags((0,_string_trim_js__WEBPACK_IMPORTED_MODULE_2__.trim)(tmp.innerText));
@@ -6338,6 +6364,205 @@ function restoreTags(content) {
6338
6364
  }
6339
6365
 
6340
6366
 
6367
+ /***/ }),
6368
+
6369
+ /***/ 90723:
6370
+ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
6371
+
6372
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
6373
+ /* harmony export */ readWordListItems: function() { return /* binding */ readWordListItems; },
6374
+ /* harmony export */ wrapWordListItems: function() { return /* binding */ wrapWordListItems; }
6375
+ /* harmony export */ });
6376
+ /* harmony import */ var _dom_dom_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(2748);
6377
+ /* harmony import */ var _array_to_array_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(4510);
6378
+ /* harmony import */ var _utils_attr_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(29960);
6379
+ function _define_property(obj, key, value) {
6380
+ if (key in obj) {
6381
+ Object.defineProperty(obj, key, {
6382
+ value: value,
6383
+ enumerable: true,
6384
+ configurable: true,
6385
+ writable: true
6386
+ });
6387
+ } else obj[key] = value;
6388
+ return obj;
6389
+ }
6390
+ function _object_spread(target) {
6391
+ for(var i = 1; i < arguments.length; i++){
6392
+ var source = arguments[i] != null ? arguments[i] : {};
6393
+ var ownKeys = Object.keys(source);
6394
+ if (typeof Object.getOwnPropertySymbols === "function") {
6395
+ ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function(sym) {
6396
+ return Object.getOwnPropertyDescriptor(source, sym).enumerable;
6397
+ }));
6398
+ }
6399
+ ownKeys.forEach(function(key) {
6400
+ _define_property(target, key, source[key]);
6401
+ });
6402
+ }
6403
+ return target;
6404
+ }
6405
+ /*!
6406
+ * Jodit Editor (https://xdsoft.net/jodit/)
6407
+ * Released under MIT see LICENSE.txt in the project root for license information.
6408
+ * Copyright (c) 2013-2026 Valerii Chupurnov. All rights reserved. https://xdsoft.net
6409
+ */ /**
6410
+ * @module helpers/html
6411
+ */ ;
6412
+
6413
+
6414
+ const ROMAN = {
6415
+ i: 1,
6416
+ v: 5,
6417
+ x: 10,
6418
+ l: 50,
6419
+ c: 100,
6420
+ d: 500,
6421
+ m: 1000
6422
+ };
6423
+ function romanValue(roman) {
6424
+ let value = 0;
6425
+ for(let i = 0; i < roman.length; i += 1){
6426
+ const current = ROMAN[roman[i]], next = ROMAN[roman[i + 1]] || 0;
6427
+ value += current < next ? -current : current;
6428
+ }
6429
+ return value;
6430
+ }
6431
+ /**
6432
+ * Word's marker text (`1.`, `b)`, `iv.`, `·`, `o`, `§`) decides the list type
6433
+ */ function parseMarker(marker) {
6434
+ const text = marker.replace(/\s+/g, '');
6435
+ const decimal = /^\(?(?:\d+\.)*(\d+)[.)]?$/.exec(text);
6436
+ if (decimal) {
6437
+ return {
6438
+ tag: 'ol',
6439
+ listStyleType: null,
6440
+ start: Number(decimal[1])
6441
+ };
6442
+ }
6443
+ const letters = /^\(?([a-z]+|[A-Z]+)[.)]$/.exec(text);
6444
+ if (letters) {
6445
+ const value = letters[1], lower = value.toLowerCase(), upper = value !== lower;
6446
+ if (/^[ivxlcdm]+$/.test(lower) && (lower.length > 1 || lower === 'i')) {
6447
+ return {
6448
+ tag: 'ol',
6449
+ listStyleType: upper ? 'upper-roman' : 'lower-roman',
6450
+ start: romanValue(lower)
6451
+ };
6452
+ }
6453
+ // Word continues a lettered list with aa, bb, ...
6454
+ if (/^([a-z])\1*$/.test(lower)) {
6455
+ return {
6456
+ tag: 'ol',
6457
+ listStyleType: upper ? 'upper-alpha' : 'lower-alpha',
6458
+ start: (lower.length - 1) * 26 + lower.charCodeAt(0) - 96
6459
+ };
6460
+ }
6461
+ }
6462
+ return {
6463
+ tag: 'ul',
6464
+ listStyleType: null,
6465
+ start: 1
6466
+ };
6467
+ }
6468
+ /**
6469
+ * Removes the marker and the wrappers it leaves empty
6470
+ */ function removeMarker(marker, paragraph) {
6471
+ let parent = marker.parentNode;
6472
+ _dom_dom_js__WEBPACK_IMPORTED_MODULE_0__.Dom.safeRemove(marker);
6473
+ while(parent && parent !== paragraph && _dom_dom_js__WEBPACK_IMPORTED_MODULE_0__.Dom.isElement(parent) && _dom_dom_js__WEBPACK_IMPORTED_MODULE_0__.Dom.isEmpty(parent)){
6474
+ const next = parent.parentNode;
6475
+ _dom_dom_js__WEBPACK_IMPORTED_MODULE_0__.Dom.safeRemove(parent);
6476
+ parent = next;
6477
+ }
6478
+ }
6479
+ /**
6480
+ * Finds Word's list paragraphs (`<p style="mso-list:l0 level1 lfo1">`), reads
6481
+ * their list, level and type from the `mso-list:Ignore` marker, and removes the
6482
+ * marker. Call it before anything strips the `mso-list` styles, then pass the
6483
+ * result to {@link wrapWordListItems}
6484
+ */ function readWordListItems(root) {
6485
+ const items = [];
6486
+ (0,_array_to_array_js__WEBPACK_IMPORTED_MODULE_1__.toArray)(root.querySelectorAll('p')).forEach((paragraph)=>{
6487
+ const match = /mso-list:\s*l(\d+)\s+level(\d+)(?:\s+lfo(\d+))?/i.exec((0,_utils_attr_js__WEBPACK_IMPORTED_MODULE_2__.attr)(paragraph, 'style') || '');
6488
+ if (!match) {
6489
+ return;
6490
+ }
6491
+ const marker = (0,_array_to_array_js__WEBPACK_IMPORTED_MODULE_1__.toArray)(paragraph.querySelectorAll('[style]')).find((elm)=>/mso-list:\s*ignore/i.test((0,_utils_attr_js__WEBPACK_IMPORTED_MODULE_2__.attr)(elm, 'style') || ''));
6492
+ items.push(_object_spread({
6493
+ paragraph,
6494
+ list: `${match[1]}:${match[3] || ''}`,
6495
+ level: Number(match[2])
6496
+ }, parseMarker((marker === null || marker === void 0 ? void 0 : marker.textContent) || '')));
6497
+ if (marker) {
6498
+ removeMarker(marker, paragraph);
6499
+ }
6500
+ });
6501
+ return items;
6502
+ }
6503
+ function isAdjacent(prev, item) {
6504
+ return _dom_dom_js__WEBPACK_IMPORTED_MODULE_0__.Dom.findSibling(item.paragraph, true, (n)=>!_dom_dom_js__WEBPACK_IMPORTED_MODULE_0__.Dom.isEmptyTextNode(n) && !_dom_dom_js__WEBPACK_IMPORTED_MODULE_0__.Dom.isComment(n)) === prev.paragraph;
6505
+ }
6506
+ /**
6507
+ * Turns the paragraphs found by {@link readWordListItems} into `<ul>`/`<ol>`
6508
+ * lists, nesting them by level. Each paragraph becomes an `<li>` without Word's
6509
+ * hanging indent
6510
+ */ function wrapWordListItems(items) {
6511
+ let stack = [];
6512
+ const continues = items.map((item, index)=>index > 0 && isAdjacent(items[index - 1], item));
6513
+ items.forEach((item, index)=>{
6514
+ const { paragraph } = item;
6515
+ if (!continues[index]) {
6516
+ stack = [];
6517
+ }
6518
+ while(stack.length && stack[stack.length - 1].level > item.level){
6519
+ stack.pop();
6520
+ }
6521
+ let top = stack[stack.length - 1];
6522
+ if (top && top.level === item.level && top.list !== item.list) {
6523
+ stack.pop();
6524
+ top = stack[stack.length - 1];
6525
+ }
6526
+ const doc = paragraph.ownerDocument;
6527
+ if (!top || top.level < item.level) {
6528
+ const element = doc.createElement(item.tag);
6529
+ if (item.listStyleType) {
6530
+ element.style.listStyleType = item.listStyleType;
6531
+ }
6532
+ if (item.tag === 'ol' && item.start !== 1) {
6533
+ (0,_utils_attr_js__WEBPACK_IMPORTED_MODULE_2__.attr)(element, 'start', item.start);
6534
+ }
6535
+ if (top && top.li) {
6536
+ top.li.appendChild(element);
6537
+ } else {
6538
+ _dom_dom_js__WEBPACK_IMPORTED_MODULE_0__.Dom.before(paragraph, element);
6539
+ }
6540
+ top = {
6541
+ level: item.level,
6542
+ list: item.list,
6543
+ element
6544
+ };
6545
+ stack.push(top);
6546
+ }
6547
+ const li = doc.createElement('li');
6548
+ (0,_array_to_array_js__WEBPACK_IMPORTED_MODULE_1__.toArray)(paragraph.attributes).forEach((attribute)=>{
6549
+ if (attribute.name !== 'class') {
6550
+ li.setAttribute(attribute.name, attribute.value);
6551
+ }
6552
+ });
6553
+ li.style.removeProperty('margin-left');
6554
+ li.style.removeProperty('text-indent');
6555
+ if (!(0,_utils_attr_js__WEBPACK_IMPORTED_MODULE_2__.attr)(li, 'style')) {
6556
+ (0,_utils_attr_js__WEBPACK_IMPORTED_MODULE_2__.attr)(li, 'style', null);
6557
+ }
6558
+ _dom_dom_js__WEBPACK_IMPORTED_MODULE_0__.Dom.moveContent(paragraph, li);
6559
+ _dom_dom_js__WEBPACK_IMPORTED_MODULE_0__.Dom.safeRemove(paragraph);
6560
+ top.element.appendChild(li);
6561
+ top.li = li;
6562
+ });
6563
+ }
6564
+
6565
+
6341
6566
  /***/ }),
6342
6567
 
6343
6568
  /***/ 21537:
@@ -10800,13 +11025,15 @@ function usable(ranges, shadowRoot) {
10800
11025
  /* harmony export */ composedRanges: function() { return /* reexport safe */ _composed_ranges_js__WEBPACK_IMPORTED_MODULE_2__.composedRanges; },
10801
11026
  /* harmony export */ cursorInTheEdgeOfString: function() { return /* binding */ cursorInTheEdgeOfString; },
10802
11027
  /* harmony export */ findCorrectCurrentNode: function() { return /* binding */ findCorrectCurrentNode; },
10803
- /* harmony export */ moveNodeInsideStart: function() { return /* reexport safe */ _move_node_inside_start_js__WEBPACK_IMPORTED_MODULE_3__.moveNodeInsideStart; }
11028
+ /* harmony export */ isMoved: function() { return /* reexport safe */ _is_moved_js__WEBPACK_IMPORTED_MODULE_3__.isMoved; },
11029
+ /* harmony export */ moveNodeInsideStart: function() { return /* reexport safe */ _move_node_inside_start_js__WEBPACK_IMPORTED_MODULE_4__.moveNodeInsideStart; }
10804
11030
  /* harmony export */ });
10805
11031
  /* harmony import */ var _constants_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(82758);
10806
11032
  /* harmony import */ var _dom_dom_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(2748);
10807
11033
  /* harmony import */ var _composed_ranges_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(79505);
10808
- /* harmony import */ var _move_node_inside_start_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(26716);
10809
- /* harmony import */ var _move_the_node_along_the_edge_outward_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(43463);
11034
+ /* harmony import */ var _is_moved_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(12604);
11035
+ /* harmony import */ var _move_node_inside_start_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(26716);
11036
+ /* harmony import */ var _move_the_node_along_the_edge_outward_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(43463);
10810
11037
  /*!
10811
11038
  * Jodit Editor (https://xdsoft.net/jodit/)
10812
11039
  * Released under MIT see LICENSE.txt in the project root for license information.
@@ -10818,6 +11045,7 @@ function usable(ranges, shadowRoot) {
10818
11045
 
10819
11046
 
10820
11047
 
11048
+
10821
11049
  /**
10822
11050
  * Despite the name, returns `true` when the cursor is NOT at the checked edge
10823
11051
  * of the text node: there is significant (non invisible-space) text between
@@ -10873,6 +11101,33 @@ function findCorrectCurrentNode(node, range, rightMode, isCollapsed, checkChild,
10873
11101
  }
10874
11102
 
10875
11103
 
11104
+ /***/ }),
11105
+
11106
+ /***/ 12604:
11107
+ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
11108
+
11109
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
11110
+ /* harmony export */ isMoved: function() { return /* binding */ isMoved; }
11111
+ /* harmony export */ });
11112
+ /*!
11113
+ * Jodit Editor (https://xdsoft.net/jodit/)
11114
+ * Released under MIT see LICENSE.txt in the project root for license information.
11115
+ * Copyright (c) 2013-2026 Valerii Chupurnov. All rights reserved. https://xdsoft.net
11116
+ */ /**
11117
+ * Whether the selection, `before` as it was when a key went down, has since
11118
+ * moved to somewhere else in the editor
11119
+ * @private
11120
+ */ function isMoved(jodit, before) {
11121
+ const { s } = jodit;
11122
+ // Selecting table cells, for one, removes the selection altogether
11123
+ if (!before || !s.isInsideArea) {
11124
+ return false;
11125
+ }
11126
+ const { range } = s;
11127
+ return range.startContainer !== before.startContainer || range.startOffset !== before.startOffset || range.endContainer !== before.endContainer || range.endOffset !== before.endOffset;
11128
+ }
11129
+
11130
+
10876
11131
  /***/ }),
10877
11132
 
10878
11133
  /***/ 26716:
@@ -12916,11 +13171,13 @@ function elementsEqualAttributes(elm1, elm2) {
12916
13171
  /* harmony export */ toggleOrderedList: function() { return /* binding */ toggleOrderedList; }
12917
13172
  /* harmony export */ });
12918
13173
  /* harmony import */ var _dom_dom_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(2748);
12919
- /* harmony import */ var _helpers_utils_assert_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(38837);
12920
- /* harmony import */ var _extract_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(32526);
12921
- /* harmony import */ var _toggle_attributes_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(44253);
12922
- /* harmony import */ var _constants_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(77361);
12923
- /* harmony import */ var _wrap_list_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(82515);
13174
+ /* harmony import */ var _helpers_size_object_size_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(21496);
13175
+ /* harmony import */ var _helpers_utils_assert_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(38837);
13176
+ /* harmony import */ var _extract_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(32526);
13177
+ /* harmony import */ var _is_same_attributes_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(94466);
13178
+ /* harmony import */ var _toggle_attributes_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(44253);
13179
+ /* harmony import */ var _constants_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(77361);
13180
+ /* harmony import */ var _wrap_list_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(82515);
12924
13181
  /*!
12925
13182
  * Jodit Editor (https://xdsoft.net/jodit/)
12926
13183
  * Released under MIT see LICENSE.txt in the project root for license information.
@@ -12931,6 +13188,8 @@ function elementsEqualAttributes(elm1, elm2) {
12931
13188
 
12932
13189
 
12933
13190
 
13191
+
13192
+
12934
13193
  /**
12935
13194
  * Replaces `ul->ol` or `ol->ul`, apply styles to the list, or remove a list item from it
12936
13195
  * @private
@@ -12942,39 +13201,69 @@ function elementsEqualAttributes(elm1, elm2) {
12942
13201
  if (!list) {
12943
13202
  return mode;
12944
13203
  }
12945
- const result = jodit.e.fire(`${_constants_js__WEBPACK_IMPORTED_MODULE_4__._PREFIX}BeforeToggleList`, mode, commitStyle, list);
13204
+ const result = jodit.e.fire(`${_constants_js__WEBPACK_IMPORTED_MODULE_6__._PREFIX}BeforeToggleList`, mode, commitStyle, list);
12946
13205
  if (result !== undefined) {
12947
13206
  return result;
12948
13207
  }
12949
- const hook = jodit.e.fire.bind(jodit.e, `${_constants_js__WEBPACK_IMPORTED_MODULE_4__._PREFIX}AfterToggleList`);
13208
+ const hook = jodit.e.fire.bind(jodit.e, `${_constants_js__WEBPACK_IMPORTED_MODULE_6__._PREFIX}AfterToggleList`);
12950
13209
  if (mode !== (/* inlined export .UNWRAP */"unwrap")) {
12951
- const isChangeMode = (0,_toggle_attributes_js__WEBPACK_IMPORTED_MODULE_3__.toggleAttributes)(commitStyle, li.parentElement, jodit, _constants_js__WEBPACK_IMPORTED_MODULE_4__.INITIAL, true) === (/* inlined export .CHANGE */"change");
13210
+ const isChangeMode = (0,_toggle_attributes_js__WEBPACK_IMPORTED_MODULE_5__.toggleAttributes)(commitStyle, li.parentElement, jodit, _constants_js__WEBPACK_IMPORTED_MODULE_6__.INITIAL, true) === (/* inlined export .CHANGE */"change");
13211
+ const isSameList = _dom_dom_js__WEBPACK_IMPORTED_MODULE_0__.Dom.isTag(list, commitStyle.element);
13212
+ // ol => ol[style="list-style-type: lower-roman"]: a list's style
13213
+ // belongs to the whole list, so it is changed without splitting it
13214
+ if (isSameList && isChangeMode && mode !== _constants_js__WEBPACK_IMPORTED_MODULE_6__.REPLACE && changesStyleOnly(commitStyle)) {
13215
+ (0,_toggle_attributes_js__WEBPACK_IMPORTED_MODULE_5__.toggleAttributes)(commitStyle, list, jodit, (/* inlined export .CHANGE */"change"));
13216
+ hook((/* inlined export .CHANGE */"change"), joinPrevious(commitStyle, list, mode), commitStyle);
13217
+ return (/* inlined export .CHANGE */"change");
13218
+ }
13219
+ // Restyled already, for an earlier part of the selection
13220
+ if (isSameList && mode === (/* inlined export .CHANGE */"change")) {
13221
+ return (/* inlined export .CHANGE */"change");
13222
+ }
12952
13223
  // ul => ol, ol => ul or ul => ul.class1
12953
- if (mode === _constants_js__WEBPACK_IMPORTED_MODULE_4__.REPLACE || isChangeMode || list.tagName.toLowerCase() !== commitStyle.element) {
12954
- const wrapper = unwrapList(_constants_js__WEBPACK_IMPORTED_MODULE_4__.REPLACE, list, li, jodit, commitStyle);
12955
- const newList = (0,_wrap_list_js__WEBPACK_IMPORTED_MODULE_5__.wrapList)(commitStyle, wrapper, jodit);
12956
- hook(_constants_js__WEBPACK_IMPORTED_MODULE_4__.REPLACE, newList, commitStyle);
12957
- return _constants_js__WEBPACK_IMPORTED_MODULE_4__.REPLACE;
13224
+ if (mode === _constants_js__WEBPACK_IMPORTED_MODULE_6__.REPLACE || isChangeMode || !isSameList) {
13225
+ const wrapper = unwrapList(_constants_js__WEBPACK_IMPORTED_MODULE_6__.REPLACE, list, li, jodit, commitStyle);
13226
+ const newList = (0,_wrap_list_js__WEBPACK_IMPORTED_MODULE_7__.wrapList)(commitStyle, wrapper, jodit);
13227
+ hook(_constants_js__WEBPACK_IMPORTED_MODULE_6__.REPLACE, newList, commitStyle);
13228
+ return _constants_js__WEBPACK_IMPORTED_MODULE_6__.REPLACE;
12958
13229
  }
12959
13230
  }
12960
13231
  const wrapper = unwrapList((/* inlined export .UNWRAP */"unwrap"), list, li, jodit, commitStyle);
12961
13232
  hook((/* inlined export .UNWRAP */"unwrap"), wrapper, commitStyle);
12962
13233
  return (/* inlined export .UNWRAP */"unwrap");
12963
13234
  }
13235
+ /**
13236
+ * Other attributes, such as a class, still move the items into a new list,
13237
+ * where the `beforeWrapList` hook can add markup to each of them
13238
+ */ function changesStyleOnly({ options: { attributes } }) {
13239
+ return Boolean(attributes === null || attributes === void 0 ? void 0 : attributes.style) && (0,_helpers_size_object_size_js__WEBPACK_IMPORTED_MODULE_1__.size)(attributes) === 1;
13240
+ }
13241
+ /**
13242
+ * Joins a restyled list to the list before it, when the selection runs on
13243
+ * from that list and the two now match
13244
+ */ function joinPrevious(commitStyle, list, mode) {
13245
+ const prev = _dom_dom_js__WEBPACK_IMPORTED_MODULE_0__.Dom.findSibling(list, true);
13246
+ if (mode !== (/* inlined export .CHANGE */"change") || !_dom_dom_js__WEBPACK_IMPORTED_MODULE_0__.Dom.isTag(prev, commitStyle.element) || !(0,_is_same_attributes_js__WEBPACK_IMPORTED_MODULE_4__.elementsEqualAttributes)(prev, list)) {
13247
+ return list;
13248
+ }
13249
+ _dom_dom_js__WEBPACK_IMPORTED_MODULE_0__.Dom.append(prev, Array.from(list.childNodes));
13250
+ _dom_dom_js__WEBPACK_IMPORTED_MODULE_0__.Dom.safeRemove(list);
13251
+ return prev;
13252
+ }
12964
13253
  function unwrapList(mode, list, li, jodit, cs) {
12965
- const result = jodit.e.fire(`${_constants_js__WEBPACK_IMPORTED_MODULE_4__._PREFIX}BeforeUnwrapList`, mode, list, cs);
13254
+ const result = jodit.e.fire(`${_constants_js__WEBPACK_IMPORTED_MODULE_6__._PREFIX}BeforeUnwrapList`, mode, list, cs);
12966
13255
  if (result) {
12967
- (0,_helpers_utils_assert_js__WEBPACK_IMPORTED_MODULE_1__.assert)(_dom_dom_js__WEBPACK_IMPORTED_MODULE_0__.Dom.isHTMLElement(result), `${_constants_js__WEBPACK_IMPORTED_MODULE_4__._PREFIX}BeforeUnwrapList hook must return HTMLElement`);
13256
+ (0,_helpers_utils_assert_js__WEBPACK_IMPORTED_MODULE_2__.assert)(_dom_dom_js__WEBPACK_IMPORTED_MODULE_0__.Dom.isHTMLElement(result), `${_constants_js__WEBPACK_IMPORTED_MODULE_6__._PREFIX}BeforeUnwrapList hook must return HTMLElement`);
12968
13257
  return result;
12969
13258
  }
12970
- ;(0,_extract_js__WEBPACK_IMPORTED_MODULE_2__.extractSelectedPart)(list, li, jodit);
12971
- (0,_helpers_utils_assert_js__WEBPACK_IMPORTED_MODULE_1__.assert)(_dom_dom_js__WEBPACK_IMPORTED_MODULE_0__.Dom.isHTMLElement(li.parentElement), 'Element should be inside the list');
13259
+ ;(0,_extract_js__WEBPACK_IMPORTED_MODULE_3__.extractSelectedPart)(list, li, jodit);
13260
+ (0,_helpers_utils_assert_js__WEBPACK_IMPORTED_MODULE_2__.assert)(_dom_dom_js__WEBPACK_IMPORTED_MODULE_0__.Dom.isHTMLElement(li.parentElement), 'Element should be inside the list');
12972
13261
  _dom_dom_js__WEBPACK_IMPORTED_MODULE_0__.Dom.unwrap(li.parentElement);
12973
13262
  // In the REPLACE mode the content will be immediately wrapped in a `li`
12974
13263
  // of the new list inside `wrapList`, so it should stay in the document.
12975
13264
  // Replacing it with a fragment here would dissolve the content
12976
13265
  // (with `enter: 'br'`) and the new list would never be inserted.
12977
- if (mode === _constants_js__WEBPACK_IMPORTED_MODULE_4__.REPLACE) {
13266
+ if (mode === _constants_js__WEBPACK_IMPORTED_MODULE_6__.REPLACE) {
12978
13267
  return li;
12979
13268
  }
12980
13269
  return _dom_dom_js__WEBPACK_IMPORTED_MODULE_0__.Dom.replace(li, jodit.o.enter.toLowerCase() !== 'br' ? jodit.o.enter : jodit.createInside.fragment(), jodit.createInside);
@@ -13716,7 +14005,7 @@ const transactions = {
13716
14005
  [states.LIST]: {
13717
14006
  exec (value) {
13718
14007
  const { element, jodit, mode } = value;
13719
- if (mode !== _constants_js__WEBPACK_IMPORTED_MODULE_4__.INITIAL && mode !== (/* inlined export .UNWRAP */"unwrap") && mode !== _constants_js__WEBPACK_IMPORTED_MODULE_4__.REPLACE) {
14008
+ if (mode !== _constants_js__WEBPACK_IMPORTED_MODULE_4__.INITIAL && mode !== (/* inlined export .UNWRAP */"unwrap") && mode !== _constants_js__WEBPACK_IMPORTED_MODULE_4__.REPLACE && mode !== (/* inlined export .CHANGE */"change")) {
13720
14009
  return _object_spread_props(_object_spread({}, value), {
13721
14010
  next: states.END
13722
14011
  });
@@ -19895,7 +20184,10 @@ function addClassNames(className, elm) {
19895
20184
  Autoplay: 'تشغيل تلقائي',
19896
20185
  Loop: 'تكرار',
19897
20186
  Muted: 'مكتوم الصوت',
19898
- Controls: 'عناصر التحكم'
20187
+ Controls: 'عناصر التحكم',
20188
+ 'Start at...': 'البدء من...',
20189
+ 'Start numbering at': 'بدء الترقيم من',
20190
+ 'Number for the first item': 'رقم العنصر الأول'
19899
20191
  });
19900
20192
 
19901
20193
 
@@ -20136,7 +20428,10 @@ function addClassNames(className, elm) {
20136
20428
  Autoplay: 'Avtomatik oynatma',
20137
20429
  Loop: 'Təkrarla',
20138
20430
  Muted: 'Səssiz',
20139
- Controls: 'İdarəetmə elementləri'
20431
+ Controls: 'İdarəetmə elementləri',
20432
+ 'Start at...': 'Başlanğıc nömrəsi...',
20433
+ 'Start numbering at': 'Nömrələmənin başlanğıcı',
20434
+ 'Number for the first item': 'Birinci bəndin nömrəsi'
20140
20435
  });
20141
20436
 
20142
20437
 
@@ -20369,7 +20664,10 @@ function addClassNames(className, elm) {
20369
20664
  Autoplay: 'Automatické přehrávání',
20370
20665
  Loop: 'Opakovat',
20371
20666
  Muted: 'Ztlumeno',
20372
- Controls: 'Ovládací prvky'
20667
+ Controls: 'Ovládací prvky',
20668
+ 'Start at...': 'Začít od...',
20669
+ 'Start numbering at': 'Začít číslování od',
20670
+ 'Number for the first item': 'Číslo první položky'
20373
20671
  });
20374
20672
 
20375
20673
 
@@ -20606,7 +20904,10 @@ function addClassNames(className, elm) {
20606
20904
  Autoplay: 'Automatische Wiedergabe',
20607
20905
  Loop: 'Wiederholen',
20608
20906
  Muted: 'Stumm',
20609
- Controls: 'Steuerelemente'
20907
+ Controls: 'Steuerelemente',
20908
+ 'Start at...': 'Beginnen bei...',
20909
+ 'Start numbering at': 'Nummerierung beginnen bei',
20910
+ 'Number for the first item': 'Nummer des ersten Eintrags'
20610
20911
  });
20611
20912
 
20612
20913
 
@@ -20860,7 +21161,10 @@ function addClassNames(className, elm) {
20860
21161
  Autoplay: 'Reproducción automática',
20861
21162
  Loop: 'Repetir',
20862
21163
  Muted: 'Silenciado',
20863
- Controls: 'Controles'
21164
+ Controls: 'Controles',
21165
+ 'Start at...': 'Empezar en...',
21166
+ 'Start numbering at': 'Empezar la numeración en',
21167
+ 'Number for the first item': 'Número del primer elemento'
20864
21168
  });
20865
21169
 
20866
21170
 
@@ -21092,7 +21396,10 @@ function addClassNames(className, elm) {
21092
21396
  Autoplay: 'پخش خودکار',
21093
21397
  Loop: 'تکرار',
21094
21398
  Muted: 'بی‌صدا',
21095
- Controls: 'کنترل‌ها'
21399
+ Controls: 'کنترل‌ها',
21400
+ 'Start at...': 'شروع از...',
21401
+ 'Start numbering at': 'شروع شماره‌گذاری از',
21402
+ 'Number for the first item': 'شماره‌ی نخستین مورد'
21096
21403
  });
21097
21404
 
21098
21405
 
@@ -21330,7 +21637,10 @@ function addClassNames(className, elm) {
21330
21637
  Autoplay: 'Automaattinen toisto',
21331
21638
  Loop: 'Toista uudelleen',
21332
21639
  Muted: 'Mykistetty',
21333
- Controls: 'Säätimet'
21640
+ Controls: 'Säätimet',
21641
+ 'Start at...': 'Aloita numerosta...',
21642
+ 'Start numbering at': 'Aloita numerointi numerosta',
21643
+ 'Number for the first item': 'Ensimmäisen kohdan numero'
21334
21644
  });
21335
21645
 
21336
21646
 
@@ -21562,7 +21872,10 @@ function addClassNames(className, elm) {
21562
21872
  Autoplay: 'Lecture automatique',
21563
21873
  Loop: 'Lecture en boucle',
21564
21874
  Muted: 'Muet',
21565
- Controls: 'Commandes'
21875
+ Controls: 'Commandes',
21876
+ 'Start at...': 'Commencer à...',
21877
+ 'Start numbering at': 'Commencer la numérotation à',
21878
+ 'Number for the first item': 'Numéro du premier élément'
21566
21879
  });
21567
21880
 
21568
21881
 
@@ -21794,7 +22107,10 @@ function addClassNames(className, elm) {
21794
22107
  Autoplay: 'ניגון אוטומטי',
21795
22108
  Loop: 'הפעלה חוזרת',
21796
22109
  Muted: 'מושתק',
21797
- Controls: 'פקדים'
22110
+ Controls: 'פקדים',
22111
+ 'Start at...': 'התחל מ...',
22112
+ 'Start numbering at': 'התחל מספור מ',
22113
+ 'Number for the first item': 'מספר הפריט הראשון'
21798
22114
  });
21799
22115
 
21800
22116
 
@@ -22028,7 +22344,10 @@ function addClassNames(className, elm) {
22028
22344
  Autoplay: 'Automatikus lejátszás',
22029
22345
  Loop: 'Ismétlés',
22030
22346
  Muted: 'Némítva',
22031
- Controls: 'Vezérlők'
22347
+ Controls: 'Vezérlők',
22348
+ 'Start at...': 'Kezdőszám...',
22349
+ 'Start numbering at': 'Számozás kezdőértéke',
22350
+ 'Number for the first item': 'Az első elem száma'
22032
22351
  });
22033
22352
 
22034
22353
 
@@ -22261,7 +22580,10 @@ function addClassNames(className, elm) {
22261
22580
  Autoplay: 'Putar otomatis',
22262
22581
  Loop: 'Ulangi',
22263
22582
  Muted: 'Dibisukan',
22264
- Controls: 'Kontrol'
22583
+ Controls: 'Kontrol',
22584
+ 'Start at...': 'Mulai dari...',
22585
+ 'Start numbering at': 'Mulai penomoran dari',
22586
+ 'Number for the first item': 'Nomor untuk item pertama'
22265
22587
  });
22266
22588
 
22267
22589
 
@@ -22498,7 +22820,10 @@ function addClassNames(className, elm) {
22498
22820
  Autoplay: 'Riproduzione automatica',
22499
22821
  Loop: 'Ripeti',
22500
22822
  Muted: 'Muto',
22501
- Controls: 'Controlli'
22823
+ Controls: 'Controlli',
22824
+ 'Start at...': 'Inizia da...',
22825
+ 'Start numbering at': 'Inizia la numerazione da',
22826
+ 'Number for the first item': 'Numero del primo elemento'
22502
22827
  });
22503
22828
 
22504
22829
 
@@ -22735,7 +23060,10 @@ function addClassNames(className, elm) {
22735
23060
  Autoplay: '自動再生',
22736
23061
  Loop: 'ループ再生',
22737
23062
  Muted: 'ミュート',
22738
- Controls: 'コントロール'
23063
+ Controls: 'コントロール',
23064
+ 'Start at...': '開始番号...',
23065
+ 'Start numbering at': '番号の開始値',
23066
+ 'Number for the first item': '最初の項目の番号'
22739
23067
  });
22740
23068
 
22741
23069
 
@@ -22978,7 +23306,10 @@ function addClassNames(className, elm) {
22978
23306
  Autoplay: '자동 재생',
22979
23307
  Loop: '반복 재생',
22980
23308
  Muted: '음소거',
22981
- Controls: '컨트롤'
23309
+ Controls: '컨트롤',
23310
+ 'Start at...': '시작 번호...',
23311
+ 'Start numbering at': '번호 매기기 시작 값',
23312
+ 'Number for the first item': '첫 번째 항목의 번호'
22982
23313
  });
22983
23314
 
22984
23315
 
@@ -23210,7 +23541,10 @@ function addClassNames(className, elm) {
23210
23541
  Autoplay: 'Автоматаар тоглуулах',
23211
23542
  Loop: 'Давтах',
23212
23543
  Muted: 'Дуугүй',
23213
- Controls: 'Удирдлага'
23544
+ Controls: 'Удирдлага',
23545
+ 'Start at...': 'Эхлэх дугаар...',
23546
+ 'Start numbering at': 'Дугаарлалт эхлэх',
23547
+ 'Number for the first item': 'Эхний зүйлийн дугаар'
23214
23548
  });
23215
23549
 
23216
23550
 
@@ -23443,7 +23777,10 @@ function addClassNames(className, elm) {
23443
23777
  Autoplay: 'Automatisch afspelen',
23444
23778
  Loop: 'Herhalen',
23445
23779
  Muted: 'Gedempt',
23446
- Controls: 'Bedieningselementen'
23780
+ Controls: 'Bedieningselementen',
23781
+ 'Start at...': 'Beginnen bij...',
23782
+ 'Start numbering at': 'Nummering beginnen bij',
23783
+ 'Number for the first item': 'Nummer van het eerste item'
23447
23784
  });
23448
23785
 
23449
23786
 
@@ -23684,7 +24021,10 @@ function addClassNames(className, elm) {
23684
24021
  Autoplay: 'Automatisk avspilling',
23685
24022
  Loop: 'Gjenta',
23686
24023
  Muted: 'Dempet',
23687
- Controls: 'Kontroller'
24024
+ Controls: 'Kontroller',
24025
+ 'Start at...': 'Start på...',
24026
+ 'Start numbering at': 'Start nummereringen på',
24027
+ 'Number for the first item': 'Nummer for første punkt'
23688
24028
  });
23689
24029
 
23690
24030
 
@@ -23916,7 +24256,10 @@ function addClassNames(className, elm) {
23916
24256
  Autoplay: 'Autoodtwarzanie',
23917
24257
  Loop: 'Zapętlenie',
23918
24258
  Muted: 'Wyciszony',
23919
- Controls: 'Elementy sterujące'
24259
+ Controls: 'Elementy sterujące',
24260
+ 'Start at...': 'Zacznij od...',
24261
+ 'Start numbering at': 'Rozpocznij numerowanie od',
24262
+ 'Number for the first item': 'Numer pierwszego elementu'
23920
24263
  });
23921
24264
 
23922
24265
 
@@ -24153,7 +24496,10 @@ function addClassNames(className, elm) {
24153
24496
  Autoplay: 'Reprodução automática',
24154
24497
  Loop: 'Repetir',
24155
24498
  Muted: 'Sem som',
24156
- Controls: 'Controles'
24499
+ Controls: 'Controles',
24500
+ 'Start at...': 'Começar em...',
24501
+ 'Start numbering at': 'Começar a numeração em',
24502
+ 'Number for the first item': 'Número do primeiro item'
24157
24503
  });
24158
24504
 
24159
24505
 
@@ -24384,7 +24730,10 @@ function addClassNames(className, elm) {
24384
24730
  Autoplay: 'Автовоспроизведение',
24385
24731
  Loop: 'Повтор',
24386
24732
  Muted: 'Без звука',
24387
- Controls: 'Элементы управления'
24733
+ Controls: 'Элементы управления',
24734
+ 'Start at...': 'Начать с...',
24735
+ 'Start numbering at': 'Начать нумерацию с',
24736
+ 'Number for the first item': 'Номер первого пункта'
24388
24737
  });
24389
24738
 
24390
24739
 
@@ -24623,7 +24972,10 @@ function addClassNames(className, elm) {
24623
24972
  Autoplay: 'Automatické prehrávanie',
24624
24973
  Loop: 'Opakovať',
24625
24974
  Muted: 'Stlmené',
24626
- Controls: 'Ovládacie prvky'
24975
+ Controls: 'Ovládacie prvky',
24976
+ 'Start at...': 'Začať od...',
24977
+ 'Start numbering at': 'Začať číslovanie od',
24978
+ 'Number for the first item': 'Číslo prvej položky'
24627
24979
  });
24628
24980
 
24629
24981
 
@@ -24863,7 +25215,10 @@ function addClassNames(className, elm) {
24863
25215
  Autoplay: 'Automatisk uppspelning',
24864
25216
  Loop: 'Upprepa',
24865
25217
  Muted: 'Ljudlös',
24866
- Controls: 'Kontroller'
25218
+ Controls: 'Kontroller',
25219
+ 'Start at...': 'Börja på...',
25220
+ 'Start numbering at': 'Börja numreringen på',
25221
+ 'Number for the first item': 'Nummer för första punkten'
24867
25222
  });
24868
25223
 
24869
25224
 
@@ -25095,7 +25450,10 @@ function addClassNames(className, elm) {
25095
25450
  Autoplay: 'Otomatik oynat',
25096
25451
  Loop: 'Döngü',
25097
25452
  Muted: 'Sessiz',
25098
- Controls: 'Kontroller'
25453
+ Controls: 'Kontroller',
25454
+ 'Start at...': 'Başlangıç numarası...',
25455
+ 'Start numbering at': 'Numaralandırma başlangıcı',
25456
+ 'Number for the first item': 'İlk öğenin numarası'
25099
25457
  });
25100
25458
 
25101
25459
 
@@ -25326,7 +25684,10 @@ function addClassNames(className, elm) {
25326
25684
  Autoplay: 'Автовідтворення',
25327
25685
  Loop: 'Повтор',
25328
25686
  Muted: 'Без звуку',
25329
- Controls: 'Елементи керування'
25687
+ Controls: 'Елементи керування',
25688
+ 'Start at...': 'Почати з...',
25689
+ 'Start numbering at': 'Почати нумерацію з',
25690
+ 'Number for the first item': 'Номер першого пункту'
25330
25691
  });
25331
25692
 
25332
25693
 
@@ -25559,7 +25920,10 @@ function addClassNames(className, elm) {
25559
25920
  Autoplay: '自动播放',
25560
25921
  Loop: '循环播放',
25561
25922
  Muted: '静音',
25562
- Controls: '播放控件'
25923
+ Controls: '播放控件',
25924
+ 'Start at...': '起始于...',
25925
+ 'Start numbering at': '编号起始值',
25926
+ 'Number for the first item': '第一项的编号'
25563
25927
  });
25564
25928
 
25565
25929
 
@@ -25791,7 +26155,10 @@ function addClassNames(className, elm) {
25791
26155
  Autoplay: '自動播放',
25792
26156
  Loop: '循環播放',
25793
26157
  Muted: '靜音',
25794
- Controls: '播放控制項'
26158
+ Controls: '播放控制項',
26159
+ 'Start at...': '起始於...',
26160
+ 'Start numbering at': '編號起始值',
26161
+ 'Number for the first item': '第一項的編號'
25795
26162
  });
25796
26163
 
25797
26164
 
@@ -26351,7 +26718,12 @@ _config_js__WEBPACK_IMPORTED_MODULE_13__.Config.prototype.controls.dialog = {
26351
26718
  }
26352
26719
  }
26353
26720
  __onResizerMouseDown(e) {
26354
- var _a, _b, _c;
26721
+ var _a, _b;
26722
+ // As for the header: otherwise Safari selects the dialog's text as
26723
+ // the pointer moves
26724
+ if (e.cancelable) {
26725
+ e.preventDefault();
26726
+ }
26355
26727
  this.resizable = true;
26356
26728
  this.startX = e.clientX;
26357
26729
  this.startY = e.clientY;
@@ -26363,8 +26735,8 @@ _config_js__WEBPACK_IMPORTED_MODULE_13__.Config.prototype.controls.dialog = {
26363
26735
  // the content area does not shrink below its CSS `min-height`,
26364
26736
  // so it is part of the smallest height the panel can take
26365
26737
  const contentMinHeight = content ? parseFloat(this.ow.getComputedStyle(content).minHeight) || 0 : 0;
26366
- this.minSize.w = (0,_core_helpers_checker_index_js__WEBPACK_IMPORTED_MODULE_6__.isNumber)(this.o.minWidth) ? this.o.minWidth : Math.max(100, (_a = footer === null || footer === void 0 ? void 0 : footer.scrollWidth) !== null && _a !== void 0 ? _a : 0);
26367
- this.minSize.h = (0,_core_helpers_checker_index_js__WEBPACK_IMPORTED_MODULE_6__.isNumber)(this.o.minHeight) ? this.o.minHeight : ((_b = header === null || header === void 0 ? void 0 : header.offsetHeight) !== null && _b !== void 0 ? _b : 0) + ((_c = footer === null || footer === void 0 ? void 0 : footer.offsetHeight) !== null && _c !== void 0 ? _c : 0) + contentMinHeight + this.resizer.offsetHeight;
26738
+ this.minSize.w = (0,_core_helpers_checker_index_js__WEBPACK_IMPORTED_MODULE_6__.isNumber)(this.o.minWidth) ? this.o.minWidth : Math.max(100, header ? this.__contentWidth(header) : 0, footer ? this.__contentWidth(footer) : 0);
26739
+ this.minSize.h = (0,_core_helpers_checker_index_js__WEBPACK_IMPORTED_MODULE_6__.isNumber)(this.o.minHeight) ? this.o.minHeight : ((_a = header === null || header === void 0 ? void 0 : header.offsetHeight) !== null && _a !== void 0 ? _a : 0) + ((_b = footer === null || footer === void 0 ? void 0 : footer.offsetHeight) !== null && _b !== void 0 ? _b : 0) + contentMinHeight + this.resizer.offsetHeight;
26368
26740
  this.lockSelect();
26369
26741
  this.__addGlobalResizeListeners();
26370
26742
  if (this.e) {
@@ -26373,13 +26745,25 @@ _config_js__WEBPACK_IMPORTED_MODULE_13__.Config.prototype.controls.dialog = {
26373
26745
  */ this.e.fire(this, 'startResize');
26374
26746
  }
26375
26747
  }
26748
+ /**
26749
+ * The width `box` takes with its content on one line. The header and
26750
+ * footer are flex rows as wide as the dialog, so the footer's
26751
+ * `scrollWidth` was the dialog's width and kept it from getting any
26752
+ * narrower
26753
+ */ __contentWidth(box) {
26754
+ const { width } = box.style;
26755
+ box.style.width = 'max-content';
26756
+ const contentWidth = box.offsetWidth;
26757
+ box.style.width = width;
26758
+ return contentWidth;
26759
+ }
26376
26760
  __addGlobalResizeListeners() {
26377
26761
  const self1 = this;
26378
26762
  self1.e.on(self1.ow, 'pointermove touchmove', self1.__onMouseMove).on(self1.ow, 'pointerup touchend', self1.__onMouseUp);
26379
26763
  }
26380
26764
  __removeGlobalResizeListeners() {
26381
26765
  const self1 = this;
26382
- self1.e.off(self1.ow, 'mousemove pointermove', self1.__onMouseMove).off(self1.ow, 'mouseup pointerup', self1.__onMouseUp);
26766
+ self1.e.off(self1.ow, 'pointermove touchmove', self1.__onMouseMove).off(self1.ow, 'pointerup touchend', self1.__onMouseUp);
26383
26767
  }
26384
26768
  /**
26385
26769
  * Specifies the size of the window
@@ -30859,23 +31243,15 @@ StatusBar = __decorate([
30859
31243
  /* harmony export */ });
30860
31244
  /* harmony import */ var _core_component_index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(91907);
30861
31245
  /* harmony import */ var _core_constants_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(82758);
30862
- /* harmony import */ var _core_decorators_index_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(65478);
30863
- /* harmony import */ var _core_dom_index_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(22732);
30864
- /* harmony import */ var _core_global_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(580);
30865
- /* harmony import */ var _core_helpers_index_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(21537);
30866
- /* harmony import */ var _core_helpers_utils_css_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(41180);
31246
+ /* harmony import */ var _core_dom_index_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(22732);
31247
+ /* harmony import */ var _core_global_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(580);
31248
+ /* harmony import */ var _core_helpers_index_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(21537);
31249
+ /* harmony import */ var _core_helpers_utils_css_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(41180);
30867
31250
  /*!
30868
31251
  * Jodit Editor (https://xdsoft.net/jodit/)
30869
31252
  * Released under MIT see LICENSE.txt in the project root for license information.
30870
31253
  * Copyright (c) 2013-2026 Valerii Chupurnov. All rights reserved. https://xdsoft.net
30871
- */ var __decorate = undefined && undefined.__decorate || function(decorators, target, key, desc) {
30872
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
30873
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
30874
- else for(var i = decorators.length - 1; i >= 0; i--)if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
30875
- return c > 3 && r && Object.defineProperty(target, key, r), r;
30876
- };
30877
-
30878
-
31254
+ */
30879
31255
 
30880
31256
 
30881
31257
 
@@ -30886,19 +31262,10 @@ class Table extends _core_component_index_js__WEBPACK_IMPORTED_MODULE_0__.ViewCo
30886
31262
  /** @override */ className() {
30887
31263
  return 'Table';
30888
31264
  }
30889
- __recalculateStyles() {
30890
- const style = (0,_core_global_js__WEBPACK_IMPORTED_MODULE_4__.getContainer)(this.j, Table, 'style', true);
30891
- const selectors = [];
30892
- this.selected.forEach((td)=>{
30893
- const selector = (0,_core_helpers_index_js__WEBPACK_IMPORTED_MODULE_5__.cssPath)(td);
30894
- selector && selectors.push(selector);
30895
- });
30896
- style.innerHTML = selectors.length ? selectors.join(',') + `{${this.jodit.options.table.selectionCellStyle}}` : '';
30897
- }
30898
31265
  addSelection(td) {
30899
31266
  this.selected.add(td);
30900
31267
  this.__recalculateStyles();
30901
- const table = _core_dom_index_js__WEBPACK_IMPORTED_MODULE_3__.Dom.closest(td, 'table', this.j.editor);
31268
+ const table = _core_dom_index_js__WEBPACK_IMPORTED_MODULE_2__.Dom.closest(td, 'table', this.j.editor);
30902
31269
  if (table) {
30903
31270
  const cells = Table.__selectedByTable.get(table) || new Set();
30904
31271
  cells.add(td);
@@ -30908,7 +31275,7 @@ class Table extends _core_component_index_js__WEBPACK_IMPORTED_MODULE_0__.ViewCo
30908
31275
  removeSelection(td) {
30909
31276
  this.selected.delete(td);
30910
31277
  this.__recalculateStyles();
30911
- const table = _core_dom_index_js__WEBPACK_IMPORTED_MODULE_3__.Dom.closest(td, 'table', this.j.editor);
31278
+ const table = _core_dom_index_js__WEBPACK_IMPORTED_MODULE_2__.Dom.closest(td, 'table', this.j.editor);
30912
31279
  if (table) {
30913
31280
  const cells = Table.__selectedByTable.get(table);
30914
31281
  if (cells) {
@@ -30922,11 +31289,11 @@ class Table extends _core_component_index_js__WEBPACK_IMPORTED_MODULE_0__.ViewCo
30922
31289
  /**
30923
31290
  * Returns array of selected cells
30924
31291
  */ getAllSelectedCells() {
30925
- return (0,_core_helpers_index_js__WEBPACK_IMPORTED_MODULE_5__.toArray)(this.selected);
31292
+ return (0,_core_helpers_index_js__WEBPACK_IMPORTED_MODULE_4__.toArray)(this.selected);
30926
31293
  }
30927
31294
  static __getSelectedCellsByTable(table) {
30928
31295
  const cells = Table.__selectedByTable.get(table);
30929
- return cells ? (0,_core_helpers_index_js__WEBPACK_IMPORTED_MODULE_5__.toArray)(cells) : [];
31296
+ return cells ? (0,_core_helpers_index_js__WEBPACK_IMPORTED_MODULE_4__.toArray)(cells) : [];
30930
31297
  }
30931
31298
  /** @override **/ destruct() {
30932
31299
  this.selected.clear();
@@ -30953,7 +31320,7 @@ class Table extends _core_component_index_js__WEBPACK_IMPORTED_MODULE_0__.ViewCo
30953
31320
  const matrix = [
30954
31321
  []
30955
31322
  ];
30956
- const rows = (0,_core_helpers_index_js__WEBPACK_IMPORTED_MODULE_5__.toArray)(table.rows);
31323
+ const rows = (0,_core_helpers_index_js__WEBPACK_IMPORTED_MODULE_4__.toArray)(table.rows);
30957
31324
  const setCell = (cell, i)=>{
30958
31325
  if (matrix[i] === undefined) {
30959
31326
  matrix[i] = [];
@@ -30976,7 +31343,7 @@ class Table extends _core_component_index_js__WEBPACK_IMPORTED_MODULE_0__.ViewCo
30976
31343
  }
30977
31344
  };
30978
31345
  for(let i = 0; i < rows.length; i += 1){
30979
- const cells = (0,_core_helpers_index_js__WEBPACK_IMPORTED_MODULE_5__.toArray)(rows[i].cells);
31346
+ const cells = (0,_core_helpers_index_js__WEBPACK_IMPORTED_MODULE_4__.toArray)(rows[i].cells);
30980
31347
  for(let j = 0; j < cells.length; j += 1){
30981
31348
  if (setCell(cells[j], i) === false) {
30982
31349
  return matrix;
@@ -31026,34 +31393,34 @@ class Table extends _core_component_index_js__WEBPACK_IMPORTED_MODULE_0__.ViewCo
31026
31393
  row = create.element('tr');
31027
31394
  for(let j = 0; j < columnsCount; j += 1){
31028
31395
  const cell = create.element('td');
31029
- _core_dom_index_js__WEBPACK_IMPORTED_MODULE_3__.Dom.append(cell, create.element('br'));
31030
- _core_dom_index_js__WEBPACK_IMPORTED_MODULE_3__.Dom.append(row, cell);
31396
+ _core_dom_index_js__WEBPACK_IMPORTED_MODULE_2__.Dom.append(cell, create.element('br'));
31397
+ _core_dom_index_js__WEBPACK_IMPORTED_MODULE_2__.Dom.append(row, cell);
31031
31398
  }
31032
31399
  } else {
31033
31400
  row = line.cloneNode(true);
31034
- _core_dom_index_js__WEBPACK_IMPORTED_MODULE_3__.Dom.each(line, (cell)=>{
31035
- if (!_core_dom_index_js__WEBPACK_IMPORTED_MODULE_3__.Dom.isCell(cell)) {
31401
+ _core_dom_index_js__WEBPACK_IMPORTED_MODULE_2__.Dom.each(line, (cell)=>{
31402
+ if (!_core_dom_index_js__WEBPACK_IMPORTED_MODULE_2__.Dom.isCell(cell)) {
31036
31403
  return;
31037
31404
  }
31038
- const rowspan = (0,_core_helpers_index_js__WEBPACK_IMPORTED_MODULE_5__.attr)(cell, 'rowspan');
31405
+ const rowspan = (0,_core_helpers_index_js__WEBPACK_IMPORTED_MODULE_4__.attr)(cell, 'rowspan');
31039
31406
  if (rowspan && parseInt(rowspan, 10) > 1) {
31040
31407
  const newRowSpan = parseInt(rowspan, 10) - 1;
31041
- (0,_core_helpers_index_js__WEBPACK_IMPORTED_MODULE_5__.attr)(cell, 'rowspan', newRowSpan > 1 ? newRowSpan : null);
31408
+ (0,_core_helpers_index_js__WEBPACK_IMPORTED_MODULE_4__.attr)(cell, 'rowspan', newRowSpan > 1 ? newRowSpan : null);
31042
31409
  }
31043
31410
  });
31044
- _core_dom_index_js__WEBPACK_IMPORTED_MODULE_3__.Dom.each(row, (cell)=>{
31045
- if (_core_dom_index_js__WEBPACK_IMPORTED_MODULE_3__.Dom.isCell(cell)) {
31046
- _core_dom_index_js__WEBPACK_IMPORTED_MODULE_3__.Dom.detach(cell);
31047
- _core_dom_index_js__WEBPACK_IMPORTED_MODULE_3__.Dom.append(cell, create.element('br'));
31411
+ _core_dom_index_js__WEBPACK_IMPORTED_MODULE_2__.Dom.each(row, (cell)=>{
31412
+ if (_core_dom_index_js__WEBPACK_IMPORTED_MODULE_2__.Dom.isCell(cell)) {
31413
+ _core_dom_index_js__WEBPACK_IMPORTED_MODULE_2__.Dom.detach(cell);
31414
+ _core_dom_index_js__WEBPACK_IMPORTED_MODULE_2__.Dom.append(cell, create.element('br'));
31048
31415
  }
31049
31416
  });
31050
31417
  }
31051
31418
  if (after && line && line.nextSibling) {
31052
- _core_dom_index_js__WEBPACK_IMPORTED_MODULE_3__.Dom.after(line, row);
31419
+ _core_dom_index_js__WEBPACK_IMPORTED_MODULE_2__.Dom.after(line, row);
31053
31420
  } else if (!after && line) {
31054
- _core_dom_index_js__WEBPACK_IMPORTED_MODULE_3__.Dom.before(line, row);
31421
+ _core_dom_index_js__WEBPACK_IMPORTED_MODULE_2__.Dom.before(line, row);
31055
31422
  } else {
31056
- _core_dom_index_js__WEBPACK_IMPORTED_MODULE_3__.Dom.append(_core_dom_index_js__WEBPACK_IMPORTED_MODULE_3__.Dom.first(table, (node)=>_core_dom_index_js__WEBPACK_IMPORTED_MODULE_3__.Dom.isTag(node, 'tbody')) || table, row);
31423
+ _core_dom_index_js__WEBPACK_IMPORTED_MODULE_2__.Dom.append(_core_dom_index_js__WEBPACK_IMPORTED_MODULE_2__.Dom.first(table, (node)=>_core_dom_index_js__WEBPACK_IMPORTED_MODULE_2__.Dom.isTag(node, 'tbody')) || table, row);
31057
31424
  }
31058
31425
  }
31059
31426
  /**
@@ -31081,7 +31448,7 @@ class Table extends _core_component_index_js__WEBPACK_IMPORTED_MODULE_0__.ViewCo
31081
31448
  while(box[rowIndex + 1][nextCell] === cell){
31082
31449
  nextCell += 1;
31083
31450
  }
31084
- const nextRow = _core_dom_index_js__WEBPACK_IMPORTED_MODULE_3__.Dom.next(cell.parentNode, (elm)=>_core_dom_index_js__WEBPACK_IMPORTED_MODULE_3__.Dom.isTag(elm, 'tr'), table);
31451
+ const nextRow = _core_dom_index_js__WEBPACK_IMPORTED_MODULE_2__.Dom.next(cell.parentNode, (elm)=>_core_dom_index_js__WEBPACK_IMPORTED_MODULE_2__.Dom.isTag(elm, 'tr'), table);
31085
31452
  if (nextRow) {
31086
31453
  // `box[rowIndex + 1][nextCell]` is the cell that
31087
31454
  // logically follows the moved cell in the next row, but
@@ -31098,21 +31465,21 @@ class Table extends _core_component_index_js__WEBPACK_IMPORTED_MODULE_0__.ViewCo
31098
31465
  }
31099
31466
  }
31100
31467
  if (referenceCell) {
31101
- _core_dom_index_js__WEBPACK_IMPORTED_MODULE_3__.Dom.before(referenceCell, cell);
31468
+ _core_dom_index_js__WEBPACK_IMPORTED_MODULE_2__.Dom.before(referenceCell, cell);
31102
31469
  } else {
31103
- _core_dom_index_js__WEBPACK_IMPORTED_MODULE_3__.Dom.append(nextRow, cell);
31470
+ _core_dom_index_js__WEBPACK_IMPORTED_MODULE_2__.Dom.append(nextRow, cell);
31104
31471
  }
31105
31472
  }
31106
31473
  }
31107
31474
  } else {
31108
- _core_dom_index_js__WEBPACK_IMPORTED_MODULE_3__.Dom.safeRemove(cell);
31475
+ _core_dom_index_js__WEBPACK_IMPORTED_MODULE_2__.Dom.safeRemove(cell);
31109
31476
  }
31110
31477
  if (dec && (cell.parentNode === row || cell !== box[rowIndex][j - 1])) {
31111
31478
  const rowSpan = cell.rowSpan;
31112
- (0,_core_helpers_index_js__WEBPACK_IMPORTED_MODULE_5__.attr)(cell, 'rowspan', rowSpan - 1 > 1 ? rowSpan - 1 : null);
31479
+ (0,_core_helpers_index_js__WEBPACK_IMPORTED_MODULE_4__.attr)(cell, 'rowspan', rowSpan - 1 > 1 ? rowSpan - 1 : null);
31113
31480
  }
31114
31481
  });
31115
- _core_dom_index_js__WEBPACK_IMPORTED_MODULE_3__.Dom.safeRemove(row);
31482
+ _core_dom_index_js__WEBPACK_IMPORTED_MODULE_2__.Dom.safeRemove(row);
31116
31483
  }
31117
31484
  /**
31118
31485
  * Remove row
@@ -31123,7 +31490,7 @@ class Table extends _core_component_index_js__WEBPACK_IMPORTED_MODULE_0__.ViewCo
31123
31490
  * Insert column before / after all the columns containing the selected cells
31124
31491
  */ appendColumn(table, selectedCell, insertAfter = true) {
31125
31492
  const box = Table.__formalMatrix(table);
31126
- if (!insertAfter && _core_dom_index_js__WEBPACK_IMPORTED_MODULE_3__.Dom.isCell(selectedCell.previousElementSibling)) {
31493
+ if (!insertAfter && _core_dom_index_js__WEBPACK_IMPORTED_MODULE_2__.Dom.isCell(selectedCell.previousElementSibling)) {
31127
31494
  return this.appendColumn(table, selectedCell.previousElementSibling, true);
31128
31495
  }
31129
31496
  const [, formalCol] = Table.__formalCoordinate(table, selectedCell, insertAfter);
@@ -31133,11 +31500,11 @@ class Table extends _core_component_index_js__WEBPACK_IMPORTED_MODULE_0__.ViewCo
31133
31500
  const cells = box[i];
31134
31501
  if (cells[columnIndex] !== cells[newColumnIndex] || columnIndex === newColumnIndex) {
31135
31502
  const cell = this.j.createInside.element('td');
31136
- _core_dom_index_js__WEBPACK_IMPORTED_MODULE_3__.Dom.append(cell, this.j.createInside.element('br'));
31503
+ _core_dom_index_js__WEBPACK_IMPORTED_MODULE_2__.Dom.append(cell, this.j.createInside.element('br'));
31137
31504
  if (insertAfter) {
31138
- _core_dom_index_js__WEBPACK_IMPORTED_MODULE_3__.Dom.after(cells[columnIndex], cell);
31505
+ _core_dom_index_js__WEBPACK_IMPORTED_MODULE_2__.Dom.after(cells[columnIndex], cell);
31139
31506
  } else {
31140
- _core_dom_index_js__WEBPACK_IMPORTED_MODULE_3__.Dom.before(cells[columnIndex], cell);
31507
+ _core_dom_index_js__WEBPACK_IMPORTED_MODULE_2__.Dom.before(cells[columnIndex], cell);
31141
31508
  }
31142
31509
  if (cells[columnIndex].rowSpan > 1) {
31143
31510
  cell.rowSpan = cells[columnIndex].rowSpan;
@@ -31159,11 +31526,11 @@ class Table extends _core_component_index_js__WEBPACK_IMPORTED_MODULE_0__.ViewCo
31159
31526
  } else if (j + 1 < cells.length && box[i][j + 1] === td) {
31160
31527
  dec = true;
31161
31528
  } else {
31162
- _core_dom_index_js__WEBPACK_IMPORTED_MODULE_3__.Dom.safeRemove(td);
31529
+ _core_dom_index_js__WEBPACK_IMPORTED_MODULE_2__.Dom.safeRemove(td);
31163
31530
  }
31164
31531
  if (dec && (i - 1 < 0 || td !== box[i - 1][j])) {
31165
31532
  const colSpan = td.colSpan;
31166
- (0,_core_helpers_index_js__WEBPACK_IMPORTED_MODULE_5__.attr)(td, 'colspan', colSpan - 1 > 1 ? (colSpan - 1).toString() : null);
31533
+ (0,_core_helpers_index_js__WEBPACK_IMPORTED_MODULE_4__.attr)(td, 'colspan', colSpan - 1 > 1 ? (colSpan - 1).toString() : null);
31167
31534
  }
31168
31535
  });
31169
31536
  }
@@ -31240,13 +31607,13 @@ class Table extends _core_component_index_js__WEBPACK_IMPORTED_MODULE_0__.ViewCo
31240
31607
  continue; // broken table
31241
31608
  }
31242
31609
  if (box[i][j].hasAttribute('rowspan') && box[i][j].rowSpan === 1) {
31243
- (0,_core_helpers_index_js__WEBPACK_IMPORTED_MODULE_5__.attr)(box[i][j], 'rowspan', null);
31610
+ (0,_core_helpers_index_js__WEBPACK_IMPORTED_MODULE_4__.attr)(box[i][j], 'rowspan', null);
31244
31611
  }
31245
31612
  if (box[i][j].hasAttribute('colspan') && box[i][j].colSpan === 1) {
31246
- (0,_core_helpers_index_js__WEBPACK_IMPORTED_MODULE_5__.attr)(box[i][j], 'colspan', null);
31613
+ (0,_core_helpers_index_js__WEBPACK_IMPORTED_MODULE_4__.attr)(box[i][j], 'colspan', null);
31247
31614
  }
31248
- if (box[i][j].hasAttribute('class') && !(0,_core_helpers_index_js__WEBPACK_IMPORTED_MODULE_5__.attr)(box[i][j], 'class')) {
31249
- (0,_core_helpers_index_js__WEBPACK_IMPORTED_MODULE_5__.attr)(box[i][j], 'class', null);
31615
+ if (box[i][j].hasAttribute('class') && !(0,_core_helpers_index_js__WEBPACK_IMPORTED_MODULE_4__.attr)(box[i][j], 'class')) {
31616
+ (0,_core_helpers_index_js__WEBPACK_IMPORTED_MODULE_4__.attr)(box[i][j], 'class', null);
31250
31617
  }
31251
31618
  }
31252
31619
  }
@@ -31320,10 +31687,10 @@ class Table extends _core_component_index_js__WEBPACK_IMPORTED_MODULE_0__.ViewCo
31320
31687
  return;
31321
31688
  }
31322
31689
  alreadyMerged.add(td);
31323
- if (i === bound[0][0] && (0,_core_helpers_utils_css_js__WEBPACK_IMPORTED_MODULE_6__.cssInline)(td, 'width')) {
31690
+ if (i === bound[0][0] && (0,_core_helpers_utils_css_js__WEBPACK_IMPORTED_MODULE_5__.cssInline)(td, 'width')) {
31324
31691
  w += td.offsetWidth;
31325
31692
  }
31326
- if ((0,_core_helpers_index_js__WEBPACK_IMPORTED_MODULE_5__.trim)(cell.innerHTML.replace(/<br(\/)?>/g, '')) !== '') {
31693
+ if ((0,_core_helpers_index_js__WEBPACK_IMPORTED_MODULE_4__.trim)(cell.innerHTML.replace(/<br(\/)?>/g, '')) !== '') {
31327
31694
  html.push(cell.innerHTML);
31328
31695
  }
31329
31696
  if (cs > 1) {
@@ -31362,9 +31729,9 @@ class Table extends _core_component_index_js__WEBPACK_IMPORTED_MODULE_0__.ViewCo
31362
31729
  alreadyMerged.delete(first);
31363
31730
  Table.__unmark(__marked);
31364
31731
  Table.__normalizeTable(table);
31365
- (0,_core_helpers_index_js__WEBPACK_IMPORTED_MODULE_5__.toArray)(table.rows).forEach((tr)=>{
31732
+ (0,_core_helpers_index_js__WEBPACK_IMPORTED_MODULE_4__.toArray)(table.rows).forEach((tr)=>{
31366
31733
  if (!tr.cells.length) {
31367
- _core_dom_index_js__WEBPACK_IMPORTED_MODULE_3__.Dom.safeRemove(tr);
31734
+ _core_dom_index_js__WEBPACK_IMPORTED_MODULE_2__.Dom.safeRemove(tr);
31368
31735
  }
31369
31736
  });
31370
31737
  }
@@ -31380,7 +31747,7 @@ class Table extends _core_component_index_js__WEBPACK_IMPORTED_MODULE_0__.ViewCo
31380
31747
  const __marked = [];
31381
31748
  Table.__getSelectedCellsByTable(table).forEach((cell)=>{
31382
31749
  td = jodit.createInside.element('td');
31383
- _core_dom_index_js__WEBPACK_IMPORTED_MODULE_3__.Dom.append(td, jodit.createInside.element('br'));
31750
+ _core_dom_index_js__WEBPACK_IMPORTED_MODULE_2__.Dom.append(td, jodit.createInside.element('br'));
31384
31751
  tr = jodit.createInside.element('tr');
31385
31752
  coord = Table.__formalCoordinate(table, cell);
31386
31753
  if (cell.rowSpan < 2) {
@@ -31389,8 +31756,8 @@ class Table extends _core_component_index_js__WEBPACK_IMPORTED_MODULE_0__.ViewCo
31389
31756
  Table.__mark(tdElm, 'rowspan', tdElm.rowSpan + 1, __marked);
31390
31757
  }
31391
31758
  });
31392
- _core_dom_index_js__WEBPACK_IMPORTED_MODULE_3__.Dom.after(_core_dom_index_js__WEBPACK_IMPORTED_MODULE_3__.Dom.closest(cell, 'tr', table), tr);
31393
- _core_dom_index_js__WEBPACK_IMPORTED_MODULE_3__.Dom.append(tr, td);
31759
+ _core_dom_index_js__WEBPACK_IMPORTED_MODULE_2__.Dom.after(_core_dom_index_js__WEBPACK_IMPORTED_MODULE_2__.Dom.closest(cell, 'tr', table), tr);
31760
+ _core_dom_index_js__WEBPACK_IMPORTED_MODULE_2__.Dom.append(tr, td);
31394
31761
  } else {
31395
31762
  Table.__mark(cell, 'rowspan', cell.rowSpan - 1, __marked);
31396
31763
  Table.__formalMatrix(table, (tdElm, i, j)=>{
@@ -31402,9 +31769,9 @@ class Table extends _core_component_index_js__WEBPACK_IMPORTED_MODULE_0__.ViewCo
31402
31769
  }
31403
31770
  });
31404
31771
  if (after) {
31405
- _core_dom_index_js__WEBPACK_IMPORTED_MODULE_3__.Dom.after(after, td);
31772
+ _core_dom_index_js__WEBPACK_IMPORTED_MODULE_2__.Dom.after(after, td);
31406
31773
  } else {
31407
- _core_dom_index_js__WEBPACK_IMPORTED_MODULE_3__.Dom.prepend(parent, td);
31774
+ _core_dom_index_js__WEBPACK_IMPORTED_MODULE_2__.Dom.prepend(parent, td);
31408
31775
  }
31409
31776
  }
31410
31777
  if (cell.colSpan > 1) {
@@ -31435,12 +31802,12 @@ class Table extends _core_component_index_js__WEBPACK_IMPORTED_MODULE_0__.ViewCo
31435
31802
  Table.__mark(cell, 'colspan', cell.colSpan - 1, __marked);
31436
31803
  }
31437
31804
  td = jodit.createInside.element('td');
31438
- _core_dom_index_js__WEBPACK_IMPORTED_MODULE_3__.Dom.append(td, jodit.createInside.element('br'));
31805
+ _core_dom_index_js__WEBPACK_IMPORTED_MODULE_2__.Dom.append(td, jodit.createInside.element('br'));
31439
31806
  if (cell.rowSpan > 1) {
31440
31807
  Table.__mark(td, 'rowspan', cell.rowSpan, __marked);
31441
31808
  }
31442
31809
  const oldWidth = cell.offsetWidth; // get old width
31443
- _core_dom_index_js__WEBPACK_IMPORTED_MODULE_3__.Dom.after(cell, td);
31810
+ _core_dom_index_js__WEBPACK_IMPORTED_MODULE_2__.Dom.after(cell, td);
31444
31811
  percentage = oldWidth / table.offsetWidth / 2;
31445
31812
  Table.__mark(cell, 'width', (percentage * 100).toFixed(_core_constants_js__WEBPACK_IMPORTED_MODULE_1__.ACCURACY) + '%', __marked);
31446
31813
  Table.__mark(td, 'width', (percentage * 100).toFixed(_core_constants_js__WEBPACK_IMPORTED_MODULE_1__.ACCURACY) + '%', __marked);
@@ -31496,22 +31863,22 @@ class Table extends _core_component_index_js__WEBPACK_IMPORTED_MODULE_0__.ViewCo
31496
31863
  const value = dict[key];
31497
31864
  switch(key){
31498
31865
  case 'remove':
31499
- _core_dom_index_js__WEBPACK_IMPORTED_MODULE_3__.Dom.safeRemove(cell);
31866
+ _core_dom_index_js__WEBPACK_IMPORTED_MODULE_2__.Dom.safeRemove(cell);
31500
31867
  break;
31501
31868
  case 'rowspan':
31502
- (0,_core_helpers_index_js__WEBPACK_IMPORTED_MODULE_5__.attr)(cell, 'rowspan', (0,_core_helpers_index_js__WEBPACK_IMPORTED_MODULE_5__.isNumber)(value) && value > 1 ? value : null);
31869
+ (0,_core_helpers_index_js__WEBPACK_IMPORTED_MODULE_4__.attr)(cell, 'rowspan', (0,_core_helpers_index_js__WEBPACK_IMPORTED_MODULE_4__.isNumber)(value) && value > 1 ? value : null);
31503
31870
  break;
31504
31871
  case 'colspan':
31505
- (0,_core_helpers_index_js__WEBPACK_IMPORTED_MODULE_5__.attr)(cell, 'colspan', (0,_core_helpers_index_js__WEBPACK_IMPORTED_MODULE_5__.isNumber)(value) && value > 1 ? value : null);
31872
+ (0,_core_helpers_index_js__WEBPACK_IMPORTED_MODULE_4__.attr)(cell, 'colspan', (0,_core_helpers_index_js__WEBPACK_IMPORTED_MODULE_4__.isNumber)(value) && value > 1 ? value : null);
31506
31873
  break;
31507
31874
  case 'width':
31508
31875
  if (value == null) {
31509
31876
  cell.style.removeProperty('width');
31510
- if (!(0,_core_helpers_index_js__WEBPACK_IMPORTED_MODULE_5__.attr)(cell, 'style')) {
31511
- (0,_core_helpers_index_js__WEBPACK_IMPORTED_MODULE_5__.attr)(cell, 'style', null);
31877
+ if (!(0,_core_helpers_index_js__WEBPACK_IMPORTED_MODULE_4__.attr)(cell, 'style')) {
31878
+ (0,_core_helpers_index_js__WEBPACK_IMPORTED_MODULE_4__.attr)(cell, 'style', null);
31512
31879
  }
31513
31880
  } else {
31514
- (0,_core_helpers_index_js__WEBPACK_IMPORTED_MODULE_5__.css)(cell, 'width', value.toString());
31881
+ (0,_core_helpers_index_js__WEBPACK_IMPORTED_MODULE_4__.css)(cell, 'width', value.toString());
31515
31882
  }
31516
31883
  break;
31517
31884
  }
@@ -31524,12 +31891,23 @@ class Table extends _core_component_index_js__WEBPACK_IMPORTED_MODULE_0__.ViewCo
31524
31891
  constructor(){
31525
31892
  super(...arguments);
31526
31893
  this.selected = new Set();
31894
+ /**
31895
+ * Rewrite the `<style>` that marks the selected cells once for all the
31896
+ * cells (un)selected in one go: a drag over a block of cells unmarks and
31897
+ * marks every one of them on each move. `@debounce()` was never applied,
31898
+ * as a Table never reaches `ready`
31899
+ */ this.__recalculateStyles = this.async.microDebounce(()=>{
31900
+ const style = (0,_core_global_js__WEBPACK_IMPORTED_MODULE_3__.getContainer)(this.j, Table, 'style', true);
31901
+ const selectors = [];
31902
+ this.selected.forEach((td)=>{
31903
+ const selector = (0,_core_helpers_index_js__WEBPACK_IMPORTED_MODULE_4__.cssPath)(td);
31904
+ selector && selectors.push(selector);
31905
+ });
31906
+ style.innerHTML = selectors.length ? selectors.join(',') + `{${this.jodit.options.table.selectionCellStyle}}` : '';
31907
+ });
31527
31908
  }
31528
31909
  }
31529
31910
  Table.__selectedByTable = new WeakMap();
31530
- __decorate([
31531
- (0,_core_decorators_index_js__WEBPACK_IMPORTED_MODULE_2__.debounce)()
31532
- ], Table.prototype, "__recalculateStyles", null);
31533
31911
  const instance = (j)=>j.getInstance('Table', j.o);
31534
31912
 
31535
31913
 
@@ -34993,6 +35371,10 @@ _core_global_js__WEBPACK_IMPORTED_MODULE_2__.pluginSystem.add('backspace', backs
34993
35371
  mainClosestBox = nextBox;
34994
35372
  }
34995
35373
  if (_core_dom_dom_js__WEBPACK_IMPORTED_MODULE_1__.Dom.isElement(mainClosestBox) && _core_dom_dom_js__WEBPACK_IMPORTED_MODULE_1__.Dom.isContentEditable(mainClosestBox, jodit.editor)) {
35374
+ // A table cell is never joined with its neighbour
35375
+ if (_core_dom_dom_js__WEBPACK_IMPORTED_MODULE_1__.Dom.up(fakeNode, _core_dom_dom_js__WEBPACK_IMPORTED_MODULE_1__.Dom.isCell, mainClosestBox, true)) {
35376
+ return false;
35377
+ }
34996
35378
  const sibling = _core_dom_dom_js__WEBPACK_IMPORTED_MODULE_1__.Dom.findNotEmptySibling(mainClosestBox, backspace);
34997
35379
  // A line break before the cursor is a single unit: remove it instead of
34998
35380
  // merging the current element into the (void) `<br>`, which used to move
@@ -35002,13 +35384,48 @@ _core_global_js__WEBPACK_IMPORTED_MODULE_2__.pluginSystem.add('backspace', backs
35002
35384
  jodit.s.setCursorBefore(fakeNode);
35003
35385
  return true;
35004
35386
  }
35005
- if (sibling && (checkMoveListContent(jodit, mainClosestBox, sibling, backspace) || moveContentAndRemoveEmpty(jodit, mainClosestBox, resolveTableSibling(sibling, backspace), backspace))) {
35387
+ // Backspace leaves a block after a table alone, as Word does, rather
35388
+ // than moving its text into the last cell
35389
+ if (backspace && _core_dom_dom_js__WEBPACK_IMPORTED_MODULE_1__.Dom.isTag(sibling, 'table')) {
35390
+ jodit.s.setCursorBefore(fakeNode);
35391
+ return true;
35392
+ }
35393
+ const box = findCaretBox(fakeNode, mainClosestBox);
35394
+ if (sibling && (checkPullNextLine(jodit, fakeNode, box, sibling, backspace) || checkMoveListContent(jodit, box, sibling, backspace) || moveContentAndRemoveEmpty(jodit, box, findEdgeBlock(resolveTableSibling(sibling, backspace), backspace, jodit.editor), backspace))) {
35006
35395
  jodit.s.setCursorBefore(fakeNode);
35007
35396
  return true;
35008
35397
  }
35009
35398
  }
35010
35399
  return false;
35011
35400
  }
35401
+ /**
35402
+ * The block holding the caret inside the box that has the sibling, so
35403
+ * `<p>one</p><div><p>|two</p></div>` joins the two paragraphs instead of
35404
+ * moving the whole `<div>` into the first one. For a list item that is its
35405
+ * list, which the list cases handle.
35406
+ */ function findCaretBox(fakeNode, mainClosestBox) {
35407
+ const block = _core_dom_dom_js__WEBPACK_IMPORTED_MODULE_1__.Dom.up(fakeNode, _core_dom_dom_js__WEBPACK_IMPORTED_MODULE_1__.Dom.isBlock, mainClosestBox);
35408
+ if (!block) {
35409
+ return mainClosestBox;
35410
+ }
35411
+ return _core_dom_dom_js__WEBPACK_IMPORTED_MODULE_1__.Dom.isLeaf(block) && block.parentElement ? block.parentElement : block;
35412
+ }
35413
+ /**
35414
+ * The innermost block on the sibling's edge facing the caret, so the
35415
+ * content is joined to text: `<div><p>one</p></div><p>|two</p>` gives
35416
+ * `<div><p>one|two</p></div>`
35417
+ */ function findEdgeBlock(sibling, backspace, root) {
35418
+ let block = sibling;
35419
+ while(block){
35420
+ const edge = backspace ? block.lastChild : block.firstChild;
35421
+ const child = edge && _core_dom_dom_js__WEBPACK_IMPORTED_MODULE_1__.Dom.isEmptyTextNode(edge) ? _core_dom_dom_js__WEBPACK_IMPORTED_MODULE_1__.Dom.findNotEmptySibling(edge, backspace) : edge;
35422
+ if (!_core_dom_dom_js__WEBPACK_IMPORTED_MODULE_1__.Dom.isBlock(child) || _core_dom_dom_js__WEBPACK_IMPORTED_MODULE_1__.Dom.isTag(child, _core_constants_js__WEBPACK_IMPORTED_MODULE_0__.INSEPARABLE_TAGS) || _core_dom_dom_js__WEBPACK_IMPORTED_MODULE_1__.Dom.isTag(child, 'table') || !_core_dom_dom_js__WEBPACK_IMPORTED_MODULE_1__.Dom.isContentEditable(child, root)) {
35423
+ return block;
35424
+ }
35425
+ block = child;
35426
+ }
35427
+ return block;
35428
+ }
35012
35429
  /**
35013
35430
  * Content cannot be merged into the `<table>` element itself — it would land
35014
35431
  * between the table sections (after `</tbody>`), which is invalid HTML and
@@ -35025,6 +35442,40 @@ _core_global_js__WEBPACK_IMPORTED_MODULE_2__.pluginSystem.add('backspace', backs
35025
35442
  });
35026
35443
  return cells.length ? cells[backspace ? cells.length - 1 : 0] : null;
35027
35444
  }
35445
+ /**
35446
+ * Delete at the edge of a list pulls the next line up to the caret, as the
35447
+ * browsers do, instead of moving the caret's line into the next block:
35448
+ * `<ul><li>one|</li></ul><p>two</p>` gives `<ul><li>one|two</li></ul>`, and
35449
+ * `<p>one|</p><ul><li>two</li></ul>` gives `<p>one|two</p>`
35450
+ * @private
35451
+ */ function checkPullNextLine(jodit, fakeNode, box, sibling, backspace) {
35452
+ if (backspace || !(_core_dom_dom_js__WEBPACK_IMPORTED_MODULE_1__.Dom.isList(box) || _core_dom_dom_js__WEBPACK_IMPORTED_MODULE_1__.Dom.isList(sibling))) {
35453
+ return false;
35454
+ }
35455
+ const target = _core_dom_dom_js__WEBPACK_IMPORTED_MODULE_1__.Dom.up(fakeNode, _core_dom_dom_js__WEBPACK_IMPORTED_MODULE_1__.Dom.isBlock, box, true);
35456
+ const source = _core_dom_dom_js__WEBPACK_IMPORTED_MODULE_1__.Dom.isList(sibling) ? sibling.firstElementChild : sibling;
35457
+ if (!target || !source || _core_dom_dom_js__WEBPACK_IMPORTED_MODULE_1__.Dom.isTag(source, _core_constants_js__WEBPACK_IMPORTED_MODULE_0__.INSEPARABLE_TAGS) || _core_dom_dom_js__WEBPACK_IMPORTED_MODULE_1__.Dom.isTag(source, 'table')) {
35458
+ return false;
35459
+ }
35460
+ if (!_core_dom_dom_js__WEBPACK_IMPORTED_MODULE_1__.Dom.isEmpty(source)) {
35461
+ const line = [];
35462
+ for(let node = source.firstChild; node && !_core_dom_dom_js__WEBPACK_IMPORTED_MODULE_1__.Dom.isBlock(node); node = node.nextSibling){
35463
+ line.push(node);
35464
+ }
35465
+ if (!line.length) {
35466
+ return false;
35467
+ }
35468
+ const filter = (0,_helpers_js__WEBPACK_IMPORTED_MODULE_2__.getMoveFilter)(jodit);
35469
+ line.forEach((node)=>filter(node) ? _core_dom_dom_js__WEBPACK_IMPORTED_MODULE_1__.Dom.append(target, node) : _core_dom_dom_js__WEBPACK_IMPORTED_MODULE_1__.Dom.safeRemove(node));
35470
+ }
35471
+ let remove = source;
35472
+ while(remove && remove !== jodit.editor && _core_dom_dom_js__WEBPACK_IMPORTED_MODULE_1__.Dom.isEmpty(remove)){
35473
+ const parent = remove.parentElement;
35474
+ _core_dom_dom_js__WEBPACK_IMPORTED_MODULE_1__.Dom.safeRemove(remove);
35475
+ remove = parent;
35476
+ }
35477
+ return true;
35478
+ }
35028
35479
  function checkMoveListContent(jodit, mainClosestBox, sibling, backspace) {
35029
35480
  // Process UL/LI/OL cases
35030
35481
  const siblingIsList = _core_dom_dom_js__WEBPACK_IMPORTED_MODULE_1__.Dom.isTag(sibling, _core_constants_js__WEBPACK_IMPORTED_MODULE_0__.LIST_TAGS);
@@ -36154,6 +36605,19 @@ class cleanHtml extends _core_plugin_plugin_js__WEBPACK_IMPORTED_MODULE_5__.Plug
36154
36605
  this.walker.setWork(editor.editor);
36155
36606
  this.currentSelectionNode = editor.s.current();
36156
36607
  }
36608
+ /**
36609
+ * Typing into an empty block (`<p><br></p>`) replaces its `<br>`, but the
36610
+ * browser keeps the `<br>` when the caret is in an invisible-space text
36611
+ * node in front of it, as Jodit leaves the caret in many of the empty
36612
+ * blocks it makes (a cleared editor, a heading in an empty table cell).
36613
+ * See #1632
36614
+ */ onInputRemovePlaceholderBr(event) {
36615
+ var _a;
36616
+ if (!this.isEditMode || event.type === 'input' && (event.isComposing || !((_a = event.inputType) === null || _a === void 0 ? void 0 : _a.startsWith('insert')))) {
36617
+ return;
36618
+ }
36619
+ ;(0,_helpers_index_js__WEBPACK_IMPORTED_MODULE_8__.removePlaceholderBr)(this.j);
36620
+ }
36157
36621
  startWalker() {
36158
36622
  const { jodit } = this;
36159
36623
  const allow = (0,_helpers_index_js__WEBPACK_IMPORTED_MODULE_8__.getHash)(this.j.o.cleanHTML.allowTags);
@@ -36326,6 +36790,12 @@ __decorate([
36326
36790
  ':keydown'
36327
36791
  ])
36328
36792
  ], cleanHtml.prototype, "onChangeCleanHTML", null);
36793
+ __decorate([
36794
+ (0,_core_decorators_index_js__WEBPACK_IMPORTED_MODULE_0__.watch)([
36795
+ ':input',
36796
+ 'jodit.editor:compositionend'
36797
+ ])
36798
+ ], cleanHtml.prototype, "onInputRemovePlaceholderBr", null);
36329
36799
  __decorate([
36330
36800
  (0,_core_decorators_index_js__WEBPACK_IMPORTED_MODULE_0__.hook)('ready')
36331
36801
  ], cleanHtml.prototype, "startWalker", null);
@@ -36457,12 +36927,14 @@ _config_js__WEBPACK_IMPORTED_MODULE_0__.Config.prototype.controls.eraser = {
36457
36927
  /* harmony export */ getHash: function() { return /* reexport safe */ _get_hash_js__WEBPACK_IMPORTED_MODULE_0__.getHash; },
36458
36928
  /* harmony export */ removeFormatForCollapsedSelection: function() { return /* reexport safe */ _remove_format_remove_format_for_collapsed_selection_js__WEBPACK_IMPORTED_MODULE_1__.removeFormatForCollapsedSelection; },
36459
36929
  /* harmony export */ removeFormatForSelection: function() { return /* reexport safe */ _remove_format_remove_format_for_selection_js__WEBPACK_IMPORTED_MODULE_2__.removeFormatForSelection; },
36460
- /* harmony export */ visitNodeWalker: function() { return /* reexport safe */ _visitor_visit_node_walker_js__WEBPACK_IMPORTED_MODULE_3__.visitNodeWalker; }
36930
+ /* harmony export */ removePlaceholderBr: function() { return /* reexport safe */ _remove_placeholder_br_js__WEBPACK_IMPORTED_MODULE_3__.removePlaceholderBr; },
36931
+ /* harmony export */ visitNodeWalker: function() { return /* reexport safe */ _visitor_visit_node_walker_js__WEBPACK_IMPORTED_MODULE_4__.visitNodeWalker; }
36461
36932
  /* harmony export */ });
36462
36933
  /* harmony import */ var _get_hash_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(83447);
36463
36934
  /* harmony import */ var _remove_format_remove_format_for_collapsed_selection_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(84272);
36464
36935
  /* harmony import */ var _remove_format_remove_format_for_selection_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(42312);
36465
- /* harmony import */ var _visitor_visit_node_walker_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(39516);
36936
+ /* harmony import */ var _remove_placeholder_br_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(56385);
36937
+ /* harmony import */ var _visitor_visit_node_walker_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(39516);
36466
36938
  /*!
36467
36939
  * Jodit Editor (https://xdsoft.net/jodit/)
36468
36940
  * Released under MIT see LICENSE.txt in the project root for license information.
@@ -36476,6 +36948,7 @@ _config_js__WEBPACK_IMPORTED_MODULE_0__.Config.prototype.controls.eraser = {
36476
36948
 
36477
36949
 
36478
36950
 
36951
+
36479
36952
  /***/ }),
36480
36953
 
36481
36954
  /***/ 15908:
@@ -36628,6 +37101,62 @@ const VIMEO_EMBED = /^(https?:)?\/\/player\.vimeo\.com\/video\//i;
36628
37101
  }
36629
37102
 
36630
37103
 
37104
+ /***/ }),
37105
+
37106
+ /***/ 56385:
37107
+ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
37108
+
37109
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
37110
+ /* harmony export */ removePlaceholderBr: function() { return /* binding */ removePlaceholderBr; }
37111
+ /* harmony export */ });
37112
+ /* harmony import */ var _core_constants_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(82758);
37113
+ /* harmony import */ var _core_dom_dom_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(2748);
37114
+ /* harmony import */ var _core_helpers_string_trim_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(49055);
37115
+ /*!
37116
+ * Jodit Editor (https://xdsoft.net/jodit/)
37117
+ * Released under MIT see LICENSE.txt in the project root for license information.
37118
+ * Copyright (c) 2013-2026 Valerii Chupurnov. All rights reserved. https://xdsoft.net
37119
+ */
37120
+
37121
+
37122
+ function lastNode(node) {
37123
+ let last = node.lastChild;
37124
+ while(_core_dom_dom_js__WEBPACK_IMPORTED_MODULE_1__.Dom.isText(last) && !last.nodeValue){
37125
+ last = last.previousSibling;
37126
+ }
37127
+ return last;
37128
+ }
37129
+ /**
37130
+ * Remove the `<br>` that kept the block with the caret open while it was
37131
+ * empty, once text has gone into the block: when the block is one line of
37132
+ * text that ends in that `<br>`, the `<br>` adds nothing to it
37133
+ * @private
37134
+ */ function removePlaceholderBr(jodit) {
37135
+ var _a;
37136
+ const block = _core_dom_dom_js__WEBPACK_IMPORTED_MODULE_1__.Dom.closest(jodit.s.current(), _core_dom_dom_js__WEBPACK_IMPORTED_MODULE_1__.Dom.isBlock, jodit.editor);
37137
+ if (!block || !(0,_core_helpers_string_trim_js__WEBPACK_IMPORTED_MODULE_2__.trim)((_a = block.textContent) !== null && _a !== void 0 ? _a : '')) {
37138
+ return;
37139
+ }
37140
+ let br = lastNode(block);
37141
+ while(_core_dom_dom_js__WEBPACK_IMPORTED_MODULE_1__.Dom.isElement(br) && !_core_dom_dom_js__WEBPACK_IMPORTED_MODULE_1__.Dom.isTag(br, _core_constants_js__WEBPACK_IMPORTED_MODULE_0__.INSEPARABLE_TAGS) && !_core_dom_dom_js__WEBPACK_IMPORTED_MODULE_1__.Dom.isBlock(br)){
37142
+ br = lastNode(br);
37143
+ }
37144
+ if (!_core_dom_dom_js__WEBPACK_IMPORTED_MODULE_1__.Dom.isTag(br, 'br')) {
37145
+ return;
37146
+ }
37147
+ // Another line break, a block, an image or an embed means the `<br>` may
37148
+ // end an empty line, or give the caret a place after the embed
37149
+ const isOneLineOfText = _core_dom_dom_js__WEBPACK_IMPORTED_MODULE_1__.Dom.each(block, (node)=>{
37150
+ if (node !== br && _core_dom_dom_js__WEBPACK_IMPORTED_MODULE_1__.Dom.isElement(node) && (_core_dom_dom_js__WEBPACK_IMPORTED_MODULE_1__.Dom.isTag(node, _core_constants_js__WEBPACK_IMPORTED_MODULE_0__.INSEPARABLE_TAGS) || _core_dom_dom_js__WEBPACK_IMPORTED_MODULE_1__.Dom.isBlock(node) || _core_dom_dom_js__WEBPACK_IMPORTED_MODULE_1__.Dom.isHTMLElement(node) && !node.isContentEditable)) {
37151
+ return false;
37152
+ }
37153
+ });
37154
+ if (isOneLineOfText) {
37155
+ _core_dom_dom_js__WEBPACK_IMPORTED_MODULE_1__.Dom.safeRemove(br);
37156
+ }
37157
+ }
37158
+
37159
+
36631
37160
  /***/ }),
36632
37161
 
36633
37162
  /***/ 82558:
@@ -38269,6 +38798,11 @@ class deleteCommand extends _core_plugin_index_js__WEBPACK_IMPORTED_MODULE_4__.P
38269
38798
  }
38270
38799
  jodit.s.expandSelection();
38271
38800
  const range = jodit.s.range;
38801
+ const caret = this.__clearSelectedCells(range);
38802
+ if (caret && range.collapsed) {
38803
+ jodit.s.selectRange(caret);
38804
+ return false;
38805
+ }
38272
38806
  range.deleteContents();
38273
38807
  const fake = jodit.createInside.fake();
38274
38808
  range.insertNode(fake);
@@ -38278,21 +38812,98 @@ class deleteCommand extends _core_plugin_index_js__WEBPACK_IMPORTED_MODULE_4__.P
38278
38812
  range.setStartBefore(fake);
38279
38813
  range.collapse(true);
38280
38814
  this.__moveCursorInEditableSibling(jodit, leftSibling, fake, range);
38281
- this.__addBrInEmptyBlock(fake, rightSibling, range);
38815
+ this.__addBrInEmptyBlock(fake, range);
38282
38816
  _core_dom_index_js__WEBPACK_IMPORTED_MODULE_0__.Dom.safeRemove(fake);
38283
- jodit.s.selectRange(range);
38817
+ jodit.s.selectRange(caret !== null && caret !== void 0 ? caret : range);
38284
38818
  return false;
38285
38819
  }
38820
+ /**
38821
+ * A selection that starts or ends in a table cell clears the selected part
38822
+ * of each cell it covers and keeps the cells, as the browsers do.
38823
+ * `deleteContents` would remove the cells it fully covers, and the cells
38824
+ * it cuts would then be merged as blocks. The range is moved out of those
38825
+ * tables, so only the content between them is left to delete.
38826
+ *
38827
+ * Returns where the caret goes, or null when no table is involved
38828
+ */ __clearSelectedCells(range) {
38829
+ const { editor, createInside } = this.j;
38830
+ const startCell = _core_dom_index_js__WEBPACK_IMPORTED_MODULE_0__.Dom.closest(range.startContainer, _core_dom_index_js__WEBPACK_IMPORTED_MODULE_0__.Dom.isCell, editor);
38831
+ const endCell = _core_dom_index_js__WEBPACK_IMPORTED_MODULE_0__.Dom.closest(range.endContainer, _core_dom_index_js__WEBPACK_IMPORTED_MODULE_0__.Dom.isCell, editor);
38832
+ if (startCell === endCell) {
38833
+ return null;
38834
+ }
38835
+ const startTable = _core_dom_index_js__WEBPACK_IMPORTED_MODULE_0__.Dom.closest(startCell, 'table', editor);
38836
+ const endTable = _core_dom_index_js__WEBPACK_IMPORTED_MODULE_0__.Dom.closest(endCell, 'table', editor);
38837
+ const caret = range.cloneRange();
38838
+ caret.collapse(true);
38839
+ const parts = [];
38840
+ const addParts = (table)=>{
38841
+ (0,_core_helpers_index_js__WEBPACK_IMPORTED_MODULE_2__.toArray)(table.rows).flatMap((row)=>(0,_core_helpers_index_js__WEBPACK_IMPORTED_MODULE_2__.toArray)(row.cells)).filter((cell)=>range.intersectsNode(cell)).forEach((cell)=>{
38842
+ const part = range.cloneRange();
38843
+ if (!_core_dom_index_js__WEBPACK_IMPORTED_MODULE_0__.Dom.isOrContains(cell, range.startContainer)) {
38844
+ part.setStart(cell, 0);
38845
+ }
38846
+ if (!_core_dom_index_js__WEBPACK_IMPORTED_MODULE_0__.Dom.isOrContains(cell, range.endContainer)) {
38847
+ part.setEnd(cell, cell.childNodes.length);
38848
+ }
38849
+ parts.push([
38850
+ cell,
38851
+ part
38852
+ ]);
38853
+ });
38854
+ };
38855
+ if (startTable) {
38856
+ addParts(startTable);
38857
+ if (startTable === endTable) {
38858
+ range.collapse(true);
38859
+ } else {
38860
+ range.setStartAfter(startTable);
38861
+ }
38862
+ }
38863
+ if (endTable && endTable !== startTable) {
38864
+ addParts(endTable);
38865
+ range.setEndBefore(endTable);
38866
+ }
38867
+ parts.forEach(([cell, part])=>{
38868
+ part.deleteContents();
38869
+ if (_core_dom_index_js__WEBPACK_IMPORTED_MODULE_0__.Dom.isEmpty(cell)) {
38870
+ _core_dom_index_js__WEBPACK_IMPORTED_MODULE_0__.Dom.detach(cell);
38871
+ _core_dom_index_js__WEBPACK_IMPORTED_MODULE_0__.Dom.append(cell, createInside.element('br'));
38872
+ }
38873
+ });
38874
+ return startTable ? caret : null;
38875
+ }
38286
38876
  __moveContentInLeftSibling(fake, leftSibling, rightSibling) {
38287
38877
  leftSibling = this.__defineRightLeftBox(leftSibling);
38878
+ // Nothing is moved into a table, and a block left empty after it goes
38879
+ if (_core_dom_index_js__WEBPACK_IMPORTED_MODULE_0__.Dom.isTag(leftSibling, 'table')) {
38880
+ if (_core_dom_index_js__WEBPACK_IMPORTED_MODULE_0__.Dom.isBlock(rightSibling) && _core_dom_index_js__WEBPACK_IMPORTED_MODULE_0__.Dom.isEmpty(rightSibling)) {
38881
+ _core_dom_index_js__WEBPACK_IMPORTED_MODULE_0__.Dom.safeRemove(rightSibling);
38882
+ }
38883
+ return;
38884
+ }
38288
38885
  if (!_core_dom_index_js__WEBPACK_IMPORTED_MODULE_0__.Dom.isList(rightSibling) && !_core_dom_index_js__WEBPACK_IMPORTED_MODULE_0__.Dom.isTag(rightSibling, 'table') && _core_dom_index_js__WEBPACK_IMPORTED_MODULE_0__.Dom.isBlock(rightSibling) && _core_dom_index_js__WEBPACK_IMPORTED_MODULE_0__.Dom.isBlock(leftSibling)) {
38289
38886
  _core_dom_index_js__WEBPACK_IMPORTED_MODULE_0__.Dom.append(leftSibling, fake);
38290
38887
  _core_dom_index_js__WEBPACK_IMPORTED_MODULE_0__.Dom.moveContent(rightSibling, leftSibling);
38291
38888
  _core_dom_index_js__WEBPACK_IMPORTED_MODULE_0__.Dom.safeRemove(rightSibling);
38292
38889
  }
38293
- // Remove empty right LI
38294
- if (_core_dom_index_js__WEBPACK_IMPORTED_MODULE_0__.Dom.isList(rightSibling) && _core_dom_index_js__WEBPACK_IMPORTED_MODULE_0__.Dom.isLeaf(rightSibling.firstElementChild) && _core_dom_index_js__WEBPACK_IMPORTED_MODULE_0__.Dom.isEmpty(rightSibling.firstElementChild)) {
38295
- _core_dom_index_js__WEBPACK_IMPORTED_MODULE_0__.Dom.safeRemove(rightSibling.firstElementChild);
38890
+ if (_core_dom_index_js__WEBPACK_IMPORTED_MODULE_0__.Dom.isList(rightSibling) && _core_dom_index_js__WEBPACK_IMPORTED_MODULE_0__.Dom.isLeaf(rightSibling.firstElementChild)) {
38891
+ const item = rightSibling.firstElementChild;
38892
+ // What's left of the right list's first item joins the left block,
38893
+ // up to a list nested in the item
38894
+ if (!_core_dom_index_js__WEBPACK_IMPORTED_MODULE_0__.Dom.isEmpty(item) && _core_dom_index_js__WEBPACK_IMPORTED_MODULE_0__.Dom.isBlock(leftSibling)) {
38895
+ _core_dom_index_js__WEBPACK_IMPORTED_MODULE_0__.Dom.append(leftSibling, fake);
38896
+ while(item.firstChild && !_core_dom_index_js__WEBPACK_IMPORTED_MODULE_0__.Dom.isBlock(item.firstChild)){
38897
+ _core_dom_index_js__WEBPACK_IMPORTED_MODULE_0__.Dom.append(leftSibling, item.firstChild);
38898
+ }
38899
+ }
38900
+ // Remove empty right LI
38901
+ if (_core_dom_index_js__WEBPACK_IMPORTED_MODULE_0__.Dom.isEmpty(item)) {
38902
+ _core_dom_index_js__WEBPACK_IMPORTED_MODULE_0__.Dom.safeRemove(item);
38903
+ }
38904
+ if (_core_dom_index_js__WEBPACK_IMPORTED_MODULE_0__.Dom.isEmpty(rightSibling)) {
38905
+ _core_dom_index_js__WEBPACK_IMPORTED_MODULE_0__.Dom.safeRemove(rightSibling);
38906
+ }
38296
38907
  }
38297
38908
  }
38298
38909
  /**
@@ -38309,8 +38920,8 @@ class deleteCommand extends _core_plugin_index_js__WEBPACK_IMPORTED_MODULE_4__.P
38309
38920
  return lastLeaf;
38310
38921
  }
38311
38922
  /**
38312
- * Add BR in empty blocks left and right(for table cell)
38313
- */ __addBrInEmptyBlock(fake, rightSibling, range) {
38923
+ * Add BR in the empty block left at the caret
38924
+ */ __addBrInEmptyBlock(fake, range) {
38314
38925
  const jodit = this.j;
38315
38926
  if (fake.isConnected && _core_dom_index_js__WEBPACK_IMPORTED_MODULE_0__.Dom.isBlock(fake.parentNode) && !fake.nextSibling && !fake.previousSibling) {
38316
38927
  const br = jodit.createInside.element('br');
@@ -38318,13 +38929,6 @@ class deleteCommand extends _core_plugin_index_js__WEBPACK_IMPORTED_MODULE_4__.P
38318
38929
  range.setStartBefore(br);
38319
38930
  range.collapse(true);
38320
38931
  }
38321
- // Add BR in the right empty table cell
38322
- if (_core_dom_index_js__WEBPACK_IMPORTED_MODULE_0__.Dom.isTag(rightSibling, 'table')) {
38323
- const firstCell = (0,_core_helpers_index_js__WEBPACK_IMPORTED_MODULE_2__.$$)('td,th', rightSibling).shift();
38324
- if (_core_dom_index_js__WEBPACK_IMPORTED_MODULE_0__.Dom.isCell(firstCell) && _core_dom_index_js__WEBPACK_IMPORTED_MODULE_0__.Dom.isEmpty(firstCell)) {
38325
- _core_dom_index_js__WEBPACK_IMPORTED_MODULE_0__.Dom.append(firstCell, jodit.createInside.element('br'));
38326
- }
38327
- }
38328
38932
  }
38329
38933
  __moveCursorInEditableSibling(jodit, leftSibling, fake, range) {
38330
38934
  var _a;
@@ -39772,7 +40376,18 @@ function focus(editor) {
39772
40376
  editor.e.on('afterInit', ()=>{
39773
40377
  if (editor.o.autofocus) {
39774
40378
  if (editor.defaultTimeout) {
39775
- editor.async.setTimeout(focus, 300);
40379
+ // A click or key in the editor during the delay has put the
40380
+ // caret where the user wants it, so autofocus leaves it there
40381
+ const userInput = 'mousedown touchstart keydown';
40382
+ const cancel = ()=>{
40383
+ editor.async.clearTimeout(timeout);
40384
+ editor.e.off(userInput, cancel);
40385
+ };
40386
+ const timeout = editor.async.setTimeout(()=>{
40387
+ editor.e.off(userInput, cancel);
40388
+ focus();
40389
+ }, 300);
40390
+ editor.e.on(userInput, cancel);
39776
40391
  } else {
39777
40392
  focus();
39778
40393
  }
@@ -41067,7 +41682,7 @@ _config_js__WEBPACK_IMPORTED_MODULE_0__.Config.prototype.iframeBaseUrl = '';
41067
41682
  _config_js__WEBPACK_IMPORTED_MODULE_0__.Config.prototype.iframeTitle = 'Jodit Editor';
41068
41683
  _config_js__WEBPACK_IMPORTED_MODULE_0__.Config.prototype.iframeDoctype = '<!DOCTYPE html>';
41069
41684
  _config_js__WEBPACK_IMPORTED_MODULE_0__.Config.prototype.iframeDefaultSrc = 'about:blank';
41070
- _config_js__WEBPACK_IMPORTED_MODULE_0__.Config.prototype.iframeStyle = 'html{' + 'margin:0;' + 'padding:0;' + 'min-height: 100%;' + '}' + 'body{' + 'box-sizing:border-box;' + 'font-size:13px;' + 'line-height:1.6;' + 'padding:10px;' + 'margin:0;' + 'background:transparent;' + 'color:#000;' + 'position:' + 'relative;' + 'z-index:2;' + 'user-select:auto;' + 'margin:0px;' + 'overflow:auto;' + 'outline:none;' + '}' + 'table{' + 'width:100%;' + 'border:none;' + 'border-collapse:collapse;' + 'empty-cells: show;' + 'max-width: 100%;' + '}' + 'th,td{' + 'padding: 2px 5px;' + 'border:1px solid #ccc;' + '-webkit-user-select:text;' + '-moz-user-select:text;' + '-ms-user-select:text;' + 'user-select:text' + '}' + 'p{' + 'margin-top:0;' + '}' + '[data-jodit_iframe_wrapper]{' + 'display: block;' + 'user-select: none;' + 'position: relative;' + '}' + '[data-jodit_iframe_wrapper] iframe{' + 'position: relative;' + '}' + '[data-jodit_iframe_wrapper]:after {' + 'position:absolute;' + 'content:"";' + 'z-index:1;' + 'top:0;' + 'left:0;' + 'right: 0;' + 'bottom: 0;' + 'cursor: pointer;' + 'display: block;' + 'background: rgba(0, 0, 0, 0);' + '} ' + '[data-jodit_iframe_wrapper][data-jodit-wrapper_active=true] iframe{' + 'z-index: 2;' + '}' + '.jodit-wysiwyg_image-selected::selection,' + '.jodit-wysiwyg_image-selected *:not(img)::selection{' + 'background:transparent' + '}' + '.jodit_disabled{' + 'user-select: none;' + '-o-user-select: none;' + '-moz-user-select: none;' + '-khtml-user-select: none;' + '-webkit-user-select: none;' + '-ms-user-select: none' + '}';
41685
+ _config_js__WEBPACK_IMPORTED_MODULE_0__.Config.prototype.iframeStyle = 'html{' + 'margin:0;' + 'padding:0;' + 'min-height: 100%;' + '}' + 'body{' + 'box-sizing:border-box;' + 'font-size:13px;' + 'line-height:1.6;' + 'padding:10px;' + 'margin:0;' + 'background:transparent;' + 'color:#000;' + 'position:' + 'relative;' + 'z-index:2;' + 'user-select:auto;' + 'margin:0px;' + 'overflow:auto;' + 'outline:none;' + '}' + 'table{' + 'width:100%;' + 'border:none;' + 'border-collapse:collapse;' + 'empty-cells: show;' + 'max-width: 100%;' + '}' + 'th,td{' + 'padding: 2px 5px;' + 'border:1px solid #ccc;' + '-webkit-user-select:text;' + '-moz-user-select:text;' + '-ms-user-select:text;' + 'user-select:text' + '}' + 'p{' + 'margin-top:0;' + '}' + '.jodit_disabled{' + 'user-select: none;' + '-o-user-select: none;' + '-moz-user-select: none;' + '-khtml-user-select: none;' + '-webkit-user-select: none;' + '-ms-user-select: none' + '}';
41071
41686
  _config_js__WEBPACK_IMPORTED_MODULE_0__.Config.prototype.iframeCSSLinks = [];
41072
41687
  _config_js__WEBPACK_IMPORTED_MODULE_0__.Config.prototype.iframeSandbox = null;
41073
41688
 
@@ -41113,6 +41728,8 @@ _config_js__WEBPACK_IMPORTED_MODULE_0__.Config.prototype.iframeSandbox = null;
41113
41728
  (0,_core_helpers_index_js__WEBPACK_IMPORTED_MODULE_3__.attr)(link, 'rel', 'stylesheet');
41114
41729
  (0,_core_helpers_index_js__WEBPACK_IMPORTED_MODULE_3__.attr)(link, 'href', href);
41115
41730
  doc.head && _core_dom_dom_js__WEBPACK_IMPORTED_MODULE_1__.Dom.append(doc.head, link);
41731
+ // What plugins measured in the editing document changes once it's styled
41732
+ jodit.e.on(link, 'load', ()=>jodit.e.fire('resize'));
41116
41733
  });
41117
41734
  }
41118
41735
  if (opt.iframeStyle) {
@@ -41150,6 +41767,8 @@ _config_js__WEBPACK_IMPORTED_MODULE_0__.Config.prototype.iframeSandbox = null;
41150
41767
  (0,_core_helpers_index_js__WEBPACK_IMPORTED_MODULE_3__.attr)(doc.body, 'contenteditable', editor.getMode() !== _core_constants_js__WEBPACK_IMPORTED_MODULE_0__.MODE_SOURCE && !editor.getReadOnly() || null);
41151
41768
  };
41152
41769
  const clearMarkers = (html)=>{
41770
+ // The plugins' own styles, from `getContainer`, aren't part of the value
41771
+ html = html.replace(/<style[^>]+jodit-box[^>]*>[\s\S]*?<\/style>/gi, '');
41153
41772
  const bodyReg = /<body.*<\/body>/im, bodyMarker = '{%%BODY%%}', body = bodyReg.exec(html);
41154
41773
  if (body) {
41155
41774
  // remove markers
@@ -41174,7 +41793,10 @@ _config_js__WEBPACK_IMPORTED_MODULE_0__.Config.prototype.iframeSandbox = null;
41174
41793
  */ const replaceDocument = (html)=>{
41175
41794
  const inert = new DOMParser().parseFromString(html, 'text/html');
41176
41795
  editor.e.fire('safeHTML', inert.documentElement);
41796
+ // The plugins' own styles stay, as the value leaves them out
41797
+ const styles = (0,_core_helpers_index_js__WEBPACK_IMPORTED_MODULE_3__.$$)('style.jodit-box', doc.head);
41177
41798
  doc.replaceChild(doc.adoptNode(inert.documentElement), doc.documentElement);
41799
+ styles.forEach((style)=>_core_dom_dom_js__WEBPACK_IMPORTED_MODULE_1__.Dom.append(doc.head, style));
41178
41800
  };
41179
41801
  if (docMode) {
41180
41802
  const tag = editor.element.tagName;
@@ -41342,6 +41964,9 @@ const SELECTED_TAGS = new Set([
41342
41964
  */ class imageProcessor extends _core_plugin_index_js__WEBPACK_IMPORTED_MODULE_5__.Plugin {
41343
41965
  afterInit(jodit) {
41344
41966
  jodit.e.on(jodit.ed, 'selectionchange', this.onSelectionChange);
41967
+ // Over the highlight in `styles/reset.less`; the image keeps its own. It goes
41968
+ // in the editing document, so iframe mode has it whatever `iframeStyle` holds
41969
+ (0,_core_global_js__WEBPACK_IMPORTED_MODULE_3__.getContainer)(jodit, 'image-processor', 'style', true).textContent = `.jodit-wysiwyg.${IMAGE_SELECTED}::selection,` + `.jodit-wysiwyg.${IMAGE_SELECTED} *:not(img)::selection{background:transparent}`;
41345
41970
  }
41346
41971
  beforeDestruct(jodit) {
41347
41972
  jodit.e.off(jodit.ed, 'selectionchange', this.onSelectionChange);
@@ -44004,10 +44629,11 @@ const align = {
44004
44629
  /* harmony import */ var _core_global_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(580);
44005
44630
  /* harmony import */ var _core_helpers_index_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(21537);
44006
44631
  /* harmony import */ var _core_plugin_index_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(50911);
44007
- /* harmony import */ var _core_ui_index_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(67510);
44008
- /* harmony import */ var _core_ui_popup_index_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(61259);
44009
- /* harmony import */ var _modules_toolbar_factory_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(21491);
44010
- /* harmony import */ var _config_config_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(24526);
44632
+ /* harmony import */ var _core_selection_helpers_index_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(45124);
44633
+ /* harmony import */ var _core_ui_index_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(67510);
44634
+ /* harmony import */ var _core_ui_popup_index_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(61259);
44635
+ /* harmony import */ var _modules_toolbar_factory_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(21491);
44636
+ /* harmony import */ var _config_config_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(24526);
44011
44637
  function _define_property(obj, key, value) {
44012
44638
  if (key in obj) {
44013
44639
  Object.defineProperty(obj, key, {
@@ -44076,14 +44702,15 @@ function _object_spread_props(target, source) {
44076
44702
 
44077
44703
 
44078
44704
 
44705
+
44079
44706
  /**
44080
44707
  * Plugin for show inline popup dialog
44081
44708
  */ class inlinePopup extends _core_plugin_index_js__WEBPACK_IMPORTED_MODULE_4__.Plugin {
44082
44709
  get popup() {
44083
- return new _core_ui_popup_index_js__WEBPACK_IMPORTED_MODULE_6__.Popup(this.jodit, false);
44710
+ return new _core_ui_popup_index_js__WEBPACK_IMPORTED_MODULE_7__.Popup(this.jodit, false);
44084
44711
  }
44085
44712
  get toolbar() {
44086
- return (0,_modules_toolbar_factory_js__WEBPACK_IMPORTED_MODULE_7__.makeCollection)(this.jodit, this.popup);
44713
+ return (0,_modules_toolbar_factory_js__WEBPACK_IMPORTED_MODULE_8__.makeCollection)(this.jodit, this.popup);
44087
44714
  }
44088
44715
  onClick(node) {
44089
44716
  const elements = this.elmsList, mediaWrapper = (0,_core_helpers_index_js__WEBPACK_IMPORTED_MODULE_3__.getMediaWrapper)(this.j, node), target = mediaWrapper !== null && mediaWrapper !== void 0 ? mediaWrapper : _core_dom_index_js__WEBPACK_IMPORTED_MODULE_1__.Dom.isTag(node, 'img') ? node : _core_dom_index_js__WEBPACK_IMPORTED_MODULE_1__.Dom.closest(node, elements, this.j.editor);
@@ -44156,6 +44783,33 @@ function _object_spread_props(target, source) {
44156
44783
  onOutsideClick() {
44157
44784
  this.popup.close();
44158
44785
  }
44786
+ /**
44787
+ * A key that moves the caret off an element closes its popup, and one
44788
+ * that moves the caret into an element with a popup (a link) opens it,
44789
+ * as clicks do
44790
+ */ onKeyUp() {
44791
+ this.__followCaret();
44792
+ }
44793
+ __followCaret() {
44794
+ if (!(0,_core_selection_helpers_index_js__WEBPACK_IMPORTED_MODULE_5__.isMoved)(this.j, this.snapRange)) {
44795
+ return;
44796
+ }
44797
+ const { range } = this.j.s;
44798
+ const target = this.previousTarget;
44799
+ if (this.popup.isOpened && this.type !== 'selection' && target && !range.intersectsNode(target)) {
44800
+ this.popup.close();
44801
+ }
44802
+ const node = range.startContainer;
44803
+ const element = this.__elementAt(node);
44804
+ if (range.collapsed && element && element !== this.__keyDownElement) {
44805
+ this.onClick(node);
44806
+ }
44807
+ }
44808
+ /**
44809
+ * The element with a popup that holds `node`
44810
+ */ __elementAt(node) {
44811
+ return _core_dom_index_js__WEBPACK_IMPORTED_MODULE_1__.Dom.closest(node, this.elmsList, this.j.editor);
44812
+ }
44159
44813
  /**
44160
44814
  * Can show popup for this type
44161
44815
  */ canShowPopupForType(type) {
@@ -44195,12 +44849,28 @@ function _object_spread_props(target, source) {
44195
44849
  ], 'mousedown touchstart', this.__onDocumentMouseDown).on('closeAllPopups', this.__onCloseAllPopups);
44196
44850
  this.addListenersForElements();
44197
44851
  }
44852
+ onRecalcPositionPopup() {
44853
+ if (this.popup.isOpened && this.type !== 'selection' && this.previousTarget) {
44854
+ this.__reopenFor = this.previousTarget;
44855
+ }
44856
+ }
44198
44857
  __onDocumentMouseDown(e) {
44199
- if (this.popup.isOpened && this.type === 'selection' && e.target && _core_ui_index_js__WEBPACK_IMPORTED_MODULE_5__.UIElement.closestElement(e.target, _core_ui_popup_index_js__WEBPACK_IMPORTED_MODULE_6__.Popup)) {
44858
+ this.__reopenFor = null;
44859
+ if (this.popup.isOpened && this.type === 'selection' && e.target && _core_ui_index_js__WEBPACK_IMPORTED_MODULE_6__.UIElement.closestElement(e.target, _core_ui_popup_index_js__WEBPACK_IMPORTED_MODULE_7__.Popup)) {
44200
44860
  this.__reopenSelectionPopup = true;
44201
44861
  }
44202
44862
  }
44203
44863
  __onCloseAllPopups() {
44864
+ const target = this.__reopenFor;
44865
+ if (target) {
44866
+ this.__reopenFor = null;
44867
+ // After the popup's own `closeAllPopups` handler, as below
44868
+ this.j.async.setTimeout(()=>{
44869
+ if (this.j.editor.contains(target)) {
44870
+ this.onClick(target);
44871
+ }
44872
+ }, 1);
44873
+ }
44204
44874
  if (!this.__reopenSelectionPopup) {
44205
44875
  return;
44206
44876
  }
@@ -44237,11 +44907,16 @@ function _object_spread_props(target, source) {
44237
44907
  height: rect.height
44238
44908
  };
44239
44909
  }
44240
- onSelectionStart() {
44910
+ onSelectionStart(event) {
44911
+ // A key held down moves the caret on every repeat, with one keyup
44912
+ if (event === null || event === void 0 ? void 0 : event.repeat) {
44913
+ this.__followCaret();
44914
+ }
44241
44915
  this.snapRange = this.j.s.range.cloneRange();
44916
+ this.__keyDownElement = this.__elementAt(this.snapRange.startContainer);
44242
44917
  }
44243
44918
  onSelectionEnd(e) {
44244
- if (e && e.target && _core_ui_index_js__WEBPACK_IMPORTED_MODULE_5__.UIElement.closestElement(e.target, _core_ui_popup_index_js__WEBPACK_IMPORTED_MODULE_6__.Popup)) {
44919
+ if (e && e.target && _core_ui_index_js__WEBPACK_IMPORTED_MODULE_6__.UIElement.closestElement(e.target, _core_ui_popup_index_js__WEBPACK_IMPORTED_MODULE_7__.Popup)) {
44245
44920
  return;
44246
44921
  }
44247
44922
  const { snapRange } = this, { range } = this.j.s;
@@ -44325,7 +45000,13 @@ function _object_spread_props(target, source) {
44325
45000
  * command fires `closeAllPopups`, the toolbar should be shown again
44326
45001
  * while the selection is still there. See #1238
44327
45002
  */ this.__reopenSelectionPopup = false;
45003
+ /**
45004
+ * The alignment controls fire `recalcPositionPopup` once they have moved
45005
+ * the element, and their button then fires `closeAllPopups`. The popup
45006
+ * opens again beside the element, as the selection toolbar does
45007
+ */ this.__reopenFor = null;
44328
45008
  this.snapRange = null;
45009
+ this.__keyDownElement = null;
44329
45010
  this.elmsList = (0,_core_helpers_index_js__WEBPACK_IMPORTED_MODULE_3__.keys)(this.j.o.popup, false).filter((s)=>!this.isExcludedTarget(s));
44330
45011
  }
44331
45012
  }
@@ -44355,6 +45036,12 @@ __decorate([
44355
45036
  __decorate([
44356
45037
  (0,_core_decorators_index_js__WEBPACK_IMPORTED_MODULE_0__.watch)(':outsideClick')
44357
45038
  ], inlinePopup.prototype, "onOutsideClick", null);
45039
+ __decorate([
45040
+ (0,_core_decorators_index_js__WEBPACK_IMPORTED_MODULE_0__.watch)(':keyup')
45041
+ ], inlinePopup.prototype, "onKeyUp", null);
45042
+ __decorate([
45043
+ (0,_core_decorators_index_js__WEBPACK_IMPORTED_MODULE_0__.watch)(':recalcPositionPopup')
45044
+ ], inlinePopup.prototype, "onRecalcPositionPopup", null);
44358
45045
  __decorate([
44359
45046
  _core_decorators_index_js__WEBPACK_IMPORTED_MODULE_0__.autobind
44360
45047
  ], inlinePopup.prototype, "__onDocumentMouseDown", null);
@@ -46302,6 +46989,7 @@ _core_global_js__WEBPACK_IMPORTED_MODULE_1__.pluginSystem.add('mobile', mobile);
46302
46989
  /* harmony import */ var _config_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(6441);
46303
46990
  /* harmony import */ var _icons_ol_svg_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(13465);
46304
46991
  /* harmony import */ var _icons_ul_svg_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(50267);
46992
+ /* harmony import */ var _start_dialog_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(83086);
46305
46993
  /*!
46306
46994
  * Jodit Editor (https://xdsoft.net/jodit/)
46307
46995
  * Released under MIT see LICENSE.txt in the project root for license information.
@@ -46311,11 +46999,19 @@ _core_global_js__WEBPACK_IMPORTED_MODULE_1__.pluginSystem.add('mobile', mobile);
46311
46999
 
46312
47000
 
46313
47001
 
47002
+
47003
+ /**
47004
+ * The `ol` dropdown item that asks for the list's start number
47005
+ */ const START = 'start';
46314
47006
  const memoExec = (jodit, _, { control })=>{
46315
47007
  var _a;
46316
47008
  const key = `button${control.command}`;
46317
47009
  const value = (_a = control.args && control.args[0]) !== null && _a !== void 0 ? _a : (0,_core_helpers_utils_data_bind_js__WEBPACK_IMPORTED_MODULE_0__.dataBind)(jodit, key);
46318
- (0,_core_helpers_utils_data_bind_js__WEBPACK_IMPORTED_MODULE_0__.dataBind)(jodit, key, value);
47010
+ if (value === START) {
47011
+ (0,_start_dialog_js__WEBPACK_IMPORTED_MODULE_5__.openStartDialog)(jodit);
47012
+ return;
47013
+ }
47014
+ ;(0,_core_helpers_utils_data_bind_js__WEBPACK_IMPORTED_MODULE_0__.dataBind)(jodit, key, value);
46319
47015
  jodit.execCommand(control.command, false, value === 'default' ? null : value);
46320
47016
  };
46321
47017
  _core_ui_icon_js__WEBPACK_IMPORTED_MODULE_1__.Icon.set('ol', _icons_ol_svg_js__WEBPACK_IMPORTED_MODULE_3__["default"]).set('ul', _icons_ul_svg_js__WEBPACK_IMPORTED_MODULE_4__["default"]);
@@ -46345,9 +47041,14 @@ _config_js__WEBPACK_IMPORTED_MODULE_2__.Config.prototype.controls.ol = {
46345
47041
  'lower-greek': 'Lower Greek',
46346
47042
  'lower-roman': 'Lower Roman',
46347
47043
  'upper-alpha': 'Upper Alpha',
46348
- 'upper-roman': 'Upper Roman'
47044
+ 'upper-roman': 'Upper Roman',
47045
+ [START]: 'Start at...'
46349
47046
  },
46350
- exec: memoExec
47047
+ exec: memoExec,
47048
+ isChildDisabled: (jodit, button)=>{
47049
+ var _a;
47050
+ return ((_a = button.control.args) === null || _a === void 0 ? void 0 : _a[0]) === START && !(0,_start_dialog_js__WEBPACK_IMPORTED_MODULE_5__.closestOrderedList)(jodit);
47051
+ }
46351
47052
  };
46352
47053
 
46353
47054
 
@@ -46430,6 +47131,83 @@ __decorate([
46430
47131
  _core_global_js__WEBPACK_IMPORTED_MODULE_1__.pluginSystem.add('orderedList', orderedList);
46431
47132
 
46432
47133
 
47134
+ /***/ }),
47135
+
47136
+ /***/ 83086:
47137
+ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
47138
+
47139
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
47140
+ /* harmony export */ closestOrderedList: function() { return /* binding */ closestOrderedList; },
47141
+ /* harmony export */ openStartDialog: function() { return /* binding */ openStartDialog; }
47142
+ /* harmony export */ });
47143
+ /* harmony import */ var _core_dom_dom_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(2748);
47144
+ /* harmony import */ var _core_helpers_utils_attr_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(29960);
47145
+ /* harmony import */ var _core_ui_button_index_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(62843);
47146
+ /* harmony import */ var _core_ui_form_index_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(2525);
47147
+ /*!
47148
+ * Jodit Editor (https://xdsoft.net/jodit/)
47149
+ * Released under MIT see LICENSE.txt in the project root for license information.
47150
+ * Copyright (c) 2013-2026 Valerii Chupurnov. All rights reserved. https://xdsoft.net
47151
+ */
47152
+
47153
+
47154
+
47155
+ /**
47156
+ * The numbered list the selection is in
47157
+ */ function closestOrderedList(jodit) {
47158
+ const current = jodit.s.current();
47159
+ return current ? _core_dom_dom_js__WEBPACK_IMPORTED_MODULE_0__.Dom.closest(current, 'ol', jodit.editor) : null;
47160
+ }
47161
+ /**
47162
+ * Asks for the number of the first item of the list the selection is in,
47163
+ * and sets the list's `start`. The selection is put back when the dialog
47164
+ * closes, however it closes.
47165
+ */ function openStartDialog(jodit) {
47166
+ const list = closestOrderedList(jodit);
47167
+ if (!list) {
47168
+ return;
47169
+ }
47170
+ const dialog = jodit.dlg({
47171
+ resizable: false,
47172
+ closeOnClickOverlay: true
47173
+ });
47174
+ const input = new _core_ui_form_index_js__WEBPACK_IMPORTED_MODULE_3__.UIInput(jodit, {
47175
+ name: 'start',
47176
+ type: 'number',
47177
+ label: 'Number for the first item',
47178
+ value: list.start
47179
+ });
47180
+ const form = new _core_ui_form_index_js__WEBPACK_IMPORTED_MODULE_3__.UIForm(jodit, [
47181
+ new _core_ui_form_index_js__WEBPACK_IMPORTED_MODULE_3__.UIBlock(jodit, [
47182
+ input
47183
+ ])
47184
+ ]);
47185
+ form.container.classList.add('jodit-dialog_alert');
47186
+ form.onSubmit(({ start })=>{
47187
+ const value = start === '' ? 1 : parseInt(start, 10);
47188
+ if (isNaN(value)) {
47189
+ input.focus();
47190
+ return false;
47191
+ }
47192
+ dialog.close();
47193
+ (0,_core_helpers_utils_attr_js__WEBPACK_IMPORTED_MODULE_1__.attr)(list, 'start', value === 1 ? null : value);
47194
+ jodit.synchronizeValues();
47195
+ });
47196
+ jodit.s.save();
47197
+ dialog.e.on(dialog, 'afterClose', ()=>{
47198
+ jodit.s.focus();
47199
+ jodit.s.restore();
47200
+ });
47201
+ dialog.setFooter([
47202
+ (0,_core_ui_button_index_js__WEBPACK_IMPORTED_MODULE_2__.Button)(jodit, 'cancel', 'Cancel').onAction(()=>dialog.close()),
47203
+ (0,_core_ui_button_index_js__WEBPACK_IMPORTED_MODULE_2__.Button)(jodit, 'ok', 'Apply', 'primary').onAction(()=>form.submit())
47204
+ ]);
47205
+ dialog.open(form, jodit.i18n('Start numbering at'), true, true);
47206
+ input.focus();
47207
+ input.nativeInput.select();
47208
+ }
47209
+
47210
+
46433
47211
  /***/ }),
46434
47212
 
46435
47213
  /***/ 71842:
@@ -47250,6 +48028,10 @@ _config_js__WEBPACK_IMPORTED_MODULE_0__.Config.prototype.useInputsPlaceholder =
47250
48028
  return true;
47251
48029
  }
47252
48030
  const first = root.firstChild;
48031
+ // Firefox pads an empty editable body with a bare <br>
48032
+ if (_core_dom_dom_js__WEBPACK_IMPORTED_MODULE_2__.Dom.isTag(first, 'br') && !_core_dom_dom_js__WEBPACK_IMPORTED_MODULE_2__.Dom.next(first, Boolean, root)) {
48033
+ return true;
48034
+ }
47253
48035
  if (_core_constants_js__WEBPACK_IMPORTED_MODULE_0__.INSEPARABLE_TAGS.has((_a = first.nodeName) === null || _a === void 0 ? void 0 : _a.toLowerCase()) || /^(TABLE)$/i.test(first.nodeName)) {
47254
48036
  return false;
47255
48037
  }
@@ -47298,11 +48080,13 @@ _config_js__WEBPACK_IMPORTED_MODULE_0__.Config.prototype.useInputsPlaceholder =
47298
48080
  marginTop = parseInt(style2.getPropertyValue('margin-top'), 10);
47299
48081
  marginLeft = parseInt(style2.getPropertyValue('margin-left'), 10);
47300
48082
  (0,_core_helpers_utils_css_js__WEBPACK_IMPORTED_MODULE_6__.css)(this.placeholderElm, {
48083
+ fontFamily: style2.getPropertyValue('font-family'),
47301
48084
  fontSize: parseInt(style2.getPropertyValue('font-size'), 10),
47302
48085
  lineHeight: style2.getPropertyValue('line-height')
47303
48086
  });
47304
48087
  } else {
47305
48088
  (0,_core_helpers_utils_css_js__WEBPACK_IMPORTED_MODULE_6__.css)(this.placeholderElm, {
48089
+ fontFamily: style.getPropertyValue('font-family'),
47306
48090
  fontSize: parseInt(style.getPropertyValue('font-size'), 10),
47307
48091
  lineHeight: style.getPropertyValue('line-height')
47308
48092
  });
@@ -47350,7 +48134,7 @@ _config_js__WEBPACK_IMPORTED_MODULE_0__.Config.prototype.useInputsPlaceholder =
47350
48134
  this.placeholderElm.innerHTML = (0,_core_helpers_utils_attr_js__WEBPACK_IMPORTED_MODULE_5__.attr)(editor.element, 'placeholder') || '';
47351
48135
  }
47352
48136
  editor.e.fire('placeholder', this.placeholderElm.innerHTML);
47353
- editor.e.off('.placeholder').on('changePlace.placeholder', this.addNativeListeners).on('change.placeholder focus.placeholder keyup.placeholder mouseup.placeholder keydown.placeholder ' + 'mousedown.placeholder afterSetMode.placeholder changePlace.placeholder ' + 'internalChange.placeholder afterCommand.placeholder', this.toggle).on(window, 'load', this.toggle);
48137
+ editor.e.off('.placeholder').on('changePlace.placeholder', this.addNativeListeners).on('change.placeholder focus.placeholder keyup.placeholder mouseup.placeholder keydown.placeholder ' + 'mousedown.placeholder afterSetMode.placeholder changePlace.placeholder ' + 'internalChange.placeholder afterCommand.placeholder resize.placeholder', this.toggle).on(window, 'load', this.toggle);
47354
48138
  this.addNativeListeners();
47355
48139
  this.toggle();
47356
48140
  };
@@ -48204,7 +48988,10 @@ _config_js__WEBPACK_IMPORTED_MODULE_0__.Config.prototype.resizer = {
48204
48988
  /* harmony import */ var _core_helpers_index_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(21537);
48205
48989
  /* harmony import */ var _core_helpers_utils_css_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(41180);
48206
48990
  /* harmony import */ var _core_plugin_plugin_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(20356);
48207
- /* harmony import */ var _config_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(71675);
48991
+ /* harmony import */ var _core_selection_helpers_index_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(45124);
48992
+ /* harmony import */ var _core_ui_index_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(67510);
48993
+ /* harmony import */ var _core_ui_popup_index_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(61259);
48994
+ /* harmony import */ var _config_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(71675);
48208
48995
  /*!
48209
48996
  * Jodit Editor (https://xdsoft.net/jodit/)
48210
48997
  * Released under MIT see LICENSE.txt in the project root for license information.
@@ -48224,6 +49011,9 @@ _config_js__WEBPACK_IMPORTED_MODULE_0__.Config.prototype.resizer = {
48224
49011
 
48225
49012
 
48226
49013
 
49014
+
49015
+
49016
+
48227
49017
  const keyBInd = '__jodit-resizer_binded';
48228
49018
  /**
48229
49019
  * Reads a plain pixel value out of a `width`/`height` attribute.
@@ -48243,11 +49033,19 @@ const keyBInd = '__jodit-resizer_binded';
48243
49033
  */ function heightFollowsWidth(element) {
48244
49034
  return _core_dom_dom_js__WEBPACK_IMPORTED_MODULE_2__.Dom.isTag(element, 'video') && !(0,_core_helpers_index_js__WEBPACK_IMPORTED_MODULE_4__.attr)(element, 'height') && !(0,_core_helpers_utils_css_js__WEBPACK_IMPORTED_MODULE_5__.cssInline)(element, 'height');
48245
49035
  }
49036
+ const IFRAME_WRAPPER = '[data-jodit_iframe_wrapper]';
49037
+ /**
49038
+ * A click on an embed lands on its wrapper, so it selects the embed, until the
49039
+ * wrapper is active. While the editor is locked, as during resizing, the
49040
+ * wrapper takes the mouse again.
49041
+ */ const EMBED_WRAPPER_STYLE = `${IFRAME_WRAPPER}{position:relative;display:block;user-select:none}` + `${IFRAME_WRAPPER} iframe{position:relative}` + `${IFRAME_WRAPPER}::after{position:absolute;z-index:1;display:block;background:transparent;content:'';cursor:pointer;inset:0}` + `${IFRAME_WRAPPER}[data-jodit-wrapper_active=true] iframe{z-index:2}` + `.jodit_lock ${IFRAME_WRAPPER}[data-jodit-wrapper_active=true] iframe{z-index:1}`;
48246
49042
  /**
48247
49043
  * The module creates a supporting frame for resizing of the elements img and table
48248
49044
  */ class resizer extends _core_plugin_plugin_js__WEBPACK_IMPORTED_MODULE_6__.Plugin {
48249
49045
  /** @override */ afterInit(editor) {
48250
- ;(0,_core_helpers_index_js__WEBPACK_IMPORTED_MODULE_4__.$$)('div', this.rect).forEach((resizeHandle)=>{
49046
+ // It goes in the editing document, so iframe mode has it whatever `iframeStyle` holds
49047
+ (0,_core_global_js__WEBPACK_IMPORTED_MODULE_3__.getContainer)(editor, 'resizer', 'style', true).textContent = EMBED_WRAPPER_STYLE;
49048
+ (0,_core_helpers_index_js__WEBPACK_IMPORTED_MODULE_4__.$$)('div', this.rect).forEach((resizeHandle)=>{
48251
49049
  editor.e.on(resizeHandle, 'mousedown.resizer touchstart.resizer', this.onStartResizing.bind(this, resizeHandle));
48252
49050
  });
48253
49051
  _core_global_js__WEBPACK_IMPORTED_MODULE_3__.eventEmitter.on('hideHelpers', this.hide);
@@ -48255,7 +49053,11 @@ const keyBInd = '__jodit-resizer_binded';
48255
49053
  if (isReadOnly) {
48256
49054
  this.hide();
48257
49055
  }
48258
- }).on('afterInit changePlace', this.addEventListeners.bind(this)).on('afterGetValueFromEditor.resizer', (data)=>{
49056
+ }).on('afterInit changePlace', this.addEventListeners.bind(this))// Handlers without a namespace run first, ahead of those that
49057
+ // move the caret, as table-keyboard-navigation's do
49058
+ .on('keydown', this.onEditorKeyDown, {
49059
+ top: true
49060
+ }).on('afterGetValueFromEditor.resizer', (data)=>{
48259
49061
  const rgx = /<jodit[^>]+data-jodit_iframe_wrapper[^>]+>(.*?<iframe[^>]*>.*?<\/iframe>.*?)<\/jodit>/gi;
48260
49062
  if (rgx.test(data.value)) {
48261
49063
  data.value = data.value.replace(rgx, '$1');
@@ -48400,6 +49202,38 @@ const keyBInd = '__jodit-resizer_binded';
48400
49202
  e.stopImmediatePropagation();
48401
49203
  }
48402
49204
  }
49205
+ onEditorKeyDown(event) {
49206
+ // A key held down moves the caret on every repeat, with one keyup
49207
+ if (event === null || event === void 0 ? void 0 : event.repeat) {
49208
+ this.__followCaret();
49209
+ }
49210
+ this.__keyDownRange = this.j.s.range.cloneRange();
49211
+ this.__keyDownTable = this.__caretTable();
49212
+ }
49213
+ __caretTable() {
49214
+ return _core_dom_dom_js__WEBPACK_IMPORTED_MODULE_2__.Dom.closest(this.j.s.range.startContainer, 'table', this.j.editor);
49215
+ }
49216
+ /**
49217
+ * Hide the frame once a key has moved the caret off its element, and
49218
+ * frame a table the caret has moved into, as clicks do
49219
+ */ onEditorKeyUp() {
49220
+ this.__followCaret();
49221
+ }
49222
+ __followCaret() {
49223
+ const before = this.__keyDownRange;
49224
+ this.__keyDownRange = null;
49225
+ if (!(0,_core_selection_helpers_index_js__WEBPACK_IMPORTED_MODULE_7__.isMoved)(this.j, before)) {
49226
+ return;
49227
+ }
49228
+ if (this.isShown && this.element && !this.j.s.range.intersectsNode(this.element)) {
49229
+ this.hide();
49230
+ }
49231
+ const table = this.__caretTable();
49232
+ if (table && table !== this.__keyDownTable && this.j.o.allowResizeTags.has('table')) {
49233
+ this.__bind(table);
49234
+ this.onClickElement(table);
49235
+ }
49236
+ }
48403
49237
  onKeyDown(e) {
48404
49238
  this.isAltMode = e.key === _core_constants_js__WEBPACK_IMPORTED_MODULE_0__.KEY_ALT;
48405
49239
  if (!this.isAltMode && this.isResizeMode) {
@@ -48421,6 +49255,11 @@ const keyBInd = '__jodit-resizer_binded';
48421
49255
  return;
48422
49256
  }
48423
49257
  if (!this.isResizeMode) {
49258
+ // A click in the element's popup, or in a list it opens, works on
49259
+ // the element, so it keeps its frame
49260
+ if ((e === null || e === void 0 ? void 0 : e.target) && _core_ui_index_js__WEBPACK_IMPORTED_MODULE_8__.UIElement.closestElement(e.target, _core_ui_popup_index_js__WEBPACK_IMPORTED_MODULE_9__.Popup)) {
49261
+ return;
49262
+ }
48424
49263
  return this.hide();
48425
49264
  }
48426
49265
  e.stopImmediatePropagation();
@@ -48587,7 +49426,7 @@ const keyBInd = '__jodit-resizer_binded';
48587
49426
  this.hide();
48588
49427
  _core_dom_dom_js__WEBPACK_IMPORTED_MODULE_2__.Dom.safeRemove(this.layer);
48589
49428
  _core_global_js__WEBPACK_IMPORTED_MODULE_3__.eventEmitter.off('hideHelpers', this.hide);
48590
- jodit.e.off(this.j.ow, '.resizer').off('.resizer');
49429
+ jodit.e.off(this.j.ow, '.resizer').off('.resizer').off('keydown', this.onEditorKeyDown);
48591
49430
  }
48592
49431
  constructor(){
48593
49432
  super(...arguments);
@@ -48612,6 +49451,8 @@ const keyBInd = '__jodit-resizer_binded';
48612
49451
  this.sizeViewer = this.rect.getElementsByTagName('span')[0];
48613
49452
  this.pointerX = 0;
48614
49453
  this.pointerY = 0;
49454
+ this.__keyDownRange = null;
49455
+ this.__keyDownTable = null;
48615
49456
  this.isAltMode = false;
48616
49457
  this.onClickElement = (element)=>{
48617
49458
  if (this.isResizeMode) {
@@ -48673,6 +49514,12 @@ __decorate([
48673
49514
  __decorate([
48674
49515
  _core_decorators_index_js__WEBPACK_IMPORTED_MODULE_1__.autobind
48675
49516
  ], resizer.prototype, "onResize", null);
49517
+ __decorate([
49518
+ _core_decorators_index_js__WEBPACK_IMPORTED_MODULE_1__.autobind
49519
+ ], resizer.prototype, "onEditorKeyDown", null);
49520
+ __decorate([
49521
+ (0,_core_decorators_index_js__WEBPACK_IMPORTED_MODULE_1__.watch)(':keyup')
49522
+ ], resizer.prototype, "onEditorKeyUp", null);
48676
49523
  __decorate([
48677
49524
  _core_decorators_index_js__WEBPACK_IMPORTED_MODULE_1__.autobind
48678
49525
  ], resizer.prototype, "onKeyDown", null);
@@ -49690,8 +50537,9 @@ _config_js__WEBPACK_IMPORTED_MODULE_0__.Config.prototype.tableAllowCellSelection
49690
50537
  /* harmony import */ var _core_global_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(580);
49691
50538
  /* harmony import */ var _core_helpers_index_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(21537);
49692
50539
  /* harmony import */ var _core_plugin_index_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(50911);
49693
- /* harmony import */ var _modules_table_table_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(76014);
49694
- /* harmony import */ var _config_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(55311);
50540
+ /* harmony import */ var _core_selection_helpers_index_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(45124);
50541
+ /* harmony import */ var _modules_table_table_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(76014);
50542
+ /* harmony import */ var _config_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(55311);
49695
50543
  /*!
49696
50544
  * Jodit Editor (https://xdsoft.net/jodit/)
49697
50545
  * Released under MIT see LICENSE.txt in the project root for license information.
@@ -49710,19 +50558,24 @@ _config_js__WEBPACK_IMPORTED_MODULE_0__.Config.prototype.tableAllowCellSelection
49710
50558
 
49711
50559
 
49712
50560
 
50561
+
49713
50562
  const key = 'table_processor_observer';
49714
50563
  const MOUSE_MOVE_LABEL = 'onMoveTableSelectCell';
49715
50564
  class selectCells extends _core_plugin_index_js__WEBPACK_IMPORTED_MODULE_5__.Plugin {
49716
50565
  /**
49717
50566
  * Shortcut for Jodit.modules.Table
49718
50567
  */ get __tableModule() {
49719
- return this.j.getInstance(_modules_table_table_js__WEBPACK_IMPORTED_MODULE_6__.Table, this.j.o);
50568
+ return this.j.getInstance(_modules_table_table_js__WEBPACK_IMPORTED_MODULE_7__.Table, this.j.o);
49720
50569
  }
49721
50570
  afterInit(jodit) {
49722
50571
  if (!jodit.o.tableAllowCellSelection) {
49723
50572
  return;
49724
50573
  }
49725
- jodit.e.on('keydown.select-cells', (event)=>{
50574
+ jodit.e// Handlers without a namespace run first, ahead of those that
50575
+ // move the caret, as table-keyboard-navigation's do
50576
+ .on('keydown', this.__onKeyDown, {
50577
+ top: true
50578
+ }).on('keydown.select-cells', (event)=>{
49726
50579
  if (event.key === _core_constants_js__WEBPACK_IMPORTED_MODULE_0__.KEY_TAB) {
49727
50580
  this.unselectCells();
49728
50581
  }
@@ -49746,6 +50599,59 @@ class selectCells extends _core_plugin_index_js__WEBPACK_IMPORTED_MODULE_5__.Plu
49746
50599
  }
49747
50600
  });
49748
50601
  }
50602
+ __onKeyDown(event) {
50603
+ // A key held down moves the caret on every repeat, with one keyup
50604
+ if (event === null || event === void 0 ? void 0 : event.repeat) {
50605
+ this.__followCaret();
50606
+ }
50607
+ this.__keyDownCell = this.__caretCell();
50608
+ this.__keyDownRange = this.j.s.range.cloneRange();
50609
+ this.__keyDownInLink = this.__isInLink();
50610
+ }
50611
+ __isInLink() {
50612
+ return Boolean(_core_dom_dom_js__WEBPACK_IMPORTED_MODULE_2__.Dom.closest(this.j.s.range.startContainer, 'a', this.j.editor));
50613
+ }
50614
+ /**
50615
+ * Where the selection starts rather than `s.current()`, which finds the
50616
+ * first cell when the caret is just before the table
50617
+ */ __caretCell() {
50618
+ return _core_dom_dom_js__WEBPACK_IMPORTED_MODULE_2__.Dom.closest(this.j.s.range.startContainer, _core_dom_dom_js__WEBPACK_IMPORTED_MODULE_2__.Dom.isCell, this.j.editor);
50619
+ }
50620
+ /**
50621
+ * A key that moves the caret into a cell, from another cell or from
50622
+ * outside the table, marks that cell and opens its popup, as a click on
50623
+ * it does. One that moves the caret out of the table unmarks the cells
50624
+ */ onKeyUp() {
50625
+ this.__followCaret();
50626
+ }
50627
+ __followCaret() {
50628
+ const before = this.__keyDownRange;
50629
+ this.__keyDownRange = null;
50630
+ if (this.j.o.readonly || !(0,_core_selection_helpers_index_js__WEBPACK_IMPORTED_MODULE_6__.isMoved)(this.j, before)) {
50631
+ return;
50632
+ }
50633
+ const cell = this.__caretCell();
50634
+ const hasLeftLink = this.__keyDownInLink && !this.__isInLink();
50635
+ if (cell === this.__keyDownCell && !(cell && hasLeftLink)) {
50636
+ return;
50637
+ }
50638
+ const hadMarked = this.__tableModule.getAllSelectedCells().length > 0;
50639
+ this.unselectCells();
50640
+ if (!cell) {
50641
+ if (hadMarked) {
50642
+ this.j.e.fire('hidePopup', 'cells');
50643
+ }
50644
+ return;
50645
+ }
50646
+ const table = _core_dom_dom_js__WEBPACK_IMPORTED_MODULE_2__.Dom.closest(cell, 'table', this.j.editor);
50647
+ if (!table) {
50648
+ return;
50649
+ }
50650
+ // As after a click, the first change to the cell keeps the mark
50651
+ this.__selectedCell = cell;
50652
+ this.__tableModule.addSelection(cell);
50653
+ this.j.e.fire('showPopup', table, ()=>(0,_core_helpers_index_js__WEBPACK_IMPORTED_MODULE_4__.position)(cell, this.j), 'cells');
50654
+ }
49749
50655
  /**
49750
50656
  * Mouse click inside the table
49751
50657
  */ onStartSelection(cell, event) {
@@ -50067,10 +50973,17 @@ class selectCells extends _core_plugin_index_js__WEBPACK_IMPORTED_MODULE_5__.Plu
50067
50973
  }
50068
50974
  /** @override */ beforeDestruct(jodit) {
50069
50975
  this.__onRemoveSelection();
50070
- jodit.e.off('.select-cells');
50976
+ jodit.e.off('.select-cells').off('keydown', this.__onKeyDown);
50071
50977
  }
50072
50978
  constructor(){
50073
50979
  super(...arguments);
50980
+ /**
50981
+ * The cell with the caret, and the selection, when a key went down
50982
+ */ this.__keyDownCell = null;
50983
+ this.__keyDownRange = null;
50984
+ /**
50985
+ * A link's popup replaces the cell's while the caret is in the link
50986
+ */ this.__keyDownInLink = false;
50074
50987
  /**
50075
50988
  * First selected cell
50076
50989
  */ this.__selectedCell = null;
@@ -50082,6 +50995,12 @@ class selectCells extends _core_plugin_index_js__WEBPACK_IMPORTED_MODULE_5__.Plu
50082
50995
  selectCells.requires = [
50083
50996
  'select'
50084
50997
  ];
50998
+ __decorate([
50999
+ _core_decorators_index_js__WEBPACK_IMPORTED_MODULE_1__.autobind
51000
+ ], selectCells.prototype, "__onKeyDown", null);
51001
+ __decorate([
51002
+ (0,_core_decorators_index_js__WEBPACK_IMPORTED_MODULE_1__.watch)(':keyup')
51003
+ ], selectCells.prototype, "onKeyUp", null);
50085
51004
  __decorate([
50086
51005
  _core_decorators_index_js__WEBPACK_IMPORTED_MODULE_1__.autobind
50087
51006
  ], selectCells.prototype, "onStartSelection", null);
@@ -54520,7 +55439,9 @@ const WORK_KEYS = new Set([
54520
55439
  case _core_constants_js__WEBPACK_IMPORTED_MODULE_0__.KEY_LEFT:
54521
55440
  {
54522
55441
  next = getNextCell();
54523
- if (!next) {
55442
+ // Left in the first cell leaves the table, as Up in the
55443
+ // top row does
55444
+ if (!next && key === _core_constants_js__WEBPACK_IMPORTED_MODULE_0__.KEY_TAB) {
54524
55445
  tableModule.appendRow(table, !isPrev ? false : _core_dom_dom_js__WEBPACK_IMPORTED_MODULE_1__.Dom.first(table, (node)=>_core_dom_dom_js__WEBPACK_IMPORTED_MODULE_1__.Dom.isTag(node, 'tr')), !isPrev);
54525
55446
  next = getNextCell();
54526
55447
  }
@@ -54546,7 +55467,6 @@ const WORK_KEYS = new Set([
54546
55467
  if (!next) {
54547
55468
  return;
54548
55469
  }
54549
- editor.e.fire('hidePopup hideResizer');
54550
55470
  if (!next.firstChild) {
54551
55471
  const first = editor.createInside.element('br');
54552
55472
  _core_dom_dom_js__WEBPACK_IMPORTED_MODULE_1__.Dom.append(next, first);