jodit-pro 4.6.18 → 4.6.21

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 (312) hide show
  1. package/es2015/jodit.css +1 -1
  2. package/es2015/jodit.fat.min.js +2 -2
  3. package/es2015/jodit.js +147 -50
  4. package/es2015/jodit.min.js +2 -2
  5. package/es2015/plugins/autocomplete/autocomplete.js +1 -1
  6. package/es2015/plugins/autocomplete/autocomplete.min.js +1 -1
  7. package/es2015/plugins/backup/backup.css +1 -1
  8. package/es2015/plugins/backup/backup.js +1 -1
  9. package/es2015/plugins/backup/backup.min.js +1 -1
  10. package/es2015/plugins/button-generator/button-generator.css +1 -1
  11. package/es2015/plugins/button-generator/button-generator.js +1 -1
  12. package/es2015/plugins/button-generator/button-generator.min.js +1 -1
  13. package/es2015/plugins/change-case/change-case.js +1 -1
  14. package/es2015/plugins/change-case/change-case.min.js +1 -1
  15. package/es2015/plugins/color-picker/color-picker.css +1 -1
  16. package/es2015/plugins/color-picker/color-picker.js +1 -1
  17. package/es2015/plugins/color-picker/color-picker.min.js +1 -1
  18. package/es2015/plugins/emoji/emoji.css +1 -1
  19. package/es2015/plugins/emoji/emoji.js +1 -1
  20. package/es2015/plugins/emoji/emoji.min.js +1 -1
  21. package/es2015/plugins/export-docs/export-docs.js +1 -1
  22. package/es2015/plugins/export-docs/export-docs.min.js +1 -1
  23. package/es2015/plugins/finder/finder.css +1 -1
  24. package/es2015/plugins/finder/finder.js +1 -1
  25. package/es2015/plugins/finder/finder.min.js +1 -1
  26. package/es2015/plugins/google-maps/google-maps.css +1 -1
  27. package/es2015/plugins/google-maps/google-maps.js +1 -1
  28. package/es2015/plugins/google-maps/google-maps.min.js +1 -1
  29. package/es2015/plugins/google-search/google-search.js +1 -1
  30. package/es2015/plugins/google-search/google-search.min.js +1 -1
  31. package/es2015/plugins/highlight-signature/highlight-signature.js +1 -1
  32. package/es2015/plugins/highlight-signature/highlight-signature.min.js +1 -1
  33. package/es2015/plugins/iframe-editor/iframe-editor.css +1 -1
  34. package/es2015/plugins/iframe-editor/iframe-editor.js +1 -1
  35. package/es2015/plugins/iframe-editor/iframe-editor.min.js +1 -1
  36. package/es2015/plugins/keyboard/keyboard.css +1 -1
  37. package/es2015/plugins/keyboard/keyboard.js +1 -1
  38. package/es2015/plugins/keyboard/keyboard.min.js +1 -1
  39. package/es2015/plugins/mobile-view/mobile-view.js +1 -1
  40. package/es2015/plugins/mobile-view/mobile-view.min.js +1 -1
  41. package/es2015/plugins/page-break/page-break.js +1 -1
  42. package/es2015/plugins/page-break/page-break.min.js +1 -1
  43. package/es2015/plugins/paste-code/paste-code.css +1 -1
  44. package/es2015/plugins/paste-code/paste-code.js +1 -1
  45. package/es2015/plugins/paste-code/paste-code.min.js +1 -1
  46. package/es2015/plugins/paste-from-word/paste-from-word.js +1 -1
  47. package/es2015/plugins/paste-from-word/paste-from-word.min.js +1 -1
  48. package/es2015/plugins/show-blocks/show-blocks.js +1 -1
  49. package/es2015/plugins/show-blocks/show-blocks.min.js +1 -1
  50. package/es2015/plugins/todo-list/todo-list.css +1 -1
  51. package/es2015/plugins/todo-list/todo-list.js +1 -1
  52. package/es2015/plugins/todo-list/todo-list.min.js +1 -1
  53. package/es2015/plugins/translate/translate.css +1 -1
  54. package/es2015/plugins/translate/translate.js +1 -1
  55. package/es2015/plugins/translate/translate.min.js +1 -1
  56. package/es2015/plugins/tune-block/tune-block.css +1 -1
  57. package/es2015/plugins/tune-block/tune-block.js +1 -1
  58. package/es2015/plugins/tune-block/tune-block.min.js +1 -1
  59. package/es2018/jodit.css +1 -1
  60. package/es2018/jodit.fat.min.js +2 -2
  61. package/es2018/jodit.js +148 -50
  62. package/es2018/jodit.min.js +2 -2
  63. package/es2018/plugins/autocomplete/autocomplete.js +1 -1
  64. package/es2018/plugins/autocomplete/autocomplete.min.js +1 -1
  65. package/es2018/plugins/backup/backup.css +1 -1
  66. package/es2018/plugins/backup/backup.js +1 -1
  67. package/es2018/plugins/backup/backup.min.js +1 -1
  68. package/es2018/plugins/button-generator/button-generator.css +1 -1
  69. package/es2018/plugins/button-generator/button-generator.js +1 -1
  70. package/es2018/plugins/button-generator/button-generator.min.js +1 -1
  71. package/es2018/plugins/change-case/change-case.js +1 -1
  72. package/es2018/plugins/change-case/change-case.min.js +1 -1
  73. package/es2018/plugins/color-picker/color-picker.css +1 -1
  74. package/es2018/plugins/color-picker/color-picker.js +1 -1
  75. package/es2018/plugins/color-picker/color-picker.min.js +1 -1
  76. package/es2018/plugins/emoji/emoji.css +1 -1
  77. package/es2018/plugins/emoji/emoji.js +1 -1
  78. package/es2018/plugins/emoji/emoji.min.js +1 -1
  79. package/es2018/plugins/export-docs/export-docs.js +1 -1
  80. package/es2018/plugins/export-docs/export-docs.min.js +1 -1
  81. package/es2018/plugins/finder/finder.css +1 -1
  82. package/es2018/plugins/finder/finder.js +1 -1
  83. package/es2018/plugins/finder/finder.min.js +1 -1
  84. package/es2018/plugins/google-maps/google-maps.css +1 -1
  85. package/es2018/plugins/google-maps/google-maps.js +1 -1
  86. package/es2018/plugins/google-maps/google-maps.min.js +1 -1
  87. package/es2018/plugins/google-search/google-search.js +1 -1
  88. package/es2018/plugins/google-search/google-search.min.js +1 -1
  89. package/es2018/plugins/highlight-signature/highlight-signature.js +1 -1
  90. package/es2018/plugins/highlight-signature/highlight-signature.min.js +1 -1
  91. package/es2018/plugins/iframe-editor/iframe-editor.css +1 -1
  92. package/es2018/plugins/iframe-editor/iframe-editor.js +1 -1
  93. package/es2018/plugins/iframe-editor/iframe-editor.min.js +1 -1
  94. package/es2018/plugins/keyboard/keyboard.css +1 -1
  95. package/es2018/plugins/keyboard/keyboard.js +1 -1
  96. package/es2018/plugins/keyboard/keyboard.min.js +1 -1
  97. package/es2018/plugins/mobile-view/mobile-view.js +1 -1
  98. package/es2018/plugins/mobile-view/mobile-view.min.js +1 -1
  99. package/es2018/plugins/page-break/page-break.js +1 -1
  100. package/es2018/plugins/page-break/page-break.min.js +1 -1
  101. package/es2018/plugins/paste-code/paste-code.css +1 -1
  102. package/es2018/plugins/paste-code/paste-code.js +1 -1
  103. package/es2018/plugins/paste-code/paste-code.min.js +1 -1
  104. package/es2018/plugins/paste-from-word/paste-from-word.js +1 -1
  105. package/es2018/plugins/paste-from-word/paste-from-word.min.js +1 -1
  106. package/es2018/plugins/show-blocks/show-blocks.js +1 -1
  107. package/es2018/plugins/show-blocks/show-blocks.min.js +1 -1
  108. package/es2018/plugins/todo-list/todo-list.css +1 -1
  109. package/es2018/plugins/todo-list/todo-list.js +1 -1
  110. package/es2018/plugins/todo-list/todo-list.min.js +1 -1
  111. package/es2018/plugins/translate/translate.css +1 -1
  112. package/es2018/plugins/translate/translate.js +1 -1
  113. package/es2018/plugins/translate/translate.min.js +1 -1
  114. package/es2018/plugins/tune-block/tune-block.css +1 -1
  115. package/es2018/plugins/tune-block/tune-block.js +1 -1
  116. package/es2018/plugins/tune-block/tune-block.min.js +1 -1
  117. package/es2021/jodit.css +1 -1
  118. package/es2021/jodit.fat.min.js +2 -2
  119. package/es2021/jodit.js +148 -50
  120. package/es2021/jodit.min.js +2 -2
  121. package/es2021/plugins/autocomplete/autocomplete.js +1 -1
  122. package/es2021/plugins/autocomplete/autocomplete.min.js +1 -1
  123. package/es2021/plugins/backup/backup.css +1 -1
  124. package/es2021/plugins/backup/backup.js +1 -1
  125. package/es2021/plugins/backup/backup.min.js +1 -1
  126. package/es2021/plugins/button-generator/button-generator.css +1 -1
  127. package/es2021/plugins/button-generator/button-generator.js +1 -1
  128. package/es2021/plugins/button-generator/button-generator.min.js +1 -1
  129. package/es2021/plugins/change-case/change-case.js +1 -1
  130. package/es2021/plugins/change-case/change-case.min.js +1 -1
  131. package/es2021/plugins/color-picker/color-picker.css +1 -1
  132. package/es2021/plugins/color-picker/color-picker.js +1 -1
  133. package/es2021/plugins/color-picker/color-picker.min.js +1 -1
  134. package/es2021/plugins/emoji/emoji.css +1 -1
  135. package/es2021/plugins/emoji/emoji.js +1 -1
  136. package/es2021/plugins/emoji/emoji.min.js +1 -1
  137. package/es2021/plugins/export-docs/export-docs.js +1 -1
  138. package/es2021/plugins/export-docs/export-docs.min.js +1 -1
  139. package/es2021/plugins/finder/finder.css +1 -1
  140. package/es2021/plugins/finder/finder.js +1 -1
  141. package/es2021/plugins/finder/finder.min.js +1 -1
  142. package/es2021/plugins/google-maps/google-maps.css +1 -1
  143. package/es2021/plugins/google-maps/google-maps.js +1 -1
  144. package/es2021/plugins/google-maps/google-maps.min.js +1 -1
  145. package/es2021/plugins/google-search/google-search.js +1 -1
  146. package/es2021/plugins/google-search/google-search.min.js +1 -1
  147. package/es2021/plugins/highlight-signature/highlight-signature.js +1 -1
  148. package/es2021/plugins/highlight-signature/highlight-signature.min.js +1 -1
  149. package/es2021/plugins/iframe-editor/iframe-editor.css +1 -1
  150. package/es2021/plugins/iframe-editor/iframe-editor.js +1 -1
  151. package/es2021/plugins/iframe-editor/iframe-editor.min.js +1 -1
  152. package/es2021/plugins/keyboard/keyboard.css +1 -1
  153. package/es2021/plugins/keyboard/keyboard.js +1 -1
  154. package/es2021/plugins/keyboard/keyboard.min.js +1 -1
  155. package/es2021/plugins/mobile-view/mobile-view.js +1 -1
  156. package/es2021/plugins/mobile-view/mobile-view.min.js +1 -1
  157. package/es2021/plugins/page-break/page-break.js +1 -1
  158. package/es2021/plugins/page-break/page-break.min.js +1 -1
  159. package/es2021/plugins/paste-code/paste-code.css +1 -1
  160. package/es2021/plugins/paste-code/paste-code.js +1 -1
  161. package/es2021/plugins/paste-code/paste-code.min.js +1 -1
  162. package/es2021/plugins/paste-from-word/paste-from-word.js +1 -1
  163. package/es2021/plugins/paste-from-word/paste-from-word.min.js +1 -1
  164. package/es2021/plugins/show-blocks/show-blocks.js +1 -1
  165. package/es2021/plugins/show-blocks/show-blocks.min.js +1 -1
  166. package/es2021/plugins/todo-list/todo-list.css +1 -1
  167. package/es2021/plugins/todo-list/todo-list.js +1 -1
  168. package/es2021/plugins/todo-list/todo-list.min.js +1 -1
  169. package/es2021/plugins/translate/translate.css +1 -1
  170. package/es2021/plugins/translate/translate.js +1 -1
  171. package/es2021/plugins/translate/translate.min.js +1 -1
  172. package/es2021/plugins/tune-block/tune-block.css +1 -1
  173. package/es2021/plugins/tune-block/tune-block.js +1 -1
  174. package/es2021/plugins/tune-block/tune-block.min.js +1 -1
  175. package/es2021.en/jodit.css +1 -1
  176. package/es2021.en/jodit.fat.min.js +2 -2
  177. package/es2021.en/jodit.js +148 -50
  178. package/es2021.en/jodit.min.js +2 -2
  179. package/es2021.en/plugins/autocomplete/autocomplete.js +1 -1
  180. package/es2021.en/plugins/autocomplete/autocomplete.min.js +1 -1
  181. package/es2021.en/plugins/backup/backup.css +1 -1
  182. package/es2021.en/plugins/backup/backup.js +1 -1
  183. package/es2021.en/plugins/backup/backup.min.js +1 -1
  184. package/es2021.en/plugins/button-generator/button-generator.css +1 -1
  185. package/es2021.en/plugins/button-generator/button-generator.js +1 -1
  186. package/es2021.en/plugins/button-generator/button-generator.min.js +1 -1
  187. package/es2021.en/plugins/change-case/change-case.js +1 -1
  188. package/es2021.en/plugins/change-case/change-case.min.js +1 -1
  189. package/es2021.en/plugins/color-picker/color-picker.css +1 -1
  190. package/es2021.en/plugins/color-picker/color-picker.js +1 -1
  191. package/es2021.en/plugins/color-picker/color-picker.min.js +1 -1
  192. package/es2021.en/plugins/emoji/emoji.css +1 -1
  193. package/es2021.en/plugins/emoji/emoji.js +1 -1
  194. package/es2021.en/plugins/emoji/emoji.min.js +1 -1
  195. package/es2021.en/plugins/export-docs/export-docs.js +1 -1
  196. package/es2021.en/plugins/export-docs/export-docs.min.js +1 -1
  197. package/es2021.en/plugins/finder/finder.css +1 -1
  198. package/es2021.en/plugins/finder/finder.js +1 -1
  199. package/es2021.en/plugins/finder/finder.min.js +1 -1
  200. package/es2021.en/plugins/google-maps/google-maps.css +1 -1
  201. package/es2021.en/plugins/google-maps/google-maps.js +1 -1
  202. package/es2021.en/plugins/google-maps/google-maps.min.js +1 -1
  203. package/es2021.en/plugins/google-search/google-search.js +1 -1
  204. package/es2021.en/plugins/google-search/google-search.min.js +1 -1
  205. package/es2021.en/plugins/highlight-signature/highlight-signature.js +1 -1
  206. package/es2021.en/plugins/highlight-signature/highlight-signature.min.js +1 -1
  207. package/es2021.en/plugins/iframe-editor/iframe-editor.css +1 -1
  208. package/es2021.en/plugins/iframe-editor/iframe-editor.js +1 -1
  209. package/es2021.en/plugins/iframe-editor/iframe-editor.min.js +1 -1
  210. package/es2021.en/plugins/keyboard/keyboard.css +1 -1
  211. package/es2021.en/plugins/keyboard/keyboard.js +1 -1
  212. package/es2021.en/plugins/keyboard/keyboard.min.js +1 -1
  213. package/es2021.en/plugins/mobile-view/mobile-view.js +1 -1
  214. package/es2021.en/plugins/mobile-view/mobile-view.min.js +1 -1
  215. package/es2021.en/plugins/page-break/page-break.js +1 -1
  216. package/es2021.en/plugins/page-break/page-break.min.js +1 -1
  217. package/es2021.en/plugins/paste-code/paste-code.css +1 -1
  218. package/es2021.en/plugins/paste-code/paste-code.js +1 -1
  219. package/es2021.en/plugins/paste-code/paste-code.min.js +1 -1
  220. package/es2021.en/plugins/paste-from-word/paste-from-word.js +1 -1
  221. package/es2021.en/plugins/paste-from-word/paste-from-word.min.js +1 -1
  222. package/es2021.en/plugins/show-blocks/show-blocks.js +1 -1
  223. package/es2021.en/plugins/show-blocks/show-blocks.min.js +1 -1
  224. package/es2021.en/plugins/todo-list/todo-list.css +1 -1
  225. package/es2021.en/plugins/todo-list/todo-list.js +1 -1
  226. package/es2021.en/plugins/todo-list/todo-list.min.js +1 -1
  227. package/es2021.en/plugins/translate/translate.css +1 -1
  228. package/es2021.en/plugins/translate/translate.js +1 -1
  229. package/es2021.en/plugins/translate/translate.min.js +1 -1
  230. package/es2021.en/plugins/tune-block/tune-block.css +1 -1
  231. package/es2021.en/plugins/tune-block/tune-block.js +1 -1
  232. package/es2021.en/plugins/tune-block/tune-block.min.js +1 -1
  233. package/es5/jodit.css +2 -2
  234. package/es5/jodit.fat.min.js +2 -2
  235. package/es5/jodit.js +154 -51
  236. package/es5/jodit.min.css +2 -2
  237. package/es5/jodit.min.js +2 -2
  238. package/es5/plugins/autocomplete/autocomplete.js +1 -1
  239. package/es5/plugins/autocomplete/autocomplete.min.js +1 -1
  240. package/es5/plugins/backup/backup.css +1 -1
  241. package/es5/plugins/backup/backup.js +1 -1
  242. package/es5/plugins/backup/backup.min.js +1 -1
  243. package/es5/plugins/button-generator/button-generator.css +1 -1
  244. package/es5/plugins/button-generator/button-generator.js +1 -1
  245. package/es5/plugins/button-generator/button-generator.min.js +1 -1
  246. package/es5/plugins/change-case/change-case.js +1 -1
  247. package/es5/plugins/change-case/change-case.min.js +1 -1
  248. package/es5/plugins/color-picker/color-picker.css +1 -1
  249. package/es5/plugins/color-picker/color-picker.js +1 -1
  250. package/es5/plugins/color-picker/color-picker.min.js +1 -1
  251. package/es5/plugins/emoji/emoji.css +1 -1
  252. package/es5/plugins/emoji/emoji.js +1 -1
  253. package/es5/plugins/emoji/emoji.min.js +1 -1
  254. package/es5/plugins/export-docs/export-docs.js +1 -1
  255. package/es5/plugins/export-docs/export-docs.min.js +1 -1
  256. package/es5/plugins/finder/finder.css +1 -1
  257. package/es5/plugins/finder/finder.js +1 -1
  258. package/es5/plugins/finder/finder.min.js +1 -1
  259. package/es5/plugins/google-maps/google-maps.css +1 -1
  260. package/es5/plugins/google-maps/google-maps.js +1 -1
  261. package/es5/plugins/google-maps/google-maps.min.js +1 -1
  262. package/es5/plugins/google-search/google-search.js +1 -1
  263. package/es5/plugins/google-search/google-search.min.js +1 -1
  264. package/es5/plugins/highlight-signature/highlight-signature.js +1 -1
  265. package/es5/plugins/highlight-signature/highlight-signature.min.js +1 -1
  266. package/es5/plugins/iframe-editor/iframe-editor.css +1 -1
  267. package/es5/plugins/iframe-editor/iframe-editor.js +1 -1
  268. package/es5/plugins/iframe-editor/iframe-editor.min.js +1 -1
  269. package/es5/plugins/keyboard/keyboard.css +1 -1
  270. package/es5/plugins/keyboard/keyboard.js +1 -1
  271. package/es5/plugins/keyboard/keyboard.min.js +1 -1
  272. package/es5/plugins/mobile-view/mobile-view.js +1 -1
  273. package/es5/plugins/mobile-view/mobile-view.min.js +1 -1
  274. package/es5/plugins/page-break/page-break.js +1 -1
  275. package/es5/plugins/page-break/page-break.min.js +1 -1
  276. package/es5/plugins/paste-code/paste-code.css +1 -1
  277. package/es5/plugins/paste-code/paste-code.js +1 -1
  278. package/es5/plugins/paste-code/paste-code.min.js +1 -1
  279. package/es5/plugins/paste-from-word/paste-from-word.js +1 -1
  280. package/es5/plugins/paste-from-word/paste-from-word.min.js +1 -1
  281. package/es5/plugins/show-blocks/show-blocks.js +1 -1
  282. package/es5/plugins/show-blocks/show-blocks.min.js +1 -1
  283. package/es5/plugins/todo-list/todo-list.css +1 -1
  284. package/es5/plugins/todo-list/todo-list.js +1 -1
  285. package/es5/plugins/todo-list/todo-list.min.js +1 -1
  286. package/es5/plugins/translate/translate.css +1 -1
  287. package/es5/plugins/translate/translate.js +1 -1
  288. package/es5/plugins/translate/translate.min.js +1 -1
  289. package/es5/plugins/tune-block/tune-block.css +1 -1
  290. package/es5/plugins/tune-block/tune-block.js +1 -1
  291. package/es5/plugins/tune-block/tune-block.min.js +1 -1
  292. package/esm/config.d.ts +2 -2
  293. package/esm/plugins/autocomplete/autocomplete.d.ts +5 -15
  294. package/esm/plugins/autocomplete/autocomplete.js +1 -1
  295. package/esm/plugins/autocomplete/config.d.ts +17 -0
  296. package/esm/plugins/autocomplete/config.js +6 -0
  297. package/esm/plugins/autocomplete/interface.d.ts +6 -6
  298. package/esm/plugins/autocomplete/ui/autocomplete.d.ts +2 -1
  299. package/esm/plugins/autocomplete/ui/autocomplete.js +1 -1
  300. package/esm/plugins/autocomplete/ui/item.d.ts +5 -1
  301. package/esm/plugins/autocomplete/ui/item.js +1 -1
  302. package/esm/plugins/license/helpers/helpers.d.ts +1 -0
  303. package/esm/plugins/license/helpers/helpers.js +1 -1
  304. package/esm/plugins/license/license.js +1 -1
  305. package/package.json +1 -1
  306. package/types/config.d.ts +2 -2
  307. package/types/plugins/autocomplete/autocomplete.d.ts +5 -15
  308. package/types/plugins/autocomplete/config.d.ts +17 -0
  309. package/types/plugins/autocomplete/interface.d.ts +6 -6
  310. package/types/plugins/autocomplete/ui/autocomplete.d.ts +2 -1
  311. package/types/plugins/autocomplete/ui/item.d.ts +5 -1
  312. package/types/plugins/license/helpers/helpers.d.ts +1 -0
@@ -0,0 +1,17 @@
1
+ /*!
2
+ * Jodit Editor PRO (https://xdsoft.net/jodit/)
3
+ * See LICENSE.md in the project root for license information.
4
+ * Copyright (c) 2013-2025 Valeriy Chupurnov. All rights reserved. https://xdsoft.net/jodit/pro/
5
+ */
6
+ import type { AutoCompleteSource, IAutoCompleteItem } from "./interface";
7
+ declare module 'jodit/esm/config' {
8
+ interface Config {
9
+ autocomplete: {
10
+ maxItems: number;
11
+ isMatchedQuery: (query: string, value: string) => boolean;
12
+ itemRenderer: <T = any>(item: IAutoCompleteItem<T>) => string | HTMLElement;
13
+ insertValueRenderer: <T = any>(item: IAutoCompleteItem<T>) => string | HTMLElement;
14
+ sources: AutoCompleteSource[];
15
+ };
16
+ }
17
+ }
@@ -0,0 +1,6 @@
1
+ /*!
2
+ * Jodit Editor PRO (https://xdsoft.net/jodit/)
3
+ * See LICENSE.md in the project root for license information.
4
+ * Copyright (c) 2013-2025 Valeriy Chupurnov. All rights reserved. https://xdsoft.net/jodit/pro/
5
+ */
6
+ import{Config as e}from"jodit/esm/config.js";e.prototype.autocomplete={sources:[],maxItems:50,isMatchedQuery:(e,r)=>0===r.toLowerCase().indexOf(e.toLowerCase()),itemRenderer:e=>{var r;return null!==(r=e.title)&&void 0!==r?r:e.value},insertValueRenderer:e=>e.value+"&nbsp;"};
@@ -10,10 +10,10 @@ export interface IAutoCompleteItem<T = IDictionary> {
10
10
  itemRenderer?: (item: T) => string | HTMLElement;
11
11
  insertValueRenderer?: (item: T) => string | HTMLElement;
12
12
  }
13
- export type AutoCompleteCallback<T> = (query: string) => CanPromise<T[]>;
14
- export interface IAutoCompleteCustomFeed<T> {
15
- feed: CanPromise<string[]> | CanPromise<IAutoCompleteItem[]> | AutoCompleteCallback<T>;
16
- itemRenderer?: IAutoCompleteItem<T>['itemRenderer'];
17
- insertValueRenderer?: IAutoCompleteItem<T>['insertValueRenderer'];
13
+ export type AutoCompleteCallback = (query: string) => CanPromise<IAutoCompleteItem[]>;
14
+ export interface IAutoCompleteCustomFeed {
15
+ feed: CanPromise<string[]> | CanPromise<IAutoCompleteItem[]> | AutoCompleteCallback;
16
+ itemRenderer?: IAutoCompleteItem<IAutoCompleteItem>['itemRenderer'];
17
+ insertValueRenderer?: IAutoCompleteItem<IAutoCompleteItem>['insertValueRenderer'];
18
18
  }
19
- export type AutoCompleteSource<T = IAutoCompleteItem> = IAutoCompleteCustomFeed<T>['feed'] | IAutoCompleteCustomFeed<T>;
19
+ export type AutoCompleteSource = IAutoCompleteCustomFeed['feed'] | IAutoCompleteCustomFeed;
@@ -10,8 +10,9 @@ export declare class Autocomplete extends UIGroup {
10
10
  /** @override */
11
11
  className(): string;
12
12
  elements: AutocompleteItem[];
13
- private currentSelection;
13
+ currentSelection: number;
14
14
  private onChangeSelection;
15
+ private __previousList;
15
16
  build(list: IAutoCompleteItem[]): void;
16
17
  selectNext(): void;
17
18
  selectPrevious(): void;
@@ -3,4 +3,4 @@
3
3
  * See LICENSE.md in the project root for license information.
4
4
  * Copyright (c) 2013-2025 Valeriy Chupurnov. All rights reserved. https://xdsoft.net/jodit/pro/
5
5
  */
6
- var e=this&&this.__decorate||function(e,t,n,o){var r,i=arguments.length,c=i<3?t:null===o?o=Object.getOwnPropertyDescriptor(t,n):o;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)c=Reflect.decorate(e,t,n,o);else for(var s=e.length-1;s>=0;s--)(r=e[s])&&(c=(i<3?r(c):i>3?r(t,n,c):r(t,n))||c);return i>3&&c&&Object.defineProperty(t,n,c),c};import{AutocompleteItem as t}from"./item.js";import{component as n,watch as o}from"jodit/esm/core/decorators/index.js";import{UIGroup as r}from"jodit/esm/core/ui/group/group.js";let i=class Autocomplete extends r{constructor(){super(...arguments),this.elements=[],this.currentSelection=-1}className(){return"Autocomplete"}onChangeSelection(e,t){var n;null!=t&&(null===(n=this.elements[t])||void 0===n||n.setMod("active",!1)),this.elements[this.currentSelection].setMod("active",!0),this.elements[this.currentSelection].container.scrollIntoView(!1)}build(e){this.clear(),e.forEach((e,n)=>{const o=new t(this.jodit,e);this.j.e.on(o.container,"mousedown touchstart",e=>{e.preventDefault()}).on(o.container,"click",()=>{this.currentSelection=n,this.select()}),this.append(o)}),this.currentSelection=0,this.onChangeSelection()}selectNext(){this.currentSelection+1<=this.elements.length-1?this.currentSelection+=1:this.currentSelection=0}selectPrevious(){this.currentSelection-1>=0?this.currentSelection-=1:this.currentSelection=this.elements.length-1}select(){this.j.e.fire("select.autocomplete",this.elements[this.currentSelection].item)}};e([o("currentSelection")],i.prototype,"onChangeSelection",null),i=e([n],i);export{i as Autocomplete};
6
+ var e=this&&this.__decorate||function(e,t,i,n){var s,o=arguments.length,r=o<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(e,t,i,n);else for(var l=e.length-1;l>=0;l--)(s=e[l])&&(r=(o<3?s(r):o>3?s(t,i,r):s(t,i))||r);return o>3&&r&&Object.defineProperty(t,i,r),r};import{AutocompleteItem as t}from"./item.js";import{component as i,watch as n}from"jodit/esm/core/decorators/index.js";import{UIGroup as s}from"jodit/esm/core/ui/group/group.js";let o=class Autocomplete extends s{constructor(){super(...arguments),this.elements=[],this.currentSelection=-1,this.__previousList=[]}className(){return"Autocomplete"}onChangeSelection(){var e,t;this.elements.forEach(e=>e.setMod("active",!1)),null===(e=this.elements[this.currentSelection])||void 0===e||e.setMod("active",!0),null===(t=this.elements[this.currentSelection])||void 0===t||t.container.scrollIntoView(!1)}build(e){var i;const n=null===(i=this.elements[this.currentSelection])||void 0===i?void 0:i.item.value,s=[];let o=-1;for(let i=0;i<e.length;i+=1){if(o+=1,null!=this.__previousList[i]&&e[i].value===this.__previousList[i].value)continue;this.elements[o]&&(s.push(this.elements[o]),o+=1);const n=new t(this.jodit,e[i],t=>{this.currentSelection=e.findIndex(e=>e.value===t),this.select()});this.append(n,o)}for(let e=o+1;e<this.elements.length;e+=1)s.push(this.elements[e]);s.forEach(e=>{this.remove(e),e.destruct()});const r=this.currentSelection;this.currentSelection=Math.max(0,e.findIndex(e=>e.value===n)),r===this.currentSelection&&this.onChangeSelection(),this.__previousList=[...e]}selectNext(){this.currentSelection+1<=this.elements.length-1?this.currentSelection+=1:this.currentSelection=0}selectPrevious(){this.currentSelection-1>=0?this.currentSelection-=1:this.currentSelection=this.elements.length-1}select(){this.j.e.fire("select.autocomplete",this.elements[this.currentSelection].item)}};e([n("currentSelection")],o.prototype,"onChangeSelection",null),o=e([i],o);export{o as Autocomplete};
@@ -7,7 +7,11 @@ import { UIElement } from "jodit/esm/core/ui/element";
7
7
  import type { IAutoCompleteItem } from "../interface";
8
8
  export declare class AutocompleteItem extends UIElement {
9
9
  item: IAutoCompleteItem;
10
+ private onClick;
11
+ readonly value: string;
10
12
  /** @override */
11
13
  className(): string;
12
- constructor(jodit: AutocompleteItem['jodit'], item: IAutoCompleteItem);
14
+ constructor(jodit: AutocompleteItem['jodit'], item: IAutoCompleteItem, onClick: (value: string) => void);
15
+ protected onClickPrevent(e: MouseEvent): void;
16
+ protected onClickHandler(): void;
13
17
  }
@@ -3,4 +3,4 @@
3
3
  * See LICENSE.md in the project root for license information.
4
4
  * Copyright (c) 2013-2025 Valeriy Chupurnov. All rights reserved. https://xdsoft.net/jodit/pro/
5
5
  */
6
- import{isFunction as e,isString as t}from"jodit/esm/core/helpers/checker/index.js";import{UIElement as r}from"jodit/esm/core/ui/element.js";export class AutocompleteItem extends r{className(){return"AutocompleteItem"}constructor(r,o){var i;super(r),this.item=o;const{container:n}=this;if(e(o.itemRenderer)){const e=o.itemRenderer(o);t(e)?n.innerHTML=e:n.appendChild(e)}else n.innerText=null!==(i=o.title)&&void 0!==i?i:o.value}}
6
+ var e=this&&this.__decorate||function(e,t,o,r){var n,i=arguments.length,c=i<3?t:null===r?r=Object.getOwnPropertyDescriptor(t,o):r;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)c=Reflect.decorate(e,t,o,r);else for(var l=e.length-1;l>=0;l--)(n=e[l])&&(c=(i<3?n(c):i>3?n(t,o,c):n(t,o))||c);return i>3&&c&&Object.defineProperty(t,o,c),c};import{component as t,watch as o}from"jodit/esm/core/decorators/index.js";import{isFunction as r,isString as n}from"jodit/esm/core/helpers/checker/index.js";import{UIElement as i}from"jodit/esm/core/ui/element.js";let c=class AutocompleteItem extends i{className(){return"AutocompleteItem"}constructor(e,t,o){var i;super(e),this.item=t,this.onClick=o,this.value="";const{container:c}=this;if(this.value=t.value,r(t.itemRenderer)){const e=t.itemRenderer(t);n(e)?c.innerHTML=e:c.appendChild(e)}else c.innerText=null!==(i=t.title)&&void 0!==i?i:t.value}onClickPrevent(e){e.preventDefault(),e.stopPropagation()}onClickHandler(){this.onClick(this.value)}};e([o("container:mousedown container:touchstart")],c.prototype,"onClickPrevent",null),e([o("container:click")],c.prototype,"onClickHandler",null),c=e([t],c);export{c as AutocompleteItem};
@@ -3,6 +3,7 @@
3
3
  * See LICENSE.md in the project root for license information.
4
4
  * Copyright (c) 2013-2025 Valeriy Chupurnov. All rights reserved. https://xdsoft.net/jodit/pro/
5
5
  */
6
+ export declare function isAllowedSubdomain(domain: string): boolean;
6
7
  /**
7
8
  * Validate license
8
9
  */
@@ -3,4 +3,4 @@
3
3
  * See LICENSE.md in the project root for license information.
4
4
  * Copyright (c) 2013-2025 Valeriy Chupurnov. All rights reserved. https://xdsoft.net/jodit/pro/
5
5
  */
6
- const t=["*localhost*","staging.","*.dev.","*.test.","*.stg.","stg.*","test.*","beta.*","*demo.*","*test.*","acceptatie.*"];export function validateLicense(e,n){if(validateEntLicense(e=e.replace(/[^A-Z0-9-]/g,"R")))return!0;if(function isAllowedSubdomain(e){return t.some(t=>new RegExp(function escapeRegex(t){return t.replace(/[/\-\\^$*+?.()|[\]{}]/g,"\\$&")}(t.replace(/\*/g,"%ANY%")).replace(/%ANY%/g,".*")).test(e))}(n))return!0;const r=domainsHash(n),a=["[A-F013456][A-F0-9]{3}{part}","([0-3]){part}[E-L4-8]{2}\\1","[A-D]{part}[J-P5-6]{3}","{part}[A-R0-9]{3}[X-Z]"].map((t,e)=>t.replace("{part}",r[e]||"[R-T]")),o=RegExp(`^${a.join("-")}$`,"i"),s=e.substring(12,13),i=o.test(e);if(!i&&s===(typeof!n).toUpperCase()[5]){const t=n.split(".");return t.shift(),!!t.length&&validateLicense(e,t.join("."))}return i}export function validateEntLicense(t){return/[A-Z0-9][013456][A-P0-9]{2}[ABC]-([0-3])[ELPDF][E-L4-8]{2}\1-[A-D][R0][J-P5-6]{3}-[DPGHYE][GFPOD]{3}[A-SX-Z]/.test(t)}export function domainsHash(t){const e=t.split(".");return e.map(t=>{const e=t[0];return"string"==typeof e&&Boolean(e.charCodeAt(0))?String.fromCharCode(e.charCodeAt(0)+1):e}).concat(e.map(t=>{const e=t[t.length-1];return"string"==typeof e&&Boolean(e.charCodeAt(0))?String.fromCharCode(e.charCodeAt(0)-1):e})).map(t=>null!=t&&/\w/.test(t)?t:"r")}
6
+ const t=["*localhost*","staging.","*.dev.","*.test.","*.stg.","stg.*","test.*","beta.*","*demo.*","*test.*","acceptatie.*"];export function isAllowedSubdomain(e){return t.some(t=>new RegExp(function escapeRegex(t){return t.replace(/[/\-\\^$*+?.()|[\]{}]/g,"\\$&")}(t.replace(/\*/g,"%ANY%")).replace(/%ANY%/g,".*")).test(e))}export function validateLicense(t,e){if(validateEntLicense(t=t.replace(/[^A-Z0-9-]/g,"R")))return!0;if(isAllowedSubdomain(e))return!0;const n=domainsHash(e),r=["[A-F013456][A-F0-9]{3}{part}","([0-3]){part}[E-L4-8]{2}\\1","[A-D]{part}[J-P5-6]{3}","{part}[A-R0-9]{3}[X-Z]"].map((t,e)=>t.replace("{part}",n[e]||"[R-T]")),a=RegExp(`^${r.join("-")}$`,"i"),o=t.substring(12,13),s=a.test(t);if(!s&&o===(typeof!e).toUpperCase()[5]){const n=e.split(".");return n.shift(),!!n.length&&validateLicense(t,n.join("."))}return s}export function validateEntLicense(t){return/[A-Z0-9][013456][A-P0-9]{2}[ABC]-([0-3])[ELPDF][E-L4-8]{2}\1-[A-D][R0][J-P5-6]{3}-[DPGHYE][GFPOD]{3}[A-SX-Z]/.test(t)}export function domainsHash(t){const e=t.split(".");return e.map(t=>{const e=t[0];return"string"==typeof e&&Boolean(e.charCodeAt(0))?String.fromCharCode(e.charCodeAt(0)+1):e}).concat(e.map(t=>{const e=t[t.length-1];return"string"==typeof e&&Boolean(e.charCodeAt(0))?String.fromCharCode(e.charCodeAt(0)-1):e})).map(t=>null!=t&&/\w/.test(t)?t:"r")}
@@ -3,4 +3,4 @@
3
3
  * See LICENSE.md in the project root for license information.
4
4
  * Copyright (c) 2013-2025 Valeriy Chupurnov. All rights reserved. https://xdsoft.net/jodit/pro/
5
5
  */
6
- import{validateLicense as e}from"./helpers/helpers.js";import{IS_TEST as t}from"jodit/esm/core/constants.js";import{Dom as o}from"jodit/esm/core/dom/dom.js";import{isBoolean as s}from"jodit/esm/core/helpers/checker/is-boolean.js";import{isString as i}from"jodit/esm/core/helpers/checker/is-string.js";import{Plugin as r}from"jodit/esm/core/plugin/plugin.js";import{JoditPro as n}from"../../jodit-pro.js";export class license extends r{static make(e){return new license(e)}afterInit(o){this.j.e.on("checkReserve",async o=>{const s=this.j.o.license;if(!s)return"";const r=o;if(!i(s))return"";let n=e(s,r);return!n&&s[12]>"A"&&!t&&(n=await this.validateLicenseRemote(s,r)),n?"normal":""})}beforeDestruct(e){}async validateLicenseRemote(t,i){const r="validateJoditLicenseRemote",n=this.j.storage.get(r);if(n&&e(n,i))return!0;const c=document.createElement("script");return c.src=`https://xdsoft.net/jodit/pro/api/licenses/validate/?code=${encodeURIComponent(t)}&host=${encodeURIComponent(i)}`,document.body.appendChild(c),this.j.async.promise(t=>{window.onJoditResolveKeyCode=n=>{try{if(s(n))return t(n);e(n,i)?(this.j.storage.set(r,n),t(!0)):t(!1)}finally{o.safeRemove(c)}},this.j.async.setTimeout(()=>{t(!1),o.safeRemove(c)},3e3)})}}n.plugins.add("license",license);
6
+ import{isAllowedSubdomain as e,validateLicense as t}from"./helpers/helpers.js";import{IS_TEST as o}from"jodit/esm/core/constants.js";import{Dom as s}from"jodit/esm/core/dom/dom.js";import{isBoolean as r}from"jodit/esm/core/helpers/checker/is-boolean.js";import{isString as i}from"jodit/esm/core/helpers/checker/is-string.js";import{Plugin as n}from"jodit/esm/core/plugin/plugin.js";import{JoditPro as c}from"../../jodit-pro.js";export class license extends n{static make(e){return new license(e)}afterInit(s){this.j.e.on("checkReserve",async s=>{const r=this.j.o.license;if(e(s))return"normal";if(!r)return"";const n=s;if(!i(r))return"";let c=t(r,n);return!c&&r[12]>"A"&&!o&&(c=await this.validateLicenseRemote(r,n)),c?"normal":""})}beforeDestruct(e){}async validateLicenseRemote(e,o){const i="validateJoditLicenseRemote",n=this.j.storage.get(i);if(n&&t(n,o))return!0;const c=document.createElement("script");return c.src=`https://xdsoft.net/jodit/pro/api/licenses/validate/?code=${encodeURIComponent(e)}&host=${encodeURIComponent(o)}`,document.body.appendChild(c),this.j.async.promise(e=>{window.onJoditResolveKeyCode=n=>{try{if(r(n))return e(n);t(n,o)?(this.j.storage.set(i,n),e(!0)):e(!1)}finally{s.safeRemove(c)}},this.j.async.setTimeout(()=>{e(!1),s.safeRemove(c)},3e3)})}}c.plugins.add("license",license);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "jodit-pro",
3
- "version": "4.6.18",
3
+ "version": "4.6.21",
4
4
  "author": "Chupurnov Valeriy <chupurnov@gmail.com>",
5
5
  "homepage": "https://xdsoft.net/jodit/pro/",
6
6
  "bugs": {
package/types/config.d.ts CHANGED
@@ -39,8 +39,8 @@ interface Config {
39
39
  autocomplete: {
40
40
  maxItems: number;
41
41
  isMatchedQuery: (query: string, value: string) => boolean;
42
- itemRenderer: (item: IAutoCompleteItem) => string | HTMLElement;
43
- insertValueRenderer: (item: IAutoCompleteItem) => string | HTMLElement;
42
+ itemRenderer: <T = any>(item: IAutoCompleteItem<T>) => string | HTMLElement;
43
+ insertValueRenderer: <T = any>(item: IAutoCompleteItem<T>) => string | HTMLElement;
44
44
  sources: AutoCompleteSource[];
45
45
  };
46
46
  }
@@ -4,37 +4,27 @@
4
4
  * Copyright (c) 2013-2025 Valeriy Chupurnov. All rights reserved. https://xdsoft.net/jodit/pro/
5
5
  */
6
6
  import type { IJodit } from "jodit/esm/types/index";
7
+ import "./config";
7
8
  import { Plugin } from "jodit/esm/core/plugin/index";
8
9
  import type { AutoCompleteSource, IAutoCompleteCustomFeed, IAutoCompleteItem } from "./interface";
9
- declare module 'jodit/esm/config' {
10
- interface Config {
11
- autocomplete: {
12
- maxItems: number;
13
- isMatchedQuery: (query: string, value: string) => boolean;
14
- itemRenderer: (item: IAutoCompleteItem) => string | HTMLElement;
15
- insertValueRenderer: (item: IAutoCompleteItem) => string | HTMLElement;
16
- sources: AutoCompleteSource[];
17
- };
18
- }
19
- }
20
10
  export declare class autocomplete extends Plugin {
21
11
  /** @override */
22
12
  static requires: string[];
23
13
  /** @override */
24
14
  hasStyle: boolean;
25
- private list;
26
- private popup;
15
+ private get list();
16
+ private get popup();
27
17
  private sources;
28
- constructor(jodit: IJodit);
29
18
  /** @override */
30
19
  protected afterInit(jodit: IJodit): void;
31
20
  private registerAutocompleteSource;
21
+ private unregisterAutocompleteSource;
32
22
  private static isControlKey;
33
23
  private onKeyDown;
34
24
  private onKeyControlDown;
35
25
  private onEnter;
36
26
  private onAutoComplete;
37
- resolveFeed<T extends IAutoCompleteItem = IAutoCompleteItem>(query: string, feed: AutoCompleteSource<T> | IAutoCompleteCustomFeed<T>['feed'], baseSource?: IAutoCompleteCustomFeed<T>): Promise<T[]>;
27
+ resolveFeed(query: string, feed: AutoCompleteSource, baseSource?: IAutoCompleteCustomFeed): Promise<IAutoCompleteItem[]>;
38
28
  private openPopup;
39
29
  /** @override */
40
30
  protected beforeDestruct(jodit: IJodit): void;
@@ -0,0 +1,17 @@
1
+ /*!
2
+ * Jodit Editor PRO (https://xdsoft.net/jodit/)
3
+ * See LICENSE.md in the project root for license information.
4
+ * Copyright (c) 2013-2025 Valeriy Chupurnov. All rights reserved. https://xdsoft.net/jodit/pro/
5
+ */
6
+ import type { AutoCompleteSource, IAutoCompleteItem } from "./interface";
7
+ declare module 'jodit/esm/config' {
8
+ interface Config {
9
+ autocomplete: {
10
+ maxItems: number;
11
+ isMatchedQuery: (query: string, value: string) => boolean;
12
+ itemRenderer: <T = any>(item: IAutoCompleteItem<T>) => string | HTMLElement;
13
+ insertValueRenderer: <T = any>(item: IAutoCompleteItem<T>) => string | HTMLElement;
14
+ sources: AutoCompleteSource[];
15
+ };
16
+ }
17
+ }
@@ -10,10 +10,10 @@ export interface IAutoCompleteItem<T = IDictionary> {
10
10
  itemRenderer?: (item: T) => string | HTMLElement;
11
11
  insertValueRenderer?: (item: T) => string | HTMLElement;
12
12
  }
13
- export type AutoCompleteCallback<T> = (query: string) => CanPromise<T[]>;
14
- export interface IAutoCompleteCustomFeed<T> {
15
- feed: CanPromise<string[]> | CanPromise<IAutoCompleteItem[]> | AutoCompleteCallback<T>;
16
- itemRenderer?: IAutoCompleteItem<T>['itemRenderer'];
17
- insertValueRenderer?: IAutoCompleteItem<T>['insertValueRenderer'];
13
+ export type AutoCompleteCallback = (query: string) => CanPromise<IAutoCompleteItem[]>;
14
+ export interface IAutoCompleteCustomFeed {
15
+ feed: CanPromise<string[]> | CanPromise<IAutoCompleteItem[]> | AutoCompleteCallback;
16
+ itemRenderer?: IAutoCompleteItem<IAutoCompleteItem>['itemRenderer'];
17
+ insertValueRenderer?: IAutoCompleteItem<IAutoCompleteItem>['insertValueRenderer'];
18
18
  }
19
- export type AutoCompleteSource<T = IAutoCompleteItem> = IAutoCompleteCustomFeed<T>['feed'] | IAutoCompleteCustomFeed<T>;
19
+ export type AutoCompleteSource = IAutoCompleteCustomFeed['feed'] | IAutoCompleteCustomFeed;
@@ -10,8 +10,9 @@ export declare class Autocomplete extends UIGroup {
10
10
  /** @override */
11
11
  className(): string;
12
12
  elements: AutocompleteItem[];
13
- private currentSelection;
13
+ currentSelection: number;
14
14
  private onChangeSelection;
15
+ private __previousList;
15
16
  build(list: IAutoCompleteItem[]): void;
16
17
  selectNext(): void;
17
18
  selectPrevious(): void;
@@ -7,7 +7,11 @@ import { UIElement } from "jodit/esm/core/ui/element";
7
7
  import type { IAutoCompleteItem } from "../interface";
8
8
  export declare class AutocompleteItem extends UIElement {
9
9
  item: IAutoCompleteItem;
10
+ private onClick;
11
+ readonly value: string;
10
12
  /** @override */
11
13
  className(): string;
12
- constructor(jodit: AutocompleteItem['jodit'], item: IAutoCompleteItem);
14
+ constructor(jodit: AutocompleteItem['jodit'], item: IAutoCompleteItem, onClick: (value: string) => void);
15
+ protected onClickPrevent(e: MouseEvent): void;
16
+ protected onClickHandler(): void;
13
17
  }
@@ -3,6 +3,7 @@
3
3
  * See LICENSE.md in the project root for license information.
4
4
  * Copyright (c) 2013-2025 Valeriy Chupurnov. All rights reserved. https://xdsoft.net/jodit/pro/
5
5
  */
6
+ export declare function isAllowedSubdomain(domain: string): boolean;
6
7
  /**
7
8
  * Validate license
8
9
  */