suneditor 3.0.0-beta.9 → 3.0.0-rc.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (380) hide show
  1. package/README.md +65 -57
  2. package/dist/suneditor-contents.min.css +1 -0
  3. package/dist/suneditor.min.css +1 -1
  4. package/dist/suneditor.min.js +1 -1
  5. package/package.json +110 -61
  6. package/src/assets/design/color.css +36 -17
  7. package/src/assets/design/size.css +2 -0
  8. package/src/assets/icons/defaultIcons.js +17 -2
  9. package/src/assets/suneditor-contents.css +51 -16
  10. package/src/assets/suneditor.css +116 -43
  11. package/src/core/config/contextProvider.js +288 -0
  12. package/src/core/config/eventManager.js +188 -0
  13. package/src/core/config/instanceCheck.js +59 -0
  14. package/src/core/config/optionProvider.js +452 -0
  15. package/src/core/editor.js +166 -1637
  16. package/src/core/event/actions/index.js +229 -0
  17. package/src/core/event/effects/common.registry.js +74 -0
  18. package/src/core/event/effects/keydown.registry.js +573 -0
  19. package/src/core/event/effects/ruleHelpers.js +148 -0
  20. package/src/core/event/eventOrchestrator.js +944 -0
  21. package/src/core/event/executor.js +27 -0
  22. package/src/core/{base/eventHandlers → event/handlers}/handler_toolbar.js +27 -28
  23. package/src/core/{base/eventHandlers → event/handlers}/handler_ww_clipboard.js +10 -8
  24. package/src/core/{base/eventHandlers → event/handlers}/handler_ww_dragDrop.js +22 -23
  25. package/src/core/event/handlers/handler_ww_input.js +75 -0
  26. package/src/core/event/handlers/handler_ww_key.js +228 -0
  27. package/src/core/event/handlers/handler_ww_mouse.js +166 -0
  28. package/src/core/event/ports.js +211 -0
  29. package/src/core/event/reducers/keydown.reducer.js +97 -0
  30. package/src/core/event/rules/keydown.rule.arrow.js +63 -0
  31. package/src/core/event/rules/keydown.rule.backspace.js +208 -0
  32. package/src/core/event/rules/keydown.rule.delete.js +132 -0
  33. package/src/core/event/rules/keydown.rule.enter.js +150 -0
  34. package/src/core/event/rules/keydown.rule.tab.js +35 -0
  35. package/src/core/event/support/defaultLineManager.js +136 -0
  36. package/src/core/event/support/selectionState.js +204 -0
  37. package/src/core/kernel/coreKernel.js +320 -0
  38. package/src/core/kernel/kernelInjector.js +19 -0
  39. package/src/core/kernel/store.js +173 -0
  40. package/src/core/{class → logic/dom}/char.js +42 -45
  41. package/src/core/logic/dom/format.js +1075 -0
  42. package/src/core/{class → logic/dom}/html.js +743 -624
  43. package/src/core/logic/dom/inline.js +1847 -0
  44. package/src/core/logic/dom/listFormat.js +601 -0
  45. package/src/core/{class → logic/dom}/nodeTransform.js +92 -72
  46. package/src/core/{class → logic/dom}/offset.js +254 -317
  47. package/src/core/logic/dom/selection.js +754 -0
  48. package/src/core/logic/panel/menu.js +389 -0
  49. package/src/core/logic/panel/toolbar.js +449 -0
  50. package/src/core/logic/panel/viewer.js +761 -0
  51. package/src/core/logic/shell/_commandExecutor.js +380 -0
  52. package/src/core/logic/shell/commandDispatcher.js +241 -0
  53. package/src/core/logic/shell/component.js +970 -0
  54. package/src/core/logic/shell/focusManager.js +110 -0
  55. package/src/core/{base → logic/shell}/history.js +110 -60
  56. package/src/core/logic/shell/pluginManager.js +363 -0
  57. package/src/core/logic/shell/shortcuts.js +130 -0
  58. package/src/core/logic/shell/ui.js +904 -0
  59. package/src/core/schema/context.js +66 -0
  60. package/src/core/schema/frameContext.js +160 -0
  61. package/src/core/schema/options.js +628 -0
  62. package/src/core/section/constructor.js +194 -500
  63. package/src/core/section/documentType.js +297 -222
  64. package/src/events.js +808 -543
  65. package/src/helper/clipboard.js +27 -16
  66. package/src/helper/converter.js +100 -78
  67. package/src/helper/dom/domCheck.js +56 -30
  68. package/src/helper/dom/domQuery.js +159 -89
  69. package/src/helper/dom/domUtils.js +114 -49
  70. package/src/helper/dom/index.js +5 -1
  71. package/src/helper/env.js +26 -26
  72. package/src/helper/index.js +1 -1
  73. package/src/helper/keyCodeMap.js +25 -28
  74. package/src/helper/numbers.js +4 -8
  75. package/src/helper/unicode.js +4 -8
  76. package/src/hooks/base.js +307 -0
  77. package/src/hooks/params.js +130 -0
  78. package/src/interfaces/contracts.js +227 -0
  79. package/src/interfaces/index.js +7 -0
  80. package/src/interfaces/plugins.js +239 -0
  81. package/src/langs/ckb.js +4 -4
  82. package/src/langs/cs.js +4 -4
  83. package/src/langs/da.js +4 -4
  84. package/src/langs/de.js +4 -4
  85. package/src/langs/en.js +4 -4
  86. package/src/langs/es.js +4 -4
  87. package/src/langs/fa.js +4 -4
  88. package/src/langs/fr.js +4 -4
  89. package/src/langs/he.js +4 -4
  90. package/src/langs/hu.js +4 -4
  91. package/src/langs/it.js +4 -4
  92. package/src/langs/ja.js +4 -4
  93. package/src/langs/km.js +4 -4
  94. package/src/langs/ko.js +4 -4
  95. package/src/langs/lv.js +4 -4
  96. package/src/langs/nl.js +4 -4
  97. package/src/langs/pl.js +4 -4
  98. package/src/langs/pt_br.js +13 -13
  99. package/src/langs/ro.js +4 -4
  100. package/src/langs/ru.js +4 -4
  101. package/src/langs/se.js +4 -4
  102. package/src/langs/tr.js +4 -4
  103. package/src/langs/uk.js +4 -4
  104. package/src/langs/ur.js +4 -4
  105. package/src/langs/zh_cn.js +4 -4
  106. package/src/modules/{Browser.js → contract/Browser.js} +119 -128
  107. package/src/modules/{ColorPicker.js → contract/ColorPicker.js} +132 -142
  108. package/src/modules/contract/Controller.js +589 -0
  109. package/src/modules/{Figure.js → contract/Figure.js} +591 -411
  110. package/src/modules/{HueSlider.js → contract/HueSlider.js} +125 -86
  111. package/src/modules/contract/Modal.js +357 -0
  112. package/src/modules/contract/index.js +9 -0
  113. package/src/modules/manager/ApiManager.js +197 -0
  114. package/src/modules/{FileManager.js → manager/FileManager.js} +128 -160
  115. package/src/modules/manager/index.js +5 -0
  116. package/src/modules/{ModalAnchorEditor.js → ui/ModalAnchorEditor.js} +108 -138
  117. package/src/modules/{SelectMenu.js → ui/SelectMenu.js} +119 -120
  118. package/src/modules/{_DragHandle.js → ui/_DragHandle.js} +1 -1
  119. package/src/modules/ui/index.js +6 -0
  120. package/src/plugins/browser/audioGallery.js +23 -26
  121. package/src/plugins/browser/fileBrowser.js +25 -28
  122. package/src/plugins/browser/fileGallery.js +20 -23
  123. package/src/plugins/browser/imageGallery.js +24 -23
  124. package/src/plugins/browser/videoGallery.js +27 -29
  125. package/src/plugins/command/blockquote.js +11 -17
  126. package/src/plugins/command/exportPDF.js +26 -26
  127. package/src/plugins/command/fileUpload.js +138 -133
  128. package/src/plugins/command/list_bulleted.js +48 -44
  129. package/src/plugins/command/list_numbered.js +48 -44
  130. package/src/plugins/dropdown/align.js +64 -50
  131. package/src/plugins/dropdown/backgroundColor.js +34 -35
  132. package/src/plugins/dropdown/{formatBlock.js → blockStyle.js} +43 -37
  133. package/src/plugins/dropdown/font.js +50 -36
  134. package/src/plugins/dropdown/fontColor.js +34 -35
  135. package/src/plugins/dropdown/hr.js +55 -50
  136. package/src/plugins/dropdown/layout.js +20 -15
  137. package/src/plugins/dropdown/lineHeight.js +46 -30
  138. package/src/plugins/dropdown/list.js +32 -33
  139. package/src/plugins/dropdown/paragraphStyle.js +40 -34
  140. package/src/plugins/dropdown/table/index.js +915 -0
  141. package/src/plugins/dropdown/table/render/table.html.js +308 -0
  142. package/src/plugins/dropdown/table/render/table.menu.js +121 -0
  143. package/src/plugins/dropdown/table/services/table.cell.js +465 -0
  144. package/src/plugins/dropdown/table/services/table.clipboard.js +414 -0
  145. package/src/plugins/dropdown/table/services/table.grid.js +504 -0
  146. package/src/plugins/dropdown/table/services/table.resize.js +463 -0
  147. package/src/plugins/dropdown/table/services/table.selection.js +466 -0
  148. package/src/plugins/dropdown/table/services/table.style.js +844 -0
  149. package/src/plugins/dropdown/table/shared/table.constants.js +109 -0
  150. package/src/plugins/dropdown/table/shared/table.utils.js +219 -0
  151. package/src/plugins/dropdown/template.js +20 -15
  152. package/src/plugins/dropdown/textStyle.js +28 -22
  153. package/src/plugins/field/mention.js +54 -49
  154. package/src/plugins/index.js +5 -5
  155. package/src/plugins/input/fontSize.js +100 -97
  156. package/src/plugins/input/pageNavigator.js +13 -10
  157. package/src/plugins/modal/audio.js +208 -219
  158. package/src/plugins/modal/drawing.js +99 -104
  159. package/src/plugins/modal/embed.js +323 -312
  160. package/src/plugins/modal/image/index.js +942 -0
  161. package/src/plugins/modal/image/render/image.html.js +150 -0
  162. package/src/plugins/modal/image/services/image.size.js +198 -0
  163. package/src/plugins/modal/image/services/image.upload.js +216 -0
  164. package/src/plugins/modal/image/shared/image.constants.js +20 -0
  165. package/src/plugins/modal/link.js +74 -54
  166. package/src/plugins/modal/math.js +126 -119
  167. package/src/plugins/modal/video/index.js +858 -0
  168. package/src/plugins/modal/video/render/video.html.js +131 -0
  169. package/src/plugins/modal/video/services/video.size.js +281 -0
  170. package/src/plugins/modal/video/services/video.upload.js +92 -0
  171. package/src/plugins/popup/anchor.js +57 -49
  172. package/src/suneditor.js +73 -61
  173. package/src/themes/cobalt.css +155 -0
  174. package/src/themes/dark.css +143 -120
  175. package/src/typedef.js +214 -63
  176. package/types/assets/icons/defaultIcons.d.ts +8 -0
  177. package/types/assets/suneditor-contents.css.d.ts +1 -0
  178. package/types/assets/suneditor.css.d.ts +1 -0
  179. package/types/core/config/contextProvider.d.ts +148 -0
  180. package/types/core/config/eventManager.d.ts +68 -0
  181. package/types/core/config/instanceCheck.d.ts +33 -0
  182. package/types/core/config/optionProvider.d.ts +147 -0
  183. package/types/core/editor.d.ts +27 -586
  184. package/types/core/event/actions/index.d.ts +50 -0
  185. package/types/core/event/effects/common.registry.d.ts +56 -0
  186. package/types/core/event/effects/keydown.registry.d.ts +80 -0
  187. package/types/core/event/effects/ruleHelpers.d.ts +36 -0
  188. package/types/core/event/eventOrchestrator.d.ts +191 -0
  189. package/types/core/event/executor.d.ts +13 -0
  190. package/types/core/event/handlers/handler_toolbar.d.ts +38 -0
  191. package/types/core/event/handlers/handler_ww_clipboard.d.ts +36 -0
  192. package/types/core/event/handlers/handler_ww_dragDrop.d.ts +26 -0
  193. package/types/core/event/handlers/handler_ww_input.d.ts +38 -0
  194. package/types/core/event/handlers/handler_ww_key.d.ts +40 -0
  195. package/types/core/event/handlers/handler_ww_mouse.d.ts +47 -0
  196. package/types/core/event/ports.d.ts +256 -0
  197. package/types/core/event/reducers/keydown.reducer.d.ts +84 -0
  198. package/types/core/event/rules/keydown.rule.arrow.d.ts +19 -0
  199. package/types/core/event/rules/keydown.rule.backspace.d.ts +18 -0
  200. package/types/core/event/rules/keydown.rule.delete.d.ts +18 -0
  201. package/types/core/event/rules/keydown.rule.enter.d.ts +18 -0
  202. package/types/core/event/rules/keydown.rule.tab.d.ts +18 -0
  203. package/types/core/event/support/defaultLineManager.d.ts +22 -0
  204. package/types/core/event/support/selectionState.d.ts +29 -0
  205. package/types/core/kernel/coreKernel.d.ts +219 -0
  206. package/types/core/kernel/kernelInjector.d.ts +16 -0
  207. package/types/core/kernel/store.d.ts +170 -0
  208. package/types/core/logic/dom/char.d.ts +46 -0
  209. package/types/core/logic/dom/format.d.ts +234 -0
  210. package/types/core/logic/dom/html.d.ts +290 -0
  211. package/types/core/logic/dom/inline.d.ts +93 -0
  212. package/types/core/logic/dom/listFormat.d.ts +101 -0
  213. package/types/core/logic/dom/nodeTransform.d.ts +110 -0
  214. package/types/core/logic/dom/offset.d.ts +335 -0
  215. package/types/core/logic/dom/selection.d.ts +165 -0
  216. package/types/core/logic/panel/menu.d.ts +93 -0
  217. package/types/core/logic/panel/toolbar.d.ts +128 -0
  218. package/types/core/logic/panel/viewer.d.ts +89 -0
  219. package/types/core/logic/shell/_commandExecutor.d.ts +18 -0
  220. package/types/core/logic/shell/commandDispatcher.d.ts +65 -0
  221. package/types/core/logic/shell/component.d.ts +182 -0
  222. package/types/core/logic/shell/focusManager.d.ts +31 -0
  223. package/types/core/{base → logic/shell}/history.d.ts +13 -12
  224. package/types/core/logic/shell/pluginManager.d.ts +115 -0
  225. package/types/core/logic/shell/shortcuts.d.ts +131 -0
  226. package/types/core/logic/shell/ui.d.ts +261 -0
  227. package/types/core/schema/context.d.ts +104 -0
  228. package/types/core/schema/frameContext.d.ts +320 -0
  229. package/types/core/schema/options.d.ts +1241 -0
  230. package/types/core/section/constructor.d.ts +117 -652
  231. package/types/core/section/documentType.d.ts +43 -61
  232. package/types/events.d.ts +796 -65
  233. package/types/helper/clipboard.d.ts +5 -4
  234. package/types/helper/converter.d.ts +55 -43
  235. package/types/helper/dom/domCheck.d.ts +27 -19
  236. package/types/helper/dom/domQuery.d.ts +76 -57
  237. package/types/helper/dom/domUtils.d.ts +62 -39
  238. package/types/helper/dom/index.d.ts +87 -1
  239. package/types/helper/env.d.ts +16 -13
  240. package/types/helper/index.d.ts +8 -2
  241. package/types/helper/keyCodeMap.d.ts +24 -23
  242. package/types/helper/numbers.d.ts +4 -6
  243. package/types/helper/unicode.d.ts +4 -3
  244. package/types/hooks/base.d.ts +239 -0
  245. package/types/hooks/params.d.ts +65 -0
  246. package/types/index.d.ts +20 -117
  247. package/types/interfaces/contracts.d.ts +183 -0
  248. package/types/interfaces/index.d.ts +3 -0
  249. package/types/interfaces/plugins.d.ts +168 -0
  250. package/types/langs/_Lang.d.ts +2 -2
  251. package/types/langs/index.d.ts +2 -2
  252. package/types/modules/contract/Browser.d.ts +262 -0
  253. package/types/modules/contract/ColorPicker.d.ts +99 -0
  254. package/types/modules/contract/Controller.d.ts +204 -0
  255. package/types/modules/contract/Figure.d.ts +529 -0
  256. package/types/modules/{HueSlider.d.ts → contract/HueSlider.d.ts} +39 -28
  257. package/types/modules/contract/Modal.d.ts +62 -0
  258. package/types/modules/contract/index.d.ts +7 -0
  259. package/types/modules/manager/ApiManager.d.ts +106 -0
  260. package/types/modules/manager/FileManager.d.ts +124 -0
  261. package/types/modules/manager/index.d.ts +3 -0
  262. package/types/modules/ui/ModalAnchorEditor.d.ts +152 -0
  263. package/types/modules/ui/SelectMenu.d.ts +107 -0
  264. package/types/modules/{_DragHandle.d.ts → ui/_DragHandle.d.ts} +1 -0
  265. package/types/modules/ui/index.d.ts +4 -0
  266. package/types/plugins/browser/audioGallery.d.ts +33 -41
  267. package/types/plugins/browser/fileBrowser.d.ts +42 -50
  268. package/types/plugins/browser/fileGallery.d.ts +33 -41
  269. package/types/plugins/browser/imageGallery.d.ts +30 -37
  270. package/types/plugins/browser/videoGallery.d.ts +33 -41
  271. package/types/plugins/command/blockquote.d.ts +4 -21
  272. package/types/plugins/command/exportPDF.d.ts +23 -33
  273. package/types/plugins/command/fileUpload.d.ts +80 -100
  274. package/types/plugins/command/list_bulleted.d.ts +9 -35
  275. package/types/plugins/command/list_numbered.d.ts +9 -35
  276. package/types/plugins/dropdown/align.d.ts +23 -46
  277. package/types/plugins/dropdown/backgroundColor.d.ts +35 -53
  278. package/types/plugins/dropdown/blockStyle.d.ts +45 -0
  279. package/types/plugins/dropdown/font.d.ts +18 -41
  280. package/types/plugins/dropdown/fontColor.d.ts +35 -53
  281. package/types/plugins/dropdown/hr.d.ts +26 -52
  282. package/types/plugins/dropdown/layout.d.ts +19 -25
  283. package/types/plugins/dropdown/lineHeight.d.ts +21 -39
  284. package/types/plugins/dropdown/list.d.ts +6 -34
  285. package/types/plugins/dropdown/paragraphStyle.d.ts +34 -45
  286. package/types/plugins/dropdown/table/index.d.ts +158 -0
  287. package/types/plugins/dropdown/table/render/table.html.d.ts +71 -0
  288. package/types/plugins/dropdown/table/render/table.menu.d.ts +59 -0
  289. package/types/plugins/dropdown/table/services/table.cell.d.ts +76 -0
  290. package/types/plugins/dropdown/table/services/table.clipboard.d.ts +26 -0
  291. package/types/plugins/dropdown/table/services/table.grid.d.ts +77 -0
  292. package/types/plugins/dropdown/table/services/table.resize.d.ts +72 -0
  293. package/types/plugins/dropdown/table/services/table.selection.d.ts +59 -0
  294. package/types/plugins/dropdown/table/services/table.style.d.ts +162 -0
  295. package/types/plugins/dropdown/table/shared/table.constants.d.ts +134 -0
  296. package/types/plugins/dropdown/table/shared/table.utils.d.ts +91 -0
  297. package/types/plugins/dropdown/template.d.ts +19 -25
  298. package/types/plugins/dropdown/textStyle.d.ts +23 -30
  299. package/types/plugins/field/mention.d.ts +66 -72
  300. package/types/plugins/index.d.ts +41 -40
  301. package/types/plugins/input/fontSize.d.ts +57 -96
  302. package/types/plugins/input/pageNavigator.d.ts +5 -8
  303. package/types/plugins/modal/audio.d.ts +60 -153
  304. package/types/plugins/modal/drawing.d.ts +16 -118
  305. package/types/plugins/modal/embed.d.ts +46 -166
  306. package/types/plugins/modal/image/index.d.ts +281 -0
  307. package/types/plugins/modal/image/render/image.html.d.ts +45 -0
  308. package/types/plugins/modal/image/services/image.size.d.ts +55 -0
  309. package/types/plugins/modal/image/services/image.upload.d.ts +24 -0
  310. package/types/plugins/modal/image/shared/image.constants.d.ts +17 -0
  311. package/types/plugins/modal/link.d.ts +46 -66
  312. package/types/plugins/modal/math.d.ts +17 -86
  313. package/types/plugins/modal/{video.d.ts → video/index.d.ts} +89 -221
  314. package/types/plugins/modal/video/render/video.html.d.ts +37 -0
  315. package/types/plugins/modal/video/services/video.size.d.ts +74 -0
  316. package/types/plugins/modal/video/services/video.upload.d.ts +19 -0
  317. package/types/plugins/popup/anchor.d.ts +8 -38
  318. package/types/suneditor.d.ts +55 -24
  319. package/types/typedef.d.ts +344 -228
  320. package/CONTRIBUTING.md +0 -186
  321. package/src/core/base/eventHandlers/handler_ww_key_input.js +0 -1200
  322. package/src/core/base/eventHandlers/handler_ww_mouse.js +0 -194
  323. package/src/core/base/eventManager.js +0 -1523
  324. package/src/core/class/component.js +0 -856
  325. package/src/core/class/format.js +0 -3433
  326. package/src/core/class/menu.js +0 -346
  327. package/src/core/class/selection.js +0 -610
  328. package/src/core/class/shortcuts.js +0 -98
  329. package/src/core/class/toolbar.js +0 -431
  330. package/src/core/class/ui.js +0 -424
  331. package/src/core/class/viewer.js +0 -750
  332. package/src/core/section/actives.js +0 -266
  333. package/src/core/section/context.js +0 -102
  334. package/src/editorInjector/_classes.js +0 -36
  335. package/src/editorInjector/_core.js +0 -87
  336. package/src/editorInjector/index.js +0 -73
  337. package/src/modules/ApiManager.js +0 -191
  338. package/src/modules/Controller.js +0 -474
  339. package/src/modules/Modal.js +0 -346
  340. package/src/modules/index.js +0 -14
  341. package/src/plugins/dropdown/table.js +0 -4034
  342. package/src/plugins/modal/image.js +0 -1376
  343. package/src/plugins/modal/video.js +0 -1226
  344. package/types/core/base/eventHandlers/handler_toolbar.d.ts +0 -41
  345. package/types/core/base/eventHandlers/handler_ww_clipboard.d.ts +0 -40
  346. package/types/core/base/eventHandlers/handler_ww_dragDrop.d.ts +0 -35
  347. package/types/core/base/eventHandlers/handler_ww_key_input.d.ts +0 -45
  348. package/types/core/base/eventHandlers/handler_ww_mouse.d.ts +0 -39
  349. package/types/core/base/eventManager.d.ts +0 -401
  350. package/types/core/class/char.d.ts +0 -61
  351. package/types/core/class/component.d.ts +0 -213
  352. package/types/core/class/format.d.ts +0 -623
  353. package/types/core/class/html.d.ts +0 -430
  354. package/types/core/class/menu.d.ts +0 -126
  355. package/types/core/class/nodeTransform.d.ts +0 -93
  356. package/types/core/class/offset.d.ts +0 -522
  357. package/types/core/class/selection.d.ts +0 -188
  358. package/types/core/class/shortcuts.d.ts +0 -142
  359. package/types/core/class/toolbar.d.ts +0 -189
  360. package/types/core/class/ui.d.ts +0 -164
  361. package/types/core/class/viewer.d.ts +0 -140
  362. package/types/core/section/actives.d.ts +0 -46
  363. package/types/core/section/context.d.ts +0 -45
  364. package/types/editorInjector/_classes.d.ts +0 -41
  365. package/types/editorInjector/_core.d.ts +0 -87
  366. package/types/editorInjector/index.d.ts +0 -69
  367. package/types/modules/ApiManager.d.ts +0 -125
  368. package/types/modules/Browser.d.ts +0 -326
  369. package/types/modules/ColorPicker.d.ts +0 -135
  370. package/types/modules/Controller.d.ts +0 -251
  371. package/types/modules/Figure.d.ts +0 -517
  372. package/types/modules/FileManager.d.ts +0 -202
  373. package/types/modules/Modal.d.ts +0 -111
  374. package/types/modules/ModalAnchorEditor.d.ts +0 -236
  375. package/types/modules/SelectMenu.d.ts +0 -194
  376. package/types/modules/index.d.ts +0 -26
  377. package/types/plugins/dropdown/formatBlock.d.ts +0 -55
  378. package/types/plugins/dropdown/table.d.ts +0 -627
  379. package/types/plugins/modal/image.d.ts +0 -451
  380. /package/{LICENSE → LICENSE.txt} +0 -0
@@ -1,9 +1,24 @@
1
- import EditorInjector from '../../editorInjector';
2
- import { ApiManager, SelectMenu, Controller } from '../../modules';
1
+ import { PluginField } from '../../interfaces';
2
+ import { Controller } from '../../modules/contract';
3
+ import { ApiManager } from '../../modules/manager';
4
+ import { SelectMenu } from '../../modules/ui';
3
5
  import { dom, converter } from '../../helper';
4
6
 
5
7
  const { debounce } = converter;
6
8
 
9
+ /**
10
+ * @typedef {Object} MentionPluginOptions
11
+ * @property {string} [triggerText="@"] - The character that triggers the mention list.
12
+ * @property {number} [limitSize=5] - The number of items to display in the mention list
13
+ * @property {number} [searchStartLength=0] - The number of characters to start searching for the mention list
14
+ * @property {number} [delayTime=200] - The time to wait before displaying the mention list
15
+ * @property {Array<{key: string, name: string, url: string}>} [data] - Use data without using API
16
+ * @property {string} [apiUrl] - The URL to call the mention list
17
+ * @property {Object<string, string>} [apiHeaders] - The headers to send with the API call
18
+ * @property {boolean} [useCachingData=true] - Whether to cache the mention list data
19
+ * @property {boolean} [useCachingFieldData=true] - Whether to cache the mention list data in the field
20
+ */
21
+
7
22
  /**
8
23
  * @class
9
24
  * @description Mention Plugin
@@ -12,29 +27,23 @@ const { debounce } = converter;
12
27
  * - Supports fetching mention data from an API or a predefined data array.
13
28
  * - Uses caching for optimized performance.
14
29
  */
15
- class Mention extends EditorInjector {
30
+ class Mention extends PluginField {
16
31
  static key = 'mention';
17
- static type = 'field';
18
32
  static className = '';
19
33
 
34
+ #lastAtPos = 0;
35
+ #anchorOffset = 0;
36
+ #anchorNode = null;
37
+
20
38
  /**
21
39
  * @constructor
22
- * @param {__se__EditorCore} editor - The root editor instance
23
- * @param {Object} pluginOptions
24
- * @param {string=} [pluginOptions.triggerText="@"] The character that triggers the mention list. Default is '@'.
25
- * @param {number=} [pluginOptions.limitSize=5] The number of items to display in the mention list. Default is 5.
26
- * @param {number=} [pluginOptions.searchStartLength=0] The number of characters to start searching for the mention list. Default is 0.
27
- * @param {number=} [pluginOptions.delayTime=200] The time to wait before displaying the mention list. Default is 200ms.
28
- * @param {Array<{key: string, name: string, url: string}>=} pluginOptions.data Use data without using API.
29
- * @param {string=} pluginOptions.apiUrl The URL to call the mention list. Default is ''.
30
- * @param {Object<string, string>=} pluginOptions.apiHeaders The headers to send with the API call. Default is {}.
31
- * @param {boolean=} [pluginOptions.useCachingData=true] Whether to cache the mention list data. Default is true.
32
- * @param {boolean=} [pluginOptions.useCachingFieldData=true] Whether to cache the mention list data in the field. Default is true.
40
+ * @param {SunEditor.Kernel} editor - The core kernel
41
+ * @param {MentionPluginOptions} pluginOptions
33
42
  */
34
43
  constructor(editor, pluginOptions) {
35
44
  super(editor);
36
45
  // plugin basic properties
37
- this.title = this.lang.mention;
46
+ this.title = this.$.lang.mention;
38
47
  this.icon = 'mention';
39
48
 
40
49
  // members
@@ -44,29 +53,26 @@ class Mention extends EditorInjector {
44
53
  this.delayTime = typeof pluginOptions.delayTime === 'number' ? pluginOptions.delayTime : 200;
45
54
  this.directData = pluginOptions.data;
46
55
  this.apiUrl = pluginOptions.apiUrl?.replace(/\s/g, '').replace(/\{limitSize\}/i, String(this.limitSize)) || '';
47
- this._delay = 0;
48
- this._lastAtPos = 0;
49
- this._anchorOffset = 0;
50
- this._anchorNode = null;
51
56
  // members - api, caching
52
- this.apiManager = new ApiManager(this, { headers: pluginOptions.apiHeaders });
53
- this.cachingData = pluginOptions.useCachingData ?? true ? new Map() : null;
54
- this.cachingFieldData = pluginOptions.useCachingFieldData ?? true ? [] : null;
57
+ this.apiManager = new ApiManager(this, this.$, { headers: pluginOptions.apiHeaders });
58
+ this.cachingData = (pluginOptions.useCachingData ?? true) ? new Map() : null;
59
+ this.cachingFieldData = (pluginOptions.useCachingFieldData ?? true) ? [] : null;
55
60
 
56
61
  // controller
57
62
  const controllerEl = CreateHTML_controller();
58
- this.selectMenu = new SelectMenu(this, { position: 'right-bottom', dir: 'ltr', closeMethod: () => this.controller.close() });
63
+ this.selectMenu = new SelectMenu(this.$, { position: 'right-bottom', dir: 'ltr', closeMethod: () => this.controller.close() });
59
64
  this.controller = new Controller(
60
65
  this,
66
+ this.$,
61
67
  controllerEl,
62
68
  {
63
69
  position: 'bottom',
64
70
  initMethod: () => {
65
71
  this.apiManager.cancel();
66
72
  this.selectMenu.close();
67
- }
73
+ },
68
74
  },
69
- null
75
+ null,
70
76
  );
71
77
  this.selectMenu.on(controllerEl.firstElementChild, this.#SelectMention.bind(this));
72
78
 
@@ -75,19 +81,18 @@ class Mention extends EditorInjector {
75
81
  }
76
82
 
77
83
  /**
78
- * @editorMethod Editor.EventManager
79
- * @description Executes the event function of "input".
80
- * @returns {Promise<boolean>}
84
+ * @hook Editor.EventManager
85
+ * @type {SunEditor.Hook.Event.OnInputAsync}
81
86
  */
82
87
  async onInput() {
83
88
  if (!this.directData) {
84
89
  this.apiManager.cancel();
85
90
  }
86
91
 
87
- const sel = this.selection.get();
92
+ const sel = this.$.selection.get();
88
93
  if (!sel.rangeCount) {
89
94
  this.selectMenu.close();
90
- return true;
95
+ return;
91
96
  }
92
97
 
93
98
  const anchorNode = sel.anchorNode;
@@ -99,19 +104,19 @@ class Mention extends EditorInjector {
99
104
  const mentionQuery = textBeforeCursor.substring(lastAtPos + 1, anchorOffset);
100
105
  const beforeText = textBeforeCursor[lastAtPos - 1]?.trim();
101
106
  if (!/\s/.test(mentionQuery) && (!beforeText || dom.check.isZeroWidth(beforeText))) {
102
- if (mentionQuery.length < this.searchStartLength) return true;
107
+ if (mentionQuery.length < this.searchStartLength) return;
103
108
 
104
109
  const anchorParent = anchorNode.parentNode;
105
110
  if (dom.check.isAnchor(anchorParent) && !anchorParent.getAttribute('data-se-mention')) {
106
- return true;
111
+ return;
107
112
  }
108
113
 
109
114
  try {
110
- const result = await this._createMentionList(mentionQuery, anchorNode);
111
- this._lastAtPos = lastAtPos;
112
- this._anchorNode = anchorNode;
113
- this._anchorOffset = anchorOffset;
114
- return !result;
115
+ await this.#createMentionList(mentionQuery, anchorNode);
116
+ this.#lastAtPos = lastAtPos;
117
+ this.#anchorNode = anchorNode;
118
+ this.#anchorOffset = anchorOffset;
119
+ return;
115
120
  } catch (error) {
116
121
  console.warn('[SUNEDITOR.mention.api.file] ', error);
117
122
  }
@@ -119,11 +124,9 @@ class Mention extends EditorInjector {
119
124
  }
120
125
 
121
126
  this.selectMenu.close();
122
- return true;
123
127
  }
124
128
 
125
129
  /**
126
- * @private
127
130
  * @description Generates the mention list based on user input.
128
131
  * - Fetches data from cache, direct data, or an API.
129
132
  * - Creates and opens the mention dropdown.
@@ -132,7 +135,7 @@ class Mention extends EditorInjector {
132
135
  * @param {Node} targetNode - The node where the mention is triggered.
133
136
  * @returns {Promise<boolean>} - Returns `true` if the mention list is displayed, `false` otherwise.
134
137
  */
135
- async _createMentionList(value, targetNode) {
138
+ async #createMentionList(value, targetNode) {
136
139
  const limit = this.limitSize;
137
140
  const lowerValue = value.toLowerCase();
138
141
  let response = null;
@@ -144,7 +147,7 @@ class Mention extends EditorInjector {
144
147
  if (this.directData) {
145
148
  response = this.directData.filter((item) => item.key.toLowerCase().startsWith(lowerValue)).slice(0, limit);
146
149
  } else {
147
- const xmlHttp = await this.apiManager.asyncCall({ method: 'GET', url: this._createUrl(value) });
150
+ const xmlHttp = await this.apiManager.asyncCall({ method: 'GET', url: this.#createUrl(value) });
148
151
  response = JSON.parse(xmlHttp.responseText);
149
152
  }
150
153
  }
@@ -190,26 +193,25 @@ class Mention extends EditorInjector {
190
193
  }
191
194
 
192
195
  /**
193
- * @private
194
196
  * @description Constructs the API request URL with the mention query.
195
197
  * @param {string} key - The mention query text.
196
198
  * @returns {string} - The formatted API request URL.
197
199
  */
198
- _createUrl(key) {
200
+ #createUrl(key) {
199
201
  return this.apiUrl.replace(/\{key\}/i, key);
200
202
  }
201
203
 
202
204
  /**
203
205
  * @description Inserts a mention link into the editor when a user selects a mention from the list.
204
206
  * @param {{ key: string, name: string, url: string }} item - The selected mention item.
205
- * @returns {boolean} - Returns `false` if insertion fails, otherwise completes execution.
207
+ * @returns {boolean} Returns `false` if insertion fails, otherwise completes execution.
206
208
  */
207
209
  #SelectMention(item) {
208
210
  if (!item) return false;
209
211
 
210
212
  let oA = null;
211
213
  const { key, name, url } = item;
212
- const anchorParent = this._anchorNode.parentNode;
214
+ const anchorParent = this.#anchorNode.parentNode;
213
215
 
214
216
  if (dom.check.isAnchor(anchorParent)) {
215
217
  oA = anchorParent;
@@ -218,16 +220,16 @@ class Mention extends EditorInjector {
218
220
  oA.setAttribute('title', name);
219
221
  oA.textContent = this.triggerText + key;
220
222
  } else {
221
- this.selection.setRange(this._anchorNode, this._lastAtPos, this._anchorNode, this._anchorOffset);
223
+ this.$.selection.setRange(this.#anchorNode, this.#lastAtPos, this.#anchorNode, this.#anchorOffset);
222
224
  oA = dom.utils.createElement('A', { 'data-se-mention': key, href: url, title: name, target: '_blank' }, this.triggerText + key);
223
- if (!this.html.insertNode(oA, { afterNode: null, skipCharCount: false })) return false;
225
+ if (!this.$.html.insertNode(oA, { afterNode: null, skipCharCount: false })) return false;
224
226
  }
225
227
 
226
228
  this.selectMenu.close();
227
229
 
228
230
  const space = dom.utils.createTextNode('\u00A0');
229
231
  oA.parentNode.insertBefore(space, oA.nextSibling);
230
- this.selection.setRange(space, 1, space, 1);
232
+ this.$.selection.setRange(space, 1, space, 1);
231
233
 
232
234
  if (this.cachingFieldData && !this.cachingFieldData.some((data) => data.key === item.key)) {
233
235
  this.cachingFieldData.push(item);
@@ -235,6 +237,9 @@ class Mention extends EditorInjector {
235
237
  }
236
238
  }
237
239
 
240
+ /**
241
+ * @returns {HTMLElement}
242
+ */
238
243
  function CreateHTML_controller() {
239
244
  return dom.utils.createElement('DIV', { class: 'se-controller se-empty-controller' }, '<div></div>');
240
245
  }
@@ -16,7 +16,7 @@ import backgroundColor from './dropdown/backgroundColor';
16
16
  import hr from './dropdown/hr';
17
17
  import list from './dropdown/list';
18
18
  import table from './dropdown/table';
19
- import formatBlock from './dropdown/formatBlock';
19
+ import blockStyle from './dropdown/blockStyle';
20
20
  import layout from './dropdown/layout';
21
21
  import lineHeight from './dropdown/lineHeight';
22
22
  import template from './dropdown/template';
@@ -59,7 +59,7 @@ export {
59
59
  backgroundColor,
60
60
  list,
61
61
  table,
62
- formatBlock,
62
+ blockStyle,
63
63
  hr,
64
64
  layout,
65
65
  lineHeight,
@@ -80,7 +80,7 @@ export {
80
80
  fileBrowser,
81
81
  fontSize,
82
82
  pageNavigator,
83
- anchor
83
+ anchor,
84
84
  };
85
85
  export default {
86
86
  blockquote,
@@ -95,7 +95,7 @@ export default {
95
95
  backgroundColor,
96
96
  list,
97
97
  table,
98
- formatBlock,
98
+ blockStyle,
99
99
  hr,
100
100
  layout,
101
101
  lineHeight,
@@ -116,5 +116,5 @@ export default {
116
116
  fileBrowser,
117
117
  fontSize,
118
118
  pageNavigator,
119
- anchor
119
+ anchor,
120
120
  };