suneditor 3.0.0-alpha.9 → 3.0.0-beta.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 (315) hide show
  1. package/CONTRIBUTING.md +170 -22
  2. package/{LICENSE.txt → LICENSE} +9 -9
  3. package/README.md +168 -30
  4. package/dist/suneditor.min.css +1 -1
  5. package/dist/suneditor.min.js +1 -1
  6. package/package.json +47 -21
  7. package/src/assets/design/color.css +121 -0
  8. package/src/assets/design/index.css +3 -0
  9. package/src/assets/design/size.css +35 -0
  10. package/src/assets/design/typography.css +37 -0
  11. package/src/assets/icons/defaultIcons.js +232 -0
  12. package/src/assets/suneditor-contents.css +181 -46
  13. package/src/assets/suneditor.css +1403 -650
  14. package/src/core/base/eventHandlers/handler_toolbar.js +35 -14
  15. package/src/core/base/eventHandlers/handler_ww_clipboard.js +23 -4
  16. package/src/core/base/eventHandlers/handler_ww_dragDrop.js +49 -10
  17. package/src/core/base/eventHandlers/handler_ww_key_input.js +422 -224
  18. package/src/core/base/eventHandlers/handler_ww_mouse.js +83 -36
  19. package/src/core/base/eventManager.js +520 -179
  20. package/src/core/base/history.js +95 -41
  21. package/src/core/class/char.js +26 -11
  22. package/src/core/class/component.js +345 -137
  23. package/src/core/class/format.js +683 -519
  24. package/src/core/class/html.js +485 -305
  25. package/src/core/class/menu.js +133 -47
  26. package/src/core/class/nodeTransform.js +90 -71
  27. package/src/core/class/offset.js +408 -92
  28. package/src/core/class/selection.js +216 -106
  29. package/src/core/class/shortcuts.js +68 -8
  30. package/src/core/class/toolbar.js +106 -116
  31. package/src/core/class/ui.js +422 -0
  32. package/src/core/class/viewer.js +178 -74
  33. package/src/core/editor.js +496 -389
  34. package/src/core/section/actives.js +123 -27
  35. package/src/core/section/constructor.js +615 -206
  36. package/src/core/section/context.js +28 -23
  37. package/src/core/section/documentType.js +561 -0
  38. package/src/editorInjector/_classes.js +19 -5
  39. package/src/editorInjector/_core.js +71 -7
  40. package/src/editorInjector/index.js +63 -1
  41. package/src/events.js +622 -0
  42. package/src/helper/clipboard.js +59 -0
  43. package/src/helper/converter.js +202 -26
  44. package/src/helper/dom/domCheck.js +304 -0
  45. package/src/helper/dom/domQuery.js +669 -0
  46. package/src/helper/dom/domUtils.js +557 -0
  47. package/src/helper/dom/index.js +12 -0
  48. package/src/helper/env.js +46 -56
  49. package/src/helper/index.js +10 -4
  50. package/src/helper/keyCodeMap.js +183 -0
  51. package/src/helper/numbers.js +12 -8
  52. package/src/helper/unicode.js +9 -5
  53. package/src/langs/ckb.js +74 -4
  54. package/src/langs/cs.js +72 -2
  55. package/src/langs/da.js +73 -3
  56. package/src/langs/de.js +73 -4
  57. package/src/langs/en.js +23 -3
  58. package/src/langs/es.js +73 -4
  59. package/src/langs/fa.js +75 -3
  60. package/src/langs/fr.js +73 -3
  61. package/src/langs/he.js +73 -4
  62. package/src/langs/hu.js +230 -0
  63. package/src/langs/index.js +7 -3
  64. package/src/langs/it.js +70 -1
  65. package/src/langs/ja.js +72 -4
  66. package/src/langs/km.js +230 -0
  67. package/src/langs/ko.js +22 -2
  68. package/src/langs/lv.js +74 -5
  69. package/src/langs/nl.js +73 -4
  70. package/src/langs/pl.js +73 -4
  71. package/src/langs/pt_br.js +70 -1
  72. package/src/langs/ro.js +74 -5
  73. package/src/langs/ru.js +73 -4
  74. package/src/langs/se.js +73 -4
  75. package/src/langs/tr.js +73 -1
  76. package/src/langs/{ua.js → uk.js} +75 -6
  77. package/src/langs/ur.js +77 -8
  78. package/src/langs/zh_cn.js +74 -5
  79. package/src/modules/ApiManager.js +77 -54
  80. package/src/modules/Browser.js +667 -0
  81. package/src/modules/ColorPicker.js +162 -102
  82. package/src/modules/Controller.js +273 -142
  83. package/src/modules/Figure.js +925 -484
  84. package/src/modules/FileManager.js +121 -69
  85. package/src/modules/HueSlider.js +113 -61
  86. package/src/modules/Modal.js +291 -122
  87. package/src/modules/ModalAnchorEditor.js +383 -234
  88. package/src/modules/SelectMenu.js +270 -168
  89. package/src/modules/_DragHandle.js +2 -1
  90. package/src/modules/index.js +3 -3
  91. package/src/plugins/browser/audioGallery.js +83 -0
  92. package/src/plugins/browser/fileBrowser.js +103 -0
  93. package/src/plugins/browser/fileGallery.js +83 -0
  94. package/src/plugins/browser/imageGallery.js +81 -0
  95. package/src/plugins/browser/videoGallery.js +103 -0
  96. package/src/plugins/command/blockquote.js +40 -27
  97. package/src/plugins/command/exportPDF.js +134 -0
  98. package/src/plugins/command/fileUpload.js +229 -162
  99. package/src/plugins/command/list_bulleted.js +83 -47
  100. package/src/plugins/command/list_numbered.js +83 -47
  101. package/src/plugins/dropdown/align.js +66 -54
  102. package/src/plugins/dropdown/backgroundColor.js +63 -49
  103. package/src/plugins/dropdown/font.js +71 -47
  104. package/src/plugins/dropdown/fontColor.js +63 -48
  105. package/src/plugins/dropdown/formatBlock.js +70 -33
  106. package/src/plugins/dropdown/hr.js +92 -51
  107. package/src/plugins/dropdown/layout.js +37 -26
  108. package/src/plugins/dropdown/lineHeight.js +54 -38
  109. package/src/plugins/dropdown/list.js +60 -45
  110. package/src/plugins/dropdown/paragraphStyle.js +51 -30
  111. package/src/plugins/dropdown/table.js +2003 -813
  112. package/src/plugins/dropdown/template.js +38 -26
  113. package/src/plugins/dropdown/textStyle.js +43 -31
  114. package/src/plugins/field/mention.js +147 -86
  115. package/src/plugins/index.js +32 -6
  116. package/src/plugins/input/fontSize.js +161 -108
  117. package/src/plugins/input/pageNavigator.js +70 -0
  118. package/src/plugins/modal/audio.js +358 -173
  119. package/src/plugins/modal/drawing.js +531 -0
  120. package/src/plugins/modal/embed.js +886 -0
  121. package/src/plugins/modal/image.js +674 -362
  122. package/src/plugins/modal/link.js +100 -71
  123. package/src/plugins/modal/math.js +367 -167
  124. package/src/plugins/modal/video.js +691 -335
  125. package/src/plugins/popup/anchor.js +222 -0
  126. package/src/suneditor.js +50 -13
  127. package/src/themes/dark.css +122 -0
  128. package/src/typedef.js +130 -0
  129. package/types/assets/icons/defaultIcons.d.ts +153 -0
  130. package/types/core/base/eventHandlers/handler_toolbar.d.ts +41 -0
  131. package/types/core/base/eventHandlers/handler_ww_clipboard.d.ts +40 -0
  132. package/types/core/base/eventHandlers/handler_ww_dragDrop.d.ts +35 -0
  133. package/types/core/base/eventHandlers/handler_ww_key_input.d.ts +45 -0
  134. package/types/core/base/eventHandlers/handler_ww_mouse.d.ts +39 -0
  135. package/types/core/base/eventManager.d.ts +385 -0
  136. package/types/core/base/history.d.ts +81 -0
  137. package/types/core/class/char.d.ts +60 -0
  138. package/types/core/class/component.d.ts +212 -0
  139. package/types/core/class/format.d.ts +616 -0
  140. package/types/core/class/html.d.ts +422 -0
  141. package/types/core/class/menu.d.ts +126 -0
  142. package/types/core/class/nodeTransform.d.ts +93 -0
  143. package/types/core/class/offset.d.ts +522 -0
  144. package/types/core/class/selection.d.ts +188 -0
  145. package/types/core/class/shortcuts.d.ts +142 -0
  146. package/types/core/class/toolbar.d.ts +189 -0
  147. package/types/core/class/ui.d.ts +164 -0
  148. package/types/core/class/viewer.d.ts +140 -0
  149. package/types/core/editor.d.ts +610 -0
  150. package/types/core/section/actives.d.ts +46 -0
  151. package/types/core/section/constructor.d.ts +777 -0
  152. package/types/core/section/context.d.ts +45 -0
  153. package/types/core/section/documentType.d.ts +178 -0
  154. package/types/editorInjector/_classes.d.ts +41 -0
  155. package/types/editorInjector/_core.d.ts +92 -0
  156. package/types/editorInjector/index.d.ts +71 -0
  157. package/types/events.d.ts +273 -0
  158. package/types/helper/clipboard.d.ts +12 -0
  159. package/types/helper/converter.d.ts +197 -0
  160. package/types/helper/dom/domCheck.d.ts +189 -0
  161. package/types/helper/dom/domQuery.d.ts +223 -0
  162. package/types/helper/dom/domUtils.d.ts +226 -0
  163. package/types/helper/dom/index.d.ts +9 -0
  164. package/types/helper/env.d.ts +132 -0
  165. package/types/helper/index.d.ts +174 -0
  166. package/types/helper/keyCodeMap.d.ts +110 -0
  167. package/types/helper/numbers.d.ts +46 -0
  168. package/types/helper/unicode.d.ts +28 -0
  169. package/types/index.d.ts +120 -0
  170. package/{typings/Lang.d.ts → types/langs/_Lang.d.ts} +173 -103
  171. package/types/langs/ckb.d.ts +3 -0
  172. package/types/langs/cs.d.ts +3 -0
  173. package/types/langs/da.d.ts +3 -0
  174. package/types/langs/de.d.ts +3 -0
  175. package/types/langs/en.d.ts +3 -0
  176. package/types/langs/es.d.ts +3 -0
  177. package/types/langs/fa.d.ts +3 -0
  178. package/types/langs/fr.d.ts +3 -0
  179. package/types/langs/he.d.ts +3 -0
  180. package/types/langs/hu.d.ts +3 -0
  181. package/types/langs/index.d.ts +54 -0
  182. package/types/langs/it.d.ts +3 -0
  183. package/types/langs/ja.d.ts +3 -0
  184. package/types/langs/km.d.ts +3 -0
  185. package/types/langs/ko.d.ts +3 -0
  186. package/types/langs/lv.d.ts +3 -0
  187. package/types/langs/nl.d.ts +3 -0
  188. package/types/langs/pl.d.ts +3 -0
  189. package/types/langs/pt_br.d.ts +3 -0
  190. package/types/langs/ro.d.ts +3 -0
  191. package/types/langs/ru.d.ts +3 -0
  192. package/types/langs/se.d.ts +3 -0
  193. package/types/langs/tr.d.ts +3 -0
  194. package/types/langs/uk.d.ts +3 -0
  195. package/types/langs/ur.d.ts +3 -0
  196. package/types/langs/zh_cn.d.ts +3 -0
  197. package/types/modules/ApiManager.d.ts +125 -0
  198. package/types/modules/Browser.d.ts +326 -0
  199. package/types/modules/ColorPicker.d.ts +131 -0
  200. package/types/modules/Controller.d.ts +251 -0
  201. package/types/modules/Figure.d.ts +517 -0
  202. package/types/modules/FileManager.d.ts +202 -0
  203. package/types/modules/HueSlider.d.ts +136 -0
  204. package/types/modules/Modal.d.ts +111 -0
  205. package/types/modules/ModalAnchorEditor.d.ts +236 -0
  206. package/types/modules/SelectMenu.d.ts +194 -0
  207. package/types/modules/_DragHandle.d.ts +7 -0
  208. package/types/modules/index.d.ts +26 -0
  209. package/types/plugins/browser/audioGallery.d.ts +55 -0
  210. package/types/plugins/browser/fileBrowser.d.ts +64 -0
  211. package/types/plugins/browser/fileGallery.d.ts +55 -0
  212. package/types/plugins/browser/imageGallery.d.ts +51 -0
  213. package/types/plugins/browser/videoGallery.d.ts +57 -0
  214. package/types/plugins/command/blockquote.d.ts +28 -0
  215. package/types/plugins/command/exportPDF.d.ts +46 -0
  216. package/types/plugins/command/fileUpload.d.ts +156 -0
  217. package/types/plugins/command/list_bulleted.d.ts +46 -0
  218. package/types/plugins/command/list_numbered.d.ts +46 -0
  219. package/types/plugins/dropdown/align.d.ts +60 -0
  220. package/types/plugins/dropdown/backgroundColor.d.ts +63 -0
  221. package/types/plugins/dropdown/font.d.ts +54 -0
  222. package/types/plugins/dropdown/fontColor.d.ts +63 -0
  223. package/types/plugins/dropdown/formatBlock.d.ts +54 -0
  224. package/types/plugins/dropdown/hr.d.ts +71 -0
  225. package/types/plugins/dropdown/layout.d.ts +40 -0
  226. package/types/plugins/dropdown/lineHeight.d.ts +50 -0
  227. package/types/plugins/dropdown/list.d.ts +39 -0
  228. package/types/plugins/dropdown/paragraphStyle.d.ts +54 -0
  229. package/types/plugins/dropdown/table.d.ts +627 -0
  230. package/types/plugins/dropdown/template.d.ts +40 -0
  231. package/types/plugins/dropdown/textStyle.d.ts +41 -0
  232. package/types/plugins/field/mention.d.ts +102 -0
  233. package/types/plugins/index.d.ts +107 -0
  234. package/types/plugins/input/fontSize.d.ts +170 -0
  235. package/types/plugins/input/pageNavigator.d.ts +28 -0
  236. package/types/plugins/modal/audio.d.ts +269 -0
  237. package/types/plugins/modal/drawing.d.ts +246 -0
  238. package/types/plugins/modal/embed.d.ts +387 -0
  239. package/types/plugins/modal/image.d.ts +451 -0
  240. package/types/plugins/modal/link.d.ts +128 -0
  241. package/types/plugins/modal/math.d.ts +193 -0
  242. package/types/plugins/modal/video.d.ts +485 -0
  243. package/types/plugins/popup/anchor.d.ts +56 -0
  244. package/types/suneditor.d.ts +51 -0
  245. package/types/typedef.d.ts +233 -0
  246. package/.eslintignore +0 -7
  247. package/.eslintrc.json +0 -64
  248. package/src/assets/icons/_default.js +0 -194
  249. package/src/core/base/events.js +0 -320
  250. package/src/core/class/notice.js +0 -42
  251. package/src/helper/domUtils.js +0 -1177
  252. package/src/modules/FileBrowser.js +0 -271
  253. package/src/plugins/command/exportPdf.js +0 -168
  254. package/src/plugins/fileBrowser/imageGallery.js +0 -81
  255. package/src/themes/test.css +0 -61
  256. package/typings/CommandPlugin.d.ts +0 -8
  257. package/typings/DialogPlugin.d.ts +0 -20
  258. package/typings/FileBrowserPlugin.d.ts +0 -30
  259. package/typings/Module.d.ts +0 -15
  260. package/typings/Plugin.d.ts +0 -42
  261. package/typings/SubmenuPlugin.d.ts +0 -8
  262. package/typings/_classes.d.ts +0 -17
  263. package/typings/_colorPicker.d.ts +0 -60
  264. package/typings/_core.d.ts +0 -55
  265. package/typings/align.d.ts +0 -5
  266. package/typings/audio.d.ts +0 -5
  267. package/typings/backgroundColor.d.ts +0 -5
  268. package/typings/blockquote.d.ts +0 -5
  269. package/typings/char.d.ts +0 -39
  270. package/typings/component.d.ts +0 -38
  271. package/typings/context.d.ts +0 -39
  272. package/typings/converter.d.ts +0 -33
  273. package/typings/dialog.d.ts +0 -28
  274. package/typings/domUtils.d.ts +0 -361
  275. package/typings/editor.d.ts +0 -7
  276. package/typings/editor.ts +0 -542
  277. package/typings/env.d.ts +0 -70
  278. package/typings/eventManager.d.ts +0 -37
  279. package/typings/events.d.ts +0 -262
  280. package/typings/fileBrowser.d.ts +0 -42
  281. package/typings/fileManager.d.ts +0 -67
  282. package/typings/font.d.ts +0 -5
  283. package/typings/fontColor.d.ts +0 -5
  284. package/typings/fontSize.d.ts +0 -5
  285. package/typings/format.d.ts +0 -191
  286. package/typings/formatBlock.d.ts +0 -5
  287. package/typings/history.d.ts +0 -48
  288. package/typings/horizontalRule.d.ts +0 -5
  289. package/typings/image.d.ts +0 -5
  290. package/typings/imageGallery.d.ts +0 -5
  291. package/typings/index.d.ts +0 -21
  292. package/typings/index.modules.d.ts +0 -11
  293. package/typings/index.plugins.d.ts +0 -58
  294. package/typings/lineHeight.d.ts +0 -5
  295. package/typings/link.d.ts +0 -5
  296. package/typings/list.d.ts +0 -5
  297. package/typings/math.d.ts +0 -5
  298. package/typings/mediaContainer.d.ts +0 -25
  299. package/typings/mention.d.ts +0 -5
  300. package/typings/node.d.ts +0 -57
  301. package/typings/notice.d.ts +0 -16
  302. package/typings/numbers.d.ts +0 -29
  303. package/typings/offset.d.ts +0 -24
  304. package/typings/options.d.ts +0 -589
  305. package/typings/paragraphStyle.d.ts +0 -5
  306. package/typings/resizing.d.ts +0 -141
  307. package/typings/selection.d.ts +0 -94
  308. package/typings/shortcuts.d.ts +0 -13
  309. package/typings/suneditor.d.ts +0 -9
  310. package/typings/table.d.ts +0 -5
  311. package/typings/template.d.ts +0 -5
  312. package/typings/textStyle.d.ts +0 -5
  313. package/typings/toolbar.d.ts +0 -32
  314. package/typings/unicode.d.ts +0 -25
  315. package/typings/video.d.ts +0 -5
@@ -0,0 +1,422 @@
1
+ export default HTML;
2
+ export type HTMLThis = Omit<HTML & Partial<__se__EditorInjector>, 'html'>;
3
+ /**
4
+ * @typedef {Omit<HTML & Partial<__se__EditorInjector>, 'html'>} HTMLThis
5
+ */
6
+ /**
7
+ * @constructor
8
+ * @this {HTMLThis}
9
+ * @description All HTML related classes involved in the editing area
10
+ * @param {__se__EditorCore} editor - The root editor instance
11
+ */
12
+ declare function HTML(this: Omit<HTML & Partial<import('../../editorInjector').default>, 'html'>, editor: __se__EditorCore): void;
13
+ declare class HTML {
14
+ /**
15
+ * @typedef {Omit<HTML & Partial<__se__EditorInjector>, 'html'>} HTMLThis
16
+ */
17
+ /**
18
+ * @constructor
19
+ * @this {HTMLThis}
20
+ * @description All HTML related classes involved in the editing area
21
+ * @param {__se__EditorCore} editor - The root editor instance
22
+ */
23
+ constructor(editor: __se__EditorCore);
24
+ fontSizeUnitRegExp: RegExp;
25
+ _isAllowedClassName: any;
26
+ _allowHTMLComment: any;
27
+ _disallowedStyleNodesRegExp: RegExp;
28
+ _htmlCheckWhitelistRegExp: RegExp;
29
+ _htmlCheckBlacklistRegExp: RegExp;
30
+ _elementWhitelistRegExp: RegExp;
31
+ _elementBlacklistRegExp: RegExp;
32
+ /** @type {Object<string, RegExp>} */
33
+ _attributeWhitelist: {
34
+ [x: string]: RegExp;
35
+ };
36
+ /** @type {Object<string, RegExp>} */
37
+ _attributeBlacklist: {
38
+ [x: string]: RegExp;
39
+ };
40
+ _attributeWhitelistRegExp: RegExp;
41
+ _attributeBlacklistRegExp: RegExp;
42
+ _cleanStyleTagKeyRegExp: RegExp;
43
+ _cleanStyleRegExpMap: Map<any, any>;
44
+ _textStyleTags: any;
45
+ /** @type {Object<string, *>} */
46
+ _autoStyleify: {
47
+ [x: string]: any;
48
+ };
49
+ __disallowedTagsRegExp: RegExp;
50
+ __disallowedTagNameRegExp: RegExp;
51
+ __allowedTagNameRegExp: RegExp;
52
+ /**
53
+ * @this {HTMLThis}
54
+ * @description Filters an HTML string based on allowed and disallowed tags, with optional custom validation.
55
+ * - Removes blacklisted tags and keeps only whitelisted tags.
56
+ * - Allows custom validation functions to replace, modify, or remove elements.
57
+ * @param {string} html - The HTML string to be filtered.
58
+ * @param {Object} params - Filtering parameters.
59
+ * @param {string} [params.tagWhitelist] - Allowed tags, specified as a string with tags separated by '|'. (e.g. "div|p|span").
60
+ * @param {string} [params.tagBlacklist] - Disallowed tags, specified as a string with tags separated by '|'. (e.g. "script|iframe").
61
+ * @param {(node: Node) => Node | string | null} [params.validate] - Function to validate and modify individual nodes.
62
+ * - Return `null` to remove the node.
63
+ * - Return a `Node` to replace the current node.
64
+ * - Return a `string` to replace the node's outerHTML.
65
+ * @param {boolean} [params.validateAll] - Whether to apply validation to all nodes.
66
+ * @returns {string} - The filtered HTML string.
67
+ */
68
+ filter(
69
+ this: Omit<HTML & Partial<import('../../editorInjector').default>, 'html'>,
70
+ html: string,
71
+ {
72
+ tagWhitelist,
73
+ tagBlacklist,
74
+ validate,
75
+ validateAll
76
+ }: {
77
+ tagWhitelist?: string;
78
+ tagBlacklist?: string;
79
+ validate?: (node: Node) => Node | string | null;
80
+ validateAll?: boolean;
81
+ }
82
+ ): string;
83
+ /**
84
+ * @this {HTMLThis}
85
+ * @description Cleans and compresses HTML code to suit the editor format.
86
+ * @param {string} html HTML string to clean and compress
87
+ * @param {Object} [options] Cleaning options
88
+ * @param {boolean} [options.forceFormat=false] If true, wraps text nodes without a format node in the format tag.
89
+ * @param {string|RegExp|null} [options.whitelist=null] Regular expression of allowed tags.
90
+ * Create RegExp object using helper.converter.createElementWhitelist method.
91
+ * @param {string|RegExp|null} [options.blacklist=null] Regular expression of disallowed tags.
92
+ * Create RegExp object using helper.converter.createElementBlacklist method.
93
+ * @param {boolean} [options._freeCodeViewMode=false] If true, the free code view mode is enabled.
94
+ * @returns {string} Cleaned and compressed HTML string
95
+ */
96
+ clean(
97
+ this: Omit<HTML & Partial<import('../../editorInjector').default>, 'html'>,
98
+ html: string,
99
+ {
100
+ forceFormat,
101
+ whitelist,
102
+ blacklist,
103
+ _freeCodeViewMode
104
+ }?: {
105
+ forceFormat?: boolean;
106
+ whitelist?: string | RegExp | null;
107
+ blacklist?: string | RegExp | null;
108
+ _freeCodeViewMode?: boolean;
109
+ }
110
+ ): string;
111
+ /**
112
+ * @this {HTMLThis}
113
+ * @description Inserts an (HTML element / HTML string / plain string) at the selection range.
114
+ * - If "frameOptions.get('charCounter_max')" is exceeded when "html" is added, null is returned without addition.
115
+ * @param {Node|string} html HTML Element or HTML string or plain string
116
+ * @param {Object} [options] Options
117
+ * @param {boolean} [options.selectInserted=false] If true, selects the range of the inserted node.
118
+ * @param {boolean} [options.skipCharCount=false] If true, inserts even if "frameOptions.get('charCounter_max')" is exceeded.
119
+ * @param {boolean} [options.skipCleaning=false] If true, inserts the HTML string without refining it with html.clean.
120
+ * @returns {HTMLElement|null} The inserted element or null if insertion failed
121
+ */
122
+ insert(
123
+ this: Omit<HTML & Partial<import('../../editorInjector').default>, 'html'>,
124
+ html: Node | string,
125
+ {
126
+ selectInserted,
127
+ skipCharCount,
128
+ skipCleaning
129
+ }?: {
130
+ selectInserted?: boolean;
131
+ skipCharCount?: boolean;
132
+ skipCleaning?: boolean;
133
+ }
134
+ ): HTMLElement | null;
135
+ /**
136
+ * @this {HTMLThis}
137
+ * @description Delete selected node and insert argument value node and return.
138
+ * - If the "afterNode" exists, it is inserted after the "afterNode"
139
+ * - Inserting a text node merges with both text nodes on both sides and returns a new "{ container, startOffset, endOffset }".
140
+ * @param {Node} oNode Node to be inserted
141
+ * @param {Object} [options] Options
142
+ * @param {Node} [options.afterNode=null] If the node exists, it is inserted after the node
143
+ * @param {boolean} [options.skipCharCount=null] If true, it will be inserted even if "frameOptions.get('charCounter_max')" is exceeded.
144
+ * @returns {Object|Node|null}
145
+ */
146
+ insertNode(
147
+ this: Omit<HTML & Partial<import('../../editorInjector').default>, 'html'>,
148
+ oNode: Node,
149
+ {
150
+ afterNode,
151
+ skipCharCount
152
+ }?: {
153
+ afterNode?: Node;
154
+ skipCharCount?: boolean;
155
+ }
156
+ ): any | Node | null;
157
+ /**
158
+ * @this {HTMLThis}
159
+ * @description Delete the selected range.
160
+ * @returns {{container: Node, offset: number, commonCon?: Node|null, prevContainer?: Node|null}}
161
+ * - container: "the last element after deletion"
162
+ * - offset: "offset"
163
+ * - commonCon: "commonAncestorContainer"
164
+ * - prevContainer: "previousElementSibling Of the deleted area"
165
+ */
166
+ remove(this: Omit<HTML & Partial<import('../../editorInjector').default>, 'html'>): {
167
+ container: Node;
168
+ offset: number;
169
+ commonCon?: Node | null;
170
+ prevContainer?: Node | null;
171
+ };
172
+ /**
173
+ * @this {HTMLThis}
174
+ * @description Gets the current content
175
+ * @param {Object} [options] Options
176
+ * @param {boolean} [options.withFrame=false] Gets the current content with containing parent div.sun-editor-editable (<div class="sun-editor-editable">{content}</div>).
177
+ * Ignored for targetOptions.get('iframe_fullPage') is true.
178
+ * @param {boolean} [options.includeFullPage=false] Return only the content of the body without headers when the "iframe_fullPage" option is true
179
+ * @param {number|Array<number>} [options.rootKey=null] Root index
180
+ * @returns {string|Object<*, string>}
181
+ */
182
+ get(
183
+ this: Omit<HTML & Partial<import('../../editorInjector').default>, 'html'>,
184
+ {
185
+ withFrame,
186
+ includeFullPage,
187
+ rootKey
188
+ }?: {
189
+ withFrame?: boolean;
190
+ includeFullPage?: boolean;
191
+ rootKey?: number | Array<number>;
192
+ }
193
+ ): string | any;
194
+ /**
195
+ * @this {HTMLThis}
196
+ * @description Sets the HTML string to the editor content
197
+ * @param {string} html HTML string
198
+ * @param {Object} [options] Options
199
+ * @param {number|Array<number>} [options.rootKey=null] Root index
200
+ */
201
+ set(
202
+ this: Omit<HTML & Partial<import('../../editorInjector').default>, 'html'>,
203
+ html: string,
204
+ {
205
+ rootKey
206
+ }?: {
207
+ rootKey?: number | Array<number>;
208
+ }
209
+ ): void;
210
+ /**
211
+ * @this {HTMLThis}
212
+ * @description Add content to the end of content.
213
+ * @param {string} html Content to Input
214
+ * @param {Object} [options] Options
215
+ * @param {number|Array<number>} [options.rootKey=null] Root index
216
+ */
217
+ add(
218
+ this: Omit<HTML & Partial<import('../../editorInjector').default>, 'html'>,
219
+ html: string,
220
+ {
221
+ rootKey
222
+ }?: {
223
+ rootKey?: number | Array<number>;
224
+ }
225
+ ): void;
226
+ /**
227
+ * @this {HTMLThis}
228
+ * @description Gets the current content to JSON data
229
+ * @param {Object} [options] Options
230
+ * @param {boolean} [options.withFrame=false] Gets the current content with containing parent div.sun-editor-editable (<div class="sun-editor-editable">{content}</div>).
231
+ * @param {number|Array<number>} [options.rootKey=null] Root index
232
+ * @returns {Object<string, *>} JSON data
233
+ */
234
+ getJson(
235
+ this: Omit<HTML & Partial<import('../../editorInjector').default>, 'html'>,
236
+ {
237
+ withFrame,
238
+ rootKey
239
+ }?: {
240
+ withFrame?: boolean;
241
+ rootKey?: number | Array<number>;
242
+ }
243
+ ): {
244
+ [x: string]: any;
245
+ };
246
+ /**
247
+ * @this {HTMLThis}
248
+ * @description Sets the JSON data to the editor content
249
+ * @param {Object<string, *>} jsdonData HTML string
250
+ * @param {Object} [options] Options
251
+ * @param {number|Array<number>} [options.rootKey=null] Root index
252
+ */
253
+ setJson(
254
+ this: Omit<HTML & Partial<import('../../editorInjector').default>, 'html'>,
255
+ jsdonData: {
256
+ [x: string]: any;
257
+ },
258
+ {
259
+ rootKey
260
+ }?: {
261
+ rootKey?: number | Array<number>;
262
+ }
263
+ ): void;
264
+ /**
265
+ * @this {HTMLThis}
266
+ * @description Call "clipboard.write" to copy the contents and display a success/failure toast message.
267
+ * @param {Element|Text|string} content Content to be copied to the clipboard
268
+ * @returns {Promise<boolean>} Success or failure
269
+ */
270
+ copy(this: Omit<HTML & Partial<import('../../editorInjector').default>, 'html'>, content: Element | Text | string): Promise<boolean>;
271
+ /**
272
+ * @this {HTMLThis}
273
+ * @description Sets the content of the iframe's head tag and body tag when using the "iframe" or "iframe_fullPage" option.
274
+ * @param {{head: string, body: string}} ctx { head: HTML string, body: HTML string}
275
+ * @param {Object} [options] Options
276
+ * @param {number|Array<number>} [options.rootKey=null] Root index
277
+ */
278
+ setFullPage(
279
+ this: Omit<HTML & Partial<import('../../editorInjector').default>, 'html'>,
280
+ ctx: {
281
+ head: string;
282
+ body: string;
283
+ },
284
+ {
285
+ rootKey
286
+ }?: {
287
+ rootKey?: number | Array<number>;
288
+ }
289
+ ): boolean;
290
+ /**
291
+ * @this {HTMLThis}
292
+ * @description HTML code compression
293
+ * @param {string} html HTML string
294
+ * @returns {string} HTML string
295
+ */
296
+ compress(this: Omit<HTML & Partial<import('../../editorInjector').default>, 'html'>, html: string): string;
297
+ /**
298
+ * @private
299
+ * @this {HTMLThis}
300
+ * @description construct wysiwyg area element to html string
301
+ * @param {Node|string} html WYSIWYG element (this.editor.frameContext.get('wysiwyg')) or HTML string.
302
+ * @param {boolean} comp If true, does not line break and indentation of tags.
303
+ * @returns {string}
304
+ */
305
+ _convertToCode(this: Omit<HTML & Partial<import('../../editorInjector').default>, 'html'>, html: Node | string, comp: boolean): string;
306
+ /**
307
+ * @private
308
+ * @this {HTMLThis}
309
+ * @description Checks whether the given list item node should be removed and handles necessary clean-up.
310
+ * @param {Node} item The list item node to be checked.
311
+ */
312
+ _nodeRemoveListItem(this: Omit<HTML & Partial<import('../../editorInjector').default>, 'html'>, item: Node): void;
313
+ /**
314
+ * @private
315
+ * @this {HTMLThis}
316
+ * @description Recursive function when used to place a node in "BrLine" in "html.insertNode"
317
+ * @param {Node} oNode Node to be inserted
318
+ * @returns {Node} "oNode"
319
+ */
320
+ _setIntoFreeFormat(this: Omit<HTML & Partial<import('../../editorInjector').default>, 'html'>, oNode: Node): Node;
321
+ /**
322
+ * @private
323
+ * @this {HTMLThis}
324
+ * @description Returns HTML string according to tag type and configurati isExcludeFormat.
325
+ * @param {Node} node Node
326
+ * @param {boolean} forceFormat If true, text nodes that do not have a format node is wrapped with the format tag.
327
+ */
328
+ _makeLine(this: Omit<HTML & Partial<import('../../editorInjector').default>, 'html'>, node: Node, forceFormat: boolean): string;
329
+ /**
330
+ * @private
331
+ * @this {HTMLThis}
332
+ * @description Fix tags that do not fit the editor format.
333
+ * @param {DocumentFragment} documentFragment Document fragment "DOCUMENT_FRAGMENT_NODE" (nodeType === 11)
334
+ * @param {RegExp} htmlCheckWhitelistRegExp Editor tags whitelist
335
+ * @param {RegExp} htmlCheckBlacklistRegExp Editor tags blacklist
336
+ * @param {boolean} tagFilter Tag filter option
337
+ * @param {boolean} formatFilter Format filter option
338
+ * @param {boolean} classFilter Class name filter option
339
+ * @param {boolean} _freeCodeViewMode Enforces strict HTML validation based on the editor`s policy
340
+ */
341
+ _consistencyCheckOfHTML(
342
+ this: Omit<HTML & Partial<import('../../editorInjector').default>, 'html'>,
343
+ documentFragment: DocumentFragment,
344
+ htmlCheckWhitelistRegExp: RegExp,
345
+ htmlCheckBlacklistRegExp: RegExp,
346
+ tagFilter: boolean,
347
+ formatFilter: boolean,
348
+ classFilter: boolean,
349
+ _freeCodeViewMode: boolean
350
+ ): void;
351
+ /**
352
+ * @private
353
+ * @this {HTMLThis}
354
+ * @description Removes attribute values such as style and converts tags that do not conform to the "html5" standard.
355
+ * @param {string} html HTML string
356
+ * @returns {string} HTML string
357
+ */
358
+ _styleNodeConvertor(this: Omit<HTML & Partial<import('../../editorInjector').default>, 'html'>, html: string): string;
359
+ /**
360
+ * @private
361
+ * @this {HTMLThis}
362
+ * @description Determines if formatting is required and returns a domTree
363
+ * @param {DocumentFragment} domFrag documentFragment
364
+ * @returns {DocumentFragment}
365
+ */
366
+ _editFormat(this: Omit<HTML & Partial<import('../../editorInjector').default>, 'html'>, domFrag: DocumentFragment): DocumentFragment;
367
+ /**
368
+ * @private
369
+ * @this {HTMLThis}
370
+ * @description Converts a list of DOM nodes into an HTML list structure.
371
+ * - If the node is already a list, its innerHTML is used. If it is a block element,
372
+ * - the function is called recursively.
373
+ * @param {__se__NodeCollection} domTree List of DOM nodes to be converted.
374
+ * @returns {string} The generated HTML list.
375
+ */
376
+ _convertListCell(this: Omit<HTML & Partial<import('../../editorInjector').default>, 'html'>, domTree: __se__NodeCollection): string;
377
+ /**
378
+ * @private
379
+ * @this {HTMLThis}
380
+ * @description Checks whether the provided DOM nodes require formatting.
381
+ * @param {NodeList} domTree List of DOM nodes to check.
382
+ * @returns {boolean} True if formatting is required, otherwise false.
383
+ */
384
+ _isFormatData(this: Omit<HTML & Partial<import('../../editorInjector').default>, 'html'>, domTree: NodeList): boolean;
385
+ /**
386
+ * @private
387
+ * @this {HTMLThis}
388
+ * @description Cleans the inline style attributes of an HTML element.
389
+ * - Extracts allowed styles and removes disallowed ones based on editor settings.
390
+ * @param {string} m The full matched string from a regular expression.
391
+ * @param {Array|null} v The list of allowed attributes.
392
+ * @param {string} name The tag name of the element being cleaned.
393
+ * @returns {Array} The updated list of allowed attributes including cleaned styles.
394
+ */
395
+ _cleanStyle(this: Omit<HTML & Partial<import('../../editorInjector').default>, 'html'>, m: string, v: any[] | null, name: string): any[];
396
+ /**
397
+ * @private
398
+ * @this {HTMLThis}
399
+ * @description Delete disallowed tags
400
+ * @param {string} html HTML string
401
+ * @returns {string}
402
+ */
403
+ _deleteDisallowedTags(this: Omit<HTML & Partial<import('../../editorInjector').default>, 'html'>, html: string, whitelistRegExp: any, blacklistRegExp: any): string;
404
+ /**
405
+ * @private
406
+ * @this {HTMLThis}
407
+ * @description Recursively checks for duplicate text style nodes within a given parent node.
408
+ * @param {Node} oNode The node to check for duplicate styles.
409
+ * @param {Node} parentNode The parent node where the duplicate check occurs.
410
+ */
411
+ _checkDuplicateNode(this: Omit<HTML & Partial<import('../../editorInjector').default>, 'html'>, oNode: Node, parentNode: Node): void;
412
+ /**
413
+ * @private
414
+ * @this {HTMLThis}
415
+ * @description Recursively checks for duplicate text style nodes within a given parent node.
416
+ * - If duplicate styles are found, redundant attributes are removed.
417
+ * @param {Node} oNode The node to check for duplicate styles.
418
+ * @param {Node} parentNode The parent node where the duplicate check occurs.
419
+ * @returns {Node} The cleaned node with redundant styles removed.
420
+ */
421
+ _dupleCheck(this: Omit<HTML & Partial<import('../../editorInjector').default>, 'html'>, oNode: Node, parentNode: Node): Node;
422
+ }
@@ -0,0 +1,126 @@
1
+ export default Menu;
2
+ export type MenuThis = Omit<Menu & Partial<__se__EditorInjector>, 'menu'>;
3
+ /**
4
+ * @typedef {Omit<Menu & Partial<__se__EditorInjector>, 'menu'>} MenuThis
5
+ */
6
+ /**
7
+ * @constructor
8
+ * @this {MenuThis}
9
+ * @description Dropdown and container menu management class
10
+ * @param {__se__EditorCore} editor - The root editor instance
11
+ */
12
+ declare function Menu(this: Omit<Menu & Partial<import('../../editorInjector').default>, 'menu'>, editor: __se__EditorCore): void;
13
+ declare class Menu {
14
+ /**
15
+ * @typedef {Omit<Menu & Partial<__se__EditorInjector>, 'menu'>} MenuThis
16
+ */
17
+ /**
18
+ * @constructor
19
+ * @this {MenuThis}
20
+ * @description Dropdown and container menu management class
21
+ * @param {__se__EditorCore} editor - The root editor instance
22
+ */
23
+ constructor(editor: __se__EditorCore);
24
+ /** @type {Object<string, HTMLElement>} */
25
+ targetMap: {
26
+ [x: string]: HTMLElement;
27
+ };
28
+ index: number;
29
+ menus: any[];
30
+ currentDropdown: HTMLElement;
31
+ currentDropdownActiveButton: HTMLButtonElement;
32
+ currentDropdownName: string;
33
+ currentDropdownType: string;
34
+ currentContainer: HTMLElement;
35
+ currentContainerActiveButton: HTMLButtonElement;
36
+ currentContainerName: string;
37
+ _dropdownCommands: any[];
38
+ __globalEventHandler: {
39
+ mousedown: any;
40
+ containerDown: any;
41
+ keydown: any;
42
+ mousemove: any;
43
+ mouseout: any;
44
+ };
45
+ _bindClose_dropdown_mouse: any;
46
+ _bindClose_dropdown_key: any;
47
+ _bindClose_cons_mouse: any;
48
+ currentDropdownPlugin: any;
49
+ __menuBtn: Node;
50
+ __menuContainer: HTMLElement;
51
+ /**
52
+ * @this {MenuThis}
53
+ * @description Method for managing dropdown element.
54
+ * - You must add the "dropdown" element using the this method at custom plugin.
55
+ * @param {{key: string, type: string}} classObj Class object
56
+ * @param {Node} menu Dropdown element
57
+ */
58
+ initDropdownTarget(
59
+ this: Omit<Menu & Partial<import('../../editorInjector').default>, 'menu'>,
60
+ {
61
+ key,
62
+ type
63
+ }: {
64
+ key: string;
65
+ type: string;
66
+ },
67
+ menu: Node
68
+ ): void;
69
+ /**
70
+ * @this {MenuThis}
71
+ * @description On dropdown
72
+ * @param {Node} button Dropdown's button element to call
73
+ */
74
+ dropdownOn(this: Omit<Menu & Partial<import('../../editorInjector').default>, 'menu'>, button: Node): void;
75
+ /**
76
+ * @this {MenuThis}
77
+ * @description Off dropdown
78
+ */
79
+ dropdownOff(this: Omit<Menu & Partial<import('../../editorInjector').default>, 'menu'>): void;
80
+ /**
81
+ * @this {MenuThis}
82
+ * @description On menu container
83
+ * @param {Node} button Container's button element to call
84
+ */
85
+ containerOn(this: Omit<Menu & Partial<import('../../editorInjector').default>, 'menu'>, button: Node): void;
86
+ /**
87
+ * @this {MenuThis}
88
+ * @description Off menu container
89
+ */
90
+ containerOff(this: Omit<Menu & Partial<import('../../editorInjector').default>, 'menu'>): void;
91
+ /**
92
+ * @private
93
+ * @this {MenuThis}
94
+ * @description Set the menu position.
95
+ * @param {Node} element Button element
96
+ * @param {HTMLElement} menu Menu element
97
+ */
98
+ _setMenuPosition(this: Omit<Menu & Partial<import('../../editorInjector').default>, 'menu'>, element: Node, menu: HTMLElement): void;
99
+ /**
100
+ * @private
101
+ * @this {MenuThis}
102
+ * @description Restore the last menu position using previously stored button and menu elements.
103
+ */
104
+ _restoreMenuPosition(this: Omit<Menu & Partial<import('../../editorInjector').default>, 'menu'>): void;
105
+ /**
106
+ * @private
107
+ * @this {MenuThis}
108
+ * @description Check if the element is part of a more layer
109
+ * @param {Node} element The element to check
110
+ * @returns {HTMLElement|null} The more layer element or null
111
+ */
112
+ _checkMoreLayer(this: Omit<Menu & Partial<import('../../editorInjector').default>, 'menu'>, element: Node): HTMLElement | null;
113
+ /**
114
+ * @private
115
+ * @this {MenuThis}
116
+ * @description Move the selected item in the dropdown menu
117
+ * @param {number} num Direction and amount to move (-1 for up, 1 for down)
118
+ */
119
+ _moveItem(this: Omit<Menu & Partial<import('../../editorInjector').default>, 'menu'>, num: number): void;
120
+ /**
121
+ * @private
122
+ * @this {MenuThis}
123
+ * @description Remove global event listeners
124
+ */
125
+ __removeGlobalEvent(this: Omit<Menu & Partial<import('../../editorInjector').default>, 'menu'>): void;
126
+ }
@@ -0,0 +1,93 @@
1
+ export default NodeTransform;
2
+ export type NodeTransformThis = Omit<NodeTransform & Partial<__se__EditorInjector>, 'nodeTransform'>;
3
+ /**
4
+ * @typedef {Omit<NodeTransform & Partial<__se__EditorInjector>, 'nodeTransform'>} NodeTransformThis
5
+ */
6
+ /**
7
+ * @constructor
8
+ * @this {NodeTransformThis}
9
+ * @description Node utility class. split, merge, etc.
10
+ * @param {__se__EditorCore} editor - The root editor instance
11
+ */
12
+ declare function NodeTransform(this: Omit<NodeTransform & Partial<import('../../editorInjector').default>, 'nodeTransform'>, editor: __se__EditorCore): void;
13
+ declare class NodeTransform {
14
+ /**
15
+ * @typedef {Omit<NodeTransform & Partial<__se__EditorInjector>, 'nodeTransform'>} NodeTransformThis
16
+ */
17
+ /**
18
+ * @constructor
19
+ * @this {NodeTransformThis}
20
+ * @description Node utility class. split, merge, etc.
21
+ * @param {__se__EditorCore} editor - The root editor instance
22
+ */
23
+ constructor(editor: __se__EditorCore);
24
+ /**
25
+ * @this {NodeTransformThis}
26
+ * @template {HTMLElement} T
27
+ * @description Split all tags based on "baseNode"
28
+ * @param {Node} baseNode Element or text node on which to base
29
+ * @param {?number|Node} offset Text offset of "baseNode" (Only valid when "baseNode" is a text node)
30
+ * @param {number} [depth=0] The nesting depth of the element being split. (default: 0)
31
+ * @returns {T} The last element of the splited tag.
32
+ */
33
+ split<T extends HTMLElement>(this: Omit<NodeTransform & Partial<import('../../editorInjector').default>, 'nodeTransform'>, baseNode: Node, offset: (number | Node) | null, depth?: number): T;
34
+ /**
35
+ * @this {NodeTransformThis}
36
+ * @description Use with "npdePath (dom-query-GetNodePath)" to merge the same attributes and tags if they are present and modify the nodepath.
37
+ * - If "offset" has been changed, it will return as much "offset" as it has been modified.
38
+ * - An array containing change offsets is returned in the order of the "nodePathArray" array.
39
+ * @param {Node} element Element
40
+ * @param {?number[][]=} nodePathArray Array of NodePath object ([dom-query-GetNodePath(), ..])
41
+ * @param {?boolean=} onlyText If true, non-text nodes like 'span', 'strong'.. are ignored.
42
+ * @returns {Array<number>} [offset, ..]
43
+ */
44
+ mergeSameTags(this: Omit<NodeTransform & Partial<import('../../editorInjector').default>, 'nodeTransform'>, element: Node, nodePathArray?: (number[][] | null) | undefined, onlyText?: (boolean | null) | undefined): Array<number>;
45
+ /**
46
+ * @this {NodeTransformThis}
47
+ * @description Remove nested tags without other child nodes.
48
+ * @param {Node} element Element object
49
+ * @param {?(current: Node) => boolean|string=} validation Validation function / String("tag1|tag2..") / If null, all tags are applicable.
50
+ */
51
+ mergeNestedTags(this: Omit<NodeTransform & Partial<import('../../editorInjector').default>, 'nodeTransform'>, element: Node, validation?: (((current: Node) => boolean | string) | null) | undefined): void;
52
+ /**
53
+ * @this {NodeTransformThis}
54
+ * @description Delete itself and all parent nodes that match the condition.
55
+ * - Returns an {sc: previousSibling, ec: nextSibling}(the deleted node reference) or null.
56
+ * @param {Node} item Node to be remove
57
+ * @param {?(current: Node) => boolean=} validation Validation function. default(Deleted if it only have breakLine and blanks)
58
+ * @param {?Node=} stopParent Stop when the parent node reaches stopParent
59
+ * @returns {{sc: Node|null, ec: Node|null}|null} {sc: previousSibling, ec: nextSibling} (the deleted node reference) or null.
60
+ */
61
+ removeAllParents(
62
+ this: Omit<NodeTransform & Partial<import('../../editorInjector').default>, 'nodeTransform'>,
63
+ item: Node,
64
+ validation?: (((current: Node) => boolean) | null) | undefined,
65
+ stopParent?: (Node | null) | undefined
66
+ ): {
67
+ sc: Node | null;
68
+ ec: Node | null;
69
+ } | null;
70
+ /**
71
+ * @this {NodeTransformThis}
72
+ * @description Delete a empty child node of argument element
73
+ * @param {Node} element Element node
74
+ * @param {?Node} notRemoveNode Do not remove node
75
+ * @param {boolean} forceDelete When all child nodes are deleted, the parent node is also deleted.
76
+ */
77
+ removeEmptyNode(this: Omit<NodeTransform & Partial<import('../../editorInjector').default>, 'nodeTransform'>, element: Node, notRemoveNode: Node | null, forceDelete: boolean): void;
78
+ /**
79
+ * @this {NodeTransformThis}
80
+ * @description Creates a nested node structure from the given array of nodes.
81
+ * @param {__se__NodeCollection} nodeArray An array of nodes to clone. The first node in the array will be the top-level parent.
82
+ * @param {?(current: Node) => boolean=} validate A validate function.
83
+ * @returns {{ parent: Node, inner: Node }} An object containing the top-level parent node and the innermost child node.
84
+ */
85
+ createNestedNode(
86
+ this: Omit<NodeTransform & Partial<import('../../editorInjector').default>, 'nodeTransform'>,
87
+ nodeArray: __se__NodeCollection,
88
+ validate?: (((current: Node) => boolean) | null) | undefined
89
+ ): {
90
+ parent: Node;
91
+ inner: Node;
92
+ };
93
+ }