UNPKG

fabric

Version:

Object model for HTML5 canvas, and SVG-to-canvas parser. Backed by jsdom and node-canvas.

2 lines 21.4 kB
(function(e,t){typeof exports==`object`&&typeof module<`u`?t(exports,require(`fabric`),require(`westures`)):typeof define==`function`&&define.amd?define([`exports`,`fabric`,`westures`],t):t((e=typeof globalThis<`u`?globalThis:e||self).fabricExtensions={},e.fabric,e.westures)})(this,function(e,t,n){Object.defineProperty(e,Symbol.toStringTag,{value:`Module`});var r,i,a,o=Object.create,s=Object.defineProperty,c=Object.getOwnPropertyDescriptor,l=Object.getOwnPropertyNames,u=Object.getPrototypeOf,d=Object.prototype.hasOwnProperty;function f(e,t){return Math.abs(e-t)}function p(e,t,n){let r=1/0,i=[];for(let a of t){let t=f(e[n],a[n]);r>t&&(i=[],r=t),r==t&&i.push(a)}return{dis:r,arr:i}}function m(e){let{target:t,isScale:n,isUniform:r,corner:i,point:a,diagonalPoint:o,list:s,isCenter:c}=e,{dis:l,arr:u}=p(a,s,`x`);if(l>this.margin/this.canvas.getZoom())return[];let d=u[u.length-1].x-a.x;d*=i.includes(`l`)?-1:1;let{width:f,height:m,scaleX:h,scaleY:g}=t,_=h*f+(t.strokeUniform?0:t.strokeWidth),v=(d+_)/_;if(v==0)return[];if(n?(t.set(`scaleX`,h*v),r&&t.set(`scaleY`,g*v)):(t.set(`width`,f*v),r&&t.set(`height`,m*v)),c)t.setRelativeXY(o,`center`,`center`);else{let e=this.contraryOriginMap;t.setRelativeXY(o,...e[i])}return t.setCoords(),u.map(e=>({origin:a,target:e}))}function h(e){let{target:t,isScale:n,isUniform:r,corner:i,point:a,diagonalPoint:o,list:s,isCenter:c}=e,{dis:l,arr:u}=p(a,s,`y`);if(l>this.margin/this.canvas.getZoom())return[];let d=u[u.length-1].y-a.y;d*=i.includes(`t`)?-1:1;let{width:f,height:m,scaleX:h,scaleY:g}=t,_=g*m+(t.strokeUniform?0:t.strokeWidth),v=(d+_)/_;if(v==0)return[];if(n?(t.set(`scaleY`,g*v),r&&t.set(`scaleX`,h*v)):(t.set(`height`,m*v),r&&t.set(`width`,f*v)),c)t.setRelativeXY(o,`center`,`center`);else{let e=this.contraryOriginMap;t.setRelativeXY(o,...e[i])}return t.setCoords(),u.map(e=>({origin:a,target:e}))}function g(e,t){let n=this.canvas.getTopContext(),r=this.canvas.viewportTransform,i=this.canvas.getZoom();n.save(),n.transform(...r),n.lineWidth=this.width/i,this.lineDash&&n.setLineDash(this.lineDash),n.strokeStyle=this.color,n.beginPath(),n.moveTo(e.x,e.y),n.lineTo(t.x,t.y),n.stroke(),this.lineDash&&n.setLineDash([]),this.drawX(e,-1),this.drawX(t,1),n.restore()}function _(e,t){let n=this.canvas.getTopContext(),r=this.canvas.getZoom(),i=this.xSize/r;n.save(),n.translate(e.x,e.y),n.beginPath(),n.moveTo(-i,-i),n.lineTo(i,i),n.moveTo(i,-i),n.lineTo(-i,i),n.stroke(),n.restore()}function v(e){let t=this.canvas.getTopContext(),n=this.canvas.viewportTransform,r=this.canvas.getZoom();t.save(),t.transform(...n),t.lineWidth=this.width/r,t.strokeStyle=this.color;for(let t of e)this.drawX(t,0);t.restore()}function y(){let e=[];if(!this.closeVLine)for(let t of this.verticalLines)e.push(JSON.parse(t));if(!this.closeHLine)for(let t of this.horizontalLines)e.push(JSON.parse(t));let t=e.map(e=>e.target);v.call(this,t)}function b(){if(!this.closeVLine)for(let e of this.verticalLines){let{origin:n,target:r}=JSON.parse(e),i=new t.Point(r.x,n.y);this.drawLine(i,r)}}function x(){if(!this.closeHLine)for(let e of this.horizontalLines){let{origin:n,target:r}=JSON.parse(e),i=new t.Point(n.x,r.y);this.drawLine(i,r)}}function S(e,t){let n=e.getCoords();n.push(e.getCenterPoint());let r={target:e,list:n,points:t,margin:this.margin/this.canvas.getZoom()};return{vLines:w({...r,type:`x`}),hLines:w({...r,type:`y`})}}a=(r=n)==null?{}:o(u(r)),n=((e,t,n,r)=>{if(t&&typeof t==`object`||typeof t==`function`)for(var i,a=l(t),o=0,u=a.length;o<u;o++)i=a[o],d.call(e,i)||i===n||s(e,i,{get:(e=>t[e]).bind(null,i),enumerable:!(r=c(t,i))||r.enumerable});return e})(!i&&r&&r.__esModule?a:s(a,`default`,{value:r,enumerable:!0}),r);let C=[[`left`,`top`],[`right`,`top`],[`right`,`bottom`],[`left`,`bottom`],[`center`,`center`]];function w(e){let{target:t,list:n,points:r,margin:i,type:a}=e,o=[],s=[],c=1/0;for(let e of n){let t=p(e,r,a);s.push(t),c>t.dis&&(c=t.dis)}if(c>i)return o;let l=!1;for(let e=0;e<n.length;e++){if(s[e].dis!=c)continue;for(let t of s[e].arr)o.push({origin:n[e],target:t});if(l)continue;l=!0;let r=s[e].arr[0][a]-n[e][a];n.forEach(e=>{e[a]+=r}),t.setXY(n[e],...C[e]),t.setCoords()}return o}function T(e){let n=new Set,r=e.canvas;if(!r)return n;let i=e instanceof t.ActiveSelection?e.getObjects():[e];return r.forEachObject(e=>{e.isOnScreen()&&e.visible&&(e.constructor==t.Group?D(n,e):n.add(e))}),E(n,i),n}function E(e,n){for(let r of n)r.constructor==t.Group?E(e,r.getObjects()):e.delete(r)}function D(e,n){let r=n.getObjects();for(let n of r)n.visible&&(n.constructor==t.Group?D(e,n):e.add(n))}function O(e){return O=typeof Symbol==`function`&&typeof Symbol.iterator==`symbol`?function(e){return typeof e}:function(e){return e&&typeof Symbol==`function`&&e.constructor===Symbol&&e!==Symbol.prototype?`symbol`:typeof e},O(e)}function ee(e){var t=function(e,t){if(O(e)!=`object`||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t||`default`);if(O(r)!=`object`)return r;throw TypeError(`@@toPrimitive must return a primitive value.`)}return(t===`string`?String:Number)(e)}(e,`string`);return O(t)==`symbol`?t:t+``}function k(e,t,n){return(t=ee(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}let A=(e,n=`left`,r=`top`)=>async function(i,...a){let{originX:o=n,originY:s=r}=i;delete i.originX,delete i.originY;let c=await e.call(this,i,...a),l=new t.Point(c.left,c.top);return c.setPositionByOrigin(l,o,s),c},j=e=>async function(n){let{colorStops:r}=n,i=r==null?void 0:r.map(({color:e,opacity:n,offset:r})=>n===void 0||n===1?{color:e,offset:r}:{color:new t.Color(e).setAlpha(n).toRgba(),offset:r});return await e.call(this,{...n,colorStops:i})},{wrapWithFixedAnchor:M,wrapWithFireEvent:N}=t.controlsUtils,P=(e,t,n)=>(r,i,a,o)=>i.target[n]?t(r,i,a,o):e(r,i,a,o),F=(e,t,n,r)=>(i,a,o,s)=>{let c=a.target,l=(c.flipX?t:e)(i,a,o,s),u=(c.flipY?r:n)(i,a,o,s);return l||u},I=N(`CROPPING`,M((e,n,r,i)=>{let{target:a}=n,{width:o}=a,s=a,c=t.controlsUtils.changeObjectWidth(e,n,r,i),l=s._element.width-s.cropX;return c&&(s.width>l&&(s.width=l),s.width<1&&(s.width=1)),o!==s.width})),L=N(`CROPPING`,M((e,n,r,i)=>{let{target:a}=n,{height:o}=a,s=a,c=t.controlsUtils.changeObjectHeight(e,n,r,i),l=s._element.height-s.cropY;return c&&(s.height>l&&(s.height=l),s.height<1&&(s.height=1)),o!==s.height})),R=N(`CROPPING`,M((e,n,r,i)=>{let{target:a}=n,o=a,{width:s,cropX:c}=o,l=t.controlsUtils.changeObjectWidth(e,n,r,i),u=c+s-o.width;return o.width=s,l&&(u<0&&(u=0),o.cropX=u,o.width+=c-u),u!==c})),z=N(`CROPPING`,M((e,n,r,i)=>{let{target:a}=n,o=a,{height:s,cropY:c}=o,l=t.controlsUtils.changeObjectHeight(e,n,r,i),u=c+s-o.height;return o.height=s,l&&(u<0&&(u=0),o.cropY=u,o.height+=c-u),u!==c})),B=({transform:e})=>{let{target:n,original:r}=e,i=n,a=new t.Point(n.left-r.left,n.top-r.top).transform(t.util.invertTransform(t.util.createRotateMatrix({angle:i.getTotalAngle()}))),o=r.cropX-a.x/i.scaleX*(i.flipX?-1:1),s=r.cropY-a.y/i.scaleY*(i.flipY?-1:1),{width:c,height:l,_element:u}=i;o<0&&(o=0),s<0&&(s=0),o+c>u.width&&(o=u.width-c),s+l>u.height&&(s=u.height-l),i.cropX=o,i.cropY=s,i.left=r.left,i.top=r.top};function V(e,n,r){let i=r.calcTransformMatrix(),a=r.getViewportTransform(),o=t.util.multiplyTransformMatrices(a,i),s=0,c=0;return s=this.x<0?-r.width/2-r.cropX:r.getElement().width-r.width/2-r.cropX,c=this.y<0?-r.height/2-r.cropY:r.getElement().height-r.height/2-r.cropY,new t.Point(s,c).transform(o)}let H=(e,t)=>t?1-e:e,U=(e,n)=>(r,i,a,o)=>{let{target:s}=i,{width:c,height:l}=s.getElement(),u=c-s.width-s.cropX,d=l-s.height-s.cropY,f=H(e<0?1+u/s.width:-s.cropX/s.width,s.flipX),p=H(n<0?1+d/s.height:-s.cropY/s.height,s.flipY),m=s.translateToOriginPoint(s.getCenterPoint(),f,p),h=(g=t.controlsUtils.getLocalPoint(i,f,p,a,o),_=l,v=c,Math.min(Math.abs(g.x/v),Math.abs(g.y/_)));var g,_,v;let y=h/s.scaleX,b=h/s.scaleY,x=u/y,S=d/b,C=s.width/y,w=s.height/b,T=e<0?c-C-x:s.cropX/y,E=n<0?l-w-S:s.cropY/b;if((e<0?x:T)+C>c||(n<0?S:E)+w>l)return!1;s.scaleX=h,s.scaleY=h,s.width=C,s.height=w,s.cropX=T,s.cropY=E;let D=H(e<0?1+x/C:-T/C,s.flipX),O=H(n<0?1+S/w:-E/w,s.flipY);return s.setPositionByOrigin(m,D,O),!0};function W({ctx:e}){let t=this._element,n=-this.width/2-this.cropX,r=-this.height/2-this.cropY,i=e.globalAlpha;e.globalAlpha*=.5,e.drawImage(t,n,r),e.strokeStyle=this.borderColor,e.lineWidth=this.borderScaleFactor/this.scaleX,e.strokeRect(n,r,t.width,t.height),e.globalAlpha=i}let{capValue:te}=t.util,ne=e=>(n,r,i,a)=>{var o,s,c,l;let u=r.target,d=r.original,f=e===`x`,p=f?u.flipX:u.flipY,m=f?u._element.width:u._element.height,h=f?u._element.height:u._element.width,g=f?r.originX===`right`:r.originY===`bottom`,_=f?r.width:r.height,v=f?r.height:r.width,y=f?(o=d.cropX)==null?0:o:(s=d.cropY)==null?0:s,b=f?(c=d.cropY)==null?0:c:(l=d.cropX)==null?0:l,x=f?d.scaleX:d.scaleY,S=f?d.scaleY:d.scaleX,C=t.controlsUtils.getLocalPoint(r,r.originX,r.originY,i,a),w=f?C.x:C.y,T=g?-w:w,E=Math.max(10,T/x),D=g===p?m-y:y+_,O=(e,t,n,r,i)=>{f?(u.width=e,u.height=t,u.cropX=r,u.cropY=i):(u.height=e,u.width=t,u.cropY=r,u.cropX=i),u.scaleX=n,u.scaleY=n};if(E<=D){let e=g===p?y:Math.max(0,y+_-E);O(Math.max(1,E),v,x,e,b)}else{let e=E*x/D,t=v*S/e,n=Math.min(t,h);O(D,n,e,g===p?y:0,te(b+v/2-n/2,0,h-n))}return!0},re=ne(`x`),ie=ne(`y`),G=N(`RESIZING`,M(re)),K=N(`RESIZING`,M(ie)),{degreesToRadians:ae}=t.util,{createRotateMatrix:oe,createTranslateMatrix:se,multiplyTransformMatrixArray:ce}=t.util;function q(e,n,r,i){var a;if(((a=n.canvas)==null?void 0:a.getActiveObject())!==n||!n.isControlVisible(e))return!1;let{tl:o,tr:s,br:c,bl:l}=i,u=new t.Point((o.x+s.x+c.x+l.x)/4,(o.y+s.y+c.y+l.y)/4),d=this.sizeX||n.cornerSize,f=(this.sizeY||n.cornerSize)/2,p=(n.angle||0)+(this.angle||0),m=ce([se(u.x,u.y),oe({angle:p})]),h=[new t.Point(-f,-f).transform(m),new t.Point(d+f,-f).transform(m),new t.Point(d+f,f).transform(m),new t.Point(-f,f).transform(m)],g=[new t.Point(-f,-f).transform(m),new t.Point(f,-f).transform(m),new t.Point(f,d+f).transform(m),new t.Point(-f,d+f).transform(m)];return t.Intersection.isPointInPolygon(r,h)||t.Intersection.isPointInPolygon(r,g)}function J(e,t,n,r,i){e.save();let{stroke:a,xSize:o,ySize:s}=this.commonRenderProps(e,t,n,i,r),c=Math.max(o,s),l=Math.min(o,s),u=c/2,d=2*i.borderScaleFactor;e.rotate(ae(this.angle)),e.lineCap=`round`,e.beginPath(),e.moveTo(-u,0),e.lineTo(u,0),a&&(e.lineWidth=l,e.stroke()),e.strokeStyle=e.fillStyle,e.lineWidth=a?l-d:l,e.stroke(),e.restore()}function Y(e,t,n,r,i){e.save();let{stroke:a,xSize:o,ySize:s}=this.commonRenderProps(e,t,n,i,r),c=o,l=s,u=2*i.borderScaleFactor;e.rotate(ae(this.angle)),e.lineCap=`round`,e.lineJoin=`round`;let d=()=>{e.beginPath(),e.moveTo(c,0),e.lineTo(0,0),e.lineTo(0,c)};a&&(e.lineWidth=l,d(),e.stroke()),e.strokeStyle=e.fillStyle,e.lineWidth=a?l-u:l,d(),e.stroke(),e.restore()}let{scaleCursorStyleHandler:X}=t.controlsUtils,Z=()=>`crop`,le=()=>({tls:new t.Control({x:-.5,y:-.5,cursorStyleHandler:X,positionHandler:V,actionHandler:U(-.5,-.5)}),brs:new t.Control({x:.5,y:.5,cursorStyleHandler:X,positionHandler:V,actionHandler:U(.5,.5)}),trs:new t.Control({x:.5,y:-.5,cursorStyleHandler:X,positionHandler:V,actionHandler:U(.5,-.5)}),bls:new t.Control({x:-.5,y:.5,cursorStyleHandler:X,positionHandler:V,actionHandler:U(-.5,.5)}),mlc:new t.Control({x:-.5,y:0,angle:90,sizeX:8,sizeY:16,render:J,cursorStyleHandler:X,actionHandler:P(R,I,`flipX`),getActionName:Z}),mrc:new t.Control({x:.5,y:0,angle:90,sizeX:8,sizeY:16,render:J,cursorStyleHandler:X,actionHandler:P(I,R,`flipX`),getActionName:Z}),mbc:new t.Control({x:0,y:.5,angle:0,sizeX:16,sizeY:8,render:J,cursorStyleHandler:X,actionHandler:P(L,z,`flipY`),getActionName:Z}),mtc:new t.Control({x:0,y:-.5,angle:0,sizeX:16,sizeY:8,render:J,cursorStyleHandler:X,actionHandler:P(z,L,`flipY`),getActionName:Z}),tlc:new t.Control({angle:0,x:-.5,y:-.5,sizeX:12,sizeY:8,render:Y,shouldActivate:q,cursorStyleHandler:X,actionHandler:F(R,I,z,L),getActionName:Z}),trc:new t.Control({angle:90,x:.5,y:-.5,sizeX:12,sizeY:8,render:Y,shouldActivate:q,cursorStyleHandler:X,actionHandler:F(I,R,z,L),getActionName:Z}),blc:new t.Control({angle:270,x:-.5,y:.5,sizeX:12,sizeY:8,render:Y,shouldActivate:q,cursorStyleHandler:X,actionHandler:F(R,I,L,z),getActionName:Z}),brc:new t.Control({angle:180,x:.5,y:.5,sizeX:12,sizeY:8,render:Y,shouldActivate:q,cursorStyleHandler:X,actionHandler:F(I,R,L,z),getActionName:Z})}),Q=()=>`resizing`,$=(e,n)=>{let{width:r,height:i}=e,{colorStops:a,coords:o,gradientUnits:s}=n,c=s===`percentage`,l=e.calcTransformMatrix(),u=e.getViewportTransform();return{width:r,height:i,colorStops:a,coords:o,isPerc:c,_finalMatrix:t.util.multiplyTransformMatrixArray([u,l])}},ue=(e,n)=>function(r,i,a){let{width:o,height:s,isPerc:c,coords:l,colorStops:u,_finalMatrix:d}=$(a,e),f=new t.Point(l.x1*(c?o:1)-o/2,l.y1*(c?s:1)-s/2),p=new t.Point(l.x2*(c?o:1)-o/2,l.y2*(c?s:1)-s/2),m=u[n].offset;return f.lerp(p,m).transform(d)},de=(e,n)=>function(r,i,a){let{width:o,height:s,isPerc:c,coords:l,_finalMatrix:u}=$(a,e);return(n===1?new t.Point(l.x1*(c?o:1)-o/2,l.y1*(c?s:1)-s/2):new t.Point(l.x2*(c?o:1)-o/2,l.y2*(c?s:1)-s/2)).transform(u)},fe=(e,n)=>(r,{target:i},a,o)=>{let{width:s,height:c,isPerc:l,coords:{x1:u,x2:d,y1:f,y2:p},colorStops:m}=$(i,e),h=t.util.sendPointToPlane(new t.Point(a,o),void 0,i.calcTransformMatrix()).add(new t.Point(s/2,c/2)),g=new t.Point(u*(l?s:1),f*(l?c:1)),_=t.util.createVector(g,new t.Point(d*(l?s:1),p*(l?c:1))),v=t.util.createVector(g,h),y=t.util.dotProduct(v,_)/t.util.dotProduct(_,_);return m[n].offset=t.util.capValue(0,y,1),i.set(`dirty`,!0),!0},pe=(e,n)=>(r,{target:i},a,o)=>{let{width:s,height:c,isPerc:l,coords:u}=$(i,e),d=t.util.sendPointToPlane(new t.Point(a,o),void 0,i.calcTransformMatrix()).add(new t.Point(s/2,c/2));return n===1&&(u.x1=d.x/(l?s:1),u.y1=d.y/(l?c:1)),n===2&&(u.x2=d.x/(l?s:1),u.y2=d.y/(l?c:1)),i.set(`dirty`,!0),!0},me=e=>function(n,r,i,a,o){var s,c;n.save();let{width:l,height:u,isPerc:d,coords:f}=$(o,e),p=t.util.sendPointToPlane(new t.Point(f.x2*(d?l:1)-l/2,f.y2*(d?u:1)-u/2),t.util.multiplyTransformMatrices((s=(c=o.canvas)==null?void 0:c.viewportTransform)==null?t.iMatrix:s,o.calcTransformMatrix()));n.lineWidth=o.borderScaleFactor,n.beginPath(),n.moveTo(r,i),n.lineTo(p.x,p.y),n.stroke(),t.controlsUtils.renderCircleControl.call(this,n,r,i,a,o),n.restore()};e.AligningGuidelines=class{constructor(e,t={}){k(this,`canvas`,void 0),k(this,`horizontalLines`,new Set),k(this,`verticalLines`,new Set),k(this,`cacheMap`,new Map),k(this,`onlyDrawPoint`,!1),k(this,`contraryOriginMap`,{tl:[`right`,`bottom`],tr:[`left`,`bottom`],br:[`left`,`top`],bl:[`right`,`top`],mt:[`center`,`bottom`],mr:[`left`,`center`],mb:[`center`,`top`],ml:[`right`,`center`]}),k(this,`xSize`,2.4),k(this,`lineDash`,void 0),k(this,`margin`,4),k(this,`width`,1),k(this,`color`,`rgba(255,0,0,0.9)`),k(this,`closeVLine`,!1),k(this,`closeHLine`,!1),this.canvas=e,Object.assign(this,t),this.mouseUp=this.mouseUp.bind(this),this.scalingOrResizing=this.scalingOrResizing.bind(this),this.moving=this.moving.bind(this),this.beforeRender=this.beforeRender.bind(this),this.afterRender=this.afterRender.bind(this),this.initBehavior()}initBehavior(){this.canvas.on(`mouse:up`,this.mouseUp),this.canvas.on(`object:resizing`,this.scalingOrResizing),this.canvas.on(`object:scaling`,this.scalingOrResizing),this.canvas.on(`object:moving`,this.moving),this.canvas.on(`before:render`,this.beforeRender),this.canvas.on(`after:render`,this.afterRender)}getObjectsByTarget(e){return T(e)}getPointMap(e){return function(e){let t=e.getCoords();return{tl:t[0],tr:t[1],br:t[2],bl:t[3],mt:t[0].add(t[1]).scalarDivide(2),mr:t[1].add(t[2]).scalarDivide(2),mb:t[2].add(t[3]).scalarDivide(2),ml:t[3].add(t[0]).scalarDivide(2)}}(e)}getContraryMap(e){return function(e){var t;let n=(t=e.aCoords)==null?e.calcACoords():t;return{tl:n.br,tr:n.bl,br:n.tl,bl:n.tr,mt:n.br.add(n.bl).scalarDivide(2),mr:n.bl.add(n.tl).scalarDivide(2),mb:n.tl.add(n.tr).scalarDivide(2),ml:n.tr.add(n.br).scalarDivide(2)}}(e)}getCaCheMapValue(e){let t=[e.calcTransformMatrix().toString(),e.width,e.height].join(),n=this.cacheMap.get(t);if(n)return n;let r=e.getCoords();return r.push(e.getCenterPoint()),this.cacheMap.set(t,r),r}drawLine(e,t){g.call(this,e,t)}drawX(e,t){_.call(this,e,t)}mouseUp(){this.verticalLines.clear(),this.horizontalLines.clear(),this.cacheMap.clear(),this.canvas.requestRenderAll()}scalingOrResizing(e){let n=e.target;n.setCoords();let r=String(e.transform.action).startsWith(`scale`);this.verticalLines.clear(),this.horizontalLines.clear();let i=this.getObjectsByTarget(n),a=e.transform.corner;n.flipX&&(a.includes(`l`)?a=a.replace(`l`,`r`):a.includes(`r`)&&(a=a.replace(`r`,`l`))),n.flipY&&(a.includes(`t`)?a=a.replace(`t`,`b`):a.includes(`b`)&&(a=a.replace(`b`,`t`)));let o=this.getPointMap(n);if(!(a in o)||(this.onlyDrawPoint=a.includes(`m`),this.onlyDrawPoint&&n.getTotalAngle()%90!=0))return;let s=this.getContraryMap(n),c=o[a],l=s[a],u=e.transform.original.originX==`center`&&e.transform.original.originY==`center`;if(u){let e=n.group?c.transform(t.util.invertTransform(n.group.calcTransformMatrix())):c;l=l.add(e).scalarDivide(2)}let d=e.e[this.canvas.uniScaleKey],f=this.canvas.uniformScaling&&!d||!this.canvas.uniformScaling&&d;this.onlyDrawPoint&&(f=!1);let p=[];for(let e of i){let t=this.getCaCheMapValue(e);p.push(...t)}let g={target:n,point:c,diagonalPoint:l,corner:a,list:p,isScale:r,isUniform:f,isCenter:u},_=this.onlyDrawPoint&&(a.includes(`t`)||a.includes(`b`)),v=this.onlyDrawPoint&&(a.includes(`l`)||a.includes(`r`)),y=_?[]:m.call(this,g),b=v?[]:h.call(this,g);y.forEach(e=>{this.verticalLines.add(JSON.stringify(e))}),b.forEach(e=>{this.horizontalLines.add(JSON.stringify(e))})}moving(e){let t=e.target;t.setCoords(),this.onlyDrawPoint=!1,this.verticalLines.clear(),this.horizontalLines.clear();let n=this.getObjectsByTarget(t),r=[];for(let e of n)r.push(...this.getCaCheMapValue(e));let{vLines:i,hLines:a}=S.call(this,t,r);i.forEach(e=>{this.verticalLines.add(JSON.stringify(e))}),a.forEach(e=>{this.horizontalLines.add(JSON.stringify(e))})}beforeRender(){this.canvas.clearContext(this.canvas.contextTop)}afterRender(){this.onlyDrawPoint?y.call(this):(b.call(this),x.call(this))}dispose(){this.canvas.off(`mouse:up`,this.mouseUp),this.canvas.off(`object:resizing`,this.scalingOrResizing),this.canvas.off(`object:scaling`,this.scalingOrResizing),this.canvas.off(`object:moving`,this.moving),this.canvas.off(`before:render`,this.beforeRender),this.canvas.off(`after:render`,this.afterRender)}},e.addGestures=e=>{let t=new n.default.Region(e.upperCanvasEl);e.addOrRemove((e,...t)=>e.removeEventListener(...t)),t.addGesture((e=>new n.default.Rotate(e.upperCanvasEl,({rotation:t,event:n})=>{e.fireEventFromPointerEvent(n,`rotate`,`rotate`,{rotation:t})}))(e)),t.addGesture((e=>new n.default.Pinch(e.upperCanvasEl,({scale:t,event:n})=>{e.fireEventFromPointerEvent(n,`pinch`,`pinch`,{scale:t})}))(e)),t.addGesture((e=>new n.default.Tap(e.upperCanvasEl,({event:t})=>{e.fireEventFromPointerEvent(t,`mouse:tripleclick`,`mousetripleclick`,void 0),t.preventDefault()},{numTaps:3,maxRetain:400}))(e)),t.addGesture((e=>new n.default.Tap(e.upperCanvasEl,({event:t})=>{e.fireEventFromPointerEvent(t,`mouse:dblclick`,`mousedblclick`,void 0),t.preventDefault()},{numTaps:2,maxRetain:300}))(e)),e.addOrRemove((e,...t)=>e.addEventListener(...t),!0)},e.changeCropHeight=L,e.changeCropWidth=I,e.changeCropX=R,e.changeCropY=z,e.changeHeightAndScaleToCover=K,e.changeWidthAndScaleToCover=G,e.createImageCroppingControls=le,e.createImageResizeControlsWithScaleToCover=()=>({mle:new t.Control({x:-.5,y:0,angle:90,sizeX:8,sizeY:16,render:J,cursorStyleHandler:X,actionHandler:G,getActionName:Q}),mre:new t.Control({x:.5,y:0,angle:90,sizeX:8,sizeY:16,render:J,cursorStyleHandler:X,actionHandler:G,getActionName:Q}),mte:new t.Control({x:0,y:-.5,angle:0,sizeX:16,sizeY:8,render:J,cursorStyleHandler:X,actionHandler:K,getActionName:Q}),mbe:new t.Control({x:0,y:.5,angle:0,sizeX:16,sizeY:8,render:J,cursorStyleHandler:X,actionHandler:K,getActionName:Q})}),e.createLinearGradientControls=function(e,n={}){let r={};return r.lgp_1=new t.Control({...n,positionHandler:de(e,1),actionHandler:pe(e,1),render:me(e)}),e.colorStops.forEach((i,a)=>{r[`lgo_${a}`]=new t.Control({...n,positionHandler:ue(e,a),actionHandler:fe(e,a)})}),r.lgp_2=new t.Control({...n,positionHandler:de(e,2),actionHandler:pe(e,2),render:t.controlsUtils.renderCircleControl}),r},e.enterCropMode=function e({target:t}){var n;let r=t,{controls:i,padding:a}=r;r.padding=0,r.controls=le(),r.on(`moving`,B),r.on(`before:render`,W),r.setCoords(),r.once(`mousedblclick`,()=>{var t;r.padding=a,r.off(`moving`,B),r.off(`before:render`,W),r.controls=i,r.setCoords(),r.once(`mousedblclick`,e),(t=r.canvas)==null||t.requestRenderAll()}),(n=r.canvas)==null||n.requestRenderAll()},e.gradientUpdaterWrapper=j,e.installGradientUpdater=()=>{t.Gradient.fromObject=j(t.Gradient.fromObject)},e.installOriginWrapperUpdater=(e,n)=>{t.BaseFabricObject._fromObject=A(t.BaseFabricObject._fromObject,e,n),t.FabricImage.fromObject=A(t.FabricImage.fromObject,e,n),t.Group.fromObject=A(t.Group.fromObject,e,n)},e.originUpdaterWrapper=A,e.pinchEventHandler=function({scale:e,target:t,scenePoint:n}){t&&this.getActiveObject()===t?(t.scaleX*=e,t.scaleY*=e):this.zoomToPoint(n,this.getZoom()*e)},e.rotateEventHandler=function({rotation:e,target:n}){n&&this.getActiveObject()===n&&n.rotate(n.angle+t.util.radiansToDegrees(e))},e.withFlip=P}); //# sourceMappingURL=fabric-extensions.min.js.map