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,589 @@
1
+ import { dom, env, keyCodeMap } from '../../helper';
2
+ import { _DragHandle } from '../ui/_DragHandle';
3
+
4
+ const { _w, isMobile, ON_OVER_COMPONENT } = env;
5
+ const INDEX_00 = '2147483646';
6
+ const INDEX_0 = '2147483645';
7
+ const INDEX_S_1 = '2147483642';
8
+ const INDEX_1 = '2147483641';
9
+
10
+ /**
11
+ * Controller information object
12
+ * @typedef {Object} ControllerInfo
13
+ * @property {*} inst - The controller instance
14
+ * @property {string} [position="bottom"] - The controller position (`"bottom"`|`"top"`)
15
+ * @property {HTMLElement} [form=null] - The controller element
16
+ * @property {HTMLElement|Range} [target=null] - The controller target element
17
+ * @property {boolean} [notInCarrier=false] - If the controller is not in the `carrierWrapper`, set it to `true`.
18
+ * @property {boolean} [isRangeTarget=false] - If the target is a `Range`, set it to `true`.
19
+ * @property {boolean} [fixed=false] - If the controller is fixed and should not be closed, set it to `true`.
20
+ */
21
+
22
+ /**
23
+ * @typedef {Object} ControllerParams
24
+ * @property {"top"|"bottom"} [position="bottom"] Controller position
25
+ * @property {boolean} [isWWTarget=true] If the controller is in the WYSIWYG area, set it to `true`.
26
+ * @property {() => void} [initMethod=null] Method to be called when the controller is closed.
27
+ * @property {boolean} [disabled=false] If `true`, When the `controller` is opened, buttons without the `se-component-enabled` class are disabled.
28
+ * @property {Array<Controller|HTMLElement>} [parents=[]] The parent `controller` instance array when `controller` is opened nested.
29
+ * @property {boolean} [parentsHide=false] If `true`, the parent element is hidden when the controller is opened.
30
+ * @property {HTMLElement} [sibling=null] The related sibling controller element that this controller is positioned relative to.
31
+ * - e.g.) table plugin :: 118
32
+ * @property {boolean} [siblingMain=false] If `true`, This sibling controller is the main controller.
33
+ * - You must specify this option, if use `sibling`
34
+ * @property {boolean} [isInsideForm=false] If the controller is inside a form, set it to `true`.
35
+ * @property {boolean} [isOutsideForm=false] If the controller is outside a form, set it to `true`.
36
+ */
37
+
38
+ /**
39
+ * @class
40
+ * @description Controller module class that handles the UI and interaction logic for a specific editor controller element.
41
+ * @see EditorComponent for `inst._element` requirement
42
+ */
43
+ class Controller {
44
+ #$;
45
+
46
+ #initMethod;
47
+ #globalEventHandlers;
48
+
49
+ #addOffset = { left: 0, top: 0 };
50
+ #reserveIndex = false;
51
+ #preventClose = false;
52
+ #shadowRootEventForm = null;
53
+ #shadowRootEventListener = null;
54
+ #bindClose_key = null;
55
+ #bindClose_mouse = null;
56
+
57
+ /**
58
+ * @type {Array<Controller>}
59
+ * @description Child controllers opened by this controller
60
+ */
61
+ #__childrenControllers__ = [];
62
+ /**
63
+ * @type {Map<Controller, boolean>}
64
+ * @description Track each parent's desired visibility state: true = wants hidden, false = wants visible
65
+ */
66
+ #__hiddenByParents__ = new Map();
67
+
68
+ /**
69
+ * @constructor
70
+ * @param {*} host The instance object that called the constructor.
71
+ * @param {SunEditor.Deps} $ Kernel dependencies
72
+ * @param {Node} element Controller element
73
+ * @param {ControllerParams} params Controller options
74
+ * @param {?string} [_name] An optional name for the controller key.
75
+ */
76
+ constructor(host, $, element, params, _name) {
77
+ this.#$ = $;
78
+
79
+ // members
80
+ this.kind = _name || host.constructor['key'] || host.constructor.name;
81
+ this.host = host;
82
+ this.form = /** @type {HTMLFormElement} */ (element);
83
+ this.isOpen = false;
84
+ this.currentTarget = null;
85
+ this.currentPositionTarget = null;
86
+ this.isWWTarget = params.isWWTarget ?? true;
87
+ this.position = params.position || 'bottom';
88
+ this.disabled = !!params.disabled;
89
+ this.parents = params.parents || [];
90
+ this.parentsForm = [];
91
+ this.parentsHide = !!params.parentsHide;
92
+ this.sibling = /** @type {HTMLElement} */ (params.sibling || null);
93
+ this.siblingMain = !!params.siblingMain;
94
+ this.isInsideForm = !!params.isInsideForm;
95
+ this.isOutsideForm = !!params.isOutsideForm;
96
+ this.toTop = false;
97
+ /** @type {{left?: number, top?: number, addOfffset?: {left?: number, top?: number}}} */
98
+ this.__offset = {};
99
+
100
+ this.#initMethod = typeof params.initMethod === 'function' ? params.initMethod : null;
101
+ this.#globalEventHandlers = { keydown: this.#CloseListener_keydown.bind(this), mousedown: this.#CloseListener_mousedown.bind(this) };
102
+
103
+ for (const parent of this.parents) {
104
+ if (dom.check.isElement(parent)) {
105
+ this.parentsForm.push(parent);
106
+ continue;
107
+ }
108
+ parent.#__childrenControllers__.push(this);
109
+ this.parentsForm.push(parent.form);
110
+ }
111
+
112
+ // add element
113
+ this.#$.contextProvider.carrierWrapper.appendChild(element);
114
+
115
+ // init
116
+ this.#$.eventManager.addEvent(element, 'click', this.#Action.bind(this));
117
+ this.#$.eventManager.addEvent(element, 'mouseenter', this.#MouseEnter.bind(this));
118
+ this.#$.eventManager.addEvent(element, 'mouseleave', this.#MouseLeave.bind(this));
119
+ }
120
+
121
+ /**
122
+ * @description Open a modal plugin
123
+ * @param {Node|Range} target Target element
124
+ * @param {Node} [positionTarget] Position target element
125
+ * @param {Object} [params={}] params
126
+ * @param {boolean} [params.isWWTarget] If the controller is in the WYSIWYG area, set it to `true`.
127
+ * @param {() => void} [params.initMethod] Method to be called when the controller is closed.
128
+ * @param {boolean} [params.disabled] If `true`, When the `controller` is opened, buttons without the `se-component-enabled` class are disabled. (default: `this.disabled`)
129
+ * @param {{left?: number, top?: number}} [params.addOffset] Additional offset values
130
+ */
131
+ open(target, positionTarget, { isWWTarget, initMethod, disabled, addOffset } = {}) {
132
+ if (_DragHandle.get('__overInfo') === ON_OVER_COMPONENT) {
133
+ return;
134
+ }
135
+
136
+ if (!target) {
137
+ console.warn('[SUNEDITOR.Controller.open.fail] The target element is required.');
138
+ return;
139
+ }
140
+
141
+ this.form.removeAttribute('data-se-hidden-by-parent');
142
+ this.form.removeAttribute('data-se-hidden-by-children');
143
+ this.#__hiddenByParents__.clear();
144
+
145
+ if (this.#$.store.mode.isBalloon) this.#$.toolbar.hide();
146
+ else if (this.#$.store.mode.isSubBalloon) this.#$.subToolbar.hide();
147
+
148
+ if (!this.#$.store.get('hasFocus')) {
149
+ if (disabled ?? this.disabled) {
150
+ this.#$.ui.setControllerOnDisabledButtons(true);
151
+ } else {
152
+ this.#$.ui.setControllerOnDisabledButtons(false);
153
+ }
154
+ }
155
+
156
+ this.currentPositionTarget = positionTarget || target;
157
+ this.isWWTarget = isWWTarget ?? this.isWWTarget;
158
+ if (typeof initMethod === 'function') this.#initMethod = initMethod;
159
+ this.#$.ui.currentControllerName = this.kind;
160
+
161
+ this.#addOffset = { left: 0, top: 0 };
162
+ if (addOffset) this.#addOffset = { ...this.#addOffset, ...addOffset };
163
+
164
+ const parents = this.isOutsideForm ? this.parentsForm : [];
165
+ this.#$.ui.opendControllers?.forEach((e) => {
166
+ if (!parents.includes(e.form)) e.form.style.zIndex = INDEX_1;
167
+ });
168
+
169
+ if (this.parentsHide) {
170
+ this.parentsForm.forEach((e) => {
171
+ e.style.display = 'none';
172
+ e.setAttribute('data-se-hidden-by-children', '1');
173
+ });
174
+ }
175
+
176
+ this.#addGlobalEvent();
177
+
178
+ // display controller
179
+ this.#setControllerPosition(this.form, this.currentPositionTarget, false);
180
+
181
+ const isRangeTarget = this.#$.instanceCheck.isRange(target);
182
+ this.currentTarget = /** @type {HTMLElement} */ (isRangeTarget ? null : target);
183
+ this.#controllerOn(this.form, target, isRangeTarget);
184
+ _w.setTimeout(() => _DragHandle.set('__overInfo', false), 0);
185
+ }
186
+
187
+ /**
188
+ * @description Close a modal plugin
189
+ * - The plugin's `init` method is called.
190
+ * @param {boolean} [force] If `true`, parent controllers are forcibly closed.
191
+ */
192
+ close(force) {
193
+ if (!force && (!this.isOpen || this.#preventClose)) return;
194
+
195
+ this.form.removeAttribute('data-se-hidden-by-parent');
196
+ this.form.removeAttribute('data-se-hidden-by-children');
197
+ this.#__hiddenByParents__.clear();
198
+ this.#childrenSync('close');
199
+
200
+ this.toTop = false;
201
+ this.isOpen = false;
202
+ this.#preventClose = false;
203
+ this.__offset = {};
204
+ this.#addOffset = { left: 0, top: 0 };
205
+
206
+ this.#removeGlobalEvent();
207
+
208
+ this.#initMethod?.();
209
+ this.#controllerOff();
210
+
211
+ if (this.parentsHide && !force) {
212
+ this.parentsForm.forEach((e) => {
213
+ e.style.display = 'block';
214
+ e.removeAttribute('data-se-hidden-by-children');
215
+ });
216
+ }
217
+
218
+ this.host.controllerClose?.();
219
+
220
+ if (this.parentsForm.length > 0) return;
221
+
222
+ this.#$.component.deselect();
223
+ }
224
+
225
+ /**
226
+ * @description Hide controller
227
+ */
228
+ hide() {
229
+ this.#childrenSync('hide');
230
+ this.form.style.display = 'none';
231
+ }
232
+
233
+ /**
234
+ * @description Show controller
235
+ */
236
+ show() {
237
+ this.#setControllerPosition(this.form, this.currentPositionTarget, false);
238
+ }
239
+
240
+ /**
241
+ * @description Sets whether the element (form) should be brought to the top based on `z-index`.
242
+ * @param {boolean} value - `true`: `'2147483646'`, `false`: `'2147483645'`.
243
+ */
244
+ bringToTop(value) {
245
+ this.toTop = value;
246
+ this.form.style.zIndex = value ? INDEX_00 : INDEX_0;
247
+ }
248
+
249
+ /**
250
+ * @description Reset controller position
251
+ * @param {Node} [target]
252
+ */
253
+ resetPosition(target) {
254
+ this.#setControllerPosition(this.form, target || this.currentPositionTarget, true);
255
+ }
256
+
257
+ /**
258
+ * @description Reposition controller on scroll event
259
+ */
260
+ _scrollReposition() {
261
+ if (this.form.hasAttribute('data-se-hidden-by-parent') || this.form.hasAttribute('data-se-hidden-by-children')) return;
262
+ if (this.#setControllerPosition(this.form, this.currentPositionTarget, false)) {
263
+ _w.setTimeout(() => {
264
+ this.#childrenSync('show');
265
+ }, 0);
266
+ }
267
+ }
268
+
269
+ /**
270
+ * @description Synchronously all child controllers.
271
+ * @param {"show"|"hide"|"close"} state - State to apply to child controllers.
272
+ */
273
+ #childrenSync(state) {
274
+ for (const children of this.#__childrenControllers__) {
275
+ if (state === 'hide' && children.form.style.display !== 'none') {
276
+ const wasHidden = this.#calculateShouldBeHidden(children);
277
+ children.#__hiddenByParents__.set(this, true);
278
+ const shouldBeHidden = this.#calculateShouldBeHidden(children);
279
+
280
+ // Only hide if state changed from visible to hidden
281
+ if (!wasHidden && shouldBeHidden) {
282
+ children.form.setAttribute('data-se-hidden-by-parent', '1');
283
+ children.hide();
284
+ }
285
+ } else if (state === 'show') {
286
+ if (children.form.hasAttribute('data-se-hidden-by-children')) {
287
+ children.#childrenSync('show');
288
+ continue;
289
+ }
290
+
291
+ const wasHidden = this.#calculateShouldBeHidden(children);
292
+ children.#__hiddenByParents__.set(this, false);
293
+ const shouldBeHidden = this.#calculateShouldBeHidden(children);
294
+
295
+ // Only show if state changed from hidden to visible
296
+ if (wasHidden && !shouldBeHidden) {
297
+ children.form.removeAttribute('data-se-hidden-by-parent');
298
+ children.show();
299
+ }
300
+ } else {
301
+ children[state]?.(true);
302
+ }
303
+ }
304
+ }
305
+
306
+ /**
307
+ * @description Calculate if a child controller should be hidden based on all parent states
308
+ * @param {Controller} children - The child controller
309
+ * @returns {boolean} `true` if any parent wants it hidden
310
+ */
311
+ #calculateShouldBeHidden(children) {
312
+ for (const wantsHidden of children.#__hiddenByParents__.values()) {
313
+ if (wantsHidden === true) return true;
314
+ }
315
+ return false;
316
+ }
317
+
318
+ /**
319
+ * @description Show controller at editor area (controller elements, function, `controller target element(@Required)`, `controller name(@Required)`, etc..)
320
+ * @param {HTMLFormElement} form Controller element
321
+ * @param {Node|Range} target Controller target element
322
+ * @param {boolean} isRangeTarget If the target is a `Range`, set it to `true`.
323
+ */
324
+ async #controllerOn(form, target, isRangeTarget) {
325
+ /** @type {ControllerInfo} */
326
+ const info = {
327
+ position: this.position,
328
+ inst: this,
329
+ form: /** @type {HTMLElement} */ (form),
330
+ target: /** @type {HTMLElement} */ (target),
331
+ isRangeTarget,
332
+ notInCarrier: !this.#$.contextProvider.carrierWrapper.contains(form),
333
+ };
334
+
335
+ if ((await this.#$.eventManager.triggerEvent('onBeforeShowController', { caller: this.kind, frameContext: this.#$.frameContext, info })) === false) return;
336
+
337
+ form.style.display = 'block';
338
+ if (this.#$.contextProvider.shadowRoot) {
339
+ this.#shadowRootEventForm = form;
340
+ this.#shadowRootEventListener = (e) => e.stopPropagation();
341
+ form.addEventListener('mousedown', this.#shadowRootEventListener);
342
+ }
343
+
344
+ this.#$.ui.onControllerContext();
345
+
346
+ if (!this.isOpen) {
347
+ this.#$.ui.opendControllers.push(info);
348
+ }
349
+
350
+ this.isOpen = true;
351
+ this.#$.store.set('_preventBlur', true);
352
+ this.#$.store.set('controlActive', true);
353
+
354
+ this.host.controllerOn?.(form, target);
355
+ this.#$.eventManager.triggerEvent('onShowController', { caller: this.kind, frameContext: this.#$.frameContext, info });
356
+ }
357
+
358
+ /**
359
+ * @description Hide controller at editor area (link button, image resize button..)
360
+ */
361
+ #controllerOff() {
362
+ this.form.style.display = 'none';
363
+ this.#$.ui.opendControllers = this.#$.ui.opendControllers.filter((v) => v.form !== this.form);
364
+ if (this.#$.ui.currentControllerName !== this.kind && this.#$.ui.opendControllers.length > 0) return;
365
+
366
+ this.#$.ui.setControllerOnDisabledButtons(false);
367
+ this.#$.ui.offControllerContext();
368
+
369
+ this.#$.frameContext.get('lineBreaker_t').style.display = this.#$.frameContext.get('lineBreaker_b').style.display = 'none';
370
+ this.#$.store.set('_lastSelectionNode', null);
371
+ this.#$.ui.currentControllerName = '';
372
+ this.#$.store.set('_preventBlur', false);
373
+
374
+ _w.setTimeout(() => {
375
+ this.#$.store.set('controlActive', false);
376
+ }, 0);
377
+ if (this.#shadowRootEventForm) {
378
+ this.#shadowRootEventForm.removeEventListener('mousedown', this.#shadowRootEventListener);
379
+ this.#shadowRootEventForm = this.#shadowRootEventListener = null;
380
+ }
381
+ }
382
+
383
+ /**
384
+ * @description Specify the position of the controller.
385
+ * @param {HTMLElement} controller Controller element.
386
+ * @param {Node|Range} refer Element or `Range` that is the basis of the controller's position.
387
+ * @param {boolean} [skipAutoReposition=false] If `true`, skips scroll/resize-based automatic positioning logic.
388
+ * @returns {boolean} - view : `true` || hide : `false`
389
+ */
390
+ #setControllerPosition(controller, refer, skipAutoReposition) {
391
+ if (!refer) return false;
392
+
393
+ controller.style.visibility = 'hidden';
394
+ controller.style.display = 'block';
395
+
396
+ if (this.sibling && this.sibling.style.display !== 'block') {
397
+ this.sibling.style.visibility = 'hidden';
398
+ this.sibling.style.display = 'block';
399
+ }
400
+
401
+ if (this.#$.selection.isRange(refer)) {
402
+ if (!this.#$.offset.setRangePosition(this.form, /** @type {Range} */ (refer), { position: 'bottom' })) {
403
+ this.hide();
404
+ return false;
405
+ }
406
+ } else {
407
+ const positionResult = this.#$.offset.setAbsPosition(controller, /** @type {HTMLElement} */ (refer), {
408
+ addOffset: this.#addOffset,
409
+ position: this.position,
410
+ isWWTarget: this.isWWTarget,
411
+ inst: this,
412
+ sibling: this.sibling,
413
+ });
414
+ if (!positionResult) {
415
+ this.hide();
416
+ return false;
417
+ }
418
+
419
+ if (!skipAutoReposition && this.sibling && !this.siblingMain) {
420
+ const resetPosition = controller.offsetTop - this.#addOffset.top;
421
+ if (positionResult.position === 'bottom') {
422
+ this.#reserveIndex = true;
423
+ controller.style.top = resetPosition + this.sibling.offsetHeight - 1 + 'px';
424
+ } else {
425
+ this.#reserveIndex = false;
426
+ controller.style.top = resetPosition - this.sibling.offsetHeight + 2 + 'px';
427
+ }
428
+ } else {
429
+ this.#reserveIndex = false;
430
+ }
431
+ }
432
+
433
+ controller.style.zIndex = this.toTop ? INDEX_0 : this.#reserveIndex ? INDEX_S_1 : INDEX_1;
434
+ controller.style.visibility = '';
435
+ return true;
436
+ }
437
+
438
+ /**
439
+ * @description Adds global event listeners.
440
+ * - When the controller is opened
441
+ */
442
+ #addGlobalEvent() {
443
+ this.#removeGlobalEvent();
444
+ this.#bindClose_key = this.#$.eventManager.addGlobalEvent('keydown', this.#globalEventHandlers.keydown, true);
445
+ this.#bindClose_mouse = this.#$.eventManager.addGlobalEvent(isMobile ? 'click' : 'mousedown', this.#globalEventHandlers.mousedown, true);
446
+ }
447
+
448
+ /**
449
+ * @description Removes global event listeners.
450
+ * - When the ESC key is pressed, the controller is closed.
451
+ */
452
+ #removeGlobalEvent() {
453
+ this.#$.component.__removeGlobalEvent();
454
+ this.#bindClose_key &&= this.#$.eventManager.removeGlobalEvent(this.#bindClose_key);
455
+ this.#bindClose_mouse &&= this.#$.eventManager.removeGlobalEvent(this.#bindClose_mouse);
456
+ }
457
+
458
+ /**
459
+ * @description Checks if the controller is fixed and should not be closed.
460
+ * @returns {boolean} `true` if the controller is fixed.
461
+ */
462
+ #checkFixed() {
463
+ if (this.#$.ui.selectMenuOn) return true;
464
+
465
+ const cont = this.#$.ui.opendControllers;
466
+ for (let i = 0; i < cont.length; i++) {
467
+ if (cont[i].inst === this && cont[i].fixed) {
468
+ return true;
469
+ }
470
+ }
471
+ return false;
472
+ }
473
+
474
+ /**
475
+ * @description Checks if the given target is within a form or controller.
476
+ * @param {Node} target The target element.
477
+ * @returns {boolean} `true` if the target is inside a form or controller.
478
+ */
479
+ #checkForm(target) {
480
+ if (dom.check.isWysiwygFrame(target) || target.contains(this.form)) return false;
481
+ if (dom.utils.hasClass(target, 'se-drag-handle')) return true;
482
+
483
+ let isParentForm = false;
484
+ if (this.isInsideForm && this.parentsForm?.length > 0) {
485
+ this.parentsForm.some((e) => {
486
+ if (e.contains(target)) {
487
+ isParentForm = true;
488
+ return true;
489
+ }
490
+ });
491
+ }
492
+
493
+ const _element = this.host._element;
494
+ return !isParentForm && (!!dom.query.getParentElement(target, '.se-controller') || (this.#$.component.isInline(_element) ? target === _element : target?.contains(_element)));
495
+ }
496
+
497
+ /**
498
+ * @param {MouseEvent} e - Event object
499
+ */
500
+ #Action(e) {
501
+ const eventTarget = dom.query.getEventTarget(e);
502
+ const target = dom.query.getCommandTarget(eventTarget);
503
+ if (!target) return;
504
+
505
+ e.stopPropagation();
506
+ e.preventDefault();
507
+
508
+ this.host.controllerAction(target);
509
+ }
510
+
511
+ /**
512
+ * @param {MouseEvent} e - Event object
513
+ */
514
+ #MouseEnter(e) {
515
+ this.#$.ui.currentControllerName = this.kind;
516
+ if (this.parentsForm.length > 0 && this.isInsideForm) return;
517
+
518
+ const eventTarget = dom.query.getEventTarget(e);
519
+ eventTarget.style.zIndex = this.toTop ? INDEX_00 : INDEX_0;
520
+ }
521
+
522
+ /**
523
+ * @param {MouseEvent} e - Event object
524
+ */
525
+ #MouseLeave(e) {
526
+ if (this.parentsForm.length > 0 && this.isInsideForm) return;
527
+
528
+ const eventTarget = dom.query.getEventTarget(e);
529
+ eventTarget.style.zIndex = this.toTop ? INDEX_0 : this.#reserveIndex ? INDEX_S_1 : INDEX_1;
530
+ }
531
+
532
+ /**
533
+ * @param {KeyboardEvent} e - Event object
534
+ */
535
+ #CloseListener_keydown(e) {
536
+ if (this.#checkFixed()) return;
537
+ const keyCode = e.code;
538
+ const ctrl = keyCodeMap.isCtrl(e);
539
+ if (ctrl || !keyCodeMap.isNonResponseKey(keyCode)) return;
540
+
541
+ const eventTarget = dom.query.getEventTarget(e);
542
+ if (!keyCodeMap.isEsc(keyCode)) {
543
+ if (this.form.contains(eventTarget) || this.#checkForm(eventTarget)) return;
544
+ if (this.#$.pluginManager.fileInfo.pluginRegExp.test(this.kind)) return;
545
+ } else {
546
+ if (this.#__childrenControllers__.some(({ isOpen }) => isOpen)) return;
547
+ }
548
+
549
+ this.#PostCloseEvent(eventTarget);
550
+ this.close();
551
+ }
552
+
553
+ /**
554
+ * @param {KeyboardEvent} e - Event object
555
+ */
556
+ #CloseListener_mousedown(e) {
557
+ const eventTarget = dom.query.getEventTarget(e);
558
+ if (this.host?._element?.contains(eventTarget)) {
559
+ this.#preventClose = true;
560
+ return;
561
+ }
562
+
563
+ this.#preventClose = false;
564
+ if (
565
+ eventTarget === this.host._element ||
566
+ eventTarget === this.currentTarget ||
567
+ this.#checkFixed() ||
568
+ this.form.contains(eventTarget) ||
569
+ this.#checkForm(eventTarget) ||
570
+ dom.query.getParentElement(eventTarget, '.se-line-breaker-component')
571
+ ) {
572
+ return;
573
+ }
574
+
575
+ this.#PostCloseEvent(eventTarget);
576
+ this.close(true);
577
+ }
578
+
579
+ /**
580
+ * @param {HTMLElement} eventTarget - The target element that triggered the event.
581
+ */
582
+ #PostCloseEvent(eventTarget) {
583
+ if (!this.#$.frameContext.get('wysiwyg').contains(eventTarget)) {
584
+ this.#$.component.__prevent = false;
585
+ }
586
+ }
587
+ }
588
+
589
+ export default Controller;