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,222 @@
1
+ import EditorInjector from '../../editorInjector';
2
+ import { Controller } from '../../modules';
3
+ import { dom, env } from '../../helper';
4
+
5
+ const { _w } = env;
6
+
7
+ /**
8
+ * @class
9
+ * @description Anchor plugin
10
+ * - Allows you to create, edit, and delete elements that act as anchors (bookmarks) within a document.
11
+ */
12
+ class Anchor extends EditorInjector {
13
+ static key = 'anchor';
14
+ static type = 'popup';
15
+ static className = '';
16
+ /**
17
+ * @this {Anchor}
18
+ * @param {HTMLElement} node - The node to check.
19
+ * @returns {HTMLElement|null} Returns a node if the node is a valid component.
20
+ */
21
+ static component(node) {
22
+ return dom.check.isAnchor(node) && node.hasAttribute('id') && node.hasAttribute('data-se-anchor') ? node : null;
23
+ }
24
+
25
+ /**
26
+ * @constructor
27
+ * @param {__se__EditorCore} editor - The root editor instance
28
+ */
29
+ constructor(editor) {
30
+ super(editor);
31
+ // plugin basic properties
32
+ this.title = this.lang.anchor;
33
+ this.icon = 'bookmark_anchor';
34
+
35
+ // members
36
+ const parser = new DOMParser();
37
+ const svgDoc = parser.parseFromString(this.icons.bookmark_anchor, 'image/svg+xml');
38
+ this.bookmarkIcon = svgDoc.documentElement;
39
+ this._element = null;
40
+ this._range = null;
41
+
42
+ // controller
43
+ const controllerSelectEl = CreateHTML_controller_select(this);
44
+ this.displayId = controllerSelectEl.querySelector('.se-controller-display');
45
+ this.controllerSelect = new Controller(this, controllerSelectEl, { position: 'bottom', disabled: true }, Anchor.key);
46
+
47
+ const controllerEl = CreateHTML_controller(this);
48
+ this.inputEl = controllerEl.querySelector('input');
49
+ this.controller = new Controller(this, controllerEl, { position: 'bottom', disabled: true, parents: [this.controllerSelect.form], parentsHide: true }, Anchor.key);
50
+ }
51
+
52
+ /**
53
+ * @editorMethod Editor.Plugin<popup>
54
+ * @description Displays a popup and gives focus to the input field.
55
+ */
56
+ show() {
57
+ this.controller.open((this._range = this.selection.getRange()));
58
+ _w.setTimeout(() => {
59
+ this.inputEl.focus();
60
+ }, 0);
61
+ }
62
+
63
+ /**
64
+ * @editorMethod Editor.component
65
+ * @description Executes the method that is called when a component of a plugin is selected.
66
+ * @param {HTMLElement} target Target component element
67
+ */
68
+ select(target) {
69
+ this._element = target;
70
+ this.displayId.textContent = target.getAttribute('id');
71
+ this.controllerSelect.open(target);
72
+ }
73
+
74
+ /**
75
+ * @editorMethod Editor.Component
76
+ * @description Called when a container is deselected.
77
+ */
78
+ deselect() {
79
+ this._init();
80
+ }
81
+
82
+ /**
83
+ * @editorMethod Modules.Controller
84
+ * @description Executes the method that is called when a button is clicked in the "controller".
85
+ * @param {HTMLButtonElement} target Target button element
86
+ */
87
+ controllerAction(target) {
88
+ const command = target.getAttribute('data-command');
89
+ if (!command) return;
90
+ const currentElement = this._element;
91
+
92
+ switch (command) {
93
+ case 'submit': {
94
+ if (!currentElement) {
95
+ const id = this.inputEl.value.trim();
96
+ if (!id) {
97
+ this.inputEl.focus();
98
+ return;
99
+ }
100
+
101
+ const a = dom.utils.createElement('A', {
102
+ id,
103
+ 'data-se-anchor': this.inputEl.value,
104
+ 'data-se-non-link': 'true',
105
+ contenteditable: 'false',
106
+ class: 'se-component se-inline-component'
107
+ });
108
+
109
+ this.component.insert(a, { skipCharCount: false, skipSelection: true, skipHistory: false });
110
+
111
+ const r = this.selection.getNearRange(a);
112
+ if (r) {
113
+ this.selection.setRange(r.container, r.offset, r.container, r.offset);
114
+ } else {
115
+ this.component.select(a, Anchor.key);
116
+ }
117
+ this._init();
118
+ } else {
119
+ this.controller.close();
120
+ currentElement.id = this.inputEl.value;
121
+ this.select(currentElement);
122
+ }
123
+
124
+ break;
125
+ }
126
+ case 'cancel': {
127
+ this.controller.close(!currentElement);
128
+ if (this._range) {
129
+ this.selection.setRange(this._range);
130
+ }
131
+
132
+ this._init();
133
+ if (currentElement) {
134
+ this.select(currentElement);
135
+ }
136
+
137
+ break;
138
+ }
139
+ case 'edit': {
140
+ this.inputEl.value = this.displayId.textContent;
141
+ this.controllerSelect.hide();
142
+ this.controller.open(currentElement);
143
+
144
+ break;
145
+ }
146
+ case 'delete': {
147
+ const r = this.selection.getNearRange(currentElement);
148
+
149
+ dom.utils.removeItem(currentElement);
150
+ this.controllerSelect.close(true);
151
+
152
+ if (r) {
153
+ this.selection.setRange(r.container, r.offset, r.container, r.offset);
154
+ }
155
+
156
+ this._init();
157
+
158
+ break;
159
+ }
160
+ }
161
+ }
162
+
163
+ /**
164
+ * @private
165
+ * @description Initializes state variables.
166
+ * - called when the popup is closed
167
+ */
168
+ _init() {
169
+ this._element = null;
170
+ this._range = null;
171
+ this.inputEl.value = '';
172
+ this.displayId.textContent = '';
173
+ }
174
+ }
175
+
176
+ function CreateHTML_controller({ lang, icons }) {
177
+ const html = /*html*/ `
178
+ <div class="se-arrow se-arrow-up"></div>
179
+ <form>
180
+ <div class="se-controller-display">${lang.id}</div>
181
+ <div class="se-btn-group se-form-group">
182
+ <input type="text" required />
183
+ <button type="submit" data-command="submit" class="se-btn se-tooltip se-btn-success">
184
+ ${icons.checked}
185
+ <span class="se-tooltip-inner"><span class="se-tooltip-text">${lang.save}</span></span>
186
+ </button>
187
+ <button type="button" data-command="cancel" class="se-btn se-tooltip se-btn-danger">
188
+ ${icons.cancel}
189
+ <span class="se-tooltip-inner"><span class="se-tooltip-text">${lang.cancel}</span></span>
190
+ </button>
191
+ </div>
192
+ </form>
193
+ `;
194
+
195
+ return dom.utils.createElement('DIV', { class: 'se-controller se-controller-simple-input' }, html);
196
+ }
197
+
198
+ function CreateHTML_controller_select({ lang, icons }) {
199
+ const html = /*html*/ `
200
+ <div class="se-arrow se-arrow-up"></div>
201
+ <div class="link-content">
202
+ <div class="se-controller-display"></div>
203
+ <div class="se-btn-group">
204
+ <button type="button" data-command="edit" tabindex="-1" class="se-btn se-tooltip">
205
+ ${icons.edit}
206
+ <span class="se-tooltip-inner">
207
+ <span class="se-tooltip-text">${lang.edit}</span>
208
+ </span>
209
+ </button>
210
+ <button type="button" data-command="delete" tabindex="-1" class="se-btn se-tooltip">
211
+ ${icons.delete}
212
+ <span class="se-tooltip-inner">
213
+ <span class="se-tooltip-text">${lang.remove}</span>
214
+ </span>
215
+ </button>
216
+ </div>
217
+ </div>`;
218
+
219
+ return dom.utils.createElement('DIV', { class: 'se-controller se-controller-link' }, html);
220
+ }
221
+
222
+ export default Anchor;
package/src/suneditor.js CHANGED
@@ -6,18 +6,53 @@ import Langs from './langs';
6
6
  import Modules from './modules';
7
7
  import Helper from './helper';
8
8
 
9
- export const editorInjector = EditorInjector;
10
- export const plugins = Plugins;
11
- export const modules = Modules;
12
- export const langs = Langs;
13
- export const helper = Helper;
9
+ /**
10
+ * @module SunEditorExports
11
+ */
14
12
 
13
+ /**
14
+ * @typedef {import('./core/section/constructor').EditorFrameOptions} EditorFrameOptions_suneditor
15
+ */
16
+
17
+ /**
18
+ * @typedef {import('./core/section/constructor').EditorInitOptions} EditorInitOptions_suneditor
19
+ */
20
+
21
+ /**
22
+ * Editor Injector module, Inject "editor" and basic frequently used objects by calling it with "call(this, editor)".
23
+ */
24
+ export { EditorInjector };
25
+
26
+ /**
27
+ * Available editor plugins
28
+ */
29
+ export { Plugins };
30
+
31
+ /**
32
+ * Editor modules
33
+ */
34
+ export { Modules };
35
+
36
+ /**
37
+ * Language packs for the editor
38
+ */
39
+ export { Langs };
40
+
41
+ /**
42
+ * Helper functions for the editor
43
+ */
44
+ export { Helper };
45
+
46
+ /**
47
+ * SunEditor Factory Object
48
+ * @namespace SunEditor
49
+ */
15
50
  export default {
16
51
  /**
17
- * @description Returns the create function with preset options.
52
+ * Returns the create function with preset options.
18
53
  * If the options overlap, the options of the 'create' function take precedence.
19
- * @param {Json} options Initialization options
20
- * @returns {Object}
54
+ * @param {EditorInitOptions_suneditor} init_options - Initialization options
55
+ * @returns {{create: (targets: Element|Object<string, {target: Element, options: EditorFrameOptions_suneditor}>, options: EditorInitOptions_suneditor) => Editor}}}
21
56
  */
22
57
  init(init_options) {
23
58
  return {
@@ -26,10 +61,12 @@ export default {
26
61
  },
27
62
 
28
63
  /**
29
- * @description Create the suneditor
30
- * @param {string|Element|Array.<string|Element>} target textarea Id or textarea element
31
- * @param {JSON|Object} options user options
32
- * @returns {Object}
64
+ * Creates a new instance of the SunEditor
65
+ * @param {Element|Object<string, {target: Element, options: EditorFrameOptions_suneditor}>} target - Target element or multi-root object
66
+ * @param {EditorInitOptions_suneditor} options - Initialization options
67
+ * @param {EditorInitOptions_suneditor} [_init_options] - Optional preset initialization options
68
+ * @returns {Editor} - Instance of the SunEditor
69
+ * @throws {Error} If the target element is not provided or is invalid
33
70
  */
34
71
  create(target, options, _init_options) {
35
72
  if (typeof options !== 'object') options = {};
@@ -54,7 +91,7 @@ export default {
54
91
 
55
92
  const multiTargets = [];
56
93
  if (target.nodeType === 1) {
57
- multiTargets.push({ target: target });
94
+ multiTargets.push({ key: null, target: target });
58
95
  } else {
59
96
  let props;
60
97
  for (const key in target) {
@@ -0,0 +1,122 @@
1
+ .sun-editor.se-theme-dark,
2
+ .sun-editor-editable.se-theme-dark {
3
+ /** --------------------------- content - [colors] ----------- */
4
+ --se-caret-color: #ccc;
5
+ --se-placeholder-color: #64718c;
6
+ --se-edit-font-color: #ccc;
7
+ --se-edit-font-pre: #aaa;
8
+ --se-edit-font-quote: #888;
9
+ --se-edit-background-color: #0f1828;
10
+ --se-edit-background-pre: #364153;
11
+ --se-edit-border-light: #555;
12
+ --se-edit-border-dark: #444;
13
+ --se-edit-border-dark-n1: #555;
14
+ --se-edit-border-dark-n2: #666;
15
+ --se-edit-anchor: #77aaff;
16
+ --se-edit-anchor-on-back: #004cff;
17
+ --se-edit-anchor-on-font: #e8f7ff;
18
+ --se-edit-hr-color: #ccc;
19
+ --se-edit-hr-on-back: #77aaff;
20
+ --se-edit-active: #77aaff;
21
+ --se-edit-hover: #5599ff;
22
+ --se-edit-outline: #444;
23
+
24
+ /** --------------------------- layout - [colors] ----------- */
25
+ /** main, common */
26
+ --se-main-font-family: Helvetica Neue;
27
+ --se-main-out-color: #444;
28
+ --se-main-color: #ccc;
29
+ --se-main-color-lighter: #aaa;
30
+ --se-main-background-color: #0f1828;
31
+ --se-code-view-color: #030712;
32
+ --se-main-font-color: #ccc;
33
+ --se-code-view-background-color: #ddd;
34
+ --se-main-divider-color: #555;
35
+ --se-main-border-color: #666;
36
+ --se-main-outline-color: #444;
37
+ --se-main-shadow-color: #222;
38
+ --se-statusbar-font-color: #aaa;
39
+ --se-overlay-background-color: #111;
40
+
41
+ /* hover, active */
42
+ --se-active-color: #5cd2e6;
43
+ --se-active-dark-color: #3bb9cd;
44
+ --se-active-dark2-color: #2a9fb1;
45
+ --se-active-dark3-color: #5cd2e6;
46
+ --se-active-dark4-color: #3bb9cd;
47
+ --se-active-dark5-color: #197d91;
48
+ --se-active-light-color: #17303a;
49
+ --se-active-light2-color: #1e3f4d;
50
+ --se-active-light3-color: #255e6f;
51
+ --se-active-light4-color: #2c7d91;
52
+ --se-active-light5-color: #33aacc;
53
+ --se-active-light6-color: #3bd1f2;
54
+
55
+ /* [toolbar, menu, modal] layer - shadow */
56
+ --se-shadow-layer-color: rgba(0, 64, 128, 0.25);
57
+
58
+ /* drag */
59
+ --se-drag-over-color: #ffcc00;
60
+
61
+ /* modal, browser, dropdown */
62
+ --se-modal-background-color: #1c202a;
63
+ --se-modal-color: #ececec;
64
+ --se-modal-border-color: #555;
65
+ --se-modal-anchor-color: #77aaff;
66
+ --se-modal-preview-color: #aaa;
67
+ --se-modal-file-input-background-color: #232837;
68
+ --se-modal-input-disabled-color: #666;
69
+ --se-modal-input-disabled-background-color: #333;
70
+
71
+ /* dropdown, selectMenu */
72
+ --se-dropdown-font-color: #ccc;
73
+
74
+ /* controller */
75
+ --se-controller-border-color: #555;
76
+ --se-controller-background-color: #091025;
77
+ --se-controller-color: #ececec;
78
+ --se-shadow-controller-color: rgba(80, 200, 255, 0.2);
79
+
80
+ /* button : input-side */
81
+ --se-input-btn-border-color: #444;
82
+ --se-input-btn-disabled-color: #666;
83
+
84
+ /* success */
85
+ --se-success-color: #2cb67d;
86
+ --se-success-dark-color: #1f8f65;
87
+ --se-success-dark2-color: #186f4f;
88
+ --se-success-dark3-color: #125f44;
89
+ --se-success-light-color: #3dd9a5;
90
+ --se-success-light2-color: #57e2b7;
91
+ --se-success-light3-color: #8cf0ce;
92
+ --se-success-light4-color: #c1fae4;
93
+ --se-success-light5-color: #e9fef5;
94
+
95
+ /* error */
96
+ --se-error-color: #ef4444;
97
+ --se-error-dark-color: #991b1b;
98
+ --se-error-dark2-color: #7f1d1d;
99
+ --se-error-dark3-color: #651616;
100
+ --se-error-light-color: #f87171;
101
+ --se-error-light2-color: #fca5a5;
102
+ --se-error-light3-color: #fecaca;
103
+ --se-error-light4-color: #fee2e2;
104
+ --se-error-light5-color: #fef2f2;
105
+
106
+ /* document type */
107
+ --se-doc-background: #344153;
108
+ --se-doc-info-page-font-color: #0f1828;
109
+ --se-doc-info-page-background-color: #cfcfcf;
110
+ /* document type - font, active */
111
+ --se-doc-info-font-color: #cfcfcf;
112
+ --se-doc-info-active-color: #5599ff;
113
+
114
+ /* loading */
115
+ --se-loading-color: #77aaff;
116
+
117
+ /* show blocks */
118
+ --se-show-blocks-color: #5599ff;
119
+ --se-show-blocks-li-color: #d539ff;
120
+ --se-show-blocks-pre-color: #27c022;
121
+ --se-show-blocks-component-color: #f4b124;
122
+ }
package/src/typedef.js ADDED
@@ -0,0 +1,130 @@
1
+ /**
2
+ * @fileoverview Global Type Declarations for SunEditor Custom Types
3
+ */
4
+
5
+ // --------------------------------------------------------- [Node] ---------------------------------------------------------------------------------------------------
6
+ /**
7
+ * @typedef {Array<Node>|HTMLCollection|NodeList} __se__NodeCollection
8
+ */
9
+
10
+ // --------------------------------------------------------- [Editor] ---------------------------------------------------------------------------------------------------
11
+ /**
12
+ * @typedef {import('./core/editor').default} __se__EditorCore
13
+ */
14
+
15
+ /**
16
+ * @typedef {import('./editorInjector').default} __se__EditorInjector
17
+ */
18
+
19
+ /**
20
+ * @typedef {import('./editorInjector/_core').default} __se__CoreInjector
21
+ */
22
+
23
+ /**
24
+ * @typedef {Object} __se__ComponentInfo
25
+ * @property {HTMLElement} target - The target element associated with the component.
26
+ * @property {string} pluginName - The name of the plugin related to the component.
27
+ * @property {Object<string, *>} options - Options related to the component.
28
+ * @property {HTMLElement} container - The main container element for the component.
29
+ * @property {?HTMLElement} cover - The cover element, if applicable.
30
+ * @property {?HTMLElement} inlineCover - The inline cover element, if applicable.
31
+ * @property {?HTMLElement} caption - The caption element, if applicable.
32
+ * @property {boolean} isFile - Whether the component is a file-related component.
33
+ * @property {?HTMLElement} launcher - The element that triggered the component, if applicable.
34
+ * @property {boolean} isInputType - Whether the component is an input component (e.g., table).
35
+ */
36
+
37
+ /**
38
+ * @typedef {Object} __se__EditorStatus
39
+ * @property {boolean} hasFocus Boolean value of whether the editor has focus
40
+ * @property {number} tabSize Indent size of tab (4)
41
+ * @property {number} indentSize Indent size (25)px
42
+ * @property {number} codeIndentSize Indent size of Code view mode (2)
43
+ * @property {Array<string>} currentNodes An element array of the current cursor's node structure
44
+ * @property {Array<string>} currentNodesMap An element name array of the current cursor's node structure
45
+ * @property {boolean} onSelected Boolean value of whether component is selected
46
+ * @property {number} rootKey Current root key
47
+ * @property {Range} _range Current range object
48
+ * @property {boolean} _onMousedown Mouse down event status
49
+ */
50
+
51
+ // --------------------------------------------------------- [Event] ---------------------------------------------------------------------------------------------------
52
+ /**
53
+ * @typedef {Object} __se__EventInfo
54
+ * @property {*} target Target element
55
+ * @property {string} type Event type
56
+ * @property {(...args: *) => *} listener Event listener
57
+ * @property {boolean|AddEventListenerOptions=} useCapture Event useCapture option
58
+ */
59
+
60
+ /**
61
+ * @typedef {Object} __se__GlobalEventInfo
62
+ * @property {string} type Event type
63
+ * @property {(...args: *) => *} listener Event listener
64
+ * @property {boolean|AddEventListenerOptions=} useCapture Use event capture
65
+ */
66
+
67
+ // --------------------------------------------------------- [Plugin Event] ---------------------------------------------------------------------------------------------------
68
+ /**
69
+ * @typedef {Object} __se__PluginMouseEventInfo
70
+ * @property {__se__FrameContext} frameContext Frame context
71
+ * @property {MouseEvent} event Event object
72
+ */
73
+
74
+ /**
75
+ * @typedef {Object} __se__PluginKeyEventInfo
76
+ * @property {__se__FrameContext} frameContext Frame context
77
+ * @property {KeyboardEvent} event Event object
78
+ * @property {Range} range range object
79
+ * @property {HTMLElement} line Current line element
80
+ */
81
+
82
+ /**
83
+ * @typedef {Object} __se__PluginToolbarInputChangeEventInfo
84
+ * @property {HTMLElement} target Input element
85
+ * @property {Event} event Event object
86
+ * @property {string} value Input value
87
+ */
88
+
89
+ /**
90
+ * @typedef {Object} __se__PluginShortcutInfo Information of the "shortcut" plugin
91
+ * @property {Range} range - Range object
92
+ * @property {HTMLElement} line - The line element of the current range
93
+ * @property {import('./core/class/shortcuts').ShortcutInfo} info - Information of the shortcut
94
+ * @property {KeyboardEvent} event - Key event object
95
+ * @property {string} keyCode - KeyBoardEvent.code
96
+ * @property {__se__EditorCore} editor - The root editor instance
97
+ */
98
+
99
+ /**
100
+ * @typedef {Object} __se__PluginPasteParams
101
+ * @property {__se__FrameContext} frameContext Frame context
102
+ * @property {ClipboardEvent} event Clipboard event object
103
+ * @property {string} data Format cleaned paste data (HTML string)
104
+ * @property {Document} doc DomParser data (new DOMParser().parseFromString(data, 'text/html');)
105
+ */
106
+
107
+ /**
108
+ * @typedef {Object} __se__PluginCopyComponentParams
109
+ * @property {ClipboardEvent} event Clipboard event object
110
+ * @property {HTMLElement} cloneContainer Cloned component container
111
+ * @property {__se__ComponentInfo} info Component information
112
+ */
113
+
114
+ // --------------------------------------------------------- [Context] ---------------------------------------------------------------------------------------------------
115
+ /**
116
+ * @typedef {Map<string, *>} __se__FrameOptions
117
+ */
118
+
119
+ /**
120
+ * @typedef {Map<string, *>} __se__FrameContext
121
+ */
122
+
123
+ /**
124
+ * @typedef {Map<string, *>} __se__Context
125
+ */
126
+
127
+ // --------------------------------------------------------- [core.class] ---------------------------------------------------------------------------------------------------
128
+ /**
129
+ * @typedef {import('./core/class/offset').OffsetGlobalInfo} __se__Class_OffsetGlobalInfo
130
+ */