jodit-pro 4.12.6 → 4.12.8

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 (299) hide show
  1. package/es2015/jodit.css +1 -1
  2. package/es2015/jodit.fat.min.js +4 -4
  3. package/es2015/jodit.js +98 -17
  4. package/es2015/jodit.min.js +4 -4
  5. package/es2015/plugins/ai-assistant-pro/ai-assistant-pro.css +1 -1
  6. package/es2015/plugins/ai-assistant-pro/ai-assistant-pro.js +1 -1
  7. package/es2015/plugins/ai-assistant-pro/ai-assistant-pro.min.js +1 -1
  8. package/es2015/plugins/autocomplete/autocomplete.js +1 -1
  9. package/es2015/plugins/autocomplete/autocomplete.min.js +1 -1
  10. package/es2015/plugins/backup/backup.css +1 -1
  11. package/es2015/plugins/backup/backup.js +1 -1
  12. package/es2015/plugins/backup/backup.min.js +1 -1
  13. package/es2015/plugins/button-generator/button-generator.css +1 -1
  14. package/es2015/plugins/button-generator/button-generator.js +1 -1
  15. package/es2015/plugins/button-generator/button-generator.min.js +1 -1
  16. package/es2015/plugins/change-case/change-case.js +1 -1
  17. package/es2015/plugins/change-case/change-case.min.js +1 -1
  18. package/es2015/plugins/color-picker/color-picker.css +1 -1
  19. package/es2015/plugins/color-picker/color-picker.js +1 -1
  20. package/es2015/plugins/color-picker/color-picker.min.js +1 -1
  21. package/es2015/plugins/emoji/emoji.css +1 -1
  22. package/es2015/plugins/emoji/emoji.js +1 -1
  23. package/es2015/plugins/emoji/emoji.min.js +1 -1
  24. package/es2015/plugins/export-docs/export-docs.js +1 -1
  25. package/es2015/plugins/export-docs/export-docs.min.js +1 -1
  26. package/es2015/plugins/finder/finder.css +1 -1
  27. package/es2015/plugins/finder/finder.js +1 -1
  28. package/es2015/plugins/finder/finder.min.js +1 -1
  29. package/es2015/plugins/google-maps/google-maps.css +1 -1
  30. package/es2015/plugins/google-maps/google-maps.js +1 -1
  31. package/es2015/plugins/google-maps/google-maps.min.js +1 -1
  32. package/es2015/plugins/google-search/google-search.js +1 -1
  33. package/es2015/plugins/google-search/google-search.min.js +1 -1
  34. package/es2015/plugins/highlight-signature/highlight-signature.js +1 -1
  35. package/es2015/plugins/highlight-signature/highlight-signature.min.js +1 -1
  36. package/es2015/plugins/iframe-editor/iframe-editor.css +1 -1
  37. package/es2015/plugins/iframe-editor/iframe-editor.js +1 -1
  38. package/es2015/plugins/iframe-editor/iframe-editor.min.js +1 -1
  39. package/es2015/plugins/keyboard/keyboard.css +1 -1
  40. package/es2015/plugins/keyboard/keyboard.js +1 -1
  41. package/es2015/plugins/keyboard/keyboard.min.js +1 -1
  42. package/es2015/plugins/mobile-view/mobile-view.js +1 -1
  43. package/es2015/plugins/mobile-view/mobile-view.min.js +1 -1
  44. package/es2015/plugins/page-break/page-break.js +1 -1
  45. package/es2015/plugins/page-break/page-break.min.js +1 -1
  46. package/es2015/plugins/paste-code/paste-code.css +1 -1
  47. package/es2015/plugins/paste-code/paste-code.js +1 -1
  48. package/es2015/plugins/paste-code/paste-code.min.js +1 -1
  49. package/es2015/plugins/paste-from-word/paste-from-word.js +1 -1
  50. package/es2015/plugins/paste-from-word/paste-from-word.min.js +1 -1
  51. package/es2015/plugins/show-blocks/show-blocks.js +1 -1
  52. package/es2015/plugins/show-blocks/show-blocks.min.js +1 -1
  53. package/es2015/plugins/style/style.css +1 -1
  54. package/es2015/plugins/style/style.js +1 -1
  55. package/es2015/plugins/style/style.min.js +1 -1
  56. package/es2015/plugins/templates/templates.css +1 -1
  57. package/es2015/plugins/templates/templates.js +1 -1
  58. package/es2015/plugins/templates/templates.min.js +1 -1
  59. package/es2015/plugins/todo-list/todo-list.css +1 -1
  60. package/es2015/plugins/todo-list/todo-list.js +1 -1
  61. package/es2015/plugins/todo-list/todo-list.min.js +1 -1
  62. package/es2015/plugins/translate/translate.css +1 -1
  63. package/es2015/plugins/translate/translate.js +1 -1
  64. package/es2015/plugins/translate/translate.min.js +1 -1
  65. package/es2015/plugins/tune-block/tune-block.css +1 -1
  66. package/es2015/plugins/tune-block/tune-block.js +1 -1
  67. package/es2015/plugins/tune-block/tune-block.min.js +1 -1
  68. package/es2018/jodit.fat.min.js +4 -4
  69. package/es2018/jodit.min.js +8 -8
  70. package/es2018/plugins/ai-assistant-pro/ai-assistant-pro.min.js +1 -1
  71. package/es2018/plugins/autocomplete/autocomplete.min.js +1 -1
  72. package/es2018/plugins/backup/backup.min.js +1 -1
  73. package/es2018/plugins/button-generator/button-generator.min.js +1 -1
  74. package/es2018/plugins/change-case/change-case.min.js +1 -1
  75. package/es2018/plugins/color-picker/color-picker.min.js +1 -1
  76. package/es2018/plugins/emoji/emoji.min.js +1 -1
  77. package/es2018/plugins/export-docs/export-docs.min.js +1 -1
  78. package/es2018/plugins/finder/finder.min.js +1 -1
  79. package/es2018/plugins/google-maps/google-maps.min.js +1 -1
  80. package/es2018/plugins/google-search/google-search.min.js +1 -1
  81. package/es2018/plugins/highlight-signature/highlight-signature.min.js +1 -1
  82. package/es2018/plugins/iframe-editor/iframe-editor.min.js +1 -1
  83. package/es2018/plugins/keyboard/keyboard.min.js +1 -1
  84. package/es2018/plugins/mobile-view/mobile-view.min.js +1 -1
  85. package/es2018/plugins/page-break/page-break.min.js +1 -1
  86. package/es2018/plugins/paste-code/paste-code.min.js +1 -1
  87. package/es2018/plugins/paste-from-word/paste-from-word.min.js +1 -1
  88. package/es2018/plugins/show-blocks/show-blocks.min.js +1 -1
  89. package/es2018/plugins/style/style.min.js +1 -1
  90. package/es2018/plugins/templates/templates.min.js +1 -1
  91. package/es2018/plugins/todo-list/todo-list.min.js +1 -1
  92. package/es2018/plugins/translate/translate.min.js +1 -1
  93. package/es2018/plugins/tune-block/tune-block.min.js +1 -1
  94. package/es2021/jodit.css +1 -1
  95. package/es2021/jodit.fat.min.js +4 -4
  96. package/es2021/jodit.js +98 -17
  97. package/es2021/jodit.min.js +9 -9
  98. package/es2021/plugins/ai-assistant-pro/ai-assistant-pro.css +1 -1
  99. package/es2021/plugins/ai-assistant-pro/ai-assistant-pro.js +1 -1
  100. package/es2021/plugins/ai-assistant-pro/ai-assistant-pro.min.js +1 -1
  101. package/es2021/plugins/autocomplete/autocomplete.js +1 -1
  102. package/es2021/plugins/autocomplete/autocomplete.min.js +1 -1
  103. package/es2021/plugins/backup/backup.css +1 -1
  104. package/es2021/plugins/backup/backup.js +1 -1
  105. package/es2021/plugins/backup/backup.min.js +1 -1
  106. package/es2021/plugins/button-generator/button-generator.css +1 -1
  107. package/es2021/plugins/button-generator/button-generator.js +1 -1
  108. package/es2021/plugins/button-generator/button-generator.min.js +1 -1
  109. package/es2021/plugins/change-case/change-case.js +1 -1
  110. package/es2021/plugins/change-case/change-case.min.js +1 -1
  111. package/es2021/plugins/color-picker/color-picker.css +1 -1
  112. package/es2021/plugins/color-picker/color-picker.js +1 -1
  113. package/es2021/plugins/color-picker/color-picker.min.js +1 -1
  114. package/es2021/plugins/emoji/emoji.css +1 -1
  115. package/es2021/plugins/emoji/emoji.js +1 -1
  116. package/es2021/plugins/emoji/emoji.min.js +1 -1
  117. package/es2021/plugins/export-docs/export-docs.js +1 -1
  118. package/es2021/plugins/export-docs/export-docs.min.js +1 -1
  119. package/es2021/plugins/finder/finder.css +1 -1
  120. package/es2021/plugins/finder/finder.js +1 -1
  121. package/es2021/plugins/finder/finder.min.js +1 -1
  122. package/es2021/plugins/google-maps/google-maps.css +1 -1
  123. package/es2021/plugins/google-maps/google-maps.js +1 -1
  124. package/es2021/plugins/google-maps/google-maps.min.js +1 -1
  125. package/es2021/plugins/google-search/google-search.js +1 -1
  126. package/es2021/plugins/google-search/google-search.min.js +1 -1
  127. package/es2021/plugins/highlight-signature/highlight-signature.js +1 -1
  128. package/es2021/plugins/highlight-signature/highlight-signature.min.js +1 -1
  129. package/es2021/plugins/iframe-editor/iframe-editor.css +1 -1
  130. package/es2021/plugins/iframe-editor/iframe-editor.js +1 -1
  131. package/es2021/plugins/iframe-editor/iframe-editor.min.js +1 -1
  132. package/es2021/plugins/keyboard/keyboard.css +1 -1
  133. package/es2021/plugins/keyboard/keyboard.js +1 -1
  134. package/es2021/plugins/keyboard/keyboard.min.js +1 -1
  135. package/es2021/plugins/mobile-view/mobile-view.js +1 -1
  136. package/es2021/plugins/mobile-view/mobile-view.min.js +1 -1
  137. package/es2021/plugins/page-break/page-break.js +1 -1
  138. package/es2021/plugins/page-break/page-break.min.js +1 -1
  139. package/es2021/plugins/paste-code/paste-code.css +1 -1
  140. package/es2021/plugins/paste-code/paste-code.js +1 -1
  141. package/es2021/plugins/paste-code/paste-code.min.js +1 -1
  142. package/es2021/plugins/paste-from-word/paste-from-word.js +1 -1
  143. package/es2021/plugins/paste-from-word/paste-from-word.min.js +1 -1
  144. package/es2021/plugins/show-blocks/show-blocks.js +1 -1
  145. package/es2021/plugins/show-blocks/show-blocks.min.js +1 -1
  146. package/es2021/plugins/style/style.css +1 -1
  147. package/es2021/plugins/style/style.js +1 -1
  148. package/es2021/plugins/style/style.min.js +1 -1
  149. package/es2021/plugins/templates/templates.css +1 -1
  150. package/es2021/plugins/templates/templates.js +1 -1
  151. package/es2021/plugins/templates/templates.min.js +1 -1
  152. package/es2021/plugins/todo-list/todo-list.css +1 -1
  153. package/es2021/plugins/todo-list/todo-list.js +1 -1
  154. package/es2021/plugins/todo-list/todo-list.min.js +1 -1
  155. package/es2021/plugins/translate/translate.css +1 -1
  156. package/es2021/plugins/translate/translate.js +1 -1
  157. package/es2021/plugins/translate/translate.min.js +1 -1
  158. package/es2021/plugins/tune-block/tune-block.css +1 -1
  159. package/es2021/plugins/tune-block/tune-block.js +1 -1
  160. package/es2021/plugins/tune-block/tune-block.min.js +1 -1
  161. package/es2021.en/jodit.css +1 -1
  162. package/es2021.en/jodit.fat.min.js +4 -4
  163. package/es2021.en/jodit.js +98 -17
  164. package/es2021.en/jodit.min.js +4 -4
  165. package/es2021.en/plugins/ai-assistant-pro/ai-assistant-pro.css +1 -1
  166. package/es2021.en/plugins/ai-assistant-pro/ai-assistant-pro.js +1 -1
  167. package/es2021.en/plugins/ai-assistant-pro/ai-assistant-pro.min.js +1 -1
  168. package/es2021.en/plugins/autocomplete/autocomplete.js +1 -1
  169. package/es2021.en/plugins/autocomplete/autocomplete.min.js +1 -1
  170. package/es2021.en/plugins/backup/backup.css +1 -1
  171. package/es2021.en/plugins/backup/backup.js +1 -1
  172. package/es2021.en/plugins/backup/backup.min.js +1 -1
  173. package/es2021.en/plugins/button-generator/button-generator.css +1 -1
  174. package/es2021.en/plugins/button-generator/button-generator.js +1 -1
  175. package/es2021.en/plugins/button-generator/button-generator.min.js +1 -1
  176. package/es2021.en/plugins/change-case/change-case.js +1 -1
  177. package/es2021.en/plugins/change-case/change-case.min.js +1 -1
  178. package/es2021.en/plugins/color-picker/color-picker.css +1 -1
  179. package/es2021.en/plugins/color-picker/color-picker.js +1 -1
  180. package/es2021.en/plugins/color-picker/color-picker.min.js +1 -1
  181. package/es2021.en/plugins/emoji/emoji.css +1 -1
  182. package/es2021.en/plugins/emoji/emoji.js +1 -1
  183. package/es2021.en/plugins/emoji/emoji.min.js +1 -1
  184. package/es2021.en/plugins/export-docs/export-docs.js +1 -1
  185. package/es2021.en/plugins/export-docs/export-docs.min.js +1 -1
  186. package/es2021.en/plugins/finder/finder.css +1 -1
  187. package/es2021.en/plugins/finder/finder.js +1 -1
  188. package/es2021.en/plugins/finder/finder.min.js +1 -1
  189. package/es2021.en/plugins/google-maps/google-maps.css +1 -1
  190. package/es2021.en/plugins/google-maps/google-maps.js +1 -1
  191. package/es2021.en/plugins/google-maps/google-maps.min.js +1 -1
  192. package/es2021.en/plugins/google-search/google-search.js +1 -1
  193. package/es2021.en/plugins/google-search/google-search.min.js +1 -1
  194. package/es2021.en/plugins/highlight-signature/highlight-signature.js +1 -1
  195. package/es2021.en/plugins/highlight-signature/highlight-signature.min.js +1 -1
  196. package/es2021.en/plugins/iframe-editor/iframe-editor.css +1 -1
  197. package/es2021.en/plugins/iframe-editor/iframe-editor.js +1 -1
  198. package/es2021.en/plugins/iframe-editor/iframe-editor.min.js +1 -1
  199. package/es2021.en/plugins/keyboard/keyboard.css +1 -1
  200. package/es2021.en/plugins/keyboard/keyboard.js +1 -1
  201. package/es2021.en/plugins/keyboard/keyboard.min.js +1 -1
  202. package/es2021.en/plugins/mobile-view/mobile-view.js +1 -1
  203. package/es2021.en/plugins/mobile-view/mobile-view.min.js +1 -1
  204. package/es2021.en/plugins/page-break/page-break.js +1 -1
  205. package/es2021.en/plugins/page-break/page-break.min.js +1 -1
  206. package/es2021.en/plugins/paste-code/paste-code.css +1 -1
  207. package/es2021.en/plugins/paste-code/paste-code.js +1 -1
  208. package/es2021.en/plugins/paste-code/paste-code.min.js +1 -1
  209. package/es2021.en/plugins/paste-from-word/paste-from-word.js +1 -1
  210. package/es2021.en/plugins/paste-from-word/paste-from-word.min.js +1 -1
  211. package/es2021.en/plugins/show-blocks/show-blocks.js +1 -1
  212. package/es2021.en/plugins/show-blocks/show-blocks.min.js +1 -1
  213. package/es2021.en/plugins/style/style.css +1 -1
  214. package/es2021.en/plugins/style/style.js +1 -1
  215. package/es2021.en/plugins/style/style.min.js +1 -1
  216. package/es2021.en/plugins/templates/templates.css +1 -1
  217. package/es2021.en/plugins/templates/templates.js +1 -1
  218. package/es2021.en/plugins/templates/templates.min.js +1 -1
  219. package/es2021.en/plugins/todo-list/todo-list.css +1 -1
  220. package/es2021.en/plugins/todo-list/todo-list.js +1 -1
  221. package/es2021.en/plugins/todo-list/todo-list.min.js +1 -1
  222. package/es2021.en/plugins/translate/translate.css +1 -1
  223. package/es2021.en/plugins/translate/translate.js +1 -1
  224. package/es2021.en/plugins/translate/translate.min.js +1 -1
  225. package/es2021.en/plugins/tune-block/tune-block.css +1 -1
  226. package/es2021.en/plugins/tune-block/tune-block.js +1 -1
  227. package/es2021.en/plugins/tune-block/tune-block.min.js +1 -1
  228. package/es5/jodit.css +2 -2
  229. package/es5/jodit.fat.min.js +2 -2
  230. package/es5/jodit.js +102 -18
  231. package/es5/jodit.min.css +2 -2
  232. package/es5/jodit.min.js +2 -2
  233. package/es5/plugins/ai-assistant-pro/ai-assistant-pro.css +1 -1
  234. package/es5/plugins/ai-assistant-pro/ai-assistant-pro.js +1 -1
  235. package/es5/plugins/ai-assistant-pro/ai-assistant-pro.min.js +1 -1
  236. package/es5/plugins/autocomplete/autocomplete.js +1 -1
  237. package/es5/plugins/autocomplete/autocomplete.min.js +1 -1
  238. package/es5/plugins/backup/backup.css +1 -1
  239. package/es5/plugins/backup/backup.js +1 -1
  240. package/es5/plugins/backup/backup.min.js +1 -1
  241. package/es5/plugins/button-generator/button-generator.css +1 -1
  242. package/es5/plugins/button-generator/button-generator.js +1 -1
  243. package/es5/plugins/button-generator/button-generator.min.js +1 -1
  244. package/es5/plugins/change-case/change-case.js +1 -1
  245. package/es5/plugins/change-case/change-case.min.js +1 -1
  246. package/es5/plugins/color-picker/color-picker.css +1 -1
  247. package/es5/plugins/color-picker/color-picker.js +1 -1
  248. package/es5/plugins/color-picker/color-picker.min.js +1 -1
  249. package/es5/plugins/emoji/emoji.css +1 -1
  250. package/es5/plugins/emoji/emoji.js +1 -1
  251. package/es5/plugins/emoji/emoji.min.js +1 -1
  252. package/es5/plugins/export-docs/export-docs.js +1 -1
  253. package/es5/plugins/export-docs/export-docs.min.js +1 -1
  254. package/es5/plugins/finder/finder.css +1 -1
  255. package/es5/plugins/finder/finder.js +1 -1
  256. package/es5/plugins/finder/finder.min.js +1 -1
  257. package/es5/plugins/google-maps/google-maps.css +1 -1
  258. package/es5/plugins/google-maps/google-maps.js +1 -1
  259. package/es5/plugins/google-maps/google-maps.min.js +1 -1
  260. package/es5/plugins/google-search/google-search.js +1 -1
  261. package/es5/plugins/google-search/google-search.min.js +1 -1
  262. package/es5/plugins/highlight-signature/highlight-signature.js +1 -1
  263. package/es5/plugins/highlight-signature/highlight-signature.min.js +1 -1
  264. package/es5/plugins/iframe-editor/iframe-editor.css +1 -1
  265. package/es5/plugins/iframe-editor/iframe-editor.js +1 -1
  266. package/es5/plugins/iframe-editor/iframe-editor.min.js +1 -1
  267. package/es5/plugins/keyboard/keyboard.css +1 -1
  268. package/es5/plugins/keyboard/keyboard.js +1 -1
  269. package/es5/plugins/keyboard/keyboard.min.js +1 -1
  270. package/es5/plugins/mobile-view/mobile-view.js +1 -1
  271. package/es5/plugins/mobile-view/mobile-view.min.js +1 -1
  272. package/es5/plugins/page-break/page-break.js +1 -1
  273. package/es5/plugins/page-break/page-break.min.js +1 -1
  274. package/es5/plugins/paste-code/paste-code.css +1 -1
  275. package/es5/plugins/paste-code/paste-code.js +1 -1
  276. package/es5/plugins/paste-code/paste-code.min.js +1 -1
  277. package/es5/plugins/paste-from-word/paste-from-word.js +1 -1
  278. package/es5/plugins/paste-from-word/paste-from-word.min.js +1 -1
  279. package/es5/plugins/show-blocks/show-blocks.js +1 -1
  280. package/es5/plugins/show-blocks/show-blocks.min.js +1 -1
  281. package/es5/plugins/style/style.css +1 -1
  282. package/es5/plugins/style/style.js +1 -1
  283. package/es5/plugins/style/style.min.js +1 -1
  284. package/es5/plugins/templates/templates.css +1 -1
  285. package/es5/plugins/templates/templates.js +1 -1
  286. package/es5/plugins/templates/templates.min.js +1 -1
  287. package/es5/plugins/todo-list/todo-list.css +1 -1
  288. package/es5/plugins/todo-list/todo-list.js +1 -1
  289. package/es5/plugins/todo-list/todo-list.min.js +1 -1
  290. package/es5/plugins/translate/translate.css +1 -1
  291. package/es5/plugins/translate/translate.js +1 -1
  292. package/es5/plugins/translate/translate.min.js +1 -1
  293. package/es5/plugins/tune-block/tune-block.css +1 -1
  294. package/es5/plugins/tune-block/tune-block.js +1 -1
  295. package/es5/plugins/tune-block/tune-block.min.js +1 -1
  296. package/es5/polyfills.fat.min.js +1 -1
  297. package/es5/polyfills.js +1 -1
  298. package/es5/polyfills.min.js +1 -1
  299. package/package.json +1 -1
package/es2021/jodit.js CHANGED
@@ -1,7 +1,7 @@
1
1
  /*!
2
2
  * jodit-pro - PRO Version of Jodit Editor
3
3
  * Author: Chupurnov Valerii <chupurnov@gmail.com>
4
- * Version: v4.12.6
4
+ * Version: v4.12.8
5
5
  * Url: https://xdsoft.net/jodit/pro/
6
6
  * License(s): SEE LICENSE IN LICENSE.md
7
7
  */
@@ -714,14 +714,39 @@ let ConfigPrototype = {};
714
714
  * ```
715
715
  */ this.disablePlugins = [];
716
716
  /**
717
- * Init and download extra plugins
717
+ * Init and download extra plugins that are **not** already bundled/registered.
718
+ *
719
+ * For every name in this list that is not found in the plugin registry, Jodit
720
+ * loads it **at runtime over the network** from:
721
+ *
722
+ * ```text
723
+ * <basePath>plugins/<name>/<name>(.min).js
724
+ * ```
725
+ *
726
+ * (see {@link Config.basePath} and {@link Config.minified}). If the plugin is
727
+ * already registered — e.g. you imported it statically, or you use a bundle
728
+ * that ships it (such as the `jodit-pro` / `jodit-pro-react` "all plugins"
729
+ * build) — it is **skipped** and no request is made; in that case you don't
730
+ * need `extraPlugins` at all, just add the plugin's button.
718
731
  *
719
732
  * ```typescript
720
- * var editor = Jodit.make('.editor', {
733
+ * // Dynamic loading: fetches <basePath>plugins/emoji/emoji.js
734
+ * const editor = Jodit.make('.editor', {
721
735
  * extraPlugins: ['emoji']
722
736
  * });
723
737
  * ```
724
- * It will try load %SCRIPT_PATH%/plugins/emoji/emoji.js and after load will try init it
738
+ *
739
+ * You can also pass an explicit URL to bypass the `basePath` convention:
740
+ *
741
+ * ```typescript
742
+ * const editor = Jodit.make('.editor', {
743
+ * extraPlugins: [{ name: 'emoji', url: 'https://cdn.example.com/emoji.js' }]
744
+ * });
745
+ * ```
746
+ *
747
+ * Note: if you see a request to a malformed URL (e.g. `.../src/main.tsx?t=...plugins/emoji/emoji.js`),
748
+ * it means `basePath` was auto-detected incorrectly under your bundler — set
749
+ * {@link Config.basePath} explicitly. See the Plugin System docs for details.
725
750
  */ this.extraPlugins = [];
726
751
  /**
727
752
  * Additional buttons appended to the {@link Config.buttons} list
@@ -1721,7 +1746,7 @@ __webpack_require__.r(__webpack_exports__);
1721
1746
  * ```
1722
1747
  * @packageDocumentation
1723
1748
  * @module constants
1724
- */ const APP_VERSION = "4.12.6";
1749
+ */ const APP_VERSION = "4.12.8";
1725
1750
  // prettier-ignore
1726
1751
  const ES = "es2021";
1727
1752
  const IS_ES_MODERN = true;
@@ -15113,8 +15138,9 @@ UISpacer = __decorate([
15113
15138
  /* harmony export */ Icon: function() { return /* binding */ Icon; }
15114
15139
  /* harmony export */ });
15115
15140
  /* harmony import */ var _constants_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(82758);
15116
- /* harmony import */ var _helpers_index_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(21537);
15117
- /* harmony import */ var _helpers_utils_css_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(41180);
15141
+ /* harmony import */ var _dom_dom_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(2748);
15142
+ /* harmony import */ var _helpers_index_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(21537);
15143
+ /* harmony import */ var _helpers_utils_css_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(41180);
15118
15144
  /*!
15119
15145
  * Jodit Editor (https://xdsoft.net/jodit/)
15120
15146
  * Released under MIT see LICENSE.txt in the project root for license information.
@@ -15122,12 +15148,13 @@ UISpacer = __decorate([
15122
15148
  */
15123
15149
 
15124
15150
 
15151
+
15125
15152
  class Icon {
15126
15153
  static getIcon(name) {
15127
15154
  if (/<svg/i.test(name)) {
15128
15155
  return name;
15129
15156
  }
15130
- const icon = Icon.icons[name] || Icon.icons[name.replace(/-/g, '_')] || Icon.icons[name.replace(/_/g, '-')] || Icon.icons[(0,_helpers_index_js__WEBPACK_IMPORTED_MODULE_1__.camelCase)(name)] || Icon.icons[(0,_helpers_index_js__WEBPACK_IMPORTED_MODULE_1__.kebabCase)(name)] || Icon.icons[name.toLowerCase()];
15157
+ const icon = Icon.icons[name] || Icon.icons[name.replace(/-/g, '_')] || Icon.icons[name.replace(/_/g, '-')] || Icon.icons[(0,_helpers_index_js__WEBPACK_IMPORTED_MODULE_2__.camelCase)(name)] || Icon.icons[(0,_helpers_index_js__WEBPACK_IMPORTED_MODULE_2__.kebabCase)(name)] || Icon.icons[name.toLowerCase()];
15131
15158
  if (!_constants_js__WEBPACK_IMPORTED_MODULE_0__.IS_PROD && !icon) {
15132
15159
  console.warn(`Icon "${name}" not found`);
15133
15160
  }
@@ -15169,11 +15196,11 @@ class Icon {
15169
15196
  }
15170
15197
  if (iconURL) {
15171
15198
  iconElement = jodit.c.span();
15172
- (0,_helpers_utils_css_js__WEBPACK_IMPORTED_MODULE_2__.css)(iconElement, 'backgroundImage', 'url(' + iconURL.replace('{basePath}', (jodit === null || jodit === void 0 ? void 0 : jodit.basePath) || '') + ')');
15199
+ (0,_helpers_utils_css_js__WEBPACK_IMPORTED_MODULE_3__.css)(iconElement, 'backgroundImage', 'url(' + iconURL.replace('{basePath}', (jodit === null || jodit === void 0 ? void 0 : jodit.basePath) || '') + ')');
15173
15200
  } else {
15174
15201
  const svg = iconFromEvent || Icon.get(name, '') || ((_d = jodit.o.extraIcons) === null || _d === void 0 ? void 0 : _d[name]);
15175
15202
  if (svg) {
15176
- iconElement = jodit.c.fromHTML(svg.trim());
15203
+ iconElement = Icon.toIconElement(jodit, svg.trim());
15177
15204
  if (!/^<svg/i.test(name)) {
15178
15205
  iconElement.classList.add('jodit-icon_' + clearName);
15179
15206
  }
@@ -15189,6 +15216,18 @@ class Icon {
15189
15216
  }
15190
15217
  return iconElement;
15191
15218
  }
15219
+ /**
15220
+ * Turn a raw icon string into an element with a `classList`.
15221
+ *
15222
+ * A plain-text icon (e.g. an emoji/text glyph) makes `fromHTML` return a
15223
+ * Text node, which has no `classList`; wrap it in a span so classes/styles
15224
+ * can be applied and `makeIcon` never crashes on `iconElement.classList`.
15225
+ * Note: SVG icons are `SVGElement` (not `HTMLElement`) but are still Element
15226
+ * nodes with a `classList`, so we check `isElement`, not `isHTMLElement`.
15227
+ */ static toIconElement(jodit, svg) {
15228
+ const node = jodit.c.fromHTML(svg);
15229
+ return _dom_dom_js__WEBPACK_IMPORTED_MODULE_1__.Dom.isElement(node) ? node : jodit.c.span('jodit-icon_text', node);
15230
+ }
15192
15231
  }
15193
15232
  Icon.icons = {};
15194
15233
  Icon.__cache = new Map();
@@ -45113,7 +45152,10 @@ _config_js__WEBPACK_IMPORTED_MODULE_5__.Config.prototype.controls.speechRecogniz
45113
45152
  api.on('result', (text)=>jodit.e.fire('speechRecognizeResult', text));
45114
45153
  api.on('progress', (text)=>jodit.e.fire('speechRecognizeProgressResult', text));
45115
45154
  api.on('error', (text)=>jodit.message.error(text));
45116
- button.hookStatus('beforeDestruct', ()=>{
45155
+ // Tie cleanup to the editor lifecycle (not the button): the manager
45156
+ // must survive toolbar rebuilds and be released — together with its
45157
+ // AudioContext — only when the editor itself is destroyed.
45158
+ jodit.hookStatus('beforeDestruct', ()=>{
45117
45159
  (0,_core_helpers_utils_data_bind_js__WEBPACK_IMPORTED_MODULE_3__.dataBind)(jodit, 'speech', null);
45118
45160
  api.destruct();
45119
45161
  });
@@ -45257,6 +45299,7 @@ class RecognizeManager extends _core_event_emitter_eventify_js__WEBPACK_IMPORTED
45257
45299
  }
45258
45300
  destruct() {
45259
45301
  this.stop();
45302
+ (0,_sound_js__WEBPACK_IMPORTED_MODULE_2__.closeSound)(this);
45260
45303
  RecognizeManager._instances.delete(this);
45261
45304
  super.destruct();
45262
45305
  }
@@ -45355,7 +45398,7 @@ class RecognizeManager extends _core_event_emitter_eventify_js__WEBPACK_IMPORTED
45355
45398
  }
45356
45399
  _makeSound(frequency) {
45357
45400
  if (this.sound) {
45358
- (0,_sound_js__WEBPACK_IMPORTED_MODULE_2__.sound)({
45401
+ (0,_sound_js__WEBPACK_IMPORTED_MODULE_2__.sound)(this, {
45359
45402
  frequency
45360
45403
  });
45361
45404
  }
@@ -45403,6 +45446,7 @@ __decorate([
45403
45446
  /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
45404
45447
 
45405
45448
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
45449
+ /* harmony export */ closeSound: function() { return /* binding */ closeSound; },
45406
45450
  /* harmony export */ sound: function() { return /* binding */ sound; }
45407
45451
  /* harmony export */ });
45408
45452
  /* harmony import */ var _core_constants_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(82758);
@@ -45416,22 +45460,59 @@ __decorate([
45416
45460
  */
45417
45461
 
45418
45462
  /**
45463
+ * One AudioContext per owner (e.g. a RecognizeManager). Previously a new context
45464
+ * was created on every beep and never closed, so during continuous recognition
45465
+ * they piled up — leaking until the browser's per-page limit was hit and the
45466
+ * overlapping audio turned into a "roar". We now reuse a single context per
45467
+ * owner and release it via {@link closeSound} when the owner is destroyed.
45419
45468
  * @internal
45420
- */ function sound({ sec = 0.1, frequency = _constants_js__WEBPACK_IMPORTED_MODULE_1__.PII, gain = 0.1, type = 'sine' } = {}) {
45421
- if (!_core_constants_js__WEBPACK_IMPORTED_MODULE_0__.globalWindow || typeof _core_constants_js__WEBPACK_IMPORTED_MODULE_0__.globalWindow.AudioContext === 'undefined' && typeof _core_constants_js__WEBPACK_IMPORTED_MODULE_0__.globalWindow.webkitAudioContext === 'undefined') {
45469
+ */ const contexts = new WeakMap();
45470
+ function getContext(owner) {
45471
+ if (!_core_constants_js__WEBPACK_IMPORTED_MODULE_0__.globalWindow) {
45472
+ return null;
45473
+ }
45474
+ const existing = contexts.get(owner);
45475
+ if (existing && existing.state !== 'closed') {
45476
+ return existing;
45477
+ }
45478
+ const Ctor = _core_constants_js__WEBPACK_IMPORTED_MODULE_0__.globalWindow.AudioContext || _core_constants_js__WEBPACK_IMPORTED_MODULE_0__.globalWindow.webkitAudioContext;
45479
+ if (!Ctor) {
45480
+ return null;
45481
+ }
45482
+ const context = new Ctor();
45483
+ contexts.set(owner, context);
45484
+ return context;
45485
+ }
45486
+ /**
45487
+ * Play a short beep on the owner's (lazily created, reused) AudioContext.
45488
+ * @internal
45489
+ */ function sound(owner, { sec = 0.1, frequency = _constants_js__WEBPACK_IMPORTED_MODULE_1__.PII, gain = 0.1, type = 'sine' } = {}) {
45490
+ const context = getContext(owner);
45491
+ if (!context) {
45422
45492
  return;
45423
45493
  }
45424
- // one context per document
45425
- const context = new (_core_constants_js__WEBPACK_IMPORTED_MODULE_0__.globalWindow.AudioContext || _core_constants_js__WEBPACK_IMPORTED_MODULE_0__.globalWindow.webkitAudioContext)();
45426
45494
  const vol = context.createGain();
45427
45495
  const osc = context.createOscillator();
45428
45496
  osc.type = type;
45429
45497
  osc.frequency.value = frequency; // Hz
45498
+ vol.gain.value = gain;
45430
45499
  osc.connect(vol);
45431
45500
  vol.connect(context.destination);
45432
45501
  osc.start(); // start the oscillator
45433
45502
  osc.stop(context.currentTime + sec);
45434
- vol.gain.value = gain;
45503
+ }
45504
+ /**
45505
+ * Close and forget the owner's AudioContext. Call this when the owner is
45506
+ * destroyed so the context does not leak.
45507
+ * @internal
45508
+ */ function closeSound(owner) {
45509
+ const context = contexts.get(owner);
45510
+ if (context) {
45511
+ contexts.delete(owner);
45512
+ if (context.state !== 'closed') {
45513
+ void context.close();
45514
+ }
45515
+ }
45435
45516
  }
45436
45517
 
45437
45518