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,7 +1,4 @@
1
- /**
2
- * @fileoverview Implements Helper for querying the DOM.
3
- */
4
-
1
+ import { _w } from '../env';
5
2
  import { zeroWidthRegExp } from '../unicode';
6
3
  import domUtils from './domUtils';
7
4
  import domCheck from './domCheck';
@@ -20,12 +17,12 @@ export function getPositionIndex(node) {
20
17
  }
21
18
 
22
19
  /**
23
- * @description Returns the position of the "node" in the "parentNode" in a numerical array.
20
+ * @description Returns the position of the `node` in the `parentNode` in a numerical array.
24
21
  * - e.g.) <p><span>aa</span><span>bb</span></p> : getNodePath(node: "bb", parentNode: "<P>") -> [1, 0]
25
22
  * @param {Node} node The Node to find position path
26
- * @param {?Node} parentNode Parent node. If null, wysiwyg div area
27
- * @param {?{s: number, e: number}=} _newOffsets If you send an object of the form "{s: 0, e: 0}", the text nodes that are attached together are merged into one, centered on the "node" argument.
28
- * "_newOffsets.s" stores the length of the combined characters after "node" and "_newOffsets.e" stores the length of the combined characters before "node".
23
+ * @param {?Node} parentNode Parent node. If `null`, wysiwyg `div` area
24
+ * @param {?{s: number, e: number}} [_newOffsets] If you send an object of the form `{s: 0, e: 0}`, the text nodes that are attached together are merged into one, centered on the `node` argument.
25
+ * `_newOffsets.s` stores the length of the combined characters after `node` and `_newOffsets.e` stores the length of the combined characters before `node`.
29
26
  * Do not use unless absolutely necessary.
30
27
  * @returns {Array<number>}
31
28
  */
@@ -74,8 +71,8 @@ export function getNodePath(node, parentNode, _newOffsets) {
74
71
 
75
72
  /**
76
73
  * @template {Node} T
77
- * @description Returns the node in the location of the path array obtained from "helper.dom.getNodePath".
78
- * @param {Array<number>} offsets Position array, array obtained from "helper.dom.getNodePath"
74
+ * @description Returns the node in the location of the path array obtained from `helper.dom.getNodePath`.
75
+ * @param {Array<number>} offsets Position array, array obtained from `helper.dom.getNodePath`
79
76
  * @param {Node} parentNode Base parent element
80
77
  * @returns {T}
81
78
  */
@@ -98,74 +95,111 @@ export function getNodeFromPath(offsets, parentNode) {
98
95
 
99
96
  /**
100
97
  * @template {HTMLElement} T
101
- * @description Get all "children" of the argument value element (Without text nodes)
98
+ * @description Get all `child node` of the argument value element
99
+ * @param {Node} element element to get child node
100
+ * @param {?(current: *) => boolean} validation Conditional function
101
+ * @returns {T|null}
102
+ */
103
+ export function getChildNode(element, validation) {
104
+ let child = null;
105
+ if (!element) return child;
106
+
107
+ const el = /** @type {Element} */ (element);
108
+ if (!el.children || el.children.length === 0) return child;
109
+
110
+ validation ||= () => true;
111
+
112
+ (function recursionFunc(current) {
113
+ if (el !== current && validation(current)) {
114
+ child = current;
115
+ return true;
116
+ }
117
+
118
+ if (current.children) {
119
+ for (let i = 0, len = current.children.length; i < len; i++) {
120
+ recursionFunc(current.children[i]);
121
+ }
122
+ }
123
+ })(el);
124
+
125
+ return /** @type {T} */ (child);
126
+ }
127
+
128
+ /**
129
+ * @template {HTMLElement} T
130
+ * @description Get all `children` of the argument value element (Without text nodes)
102
131
  * @param {Node} element element to get child node
103
132
  * @param {?(current: *) => boolean} validation Conditional function
133
+ * @param {?number} depth Number of child levels to depth.
104
134
  * @returns {Array<T>}
105
135
  */
106
- export function getListChildren(element, validation) {
136
+ export function getListChildren(element, validation, depth) {
107
137
  /** @type {Array<T>} */
108
138
  const children = [];
109
- if (!element) return children;
139
+ depth ??= Infinity;
140
+ if (!element || depth <= 0) return /** @type {Array<T>} */ (children);
110
141
 
111
142
  const el = /** @type {Element} */ (element);
112
143
  if (!el.children || el.children.length === 0) return children;
113
144
 
114
- validation =
115
- validation ||
116
- function () {
117
- return true;
118
- };
145
+ validation ||= () => true;
119
146
 
120
- (function recursionFunc(current) {
121
- if (el !== current && validation(current)) {
147
+ (function recursionFunc(current, level) {
148
+ if (level > depth) return;
149
+
150
+ if (level > 0 && el !== current && validation(current)) {
122
151
  children.push(/** @type {T} */ (current));
123
152
  }
124
153
 
154
+ if (level === depth) return;
155
+
125
156
  if (current.children) {
126
157
  for (let i = 0, len = current.children.length; i < len; i++) {
127
- recursionFunc(current.children[i]);
158
+ recursionFunc(current.children[i], level + 1);
128
159
  }
129
160
  }
130
- })(el);
161
+ })(el, 0);
131
162
 
132
163
  return /** @type {Array<T>} */ (children);
133
164
  }
134
165
 
135
166
  /**
136
167
  * @template {Node} T
137
- * @description Get all "childNodes" of the argument value element (Include text nodes)
168
+ * @description Get all `childNodes` of the argument value element (Include text nodes)
138
169
  * @param {Node} element element to get child node
139
170
  * @param {?(current: *) => boolean} validation Conditional function
171
+ * @param {?number} depth Number of child levels to depth.
140
172
  * @returns {Array<T>}
141
173
  */
142
- export function getListChildNodes(element, validation) {
174
+ export function getListChildNodes(element, validation, depth) {
143
175
  const children = [];
144
- if (!element || element.childNodes.length === 0) return children;
176
+ depth ??= Infinity;
177
+ if (!element || depth <= 0 || element.childNodes.length === 0) return /** @type {Array<T>} */ (children);
145
178
 
146
- validation =
147
- validation ||
148
- function () {
149
- return true;
150
- };
179
+ validation ||= () => true;
151
180
 
152
- (function recursionFunc(current) {
153
- if (element !== current && validation(current)) {
181
+ (function recursionFunc(current, level) {
182
+ if (level > depth) return;
183
+
184
+ if (level > 0 && validation(current)) {
154
185
  children.push(current);
155
186
  }
156
187
 
157
- for (let i = 0, len = current.childNodes.length; i < len; i++) {
158
- recursionFunc(current.childNodes[i]);
188
+ if (level === depth) return;
189
+
190
+ const nodes = current.childNodes;
191
+ for (let i = 0, len = nodes.length; i < len; i++) {
192
+ recursionFunc(nodes[i], level + 1);
159
193
  }
160
- })(element);
194
+ })(element, 0);
161
195
 
162
196
  return /** @type {Array<T>} */ (children);
163
197
  }
164
198
 
165
199
  /**
166
200
  * @description Returns the number of parents nodes.
167
- * - "0" when the parent node is the WYSIWYG area.
168
- * - '-1' when the element argument is the WYSIWYG area.
201
+ * - `0` when the parent node is the WYSIWYG area.
202
+ * - `-1` when the element argument is the WYSIWYG area.
169
203
  * @param {Node} node The element to check
170
204
  * @returns {number}
171
205
  */
@@ -186,7 +220,7 @@ export function getNodeDepth(node) {
186
220
  /**
187
221
  * @description Sort a node array by depth of element.
188
222
  * @param {Array<Node>} array Node array
189
- * @param {boolean} des true: descending order / false: ascending order
223
+ * @param {boolean} des `true`: descending order / `false`: ascending order
190
224
  */
191
225
  export function sortNodeByDepth(array, des) {
192
226
  const t = !des ? -1 : 1;
@@ -204,22 +238,41 @@ export function sortNodeByDepth(array, des) {
204
238
  * @description Compares two elements to find a common ancestor, and returns the order of the two elements.
205
239
  * @param {Node} a Node to compare.
206
240
  * @param {Node} b Node to compare.
207
- * @returns {{ancestor: HTMLElement|null, a: Node, b: Node, result: number}} { ancesstor, a, b, result: (a > b ? 1 : a < b ? -1 : 0) };
241
+ * @returns {{ancestor: ?HTMLElement, a: Node, b: Node, result: number}} { ancesstor, a, b, result: (a > b ? 1 : a < b ? -1 : 0) };
208
242
  */
209
243
  export function compareElements(a, b) {
210
244
  let aNode = a,
211
245
  bNode = b;
246
+
247
+ // Equalize depth
248
+ const aDepth = getNodeDepth(a);
249
+ const bDepth = getNodeDepth(b);
250
+
251
+ if (aDepth > bDepth) {
252
+ let diff = aDepth - bDepth;
253
+ while (diff > 0 && aNode) {
254
+ aNode = aNode.parentElement;
255
+ diff--;
256
+ }
257
+ } else if (bDepth > aDepth) {
258
+ let diff = bDepth - aDepth;
259
+ while (diff > 0 && bNode) {
260
+ bNode = bNode.parentElement;
261
+ diff--;
262
+ }
263
+ }
264
+
212
265
  while (aNode && bNode && aNode.parentElement !== bNode.parentElement) {
213
266
  aNode = aNode.parentElement;
214
267
  bNode = bNode.parentElement;
215
268
  }
216
269
 
217
- if (!aNode || !bNode)
270
+ if (!aNode?.parentNode || !bNode?.parentNode)
218
271
  return {
219
272
  ancestor: null,
220
273
  a: a,
221
274
  b: b,
222
- result: 0
275
+ result: 0,
223
276
  };
224
277
 
225
278
  const children = aNode.parentNode.childNodes;
@@ -230,7 +283,7 @@ export function compareElements(a, b) {
230
283
  ancestor: aNode.parentElement,
231
284
  a: aNode,
232
285
  b: bNode,
233
- result: aIndex > bIndex ? 1 : aIndex < bIndex ? -1 : 0
286
+ result: aIndex > bIndex ? 1 : aIndex < bIndex ? -1 : 0,
234
287
  };
235
288
  }
236
289
 
@@ -238,12 +291,21 @@ export function compareElements(a, b) {
238
291
  * @template {HTMLElement} T
239
292
  * @description Get the parent element of the argument value.
240
293
  * - A tag that satisfies the query condition is imported.
294
+ * @example
295
+ * // Find by tag name
296
+ * const table = dom.query.getParentElement(cell, 'TABLE');
297
+ *
298
+ * // Find by CSS class
299
+ * const wrapper = dom.query.getParentElement(node, '.se-wrapper');
300
+ *
301
+ * // Find by validation function
302
+ * const line = dom.query.getParentElement(node, (el) => el.nodeType === 1);
241
303
  * @param {Node} element Reference element
242
- * @param {string|((current: *) => boolean)|Node} query Query String (nodeName, .className, #ID, :name) or validation function.
304
+ * @param {string|((current: *) => boolean)|Node} query Query String (`nodeName`, `.className`, `#ID`, `:name`) or validation function.
243
305
  * - Not use it like jquery.
244
306
  * - Only one condition can be entered at a time.
245
- * @param {?number=} depth Number of parent levels to depth.
246
- * @returns {T|null} Not found: null
307
+ * @param {?number} [depth] Number of parent levels to depth.
308
+ * @returns {T|null} Not found: `null`
247
309
  */
248
310
  export function getParentElement(element, query, depth) {
249
311
  let valid;
@@ -274,7 +336,7 @@ export function getParentElement(element, query, depth) {
274
336
  valid = (el) => regExp.test(el[attr]);
275
337
  }
276
338
 
277
- if (!depth) depth = Infinity;
339
+ depth ||= Infinity;
278
340
  let index = 0;
279
341
  while (element && !valid(element)) {
280
342
  if (index >= depth || domCheck.isWysiwygFrame(element)) {
@@ -292,10 +354,10 @@ export function getParentElement(element, query, depth) {
292
354
  * @description Gets all ancestors of the argument value.
293
355
  * - Get all tags that satisfy the query condition.
294
356
  * @param {Node} element Reference element
295
- * @param {string|((current: *) => boolean)|Node} query Query String (nodeName, .className, #ID, :name) or validation function.
357
+ * @param {string|((current: *) => boolean)|Node} query Query String (`nodeName`, `.className`, `#ID`, `:name`) or validation function.
296
358
  * Not use it like jquery.
297
359
  * Only one condition can be entered at a time.
298
- * @param {?number=} depth Number of parent levels to depth.
360
+ * @param {?number} [depth] Number of parent levels to depth.
299
361
  * @returns {Array<T>} Returned in an array in order.
300
362
  */
301
363
  export function getParentElements(element, query, depth) {
@@ -328,7 +390,7 @@ export function getParentElements(element, query, depth) {
328
390
  }
329
391
 
330
392
  const elementList = [];
331
- if (!depth) depth = Infinity;
393
+ depth ||= Infinity;
332
394
  let index = 0;
333
395
  while (index <= depth && element && !domCheck.isWysiwygFrame(element)) {
334
396
  if (valid(element)) {
@@ -343,7 +405,7 @@ export function getParentElements(element, query, depth) {
343
405
 
344
406
  /**
345
407
  * @template {HTMLElement} T
346
- * @description Gets the element with "data-command" attribute among the parent elements.
408
+ * @description Gets the element with `data-command` attribute among the parent elements.
347
409
  * @param {Node} target Target element
348
410
  * @returns {T|null}
349
411
  */
@@ -372,11 +434,11 @@ export function getEventTarget(event) {
372
434
  * @description Get the child element of the argument value.
373
435
  * - A tag that satisfies the query condition is imported.
374
436
  * @param {Node} node Reference element
375
- * @param {string|((current: *) => boolean)|Node} query Query String (nodeName, .className, #ID, :name) or validation function.
376
- * @param {boolean} last If true returns the last node among the found child nodes. (default: first node)
437
+ * @param {string|((current: *) => boolean)|Node} query Query String (`nodeName`, `.className`, `#ID`, `:name`) or validation function.
438
+ * @param {boolean} last If `true` returns the last node among the found child nodes. (default: first node)
377
439
  * Not use it like jquery.
378
440
  * Only one condition can be entered at a time.
379
- * @returns {T|null} Not found: null
441
+ * @returns {T|null} Not found: `null`
380
442
  */
381
443
  export function getEdgeChild(node, query, last) {
382
444
  let valid;
@@ -409,30 +471,30 @@ export function getEdgeChild(node, query, last) {
409
471
  };
410
472
  }
411
473
 
412
- const childList = getListChildNodes(node, (current) => valid(current));
474
+ const childList = getListChildNodes(node, (current) => valid(current), null);
413
475
 
414
476
  return /** @type {T} */ (childList[last ? childList.length - 1 : 0]);
415
477
  }
416
478
 
417
479
  /**
418
480
  * @description Get edge child nodes of the argument value.
419
- * - 1. The first node of all the child nodes of the "first" element is returned.
420
- * - 2. The last node of all the child nodes of the "last" element is returned.
421
- * - 3. When there is no "last" element, the first and last nodes of all the children of the "first" element are returned.
481
+ * - 1. The first node of all the child nodes of the `first` element is returned.
482
+ * - 2. The last node of all the child nodes of the `last` element is returned.
483
+ * - 3. When there is no `last` element, the first and last nodes of all the children of the `first` element are returned.
422
484
  * @param {Node} first First element
423
- * @param {Node|null} last Last element
424
- * @returns {{sc: Node, ec: Node}} { sc: "first", ec: "last" }
485
+ * @param {?Node} last Last element
486
+ * @returns {{sc: Node, ec: Node}} { sc: `first`, ec: `last` }
425
487
  */
426
488
  export function getEdgeChildNodes(first, last) {
427
489
  if (!first) return;
428
- if (!last) last = first;
490
+ last ||= first;
429
491
 
430
492
  while (first && first.nodeType === 1 && first.childNodes.length > 0 && !domCheck.isBreak(first)) first = first.firstChild;
431
493
  while (last && last.nodeType === 1 && last.childNodes.length > 0 && !domCheck.isBreak(last)) last = last.lastChild;
432
494
 
433
495
  return {
434
496
  sc: first,
435
- ec: last || first
497
+ ec: last || first,
436
498
  };
437
499
  }
438
500
 
@@ -440,8 +502,8 @@ export function getEdgeChildNodes(first, last) {
440
502
  * @template {Node} T
441
503
  * @description Gets the previous sibling last child. If there is no sibling, then it'll take it from the closest ancestor with child
442
504
  * @param {Node} node Reference element
443
- * @param {?Node=} ceiling Highest boundary allowed
444
- * @returns {T|null} Not found: null
505
+ * @param {?Node} [ceiling] Highest boundary allowed
506
+ * @returns {T|null} Not found: `null`
445
507
  */
446
508
  export function getPreviousDeepestNode(node, ceiling) {
447
509
  let previousNode = node.previousSibling;
@@ -467,8 +529,8 @@ export function getPreviousDeepestNode(node, ceiling) {
467
529
  * @template {Node} T
468
530
  * @description Gets the next sibling first child. If there is no sibling, then it'll take it from the closest ancestor with child
469
531
  * @param {Node} node Reference element
470
- * @param {?Node=} ceiling Highest boundary allowed
471
- * @returns {T|null} Not found: null
532
+ * @param {?Node} [ceiling] Highest boundary allowed
533
+ * @returns {T|null} Not found: `null`
472
534
  */
473
535
  export function getNextDeepestNode(node, ceiling) {
474
536
  let nextNode = node.nextSibling;
@@ -491,16 +553,16 @@ export function getNextDeepestNode(node, ceiling) {
491
553
  }
492
554
 
493
555
  /**
494
- * @description Find the index of the text node in the line element.
495
- * @param {Node} line Line element (p, div, etc.)
556
+ * @description Find the index of the text node in the `line` element.
557
+ * @param {Node} line `line` element (p, div, etc.)
496
558
  * @param {Node} offsetContainer Base node to start searching
497
559
  * @param {number} offset Base offset to start searching
498
- * @param {?(current: *) => boolean=} validate Validation function
560
+ * @param {?(current: *) => boolean} [validate] Validation function
499
561
  * @returns {number}
500
562
  */
501
563
  export function findTextIndexOnLine(line, offsetContainer, offset, validate) {
502
564
  if (!line) return 0;
503
- if (!validate) validate = () => true;
565
+ validate ||= () => true;
504
566
 
505
567
  let index = 0;
506
568
  let found = false;
@@ -531,7 +593,7 @@ export function findTextIndexOnLine(line, offsetContainer, offset, validate) {
531
593
  /**
532
594
  * @description Find the end index of a sequence of at least minTabSize consecutive non-breaking spaces or spaces
533
595
  * - which are interpreted as a tab key, occurring after a given base index in a text string.
534
- * @param {Node} line Line element (p, div, etc.)
596
+ * @param {Node} line `line` element (p, div, etc.)
535
597
  * @param {number} baseIndex Base index to start searching
536
598
  * @param {number} minTabSize Minimum number of consecutive spaces to consider as a tab
537
599
  * @returns {number} The adjusted index within the line element accounting for non-space characters
@@ -558,7 +620,7 @@ export function findTabEndIndex(line, baseIndex, minTabSize) {
558
620
 
559
621
  /**
560
622
  * @description Finds the table cell that appears visually at the bottom-right position,
561
- * considering both rowSpan and colSpan, even if smaller cells are placed after large merged cells.
623
+ * considering both `rowSpan` and `colSpan`, even if smaller cells are placed after large merged cells.
562
624
  *
563
625
  * @param {HTMLTableCellElement[]} cells
564
626
  * @returns {HTMLTableCellElement|null}
@@ -583,7 +645,7 @@ export function findVisualLastCell(cells) {
583
645
  const colSpan = cell.colSpan || 1;
584
646
 
585
647
  // 현재 행에서 visual column index 찾기
586
- if (!occupied[rowIndex]) occupied[rowIndex] = [];
648
+ occupied[rowIndex] ||= [];
587
649
 
588
650
  let colIndex = 0;
589
651
  const rowOcc = occupied[rowIndex];
@@ -595,7 +657,7 @@ export function findVisualLastCell(cells) {
595
657
 
596
658
  for (let r = 1; r < rowSpan; r++) {
597
659
  const nextRow = rowIndex + r;
598
- if (!occupied[nextRow]) occupied[nextRow] = [];
660
+ occupied[nextRow] ||= [];
599
661
  for (let i = 0; i < colSpan; i++) {
600
662
  occupied[nextRow][colIndex + i] = true;
601
663
  }
@@ -616,26 +678,33 @@ export function findVisualLastCell(cells) {
616
678
  }
617
679
 
618
680
  /**
619
- * @description Get nearest scrollable parent
620
- * @param {Node} element Element
621
- * @returns {HTMLElement|null}
681
+ * @description Finds and returns parent containers that are scrollable.
682
+ * @param {HTMLElement} element - Element to start with
683
+ * @returns {HTMLElement[]} - Array (in descending order)
622
684
  */
623
- export function getScrollParent(element) {
624
- if (!element || /^(body|html)$/i.test(element.nodeName)) {
625
- return null;
626
- }
685
+ export function getScrollParents(element) {
686
+ const scrollable = [];
687
+ let parent = element?.parentElement;
627
688
 
628
- const el = /** @type {HTMLElement} */ (element);
629
- if (el.scrollHeight > el.clientHeight) {
630
- return el;
631
- } else {
632
- return getScrollParent(el.parentNode);
689
+ while (parent && !/^(body|html)$/i.test(parent.nodeName)) {
690
+ const style = _w.getComputedStyle(parent);
691
+ const { overflow, overflowX, overflowY } = style;
692
+
693
+ const canScroll = [overflow, overflowX, overflowY].some((prop) => ['auto', 'scroll', 'overlay'].includes(prop));
694
+
695
+ if (canScroll) {
696
+ scrollable.push(parent);
697
+ }
698
+
699
+ parent = parent.parentElement;
633
700
  }
701
+
702
+ return scrollable;
634
703
  }
635
704
 
636
705
  /**
637
- * @description Get the argument iframe's document object if use the "iframe" or "fullPage" options
638
- * @param {HTMLIFrameElement} iframe Iframe element (this.editor.frameContext.get('wysiwygFrame'))
706
+ * @description Get the argument iframe's document object if use the `iframe` or `fullPage` options
707
+ * @param {HTMLIFrameElement} iframe Iframe element (`this.frameContext.get('wysiwygFrame')`)
639
708
  * @returns {Document}
640
709
  */
641
710
  export function getIframeDocument(iframe) {
@@ -646,6 +715,7 @@ const query = {
646
715
  getPositionIndex,
647
716
  getNodePath,
648
717
  getNodeFromPath,
718
+ getChildNode,
649
719
  getListChildren,
650
720
  getListChildNodes,
651
721
  getNodeDepth,
@@ -662,8 +732,8 @@ const query = {
662
732
  findTextIndexOnLine,
663
733
  findTabEndIndex,
664
734
  findVisualLastCell,
665
- getScrollParent,
666
- getIframeDocument
735
+ getScrollParents,
736
+ getIframeDocument,
667
737
  };
668
738
 
669
739
  export default query;