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,601 @@
1
+ import { dom } from '../../../helper';
2
+
3
+ /**
4
+ * @description Classes related to editor formats such as `list` (ol, ul, li)
5
+ * - `list` is a special `line`, `block` format.
6
+ */
7
+ class ListFormat {
8
+ #$;
9
+ #store;
10
+
11
+ /**
12
+ * @constructor
13
+ * @param {SunEditor.Kernel} kernel
14
+ */
15
+ constructor(kernel) {
16
+ this.#$ = kernel.$;
17
+ this.#store = kernel.store;
18
+ }
19
+
20
+ /**
21
+ * @description Append all selected `line` element to the list and insert.
22
+ * @param {string} type List type. (ol | ul):[listStyleType]
23
+ * @param {Array<Node>} selectedCells `line` elements or list cells.
24
+ * @param {boolean} nested If `true`, indenting existing list cells.
25
+ * @example
26
+ * // Create ordered list from selected lines
27
+ * const lines = editor.format.getLines();
28
+ * editor.listFormat.apply('ol', lines, false);
29
+ *
30
+ * // Create unordered list with custom style
31
+ * editor.listFormat.apply('ul:circle', selectedElements, false);
32
+ *
33
+ * // Indent existing list items
34
+ * const listItems = [li1, li2, li3];
35
+ * editor.listFormat.apply('ul', listItems, true);
36
+ */
37
+ apply(type, selectedCells, nested) {
38
+ const listTag = (type.split(':')[0] || 'ol').toUpperCase();
39
+ const listStyle = type.split(':')[1] || '';
40
+
41
+ let range = this.#$.selection.getRange();
42
+ let selectedFormats = /** @type {Array<HTMLElement>} */ (!selectedCells ? this.#$.format.getLinesAndComponents(false) : selectedCells);
43
+
44
+ if (selectedFormats.length === 0) {
45
+ if (selectedCells) return;
46
+ range = this.#$.selection.getRangeAndAddLine(range, null);
47
+ selectedFormats = this.#$.format.getLinesAndComponents(false);
48
+ if (selectedFormats.length === 0) return;
49
+ }
50
+
51
+ dom.query.sortNodeByDepth(selectedFormats, true);
52
+
53
+ // merge
54
+ const firstSel = selectedFormats[0];
55
+ const lastSel = selectedFormats.at(-1);
56
+ let topEl = (dom.check.isListCell(firstSel) || this.#$.component.is(firstSel)) && !firstSel.previousElementSibling ? firstSel.parentElement.previousElementSibling : firstSel.previousElementSibling;
57
+ let bottomEl = (dom.check.isListCell(lastSel) || this.#$.component.is(lastSel)) && !lastSel.nextElementSibling ? lastSel.parentElement.nextElementSibling : lastSel.nextElementSibling;
58
+
59
+ const isCollapsed = range.collapsed;
60
+ const originRange = {
61
+ sc: range.startContainer,
62
+ so: range.startContainer === range.endContainer && dom.check.isZeroWidth(range.startContainer) && range.startOffset === 0 && range.endOffset === 1 ? range.endOffset : range.startOffset,
63
+ ec: range.endContainer,
64
+ eo: range.endOffset,
65
+ };
66
+ let afterRange = null;
67
+ let isRemove = true;
68
+
69
+ for (let i = 0, len = selectedFormats.length; i < len; i++) {
70
+ if (!dom.check.isList(this.#$.format.getBlock(selectedFormats[i], (current) => this.#$.format.getBlock(current) && current !== selectedFormats[i]))) {
71
+ isRemove = false;
72
+ break;
73
+ }
74
+ }
75
+
76
+ if (isRemove && (!topEl || firstSel.tagName !== topEl.tagName || listTag !== topEl.tagName.toUpperCase()) && (!bottomEl || lastSel.tagName !== bottomEl.tagName || listTag !== bottomEl.tagName.toUpperCase())) {
77
+ if (nested) {
78
+ for (let i = 0, len = selectedFormats.length; i < len; i++) {
79
+ for (let j = i - 1; j >= 0; j--) {
80
+ if (selectedFormats[j].contains(selectedFormats[i])) {
81
+ selectedFormats.splice(i, 1);
82
+ i--;
83
+ len--;
84
+ break;
85
+ }
86
+ }
87
+ }
88
+ }
89
+
90
+ const currentFormat = this.#$.format.getBlock(firstSel);
91
+ const cancel = currentFormat?.tagName === listTag;
92
+ let rangeArr, tempList;
93
+ const passComponent = (current) => {
94
+ return !dom.check.isComponentContainer(current);
95
+ };
96
+
97
+ if (!cancel) {
98
+ tempList = dom.utils.createElement(listTag, { style: 'list-style-type: ' + listStyle });
99
+ }
100
+
101
+ for (let i = 0, len = selectedFormats.length, r, o; i < len; i++) {
102
+ o = this.#$.format.getBlock(selectedFormats[i], passComponent);
103
+ if (!o || !dom.check.isList(o)) continue;
104
+
105
+ if (!r) {
106
+ r = o;
107
+ rangeArr = {
108
+ r: r,
109
+ f: [dom.query.getParentElement(selectedFormats[i], 'LI')],
110
+ };
111
+ } else {
112
+ if (r !== o) {
113
+ if (nested && dom.check.isListCell(o.parentNode)) {
114
+ this.#detachNested(rangeArr.f);
115
+ } else {
116
+ afterRange = this.#$.format.removeBlock(rangeArr.f[0].parentElement, { selectedFormats: rangeArr.f, newBlockElement: tempList, shouldDelete: false, skipHistory: true });
117
+ }
118
+
119
+ o = selectedFormats[i].parentNode;
120
+ if (!cancel) {
121
+ tempList = dom.utils.createElement(listTag, { style: 'list-style-type: ' + listStyle });
122
+ }
123
+
124
+ r = o;
125
+ rangeArr = {
126
+ r: r,
127
+ f: [dom.query.getParentElement(selectedFormats[i], 'LI')],
128
+ };
129
+ } else {
130
+ rangeArr.f.push(dom.query.getParentElement(selectedFormats[i], 'LI'));
131
+ }
132
+ }
133
+
134
+ if (i === len - 1) {
135
+ if (nested && dom.check.isListCell(o.parentNode)) {
136
+ this.#detachNested(rangeArr.f);
137
+ } else {
138
+ afterRange = this.#$.format.removeBlock(rangeArr.f[0].parentElement, { selectedFormats: rangeArr.f, newBlockElement: tempList, shouldDelete: false, skipHistory: true });
139
+ }
140
+ }
141
+ }
142
+ } else {
143
+ const topElParent = topEl ? topEl.parentNode : topEl;
144
+ const bottomElParent = bottomEl ? bottomEl.parentNode : bottomEl;
145
+ topEl = /** @type {HTMLElement} */ (topElParent && !dom.check.isWysiwygFrame(topElParent) && topElParent.nodeName === listTag ? topElParent : topEl);
146
+ bottomEl = /** @type {HTMLElement} */ (bottomElParent && !dom.check.isWysiwygFrame(bottomElParent) && bottomElParent.nodeName === listTag ? bottomElParent : bottomEl);
147
+
148
+ const mergeTop = topEl?.tagName === listTag;
149
+ const mergeBottom = bottomEl?.tagName === listTag;
150
+
151
+ let list = mergeTop ? topEl : dom.utils.createElement(listTag, { style: 'list-style-type: ' + listStyle });
152
+ let firstList = null;
153
+ let topNumber = null;
154
+ // let lastList = null;
155
+ // let bottomNumber = null;
156
+
157
+ const passComponent = (current) => {
158
+ return !dom.check.isComponentContainer(current) && !dom.check.isList(current);
159
+ };
160
+
161
+ for (let i = 0, len = selectedFormats.length, newCell, fTag, isCell, next, originParent, nextParent, parentTag, siblingTag, rangeTag; i < len; i++) {
162
+ fTag = selectedFormats[i];
163
+ if (fTag.childNodes.length === 0 && !this.#$.inline._isIgnoreNodeChange(fTag)) {
164
+ dom.utils.removeItem(fTag);
165
+ continue;
166
+ }
167
+ next = selectedFormats[i + 1];
168
+ originParent = fTag.parentNode;
169
+ nextParent = next ? next.parentNode : null;
170
+ isCell = dom.check.isListCell(fTag);
171
+ rangeTag = this.#$.format.isBlock(originParent) ? originParent : null;
172
+ parentTag = isCell && !dom.check.isWysiwygFrame(originParent) ? originParent.parentNode : originParent;
173
+ siblingTag = isCell && !dom.check.isWysiwygFrame(originParent) ? (!next || dom.check.isListCell(parentTag) ? originParent : originParent.nextSibling) : fTag.nextSibling;
174
+
175
+ newCell = dom.utils.createElement('LI');
176
+
177
+ if (this.#$.component.is(fTag)) {
178
+ const isHR = /^HR$/i.test(fTag.nodeName);
179
+ if (!isHR) newCell.innerHTML = '<br>';
180
+ newCell.innerHTML += fTag.outerHTML;
181
+ if (isHR) newCell.innerHTML += '<br>';
182
+ } else {
183
+ dom.utils.copyFormatAttributes(newCell, fTag);
184
+ const fChildren = fTag.childNodes;
185
+ while (fChildren[0]) {
186
+ newCell.appendChild(fChildren[0]);
187
+ }
188
+ }
189
+ list.appendChild(newCell);
190
+
191
+ // if (!next) lastList = list;
192
+ if (!next || parentTag !== nextParent || this.#$.format.isBlock(siblingTag)) {
193
+ firstList ||= list;
194
+ if ((!mergeTop || !next || parentTag !== nextParent) && !(next && dom.check.isList(nextParent) && nextParent === originParent)) {
195
+ if (list.parentNode !== parentTag) parentTag.insertBefore(list, siblingTag);
196
+ }
197
+ }
198
+
199
+ dom.utils.removeItem(fTag);
200
+ if (mergeTop && topNumber === null) topNumber = list.children.length - 1;
201
+ if (
202
+ next &&
203
+ (this.#$.format.getBlock(nextParent, passComponent) !== this.#$.format.getBlock(originParent, passComponent) ||
204
+ (dom.check.isList(nextParent) && dom.check.isList(originParent) && dom.query.getNodeDepth(nextParent) !== dom.query.getNodeDepth(originParent)))
205
+ ) {
206
+ list = dom.utils.createElement(listTag, { style: 'list-style-type: ' + listStyle });
207
+ }
208
+
209
+ if (rangeTag?.children.length === 0) dom.utils.removeItem(rangeTag);
210
+ }
211
+
212
+ if (topNumber) {
213
+ firstList = firstList.children[topNumber];
214
+ }
215
+
216
+ if (mergeBottom) {
217
+ // bottomNumber = list.children.length - 1;
218
+ list.innerHTML += bottomEl.innerHTML;
219
+ // lastList = list.children[bottomNumber] || lastList;
220
+ dom.utils.removeItem(bottomEl);
221
+ }
222
+ }
223
+
224
+ this.#store.set('_lastSelectionNode', null);
225
+ return !isRemove || !isCollapsed ? originRange : afterRange || originRange;
226
+ }
227
+
228
+ /**
229
+ * @description `selectedCells` array are detached from the list element.
230
+ * - The return value is applied when the first and last lines of `selectedFormats` are `LI` respectively.
231
+ * @param {Array<Node>} selectedCells Array of [`line`, `li`] elements(LI, P...) to remove.
232
+ * @param {boolean} shouldDelete If `true`, It does not just remove the list, it deletes the content.
233
+ * @returns {{sc: Node, ec: Node}} Node information after deletion
234
+ * - sc: Start container node
235
+ * - ec: End container node
236
+ */
237
+ remove(selectedCells, shouldDelete) {
238
+ let rangeArr = {};
239
+ let listFirst = false;
240
+ let listLast = false;
241
+ let first = null;
242
+ let last = null;
243
+ const passComponent = (current) => {
244
+ return !dom.check.isComponentContainer(current);
245
+ };
246
+
247
+ for (let i = 0, len = selectedCells.length, r, o, lastIndex, isList; i < len; i++) {
248
+ lastIndex = i === len - 1;
249
+ o = this.#$.format.getBlock(selectedCells[i], passComponent);
250
+ isList = dom.check.isList(o);
251
+ if (!r && isList) {
252
+ r = o;
253
+ rangeArr = {
254
+ r: r,
255
+ f: [dom.query.getParentElement(selectedCells[i], 'LI')],
256
+ };
257
+ if (i === 0) listFirst = true;
258
+ } else if (r && isList) {
259
+ if (r !== o) {
260
+ const edge = this.#$.format.removeBlock(rangeArr.f[0].parentNode, { selectedFormats: rangeArr.f, newBlockElement: null, shouldDelete, skipHistory: true });
261
+ o = selectedCells[i].parentNode;
262
+ if (listFirst) {
263
+ first = edge.sc;
264
+ listFirst = false;
265
+ }
266
+ if (lastIndex) last = edge.ec;
267
+
268
+ if (isList) {
269
+ r = o;
270
+ rangeArr = {
271
+ r: r,
272
+ f: [dom.query.getParentElement(selectedCells[i], 'LI')],
273
+ };
274
+ if (lastIndex) listLast = true;
275
+ } else {
276
+ r = null;
277
+ }
278
+ } else {
279
+ rangeArr.f.push(dom.query.getParentElement(selectedCells[i], 'LI'));
280
+ if (lastIndex) listLast = true;
281
+ }
282
+ }
283
+
284
+ if (lastIndex && dom.check.isList(r)) {
285
+ const edge = this.#$.format.removeBlock(rangeArr.f[0].parentNode, { selectedFormats: rangeArr.f, newBlockElement: null, shouldDelete, skipHistory: true });
286
+ if (listLast || len === 1) last = edge.ec;
287
+ if (listFirst) first = edge.sc || last;
288
+ }
289
+ }
290
+
291
+ return {
292
+ sc: first,
293
+ ec: last,
294
+ };
295
+ }
296
+
297
+ /**
298
+ * @description Nest list cells or cancel nested cells.
299
+ * @param {Array<HTMLElement>} selectedCells List cells.
300
+ * @param {boolean} nested Nested or cancel nested.
301
+ * @example
302
+ * // Indent list items (increase nesting)
303
+ * const selectedItems = [liElement1, liElement2];
304
+ * editor.listFormat.applyNested(selectedItems, true);
305
+ *
306
+ * // Outdent list items (decrease nesting)
307
+ * editor.listFormat.applyNested(selectedItems, false);
308
+ *
309
+ * // Get current list cells and nest them
310
+ * const cells = editor.format.getLines().filter(el => el.tagName === 'LI');
311
+ * editor.listFormat.applyNested(cells, true);
312
+ */
313
+ applyNested(selectedCells, nested) {
314
+ selectedCells = !selectedCells
315
+ ? this.#$.format.getLines().filter(function (el) {
316
+ return dom.check.isListCell(el);
317
+ })
318
+ : selectedCells;
319
+ const cellsLen = selectedCells.length;
320
+ if (cellsLen === 0 || (!nested && !dom.check.isListCell(selectedCells[0].previousElementSibling) && !dom.check.isListCell(selectedCells.at(-1).nextElementSibling))) {
321
+ return {
322
+ sc: selectedCells[0],
323
+ so: 0,
324
+ ec: selectedCells.at(-1),
325
+ eo: 1,
326
+ };
327
+ }
328
+
329
+ let originList = selectedCells[0].parentElement;
330
+ let lastCell = selectedCells.at(-1);
331
+ let range = null;
332
+
333
+ if (nested) {
334
+ if (originList !== lastCell.parentElement && dom.check.isList(lastCell.parentElement?.parentElement) && lastCell.nextElementSibling) {
335
+ lastCell = /** @type {HTMLElement} */ (lastCell.nextElementSibling);
336
+ while (lastCell) {
337
+ selectedCells.push(lastCell);
338
+ lastCell = /** @type {HTMLElement} */ (lastCell.nextElementSibling);
339
+ }
340
+ }
341
+ range = this.apply(originList.nodeName + ':' + originList.style.listStyleType, selectedCells, true);
342
+ } else {
343
+ let innerList = dom.utils.createElement(originList.nodeName);
344
+ let prev = selectedCells[0].previousElementSibling;
345
+ let next = lastCell.nextElementSibling;
346
+ const nodePath = {
347
+ s: null,
348
+ e: null,
349
+ sl: originList,
350
+ el: originList,
351
+ };
352
+
353
+ const { startContainer, startOffset, endContainer, endOffset } = this.#$.selection.getRange();
354
+ for (let i = 0, len = cellsLen, c; i < len; i++) {
355
+ c = selectedCells[i];
356
+ if (c.parentElement !== originList) {
357
+ this.#attachNested(originList, innerList, prev, next, nodePath);
358
+ originList = c.parentElement;
359
+ innerList = dom.utils.createElement(originList.nodeName);
360
+ }
361
+
362
+ prev = c.previousElementSibling;
363
+ next = c.nextElementSibling;
364
+ innerList.appendChild(c);
365
+ }
366
+
367
+ this.#attachNested(originList, innerList, prev, next, nodePath);
368
+
369
+ if (cellsLen > 1) {
370
+ const sc = dom.query.getNodeFromPath(nodePath.s, nodePath.sl);
371
+ const ec = dom.query.getNodeFromPath(nodePath.e, nodePath.el);
372
+ range = {
373
+ sc: sc,
374
+ so: 0,
375
+ ec: ec,
376
+ eo: ec.textContent.length,
377
+ };
378
+ } else {
379
+ range = {
380
+ sc: startContainer,
381
+ so: startOffset,
382
+ ec: endContainer,
383
+ eo: endOffset,
384
+ };
385
+ }
386
+ }
387
+
388
+ return range;
389
+ }
390
+
391
+ /**
392
+ * @description Detach Nested all nested lists under the `baseNode`.
393
+ * - Returns a list with nested removed.
394
+ * @param {HTMLElement} baseNode Element on which to base.
395
+ * @param {boolean} all If `true`, it also detach all nested lists of a returned list.
396
+ * @returns {Node} Result element
397
+ * @example
398
+ * // Remove first level of nesting
399
+ * const listItem = document.querySelector('li');
400
+ * editor.listFormat.removeNested(listItem, false);
401
+ *
402
+ * // Flatten all nested lists completely
403
+ * editor.listFormat.removeNested(listItem, true);
404
+ *
405
+ * // Remove nesting and get result
406
+ * const result = editor.listFormat.removeNested(nestedLi, false);
407
+ * console.log(result); // parent list element
408
+ */
409
+ removeNested(baseNode, all) {
410
+ const rNode = DeleteNestedList(baseNode);
411
+ let rangeElement, cNodes;
412
+
413
+ if (rNode) {
414
+ rangeElement = rNode.cloneNode(false);
415
+ cNodes = rNode.childNodes;
416
+ const index = dom.query.getPositionIndex(baseNode);
417
+ while (cNodes[index]) {
418
+ rangeElement.appendChild(cNodes[index]);
419
+ }
420
+ } else {
421
+ rangeElement = baseNode;
422
+ }
423
+
424
+ let rChildren;
425
+ if (!all) {
426
+ const depth = dom.query.getNodeDepth(baseNode) + 2;
427
+ rChildren = dom.query.getListChildren(
428
+ baseNode,
429
+ (current) => {
430
+ return dom.check.isListCell(current) && !current.previousElementSibling && dom.query.getNodeDepth(current) === depth;
431
+ },
432
+ null,
433
+ );
434
+ } else {
435
+ rChildren = dom.query.getListChildren(
436
+ rangeElement,
437
+ (current) => {
438
+ return dom.check.isListCell(current) && !current.previousElementSibling;
439
+ },
440
+ null,
441
+ );
442
+ }
443
+
444
+ for (let i = 0, len = rChildren.length; i < len; i++) {
445
+ DeleteNestedList(rChildren[i]);
446
+ }
447
+
448
+ if (rNode) {
449
+ rNode.parentNode.insertBefore(rangeElement, rNode.nextSibling);
450
+ if (cNodes?.length === 0) dom.utils.removeItem(rNode);
451
+ }
452
+
453
+ return rangeElement === baseNode ? rangeElement.parentNode : rangeElement;
454
+ }
455
+
456
+ /**
457
+ * @description Attaches a nested list structure by merging adjacent lists if applicable.
458
+ * - Ensures that the nested list is placed correctly in the document structure.
459
+ * @param {Element} originList The original list element where the nested list is inserted.
460
+ * @param {Element} innerList The nested list element.
461
+ * @param {Element} prev The previous sibling element.
462
+ * @param {Element} next The next sibling element.
463
+ * @param {{s: Array<number> | null, e: Array<number> | null, sl: Node | null, el: Node | null}} nodePath Object storing the start and end node paths.
464
+ * - s : Start node path.
465
+ * - e : End node path.
466
+ * - sl : Start node's parent element.
467
+ * - el : End node's parent element.
468
+ * @returns {Node} The attached inner list.
469
+ */
470
+ #attachNested(originList, innerList, prev, next, nodePath) {
471
+ let insertPrev = false;
472
+
473
+ if (innerList.tagName === prev?.tagName) {
474
+ const children = innerList.children;
475
+ while (children[0]) {
476
+ prev.appendChild(children[0]);
477
+ }
478
+
479
+ innerList = prev;
480
+ insertPrev = true;
481
+ }
482
+
483
+ if (innerList.tagName === next?.tagName) {
484
+ const children = next.children;
485
+ while (children[0]) {
486
+ innerList.appendChild(children[0]);
487
+ }
488
+
489
+ const temp = next.nextElementSibling;
490
+ next.parentNode.removeChild(next);
491
+ next = temp;
492
+ }
493
+
494
+ if (!insertPrev) {
495
+ if (dom.check.isListCell(prev)) {
496
+ originList = prev;
497
+ next = null;
498
+ }
499
+
500
+ originList.insertBefore(innerList, next);
501
+
502
+ if (!nodePath.s) {
503
+ nodePath.s = dom.query.getNodePath(innerList.firstElementChild.firstChild, originList, null);
504
+ nodePath.sl = originList;
505
+ }
506
+
507
+ const slPath = originList.contains(nodePath.sl) ? dom.query.getNodePath(nodePath.sl, originList) : null;
508
+ nodePath.e = dom.query.getNodePath(innerList.lastElementChild.firstChild, originList, null);
509
+ nodePath.el = originList;
510
+
511
+ this.#$.nodeTransform.mergeSameTags(originList, [nodePath.s, nodePath.e, slPath], false);
512
+ this.#$.nodeTransform.mergeNestedTags(originList);
513
+ if (slPath) nodePath.sl = dom.query.getNodeFromPath(slPath, originList);
514
+ }
515
+
516
+ return innerList;
517
+ }
518
+
519
+ /**
520
+ * @description Detaches a nested list structure by extracting list items from their parent list.
521
+ * - Ensures proper restructuring of the list elements.
522
+ * @param {Array<HTMLElement>} cells The list items to be detached.
523
+ * @returns {{cc: Node, sc: Node, ec: Node}} An object containing reference nodes for repositioning.
524
+ * - cc : The parent node of the first list item.
525
+ * - sc : The first list item.
526
+ * - ec : The last list item.
527
+ */
528
+ #detachNested(cells) {
529
+ const first = cells[0];
530
+ const last = cells.at(-1);
531
+ const next = last.nextElementSibling;
532
+ const originList = first.parentElement;
533
+ const sibling = originList.parentElement.nextElementSibling;
534
+ const parentNode = originList.parentElement.parentElement;
535
+
536
+ for (let c = 0, cLen = cells.length; c < cLen; c++) {
537
+ parentNode.insertBefore(cells[c], sibling);
538
+ }
539
+
540
+ if (next && originList.children.length > 0) {
541
+ const newList = originList.cloneNode(false);
542
+ const children = originList.childNodes;
543
+ const index = dom.query.getPositionIndex(next);
544
+ while (children[index]) {
545
+ newList.appendChild(children[index]);
546
+ }
547
+ last.appendChild(newList);
548
+ }
549
+
550
+ if (originList.children.length === 0) dom.utils.removeItem(originList);
551
+ this.#$.nodeTransform.mergeSameTags(parentNode);
552
+
553
+ const edge = dom.query.getEdgeChildNodes(first, last);
554
+
555
+ return {
556
+ cc: first.parentNode,
557
+ sc: edge.sc,
558
+ ec: edge.ec,
559
+ };
560
+ }
561
+ }
562
+
563
+ /**
564
+ * @description Removes nested list structure by unwrapping child list elements and promoting their items to the parent level.
565
+ * @param {Node} baseNode Node
566
+ */
567
+ function DeleteNestedList(baseNode) {
568
+ const baseParent = baseNode.parentNode;
569
+ let parent = baseParent.parentNode;
570
+ let siblingNode = /** @type {*} */ (baseParent);
571
+ let liSibling, liParent, child, index, c;
572
+
573
+ while (dom.check.isListCell(parent)) {
574
+ index = dom.query.getPositionIndex(baseNode);
575
+ liSibling = parent.nextElementSibling;
576
+ liParent = parent.parentNode;
577
+ child = siblingNode;
578
+
579
+ while (child) {
580
+ siblingNode = siblingNode.nextSibling;
581
+ if (dom.check.isList(child)) {
582
+ c = child.childNodes;
583
+ while (c[index]) {
584
+ liParent.insertBefore(c[index], liSibling);
585
+ }
586
+ if (c.length === 0) dom.utils.removeItem(child);
587
+ } else {
588
+ liParent.appendChild(child);
589
+ }
590
+ child = siblingNode;
591
+ }
592
+
593
+ parent = liParent.parentNode;
594
+ }
595
+
596
+ if (baseParent.children.length === 0) dom.utils.removeItem(baseParent);
597
+
598
+ return liParent;
599
+ }
600
+
601
+ export default ListFormat;