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,110 @@
1
+ import { dom } from '../../../helper';
2
+
3
+ /**
4
+ * @description Manages editor focus and blur behavior across frames and controllers.
5
+ */
6
+ export default class FocusManager {
7
+ #kernel;
8
+ #$;
9
+ #store;
10
+
11
+ #options;
12
+ #frameContext;
13
+ #frameOptions;
14
+
15
+ /**
16
+ * @constructor
17
+ * @param {SunEditor.Kernel} kernel
18
+ */
19
+ constructor(kernel) {
20
+ this.#kernel = kernel;
21
+ this.#$ = kernel.$;
22
+ this.#store = kernel.store;
23
+
24
+ this.#options = this.#$.options;
25
+ this.#frameContext = this.#$.frameContext;
26
+ this.#frameOptions = this.#$.frameOptions;
27
+ }
28
+
29
+ /**
30
+ * @description Focus to wysiwyg area
31
+ * @param {*} [rootKey] Root frame key.
32
+ */
33
+ focus(rootKey) {
34
+ if (rootKey) this.#$.facade.changeFrameContext(rootKey);
35
+ if (this.#frameContext.get('wysiwygFrame').style.display === 'none') return;
36
+ this.#store.set('_preventBlur', false);
37
+
38
+ if (this.#frameOptions.get('iframe') || !this.#frameContext.get('wysiwyg').contains(this.#$.selection.getNode())) {
39
+ this.nativeFocus();
40
+ } else {
41
+ try {
42
+ const range = this.#$.selection.getRange();
43
+ if (range.startContainer === range.endContainer && dom.check.isWysiwygFrame(range.startContainer)) {
44
+ const currentNode = /** @type {HTMLElement} */ (range.commonAncestorContainer).children[range.startOffset];
45
+ if (!this.#$.format.isLine(currentNode) && !this.#$.component.is(currentNode)) {
46
+ const br = dom.utils.createElement('BR');
47
+ const format = dom.utils.createElement(this.#options.get('defaultLine'), null, br);
48
+ this.#frameContext.get('wysiwyg').insertBefore(format, currentNode);
49
+ this.#$.selection.setRange(br, 0, br, 0);
50
+ return;
51
+ }
52
+ }
53
+ this.#$.selection.setRange(range.startContainer, range.startOffset, range.endContainer, range.endOffset);
54
+ } catch (e) {
55
+ console.warn('[SUNEDITOR.focus.warn] ', e);
56
+ this.nativeFocus();
57
+ }
58
+ }
59
+
60
+ if (this.#store.mode.isBalloon) this.#kernel._eventOrchestrator._toggleToolbarBalloon();
61
+ }
62
+
63
+ /**
64
+ * @description If `focusEl` is a component, then that component is selected; if it is a format element, the last text is selected
65
+ * - If `focusEl` is `null`, then selected last element
66
+ * @param {?Node} [focusEl] Focus element
67
+ */
68
+ focusEdge(focusEl) {
69
+ this.#store.set('_preventBlur', false);
70
+ focusEl ||= this.#frameContext.get('wysiwyg').lastElementChild;
71
+
72
+ const fileComponentInfo = this.#$.component.get(focusEl);
73
+ if (fileComponentInfo) {
74
+ this.#$.component.select(fileComponentInfo.target, fileComponentInfo.pluginName);
75
+ } else if (focusEl) {
76
+ if (focusEl.nodeType !== 3) {
77
+ focusEl = dom.query.getEdgeChild(
78
+ focusEl,
79
+ function (current) {
80
+ return current.childNodes.length === 0 || current.nodeType === 3;
81
+ },
82
+ true,
83
+ );
84
+ }
85
+ if (!focusEl) this.nativeFocus();
86
+ else this.#$.selection.setRange(focusEl, focusEl.textContent.length, focusEl, focusEl.textContent.length);
87
+ } else {
88
+ this.focus();
89
+ }
90
+ }
91
+
92
+ /**
93
+ * @description Focus to wysiwyg area using native focus function
94
+ */
95
+ nativeFocus() {
96
+ this.#$.selection.__focus();
97
+ this.#$.selection.init();
98
+ }
99
+
100
+ /**
101
+ * @description Focusout to wysiwyg area (.blur())
102
+ */
103
+ blur() {
104
+ if (this.#frameOptions.get('iframe')) {
105
+ this.#frameContext.get('wysiwygFrame').blur();
106
+ } else {
107
+ this.#frameContext.get('wysiwyg').blur();
108
+ }
109
+ }
110
+ }
@@ -1,37 +1,50 @@
1
- /**
2
- * @fileoverview history stack closure
3
- */
4
-
5
- import { _w } from '../../helper/env';
6
- import { getNodeFromPath, getNodePath } from '../../helper/dom/domQuery';
7
- import { numbers } from '../../helper';
1
+ import { _w } from '../../../helper/env';
2
+ import { getNodeFromPath, getNodePath } from '../../../helper/dom/domQuery';
3
+ import { numbers } from '../../../helper';
8
4
 
9
5
  /**
10
6
  * @description History stack closure
11
- * @param {__se__EditorCore} editor - The root editor instance
7
+ * @param {SunEditor.Kernel} kernel
12
8
  */
13
- export default function History(editor) {
14
- const frameRoots = editor.frameRoots;
15
- let delayTime = editor.options.get('historyStackDelayTime');
9
+ export default function History(kernel) {
10
+ const $ = kernel.$;
11
+ const store = kernel.store;
12
+
13
+ const contextProvider = $.contextProvider;
14
+ const eventManager = $.eventManager;
15
+ const frameRoots = contextProvider.frameRoots;
16
+ const context = contextProvider.context;
17
+ const frameContext = contextProvider.frameContext;
18
+
19
+ let delayTime = $.options.get('historyStackDelayTime');
16
20
  let pushDelay = null;
17
21
  let stackIndex, stack, rootStack, rootInitContents;
18
22
  let waiting = false;
19
23
  let waitingTime = null;
20
24
 
25
+ /**
26
+ * @description Triggers onChange event and updates UI after history state changes.
27
+ * @param {SunEditor.FrameContext} fc The frame context.
28
+ * @param {number} index The current history index.
29
+ * @param {boolean} isSetFocus Whether to apply tag effects if editor has focus.
30
+ */
21
31
  function change(fc, index, isSetFocus) {
22
- if (isSetFocus && editor.status.hasFocus) editor.eventManager.applyTagEffect();
23
- editor.history.resetButtons(fc.get('key'), index);
32
+ if (isSetFocus && store.get('hasFocus')) kernel._eventOrchestrator.applyTagEffect();
33
+ $.history.resetButtons(fc.get('key'), index);
24
34
 
25
35
  // user event
26
- editor.triggerEvent('onChange', { frameContext: fc, data: fc.get('wysiwyg').innerHTML });
27
- if (editor.context.get('toolbar.main').style.display === 'block') editor.toolbar._showBalloon();
28
- else if (editor.isSubBalloon && editor.context.get('toolbar.sub.main').style.display === 'block') editor.subToolbar._showBalloon();
36
+ eventManager.triggerEvent('onChange', { frameContext: fc, data: fc.get('wysiwyg').innerHTML });
37
+ if (context.get('toolbar_main').style.display === 'block') $.toolbar._showBalloon();
38
+ else if (store.mode.isSubBalloon && context.get('toolbar_sub_main').style.display === 'block') $.subToolbar._showBalloon();
29
39
  }
30
40
 
41
+ /**
42
+ * @description Restores content from the history stack and updates the editor state.
43
+ * @param {number} increase Direction to move in the stack: -1 for undo, +1 for redo.
44
+ */
31
45
  function setContentFromStack(increase) {
32
46
  const prevKey = stack[stackIndex];
33
47
  const prevRoot = rootStack[prevKey];
34
- const fc = editor.frameContext;
35
48
 
36
49
  stackIndex += increase;
37
50
  const rootKey = increase < 0 && prevKey !== stack[stackIndex] && prevRoot.index > 0 ? prevKey : stack[stackIndex];
@@ -39,6 +52,15 @@ export default function History(editor) {
39
52
  root.index += increase;
40
53
 
41
54
  const item = root.value[root.index];
55
+
56
+ if (!item) {
57
+ console.warn('[SunEditor.history.setContent.fail] History state desynchronized. Aborting undo/redo operation.');
58
+ // Rollback to prevent stuck state
59
+ root.index -= increase;
60
+ stackIndex -= increase;
61
+ return;
62
+ }
63
+
42
64
  frameRoots.get(rootKey).get('wysiwyg').innerHTML = item.content;
43
65
 
44
66
  if (prevKey !== rootKey && increase < 0 && stackIndex === 1) {
@@ -60,27 +82,34 @@ export default function History(editor) {
60
82
  }
61
83
  }
62
84
 
63
- editor.changeFrameContext(focusKey);
64
- editor.selection.setRange(getNodeFromPath(focusItem.s.path, focusItem.frame), focusItem.s.offset, getNodeFromPath(focusItem.e.path, focusItem.frame), focusItem.e.offset);
65
- editor.focus();
85
+ $.facade.changeFrameContext(focusKey);
86
+ $.selection.setRange(getNodeFromPath(focusItem.s.path, focusItem.frame), focusItem.s.offset, getNodeFromPath(focusItem.e.path, focusItem.frame), focusItem.e.offset);
87
+ $.focusManager.focus();
66
88
 
67
89
  if (stackIndex < 0) stackIndex = 0;
68
90
  else if (stackIndex >= stack.length) stackIndex = stack.length - 1;
69
91
 
70
- editor.ui._offCurrentController();
71
- editor._checkComponents(false);
72
- editor.char.display();
73
- editor._resourcesStateChange(fc);
92
+ $.ui.offCurrentController();
93
+ $.pluginManager.checkFileInfo(false);
94
+ $.char.display();
95
+ $.ui._syncFrameState(frameContext);
74
96
 
75
97
  // document type
76
- if (fc.has('documentType-use-header')) {
77
- fc.get('documentType').reHeader();
98
+ if (frameContext.has('documentType_use_header')) {
99
+ frameContext.get('documentType').reHeader();
78
100
  }
79
101
 
80
102
  // onChange
81
- change(fc, root.index, true);
103
+ change(frameContext, root.index, true);
82
104
  }
83
105
 
106
+ /**
107
+ * @description Saves content and selection to the history stack.
108
+ * @param {string} content HTML content to save.
109
+ * @param {Range} range Selection range.
110
+ * @param {*} rootKey Root frame key.
111
+ * @param {number} increase Stack index increment.
112
+ */
84
113
  function setStack(content, range, rootKey, increase) {
85
114
  let s, e;
86
115
  if (!range) {
@@ -89,11 +118,11 @@ export default function History(editor) {
89
118
  } else {
90
119
  s = {
91
120
  path: getNodePath(range.startContainer, null, null),
92
- offset: range.startOffset
121
+ offset: range.startOffset,
93
122
  };
94
123
  e = {
95
124
  path: getNodePath(range.endContainer, null, null),
96
- offset: range.endOffset
125
+ offset: range.endOffset,
97
126
  };
98
127
  }
99
128
 
@@ -106,10 +135,14 @@ export default function History(editor) {
106
135
  content: content,
107
136
  s: s,
108
137
  e: e,
109
- frame: frameRoots.get(rootKey).get('wysiwyg')
138
+ frame: frameRoots.get(rootKey).get('wysiwyg'),
110
139
  };
111
140
  }
112
141
 
142
+ /**
143
+ * @description Resets a root frame's history stack.
144
+ * @param {*} rootKey Root frame key.
145
+ */
113
146
  function resetRoot(rootKey) {
114
147
  stackIndex++;
115
148
  stack[stackIndex] = rootKey;
@@ -119,15 +152,23 @@ export default function History(editor) {
119
152
  content: rootInitContents[rootKey],
120
153
  s: { path: [0, 0], offset: [0, 0] },
121
154
  e: { path: 0, offset: 0 },
122
- frame: frameRoots.get(rootKey).get('wysiwyg')
155
+ frame: frameRoots.get(rootKey).get('wysiwyg'),
123
156
  };
124
157
  }
125
158
 
159
+ /**
160
+ * @description Initializes a root frame's history stack.
161
+ * @param {*} rootKey Root frame key.
162
+ */
126
163
  function initRoot(rootKey) {
127
164
  rootStack[rootKey] = { value: [], index: -1 };
128
165
  rootInitContents[rootKey] = frameRoots.get(rootKey).get('wysiwyg').innerHTML;
129
166
  }
130
167
 
168
+ /**
169
+ * @description Clears future history and reinitializes deleted roots.
170
+ * @param {Object} root Root stack object.
171
+ */
131
172
  function refreshRoots(root) {
132
173
  const deleteRoot = [];
133
174
  for (let i = stackIndex + 1, len = stack.length; i < len; i++) {
@@ -136,8 +177,8 @@ export default function History(editor) {
136
177
  }
137
178
 
138
179
  stack = stack.slice(0, stackIndex + 1);
139
- root.value.splice(stackIndex + 1);
140
- editor.applyCommandTargets('redo', (e) => {
180
+ root.value.splice(root.index + 1);
181
+ $.commandDispatcher.applyTargets('redo', (e) => {
141
182
  e.disabled = true;
142
183
  });
143
184
 
@@ -146,8 +187,13 @@ export default function History(editor) {
146
187
  }
147
188
  }
148
189
 
190
+ /**
191
+ * @description Pushes current content to the history stack.
192
+ * @param {*} rootKey Root frame key.
193
+ * @param {Range} range Selection range.
194
+ */
149
195
  function pushStack(rootKey, range) {
150
- editor._checkComponents(false);
196
+ $.pluginManager.checkFileInfo(false);
151
197
 
152
198
  const fc = frameRoots.get(rootKey);
153
199
  const current = fc.get('wysiwyg').innerHTML;
@@ -159,31 +205,32 @@ export default function History(editor) {
159
205
  setStack(current, range, rootKey, 1);
160
206
 
161
207
  if (stackIndex === 1) {
162
- editor.applyCommandTargets('undo', (e) => {
208
+ $.commandDispatcher.applyTargets('undo', (e) => {
163
209
  e.disabled = false;
164
210
  });
165
211
  }
166
212
 
167
- editor.char.display();
213
+ $.char.display();
168
214
  change(fc, root.index, false);
169
215
  }
170
216
 
171
217
  return {
172
218
  /**
173
219
  * @description Saving the current status to the history object stack
174
- * - If "delay" is true, it will be saved after (options.get('historyStackDelayTime') || 400) milliseconds.
175
- * - If the function is called again with the "delay" argument true before it is saved, the delay time is renewed.
220
+ * - If `delay` is `true`, it will be saved after (`options.get('historyStackDelayTime')` || 400) milliseconds.
221
+ * - If the function is called again with the `delay` argument `true` before it is saved, the delay time is renewed.
176
222
  * - You can specify the delay time by sending a number.
177
- * @param {boolean|number} delay If true, add stack without delay time.
178
- * @param {*=} [rootKey] The key of the root frame to save history for.
223
+ * @param {boolean|number} delay If `true`, add stack without delay time.
224
+ * @param {*} [rootKey] The key of the root frame to save history for.
179
225
  */
180
226
  push(delay, rootKey) {
181
227
  if (waiting) return;
182
228
 
183
- rootKey = rootKey || editor.status.rootKey;
184
- const range = editor.status._range;
229
+ rootKey = rootKey || rootKey === null ? rootKey : store.get('rootKey');
230
+ const range = store.get('_range');
185
231
 
186
- _w.setTimeout(editor._resourcesStateChange.bind(editor, frameRoots.get(rootKey)), 0);
232
+ // Defer frame sync (code view, page mirror) — DOM updates from the current action must complete first
233
+ _w.setTimeout($.ui._syncFrameState.bind($.ui, frameRoots.get(rootKey)), 0);
187
234
  const time = typeof delay === 'number' ? (delay > 0 ? delay : 0) : !delay ? 0 : delayTime;
188
235
 
189
236
  if (!time || pushDelay) {
@@ -194,6 +241,7 @@ export default function History(editor) {
194
241
  }
195
242
  }
196
243
 
244
+ // Debounced history save — coalesces rapid edits into a single snapshot (cleared on next push or immediate save)
197
245
  pushDelay = _w.setTimeout(() => {
198
246
  _w.clearTimeout(pushDelay);
199
247
  pushDelay = null;
@@ -234,10 +282,10 @@ export default function History(editor) {
234
282
 
235
283
  /**
236
284
  * @description Overwrites the current state in the history stack with the latest content.
237
- * @param {string=} [rootKey] The key of the root frame to overwrite.
285
+ * @param {string} [rootKey] The key of the root frame to overwrite.
238
286
  */
239
287
  overwrite(rootKey) {
240
- setStack(frameRoots.get(rootKey || editor.status.rootKey).get('wysiwyg').innerHTML, null, editor.status.rootKey, 0);
288
+ setStack(frameRoots.get(rootKey || store.get('rootKey')).get('wysiwyg').innerHTML, null, store.get('rootKey'), 0);
241
289
  },
242
290
 
243
291
  /**
@@ -250,6 +298,7 @@ export default function History(editor) {
250
298
  _w.clearTimeout(waitingTime);
251
299
  waitingTime = null;
252
300
  }
301
+ // Safety auto-resume — prevents permanent history freeze if resume() is never called (cleared on resume)
253
302
  waitingTime = _w.setTimeout(() => {
254
303
  waiting = false;
255
304
  }, 5000);
@@ -270,12 +319,12 @@ export default function History(editor) {
270
319
  * @description Resets the history stack and disables related UI buttons.
271
320
  */
272
321
  reset() {
273
- editor.applyCommandTargets('undo', (e) => (e.disabled = true));
274
- editor.applyCommandTargets('redo', (e) => (e.disabled = true));
275
- editor.applyCommandTargets('save', (e) => (e.disabled = true));
322
+ $.commandDispatcher.applyTargets('undo', (e) => (e.disabled = true));
323
+ $.commandDispatcher.applyTargets('redo', (e) => (e.disabled = true));
324
+ $.commandDispatcher.applyTargets('save', (e) => (e.disabled = true));
276
325
 
277
- editor.applyFrameRoots((e) => e.set('historyIndex', -1));
278
- editor.applyFrameRoots((e) => e.set('isChanged', false));
326
+ contextProvider.applyToRoots((e) => e.set('historyIndex', -1));
327
+ contextProvider.applyToRoots((e) => e.set('isChanged', false));
279
328
 
280
329
  stackIndex = -1;
281
330
  stack = [];
@@ -283,7 +332,7 @@ export default function History(editor) {
283
332
  rootInitContents = {};
284
333
  waiting = false;
285
334
 
286
- const rootKeys = editor.rootKeys;
335
+ const rootKeys = contextProvider.rootKeys;
287
336
  for (let i = 0, len = rootKeys.length; i < len; i++) {
288
337
  initRoot(rootKeys[i]);
289
338
  }
@@ -298,14 +347,14 @@ export default function History(editor) {
298
347
  const isReset = !numbers.is(index);
299
348
  const root = rootStack[rootKey === undefined ? stack[stackIndex] : rootKey];
300
349
  index = !isReset ? index : root.index;
301
- const target = editor.frameRoots.get(rootKey);
350
+ const target = frameRoots.get(rootKey);
302
351
  const rootLen = root.value.length - 1;
303
352
 
304
- editor.applyCommandTargets('undo', (e) => {
353
+ $.commandDispatcher.applyTargets('undo', (e) => {
305
354
  if (index > 0 && index <= rootLen) e.disabled = false;
306
355
  else e.disabled = true;
307
356
  });
308
- editor.applyCommandTargets('redo', (e) => {
357
+ $.commandDispatcher.applyTargets('redo', (e) => {
309
358
  if (index > -1 && index < rootLen) e.disabled = false;
310
359
  else e.disabled = true;
311
360
  });
@@ -316,20 +365,20 @@ export default function History(editor) {
316
365
 
317
366
  target.set('historyIndex', index);
318
367
  target.set('isChanged', isChanged);
319
- editor.applyCommandTargets('save', (e) => {
368
+ $.commandDispatcher.applyTargets('save', (e) => {
320
369
  if (isChanged) e.disabled = false;
321
370
  else e.disabled = true;
322
371
  });
323
372
 
324
- editor.triggerEvent('onResetButtons', { rootKey });
373
+ eventManager.triggerEvent('onResetButtons', { rootKey });
325
374
  },
326
375
 
327
376
  /**
328
377
  * @description Returns the root stack containing the history of each frame.
329
378
  * @returns {{content: string, s: {path: number|number[], offset: number|number[]}, e: {path: number|number[], offset: number|number[]}, frame: HTMLElement}} The root stack object.
330
379
  * - content: content html string
331
- * - s: depth info of the "start" range
332
- * - e: depth info of the "end" range
380
+ * - s: depth info of the `start` range
381
+ * - e: depth info of the `end` range
333
382
  * - frame: wysiwyg editable element.
334
383
  */
335
384
  getRootStack() {
@@ -347,9 +396,10 @@ export default function History(editor) {
347
396
  /**
348
397
  * @description Clears the entire history stack and cancels any pending save operations.
349
398
  */
350
- destroy() {
399
+ _destroy() {
351
400
  if (pushDelay) _w.clearTimeout(pushDelay);
401
+ if (waitingTime) _w.clearTimeout(waitingTime);
352
402
  stackIndex = stack = rootStack = rootInitContents = null;
353
- }
403
+ },
354
404
  };
355
405
  }