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,208 @@
1
+ import { dom } from '../../../helper';
2
+ import { cleanRemovedTags, hardDelete, isUneditableNode, setDefaultLine } from '../effects/ruleHelpers';
3
+ import { A } from '../actions';
4
+
5
+ /**
6
+ * @typedef {import('../actions').Action[]} EventActions
7
+ * @typedef {import('../ports').EventReducerPorts} EventPorts
8
+ * @typedef {import('../reducers/keydown.reducer').KeydownReducerCtx} EventKeydownCtx
9
+ */
10
+
11
+ /**
12
+ * @this {void}
13
+ * @description Backspace key down rule
14
+ * @param {EventActions} actions - Action list
15
+ * @param {EventPorts} ports - Ports for interacting with editor
16
+ * @param {EventKeydownCtx} ctx - Context object
17
+ * @returns {boolean} Return false to stop the processing
18
+ */
19
+ export function reduceBackspaceDown(actions, ports, ctx) {
20
+ const { format, component } = ports;
21
+ const { fc, options, range, selectionNode } = ctx;
22
+ let { formatEl } = ctx;
23
+
24
+ const selectRange = !range.collapsed || range.startContainer !== range.endContainer;
25
+
26
+ actions.push(A.componentDeselect());
27
+ actions.push(A.cacheStyleNode());
28
+
29
+ if (selectRange && hardDelete(ports)) {
30
+ actions.push(A.preventStop());
31
+ return true;
32
+ }
33
+
34
+ if (!format.isNormalLine(formatEl) && !format.isBrLine(formatEl) && !fc.get('wysiwyg').firstElementChild && !component.is(selectionNode) && setDefaultLine(ports, options.get('defaultLine')) !== null) {
35
+ actions.push(A.preventStop());
36
+ return false;
37
+ }
38
+
39
+ // line delete
40
+ if (
41
+ format.isLine(formatEl) &&
42
+ selectRange &&
43
+ dom.check.isEdgePoint(range.startContainer, range.startOffset, 'front') &&
44
+ (!range.startContainer.previousSibling || dom.check.isZeroWidth(range.startContainer.previousSibling)) &&
45
+ format.getLine(range.startContainer) !== format.getLine(range.endContainer) &&
46
+ (format.isLine(formatEl.previousElementSibling) || dom.check.isListCell(formatEl))
47
+ ) {
48
+ actions.push(A.preventStop());
49
+ actions.push(A.delFormatRemoveAndMove(range.startContainer, formatEl));
50
+ actions.push(A.historyPush(true));
51
+ return false;
52
+ }
53
+
54
+ // closure, default
55
+ if (
56
+ !selectRange &&
57
+ !formatEl.previousElementSibling &&
58
+ range.startOffset === 0 &&
59
+ !selectionNode.previousSibling &&
60
+ !dom.check.isListCell(formatEl) &&
61
+ format.isLine(formatEl) &&
62
+ (!format.isBrLine(formatEl) || format.isClosureBrLine(formatEl))
63
+ ) {
64
+ // closure range
65
+ if (format.isClosureBlock(formatEl.parentNode)) {
66
+ actions.push(A.preventStop());
67
+ return false;
68
+ }
69
+
70
+ // maintain default format
71
+ if (dom.check.isWysiwygFrame(formatEl.parentNode) && formatEl.childNodes.length <= 1 && (!formatEl.firstChild || dom.check.isZeroWidth(formatEl.textContent))) {
72
+ actions.push(A.preventStop());
73
+ actions.push(A.backspaceFormatMaintain(formatEl));
74
+ }
75
+
76
+ actions.push(A.editorNativeFocus());
77
+ return false;
78
+ }
79
+
80
+ // clean remove tag
81
+ const startCon = range.startContainer;
82
+ if (formatEl && !formatEl.previousElementSibling && range.startOffset === 0 && startCon.nodeType === 3 && dom.check.isZeroWidth(startCon)) {
83
+ if (cleanRemovedTags(ports, startCon, formatEl) === true) return true;
84
+ }
85
+
86
+ // line component
87
+ if (!selectRange && formatEl && (range.startOffset === 0 || selectionNode === formatEl)) {
88
+ const sel =
89
+ selectionNode === formatEl
90
+ ? isUneditableNode(ports, range, true)
91
+ : dom.check.isElement(selectionNode.previousSibling)
92
+ ? selectionNode.previousSibling
93
+ : dom.check.isEdgePoint(range.startContainer, range.startOffset)
94
+ ? dom.query.getPreviousDeepestNode(range.startContainer)
95
+ : null;
96
+ if (component.is(sel)) {
97
+ const fileComponentInfo = component.get(sel);
98
+ if (fileComponentInfo) {
99
+ actions.push(A.preventStop());
100
+ actions.push(A.backspaceComponentSelect(selectionNode, range, fileComponentInfo));
101
+ return true;
102
+ }
103
+ }
104
+ }
105
+
106
+ // tag[contenteditable='false']
107
+ if (isUneditableNode(ports, range, true)) {
108
+ actions.push(A.preventStop());
109
+ return true;
110
+ }
111
+
112
+ // format attributes
113
+ if (!selectRange && format.isEdgeLine(range.startContainer, range.startOffset, 'front')) {
114
+ if (format.isLine(formatEl.previousElementSibling)) {
115
+ actions.push(A.cacheFormatAttrsTemp(formatEl.previousElementSibling.attributes));
116
+ }
117
+ }
118
+
119
+ // nested list
120
+ formatEl = format.getLine(range.startContainer, null);
121
+ const rangeEl = format.getBlock(formatEl, null);
122
+ const commonCon = range.commonAncestorContainer;
123
+ if (rangeEl && formatEl && !dom.check.isTableCell(rangeEl) && !/^FIGCAPTION$/i.test(rangeEl.nodeName)) {
124
+ if (
125
+ dom.check.isListCell(formatEl) &&
126
+ dom.check.isList(rangeEl) &&
127
+ (dom.check.isListCell(rangeEl.parentElement) || formatEl.previousElementSibling) &&
128
+ (selectionNode === formatEl || (selectionNode.nodeType === 3 && (!selectionNode.previousSibling || dom.check.isList(selectionNode.previousSibling)))) &&
129
+ (format.getLine(range.startContainer, null) !== format.getLine(range.endContainer, null) ? rangeEl.contains(range.startContainer) : range.startOffset === 0 && range.collapsed)
130
+ ) {
131
+ if (range.startContainer !== range.endContainer) {
132
+ actions.push(A.prevent());
133
+ actions.push(A.backspaceListRemoveNested(range));
134
+ actions.push(A.historyPush(true));
135
+ } else {
136
+ let prev = formatEl.previousElementSibling || rangeEl.parentElement;
137
+ if (dom.check.isListCell(prev)) {
138
+ actions.push(A.prevent());
139
+
140
+ let prevLast = prev;
141
+ if (!prev.contains(formatEl) && dom.check.isListCell(prevLast) && dom.check.isList(prevLast.lastElementChild)) {
142
+ prevLast = /** @type {HTMLLIElement} */ (prevLast.lastElementChild.lastElementChild);
143
+ while (dom.check.isListCell(prevLast) && dom.check.isList(prevLast.lastElementChild)) {
144
+ prevLast = /** @type {HTMLLIElement} */ (prevLast.lastElementChild && prevLast.lastElementChild.lastElementChild);
145
+ }
146
+ prev = prevLast;
147
+ }
148
+
149
+ actions.push(A.backspaceListMergePrev(prev, formatEl, rangeEl));
150
+ actions.push(A.historyPush(true));
151
+ }
152
+ }
153
+
154
+ return true;
155
+ }
156
+
157
+ // detach range
158
+ if (!selectRange && range.startOffset === 0) {
159
+ let detach = true;
160
+ let comm = commonCon;
161
+ while (comm && comm !== rangeEl && !dom.check.isWysiwygFrame(comm)) {
162
+ if (comm.previousSibling) {
163
+ if (comm.previousSibling.nodeType === 1 || !dom.check.isZeroWidth(comm.previousSibling.textContent.trim())) {
164
+ detach = false;
165
+ break;
166
+ }
167
+ }
168
+ comm = comm.parentNode;
169
+ }
170
+
171
+ if (detach && rangeEl.parentNode) {
172
+ actions.push(A.prevent());
173
+ actions.push(A.formatRemoveBlock(rangeEl, dom.check.isListCell(formatEl) ? [formatEl] : null, null, false, false));
174
+ actions.push(A.historyPush(true));
175
+ return true;
176
+ }
177
+ }
178
+ }
179
+
180
+ // component
181
+ if (!selectRange && formatEl && (range.startOffset === 0 || (selectionNode === formatEl ? formatEl.childNodes[range.startOffset] : false))) {
182
+ const isList = dom.check.isListCell(formatEl);
183
+ const sel = selectionNode === formatEl ? formatEl.childNodes[range.startOffset] : selectionNode;
184
+ const prev = (isList ? sel : formatEl).previousSibling;
185
+ // select file component
186
+ const ignoreZWS = isList || ((commonCon.nodeType === 3 || dom.check.isBreak(commonCon)) && !commonCon.previousSibling && range.startOffset === 0);
187
+ if (sel && (isList || !sel.previousSibling) && ((commonCon && component.is(commonCon.previousSibling)) || (ignoreZWS && component.is(prev)))) {
188
+ const fileComponentInfo = component.get(prev);
189
+ if (fileComponentInfo) {
190
+ actions.push(A.preventStop());
191
+ actions.push(A.backspaceComponentRemove(isList, sel, formatEl, fileComponentInfo));
192
+ } else if (component.is(prev)) {
193
+ actions.push(A.preventStop());
194
+ actions.push(A.domUtilsRemoveItem(prev));
195
+ }
196
+ return true;
197
+ }
198
+
199
+ // delete nonEditable
200
+ if (sel && dom.check.isNonEditable(sel.previousSibling)) {
201
+ actions.push(A.preventStop());
202
+ actions.push(A.domUtilsRemoveItem(sel.previousSibling));
203
+ return true;
204
+ }
205
+ }
206
+
207
+ return true;
208
+ }
@@ -0,0 +1,132 @@
1
+ import { dom } from '../../../helper';
2
+ import { hardDelete, isUneditableNode } from '../effects/ruleHelpers';
3
+ import { A } from '../actions';
4
+
5
+ /**
6
+ * @typedef {import('../actions').Action[]} EventActions
7
+ * @typedef {import('../ports').EventReducerPorts} EventPorts
8
+ * @typedef {import('../reducers/keydown.reducer').KeydownReducerCtx} EventKeydownCtx
9
+ */
10
+
11
+ /**
12
+ * @this {void}
13
+ * @description Delete key down rule
14
+ * @param {EventActions} actions - Action list
15
+ * @param {EventPorts} ports - Ports for interacting with editor
16
+ * @param {EventKeydownCtx} ctx - Context object
17
+ * @returns {boolean} Return false to stop the processing
18
+ */
19
+ export function reduceDeleteDown(actions, ports, ctx) {
20
+ const { format, component } = ports;
21
+ const { range, selectionNode } = ctx;
22
+ let { formatEl } = ctx;
23
+
24
+ const selectRange = !range.collapsed || range.startContainer !== range.endContainer;
25
+
26
+ actions.push(A.componentDeselect());
27
+ actions.push(A.cacheStyleNode());
28
+
29
+ if (selectRange && hardDelete(ports)) {
30
+ actions.push(A.preventStop());
31
+ return true;
32
+ }
33
+
34
+ if (!selectRange && format.isEdgeLine(range.endContainer, range.endOffset, 'end') && !formatEl.nextSibling) {
35
+ actions.push(A.preventStop());
36
+ return false;
37
+ }
38
+
39
+ // line delete
40
+ if (
41
+ format.isLine(formatEl) &&
42
+ selectRange &&
43
+ dom.check.isEdgePoint(range.endContainer, range.endOffset, 'end') &&
44
+ (!range.endContainer.nextSibling || dom.check.isZeroWidth(range.endContainer.nextSibling)) &&
45
+ format.getLine(range.startContainer) !== format.getLine(range.endContainer) &&
46
+ (format.isLine(formatEl.nextElementSibling) || dom.check.isListCell(formatEl))
47
+ ) {
48
+ actions.push(A.preventStop());
49
+ actions.push(A.delFormatRemoveAndMove(range.endContainer, formatEl));
50
+ actions.push(A.historyPush(true));
51
+ return false;
52
+ }
53
+
54
+ // line component
55
+ if (!selectRange && formatEl && (range.endOffset === range.endContainer.textContent.length || selectionNode === formatEl)) {
56
+ const sel =
57
+ selectionNode === formatEl
58
+ ? isUneditableNode(ports, range, false)
59
+ : dom.check.isElement(selectionNode.nextSibling)
60
+ ? selectionNode.nextSibling
61
+ : dom.check.isEdgePoint(range.endContainer, range.endOffset)
62
+ ? dom.query.getNextDeepestNode(range.endContainer, null)
63
+ : null;
64
+ if (component.is(sel)) {
65
+ const fileComponentInfo = component.get(sel);
66
+ if (fileComponentInfo) {
67
+ actions.push(A.preventStop());
68
+ actions.push(A.deleteComponentSelect(formatEl, fileComponentInfo));
69
+ return true;
70
+ }
71
+ }
72
+ }
73
+
74
+ // tag[contenteditable='false']
75
+ if (isUneditableNode(ports, range, false)) {
76
+ actions.push(A.preventStop());
77
+ return true;
78
+ }
79
+
80
+ // component
81
+ if (
82
+ (format.isLine(selectionNode) || selectionNode.nextSibling === null || (dom.check.isZeroWidth(selectionNode.nextSibling) && selectionNode.nextSibling.nextSibling === null)) &&
83
+ range.startOffset === selectionNode.textContent.length
84
+ ) {
85
+ const nextEl = formatEl.nextElementSibling;
86
+ if (!nextEl) return true;
87
+
88
+ if (component.is(nextEl)) {
89
+ actions.push(A.prevent());
90
+ actions.push(A.deleteComponentSelectNext(formatEl, nextEl));
91
+ return true;
92
+ }
93
+ }
94
+
95
+ if (!selectRange && (dom.check.isEdgePoint(range.endContainer, range.endOffset) || (selectionNode === formatEl ? formatEl.childNodes[range.startOffset] : false))) {
96
+ const sel = selectionNode === formatEl ? formatEl.childNodes[range.startOffset] || selectionNode : selectionNode;
97
+ // delete nonEditable
98
+ if (sel && dom.check.isNonEditable(sel.nextSibling)) {
99
+ actions.push(A.preventStop());
100
+ actions.push(A.domUtilsRemoveItem(sel.nextSibling));
101
+ return true;
102
+ } else if (component.is(sel)) {
103
+ actions.push(A.preventStop());
104
+ actions.push(A.domUtilsRemoveItem(sel));
105
+ return true;
106
+ }
107
+ }
108
+
109
+ // format attributes
110
+ if (!selectRange && format.isEdgeLine(range.endContainer, range.endOffset, 'end')) {
111
+ if (format.isLine(formatEl.nextElementSibling)) {
112
+ actions.push(A.cacheFormatAttrsTemp(formatEl.attributes));
113
+ }
114
+ }
115
+
116
+ // nested list
117
+ formatEl = format.getLine(range.startContainer, null);
118
+ const rangeEl = format.getBlock(formatEl, null);
119
+ if (
120
+ dom.check.isListCell(formatEl) &&
121
+ dom.check.isList(rangeEl) &&
122
+ (selectionNode === formatEl ||
123
+ (selectionNode.nodeType === 3 &&
124
+ (!selectionNode.nextSibling || dom.check.isList(selectionNode.nextSibling)) &&
125
+ (format.getLine(range.startContainer, null) !== format.getLine(range.endContainer, null) ? rangeEl.contains(range.endContainer) : range.endOffset === selectionNode.textContent.length && range.collapsed)))
126
+ ) {
127
+ actions.push(A.deleteListRemoveNested(range, formatEl, rangeEl));
128
+ return true;
129
+ }
130
+
131
+ return true;
132
+ }
@@ -0,0 +1,150 @@
1
+ import { dom } from '../../../helper';
2
+ import { A } from '../actions';
3
+
4
+ /**
5
+ * @typedef {import('../actions').Action[]} EventActions
6
+ * @typedef {import('../ports').EventReducerPorts} EventPorts
7
+ * @typedef {import('../reducers/keydown.reducer').KeydownReducerCtx} EventKeydownCtx
8
+ */
9
+
10
+ /**
11
+ * @this {void}
12
+ * @description Enter key down rule
13
+ * @param {EventActions} actions - Action list
14
+ * @param {EventPorts} ports - Ports for interacting with editor
15
+ * @param {EventKeydownCtx} ctx - Context object
16
+ * @returns {boolean} Return false to stop the processing
17
+ */
18
+ export function reduceEnterDown(actions, ports, ctx) {
19
+ const { format, char, selection } = ports;
20
+ const { frameOptions, range, formatEl, selectionNode, shift, e } = ctx;
21
+ const selectRange = !range.collapsed || range.startContainer !== range.endContainer;
22
+
23
+ actions.push(A.componentDeselect());
24
+
25
+ const brBlock = format.getBrLine(selectionNode, null);
26
+ const rangeEl = format.getBlock(formatEl, null);
27
+
28
+ if (frameOptions.get('charCounter_type') === 'byte-html') {
29
+ let enterHTML = '';
30
+ if ((!shift && brBlock) || shift) {
31
+ enterHTML = '<br>';
32
+ } else {
33
+ enterHTML = '<' + formatEl.nodeName + '><br></' + formatEl.nodeName + '>';
34
+ }
35
+
36
+ if (!char.check(enterHTML)) {
37
+ actions.push(A.prevent());
38
+ return false;
39
+ }
40
+ }
41
+
42
+ if (!shift) {
43
+ const formatEndEdge = !range.endContainer.nextSibling && format.isEdgeLine(range.endContainer, range.endOffset, 'end');
44
+ const formatStartEdge = !range.startContainer.previousSibling && format.isEdgeLine(range.startContainer, range.startOffset, 'front');
45
+
46
+ // add default format line
47
+ if (formatEndEdge && (/^H[1-6]$/i.test(formatEl.nodeName) || /^HR$/i.test(formatEl.nodeName))) {
48
+ ports.enterPrevent(e);
49
+ actions.push(A.enterLineAddDefault(formatEl));
50
+ actions.push(A.enterScrollTo(range));
51
+ return true;
52
+ } else if (rangeEl && formatEl && !dom.check.isTableCell(rangeEl) && !/^FIGCAPTION$/i.test(rangeEl.nodeName)) {
53
+ // add default List line
54
+ const rangeEnt = selection.getRange();
55
+ if (dom.check.isEdgePoint(rangeEnt.endContainer, rangeEnt.endOffset) && dom.check.isList(selectionNode.nextSibling)) {
56
+ ports.enterPrevent(e);
57
+ actions.push(A.enterListAddItem(formatEl, selectionNode));
58
+ actions.push(A.enterScrollTo(range));
59
+ return true;
60
+ }
61
+
62
+ if (
63
+ (rangeEnt.commonAncestorContainer.nodeType === 3 ? !(/** @type {HTMLElement} */ (rangeEnt.commonAncestorContainer).nextElementSibling) : true) &&
64
+ dom.check.isZeroWidth(formatEl.innerText.trim()) &&
65
+ !dom.check.isListCell(formatEl.nextElementSibling)
66
+ ) {
67
+ ports.enterPrevent(e);
68
+ actions.push(A.enterFormatExitEmpty(formatEl, rangeEl));
69
+ return true;
70
+ }
71
+ }
72
+
73
+ // br line | closure block exception
74
+ if (brBlock || (rangeEl === formatEl && format.isClosureBlock(rangeEl) && format.isLine(formatEl))) {
75
+ ports.enterPrevent(e);
76
+
77
+ const selectionFormat = selectionNode === brBlock;
78
+ const wSelection = selection.get();
79
+ const children = selectionNode.childNodes,
80
+ offset = wSelection.focusOffset,
81
+ prev = selectionNode.previousElementSibling,
82
+ next = selectionNode.nextSibling;
83
+
84
+ if (
85
+ !format.isClosureBrLine(brBlock) &&
86
+ children &&
87
+ ((selectionFormat &&
88
+ range.collapsed &&
89
+ children.length - 1 <= offset + 1 &&
90
+ dom.check.isBreak(children[offset]) &&
91
+ (!children[offset + 1] || ((!children[offset + 2] || dom.check.isZeroWidth(children[offset + 2].textContent)) && children[offset + 1].nodeType === 3 && dom.check.isZeroWidth(children[offset + 1].textContent))) &&
92
+ offset > 0 &&
93
+ dom.check.isBreak(children[offset - 1])) ||
94
+ (!selectionFormat &&
95
+ dom.check.isZeroWidth(selectionNode.textContent) &&
96
+ dom.check.isBreak(prev) &&
97
+ (dom.check.isBreak(prev.previousSibling) || !dom.check.isZeroWidth(prev.previousSibling?.textContent)) &&
98
+ (!next || (!dom.check.isBreak(next) && dom.check.isZeroWidth(next.textContent)))))
99
+ ) {
100
+ actions.push(A.enterFormatCleanBrAndZWS(selectionNode, selectionFormat, brBlock, children, offset));
101
+ actions.push(A.enterScrollTo(range));
102
+ return true;
103
+ }
104
+
105
+ if (selectionFormat) {
106
+ actions.push(A.enterFormatInsertBrHtml(brBlock, range, wSelection, offset));
107
+ } else {
108
+ actions.push(A.enterFormatInsertBrNode(wSelection));
109
+ }
110
+
111
+ actions.push(A.enterScrollTo(range));
112
+ return true;
113
+ }
114
+
115
+ // set format attrs - edge
116
+ if (range.collapsed && (formatStartEdge || formatEndEdge)) {
117
+ ports.enterPrevent(e);
118
+ actions.push(A.enterFormatBreakAtEdge(formatEl, selectionNode, formatStartEdge, formatEndEdge));
119
+ actions.push(A.enterScrollTo(range));
120
+ return true;
121
+ }
122
+
123
+ if (formatEl) {
124
+ actions.push(A.prevent());
125
+
126
+ /** @type {HTMLElement} */
127
+ if (selectRange) {
128
+ actions.push(A.enterFormatBreakWithSelection(formatEl, range, formatStartEdge, formatEndEdge));
129
+ } else {
130
+ actions.push(A.enterFormatBreakAtCursor(formatEl, range));
131
+ }
132
+
133
+ actions.push(A.enterScrollTo(range));
134
+ return true;
135
+ }
136
+ }
137
+
138
+ if (selectRange) {
139
+ actions.push(A.enterScrollTo(range));
140
+ return true;
141
+ }
142
+
143
+ if (rangeEl && dom.query.getParentElement(rangeEl, 'FIGCAPTION') && dom.query.getParentElement(rangeEl, dom.check.isList)) {
144
+ ports.enterPrevent(e);
145
+ actions.push(A.enterFigcaptionExitInList(formatEl));
146
+ actions.push(A.enterScrollTo(range));
147
+ }
148
+
149
+ return true;
150
+ }
@@ -0,0 +1,35 @@
1
+ import { dom } from '../../../helper';
2
+ import { A } from '../actions';
3
+
4
+ /**
5
+ * @typedef {import('../actions').Action[]} EventActions
6
+ * @typedef {import('../ports').EventReducerPorts} EventPorts
7
+ * @typedef {import('../reducers/keydown.reducer').KeydownReducerCtx} EventKeydownCtx
8
+ */
9
+
10
+ /**
11
+ * @this {void}
12
+ * @description Tab key down rule
13
+ * @param {EventActions} actions - Action list
14
+ * @param {EventPorts} _ports - Ports for interacting with editor
15
+ * @param {EventKeydownCtx} ctx - Context object
16
+ * @returns {boolean} Return false to stop the processing
17
+ */
18
+ export function reduceTabDown(actions, _ports, ctx) {
19
+ const { options, selectionNode, range, formatEl, ctrl, alt, shift } = ctx;
20
+
21
+ if (options.get('tabDisable')) {
22
+ return true;
23
+ }
24
+
25
+ actions.push(A.prevent());
26
+
27
+ if (ctrl || alt || dom.check.isWysiwygFrame(selectionNode)) {
28
+ return true;
29
+ }
30
+
31
+ actions.push(A.tabFormatIndent(range, formatEl, shift));
32
+ actions.push(A.historyPush(false));
33
+
34
+ return true;
35
+ }
@@ -0,0 +1,136 @@
1
+ import { dom, unicode } from '../../../helper';
2
+
3
+ /**
4
+ * @description Service responsible for `line` breaking and default `line` creation logic.
5
+ * - Handles the `Enter` key behavior (`P` vs `BR` vs `DIV`).
6
+ * - Manages the initial `line` creation when the editor is empty.
7
+ */
8
+ export default class DefaultLineManager {
9
+ #$;
10
+
11
+ /**
12
+ * @constructor
13
+ * @param {import('../eventOrchestrator').default} inst
14
+ */
15
+ constructor({ $ }) {
16
+ this.#$ = $;
17
+ }
18
+
19
+ /**
20
+ * @description Executes the default `line` creation logic.
21
+ * - If no `formatName` is provided, it uses the `defaultLine` option (usually `P`).
22
+ * - Handles creating a new `block` element when the user presses `Enter` or when initializing.
23
+ * @param {string} [formatName] The tag name to be used for the new `line` (e.g., `P`, `DIV`, `BR`).
24
+ * @returns {?void}
25
+ */
26
+ execute(formatName) {
27
+ if (!this.#$.options.get('__lineFormatFilter')) return null;
28
+ if (this.#$.pluginManager.fileInfo.pluginRegExp.test(this.#$.ui.currentControllerName)) return;
29
+
30
+ const range = this.#$.selection.getRange();
31
+ const commonCon = /** @type {HTMLElement} */ (range.commonAncestorContainer);
32
+ const startCon = range.startContainer;
33
+ const endOffset = range.endOffset;
34
+ const rangeEl = this.#$.format.getBlock(commonCon, null);
35
+
36
+ /** @type {Node} */
37
+ let focusNode;
38
+ let offset, format;
39
+
40
+ if (rangeEl) {
41
+ format = dom.utils.createElement(formatName || this.#$.options.get('defaultLine'));
42
+ format.innerHTML = rangeEl.innerHTML;
43
+ if (format.childNodes.length === 0) format.innerHTML = unicode.zeroWidthSpace;
44
+
45
+ rangeEl.innerHTML = format.outerHTML;
46
+ format = rangeEl.firstChild;
47
+ focusNode = format.childNodes[endOffset] || dom.query.getEdgeChildNodes(format, null).sc;
48
+
49
+ if (!focusNode) {
50
+ focusNode = dom.utils.createTextNode(unicode.zeroWidthSpace);
51
+ format.insertBefore(focusNode, format.firstChild);
52
+ }
53
+
54
+ offset = focusNode.textContent.length;
55
+ this.#$.selection.setRange(focusNode, offset, focusNode, offset);
56
+ return;
57
+ }
58
+
59
+ if (commonCon.nodeType === 3 && this.#$.component.is(commonCon.parentElement)) {
60
+ const compInfo = this.#$.component.get(commonCon.parentElement);
61
+ if (!compInfo) return;
62
+
63
+ const container = compInfo.container;
64
+
65
+ if (commonCon.parentElement === container) {
66
+ const siblingEl = commonCon.nextElementSibling ? container : container.nextElementSibling;
67
+ const el = dom.utils.createElement(this.#$.options.get('defaultLine'), null, commonCon);
68
+ container.parentElement.insertBefore(el, siblingEl);
69
+ this.#$.focusManager.focusEdge(el);
70
+ return;
71
+ }
72
+
73
+ this.#$.component.select(compInfo.target, compInfo.pluginName);
74
+ return null;
75
+ } else if (commonCon.nodeType === 1 && commonCon.getAttribute('data-se-embed') === 'true') {
76
+ let el = commonCon.nextElementSibling;
77
+ if (!this.#$.format.isLine(el)) el = this.#$.format.addLine(commonCon, this.#$.options.get('defaultLine'));
78
+ this.#$.selection.setRange(el.firstChild, 0, el.firstChild, 0);
79
+ return;
80
+ }
81
+
82
+ if ((this.#$.format.isBlock(startCon) || dom.check.isWysiwygFrame(startCon)) && (this.#$.component.is(startCon.children[range.startOffset]) || this.#$.component.is(startCon.children[range.startOffset - 1]))) return;
83
+ if (dom.query.getParentElement(commonCon, dom.check.isExcludeFormat)) return null;
84
+
85
+ if (this.#$.format.isBlock(commonCon) && commonCon.childNodes.length <= 1) {
86
+ let br = null;
87
+ if (commonCon.childNodes.length === 1 && dom.check.isBreak(commonCon.firstChild)) {
88
+ br = commonCon.firstChild;
89
+ } else {
90
+ br = dom.utils.createTextNode(unicode.zeroWidthSpace);
91
+ commonCon.appendChild(br);
92
+ }
93
+
94
+ this.#$.selection.setRange(br, 1, br, 1);
95
+ return;
96
+ }
97
+
98
+ try {
99
+ if (commonCon.nodeType === 3) {
100
+ format = dom.utils.createElement(formatName || this.#$.options.get('defaultLine'));
101
+ commonCon.parentNode.insertBefore(format, commonCon);
102
+ format.appendChild(commonCon);
103
+ }
104
+
105
+ if (dom.check.isBreak(format.nextSibling)) dom.utils.removeItem(format.nextSibling);
106
+ if (dom.check.isBreak(format.previousSibling)) dom.utils.removeItem(format.previousSibling);
107
+ if (dom.check.isBreak(focusNode)) {
108
+ const zeroWidth = dom.utils.createTextNode(unicode.zeroWidthSpace);
109
+ focusNode.parentNode.insertBefore(zeroWidth, focusNode);
110
+ focusNode = zeroWidth;
111
+ }
112
+ } catch {
113
+ this.#$.frameContext.get('_wd').execCommand('formatBlock', false, `<${formatName || this.#$.options.get('defaultLine')}>`);
114
+ this.#$.store.set('_lastSelectionNode', null);
115
+ this.#$.selection.init();
116
+ return;
117
+ }
118
+
119
+ if (format) {
120
+ if (dom.check.isBreak(format.nextSibling)) dom.utils.removeItem(format.nextSibling);
121
+ if (dom.check.isBreak(format.previousSibling)) dom.utils.removeItem(format.previousSibling);
122
+ if (dom.check.isBreak(focusNode)) {
123
+ const zeroWidth = dom.utils.createTextNode(unicode.zeroWidthSpace);
124
+ focusNode.parentNode.insertBefore(zeroWidth, focusNode);
125
+ focusNode = zeroWidth;
126
+ }
127
+ }
128
+
129
+ this.#$.store.set('_lastSelectionNode', null);
130
+ if (startCon) {
131
+ this.#$.selection.setRange(startCon, 1, startCon, 1);
132
+ } else {
133
+ this.#$.focusManager.nativeFocus();
134
+ }
135
+ }
136
+ }