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,466 @@
1
+ import { dom, numbers, env } from '../../../../helper';
2
+ import { refCache } from '../shared/table.utils';
3
+
4
+ /**
5
+ * @param {HTMLTableCellElement} startCell
6
+ * @param {HTMLTableCellElement} endCell
7
+ * @returns {string}
8
+ */
9
+ function getCacheKey(startCell, endCell) {
10
+ const startRow = /** @type {HTMLTableRowElement} */ (startCell.parentNode);
11
+ const endRow = /** @type {HTMLTableRowElement} */ (endCell.parentNode);
12
+ return `${startRow.rowIndex},${startCell.cellIndex}-${endRow.rowIndex},${endCell.cellIndex}`;
13
+ }
14
+
15
+ /**
16
+ * @description Manages table cell selection including multi-cell range selection with keyboard and mouse events.
17
+ */
18
+ export class TableSelectionService {
19
+ #main;
20
+ #$;
21
+ #state;
22
+
23
+ #bindMultiOn;
24
+ #bindMultiOff;
25
+ #bindShiftOff;
26
+ #bindTouchOff;
27
+ #globalEvents;
28
+
29
+ #fixedCellName = null;
30
+
31
+ /**
32
+ * @param {import('../index').default} main Table index
33
+ */
34
+ constructor(main) {
35
+ this.#main = main;
36
+ this.#$ = main.$;
37
+ this.#state = main.state;
38
+
39
+ // member - global events
40
+ this.#bindMultiOn = this.#OnCellMultiSelect.bind(this);
41
+ this.#bindMultiOff = this.#OffCellMultiSelect.bind(this);
42
+ this.#bindShiftOff = this.#OffCellShift.bind(this);
43
+ this.#bindTouchOff = this.#OffCellTouch.bind(this);
44
+ this.#globalEvents = {
45
+ on: null,
46
+ off: null,
47
+ shiftOff: null,
48
+ touchOff: null,
49
+ resize: null,
50
+ resizeStop: null,
51
+ resizeKeyDown: null,
52
+ };
53
+ }
54
+
55
+ get #cellService() {
56
+ return this.#main.cellService;
57
+ }
58
+
59
+ /**
60
+ * @description Selects a group of table cells and sets internal state related to multi-cell selection.
61
+ * @param {HTMLTableCellElement[]} cells - An array of table cell elements to be selected.
62
+ * @returns {{ fixedCell: HTMLTableCellElement, selectedCell: HTMLTableCellElement }} The fixed and selected cells.
63
+ */
64
+ selectCells(cells) {
65
+ const firstCell = cells[0];
66
+ const lastCell = dom.query.findVisualLastCell(cells);
67
+
68
+ this.#fixedCellName = firstCell.nodeName;
69
+
70
+ this.setMultiCells(firstCell, lastCell);
71
+
72
+ return {
73
+ fixedCell: firstCell,
74
+ selectedCell: lastCell,
75
+ };
76
+ }
77
+
78
+ /**
79
+ * @internal
80
+ * @description Selects multiple table cells and applies selection styles.
81
+ * @param {Node} startCell The first cell in the selection.
82
+ * @param {Node} endCell The last cell in the selection.
83
+ */
84
+ setMultiCells(startCell, endCell) {
85
+ const table = this.#state.selectedTable;
86
+ const rows = table.rows;
87
+ this.deleteStyleSelectedCells();
88
+
89
+ dom.utils.addClass(startCell, 'se-selected-table-cell');
90
+
91
+ if (startCell === endCell && !this.#state.isShiftPressed) {
92
+ return;
93
+ }
94
+
95
+ // try cache
96
+ const cacheKey = getCacheKey(/** @type {HTMLTableCellElement} */ (startCell), /** @type {HTMLTableCellElement} */ (endCell));
97
+ let tableCache = refCache.get(table);
98
+ const cachedRef = tableCache?.get(cacheKey);
99
+
100
+ if (cachedRef) {
101
+ this.#main.setState('ref', cachedRef);
102
+ this.#applySelectionStyles(rows, cachedRef);
103
+ return;
104
+ }
105
+
106
+ // calculate ref
107
+ const ref = this.#calculateRef(rows, startCell, endCell);
108
+ this.#main.setState('ref', ref);
109
+
110
+ // cache ref
111
+ if (!tableCache) {
112
+ tableCache = new Map();
113
+ refCache.set(table, tableCache);
114
+ }
115
+ tableCache.set(cacheKey, ref);
116
+
117
+ // apply styles
118
+ this.#applySelectionStyles(rows, ref);
119
+ }
120
+
121
+ /**
122
+ * @param {HTMLCollectionOf<HTMLTableRowElement>} rows
123
+ * @param {Node} startCell
124
+ * @param {Node} endCell
125
+ * @returns {{_i: number, cs: number|null, ce: number|null, rs: number|null, re: number|null}}
126
+ */
127
+ #calculateRef(rows, startCell, endCell) {
128
+ let findSelectedCell = true;
129
+ let spanIndex = [];
130
+ let rowSpanArr = [];
131
+ const ref = { _i: 0, cs: null, ce: null, rs: null, re: null };
132
+
133
+ for (let i = 0, len = rows.length, cells, colSpan; i < len; i++) {
134
+ cells = rows[i].cells;
135
+ colSpan = 0;
136
+
137
+ for (let c = 0, cLen = cells.length, cell, logcalIndex, cs, rs; c < cLen; c++) {
138
+ cell = cells[c];
139
+ cs = cell.colSpan - 1;
140
+ rs = cell.rowSpan - 1;
141
+ logcalIndex = c + colSpan;
142
+
143
+ if (spanIndex.length > 0) {
144
+ for (let r = 0, arr; r < spanIndex.length; r++) {
145
+ arr = spanIndex[r];
146
+ if (arr.row > i) continue;
147
+ if (logcalIndex >= arr.index) {
148
+ colSpan += arr.cs;
149
+ logcalIndex += arr.cs;
150
+ arr.rs -= 1;
151
+ arr.row = i + 1;
152
+ if (arr.rs < 1) {
153
+ spanIndex.splice(r, 1);
154
+ r--;
155
+ }
156
+ } else if (c === cLen - 1) {
157
+ arr.rs -= 1;
158
+ arr.row = i + 1;
159
+ if (arr.rs < 1) {
160
+ spanIndex.splice(r, 1);
161
+ r--;
162
+ }
163
+ }
164
+ }
165
+ }
166
+
167
+ if (findSelectedCell) {
168
+ if (cell === startCell || cell === endCell) {
169
+ ref.cs = ref.cs !== null && ref.cs < logcalIndex ? ref.cs : logcalIndex;
170
+ ref.ce = ref.ce !== null && ref.ce > logcalIndex + cs ? ref.ce : logcalIndex + cs;
171
+ ref.rs = ref.rs !== null && ref.rs < i ? ref.rs : i;
172
+ ref.re = ref.re !== null && ref.re > i + rs ? ref.re : i + rs;
173
+ ref._i += 1;
174
+ }
175
+
176
+ if (ref._i === 2) {
177
+ findSelectedCell = false;
178
+ spanIndex = [];
179
+ rowSpanArr = [];
180
+ i = -1;
181
+ break;
182
+ }
183
+ } else {
184
+ const newCs = ref.cs < logcalIndex ? ref.cs : logcalIndex;
185
+ const newCe = ref.ce > logcalIndex + cs ? ref.ce : logcalIndex + cs;
186
+ const newRs = ref.rs < i ? ref.rs : i;
187
+ const newRe = ref.re > i + rs ? ref.re : i + rs;
188
+
189
+ if (numbers.getOverlapRangeAtIndex(ref.cs, ref.ce, logcalIndex, logcalIndex + cs) && numbers.getOverlapRangeAtIndex(ref.rs, ref.re, i, i + rs)) {
190
+ if (ref.cs !== newCs || ref.ce !== newCe || ref.rs !== newRs || ref.re !== newRe) {
191
+ ref.cs = newCs;
192
+ ref.ce = newCe;
193
+ ref.rs = newRs;
194
+ ref.re = newRe;
195
+ i = -1;
196
+
197
+ spanIndex = [];
198
+ rowSpanArr = [];
199
+ break;
200
+ }
201
+ }
202
+ }
203
+
204
+ if (rs > 0) {
205
+ rowSpanArr.push({
206
+ index: logcalIndex,
207
+ cs: cs + 1,
208
+ rs: rs,
209
+ row: -1,
210
+ });
211
+ }
212
+
213
+ colSpan += cell.colSpan - 1;
214
+ }
215
+
216
+ spanIndex = spanIndex.concat(rowSpanArr).sort((a, b) => a.index - b.index);
217
+ rowSpanArr = [];
218
+ }
219
+
220
+ return ref;
221
+ }
222
+
223
+ /**
224
+ * @param {HTMLCollectionOf<HTMLTableRowElement>} rows
225
+ * @param {{cs: number|null, ce: number|null, rs: number|null, re: number|null}} ref
226
+ */
227
+ #applySelectionStyles(rows, ref) {
228
+ let spanIndex = [];
229
+ let rowSpanArr = [];
230
+
231
+ for (let i = 0, len = rows.length, cells, colSpan; i < len; i++) {
232
+ cells = rows[i].cells;
233
+ colSpan = 0;
234
+
235
+ for (let c = 0, cLen = cells.length, cell, logcalIndex, cs, rs; c < cLen; c++) {
236
+ cell = cells[c];
237
+ cs = cell.colSpan - 1;
238
+ rs = cell.rowSpan - 1;
239
+ logcalIndex = c + colSpan;
240
+
241
+ if (spanIndex.length > 0) {
242
+ for (let r = 0, arr; r < spanIndex.length; r++) {
243
+ arr = spanIndex[r];
244
+ if (arr.row > i) continue;
245
+ if (logcalIndex >= arr.index) {
246
+ colSpan += arr.cs;
247
+ logcalIndex += arr.cs;
248
+ arr.rs -= 1;
249
+ arr.row = i + 1;
250
+ if (arr.rs < 1) {
251
+ spanIndex.splice(r, 1);
252
+ r--;
253
+ }
254
+ } else if (c === cLen - 1) {
255
+ arr.rs -= 1;
256
+ arr.row = i + 1;
257
+ if (arr.rs < 1) {
258
+ spanIndex.splice(r, 1);
259
+ r--;
260
+ }
261
+ }
262
+ }
263
+ }
264
+
265
+ if (numbers.getOverlapRangeAtIndex(ref.cs, ref.ce, logcalIndex, logcalIndex + cs) && numbers.getOverlapRangeAtIndex(ref.rs, ref.re, i, i + rs)) {
266
+ dom.utils.addClass(cell, 'se-selected-table-cell');
267
+ }
268
+
269
+ if (rs > 0) {
270
+ rowSpanArr.push({
271
+ index: logcalIndex,
272
+ cs: cs + 1,
273
+ rs: rs,
274
+ row: -1,
275
+ });
276
+ }
277
+
278
+ colSpan += cell.colSpan - 1;
279
+ }
280
+
281
+ spanIndex = spanIndex.concat(rowSpanArr).sort((a, b) => a.index - b.index);
282
+ rowSpanArr = [];
283
+ }
284
+ }
285
+
286
+ /**
287
+ * @description Initializes cell selection state and applies visual styles.
288
+ * Sets up the fixed cell, selected cells array, and table reference.
289
+ * @param {HTMLTableCellElement} tdElement The target table cell element.
290
+ */
291
+ initCellSelection(tdElement) {
292
+ this.#main.setState('fixedCell', tdElement);
293
+ if (!this.#state.selectedCells?.length) this.#main.setState('selectedCells', [tdElement]);
294
+ this.#fixedCellName = tdElement.nodeName;
295
+ this.#main.setState('selectedTable', dom.query.getParentElement(tdElement, 'TABLE'));
296
+
297
+ this.deleteStyleSelectedCells();
298
+ dom.utils.addClass(tdElement, 'se-selected-cell-focus');
299
+ }
300
+
301
+ /**
302
+ * @description Starts cell selection with global event listeners for drag/shift selection.
303
+ * **WARNING**: Registers global events (mousemove/mousedown, mouseup, touchmove).
304
+ * These events are auto-removed on mouseup/touchmove, or call `#removeGlobalEvents()` manually.
305
+ * @param {HTMLTableCellElement} tdElement The target table cell element.
306
+ * @param {boolean} shift If `true`, enables shift+click range selection mode.
307
+ */
308
+ startCellSelection(tdElement, shift) {
309
+ if (!this.#state.isShiftPressed && !this.#state.ref) this.#removeGlobalEvents();
310
+
311
+ this.#main.setState('isShiftPressed', shift);
312
+ this.initCellSelection(tdElement);
313
+
314
+ if (!shift) {
315
+ this.#globalEvents.on = this.#$.eventManager.addGlobalEvent('mousemove', this.#bindMultiOn, false);
316
+ } else {
317
+ this.#globalEvents.shiftOff = this.#$.eventManager.addGlobalEvent('keyup', this.#bindShiftOff, false);
318
+ this.#globalEvents.on = this.#$.eventManager.addGlobalEvent('mousedown', this.#bindMultiOn, false);
319
+ }
320
+
321
+ this.#globalEvents.off = this.#$.eventManager.addGlobalEvent('mouseup', this.#bindMultiOff, false);
322
+ this.#globalEvents.touchOff = this.#$.eventManager.addGlobalEvent('touchmove', this.#bindTouchOff, false);
323
+ }
324
+
325
+ /**
326
+ * @description Deletes styles from selected table cells.
327
+ */
328
+ deleteStyleSelectedCells() {
329
+ dom.utils.removeClass([this.#state.fixedCell, this.#state.selectedCell], 'se-selected-cell-focus');
330
+ const table = this.#state.fixedCell?.closest('table');
331
+ if (table) {
332
+ const selectedCells = table.querySelectorAll('.se-selected-table-cell');
333
+ for (let i = 0, len = selectedCells.length; i < len; i++) {
334
+ dom.utils.removeClass(selectedCells[i], 'se-selected-table-cell');
335
+ }
336
+ }
337
+ }
338
+
339
+ /**
340
+ * @description Restores styles for selected table cells.
341
+ */
342
+ recallStyleSelectedCells() {
343
+ if (this.#state.selectedCells) {
344
+ const selectedCells = this.#state.selectedCells;
345
+ for (let i = 0, len = selectedCells.length; i < len; i++) {
346
+ dom.utils.addClass(selectedCells[i], 'se-selected-table-cell');
347
+ }
348
+ }
349
+ }
350
+
351
+ /**
352
+ * @description Focus cell
353
+ * @param {HTMLElement} cell Target node
354
+ */
355
+ focusCellEdge(cell) {
356
+ if (!env.isMobile) this.#$.focusManager.focusEdge(cell);
357
+ }
358
+
359
+ /**
360
+ * @description Handles multi-selection of table cells.
361
+ * @param {MouseEvent} e The mouse event.
362
+ */
363
+ #OnCellMultiSelect(e) {
364
+ this.#$.store.set('_preventBlur', true);
365
+ const target = /** @type {HTMLTableCellElement} */ (dom.query.getParentElement(dom.query.getEventTarget(e), dom.check.isTableCell));
366
+
367
+ if (this.#state.isShiftPressed) {
368
+ if (target === this.#state.fixedCell) {
369
+ this.#main.setState('isShiftPressed', false);
370
+ this.deleteStyleSelectedCells();
371
+ this.#main._editorEnable(true);
372
+ this.#removeGlobalEvents();
373
+ return;
374
+ } else {
375
+ this.#main._editorEnable(false);
376
+ }
377
+ } else if (!this.#state.ref) {
378
+ if (target === this.#state.fixedCell) return;
379
+ else this.#main._editorEnable(false);
380
+ }
381
+
382
+ if (!target || target === this.#state.selectedCell || this.#fixedCellName !== target.nodeName || this.#state.selectedTable !== dom.query.getParentElement(target, 'TABLE')) {
383
+ return;
384
+ }
385
+
386
+ this.#main.setState('selectedCell', target);
387
+ this.setMultiCells(this.#state.fixedCell, this.#state.selectedCell);
388
+ }
389
+
390
+ /**
391
+ * @description Stops multi-selection of table cells.
392
+ * @param {MouseEvent} e The mouse event.
393
+ */
394
+ #OffCellMultiSelect(e) {
395
+ e.stopPropagation();
396
+
397
+ if (!this.#state.isShiftPressed) {
398
+ this.#main._editorEnable(true);
399
+ this.#removeGlobalEvents();
400
+ } else {
401
+ this.#globalEvents.touchOff &&= this.#$.eventManager.removeGlobalEvent(this.#globalEvents.touchOff);
402
+ }
403
+
404
+ const fixedCell = this.#state.fixedCell;
405
+ if (!fixedCell || !this.#state.selectedTable) return;
406
+
407
+ this.#cellService.setMergeSplitButton();
408
+ this.#main.setState('selectedCells', Array.from(this.#state.selectedTable.querySelectorAll('.se-selected-table-cell')));
409
+
410
+ if (this.#state.isShiftPressed) return;
411
+
412
+ if (fixedCell && this.#state.selectedCell) {
413
+ this.focusCellEdge(fixedCell);
414
+ if (fixedCell === this.#state.selectedCell) {
415
+ dom.utils.removeClass(fixedCell, 'se-selected-table-cell');
416
+ }
417
+ }
418
+
419
+ const displayCell = this.#state.selectedCells?.length > 0 ? this.#state.selectedCell : fixedCell;
420
+ this.#main._setController(displayCell);
421
+ }
422
+
423
+ /**
424
+ * @description Handles the removal of shift-based selection.
425
+ */
426
+ #OffCellShift() {
427
+ if (!this.#state.ref) {
428
+ this.#main._closeController();
429
+ } else {
430
+ this.#removeGlobalEvents();
431
+ this.#main._editorEnable(true);
432
+
433
+ this.focusCellEdge(this.#state.fixedCell);
434
+
435
+ const displayCell = this.#state.selectedCells?.length > 0 ? this.#state.selectedCell : this.#state.fixedCell;
436
+ this.#main._setController(displayCell);
437
+ }
438
+ }
439
+
440
+ /**
441
+ * @description Handles the removal of touch-based selection.
442
+ */
443
+ #OffCellTouch() {
444
+ this.#main.resetInfo();
445
+ }
446
+
447
+ /**
448
+ * @description Removes global event listeners and resets resize-related properties.
449
+ */
450
+ #removeGlobalEvents() {
451
+ this.#$.ui.disableBackWrapper();
452
+ const globalEvents = this.#globalEvents;
453
+ for (const k in globalEvents) {
454
+ globalEvents[k] &&= this.#$.eventManager.removeGlobalEvent(globalEvents[k]);
455
+ }
456
+ }
457
+
458
+ /**
459
+ * @description Initialize the selection service (remove global events).
460
+ */
461
+ init() {
462
+ this.#removeGlobalEvents();
463
+ }
464
+ }
465
+
466
+ export default TableSelectionService;