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,290 @@
1
+ import type {} from '../../../typedef';
2
+ export default HTML;
3
+ /**
4
+ * @description All HTML related classes involved in the editing area
5
+ */
6
+ declare class HTML {
7
+ /**
8
+ * @constructor
9
+ * @param {SunEditor.Kernel} kernel
10
+ */
11
+ constructor(kernel: SunEditor.Kernel);
12
+ /**
13
+ * @description Filters an HTML string based on allowed and disallowed tags, with optional custom validation.
14
+ * - Removes blacklisted tags and keeps only whitelisted tags.
15
+ * - Allows custom validation functions to replace, modify, or remove elements.
16
+ * @param {string} html - The HTML string to be filtered.
17
+ * @param {Object} params - Filtering parameters.
18
+ * @param {string} [params.tagWhitelist] - Allowed tags, specified as a string with tags separated by `'|'`. (e.g. `"div|p|span"`).
19
+ * @param {string} [params.tagBlacklist] - Disallowed tags, specified as a string with tags separated by `'|'`. (e.g. `"script|iframe"`).
20
+ * @param {(node: Node) => Node | string | null} [params.validate] - Function to validate and modify individual nodes.
21
+ * - Return `null` to remove the node.
22
+ * - Return a `Node` to replace the current node.
23
+ * - Return a `string` to replace the node's `outerHTML`.
24
+ * @param {boolean} [params.validateAll] - Whether to apply validation to all nodes.
25
+ * @returns {string} - The filtered HTML string.
26
+ * @example
27
+ * // Remove script and iframe tags using blacklist
28
+ * const filtered = editor.html.filter('<div>Content<script>alert("xss")</script></div>', {
29
+ * tagBlacklist: 'script|iframe'
30
+ * });
31
+ *
32
+ * // Keep only specific tags using whitelist
33
+ * const filtered = editor.html.filter('<div><span>Text</span><img src="x"></div>', {
34
+ * tagWhitelist: 'div|span'
35
+ * });
36
+ *
37
+ * // Custom validation to modify nodes
38
+ * const filtered = editor.html.filter('<div class="test"><a href="#">Link</a></div>', {
39
+ * validate: (node) => {
40
+ * if (node.tagName === 'A') {
41
+ * node.setAttribute('target', '_blank');
42
+ * return node;
43
+ * }
44
+ * }
45
+ * });
46
+ */
47
+ filter(
48
+ html: string,
49
+ {
50
+ tagWhitelist,
51
+ tagBlacklist,
52
+ validate,
53
+ validateAll,
54
+ }: {
55
+ tagWhitelist?: string;
56
+ tagBlacklist?: string;
57
+ validate?: (node: Node) => Node | string | null;
58
+ validateAll?: boolean;
59
+ },
60
+ ): string;
61
+ /**
62
+ * @description Cleans and compresses HTML code to suit the editor format.
63
+ * @param {string} html HTML string to clean and compress
64
+ * @param {Object} [options] Cleaning options
65
+ * @param {boolean} [options.forceFormat=false] If `true`, wraps text nodes without a format node in the format tag.
66
+ * @param {?(string|RegExp)} [options.whitelist] Regular expression of allowed tags.
67
+ * Create RegExp object using `helper.converter.createElementWhitelist` method.
68
+ * @param {?(string|RegExp)} [options.blacklist] Regular expression of disallowed tags.
69
+ * Create RegExp object using `helper.converter.createElementBlacklist` method.
70
+ * @param {boolean} [options._freeCodeViewMode=false] If `true`, the free code view mode is enabled.
71
+ * @returns {string} Cleaned and compressed HTML string
72
+ * @example
73
+ * // Basic cleaning
74
+ * const cleaned = editor.html.clean('<div> <p>Hello</p> </div>');
75
+ *
76
+ * // Clean with format wrapping
77
+ * const cleaned = editor.html.clean('Plain text content', { forceFormat: true });
78
+ *
79
+ * // Clean with blacklist to remove specific tags
80
+ * const cleaned = editor.html.clean('<div><script>alert(1)</script>Content</div>', {
81
+ * blacklist: 'script|style'
82
+ * });
83
+ */
84
+ clean(
85
+ html: string,
86
+ {
87
+ forceFormat,
88
+ whitelist,
89
+ blacklist,
90
+ _freeCodeViewMode,
91
+ }?: {
92
+ forceFormat?: boolean;
93
+ whitelist?: (string | RegExp) | null;
94
+ blacklist?: (string | RegExp) | null;
95
+ _freeCodeViewMode?: boolean;
96
+ },
97
+ ): string;
98
+ /**
99
+ * @description Inserts an (HTML element / HTML string / plain string) at the selection range.
100
+ * - If `frameOptions.get('charCounter_max')` is exceeded when `html` is added, `null` is returned without addition.
101
+ * @param {Node|string} html HTML Element or HTML string or plain string
102
+ * @param {Object} [options] Options
103
+ * @param {boolean} [options.selectInserted=false] If `true`, selects the range of the inserted node.
104
+ * @param {boolean} [options.skipCharCount=false] If `true`, inserts even if `frameOptions.get('charCounter_max')` is exceeded.
105
+ * @param {boolean} [options.skipCleaning=false] If `true`, inserts the HTML string without refining it with `html.clean`.
106
+ * @returns {HTMLElement|null} The inserted element or `null` if insertion failed
107
+ * @example
108
+ * // Insert HTML string at cursor
109
+ * editor.html.insert('<strong>Bold text</strong>');
110
+ *
111
+ * // Insert and select the inserted content
112
+ * editor.html.insert('<p>New paragraph</p>', { selectInserted: true });
113
+ *
114
+ * // Insert raw HTML without cleaning
115
+ * editor.html.insert('<div class="custom">Content</div>', { skipCleaning: true });
116
+ */
117
+ insert(
118
+ html: Node | string,
119
+ {
120
+ selectInserted,
121
+ skipCharCount,
122
+ skipCleaning,
123
+ }?: {
124
+ selectInserted?: boolean;
125
+ skipCharCount?: boolean;
126
+ skipCleaning?: boolean;
127
+ },
128
+ ): HTMLElement | null;
129
+ /**
130
+ * @description Delete selected node and insert argument value node and return.
131
+ * - If the `afterNode` exists, it is inserted after the `afterNode`
132
+ * - Inserting a text node merges with both text nodes on both sides and returns a new `{ container, startOffset, endOffset }`.
133
+ * @param {Node} oNode Node to be inserted
134
+ * @param {Object} [options] Options
135
+ * @param {Node} [options.afterNode=null] If the node exists, it is inserted after the node
136
+ * @param {boolean} [options.skipCharCount=null] If `true`, it will be inserted even if `frameOptions.get('charCounter_max')` is exceeded.
137
+ * @returns {Object|Node|null}
138
+ * @example
139
+ * // Insert node at current selection
140
+ * const strongNode = document.createElement('strong');
141
+ * strongNode.textContent = 'Bold';
142
+ * editor.html.insertNode(strongNode);
143
+ *
144
+ * // Insert node after a specific element
145
+ * const paragraph = editor.html.getNode();
146
+ * const newSpan = document.createElement('span');
147
+ * editor.html.insertNode(newSpan, { afterNode: paragraph });
148
+ *
149
+ * // Insert bypassing character count limit
150
+ * editor.html.insertNode(largeContentNode, { skipCharCount: true });
151
+ */
152
+ insertNode(
153
+ oNode: Node,
154
+ {
155
+ afterNode,
156
+ skipCharCount,
157
+ }?: {
158
+ afterNode?: Node;
159
+ skipCharCount?: boolean;
160
+ },
161
+ ): any | Node | null;
162
+ /**
163
+ * @description Delete the selected range.
164
+ * @returns {{container: Node, offset: number, commonCon?: ?Node, prevContainer?: ?Node}}
165
+ * - `container`: the last element after deletion
166
+ * - `offset`: offset
167
+ * - `commonCon`: `commonAncestorContainer`
168
+ * - `prevContainer`: `previousElementSibling` of the deleted area
169
+ */
170
+ remove(): {
171
+ container: Node;
172
+ offset: number;
173
+ commonCon?: Node | null;
174
+ prevContainer?: Node | null;
175
+ };
176
+ /**
177
+ * @description Gets the current content
178
+ * @param {Object} [options] Options
179
+ * @param {boolean} [options.withFrame=false] Gets the current content with containing parent `div.sun-editor-editable` (`<div class="sun-editor-editable">{content}</div>`).
180
+ * Ignored for `targetOptions.get('iframe_fullPage')` is `true`.
181
+ * @param {boolean} [options.includeFullPage=false] Return only the content of the body without headers when the `iframe_fullPage` option is `true`
182
+ * @param {number|Array<number>} [options.rootKey=null] Root index
183
+ * @returns {string|Object<*, string>}
184
+ */
185
+ get({ withFrame, includeFullPage, rootKey }?: { withFrame?: boolean; includeFullPage?: boolean; rootKey?: number | Array<number> }): string | any;
186
+ /**
187
+ * @description Sets the HTML string to the editor content
188
+ * @param {string} html HTML string
189
+ * @param {Object} [options] Options
190
+ * @param {number|Array<number>} [options.rootKey=null] Root index
191
+ */
192
+ set(
193
+ html: string,
194
+ {
195
+ rootKey,
196
+ }?: {
197
+ rootKey?: number | Array<number>;
198
+ },
199
+ ): void;
200
+ /**
201
+ * @description Add content to the end of content.
202
+ * @param {string} html Content to Input
203
+ * @param {Object} [options] Options
204
+ * @param {number|Array<number>} [options.rootKey=null] Root index
205
+ */
206
+ add(
207
+ html: string,
208
+ {
209
+ rootKey,
210
+ }?: {
211
+ rootKey?: number | Array<number>;
212
+ },
213
+ ): void;
214
+ /**
215
+ * @description Gets the current content to JSON data
216
+ * @param {Object} [options] Options
217
+ * @param {boolean} [options.withFrame=false] Gets the current content with containing parent `div.sun-editor-editable` (`<div class="sun-editor-editable">{content}</div>`).
218
+ * @param {number|Array<number>} [options.rootKey=null] Root index
219
+ * @returns {Object<string, *>} JSON data
220
+ */
221
+ getJson({ withFrame, rootKey }?: { withFrame?: boolean; rootKey?: number | Array<number> }): {
222
+ [x: string]: any;
223
+ };
224
+ /**
225
+ * @description Sets the JSON data to the editor content
226
+ * @param {Object<string, *>} jsdonData HTML string
227
+ * @param {Object} [options] Options
228
+ * @param {number|Array<number>} [options.rootKey=null] Root index
229
+ */
230
+ setJson(
231
+ jsdonData: {
232
+ [x: string]: any;
233
+ },
234
+ {
235
+ rootKey,
236
+ }?: {
237
+ rootKey?: number | Array<number>;
238
+ },
239
+ ): void;
240
+ /**
241
+ * @description Call `clipboard.write` to copy the contents and display a success/failure toast message.
242
+ * @param {Node|Element|Text|string} content Content to be copied to the clipboard
243
+ * @returns {Promise<boolean>} Success or failure
244
+ */
245
+ copy(content: Node | Element | Text | string): Promise<boolean>;
246
+ /**
247
+ * @description Sets the content of the iframe's head tag and body tag when using the `iframe` or `iframe_fullPage` option.
248
+ * @param {{head: string, body: string}} ctx { head: HTML string, body: HTML string}
249
+ * @param {Object} [options] Options
250
+ * @param {number|Array<number>} [options.rootKey=null] Root index
251
+ */
252
+ setFullPage(
253
+ ctx: {
254
+ head: string;
255
+ body: string;
256
+ },
257
+ {
258
+ rootKey,
259
+ }?: {
260
+ rootKey?: number | Array<number>;
261
+ },
262
+ ): boolean;
263
+ /**
264
+ * @description HTML code compression
265
+ * @param {string} html HTML string
266
+ * @returns {string} HTML string
267
+ */
268
+ compress(html: string): string;
269
+ /**
270
+ * @internal
271
+ * @description construct wysiwyg area element to html string
272
+ * @param {Node|string} html WYSIWYG element (this.#frameContext.get('wysiwyg')) or HTML string.
273
+ * @param {boolean} comp If `true`, does not line break and indentation of tags.
274
+ * @returns {string}
275
+ */
276
+ _convertToCode(html: Node | string, comp: boolean): string;
277
+ /**
278
+ * @internal
279
+ * @description Reset autoStyleify options.
280
+ * @param {Array.<string>} autoStyleify Styles applied automatically on text input.
281
+ * - ex `["bold", "underline", "italic", "strike"]`
282
+ */
283
+ __resetAutoStyleify(autoStyleify: Array<string>): void;
284
+ /**
285
+ * @internal
286
+ * @description Destroy the HTML instance and release memory
287
+ */
288
+ _destroy(): void;
289
+ #private;
290
+ }
@@ -0,0 +1,93 @@
1
+ import type {} from '../../../typedef';
2
+ export default Inline;
3
+ export type NodeStyleContainerType = {
4
+ ancestor?: Node | null;
5
+ offset?: number | null;
6
+ container?: Node | null;
7
+ endContainer?: Node | null;
8
+ };
9
+ /**
10
+ * @typedef {Object} NodeStyleContainerType
11
+ * @property {?Node} [ancestor]
12
+ * @property {?number} [offset]
13
+ * @property {?Node} [container]
14
+ * @property {?Node} [endContainer]
15
+ */
16
+ /**
17
+ * @description Classes related to editor inline formats such as style node like strong, span, etc.
18
+ */
19
+ declare class Inline {
20
+ /**
21
+ * @constructor
22
+ * @param {SunEditor.Kernel} kernel
23
+ */
24
+ constructor(kernel: SunEditor.Kernel);
25
+ /**
26
+ * @description Adds, updates, or deletes style nodes from selected text (a, span, strong, etc.).
27
+ * - 1. If `styleNode` is provided, a node with the same tags and attributes is added to the selected text.
28
+ * - 2. If the same tag already exists, only its attributes are updated.
29
+ * - 3. If `styleNode` is `null`, existing nodes are updated or removed without adding new ones.
30
+ * - 4. Styles matching those in `stylesToModify` are removed. (Use CSS attribute names, e.g., `background-color`)
31
+ * - 5. Classes matching those in `stylesToModify` (prefixed with `"."`) are removed.
32
+ * - 6. `stylesToModify` is used to avoid duplicate property values from `styleNode`.
33
+ * - 7. Nodes with all styles and classes removed are deleted if they match `styleNode`, are in `nodesToRemove`, or if `styleNode` is `null`.
34
+ * - 8. Tags matching names in `nodesToRemove` are deleted regardless of their style and class.
35
+ * - 9. If `strictRemove` is `true`, nodes in `nodesToRemove` are only removed if all their styles and classes are removed.
36
+ * - 10. The function won't modify nodes if the parent has the same class and style values.
37
+ * - However, if `nodesToRemove` has values, it will work and separate text nodes even if there's no node to replace.
38
+ * @param {?Node} styleNode The element to be added to the selection. If `null`, only existing nodes are modified or removed.
39
+ * @param {Object} [options] Options
40
+ * @param {Array<string>} [options.stylesToModify=null] Array of style or class names to check and modify.
41
+ * (e.g., ['font-size'], ['.className'], ['font-family', 'color', '.className'])
42
+ * @param {Array<string>} [options.nodesToRemove=null] Array of node names to remove.
43
+ * If empty array or `null` when `styleNode` is `null`, all formats are removed.
44
+ * (e.g., ['span'], ['strong', 'em'])
45
+ * @param {boolean} [options.strictRemove=false] If `true`, only removes nodes from `nodesToRemove` if all styles and classes are removed.
46
+ * @returns {HTMLElement} The element that was added to or modified in the selection.
47
+ * @example
48
+ * // Apply bold formatting
49
+ * const bold = dom.utils.createElement('STRONG');
50
+ * editor.inline.apply(bold);
51
+ *
52
+ * // Remove specific styles
53
+ * editor.inline.apply(null, { stylesToModify: ['font-size'] });
54
+ *
55
+ * // Remove specific tags
56
+ * editor.inline.apply(null, { nodesToRemove: ['span'] });
57
+ */
58
+ apply(
59
+ styleNode: Node | null,
60
+ {
61
+ stylesToModify,
62
+ nodesToRemove,
63
+ strictRemove,
64
+ }?: {
65
+ stylesToModify?: Array<string>;
66
+ nodesToRemove?: Array<string>;
67
+ strictRemove?: boolean;
68
+ },
69
+ ): HTMLElement;
70
+ /**
71
+ * @description Remove all inline formats (styles and tags) from the currently selected text.
72
+ * - This is a convenience method that calls `apply()` with `null` parameters to strip all formatting.
73
+ * - Removes all inline style nodes (span, strong, em, a, etc.)
74
+ * - Preserves only the plain text content
75
+ * - Works on the current selection or collapsed cursor position
76
+ */
77
+ remove(): void;
78
+ /**
79
+ * @internal
80
+ * @description Nodes that must remain undetached when changing text nodes (A, Label, Code, Span:font-size)
81
+ * @param {Node|string} element Element to check
82
+ * @returns {boolean}
83
+ */
84
+ _isNonSplitNode(element: Node | string): boolean;
85
+ /**
86
+ * @internal
87
+ * @description Nodes that need to be added without modification when changing text nodes
88
+ * @param {Node} element Element to check
89
+ * @returns {boolean}
90
+ */
91
+ _isIgnoreNodeChange(element: Node): boolean;
92
+ #private;
93
+ }
@@ -0,0 +1,101 @@
1
+ import type {} from '../../../typedef';
2
+ export default ListFormat;
3
+ /**
4
+ * @description Classes related to editor formats such as `list` (ol, ul, li)
5
+ * - `list` is a special `line`, `block` format.
6
+ */
7
+ declare class ListFormat {
8
+ /**
9
+ * @constructor
10
+ * @param {SunEditor.Kernel} kernel
11
+ */
12
+ constructor(kernel: SunEditor.Kernel);
13
+ /**
14
+ * @description Append all selected `line` element to the list and insert.
15
+ * @param {string} type List type. (ol | ul):[listStyleType]
16
+ * @param {Array<Node>} selectedCells `line` elements or list cells.
17
+ * @param {boolean} nested If `true`, indenting existing list cells.
18
+ * @example
19
+ * // Create ordered list from selected lines
20
+ * const lines = editor.format.getLines();
21
+ * editor.listFormat.apply('ol', lines, false);
22
+ *
23
+ * // Create unordered list with custom style
24
+ * editor.listFormat.apply('ul:circle', selectedElements, false);
25
+ *
26
+ * // Indent existing list items
27
+ * const listItems = [li1, li2, li3];
28
+ * editor.listFormat.apply('ul', listItems, true);
29
+ */
30
+ apply(
31
+ type: string,
32
+ selectedCells: Array<Node>,
33
+ nested: boolean,
34
+ ): {
35
+ sc: Node;
36
+ so: number;
37
+ ec: Node;
38
+ eo: number;
39
+ };
40
+ /**
41
+ * @description `selectedCells` array are detached from the list element.
42
+ * - The return value is applied when the first and last lines of `selectedFormats` are `LI` respectively.
43
+ * @param {Array<Node>} selectedCells Array of [`line`, `li`] elements(LI, P...) to remove.
44
+ * @param {boolean} shouldDelete If `true`, It does not just remove the list, it deletes the content.
45
+ * @returns {{sc: Node, ec: Node}} Node information after deletion
46
+ * - sc: Start container node
47
+ * - ec: End container node
48
+ */
49
+ remove(
50
+ selectedCells: Array<Node>,
51
+ shouldDelete: boolean,
52
+ ): {
53
+ sc: Node;
54
+ ec: Node;
55
+ };
56
+ /**
57
+ * @description Nest list cells or cancel nested cells.
58
+ * @param {Array<HTMLElement>} selectedCells List cells.
59
+ * @param {boolean} nested Nested or cancel nested.
60
+ * @example
61
+ * // Indent list items (increase nesting)
62
+ * const selectedItems = [liElement1, liElement2];
63
+ * editor.listFormat.applyNested(selectedItems, true);
64
+ *
65
+ * // Outdent list items (decrease nesting)
66
+ * editor.listFormat.applyNested(selectedItems, false);
67
+ *
68
+ * // Get current list cells and nest them
69
+ * const cells = editor.format.getLines().filter(el => el.tagName === 'LI');
70
+ * editor.listFormat.applyNested(cells, true);
71
+ */
72
+ applyNested(
73
+ selectedCells: Array<HTMLElement>,
74
+ nested: boolean,
75
+ ): {
76
+ sc: Node;
77
+ so: number;
78
+ ec: Node;
79
+ eo: number;
80
+ };
81
+ /**
82
+ * @description Detach Nested all nested lists under the `baseNode`.
83
+ * - Returns a list with nested removed.
84
+ * @param {HTMLElement} baseNode Element on which to base.
85
+ * @param {boolean} all If `true`, it also detach all nested lists of a returned list.
86
+ * @returns {Node} Result element
87
+ * @example
88
+ * // Remove first level of nesting
89
+ * const listItem = document.querySelector('li');
90
+ * editor.listFormat.removeNested(listItem, false);
91
+ *
92
+ * // Flatten all nested lists completely
93
+ * editor.listFormat.removeNested(listItem, true);
94
+ *
95
+ * // Remove nesting and get result
96
+ * const result = editor.listFormat.removeNested(nestedLi, false);
97
+ * console.log(result); // parent list element
98
+ */
99
+ removeNested(baseNode: HTMLElement, all: boolean): Node;
100
+ #private;
101
+ }
@@ -0,0 +1,110 @@
1
+ import type {} from '../../../typedef';
2
+ export default NodeTransform;
3
+ /**
4
+ * @description Node utility class. split, merge, etc.
5
+ */
6
+ declare class NodeTransform {
7
+ /**
8
+ * @constructor
9
+ * @param {SunEditor.Kernel} kernel
10
+ */
11
+ constructor(kernel: SunEditor.Kernel);
12
+ /**
13
+ * @template {HTMLElement} T
14
+ * @description Split all tags based on `baseNode`
15
+ * @param {Node} baseNode Element or text node on which to base
16
+ * @param {?(number|Node)} offset Text offset of `baseNode` (Only valid when `baseNode` is a text node)
17
+ * @param {number} [depth=0] The nesting depth of the element being split. (default: 0)
18
+ * @returns {T} The last element of the splited tag.
19
+ * @example
20
+ * // Split at text offset
21
+ * const textNode = editor.selection.getNode();
22
+ * const newElement = editor.nodeTransform.split(textNode, 5, 0);
23
+ *
24
+ * // Split at specific depth to preserve parent structure
25
+ * const paragraph = editor.selection.getNode().closest('p');
26
+ * editor.nodeTransform.split(textNode, 10, 2);
27
+ *
28
+ * // Split by node reference
29
+ * const splitResult = editor.nodeTransform.split(parentNode, childNode, 1);
30
+ */
31
+ split<T extends HTMLElement>(baseNode: Node, offset: (number | Node) | null, depth?: number): T;
32
+ /**
33
+ * @description Use with `npdePath` (dom-query-GetNodePath) to merge the same attributes and tags if they are present and modify the nodepath.
34
+ * - If `offset` has been changed, it will return as much `offset` as it has been modified.
35
+ * - An array containing change offsets is returned in the order of the `nodePathArray` array.
36
+ * @param {Node} element Element
37
+ * @param {?number[][]} [nodePathArray] Array of `NodePath` object ([dom-query-GetNodePath(), ..])
38
+ * @param {?boolean} [onlyText] If `true`, non-text nodes like `span`, `strong`.. are ignored.
39
+ * @returns {Array<number>} [offset, ..]
40
+ * @example
41
+ * // Merge adjacent tags with same attributes
42
+ * const container = editor.selection.getNode().closest('div');
43
+ * editor.nodeTransform.mergeSameTags(container, null, false);
44
+ *
45
+ * // Merge with path tracking
46
+ * const startPath = [0, 1, 2];
47
+ * const endPath = [0, 2, 1];
48
+ * const offsets = editor.nodeTransform.mergeSameTags(element, [startPath, endPath], false);
49
+ *
50
+ * // Merge only text nodes
51
+ * editor.nodeTransform.mergeSameTags(paragraph, null, true);
52
+ */
53
+ mergeSameTags(element: Node, nodePathArray?: number[][] | null, onlyText?: boolean | null): Array<number>;
54
+ /**
55
+ * @description Remove nested tags without other child nodes.
56
+ * @param {Node} element Element object
57
+ * @param {?(((current: Node) => boolean)|string)} [validation] Validation function / String(`tag1|tag2..`) / If `null`, all tags are applicable.
58
+ */
59
+ mergeNestedTags(element: Node, validation?: (((current: Node) => boolean) | string) | null): void;
60
+ /**
61
+ * @description Delete itself and all parent nodes that match the condition.
62
+ * - Returns an {sc: previousSibling, ec: nextSibling}(the deleted node reference) or `null`.
63
+ * @param {Node} item Node to be remove
64
+ * @param {?(current: Node) => boolean} [validation] Validation function. default(Deleted if it only have `breakLine` and blanks)
65
+ * @param {?Node} [stopParent] Stop when the parent node reaches `stopParent`
66
+ * @returns {{sc: Node|null, ec: Node|null}|null} {sc: previousSibling, ec: nextSibling} (the deleted node reference) or `null`.
67
+ * @example
68
+ * // Remove empty parent elements recursively
69
+ * const emptySpan = document.querySelector('span:empty');
70
+ * const result = editor.nodeTransform.removeAllParents(emptySpan, null, null);
71
+ *
72
+ * // Remove with custom validation
73
+ * editor.nodeTransform.removeAllParents(node, (current) => {
74
+ * return current.textContent.trim().length === 0;
75
+ * }, null);
76
+ *
77
+ * // Remove up to specific parent
78
+ * const stopAt = editor.selection.getNode().closest('.container');
79
+ * editor.nodeTransform.removeAllParents(childNode, null, stopAt);
80
+ */
81
+ removeAllParents(
82
+ item: Node,
83
+ validation?: ((current: Node) => boolean) | null,
84
+ stopParent?: Node | null,
85
+ ): {
86
+ sc: Node | null;
87
+ ec: Node | null;
88
+ } | null;
89
+ /**
90
+ * @description Delete a empty child node of argument element
91
+ * @param {Node} element Element node
92
+ * @param {?Node} notRemoveNode Do not remove node
93
+ * @param {boolean} forceDelete When all child nodes are deleted, the parent node is also deleted.
94
+ */
95
+ removeEmptyNode(element: Node, notRemoveNode: Node | null, forceDelete: boolean): void;
96
+ /**
97
+ * @description Creates a nested node structure from the given array of nodes.
98
+ * @param {SunEditor.NodeCollection} nodeArray An array of nodes to clone. The first node in the array will be the top-level parent.
99
+ * @param {?(current: Node) => boolean} [validate] A validate function.
100
+ * @returns {{ parent: Node, inner: Node }} An object containing the top-level parent node and the innermost child node.
101
+ */
102
+ createNestedNode(
103
+ nodeArray: SunEditor.NodeCollection,
104
+ validate?: ((current: Node) => boolean) | null,
105
+ ): {
106
+ parent: Node;
107
+ inner: Node;
108
+ };
109
+ #private;
110
+ }