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,109 @@
1
+ export const ROW_SELECT_MARGIN = 6;
2
+ export const CELL_SELECT_MARGIN = 6;
3
+ export const CELL_DECIMAL_END = 0;
4
+
5
+ export const RESIZE_CELL_CLASS = '.se-table-resize-line';
6
+ export const RESIZE_CELL_PREV_CLASS = '.se-table-resize-line-prev';
7
+ export const RESIZE_ROW_CLASS = '.se-table-resize-row';
8
+ export const RESIZE_ROW_PREV_CLASS = '.se-table-resize-row-prev';
9
+
10
+ export const BORDER_LIST = ['none', 'solid', 'dotted', 'dashed', 'double', 'groove', 'ridge', 'inset', 'outset'];
11
+
12
+ export const BORDER_FORMATS = {
13
+ all: 'border_all',
14
+ inside: 'border_inside',
15
+ horizon: 'border_horizontal',
16
+ vertical: 'border_vertical',
17
+ outside: 'border_outside',
18
+ left: 'border_left',
19
+ top: 'border_top',
20
+ right: 'border_right',
21
+ bottom: 'border_bottom',
22
+ none: 'border_none',
23
+ };
24
+
25
+ export const BORDER_FORMAT_INSIDE = ['all', 'inside', 'horizon', 'vertical'];
26
+
27
+ export const BORDER_NS = {
28
+ l: 'borderLeft',
29
+ t: 'borderTop',
30
+ r: 'borderRight',
31
+ b: 'borderBottom',
32
+ };
33
+
34
+ export const DEFAULT_BORDER_UNIT = 'px';
35
+
36
+ export const DEFAULT_COLOR_LIST = [
37
+ // row-1 (light)
38
+ '#bbf7d0',
39
+ '#fde68a',
40
+ '#fecaca',
41
+ '#e9d5ff',
42
+ '#bfdbfe',
43
+ // row-2 (vivid)
44
+ '#22c55e',
45
+ '#eab308',
46
+ '#ef4444',
47
+ '#a855f7',
48
+ '#3b82f6',
49
+ // row-3 (deep)
50
+ '#15803d',
51
+ '#ca8a04',
52
+ '#b91c1c',
53
+ '#7e22ce',
54
+ '#1d4ed8',
55
+ // row-4 (gray)
56
+ '#e5e7eb',
57
+ '#9ca3af',
58
+ '#6b7280',
59
+ '#374151',
60
+ '#000000',
61
+ ];
62
+
63
+ /**
64
+ * @typedef {Object} TableState
65
+ * @property {number} physical_cellCnt The number of physical cells in the current row.
66
+ * @property {number} logical_cellCnt The number of logical cells (columns) in the table.
67
+ * @property {number} cellCnt Alias for `logical_cellCnt`.
68
+ * @property {number} rowCnt The total number of rows in the table.
69
+ * @property {number} rowIndex The index of the current row.
70
+ * @property {number} physical_cellIndex The physical index of the current cell.
71
+ * @property {number} logical_cellIndex The logical index of the current cell (taking colspan into account).
72
+ * @property {number} current_colSpan The colspan of the current cell.
73
+ * @property {number} current_rowSpan The rowspan of the current cell.
74
+ * @property {boolean} isShiftPressed Whether the shift key is pressed (multi-selection mode).
75
+ * @property {Object|null} ref Reference object for multi-selection range calculation.
76
+ * @property {HTMLElement|null} figureElement The figure element wrapping the table.
77
+ * @property {HTMLTableElement|null} selectedTable The selected table element.
78
+ * @property {HTMLTableRowElement|null} trElement The currently active row element.
79
+ * @property {HTMLCollectionOf<HTMLTableRowElement>|HTMLTableRowElement[]|null} trElements The collection of rows in the table.
80
+ * @property {HTMLTableCellElement|null} tdElement The currently active cell element.
81
+ * @property {HTMLTableCellElement|null} fixedCell The anchor cell for selection.
82
+ * @property {HTMLTableCellElement|null} selectedCell The last selected cell.
83
+ * @property {HTMLTableCellElement[]|null} selectedCells Array of currently selected cells.
84
+ */
85
+
86
+ /**
87
+ * @type {TableState}
88
+ */
89
+ export const INITIAL_STATE = {
90
+ physical_cellCnt: 0,
91
+ logical_cellCnt: 0,
92
+ cellCnt: 0,
93
+ rowCnt: 0,
94
+ rowIndex: 0,
95
+ physical_cellIndex: 0,
96
+ logical_cellIndex: 0,
97
+ current_colSpan: 0,
98
+ current_rowSpan: 0,
99
+ isShiftPressed: false,
100
+ ref: null,
101
+ figureElement: null,
102
+ selectedTable: null,
103
+ trElement: null,
104
+ trElements: null,
105
+ tdElement: null,
106
+ fixedCell: null,
107
+ selectedCell: null,
108
+ selectedCells: null,
109
+ };
@@ -0,0 +1,219 @@
1
+ import { dom, numbers, env } from '../../../../helper';
2
+ import * as Constants from './table.constants';
3
+
4
+ const { _w } = env;
5
+
6
+ /**
7
+ * @description Cache for selected cell range references. (Use drag cells)
8
+ * - Stores the calculated logical start/end positions (row, col) for a given selection.
9
+ * @type {WeakMap<HTMLTableElement, Map<string, {cs: number, ce: number, rs: number, re: number, _i: number}>>}
10
+ */
11
+ export const refCache = new WeakMap();
12
+
13
+ /**
14
+ * @description Cache for mapping a table’s physical coordinates (row, cellIndex) to a logical column index
15
+ * @type {WeakMap<HTMLTableElement, number[][]>}
16
+ */
17
+ const logicalIndexMapCache = new WeakMap();
18
+
19
+ /**
20
+ * @description Builds a matrix of logical indices for the table.
21
+ * @param {HTMLTableElement} table The table element.
22
+ * @returns {number[][]} A 2D array where matrix[row][cell] = logicalColumnIndex.
23
+ */
24
+ function BuildMatrix(table) {
25
+ const matrix = [];
26
+
27
+ const rows = table.rows;
28
+ const rowSpanMap = [];
29
+ for (let r = 0, rLen = rows.length; r < rLen; r++) {
30
+ const cells = rows[r].cells;
31
+ matrix[r] = [];
32
+
33
+ let logicalCol = 0;
34
+ for (let c = 0, cLen = cells.length; c < cLen; c++) {
35
+ while (rowSpanMap[r]?.[logicalCol]) {
36
+ logicalCol++;
37
+ }
38
+
39
+ matrix[r][c] = logicalCol;
40
+
41
+ // span calc
42
+ const cell = cells[c];
43
+ const colspan = cell.colSpan || 1;
44
+ const rowspan = cell.rowSpan || 1;
45
+
46
+ if (rowspan > 1) {
47
+ for (let rs = 1; rs < rowspan; rs++) {
48
+ if (!rowSpanMap[r + rs]) rowSpanMap[r + rs] = [];
49
+ for (let cs = 0; cs < colspan; cs++) {
50
+ rowSpanMap[r + rs][logicalCol + cs] = true;
51
+ }
52
+ }
53
+ }
54
+
55
+ logicalCol += colspan;
56
+ }
57
+ }
58
+
59
+ return matrix;
60
+ }
61
+
62
+ /** ================================================================================================================================ */
63
+
64
+ /**
65
+ * @description Checks if the given node is a resizable table element.
66
+ * @param {Node} node The DOM node to check.
67
+ * @returns {boolean} True if the node is a table-related resizable element.
68
+ */
69
+ export function IsResizeEls(node) {
70
+ return /^(TD|TH|TR)$/i.test(node?.nodeName);
71
+ }
72
+
73
+ /**
74
+ * @description Check table caption
75
+ * @param {Node} node The DOM node to check.
76
+ * @returns {boolean}
77
+ */
78
+ export function IsTableCaption(node) {
79
+ return /^CAPTION$/i.test(node.nodeName);
80
+ }
81
+
82
+ /**
83
+ * @description Checks if a table cell is at its edge based on the mouse event.
84
+ * @param {MouseEvent} event The mouse event.
85
+ * @param {Element} tableCell The table cell to check.
86
+ * @returns {Object} An object containing edge detection details.
87
+ */
88
+ export function CheckCellEdge(event, tableCell) {
89
+ const startX = event.clientX;
90
+ const startWidth = numbers.get(_w.getComputedStyle(tableCell).width, Constants.CELL_DECIMAL_END);
91
+ const rect = tableCell.getBoundingClientRect();
92
+ const offsetX = Math.round(startX - rect.left);
93
+ const isLeft = offsetX <= Constants.CELL_SELECT_MARGIN;
94
+ const is = isLeft || startWidth - offsetX <= Constants.CELL_SELECT_MARGIN;
95
+
96
+ return {
97
+ is,
98
+ isLeft,
99
+ startX,
100
+ };
101
+ }
102
+
103
+ /**
104
+ * @description Checks if a row is at its edge based on the mouse event.
105
+ * @param {MouseEvent} event The mouse event.
106
+ * @param {Element} tableCell The table row cell to check.
107
+ * @returns {Object} An object containing row edge detection details.
108
+ */
109
+ export function CheckRowEdge(event, tableCell) {
110
+ const startY = event.clientY;
111
+ const startHeight = numbers.get(_w.getComputedStyle(tableCell).height, Constants.CELL_DECIMAL_END);
112
+ const rect = tableCell.getBoundingClientRect();
113
+ const is = Math.ceil(startHeight + rect.top - startY) <= Constants.ROW_SELECT_MARGIN;
114
+
115
+ return {
116
+ is,
117
+ startY,
118
+ };
119
+ }
120
+
121
+ /**
122
+ * @description Creates table cells as elements strings.
123
+ * @param {string} nodeName The tag name of the cell (`TD` or `TH`).
124
+ * @param {number} cnt The number of cells to create.
125
+ * @returns {string} The created cells string.
126
+ */
127
+ export function CreateCellsString(nodeName, cnt) {
128
+ nodeName = nodeName.toLowerCase();
129
+ return `<${nodeName}><div><br></div></${nodeName}>`.repeat(cnt);
130
+ }
131
+
132
+ /**
133
+ * @description Creates table cells as element HTML.
134
+ * @param {string} nodeName The tag name of the cell (`TD` or `TH`).
135
+ * @returns {HTMLTableCellElement} The created cell element.
136
+ */
137
+ export function CreateCellsHTML(nodeName) {
138
+ nodeName = nodeName.toLowerCase();
139
+ return /** @type {HTMLTableCellElement} */ (dom.utils.createElement(nodeName, null, '<div><br></div>'));
140
+ }
141
+
142
+ /**
143
+ * @description Gets the maximum number of columns in a table.
144
+ * @param {HTMLTableElement} table The table element.
145
+ * @returns {number} The maximum number of columns in the table.
146
+ */
147
+ export function GetMaxColumns(table) {
148
+ const rows = table.rows;
149
+ let maxColumns = 0;
150
+
151
+ for (let i = 0, len = rows.length; i < len; i++) {
152
+ const cells = rows[i].cells;
153
+ let columnCount = 0;
154
+
155
+ for (let j = 0, jLen = cells.length; j < jLen; j++) {
156
+ columnCount += cells[j].colSpan;
157
+ }
158
+
159
+ maxColumns = Math.max(maxColumns, columnCount);
160
+ }
161
+
162
+ return maxColumns;
163
+ }
164
+
165
+ /**
166
+ * @description Gets the logical cell index for a cell in a table.
167
+ * @param {HTMLTableElement} table The table element.
168
+ * @param {number} rowIndex The physical row index.
169
+ * @param {number} cellIndex The physical cell index.
170
+ * @returns {number} The logical cell index.
171
+ */
172
+ export function GetLogicalCellIndex(table, rowIndex, cellIndex) {
173
+ let indexMap = logicalIndexMapCache.get(table);
174
+
175
+ if (!indexMap) {
176
+ indexMap = BuildMatrix(table);
177
+ logicalIndexMapCache.set(table, indexMap);
178
+ }
179
+
180
+ return indexMap[rowIndex]?.[cellIndex] ?? 0;
181
+ }
182
+
183
+ /**
184
+ * @description Clone a table element and map selected cells to the cloned table
185
+ * @param {HTMLTableElement} table `<table>` element
186
+ * @param {HTMLTableCellElement[]} selectedCells Selected cells array
187
+ * @returns {{ clonedTable: HTMLTableElement, clonedSelectedCells: HTMLTableCellElement[] }}
188
+ */
189
+ export function CloneTable(table, selectedCells) {
190
+ /** @type {HTMLTableElement} */
191
+ const clonedTable = dom.utils.clone(table, true);
192
+
193
+ const originalCells = Array.from(table.querySelectorAll('td, th'));
194
+ const clonedCells = Array.from(clonedTable.querySelectorAll('td, th'));
195
+
196
+ const clonedSelectedCells = /** @type {HTMLTableCellElement[]} */ (
197
+ selectedCells
198
+ .map((cell) => {
199
+ const index = originalCells.indexOf(cell);
200
+ return index > -1 ? clonedCells[index] : null;
201
+ })
202
+ .filter((cell) => cell !== null)
203
+ );
204
+
205
+ return {
206
+ clonedTable,
207
+ clonedSelectedCells,
208
+ };
209
+ }
210
+
211
+ /**
212
+ * @description Clear table cache
213
+ * @param {HTMLTableElement} table The table element.
214
+ */
215
+ export function InvalidateTableCache(table) {
216
+ if (!table) return;
217
+ refCache.delete(table);
218
+ logicalIndexMapCache.delete(table);
219
+ }
@@ -1,25 +1,28 @@
1
- import EditorInjector from '../../editorInjector';
1
+ import { PluginDropdown } from '../../interfaces';
2
2
  import { dom } from '../../helper';
3
3
 
4
+ /**
5
+ * @typedef {Object} TemplatePluginOptions
6
+ * @property {Array<{name: string, html: string}>} [items] - Template list
7
+ */
8
+
4
9
  /**
5
10
  * @class
6
11
  * @description Template Plugin, Apply a template to the selection.
7
12
  */
8
- class Template extends EditorInjector {
13
+ class Template extends PluginDropdown {
9
14
  static key = 'template';
10
- static type = 'dropdown';
11
15
  static className = '';
12
16
 
13
17
  /**
14
18
  * @constructor
15
- * @param {__se__EditorCore} editor - The root editor instance
16
- * @param {Object} pluginOptions
17
- * @param {Array<{name: string, html: string}>} pluginOptions.items - Template list
19
+ * @param {SunEditor.Kernel} editor - The core kernel
20
+ * @param {TemplatePluginOptions} pluginOptions - Plugin options
18
21
  */
19
22
  constructor(editor, pluginOptions) {
20
23
  // plugin bisic properties
21
24
  super(editor);
22
- this.title = this.lang.template;
25
+ this.title = this.$.lang.template;
23
26
  this.icon = 'template';
24
27
 
25
28
  // members
@@ -30,30 +33,32 @@ class Template extends EditorInjector {
30
33
  const menu = CreateHTML(this.items);
31
34
 
32
35
  // init
33
- this.menu.initDropdownTarget(Template, menu);
36
+ this.$.menu.initDropdownTarget(Template, menu);
34
37
  }
35
38
 
36
39
  /**
37
- * @editorMethod Editor.core
38
- * @description Executes the main execution method of the plugin.
39
- * - Called when an item in the "dropdown" menu is clicked.
40
- * @param {HTMLElement} target - The plugin's toolbar button element
40
+ * @override
41
+ * @type {PluginDropdown['action']}
41
42
  */
42
43
  action(target) {
43
44
  const index = Number(target.getAttribute('data-value'));
44
45
  const temp = this.items[(this.selectedIndex = index)];
45
46
 
46
47
  if (temp.html) {
47
- this.html.insert(temp.html, { selectInserted: false, skipCharCount: false, skipCleaning: false });
48
+ this.$.html.insert(temp.html, { selectInserted: false, skipCharCount: false, skipCleaning: false });
48
49
  } else {
49
- this.menu.dropdownOff();
50
+ this.$.menu.dropdownOff();
50
51
  throw Error('[SUNEDITOR.template.fail] cause : "templates[i].html not found"');
51
52
  }
52
53
 
53
- this.menu.dropdownOff();
54
+ this.$.menu.dropdownOff();
54
55
  }
55
56
  }
56
57
 
58
+ /**
59
+ * @param {Array<{name: string, html: string}>} templateList - Template items
60
+ * @returns {HTMLElement}
61
+ */
57
62
  function CreateHTML(templateList) {
58
63
  if (!templateList || templateList.length === 0) {
59
64
  console.warn('[SUNEDITOR.plugins.template.warn] To use the "template" plugin, please define the "templates" option.');
@@ -1,44 +1,47 @@
1
- import EditorInjector from '../../editorInjector';
1
+ import { PluginDropdown } from '../../interfaces';
2
2
  import { dom } from '../../helper';
3
3
 
4
+ /**
5
+ * @typedef {Object} TextStylePluginOptions
6
+ * @property {Array<string|{name: string, class: string, tag?: string}>} [items] - Text style item list
7
+ */
8
+
4
9
  /**
5
10
  * @class
6
11
  * @description Text style Plugin, Applies a tag that specifies text styles to a selection.
7
12
  */
8
- class TextStyle extends EditorInjector {
13
+ class TextStyle extends PluginDropdown {
9
14
  static key = 'textStyle';
10
- static type = 'dropdown';
11
15
  static className = '';
12
16
 
13
17
  /**
14
18
  * @constructor
15
- * @param {__se__EditorCore} editor - The root editor instance
16
- * @param {Object} pluginOptions
17
- * @param {Array<{name: string, html: string}>} pluginOptions.items - Template list
19
+ * @param {SunEditor.Kernel} editor - The core kernel
20
+ * @param {TextStylePluginOptions} pluginOptions - Plugin options
18
21
  */
19
22
  constructor(editor, pluginOptions) {
20
23
  // plugin bisic properties
21
24
  super(editor);
22
- this.title = this.lang.textStyle;
25
+ this.title = this.$.lang.textStyle;
23
26
  this.icon = 'text_style';
24
27
 
25
28
  // create HTML
26
- const menu = CreateHTML(editor, pluginOptions.items);
29
+ const menu = CreateHTML(this.$, pluginOptions.items);
27
30
 
28
31
  // members
29
32
  this.styleList = menu.querySelectorAll('li button');
30
33
 
31
34
  // init
32
- this.menu.initDropdownTarget(TextStyle, menu);
35
+ this.$.menu.initDropdownTarget(TextStyle, menu);
33
36
  }
34
37
 
35
38
  /**
36
- * @editorMethod Modules.Dropdown
37
- * @description Executes the method that is called when a plugin's dropdown menu is opened.
39
+ * @override
40
+ * @type {PluginDropdown['on']}
38
41
  */
39
42
  on() {
40
43
  const styleButtonList = this.styleList;
41
- const selectionNode = this.selection.getNode();
44
+ const selectionNode = this.$.selection.getNode();
42
45
 
43
46
  for (let i = 0, len = styleButtonList.length, btn, data, active; i < len; i++) {
44
47
  btn = styleButtonList[i];
@@ -48,7 +51,7 @@ class TextStyle extends EditorInjector {
48
51
  node = selectionNode;
49
52
  active = false;
50
53
 
51
- while (node && !this.format.isLine(node) && !this.component.is(node)) {
54
+ while (node && !this.$.format.isLine(node) && !this.$.component.is(node)) {
52
55
  if (node.nodeName.toLowerCase() === btn.getAttribute('data-command').toLowerCase()) {
53
56
  value = data[v];
54
57
  if (/^\./.test(value) ? dom.utils.hasClass(node, value.replace(/^\./, '')) : /** @type {HTMLElement} */ (node).style[value]) {
@@ -67,10 +70,8 @@ class TextStyle extends EditorInjector {
67
70
  }
68
71
 
69
72
  /**
70
- * @editorMethod Editor.core
71
- * @description Executes the main execution method of the plugin.
72
- * - Called when an item in the "dropdown" menu is clicked.
73
- * @param {HTMLElement} target - The plugin's toolbar button element
73
+ * @override
74
+ * @type {PluginDropdown['action']}
74
75
  */
75
76
  action(target) {
76
77
  const tempElement = /** @type {HTMLElement} */ (target.firstElementChild);
@@ -84,24 +85,29 @@ class TextStyle extends EditorInjector {
84
85
 
85
86
  const newNode = dom.utils.hasClass(target, 'active') ? null : tempElement.cloneNode(false);
86
87
  const removeNodes = newNode ? null : [tempElement.nodeName];
87
- this.format.applyInlineElement(newNode, { stylesToModify: checkStyles, nodesToRemove: removeNodes, strictRemove: true });
88
+ this.$.inline.apply(newNode, { stylesToModify: checkStyles, nodesToRemove: removeNodes, strictRemove: true });
88
89
 
89
- this.menu.dropdownOff();
90
+ this.$.menu.dropdownOff();
90
91
  }
91
92
  }
92
93
 
94
+ /**
95
+ * @param {SunEditor.Deps} $ - Kernel dependencies
96
+ * @param {Array<string|{name: string, class: string, tag?: string}>} [items] - Text style items
97
+ * @returns {HTMLElement}
98
+ */
93
99
  function CreateHTML({ lang }, items) {
94
100
  const defaultList = {
95
101
  code: {
96
102
  name: lang.menu_code,
97
103
  class: '__se__t-code',
98
- tag: 'code'
104
+ tag: 'code',
99
105
  },
100
106
  shadow: {
101
107
  name: lang.menu_shadow,
102
108
  class: '__se__t-shadow',
103
- tag: 'span'
104
- }
109
+ tag: 'span',
110
+ },
105
111
  };
106
112
  const styleList = items || Object.keys(defaultList);
107
113