@hprint/core 0.0.1-alpha.1 → 0.0.1-alpha.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.
@@ -1 +1 @@
1
- {"version":3,"file":"Editor.d.ts","sourceRoot":"","sources":["../src/Editor.ts"],"names":[],"mappings":"AAAA,OAAO,YAAY,MAAM,QAAQ,CAAC;AAElC,OAAO,WAAW,MAAM,kBAAkB,CAAC;AAE3C,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAC1C,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AACxC,OAAO,KAAK,EAGR,aAAa,EAEb,YAAY,EACf,MAAM,cAAc,CAAC;AAKtB,cAAM,MAAO,SAAQ,YAAY;IAC7B,OAAO,CAAC,MAAM,CAA8B;IAC5C,WAAW,EAAE,WAAW,GAAG,IAAI,CAAQ;IACvC,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;IACnB,OAAO,CAAC,SAAS,CAEV;IAEP,OAAO,CAAC,YAAY,CAAgB;IAEpC,OAAO,CAAC,UAAU,CAAgB;IAElC,OAAO,CAAC,KAAK,CAMX;IACK,WAAW,EAAE;QAChB,CAAC,QAAQ,EAAE,MAAM,GAAG,eAAe,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;KACjD,CAAM;IAEP,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM;IAW1B,IAAI,YAAY,QAEf;IAGD,GAAG,CAAC,MAAM,EAAE,YAAY,EAAE,OAAO,CAAC,EAAE,aAAa;IAkBjD,OAAO;IASP,SAAS,CAAC,IAAI,EAAE,MAAM;IAOtB,OAAO,CAAC,YAAY;IAqBpB,OAAO,CAAC,aAAa;IAuBrB,OAAO,CAAC,eAAe;IAUvB,OAAO,CAAC,eAAe;IAMvB,OAAO,CAAC,YAAY;IAapB,OAAO,CAAC,gBAAgB;IAoBxB,OAAO,CAAC,WAAW;IASnB,gBAAgB;IAMhB,gBAAgB;IAKhB,kBAAkB;IAKlB,GAAG,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,GAAG,IAAI;CAI9C;AAED,eAAe,MAAM,CAAC"}
1
+ {"version":3,"file":"Editor.d.ts","sourceRoot":"","sources":["../src/Editor.ts"],"names":[],"mappings":"AAAA,OAAO,YAAY,MAAM,QAAQ,CAAC;AAElC,OAAO,WAAW,MAAM,kBAAkB,CAAC;AAE3C,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAC1C,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AACxC,OAAO,KAAK,EAGR,aAAa,EAEb,YAAY,EACf,MAAM,cAAc,CAAC;AAKtB,cAAM,MAAO,SAAQ,YAAY;IAC7B,OAAO,CAAC,MAAM,CAA8B;IAC5C,WAAW,EAAE,WAAW,GAAG,IAAI,CAAQ;IACvC,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;IACnB,OAAO,CAAC,SAAS,CAEV;IAEP,OAAO,CAAC,YAAY,CAAgB;IAEpC,OAAO,CAAC,UAAU,CAAgB;IAElC,OAAO,CAAC,KAAK,CAOX;IACK,WAAW,EAAE;QAChB,CAAC,QAAQ,EAAE,MAAM,GAAG,eAAe,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;KACjD,CAAM;IAEP,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM;IAW1B,IAAI,YAAY,QAEf;IAGD,GAAG,CAAC,MAAM,EAAE,YAAY,EAAE,OAAO,CAAC,EAAE,aAAa;IAkBjD,OAAO;IASP,SAAS,CAAC,IAAI,EAAE,MAAM;IAOtB,OAAO,CAAC,YAAY;IAqBpB,OAAO,CAAC,aAAa;IAuBrB,OAAO,CAAC,eAAe;IAUvB,OAAO,CAAC,eAAe;IAMvB,OAAO,CAAC,YAAY;IAapB,OAAO,CAAC,gBAAgB;IAoBxB,OAAO,CAAC,WAAW;IASnB,gBAAgB;IAMhB,gBAAgB;IAKhB,kBAAkB;IAKlB,GAAG,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,GAAG,IAAI;CAI9C;AAED,eAAe,MAAM,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"ServersPlugin.d.ts","sourceRoot":"","sources":["../src/ServersPlugin.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAgB,MAAM,QAAQ,CAAC;AAC9C,OAAO,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,mCAAmC,CAAC;AAE5E,KAAK,OAAO,GAAG,IAAI,CACf,aAAa,EACX,QAAQ,GACR,UAAU,GACV,SAAS,GACT,aAAa,GACb,WAAW,GACX,iBAAiB,GACjB,UAAU,GACV,SAAS,GACT,WAAW,GACX,SAAS,GACT,OAAO,GACP,SAAS,GACT,eAAe,GACf,eAAe,GACf,iBAAiB,CACtB,CAAC;AAEF,OAAO,QAAQ,cAAc,CAAC;IAE1B,UAAU,OAAQ,SAAQ,OAAO;KAAG;CACvC;AAaD,cAAM,aAAc,YAAW,YAAY;IAuB5B,MAAM,EAAE,MAAM,CAAC,MAAM;IACrB,MAAM,EAAE,OAAO;IAvBnB,YAAY,EAAE,UAAU,CAAC;IAChC,MAAM,CAAC,UAAU,SAAmB;IACpC,MAAM,CAAC,IAAI,WAgBT;IACF,MAAM,CAAC,MAAM,+BAA0D;gBAG5D,MAAM,EAAE,MAAM,CAAC,MAAM,EACrB,MAAM,EAAE,OAAO;IAM1B,OAAO,CAAC,gBAAgB;IAMxB,OAAO,CAAC,gBAAgB;IAmBxB,aAAa;IAIb,MAAM,CAAC,QAAQ,CAAC,EAAE,MAAM,IAAI;IAc5B,eAAe,CAAC,SAAS,EAAE,MAAM,CAAC,IAAI,GAAG,MAAM,EAAE,GAAG,CAAC,EAAE;IAajD,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,IAAI;IA4CzD,UAAU,CAAC,IAAI,EAAE,GAAG;IAW1B,gBAAgB,CAAC,IAAI,EAAE,GAAG;IAQ1B,OAAO;;;;IAKP,eAAe;IAgBf;;;;OAIG;IACH,WAAW,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,SAAS;IAyBlD,SAAS;IAKH,eAAe;IAKf,QAAQ;IAUd,OAAO;IAcP,OAAO;IAWP,SAAS;IAaT,OAAO;IAcP,aAAa;IAIb,iBAAiB;;;;;;;;;;;;;IAmCjB,cAAc;;;;;;;;;;IAkBd,KAAK;IAWL,OAAO;CAGV;AAED,eAAe,aAAa,CAAC"}
1
+ {"version":3,"file":"ServersPlugin.d.ts","sourceRoot":"","sources":["../src/ServersPlugin.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAgB,MAAM,QAAQ,CAAC;AAC9C,OAAO,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,mCAAmC,CAAC;AAE5E,KAAK,OAAO,GAAG,IAAI,CACf,aAAa,EACX,QAAQ,GACR,UAAU,GACV,SAAS,GACT,aAAa,GACb,WAAW,GACX,iBAAiB,GACjB,UAAU,GACV,SAAS,GACT,WAAW,GACX,SAAS,GACT,OAAO,GACP,SAAS,GACT,eAAe,GACf,eAAe,GACf,iBAAiB,CACtB,CAAC;AAEF,OAAO,QAAQ,cAAc,CAAC;IAE1B,UAAU,OAAQ,SAAQ,OAAO;KAAI;CACxC;AAaD,cAAM,aAAc,YAAW,YAAY;IAuB5B,MAAM,EAAE,MAAM,CAAC,MAAM;IACrB,MAAM,EAAE,OAAO;IAvBnB,YAAY,EAAE,UAAU,CAAC;IAChC,MAAM,CAAC,UAAU,SAAmB;IACpC,MAAM,CAAC,IAAI,WAgBT;IACF,MAAM,CAAC,MAAM,+BAA0D;gBAG5D,MAAM,EAAE,MAAM,CAAC,MAAM,EACrB,MAAM,EAAE,OAAO;IAM1B,OAAO,CAAC,gBAAgB;IAMxB,OAAO,CAAC,gBAAgB;IAmBxB,aAAa;IAIb,MAAM,CAAC,QAAQ,CAAC,EAAE,MAAM,IAAI;IAc5B,eAAe,CAAC,SAAS,EAAE,MAAM,CAAC,IAAI,GAAG,MAAM,EAAE,GAAG,CAAC,EAAE;IAajD,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,IAAI;IAuDzD,UAAU,CAAC,IAAI,EAAE,GAAG;IAW1B,gBAAgB,CAAC,IAAI,EAAE,GAAG;IAQ1B,OAAO;;;;IAKP,eAAe;IAiBf;;;;OAIG;IACH,WAAW,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,SAAS;IAyBlD,SAAS;IAKH,eAAe;IAKf,QAAQ;IAUd,OAAO;IAcP,OAAO;IAWP,SAAS;IAaT,OAAO;IAcP,aAAa;IAIb,iBAAiB;;;;;;;;;;;;;IAmCjB,cAAc;;;;;;;;;;IAkBd,KAAK;IAWL,OAAO;CAGV;AAED,eAAe,aAAa,CAAC"}
package/dist/index.js CHANGED
@@ -438,7 +438,7 @@ gl_FragColor.rgb *= color.a;
438
438
  `?(e++,n[e]=0):n[e]++;n[0]>0&&(this.insertCharStyleObject(t.lineIndex,t.charIndex,n[0],a),a=a&&a.slice(n[0]+1)),e&&this.insertNewlineStyleObject(t.lineIndex,t.charIndex+n[0],e);for(var o=1;o<e;o++)n[o]>0?this.insertCharStyleObject(t.lineIndex+o,0,n[o],a):a&&this.styles[t.lineIndex+o]&&a[0]&&(this.styles[t.lineIndex+o][0]=a[0]),a=a&&a.slice(n[o]+1);n[o]>0&&this.insertCharStyleObject(t.lineIndex+o,0,n[o],a)},setSelectionStartEndWithShift:function(i,l,a){a<=i?(l===i?this._selectionDirection="left":this._selectionDirection==="right"&&(this._selectionDirection="left",this.selectionEnd=i),this.selectionStart=a):a>i&&a<l?this._selectionDirection==="right"?this.selectionEnd=a:this.selectionStart=a:(l===i?this._selectionDirection="right":this._selectionDirection==="left"&&(this._selectionDirection="right",this.selectionStart=l),this.selectionEnd=a)},setSelectionInBoundaries:function(){var i=this.text.length;this.selectionStart>i?this.selectionStart=i:this.selectionStart<0&&(this.selectionStart=0),this.selectionEnd>i?this.selectionEnd=i:this.selectionEnd<0&&(this.selectionEnd=0)}})})(),r.util.object.extend(r.IText.prototype,{initDoubleClickSimulation:function(){this.__lastClickTime=+new Date,this.__lastLastClickTime=+new Date,this.__lastPointer={},this.on("mousedown",this.onMouseDown)},onMouseDown:function(c){if(this.canvas){this.__newClickTime=+new Date;var i=c.pointer;this.isTripleClick(i)&&(this.fire("tripleclick",c),this._stopEvent(c.e)),this.__lastLastClickTime=this.__lastClickTime,this.__lastClickTime=this.__newClickTime,this.__lastPointer=i,this.__lastIsEditing=this.isEditing,this.__lastSelected=this.selected}},isTripleClick:function(c){return this.__newClickTime-this.__lastClickTime<500&&this.__lastClickTime-this.__lastLastClickTime<500&&this.__lastPointer.x===c.x&&this.__lastPointer.y===c.y},_stopEvent:function(c){c.preventDefault&&c.preventDefault(),c.stopPropagation&&c.stopPropagation()},initCursorSelectionHandlers:function(){this.initMousedownHandler(),this.initMouseupHandler(),this.initClicks()},doubleClickHandler:function(c){this.isEditing&&this.selectWord(this.getSelectionStartFromPointer(c.e))},tripleClickHandler:function(c){this.isEditing&&this.selectLine(this.getSelectionStartFromPointer(c.e))},initClicks:function(){this.on("mousedblclick",this.doubleClickHandler),this.on("tripleclick",this.tripleClickHandler)},_mouseDownHandler:function(c){!this.canvas||!this.editable||c.e.button&&c.e.button!==1||(this.__isMousedown=!0,this.selected&&(this.inCompositionMode=!1,this.setCursorByClick(c.e)),this.isEditing&&(this.__selectionStartOnMouseDown=this.selectionStart,this.selectionStart===this.selectionEnd&&this.abortCursorAnimation(),this.renderCursorOrSelection()))},_mouseDownHandlerBefore:function(c){!this.canvas||!this.editable||c.e.button&&c.e.button!==1||(this.selected=this===this.canvas._activeObject)},initMousedownHandler:function(){this.on("mousedown",this._mouseDownHandler),this.on("mousedown:before",this._mouseDownHandlerBefore)},initMouseupHandler:function(){this.on("mouseup",this.mouseUpHandler)},mouseUpHandler:function(c){if(this.__isMousedown=!1,!(!this.editable||this.group||c.transform&&c.transform.actionPerformed||c.e.button&&c.e.button!==1)){if(this.canvas){var i=this.canvas._activeObject;if(i&&i!==this)return}this.__lastSelected&&!this.__corner?(this.selected=!1,this.__lastSelected=!1,this.enterEditing(c.e),this.selectionStart===this.selectionEnd?this.initDelayedCursor(!0):this.renderCursorOrSelection()):this.selected=!0}},setCursorByClick:function(c){var i=this.getSelectionStartFromPointer(c),l=this.selectionStart,a=this.selectionEnd;c.shiftKey?this.setSelectionStartEndWithShift(l,a,i):(this.selectionStart=i,this.selectionEnd=i),this.isEditing&&(this._fireSelectionChanged(),this._updateTextarea())},getSelectionStartFromPointer:function(c){for(var i=this.getLocalPointer(c),l=0,a=0,t=0,n=0,e=0,o,h,s=0,u=this._textLines.length;s<u&&t<=i.y;s++)t+=this.getHeightOfLine(s)*this.scaleY,e=s,s>0&&(n+=this._textLines[s-1].length+this.missingNewlineOffset(s-1));o=this._getLineLeftOffset(e),a=o*this.scaleX,h=this._textLines[e],this.direction==="rtl"&&(i.x=this.width*this.scaleX-i.x+a);for(var d=0,m=h.length;d<m&&(l=a,a+=this.__charBounds[e][d].kernedWidth*this.scaleX,a<=i.x);d++)n++;return this._getNewSelectionStartFromOffset(i,l,a,n,m)},_getNewSelectionStartFromOffset:function(c,i,l,a,t){var n=c.x-i,e=l-c.x,o=e>n||e<0?0:1,h=a+o;return this.flipX&&(h=t-h),h>this._text.length&&(h=this._text.length),h}}),r.util.object.extend(r.IText.prototype,{initHiddenTextarea:function(){this.hiddenTextarea=r.document.createElement("textarea"),this.hiddenTextarea.setAttribute("autocapitalize","off"),this.hiddenTextarea.setAttribute("autocorrect","off"),this.hiddenTextarea.setAttribute("autocomplete","off"),this.hiddenTextarea.setAttribute("spellcheck","false"),this.hiddenTextarea.setAttribute("data-fabric-hiddentextarea",""),this.hiddenTextarea.setAttribute("wrap","off");var c=this._calcTextareaPosition();this.hiddenTextarea.style.cssText="position: absolute; top: "+c.top+"; left: "+c.left+"; z-index: -999; opacity: 0; width: 1px; height: 1px; font-size: 1px; padding-top: "+c.fontSize+";",this.hiddenTextareaContainer?this.hiddenTextareaContainer.appendChild(this.hiddenTextarea):r.document.body.appendChild(this.hiddenTextarea),r.util.addListener(this.hiddenTextarea,"keydown",this.onKeyDown.bind(this)),r.util.addListener(this.hiddenTextarea,"keyup",this.onKeyUp.bind(this)),r.util.addListener(this.hiddenTextarea,"input",this.onInput.bind(this)),r.util.addListener(this.hiddenTextarea,"copy",this.copy.bind(this)),r.util.addListener(this.hiddenTextarea,"cut",this.copy.bind(this)),r.util.addListener(this.hiddenTextarea,"paste",this.paste.bind(this)),r.util.addListener(this.hiddenTextarea,"compositionstart",this.onCompositionStart.bind(this)),r.util.addListener(this.hiddenTextarea,"compositionupdate",this.onCompositionUpdate.bind(this)),r.util.addListener(this.hiddenTextarea,"compositionend",this.onCompositionEnd.bind(this)),!this._clickHandlerInitialized&&this.canvas&&(r.util.addListener(this.canvas.upperCanvasEl,"click",this.onClick.bind(this)),this._clickHandlerInitialized=!0)},keysMap:{9:"exitEditing",27:"exitEditing",33:"moveCursorUp",34:"moveCursorDown",35:"moveCursorRight",36:"moveCursorLeft",37:"moveCursorLeft",38:"moveCursorUp",39:"moveCursorRight",40:"moveCursorDown"},keysMapRtl:{9:"exitEditing",27:"exitEditing",33:"moveCursorUp",34:"moveCursorDown",35:"moveCursorLeft",36:"moveCursorRight",37:"moveCursorRight",38:"moveCursorUp",39:"moveCursorLeft",40:"moveCursorDown"},ctrlKeysMapUp:{67:"copy",88:"cut"},ctrlKeysMapDown:{65:"selectAll"},onClick:function(){this.hiddenTextarea&&this.hiddenTextarea.focus()},onKeyDown:function(c){if(this.isEditing){var i=this.direction==="rtl"?this.keysMapRtl:this.keysMap;if(c.keyCode in i)this[i[c.keyCode]](c);else if(c.keyCode in this.ctrlKeysMapDown&&(c.ctrlKey||c.metaKey))this[this.ctrlKeysMapDown[c.keyCode]](c);else return;c.stopImmediatePropagation(),c.preventDefault(),c.keyCode>=33&&c.keyCode<=40?(this.inCompositionMode=!1,this.clearContextTop(),this.renderCursorOrSelection()):this.canvas&&this.canvas.requestRenderAll()}},onKeyUp:function(c){if(!this.isEditing||this._copyDone||this.inCompositionMode){this._copyDone=!1;return}if(c.keyCode in this.ctrlKeysMapUp&&(c.ctrlKey||c.metaKey))this[this.ctrlKeysMapUp[c.keyCode]](c);else return;c.stopImmediatePropagation(),c.preventDefault(),this.canvas&&this.canvas.requestRenderAll()},onInput:function(c){var i=this.fromPaste;if(this.fromPaste=!1,c&&c.stopPropagation(),!!this.isEditing){var l=this._splitTextIntoLines(this.hiddenTextarea.value).graphemeText,a=this._text.length,t=l.length,n,e,o=t-a,h=this.selectionStart,s=this.selectionEnd,u=h!==s,d,m,g;if(this.hiddenTextarea.value===""){this.styles={},this.updateFromTextArea(),this.fire("changed"),this.canvas&&(this.canvas.fire("text:changed",{target:this}),this.canvas.requestRenderAll());return}var v=this.fromStringToGraphemeSelection(this.hiddenTextarea.selectionStart,this.hiddenTextarea.selectionEnd,this.hiddenTextarea.value),b=h>v.selectionStart;u?(n=this._text.slice(h,s),o+=s-h):t<a&&(b?n=this._text.slice(s+o,s):n=this._text.slice(h,h-o)),e=l.slice(v.selectionEnd-o,v.selectionEnd),n&&n.length&&(e.length&&(d=this.getSelectionStyles(h,h+1,!1),d=e.map(function(){return d[0]})),u?(m=h,g=s):b?(m=s-n.length,g=s):(m=s,g=s+n.length),this.removeStyleFromTo(m,g)),e.length&&(i&&e.join("")===r.copiedText&&!r.disableStyleCopyPaste&&(d=r.copiedTextStyle),this.insertNewStyleBlock(e,h,d)),this.updateFromTextArea(),this.fire("changed"),this.canvas&&(this.canvas.fire("text:changed",{target:this}),this.canvas.requestRenderAll())}},onCompositionStart:function(){this.inCompositionMode=!0},onCompositionEnd:function(){this.inCompositionMode=!1},onCompositionUpdate:function(c){this.compositionStart=c.target.selectionStart,this.compositionEnd=c.target.selectionEnd,this.updateTextareaPosition()},copy:function(){this.selectionStart!==this.selectionEnd&&(r.copiedText=this.getSelectedText(),r.disableStyleCopyPaste?r.copiedTextStyle=null:r.copiedTextStyle=this.getSelectionStyles(this.selectionStart,this.selectionEnd,!0),this._copyDone=!0)},paste:function(){this.fromPaste=!0},_getClipboardData:function(c){return c&&c.clipboardData||r.window.clipboardData},_getWidthBeforeCursor:function(c,i){var l=this._getLineLeftOffset(c),a;return i>0&&(a=this.__charBounds[c][i-1],l+=a.left+a.width),l},getDownCursorOffset:function(c,i){var l=this._getSelectionForOffset(c,i),a=this.get2DCursorLocation(l),t=a.lineIndex;if(t===this._textLines.length-1||c.metaKey||c.keyCode===34)return this._text.length-l;var n=a.charIndex,e=this._getWidthBeforeCursor(t,n),o=this._getIndexOnLine(t+1,e),h=this._textLines[t].slice(n);return h.length+o+1+this.missingNewlineOffset(t)},_getSelectionForOffset:function(c,i){return c.shiftKey&&this.selectionStart!==this.selectionEnd&&i?this.selectionEnd:this.selectionStart},getUpCursorOffset:function(c,i){var l=this._getSelectionForOffset(c,i),a=this.get2DCursorLocation(l),t=a.lineIndex;if(t===0||c.metaKey||c.keyCode===33)return-l;var n=a.charIndex,e=this._getWidthBeforeCursor(t,n),o=this._getIndexOnLine(t-1,e),h=this._textLines[t].slice(0,n),s=this.missingNewlineOffset(t-1);return-this._textLines[t-1].length+o-h.length+(1-s)},_getIndexOnLine:function(c,i){for(var l=this._textLines[c],a=this._getLineLeftOffset(c),t=a,n=0,e,o,h=0,s=l.length;h<s;h++)if(e=this.__charBounds[c][h].width,t+=e,t>i){o=!0;var u=t-e,d=t,m=Math.abs(u-i),g=Math.abs(d-i);n=g<m?h:h-1;break}return o||(n=l.length-1),n},moveCursorDown:function(c){this.selectionStart>=this._text.length&&this.selectionEnd>=this._text.length||this._moveCursorUpOrDown("Down",c)},moveCursorUp:function(c){this.selectionStart===0&&this.selectionEnd===0||this._moveCursorUpOrDown("Up",c)},_moveCursorUpOrDown:function(c,i){var l="get"+c+"CursorOffset",a=this[l](i,this._selectionDirection==="right");i.shiftKey?this.moveCursorWithShift(a):this.moveCursorWithoutShift(a),a!==0&&(this.setSelectionInBoundaries(),this.abortCursorAnimation(),this._currentCursorOpacity=1,this.initDelayedCursor(),this._fireSelectionChanged(),this._updateTextarea())},moveCursorWithShift:function(c){var i=this._selectionDirection==="left"?this.selectionStart+c:this.selectionEnd+c;return this.setSelectionStartEndWithShift(this.selectionStart,this.selectionEnd,i),c!==0},moveCursorWithoutShift:function(c){return c<0?(this.selectionStart+=c,this.selectionEnd=this.selectionStart):(this.selectionEnd+=c,this.selectionStart=this.selectionEnd),c!==0},moveCursorLeft:function(c){this.selectionStart===0&&this.selectionEnd===0||this._moveCursorLeftOrRight("Left",c)},_move:function(c,i,l){var a;if(c.altKey)a=this["findWordBoundary"+l](this[i]);else if(c.metaKey||c.keyCode===35||c.keyCode===36)a=this["findLineBoundary"+l](this[i]);else return this[i]+=l==="Left"?-1:1,!0;if(typeof a<"u"&&this[i]!==a)return this[i]=a,!0},_moveLeft:function(c,i){return this._move(c,i,"Left")},_moveRight:function(c,i){return this._move(c,i,"Right")},moveCursorLeftWithoutShift:function(c){var i=!0;return this._selectionDirection="left",this.selectionEnd===this.selectionStart&&this.selectionStart!==0&&(i=this._moveLeft(c,"selectionStart")),this.selectionEnd=this.selectionStart,i},moveCursorLeftWithShift:function(c){if(this._selectionDirection==="right"&&this.selectionStart!==this.selectionEnd)return this._moveLeft(c,"selectionEnd");if(this.selectionStart!==0)return this._selectionDirection="left",this._moveLeft(c,"selectionStart")},moveCursorRight:function(c){this.selectionStart>=this._text.length&&this.selectionEnd>=this._text.length||this._moveCursorLeftOrRight("Right",c)},_moveCursorLeftOrRight:function(c,i){var l="moveCursor"+c+"With";this._currentCursorOpacity=1,i.shiftKey?l+="Shift":l+="outShift",this[l](i)&&(this.abortCursorAnimation(),this.initDelayedCursor(),this._fireSelectionChanged(),this._updateTextarea())},moveCursorRightWithShift:function(c){if(this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd)return this._moveRight(c,"selectionStart");if(this.selectionEnd!==this._text.length)return this._selectionDirection="right",this._moveRight(c,"selectionEnd")},moveCursorRightWithoutShift:function(c){var i=!0;return this._selectionDirection="right",this.selectionStart===this.selectionEnd?(i=this._moveRight(c,"selectionStart"),this.selectionEnd=this.selectionStart):this.selectionStart=this.selectionEnd,i},removeChars:function(c,i){typeof i>"u"&&(i=c+1),this.removeStyleFromTo(c,i),this._text.splice(c,i-c),this.text=this._text.join(""),this.set("dirty",!0),this._shouldClearDimensionCache()&&(this.initDimensions(),this.setCoords()),this._removeExtraneousStyles()},insertChars:function(c,i,l,a){typeof a>"u"&&(a=l),a>l&&this.removeStyleFromTo(l,a);var t=r.util.string.graphemeSplit(c);this.insertNewStyleBlock(t,l,i),this._text=[].concat(this._text.slice(0,l),t,this._text.slice(a)),this.text=this._text.join(""),this.set("dirty",!0),this._shouldClearDimensionCache()&&(this.initDimensions(),this.setCoords()),this._removeExtraneousStyles()}}),(function(){var c=r.util.toFixed,i=/ +/g;r.util.object.extend(r.Text.prototype,{_toSVG:function(){var l=this._getSVGLeftTopOffsets(),a=this._getSVGTextAndBg(l.textTop,l.textLeft);return this._wrapSVGTextAndBg(a)},toSVG:function(l){return this._createBaseSVGMarkup(this._toSVG(),{reviver:l,noStyle:!0,withShadow:!0})},_getSVGLeftTopOffsets:function(){return{textLeft:-this.width/2,textTop:-this.height/2,lineTop:this.getHeightOfLine(0)}},_wrapSVGTextAndBg:function(l){var a=!0,t=this.getSvgTextDecoration(this);return[l.textBgRects.join(""),' <text xml:space="preserve" ',this.fontFamily?'font-family="'+this.fontFamily.replace(/"/g,"'")+'" ':"",this.fontSize?'font-size="'+this.fontSize+'" ':"",this.fontStyle?'font-style="'+this.fontStyle+'" ':"",this.fontWeight?'font-weight="'+this.fontWeight+'" ':"",t?'text-decoration="'+t+'" ':"",'style="',this.getSvgStyles(a),'"',this.addPaintOrder()," >",l.textSpans.join(""),`</text>
439
439
  `]},_getSVGTextAndBg:function(l,a){var t=[],n=[],e=l,o;this._setSVGBg(n);for(var h=0,s=this._textLines.length;h<s;h++)o=this._getLineLeftOffset(h),(this.textBackgroundColor||this.styleHas("textBackgroundColor",h))&&this._setSVGTextLineBg(n,h,a+o,e),this._setSVGTextLineText(t,h,a+o,e),e+=this.getHeightOfLine(h);return{textSpans:t,textBgRects:n}},_createTextCharSpan:function(l,a,t,n){var e=l!==l.trim()||l.match(i),o=this.getSvgSpanStyles(a,e),h=o?'style="'+o+'"':"",s=a.deltaY,u="",d=r.Object.NUM_FRACTION_DIGITS;return s&&(u=' dy="'+c(s,d)+'" '),['<tspan x="',c(t,d),'" y="',c(n,d),'" ',u,h,">",r.util.string.escapeXml(l),"</tspan>"].join("")},_setSVGTextLineText:function(l,a,t,n){var e=this.getHeightOfLine(a),o=this.textAlign.indexOf("justify")!==-1,h,s,u="",d,m,g=0,v=this._textLines[a],b;n+=e*(1-this._fontSizeFraction)/this.lineHeight;for(var S=0,E=v.length-1;S<=E;S++)b=S===E||this.charSpacing,u+=v[S],d=this.__charBounds[a][S],g===0?(t+=d.kernedWidth-d.width,g+=d.width):g+=d.kernedWidth,o&&!b&&this._reSpaceAndTab.test(v[S])&&(b=!0),b||(h=h||this.getCompleteStyleDeclaration(a,S),s=this.getCompleteStyleDeclaration(a,S+1),b=r.util.hasStyleChanged(h,s,!0)),b&&(m=this._getStyleDeclaration(a,S)||{},l.push(this._createTextCharSpan(u,m,t,n)),u="",h=s,t+=g,g=0)},_pushTextBgRect:function(l,a,t,n,e,o){var h=r.Object.NUM_FRACTION_DIGITS;l.push(" <rect ",this._getFillAttributes(a),' x="',c(t,h),'" y="',c(n,h),'" width="',c(e,h),'" height="',c(o,h),`"></rect>
440
440
  `)},_setSVGTextLineBg:function(l,a,t,n){for(var e=this._textLines[a],o=this.getHeightOfLine(a)/this.lineHeight,h=0,s=0,u,d,m=this.getValueOfPropertyAt(a,0,"textBackgroundColor"),g=0,v=e.length;g<v;g++)u=this.__charBounds[a][g],d=this.getValueOfPropertyAt(a,g,"textBackgroundColor"),d!==m?(m&&this._pushTextBgRect(l,m,t+s,n,h,o),s=u.left,h=u.width,m=d):h+=u.kernedWidth;d&&this._pushTextBgRect(l,d,t+s,n,h,o)},_getFillAttributes:function(l){var a=l&&typeof l=="string"?new r.Color(l):"";return!a||!a.getSource()||a.getAlpha()===1?'fill="'+l+'"':'opacity="'+a.getAlpha()+'" fill="'+a.setAlpha(1).toRgb()+'"'},_getSVGLineTopOffset:function(l){for(var a=0,t=0,n=0;n<l;n++)a+=this.getHeightOfLine(n);return t=this.getHeightOfLine(n),{lineTop:a,offset:(this._fontSizeMult-this._fontSizeFraction)*t/(this.lineHeight*this._fontSizeMult)}},getSvgStyles:function(l){var a=r.Object.prototype.getSvgStyles.call(this,l);return a+" white-space: pre;"}})})(),(function(c){var i=c.fabric||(c.fabric={});i.Textbox=i.util.createClass(i.IText,i.Observable,{type:"textbox",minWidth:20,dynamicMinWidth:2,__cachedLines:null,lockScalingFlip:!0,noScaleCache:!1,_dimensionAffectingProps:i.Text.prototype._dimensionAffectingProps.concat("width"),_wordJoiners:/[ \t\r]/,splitByGrapheme:!1,initDimensions:function(){this.__skipDimension||(this.isEditing&&this.initDelayedCursor(),this.clearContextTop(),this._clearCache(),this.dynamicMinWidth=0,this._styleMap=this._generateStyleMap(this._splitText()),this.dynamicMinWidth>this.width&&this._set("width",this.dynamicMinWidth),this.textAlign.indexOf("justify")!==-1&&this.enlargeSpaces(),this.height=this.calcTextHeight(),this.saveState({propertySet:"_dimensionAffectingProps"}))},_generateStyleMap:function(l){for(var a=0,t=0,n=0,e={},o=0;o<l.graphemeLines.length;o++)l.graphemeText[n]===`
441
- `&&o>0?(t=0,n++,a++):!this.splitByGrapheme&&this._reSpaceAndTab.test(l.graphemeText[n])&&o>0&&(t++,n++),e[o]={line:a,offset:t},n+=l.graphemeLines[o].length,t+=l.graphemeLines[o].length;return e},styleHas:function(l,a){if(this._styleMap&&!this.isWrapping){var t=this._styleMap[a];t&&(a=t.line)}return i.Text.prototype.styleHas.call(this,l,a)},isEmptyStyles:function(l){if(!this.styles)return!0;var a=0,t=l+1,n,e,o=!1,h=this._styleMap[l],s=this._styleMap[l+1];h&&(l=h.line,a=h.offset),s&&(t=s.line,o=t===l,n=s.offset),e=typeof l>"u"?this.styles:{line:this.styles[l]};for(var u in e)for(var d in e[u])if(d>=a&&(!o||d<n))for(var m in e[u][d])return!1;return!0},_getStyleDeclaration:function(l,a){if(this._styleMap&&!this.isWrapping){var t=this._styleMap[l];if(!t)return null;l=t.line,a=t.offset+a}return this.callSuper("_getStyleDeclaration",l,a)},_setStyleDeclaration:function(l,a,t){var n=this._styleMap[l];l=n.line,a=n.offset+a,this.styles[l][a]=t},_deleteStyleDeclaration:function(l,a){var t=this._styleMap[l];l=t.line,a=t.offset+a,delete this.styles[l][a]},_getLineStyle:function(l){var a=this._styleMap[l];return!!this.styles[a.line]},_setLineStyle:function(l){var a=this._styleMap[l];this.styles[a.line]={}},_wrapText:function(l,a){var t=[],n;for(this.isWrapping=!0,n=0;n<l.length;n++)t=t.concat(this._wrapLine(l[n],n,a));return this.isWrapping=!1,t},_measureWord:function(l,a,t){var n=0,e,o=!0;t=t||0;for(var h=0,s=l.length;h<s;h++){var u=this._getGraphemeBox(l[h],a,h+t,e,o);n+=u.kernedWidth,e=l[h]}return n},_wrapLine:function(l,a,t,R){var e=0,o=this.splitByGrapheme,h=[],s=[],u=o?i.util.string.graphemeSplit(l):l.split(this._wordJoiners),d="",m=0,g=o?"":" ",v=0,b=0,S=0,E=!0,F=this._getWidthOfCharSpacing(),R=R||0;u.length===0&&u.push([]),t-=R;for(var z=0;z<u.length;z++)d=o?u[z]:i.util.string.graphemeSplit(u[z]),v=this._measureWord(d,a,m),m+=d.length,e+=b+v-F,e>t&&!E?(h.push(s),s=[],e=v,E=!0):e+=F,!E&&!o&&s.push(g),s=s.concat(d),b=o?0:this._measureWord([g],a,m),m++,E=!1,v>S&&(S=v);return z&&h.push(s),S+R>this.dynamicMinWidth&&(this.dynamicMinWidth=S-F+R),h},isEndOfWrapping:function(l){return!this._styleMap[l+1]||this._styleMap[l+1].line!==this._styleMap[l].line},missingNewlineOffset:function(l){return this.splitByGrapheme?this.isEndOfWrapping(l)?1:0:1},_splitTextIntoLines:function(l){for(var a=i.Text.prototype._splitTextIntoLines.call(this,l),t=this._wrapText(a.lines,this.width),n=new Array(t.length),e=0;e<t.length;e++)n[e]=t[e].join("");return a.lines=n,a.graphemeLines=t,a},getMinWidth:function(){return Math.max(this.minWidth,this.dynamicMinWidth)},_removeExtraneousStyles:function(){var l={};for(var a in this._styleMap)this._textLines[a]&&(l[this._styleMap[a].line]=1);for(var a in this.styles)l[a]||delete this.styles[a]},toObject:function(l){return this.callSuper("toObject",["minWidth","splitByGrapheme"].concat(l))}}),i.Textbox.fromObject=function(l,a){var t=i.util.stylesFromArray(l.styles,l.text),n=Object.assign({},l,{styles:t});return i.Object._fromObject("Textbox",n,a,"text")}})(f),(function(){var c=r.controlsUtils,i=c.scaleSkewCursorStyleHandler,l=c.scaleCursorStyleHandler,a=c.scalingEqually,t=c.scalingYOrSkewingX,n=c.scalingXOrSkewingY,e=c.scaleOrSkewActionName,o=r.Object.prototype.controls;if(o.ml=new r.Control({x:-.5,y:0,cursorStyleHandler:i,actionHandler:n,getActionName:e}),o.mr=new r.Control({x:.5,y:0,cursorStyleHandler:i,actionHandler:n,getActionName:e}),o.mb=new r.Control({x:0,y:.5,cursorStyleHandler:i,actionHandler:t,getActionName:e}),o.mt=new r.Control({x:0,y:-.5,cursorStyleHandler:i,actionHandler:t,getActionName:e}),o.tl=new r.Control({x:-.5,y:-.5,cursorStyleHandler:l,actionHandler:a}),o.tr=new r.Control({x:.5,y:-.5,cursorStyleHandler:l,actionHandler:a}),o.bl=new r.Control({x:-.5,y:.5,cursorStyleHandler:l,actionHandler:a}),o.br=new r.Control({x:.5,y:.5,cursorStyleHandler:l,actionHandler:a}),o.mtr=new r.Control({x:0,y:-.5,actionHandler:c.rotationWithSnapping,cursorStyleHandler:c.rotationStyleHandler,offsetY:-40,withConnection:!0,actionName:"rotate"}),r.Textbox){var h=r.Textbox.prototype.controls={};h.mtr=o.mtr,h.tr=o.tr,h.br=o.br,h.tl=o.tl,h.bl=o.bl,h.mt=o.mt,h.mb=o.mb,h.mr=new r.Control({x:.5,y:0,actionHandler:c.changeWidth,cursorStyleHandler:i,actionName:"resizing"}),h.ml=new r.Control({x:-.5,y:0,actionHandler:c.changeWidth,cursorStyleHandler:i,actionName:"resizing"})}})()})(si)),si}var _t=No(),ue=(f=>(f.ONE="selectOne",f.MULTI="selectMultiple",f.CANCEL="selectCancel",f))(ue||{}),te=(f=>(f.EMPTY="",f.ONE="one",f.MULTI="multiple",f))(te||{});function dr(f){f&&f.forEach(r=>{r.objects?dr(r.objects):r.type==="text"&&(r.type="textbox")})}const ge=class ge{constructor(r,p){this.canvas=r,this.editor=p,this.selectedMode=te.EMPTY,this._initSelectEvent()}_initSelectEvent(){this.canvas.on("selection:created",()=>this._emitSelectEvent()),this.canvas.on("selection:updated",()=>this._emitSelectEvent()),this.canvas.on("selection:cleared",()=>this._emitSelectEvent())}_emitSelectEvent(){if(!this.canvas)throw TypeError("还未初始化");const r=this.canvas.getActiveObjects().filter(p=>!(p instanceof _t.fabric.GuideLine));r&&r.length===1?(this.selectedMode=te.ONE,this.editor.emit(ue.ONE,r)):r&&r.length>1?(this.selectedMode=te.MULTI,this.editor.emit(ue.MULTI,r)):this.editor.emit(ue.CANCEL)}getSelectMode(){return String(this.selectedMode)}insert(r){ur({accept:".json"}).then(p=>{if(p&&p.length>0){const _=p[0],y=new FileReader;y.readAsText(_,"UTF-8"),y.onload=()=>{this.loadJSON(y.result,r)}}})}renderITextPath(r){r.forEach(p=>{const _=this.canvas.getObjects().find(y=>y.id===p.id);_&&_t.fabric.Path.fromObject(p.path,y=>{_.set("path",y)})})}async loadJSON(r,p){const _=typeof r=="string"?JSON.parse(r):r,y=[];_.objects.forEach(T=>{!T.id&&(T.id=On()),T.type==="i-text"&&T.path&&(y.push({id:T.id,path:T.path}),T.path=null)});const C=await this._transform(_);r=JSON.stringify(C),this.editor.hooksEntity.hookImportBefore.callAsync(r,()=>{this.canvas.loadFromJSON(r,()=>{this.renderITextPath(y),this.canvas.renderAll(),this.editor.hooksEntity.hookImportAfter.callAsync(r,()=>{this.editor?.updateDrawStatus&&typeof this.editor.updateDrawStatus=="function"&&this.editor.updateDrawStatus(!!_.overlayImage),this.canvas.renderAll(),p&&p(),this.editor.emit("loadJson")})})})}async _transform(r){if(await this.promiseCallAsync(r),r.objects){const p=r.objects.map(_=>this._transform(_));await Promise.all(p)}return r}promiseCallAsync(r){return new Promise(p=>{this.editor.hooksEntity.hookTransform.callAsync(r,()=>{p(r)})})}getJson(){const r=this.getExtensionKey();return this.canvas.toJSON(r)}getExtensionKey(){return["id","gradientAngle","selectable","hasControls","linkData","editable","extensionType","extension","verticalAlign","roundValue","getBase64"]}dragAddItem(r,p){if(p){const{left:y,top:C}=this.canvas.getSelectionElement().getBoundingClientRect();if(p.x<y||p.y<C||r.width===void 0)return;const T={x:p.x-y,y:p.y-C},c=this.canvas.restorePointerVpt(T);r.left=c.x-r.width/2,r.top=c.y}const{width:_}=this._getSaveOption();_&&r.scaleToWidth(_/2),this.canvas.add(r),this.canvas.setActiveObject(r),!p&&this.editor.position("center"),this.canvas.requestRenderAll()}clipboard(){const r=this.getJson();return ki(JSON.stringify(r,null," "))}async clipboardBase64(){const r=await this.preview();return ki(r)}async saveJson(){const r=this.getJson();await dr(r.objects);const p=`data:text/json;charset=utf-8,${encodeURIComponent(JSON.stringify(r,null," "))}`;Re(p,"json")}saveSvg(){this.editor.hooksEntity.hookSaveBefore.callAsync("",()=>{const{fontOption:r,svgOption:p}=this._getSaveSvgOption();_t.fabric.fontPaths={...r};const _=this.canvas.toSVG(p),y=`data:image/svg+xml;charset=utf-8,${encodeURIComponent(_)}`;this.editor.hooksEntity.hookSaveAfter.callAsync(y,()=>{Re(y,"svg")})})}saveImg(){this.editor.hooksEntity.hookSaveBefore.callAsync("",()=>{const r=this._getSaveOption();this.canvas.setViewportTransform([1,0,0,1,0,0]);const p=this.canvas.toDataURL(r);this.editor.hooksEntity.hookSaveAfter.callAsync(p,()=>{Re(p,"png")})})}getBase64(){return new Promise(r=>{this.editor.hooksEntity.hookSaveBefore.callAsync("",()=>{const p=this._getSaveOption();this.canvas.setViewportTransform([1,0,0,1,0,0]);const _=this.canvas.toDataURL(p);this.editor.hooksEntity.hookSaveAfter.callAsync(_,()=>r(_))})})}preview(){return new Promise(r=>{this.editor.hooksEntity.hookSaveBefore.callAsync("",()=>{const p=this._getSaveOption();this.canvas.setViewportTransform([1,0,0,1,0,0]),this.canvas.renderAll();const _=this.canvas.toDataURL(p);this.editor.hooksEntity.hookSaveAfter.callAsync(_,()=>{r(_)})})})}staticPreview(){return new Promise(r=>{})}_getSaveSvgOption(){const r=this.canvas.getObjects().find(l=>l.id==="workspace");let p=this.canvas.getObjects().filter(l=>l.type=="textbox").map(l=>l.fontFamily);p=Array.from(new Set(p));const _=this.editor.getPlugin("FontPlugin").cacheList,y={};for(const l of p){const a=_.find(t=>t.name===l);y[l]=a.file}console.log("_getSaveSvgOption",y);const{left:C,top:T,width:c,height:i}=r;return{fontOption:y,svgOption:{width:c,height:i,viewBox:{x:C,y:T,width:c,height:i}}}}_getSaveOption(){const r=this.canvas.getObjects().find(c=>c.id==="workspace"),{left:p,top:_,width:y,height:C}=r;return{name:"New Image",format:"jpeg",quality:1,multiplier:5,width:y,height:C,left:p,top:_}}clear(){this.canvas.getObjects().forEach(r=>{r.id!=="workspace"&&this.canvas.remove(r)}),this.editor?.setWorkspaseBg("#fff"),this.canvas.discardActiveObject(),this.canvas.renderAll()}destroy(){console.log("pluginDestroy")}};ge.pluginName="ServersPlugin",ge.apis=["insert","loadJSON","getJson","dragAddItem","clipboard","clipboardBase64","saveJson","saveSvg","saveImg","getBase64","clear","preview","staticPreview","getSelectMode","getExtensionKey"],ge.events=[te.ONE,te.MULTI,ue.CANCEL];let Ai=ge;var St={},ai={},rn;function gr(){return rn||(rn=1,ai.deprecate=(f,r)=>{let p=!0;return function(){return p&&(console.warn(`DeprecationWarning: ${r}`),p=!1),f.apply(this,arguments)}}),ai}var li,sn;function Mt(){if(sn)return li;sn=1;const r=gr().deprecate(()=>{},"Hook.context is deprecated and will be removed");function p(...T){return this.call=this._createCall("sync"),this.call(...T)}function _(...T){return this.callAsync=this._createCall("async"),this.callAsync(...T)}function y(...T){return this.promise=this._createCall("promise"),this.promise(...T)}class C{constructor(c=[],i=void 0){this._args=c,this.name=i,this.taps=[],this.interceptors=[],this._call=p,this.call=p,this._callAsync=_,this.callAsync=_,this._promise=y,this.promise=y,this._x=void 0,this.compile=this.compile,this.tap=this.tap,this.tapAsync=this.tapAsync,this.tapPromise=this.tapPromise}compile(c){throw new Error("Abstract: should be overridden")}_createCall(c){return this.compile({taps:this.taps,interceptors:this.interceptors,args:this._args,type:c})}_tap(c,i,l){if(typeof i=="string")i={name:i.trim()};else if(typeof i!="object"||i===null)throw new Error("Invalid tap options");if(typeof i.name!="string"||i.name==="")throw new Error("Missing name for tap");typeof i.context<"u"&&r(),i=Object.assign({type:c,fn:l},i),i=this._runRegisterInterceptors(i),this._insert(i)}tap(c,i){this._tap("sync",c,i)}tapAsync(c,i){this._tap("async",c,i)}tapPromise(c,i){this._tap("promise",c,i)}_runRegisterInterceptors(c){for(const i of this.interceptors)if(i.register){const l=i.register(c);l!==void 0&&(c=l)}return c}withOptions(c){const i=l=>Object.assign({},c,typeof l=="string"?{name:l}:l);return{name:this.name,tap:(l,a)=>this.tap(i(l),a),tapAsync:(l,a)=>this.tapAsync(i(l),a),tapPromise:(l,a)=>this.tapPromise(i(l),a),intercept:l=>this.intercept(l),isUsed:()=>this.isUsed(),withOptions:l=>this.withOptions(i(l))}}isUsed(){return this.taps.length>0||this.interceptors.length>0}intercept(c){if(this._resetCompilation(),this.interceptors.push(Object.assign({},c)),c.register)for(let i=0;i<this.taps.length;i++)this.taps[i]=c.register(this.taps[i])}_resetCompilation(){this.call=this._call,this.callAsync=this._callAsync,this.promise=this._promise}_insert(c){this._resetCompilation();let i;typeof c.before=="string"?i=new Set([c.before]):Array.isArray(c.before)&&(i=new Set(c.before));let l=0;typeof c.stage=="number"&&(l=c.stage);let a=this.taps.length;for(;a>0;){a--;const t=this.taps[a];this.taps[a+1]=t;const n=t.stage||0;if(i){if(i.has(t.name)){i.delete(t.name);continue}if(i.size>0)continue}if(!(n>l)){a++;break}}this.taps[a]=c}}return Object.setPrototypeOf(C.prototype,null),li=C,li}var ci,on;function Lt(){if(on)return ci;on=1;class f{constructor(p){this.config=p,this.options=void 0,this._args=void 0}create(p){this.init(p);let _;switch(this.options.type){case"sync":_=new Function(this.args(),`"use strict";
441
+ `&&o>0?(t=0,n++,a++):!this.splitByGrapheme&&this._reSpaceAndTab.test(l.graphemeText[n])&&o>0&&(t++,n++),e[o]={line:a,offset:t},n+=l.graphemeLines[o].length,t+=l.graphemeLines[o].length;return e},styleHas:function(l,a){if(this._styleMap&&!this.isWrapping){var t=this._styleMap[a];t&&(a=t.line)}return i.Text.prototype.styleHas.call(this,l,a)},isEmptyStyles:function(l){if(!this.styles)return!0;var a=0,t=l+1,n,e,o=!1,h=this._styleMap[l],s=this._styleMap[l+1];h&&(l=h.line,a=h.offset),s&&(t=s.line,o=t===l,n=s.offset),e=typeof l>"u"?this.styles:{line:this.styles[l]};for(var u in e)for(var d in e[u])if(d>=a&&(!o||d<n))for(var m in e[u][d])return!1;return!0},_getStyleDeclaration:function(l,a){if(this._styleMap&&!this.isWrapping){var t=this._styleMap[l];if(!t)return null;l=t.line,a=t.offset+a}return this.callSuper("_getStyleDeclaration",l,a)},_setStyleDeclaration:function(l,a,t){var n=this._styleMap[l];l=n.line,a=n.offset+a,this.styles[l][a]=t},_deleteStyleDeclaration:function(l,a){var t=this._styleMap[l];l=t.line,a=t.offset+a,delete this.styles[l][a]},_getLineStyle:function(l){var a=this._styleMap[l];return!!this.styles[a.line]},_setLineStyle:function(l){var a=this._styleMap[l];this.styles[a.line]={}},_wrapText:function(l,a){var t=[],n;for(this.isWrapping=!0,n=0;n<l.length;n++)t=t.concat(this._wrapLine(l[n],n,a));return this.isWrapping=!1,t},_measureWord:function(l,a,t){var n=0,e,o=!0;t=t||0;for(var h=0,s=l.length;h<s;h++){var u=this._getGraphemeBox(l[h],a,h+t,e,o);n+=u.kernedWidth,e=l[h]}return n},_wrapLine:function(l,a,t,R){var e=0,o=this.splitByGrapheme,h=[],s=[],u=o?i.util.string.graphemeSplit(l):l.split(this._wordJoiners),d="",m=0,g=o?"":" ",v=0,b=0,S=0,E=!0,F=this._getWidthOfCharSpacing(),R=R||0;u.length===0&&u.push([]),t-=R;for(var z=0;z<u.length;z++)d=o?u[z]:i.util.string.graphemeSplit(u[z]),v=this._measureWord(d,a,m),m+=d.length,e+=b+v-F,e>t&&!E?(h.push(s),s=[],e=v,E=!0):e+=F,!E&&!o&&s.push(g),s=s.concat(d),b=o?0:this._measureWord([g],a,m),m++,E=!1,v>S&&(S=v);return z&&h.push(s),S+R>this.dynamicMinWidth&&(this.dynamicMinWidth=S-F+R),h},isEndOfWrapping:function(l){return!this._styleMap[l+1]||this._styleMap[l+1].line!==this._styleMap[l].line},missingNewlineOffset:function(l){return this.splitByGrapheme?this.isEndOfWrapping(l)?1:0:1},_splitTextIntoLines:function(l){for(var a=i.Text.prototype._splitTextIntoLines.call(this,l),t=this._wrapText(a.lines,this.width),n=new Array(t.length),e=0;e<t.length;e++)n[e]=t[e].join("");return a.lines=n,a.graphemeLines=t,a},getMinWidth:function(){return Math.max(this.minWidth,this.dynamicMinWidth)},_removeExtraneousStyles:function(){var l={};for(var a in this._styleMap)this._textLines[a]&&(l[this._styleMap[a].line]=1);for(var a in this.styles)l[a]||delete this.styles[a]},toObject:function(l){return this.callSuper("toObject",["minWidth","splitByGrapheme"].concat(l))}}),i.Textbox.fromObject=function(l,a){var t=i.util.stylesFromArray(l.styles,l.text),n=Object.assign({},l,{styles:t});return i.Object._fromObject("Textbox",n,a,"text")}})(f),(function(){var c=r.controlsUtils,i=c.scaleSkewCursorStyleHandler,l=c.scaleCursorStyleHandler,a=c.scalingEqually,t=c.scalingYOrSkewingX,n=c.scalingXOrSkewingY,e=c.scaleOrSkewActionName,o=r.Object.prototype.controls;if(o.ml=new r.Control({x:-.5,y:0,cursorStyleHandler:i,actionHandler:n,getActionName:e}),o.mr=new r.Control({x:.5,y:0,cursorStyleHandler:i,actionHandler:n,getActionName:e}),o.mb=new r.Control({x:0,y:.5,cursorStyleHandler:i,actionHandler:t,getActionName:e}),o.mt=new r.Control({x:0,y:-.5,cursorStyleHandler:i,actionHandler:t,getActionName:e}),o.tl=new r.Control({x:-.5,y:-.5,cursorStyleHandler:l,actionHandler:a}),o.tr=new r.Control({x:.5,y:-.5,cursorStyleHandler:l,actionHandler:a}),o.bl=new r.Control({x:-.5,y:.5,cursorStyleHandler:l,actionHandler:a}),o.br=new r.Control({x:.5,y:.5,cursorStyleHandler:l,actionHandler:a}),o.mtr=new r.Control({x:0,y:-.5,actionHandler:c.rotationWithSnapping,cursorStyleHandler:c.rotationStyleHandler,offsetY:-40,withConnection:!0,actionName:"rotate"}),r.Textbox){var h=r.Textbox.prototype.controls={};h.mtr=o.mtr,h.tr=o.tr,h.br=o.br,h.tl=o.tl,h.bl=o.bl,h.mt=o.mt,h.mb=o.mb,h.mr=new r.Control({x:.5,y:0,actionHandler:c.changeWidth,cursorStyleHandler:i,actionName:"resizing"}),h.ml=new r.Control({x:-.5,y:0,actionHandler:c.changeWidth,cursorStyleHandler:i,actionName:"resizing"})}})()})(si)),si}var _t=No(),ue=(f=>(f.ONE="selectOne",f.MULTI="selectMultiple",f.CANCEL="selectCancel",f))(ue||{}),te=(f=>(f.EMPTY="",f.ONE="one",f.MULTI="multiple",f))(te||{});function dr(f){f&&f.forEach(r=>{r.objects?dr(r.objects):r.type==="text"&&(r.type="textbox")})}const ge=class ge{constructor(r,p){this.canvas=r,this.editor=p,this.selectedMode=te.EMPTY,this._initSelectEvent()}_initSelectEvent(){this.canvas.on("selection:created",()=>this._emitSelectEvent()),this.canvas.on("selection:updated",()=>this._emitSelectEvent()),this.canvas.on("selection:cleared",()=>this._emitSelectEvent())}_emitSelectEvent(){if(!this.canvas)throw TypeError("还未初始化");const r=this.canvas.getActiveObjects().filter(p=>!(p instanceof _t.fabric.GuideLine));r&&r.length===1?(this.selectedMode=te.ONE,this.editor.emit(ue.ONE,r)):r&&r.length>1?(this.selectedMode=te.MULTI,this.editor.emit(ue.MULTI,r)):this.editor.emit(ue.CANCEL)}getSelectMode(){return String(this.selectedMode)}insert(r){ur({accept:".json"}).then(p=>{if(p&&p.length>0){const _=p[0],y=new FileReader;y.readAsText(_,"UTF-8"),y.onload=()=>{this.loadJSON(y.result,r)}}})}renderITextPath(r){r.forEach(p=>{const _=this.canvas.getObjects().find(y=>y.id===p.id);_&&_t.fabric.Path.fromObject(p.path,y=>{_.set("path",y)})})}async loadJSON(r,p){const _=typeof r=="string"?JSON.parse(r):r,y=[];_.objects.forEach(T=>{!T.id&&(T.id=On()),T.type==="i-text"&&T.path&&(y.push({id:T.id,path:T.path}),T.path=null)});const C=await this._transform(_);r=JSON.stringify(C),this.editor.hooksEntity.hookImportBefore.callAsync(r,()=>{this.canvas.loadFromJSON(r,()=>{this.renderITextPath(y),this.canvas.renderAll(),this.editor.hooksEntity.hookImportAfter.callAsync(r,()=>{this.editor?.updateDrawStatus&&typeof this.editor.updateDrawStatus=="function"&&this.editor.updateDrawStatus(!!_.overlayImage),this.canvas.renderAll(),p&&p(),this.editor.emit("loadJson")})},(T,c)=>{this.editor.hooksEntity.hookTransformObjectEnd.callAsync({originObject:T,fabricObject:c},()=>{this.canvas.renderAll()})})})}async _transform(r){if(await this.promiseCallAsync(r),r.objects){const p=r.objects.map(_=>this._transform(_));await Promise.all(p)}return r}promiseCallAsync(r){return new Promise(p=>{this.editor.hooksEntity.hookTransform.callAsync(r,()=>{p(r)})})}getJson(){const r=this.getExtensionKey();return this.canvas.toJSON(r)}getExtensionKey(){return["id","gradientAngle","selectable","hasControls","linkData","editable","extensionType","extension","verticalAlign","roundValue","getBase64","_originSize"]}dragAddItem(r,p){if(p){const{left:y,top:C}=this.canvas.getSelectionElement().getBoundingClientRect();if(p.x<y||p.y<C||r.width===void 0)return;const T={x:p.x-y,y:p.y-C},c=this.canvas.restorePointerVpt(T);r.left=c.x-r.width/2,r.top=c.y}const{width:_}=this._getSaveOption();_&&r.scaleToWidth(_/2),this.canvas.add(r),this.canvas.setActiveObject(r),!p&&this.editor.position("center"),this.canvas.requestRenderAll()}clipboard(){const r=this.getJson();return ki(JSON.stringify(r,null," "))}async clipboardBase64(){const r=await this.preview();return ki(r)}async saveJson(){const r=this.getJson();await dr(r.objects);const p=`data:text/json;charset=utf-8,${encodeURIComponent(JSON.stringify(r,null," "))}`;Re(p,"json")}saveSvg(){this.editor.hooksEntity.hookSaveBefore.callAsync("",()=>{const{fontOption:r,svgOption:p}=this._getSaveSvgOption();_t.fabric.fontPaths={...r};const _=this.canvas.toSVG(p),y=`data:image/svg+xml;charset=utf-8,${encodeURIComponent(_)}`;this.editor.hooksEntity.hookSaveAfter.callAsync(y,()=>{Re(y,"svg")})})}saveImg(){this.editor.hooksEntity.hookSaveBefore.callAsync("",()=>{const r=this._getSaveOption();this.canvas.setViewportTransform([1,0,0,1,0,0]);const p=this.canvas.toDataURL(r);this.editor.hooksEntity.hookSaveAfter.callAsync(p,()=>{Re(p,"png")})})}getBase64(){return new Promise(r=>{this.editor.hooksEntity.hookSaveBefore.callAsync("",()=>{const p=this._getSaveOption();this.canvas.setViewportTransform([1,0,0,1,0,0]);const _=this.canvas.toDataURL(p);this.editor.hooksEntity.hookSaveAfter.callAsync(_,()=>r(_))})})}preview(){return new Promise(r=>{this.editor.hooksEntity.hookSaveBefore.callAsync("",()=>{const p=this._getSaveOption();this.canvas.setViewportTransform([1,0,0,1,0,0]),this.canvas.renderAll();const _=this.canvas.toDataURL(p);this.editor.hooksEntity.hookSaveAfter.callAsync(_,()=>{r(_)})})})}staticPreview(){return new Promise(r=>{})}_getSaveSvgOption(){const r=this.canvas.getObjects().find(l=>l.id==="workspace");let p=this.canvas.getObjects().filter(l=>l.type=="textbox").map(l=>l.fontFamily);p=Array.from(new Set(p));const _=this.editor.getPlugin("FontPlugin").cacheList,y={};for(const l of p){const a=_.find(t=>t.name===l);y[l]=a.file}console.log("_getSaveSvgOption",y);const{left:C,top:T,width:c,height:i}=r;return{fontOption:y,svgOption:{width:c,height:i,viewBox:{x:C,y:T,width:c,height:i}}}}_getSaveOption(){const r=this.canvas.getObjects().find(c=>c.id==="workspace"),{left:p,top:_,width:y,height:C}=r;return{name:"New Image",format:"jpeg",quality:1,multiplier:5,width:y,height:C,left:p,top:_}}clear(){this.canvas.getObjects().forEach(r=>{r.id!=="workspace"&&this.canvas.remove(r)}),this.editor?.setWorkspaseBg("#fff"),this.canvas.discardActiveObject(),this.canvas.renderAll()}destroy(){console.log("pluginDestroy")}};ge.pluginName="ServersPlugin",ge.apis=["insert","loadJSON","getJson","dragAddItem","clipboard","clipboardBase64","saveJson","saveSvg","saveImg","getBase64","clear","preview","staticPreview","getSelectMode","getExtensionKey"],ge.events=[te.ONE,te.MULTI,ue.CANCEL];let Ai=ge;var St={},ai={},rn;function gr(){return rn||(rn=1,ai.deprecate=(f,r)=>{let p=!0;return function(){return p&&(console.warn(`DeprecationWarning: ${r}`),p=!1),f.apply(this,arguments)}}),ai}var li,sn;function Mt(){if(sn)return li;sn=1;const r=gr().deprecate(()=>{},"Hook.context is deprecated and will be removed");function p(...T){return this.call=this._createCall("sync"),this.call(...T)}function _(...T){return this.callAsync=this._createCall("async"),this.callAsync(...T)}function y(...T){return this.promise=this._createCall("promise"),this.promise(...T)}class C{constructor(c=[],i=void 0){this._args=c,this.name=i,this.taps=[],this.interceptors=[],this._call=p,this.call=p,this._callAsync=_,this.callAsync=_,this._promise=y,this.promise=y,this._x=void 0,this.compile=this.compile,this.tap=this.tap,this.tapAsync=this.tapAsync,this.tapPromise=this.tapPromise}compile(c){throw new Error("Abstract: should be overridden")}_createCall(c){return this.compile({taps:this.taps,interceptors:this.interceptors,args:this._args,type:c})}_tap(c,i,l){if(typeof i=="string")i={name:i.trim()};else if(typeof i!="object"||i===null)throw new Error("Invalid tap options");if(typeof i.name!="string"||i.name==="")throw new Error("Missing name for tap");typeof i.context<"u"&&r(),i=Object.assign({type:c,fn:l},i),i=this._runRegisterInterceptors(i),this._insert(i)}tap(c,i){this._tap("sync",c,i)}tapAsync(c,i){this._tap("async",c,i)}tapPromise(c,i){this._tap("promise",c,i)}_runRegisterInterceptors(c){for(const i of this.interceptors)if(i.register){const l=i.register(c);l!==void 0&&(c=l)}return c}withOptions(c){const i=l=>Object.assign({},c,typeof l=="string"?{name:l}:l);return{name:this.name,tap:(l,a)=>this.tap(i(l),a),tapAsync:(l,a)=>this.tapAsync(i(l),a),tapPromise:(l,a)=>this.tapPromise(i(l),a),intercept:l=>this.intercept(l),isUsed:()=>this.isUsed(),withOptions:l=>this.withOptions(i(l))}}isUsed(){return this.taps.length>0||this.interceptors.length>0}intercept(c){if(this._resetCompilation(),this.interceptors.push(Object.assign({},c)),c.register)for(let i=0;i<this.taps.length;i++)this.taps[i]=c.register(this.taps[i])}_resetCompilation(){this.call=this._call,this.callAsync=this._callAsync,this.promise=this._promise}_insert(c){this._resetCompilation();let i;typeof c.before=="string"?i=new Set([c.before]):Array.isArray(c.before)&&(i=new Set(c.before));let l=0;typeof c.stage=="number"&&(l=c.stage);let a=this.taps.length;for(;a>0;){a--;const t=this.taps[a];this.taps[a+1]=t;const n=t.stage||0;if(i){if(i.has(t.name)){i.delete(t.name);continue}if(i.size>0)continue}if(!(n>l)){a++;break}}this.taps[a]=c}}return Object.setPrototypeOf(C.prototype,null),li=C,li}var ci,on;function Lt(){if(on)return ci;on=1;class f{constructor(p){this.config=p,this.options=void 0,this._args=void 0}create(p){this.init(p);let _;switch(this.options.type){case"sync":_=new Function(this.args(),`"use strict";
442
442
  ${this.header()}${this.contentWithInterceptors({onError:y=>`throw ${y};
443
443
  `,onResult:y=>`return ${y};
444
444
  `,resultReturns:!0,onDone:()=>"",rethrowIfPossible:!0})}`);break;case"async":_=new Function(this.args({after:"_callback"}),`"use strict";
@@ -566,4 +566,4 @@ ${s()}}
566
566
  `,resultReturns:t,onDone:n,rethrowIfPossible:e})}}const _=new p,y=()=>{throw new Error("tapAsync is not supported on a SyncBailHook")},C=()=>{throw new Error("tapPromise is not supported on a SyncBailHook")};function T(i){return _.setup(this,i),_.create(i)}function c(i=[],l=void 0){const a=new f(i,l);return a.constructor=c,a.tapAsync=y,a.tapPromise=C,a.compile=T,a}return c.prototype=null,_i=c,_i}var yi,mn;function $o(){if(mn)return yi;mn=1;const f=Mt(),r=Lt();class p extends r{content({onError:l,onDone:a,rethrowIfPossible:t}){return this.callTapsSeries({onError:(n,e)=>l(e),onDone:a,rethrowIfPossible:t})}}const _=new p,y=()=>{throw new Error("tapAsync is not supported on a SyncHook")},C=()=>{throw new Error("tapPromise is not supported on a SyncHook")};function T(i){return _.setup(this,i),_.create(i)}function c(i=[],l=void 0){const a=new f(i,l);return a.constructor=c,a.tapAsync=y,a.tapPromise=C,a.compile=T,a}return c.prototype=null,yi=c,yi}var Ci,vn;function Jo(){if(vn)return Ci;vn=1;const f=Mt(),r=Lt();class p extends r{content({onError:l,onDone:a,rethrowIfPossible:t}){return this.callTapsLooping({onError:(n,e)=>l(e),onDone:a,rethrowIfPossible:t})}}const _=new p,y=()=>{throw new Error("tapAsync is not supported on a SyncLoopHook")},C=()=>{throw new Error("tapPromise is not supported on a SyncLoopHook")};function T(i){return _.setup(this,i),_.create(i)}function c(i=[],l=void 0){const a=new f(i,l);return a.constructor=c,a.tapAsync=y,a.tapPromise=C,a.compile=T,a}return c.prototype=null,Ci=c,Ci}var bi,_n;function Qo(){if(_n)return bi;_n=1;const f=Mt(),r=Lt();class p extends r{content({onError:l,onResult:a,resultReturns:t,rethrowIfPossible:n}){return this.callTapsSeries({onError:(e,o)=>l(o),onResult:(e,o,h)=>{let s="";return s+=`if(${o} !== undefined) {
567
567
  `,s+=`${this._args[0]} = ${o};
568
568
  `,s+=`}
569
- `,s+=h(),s},onDone:()=>a(this._args[0]),doneReturns:t,rethrowIfPossible:n})}}const _=new p,y=()=>{throw new Error("tapAsync is not supported on a SyncWaterfallHook")},C=()=>{throw new Error("tapPromise is not supported on a SyncWaterfallHook")};function T(i){return _.setup(this,i),_.create(i)}function c(i=[],l=void 0){if(i.length<1)throw new Error("Waterfall hooks must have at least one argument");const a=new f(i,l);return a.constructor=c,a.tapAsync=y,a.tapPromise=C,a.compile=T,a}return c.prototype=null,bi=c,bi}var yn;function Zo(){return yn||(yn=1,St.AsyncParallelBailHook=Wo(),St.AsyncParallelHook=Xo(),St.AsyncSeriesBailHook=Yo(),St.AsyncSeriesHook=Vo(),St.AsyncSeriesLoopHook=Uo(),St.AsyncSeriesWaterfallHook=zo(),St.HookMap=Go(),St.MultiHook=Ko(),St.SyncBailHook=qo(),St.SyncHook=$o(),St.SyncLoopHook=Jo(),St.SyncWaterfallHook=Qo(),St.__esModule=!0),St}var ta=Zo();class ea extends Sr{constructor(){super(...arguments),this.canvas=null,this.contextMenu=null,this.pluginMap={},this.customEvents=[],this.customApis=[],this.hooks=["hookImportBefore","hookImportAfter","hookSaveBefore","hookSaveAfter","hookTransform"],this.hooksEntity={}}init(r){this.canvas=r,this._initContextMenu(),this._bindContextMenu(),this._initActionHooks(),this._initServersPlugin(),this.Utils=fr}get fabricCanvas(){return this.canvas}use(r,p){if(this._checkPlugin(r)&&this.canvas){this._saveCustomAttr(r);const _=new r(this.canvas,this,p||{});_.pluginName=r.pluginName,this.pluginMap[r.pluginName]=_,this._bindingHooks(_),this._bindingHotkeys(_),this._bindingApis(_)}return this}destory(){this.canvas=null,this.contextMenu=null,this.pluginMap={},this.customEvents=[],this.customApis=[],this.hooksEntity={}}getPlugin(r){if(this.pluginMap[r])return this.pluginMap[r]}_checkPlugin(r){const{pluginName:p,events:_=[],apis:y=[]}=r;if(this.pluginMap[p])throw new Error(p+"插件重复初始化");return _.forEach(C=>{if(this.customEvents.find(T=>T===C))throw new Error(p+"插件中"+C+"重复")}),y.forEach(C=>{if(this.customApis.find(T=>T===C))throw new Error(p+"插件中"+C+"重复")}),!0}_bindingHooks(r){this.hooks.forEach(p=>{const _=r[p];_&&this.hooksEntity[p].tapPromise(r.pluginName+p,function(){const y=_.apply(r,[...arguments]);return y instanceof Promise?y:Promise.resolve(y)})})}_bindingHotkeys(r){r?.hotkeys?.forEach(p=>{It(p,{keyup:!0},_=>{r.hotkeyEvent&&r.hotkeyEvent(p,_)})})}_saveCustomAttr(r){const{events:p=[],apis:_=[]}=r;this.customApis=this.customApis.concat(_),this.customEvents=this.customEvents.concat(p)}_bindingApis(r){const{apis:p=[]}=r.constructor||{};p.forEach(_=>{this[_]=function(){return r[_].apply(r,[...arguments])}})}_bindContextMenu(){this.canvas&&this.canvas.on("mouse:down",r=>{if(r.button===3){let p=[];Object.keys(this.pluginMap).forEach(_=>{const y=this.pluginMap[_],C=y.contextMenu&&y.contextMenu();C&&(p=p.concat(C))}),this._renderMenu(r,p)}})}_renderMenu(r,p){p.length!==0&&this.contextMenu&&(this.contextMenu.hideAll(),this.contextMenu.setData(p),this.contextMenu.show(r.e.clientX,r.e.clientY))}_initActionHooks(){this.hooks.forEach(r=>{this.hooksEntity[r]=new ta.AsyncSeriesHook(["data"])})}_initContextMenu(){this.contextMenu=new Ie(this.canvas.wrapperEl,[]),this.contextMenu.install()}_initServersPlugin(){this.use(Ai)}off(r,p){return p?super.off(r,p):this}}_t.fabric.Rect=_t.fabric.util.createClass(_t.fabric.Rect,{type:"rect",initialize:function(f){f||(f={}),this.callSuper("initialize",f)},_render(f){const r=this.roundValue||0;this.rx=1/this.scaleX*r,this.ry=1/this.scaleY*r,this.callSuper("_render",f)}});_t.fabric.Rect.fromObject=function(f,r){return _t.fabric.Object._fromObject("Rect",f,r)};const ia=_t.fabric.Rect;_t.fabric.Textbox=_t.fabric.util.createClass(_t.fabric.Textbox,{type:"textbox",_renderChars:function(f,r,p,_,y,C){var T=this.getHeightOfLine(C),c=this.textAlign.indexOf("justify")!==-1,i,l,a="",t,n=0,e,o=this.path,h=!c&&this.charSpacing===0&&this.isEmptyStyles(C)&&!o,s=this.direction==="ltr",u=this.direction==="ltr"?1:-1,d,m=r.canvas.getAttribute("dir");if(r.save(),m!==this.direction&&(r.canvas.setAttribute("dir",s?"ltr":"rtl"),r.direction=s?"ltr":"rtl",r.textAlign=s?"left":"right"),y-=T*this._fontSizeFraction/this.lineHeight,h){this._renderChar(f,r,C,0,p.join(""),_,y,T),r.restore();return}for(var g=0,v=p.length-1;g<=v;g++)e=g===v||this.charSpacing||o,a+=p[g],t=this.__charBounds[C][g],n===0?(_+=u*(t.kernedWidth-t.width),n+=t.width):n+=t.kernedWidth,c&&!e&&this._reSpaceAndTab.test(p[g])&&(e=!0),e||(i=i||this.getCompleteStyleDeclaration(C,g),l=this.getCompleteStyleDeclaration(C,g+1),e=_t.fabric.util.hasStyleChanged(i,l,!1)),o?(r.save(),r.translate(t.renderLeft,t.renderTop),r.rotate(t.angle),this._renderChar(f,r,C,g,a,-n/2,0,T),r.restore()):(d=_,this._renderChar(f,r,C,g,a,d,y,T)),a="",i=l,_+=u*n,n=0;r.restore()},enlargeSpaces:function(){for(var f,r,p,_,y,C,T,c=0,i=this._textLines.length;c<i;c++)if(!(this.textAlign!=="justify"&&(c===i-1||this.isEndOfWrapping(c)))&&(_=0,y=this._textLines[c],r=this.getLineWidth(c),r<this.width&&(T=this.textLines[c].split(""))&&T.length>1)){p=T.length,f=(this.width-r)/(p-1);for(var l=0,a=y.length;l<=a;l++)C=this.__charBounds[c][l],C.left+=_,l<a-1&&(C.width+=f,C.kernedWidth+=f,_+=f)}}});_t.fabric.Textbox.fromObject=function(f,r){const{text:p}=f;return r(new _t.fabric.Textbox(p,f))};const na=_t.fabric.Rect;exports.CustomRect=ia;exports.CustomTextbox=na;exports.Utils=fr;exports.default=ea;exports.fabric=_t.fabric;
569
+ `,s+=h(),s},onDone:()=>a(this._args[0]),doneReturns:t,rethrowIfPossible:n})}}const _=new p,y=()=>{throw new Error("tapAsync is not supported on a SyncWaterfallHook")},C=()=>{throw new Error("tapPromise is not supported on a SyncWaterfallHook")};function T(i){return _.setup(this,i),_.create(i)}function c(i=[],l=void 0){if(i.length<1)throw new Error("Waterfall hooks must have at least one argument");const a=new f(i,l);return a.constructor=c,a.tapAsync=y,a.tapPromise=C,a.compile=T,a}return c.prototype=null,bi=c,bi}var yn;function Zo(){return yn||(yn=1,St.AsyncParallelBailHook=Wo(),St.AsyncParallelHook=Xo(),St.AsyncSeriesBailHook=Yo(),St.AsyncSeriesHook=Vo(),St.AsyncSeriesLoopHook=Uo(),St.AsyncSeriesWaterfallHook=zo(),St.HookMap=Go(),St.MultiHook=Ko(),St.SyncBailHook=qo(),St.SyncHook=$o(),St.SyncLoopHook=Jo(),St.SyncWaterfallHook=Qo(),St.__esModule=!0),St}var ta=Zo();class ea extends Sr{constructor(){super(...arguments),this.canvas=null,this.contextMenu=null,this.pluginMap={},this.customEvents=[],this.customApis=[],this.hooks=["hookImportBefore","hookImportAfter","hookSaveBefore","hookSaveAfter","hookTransform","hookTransformObjectEnd"],this.hooksEntity={}}init(r){this.canvas=r,this._initContextMenu(),this._bindContextMenu(),this._initActionHooks(),this._initServersPlugin(),this.Utils=fr}get fabricCanvas(){return this.canvas}use(r,p){if(this._checkPlugin(r)&&this.canvas){this._saveCustomAttr(r);const _=new r(this.canvas,this,p||{});_.pluginName=r.pluginName,this.pluginMap[r.pluginName]=_,this._bindingHooks(_),this._bindingHotkeys(_),this._bindingApis(_)}return this}destory(){this.canvas=null,this.contextMenu=null,this.pluginMap={},this.customEvents=[],this.customApis=[],this.hooksEntity={}}getPlugin(r){if(this.pluginMap[r])return this.pluginMap[r]}_checkPlugin(r){const{pluginName:p,events:_=[],apis:y=[]}=r;if(this.pluginMap[p])throw new Error(p+"插件重复初始化");return _.forEach(C=>{if(this.customEvents.find(T=>T===C))throw new Error(p+"插件中"+C+"重复")}),y.forEach(C=>{if(this.customApis.find(T=>T===C))throw new Error(p+"插件中"+C+"重复")}),!0}_bindingHooks(r){this.hooks.forEach(p=>{const _=r[p];_&&this.hooksEntity[p].tapPromise(r.pluginName+p,function(){const y=_.apply(r,[...arguments]);return y instanceof Promise?y:Promise.resolve(y)})})}_bindingHotkeys(r){r?.hotkeys?.forEach(p=>{It(p,{keyup:!0},_=>{r.hotkeyEvent&&r.hotkeyEvent(p,_)})})}_saveCustomAttr(r){const{events:p=[],apis:_=[]}=r;this.customApis=this.customApis.concat(_),this.customEvents=this.customEvents.concat(p)}_bindingApis(r){const{apis:p=[]}=r.constructor||{};p.forEach(_=>{this[_]=function(){return r[_].apply(r,[...arguments])}})}_bindContextMenu(){this.canvas&&this.canvas.on("mouse:down",r=>{if(r.button===3){let p=[];Object.keys(this.pluginMap).forEach(_=>{const y=this.pluginMap[_],C=y.contextMenu&&y.contextMenu();C&&(p=p.concat(C))}),this._renderMenu(r,p)}})}_renderMenu(r,p){p.length!==0&&this.contextMenu&&(this.contextMenu.hideAll(),this.contextMenu.setData(p),this.contextMenu.show(r.e.clientX,r.e.clientY))}_initActionHooks(){this.hooks.forEach(r=>{this.hooksEntity[r]=new ta.AsyncSeriesHook(["data"])})}_initContextMenu(){this.contextMenu=new Ie(this.canvas.wrapperEl,[]),this.contextMenu.install()}_initServersPlugin(){this.use(Ai)}off(r,p){return p?super.off(r,p):this}}_t.fabric.Rect=_t.fabric.util.createClass(_t.fabric.Rect,{type:"rect",initialize:function(f){f||(f={}),this.callSuper("initialize",f)},_render(f){const r=this.roundValue||0;this.rx=1/this.scaleX*r,this.ry=1/this.scaleY*r,this.callSuper("_render",f)}});_t.fabric.Rect.fromObject=function(f,r){return _t.fabric.Object._fromObject("Rect",f,r)};const ia=_t.fabric.Rect;_t.fabric.Textbox=_t.fabric.util.createClass(_t.fabric.Textbox,{type:"textbox",_renderChars:function(f,r,p,_,y,C){var T=this.getHeightOfLine(C),c=this.textAlign.indexOf("justify")!==-1,i,l,a="",t,n=0,e,o=this.path,h=!c&&this.charSpacing===0&&this.isEmptyStyles(C)&&!o,s=this.direction==="ltr",u=this.direction==="ltr"?1:-1,d,m=r.canvas.getAttribute("dir");if(r.save(),m!==this.direction&&(r.canvas.setAttribute("dir",s?"ltr":"rtl"),r.direction=s?"ltr":"rtl",r.textAlign=s?"left":"right"),y-=T*this._fontSizeFraction/this.lineHeight,h){this._renderChar(f,r,C,0,p.join(""),_,y,T),r.restore();return}for(var g=0,v=p.length-1;g<=v;g++)e=g===v||this.charSpacing||o,a+=p[g],t=this.__charBounds[C][g],n===0?(_+=u*(t.kernedWidth-t.width),n+=t.width):n+=t.kernedWidth,c&&!e&&this._reSpaceAndTab.test(p[g])&&(e=!0),e||(i=i||this.getCompleteStyleDeclaration(C,g),l=this.getCompleteStyleDeclaration(C,g+1),e=_t.fabric.util.hasStyleChanged(i,l,!1)),o?(r.save(),r.translate(t.renderLeft,t.renderTop),r.rotate(t.angle),this._renderChar(f,r,C,g,a,-n/2,0,T),r.restore()):(d=_,this._renderChar(f,r,C,g,a,d,y,T)),a="",i=l,_+=u*n,n=0;r.restore()},enlargeSpaces:function(){for(var f,r,p,_,y,C,T,c=0,i=this._textLines.length;c<i;c++)if(!(this.textAlign!=="justify"&&(c===i-1||this.isEndOfWrapping(c)))&&(_=0,y=this._textLines[c],r=this.getLineWidth(c),r<this.width&&(T=this.textLines[c].split(""))&&T.length>1)){p=T.length,f=(this.width-r)/(p-1);for(var l=0,a=y.length;l<=a;l++)C=this.__charBounds[c][l],C.left+=_,l<a-1&&(C.width+=f,C.kernedWidth+=f,_+=f)}}});_t.fabric.Textbox.fromObject=function(f,r){const{text:p}=f;return r(new _t.fabric.Textbox(p,f))};const na=_t.fabric.Rect;exports.CustomRect=ia;exports.CustomTextbox=na;exports.Utils=fr;exports.default=ea;exports.fabric=_t.fabric;
package/dist/index.mjs CHANGED
@@ -20875,16 +20875,27 @@ const ge = class ge {
20875
20875
  });
20876
20876
  const C = await this._transform(_);
20877
20877
  r = JSON.stringify(C), this.editor.hooksEntity.hookImportBefore.callAsync(r, () => {
20878
- this.canvas.loadFromJSON(r, () => {
20879
- this.renderITextPath(y), this.canvas.renderAll(), this.editor.hooksEntity.hookImportAfter.callAsync(
20880
- r,
20881
- () => {
20882
- this.editor?.updateDrawStatus && typeof this.editor.updateDrawStatus == "function" && this.editor.updateDrawStatus(
20883
- !!_.overlayImage
20884
- ), this.canvas.renderAll(), p && p(), this.editor.emit("loadJson");
20885
- }
20886
- );
20887
- });
20878
+ this.canvas.loadFromJSON(
20879
+ r,
20880
+ () => {
20881
+ this.renderITextPath(y), this.canvas.renderAll(), this.editor.hooksEntity.hookImportAfter.callAsync(
20882
+ r,
20883
+ () => {
20884
+ this.editor?.updateDrawStatus && typeof this.editor.updateDrawStatus == "function" && this.editor.updateDrawStatus(
20885
+ !!_.overlayImage
20886
+ ), this.canvas.renderAll(), p && p(), this.editor.emit("loadJson");
20887
+ }
20888
+ );
20889
+ },
20890
+ (T, h) => {
20891
+ this.editor.hooksEntity.hookTransformObjectEnd.callAsync(
20892
+ { originObject: T, fabricObject: h },
20893
+ () => {
20894
+ this.canvas.renderAll();
20895
+ }
20896
+ );
20897
+ }
20898
+ );
20888
20899
  });
20889
20900
  }
20890
20901
  async _transform(r) {
@@ -20917,7 +20928,8 @@ const ge = class ge {
20917
20928
  "extension",
20918
20929
  "verticalAlign",
20919
20930
  "roundValue",
20920
- "getBase64"
20931
+ "getBase64",
20932
+ "_originSize"
20921
20933
  ];
20922
20934
  }
20923
20935
  /**
@@ -21937,7 +21949,8 @@ class ea extends br {
21937
21949
  "hookImportAfter",
21938
21950
  "hookSaveBefore",
21939
21951
  "hookSaveAfter",
21940
- "hookTransform"
21952
+ "hookTransform",
21953
+ "hookTransformObjectEnd"
21941
21954
  ], this.hooksEntity = {};
21942
21955
  }
21943
21956
  init(r) {
@@ -1,7 +1,7 @@
1
1
  import { default as Editor } from '@hprint/core';
2
2
  export interface IEditor extends Editor {
3
3
  }
4
- export type IEditorHooksType = 'hookImportBefore' | 'hookImportAfter' | 'hookSaveBefore' | 'hookSaveAfter' | 'hookTransform';
4
+ export type IEditorHooksType = 'hookImportBefore' | 'hookImportAfter' | 'hookSaveBefore' | 'hookSaveAfter' | 'hookTransform' | 'hookTransformObjectEnd';
5
5
  export declare class IPluginTempl {
6
6
  constructor(canvas: fabric.Canvas, editor: IEditor, options?: IPluginOption);
7
7
  static pluginName: string;
@@ -13,6 +13,7 @@ export declare class IPluginTempl {
13
13
  hookSaveBefore?: (...args: unknown[]) => Promise<unknown>;
14
14
  hookSaveAfter?: (...args: unknown[]) => Promise<unknown>;
15
15
  hookTransform?: (...args: unknown[]) => Promise<unknown>;
16
+ hookTransformObjectEnd?: (...args: unknown[]) => Promise<unknown>;
16
17
  [propName: string]: any;
17
18
  canvas?: fabric.Canvas;
18
19
  editor?: IEditor;
@@ -1 +1 @@
1
- {"version":3,"file":"Editor.d.ts","sourceRoot":"","sources":["../../src/interface/Editor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,cAAc,CAAC;AAIvC,MAAM,WAAW,OAAQ,SAAQ,MAAM;CAAG;AAG1C,MAAM,MAAM,gBAAgB,GACtB,kBAAkB,GAClB,iBAAiB,GACjB,gBAAgB,GAChB,eAAe,GACf,eAAe,CAAC;AAGtB,MAAM,CAAC,OAAO,OAAO,YAAY;gBAEzB,MAAM,EAAE,MAAM,CAAC,MAAM,EACrB,MAAM,EAAE,OAAO,EACf,OAAO,CAAC,EAAE,aAAa;IAE3B,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC;IAC1B,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC;IACxB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC;IACtB,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,aAAa,KAAK,IAAI,CAAC;IACvD,gBAAgB,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAC5D,eAAe,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAC3D,cAAc,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAC1D,aAAa,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACzD,aAAa,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACzD,CAAC,QAAQ,EAAE,MAAM,GAAG,GAAG,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC;IACvB,MAAM,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,CAAC,OAAO,WAAW,aAAa;IAClC,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC;CAC3C;AAED,OAAO,OAAO,aAAc,SAAQ,YAAY;;CAE/C;AAED,MAAM,CAAC,OAAO,WAAW,YAAY;IACjC,KACI,MAAM,EAAE,MAAM,CAAC,MAAM,EACrB,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,aAAa,GACxB,aAAa,CAAC;CACpB;AAED,MAAM,CAAC,OAAO,WAAW,WAAW;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,KAAK,CAAC,EAAE,WAAW,EAAE,CAAC;CACzB"}
1
+ {"version":3,"file":"Editor.d.ts","sourceRoot":"","sources":["../../src/interface/Editor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,cAAc,CAAC;AAIvC,MAAM,WAAW,OAAQ,SAAQ,MAAM;CAAI;AAG3C,MAAM,MAAM,gBAAgB,GACtB,kBAAkB,GAClB,iBAAiB,GACjB,gBAAgB,GAChB,eAAe,GACf,eAAe,GACf,wBAAwB,CAAC;AAG/B,MAAM,CAAC,OAAO,OAAO,YAAY;gBAEzB,MAAM,EAAE,MAAM,CAAC,MAAM,EACrB,MAAM,EAAE,OAAO,EACf,OAAO,CAAC,EAAE,aAAa;IAE3B,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC;IAC1B,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC;IACxB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC;IACtB,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,aAAa,KAAK,IAAI,CAAC;IACvD,gBAAgB,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAC5D,eAAe,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAC3D,cAAc,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAC1D,aAAa,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACzD,aAAa,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACzD,sBAAsB,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAClE,CAAC,QAAQ,EAAE,MAAM,GAAG,GAAG,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC;IACvB,MAAM,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,CAAC,OAAO,WAAW,aAAa;IAClC,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC;CAC3C;AAED,OAAO,OAAO,aAAc,SAAQ,YAAY;;CAE/C;AAED,MAAM,CAAC,OAAO,WAAW,YAAY;IACjC,KACI,MAAM,EAAE,MAAM,CAAC,MAAM,EACrB,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,aAAa,GACxB,aAAa,CAAC;CACpB;AAED,MAAM,CAAC,OAAO,WAAW,WAAW;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,KAAK,CAAC,EAAE,WAAW,EAAE,CAAC;CACzB"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hprint/core",
3
- "version": "0.0.1-alpha.1",
3
+ "version": "0.0.1-alpha.2",
4
4
  "description": "",
5
5
  "main": "./dist/index.js",
6
6
  "module": "./dist/index.mjs",
@@ -33,7 +33,7 @@
33
33
  "hotkeys-js": "~3.8.9",
34
34
  "tapable": "~2.3.0",
35
35
  "uuid": "~8.3.2",
36
- "@hprint/shared": "0.0.1-alpha.1"
36
+ "@hprint/shared": "0.0.1-alpha.2"
37
37
  },
38
38
  "scripts": {
39
39
  "build": "vite build",
package/src/Editor.ts CHANGED
@@ -33,6 +33,7 @@ class Editor extends EventEmitter {
33
33
  'hookSaveBefore',
34
34
  'hookSaveAfter',
35
35
  'hookTransform',
36
+ 'hookTransformObjectEnd',
36
37
  ];
37
38
  public hooksEntity: {
38
39
  [propName: string]: AsyncSeriesHook<any, any>;
@@ -25,7 +25,7 @@ type IPlugin = Pick<
25
25
 
26
26
  declare module '@hprint/core' {
27
27
  // eslint-disable-next-line @typescript-eslint/no-empty-interface
28
- interface IEditor extends IPlugin {}
28
+ interface IEditor extends IPlugin { }
29
29
  }
30
30
 
31
31
  function transformText(objects: any) {
@@ -145,27 +145,38 @@ class ServersPlugin implements IPluginTempl {
145
145
  jsonFile = JSON.stringify(tempTransform);
146
146
  // 加载前钩子
147
147
  this.editor.hooksEntity.hookImportBefore.callAsync(jsonFile, () => {
148
- this.canvas.loadFromJSON(jsonFile, () => {
149
- // 把i-text对应的path加上
150
- this.renderITextPath(textPaths);
151
- this.canvas.renderAll();
152
- // 加载后钩子
153
- this.editor.hooksEntity.hookImportAfter.callAsync(
154
- jsonFile,
155
- () => {
156
- // 修复导入带水印的json无法清除问题 #359
157
- this.editor?.updateDrawStatus &&
158
- typeof this.editor.updateDrawStatus ===
148
+ this.canvas.loadFromJSON(
149
+ jsonFile,
150
+ () => {
151
+ // 把i-text对应的path加上
152
+ this.renderITextPath(textPaths);
153
+ this.canvas.renderAll();
154
+ // 加载后钩子
155
+ this.editor.hooksEntity.hookImportAfter.callAsync(
156
+ jsonFile,
157
+ () => {
158
+ // 修复导入带水印的json无法清除问题 #359
159
+ this.editor?.updateDrawStatus &&
160
+ typeof this.editor.updateDrawStatus ===
159
161
  'function' &&
160
- this.editor.updateDrawStatus(
161
- !!temp['overlayImage']
162
- );
163
- this.canvas.renderAll();
164
- callback && callback();
165
- this.editor.emit('loadJson');
166
- }
167
- );
168
- });
162
+ this.editor.updateDrawStatus(
163
+ !!temp['overlayImage']
164
+ );
165
+ this.canvas.renderAll();
166
+ callback && callback();
167
+ this.editor.emit('loadJson');
168
+ }
169
+ );
170
+ },
171
+ (originObject: any, fabricObject: fabric.Object) => {
172
+ this.editor.hooksEntity.hookTransformObjectEnd.callAsync(
173
+ { originObject, fabricObject },
174
+ () => {
175
+ this.canvas.renderAll();
176
+ }
177
+ );
178
+ }
179
+ );
169
180
  });
170
181
  }
171
182
 
@@ -206,6 +217,7 @@ class ServersPlugin implements IPluginTempl {
206
217
  'verticalAlign',
207
218
  'roundValue',
208
219
  'getBase64',
220
+ '_originSize',
209
221
  ];
210
222
  }
211
223
 
@@ -312,7 +324,7 @@ class ServersPlugin implements IPluginTempl {
312
324
  }
313
325
 
314
326
  staticPreview() {
315
- return new Promise<string>((resolve) => {});
327
+ return new Promise<string>((resolve) => { });
316
328
  }
317
329
 
318
330
  _getSaveSvgOption() {
@@ -2,7 +2,7 @@ import type Editor from '@hprint/core';
2
2
 
3
3
  // IEditor类型包含插件实例,Editor不包含插件实例
4
4
  // eslint-disable-next-line @typescript-eslint/no-empty-interface
5
- export interface IEditor extends Editor {}
5
+ export interface IEditor extends Editor { }
6
6
 
7
7
  // 生命周期事件类型
8
8
  export type IEditorHooksType =
@@ -10,7 +10,8 @@ export type IEditorHooksType =
10
10
  | 'hookImportAfter'
11
11
  | 'hookSaveBefore'
12
12
  | 'hookSaveAfter'
13
- | 'hookTransform';
13
+ | 'hookTransform'
14
+ | 'hookTransformObjectEnd';
14
15
 
15
16
  // 插件实例
16
17
  export declare class IPluginTempl {
@@ -28,6 +29,7 @@ export declare class IPluginTempl {
28
29
  hookSaveBefore?: (...args: unknown[]) => Promise<unknown>;
29
30
  hookSaveAfter?: (...args: unknown[]) => Promise<unknown>;
30
31
  hookTransform?: (...args: unknown[]) => Promise<unknown>;
32
+ hookTransformObjectEnd?: (...args: unknown[]) => Promise<unknown>;
31
33
  [propName: string]: any;
32
34
  canvas?: fabric.Canvas;
33
35
  editor?: IEditor;
@@ -42,7 +44,7 @@ declare class IPluginClass2 extends IPluginTempl {
42
44
  }
43
45
  // 插件class
44
46
  export declare interface IPluginClass {
45
- new (
47
+ new(
46
48
  canvas: fabric.Canvas,
47
49
  editor: Editor,
48
50
  options?: IPluginOption