jodit-pro 4.13.1 → 4.13.2

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 +2 -2
  3. package/es2015/jodit.js +104 -49
  4. package/es2015/jodit.min.js +2 -2
  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 +2 -2
  73. package/es2018/jodit.min.js +2 -2
  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 +3 -3
  101. package/es2021/jodit.js +104 -49
  102. package/es2021/jodit.min.js +3 -3
  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 +3 -3
  172. package/es2021.en/jodit.js +104 -49
  173. package/es2021.en/jodit.min.js +3 -3
  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 +117 -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
package/es2015/jodit.js CHANGED
@@ -1,7 +1,7 @@
1
1
  /*!
2
2
  * jodit-pro - PRO Version of Jodit Editor
3
3
  * Author: Chupurnov Valerii <chupurnov@gmail.com>
4
- * Version: v4.13.1
4
+ * Version: v4.13.2
5
5
  * Url: https://xdsoft.net/jodit/pro/
6
6
  * License(s): SEE LICENSE IN LICENSE.md
7
7
  */
@@ -1805,7 +1805,7 @@ __webpack_require__.r(__webpack_exports__);
1805
1805
  * ```
1806
1806
  * @packageDocumentation
1807
1807
  * @module constants
1808
- */ const APP_VERSION = "4.13.1";
1808
+ */ const APP_VERSION = "4.13.2";
1809
1809
  // prettier-ignore
1810
1810
  const ES = "es2015";
1811
1811
  const IS_ES_MODERN = true;
@@ -2935,6 +2935,7 @@ function wait(condition) {
2935
2935
 
2936
2936
 
2937
2937
 
2938
+ const TEMP_ELEMENT_REG_EXP = new RegExp(`<([a-z]+)[^>]+${_constants_js__WEBPACK_IMPORTED_MODULE_0__.TEMP_ATTR}[^>]*>(.+?)</\\1>`, 'gi');
2938
2939
  /**
2939
2940
  * Module for working with DOM
2940
2941
  */ class Dom {
@@ -3035,7 +3036,11 @@ function wait(condition) {
3035
3036
  }
3036
3037
  }
3037
3038
  /**
3038
- * Call functions for all nodes between `start` and `end`
3039
+ * Call callback for all nodes between `start` and `end` in document order
3040
+ * (`start` and `end` are not included). Iteration stops when the callback returns `true`.
3041
+ *
3042
+ * `end` must be positioned after `start` in the document (e.g. selection markers),
3043
+ * otherwise iteration will stop only at the end of the tree.
3039
3044
  */ static between(start, end, callback) {
3040
3045
  let next = start;
3041
3046
  while(next && next !== end){
@@ -3046,6 +3051,10 @@ function wait(condition) {
3046
3051
  if (!step) {
3047
3052
  while(next && !next.nextSibling){
3048
3053
  next = next.parentNode;
3054
+ // `end` was reached while ascending - all nodes between were visited
3055
+ if (next === end) {
3056
+ return;
3057
+ }
3049
3058
  }
3050
3059
  step = next === null || next === void 0 ? void 0 : next.nextSibling;
3051
3060
  }
@@ -3127,7 +3136,7 @@ function wait(condition) {
3127
3136
  return Dom.isNode(elm) && (elm.nodeName === 'TD' || elm.nodeName === 'TH');
3128
3137
  }
3129
3138
  /**
3130
- * Check if element is a list element UL or OL
3139
+ * Check if element is a list element UL or OL
3131
3140
  */ static isList(elm) {
3132
3141
  return Dom.isTag(elm, _constants_js__WEBPACK_IMPORTED_MODULE_0__.LIST_TAGS);
3133
3142
  }
@@ -3170,12 +3179,13 @@ function wait(condition) {
3170
3179
  /**
3171
3180
  * Check if element is document fragment
3172
3181
  */ static isFragment(node) {
3173
- var _a;
3174
3182
  if (!Dom.isNode(node)) {
3175
3183
  return false;
3176
3184
  }
3177
- const win = (_a = node.ownerDocument) === null || _a === void 0 ? void 0 : _a.defaultView;
3178
- return Boolean(win && node.nodeType === Node.DOCUMENT_FRAGMENT_NODE);
3185
+ // no `defaultView` requirement fragments of an inert document
3186
+ // (`template.content`, `DOMParser`, `implementation.createHTMLDocument`)
3187
+ // are still fragments
3188
+ return node.nodeType === Node.DOCUMENT_FRAGMENT_NODE;
3179
3189
  }
3180
3190
  /**
3181
3191
  * Check if element is HTMLElement node
@@ -3284,16 +3294,19 @@ function wait(condition) {
3284
3294
  return null;
3285
3295
  }
3286
3296
  /**
3287
- * Find next/prev node what `condition(next) === true`
3297
+ * Lazily iterate over all nodes what follow after `start` (in document order
3298
+ * for `leftToRight = true`, in reverse order otherwise) inside `root`.
3299
+ * Ancestors of `start` are not yielded.
3288
3300
  */ static *nextGen(start, root, leftToRight = true, withChild = true) {
3289
3301
  const stack = [];
3290
3302
  let currentNode = start;
3291
3303
  do {
3292
3304
  let next = leftToRight ? currentNode.nextSibling : currentNode.previousSibling;
3293
3305
  while(next){
3294
- stack.unshift(next);
3306
+ stack.push(next);
3295
3307
  next = leftToRight ? next.nextSibling : next.previousSibling;
3296
3308
  }
3309
+ stack.reverse();
3297
3310
  yield* this.runInStack(start, stack, leftToRight, withChild);
3298
3311
  currentNode = currentNode.parentNode;
3299
3312
  }while (currentNode && currentNode !== root)
@@ -3308,7 +3321,7 @@ function wait(condition) {
3308
3321
  * ```javascript
3309
3322
  * Jodit.modules.Dom.each(editor.s.current(), function (node) {
3310
3323
  * if (node.nodeType === Node.TEXT_NODE) {
3311
- * node.nodeValue = node.nodeValue.replace(Jodit.INVISIBLE_SPACE_REG_EX, '') // remove all of the text element codes invisible character
3324
+ * node.nodeValue = node.nodeValue.replace(Jodit.INVISIBLE_SPACE_REG_EXP(), '') // remove all of the text element codes invisible character
3312
3325
  * }
3313
3326
  * });
3314
3327
  * ```
@@ -3388,11 +3401,17 @@ function wait(condition) {
3388
3401
  */ static findNotEmptyNeighbor(node, left, root) {
3389
3402
  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);
3390
3403
  }
3391
- static sibling(node, left) {
3404
+ /**
3405
+ * Returns the previous (`left = true`) or next sibling of the node
3406
+ */ static sibling(node, left) {
3392
3407
  return left ? node.previousSibling : node.nextSibling;
3393
3408
  }
3394
3409
  /**
3395
3410
  * It goes through all the elements in ascending order, and checks to see if they meet the predetermined condition
3411
+ *
3412
+ * The condition is checked for the `node` itself too. The `root` reached
3413
+ * while ascending is checked only when `checkRoot = true`
3414
+ * (but if `node === root` it is checked in any case).
3396
3415
  */ static up(node, condition, root, checkRoot = false) {
3397
3416
  let start = node;
3398
3417
  if (!start) {
@@ -3517,7 +3536,12 @@ function wait(condition) {
3517
3536
  */ static safeRemove(...nodes) {
3518
3537
  nodes.forEach((node)=>Dom.isNode(node) && node.parentNode && node.parentNode.removeChild(node));
3519
3538
  }
3520
- static safeInsertNode(range, node) {
3539
+ /**
3540
+ * Insert a node into the range and collapse the range to the start of
3541
+ * the inserted content. Unlike the native `Range.insertNode` it does not
3542
+ * split inseparable elements (BR, HR, IMG etc.) and removes empty text
3543
+ * nodes produced by the split of a text container.
3544
+ */ static safeInsertNode(range, node) {
3521
3545
  range.collapsed || range.deleteContents();
3522
3546
  const child = Dom.isFragment(node) ? node.lastChild : node;
3523
3547
  if (range.startContainer === range.endContainer && range.collapsed && Dom.isTag(range.startContainer, _constants_js__WEBPACK_IMPORTED_MODULE_0__.INSEPARABLE_TAGS)) {
@@ -3556,22 +3580,17 @@ function wait(condition) {
3556
3580
  }
3557
3581
  }
3558
3582
  static isTag(node, tagNames) {
3583
+ if (Array.isArray(tagNames)) {
3584
+ throw new TypeError('Dom.isTag does not support array');
3585
+ }
3559
3586
  if (!this.isElement(node)) {
3560
3587
  return false;
3561
3588
  }
3562
3589
  const nameL = node.tagName.toLowerCase();
3563
- const nameU = node.tagName.toUpperCase();
3564
3590
  if (tagNames instanceof Set) {
3565
- return tagNames.has(nameL) || tagNames.has(nameU);
3566
- }
3567
- if (Array.isArray(tagNames)) {
3568
- throw new TypeError('Dom.isTag does not support array');
3569
- }
3570
- const tags = tagNames;
3571
- if (nameL === tags || nameU === tags) {
3572
- return true;
3591
+ return tagNames.has(nameL) || tagNames.has(node.tagName.toUpperCase());
3573
3592
  }
3574
- return false;
3593
+ return nameL === tagNames || node.tagName.toUpperCase() === tagNames;
3575
3594
  }
3576
3595
  /**
3577
3596
  * Marks an item as temporary
@@ -3594,9 +3613,9 @@ function wait(condition) {
3594
3613
  return Dom.isNode(elm) && Dom.isTag(elm, 'span') && elm.hasAttribute('data-' + _constants_js__WEBPACK_IMPORTED_MODULE_0__.MARKER_CLASS);
3595
3614
  }
3596
3615
  /**
3597
- * Replace temporary elements from string
3616
+ * Unwrap temporary elements inside a HTML string (keeps their content)
3598
3617
  */ static replaceTemporaryFromString(value) {
3599
- return value.replace(/<([a-z]+)[^>]+data-jodit-temp[^>]+>(.+?)<\/\1>/gi, '$2');
3618
+ return value.replace(TEMP_ELEMENT_REG_EXP, '$2');
3600
3619
  }
3601
3620
  /**
3602
3621
  * Get temporary list
@@ -3655,13 +3674,29 @@ function wait(condition) {
3655
3674
 
3656
3675
 
3657
3676
 
3658
- class LazyWalker extends _event_emitter_eventify_js__WEBPACK_IMPORTED_MODULE_2__.Eventify {
3659
- setWork(root) {
3677
+ /**
3678
+ * Walks the DOM tree in small chunks between browser tasks so that even huge
3679
+ * documents do not block the main thread.
3680
+ *
3681
+ * Events:
3682
+ * - `visit` - is called for every node; return `true` to mark the pass as
3683
+ * "had effect" (it will be passed into the `end` event)
3684
+ * - `break` - the pass was interrupted via [[LazyWalker.break]]
3685
+ * - `end` - the pass is finished, receives `true` if some `visit` handler returned `true`
3686
+ */ class LazyWalker extends _event_emitter_eventify_js__WEBPACK_IMPORTED_MODULE_2__.Eventify {
3687
+ /**
3688
+ * Starts a new pass over the `root` tree.
3689
+ * If a previous pass is still running it will be stopped first.
3690
+ */ setWork(root) {
3660
3691
  if (this.isWorked) {
3661
3692
  this.break();
3693
+ } else {
3694
+ // cancel a not yet started pass scheduled by the previous `setWork` call
3695
+ this.stop();
3662
3696
  }
3663
3697
  this.workNodes = _dom_js__WEBPACK_IMPORTED_MODULE_1__.Dom.eachGen(root, !this.options.reverse);
3664
3698
  this.isFinished = false;
3699
+ this.hadAffect = false;
3665
3700
  this._requestStarting();
3666
3701
  return this;
3667
3702
  }
@@ -3686,10 +3721,12 @@ class LazyWalker extends _event_emitter_eventify_js__WEBPACK_IMPORTED_MODULE_2__
3686
3721
  }
3687
3722
  }
3688
3723
  stop() {
3724
+ var _a;
3689
3725
  this.isWorked = false;
3690
3726
  this.isFinished = true;
3691
3727
  this.workNodes = null;
3692
- this.async.cancelIdleCallback(this.idleId);
3728
+ (_a = this.__schedulerController) === null || _a === void 0 ? void 0 : _a.abort();
3729
+ this.__schedulerController = null;
3693
3730
  }
3694
3731
  destruct() {
3695
3732
  super.destruct();
@@ -3701,7 +3738,7 @@ class LazyWalker extends _event_emitter_eventify_js__WEBPACK_IMPORTED_MODULE_2__
3701
3738
  this.isWorked = true;
3702
3739
  let count = 0;
3703
3740
  const chunkSize = (_a = this.options.timeoutChunkSize) !== null && _a !== void 0 ? _a : 50;
3704
- while(!this.isFinished && count <= chunkSize){
3741
+ while(!this.isFinished && count < chunkSize){
3705
3742
  const item = this.workNodes.next();
3706
3743
  count += 1;
3707
3744
  if (this.visitNode(item.value)) {
@@ -3734,7 +3771,6 @@ class LazyWalker extends _event_emitter_eventify_js__WEBPACK_IMPORTED_MODULE_2__
3734
3771
  this.hadAffect = false;
3735
3772
  this.isWorked = false;
3736
3773
  this.isFinished = false;
3737
- this.idleId = 0;
3738
3774
  this.__schedulerController = null;
3739
3775
  }
3740
3776
  }
@@ -10270,7 +10306,9 @@ function _async_to_generator(fn) {
10270
10306
 
10271
10307
 
10272
10308
  /**
10273
- * Check if the cursor is at the edge of the string
10309
+ * Despite the name, returns `true` when the cursor is NOT at the checked edge
10310
+ * of the text node: there is significant (non invisible-space) text between
10311
+ * the offset and the start (`start = true`) or the end (`end = true`) of the string.
10274
10312
  * @private
10275
10313
  */ function cursorInTheEdgeOfString(container, offset, start, end) {
10276
10314
  var _a;
@@ -10584,7 +10622,7 @@ class Selection {
10584
10622
  /**
10585
10623
  * Remove all markers
10586
10624
  */ removeMarkers() {
10587
- _dom_dom_js__WEBPACK_IMPORTED_MODULE_2__.Dom.safeRemove.apply(null, this.markers);
10625
+ _dom_dom_js__WEBPACK_IMPORTED_MODULE_2__.Dom.safeRemove(...this.markers);
10588
10626
  }
10589
10627
  /**
10590
10628
  * Create marker element
@@ -10641,7 +10679,11 @@ class Selection {
10641
10679
  this.selectRange(range);
10642
10680
  }
10643
10681
  }
10644
- fakes() {
10682
+ /**
10683
+ * Inserts invisible fake nodes on the boundaries of the current selection
10684
+ * and returns them. Unlike [[Select.save]] the selection stays valid while
10685
+ * the DOM around it is being modified. Restore it later with [[Select.restoreFakes]].
10686
+ */ fakes() {
10645
10687
  const sel = this.sel;
10646
10688
  if (!sel || !sel.rangeCount) {
10647
10689
  return [];
@@ -10667,7 +10709,10 @@ class Selection {
10667
10709
  this.selectRange(range);
10668
10710
  return result;
10669
10711
  }
10670
- restoreFakes(fakes) {
10712
+ /**
10713
+ * Restores the selection previously saved with [[Select.fakes]]
10714
+ * and removes the fake nodes (disconnected fakes are ignored).
10715
+ */ restoreFakes(fakes) {
10671
10716
  var _a, _b, _c, _d;
10672
10717
  const nodes = fakes.filter((n)=>n.isConnected);
10673
10718
  if (!nodes.length) {
@@ -10909,7 +10954,6 @@ class Selection {
10909
10954
  }
10910
10955
  const node = this.j.createInside.div();
10911
10956
  const fragment = this.j.createInside.fragment();
10912
- let lastChild;
10913
10957
  if (!this.isFocused() && this.j.isEditorMode()) {
10914
10958
  this.focus();
10915
10959
  this.restore();
@@ -10922,12 +10966,10 @@ class Selection {
10922
10966
  if (!this.j.isEditorMode() && this.j.e.fire('insertHTML', node.innerHTML) === false) {
10923
10967
  return;
10924
10968
  }
10925
- lastChild = node.lastChild;
10926
- if (!lastChild) {
10969
+ if (!node.lastChild) {
10927
10970
  return;
10928
10971
  }
10929
10972
  while(node.firstChild){
10930
- lastChild = node.firstChild;
10931
10973
  fragment.appendChild(node.firstChild);
10932
10974
  }
10933
10975
  this.insertNode(fragment, insertCursorAfter, false);
@@ -11040,7 +11082,8 @@ class Selection {
11040
11082
  if (_dom_dom_js__WEBPACK_IMPORTED_MODULE_2__.Dom.isEmptyTextNode(start)) {
11041
11083
  nodes.push(start);
11042
11084
  }
11043
- if (start.firstChild) {
11085
+ // `start` can be undefined for an empty root
11086
+ if (start === null || start === void 0 ? void 0 : start.firstChild) {
11044
11087
  nodes.push(start.firstChild);
11045
11088
  }
11046
11089
  }
@@ -11055,8 +11098,7 @@ class Selection {
11055
11098
  *
11056
11099
  * @returns true - the cursor is at the end(start) block, null - cursor somewhere outside
11057
11100
  */ cursorInTheEdge(start, parentBlock, fake = null) {
11058
- var _a;
11059
- const end = !start, range = (_a = this.sel) === null || _a === void 0 ? void 0 : _a.getRangeAt(0);
11101
+ const end = !start, sel = this.sel, range = (sel === null || sel === void 0 ? void 0 : sel.rangeCount) ? sel.getRangeAt(0) : null;
11060
11102
  fake !== null && fake !== void 0 ? fake : fake = this.current(false);
11061
11103
  if (!range || !fake || !_dom_dom_js__WEBPACK_IMPORTED_MODULE_2__.Dom.isOrContains(parentBlock, fake, true)) {
11062
11104
  return null;
@@ -11397,7 +11439,11 @@ class Selection {
11397
11439
  }
11398
11440
  return currentBox.previousElementSibling;
11399
11441
  }
11400
- expandSelection() {
11442
+ /**
11443
+ * Expands the non-collapsed selection outward: boundaries positioned on the
11444
+ * edge of their parents are moved out of them (e.g. `<p><b>|test|</b></p>`
11445
+ * becomes `<p>|<b>test</b>|</p>`)
11446
+ */ expandSelection() {
11401
11447
  if (this.isCollapsed()) {
11402
11448
  return this;
11403
11449
  }
@@ -11874,12 +11920,11 @@ if (_constants_js__WEBPACK_IMPORTED_MODULE_0__.globalDocument) {
11874
11920
 
11875
11921
 
11876
11922
  /**
11877
- * Compares whether the given attributes match the element's own attributes
11923
+ * Checks that every attribute from `attrs` is present on the element with
11924
+ * the same value (one-directional match: extra own attributes of the element
11925
+ * are ignored, empty `attrs` matches any element)
11878
11926
  * @private
11879
11927
  */ function isSameAttributes(elm, attrs) {
11880
- if (!elm.attributes.length && !(0,_helpers_size_object_size_js__WEBPACK_IMPORTED_MODULE_0__.size)(attrs)) {
11881
- return true;
11882
- }
11883
11928
  if (!(0,_helpers_size_object_size_js__WEBPACK_IMPORTED_MODULE_0__.size)(attrs)) {
11884
11929
  return true;
11885
11930
  }
@@ -11923,7 +11968,8 @@ function elementsEqualAttributes(elm1, elm2) {
11923
11968
  * @param commitStyle - style commit
11924
11969
  * @param elm - checked item
11925
11970
  * @param strict - strict mode - false - the default tag is suitable for us if it is also in the commit
11926
- * @param strictStyle - strict style mode - true - the element has the same style keys as in the commit, but not their values
11971
+ * @param strictStyle - strict style mode - true - the element must have the same style keys AND values
11972
+ * as in the commit, false - matching style keys are enough
11927
11973
  * @private
11928
11974
  */ function isSuitElement(commitStyle, elm, strict, strictStyle = true) {
11929
11975
  var _a;
@@ -12033,6 +12079,13 @@ function unwrapList(mode, list, li, jodit, cs) {
12033
12079
  (0,_extract_js__WEBPACK_IMPORTED_MODULE_2__.extractSelectedPart)(list, li, jodit);
12034
12080
  (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');
12035
12081
  _dom_dom_js__WEBPACK_IMPORTED_MODULE_0__.Dom.unwrap(li.parentElement);
12082
+ // In the REPLACE mode the content will be immediately wrapped in a `li`
12083
+ // of the new list inside `wrapList`, so it should stay in the document.
12084
+ // Replacing it with a fragment here would dissolve the content
12085
+ // (with `enter: 'br'`) and the new list would never be inserted.
12086
+ if (mode === _constants_js__WEBPACK_IMPORTED_MODULE_4__.REPLACE) {
12087
+ return li;
12088
+ }
12036
12089
  return _dom_dom_js__WEBPACK_IMPORTED_MODULE_0__.Dom.replace(li, jodit.o.enter.toLowerCase() !== 'br' ? jodit.o.enter : jodit.createInside.fragment(), jodit.createInside);
12037
12090
  }
12038
12091
 
@@ -12200,7 +12253,9 @@ function toggleClass(jodit, value, elm, mode, dry) {
12200
12253
  function toggleAttribute(jodit, value, elm, key, dry, mode) {
12201
12254
  (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');
12202
12255
  const hook = jodit.e.fire.bind(jodit.e, `${_constants_js__WEBPACK_IMPORTED_MODULE_10__._PREFIX}AfterToggleAttribute`);
12203
- if ((0,_helpers_utils_index_js__WEBPACK_IMPORTED_MODULE_7__.attr)(elm, key) === value) {
12256
+ // `attr()` getter always returns a string, so a number/boolean value
12257
+ // must be normalized, otherwise the toggle-off branch is unreachable
12258
+ if ((0,_helpers_utils_index_js__WEBPACK_IMPORTED_MODULE_7__.attr)(elm, key) === (value == null ? value : String(value))) {
12204
12259
  !dry && (0,_helpers_utils_index_js__WEBPACK_IMPORTED_MODULE_7__.attr)(elm, key, null);
12205
12260
  mode = _constants_js__WEBPACK_IMPORTED_MODULE_10__.UNSET;
12206
12261
  !dry && hook(mode, elm, key, value);
@@ -12542,7 +12597,7 @@ class CommitStyle {
12542
12597
  if (!data) {
12543
12598
  return false;
12544
12599
  }
12545
- return data[key];
12600
+ return Boolean(data[key]);
12546
12601
  }
12547
12602
  setApplied(elm, key) {
12548
12603
  var _a;
@@ -12557,7 +12612,7 @@ class CommitStyle {
12557
12612
  return this.options.element || this.defaultTag;
12558
12613
  }
12559
12614
  /**
12560
- * New element is blocked
12615
+ * New element is a block element
12561
12616
  */ get elementIsBlock() {
12562
12617
  return Boolean(this.options.element && _constants_js__WEBPACK_IMPORTED_MODULE_0__.IS_BLOCK.test(this.options.element));
12563
12618
  }