jodit-pro 4.9.21 → 4.9.25

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 (299) hide show
  1. package/CHANGELOG.md +63 -1
  2. package/es2015/jodit.css +1 -1
  3. package/es2015/jodit.fat.min.js +43 -43
  4. package/es2015/jodit.js +238 -87
  5. package/es2015/jodit.min.js +6 -6
  6. package/es2015/plugins/ai-assistant-pro/ai-assistant-pro.css +1 -1
  7. package/es2015/plugins/ai-assistant-pro/ai-assistant-pro.js +193 -161
  8. package/es2015/plugins/ai-assistant-pro/ai-assistant-pro.min.js +30 -30
  9. package/es2015/plugins/autocomplete/autocomplete.js +1 -1
  10. package/es2015/plugins/autocomplete/autocomplete.min.js +1 -1
  11. package/es2015/plugins/backup/backup.css +1 -1
  12. package/es2015/plugins/backup/backup.js +1 -1
  13. package/es2015/plugins/backup/backup.min.js +1 -1
  14. package/es2015/plugins/button-generator/button-generator.css +1 -1
  15. package/es2015/plugins/button-generator/button-generator.js +1 -1
  16. package/es2015/plugins/button-generator/button-generator.min.js +1 -1
  17. package/es2015/plugins/change-case/change-case.js +1 -1
  18. package/es2015/plugins/change-case/change-case.min.js +1 -1
  19. package/es2015/plugins/color-picker/color-picker.css +1 -1
  20. package/es2015/plugins/color-picker/color-picker.js +1 -1
  21. package/es2015/plugins/color-picker/color-picker.min.js +1 -1
  22. package/es2015/plugins/emoji/emoji.css +1 -1
  23. package/es2015/plugins/emoji/emoji.js +1 -1
  24. package/es2015/plugins/emoji/emoji.min.js +1 -1
  25. package/es2015/plugins/export-docs/export-docs.js +1 -1
  26. package/es2015/plugins/export-docs/export-docs.min.js +1 -1
  27. package/es2015/plugins/finder/finder.css +1 -1
  28. package/es2015/plugins/finder/finder.js +1 -1
  29. package/es2015/plugins/finder/finder.min.js +1 -1
  30. package/es2015/plugins/google-maps/google-maps.css +1 -1
  31. package/es2015/plugins/google-maps/google-maps.js +1 -1
  32. package/es2015/plugins/google-maps/google-maps.min.js +1 -1
  33. package/es2015/plugins/google-search/google-search.js +1 -1
  34. package/es2015/plugins/google-search/google-search.min.js +1 -1
  35. package/es2015/plugins/highlight-signature/highlight-signature.js +1 -1
  36. package/es2015/plugins/highlight-signature/highlight-signature.min.js +1 -1
  37. package/es2015/plugins/iframe-editor/iframe-editor.css +1 -1
  38. package/es2015/plugins/iframe-editor/iframe-editor.js +1 -1
  39. package/es2015/plugins/iframe-editor/iframe-editor.min.js +1 -1
  40. package/es2015/plugins/keyboard/keyboard.css +1 -1
  41. package/es2015/plugins/keyboard/keyboard.js +1 -1
  42. package/es2015/plugins/keyboard/keyboard.min.js +1 -1
  43. package/es2015/plugins/mobile-view/mobile-view.js +1 -1
  44. package/es2015/plugins/mobile-view/mobile-view.min.js +1 -1
  45. package/es2015/plugins/page-break/page-break.js +1 -1
  46. package/es2015/plugins/page-break/page-break.min.js +1 -1
  47. package/es2015/plugins/paste-code/paste-code.css +1 -1
  48. package/es2015/plugins/paste-code/paste-code.js +1 -1
  49. package/es2015/plugins/paste-code/paste-code.min.js +1 -1
  50. package/es2015/plugins/paste-from-word/paste-from-word.js +1 -1
  51. package/es2015/plugins/paste-from-word/paste-from-word.min.js +1 -1
  52. package/es2015/plugins/show-blocks/show-blocks.js +1 -1
  53. package/es2015/plugins/show-blocks/show-blocks.min.js +1 -1
  54. package/es2015/plugins/style/style.css +1 -1
  55. package/es2015/plugins/style/style.js +1 -1
  56. package/es2015/plugins/style/style.min.js +1 -1
  57. package/es2015/plugins/todo-list/todo-list.css +1 -1
  58. package/es2015/plugins/todo-list/todo-list.js +1 -1
  59. package/es2015/plugins/todo-list/todo-list.min.js +1 -1
  60. package/es2015/plugins/translate/translate.css +1 -1
  61. package/es2015/plugins/translate/translate.js +1 -1
  62. package/es2015/plugins/translate/translate.min.js +1 -1
  63. package/es2015/plugins/tune-block/tune-block.css +1 -1
  64. package/es2015/plugins/tune-block/tune-block.js +1 -1
  65. package/es2015/plugins/tune-block/tune-block.min.js +1 -1
  66. package/es2018/jodit.fat.min.js +28 -28
  67. package/es2018/jodit.min.js +6 -6
  68. package/es2018/plugins/ai-assistant-pro/ai-assistant-pro.min.js +20 -20
  69. package/es2018/plugins/autocomplete/autocomplete.min.js +1 -1
  70. package/es2018/plugins/backup/backup.min.js +1 -1
  71. package/es2018/plugins/button-generator/button-generator.min.js +1 -1
  72. package/es2018/plugins/change-case/change-case.min.js +1 -1
  73. package/es2018/plugins/color-picker/color-picker.min.js +1 -1
  74. package/es2018/plugins/emoji/emoji.min.js +1 -1
  75. package/es2018/plugins/export-docs/export-docs.min.js +1 -1
  76. package/es2018/plugins/finder/finder.min.js +1 -1
  77. package/es2018/plugins/google-maps/google-maps.min.js +1 -1
  78. package/es2018/plugins/google-search/google-search.min.js +1 -1
  79. package/es2018/plugins/highlight-signature/highlight-signature.min.js +1 -1
  80. package/es2018/plugins/iframe-editor/iframe-editor.min.js +1 -1
  81. package/es2018/plugins/keyboard/keyboard.min.js +1 -1
  82. package/es2018/plugins/mobile-view/mobile-view.min.js +1 -1
  83. package/es2018/plugins/page-break/page-break.min.js +1 -1
  84. package/es2018/plugins/paste-code/paste-code.min.js +1 -1
  85. package/es2018/plugins/paste-from-word/paste-from-word.min.js +1 -1
  86. package/es2018/plugins/show-blocks/show-blocks.min.js +1 -1
  87. package/es2018/plugins/style/style.min.js +1 -1
  88. package/es2018/plugins/todo-list/todo-list.min.js +1 -1
  89. package/es2018/plugins/translate/translate.min.js +1 -1
  90. package/es2018/plugins/tune-block/tune-block.min.js +1 -1
  91. package/es2021/jodit.css +1 -1
  92. package/es2021/jodit.fat.min.js +29 -29
  93. package/es2021/jodit.js +238 -87
  94. package/es2021/jodit.min.js +8 -8
  95. package/es2021/plugins/ai-assistant-pro/ai-assistant-pro.css +1 -1
  96. package/es2021/plugins/ai-assistant-pro/ai-assistant-pro.js +194 -162
  97. package/es2021/plugins/ai-assistant-pro/ai-assistant-pro.min.js +20 -20
  98. package/es2021/plugins/autocomplete/autocomplete.js +1 -1
  99. package/es2021/plugins/autocomplete/autocomplete.min.js +1 -1
  100. package/es2021/plugins/backup/backup.css +1 -1
  101. package/es2021/plugins/backup/backup.js +1 -1
  102. package/es2021/plugins/backup/backup.min.js +1 -1
  103. package/es2021/plugins/button-generator/button-generator.css +1 -1
  104. package/es2021/plugins/button-generator/button-generator.js +1 -1
  105. package/es2021/plugins/button-generator/button-generator.min.js +1 -1
  106. package/es2021/plugins/change-case/change-case.js +1 -1
  107. package/es2021/plugins/change-case/change-case.min.js +1 -1
  108. package/es2021/plugins/color-picker/color-picker.css +1 -1
  109. package/es2021/plugins/color-picker/color-picker.js +1 -1
  110. package/es2021/plugins/color-picker/color-picker.min.js +1 -1
  111. package/es2021/plugins/emoji/emoji.css +1 -1
  112. package/es2021/plugins/emoji/emoji.js +1 -1
  113. package/es2021/plugins/emoji/emoji.min.js +1 -1
  114. package/es2021/plugins/export-docs/export-docs.js +1 -1
  115. package/es2021/plugins/export-docs/export-docs.min.js +1 -1
  116. package/es2021/plugins/finder/finder.css +1 -1
  117. package/es2021/plugins/finder/finder.js +1 -1
  118. package/es2021/plugins/finder/finder.min.js +1 -1
  119. package/es2021/plugins/google-maps/google-maps.css +1 -1
  120. package/es2021/plugins/google-maps/google-maps.js +1 -1
  121. package/es2021/plugins/google-maps/google-maps.min.js +1 -1
  122. package/es2021/plugins/google-search/google-search.js +1 -1
  123. package/es2021/plugins/google-search/google-search.min.js +1 -1
  124. package/es2021/plugins/highlight-signature/highlight-signature.js +1 -1
  125. package/es2021/plugins/highlight-signature/highlight-signature.min.js +1 -1
  126. package/es2021/plugins/iframe-editor/iframe-editor.css +1 -1
  127. package/es2021/plugins/iframe-editor/iframe-editor.js +1 -1
  128. package/es2021/plugins/iframe-editor/iframe-editor.min.js +1 -1
  129. package/es2021/plugins/keyboard/keyboard.css +1 -1
  130. package/es2021/plugins/keyboard/keyboard.js +1 -1
  131. package/es2021/plugins/keyboard/keyboard.min.js +1 -1
  132. package/es2021/plugins/mobile-view/mobile-view.js +1 -1
  133. package/es2021/plugins/mobile-view/mobile-view.min.js +1 -1
  134. package/es2021/plugins/page-break/page-break.js +1 -1
  135. package/es2021/plugins/page-break/page-break.min.js +1 -1
  136. package/es2021/plugins/paste-code/paste-code.css +1 -1
  137. package/es2021/plugins/paste-code/paste-code.js +1 -1
  138. package/es2021/plugins/paste-code/paste-code.min.js +1 -1
  139. package/es2021/plugins/paste-from-word/paste-from-word.js +1 -1
  140. package/es2021/plugins/paste-from-word/paste-from-word.min.js +1 -1
  141. package/es2021/plugins/show-blocks/show-blocks.js +1 -1
  142. package/es2021/plugins/show-blocks/show-blocks.min.js +1 -1
  143. package/es2021/plugins/style/style.css +1 -1
  144. package/es2021/plugins/style/style.js +1 -1
  145. package/es2021/plugins/style/style.min.js +1 -1
  146. package/es2021/plugins/todo-list/todo-list.css +1 -1
  147. package/es2021/plugins/todo-list/todo-list.js +1 -1
  148. package/es2021/plugins/todo-list/todo-list.min.js +1 -1
  149. package/es2021/plugins/translate/translate.css +1 -1
  150. package/es2021/plugins/translate/translate.js +1 -1
  151. package/es2021/plugins/translate/translate.min.js +1 -1
  152. package/es2021/plugins/tune-block/tune-block.css +1 -1
  153. package/es2021/plugins/tune-block/tune-block.js +1 -1
  154. package/es2021/plugins/tune-block/tune-block.min.js +1 -1
  155. package/es2021.en/jodit.css +1 -1
  156. package/es2021.en/jodit.fat.min.js +83 -83
  157. package/es2021.en/jodit.js +238 -87
  158. package/es2021.en/jodit.min.js +8 -8
  159. package/es2021.en/plugins/ai-assistant-pro/ai-assistant-pro.css +1 -1
  160. package/es2021.en/plugins/ai-assistant-pro/ai-assistant-pro.js +194 -162
  161. package/es2021.en/plugins/ai-assistant-pro/ai-assistant-pro.min.js +20 -20
  162. package/es2021.en/plugins/autocomplete/autocomplete.js +1 -1
  163. package/es2021.en/plugins/autocomplete/autocomplete.min.js +1 -1
  164. package/es2021.en/plugins/backup/backup.css +1 -1
  165. package/es2021.en/plugins/backup/backup.js +1 -1
  166. package/es2021.en/plugins/backup/backup.min.js +1 -1
  167. package/es2021.en/plugins/button-generator/button-generator.css +1 -1
  168. package/es2021.en/plugins/button-generator/button-generator.js +1 -1
  169. package/es2021.en/plugins/button-generator/button-generator.min.js +1 -1
  170. package/es2021.en/plugins/change-case/change-case.js +1 -1
  171. package/es2021.en/plugins/change-case/change-case.min.js +1 -1
  172. package/es2021.en/plugins/color-picker/color-picker.css +1 -1
  173. package/es2021.en/plugins/color-picker/color-picker.js +1 -1
  174. package/es2021.en/plugins/color-picker/color-picker.min.js +1 -1
  175. package/es2021.en/plugins/emoji/emoji.css +1 -1
  176. package/es2021.en/plugins/emoji/emoji.js +1 -1
  177. package/es2021.en/plugins/emoji/emoji.min.js +1 -1
  178. package/es2021.en/plugins/export-docs/export-docs.js +1 -1
  179. package/es2021.en/plugins/export-docs/export-docs.min.js +1 -1
  180. package/es2021.en/plugins/finder/finder.css +1 -1
  181. package/es2021.en/plugins/finder/finder.js +1 -1
  182. package/es2021.en/plugins/finder/finder.min.js +1 -1
  183. package/es2021.en/plugins/google-maps/google-maps.css +1 -1
  184. package/es2021.en/plugins/google-maps/google-maps.js +1 -1
  185. package/es2021.en/plugins/google-maps/google-maps.min.js +1 -1
  186. package/es2021.en/plugins/google-search/google-search.js +1 -1
  187. package/es2021.en/plugins/google-search/google-search.min.js +1 -1
  188. package/es2021.en/plugins/highlight-signature/highlight-signature.js +1 -1
  189. package/es2021.en/plugins/highlight-signature/highlight-signature.min.js +1 -1
  190. package/es2021.en/plugins/iframe-editor/iframe-editor.css +1 -1
  191. package/es2021.en/plugins/iframe-editor/iframe-editor.js +1 -1
  192. package/es2021.en/plugins/iframe-editor/iframe-editor.min.js +1 -1
  193. package/es2021.en/plugins/keyboard/keyboard.css +1 -1
  194. package/es2021.en/plugins/keyboard/keyboard.js +1 -1
  195. package/es2021.en/plugins/keyboard/keyboard.min.js +1 -1
  196. package/es2021.en/plugins/mobile-view/mobile-view.js +1 -1
  197. package/es2021.en/plugins/mobile-view/mobile-view.min.js +1 -1
  198. package/es2021.en/plugins/page-break/page-break.js +1 -1
  199. package/es2021.en/plugins/page-break/page-break.min.js +1 -1
  200. package/es2021.en/plugins/paste-code/paste-code.css +1 -1
  201. package/es2021.en/plugins/paste-code/paste-code.js +1 -1
  202. package/es2021.en/plugins/paste-code/paste-code.min.js +1 -1
  203. package/es2021.en/plugins/paste-from-word/paste-from-word.js +1 -1
  204. package/es2021.en/plugins/paste-from-word/paste-from-word.min.js +1 -1
  205. package/es2021.en/plugins/show-blocks/show-blocks.js +1 -1
  206. package/es2021.en/plugins/show-blocks/show-blocks.min.js +1 -1
  207. package/es2021.en/plugins/style/style.css +1 -1
  208. package/es2021.en/plugins/style/style.js +1 -1
  209. package/es2021.en/plugins/style/style.min.js +1 -1
  210. package/es2021.en/plugins/todo-list/todo-list.css +1 -1
  211. package/es2021.en/plugins/todo-list/todo-list.js +1 -1
  212. package/es2021.en/plugins/todo-list/todo-list.min.js +1 -1
  213. package/es2021.en/plugins/translate/translate.css +1 -1
  214. package/es2021.en/plugins/translate/translate.js +1 -1
  215. package/es2021.en/plugins/translate/translate.min.js +1 -1
  216. package/es2021.en/plugins/tune-block/tune-block.css +1 -1
  217. package/es2021.en/plugins/tune-block/tune-block.js +1 -1
  218. package/es2021.en/plugins/tune-block/tune-block.min.js +1 -1
  219. package/es5/jodit.css +2 -2
  220. package/es5/jodit.fat.min.js +2 -2
  221. package/es5/jodit.js +256 -87
  222. package/es5/jodit.min.css +2 -2
  223. package/es5/jodit.min.js +2 -2
  224. package/es5/plugins/ai-assistant-pro/ai-assistant-pro.css +1 -1
  225. package/es5/plugins/ai-assistant-pro/ai-assistant-pro.js +221 -174
  226. package/es5/plugins/ai-assistant-pro/ai-assistant-pro.min.js +2 -2
  227. package/es5/plugins/autocomplete/autocomplete.js +1 -1
  228. package/es5/plugins/autocomplete/autocomplete.min.js +1 -1
  229. package/es5/plugins/backup/backup.css +1 -1
  230. package/es5/plugins/backup/backup.js +1 -1
  231. package/es5/plugins/backup/backup.min.js +1 -1
  232. package/es5/plugins/button-generator/button-generator.css +1 -1
  233. package/es5/plugins/button-generator/button-generator.js +1 -1
  234. package/es5/plugins/button-generator/button-generator.min.js +1 -1
  235. package/es5/plugins/change-case/change-case.js +1 -1
  236. package/es5/plugins/change-case/change-case.min.js +1 -1
  237. package/es5/plugins/color-picker/color-picker.css +1 -1
  238. package/es5/plugins/color-picker/color-picker.js +1 -1
  239. package/es5/plugins/color-picker/color-picker.min.js +1 -1
  240. package/es5/plugins/emoji/emoji.css +1 -1
  241. package/es5/plugins/emoji/emoji.js +1 -1
  242. package/es5/plugins/emoji/emoji.min.js +1 -1
  243. package/es5/plugins/export-docs/export-docs.js +1 -1
  244. package/es5/plugins/export-docs/export-docs.min.js +1 -1
  245. package/es5/plugins/finder/finder.css +1 -1
  246. package/es5/plugins/finder/finder.js +1 -1
  247. package/es5/plugins/finder/finder.min.js +1 -1
  248. package/es5/plugins/google-maps/google-maps.css +1 -1
  249. package/es5/plugins/google-maps/google-maps.js +1 -1
  250. package/es5/plugins/google-maps/google-maps.min.js +1 -1
  251. package/es5/plugins/google-search/google-search.js +1 -1
  252. package/es5/plugins/google-search/google-search.min.js +1 -1
  253. package/es5/plugins/highlight-signature/highlight-signature.js +1 -1
  254. package/es5/plugins/highlight-signature/highlight-signature.min.js +1 -1
  255. package/es5/plugins/iframe-editor/iframe-editor.css +1 -1
  256. package/es5/plugins/iframe-editor/iframe-editor.js +1 -1
  257. package/es5/plugins/iframe-editor/iframe-editor.min.js +1 -1
  258. package/es5/plugins/keyboard/keyboard.css +1 -1
  259. package/es5/plugins/keyboard/keyboard.js +1 -1
  260. package/es5/plugins/keyboard/keyboard.min.js +1 -1
  261. package/es5/plugins/mobile-view/mobile-view.js +1 -1
  262. package/es5/plugins/mobile-view/mobile-view.min.js +1 -1
  263. package/es5/plugins/page-break/page-break.js +1 -1
  264. package/es5/plugins/page-break/page-break.min.js +1 -1
  265. package/es5/plugins/paste-code/paste-code.css +1 -1
  266. package/es5/plugins/paste-code/paste-code.js +1 -1
  267. package/es5/plugins/paste-code/paste-code.min.js +1 -1
  268. package/es5/plugins/paste-from-word/paste-from-word.js +1 -1
  269. package/es5/plugins/paste-from-word/paste-from-word.min.js +1 -1
  270. package/es5/plugins/show-blocks/show-blocks.js +1 -1
  271. package/es5/plugins/show-blocks/show-blocks.min.js +1 -1
  272. package/es5/plugins/style/style.css +1 -1
  273. package/es5/plugins/style/style.js +1 -1
  274. package/es5/plugins/style/style.min.js +1 -1
  275. package/es5/plugins/todo-list/todo-list.css +1 -1
  276. package/es5/plugins/todo-list/todo-list.js +1 -1
  277. package/es5/plugins/todo-list/todo-list.min.js +1 -1
  278. package/es5/plugins/translate/translate.css +1 -1
  279. package/es5/plugins/translate/translate.js +1 -1
  280. package/es5/plugins/translate/translate.min.js +1 -1
  281. package/es5/plugins/tune-block/tune-block.css +1 -1
  282. package/es5/plugins/tune-block/tune-block.js +1 -1
  283. package/es5/plugins/tune-block/tune-block.min.js +1 -1
  284. package/es5/polyfills.fat.min.js +1 -1
  285. package/es5/polyfills.js +1 -1
  286. package/es5/polyfills.min.js +1 -1
  287. package/esm/plugins/ai-assistant-pro/ui/input-area/input-area.d.ts +5 -1
  288. package/esm/plugins/ai-assistant-pro/ui/main-panel/main-panel.d.ts +1 -1
  289. package/esm/plugins/ai-assistant-pro/ui/settings-button/settings-button.d.ts +7 -1
  290. package/esm/plugins/ai-assistant-pro/ui/settings-popup/dialog-settings.d.ts +3 -1
  291. package/esm/plugins/ai-assistant-pro/ui/settings-popup/global-settings.d.ts +5 -1
  292. package/esm/plugins/ai-assistant-pro/ui/settings-popup/settings-popup.d.ts +7 -1
  293. package/package.json +1 -1
  294. package/types/plugins/ai-assistant-pro/ui/input-area/input-area.d.ts +5 -1
  295. package/types/plugins/ai-assistant-pro/ui/main-panel/main-panel.d.ts +1 -1
  296. package/types/plugins/ai-assistant-pro/ui/settings-button/settings-button.d.ts +7 -1
  297. package/types/plugins/ai-assistant-pro/ui/settings-popup/dialog-settings.d.ts +3 -1
  298. package/types/plugins/ai-assistant-pro/ui/settings-popup/global-settings.d.ts +5 -1
  299. package/types/plugins/ai-assistant-pro/ui/settings-popup/settings-popup.d.ts +7 -1
@@ -1,7 +1,7 @@
1
1
  /*!
2
2
  * jodit-pro - PRO Version of Jodit Editor
3
3
  * Author: Chupurnov Valerii <chupurnov@gmail.com>
4
- * Version: v4.9.21
4
+ * Version: v4.9.25
5
5
  * Url: https://xdsoft.net/jodit/pro/
6
6
  * License(s): SEE LICENSE IN LICENSE.md
7
7
  */
@@ -3312,7 +3312,7 @@ class JoditPro extends jodit_esm_index__WEBPACK_IMPORTED_MODULE_3__.Jodit {
3312
3312
  }
3313
3313
  /**
3314
3314
  * Get temporary list
3315
- * @deprecated
3315
+ * @deprecated Just do not use it, it is not needed anymore
3316
3316
  */ static temporaryList(root) {
3317
3317
  return (0,_helpers_array_to_array_js__WEBPACK_IMPORTED_MODULE_1__.toArray)(root.querySelectorAll(`[${_constants_js__WEBPACK_IMPORTED_MODULE_0__.TEMP_ATTR}]`));
3318
3318
  }
@@ -4622,7 +4622,96 @@ function removeExtraTags(elm) {
4622
4622
 
4623
4623
  let ConfigPrototype = {};
4624
4624
  /**
4625
- * Default Editor's Configuration
4625
+ * Default Editor's Configuration.
4626
+ *
4627
+ * This class holds all default option values for the Jodit editor.
4628
+ * It uses a **private constructor** and a **lazy singleton** pattern — the single instance
4629
+ * is created on the first access to {@link Config.defaultOptions} (also available as `Jodit.defaultOptions`).
4630
+ *
4631
+ * ## How options are resolved
4632
+ *
4633
+ * When you create an editor with `Jodit.make('#editor', userOptions)`, the library
4634
+ * calls {@link ConfigProto}(userOptions, Config.defaultOptions). `ConfigProto` does
4635
+ * **not** deep-clone the defaults. Instead it creates a new object whose JavaScript
4636
+ * prototype is `Config.defaultOptions`:
4637
+ *
4638
+ * ```
4639
+ * userOptions ──[[Prototype]]──► Config.defaultOptions
4640
+ * ```
4641
+ *
4642
+ * Any key present in `userOptions` shadows the default;
4643
+ * any key **not** present falls through to `Config.defaultOptions` via the prototype chain.
4644
+ * Nested plain objects are recursively prototyped in the same way, so partial overrides
4645
+ * of nested options work automatically:
4646
+ *
4647
+ * ```js
4648
+ * // Only override `dialogWidth`; all other `image.*` defaults are still available
4649
+ * Jodit.make('#editor', {
4650
+ * image: { dialogWidth: 500 }
4651
+ * });
4652
+ * ```
4653
+ *
4654
+ * ## How plugins extend the config
4655
+ *
4656
+ * Each plugin adds its own defaults by assigning to `Config.prototype` and augmenting
4657
+ * the TypeScript type with `declare module`:
4658
+ *
4659
+ * ```ts
4660
+ * // 1. Type augmentation (compile-time)
4661
+ * declare module 'jodit/config' {
4662
+ * interface Config {
4663
+ * toolbarSticky: boolean;
4664
+ * }
4665
+ * }
4666
+ *
4667
+ * // 2. Runtime default
4668
+ * Config.prototype.toolbarSticky = true;
4669
+ * ```
4670
+ *
4671
+ * Because the constructor runs `Object.assign(this, ConfigPrototype)` (where
4672
+ * `ConfigPrototype` is captured as `Config.prototype` after the class definition),
4673
+ * all prototype-level values — including those added by plugins — are materialized
4674
+ * as own properties on the singleton. This means `Config.defaultOptions` always
4675
+ * contains every registered option as an own, enumerable property.
4676
+ *
4677
+ * ## Changing global defaults
4678
+ *
4679
+ * You can modify `Jodit.defaultOptions` **before** creating editors to change
4680
+ * defaults globally:
4681
+ *
4682
+ * ```js
4683
+ * Jodit.defaultOptions.language = 'de';
4684
+ * Jodit.defaultOptions.theme = 'dark';
4685
+ *
4686
+ * // Both editors inherit the new defaults
4687
+ * Jodit.make('#editor1');
4688
+ * Jodit.make('#editor2');
4689
+ * ```
4690
+ *
4691
+ * ## `Jodit.atom` — preventing deep merge
4692
+ *
4693
+ * By default, `ConfigProto` deep-merges nested plain objects and arrays.
4694
+ * Wrap a value with `Jodit.atom(value)` to make it **atomic** — it will completely
4695
+ * replace the default instead of being merged:
4696
+ *
4697
+ * ```js
4698
+ * Jodit.make('#editor', {
4699
+ * controls: {
4700
+ * fontsize: {
4701
+ * // Replace the entire list rather than merging with the default one
4702
+ * list: Jodit.atom([8, 9, 10])
4703
+ * }
4704
+ * }
4705
+ * });
4706
+ * ```
4707
+ *
4708
+ * `Jodit.atom` calls {@link markAsAtomic}, which sets a non-enumerable
4709
+ * `isAtom` flag on the object. `ConfigProto` checks this flag and skips
4710
+ * recursive merging when it is present. Note: top-level arrays (depth 0)
4711
+ * are always treated as atomic — they replace rather than merge.
4712
+ *
4713
+ * @see {@link ConfigProto} for the full merge algorithm
4714
+ * @see {@link markAsAtomic} / {@link isAtom} for the atom marker implementation
4626
4715
  */ class Config {
4627
4716
  static get defaultOptions() {
4628
4717
  if (!Config.__defaultOptions) {
@@ -4632,31 +4721,32 @@ let ConfigPrototype = {};
4632
4721
  }
4633
4722
  constructor(){
4634
4723
  /**
4635
- * Use cache for heavy methods
4724
+ * When enabled, the editor caches the results of expensive computations (e.g. toolbar rebuilds)
4725
+ * to improve performance. Disable for debugging or when options change frequently at runtime.
4636
4726
  */ this.cache = true;
4637
4727
  /**
4638
4728
  * Timeout of all asynchronous methods
4639
4729
  */ this.defaultTimeout = 100;
4640
- this.namespace = '';
4730
+ /**
4731
+ * Prefix used for CSS class names and local-storage keys to avoid collisions
4732
+ * when multiple editor instances or applications share the same page.
4733
+ */ this.namespace = '';
4641
4734
  /**
4642
4735
  * Editor loads completely without plugins. Useful when debugging your own plugin.
4643
4736
  */ this.safeMode = false;
4644
4737
  /**
4645
4738
  * Editor's width
4646
4739
  *
4647
- * @example
4648
4740
  * ```javascript
4649
4741
  * Jodit.make('.editor', {
4650
4742
  * width: '100%',
4651
4743
  * })
4652
4744
  * ```
4653
- * @example
4654
4745
  * ```javascript
4655
4746
  * Jodit.make('.editor', {
4656
4747
  * width: 600, // equivalent for '600px'
4657
4748
  * })
4658
4749
  * ```
4659
- * @example
4660
4750
  * ```javascript
4661
4751
  * Jodit.make('.editor', {
4662
4752
  * width: 'auto', // autosize
@@ -4666,19 +4756,16 @@ let ConfigPrototype = {};
4666
4756
  /**
4667
4757
  * Editor's height
4668
4758
  *
4669
- * @example
4670
4759
  * ```javascript
4671
4760
  * Jodit.make('.editor', {
4672
4761
  * height: '100%',
4673
4762
  * })
4674
4763
  * ```
4675
- * @example
4676
4764
  * ```javascript
4677
4765
  * Jodit.make('.editor', {
4678
4766
  * height: 600, // equivalent for '600px'
4679
4767
  * })
4680
4768
  * ```
4681
- * @example
4682
4769
  * ```javascript
4683
4770
  * Jodit.make('.editor', {
4684
4771
  * height: 'auto', // default - autosize
@@ -4715,7 +4802,32 @@ let ConfigPrototype = {};
4715
4802
  * });
4716
4803
  * ```
4717
4804
  */ this.preset = 'custom';
4718
- this.presets = {
4805
+ /**
4806
+ * Dictionary of named configuration presets. Each key is a preset name and the value
4807
+ * is a partial options object that will be merged into the editor config when
4808
+ * {@link Config.preset} matches the key.
4809
+ *
4810
+ * ```javascript
4811
+ * // Use a built-in preset
4812
+ * Jodit.make('#editor', {
4813
+ * preset: 'inline'
4814
+ * });
4815
+ * ```
4816
+ *
4817
+ * ```javascript
4818
+ * // Define and use a custom preset
4819
+ * Jodit.defaultOptions.presets.myCompact = {
4820
+ * toolbarButtonSize: 'small',
4821
+ * showCharsCounter: false,
4822
+ * showWordsCounter: false,
4823
+ * showXPathInStatusbar: false
4824
+ * };
4825
+ *
4826
+ * Jodit.make('#editor', {
4827
+ * preset: 'myCompact'
4828
+ * });
4829
+ * ```
4830
+ */ this.presets = {
4719
4831
  inline: {
4720
4832
  inline: true,
4721
4833
  toolbar: false,
@@ -4727,7 +4839,10 @@ let ConfigPrototype = {};
4727
4839
  showPlaceholder: false
4728
4840
  }
4729
4841
  };
4730
- this.ownerDocument = _core_constants_js__WEBPACK_IMPORTED_MODULE_0__.globalDocument;
4842
+ /**
4843
+ * The Document object the editor operates within. Defaults to the current `document`.
4844
+ * Override when the editor is created inside an iframe or a different browsing context.
4845
+ */ this.ownerDocument = _core_constants_js__WEBPACK_IMPORTED_MODULE_0__.globalDocument;
4731
4846
  /**
4732
4847
  * Allows you to specify the window in which the editor will be created. Default - window
4733
4848
  * This is necessary if you are creating the editor inside an iframe but the code is running in the parent window
@@ -4758,7 +4873,9 @@ let ConfigPrototype = {};
4758
4873
  * ```
4759
4874
  */ this.shadowRoot = null;
4760
4875
  /**
4761
- * z-index For editor
4876
+ * Base CSS `z-index` for the editor UI (toolbar, popups, dialogs).
4877
+ * Set to a higher value when other page elements overlap the editor.
4878
+ * `0` means no explicit z-index is applied.
4762
4879
  */ this.zIndex = 0;
4763
4880
  /**
4764
4881
  * Change the read-only state of the editor
@@ -4794,7 +4911,6 @@ let ConfigPrototype = {};
4794
4911
  /**
4795
4912
  * Size of icons in the toolbar (can be "small", "middle", "large")
4796
4913
  *
4797
- * @example
4798
4914
  * ```javascript
4799
4915
  * const editor = Jodit.make(".dark_editor", {
4800
4916
  * toolbarButtonSize: "small"
@@ -4805,11 +4921,13 @@ let ConfigPrototype = {};
4805
4921
  * Allow navigation in the toolbar of the editor by Tab key
4806
4922
  */ this.allowTabNavigation = false;
4807
4923
  /**
4808
- * Inline editing mode
4924
+ * When enabled, the editor renders without its own container chrome (toolbar, borders, statusbar).
4925
+ * The editable area becomes the element itself. Typically combined with
4926
+ * `toolbarInline: true` so a floating toolbar appears on selection.
4809
4927
  */ this.inline = false;
4810
4928
  /**
4811
4929
  * Theme (can be "dark")
4812
- * @example
4930
+ *
4813
4931
  * ```javascript
4814
4932
  * const editor = Jodit.make(".dark_editor", {
4815
4933
  * theme: "dark"
@@ -4822,10 +4940,9 @@ let ConfigPrototype = {};
4822
4940
  /**
4823
4941
  * Class name that can be appended to the editable area
4824
4942
  *
4825
- * @see [[Config.iframeCSSLinks]]
4826
- * @see [[Config.iframeStyle]]
4943
+ * @see {@link Config.iframeCSSLinks}
4944
+ * @see {@link Config.iframeStyle}
4827
4945
  *
4828
- * @example
4829
4946
  * ```javascript
4830
4947
  * Jodit.make('#editor', {
4831
4948
  * editorClassName: 'some_my_class'
@@ -4841,7 +4958,7 @@ let ConfigPrototype = {};
4841
4958
  */ this.editorClassName = false;
4842
4959
  /**
4843
4960
  * Class name that can be appended to the main editor container
4844
- * @example
4961
+ *
4845
4962
  * ```javascript
4846
4963
  * const jodit = Jodit.make('#editor', {
4847
4964
  * className: 'some_my_class'
@@ -4861,7 +4978,7 @@ let ConfigPrototype = {};
4861
4978
  /**
4862
4979
  * The internal styles of the editable area. They are intended to change
4863
4980
  * not the appearance of the editor, but to change the appearance of the content.
4864
- * @example
4981
+ *
4865
4982
  * ```javascript
4866
4983
  * Jodit.make('#editor', {
4867
4984
  * style: {
@@ -4872,13 +4989,14 @@ let ConfigPrototype = {};
4872
4989
  * ```
4873
4990
  */ this.style = false;
4874
4991
  /**
4992
+ * Inline CSS styles applied to the outer editor container element.
4993
+ * Use this to style the editor wrapper (borders, background, etc.) without affecting content.
4875
4994
  *
4876
- * @example
4877
4995
  * ```javascript
4878
4996
  * Jodit.make('#editor', {
4879
- * editorStyle: {
4880
- * font: '12px Arial',
4881
- * color: '#0c0c0c'
4997
+ * containerStyle: {
4998
+ * border: '1px solid #ccc',
4999
+ * background: '#f9f9f9'
4882
5000
  * }
4883
5001
  * });
4884
5002
  * ```
@@ -4887,7 +5005,6 @@ let ConfigPrototype = {};
4887
5005
  * Dictionary of variable values in css, a complete list can be found here
4888
5006
  * https://github.com/xdan/jodit/blob/main/src/styles/variables.less#L25
4889
5007
  *
4890
- * @example
4891
5008
  * ```js
4892
5009
  * const editor = Jodit.make('#editor', {
4893
5010
  * styleValues: {
@@ -4899,9 +5016,9 @@ let ConfigPrototype = {};
4899
5016
  * ```
4900
5017
  */ this.styleValues = {};
4901
5018
  /**
4902
- * After all, changes in editors for textarea will call change trigger
5019
+ * When enabled, the editor dispatches a native `change` event on the original
5020
+ * `<textarea>` element whenever the content changes, so standard DOM listeners work.
4903
5021
  *
4904
- * @example
4905
5022
  * ```javascript
4906
5023
  * const editor = Jodit.make('#editor');
4907
5024
  * document.getElementById('editor').addEventListener('change', function () {
@@ -4915,7 +5032,6 @@ let ConfigPrototype = {};
4915
5032
  * the page element direction. 'ltr' – Indicates a Left-To-Right text direction (like in English).
4916
5033
  * 'rtl' – Indicates a Right-To-Left text direction (like in Arabic).
4917
5034
  *
4918
- * @example
4919
5035
  * ```javascript
4920
5036
  * Jodit.make('.editor', {
4921
5037
  * direction: 'rtl'
@@ -4927,7 +5043,6 @@ let ConfigPrototype = {};
4927
5043
  * (navigator.language && navigator.language.substr(0, 2)) ||
4928
5044
  * (navigator.browserLanguage && navigator.browserLanguage.substr(0, 2)) || 'en'
4929
5045
  *
4930
- * @example
4931
5046
  * ```html
4932
5047
  * <!-- include in you page lang file -->
4933
5048
  * <script src="jodit/lang/de.js"></script>
@@ -4941,7 +5056,6 @@ let ConfigPrototype = {};
4941
5056
  /**
4942
5057
  * if true all Lang.i18n(key) return `{key}`
4943
5058
  *
4944
- * @example
4945
5059
  * ```html
4946
5060
  * <script>
4947
5061
  * var editor = Jodit.make('.editor', {
@@ -4955,7 +5069,6 @@ let ConfigPrototype = {};
4955
5069
  /**
4956
5070
  * Collection of language pack data `{en: {'Type something': 'Type something', ...}}`
4957
5071
  *
4958
- * @example
4959
5072
  * ```javascript
4960
5073
  * const editor = Jodit.make('#editor', {
4961
5074
  * language: 'ru',
@@ -4987,11 +5100,11 @@ let ConfigPrototype = {};
4987
5100
  * Delay before show tooltip
4988
5101
  */ this.showTooltipDelay = 200;
4989
5102
  /**
4990
- * Instead of create custop tooltip - use native title tooltips
5103
+ * Instead of creating a custom tooltip, use the browser's native title tooltips
4991
5104
  */ this.useNativeTooltip = false;
4992
5105
  /**
4993
- * Default insert method
4994
- * @default insert_as_html
5106
+ * How pasted content is inserted into the editor by default.
5107
+ * Possible values: `insert_as_html`, `insert_as_text`, `insert_only_text`, `insert_clear_html`.
4995
5108
  */ this.defaultActionOnPaste = _core_constants_js__WEBPACK_IMPORTED_MODULE_0__.INSERT_AS_HTML;
4996
5109
  // TODO
4997
5110
  // autosave: false, // false or url
@@ -5004,7 +5117,6 @@ let ConfigPrototype = {};
5004
5117
  /**
5005
5118
  * When this option is enabled, the editor's content will be placed in an iframe and isolated from the rest of the page.
5006
5119
  *
5007
- * @example
5008
5120
  * ```javascript
5009
5121
  * Jodit.make('#editor', {
5010
5122
  * iframe: true,
@@ -5016,7 +5128,7 @@ let ConfigPrototype = {};
5016
5128
  /**
5017
5129
  * Allow editing the entire HTML document(html, head)
5018
5130
  * \> Works together with the iframe option.
5019
- * @example
5131
+ *
5020
5132
  * ```js
5021
5133
  * const editor = Jodit.make('#editor', {
5022
5134
  * iframe: true,
@@ -5035,7 +5147,7 @@ let ConfigPrototype = {};
5035
5147
  /**
5036
5148
  * Jodit.MODE_WYSIWYG The HTML editor allows you to write like MSWord,
5037
5149
  * Jodit.MODE_SOURCE syntax highlighting source editor
5038
- * @example
5150
+ *
5039
5151
  * ```javascript
5040
5152
  * var editor = Jodit.make('#editor', {
5041
5153
  * defaultMode: Jodit.MODE_SPLIT
@@ -5044,11 +5156,11 @@ let ConfigPrototype = {};
5044
5156
  * ```
5045
5157
  */ this.defaultMode = _core_constants_js__WEBPACK_IMPORTED_MODULE_0__.MODE_WYSIWYG;
5046
5158
  /**
5047
- * Use split mode
5159
+ * When enabled, the editor displays both the WYSIWYG view and the source-code view side by side.
5048
5160
  */ this.useSplitMode = false;
5049
5161
  /**
5050
5162
  * The colors in HEX representation to select a color for the background and for the text in colorpicker
5051
- * @example
5163
+ *
5052
5164
  * ```javascript
5053
5165
  * Jodit.make('#editor', {
5054
5166
  * colors: ['#ff0000', '#00ff00', '#0000ff']
@@ -5144,7 +5256,7 @@ let ConfigPrototype = {};
5144
5256
  };
5145
5257
  /**
5146
5258
  * The default tab color picker
5147
- * @example
5259
+ *
5148
5260
  * ```javascript
5149
5261
  * Jodit.make('#editor2', {
5150
5262
  * colorPickerDefaultTab: 'color'
@@ -5152,11 +5264,11 @@ let ConfigPrototype = {};
5152
5264
  * ```
5153
5265
  */ this.colorPickerDefaultTab = 'background';
5154
5266
  /**
5155
- * Image size defaults to a larger image
5267
+ * Default width (in pixels) applied to images inserted into the editor
5156
5268
  */ this.imageDefaultWidth = 300;
5157
5269
  /**
5158
5270
  * Do not display these buttons that are on the list
5159
- * @example
5271
+ *
5160
5272
  * ```javascript
5161
5273
  * Jodit.make('#editor2', {
5162
5274
  * removeButtons: ['hr', 'source']
@@ -5165,7 +5277,7 @@ let ConfigPrototype = {};
5165
5277
  */ this.removeButtons = [];
5166
5278
  /**
5167
5279
  * Do not init these plugins
5168
- * @example
5280
+ *
5169
5281
  * ```typescript
5170
5282
  * var editor = Jodit.make('.editor', {
5171
5283
  * disablePlugins: 'table,iframe'
@@ -5178,7 +5290,7 @@ let ConfigPrototype = {};
5178
5290
  */ this.disablePlugins = [];
5179
5291
  /**
5180
5292
  * Init and download extra plugins
5181
- * @example
5293
+ *
5182
5294
  * ```typescript
5183
5295
  * var editor = Jodit.make('.editor', {
5184
5296
  * extraPlugins: ['emoji']
@@ -5187,14 +5299,13 @@ let ConfigPrototype = {};
5187
5299
  * It will try load %SCRIPT_PATH%/plugins/emoji/emoji.js and after load will try init it
5188
5300
  */ this.extraPlugins = [];
5189
5301
  /**
5190
- * These buttons list will be added to the option. Buttons
5302
+ * Additional buttons appended to the {@link Config.buttons} list
5191
5303
  */ this.extraButtons = [];
5192
5304
  /**
5193
5305
  * By default, you can only install an icon from the Jodit suite.
5194
5306
  * You can add your icon to the set using the `Jodit.modules.Icon.set (name, svg Code)` method.
5195
5307
  * But for a declarative declaration, you can use this option.
5196
5308
  *
5197
- * @example
5198
5309
  * ```js
5199
5310
  * Jodit.modules.Icon.set('someIcon', '<svg><path.../></svg>');
5200
5311
  * const editor = Jodit.make({
@@ -5203,8 +5314,9 @@ let ConfigPrototype = {};
5203
5314
  * icon: 'someIcon'
5204
5315
  * }]
5205
5316
  * });
5317
+ * ```
5206
5318
  *
5207
- * @example
5319
+ * ```js
5208
5320
  * const editor = Jodit.make({
5209
5321
  * extraIcons: {
5210
5322
  * someIcon: '<svg><path.../></svg>'
@@ -5215,7 +5327,7 @@ let ConfigPrototype = {};
5215
5327
  * }]
5216
5328
  * });
5217
5329
  * ```
5218
- * @example
5330
+ *
5219
5331
  * ```js
5220
5332
  * const editor = Jodit.make({
5221
5333
  * extraButtons: [{
@@ -5227,7 +5339,7 @@ let ConfigPrototype = {};
5227
5339
  */ this.extraIcons = {};
5228
5340
  /**
5229
5341
  * Default attributes for created inside editor elements
5230
- * @example
5342
+ *
5231
5343
  * ```js
5232
5344
  * const editor2 = Jodit.make('#editor', {
5233
5345
  * createAttributes: {
@@ -5247,7 +5359,7 @@ let ConfigPrototype = {};
5247
5359
  * expect(ul.className).equals('ui-test');
5248
5360
  * ```
5249
5361
  * Or JSX in React
5250
- * @example
5362
+ *
5251
5363
  * ```jsx
5252
5364
  * import React, {useState, useRef} from 'react';
5253
5365
  * import JoditEditor from "jodit-react";
@@ -5279,7 +5391,7 @@ let ConfigPrototype = {};
5279
5391
  /**
5280
5392
  * The list of buttons that appear in the editor's toolbar on large places (≥ options.sizeLG).
5281
5393
  * Note - this is not the width of the device, the width of the editor
5282
- * @example
5394
+ *
5283
5395
  * ```javascript
5284
5396
  * Jodit.make('#editor', {
5285
5397
  * buttons: ['bold', 'italic', 'source'],
@@ -5287,7 +5399,7 @@ let ConfigPrototype = {};
5287
5399
  * buttonsXS: ['bold', 'fullsize'],
5288
5400
  * });
5289
5401
  * ```
5290
- * @example
5402
+ *
5291
5403
  * ```javascript
5292
5404
  * Jodit.make('#editor2', {
5293
5405
  * buttons: [{
@@ -5311,7 +5423,7 @@ let ConfigPrototype = {};
5311
5423
  * }]
5312
5424
  * });
5313
5425
  * ```
5314
- * @example
5426
+ *
5315
5427
  * ```javascript
5316
5428
  * Jodit.make('#editor2', {
5317
5429
  * buttons: Jodit.defaultOptions.buttons.concat([{
@@ -5432,7 +5544,7 @@ let ConfigPrototype = {};
5432
5544
  * ```
5433
5545
  */ this.events = {};
5434
5546
  /**
5435
- * Buttons in toolbat without SVG - only texts
5547
+ * Buttons in toolbar without SVG - only texts
5436
5548
  */ this.textIcons = false;
5437
5549
  /**
5438
5550
  * Element for dialog container
@@ -6616,7 +6728,7 @@ let UIButton = class UIButton extends _element_js__WEBPACK_IMPORTED_MODULE_9__.U
6616
6728
  }
6617
6729
  onChangeText() {
6618
6730
  this.text.textContent = this.jodit.i18n(this.state.text);
6619
- this.__updateAriaLabel();
6731
+ this.updateAriaLabel();
6620
6732
  }
6621
6733
  onChangeTextSetMode() {
6622
6734
  this.setMod('text-icons', Boolean(this.state.text.trim().length));
@@ -6639,9 +6751,9 @@ let UIButton = class UIButton extends _element_js__WEBPACK_IMPORTED_MODULE_9__.U
6639
6751
  (0,_helpers_utils_attr_js__WEBPACK_IMPORTED_MODULE_8__.attr)(this.container, 'title', i8nTooltip);
6640
6752
  }
6641
6753
  (0,_helpers_utils_attr_js__WEBPACK_IMPORTED_MODULE_8__.attr)(this.container, 'aria-label', i8nTooltip);
6642
- this.__updateAriaLabel();
6754
+ this.updateAriaLabel();
6643
6755
  }
6644
- __updateAriaLabel() {
6756
+ updateAriaLabel() {
6645
6757
  const hasText = this.state.text.trim().length > 0;
6646
6758
  const i8nTooltip = this.state.tooltip ? this.jodit.i18n(this.state.tooltip) : null;
6647
6759
  (0,_helpers_utils_attr_js__WEBPACK_IMPORTED_MODULE_8__.attr)(this.container, 'aria-label', i8nTooltip);
@@ -7124,6 +7236,9 @@ let ToolbarCollection = class ToolbarCollection extends _core_ui_group_list_js__
7124
7236
  className() {
7125
7237
  return 'ToolbarCollection';
7126
7238
  }
7239
+ getRole() {
7240
+ return 'toolbar';
7241
+ }
7127
7242
  /**
7128
7243
  * First button in a list
7129
7244
  */ get firstButton() {
@@ -12846,16 +12961,21 @@ _config_js__WEBPACK_IMPORTED_MODULE_1__.Config.prototype.popup = {
12846
12961
 
12847
12962
 
12848
12963
  let UIList = class UIList extends _group_js__WEBPACK_IMPORTED_MODULE_6__.UIGroup {
12849
- /** @override */ className() {
12964
+ className() {
12850
12965
  return 'UIList';
12851
12966
  }
12967
+ getRole() {
12968
+ return 'list';
12969
+ }
12852
12970
  __onChangeMode() {
12853
12971
  this.setMod('mode', this.mode);
12854
12972
  }
12855
12973
  /**
12856
12974
  * Make new group and append it in list of elements
12857
- */ makeGroup() {
12858
- return new _group_js__WEBPACK_IMPORTED_MODULE_6__.UIGroup(this.jodit);
12975
+ */ makeGroup(role) {
12976
+ return new _group_js__WEBPACK_IMPORTED_MODULE_6__.UIGroup(this.jodit, [], role ? {
12977
+ role
12978
+ } : undefined);
12859
12979
  }
12860
12980
  /**
12861
12981
  * All buttons from list
@@ -12875,7 +12995,7 @@ let UIList = class UIList extends _group_js__WEBPACK_IMPORTED_MODULE_6__.UIGroup
12875
12995
  items = (0,_helpers_array_split_array_js__WEBPACK_IMPORTED_MODULE_4__.splitArray)(items);
12876
12996
  this.clear();
12877
12997
  let lastBtnSeparator = false;
12878
- let line = this.makeGroup();
12998
+ let line = this.makeGroup('group');
12879
12999
  this.append(line);
12880
13000
  line.setMod('line', true);
12881
13001
  let group;
@@ -12883,7 +13003,7 @@ let UIList = class UIList extends _group_js__WEBPACK_IMPORTED_MODULE_6__.UIGroup
12883
13003
  let elm = null;
12884
13004
  switch(control.name){
12885
13005
  case '\n':
12886
- line = this.makeGroup();
13006
+ line = this.makeGroup('group');
12887
13007
  line.setMod('line', true);
12888
13008
  group = this.makeGroup();
12889
13009
  line.append(group);
@@ -19599,6 +19719,7 @@ let ToolbarEditorCollection = class ToolbarEditorCollection extends _collection_
19599
19719
  * @see https://github.com/jodit/jodit-react/issues/138
19600
19720
  */ prependInvisibleInput(container) {
19601
19721
  const input = this.j.create.element('input', {
19722
+ name: 'jodit-toolbar-focus-helper_' + this.j.id,
19602
19723
  tabIndex: -1,
19603
19724
  disabled: true,
19604
19725
  style: 'width: 0; height:0; position: absolute; visibility: hidden;'
@@ -24148,9 +24269,10 @@ _config_js__WEBPACK_IMPORTED_MODULE_0__.Config.prototype.toolbarStickyOffset = 0
24148
24269
  /* harmony import */ var _decorators_derive_derive_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(55153);
24149
24270
  /* harmony import */ var _dom_dom_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(2748);
24150
24271
  /* harmony import */ var _helpers_checker_is_string_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(70799);
24151
- /* harmony import */ var _traits_elms_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(14316);
24152
- /* harmony import */ var _traits_mods_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(34176);
24153
- /* harmony import */ var _icon_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(12153);
24272
+ /* harmony import */ var _helpers_utils_attr_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(29960);
24273
+ /* harmony import */ var _traits_elms_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(14316);
24274
+ /* harmony import */ var _traits_mods_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(34176);
24275
+ /* harmony import */ var _icon_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(12153);
24154
24276
  /*!
24155
24277
  * Jodit Editor (https://xdsoft.net/jodit/)
24156
24278
  * Released under MIT see LICENSE.txt in the project root for license information.
@@ -24169,7 +24291,12 @@ var UIElement_1;
24169
24291
 
24170
24292
 
24171
24293
 
24294
+
24172
24295
  let UIElement = UIElement_1 = class UIElement extends _component_index_js__WEBPACK_IMPORTED_MODULE_0__.ViewComponent {
24296
+ getRole() {
24297
+ var _a;
24298
+ return ((_a = this.options) === null || _a === void 0 ? void 0 : _a.role) || '';
24299
+ }
24173
24300
  get parentElement() {
24174
24301
  return this.__parentElement;
24175
24302
  }
@@ -24258,19 +24385,22 @@ let UIElement = UIElement_1 = class UIElement extends _component_index_js__WEBPA
24258
24385
  return result;
24259
24386
  }
24260
24387
  parseTemplate(result) {
24261
- return this.j.c.fromHTML(result.replace(/\*([^*]+?)\*/g, (_, name)=>_icon_js__WEBPACK_IMPORTED_MODULE_6__.Icon.get(name) || '').replace(/&_/g, this.componentName + '_').replace(/~([^~]+?)~/g, (_, s)=>this.i18n(s)));
24388
+ return this.j.c.fromHTML(result.replace(/\*([^*]+?)\*/g, (_, name)=>_icon_js__WEBPACK_IMPORTED_MODULE_7__.Icon.get(name) || '').replace(/&_/g, this.componentName + '_').replace(/~([^~]+?)~/g, (_, s)=>this.i18n(s)));
24262
24389
  }
24263
24390
  /** @override */ destruct() {
24264
24391
  _dom_dom_js__WEBPACK_IMPORTED_MODULE_2__.Dom.safeRemove(this.container);
24265
24392
  this.parentElement = null;
24266
24393
  return super.destruct();
24267
24394
  }
24268
- /** @override */ constructor(jodit, options){
24395
+ constructor(jodit, options){
24269
24396
  super(jodit);
24270
24397
  this.name = '';
24271
24398
  this.__parentElement = null;
24272
24399
  this.mods = {};
24400
+ this.options = options;
24273
24401
  this.container = this.createContainer(options);
24402
+ const role = this.getRole();
24403
+ role && (0,_helpers_utils_attr_js__WEBPACK_IMPORTED_MODULE_4__.attr)(this.container, 'role', role);
24274
24404
  Object.defineProperty(this.container, 'component', {
24275
24405
  value: this,
24276
24406
  configurable: true
@@ -24278,7 +24408,7 @@ let UIElement = UIElement_1 = class UIElement extends _component_index_js__WEBPA
24278
24408
  }
24279
24409
  };
24280
24410
  UIElement = UIElement_1 = __decorate([
24281
- (0,_decorators_derive_derive_js__WEBPACK_IMPORTED_MODULE_1__.derive)(_traits_mods_js__WEBPACK_IMPORTED_MODULE_5__.Mods, _traits_elms_js__WEBPACK_IMPORTED_MODULE_4__.Elms)
24411
+ (0,_decorators_derive_derive_js__WEBPACK_IMPORTED_MODULE_1__.derive)(_traits_mods_js__WEBPACK_IMPORTED_MODULE_6__.Mods, _traits_elms_js__WEBPACK_IMPORTED_MODULE_5__.Elms)
24282
24412
  ], UIElement);
24283
24413
 
24284
24414
 
@@ -31258,6 +31388,10 @@ let UIGroup = UIGroup_1 = class UIGroup extends _element_js__WEBPACK_IMPORTED_MO
31258
31388
  className() {
31259
31389
  return 'UIGroup';
31260
31390
  }
31391
+ getRole() {
31392
+ var _a;
31393
+ return ((_a = this.options) === null || _a === void 0 ? void 0 : _a.role) || 'list';
31394
+ }
31261
31395
  /**
31262
31396
  * All group children
31263
31397
  */ get allChildren() {
@@ -38609,6 +38743,16 @@ let ToolbarButton = class ToolbarButton extends _core_ui_button_index_js__WEBPAC
38609
38743
  className() {
38610
38744
  return 'ToolbarButton';
38611
38745
  }
38746
+ getRole() {
38747
+ return 'listitem';
38748
+ }
38749
+ updateAriaLabel() {
38750
+ super.updateAriaLabel();
38751
+ if (this.trigger) {
38752
+ const i8nTooltip = this.state.tooltip ? this.jodit.i18n(this.state.tooltip) : null;
38753
+ (0,_core_helpers_utils_attr_js__WEBPACK_IMPORTED_MODULE_14__.attr)(this.trigger, 'aria-label', i8nTooltip);
38754
+ }
38755
+ }
38612
38756
  /**
38613
38757
  * Get parent toolbar
38614
38758
  */ get toolbar() {
@@ -38676,14 +38820,13 @@ let ToolbarButton = class ToolbarButton extends _core_ui_button_index_js__WEBPAC
38676
38820
  const cn = this.componentName;
38677
38821
  const container = this.j.c.span(cn);
38678
38822
  const button = super.createContainer();
38679
- (0,_core_helpers_utils_attr_js__WEBPACK_IMPORTED_MODULE_14__.attr)(container, 'role', 'listitem');
38680
38823
  button.classList.remove(cn);
38681
38824
  button.classList.add(cn + '__button');
38682
38825
  Object.defineProperty(button, 'component', {
38683
38826
  value: this
38684
38827
  });
38685
38828
  container.appendChild(button);
38686
- const trigger = this.j.c.fromHTML(`<span role="trigger" class="${cn}__trigger">${_core_ui_icon_js__WEBPACK_IMPORTED_MODULE_18__.Icon.get('chevron')}</span>`);
38829
+ const trigger = this.j.c.fromHTML(`<span role="button" aria-haspopup="true" aria-expanded="false" class="${cn}__trigger">${_core_ui_icon_js__WEBPACK_IMPORTED_MODULE_18__.Icon.get('chevron')}</span>`);
38687
38830
  // For caching
38688
38831
  button.appendChild(trigger);
38689
38832
  return container;
@@ -38742,6 +38885,7 @@ let ToolbarButton = class ToolbarButton extends _core_ui_button_index_js__WEBPAC
38742
38885
  return;
38743
38886
  }
38744
38887
  const { control: ctr } = this;
38888
+ (0,_core_helpers_utils_attr_js__WEBPACK_IMPORTED_MODULE_14__.attr)(this.trigger, 'aria-expanded', true);
38745
38889
  e.buffer = {
38746
38890
  actionTrigger: this
38747
38891
  };
@@ -38855,6 +38999,9 @@ let ToolbarButton = class ToolbarButton extends _core_ui_button_index_js__WEBPAC
38855
38999
  this.openedPopup.close();
38856
39000
  this.openedPopup.destruct();
38857
39001
  this.openedPopup = null;
39002
+ if (this.trigger) {
39003
+ (0,_core_helpers_utils_attr_js__WEBPACK_IMPORTED_MODULE_14__.attr)(this.trigger, 'aria-expanded', false);
39004
+ }
38858
39005
  }
38859
39006
  }
38860
39007
  /**
@@ -41556,13 +41703,12 @@ _config_js__WEBPACK_IMPORTED_MODULE_0__.Config.prototype.maxWidth = '100%';
41556
41703
  /**
41557
41704
  * Editor's min-height
41558
41705
  *
41559
- * @example
41560
41706
  * ```javascript
41561
41707
  * Jodit.make('.editor', {
41562
41708
  * minHeight: '30%' //min-height: 30%
41563
41709
  * })
41564
41710
  * ```
41565
- * @example
41711
+ *
41566
41712
  * ```javascript
41567
41713
  * Jodit.make('.editor', {
41568
41714
  * minHeight: 200 //min-height: 200px
@@ -42620,7 +42766,7 @@ __webpack_require__.r(__webpack_exports__);
42620
42766
  * ```
42621
42767
  * @packageDocumentation
42622
42768
  * @module constants
42623
- */ const APP_VERSION = "4.9.21";
42769
+ */ const APP_VERSION = "4.9.25";
42624
42770
  // prettier-ignore
42625
42771
  const ES = "es2021";
42626
42772
  const IS_ES_MODERN = true;
@@ -43255,11 +43401,13 @@ ToolbarSelect = __decorate([
43255
43401
  /* harmony import */ var _core_constants_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(82758);
43256
43402
  /* harmony import */ var _core_dom_index_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(22732);
43257
43403
  /* harmony import */ var _core_global_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(580);
43258
- /* harmony import */ var _core_helpers_index_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(21537);
43259
- /* harmony import */ var _core_plugin_index_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(50911);
43260
- /* harmony import */ var _modules_context_menu_context_menu_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(80870);
43261
- /* harmony import */ var _modules_toolbar_factory_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(21491);
43262
- /* harmony import */ var _config_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(86012);
43404
+ /* harmony import */ var _core_helpers_string_trim_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(49055);
43405
+ /* harmony import */ var _core_helpers_utils_attr_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(29960);
43406
+ /* harmony import */ var _core_helpers_utils_selector_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(76078);
43407
+ /* harmony import */ var _core_plugin_index_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(50911);
43408
+ /* harmony import */ var _modules_context_menu_context_menu_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(80870);
43409
+ /* harmony import */ var _modules_toolbar_factory_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(21491);
43410
+ /* harmony import */ var _config_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(86012);
43263
43411
  /*!
43264
43412
  * Jodit Editor (https://xdsoft.net/jodit/)
43265
43413
  * Released under MIT see LICENSE.txt in the project root for license information.
@@ -43272,12 +43420,15 @@ ToolbarSelect = __decorate([
43272
43420
 
43273
43421
 
43274
43422
 
43423
+
43424
+
43275
43425
  /**
43276
43426
  * Show a path to a current element in status bar
43277
- */ class xpath extends _core_plugin_index_js__WEBPACK_IMPORTED_MODULE_4__.Plugin {
43427
+ */ class xpath extends _core_plugin_index_js__WEBPACK_IMPORTED_MODULE_6__.Plugin {
43278
43428
  afterInit() {
43279
43429
  if (this.j.o.showXPathInStatusbar) {
43280
43430
  this.container = this.j.c.div('jodit-xpath');
43431
+ (0,_core_helpers_utils_attr_js__WEBPACK_IMPORTED_MODULE_4__.attr)(this.container, 'role', 'list');
43281
43432
  const init = ()=>{
43282
43433
  if (!this.j.o.showXPathInStatusbar || !this.container) {
43283
43434
  return;
@@ -43292,7 +43443,7 @@ ToolbarSelect = __decorate([
43292
43443
  this.appendSelectAll();
43293
43444
  }
43294
43445
  };
43295
- this.j.e.off('.xpath').on('mouseup.xpath change.xpath keydown.xpath changeSelection.xpath', this.calcPath).on('afterSetMode.xpath afterInit.xpath changePlace.xpath', init);
43446
+ this.j.e.off('.xpath').on('pointerup.xpath change.xpath keydown.xpath changeSelection.xpath', this.calcPath).on('afterSetMode.xpath afterInit.xpath changePlace.xpath', init);
43296
43447
  init();
43297
43448
  this.calcPath();
43298
43449
  }
@@ -43311,7 +43462,7 @@ ToolbarSelect = __decorate([
43311
43462
  super(...arguments);
43312
43463
  this.onContext = (bindElement, event)=>{
43313
43464
  if (!this.menu) {
43314
- this.menu = new _modules_context_menu_context_menu_js__WEBPACK_IMPORTED_MODULE_5__.ContextMenu(this.j);
43465
+ this.menu = new _modules_context_menu_context_menu_js__WEBPACK_IMPORTED_MODULE_7__.ContextMenu(this.j);
43315
43466
  }
43316
43467
  this.menu.show(event.clientX, event.clientY, [
43317
43468
  {
@@ -43338,7 +43489,7 @@ ToolbarSelect = __decorate([
43338
43489
  };
43339
43490
  this.onSelectPath = (bindElement, event)=>{
43340
43491
  this.j.s.focus();
43341
- const path = (0,_core_helpers_index_js__WEBPACK_IMPORTED_MODULE_3__.attr)(event.target, '-path') || '/';
43492
+ const path = (0,_core_helpers_utils_attr_js__WEBPACK_IMPORTED_MODULE_4__.attr)(event.target, '-path') || '/';
43342
43493
  if (path === '/') {
43343
43494
  this.j.execCommand('selectall');
43344
43495
  return false;
@@ -43354,7 +43505,7 @@ ToolbarSelect = __decorate([
43354
43505
  return false;
43355
43506
  };
43356
43507
  this.tpl = (bindElement, path, name, title)=>{
43357
- const item = this.j.c.fromHTML(`<span class="jodit-xpath__item"><a role="button" data-path="${path}" title="${title}" tabindex="-1"'>${(0,_core_helpers_index_js__WEBPACK_IMPORTED_MODULE_3__.trim)(name)}</a></span>`);
43508
+ const item = this.j.c.fromHTML(`<span class="jodit-xpath__item"><a role="button" data-path="${path}" title="${title}" tabindex="-1"'>${(0,_core_helpers_string_trim_js__WEBPACK_IMPORTED_MODULE_3__.trim)(name)}</a></span>`);
43358
43509
  const a = item.firstChild;
43359
43510
  this.j.e.on(a, 'click', this.onSelectPath.bind(this, bindElement)).on(a, 'contextmenu', this.onContext.bind(this, bindElement));
43360
43511
  return item;
@@ -43367,7 +43518,7 @@ ToolbarSelect = __decorate([
43367
43518
  };
43368
43519
  this.appendSelectAll = ()=>{
43369
43520
  this.removeSelectAll();
43370
- this.selectAllButton = (0,_modules_toolbar_factory_js__WEBPACK_IMPORTED_MODULE_6__.makeButton)(this.j, {
43521
+ this.selectAllButton = (0,_modules_toolbar_factory_js__WEBPACK_IMPORTED_MODULE_8__.makeButton)(this.j, {
43371
43522
  name: 'selectall',
43372
43523
  ...this.j.o.controls.selectall
43373
43524
  });
@@ -43387,7 +43538,7 @@ ToolbarSelect = __decorate([
43387
43538
  _core_dom_index_js__WEBPACK_IMPORTED_MODULE_1__.Dom.up(current, (elm)=>{
43388
43539
  if (elm && this.j.editor !== elm && !_core_dom_index_js__WEBPACK_IMPORTED_MODULE_1__.Dom.isText(elm) && !_core_dom_index_js__WEBPACK_IMPORTED_MODULE_1__.Dom.isComment(elm)) {
43389
43540
  name = elm.nodeName.toLowerCase();
43390
- xpth = (0,_core_helpers_index_js__WEBPACK_IMPORTED_MODULE_3__.getXPathByElement)(elm, this.j.editor).replace(/^\//, '');
43541
+ xpth = (0,_core_helpers_utils_selector_js__WEBPACK_IMPORTED_MODULE_5__.getXPathByElement)(elm, this.j.editor).replace(/^\//, '');
43391
43542
  li = this.tpl(elm, xpth, name, this.j.i18n('Select %s', name));
43392
43543
  this.container && this.container.insertBefore(li, this.container.firstChild);
43393
43544
  }