@node-edit-utils/core 2.1.5 → 2.1.7
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.
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Markup Canvas
|
|
3
3
|
* High-performance markup canvas with zoom and pan capabilities
|
|
4
|
-
* @version 2.1.
|
|
4
|
+
* @version 2.1.7
|
|
5
5
|
*/
|
|
6
6
|
'use strict';
|
|
7
7
|
|
|
@@ -458,6 +458,7 @@ const nodeText = () => {
|
|
|
458
458
|
const createNodeTools = (element) => {
|
|
459
459
|
const nodeProvider = element;
|
|
460
460
|
let resizeObserver = null;
|
|
461
|
+
let nodeResizeObserver = null;
|
|
461
462
|
let mutationObserver = null;
|
|
462
463
|
let selectedNode = null;
|
|
463
464
|
const text = nodeText();
|
|
@@ -471,6 +472,7 @@ const createNodeTools = (element) => {
|
|
|
471
472
|
clearHighlightFrame(nodeProvider);
|
|
472
473
|
selectedNode = null;
|
|
473
474
|
resizeObserver?.disconnect();
|
|
475
|
+
nodeResizeObserver?.disconnect();
|
|
474
476
|
mutationObserver?.disconnect();
|
|
475
477
|
}
|
|
476
478
|
}
|
|
@@ -486,6 +488,7 @@ const createNodeTools = (element) => {
|
|
|
486
488
|
}
|
|
487
489
|
}
|
|
488
490
|
resizeObserver?.disconnect();
|
|
491
|
+
nodeResizeObserver?.disconnect();
|
|
489
492
|
mutationObserver?.disconnect();
|
|
490
493
|
if (node && nodeProvider) {
|
|
491
494
|
text.enableEditMode(node, nodeProvider);
|
|
@@ -502,6 +505,10 @@ const createNodeTools = (element) => {
|
|
|
502
505
|
childList: true,
|
|
503
506
|
characterData: true,
|
|
504
507
|
});
|
|
508
|
+
nodeResizeObserver = connectResizeObserver(node, () => {
|
|
509
|
+
throttledFrameRefresh(node, nodeProvider);
|
|
510
|
+
updateHighlightFrameVisibility(node, nodeProvider);
|
|
511
|
+
});
|
|
505
512
|
}
|
|
506
513
|
selectedNode = node;
|
|
507
514
|
sendPostMessage("selectedNodeChanged", node?.getAttribute("data-node-id") ?? null);
|
|
@@ -515,6 +522,7 @@ const createNodeTools = (element) => {
|
|
|
515
522
|
const cleanup = () => {
|
|
516
523
|
removeListeners();
|
|
517
524
|
resizeObserver?.disconnect();
|
|
525
|
+
nodeResizeObserver?.disconnect();
|
|
518
526
|
mutationObserver?.disconnect();
|
|
519
527
|
text.blurEditMode();
|
|
520
528
|
throttledFrameRefresh.cleanup();
|
|
@@ -529,6 +537,7 @@ const createNodeTools = (element) => {
|
|
|
529
537
|
clearHighlightFrame(nodeProvider);
|
|
530
538
|
selectedNode = null;
|
|
531
539
|
resizeObserver?.disconnect();
|
|
540
|
+
nodeResizeObserver?.disconnect();
|
|
532
541
|
mutationObserver?.disconnect();
|
|
533
542
|
},
|
|
534
543
|
getEditableNode: () => text.getEditableNode(),
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Markup Canvas
|
|
3
3
|
* High-performance markup canvas with zoom and pan capabilities
|
|
4
|
-
* @version 2.1.
|
|
4
|
+
* @version 2.1.7
|
|
5
5
|
*/
|
|
6
6
|
// biome-ignore lint/suspicious/noExplicitAny: generic constraint requires flexibility
|
|
7
7
|
function withRAFThrottle(func) {
|
|
@@ -456,6 +456,7 @@ const nodeText = () => {
|
|
|
456
456
|
const createNodeTools = (element) => {
|
|
457
457
|
const nodeProvider = element;
|
|
458
458
|
let resizeObserver = null;
|
|
459
|
+
let nodeResizeObserver = null;
|
|
459
460
|
let mutationObserver = null;
|
|
460
461
|
let selectedNode = null;
|
|
461
462
|
const text = nodeText();
|
|
@@ -469,6 +470,7 @@ const createNodeTools = (element) => {
|
|
|
469
470
|
clearHighlightFrame(nodeProvider);
|
|
470
471
|
selectedNode = null;
|
|
471
472
|
resizeObserver?.disconnect();
|
|
473
|
+
nodeResizeObserver?.disconnect();
|
|
472
474
|
mutationObserver?.disconnect();
|
|
473
475
|
}
|
|
474
476
|
}
|
|
@@ -484,6 +486,7 @@ const createNodeTools = (element) => {
|
|
|
484
486
|
}
|
|
485
487
|
}
|
|
486
488
|
resizeObserver?.disconnect();
|
|
489
|
+
nodeResizeObserver?.disconnect();
|
|
487
490
|
mutationObserver?.disconnect();
|
|
488
491
|
if (node && nodeProvider) {
|
|
489
492
|
text.enableEditMode(node, nodeProvider);
|
|
@@ -500,6 +503,10 @@ const createNodeTools = (element) => {
|
|
|
500
503
|
childList: true,
|
|
501
504
|
characterData: true,
|
|
502
505
|
});
|
|
506
|
+
nodeResizeObserver = connectResizeObserver(node, () => {
|
|
507
|
+
throttledFrameRefresh(node, nodeProvider);
|
|
508
|
+
updateHighlightFrameVisibility(node, nodeProvider);
|
|
509
|
+
});
|
|
503
510
|
}
|
|
504
511
|
selectedNode = node;
|
|
505
512
|
sendPostMessage("selectedNodeChanged", node?.getAttribute("data-node-id") ?? null);
|
|
@@ -513,6 +520,7 @@ const createNodeTools = (element) => {
|
|
|
513
520
|
const cleanup = () => {
|
|
514
521
|
removeListeners();
|
|
515
522
|
resizeObserver?.disconnect();
|
|
523
|
+
nodeResizeObserver?.disconnect();
|
|
516
524
|
mutationObserver?.disconnect();
|
|
517
525
|
text.blurEditMode();
|
|
518
526
|
throttledFrameRefresh.cleanup();
|
|
@@ -527,6 +535,7 @@ const createNodeTools = (element) => {
|
|
|
527
535
|
clearHighlightFrame(nodeProvider);
|
|
528
536
|
selectedNode = null;
|
|
529
537
|
resizeObserver?.disconnect();
|
|
538
|
+
nodeResizeObserver?.disconnect();
|
|
530
539
|
mutationObserver?.disconnect();
|
|
531
540
|
},
|
|
532
541
|
getEditableNode: () => text.getEditableNode(),
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Markup Canvas
|
|
3
3
|
* High-performance markup canvas with zoom and pan capabilities
|
|
4
|
-
* @version 2.1.
|
|
4
|
+
* @version 2.1.7
|
|
5
5
|
*/
|
|
6
6
|
(function (global, factory) {
|
|
7
7
|
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
|
|
@@ -462,6 +462,7 @@
|
|
|
462
462
|
const createNodeTools = (element) => {
|
|
463
463
|
const nodeProvider = element;
|
|
464
464
|
let resizeObserver = null;
|
|
465
|
+
let nodeResizeObserver = null;
|
|
465
466
|
let mutationObserver = null;
|
|
466
467
|
let selectedNode = null;
|
|
467
468
|
const text = nodeText();
|
|
@@ -475,6 +476,7 @@
|
|
|
475
476
|
clearHighlightFrame(nodeProvider);
|
|
476
477
|
selectedNode = null;
|
|
477
478
|
resizeObserver?.disconnect();
|
|
479
|
+
nodeResizeObserver?.disconnect();
|
|
478
480
|
mutationObserver?.disconnect();
|
|
479
481
|
}
|
|
480
482
|
}
|
|
@@ -490,6 +492,7 @@
|
|
|
490
492
|
}
|
|
491
493
|
}
|
|
492
494
|
resizeObserver?.disconnect();
|
|
495
|
+
nodeResizeObserver?.disconnect();
|
|
493
496
|
mutationObserver?.disconnect();
|
|
494
497
|
if (node && nodeProvider) {
|
|
495
498
|
text.enableEditMode(node, nodeProvider);
|
|
@@ -506,6 +509,10 @@
|
|
|
506
509
|
childList: true,
|
|
507
510
|
characterData: true,
|
|
508
511
|
});
|
|
512
|
+
nodeResizeObserver = connectResizeObserver(node, () => {
|
|
513
|
+
throttledFrameRefresh(node, nodeProvider);
|
|
514
|
+
updateHighlightFrameVisibility(node, nodeProvider);
|
|
515
|
+
});
|
|
509
516
|
}
|
|
510
517
|
selectedNode = node;
|
|
511
518
|
sendPostMessage("selectedNodeChanged", node?.getAttribute("data-node-id") ?? null);
|
|
@@ -519,6 +526,7 @@
|
|
|
519
526
|
const cleanup = () => {
|
|
520
527
|
removeListeners();
|
|
521
528
|
resizeObserver?.disconnect();
|
|
529
|
+
nodeResizeObserver?.disconnect();
|
|
522
530
|
mutationObserver?.disconnect();
|
|
523
531
|
text.blurEditMode();
|
|
524
532
|
throttledFrameRefresh.cleanup();
|
|
@@ -533,6 +541,7 @@
|
|
|
533
541
|
clearHighlightFrame(nodeProvider);
|
|
534
542
|
selectedNode = null;
|
|
535
543
|
resizeObserver?.disconnect();
|
|
544
|
+
nodeResizeObserver?.disconnect();
|
|
536
545
|
mutationObserver?.disconnect();
|
|
537
546
|
},
|
|
538
547
|
getEditableNode: () => text.getEditableNode(),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).MarkupCanvas={})}(this,function(e){"use strict";function t(e){let t=null,n=null;const o=(...o)=>{n=o,null===t&&(t=requestAnimationFrame(()=>{n&&e(...n),t=null,n=null}))};return o.cleanup=()=>{null!==t&&(cancelAnimationFrame(t),t=null,n=null)},o}const n=e=>{const t=window.canvas;return e.reduce((e,t)=>e?.[t],t)};
|
|
1
|
+
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).MarkupCanvas={})}(this,function(e){"use strict";function t(e){let t=null,n=null;const o=(...o)=>{n=o,null===t&&(t=requestAnimationFrame(()=>{n&&e(...n),t=null,n=null}))};return o.cleanup=()=>{null!==t&&(cancelAnimationFrame(t),t=null,n=null)},o}const n=e=>{const t=window.canvas;return e.reduce((e,t)=>e?.[t],t)};const o=(e,t)=>{const n=new ResizeObserver(e=>{t(e)});return n.observe(e),n};function r(e){return e.querySelector(".highlight-frame")}const s=e=>{if(!e)return;const t=r(e);t&&t.remove()},a=["path","rect","circle","ellipse","polygon","line","polyline","text","text-noci"];let i=[],d=0;const l=(e,t)=>{let n=null;const o=e.clientX,r=e.clientY,s=e.metaKey||e.ctrlKey,l=((e,t)=>{const n=document.elementsFromPoint(e,t);return Array.from(n).reduce((e,t)=>e.found?e:"node-provider"===t.getAttribute("data-role")?(e.found=!0,e):(e.elements.push(t),e),{elements:[],found:!1}).elements})(o,r).filter(e=>!a.includes(e.tagName.toLowerCase())&&!e.classList.contains("select-none"));if(t&&l.includes(t))return t;if(s)return i=[],n=l[0],n;var c,u;u=l,(c=i).length===u.length&&c.every((e,t)=>e===u[t])?d<=l.length&&d++:d=0;return n=l[l.length-1-d],i=l,n},c=(e,t,n,o)=>{const r=e=>{((e,t)=>{if("application"===e.data.source&&"selectedNodeChanged"===e.data.action){const o=e.data.data,r=document.querySelector(`[data-node-id="${o}"]`);if(n=r,n?.classList.contains("select-none"))return void t?.(null);r&&t?.(r)}var n})(e,t)},a=n=>{((e,t,n,o)=>{if(e.preventDefault(),e.stopPropagation(),t&&!t.contains(e.target))return s(t),void o(null);o(l(e,n))})(n,e,o(),t)},i=e=>{"Escape"===e.key&&(e.preventDefault(),e.stopPropagation(),n?.())};return window.addEventListener("message",r),document.addEventListener("click",a),document.addEventListener("keydown",i),()=>{window.removeEventListener("message",r),document.removeEventListener("click",a),document.removeEventListener("keydown",i)}};function u(e,t){const o=e.getBoundingClientRect(),r=t.getBoundingClientRect(),s=o.top-r.top,a=o.left-r.left,i=n(["zoom","current"])??1;return{top:parseFloat((s/i).toFixed(5)),left:parseFloat((a/i).toFixed(5)),width:Math.max(4,parseFloat((o.width/i).toFixed(5))),height:parseFloat((o.height/i).toFixed(5))}}const m=(e,t)=>{const n=document.createElement("div");n.className="node-tools",t.appendChild(n),((e,t)=>{const n=document.createElement("div");n.className="tag-label",n.textContent=e.tagName.toLowerCase(),t.appendChild(n)})(e,n)},p=(e,t)=>{if(!e)return;const o=r(t);o&&o.remove();const s=((e,t)=>{const{top:o,left:r,width:s,height:a}=u(e,t),i=n(["zoom","current"])??1;document.body.style.setProperty("--zoom",i.toString()),document.body.style.setProperty("--stroke-width",(2/i).toFixed(3));const d=document.createElement("div");d.classList.add("highlight-frame"),d.style.setProperty("--frame-top",`${o}px`),d.style.setProperty("--frame-left",`${r}px`),d.style.setProperty("--frame-width",`${s}px`),d.style.setProperty("--frame-height",`${a}px`);const l=document.createElementNS("http://www.w3.org/2000/svg","svg");l.classList.add("highlight-frame-svg");const c=document.createElementNS("http://www.w3.org/2000/svg","rect");return c.setAttribute("x","0"),c.setAttribute("y","0"),c.setAttribute("width","100%"),c.setAttribute("height","100%"),c.classList.add("highlight-frame-rect"),l.appendChild(c),d.appendChild(l),d})(e,t);"true"===e.contentEditable&&s.classList.add("is-editable"),m(e,s),t.appendChild(s)},h=(e,t)=>{const o=r(t),s=n(["zoom","current"])??1;if(!o)return;s>=.3?t.style.setProperty("--tool-opacity","1"):t.style.setProperty("--tool-opacity","0");const{top:a,left:i,width:d,height:l}=u(e,t);o.style.setProperty("--frame-top",`${a}px`),o.style.setProperty("--frame-left",`${i}px`),o.style.setProperty("--frame-width",`${d}px`),o.style.setProperty("--frame-height",`${l}px`)},v=(e,t)=>{const n=r(t);if(!n)return;const o=e.classList.contains("hidden")||e.classList.contains("select-none")?"none":"";n.style.display=o;const s=n.querySelector(".tag-label");s&&(s.style.display=o)},y=e=>{const t=e=>{"Enter"===e.key&&(e.preventDefault(),e.stopPropagation(),(()=>{const e=window.getSelection();if(e&&e.rangeCount>0){const t=e.getRangeAt(0);t.deleteContents();const n=document.createElement("br");t.insertNode(n),t.setStartAfter(n),t.setEndAfter(n),e.removeAllRanges(),e.addRange(t)}})())};return e.addEventListener("keydown",t),()=>{e.removeEventListener("keydown",t)}},f=(e,t)=>{const n=((e,t)=>{const n=new MutationObserver(e=>{t(e)});return n.observe(e,{subtree:!0,childList:!0,characterData:!0}),n})(e,()=>{h(e,t)});return()=>n.disconnect()},g=()=>{let e=null,t=!1,o=null;const r=()=>{if(t||!e)return;t=!0;var r;(r=e).contentEditable="false",r.classList.remove("is-editable"),r.style.outline="none",(()=>{const e=n(["keyboard","disableTextEditMode"]);e?.()})(),o?.(),e=null,t=!1};return{enableEditMode:(t,s)=>{if(e===t)return;e&&e!==t&&r();const a=(e=>Array.from(e.childNodes).some(e=>e.nodeType===Node.TEXT_NODE&&e.textContent?.trim()))(t);a&&(e=t,(e=>{e.contentEditable="true",e.classList.add("is-editable"),e.style.outline="none"})(t),(()=>{const e=n(["keyboard","enableTextEditMode"]);e?.()})(),o=((e,t,n)=>{if(!t)return()=>{};e.addEventListener("blur",n);const o=y(e),r=f(e,t);return()=>{e.removeEventListener("blur",n),o(),r?.()}})(t,s,r))},blurEditMode:r,getEditableNode:()=>e,isEditing:()=>null!==e}},b=320,w=1680,E=[{name:"Mobile",rawValue:390,value:"320px"},{name:"Tablet Portrait",rawValue:768,value:"768px"},{name:"Tablet Landscape",rawValue:1024,value:"1024px"},{name:"Notebook",rawValue:1280,value:"1280px"},{name:"Desktop",rawValue:1680,value:"1680px"}],x=(e,t,n)=>{const o=parseFloat(document.body.dataset.zoom||"1"),r=((e,t)=>{const n=e+Math.round(t);return Math.max(b,Math.min(w,n))})(n,(e.clientX-t)/o);return r},L=(e,t)=>{e.style.setProperty("--container-width",`${t}px`),((e,t)=>{e.querySelectorAll(".resize-preset-button").forEach((e,n)=>{n<E.length&&(E[n].rawValue===t?e.classList.add("is-active"):e.classList.remove("is-active"))})})(e,t)};e.createCanvasObserver=function(){const e=document.querySelector(".transform-layer");if(!e)return{disconnect:()=>{}};const o=t(()=>{(()=>{const e=n(["zoom","current"]);document.body.style.setProperty("--zoom",e.toFixed(5)),document.body.style.setProperty("--stroke-width",(2/e).toFixed(3)),document.body.dataset.zoom=e.toFixed(5),document.body.dataset.strokeWidth=(2/e).toFixed(3)})()}),r=new MutationObserver(()=>{o()});return r.observe(e,{attributes:!0,attributeOldValue:!0,subtree:!0,childList:!0}),{disconnect:function(){o.cleanup(),r.disconnect()}}},e.createNodeTools=e=>{const n=e;let r=null,a=null,i=null,d=null;const l=g(),u=t(h),m=e=>{if(d!==e){if(l.isEditing()){const t=l.getEditableNode();t&&t!==e&&l.blurEditMode()}var t,s;r?.disconnect(),a?.disconnect(),i?.disconnect(),e&&n&&(l.enableEditMode(e,n),r=o(n,()=>{u(e,n)}),i=new MutationObserver(()=>{u(e,n),v(e,n)}),i.observe(e,{attributes:!0,subtree:!0,childList:!0,characterData:!0}),a=o(e,()=>{u(e,n),v(e,n)})),d=e,t="selectedNodeChanged",s=e?.getAttribute("data-node-id")??null,window.parent.postMessage({source:"node-edit-utils",action:t,data:s,timestamp:Date.now()},"*"),p(e,n),e&&n&&v(e,n)}},y=c(n,m,()=>{l.isEditing()&&l.blurEditMode(),d&&n&&(s(n),d=null,r?.disconnect(),a?.disconnect(),i?.disconnect())},l.getEditableNode),f={selectNode:m,getSelectedNode:()=>d,refreshHighlightFrame:()=>{u(d,n)},clearSelectedNode:()=>{s(n),d=null,r?.disconnect(),a?.disconnect(),i?.disconnect()},getEditableNode:()=>l.getEditableNode(),cleanup:()=>{y(),r?.disconnect(),a?.disconnect(),i?.disconnect(),l.blurEditMode(),u.cleanup()}};var b,w;return b="nodeTools",w=f,"undefined"!=typeof window&&(window[b]=w),f},e.createViewport=e=>{const n=document.querySelector(".canvas-container"),o=e.querySelector(".resize-handle");o&&o.remove();const r=(e=>{const t=document.createElement("div");return t.className="resize-handle",e.appendChild(t),t})(e);e.style.setProperty("--container-width","400px"),((e,t,n)=>{const o=document.createElement("div");o.className="resize-presets",E.forEach(e=>{const r=document.createElement("button");r.textContent=e.name,r.className="resize-preset-button",r.addEventListener("click",()=>{n(t,e.rawValue)}),o.appendChild(r)}),e.appendChild(o)})(r,e,L);let s=!1,a=0,i=0;const d=t(t=>{if(!s)return;n&&(n.style.cursor="ew-resize");const o=x(t,a,i);L(e,o)}),l=((e,t,n,o,r)=>(e.addEventListener("mousedown",t),document.addEventListener("mousemove",n),document.addEventListener("mouseup",o),window.addEventListener("blur",r),()=>{e.removeEventListener("mousedown",t),document.removeEventListener("mousemove",n),document.removeEventListener("mouseup",o),window.removeEventListener("blur",r)}))(r,t=>{t.preventDefault(),t.stopPropagation(),s=!0,a=t.clientX,i=e.offsetWidth},d,e=>{e.preventDefault(),e.stopPropagation(),n&&(n.style.cursor="default"),s=!1},()=>{s=!1});return{setWidth:t=>{L(e,t)},cleanup:()=>{s=!1,d?.cleanup(),l(),r.remove()}}}});
|
package/package.json
CHANGED
|
@@ -14,6 +14,7 @@ export const createNodeTools = (element: HTMLElement | null): NodeTools => {
|
|
|
14
14
|
const nodeProvider = element;
|
|
15
15
|
|
|
16
16
|
let resizeObserver: ResizeObserver | null = null;
|
|
17
|
+
let nodeResizeObserver: ResizeObserver | null = null;
|
|
17
18
|
let mutationObserver: MutationObserver | null = null;
|
|
18
19
|
let selectedNode: HTMLElement | null = null;
|
|
19
20
|
|
|
@@ -31,6 +32,7 @@ export const createNodeTools = (element: HTMLElement | null): NodeTools => {
|
|
|
31
32
|
selectedNode = null;
|
|
32
33
|
|
|
33
34
|
resizeObserver?.disconnect();
|
|
35
|
+
nodeResizeObserver?.disconnect();
|
|
34
36
|
mutationObserver?.disconnect();
|
|
35
37
|
}
|
|
36
38
|
}
|
|
@@ -49,6 +51,7 @@ export const createNodeTools = (element: HTMLElement | null): NodeTools => {
|
|
|
49
51
|
}
|
|
50
52
|
|
|
51
53
|
resizeObserver?.disconnect();
|
|
54
|
+
nodeResizeObserver?.disconnect();
|
|
52
55
|
mutationObserver?.disconnect();
|
|
53
56
|
|
|
54
57
|
if (node && nodeProvider) {
|
|
@@ -69,6 +72,11 @@ export const createNodeTools = (element: HTMLElement | null): NodeTools => {
|
|
|
69
72
|
childList: true,
|
|
70
73
|
characterData: true,
|
|
71
74
|
});
|
|
75
|
+
|
|
76
|
+
nodeResizeObserver = connectResizeObserver(node, () => {
|
|
77
|
+
throttledFrameRefresh(node, nodeProvider);
|
|
78
|
+
updateHighlightFrameVisibility(node, nodeProvider);
|
|
79
|
+
});
|
|
72
80
|
}
|
|
73
81
|
|
|
74
82
|
selectedNode = node;
|
|
@@ -86,6 +94,7 @@ export const createNodeTools = (element: HTMLElement | null): NodeTools => {
|
|
|
86
94
|
const cleanup = (): void => {
|
|
87
95
|
removeListeners();
|
|
88
96
|
resizeObserver?.disconnect();
|
|
97
|
+
nodeResizeObserver?.disconnect();
|
|
89
98
|
mutationObserver?.disconnect();
|
|
90
99
|
|
|
91
100
|
text.blurEditMode();
|
|
@@ -102,6 +111,7 @@ export const createNodeTools = (element: HTMLElement | null): NodeTools => {
|
|
|
102
111
|
clearHighlightFrame(nodeProvider);
|
|
103
112
|
selectedNode = null;
|
|
104
113
|
resizeObserver?.disconnect();
|
|
114
|
+
nodeResizeObserver?.disconnect();
|
|
105
115
|
mutationObserver?.disconnect();
|
|
106
116
|
},
|
|
107
117
|
getEditableNode: () => text.getEditableNode(),
|