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,11 +1,10 @@
1
- import EditorInjector from '../../editorInjector';
2
- import { Modal, Controller, ModalAnchorEditor } from '../../modules';
1
+ import { PluginModal } from '../../interfaces';
2
+ import { Modal, Controller } from '../../modules/contract';
3
+ import { ModalAnchorEditor } from '../../modules/ui';
3
4
  import { dom, numbers } from '../../helper';
4
5
 
5
6
  /**
6
- * @typedef {Object} LinkPluginOptions
7
- * @property {boolean} [textToDisplay=true] - Whether to display the link text.
8
- * @property {boolean} [title=true] - Whether to display the link title.
7
+ * @typedef {Object} LinkOptions
9
8
  * @property {string} [uploadUrl] - The URL endpoint for file uploads.
10
9
  * @property {Object<string, string>} [uploadHeaders] - Additional headers for file upload requests.
11
10
  * @property {number} [uploadSizeLimit] - The total file upload size limit in bytes.
@@ -13,26 +12,31 @@ import { dom, numbers } from '../../helper';
13
12
  * @property {string} [acceptedFormats] - Accepted file formats for link uploads.
14
13
  */
15
14
 
15
+ /**
16
+ * @typedef {Omit<LinkOptions & import('../../modules/ui/ModalAnchorEditor').ModalAnchorEditorParams, ''>} LinkPluginOptions
17
+ */
18
+
16
19
  /**
17
20
  * @class
18
21
  * @description Link plugin.
19
22
  * - This plugin provides link insertion and editing functionality within the editor.
20
23
  * - It also supports file uploads if an upload URL is provided.
21
24
  */
22
- class Link extends EditorInjector {
25
+ class Link extends PluginModal {
23
26
  static key = 'link';
24
- static type = 'modal';
25
27
  static className = 'se-icon-flip-rtl';
26
28
 
29
+ #controllerATarget;
30
+
27
31
  /**
28
32
  * @constructor
29
- * @param {__se__EditorCore} editor - The root editor instance
33
+ * @param {SunEditor.Kernel} editor - The core kernel
30
34
  * @param {LinkPluginOptions} pluginOptions
31
35
  */
32
36
  constructor(editor, pluginOptions) {
33
37
  // plugin bisic properties
34
38
  super(editor);
35
- this.title = this.lang.link;
39
+ this.title = this.$.lang.link;
36
40
  this.icon = 'link';
37
41
 
38
42
  // define plugin options
@@ -40,11 +44,12 @@ class Link extends EditorInjector {
40
44
  pluginOptions.title = true;
41
45
 
42
46
  // create HTML
43
- const modalEl = CreateHTML_modal(editor);
44
- const controllerEl = CreateHTML_controller(editor);
47
+ const modalEl = CreateHTML_modal(this.$);
48
+ const controllerEl = CreateHTML_controller(this.$);
45
49
 
46
50
  // members
47
51
  const uploadUrl = typeof pluginOptions.uploadUrl === 'string' ? pluginOptions.uploadUrl : null;
52
+ this.target = null;
48
53
  this.isUpdateState = false;
49
54
  this.pluginOptions = {
50
55
  ...pluginOptions,
@@ -53,33 +58,34 @@ class Link extends EditorInjector {
53
58
  uploadSizeLimit: numbers.get(pluginOptions.uploadSizeLimit, 0),
54
59
  uploadSingleSizeLimit: numbers.get(pluginOptions.uploadSingleSizeLimit, 0),
55
60
  acceptedFormats: typeof pluginOptions.acceptedFormats === 'string' ? pluginOptions.acceptedFormats.trim() : null,
56
- enableFileUpload: !!uploadUrl
61
+ enableFileUpload: !!uploadUrl,
57
62
  };
58
63
 
59
64
  // modules
60
- this.anchor = new ModalAnchorEditor(this, modalEl, this.pluginOptions);
61
- this.modal = new Modal(this, modalEl);
62
- this.controller = new Controller(this, controllerEl, { position: 'bottom', disabled: false });
65
+ this.anchor = new ModalAnchorEditor(this.$, modalEl, this.pluginOptions);
66
+ this.modal = new Modal(this, this.$, modalEl);
67
+ this.controller = new Controller(this, this.$, controllerEl, { position: 'bottom', disabled: false });
68
+
69
+ this.#controllerATarget = this.controller.form.querySelector('a');
63
70
  }
64
71
 
65
72
  /**
66
- * @editorMethod Editor.EventManager
67
- * @description Executes the method that is called whenever the cursor position changes.
68
- * @param {?HTMLElement=} element - Node element where the cursor is currently located
69
- * @returns {boolean} - Whether the plugin is active
70
- * - If it returns "undefined", it will no longer be called in this scope.
73
+ * @hook Editor.EventManager
74
+ * @type {SunEditor.Hook.Event.Active}
71
75
  */
72
76
  active(element) {
73
77
  if (dom.check.isAnchor(element) && !element.hasAttribute('data-se-non-link')) {
74
- const tempLink = this.controller.form.querySelector('a');
75
- tempLink.href = element.href;
76
- tempLink.title = element.textContent;
77
- tempLink.textContent = element.textContent;
78
+ const a = this.#controllerATarget;
79
+ const href = element.getAttribute('href');
80
+ a.href = href;
81
+ a.textContent = a.title = element.textContent;
82
+ a.target = href?.startsWith('#') ? element.target : '_blank';
78
83
 
79
84
  dom.utils.addClass(element, 'on');
80
85
 
81
86
  this.anchor.set(element);
82
87
  this.controller.open(element, null, { isWWTarget: false, initMethod: null, addOffset: null });
88
+ this.target = element;
83
89
 
84
90
  return true;
85
91
  }
@@ -90,104 +96,108 @@ class Link extends EditorInjector {
90
96
  }
91
97
 
92
98
  /**
93
- * @editorMethod Modules.Modal
94
- * @description Executes the method that is called when a "Modal" module's is opened.
99
+ * @override
100
+ * @type {PluginModal['open']}
95
101
  */
96
102
  open() {
97
103
  this.modal.open();
98
104
  }
99
105
 
100
106
  /**
101
- * @editorMethod Modules.Modal
102
- * @description Executes the method that is called when a plugin's modal is opened.
103
- * @param {boolean} isUpdate "Indicates whether the modal is for editing an existing component (true) or registering a new one (false)."
107
+ * @hook Modules.Modal
108
+ * @type {SunEditor.Hook.Modal.On}
104
109
  */
105
- on(isUpdate) {
110
+ modalOn(isUpdate) {
106
111
  this.isUpdateState = isUpdate;
107
112
  this.anchor.on(isUpdate);
108
113
  }
109
114
 
110
115
  /**
111
- * @editorMethod Modules.Modal
112
- * @description This function is called when a form within a modal window is "submit".
113
- * @returns {boolean} Success or failure
116
+ * @hook Modules.Modal
117
+ * @type {SunEditor.Hook.Modal.Action}
114
118
  */
115
- modalAction() {
119
+ async modalAction() {
116
120
  const oA = this.anchor.create(false);
117
121
  if (oA === null) return false;
118
122
 
119
123
  if (!this.isUpdateState) {
120
- const selectedFormats = this.format.getLines();
124
+ const selectedFormats = this.$.format.getLines();
121
125
  if (selectedFormats.length > 1) {
122
- if (!this.html.insertNode(dom.utils.createElement(selectedFormats[0].nodeName, null, oA), { afterNode: null, skipCharCount: false })) return true;
126
+ if (!this.$.html.insertNode(dom.utils.createElement(selectedFormats[0].nodeName, null, oA), { afterNode: null, skipCharCount: false })) return true;
123
127
  } else {
124
- if (!this.html.insertNode(oA, { afterNode: null, skipCharCount: false })) return true;
128
+ if (!this.$.html.insertNode(oA, { afterNode: null, skipCharCount: false })) return true;
125
129
  }
126
130
 
127
- this.selection.setRange(oA.childNodes[0], 0, oA.childNodes[0], oA.textContent.length);
131
+ this.$.selection.setRange(oA.childNodes[0], 0, oA.childNodes[0], oA.textContent.length);
128
132
  } else {
129
133
  // set range
130
134
  const textNode = this.controller.currentTarget.childNodes[0];
131
- this.selection.setRange(textNode, 0, textNode, textNode.textContent.length);
135
+ this.$.selection.setRange(textNode, 0, textNode, textNode.textContent.length);
132
136
  }
133
137
 
138
+ this.$.history.push(false);
134
139
  return true;
135
140
  }
136
141
 
137
142
  /**
138
- * @editorMethod Modules.Modal
139
- * @description This function is called before the modal window is opened, but before it is closed.
143
+ * @hook Modules.Modal
144
+ * @type {SunEditor.Hook.Modal.Init}
140
145
  */
141
- init() {
146
+ modalInit() {
142
147
  this.controller.close();
143
148
  this.anchor.init();
144
149
  }
145
150
 
146
151
  /**
147
- * @editorMethod Modules.Controller
148
- * @description Executes the method that is called when a button is clicked in the "controller".
149
- * @param {HTMLButtonElement} target Target button element
152
+ * @hook Modules.Controller
153
+ * @type {SunEditor.Hook.Controller.Action}
150
154
  */
151
155
  controllerAction(target) {
152
156
  const command = target.getAttribute('data-command');
153
157
 
154
158
  if (/update/.test(command)) {
155
159
  this.modal.open();
160
+ } else if (/copy/.test(command)) {
161
+ this.$.html.copy(this.target);
156
162
  } else if (/unlink/.test(command)) {
157
163
  const sc = dom.query.getEdgeChild(
158
164
  this.controller.currentTarget,
159
165
  function (current) {
160
166
  return current.childNodes.length === 0 || current.nodeType === 3;
161
167
  },
162
- false
168
+ false,
163
169
  );
164
170
  const ec = dom.query.getEdgeChild(
165
171
  this.controller.currentTarget,
166
172
  function (current) {
167
173
  return current.childNodes.length === 0 || current.nodeType === 3;
168
174
  },
169
- true
175
+ true,
170
176
  );
171
- this.selection.setRange(sc, 0, ec, ec.textContent.length);
172
- this.format.applyInlineElement(null, { stylesToModify: null, nodesToRemove: ['A'], strictRemove: false });
177
+ this.$.selection.setRange(sc, 0, ec, ec.textContent.length);
178
+ this.$.inline.apply(null, { stylesToModify: null, nodesToRemove: ['A'], strictRemove: false });
173
179
  } else {
174
180
  /** delete */
175
181
  dom.utils.removeItem(this.controller.currentTarget);
176
182
  this.controller.currentTarget = null;
177
- this.editor.focus();
178
- this.history.push(false);
183
+ this.$.focusManager.focus();
184
+ this.$.history.push(false);
179
185
  }
180
186
  }
181
187
 
182
188
  /**
183
- * @editorMethod Modules.Controller
184
- * @description This function is called before the "controller" before it is closed.
189
+ * @hook Modules.Controller
190
+ * @type {SunEditor.Hook.Controller.Close}
185
191
  */
186
- close() {
192
+ controllerClose() {
187
193
  dom.utils.removeClass(this.controller.currentTarget, 'on');
188
194
  }
189
195
  }
190
196
 
197
+ /**
198
+ * @param {SunEditor.Deps} $ - Kernel dependencies
199
+ * @returns {HTMLElement}
200
+ */
191
201
  function CreateHTML_modal({ lang, icons }) {
192
202
  const html = /*html*/ `
193
203
  <form>
@@ -208,6 +218,10 @@ function CreateHTML_modal({ lang, icons }) {
208
218
  return dom.utils.createElement('DIV', { class: 'se-modal-content' }, html);
209
219
  }
210
220
 
221
+ /**
222
+ * @param {SunEditor.Deps} $ - Kernel dependencies
223
+ * @returns {HTMLElement}
224
+ */
211
225
  function CreateHTML_controller({ lang, icons }) {
212
226
  const html = /*html*/ `
213
227
  <div class="se-arrow se-arrow-up"></div>
@@ -220,6 +234,12 @@ function CreateHTML_controller({ lang, icons }) {
220
234
  <span class="se-tooltip-text">${lang.edit}</span>
221
235
  </span>
222
236
  </button>
237
+ <button type="button" data-command="copy" tabindex="-1" class="se-btn se-tooltip">
238
+ ${icons.copy}
239
+ <span class="se-tooltip-inner">
240
+ <span class="se-tooltip-text">${lang.copy}</span>
241
+ </span>
242
+ </button>
223
243
  <button type="button" data-command="unlink" tabindex="-1" class="se-btn se-tooltip se-icon-flip-rtl">
224
244
  ${icons.unlink}
225
245
  <span class="se-tooltip-inner">