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,173 @@
1
+ import { numbers } from '../../helper';
2
+
3
+ /**
4
+ * @typedef {Object} StoreState
5
+ * @property {*} rootKey - Current root frame key.
6
+ * @property {boolean} hasFocus - Whether the editor has focus.
7
+ * @property {number} tabSize - Tab character space count.
8
+ * @property {number} indentSize - `block` indent margin size (px).
9
+ * @property {number} codeIndentSize - Code view indent space count.
10
+ * @property {Array<string>} currentNodes - Selection path tag names (for navigation bar).
11
+ * @property {Array<string>} currentNodesMap - Active command/style names from selection path.
12
+ * @property {number} initViewportHeight - Viewport height at initialization.
13
+ * @property {number} currentViewportHeight - Current visual viewport height.
14
+ * @property {boolean} controlActive - Whether a controller or component is currently active, used to manage `blur`/`focus` behavior.
15
+ * @property {(fc: SunEditor.FrameContext) => boolean} isScrollable - Whether the frame content is scrollable (derived from `height`/`maxHeight` options).
16
+ * @property {?Node} _lastSelectionNode - Last selection node processed by `selectionState.update()` (cache for dedup).
17
+ * @property {?Range} _range - Cached selection range.
18
+ * @property {boolean} _mousedown - Whether `mousedown` is pressed.
19
+ * @property {boolean} _preventBlur - Suppress `blur` event handling.
20
+ * @property {boolean} _preventFocus - Suppress `focus` event handling.
21
+ */
22
+
23
+ /**
24
+ * @typedef {Object} StoreMode - Toolbar display mode flags (immutable after init).
25
+ * @property {boolean} isClassic - Whether the toolbar is in classic (top-fixed) mode.
26
+ * @property {boolean} isInline - Whether the toolbar is in `inline` mode (appears above the editor on focus).
27
+ * @property {boolean} isBalloon - Whether the toolbar is in `balloon` mode (appears on text selection).
28
+ * @property {boolean} isBalloonAlways - Whether the toolbar is in `balloon-always` mode (always visible as floating).
29
+ * @property {boolean} isSubBalloon - Whether the sub-toolbar is in `balloon` mode.
30
+ * @property {boolean} isSubBalloonAlways - Whether the sub-toolbar is in `balloon-always` mode.
31
+ */
32
+
33
+ /**
34
+ * @description Central runtime state management for the editor.
35
+ * - Does not store DOM references (kept in `frameContext`).
36
+ * - Does not store configuration values (kept in `options`).
37
+ * - Only manages runtime state.
38
+ */
39
+ class Store {
40
+ /** @type {StoreState} */
41
+ #state;
42
+ #subscribers = new Map();
43
+
44
+ /**
45
+ * @param {import('../section/constructor').ConstructorReturnType} product - Constructor product
46
+ */
47
+ constructor(product) {
48
+ const options = product.options;
49
+ const mode = options.get('mode');
50
+ const subMode = options.get('_subMode');
51
+
52
+ /**
53
+ * @internal
54
+ * @description If `true`, initialize all indexes of image, video information
55
+ * @type {boolean}
56
+ */
57
+ this._editorInitFinished = false;
58
+
59
+ /** @type {StoreMode} */
60
+ this.mode = {
61
+ isClassic: /classic/i.test(mode),
62
+ isInline: /inline/i.test(mode),
63
+ isBalloon: /balloon/i.test(mode),
64
+ isBalloonAlways: /balloon-always/i.test(mode),
65
+ isSubBalloon: /balloon/i.test(subMode),
66
+ isSubBalloonAlways: /balloon-always/i.test(subMode),
67
+ };
68
+
69
+ this.#state = {
70
+ rootKey: product.rootId,
71
+ hasFocus: false,
72
+ tabSize: 4,
73
+ indentSize: 25,
74
+ codeIndentSize: 2,
75
+ currentNodes: [],
76
+ currentNodesMap: [],
77
+ initViewportHeight: 0,
78
+ currentViewportHeight: 0,
79
+ controlActive: false,
80
+ _lastSelectionNode: null,
81
+ isScrollable: (fc) => {
82
+ const fo = fc.get('options');
83
+ const height = fo.get('height');
84
+ const maxHeight = fo.get('maxHeight');
85
+
86
+ if (height !== 'auto') {
87
+ return true;
88
+ }
89
+
90
+ if (!maxHeight) {
91
+ return false;
92
+ }
93
+
94
+ // height === 'auto' && maxHeight
95
+ return fc.get('wysiwyg').offsetHeight >= numbers.get(maxHeight);
96
+ },
97
+ _range: null,
98
+ _mousedown: false,
99
+ _preventBlur: false,
100
+ _preventFocus: false,
101
+ };
102
+ }
103
+
104
+ /**
105
+ * @description Get state value (supports underscore notation)
106
+ * @template {keyof StoreState} K
107
+ * @param {K} key
108
+ * @returns {StoreState[K]}
109
+ */
110
+ get(key) {
111
+ return this.#state[key];
112
+ }
113
+
114
+ /**
115
+ * @description Set state value and notify subscribers
116
+ * @template {keyof StoreState} K
117
+ * @param {K} key
118
+ * @param {StoreState[K]} value - Value to set
119
+ */
120
+ set(key, value) {
121
+ const oldValue = this.#state[key];
122
+ this.#state[key] = value;
123
+
124
+ // Notify subscribers
125
+ this.#notify(key, value, oldValue);
126
+ }
127
+
128
+ /**
129
+ * @description Subscribe to state changes
130
+ * @template {keyof StoreState} K
131
+ * @param {K} path - Path to subscribe
132
+ * @param {(newValue: StoreState[K], oldValue: StoreState[K]) => void} callback
133
+ * @returns {() => void} Unsubscribe function
134
+ */
135
+ subscribe(path, callback) {
136
+ if (!this.#subscribers.has(path)) {
137
+ this.#subscribers.set(path, new Set());
138
+ }
139
+ this.#subscribers.get(path).add(callback);
140
+
141
+ return () => this.#subscribers.get(path).delete(callback);
142
+ }
143
+
144
+ /**
145
+ * @param {keyof StoreState} path
146
+ * @param {*} newValue
147
+ * @param {*} oldValue
148
+ */
149
+ #notify(path, newValue, oldValue) {
150
+ const subscribers = this.#subscribers.get(path);
151
+ if (!subscribers) return;
152
+
153
+ for (const cb of subscribers) {
154
+ try {
155
+ cb(newValue, oldValue);
156
+ } catch (e) {
157
+ console.error(`[Store] Subscriber error for "${path}":`, e);
158
+ }
159
+ }
160
+ }
161
+
162
+ // Internal API
163
+ _reset() {
164
+ // Reset to initial state
165
+ }
166
+
167
+ _destroy() {
168
+ this.#subscribers.clear();
169
+ this.#state = null;
170
+ }
171
+ }
172
+
173
+ export default Store;
@@ -2,59 +2,58 @@
2
2
  * @fileoverview Char class
3
3
  */
4
4
 
5
- import CoreInjector from '../../editorInjector/_core';
6
- import { _w, isEdge } from '../../helper/env';
7
- import { addClass, removeClass, hasClass } from '../../helper/dom/domUtils';
5
+ import { _w, isEdge } from '../../../helper/env';
6
+ import { addClass, removeClass, hasClass } from '../../../helper/dom/domUtils';
8
7
 
9
8
  /**
10
- * @typedef {Omit<Char & Partial<__se__EditorInjector>, 'char'>} CharThis
11
- */
12
-
13
- /**
14
- * @constructor
15
- * @this {CharThis}
16
9
  * @description character count, character limit, etc. management class
17
- * @param {__se__EditorCore} editor - The root editor instance
18
10
  */
19
- function Char(editor) {
20
- CoreInjector.call(this, editor);
21
- }
11
+ class Char {
12
+ #$;
13
+ #frameContext;
14
+ #frameOptions;
15
+
16
+ /**
17
+ * @constructor
18
+ * @param {SunEditor.Kernel} kernel
19
+ */
20
+ constructor(kernel) {
21
+ this.#$ = kernel.$;
22
+ this.#frameContext = this.#$.frameContext;
23
+ this.#frameOptions = this.#$.frameOptions;
24
+ }
22
25
 
23
- Char.prototype = {
24
26
  /**
25
- * @this {CharThis}
26
27
  * @description Returns false if char count is greater than "frameOptions.get('charCounter_max')" when "html" is added to the current editor.
27
28
  * @param {Node|string} html Element node or String.
28
29
  * @returns {boolean}
29
30
  */
30
31
  check(html) {
31
- const maxCharCount = this.editor.frameOptions.get('charCounter_max');
32
+ const maxCharCount = this.#frameOptions.get('charCounter_max');
32
33
  if (maxCharCount) {
33
- const length = this.getLength(typeof html === 'string' ? html : this.editor.frameOptions.get('charCounter_type') === 'byte-html' && html.nodeType === 1 ? /** @type {HTMLElement} */ (html).outerHTML : html.textContent);
34
+ const length = this.getLength(typeof html === 'string' ? html : this.#frameOptions.get('charCounter_type') === 'byte-html' && html.nodeType === 1 ? /** @type {HTMLElement} */ (html).outerHTML : html.textContent);
34
35
  if (length > 0 && length + this.getLength() > maxCharCount) {
35
- CounterBlink(this.editor.frameContext.get('charWrapper'));
36
+ CounterBlink(this.#frameContext.get('charWrapper'));
36
37
  return false;
37
38
  }
38
39
  }
39
40
  return true;
40
- },
41
+ }
41
42
 
42
43
  /**
43
- * @this {CharThis}
44
44
  * @description Get the [content]'s number of characters or binary data size. (frameOptions.get('charCounter_type'))
45
45
  * - If [content] is undefined, get the current editor's number of characters or binary data size.
46
- * @param {string=} content Content to count. (defalut: this.editor.frameContext.get('wysiwyg'))
46
+ * @param {string} [content] Content to count. (defalut: this.#frameContext.get('wysiwyg'))
47
47
  * @returns {number}
48
48
  */
49
49
  getLength(content) {
50
50
  if (typeof content !== 'string') {
51
- content = this.editor.frameOptions.get('charCounter_type') === 'byte-html' ? this.editor.frameContext.get('wysiwyg').innerHTML : this.editor.frameContext.get('wysiwyg').textContent;
51
+ content = this.#frameOptions.get('charCounter_type') === 'byte-html' ? this.#frameContext.get('wysiwyg').innerHTML : this.#frameContext.get('wysiwyg').textContent;
52
52
  }
53
- return /byte/.test(this.editor.frameOptions.get('charCounter_type')) ? this.getByteLength(content) : content.length;
54
- },
53
+ return /byte/.test(this.#frameOptions.get('charCounter_type')) ? this.getByteLength(content) : content.length;
54
+ }
55
55
 
56
56
  /**
57
- * @this {CharThis}
58
57
  * @descriptionGets Get the length in bytes of a string.
59
58
  * @param {string} text String text
60
59
  * @returns {number}
@@ -83,28 +82,28 @@ Char.prototype = {
83
82
 
84
83
  return cl + cr;
85
84
  }
86
- },
85
+ }
87
86
 
88
87
  /**
89
- * @this {CharThis}
90
88
  * @description Set the char count to charCounter element textContent.
91
- * @param {?__se__FrameContext=} fc Frame context
89
+ * @param {?SunEditor.FrameContext} [fc] Frame context
92
90
  */
93
91
  display(fc) {
94
- const charCounter = (fc || this.editor.frameContext).get('charCounter');
92
+ const charCounter = (fc || this.#frameContext).get('charCounter');
95
93
  if (charCounter) {
94
+ // Defer count update — DOM content may still be mutating from the current input/paste action
96
95
  _w.setTimeout(() => {
97
- charCounter.textContent = this.getLength();
96
+ charCounter.textContent = String(this.getLength());
98
97
  }, 0);
99
98
  }
100
- },
99
+ }
101
100
 
102
101
  /**
103
- * @this {CharThis}
104
102
  * @description Returns false if char count is greater than "frameOptions.get('charCounter_max')" when "inputText" is added to the current editor.
105
103
  * - If the current number of characters is greater than "charCounter_max", the excess characters are removed.
106
104
  * And call the char.display()
107
105
  * @param {string} inputText Text added.
106
+ * @param {boolean} _fromInputEvent Whether the test is triggered from an input event.
108
107
  * @returns {boolean}
109
108
  */
110
109
  test(inputText, _fromInputEvent) {
@@ -113,7 +112,7 @@ Char.prototype = {
113
112
 
114
113
  this.display();
115
114
 
116
- const maxCharCount = this.editor.frameOptions.get('charCounter_max');
115
+ const maxCharCount = this.#frameOptions.get('charCounter_max');
117
116
  if (maxCharCount > 0) {
118
117
  let over = false;
119
118
  const count = this.getLength();
@@ -121,39 +120,37 @@ Char.prototype = {
121
120
  if (count > maxCharCount) {
122
121
  over = true;
123
122
  if (nextCharCount > 0 && _fromInputEvent) {
124
- this.selection._init();
125
- const range = this.selection.getRange();
123
+ this.#$.selection.init();
124
+ const range = this.#$.selection.getRange();
126
125
  const endOff = range.endOffset - 1;
127
- const text = this.selection.getNode().textContent;
126
+ const text = this.#$.selection.getNode().textContent;
128
127
  const slicePosition = range.endOffset - 1; // (count - maxCharCount);
129
128
 
130
- this.selection.getNode().textContent = text.slice(0, slicePosition < 0 ? 0 : slicePosition) + text.slice(range.endOffset, text.length);
131
- this.selection.setRange(range.endContainer, endOff, range.endContainer, endOff);
129
+ this.#$.selection.getNode().textContent = text.slice(0, slicePosition < 0 ? 0 : slicePosition) + text.slice(range.endOffset, text.length);
130
+ this.#$.selection.setRange(range.endContainer, endOff, range.endContainer, endOff);
132
131
  }
133
132
  } else if (count + nextCharCount > maxCharCount) {
134
133
  over = true;
135
134
  }
136
135
 
137
136
  if (over) {
138
- CounterBlink(this.editor.frameContext.get('charWrapper'));
137
+ CounterBlink(this.#frameContext.get('charWrapper'));
139
138
  if (nextCharCount > 0) return false;
140
139
  }
141
140
  }
142
141
 
143
142
  return true;
144
- },
145
-
146
- constructor: Char
147
- };
143
+ }
144
+ }
148
145
 
149
146
  /**
150
- * @private
151
147
  * @description The character counter blinks.
152
- * @param {Element} charWrapper this.editor.frameContext.get('charWrapper')
148
+ * @param {Element} charWrapper this.#frameContext.get('charWrapper')
153
149
  */
154
150
  function CounterBlink(charWrapper) {
155
151
  if (charWrapper && !hasClass(charWrapper, 'se-blink')) {
156
152
  addClass(charWrapper, 'se-blink');
153
+ // Remove blink CSS class after animation completes (600ms matches the CSS animation duration)
157
154
  _w.setTimeout(() => {
158
155
  removeClass(charWrapper, 'se-blink');
159
156
  }, 600);