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
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.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
  */
@@ -1696,6 +1696,14 @@ class ViewComponent extends _component_js__WEBPACK_IMPORTED_MODULE_0__.Component
1696
1696
  * Attach component to View
1697
1697
  */ setParentView(jodit) {
1698
1698
  this.jodit = jodit;
1699
+ // Inherit the owner window from the parent view — for an editor
1700
+ // created with a custom `ownerWindow` (e.g. inside an iframe) the
1701
+ // component default (the global `window`) is wrong: outside-click
1702
+ // handlers of dropdowns/popups listened to the wrong window. See
1703
+ // https://github.com/xdan/jodit/issues/965
1704
+ if (jodit.ow) {
1705
+ this.ownerWindow = jodit.ow;
1706
+ }
1699
1707
  jodit.components.add(this);
1700
1708
  return this;
1701
1709
  }
@@ -1797,7 +1805,7 @@ __webpack_require__.r(__webpack_exports__);
1797
1805
  * ```
1798
1806
  * @packageDocumentation
1799
1807
  * @module constants
1800
- */ const APP_VERSION = "4.12.26";
1808
+ */ const APP_VERSION = "4.12.32";
1801
1809
  // prettier-ignore
1802
1810
  const ES = "es2015";
1803
1811
  const IS_ES_MODERN = true;
@@ -5081,9 +5089,15 @@ function isFastEqual(a, b) {
5081
5089
  */ /**
5082
5090
  * @module helpers/checker
5083
5091
  */ /**
5084
- * Detect if string is HTML from MS Word or Excel
5092
+ * Detect if string is HTML from MS Word, Excel or LibreOffice/OpenOffice
5085
5093
  */ function isHtmlFromWord(data) {
5086
- 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;
5094
+ 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
5095
+ // unquoted in the raw Word clipboard fragment
5096
+ data.search(/<meta[^>]*?ProgId[^>]*?(Word|Excel)\./i) !== -1 || // LibreOffice/OpenOffice Writer & Calc
5097
+ data.search(/<meta[^>]*?(LibreOffice|OpenOffice)/i) !== -1 || // Office namespaces on the root element of the clipboard fragment
5098
+ data.search(/urn:schemas-microsoft-com:office:(word|excel)/) !== -1 || // `class=MsoNormal` and friends (unquoted/quoted)
5099
+ data.search(/<\w[^>]*\sclass=("|')?Mso/) !== -1 || // the raw Word clipboard uses SINGLE quotes: style='mso-…'
5100
+ data.search(/style='[^']*mso-/) !== -1 || data.search(/style="[^"]*mso-/) !== -1 && data.search(/<font/) !== -1;
5087
5101
  }
5088
5102
 
5089
5103
 
@@ -6125,6 +6139,7 @@ __webpack_require__.r(__webpack_exports__);
6125
6139
  /* harmony export */ LimitedStack: function() { return /* reexport safe */ _utils_index_js__WEBPACK_IMPORTED_MODULE_8__.LimitedStack; },
6126
6140
  /* harmony export */ NUMBER_FIELDS_REG: function() { return /* reexport safe */ _normalize_index_js__WEBPACK_IMPORTED_MODULE_5__.NUMBER_FIELDS_REG; },
6127
6141
  /* harmony export */ OptionsError: function() { return /* reexport safe */ _utils_index_js__WEBPACK_IMPORTED_MODULE_8__.OptionsError; },
6142
+ /* harmony export */ UNSAFE_PROTO_KEYS: function() { return /* reexport safe */ _utils_index_js__WEBPACK_IMPORTED_MODULE_8__.UNSAFE_PROTO_KEYS; },
6128
6143
  /* harmony export */ abort: function() { return /* reexport safe */ _utils_index_js__WEBPACK_IMPORTED_MODULE_8__.abort; },
6129
6144
  /* harmony export */ alignElement: function() { return /* reexport safe */ _utils_index_js__WEBPACK_IMPORTED_MODULE_8__.alignElement; },
6130
6145
  /* harmony export */ alreadyLoadedList: function() { return /* reexport safe */ _utils_index_js__WEBPACK_IMPORTED_MODULE_8__.alreadyLoadedList; },
@@ -6197,6 +6212,7 @@ __webpack_require__.r(__webpack_exports__);
6197
6212
  /* harmony export */ isString: function() { return /* reexport safe */ _checker_index_js__WEBPACK_IMPORTED_MODULE_2__.isString; },
6198
6213
  /* harmony export */ isStringArray: function() { return /* reexport safe */ _checker_index_js__WEBPACK_IMPORTED_MODULE_2__.isStringArray; },
6199
6214
  /* harmony export */ isURL: function() { return /* reexport safe */ _checker_index_js__WEBPACK_IMPORTED_MODULE_2__.isURL; },
6215
+ /* harmony export */ isUnsafeProtoKey: function() { return /* reexport safe */ _utils_index_js__WEBPACK_IMPORTED_MODULE_8__.isUnsafeProtoKey; },
6200
6216
  /* harmony export */ isValidName: function() { return /* reexport safe */ _checker_index_js__WEBPACK_IMPORTED_MODULE_2__.isValidName; },
6201
6217
  /* harmony export */ isViewObject: function() { return /* reexport safe */ _checker_index_js__WEBPACK_IMPORTED_MODULE_2__.isViewObject; },
6202
6218
  /* harmony export */ isVoid: function() { return /* reexport safe */ _checker_index_js__WEBPACK_IMPORTED_MODULE_2__.isVoid; },
@@ -7603,7 +7619,8 @@ const completeUrl = (url)=>{
7603
7619
  /* harmony import */ var _checker_is_void_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(86068);
7604
7620
  /* harmony import */ var _config_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(6441);
7605
7621
  /* harmony import */ var _extend_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(97735);
7606
- /* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(37790);
7622
+ /* harmony import */ var _is_unsafe_proto_key_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(69175);
7623
+ /* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(37790);
7607
7624
  /*!
7608
7625
  * Jodit Editor (https://xdsoft.net/jodit/)
7609
7626
  * Released under MIT see LICENSE.txt in the project root for license information.
@@ -7615,18 +7632,7 @@ const completeUrl = (url)=>{
7615
7632
 
7616
7633
 
7617
7634
 
7618
- /**
7619
- * Keys that must never be copied from a (potentially untrusted) config object —
7620
- * assigning them during a recursive merge can reach and mutate
7621
- * `Object.prototype` (prototype pollution, CWE-1321).
7622
- */ const UNSAFE_PROTO_KEYS = [
7623
- '__proto__',
7624
- 'constructor',
7625
- 'prototype'
7626
- ];
7627
- function isUnsafeProtoKey(key) {
7628
- return UNSAFE_PROTO_KEYS.indexOf(key) !== -1;
7629
- }
7635
+
7630
7636
  /**
7631
7637
  * @example
7632
7638
  * ```js
@@ -7675,7 +7681,7 @@ function isUnsafeProtoKey(key) {
7675
7681
  }
7676
7682
  const newOpt = {};
7677
7683
  Object.keys(options).forEach((key)=>{
7678
- if (isUnsafeProtoKey(key)) {
7684
+ if ((0,_is_unsafe_proto_key_js__WEBPACK_IMPORTED_MODULE_6__.isUnsafeProtoKey)(key)) {
7679
7685
  return;
7680
7686
  }
7681
7687
  const opt = options[key], protoKey = proto ? proto[key] : null;
@@ -7697,7 +7703,7 @@ function isUnsafeProtoKey(key) {
7697
7703
  return newOpt;
7698
7704
  }
7699
7705
  function ConfigFlatten(obj) {
7700
- return (0,_utils_js__WEBPACK_IMPORTED_MODULE_6__.keys)(obj, false).reduce((app, key)=>{
7706
+ return (0,_utils_js__WEBPACK_IMPORTED_MODULE_7__.keys)(obj, false).reduce((app, key)=>{
7701
7707
  app[key] = obj[key];
7702
7708
  return app;
7703
7709
  }, {});
@@ -7739,7 +7745,7 @@ function ConfigFlatten(obj) {
7739
7745
  * @see {@link ConfigProto} for the prototype-chain variant used at editor creation time
7740
7746
  */ function ConfigMerge(target, source) {
7741
7747
  Object.keys(source).forEach((key)=>{
7742
- if (isUnsafeProtoKey(key)) {
7748
+ if ((0,_is_unsafe_proto_key_js__WEBPACK_IMPORTED_MODULE_6__.isUnsafeProtoKey)(key)) {
7743
7749
  return;
7744
7750
  }
7745
7751
  const srcVal = source[key];
@@ -7752,7 +7758,7 @@ function ConfigFlatten(obj) {
7752
7758
  });
7753
7759
  }
7754
7760
  function ConfigDeepFlatten(obj) {
7755
- return (0,_utils_js__WEBPACK_IMPORTED_MODULE_6__.keys)(obj, false).reduce((app, key)=>{
7761
+ return (0,_utils_js__WEBPACK_IMPORTED_MODULE_7__.keys)(obj, false).reduce((app, key)=>{
7756
7762
  app[key] = (0,_checker_is_plain_object_js__WEBPACK_IMPORTED_MODULE_1__.isPlainObject)(obj[key]) ? ConfigDeepFlatten(obj[key]) : obj[key];
7757
7763
  return app;
7758
7764
  }, {});
@@ -8325,14 +8331,15 @@ const getClassName = (obj)=>{
8325
8331
  /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
8326
8332
 
8327
8333
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
8328
- /* harmony export */ $$: function() { return /* reexport safe */ _selector_js__WEBPACK_IMPORTED_MODULE_23__.$$; },
8334
+ /* harmony export */ $$: function() { return /* reexport safe */ _selector_js__WEBPACK_IMPORTED_MODULE_24__.$$; },
8329
8335
  /* harmony export */ ConfigDeepFlatten: function() { return /* reexport safe */ _config_proto_js__WEBPACK_IMPORTED_MODULE_7__.ConfigDeepFlatten; },
8330
8336
  /* harmony export */ ConfigFlatten: function() { return /* reexport safe */ _config_proto_js__WEBPACK_IMPORTED_MODULE_7__.ConfigFlatten; },
8331
8337
  /* harmony export */ ConfigMerge: function() { return /* reexport safe */ _config_proto_js__WEBPACK_IMPORTED_MODULE_7__.ConfigMerge; },
8332
8338
  /* harmony export */ ConfigProto: function() { return /* reexport safe */ _config_proto_js__WEBPACK_IMPORTED_MODULE_7__.ConfigProto; },
8333
8339
  /* harmony export */ ConnectionError: function() { return /* reexport safe */ _error_index_js__WEBPACK_IMPORTED_MODULE_13__.ConnectionError; },
8334
- /* harmony export */ LimitedStack: function() { return /* reexport safe */ _stack_js__WEBPACK_IMPORTED_MODULE_25__.LimitedStack; },
8340
+ /* harmony export */ LimitedStack: function() { return /* reexport safe */ _stack_js__WEBPACK_IMPORTED_MODULE_26__.LimitedStack; },
8335
8341
  /* harmony export */ OptionsError: function() { return /* reexport safe */ _error_index_js__WEBPACK_IMPORTED_MODULE_13__.OptionsError; },
8342
+ /* harmony export */ UNSAFE_PROTO_KEYS: function() { return /* reexport safe */ _is_unsafe_proto_key_js__WEBPACK_IMPORTED_MODULE_18__.UNSAFE_PROTO_KEYS; },
8336
8343
  /* harmony export */ abort: function() { return /* reexport safe */ _error_index_js__WEBPACK_IMPORTED_MODULE_13__.abort; },
8337
8344
  /* harmony export */ alignElement: function() { return /* reexport safe */ _align_js__WEBPACK_IMPORTED_MODULE_0__.alignElement; },
8338
8345
  /* harmony export */ alreadyLoadedList: function() { return /* reexport safe */ _append_script_js__WEBPACK_IMPORTED_MODULE_1__.alreadyLoadedList; },
@@ -8342,17 +8349,17 @@ const getClassName = (obj)=>{
8342
8349
  /* harmony export */ attr: function() { return /* reexport safe */ _attr_js__WEBPACK_IMPORTED_MODULE_3__.attr; },
8343
8350
  /* harmony export */ browser: function() { return /* reexport safe */ _browser_js__WEBPACK_IMPORTED_MODULE_4__.browser; },
8344
8351
  /* harmony export */ buildQuery: function() { return /* reexport safe */ _build_query_js__WEBPACK_IMPORTED_MODULE_5__.buildQuery; },
8345
- /* harmony export */ call: function() { return /* reexport safe */ _utils_js__WEBPACK_IMPORTED_MODULE_26__.call; },
8346
- /* harmony export */ callPromise: function() { return /* reexport safe */ _utils_js__WEBPACK_IMPORTED_MODULE_26__.callPromise; },
8347
- /* harmony export */ callThis: function() { return /* reexport safe */ _utils_js__WEBPACK_IMPORTED_MODULE_26__.callThis; },
8352
+ /* harmony export */ call: function() { return /* reexport safe */ _utils_js__WEBPACK_IMPORTED_MODULE_27__.call; },
8353
+ /* harmony export */ callPromise: function() { return /* reexport safe */ _utils_js__WEBPACK_IMPORTED_MODULE_27__.callPromise; },
8354
+ /* harmony export */ callThis: function() { return /* reexport safe */ _utils_js__WEBPACK_IMPORTED_MODULE_27__.callThis; },
8348
8355
  /* harmony export */ clearAlign: function() { return /* reexport safe */ _align_js__WEBPACK_IMPORTED_MODULE_0__.clearAlign; },
8349
8356
  /* harmony export */ clearCenterAlign: function() { return /* reexport safe */ _css_js__WEBPACK_IMPORTED_MODULE_9__.clearCenterAlign; },
8350
- /* harmony export */ cns: function() { return /* reexport safe */ _mark_deprecated_js__WEBPACK_IMPORTED_MODULE_18__.cns; },
8357
+ /* harmony export */ cns: function() { return /* reexport safe */ _mark_deprecated_js__WEBPACK_IMPORTED_MODULE_19__.cns; },
8351
8358
  /* harmony export */ completeUrl: function() { return /* reexport safe */ _complete_url_js__WEBPACK_IMPORTED_MODULE_6__.completeUrl; },
8352
8359
  /* harmony export */ connection: function() { return /* reexport safe */ _error_index_js__WEBPACK_IMPORTED_MODULE_13__.connection; },
8353
8360
  /* harmony export */ convertMediaUrlToVideoEmbed: function() { return /* reexport safe */ _convert_media_url_to_video_embed_js__WEBPACK_IMPORTED_MODULE_8__.convertMediaUrlToVideoEmbed; },
8354
8361
  /* harmony export */ css: function() { return /* reexport safe */ _css_js__WEBPACK_IMPORTED_MODULE_9__.css; },
8355
- /* harmony export */ cssPath: function() { return /* reexport safe */ _selector_js__WEBPACK_IMPORTED_MODULE_23__.cssPath; },
8362
+ /* harmony export */ cssPath: function() { return /* reexport safe */ _selector_js__WEBPACK_IMPORTED_MODULE_24__.cssPath; },
8356
8363
  /* harmony export */ ctrlKey: function() { return /* reexport safe */ _ctrl_key_js__WEBPACK_IMPORTED_MODULE_10__.ctrlKey; },
8357
8364
  /* harmony export */ dataBind: function() { return /* reexport safe */ _data_bind_js__WEBPACK_IMPORTED_MODULE_11__.dataBind; },
8358
8365
  /* harmony export */ defaultLanguage: function() { return /* reexport safe */ _default_language_js__WEBPACK_IMPORTED_MODULE_12__.defaultLanguage; },
@@ -8360,30 +8367,31 @@ const getClassName = (obj)=>{
8360
8367
  /* harmony export */ fastClone: function() { return /* reexport safe */ _extend_js__WEBPACK_IMPORTED_MODULE_14__.fastClone; },
8361
8368
  /* harmony export */ get: function() { return /* reexport safe */ _get_js__WEBPACK_IMPORTED_MODULE_15__.get; },
8362
8369
  /* harmony export */ getClassName: function() { return /* reexport safe */ _get_class_name_js__WEBPACK_IMPORTED_MODULE_16__.getClassName; },
8363
- /* harmony export */ getDataTransfer: function() { return /* reexport safe */ _utils_js__WEBPACK_IMPORTED_MODULE_26__.getDataTransfer; },
8364
- /* harmony export */ getPropertyDescriptor: function() { return /* reexport safe */ _utils_js__WEBPACK_IMPORTED_MODULE_26__.getPropertyDescriptor; },
8365
- /* harmony export */ getXPathByElement: function() { return /* reexport safe */ _selector_js__WEBPACK_IMPORTED_MODULE_23__.getXPathByElement; },
8370
+ /* harmony export */ getDataTransfer: function() { return /* reexport safe */ _utils_js__WEBPACK_IMPORTED_MODULE_27__.getDataTransfer; },
8371
+ /* harmony export */ getPropertyDescriptor: function() { return /* reexport safe */ _utils_js__WEBPACK_IMPORTED_MODULE_27__.getPropertyDescriptor; },
8372
+ /* harmony export */ getXPathByElement: function() { return /* reexport safe */ _selector_js__WEBPACK_IMPORTED_MODULE_24__.getXPathByElement; },
8366
8373
  /* harmony export */ hAlignElement: function() { return /* reexport safe */ _align_js__WEBPACK_IMPORTED_MODULE_0__.hAlignElement; },
8367
8374
  /* harmony export */ humanSizeToBytes: function() { return /* reexport safe */ _human_size_to_bytes_js__WEBPACK_IMPORTED_MODULE_17__.humanSizeToBytes; },
8368
- /* harmony export */ inView: function() { return /* reexport safe */ _scroll_into_view_js__WEBPACK_IMPORTED_MODULE_22__.inView; },
8375
+ /* harmony export */ inView: function() { return /* reexport safe */ _scroll_into_view_js__WEBPACK_IMPORTED_MODULE_23__.inView; },
8369
8376
  /* harmony export */ isAtom: function() { return /* reexport safe */ _extend_js__WEBPACK_IMPORTED_MODULE_14__.isAtom; },
8377
+ /* harmony export */ isUnsafeProtoKey: function() { return /* reexport safe */ _is_unsafe_proto_key_js__WEBPACK_IMPORTED_MODULE_18__.isUnsafeProtoKey; },
8370
8378
  /* harmony export */ keepNames: function() { return /* reexport safe */ _get_class_name_js__WEBPACK_IMPORTED_MODULE_16__.keepNames; },
8371
- /* harmony export */ keys: function() { return /* reexport safe */ _utils_js__WEBPACK_IMPORTED_MODULE_26__.keys; },
8372
- /* harmony export */ loadImage: function() { return /* reexport safe */ _utils_js__WEBPACK_IMPORTED_MODULE_26__.loadImage; },
8379
+ /* harmony export */ keys: function() { return /* reexport safe */ _utils_js__WEBPACK_IMPORTED_MODULE_27__.keys; },
8380
+ /* harmony export */ loadImage: function() { return /* reexport safe */ _utils_js__WEBPACK_IMPORTED_MODULE_27__.loadImage; },
8373
8381
  /* harmony export */ loadNext: function() { return /* reexport safe */ _append_script_js__WEBPACK_IMPORTED_MODULE_1__.loadNext; },
8374
8382
  /* harmony export */ loadNextStyle: function() { return /* reexport safe */ _append_script_js__WEBPACK_IMPORTED_MODULE_1__.loadNextStyle; },
8375
8383
  /* harmony export */ markAsAtomic: function() { return /* reexport safe */ _extend_js__WEBPACK_IMPORTED_MODULE_14__.markAsAtomic; },
8376
- /* harmony export */ markDeprecated: function() { return /* reexport safe */ _mark_deprecated_js__WEBPACK_IMPORTED_MODULE_18__.markDeprecated; },
8377
- /* harmony export */ markOwner: function() { return /* reexport safe */ _utils_js__WEBPACK_IMPORTED_MODULE_26__.markOwner; },
8378
- /* harmony export */ memorizeExec: function() { return /* reexport safe */ _utils_js__WEBPACK_IMPORTED_MODULE_26__.memorizeExec; },
8384
+ /* harmony export */ markDeprecated: function() { return /* reexport safe */ _mark_deprecated_js__WEBPACK_IMPORTED_MODULE_19__.markDeprecated; },
8385
+ /* harmony export */ markOwner: function() { return /* reexport safe */ _utils_js__WEBPACK_IMPORTED_MODULE_27__.markOwner; },
8386
+ /* harmony export */ memorizeExec: function() { return /* reexport safe */ _utils_js__WEBPACK_IMPORTED_MODULE_27__.memorizeExec; },
8379
8387
  /* harmony export */ options: function() { return /* reexport safe */ _error_index_js__WEBPACK_IMPORTED_MODULE_13__.options; },
8380
- /* harmony export */ parseQuery: function() { return /* reexport safe */ _parse_query_js__WEBPACK_IMPORTED_MODULE_19__.parseQuery; },
8381
- /* harmony export */ previewBox: function() { return /* reexport safe */ _print_js__WEBPACK_IMPORTED_MODULE_20__.previewBox; },
8382
- /* harmony export */ refs: function() { return /* reexport safe */ _selector_js__WEBPACK_IMPORTED_MODULE_23__.refs; },
8383
- /* harmony export */ reset: function() { return /* reexport safe */ _reset_js__WEBPACK_IMPORTED_MODULE_21__.reset; },
8384
- /* harmony export */ resolveElement: function() { return /* reexport safe */ _selector_js__WEBPACK_IMPORTED_MODULE_23__.resolveElement; },
8385
- /* harmony export */ scrollIntoViewIfNeeded: function() { return /* reexport safe */ _scroll_into_view_js__WEBPACK_IMPORTED_MODULE_22__.scrollIntoViewIfNeeded; },
8386
- /* harmony export */ set: function() { return /* reexport safe */ _set_js__WEBPACK_IMPORTED_MODULE_24__.set; }
8388
+ /* harmony export */ parseQuery: function() { return /* reexport safe */ _parse_query_js__WEBPACK_IMPORTED_MODULE_20__.parseQuery; },
8389
+ /* harmony export */ previewBox: function() { return /* reexport safe */ _print_js__WEBPACK_IMPORTED_MODULE_21__.previewBox; },
8390
+ /* harmony export */ refs: function() { return /* reexport safe */ _selector_js__WEBPACK_IMPORTED_MODULE_24__.refs; },
8391
+ /* harmony export */ reset: function() { return /* reexport safe */ _reset_js__WEBPACK_IMPORTED_MODULE_22__.reset; },
8392
+ /* harmony export */ resolveElement: function() { return /* reexport safe */ _selector_js__WEBPACK_IMPORTED_MODULE_24__.resolveElement; },
8393
+ /* harmony export */ scrollIntoViewIfNeeded: function() { return /* reexport safe */ _scroll_into_view_js__WEBPACK_IMPORTED_MODULE_23__.scrollIntoViewIfNeeded; },
8394
+ /* harmony export */ set: function() { return /* reexport safe */ _set_js__WEBPACK_IMPORTED_MODULE_25__.set; }
8387
8395
  /* harmony export */ });
8388
8396
  /* harmony import */ var _align_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(25726);
8389
8397
  /* harmony import */ var _append_script_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(63799);
@@ -8403,15 +8411,16 @@ const getClassName = (obj)=>{
8403
8411
  /* harmony import */ var _get_js__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(94643);
8404
8412
  /* harmony import */ var _get_class_name_js__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(80568);
8405
8413
  /* harmony import */ var _human_size_to_bytes_js__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(38420);
8406
- /* harmony import */ var _mark_deprecated_js__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(95942);
8407
- /* harmony import */ var _parse_query_js__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(82501);
8408
- /* harmony import */ var _print_js__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(11628);
8409
- /* harmony import */ var _reset_js__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(58844);
8410
- /* harmony import */ var _scroll_into_view_js__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(26395);
8411
- /* harmony import */ var _selector_js__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(76078);
8412
- /* harmony import */ var _set_js__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(3703);
8413
- /* harmony import */ var _stack_js__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(50535);
8414
- /* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(37790);
8414
+ /* harmony import */ var _is_unsafe_proto_key_js__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(69175);
8415
+ /* harmony import */ var _mark_deprecated_js__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(95942);
8416
+ /* harmony import */ var _parse_query_js__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(82501);
8417
+ /* harmony import */ var _print_js__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(11628);
8418
+ /* harmony import */ var _reset_js__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(58844);
8419
+ /* harmony import */ var _scroll_into_view_js__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(26395);
8420
+ /* harmony import */ var _selector_js__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(76078);
8421
+ /* harmony import */ var _set_js__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(3703);
8422
+ /* harmony import */ var _stack_js__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(50535);
8423
+ /* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(37790);
8415
8424
  /*!
8416
8425
  * Jodit Editor (https://xdsoft.net/jodit/)
8417
8426
  * Released under MIT see LICENSE.txt in the project root for license information.
@@ -8445,6 +8454,38 @@ const getClassName = (obj)=>{
8445
8454
 
8446
8455
 
8447
8456
 
8457
+
8458
+
8459
+
8460
+ /***/ }),
8461
+
8462
+ /***/ 69175:
8463
+ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
8464
+
8465
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
8466
+ /* harmony export */ UNSAFE_PROTO_KEYS: function() { return /* binding */ UNSAFE_PROTO_KEYS; },
8467
+ /* harmony export */ isUnsafeProtoKey: function() { return /* binding */ isUnsafeProtoKey; }
8468
+ /* harmony export */ });
8469
+ /*!
8470
+ * Jodit Editor (https://xdsoft.net/jodit/)
8471
+ * Released under MIT see LICENSE.txt in the project root for license information.
8472
+ * Copyright (c) 2013-2026 Valerii Chupurnov. All rights reserved. https://xdsoft.net
8473
+ */ /**
8474
+ * @module helpers/utils
8475
+ */ /**
8476
+ * Keys that must never be written from a (potentially untrusted) source —
8477
+ * assigning them while walking/merging an object can reach and mutate
8478
+ * `Object.prototype` (prototype pollution, CWE-1321).
8479
+ */ const UNSAFE_PROTO_KEYS = [
8480
+ '__proto__',
8481
+ 'constructor',
8482
+ 'prototype'
8483
+ ];
8484
+ /**
8485
+ * Check whether a key can be used to pollute the prototype chain.
8486
+ */ function isUnsafeProtoKey(key) {
8487
+ return UNSAFE_PROTO_KEYS.indexOf(key) !== -1;
8488
+ }
8448
8489
 
8449
8490
 
8450
8491
  /***/ }),
@@ -8917,6 +8958,7 @@ const $$temp = ()=>{
8917
8958
  /* harmony import */ var _checker_is_numeric_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(29807);
8918
8959
  /* harmony import */ var _checker_is_plain_object_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(72430);
8919
8960
  /* harmony import */ var _checker_is_string_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(70799);
8961
+ /* harmony import */ var _is_unsafe_proto_key_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(69175);
8920
8962
  /*!
8921
8963
  * Jodit Editor (https://xdsoft.net/jodit/)
8922
8964
  * Released under MIT see LICENSE.txt in the project root for license information.
@@ -8925,6 +8967,7 @@ const $$temp = ()=>{
8925
8967
 
8926
8968
 
8927
8969
 
8970
+
8928
8971
  /**
8929
8972
  * Safe access in tree object
8930
8973
  *
@@ -8942,6 +8985,9 @@ const $$temp = ()=>{
8942
8985
  return;
8943
8986
  }
8944
8987
  const parts = chain.split('.');
8988
+ if (parts.some(_is_unsafe_proto_key_js__WEBPACK_IMPORTED_MODULE_4__.isUnsafeProtoKey)) {
8989
+ return;
8990
+ }
8945
8991
  let result = obj, key = parts[0];
8946
8992
  for(let i = 0; i < parts.length - 1; i += 1){
8947
8993
  key = parts[i];
@@ -12302,8 +12348,9 @@ function toggleAttribute(jodit, value, elm, key, dry, mode) {
12302
12348
  /* harmony export */ });
12303
12349
  /* harmony import */ var _dom_index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(22732);
12304
12350
  /* harmony import */ var _helpers_utils_attr_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(29960);
12305
- /* harmony import */ var _list_wrap_list_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(82515);
12306
- /* harmony import */ var _wrap_unwrapped_text_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(6980);
12351
+ /* harmony import */ var _helpers_utils_css_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(41180);
12352
+ /* harmony import */ var _list_wrap_list_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(82515);
12353
+ /* harmony import */ var _wrap_unwrapped_text_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(6980);
12307
12354
  /*!
12308
12355
  * Jodit Editor (https://xdsoft.net/jodit/)
12309
12356
  * Released under MIT see LICENSE.txt in the project root for license information.
@@ -12312,12 +12359,29 @@ function toggleAttribute(jodit, value, elm, key, dry, mode) {
12312
12359
 
12313
12360
 
12314
12361
 
12362
+
12315
12363
  /**
12316
12364
  * Replaces the parent tag with the applicable one, or wraps the text and also replaces the tag
12317
12365
  * @private
12318
12366
  */ function wrap(commitStyle, font, jodit) {
12319
12367
  const wrapper = findOrCreateWrapper(commitStyle, font, jodit);
12320
- 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);
12368
+ if (commitStyle.elementIsList) {
12369
+ return (0,_list_wrap_list_js__WEBPACK_IMPORTED_MODULE_3__.wrapList)(commitStyle, wrapper, jodit);
12370
+ }
12371
+ const newWrapper = _dom_index_js__WEBPACK_IMPORTED_MODULE_0__.Dom.replace(wrapper, commitStyle.element, jodit.createInside, true);
12372
+ if (commitStyle.elementIsBlock) {
12373
+ // Inline font styles left over from pasted content visually override
12374
+ // the new block format — e.g. an h2 with `font-weight: normal;
12375
+ // font-size: 24px` does not look like a heading at all, so the
12376
+ // command seems to do nothing. See
12377
+ // https://github.com/xdan/jodit/issues/1063
12378
+ (0,_helpers_utils_css_js__WEBPACK_IMPORTED_MODULE_2__.css)(newWrapper, 'fontSize', null);
12379
+ (0,_helpers_utils_css_js__WEBPACK_IMPORTED_MODULE_2__.css)(newWrapper, 'fontWeight', null);
12380
+ if (!(0,_helpers_utils_attr_js__WEBPACK_IMPORTED_MODULE_1__.attr)(newWrapper, 'style')) {
12381
+ (0,_helpers_utils_attr_js__WEBPACK_IMPORTED_MODULE_1__.attr)(newWrapper, 'style', null);
12382
+ }
12383
+ }
12384
+ return newWrapper;
12321
12385
  }
12322
12386
  const WRAP_NODES = new Set([
12323
12387
  'td',
@@ -12338,7 +12402,7 @@ const WRAP_NODES = new Set([
12338
12402
  if (box) {
12339
12403
  return box;
12340
12404
  }
12341
- return (0,_wrap_unwrapped_text_js__WEBPACK_IMPORTED_MODULE_3__.wrapUnwrappedText)(commitStyle, font, jodit);
12405
+ return (0,_wrap_unwrapped_text_js__WEBPACK_IMPORTED_MODULE_4__.wrapUnwrappedText)(commitStyle, font, jodit);
12342
12406
  }
12343
12407
  (0,_helpers_utils_attr_js__WEBPACK_IMPORTED_MODULE_1__.attr)(font, 'size', null);
12344
12408
  return font;
@@ -16332,8 +16396,11 @@ class Popup extends _group_group_js__WEBPACK_IMPORTED_MODULE_7__.UIGroup {
16332
16396
  /**
16333
16397
  * Calculate static bound for point
16334
16398
  */ getKeepBound(getBound) {
16399
+ var _a;
16335
16400
  const oldBound = getBound();
16336
- const elmUnderCursor = this.od.elementFromPoint(oldBound.left, oldBound.top);
16401
+ // Inside Shadow DOM `document.elementFromPoint` returns the shadow
16402
+ // host, so the lookup must start from the shadow root
16403
+ const elmUnderCursor = ((_a = this.j.o.shadowRoot) !== null && _a !== void 0 ? _a : this.od).elementFromPoint(oldBound.left, oldBound.top);
16337
16404
  if (!elmUnderCursor) {
16338
16405
  return getBound;
16339
16406
  }
@@ -18118,6 +18185,17 @@ let Jodit = Jodit_1 = class Jodit extends _modules_index_js__WEBPACK_IMPORTED_MO
18118
18185
  const init = ()=>{
18119
18186
  if (opt.enableDragAndDropFileToEditor && opt.uploader && (opt.uploader.url || opt.uploader.insertImageAsBase64URI)) {
18120
18187
  this.uploader.bind(this.editor);
18188
+ } else if (!opt.enableDragAndDropFileToEditor) {
18189
+ // Without a bound uploader nobody cancels a file drop, and
18190
+ // Firefox inserts the dropped image natively — the option
18191
+ // must mean "do nothing". See
18192
+ // https://github.com/xdan/jodit/issues/1077
18193
+ this.e.on(editor, 'drop', (e)=>{
18194
+ var _a, _b;
18195
+ if ((_b = (_a = e.dataTransfer) === null || _a === void 0 ? void 0 : _a.files) === null || _b === void 0 ? void 0 : _b.length) {
18196
+ e.preventDefault();
18197
+ }
18198
+ });
18121
18199
  }
18122
18200
  // in initEditor - the editor could change
18123
18201
  if (!this.__elementToPlace.get(this.editor)) {
@@ -27719,12 +27797,17 @@ const TABS = {
27719
27797
  self.j.alert('The name should not be empty');
27720
27798
  return false;
27721
27799
  }
27800
+ self.j.e.fire('afterImageEditorSave', data, name);
27722
27801
  self.onSave(name, data, self.hide, (e)=>{
27723
27802
  self.j.alert(e.message);
27724
27803
  });
27725
27804
  });
27726
27805
  break;
27727
27806
  case self.buttons.save:
27807
+ // Notify listeners that a crop/resize was applied,
27808
+ // passing the action box (action + box dimensions).
27809
+ // See https://github.com/xdan/jodit/issues/820
27810
+ self.j.e.fire('afterImageEditorSave', data);
27728
27811
  self.onSave(undefined, data, self.hide, (e)=>{
27729
27812
  self.j.alert(e.message);
27730
27813
  });
@@ -29535,13 +29618,35 @@ let ToolbarContent = class ToolbarContent extends _core_ui_button_index_js__WEBP
29535
29618
  return 'ToolbarContent';
29536
29619
  }
29537
29620
  /** @override */ update() {
29538
- const content = this.control.getContent(this.j, this);
29621
+ var _a, _b, _c;
29622
+ const { control } = this;
29623
+ const content = control.getContent(this.j, this);
29539
29624
  if ((0,_core_helpers_index_js__WEBPACK_IMPORTED_MODULE_2__.isString)(content) || content.parentNode !== this.container) {
29540
29625
  _core_dom_index_js__WEBPACK_IMPORTED_MODULE_1__.Dom.detach(this.container);
29541
29626
  this.container.appendChild((0,_core_helpers_index_js__WEBPACK_IMPORTED_MODULE_2__.isString)(content) ? this.j.create.fromHTML(content) : content);
29542
29627
  }
29628
+ // Content controls never went through the ToolbarButton status
29629
+ // calculation, so `isDisabled`/`isActive`/`update` declared on the
29630
+ // control were silently ignored (e.g. the FileBrowser Upload button
29631
+ // ignored the backend permissions). See
29632
+ // https://github.com/xdan/jodit/issues/1094
29633
+ this.state.disabled = Boolean((_a = control.isDisabled) === null || _a === void 0 ? void 0 : _a.call(control, this.j, this));
29634
+ this.state.activated = Boolean((_b = control.isActive) === null || _b === void 0 ? void 0 : _b.call(control, this.j, this));
29635
+ (_c = control.update) === null || _c === void 0 ? void 0 : _c.call(control, this.j, this);
29636
+ // The first update() runs before the state watchers are attached, so
29637
+ // apply the calculated state explicitly (the calls are idempotent)
29638
+ this.onChangeDisabled();
29639
+ this.onChangeActivated();
29543
29640
  super.update();
29544
29641
  }
29642
+ /**
29643
+ * The content is arbitrary HTML — propagate the disabled state to the
29644
+ * nested form controls (e.g. the file input of the Upload button),
29645
+ * otherwise they stay interactive.
29646
+ */ onChangeDisabled() {
29647
+ super.onChangeDisabled();
29648
+ 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));
29649
+ }
29545
29650
  /** @override */ createContainer() {
29546
29651
  return this.j.c.span(this.componentName);
29547
29652
  }
@@ -30243,6 +30348,15 @@ function processOldBrowserDrag(self, cData, handlerSuccess, handlerError, onFina
30243
30348
  if (!fileList.length) {
30244
30349
  return Promise.reject((0,_core_helpers_index_js__WEBPACK_IMPORTED_MODULE_0__.error)('Need files'));
30245
30350
  }
30351
+ // Client-side validation hook — returning `false` aborts the upload.
30352
+ // See https://github.com/xdan/jodit/issues/1329
30353
+ if ((0,_core_helpers_index_js__WEBPACK_IMPORTED_MODULE_0__.isFunction)(o.beforeUpload)) {
30354
+ if (o.beforeUpload.call(uploader, fileList) === false) {
30355
+ const err = (0,_core_helpers_index_js__WEBPACK_IMPORTED_MODULE_0__.error)('Upload canceled');
30356
+ (handlerError || o.defaultHandlerError).call(uploader, err);
30357
+ return Promise.reject(err);
30358
+ }
30359
+ }
30246
30360
  const promises = [];
30247
30361
  if (o.insertImageAsBase64URI) {
30248
30362
  readImagesWithReader(fileList, o.imagesExtensions, promises, uploader, handlerSuccess, o.defaultHandlerSuccess);
@@ -31155,8 +31269,11 @@ const ns = 'addnewline';
31155
31269
  }
31156
31270
  }
31157
31271
  __onMouseMove(e) {
31272
+ var _a;
31158
31273
  const editor = this.j;
31159
- let currentElement = editor.ed.elementFromPoint(e.clientX, e.clientY);
31274
+ // Inside Shadow DOM `document.elementFromPoint` returns the shadow
31275
+ // host, so the lookup must start from the shadow root
31276
+ let currentElement = ((_a = editor.o.shadowRoot) !== null && _a !== void 0 ? _a : editor.ed).elementFromPoint(e.clientX, e.clientY);
31160
31277
  if (!_modules_index_js__WEBPACK_IMPORTED_MODULE_3__.Dom.isHTMLElement(currentElement) || !_modules_index_js__WEBPACK_IMPORTED_MODULE_3__.Dom.isOrContains(editor.editor, currentElement)) {
31161
31278
  return;
31162
31279
  }
@@ -31384,7 +31501,13 @@ function _async_to_generator(fn) {
31384
31501
  return new _ui_ui_ai_assistant_js__WEBPACK_IMPORTED_MODULE_6__.UiAiAssistant(jodit, {
31385
31502
  onInsertAfter (html) {
31386
31503
  jodit.s.focus();
31387
- jodit.s.setCursorAfter(jodit.s.current());
31504
+ // `current()` returns a node of the selection START, so with
31505
+ // several selected paragraphs the result landed after the
31506
+ // first one — collapse the range to the END of the selection
31507
+ // instead. See https://github.com/xdan/jodit/issues/1263
31508
+ const range = jodit.s.range;
31509
+ range.collapse(false);
31510
+ jodit.s.selectRange(range);
31388
31511
  jodit.s.insertHTML(html);
31389
31512
  __dialog.close();
31390
31513
  },
@@ -32064,10 +32187,14 @@ class backspace extends _core_plugin_index_js__WEBPACK_IMPORTED_MODULE_4__.Plugi
32064
32187
  return false;
32065
32188
  }
32066
32189
  (0,_core_selection_helpers_index_js__WEBPACK_IMPORTED_MODULE_5__.moveNodeInsideStart)(jodit, fakeNode, backspace);
32067
- if (_cases_index_js__WEBPACK_IMPORTED_MODULE_8__.cases.some((func)=>{
32190
+ const disabled = jodit.o.delete.disableCases;
32191
+ if (_cases_index_js__WEBPACK_IMPORTED_MODULE_8__.casesMap.some(([key, func])=>{
32192
+ if (disabled && disabled.has(key)) {
32193
+ return;
32194
+ }
32068
32195
  if ((0,_core_helpers_checker_is_function_js__WEBPACK_IMPORTED_MODULE_3__.isFunction)(func) && func(jodit, fakeNode, backspace, mode)) {
32069
32196
  if (!_core_constants_js__WEBPACK_IMPORTED_MODULE_0__.IS_PROD) {
32070
- console.info('Remove case:', func.name);
32197
+ console.info('Remove case:', key);
32071
32198
  }
32072
32199
  return true;
32073
32200
  }
@@ -32154,13 +32281,26 @@ _core_global_js__WEBPACK_IMPORTED_MODULE_2__.pluginSystem.add('backspace', backs
32154
32281
  jodit.s.setCursorBefore(fakeNode);
32155
32282
  return true;
32156
32283
  }
32157
- if (sibling && (checkMoveListContent(jodit, mainClosestBox, sibling, backspace) || moveContentAndRemoveEmpty(jodit, mainClosestBox, sibling, backspace))) {
32284
+ if (sibling && (checkMoveListContent(jodit, mainClosestBox, sibling, backspace) || moveContentAndRemoveEmpty(jodit, mainClosestBox, resolveTableSibling(sibling, backspace), backspace))) {
32158
32285
  jodit.s.setCursorBefore(fakeNode);
32159
32286
  return true;
32160
32287
  }
32161
32288
  }
32162
32289
  return false;
32163
32290
  }
32291
+ /**
32292
+ * Content cannot be merged into the `<table>` element itself — it would land
32293
+ * between the table sections (after `</tbody>`), which is invalid HTML and
32294
+ * gets foster-parented out of the table on the next parse. Merge into the
32295
+ * edge cell instead. See https://github.com/xdan/jodit/issues/1064
32296
+ * @private
32297
+ */ function resolveTableSibling(sibling, backspace) {
32298
+ if (!_core_dom_dom_js__WEBPACK_IMPORTED_MODULE_1__.Dom.isTag(sibling, 'table')) {
32299
+ return sibling;
32300
+ }
32301
+ const cells = sibling.querySelectorAll('td,th');
32302
+ return cells.length ? cells[backspace ? cells.length - 1 : 0] : null;
32303
+ }
32164
32304
  function checkMoveListContent(jodit, mainClosestBox, sibling, backspace) {
32165
32305
  // Process UL/LI/OL cases
32166
32306
  const siblingIsList = _core_dom_dom_js__WEBPACK_IMPORTED_MODULE_1__.Dom.isTag(sibling, _core_constants_js__WEBPACK_IMPORTED_MODULE_0__.LIST_TAGS);
@@ -32716,8 +32856,9 @@ function checkRepeatRemoveCharAction(backspace, sibling, fakeNode, mode, removed
32716
32856
  /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
32717
32857
 
32718
32858
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
32719
- /* harmony export */ cases: function() { return /* binding */ cases; }
32859
+ /* harmony export */ casesMap: function() { return /* binding */ casesMap; }
32720
32860
  /* harmony export */ });
32861
+ /* unused harmony export cases */
32721
32862
  /* harmony import */ var _check_join_neighbors_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(62845);
32722
32863
  /* harmony import */ var _check_join_two_lists_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(91748);
32723
32864
  /* harmony import */ var _check_remove_char_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(73792);
@@ -32731,8 +32872,6 @@ function checkRepeatRemoveCharAction(backspace, sibling, fakeNode, mode, removed
32731
32872
  * Jodit Editor (https://xdsoft.net/jodit/)
32732
32873
  * Released under MIT see LICENSE.txt in the project root for license information.
32733
32874
  * Copyright (c) 2013-2026 Valerii Chupurnov. All rights reserved. https://xdsoft.net
32734
- */ /**
32735
- * @module plugins/backspace
32736
32875
  */
32737
32876
 
32738
32877
 
@@ -32743,18 +32882,52 @@ function checkRepeatRemoveCharAction(backspace, sibling, fakeNode, mode, removed
32743
32882
 
32744
32883
 
32745
32884
  /**
32885
+ * Ordered delete/backspace cases with stable keys. The first one returning
32886
+ * `true` wins. The keys are stable across minified builds (function names are
32887
+ * mangled by terser) so they can be referenced by `delete.disableCases`.
32746
32888
  * @private
32747
- */ const cases = [
32748
- _check_remove_unbreakable_element_js__WEBPACK_IMPORTED_MODULE_6__.checkRemoveUnbreakableElement,
32749
- _check_remove_content_not_editable_js__WEBPACK_IMPORTED_MODULE_3__.checkRemoveContentNotEditable,
32750
- _check_remove_char_js__WEBPACK_IMPORTED_MODULE_2__.checkRemoveChar,
32751
- _check_table_cell_js__WEBPACK_IMPORTED_MODULE_7__.checkTableCell,
32752
- _check_remove_empty_parent_js__WEBPACK_IMPORTED_MODULE_5__.checkRemoveEmptyParent,
32753
- _check_remove_empty_neighbor_js__WEBPACK_IMPORTED_MODULE_4__.checkRemoveEmptyNeighbor,
32754
- _check_join_two_lists_js__WEBPACK_IMPORTED_MODULE_1__.checkJoinTwoLists,
32755
- _check_join_neighbors_js__WEBPACK_IMPORTED_MODULE_0__.checkJoinNeighbors,
32756
- _check_unwrap_first_list_item_js__WEBPACK_IMPORTED_MODULE_8__.checkUnwrapFirstListItem
32889
+ */ const casesMap = [
32890
+ [
32891
+ 'remove-unbreakable',
32892
+ _check_remove_unbreakable_element_js__WEBPACK_IMPORTED_MODULE_6__.checkRemoveUnbreakableElement
32893
+ ],
32894
+ [
32895
+ 'remove-not-editable',
32896
+ _check_remove_content_not_editable_js__WEBPACK_IMPORTED_MODULE_3__.checkRemoveContentNotEditable
32897
+ ],
32898
+ [
32899
+ 'remove-char',
32900
+ _check_remove_char_js__WEBPACK_IMPORTED_MODULE_2__.checkRemoveChar
32901
+ ],
32902
+ [
32903
+ 'table-cell',
32904
+ _check_table_cell_js__WEBPACK_IMPORTED_MODULE_7__.checkTableCell
32905
+ ],
32906
+ [
32907
+ 'remove-empty-parent',
32908
+ _check_remove_empty_parent_js__WEBPACK_IMPORTED_MODULE_5__.checkRemoveEmptyParent
32909
+ ],
32910
+ [
32911
+ 'remove-empty-neighbor',
32912
+ _check_remove_empty_neighbor_js__WEBPACK_IMPORTED_MODULE_4__.checkRemoveEmptyNeighbor
32913
+ ],
32914
+ [
32915
+ 'join-two-lists',
32916
+ _check_join_two_lists_js__WEBPACK_IMPORTED_MODULE_1__.checkJoinTwoLists
32917
+ ],
32918
+ [
32919
+ 'join-neighbors',
32920
+ _check_join_neighbors_js__WEBPACK_IMPORTED_MODULE_0__.checkJoinNeighbors
32921
+ ],
32922
+ [
32923
+ 'unwrap-first-list-item',
32924
+ _check_unwrap_first_list_item_js__WEBPACK_IMPORTED_MODULE_8__.checkUnwrapFirstListItem
32925
+ ]
32757
32926
  ];
32927
+ /**
32928
+ * @private
32929
+ * @deprecated Use `casesMap` to also get the stable case keys.
32930
+ */ const cases = casesMap.map(([, fn])=>fn);
32758
32931
 
32759
32932
 
32760
32933
  /***/ }),
@@ -33290,6 +33463,18 @@ _core_ui_icon_js__WEBPACK_IMPORTED_MODULE_4__.Icon.set('class-span', _class_span
33290
33463
  _core_dom_dom_js__WEBPACK_IMPORTED_MODULE_1__.Dom.safeRemove(iframe);
33291
33464
  return false;
33292
33465
  }
33466
+ /**
33467
+ * Collapse a value that holds only a single empty block (e.g.
33468
+ * `<p><br></p>` left after deleting all content) to an empty string —
33469
+ * opt-in via `cleanHTML.collapseEmptyValueToEmptyString`. See #1149
33470
+ */ onAfterGetValueFromEditor(data) {
33471
+ if (!this.j.o.cleanHTML.collapseEmptyValueToEmptyString) {
33472
+ return;
33473
+ }
33474
+ if (/^<([a-z][a-z0-9]*)\b[^>]*>(?:<br\/?>)?<\/\1>$/i.test(data.value.trim())) {
33475
+ data.value = '';
33476
+ }
33477
+ }
33293
33478
  onSafeHTML(sandBox) {
33294
33479
  const sanitizer = this.j.o.cleanHTML.sanitizer;
33295
33480
  if (sanitizer) {
@@ -33332,6 +33517,9 @@ __decorate([
33332
33517
  __decorate([
33333
33518
  (0,_core_decorators_index_js__WEBPACK_IMPORTED_MODULE_0__.watch)(':beforeSetNativeEditorValue')
33334
33519
  ], cleanHtml.prototype, "onBeforeSetNativeEditorValue", null);
33520
+ __decorate([
33521
+ (0,_core_decorators_index_js__WEBPACK_IMPORTED_MODULE_0__.watch)(':afterGetValueFromEditor')
33522
+ ], cleanHtml.prototype, "onAfterGetValueFromEditor", null);
33335
33523
  __decorate([
33336
33524
  (0,_core_decorators_index_js__WEBPACK_IMPORTED_MODULE_0__.watch)(':safeHTML')
33337
33525
  ], cleanHtml.prototype, "onSafeHTML", null);
@@ -33357,6 +33545,7 @@ _config_js__WEBPACK_IMPORTED_MODULE_1__.Config.prototype.cleanHTML = {
33357
33545
  timeout: 300,
33358
33546
  removeEmptyElements: true,
33359
33547
  fillEmptyParagraph: true,
33548
+ collapseEmptyValueToEmptyString: false,
33360
33549
  replaceNBSP: true,
33361
33550
  replaceOldTags: {
33362
33551
  i: 'em',
@@ -34360,26 +34549,35 @@ _core_ui_icon_js__WEBPACK_IMPORTED_MODULE_0__.Icon.set('copy', _icons_copy_svg_j
34360
34549
  group: 'color'
34361
34550
  });
34362
34551
  const callback = (command, second, third)=>{
34552
+ var _a;
34363
34553
  const colorHEX = (0,_core_helpers_index_js__WEBPACK_IMPORTED_MODULE_1__.normalizeColor)(third);
34364
- switch(command){
34365
- case 'background':
34366
- editor.s.commitStyle({
34367
- attributes: {
34368
- style: {
34369
- backgroundColor: !colorHEX ? '' : colorHEX
34370
- }
34371
- }
34372
- });
34373
- break;
34374
- case 'forecolor':
34554
+ const value = !colorHEX ? '' : colorHEX;
34555
+ const style = command === 'background' ? {
34556
+ backgroundColor: value
34557
+ } : {
34558
+ color: value
34559
+ };
34560
+ // Cells selected with the `select-cells` plugin drop or collapse the
34561
+ // native range, so `commitStyle` would paint a pending caret format
34562
+ // outside the table instead of the selection the user sees. Apply the
34563
+ // style to the content of every selected cell instead. See #1250
34564
+ const selectedCells = editor.getInstance('Table', editor.o).getAllSelectedCells();
34565
+ if (selectedCells.length && editor.s.isCollapsed()) {
34566
+ selectedCells.forEach((cell)=>{
34567
+ editor.s.select(cell, true);
34375
34568
  editor.s.commitStyle({
34376
34569
  attributes: {
34377
- style: {
34378
- color: !colorHEX ? '' : colorHEX
34379
- }
34570
+ style
34380
34571
  }
34381
34572
  });
34382
- break;
34573
+ });
34574
+ (_a = editor.s.sel) === null || _a === void 0 ? void 0 : _a.removeAllRanges();
34575
+ } else {
34576
+ editor.s.commitStyle({
34577
+ attributes: {
34578
+ style
34579
+ }
34580
+ });
34383
34581
  }
34384
34582
  editor.synchronizeValues();
34385
34583
  return false;
@@ -36738,6 +36936,25 @@ _config_js__WEBPACK_IMPORTED_MODULE_4__.Config.prototype.controls.font = _object
36738
36936
  return v.toLowerCase().replace(/['"]+/g, '').replace(/[^a-z0-9-]+/g, ',');
36739
36937
  }
36740
36938
  },
36939
+ // When no font is explicitly set, the computed font-family equals the
36940
+ // editor's own default (e.g. `-apple-system, …`). Return '' so the
36941
+ // button shows the `Default` list entry instead of that raw stack.
36942
+ // See #1370
36943
+ value: (editor)=>{
36944
+ const current = editor.s.current();
36945
+ if (!current) {
36946
+ return;
36947
+ }
36948
+ 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);
36949
+ if (!box) {
36950
+ return;
36951
+ }
36952
+ const value = (0,_core_helpers_utils_css_js__WEBPACK_IMPORTED_MODULE_2__.css)(box, 'font-family').toString();
36953
+ if (value === (0,_core_helpers_utils_css_js__WEBPACK_IMPORTED_MODULE_2__.css)(editor.editor, 'font-family').toString()) {
36954
+ return '';
36955
+ }
36956
+ return value;
36957
+ },
36741
36958
  tooltip: 'Font family'
36742
36959
  });
36743
36960
 
@@ -40311,10 +40528,30 @@ const align = {
40311
40528
  this.j.async.setTimeout(()=>{
40312
40529
  const sel = this.j.s.sel;
40313
40530
  if (sel && !sel.isCollapsed) {
40314
- this.showPopup(()=>this.j.s.range.getBoundingClientRect(), 'selection');
40531
+ this.showPopup(()=>this.__selectionBound(), 'selection');
40315
40532
  }
40316
40533
  }, 1);
40317
40534
  }
40535
+ /**
40536
+ * The selection rect comes from the editor document — in iframe mode its
40537
+ * coordinates are iframe-local, while the popup lives in the host
40538
+ * document, so the iframe offset must be added. See
40539
+ * https://github.com/xdan/jodit/issues/1058
40540
+ */ __selectionBound() {
40541
+ const rect = this.j.s.range.getBoundingClientRect();
40542
+ let { left, top } = rect;
40543
+ if (this.j.iframe) {
40544
+ const offset = (0,_core_helpers_index_js__WEBPACK_IMPORTED_MODULE_3__.position)(this.j.iframe, this.j, true);
40545
+ left += offset.left;
40546
+ top += offset.top;
40547
+ }
40548
+ return {
40549
+ left,
40550
+ top,
40551
+ width: rect.width,
40552
+ height: rect.height
40553
+ };
40554
+ }
40318
40555
  onSelectionStart() {
40319
40556
  this.snapRange = this.j.s.range.cloneRange();
40320
40557
  }
@@ -40346,7 +40583,7 @@ const align = {
40346
40583
  if (!node) {
40347
40584
  return;
40348
40585
  }
40349
- this.showPopup(()=>range.getBoundingClientRect(), type);
40586
+ this.showPopup(()=>this.__selectionBound(), type);
40350
40587
  }
40351
40588
  /**
40352
40589
  * In not collapsed selection - only one image
@@ -41364,6 +41601,7 @@ _config_js__WEBPACK_IMPORTED_MODULE_2__.Config.prototype.link = {
41364
41601
  noFollowCheckbox: true,
41365
41602
  openInNewTabCheckbox: true,
41366
41603
  openInNewTabCheckboxDefaultChecked: false,
41604
+ ariaLabelInput: false,
41367
41605
  modeClassName: 'input',
41368
41606
  selectMultipleClassName: true,
41369
41607
  preventReadOnlyNavigation: true,
@@ -41533,7 +41771,7 @@ _config_js__WEBPACK_IMPORTED_MODULE_2__.Config.prototype.controls.link = {
41533
41771
  const currentElement = current;
41534
41772
  const isImageContent = _core_dom_index_js__WEBPACK_IMPORTED_MODULE_1__.Dom.isImage(currentElement);
41535
41773
  let { content_input } = elements;
41536
- const { className_input } = elements, { className_select } = elements;
41774
+ const { className_input } = elements, { className_select } = elements, { aria_label_input } = elements;
41537
41775
  if (!content_input) {
41538
41776
  content_input = jodit.c.element('input', {
41539
41777
  type: 'hidden',
@@ -41556,6 +41794,9 @@ _config_js__WEBPACK_IMPORTED_MODULE_2__.Config.prototype.controls.link = {
41556
41794
  if (!isImageContent && current) {
41557
41795
  content_input.value = getSelectionText();
41558
41796
  }
41797
+ if (aria_label_input) {
41798
+ aria_label_input.value = link ? (0,_core_helpers_index_js__WEBPACK_IMPORTED_MODULE_3__.attr)(link, 'aria-label') || '' : '';
41799
+ }
41559
41800
  if (link) {
41560
41801
  url_input.value = (0,_core_helpers_index_js__WEBPACK_IMPORTED_MODULE_3__.attr)(link, 'href') || '';
41561
41802
  if (modeClassName) {
@@ -41643,6 +41884,10 @@ _config_js__WEBPACK_IMPORTED_MODULE_2__.Config.prototype.controls.link = {
41643
41884
  }
41644
41885
  (0,_core_helpers_index_js__WEBPACK_IMPORTED_MODULE_3__.attr)(a, 'rel', relParts.length ? relParts.join(' ') : null);
41645
41886
  }
41887
+ if (aria_label_input) {
41888
+ const ariaLabel = aria_label_input.value.trim();
41889
+ (0,_core_helpers_index_js__WEBPACK_IMPORTED_MODULE_3__.attr)(a, 'aria-label', ariaLabel || null);
41890
+ }
41646
41891
  jodit.e.fire('applyLink', jodit, a, form);
41647
41892
  });
41648
41893
  jodit.synchronizeValues();
@@ -41781,7 +42026,7 @@ function writeImage(a, content_input, textWasChanged, url_input) {
41781
42026
  */
41782
42027
 
41783
42028
  const formTemplate = (editor)=>{
41784
- const { openInNewTabCheckbox, noFollowCheckbox, modeClassName, selectSizeClassName, selectMultipleClassName, selectOptionsClassName } = editor.o.link;
42029
+ const { openInNewTabCheckbox, noFollowCheckbox, ariaLabelInput, modeClassName, selectSizeClassName, selectMultipleClassName, selectOptionsClassName } = editor.o.link;
41785
42030
  return new _core_ui_form_index_js__WEBPACK_IMPORTED_MODULE_1__.UIForm(editor, [
41786
42031
  new _core_ui_form_index_js__WEBPACK_IMPORTED_MODULE_1__.UIBlock(editor, [
41787
42032
  new _core_ui_form_index_js__WEBPACK_IMPORTED_MODULE_1__.UIInput(editor, {
@@ -41793,6 +42038,13 @@ const formTemplate = (editor)=>{
41793
42038
  required: true
41794
42039
  })
41795
42040
  ]),
42041
+ ariaLabelInput ? new _core_ui_form_index_js__WEBPACK_IMPORTED_MODULE_1__.UIBlock(editor, [
42042
+ new _core_ui_form_index_js__WEBPACK_IMPORTED_MODULE_1__.UIInput(editor, {
42043
+ name: 'ariaLabel',
42044
+ ref: 'aria_label_input',
42045
+ label: 'Aria label'
42046
+ })
42047
+ ]) : null,
41796
42048
  new _core_ui_form_index_js__WEBPACK_IMPORTED_MODULE_1__.UIBlock(editor, [
41797
42049
  new _core_ui_form_index_js__WEBPACK_IMPORTED_MODULE_1__.UIInput(editor, {
41798
42050
  name: 'content',
@@ -42681,6 +42933,7 @@ _config_js__WEBPACK_IMPORTED_MODULE_1__.Config.prototype.controls.paste = {
42681
42933
  tooltip: 'Paste from clipboard',
42682
42934
  exec (_0, _1, _2) {
42683
42935
  return _async_to_generator(function*(editor, _, { control }) {
42936
+ var _a;
42684
42937
  if (control.name === psKey) {
42685
42938
  editor.execCommand('showPasteStorage');
42686
42939
  return;
@@ -42691,7 +42944,13 @@ _config_js__WEBPACK_IMPORTED_MODULE_1__.Config.prototype.controls.paste = {
42691
42944
  try {
42692
42945
  const items = yield navigator.clipboard.read();
42693
42946
  if (items && items.length) {
42694
- const textBlob = yield items[0].getType(_core_constants_js__WEBPACK_IMPORTED_MODULE_0__.TEXT_PLAIN);
42947
+ const item = items[0];
42948
+ // Prefer the HTML flavor so the button behaves like the
42949
+ // Ctrl+V shortcut (which receives text/html from the
42950
+ // native paste event). See
42951
+ // https://github.com/xdan/jodit/issues/1061
42952
+ 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;
42953
+ const textBlob = yield item.getType(type);
42695
42954
  text = yield new Response(textBlob).text();
42696
42955
  }
42697
42956
  error = false;
@@ -45378,20 +45637,30 @@ let UISearch = class UISearch extends _core_ui_index_js__WEBPACK_IMPORTED_MODULE
45378
45637
  return false;
45379
45638
  }).on(this.queryInput, 'input', ()=>{
45380
45639
  this.setMod('empty-query', !(0,_core_helpers_index_js__WEBPACK_IMPORTED_MODULE_3__.trim)(this.queryInput.value).length);
45381
- }).on(this.queryInput, 'keydown', this.j.async.debounce((e)=>_async_to_generator(function*() {
45382
- switch(e.key){
45383
- case _core_constants_js__WEBPACK_IMPORTED_MODULE_0__.KEY_ENTER:
45384
- e.preventDefault();
45385
- e.stopImmediatePropagation();
45386
- if (yield jodit.e.fire('searchNext')) {
45387
- _this.close();
45388
- }
45389
- break;
45390
- default:
45391
- jodit.e.fire(_this, 'needUpdateCounters');
45392
- break;
45640
+ }).on(this.queryInput, 'keydown', (()=>{
45641
+ const debounced = this.j.async.debounce((e)=>_async_to_generator(function*() {
45642
+ switch(e.key){
45643
+ case _core_constants_js__WEBPACK_IMPORTED_MODULE_0__.KEY_ENTER:
45644
+ if (yield jodit.e.fire('searchNext')) {
45645
+ _this.close();
45646
+ }
45647
+ break;
45648
+ default:
45649
+ jodit.e.fire(_this, 'needUpdateCounters');
45650
+ break;
45651
+ }
45652
+ })(), this.j.defaultTimeout);
45653
+ return (e)=>{
45654
+ // Must be canceled synchronously — inside the debounced
45655
+ // handler the browser has already submitted the parent
45656
+ // form. See https://github.com/xdan/jodit/issues/918
45657
+ if (e.key === _core_constants_js__WEBPACK_IMPORTED_MODULE_0__.KEY_ENTER) {
45658
+ e.preventDefault();
45659
+ e.stopImmediatePropagation();
45393
45660
  }
45394
- })(), this.j.defaultTimeout));
45661
+ debounced(e);
45662
+ };
45663
+ })());
45395
45664
  }
45396
45665
  };
45397
45666
  __decorate([
@@ -45501,15 +45770,37 @@ class selectCells extends _core_plugin_index_js__WEBPACK_IMPORTED_MODULE_5__.Plu
45501
45770
  }
45502
45771
  /**
45503
45772
  * Mouse click inside the table
45504
- */ onStartSelection(cell) {
45773
+ */ onStartSelection(cell, event) {
45774
+ var _a;
45505
45775
  if (this.j.o.readonly) {
45506
45776
  return;
45507
45777
  }
45778
+ const table = _core_dom_dom_js__WEBPACK_IMPORTED_MODULE_2__.Dom.closest(cell, 'table', this.j.editor);
45779
+ // Ctrl/Cmd + click toggles a single cell into the existing selection
45780
+ // instead of resetting it — non-contiguous multi-cell selection.
45781
+ // See https://github.com/xdan/jodit/issues/1163
45782
+ 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)) {
45783
+ if (this.__tableModule.getAllSelectedCells().includes(cell)) {
45784
+ this.__tableModule.removeSelection(cell);
45785
+ } else {
45786
+ if (!cell.firstChild) {
45787
+ cell.appendChild(this.j.createInside.element('br'));
45788
+ }
45789
+ this.__tableModule.addSelection(cell);
45790
+ }
45791
+ this.__selectedCell = cell;
45792
+ (_a = this.j.s.sel) === null || _a === void 0 ? void 0 : _a.removeAllRanges();
45793
+ if (this.__tableModule.getAllSelectedCells().length) {
45794
+ this.j.e.fire('showPopup', table, ()=>(0,_core_helpers_index_js__WEBPACK_IMPORTED_MODULE_4__.position)(cell, this.j), 'cells');
45795
+ } else {
45796
+ this.j.e.fire('hidePopup', 'cells');
45797
+ }
45798
+ return false;
45799
+ }
45508
45800
  this.unselectCells();
45509
45801
  if (cell === this.j.editor) {
45510
45802
  return;
45511
45803
  }
45512
- const table = _core_dom_dom_js__WEBPACK_IMPORTED_MODULE_2__.Dom.closest(cell, 'table', this.j.editor);
45513
45804
  if (!cell || !table) {
45514
45805
  return;
45515
45806
  }
@@ -45538,14 +45829,16 @@ class selectCells extends _core_plugin_index_js__WEBPACK_IMPORTED_MODULE_5__.Plu
45538
45829
  /**
45539
45830
  * Mouse move inside the table
45540
45831
  */ __onMove(table, e) {
45541
- var _a;
45832
+ var _a, _b;
45542
45833
  if (this.j.o.readonly && !this.j.isLocked) {
45543
45834
  return;
45544
45835
  }
45545
45836
  if (this.j.isLockedNotBy(key)) {
45546
45837
  return;
45547
45838
  }
45548
- const node = this.j.ed.elementFromPoint(e.clientX, e.clientY);
45839
+ // Inside Shadow DOM `document.elementFromPoint` returns the shadow
45840
+ // host, so the lookup must start from the shadow root
45841
+ const node = ((_a = this.j.o.shadowRoot) !== null && _a !== void 0 ? _a : this.j.ed).elementFromPoint(e.clientX, e.clientY);
45549
45842
  if (!node) {
45550
45843
  return;
45551
45844
  }
@@ -45571,7 +45864,7 @@ class selectCells extends _core_plugin_index_js__WEBPACK_IMPORTED_MODULE_5__.Plu
45571
45864
  }
45572
45865
  const cellsCount = this.__tableModule.getAllSelectedCells().length;
45573
45866
  if (cellsCount > 1) {
45574
- (_a = this.j.s.sel) === null || _a === void 0 ? void 0 : _a.removeAllRanges();
45867
+ (_b = this.j.s.sel) === null || _b === void 0 ? void 0 : _b.removeAllRanges();
45575
45868
  }
45576
45869
  this.j.e.fire('hidePopup');
45577
45870
  e.stopPropagation();
@@ -45601,13 +45894,15 @@ class selectCells extends _core_plugin_index_js__WEBPACK_IMPORTED_MODULE_5__.Plu
45601
45894
  /**
45602
45895
  * Stop a selection process
45603
45896
  */ __onStopSelection(table, e) {
45604
- var _a, _b;
45897
+ var _a, _b, _c;
45605
45898
  if (!this.__selectedCell) {
45606
45899
  return;
45607
45900
  }
45608
45901
  this.__isSelectionMode = false;
45609
45902
  this.j.unlock();
45610
- const node = this.j.ed.elementFromPoint(e.clientX, e.clientY);
45903
+ // Inside Shadow DOM `document.elementFromPoint` returns the shadow
45904
+ // host, so the lookup must start from the shadow root
45905
+ const node = ((_a = this.j.o.shadowRoot) !== null && _a !== void 0 ? _a : this.j.ed).elementFromPoint(e.clientX, e.clientY);
45611
45906
  if (!node) {
45612
45907
  return;
45613
45908
  }
@@ -45626,7 +45921,7 @@ class selectCells extends _core_plugin_index_js__WEBPACK_IMPORTED_MODULE_5__.Plu
45626
45921
  cell,
45627
45922
  this.__selectedCell
45628
45923
  ]), box = this.__tableModule.formalMatrix(table);
45629
- 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]];
45924
+ 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]];
45630
45925
  // `getSelectedBound` keeps its `Infinity` sentinel when none of the
45631
45926
  // selected cells belong to this table's matrix — e.g. after a
45632
45927
  // drag-and-drop that moved/removed the cells, leaving a stale anchor and
@@ -46284,7 +46579,7 @@ _config_js__WEBPACK_IMPORTED_MODULE_2__.Config.prototype.sourceEditorNativeOptio
46284
46579
  */ highlightActiveLine: true
46285
46580
  };
46286
46581
  _config_js__WEBPACK_IMPORTED_MODULE_2__.Config.prototype.sourceEditorCDNUrlsJS = [
46287
- 'https://cdnjs.cloudflare.com/ajax/libs/ace/1.4.2/ace.js'
46582
+ 'https://cdnjs.cloudflare.com/ajax/libs/ace/1.43.3/ace.js'
46288
46583
  ];
46289
46584
  _config_js__WEBPACK_IMPORTED_MODULE_2__.Config.prototype.beautifyHTMLCDNUrlsJS = [
46290
46585
  'https://cdnjs.cloudflare.com/ajax/libs/js-beautify/1.14.4/beautify.min.js',
@@ -51288,10 +51583,9 @@ class JoditPro extends jodit_esm_index__WEBPACK_IMPORTED_MODULE_4__.Jodit {
51288
51583
 
51289
51584
  /***/ }),
51290
51585
 
51291
- /***/ 44864:
51586
+ /***/ 49934:
51292
51587
  /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
51293
51588
 
51294
- __webpack_require__.r(__webpack_exports__);
51295
51589
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
51296
51590
  /* harmony export */ autocomplete: function() { return /* binding */ autocomplete; }
51297
51591
  /* harmony export */ });
@@ -51868,7 +52162,7 @@ AutocompleteItem = (0,_swc_helpers_ts_decorate__WEBPACK_IMPORTED_MODULE_1__.__de
51868
52162
  /* harmony import */ var jodit_esm_plugins_all__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(25187);
51869
52163
  /* harmony import */ var jodit_pro_plugins_paste_from_word_paste_from_word__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(58858);
51870
52164
  /* harmony import */ var jodit_pro_plugins_license_license__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(21246);
51871
- /* harmony import */ var jodit_pro_plugins_autocomplete_autocomplete__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(44864);
52165
+ /* harmony import */ var jodit_pro_plugins_autocomplete_autocomplete_impl__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(49934);
51872
52166
  /* harmony import */ var jodit_esm_plugins_speech_recognize_speech_recognize__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(3115);
51873
52167
  /*!
51874
52168
  * Jodit Editor PRO (https://xdsoft.net/jodit/)
@@ -51877,6 +52171,9 @@ AutocompleteItem = (0,_swc_helpers_ts_decorate__WEBPACK_IMPORTED_MODULE_1__.__de
51877
52171
  */
51878
52172
 
51879
52173
 
52174
+ // `.impl` (not the standalone entry) — the entry additionally carries the
52175
+ // standalone stylesheet that must stay OUT of the main bundle so webpack
52176
+ // emits plugins/autocomplete/autocomplete.min.css. See #1308
51880
52177
 
51881
52178
 
51882
52179