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/es5/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
  */
@@ -729,14 +729,39 @@ var ConfigPrototype = {};
729
729
  * ```
730
730
  */ this.disablePlugins = [];
731
731
  /**
732
- * Init and download extra plugins
732
+ * Init and download extra plugins that are **not** already bundled/registered.
733
+ *
734
+ * For every name in this list that is not found in the plugin registry, Jodit
735
+ * loads it **at runtime over the network** from:
736
+ *
737
+ * ```text
738
+ * <basePath>plugins/<name>/<name>(.min).js
739
+ * ```
740
+ *
741
+ * (see {@link Config.basePath} and {@link Config.minified}). If the plugin is
742
+ * already registered — e.g. you imported it statically, or you use a bundle
743
+ * that ships it (such as the `jodit-pro` / `jodit-pro-react` "all plugins"
744
+ * build) — it is **skipped** and no request is made; in that case you don't
745
+ * need `extraPlugins` at all, just add the plugin's button.
733
746
  *
734
747
  * ```typescript
735
- * var editor = Jodit.make('.editor', {
748
+ * // Dynamic loading: fetches <basePath>plugins/emoji/emoji.js
749
+ * const editor = Jodit.make('.editor', {
736
750
  * extraPlugins: ['emoji']
737
751
  * });
738
752
  * ```
739
- * It will try load %SCRIPT_PATH%/plugins/emoji/emoji.js and after load will try init it
753
+ *
754
+ * You can also pass an explicit URL to bypass the `basePath` convention:
755
+ *
756
+ * ```typescript
757
+ * const editor = Jodit.make('.editor', {
758
+ * extraPlugins: [{ name: 'emoji', url: 'https://cdn.example.com/emoji.js' }]
759
+ * });
760
+ * ```
761
+ *
762
+ * Note: if you see a request to a malformed URL (e.g. `.../src/main.tsx?t=...plugins/emoji/emoji.js`),
763
+ * it means `basePath` was auto-detected incorrectly under your bundler — set
764
+ * {@link Config.basePath} explicitly. See the Plugin System docs for details.
740
765
  */ this.extraPlugins = [];
741
766
  /**
742
767
  * Additional buttons appended to the {@link Config.buttons} list
@@ -2233,7 +2258,7 @@ function _unsupported_iterable_to_array(o, minLen) {
2233
2258
  if (n === "Map" || n === "Set") return Array.from(n);
2234
2259
  if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _array_like_to_array(o, minLen);
2235
2260
  }
2236
- var APP_VERSION = "4.12.6";
2261
+ var APP_VERSION = "4.12.8";
2237
2262
  // prettier-ignore
2238
2263
  var ES = "es5";
2239
2264
  var IS_ES_MODERN = false;
@@ -22334,8 +22359,9 @@ function _unsupported_iterable_to_array(o, minLen) {
22334
22359
  /* harmony export */ Icon: function() { return /* binding */ Icon; }
22335
22360
  /* harmony export */ });
22336
22361
  /* harmony import */ var _constants_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(82758);
22337
- /* harmony import */ var _helpers_index_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(21537);
22338
- /* harmony import */ var _helpers_utils_css_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(41180);
22362
+ /* harmony import */ var _dom_dom_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(2748);
22363
+ /* harmony import */ var _helpers_index_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(21537);
22364
+ /* harmony import */ var _helpers_utils_css_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(41180);
22339
22365
  function _class_call_check(instance, Constructor) {
22340
22366
  if (!(instance instanceof Constructor)) {
22341
22367
  throw new TypeError("Cannot call a class as a function");
@@ -22362,6 +22388,7 @@ function _create_class(Constructor, protoProps, staticProps) {
22362
22388
  */
22363
22389
 
22364
22390
 
22391
+
22365
22392
  var Icon = /*#__PURE__*/ function() {
22366
22393
  "use strict";
22367
22394
  function Icon() {
@@ -22374,7 +22401,7 @@ var Icon = /*#__PURE__*/ function() {
22374
22401
  if (/<svg/i.test(name)) {
22375
22402
  return name;
22376
22403
  }
22377
- var 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()];
22404
+ var 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()];
22378
22405
  if (!_constants_js__WEBPACK_IMPORTED_MODULE_0__.IS_PROD && !icon) {
22379
22406
  console.warn('Icon "'.concat(name, '" not found'));
22380
22407
  }
@@ -22429,11 +22456,11 @@ var Icon = /*#__PURE__*/ function() {
22429
22456
  }
22430
22457
  if (iconURL) {
22431
22458
  iconElement = jodit.c.span();
22432
- (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) || '') + ')');
22459
+ (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) || '') + ')');
22433
22460
  } else {
22434
22461
  var svg = iconFromEvent || Icon.get(name, '') || ((_d = jodit.o.extraIcons) === null || _d === void 0 ? void 0 : _d[name]);
22435
22462
  if (svg) {
22436
- iconElement = jodit.c.fromHTML(svg.trim());
22463
+ iconElement = Icon.toIconElement(jodit, svg.trim());
22437
22464
  if (!/^<svg/i.test(name)) {
22438
22465
  iconElement.classList.add('jodit-icon_' + clearName);
22439
22466
  }
@@ -22449,6 +22476,21 @@ var Icon = /*#__PURE__*/ function() {
22449
22476
  }
22450
22477
  return iconElement;
22451
22478
  }
22479
+ },
22480
+ {
22481
+ key: "toIconElement",
22482
+ value: /**
22483
+ * Turn a raw icon string into an element with a `classList`.
22484
+ *
22485
+ * A plain-text icon (e.g. an emoji/text glyph) makes `fromHTML` return a
22486
+ * Text node, which has no `classList`; wrap it in a span so classes/styles
22487
+ * can be applied and `makeIcon` never crashes on `iconElement.classList`.
22488
+ * Note: SVG icons are `SVGElement` (not `HTMLElement`) but are still Element
22489
+ * nodes with a `classList`, so we check `isElement`, not `isHTMLElement`.
22490
+ */ function toIconElement(jodit, svg) {
22491
+ var node = jodit.c.fromHTML(svg);
22492
+ return _dom_dom_js__WEBPACK_IMPORTED_MODULE_1__.Dom.isElement(node) ? node : jodit.c.span('jodit-icon_text', node);
22493
+ }
22452
22494
  }
22453
22495
  ]);
22454
22496
  return Icon;
@@ -65949,7 +65991,10 @@ _config_js__WEBPACK_IMPORTED_MODULE_5__.Config.prototype.controls.speechRecogniz
65949
65991
  api.on('error', function(text) {
65950
65992
  return jodit.message.error(text);
65951
65993
  });
65952
- button.hookStatus('beforeDestruct', function() {
65994
+ // Tie cleanup to the editor lifecycle (not the button): the manager
65995
+ // must survive toolbar rebuilds and be released — together with its
65996
+ // AudioContext — only when the editor itself is destroyed.
65997
+ jodit.hookStatus('beforeDestruct', function() {
65953
65998
  (0,_core_helpers_utils_data_bind_js__WEBPACK_IMPORTED_MODULE_3__.dataBind)(jodit, 'speech', null);
65954
65999
  api.destruct();
65955
66000
  });
@@ -66276,6 +66321,7 @@ var RecognizeManager = /*#__PURE__*/ function(Eventify) {
66276
66321
  key: "destruct",
66277
66322
  value: function destruct() {
66278
66323
  this.stop();
66324
+ (0,_sound_js__WEBPACK_IMPORTED_MODULE_2__.closeSound)(this);
66279
66325
  RecognizeManager._instances.delete(this);
66280
66326
  _get(_get_prototype_of(RecognizeManager.prototype), "destruct", this).call(this);
66281
66327
  }
@@ -66408,7 +66454,7 @@ var RecognizeManager = /*#__PURE__*/ function(Eventify) {
66408
66454
  key: "_makeSound",
66409
66455
  value: function _makeSound(frequency) {
66410
66456
  if (this.sound) {
66411
- (0,_sound_js__WEBPACK_IMPORTED_MODULE_2__.sound)({
66457
+ (0,_sound_js__WEBPACK_IMPORTED_MODULE_2__.sound)(this, {
66412
66458
  frequency: frequency
66413
66459
  });
66414
66460
  }
@@ -66435,6 +66481,7 @@ __decorate([
66435
66481
  /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
66436
66482
 
66437
66483
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
66484
+ /* harmony export */ closeSound: function() { return /* binding */ closeSound; },
66438
66485
  /* harmony export */ sound: function() { return /* binding */ sound; }
66439
66486
  /* harmony export */ });
66440
66487
  /* harmony import */ var _core_constants_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(82758);
@@ -66448,23 +66495,60 @@ __decorate([
66448
66495
  */
66449
66496
 
66450
66497
  /**
66498
+ * One AudioContext per owner (e.g. a RecognizeManager). Previously a new context
66499
+ * was created on every beep and never closed, so during continuous recognition
66500
+ * they piled up — leaking until the browser's per-page limit was hit and the
66501
+ * overlapping audio turned into a "roar". We now reuse a single context per
66502
+ * owner and release it via {@link closeSound} when the owner is destroyed.
66503
+ * @internal
66504
+ */ var contexts = new WeakMap();
66505
+ function getContext(owner) {
66506
+ if (!_core_constants_js__WEBPACK_IMPORTED_MODULE_0__.globalWindow) {
66507
+ return null;
66508
+ }
66509
+ var existing = contexts.get(owner);
66510
+ if (existing && existing.state !== 'closed') {
66511
+ return existing;
66512
+ }
66513
+ var Ctor = _core_constants_js__WEBPACK_IMPORTED_MODULE_0__.globalWindow.AudioContext || _core_constants_js__WEBPACK_IMPORTED_MODULE_0__.globalWindow.webkitAudioContext;
66514
+ if (!Ctor) {
66515
+ return null;
66516
+ }
66517
+ var context = new Ctor();
66518
+ contexts.set(owner, context);
66519
+ return context;
66520
+ }
66521
+ /**
66522
+ * Play a short beep on the owner's (lazily created, reused) AudioContext.
66451
66523
  * @internal
66452
- */ function sound() {
66453
- var _ref = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {}, _ref_sec = _ref.sec, sec = _ref_sec === void 0 ? 0.1 : _ref_sec, _ref_frequency = _ref.frequency, frequency = _ref_frequency === void 0 ? _constants_js__WEBPACK_IMPORTED_MODULE_1__.PII : _ref_frequency, _ref_gain = _ref.gain, gain = _ref_gain === void 0 ? 0.1 : _ref_gain, _ref_type = _ref.type, type = _ref_type === void 0 ? 'sine' : _ref_type;
66454
- 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') {
66524
+ */ function sound(owner) {
66525
+ var _ref = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {}, _ref_sec = _ref.sec, sec = _ref_sec === void 0 ? 0.1 : _ref_sec, _ref_frequency = _ref.frequency, frequency = _ref_frequency === void 0 ? _constants_js__WEBPACK_IMPORTED_MODULE_1__.PII : _ref_frequency, _ref_gain = _ref.gain, gain = _ref_gain === void 0 ? 0.1 : _ref_gain, _ref_type = _ref.type, type = _ref_type === void 0 ? 'sine' : _ref_type;
66526
+ var context = getContext(owner);
66527
+ if (!context) {
66455
66528
  return;
66456
66529
  }
66457
- // one context per document
66458
- var context = new (_core_constants_js__WEBPACK_IMPORTED_MODULE_0__.globalWindow.AudioContext || _core_constants_js__WEBPACK_IMPORTED_MODULE_0__.globalWindow.webkitAudioContext)();
66459
66530
  var vol = context.createGain();
66460
66531
  var osc = context.createOscillator();
66461
66532
  osc.type = type;
66462
66533
  osc.frequency.value = frequency; // Hz
66534
+ vol.gain.value = gain;
66463
66535
  osc.connect(vol);
66464
66536
  vol.connect(context.destination);
66465
66537
  osc.start(); // start the oscillator
66466
66538
  osc.stop(context.currentTime + sec);
66467
- vol.gain.value = gain;
66539
+ }
66540
+ /**
66541
+ * Close and forget the owner's AudioContext. Call this when the owner is
66542
+ * destroyed so the context does not leak.
66543
+ * @internal
66544
+ */ function closeSound(owner) {
66545
+ var context = contexts.get(owner);
66546
+ if (context) {
66547
+ contexts.delete(owner);
66548
+ if (context.state !== 'closed') {
66549
+ void context.close();
66550
+ }
66551
+ }
66468
66552
  }
66469
66553
 
66470
66554
 
package/es5/jodit.min.css CHANGED
@@ -1,14 +1,14 @@
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
  */
8
8
  /*!
9
9
  * jodit-pro - PRO Version of Jodit Editor
10
10
  * Author: Chupurnov Valerii <chupurnov@gmail.com>
11
- * Version: v4.12.6
11
+ * Version: v4.12.8
12
12
  * Url: https://xdsoft.net/jodit/pro/
13
13
  * License(s): SEE LICENSE IN LICENSE.md
14
14
  */