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
@@ -0,0 +1,288 @@
1
+ import { dom, env } from '../../helper';
2
+
3
+ const { _w, _d } = env;
4
+
5
+ /**
6
+ * @typedef {import('../schema/frameContext').FrameContextStore} ConfigFrameContextStore
7
+ * @typedef {import('../schema/context').ContextStore} ConfigContextStore
8
+ */
9
+
10
+ /**
11
+ * @typedef {Object} ContextMap
12
+ * @property {(k: keyof ConfigContextStore) => HTMLElement|null} get - Get a DOM element from the context by key.
13
+ * @property {(k: keyof ConfigContextStore, v: HTMLElement) => void} set - Set a DOM element in the context by key.
14
+ * @property {(k: keyof ConfigContextStore) => boolean} has - Check if a key exists in the context.
15
+ * @property {(k: keyof ConfigContextStore) => boolean} delete - Delete a key from the context.
16
+ * @property {() => Object<keyof ConfigContextStore, HTMLElement|null>} [getAll] - Get all DOM elements in the context as an object.
17
+ * @property {number} size - Get context size
18
+ * @property {() => void} clear - Clear all elements in the context.
19
+ */
20
+
21
+ /**
22
+ * @typedef {Object} FrameContextMap
23
+ * @property {<K extends keyof ConfigFrameContextStore>(k: K) => ConfigFrameContextStore[K]} get - Get a DOM element from the context by key.
24
+ * @property {<K extends keyof ConfigFrameContextStore>(k: K, v: ConfigFrameContextStore[K]) => void} set - Set a DOM element in the context by key.
25
+ * @property {<K extends keyof ConfigFrameContextStore>(k: K) => boolean} has - Check if a key exists in the context.
26
+ * @property {<K extends keyof ConfigFrameContextStore>(k: K) => boolean} delete - Delete a key from the context.
27
+ * @property {() => Object<keyof ConfigFrameContextStore, *>} [getAll] - Get all DOM elements in the context as an object.
28
+ * @property {(newMap: *) => void} [reset] - Reset the context with a new Map.
29
+ * @property {number} size - Get context size
30
+ * @property {() => void} clear - Clear all elements in the context.
31
+ */
32
+
33
+ /**
34
+ * @description Provides Map-based access to editor DOM contexts (global and per-frame).
35
+ */
36
+ export default class ContextProvider {
37
+ /**
38
+ * @description Frame root map
39
+ */
40
+ #frameRoots;
41
+
42
+ /**
43
+ * @description Utility object that manages the editor's runtime context.
44
+ * Provides methods to get, set, and inspect internal context.
45
+ */
46
+ #contextMap;
47
+
48
+ /**
49
+ * @description Utility object that manages the editor's runtime [frame] context.
50
+ * Provides methods to get, set, and inspect internal context.
51
+ * @type {FrameContextMap}
52
+ */
53
+ #frameContextMap;
54
+
55
+ /**
56
+ * @constructor
57
+ * @param {import('../section/constructor').ConstructorReturnType} product
58
+ */
59
+ constructor(product) {
60
+ this.#frameRoots = product.frameRoots;
61
+ this.#contextMap = this.#CreateContextMap(product.context);
62
+ this.#frameContextMap = this.#CreateFrameContextMap({ value: new Map() });
63
+
64
+ /**
65
+ * @description Frame root key array
66
+ * @type {Array<*>}
67
+ */
68
+ this.rootKeys = product.rootKeys;
69
+
70
+ /**
71
+ * @description Controllers carrier
72
+ * @type {HTMLElement}
73
+ */
74
+ this.carrierWrapper = product.carrierWrapper;
75
+
76
+ /**
77
+ * @description Default icons object
78
+ * @type {Object<string, string>}
79
+ */
80
+ this.icons = product.icons;
81
+
82
+ /**
83
+ * @description loaded language
84
+ * @type {Object<string, *>}
85
+ */
86
+ this.lang = product.lang;
87
+
88
+ /**
89
+ * @description Closest ShadowRoot to editor if found
90
+ * @type {ShadowRoot & { getSelection?: () => Selection }} - Chromium-based browsers (Chrome, Edge, etc.) has a getSelection method on the ShadowRoot
91
+ */
92
+ this.shadowRoot = null;
93
+ }
94
+
95
+ get frameRoots() {
96
+ return this.#frameRoots;
97
+ }
98
+
99
+ get context() {
100
+ return this.#contextMap;
101
+ }
102
+
103
+ get frameContext() {
104
+ return this.#frameContextMap;
105
+ }
106
+
107
+ init() {
108
+ this.applyToRoots((e) => {
109
+ this.#setEditorParams(e);
110
+ });
111
+ }
112
+
113
+ /**
114
+ * @param {SunEditor.FrameContext} rt Root target[key] FrameContext
115
+ */
116
+ reset(rt) {
117
+ this.#frameContextMap.reset(rt);
118
+ }
119
+
120
+ /**
121
+ * @description Execute a function by traversing all root targets.
122
+ * @param {(frameContext: SunEditor.FrameContext, rootKey: string|null, frameRoots: Map<string|null, SunEditor.FrameContext>) => void} f Callback function
123
+ */
124
+ applyToRoots(f) {
125
+ this.#frameRoots.forEach(f);
126
+ }
127
+
128
+ /**
129
+ * @description Set the FrameContext parameters and options
130
+ * @param {SunEditor.FrameContext} e - Frame context object
131
+ */
132
+ #setEditorParams(e) {
133
+ const frameOptions = e.get('options');
134
+
135
+ e.set('wwComputedStyle', _w.getComputedStyle(e.get('wysiwyg')));
136
+
137
+ if (!frameOptions.get('iframe') && typeof ShadowRoot === 'function') {
138
+ let child = e.get('wysiwygFrame');
139
+ while (child) {
140
+ if (child.shadowRoot) {
141
+ this.shadowRoot = child.shadowRoot;
142
+ break;
143
+ } else if (child instanceof ShadowRoot) {
144
+ this.shadowRoot = child;
145
+ break;
146
+ }
147
+ child = /** @type {SunEditor.WysiwygFrame} */ (child.parentNode);
148
+ }
149
+ }
150
+
151
+ // init, validate
152
+ if (frameOptions.get('iframe')) {
153
+ e.set('_ww', e.get('wysiwygFrame').contentWindow);
154
+ e.set('_wd', e.get('wysiwygFrame').contentDocument);
155
+ e.set('wysiwyg', e.get('_wd').body);
156
+ // e.get('wysiwyg').className += ' ' + options.get('_editableClass');
157
+ if (frameOptions.get('_defaultStyles').editor) e.get('wysiwyg').style.cssText = frameOptions.get('_defaultStyles').editor;
158
+ if (frameOptions.get('height') === 'auto') e.set('_iframeAuto', e.get('_wd').body);
159
+ } else {
160
+ e.set('_ww', _w);
161
+ e.set('_wd', _d);
162
+ }
163
+
164
+ // wisywig attributes
165
+ const attr = frameOptions.get('editableFrameAttributes');
166
+ for (const k in attr) {
167
+ e.get('wysiwyg').setAttribute(k, attr[k]);
168
+ }
169
+ }
170
+
171
+ /**
172
+ * @description Creates a utility wrapper for editor base options.
173
+ * - Provides get, set, has, getAll with internal Map support.
174
+ * @param {*} _context - Origin options object
175
+ * @returns {ContextMap}
176
+ */
177
+ #CreateContextMap(_context) {
178
+ const store = _context;
179
+
180
+ return {
181
+ get(k) {
182
+ return store.get(k);
183
+ },
184
+ set(k, v) {
185
+ return store.set(k, v);
186
+ },
187
+ has(k) {
188
+ return store.has(k);
189
+ },
190
+ delete(k) {
191
+ return store.delete(k);
192
+ },
193
+ getAll() {
194
+ return Object.fromEntries(store.entries());
195
+ },
196
+ get size() {
197
+ return store.size;
198
+ },
199
+ clear() {
200
+ store.clear();
201
+ },
202
+ };
203
+ }
204
+
205
+ /**
206
+ * @description Creates a utility wrapper for editor base options.
207
+ * - Provides get, set, has, getAll with internal Map support.
208
+ * @param {{value: Map}} _frameContext - The editor instance
209
+ * @returns {FrameContextMap}
210
+ */
211
+ #CreateFrameContextMap(_frameContext) {
212
+ let store = _frameContext.value;
213
+
214
+ return {
215
+ /**
216
+ * @template {keyof ConfigFrameContextStore} K
217
+ * @param {K} k
218
+ * @returns {ConfigFrameContextStore[K]}
219
+ */
220
+ get(k) {
221
+ return store.get(k);
222
+ },
223
+ /**
224
+ * @template {keyof ConfigFrameContextStore} K
225
+ * @param {K} k
226
+ * @param {ConfigFrameContextStore[K]} v
227
+ */
228
+ set(k, v) {
229
+ return store.set(k, v);
230
+ },
231
+ /**
232
+ * @template {keyof ConfigFrameContextStore} K
233
+ * @param {K} k
234
+ * @returns {boolean}
235
+ */
236
+ has(k) {
237
+ return store.has(k);
238
+ },
239
+ /**
240
+ * @template {keyof ConfigFrameContextStore} K
241
+ * @param {K} k
242
+ * @returns {boolean}
243
+ */
244
+ delete(k) {
245
+ return store.delete(k);
246
+ },
247
+ getAll() {
248
+ return Object.fromEntries(store.entries());
249
+ },
250
+ /** @param {*} newMap */
251
+ reset(newMap) {
252
+ store = _frameContext.value = newMap;
253
+ },
254
+ get size() {
255
+ return store.size;
256
+ },
257
+ clear() {
258
+ store.clear();
259
+ },
260
+ };
261
+ }
262
+
263
+ _destroy() {
264
+ /** clear frame roots */
265
+ this.applyToRoots((e) => {
266
+ // destroy documentType instance
267
+ const docType = e.get('documentType');
268
+ if (docType) {
269
+ docType._destroy();
270
+ }
271
+ dom.utils.removeItem(e.get('topArea'));
272
+ e.get('options').clear();
273
+ e.clear();
274
+ });
275
+
276
+ this.#contextMap.clear();
277
+ this.#frameContextMap.clear();
278
+ this.#frameRoots.clear();
279
+
280
+ dom.utils.removeItem(this.carrierWrapper);
281
+
282
+ this.rootKeys = null;
283
+ this.carrierWrapper = null;
284
+ this.icons = null;
285
+ this.lang = null;
286
+ this.shadowRoot = null;
287
+ }
288
+ }
@@ -0,0 +1,188 @@
1
+ import { dom, numbers, env } from '../../helper';
2
+ import { _DragHandle } from '../../modules/ui';
3
+
4
+ const { _w, _d, NO_EVENT } = env;
5
+
6
+ /**
7
+ * @description Event manager, editor's all event management class
8
+ */
9
+ class EventManager {
10
+ #$;
11
+ #frameContext;
12
+ #frameOptions;
13
+
14
+ /** @type {?SunEditor.Event.GlobalInfo} */
15
+ #geckoActiveEvent = null;
16
+
17
+ /** @type {Array<*>} */
18
+ #events = [];
19
+
20
+ /**
21
+ * @constructor
22
+ * @param {import('./contextProvider').default} contextProvider
23
+ * @param {import('./optionProvider').default} optionProvider
24
+ * @param {import('../kernel/coreKernel').Deps} $
25
+ */
26
+ constructor(contextProvider, optionProvider, $) {
27
+ this.#$ = $;
28
+ this.#frameContext = contextProvider.frameContext;
29
+ this.#frameOptions = optionProvider.frameOptions;
30
+
31
+ /**
32
+ * @description Events object, call by triggerEvent function
33
+ * @type {SunEditor.Event.Handlers}
34
+ */
35
+ this.events = optionProvider.options.get('events') || {};
36
+
37
+ /**
38
+ * @description Call the event function by injecting self: this.
39
+ * @type {(eventName: string, ...args: *) => Promise<*>}
40
+ */
41
+ this.triggerEvent = async (eventName, eventData) => {
42
+ // [iframe] wysiwyg is disabled, the event is not called.
43
+ if (dom.check.isNonEditable(eventData?.frameContext?.get('wysiwyg'))) return false;
44
+
45
+ const eventHandler = this.events[eventName];
46
+ if (typeof eventHandler === 'function') {
47
+ try {
48
+ return await eventHandler({ $: this.#$, ...eventData });
49
+ } catch (error) {
50
+ console.error(`[SUNEDITOR.triggerEvent.${eventName}]`, error);
51
+ return false;
52
+ }
53
+ }
54
+
55
+ return NO_EVENT;
56
+ };
57
+
58
+ /** @type {HTMLInputElement} */
59
+ this.__focusTemp = contextProvider.carrierWrapper.querySelector('.__se__focus__temp__');
60
+ }
61
+
62
+ /**
63
+ * @description Register for an event.
64
+ * - Only events registered with this method are unregistered or re-registered when methods such as 'setOptions', 'destroy' are called.
65
+ * @param {*} target Target element
66
+ * @param {string} type Event type
67
+ * @param {EventListenerOrEventListenerObject} listener Event handler
68
+ * @param {boolean|AddEventListenerOptions} [useCapture] Event useCapture option
69
+ * @return {?SunEditor.Event.Info} Registered event information
70
+ */
71
+ addEvent(target, type, listener, useCapture) {
72
+ if (!target) return null;
73
+ if (target === _w || target === _d || typeof target.length !== 'number' || target.nodeType || (!Array.isArray(target) && target.length < 1)) target = [target];
74
+ if (target.length === 0) return null;
75
+
76
+ const len = target.length;
77
+ for (let i = 0; i < len; i++) {
78
+ target[i].addEventListener(type, listener, useCapture);
79
+ this.#events.push({
80
+ target: target[i],
81
+ type,
82
+ listener,
83
+ useCapture,
84
+ });
85
+ }
86
+
87
+ return {
88
+ target: len > 1 ? target : target[0],
89
+ type,
90
+ listener,
91
+ useCapture,
92
+ };
93
+ }
94
+
95
+ /**
96
+ * @description Remove event
97
+ * @param {SunEditor.Event.Info} params event info = this.addEvent()
98
+ * @returns {undefined|null} Success: null, Not found: undefined
99
+ */
100
+ removeEvent(params) {
101
+ if (!params) return;
102
+
103
+ let target = params.target;
104
+ const type = params.type;
105
+ const listener = params.listener;
106
+ const useCapture = params.useCapture;
107
+
108
+ if (!target) return;
109
+ if (!numbers.is(target.length) || target.nodeName || (!Array.isArray(target) && target.length < 1)) target = /** @type {Array<Element>} */ ([target]);
110
+ if (target.length === 0) return;
111
+
112
+ for (let i = 0, len = target.length; i < len; i++) {
113
+ target[i].removeEventListener(type, listener, useCapture);
114
+ }
115
+
116
+ return null;
117
+ }
118
+
119
+ /**
120
+ * @description Add an event to document.
121
+ * - When created as an Iframe, the same event is added to the document in the Iframe.
122
+ * @param {string} type Event type
123
+ * @param {(...args: *) => *} listener Event listener
124
+ * @param {boolean|AddEventListenerOptions} [useCapture] Use event capture
125
+ * @return {SunEditor.Event.GlobalInfo} Registered event information
126
+ */
127
+ addGlobalEvent(type, listener, useCapture) {
128
+ if (this.#frameOptions.get('iframe')) {
129
+ this.#frameContext.get('_ww').addEventListener(type, listener, useCapture);
130
+ }
131
+ _w.addEventListener(type, listener, useCapture);
132
+ return {
133
+ type,
134
+ listener,
135
+ useCapture,
136
+ };
137
+ }
138
+
139
+ /**
140
+ * @description Remove events from document.
141
+ * - When created as an Iframe, the event of the document inside the Iframe is also removed.
142
+ * @param {string|SunEditor.Event.GlobalInfo} type Event type or (Event info = this.addGlobalEvent())
143
+ * @param {(...args: *) => *} [listener] Event listener
144
+ * @param {boolean|AddEventListenerOptions} [useCapture] Use event capture
145
+ * @returns {undefined|null} Success: null, Not found: undefined
146
+ */
147
+ removeGlobalEvent(type, listener, useCapture) {
148
+ if (!type) return;
149
+
150
+ if (typeof type === 'object') {
151
+ listener = type.listener;
152
+ useCapture = type.useCapture;
153
+ type = type.type;
154
+ }
155
+ if (this.#frameOptions.get('iframe')) {
156
+ this.#frameContext.get('_ww').removeEventListener(type, listener, useCapture);
157
+ }
158
+ _w.removeEventListener(type, listener, useCapture);
159
+
160
+ return null;
161
+ }
162
+
163
+ /**
164
+ * @internal
165
+ * @description Gives an active effect when the mouse down event is blocked. (Used when "env.isGecko" is true)
166
+ * @param {Node} target Target element
167
+ */
168
+ _injectActiveEvent(target) {
169
+ dom.utils.addClass(target, '__se__active');
170
+ this.#geckoActiveEvent = this.addGlobalEvent('mouseup', () => {
171
+ dom.utils.removeClass(target, '__se__active');
172
+ this.#geckoActiveEvent = this.removeGlobalEvent(this.#geckoActiveEvent);
173
+ });
174
+ }
175
+
176
+ _init() {
177
+ for (let i = 0, len = this.#events.length, e; i < len; i++) {
178
+ e = this.#events[i];
179
+ e.target.removeEventListener(e.type, e.listener, e.useCapture);
180
+ }
181
+
182
+ this.#events = null;
183
+
184
+ this.#geckoActiveEvent &&= this.removeGlobalEvent(this.#geckoActiveEvent);
185
+ }
186
+ }
187
+
188
+ export default EventManager;
@@ -0,0 +1,59 @@
1
+ /**
2
+ * @description iframe-safe instanceof check utility class
3
+ */
4
+ class InstanceCheck {
5
+ #frameContext;
6
+
7
+ /**
8
+ * @constructor
9
+ * @param {SunEditor.FrameContext} frameContext - Frame context
10
+ */
11
+ constructor(frameContext) {
12
+ this.#frameContext = frameContext;
13
+ }
14
+
15
+ /**
16
+ * @param {*} obj
17
+ * @returns {obj is Node}
18
+ */
19
+ isNode(obj) {
20
+ // Check nodeType first for cross-context compatibility (e.g., elements created from main document in iframe mode)
21
+ return (obj && typeof obj.nodeType === 'number') || obj instanceof this.#getFrameWindow().Node;
22
+ }
23
+
24
+ /**
25
+ * @param {*} obj
26
+ * @returns {obj is Element}
27
+ */
28
+ isElement(obj) {
29
+ // Check nodeType === 1 for cross-context compatibility
30
+ return (obj && obj.nodeType === 1) || obj instanceof this.#getFrameWindow().Element;
31
+ }
32
+
33
+ /**
34
+ * @param {*} obj
35
+ * @returns {obj is Range}
36
+ */
37
+ isRange(obj) {
38
+ // Check constructor name for cross-context compatibility
39
+ return (obj && obj.constructor?.name === 'Range') || obj instanceof this.#getFrameWindow().Range;
40
+ }
41
+
42
+ /**
43
+ * @param {*} obj
44
+ * @returns {obj is Selection}
45
+ */
46
+ isSelection(obj) {
47
+ // Check constructor name for cross-context compatibility
48
+ return (obj && obj.constructor?.name === 'Selection') || obj instanceof this.#getFrameWindow().Selection;
49
+ }
50
+
51
+ /**
52
+ * @returns {SunEditor.GlobalWindow}
53
+ */
54
+ #getFrameWindow() {
55
+ return /** @type {SunEditor.GlobalWindow} */ (this.#frameContext.get('_ww'));
56
+ }
57
+ }
58
+
59
+ export default InstanceCheck;