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/es2015/jodit.js CHANGED
@@ -1,7 +1,7 @@
1
1
  /*!
2
2
  * jodit-pro - PRO Version of Jodit Editor
3
3
  * Author: Chupurnov Valerii <chupurnov@gmail.com>
4
- * Version: v4.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
@@ -1772,7 +1797,7 @@ __webpack_require__.r(__webpack_exports__);
1772
1797
  * ```
1773
1798
  * @packageDocumentation
1774
1799
  * @module constants
1775
- */ const APP_VERSION = "4.12.6";
1800
+ */ const APP_VERSION = "4.12.8";
1776
1801
  // prettier-ignore
1777
1802
  const ES = "es2015";
1778
1803
  const IS_ES_MODERN = true;
@@ -15765,8 +15790,9 @@ function _object_spread(target) {
15765
15790
  /* harmony export */ Icon: function() { return /* binding */ Icon; }
15766
15791
  /* harmony export */ });
15767
15792
  /* harmony import */ var _constants_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(82758);
15768
- /* harmony import */ var _helpers_index_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(21537);
15769
- /* harmony import */ var _helpers_utils_css_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(41180);
15793
+ /* harmony import */ var _dom_dom_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(2748);
15794
+ /* harmony import */ var _helpers_index_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(21537);
15795
+ /* harmony import */ var _helpers_utils_css_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(41180);
15770
15796
  /*!
15771
15797
  * Jodit Editor (https://xdsoft.net/jodit/)
15772
15798
  * Released under MIT see LICENSE.txt in the project root for license information.
@@ -15774,12 +15800,13 @@ function _object_spread(target) {
15774
15800
  */
15775
15801
 
15776
15802
 
15803
+
15777
15804
  class Icon {
15778
15805
  static getIcon(name) {
15779
15806
  if (/<svg/i.test(name)) {
15780
15807
  return name;
15781
15808
  }
15782
- 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()];
15809
+ 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()];
15783
15810
  if (!_constants_js__WEBPACK_IMPORTED_MODULE_0__.IS_PROD && !icon) {
15784
15811
  console.warn(`Icon "${name}" not found`);
15785
15812
  }
@@ -15821,11 +15848,11 @@ class Icon {
15821
15848
  }
15822
15849
  if (iconURL) {
15823
15850
  iconElement = jodit.c.span();
15824
- (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) || '') + ')');
15851
+ (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) || '') + ')');
15825
15852
  } else {
15826
15853
  const svg = iconFromEvent || Icon.get(name, '') || ((_d = jodit.o.extraIcons) === null || _d === void 0 ? void 0 : _d[name]);
15827
15854
  if (svg) {
15828
- iconElement = jodit.c.fromHTML(svg.trim());
15855
+ iconElement = Icon.toIconElement(jodit, svg.trim());
15829
15856
  if (!/^<svg/i.test(name)) {
15830
15857
  iconElement.classList.add('jodit-icon_' + clearName);
15831
15858
  }
@@ -15841,6 +15868,18 @@ class Icon {
15841
15868
  }
15842
15869
  return iconElement;
15843
15870
  }
15871
+ /**
15872
+ * Turn a raw icon string into an element with a `classList`.
15873
+ *
15874
+ * A plain-text icon (e.g. an emoji/text glyph) makes `fromHTML` return a
15875
+ * Text node, which has no `classList`; wrap it in a span so classes/styles
15876
+ * can be applied and `makeIcon` never crashes on `iconElement.classList`.
15877
+ * Note: SVG icons are `SVGElement` (not `HTMLElement`) but are still Element
15878
+ * nodes with a `classList`, so we check `isElement`, not `isHTMLElement`.
15879
+ */ static toIconElement(jodit, svg) {
15880
+ const node = jodit.c.fromHTML(svg);
15881
+ return _dom_dom_js__WEBPACK_IMPORTED_MODULE_1__.Dom.isElement(node) ? node : jodit.c.span('jodit-icon_text', node);
15882
+ }
15844
15883
  }
15845
15884
  Icon.icons = {};
15846
15885
  Icon.__cache = new Map();
@@ -46559,7 +46598,10 @@ _config_js__WEBPACK_IMPORTED_MODULE_5__.Config.prototype.controls.speechRecogniz
46559
46598
  api.on('result', (text)=>jodit.e.fire('speechRecognizeResult', text));
46560
46599
  api.on('progress', (text)=>jodit.e.fire('speechRecognizeProgressResult', text));
46561
46600
  api.on('error', (text)=>jodit.message.error(text));
46562
- button.hookStatus('beforeDestruct', ()=>{
46601
+ // Tie cleanup to the editor lifecycle (not the button): the manager
46602
+ // must survive toolbar rebuilds and be released — together with its
46603
+ // AudioContext — only when the editor itself is destroyed.
46604
+ jodit.hookStatus('beforeDestruct', ()=>{
46563
46605
  (0,_core_helpers_utils_data_bind_js__WEBPACK_IMPORTED_MODULE_3__.dataBind)(jodit, 'speech', null);
46564
46606
  api.destruct();
46565
46607
  });
@@ -46703,6 +46745,7 @@ class RecognizeManager extends _core_event_emitter_eventify_js__WEBPACK_IMPORTED
46703
46745
  }
46704
46746
  destruct() {
46705
46747
  this.stop();
46748
+ (0,_sound_js__WEBPACK_IMPORTED_MODULE_2__.closeSound)(this);
46706
46749
  RecognizeManager._instances.delete(this);
46707
46750
  super.destruct();
46708
46751
  }
@@ -46801,7 +46844,7 @@ class RecognizeManager extends _core_event_emitter_eventify_js__WEBPACK_IMPORTED
46801
46844
  }
46802
46845
  _makeSound(frequency) {
46803
46846
  if (this.sound) {
46804
- (0,_sound_js__WEBPACK_IMPORTED_MODULE_2__.sound)({
46847
+ (0,_sound_js__WEBPACK_IMPORTED_MODULE_2__.sound)(this, {
46805
46848
  frequency
46806
46849
  });
46807
46850
  }
@@ -46849,6 +46892,7 @@ __decorate([
46849
46892
  /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
46850
46893
 
46851
46894
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
46895
+ /* harmony export */ closeSound: function() { return /* binding */ closeSound; },
46852
46896
  /* harmony export */ sound: function() { return /* binding */ sound; }
46853
46897
  /* harmony export */ });
46854
46898
  /* harmony import */ var _core_constants_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(82758);
@@ -46862,22 +46906,59 @@ __decorate([
46862
46906
  */
46863
46907
 
46864
46908
  /**
46909
+ * One AudioContext per owner (e.g. a RecognizeManager). Previously a new context
46910
+ * was created on every beep and never closed, so during continuous recognition
46911
+ * they piled up — leaking until the browser's per-page limit was hit and the
46912
+ * overlapping audio turned into a "roar". We now reuse a single context per
46913
+ * owner and release it via {@link closeSound} when the owner is destroyed.
46865
46914
  * @internal
46866
- */ function sound({ sec = 0.1, frequency = _constants_js__WEBPACK_IMPORTED_MODULE_1__.PII, gain = 0.1, type = 'sine' } = {}) {
46867
- 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') {
46915
+ */ const contexts = new WeakMap();
46916
+ function getContext(owner) {
46917
+ if (!_core_constants_js__WEBPACK_IMPORTED_MODULE_0__.globalWindow) {
46918
+ return null;
46919
+ }
46920
+ const existing = contexts.get(owner);
46921
+ if (existing && existing.state !== 'closed') {
46922
+ return existing;
46923
+ }
46924
+ const Ctor = _core_constants_js__WEBPACK_IMPORTED_MODULE_0__.globalWindow.AudioContext || _core_constants_js__WEBPACK_IMPORTED_MODULE_0__.globalWindow.webkitAudioContext;
46925
+ if (!Ctor) {
46926
+ return null;
46927
+ }
46928
+ const context = new Ctor();
46929
+ contexts.set(owner, context);
46930
+ return context;
46931
+ }
46932
+ /**
46933
+ * Play a short beep on the owner's (lazily created, reused) AudioContext.
46934
+ * @internal
46935
+ */ function sound(owner, { sec = 0.1, frequency = _constants_js__WEBPACK_IMPORTED_MODULE_1__.PII, gain = 0.1, type = 'sine' } = {}) {
46936
+ const context = getContext(owner);
46937
+ if (!context) {
46868
46938
  return;
46869
46939
  }
46870
- // one context per document
46871
- const context = new (_core_constants_js__WEBPACK_IMPORTED_MODULE_0__.globalWindow.AudioContext || _core_constants_js__WEBPACK_IMPORTED_MODULE_0__.globalWindow.webkitAudioContext)();
46872
46940
  const vol = context.createGain();
46873
46941
  const osc = context.createOscillator();
46874
46942
  osc.type = type;
46875
46943
  osc.frequency.value = frequency; // Hz
46944
+ vol.gain.value = gain;
46876
46945
  osc.connect(vol);
46877
46946
  vol.connect(context.destination);
46878
46947
  osc.start(); // start the oscillator
46879
46948
  osc.stop(context.currentTime + sec);
46880
- vol.gain.value = gain;
46949
+ }
46950
+ /**
46951
+ * Close and forget the owner's AudioContext. Call this when the owner is
46952
+ * destroyed so the context does not leak.
46953
+ * @internal
46954
+ */ function closeSound(owner) {
46955
+ const context = contexts.get(owner);
46956
+ if (context) {
46957
+ contexts.delete(owner);
46958
+ if (context.state !== 'closed') {
46959
+ void context.close();
46960
+ }
46961
+ }
46881
46962
  }
46882
46963
 
46883
46964