suneditor 3.0.0-beta.9 → 3.0.0-rc.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (380) hide show
  1. package/README.md +65 -57
  2. package/dist/suneditor-contents.min.css +1 -0
  3. package/dist/suneditor.min.css +1 -1
  4. package/dist/suneditor.min.js +1 -1
  5. package/package.json +110 -61
  6. package/src/assets/design/color.css +36 -17
  7. package/src/assets/design/size.css +2 -0
  8. package/src/assets/icons/defaultIcons.js +17 -2
  9. package/src/assets/suneditor-contents.css +51 -16
  10. package/src/assets/suneditor.css +116 -43
  11. package/src/core/config/contextProvider.js +288 -0
  12. package/src/core/config/eventManager.js +188 -0
  13. package/src/core/config/instanceCheck.js +59 -0
  14. package/src/core/config/optionProvider.js +452 -0
  15. package/src/core/editor.js +166 -1637
  16. package/src/core/event/actions/index.js +229 -0
  17. package/src/core/event/effects/common.registry.js +74 -0
  18. package/src/core/event/effects/keydown.registry.js +573 -0
  19. package/src/core/event/effects/ruleHelpers.js +148 -0
  20. package/src/core/event/eventOrchestrator.js +944 -0
  21. package/src/core/event/executor.js +27 -0
  22. package/src/core/{base/eventHandlers → event/handlers}/handler_toolbar.js +27 -28
  23. package/src/core/{base/eventHandlers → event/handlers}/handler_ww_clipboard.js +10 -8
  24. package/src/core/{base/eventHandlers → event/handlers}/handler_ww_dragDrop.js +22 -23
  25. package/src/core/event/handlers/handler_ww_input.js +75 -0
  26. package/src/core/event/handlers/handler_ww_key.js +228 -0
  27. package/src/core/event/handlers/handler_ww_mouse.js +166 -0
  28. package/src/core/event/ports.js +211 -0
  29. package/src/core/event/reducers/keydown.reducer.js +97 -0
  30. package/src/core/event/rules/keydown.rule.arrow.js +63 -0
  31. package/src/core/event/rules/keydown.rule.backspace.js +208 -0
  32. package/src/core/event/rules/keydown.rule.delete.js +132 -0
  33. package/src/core/event/rules/keydown.rule.enter.js +150 -0
  34. package/src/core/event/rules/keydown.rule.tab.js +35 -0
  35. package/src/core/event/support/defaultLineManager.js +136 -0
  36. package/src/core/event/support/selectionState.js +204 -0
  37. package/src/core/kernel/coreKernel.js +320 -0
  38. package/src/core/kernel/kernelInjector.js +19 -0
  39. package/src/core/kernel/store.js +173 -0
  40. package/src/core/{class → logic/dom}/char.js +42 -45
  41. package/src/core/logic/dom/format.js +1075 -0
  42. package/src/core/{class → logic/dom}/html.js +743 -624
  43. package/src/core/logic/dom/inline.js +1847 -0
  44. package/src/core/logic/dom/listFormat.js +601 -0
  45. package/src/core/{class → logic/dom}/nodeTransform.js +92 -72
  46. package/src/core/{class → logic/dom}/offset.js +254 -317
  47. package/src/core/logic/dom/selection.js +754 -0
  48. package/src/core/logic/panel/menu.js +389 -0
  49. package/src/core/logic/panel/toolbar.js +449 -0
  50. package/src/core/logic/panel/viewer.js +761 -0
  51. package/src/core/logic/shell/_commandExecutor.js +380 -0
  52. package/src/core/logic/shell/commandDispatcher.js +241 -0
  53. package/src/core/logic/shell/component.js +970 -0
  54. package/src/core/logic/shell/focusManager.js +110 -0
  55. package/src/core/{base → logic/shell}/history.js +110 -60
  56. package/src/core/logic/shell/pluginManager.js +363 -0
  57. package/src/core/logic/shell/shortcuts.js +130 -0
  58. package/src/core/logic/shell/ui.js +904 -0
  59. package/src/core/schema/context.js +66 -0
  60. package/src/core/schema/frameContext.js +160 -0
  61. package/src/core/schema/options.js +628 -0
  62. package/src/core/section/constructor.js +194 -500
  63. package/src/core/section/documentType.js +297 -222
  64. package/src/events.js +808 -543
  65. package/src/helper/clipboard.js +27 -16
  66. package/src/helper/converter.js +100 -78
  67. package/src/helper/dom/domCheck.js +56 -30
  68. package/src/helper/dom/domQuery.js +159 -89
  69. package/src/helper/dom/domUtils.js +114 -49
  70. package/src/helper/dom/index.js +5 -1
  71. package/src/helper/env.js +26 -26
  72. package/src/helper/index.js +1 -1
  73. package/src/helper/keyCodeMap.js +25 -28
  74. package/src/helper/numbers.js +4 -8
  75. package/src/helper/unicode.js +4 -8
  76. package/src/hooks/base.js +307 -0
  77. package/src/hooks/params.js +130 -0
  78. package/src/interfaces/contracts.js +227 -0
  79. package/src/interfaces/index.js +7 -0
  80. package/src/interfaces/plugins.js +239 -0
  81. package/src/langs/ckb.js +4 -4
  82. package/src/langs/cs.js +4 -4
  83. package/src/langs/da.js +4 -4
  84. package/src/langs/de.js +4 -4
  85. package/src/langs/en.js +4 -4
  86. package/src/langs/es.js +4 -4
  87. package/src/langs/fa.js +4 -4
  88. package/src/langs/fr.js +4 -4
  89. package/src/langs/he.js +4 -4
  90. package/src/langs/hu.js +4 -4
  91. package/src/langs/it.js +4 -4
  92. package/src/langs/ja.js +4 -4
  93. package/src/langs/km.js +4 -4
  94. package/src/langs/ko.js +4 -4
  95. package/src/langs/lv.js +4 -4
  96. package/src/langs/nl.js +4 -4
  97. package/src/langs/pl.js +4 -4
  98. package/src/langs/pt_br.js +13 -13
  99. package/src/langs/ro.js +4 -4
  100. package/src/langs/ru.js +4 -4
  101. package/src/langs/se.js +4 -4
  102. package/src/langs/tr.js +4 -4
  103. package/src/langs/uk.js +4 -4
  104. package/src/langs/ur.js +4 -4
  105. package/src/langs/zh_cn.js +4 -4
  106. package/src/modules/{Browser.js → contract/Browser.js} +119 -128
  107. package/src/modules/{ColorPicker.js → contract/ColorPicker.js} +132 -142
  108. package/src/modules/contract/Controller.js +589 -0
  109. package/src/modules/{Figure.js → contract/Figure.js} +591 -411
  110. package/src/modules/{HueSlider.js → contract/HueSlider.js} +125 -86
  111. package/src/modules/contract/Modal.js +357 -0
  112. package/src/modules/contract/index.js +9 -0
  113. package/src/modules/manager/ApiManager.js +197 -0
  114. package/src/modules/{FileManager.js → manager/FileManager.js} +128 -160
  115. package/src/modules/manager/index.js +5 -0
  116. package/src/modules/{ModalAnchorEditor.js → ui/ModalAnchorEditor.js} +108 -138
  117. package/src/modules/{SelectMenu.js → ui/SelectMenu.js} +119 -120
  118. package/src/modules/{_DragHandle.js → ui/_DragHandle.js} +1 -1
  119. package/src/modules/ui/index.js +6 -0
  120. package/src/plugins/browser/audioGallery.js +23 -26
  121. package/src/plugins/browser/fileBrowser.js +25 -28
  122. package/src/plugins/browser/fileGallery.js +20 -23
  123. package/src/plugins/browser/imageGallery.js +24 -23
  124. package/src/plugins/browser/videoGallery.js +27 -29
  125. package/src/plugins/command/blockquote.js +11 -17
  126. package/src/plugins/command/exportPDF.js +26 -26
  127. package/src/plugins/command/fileUpload.js +138 -133
  128. package/src/plugins/command/list_bulleted.js +48 -44
  129. package/src/plugins/command/list_numbered.js +48 -44
  130. package/src/plugins/dropdown/align.js +64 -50
  131. package/src/plugins/dropdown/backgroundColor.js +34 -35
  132. package/src/plugins/dropdown/{formatBlock.js → blockStyle.js} +43 -37
  133. package/src/plugins/dropdown/font.js +50 -36
  134. package/src/plugins/dropdown/fontColor.js +34 -35
  135. package/src/plugins/dropdown/hr.js +55 -50
  136. package/src/plugins/dropdown/layout.js +20 -15
  137. package/src/plugins/dropdown/lineHeight.js +46 -30
  138. package/src/plugins/dropdown/list.js +32 -33
  139. package/src/plugins/dropdown/paragraphStyle.js +40 -34
  140. package/src/plugins/dropdown/table/index.js +915 -0
  141. package/src/plugins/dropdown/table/render/table.html.js +308 -0
  142. package/src/plugins/dropdown/table/render/table.menu.js +121 -0
  143. package/src/plugins/dropdown/table/services/table.cell.js +465 -0
  144. package/src/plugins/dropdown/table/services/table.clipboard.js +414 -0
  145. package/src/plugins/dropdown/table/services/table.grid.js +504 -0
  146. package/src/plugins/dropdown/table/services/table.resize.js +463 -0
  147. package/src/plugins/dropdown/table/services/table.selection.js +466 -0
  148. package/src/plugins/dropdown/table/services/table.style.js +844 -0
  149. package/src/plugins/dropdown/table/shared/table.constants.js +109 -0
  150. package/src/plugins/dropdown/table/shared/table.utils.js +219 -0
  151. package/src/plugins/dropdown/template.js +20 -15
  152. package/src/plugins/dropdown/textStyle.js +28 -22
  153. package/src/plugins/field/mention.js +54 -49
  154. package/src/plugins/index.js +5 -5
  155. package/src/plugins/input/fontSize.js +100 -97
  156. package/src/plugins/input/pageNavigator.js +13 -10
  157. package/src/plugins/modal/audio.js +208 -219
  158. package/src/plugins/modal/drawing.js +99 -104
  159. package/src/plugins/modal/embed.js +323 -312
  160. package/src/plugins/modal/image/index.js +942 -0
  161. package/src/plugins/modal/image/render/image.html.js +150 -0
  162. package/src/plugins/modal/image/services/image.size.js +198 -0
  163. package/src/plugins/modal/image/services/image.upload.js +216 -0
  164. package/src/plugins/modal/image/shared/image.constants.js +20 -0
  165. package/src/plugins/modal/link.js +74 -54
  166. package/src/plugins/modal/math.js +126 -119
  167. package/src/plugins/modal/video/index.js +858 -0
  168. package/src/plugins/modal/video/render/video.html.js +131 -0
  169. package/src/plugins/modal/video/services/video.size.js +281 -0
  170. package/src/plugins/modal/video/services/video.upload.js +92 -0
  171. package/src/plugins/popup/anchor.js +57 -49
  172. package/src/suneditor.js +73 -61
  173. package/src/themes/cobalt.css +155 -0
  174. package/src/themes/dark.css +143 -120
  175. package/src/typedef.js +214 -63
  176. package/types/assets/icons/defaultIcons.d.ts +8 -0
  177. package/types/assets/suneditor-contents.css.d.ts +1 -0
  178. package/types/assets/suneditor.css.d.ts +1 -0
  179. package/types/core/config/contextProvider.d.ts +148 -0
  180. package/types/core/config/eventManager.d.ts +68 -0
  181. package/types/core/config/instanceCheck.d.ts +33 -0
  182. package/types/core/config/optionProvider.d.ts +147 -0
  183. package/types/core/editor.d.ts +27 -586
  184. package/types/core/event/actions/index.d.ts +50 -0
  185. package/types/core/event/effects/common.registry.d.ts +56 -0
  186. package/types/core/event/effects/keydown.registry.d.ts +80 -0
  187. package/types/core/event/effects/ruleHelpers.d.ts +36 -0
  188. package/types/core/event/eventOrchestrator.d.ts +191 -0
  189. package/types/core/event/executor.d.ts +13 -0
  190. package/types/core/event/handlers/handler_toolbar.d.ts +38 -0
  191. package/types/core/event/handlers/handler_ww_clipboard.d.ts +36 -0
  192. package/types/core/event/handlers/handler_ww_dragDrop.d.ts +26 -0
  193. package/types/core/event/handlers/handler_ww_input.d.ts +38 -0
  194. package/types/core/event/handlers/handler_ww_key.d.ts +40 -0
  195. package/types/core/event/handlers/handler_ww_mouse.d.ts +47 -0
  196. package/types/core/event/ports.d.ts +256 -0
  197. package/types/core/event/reducers/keydown.reducer.d.ts +84 -0
  198. package/types/core/event/rules/keydown.rule.arrow.d.ts +19 -0
  199. package/types/core/event/rules/keydown.rule.backspace.d.ts +18 -0
  200. package/types/core/event/rules/keydown.rule.delete.d.ts +18 -0
  201. package/types/core/event/rules/keydown.rule.enter.d.ts +18 -0
  202. package/types/core/event/rules/keydown.rule.tab.d.ts +18 -0
  203. package/types/core/event/support/defaultLineManager.d.ts +22 -0
  204. package/types/core/event/support/selectionState.d.ts +29 -0
  205. package/types/core/kernel/coreKernel.d.ts +219 -0
  206. package/types/core/kernel/kernelInjector.d.ts +16 -0
  207. package/types/core/kernel/store.d.ts +170 -0
  208. package/types/core/logic/dom/char.d.ts +46 -0
  209. package/types/core/logic/dom/format.d.ts +234 -0
  210. package/types/core/logic/dom/html.d.ts +290 -0
  211. package/types/core/logic/dom/inline.d.ts +93 -0
  212. package/types/core/logic/dom/listFormat.d.ts +101 -0
  213. package/types/core/logic/dom/nodeTransform.d.ts +110 -0
  214. package/types/core/logic/dom/offset.d.ts +335 -0
  215. package/types/core/logic/dom/selection.d.ts +165 -0
  216. package/types/core/logic/panel/menu.d.ts +93 -0
  217. package/types/core/logic/panel/toolbar.d.ts +128 -0
  218. package/types/core/logic/panel/viewer.d.ts +89 -0
  219. package/types/core/logic/shell/_commandExecutor.d.ts +18 -0
  220. package/types/core/logic/shell/commandDispatcher.d.ts +65 -0
  221. package/types/core/logic/shell/component.d.ts +182 -0
  222. package/types/core/logic/shell/focusManager.d.ts +31 -0
  223. package/types/core/{base → logic/shell}/history.d.ts +13 -12
  224. package/types/core/logic/shell/pluginManager.d.ts +115 -0
  225. package/types/core/logic/shell/shortcuts.d.ts +131 -0
  226. package/types/core/logic/shell/ui.d.ts +261 -0
  227. package/types/core/schema/context.d.ts +104 -0
  228. package/types/core/schema/frameContext.d.ts +320 -0
  229. package/types/core/schema/options.d.ts +1241 -0
  230. package/types/core/section/constructor.d.ts +117 -652
  231. package/types/core/section/documentType.d.ts +43 -61
  232. package/types/events.d.ts +796 -65
  233. package/types/helper/clipboard.d.ts +5 -4
  234. package/types/helper/converter.d.ts +55 -43
  235. package/types/helper/dom/domCheck.d.ts +27 -19
  236. package/types/helper/dom/domQuery.d.ts +76 -57
  237. package/types/helper/dom/domUtils.d.ts +62 -39
  238. package/types/helper/dom/index.d.ts +87 -1
  239. package/types/helper/env.d.ts +16 -13
  240. package/types/helper/index.d.ts +8 -2
  241. package/types/helper/keyCodeMap.d.ts +24 -23
  242. package/types/helper/numbers.d.ts +4 -6
  243. package/types/helper/unicode.d.ts +4 -3
  244. package/types/hooks/base.d.ts +239 -0
  245. package/types/hooks/params.d.ts +65 -0
  246. package/types/index.d.ts +20 -117
  247. package/types/interfaces/contracts.d.ts +183 -0
  248. package/types/interfaces/index.d.ts +3 -0
  249. package/types/interfaces/plugins.d.ts +168 -0
  250. package/types/langs/_Lang.d.ts +2 -2
  251. package/types/langs/index.d.ts +2 -2
  252. package/types/modules/contract/Browser.d.ts +262 -0
  253. package/types/modules/contract/ColorPicker.d.ts +99 -0
  254. package/types/modules/contract/Controller.d.ts +204 -0
  255. package/types/modules/contract/Figure.d.ts +529 -0
  256. package/types/modules/{HueSlider.d.ts → contract/HueSlider.d.ts} +39 -28
  257. package/types/modules/contract/Modal.d.ts +62 -0
  258. package/types/modules/contract/index.d.ts +7 -0
  259. package/types/modules/manager/ApiManager.d.ts +106 -0
  260. package/types/modules/manager/FileManager.d.ts +124 -0
  261. package/types/modules/manager/index.d.ts +3 -0
  262. package/types/modules/ui/ModalAnchorEditor.d.ts +152 -0
  263. package/types/modules/ui/SelectMenu.d.ts +107 -0
  264. package/types/modules/{_DragHandle.d.ts → ui/_DragHandle.d.ts} +1 -0
  265. package/types/modules/ui/index.d.ts +4 -0
  266. package/types/plugins/browser/audioGallery.d.ts +33 -41
  267. package/types/plugins/browser/fileBrowser.d.ts +42 -50
  268. package/types/plugins/browser/fileGallery.d.ts +33 -41
  269. package/types/plugins/browser/imageGallery.d.ts +30 -37
  270. package/types/plugins/browser/videoGallery.d.ts +33 -41
  271. package/types/plugins/command/blockquote.d.ts +4 -21
  272. package/types/plugins/command/exportPDF.d.ts +23 -33
  273. package/types/plugins/command/fileUpload.d.ts +80 -100
  274. package/types/plugins/command/list_bulleted.d.ts +9 -35
  275. package/types/plugins/command/list_numbered.d.ts +9 -35
  276. package/types/plugins/dropdown/align.d.ts +23 -46
  277. package/types/plugins/dropdown/backgroundColor.d.ts +35 -53
  278. package/types/plugins/dropdown/blockStyle.d.ts +45 -0
  279. package/types/plugins/dropdown/font.d.ts +18 -41
  280. package/types/plugins/dropdown/fontColor.d.ts +35 -53
  281. package/types/plugins/dropdown/hr.d.ts +26 -52
  282. package/types/plugins/dropdown/layout.d.ts +19 -25
  283. package/types/plugins/dropdown/lineHeight.d.ts +21 -39
  284. package/types/plugins/dropdown/list.d.ts +6 -34
  285. package/types/plugins/dropdown/paragraphStyle.d.ts +34 -45
  286. package/types/plugins/dropdown/table/index.d.ts +158 -0
  287. package/types/plugins/dropdown/table/render/table.html.d.ts +71 -0
  288. package/types/plugins/dropdown/table/render/table.menu.d.ts +59 -0
  289. package/types/plugins/dropdown/table/services/table.cell.d.ts +76 -0
  290. package/types/plugins/dropdown/table/services/table.clipboard.d.ts +26 -0
  291. package/types/plugins/dropdown/table/services/table.grid.d.ts +77 -0
  292. package/types/plugins/dropdown/table/services/table.resize.d.ts +72 -0
  293. package/types/plugins/dropdown/table/services/table.selection.d.ts +59 -0
  294. package/types/plugins/dropdown/table/services/table.style.d.ts +162 -0
  295. package/types/plugins/dropdown/table/shared/table.constants.d.ts +134 -0
  296. package/types/plugins/dropdown/table/shared/table.utils.d.ts +91 -0
  297. package/types/plugins/dropdown/template.d.ts +19 -25
  298. package/types/plugins/dropdown/textStyle.d.ts +23 -30
  299. package/types/plugins/field/mention.d.ts +66 -72
  300. package/types/plugins/index.d.ts +41 -40
  301. package/types/plugins/input/fontSize.d.ts +57 -96
  302. package/types/plugins/input/pageNavigator.d.ts +5 -8
  303. package/types/plugins/modal/audio.d.ts +60 -153
  304. package/types/plugins/modal/drawing.d.ts +16 -118
  305. package/types/plugins/modal/embed.d.ts +46 -166
  306. package/types/plugins/modal/image/index.d.ts +281 -0
  307. package/types/plugins/modal/image/render/image.html.d.ts +45 -0
  308. package/types/plugins/modal/image/services/image.size.d.ts +55 -0
  309. package/types/plugins/modal/image/services/image.upload.d.ts +24 -0
  310. package/types/plugins/modal/image/shared/image.constants.d.ts +17 -0
  311. package/types/plugins/modal/link.d.ts +46 -66
  312. package/types/plugins/modal/math.d.ts +17 -86
  313. package/types/plugins/modal/{video.d.ts → video/index.d.ts} +89 -221
  314. package/types/plugins/modal/video/render/video.html.d.ts +37 -0
  315. package/types/plugins/modal/video/services/video.size.d.ts +74 -0
  316. package/types/plugins/modal/video/services/video.upload.d.ts +19 -0
  317. package/types/plugins/popup/anchor.d.ts +8 -38
  318. package/types/suneditor.d.ts +55 -24
  319. package/types/typedef.d.ts +344 -228
  320. package/CONTRIBUTING.md +0 -186
  321. package/src/core/base/eventHandlers/handler_ww_key_input.js +0 -1200
  322. package/src/core/base/eventHandlers/handler_ww_mouse.js +0 -194
  323. package/src/core/base/eventManager.js +0 -1523
  324. package/src/core/class/component.js +0 -856
  325. package/src/core/class/format.js +0 -3433
  326. package/src/core/class/menu.js +0 -346
  327. package/src/core/class/selection.js +0 -610
  328. package/src/core/class/shortcuts.js +0 -98
  329. package/src/core/class/toolbar.js +0 -431
  330. package/src/core/class/ui.js +0 -424
  331. package/src/core/class/viewer.js +0 -750
  332. package/src/core/section/actives.js +0 -266
  333. package/src/core/section/context.js +0 -102
  334. package/src/editorInjector/_classes.js +0 -36
  335. package/src/editorInjector/_core.js +0 -87
  336. package/src/editorInjector/index.js +0 -73
  337. package/src/modules/ApiManager.js +0 -191
  338. package/src/modules/Controller.js +0 -474
  339. package/src/modules/Modal.js +0 -346
  340. package/src/modules/index.js +0 -14
  341. package/src/plugins/dropdown/table.js +0 -4034
  342. package/src/plugins/modal/image.js +0 -1376
  343. package/src/plugins/modal/video.js +0 -1226
  344. package/types/core/base/eventHandlers/handler_toolbar.d.ts +0 -41
  345. package/types/core/base/eventHandlers/handler_ww_clipboard.d.ts +0 -40
  346. package/types/core/base/eventHandlers/handler_ww_dragDrop.d.ts +0 -35
  347. package/types/core/base/eventHandlers/handler_ww_key_input.d.ts +0 -45
  348. package/types/core/base/eventHandlers/handler_ww_mouse.d.ts +0 -39
  349. package/types/core/base/eventManager.d.ts +0 -401
  350. package/types/core/class/char.d.ts +0 -61
  351. package/types/core/class/component.d.ts +0 -213
  352. package/types/core/class/format.d.ts +0 -623
  353. package/types/core/class/html.d.ts +0 -430
  354. package/types/core/class/menu.d.ts +0 -126
  355. package/types/core/class/nodeTransform.d.ts +0 -93
  356. package/types/core/class/offset.d.ts +0 -522
  357. package/types/core/class/selection.d.ts +0 -188
  358. package/types/core/class/shortcuts.d.ts +0 -142
  359. package/types/core/class/toolbar.d.ts +0 -189
  360. package/types/core/class/ui.d.ts +0 -164
  361. package/types/core/class/viewer.d.ts +0 -140
  362. package/types/core/section/actives.d.ts +0 -46
  363. package/types/core/section/context.d.ts +0 -45
  364. package/types/editorInjector/_classes.d.ts +0 -41
  365. package/types/editorInjector/_core.d.ts +0 -87
  366. package/types/editorInjector/index.d.ts +0 -69
  367. package/types/modules/ApiManager.d.ts +0 -125
  368. package/types/modules/Browser.d.ts +0 -326
  369. package/types/modules/ColorPicker.d.ts +0 -135
  370. package/types/modules/Controller.d.ts +0 -251
  371. package/types/modules/Figure.d.ts +0 -517
  372. package/types/modules/FileManager.d.ts +0 -202
  373. package/types/modules/Modal.d.ts +0 -111
  374. package/types/modules/ModalAnchorEditor.d.ts +0 -236
  375. package/types/modules/SelectMenu.d.ts +0 -194
  376. package/types/modules/index.d.ts +0 -26
  377. package/types/plugins/dropdown/formatBlock.d.ts +0 -55
  378. package/types/plugins/dropdown/table.d.ts +0 -627
  379. package/types/plugins/modal/image.d.ts +0 -451
  380. /package/{LICENSE → LICENSE.txt} +0 -0
@@ -1,15 +1,15 @@
1
- import EditorInjector from '../../editorInjector';
2
- import { Modal, Controller } from '../../modules';
1
+ import { PluginModal } from '../../interfaces';
2
+ import { Modal, Controller } from '../../modules/contract';
3
3
  import { dom, env, converter } from '../../helper';
4
4
 
5
- const { _w } = env;
5
+ const { _w, _d } = env;
6
6
 
7
7
  /**
8
8
  * @typedef {Object} MathPluginOptions
9
9
  * @property {boolean} [canResize=true] - Whether the math modal can be resized.
10
10
  * @property {boolean} [autoHeight=false] - Whether to automatically adjust the height of the modal.
11
11
  * @property {Array<object>} [fontSizeList] - A list of font size options for rendering math expressions.
12
- * @property {(...args: *) => *} [onPaste] - A callback function to handle paste events in the math input area.
12
+ * @property {?(...args: *) => *} [onPaste] - A callback function to handle paste events in the math input area.
13
13
  * @property {Object} [formSize={}] - An object specifying the dimensions for the math modal.
14
14
  * @property {string} [formSize.width="460px"] - The default width of the math modal.
15
15
  * @property {string} [formSize.height="14em"] - The default height of the math modal.
@@ -22,31 +22,32 @@ const { _w } = env;
22
22
  /**
23
23
  * @class
24
24
  * @description Math plugin.
25
- * - This plugin provides support for rendering mathematical expressions using either the KaTeX or MathJax libraries.
25
+ * - This plugin provides support for rendering mathematical expressions using either the `KaTeX` or `MathJax` libraries.
26
26
  * - If external library is provided, a warning is issued.
27
27
  */
28
- class Math_ extends EditorInjector {
28
+ class Math_ extends PluginModal {
29
29
  static key = 'math';
30
- static type = 'modal';
31
30
  static className = '';
31
+
32
32
  /**
33
- * @this {Math_}
34
33
  * @param {HTMLElement} node - The node to check.
35
34
  * @returns {HTMLElement|null} Returns a node if the node is a valid component.
36
35
  */
37
36
  static component(node) {
38
- return dom.utils.hasClass(node, 'se-math|katex') && dom.utils.hasClass(node, 'se-component') ? node : null;
37
+ return dom.utils.hasClass(node, 'se-math|katex') && dom.check.isComponentContainer(node) ? node : null;
39
38
  }
40
39
 
40
+ #element = null;
41
+
41
42
  /**
42
43
  * @constructor
43
- * @param {__se__EditorCore} editor - The root editor instance
44
+ * @param {SunEditor.Kernel} editor - The core kernel
44
45
  * @param {MathPluginOptions} pluginOptions
45
46
  */
46
47
  constructor(editor, pluginOptions) {
47
48
  // plugin basic properties
48
49
  super(editor);
49
- this.title = this.lang.math;
50
+ this.title = this.$.lang.math;
50
51
  this.icon = 'math';
51
52
 
52
53
  // external library
@@ -54,8 +55,10 @@ class Math_ extends EditorInjector {
54
55
  this.mathjax = null;
55
56
 
56
57
  // exception
57
- if (!(this.katex = this.#CheckKatex(editor.options.get('externalLibs').katex)) && !(this.mathjax = this.#CheckMathJax(editor.options.get('externalLibs').mathjax, editor))) {
58
- console.warn('[SUNEDITOR.plugins.math.warn] The math plugin must need either "KaTeX" or "MathJax" library. Please add the katex or mathjax option.');
58
+ if (!(this.katex = this.#CheckKatex()) && !(this.mathjax = this.#CheckMathJax())) {
59
+ console.warn(
60
+ '[SUNEDITOR.plugins.math.warn] The math plugin must need either "KaTeX" or "MathJax" library. Please add the katex or mathjax option. See: https://github.com/ARA-developer/suneditor/blob/develop/guide/external-libraries.md',
61
+ );
59
62
  }
60
63
 
61
64
  this.pluginOptions = {
@@ -66,29 +69,29 @@ class Math_ extends EditorInjector {
66
69
  maxHeight: '',
67
70
  minWidth: '400px',
68
71
  minHeight: '40px',
69
- ...pluginOptions.formSize
72
+ ...pluginOptions.formSize,
70
73
  },
71
74
  canResize: pluginOptions.canResize ?? true,
72
75
  autoHeight: !!pluginOptions.autoHeight,
73
76
  fontSizeList: pluginOptions.fontSizeList || [
74
77
  {
75
78
  text: '1',
76
- value: '1em'
79
+ value: '1em',
77
80
  },
78
81
  {
79
82
  text: '1.5',
80
- value: '1.5em'
83
+ value: '1.5em',
81
84
  },
82
85
  {
83
86
  text: '2',
84
- value: '2em'
87
+ value: '2em',
85
88
  },
86
89
  {
87
90
  text: '2.5',
88
- value: '2.5em'
89
- }
91
+ value: '2.5em',
92
+ },
90
93
  ],
91
- onPaste: typeof pluginOptions.onPaste === 'function' ? pluginOptions.onPaste : null
94
+ onPaste: typeof pluginOptions.onPaste === 'function' ? pluginOptions.onPaste : null,
92
95
  };
93
96
  if (this.pluginOptions.autoHeight) {
94
97
  this.pluginOptions.formSize.height = this.pluginOptions.formSize.minHeight;
@@ -97,11 +100,11 @@ class Math_ extends EditorInjector {
97
100
  // create HTML
98
101
  this.defaultFontSize = null;
99
102
  const modalEl = CreateHTML_modal(this);
100
- const controllerEl = CreateHTML_controller(editor);
103
+ const controllerEl = CreateHTML_controller(this.$);
101
104
 
102
105
  // modules
103
- this.modal = new Modal(this, modalEl);
104
- this.controller = new Controller(this, controllerEl, { position: 'bottom', disabled: true });
106
+ this.modal = new Modal(this, this.$, modalEl);
107
+ this.controller = new Controller(this, this.$, controllerEl, { position: 'bottom', disabled: true });
105
108
 
106
109
  // members
107
110
  /** @type {HTMLTextAreaElement} */
@@ -112,54 +115,33 @@ class Math_ extends EditorInjector {
112
115
  this.fontSizeElement = modalEl.querySelector('.se-math-size');
113
116
 
114
117
  this.isUpdateState = false;
115
- this._element = null;
116
118
 
117
119
  // init
118
120
  this.previewElement.style.fontSize = this.defaultFontSize;
119
- this.eventManager.addEvent(this.textArea, 'input', this.#RenderMathExp.bind(this));
120
- this.eventManager.addEvent(
121
+ this.$.eventManager.addEvent(this.textArea, 'input', this.#RenderMathExp.bind(this));
122
+ this.$.eventManager.addEvent(
121
123
  this.fontSizeElement,
122
124
  'change',
123
125
  function (e) {
124
126
  this.fontSize = e.target.value;
125
- }.bind(this.previewElement.style)
127
+ }.bind(this.previewElement.style),
126
128
  );
127
129
  if (this.pluginOptions.onPaste) {
128
- this.eventManager.addEvent(this.textArea, 'paste', this.pluginOptions.onPaste.bind(this));
129
- }
130
- }
131
-
132
- /**
133
- * @editorMethod Editor.component
134
- * @description Executes the method that is called when a component of a plugin is selected.
135
- * @param {HTMLElement} target Target component element
136
- */
137
- select(target) {
138
- if (dom.utils.hasClass(target, 'se-math|katex') && getValue(target)) {
139
- this._element = target;
140
- this.controller.open(target, null, { isWWTarget: false, initMethod: null, addOffset: null });
141
- return;
130
+ this.$.eventManager.addEvent(this.textArea, 'paste', this.pluginOptions.onPaste.bind(this));
142
131
  }
143
132
  }
144
133
 
145
134
  /**
146
- * @editorMethod Modules.Controller
147
- * @description This function is called before the "controller" before it is closed.
135
+ * @override
136
+ * @type {PluginModal['open']}
148
137
  */
149
- close() {
150
- this._element = null;
138
+ open() {
139
+ this.modal.open();
151
140
  }
152
141
 
153
142
  /**
154
- * @editorMethod Editor.core
155
- * @description This method is used to validate and preserve the format of the component within the editor.
156
- * - It ensures that the structure and attributes of the element are maintained and secure.
157
- * - The method checks if the element is already wrapped in a valid container and updates its attributes if necessary.
158
- * - If the element isn't properly contained, a new container is created to retain the format.
159
- * @returns {{query: string, method: (element: HTMLElement) => void}} The format retention object containing the query and method to process the element.
160
- * - query: The selector query to identify the relevant elements (in this case, 'audio').
161
- * - method:The function to execute on the element to validate and preserve its format.
162
- * - The function takes the element as an argument, checks if it is contained correctly, and applies necessary adjustments.
143
+ * @hook Editor.Core
144
+ * @type {SunEditor.Hook.Core.RetainFormat}
163
145
  */
164
146
  retainFormat() {
165
147
  return {
@@ -170,7 +152,7 @@ class Math_ extends EditorInjector {
170
152
  const value = getValue(element);
171
153
  if (!value) return;
172
154
 
173
- const domParser = this._d.createRange().createContextualFragment(this._renderer(converter.entityToHTML(this._escapeBackslashes(value, true))));
155
+ const domParser = _d.createRange().createContextualFragment(this.#renderer(converter.entityToHTML(this.#escapeBackslashes(value, true))));
174
156
  element.innerHTML = domParser.querySelector('.se-math, .katex').innerHTML;
175
157
  element.setAttribute('contenteditable', 'false');
176
158
  dom.utils.addClass(element, 'se-component|se-inline-component|se-disable-pointer|se-math');
@@ -184,44 +166,34 @@ class Math_ extends EditorInjector {
184
166
  if (this.mathjax) {
185
167
  this.#renderMathJax(this.mathjax);
186
168
  }
187
- }
169
+ },
188
170
  };
189
171
  }
190
172
 
191
173
  /**
192
- * @editorMethod Modules.Modal
193
- * @description Executes the method that is called when a "Modal" module's is opened.
174
+ * @hook Modules.Modal
175
+ * @type {SunEditor.Hook.Modal.On}
194
176
  */
195
- open() {
196
- this.modal.open();
197
- }
198
-
199
- /**
200
- * @editorMethod Modules.Modal
201
- * @description Executes the method that is called when a plugin's modal is opened.
202
- * @param {boolean} isUpdate "Indicates whether the modal is for editing an existing component (true) or registering a new one (false)."
203
- */
204
- on(isUpdate) {
177
+ modalOn(isUpdate) {
205
178
  this.isUpdateState = isUpdate;
206
179
  if (!isUpdate) {
207
- this.init();
180
+ this.modalInit();
208
181
  } else if (this.controller.currentTarget) {
209
182
  const currentTarget = this.controller.currentTarget;
210
- const exp = converter.entityToHTML(this._escapeBackslashes(getValue(currentTarget), true));
183
+ const exp = converter.entityToHTML(this.#escapeBackslashes(getValue(currentTarget), true));
211
184
  const fontSize = getType(currentTarget) || '1em';
212
185
  this.textArea.value = exp;
213
186
  this.fontSizeElement.value = fontSize;
214
- this.previewElement.innerHTML = this._renderer(exp);
187
+ this.previewElement.innerHTML = this.#renderer(exp);
215
188
  this.previewElement.style.fontSize = fontSize;
216
189
  }
217
190
  }
218
191
 
219
192
  /**
220
- * @editorMethod Modules.Modal
221
- * @description This function is called when a form within a modal window is "submit".
222
- * @returns {boolean} Success or failure
193
+ * @hook Modules.Modal
194
+ * @type {SunEditor.Hook.Modal.Action}
223
195
  */
224
- modalAction() {
196
+ async modalAction() {
225
197
  if (this.textArea.value.trim().length === 0 || dom.utils.hasClass(this.textArea, 'se-error')) {
226
198
  this.textArea.focus();
227
199
  return false;
@@ -235,7 +207,7 @@ class Math_ extends EditorInjector {
235
207
  if (!mathEl) return false;
236
208
  dom.utils.addClass(mathEl, 'se-component|se-inline-component|se-disable-pointer|se-math');
237
209
  mathEl.setAttribute('contenteditable', 'false');
238
- mathEl.setAttribute('data-se-value', converter.htmlToEntity(this._escapeBackslashes(mathExp, false)));
210
+ mathEl.setAttribute('data-se-value', converter.htmlToEntity(this.#escapeBackslashes(mathExp, false)));
239
211
  mathEl.setAttribute('data-se-type', this.fontSizeElement.value);
240
212
  mathEl.style.fontSize = this.fontSizeElement.value;
241
213
 
@@ -247,19 +219,19 @@ class Math_ extends EditorInjector {
247
219
  }
248
220
 
249
221
  if (!this.isUpdateState) {
250
- const selectedFormats = this.format.getLines();
222
+ const selectedFormats = this.$.format.getLines();
251
223
 
252
224
  if (selectedFormats.length > 1) {
253
225
  const oFormat = dom.utils.createElement(selectedFormats[0].nodeName, null, mathEl);
254
- this.component.insert(oFormat, { skipCharCount: false, skipSelection: true, skipHistory: false });
226
+ this.$.component.insert(oFormat, { insertBehavior: 'none', scrollTo: false });
255
227
  } else {
256
- this.component.insert(mathEl, { skipCharCount: false, skipSelection: true, skipHistory: false });
228
+ this.$.component.insert(mathEl, { insertBehavior: 'none', scrollTo: false });
257
229
  }
258
230
  } else {
259
231
  const containerEl = dom.query.getParentElement(this.controller.currentTarget, '.se-component');
260
232
  containerEl.replaceWith(mathEl);
261
- const compInfo = this.component.get(mathEl);
262
- this.component.select(compInfo.target, compInfo.pluginName);
233
+ const compInfo = this.$.component.get(mathEl);
234
+ this.$.component.select(compInfo.target, compInfo.pluginName);
263
235
  return true;
264
236
  }
265
237
 
@@ -267,30 +239,29 @@ class Math_ extends EditorInjector {
267
239
  this.#renderMathJax(this.mathjax);
268
240
  }
269
241
 
270
- const r = this.selection.getNearRange(mathEl);
242
+ const r = this.$.selection.getNearRange(mathEl);
271
243
  if (r) {
272
- this.selection.setRange(r.container, r.offset, r.container, r.offset);
244
+ this.$.selection.setRange(r.container, r.offset, r.container, r.offset);
273
245
  } else {
274
- this.component.select(mathEl, Math_.key);
246
+ this.$.component.select(mathEl, Math_.key);
275
247
  }
276
248
 
277
249
  return true;
278
250
  }
279
251
 
280
252
  /**
281
- * @editorMethod Modules.Modal
282
- * @description This function is called before the modal window is opened, but before it is closed.
253
+ * @hook Modules.Modal
254
+ * @type {SunEditor.Hook.Modal.Init}
283
255
  */
284
- init() {
256
+ modalInit() {
285
257
  this.textArea.value = '';
286
258
  this.previewElement.innerHTML = '';
287
259
  dom.utils.removeClass(this.textArea, 'se-error');
288
260
  }
289
261
 
290
262
  /**
291
- * @editorMethod Modules.Controller
292
- * @description Executes the method that is called when a button is clicked in the "controller".
293
- * @param {HTMLButtonElement} target Target button element
263
+ * @hook Modules.Controller
264
+ * @type {SunEditor.Hook.Controller.Action}
294
265
  */
295
266
  controllerAction(target) {
296
267
  const command = target.getAttribute('data-command');
@@ -299,33 +270,52 @@ class Math_ extends EditorInjector {
299
270
  this.modal.open();
300
271
  break;
301
272
  case 'copy':
302
- this.#copyTextToClipboard(this._element);
273
+ this.#copyTextToClipboard(this.#element);
303
274
  break;
304
275
  case 'delete':
305
- this.destroy(this.controller.currentTarget);
276
+ this.componentDestroy(this.controller.currentTarget);
306
277
  }
307
278
  }
308
279
 
309
280
  /**
310
- * @editorMethod Editor.Component
311
- * @description Method to delete a component of a plugin, called by the "FileManager", "Controller" module.
312
- * @param {Node} target Target element
281
+ * @hook Modules.Controller
282
+ * @type {SunEditor.Hook.Controller.Close}
313
283
  */
314
- destroy(target) {
284
+ controllerClose() {
285
+ this.#element = null;
286
+ }
287
+
288
+ /**
289
+ * @hook Editor.Component
290
+ * @type {SunEditor.Hook.Component.Select}
291
+ */
292
+ componentSelect(target) {
293
+ if (dom.utils.hasClass(target, 'se-math|katex') && getValue(target)) {
294
+ this.#element = target;
295
+ this.controller.open(target, null, { isWWTarget: false, initMethod: null, addOffset: null });
296
+ return;
297
+ }
298
+ }
299
+
300
+ /**
301
+ * @hook Editor.Component
302
+ * @type {SunEditor.Hook.Component.Destroy}
303
+ */
304
+ async componentDestroy(target) {
315
305
  dom.utils.removeItem(target);
316
306
  this.controller.close();
317
- this.editor.focus();
318
- this.history.push(false);
307
+ this.$.focusManager.focus();
308
+ this.$.history.push(false);
319
309
  }
320
310
 
321
311
  /**
322
- * @private
323
- * @description Renders the given math expression using KaTeX or MathJax.
312
+ * @description Renders the given math expression using `KaTeX` or `MathJax`.
324
313
  * @param {string} exp - The math expression to render.
325
314
  * @returns {string} - The rendered math expression as HTML.
326
315
  */
327
- _renderer(exp) {
316
+ #renderer(exp) {
328
317
  let result = '';
318
+
329
319
  try {
330
320
  dom.utils.removeClass(this.textArea, 'se-error');
331
321
  if (this.katex) {
@@ -338,23 +328,32 @@ class Math_ extends EditorInjector {
338
328
  } else {
339
329
  result = `<span class="se-math">${result}</span>`;
340
330
  }
331
+ } else {
332
+ /** @type {Error & { code?: string }} */
333
+ const err = new Error('404 Not found. "KaTeX" or "MathJax" library');
334
+ err.code = 'MATH_LIB_NOT_FOUND';
335
+ throw err;
341
336
  }
342
337
  } catch (error) {
343
338
  dom.utils.addClass(this.textArea, 'se-error');
344
- result = `<span class="se-math-error">Math syntax error. (Refer ${this.katex ? `<a href="${env.KATEX_WEBSITE}" target="_blank">KaTeX</a>` : `<a href="${env.MATHJAX_WEBSITE}" target="_blank">MathJax</a>`})</span>`;
339
+ if (error.code === 'MATH_LIB_NOT_FOUND') {
340
+ result = `<span class="se-math-error">${error.message}</span>`;
341
+ } else {
342
+ result = `<span class="se-math-error">Math syntax error. (Refer ${this.katex ? `<a href="${env.KATEX_WEBSITE}" target="_blank">KaTeX</a>` : `<a href="${env.MATHJAX_WEBSITE}" target="_blank">MathJax</a>`})</span>`;
343
+ }
345
344
  console.warn('[SUNEDITOR.math.error] ', error.message);
346
345
  }
346
+
347
347
  return result;
348
348
  }
349
349
 
350
350
  /**
351
- * @private
352
351
  * @description Escapes or unescapes backslashes in a given string.
353
352
  * @param {string} str - The input string.
354
- * @param {boolean} decode - If true, decodes escaped backslashes; otherwise, encodes them.
353
+ * @param {boolean} decode - If `true`, decodes escaped backslashes; otherwise, encodes them.
355
354
  * @returns {string} - The processed string.
356
355
  */
357
- _escapeBackslashes(str, decode) {
356
+ #escapeBackslashes(str, decode) {
358
357
  return str.replace(/\\{2}/g, decode ? '\\' : '\\\\');
359
358
  }
360
359
 
@@ -368,7 +367,7 @@ class Math_ extends EditorInjector {
368
367
 
369
368
  try {
370
369
  const text = getValue(element);
371
- await this.html.copy(text);
370
+ await this.$.html.copy(text);
372
371
  dom.utils.addClass(element, 'se-copy');
373
372
  // copy effect
374
373
  _w.setTimeout(() => {
@@ -391,7 +390,7 @@ class Math_ extends EditorInjector {
391
390
  eventTarget.style.height = eventTarget.scrollHeight + 5 + 'px';
392
391
  }
393
392
 
394
- this.previewElement.innerHTML = this._renderer(eventTarget.value);
393
+ this.previewElement.innerHTML = this.#renderer(eventTarget.value);
395
394
  if (this.mathjax) this.#renderMathJax(this.mathjax);
396
395
  }
397
396
 
@@ -404,10 +403,10 @@ class Math_ extends EditorInjector {
404
403
  }
405
404
 
406
405
  /**
407
- * @param {*} katex - The KaTeX instance.
408
- * @returns {*} - The KaTeX instance or null if the instance is invalid.
406
+ * @returns {*} - The `KaTeX` instance or `null` if the instance is invalid.
409
407
  */
410
- #CheckKatex(katex) {
408
+ #CheckKatex() {
409
+ const katex = this.$.options.get('externalLibs').katex;
411
410
  if (!katex) return null;
412
411
  if (!katex.src) {
413
412
  console.warn('[SUNEDITOR.math.katex.fail] The katex option is set incorrectly.');
@@ -416,9 +415,9 @@ class Math_ extends EditorInjector {
416
415
 
417
416
  const katexOptions = [
418
417
  {
419
- throwOnError: false
418
+ throwOnError: false,
420
419
  },
421
- katex.options || {}
420
+ katex.options || {},
422
421
  ].reduce((init, option) => {
423
422
  for (const key in option) {
424
423
  init[key] = option[key];
@@ -431,13 +430,12 @@ class Math_ extends EditorInjector {
431
430
  }
432
431
 
433
432
  /**
434
- * @param {*} mathjax - The MathJax instance.
435
- * @param {__se__EditorCore} editor - The root editor instance.
436
433
  * @returns {*}
437
434
  */
438
- #CheckMathJax(mathjax, editor) {
435
+ #CheckMathJax() {
436
+ const mathjax = this.$.options.get('externalLibs').mathjax;
439
437
  if (!mathjax) return null;
440
- if (editor.frameOptions.get('iframe')) {
438
+ if (this.$.frameOptions.get('iframe')) {
441
439
  console.warn('[SUNEDITOR.math.mathjax.fail] The MathJax option is not supported in the iframe.');
442
440
  }
443
441
 
@@ -450,7 +448,7 @@ class Math_ extends EditorInjector {
450
448
 
451
449
  return mathjax.src.document(document, {
452
450
  InputJax: tex,
453
- OutputJax: chtml
451
+ OutputJax: chtml,
454
452
  });
455
453
  } catch (error) {
456
454
  console.warn('[SUNEDITOR.math.mathjax.fail] The MathJax option is set incorrectly.', error);
@@ -459,8 +457,13 @@ class Math_ extends EditorInjector {
459
457
  }
460
458
  }
461
459
 
460
+ /**
461
+ * @param {Math_} inst - Math plugin instance
462
+ * @returns {HTMLElement}
463
+ */
462
464
  function CreateHTML_modal(inst) {
463
- const { lang, icons, pluginOptions, katex } = inst;
465
+ const { $, pluginOptions, katex } = inst;
466
+ const { lang, icons } = $;
464
467
  const { formSize, fontSizeList, canResize, autoHeight } = pluginOptions;
465
468
  const { width, height, maxWidth, maxHeight, minWidth, minHeight } = formSize;
466
469
  const resizeType = !canResize ? 'none' : autoHeight ? 'horizontal' : 'auto';
@@ -507,6 +510,10 @@ function CreateHTML_modal(inst) {
507
510
  return dom.utils.createElement('DIV', { class: 'se-modal-content se-modal-responsive', style: `max-width: ${maxWidth}; max-height: ${maxHeight};` }, html);
508
511
  }
509
512
 
513
+ /**
514
+ * @param {SunEditor.Deps} $ - Kernel dependencies
515
+ * @returns {HTMLElement}
516
+ */
510
517
  function CreateHTML_controller({ lang, icons }) {
511
518
  const html = /*html*/ `
512
519
  <div class="se-arrow se-arrow-up"></div>
@@ -553,7 +560,7 @@ function getType(element) {
553
560
  if (seAttr) return seAttr;
554
561
 
555
562
  // v2-migration
556
- const v2SeAttr = element.getAttribute(`data-exp`);
563
+ const v2SeAttr = element.getAttribute(`data-font-size`);
557
564
  if (!v2SeAttr) return null;
558
565
  element.removeAttribute(`data-font-size`);
559
566
  element.setAttribute(`data-se-type`, v2SeAttr);