jodit-pro 4.13.1 → 4.13.3

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 (316) hide show
  1. package/es2015/jodit.css +1 -1
  2. package/es2015/jodit.fat.min.js +3 -3
  3. package/es2015/jodit.js +109 -49
  4. package/es2015/jodit.min.js +3 -3
  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.css +1 -1
  9. package/es2015/plugins/autocomplete/autocomplete.js +1 -1
  10. package/es2015/plugins/autocomplete/autocomplete.min.js +1 -1
  11. package/es2015/plugins/backup/backup.css +1 -1
  12. package/es2015/plugins/backup/backup.js +1 -1
  13. package/es2015/plugins/backup/backup.min.js +1 -1
  14. package/es2015/plugins/button-generator/button-generator.css +1 -1
  15. package/es2015/plugins/button-generator/button-generator.js +1 -1
  16. package/es2015/plugins/button-generator/button-generator.min.js +1 -1
  17. package/es2015/plugins/change-case/change-case.js +1 -1
  18. package/es2015/plugins/change-case/change-case.min.js +1 -1
  19. package/es2015/plugins/color-picker/color-picker.css +1 -1
  20. package/es2015/plugins/color-picker/color-picker.js +1 -1
  21. package/es2015/plugins/color-picker/color-picker.min.js +1 -1
  22. package/es2015/plugins/emoji/emoji.css +1 -1
  23. package/es2015/plugins/emoji/emoji.js +1 -1
  24. package/es2015/plugins/emoji/emoji.min.js +1 -1
  25. package/es2015/plugins/export-docs/export-docs.js +1 -1
  26. package/es2015/plugins/export-docs/export-docs.min.js +1 -1
  27. package/es2015/plugins/finder/finder.css +1 -1
  28. package/es2015/plugins/finder/finder.js +1 -1
  29. package/es2015/plugins/finder/finder.min.js +1 -1
  30. package/es2015/plugins/google-maps/google-maps.css +1 -1
  31. package/es2015/plugins/google-maps/google-maps.js +1 -1
  32. package/es2015/plugins/google-maps/google-maps.min.js +1 -1
  33. package/es2015/plugins/google-search/google-search.js +1 -1
  34. package/es2015/plugins/google-search/google-search.min.js +1 -1
  35. package/es2015/plugins/highlight-signature/highlight-signature.js +1 -1
  36. package/es2015/plugins/highlight-signature/highlight-signature.min.js +1 -1
  37. package/es2015/plugins/iframe-editor/iframe-editor.css +1 -1
  38. package/es2015/plugins/iframe-editor/iframe-editor.js +1 -1
  39. package/es2015/plugins/iframe-editor/iframe-editor.min.js +1 -1
  40. package/es2015/plugins/image-editor-pro/image-editor-pro.css +1 -1
  41. package/es2015/plugins/image-editor-pro/image-editor-pro.js +1 -1
  42. package/es2015/plugins/image-editor-pro/image-editor-pro.min.js +1 -1
  43. package/es2015/plugins/keyboard/keyboard.css +1 -1
  44. package/es2015/plugins/keyboard/keyboard.js +1 -1
  45. package/es2015/plugins/keyboard/keyboard.min.js +1 -1
  46. package/es2015/plugins/mobile-view/mobile-view.js +1 -1
  47. package/es2015/plugins/mobile-view/mobile-view.min.js +1 -1
  48. package/es2015/plugins/page-break/page-break.js +1 -1
  49. package/es2015/plugins/page-break/page-break.min.js +1 -1
  50. package/es2015/plugins/paste-code/paste-code.css +1 -1
  51. package/es2015/plugins/paste-code/paste-code.js +1 -1
  52. package/es2015/plugins/paste-code/paste-code.min.js +1 -1
  53. package/es2015/plugins/paste-from-word/paste-from-word.js +1 -1
  54. package/es2015/plugins/paste-from-word/paste-from-word.min.js +1 -1
  55. package/es2015/plugins/show-blocks/show-blocks.js +1 -1
  56. package/es2015/plugins/show-blocks/show-blocks.min.js +1 -1
  57. package/es2015/plugins/style/style.css +1 -1
  58. package/es2015/plugins/style/style.js +1 -1
  59. package/es2015/plugins/style/style.min.js +1 -1
  60. package/es2015/plugins/templates/templates.css +1 -1
  61. package/es2015/plugins/templates/templates.js +1 -1
  62. package/es2015/plugins/templates/templates.min.js +1 -1
  63. package/es2015/plugins/todo-list/todo-list.css +1 -1
  64. package/es2015/plugins/todo-list/todo-list.js +1 -1
  65. package/es2015/plugins/todo-list/todo-list.min.js +1 -1
  66. package/es2015/plugins/translate/translate.css +1 -1
  67. package/es2015/plugins/translate/translate.js +1 -1
  68. package/es2015/plugins/translate/translate.min.js +1 -1
  69. package/es2015/plugins/tune-block/tune-block.css +1 -1
  70. package/es2015/plugins/tune-block/tune-block.js +1 -1
  71. package/es2015/plugins/tune-block/tune-block.min.js +1 -1
  72. package/es2018/jodit.fat.min.js +3 -3
  73. package/es2018/jodit.min.js +3 -3
  74. package/es2018/plugins/ai-assistant-pro/ai-assistant-pro.min.js +1 -1
  75. package/es2018/plugins/autocomplete/autocomplete.min.js +1 -1
  76. package/es2018/plugins/backup/backup.min.js +1 -1
  77. package/es2018/plugins/button-generator/button-generator.min.js +1 -1
  78. package/es2018/plugins/change-case/change-case.min.js +1 -1
  79. package/es2018/plugins/color-picker/color-picker.min.js +1 -1
  80. package/es2018/plugins/emoji/emoji.min.js +1 -1
  81. package/es2018/plugins/export-docs/export-docs.min.js +1 -1
  82. package/es2018/plugins/finder/finder.min.js +1 -1
  83. package/es2018/plugins/google-maps/google-maps.min.js +1 -1
  84. package/es2018/plugins/google-search/google-search.min.js +1 -1
  85. package/es2018/plugins/highlight-signature/highlight-signature.min.js +1 -1
  86. package/es2018/plugins/iframe-editor/iframe-editor.min.js +1 -1
  87. package/es2018/plugins/image-editor-pro/image-editor-pro.min.js +1 -1
  88. package/es2018/plugins/keyboard/keyboard.min.js +1 -1
  89. package/es2018/plugins/mobile-view/mobile-view.min.js +1 -1
  90. package/es2018/plugins/page-break/page-break.min.js +1 -1
  91. package/es2018/plugins/paste-code/paste-code.min.js +1 -1
  92. package/es2018/plugins/paste-from-word/paste-from-word.min.js +1 -1
  93. package/es2018/plugins/show-blocks/show-blocks.min.js +1 -1
  94. package/es2018/plugins/style/style.min.js +1 -1
  95. package/es2018/plugins/templates/templates.min.js +1 -1
  96. package/es2018/plugins/todo-list/todo-list.min.js +1 -1
  97. package/es2018/plugins/translate/translate.min.js +1 -1
  98. package/es2018/plugins/tune-block/tune-block.min.js +1 -1
  99. package/es2021/jodit.css +1 -1
  100. package/es2021/jodit.fat.min.js +4 -4
  101. package/es2021/jodit.js +109 -49
  102. package/es2021/jodit.min.js +4 -4
  103. package/es2021/plugins/ai-assistant-pro/ai-assistant-pro.css +1 -1
  104. package/es2021/plugins/ai-assistant-pro/ai-assistant-pro.js +1 -1
  105. package/es2021/plugins/ai-assistant-pro/ai-assistant-pro.min.js +1 -1
  106. package/es2021/plugins/autocomplete/autocomplete.css +1 -1
  107. package/es2021/plugins/autocomplete/autocomplete.js +1 -1
  108. package/es2021/plugins/autocomplete/autocomplete.min.js +1 -1
  109. package/es2021/plugins/backup/backup.css +1 -1
  110. package/es2021/plugins/backup/backup.js +1 -1
  111. package/es2021/plugins/backup/backup.min.js +1 -1
  112. package/es2021/plugins/button-generator/button-generator.css +1 -1
  113. package/es2021/plugins/button-generator/button-generator.js +1 -1
  114. package/es2021/plugins/button-generator/button-generator.min.js +1 -1
  115. package/es2021/plugins/change-case/change-case.js +1 -1
  116. package/es2021/plugins/change-case/change-case.min.js +1 -1
  117. package/es2021/plugins/color-picker/color-picker.css +1 -1
  118. package/es2021/plugins/color-picker/color-picker.js +1 -1
  119. package/es2021/plugins/color-picker/color-picker.min.js +1 -1
  120. package/es2021/plugins/emoji/emoji.css +1 -1
  121. package/es2021/plugins/emoji/emoji.js +1 -1
  122. package/es2021/plugins/emoji/emoji.min.js +1 -1
  123. package/es2021/plugins/export-docs/export-docs.js +1 -1
  124. package/es2021/plugins/export-docs/export-docs.min.js +1 -1
  125. package/es2021/plugins/finder/finder.css +1 -1
  126. package/es2021/plugins/finder/finder.js +1 -1
  127. package/es2021/plugins/finder/finder.min.js +1 -1
  128. package/es2021/plugins/google-maps/google-maps.css +1 -1
  129. package/es2021/plugins/google-maps/google-maps.js +1 -1
  130. package/es2021/plugins/google-maps/google-maps.min.js +1 -1
  131. package/es2021/plugins/google-search/google-search.js +1 -1
  132. package/es2021/plugins/google-search/google-search.min.js +1 -1
  133. package/es2021/plugins/highlight-signature/highlight-signature.js +1 -1
  134. package/es2021/plugins/highlight-signature/highlight-signature.min.js +1 -1
  135. package/es2021/plugins/iframe-editor/iframe-editor.css +1 -1
  136. package/es2021/plugins/iframe-editor/iframe-editor.js +1 -1
  137. package/es2021/plugins/iframe-editor/iframe-editor.min.js +1 -1
  138. package/es2021/plugins/image-editor-pro/image-editor-pro.css +1 -1
  139. package/es2021/plugins/image-editor-pro/image-editor-pro.js +1 -1
  140. package/es2021/plugins/image-editor-pro/image-editor-pro.min.js +1 -1
  141. package/es2021/plugins/keyboard/keyboard.css +1 -1
  142. package/es2021/plugins/keyboard/keyboard.js +1 -1
  143. package/es2021/plugins/keyboard/keyboard.min.js +1 -1
  144. package/es2021/plugins/mobile-view/mobile-view.js +1 -1
  145. package/es2021/plugins/mobile-view/mobile-view.min.js +1 -1
  146. package/es2021/plugins/page-break/page-break.js +1 -1
  147. package/es2021/plugins/page-break/page-break.min.js +1 -1
  148. package/es2021/plugins/paste-code/paste-code.css +1 -1
  149. package/es2021/plugins/paste-code/paste-code.js +1 -1
  150. package/es2021/plugins/paste-code/paste-code.min.js +1 -1
  151. package/es2021/plugins/paste-from-word/paste-from-word.js +1 -1
  152. package/es2021/plugins/paste-from-word/paste-from-word.min.js +1 -1
  153. package/es2021/plugins/show-blocks/show-blocks.js +1 -1
  154. package/es2021/plugins/show-blocks/show-blocks.min.js +1 -1
  155. package/es2021/plugins/style/style.css +1 -1
  156. package/es2021/plugins/style/style.js +1 -1
  157. package/es2021/plugins/style/style.min.js +1 -1
  158. package/es2021/plugins/templates/templates.css +1 -1
  159. package/es2021/plugins/templates/templates.js +1 -1
  160. package/es2021/plugins/templates/templates.min.js +1 -1
  161. package/es2021/plugins/todo-list/todo-list.css +1 -1
  162. package/es2021/plugins/todo-list/todo-list.js +1 -1
  163. package/es2021/plugins/todo-list/todo-list.min.js +1 -1
  164. package/es2021/plugins/translate/translate.css +1 -1
  165. package/es2021/plugins/translate/translate.js +1 -1
  166. package/es2021/plugins/translate/translate.min.js +1 -1
  167. package/es2021/plugins/tune-block/tune-block.css +1 -1
  168. package/es2021/plugins/tune-block/tune-block.js +1 -1
  169. package/es2021/plugins/tune-block/tune-block.min.js +1 -1
  170. package/es2021.en/jodit.css +1 -1
  171. package/es2021.en/jodit.fat.min.js +4 -4
  172. package/es2021.en/jodit.js +109 -49
  173. package/es2021.en/jodit.min.js +4 -4
  174. package/es2021.en/plugins/ai-assistant-pro/ai-assistant-pro.css +1 -1
  175. package/es2021.en/plugins/ai-assistant-pro/ai-assistant-pro.js +1 -1
  176. package/es2021.en/plugins/ai-assistant-pro/ai-assistant-pro.min.js +1 -1
  177. package/es2021.en/plugins/autocomplete/autocomplete.css +1 -1
  178. package/es2021.en/plugins/autocomplete/autocomplete.js +1 -1
  179. package/es2021.en/plugins/autocomplete/autocomplete.min.js +1 -1
  180. package/es2021.en/plugins/backup/backup.css +1 -1
  181. package/es2021.en/plugins/backup/backup.js +1 -1
  182. package/es2021.en/plugins/backup/backup.min.js +1 -1
  183. package/es2021.en/plugins/button-generator/button-generator.css +1 -1
  184. package/es2021.en/plugins/button-generator/button-generator.js +1 -1
  185. package/es2021.en/plugins/button-generator/button-generator.min.js +1 -1
  186. package/es2021.en/plugins/change-case/change-case.js +1 -1
  187. package/es2021.en/plugins/change-case/change-case.min.js +1 -1
  188. package/es2021.en/plugins/color-picker/color-picker.css +1 -1
  189. package/es2021.en/plugins/color-picker/color-picker.js +1 -1
  190. package/es2021.en/plugins/color-picker/color-picker.min.js +1 -1
  191. package/es2021.en/plugins/emoji/emoji.css +1 -1
  192. package/es2021.en/plugins/emoji/emoji.js +1 -1
  193. package/es2021.en/plugins/emoji/emoji.min.js +1 -1
  194. package/es2021.en/plugins/export-docs/export-docs.js +1 -1
  195. package/es2021.en/plugins/export-docs/export-docs.min.js +1 -1
  196. package/es2021.en/plugins/finder/finder.css +1 -1
  197. package/es2021.en/plugins/finder/finder.js +1 -1
  198. package/es2021.en/plugins/finder/finder.min.js +1 -1
  199. package/es2021.en/plugins/google-maps/google-maps.css +1 -1
  200. package/es2021.en/plugins/google-maps/google-maps.js +1 -1
  201. package/es2021.en/plugins/google-maps/google-maps.min.js +1 -1
  202. package/es2021.en/plugins/google-search/google-search.js +1 -1
  203. package/es2021.en/plugins/google-search/google-search.min.js +1 -1
  204. package/es2021.en/plugins/highlight-signature/highlight-signature.js +1 -1
  205. package/es2021.en/plugins/highlight-signature/highlight-signature.min.js +1 -1
  206. package/es2021.en/plugins/iframe-editor/iframe-editor.css +1 -1
  207. package/es2021.en/plugins/iframe-editor/iframe-editor.js +1 -1
  208. package/es2021.en/plugins/iframe-editor/iframe-editor.min.js +1 -1
  209. package/es2021.en/plugins/image-editor-pro/image-editor-pro.css +1 -1
  210. package/es2021.en/plugins/image-editor-pro/image-editor-pro.js +1 -1
  211. package/es2021.en/plugins/image-editor-pro/image-editor-pro.min.js +1 -1
  212. package/es2021.en/plugins/keyboard/keyboard.css +1 -1
  213. package/es2021.en/plugins/keyboard/keyboard.js +1 -1
  214. package/es2021.en/plugins/keyboard/keyboard.min.js +1 -1
  215. package/es2021.en/plugins/mobile-view/mobile-view.js +1 -1
  216. package/es2021.en/plugins/mobile-view/mobile-view.min.js +1 -1
  217. package/es2021.en/plugins/page-break/page-break.js +1 -1
  218. package/es2021.en/plugins/page-break/page-break.min.js +1 -1
  219. package/es2021.en/plugins/paste-code/paste-code.css +1 -1
  220. package/es2021.en/plugins/paste-code/paste-code.js +1 -1
  221. package/es2021.en/plugins/paste-code/paste-code.min.js +1 -1
  222. package/es2021.en/plugins/paste-from-word/paste-from-word.js +1 -1
  223. package/es2021.en/plugins/paste-from-word/paste-from-word.min.js +1 -1
  224. package/es2021.en/plugins/show-blocks/show-blocks.js +1 -1
  225. package/es2021.en/plugins/show-blocks/show-blocks.min.js +1 -1
  226. package/es2021.en/plugins/style/style.css +1 -1
  227. package/es2021.en/plugins/style/style.js +1 -1
  228. package/es2021.en/plugins/style/style.min.js +1 -1
  229. package/es2021.en/plugins/templates/templates.css +1 -1
  230. package/es2021.en/plugins/templates/templates.js +1 -1
  231. package/es2021.en/plugins/templates/templates.min.js +1 -1
  232. package/es2021.en/plugins/todo-list/todo-list.css +1 -1
  233. package/es2021.en/plugins/todo-list/todo-list.js +1 -1
  234. package/es2021.en/plugins/todo-list/todo-list.min.js +1 -1
  235. package/es2021.en/plugins/translate/translate.css +1 -1
  236. package/es2021.en/plugins/translate/translate.js +1 -1
  237. package/es2021.en/plugins/translate/translate.min.js +1 -1
  238. package/es2021.en/plugins/tune-block/tune-block.css +1 -1
  239. package/es2021.en/plugins/tune-block/tune-block.js +1 -1
  240. package/es2021.en/plugins/tune-block/tune-block.min.js +1 -1
  241. package/es5/jodit.css +2 -2
  242. package/es5/jodit.fat.min.js +2 -2
  243. package/es5/jodit.js +122 -49
  244. package/es5/jodit.min.css +2 -2
  245. package/es5/jodit.min.js +2 -2
  246. package/es5/plugins/ai-assistant-pro/ai-assistant-pro.css +1 -1
  247. package/es5/plugins/ai-assistant-pro/ai-assistant-pro.js +1 -1
  248. package/es5/plugins/ai-assistant-pro/ai-assistant-pro.min.js +1 -1
  249. package/es5/plugins/autocomplete/autocomplete.css +1 -1
  250. package/es5/plugins/autocomplete/autocomplete.js +1 -1
  251. package/es5/plugins/autocomplete/autocomplete.min.js +1 -1
  252. package/es5/plugins/backup/backup.css +1 -1
  253. package/es5/plugins/backup/backup.js +1 -1
  254. package/es5/plugins/backup/backup.min.js +1 -1
  255. package/es5/plugins/button-generator/button-generator.css +1 -1
  256. package/es5/plugins/button-generator/button-generator.js +1 -1
  257. package/es5/plugins/button-generator/button-generator.min.js +1 -1
  258. package/es5/plugins/change-case/change-case.js +1 -1
  259. package/es5/plugins/change-case/change-case.min.js +1 -1
  260. package/es5/plugins/color-picker/color-picker.css +1 -1
  261. package/es5/plugins/color-picker/color-picker.js +1 -1
  262. package/es5/plugins/color-picker/color-picker.min.js +1 -1
  263. package/es5/plugins/emoji/emoji.css +1 -1
  264. package/es5/plugins/emoji/emoji.js +1 -1
  265. package/es5/plugins/emoji/emoji.min.js +1 -1
  266. package/es5/plugins/export-docs/export-docs.js +1 -1
  267. package/es5/plugins/export-docs/export-docs.min.js +1 -1
  268. package/es5/plugins/finder/finder.css +1 -1
  269. package/es5/plugins/finder/finder.js +1 -1
  270. package/es5/plugins/finder/finder.min.js +1 -1
  271. package/es5/plugins/google-maps/google-maps.css +1 -1
  272. package/es5/plugins/google-maps/google-maps.js +1 -1
  273. package/es5/plugins/google-maps/google-maps.min.js +1 -1
  274. package/es5/plugins/google-search/google-search.js +1 -1
  275. package/es5/plugins/google-search/google-search.min.js +1 -1
  276. package/es5/plugins/highlight-signature/highlight-signature.js +1 -1
  277. package/es5/plugins/highlight-signature/highlight-signature.min.js +1 -1
  278. package/es5/plugins/iframe-editor/iframe-editor.css +1 -1
  279. package/es5/plugins/iframe-editor/iframe-editor.js +1 -1
  280. package/es5/plugins/iframe-editor/iframe-editor.min.js +1 -1
  281. package/es5/plugins/image-editor-pro/image-editor-pro.css +1 -1
  282. package/es5/plugins/image-editor-pro/image-editor-pro.js +1 -1
  283. package/es5/plugins/image-editor-pro/image-editor-pro.min.js +1 -1
  284. package/es5/plugins/keyboard/keyboard.css +1 -1
  285. package/es5/plugins/keyboard/keyboard.js +1 -1
  286. package/es5/plugins/keyboard/keyboard.min.js +1 -1
  287. package/es5/plugins/mobile-view/mobile-view.js +1 -1
  288. package/es5/plugins/mobile-view/mobile-view.min.js +1 -1
  289. package/es5/plugins/page-break/page-break.js +1 -1
  290. package/es5/plugins/page-break/page-break.min.js +1 -1
  291. package/es5/plugins/paste-code/paste-code.css +1 -1
  292. package/es5/plugins/paste-code/paste-code.js +1 -1
  293. package/es5/plugins/paste-code/paste-code.min.js +1 -1
  294. package/es5/plugins/paste-from-word/paste-from-word.js +1 -1
  295. package/es5/plugins/paste-from-word/paste-from-word.min.js +1 -1
  296. package/es5/plugins/show-blocks/show-blocks.js +1 -1
  297. package/es5/plugins/show-blocks/show-blocks.min.js +1 -1
  298. package/es5/plugins/style/style.css +1 -1
  299. package/es5/plugins/style/style.js +1 -1
  300. package/es5/plugins/style/style.min.js +1 -1
  301. package/es5/plugins/templates/templates.css +1 -1
  302. package/es5/plugins/templates/templates.js +1 -1
  303. package/es5/plugins/templates/templates.min.js +1 -1
  304. package/es5/plugins/todo-list/todo-list.css +1 -1
  305. package/es5/plugins/todo-list/todo-list.js +1 -1
  306. package/es5/plugins/todo-list/todo-list.min.js +1 -1
  307. package/es5/plugins/translate/translate.css +1 -1
  308. package/es5/plugins/translate/translate.js +1 -1
  309. package/es5/plugins/translate/translate.min.js +1 -1
  310. package/es5/plugins/tune-block/tune-block.css +1 -1
  311. package/es5/plugins/tune-block/tune-block.js +1 -1
  312. package/es5/plugins/tune-block/tune-block.min.js +1 -1
  313. package/es5/polyfills.fat.min.js +1 -1
  314. package/es5/polyfills.js +1 -1
  315. package/es5/polyfills.min.js +1 -1
  316. package/package.json +1 -1
@@ -1,7 +1,7 @@
1
1
  /*!
2
2
  * jodit-pro - PRO Version of Jodit Editor
3
3
  * Author: Chupurnov Valerii <chupurnov@gmail.com>
4
- * Version: v4.13.1
4
+ * Version: v4.13.3
5
5
  * Url: https://xdsoft.net/jodit/pro/
6
6
  * License(s): SEE LICENSE IN LICENSE.md
7
7
  */
@@ -1754,7 +1754,7 @@ __webpack_require__.r(__webpack_exports__);
1754
1754
  * ```
1755
1755
  * @packageDocumentation
1756
1756
  * @module constants
1757
- */ const APP_VERSION = "4.13.1";
1757
+ */ const APP_VERSION = "4.13.3";
1758
1758
  // prettier-ignore
1759
1759
  const ES = "es2021";
1760
1760
  const IS_ES_MODERN = true;
@@ -2884,6 +2884,7 @@ function wait(condition) {
2884
2884
 
2885
2885
 
2886
2886
 
2887
+ const TEMP_ELEMENT_REG_EXP = new RegExp(`<([a-z]+)[^>]+${_constants_js__WEBPACK_IMPORTED_MODULE_0__.TEMP_ATTR}[^>]*>(.+?)</\\1>`, 'gi');
2887
2888
  /**
2888
2889
  * Module for working with DOM
2889
2890
  */ class Dom {
@@ -2984,7 +2985,11 @@ function wait(condition) {
2984
2985
  }
2985
2986
  }
2986
2987
  /**
2987
- * Call functions for all nodes between `start` and `end`
2988
+ * Call callback for all nodes between `start` and `end` in document order
2989
+ * (`start` and `end` are not included). Iteration stops when the callback returns `true`.
2990
+ *
2991
+ * `end` must be positioned after `start` in the document (e.g. selection markers),
2992
+ * otherwise iteration will stop only at the end of the tree.
2988
2993
  */ static between(start, end, callback) {
2989
2994
  let next = start;
2990
2995
  while(next && next !== end){
@@ -2995,6 +3000,10 @@ function wait(condition) {
2995
3000
  if (!step) {
2996
3001
  while(next && !next.nextSibling){
2997
3002
  next = next.parentNode;
3003
+ // `end` was reached while ascending - all nodes between were visited
3004
+ if (next === end) {
3005
+ return;
3006
+ }
2998
3007
  }
2999
3008
  step = next === null || next === void 0 ? void 0 : next.nextSibling;
3000
3009
  }
@@ -3076,7 +3085,7 @@ function wait(condition) {
3076
3085
  return Dom.isNode(elm) && (elm.nodeName === 'TD' || elm.nodeName === 'TH');
3077
3086
  }
3078
3087
  /**
3079
- * Check if element is a list element UL or OL
3088
+ * Check if element is a list element UL or OL
3080
3089
  */ static isList(elm) {
3081
3090
  return Dom.isTag(elm, _constants_js__WEBPACK_IMPORTED_MODULE_0__.LIST_TAGS);
3082
3091
  }
@@ -3119,12 +3128,13 @@ function wait(condition) {
3119
3128
  /**
3120
3129
  * Check if element is document fragment
3121
3130
  */ static isFragment(node) {
3122
- var _a;
3123
3131
  if (!Dom.isNode(node)) {
3124
3132
  return false;
3125
3133
  }
3126
- const win = (_a = node.ownerDocument) === null || _a === void 0 ? void 0 : _a.defaultView;
3127
- return Boolean(win && node.nodeType === Node.DOCUMENT_FRAGMENT_NODE);
3134
+ // no `defaultView` requirement fragments of an inert document
3135
+ // (`template.content`, `DOMParser`, `implementation.createHTMLDocument`)
3136
+ // are still fragments
3137
+ return node.nodeType === Node.DOCUMENT_FRAGMENT_NODE;
3128
3138
  }
3129
3139
  /**
3130
3140
  * Check if element is HTMLElement node
@@ -3233,16 +3243,19 @@ function wait(condition) {
3233
3243
  return null;
3234
3244
  }
3235
3245
  /**
3236
- * Find next/prev node what `condition(next) === true`
3246
+ * Lazily iterate over all nodes what follow after `start` (in document order
3247
+ * for `leftToRight = true`, in reverse order otherwise) inside `root`.
3248
+ * Ancestors of `start` are not yielded.
3237
3249
  */ static *nextGen(start, root, leftToRight = true, withChild = true) {
3238
3250
  const stack = [];
3239
3251
  let currentNode = start;
3240
3252
  do {
3241
3253
  let next = leftToRight ? currentNode.nextSibling : currentNode.previousSibling;
3242
3254
  while(next){
3243
- stack.unshift(next);
3255
+ stack.push(next);
3244
3256
  next = leftToRight ? next.nextSibling : next.previousSibling;
3245
3257
  }
3258
+ stack.reverse();
3246
3259
  yield* this.runInStack(start, stack, leftToRight, withChild);
3247
3260
  currentNode = currentNode.parentNode;
3248
3261
  }while (currentNode && currentNode !== root)
@@ -3257,7 +3270,7 @@ function wait(condition) {
3257
3270
  * ```javascript
3258
3271
  * Jodit.modules.Dom.each(editor.s.current(), function (node) {
3259
3272
  * if (node.nodeType === Node.TEXT_NODE) {
3260
- * node.nodeValue = node.nodeValue.replace(Jodit.INVISIBLE_SPACE_REG_EX, '') // remove all of the text element codes invisible character
3273
+ * node.nodeValue = node.nodeValue.replace(Jodit.INVISIBLE_SPACE_REG_EXP(), '') // remove all of the text element codes invisible character
3261
3274
  * }
3262
3275
  * });
3263
3276
  * ```
@@ -3337,11 +3350,17 @@ function wait(condition) {
3337
3350
  */ static findNotEmptyNeighbor(node, left, root) {
3338
3351
  return (0,_helpers_utils_utils_js__WEBPACK_IMPORTED_MODULE_14__.call)(left ? Dom.prev : Dom.next, node, (n)=>Boolean(n && (!(Dom.isText(n) || Dom.isComment(n)) || (0,_helpers_string_trim_js__WEBPACK_IMPORTED_MODULE_8__.trim)((n === null || n === void 0 ? void 0 : n.nodeValue) || '').length)), root);
3339
3352
  }
3340
- static sibling(node, left) {
3353
+ /**
3354
+ * Returns the previous (`left = true`) or next sibling of the node
3355
+ */ static sibling(node, left) {
3341
3356
  return left ? node.previousSibling : node.nextSibling;
3342
3357
  }
3343
3358
  /**
3344
3359
  * It goes through all the elements in ascending order, and checks to see if they meet the predetermined condition
3360
+ *
3361
+ * The condition is checked for the `node` itself too. The `root` reached
3362
+ * while ascending is checked only when `checkRoot = true`
3363
+ * (but if `node === root` it is checked in any case).
3345
3364
  */ static up(node, condition, root, checkRoot = false) {
3346
3365
  let start = node;
3347
3366
  if (!start) {
@@ -3466,7 +3485,12 @@ function wait(condition) {
3466
3485
  */ static safeRemove(...nodes) {
3467
3486
  nodes.forEach((node)=>Dom.isNode(node) && node.parentNode && node.parentNode.removeChild(node));
3468
3487
  }
3469
- static safeInsertNode(range, node) {
3488
+ /**
3489
+ * Insert a node into the range and collapse the range to the start of
3490
+ * the inserted content. Unlike the native `Range.insertNode` it does not
3491
+ * split inseparable elements (BR, HR, IMG etc.) and removes empty text
3492
+ * nodes produced by the split of a text container.
3493
+ */ static safeInsertNode(range, node) {
3470
3494
  range.collapsed || range.deleteContents();
3471
3495
  const child = Dom.isFragment(node) ? node.lastChild : node;
3472
3496
  if (range.startContainer === range.endContainer && range.collapsed && Dom.isTag(range.startContainer, _constants_js__WEBPACK_IMPORTED_MODULE_0__.INSEPARABLE_TAGS)) {
@@ -3505,22 +3529,17 @@ function wait(condition) {
3505
3529
  }
3506
3530
  }
3507
3531
  static isTag(node, tagNames) {
3532
+ if (Array.isArray(tagNames)) {
3533
+ throw new TypeError('Dom.isTag does not support array');
3534
+ }
3508
3535
  if (!this.isElement(node)) {
3509
3536
  return false;
3510
3537
  }
3511
3538
  const nameL = node.tagName.toLowerCase();
3512
- const nameU = node.tagName.toUpperCase();
3513
3539
  if (tagNames instanceof Set) {
3514
- return tagNames.has(nameL) || tagNames.has(nameU);
3515
- }
3516
- if (Array.isArray(tagNames)) {
3517
- throw new TypeError('Dom.isTag does not support array');
3518
- }
3519
- const tags = tagNames;
3520
- if (nameL === tags || nameU === tags) {
3521
- return true;
3540
+ return tagNames.has(nameL) || tagNames.has(node.tagName.toUpperCase());
3522
3541
  }
3523
- return false;
3542
+ return nameL === tagNames || node.tagName.toUpperCase() === tagNames;
3524
3543
  }
3525
3544
  /**
3526
3545
  * Marks an item as temporary
@@ -3543,9 +3562,9 @@ function wait(condition) {
3543
3562
  return Dom.isNode(elm) && Dom.isTag(elm, 'span') && elm.hasAttribute('data-' + _constants_js__WEBPACK_IMPORTED_MODULE_0__.MARKER_CLASS);
3544
3563
  }
3545
3564
  /**
3546
- * Replace temporary elements from string
3565
+ * Unwrap temporary elements inside a HTML string (keeps their content)
3547
3566
  */ static replaceTemporaryFromString(value) {
3548
- return value.replace(/<([a-z]+)[^>]+data-jodit-temp[^>]+>(.+?)<\/\1>/gi, '$2');
3567
+ return value.replace(TEMP_ELEMENT_REG_EXP, '$2');
3549
3568
  }
3550
3569
  /**
3551
3570
  * Get temporary list
@@ -3604,13 +3623,29 @@ function wait(condition) {
3604
3623
 
3605
3624
 
3606
3625
 
3607
- class LazyWalker extends _event_emitter_eventify_js__WEBPACK_IMPORTED_MODULE_2__.Eventify {
3608
- setWork(root) {
3626
+ /**
3627
+ * Walks the DOM tree in small chunks between browser tasks so that even huge
3628
+ * documents do not block the main thread.
3629
+ *
3630
+ * Events:
3631
+ * - `visit` - is called for every node; return `true` to mark the pass as
3632
+ * "had effect" (it will be passed into the `end` event)
3633
+ * - `break` - the pass was interrupted via [[LazyWalker.break]]
3634
+ * - `end` - the pass is finished, receives `true` if some `visit` handler returned `true`
3635
+ */ class LazyWalker extends _event_emitter_eventify_js__WEBPACK_IMPORTED_MODULE_2__.Eventify {
3636
+ /**
3637
+ * Starts a new pass over the `root` tree.
3638
+ * If a previous pass is still running it will be stopped first.
3639
+ */ setWork(root) {
3609
3640
  if (this.isWorked) {
3610
3641
  this.break();
3642
+ } else {
3643
+ // cancel a not yet started pass scheduled by the previous `setWork` call
3644
+ this.stop();
3611
3645
  }
3612
3646
  this.workNodes = _dom_js__WEBPACK_IMPORTED_MODULE_1__.Dom.eachGen(root, !this.options.reverse);
3613
3647
  this.isFinished = false;
3648
+ this.hadAffect = false;
3614
3649
  this._requestStarting();
3615
3650
  return this;
3616
3651
  }
@@ -3635,10 +3670,12 @@ class LazyWalker extends _event_emitter_eventify_js__WEBPACK_IMPORTED_MODULE_2__
3635
3670
  }
3636
3671
  }
3637
3672
  stop() {
3673
+ var _a;
3638
3674
  this.isWorked = false;
3639
3675
  this.isFinished = true;
3640
3676
  this.workNodes = null;
3641
- this.async.cancelIdleCallback(this.idleId);
3677
+ (_a = this.__schedulerController) === null || _a === void 0 ? void 0 : _a.abort();
3678
+ this.__schedulerController = null;
3642
3679
  }
3643
3680
  destruct() {
3644
3681
  super.destruct();
@@ -3650,7 +3687,7 @@ class LazyWalker extends _event_emitter_eventify_js__WEBPACK_IMPORTED_MODULE_2__
3650
3687
  this.isWorked = true;
3651
3688
  let count = 0;
3652
3689
  const chunkSize = (_a = this.options.timeoutChunkSize) !== null && _a !== void 0 ? _a : 50;
3653
- while(!this.isFinished && count <= chunkSize){
3690
+ while(!this.isFinished && count < chunkSize){
3654
3691
  const item = this.workNodes.next();
3655
3692
  count += 1;
3656
3693
  if (this.visitNode(item.value)) {
@@ -3683,7 +3720,6 @@ class LazyWalker extends _event_emitter_eventify_js__WEBPACK_IMPORTED_MODULE_2__
3683
3720
  this.hadAffect = false;
3684
3721
  this.isWorked = false;
3685
3722
  this.isFinished = false;
3686
- this.idleId = 0;
3687
3723
  this.__schedulerController = null;
3688
3724
  }
3689
3725
  }
@@ -10013,7 +10049,9 @@ _config_js__WEBPACK_IMPORTED_MODULE_0__.Config.prototype.defaultAjaxOptions = {
10013
10049
 
10014
10050
 
10015
10051
  /**
10016
- * Check if the cursor is at the edge of the string
10052
+ * Despite the name, returns `true` when the cursor is NOT at the checked edge
10053
+ * of the text node: there is significant (non invisible-space) text between
10054
+ * the offset and the start (`start = true`) or the end (`end = true`) of the string.
10017
10055
  * @private
10018
10056
  */ function cursorInTheEdgeOfString(container, offset, start, end) {
10019
10057
  var _a;
@@ -10327,7 +10365,7 @@ class Selection {
10327
10365
  /**
10328
10366
  * Remove all markers
10329
10367
  */ removeMarkers() {
10330
- _dom_dom_js__WEBPACK_IMPORTED_MODULE_2__.Dom.safeRemove.apply(null, this.markers);
10368
+ _dom_dom_js__WEBPACK_IMPORTED_MODULE_2__.Dom.safeRemove(...this.markers);
10331
10369
  }
10332
10370
  /**
10333
10371
  * Create marker element
@@ -10384,7 +10422,11 @@ class Selection {
10384
10422
  this.selectRange(range);
10385
10423
  }
10386
10424
  }
10387
- fakes() {
10425
+ /**
10426
+ * Inserts invisible fake nodes on the boundaries of the current selection
10427
+ * and returns them. Unlike [[Select.save]] the selection stays valid while
10428
+ * the DOM around it is being modified. Restore it later with [[Select.restoreFakes]].
10429
+ */ fakes() {
10388
10430
  const sel = this.sel;
10389
10431
  if (!sel || !sel.rangeCount) {
10390
10432
  return [];
@@ -10410,7 +10452,10 @@ class Selection {
10410
10452
  this.selectRange(range);
10411
10453
  return result;
10412
10454
  }
10413
- restoreFakes(fakes) {
10455
+ /**
10456
+ * Restores the selection previously saved with [[Select.fakes]]
10457
+ * and removes the fake nodes (disconnected fakes are ignored).
10458
+ */ restoreFakes(fakes) {
10414
10459
  var _a, _b, _c, _d;
10415
10460
  const nodes = fakes.filter((n)=>n.isConnected);
10416
10461
  if (!nodes.length) {
@@ -10652,7 +10697,6 @@ class Selection {
10652
10697
  }
10653
10698
  const node = this.j.createInside.div();
10654
10699
  const fragment = this.j.createInside.fragment();
10655
- let lastChild;
10656
10700
  if (!this.isFocused() && this.j.isEditorMode()) {
10657
10701
  this.focus();
10658
10702
  this.restore();
@@ -10665,12 +10709,10 @@ class Selection {
10665
10709
  if (!this.j.isEditorMode() && this.j.e.fire('insertHTML', node.innerHTML) === false) {
10666
10710
  return;
10667
10711
  }
10668
- lastChild = node.lastChild;
10669
- if (!lastChild) {
10712
+ if (!node.lastChild) {
10670
10713
  return;
10671
10714
  }
10672
10715
  while(node.firstChild){
10673
- lastChild = node.firstChild;
10674
10716
  fragment.appendChild(node.firstChild);
10675
10717
  }
10676
10718
  this.insertNode(fragment, insertCursorAfter, false);
@@ -10783,7 +10825,8 @@ class Selection {
10783
10825
  if (_dom_dom_js__WEBPACK_IMPORTED_MODULE_2__.Dom.isEmptyTextNode(start)) {
10784
10826
  nodes.push(start);
10785
10827
  }
10786
- if (start.firstChild) {
10828
+ // `start` can be undefined for an empty root
10829
+ if (start === null || start === void 0 ? void 0 : start.firstChild) {
10787
10830
  nodes.push(start.firstChild);
10788
10831
  }
10789
10832
  }
@@ -10798,8 +10841,7 @@ class Selection {
10798
10841
  *
10799
10842
  * @returns true - the cursor is at the end(start) block, null - cursor somewhere outside
10800
10843
  */ cursorInTheEdge(start, parentBlock, fake = null) {
10801
- var _a;
10802
- const end = !start, range = (_a = this.sel) === null || _a === void 0 ? void 0 : _a.getRangeAt(0);
10844
+ const end = !start, sel = this.sel, range = (sel === null || sel === void 0 ? void 0 : sel.rangeCount) ? sel.getRangeAt(0) : null;
10803
10845
  fake !== null && fake !== void 0 ? fake : fake = this.current(false);
10804
10846
  if (!range || !fake || !_dom_dom_js__WEBPACK_IMPORTED_MODULE_2__.Dom.isOrContains(parentBlock, fake, true)) {
10805
10847
  return null;
@@ -11140,7 +11182,11 @@ class Selection {
11140
11182
  }
11141
11183
  return currentBox.previousElementSibling;
11142
11184
  }
11143
- expandSelection() {
11185
+ /**
11186
+ * Expands the non-collapsed selection outward: boundaries positioned on the
11187
+ * edge of their parents are moved out of them (e.g. `<p><b>|test|</b></p>`
11188
+ * becomes `<p>|<b>test</b>|</p>`)
11189
+ */ expandSelection() {
11144
11190
  if (this.isCollapsed()) {
11145
11191
  return this;
11146
11192
  }
@@ -11617,12 +11663,11 @@ if (_constants_js__WEBPACK_IMPORTED_MODULE_0__.globalDocument) {
11617
11663
 
11618
11664
 
11619
11665
  /**
11620
- * Compares whether the given attributes match the element's own attributes
11666
+ * Checks that every attribute from `attrs` is present on the element with
11667
+ * the same value (one-directional match: extra own attributes of the element
11668
+ * are ignored, empty `attrs` matches any element)
11621
11669
  * @private
11622
11670
  */ function isSameAttributes(elm, attrs) {
11623
- if (!elm.attributes.length && !(0,_helpers_size_object_size_js__WEBPACK_IMPORTED_MODULE_0__.size)(attrs)) {
11624
- return true;
11625
- }
11626
11671
  if (!(0,_helpers_size_object_size_js__WEBPACK_IMPORTED_MODULE_0__.size)(attrs)) {
11627
11672
  return true;
11628
11673
  }
@@ -11666,7 +11711,8 @@ function elementsEqualAttributes(elm1, elm2) {
11666
11711
  * @param commitStyle - style commit
11667
11712
  * @param elm - checked item
11668
11713
  * @param strict - strict mode - false - the default tag is suitable for us if it is also in the commit
11669
- * @param strictStyle - strict style mode - true - the element has the same style keys as in the commit, but not their values
11714
+ * @param strictStyle - strict style mode - true - the element must have the same style keys AND values
11715
+ * as in the commit, false - matching style keys are enough
11670
11716
  * @private
11671
11717
  */ function isSuitElement(commitStyle, elm, strict, strictStyle = true) {
11672
11718
  var _a;
@@ -11776,6 +11822,13 @@ function unwrapList(mode, list, li, jodit, cs) {
11776
11822
  (0,_extract_js__WEBPACK_IMPORTED_MODULE_2__.extractSelectedPart)(list, li, jodit);
11777
11823
  (0,_helpers_utils_assert_js__WEBPACK_IMPORTED_MODULE_1__.assert)(_dom_dom_js__WEBPACK_IMPORTED_MODULE_0__.Dom.isHTMLElement(li.parentElement), 'Element should be inside the list');
11778
11824
  _dom_dom_js__WEBPACK_IMPORTED_MODULE_0__.Dom.unwrap(li.parentElement);
11825
+ // In the REPLACE mode the content will be immediately wrapped in a `li`
11826
+ // of the new list inside `wrapList`, so it should stay in the document.
11827
+ // Replacing it with a fragment here would dissolve the content
11828
+ // (with `enter: 'br'`) and the new list would never be inserted.
11829
+ if (mode === _constants_js__WEBPACK_IMPORTED_MODULE_4__.REPLACE) {
11830
+ return li;
11831
+ }
11779
11832
  return _dom_dom_js__WEBPACK_IMPORTED_MODULE_0__.Dom.replace(li, jodit.o.enter.toLowerCase() !== 'br' ? jodit.o.enter : jodit.createInside.fragment(), jodit.createInside);
11780
11833
  }
11781
11834
 
@@ -11943,7 +11996,9 @@ function toggleClass(jodit, value, elm, mode, dry) {
11943
11996
  function toggleAttribute(jodit, value, elm, key, dry, mode) {
11944
11997
  (0,_helpers_utils_index_js__WEBPACK_IMPORTED_MODULE_7__.assert)((0,_helpers_checker_index_js__WEBPACK_IMPORTED_MODULE_3__.isString)(value) || (0,_helpers_checker_index_js__WEBPACK_IMPORTED_MODULE_3__.isNumber)(value) || (0,_helpers_checker_index_js__WEBPACK_IMPORTED_MODULE_3__.isBoolean)(value) || value == null, 'Attribute value must be a string or number or boolean or null');
11945
11998
  const hook = jodit.e.fire.bind(jodit.e, `${_constants_js__WEBPACK_IMPORTED_MODULE_10__._PREFIX}AfterToggleAttribute`);
11946
- if ((0,_helpers_utils_index_js__WEBPACK_IMPORTED_MODULE_7__.attr)(elm, key) === value) {
11999
+ // `attr()` getter always returns a string, so a number/boolean value
12000
+ // must be normalized, otherwise the toggle-off branch is unreachable
12001
+ if ((0,_helpers_utils_index_js__WEBPACK_IMPORTED_MODULE_7__.attr)(elm, key) === (value == null ? value : String(value))) {
11947
12002
  !dry && (0,_helpers_utils_index_js__WEBPACK_IMPORTED_MODULE_7__.attr)(elm, key, null);
11948
12003
  mode = _constants_js__WEBPACK_IMPORTED_MODULE_10__.UNSET;
11949
12004
  !dry && hook(mode, elm, key, value);
@@ -12285,7 +12340,7 @@ class CommitStyle {
12285
12340
  if (!data) {
12286
12341
  return false;
12287
12342
  }
12288
- return data[key];
12343
+ return Boolean(data[key]);
12289
12344
  }
12290
12345
  setApplied(elm, key) {
12291
12346
  var _a;
@@ -12300,7 +12355,7 @@ class CommitStyle {
12300
12355
  return this.options.element || this.defaultTag;
12301
12356
  }
12302
12357
  /**
12303
- * New element is blocked
12358
+ * New element is a block element
12304
12359
  */ get elementIsBlock() {
12305
12360
  return Boolean(this.options.element && _constants_js__WEBPACK_IMPORTED_MODULE_0__.IS_BLOCK.test(this.options.element));
12306
12361
  }
@@ -44557,6 +44612,11 @@ class AceEditor extends _sourceEditor_js__WEBPACK_IMPORTED_MODULE_2__.SourceEdit
44557
44612
  this.instance.setOption('rtlText', true);
44558
44613
  this.instance.setOption('rtl', true);
44559
44614
  }
44615
+ // Forward every native ACE option the user provided (theme,
44616
+ // mode, fontSize, tabSize, …). Without this only the handful of
44617
+ // keys explicitly wired below were applied and extras such as
44618
+ // `fontSize` were silently ignored. See #1285
44619
+ this.instance.setOptions(editor.o.sourceEditorNativeOptions);
44560
44620
  this.instance.setTheme(editor.o.sourceEditorNativeOptions.theme);
44561
44621
  this.instance.renderer.setShowGutter(editor.o.sourceEditorNativeOptions.showGutter);
44562
44622
  this.instance.getSession().setMode(editor.o.sourceEditorNativeOptions.mode);