suneditor 3.0.0-beta.9 → 3.0.0-rc.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (380) hide show
  1. package/README.md +65 -57
  2. package/dist/suneditor-contents.min.css +1 -0
  3. package/dist/suneditor.min.css +1 -1
  4. package/dist/suneditor.min.js +1 -1
  5. package/package.json +110 -61
  6. package/src/assets/design/color.css +36 -17
  7. package/src/assets/design/size.css +2 -0
  8. package/src/assets/icons/defaultIcons.js +17 -2
  9. package/src/assets/suneditor-contents.css +51 -16
  10. package/src/assets/suneditor.css +116 -43
  11. package/src/core/config/contextProvider.js +288 -0
  12. package/src/core/config/eventManager.js +188 -0
  13. package/src/core/config/instanceCheck.js +59 -0
  14. package/src/core/config/optionProvider.js +452 -0
  15. package/src/core/editor.js +166 -1637
  16. package/src/core/event/actions/index.js +229 -0
  17. package/src/core/event/effects/common.registry.js +74 -0
  18. package/src/core/event/effects/keydown.registry.js +573 -0
  19. package/src/core/event/effects/ruleHelpers.js +148 -0
  20. package/src/core/event/eventOrchestrator.js +944 -0
  21. package/src/core/event/executor.js +27 -0
  22. package/src/core/{base/eventHandlers → event/handlers}/handler_toolbar.js +27 -28
  23. package/src/core/{base/eventHandlers → event/handlers}/handler_ww_clipboard.js +10 -8
  24. package/src/core/{base/eventHandlers → event/handlers}/handler_ww_dragDrop.js +22 -23
  25. package/src/core/event/handlers/handler_ww_input.js +75 -0
  26. package/src/core/event/handlers/handler_ww_key.js +228 -0
  27. package/src/core/event/handlers/handler_ww_mouse.js +166 -0
  28. package/src/core/event/ports.js +211 -0
  29. package/src/core/event/reducers/keydown.reducer.js +97 -0
  30. package/src/core/event/rules/keydown.rule.arrow.js +63 -0
  31. package/src/core/event/rules/keydown.rule.backspace.js +208 -0
  32. package/src/core/event/rules/keydown.rule.delete.js +132 -0
  33. package/src/core/event/rules/keydown.rule.enter.js +150 -0
  34. package/src/core/event/rules/keydown.rule.tab.js +35 -0
  35. package/src/core/event/support/defaultLineManager.js +136 -0
  36. package/src/core/event/support/selectionState.js +204 -0
  37. package/src/core/kernel/coreKernel.js +320 -0
  38. package/src/core/kernel/kernelInjector.js +19 -0
  39. package/src/core/kernel/store.js +173 -0
  40. package/src/core/{class → logic/dom}/char.js +42 -45
  41. package/src/core/logic/dom/format.js +1075 -0
  42. package/src/core/{class → logic/dom}/html.js +743 -624
  43. package/src/core/logic/dom/inline.js +1847 -0
  44. package/src/core/logic/dom/listFormat.js +601 -0
  45. package/src/core/{class → logic/dom}/nodeTransform.js +92 -72
  46. package/src/core/{class → logic/dom}/offset.js +254 -317
  47. package/src/core/logic/dom/selection.js +754 -0
  48. package/src/core/logic/panel/menu.js +389 -0
  49. package/src/core/logic/panel/toolbar.js +449 -0
  50. package/src/core/logic/panel/viewer.js +761 -0
  51. package/src/core/logic/shell/_commandExecutor.js +380 -0
  52. package/src/core/logic/shell/commandDispatcher.js +241 -0
  53. package/src/core/logic/shell/component.js +970 -0
  54. package/src/core/logic/shell/focusManager.js +110 -0
  55. package/src/core/{base → logic/shell}/history.js +110 -60
  56. package/src/core/logic/shell/pluginManager.js +363 -0
  57. package/src/core/logic/shell/shortcuts.js +130 -0
  58. package/src/core/logic/shell/ui.js +904 -0
  59. package/src/core/schema/context.js +66 -0
  60. package/src/core/schema/frameContext.js +160 -0
  61. package/src/core/schema/options.js +628 -0
  62. package/src/core/section/constructor.js +194 -500
  63. package/src/core/section/documentType.js +297 -222
  64. package/src/events.js +808 -543
  65. package/src/helper/clipboard.js +27 -16
  66. package/src/helper/converter.js +100 -78
  67. package/src/helper/dom/domCheck.js +56 -30
  68. package/src/helper/dom/domQuery.js +159 -89
  69. package/src/helper/dom/domUtils.js +114 -49
  70. package/src/helper/dom/index.js +5 -1
  71. package/src/helper/env.js +26 -26
  72. package/src/helper/index.js +1 -1
  73. package/src/helper/keyCodeMap.js +25 -28
  74. package/src/helper/numbers.js +4 -8
  75. package/src/helper/unicode.js +4 -8
  76. package/src/hooks/base.js +307 -0
  77. package/src/hooks/params.js +130 -0
  78. package/src/interfaces/contracts.js +227 -0
  79. package/src/interfaces/index.js +7 -0
  80. package/src/interfaces/plugins.js +239 -0
  81. package/src/langs/ckb.js +4 -4
  82. package/src/langs/cs.js +4 -4
  83. package/src/langs/da.js +4 -4
  84. package/src/langs/de.js +4 -4
  85. package/src/langs/en.js +4 -4
  86. package/src/langs/es.js +4 -4
  87. package/src/langs/fa.js +4 -4
  88. package/src/langs/fr.js +4 -4
  89. package/src/langs/he.js +4 -4
  90. package/src/langs/hu.js +4 -4
  91. package/src/langs/it.js +4 -4
  92. package/src/langs/ja.js +4 -4
  93. package/src/langs/km.js +4 -4
  94. package/src/langs/ko.js +4 -4
  95. package/src/langs/lv.js +4 -4
  96. package/src/langs/nl.js +4 -4
  97. package/src/langs/pl.js +4 -4
  98. package/src/langs/pt_br.js +13 -13
  99. package/src/langs/ro.js +4 -4
  100. package/src/langs/ru.js +4 -4
  101. package/src/langs/se.js +4 -4
  102. package/src/langs/tr.js +4 -4
  103. package/src/langs/uk.js +4 -4
  104. package/src/langs/ur.js +4 -4
  105. package/src/langs/zh_cn.js +4 -4
  106. package/src/modules/{Browser.js → contract/Browser.js} +119 -128
  107. package/src/modules/{ColorPicker.js → contract/ColorPicker.js} +132 -142
  108. package/src/modules/contract/Controller.js +589 -0
  109. package/src/modules/{Figure.js → contract/Figure.js} +591 -411
  110. package/src/modules/{HueSlider.js → contract/HueSlider.js} +125 -86
  111. package/src/modules/contract/Modal.js +357 -0
  112. package/src/modules/contract/index.js +9 -0
  113. package/src/modules/manager/ApiManager.js +197 -0
  114. package/src/modules/{FileManager.js → manager/FileManager.js} +128 -160
  115. package/src/modules/manager/index.js +5 -0
  116. package/src/modules/{ModalAnchorEditor.js → ui/ModalAnchorEditor.js} +108 -138
  117. package/src/modules/{SelectMenu.js → ui/SelectMenu.js} +119 -120
  118. package/src/modules/{_DragHandle.js → ui/_DragHandle.js} +1 -1
  119. package/src/modules/ui/index.js +6 -0
  120. package/src/plugins/browser/audioGallery.js +23 -26
  121. package/src/plugins/browser/fileBrowser.js +25 -28
  122. package/src/plugins/browser/fileGallery.js +20 -23
  123. package/src/plugins/browser/imageGallery.js +24 -23
  124. package/src/plugins/browser/videoGallery.js +27 -29
  125. package/src/plugins/command/blockquote.js +11 -17
  126. package/src/plugins/command/exportPDF.js +26 -26
  127. package/src/plugins/command/fileUpload.js +138 -133
  128. package/src/plugins/command/list_bulleted.js +48 -44
  129. package/src/plugins/command/list_numbered.js +48 -44
  130. package/src/plugins/dropdown/align.js +64 -50
  131. package/src/plugins/dropdown/backgroundColor.js +34 -35
  132. package/src/plugins/dropdown/{formatBlock.js → blockStyle.js} +43 -37
  133. package/src/plugins/dropdown/font.js +50 -36
  134. package/src/plugins/dropdown/fontColor.js +34 -35
  135. package/src/plugins/dropdown/hr.js +55 -50
  136. package/src/plugins/dropdown/layout.js +20 -15
  137. package/src/plugins/dropdown/lineHeight.js +46 -30
  138. package/src/plugins/dropdown/list.js +32 -33
  139. package/src/plugins/dropdown/paragraphStyle.js +40 -34
  140. package/src/plugins/dropdown/table/index.js +915 -0
  141. package/src/plugins/dropdown/table/render/table.html.js +308 -0
  142. package/src/plugins/dropdown/table/render/table.menu.js +121 -0
  143. package/src/plugins/dropdown/table/services/table.cell.js +465 -0
  144. package/src/plugins/dropdown/table/services/table.clipboard.js +414 -0
  145. package/src/plugins/dropdown/table/services/table.grid.js +504 -0
  146. package/src/plugins/dropdown/table/services/table.resize.js +463 -0
  147. package/src/plugins/dropdown/table/services/table.selection.js +466 -0
  148. package/src/plugins/dropdown/table/services/table.style.js +844 -0
  149. package/src/plugins/dropdown/table/shared/table.constants.js +109 -0
  150. package/src/plugins/dropdown/table/shared/table.utils.js +219 -0
  151. package/src/plugins/dropdown/template.js +20 -15
  152. package/src/plugins/dropdown/textStyle.js +28 -22
  153. package/src/plugins/field/mention.js +54 -49
  154. package/src/plugins/index.js +5 -5
  155. package/src/plugins/input/fontSize.js +100 -97
  156. package/src/plugins/input/pageNavigator.js +13 -10
  157. package/src/plugins/modal/audio.js +208 -219
  158. package/src/plugins/modal/drawing.js +99 -104
  159. package/src/plugins/modal/embed.js +323 -312
  160. package/src/plugins/modal/image/index.js +942 -0
  161. package/src/plugins/modal/image/render/image.html.js +150 -0
  162. package/src/plugins/modal/image/services/image.size.js +198 -0
  163. package/src/plugins/modal/image/services/image.upload.js +216 -0
  164. package/src/plugins/modal/image/shared/image.constants.js +20 -0
  165. package/src/plugins/modal/link.js +74 -54
  166. package/src/plugins/modal/math.js +126 -119
  167. package/src/plugins/modal/video/index.js +858 -0
  168. package/src/plugins/modal/video/render/video.html.js +131 -0
  169. package/src/plugins/modal/video/services/video.size.js +281 -0
  170. package/src/plugins/modal/video/services/video.upload.js +92 -0
  171. package/src/plugins/popup/anchor.js +57 -49
  172. package/src/suneditor.js +73 -61
  173. package/src/themes/cobalt.css +155 -0
  174. package/src/themes/dark.css +143 -120
  175. package/src/typedef.js +214 -63
  176. package/types/assets/icons/defaultIcons.d.ts +8 -0
  177. package/types/assets/suneditor-contents.css.d.ts +1 -0
  178. package/types/assets/suneditor.css.d.ts +1 -0
  179. package/types/core/config/contextProvider.d.ts +148 -0
  180. package/types/core/config/eventManager.d.ts +68 -0
  181. package/types/core/config/instanceCheck.d.ts +33 -0
  182. package/types/core/config/optionProvider.d.ts +147 -0
  183. package/types/core/editor.d.ts +27 -586
  184. package/types/core/event/actions/index.d.ts +50 -0
  185. package/types/core/event/effects/common.registry.d.ts +56 -0
  186. package/types/core/event/effects/keydown.registry.d.ts +80 -0
  187. package/types/core/event/effects/ruleHelpers.d.ts +36 -0
  188. package/types/core/event/eventOrchestrator.d.ts +191 -0
  189. package/types/core/event/executor.d.ts +13 -0
  190. package/types/core/event/handlers/handler_toolbar.d.ts +38 -0
  191. package/types/core/event/handlers/handler_ww_clipboard.d.ts +36 -0
  192. package/types/core/event/handlers/handler_ww_dragDrop.d.ts +26 -0
  193. package/types/core/event/handlers/handler_ww_input.d.ts +38 -0
  194. package/types/core/event/handlers/handler_ww_key.d.ts +40 -0
  195. package/types/core/event/handlers/handler_ww_mouse.d.ts +47 -0
  196. package/types/core/event/ports.d.ts +256 -0
  197. package/types/core/event/reducers/keydown.reducer.d.ts +84 -0
  198. package/types/core/event/rules/keydown.rule.arrow.d.ts +19 -0
  199. package/types/core/event/rules/keydown.rule.backspace.d.ts +18 -0
  200. package/types/core/event/rules/keydown.rule.delete.d.ts +18 -0
  201. package/types/core/event/rules/keydown.rule.enter.d.ts +18 -0
  202. package/types/core/event/rules/keydown.rule.tab.d.ts +18 -0
  203. package/types/core/event/support/defaultLineManager.d.ts +22 -0
  204. package/types/core/event/support/selectionState.d.ts +29 -0
  205. package/types/core/kernel/coreKernel.d.ts +219 -0
  206. package/types/core/kernel/kernelInjector.d.ts +16 -0
  207. package/types/core/kernel/store.d.ts +170 -0
  208. package/types/core/logic/dom/char.d.ts +46 -0
  209. package/types/core/logic/dom/format.d.ts +234 -0
  210. package/types/core/logic/dom/html.d.ts +290 -0
  211. package/types/core/logic/dom/inline.d.ts +93 -0
  212. package/types/core/logic/dom/listFormat.d.ts +101 -0
  213. package/types/core/logic/dom/nodeTransform.d.ts +110 -0
  214. package/types/core/logic/dom/offset.d.ts +335 -0
  215. package/types/core/logic/dom/selection.d.ts +165 -0
  216. package/types/core/logic/panel/menu.d.ts +93 -0
  217. package/types/core/logic/panel/toolbar.d.ts +128 -0
  218. package/types/core/logic/panel/viewer.d.ts +89 -0
  219. package/types/core/logic/shell/_commandExecutor.d.ts +18 -0
  220. package/types/core/logic/shell/commandDispatcher.d.ts +65 -0
  221. package/types/core/logic/shell/component.d.ts +182 -0
  222. package/types/core/logic/shell/focusManager.d.ts +31 -0
  223. package/types/core/{base → logic/shell}/history.d.ts +13 -12
  224. package/types/core/logic/shell/pluginManager.d.ts +115 -0
  225. package/types/core/logic/shell/shortcuts.d.ts +131 -0
  226. package/types/core/logic/shell/ui.d.ts +261 -0
  227. package/types/core/schema/context.d.ts +104 -0
  228. package/types/core/schema/frameContext.d.ts +320 -0
  229. package/types/core/schema/options.d.ts +1241 -0
  230. package/types/core/section/constructor.d.ts +117 -652
  231. package/types/core/section/documentType.d.ts +43 -61
  232. package/types/events.d.ts +796 -65
  233. package/types/helper/clipboard.d.ts +5 -4
  234. package/types/helper/converter.d.ts +55 -43
  235. package/types/helper/dom/domCheck.d.ts +27 -19
  236. package/types/helper/dom/domQuery.d.ts +76 -57
  237. package/types/helper/dom/domUtils.d.ts +62 -39
  238. package/types/helper/dom/index.d.ts +87 -1
  239. package/types/helper/env.d.ts +16 -13
  240. package/types/helper/index.d.ts +8 -2
  241. package/types/helper/keyCodeMap.d.ts +24 -23
  242. package/types/helper/numbers.d.ts +4 -6
  243. package/types/helper/unicode.d.ts +4 -3
  244. package/types/hooks/base.d.ts +239 -0
  245. package/types/hooks/params.d.ts +65 -0
  246. package/types/index.d.ts +20 -117
  247. package/types/interfaces/contracts.d.ts +183 -0
  248. package/types/interfaces/index.d.ts +3 -0
  249. package/types/interfaces/plugins.d.ts +168 -0
  250. package/types/langs/_Lang.d.ts +2 -2
  251. package/types/langs/index.d.ts +2 -2
  252. package/types/modules/contract/Browser.d.ts +262 -0
  253. package/types/modules/contract/ColorPicker.d.ts +99 -0
  254. package/types/modules/contract/Controller.d.ts +204 -0
  255. package/types/modules/contract/Figure.d.ts +529 -0
  256. package/types/modules/{HueSlider.d.ts → contract/HueSlider.d.ts} +39 -28
  257. package/types/modules/contract/Modal.d.ts +62 -0
  258. package/types/modules/contract/index.d.ts +7 -0
  259. package/types/modules/manager/ApiManager.d.ts +106 -0
  260. package/types/modules/manager/FileManager.d.ts +124 -0
  261. package/types/modules/manager/index.d.ts +3 -0
  262. package/types/modules/ui/ModalAnchorEditor.d.ts +152 -0
  263. package/types/modules/ui/SelectMenu.d.ts +107 -0
  264. package/types/modules/{_DragHandle.d.ts → ui/_DragHandle.d.ts} +1 -0
  265. package/types/modules/ui/index.d.ts +4 -0
  266. package/types/plugins/browser/audioGallery.d.ts +33 -41
  267. package/types/plugins/browser/fileBrowser.d.ts +42 -50
  268. package/types/plugins/browser/fileGallery.d.ts +33 -41
  269. package/types/plugins/browser/imageGallery.d.ts +30 -37
  270. package/types/plugins/browser/videoGallery.d.ts +33 -41
  271. package/types/plugins/command/blockquote.d.ts +4 -21
  272. package/types/plugins/command/exportPDF.d.ts +23 -33
  273. package/types/plugins/command/fileUpload.d.ts +80 -100
  274. package/types/plugins/command/list_bulleted.d.ts +9 -35
  275. package/types/plugins/command/list_numbered.d.ts +9 -35
  276. package/types/plugins/dropdown/align.d.ts +23 -46
  277. package/types/plugins/dropdown/backgroundColor.d.ts +35 -53
  278. package/types/plugins/dropdown/blockStyle.d.ts +45 -0
  279. package/types/plugins/dropdown/font.d.ts +18 -41
  280. package/types/plugins/dropdown/fontColor.d.ts +35 -53
  281. package/types/plugins/dropdown/hr.d.ts +26 -52
  282. package/types/plugins/dropdown/layout.d.ts +19 -25
  283. package/types/plugins/dropdown/lineHeight.d.ts +21 -39
  284. package/types/plugins/dropdown/list.d.ts +6 -34
  285. package/types/plugins/dropdown/paragraphStyle.d.ts +34 -45
  286. package/types/plugins/dropdown/table/index.d.ts +158 -0
  287. package/types/plugins/dropdown/table/render/table.html.d.ts +71 -0
  288. package/types/plugins/dropdown/table/render/table.menu.d.ts +59 -0
  289. package/types/plugins/dropdown/table/services/table.cell.d.ts +76 -0
  290. package/types/plugins/dropdown/table/services/table.clipboard.d.ts +26 -0
  291. package/types/plugins/dropdown/table/services/table.grid.d.ts +77 -0
  292. package/types/plugins/dropdown/table/services/table.resize.d.ts +72 -0
  293. package/types/plugins/dropdown/table/services/table.selection.d.ts +59 -0
  294. package/types/plugins/dropdown/table/services/table.style.d.ts +162 -0
  295. package/types/plugins/dropdown/table/shared/table.constants.d.ts +134 -0
  296. package/types/plugins/dropdown/table/shared/table.utils.d.ts +91 -0
  297. package/types/plugins/dropdown/template.d.ts +19 -25
  298. package/types/plugins/dropdown/textStyle.d.ts +23 -30
  299. package/types/plugins/field/mention.d.ts +66 -72
  300. package/types/plugins/index.d.ts +41 -40
  301. package/types/plugins/input/fontSize.d.ts +57 -96
  302. package/types/plugins/input/pageNavigator.d.ts +5 -8
  303. package/types/plugins/modal/audio.d.ts +60 -153
  304. package/types/plugins/modal/drawing.d.ts +16 -118
  305. package/types/plugins/modal/embed.d.ts +46 -166
  306. package/types/plugins/modal/image/index.d.ts +281 -0
  307. package/types/plugins/modal/image/render/image.html.d.ts +45 -0
  308. package/types/plugins/modal/image/services/image.size.d.ts +55 -0
  309. package/types/plugins/modal/image/services/image.upload.d.ts +24 -0
  310. package/types/plugins/modal/image/shared/image.constants.d.ts +17 -0
  311. package/types/plugins/modal/link.d.ts +46 -66
  312. package/types/plugins/modal/math.d.ts +17 -86
  313. package/types/plugins/modal/{video.d.ts → video/index.d.ts} +89 -221
  314. package/types/plugins/modal/video/render/video.html.d.ts +37 -0
  315. package/types/plugins/modal/video/services/video.size.d.ts +74 -0
  316. package/types/plugins/modal/video/services/video.upload.d.ts +19 -0
  317. package/types/plugins/popup/anchor.d.ts +8 -38
  318. package/types/suneditor.d.ts +55 -24
  319. package/types/typedef.d.ts +344 -228
  320. package/CONTRIBUTING.md +0 -186
  321. package/src/core/base/eventHandlers/handler_ww_key_input.js +0 -1200
  322. package/src/core/base/eventHandlers/handler_ww_mouse.js +0 -194
  323. package/src/core/base/eventManager.js +0 -1523
  324. package/src/core/class/component.js +0 -856
  325. package/src/core/class/format.js +0 -3433
  326. package/src/core/class/menu.js +0 -346
  327. package/src/core/class/selection.js +0 -610
  328. package/src/core/class/shortcuts.js +0 -98
  329. package/src/core/class/toolbar.js +0 -431
  330. package/src/core/class/ui.js +0 -424
  331. package/src/core/class/viewer.js +0 -750
  332. package/src/core/section/actives.js +0 -266
  333. package/src/core/section/context.js +0 -102
  334. package/src/editorInjector/_classes.js +0 -36
  335. package/src/editorInjector/_core.js +0 -87
  336. package/src/editorInjector/index.js +0 -73
  337. package/src/modules/ApiManager.js +0 -191
  338. package/src/modules/Controller.js +0 -474
  339. package/src/modules/Modal.js +0 -346
  340. package/src/modules/index.js +0 -14
  341. package/src/plugins/dropdown/table.js +0 -4034
  342. package/src/plugins/modal/image.js +0 -1376
  343. package/src/plugins/modal/video.js +0 -1226
  344. package/types/core/base/eventHandlers/handler_toolbar.d.ts +0 -41
  345. package/types/core/base/eventHandlers/handler_ww_clipboard.d.ts +0 -40
  346. package/types/core/base/eventHandlers/handler_ww_dragDrop.d.ts +0 -35
  347. package/types/core/base/eventHandlers/handler_ww_key_input.d.ts +0 -45
  348. package/types/core/base/eventHandlers/handler_ww_mouse.d.ts +0 -39
  349. package/types/core/base/eventManager.d.ts +0 -401
  350. package/types/core/class/char.d.ts +0 -61
  351. package/types/core/class/component.d.ts +0 -213
  352. package/types/core/class/format.d.ts +0 -623
  353. package/types/core/class/html.d.ts +0 -430
  354. package/types/core/class/menu.d.ts +0 -126
  355. package/types/core/class/nodeTransform.d.ts +0 -93
  356. package/types/core/class/offset.d.ts +0 -522
  357. package/types/core/class/selection.d.ts +0 -188
  358. package/types/core/class/shortcuts.d.ts +0 -142
  359. package/types/core/class/toolbar.d.ts +0 -189
  360. package/types/core/class/ui.d.ts +0 -164
  361. package/types/core/class/viewer.d.ts +0 -140
  362. package/types/core/section/actives.d.ts +0 -46
  363. package/types/core/section/context.d.ts +0 -45
  364. package/types/editorInjector/_classes.d.ts +0 -41
  365. package/types/editorInjector/_core.d.ts +0 -87
  366. package/types/editorInjector/index.d.ts +0 -69
  367. package/types/modules/ApiManager.d.ts +0 -125
  368. package/types/modules/Browser.d.ts +0 -326
  369. package/types/modules/ColorPicker.d.ts +0 -135
  370. package/types/modules/Controller.d.ts +0 -251
  371. package/types/modules/Figure.d.ts +0 -517
  372. package/types/modules/FileManager.d.ts +0 -202
  373. package/types/modules/Modal.d.ts +0 -111
  374. package/types/modules/ModalAnchorEditor.d.ts +0 -236
  375. package/types/modules/SelectMenu.d.ts +0 -194
  376. package/types/modules/index.d.ts +0 -26
  377. package/types/plugins/dropdown/formatBlock.d.ts +0 -55
  378. package/types/plugins/dropdown/table.d.ts +0 -627
  379. package/types/plugins/modal/image.d.ts +0 -451
  380. /package/{LICENSE → LICENSE.txt} +0 -0
@@ -1,5 +1,48 @@
1
1
  import { _d, _w } from '../env';
2
- import check from './domCheck';
2
+ import { isImportantDisabled } from './domCheck';
3
+ import { htmlToEntity } from '../converter';
4
+
5
+ // ----- iframe-safe type check [START] -----
6
+ /**
7
+ * @description iframe-safe : Node type [`HTMLCollection`, `NodeList`, `Array`] check.
8
+ * @param {*} element
9
+ * @returns {element is HTMLCollection|NodeList|Array}
10
+ */
11
+ function IsElementArray(element) {
12
+ const type = Object.prototype.toString.call(element);
13
+ return type === '[object HTMLCollection]' || type === '[object NodeList]' || type === '[object Array]';
14
+ }
15
+
16
+ /**
17
+ * @description iframe-safe: check if element is an `HTMLImageElement`
18
+ * @param {*} element
19
+ * @returns {element is HTMLImageElement}
20
+ */
21
+ function IsHTMLImageElement(element) {
22
+ const type = Object.prototype.toString.call(element);
23
+ return type === '[object HTMLImageElement]';
24
+ }
25
+
26
+ /**
27
+ * @description iframe-safe: check if element is an `HTMLMediaElement` (video or audio)
28
+ * @param {*} element
29
+ * @returns {element is HTMLMediaElement}
30
+ */
31
+ function IsHTMLMediaElement(element) {
32
+ const type = Object.prototype.toString.call(element);
33
+ return type === '[object HTMLVideoElement]' || type === '[object HTMLAudioElement]';
34
+ }
35
+
36
+ /**
37
+ * @description iframe-safe: check if element is an `HTMLIFrameElement`
38
+ * @param {*} element
39
+ * @returns {element is HTMLIFrameElement}
40
+ */
41
+ function IsHTMLIFrameElement(element) {
42
+ const type = Object.prototype.toString.call(element);
43
+ return type === '[object HTMLIFrameElement]';
44
+ }
45
+ // ----- iframe-safe type check [END] -----
3
46
 
4
47
  /**
5
48
  * @template {Node} T
@@ -15,9 +58,19 @@ export function clone(node, deep = false) {
15
58
  /**
16
59
  * @template {HTMLElement} T
17
60
  * @description Create Element node
61
+ * @example
62
+ * // Create with attributes
63
+ * const span = dom.utils.createElement('SPAN', { style: 'color:red;', class: 'highlight' });
64
+ *
65
+ * // Create with HTML string content
66
+ * const div = dom.utils.createElement('DIV', null, '<p>Hello</p>');
67
+ *
68
+ * // Create with a child node
69
+ * const br = dom.utils.createElement('BR');
70
+ * const p = dom.utils.createElement('P', null, br);
18
71
  * @param {string} elementName Element name
19
- * @param {?Object<string, string>=} attributes The attributes of the tag. {style: 'font-size:12px;..', class: 'el_class',..}
20
- * @param {?string|Node=} inner A innerHTML string or inner node.
72
+ * @param {?Object<string, string>} [attributes] The attributes of the tag. {style: 'font-size:12px;..', class: 'el_class',..}
73
+ * @param {?string|Node} [inner] A innerHTML string or inner node.
21
74
  * @returns {T}
22
75
  */
23
76
  export function createElement(elementName, attributes, inner) {
@@ -52,7 +105,7 @@ export function createTextNode(text) {
52
105
  /**
53
106
  * @description Get attributes of argument element to string ('class="---" name="---" ')
54
107
  * @param {Node} element Element object
55
- * @param {Array<string>|null} exceptAttrs Array of attribute names to exclude from the result
108
+ * @param {?Array<string>} exceptAttrs Array of attribute names to exclude from the result
56
109
  * @returns {string}
57
110
  */
58
111
  export function getAttributesToString(element, exceptAttrs) {
@@ -62,7 +115,7 @@ export function getAttributesToString(element, exceptAttrs) {
62
115
  let attrString = '';
63
116
  for (let i = 0, len = attrs.length; i < len; i++) {
64
117
  if (exceptAttrs?.includes(attrs[i].name)) continue;
65
- attrString += attrs[i].name + '="' + attrs[i].value + '" ';
118
+ attrString += attrs[i].name + '="' + htmlToEntity(attrs[i].value) + '" ';
66
119
  }
67
120
 
68
121
  return attrString;
@@ -70,18 +123,15 @@ export function getAttributesToString(element, exceptAttrs) {
70
123
 
71
124
  /**
72
125
  * @description Get the items array from the array that matches the condition.
73
- * @param {__se__NodeCollection} array Array to get item
126
+ * @param {SunEditor.NodeCollection} array Array to get item
74
127
  * @param {?(current: *) => boolean} validation Conditional function
75
128
  * @returns {Array<Node>|null}
76
129
  */
77
130
  export function arrayFilter(array, validation) {
78
131
  if (!array || array.length === 0) return null;
79
132
 
80
- validation =
81
- validation ||
82
- function () {
83
- return true;
84
- };
133
+ validation ||= () => true;
134
+
85
135
  const arr = [];
86
136
 
87
137
  for (let i = 0, len = array.length, a; i < len; i++) {
@@ -96,18 +146,14 @@ export function arrayFilter(array, validation) {
96
146
 
97
147
  /**
98
148
  * @description Get the item from the array that matches the condition.
99
- * @param {__se__NodeCollection} array Array to get item
149
+ * @param {SunEditor.NodeCollection} array Array to get item
100
150
  * @param {?(current: *) => boolean} validation Conditional function
101
151
  * @returns {Node|null}
102
152
  */
103
153
  export function arrayFind(array, validation) {
104
154
  if (!array || array.length === 0) return null;
105
155
 
106
- validation =
107
- validation ||
108
- function () {
109
- return true;
110
- };
156
+ validation ||= () => true;
111
157
 
112
158
  for (let i = 0, len = array.length, a; i < len; i++) {
113
159
  a = array[i];
@@ -121,7 +167,7 @@ export function arrayFind(array, validation) {
121
167
 
122
168
  /**
123
169
  * @description Check if an array contains an element
124
- * @param {__se__NodeCollection} array element array
170
+ * @param {SunEditor.NodeCollection} array element array
125
171
  * @param {Node} node The node to check for
126
172
  * @returns {boolean}
127
173
  */
@@ -136,7 +182,7 @@ export function arrayIncludes(array, node) {
136
182
 
137
183
  /**
138
184
  * @description Get the index of the argument value in the element array
139
- * @param {__se__NodeCollection} array element array
185
+ * @param {SunEditor.NodeCollection} array element array
140
186
  * @param {Node} node The element to find index
141
187
  * @returns {number}
142
188
  */
@@ -154,7 +200,7 @@ export function getArrayIndex(array, node) {
154
200
 
155
201
  /**
156
202
  * @description Get the next index of the argument value in the element array
157
- * @param {__se__NodeCollection} array element array
203
+ * @param {SunEditor.NodeCollection} array element array
158
204
  * @param {Node} item The element to find index
159
205
  * @returns {number}
160
206
  */
@@ -166,7 +212,7 @@ export function nextIndex(array, item) {
166
212
 
167
213
  /**
168
214
  * @description Get the previous index of the argument value in the element array
169
- * @param {__se__NodeCollection} array Element array
215
+ * @param {SunEditor.NodeCollection} array Element array
170
216
  * @param {Node} item The element to find index
171
217
  * @returns {number}
172
218
  */
@@ -180,12 +226,12 @@ export function prevIndex(array, item) {
180
226
  * @description Add style and className of copyEl to originEl
181
227
  * @param {Node} originEl Origin element
182
228
  * @param {Node} copyEl Element to copy
183
- * @param {?Array<string>=} blacklist Blacklist array(LowerCase)
229
+ * @param {?Array<string>} [blacklist] Blacklist array(LowerCase)
184
230
  */
185
231
  export function copyTagAttributes(originEl, copyEl, blacklist) {
186
232
  const o = /** @type {HTMLElement} */ (originEl);
187
233
  const c = /** @type {HTMLElement} */ (copyEl);
188
- if (c.style.cssText) {
234
+ if (c.style.length > 0) {
189
235
  const copyStyles = c.style;
190
236
  for (let i = 0, len = copyStyles.length; i < len; i++) {
191
237
  o.style[copyStyles[i]] = copyStyles[copyStyles[i]];
@@ -201,7 +247,7 @@ export function copyTagAttributes(originEl, copyEl, blacklist) {
201
247
  }
202
248
 
203
249
  /**
204
- * @description Copy and apply attributes of format tag that should be maintained. (style, class) Ignore "__se__format__" class
250
+ * @description Copy and apply attributes of format tag that should be maintained. (style, class) Ignore `__se__format__` class
205
251
  * @param {Node} originEl Origin element
206
252
  * @param {Node} copyEl Element to copy
207
253
  */
@@ -255,7 +301,7 @@ export function changeTxt(node, txt) {
255
301
  /**
256
302
  * @description Set style, if all styles are deleted, the style properties are deleted.
257
303
  * @param {Node|Node[]} elements Element to set style
258
- * @param {string} styleName Style attribute name (marginLeft, textAlign...)
304
+ * @param {string} styleName Style attribute name (`marginLeft`, `textAlign`...)
259
305
  * @param {string|number} value Style value
260
306
  */
261
307
  export function setStyle(elements, styleName, value) {
@@ -264,7 +310,7 @@ export function setStyle(elements, styleName, value) {
264
310
  for (let i = 0, len = elements.length, e; i < len; i++) {
265
311
  e = /** @type {HTMLElement} */ (elements[i]);
266
312
  e.style[styleName] = value;
267
- if (!e.style.cssText) {
313
+ if (e.style.length === 0) {
268
314
  e.removeAttribute('style');
269
315
  }
270
316
  }
@@ -273,8 +319,8 @@ export function setStyle(elements, styleName, value) {
273
319
  /**
274
320
  * @description Gets the style value of the element. If the elements is an array, the style of the first element is returned.
275
321
  * @param {Node} element Element to get style from.
276
- * @param {string} styleName Style attribute name (e.g., 'marginLeft', 'textAlign').
277
- * @returns {string | undefined} The value of the style attribute, or undefined if the element does not exist.
322
+ * @param {string} styleName Style attribute name (e.g., `marginLeft`, `textAlign`).
323
+ * @returns {string | undefined} The value of the style attribute, or `undefined` if the element does not exist.
278
324
  */
279
325
  export function getStyle(element, styleName) {
280
326
  if (element?.nodeType !== 1) {
@@ -285,15 +331,15 @@ export function getStyle(element, styleName) {
285
331
  }
286
332
 
287
333
  /**
288
- * @description In the predefined code view mode, the buttons except the executable button are changed to the 'disabled' state.
289
- * @param {Array<HTMLButtonElement|HTMLInputElement>} buttonList (Button | Input) Element array
334
+ * @description In the predefined code view mode, the buttons except the executable button are changed to the `disabled` state.
335
+ * @param {SunEditor.NodeCollection} buttonList (Button | Input) Element array
290
336
  * @param {boolean} disabled Disabled value
291
337
  * @param {boolean} [important=false] If priveleged mode should be used (Necessary to switch importantDisabled buttons)
292
338
  */
293
339
  export function setDisabled(buttonList, disabled, important) {
294
340
  for (let i = 0, len = buttonList.length; i < len; i++) {
295
- const button = buttonList[i];
296
- if (important || !check.isImportantDisabled(button)) button.disabled = disabled;
341
+ const button = /** @type {HTMLButtonElement|HTMLInputElement} */ (buttonList[i]);
342
+ if (important || !isImportantDisabled(button)) button.disabled = disabled;
297
343
  if (important) {
298
344
  if (disabled) {
299
345
  button.setAttribute('data-important-disabled', '');
@@ -312,19 +358,18 @@ export function setDisabled(buttonList, disabled, important) {
312
358
  */
313
359
  export function hasClass(element, className) {
314
360
  if (!element || element.nodeType !== 1) return;
315
- const valid = new RegExp(`(\\s|^)${className}(\\s|$)`);
316
- return valid.test(/** @type {HTMLElement} */ (element).className);
361
+ return /** @type {HTMLElement} */ (element).classList.contains(className);
317
362
  }
318
363
 
319
364
  /**
320
365
  * @description Append the className value of the argument value element
321
- * @param {Node|__se__NodeCollection} element Elements to add class name
366
+ * @param {Node|SunEditor.NodeCollection} element Elements to add class name
322
367
  * @param {string} className Class name to be add
323
368
  */
324
369
  export function addClass(element, className) {
325
370
  if (!element) return;
326
371
 
327
- const elements = element instanceof HTMLCollection || element instanceof NodeList || element instanceof Array ? element : [element];
372
+ const elements = IsElementArray(element) ? element : [element];
328
373
  const classNames = className.split('|');
329
374
 
330
375
  for (let i = 0, len = elements.length; i < len; i++) {
@@ -338,13 +383,13 @@ export function addClass(element, className) {
338
383
 
339
384
  /**
340
385
  * @description Delete the className value of the argument value element
341
- * @param {Node|__se__NodeCollection} element Elements to remove class name
386
+ * @param {Node|SunEditor.NodeCollection} element Elements to remove class name
342
387
  * @param {string} className Class name to be remove
343
388
  */
344
389
  export function removeClass(element, className) {
345
390
  if (!element) return;
346
391
 
347
- const elements = element instanceof HTMLCollection || element instanceof NodeList || element instanceof Array ? element : [element];
392
+ const elements = IsElementArray(element) ? element : [element];
348
393
  const classNames = className.split('|');
349
394
 
350
395
  for (let i = 0, len = elements.length; i < len; i++) {
@@ -402,7 +447,7 @@ export function flashClass(element, className, duration = 120) {
402
447
  export function getClientSize(doc = _d) {
403
448
  return {
404
449
  w: doc.documentElement.clientWidth,
405
- h: doc.documentElement.clientHeight
450
+ h: doc.documentElement.clientHeight,
406
451
  };
407
452
  }
408
453
 
@@ -415,22 +460,22 @@ export function getViewportSize() {
415
460
  return {
416
461
  top: _w.visualViewport.pageTop,
417
462
  left: _w.visualViewport.pageLeft,
418
- scale: _w.visualViewport.scale
463
+ scale: _w.visualViewport.scale,
419
464
  };
420
465
  }
421
466
 
422
467
  return {
423
468
  top: 0,
424
469
  left: 0,
425
- scale: 1
470
+ scale: 1,
426
471
  };
427
472
  }
428
473
 
429
474
  /**
430
- * @description Copies the "wwTarget" element and returns it with inline all styles applied.
431
- * @param {Node} wwTarget Target element to copy(.sun-editor.sun-editor-editable)
432
- * @param {boolean} includeWW Include the "wwTarget" element in the copy
433
- * @param {Array<string>} styles Style list - kamel case
475
+ * @description Copies the `wwTarget` element and returns it with inline all styles applied.
476
+ * @param {Node} wwTarget Target element to copy(`.sun-editor.sun-editor-editable`)
477
+ * @param {boolean} includeWW Include the `wwTarget` element in the copy
478
+ * @param {Iterable<string>} styles Style list - kamel case
434
479
  * @returns
435
480
  */
436
481
  export function applyInlineStylesAll(wwTarget, includeWW, styles) {
@@ -494,19 +539,19 @@ export function waitForMediaLoad(target, timeout = 5000) {
494
539
 
495
540
  const mediaPromises = mediaElements.map((element) => {
496
541
  // image
497
- if (element instanceof HTMLImageElement) {
542
+ if (IsHTMLImageElement(element)) {
498
543
  if (element.complete) {
499
544
  return Promise.resolve();
500
545
  }
501
546
  }
502
547
  // video, audio
503
- else if (element instanceof HTMLMediaElement) {
548
+ else if (IsHTMLMediaElement(element)) {
504
549
  if (element.readyState >= 2) {
505
550
  return Promise.resolve();
506
551
  }
507
552
  }
508
553
  // iframe
509
- else if (element instanceof HTMLIFrameElement) {
554
+ else if (IsHTMLIFrameElement(element)) {
510
555
  try {
511
556
  if (element.contentDocument?.readyState === 'complete') {
512
557
  return Promise.resolve();
@@ -529,6 +574,24 @@ export function waitForMediaLoad(target, timeout = 5000) {
529
574
  });
530
575
  }
531
576
 
577
+ /**
578
+ * @description Gets a CSS variable on the root element of the editor.
579
+ * @param {string} name - The CSS variable name (e.g. `--se-color-primary`)
580
+ * @return {string} The value of the CSS variable
581
+ */
582
+ export function getRootCssVar(name) {
583
+ return _d.documentElement.style.getPropertyValue(name);
584
+ }
585
+
586
+ /**
587
+ * @description Sets a CSS variable on the root element of the editor.
588
+ * @param {string} name - The CSS variable name (e.g. `--se-color-primary`)
589
+ * @param {string} value - The CSS variable value
590
+ */
591
+ export function setRootCssVar(name, value) {
592
+ _d.documentElement.style.setProperty(name, value);
593
+ }
594
+
532
595
  /**
533
596
  * @description Create tooltip HTML
534
597
  * @param {string} text Tooltip text
@@ -566,7 +629,9 @@ const utils = {
566
629
  getViewportSize,
567
630
  applyInlineStylesAll,
568
631
  waitForMediaLoad,
569
- createTooltipInner
632
+ getRootCssVar,
633
+ setRootCssVar,
634
+ createTooltipInner,
570
635
  };
571
636
 
572
637
  export default utils;
@@ -6,7 +6,11 @@ import utils from './domUtils';
6
6
  const dom = {
7
7
  query,
8
8
  check,
9
- utils
9
+ utils,
10
10
  };
11
11
 
12
+ export const domQuery = query;
13
+ export const domCheck = check;
14
+ export const domUtils = utils;
15
+
12
16
  export default dom;
package/src/helper/env.js CHANGED
@@ -1,9 +1,5 @@
1
- /**
2
- * @fileoverview Environment helper functions
3
- */
4
-
5
- /** @type {Window} */
6
- export const _w = window;
1
+ /** @type {SunEditor.GlobalWindow} */
2
+ export const _w = /** @type {SunEditor.GlobalWindow} */ (window);
7
3
  /** @type {Document} */
8
4
  export const _d = document;
9
5
 
@@ -22,7 +18,7 @@ export const ON_OVER_COMPONENT = Symbol('onOverComponent');
22
18
  const userAgent = navigator.userAgent.toLowerCase();
23
19
 
24
20
  /**
25
- * @description Gets XMLHttpRequest object
21
+ * @description Gets `XMLHttpRequest` object
26
22
  * @returns {XMLHttpRequest}
27
23
  */
28
24
  export function getXMLHttpRequest() {
@@ -32,7 +28,7 @@ export function getXMLHttpRequest() {
32
28
  /**
33
29
  * @deprecated
34
30
  * @description Returns the CSS text that has been applied to the current page.
35
- * @param {Document|null} doc To get the CSS text of an document. If null get the current document.
31
+ * @param {?Document} doc To get the CSS text of an document. If `null` get the current document.
36
32
  * @returns {string} Styles string
37
33
  */
38
34
  export function getPageStyle(doc) {
@@ -40,13 +36,11 @@ export function getPageStyle(doc) {
40
36
  const sheets = (doc || _d).styleSheets;
41
37
 
42
38
  for (let i = 0, len = sheets.length, rules; i < len; i++) {
43
- /* eslint-disable @typescript-eslint/no-unused-vars */
44
39
  try {
45
40
  rules = sheets[i].cssRules;
46
- } catch (e) {
41
+ } catch {
47
42
  continue;
48
43
  }
49
- /* eslint-disable @typescript-eslint/no-unused-vars */
50
44
 
51
45
  if (rules) {
52
46
  for (let c = 0, cLen = rules.length; c < cLen; c++) {
@@ -63,7 +57,7 @@ export function getPageStyle(doc) {
63
57
  * @description Get the the tag path of the arguments value
64
58
  * @param {Array<string>} nameArray File name array
65
59
  * @param {string} extension js, css
66
- * @returns {string} If not found, return the first found value
60
+ * @returns {string} If not found, return the first found value.
67
61
  */
68
62
  export function getIncludePath(nameArray, extension) {
69
63
  let path = '';
@@ -93,34 +87,33 @@ export function getIncludePath(nameArray, extension) {
93
87
  }
94
88
  }
95
89
 
90
+ if (!path) {
91
+ throw new Error('[SUNEDITOR.helper.env.getIncludePath.fail] The SUNEDITOR installation path could not be automatically detected. (path: +' + path + ', extension: ' + extension + ')');
92
+ }
93
+
96
94
  if (path === '') path = pathList.length > 0 ? pathList[0][src] : '';
97
95
 
98
96
  if (!path.includes(':/') && '//' !== path.slice(0, 2)) {
99
97
  path = false === path.includes('/') ? location.href.match(/^.*?:\/\/[^/]*/)[0] + path : location.href.match(/^[^?]*\/(?:)/)[0] + path;
100
98
  }
101
99
 
102
- if (!path) {
103
- throw '[SUNEDITOR.helper.env.getIncludePath.fail] The SUNEDITOR installation path could not be automatically detected. (path: +' + path + ', extension: ' + extension + ')';
104
- }
105
-
106
100
  return path;
107
101
  }
108
102
 
109
103
  /** --- Check browser --- */
110
104
  /**
111
- * @description Check if support ResizeObserver function
112
- * @returns {boolean} Whether support ResizeObserver function or not.
105
+ * @description Check if support `ResizeObserver` function
106
+ * @returns {boolean} Whether support `ResizeObserver` function or not.
113
107
  */
114
108
  export const isResizeObserverSupported = (() => {
115
109
  return typeof ResizeObserver === 'function';
116
110
  })();
117
111
 
118
112
  /**
119
- * @description Check if support navigator.clipboard
120
- * @returns {boolean} Whether support navigator.clipboard or not.
113
+ * @description Check if support `navigator.clipboard`
114
+ * @returns {boolean} Whether support `navigator.clipboard` or not.
121
115
  */
122
116
  export const isClipboardSupported = (() => {
123
- /* eslint-disable-next-line compat/compat */
124
117
  return typeof navigator.clipboard?.write === 'function';
125
118
  })();
126
119
 
@@ -161,7 +154,7 @@ export const isGecko = (() => {
161
154
  * @type {boolean}
162
155
  */
163
156
  export const isChromium = (() => {
164
- return !!(/** @type {Window & { chrome: any }} */ (_w).chrome);
157
+ return !!(/** @type {window & { chrome: any }} */ (_w).chrome);
165
158
  })();
166
159
 
167
160
  /**
@@ -174,12 +167,18 @@ export const isSafari = (() => {
174
167
 
175
168
  /**
176
169
  * @description Check if User Agent is Mobile device.
177
- * - when the device is touchable, it is judged as a mobile device.
178
170
  * @type {boolean}
179
171
  */
180
172
  export const isMobile = (() => {
181
- /* eslint-disable-next-line compat/compat */
182
- return /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(userAgent) || (navigator.maxTouchPoints > 0 && 'ontouchstart' in _w);
173
+ return /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(userAgent);
174
+ })();
175
+
176
+ /**
177
+ * @description Check if the device is touchable.
178
+ * @type {boolean}
179
+ */
180
+ export const isTouchDevice = (() => {
181
+ return navigator.maxTouchPoints > 0 && 'ontouchstart' in _w;
183
182
  })();
184
183
 
185
184
  /**
@@ -230,11 +229,12 @@ const env = {
230
229
  isOSX_IOS,
231
230
  isAndroid,
232
231
  isMobile,
232
+ isTouchDevice,
233
233
  cmdIcon,
234
234
  shiftIcon,
235
235
  DPI,
236
236
  KATEX_WEBSITE,
237
- MATHJAX_WEBSITE
237
+ MATHJAX_WEBSITE,
238
238
  };
239
239
 
240
240
  export default env;
@@ -21,5 +21,5 @@ export default {
21
21
  dom,
22
22
  numbers,
23
23
  keyCodeMap,
24
- clipboard
24
+ clipboard,
25
25
  };