jodit-pro 4.17.7 → 4.18.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (325) hide show
  1. package/es2015/jodit.css +2 -2
  2. package/es2015/jodit.fat.min.css +1 -1
  3. package/es2015/jodit.fat.min.js +8 -8
  4. package/es2015/jodit.js +876 -157
  5. package/es2015/jodit.min.css +1 -1
  6. package/es2015/jodit.min.js +10 -10
  7. package/es2015/plugins/ai-assistant-pro/ai-assistant-pro.css +1 -1
  8. package/es2015/plugins/ai-assistant-pro/ai-assistant-pro.js +1 -1
  9. package/es2015/plugins/ai-assistant-pro/ai-assistant-pro.min.js +1 -1
  10. package/es2015/plugins/autocomplete/autocomplete.css +1 -1
  11. package/es2015/plugins/autocomplete/autocomplete.js +1 -1
  12. package/es2015/plugins/autocomplete/autocomplete.min.js +1 -1
  13. package/es2015/plugins/backup/backup.css +1 -1
  14. package/es2015/plugins/backup/backup.js +1 -1
  15. package/es2015/plugins/backup/backup.min.js +1 -1
  16. package/es2015/plugins/button-generator/button-generator.css +1 -1
  17. package/es2015/plugins/button-generator/button-generator.js +1 -1
  18. package/es2015/plugins/button-generator/button-generator.min.js +1 -1
  19. package/es2015/plugins/change-case/change-case.js +1 -1
  20. package/es2015/plugins/change-case/change-case.min.js +1 -1
  21. package/es2015/plugins/color-picker/color-picker.css +1 -1
  22. package/es2015/plugins/color-picker/color-picker.js +1 -1
  23. package/es2015/plugins/color-picker/color-picker.min.js +1 -1
  24. package/es2015/plugins/emoji/emoji.css +1 -1
  25. package/es2015/plugins/emoji/emoji.js +1 -1
  26. package/es2015/plugins/emoji/emoji.min.js +1 -1
  27. package/es2015/plugins/export-docs/export-docs.js +1 -1
  28. package/es2015/plugins/export-docs/export-docs.min.js +1 -1
  29. package/es2015/plugins/finder/finder.css +1 -1
  30. package/es2015/plugins/finder/finder.js +1 -1
  31. package/es2015/plugins/finder/finder.min.js +1 -1
  32. package/es2015/plugins/google-maps/google-maps.css +1 -1
  33. package/es2015/plugins/google-maps/google-maps.js +1 -1
  34. package/es2015/plugins/google-maps/google-maps.min.js +1 -1
  35. package/es2015/plugins/google-search/google-search.js +1 -1
  36. package/es2015/plugins/google-search/google-search.min.js +1 -1
  37. package/es2015/plugins/highlight-signature/highlight-signature.js +1 -1
  38. package/es2015/plugins/highlight-signature/highlight-signature.min.js +1 -1
  39. package/es2015/plugins/iframe-editor/iframe-editor.css +1 -1
  40. package/es2015/plugins/iframe-editor/iframe-editor.js +1 -1
  41. package/es2015/plugins/iframe-editor/iframe-editor.min.js +1 -1
  42. package/es2015/plugins/image-editor-pro/image-editor-pro.css +1 -1
  43. package/es2015/plugins/image-editor-pro/image-editor-pro.js +1 -1
  44. package/es2015/plugins/image-editor-pro/image-editor-pro.min.js +1 -1
  45. package/es2015/plugins/keyboard/keyboard.css +1 -1
  46. package/es2015/plugins/keyboard/keyboard.js +1 -1
  47. package/es2015/plugins/keyboard/keyboard.min.js +1 -1
  48. package/es2015/plugins/mobile-view/mobile-view.js +1 -1
  49. package/es2015/plugins/mobile-view/mobile-view.min.js +1 -1
  50. package/es2015/plugins/page-break/page-break.js +1 -1
  51. package/es2015/plugins/page-break/page-break.min.js +1 -1
  52. package/es2015/plugins/paste-code/paste-code.css +1 -1
  53. package/es2015/plugins/paste-code/paste-code.js +1 -1
  54. package/es2015/plugins/paste-code/paste-code.min.js +1 -1
  55. package/es2015/plugins/paste-from-word/paste-from-word.js +1 -1
  56. package/es2015/plugins/paste-from-word/paste-from-word.min.js +1 -1
  57. package/es2015/plugins/show-blocks/show-blocks.js +1 -1
  58. package/es2015/plugins/show-blocks/show-blocks.min.js +1 -1
  59. package/es2015/plugins/style/style.css +1 -1
  60. package/es2015/plugins/style/style.js +1 -1
  61. package/es2015/plugins/style/style.min.js +1 -1
  62. package/es2015/plugins/templates/templates.css +1 -1
  63. package/es2015/plugins/templates/templates.js +1 -1
  64. package/es2015/plugins/templates/templates.min.js +1 -1
  65. package/es2015/plugins/todo-list/todo-list.css +1 -1
  66. package/es2015/plugins/todo-list/todo-list.js +1 -1
  67. package/es2015/plugins/todo-list/todo-list.min.js +1 -1
  68. package/es2015/plugins/translate/translate.css +1 -1
  69. package/es2015/plugins/translate/translate.js +1 -1
  70. package/es2015/plugins/translate/translate.min.js +1 -1
  71. package/es2015/plugins/tune-block/tune-block.css +1 -1
  72. package/es2015/plugins/tune-block/tune-block.js +1 -1
  73. package/es2015/plugins/tune-block/tune-block.min.js +1 -1
  74. package/es2018/jodit.fat.min.css +1 -1
  75. package/es2018/jodit.fat.min.js +10 -10
  76. package/es2018/jodit.min.css +1 -1
  77. package/es2018/jodit.min.js +9 -9
  78. package/es2018/plugins/ai-assistant-pro/ai-assistant-pro.min.js +1 -1
  79. package/es2018/plugins/autocomplete/autocomplete.min.js +1 -1
  80. package/es2018/plugins/backup/backup.min.js +1 -1
  81. package/es2018/plugins/button-generator/button-generator.min.js +1 -1
  82. package/es2018/plugins/change-case/change-case.min.js +1 -1
  83. package/es2018/plugins/color-picker/color-picker.min.js +1 -1
  84. package/es2018/plugins/emoji/emoji.min.js +1 -1
  85. package/es2018/plugins/export-docs/export-docs.min.js +1 -1
  86. package/es2018/plugins/finder/finder.min.js +1 -1
  87. package/es2018/plugins/google-maps/google-maps.min.js +1 -1
  88. package/es2018/plugins/google-search/google-search.min.js +1 -1
  89. package/es2018/plugins/highlight-signature/highlight-signature.min.js +1 -1
  90. package/es2018/plugins/iframe-editor/iframe-editor.min.js +1 -1
  91. package/es2018/plugins/image-editor-pro/image-editor-pro.min.js +1 -1
  92. package/es2018/plugins/keyboard/keyboard.min.js +1 -1
  93. package/es2018/plugins/mobile-view/mobile-view.min.js +1 -1
  94. package/es2018/plugins/page-break/page-break.min.js +1 -1
  95. package/es2018/plugins/paste-code/paste-code.min.js +1 -1
  96. package/es2018/plugins/paste-from-word/paste-from-word.min.js +1 -1
  97. package/es2018/plugins/show-blocks/show-blocks.min.js +1 -1
  98. package/es2018/plugins/style/style.min.js +1 -1
  99. package/es2018/plugins/templates/templates.min.js +1 -1
  100. package/es2018/plugins/todo-list/todo-list.min.js +1 -1
  101. package/es2018/plugins/translate/translate.min.js +1 -1
  102. package/es2018/plugins/tune-block/tune-block.min.js +1 -1
  103. package/es2021/jodit.css +2 -2
  104. package/es2021/jodit.fat.min.css +1 -1
  105. package/es2021/jodit.fat.min.js +18 -18
  106. package/es2021/jodit.js +877 -158
  107. package/es2021/jodit.min.css +1 -1
  108. package/es2021/jodit.min.js +17 -17
  109. package/es2021/plugins/ai-assistant-pro/ai-assistant-pro.css +1 -1
  110. package/es2021/plugins/ai-assistant-pro/ai-assistant-pro.js +1 -1
  111. package/es2021/plugins/ai-assistant-pro/ai-assistant-pro.min.js +1 -1
  112. package/es2021/plugins/autocomplete/autocomplete.css +1 -1
  113. package/es2021/plugins/autocomplete/autocomplete.js +1 -1
  114. package/es2021/plugins/autocomplete/autocomplete.min.js +1 -1
  115. package/es2021/plugins/backup/backup.css +1 -1
  116. package/es2021/plugins/backup/backup.js +1 -1
  117. package/es2021/plugins/backup/backup.min.js +1 -1
  118. package/es2021/plugins/button-generator/button-generator.css +1 -1
  119. package/es2021/plugins/button-generator/button-generator.js +1 -1
  120. package/es2021/plugins/button-generator/button-generator.min.js +1 -1
  121. package/es2021/plugins/change-case/change-case.js +1 -1
  122. package/es2021/plugins/change-case/change-case.min.js +1 -1
  123. package/es2021/plugins/color-picker/color-picker.css +1 -1
  124. package/es2021/plugins/color-picker/color-picker.js +1 -1
  125. package/es2021/plugins/color-picker/color-picker.min.js +1 -1
  126. package/es2021/plugins/emoji/emoji.css +1 -1
  127. package/es2021/plugins/emoji/emoji.js +1 -1
  128. package/es2021/plugins/emoji/emoji.min.js +1 -1
  129. package/es2021/plugins/export-docs/export-docs.js +1 -1
  130. package/es2021/plugins/export-docs/export-docs.min.js +1 -1
  131. package/es2021/plugins/finder/finder.css +1 -1
  132. package/es2021/plugins/finder/finder.js +1 -1
  133. package/es2021/plugins/finder/finder.min.js +1 -1
  134. package/es2021/plugins/google-maps/google-maps.css +1 -1
  135. package/es2021/plugins/google-maps/google-maps.js +1 -1
  136. package/es2021/plugins/google-maps/google-maps.min.js +1 -1
  137. package/es2021/plugins/google-search/google-search.js +1 -1
  138. package/es2021/plugins/google-search/google-search.min.js +1 -1
  139. package/es2021/plugins/highlight-signature/highlight-signature.js +1 -1
  140. package/es2021/plugins/highlight-signature/highlight-signature.min.js +1 -1
  141. package/es2021/plugins/iframe-editor/iframe-editor.css +1 -1
  142. package/es2021/plugins/iframe-editor/iframe-editor.js +1 -1
  143. package/es2021/plugins/iframe-editor/iframe-editor.min.js +1 -1
  144. package/es2021/plugins/image-editor-pro/image-editor-pro.css +1 -1
  145. package/es2021/plugins/image-editor-pro/image-editor-pro.js +1 -1
  146. package/es2021/plugins/image-editor-pro/image-editor-pro.min.js +1 -1
  147. package/es2021/plugins/keyboard/keyboard.css +1 -1
  148. package/es2021/plugins/keyboard/keyboard.js +1 -1
  149. package/es2021/plugins/keyboard/keyboard.min.js +1 -1
  150. package/es2021/plugins/mobile-view/mobile-view.js +1 -1
  151. package/es2021/plugins/mobile-view/mobile-view.min.js +1 -1
  152. package/es2021/plugins/page-break/page-break.js +1 -1
  153. package/es2021/plugins/page-break/page-break.min.js +1 -1
  154. package/es2021/plugins/paste-code/paste-code.css +1 -1
  155. package/es2021/plugins/paste-code/paste-code.js +1 -1
  156. package/es2021/plugins/paste-code/paste-code.min.js +1 -1
  157. package/es2021/plugins/paste-from-word/paste-from-word.js +1 -1
  158. package/es2021/plugins/paste-from-word/paste-from-word.min.js +1 -1
  159. package/es2021/plugins/show-blocks/show-blocks.js +1 -1
  160. package/es2021/plugins/show-blocks/show-blocks.min.js +1 -1
  161. package/es2021/plugins/style/style.css +1 -1
  162. package/es2021/plugins/style/style.js +1 -1
  163. package/es2021/plugins/style/style.min.js +1 -1
  164. package/es2021/plugins/templates/templates.css +1 -1
  165. package/es2021/plugins/templates/templates.js +1 -1
  166. package/es2021/plugins/templates/templates.min.js +1 -1
  167. package/es2021/plugins/todo-list/todo-list.css +1 -1
  168. package/es2021/plugins/todo-list/todo-list.js +1 -1
  169. package/es2021/plugins/todo-list/todo-list.min.js +1 -1
  170. package/es2021/plugins/translate/translate.css +1 -1
  171. package/es2021/plugins/translate/translate.js +1 -1
  172. package/es2021/plugins/translate/translate.min.js +1 -1
  173. package/es2021/plugins/tune-block/tune-block.css +1 -1
  174. package/es2021/plugins/tune-block/tune-block.js +1 -1
  175. package/es2021/plugins/tune-block/tune-block.min.js +1 -1
  176. package/es2021.en/jodit.css +2 -2
  177. package/es2021.en/jodit.fat.min.css +1 -1
  178. package/es2021.en/jodit.fat.min.js +18 -18
  179. package/es2021.en/jodit.js +877 -158
  180. package/es2021.en/jodit.min.css +1 -1
  181. package/es2021.en/jodit.min.js +17 -17
  182. package/es2021.en/plugins/ai-assistant-pro/ai-assistant-pro.css +1 -1
  183. package/es2021.en/plugins/ai-assistant-pro/ai-assistant-pro.js +1 -1
  184. package/es2021.en/plugins/ai-assistant-pro/ai-assistant-pro.min.js +1 -1
  185. package/es2021.en/plugins/autocomplete/autocomplete.css +1 -1
  186. package/es2021.en/plugins/autocomplete/autocomplete.js +1 -1
  187. package/es2021.en/plugins/autocomplete/autocomplete.min.js +1 -1
  188. package/es2021.en/plugins/backup/backup.css +1 -1
  189. package/es2021.en/plugins/backup/backup.js +1 -1
  190. package/es2021.en/plugins/backup/backup.min.js +1 -1
  191. package/es2021.en/plugins/button-generator/button-generator.css +1 -1
  192. package/es2021.en/plugins/button-generator/button-generator.js +1 -1
  193. package/es2021.en/plugins/button-generator/button-generator.min.js +1 -1
  194. package/es2021.en/plugins/change-case/change-case.js +1 -1
  195. package/es2021.en/plugins/change-case/change-case.min.js +1 -1
  196. package/es2021.en/plugins/color-picker/color-picker.css +1 -1
  197. package/es2021.en/plugins/color-picker/color-picker.js +1 -1
  198. package/es2021.en/plugins/color-picker/color-picker.min.js +1 -1
  199. package/es2021.en/plugins/emoji/emoji.css +1 -1
  200. package/es2021.en/plugins/emoji/emoji.js +1 -1
  201. package/es2021.en/plugins/emoji/emoji.min.js +1 -1
  202. package/es2021.en/plugins/export-docs/export-docs.js +1 -1
  203. package/es2021.en/plugins/export-docs/export-docs.min.js +1 -1
  204. package/es2021.en/plugins/finder/finder.css +1 -1
  205. package/es2021.en/plugins/finder/finder.js +1 -1
  206. package/es2021.en/plugins/finder/finder.min.js +1 -1
  207. package/es2021.en/plugins/google-maps/google-maps.css +1 -1
  208. package/es2021.en/plugins/google-maps/google-maps.js +1 -1
  209. package/es2021.en/plugins/google-maps/google-maps.min.js +1 -1
  210. package/es2021.en/plugins/google-search/google-search.js +1 -1
  211. package/es2021.en/plugins/google-search/google-search.min.js +1 -1
  212. package/es2021.en/plugins/highlight-signature/highlight-signature.js +1 -1
  213. package/es2021.en/plugins/highlight-signature/highlight-signature.min.js +1 -1
  214. package/es2021.en/plugins/iframe-editor/iframe-editor.css +1 -1
  215. package/es2021.en/plugins/iframe-editor/iframe-editor.js +1 -1
  216. package/es2021.en/plugins/iframe-editor/iframe-editor.min.js +1 -1
  217. package/es2021.en/plugins/image-editor-pro/image-editor-pro.css +1 -1
  218. package/es2021.en/plugins/image-editor-pro/image-editor-pro.js +1 -1
  219. package/es2021.en/plugins/image-editor-pro/image-editor-pro.min.js +1 -1
  220. package/es2021.en/plugins/keyboard/keyboard.css +1 -1
  221. package/es2021.en/plugins/keyboard/keyboard.js +1 -1
  222. package/es2021.en/plugins/keyboard/keyboard.min.js +1 -1
  223. package/es2021.en/plugins/mobile-view/mobile-view.js +1 -1
  224. package/es2021.en/plugins/mobile-view/mobile-view.min.js +1 -1
  225. package/es2021.en/plugins/page-break/page-break.js +1 -1
  226. package/es2021.en/plugins/page-break/page-break.min.js +1 -1
  227. package/es2021.en/plugins/paste-code/paste-code.css +1 -1
  228. package/es2021.en/plugins/paste-code/paste-code.js +1 -1
  229. package/es2021.en/plugins/paste-code/paste-code.min.js +1 -1
  230. package/es2021.en/plugins/paste-from-word/paste-from-word.js +1 -1
  231. package/es2021.en/plugins/paste-from-word/paste-from-word.min.js +1 -1
  232. package/es2021.en/plugins/show-blocks/show-blocks.js +1 -1
  233. package/es2021.en/plugins/show-blocks/show-blocks.min.js +1 -1
  234. package/es2021.en/plugins/style/style.css +1 -1
  235. package/es2021.en/plugins/style/style.js +1 -1
  236. package/es2021.en/plugins/style/style.min.js +1 -1
  237. package/es2021.en/plugins/templates/templates.css +1 -1
  238. package/es2021.en/plugins/templates/templates.js +1 -1
  239. package/es2021.en/plugins/templates/templates.min.js +1 -1
  240. package/es2021.en/plugins/todo-list/todo-list.css +1 -1
  241. package/es2021.en/plugins/todo-list/todo-list.js +1 -1
  242. package/es2021.en/plugins/todo-list/todo-list.min.js +1 -1
  243. package/es2021.en/plugins/translate/translate.css +1 -1
  244. package/es2021.en/plugins/translate/translate.js +1 -1
  245. package/es2021.en/plugins/translate/translate.min.js +1 -1
  246. package/es2021.en/plugins/tune-block/tune-block.css +1 -1
  247. package/es2021.en/plugins/tune-block/tune-block.js +1 -1
  248. package/es2021.en/plugins/tune-block/tune-block.min.js +1 -1
  249. package/es5/jodit.css +3 -3
  250. package/es5/jodit.fat.min.css +1 -1
  251. package/es5/jodit.fat.min.js +2 -2
  252. package/es5/jodit.js +1388 -161
  253. package/es5/jodit.min.css +3 -3
  254. package/es5/jodit.min.js +2 -2
  255. package/es5/plugins/ai-assistant-pro/ai-assistant-pro.css +1 -1
  256. package/es5/plugins/ai-assistant-pro/ai-assistant-pro.js +1 -1
  257. package/es5/plugins/ai-assistant-pro/ai-assistant-pro.min.js +1 -1
  258. package/es5/plugins/autocomplete/autocomplete.css +1 -1
  259. package/es5/plugins/autocomplete/autocomplete.js +1 -1
  260. package/es5/plugins/autocomplete/autocomplete.min.js +1 -1
  261. package/es5/plugins/backup/backup.css +1 -1
  262. package/es5/plugins/backup/backup.js +1 -1
  263. package/es5/plugins/backup/backup.min.js +1 -1
  264. package/es5/plugins/button-generator/button-generator.css +1 -1
  265. package/es5/plugins/button-generator/button-generator.js +1 -1
  266. package/es5/plugins/button-generator/button-generator.min.js +1 -1
  267. package/es5/plugins/change-case/change-case.js +1 -1
  268. package/es5/plugins/change-case/change-case.min.js +1 -1
  269. package/es5/plugins/color-picker/color-picker.css +1 -1
  270. package/es5/plugins/color-picker/color-picker.js +1 -1
  271. package/es5/plugins/color-picker/color-picker.min.js +1 -1
  272. package/es5/plugins/emoji/emoji.css +1 -1
  273. package/es5/plugins/emoji/emoji.js +1 -1
  274. package/es5/plugins/emoji/emoji.min.js +1 -1
  275. package/es5/plugins/export-docs/export-docs.js +1 -1
  276. package/es5/plugins/export-docs/export-docs.min.js +1 -1
  277. package/es5/plugins/finder/finder.css +1 -1
  278. package/es5/plugins/finder/finder.js +1 -1
  279. package/es5/plugins/finder/finder.min.js +1 -1
  280. package/es5/plugins/google-maps/google-maps.css +1 -1
  281. package/es5/plugins/google-maps/google-maps.js +1 -1
  282. package/es5/plugins/google-maps/google-maps.min.js +1 -1
  283. package/es5/plugins/google-search/google-search.js +1 -1
  284. package/es5/plugins/google-search/google-search.min.js +1 -1
  285. package/es5/plugins/highlight-signature/highlight-signature.js +1 -1
  286. package/es5/plugins/highlight-signature/highlight-signature.min.js +1 -1
  287. package/es5/plugins/iframe-editor/iframe-editor.css +1 -1
  288. package/es5/plugins/iframe-editor/iframe-editor.js +1 -1
  289. package/es5/plugins/iframe-editor/iframe-editor.min.js +1 -1
  290. package/es5/plugins/image-editor-pro/image-editor-pro.css +1 -1
  291. package/es5/plugins/image-editor-pro/image-editor-pro.js +1 -1
  292. package/es5/plugins/image-editor-pro/image-editor-pro.min.js +1 -1
  293. package/es5/plugins/keyboard/keyboard.css +1 -1
  294. package/es5/plugins/keyboard/keyboard.js +1 -1
  295. package/es5/plugins/keyboard/keyboard.min.js +1 -1
  296. package/es5/plugins/mobile-view/mobile-view.js +1 -1
  297. package/es5/plugins/mobile-view/mobile-view.min.js +1 -1
  298. package/es5/plugins/page-break/page-break.js +1 -1
  299. package/es5/plugins/page-break/page-break.min.js +1 -1
  300. package/es5/plugins/paste-code/paste-code.css +1 -1
  301. package/es5/plugins/paste-code/paste-code.js +1 -1
  302. package/es5/plugins/paste-code/paste-code.min.js +1 -1
  303. package/es5/plugins/paste-from-word/paste-from-word.js +1 -1
  304. package/es5/plugins/paste-from-word/paste-from-word.min.js +1 -1
  305. package/es5/plugins/show-blocks/show-blocks.js +1 -1
  306. package/es5/plugins/show-blocks/show-blocks.min.js +1 -1
  307. package/es5/plugins/style/style.css +1 -1
  308. package/es5/plugins/style/style.js +1 -1
  309. package/es5/plugins/style/style.min.js +1 -1
  310. package/es5/plugins/templates/templates.css +1 -1
  311. package/es5/plugins/templates/templates.js +1 -1
  312. package/es5/plugins/templates/templates.min.js +1 -1
  313. package/es5/plugins/todo-list/todo-list.css +1 -1
  314. package/es5/plugins/todo-list/todo-list.js +1 -1
  315. package/es5/plugins/todo-list/todo-list.min.js +1 -1
  316. package/es5/plugins/translate/translate.css +1 -1
  317. package/es5/plugins/translate/translate.js +1 -1
  318. package/es5/plugins/translate/translate.min.js +1 -1
  319. package/es5/plugins/tune-block/tune-block.css +1 -1
  320. package/es5/plugins/tune-block/tune-block.js +1 -1
  321. package/es5/plugins/tune-block/tune-block.min.js +1 -1
  322. package/es5/polyfills.fat.min.js +1 -1
  323. package/es5/polyfills.js +1 -1
  324. package/es5/polyfills.min.js +1 -1
  325. package/package.json +1 -1
package/es2021/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.17.7
4
+ * Version: v4.18.0
5
5
  * Url: https://xdsoft.net/jodit/pro/
6
6
  * License(s): SEE LICENSE IN LICENSE.md
7
7
  */
@@ -732,18 +732,43 @@ let ConfigPrototype = {};
732
732
  /**
733
733
  * Class names to align images with, instead of an inline `float` or
734
734
  * `margin`. Aligning an image removes every class listed here and adds the
735
- * chosen alignment's, which can be several separated by spaces.
735
+ * chosen alignment's, which can be several separated by spaces. An
736
+ * alignment can also list several such sets, to recognise each of them;
737
+ * aligning writes the first. `alignClasses.img` takes its place when set.
736
738
  *
737
739
  * ```javascript
738
740
  * Jodit.make('#editor', {
739
741
  * imageAlignClasses: {
740
742
  * left: 'align-left',
741
743
  * right: 'align-right',
742
- * center: 'align-center'
744
+ * center: ['align-center', 'centered']
743
745
  * }
744
746
  * });
745
747
  * ```
746
748
  */ this.imageAlignClasses = null;
749
+ /**
750
+ * Class names to align elements with, by tag name, as `imageAlignClasses`
751
+ * does for images: `img`, and `video`, `audio` and `iframe` in the media
752
+ * popup. A media wrapper (see `mediaWrappers`), and Jodit's own `jodit` and
753
+ * `jodit-media` wrappers, are aligned with the classes for the media in
754
+ * them.
755
+ *
756
+ * ```javascript
757
+ * const media = {
758
+ * left: 'media-left',
759
+ * right: 'media-right',
760
+ * center: 'media-center'
761
+ * };
762
+ *
763
+ * Jodit.make('#editor', {
764
+ * alignClasses: { video: media, iframe: media }
765
+ * });
766
+ * ```
767
+ */ this.alignClasses = {};
768
+ /**
769
+ * Alignment given to the media the video popup inserts. `'normal'` leaves
770
+ * them unaligned
771
+ */ this.mediaDefaultAlign = 'normal';
747
772
  /**
748
773
  * Do not display these buttons that are on the list
749
774
  *
@@ -1743,7 +1768,7 @@ __webpack_require__.r(__webpack_exports__);
1743
1768
  * ```
1744
1769
  * @packageDocumentation
1745
1770
  * @module constants
1746
- */ const APP_VERSION = "4.17.7";
1771
+ */ const APP_VERSION = "4.18.0";
1747
1772
  // prettier-ignore
1748
1773
  const ES = "es2021";
1749
1774
  const IS_ES_MODERN = true;
@@ -6310,6 +6335,7 @@ __webpack_require__.r(__webpack_exports__);
6310
6335
  /* harmony export */ completeUrl: function() { return /* reexport safe */ _utils_index_js__WEBPACK_IMPORTED_MODULE_8__.completeUrl; },
6311
6336
  /* harmony export */ connection: function() { return /* reexport safe */ _utils_index_js__WEBPACK_IMPORTED_MODULE_8__.connection; },
6312
6337
  /* harmony export */ convertMediaUrlToVideoEmbed: function() { return /* reexport safe */ _utils_index_js__WEBPACK_IMPORTED_MODULE_8__.convertMediaUrlToVideoEmbed; },
6338
+ /* harmony export */ createMediaWrapper: function() { return /* reexport safe */ _utils_index_js__WEBPACK_IMPORTED_MODULE_8__.createMediaWrapper; },
6313
6339
  /* harmony export */ css: function() { return /* reexport safe */ _utils_index_js__WEBPACK_IMPORTED_MODULE_8__.css; },
6314
6340
  /* harmony export */ cssInline: function() { return /* reexport safe */ _utils_index_js__WEBPACK_IMPORTED_MODULE_8__.cssInline; },
6315
6341
  /* harmony export */ cssPath: function() { return /* reexport safe */ _utils_index_js__WEBPACK_IMPORTED_MODULE_8__.cssPath; },
@@ -6320,13 +6346,16 @@ __webpack_require__.r(__webpack_exports__);
6320
6346
  /* harmony export */ fastClone: function() { return /* reexport safe */ _utils_index_js__WEBPACK_IMPORTED_MODULE_8__.fastClone; },
6321
6347
  /* harmony export */ fuzzySearchIndex: function() { return /* reexport safe */ _string_index_js__WEBPACK_IMPORTED_MODULE_7__.fuzzySearchIndex; },
6322
6348
  /* harmony export */ get: function() { return /* reexport safe */ _utils_index_js__WEBPACK_IMPORTED_MODULE_8__.get; },
6349
+ /* harmony export */ getAlignClasses: function() { return /* reexport safe */ _utils_index_js__WEBPACK_IMPORTED_MODULE_8__.getAlignClasses; },
6323
6350
  /* harmony export */ getClassName: function() { return /* reexport safe */ _utils_index_js__WEBPACK_IMPORTED_MODULE_8__.getClassName; },
6324
6351
  /* harmony export */ getContentWidth: function() { return /* reexport safe */ _size_index_js__WEBPACK_IMPORTED_MODULE_6__.getContentWidth; },
6325
6352
  /* harmony export */ getDataTransfer: function() { return /* reexport safe */ _utils_index_js__WEBPACK_IMPORTED_MODULE_8__.getDataTransfer; },
6326
6353
  /* harmony export */ getFixedPositionOffset: function() { return /* reexport safe */ _size_index_js__WEBPACK_IMPORTED_MODULE_6__.getFixedPositionOffset; },
6327
6354
  /* harmony export */ getHAlign: function() { return /* reexport safe */ _utils_index_js__WEBPACK_IMPORTED_MODULE_8__.getHAlign; },
6355
+ /* harmony export */ getMediaWrapper: function() { return /* reexport safe */ _utils_index_js__WEBPACK_IMPORTED_MODULE_8__.getMediaWrapper; },
6328
6356
  /* harmony export */ getPropertyDescriptor: function() { return /* reexport safe */ _utils_index_js__WEBPACK_IMPORTED_MODULE_8__.getPropertyDescriptor; },
6329
6357
  /* harmony export */ getScrollParent: function() { return /* reexport safe */ _size_index_js__WEBPACK_IMPORTED_MODULE_6__.getScrollParent; },
6358
+ /* harmony export */ getWrappedMedia: function() { return /* reexport safe */ _utils_index_js__WEBPACK_IMPORTED_MODULE_8__.getWrappedMedia; },
6330
6359
  /* harmony export */ getXPathByElement: function() { return /* reexport safe */ _utils_index_js__WEBPACK_IMPORTED_MODULE_8__.getXPathByElement; },
6331
6360
  /* harmony export */ hAlignElement: function() { return /* reexport safe */ _utils_index_js__WEBPACK_IMPORTED_MODULE_8__.hAlignElement; },
6332
6361
  /* harmony export */ hasBrowserColorPicker: function() { return /* reexport safe */ _checker_index_js__WEBPACK_IMPORTED_MODULE_2__.hasBrowserColorPicker; },
@@ -6407,7 +6436,8 @@ __webpack_require__.r(__webpack_exports__);
6407
6436
  /* harmony export */ trim: function() { return /* reexport safe */ _string_index_js__WEBPACK_IMPORTED_MODULE_7__.trim; },
6408
6437
  /* harmony export */ trimChars: function() { return /* reexport safe */ _string_index_js__WEBPACK_IMPORTED_MODULE_7__.trimChars; },
6409
6438
  /* harmony export */ trimInv: function() { return /* reexport safe */ _string_index_js__WEBPACK_IMPORTED_MODULE_7__.trimInv; },
6410
- /* harmony export */ ucfirst: function() { return /* reexport safe */ _string_index_js__WEBPACK_IMPORTED_MODULE_7__.ucfirst; }
6439
+ /* harmony export */ ucfirst: function() { return /* reexport safe */ _string_index_js__WEBPACK_IMPORTED_MODULE_7__.ucfirst; },
6440
+ /* harmony export */ wrapMedia: function() { return /* reexport safe */ _utils_index_js__WEBPACK_IMPORTED_MODULE_8__.wrapMedia; }
6411
6441
  /* harmony export */ });
6412
6442
  /* harmony import */ var _array_index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(76855);
6413
6443
  /* harmony import */ var _async_index_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(91898);
@@ -7415,12 +7445,15 @@ function trimChars(value, chars) {
7415
7445
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
7416
7446
  /* harmony export */ alignElement: function() { return /* binding */ alignElement; },
7417
7447
  /* harmony export */ clearAlign: function() { return /* binding */ clearAlign; },
7448
+ /* harmony export */ getAlignClasses: function() { return /* binding */ getAlignClasses; },
7418
7449
  /* harmony export */ getHAlign: function() { return /* binding */ getHAlign; },
7419
7450
  /* harmony export */ hAlignElement: function() { return /* binding */ hAlignElement; }
7420
7451
  /* harmony export */ });
7421
7452
  /* harmony import */ var _dom_index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(22732);
7422
- /* harmony import */ var _attr_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(29960);
7423
- /* harmony import */ var _css_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(41180);
7453
+ /* harmony import */ var _checker_is_array_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(68345);
7454
+ /* harmony import */ var _attr_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(29960);
7455
+ /* harmony import */ var _css_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(41180);
7456
+ /* harmony import */ var _media_wrapper_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(61477);
7424
7457
  /*!
7425
7458
  * Jodit Editor (https://xdsoft.net/jodit/)
7426
7459
  * Released under MIT see LICENSE.txt in the project root for license information.
@@ -7428,32 +7461,54 @@ function trimChars(value, chars) {
7428
7461
  */
7429
7462
 
7430
7463
 
7431
- const classNames = (value)=>(value !== null && value !== void 0 ? value : '').split(/\s+/).filter(Boolean);
7464
+
7465
+
7466
+ // The sets of class names an alignment lists, the first being the one to write
7467
+ const classSets = (value)=>((0,_checker_is_array_js__WEBPACK_IMPORTED_MODULE_1__.isArray)(value) ? value : [
7468
+ value !== null && value !== void 0 ? value : ''
7469
+ ]).map((set)=>set.split(/\s+/).filter(Boolean)).filter((set)=>set.length);
7432
7470
  /**
7433
- * Align image, with `classes` (see `imageAlignClasses`) instead of inline
7434
- * styles when they are given
7471
+ * The class names to align `elm` with: `alignClasses` for its tag, or for the
7472
+ * media in it when it wraps media (a `mediaWrappers` wrapper, `jodit` or
7473
+ * `jodit-media`), falling back to `imageAlignClasses` for an image
7474
+ */ function getAlignClasses(jodit, elm) {
7475
+ var _a, _b;
7476
+ if (!elm) {
7477
+ return null;
7478
+ }
7479
+ const media = _dom_index_js__WEBPACK_IMPORTED_MODULE_0__.Dom.isTag(elm, new Set([
7480
+ 'jodit',
7481
+ 'jodit-media'
7482
+ ])) ? elm.firstElementChild : (0,_media_wrapper_js__WEBPACK_IMPORTED_MODULE_4__.getWrappedMedia)(jodit, elm);
7483
+ const tag = (media !== null && media !== void 0 ? media : elm).nodeName.toLowerCase();
7484
+ return (_b = (_a = jodit.o.alignClasses) === null || _a === void 0 ? void 0 : _a[tag]) !== null && _b !== void 0 ? _b : tag === 'img' ? jodit.o.imageAlignClasses : null;
7485
+ }
7486
+ /**
7487
+ * Align image, with `classes` (see `alignClasses`) instead of inline styles
7488
+ * when they are given
7435
7489
  */ function hAlignElement(image, align, classes) {
7490
+ var _a;
7436
7491
  if (classes) {
7437
7492
  hAlignElement(image, 'normal');
7438
- Object.values(classes).forEach((value)=>image.classList.remove(...classNames(value)));
7439
- image.classList.add(...classNames(classes[align || 'normal']));
7493
+ Object.values(classes).forEach((value)=>classSets(value).forEach((set)=>image.classList.remove(...set)));
7494
+ image.classList.add(...(_a = classSets(classes[align || 'normal'])[0]) !== null && _a !== void 0 ? _a : []);
7440
7495
  [
7441
7496
  'class',
7442
7497
  'style'
7443
7498
  ].forEach((name)=>{
7444
7499
  var _a;
7445
- if (!((_a = (0,_attr_js__WEBPACK_IMPORTED_MODULE_1__.attr)(image, name)) === null || _a === void 0 ? void 0 : _a.trim())) {
7446
- (0,_attr_js__WEBPACK_IMPORTED_MODULE_1__.attr)(image, name, null);
7500
+ if (!((_a = (0,_attr_js__WEBPACK_IMPORTED_MODULE_2__.attr)(image, name)) === null || _a === void 0 ? void 0 : _a.trim())) {
7501
+ (0,_attr_js__WEBPACK_IMPORTED_MODULE_2__.attr)(image, name, null);
7447
7502
  }
7448
7503
  });
7449
7504
  return;
7450
7505
  }
7451
7506
  if (align && align !== 'normal') {
7452
7507
  if (align !== 'center') {
7453
- (0,_css_js__WEBPACK_IMPORTED_MODULE_2__.css)(image, 'float', align);
7454
- (0,_css_js__WEBPACK_IMPORTED_MODULE_2__.clearCenterAlign)(image);
7508
+ (0,_css_js__WEBPACK_IMPORTED_MODULE_3__.css)(image, 'float', align);
7509
+ (0,_css_js__WEBPACK_IMPORTED_MODULE_3__.clearCenterAlign)(image);
7455
7510
  } else {
7456
- (0,_css_js__WEBPACK_IMPORTED_MODULE_2__.css)(image, {
7511
+ (0,_css_js__WEBPACK_IMPORTED_MODULE_3__.css)(image, {
7457
7512
  float: '',
7458
7513
  display: 'block',
7459
7514
  marginLeft: 'auto',
@@ -7461,13 +7516,13 @@ const classNames = (value)=>(value !== null && value !== void 0 ? value : '').sp
7461
7516
  });
7462
7517
  }
7463
7518
  } else {
7464
- if ((0,_css_js__WEBPACK_IMPORTED_MODULE_2__.css)(image, 'float') && [
7519
+ if ((0,_css_js__WEBPACK_IMPORTED_MODULE_3__.css)(image, 'float') && [
7465
7520
  'right',
7466
7521
  'left'
7467
- ].indexOf((0,_css_js__WEBPACK_IMPORTED_MODULE_2__.css)(image, 'float').toString().toLowerCase()) !== -1) {
7468
- (0,_css_js__WEBPACK_IMPORTED_MODULE_2__.css)(image, 'float', '');
7522
+ ].indexOf((0,_css_js__WEBPACK_IMPORTED_MODULE_3__.css)(image, 'float').toString().toLowerCase()) !== -1) {
7523
+ (0,_css_js__WEBPACK_IMPORTED_MODULE_3__.css)(image, 'float', '');
7469
7524
  }
7470
- ;(0,_css_js__WEBPACK_IMPORTED_MODULE_2__.clearCenterAlign)(image);
7525
+ ;(0,_css_js__WEBPACK_IMPORTED_MODULE_3__.clearCenterAlign)(image);
7471
7526
  }
7472
7527
  }
7473
7528
  /**
@@ -7480,17 +7535,16 @@ const classNames = (value)=>(value !== null && value !== void 0 ? value : '').sp
7480
7535
  'center',
7481
7536
  'normal'
7482
7537
  ]){
7483
- const names = classNames(classes[align]);
7484
- if (names.length && names.every((name)=>elm.classList.contains(name))) {
7538
+ if (classSets(classes[align]).some((set)=>set.every((name)=>elm.classList.contains(name)))) {
7485
7539
  return align;
7486
7540
  }
7487
7541
  }
7488
7542
  }
7489
- const float = (0,_css_js__WEBPACK_IMPORTED_MODULE_2__.cssInline)(elm, 'float').toLowerCase();
7543
+ const float = (0,_css_js__WEBPACK_IMPORTED_MODULE_3__.cssInline)(elm, 'float').toLowerCase();
7490
7544
  if (float === 'left' || float === 'right') {
7491
7545
  return float;
7492
7546
  }
7493
- if ((0,_css_js__WEBPACK_IMPORTED_MODULE_2__.css)(elm, 'display') === 'block' && (0,_css_js__WEBPACK_IMPORTED_MODULE_2__.cssInline)(elm, 'margin-left') === 'auto' && (0,_css_js__WEBPACK_IMPORTED_MODULE_2__.cssInline)(elm, 'margin-right') === 'auto') {
7547
+ if ((0,_css_js__WEBPACK_IMPORTED_MODULE_3__.css)(elm, 'display') === 'block' && (0,_css_js__WEBPACK_IMPORTED_MODULE_3__.cssInline)(elm, 'margin-left') === 'auto' && (0,_css_js__WEBPACK_IMPORTED_MODULE_3__.cssInline)(elm, 'margin-right') === 'auto') {
7494
7548
  return 'center';
7495
7549
  }
7496
7550
  return 'normal';
@@ -7500,10 +7554,10 @@ const classNames = (value)=>(value !== null && value !== void 0 ? value : '').sp
7500
7554
  */ function clearAlign(node) {
7501
7555
  _dom_index_js__WEBPACK_IMPORTED_MODULE_0__.Dom.each(node, (elm)=>{
7502
7556
  if (_dom_index_js__WEBPACK_IMPORTED_MODULE_0__.Dom.isHTMLElement(elm)) {
7503
- if ((0,_css_js__WEBPACK_IMPORTED_MODULE_2__.cssInline)(elm, 'textAlign')) {
7504
- (0,_css_js__WEBPACK_IMPORTED_MODULE_2__.css)(elm, 'textAlign', '');
7505
- if (!((0,_attr_js__WEBPACK_IMPORTED_MODULE_1__.attr)(elm, 'style') || '').trim().length) {
7506
- (0,_attr_js__WEBPACK_IMPORTED_MODULE_1__.attr)(elm, 'style', null);
7557
+ if ((0,_css_js__WEBPACK_IMPORTED_MODULE_3__.cssInline)(elm, 'textAlign')) {
7558
+ (0,_css_js__WEBPACK_IMPORTED_MODULE_3__.css)(elm, 'textAlign', '');
7559
+ if (!((0,_attr_js__WEBPACK_IMPORTED_MODULE_2__.attr)(elm, 'style') || '').trim().length) {
7560
+ (0,_attr_js__WEBPACK_IMPORTED_MODULE_2__.attr)(elm, 'style', null);
7507
7561
  }
7508
7562
  }
7509
7563
  }
@@ -7534,7 +7588,7 @@ function alignElement(command, box) {
7534
7588
  clearAlign(box);
7535
7589
  const align = ALIGN_BY_COMMAND.get(command.toLowerCase());
7536
7590
  if (align) {
7537
- (0,_css_js__WEBPACK_IMPORTED_MODULE_2__.css)(box, 'textAlign', align);
7591
+ (0,_css_js__WEBPACK_IMPORTED_MODULE_3__.css)(box, 'textAlign', align);
7538
7592
  }
7539
7593
  }
7540
7594
  }
@@ -8608,13 +8662,13 @@ const getClassName = (obj)=>{
8608
8662
  /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
8609
8663
 
8610
8664
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
8611
- /* harmony export */ $$: function() { return /* reexport safe */ _selector_js__WEBPACK_IMPORTED_MODULE_24__.$$; },
8665
+ /* harmony export */ $$: function() { return /* reexport safe */ _selector_js__WEBPACK_IMPORTED_MODULE_25__.$$; },
8612
8666
  /* harmony export */ ConfigDeepFlatten: function() { return /* reexport safe */ _config_proto_js__WEBPACK_IMPORTED_MODULE_7__.ConfigDeepFlatten; },
8613
8667
  /* harmony export */ ConfigFlatten: function() { return /* reexport safe */ _config_proto_js__WEBPACK_IMPORTED_MODULE_7__.ConfigFlatten; },
8614
8668
  /* harmony export */ ConfigMerge: function() { return /* reexport safe */ _config_proto_js__WEBPACK_IMPORTED_MODULE_7__.ConfigMerge; },
8615
8669
  /* harmony export */ ConfigProto: function() { return /* reexport safe */ _config_proto_js__WEBPACK_IMPORTED_MODULE_7__.ConfigProto; },
8616
8670
  /* harmony export */ ConnectionError: function() { return /* reexport safe */ _error_index_js__WEBPACK_IMPORTED_MODULE_13__.ConnectionError; },
8617
- /* harmony export */ LimitedStack: function() { return /* reexport safe */ _stack_js__WEBPACK_IMPORTED_MODULE_26__.LimitedStack; },
8671
+ /* harmony export */ LimitedStack: function() { return /* reexport safe */ _stack_js__WEBPACK_IMPORTED_MODULE_27__.LimitedStack; },
8618
8672
  /* harmony export */ OptionsError: function() { return /* reexport safe */ _error_index_js__WEBPACK_IMPORTED_MODULE_13__.OptionsError; },
8619
8673
  /* harmony export */ UNSAFE_PROTO_KEYS: function() { return /* reexport safe */ _is_unsafe_proto_key_js__WEBPACK_IMPORTED_MODULE_18__.UNSAFE_PROTO_KEYS; },
8620
8674
  /* harmony export */ abort: function() { return /* reexport safe */ _error_index_js__WEBPACK_IMPORTED_MODULE_13__.abort; },
@@ -8627,51 +8681,56 @@ const getClassName = (obj)=>{
8627
8681
  /* harmony export */ attrRaw: function() { return /* reexport safe */ _attr_js__WEBPACK_IMPORTED_MODULE_3__.attrRaw; },
8628
8682
  /* harmony export */ browser: function() { return /* reexport safe */ _browser_js__WEBPACK_IMPORTED_MODULE_4__.browser; },
8629
8683
  /* harmony export */ buildQuery: function() { return /* reexport safe */ _build_query_js__WEBPACK_IMPORTED_MODULE_5__.buildQuery; },
8630
- /* harmony export */ call: function() { return /* reexport safe */ _utils_js__WEBPACK_IMPORTED_MODULE_27__.call; },
8631
- /* harmony export */ callPromise: function() { return /* reexport safe */ _utils_js__WEBPACK_IMPORTED_MODULE_27__.callPromise; },
8632
- /* harmony export */ callThis: function() { return /* reexport safe */ _utils_js__WEBPACK_IMPORTED_MODULE_27__.callThis; },
8684
+ /* harmony export */ call: function() { return /* reexport safe */ _utils_js__WEBPACK_IMPORTED_MODULE_28__.call; },
8685
+ /* harmony export */ callPromise: function() { return /* reexport safe */ _utils_js__WEBPACK_IMPORTED_MODULE_28__.callPromise; },
8686
+ /* harmony export */ callThis: function() { return /* reexport safe */ _utils_js__WEBPACK_IMPORTED_MODULE_28__.callThis; },
8633
8687
  /* harmony export */ clearAlign: function() { return /* reexport safe */ _align_js__WEBPACK_IMPORTED_MODULE_0__.clearAlign; },
8634
8688
  /* harmony export */ clearCenterAlign: function() { return /* reexport safe */ _css_js__WEBPACK_IMPORTED_MODULE_9__.clearCenterAlign; },
8635
8689
  /* harmony export */ cns: function() { return /* reexport safe */ _mark_deprecated_js__WEBPACK_IMPORTED_MODULE_19__.cns; },
8636
8690
  /* harmony export */ completeUrl: function() { return /* reexport safe */ _complete_url_js__WEBPACK_IMPORTED_MODULE_6__.completeUrl; },
8637
8691
  /* harmony export */ connection: function() { return /* reexport safe */ _error_index_js__WEBPACK_IMPORTED_MODULE_13__.connection; },
8638
8692
  /* harmony export */ convertMediaUrlToVideoEmbed: function() { return /* reexport safe */ _convert_media_url_to_video_embed_js__WEBPACK_IMPORTED_MODULE_8__.convertMediaUrlToVideoEmbed; },
8693
+ /* harmony export */ createMediaWrapper: function() { return /* reexport safe */ _media_wrapper_js__WEBPACK_IMPORTED_MODULE_20__.createMediaWrapper; },
8639
8694
  /* harmony export */ css: function() { return /* reexport safe */ _css_js__WEBPACK_IMPORTED_MODULE_9__.css; },
8640
8695
  /* harmony export */ cssInline: function() { return /* reexport safe */ _css_js__WEBPACK_IMPORTED_MODULE_9__.cssInline; },
8641
- /* harmony export */ cssPath: function() { return /* reexport safe */ _selector_js__WEBPACK_IMPORTED_MODULE_24__.cssPath; },
8696
+ /* harmony export */ cssPath: function() { return /* reexport safe */ _selector_js__WEBPACK_IMPORTED_MODULE_25__.cssPath; },
8642
8697
  /* harmony export */ ctrlKey: function() { return /* reexport safe */ _ctrl_key_js__WEBPACK_IMPORTED_MODULE_10__.ctrlKey; },
8643
8698
  /* harmony export */ dataBind: function() { return /* reexport safe */ _data_bind_js__WEBPACK_IMPORTED_MODULE_11__.dataBind; },
8644
8699
  /* harmony export */ defaultLanguage: function() { return /* reexport safe */ _default_language_js__WEBPACK_IMPORTED_MODULE_12__.defaultLanguage; },
8645
8700
  /* harmony export */ error: function() { return /* reexport safe */ _error_index_js__WEBPACK_IMPORTED_MODULE_13__.error; },
8646
8701
  /* harmony export */ fastClone: function() { return /* reexport safe */ _extend_js__WEBPACK_IMPORTED_MODULE_14__.fastClone; },
8647
8702
  /* harmony export */ get: function() { return /* reexport safe */ _get_js__WEBPACK_IMPORTED_MODULE_15__.get; },
8703
+ /* harmony export */ getAlignClasses: function() { return /* reexport safe */ _align_js__WEBPACK_IMPORTED_MODULE_0__.getAlignClasses; },
8648
8704
  /* harmony export */ getClassName: function() { return /* reexport safe */ _get_class_name_js__WEBPACK_IMPORTED_MODULE_16__.getClassName; },
8649
- /* harmony export */ getDataTransfer: function() { return /* reexport safe */ _utils_js__WEBPACK_IMPORTED_MODULE_27__.getDataTransfer; },
8705
+ /* harmony export */ getDataTransfer: function() { return /* reexport safe */ _utils_js__WEBPACK_IMPORTED_MODULE_28__.getDataTransfer; },
8650
8706
  /* harmony export */ getHAlign: function() { return /* reexport safe */ _align_js__WEBPACK_IMPORTED_MODULE_0__.getHAlign; },
8651
- /* harmony export */ getPropertyDescriptor: function() { return /* reexport safe */ _utils_js__WEBPACK_IMPORTED_MODULE_27__.getPropertyDescriptor; },
8652
- /* harmony export */ getXPathByElement: function() { return /* reexport safe */ _selector_js__WEBPACK_IMPORTED_MODULE_24__.getXPathByElement; },
8707
+ /* harmony export */ getMediaWrapper: function() { return /* reexport safe */ _media_wrapper_js__WEBPACK_IMPORTED_MODULE_20__.getMediaWrapper; },
8708
+ /* harmony export */ getPropertyDescriptor: function() { return /* reexport safe */ _utils_js__WEBPACK_IMPORTED_MODULE_28__.getPropertyDescriptor; },
8709
+ /* harmony export */ getWrappedMedia: function() { return /* reexport safe */ _media_wrapper_js__WEBPACK_IMPORTED_MODULE_20__.getWrappedMedia; },
8710
+ /* harmony export */ getXPathByElement: function() { return /* reexport safe */ _selector_js__WEBPACK_IMPORTED_MODULE_25__.getXPathByElement; },
8653
8711
  /* harmony export */ hAlignElement: function() { return /* reexport safe */ _align_js__WEBPACK_IMPORTED_MODULE_0__.hAlignElement; },
8654
8712
  /* harmony export */ humanSizeToBytes: function() { return /* reexport safe */ _human_size_to_bytes_js__WEBPACK_IMPORTED_MODULE_17__.humanSizeToBytes; },
8655
- /* harmony export */ inView: function() { return /* reexport safe */ _scroll_into_view_js__WEBPACK_IMPORTED_MODULE_23__.inView; },
8713
+ /* harmony export */ inView: function() { return /* reexport safe */ _scroll_into_view_js__WEBPACK_IMPORTED_MODULE_24__.inView; },
8656
8714
  /* harmony export */ isAtom: function() { return /* reexport safe */ _extend_js__WEBPACK_IMPORTED_MODULE_14__.isAtom; },
8657
8715
  /* harmony export */ isUnsafeProtoKey: function() { return /* reexport safe */ _is_unsafe_proto_key_js__WEBPACK_IMPORTED_MODULE_18__.isUnsafeProtoKey; },
8658
8716
  /* harmony export */ keepNames: function() { return /* reexport safe */ _get_class_name_js__WEBPACK_IMPORTED_MODULE_16__.keepNames; },
8659
- /* harmony export */ keys: function() { return /* reexport safe */ _utils_js__WEBPACK_IMPORTED_MODULE_27__.keys; },
8660
- /* harmony export */ loadImage: function() { return /* reexport safe */ _utils_js__WEBPACK_IMPORTED_MODULE_27__.loadImage; },
8717
+ /* harmony export */ keys: function() { return /* reexport safe */ _utils_js__WEBPACK_IMPORTED_MODULE_28__.keys; },
8718
+ /* harmony export */ loadImage: function() { return /* reexport safe */ _utils_js__WEBPACK_IMPORTED_MODULE_28__.loadImage; },
8661
8719
  /* harmony export */ loadNext: function() { return /* reexport safe */ _append_script_js__WEBPACK_IMPORTED_MODULE_1__.loadNext; },
8662
8720
  /* harmony export */ loadNextStyle: function() { return /* reexport safe */ _append_script_js__WEBPACK_IMPORTED_MODULE_1__.loadNextStyle; },
8663
8721
  /* harmony export */ markAsAtomic: function() { return /* reexport safe */ _extend_js__WEBPACK_IMPORTED_MODULE_14__.markAsAtomic; },
8664
8722
  /* harmony export */ markDeprecated: function() { return /* reexport safe */ _mark_deprecated_js__WEBPACK_IMPORTED_MODULE_19__.markDeprecated; },
8665
- /* harmony export */ markOwner: function() { return /* reexport safe */ _utils_js__WEBPACK_IMPORTED_MODULE_27__.markOwner; },
8666
- /* harmony export */ memorizeExec: function() { return /* reexport safe */ _utils_js__WEBPACK_IMPORTED_MODULE_27__.memorizeExec; },
8723
+ /* harmony export */ markOwner: function() { return /* reexport safe */ _utils_js__WEBPACK_IMPORTED_MODULE_28__.markOwner; },
8724
+ /* harmony export */ memorizeExec: function() { return /* reexport safe */ _utils_js__WEBPACK_IMPORTED_MODULE_28__.memorizeExec; },
8667
8725
  /* harmony export */ options: function() { return /* reexport safe */ _error_index_js__WEBPACK_IMPORTED_MODULE_13__.options; },
8668
- /* harmony export */ parseQuery: function() { return /* reexport safe */ _parse_query_js__WEBPACK_IMPORTED_MODULE_20__.parseQuery; },
8669
- /* harmony export */ previewBox: function() { return /* reexport safe */ _print_js__WEBPACK_IMPORTED_MODULE_21__.previewBox; },
8670
- /* harmony export */ refs: function() { return /* reexport safe */ _selector_js__WEBPACK_IMPORTED_MODULE_24__.refs; },
8671
- /* harmony export */ reset: function() { return /* reexport safe */ _reset_js__WEBPACK_IMPORTED_MODULE_22__.reset; },
8672
- /* harmony export */ resolveElement: function() { return /* reexport safe */ _selector_js__WEBPACK_IMPORTED_MODULE_24__.resolveElement; },
8673
- /* harmony export */ scrollIntoViewIfNeeded: function() { return /* reexport safe */ _scroll_into_view_js__WEBPACK_IMPORTED_MODULE_23__.scrollIntoViewIfNeeded; },
8674
- /* harmony export */ set: function() { return /* reexport safe */ _set_js__WEBPACK_IMPORTED_MODULE_25__.set; }
8726
+ /* harmony export */ parseQuery: function() { return /* reexport safe */ _parse_query_js__WEBPACK_IMPORTED_MODULE_21__.parseQuery; },
8727
+ /* harmony export */ previewBox: function() { return /* reexport safe */ _print_js__WEBPACK_IMPORTED_MODULE_22__.previewBox; },
8728
+ /* harmony export */ refs: function() { return /* reexport safe */ _selector_js__WEBPACK_IMPORTED_MODULE_25__.refs; },
8729
+ /* harmony export */ reset: function() { return /* reexport safe */ _reset_js__WEBPACK_IMPORTED_MODULE_23__.reset; },
8730
+ /* harmony export */ resolveElement: function() { return /* reexport safe */ _selector_js__WEBPACK_IMPORTED_MODULE_25__.resolveElement; },
8731
+ /* harmony export */ scrollIntoViewIfNeeded: function() { return /* reexport safe */ _scroll_into_view_js__WEBPACK_IMPORTED_MODULE_24__.scrollIntoViewIfNeeded; },
8732
+ /* harmony export */ set: function() { return /* reexport safe */ _set_js__WEBPACK_IMPORTED_MODULE_26__.set; },
8733
+ /* harmony export */ wrapMedia: function() { return /* reexport safe */ _media_wrapper_js__WEBPACK_IMPORTED_MODULE_20__.wrapMedia; }
8675
8734
  /* harmony export */ });
8676
8735
  /* harmony import */ var _align_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(25726);
8677
8736
  /* harmony import */ var _append_script_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(63799);
@@ -8693,14 +8752,15 @@ const getClassName = (obj)=>{
8693
8752
  /* harmony import */ var _human_size_to_bytes_js__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(38420);
8694
8753
  /* harmony import */ var _is_unsafe_proto_key_js__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(69175);
8695
8754
  /* harmony import */ var _mark_deprecated_js__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(95942);
8696
- /* harmony import */ var _parse_query_js__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(82501);
8697
- /* harmony import */ var _print_js__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(11628);
8698
- /* harmony import */ var _reset_js__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(58844);
8699
- /* harmony import */ var _scroll_into_view_js__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(26395);
8700
- /* harmony import */ var _selector_js__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(76078);
8701
- /* harmony import */ var _set_js__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(3703);
8702
- /* harmony import */ var _stack_js__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(50535);
8703
- /* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(37790);
8755
+ /* harmony import */ var _media_wrapper_js__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(61477);
8756
+ /* harmony import */ var _parse_query_js__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(82501);
8757
+ /* harmony import */ var _print_js__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(11628);
8758
+ /* harmony import */ var _reset_js__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(58844);
8759
+ /* harmony import */ var _scroll_into_view_js__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(26395);
8760
+ /* harmony import */ var _selector_js__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(76078);
8761
+ /* harmony import */ var _set_js__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(3703);
8762
+ /* harmony import */ var _stack_js__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(50535);
8763
+ /* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(37790);
8704
8764
  /*!
8705
8765
  * Jodit Editor (https://xdsoft.net/jodit/)
8706
8766
  * Released under MIT see LICENSE.txt in the project root for license information.
@@ -8735,6 +8795,7 @@ const getClassName = (obj)=>{
8735
8795
 
8736
8796
 
8737
8797
 
8798
+
8738
8799
 
8739
8800
 
8740
8801
  /***/ }),
@@ -8805,6 +8866,76 @@ const getClassName = (obj)=>{
8805
8866
  /* harmony export */ ]);
8806
8867
 
8807
8868
 
8869
+ /***/ }),
8870
+
8871
+ /***/ 61477:
8872
+ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
8873
+
8874
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
8875
+ /* harmony export */ createMediaWrapper: function() { return /* binding */ createMediaWrapper; },
8876
+ /* harmony export */ getMediaWrapper: function() { return /* binding */ getMediaWrapper; },
8877
+ /* harmony export */ getWrappedMedia: function() { return /* binding */ getWrappedMedia; },
8878
+ /* harmony export */ wrapMedia: function() { return /* binding */ wrapMedia; }
8879
+ /* harmony export */ });
8880
+ /* harmony import */ var _dom_dom_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(2748);
8881
+ /*!
8882
+ * Jodit Editor (https://xdsoft.net/jodit/)
8883
+ * Released under MIT see LICENSE.txt in the project root for license information.
8884
+ * Copyright (c) 2013-2026 Valerii Chupurnov. All rights reserved. https://xdsoft.net
8885
+ */
8886
+ const isWrapper = (node, wrapper)=>_dom_dom_js__WEBPACK_IMPORTED_MODULE_0__.Dom.isHTMLElement(node) && node.nodeName.toLowerCase() === wrapper.tag.toLowerCase() && node.classList.contains(wrapper.className);
8887
+ /**
8888
+ * The media in `elm` when `elm` is a wrapper media keep in the content (see
8889
+ * `mediaWrappers`): an element of a type `elm` is the wrapper for
8890
+ */ function getWrappedMedia(jodit, elm) {
8891
+ var _a;
8892
+ for (const [tag, wrapper] of Object.entries((_a = jodit.o.mediaWrappers) !== null && _a !== void 0 ? _a : {})){
8893
+ if (isWrapper(elm, wrapper)) {
8894
+ const media = elm.querySelector(tag);
8895
+ if (media) {
8896
+ return media;
8897
+ }
8898
+ }
8899
+ }
8900
+ return null;
8901
+ }
8902
+ /**
8903
+ * The wrapper media keep in the content (see `mediaWrappers`) that is or
8904
+ * holds `node`
8905
+ */ function getMediaWrapper(jodit, node) {
8906
+ return _dom_dom_js__WEBPACK_IMPORTED_MODULE_0__.Dom.closest(node, (elm)=>Boolean(getWrappedMedia(jodit, elm)), jodit.editor);
8907
+ }
8908
+ /**
8909
+ * An empty wrapper for media of type `tag` to keep in the content (see
8910
+ * `mediaWrappers`), or null when there is none for it
8911
+ */ function createMediaWrapper(jodit, tag) {
8912
+ var _a;
8913
+ const wrapper = (_a = jodit.o.mediaWrappers) === null || _a === void 0 ? void 0 : _a[tag.toLowerCase()];
8914
+ if (!wrapper) {
8915
+ return null;
8916
+ }
8917
+ return jodit.createInside.element(wrapper.tag, {
8918
+ class: wrapper.className,
8919
+ contenteditable: false,
8920
+ draggable: true
8921
+ });
8922
+ }
8923
+ /**
8924
+ * Puts `element` in the wrapper for its type (see `mediaWrappers`), and
8925
+ * returns the wrapper, or `element` when there is none for it
8926
+ */ function wrapMedia(jodit, element) {
8927
+ const wrapper = createMediaWrapper(jodit, element.nodeName);
8928
+ if (!wrapper) {
8929
+ return element;
8930
+ }
8931
+ if (element.parentNode) {
8932
+ _dom_dom_js__WEBPACK_IMPORTED_MODULE_0__.Dom.before(element, wrapper);
8933
+ }
8934
+ _dom_dom_js__WEBPACK_IMPORTED_MODULE_0__.Dom.append(wrapper, element);
8935
+ return wrapper;
8936
+ }
8937
+
8938
+
8808
8939
  /***/ }),
8809
8940
 
8810
8941
  /***/ 82501:
@@ -10594,6 +10725,12 @@ function findCorrectCurrentNode(node, range, rightMode, isCollapsed, checkChild,
10594
10725
 
10595
10726
 
10596
10727
 
10728
+ /**
10729
+ * A text node that is empty or holds only invisible caret placeholders.
10730
+ */ function isBlankTextNode(node) {
10731
+ var _a;
10732
+ return _dom_dom_js__WEBPACK_IMPORTED_MODULE_2__.Dom.isText(node) && ((_a = node.nodeValue) !== null && _a !== void 0 ? _a : '').replace(_constants_js__WEBPACK_IMPORTED_MODULE_0__.INVISIBLE_SPACE_REG_EXP(), '').length === 0;
10733
+ }
10597
10734
  class Selection {
10598
10735
  /**
10599
10736
  * Short alias for this.jodit
@@ -10825,6 +10962,7 @@ class Selection {
10825
10962
  /**
10826
10963
  * Create marker element
10827
10964
  */ marker(atStart = false, range) {
10965
+ var _a;
10828
10966
  let newRange = null;
10829
10967
  if (range) {
10830
10968
  newRange = range.cloneRange();
@@ -10841,10 +10979,21 @@ class Selection {
10841
10979
  _dom_dom_js__WEBPACK_IMPORTED_MODULE_2__.Dom.append(marker, this.j.createInside.text(_constants_js__WEBPACK_IMPORTED_MODULE_0__.INVISIBLE_SPACE));
10842
10980
  if (newRange) {
10843
10981
  if (_dom_dom_js__WEBPACK_IMPORTED_MODULE_2__.Dom.isOrContains(this.area, atStart ? newRange.startContainer : newRange.endContainer)) {
10844
- // Here need do unsafe inserting
10845
- // Deny Dom.safeInsertNode(newRange, marker);
10846
- // Apply style -> Test Style module -> Base apply -> For selection <p><strong>|test|</strong></p> apply style {"element":"em","style":{"fontStyle":"italic"}}
10847
- newRange.insertNode(marker);
10982
+ const { startContainer: node, startOffset: offset } = newRange;
10983
+ // At either end of a text node the marker goes beside it. Splitting
10984
+ // the node there would leave the selection's boundary in an empty
10985
+ // text node, and WebKit neither repaints a selection that leaves one
10986
+ // nor moves a selection that follows one when it's removed.
10987
+ if (_dom_dom_js__WEBPACK_IMPORTED_MODULE_2__.Dom.isText(node) && offset === 0) {
10988
+ _dom_dom_js__WEBPACK_IMPORTED_MODULE_2__.Dom.before(node, marker);
10989
+ } else if (_dom_dom_js__WEBPACK_IMPORTED_MODULE_2__.Dom.isText(node) && offset === ((_a = node.nodeValue) === null || _a === void 0 ? void 0 : _a.length)) {
10990
+ _dom_dom_js__WEBPACK_IMPORTED_MODULE_2__.Dom.after(node, marker);
10991
+ } else {
10992
+ // Here need do unsafe inserting
10993
+ // Deny Dom.safeInsertNode(newRange, marker);
10994
+ // Apply style -> Test Style module -> Base apply -> For selection <p><strong>|test|</strong></p> apply style {"element":"em","style":{"fontStyle":"italic"}}
10995
+ newRange.insertNode(marker);
10996
+ }
10848
10997
  }
10849
10998
  }
10850
10999
  return marker;
@@ -11172,7 +11321,9 @@ class Selection {
11172
11321
  }
11173
11322
  ].forEach((getChildNode)=>{
11174
11323
  const childNode = getChildNode();
11175
- if (childNode && _dom_dom_js__WEBPACK_IMPORTED_MODULE_2__.Dom.isEmptyTextNode(childNode)) {
11324
+ // Only a text node left with nothing in it by the split
11325
+ // goes; one holding a space is content (`<b>a</b> |`).
11326
+ if (childNode && isBlankTextNode(childNode)) {
11176
11327
  _dom_dom_js__WEBPACK_IMPORTED_MODULE_2__.Dom.safeRemove(childNode);
11177
11328
  }
11178
11329
  });
@@ -11262,9 +11413,9 @@ class Selection {
11262
11413
  if (styles && typeof styles === 'object') {
11263
11414
  (0,_helpers_index_js__WEBPACK_IMPORTED_MODULE_3__.css)(image, styles);
11264
11415
  }
11265
- const { imageDefaultAlign, imageAlignClasses } = this.j.o;
11416
+ const { imageDefaultAlign } = this.j.o;
11266
11417
  if (imageDefaultAlign && imageDefaultAlign !== 'normal') {
11267
- (0,_helpers_utils_align_js__WEBPACK_IMPORTED_MODULE_5__.hAlignElement)(image, imageDefaultAlign, imageAlignClasses);
11418
+ (0,_helpers_utils_align_js__WEBPACK_IMPORTED_MODULE_5__.hAlignElement)(image, imageDefaultAlign, (0,_helpers_utils_align_js__WEBPACK_IMPORTED_MODULE_5__.getAlignClasses)(this.j, image));
11268
11419
  }
11269
11420
  const onload = ()=>{
11270
11421
  if (image.naturalHeight < image.offsetHeight || image.naturalWidth < image.offsetWidth) {
@@ -28011,19 +28162,27 @@ _config_js__WEBPACK_IMPORTED_MODULE_2__.Config.prototype.history = {
28011
28162
  * Update history stack
28012
28163
  */ updateStack(replace = false) {
28013
28164
  const newValue = this.snapshot.make();
28014
- if (!_snapshot_js__WEBPACK_IMPORTED_MODULE_4__.Snapshot.equal(newValue, this.startValue)) {
28015
- const newCommand = new _command_js__WEBPACK_IMPORTED_MODULE_3__.Command(this.startValue, newValue, this, this.updateTick);
28016
- if (replace) {
28017
- const command = this.__stack.current();
28018
- if (command && this.updateTick === command.tick) {
28019
- this.__stack.replace(newCommand);
28020
- }
28021
- } else {
28022
- this.__stack.push(newCommand);
28023
- }
28165
+ if (_snapshot_js__WEBPACK_IMPORTED_MODULE_4__.Snapshot.equal(newValue, this.startValue)) {
28166
+ return;
28167
+ }
28168
+ // Only the selection moved, for example when the selection markers
28169
+ // went in before a switch to the source view. There is nothing to
28170
+ // undo, but the next change has to start from this selection.
28171
+ if (newValue.html === this.startValue.html) {
28024
28172
  this.startValue = newValue;
28025
- this.fireChangeStack();
28173
+ return;
28026
28174
  }
28175
+ const newCommand = new _command_js__WEBPACK_IMPORTED_MODULE_3__.Command(this.startValue, newValue, this, this.updateTick);
28176
+ if (replace) {
28177
+ const command = this.__stack.current();
28178
+ if (command && this.updateTick === command.tick) {
28179
+ this.__stack.replace(newCommand);
28180
+ }
28181
+ } else {
28182
+ this.__stack.push(newCommand);
28183
+ }
28184
+ this.startValue = newValue;
28185
+ this.fireChangeStack();
28027
28186
  }
28028
28187
  fireChangeStack() {
28029
28188
  var _a;
@@ -30265,6 +30424,7 @@ const INPUT_TAGS = new Set([
30265
30424
  'textarea',
30266
30425
  'select'
30267
30426
  ]);
30427
+ const TYPE_AHEAD_TIMEOUT = 1000;
30268
30428
  const FOCUSABLE_SELECTOR = [
30269
30429
  'button:not([disabled])',
30270
30430
  'a[href]',
@@ -30529,11 +30689,56 @@ let ToolbarButton = class ToolbarButton extends _core_ui_button_index_js__WEBPAC
30529
30689
  items[(index + 1) % items.length].focus();
30530
30690
  break;
30531
30691
  default:
30532
- return;
30692
+ if (!this.control.list || !this.__typeAhead(e.key, items, index)) {
30693
+ return;
30694
+ }
30533
30695
  }
30534
30696
  e.preventDefault();
30535
30697
  e.stopPropagation();
30536
30698
  }
30699
+ /**
30700
+ * The mouse opens a dropdown without taking the focus out of the editor.
30701
+ * While a dropdown list is open, typing there searches the list, as in an
30702
+ * open `<select>`, instead of writing into the content
30703
+ */ __onEditorKeyDown(e) {
30704
+ if (!this.openedPopup || !this.control.list || e.altKey || e.ctrlKey || e.metaKey || !this.__typeAhead(e.key, this.__popupFocusables(), -1)) {
30705
+ return;
30706
+ }
30707
+ e.preventDefault();
30708
+ return false;
30709
+ }
30710
+ /**
30711
+ * Typing in a dropdown list focuses the next item whose label starts with
30712
+ * the typed text, whatever their case and accents, and repeating one letter
30713
+ * cycles through the items that start with it, like the WAI-ARIA menu
30714
+ * pattern's type-ahead. The typed text starts again after a pause, or once
30715
+ * the focus has moved on
30716
+ */ __typeAhead(key, items, index) {
30717
+ var _a, _b;
30718
+ const now = Date.now();
30719
+ if (now - this.__typedAt > TYPE_AHEAD_TIMEOUT || items[index] !== this.__typedTo) {
30720
+ this.__typed = '';
30721
+ }
30722
+ if (key.length !== 1 || key === ' ' && !this.__typed) {
30723
+ return false;
30724
+ }
30725
+ this.__typedAt = now;
30726
+ this.__typed += key;
30727
+ this.__typedTo = items[index];
30728
+ const { compare } = new Intl.Collator(undefined, {
30729
+ usage: 'search',
30730
+ sensitivity: 'base'
30731
+ }), typed = this.__typed, cycle = Array.from(typed).every((char)=>compare(char, typed[0]) === 0), prefix = cycle ? typed[0] : typed, start = cycle ? index + 1 : Math.max(index, 0);
30732
+ for(let i = 0; i < items.length; i += 1){
30733
+ const item = items[(start + i) % items.length], label = (_b = (_a = item.textContent) === null || _a === void 0 ? void 0 : _a.trim()) !== null && _b !== void 0 ? _b : '';
30734
+ if (compare(label.slice(0, prefix.length), prefix) === 0) {
30735
+ item.focus();
30736
+ this.__typedTo = item;
30737
+ break;
30738
+ }
30739
+ }
30740
+ return true;
30741
+ }
30537
30742
  /**
30538
30743
  * Visible controls of the opened dropdown that can take the focus
30539
30744
  */ __popupFocusables() {
@@ -30546,12 +30751,16 @@ let ToolbarButton = class ToolbarButton extends _core_ui_button_index_js__WEBPAC
30546
30751
  /**
30547
30752
  * Create an open popup list
30548
30753
  */ __openControlList(control) {
30549
- var _a;
30754
+ var _a, _b, _c, _d, _e;
30550
30755
  const controls = (_a = this.jodit.options.controls) !== null && _a !== void 0 ? _a : {}, getControl = (key)=>(0,_core_ui_helpers_get_control_type_js__WEBPACK_IMPORTED_MODULE_18__.findControlType)(key, controls);
30551
30756
  const list = control.list;
30552
30757
  const menu = this.openPopup();
30553
- const toolbar = (0,_factory_js__WEBPACK_IMPORTED_MODULE_21__.makeCollection)(this.j);
30554
30758
  menu.parentElement = this;
30759
+ const content = (_b = control.popup) === null || _b === void 0 ? void 0 : _b.call(control, this.j, (_e = (_d = (_c = this.toolbar) === null || _c === void 0 ? void 0 : _c.getTarget(this)) !== null && _d !== void 0 ? _d : this.target) !== null && _e !== void 0 ? _e : null, this.__closePopup, this);
30760
+ if (content) {
30761
+ return this.__openMenu(menu, content);
30762
+ }
30763
+ const toolbar = (0,_factory_js__WEBPACK_IMPORTED_MODULE_21__.makeCollection)(this.j);
30555
30764
  toolbar.parentElement = menu;
30556
30765
  toolbar.mode = 'vertical';
30557
30766
  const isListItem = (key)=>(0,_core_helpers_checker_is_plain_object_js__WEBPACK_IMPORTED_MODULE_10__.isPlainObject)(key) && 'title' in key && 'value' in key;
@@ -30602,7 +30811,10 @@ let ToolbarButton = class ToolbarButton extends _core_ui_button_index_js__WEBPAC
30602
30811
  return childControl;
30603
30812
  };
30604
30813
  toolbar.build((0,_core_helpers_checker_is_array_js__WEBPACK_IMPORTED_MODULE_7__.isArray)(list) ? list.map(getButton) : (0,_core_helpers_utils_utils_js__WEBPACK_IMPORTED_MODULE_16__.keys)(list, false).map((key)=>getButton(key, list[key])), this.target);
30605
- menu.setContent(toolbar).open(()=>(0,_core_helpers_size_index_js__WEBPACK_IMPORTED_MODULE_12__.position)(this.container), false, this.j.o.allowTabNavigation ? this.container : undefined);
30814
+ this.__openMenu(menu, toolbar);
30815
+ }
30816
+ __openMenu(menu, content) {
30817
+ menu.setContent(content).open(()=>(0,_core_helpers_size_index_js__WEBPACK_IMPORTED_MODULE_12__.position)(this.container), false, this.j.o.allowTabNavigation ? this.container : undefined);
30606
30818
  this.state.activated = true;
30607
30819
  }
30608
30820
  onOutsideClick(e) {
@@ -30616,7 +30828,7 @@ let ToolbarButton = class ToolbarButton extends _core_ui_button_index_js__WEBPAC
30616
30828
  openPopup() {
30617
30829
  this.__closePopup();
30618
30830
  this.openedPopup = new _core_ui_popup_popup_js__WEBPACK_IMPORTED_MODULE_20__.Popup(this.j, false);
30619
- this.j.e.on(this.ow, 'mousedown touchstart', this.onOutsideClick).on('escape closeAllPopups', this.onOutsideClick).on(this.openedPopup.container, 'keydown', this.__onPopupKeyDown);
30831
+ this.j.e.on(this.ow, 'mousedown touchstart', this.onOutsideClick).on('escape closeAllPopups', this.onOutsideClick).on('keydown', this.__onEditorKeyDown).on(this.openedPopup.container, 'keydown', this.__onPopupKeyDown);
30620
30832
  return this.openedPopup;
30621
30833
  }
30622
30834
  __closePopup() {
@@ -30631,7 +30843,7 @@ let ToolbarButton = class ToolbarButton extends _core_ui_button_index_js__WEBPAC
30631
30843
  // popup while the outer `removeChild` is still running and Chrome
30632
30844
  // throws NotFoundError. See #1458
30633
30845
  this.openedPopup = null;
30634
- this.j.e.off(this.ow, 'mousedown touchstart', this.onOutsideClick).off('escape closeAllPopups', this.onOutsideClick);
30846
+ this.j.e.off(this.ow, 'mousedown touchstart', this.onOutsideClick).off('escape closeAllPopups', this.onOutsideClick).off('keydown', this.__onEditorKeyDown);
30635
30847
  // The keyboard brought the focus into the dropdown: give it back to
30636
30848
  // the button, otherwise it would fall out to the document
30637
30849
  const { activeElement } = this.od, hadFocus = activeElement && _core_dom_dom_js__WEBPACK_IMPORTED_MODULE_6__.Dom.isOrContains(popup.container, activeElement);
@@ -30696,6 +30908,9 @@ let ToolbarButton = class ToolbarButton extends _core_ui_button_index_js__WEBPAC
30696
30908
  currentValue: '',
30697
30909
  hasTrigger: false
30698
30910
  };
30911
+ this.__typed = '';
30912
+ this.__typedAt = 0;
30913
+ this.__typedTo = null;
30699
30914
  this.openedPopup = null;
30700
30915
  const button = this.getElm('button');
30701
30916
  (0,_core_helpers_utils_assert_js__WEBPACK_IMPORTED_MODULE_14__.assert)(button, 'Element button should exists');
@@ -30745,6 +30960,9 @@ __decorate([
30745
30960
  __decorate([
30746
30961
  _core_decorators_autobind_autobind_js__WEBPACK_IMPORTED_MODULE_2__.autobind
30747
30962
  ], ToolbarButton.prototype, "__onPopupKeyDown", null);
30963
+ __decorate([
30964
+ _core_decorators_autobind_autobind_js__WEBPACK_IMPORTED_MODULE_2__.autobind
30965
+ ], ToolbarButton.prototype, "__onEditorKeyDown", null);
30748
30966
  __decorate([
30749
30967
  _core_decorators_autobind_autobind_js__WEBPACK_IMPORTED_MODULE_2__.autobind
30750
30968
  ], ToolbarButton.prototype, "onOutsideClick", null);
@@ -38208,12 +38426,14 @@ _core_global_js__WEBPACK_IMPORTED_MODULE_1__.pluginSystem.add('focus', focus);
38208
38426
  /***/ (function(__unused_webpack_module, __unused_webpack___webpack_exports__, __webpack_require__) {
38209
38427
 
38210
38428
  /* harmony import */ var _core_dom_index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(22732);
38211
- /* harmony import */ var _core_helpers_string_trim_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(49055);
38212
- /* harmony import */ var _core_helpers_utils_css_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(41180);
38213
- /* harmony import */ var _core_ui_icon_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(12153);
38214
- /* harmony import */ var _config_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(6441);
38215
- /* harmony import */ var _icons_font_svg_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(4104);
38216
- /* harmony import */ var _icons_fontsize_svg_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(83709);
38429
+ /* harmony import */ var _core_helpers_checker_is_array_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(68345);
38430
+ /* harmony import */ var _core_helpers_string_trim_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(49055);
38431
+ /* harmony import */ var _core_helpers_utils_css_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(41180);
38432
+ /* harmony import */ var _core_ui_icon_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(12153);
38433
+ /* harmony import */ var _config_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(6441);
38434
+ /* harmony import */ var _icons_font_svg_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(4104);
38435
+ /* harmony import */ var _icons_fontsize_svg_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(83709);
38436
+ /* harmony import */ var _font_picker_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(40222);
38217
38437
  /*!
38218
38438
  * Jodit Editor (https://xdsoft.net/jodit/)
38219
38439
  * Released under MIT see LICENSE.txt in the project root for license information.
@@ -38225,11 +38445,18 @@ _core_global_js__WEBPACK_IMPORTED_MODULE_1__.pluginSystem.add('focus', focus);
38225
38445
 
38226
38446
 
38227
38447
 
38448
+
38449
+
38228
38450
  /**
38229
38451
  * Default font-size points
38230
- */ _config_js__WEBPACK_IMPORTED_MODULE_4__.Config.prototype.defaultFontSizePoints = 'px';
38231
- _core_ui_icon_js__WEBPACK_IMPORTED_MODULE_3__.Icon.set('font', _icons_font_svg_js__WEBPACK_IMPORTED_MODULE_5__["default"]).set('fontsize', _icons_fontsize_svg_js__WEBPACK_IMPORTED_MODULE_6__["default"]);
38232
- _config_js__WEBPACK_IMPORTED_MODULE_4__.Config.prototype.controls.fontsize = {
38452
+ */ _config_js__WEBPACK_IMPORTED_MODULE_5__.Config.prototype.defaultFontSizePoints = 'px';
38453
+ _config_js__WEBPACK_IMPORTED_MODULE_5__.Config.prototype.font = {
38454
+ googleFonts: {
38455
+ url: ''
38456
+ }
38457
+ };
38458
+ _core_ui_icon_js__WEBPACK_IMPORTED_MODULE_4__.Icon.set('font', _icons_font_svg_js__WEBPACK_IMPORTED_MODULE_6__["default"]).set('fontsize', _icons_fontsize_svg_js__WEBPACK_IMPORTED_MODULE_7__["default"]);
38459
+ _config_js__WEBPACK_IMPORTED_MODULE_5__.Config.prototype.controls.fontsize = {
38233
38460
  command: 'fontsize',
38234
38461
  data: {
38235
38462
  cssRule: 'font-size',
@@ -38275,7 +38502,7 @@ _config_js__WEBPACK_IMPORTED_MODULE_4__.Config.prototype.controls.fontsize = {
38275
38502
  }
38276
38503
  const control = button.control;
38277
38504
  const cssKey = ((_a = control.data) === null || _a === void 0 ? void 0 : _a.cssRule) || 'font-size';
38278
- const value = (0,_core_helpers_utils_css_js__WEBPACK_IMPORTED_MODULE_2__.css)(box, cssKey);
38505
+ const value = (0,_core_helpers_utils_css_js__WEBPACK_IMPORTED_MODULE_3__.css)(box, cssKey);
38279
38506
  if (cssKey === 'font-size') {
38280
38507
  const numValue = parseFloat(value.toString());
38281
38508
  if (editor.o.defaultFontSizePoints === 'pt') {
@@ -38307,12 +38534,13 @@ _config_js__WEBPACK_IMPORTED_MODULE_4__.Config.prototype.controls.fontsize = {
38307
38534
  return keySet.has(normalize(value.toString()));
38308
38535
  }
38309
38536
  };
38310
- _config_js__WEBPACK_IMPORTED_MODULE_4__.Config.prototype.controls.font = {
38311
- ..._config_js__WEBPACK_IMPORTED_MODULE_4__.Config.prototype.controls.fontsize,
38537
+ const hadSelection = new WeakSet();
38538
+ _config_js__WEBPACK_IMPORTED_MODULE_5__.Config.prototype.controls.font = {
38539
+ ..._config_js__WEBPACK_IMPORTED_MODULE_5__.Config.prototype.controls.fontsize,
38312
38540
  command: 'fontname',
38313
38541
  textTemplate: (j, value)=>{
38314
38542
  const [first] = value.split(',');
38315
- return (0,_core_helpers_string_trim_js__WEBPACK_IMPORTED_MODULE_1__.trimChars)(first, '"\'');
38543
+ return (0,_core_helpers_string_trim_js__WEBPACK_IMPORTED_MODULE_2__.trimChars)(first, '"\'');
38316
38544
  },
38317
38545
  list: {
38318
38546
  '': 'Default',
@@ -38334,6 +38562,7 @@ _config_js__WEBPACK_IMPORTED_MODULE_4__.Config.prototype.controls.font = {
38334
38562
  } catch (_a) {}
38335
38563
  return `<span data-style="${key}" style="${isAvailable ? `font-family: ${key}!important;` : ''}">${value}</span>`;
38336
38564
  },
38565
+ popup: (editor, current, close, button)=>editor.o.font.googleFonts.url ? new _font_picker_js__WEBPACK_IMPORTED_MODULE_8__.UIFontPicker(editor, button, close) : false,
38337
38566
  data: {
38338
38567
  cssRule: 'font-family',
38339
38568
  normalize: (v)=>{
@@ -38342,19 +38571,19 @@ _config_js__WEBPACK_IMPORTED_MODULE_4__.Config.prototype.controls.font = {
38342
38571
  },
38343
38572
  // When no font is explicitly set, the computed font-family equals the
38344
38573
  // editor's own default (e.g. `-apple-system, …`). Return '' so the
38345
- // button shows the `Default` list entry instead of that raw stack.
38346
- // See #1370
38347
- value: (editor)=>{
38348
- const current = editor.s.current();
38349
- if (!current) {
38350
- return;
38351
- }
38352
- const box = _core_dom_index_js__WEBPACK_IMPORTED_MODULE_0__.Dom.closest(current, _core_dom_index_js__WEBPACK_IMPORTED_MODULE_0__.Dom.isElement, editor.editor);
38353
- if (!box) {
38574
+ // button shows the list's `Default` entry, when it has one, instead of
38575
+ // that raw stack. See #1370
38576
+ value: (editor, button)=>{
38577
+ const current = editor.s.current(), box = current && _core_dom_index_js__WEBPACK_IMPORTED_MODULE_0__.Dom.closest(current, _core_dom_index_js__WEBPACK_IMPORTED_MODULE_0__.Dom.isElement, editor.editor);
38578
+ // Until there is a selection the button shows the editor's own font,
38579
+ // and afterwards the font of the last one
38580
+ if (box) {
38581
+ hadSelection.add(button);
38582
+ } else if (hadSelection.has(button)) {
38354
38583
  return;
38355
38584
  }
38356
- const value = (0,_core_helpers_utils_css_js__WEBPACK_IMPORTED_MODULE_2__.css)(box, 'font-family').toString();
38357
- if (value === (0,_core_helpers_utils_css_js__WEBPACK_IMPORTED_MODULE_2__.css)(editor.editor, 'font-family').toString()) {
38585
+ const value = (0,_core_helpers_utils_css_js__WEBPACK_IMPORTED_MODULE_3__.css)(box || editor.editor, 'font-family').toString(), { list } = button.control;
38586
+ if (value === (0,_core_helpers_utils_css_js__WEBPACK_IMPORTED_MODULE_3__.css)(editor.editor, 'font-family').toString() && ((0,_core_helpers_checker_is_array_js__WEBPACK_IMPORTED_MODULE_1__.isArray)(list) ? list.includes('') : '' in (list !== null && list !== void 0 ? list : {}))) {
38358
38587
  return '';
38359
38588
  }
38360
38589
  return value;
@@ -38363,6 +38592,267 @@ _config_js__WEBPACK_IMPORTED_MODULE_4__.Config.prototype.controls.font = {
38363
38592
  };
38364
38593
 
38365
38594
 
38595
+ /***/ }),
38596
+
38597
+ /***/ 40222:
38598
+ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
38599
+
38600
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
38601
+ /* harmony export */ UIFontPicker: function() { return /* binding */ UIFontPicker; }
38602
+ /* harmony export */ });
38603
+ /* harmony import */ var _core_decorators_component_component_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(87325);
38604
+ /* harmony import */ var _core_decorators_watch_watch_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(37133);
38605
+ /* harmony import */ var _core_dom_dom_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(2748);
38606
+ /* harmony import */ var _core_global_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(580);
38607
+ /* harmony import */ var _core_helpers_checker_is_array_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(68345);
38608
+ /* harmony import */ var _core_helpers_utils_attr_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(29960);
38609
+ /* harmony import */ var _core_helpers_utils_css_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(41180);
38610
+ /* harmony import */ var _core_helpers_utils_utils_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(37790);
38611
+ /* harmony import */ var _core_ui_element_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(48538);
38612
+ /* harmony import */ var _google_fonts_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(41870);
38613
+ /*!
38614
+ * Jodit Editor (https://xdsoft.net/jodit/)
38615
+ * Released under MIT see LICENSE.txt in the project root for license information.
38616
+ * Copyright (c) 2013-2026 Valerii Chupurnov. All rights reserved. https://xdsoft.net
38617
+ */ var __decorate = undefined && undefined.__decorate || function(decorators, target, key, desc) {
38618
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
38619
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
38620
+ 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;
38621
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
38622
+ };
38623
+
38624
+
38625
+
38626
+
38627
+
38628
+
38629
+
38630
+
38631
+
38632
+
38633
+ const HEADINGS = [
38634
+ 'h1',
38635
+ 'h2',
38636
+ 'h3',
38637
+ 'h4',
38638
+ 'h5',
38639
+ 'h6'
38640
+ ];
38641
+ const GENERIC_FAMILIES = new Set([
38642
+ 'serif',
38643
+ 'sans-serif',
38644
+ 'monospace',
38645
+ 'cursive',
38646
+ 'fantasy',
38647
+ 'system-ui',
38648
+ 'ui-serif',
38649
+ 'ui-sans-serif',
38650
+ 'ui-monospace',
38651
+ 'ui-rounded'
38652
+ ]);
38653
+ /**
38654
+ * A family that names a font, not a generic family or a vendor keyword such
38655
+ * as `-apple-system`
38656
+ */ function isFontName(family) {
38657
+ return Boolean(family) && !family.startsWith('-') && !GENERIC_FAMILIES.has(family);
38658
+ }
38659
+ /**
38660
+ * The font family dropdown with Google Fonts. Under their own headings it
38661
+ * lists the fonts the editor's styles give text and headings, the fonts the
38662
+ * content uses, the control's list and the Google Fonts library
38663
+ */ let UIFontPicker = class UIFontPicker extends _core_ui_element_js__WEBPACK_IMPORTED_MODULE_8__.UIElement {
38664
+ className() {
38665
+ return 'UIFontPicker';
38666
+ }
38667
+ __render() {
38668
+ var _a, _b;
38669
+ const { control } = this.__button, { list = {} } = control, listed = (0,_core_helpers_checker_is_array_js__WEBPACK_IMPORTED_MODULE_4__.isArray)(list) ? list.map((key)=>({
38670
+ value: key.toString(),
38671
+ title: key.toString()
38672
+ })) : (0,_core_helpers_utils_utils_js__WEBPACK_IMPORTED_MODULE_7__.keys)(list, false).map((key)=>({
38673
+ value: key,
38674
+ title: list[key].toString()
38675
+ })), google = Array.from(this.__googleFonts.fonts.values(), (font)=>({
38676
+ value: this.__googleFonts.value(font),
38677
+ title: font.family,
38678
+ font
38679
+ })), byFamily = new Map();
38680
+ [
38681
+ ...google,
38682
+ ...listed
38683
+ ].forEach((entry)=>byFamily.set((0,_google_fonts_js__WEBPACK_IMPORTED_MODULE_9__.firstFamily)(entry.value), entry));
38684
+ const theme = new Map(), used = new Map();
38685
+ // The theme's own fonts are listed too, so its body font can be chosen
38686
+ // to take a font off
38687
+ this.__themeFonts().forEach((fontFamily)=>{
38688
+ var _a;
38689
+ const family = (0,_google_fonts_js__WEBPACK_IMPORTED_MODULE_9__.firstFamily)(fontFamily), title = fontFamily.split(',')[0].replace(/["']/g, '').trim(), entry = (_a = byFamily.get(family)) !== null && _a !== void 0 ? _a : isFontName(family) ? {
38690
+ value: fontFamily,
38691
+ title
38692
+ } : undefined;
38693
+ entry && !theme.has(family) && theme.set(family, entry);
38694
+ });
38695
+ this.__usedFonts().forEach((fontFamily)=>{
38696
+ const family = (0,_google_fonts_js__WEBPACK_IMPORTED_MODULE_9__.firstFamily)(fontFamily), entry = byFamily.get(family);
38697
+ entry && !theme.has(family) && used.set(family, entry);
38698
+ });
38699
+ const defaultEntry = listed.find((entry)=>entry.value === ''), current = (0,_google_fonts_js__WEBPACK_IMPORTED_MODULE_9__.firstFamily)((_b = (_a = control.value) === null || _a === void 0 ? void 0 : _a.call(control, this.j, this.__button)) !== null && _b !== void 0 ? _b : '');
38700
+ _core_dom_dom_js__WEBPACK_IMPORTED_MODULE_2__.Dom.detach(this.container);
38701
+ this.__fonts.clear();
38702
+ defaultEntry && this.__append(current, [
38703
+ defaultEntry
38704
+ ]);
38705
+ this.__append(current, [
38706
+ ...theme.values()
38707
+ ], 'Theme fonts');
38708
+ this.__append(current, [
38709
+ ...used.values()
38710
+ ], 'Used fonts');
38711
+ this.__append(current, listed.filter((entry)=>entry !== defaultEntry), 'System fonts');
38712
+ this.__append(current, google, 'Google Fonts');
38713
+ this.__observeGoogleFonts();
38714
+ }
38715
+ /**
38716
+ * The fonts the editor's styles give text and each heading
38717
+ */ __themeFonts() {
38718
+ const { editor } = this.j, fonts = [
38719
+ (0,_core_helpers_utils_css_js__WEBPACK_IMPORTED_MODULE_6__.css)(editor, 'font-family').toString()
38720
+ ];
38721
+ HEADINGS.forEach((tag)=>{
38722
+ const heading = this.j.createInside.element(tag, {
38723
+ style: 'display: none'
38724
+ });
38725
+ _core_dom_dom_js__WEBPACK_IMPORTED_MODULE_2__.Dom.append(editor, heading);
38726
+ fonts.push((0,_core_helpers_utils_css_js__WEBPACK_IMPORTED_MODULE_6__.css)(heading, 'font-family').toString());
38727
+ _core_dom_dom_js__WEBPACK_IMPORTED_MODULE_2__.Dom.safeRemove(heading);
38728
+ });
38729
+ return fonts;
38730
+ }
38731
+ /**
38732
+ * The fonts the content sets
38733
+ */ __usedFonts() {
38734
+ return Array.from(this.j.editor.querySelectorAll('[style*="font-family"]'), (element)=>element.style.fontFamily);
38735
+ }
38736
+ __append(current, entries, heading) {
38737
+ if (!entries.length) {
38738
+ return;
38739
+ }
38740
+ const { control } = this.__button, group = this.j.c.div(this.getFullElName('group'));
38741
+ if (heading) {
38742
+ const title = this.j.c.div(this.getFullElName('heading'), {
38743
+ id: `${this.getFullElName('heading')}-${(0,_core_global_js__WEBPACK_IMPORTED_MODULE_3__.uniqueUid)()}`
38744
+ });
38745
+ title.textContent = this.i18n(heading);
38746
+ (0,_core_helpers_utils_attr_js__WEBPACK_IMPORTED_MODULE_5__.attr)(group, {
38747
+ role: 'group',
38748
+ 'aria-labelledby': title.id
38749
+ });
38750
+ _core_dom_dom_js__WEBPACK_IMPORTED_MODULE_2__.Dom.append(group, title);
38751
+ }
38752
+ entries.forEach((entry)=>{
38753
+ var _a, _b;
38754
+ const item = this.j.c.element('button', {
38755
+ type: 'button',
38756
+ class: this.getFullElName('item'),
38757
+ 'data-value': entry.value,
38758
+ 'aria-pressed': (0,_google_fonts_js__WEBPACK_IMPORTED_MODULE_9__.firstFamily)(entry.value) === current
38759
+ });
38760
+ if (entry.font) {
38761
+ item.textContent = entry.title;
38762
+ this.__fonts.set(item, entry.font);
38763
+ } else {
38764
+ item.innerHTML = (_b = (_a = control.childTemplate) === null || _a === void 0 ? void 0 : _a.call(control, this.j, entry.value, entry.title, this.__button)) !== null && _b !== void 0 ? _b : entry.title;
38765
+ }
38766
+ _core_dom_dom_js__WEBPACK_IMPORTED_MODULE_2__.Dom.append(group, item);
38767
+ });
38768
+ _core_dom_dom_js__WEBPACK_IMPORTED_MODULE_2__.Dom.append(this.container, group);
38769
+ }
38770
+ /**
38771
+ * Shows the names of the Google Fonts in view, and those just below it,
38772
+ * in their own fonts. Setting every item's font up front would have the
38773
+ * browser look for each of the library's families among the installed
38774
+ * fonts the first time the list opens
38775
+ */ __observeGoogleFonts() {
38776
+ this.j.async.requestAnimationFrame(()=>{
38777
+ var _a;
38778
+ (_a = this.__observer) === null || _a === void 0 ? void 0 : _a.disconnect();
38779
+ if (this.isDestructed || !this.__fonts.size) {
38780
+ return;
38781
+ }
38782
+ const observer = new IntersectionObserver((entries)=>{
38783
+ const fonts = [];
38784
+ entries.forEach(({ isIntersecting, target })=>{
38785
+ const font = this.__fonts.get(target);
38786
+ if (isIntersecting && font) {
38787
+ fonts.push(font);
38788
+ (0,_core_helpers_utils_css_js__WEBPACK_IMPORTED_MODULE_6__.css)(target, {
38789
+ fontFamily: this.__googleFonts.value(font)
38790
+ });
38791
+ observer.unobserve(target);
38792
+ }
38793
+ });
38794
+ this.__googleFonts.preview(fonts);
38795
+ }, {
38796
+ root: this.container.parentElement,
38797
+ rootMargin: '0px 0px 400px 0px'
38798
+ });
38799
+ this.__fonts.forEach((_, item)=>observer.observe(item));
38800
+ this.__observer = observer;
38801
+ });
38802
+ }
38803
+ /**
38804
+ * Keeps the editor's selection, as the toolbar buttons do
38805
+ */ onMouseDown(e) {
38806
+ e.preventDefault();
38807
+ }
38808
+ onClick(e) {
38809
+ var _a;
38810
+ const item = _core_dom_dom_js__WEBPACK_IMPORTED_MODULE_2__.Dom.up(e.target, (node)=>_core_dom_dom_js__WEBPACK_IMPORTED_MODULE_2__.Dom.isHTMLElement(node) && node.hasAttribute('data-value'), this.container);
38811
+ if (!item) {
38812
+ return;
38813
+ }
38814
+ const value = (_a = (0,_core_helpers_utils_attr_js__WEBPACK_IMPORTED_MODULE_5__.attr)(item, 'data-value')) !== null && _a !== void 0 ? _a : '', font = this.__googleFonts.find(value), // The font the text has anyway is taken off rather than written
38815
+ inherited = (0,_google_fonts_js__WEBPACK_IMPORTED_MODULE_9__.firstFamily)(value) === (0,_google_fonts_js__WEBPACK_IMPORTED_MODULE_9__.firstFamily)(this.__blockFont());
38816
+ font && !inherited && this.__googleFonts.load(font);
38817
+ this.j.execCommand('fontname', false, inherited ? '' : value);
38818
+ this.__close();
38819
+ }
38820
+ /**
38821
+ * The font the selected text has without a font of its own: its block's
38822
+ */ __blockFont() {
38823
+ const block = _core_dom_dom_js__WEBPACK_IMPORTED_MODULE_2__.Dom.up(this.j.s.current(), _core_dom_dom_js__WEBPACK_IMPORTED_MODULE_2__.Dom.isBlock, this.j.editor);
38824
+ return (0,_core_helpers_utils_css_js__WEBPACK_IMPORTED_MODULE_6__.css)(block !== null && block !== void 0 ? block : this.j.editor, 'font-family').toString();
38825
+ }
38826
+ destruct() {
38827
+ var _a;
38828
+ (_a = this.__observer) === null || _a === void 0 ? void 0 : _a.disconnect();
38829
+ super.destruct();
38830
+ }
38831
+ constructor(jodit, __button, __close){
38832
+ super(jodit);
38833
+ this.__button = __button;
38834
+ this.__close = __close;
38835
+ this.__fonts = new Map();
38836
+ this.__observer = null;
38837
+ this.__googleFonts = jodit.getInstance(_google_fonts_js__WEBPACK_IMPORTED_MODULE_9__.GoogleFonts);
38838
+ this.__render();
38839
+ if (!this.__googleFonts.fonts.size) {
38840
+ this.__googleFonts.ready.then(()=>!this.isDestructed && this.__render());
38841
+ }
38842
+ }
38843
+ };
38844
+ __decorate([
38845
+ (0,_core_decorators_watch_watch_js__WEBPACK_IMPORTED_MODULE_1__.watch)('container:mousedown')
38846
+ ], UIFontPicker.prototype, "onMouseDown", null);
38847
+ __decorate([
38848
+ (0,_core_decorators_watch_watch_js__WEBPACK_IMPORTED_MODULE_1__.watch)('container:click')
38849
+ ], UIFontPicker.prototype, "onClick", null);
38850
+ UIFontPicker = __decorate([
38851
+ _core_decorators_component_component_js__WEBPACK_IMPORTED_MODULE_0__.component
38852
+ ], UIFontPicker);
38853
+
38854
+
38855
+
38366
38856
  /***/ }),
38367
38857
 
38368
38858
  /***/ 23399:
@@ -38372,6 +38862,7 @@ _config_js__WEBPACK_IMPORTED_MODULE_4__.Config.prototype.controls.font = {
38372
38862
  /* harmony import */ var _core_global_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(580);
38373
38863
  /* harmony import */ var _core_helpers_index_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(21537);
38374
38864
  /* harmony import */ var _config_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(28252);
38865
+ /* harmony import */ var _google_fonts_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(41870);
38375
38866
  /*!
38376
38867
  * Jodit Editor (https://xdsoft.net/jodit/)
38377
38868
  * Released under MIT see LICENSE.txt in the project root for license information.
@@ -38379,6 +38870,7 @@ _config_js__WEBPACK_IMPORTED_MODULE_4__.Config.prototype.controls.font = {
38379
38870
  */
38380
38871
 
38381
38872
 
38873
+
38382
38874
  /**
38383
38875
  * Process commands `fontsize` and `fontname`
38384
38876
  */ function font(editor) {
@@ -38389,6 +38881,18 @@ _config_js__WEBPACK_IMPORTED_MODULE_4__.Config.prototype.controls.font = {
38389
38881
  name: 'fontsize',
38390
38882
  group: 'font'
38391
38883
  });
38884
+ if (editor.o.font.googleFonts.url) {
38885
+ const googleFonts = editor.getInstance(_google_fonts_js__WEBPACK_IMPORTED_MODULE_3__.GoogleFonts), loadUsed = editor.async.debounce(()=>googleFonts.loadUsed(), editor.defaultTimeout);
38886
+ googleFonts.ready.then(loadUsed);
38887
+ editor.e.on('afterInit afterSetMode change', loadUsed);
38888
+ }
38889
+ // An iframe's stylesheets can arrive after the toolbar first shows the
38890
+ // editor's font
38891
+ editor.e.on('afterInit', ()=>{
38892
+ editor.iframe && editor.e.on(editor.ed, 'load', ()=>editor.e.fire('updateToolbar'), {
38893
+ capture: true
38894
+ });
38895
+ });
38392
38896
  const callback = (command, second, third)=>{
38393
38897
  switch(command){
38394
38898
  case 'fontsize':
@@ -38418,6 +38922,161 @@ _config_js__WEBPACK_IMPORTED_MODULE_4__.Config.prototype.controls.font = {
38418
38922
  _core_global_js__WEBPACK_IMPORTED_MODULE_0__.pluginSystem.add('font', font);
38419
38923
 
38420
38924
 
38925
+ /***/ }),
38926
+
38927
+ /***/ 41870:
38928
+ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
38929
+
38930
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
38931
+ /* harmony export */ GoogleFonts: function() { return /* binding */ GoogleFonts; },
38932
+ /* harmony export */ firstFamily: function() { return /* binding */ firstFamily; }
38933
+ /* harmony export */ });
38934
+ /* harmony import */ var _core_component_view_component_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(80480);
38935
+ /* harmony import */ var _core_dom_dom_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(2748);
38936
+ /* harmony import */ var _core_request_ajax_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(54079);
38937
+ /*!
38938
+ * Jodit Editor (https://xdsoft.net/jodit/)
38939
+ * Released under MIT see LICENSE.txt in the project root for license information.
38940
+ * Copyright (c) 2013-2026 Valerii Chupurnov. All rights reserved. https://xdsoft.net
38941
+ */
38942
+
38943
+
38944
+ const CSS_URL = 'https://fonts.googleapis.com/css2';
38945
+ // `cursive` and `fantasy` stand in badly for a handwriting or display font
38946
+ const GENERIC_FAMILIES = {
38947
+ serif: 'serif',
38948
+ monospace: 'monospace'
38949
+ };
38950
+ const libraries = new Map();
38951
+ /**
38952
+ * The fonts of the library at `url`, fetched once for every editor on the page
38953
+ */ function library(jodit, url) {
38954
+ let fonts = libraries.get(url);
38955
+ if (!fonts) {
38956
+ const ajax = new _core_request_ajax_js__WEBPACK_IMPORTED_MODULE_2__.Ajax({
38957
+ url,
38958
+ method: 'GET'
38959
+ }, jodit.o.defaultAjaxOptions);
38960
+ fonts = ajax.send().then((response)=>response.json())// A font without a regular style can't be asked for by its name alone
38961
+ .then(({ items })=>items.filter((font)=>font.variants.includes('regular'))).catch(()=>{
38962
+ libraries.delete(url);
38963
+ return [];
38964
+ }).finally(()=>ajax.destruct());
38965
+ libraries.set(url, fonts);
38966
+ }
38967
+ return fonts;
38968
+ }
38969
+ /**
38970
+ * The first family of a `font-family` value, unquoted and in lower case for
38971
+ * comparing
38972
+ */ function firstFamily(fontFamily) {
38973
+ return fontFamily.split(',')[0].replace(/["']/g, '').trim().toLowerCase();
38974
+ }
38975
+ /**
38976
+ * Loads fonts from Google Fonts: the whole of each font the content uses into
38977
+ * the editor's document, and just the letters of its name for the font list
38978
+ */ class GoogleFonts extends _core_component_view_component_js__WEBPACK_IMPORTED_MODULE_0__.ViewComponent {
38979
+ className() {
38980
+ return 'GoogleFonts';
38981
+ }
38982
+ /**
38983
+ * The library's font named first in a `font-family` value
38984
+ */ find(fontFamily) {
38985
+ return this.fonts.get(firstFamily(fontFamily));
38986
+ }
38987
+ /**
38988
+ * The `font-family` value that applies a font
38989
+ */ value(font) {
38990
+ var _a;
38991
+ return `'${font.family}', ${(_a = GENERIC_FAMILIES[font.category]) !== null && _a !== void 0 ? _a : 'sans-serif'}`;
38992
+ }
38993
+ /**
38994
+ * Loads the regular, italic, bold and bold italic styles that a font has
38995
+ * into the editor's document
38996
+ */ load(font) {
38997
+ const loaded = this.__loadedInto(this.j.ed);
38998
+ if (loaded.has(font.family)) {
38999
+ return;
39000
+ }
39001
+ loaded.add(font.family);
39002
+ const styles = [
39003
+ [
39004
+ 'regular',
39005
+ '0,400'
39006
+ ],
39007
+ [
39008
+ '700',
39009
+ '0,700'
39010
+ ],
39011
+ [
39012
+ 'italic',
39013
+ '1,400'
39014
+ ],
39015
+ [
39016
+ '700italic',
39017
+ '1,700'
39018
+ ]
39019
+ ].filter(([variant])=>font.variants.includes(variant)).map(([, style])=>style);
39020
+ this.__append(this.j.ed, `family=${this.__family(font)}:ital,wght@${styles.join(';')}`);
39021
+ }
39022
+ /**
39023
+ * Loads every font of the library that the content uses
39024
+ */ loadUsed() {
39025
+ this.j.editor.querySelectorAll('[style*="font-family"]').forEach((element)=>{
39026
+ const font = this.find(element.style.fontFamily);
39027
+ font && this.load(font);
39028
+ });
39029
+ }
39030
+ /**
39031
+ * Loads into the page just the letters of each font's name, so the font
39032
+ * list can show the name in its font
39033
+ */ preview(fonts) {
39034
+ const loaded = this.__loadedInto(this.j.od);
39035
+ fonts = fonts.filter((font)=>!this.__previewed.has(font.family) && !loaded.has(font.family));
39036
+ if (!fonts.length) {
39037
+ return;
39038
+ }
39039
+ fonts.forEach((font)=>this.__previewed.add(font.family));
39040
+ const families = fonts.map((font)=>`family=${this.__family(font)}`), letters = new Set(fonts.map((font)=>font.family).join(''));
39041
+ this.__append(this.j.od, `${families.join('&')}&text=${encodeURIComponent([
39042
+ ...letters
39043
+ ].join(''))}`);
39044
+ }
39045
+ __loadedInto(doc) {
39046
+ var _a;
39047
+ const loaded = (_a = this.__loaded.get(doc)) !== null && _a !== void 0 ? _a : new Set();
39048
+ this.__loaded.set(doc, loaded);
39049
+ return loaded;
39050
+ }
39051
+ __family(font) {
39052
+ return encodeURIComponent(font.family).replace(/%20/g, '+');
39053
+ }
39054
+ __append(doc, query) {
39055
+ const link = doc.createElement('link');
39056
+ link.rel = 'stylesheet';
39057
+ link.href = `${CSS_URL}?${query}&display=swap`;
39058
+ doc.head.appendChild(link);
39059
+ this.__links.push(link);
39060
+ }
39061
+ destruct() {
39062
+ this.__links.forEach((link)=>_core_dom_dom_js__WEBPACK_IMPORTED_MODULE_1__.Dom.safeRemove(link));
39063
+ super.destruct();
39064
+ }
39065
+ constructor(jodit){
39066
+ super(jodit);
39067
+ /**
39068
+ * The library by lower-case family, empty until it arrives
39069
+ */ this.fonts = new Map();
39070
+ this.__links = [];
39071
+ this.__loaded = new WeakMap();
39072
+ this.__previewed = new Set();
39073
+ this.ready = library(jodit, jodit.o.font.googleFonts.url).then((fonts)=>{
39074
+ fonts.forEach((font)=>this.fonts.set(font.family.toLowerCase(), font));
39075
+ });
39076
+ }
39077
+ }
39078
+
39079
+
38421
39080
  /***/ }),
38422
39081
 
38423
39082
  /***/ 4104:
@@ -39673,12 +40332,13 @@ _core_global_js__WEBPACK_IMPORTED_MODULE_2__.pluginSystem.add('imageProperties',
39673
40332
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
39674
40333
  /* harmony export */ readValuesFromImage: function() { return /* binding */ readValuesFromImage; }
39675
40334
  /* harmony export */ });
39676
- /* harmony import */ var _core_helpers_utils_attr_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(29960);
39677
- /* harmony import */ var _core_helpers_utils_css_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(41180);
39678
- /* harmony import */ var _align_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(51642);
39679
- /* harmony import */ var _link_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(75595);
39680
- /* harmony import */ var _margin_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(47749);
39681
- /* harmony import */ var _size_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(32566);
40335
+ /* harmony import */ var _core_helpers_utils_align_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(25726);
40336
+ /* harmony import */ var _core_helpers_utils_attr_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(29960);
40337
+ /* harmony import */ var _core_helpers_utils_css_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(41180);
40338
+ /* harmony import */ var _align_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(51642);
40339
+ /* harmony import */ var _link_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(75595);
40340
+ /* harmony import */ var _margin_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(47749);
40341
+ /* harmony import */ var _size_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(32566);
39682
40342
  /*!
39683
40343
  * Jodit Editor (https://xdsoft.net/jodit/)
39684
40344
  * Released under MIT see LICENSE.txt in the project root for license information.
@@ -39689,32 +40349,33 @@ _core_global_js__WEBPACK_IMPORTED_MODULE_2__.pluginSystem.add('imageProperties',
39689
40349
 
39690
40350
 
39691
40351
 
40352
+
39692
40353
  /**
39693
40354
  * Read values from image and set it to state
39694
40355
  * @private
39695
40356
  */ async function readValuesFromImage(j, state) {
39696
40357
  const { sourceImage: image, values } = state;
39697
- (0,_align_js__WEBPACK_IMPORTED_MODULE_2__.readAlign)(image, values, j.o.imageAlignClasses);
40358
+ (0,_align_js__WEBPACK_IMPORTED_MODULE_3__.readAlign)(image, values, (0,_core_helpers_utils_align_js__WEBPACK_IMPORTED_MODULE_0__.getAlignClasses)(j, image));
39698
40359
  // Border radius
39699
- values.borderRadius = parseInt((0,_core_helpers_utils_css_js__WEBPACK_IMPORTED_MODULE_1__.cssInline)(image, 'border-radius') || '0', 10) || 0;
40360
+ values.borderRadius = parseInt((0,_core_helpers_utils_css_js__WEBPACK_IMPORTED_MODULE_2__.cssInline)(image, 'border-radius') || '0', 10) || 0;
39700
40361
  // Id
39701
- values.id = (0,_core_helpers_utils_attr_js__WEBPACK_IMPORTED_MODULE_0__.attr)(image, 'id') || '';
40362
+ values.id = (0,_core_helpers_utils_attr_js__WEBPACK_IMPORTED_MODULE_1__.attr)(image, 'id') || '';
39702
40363
  // Title
39703
- values.imageTitle = (0,_core_helpers_utils_attr_js__WEBPACK_IMPORTED_MODULE_0__.attr)(image, 'title') || '';
40364
+ values.imageTitle = (0,_core_helpers_utils_attr_js__WEBPACK_IMPORTED_MODULE_1__.attr)(image, 'title') || '';
39704
40365
  // Alt
39705
- values.imageAlt = (0,_core_helpers_utils_attr_js__WEBPACK_IMPORTED_MODULE_0__.attr)(image, 'alt') || '';
40366
+ values.imageAlt = (0,_core_helpers_utils_attr_js__WEBPACK_IMPORTED_MODULE_1__.attr)(image, 'alt') || '';
39706
40367
  // Style
39707
- values.style = (0,_core_helpers_utils_attr_js__WEBPACK_IMPORTED_MODULE_0__.attr)(image, 'style') || '';
40368
+ values.style = (0,_core_helpers_utils_attr_js__WEBPACK_IMPORTED_MODULE_1__.attr)(image, 'style') || '';
39708
40369
  // Classes
39709
- values.classes = ((0,_core_helpers_utils_attr_js__WEBPACK_IMPORTED_MODULE_0__.attr)(image, 'class') || '').replace(/jodit_focused_image[\s]*/, '');
40370
+ values.classes = ((0,_core_helpers_utils_attr_js__WEBPACK_IMPORTED_MODULE_1__.attr)(image, 'class') || '').replace(/jodit_focused_image[\s]*/, '');
39710
40371
  // Margins
39711
- (0,_margin_js__WEBPACK_IMPORTED_MODULE_4__.readMargins)(image, values, state);
40372
+ (0,_margin_js__WEBPACK_IMPORTED_MODULE_5__.readMargins)(image, values, state);
39712
40373
  // Link
39713
- (0,_link_js__WEBPACK_IMPORTED_MODULE_3__.readLink)(state, j, values);
40374
+ (0,_link_js__WEBPACK_IMPORTED_MODULE_4__.readLink)(state, j, values);
39714
40375
  // Src
39715
- values.imageSrc = (0,_core_helpers_utils_attr_js__WEBPACK_IMPORTED_MODULE_0__.attr)(image, 'src') || '';
40376
+ values.imageSrc = (0,_core_helpers_utils_attr_js__WEBPACK_IMPORTED_MODULE_1__.attr)(image, 'src') || '';
39716
40377
  // Image size
39717
- return (0,_size_js__WEBPACK_IMPORTED_MODULE_5__.readSizes)(image, values, state);
40378
+ return (0,_size_js__WEBPACK_IMPORTED_MODULE_6__.readSizes)(image, values, state);
39718
40379
  }
39719
40380
 
39720
40381
 
@@ -40727,7 +41388,7 @@ UIImagePositionTab = __decorate([
40727
41388
  (0,_core_helpers_utils_index_js__WEBPACK_IMPORTED_MODULE_1__.attr)(image, 'id', id || null);
40728
41389
  }
40729
41390
  if (opt.image.editAlign) {
40730
- (0,_core_helpers_utils_index_js__WEBPACK_IMPORTED_MODULE_1__.hAlignElement)(image, align, j.o.imageAlignClasses);
41391
+ (0,_core_helpers_utils_index_js__WEBPACK_IMPORTED_MODULE_1__.hAlignElement)(image, align, (0,_core_helpers_utils_index_js__WEBPACK_IMPORTED_MODULE_1__.getAlignClasses)(j, image));
40731
41392
  }
40732
41393
  }
40733
41394
 
@@ -41457,6 +42118,7 @@ const cmd = (control)=>control.args && (0,_core_helpers_checker_index_js__WEBPAC
41457
42118
  /* harmony import */ var _core_helpers_checker_is_string_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(70799);
41458
42119
  /* harmony import */ var _core_helpers_utils_align_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(25726);
41459
42120
  /* harmony import */ var _core_helpers_utils_css_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(41180);
42121
+ /* harmony import */ var _core_helpers_utils_media_wrapper_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(61477);
41460
42122
  /*!
41461
42123
  * Jodit Editor (https://xdsoft.net/jodit/)
41462
42124
  * Released under MIT see LICENSE.txt in the project root for license information.
@@ -41465,9 +42127,7 @@ const cmd = (control)=>control.args && (0,_core_helpers_checker_index_js__WEBPAC
41465
42127
 
41466
42128
 
41467
42129
 
41468
- // Images align with `imageAlignClasses`; the wrappers of iframes and media
41469
- // keep inline styles
41470
- const alignClasses = (editor, elm)=>_core_dom_index_js__WEBPACK_IMPORTED_MODULE_0__.Dom.isTag(elm, 'img') ? editor.o.imageAlignClasses : null;
42130
+
41471
42131
  // A Normal image sits where the text of its line is aligned (#1531)
41472
42132
  const lineAlign = (editor, elm)=>{
41473
42133
  const block = elm && _core_dom_index_js__WEBPACK_IMPORTED_MODULE_0__.Dom.closest(elm, _core_dom_index_js__WEBPACK_IMPORTED_MODULE_0__.Dom.isBlock, editor.editor) || editor.editor;
@@ -41488,7 +42148,7 @@ const lineAlign = (editor, elm)=>{
41488
42148
  return 'left';
41489
42149
  }
41490
42150
  };
41491
- const currentAlign = (editor, elm)=>elm ? (0,_core_helpers_utils_align_js__WEBPACK_IMPORTED_MODULE_2__.getHAlign)(elm, alignClasses(editor, elm)) : 'normal';
42151
+ const currentAlign = (editor, elm)=>elm ? (0,_core_helpers_utils_align_js__WEBPACK_IMPORTED_MODULE_2__.getHAlign)(elm, (0,_core_helpers_utils_align_js__WEBPACK_IMPORTED_MODULE_2__.getAlignClasses)(editor, elm)) : 'normal';
41492
42152
  const align = {
41493
42153
  name: 'left',
41494
42154
  childTemplate: (_, __, value)=>value,
@@ -41509,23 +42169,25 @@ const align = {
41509
42169
  return (0,_core_helpers_checker_is_string_js__WEBPACK_IMPORTED_MODULE_1__.isString)(value) && currentAlign(editor, button.target) === value.toLowerCase();
41510
42170
  },
41511
42171
  exec: (editor, elm, { control })=>{
41512
- if (!_core_dom_index_js__WEBPACK_IMPORTED_MODULE_0__.Dom.isTag(elm, new Set([
42172
+ // A media wrapper kept in the content (`mediaWrappers`) is aligned itself
42173
+ if (!_core_dom_index_js__WEBPACK_IMPORTED_MODULE_0__.Dom.isHTMLElement(elm) || !_core_dom_index_js__WEBPACK_IMPORTED_MODULE_0__.Dom.isTag(elm, new Set([
41513
42174
  'img',
41514
42175
  'jodit',
41515
42176
  'jodit-media'
41516
- ]))) {
42177
+ ])) && (0,_core_helpers_utils_media_wrapper_js__WEBPACK_IMPORTED_MODULE_4__.getMediaWrapper)(editor, elm) !== elm) {
41517
42178
  return;
41518
42179
  }
41519
42180
  const command = control.args && (0,_core_helpers_checker_is_string_js__WEBPACK_IMPORTED_MODULE_1__.isString)(control.args[0]) ? control.args[0].toLowerCase() : '';
41520
42181
  if (!command) {
41521
42182
  return false;
41522
42183
  }
41523
- ;(0,_core_helpers_utils_align_js__WEBPACK_IMPORTED_MODULE_2__.hAlignElement)(elm, command, alignClasses(editor, elm));
42184
+ ;(0,_core_helpers_utils_align_js__WEBPACK_IMPORTED_MODULE_2__.hAlignElement)(elm, command, (0,_core_helpers_utils_align_js__WEBPACK_IMPORTED_MODULE_2__.getAlignClasses)(editor, elm));
41524
42185
  if (_core_dom_index_js__WEBPACK_IMPORTED_MODULE_0__.Dom.isTag(elm, new Set([
41525
42186
  'jodit',
41526
42187
  'jodit-media'
41527
42188
  ])) && elm.firstElementChild) {
41528
- (0,_core_helpers_utils_align_js__WEBPACK_IMPORTED_MODULE_2__.hAlignElement)(elm.firstElementChild, command);
42189
+ const media = elm.firstElementChild;
42190
+ (0,_core_helpers_utils_align_js__WEBPACK_IMPORTED_MODULE_2__.hAlignElement)(media, command, (0,_core_helpers_utils_align_js__WEBPACK_IMPORTED_MODULE_2__.getAlignClasses)(editor, media));
41529
42191
  }
41530
42192
  editor.synchronizeValues();
41531
42193
  editor.e.fire('recalcPositionPopup');
@@ -41728,9 +42390,11 @@ const align = {
41728
42390
  return (0,_modules_toolbar_factory_js__WEBPACK_IMPORTED_MODULE_7__.makeCollection)(this.jodit, this.popup);
41729
42391
  }
41730
42392
  onClick(node) {
41731
- const elements = this.elmsList, target = _core_dom_index_js__WEBPACK_IMPORTED_MODULE_1__.Dom.isTag(node, 'img') ? node : _core_dom_index_js__WEBPACK_IMPORTED_MODULE_1__.Dom.closest(node, elements, this.j.editor);
41732
- if (target && this.canShowPopupForType(target.nodeName.toLowerCase())) {
41733
- this.showPopup(()=>(0,_core_helpers_index_js__WEBPACK_IMPORTED_MODULE_3__.position)(target, this.j), target.nodeName.toLowerCase(), target);
42393
+ const elements = this.elmsList, mediaWrapper = (0,_core_helpers_index_js__WEBPACK_IMPORTED_MODULE_3__.getMediaWrapper)(this.j, node), target = mediaWrapper !== null && mediaWrapper !== void 0 ? mediaWrapper : _core_dom_index_js__WEBPACK_IMPORTED_MODULE_1__.Dom.isTag(node, 'img') ? node : _core_dom_index_js__WEBPACK_IMPORTED_MODULE_1__.Dom.closest(node, elements, this.j.editor);
42394
+ // A media wrapper kept in the content gets the media popup
42395
+ const type = mediaWrapper ? 'jodit-media' : target === null || target === void 0 ? void 0 : target.nodeName.toLowerCase();
42396
+ if (target && type && this.canShowPopupForType(type)) {
42397
+ this.showPopup(()=>(0,_core_helpers_index_js__WEBPACK_IMPORTED_MODULE_3__.position)(target, this.j), type, target);
41734
42398
  return false;
41735
42399
  }
41736
42400
  }
@@ -41913,7 +42577,12 @@ const align = {
41913
42577
  this.removeListenersForElements();
41914
42578
  }
41915
42579
  _eventsList() {
41916
- const el = this.elmsList;
42580
+ var _a;
42581
+ // Clicks on a media wrapper kept in the content (`mediaWrappers`)
42582
+ const wrapperTags = Object.values((_a = this.j.o.mediaWrappers) !== null && _a !== void 0 ? _a : {}).map(({ tag })=>tag.toLowerCase());
42583
+ const el = [
42584
+ ...new Set(this.elmsList.concat(wrapperTags))
42585
+ ];
41917
42586
  return el.map((e)=>(0,_core_helpers_index_js__WEBPACK_IMPORTED_MODULE_3__.camelCase)(`click_${e}`)).concat(el.map((e)=>(0,_core_helpers_index_js__WEBPACK_IMPORTED_MODULE_3__.camelCase)(`touchstart_${e}`))).join(' ');
41918
42587
  }
41919
42588
  addListenersForElements() {
@@ -42857,7 +43526,7 @@ class lineHeight extends _core_plugin_index_js__WEBPACK_IMPORTED_MODULE_4__.Plug
42857
43526
  try {
42858
43527
  if (s.isCollapsed()) {
42859
43528
  const fake = c.fake();
42860
- s.insertNode(fake, false, false);
43529
+ _core_dom_dom_js__WEBPACK_IMPORTED_MODULE_1__.Dom.safeInsertNode(s.range, fake);
42861
43530
  apply(fake);
42862
43531
  _core_dom_dom_js__WEBPACK_IMPORTED_MODULE_1__.Dom.safeRemove(fake);
42863
43532
  } else {
@@ -43477,8 +44146,6 @@ const formTemplate = (editor)=>{
43477
44146
  * Jodit Editor (https://xdsoft.net/jodit/)
43478
44147
  * Released under MIT see LICENSE.txt in the project root for license information.
43479
44148
  * Copyright (c) 2013-2026 Valerii Chupurnov. All rights reserved. https://xdsoft.net
43480
- */ /**
43481
- * @module plugins/media
43482
44149
  */
43483
44150
  _config_js__WEBPACK_IMPORTED_MODULE_0__.Config.prototype.mediaFakeTag = 'jodit-media';
43484
44151
  _config_js__WEBPACK_IMPORTED_MODULE_0__.Config.prototype.mediaInFakeBlock = true;
@@ -43486,6 +44153,7 @@ _config_js__WEBPACK_IMPORTED_MODULE_0__.Config.prototype.mediaBlocks = [
43486
44153
  'video',
43487
44154
  'audio'
43488
44155
  ];
44156
+ _config_js__WEBPACK_IMPORTED_MODULE_0__.Config.prototype.mediaWrappers = {};
43489
44157
 
43490
44158
 
43491
44159
  /***/ }),
@@ -43514,11 +44182,14 @@ _config_js__WEBPACK_IMPORTED_MODULE_0__.Config.prototype.mediaBlocks = [
43514
44182
  * Process `video` and `audio`
43515
44183
  */ function media(editor) {
43516
44184
  const keyFake = 'jodit_fake_wrapper';
43517
- const { mediaFakeTag, mediaBlocks, mediaInFakeBlock } = editor.options;
44185
+ const { mediaFakeTag, mediaBlocks, mediaInFakeBlock, mediaWrappers } = editor.options;
43518
44186
  const wrap = (element)=>{
44187
+ var _a;
43519
44188
  if (element.parentNode && (0,_core_helpers_utils_index_js__WEBPACK_IMPORTED_MODULE_3__.attr)(element.parentNode, 'data-jodit_iframe_wrapper')) {
43520
44189
  element = element.parentNode;
43521
- } else {
44190
+ } else if (mediaWrappers[element.nodeName.toLowerCase()]) {
44191
+ element = (_a = (0,_core_helpers_utils_index_js__WEBPACK_IMPORTED_MODULE_3__.getMediaWrapper)(editor, element)) !== null && _a !== void 0 ? _a : (0,_core_helpers_utils_index_js__WEBPACK_IMPORTED_MODULE_3__.wrapMedia)(editor, element);
44192
+ } else if (mediaInFakeBlock) {
43522
44193
  const wrapper = editor.createInside.element(mediaFakeTag, {
43523
44194
  'data-jodit-temp': 1,
43524
44195
  contenteditable: false,
@@ -43536,12 +44207,14 @@ _config_js__WEBPACK_IMPORTED_MODULE_0__.Config.prototype.mediaBlocks = [
43536
44207
  }
43537
44208
  _core_dom_dom_js__WEBPACK_IMPORTED_MODULE_1__.Dom.append(wrapper, element);
43538
44209
  element = wrapper;
44210
+ } else {
44211
+ return;
43539
44212
  }
43540
44213
  editor.e.off(element, 'mousedown.select touchstart.select').on(element, 'mousedown.select touchstart.select', ()=>{
43541
44214
  editor.s.setCursorAfter(element);
43542
44215
  });
43543
44216
  };
43544
- if (mediaInFakeBlock) {
44217
+ if (mediaInFakeBlock || Object.keys(mediaWrappers).length) {
43545
44218
  editor.e.on('afterGetValueFromEditor', (data)=>{
43546
44219
  const rxp = new RegExp(`<${mediaFakeTag}[^>]+data-${keyFake}[^>]+>([^]+?)</${mediaFakeTag}>`, 'ig');
43547
44220
  if (rxp.test(data.value)) {
@@ -44891,7 +45564,7 @@ _config_js__WEBPACK_IMPORTED_MODULE_0__.Config.prototype.useInputsPlaceholder =
44891
45564
  this.placeholderElm.innerHTML = (0,_core_helpers_utils_attr_js__WEBPACK_IMPORTED_MODULE_5__.attr)(editor.element, 'placeholder') || '';
44892
45565
  }
44893
45566
  editor.e.fire('placeholder', this.placeholderElm.innerHTML);
44894
- editor.e.off('.placeholder').on('changePlace.placeholder', this.addNativeListeners).on('change.placeholder focus.placeholder keyup.placeholder mouseup.placeholder keydown.placeholder ' + 'mousedown.placeholder afterSetMode.placeholder changePlace.placeholder ' + 'internalChange.placeholder', this.toggle).on(window, 'load', this.toggle);
45567
+ editor.e.off('.placeholder').on('changePlace.placeholder', this.addNativeListeners).on('change.placeholder focus.placeholder keyup.placeholder mouseup.placeholder keydown.placeholder ' + 'mousedown.placeholder afterSetMode.placeholder changePlace.placeholder ' + 'internalChange.placeholder afterCommand.placeholder', this.toggle).on(window, 'load', this.toggle);
44895
45568
  this.addNativeListeners();
44896
45569
  this.toggle();
44897
45570
  };
@@ -48042,18 +48715,26 @@ _config_js__WEBPACK_IMPORTED_MODULE_2__.Config.prototype.controls.source = {
48042
48715
  /* harmony export */ AceEditor: function() { return /* binding */ AceEditor; }
48043
48716
  /* harmony export */ });
48044
48717
  /* harmony import */ var _core_constants_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(82758);
48045
- /* harmony import */ var _core_dom_dom_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(2748);
48046
- /* harmony import */ var _core_helpers_index_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(21537);
48047
- /* harmony import */ var _sourceEditor_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(23370);
48718
+ /* harmony import */ var _core_decorators_autobind_autobind_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(45219);
48719
+ /* harmony import */ var _core_dom_dom_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(2748);
48720
+ /* harmony import */ var _core_helpers_index_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(21537);
48721
+ /* harmony import */ var _sourceEditor_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(23370);
48048
48722
  /*!
48049
48723
  * Jodit Editor (https://xdsoft.net/jodit/)
48050
48724
  * Released under MIT see LICENSE.txt in the project root for license information.
48051
48725
  * Copyright (c) 2013-2026 Valerii Chupurnov. All rights reserved. https://xdsoft.net
48052
- */
48726
+ */ var __decorate = undefined && undefined.__decorate || function(decorators, target, key, desc) {
48727
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
48728
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
48729
+ 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;
48730
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
48731
+ };
48732
+
48733
+
48053
48734
 
48054
48735
 
48055
48736
 
48056
- class AceEditor extends _sourceEditor_js__WEBPACK_IMPORTED_MODULE_3__.SourceEditor {
48737
+ class AceEditor extends _sourceEditor_js__WEBPACK_IMPORTED_MODULE_4__.SourceEditor {
48057
48738
  aceExists() {
48058
48739
  return this.j.ow.ace !== undefined;
48059
48740
  }
@@ -48111,7 +48792,7 @@ class AceEditor extends _sourceEditor_js__WEBPACK_IMPORTED_MODULE_3__.SourceEdit
48111
48792
  return;
48112
48793
  }
48113
48794
  const fakeMirror = this.j.c.div('jodit-source__mirror-fake');
48114
- _core_dom_dom_js__WEBPACK_IMPORTED_MODULE_1__.Dom.append(this.container, fakeMirror);
48795
+ _core_dom_dom_js__WEBPACK_IMPORTED_MODULE_2__.Dom.append(this.container, fakeMirror);
48115
48796
  const ace = editor.ow.ace;
48116
48797
  this.instance = ace.edit(fakeMirror);
48117
48798
  if (editor.o.direction === 'rtl') {
@@ -48132,7 +48813,7 @@ class AceEditor extends _sourceEditor_js__WEBPACK_IMPORTED_MODULE_3__.SourceEdit
48132
48813
  this.instance.setOption('wrap', editor.o.sourceEditorNativeOptions.wrap);
48133
48814
  this.instance.getSession().setUseWorker(false);
48134
48815
  this.instance.$blockScrolling = Infinity;
48135
- this.instance.on('change', this.toWYSIWYG);
48816
+ this.instance.on('change', this.__onChange);
48136
48817
  this.instance.on('focus', this.proxyOnFocus);
48137
48818
  this.instance.on('mousedown', this.proxyOnMouseDown);
48138
48819
  this.instance.on('blur', this.proxyOnBlur);
@@ -48167,7 +48848,7 @@ class AceEditor extends _sourceEditor_js__WEBPACK_IMPORTED_MODULE_3__.SourceEdit
48167
48848
  if (!this.aceExists()) {
48168
48849
  if (!loading) {
48169
48850
  loading = true;
48170
- (0,_core_helpers_index_js__WEBPACK_IMPORTED_MODULE_2__.loadNext)(editor, editor.o.sourceEditorCDNUrlsJS).then(initAceEditor).catch(()=>null);
48851
+ (0,_core_helpers_index_js__WEBPACK_IMPORTED_MODULE_3__.loadNext)(editor, editor.o.sourceEditorCDNUrlsJS).then(initAceEditor).catch(()=>null);
48171
48852
  }
48172
48853
  return;
48173
48854
  }
@@ -48180,7 +48861,7 @@ class AceEditor extends _sourceEditor_js__WEBPACK_IMPORTED_MODULE_3__.SourceEdit
48180
48861
  }
48181
48862
  destruct() {
48182
48863
  var _a, _b;
48183
- this.instance.off('change', this.toWYSIWYG);
48864
+ this.instance.off('change', this.__onChange);
48184
48865
  this.instance.off('focus', this.proxyOnFocus);
48185
48866
  this.instance.off('mousedown', this.proxyOnMouseDown);
48186
48867
  this.instance.destroy();
@@ -48189,13 +48870,29 @@ class AceEditor extends _sourceEditor_js__WEBPACK_IMPORTED_MODULE_3__.SourceEdit
48189
48870
  setValue(value) {
48190
48871
  if (!this.j.o.editHTMLDocumentMode && this.j.o.beautifyHTML) {
48191
48872
  const html = this.j.e.fire('beautifyHTML', value);
48192
- if ((0,_core_helpers_index_js__WEBPACK_IMPORTED_MODULE_2__.isString)(html)) {
48873
+ if ((0,_core_helpers_index_js__WEBPACK_IMPORTED_MODULE_3__.isString)(html)) {
48193
48874
  value = html;
48194
48875
  }
48195
48876
  }
48196
- this.instance.setValue(value);
48877
+ // ACE reports its own `setValue` as two changes, the removal of the
48878
+ // old text and the insertion of the new one. Fed back into the
48879
+ // editor they became two history entries, `content -> ''` and
48880
+ // `'' -> content`, so the first undo after a switch to the source
48881
+ // view and back emptied the editor. The text came from the editor
48882
+ // in the first place, so there is nothing to send back.
48883
+ this.__settingValue = true;
48884
+ try {
48885
+ this.instance.setValue(value);
48886
+ } finally{
48887
+ this.__settingValue = false;
48888
+ }
48197
48889
  this.instance.clearSelection();
48198
48890
  }
48891
+ __onChange() {
48892
+ if (!this.__settingValue) {
48893
+ this.toWYSIWYG();
48894
+ }
48895
+ }
48199
48896
  getValue() {
48200
48897
  return this.instance.getValue();
48201
48898
  }
@@ -48274,8 +48971,12 @@ class AceEditor extends _sourceEditor_js__WEBPACK_IMPORTED_MODULE_3__.SourceEdit
48274
48971
  this.proxyOnMouseDown = (e)=>{
48275
48972
  this.j.e.fire('mousedown', e);
48276
48973
  };
48974
+ this.__settingValue = false;
48277
48975
  }
48278
48976
  }
48977
+ __decorate([
48978
+ _core_decorators_autobind_autobind_js__WEBPACK_IMPORTED_MODULE_1__.autobind
48979
+ ], AceEditor.prototype, "__onChange", null);
48279
48980
 
48280
48981
 
48281
48982
  /***/ }),
@@ -52352,15 +53053,33 @@ _core_global_js__WEBPACK_IMPORTED_MODULE_4__.pluginSystem.add('toolbarNavigation
52352
53053
 
52353
53054
 
52354
53055
 
53056
+ // Media the popup inserts go in their wrapper (see `mediaWrappers`), aligned
53057
+ // with `mediaDefaultAlign`
53058
+ function prepareMedia(jodit, element) {
53059
+ const media = (0,_core_helpers_index_js__WEBPACK_IMPORTED_MODULE_0__.wrapMedia)(jodit, element);
53060
+ const { mediaDefaultAlign } = jodit.o;
53061
+ if (mediaDefaultAlign && mediaDefaultAlign !== 'normal') {
53062
+ (0,_core_helpers_index_js__WEBPACK_IMPORTED_MODULE_0__.hAlignElement)(media, mediaDefaultAlign, (0,_core_helpers_index_js__WEBPACK_IMPORTED_MODULE_0__.getAlignClasses)(jodit, media));
53063
+ }
53064
+ return media;
53065
+ }
52355
53066
  function insertVideos(data) {
52356
53067
  var _a;
52357
53068
  (_a = data.files) === null || _a === void 0 ? void 0 : _a.forEach((file)=>{
52358
- this.s.insertNode(this.createInside.element('video', {
53069
+ this.s.insertNode(prepareMedia(this, this.createInside.element('video', {
52359
53070
  controls: '',
52360
53071
  src: data.baseurl + file
52361
- }));
53072
+ })));
52362
53073
  });
52363
53074
  }
53075
+ // Embed code that is one element is prepared as media; other code goes in as
53076
+ // it is
53077
+ function prepareEmbedCode(jodit, code) {
53078
+ const box = jodit.createInside.div();
53079
+ box.innerHTML = code.trim();
53080
+ const element = box.firstElementChild;
53081
+ return element && box.childNodes.length === 1 ? prepareMedia(jodit, element) : code;
53082
+ }
52364
53083
  _config_js__WEBPACK_IMPORTED_MODULE_4__.Config.prototype.video = {
52365
53084
  parseUrlToVideoEmbed: _core_helpers_index_js__WEBPACK_IMPORTED_MODULE_0__.convertMediaUrlToVideoEmbed,
52366
53085
  defaultWidth: 400,
@@ -52398,7 +53117,7 @@ _config_js__WEBPACK_IMPORTED_MODULE_4__.Config.prototype.controls.video = {
52398
53117
  ])
52399
53118
  ]), tabs = [], insertCode = (code)=>{
52400
53119
  jodit.s.restore();
52401
- jodit.s.insertHTML(code);
53120
+ jodit.s.insertHTML(prepareEmbedCode(jodit, code));
52402
53121
  close();
52403
53122
  };
52404
53123
  jodit.s.save();