jodit-pro 4.18.2 → 4.18.3

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 (316) hide show
  1. package/es2015/jodit.css +1 -1
  2. package/es2015/jodit.fat.min.js +16 -16
  3. package/es2015/jodit.js +465 -131
  4. package/es2015/jodit.min.js +11 -11
  5. package/es2015/plugins/ai-assistant-pro/ai-assistant-pro.css +1 -1
  6. package/es2015/plugins/ai-assistant-pro/ai-assistant-pro.js +1 -1
  7. package/es2015/plugins/ai-assistant-pro/ai-assistant-pro.min.js +1 -1
  8. package/es2015/plugins/autocomplete/autocomplete.css +1 -1
  9. package/es2015/plugins/autocomplete/autocomplete.js +1 -1
  10. package/es2015/plugins/autocomplete/autocomplete.min.js +1 -1
  11. package/es2015/plugins/backup/backup.css +1 -1
  12. package/es2015/plugins/backup/backup.js +1 -1
  13. package/es2015/plugins/backup/backup.min.js +1 -1
  14. package/es2015/plugins/button-generator/button-generator.css +1 -1
  15. package/es2015/plugins/button-generator/button-generator.js +1 -1
  16. package/es2015/plugins/button-generator/button-generator.min.js +1 -1
  17. package/es2015/plugins/change-case/change-case.js +1 -1
  18. package/es2015/plugins/change-case/change-case.min.js +1 -1
  19. package/es2015/plugins/color-picker/color-picker.css +1 -1
  20. package/es2015/plugins/color-picker/color-picker.js +1 -1
  21. package/es2015/plugins/color-picker/color-picker.min.js +1 -1
  22. package/es2015/plugins/emoji/emoji.css +1 -1
  23. package/es2015/plugins/emoji/emoji.js +1 -1
  24. package/es2015/plugins/emoji/emoji.min.js +1 -1
  25. package/es2015/plugins/export-docs/export-docs.js +1 -1
  26. package/es2015/plugins/export-docs/export-docs.min.js +1 -1
  27. package/es2015/plugins/finder/finder.css +1 -1
  28. package/es2015/plugins/finder/finder.js +1 -1
  29. package/es2015/plugins/finder/finder.min.js +1 -1
  30. package/es2015/plugins/google-maps/google-maps.css +1 -1
  31. package/es2015/plugins/google-maps/google-maps.js +1 -1
  32. package/es2015/plugins/google-maps/google-maps.min.js +1 -1
  33. package/es2015/plugins/google-search/google-search.js +1 -1
  34. package/es2015/plugins/google-search/google-search.min.js +1 -1
  35. package/es2015/plugins/highlight-signature/highlight-signature.js +1 -1
  36. package/es2015/plugins/highlight-signature/highlight-signature.min.js +1 -1
  37. package/es2015/plugins/iframe-editor/iframe-editor.css +1 -1
  38. package/es2015/plugins/iframe-editor/iframe-editor.js +1 -1
  39. package/es2015/plugins/iframe-editor/iframe-editor.min.js +1 -1
  40. package/es2015/plugins/image-editor-pro/image-editor-pro.css +1 -1
  41. package/es2015/plugins/image-editor-pro/image-editor-pro.js +1 -1
  42. package/es2015/plugins/image-editor-pro/image-editor-pro.min.js +1 -1
  43. package/es2015/plugins/keyboard/keyboard.css +1 -1
  44. package/es2015/plugins/keyboard/keyboard.js +1 -1
  45. package/es2015/plugins/keyboard/keyboard.min.js +1 -1
  46. package/es2015/plugins/mobile-view/mobile-view.js +1 -1
  47. package/es2015/plugins/mobile-view/mobile-view.min.js +1 -1
  48. package/es2015/plugins/page-break/page-break.js +1 -1
  49. package/es2015/plugins/page-break/page-break.min.js +1 -1
  50. package/es2015/plugins/paste-code/paste-code.css +1 -1
  51. package/es2015/plugins/paste-code/paste-code.js +1 -1
  52. package/es2015/plugins/paste-code/paste-code.min.js +1 -1
  53. package/es2015/plugins/paste-from-word/paste-from-word.js +1 -1
  54. package/es2015/plugins/paste-from-word/paste-from-word.min.js +1 -1
  55. package/es2015/plugins/show-blocks/show-blocks.js +1 -1
  56. package/es2015/plugins/show-blocks/show-blocks.min.js +1 -1
  57. package/es2015/plugins/style/style.css +1 -1
  58. package/es2015/plugins/style/style.js +1 -1
  59. package/es2015/plugins/style/style.min.js +1 -1
  60. package/es2015/plugins/templates/templates.css +1 -1
  61. package/es2015/plugins/templates/templates.js +1 -1
  62. package/es2015/plugins/templates/templates.min.js +1 -1
  63. package/es2015/plugins/todo-list/todo-list.css +1 -1
  64. package/es2015/plugins/todo-list/todo-list.js +1 -1
  65. package/es2015/plugins/todo-list/todo-list.min.js +1 -1
  66. package/es2015/plugins/translate/translate.css +1 -1
  67. package/es2015/plugins/translate/translate.js +1 -1
  68. package/es2015/plugins/translate/translate.min.js +1 -1
  69. package/es2015/plugins/tune-block/tune-block.css +1 -1
  70. package/es2015/plugins/tune-block/tune-block.js +1 -1
  71. package/es2015/plugins/tune-block/tune-block.min.js +1 -1
  72. package/es2018/jodit.fat.min.js +9 -9
  73. package/es2018/jodit.min.js +9 -9
  74. package/es2018/plugins/ai-assistant-pro/ai-assistant-pro.min.js +1 -1
  75. package/es2018/plugins/autocomplete/autocomplete.min.js +1 -1
  76. package/es2018/plugins/backup/backup.min.js +1 -1
  77. package/es2018/plugins/button-generator/button-generator.min.js +1 -1
  78. package/es2018/plugins/change-case/change-case.min.js +1 -1
  79. package/es2018/plugins/color-picker/color-picker.min.js +1 -1
  80. package/es2018/plugins/emoji/emoji.min.js +1 -1
  81. package/es2018/plugins/export-docs/export-docs.min.js +1 -1
  82. package/es2018/plugins/finder/finder.min.js +1 -1
  83. package/es2018/plugins/google-maps/google-maps.min.js +1 -1
  84. package/es2018/plugins/google-search/google-search.min.js +1 -1
  85. package/es2018/plugins/highlight-signature/highlight-signature.min.js +1 -1
  86. package/es2018/plugins/iframe-editor/iframe-editor.min.js +1 -1
  87. package/es2018/plugins/image-editor-pro/image-editor-pro.min.js +1 -1
  88. package/es2018/plugins/keyboard/keyboard.min.js +1 -1
  89. package/es2018/plugins/mobile-view/mobile-view.min.js +1 -1
  90. package/es2018/plugins/page-break/page-break.min.js +1 -1
  91. package/es2018/plugins/paste-code/paste-code.min.js +1 -1
  92. package/es2018/plugins/paste-from-word/paste-from-word.min.js +1 -1
  93. package/es2018/plugins/show-blocks/show-blocks.min.js +1 -1
  94. package/es2018/plugins/style/style.min.js +1 -1
  95. package/es2018/plugins/templates/templates.min.js +1 -1
  96. package/es2018/plugins/todo-list/todo-list.min.js +1 -1
  97. package/es2018/plugins/translate/translate.min.js +1 -1
  98. package/es2018/plugins/tune-block/tune-block.min.js +1 -1
  99. package/es2021/jodit.css +1 -1
  100. package/es2021/jodit.fat.min.js +16 -16
  101. package/es2021/jodit.js +417 -131
  102. package/es2021/jodit.min.js +16 -16
  103. package/es2021/plugins/ai-assistant-pro/ai-assistant-pro.css +1 -1
  104. package/es2021/plugins/ai-assistant-pro/ai-assistant-pro.js +1 -1
  105. package/es2021/plugins/ai-assistant-pro/ai-assistant-pro.min.js +1 -1
  106. package/es2021/plugins/autocomplete/autocomplete.css +1 -1
  107. package/es2021/plugins/autocomplete/autocomplete.js +1 -1
  108. package/es2021/plugins/autocomplete/autocomplete.min.js +1 -1
  109. package/es2021/plugins/backup/backup.css +1 -1
  110. package/es2021/plugins/backup/backup.js +1 -1
  111. package/es2021/plugins/backup/backup.min.js +1 -1
  112. package/es2021/plugins/button-generator/button-generator.css +1 -1
  113. package/es2021/plugins/button-generator/button-generator.js +1 -1
  114. package/es2021/plugins/button-generator/button-generator.min.js +1 -1
  115. package/es2021/plugins/change-case/change-case.js +1 -1
  116. package/es2021/plugins/change-case/change-case.min.js +1 -1
  117. package/es2021/plugins/color-picker/color-picker.css +1 -1
  118. package/es2021/plugins/color-picker/color-picker.js +1 -1
  119. package/es2021/plugins/color-picker/color-picker.min.js +1 -1
  120. package/es2021/plugins/emoji/emoji.css +1 -1
  121. package/es2021/plugins/emoji/emoji.js +1 -1
  122. package/es2021/plugins/emoji/emoji.min.js +1 -1
  123. package/es2021/plugins/export-docs/export-docs.js +1 -1
  124. package/es2021/plugins/export-docs/export-docs.min.js +1 -1
  125. package/es2021/plugins/finder/finder.css +1 -1
  126. package/es2021/plugins/finder/finder.js +1 -1
  127. package/es2021/plugins/finder/finder.min.js +1 -1
  128. package/es2021/plugins/google-maps/google-maps.css +1 -1
  129. package/es2021/plugins/google-maps/google-maps.js +1 -1
  130. package/es2021/plugins/google-maps/google-maps.min.js +1 -1
  131. package/es2021/plugins/google-search/google-search.js +1 -1
  132. package/es2021/plugins/google-search/google-search.min.js +1 -1
  133. package/es2021/plugins/highlight-signature/highlight-signature.js +1 -1
  134. package/es2021/plugins/highlight-signature/highlight-signature.min.js +1 -1
  135. package/es2021/plugins/iframe-editor/iframe-editor.css +1 -1
  136. package/es2021/plugins/iframe-editor/iframe-editor.js +1 -1
  137. package/es2021/plugins/iframe-editor/iframe-editor.min.js +1 -1
  138. package/es2021/plugins/image-editor-pro/image-editor-pro.css +1 -1
  139. package/es2021/plugins/image-editor-pro/image-editor-pro.js +1 -1
  140. package/es2021/plugins/image-editor-pro/image-editor-pro.min.js +1 -1
  141. package/es2021/plugins/keyboard/keyboard.css +1 -1
  142. package/es2021/plugins/keyboard/keyboard.js +1 -1
  143. package/es2021/plugins/keyboard/keyboard.min.js +1 -1
  144. package/es2021/plugins/mobile-view/mobile-view.js +1 -1
  145. package/es2021/plugins/mobile-view/mobile-view.min.js +1 -1
  146. package/es2021/plugins/page-break/page-break.js +1 -1
  147. package/es2021/plugins/page-break/page-break.min.js +1 -1
  148. package/es2021/plugins/paste-code/paste-code.css +1 -1
  149. package/es2021/plugins/paste-code/paste-code.js +1 -1
  150. package/es2021/plugins/paste-code/paste-code.min.js +1 -1
  151. package/es2021/plugins/paste-from-word/paste-from-word.js +1 -1
  152. package/es2021/plugins/paste-from-word/paste-from-word.min.js +1 -1
  153. package/es2021/plugins/show-blocks/show-blocks.js +1 -1
  154. package/es2021/plugins/show-blocks/show-blocks.min.js +1 -1
  155. package/es2021/plugins/style/style.css +1 -1
  156. package/es2021/plugins/style/style.js +1 -1
  157. package/es2021/plugins/style/style.min.js +1 -1
  158. package/es2021/plugins/templates/templates.css +1 -1
  159. package/es2021/plugins/templates/templates.js +1 -1
  160. package/es2021/plugins/templates/templates.min.js +1 -1
  161. package/es2021/plugins/todo-list/todo-list.css +1 -1
  162. package/es2021/plugins/todo-list/todo-list.js +1 -1
  163. package/es2021/plugins/todo-list/todo-list.min.js +1 -1
  164. package/es2021/plugins/translate/translate.css +1 -1
  165. package/es2021/plugins/translate/translate.js +1 -1
  166. package/es2021/plugins/translate/translate.min.js +1 -1
  167. package/es2021/plugins/tune-block/tune-block.css +1 -1
  168. package/es2021/plugins/tune-block/tune-block.js +1 -1
  169. package/es2021/plugins/tune-block/tune-block.min.js +1 -1
  170. package/es2021.en/jodit.css +1 -1
  171. package/es2021.en/jodit.fat.min.js +19 -19
  172. package/es2021.en/jodit.js +417 -131
  173. package/es2021.en/jodit.min.js +16 -16
  174. package/es2021.en/plugins/ai-assistant-pro/ai-assistant-pro.css +1 -1
  175. package/es2021.en/plugins/ai-assistant-pro/ai-assistant-pro.js +1 -1
  176. package/es2021.en/plugins/ai-assistant-pro/ai-assistant-pro.min.js +1 -1
  177. package/es2021.en/plugins/autocomplete/autocomplete.css +1 -1
  178. package/es2021.en/plugins/autocomplete/autocomplete.js +1 -1
  179. package/es2021.en/plugins/autocomplete/autocomplete.min.js +1 -1
  180. package/es2021.en/plugins/backup/backup.css +1 -1
  181. package/es2021.en/plugins/backup/backup.js +1 -1
  182. package/es2021.en/plugins/backup/backup.min.js +1 -1
  183. package/es2021.en/plugins/button-generator/button-generator.css +1 -1
  184. package/es2021.en/plugins/button-generator/button-generator.js +1 -1
  185. package/es2021.en/plugins/button-generator/button-generator.min.js +1 -1
  186. package/es2021.en/plugins/change-case/change-case.js +1 -1
  187. package/es2021.en/plugins/change-case/change-case.min.js +1 -1
  188. package/es2021.en/plugins/color-picker/color-picker.css +1 -1
  189. package/es2021.en/plugins/color-picker/color-picker.js +1 -1
  190. package/es2021.en/plugins/color-picker/color-picker.min.js +1 -1
  191. package/es2021.en/plugins/emoji/emoji.css +1 -1
  192. package/es2021.en/plugins/emoji/emoji.js +1 -1
  193. package/es2021.en/plugins/emoji/emoji.min.js +1 -1
  194. package/es2021.en/plugins/export-docs/export-docs.js +1 -1
  195. package/es2021.en/plugins/export-docs/export-docs.min.js +1 -1
  196. package/es2021.en/plugins/finder/finder.css +1 -1
  197. package/es2021.en/plugins/finder/finder.js +1 -1
  198. package/es2021.en/plugins/finder/finder.min.js +1 -1
  199. package/es2021.en/plugins/google-maps/google-maps.css +1 -1
  200. package/es2021.en/plugins/google-maps/google-maps.js +1 -1
  201. package/es2021.en/plugins/google-maps/google-maps.min.js +1 -1
  202. package/es2021.en/plugins/google-search/google-search.js +1 -1
  203. package/es2021.en/plugins/google-search/google-search.min.js +1 -1
  204. package/es2021.en/plugins/highlight-signature/highlight-signature.js +1 -1
  205. package/es2021.en/plugins/highlight-signature/highlight-signature.min.js +1 -1
  206. package/es2021.en/plugins/iframe-editor/iframe-editor.css +1 -1
  207. package/es2021.en/plugins/iframe-editor/iframe-editor.js +1 -1
  208. package/es2021.en/plugins/iframe-editor/iframe-editor.min.js +1 -1
  209. package/es2021.en/plugins/image-editor-pro/image-editor-pro.css +1 -1
  210. package/es2021.en/plugins/image-editor-pro/image-editor-pro.js +1 -1
  211. package/es2021.en/plugins/image-editor-pro/image-editor-pro.min.js +1 -1
  212. package/es2021.en/plugins/keyboard/keyboard.css +1 -1
  213. package/es2021.en/plugins/keyboard/keyboard.js +1 -1
  214. package/es2021.en/plugins/keyboard/keyboard.min.js +1 -1
  215. package/es2021.en/plugins/mobile-view/mobile-view.js +1 -1
  216. package/es2021.en/plugins/mobile-view/mobile-view.min.js +1 -1
  217. package/es2021.en/plugins/page-break/page-break.js +1 -1
  218. package/es2021.en/plugins/page-break/page-break.min.js +1 -1
  219. package/es2021.en/plugins/paste-code/paste-code.css +1 -1
  220. package/es2021.en/plugins/paste-code/paste-code.js +1 -1
  221. package/es2021.en/plugins/paste-code/paste-code.min.js +1 -1
  222. package/es2021.en/plugins/paste-from-word/paste-from-word.js +1 -1
  223. package/es2021.en/plugins/paste-from-word/paste-from-word.min.js +1 -1
  224. package/es2021.en/plugins/show-blocks/show-blocks.js +1 -1
  225. package/es2021.en/plugins/show-blocks/show-blocks.min.js +1 -1
  226. package/es2021.en/plugins/style/style.css +1 -1
  227. package/es2021.en/plugins/style/style.js +1 -1
  228. package/es2021.en/plugins/style/style.min.js +1 -1
  229. package/es2021.en/plugins/templates/templates.css +1 -1
  230. package/es2021.en/plugins/templates/templates.js +1 -1
  231. package/es2021.en/plugins/templates/templates.min.js +1 -1
  232. package/es2021.en/plugins/todo-list/todo-list.css +1 -1
  233. package/es2021.en/plugins/todo-list/todo-list.js +1 -1
  234. package/es2021.en/plugins/todo-list/todo-list.min.js +1 -1
  235. package/es2021.en/plugins/translate/translate.css +1 -1
  236. package/es2021.en/plugins/translate/translate.js +1 -1
  237. package/es2021.en/plugins/translate/translate.min.js +1 -1
  238. package/es2021.en/plugins/tune-block/tune-block.css +1 -1
  239. package/es2021.en/plugins/tune-block/tune-block.js +1 -1
  240. package/es2021.en/plugins/tune-block/tune-block.min.js +1 -1
  241. package/es5/jodit.css +2 -2
  242. package/es5/jodit.fat.min.js +2 -2
  243. package/es5/jodit.js +529 -135
  244. package/es5/jodit.min.css +2 -2
  245. package/es5/jodit.min.js +2 -2
  246. package/es5/plugins/ai-assistant-pro/ai-assistant-pro.css +1 -1
  247. package/es5/plugins/ai-assistant-pro/ai-assistant-pro.js +1 -1
  248. package/es5/plugins/ai-assistant-pro/ai-assistant-pro.min.js +1 -1
  249. package/es5/plugins/autocomplete/autocomplete.css +1 -1
  250. package/es5/plugins/autocomplete/autocomplete.js +1 -1
  251. package/es5/plugins/autocomplete/autocomplete.min.js +1 -1
  252. package/es5/plugins/backup/backup.css +1 -1
  253. package/es5/plugins/backup/backup.js +1 -1
  254. package/es5/plugins/backup/backup.min.js +1 -1
  255. package/es5/plugins/button-generator/button-generator.css +1 -1
  256. package/es5/plugins/button-generator/button-generator.js +1 -1
  257. package/es5/plugins/button-generator/button-generator.min.js +1 -1
  258. package/es5/plugins/change-case/change-case.js +1 -1
  259. package/es5/plugins/change-case/change-case.min.js +1 -1
  260. package/es5/plugins/color-picker/color-picker.css +1 -1
  261. package/es5/plugins/color-picker/color-picker.js +1 -1
  262. package/es5/plugins/color-picker/color-picker.min.js +1 -1
  263. package/es5/plugins/emoji/emoji.css +1 -1
  264. package/es5/plugins/emoji/emoji.js +1 -1
  265. package/es5/plugins/emoji/emoji.min.js +1 -1
  266. package/es5/plugins/export-docs/export-docs.js +1 -1
  267. package/es5/plugins/export-docs/export-docs.min.js +1 -1
  268. package/es5/plugins/finder/finder.css +1 -1
  269. package/es5/plugins/finder/finder.js +1 -1
  270. package/es5/plugins/finder/finder.min.js +1 -1
  271. package/es5/plugins/google-maps/google-maps.css +1 -1
  272. package/es5/plugins/google-maps/google-maps.js +1 -1
  273. package/es5/plugins/google-maps/google-maps.min.js +1 -1
  274. package/es5/plugins/google-search/google-search.js +1 -1
  275. package/es5/plugins/google-search/google-search.min.js +1 -1
  276. package/es5/plugins/highlight-signature/highlight-signature.js +1 -1
  277. package/es5/plugins/highlight-signature/highlight-signature.min.js +1 -1
  278. package/es5/plugins/iframe-editor/iframe-editor.css +1 -1
  279. package/es5/plugins/iframe-editor/iframe-editor.js +1 -1
  280. package/es5/plugins/iframe-editor/iframe-editor.min.js +1 -1
  281. package/es5/plugins/image-editor-pro/image-editor-pro.css +1 -1
  282. package/es5/plugins/image-editor-pro/image-editor-pro.js +1 -1
  283. package/es5/plugins/image-editor-pro/image-editor-pro.min.js +1 -1
  284. package/es5/plugins/keyboard/keyboard.css +1 -1
  285. package/es5/plugins/keyboard/keyboard.js +1 -1
  286. package/es5/plugins/keyboard/keyboard.min.js +1 -1
  287. package/es5/plugins/mobile-view/mobile-view.js +1 -1
  288. package/es5/plugins/mobile-view/mobile-view.min.js +1 -1
  289. package/es5/plugins/page-break/page-break.js +1 -1
  290. package/es5/plugins/page-break/page-break.min.js +1 -1
  291. package/es5/plugins/paste-code/paste-code.css +1 -1
  292. package/es5/plugins/paste-code/paste-code.js +1 -1
  293. package/es5/plugins/paste-code/paste-code.min.js +1 -1
  294. package/es5/plugins/paste-from-word/paste-from-word.js +1 -1
  295. package/es5/plugins/paste-from-word/paste-from-word.min.js +1 -1
  296. package/es5/plugins/show-blocks/show-blocks.js +1 -1
  297. package/es5/plugins/show-blocks/show-blocks.min.js +1 -1
  298. package/es5/plugins/style/style.css +1 -1
  299. package/es5/plugins/style/style.js +1 -1
  300. package/es5/plugins/style/style.min.js +1 -1
  301. package/es5/plugins/templates/templates.css +1 -1
  302. package/es5/plugins/templates/templates.js +1 -1
  303. package/es5/plugins/templates/templates.min.js +1 -1
  304. package/es5/plugins/todo-list/todo-list.css +1 -1
  305. package/es5/plugins/todo-list/todo-list.js +1 -1
  306. package/es5/plugins/todo-list/todo-list.min.js +1 -1
  307. package/es5/plugins/translate/translate.css +1 -1
  308. package/es5/plugins/translate/translate.js +1 -1
  309. package/es5/plugins/translate/translate.min.js +1 -1
  310. package/es5/plugins/tune-block/tune-block.css +1 -1
  311. package/es5/plugins/tune-block/tune-block.js +1 -1
  312. package/es5/plugins/tune-block/tune-block.min.js +1 -1
  313. package/es5/polyfills.fat.min.js +1 -1
  314. package/es5/polyfills.js +1 -1
  315. package/es5/polyfills.min.js +1 -1
  316. package/package.json +1 -1
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.2
4
+ * Version: v4.18.3
5
5
  * Url: https://xdsoft.net/jodit/pro/
6
6
  * License(s): SEE LICENSE IN LICENSE.md
7
7
  */
@@ -1816,7 +1816,7 @@ __webpack_require__.r(__webpack_exports__);
1816
1816
  * ```
1817
1817
  * @packageDocumentation
1818
1818
  * @module constants
1819
- */ const APP_VERSION = "4.18.2";
1819
+ */ const APP_VERSION = "4.18.3";
1820
1820
  // prettier-ignore
1821
1821
  const ES = "es2015";
1822
1822
  const IS_ES_MODERN = true;
@@ -6466,6 +6466,8 @@ __webpack_require__.r(__webpack_exports__);
6466
6466
  /* harmony export */ options: function() { return /* reexport safe */ _utils_index_js__WEBPACK_IMPORTED_MODULE_8__.options; },
6467
6467
  /* harmony export */ parseQuery: function() { return /* reexport safe */ _utils_index_js__WEBPACK_IMPORTED_MODULE_8__.parseQuery; },
6468
6468
  /* harmony export */ position: function() { return /* reexport safe */ _size_index_js__WEBPACK_IMPORTED_MODULE_6__.position; },
6469
+ /* harmony export */ prepareEmbedCode: function() { return /* reexport safe */ _utils_index_js__WEBPACK_IMPORTED_MODULE_8__.prepareEmbedCode; },
6470
+ /* harmony export */ prepareMedia: function() { return /* reexport safe */ _utils_index_js__WEBPACK_IMPORTED_MODULE_8__.prepareMedia; },
6469
6471
  /* harmony export */ previewBox: function() { return /* reexport safe */ _utils_index_js__WEBPACK_IMPORTED_MODULE_8__.previewBox; },
6470
6472
  /* harmony export */ refs: function() { return /* reexport safe */ _utils_index_js__WEBPACK_IMPORTED_MODULE_8__.refs; },
6471
6473
  /* harmony export */ reset: function() { return /* reexport safe */ _utils_index_js__WEBPACK_IMPORTED_MODULE_8__.reset; },
@@ -8710,13 +8712,13 @@ const getClassName = (obj)=>{
8710
8712
  /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
8711
8713
 
8712
8714
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
8713
- /* harmony export */ $$: function() { return /* reexport safe */ _selector_js__WEBPACK_IMPORTED_MODULE_25__.$$; },
8715
+ /* harmony export */ $$: function() { return /* reexport safe */ _selector_js__WEBPACK_IMPORTED_MODULE_26__.$$; },
8714
8716
  /* harmony export */ ConfigDeepFlatten: function() { return /* reexport safe */ _config_proto_js__WEBPACK_IMPORTED_MODULE_7__.ConfigDeepFlatten; },
8715
8717
  /* harmony export */ ConfigFlatten: function() { return /* reexport safe */ _config_proto_js__WEBPACK_IMPORTED_MODULE_7__.ConfigFlatten; },
8716
8718
  /* harmony export */ ConfigMerge: function() { return /* reexport safe */ _config_proto_js__WEBPACK_IMPORTED_MODULE_7__.ConfigMerge; },
8717
8719
  /* harmony export */ ConfigProto: function() { return /* reexport safe */ _config_proto_js__WEBPACK_IMPORTED_MODULE_7__.ConfigProto; },
8718
8720
  /* harmony export */ ConnectionError: function() { return /* reexport safe */ _error_index_js__WEBPACK_IMPORTED_MODULE_13__.ConnectionError; },
8719
- /* harmony export */ LimitedStack: function() { return /* reexport safe */ _stack_js__WEBPACK_IMPORTED_MODULE_27__.LimitedStack; },
8721
+ /* harmony export */ LimitedStack: function() { return /* reexport safe */ _stack_js__WEBPACK_IMPORTED_MODULE_28__.LimitedStack; },
8720
8722
  /* harmony export */ OptionsError: function() { return /* reexport safe */ _error_index_js__WEBPACK_IMPORTED_MODULE_13__.OptionsError; },
8721
8723
  /* harmony export */ UNSAFE_PROTO_KEYS: function() { return /* reexport safe */ _is_unsafe_proto_key_js__WEBPACK_IMPORTED_MODULE_18__.UNSAFE_PROTO_KEYS; },
8722
8724
  /* harmony export */ abort: function() { return /* reexport safe */ _error_index_js__WEBPACK_IMPORTED_MODULE_13__.abort; },
@@ -8729,9 +8731,9 @@ const getClassName = (obj)=>{
8729
8731
  /* harmony export */ attrRaw: function() { return /* reexport safe */ _attr_js__WEBPACK_IMPORTED_MODULE_3__.attrRaw; },
8730
8732
  /* harmony export */ browser: function() { return /* reexport safe */ _browser_js__WEBPACK_IMPORTED_MODULE_4__.browser; },
8731
8733
  /* harmony export */ buildQuery: function() { return /* reexport safe */ _build_query_js__WEBPACK_IMPORTED_MODULE_5__.buildQuery; },
8732
- /* harmony export */ call: function() { return /* reexport safe */ _utils_js__WEBPACK_IMPORTED_MODULE_28__.call; },
8733
- /* harmony export */ callPromise: function() { return /* reexport safe */ _utils_js__WEBPACK_IMPORTED_MODULE_28__.callPromise; },
8734
- /* harmony export */ callThis: function() { return /* reexport safe */ _utils_js__WEBPACK_IMPORTED_MODULE_28__.callThis; },
8734
+ /* harmony export */ call: function() { return /* reexport safe */ _utils_js__WEBPACK_IMPORTED_MODULE_29__.call; },
8735
+ /* harmony export */ callPromise: function() { return /* reexport safe */ _utils_js__WEBPACK_IMPORTED_MODULE_29__.callPromise; },
8736
+ /* harmony export */ callThis: function() { return /* reexport safe */ _utils_js__WEBPACK_IMPORTED_MODULE_29__.callThis; },
8735
8737
  /* harmony export */ clearAlign: function() { return /* reexport safe */ _align_js__WEBPACK_IMPORTED_MODULE_0__.clearAlign; },
8736
8738
  /* harmony export */ clearCenterAlign: function() { return /* reexport safe */ _css_js__WEBPACK_IMPORTED_MODULE_9__.clearCenterAlign; },
8737
8739
  /* harmony export */ cns: function() { return /* reexport safe */ _mark_deprecated_js__WEBPACK_IMPORTED_MODULE_19__.cns; },
@@ -8741,7 +8743,7 @@ const getClassName = (obj)=>{
8741
8743
  /* harmony export */ createMediaWrapper: function() { return /* reexport safe */ _media_wrapper_js__WEBPACK_IMPORTED_MODULE_20__.createMediaWrapper; },
8742
8744
  /* harmony export */ css: function() { return /* reexport safe */ _css_js__WEBPACK_IMPORTED_MODULE_9__.css; },
8743
8745
  /* harmony export */ cssInline: function() { return /* reexport safe */ _css_js__WEBPACK_IMPORTED_MODULE_9__.cssInline; },
8744
- /* harmony export */ cssPath: function() { return /* reexport safe */ _selector_js__WEBPACK_IMPORTED_MODULE_25__.cssPath; },
8746
+ /* harmony export */ cssPath: function() { return /* reexport safe */ _selector_js__WEBPACK_IMPORTED_MODULE_26__.cssPath; },
8745
8747
  /* harmony export */ ctrlKey: function() { return /* reexport safe */ _ctrl_key_js__WEBPACK_IMPORTED_MODULE_10__.ctrlKey; },
8746
8748
  /* harmony export */ dataBind: function() { return /* reexport safe */ _data_bind_js__WEBPACK_IMPORTED_MODULE_11__.dataBind; },
8747
8749
  /* harmony export */ defaultLanguage: function() { return /* reexport safe */ _default_language_js__WEBPACK_IMPORTED_MODULE_12__.defaultLanguage; },
@@ -8750,34 +8752,36 @@ const getClassName = (obj)=>{
8750
8752
  /* harmony export */ get: function() { return /* reexport safe */ _get_js__WEBPACK_IMPORTED_MODULE_15__.get; },
8751
8753
  /* harmony export */ getAlignClasses: function() { return /* reexport safe */ _align_js__WEBPACK_IMPORTED_MODULE_0__.getAlignClasses; },
8752
8754
  /* harmony export */ getClassName: function() { return /* reexport safe */ _get_class_name_js__WEBPACK_IMPORTED_MODULE_16__.getClassName; },
8753
- /* harmony export */ getDataTransfer: function() { return /* reexport safe */ _utils_js__WEBPACK_IMPORTED_MODULE_28__.getDataTransfer; },
8755
+ /* harmony export */ getDataTransfer: function() { return /* reexport safe */ _utils_js__WEBPACK_IMPORTED_MODULE_29__.getDataTransfer; },
8754
8756
  /* harmony export */ getHAlign: function() { return /* reexport safe */ _align_js__WEBPACK_IMPORTED_MODULE_0__.getHAlign; },
8755
8757
  /* harmony export */ getMediaWrapper: function() { return /* reexport safe */ _media_wrapper_js__WEBPACK_IMPORTED_MODULE_20__.getMediaWrapper; },
8756
- /* harmony export */ getPropertyDescriptor: function() { return /* reexport safe */ _utils_js__WEBPACK_IMPORTED_MODULE_28__.getPropertyDescriptor; },
8758
+ /* harmony export */ getPropertyDescriptor: function() { return /* reexport safe */ _utils_js__WEBPACK_IMPORTED_MODULE_29__.getPropertyDescriptor; },
8757
8759
  /* harmony export */ getWrappedMedia: function() { return /* reexport safe */ _media_wrapper_js__WEBPACK_IMPORTED_MODULE_20__.getWrappedMedia; },
8758
- /* harmony export */ getXPathByElement: function() { return /* reexport safe */ _selector_js__WEBPACK_IMPORTED_MODULE_25__.getXPathByElement; },
8760
+ /* harmony export */ getXPathByElement: function() { return /* reexport safe */ _selector_js__WEBPACK_IMPORTED_MODULE_26__.getXPathByElement; },
8759
8761
  /* harmony export */ hAlignElement: function() { return /* reexport safe */ _align_js__WEBPACK_IMPORTED_MODULE_0__.hAlignElement; },
8760
8762
  /* harmony export */ humanSizeToBytes: function() { return /* reexport safe */ _human_size_to_bytes_js__WEBPACK_IMPORTED_MODULE_17__.humanSizeToBytes; },
8761
- /* harmony export */ inView: function() { return /* reexport safe */ _scroll_into_view_js__WEBPACK_IMPORTED_MODULE_24__.inView; },
8763
+ /* harmony export */ inView: function() { return /* reexport safe */ _scroll_into_view_js__WEBPACK_IMPORTED_MODULE_25__.inView; },
8762
8764
  /* harmony export */ isAtom: function() { return /* reexport safe */ _extend_js__WEBPACK_IMPORTED_MODULE_14__.isAtom; },
8763
8765
  /* harmony export */ isUnsafeProtoKey: function() { return /* reexport safe */ _is_unsafe_proto_key_js__WEBPACK_IMPORTED_MODULE_18__.isUnsafeProtoKey; },
8764
8766
  /* harmony export */ keepNames: function() { return /* reexport safe */ _get_class_name_js__WEBPACK_IMPORTED_MODULE_16__.keepNames; },
8765
- /* harmony export */ keys: function() { return /* reexport safe */ _utils_js__WEBPACK_IMPORTED_MODULE_28__.keys; },
8766
- /* harmony export */ loadImage: function() { return /* reexport safe */ _utils_js__WEBPACK_IMPORTED_MODULE_28__.loadImage; },
8767
+ /* harmony export */ keys: function() { return /* reexport safe */ _utils_js__WEBPACK_IMPORTED_MODULE_29__.keys; },
8768
+ /* harmony export */ loadImage: function() { return /* reexport safe */ _utils_js__WEBPACK_IMPORTED_MODULE_29__.loadImage; },
8767
8769
  /* harmony export */ loadNext: function() { return /* reexport safe */ _append_script_js__WEBPACK_IMPORTED_MODULE_1__.loadNext; },
8768
8770
  /* harmony export */ loadNextStyle: function() { return /* reexport safe */ _append_script_js__WEBPACK_IMPORTED_MODULE_1__.loadNextStyle; },
8769
8771
  /* harmony export */ markAsAtomic: function() { return /* reexport safe */ _extend_js__WEBPACK_IMPORTED_MODULE_14__.markAsAtomic; },
8770
8772
  /* harmony export */ markDeprecated: function() { return /* reexport safe */ _mark_deprecated_js__WEBPACK_IMPORTED_MODULE_19__.markDeprecated; },
8771
- /* harmony export */ markOwner: function() { return /* reexport safe */ _utils_js__WEBPACK_IMPORTED_MODULE_28__.markOwner; },
8772
- /* harmony export */ memorizeExec: function() { return /* reexport safe */ _utils_js__WEBPACK_IMPORTED_MODULE_28__.memorizeExec; },
8773
+ /* harmony export */ markOwner: function() { return /* reexport safe */ _utils_js__WEBPACK_IMPORTED_MODULE_29__.markOwner; },
8774
+ /* harmony export */ memorizeExec: function() { return /* reexport safe */ _utils_js__WEBPACK_IMPORTED_MODULE_29__.memorizeExec; },
8773
8775
  /* harmony export */ options: function() { return /* reexport safe */ _error_index_js__WEBPACK_IMPORTED_MODULE_13__.options; },
8774
8776
  /* harmony export */ parseQuery: function() { return /* reexport safe */ _parse_query_js__WEBPACK_IMPORTED_MODULE_21__.parseQuery; },
8775
- /* harmony export */ previewBox: function() { return /* reexport safe */ _print_js__WEBPACK_IMPORTED_MODULE_22__.previewBox; },
8776
- /* harmony export */ refs: function() { return /* reexport safe */ _selector_js__WEBPACK_IMPORTED_MODULE_25__.refs; },
8777
- /* harmony export */ reset: function() { return /* reexport safe */ _reset_js__WEBPACK_IMPORTED_MODULE_23__.reset; },
8778
- /* harmony export */ resolveElement: function() { return /* reexport safe */ _selector_js__WEBPACK_IMPORTED_MODULE_25__.resolveElement; },
8779
- /* harmony export */ scrollIntoViewIfNeeded: function() { return /* reexport safe */ _scroll_into_view_js__WEBPACK_IMPORTED_MODULE_24__.scrollIntoViewIfNeeded; },
8780
- /* harmony export */ set: function() { return /* reexport safe */ _set_js__WEBPACK_IMPORTED_MODULE_26__.set; },
8777
+ /* harmony export */ prepareEmbedCode: function() { return /* reexport safe */ _prepare_media_js__WEBPACK_IMPORTED_MODULE_22__.prepareEmbedCode; },
8778
+ /* harmony export */ prepareMedia: function() { return /* reexport safe */ _prepare_media_js__WEBPACK_IMPORTED_MODULE_22__.prepareMedia; },
8779
+ /* harmony export */ previewBox: function() { return /* reexport safe */ _print_js__WEBPACK_IMPORTED_MODULE_23__.previewBox; },
8780
+ /* harmony export */ refs: function() { return /* reexport safe */ _selector_js__WEBPACK_IMPORTED_MODULE_26__.refs; },
8781
+ /* harmony export */ reset: function() { return /* reexport safe */ _reset_js__WEBPACK_IMPORTED_MODULE_24__.reset; },
8782
+ /* harmony export */ resolveElement: function() { return /* reexport safe */ _selector_js__WEBPACK_IMPORTED_MODULE_26__.resolveElement; },
8783
+ /* harmony export */ scrollIntoViewIfNeeded: function() { return /* reexport safe */ _scroll_into_view_js__WEBPACK_IMPORTED_MODULE_25__.scrollIntoViewIfNeeded; },
8784
+ /* harmony export */ set: function() { return /* reexport safe */ _set_js__WEBPACK_IMPORTED_MODULE_27__.set; },
8781
8785
  /* harmony export */ wrapMedia: function() { return /* reexport safe */ _media_wrapper_js__WEBPACK_IMPORTED_MODULE_20__.wrapMedia; }
8782
8786
  /* harmony export */ });
8783
8787
  /* harmony import */ var _align_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(25726);
@@ -8802,13 +8806,14 @@ const getClassName = (obj)=>{
8802
8806
  /* harmony import */ var _mark_deprecated_js__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(95942);
8803
8807
  /* harmony import */ var _media_wrapper_js__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(61477);
8804
8808
  /* harmony import */ var _parse_query_js__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(82501);
8805
- /* harmony import */ var _print_js__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(11628);
8806
- /* harmony import */ var _reset_js__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(58844);
8807
- /* harmony import */ var _scroll_into_view_js__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(26395);
8808
- /* harmony import */ var _selector_js__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(76078);
8809
- /* harmony import */ var _set_js__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(3703);
8810
- /* harmony import */ var _stack_js__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(50535);
8811
- /* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(37790);
8809
+ /* harmony import */ var _prepare_media_js__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(96437);
8810
+ /* harmony import */ var _print_js__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(11628);
8811
+ /* harmony import */ var _reset_js__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(58844);
8812
+ /* harmony import */ var _scroll_into_view_js__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(26395);
8813
+ /* harmony import */ var _selector_js__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(76078);
8814
+ /* harmony import */ var _set_js__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(3703);
8815
+ /* harmony import */ var _stack_js__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(50535);
8816
+ /* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(37790);
8812
8817
  /*!
8813
8818
  * Jodit Editor (https://xdsoft.net/jodit/)
8814
8819
  * Released under MIT see LICENSE.txt in the project root for license information.
@@ -8844,6 +8849,7 @@ const getClassName = (obj)=>{
8844
8849
 
8845
8850
 
8846
8851
 
8852
+
8847
8853
 
8848
8854
 
8849
8855
  /***/ }),
@@ -9009,6 +9015,45 @@ const isWrapper = (node, wrapper)=>_dom_dom_js__WEBPACK_IMPORTED_MODULE_0__.Dom.
9009
9015
  /* harmony export */ ]);
9010
9016
 
9011
9017
 
9018
+ /***/ }),
9019
+
9020
+ /***/ 96437:
9021
+ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
9022
+
9023
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
9024
+ /* harmony export */ prepareEmbedCode: function() { return /* binding */ prepareEmbedCode; },
9025
+ /* harmony export */ prepareMedia: function() { return /* binding */ prepareMedia; }
9026
+ /* harmony export */ });
9027
+ /* harmony import */ var _align_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(25726);
9028
+ /* harmony import */ var _media_wrapper_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(61477);
9029
+ /*!
9030
+ * Jodit Editor (https://xdsoft.net/jodit/)
9031
+ * Released under MIT see LICENSE.txt in the project root for license information.
9032
+ * Copyright (c) 2013-2026 Valerii Chupurnov. All rights reserved. https://xdsoft.net
9033
+ */
9034
+
9035
+ /**
9036
+ * Puts new media in its wrapper (see `mediaWrappers`) and aligns it with
9037
+ * `mediaDefaultAlign`. Returns the wrapper, or `element` when there is none
9038
+ */ function prepareMedia(jodit, element) {
9039
+ const media = (0,_media_wrapper_js__WEBPACK_IMPORTED_MODULE_1__.wrapMedia)(jodit, element);
9040
+ const { mediaDefaultAlign } = jodit.o;
9041
+ if (mediaDefaultAlign && mediaDefaultAlign !== 'normal') {
9042
+ (0,_align_js__WEBPACK_IMPORTED_MODULE_0__.hAlignElement)(media, mediaDefaultAlign, (0,_align_js__WEBPACK_IMPORTED_MODULE_0__.getAlignClasses)(jodit, media));
9043
+ }
9044
+ return media;
9045
+ }
9046
+ /**
9047
+ * Embed code that is one element is prepared as media (see `prepareMedia`);
9048
+ * other code is returned as it is
9049
+ */ function prepareEmbedCode(jodit, code) {
9050
+ const box = jodit.createInside.div();
9051
+ box.innerHTML = code.trim();
9052
+ const element = box.firstElementChild;
9053
+ return element && box.childNodes.length === 1 ? prepareMedia(jodit, element) : code;
9054
+ }
9055
+
9056
+
9012
9057
  /***/ }),
9013
9058
 
9014
9059
  /***/ 11628:
@@ -13304,7 +13349,9 @@ function toggleAttribute(jodit, value, elm, key, dry, mode) {
13304
13349
  _dom_dom_js__WEBPACK_IMPORTED_MODULE_0__.Dom.append(wrapper, fragment);
13305
13350
  _dom_dom_js__WEBPACK_IMPORTED_MODULE_0__.Dom.safeInsertNode(range, wrapper);
13306
13351
  if (style.elementIsBlock) {
13307
- if (_dom_dom_js__WEBPACK_IMPORTED_MODULE_0__.Dom.isEmpty(wrapper) && !_dom_dom_js__WEBPACK_IMPORTED_MODULE_0__.Dom.isTag(wrapper.firstElementChild, 'br')) {
13352
+ // The wrapped content can bring its own `<br>` (an empty table
13353
+ // cell's), after or inside the temporary `<font>` around the selection
13354
+ if (_dom_dom_js__WEBPACK_IMPORTED_MODULE_0__.Dom.isEmpty(wrapper) && !wrapper.querySelector('br')) {
13308
13355
  _dom_dom_js__WEBPACK_IMPORTED_MODULE_0__.Dom.append(wrapper, ci.element('br'));
13309
13356
  }
13310
13357
  }
@@ -28982,28 +29029,20 @@ class FileBrowserTree extends _core_ui_index_js__WEBPACK_IMPORTED_MODULE_0__.UIG
28982
29029
  /* harmony export */ History: function() { return /* binding */ History; }
28983
29030
  /* harmony export */ });
28984
29031
  /* harmony import */ var _core_component_view_component_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(80480);
28985
- /* harmony import */ var _core_decorators_debounce_debounce_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(81577);
28986
- /* harmony import */ var _config_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(6441);
28987
- /* harmony import */ var _command_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(92643);
28988
- /* harmony import */ var _snapshot_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(52604);
28989
- /* harmony import */ var _stack_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(57034);
29032
+ /* harmony import */ var _config_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(6441);
29033
+ /* harmony import */ var _command_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(92643);
29034
+ /* harmony import */ var _snapshot_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(52604);
29035
+ /* harmony import */ var _stack_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(57034);
28990
29036
  /*!
28991
29037
  * Jodit Editor (https://xdsoft.net/jodit/)
28992
29038
  * Released under MIT see LICENSE.txt in the project root for license information.
28993
29039
  * Copyright (c) 2013-2026 Valerii Chupurnov. All rights reserved. https://xdsoft.net
28994
- */ var __decorate = undefined && undefined.__decorate || function(decorators, target, key, desc) {
28995
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
28996
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
28997
- 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;
28998
- return c > 3 && r && Object.defineProperty(target, key, r), r;
28999
- };
29000
-
29001
-
29040
+ */
29002
29041
 
29003
29042
 
29004
29043
 
29005
29044
 
29006
- _config_js__WEBPACK_IMPORTED_MODULE_2__.Config.prototype.history = {
29045
+ _config_js__WEBPACK_IMPORTED_MODULE_1__.Config.prototype.history = {
29007
29046
  enable: true,
29008
29047
  maxHistoryLength: Infinity,
29009
29048
  timeout: 1000
@@ -29017,27 +29056,31 @@ _config_js__WEBPACK_IMPORTED_MODULE_2__.Config.prototype.history = {
29017
29056
  /**
29018
29057
  * Return state of the WYSIWYG editor to step back
29019
29058
  */ redo() {
29059
+ this.__processPendingChanges();
29020
29060
  if (this.__stack.redo()) {
29021
29061
  this.startValue = this.snapshot.make();
29022
29062
  this.fireChangeStack();
29023
29063
  }
29024
29064
  }
29025
29065
  canRedo() {
29026
- return this.__stack.canRedo();
29066
+ return !this.__hasPendingChanges && this.__stack.canRedo();
29027
29067
  }
29028
29068
  /**
29029
29069
  * Return the state of the WYSIWYG editor to step forward
29030
29070
  */ undo() {
29071
+ this.__processPendingChanges();
29031
29072
  if (this.__stack.undo()) {
29032
29073
  this.startValue = this.snapshot.make();
29033
29074
  this.fireChangeStack();
29034
29075
  }
29035
29076
  }
29036
29077
  canUndo() {
29037
- return this.__stack.canUndo();
29078
+ return this.__hasPendingChanges || this.__stack.canUndo();
29038
29079
  }
29039
29080
  clear() {
29040
29081
  this.startValue = this.snapshot.make();
29082
+ this.async.clearTimeout(this.__timer);
29083
+ this.__hasPendingChanges = false;
29041
29084
  this.__stack.clear();
29042
29085
  this.fireChangeStack();
29043
29086
  }
@@ -29057,9 +29100,29 @@ _config_js__WEBPACK_IMPORTED_MODULE_2__.Config.prototype.history = {
29057
29100
  this.updateTick += 1;
29058
29101
  }
29059
29102
  /**
29060
- * Push new command in stack on some changes
29103
+ * Push new command in stack on some changes. The first change opens a
29104
+ * step, and later ones join it until `history.timeout` has passed,
29105
+ * however close together they come.
29061
29106
  */ onChange() {
29062
- this.__processChanges();
29107
+ // A transaction is over by the time the step is recorded, so it is
29108
+ // checked now
29109
+ if (this.snapshot.isBlocked || this.__hasPendingChanges) {
29110
+ return;
29111
+ }
29112
+ this.__hasPendingChanges = true;
29113
+ this.__timer = this.async.setTimeout(()=>this.__processPendingChanges(), this.j.o.history.timeout);
29114
+ // With a timeout of 0 the step is already recorded. Otherwise
29115
+ // canUndo and canRedo count it from now
29116
+ if (this.__hasPendingChanges) {
29117
+ this.fireChangeStack();
29118
+ }
29119
+ }
29120
+ /**
29121
+ * Push the open step's changes now
29122
+ */ __processPendingChanges() {
29123
+ if (this.__hasPendingChanges) {
29124
+ this.__processChanges();
29125
+ }
29063
29126
  }
29064
29127
  /**
29065
29128
  * @internal
@@ -29067,13 +29130,15 @@ _config_js__WEBPACK_IMPORTED_MODULE_2__.Config.prototype.history = {
29067
29130
  if (this.snapshot.isBlocked || !this.j.o.history.enable) {
29068
29131
  return;
29069
29132
  }
29133
+ this.async.clearTimeout(this.__timer);
29134
+ this.__hasPendingChanges = false;
29070
29135
  this.updateStack();
29071
29136
  }
29072
29137
  /**
29073
29138
  * Update history stack
29074
29139
  */ updateStack(replace = false) {
29075
29140
  const newValue = this.snapshot.make();
29076
- if (_snapshot_js__WEBPACK_IMPORTED_MODULE_4__.Snapshot.equal(newValue, this.startValue)) {
29141
+ if (_snapshot_js__WEBPACK_IMPORTED_MODULE_3__.Snapshot.equal(newValue, this.startValue)) {
29077
29142
  return;
29078
29143
  }
29079
29144
  // Only the selection moved, for example when the selection markers
@@ -29083,7 +29148,7 @@ _config_js__WEBPACK_IMPORTED_MODULE_2__.Config.prototype.history = {
29083
29148
  this.startValue = newValue;
29084
29149
  return;
29085
29150
  }
29086
- const newCommand = new _command_js__WEBPACK_IMPORTED_MODULE_3__.Command(this.startValue, newValue, this, this.updateTick);
29151
+ const newCommand = new _command_js__WEBPACK_IMPORTED_MODULE_2__.Command(this.startValue, newValue, this, this.updateTick);
29087
29152
  if (replace) {
29088
29153
  const command = this.__stack.current();
29089
29154
  if (command && this.updateTick === command.tick) {
@@ -29109,9 +29174,15 @@ _config_js__WEBPACK_IMPORTED_MODULE_2__.Config.prototype.history = {
29109
29174
  this.snapshot.destruct();
29110
29175
  super.destruct();
29111
29176
  }
29112
- constructor(editor, stack = new _stack_js__WEBPACK_IMPORTED_MODULE_5__.Stack(editor.o.history.maxHistoryLength), snapshot = new _snapshot_js__WEBPACK_IMPORTED_MODULE_4__.Snapshot(editor)){
29177
+ constructor(editor, stack = new _stack_js__WEBPACK_IMPORTED_MODULE_4__.Stack(editor.o.history.maxHistoryLength), snapshot = new _snapshot_js__WEBPACK_IMPORTED_MODULE_3__.Snapshot(editor)){
29113
29178
  super(editor);
29114
29179
  this.updateTick = 0;
29180
+ /**
29181
+ * A step is open: changes have come in that are not in the stack yet
29182
+ */ this.__hasPendingChanges = false;
29183
+ /**
29184
+ * Records the open step `history.timeout` after its first change
29185
+ */ this.__timer = 0;
29115
29186
  this.__stack = stack;
29116
29187
  this.snapshot = snapshot;
29117
29188
  if (editor.o.history.enable) {
@@ -29122,6 +29193,7 @@ _config_js__WEBPACK_IMPORTED_MODULE_2__.Config.prototype.history = {
29122
29193
  this.startValue = this.snapshot.make();
29123
29194
  editor.events// save selection
29124
29195
  .on('internalChange internalUpdate', ()=>{
29196
+ this.__processPendingChanges();
29125
29197
  this.startValue = this.snapshot.make();
29126
29198
  }).on(editor.editor, [
29127
29199
  'changeSelection',
@@ -29135,14 +29207,11 @@ _config_js__WEBPACK_IMPORTED_MODULE_2__.Config.prototype.history = {
29135
29207
  if (this.startValue.html === this.j.getNativeEditorValue()) {
29136
29208
  this.startValue = this.snapshot.make();
29137
29209
  }
29138
- }).on(this, 'change.history', this.onChange);
29210
+ }).on(this, 'change.history', ()=>this.onChange());
29139
29211
  });
29140
29212
  }
29141
29213
  }
29142
29214
  }
29143
- __decorate([
29144
- (0,_core_decorators_debounce_debounce_js__WEBPACK_IMPORTED_MODULE_1__.debounce)()
29145
- ], History.prototype, "onChange", null);
29146
29215
 
29147
29216
 
29148
29217
  /***/ }),
@@ -30764,7 +30833,9 @@ class Table extends _core_component_index_js__WEBPACK_IMPORTED_MODULE_0__.ViewCo
30764
30833
  const columnsCount = Table.__getColumnsCount(table);
30765
30834
  row = create.element('tr');
30766
30835
  for(let j = 0; j < columnsCount; j += 1){
30767
- _core_dom_index_js__WEBPACK_IMPORTED_MODULE_3__.Dom.append(row, create.element('td'));
30836
+ const cell = create.element('td');
30837
+ _core_dom_index_js__WEBPACK_IMPORTED_MODULE_3__.Dom.append(cell, create.element('br'));
30838
+ _core_dom_index_js__WEBPACK_IMPORTED_MODULE_3__.Dom.append(row, cell);
30768
30839
  }
30769
30840
  } else {
30770
30841
  row = line.cloneNode(true);
@@ -30781,6 +30852,7 @@ class Table extends _core_component_index_js__WEBPACK_IMPORTED_MODULE_0__.ViewCo
30781
30852
  _core_dom_index_js__WEBPACK_IMPORTED_MODULE_3__.Dom.each(row, (cell)=>{
30782
30853
  if (_core_dom_index_js__WEBPACK_IMPORTED_MODULE_3__.Dom.isCell(cell)) {
30783
30854
  _core_dom_index_js__WEBPACK_IMPORTED_MODULE_3__.Dom.detach(cell);
30855
+ _core_dom_index_js__WEBPACK_IMPORTED_MODULE_3__.Dom.append(cell, create.element('br'));
30784
30856
  }
30785
30857
  });
30786
30858
  }
@@ -30869,6 +30941,7 @@ class Table extends _core_component_index_js__WEBPACK_IMPORTED_MODULE_0__.ViewCo
30869
30941
  const cells = box[i];
30870
30942
  if (cells[columnIndex] !== cells[newColumnIndex] || columnIndex === newColumnIndex) {
30871
30943
  const cell = this.j.createInside.element('td');
30944
+ _core_dom_index_js__WEBPACK_IMPORTED_MODULE_3__.Dom.append(cell, this.j.createInside.element('br'));
30872
30945
  if (insertAfter) {
30873
30946
  _core_dom_index_js__WEBPACK_IMPORTED_MODULE_3__.Dom.after(cells[columnIndex], cell);
30874
30947
  } else {
@@ -31092,7 +31165,7 @@ class Table extends _core_component_index_js__WEBPACK_IMPORTED_MODULE_0__.ViewCo
31092
31165
  Table.__setColumnWidthByDelta(table, first_j, 0, true, __marked);
31093
31166
  }
31094
31167
  }
31095
- first.innerHTML = html.join('<br/>');
31168
+ first.innerHTML = html.join('<br/>') || '<br/>';
31096
31169
  instance(jodit).addSelection(first);
31097
31170
  alreadyMerged.delete(first);
31098
31171
  Table.__unmark(__marked);
@@ -33358,8 +33431,8 @@ _core_ui_index_js__WEBPACK_IMPORTED_MODULE_2__.Icon.set('palette', _palette_svg_
33358
33431
  const box = (0,_tabs_tabs_js__WEBPACK_IMPORTED_MODULE_3__.TabsWidget)(editor, tabs);
33359
33432
  // Marks this popup so its tabs auto-size to their labels (see
33360
33433
  // `.jodit-file-selector` in tabs.less) — long localized tab captions are no
33361
- // longer clipped — while leaving other tab popups (link, video …)
33362
- // untouched.
33434
+ // longer clipped — while leaving other tab popups (link …) untouched. The
33435
+ // video popup, which has an Upload tab too, uses it as well.
33363
33436
  box.classList.add('jodit-file-selector');
33364
33437
  return box;
33365
33438
  };
@@ -34622,6 +34695,10 @@ class backspace extends _core_plugin_index_js__WEBPACK_IMPORTED_MODULE_4__.Plugi
34622
34695
  if (!sel.isFocused()) {
34623
34696
  sel.focus();
34624
34697
  }
34698
+ // Focused with no range, as WebKit leaves it after a click on an embed
34699
+ if (!sel.isInsideArea) {
34700
+ return;
34701
+ }
34625
34702
  if ((0,_cases_check_not_collapsed_js__WEBPACK_IMPORTED_MODULE_7__.checkNotCollapsed)(jodit)) {
34626
34703
  jodit.e.fire('backSpaceAfterDelete', backspace);
34627
34704
  return false;
@@ -35840,7 +35917,8 @@ _core_ui_icon_js__WEBPACK_IMPORTED_MODULE_4__.Icon.set('class-span', _class_span
35840
35917
  /* harmony import */ var _core_helpers_html_safe_html_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(86518);
35841
35918
  /* harmony import */ var _core_plugin_plugin_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(20356);
35842
35919
  /* harmony import */ var _config_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(46776);
35843
- /* harmony import */ var _helpers_index_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(59498);
35920
+ /* harmony import */ var _helpers_visitor_filters_replace_old_tags_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(80973);
35921
+ /* harmony import */ var _helpers_index_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(59498);
35844
35922
  /*!
35845
35923
  * Jodit Editor (https://xdsoft.net/jodit/)
35846
35924
  * Released under MIT see LICENSE.txt in the project root for license information.
@@ -35859,6 +35937,7 @@ _core_ui_icon_js__WEBPACK_IMPORTED_MODULE_4__.Icon.set('class-span', _class_span
35859
35937
 
35860
35938
 
35861
35939
 
35940
+
35862
35941
  /**
35863
35942
  * Clean HTML after removeFormat and insertHorizontalRule command
35864
35943
  */ const TRAILING_BR_BLOCKS = 'p, div, li, td, th, h1, h2, h3, h4, h5, h6, blockquote';
@@ -35883,18 +35962,18 @@ class cleanHtml extends _core_plugin_plugin_js__WEBPACK_IMPORTED_MODULE_5__.Plug
35883
35962
  }
35884
35963
  startWalker() {
35885
35964
  const { jodit } = this;
35886
- const allow = (0,_helpers_index_js__WEBPACK_IMPORTED_MODULE_7__.getHash)(this.j.o.cleanHTML.allowTags);
35887
- const deny = (0,_helpers_index_js__WEBPACK_IMPORTED_MODULE_7__.getHash)(this.j.o.cleanHTML.denyTags);
35888
- this.walker.on('visit', (node)=>(0,_helpers_index_js__WEBPACK_IMPORTED_MODULE_7__.visitNodeWalker)(jodit, node, allow, deny, this.currentSelectionNode)).on('end', (affected)=>{
35965
+ const allow = (0,_helpers_index_js__WEBPACK_IMPORTED_MODULE_8__.getHash)(this.j.o.cleanHTML.allowTags);
35966
+ const deny = (0,_helpers_index_js__WEBPACK_IMPORTED_MODULE_8__.getHash)(this.j.o.cleanHTML.denyTags);
35967
+ this.walker.on('visit', (node)=>(0,_helpers_index_js__WEBPACK_IMPORTED_MODULE_8__.visitNodeWalker)(jodit, node, allow, deny, this.currentSelectionNode)).on('end', (affected)=>{
35889
35968
  this.j.e.fire(affected ? 'internalChange finishedCleanHTMLWorker' : 'finishedCleanHTMLWorker');
35890
35969
  });
35891
35970
  }
35892
35971
  beforeCommand(command) {
35893
35972
  if (command.toLowerCase() === 'removeformat') {
35894
35973
  if (this.j.s.isCollapsed()) {
35895
- (0,_helpers_index_js__WEBPACK_IMPORTED_MODULE_7__.removeFormatForCollapsedSelection)(this.j);
35974
+ (0,_helpers_index_js__WEBPACK_IMPORTED_MODULE_8__.removeFormatForCollapsedSelection)(this.j);
35896
35975
  } else {
35897
- (0,_helpers_index_js__WEBPACK_IMPORTED_MODULE_7__.removeFormatForSelection)(this.j);
35976
+ (0,_helpers_index_js__WEBPACK_IMPORTED_MODULE_8__.removeFormatForSelection)(this.j);
35898
35977
  }
35899
35978
  return false;
35900
35979
  }
@@ -35920,6 +35999,7 @@ class cleanHtml extends _core_plugin_plugin_js__WEBPACK_IMPORTED_MODULE_5__.Plug
35920
35999
  ];
35921
36000
  sandBox.innerHTML = data.value;
35922
36001
  this.j.e.fire('safeHTML', sandBox);
36002
+ this.__replaceOldTags(sandBox);
35923
36003
  data.value = sandBox.innerHTML;
35924
36004
  (0,_core_helpers_html_safe_html_js__WEBPACK_IMPORTED_MODULE_4__.safeHTML)(sandBox, {
35925
36005
  safeJavaScriptLink: true,
@@ -35928,6 +36008,20 @@ class cleanHtml extends _core_plugin_plugin_js__WEBPACK_IMPORTED_MODULE_5__.Plug
35928
36008
  _core_dom_dom_js__WEBPACK_IMPORTED_MODULE_1__.Dom.safeRemove(iframe);
35929
36009
  return false;
35930
36010
  }
36011
+ /**
36012
+ * Replace old tags (`<b>` with `<strong>`, `<i>` with `<em>`) in an
36013
+ * assigned value straight away. The walker would get to them only after
36014
+ * every node before them, seconds later on a long document, and until
36015
+ * then Bold does not treat `<b>` as bold, and the swap can move the caret.
36016
+ */ __replaceOldTags(box) {
36017
+ const { replaceOldTags: list, disableCleanFilter } = this.j.o.cleanHTML;
36018
+ if (!list || (disableCleanFilter === null || disableCleanFilter === void 0 ? void 0 : disableCleanFilter.has('replaceOldTags'))) {
36019
+ return;
36020
+ }
36021
+ _core_dom_dom_js__WEBPACK_IMPORTED_MODULE_1__.Dom.each(box, (node)=>{
36022
+ ;(0,_helpers_visitor_filters_replace_old_tags_js__WEBPACK_IMPORTED_MODULE_7__.replaceOldTags)(this.j, node, false);
36023
+ });
36024
+ }
35931
36025
  /**
35932
36026
  * Collapse a value that holds only a single empty block (e.g.
35933
36027
  * `<p><br></p>` left after deleting all content) to an empty string —
@@ -36631,10 +36725,33 @@ __webpack_require__.r(__webpack_exports__);
36631
36725
  }
36632
36726
  const tagName = list[oldParent.nodeName.toLowerCase()] || list[oldParent.nodeName];
36633
36727
  if (tagName) {
36634
- return _core_dom_dom_js__WEBPACK_IMPORTED_MODULE_0__.Dom.replace(oldParent, tagName, jodit.createInside, true, false);
36728
+ const restoreSelection = keepSelection(jodit, oldParent);
36729
+ const newParent = _core_dom_dom_js__WEBPACK_IMPORTED_MODULE_0__.Dom.replace(oldParent, tagName, jodit.createInside, true, false);
36730
+ restoreSelection === null || restoreSelection === void 0 ? void 0 : restoreSelection(newParent);
36731
+ return newParent;
36635
36732
  }
36636
36733
  return oldParent;
36637
36734
  }
36735
+ /**
36736
+ * Moving the children out of an element collapses a selection inside them to
36737
+ * where the element was, so the caret jumps to the start of the text being
36738
+ * typed. Returns a callback that puts the selection back on the same nodes.
36739
+ *
36740
+ * Like `removeEmptyTextNode`, it leaves the selection alone once focus has
36741
+ * left the editor, because selecting would take focus back.
36742
+ */ function keepSelection(jodit, elm) {
36743
+ const { sel } = jodit.s;
36744
+ if (!(sel === null || sel === void 0 ? void 0 : sel.anchorNode) || !sel.focusNode || !jodit.s.isFocused()) {
36745
+ return null;
36746
+ }
36747
+ const { anchorNode, anchorOffset, focusNode, focusOffset } = sel;
36748
+ if (!_core_dom_dom_js__WEBPACK_IMPORTED_MODULE_0__.Dom.isOrContains(elm, anchorNode) && !_core_dom_dom_js__WEBPACK_IMPORTED_MODULE_0__.Dom.isOrContains(elm, focusNode)) {
36749
+ return null;
36750
+ }
36751
+ return (newElm)=>{
36752
+ sel.setBaseAndExtent(anchorNode === elm ? newElm : anchorNode, anchorOffset, focusNode === elm ? newElm : focusNode, focusOffset);
36753
+ };
36754
+ }
36638
36755
 
36639
36756
 
36640
36757
  /***/ }),
@@ -38600,9 +38717,32 @@ const brBoxes = new Set([
38600
38717
  * Released under MIT see LICENSE.txt in the project root for license information.
38601
38718
  * Copyright (c) 2013-2026 Valerii Chupurnov. All rights reserved. https://xdsoft.net
38602
38719
  */
38720
+ /**
38721
+ * Moves the cursor out of a block that can't hold the inserted block: before
38722
+ * or after it when the cursor is at its edge, or between its two halves when
38723
+ * the cursor is inside its content. An empty block is removed
38724
+ */ function moveCursorOutOf(jodit, parent) {
38725
+ var _a;
38726
+ const { s } = jodit;
38727
+ if (_core_dom_dom_js__WEBPACK_IMPORTED_MODULE_0__.Dom.isEmpty(parent)) {
38728
+ s.setCursorAfter(parent);
38729
+ _core_dom_dom_js__WEBPACK_IMPORTED_MODULE_0__.Dom.safeRemove(parent);
38730
+ return;
38731
+ }
38732
+ if (s.cursorOnTheRight(parent)) {
38733
+ s.setCursorAfter(parent);
38734
+ return;
38735
+ }
38736
+ if (s.cursorOnTheLeft(parent)) {
38737
+ s.setCursorBefore(parent);
38738
+ return;
38739
+ }
38740
+ s.setCursorAfter((_a = s.splitSelection(parent)) !== null && _a !== void 0 ? _a : parent);
38741
+ }
38603
38742
  /**
38604
38743
  * Checks whether the insertion of an element at the current location is allowed,
38605
- * if it is not allowed, it deletes an empty block element or moves the cursor after it
38744
+ * if it is not allowed, it deletes an empty block element, moves the cursor
38745
+ * before or after it, or splits it at the cursor
38606
38746
  * @internal
38607
38747
  */ function checkBlockNesting(jodit, node) {
38608
38748
  var _a, _b;
@@ -38631,10 +38771,7 @@ const brBoxes = new Set([
38631
38771
  parent = current;
38632
38772
  }
38633
38773
  if (parent) {
38634
- jodit.s.setCursorAfter(parent);
38635
- if (_core_dom_dom_js__WEBPACK_IMPORTED_MODULE_0__.Dom.isEmpty(parent)) {
38636
- _core_dom_dom_js__WEBPACK_IMPORTED_MODULE_0__.Dom.safeRemove(parent);
38637
- }
38774
+ moveCursorOutOf(jodit, parent);
38638
38775
  }
38639
38776
  }
38640
38777
  }
@@ -39139,7 +39276,14 @@ function brBefore(start) {
39139
39276
  _core_dom_dom_js__WEBPACK_IMPORTED_MODULE_0__.Dom.after(link, fake);
39140
39277
  } else if (s.cursorOnTheLeft(link, fake)) {
39141
39278
  _core_dom_dom_js__WEBPACK_IMPORTED_MODULE_0__.Dom.before(link, fake);
39279
+ } else {
39280
+ return;
39142
39281
  }
39282
+ // The block is split at the caret, so the caret leaves the link too:
39283
+ // beside the fake, since Safari mislays a caret inside a removed node
39284
+ const range = s.createRange();
39285
+ range.setStartBefore(fake);
39286
+ s.selectRange(range);
39143
39287
  }
39144
39288
  }
39145
39289
 
@@ -39369,9 +39513,10 @@ _core_global_js__WEBPACK_IMPORTED_MODULE_1__.pluginSystem.add('file', file);
39369
39513
  /***/ (function(__unused_webpack_module, __unused_webpack___webpack_exports__, __webpack_require__) {
39370
39514
 
39371
39515
  /* unused harmony export focus */
39372
- /* harmony import */ var _core_dom_index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(22732);
39373
- /* harmony import */ var _core_global_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(580);
39374
- /* harmony import */ var _config_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(6441);
39516
+ /* harmony import */ var _core_constants_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(82758);
39517
+ /* harmony import */ var _core_dom_index_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(22732);
39518
+ /* harmony import */ var _core_global_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(580);
39519
+ /* harmony import */ var _config_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(6441);
39375
39520
  /*!
39376
39521
  * Jodit Editor (https://xdsoft.net/jodit/)
39377
39522
  * Released under MIT see LICENSE.txt in the project root for license information.
@@ -39379,15 +39524,16 @@ _core_global_js__WEBPACK_IMPORTED_MODULE_1__.pluginSystem.add('file', file);
39379
39524
  */
39380
39525
 
39381
39526
 
39527
+
39382
39528
  /**
39383
39529
  * After loading the page into the editor once the focus is set
39384
- */ _config_js__WEBPACK_IMPORTED_MODULE_2__.Config.prototype.autofocus = false;
39530
+ */ _config_js__WEBPACK_IMPORTED_MODULE_3__.Config.prototype.autofocus = false;
39385
39531
  /**
39386
39532
  * Cursor position after autofocus
39387
- */ _config_js__WEBPACK_IMPORTED_MODULE_2__.Config.prototype.cursorAfterAutofocus = 'end';
39533
+ */ _config_js__WEBPACK_IMPORTED_MODULE_3__.Config.prototype.cursorAfterAutofocus = 'end';
39388
39534
  /**
39389
39535
  * Save current selection on blur event
39390
- */ _config_js__WEBPACK_IMPORTED_MODULE_2__.Config.prototype.saveSelectionOnBlur = true;
39536
+ */ _config_js__WEBPACK_IMPORTED_MODULE_3__.Config.prototype.saveSelectionOnBlur = true;
39391
39537
  function focus(editor) {
39392
39538
  if (editor.o.saveSelectionOnBlur) {
39393
39539
  // A click that brings focus back places the caret itself, and Chrome
@@ -39419,10 +39565,10 @@ function focus(editor) {
39419
39565
  let textNode = null;
39420
39566
  switch(editor.o.cursorAfterAutofocus){
39421
39567
  case 'start':
39422
- textNode = _core_dom_index_js__WEBPACK_IMPORTED_MODULE_0__.Dom.first(editor.editor, (node)=>_core_dom_index_js__WEBPACK_IMPORTED_MODULE_0__.Dom.isText(node));
39568
+ textNode = _core_dom_index_js__WEBPACK_IMPORTED_MODULE_1__.Dom.first(editor.editor, (node)=>_core_dom_index_js__WEBPACK_IMPORTED_MODULE_1__.Dom.isText(node));
39423
39569
  break;
39424
39570
  case 'end':
39425
- textNode = _core_dom_index_js__WEBPACK_IMPORTED_MODULE_0__.Dom.last(editor.editor, (node)=>_core_dom_index_js__WEBPACK_IMPORTED_MODULE_0__.Dom.isText(node));
39571
+ textNode = _core_dom_index_js__WEBPACK_IMPORTED_MODULE_1__.Dom.last(editor.editor, (node)=>_core_dom_index_js__WEBPACK_IMPORTED_MODULE_1__.Dom.isText(node));
39426
39572
  break;
39427
39573
  }
39428
39574
  if (textNode) {
@@ -39440,7 +39586,8 @@ function focus(editor) {
39440
39586
  });
39441
39587
  editor.e.on('afterInit afterAddPlace', ()=>{
39442
39588
  editor.e.off(editor.editor, 'mousedown.autofocus').on(editor.editor, 'mousedown.autofocus', (e)=>{
39443
- if (editor.isEditorMode() && e.target && _core_dom_index_js__WEBPACK_IMPORTED_MODULE_0__.Dom.isBlock(e.target) && !e.target.childNodes.length) {
39589
+ // An empty block takes the caret, but a video, say, can't hold one
39590
+ if (editor.isEditorMode() && e.target && _core_dom_index_js__WEBPACK_IMPORTED_MODULE_1__.Dom.isBlock(e.target) && !_core_dom_index_js__WEBPACK_IMPORTED_MODULE_1__.Dom.isTag(e.target, _core_constants_js__WEBPACK_IMPORTED_MODULE_0__.INSEPARABLE_TAGS) && !e.target.childNodes.length) {
39444
39591
  if (editor.editor === e.target) {
39445
39592
  editor.s.focus();
39446
39593
  } else {
@@ -39450,7 +39597,7 @@ function focus(editor) {
39450
39597
  });
39451
39598
  });
39452
39599
  }
39453
- _core_global_js__WEBPACK_IMPORTED_MODULE_1__.pluginSystem.add('focus', focus);
39600
+ _core_global_js__WEBPACK_IMPORTED_MODULE_2__.pluginSystem.add('focus', focus);
39454
39601
 
39455
39602
 
39456
39603
  /***/ }),
@@ -40671,18 +40818,29 @@ function hr(editor) {
40671
40818
  group: 'insert'
40672
40819
  });
40673
40820
  editor.registerCommand('insertHorizontalRule', ()=>{
40821
+ var _a;
40674
40822
  const elm = editor.createInside.element('hr');
40675
40823
  editor.s.insertNode(elm, false, false);
40676
40824
  const block = _core_dom_index_js__WEBPACK_IMPORTED_MODULE_0__.Dom.closest(elm.parentElement, _core_dom_index_js__WEBPACK_IMPORTED_MODULE_0__.Dom.isBlock, editor.editor);
40677
- if (block && _core_dom_index_js__WEBPACK_IMPORTED_MODULE_0__.Dom.isEmpty(block) && block !== editor.editor) {
40825
+ // A block that holds other blocks, such as a list item or a table
40826
+ // cell, keeps the line
40827
+ if (block && _core_dom_index_js__WEBPACK_IMPORTED_MODULE_0__.Dom.isEmpty(block) && block !== editor.editor && !((_a = editor.o.dtd) === null || _a === void 0 ? void 0 : _a.blockLimits[block.nodeName.toLowerCase()])) {
40678
40828
  _core_dom_index_js__WEBPACK_IMPORTED_MODULE_0__.Dom.after(block, elm);
40679
40829
  _core_dom_index_js__WEBPACK_IMPORTED_MODULE_0__.Dom.safeRemove(block);
40680
40830
  }
40681
- let p = _core_dom_index_js__WEBPACK_IMPORTED_MODULE_0__.Dom.next(elm, _core_dom_index_js__WEBPACK_IMPORTED_MODULE_0__.Dom.isBlock, editor.editor, false);
40682
- if (!p) {
40683
- p = editor.createInside.element(editor.o.enter);
40684
- _core_dom_index_js__WEBPACK_IMPORTED_MODULE_0__.Dom.after(elm, p);
40831
+ const next = _core_dom_index_js__WEBPACK_IMPORTED_MODULE_0__.Dom.findNotEmptySibling(elm, false);
40832
+ if (_core_dom_index_js__WEBPACK_IMPORTED_MODULE_0__.Dom.isBlock(next)) {
40833
+ editor.s.setCursorIn(next, true);
40834
+ return false;
40835
+ }
40836
+ // In a list item or a table cell the text goes on after the line, as
40837
+ // it does with the browsers' own command
40838
+ if (next || elm.parentNode !== editor.editor && !_core_dom_index_js__WEBPACK_IMPORTED_MODULE_0__.Dom.isBlock(_core_dom_index_js__WEBPACK_IMPORTED_MODULE_0__.Dom.findNotEmptySibling(elm, true))) {
40839
+ editor.s.setCursorAfter(elm);
40840
+ return false;
40685
40841
  }
40842
+ const p = editor.createInside.element(editor.o.enter);
40843
+ _core_dom_index_js__WEBPACK_IMPORTED_MODULE_0__.Dom.after(elm, p);
40686
40844
  editor.s.setCursorIn(p);
40687
40845
  return false;
40688
40846
  });
@@ -40715,7 +40873,7 @@ _config_js__WEBPACK_IMPORTED_MODULE_0__.Config.prototype.iframeBaseUrl = '';
40715
40873
  _config_js__WEBPACK_IMPORTED_MODULE_0__.Config.prototype.iframeTitle = 'Jodit Editor';
40716
40874
  _config_js__WEBPACK_IMPORTED_MODULE_0__.Config.prototype.iframeDoctype = '<!DOCTYPE html>';
40717
40875
  _config_js__WEBPACK_IMPORTED_MODULE_0__.Config.prototype.iframeDefaultSrc = 'about:blank';
40718
- _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_editor .jodit_iframe_wrapper{' + 'display: block;' + 'clear: both;' + 'user-select: none;' + 'position: relative;' + '}' + '.jodit_editor .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);' + '} ' + '.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' + '}';
40876
+ _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' + '}';
40719
40877
  _config_js__WEBPACK_IMPORTED_MODULE_0__.Config.prototype.iframeCSSLinks = [];
40720
40878
  _config_js__WEBPACK_IMPORTED_MODULE_0__.Config.prototype.iframeSandbox = null;
40721
40879
 
@@ -43634,6 +43792,55 @@ const align = {
43634
43792
  /* harmony import */ var _core_ui_popup_index_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(61259);
43635
43793
  /* harmony import */ var _modules_toolbar_factory_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(21491);
43636
43794
  /* harmony import */ var _config_config_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(24526);
43795
+ function _define_property(obj, key, value) {
43796
+ if (key in obj) {
43797
+ Object.defineProperty(obj, key, {
43798
+ value: value,
43799
+ enumerable: true,
43800
+ configurable: true,
43801
+ writable: true
43802
+ });
43803
+ } else obj[key] = value;
43804
+ return obj;
43805
+ }
43806
+ function _object_spread(target) {
43807
+ for(var i = 1; i < arguments.length; i++){
43808
+ var source = arguments[i] != null ? arguments[i] : {};
43809
+ var ownKeys = Object.keys(source);
43810
+ if (typeof Object.getOwnPropertySymbols === "function") {
43811
+ ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function(sym) {
43812
+ return Object.getOwnPropertyDescriptor(source, sym).enumerable;
43813
+ }));
43814
+ }
43815
+ ownKeys.forEach(function(key) {
43816
+ _define_property(target, key, source[key]);
43817
+ });
43818
+ }
43819
+ return target;
43820
+ }
43821
+ function ownKeys(object, enumerableOnly) {
43822
+ var keys = Object.keys(object);
43823
+ if (Object.getOwnPropertySymbols) {
43824
+ var symbols = Object.getOwnPropertySymbols(object);
43825
+ if (enumerableOnly) {
43826
+ symbols = symbols.filter(function(sym) {
43827
+ return Object.getOwnPropertyDescriptor(object, sym).enumerable;
43828
+ });
43829
+ }
43830
+ keys.push.apply(keys, symbols);
43831
+ }
43832
+ return keys;
43833
+ }
43834
+ function _object_spread_props(target, source) {
43835
+ source = source != null ? source : {};
43836
+ if (Object.getOwnPropertyDescriptors) Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));
43837
+ else {
43838
+ ownKeys(Object(source)).forEach(function(key) {
43839
+ Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
43840
+ });
43841
+ }
43842
+ return target;
43843
+ }
43637
43844
  /*!
43638
43845
  * Jodit Editor (https://xdsoft.net/jodit/)
43639
43846
  * Released under MIT see LICENSE.txt in the project root for license information.
@@ -43667,10 +43874,29 @@ const align = {
43667
43874
  // A media wrapper kept in the content gets the media popup
43668
43875
  const type = mediaWrapper ? 'jodit-media' : target === null || target === void 0 ? void 0 : target.nodeName.toLowerCase();
43669
43876
  if (target && type && this.canShowPopupForType(type)) {
43670
- this.showPopup(()=>(0,_core_helpers_index_js__WEBPACK_IMPORTED_MODULE_3__.position)(target, this.j), type, target);
43877
+ const isMedia = type === 'jodit-media';
43878
+ // Beside the media in a wrapper kept in the content, which can fill
43879
+ // the line
43880
+ const bound = mediaWrapper && (0,_core_helpers_index_js__WEBPACK_IMPORTED_MODULE_3__.getWrappedMedia)(this.j, mediaWrapper) || target;
43881
+ this.showPopup(()=>this.__bound(bound, isMedia), type, target);
43671
43882
  return false;
43672
43883
  }
43673
43884
  }
43885
+ /**
43886
+ * The box the popup opens beside: the target's, with room for the
43887
+ * resizer's handles when the target gets them, so it doesn't cover them
43888
+ */ __bound(target, isMedia) {
43889
+ const bound = (0,_core_helpers_index_js__WEBPACK_IMPORTED_MODULE_3__.position)(target, this.j);
43890
+ const resizable = this.j.o.allowResizeTags;
43891
+ if (!isMedia && !(resizable && _core_dom_index_js__WEBPACK_IMPORTED_MODULE_1__.Dom.isTag(target, resizable))) {
43892
+ return bound;
43893
+ }
43894
+ const room = parseInt(this.j.ow.getComputedStyle(this.j.container).getPropertyValue('--jd-resizer-handle-size'), 10) / 2 || 0;
43895
+ return _object_spread_props(_object_spread({}, bound), {
43896
+ top: bound.top - room,
43897
+ height: bound.height + room * 2
43898
+ });
43899
+ }
43674
43900
  /**
43675
43901
  * Show inline popup with some toolbar
43676
43902
  *
@@ -45005,7 +45231,8 @@ _config_js__WEBPACK_IMPORTED_MODULE_2__.Config.prototype.controls.link = {
45005
45231
  height: (_d = jodit.o.video) === null || _d === void 0 ? void 0 : _d.defaultHeight
45006
45232
  });
45007
45233
  if (embed !== html) {
45008
- return jodit.createInside.fromHTML(embed);
45234
+ const media = (0,_core_helpers_index_js__WEBPACK_IMPORTED_MODULE_3__.prepareEmbedCode)(jodit, embed);
45235
+ return (0,_core_helpers_index_js__WEBPACK_IMPORTED_MODULE_3__.isString)(media) ? jodit.createInside.fromHTML(media) : media;
45009
45236
  }
45010
45237
  }
45011
45238
  if (jodit.s.isCollapsed()) {
@@ -45483,10 +45710,27 @@ _config_js__WEBPACK_IMPORTED_MODULE_0__.Config.prototype.mediaWrappers = {};
45483
45710
  } else {
45484
45711
  return;
45485
45712
  }
45713
+ // Selected, as an image is, so Delete and Backspace remove it
45486
45714
  editor.e.off(element, 'mousedown.select touchstart.select').on(element, 'mousedown.select touchstart.select', ()=>{
45487
- editor.s.setCursorAfter(element);
45715
+ editor.s.select(element);
45488
45716
  });
45489
45717
  };
45718
+ // Media in a wrapper kept in the content let clicks through to it, as
45719
+ // jodit-media covers its media, so a click selects the media rather than
45720
+ // playing it. An inline wrapper holds it as an inline-block, unless its
45721
+ // classes or style give it a display of their own
45722
+ const wrappers = Object.values(mediaWrappers);
45723
+ if (wrappers.length) {
45724
+ editor.e.on('afterInit', ()=>{
45725
+ const selectors = (list)=>[
45726
+ ...new Set(list)
45727
+ ].join(',');
45728
+ const scoped = ({ tag, className })=>`.jodit-wysiwyg ${tag}.${className}`;
45729
+ const inline = selectors(wrappers.filter(({ tag })=>_core_constants_js__WEBPACK_IMPORTED_MODULE_0__.IS_INLINE.test(tag)).map(scoped));
45730
+ const media = selectors(wrappers.flatMap((wrapper)=>mediaBlocks.map((tag)=>`${scoped(wrapper)}>${tag}`)));
45731
+ (0,_core_global_js__WEBPACK_IMPORTED_MODULE_2__.getContainer)(editor, 'media-wrappers', 'style', true).innerHTML = (inline ? `:where(${inline}){display:inline-block}` : '') + `${media}{pointer-events:none}`;
45732
+ });
45733
+ }
45490
45734
  if (mediaInFakeBlock || Object.keys(mediaWrappers).length) {
45491
45735
  editor.e.on('afterGetValueFromEditor', (data)=>{
45492
45736
  const rxp = new RegExp(`<${mediaFakeTag}[^>]+data-${keyFake}[^>]+>([^]+?)</${mediaFakeTag}>`, 'ig');
@@ -46407,12 +46651,14 @@ _config_js__WEBPACK_IMPORTED_MODULE_1__.Config.prototype.controls.paste = {
46407
46651
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
46408
46652
  /* harmony export */ askInsertTypeDialog: function() { return /* binding */ askInsertTypeDialog; },
46409
46653
  /* harmony export */ getAllTypes: function() { return /* binding */ getAllTypes; },
46410
- /* harmony export */ pasteInsertHtml: function() { return /* binding */ pasteInsertHtml; }
46654
+ /* harmony export */ pasteInsertHtml: function() { return /* binding */ pasteInsertHtml; },
46655
+ /* harmony export */ removeGoogleDocsWrapper: function() { return /* binding */ removeGoogleDocsWrapper; }
46411
46656
  /* harmony export */ });
46412
46657
  /* harmony import */ var _core_constants_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(82758);
46413
46658
  /* harmony import */ var _core_dom_dom_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(2748);
46414
- /* harmony import */ var _core_helpers_checker_index_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(27613);
46415
- /* harmony import */ var _core_ui_button_button_button_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(10830);
46659
+ /* harmony import */ var _core_helpers_array_to_array_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(4510);
46660
+ /* harmony import */ var _core_helpers_checker_index_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(27613);
46661
+ /* harmony import */ var _core_ui_button_button_button_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(10830);
46416
46662
  /*!
46417
46663
  * Jodit Editor (https://xdsoft.net/jodit/)
46418
46664
  * Released under MIT see LICENSE.txt in the project root for license information.
@@ -46421,6 +46667,7 @@ _config_js__WEBPACK_IMPORTED_MODULE_1__.Config.prototype.controls.paste = {
46421
46667
 
46422
46668
 
46423
46669
 
46670
+
46424
46671
  /**
46425
46672
  * Remove special HTML comments
46426
46673
  * @private
@@ -46436,6 +46683,21 @@ _config_js__WEBPACK_IMPORTED_MODULE_1__.Config.prototype.controls.paste = {
46436
46683
  }
46437
46684
  return html;
46438
46685
  }
46686
+ /**
46687
+ * Google Docs wraps the copied content in
46688
+ * `<b style="font-weight:normal;" id="docs-internal-guid-…">`. Kept, the
46689
+ * wrapper holds the pasted blocks, and without its style it makes the whole
46690
+ * paste bold
46691
+ * @private
46692
+ */ function removeGoogleDocsWrapper(html) {
46693
+ if (!/<b\s[^>]*docs-internal-guid-/i.test(html)) {
46694
+ return html;
46695
+ }
46696
+ // An inert document: images don't load and handlers don't run
46697
+ const { body } = new DOMParser().parseFromString(html, 'text/html');
46698
+ (0,_core_helpers_array_to_array_js__WEBPACK_IMPORTED_MODULE_2__.toArray)(body.querySelectorAll('b[id^="docs-internal-guid-"]')).forEach(_core_dom_dom_js__WEBPACK_IMPORTED_MODULE_1__.Dom.unwrap);
46699
+ return body.innerHTML;
46700
+ }
46439
46701
  /**
46440
46702
  * @private
46441
46703
  */ function isDragEvent(e) {
@@ -46452,11 +46714,11 @@ _config_js__WEBPACK_IMPORTED_MODULE_1__.Config.prototype.controls.paste = {
46452
46714
  editor.s.insertCursorAtPoint(e.clientX, e.clientY);
46453
46715
  }
46454
46716
  const result = editor.e.fire('beforePasteInsert', html);
46455
- if (!(0,_core_helpers_checker_index_js__WEBPACK_IMPORTED_MODULE_2__.isVoid)(result) && ((0,_core_helpers_checker_index_js__WEBPACK_IMPORTED_MODULE_2__.isString)(result) || (0,_core_helpers_checker_index_js__WEBPACK_IMPORTED_MODULE_2__.isNumber)(result) || _core_dom_dom_js__WEBPACK_IMPORTED_MODULE_1__.Dom.isNode(result))) {
46717
+ if (!(0,_core_helpers_checker_index_js__WEBPACK_IMPORTED_MODULE_3__.isVoid)(result) && ((0,_core_helpers_checker_index_js__WEBPACK_IMPORTED_MODULE_3__.isString)(result) || (0,_core_helpers_checker_index_js__WEBPACK_IMPORTED_MODULE_3__.isNumber)(result) || _core_dom_dom_js__WEBPACK_IMPORTED_MODULE_1__.Dom.isNode(result))) {
46456
46718
  html = result;
46457
46719
  }
46458
- if ((0,_core_helpers_checker_index_js__WEBPACK_IMPORTED_MODULE_2__.isString)(html)) {
46459
- html = removeExtraFragments(html);
46720
+ if ((0,_core_helpers_checker_index_js__WEBPACK_IMPORTED_MODULE_3__.isString)(html)) {
46721
+ html = removeExtraFragments(removeGoogleDocsWrapper(html));
46460
46722
  }
46461
46723
  editor.s.insertHTML(html);
46462
46724
  }
@@ -46466,7 +46728,7 @@ _config_js__WEBPACK_IMPORTED_MODULE_1__.Config.prototype.controls.paste = {
46466
46728
  */ function getAllTypes(dt) {
46467
46729
  const types = dt.types;
46468
46730
  let types_str = '';
46469
- if ((0,_core_helpers_checker_index_js__WEBPACK_IMPORTED_MODULE_2__.isArray)(types) || ({}).toString.call(types) === '[object DOMStringList]') {
46731
+ if ((0,_core_helpers_checker_index_js__WEBPACK_IMPORTED_MODULE_3__.isArray)(types) || ({}).toString.call(types) === '[object DOMStringList]') {
46470
46732
  for(let i = 0; i < types.length; i += 1){
46471
46733
  types_str += types[i] + ';';
46472
46734
  }
@@ -46483,7 +46745,7 @@ _config_js__WEBPACK_IMPORTED_MODULE_1__.Config.prototype.controls.paste = {
46483
46745
  return;
46484
46746
  }
46485
46747
  const dialog = jodit.confirm(`<div style="word-break: normal; white-space: normal">${jodit.i18n(msg)}</div>`, jodit.i18n(title));
46486
- const buttons = buttonList.map(({ text, value })=>(0,_core_ui_button_button_button_js__WEBPACK_IMPORTED_MODULE_3__.Button)(jodit, {
46748
+ const buttons = buttonList.map(({ text, value })=>(0,_core_ui_button_button_button_js__WEBPACK_IMPORTED_MODULE_4__.Button)(jodit, {
46487
46749
  text,
46488
46750
  name: text.toLowerCase(),
46489
46751
  tabIndex: 0
@@ -46499,7 +46761,7 @@ _config_js__WEBPACK_IMPORTED_MODULE_1__.Config.prototype.controls.paste = {
46499
46761
  }
46500
46762
  jodit.e.fire('afterClosePasteDialog', dialog);
46501
46763
  });
46502
- const cancel = (0,_core_ui_button_button_button_js__WEBPACK_IMPORTED_MODULE_3__.Button)(jodit, {
46764
+ const cancel = (0,_core_ui_button_button_button_js__WEBPACK_IMPORTED_MODULE_4__.Button)(jodit, {
46503
46765
  text: 'Cancel',
46504
46766
  tabIndex: 0
46505
46767
  }).onAction(()=>{
@@ -46648,7 +46910,7 @@ _config_js__WEBPACK_IMPORTED_MODULE_1__.Config.prototype.controls.paste = {
46648
46910
  this.j.buffer.set(_core_constants_js__WEBPACK_IMPORTED_MODULE_0__.CLIPBOARD_ID, html);
46649
46911
  switch(action){
46650
46912
  case _core_constants_js__WEBPACK_IMPORTED_MODULE_0__.INSERT_CLEAR_HTML:
46651
- html = (0,_core_helpers_index_js__WEBPACK_IMPORTED_MODULE_4__.cleanFromWord)(html);
46913
+ html = (0,_core_helpers_index_js__WEBPACK_IMPORTED_MODULE_4__.cleanFromWord)((0,_helpers_js__WEBPACK_IMPORTED_MODULE_7__.removeGoogleDocsWrapper)(html));
46652
46914
  break;
46653
46915
  case _core_constants_js__WEBPACK_IMPORTED_MODULE_0__.INSERT_ONLY_TEXT:
46654
46916
  html = (0,_core_helpers_index_js__WEBPACK_IMPORTED_MODULE_4__.stripTags)(html, this.j.ed, new Set(this.j.o.pasteExcludeStripTags), this.j.o.nl2brInPlainText);
@@ -47798,7 +48060,7 @@ const keyBInd = '__jodit-resizer_binded';
47798
48060
  addEventListeners() {
47799
48061
  const editor = this.j;
47800
48062
  editor.e.off(editor.editor, '.resizer').off(editor.ow, '.resizer').on(editor.editor, 'keydown.resizer', (e)=>{
47801
- if (this.isShown && e.key === _core_constants_js__WEBPACK_IMPORTED_MODULE_0__.KEY_DELETE && this.element && !_core_dom_dom_js__WEBPACK_IMPORTED_MODULE_2__.Dom.isTag(this.element, 'table')) {
48063
+ if (this.isShown && (e.key === _core_constants_js__WEBPACK_IMPORTED_MODULE_0__.KEY_DELETE || e.key === _core_constants_js__WEBPACK_IMPORTED_MODULE_0__.KEY_BACKSPACE) && this.element && !_core_dom_dom_js__WEBPACK_IMPORTED_MODULE_2__.Dom.isTag(this.element, 'table')) {
47802
48064
  this.onDelete(e);
47803
48065
  }
47804
48066
  }).on(editor.ow, 'resize.resizer', this.updateSize).on('resize.resizer', this.updateSize).on([
@@ -48005,8 +48267,12 @@ const keyBInd = '__jodit-resizer_binded';
48005
48267
  this.j.e.off(element, 'mousedown.select touchstart.select').on(element, 'mousedown.select touchstart.select', ()=>{
48006
48268
  this.j.s.select(element);
48007
48269
  }).off(element, 'changesize').on(element, 'changesize', ()=>{
48008
- ;(0,_core_helpers_index_js__WEBPACK_IMPORTED_MODULE_4__.attr)(iframe, 'width', element.offsetWidth + 'px');
48009
- (0,_core_helpers_index_js__WEBPACK_IMPORTED_MODULE_4__.attr)(iframe, 'height', element.offsetHeight + 'px');
48270
+ // Only a resize sets the embed's size, and as the plain numbers
48271
+ // the attributes take, so a click leaves `width="100%"` alone
48272
+ if (this.isResizeMode) {
48273
+ (0,_core_helpers_index_js__WEBPACK_IMPORTED_MODULE_4__.attr)(iframe, 'width', element.offsetWidth);
48274
+ (0,_core_helpers_index_js__WEBPACK_IMPORTED_MODULE_4__.attr)(iframe, 'height', element.offsetHeight);
48275
+ }
48010
48276
  });
48011
48277
  }
48012
48278
  this.j.e.on(element, 'dragstart', this.hide);
@@ -49447,15 +49713,23 @@ class selectCells extends _core_plugin_index_js__WEBPACK_IMPORTED_MODULE_5__.Plu
49447
49713
  this.__tableModule.mergeSelected(table);
49448
49714
  break;
49449
49715
  case 'empty':
49450
- cells.forEach((td)=>_core_dom_dom_js__WEBPACK_IMPORTED_MODULE_2__.Dom.detach(td));
49716
+ cells.forEach((td)=>{
49717
+ _core_dom_dom_js__WEBPACK_IMPORTED_MODULE_2__.Dom.detach(td);
49718
+ _core_dom_dom_js__WEBPACK_IMPORTED_MODULE_2__.Dom.append(td, this.j.createInside.element('br'));
49719
+ });
49451
49720
  break;
49452
49721
  case 'bin':
49453
- _core_dom_dom_js__WEBPACK_IMPORTED_MODULE_2__.Dom.safeRemove(table);
49722
+ this.__removeTable(table);
49454
49723
  break;
49455
49724
  case 'binrow':
49456
- new Set(cells.map((td)=>td.parentNode)).forEach((row)=>{
49457
- this.__tableModule.removeRow(table, row.rowIndex);
49458
- });
49725
+ {
49726
+ const rows = new Set(cells.map((td)=>td.parentNode));
49727
+ const next = this.__nearestCell(table, cell, (0,_core_helpers_index_js__WEBPACK_IMPORTED_MODULE_4__.toArray)(rows).map((row)=>row.rowIndex), true);
49728
+ rows.forEach((row)=>{
49729
+ this.__tableModule.removeRow(table, row.rowIndex);
49730
+ });
49731
+ next && this.j.s.setCursorIn(next);
49732
+ }
49459
49733
  break;
49460
49734
  case 'bincolumn':
49461
49735
  {
@@ -49468,9 +49742,11 @@ class selectCells extends _core_plugin_index_js__WEBPACK_IMPORTED_MODULE_5__.Plu
49468
49742
  columnsSet.add(col);
49469
49743
  }
49470
49744
  });
49745
+ const next = this.__nearestCell(table, cell, columns, false);
49471
49746
  columns.sort((a, b)=>b - a).forEach((col)=>{
49472
49747
  this.__tableModule.removeColumn(table, col);
49473
49748
  });
49749
+ next && this.j.s.setCursorIn(next);
49474
49750
  }
49475
49751
  break;
49476
49752
  case 'addcolumnafter':
@@ -49482,10 +49758,36 @@ class selectCells extends _core_plugin_index_js__WEBPACK_IMPORTED_MODULE_5__.Plu
49482
49758
  this.__tableModule.appendRow(table, cell.parentNode, command === 'addrowafter');
49483
49759
  break;
49484
49760
  }
49761
+ if (/^bin(row|column)$/.test(command) && !this.__tableModule.getColumnsCount(table)) {
49762
+ this.__removeTable(table);
49763
+ }
49485
49764
  }
49486
49765
  return false;
49487
49766
  }
49488
49767
  }
49768
+ /**
49769
+ * The cell that takes the caret when rows or columns are deleted: the next
49770
+ * one in the same column (or row) that is not deleted, else the previous one
49771
+ */ __nearestCell(table, cell, deleted, isRow) {
49772
+ const box = this.__tableModule.formalMatrix(table);
49773
+ const [row, column] = this.__tableModule.formalCoordinate(table, cell);
49774
+ const start = isRow ? row : column;
49775
+ const count = isRow ? box.length : box[row].length;
49776
+ const find = (i)=>!deleted.includes(i) && (isRow ? box[i][column] : box[row][i]) || null;
49777
+ for(let i = start + 1; i < count; i += 1){
49778
+ const next = find(i);
49779
+ if (next) {
49780
+ return next;
49781
+ }
49782
+ }
49783
+ for(let i = start - 1; i >= 0; i -= 1){
49784
+ const prev = find(i);
49785
+ if (prev) {
49786
+ return prev;
49787
+ }
49788
+ }
49789
+ return null;
49790
+ }
49489
49791
  /**
49490
49792
  * Add some align after native command
49491
49793
  */ onAfterCommand(command) {
@@ -49493,6 +49795,14 @@ class selectCells extends _core_plugin_index_js__WEBPACK_IMPORTED_MODULE_5__.Plu
49493
49795
  this.__tableModule.getAllSelectedCells().forEach((elm)=>(0,_core_helpers_index_js__WEBPACK_IMPORTED_MODULE_4__.alignElement)(command, elm));
49494
49796
  }
49495
49797
  }
49798
+ /**
49799
+ * Remove the table and put the caret where it stood: at the start of what
49800
+ * follows it, else at the end of what precedes it
49801
+ */ __removeTable(table) {
49802
+ const parent = table.parentNode, next = _core_dom_dom_js__WEBPACK_IMPORTED_MODULE_2__.Dom.findNotEmptySibling(table, false), prev = _core_dom_dom_js__WEBPACK_IMPORTED_MODULE_2__.Dom.findNotEmptySibling(table, true);
49803
+ _core_dom_dom_js__WEBPACK_IMPORTED_MODULE_2__.Dom.safeRemove(table);
49804
+ this.j.s.setCursorIn(next || prev || parent, Boolean(next));
49805
+ }
49496
49806
  /** @override */ beforeDestruct(jodit) {
49497
49807
  this.__onRemoveSelection();
49498
49808
  jodit.e.off('.select-cells');
@@ -53980,7 +54290,7 @@ const WORK_KEYS = new Set([
53980
54290
  _core_dom_dom_js__WEBPACK_IMPORTED_MODULE_1__.Dom.append(next, first);
53981
54291
  editor.s.setCursorBefore(first);
53982
54292
  } else {
53983
- if (key === _core_constants_js__WEBPACK_IMPORTED_MODULE_0__.KEY_TAB) {
54293
+ if (key === _core_constants_js__WEBPACK_IMPORTED_MODULE_0__.KEY_TAB && !_core_dom_dom_js__WEBPACK_IMPORTED_MODULE_1__.Dom.isEmpty(next)) {
53984
54294
  editor.s.select(next, true);
53985
54295
  } else {
53986
54296
  editor.s.setCursorIn(next, key === _core_constants_js__WEBPACK_IMPORTED_MODULE_0__.KEY_RIGHT || key === _core_constants_js__WEBPACK_IMPORTED_MODULE_0__.KEY_DOWN);
@@ -54044,6 +54354,37 @@ _config_js__WEBPACK_IMPORTED_MODULE_5__.Config.prototype.table = {
54044
54354
  useExtraClassesOptions: false
54045
54355
  };
54046
54356
  _core_ui_icon_js__WEBPACK_IMPORTED_MODULE_4__.Icon.set('table', _table_svg_js__WEBPACK_IMPORTED_MODULE_6__["default"]);
54357
+ /**
54358
+ * Elements in `dtd.blockLimits` that hold only rows, cells or list items, so
54359
+ * a table can't go directly inside them
54360
+ */ const ROW_AND_ITEM_HOLDERS = new Set([
54361
+ 'table',
54362
+ 'thead',
54363
+ 'tbody',
54364
+ 'tfoot',
54365
+ 'tr',
54366
+ 'ul',
54367
+ 'ol',
54368
+ 'dl'
54369
+ ]);
54370
+ /**
54371
+ * The nearest block around the cursor that can hold the new table: an element
54372
+ * in `dtd.blockLimits`, such as a table cell, a list item or a `<div>`. The
54373
+ * cursor's own block of the `enter` tag is a line, not a container, as in the
54374
+ * dtd plugin's `checkBlockNesting`
54375
+ */ function findTableContainer(editor, current) {
54376
+ const line = _core_dom_index_js__WEBPACK_IMPORTED_MODULE_1__.Dom.closest(current, _core_dom_index_js__WEBPACK_IMPORTED_MODULE_1__.Dom.isBlock, editor.editor);
54377
+ const container = _core_dom_index_js__WEBPACK_IMPORTED_MODULE_1__.Dom.closest(current, (node)=>{
54378
+ var _a;
54379
+ if (!_core_dom_index_js__WEBPACK_IMPORTED_MODULE_1__.Dom.isElement(node) || node === line && _core_dom_index_js__WEBPACK_IMPORTED_MODULE_1__.Dom.isTag(node, editor.o.enter)) {
54380
+ return false;
54381
+ }
54382
+ const tag = node.nodeName.toLowerCase();
54383
+ return Boolean((_a = editor.o.dtd) === null || _a === void 0 ? void 0 : _a.blockLimits[tag]) && !ROW_AND_ITEM_HOLDERS.has(tag);
54384
+ }, editor.editor);
54385
+ // With the cursor between two rows, `current` is the next row's text
54386
+ return container && _core_dom_index_js__WEBPACK_IMPORTED_MODULE_1__.Dom.isOrContains(container, editor.s.range.startContainer) ? container : null;
54387
+ }
54047
54388
  _config_js__WEBPACK_IMPORTED_MODULE_5__.Config.prototype.controls.table = {
54048
54389
  data: {
54049
54390
  cols: 10,
@@ -54141,7 +54482,11 @@ _config_js__WEBPACK_IMPORTED_MODULE_5__.Config.prototype.controls.table = {
54141
54482
  editor.s.removeMarkers();
54142
54483
  editor.editor.normalize();
54143
54484
  editor.history.snapshot.restore(snapshot);
54144
- const block = _core_dom_index_js__WEBPACK_IMPORTED_MODULE_1__.Dom.furthest(editor.s.current(), _core_dom_index_js__WEBPACK_IMPORTED_MODULE_1__.Dom.isBlock, editor.editor);
54485
+ const current = editor.s.current();
54486
+ // The table goes into the cell, list item or box holding the
54487
+ // cursor, and only a block inside it is split
54488
+ const container = findTableContainer(editor, current);
54489
+ const block = container === current ? null : _core_dom_index_js__WEBPACK_IMPORTED_MODULE_1__.Dom.furthest(current, _core_dom_index_js__WEBPACK_IMPORTED_MODULE_1__.Dom.isBlock, container !== null && container !== void 0 ? container : editor.editor);
54145
54490
  if (block && _core_dom_index_js__WEBPACK_IMPORTED_MODULE_1__.Dom.isEmpty(block)) {
54146
54491
  _core_dom_index_js__WEBPACK_IMPORTED_MODULE_1__.Dom.replace(block, table, undefined, false, true);
54147
54492
  } else {
@@ -54163,6 +54508,9 @@ _config_js__WEBPACK_IMPORTED_MODULE_5__.Config.prototype.controls.table = {
54163
54508
  _core_dom_index_js__WEBPACK_IMPORTED_MODULE_1__.Dom.after(block, table);
54164
54509
  }
54165
54510
  }
54511
+ } else if (container && !_core_dom_index_js__WEBPACK_IMPORTED_MODULE_1__.Dom.isEmpty(container) && !editor.o.table.splitBlockOnInsertTable) {
54512
+ // With no block to go after, the table goes after the text
54513
+ _core_dom_index_js__WEBPACK_IMPORTED_MODULE_1__.Dom.append(container, table);
54166
54514
  } else {
54167
54515
  editor.s.insertNode(table, false);
54168
54516
  }
@@ -54421,33 +54769,15 @@ _core_global_js__WEBPACK_IMPORTED_MODULE_4__.pluginSystem.add('toolbarNavigation
54421
54769
 
54422
54770
 
54423
54771
 
54424
- // Media the popup inserts go in their wrapper (see `mediaWrappers`), aligned
54425
- // with `mediaDefaultAlign`
54426
- function prepareMedia(jodit, element) {
54427
- const media = (0,_core_helpers_index_js__WEBPACK_IMPORTED_MODULE_0__.wrapMedia)(jodit, element);
54428
- const { mediaDefaultAlign } = jodit.o;
54429
- if (mediaDefaultAlign && mediaDefaultAlign !== 'normal') {
54430
- (0,_core_helpers_index_js__WEBPACK_IMPORTED_MODULE_0__.hAlignElement)(media, mediaDefaultAlign, (0,_core_helpers_index_js__WEBPACK_IMPORTED_MODULE_0__.getAlignClasses)(jodit, media));
54431
- }
54432
- return media;
54433
- }
54434
54772
  function insertVideos(data) {
54435
54773
  var _a;
54436
54774
  (_a = data.files) === null || _a === void 0 ? void 0 : _a.forEach((file)=>{
54437
- this.s.insertNode(prepareMedia(this, this.createInside.element('video', {
54775
+ this.s.insertNode((0,_core_helpers_index_js__WEBPACK_IMPORTED_MODULE_0__.prepareMedia)(this, this.createInside.element('video', {
54438
54776
  controls: '',
54439
54777
  src: data.baseurl + file
54440
54778
  })));
54441
54779
  });
54442
54780
  }
54443
- // Embed code that is one element is prepared as media; other code goes in as
54444
- // it is
54445
- function prepareEmbedCode(jodit, code) {
54446
- const box = jodit.createInside.div();
54447
- box.innerHTML = code.trim();
54448
- const element = box.firstElementChild;
54449
- return element && box.childNodes.length === 1 ? prepareMedia(jodit, element) : code;
54450
- }
54451
54781
  _config_js__WEBPACK_IMPORTED_MODULE_4__.Config.prototype.video = {
54452
54782
  parseUrlToVideoEmbed: _core_helpers_index_js__WEBPACK_IMPORTED_MODULE_0__.convertMediaUrlToVideoEmbed,
54453
54783
  defaultWidth: 400,
@@ -54485,7 +54815,7 @@ _config_js__WEBPACK_IMPORTED_MODULE_4__.Config.prototype.controls.video = {
54485
54815
  ])
54486
54816
  ]), tabs = [], insertCode = (code)=>{
54487
54817
  jodit.s.restore();
54488
- jodit.s.insertHTML(prepareEmbedCode(jodit, code));
54818
+ jodit.s.insertHTML((0,_core_helpers_index_js__WEBPACK_IMPORTED_MODULE_0__.prepareEmbedCode)(jodit, code));
54489
54819
  close();
54490
54820
  };
54491
54821
  jodit.s.save();
@@ -54520,7 +54850,11 @@ _config_js__WEBPACK_IMPORTED_MODULE_4__.Config.prototype.controls.video = {
54520
54850
  formCode.onSubmit((data)=>{
54521
54851
  insertCode(data.code);
54522
54852
  });
54523
- return (0,_modules_widget_index_js__WEBPACK_IMPORTED_MODULE_5__.TabsWidget)(jodit, tabs);
54853
+ const box = (0,_modules_widget_index_js__WEBPACK_IMPORTED_MODULE_5__.TabsWidget)(jodit, tabs);
54854
+ // Its tabs are sized to their labels, as the file selector's are, since
54855
+ // "Upload" doesn't fit a third of the popup
54856
+ box.classList.add('jodit-file-selector');
54857
+ return box;
54524
54858
  },
54525
54859
  tags: [
54526
54860
  'iframe'