jodit-pro 4.12.26 → 4.12.32

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 (346) hide show
  1. package/es2015/jodit.css +1 -1
  2. package/es2015/jodit.fat.min.css +1 -1
  3. package/es2015/jodit.fat.min.js +16 -14
  4. package/es2015/jodit.js +419 -122
  5. package/es2015/jodit.min.js +11 -11
  6. package/es2015/plugins/ai-assistant-pro/ai-assistant-pro.css +1 -1
  7. package/es2015/plugins/ai-assistant-pro/ai-assistant-pro.js +1 -1
  8. package/es2015/plugins/ai-assistant-pro/ai-assistant-pro.min.js +1 -1
  9. package/es2015/plugins/autocomplete/autocomplete.css +62 -0
  10. package/es2015/plugins/autocomplete/autocomplete.js +29 -2
  11. package/es2015/plugins/autocomplete/autocomplete.min.css +1 -0
  12. package/es2015/plugins/autocomplete/autocomplete.min.js +2 -2
  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/keyboard/keyboard.css +1 -1
  43. package/es2015/plugins/keyboard/keyboard.js +1 -1
  44. package/es2015/plugins/keyboard/keyboard.min.js +1 -1
  45. package/es2015/plugins/mobile-view/mobile-view.js +1 -1
  46. package/es2015/plugins/mobile-view/mobile-view.min.js +1 -1
  47. package/es2015/plugins/page-break/page-break.js +23 -2
  48. package/es2015/plugins/page-break/page-break.min.js +2 -2
  49. package/es2015/plugins/paste-code/paste-code.css +28 -1
  50. package/es2015/plugins/paste-code/paste-code.js +489 -64
  51. package/es2015/plugins/paste-code/paste-code.min.css +1 -1
  52. package/es2015/plugins/paste-code/paste-code.min.js +4 -2
  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 +9 -1
  65. package/es2015/plugins/todo-list/todo-list.min.js +2 -2
  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.css +1 -1
  73. package/es2018/jodit.fat.min.js +16 -14
  74. package/es2018/jodit.min.js +11 -11
  75. package/es2018/plugins/ai-assistant-pro/ai-assistant-pro.min.js +1 -1
  76. package/es2018/plugins/autocomplete/autocomplete.min.css +1 -0
  77. package/es2018/plugins/autocomplete/autocomplete.min.js +2 -2
  78. package/es2018/plugins/backup/backup.min.js +1 -1
  79. package/es2018/plugins/button-generator/button-generator.min.js +1 -1
  80. package/es2018/plugins/change-case/change-case.min.js +1 -1
  81. package/es2018/plugins/color-picker/color-picker.min.js +1 -1
  82. package/es2018/plugins/emoji/emoji.min.js +1 -1
  83. package/es2018/plugins/export-docs/export-docs.min.js +1 -1
  84. package/es2018/plugins/finder/finder.min.js +1 -1
  85. package/es2018/plugins/google-maps/google-maps.min.js +1 -1
  86. package/es2018/plugins/google-search/google-search.min.js +1 -1
  87. package/es2018/plugins/highlight-signature/highlight-signature.min.js +1 -1
  88. package/es2018/plugins/iframe-editor/iframe-editor.min.js +1 -1
  89. package/es2018/plugins/keyboard/keyboard.min.js +1 -1
  90. package/es2018/plugins/mobile-view/mobile-view.min.js +1 -1
  91. package/es2018/plugins/page-break/page-break.min.js +2 -2
  92. package/es2018/plugins/paste-code/paste-code.min.css +1 -1
  93. package/es2018/plugins/paste-code/paste-code.min.js +4 -2
  94. package/es2018/plugins/paste-from-word/paste-from-word.min.js +1 -1
  95. package/es2018/plugins/show-blocks/show-blocks.min.js +1 -1
  96. package/es2018/plugins/style/style.min.js +1 -1
  97. package/es2018/plugins/templates/templates.min.js +1 -1
  98. package/es2018/plugins/todo-list/todo-list.min.js +2 -2
  99. package/es2018/plugins/translate/translate.min.js +1 -1
  100. package/es2018/plugins/tune-block/tune-block.min.js +1 -1
  101. package/es2021/jodit.css +1 -1
  102. package/es2021/jodit.fat.min.css +1 -1
  103. package/es2021/jodit.fat.min.js +19 -17
  104. package/es2021/jodit.js +418 -121
  105. package/es2021/jodit.min.js +14 -14
  106. package/es2021/plugins/ai-assistant-pro/ai-assistant-pro.css +1 -1
  107. package/es2021/plugins/ai-assistant-pro/ai-assistant-pro.js +1 -1
  108. package/es2021/plugins/ai-assistant-pro/ai-assistant-pro.min.js +1 -1
  109. package/es2021/plugins/autocomplete/autocomplete.css +62 -0
  110. package/es2021/plugins/autocomplete/autocomplete.js +29 -2
  111. package/es2021/plugins/autocomplete/autocomplete.min.css +1 -0
  112. package/es2021/plugins/autocomplete/autocomplete.min.js +2 -2
  113. package/es2021/plugins/backup/backup.css +1 -1
  114. package/es2021/plugins/backup/backup.js +1 -1
  115. package/es2021/plugins/backup/backup.min.js +1 -1
  116. package/es2021/plugins/button-generator/button-generator.css +1 -1
  117. package/es2021/plugins/button-generator/button-generator.js +1 -1
  118. package/es2021/plugins/button-generator/button-generator.min.js +1 -1
  119. package/es2021/plugins/change-case/change-case.js +1 -1
  120. package/es2021/plugins/change-case/change-case.min.js +1 -1
  121. package/es2021/plugins/color-picker/color-picker.css +1 -1
  122. package/es2021/plugins/color-picker/color-picker.js +1 -1
  123. package/es2021/plugins/color-picker/color-picker.min.js +1 -1
  124. package/es2021/plugins/emoji/emoji.css +1 -1
  125. package/es2021/plugins/emoji/emoji.js +1 -1
  126. package/es2021/plugins/emoji/emoji.min.js +1 -1
  127. package/es2021/plugins/export-docs/export-docs.js +1 -1
  128. package/es2021/plugins/export-docs/export-docs.min.js +1 -1
  129. package/es2021/plugins/finder/finder.css +1 -1
  130. package/es2021/plugins/finder/finder.js +1 -1
  131. package/es2021/plugins/finder/finder.min.js +1 -1
  132. package/es2021/plugins/google-maps/google-maps.css +1 -1
  133. package/es2021/plugins/google-maps/google-maps.js +1 -1
  134. package/es2021/plugins/google-maps/google-maps.min.js +1 -1
  135. package/es2021/plugins/google-search/google-search.js +1 -1
  136. package/es2021/plugins/google-search/google-search.min.js +1 -1
  137. package/es2021/plugins/highlight-signature/highlight-signature.js +1 -1
  138. package/es2021/plugins/highlight-signature/highlight-signature.min.js +1 -1
  139. package/es2021/plugins/iframe-editor/iframe-editor.css +1 -1
  140. package/es2021/plugins/iframe-editor/iframe-editor.js +1 -1
  141. package/es2021/plugins/iframe-editor/iframe-editor.min.js +1 -1
  142. package/es2021/plugins/keyboard/keyboard.css +1 -1
  143. package/es2021/plugins/keyboard/keyboard.js +1 -1
  144. package/es2021/plugins/keyboard/keyboard.min.js +1 -1
  145. package/es2021/plugins/mobile-view/mobile-view.js +1 -1
  146. package/es2021/plugins/mobile-view/mobile-view.min.js +1 -1
  147. package/es2021/plugins/page-break/page-break.js +23 -2
  148. package/es2021/plugins/page-break/page-break.min.js +2 -2
  149. package/es2021/plugins/paste-code/paste-code.css +28 -1
  150. package/es2021/plugins/paste-code/paste-code.js +488 -64
  151. package/es2021/plugins/paste-code/paste-code.min.css +1 -1
  152. package/es2021/plugins/paste-code/paste-code.min.js +4 -2
  153. package/es2021/plugins/paste-from-word/paste-from-word.js +1 -1
  154. package/es2021/plugins/paste-from-word/paste-from-word.min.js +1 -1
  155. package/es2021/plugins/show-blocks/show-blocks.js +1 -1
  156. package/es2021/plugins/show-blocks/show-blocks.min.js +1 -1
  157. package/es2021/plugins/style/style.css +1 -1
  158. package/es2021/plugins/style/style.js +1 -1
  159. package/es2021/plugins/style/style.min.js +1 -1
  160. package/es2021/plugins/templates/templates.css +1 -1
  161. package/es2021/plugins/templates/templates.js +1 -1
  162. package/es2021/plugins/templates/templates.min.js +1 -1
  163. package/es2021/plugins/todo-list/todo-list.css +1 -1
  164. package/es2021/plugins/todo-list/todo-list.js +9 -1
  165. package/es2021/plugins/todo-list/todo-list.min.js +2 -2
  166. package/es2021/plugins/translate/translate.css +1 -1
  167. package/es2021/plugins/translate/translate.js +1 -1
  168. package/es2021/plugins/translate/translate.min.js +1 -1
  169. package/es2021/plugins/tune-block/tune-block.css +1 -1
  170. package/es2021/plugins/tune-block/tune-block.js +1 -1
  171. package/es2021/plugins/tune-block/tune-block.min.js +1 -1
  172. package/es2021.en/jodit.css +1 -1
  173. package/es2021.en/jodit.fat.min.css +1 -1
  174. package/es2021.en/jodit.fat.min.js +31 -29
  175. package/es2021.en/jodit.js +418 -121
  176. package/es2021.en/jodit.min.js +14 -14
  177. package/es2021.en/plugins/ai-assistant-pro/ai-assistant-pro.css +1 -1
  178. package/es2021.en/plugins/ai-assistant-pro/ai-assistant-pro.js +1 -1
  179. package/es2021.en/plugins/ai-assistant-pro/ai-assistant-pro.min.js +1 -1
  180. package/es2021.en/plugins/autocomplete/autocomplete.css +62 -0
  181. package/es2021.en/plugins/autocomplete/autocomplete.js +29 -2
  182. package/es2021.en/plugins/autocomplete/autocomplete.min.css +1 -0
  183. package/es2021.en/plugins/autocomplete/autocomplete.min.js +2 -2
  184. package/es2021.en/plugins/backup/backup.css +1 -1
  185. package/es2021.en/plugins/backup/backup.js +1 -1
  186. package/es2021.en/plugins/backup/backup.min.js +1 -1
  187. package/es2021.en/plugins/button-generator/button-generator.css +1 -1
  188. package/es2021.en/plugins/button-generator/button-generator.js +1 -1
  189. package/es2021.en/plugins/button-generator/button-generator.min.js +1 -1
  190. package/es2021.en/plugins/change-case/change-case.js +1 -1
  191. package/es2021.en/plugins/change-case/change-case.min.js +1 -1
  192. package/es2021.en/plugins/color-picker/color-picker.css +1 -1
  193. package/es2021.en/plugins/color-picker/color-picker.js +1 -1
  194. package/es2021.en/plugins/color-picker/color-picker.min.js +1 -1
  195. package/es2021.en/plugins/emoji/emoji.css +1 -1
  196. package/es2021.en/plugins/emoji/emoji.js +1 -1
  197. package/es2021.en/plugins/emoji/emoji.min.js +1 -1
  198. package/es2021.en/plugins/export-docs/export-docs.js +1 -1
  199. package/es2021.en/plugins/export-docs/export-docs.min.js +1 -1
  200. package/es2021.en/plugins/finder/finder.css +1 -1
  201. package/es2021.en/plugins/finder/finder.js +1 -1
  202. package/es2021.en/plugins/finder/finder.min.js +1 -1
  203. package/es2021.en/plugins/google-maps/google-maps.css +1 -1
  204. package/es2021.en/plugins/google-maps/google-maps.js +1 -1
  205. package/es2021.en/plugins/google-maps/google-maps.min.js +1 -1
  206. package/es2021.en/plugins/google-search/google-search.js +1 -1
  207. package/es2021.en/plugins/google-search/google-search.min.js +1 -1
  208. package/es2021.en/plugins/highlight-signature/highlight-signature.js +1 -1
  209. package/es2021.en/plugins/highlight-signature/highlight-signature.min.js +1 -1
  210. package/es2021.en/plugins/iframe-editor/iframe-editor.css +1 -1
  211. package/es2021.en/plugins/iframe-editor/iframe-editor.js +1 -1
  212. package/es2021.en/plugins/iframe-editor/iframe-editor.min.js +1 -1
  213. package/es2021.en/plugins/keyboard/keyboard.css +1 -1
  214. package/es2021.en/plugins/keyboard/keyboard.js +1 -1
  215. package/es2021.en/plugins/keyboard/keyboard.min.js +1 -1
  216. package/es2021.en/plugins/mobile-view/mobile-view.js +1 -1
  217. package/es2021.en/plugins/mobile-view/mobile-view.min.js +1 -1
  218. package/es2021.en/plugins/page-break/page-break.js +23 -2
  219. package/es2021.en/plugins/page-break/page-break.min.js +2 -2
  220. package/es2021.en/plugins/paste-code/paste-code.css +28 -1
  221. package/es2021.en/plugins/paste-code/paste-code.js +488 -64
  222. package/es2021.en/plugins/paste-code/paste-code.min.css +1 -1
  223. package/es2021.en/plugins/paste-code/paste-code.min.js +4 -2
  224. package/es2021.en/plugins/paste-from-word/paste-from-word.js +1 -1
  225. package/es2021.en/plugins/paste-from-word/paste-from-word.min.js +1 -1
  226. package/es2021.en/plugins/show-blocks/show-blocks.js +1 -1
  227. package/es2021.en/plugins/show-blocks/show-blocks.min.js +1 -1
  228. package/es2021.en/plugins/style/style.css +1 -1
  229. package/es2021.en/plugins/style/style.js +1 -1
  230. package/es2021.en/plugins/style/style.min.js +1 -1
  231. package/es2021.en/plugins/templates/templates.css +1 -1
  232. package/es2021.en/plugins/templates/templates.js +1 -1
  233. package/es2021.en/plugins/templates/templates.min.js +1 -1
  234. package/es2021.en/plugins/todo-list/todo-list.css +1 -1
  235. package/es2021.en/plugins/todo-list/todo-list.js +9 -1
  236. package/es2021.en/plugins/todo-list/todo-list.min.js +2 -2
  237. package/es2021.en/plugins/translate/translate.css +1 -1
  238. package/es2021.en/plugins/translate/translate.js +1 -1
  239. package/es2021.en/plugins/translate/translate.min.js +1 -1
  240. package/es2021.en/plugins/tune-block/tune-block.css +1 -1
  241. package/es2021.en/plugins/tune-block/tune-block.js +1 -1
  242. package/es2021.en/plugins/tune-block/tune-block.min.js +1 -1
  243. package/es5/jodit.css +2 -2
  244. package/es5/jodit.fat.min.css +1 -1
  245. package/es5/jodit.fat.min.js +2 -2
  246. package/es5/jodit.js +565 -157
  247. package/es5/jodit.min.css +2 -2
  248. package/es5/jodit.min.js +2 -2
  249. package/es5/plugins/ai-assistant-pro/ai-assistant-pro.css +1 -1
  250. package/es5/plugins/ai-assistant-pro/ai-assistant-pro.js +1 -1
  251. package/es5/plugins/ai-assistant-pro/ai-assistant-pro.min.js +1 -1
  252. package/es5/plugins/autocomplete/autocomplete.css +62 -0
  253. package/es5/plugins/autocomplete/autocomplete.js +29 -2
  254. package/es5/plugins/autocomplete/autocomplete.min.css +1 -0
  255. package/es5/plugins/autocomplete/autocomplete.min.js +2 -2
  256. package/es5/plugins/backup/backup.css +1 -1
  257. package/es5/plugins/backup/backup.js +1 -1
  258. package/es5/plugins/backup/backup.min.js +1 -1
  259. package/es5/plugins/button-generator/button-generator.css +1 -1
  260. package/es5/plugins/button-generator/button-generator.js +1 -1
  261. package/es5/plugins/button-generator/button-generator.min.js +1 -1
  262. package/es5/plugins/change-case/change-case.js +1 -1
  263. package/es5/plugins/change-case/change-case.min.js +1 -1
  264. package/es5/plugins/color-picker/color-picker.css +1 -1
  265. package/es5/plugins/color-picker/color-picker.js +1 -1
  266. package/es5/plugins/color-picker/color-picker.min.js +1 -1
  267. package/es5/plugins/emoji/emoji.css +1 -1
  268. package/es5/plugins/emoji/emoji.js +1 -1
  269. package/es5/plugins/emoji/emoji.min.js +1 -1
  270. package/es5/plugins/export-docs/export-docs.js +1 -1
  271. package/es5/plugins/export-docs/export-docs.min.js +1 -1
  272. package/es5/plugins/finder/finder.css +1 -1
  273. package/es5/plugins/finder/finder.js +1 -1
  274. package/es5/plugins/finder/finder.min.js +1 -1
  275. package/es5/plugins/google-maps/google-maps.css +1 -1
  276. package/es5/plugins/google-maps/google-maps.js +1 -1
  277. package/es5/plugins/google-maps/google-maps.min.js +1 -1
  278. package/es5/plugins/google-search/google-search.js +1 -1
  279. package/es5/plugins/google-search/google-search.min.js +1 -1
  280. package/es5/plugins/highlight-signature/highlight-signature.js +1 -1
  281. package/es5/plugins/highlight-signature/highlight-signature.min.js +1 -1
  282. package/es5/plugins/iframe-editor/iframe-editor.css +1 -1
  283. package/es5/plugins/iframe-editor/iframe-editor.js +1 -1
  284. package/es5/plugins/iframe-editor/iframe-editor.min.js +1 -1
  285. package/es5/plugins/keyboard/keyboard.css +1 -1
  286. package/es5/plugins/keyboard/keyboard.js +1 -1
  287. package/es5/plugins/keyboard/keyboard.min.js +1 -1
  288. package/es5/plugins/mobile-view/mobile-view.js +1 -1
  289. package/es5/plugins/mobile-view/mobile-view.min.js +1 -1
  290. package/es5/plugins/page-break/page-break.js +23 -2
  291. package/es5/plugins/page-break/page-break.min.js +2 -2
  292. package/es5/plugins/paste-code/paste-code.css +28 -1
  293. package/es5/plugins/paste-code/paste-code.js +586 -66
  294. package/es5/plugins/paste-code/paste-code.min.css +1 -1
  295. package/es5/plugins/paste-code/paste-code.min.js +2 -2
  296. package/es5/plugins/paste-from-word/paste-from-word.js +1 -1
  297. package/es5/plugins/paste-from-word/paste-from-word.min.js +1 -1
  298. package/es5/plugins/show-blocks/show-blocks.js +1 -1
  299. package/es5/plugins/show-blocks/show-blocks.min.js +1 -1
  300. package/es5/plugins/style/style.css +1 -1
  301. package/es5/plugins/style/style.js +1 -1
  302. package/es5/plugins/style/style.min.js +1 -1
  303. package/es5/plugins/templates/templates.css +1 -1
  304. package/es5/plugins/templates/templates.js +1 -1
  305. package/es5/plugins/templates/templates.min.js +1 -1
  306. package/es5/plugins/todo-list/todo-list.css +1 -1
  307. package/es5/plugins/todo-list/todo-list.js +9 -1
  308. package/es5/plugins/todo-list/todo-list.min.js +2 -2
  309. package/es5/plugins/translate/translate.css +1 -1
  310. package/es5/plugins/translate/translate.js +1 -1
  311. package/es5/plugins/translate/translate.min.js +1 -1
  312. package/es5/plugins/tune-block/tune-block.css +1 -1
  313. package/es5/plugins/tune-block/tune-block.js +1 -1
  314. package/es5/plugins/tune-block/tune-block.min.js +1 -1
  315. package/es5/polyfills.fat.min.js +1 -1
  316. package/es5/polyfills.js +1 -1
  317. package/es5/polyfills.min.js +1 -1
  318. package/esm/config.d.ts +6 -1
  319. package/esm/plugins/all.d.ts +1 -1
  320. package/esm/plugins/all.js +1 -1
  321. package/esm/plugins/autocomplete/autocomplete.d.ts +2 -26
  322. package/esm/plugins/autocomplete/autocomplete.impl.d.ts +31 -0
  323. package/esm/plugins/autocomplete/autocomplete.impl.js +1 -0
  324. package/esm/plugins/autocomplete/autocomplete.js +1 -1
  325. package/esm/plugins/index.d.ts +1 -1
  326. package/esm/plugins/index.js +1 -1
  327. package/esm/plugins/page-break/page-break.js +1 -1
  328. package/esm/plugins/paste-code/config.d.ts +6 -1
  329. package/esm/plugins/paste-code/config.js +1 -1
  330. package/esm/plugins/paste-code/helpers.d.ts +25 -0
  331. package/esm/plugins/paste-code/helpers.js +1 -0
  332. package/esm/plugins/paste-code/paste-code.d.ts +9 -0
  333. package/esm/plugins/paste-code/paste-code.js +1 -1
  334. package/esm/plugins/paste-code/ui/code-tuner/code-tuner.d.ts +87 -0
  335. package/esm/plugins/paste-code/ui/code-tuner/code-tuner.js +3 -0
  336. package/esm/plugins/paste-code/ui/code-tuner/drag.svg.js +1 -0
  337. package/esm/plugins/todo-list/todo-list.js +1 -1
  338. package/package.json +1 -1
  339. package/types/config.d.ts +6 -1
  340. package/types/plugins/autocomplete/autocomplete.d.ts +2 -26
  341. package/types/plugins/autocomplete/autocomplete.impl.d.ts +31 -0
  342. package/types/plugins/index.d.ts +1 -1
  343. package/types/plugins/paste-code/config.d.ts +6 -1
  344. package/types/plugins/paste-code/helpers.d.ts +25 -0
  345. package/types/plugins/paste-code/paste-code.d.ts +9 -0
  346. package/types/plugins/paste-code/ui/code-tuner/code-tuner.d.ts +87 -0
@@ -1,7 +1,7 @@
1
1
  /*!
2
2
  * jodit-pro - PRO Version of Jodit Editor
3
3
  * Author: Chupurnov Valerii <chupurnov@gmail.com>
4
- * Version: v4.12.26
4
+ * Version: v4.12.32
5
5
  * Url: https://xdsoft.net/jodit/pro/
6
6
  * License(s): SEE LICENSE IN LICENSE.md
7
7
  */
@@ -1645,6 +1645,14 @@ class ViewComponent extends _component_js__WEBPACK_IMPORTED_MODULE_0__.Component
1645
1645
  * Attach component to View
1646
1646
  */ setParentView(jodit) {
1647
1647
  this.jodit = jodit;
1648
+ // Inherit the owner window from the parent view — for an editor
1649
+ // created with a custom `ownerWindow` (e.g. inside an iframe) the
1650
+ // component default (the global `window`) is wrong: outside-click
1651
+ // handlers of dropdowns/popups listened to the wrong window. See
1652
+ // https://github.com/xdan/jodit/issues/965
1653
+ if (jodit.ow) {
1654
+ this.ownerWindow = jodit.ow;
1655
+ }
1648
1656
  jodit.components.add(this);
1649
1657
  return this;
1650
1658
  }
@@ -1746,7 +1754,7 @@ __webpack_require__.r(__webpack_exports__);
1746
1754
  * ```
1747
1755
  * @packageDocumentation
1748
1756
  * @module constants
1749
- */ const APP_VERSION = "4.12.26";
1757
+ */ const APP_VERSION = "4.12.32";
1750
1758
  // prettier-ignore
1751
1759
  const ES = "es2021";
1752
1760
  const IS_ES_MODERN = true;
@@ -5030,9 +5038,15 @@ function isFastEqual(a, b) {
5030
5038
  */ /**
5031
5039
  * @module helpers/checker
5032
5040
  */ /**
5033
- * Detect if string is HTML from MS Word or Excel
5041
+ * Detect if string is HTML from MS Word, Excel or LibreOffice/OpenOffice
5034
5042
  */ function isHtmlFromWord(data) {
5035
- return data.search(/<meta.*?Microsoft Excel\s[\d].*?>/) !== -1 || data.search(/<meta.*?Microsoft Word\s[\d].*?>/) !== -1 || data.search(/style="[^"]*mso-/) !== -1 && data.search(/<font/) !== -1;
5043
+ return data.search(/<meta.*?Microsoft Excel\s[\d].*?>/) !== -1 || data.search(/<meta.*?Microsoft Word\s[\d].*?>/) !== -1 || // `<meta name=ProgId content=Word.Document>` attribute values are
5044
+ // unquoted in the raw Word clipboard fragment
5045
+ data.search(/<meta[^>]*?ProgId[^>]*?(Word|Excel)\./i) !== -1 || // LibreOffice/OpenOffice Writer & Calc
5046
+ data.search(/<meta[^>]*?(LibreOffice|OpenOffice)/i) !== -1 || // Office namespaces on the root element of the clipboard fragment
5047
+ data.search(/urn:schemas-microsoft-com:office:(word|excel)/) !== -1 || // `class=MsoNormal` and friends (unquoted/quoted)
5048
+ data.search(/<\w[^>]*\sclass=("|')?Mso/) !== -1 || // the raw Word clipboard uses SINGLE quotes: style='mso-…'
5049
+ data.search(/style='[^']*mso-/) !== -1 || data.search(/style="[^"]*mso-/) !== -1 && data.search(/<font/) !== -1;
5036
5050
  }
5037
5051
 
5038
5052
 
@@ -6074,6 +6088,7 @@ __webpack_require__.r(__webpack_exports__);
6074
6088
  /* harmony export */ LimitedStack: function() { return /* reexport safe */ _utils_index_js__WEBPACK_IMPORTED_MODULE_8__.LimitedStack; },
6075
6089
  /* harmony export */ NUMBER_FIELDS_REG: function() { return /* reexport safe */ _normalize_index_js__WEBPACK_IMPORTED_MODULE_5__.NUMBER_FIELDS_REG; },
6076
6090
  /* harmony export */ OptionsError: function() { return /* reexport safe */ _utils_index_js__WEBPACK_IMPORTED_MODULE_8__.OptionsError; },
6091
+ /* harmony export */ UNSAFE_PROTO_KEYS: function() { return /* reexport safe */ _utils_index_js__WEBPACK_IMPORTED_MODULE_8__.UNSAFE_PROTO_KEYS; },
6077
6092
  /* harmony export */ abort: function() { return /* reexport safe */ _utils_index_js__WEBPACK_IMPORTED_MODULE_8__.abort; },
6078
6093
  /* harmony export */ alignElement: function() { return /* reexport safe */ _utils_index_js__WEBPACK_IMPORTED_MODULE_8__.alignElement; },
6079
6094
  /* harmony export */ alreadyLoadedList: function() { return /* reexport safe */ _utils_index_js__WEBPACK_IMPORTED_MODULE_8__.alreadyLoadedList; },
@@ -6146,6 +6161,7 @@ __webpack_require__.r(__webpack_exports__);
6146
6161
  /* harmony export */ isString: function() { return /* reexport safe */ _checker_index_js__WEBPACK_IMPORTED_MODULE_2__.isString; },
6147
6162
  /* harmony export */ isStringArray: function() { return /* reexport safe */ _checker_index_js__WEBPACK_IMPORTED_MODULE_2__.isStringArray; },
6148
6163
  /* harmony export */ isURL: function() { return /* reexport safe */ _checker_index_js__WEBPACK_IMPORTED_MODULE_2__.isURL; },
6164
+ /* harmony export */ isUnsafeProtoKey: function() { return /* reexport safe */ _utils_index_js__WEBPACK_IMPORTED_MODULE_8__.isUnsafeProtoKey; },
6149
6165
  /* harmony export */ isValidName: function() { return /* reexport safe */ _checker_index_js__WEBPACK_IMPORTED_MODULE_2__.isValidName; },
6150
6166
  /* harmony export */ isViewObject: function() { return /* reexport safe */ _checker_index_js__WEBPACK_IMPORTED_MODULE_2__.isViewObject; },
6151
6167
  /* harmony export */ isVoid: function() { return /* reexport safe */ _checker_index_js__WEBPACK_IMPORTED_MODULE_2__.isVoid; },
@@ -7552,7 +7568,8 @@ const completeUrl = (url)=>{
7552
7568
  /* harmony import */ var _checker_is_void_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(86068);
7553
7569
  /* harmony import */ var _config_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(6441);
7554
7570
  /* harmony import */ var _extend_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(97735);
7555
- /* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(37790);
7571
+ /* harmony import */ var _is_unsafe_proto_key_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(69175);
7572
+ /* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(37790);
7556
7573
  /*!
7557
7574
  * Jodit Editor (https://xdsoft.net/jodit/)
7558
7575
  * Released under MIT see LICENSE.txt in the project root for license information.
@@ -7564,18 +7581,7 @@ const completeUrl = (url)=>{
7564
7581
 
7565
7582
 
7566
7583
 
7567
- /**
7568
- * Keys that must never be copied from a (potentially untrusted) config object —
7569
- * assigning them during a recursive merge can reach and mutate
7570
- * `Object.prototype` (prototype pollution, CWE-1321).
7571
- */ const UNSAFE_PROTO_KEYS = [
7572
- '__proto__',
7573
- 'constructor',
7574
- 'prototype'
7575
- ];
7576
- function isUnsafeProtoKey(key) {
7577
- return UNSAFE_PROTO_KEYS.indexOf(key) !== -1;
7578
- }
7584
+
7579
7585
  /**
7580
7586
  * @example
7581
7587
  * ```js
@@ -7624,7 +7630,7 @@ function isUnsafeProtoKey(key) {
7624
7630
  }
7625
7631
  const newOpt = {};
7626
7632
  Object.keys(options).forEach((key)=>{
7627
- if (isUnsafeProtoKey(key)) {
7633
+ if ((0,_is_unsafe_proto_key_js__WEBPACK_IMPORTED_MODULE_6__.isUnsafeProtoKey)(key)) {
7628
7634
  return;
7629
7635
  }
7630
7636
  const opt = options[key], protoKey = proto ? proto[key] : null;
@@ -7646,7 +7652,7 @@ function isUnsafeProtoKey(key) {
7646
7652
  return newOpt;
7647
7653
  }
7648
7654
  function ConfigFlatten(obj) {
7649
- return (0,_utils_js__WEBPACK_IMPORTED_MODULE_6__.keys)(obj, false).reduce((app, key)=>{
7655
+ return (0,_utils_js__WEBPACK_IMPORTED_MODULE_7__.keys)(obj, false).reduce((app, key)=>{
7650
7656
  app[key] = obj[key];
7651
7657
  return app;
7652
7658
  }, {});
@@ -7688,7 +7694,7 @@ function ConfigFlatten(obj) {
7688
7694
  * @see {@link ConfigProto} for the prototype-chain variant used at editor creation time
7689
7695
  */ function ConfigMerge(target, source) {
7690
7696
  Object.keys(source).forEach((key)=>{
7691
- if (isUnsafeProtoKey(key)) {
7697
+ if ((0,_is_unsafe_proto_key_js__WEBPACK_IMPORTED_MODULE_6__.isUnsafeProtoKey)(key)) {
7692
7698
  return;
7693
7699
  }
7694
7700
  const srcVal = source[key];
@@ -7701,7 +7707,7 @@ function ConfigFlatten(obj) {
7701
7707
  });
7702
7708
  }
7703
7709
  function ConfigDeepFlatten(obj) {
7704
- return (0,_utils_js__WEBPACK_IMPORTED_MODULE_6__.keys)(obj, false).reduce((app, key)=>{
7710
+ return (0,_utils_js__WEBPACK_IMPORTED_MODULE_7__.keys)(obj, false).reduce((app, key)=>{
7705
7711
  app[key] = (0,_checker_is_plain_object_js__WEBPACK_IMPORTED_MODULE_1__.isPlainObject)(obj[key]) ? ConfigDeepFlatten(obj[key]) : obj[key];
7706
7712
  return app;
7707
7713
  }, {});
@@ -8274,14 +8280,15 @@ const getClassName = (obj)=>{
8274
8280
  /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
8275
8281
 
8276
8282
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
8277
- /* harmony export */ $$: function() { return /* reexport safe */ _selector_js__WEBPACK_IMPORTED_MODULE_23__.$$; },
8283
+ /* harmony export */ $$: function() { return /* reexport safe */ _selector_js__WEBPACK_IMPORTED_MODULE_24__.$$; },
8278
8284
  /* harmony export */ ConfigDeepFlatten: function() { return /* reexport safe */ _config_proto_js__WEBPACK_IMPORTED_MODULE_7__.ConfigDeepFlatten; },
8279
8285
  /* harmony export */ ConfigFlatten: function() { return /* reexport safe */ _config_proto_js__WEBPACK_IMPORTED_MODULE_7__.ConfigFlatten; },
8280
8286
  /* harmony export */ ConfigMerge: function() { return /* reexport safe */ _config_proto_js__WEBPACK_IMPORTED_MODULE_7__.ConfigMerge; },
8281
8287
  /* harmony export */ ConfigProto: function() { return /* reexport safe */ _config_proto_js__WEBPACK_IMPORTED_MODULE_7__.ConfigProto; },
8282
8288
  /* harmony export */ ConnectionError: function() { return /* reexport safe */ _error_index_js__WEBPACK_IMPORTED_MODULE_13__.ConnectionError; },
8283
- /* harmony export */ LimitedStack: function() { return /* reexport safe */ _stack_js__WEBPACK_IMPORTED_MODULE_25__.LimitedStack; },
8289
+ /* harmony export */ LimitedStack: function() { return /* reexport safe */ _stack_js__WEBPACK_IMPORTED_MODULE_26__.LimitedStack; },
8284
8290
  /* harmony export */ OptionsError: function() { return /* reexport safe */ _error_index_js__WEBPACK_IMPORTED_MODULE_13__.OptionsError; },
8291
+ /* harmony export */ UNSAFE_PROTO_KEYS: function() { return /* reexport safe */ _is_unsafe_proto_key_js__WEBPACK_IMPORTED_MODULE_18__.UNSAFE_PROTO_KEYS; },
8285
8292
  /* harmony export */ abort: function() { return /* reexport safe */ _error_index_js__WEBPACK_IMPORTED_MODULE_13__.abort; },
8286
8293
  /* harmony export */ alignElement: function() { return /* reexport safe */ _align_js__WEBPACK_IMPORTED_MODULE_0__.alignElement; },
8287
8294
  /* harmony export */ alreadyLoadedList: function() { return /* reexport safe */ _append_script_js__WEBPACK_IMPORTED_MODULE_1__.alreadyLoadedList; },
@@ -8291,17 +8298,17 @@ const getClassName = (obj)=>{
8291
8298
  /* harmony export */ attr: function() { return /* reexport safe */ _attr_js__WEBPACK_IMPORTED_MODULE_3__.attr; },
8292
8299
  /* harmony export */ browser: function() { return /* reexport safe */ _browser_js__WEBPACK_IMPORTED_MODULE_4__.browser; },
8293
8300
  /* harmony export */ buildQuery: function() { return /* reexport safe */ _build_query_js__WEBPACK_IMPORTED_MODULE_5__.buildQuery; },
8294
- /* harmony export */ call: function() { return /* reexport safe */ _utils_js__WEBPACK_IMPORTED_MODULE_26__.call; },
8295
- /* harmony export */ callPromise: function() { return /* reexport safe */ _utils_js__WEBPACK_IMPORTED_MODULE_26__.callPromise; },
8296
- /* harmony export */ callThis: function() { return /* reexport safe */ _utils_js__WEBPACK_IMPORTED_MODULE_26__.callThis; },
8301
+ /* harmony export */ call: function() { return /* reexport safe */ _utils_js__WEBPACK_IMPORTED_MODULE_27__.call; },
8302
+ /* harmony export */ callPromise: function() { return /* reexport safe */ _utils_js__WEBPACK_IMPORTED_MODULE_27__.callPromise; },
8303
+ /* harmony export */ callThis: function() { return /* reexport safe */ _utils_js__WEBPACK_IMPORTED_MODULE_27__.callThis; },
8297
8304
  /* harmony export */ clearAlign: function() { return /* reexport safe */ _align_js__WEBPACK_IMPORTED_MODULE_0__.clearAlign; },
8298
8305
  /* harmony export */ clearCenterAlign: function() { return /* reexport safe */ _css_js__WEBPACK_IMPORTED_MODULE_9__.clearCenterAlign; },
8299
- /* harmony export */ cns: function() { return /* reexport safe */ _mark_deprecated_js__WEBPACK_IMPORTED_MODULE_18__.cns; },
8306
+ /* harmony export */ cns: function() { return /* reexport safe */ _mark_deprecated_js__WEBPACK_IMPORTED_MODULE_19__.cns; },
8300
8307
  /* harmony export */ completeUrl: function() { return /* reexport safe */ _complete_url_js__WEBPACK_IMPORTED_MODULE_6__.completeUrl; },
8301
8308
  /* harmony export */ connection: function() { return /* reexport safe */ _error_index_js__WEBPACK_IMPORTED_MODULE_13__.connection; },
8302
8309
  /* harmony export */ convertMediaUrlToVideoEmbed: function() { return /* reexport safe */ _convert_media_url_to_video_embed_js__WEBPACK_IMPORTED_MODULE_8__.convertMediaUrlToVideoEmbed; },
8303
8310
  /* harmony export */ css: function() { return /* reexport safe */ _css_js__WEBPACK_IMPORTED_MODULE_9__.css; },
8304
- /* harmony export */ cssPath: function() { return /* reexport safe */ _selector_js__WEBPACK_IMPORTED_MODULE_23__.cssPath; },
8311
+ /* harmony export */ cssPath: function() { return /* reexport safe */ _selector_js__WEBPACK_IMPORTED_MODULE_24__.cssPath; },
8305
8312
  /* harmony export */ ctrlKey: function() { return /* reexport safe */ _ctrl_key_js__WEBPACK_IMPORTED_MODULE_10__.ctrlKey; },
8306
8313
  /* harmony export */ dataBind: function() { return /* reexport safe */ _data_bind_js__WEBPACK_IMPORTED_MODULE_11__.dataBind; },
8307
8314
  /* harmony export */ defaultLanguage: function() { return /* reexport safe */ _default_language_js__WEBPACK_IMPORTED_MODULE_12__.defaultLanguage; },
@@ -8309,30 +8316,31 @@ const getClassName = (obj)=>{
8309
8316
  /* harmony export */ fastClone: function() { return /* reexport safe */ _extend_js__WEBPACK_IMPORTED_MODULE_14__.fastClone; },
8310
8317
  /* harmony export */ get: function() { return /* reexport safe */ _get_js__WEBPACK_IMPORTED_MODULE_15__.get; },
8311
8318
  /* harmony export */ getClassName: function() { return /* reexport safe */ _get_class_name_js__WEBPACK_IMPORTED_MODULE_16__.getClassName; },
8312
- /* harmony export */ getDataTransfer: function() { return /* reexport safe */ _utils_js__WEBPACK_IMPORTED_MODULE_26__.getDataTransfer; },
8313
- /* harmony export */ getPropertyDescriptor: function() { return /* reexport safe */ _utils_js__WEBPACK_IMPORTED_MODULE_26__.getPropertyDescriptor; },
8314
- /* harmony export */ getXPathByElement: function() { return /* reexport safe */ _selector_js__WEBPACK_IMPORTED_MODULE_23__.getXPathByElement; },
8319
+ /* harmony export */ getDataTransfer: function() { return /* reexport safe */ _utils_js__WEBPACK_IMPORTED_MODULE_27__.getDataTransfer; },
8320
+ /* harmony export */ getPropertyDescriptor: function() { return /* reexport safe */ _utils_js__WEBPACK_IMPORTED_MODULE_27__.getPropertyDescriptor; },
8321
+ /* harmony export */ getXPathByElement: function() { return /* reexport safe */ _selector_js__WEBPACK_IMPORTED_MODULE_24__.getXPathByElement; },
8315
8322
  /* harmony export */ hAlignElement: function() { return /* reexport safe */ _align_js__WEBPACK_IMPORTED_MODULE_0__.hAlignElement; },
8316
8323
  /* harmony export */ humanSizeToBytes: function() { return /* reexport safe */ _human_size_to_bytes_js__WEBPACK_IMPORTED_MODULE_17__.humanSizeToBytes; },
8317
- /* harmony export */ inView: function() { return /* reexport safe */ _scroll_into_view_js__WEBPACK_IMPORTED_MODULE_22__.inView; },
8324
+ /* harmony export */ inView: function() { return /* reexport safe */ _scroll_into_view_js__WEBPACK_IMPORTED_MODULE_23__.inView; },
8318
8325
  /* harmony export */ isAtom: function() { return /* reexport safe */ _extend_js__WEBPACK_IMPORTED_MODULE_14__.isAtom; },
8326
+ /* harmony export */ isUnsafeProtoKey: function() { return /* reexport safe */ _is_unsafe_proto_key_js__WEBPACK_IMPORTED_MODULE_18__.isUnsafeProtoKey; },
8319
8327
  /* harmony export */ keepNames: function() { return /* reexport safe */ _get_class_name_js__WEBPACK_IMPORTED_MODULE_16__.keepNames; },
8320
- /* harmony export */ keys: function() { return /* reexport safe */ _utils_js__WEBPACK_IMPORTED_MODULE_26__.keys; },
8321
- /* harmony export */ loadImage: function() { return /* reexport safe */ _utils_js__WEBPACK_IMPORTED_MODULE_26__.loadImage; },
8328
+ /* harmony export */ keys: function() { return /* reexport safe */ _utils_js__WEBPACK_IMPORTED_MODULE_27__.keys; },
8329
+ /* harmony export */ loadImage: function() { return /* reexport safe */ _utils_js__WEBPACK_IMPORTED_MODULE_27__.loadImage; },
8322
8330
  /* harmony export */ loadNext: function() { return /* reexport safe */ _append_script_js__WEBPACK_IMPORTED_MODULE_1__.loadNext; },
8323
8331
  /* harmony export */ loadNextStyle: function() { return /* reexport safe */ _append_script_js__WEBPACK_IMPORTED_MODULE_1__.loadNextStyle; },
8324
8332
  /* harmony export */ markAsAtomic: function() { return /* reexport safe */ _extend_js__WEBPACK_IMPORTED_MODULE_14__.markAsAtomic; },
8325
- /* harmony export */ markDeprecated: function() { return /* reexport safe */ _mark_deprecated_js__WEBPACK_IMPORTED_MODULE_18__.markDeprecated; },
8326
- /* harmony export */ markOwner: function() { return /* reexport safe */ _utils_js__WEBPACK_IMPORTED_MODULE_26__.markOwner; },
8327
- /* harmony export */ memorizeExec: function() { return /* reexport safe */ _utils_js__WEBPACK_IMPORTED_MODULE_26__.memorizeExec; },
8333
+ /* harmony export */ markDeprecated: function() { return /* reexport safe */ _mark_deprecated_js__WEBPACK_IMPORTED_MODULE_19__.markDeprecated; },
8334
+ /* harmony export */ markOwner: function() { return /* reexport safe */ _utils_js__WEBPACK_IMPORTED_MODULE_27__.markOwner; },
8335
+ /* harmony export */ memorizeExec: function() { return /* reexport safe */ _utils_js__WEBPACK_IMPORTED_MODULE_27__.memorizeExec; },
8328
8336
  /* harmony export */ options: function() { return /* reexport safe */ _error_index_js__WEBPACK_IMPORTED_MODULE_13__.options; },
8329
- /* harmony export */ parseQuery: function() { return /* reexport safe */ _parse_query_js__WEBPACK_IMPORTED_MODULE_19__.parseQuery; },
8330
- /* harmony export */ previewBox: function() { return /* reexport safe */ _print_js__WEBPACK_IMPORTED_MODULE_20__.previewBox; },
8331
- /* harmony export */ refs: function() { return /* reexport safe */ _selector_js__WEBPACK_IMPORTED_MODULE_23__.refs; },
8332
- /* harmony export */ reset: function() { return /* reexport safe */ _reset_js__WEBPACK_IMPORTED_MODULE_21__.reset; },
8333
- /* harmony export */ resolveElement: function() { return /* reexport safe */ _selector_js__WEBPACK_IMPORTED_MODULE_23__.resolveElement; },
8334
- /* harmony export */ scrollIntoViewIfNeeded: function() { return /* reexport safe */ _scroll_into_view_js__WEBPACK_IMPORTED_MODULE_22__.scrollIntoViewIfNeeded; },
8335
- /* harmony export */ set: function() { return /* reexport safe */ _set_js__WEBPACK_IMPORTED_MODULE_24__.set; }
8337
+ /* harmony export */ parseQuery: function() { return /* reexport safe */ _parse_query_js__WEBPACK_IMPORTED_MODULE_20__.parseQuery; },
8338
+ /* harmony export */ previewBox: function() { return /* reexport safe */ _print_js__WEBPACK_IMPORTED_MODULE_21__.previewBox; },
8339
+ /* harmony export */ refs: function() { return /* reexport safe */ _selector_js__WEBPACK_IMPORTED_MODULE_24__.refs; },
8340
+ /* harmony export */ reset: function() { return /* reexport safe */ _reset_js__WEBPACK_IMPORTED_MODULE_22__.reset; },
8341
+ /* harmony export */ resolveElement: function() { return /* reexport safe */ _selector_js__WEBPACK_IMPORTED_MODULE_24__.resolveElement; },
8342
+ /* harmony export */ scrollIntoViewIfNeeded: function() { return /* reexport safe */ _scroll_into_view_js__WEBPACK_IMPORTED_MODULE_23__.scrollIntoViewIfNeeded; },
8343
+ /* harmony export */ set: function() { return /* reexport safe */ _set_js__WEBPACK_IMPORTED_MODULE_25__.set; }
8336
8344
  /* harmony export */ });
8337
8345
  /* harmony import */ var _align_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(25726);
8338
8346
  /* harmony import */ var _append_script_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(63799);
@@ -8352,15 +8360,16 @@ const getClassName = (obj)=>{
8352
8360
  /* harmony import */ var _get_js__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(94643);
8353
8361
  /* harmony import */ var _get_class_name_js__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(80568);
8354
8362
  /* harmony import */ var _human_size_to_bytes_js__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(38420);
8355
- /* harmony import */ var _mark_deprecated_js__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(95942);
8356
- /* harmony import */ var _parse_query_js__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(82501);
8357
- /* harmony import */ var _print_js__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(11628);
8358
- /* harmony import */ var _reset_js__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(58844);
8359
- /* harmony import */ var _scroll_into_view_js__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(26395);
8360
- /* harmony import */ var _selector_js__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(76078);
8361
- /* harmony import */ var _set_js__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(3703);
8362
- /* harmony import */ var _stack_js__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(50535);
8363
- /* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(37790);
8363
+ /* harmony import */ var _is_unsafe_proto_key_js__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(69175);
8364
+ /* harmony import */ var _mark_deprecated_js__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(95942);
8365
+ /* harmony import */ var _parse_query_js__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(82501);
8366
+ /* harmony import */ var _print_js__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(11628);
8367
+ /* harmony import */ var _reset_js__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(58844);
8368
+ /* harmony import */ var _scroll_into_view_js__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(26395);
8369
+ /* harmony import */ var _selector_js__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(76078);
8370
+ /* harmony import */ var _set_js__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(3703);
8371
+ /* harmony import */ var _stack_js__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(50535);
8372
+ /* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(37790);
8364
8373
  /*!
8365
8374
  * Jodit Editor (https://xdsoft.net/jodit/)
8366
8375
  * Released under MIT see LICENSE.txt in the project root for license information.
@@ -8394,6 +8403,38 @@ const getClassName = (obj)=>{
8394
8403
 
8395
8404
 
8396
8405
 
8406
+
8407
+
8408
+
8409
+ /***/ }),
8410
+
8411
+ /***/ 69175:
8412
+ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
8413
+
8414
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
8415
+ /* harmony export */ UNSAFE_PROTO_KEYS: function() { return /* binding */ UNSAFE_PROTO_KEYS; },
8416
+ /* harmony export */ isUnsafeProtoKey: function() { return /* binding */ isUnsafeProtoKey; }
8417
+ /* harmony export */ });
8418
+ /*!
8419
+ * Jodit Editor (https://xdsoft.net/jodit/)
8420
+ * Released under MIT see LICENSE.txt in the project root for license information.
8421
+ * Copyright (c) 2013-2026 Valerii Chupurnov. All rights reserved. https://xdsoft.net
8422
+ */ /**
8423
+ * @module helpers/utils
8424
+ */ /**
8425
+ * Keys that must never be written from a (potentially untrusted) source —
8426
+ * assigning them while walking/merging an object can reach and mutate
8427
+ * `Object.prototype` (prototype pollution, CWE-1321).
8428
+ */ const UNSAFE_PROTO_KEYS = [
8429
+ '__proto__',
8430
+ 'constructor',
8431
+ 'prototype'
8432
+ ];
8433
+ /**
8434
+ * Check whether a key can be used to pollute the prototype chain.
8435
+ */ function isUnsafeProtoKey(key) {
8436
+ return UNSAFE_PROTO_KEYS.indexOf(key) !== -1;
8437
+ }
8397
8438
 
8398
8439
 
8399
8440
  /***/ }),
@@ -8866,6 +8907,7 @@ const $$temp = ()=>{
8866
8907
  /* harmony import */ var _checker_is_numeric_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(29807);
8867
8908
  /* harmony import */ var _checker_is_plain_object_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(72430);
8868
8909
  /* harmony import */ var _checker_is_string_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(70799);
8910
+ /* harmony import */ var _is_unsafe_proto_key_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(69175);
8869
8911
  /*!
8870
8912
  * Jodit Editor (https://xdsoft.net/jodit/)
8871
8913
  * Released under MIT see LICENSE.txt in the project root for license information.
@@ -8874,6 +8916,7 @@ const $$temp = ()=>{
8874
8916
 
8875
8917
 
8876
8918
 
8919
+
8877
8920
  /**
8878
8921
  * Safe access in tree object
8879
8922
  *
@@ -8891,6 +8934,9 @@ const $$temp = ()=>{
8891
8934
  return;
8892
8935
  }
8893
8936
  const parts = chain.split('.');
8937
+ if (parts.some(_is_unsafe_proto_key_js__WEBPACK_IMPORTED_MODULE_4__.isUnsafeProtoKey)) {
8938
+ return;
8939
+ }
8894
8940
  let result = obj, key = parts[0];
8895
8941
  for(let i = 0; i < parts.length - 1; i += 1){
8896
8942
  key = parts[i];
@@ -12045,8 +12091,9 @@ function toggleAttribute(jodit, value, elm, key, dry, mode) {
12045
12091
  /* harmony export */ });
12046
12092
  /* harmony import */ var _dom_index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(22732);
12047
12093
  /* harmony import */ var _helpers_utils_attr_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(29960);
12048
- /* harmony import */ var _list_wrap_list_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(82515);
12049
- /* harmony import */ var _wrap_unwrapped_text_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(6980);
12094
+ /* harmony import */ var _helpers_utils_css_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(41180);
12095
+ /* harmony import */ var _list_wrap_list_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(82515);
12096
+ /* harmony import */ var _wrap_unwrapped_text_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(6980);
12050
12097
  /*!
12051
12098
  * Jodit Editor (https://xdsoft.net/jodit/)
12052
12099
  * Released under MIT see LICENSE.txt in the project root for license information.
@@ -12055,12 +12102,29 @@ function toggleAttribute(jodit, value, elm, key, dry, mode) {
12055
12102
 
12056
12103
 
12057
12104
 
12105
+
12058
12106
  /**
12059
12107
  * Replaces the parent tag with the applicable one, or wraps the text and also replaces the tag
12060
12108
  * @private
12061
12109
  */ function wrap(commitStyle, font, jodit) {
12062
12110
  const wrapper = findOrCreateWrapper(commitStyle, font, jodit);
12063
- return commitStyle.elementIsList ? (0,_list_wrap_list_js__WEBPACK_IMPORTED_MODULE_2__.wrapList)(commitStyle, wrapper, jodit) : _dom_index_js__WEBPACK_IMPORTED_MODULE_0__.Dom.replace(wrapper, commitStyle.element, jodit.createInside, true);
12111
+ if (commitStyle.elementIsList) {
12112
+ return (0,_list_wrap_list_js__WEBPACK_IMPORTED_MODULE_3__.wrapList)(commitStyle, wrapper, jodit);
12113
+ }
12114
+ const newWrapper = _dom_index_js__WEBPACK_IMPORTED_MODULE_0__.Dom.replace(wrapper, commitStyle.element, jodit.createInside, true);
12115
+ if (commitStyle.elementIsBlock) {
12116
+ // Inline font styles left over from pasted content visually override
12117
+ // the new block format — e.g. an h2 with `font-weight: normal;
12118
+ // font-size: 24px` does not look like a heading at all, so the
12119
+ // command seems to do nothing. See
12120
+ // https://github.com/xdan/jodit/issues/1063
12121
+ (0,_helpers_utils_css_js__WEBPACK_IMPORTED_MODULE_2__.css)(newWrapper, 'fontSize', null);
12122
+ (0,_helpers_utils_css_js__WEBPACK_IMPORTED_MODULE_2__.css)(newWrapper, 'fontWeight', null);
12123
+ if (!(0,_helpers_utils_attr_js__WEBPACK_IMPORTED_MODULE_1__.attr)(newWrapper, 'style')) {
12124
+ (0,_helpers_utils_attr_js__WEBPACK_IMPORTED_MODULE_1__.attr)(newWrapper, 'style', null);
12125
+ }
12126
+ }
12127
+ return newWrapper;
12064
12128
  }
12065
12129
  const WRAP_NODES = new Set([
12066
12130
  'td',
@@ -12081,7 +12145,7 @@ const WRAP_NODES = new Set([
12081
12145
  if (box) {
12082
12146
  return box;
12083
12147
  }
12084
- return (0,_wrap_unwrapped_text_js__WEBPACK_IMPORTED_MODULE_3__.wrapUnwrappedText)(commitStyle, font, jodit);
12148
+ return (0,_wrap_unwrapped_text_js__WEBPACK_IMPORTED_MODULE_4__.wrapUnwrappedText)(commitStyle, font, jodit);
12085
12149
  }
12086
12150
  (0,_helpers_utils_attr_js__WEBPACK_IMPORTED_MODULE_1__.attr)(font, 'size', null);
12087
12151
  return font;
@@ -15628,8 +15692,11 @@ class Popup extends _group_group_js__WEBPACK_IMPORTED_MODULE_7__.UIGroup {
15628
15692
  /**
15629
15693
  * Calculate static bound for point
15630
15694
  */ getKeepBound(getBound) {
15695
+ var _a;
15631
15696
  const oldBound = getBound();
15632
- const elmUnderCursor = this.od.elementFromPoint(oldBound.left, oldBound.top);
15697
+ // Inside Shadow DOM `document.elementFromPoint` returns the shadow
15698
+ // host, so the lookup must start from the shadow root
15699
+ const elmUnderCursor = ((_a = this.j.o.shadowRoot) !== null && _a !== void 0 ? _a : this.od).elementFromPoint(oldBound.left, oldBound.top);
15633
15700
  if (!elmUnderCursor) {
15634
15701
  return getBound;
15635
15702
  }
@@ -17387,6 +17454,17 @@ let Jodit = Jodit_1 = class Jodit extends _modules_index_js__WEBPACK_IMPORTED_MO
17387
17454
  const init = ()=>{
17388
17455
  if (opt.enableDragAndDropFileToEditor && opt.uploader && (opt.uploader.url || opt.uploader.insertImageAsBase64URI)) {
17389
17456
  this.uploader.bind(this.editor);
17457
+ } else if (!opt.enableDragAndDropFileToEditor) {
17458
+ // Without a bound uploader nobody cancels a file drop, and
17459
+ // Firefox inserts the dropped image natively — the option
17460
+ // must mean "do nothing". See
17461
+ // https://github.com/xdan/jodit/issues/1077
17462
+ this.e.on(editor, 'drop', (e)=>{
17463
+ var _a, _b;
17464
+ if ((_b = (_a = e.dataTransfer) === null || _a === void 0 ? void 0 : _a.files) === null || _b === void 0 ? void 0 : _b.length) {
17465
+ e.preventDefault();
17466
+ }
17467
+ });
17390
17468
  }
17391
17469
  // in initEditor - the editor could change
17392
17470
  if (!this.__elementToPlace.get(this.editor)) {
@@ -26743,12 +26821,17 @@ const TABS = {
26743
26821
  self.j.alert('The name should not be empty');
26744
26822
  return false;
26745
26823
  }
26824
+ self.j.e.fire('afterImageEditorSave', data, name);
26746
26825
  self.onSave(name, data, self.hide, (e)=>{
26747
26826
  self.j.alert(e.message);
26748
26827
  });
26749
26828
  });
26750
26829
  break;
26751
26830
  case self.buttons.save:
26831
+ // Notify listeners that a crop/resize was applied,
26832
+ // passing the action box (action + box dimensions).
26833
+ // See https://github.com/xdan/jodit/issues/820
26834
+ self.j.e.fire('afterImageEditorSave', data);
26752
26835
  self.onSave(undefined, data, self.hide, (e)=>{
26753
26836
  self.j.alert(e.message);
26754
26837
  });
@@ -28512,13 +28595,35 @@ let ToolbarContent = class ToolbarContent extends _core_ui_button_index_js__WEBP
28512
28595
  return 'ToolbarContent';
28513
28596
  }
28514
28597
  /** @override */ update() {
28515
- const content = this.control.getContent(this.j, this);
28598
+ var _a, _b, _c;
28599
+ const { control } = this;
28600
+ const content = control.getContent(this.j, this);
28516
28601
  if ((0,_core_helpers_index_js__WEBPACK_IMPORTED_MODULE_2__.isString)(content) || content.parentNode !== this.container) {
28517
28602
  _core_dom_index_js__WEBPACK_IMPORTED_MODULE_1__.Dom.detach(this.container);
28518
28603
  this.container.appendChild((0,_core_helpers_index_js__WEBPACK_IMPORTED_MODULE_2__.isString)(content) ? this.j.create.fromHTML(content) : content);
28519
28604
  }
28605
+ // Content controls never went through the ToolbarButton status
28606
+ // calculation, so `isDisabled`/`isActive`/`update` declared on the
28607
+ // control were silently ignored (e.g. the FileBrowser Upload button
28608
+ // ignored the backend permissions). See
28609
+ // https://github.com/xdan/jodit/issues/1094
28610
+ this.state.disabled = Boolean((_a = control.isDisabled) === null || _a === void 0 ? void 0 : _a.call(control, this.j, this));
28611
+ this.state.activated = Boolean((_b = control.isActive) === null || _b === void 0 ? void 0 : _b.call(control, this.j, this));
28612
+ (_c = control.update) === null || _c === void 0 ? void 0 : _c.call(control, this.j, this);
28613
+ // The first update() runs before the state watchers are attached, so
28614
+ // apply the calculated state explicitly (the calls are idempotent)
28615
+ this.onChangeDisabled();
28616
+ this.onChangeActivated();
28520
28617
  super.update();
28521
28618
  }
28619
+ /**
28620
+ * The content is arbitrary HTML — propagate the disabled state to the
28621
+ * nested form controls (e.g. the file input of the Upload button),
28622
+ * otherwise they stay interactive.
28623
+ */ onChangeDisabled() {
28624
+ super.onChangeDisabled();
28625
+ this.container.querySelectorAll('input,button,select,textarea').forEach((elm)=>(0,_core_helpers_index_js__WEBPACK_IMPORTED_MODULE_2__.attr)(elm, 'disabled', this.state.disabled || null));
28626
+ }
28522
28627
  /** @override */ createContainer() {
28523
28628
  return this.j.c.span(this.componentName);
28524
28629
  }
@@ -29220,6 +29325,15 @@ function processOldBrowserDrag(self, cData, handlerSuccess, handlerError, onFina
29220
29325
  if (!fileList.length) {
29221
29326
  return Promise.reject((0,_core_helpers_index_js__WEBPACK_IMPORTED_MODULE_0__.error)('Need files'));
29222
29327
  }
29328
+ // Client-side validation hook — returning `false` aborts the upload.
29329
+ // See https://github.com/xdan/jodit/issues/1329
29330
+ if ((0,_core_helpers_index_js__WEBPACK_IMPORTED_MODULE_0__.isFunction)(o.beforeUpload)) {
29331
+ if (o.beforeUpload.call(uploader, fileList) === false) {
29332
+ const err = (0,_core_helpers_index_js__WEBPACK_IMPORTED_MODULE_0__.error)('Upload canceled');
29333
+ (handlerError || o.defaultHandlerError).call(uploader, err);
29334
+ return Promise.reject(err);
29335
+ }
29336
+ }
29223
29337
  const promises = [];
29224
29338
  if (o.insertImageAsBase64URI) {
29225
29339
  readImagesWithReader(fileList, o.imagesExtensions, promises, uploader, handlerSuccess, o.defaultHandlerSuccess);
@@ -30132,8 +30246,11 @@ const ns = 'addnewline';
30132
30246
  }
30133
30247
  }
30134
30248
  __onMouseMove(e) {
30249
+ var _a;
30135
30250
  const editor = this.j;
30136
- let currentElement = editor.ed.elementFromPoint(e.clientX, e.clientY);
30251
+ // Inside Shadow DOM `document.elementFromPoint` returns the shadow
30252
+ // host, so the lookup must start from the shadow root
30253
+ let currentElement = ((_a = editor.o.shadowRoot) !== null && _a !== void 0 ? _a : editor.ed).elementFromPoint(e.clientX, e.clientY);
30137
30254
  if (!_modules_index_js__WEBPACK_IMPORTED_MODULE_3__.Dom.isHTMLElement(currentElement) || !_modules_index_js__WEBPACK_IMPORTED_MODULE_3__.Dom.isOrContains(editor.editor, currentElement)) {
30138
30255
  return;
30139
30256
  }
@@ -30332,7 +30449,13 @@ _core_ui_icon_js__WEBPACK_IMPORTED_MODULE_0__.Icon.set('enter', _enter_svg_js__W
30332
30449
  return new _ui_ui_ai_assistant_js__WEBPACK_IMPORTED_MODULE_6__.UiAiAssistant(jodit, {
30333
30450
  onInsertAfter (html) {
30334
30451
  jodit.s.focus();
30335
- jodit.s.setCursorAfter(jodit.s.current());
30452
+ // `current()` returns a node of the selection START, so with
30453
+ // several selected paragraphs the result landed after the
30454
+ // first one — collapse the range to the END of the selection
30455
+ // instead. See https://github.com/xdan/jodit/issues/1263
30456
+ const range = jodit.s.range;
30457
+ range.collapse(false);
30458
+ jodit.s.selectRange(range);
30336
30459
  jodit.s.insertHTML(html);
30337
30460
  __dialog.close();
30338
30461
  },
@@ -30961,10 +31084,14 @@ class backspace extends _core_plugin_index_js__WEBPACK_IMPORTED_MODULE_4__.Plugi
30961
31084
  return false;
30962
31085
  }
30963
31086
  (0,_core_selection_helpers_index_js__WEBPACK_IMPORTED_MODULE_5__.moveNodeInsideStart)(jodit, fakeNode, backspace);
30964
- if (_cases_index_js__WEBPACK_IMPORTED_MODULE_8__.cases.some((func)=>{
31087
+ const disabled = jodit.o.delete.disableCases;
31088
+ if (_cases_index_js__WEBPACK_IMPORTED_MODULE_8__.casesMap.some(([key, func])=>{
31089
+ if (disabled && disabled.has(key)) {
31090
+ return;
31091
+ }
30965
31092
  if ((0,_core_helpers_checker_is_function_js__WEBPACK_IMPORTED_MODULE_3__.isFunction)(func) && func(jodit, fakeNode, backspace, mode)) {
30966
31093
  if (!_core_constants_js__WEBPACK_IMPORTED_MODULE_0__.IS_PROD) {
30967
- console.info('Remove case:', func.name);
31094
+ console.info('Remove case:', key);
30968
31095
  }
30969
31096
  return true;
30970
31097
  }
@@ -31051,13 +31178,26 @@ _core_global_js__WEBPACK_IMPORTED_MODULE_2__.pluginSystem.add('backspace', backs
31051
31178
  jodit.s.setCursorBefore(fakeNode);
31052
31179
  return true;
31053
31180
  }
31054
- if (sibling && (checkMoveListContent(jodit, mainClosestBox, sibling, backspace) || moveContentAndRemoveEmpty(jodit, mainClosestBox, sibling, backspace))) {
31181
+ if (sibling && (checkMoveListContent(jodit, mainClosestBox, sibling, backspace) || moveContentAndRemoveEmpty(jodit, mainClosestBox, resolveTableSibling(sibling, backspace), backspace))) {
31055
31182
  jodit.s.setCursorBefore(fakeNode);
31056
31183
  return true;
31057
31184
  }
31058
31185
  }
31059
31186
  return false;
31060
31187
  }
31188
+ /**
31189
+ * Content cannot be merged into the `<table>` element itself — it would land
31190
+ * between the table sections (after `</tbody>`), which is invalid HTML and
31191
+ * gets foster-parented out of the table on the next parse. Merge into the
31192
+ * edge cell instead. See https://github.com/xdan/jodit/issues/1064
31193
+ * @private
31194
+ */ function resolveTableSibling(sibling, backspace) {
31195
+ if (!_core_dom_dom_js__WEBPACK_IMPORTED_MODULE_1__.Dom.isTag(sibling, 'table')) {
31196
+ return sibling;
31197
+ }
31198
+ const cells = sibling.querySelectorAll('td,th');
31199
+ return cells.length ? cells[backspace ? cells.length - 1 : 0] : null;
31200
+ }
31061
31201
  function checkMoveListContent(jodit, mainClosestBox, sibling, backspace) {
31062
31202
  // Process UL/LI/OL cases
31063
31203
  const siblingIsList = _core_dom_dom_js__WEBPACK_IMPORTED_MODULE_1__.Dom.isTag(sibling, _core_constants_js__WEBPACK_IMPORTED_MODULE_0__.LIST_TAGS);
@@ -31613,8 +31753,9 @@ function checkRepeatRemoveCharAction(backspace, sibling, fakeNode, mode, removed
31613
31753
  /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
31614
31754
 
31615
31755
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
31616
- /* harmony export */ cases: function() { return /* binding */ cases; }
31756
+ /* harmony export */ casesMap: function() { return /* binding */ casesMap; }
31617
31757
  /* harmony export */ });
31758
+ /* unused harmony export cases */
31618
31759
  /* harmony import */ var _check_join_neighbors_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(62845);
31619
31760
  /* harmony import */ var _check_join_two_lists_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(91748);
31620
31761
  /* harmony import */ var _check_remove_char_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(73792);
@@ -31628,8 +31769,6 @@ function checkRepeatRemoveCharAction(backspace, sibling, fakeNode, mode, removed
31628
31769
  * Jodit Editor (https://xdsoft.net/jodit/)
31629
31770
  * Released under MIT see LICENSE.txt in the project root for license information.
31630
31771
  * Copyright (c) 2013-2026 Valerii Chupurnov. All rights reserved. https://xdsoft.net
31631
- */ /**
31632
- * @module plugins/backspace
31633
31772
  */
31634
31773
 
31635
31774
 
@@ -31640,18 +31779,52 @@ function checkRepeatRemoveCharAction(backspace, sibling, fakeNode, mode, removed
31640
31779
 
31641
31780
 
31642
31781
  /**
31782
+ * Ordered delete/backspace cases with stable keys. The first one returning
31783
+ * `true` wins. The keys are stable across minified builds (function names are
31784
+ * mangled by terser) so they can be referenced by `delete.disableCases`.
31643
31785
  * @private
31644
- */ const cases = [
31645
- _check_remove_unbreakable_element_js__WEBPACK_IMPORTED_MODULE_6__.checkRemoveUnbreakableElement,
31646
- _check_remove_content_not_editable_js__WEBPACK_IMPORTED_MODULE_3__.checkRemoveContentNotEditable,
31647
- _check_remove_char_js__WEBPACK_IMPORTED_MODULE_2__.checkRemoveChar,
31648
- _check_table_cell_js__WEBPACK_IMPORTED_MODULE_7__.checkTableCell,
31649
- _check_remove_empty_parent_js__WEBPACK_IMPORTED_MODULE_5__.checkRemoveEmptyParent,
31650
- _check_remove_empty_neighbor_js__WEBPACK_IMPORTED_MODULE_4__.checkRemoveEmptyNeighbor,
31651
- _check_join_two_lists_js__WEBPACK_IMPORTED_MODULE_1__.checkJoinTwoLists,
31652
- _check_join_neighbors_js__WEBPACK_IMPORTED_MODULE_0__.checkJoinNeighbors,
31653
- _check_unwrap_first_list_item_js__WEBPACK_IMPORTED_MODULE_8__.checkUnwrapFirstListItem
31786
+ */ const casesMap = [
31787
+ [
31788
+ 'remove-unbreakable',
31789
+ _check_remove_unbreakable_element_js__WEBPACK_IMPORTED_MODULE_6__.checkRemoveUnbreakableElement
31790
+ ],
31791
+ [
31792
+ 'remove-not-editable',
31793
+ _check_remove_content_not_editable_js__WEBPACK_IMPORTED_MODULE_3__.checkRemoveContentNotEditable
31794
+ ],
31795
+ [
31796
+ 'remove-char',
31797
+ _check_remove_char_js__WEBPACK_IMPORTED_MODULE_2__.checkRemoveChar
31798
+ ],
31799
+ [
31800
+ 'table-cell',
31801
+ _check_table_cell_js__WEBPACK_IMPORTED_MODULE_7__.checkTableCell
31802
+ ],
31803
+ [
31804
+ 'remove-empty-parent',
31805
+ _check_remove_empty_parent_js__WEBPACK_IMPORTED_MODULE_5__.checkRemoveEmptyParent
31806
+ ],
31807
+ [
31808
+ 'remove-empty-neighbor',
31809
+ _check_remove_empty_neighbor_js__WEBPACK_IMPORTED_MODULE_4__.checkRemoveEmptyNeighbor
31810
+ ],
31811
+ [
31812
+ 'join-two-lists',
31813
+ _check_join_two_lists_js__WEBPACK_IMPORTED_MODULE_1__.checkJoinTwoLists
31814
+ ],
31815
+ [
31816
+ 'join-neighbors',
31817
+ _check_join_neighbors_js__WEBPACK_IMPORTED_MODULE_0__.checkJoinNeighbors
31818
+ ],
31819
+ [
31820
+ 'unwrap-first-list-item',
31821
+ _check_unwrap_first_list_item_js__WEBPACK_IMPORTED_MODULE_8__.checkUnwrapFirstListItem
31822
+ ]
31654
31823
  ];
31824
+ /**
31825
+ * @private
31826
+ * @deprecated Use `casesMap` to also get the stable case keys.
31827
+ */ const cases = casesMap.map(([, fn])=>fn);
31655
31828
 
31656
31829
 
31657
31830
  /***/ }),
@@ -32161,6 +32334,18 @@ _core_ui_icon_js__WEBPACK_IMPORTED_MODULE_4__.Icon.set('class-span', _class_span
32161
32334
  _core_dom_dom_js__WEBPACK_IMPORTED_MODULE_1__.Dom.safeRemove(iframe);
32162
32335
  return false;
32163
32336
  }
32337
+ /**
32338
+ * Collapse a value that holds only a single empty block (e.g.
32339
+ * `<p><br></p>` left after deleting all content) to an empty string —
32340
+ * opt-in via `cleanHTML.collapseEmptyValueToEmptyString`. See #1149
32341
+ */ onAfterGetValueFromEditor(data) {
32342
+ if (!this.j.o.cleanHTML.collapseEmptyValueToEmptyString) {
32343
+ return;
32344
+ }
32345
+ if (/^<([a-z][a-z0-9]*)\b[^>]*>(?:<br\/?>)?<\/\1>$/i.test(data.value.trim())) {
32346
+ data.value = '';
32347
+ }
32348
+ }
32164
32349
  onSafeHTML(sandBox) {
32165
32350
  const sanitizer = this.j.o.cleanHTML.sanitizer;
32166
32351
  if (sanitizer) {
@@ -32203,6 +32388,9 @@ __decorate([
32203
32388
  __decorate([
32204
32389
  (0,_core_decorators_index_js__WEBPACK_IMPORTED_MODULE_0__.watch)(':beforeSetNativeEditorValue')
32205
32390
  ], cleanHtml.prototype, "onBeforeSetNativeEditorValue", null);
32391
+ __decorate([
32392
+ (0,_core_decorators_index_js__WEBPACK_IMPORTED_MODULE_0__.watch)(':afterGetValueFromEditor')
32393
+ ], cleanHtml.prototype, "onAfterGetValueFromEditor", null);
32206
32394
  __decorate([
32207
32395
  (0,_core_decorators_index_js__WEBPACK_IMPORTED_MODULE_0__.watch)(':safeHTML')
32208
32396
  ], cleanHtml.prototype, "onSafeHTML", null);
@@ -32228,6 +32416,7 @@ _config_js__WEBPACK_IMPORTED_MODULE_1__.Config.prototype.cleanHTML = {
32228
32416
  timeout: 300,
32229
32417
  removeEmptyElements: true,
32230
32418
  fillEmptyParagraph: true,
32419
+ collapseEmptyValueToEmptyString: false,
32231
32420
  replaceNBSP: true,
32232
32421
  replaceOldTags: {
32233
32422
  i: 'em',
@@ -33231,26 +33420,35 @@ _core_ui_icon_js__WEBPACK_IMPORTED_MODULE_0__.Icon.set('copy', _icons_copy_svg_j
33231
33420
  group: 'color'
33232
33421
  });
33233
33422
  const callback = (command, second, third)=>{
33423
+ var _a;
33234
33424
  const colorHEX = (0,_core_helpers_index_js__WEBPACK_IMPORTED_MODULE_1__.normalizeColor)(third);
33235
- switch(command){
33236
- case 'background':
33237
- editor.s.commitStyle({
33238
- attributes: {
33239
- style: {
33240
- backgroundColor: !colorHEX ? '' : colorHEX
33241
- }
33242
- }
33243
- });
33244
- break;
33245
- case 'forecolor':
33425
+ const value = !colorHEX ? '' : colorHEX;
33426
+ const style = command === 'background' ? {
33427
+ backgroundColor: value
33428
+ } : {
33429
+ color: value
33430
+ };
33431
+ // Cells selected with the `select-cells` plugin drop or collapse the
33432
+ // native range, so `commitStyle` would paint a pending caret format
33433
+ // outside the table instead of the selection the user sees. Apply the
33434
+ // style to the content of every selected cell instead. See #1250
33435
+ const selectedCells = editor.getInstance('Table', editor.o).getAllSelectedCells();
33436
+ if (selectedCells.length && editor.s.isCollapsed()) {
33437
+ selectedCells.forEach((cell)=>{
33438
+ editor.s.select(cell, true);
33246
33439
  editor.s.commitStyle({
33247
33440
  attributes: {
33248
- style: {
33249
- color: !colorHEX ? '' : colorHEX
33250
- }
33441
+ style
33251
33442
  }
33252
33443
  });
33253
- break;
33444
+ });
33445
+ (_a = editor.s.sel) === null || _a === void 0 ? void 0 : _a.removeAllRanges();
33446
+ } else {
33447
+ editor.s.commitStyle({
33448
+ attributes: {
33449
+ style
33450
+ }
33451
+ });
33254
33452
  }
33255
33453
  editor.synchronizeValues();
33256
33454
  return false;
@@ -35224,6 +35422,25 @@ _config_js__WEBPACK_IMPORTED_MODULE_4__.Config.prototype.controls.font = {
35224
35422
  return v.toLowerCase().replace(/['"]+/g, '').replace(/[^a-z0-9-]+/g, ',');
35225
35423
  }
35226
35424
  },
35425
+ // When no font is explicitly set, the computed font-family equals the
35426
+ // editor's own default (e.g. `-apple-system, …`). Return '' so the
35427
+ // button shows the `Default` list entry instead of that raw stack.
35428
+ // See #1370
35429
+ value: (editor)=>{
35430
+ const current = editor.s.current();
35431
+ if (!current) {
35432
+ return;
35433
+ }
35434
+ const box = _core_dom_index_js__WEBPACK_IMPORTED_MODULE_0__.Dom.closest(current, _core_dom_index_js__WEBPACK_IMPORTED_MODULE_0__.Dom.isElement, editor.editor);
35435
+ if (!box) {
35436
+ return;
35437
+ }
35438
+ const value = (0,_core_helpers_utils_css_js__WEBPACK_IMPORTED_MODULE_2__.css)(box, 'font-family').toString();
35439
+ if (value === (0,_core_helpers_utils_css_js__WEBPACK_IMPORTED_MODULE_2__.css)(editor.editor, 'font-family').toString()) {
35440
+ return '';
35441
+ }
35442
+ return value;
35443
+ },
35227
35444
  tooltip: 'Font family'
35228
35445
  };
35229
35446
 
@@ -38584,10 +38801,30 @@ const align = {
38584
38801
  this.j.async.setTimeout(()=>{
38585
38802
  const sel = this.j.s.sel;
38586
38803
  if (sel && !sel.isCollapsed) {
38587
- this.showPopup(()=>this.j.s.range.getBoundingClientRect(), 'selection');
38804
+ this.showPopup(()=>this.__selectionBound(), 'selection');
38588
38805
  }
38589
38806
  }, 1);
38590
38807
  }
38808
+ /**
38809
+ * The selection rect comes from the editor document — in iframe mode its
38810
+ * coordinates are iframe-local, while the popup lives in the host
38811
+ * document, so the iframe offset must be added. See
38812
+ * https://github.com/xdan/jodit/issues/1058
38813
+ */ __selectionBound() {
38814
+ const rect = this.j.s.range.getBoundingClientRect();
38815
+ let { left, top } = rect;
38816
+ if (this.j.iframe) {
38817
+ const offset = (0,_core_helpers_index_js__WEBPACK_IMPORTED_MODULE_3__.position)(this.j.iframe, this.j, true);
38818
+ left += offset.left;
38819
+ top += offset.top;
38820
+ }
38821
+ return {
38822
+ left,
38823
+ top,
38824
+ width: rect.width,
38825
+ height: rect.height
38826
+ };
38827
+ }
38591
38828
  onSelectionStart() {
38592
38829
  this.snapRange = this.j.s.range.cloneRange();
38593
38830
  }
@@ -38619,7 +38856,7 @@ const align = {
38619
38856
  if (!node) {
38620
38857
  return;
38621
38858
  }
38622
- this.showPopup(()=>range.getBoundingClientRect(), type);
38859
+ this.showPopup(()=>this.__selectionBound(), type);
38623
38860
  }
38624
38861
  /**
38625
38862
  * In not collapsed selection - only one image
@@ -39265,6 +39502,7 @@ _config_js__WEBPACK_IMPORTED_MODULE_2__.Config.prototype.link = {
39265
39502
  noFollowCheckbox: true,
39266
39503
  openInNewTabCheckbox: true,
39267
39504
  openInNewTabCheckboxDefaultChecked: false,
39505
+ ariaLabelInput: false,
39268
39506
  modeClassName: 'input',
39269
39507
  selectMultipleClassName: true,
39270
39508
  preventReadOnlyNavigation: true,
@@ -39434,7 +39672,7 @@ _config_js__WEBPACK_IMPORTED_MODULE_2__.Config.prototype.controls.link = {
39434
39672
  const currentElement = current;
39435
39673
  const isImageContent = _core_dom_index_js__WEBPACK_IMPORTED_MODULE_1__.Dom.isImage(currentElement);
39436
39674
  let { content_input } = elements;
39437
- const { className_input } = elements, { className_select } = elements;
39675
+ const { className_input } = elements, { className_select } = elements, { aria_label_input } = elements;
39438
39676
  if (!content_input) {
39439
39677
  content_input = jodit.c.element('input', {
39440
39678
  type: 'hidden',
@@ -39457,6 +39695,9 @@ _config_js__WEBPACK_IMPORTED_MODULE_2__.Config.prototype.controls.link = {
39457
39695
  if (!isImageContent && current) {
39458
39696
  content_input.value = getSelectionText();
39459
39697
  }
39698
+ if (aria_label_input) {
39699
+ aria_label_input.value = link ? (0,_core_helpers_index_js__WEBPACK_IMPORTED_MODULE_3__.attr)(link, 'aria-label') || '' : '';
39700
+ }
39460
39701
  if (link) {
39461
39702
  url_input.value = (0,_core_helpers_index_js__WEBPACK_IMPORTED_MODULE_3__.attr)(link, 'href') || '';
39462
39703
  if (modeClassName) {
@@ -39544,6 +39785,10 @@ _config_js__WEBPACK_IMPORTED_MODULE_2__.Config.prototype.controls.link = {
39544
39785
  }
39545
39786
  (0,_core_helpers_index_js__WEBPACK_IMPORTED_MODULE_3__.attr)(a, 'rel', relParts.length ? relParts.join(' ') : null);
39546
39787
  }
39788
+ if (aria_label_input) {
39789
+ const ariaLabel = aria_label_input.value.trim();
39790
+ (0,_core_helpers_index_js__WEBPACK_IMPORTED_MODULE_3__.attr)(a, 'aria-label', ariaLabel || null);
39791
+ }
39547
39792
  jodit.e.fire('applyLink', jodit, a, form);
39548
39793
  });
39549
39794
  jodit.synchronizeValues();
@@ -39682,7 +39927,7 @@ function writeImage(a, content_input, textWasChanged, url_input) {
39682
39927
  */
39683
39928
 
39684
39929
  const formTemplate = (editor)=>{
39685
- const { openInNewTabCheckbox, noFollowCheckbox, modeClassName, selectSizeClassName, selectMultipleClassName, selectOptionsClassName } = editor.o.link;
39930
+ const { openInNewTabCheckbox, noFollowCheckbox, ariaLabelInput, modeClassName, selectSizeClassName, selectMultipleClassName, selectOptionsClassName } = editor.o.link;
39686
39931
  return new _core_ui_form_index_js__WEBPACK_IMPORTED_MODULE_1__.UIForm(editor, [
39687
39932
  new _core_ui_form_index_js__WEBPACK_IMPORTED_MODULE_1__.UIBlock(editor, [
39688
39933
  new _core_ui_form_index_js__WEBPACK_IMPORTED_MODULE_1__.UIInput(editor, {
@@ -39694,6 +39939,13 @@ const formTemplate = (editor)=>{
39694
39939
  required: true
39695
39940
  })
39696
39941
  ]),
39942
+ ariaLabelInput ? new _core_ui_form_index_js__WEBPACK_IMPORTED_MODULE_1__.UIBlock(editor, [
39943
+ new _core_ui_form_index_js__WEBPACK_IMPORTED_MODULE_1__.UIInput(editor, {
39944
+ name: 'ariaLabel',
39945
+ ref: 'aria_label_input',
39946
+ label: 'Aria label'
39947
+ })
39948
+ ]) : null,
39697
39949
  new _core_ui_form_index_js__WEBPACK_IMPORTED_MODULE_1__.UIBlock(editor, [
39698
39950
  new _core_ui_form_index_js__WEBPACK_IMPORTED_MODULE_1__.UIInput(editor, {
39699
39951
  name: 'content',
@@ -40552,6 +40804,7 @@ const psKey = 'pasteStorage';
40552
40804
  _config_js__WEBPACK_IMPORTED_MODULE_1__.Config.prototype.controls.paste = {
40553
40805
  tooltip: 'Paste from clipboard',
40554
40806
  async exec (editor, _, { control }) {
40807
+ var _a;
40555
40808
  if (control.name === psKey) {
40556
40809
  editor.execCommand('showPasteStorage');
40557
40810
  return;
@@ -40562,7 +40815,13 @@ _config_js__WEBPACK_IMPORTED_MODULE_1__.Config.prototype.controls.paste = {
40562
40815
  try {
40563
40816
  const items = await navigator.clipboard.read();
40564
40817
  if (items && items.length) {
40565
- const textBlob = await items[0].getType(_core_constants_js__WEBPACK_IMPORTED_MODULE_0__.TEXT_PLAIN);
40818
+ const item = items[0];
40819
+ // Prefer the HTML flavor so the button behaves like the
40820
+ // Ctrl+V shortcut (which receives text/html from the
40821
+ // native paste event). See
40822
+ // https://github.com/xdan/jodit/issues/1061
40823
+ const type = ((_a = item.types) === null || _a === void 0 ? void 0 : _a.includes(_core_constants_js__WEBPACK_IMPORTED_MODULE_0__.TEXT_HTML)) ? _core_constants_js__WEBPACK_IMPORTED_MODULE_0__.TEXT_HTML : _core_constants_js__WEBPACK_IMPORTED_MODULE_0__.TEXT_PLAIN;
40824
+ const textBlob = await item.getType(type);
40566
40825
  text = await new Response(textBlob).text();
40567
40826
  }
40568
40827
  error = false;
@@ -43175,20 +43434,30 @@ let UISearch = class UISearch extends _core_ui_index_js__WEBPACK_IMPORTED_MODULE
43175
43434
  return false;
43176
43435
  }).on(this.queryInput, 'input', ()=>{
43177
43436
  this.setMod('empty-query', !(0,_core_helpers_index_js__WEBPACK_IMPORTED_MODULE_3__.trim)(this.queryInput.value).length);
43178
- }).on(this.queryInput, 'keydown', this.j.async.debounce(async (e)=>{
43179
- switch(e.key){
43180
- case _core_constants_js__WEBPACK_IMPORTED_MODULE_0__.KEY_ENTER:
43437
+ }).on(this.queryInput, 'keydown', (()=>{
43438
+ const debounced = this.j.async.debounce(async (e)=>{
43439
+ switch(e.key){
43440
+ case _core_constants_js__WEBPACK_IMPORTED_MODULE_0__.KEY_ENTER:
43441
+ if (await jodit.e.fire('searchNext')) {
43442
+ this.close();
43443
+ }
43444
+ break;
43445
+ default:
43446
+ jodit.e.fire(this, 'needUpdateCounters');
43447
+ break;
43448
+ }
43449
+ }, this.j.defaultTimeout);
43450
+ return (e)=>{
43451
+ // Must be canceled synchronously — inside the debounced
43452
+ // handler the browser has already submitted the parent
43453
+ // form. See https://github.com/xdan/jodit/issues/918
43454
+ if (e.key === _core_constants_js__WEBPACK_IMPORTED_MODULE_0__.KEY_ENTER) {
43181
43455
  e.preventDefault();
43182
43456
  e.stopImmediatePropagation();
43183
- if (await jodit.e.fire('searchNext')) {
43184
- this.close();
43185
- }
43186
- break;
43187
- default:
43188
- jodit.e.fire(this, 'needUpdateCounters');
43189
- break;
43190
- }
43191
- }, this.j.defaultTimeout));
43457
+ }
43458
+ debounced(e);
43459
+ };
43460
+ })());
43192
43461
  }
43193
43462
  };
43194
43463
  __decorate([
@@ -43298,15 +43567,37 @@ class selectCells extends _core_plugin_index_js__WEBPACK_IMPORTED_MODULE_5__.Plu
43298
43567
  }
43299
43568
  /**
43300
43569
  * Mouse click inside the table
43301
- */ onStartSelection(cell) {
43570
+ */ onStartSelection(cell, event) {
43571
+ var _a;
43302
43572
  if (this.j.o.readonly) {
43303
43573
  return;
43304
43574
  }
43575
+ const table = _core_dom_dom_js__WEBPACK_IMPORTED_MODULE_2__.Dom.closest(cell, 'table', this.j.editor);
43576
+ // Ctrl/Cmd + click toggles a single cell into the existing selection
43577
+ // instead of resetting it — non-contiguous multi-cell selection.
43578
+ // See https://github.com/xdan/jodit/issues/1163
43579
+ if (((event === null || event === void 0 ? void 0 : event.ctrlKey) || (event === null || event === void 0 ? void 0 : event.metaKey)) && cell !== this.j.editor && table && _core_dom_dom_js__WEBPACK_IMPORTED_MODULE_2__.Dom.isCell(cell)) {
43580
+ if (this.__tableModule.getAllSelectedCells().includes(cell)) {
43581
+ this.__tableModule.removeSelection(cell);
43582
+ } else {
43583
+ if (!cell.firstChild) {
43584
+ cell.appendChild(this.j.createInside.element('br'));
43585
+ }
43586
+ this.__tableModule.addSelection(cell);
43587
+ }
43588
+ this.__selectedCell = cell;
43589
+ (_a = this.j.s.sel) === null || _a === void 0 ? void 0 : _a.removeAllRanges();
43590
+ if (this.__tableModule.getAllSelectedCells().length) {
43591
+ this.j.e.fire('showPopup', table, ()=>(0,_core_helpers_index_js__WEBPACK_IMPORTED_MODULE_4__.position)(cell, this.j), 'cells');
43592
+ } else {
43593
+ this.j.e.fire('hidePopup', 'cells');
43594
+ }
43595
+ return false;
43596
+ }
43305
43597
  this.unselectCells();
43306
43598
  if (cell === this.j.editor) {
43307
43599
  return;
43308
43600
  }
43309
- const table = _core_dom_dom_js__WEBPACK_IMPORTED_MODULE_2__.Dom.closest(cell, 'table', this.j.editor);
43310
43601
  if (!cell || !table) {
43311
43602
  return;
43312
43603
  }
@@ -43335,14 +43626,16 @@ class selectCells extends _core_plugin_index_js__WEBPACK_IMPORTED_MODULE_5__.Plu
43335
43626
  /**
43336
43627
  * Mouse move inside the table
43337
43628
  */ __onMove(table, e) {
43338
- var _a;
43629
+ var _a, _b;
43339
43630
  if (this.j.o.readonly && !this.j.isLocked) {
43340
43631
  return;
43341
43632
  }
43342
43633
  if (this.j.isLockedNotBy(key)) {
43343
43634
  return;
43344
43635
  }
43345
- const node = this.j.ed.elementFromPoint(e.clientX, e.clientY);
43636
+ // Inside Shadow DOM `document.elementFromPoint` returns the shadow
43637
+ // host, so the lookup must start from the shadow root
43638
+ const node = ((_a = this.j.o.shadowRoot) !== null && _a !== void 0 ? _a : this.j.ed).elementFromPoint(e.clientX, e.clientY);
43346
43639
  if (!node) {
43347
43640
  return;
43348
43641
  }
@@ -43368,7 +43661,7 @@ class selectCells extends _core_plugin_index_js__WEBPACK_IMPORTED_MODULE_5__.Plu
43368
43661
  }
43369
43662
  const cellsCount = this.__tableModule.getAllSelectedCells().length;
43370
43663
  if (cellsCount > 1) {
43371
- (_a = this.j.s.sel) === null || _a === void 0 ? void 0 : _a.removeAllRanges();
43664
+ (_b = this.j.s.sel) === null || _b === void 0 ? void 0 : _b.removeAllRanges();
43372
43665
  }
43373
43666
  this.j.e.fire('hidePopup');
43374
43667
  e.stopPropagation();
@@ -43398,13 +43691,15 @@ class selectCells extends _core_plugin_index_js__WEBPACK_IMPORTED_MODULE_5__.Plu
43398
43691
  /**
43399
43692
  * Stop a selection process
43400
43693
  */ __onStopSelection(table, e) {
43401
- var _a, _b;
43694
+ var _a, _b, _c;
43402
43695
  if (!this.__selectedCell) {
43403
43696
  return;
43404
43697
  }
43405
43698
  this.__isSelectionMode = false;
43406
43699
  this.j.unlock();
43407
- const node = this.j.ed.elementFromPoint(e.clientX, e.clientY);
43700
+ // Inside Shadow DOM `document.elementFromPoint` returns the shadow
43701
+ // host, so the lookup must start from the shadow root
43702
+ const node = ((_a = this.j.o.shadowRoot) !== null && _a !== void 0 ? _a : this.j.ed).elementFromPoint(e.clientX, e.clientY);
43408
43703
  if (!node) {
43409
43704
  return;
43410
43705
  }
@@ -43423,7 +43718,7 @@ class selectCells extends _core_plugin_index_js__WEBPACK_IMPORTED_MODULE_5__.Plu
43423
43718
  cell,
43424
43719
  this.__selectedCell
43425
43720
  ]), box = this.__tableModule.formalMatrix(table);
43426
- const max = (_a = box[bound[1][0]]) === null || _a === void 0 ? void 0 : _a[bound[1][1]], min = (_b = box[bound[0][0]]) === null || _b === void 0 ? void 0 : _b[bound[0][1]];
43721
+ const max = (_b = box[bound[1][0]]) === null || _b === void 0 ? void 0 : _b[bound[1][1]], min = (_c = box[bound[0][0]]) === null || _c === void 0 ? void 0 : _c[bound[0][1]];
43427
43722
  // `getSelectedBound` keeps its `Infinity` sentinel when none of the
43428
43723
  // selected cells belong to this table's matrix — e.g. after a
43429
43724
  // drag-and-drop that moved/removed the cells, leaving a stale anchor and
@@ -44081,7 +44376,7 @@ _config_js__WEBPACK_IMPORTED_MODULE_2__.Config.prototype.sourceEditorNativeOptio
44081
44376
  */ highlightActiveLine: true
44082
44377
  };
44083
44378
  _config_js__WEBPACK_IMPORTED_MODULE_2__.Config.prototype.sourceEditorCDNUrlsJS = [
44084
- 'https://cdnjs.cloudflare.com/ajax/libs/ace/1.4.2/ace.js'
44379
+ 'https://cdnjs.cloudflare.com/ajax/libs/ace/1.43.3/ace.js'
44085
44380
  ];
44086
44381
  _config_js__WEBPACK_IMPORTED_MODULE_2__.Config.prototype.beautifyHTMLCDNUrlsJS = [
44087
44382
  'https://cdnjs.cloudflare.com/ajax/libs/js-beautify/1.14.4/beautify.min.js',
@@ -47788,10 +48083,9 @@ class JoditPro extends jodit_esm_index__WEBPACK_IMPORTED_MODULE_3__.Jodit {
47788
48083
 
47789
48084
  /***/ }),
47790
48085
 
47791
- /***/ 44864:
48086
+ /***/ 49934:
47792
48087
  /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
47793
48088
 
47794
- __webpack_require__.r(__webpack_exports__);
47795
48089
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
47796
48090
  /* harmony export */ autocomplete: function() { return /* binding */ autocomplete; }
47797
48091
  /* harmony export */ });
@@ -48343,7 +48637,7 @@ AutocompleteItem = (0,_swc_helpers_ts_decorate__WEBPACK_IMPORTED_MODULE_1__.__de
48343
48637
  /* harmony import */ var jodit_esm_plugins_all__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(25187);
48344
48638
  /* harmony import */ var jodit_pro_plugins_paste_from_word_paste_from_word__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(58858);
48345
48639
  /* harmony import */ var jodit_pro_plugins_license_license__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(21246);
48346
- /* harmony import */ var jodit_pro_plugins_autocomplete_autocomplete__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(44864);
48640
+ /* harmony import */ var jodit_pro_plugins_autocomplete_autocomplete_impl__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(49934);
48347
48641
  /* harmony import */ var jodit_esm_plugins_speech_recognize_speech_recognize__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(3115);
48348
48642
  /*!
48349
48643
  * Jodit Editor PRO (https://xdsoft.net/jodit/)
@@ -48352,6 +48646,9 @@ AutocompleteItem = (0,_swc_helpers_ts_decorate__WEBPACK_IMPORTED_MODULE_1__.__de
48352
48646
  */
48353
48647
 
48354
48648
 
48649
+ // `.impl` (not the standalone entry) — the entry additionally carries the
48650
+ // standalone stylesheet that must stay OUT of the main bundle so webpack
48651
+ // emits plugins/autocomplete/autocomplete.min.css. See #1308
48355
48652
 
48356
48653
 
48357
48654