jodit-pro 4.18.1 → 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 +482 -137
  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 +434 -137
  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 +434 -137
  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 +548 -141
  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.1
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.1";
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,11 +35937,16 @@ _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';
35865
35944
  class cleanHtml extends _core_plugin_plugin_js__WEBPACK_IMPORTED_MODULE_5__.Plugin {
35866
- /** @override */ afterInit(jodit) {}
35945
+ /** @override */ afterInit() {
35946
+ // The walker's own `:afterInit` watcher is bound on that very event,
35947
+ // so without this the first pass waited for the first key or click
35948
+ this.onChangeCleanHTML();
35949
+ }
35867
35950
  get isEditMode() {
35868
35951
  return !(this.j.isInDestruct || !this.j.isEditorMode() || this.j.getReadOnly());
35869
35952
  }
@@ -35879,18 +35962,18 @@ class cleanHtml extends _core_plugin_plugin_js__WEBPACK_IMPORTED_MODULE_5__.Plug
35879
35962
  }
35880
35963
  startWalker() {
35881
35964
  const { jodit } = this;
35882
- const allow = (0,_helpers_index_js__WEBPACK_IMPORTED_MODULE_7__.getHash)(this.j.o.cleanHTML.allowTags);
35883
- const deny = (0,_helpers_index_js__WEBPACK_IMPORTED_MODULE_7__.getHash)(this.j.o.cleanHTML.denyTags);
35884
- 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)=>{
35885
35968
  this.j.e.fire(affected ? 'internalChange finishedCleanHTMLWorker' : 'finishedCleanHTMLWorker');
35886
35969
  });
35887
35970
  }
35888
35971
  beforeCommand(command) {
35889
35972
  if (command.toLowerCase() === 'removeformat') {
35890
35973
  if (this.j.s.isCollapsed()) {
35891
- (0,_helpers_index_js__WEBPACK_IMPORTED_MODULE_7__.removeFormatForCollapsedSelection)(this.j);
35974
+ (0,_helpers_index_js__WEBPACK_IMPORTED_MODULE_8__.removeFormatForCollapsedSelection)(this.j);
35892
35975
  } else {
35893
- (0,_helpers_index_js__WEBPACK_IMPORTED_MODULE_7__.removeFormatForSelection)(this.j);
35976
+ (0,_helpers_index_js__WEBPACK_IMPORTED_MODULE_8__.removeFormatForSelection)(this.j);
35894
35977
  }
35895
35978
  return false;
35896
35979
  }
@@ -35916,6 +35999,7 @@ class cleanHtml extends _core_plugin_plugin_js__WEBPACK_IMPORTED_MODULE_5__.Plug
35916
35999
  ];
35917
36000
  sandBox.innerHTML = data.value;
35918
36001
  this.j.e.fire('safeHTML', sandBox);
36002
+ this.__replaceOldTags(sandBox);
35919
36003
  data.value = sandBox.innerHTML;
35920
36004
  (0,_core_helpers_html_safe_html_js__WEBPACK_IMPORTED_MODULE_4__.safeHTML)(sandBox, {
35921
36005
  safeJavaScriptLink: true,
@@ -35924,6 +36008,20 @@ class cleanHtml extends _core_plugin_plugin_js__WEBPACK_IMPORTED_MODULE_5__.Plug
35924
36008
  _core_dom_dom_js__WEBPACK_IMPORTED_MODULE_1__.Dom.safeRemove(iframe);
35925
36009
  return false;
35926
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
+ }
35927
36025
  /**
35928
36026
  * Collapse a value that holds only a single empty block (e.g.
35929
36027
  * `<p><br></p>` left after deleting all content) to an empty string —
@@ -36002,10 +36100,11 @@ class cleanHtml extends _core_plugin_plugin_js__WEBPACK_IMPORTED_MODULE_5__.Plug
36002
36100
  ;(0,_core_helpers_html_safe_html_js__WEBPACK_IMPORTED_MODULE_4__.safeHTML)(sandBox, this.j.o.cleanHTML);
36003
36101
  }
36004
36102
  /** @override */ beforeDestruct() {
36103
+ this.j.e.off('safeHTML', this.onSafeHTML).off('beforeSetNativeEditorValue', this.onBeforeSetNativeEditorValue).off('afterSetNativeEditorValue', this.onAfterSetNativeEditorValue);
36005
36104
  this.walker.destruct();
36006
36105
  }
36007
- constructor(){
36008
- super(...arguments);
36106
+ constructor(jodit){
36107
+ super(jodit);
36009
36108
  /** @override */ this.buttons = [
36010
36109
  {
36011
36110
  name: 'eraser',
@@ -36016,6 +36115,12 @@ class cleanHtml extends _core_plugin_plugin_js__WEBPACK_IMPORTED_MODULE_5__.Plug
36016
36115
  this.walker = new _core_dom_lazy_walker_js__WEBPACK_IMPORTED_MODULE_2__.LazyWalker(this.j.async, {
36017
36116
  timeout: this.j.o.cleanHTML.timeout
36018
36117
  });
36118
+ // `@watch` binds once the plugin is ready, which is after the initial
36119
+ // value has already gone into the editor. The handlers that keep
36120
+ // markup out of the live tree have to be there from the start, or
36121
+ // event handlers in a textarea's content run before anything
36122
+ // sanitises them.
36123
+ jodit.e.on('safeHTML', this.onSafeHTML).on('beforeSetNativeEditorValue', this.onBeforeSetNativeEditorValue).on('afterSetNativeEditorValue', this.onAfterSetNativeEditorValue);
36019
36124
  }
36020
36125
  }
36021
36126
  __decorate([
@@ -36034,16 +36139,16 @@ __decorate([
36034
36139
  (0,_core_decorators_index_js__WEBPACK_IMPORTED_MODULE_0__.watch)(':beforeCommand')
36035
36140
  ], cleanHtml.prototype, "beforeCommand", null);
36036
36141
  __decorate([
36037
- (0,_core_decorators_index_js__WEBPACK_IMPORTED_MODULE_0__.watch)(':afterSetNativeEditorValue')
36142
+ _core_decorators_index_js__WEBPACK_IMPORTED_MODULE_0__.autobind
36038
36143
  ], cleanHtml.prototype, "onAfterSetNativeEditorValue", null);
36039
36144
  __decorate([
36040
- (0,_core_decorators_index_js__WEBPACK_IMPORTED_MODULE_0__.watch)(':beforeSetNativeEditorValue')
36145
+ _core_decorators_index_js__WEBPACK_IMPORTED_MODULE_0__.autobind
36041
36146
  ], cleanHtml.prototype, "onBeforeSetNativeEditorValue", null);
36042
36147
  __decorate([
36043
36148
  (0,_core_decorators_index_js__WEBPACK_IMPORTED_MODULE_0__.watch)(':afterGetValueFromEditor')
36044
36149
  ], cleanHtml.prototype, "onAfterGetValueFromEditor", null);
36045
36150
  __decorate([
36046
- (0,_core_decorators_index_js__WEBPACK_IMPORTED_MODULE_0__.watch)(':safeHTML')
36151
+ _core_decorators_index_js__WEBPACK_IMPORTED_MODULE_0__.autobind
36047
36152
  ], cleanHtml.prototype, "onSafeHTML", null);
36048
36153
  _core_global_js__WEBPACK_IMPORTED_MODULE_3__.pluginSystem.add('cleanHtml', cleanHtml);
36049
36154
 
@@ -36620,10 +36725,33 @@ __webpack_require__.r(__webpack_exports__);
36620
36725
  }
36621
36726
  const tagName = list[oldParent.nodeName.toLowerCase()] || list[oldParent.nodeName];
36622
36727
  if (tagName) {
36623
- 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;
36624
36732
  }
36625
36733
  return oldParent;
36626
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
+ }
36627
36755
 
36628
36756
 
36629
36757
  /***/ }),
@@ -38589,9 +38717,32 @@ const brBoxes = new Set([
38589
38717
  * Released under MIT see LICENSE.txt in the project root for license information.
38590
38718
  * Copyright (c) 2013-2026 Valerii Chupurnov. All rights reserved. https://xdsoft.net
38591
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
+ }
38592
38742
  /**
38593
38743
  * Checks whether the insertion of an element at the current location is allowed,
38594
- * 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
38595
38746
  * @internal
38596
38747
  */ function checkBlockNesting(jodit, node) {
38597
38748
  var _a, _b;
@@ -38620,10 +38771,7 @@ const brBoxes = new Set([
38620
38771
  parent = current;
38621
38772
  }
38622
38773
  if (parent) {
38623
- jodit.s.setCursorAfter(parent);
38624
- if (_core_dom_dom_js__WEBPACK_IMPORTED_MODULE_0__.Dom.isEmpty(parent)) {
38625
- _core_dom_dom_js__WEBPACK_IMPORTED_MODULE_0__.Dom.safeRemove(parent);
38626
- }
38774
+ moveCursorOutOf(jodit, parent);
38627
38775
  }
38628
38776
  }
38629
38777
  }
@@ -39128,7 +39276,14 @@ function brBefore(start) {
39128
39276
  _core_dom_dom_js__WEBPACK_IMPORTED_MODULE_0__.Dom.after(link, fake);
39129
39277
  } else if (s.cursorOnTheLeft(link, fake)) {
39130
39278
  _core_dom_dom_js__WEBPACK_IMPORTED_MODULE_0__.Dom.before(link, fake);
39279
+ } else {
39280
+ return;
39131
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);
39132
39287
  }
39133
39288
  }
39134
39289
 
@@ -39358,9 +39513,10 @@ _core_global_js__WEBPACK_IMPORTED_MODULE_1__.pluginSystem.add('file', file);
39358
39513
  /***/ (function(__unused_webpack_module, __unused_webpack___webpack_exports__, __webpack_require__) {
39359
39514
 
39360
39515
  /* unused harmony export focus */
39361
- /* harmony import */ var _core_dom_index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(22732);
39362
- /* harmony import */ var _core_global_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(580);
39363
- /* 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);
39364
39520
  /*!
39365
39521
  * Jodit Editor (https://xdsoft.net/jodit/)
39366
39522
  * Released under MIT see LICENSE.txt in the project root for license information.
@@ -39368,15 +39524,16 @@ _core_global_js__WEBPACK_IMPORTED_MODULE_1__.pluginSystem.add('file', file);
39368
39524
  */
39369
39525
 
39370
39526
 
39527
+
39371
39528
  /**
39372
39529
  * After loading the page into the editor once the focus is set
39373
- */ _config_js__WEBPACK_IMPORTED_MODULE_2__.Config.prototype.autofocus = false;
39530
+ */ _config_js__WEBPACK_IMPORTED_MODULE_3__.Config.prototype.autofocus = false;
39374
39531
  /**
39375
39532
  * Cursor position after autofocus
39376
- */ _config_js__WEBPACK_IMPORTED_MODULE_2__.Config.prototype.cursorAfterAutofocus = 'end';
39533
+ */ _config_js__WEBPACK_IMPORTED_MODULE_3__.Config.prototype.cursorAfterAutofocus = 'end';
39377
39534
  /**
39378
39535
  * Save current selection on blur event
39379
- */ _config_js__WEBPACK_IMPORTED_MODULE_2__.Config.prototype.saveSelectionOnBlur = true;
39536
+ */ _config_js__WEBPACK_IMPORTED_MODULE_3__.Config.prototype.saveSelectionOnBlur = true;
39380
39537
  function focus(editor) {
39381
39538
  if (editor.o.saveSelectionOnBlur) {
39382
39539
  // A click that brings focus back places the caret itself, and Chrome
@@ -39408,10 +39565,10 @@ function focus(editor) {
39408
39565
  let textNode = null;
39409
39566
  switch(editor.o.cursorAfterAutofocus){
39410
39567
  case 'start':
39411
- 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));
39412
39569
  break;
39413
39570
  case 'end':
39414
- 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));
39415
39572
  break;
39416
39573
  }
39417
39574
  if (textNode) {
@@ -39429,7 +39586,8 @@ function focus(editor) {
39429
39586
  });
39430
39587
  editor.e.on('afterInit afterAddPlace', ()=>{
39431
39588
  editor.e.off(editor.editor, 'mousedown.autofocus').on(editor.editor, 'mousedown.autofocus', (e)=>{
39432
- 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) {
39433
39591
  if (editor.editor === e.target) {
39434
39592
  editor.s.focus();
39435
39593
  } else {
@@ -39439,7 +39597,7 @@ function focus(editor) {
39439
39597
  });
39440
39598
  });
39441
39599
  }
39442
- _core_global_js__WEBPACK_IMPORTED_MODULE_1__.pluginSystem.add('focus', focus);
39600
+ _core_global_js__WEBPACK_IMPORTED_MODULE_2__.pluginSystem.add('focus', focus);
39443
39601
 
39444
39602
 
39445
39603
  /***/ }),
@@ -40660,18 +40818,29 @@ function hr(editor) {
40660
40818
  group: 'insert'
40661
40819
  });
40662
40820
  editor.registerCommand('insertHorizontalRule', ()=>{
40821
+ var _a;
40663
40822
  const elm = editor.createInside.element('hr');
40664
40823
  editor.s.insertNode(elm, false, false);
40665
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);
40666
- 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()])) {
40667
40828
  _core_dom_index_js__WEBPACK_IMPORTED_MODULE_0__.Dom.after(block, elm);
40668
40829
  _core_dom_index_js__WEBPACK_IMPORTED_MODULE_0__.Dom.safeRemove(block);
40669
40830
  }
40670
- 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);
40671
- if (!p) {
40672
- p = editor.createInside.element(editor.o.enter);
40673
- _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;
40674
40841
  }
40842
+ const p = editor.createInside.element(editor.o.enter);
40843
+ _core_dom_index_js__WEBPACK_IMPORTED_MODULE_0__.Dom.after(elm, p);
40675
40844
  editor.s.setCursorIn(p);
40676
40845
  return false;
40677
40846
  });
@@ -40704,7 +40873,7 @@ _config_js__WEBPACK_IMPORTED_MODULE_0__.Config.prototype.iframeBaseUrl = '';
40704
40873
  _config_js__WEBPACK_IMPORTED_MODULE_0__.Config.prototype.iframeTitle = 'Jodit Editor';
40705
40874
  _config_js__WEBPACK_IMPORTED_MODULE_0__.Config.prototype.iframeDoctype = '<!DOCTYPE html>';
40706
40875
  _config_js__WEBPACK_IMPORTED_MODULE_0__.Config.prototype.iframeDefaultSrc = 'about:blank';
40707
- _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' + '}';
40708
40877
  _config_js__WEBPACK_IMPORTED_MODULE_0__.Config.prototype.iframeCSSLinks = [];
40709
40878
  _config_js__WEBPACK_IMPORTED_MODULE_0__.Config.prototype.iframeSandbox = null;
40710
40879
 
@@ -43623,6 +43792,55 @@ const align = {
43623
43792
  /* harmony import */ var _core_ui_popup_index_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(61259);
43624
43793
  /* harmony import */ var _modules_toolbar_factory_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(21491);
43625
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
+ }
43626
43844
  /*!
43627
43845
  * Jodit Editor (https://xdsoft.net/jodit/)
43628
43846
  * Released under MIT see LICENSE.txt in the project root for license information.
@@ -43656,10 +43874,29 @@ const align = {
43656
43874
  // A media wrapper kept in the content gets the media popup
43657
43875
  const type = mediaWrapper ? 'jodit-media' : target === null || target === void 0 ? void 0 : target.nodeName.toLowerCase();
43658
43876
  if (target && type && this.canShowPopupForType(type)) {
43659
- 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);
43660
43882
  return false;
43661
43883
  }
43662
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
+ }
43663
43900
  /**
43664
43901
  * Show inline popup with some toolbar
43665
43902
  *
@@ -44994,7 +45231,8 @@ _config_js__WEBPACK_IMPORTED_MODULE_2__.Config.prototype.controls.link = {
44994
45231
  height: (_d = jodit.o.video) === null || _d === void 0 ? void 0 : _d.defaultHeight
44995
45232
  });
44996
45233
  if (embed !== html) {
44997
- 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;
44998
45236
  }
44999
45237
  }
45000
45238
  if (jodit.s.isCollapsed()) {
@@ -45472,10 +45710,27 @@ _config_js__WEBPACK_IMPORTED_MODULE_0__.Config.prototype.mediaWrappers = {};
45472
45710
  } else {
45473
45711
  return;
45474
45712
  }
45713
+ // Selected, as an image is, so Delete and Backspace remove it
45475
45714
  editor.e.off(element, 'mousedown.select touchstart.select').on(element, 'mousedown.select touchstart.select', ()=>{
45476
- editor.s.setCursorAfter(element);
45715
+ editor.s.select(element);
45477
45716
  });
45478
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
+ }
45479
45734
  if (mediaInFakeBlock || Object.keys(mediaWrappers).length) {
45480
45735
  editor.e.on('afterGetValueFromEditor', (data)=>{
45481
45736
  const rxp = new RegExp(`<${mediaFakeTag}[^>]+data-${keyFake}[^>]+>([^]+?)</${mediaFakeTag}>`, 'ig');
@@ -46396,12 +46651,14 @@ _config_js__WEBPACK_IMPORTED_MODULE_1__.Config.prototype.controls.paste = {
46396
46651
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
46397
46652
  /* harmony export */ askInsertTypeDialog: function() { return /* binding */ askInsertTypeDialog; },
46398
46653
  /* harmony export */ getAllTypes: function() { return /* binding */ getAllTypes; },
46399
- /* harmony export */ pasteInsertHtml: function() { return /* binding */ pasteInsertHtml; }
46654
+ /* harmony export */ pasteInsertHtml: function() { return /* binding */ pasteInsertHtml; },
46655
+ /* harmony export */ removeGoogleDocsWrapper: function() { return /* binding */ removeGoogleDocsWrapper; }
46400
46656
  /* harmony export */ });
46401
46657
  /* harmony import */ var _core_constants_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(82758);
46402
46658
  /* harmony import */ var _core_dom_dom_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(2748);
46403
- /* harmony import */ var _core_helpers_checker_index_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(27613);
46404
- /* 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);
46405
46662
  /*!
46406
46663
  * Jodit Editor (https://xdsoft.net/jodit/)
46407
46664
  * Released under MIT see LICENSE.txt in the project root for license information.
@@ -46410,6 +46667,7 @@ _config_js__WEBPACK_IMPORTED_MODULE_1__.Config.prototype.controls.paste = {
46410
46667
 
46411
46668
 
46412
46669
 
46670
+
46413
46671
  /**
46414
46672
  * Remove special HTML comments
46415
46673
  * @private
@@ -46425,6 +46683,21 @@ _config_js__WEBPACK_IMPORTED_MODULE_1__.Config.prototype.controls.paste = {
46425
46683
  }
46426
46684
  return html;
46427
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
+ }
46428
46701
  /**
46429
46702
  * @private
46430
46703
  */ function isDragEvent(e) {
@@ -46441,11 +46714,11 @@ _config_js__WEBPACK_IMPORTED_MODULE_1__.Config.prototype.controls.paste = {
46441
46714
  editor.s.insertCursorAtPoint(e.clientX, e.clientY);
46442
46715
  }
46443
46716
  const result = editor.e.fire('beforePasteInsert', html);
46444
- 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))) {
46445
46718
  html = result;
46446
46719
  }
46447
- if ((0,_core_helpers_checker_index_js__WEBPACK_IMPORTED_MODULE_2__.isString)(html)) {
46448
- html = removeExtraFragments(html);
46720
+ if ((0,_core_helpers_checker_index_js__WEBPACK_IMPORTED_MODULE_3__.isString)(html)) {
46721
+ html = removeExtraFragments(removeGoogleDocsWrapper(html));
46449
46722
  }
46450
46723
  editor.s.insertHTML(html);
46451
46724
  }
@@ -46455,7 +46728,7 @@ _config_js__WEBPACK_IMPORTED_MODULE_1__.Config.prototype.controls.paste = {
46455
46728
  */ function getAllTypes(dt) {
46456
46729
  const types = dt.types;
46457
46730
  let types_str = '';
46458
- 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]') {
46459
46732
  for(let i = 0; i < types.length; i += 1){
46460
46733
  types_str += types[i] + ';';
46461
46734
  }
@@ -46472,7 +46745,7 @@ _config_js__WEBPACK_IMPORTED_MODULE_1__.Config.prototype.controls.paste = {
46472
46745
  return;
46473
46746
  }
46474
46747
  const dialog = jodit.confirm(`<div style="word-break: normal; white-space: normal">${jodit.i18n(msg)}</div>`, jodit.i18n(title));
46475
- 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, {
46476
46749
  text,
46477
46750
  name: text.toLowerCase(),
46478
46751
  tabIndex: 0
@@ -46488,7 +46761,7 @@ _config_js__WEBPACK_IMPORTED_MODULE_1__.Config.prototype.controls.paste = {
46488
46761
  }
46489
46762
  jodit.e.fire('afterClosePasteDialog', dialog);
46490
46763
  });
46491
- 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, {
46492
46765
  text: 'Cancel',
46493
46766
  tabIndex: 0
46494
46767
  }).onAction(()=>{
@@ -46637,7 +46910,7 @@ _config_js__WEBPACK_IMPORTED_MODULE_1__.Config.prototype.controls.paste = {
46637
46910
  this.j.buffer.set(_core_constants_js__WEBPACK_IMPORTED_MODULE_0__.CLIPBOARD_ID, html);
46638
46911
  switch(action){
46639
46912
  case _core_constants_js__WEBPACK_IMPORTED_MODULE_0__.INSERT_CLEAR_HTML:
46640
- 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));
46641
46914
  break;
46642
46915
  case _core_constants_js__WEBPACK_IMPORTED_MODULE_0__.INSERT_ONLY_TEXT:
46643
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);
@@ -47787,7 +48060,7 @@ const keyBInd = '__jodit-resizer_binded';
47787
48060
  addEventListeners() {
47788
48061
  const editor = this.j;
47789
48062
  editor.e.off(editor.editor, '.resizer').off(editor.ow, '.resizer').on(editor.editor, 'keydown.resizer', (e)=>{
47790
- 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')) {
47791
48064
  this.onDelete(e);
47792
48065
  }
47793
48066
  }).on(editor.ow, 'resize.resizer', this.updateSize).on('resize.resizer', this.updateSize).on([
@@ -47994,8 +48267,12 @@ const keyBInd = '__jodit-resizer_binded';
47994
48267
  this.j.e.off(element, 'mousedown.select touchstart.select').on(element, 'mousedown.select touchstart.select', ()=>{
47995
48268
  this.j.s.select(element);
47996
48269
  }).off(element, 'changesize').on(element, 'changesize', ()=>{
47997
- ;(0,_core_helpers_index_js__WEBPACK_IMPORTED_MODULE_4__.attr)(iframe, 'width', element.offsetWidth + 'px');
47998
- (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
+ }
47999
48276
  });
48000
48277
  }
48001
48278
  this.j.e.on(element, 'dragstart', this.hide);
@@ -49436,15 +49713,23 @@ class selectCells extends _core_plugin_index_js__WEBPACK_IMPORTED_MODULE_5__.Plu
49436
49713
  this.__tableModule.mergeSelected(table);
49437
49714
  break;
49438
49715
  case 'empty':
49439
- 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
+ });
49440
49720
  break;
49441
49721
  case 'bin':
49442
- _core_dom_dom_js__WEBPACK_IMPORTED_MODULE_2__.Dom.safeRemove(table);
49722
+ this.__removeTable(table);
49443
49723
  break;
49444
49724
  case 'binrow':
49445
- new Set(cells.map((td)=>td.parentNode)).forEach((row)=>{
49446
- this.__tableModule.removeRow(table, row.rowIndex);
49447
- });
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
+ }
49448
49733
  break;
49449
49734
  case 'bincolumn':
49450
49735
  {
@@ -49457,9 +49742,11 @@ class selectCells extends _core_plugin_index_js__WEBPACK_IMPORTED_MODULE_5__.Plu
49457
49742
  columnsSet.add(col);
49458
49743
  }
49459
49744
  });
49745
+ const next = this.__nearestCell(table, cell, columns, false);
49460
49746
  columns.sort((a, b)=>b - a).forEach((col)=>{
49461
49747
  this.__tableModule.removeColumn(table, col);
49462
49748
  });
49749
+ next && this.j.s.setCursorIn(next);
49463
49750
  }
49464
49751
  break;
49465
49752
  case 'addcolumnafter':
@@ -49471,10 +49758,36 @@ class selectCells extends _core_plugin_index_js__WEBPACK_IMPORTED_MODULE_5__.Plu
49471
49758
  this.__tableModule.appendRow(table, cell.parentNode, command === 'addrowafter');
49472
49759
  break;
49473
49760
  }
49761
+ if (/^bin(row|column)$/.test(command) && !this.__tableModule.getColumnsCount(table)) {
49762
+ this.__removeTable(table);
49763
+ }
49474
49764
  }
49475
49765
  return false;
49476
49766
  }
49477
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
+ }
49478
49791
  /**
49479
49792
  * Add some align after native command
49480
49793
  */ onAfterCommand(command) {
@@ -49482,6 +49795,14 @@ class selectCells extends _core_plugin_index_js__WEBPACK_IMPORTED_MODULE_5__.Plu
49482
49795
  this.__tableModule.getAllSelectedCells().forEach((elm)=>(0,_core_helpers_index_js__WEBPACK_IMPORTED_MODULE_4__.alignElement)(command, elm));
49483
49796
  }
49484
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
+ }
49485
49806
  /** @override */ beforeDestruct(jodit) {
49486
49807
  this.__onRemoveSelection();
49487
49808
  jodit.e.off('.select-cells');
@@ -53969,7 +54290,7 @@ const WORK_KEYS = new Set([
53969
54290
  _core_dom_dom_js__WEBPACK_IMPORTED_MODULE_1__.Dom.append(next, first);
53970
54291
  editor.s.setCursorBefore(first);
53971
54292
  } else {
53972
- 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)) {
53973
54294
  editor.s.select(next, true);
53974
54295
  } else {
53975
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);
@@ -54033,6 +54354,37 @@ _config_js__WEBPACK_IMPORTED_MODULE_5__.Config.prototype.table = {
54033
54354
  useExtraClassesOptions: false
54034
54355
  };
54035
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
+ }
54036
54388
  _config_js__WEBPACK_IMPORTED_MODULE_5__.Config.prototype.controls.table = {
54037
54389
  data: {
54038
54390
  cols: 10,
@@ -54130,7 +54482,11 @@ _config_js__WEBPACK_IMPORTED_MODULE_5__.Config.prototype.controls.table = {
54130
54482
  editor.s.removeMarkers();
54131
54483
  editor.editor.normalize();
54132
54484
  editor.history.snapshot.restore(snapshot);
54133
- 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);
54134
54490
  if (block && _core_dom_index_js__WEBPACK_IMPORTED_MODULE_1__.Dom.isEmpty(block)) {
54135
54491
  _core_dom_index_js__WEBPACK_IMPORTED_MODULE_1__.Dom.replace(block, table, undefined, false, true);
54136
54492
  } else {
@@ -54152,6 +54508,9 @@ _config_js__WEBPACK_IMPORTED_MODULE_5__.Config.prototype.controls.table = {
54152
54508
  _core_dom_index_js__WEBPACK_IMPORTED_MODULE_1__.Dom.after(block, table);
54153
54509
  }
54154
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);
54155
54514
  } else {
54156
54515
  editor.s.insertNode(table, false);
54157
54516
  }
@@ -54410,33 +54769,15 @@ _core_global_js__WEBPACK_IMPORTED_MODULE_4__.pluginSystem.add('toolbarNavigation
54410
54769
 
54411
54770
 
54412
54771
 
54413
- // Media the popup inserts go in their wrapper (see `mediaWrappers`), aligned
54414
- // with `mediaDefaultAlign`
54415
- function prepareMedia(jodit, element) {
54416
- const media = (0,_core_helpers_index_js__WEBPACK_IMPORTED_MODULE_0__.wrapMedia)(jodit, element);
54417
- const { mediaDefaultAlign } = jodit.o;
54418
- if (mediaDefaultAlign && mediaDefaultAlign !== 'normal') {
54419
- (0,_core_helpers_index_js__WEBPACK_IMPORTED_MODULE_0__.hAlignElement)(media, mediaDefaultAlign, (0,_core_helpers_index_js__WEBPACK_IMPORTED_MODULE_0__.getAlignClasses)(jodit, media));
54420
- }
54421
- return media;
54422
- }
54423
54772
  function insertVideos(data) {
54424
54773
  var _a;
54425
54774
  (_a = data.files) === null || _a === void 0 ? void 0 : _a.forEach((file)=>{
54426
- 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', {
54427
54776
  controls: '',
54428
54777
  src: data.baseurl + file
54429
54778
  })));
54430
54779
  });
54431
54780
  }
54432
- // Embed code that is one element is prepared as media; other code goes in as
54433
- // it is
54434
- function prepareEmbedCode(jodit, code) {
54435
- const box = jodit.createInside.div();
54436
- box.innerHTML = code.trim();
54437
- const element = box.firstElementChild;
54438
- return element && box.childNodes.length === 1 ? prepareMedia(jodit, element) : code;
54439
- }
54440
54781
  _config_js__WEBPACK_IMPORTED_MODULE_4__.Config.prototype.video = {
54441
54782
  parseUrlToVideoEmbed: _core_helpers_index_js__WEBPACK_IMPORTED_MODULE_0__.convertMediaUrlToVideoEmbed,
54442
54783
  defaultWidth: 400,
@@ -54474,7 +54815,7 @@ _config_js__WEBPACK_IMPORTED_MODULE_4__.Config.prototype.controls.video = {
54474
54815
  ])
54475
54816
  ]), tabs = [], insertCode = (code)=>{
54476
54817
  jodit.s.restore();
54477
- jodit.s.insertHTML(prepareEmbedCode(jodit, code));
54818
+ jodit.s.insertHTML((0,_core_helpers_index_js__WEBPACK_IMPORTED_MODULE_0__.prepareEmbedCode)(jodit, code));
54478
54819
  close();
54479
54820
  };
54480
54821
  jodit.s.save();
@@ -54509,7 +54850,11 @@ _config_js__WEBPACK_IMPORTED_MODULE_4__.Config.prototype.controls.video = {
54509
54850
  formCode.onSubmit((data)=>{
54510
54851
  insertCode(data.code);
54511
54852
  });
54512
- 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;
54513
54858
  },
54514
54859
  tags: [
54515
54860
  'iframe'