vue-editify 0.1.24 → 0.1.26

Sign up to get free protection for your applications and to get access to all the features.
package/examples/App.vue CHANGED
@@ -21,7 +21,7 @@ const menuConfig = ref<MenuConfigType>({
21
21
 
22
22
  const plugins = ref<PluginType[]>([
23
23
  attachment({
24
- leftBorder: true
24
+ multiple: true
25
25
  })
26
26
  ])
27
27
  </script>
@@ -128,7 +128,6 @@ declare const _default: import('vue').DefineComponent<{
128
128
  customFilePaste: ((file: File) => void | Promise<void>) | null;
129
129
  customMerge: ((mergeElement: AlexElement, targetElement: AlexElement) => void | Promise<void>) | null;
130
130
  customParseNode: ((el: AlexElement) => AlexElement) | null;
131
- useClipboard: boolean;
132
131
  history: {
133
132
  records: {
134
133
  stack: {
@@ -419,14 +418,6 @@ declare const _default: import('vue').DefineComponent<{
419
418
  __innerSelectionChange: boolean;
420
419
  __chineseInputTimer: any;
421
420
  initRange: () => void;
422
- copy: (isCut?: boolean | undefined) => Promise<{
423
- text: string;
424
- html: string;
425
- } | undefined>;
426
- cut: () => Promise<{
427
- text: string;
428
- html: string;
429
- } | undefined>;
430
421
  delete: () => void;
431
422
  insertText: (data: string) => void;
432
423
  insertParagraph: () => void;
package/lib/editify.es.js CHANGED
@@ -1494,17 +1494,6 @@ const isContains = function(parentNode, childNode) {
1494
1494
  }
1495
1495
  return element$1.isContains(parentNode, childNode);
1496
1496
  };
1497
- const canUseClipboard = function() {
1498
- if (!window.ClipboardItem) {
1499
- console.warn("window.ClipboardItem must be obtained in a secure environment, such as localhost, 127.0.0.1, or https, so the editor's copy, paste, and cut functions cannot be used");
1500
- return false;
1501
- }
1502
- if (!navigator.clipboard) {
1503
- console.warn("navigator.clipboard must be obtained in a secure environment, such as localhost, 127.0.0.1, or https, so the editor's copy, paste, and cut functions cannot be used");
1504
- return false;
1505
- }
1506
- return true;
1507
- };
1508
1497
  const initEditorNode = function(node) {
1509
1498
  if (typeof node == "string" && node) {
1510
1499
  node = document.body.querySelector(node);
@@ -2466,73 +2455,6 @@ const breakFormat = function(element2) {
2466
2455
  }
2467
2456
  }
2468
2457
  };
2469
- const mergeWithParentElement = function(element2) {
2470
- const canMerge = (parent, child) => {
2471
- if (child.isText() && parent.isInline()) {
2472
- return parent.parsedom == AlexElement.TEXT_NODE;
2473
- }
2474
- if (parent.isInline() && child.isInline() || parent.isInblock() && child.isInblock()) {
2475
- return parent.parsedom == child.parsedom;
2476
- }
2477
- return false;
2478
- };
2479
- const merge = (parent, child) => {
2480
- if (child.isText()) {
2481
- parent.type = "text";
2482
- parent.parsedom = null;
2483
- if (child.hasMarks()) {
2484
- if (parent.hasMarks()) {
2485
- Object.assign(parent.marks, cloneData$1(child.marks));
2486
- } else {
2487
- parent.marks = cloneData$1(child.marks);
2488
- }
2489
- }
2490
- if (child.hasStyles()) {
2491
- if (parent.hasStyles()) {
2492
- Object.assign(parent.styles, cloneData$1(child.styles));
2493
- } else {
2494
- parent.styles = cloneData$1(child.styles);
2495
- }
2496
- }
2497
- parent.textContent = child.textContent;
2498
- parent.children = null;
2499
- if (this.range && child.isContains(this.range.anchor.element)) {
2500
- this.range.anchor.element = parent;
2501
- }
2502
- if (this.range && child.isContains(this.range.focus.element)) {
2503
- this.range.focus.element = parent;
2504
- }
2505
- } else {
2506
- if (child.hasMarks()) {
2507
- if (parent.hasMarks()) {
2508
- Object.assign(parent.marks, cloneData$1(child.marks));
2509
- } else {
2510
- parent.marks = cloneData$1(child.marks);
2511
- }
2512
- }
2513
- if (child.hasStyles()) {
2514
- if (parent.hasStyles()) {
2515
- Object.assign(parent.styles, cloneData$1(child.styles));
2516
- } else {
2517
- parent.styles = cloneData$1(child.styles);
2518
- }
2519
- }
2520
- if (child.hasChildren()) {
2521
- parent.children = [...child.children];
2522
- parent.children.forEach((item) => {
2523
- item.parent = parent;
2524
- });
2525
- }
2526
- mergeElement(parent);
2527
- }
2528
- };
2529
- const mergeElement = (ele) => {
2530
- if (ele.hasChildren() && ele.children.length == 1 && ele.children[0] && canMerge(ele, ele.children[0])) {
2531
- merge(ele, ele.children[0]);
2532
- }
2533
- };
2534
- mergeElement(element2);
2535
- };
2536
2458
  const mergeWithBrotherElement = function(element2) {
2537
2459
  const canMerge = (pel, nel) => {
2538
2460
  if (pel.isEmpty() || nel.isEmpty()) {
@@ -2631,6 +2553,78 @@ const mergeWithBrotherElement = function(element2) {
2631
2553
  };
2632
2554
  mergeElement(element2);
2633
2555
  };
2556
+ const mergeWithParentElement = function(element2) {
2557
+ const canMerge = (parent, child) => {
2558
+ if (child.isText() && parent.isInline()) {
2559
+ return parent.parsedom == AlexElement.TEXT_NODE;
2560
+ }
2561
+ if (parent.isInline() && child.isInline() || parent.isInblock() && child.isInblock()) {
2562
+ return parent.parsedom == child.parsedom;
2563
+ }
2564
+ return false;
2565
+ };
2566
+ const merge = (parent, child) => {
2567
+ if (child.isText()) {
2568
+ parent.type = "text";
2569
+ parent.parsedom = null;
2570
+ if (child.hasMarks()) {
2571
+ if (parent.hasMarks()) {
2572
+ Object.assign(parent.marks, cloneData$1(child.marks));
2573
+ } else {
2574
+ parent.marks = cloneData$1(child.marks);
2575
+ }
2576
+ }
2577
+ if (child.hasStyles()) {
2578
+ if (parent.hasStyles()) {
2579
+ Object.assign(parent.styles, cloneData$1(child.styles));
2580
+ } else {
2581
+ parent.styles = cloneData$1(child.styles);
2582
+ }
2583
+ }
2584
+ parent.textContent = child.textContent;
2585
+ parent.children = null;
2586
+ if (this.range && child.isContains(this.range.anchor.element)) {
2587
+ this.range.anchor.element = parent;
2588
+ }
2589
+ if (this.range && child.isContains(this.range.focus.element)) {
2590
+ this.range.focus.element = parent;
2591
+ }
2592
+ } else {
2593
+ if (child.hasMarks()) {
2594
+ if (parent.hasMarks()) {
2595
+ Object.assign(parent.marks, cloneData$1(child.marks));
2596
+ } else {
2597
+ parent.marks = cloneData$1(child.marks);
2598
+ }
2599
+ }
2600
+ if (child.hasStyles()) {
2601
+ if (parent.hasStyles()) {
2602
+ Object.assign(parent.styles, cloneData$1(child.styles));
2603
+ } else {
2604
+ parent.styles = cloneData$1(child.styles);
2605
+ }
2606
+ }
2607
+ if (child.hasChildren()) {
2608
+ parent.children = [...child.children];
2609
+ parent.children.forEach((item) => {
2610
+ item.parent = parent;
2611
+ });
2612
+ }
2613
+ mergeElement(parent);
2614
+ }
2615
+ };
2616
+ const mergeElement = (ele) => {
2617
+ if (ele.hasChildren() && ele.children.length == 1 && ele.children[0] && canMerge(ele, ele.children[0])) {
2618
+ merge(ele, ele.children[0]);
2619
+ }
2620
+ };
2621
+ mergeElement(element2);
2622
+ };
2623
+ const mergeWithSpaceTextElement = function(element2) {
2624
+ if (element2.isText()) {
2625
+ element2.textContent = element2.textContent.replace(/[\uFEFF]+/, "\uFEFF");
2626
+ }
2627
+ };
2634
2628
  const { Mac } = platform.os();
2635
2629
  const isUndo = function(e) {
2636
2630
  if (Mac) {
@@ -2644,6 +2638,98 @@ const isRedo = function(e) {
2644
2638
  }
2645
2639
  return e.key == "z" && e.ctrlKey && !e.metaKey && !e.shiftKey && !e.altKey;
2646
2640
  };
2641
+ const setClipboardData = function(data2, result) {
2642
+ let html = "";
2643
+ let text = "";
2644
+ result.forEach((item) => {
2645
+ const newEl = item.element.clone();
2646
+ if (item.offset) {
2647
+ newEl.textContent = newEl.textContent.substring(item.offset[0], item.offset[1]);
2648
+ }
2649
+ newEl.__render();
2650
+ html += newEl.elm.outerHTML;
2651
+ text += newEl.elm.innerText;
2652
+ });
2653
+ data2.setData("text/plain", text);
2654
+ data2.setData("text/html", html);
2655
+ return { html, text };
2656
+ };
2657
+ const doPaste = async function(html, text, files) {
2658
+ if (html) {
2659
+ if (this.allowPasteHtml) {
2660
+ const elements = this.parseHtml(html).filter((el) => {
2661
+ return !el.isEmpty();
2662
+ });
2663
+ if (typeof this.customHtmlPaste == "function") {
2664
+ await this.customHtmlPaste.apply(this, [elements, html]);
2665
+ } else {
2666
+ for (let i = 0; i < elements.length; i++) {
2667
+ this.insertElement(elements[i], false);
2668
+ }
2669
+ this.emit("pasteHtml", elements, html);
2670
+ }
2671
+ } else if (text) {
2672
+ if (typeof this.customTextPaste == "function") {
2673
+ await this.customTextPaste.apply(this, [text]);
2674
+ } else {
2675
+ this.insertText(text);
2676
+ this.emit("pasteText", text);
2677
+ }
2678
+ }
2679
+ } else {
2680
+ if (text) {
2681
+ if (typeof this.customTextPaste == "function") {
2682
+ await this.customTextPaste.apply(this, [text]);
2683
+ } else {
2684
+ this.insertText(text);
2685
+ this.emit("pasteText", text);
2686
+ }
2687
+ } else {
2688
+ let length = files.length;
2689
+ for (let i = 0; i < length; i++) {
2690
+ if (files[i].type.startsWith("image/")) {
2691
+ if (typeof this.customImagePaste == "function") {
2692
+ await this.customImagePaste.apply(this, [files[i]]);
2693
+ } else {
2694
+ const url = await file$1.dataFileToBase64(files[i]);
2695
+ const image = new AlexElement(
2696
+ "closed",
2697
+ "img",
2698
+ {
2699
+ src: url
2700
+ },
2701
+ null,
2702
+ null
2703
+ );
2704
+ this.insertElement(image);
2705
+ this.emit("pasteImage", url);
2706
+ }
2707
+ } else if (files[i].type.startsWith("video/")) {
2708
+ if (typeof this.customVideoPaste == "function") {
2709
+ await this.customVideoPaste.apply(this, [files[i]]);
2710
+ } else {
2711
+ const url = await file$1.dataFileToBase64(files[i]);
2712
+ const video = new AlexElement(
2713
+ "closed",
2714
+ "video",
2715
+ {
2716
+ src: url
2717
+ },
2718
+ null,
2719
+ null
2720
+ );
2721
+ this.insertElement(video);
2722
+ this.emit("pasteVideo", url);
2723
+ }
2724
+ } else {
2725
+ if (typeof this.customFilePaste == "function") {
2726
+ await this.customFilePaste.apply(this, [files[i]]);
2727
+ }
2728
+ }
2729
+ }
2730
+ }
2731
+ }
2732
+ };
2647
2733
  const checkStack = function() {
2648
2734
  const elements = AlexElement.flatElements(this.stack).filter((el) => {
2649
2735
  return !el.isEmpty() && !AlexElement.VOID_NODES.includes(el.parsedom);
@@ -2934,91 +3020,38 @@ const handleKeydown = function(e) {
2934
3020
  };
2935
3021
  const handleCopy = async function(e) {
2936
3022
  e.preventDefault();
2937
- await this.copy();
3023
+ if (!this.range) {
3024
+ return;
3025
+ }
3026
+ if (!this.allowCopy) {
3027
+ return;
3028
+ }
3029
+ const event2 = e;
3030
+ const result = this.getElementsByRange().list;
3031
+ if (event2.clipboardData && result.length) {
3032
+ const { text, html } = setClipboardData.apply(this, [event2.clipboardData, result]);
3033
+ this.emit("copy", text, html);
3034
+ }
2938
3035
  };
2939
3036
  const handleCut = async function(e) {
2940
3037
  e.preventDefault();
2941
- const result = await this.cut();
2942
- if (result && !this.disabled) {
2943
- this.formatElementStack();
2944
- this.domRender();
2945
- this.rangeRender();
3038
+ if (!this.range) {
3039
+ return;
2946
3040
  }
2947
- };
2948
- const doPaste = async function(html, text, files) {
2949
- if (html) {
2950
- if (this.allowPasteHtml) {
2951
- const elements = this.parseHtml(html).filter((el) => {
2952
- return !el.isEmpty();
2953
- });
2954
- if (typeof this.customHtmlPaste == "function") {
2955
- await this.customHtmlPaste.apply(this, [elements, html]);
2956
- } else {
2957
- for (let i = 0; i < elements.length; i++) {
2958
- this.insertElement(elements[i], false);
2959
- }
2960
- this.emit("pasteHtml", elements, html);
2961
- }
2962
- } else if (text) {
2963
- if (typeof this.customTextPaste == "function") {
2964
- await this.customTextPaste.apply(this, [text]);
2965
- } else {
2966
- this.insertText(text);
2967
- this.emit("pasteText", text);
2968
- }
2969
- }
2970
- } else {
2971
- if (text) {
2972
- if (typeof this.customTextPaste == "function") {
2973
- await this.customTextPaste.apply(this, [text]);
2974
- } else {
2975
- this.insertText(text);
2976
- this.emit("pasteText", text);
2977
- }
2978
- } else {
2979
- let length = files.length;
2980
- for (let i = 0; i < length; i++) {
2981
- if (files[i].type.startsWith("image/")) {
2982
- if (typeof this.customImagePaste == "function") {
2983
- await this.customImagePaste.apply(this, [files[i]]);
2984
- } else {
2985
- const url = await file$1.dataFileToBase64(files[i]);
2986
- const image = new AlexElement(
2987
- "closed",
2988
- "img",
2989
- {
2990
- src: url
2991
- },
2992
- null,
2993
- null
2994
- );
2995
- this.insertElement(image);
2996
- this.emit("pasteImage", url);
2997
- }
2998
- } else if (files[i].type.startsWith("video/")) {
2999
- if (typeof this.customVideoPaste == "function") {
3000
- await this.customVideoPaste.apply(this, [files[i]]);
3001
- } else {
3002
- const url = await file$1.dataFileToBase64(files[i]);
3003
- const video = new AlexElement(
3004
- "closed",
3005
- "video",
3006
- {
3007
- src: url
3008
- },
3009
- null,
3010
- null
3011
- );
3012
- this.insertElement(video);
3013
- this.emit("pasteVideo", url);
3014
- }
3015
- } else {
3016
- if (typeof this.customFilePaste == "function") {
3017
- await this.customFilePaste.apply(this, [files[i]]);
3018
- }
3019
- }
3020
- }
3041
+ if (!this.allowCut) {
3042
+ return;
3043
+ }
3044
+ const event2 = e;
3045
+ const result = this.getElementsByRange().list;
3046
+ if (event2.clipboardData && result.length) {
3047
+ const { text, html } = setClipboardData.apply(this, [event2.clipboardData, result]);
3048
+ if (!this.disabled) {
3049
+ this.delete();
3050
+ this.formatElementStack();
3051
+ this.domRender();
3052
+ this.rangeRender();
3021
3053
  }
3054
+ this.emit("cut", text, html);
3022
3055
  }
3023
3056
  };
3024
3057
  const handlePaste = async function(e) {
@@ -3096,7 +3129,6 @@ class AlexEditor {
3096
3129
  __publicField(this, "customFilePaste");
3097
3130
  __publicField(this, "customMerge");
3098
3131
  __publicField(this, "customParseNode");
3099
- __publicField(this, "useClipboard", canUseClipboard());
3100
3132
  __publicField(this, "history", new AlexHistory());
3101
3133
  __publicField(this, "stack");
3102
3134
  __publicField(this, "range", null);
@@ -3148,67 +3180,6 @@ class AlexEditor {
3148
3180
  const focus = new AlexPoint(firstElement, 0);
3149
3181
  this.range = new AlexRange(anchor, focus);
3150
3182
  }
3151
- /**
3152
- * 根据光标执行复制操作
3153
- * isCut表示是否在执行剪切操作,默认为false,这个参数仅在内部使用
3154
- */
3155
- async copy(isCut = false) {
3156
- if (!this.useClipboard) {
3157
- return;
3158
- }
3159
- if (!this.range) {
3160
- return;
3161
- }
3162
- if (!this.allowCopy) {
3163
- return;
3164
- }
3165
- let result = this.getElementsByRange().list;
3166
- if (result.length == 0) {
3167
- return;
3168
- }
3169
- let html = "";
3170
- let text = "";
3171
- result.forEach((item) => {
3172
- const newEl = item.element.clone();
3173
- if (item.offset) {
3174
- newEl.textContent = newEl.textContent.substring(item.offset[0], item.offset[1]);
3175
- }
3176
- newEl.__render();
3177
- html += newEl.elm.outerHTML;
3178
- text += newEl.elm.innerText;
3179
- });
3180
- const clipboardItem = new window.ClipboardItem({
3181
- "text/html": new Blob([html], { type: "text/html" }),
3182
- "text/plain": new Blob([text], { type: "text/plain" })
3183
- });
3184
- await navigator.clipboard.write([clipboardItem]);
3185
- if (!isCut) {
3186
- this.emit("copy", text, html);
3187
- }
3188
- return { text, html };
3189
- }
3190
- /**
3191
- * 根据光标进行剪切操作
3192
- */
3193
- async cut() {
3194
- if (!this.useClipboard) {
3195
- return;
3196
- }
3197
- if (!this.range) {
3198
- return;
3199
- }
3200
- if (!this.allowCut) {
3201
- return;
3202
- }
3203
- const result = await this.copy(true);
3204
- if (result) {
3205
- if (!this.disabled) {
3206
- this.delete();
3207
- }
3208
- this.emit("cut", result.text, result.html);
3209
- }
3210
- return result;
3211
- }
3212
3183
  /**
3213
3184
  * 根据光标进行删除操作
3214
3185
  */
@@ -3818,7 +3789,7 @@ class AlexEditor {
3818
3789
  let renderRules = this.renderRules.filter((fn) => {
3819
3790
  return typeof fn == "function";
3820
3791
  });
3821
- [handleNotStackBlock, handleInblockWithOther, handleInlineChildrenNotInblock, breakFormat, mergeWithParentElement, mergeWithBrotherElement, mergeWithParentElement, ...renderRules].forEach((fn) => {
3792
+ [handleNotStackBlock, handleInblockWithOther, handleInlineChildrenNotInblock, breakFormat, mergeWithParentElement, mergeWithBrotherElement, mergeWithParentElement, mergeWithSpaceTextElement, ...renderRules].forEach((fn) => {
3822
3793
  format(this.stack, fn, true);
3823
3794
  });
3824
3795
  handleStackEmpty.apply(this);
@@ -25625,6 +25596,10 @@ const _sfc_main$1 = /* @__PURE__ */ defineComponent({
25625
25596
  }
25626
25597
  };
25627
25598
  const handleDeleteComplete = () => {
25599
+ const uneditable = editor.value.range.anchor.element.getUneditableElement();
25600
+ if (uneditable) {
25601
+ uneditable.toEmpty();
25602
+ }
25628
25603
  };
25629
25604
  const handleAfterRender = () => {
25630
25605
  setVideoHeight();
@@ -25817,7 +25792,7 @@ const _sfc_main$1 = /* @__PURE__ */ defineComponent({
25817
25792
  };
25818
25793
  }
25819
25794
  });
25820
- const Editify = /* @__PURE__ */ _export_sfc(_sfc_main$1, [["__scopeId", "data-v-2e9e8fac"]]);
25795
+ const Editify = /* @__PURE__ */ _export_sfc(_sfc_main$1, [["__scopeId", "data-v-8737320e"]]);
25821
25796
  const InsertAttachmentProps = {
25822
25797
  //主题色
25823
25798
  color: {
@@ -26066,8 +26041,6 @@ const attachment = (options) => {
26066
26041
  options = {};
26067
26042
  }
26068
26043
  const plugin = (editifyInstance, color2, editTrans) => {
26069
- const editor = editifyInstance.exposed.editor.value;
26070
- const dataRangeCaches = editifyInstance.exposed.dataRangeCaches.value;
26071
26044
  return {
26072
26045
  //附件菜单项配置
26073
26046
  menu: {
@@ -26080,7 +26053,7 @@ const attachment = (options) => {
26080
26053
  title: options.title || editTrans("insertAttachment"),
26081
26054
  leftBorder: options.leftBorder,
26082
26055
  rightBorder: options.rightBorder,
26083
- disabled: editor ? hasPreInRange(editor, dataRangeCaches) : false,
26056
+ disabled: editifyInstance.exposed.editor.value ? hasPreInRange(editifyInstance.exposed.editor.value, editifyInstance.exposed.dataRangeCaches.value) : false,
26084
26057
  default: () => h(Icon, { value: "attachment" }),
26085
26058
  layer: (_name, btnInstance) => h(InsertAttachment, {
26086
26059
  color: color2,
@@ -26095,10 +26068,20 @@ const attachment = (options) => {
26095
26068
  btnInstance.$refs.layerRef.setPosition();
26096
26069
  },
26097
26070
  onInsert: (url) => {
26098
- const attachmentElement = new AlexElement("closed", "span", { "data-attachment": url, contenteditable: "false" }, null, null);
26071
+ const marks = {
26072
+ "data-attachment": url,
26073
+ "data-attachment-name": editTrans("attachmentDownloadName"),
26074
+ contenteditable: "false"
26075
+ };
26076
+ const attachmentElement = new AlexElement("closed", "span", marks, null, null);
26077
+ const editor = editifyInstance.exposed.editor.value;
26099
26078
  editor.insertElement(attachmentElement);
26100
- editor.range.anchor.moveToEnd(attachmentElement);
26101
- editor.range.focus.moveToEnd(attachmentElement);
26079
+ const beforeText = AlexElement.getSpaceElement();
26080
+ const afterText = AlexElement.getSpaceElement();
26081
+ editor.addElementAfter(afterText, attachmentElement);
26082
+ editor.addElementBefore(beforeText, attachmentElement);
26083
+ editor.range.anchor.moveToStart(afterText);
26084
+ editor.range.focus.moveToStart(afterText);
26102
26085
  editor.formatElementStack();
26103
26086
  editor.domRender();
26104
26087
  editor.rangeRender();
@@ -26110,6 +26093,7 @@ const attachment = (options) => {
26110
26093
  },
26111
26094
  //找到附件元素点击下载
26112
26095
  updateView: () => {
26096
+ const editor = editifyInstance.exposed.editor.value;
26113
26097
  AlexElement.flatElements(editor.stack).forEach((el) => {
26114
26098
  if (el.parsedom == "span" && el.hasMarks() && el.marks["data-attachment"]) {
26115
26099
  event.off(el.elm, "click");
@@ -26132,12 +26116,24 @@ const attachment = (options) => {
26132
26116
  },
26133
26117
  //span元素粘贴保留data-attachment
26134
26118
  pasteKeepMarks: {
26135
- "data-attachment": ["span"]
26119
+ "data-attachment": ["span"],
26120
+ "data-attachment-name": ["span"]
26136
26121
  },
26137
- //设置元素的title属性标记
26122
+ //自定义渲染规范
26138
26123
  renderRule: (el) => {
26139
26124
  if (el.type == "closed" && el.hasMarks() && el.marks["data-attachment"]) {
26140
26125
  el.marks["title"] = editTrans("downloadAttachment");
26126
+ const editor = editifyInstance.exposed.editor.value;
26127
+ const previousElement = editor.getPreviousElement(el);
26128
+ const newTextElement = editor.getNextElement(el);
26129
+ if (!previousElement || !previousElement.isSpaceText()) {
26130
+ const spaceText = AlexElement.getSpaceElement();
26131
+ editor.addElementBefore(spaceText, el);
26132
+ }
26133
+ if (!newTextElement || !newTextElement.isSpaceText()) {
26134
+ const spaceText = AlexElement.getSpaceElement();
26135
+ editor.addElementAfter(spaceText, el);
26136
+ }
26141
26137
  }
26142
26138
  }
26143
26139
  };
@@ -26147,7 +26143,7 @@ const attachment = (options) => {
26147
26143
  const install = (app) => {
26148
26144
  app.component(Editify.name, Editify);
26149
26145
  };
26150
- const version = "0.1.24";
26146
+ const version = "0.1.26";
26151
26147
  export {
26152
26148
  AlexElement,
26153
26149
  Editify,