jodit-pro 4.17.8 → 4.18.1

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 +6 -6
  4. package/es2015/jodit.js +810 -130
  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 +9 -9
  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 +16 -16
  106. package/es2021/jodit.js +811 -131
  107. package/es2021/jodit.min.css +1 -1
  108. package/es2021/jodit.min.js +16 -16
  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 +15 -15
  179. package/es2021.en/jodit.js +811 -131
  180. package/es2021.en/jodit.min.css +1 -1
  181. package/es2021.en/jodit.min.js +15 -15
  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 +1319 -134
  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
@@ -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.8
4
+ * Version: v4.18.1
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.8";
1771
+ */ const APP_VERSION = "4.18.1";
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);
7470
+ /**
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
+ }
7432
7486
  /**
7433
- * Align image, with `classes` (see `imageAlignClasses`) instead of inline
7434
- * styles when they are given
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:
@@ -11282,9 +11413,9 @@ class Selection {
11282
11413
  if (styles && typeof styles === 'object') {
11283
11414
  (0,_helpers_index_js__WEBPACK_IMPORTED_MODULE_3__.css)(image, styles);
11284
11415
  }
11285
- const { imageDefaultAlign, imageAlignClasses } = this.j.o;
11416
+ const { imageDefaultAlign } = this.j.o;
11286
11417
  if (imageDefaultAlign && imageDefaultAlign !== 'normal') {
11287
- (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));
11288
11419
  }
11289
11420
  const onload = ()=>{
11290
11421
  if (image.naturalHeight < image.offsetHeight || image.naturalWidth < image.offsetWidth) {
@@ -30293,6 +30424,7 @@ const INPUT_TAGS = new Set([
30293
30424
  'textarea',
30294
30425
  'select'
30295
30426
  ]);
30427
+ const TYPE_AHEAD_TIMEOUT = 1000;
30296
30428
  const FOCUSABLE_SELECTOR = [
30297
30429
  'button:not([disabled])',
30298
30430
  'a[href]',
@@ -30557,11 +30689,56 @@ let ToolbarButton = class ToolbarButton extends _core_ui_button_index_js__WEBPAC
30557
30689
  items[(index + 1) % items.length].focus();
30558
30690
  break;
30559
30691
  default:
30560
- return;
30692
+ if (!this.control.list || !this.__typeAhead(e.key, items, index)) {
30693
+ return;
30694
+ }
30561
30695
  }
30562
30696
  e.preventDefault();
30563
30697
  e.stopPropagation();
30564
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
+ }
30565
30742
  /**
30566
30743
  * Visible controls of the opened dropdown that can take the focus
30567
30744
  */ __popupFocusables() {
@@ -30574,12 +30751,16 @@ let ToolbarButton = class ToolbarButton extends _core_ui_button_index_js__WEBPAC
30574
30751
  /**
30575
30752
  * Create an open popup list
30576
30753
  */ __openControlList(control) {
30577
- var _a;
30754
+ var _a, _b, _c, _d, _e;
30578
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);
30579
30756
  const list = control.list;
30580
30757
  const menu = this.openPopup();
30581
- const toolbar = (0,_factory_js__WEBPACK_IMPORTED_MODULE_21__.makeCollection)(this.j);
30582
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);
30583
30764
  toolbar.parentElement = menu;
30584
30765
  toolbar.mode = 'vertical';
30585
30766
  const isListItem = (key)=>(0,_core_helpers_checker_is_plain_object_js__WEBPACK_IMPORTED_MODULE_10__.isPlainObject)(key) && 'title' in key && 'value' in key;
@@ -30630,7 +30811,10 @@ let ToolbarButton = class ToolbarButton extends _core_ui_button_index_js__WEBPAC
30630
30811
  return childControl;
30631
30812
  };
30632
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);
30633
- 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);
30634
30818
  this.state.activated = true;
30635
30819
  }
30636
30820
  onOutsideClick(e) {
@@ -30644,7 +30828,7 @@ let ToolbarButton = class ToolbarButton extends _core_ui_button_index_js__WEBPAC
30644
30828
  openPopup() {
30645
30829
  this.__closePopup();
30646
30830
  this.openedPopup = new _core_ui_popup_popup_js__WEBPACK_IMPORTED_MODULE_20__.Popup(this.j, false);
30647
- 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);
30648
30832
  return this.openedPopup;
30649
30833
  }
30650
30834
  __closePopup() {
@@ -30659,7 +30843,7 @@ let ToolbarButton = class ToolbarButton extends _core_ui_button_index_js__WEBPAC
30659
30843
  // popup while the outer `removeChild` is still running and Chrome
30660
30844
  // throws NotFoundError. See #1458
30661
30845
  this.openedPopup = null;
30662
- 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);
30663
30847
  // The keyboard brought the focus into the dropdown: give it back to
30664
30848
  // the button, otherwise it would fall out to the document
30665
30849
  const { activeElement } = this.od, hadFocus = activeElement && _core_dom_dom_js__WEBPACK_IMPORTED_MODULE_6__.Dom.isOrContains(popup.container, activeElement);
@@ -30724,6 +30908,9 @@ let ToolbarButton = class ToolbarButton extends _core_ui_button_index_js__WEBPAC
30724
30908
  currentValue: '',
30725
30909
  hasTrigger: false
30726
30910
  };
30911
+ this.__typed = '';
30912
+ this.__typedAt = 0;
30913
+ this.__typedTo = null;
30727
30914
  this.openedPopup = null;
30728
30915
  const button = this.getElm('button');
30729
30916
  (0,_core_helpers_utils_assert_js__WEBPACK_IMPORTED_MODULE_14__.assert)(button, 'Element button should exists');
@@ -30773,6 +30960,9 @@ __decorate([
30773
30960
  __decorate([
30774
30961
  _core_decorators_autobind_autobind_js__WEBPACK_IMPORTED_MODULE_2__.autobind
30775
30962
  ], ToolbarButton.prototype, "__onPopupKeyDown", null);
30963
+ __decorate([
30964
+ _core_decorators_autobind_autobind_js__WEBPACK_IMPORTED_MODULE_2__.autobind
30965
+ ], ToolbarButton.prototype, "__onEditorKeyDown", null);
30776
30966
  __decorate([
30777
30967
  _core_decorators_autobind_autobind_js__WEBPACK_IMPORTED_MODULE_2__.autobind
30778
30968
  ], ToolbarButton.prototype, "onOutsideClick", null);
@@ -36984,7 +37174,12 @@ const brBoxes = new Set([
36984
37174
  if (_core_dom_dom_js__WEBPACK_IMPORTED_MODULE_0__.Dom.findNotEmptySibling(br, false)) {
36985
37175
  return;
36986
37176
  }
36987
- jodit.s.setCursorBefore(br);
37177
+ // After a block is inserted the caret is already at the end of its
37178
+ // text; moving it before the `<br>` would put it on a line of its own
37179
+ // below the block (#1315)
37180
+ if (!_core_dom_dom_js__WEBPACK_IMPORTED_MODULE_0__.Dom.isOrContains(node, jodit.s.range.startContainer)) {
37181
+ jodit.s.setCursorBefore(br);
37182
+ }
36988
37183
  _core_dom_dom_js__WEBPACK_IMPORTED_MODULE_0__.Dom.safeRemove(br);
36989
37184
  }
36990
37185
  }
@@ -37018,13 +37213,22 @@ const brBoxes = new Set([
37018
37213
  let current = (_b = (_a = jodit.s.current()) === null || _a === void 0 ? void 0 : _a.parentElement) !== null && _b !== void 0 ? _b : null;
37019
37214
  while(current && current !== jodit.editor){
37020
37215
  if (_core_dom_dom_js__WEBPACK_IMPORTED_MODULE_0__.Dom.isBlock(current)) {
37021
- if (jodit.o.dtd.blockLimits[current.nodeName.toLowerCase()]) {
37216
+ // In DIV mode the caret's own empty block is a line, like
37217
+ // `<p><br></p>`, not a container to insert into (#1315)
37218
+ const isEmptyLine = !parent && _core_dom_dom_js__WEBPACK_IMPORTED_MODULE_0__.Dom.isTag(current, jodit.o.enter) && _core_dom_dom_js__WEBPACK_IMPORTED_MODULE_0__.Dom.isEmpty(current);
37219
+ if (jodit.o.dtd.blockLimits[current.nodeName.toLowerCase()] && !isEmptyLine) {
37022
37220
  break;
37023
37221
  }
37024
37222
  parent = current;
37025
37223
  }
37026
37224
  current = current.parentElement;
37027
37225
  }
37226
+ // A list that is all of the inserted content adds its items to the
37227
+ // list of the item it goes into, as the browsers' own paste does
37228
+ if (_core_dom_dom_js__WEBPACK_IMPORTED_MODULE_0__.Dom.isLeaf(current) && _core_dom_dom_js__WEBPACK_IMPORTED_MODULE_0__.Dom.isList(node) && _core_dom_dom_js__WEBPACK_IMPORTED_MODULE_0__.Dom.isFragment(node.parentNode) && !_core_dom_dom_js__WEBPACK_IMPORTED_MODULE_0__.Dom.findNotEmptySibling(node, false)) {
37229
+ _core_dom_dom_js__WEBPACK_IMPORTED_MODULE_0__.Dom.unwrap(node);
37230
+ parent = current;
37231
+ }
37028
37232
  if (parent) {
37029
37233
  jodit.s.setCursorAfter(parent);
37030
37234
  if (_core_dom_dom_js__WEBPACK_IMPORTED_MODULE_0__.Dom.isEmpty(parent)) {
@@ -37075,10 +37279,12 @@ _config_js__WEBPACK_IMPORTED_MODULE_0__.Config.prototype.dtd = {
37075
37279
  audio: 1,
37076
37280
  body: 1,
37077
37281
  caption: 1,
37282
+ dd: 1,
37078
37283
  details: 1,
37079
37284
  dir: 1,
37080
37285
  div: 1,
37081
37286
  dl: 1,
37287
+ dt: 1,
37082
37288
  fieldset: 1,
37083
37289
  figcaption: 1,
37084
37290
  figure: 1,
@@ -37086,6 +37292,7 @@ _config_js__WEBPACK_IMPORTED_MODULE_0__.Config.prototype.dtd = {
37086
37292
  form: 1,
37087
37293
  header: 1,
37088
37294
  hgroup: 1,
37295
+ li: 1,
37089
37296
  main: 1,
37090
37297
  menu: 1,
37091
37298
  nav: 1,
@@ -37851,12 +38058,14 @@ _core_global_js__WEBPACK_IMPORTED_MODULE_1__.pluginSystem.add('focus', focus);
37851
38058
  /***/ (function(__unused_webpack_module, __unused_webpack___webpack_exports__, __webpack_require__) {
37852
38059
 
37853
38060
  /* harmony import */ var _core_dom_index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(22732);
37854
- /* harmony import */ var _core_helpers_string_trim_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(49055);
37855
- /* harmony import */ var _core_helpers_utils_css_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(41180);
37856
- /* harmony import */ var _core_ui_icon_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(12153);
37857
- /* harmony import */ var _config_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(6441);
37858
- /* harmony import */ var _icons_font_svg_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(4104);
37859
- /* harmony import */ var _icons_fontsize_svg_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(83709);
38061
+ /* harmony import */ var _core_helpers_checker_is_array_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(68345);
38062
+ /* harmony import */ var _core_helpers_string_trim_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(49055);
38063
+ /* harmony import */ var _core_helpers_utils_css_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(41180);
38064
+ /* harmony import */ var _core_ui_icon_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(12153);
38065
+ /* harmony import */ var _config_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(6441);
38066
+ /* harmony import */ var _icons_font_svg_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(4104);
38067
+ /* harmony import */ var _icons_fontsize_svg_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(83709);
38068
+ /* harmony import */ var _font_picker_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(40222);
37860
38069
  /*!
37861
38070
  * Jodit Editor (https://xdsoft.net/jodit/)
37862
38071
  * Released under MIT see LICENSE.txt in the project root for license information.
@@ -37868,11 +38077,18 @@ _core_global_js__WEBPACK_IMPORTED_MODULE_1__.pluginSystem.add('focus', focus);
37868
38077
 
37869
38078
 
37870
38079
 
38080
+
38081
+
37871
38082
  /**
37872
38083
  * Default font-size points
37873
- */ _config_js__WEBPACK_IMPORTED_MODULE_4__.Config.prototype.defaultFontSizePoints = 'px';
37874
- _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"]);
37875
- _config_js__WEBPACK_IMPORTED_MODULE_4__.Config.prototype.controls.fontsize = {
38084
+ */ _config_js__WEBPACK_IMPORTED_MODULE_5__.Config.prototype.defaultFontSizePoints = 'px';
38085
+ _config_js__WEBPACK_IMPORTED_MODULE_5__.Config.prototype.font = {
38086
+ googleFonts: {
38087
+ url: ''
38088
+ }
38089
+ };
38090
+ _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"]);
38091
+ _config_js__WEBPACK_IMPORTED_MODULE_5__.Config.prototype.controls.fontsize = {
37876
38092
  command: 'fontsize',
37877
38093
  data: {
37878
38094
  cssRule: 'font-size',
@@ -37918,7 +38134,7 @@ _config_js__WEBPACK_IMPORTED_MODULE_4__.Config.prototype.controls.fontsize = {
37918
38134
  }
37919
38135
  const control = button.control;
37920
38136
  const cssKey = ((_a = control.data) === null || _a === void 0 ? void 0 : _a.cssRule) || 'font-size';
37921
- const value = (0,_core_helpers_utils_css_js__WEBPACK_IMPORTED_MODULE_2__.css)(box, cssKey);
38137
+ const value = (0,_core_helpers_utils_css_js__WEBPACK_IMPORTED_MODULE_3__.css)(box, cssKey);
37922
38138
  if (cssKey === 'font-size') {
37923
38139
  const numValue = parseFloat(value.toString());
37924
38140
  if (editor.o.defaultFontSizePoints === 'pt') {
@@ -37950,12 +38166,13 @@ _config_js__WEBPACK_IMPORTED_MODULE_4__.Config.prototype.controls.fontsize = {
37950
38166
  return keySet.has(normalize(value.toString()));
37951
38167
  }
37952
38168
  };
37953
- _config_js__WEBPACK_IMPORTED_MODULE_4__.Config.prototype.controls.font = {
37954
- ..._config_js__WEBPACK_IMPORTED_MODULE_4__.Config.prototype.controls.fontsize,
38169
+ const hadSelection = new WeakSet();
38170
+ _config_js__WEBPACK_IMPORTED_MODULE_5__.Config.prototype.controls.font = {
38171
+ ..._config_js__WEBPACK_IMPORTED_MODULE_5__.Config.prototype.controls.fontsize,
37955
38172
  command: 'fontname',
37956
38173
  textTemplate: (j, value)=>{
37957
38174
  const [first] = value.split(',');
37958
- return (0,_core_helpers_string_trim_js__WEBPACK_IMPORTED_MODULE_1__.trimChars)(first, '"\'');
38175
+ return (0,_core_helpers_string_trim_js__WEBPACK_IMPORTED_MODULE_2__.trimChars)(first, '"\'');
37959
38176
  },
37960
38177
  list: {
37961
38178
  '': 'Default',
@@ -37977,6 +38194,7 @@ _config_js__WEBPACK_IMPORTED_MODULE_4__.Config.prototype.controls.font = {
37977
38194
  } catch (_a) {}
37978
38195
  return `<span data-style="${key}" style="${isAvailable ? `font-family: ${key}!important;` : ''}">${value}</span>`;
37979
38196
  },
38197
+ popup: (editor, current, close, button)=>editor.o.font.googleFonts.url ? new _font_picker_js__WEBPACK_IMPORTED_MODULE_8__.UIFontPicker(editor, button, close) : false,
37980
38198
  data: {
37981
38199
  cssRule: 'font-family',
37982
38200
  normalize: (v)=>{
@@ -37985,19 +38203,19 @@ _config_js__WEBPACK_IMPORTED_MODULE_4__.Config.prototype.controls.font = {
37985
38203
  },
37986
38204
  // When no font is explicitly set, the computed font-family equals the
37987
38205
  // editor's own default (e.g. `-apple-system, …`). Return '' so the
37988
- // button shows the `Default` list entry instead of that raw stack.
37989
- // See #1370
37990
- value: (editor)=>{
37991
- const current = editor.s.current();
37992
- if (!current) {
37993
- return;
37994
- }
37995
- 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);
37996
- if (!box) {
38206
+ // button shows the list's `Default` entry, when it has one, instead of
38207
+ // that raw stack. See #1370
38208
+ value: (editor, button)=>{
38209
+ 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);
38210
+ // Until there is a selection the button shows the editor's own font,
38211
+ // and afterwards the font of the last one
38212
+ if (box) {
38213
+ hadSelection.add(button);
38214
+ } else if (hadSelection.has(button)) {
37997
38215
  return;
37998
38216
  }
37999
- const value = (0,_core_helpers_utils_css_js__WEBPACK_IMPORTED_MODULE_2__.css)(box, 'font-family').toString();
38000
- if (value === (0,_core_helpers_utils_css_js__WEBPACK_IMPORTED_MODULE_2__.css)(editor.editor, 'font-family').toString()) {
38217
+ const value = (0,_core_helpers_utils_css_js__WEBPACK_IMPORTED_MODULE_3__.css)(box || editor.editor, 'font-family').toString(), { list } = button.control;
38218
+ 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 : {}))) {
38001
38219
  return '';
38002
38220
  }
38003
38221
  return value;
@@ -38006,6 +38224,267 @@ _config_js__WEBPACK_IMPORTED_MODULE_4__.Config.prototype.controls.font = {
38006
38224
  };
38007
38225
 
38008
38226
 
38227
+ /***/ }),
38228
+
38229
+ /***/ 40222:
38230
+ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
38231
+
38232
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
38233
+ /* harmony export */ UIFontPicker: function() { return /* binding */ UIFontPicker; }
38234
+ /* harmony export */ });
38235
+ /* harmony import */ var _core_decorators_component_component_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(87325);
38236
+ /* harmony import */ var _core_decorators_watch_watch_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(37133);
38237
+ /* harmony import */ var _core_dom_dom_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(2748);
38238
+ /* harmony import */ var _core_global_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(580);
38239
+ /* harmony import */ var _core_helpers_checker_is_array_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(68345);
38240
+ /* harmony import */ var _core_helpers_utils_attr_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(29960);
38241
+ /* harmony import */ var _core_helpers_utils_css_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(41180);
38242
+ /* harmony import */ var _core_helpers_utils_utils_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(37790);
38243
+ /* harmony import */ var _core_ui_element_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(48538);
38244
+ /* harmony import */ var _google_fonts_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(41870);
38245
+ /*!
38246
+ * Jodit Editor (https://xdsoft.net/jodit/)
38247
+ * Released under MIT see LICENSE.txt in the project root for license information.
38248
+ * Copyright (c) 2013-2026 Valerii Chupurnov. All rights reserved. https://xdsoft.net
38249
+ */ var __decorate = undefined && undefined.__decorate || function(decorators, target, key, desc) {
38250
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
38251
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
38252
+ 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;
38253
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
38254
+ };
38255
+
38256
+
38257
+
38258
+
38259
+
38260
+
38261
+
38262
+
38263
+
38264
+
38265
+ const HEADINGS = [
38266
+ 'h1',
38267
+ 'h2',
38268
+ 'h3',
38269
+ 'h4',
38270
+ 'h5',
38271
+ 'h6'
38272
+ ];
38273
+ const GENERIC_FAMILIES = new Set([
38274
+ 'serif',
38275
+ 'sans-serif',
38276
+ 'monospace',
38277
+ 'cursive',
38278
+ 'fantasy',
38279
+ 'system-ui',
38280
+ 'ui-serif',
38281
+ 'ui-sans-serif',
38282
+ 'ui-monospace',
38283
+ 'ui-rounded'
38284
+ ]);
38285
+ /**
38286
+ * A family that names a font, not a generic family or a vendor keyword such
38287
+ * as `-apple-system`
38288
+ */ function isFontName(family) {
38289
+ return Boolean(family) && !family.startsWith('-') && !GENERIC_FAMILIES.has(family);
38290
+ }
38291
+ /**
38292
+ * The font family dropdown with Google Fonts. Under their own headings it
38293
+ * lists the fonts the editor's styles give text and headings, the fonts the
38294
+ * content uses, the control's list and the Google Fonts library
38295
+ */ let UIFontPicker = class UIFontPicker extends _core_ui_element_js__WEBPACK_IMPORTED_MODULE_8__.UIElement {
38296
+ className() {
38297
+ return 'UIFontPicker';
38298
+ }
38299
+ __render() {
38300
+ var _a, _b;
38301
+ const { control } = this.__button, { list = {} } = control, listed = (0,_core_helpers_checker_is_array_js__WEBPACK_IMPORTED_MODULE_4__.isArray)(list) ? list.map((key)=>({
38302
+ value: key.toString(),
38303
+ title: key.toString()
38304
+ })) : (0,_core_helpers_utils_utils_js__WEBPACK_IMPORTED_MODULE_7__.keys)(list, false).map((key)=>({
38305
+ value: key,
38306
+ title: list[key].toString()
38307
+ })), google = Array.from(this.__googleFonts.fonts.values(), (font)=>({
38308
+ value: this.__googleFonts.value(font),
38309
+ title: font.family,
38310
+ font
38311
+ })), byFamily = new Map();
38312
+ [
38313
+ ...google,
38314
+ ...listed
38315
+ ].forEach((entry)=>byFamily.set((0,_google_fonts_js__WEBPACK_IMPORTED_MODULE_9__.firstFamily)(entry.value), entry));
38316
+ const theme = new Map(), used = new Map();
38317
+ // The theme's own fonts are listed too, so its body font can be chosen
38318
+ // to take a font off
38319
+ this.__themeFonts().forEach((fontFamily)=>{
38320
+ var _a;
38321
+ 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) ? {
38322
+ value: fontFamily,
38323
+ title
38324
+ } : undefined;
38325
+ entry && !theme.has(family) && theme.set(family, entry);
38326
+ });
38327
+ this.__usedFonts().forEach((fontFamily)=>{
38328
+ const family = (0,_google_fonts_js__WEBPACK_IMPORTED_MODULE_9__.firstFamily)(fontFamily), entry = byFamily.get(family);
38329
+ entry && !theme.has(family) && used.set(family, entry);
38330
+ });
38331
+ 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 : '');
38332
+ _core_dom_dom_js__WEBPACK_IMPORTED_MODULE_2__.Dom.detach(this.container);
38333
+ this.__fonts.clear();
38334
+ defaultEntry && this.__append(current, [
38335
+ defaultEntry
38336
+ ]);
38337
+ this.__append(current, [
38338
+ ...theme.values()
38339
+ ], 'Theme fonts');
38340
+ this.__append(current, [
38341
+ ...used.values()
38342
+ ], 'Used fonts');
38343
+ this.__append(current, listed.filter((entry)=>entry !== defaultEntry), 'System fonts');
38344
+ this.__append(current, google, 'Google Fonts');
38345
+ this.__observeGoogleFonts();
38346
+ }
38347
+ /**
38348
+ * The fonts the editor's styles give text and each heading
38349
+ */ __themeFonts() {
38350
+ const { editor } = this.j, fonts = [
38351
+ (0,_core_helpers_utils_css_js__WEBPACK_IMPORTED_MODULE_6__.css)(editor, 'font-family').toString()
38352
+ ];
38353
+ HEADINGS.forEach((tag)=>{
38354
+ const heading = this.j.createInside.element(tag, {
38355
+ style: 'display: none'
38356
+ });
38357
+ _core_dom_dom_js__WEBPACK_IMPORTED_MODULE_2__.Dom.append(editor, heading);
38358
+ fonts.push((0,_core_helpers_utils_css_js__WEBPACK_IMPORTED_MODULE_6__.css)(heading, 'font-family').toString());
38359
+ _core_dom_dom_js__WEBPACK_IMPORTED_MODULE_2__.Dom.safeRemove(heading);
38360
+ });
38361
+ return fonts;
38362
+ }
38363
+ /**
38364
+ * The fonts the content sets
38365
+ */ __usedFonts() {
38366
+ return Array.from(this.j.editor.querySelectorAll('[style*="font-family"]'), (element)=>element.style.fontFamily);
38367
+ }
38368
+ __append(current, entries, heading) {
38369
+ if (!entries.length) {
38370
+ return;
38371
+ }
38372
+ const { control } = this.__button, group = this.j.c.div(this.getFullElName('group'));
38373
+ if (heading) {
38374
+ const title = this.j.c.div(this.getFullElName('heading'), {
38375
+ id: `${this.getFullElName('heading')}-${(0,_core_global_js__WEBPACK_IMPORTED_MODULE_3__.uniqueUid)()}`
38376
+ });
38377
+ title.textContent = this.i18n(heading);
38378
+ (0,_core_helpers_utils_attr_js__WEBPACK_IMPORTED_MODULE_5__.attr)(group, {
38379
+ role: 'group',
38380
+ 'aria-labelledby': title.id
38381
+ });
38382
+ _core_dom_dom_js__WEBPACK_IMPORTED_MODULE_2__.Dom.append(group, title);
38383
+ }
38384
+ entries.forEach((entry)=>{
38385
+ var _a, _b;
38386
+ const item = this.j.c.element('button', {
38387
+ type: 'button',
38388
+ class: this.getFullElName('item'),
38389
+ 'data-value': entry.value,
38390
+ 'aria-pressed': (0,_google_fonts_js__WEBPACK_IMPORTED_MODULE_9__.firstFamily)(entry.value) === current
38391
+ });
38392
+ if (entry.font) {
38393
+ item.textContent = entry.title;
38394
+ this.__fonts.set(item, entry.font);
38395
+ } else {
38396
+ 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;
38397
+ }
38398
+ _core_dom_dom_js__WEBPACK_IMPORTED_MODULE_2__.Dom.append(group, item);
38399
+ });
38400
+ _core_dom_dom_js__WEBPACK_IMPORTED_MODULE_2__.Dom.append(this.container, group);
38401
+ }
38402
+ /**
38403
+ * Shows the names of the Google Fonts in view, and those just below it,
38404
+ * in their own fonts. Setting every item's font up front would have the
38405
+ * browser look for each of the library's families among the installed
38406
+ * fonts the first time the list opens
38407
+ */ __observeGoogleFonts() {
38408
+ this.j.async.requestAnimationFrame(()=>{
38409
+ var _a;
38410
+ (_a = this.__observer) === null || _a === void 0 ? void 0 : _a.disconnect();
38411
+ if (this.isDestructed || !this.__fonts.size) {
38412
+ return;
38413
+ }
38414
+ const observer = new IntersectionObserver((entries)=>{
38415
+ const fonts = [];
38416
+ entries.forEach(({ isIntersecting, target })=>{
38417
+ const font = this.__fonts.get(target);
38418
+ if (isIntersecting && font) {
38419
+ fonts.push(font);
38420
+ (0,_core_helpers_utils_css_js__WEBPACK_IMPORTED_MODULE_6__.css)(target, {
38421
+ fontFamily: this.__googleFonts.value(font)
38422
+ });
38423
+ observer.unobserve(target);
38424
+ }
38425
+ });
38426
+ this.__googleFonts.preview(fonts);
38427
+ }, {
38428
+ root: this.container.parentElement,
38429
+ rootMargin: '0px 0px 400px 0px'
38430
+ });
38431
+ this.__fonts.forEach((_, item)=>observer.observe(item));
38432
+ this.__observer = observer;
38433
+ });
38434
+ }
38435
+ /**
38436
+ * Keeps the editor's selection, as the toolbar buttons do
38437
+ */ onMouseDown(e) {
38438
+ e.preventDefault();
38439
+ }
38440
+ onClick(e) {
38441
+ var _a;
38442
+ 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);
38443
+ if (!item) {
38444
+ return;
38445
+ }
38446
+ 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
38447
+ inherited = (0,_google_fonts_js__WEBPACK_IMPORTED_MODULE_9__.firstFamily)(value) === (0,_google_fonts_js__WEBPACK_IMPORTED_MODULE_9__.firstFamily)(this.__blockFont());
38448
+ font && !inherited && this.__googleFonts.load(font);
38449
+ this.j.execCommand('fontname', false, inherited ? '' : value);
38450
+ this.__close();
38451
+ }
38452
+ /**
38453
+ * The font the selected text has without a font of its own: its block's
38454
+ */ __blockFont() {
38455
+ 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);
38456
+ return (0,_core_helpers_utils_css_js__WEBPACK_IMPORTED_MODULE_6__.css)(block !== null && block !== void 0 ? block : this.j.editor, 'font-family').toString();
38457
+ }
38458
+ destruct() {
38459
+ var _a;
38460
+ (_a = this.__observer) === null || _a === void 0 ? void 0 : _a.disconnect();
38461
+ super.destruct();
38462
+ }
38463
+ constructor(jodit, __button, __close){
38464
+ super(jodit);
38465
+ this.__button = __button;
38466
+ this.__close = __close;
38467
+ this.__fonts = new Map();
38468
+ this.__observer = null;
38469
+ this.__googleFonts = jodit.getInstance(_google_fonts_js__WEBPACK_IMPORTED_MODULE_9__.GoogleFonts);
38470
+ this.__render();
38471
+ if (!this.__googleFonts.fonts.size) {
38472
+ this.__googleFonts.ready.then(()=>!this.isDestructed && this.__render());
38473
+ }
38474
+ }
38475
+ };
38476
+ __decorate([
38477
+ (0,_core_decorators_watch_watch_js__WEBPACK_IMPORTED_MODULE_1__.watch)('container:mousedown')
38478
+ ], UIFontPicker.prototype, "onMouseDown", null);
38479
+ __decorate([
38480
+ (0,_core_decorators_watch_watch_js__WEBPACK_IMPORTED_MODULE_1__.watch)('container:click')
38481
+ ], UIFontPicker.prototype, "onClick", null);
38482
+ UIFontPicker = __decorate([
38483
+ _core_decorators_component_component_js__WEBPACK_IMPORTED_MODULE_0__.component
38484
+ ], UIFontPicker);
38485
+
38486
+
38487
+
38009
38488
  /***/ }),
38010
38489
 
38011
38490
  /***/ 23399:
@@ -38015,6 +38494,7 @@ _config_js__WEBPACK_IMPORTED_MODULE_4__.Config.prototype.controls.font = {
38015
38494
  /* harmony import */ var _core_global_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(580);
38016
38495
  /* harmony import */ var _core_helpers_index_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(21537);
38017
38496
  /* harmony import */ var _config_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(28252);
38497
+ /* harmony import */ var _google_fonts_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(41870);
38018
38498
  /*!
38019
38499
  * Jodit Editor (https://xdsoft.net/jodit/)
38020
38500
  * Released under MIT see LICENSE.txt in the project root for license information.
@@ -38022,6 +38502,7 @@ _config_js__WEBPACK_IMPORTED_MODULE_4__.Config.prototype.controls.font = {
38022
38502
  */
38023
38503
 
38024
38504
 
38505
+
38025
38506
  /**
38026
38507
  * Process commands `fontsize` and `fontname`
38027
38508
  */ function font(editor) {
@@ -38032,6 +38513,18 @@ _config_js__WEBPACK_IMPORTED_MODULE_4__.Config.prototype.controls.font = {
38032
38513
  name: 'fontsize',
38033
38514
  group: 'font'
38034
38515
  });
38516
+ if (editor.o.font.googleFonts.url) {
38517
+ const googleFonts = editor.getInstance(_google_fonts_js__WEBPACK_IMPORTED_MODULE_3__.GoogleFonts), loadUsed = editor.async.debounce(()=>googleFonts.loadUsed(), editor.defaultTimeout);
38518
+ googleFonts.ready.then(loadUsed);
38519
+ editor.e.on('afterInit afterSetMode change', loadUsed);
38520
+ }
38521
+ // An iframe's stylesheets can arrive after the toolbar first shows the
38522
+ // editor's font
38523
+ editor.e.on('afterInit', ()=>{
38524
+ editor.iframe && editor.e.on(editor.ed, 'load', ()=>editor.e.fire('updateToolbar'), {
38525
+ capture: true
38526
+ });
38527
+ });
38035
38528
  const callback = (command, second, third)=>{
38036
38529
  switch(command){
38037
38530
  case 'fontsize':
@@ -38061,6 +38554,161 @@ _config_js__WEBPACK_IMPORTED_MODULE_4__.Config.prototype.controls.font = {
38061
38554
  _core_global_js__WEBPACK_IMPORTED_MODULE_0__.pluginSystem.add('font', font);
38062
38555
 
38063
38556
 
38557
+ /***/ }),
38558
+
38559
+ /***/ 41870:
38560
+ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
38561
+
38562
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
38563
+ /* harmony export */ GoogleFonts: function() { return /* binding */ GoogleFonts; },
38564
+ /* harmony export */ firstFamily: function() { return /* binding */ firstFamily; }
38565
+ /* harmony export */ });
38566
+ /* harmony import */ var _core_component_view_component_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(80480);
38567
+ /* harmony import */ var _core_dom_dom_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(2748);
38568
+ /* harmony import */ var _core_request_ajax_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(54079);
38569
+ /*!
38570
+ * Jodit Editor (https://xdsoft.net/jodit/)
38571
+ * Released under MIT see LICENSE.txt in the project root for license information.
38572
+ * Copyright (c) 2013-2026 Valerii Chupurnov. All rights reserved. https://xdsoft.net
38573
+ */
38574
+
38575
+
38576
+ const CSS_URL = 'https://fonts.googleapis.com/css2';
38577
+ // `cursive` and `fantasy` stand in badly for a handwriting or display font
38578
+ const GENERIC_FAMILIES = {
38579
+ serif: 'serif',
38580
+ monospace: 'monospace'
38581
+ };
38582
+ const libraries = new Map();
38583
+ /**
38584
+ * The fonts of the library at `url`, fetched once for every editor on the page
38585
+ */ function library(jodit, url) {
38586
+ let fonts = libraries.get(url);
38587
+ if (!fonts) {
38588
+ const ajax = new _core_request_ajax_js__WEBPACK_IMPORTED_MODULE_2__.Ajax({
38589
+ url,
38590
+ method: 'GET'
38591
+ }, jodit.o.defaultAjaxOptions);
38592
+ fonts = ajax.send().then((response)=>response.json())// A font without a regular style can't be asked for by its name alone
38593
+ .then(({ items })=>items.filter((font)=>font.variants.includes('regular'))).catch(()=>{
38594
+ libraries.delete(url);
38595
+ return [];
38596
+ }).finally(()=>ajax.destruct());
38597
+ libraries.set(url, fonts);
38598
+ }
38599
+ return fonts;
38600
+ }
38601
+ /**
38602
+ * The first family of a `font-family` value, unquoted and in lower case for
38603
+ * comparing
38604
+ */ function firstFamily(fontFamily) {
38605
+ return fontFamily.split(',')[0].replace(/["']/g, '').trim().toLowerCase();
38606
+ }
38607
+ /**
38608
+ * Loads fonts from Google Fonts: the whole of each font the content uses into
38609
+ * the editor's document, and just the letters of its name for the font list
38610
+ */ class GoogleFonts extends _core_component_view_component_js__WEBPACK_IMPORTED_MODULE_0__.ViewComponent {
38611
+ className() {
38612
+ return 'GoogleFonts';
38613
+ }
38614
+ /**
38615
+ * The library's font named first in a `font-family` value
38616
+ */ find(fontFamily) {
38617
+ return this.fonts.get(firstFamily(fontFamily));
38618
+ }
38619
+ /**
38620
+ * The `font-family` value that applies a font
38621
+ */ value(font) {
38622
+ var _a;
38623
+ return `'${font.family}', ${(_a = GENERIC_FAMILIES[font.category]) !== null && _a !== void 0 ? _a : 'sans-serif'}`;
38624
+ }
38625
+ /**
38626
+ * Loads the regular, italic, bold and bold italic styles that a font has
38627
+ * into the editor's document
38628
+ */ load(font) {
38629
+ const loaded = this.__loadedInto(this.j.ed);
38630
+ if (loaded.has(font.family)) {
38631
+ return;
38632
+ }
38633
+ loaded.add(font.family);
38634
+ const styles = [
38635
+ [
38636
+ 'regular',
38637
+ '0,400'
38638
+ ],
38639
+ [
38640
+ '700',
38641
+ '0,700'
38642
+ ],
38643
+ [
38644
+ 'italic',
38645
+ '1,400'
38646
+ ],
38647
+ [
38648
+ '700italic',
38649
+ '1,700'
38650
+ ]
38651
+ ].filter(([variant])=>font.variants.includes(variant)).map(([, style])=>style);
38652
+ this.__append(this.j.ed, `family=${this.__family(font)}:ital,wght@${styles.join(';')}`);
38653
+ }
38654
+ /**
38655
+ * Loads every font of the library that the content uses
38656
+ */ loadUsed() {
38657
+ this.j.editor.querySelectorAll('[style*="font-family"]').forEach((element)=>{
38658
+ const font = this.find(element.style.fontFamily);
38659
+ font && this.load(font);
38660
+ });
38661
+ }
38662
+ /**
38663
+ * Loads into the page just the letters of each font's name, so the font
38664
+ * list can show the name in its font
38665
+ */ preview(fonts) {
38666
+ const loaded = this.__loadedInto(this.j.od);
38667
+ fonts = fonts.filter((font)=>!this.__previewed.has(font.family) && !loaded.has(font.family));
38668
+ if (!fonts.length) {
38669
+ return;
38670
+ }
38671
+ fonts.forEach((font)=>this.__previewed.add(font.family));
38672
+ const families = fonts.map((font)=>`family=${this.__family(font)}`), letters = new Set(fonts.map((font)=>font.family).join(''));
38673
+ this.__append(this.j.od, `${families.join('&')}&text=${encodeURIComponent([
38674
+ ...letters
38675
+ ].join(''))}`);
38676
+ }
38677
+ __loadedInto(doc) {
38678
+ var _a;
38679
+ const loaded = (_a = this.__loaded.get(doc)) !== null && _a !== void 0 ? _a : new Set();
38680
+ this.__loaded.set(doc, loaded);
38681
+ return loaded;
38682
+ }
38683
+ __family(font) {
38684
+ return encodeURIComponent(font.family).replace(/%20/g, '+');
38685
+ }
38686
+ __append(doc, query) {
38687
+ const link = doc.createElement('link');
38688
+ link.rel = 'stylesheet';
38689
+ link.href = `${CSS_URL}?${query}&display=swap`;
38690
+ doc.head.appendChild(link);
38691
+ this.__links.push(link);
38692
+ }
38693
+ destruct() {
38694
+ this.__links.forEach((link)=>_core_dom_dom_js__WEBPACK_IMPORTED_MODULE_1__.Dom.safeRemove(link));
38695
+ super.destruct();
38696
+ }
38697
+ constructor(jodit){
38698
+ super(jodit);
38699
+ /**
38700
+ * The library by lower-case family, empty until it arrives
38701
+ */ this.fonts = new Map();
38702
+ this.__links = [];
38703
+ this.__loaded = new WeakMap();
38704
+ this.__previewed = new Set();
38705
+ this.ready = library(jodit, jodit.o.font.googleFonts.url).then((fonts)=>{
38706
+ fonts.forEach((font)=>this.fonts.set(font.family.toLowerCase(), font));
38707
+ });
38708
+ }
38709
+ }
38710
+
38711
+
38064
38712
  /***/ }),
38065
38713
 
38066
38714
  /***/ 4104:
@@ -39316,12 +39964,13 @@ _core_global_js__WEBPACK_IMPORTED_MODULE_2__.pluginSystem.add('imageProperties',
39316
39964
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
39317
39965
  /* harmony export */ readValuesFromImage: function() { return /* binding */ readValuesFromImage; }
39318
39966
  /* harmony export */ });
39319
- /* harmony import */ var _core_helpers_utils_attr_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(29960);
39320
- /* harmony import */ var _core_helpers_utils_css_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(41180);
39321
- /* harmony import */ var _align_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(51642);
39322
- /* harmony import */ var _link_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(75595);
39323
- /* harmony import */ var _margin_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(47749);
39324
- /* harmony import */ var _size_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(32566);
39967
+ /* harmony import */ var _core_helpers_utils_align_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(25726);
39968
+ /* harmony import */ var _core_helpers_utils_attr_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(29960);
39969
+ /* harmony import */ var _core_helpers_utils_css_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(41180);
39970
+ /* harmony import */ var _align_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(51642);
39971
+ /* harmony import */ var _link_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(75595);
39972
+ /* harmony import */ var _margin_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(47749);
39973
+ /* harmony import */ var _size_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(32566);
39325
39974
  /*!
39326
39975
  * Jodit Editor (https://xdsoft.net/jodit/)
39327
39976
  * Released under MIT see LICENSE.txt in the project root for license information.
@@ -39332,32 +39981,33 @@ _core_global_js__WEBPACK_IMPORTED_MODULE_2__.pluginSystem.add('imageProperties',
39332
39981
 
39333
39982
 
39334
39983
 
39984
+
39335
39985
  /**
39336
39986
  * Read values from image and set it to state
39337
39987
  * @private
39338
39988
  */ async function readValuesFromImage(j, state) {
39339
39989
  const { sourceImage: image, values } = state;
39340
- (0,_align_js__WEBPACK_IMPORTED_MODULE_2__.readAlign)(image, values, j.o.imageAlignClasses);
39990
+ (0,_align_js__WEBPACK_IMPORTED_MODULE_3__.readAlign)(image, values, (0,_core_helpers_utils_align_js__WEBPACK_IMPORTED_MODULE_0__.getAlignClasses)(j, image));
39341
39991
  // Border radius
39342
- values.borderRadius = parseInt((0,_core_helpers_utils_css_js__WEBPACK_IMPORTED_MODULE_1__.cssInline)(image, 'border-radius') || '0', 10) || 0;
39992
+ values.borderRadius = parseInt((0,_core_helpers_utils_css_js__WEBPACK_IMPORTED_MODULE_2__.cssInline)(image, 'border-radius') || '0', 10) || 0;
39343
39993
  // Id
39344
- values.id = (0,_core_helpers_utils_attr_js__WEBPACK_IMPORTED_MODULE_0__.attr)(image, 'id') || '';
39994
+ values.id = (0,_core_helpers_utils_attr_js__WEBPACK_IMPORTED_MODULE_1__.attr)(image, 'id') || '';
39345
39995
  // Title
39346
- values.imageTitle = (0,_core_helpers_utils_attr_js__WEBPACK_IMPORTED_MODULE_0__.attr)(image, 'title') || '';
39996
+ values.imageTitle = (0,_core_helpers_utils_attr_js__WEBPACK_IMPORTED_MODULE_1__.attr)(image, 'title') || '';
39347
39997
  // Alt
39348
- values.imageAlt = (0,_core_helpers_utils_attr_js__WEBPACK_IMPORTED_MODULE_0__.attr)(image, 'alt') || '';
39998
+ values.imageAlt = (0,_core_helpers_utils_attr_js__WEBPACK_IMPORTED_MODULE_1__.attr)(image, 'alt') || '';
39349
39999
  // Style
39350
- values.style = (0,_core_helpers_utils_attr_js__WEBPACK_IMPORTED_MODULE_0__.attr)(image, 'style') || '';
40000
+ values.style = (0,_core_helpers_utils_attr_js__WEBPACK_IMPORTED_MODULE_1__.attr)(image, 'style') || '';
39351
40001
  // Classes
39352
- values.classes = ((0,_core_helpers_utils_attr_js__WEBPACK_IMPORTED_MODULE_0__.attr)(image, 'class') || '').replace(/jodit_focused_image[\s]*/, '');
40002
+ values.classes = ((0,_core_helpers_utils_attr_js__WEBPACK_IMPORTED_MODULE_1__.attr)(image, 'class') || '').replace(/jodit_focused_image[\s]*/, '');
39353
40003
  // Margins
39354
- (0,_margin_js__WEBPACK_IMPORTED_MODULE_4__.readMargins)(image, values, state);
40004
+ (0,_margin_js__WEBPACK_IMPORTED_MODULE_5__.readMargins)(image, values, state);
39355
40005
  // Link
39356
- (0,_link_js__WEBPACK_IMPORTED_MODULE_3__.readLink)(state, j, values);
40006
+ (0,_link_js__WEBPACK_IMPORTED_MODULE_4__.readLink)(state, j, values);
39357
40007
  // Src
39358
- values.imageSrc = (0,_core_helpers_utils_attr_js__WEBPACK_IMPORTED_MODULE_0__.attr)(image, 'src') || '';
40008
+ values.imageSrc = (0,_core_helpers_utils_attr_js__WEBPACK_IMPORTED_MODULE_1__.attr)(image, 'src') || '';
39359
40009
  // Image size
39360
- return (0,_size_js__WEBPACK_IMPORTED_MODULE_5__.readSizes)(image, values, state);
40010
+ return (0,_size_js__WEBPACK_IMPORTED_MODULE_6__.readSizes)(image, values, state);
39361
40011
  }
39362
40012
 
39363
40013
 
@@ -40370,7 +41020,7 @@ UIImagePositionTab = __decorate([
40370
41020
  (0,_core_helpers_utils_index_js__WEBPACK_IMPORTED_MODULE_1__.attr)(image, 'id', id || null);
40371
41021
  }
40372
41022
  if (opt.image.editAlign) {
40373
- (0,_core_helpers_utils_index_js__WEBPACK_IMPORTED_MODULE_1__.hAlignElement)(image, align, j.o.imageAlignClasses);
41023
+ (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));
40374
41024
  }
40375
41025
  }
40376
41026
 
@@ -41100,6 +41750,7 @@ const cmd = (control)=>control.args && (0,_core_helpers_checker_index_js__WEBPAC
41100
41750
  /* harmony import */ var _core_helpers_checker_is_string_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(70799);
41101
41751
  /* harmony import */ var _core_helpers_utils_align_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(25726);
41102
41752
  /* harmony import */ var _core_helpers_utils_css_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(41180);
41753
+ /* harmony import */ var _core_helpers_utils_media_wrapper_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(61477);
41103
41754
  /*!
41104
41755
  * Jodit Editor (https://xdsoft.net/jodit/)
41105
41756
  * Released under MIT see LICENSE.txt in the project root for license information.
@@ -41108,9 +41759,7 @@ const cmd = (control)=>control.args && (0,_core_helpers_checker_index_js__WEBPAC
41108
41759
 
41109
41760
 
41110
41761
 
41111
- // Images align with `imageAlignClasses`; the wrappers of iframes and media
41112
- // keep inline styles
41113
- const alignClasses = (editor, elm)=>_core_dom_index_js__WEBPACK_IMPORTED_MODULE_0__.Dom.isTag(elm, 'img') ? editor.o.imageAlignClasses : null;
41762
+
41114
41763
  // A Normal image sits where the text of its line is aligned (#1531)
41115
41764
  const lineAlign = (editor, elm)=>{
41116
41765
  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;
@@ -41131,7 +41780,7 @@ const lineAlign = (editor, elm)=>{
41131
41780
  return 'left';
41132
41781
  }
41133
41782
  };
41134
- const currentAlign = (editor, elm)=>elm ? (0,_core_helpers_utils_align_js__WEBPACK_IMPORTED_MODULE_2__.getHAlign)(elm, alignClasses(editor, elm)) : 'normal';
41783
+ 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';
41135
41784
  const align = {
41136
41785
  name: 'left',
41137
41786
  childTemplate: (_, __, value)=>value,
@@ -41152,23 +41801,25 @@ const align = {
41152
41801
  return (0,_core_helpers_checker_is_string_js__WEBPACK_IMPORTED_MODULE_1__.isString)(value) && currentAlign(editor, button.target) === value.toLowerCase();
41153
41802
  },
41154
41803
  exec: (editor, elm, { control })=>{
41155
- if (!_core_dom_index_js__WEBPACK_IMPORTED_MODULE_0__.Dom.isTag(elm, new Set([
41804
+ // A media wrapper kept in the content (`mediaWrappers`) is aligned itself
41805
+ 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([
41156
41806
  'img',
41157
41807
  'jodit',
41158
41808
  'jodit-media'
41159
- ]))) {
41809
+ ])) && (0,_core_helpers_utils_media_wrapper_js__WEBPACK_IMPORTED_MODULE_4__.getMediaWrapper)(editor, elm) !== elm) {
41160
41810
  return;
41161
41811
  }
41162
41812
  const command = control.args && (0,_core_helpers_checker_is_string_js__WEBPACK_IMPORTED_MODULE_1__.isString)(control.args[0]) ? control.args[0].toLowerCase() : '';
41163
41813
  if (!command) {
41164
41814
  return false;
41165
41815
  }
41166
- ;(0,_core_helpers_utils_align_js__WEBPACK_IMPORTED_MODULE_2__.hAlignElement)(elm, command, alignClasses(editor, elm));
41816
+ ;(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));
41167
41817
  if (_core_dom_index_js__WEBPACK_IMPORTED_MODULE_0__.Dom.isTag(elm, new Set([
41168
41818
  'jodit',
41169
41819
  'jodit-media'
41170
41820
  ])) && elm.firstElementChild) {
41171
- (0,_core_helpers_utils_align_js__WEBPACK_IMPORTED_MODULE_2__.hAlignElement)(elm.firstElementChild, command);
41821
+ const media = elm.firstElementChild;
41822
+ (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));
41172
41823
  }
41173
41824
  editor.synchronizeValues();
41174
41825
  editor.e.fire('recalcPositionPopup');
@@ -41371,9 +42022,11 @@ const align = {
41371
42022
  return (0,_modules_toolbar_factory_js__WEBPACK_IMPORTED_MODULE_7__.makeCollection)(this.jodit, this.popup);
41372
42023
  }
41373
42024
  onClick(node) {
41374
- 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);
41375
- if (target && this.canShowPopupForType(target.nodeName.toLowerCase())) {
41376
- this.showPopup(()=>(0,_core_helpers_index_js__WEBPACK_IMPORTED_MODULE_3__.position)(target, this.j), target.nodeName.toLowerCase(), target);
42025
+ 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);
42026
+ // A media wrapper kept in the content gets the media popup
42027
+ const type = mediaWrapper ? 'jodit-media' : target === null || target === void 0 ? void 0 : target.nodeName.toLowerCase();
42028
+ if (target && type && this.canShowPopupForType(type)) {
42029
+ this.showPopup(()=>(0,_core_helpers_index_js__WEBPACK_IMPORTED_MODULE_3__.position)(target, this.j), type, target);
41377
42030
  return false;
41378
42031
  }
41379
42032
  }
@@ -41556,7 +42209,12 @@ const align = {
41556
42209
  this.removeListenersForElements();
41557
42210
  }
41558
42211
  _eventsList() {
41559
- const el = this.elmsList;
42212
+ var _a;
42213
+ // Clicks on a media wrapper kept in the content (`mediaWrappers`)
42214
+ const wrapperTags = Object.values((_a = this.j.o.mediaWrappers) !== null && _a !== void 0 ? _a : {}).map(({ tag })=>tag.toLowerCase());
42215
+ const el = [
42216
+ ...new Set(this.elmsList.concat(wrapperTags))
42217
+ ];
41560
42218
  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(' ');
41561
42219
  }
41562
42220
  addListenersForElements() {
@@ -42731,8 +43389,6 @@ const formTemplate = (editor)=>{
42731
43389
  * Jodit Editor (https://xdsoft.net/jodit/)
42732
43390
  * Released under MIT see LICENSE.txt in the project root for license information.
42733
43391
  * Copyright (c) 2013-2026 Valerii Chupurnov. All rights reserved. https://xdsoft.net
42734
- */ /**
42735
- * @module plugins/media
42736
43392
  */
42737
43393
  _config_js__WEBPACK_IMPORTED_MODULE_0__.Config.prototype.mediaFakeTag = 'jodit-media';
42738
43394
  _config_js__WEBPACK_IMPORTED_MODULE_0__.Config.prototype.mediaInFakeBlock = true;
@@ -42740,6 +43396,7 @@ _config_js__WEBPACK_IMPORTED_MODULE_0__.Config.prototype.mediaBlocks = [
42740
43396
  'video',
42741
43397
  'audio'
42742
43398
  ];
43399
+ _config_js__WEBPACK_IMPORTED_MODULE_0__.Config.prototype.mediaWrappers = {};
42743
43400
 
42744
43401
 
42745
43402
  /***/ }),
@@ -42768,11 +43425,14 @@ _config_js__WEBPACK_IMPORTED_MODULE_0__.Config.prototype.mediaBlocks = [
42768
43425
  * Process `video` and `audio`
42769
43426
  */ function media(editor) {
42770
43427
  const keyFake = 'jodit_fake_wrapper';
42771
- const { mediaFakeTag, mediaBlocks, mediaInFakeBlock } = editor.options;
43428
+ const { mediaFakeTag, mediaBlocks, mediaInFakeBlock, mediaWrappers } = editor.options;
42772
43429
  const wrap = (element)=>{
43430
+ var _a;
42773
43431
  if (element.parentNode && (0,_core_helpers_utils_index_js__WEBPACK_IMPORTED_MODULE_3__.attr)(element.parentNode, 'data-jodit_iframe_wrapper')) {
42774
43432
  element = element.parentNode;
42775
- } else {
43433
+ } else if (mediaWrappers[element.nodeName.toLowerCase()]) {
43434
+ 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);
43435
+ } else if (mediaInFakeBlock) {
42776
43436
  const wrapper = editor.createInside.element(mediaFakeTag, {
42777
43437
  'data-jodit-temp': 1,
42778
43438
  contenteditable: false,
@@ -42790,12 +43450,14 @@ _config_js__WEBPACK_IMPORTED_MODULE_0__.Config.prototype.mediaBlocks = [
42790
43450
  }
42791
43451
  _core_dom_dom_js__WEBPACK_IMPORTED_MODULE_1__.Dom.append(wrapper, element);
42792
43452
  element = wrapper;
43453
+ } else {
43454
+ return;
42793
43455
  }
42794
43456
  editor.e.off(element, 'mousedown.select touchstart.select').on(element, 'mousedown.select touchstart.select', ()=>{
42795
43457
  editor.s.setCursorAfter(element);
42796
43458
  });
42797
43459
  };
42798
- if (mediaInFakeBlock) {
43460
+ if (mediaInFakeBlock || Object.keys(mediaWrappers).length) {
42799
43461
  editor.e.on('afterGetValueFromEditor', (data)=>{
42800
43462
  const rxp = new RegExp(`<${mediaFakeTag}[^>]+data-${keyFake}[^>]+>([^]+?)</${mediaFakeTag}>`, 'ig');
42801
43463
  if (rxp.test(data.value)) {
@@ -50330,15 +50992,33 @@ _core_global_js__WEBPACK_IMPORTED_MODULE_4__.pluginSystem.add('toolbarNavigation
50330
50992
 
50331
50993
 
50332
50994
 
50995
+ // Media the popup inserts go in their wrapper (see `mediaWrappers`), aligned
50996
+ // with `mediaDefaultAlign`
50997
+ function prepareMedia(jodit, element) {
50998
+ const media = (0,_core_helpers_index_js__WEBPACK_IMPORTED_MODULE_0__.wrapMedia)(jodit, element);
50999
+ const { mediaDefaultAlign } = jodit.o;
51000
+ if (mediaDefaultAlign && mediaDefaultAlign !== 'normal') {
51001
+ (0,_core_helpers_index_js__WEBPACK_IMPORTED_MODULE_0__.hAlignElement)(media, mediaDefaultAlign, (0,_core_helpers_index_js__WEBPACK_IMPORTED_MODULE_0__.getAlignClasses)(jodit, media));
51002
+ }
51003
+ return media;
51004
+ }
50333
51005
  function insertVideos(data) {
50334
51006
  var _a;
50335
51007
  (_a = data.files) === null || _a === void 0 ? void 0 : _a.forEach((file)=>{
50336
- this.s.insertNode(this.createInside.element('video', {
51008
+ this.s.insertNode(prepareMedia(this, this.createInside.element('video', {
50337
51009
  controls: '',
50338
51010
  src: data.baseurl + file
50339
- }));
51011
+ })));
50340
51012
  });
50341
51013
  }
51014
+ // Embed code that is one element is prepared as media; other code goes in as
51015
+ // it is
51016
+ function prepareEmbedCode(jodit, code) {
51017
+ const box = jodit.createInside.div();
51018
+ box.innerHTML = code.trim();
51019
+ const element = box.firstElementChild;
51020
+ return element && box.childNodes.length === 1 ? prepareMedia(jodit, element) : code;
51021
+ }
50342
51022
  _config_js__WEBPACK_IMPORTED_MODULE_4__.Config.prototype.video = {
50343
51023
  parseUrlToVideoEmbed: _core_helpers_index_js__WEBPACK_IMPORTED_MODULE_0__.convertMediaUrlToVideoEmbed,
50344
51024
  defaultWidth: 400,
@@ -50376,7 +51056,7 @@ _config_js__WEBPACK_IMPORTED_MODULE_4__.Config.prototype.controls.video = {
50376
51056
  ])
50377
51057
  ]), tabs = [], insertCode = (code)=>{
50378
51058
  jodit.s.restore();
50379
- jodit.s.insertHTML(code);
51059
+ jodit.s.insertHTML(prepareEmbedCode(jodit, code));
50380
51060
  close();
50381
51061
  };
50382
51062
  jodit.s.save();