suneditor 3.0.0-rc.4 → 3.0.0
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.
- package/README.md +4 -3
- package/dist/suneditor-contents.min.css +1 -1
- package/dist/suneditor.min.css +1 -1
- package/dist/suneditor.min.js +1 -1
- package/package.json +10 -6
- package/src/assets/design/color.css +14 -2
- package/src/assets/design/typography.css +5 -0
- package/src/assets/icons/defaultIcons.js +22 -4
- package/src/assets/suneditor-contents.css +1 -1
- package/src/assets/suneditor.css +312 -18
- package/src/core/config/eventManager.js +6 -9
- package/src/core/editor.js +1 -1
- package/src/core/event/actions/index.js +5 -0
- package/src/core/event/effects/keydown.registry.js +25 -0
- package/src/core/event/eventOrchestrator.js +69 -2
- package/src/core/event/handlers/handler_ww_mouse.js +1 -0
- package/src/core/event/rules/keydown.rule.backspace.js +9 -1
- package/src/core/kernel/coreKernel.js +4 -0
- package/src/core/kernel/store.js +2 -0
- package/src/core/logic/dom/char.js +11 -0
- package/src/core/logic/dom/format.js +22 -0
- package/src/core/logic/dom/html.js +126 -11
- package/src/core/logic/dom/nodeTransform.js +13 -0
- package/src/core/logic/dom/offset.js +100 -37
- package/src/core/logic/dom/selection.js +54 -22
- package/src/core/logic/panel/finder.js +982 -0
- package/src/core/logic/panel/menu.js +8 -6
- package/src/core/logic/panel/toolbar.js +112 -19
- package/src/core/logic/panel/viewer.js +214 -43
- package/src/core/logic/shell/_commandExecutor.js +7 -1
- package/src/core/logic/shell/commandDispatcher.js +1 -1
- package/src/core/logic/shell/component.js +5 -7
- package/src/core/logic/shell/history.js +24 -0
- package/src/core/logic/shell/shortcuts.js +3 -3
- package/src/core/logic/shell/ui.js +25 -26
- package/src/core/schema/frameContext.js +15 -1
- package/src/core/schema/options.js +180 -39
- package/src/core/section/constructor.js +61 -20
- package/src/core/section/documentType.js +2 -2
- package/src/events.js +12 -0
- package/src/helper/clipboard.js +1 -1
- package/src/helper/converter.js +15 -0
- package/src/helper/dom/domQuery.js +12 -0
- package/src/helper/dom/domUtils.js +26 -14
- package/src/helper/index.js +3 -0
- package/src/helper/markdown.js +876 -0
- package/src/interfaces/plugins.js +7 -5
- package/src/langs/ckb.js +9 -0
- package/src/langs/cs.js +9 -0
- package/src/langs/da.js +9 -0
- package/src/langs/de.js +9 -0
- package/src/langs/en.js +9 -0
- package/src/langs/es.js +9 -0
- package/src/langs/fa.js +9 -0
- package/src/langs/fr.js +9 -0
- package/src/langs/he.js +9 -0
- package/src/langs/hu.js +9 -0
- package/src/langs/it.js +9 -0
- package/src/langs/ja.js +9 -0
- package/src/langs/km.js +9 -0
- package/src/langs/ko.js +9 -0
- package/src/langs/lv.js +9 -0
- package/src/langs/nl.js +9 -0
- package/src/langs/pl.js +9 -0
- package/src/langs/pt_br.js +9 -0
- package/src/langs/ro.js +9 -0
- package/src/langs/ru.js +9 -0
- package/src/langs/se.js +9 -0
- package/src/langs/tr.js +9 -0
- package/src/langs/uk.js +9 -0
- package/src/langs/ur.js +9 -0
- package/src/langs/zh_cn.js +9 -0
- package/src/modules/contract/Browser.js +31 -1
- package/src/modules/contract/ColorPicker.js +6 -0
- package/src/modules/contract/Controller.js +77 -39
- package/src/modules/contract/Figure.js +57 -0
- package/src/modules/contract/Modal.js +6 -0
- package/src/modules/manager/ApiManager.js +53 -4
- package/src/modules/manager/FileManager.js +18 -1
- package/src/modules/ui/ModalAnchorEditor.js +35 -2
- package/src/modules/ui/SelectMenu.js +44 -12
- package/src/plugins/browser/fileBrowser.js +5 -2
- package/src/plugins/command/codeBlock.js +324 -0
- package/src/plugins/command/exportPDF.js +15 -3
- package/src/plugins/command/fileUpload.js +4 -1
- package/src/plugins/dropdown/backgroundColor.js +5 -1
- package/src/plugins/dropdown/blockStyle.js +8 -2
- package/src/plugins/dropdown/fontColor.js +5 -1
- package/src/plugins/dropdown/hr.js +6 -0
- package/src/plugins/dropdown/layout.js +4 -1
- package/src/plugins/dropdown/lineHeight.js +3 -0
- package/src/plugins/dropdown/paragraphStyle.js +5 -5
- package/src/plugins/dropdown/table/index.js +4 -1
- package/src/plugins/dropdown/table/render/table.html.js +1 -1
- package/src/plugins/dropdown/table/services/table.grid.js +16 -8
- package/src/plugins/dropdown/table/services/table.style.js +5 -9
- package/src/plugins/dropdown/template.js +3 -0
- package/src/plugins/dropdown/textStyle.js +5 -1
- package/src/plugins/field/mention.js +5 -1
- package/src/plugins/index.js +3 -0
- package/src/plugins/input/fontSize.js +10 -3
- package/src/plugins/modal/audio.js +7 -3
- package/src/plugins/modal/embed.js +23 -20
- package/src/plugins/modal/image/index.js +5 -1
- package/src/plugins/modal/math.js +7 -2
- package/src/plugins/modal/video/index.js +21 -4
- package/src/themes/cobalt.css +13 -4
- package/src/themes/cream.css +11 -2
- package/src/themes/dark.css +13 -4
- package/src/themes/midnight.css +13 -4
- package/src/typedef.js +4 -4
- package/types/assets/icons/defaultIcons.d.ts +12 -1
- package/types/assets/suneditor.css.d.ts +1 -1
- package/types/core/config/eventManager.d.ts +6 -8
- package/types/core/event/actions/index.d.ts +1 -0
- package/types/core/event/effects/keydown.registry.d.ts +2 -0
- package/types/core/event/eventOrchestrator.d.ts +2 -1
- package/types/core/kernel/coreKernel.d.ts +5 -0
- package/types/core/kernel/store.d.ts +5 -0
- package/types/core/logic/dom/char.d.ts +11 -0
- package/types/core/logic/dom/format.d.ts +22 -0
- package/types/core/logic/dom/html.d.ts +16 -0
- package/types/core/logic/dom/nodeTransform.d.ts +13 -0
- package/types/core/logic/dom/offset.d.ts +23 -2
- package/types/core/logic/dom/selection.d.ts +9 -3
- package/types/core/logic/panel/finder.d.ts +83 -0
- package/types/core/logic/panel/toolbar.d.ts +14 -1
- package/types/core/logic/panel/viewer.d.ts +22 -2
- package/types/core/logic/shell/shortcuts.d.ts +1 -1
- package/types/core/schema/frameContext.d.ts +22 -0
- package/types/core/schema/options.d.ts +362 -79
- package/types/events.d.ts +11 -0
- package/types/helper/converter.d.ts +15 -0
- package/types/helper/dom/domQuery.d.ts +12 -0
- package/types/helper/dom/domUtils.d.ts +23 -2
- package/types/helper/index.d.ts +5 -0
- package/types/helper/markdown.d.ts +27 -0
- package/types/interfaces/plugins.d.ts +7 -5
- package/types/langs/_Lang.d.ts +9 -0
- package/types/modules/contract/Browser.d.ts +36 -2
- package/types/modules/contract/ColorPicker.d.ts +6 -0
- package/types/modules/contract/Controller.d.ts +35 -1
- package/types/modules/contract/Figure.d.ts +57 -0
- package/types/modules/contract/Modal.d.ts +6 -0
- package/types/modules/manager/ApiManager.d.ts +26 -0
- package/types/modules/manager/FileManager.d.ts +17 -0
- package/types/modules/ui/ModalAnchorEditor.d.ts +41 -4
- package/types/modules/ui/SelectMenu.d.ts +40 -2
- package/types/plugins/browser/fileBrowser.d.ts +10 -4
- package/types/plugins/command/codeBlock.d.ts +53 -0
- package/types/plugins/command/fileUpload.d.ts +8 -2
- package/types/plugins/dropdown/backgroundColor.d.ts +10 -2
- package/types/plugins/dropdown/blockStyle.d.ts +14 -2
- package/types/plugins/dropdown/fontColor.d.ts +10 -2
- package/types/plugins/dropdown/hr.d.ts +12 -0
- package/types/plugins/dropdown/layout.d.ts +8 -2
- package/types/plugins/dropdown/lineHeight.d.ts +6 -0
- package/types/plugins/dropdown/paragraphStyle.d.ts +14 -3
- package/types/plugins/dropdown/table/index.d.ts +9 -3
- package/types/plugins/dropdown/template.d.ts +6 -0
- package/types/plugins/dropdown/textStyle.d.ts +10 -2
- package/types/plugins/field/mention.d.ts +10 -2
- package/types/plugins/index.d.ts +3 -0
- package/types/plugins/input/fontSize.d.ts +18 -4
- package/types/plugins/modal/audio.d.ts +14 -6
- package/types/plugins/modal/embed.d.ts +44 -38
- package/types/plugins/modal/image/index.d.ts +9 -1
- package/types/plugins/modal/link.d.ts +6 -2
- package/types/plugins/modal/math.d.ts +23 -5
- package/types/plugins/modal/video/index.d.ts +49 -9
- package/types/typedef.d.ts +5 -2
package/src/helper/converter.js
CHANGED
|
@@ -114,6 +114,8 @@ export function jsonToHtml(jsonData) {
|
|
|
114
114
|
* @description Convert HTML string to HTML Entity
|
|
115
115
|
* @param {string} content
|
|
116
116
|
* @returns {string} Content string
|
|
117
|
+
* @example
|
|
118
|
+
* converter.htmlToEntity('<div>'); // '<div>'
|
|
117
119
|
*/
|
|
118
120
|
export function htmlToEntity(content) {
|
|
119
121
|
return content.replace(_RE_HTML_CHARS, (m) => {
|
|
@@ -125,6 +127,8 @@ export function htmlToEntity(content) {
|
|
|
125
127
|
* @description Convert HTML Entity to HTML string
|
|
126
128
|
* @param {string} content Content string
|
|
127
129
|
* @returns {string}
|
|
130
|
+
* @example
|
|
131
|
+
* converter.entityToHTML('<div>'); // '<div>'
|
|
128
132
|
*/
|
|
129
133
|
export function entityToHTML(content) {
|
|
130
134
|
return content.replace(_RE_HTML_ENTITIES, (m) => {
|
|
@@ -137,6 +141,9 @@ export function entityToHTML(content) {
|
|
|
137
141
|
* @param {(...args: *) => void} func function
|
|
138
142
|
* @param {number} wait delay ms
|
|
139
143
|
* @returns {*} executedFunction
|
|
144
|
+
* @example
|
|
145
|
+
* const debouncedSave = converter.debounce(() => save(), 300);
|
|
146
|
+
* input.addEventListener('input', debouncedSave);
|
|
140
147
|
*/
|
|
141
148
|
export function debounce(func, wait) {
|
|
142
149
|
let timeout;
|
|
@@ -206,6 +213,9 @@ export function getValues(obj) {
|
|
|
206
213
|
/**
|
|
207
214
|
* @description Convert the `CamelCase` To the `KebabCase`.
|
|
208
215
|
* @param {string|Array<string>} param [Camel string]
|
|
216
|
+
* @example
|
|
217
|
+
* converter.camelToKebabCase('fontSize'); // 'font-size'
|
|
218
|
+
* converter.camelToKebabCase(['fontSize', 'fontFamily']); // ['font-size', 'font-family']
|
|
209
219
|
*/
|
|
210
220
|
export function camelToKebabCase(param) {
|
|
211
221
|
if (typeof param === 'string') {
|
|
@@ -226,6 +236,8 @@ export function camelToKebabCase(param) {
|
|
|
226
236
|
* @overload
|
|
227
237
|
* @param {Array<string>} param - Array of `Kebab-case` strings.
|
|
228
238
|
* @returns {Array<string>} Array of `CamelCase` strings.
|
|
239
|
+
* @example
|
|
240
|
+
* converter.kebabToCamelCase('font-size'); // 'fontSize'
|
|
229
241
|
*/
|
|
230
242
|
export function kebabToCamelCase(param) {
|
|
231
243
|
if (typeof param === 'string') {
|
|
@@ -334,6 +346,9 @@ export function isHexColor(str) {
|
|
|
334
346
|
* @description Function to convert hex format to a `rgb` color
|
|
335
347
|
* @param {string} rgba RGBA color format
|
|
336
348
|
* @returns {string}
|
|
349
|
+
* @example
|
|
350
|
+
* converter.rgb2hex('rgb(255, 0, 0)'); // '#ff0000'
|
|
351
|
+
* converter.rgb2hex('rgba(255, 0, 0, 0.5)'); // '#ff000080'
|
|
337
352
|
*/
|
|
338
353
|
export function rgb2hex(rgba) {
|
|
339
354
|
if (isHexColor(rgba) || !rgba) return rgba;
|
|
@@ -75,6 +75,8 @@ export function getNodePath(node, parentNode, _newOffsets) {
|
|
|
75
75
|
* @param {Array<number>} offsets Position array, array obtained from `helper.dom.getNodePath`
|
|
76
76
|
* @param {Node} parentNode Base parent element
|
|
77
77
|
* @returns {T}
|
|
78
|
+
* @example
|
|
79
|
+
* const node = dom.query.getNodeFromPath([0, 1, 0], wysiwygElement);
|
|
78
80
|
*/
|
|
79
81
|
export function getNodeFromPath(offsets, parentNode) {
|
|
80
82
|
let current = parentNode;
|
|
@@ -170,6 +172,8 @@ export function getListChildren(element, validation, depth) {
|
|
|
170
172
|
* @param {?(current: *) => boolean} validation Conditional function
|
|
171
173
|
* @param {?number} depth Number of child levels to depth.
|
|
172
174
|
* @returns {Array<T>}
|
|
175
|
+
* @example
|
|
176
|
+
* const allNodes = dom.query.getListChildNodes(container, (node) => node.nodeType === 3);
|
|
173
177
|
*/
|
|
174
178
|
export function getListChildNodes(element, validation, depth) {
|
|
175
179
|
const children = [];
|
|
@@ -221,6 +225,8 @@ export function getNodeDepth(node) {
|
|
|
221
225
|
* @description Sort a node array by depth of element.
|
|
222
226
|
* @param {Array<Node>} array Node array
|
|
223
227
|
* @param {boolean} des `true`: descending order / `false`: ascending order
|
|
228
|
+
* @example
|
|
229
|
+
* const sorted = dom.query.sortNodeByDepth([nodeA, nodeB], true);
|
|
224
230
|
*/
|
|
225
231
|
export function sortNodeByDepth(array, des) {
|
|
226
232
|
const t = !des ? -1 : 1;
|
|
@@ -239,6 +245,9 @@ export function sortNodeByDepth(array, des) {
|
|
|
239
245
|
* @param {Node} a Node to compare.
|
|
240
246
|
* @param {Node} b Node to compare.
|
|
241
247
|
* @returns {{ancestor: ?HTMLElement, a: Node, b: Node, result: number}} { ancesstor, a, b, result: (a > b ? 1 : a < b ? -1 : 0) };
|
|
248
|
+
* @example
|
|
249
|
+
* const result = dom.query.compareElements(nodeA, nodeB);
|
|
250
|
+
* // result: { ancestor: true, result: 0 } (same node), { ancestor: true, result: 1 } (a before b)
|
|
242
251
|
*/
|
|
243
252
|
export function compareElements(a, b) {
|
|
244
253
|
let aNode = a,
|
|
@@ -439,6 +448,9 @@ export function getEventTarget(event) {
|
|
|
439
448
|
* Not use it like jquery.
|
|
440
449
|
* Only one condition can be entered at a time.
|
|
441
450
|
* @returns {T|null} Not found: `null`
|
|
451
|
+
* @example
|
|
452
|
+
* const firstLeaf = dom.query.getEdgeChild(container, (n) => n.nodeType === 3, false);
|
|
453
|
+
* const lastLeaf = dom.query.getEdgeChild(container, (n) => n.nodeType === 3, true);
|
|
442
454
|
*/
|
|
443
455
|
export function getEdgeChild(node, query, last) {
|
|
444
456
|
let valid;
|
|
@@ -107,6 +107,8 @@ export function createTextNode(text) {
|
|
|
107
107
|
* @param {Node} element Element object
|
|
108
108
|
* @param {?Array<string>} exceptAttrs Array of attribute names to exclude from the result
|
|
109
109
|
* @returns {string}
|
|
110
|
+
* @example
|
|
111
|
+
* const attrs = dom.utils.getAttributesToString(element, ['id', 'class']);
|
|
110
112
|
*/
|
|
111
113
|
export function getAttributesToString(element, exceptAttrs) {
|
|
112
114
|
const attrs = /** @type {HTMLElement} */ (element).attributes;
|
|
@@ -227,6 +229,8 @@ export function prevIndex(array, item) {
|
|
|
227
229
|
* @param {Node} originEl Origin element
|
|
228
230
|
* @param {Node} copyEl Element to copy
|
|
229
231
|
* @param {?Array<string>} [blacklist] Blacklist array(LowerCase)
|
|
232
|
+
* @example
|
|
233
|
+
* dom.utils.copyTagAttributes(newElement, originalElement, ['contenteditable']);
|
|
230
234
|
*/
|
|
231
235
|
export function copyTagAttributes(originEl, copyEl, blacklist) {
|
|
232
236
|
const o = /** @type {HTMLElement} */ (originEl);
|
|
@@ -271,6 +275,9 @@ export function removeItem(item) {
|
|
|
271
275
|
* @description Replace element
|
|
272
276
|
* @param {Node} element Target element
|
|
273
277
|
* @param {string|Node} newElement String or element of the new element to apply
|
|
278
|
+
* @example
|
|
279
|
+
* dom.utils.changeElement(oldSpan, 'STRONG');
|
|
280
|
+
* dom.utils.changeElement(oldElement, newElement);
|
|
274
281
|
*/
|
|
275
282
|
export function changeElement(element, newElement) {
|
|
276
283
|
if (!element) return;
|
|
@@ -303,6 +310,9 @@ export function changeTxt(node, txt) {
|
|
|
303
310
|
* @param {Node|Node[]} elements Element to set style
|
|
304
311
|
* @param {string} styleName Style attribute name (`marginLeft`, `textAlign`...)
|
|
305
312
|
* @param {string|number} value Style value
|
|
313
|
+
* @example
|
|
314
|
+
* dom.utils.setStyle(element, 'color', 'red');
|
|
315
|
+
* dom.utils.setStyle([el1, el2], 'display', 'none');
|
|
306
316
|
*/
|
|
307
317
|
export function setStyle(elements, styleName, value) {
|
|
308
318
|
elements = Array.isArray(elements) ? elements : [elements];
|
|
@@ -358,13 +368,17 @@ export function setDisabled(buttonList, disabled, important) {
|
|
|
358
368
|
*/
|
|
359
369
|
export function hasClass(element, className) {
|
|
360
370
|
if (!element || element.nodeType !== 1) return;
|
|
361
|
-
|
|
371
|
+
|
|
372
|
+
return className.split('|').some((cls) => /** @type {HTMLElement} */ (element).classList.contains(cls));
|
|
362
373
|
}
|
|
363
374
|
|
|
364
375
|
/**
|
|
365
376
|
* @description Append the className value of the argument value element
|
|
366
377
|
* @param {Node|SunEditor.NodeCollection} element Elements to add class name
|
|
367
378
|
* @param {string} className Class name to be add
|
|
379
|
+
* @example
|
|
380
|
+
* dom.utils.addClass(element, 'active');
|
|
381
|
+
* dom.utils.addClass(element.children, 'highlight');
|
|
368
382
|
*/
|
|
369
383
|
export function addClass(element, className) {
|
|
370
384
|
if (!element) return;
|
|
@@ -385,6 +399,8 @@ export function addClass(element, className) {
|
|
|
385
399
|
* @description Delete the className value of the argument value element
|
|
386
400
|
* @param {Node|SunEditor.NodeCollection} element Elements to remove class name
|
|
387
401
|
* @param {string} className Class name to be remove
|
|
402
|
+
* @example
|
|
403
|
+
* dom.utils.removeClass(element, 'active');
|
|
388
404
|
*/
|
|
389
405
|
export function removeClass(element, className) {
|
|
390
406
|
if (!element) return;
|
|
@@ -405,25 +421,15 @@ export function removeClass(element, className) {
|
|
|
405
421
|
* @description Argument value If there is no class name, insert it and delete the class name if it exists
|
|
406
422
|
* @param {Node} element Element to replace class name
|
|
407
423
|
* @param {string} className Class name to be change
|
|
408
|
-
* @
|
|
424
|
+
* @param {boolean} [force] If true, adds the class; if false, removes it.
|
|
409
425
|
*/
|
|
410
|
-
export function toggleClass(element, className) {
|
|
426
|
+
export function toggleClass(element, className, force) {
|
|
411
427
|
if (!element || element.nodeType !== 1) return;
|
|
412
428
|
|
|
413
429
|
const el = /** @type {HTMLElement} */ (element);
|
|
414
|
-
|
|
415
|
-
let result = false;
|
|
416
|
-
const valid = new RegExp(`(\\s|^)${className}(\\s|$)`);
|
|
417
|
-
if (valid.test(el.className)) {
|
|
418
|
-
el.className = el.className.replace(valid, ' ').trim();
|
|
419
|
-
} else {
|
|
420
|
-
el.className += ' ' + className;
|
|
421
|
-
result = true;
|
|
422
|
-
}
|
|
430
|
+
el.classList.toggle(className, force);
|
|
423
431
|
|
|
424
432
|
if (!el.className.trim()) el.removeAttribute('class');
|
|
425
|
-
|
|
426
|
-
return result;
|
|
427
433
|
}
|
|
428
434
|
|
|
429
435
|
/**
|
|
@@ -431,6 +437,8 @@ export function toggleClass(element, className) {
|
|
|
431
437
|
* @param {Node} element Element to flash class name
|
|
432
438
|
* @param {string} className class name
|
|
433
439
|
* @param {number} [duration=120] duration milliseconds
|
|
440
|
+
* @example
|
|
441
|
+
* dom.utils.flashClass(element, 'blink', 500);
|
|
434
442
|
*/
|
|
435
443
|
export function flashClass(element, className, duration = 120) {
|
|
436
444
|
addClass(element, className);
|
|
@@ -477,6 +485,8 @@ export function getViewportSize() {
|
|
|
477
485
|
* @param {boolean} includeWW Include the `wwTarget` element in the copy
|
|
478
486
|
* @param {Iterable<string>} styles Style list - kamel case
|
|
479
487
|
* @returns
|
|
488
|
+
* @example
|
|
489
|
+
* dom.utils.applyInlineStylesAll(wysiwygElement, true, ['font-family', 'font-size']);
|
|
480
490
|
*/
|
|
481
491
|
export function applyInlineStylesAll(wwTarget, includeWW, styles) {
|
|
482
492
|
if (!wwTarget) {
|
|
@@ -525,6 +535,8 @@ export function applyInlineStylesAll(wwTarget, includeWW, styles) {
|
|
|
525
535
|
* @param {Node} target Target element
|
|
526
536
|
* @param {number} timeout Timeout milliseconds
|
|
527
537
|
* @returns {Promise<void>}
|
|
538
|
+
* @example
|
|
539
|
+
* await dom.utils.waitForMediaLoad(imgElement, 5000);
|
|
528
540
|
*/
|
|
529
541
|
export function waitForMediaLoad(target, timeout = 5000) {
|
|
530
542
|
const doc = /** @type {HTMLElement|Document} */ (target || _d);
|
package/src/helper/index.js
CHANGED
|
@@ -5,6 +5,7 @@ import Dom from './dom';
|
|
|
5
5
|
import Numbers from './numbers';
|
|
6
6
|
import KeyCodeMap from './keyCodeMap';
|
|
7
7
|
import Clipboard from './clipboard';
|
|
8
|
+
import Markdown from './markdown';
|
|
8
9
|
|
|
9
10
|
export const env = Env;
|
|
10
11
|
export const unicode = Unicode;
|
|
@@ -13,6 +14,7 @@ export const dom = Dom;
|
|
|
13
14
|
export const numbers = Numbers;
|
|
14
15
|
export const keyCodeMap = KeyCodeMap;
|
|
15
16
|
export const clipboard = Clipboard;
|
|
17
|
+
export const markdown = Markdown;
|
|
16
18
|
|
|
17
19
|
export default {
|
|
18
20
|
env,
|
|
@@ -22,4 +24,5 @@ export default {
|
|
|
22
24
|
numbers,
|
|
23
25
|
keyCodeMap,
|
|
24
26
|
clipboard,
|
|
27
|
+
markdown,
|
|
25
28
|
};
|