jodit-pro 4.13.15 → 4.13.17

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (325) hide show
  1. package/es2015/jodit.css +2 -2
  2. package/es2015/jodit.fat.min.css +1 -1
  3. package/es2015/jodit.fat.min.js +3 -3
  4. package/es2015/jodit.js +192 -20
  5. package/es2015/jodit.min.css +1 -1
  6. package/es2015/jodit.min.js +3 -3
  7. package/es2015/plugins/ai-assistant-pro/ai-assistant-pro.css +1 -1
  8. package/es2015/plugins/ai-assistant-pro/ai-assistant-pro.js +1 -1
  9. package/es2015/plugins/ai-assistant-pro/ai-assistant-pro.min.js +1 -1
  10. package/es2015/plugins/autocomplete/autocomplete.css +1 -1
  11. package/es2015/plugins/autocomplete/autocomplete.js +1 -1
  12. package/es2015/plugins/autocomplete/autocomplete.min.js +1 -1
  13. package/es2015/plugins/backup/backup.css +1 -1
  14. package/es2015/plugins/backup/backup.js +1 -1
  15. package/es2015/plugins/backup/backup.min.js +1 -1
  16. package/es2015/plugins/button-generator/button-generator.css +1 -1
  17. package/es2015/plugins/button-generator/button-generator.js +1 -1
  18. package/es2015/plugins/button-generator/button-generator.min.js +1 -1
  19. package/es2015/plugins/change-case/change-case.js +1 -1
  20. package/es2015/plugins/change-case/change-case.min.js +1 -1
  21. package/es2015/plugins/color-picker/color-picker.css +1 -1
  22. package/es2015/plugins/color-picker/color-picker.js +1 -1
  23. package/es2015/plugins/color-picker/color-picker.min.js +1 -1
  24. package/es2015/plugins/emoji/emoji.css +1 -1
  25. package/es2015/plugins/emoji/emoji.js +1 -1
  26. package/es2015/plugins/emoji/emoji.min.js +1 -1
  27. package/es2015/plugins/export-docs/export-docs.js +1 -1
  28. package/es2015/plugins/export-docs/export-docs.min.js +1 -1
  29. package/es2015/plugins/finder/finder.css +1 -1
  30. package/es2015/plugins/finder/finder.js +1 -1
  31. package/es2015/plugins/finder/finder.min.js +1 -1
  32. package/es2015/plugins/google-maps/google-maps.css +1 -1
  33. package/es2015/plugins/google-maps/google-maps.js +1 -1
  34. package/es2015/plugins/google-maps/google-maps.min.js +1 -1
  35. package/es2015/plugins/google-search/google-search.js +1 -1
  36. package/es2015/plugins/google-search/google-search.min.js +1 -1
  37. package/es2015/plugins/highlight-signature/highlight-signature.js +1 -1
  38. package/es2015/plugins/highlight-signature/highlight-signature.min.js +1 -1
  39. package/es2015/plugins/iframe-editor/iframe-editor.css +1 -1
  40. package/es2015/plugins/iframe-editor/iframe-editor.js +1 -1
  41. package/es2015/plugins/iframe-editor/iframe-editor.min.js +1 -1
  42. package/es2015/plugins/image-editor-pro/image-editor-pro.css +1 -1
  43. package/es2015/plugins/image-editor-pro/image-editor-pro.js +1 -1
  44. package/es2015/plugins/image-editor-pro/image-editor-pro.min.js +1 -1
  45. package/es2015/plugins/keyboard/keyboard.css +1 -1
  46. package/es2015/plugins/keyboard/keyboard.js +1 -1
  47. package/es2015/plugins/keyboard/keyboard.min.js +1 -1
  48. package/es2015/plugins/mobile-view/mobile-view.js +1 -1
  49. package/es2015/plugins/mobile-view/mobile-view.min.js +1 -1
  50. package/es2015/plugins/page-break/page-break.js +1 -1
  51. package/es2015/plugins/page-break/page-break.min.js +1 -1
  52. package/es2015/plugins/paste-code/paste-code.css +1 -1
  53. package/es2015/plugins/paste-code/paste-code.js +1 -1
  54. package/es2015/plugins/paste-code/paste-code.min.js +1 -1
  55. package/es2015/plugins/paste-from-word/paste-from-word.js +1 -1
  56. package/es2015/plugins/paste-from-word/paste-from-word.min.js +1 -1
  57. package/es2015/plugins/show-blocks/show-blocks.js +1 -1
  58. package/es2015/plugins/show-blocks/show-blocks.min.js +1 -1
  59. package/es2015/plugins/style/style.css +1 -1
  60. package/es2015/plugins/style/style.js +1 -1
  61. package/es2015/plugins/style/style.min.js +1 -1
  62. package/es2015/plugins/templates/templates.css +1 -1
  63. package/es2015/plugins/templates/templates.js +1 -1
  64. package/es2015/plugins/templates/templates.min.js +1 -1
  65. package/es2015/plugins/todo-list/todo-list.css +1 -1
  66. package/es2015/plugins/todo-list/todo-list.js +1 -1
  67. package/es2015/plugins/todo-list/todo-list.min.js +1 -1
  68. package/es2015/plugins/translate/translate.css +1 -1
  69. package/es2015/plugins/translate/translate.js +1 -1
  70. package/es2015/plugins/translate/translate.min.js +1 -1
  71. package/es2015/plugins/tune-block/tune-block.css +1 -1
  72. package/es2015/plugins/tune-block/tune-block.js +1 -1
  73. package/es2015/plugins/tune-block/tune-block.min.js +1 -1
  74. package/es2018/jodit.fat.min.css +1 -1
  75. package/es2018/jodit.fat.min.js +18 -18
  76. package/es2018/jodit.min.css +1 -1
  77. package/es2018/jodit.min.js +3 -3
  78. package/es2018/plugins/ai-assistant-pro/ai-assistant-pro.min.js +1 -1
  79. package/es2018/plugins/autocomplete/autocomplete.min.js +1 -1
  80. package/es2018/plugins/backup/backup.min.js +1 -1
  81. package/es2018/plugins/button-generator/button-generator.min.js +1 -1
  82. package/es2018/plugins/change-case/change-case.min.js +1 -1
  83. package/es2018/plugins/color-picker/color-picker.min.js +1 -1
  84. package/es2018/plugins/emoji/emoji.min.js +1 -1
  85. package/es2018/plugins/export-docs/export-docs.min.js +1 -1
  86. package/es2018/plugins/finder/finder.min.js +1 -1
  87. package/es2018/plugins/google-maps/google-maps.min.js +1 -1
  88. package/es2018/plugins/google-search/google-search.min.js +1 -1
  89. package/es2018/plugins/highlight-signature/highlight-signature.min.js +1 -1
  90. package/es2018/plugins/iframe-editor/iframe-editor.min.js +1 -1
  91. package/es2018/plugins/image-editor-pro/image-editor-pro.min.js +1 -1
  92. package/es2018/plugins/keyboard/keyboard.min.js +1 -1
  93. package/es2018/plugins/mobile-view/mobile-view.min.js +1 -1
  94. package/es2018/plugins/page-break/page-break.min.js +1 -1
  95. package/es2018/plugins/paste-code/paste-code.min.js +1 -1
  96. package/es2018/plugins/paste-from-word/paste-from-word.min.js +1 -1
  97. package/es2018/plugins/show-blocks/show-blocks.min.js +1 -1
  98. package/es2018/plugins/style/style.min.js +1 -1
  99. package/es2018/plugins/templates/templates.min.js +1 -1
  100. package/es2018/plugins/todo-list/todo-list.min.js +1 -1
  101. package/es2018/plugins/translate/translate.min.js +1 -1
  102. package/es2018/plugins/tune-block/tune-block.min.js +1 -1
  103. package/es2021/jodit.css +2 -2
  104. package/es2021/jodit.fat.min.css +1 -1
  105. package/es2021/jodit.fat.min.js +5 -5
  106. package/es2021/jodit.js +192 -20
  107. package/es2021/jodit.min.css +1 -1
  108. package/es2021/jodit.min.js +5 -5
  109. package/es2021/plugins/ai-assistant-pro/ai-assistant-pro.css +1 -1
  110. package/es2021/plugins/ai-assistant-pro/ai-assistant-pro.js +1 -1
  111. package/es2021/plugins/ai-assistant-pro/ai-assistant-pro.min.js +1 -1
  112. package/es2021/plugins/autocomplete/autocomplete.css +1 -1
  113. package/es2021/plugins/autocomplete/autocomplete.js +1 -1
  114. package/es2021/plugins/autocomplete/autocomplete.min.js +1 -1
  115. package/es2021/plugins/backup/backup.css +1 -1
  116. package/es2021/plugins/backup/backup.js +1 -1
  117. package/es2021/plugins/backup/backup.min.js +1 -1
  118. package/es2021/plugins/button-generator/button-generator.css +1 -1
  119. package/es2021/plugins/button-generator/button-generator.js +1 -1
  120. package/es2021/plugins/button-generator/button-generator.min.js +1 -1
  121. package/es2021/plugins/change-case/change-case.js +1 -1
  122. package/es2021/plugins/change-case/change-case.min.js +1 -1
  123. package/es2021/plugins/color-picker/color-picker.css +1 -1
  124. package/es2021/plugins/color-picker/color-picker.js +1 -1
  125. package/es2021/plugins/color-picker/color-picker.min.js +1 -1
  126. package/es2021/plugins/emoji/emoji.css +1 -1
  127. package/es2021/plugins/emoji/emoji.js +1 -1
  128. package/es2021/plugins/emoji/emoji.min.js +1 -1
  129. package/es2021/plugins/export-docs/export-docs.js +1 -1
  130. package/es2021/plugins/export-docs/export-docs.min.js +1 -1
  131. package/es2021/plugins/finder/finder.css +1 -1
  132. package/es2021/plugins/finder/finder.js +1 -1
  133. package/es2021/plugins/finder/finder.min.js +1 -1
  134. package/es2021/plugins/google-maps/google-maps.css +1 -1
  135. package/es2021/plugins/google-maps/google-maps.js +1 -1
  136. package/es2021/plugins/google-maps/google-maps.min.js +1 -1
  137. package/es2021/plugins/google-search/google-search.js +1 -1
  138. package/es2021/plugins/google-search/google-search.min.js +1 -1
  139. package/es2021/plugins/highlight-signature/highlight-signature.js +1 -1
  140. package/es2021/plugins/highlight-signature/highlight-signature.min.js +1 -1
  141. package/es2021/plugins/iframe-editor/iframe-editor.css +1 -1
  142. package/es2021/plugins/iframe-editor/iframe-editor.js +1 -1
  143. package/es2021/plugins/iframe-editor/iframe-editor.min.js +1 -1
  144. package/es2021/plugins/image-editor-pro/image-editor-pro.css +1 -1
  145. package/es2021/plugins/image-editor-pro/image-editor-pro.js +1 -1
  146. package/es2021/plugins/image-editor-pro/image-editor-pro.min.js +1 -1
  147. package/es2021/plugins/keyboard/keyboard.css +1 -1
  148. package/es2021/plugins/keyboard/keyboard.js +1 -1
  149. package/es2021/plugins/keyboard/keyboard.min.js +1 -1
  150. package/es2021/plugins/mobile-view/mobile-view.js +1 -1
  151. package/es2021/plugins/mobile-view/mobile-view.min.js +1 -1
  152. package/es2021/plugins/page-break/page-break.js +1 -1
  153. package/es2021/plugins/page-break/page-break.min.js +1 -1
  154. package/es2021/plugins/paste-code/paste-code.css +1 -1
  155. package/es2021/plugins/paste-code/paste-code.js +1 -1
  156. package/es2021/plugins/paste-code/paste-code.min.js +1 -1
  157. package/es2021/plugins/paste-from-word/paste-from-word.js +1 -1
  158. package/es2021/plugins/paste-from-word/paste-from-word.min.js +1 -1
  159. package/es2021/plugins/show-blocks/show-blocks.js +1 -1
  160. package/es2021/plugins/show-blocks/show-blocks.min.js +1 -1
  161. package/es2021/plugins/style/style.css +1 -1
  162. package/es2021/plugins/style/style.js +1 -1
  163. package/es2021/plugins/style/style.min.js +1 -1
  164. package/es2021/plugins/templates/templates.css +1 -1
  165. package/es2021/plugins/templates/templates.js +1 -1
  166. package/es2021/plugins/templates/templates.min.js +1 -1
  167. package/es2021/plugins/todo-list/todo-list.css +1 -1
  168. package/es2021/plugins/todo-list/todo-list.js +1 -1
  169. package/es2021/plugins/todo-list/todo-list.min.js +1 -1
  170. package/es2021/plugins/translate/translate.css +1 -1
  171. package/es2021/plugins/translate/translate.js +1 -1
  172. package/es2021/plugins/translate/translate.min.js +1 -1
  173. package/es2021/plugins/tune-block/tune-block.css +1 -1
  174. package/es2021/plugins/tune-block/tune-block.js +1 -1
  175. package/es2021/plugins/tune-block/tune-block.min.js +1 -1
  176. package/es2021.en/jodit.css +2 -2
  177. package/es2021.en/jodit.fat.min.css +1 -1
  178. package/es2021.en/jodit.fat.min.js +5 -5
  179. package/es2021.en/jodit.js +192 -20
  180. package/es2021.en/jodit.min.css +1 -1
  181. package/es2021.en/jodit.min.js +5 -5
  182. package/es2021.en/plugins/ai-assistant-pro/ai-assistant-pro.css +1 -1
  183. package/es2021.en/plugins/ai-assistant-pro/ai-assistant-pro.js +1 -1
  184. package/es2021.en/plugins/ai-assistant-pro/ai-assistant-pro.min.js +1 -1
  185. package/es2021.en/plugins/autocomplete/autocomplete.css +1 -1
  186. package/es2021.en/plugins/autocomplete/autocomplete.js +1 -1
  187. package/es2021.en/plugins/autocomplete/autocomplete.min.js +1 -1
  188. package/es2021.en/plugins/backup/backup.css +1 -1
  189. package/es2021.en/plugins/backup/backup.js +1 -1
  190. package/es2021.en/plugins/backup/backup.min.js +1 -1
  191. package/es2021.en/plugins/button-generator/button-generator.css +1 -1
  192. package/es2021.en/plugins/button-generator/button-generator.js +1 -1
  193. package/es2021.en/plugins/button-generator/button-generator.min.js +1 -1
  194. package/es2021.en/plugins/change-case/change-case.js +1 -1
  195. package/es2021.en/plugins/change-case/change-case.min.js +1 -1
  196. package/es2021.en/plugins/color-picker/color-picker.css +1 -1
  197. package/es2021.en/plugins/color-picker/color-picker.js +1 -1
  198. package/es2021.en/plugins/color-picker/color-picker.min.js +1 -1
  199. package/es2021.en/plugins/emoji/emoji.css +1 -1
  200. package/es2021.en/plugins/emoji/emoji.js +1 -1
  201. package/es2021.en/plugins/emoji/emoji.min.js +1 -1
  202. package/es2021.en/plugins/export-docs/export-docs.js +1 -1
  203. package/es2021.en/plugins/export-docs/export-docs.min.js +1 -1
  204. package/es2021.en/plugins/finder/finder.css +1 -1
  205. package/es2021.en/plugins/finder/finder.js +1 -1
  206. package/es2021.en/plugins/finder/finder.min.js +1 -1
  207. package/es2021.en/plugins/google-maps/google-maps.css +1 -1
  208. package/es2021.en/plugins/google-maps/google-maps.js +1 -1
  209. package/es2021.en/plugins/google-maps/google-maps.min.js +1 -1
  210. package/es2021.en/plugins/google-search/google-search.js +1 -1
  211. package/es2021.en/plugins/google-search/google-search.min.js +1 -1
  212. package/es2021.en/plugins/highlight-signature/highlight-signature.js +1 -1
  213. package/es2021.en/plugins/highlight-signature/highlight-signature.min.js +1 -1
  214. package/es2021.en/plugins/iframe-editor/iframe-editor.css +1 -1
  215. package/es2021.en/plugins/iframe-editor/iframe-editor.js +1 -1
  216. package/es2021.en/plugins/iframe-editor/iframe-editor.min.js +1 -1
  217. package/es2021.en/plugins/image-editor-pro/image-editor-pro.css +1 -1
  218. package/es2021.en/plugins/image-editor-pro/image-editor-pro.js +1 -1
  219. package/es2021.en/plugins/image-editor-pro/image-editor-pro.min.js +1 -1
  220. package/es2021.en/plugins/keyboard/keyboard.css +1 -1
  221. package/es2021.en/plugins/keyboard/keyboard.js +1 -1
  222. package/es2021.en/plugins/keyboard/keyboard.min.js +1 -1
  223. package/es2021.en/plugins/mobile-view/mobile-view.js +1 -1
  224. package/es2021.en/plugins/mobile-view/mobile-view.min.js +1 -1
  225. package/es2021.en/plugins/page-break/page-break.js +1 -1
  226. package/es2021.en/plugins/page-break/page-break.min.js +1 -1
  227. package/es2021.en/plugins/paste-code/paste-code.css +1 -1
  228. package/es2021.en/plugins/paste-code/paste-code.js +1 -1
  229. package/es2021.en/plugins/paste-code/paste-code.min.js +1 -1
  230. package/es2021.en/plugins/paste-from-word/paste-from-word.js +1 -1
  231. package/es2021.en/plugins/paste-from-word/paste-from-word.min.js +1 -1
  232. package/es2021.en/plugins/show-blocks/show-blocks.js +1 -1
  233. package/es2021.en/plugins/show-blocks/show-blocks.min.js +1 -1
  234. package/es2021.en/plugins/style/style.css +1 -1
  235. package/es2021.en/plugins/style/style.js +1 -1
  236. package/es2021.en/plugins/style/style.min.js +1 -1
  237. package/es2021.en/plugins/templates/templates.css +1 -1
  238. package/es2021.en/plugins/templates/templates.js +1 -1
  239. package/es2021.en/plugins/templates/templates.min.js +1 -1
  240. package/es2021.en/plugins/todo-list/todo-list.css +1 -1
  241. package/es2021.en/plugins/todo-list/todo-list.js +1 -1
  242. package/es2021.en/plugins/todo-list/todo-list.min.js +1 -1
  243. package/es2021.en/plugins/translate/translate.css +1 -1
  244. package/es2021.en/plugins/translate/translate.js +1 -1
  245. package/es2021.en/plugins/translate/translate.min.js +1 -1
  246. package/es2021.en/plugins/tune-block/tune-block.css +1 -1
  247. package/es2021.en/plugins/tune-block/tune-block.js +1 -1
  248. package/es2021.en/plugins/tune-block/tune-block.min.js +1 -1
  249. package/es5/jodit.css +3 -3
  250. package/es5/jodit.fat.min.css +1 -1
  251. package/es5/jodit.fat.min.js +2 -2
  252. package/es5/jodit.js +228 -20
  253. package/es5/jodit.min.css +3 -3
  254. package/es5/jodit.min.js +2 -2
  255. package/es5/plugins/ai-assistant-pro/ai-assistant-pro.css +1 -1
  256. package/es5/plugins/ai-assistant-pro/ai-assistant-pro.js +1 -1
  257. package/es5/plugins/ai-assistant-pro/ai-assistant-pro.min.js +1 -1
  258. package/es5/plugins/autocomplete/autocomplete.css +1 -1
  259. package/es5/plugins/autocomplete/autocomplete.js +1 -1
  260. package/es5/plugins/autocomplete/autocomplete.min.js +1 -1
  261. package/es5/plugins/backup/backup.css +1 -1
  262. package/es5/plugins/backup/backup.js +1 -1
  263. package/es5/plugins/backup/backup.min.js +1 -1
  264. package/es5/plugins/button-generator/button-generator.css +1 -1
  265. package/es5/plugins/button-generator/button-generator.js +1 -1
  266. package/es5/plugins/button-generator/button-generator.min.js +1 -1
  267. package/es5/plugins/change-case/change-case.js +1 -1
  268. package/es5/plugins/change-case/change-case.min.js +1 -1
  269. package/es5/plugins/color-picker/color-picker.css +1 -1
  270. package/es5/plugins/color-picker/color-picker.js +1 -1
  271. package/es5/plugins/color-picker/color-picker.min.js +1 -1
  272. package/es5/plugins/emoji/emoji.css +1 -1
  273. package/es5/plugins/emoji/emoji.js +1 -1
  274. package/es5/plugins/emoji/emoji.min.js +1 -1
  275. package/es5/plugins/export-docs/export-docs.js +1 -1
  276. package/es5/plugins/export-docs/export-docs.min.js +1 -1
  277. package/es5/plugins/finder/finder.css +1 -1
  278. package/es5/plugins/finder/finder.js +1 -1
  279. package/es5/plugins/finder/finder.min.js +1 -1
  280. package/es5/plugins/google-maps/google-maps.css +1 -1
  281. package/es5/plugins/google-maps/google-maps.js +1 -1
  282. package/es5/plugins/google-maps/google-maps.min.js +1 -1
  283. package/es5/plugins/google-search/google-search.js +1 -1
  284. package/es5/plugins/google-search/google-search.min.js +1 -1
  285. package/es5/plugins/highlight-signature/highlight-signature.js +1 -1
  286. package/es5/plugins/highlight-signature/highlight-signature.min.js +1 -1
  287. package/es5/plugins/iframe-editor/iframe-editor.css +1 -1
  288. package/es5/plugins/iframe-editor/iframe-editor.js +1 -1
  289. package/es5/plugins/iframe-editor/iframe-editor.min.js +1 -1
  290. package/es5/plugins/image-editor-pro/image-editor-pro.css +1 -1
  291. package/es5/plugins/image-editor-pro/image-editor-pro.js +1 -1
  292. package/es5/plugins/image-editor-pro/image-editor-pro.min.js +1 -1
  293. package/es5/plugins/keyboard/keyboard.css +1 -1
  294. package/es5/plugins/keyboard/keyboard.js +1 -1
  295. package/es5/plugins/keyboard/keyboard.min.js +1 -1
  296. package/es5/plugins/mobile-view/mobile-view.js +1 -1
  297. package/es5/plugins/mobile-view/mobile-view.min.js +1 -1
  298. package/es5/plugins/page-break/page-break.js +1 -1
  299. package/es5/plugins/page-break/page-break.min.js +1 -1
  300. package/es5/plugins/paste-code/paste-code.css +1 -1
  301. package/es5/plugins/paste-code/paste-code.js +1 -1
  302. package/es5/plugins/paste-code/paste-code.min.js +1 -1
  303. package/es5/plugins/paste-from-word/paste-from-word.js +1 -1
  304. package/es5/plugins/paste-from-word/paste-from-word.min.js +1 -1
  305. package/es5/plugins/show-blocks/show-blocks.js +1 -1
  306. package/es5/plugins/show-blocks/show-blocks.min.js +1 -1
  307. package/es5/plugins/style/style.css +1 -1
  308. package/es5/plugins/style/style.js +1 -1
  309. package/es5/plugins/style/style.min.js +1 -1
  310. package/es5/plugins/templates/templates.css +1 -1
  311. package/es5/plugins/templates/templates.js +1 -1
  312. package/es5/plugins/templates/templates.min.js +1 -1
  313. package/es5/plugins/todo-list/todo-list.css +1 -1
  314. package/es5/plugins/todo-list/todo-list.js +1 -1
  315. package/es5/plugins/todo-list/todo-list.min.js +1 -1
  316. package/es5/plugins/translate/translate.css +1 -1
  317. package/es5/plugins/translate/translate.js +1 -1
  318. package/es5/plugins/translate/translate.min.js +1 -1
  319. package/es5/plugins/tune-block/tune-block.css +1 -1
  320. package/es5/plugins/tune-block/tune-block.js +1 -1
  321. package/es5/plugins/tune-block/tune-block.min.js +1 -1
  322. package/es5/polyfills.fat.min.js +1 -1
  323. package/es5/polyfills.js +1 -1
  324. package/es5/polyfills.min.js +1 -1
  325. package/package.json +1 -1
package/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.13.15
4
+ * Version: v4.13.17
5
5
  * Url: https://xdsoft.net/jodit/pro/
6
6
  * License(s): SEE LICENSE IN LICENSE.md
7
7
  */
@@ -390,6 +390,26 @@ var ConfigPrototype = {};
390
390
  /**
391
391
  * if set true, then the current mode is saved in a cookie, and is restored after a reload of the page
392
392
  */ this.saveModeInStorage = false;
393
+ /**
394
+ * Configure the provider that backs {@link IViewBased.asyncStorage}.
395
+ *
396
+ * By default the editor's `asyncStorage` uses persistent `IndexedDB` (with an
397
+ * in-memory fallback when it is unavailable). Set `defaultProvider` to override it:
398
+ * - `'local'` — persist in `localStorage`;
399
+ * - `'memory'` — keep everything in memory (nothing survives a reload);
400
+ * - a custom {@link IAsyncStorage} implementation — plug in your own backend.
401
+ *
402
+ * ```javascript
403
+ * Jodit.make('#editor', {
404
+ * asyncStorage: { defaultProvider: 'local' }
405
+ * });
406
+ *
407
+ * // or a fully custom backend
408
+ * Jodit.make('#editor', {
409
+ * asyncStorage: { defaultProvider: myAsyncStorage }
410
+ * });
411
+ * ```
412
+ */ this.asyncStorage = {};
393
413
  /**
394
414
  * Class name that can be appended to the editable area
395
415
  *
@@ -2279,7 +2299,7 @@ function _unsupported_iterable_to_array(o, minLen) {
2279
2299
  if (n === "Map" || n === "Set") return Array.from(n);
2280
2300
  if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _array_like_to_array(o, minLen);
2281
2301
  }
2282
- var APP_VERSION = "4.13.15";
2302
+ var APP_VERSION = "4.13.17";
2283
2303
  // prettier-ignore
2284
2304
  var ES = "es5";
2285
2305
  var IS_ES_MODERN = false;
@@ -14704,6 +14724,164 @@ var Selection = /*#__PURE__*/ function() {
14704
14724
  return '';
14705
14725
  }
14706
14726
  },
14727
+ {
14728
+ /**
14729
+ * Splits the boundaries of the current selection and wraps every
14730
+ * contiguous run of selected inline content (grouped by block) into a
14731
+ * `<font>` element, returning those wrappers in document order.
14732
+ *
14733
+ * This is a pure-DOM replacement for the old
14734
+ * `nativeExecCommand('fontsize', false, '7')` trick which relied on the
14735
+ * browser to split the selection into `<font size="7">` fragments.
14736
+ */ key: "__wrapSelectionFragments",
14737
+ value: function __wrapSelectionFragments() {
14738
+ var range = this.range;
14739
+ this.__splitSelectionBoundaries(range);
14740
+ var root = range.commonAncestorContainer;
14741
+ if (_dom_dom_js__WEBPACK_IMPORTED_MODULE_2__.Dom.isText(root)) {
14742
+ root = root.parentNode;
14743
+ }
14744
+ if (!root) {
14745
+ return [];
14746
+ }
14747
+ return this.__wrapSelectionRuns(this.__collectContainedNodes(root, range));
14748
+ }
14749
+ },
14750
+ {
14751
+ /**
14752
+ * Splits the text nodes at both ends of the range so that its boundaries
14753
+ * always fall between nodes. Afterwards every node inside the range is
14754
+ * fully (not partially) selected.
14755
+ */ key: "__splitSelectionBoundaries",
14756
+ value: function __splitSelectionBoundaries(range) {
14757
+ var _a, _b, _c, _d, _e, _f, _g, _h;
14758
+ var startContainer = range.startContainer, endContainer = range.endContainer;
14759
+ var startOffset = range.startOffset, endOffset = range.endOffset;
14760
+ if (_dom_dom_js__WEBPACK_IMPORTED_MODULE_2__.Dom.isText(endContainer) && endOffset > 0 && endOffset < ((_b = (_a = endContainer.nodeValue) === null || _a === void 0 ? void 0 : _a.length) !== null && _b !== void 0 ? _b : 0)) {
14761
+ endContainer.splitText(endOffset);
14762
+ endOffset = (_d = (_c = endContainer.nodeValue) === null || _c === void 0 ? void 0 : _c.length) !== null && _d !== void 0 ? _d : endOffset;
14763
+ }
14764
+ if (_dom_dom_js__WEBPACK_IMPORTED_MODULE_2__.Dom.isText(startContainer) && startOffset > 0 && startOffset < ((_f = (_e = startContainer.nodeValue) === null || _e === void 0 ? void 0 : _e.length) !== null && _f !== void 0 ? _f : 0)) {
14765
+ var middle = startContainer.splitText(startOffset);
14766
+ // Selection located inside a single text node - the tail we just
14767
+ // cut off is the actual selected fragment.
14768
+ if (startContainer === endContainer) {
14769
+ endContainer = middle;
14770
+ endOffset = (_h = (_g = middle.nodeValue) === null || _g === void 0 ? void 0 : _g.length) !== null && _h !== void 0 ? _h : 0;
14771
+ }
14772
+ startContainer = middle;
14773
+ startOffset = 0;
14774
+ }
14775
+ range.setStart(startContainer, startOffset);
14776
+ range.setEnd(endContainer, endOffset);
14777
+ // Normalize text-edge boundaries (e.g. `(text, 0)` or `(text, length)`)
14778
+ // to the element level so that containment checks based on
14779
+ // `selectNode()` treat a fully selected text node as contained.
14780
+ this.__normalizeRangeBoundary(range, true);
14781
+ this.__normalizeRangeBoundary(range, false);
14782
+ }
14783
+ },
14784
+ {
14785
+ key: "__normalizeRangeBoundary",
14786
+ value: function __normalizeRangeBoundary(range, atStart) {
14787
+ var _a, _b;
14788
+ var container = atStart ? range.startContainer : range.endContainer;
14789
+ if (!_dom_dom_js__WEBPACK_IMPORTED_MODULE_2__.Dom.isText(container)) {
14790
+ return;
14791
+ }
14792
+ var offset = atStart ? range.startOffset : range.endOffset;
14793
+ var length = (_b = (_a = container.nodeValue) === null || _a === void 0 ? void 0 : _a.length) !== null && _b !== void 0 ? _b : 0;
14794
+ if (offset === 0) {
14795
+ atStart ? range.setStartBefore(container) : range.setEndBefore(container);
14796
+ } else if (offset >= length) {
14797
+ atStart ? range.setStartAfter(container) : range.setEndAfter(container);
14798
+ }
14799
+ }
14800
+ },
14801
+ {
14802
+ /**
14803
+ * Collects the highest-level nodes that are completely inside the range,
14804
+ * descending into nodes that are only partially selected.
14805
+ */ key: "__collectContainedNodes",
14806
+ value: function __collectContainedNodes(root, range) {
14807
+ var _this = this;
14808
+ var result = [];
14809
+ (0,_helpers_index_js__WEBPACK_IMPORTED_MODULE_3__.toArray)(root.childNodes).forEach(function(child) {
14810
+ if (_this.__isFullyContained(range, child)) {
14811
+ result.push(child);
14812
+ } else if (child.childNodes.length && range.intersectsNode(child)) {
14813
+ var _result;
14814
+ (_result = result).push.apply(_result, _to_consumable_array(_this.__collectContainedNodes(child, range)));
14815
+ }
14816
+ });
14817
+ return result;
14818
+ }
14819
+ },
14820
+ {
14821
+ key: "__isFullyContained",
14822
+ value: function __isFullyContained(range, node) {
14823
+ var nodeRange = this.createRange();
14824
+ nodeRange.selectNode(node);
14825
+ return range.compareBoundaryPoints(Range.START_TO_START, nodeRange) <= 0 && range.compareBoundaryPoints(Range.END_TO_END, nodeRange) >= 0;
14826
+ }
14827
+ },
14828
+ {
14829
+ /**
14830
+ * Wraps every contiguous run of selected inline siblings into a `<font>`
14831
+ * element. Block-level nodes are never wrapped themselves - their inline
14832
+ * content is wrapped instead, keeping every `<font>` inside a single block.
14833
+ */ key: "__wrapSelectionRuns",
14834
+ value: function __wrapSelectionRuns(nodes) {
14835
+ var _this = this;
14836
+ var fonts = [];
14837
+ var run = [];
14838
+ var flush = function flush() {
14839
+ if (run.length) {
14840
+ fonts.push(_this.__wrapRunInFont(run));
14841
+ run = [];
14842
+ }
14843
+ };
14844
+ nodes.forEach(function(node) {
14845
+ if (_dom_dom_js__WEBPACK_IMPORTED_MODULE_2__.Dom.isElement(node) && _this.__isOrContainsBlock(node)) {
14846
+ var _fonts;
14847
+ flush();
14848
+ (_fonts = fonts).push.apply(_fonts, _to_consumable_array(_this.__wrapSelectionRuns((0,_helpers_index_js__WEBPACK_IMPORTED_MODULE_3__.toArray)(node.childNodes))));
14849
+ } else {
14850
+ if (run.length && run[run.length - 1].parentNode !== node.parentNode) {
14851
+ flush();
14852
+ }
14853
+ run.push(node);
14854
+ }
14855
+ });
14856
+ flush();
14857
+ return fonts;
14858
+ }
14859
+ },
14860
+ {
14861
+ key: "__isOrContainsBlock",
14862
+ value: function __isOrContainsBlock(node) {
14863
+ var _this = this;
14864
+ if (_dom_dom_js__WEBPACK_IMPORTED_MODULE_2__.Dom.isBlock(node)) {
14865
+ return true;
14866
+ }
14867
+ return (0,_helpers_index_js__WEBPACK_IMPORTED_MODULE_3__.toArray)(node.childNodes).some(function(child) {
14868
+ return _this.__isOrContainsBlock(child);
14869
+ });
14870
+ }
14871
+ },
14872
+ {
14873
+ key: "__wrapRunInFont",
14874
+ value: function __wrapRunInFont(run) {
14875
+ var _a;
14876
+ var font = this.j.createInside.element('font');
14877
+ var _run = _sliced_to_array(run, 1), first = _run[0];
14878
+ (_a = first.parentNode) === null || _a === void 0 ? void 0 : _a.insertBefore(font, first);
14879
+ run.forEach(function(node) {
14880
+ return font.appendChild(node);
14881
+ });
14882
+ return font;
14883
+ }
14884
+ },
14707
14885
  {
14708
14886
  key: "wrapInTagGen",
14709
14887
  value: /**
@@ -14733,20 +14911,7 @@ var Selection = /*#__PURE__*/ function() {
14733
14911
  2
14734
14912
  ];
14735
14913
  case 2:
14736
- // fix issue https://github.com/xdan/jodit/issues/65
14737
- (0,_helpers_index_js__WEBPACK_IMPORTED_MODULE_3__.$$)('*[style*=font-size]', this.area).forEach(function(elm) {
14738
- (0,_helpers_index_js__WEBPACK_IMPORTED_MODULE_3__.attr)(elm, 'data-font-size', elm.style.fontSize.toString());
14739
- elm.style.removeProperty('font-size');
14740
- });
14741
- this.j.nativeExecCommand('fontsize', false, '7');
14742
- (0,_helpers_index_js__WEBPACK_IMPORTED_MODULE_3__.$$)('*[data-font-size]', this.area).forEach(function(elm) {
14743
- var fontSize = (0,_helpers_index_js__WEBPACK_IMPORTED_MODULE_3__.attr)(elm, 'data-font-size');
14744
- if (fontSize) {
14745
- elm.style.fontSize = fontSize;
14746
- (0,_helpers_index_js__WEBPACK_IMPORTED_MODULE_3__.attr)(elm, 'data-font-size', null);
14747
- }
14748
- });
14749
- elms = (0,_helpers_index_js__WEBPACK_IMPORTED_MODULE_3__.$$)('font[size="7"]', this.area);
14914
+ elms = this.__wrapSelectionFragments();
14750
14915
  _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
14751
14916
  _state.label = 3;
14752
14917
  case 3:
@@ -16934,9 +17099,23 @@ var AsyncStorage = /*#__PURE__*/ function() {
16934
17099
  {
16935
17100
  key: "makeStorage",
16936
17101
  value: function makeStorage() {
16937
- var persistentOrStrategy = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : false, suffix = arguments.length > 1 ? arguments[1] : void 0;
17102
+ var persistentOrStrategy = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : false, suffix = arguments.length > 1 ? arguments[1] : void 0, options = arguments.length > 2 ? arguments[2] : void 0;
16938
17103
  var provider = undefined;
16939
17104
  var storage = null;
17105
+ // An explicit `defaultProvider` overrides the strategy-based selection
17106
+ // below and decides which provider backs the storage.
17107
+ var defaultProvider = options === null || options === void 0 ? void 0 : options.defaultProvider;
17108
+ if (defaultProvider != null) {
17109
+ if (defaultProvider === 'local') {
17110
+ provider = (0,_engines_local_storage_provider_js__WEBPACK_IMPORTED_MODULE_2__.canUsePersistentStorage)('localStorage') ? new _engines_local_storage_provider_js__WEBPACK_IMPORTED_MODULE_2__.LocalStorageProvider(_storage_js__WEBPACK_IMPORTED_MODULE_4__.StorageKey + (suffix || '')) : new _engines_memory_storage_provider_js__WEBPACK_IMPORTED_MODULE_3__.MemoryStorageProvider();
17111
+ } else if (defaultProvider === 'memory') {
17112
+ provider = new _engines_memory_storage_provider_js__WEBPACK_IMPORTED_MODULE_3__.MemoryStorageProvider();
17113
+ } else {
17114
+ // A custom IAsyncStorage implementation, used as-is.
17115
+ provider = defaultProvider;
17116
+ }
17117
+ return new AsyncStorage(Promise.resolve(provider), suffix);
17118
+ }
16940
17119
  if (persistentOrStrategy === 'localStorage' || persistentOrStrategy === 'sessionStorage') {
16941
17120
  if ((0,_engines_local_storage_provider_js__WEBPACK_IMPORTED_MODULE_2__.canUsePersistentStorage)(persistentOrStrategy)) {
16942
17121
  provider = new _engines_local_storage_provider_js__WEBPACK_IMPORTED_MODULE_2__.LocalStorageProvider(_storage_js__WEBPACK_IMPORTED_MODULE_4__.StorageKey + (suffix || ''), persistentOrStrategy);
@@ -17849,7 +18028,12 @@ function _create_class(Constructor, protoProps, staticProps) {
17849
18028
  key: "delete",
17850
18029
  value: function _delete(key) {
17851
18030
  try {
17852
- this.storage.removeItem(this.rootKey);
18031
+ var buffer = this.storage.getItem(this.rootKey);
18032
+ if (buffer) {
18033
+ var json = JSON.parse(buffer);
18034
+ delete json[key];
18035
+ this.storage.setItem(this.rootKey, JSON.stringify(json));
18036
+ }
17853
18037
  } catch (_a) {}
17854
18038
  return this;
17855
18039
  }
@@ -24010,12 +24194,29 @@ var ViewWithToolbar = /*#__PURE__*/ function(View) {
24010
24194
  if (!this.o.fullsize && ((0,_helpers_checker_is_string_js__WEBPACK_IMPORTED_MODULE_5__.isString)(this.o.toolbar) || _dom_dom_js__WEBPACK_IMPORTED_MODULE_3__.Dom.isHTMLElement(this.o.toolbar))) {
24011
24195
  return (0,_helpers_utils_selector_js__WEBPACK_IMPORTED_MODULE_6__.resolveElement)(this.o.toolbar, this.o.shadowRoot || this.od);
24012
24196
  }
24013
- this.o.toolbar && _dom_dom_js__WEBPACK_IMPORTED_MODULE_3__.Dom.appendChildFirst(this.container, this.__defaultToolbarContainer);
24197
+ this.o.toolbar && this.__appendToolbarBox();
24014
24198
  return this.__defaultToolbarContainer;
24015
24199
  }
24016
24200
  },
24017
24201
  {
24018
24202
  /**
24203
+ * Keep the toolbar box as the first child of the container, except that
24204
+ * children flagged with `data-jodit-above-toolbar` (e.g. the `above`
24205
+ * workplace slot used for presence bars and banners) stay above it.
24206
+ */ key: "__appendToolbarBox",
24207
+ value: function __appendToolbarBox() {
24208
+ var box = this.__defaultToolbarContainer;
24209
+ var anchor = this.container.firstElementChild;
24210
+ while(anchor && anchor !== box && anchor.hasAttribute('data-jodit-above-toolbar')){
24211
+ anchor = anchor.nextElementSibling;
24212
+ }
24213
+ if (anchor !== box) {
24214
+ this.container.insertBefore(box, anchor);
24215
+ }
24216
+ }
24217
+ },
24218
+ {
24219
+ /**
24019
24220
  * Change panel container
24020
24221
  */ key: "setPanel",
24021
24222
  value: function setPanel(element) {
@@ -24382,7 +24583,7 @@ var View = View_1 = /*#__PURE__*/ function(Component) {
24382
24583
  get: /**
24383
24584
  * Container for persistent set/get value
24384
24585
  */ function get() {
24385
- return _storage_async_storage_js__WEBPACK_IMPORTED_MODULE_12__.AsyncStorage.makeStorage(true, this.id);
24586
+ return _storage_async_storage_js__WEBPACK_IMPORTED_MODULE_12__.AsyncStorage.makeStorage(true, this.id, this.o.asyncStorage);
24386
24587
  }
24387
24588
  },
24388
24589
  {
@@ -25977,6 +26178,12 @@ var Jodit = Jodit_1 = /*#__PURE__*/ function(ViewWithToolbar) {
25977
26178
  element.style.display = 'none';
25978
26179
  }
25979
26180
  var SLOT = 'workplace-slot';
26181
+ // A slot that always stays ABOVE the toolbar (presence bars, banners…).
26182
+ // The `data-jodit-above-toolbar` attribute tells ViewWithToolbar to keep
26183
+ // the toolbar box below it when (re)attaching the toolbar container.
26184
+ var aboveSlot = this.c.div(this.getFullElName(SLOT, 'above'), NOEDIT);
26185
+ aboveSlot.setAttribute('data-jodit-above-toolbar', '');
26186
+ _modules_index_js__WEBPACK_IMPORTED_MODULE_7__.Dom.appendChildFirst(container, aboveSlot);
25980
26187
  var topSlot = this.c.div(this.getFullElName(SLOT, 'top'), NOEDIT);
25981
26188
  container.appendChild(topSlot);
25982
26189
  var centerSlot = this.c.div(this.getFullElName(SLOT, 'center'), NOEDIT);
@@ -26009,6 +26216,7 @@ var Jodit = Jodit_1 = /*#__PURE__*/ function(ViewWithToolbar) {
26009
26216
  container: container,
26010
26217
  workplace: workplace,
26011
26218
  slots: {
26219
+ above: aboveSlot,
26012
26220
  top: topSlot,
26013
26221
  bottom: bottomPanel,
26014
26222
  center: centerSlot,