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,452 @@
1
+ import { dom, converter } from '../../helper';
2
+ import { InitOptions, CreateStatusbar } from '../section/constructor';
3
+ import { OPTION_FRAME_FIXED_FLAG, OPTION_FIXED_FLAG } from '../schema/options';
4
+ import { UpdateStatusbarContext } from '../schema/frameContext';
5
+
6
+ /**
7
+ * @typedef {import('../schema/options').ProcessedBaseOptions} ConfigAllBaseOptions
8
+ * @typedef {import('../schema/options').ProcessedFrameOptions} ConfigAllFrameOptions
9
+ */
10
+
11
+ /**
12
+ * @typedef {Object} BaseOptionsMap
13
+ * - A Map containing all processed editor base options.
14
+ * - This Map contains all keys from {@link ConfigAllBaseOptions}, where:
15
+ * - Keys are option names (string)
16
+ * - Values depend on the specific option (see {@link ConfigAllBaseOptions} for details)
17
+ *
18
+ * @property {<K extends keyof ConfigAllBaseOptions>(k: K) => ConfigAllBaseOptions[K]} get - Retrieves the value of a specific option.
19
+ * @property {<K extends keyof ConfigAllBaseOptions>(k: K, v: ConfigAllBaseOptions[K]) => void} set - Sets the value of a specific option.
20
+ * @property {<K extends keyof ConfigAllBaseOptions>(k: K) => boolean} has - Checks if a specific option exists.
21
+ * @property {() => Object<keyof ConfigAllBaseOptions, *>} getAll - Retrieves all options as an object.
22
+ * @property {(options: Map<*, *>) => void} setMany - Sets multiple options at once.
23
+ * @property {(newMap: SunEditor.InitOptions) => void} reset - Replaces all options with a new Map.
24
+ * @property {() => number} size - Get option size
25
+ * @property {() => void} clear - Clears all stored options.
26
+ */
27
+
28
+ /**
29
+ * @typedef {Object} FrameOptionsMap
30
+ * - A Map containing all processed frame-level options.
31
+ * - This Map contains all keys from {@link ConfigAllFrameOptions}, where:
32
+ * - Keys are option names (string)
33
+ * - Values depend on the specific option (see {@link ConfigAllFrameOptions} for details)
34
+ *
35
+ * @property {<K extends keyof ConfigAllFrameOptions>(k: K) => ConfigAllFrameOptions[K]} get - Retrieves the value of a specific option.
36
+ * @property {<K extends keyof ConfigAllFrameOptions>(k: K, v: ConfigAllFrameOptions[K]) => void} set - Sets the value of a specific option.
37
+ * @property {<K extends keyof ConfigAllFrameOptions>(k: K) => boolean} has - Checks if a specific option exists.
38
+ * @property {() => Object<keyof ConfigAllFrameOptions, *>} getAll - Retrieves all options as an object.
39
+ * @property {(options: Map<*, *>) => void} setMany - Sets multiple options at once.
40
+ * @property {(newMap: SunEditor.FrameOptions) => void} reset - Replaces all options with a new Map.
41
+ * @property {() => number} size - Get option size
42
+ * @property {() => void} clear - Clears all stored options.
43
+ */
44
+
45
+ /**
46
+ * @description Provides Map-based access to editor options (base and per-frame).
47
+ */
48
+ export default class OptionProvider {
49
+ #kernel;
50
+
51
+ /**
52
+ * @description Origin options
53
+ * @type {SunEditor.InitOptions}
54
+ */
55
+ #originOptions;
56
+
57
+ /**
58
+ * @description Utility object that manages the editor's runtime options.
59
+ * Provides methods to get, set, and inspect internal editor options.
60
+ * @type {BaseOptionsMap}
61
+ */
62
+ #optionsMap;
63
+
64
+ /**
65
+ * @description Utility object that manages the editor's runtime [frame] options.
66
+ * Provides methods to get, set, and inspect internal [frame] options.
67
+ * @type {FrameOptionsMap}
68
+ */
69
+ #frameOptionsMap;
70
+
71
+ /**
72
+ * @constructor
73
+ * @param {SunEditor.Kernel} kernel
74
+ * @param {import('../section/constructor').ConstructorReturnType} product
75
+ */
76
+ constructor(kernel, product, options) {
77
+ this.#kernel = kernel;
78
+
79
+ this.#originOptions = options;
80
+
81
+ this.#optionsMap = this.#CreateOptionsMap({ value: product.options });
82
+ this.#frameOptionsMap = this.#CreateFrameOptionsMap({ value: new Map() });
83
+ }
84
+
85
+ /**
86
+ * @return {BaseOptionsMap}
87
+ */
88
+ get options() {
89
+ return this.#optionsMap;
90
+ }
91
+
92
+ get frameOptions() {
93
+ return this.#frameOptionsMap;
94
+ }
95
+
96
+ /**
97
+ * @description Add or reset option property (Editor is reloaded)
98
+ * @param {SunEditor.InitOptions} newOptions Options
99
+ */
100
+ reset(newOptions) {
101
+ const { $ } = this.#kernel;
102
+
103
+ // use kernel
104
+ const frameRoots = $.frameRoots;
105
+ const context = $.context;
106
+ const eventManager = $.eventManager;
107
+ const format = $.format;
108
+ const html = $.html;
109
+ const char = $.char;
110
+ const viewer = $.viewer;
111
+ const plugins = $.plugins;
112
+ const history = $.history;
113
+ const ui = $.ui;
114
+
115
+ const eventOrchestrator = this.#kernel._eventOrchestrator;
116
+
117
+ viewer.codeView(false);
118
+ viewer.showBlocks(false);
119
+
120
+ const rootDiff = new Map();
121
+ const newRoots = [];
122
+ const newRootKeys = new Map();
123
+
124
+ // frame roots
125
+ const nRoot = {};
126
+ for (const k in newOptions) {
127
+ if (OPTION_FRAME_FIXED_FLAG[k] === undefined) continue;
128
+ nRoot[k] = newOptions[k];
129
+ delete newOptions[k];
130
+ }
131
+ for (const rootKey of frameRoots.keys()) {
132
+ newOptions[rootKey || ''] = { ...nRoot, ...newOptions[rootKey || ''] };
133
+ }
134
+
135
+ // check reoption validation
136
+ const newOptionKeys = Object.keys(newOptions);
137
+ this.#CheckResetKeys(newOptionKeys, plugins, '');
138
+ if (newOptionKeys.length === 0) return;
139
+
140
+ if (frameRoots.size === 1) {
141
+ newOptionKeys.unshift(null);
142
+ }
143
+
144
+ // option merge
145
+ const _originOptions = [this.#originOptions, newOptions].reduce((init, option) => {
146
+ for (const key in option) {
147
+ if (frameRoots.has(key || null)) {
148
+ this.#RestoreFrameOptions(key, option, frameRoots, rootDiff, newRootKeys, newRoots);
149
+ } else {
150
+ init[key] = option[key];
151
+ }
152
+ }
153
+ return init;
154
+ }, /** @type {SunEditor.InitOptions} */ ({}));
155
+
156
+ // init options
157
+ const options = this.#optionsMap;
158
+ const newO = InitOptions(_originOptions, newRoots, plugins);
159
+
160
+ const newOptionMap = newO.o;
161
+ const newFrameMap = newO.frameMap;
162
+ /** --------- [root start] --------- */
163
+ for (let i = 0, len = newOptionKeys.length, k; i < len; i++) {
164
+ k = /** @type {keyof ConfigAllBaseOptions} */ (newOptionKeys[i] || null);
165
+
166
+ if (newRootKeys.has(k)) {
167
+ const diff = rootDiff.get(k);
168
+ const fc = frameRoots.get(k);
169
+ const originOptions = fc.get('options');
170
+ const newRootOptions = newFrameMap.get(k);
171
+
172
+ // --- set options : fc ---
173
+ fc.set('options', newRootOptions);
174
+
175
+ // statusbar-changed
176
+ if (diff.has('statusbar-changed')) {
177
+ // statusbar
178
+ dom.utils.removeItem(fc.get('statusbar'));
179
+ if (newRootOptions.get('statusbar')) {
180
+ const statusbar = CreateStatusbar(newRootOptions, null).statusbar;
181
+ fc.get('container').appendChild(statusbar);
182
+ UpdateStatusbarContext(statusbar, fc);
183
+ eventOrchestrator.__addStatusbarEvent(fc, newRootOptions);
184
+ } else {
185
+ eventManager.removeEvent(originOptions.get('__statusbarEvent'));
186
+ newRootOptions.set('__statusbarEvent', null);
187
+ UpdateStatusbarContext(null, fc);
188
+ }
189
+ // charCounter
190
+ if (fc.get('statusbar')) {
191
+ char.display(fc);
192
+ }
193
+ }
194
+
195
+ // iframe's options
196
+ if (diff.has('iframe_attributes')) {
197
+ const frame = fc.get('wysiwygFrame');
198
+ const originAttr = originOptions.get('iframe_attributes');
199
+ const newAttr = newRootOptions.get('iframe_attributes');
200
+ for (const origin_k in originAttr) frame.removeAttribute(origin_k);
201
+ for (const new_k in newAttr) frame.setAttribute(new_k, newAttr[new_k]);
202
+ }
203
+
204
+ if (diff.has('iframe_cssFileName')) {
205
+ const docHead = fc.get('_wd').head;
206
+ const links = docHead.getElementsByTagName('link');
207
+ while (links[0]) docHead.removeChild(links[0]);
208
+ const parseDocument = new DOMParser().parseFromString(converter._setIframeStyleLinks(newRootOptions.get('iframe_cssFileName')), 'text/html');
209
+ const newLinks = parseDocument.head.children;
210
+ const sTag = docHead.querySelector('style');
211
+ while (newLinks[0]) docHead.insertBefore(newLinks[0], sTag);
212
+ }
213
+
214
+ if (diff.has('placeholder')) {
215
+ fc.get('placeholder').textContent = newRootOptions.get('placeholder');
216
+ }
217
+
218
+ // frame styles
219
+ ui.setEditorStyle(newRootOptions.get('editorStyle'), fc);
220
+
221
+ // frame attributes
222
+ const frame = fc.get('wysiwyg');
223
+ const originAttr = originOptions.get('editableFrameAttributes');
224
+ const newAttr = newRootOptions.get('editableFrameAttributes');
225
+ for (const origin_k in originAttr) frame.removeAttribute(origin_k);
226
+ for (const new_k in newAttr) frame.setAttribute(new_k, newAttr[new_k]);
227
+
228
+ continue;
229
+ }
230
+ /** --------- [root end] --------- */
231
+
232
+ /** Options that require a function call */
233
+ switch (k) {
234
+ case 'theme': {
235
+ ui.setTheme(newOptionMap.get('theme'));
236
+ break;
237
+ }
238
+ case 'events': {
239
+ const events = newOptionMap.get('events');
240
+ for (const name in events) {
241
+ eventManager.events[name] = events[name];
242
+ }
243
+ break;
244
+ }
245
+ case 'autoStyleify': {
246
+ html.__resetAutoStyleify(newOptionMap.get('autoStyleify'));
247
+ break;
248
+ }
249
+ case 'textDirection': {
250
+ ui.setDir(newOptionMap.get('textDirection') === 'rtl' ? 'rtl' : 'ltr');
251
+ break;
252
+ }
253
+ case 'historyStackDelayTime': {
254
+ history.resetDelayTime(newOptionMap.get('historyStackDelayTime'));
255
+ break;
256
+ }
257
+ case 'defaultLineBreakFormat': {
258
+ format.__resetBrLineBreak(newOptionMap.get('defaultLineBreakFormat'));
259
+ }
260
+ }
261
+ }
262
+
263
+ // --- set options ---
264
+ options.setMany(newOptionMap);
265
+
266
+ /** apply options */
267
+ // _origin
268
+ this.#originOptions = _originOptions;
269
+
270
+ // --- [toolbar] ---
271
+ const toolbar = context.get('toolbar_main');
272
+ // width
273
+ if (/inline|balloon/i.test(options.get('mode')) && newOptionKeys.includes('toolbar_width')) {
274
+ toolbar.style.width = options.get('toolbar_width');
275
+ }
276
+ // hide
277
+ if (options.get('toolbar_hide')) {
278
+ toolbar.style.display = 'none';
279
+ } else {
280
+ toolbar.style.display = '';
281
+ }
282
+ // shortcuts hint
283
+ if (options.get('shortcutsHint')) {
284
+ dom.utils.removeClass(toolbar, 'se-shortcut-hide');
285
+ } else {
286
+ dom.utils.addClass(toolbar, 'se-shortcut-hide');
287
+ }
288
+ }
289
+
290
+ /**
291
+ * @description Add or reset frame option property (Editor is reloaded)
292
+ * @param {SunEditor.FrameOptions} newOptions Options
293
+ */
294
+ resetFrame(newOptions) {
295
+ this.#frameOptionsMap.reset(newOptions);
296
+ }
297
+
298
+ #RestoreFrameOptions(key, option, frameRoots, rootDiff, newRootKeys, newRoots) {
299
+ const nro = option[key];
300
+ const newKeys = Object.keys(nro);
301
+ this.#CheckResetKeys(newKeys, null, key + '.');
302
+ if (newKeys.length === 0) return false;
303
+
304
+ const rootKey = key || null;
305
+ rootDiff.set(rootKey, new Map());
306
+
307
+ const o = frameRoots.get(rootKey).get('options').get('_origin');
308
+ const no = {};
309
+ const hasOwn = Object.prototype.hasOwnProperty;
310
+ for (const rk in nro) {
311
+ if (!hasOwn.call(OPTION_FRAME_FIXED_FLAG, rk)) continue;
312
+ const roV = nro[rk];
313
+ if (!newKeys.includes(rk) || o[rk] === roV) continue;
314
+ rootDiff.get(rootKey).set(this.#GetResetDiffKey(rk), true);
315
+ no[rk] = roV;
316
+ }
317
+
318
+ const newO = { ...o, ...no };
319
+ newRootKeys.set(rootKey, new Map(Object.entries(newO)));
320
+ newRoots.push({ key: rootKey, options: newO });
321
+ }
322
+
323
+ #GetResetDiffKey(key) {
324
+ if (/^statusbar|^charCounter/.test(key)) return 'statusbar-changed';
325
+ return key;
326
+ }
327
+
328
+ #CheckResetKeys(keys, plugins, root) {
329
+ for (let i = 0, len = keys.length, k; i < len; i++) {
330
+ k = keys[i];
331
+ if (OPTION_FIXED_FLAG[k] === 'fixed' || OPTION_FRAME_FIXED_FLAG[k] === 'fixed' || (plugins && plugins[k])) {
332
+ console.warn(`[SUNEDITOR.warn.resetOptions] The "[${root + k}]" option cannot be changed after the editor is created.`);
333
+ keys.splice(i--, 1);
334
+ len--;
335
+ }
336
+ }
337
+ }
338
+
339
+ /**
340
+ * @description Creates a utility wrapper for editor base options.
341
+ * - Provides get, set, has, getAll, and setMany methods with internal Map support.
342
+ * @param {*} _options - Origin options object
343
+ * @returns {BaseOptionsMap}
344
+ */
345
+ #CreateOptionsMap(_options) {
346
+ let store = _options.value;
347
+
348
+ return {
349
+ /**
350
+ * @template {keyof ConfigAllBaseOptions} K
351
+ * @param {K} k
352
+ * @returns {ConfigAllBaseOptions[K]}
353
+ */
354
+ get(k) {
355
+ return store.get(k);
356
+ },
357
+ /**
358
+ * @template {keyof ConfigAllBaseOptions} K
359
+ * @param {K} k
360
+ * @param {ConfigAllBaseOptions[K]} v
361
+ */
362
+ set(k, v) {
363
+ return store.set(k, v);
364
+ },
365
+ /**
366
+ * @template {keyof ConfigAllBaseOptions} K
367
+ * @param {K} k
368
+ * @returns {boolean}
369
+ */
370
+ has(k) {
371
+ return store.has(k);
372
+ },
373
+ getAll() {
374
+ return Object.fromEntries(store.entries());
375
+ },
376
+ /** @param {Map<*, *>} obj */
377
+ setMany(obj) {
378
+ obj.forEach((v, k) => store.set(k, v));
379
+ },
380
+ /** @param {SunEditor.InitOptions} newMap */
381
+ reset(newMap) {
382
+ store = _options.value = newMap;
383
+ },
384
+ size() {
385
+ return store.size;
386
+ },
387
+ clear() {
388
+ store.clear();
389
+ },
390
+ };
391
+ }
392
+
393
+ /**
394
+ * @description Creates a utility wrapper for editor frame options.
395
+ * Provides get, set, has, getAll, and setMany methods with internal Map support.
396
+ * @param {*} _options - Origin options object
397
+ * @returns {FrameOptionsMap}
398
+ */
399
+ #CreateFrameOptionsMap(_options) {
400
+ let store = _options.value;
401
+
402
+ return {
403
+ /**
404
+ * @template {keyof ConfigAllFrameOptions} K
405
+ * @param {K} k
406
+ * @returns {ConfigAllFrameOptions[K]}
407
+ */
408
+ get(k) {
409
+ return store.get(k);
410
+ },
411
+ /**
412
+ * @template {keyof ConfigAllFrameOptions} K
413
+ * @param {K} k
414
+ * @param {ConfigAllFrameOptions[K]} v
415
+ */
416
+ set(k, v) {
417
+ return store.set(k, v);
418
+ },
419
+ /**
420
+ * @template {keyof ConfigAllFrameOptions} K
421
+ * @param {K} k
422
+ * @returns {boolean}
423
+ */
424
+ has(k) {
425
+ return store.has(k);
426
+ },
427
+ getAll() {
428
+ return Object.fromEntries(store.entries());
429
+ },
430
+ /** @param {Map<*, *>} obj */
431
+ setMany(obj) {
432
+ obj.forEach((v, k) => store.set(k, v));
433
+ },
434
+ /** @param {SunEditor.FrameOptions} newMap */
435
+ reset(newMap) {
436
+ store = _options.value = newMap;
437
+ },
438
+ size() {
439
+ return store.size;
440
+ },
441
+ clear() {
442
+ store.clear();
443
+ },
444
+ };
445
+ }
446
+
447
+ _destroy() {
448
+ this.#originOptions = null;
449
+ this.#optionsMap.clear();
450
+ this.#frameOptionsMap.clear();
451
+ }
452
+ }