@nasser-sw/fabric 7.0.1-beta4 → 7.0.1-beta5

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,2 +1,2 @@
1
- var a="7.0.1-beta3";export{a as version};
1
+ var a="7.0.1-beta5";export{a as version};
2
2
  //# sourceMappingURL=package.json.min.mjs.map
@@ -1,4 +1,4 @@
1
- var version = "7.0.1-beta3";
1
+ var version = "7.0.1-beta5";
2
2
 
3
3
  export { version };
4
4
  //# sourceMappingURL=package.json.mjs.map
@@ -53,6 +53,7 @@ export declare class Line<Props extends TOptions<FabricObjectProps> = Partial<Fa
53
53
  _getNonTransformedDimensions(): Point;
54
54
  calcLinePoints(): UniqueLineCoords;
55
55
  _toSVG(): string[];
56
+ toSVG(reviver?: (markup: string) => string): string;
56
57
  static ATTRIBUTE_NAMES: string[];
57
58
  static fromElement(element: HTMLElement, options?: Abortable, cssRules?: CSSRules): Promise<Line<{
58
59
  [x: string]: /*elided*/ any;
@@ -1 +1 @@
1
- {"version":3,"file":"Line.d.ts","sourceRoot":"","sources":["../../../src/shapes/Line.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEzE,OAAO,EAAE,YAAY,EAAmB,MAAM,uBAAuB,CAAC;AACtE,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAEjC,OAAO,KAAK,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AAC/E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAGrD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAEnD,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAIjE,UAAU,gBAAgB;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;CACZ;AAED,MAAM,WAAW,mBACf,SAAQ,qBAAqB,EAC3B,gBAAgB;CAAG;AAEvB,qBAAa,IAAI,CACb,KAAK,SAAS,QAAQ,CAAC,iBAAiB,CAAC,GAAG,OAAO,CAAC,iBAAiB,CAAC,EACtE,MAAM,SAAS,mBAAmB,GAAG,mBAAmB,EACxD,SAAS,SAAS,YAAY,GAAG,YAAY,CAE/C,SAAQ,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,CAC7C,YAAW,gBAAgB;IAEnB,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;IAEnB,cAAc,EAAE,MAAM,GAAG,MAAM,CAAU;IAEzC,OAAO,CAAC,kBAAkB,CAAS;IACnC,OAAO,CAAC,kBAAkB,CAAQ;IAElC,MAAM,CAAC,IAAI,SAAU;IACrB,MAAM,CAAC,eAAe,WAAuC;gBAEjD,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,mCAAiB,EAAE,OAAO,GAAE,OAAO,CAAC,KAAK,GAAG;QAAC,cAAc,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;KAAC,CAAM;IA0BhH,kBAAkB;IAyBlB,kBAAkB;IAKlB,kBAAkB;IAKlB,sBAAsB,CACpB,GAAG,EAAE,wBAAwB,EAC7B,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,MAAM;IAcb,WAAW,CAAC,GAAG,EAAE,wBAAwB,EAAE,aAAa,GAAE,GAAQ;IAQlE,gBAAgB,CAAC,GAAG,EAAE,wBAAwB,EAAE,aAAa,GAAE,GAAQ;IAgBvE,eAAe,CAAC,GAAG,EAAE,wBAAwB,EAAE,aAAa,GAAE,GAAQ;IAOtE,eAAe;IAkBf,SAAS;IAmBT,SAAS,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;IA8BzC,aAAa,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO;IAgBpC,sBAAsB,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM;IAyBtD,sBAAsB,CACpB,SAAS,EAAE,aAAa,EACxB,aAAa,EAAE,SAAS,EACxB,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM;IA+CX,YAAY,CACV,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,EACb,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,MAAM,GACV;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE;IAe3B,eAAe,CAAC,cAAc,UAAQ;IAgBtC,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG;IAuB5B,MAAM,CAAC,GAAG,EAAE,wBAAwB;IAQpC,eAAe,CAAC,GAAG,EAAE,wBAAwB;IAgB7C,OAAO,CAAC,GAAG,EAAE,wBAAwB;IAerC,sBAAsB,IAAI,KAAK;IAI/B,QAAQ,CACN,CAAC,SAAS,IAAI,CAAC,KAAK,GAAG,gBAAgB,CAAC,IAAI,CAAC,EAAE,MAAM,MAAM,CAAC,EAC5D,CAAC,SAAS,MAAM,CAAC,GAAG,KAAK,EACzB,mBAAmB,GAAE,CAAC,EAAO,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,MAAM;IAOrD,4BAA4B,IAAI,KAAK;IASrC,cAAc,IAAI,gBAAgB;IAsBlC,MAAM;IASN,MAAM,CAAC,eAAe,WAAwC;WAEjD,WAAW,CACtB,OAAO,EAAE,WAAW,EACpB,OAAO,CAAC,EAAE,SAAS,EACnB,QAAQ,CAAC,EAAE,QAAQ;;;IAYrB,MAAM,CAAC,UAAU,CAAC,CAAC,SAAS,QAAQ,CAAC,mBAAmB,CAAC,EAAE,EACzD,EAAE,EACF,EAAE,EACF,EAAE,EACF,EAAE,EACF,GAAG,MAAM,EACV,EAAE,CAAC;CAML"}
1
+ {"version":3,"file":"Line.d.ts","sourceRoot":"","sources":["../../../src/shapes/Line.ts"],"names":[],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import{defineProperty as t}from"../../_virtual/_rollupPluginBabelHelpers.min.mjs";import{SHARED_ATTRIBUTES as i}from"../parser/attributes.min.mjs";import{parseAttributes as s}from"../parser/parseAttributes.min.mjs";import{classRegistry as e}from"../ClassRegistry.min.mjs";import{FabricObject as o}from"./Object/FabricObject.min.mjs";import{Point as n}from"../Point.min.mjs";import{isFiller as r}from"../util/typeAssertions.min.mjs";import{LEFT as h,TOP as a,CENTER as d}from"../constants.min.mjs";import"../util/misc/vectors.min.mjs";import"../util/misc/projectStroke/StrokeLineJoinProjections.min.mjs";import"../config.min.mjs";import"./Group.min.mjs";import{makeBoundingBoxFromPoints as l}from"../util/misc/boundingBoxFromPoints.min.mjs";import"../cache.min.mjs";import"../parser/constants.min.mjs";import"../util/animation/AnimationRegistry.min.mjs";import{Control as p}from"../controls/Control.min.mjs";import{cacheProperties as m}from"./Object/defaultValues.min.mjs";const u=["x1","x2","y1","y2"];class c extends o{constructor(){let[i,s,e,o]=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[0,0,100,0],n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};super(),t(this,"hitStrokeWidth","auto"),t(this,"_updatingEndpoints",!1),t(this,"_useEndpointCoords",!0),this.setOptions(n),this.x1=i,this.x2=e,this.y1=s,this.y2=o,void 0!==n.hitStrokeWidth&&(this.hitStrokeWidth=n.hitStrokeWidth),this.hasBorders=!1,this.hasControls=!0,this.selectable=!0,this.hoverCursor="move",this.perPixelTargetFind=!1,this.strokeLineCap="butt",this._setWidthHeight();const{left:r,top:d}=n;"number"==typeof r&&this.set(h,r),"number"==typeof d&&this.set(a,d),this._setupLineControls()}_setupLineControls(){this.controls={p1:new p({x:0,y:0,cursorStyle:"move",actionHandler:this._endpointActionHandler.bind(this),positionHandler:this._p1PositionHandler.bind(this),render:this._renderEndpointControl.bind(this),sizeX:12,sizeY:12}),p2:new p({x:0,y:0,cursorStyle:"move",actionHandler:this._endpointActionHandler.bind(this),positionHandler:this._p2PositionHandler.bind(this),render:this._renderEndpointControl.bind(this),sizeX:12,sizeY:12})}}_p1PositionHandler(){var t;const i=(null===(t=this.canvas)||void 0===t?void 0:t.viewportTransform)||[1,0,0,1,0,0];return new n(this.x1,this.y1).transform(i)}_p2PositionHandler(){var t;const i=(null===(t=this.canvas)||void 0===t?void 0:t.viewportTransform)||[1,0,0,1,0,0];return new n(this.x2,this.y2).transform(i)}_renderEndpointControl(t,i,s){t.save(),t.fillStyle="#007bff",t.strokeStyle="#ffffff",t.lineWidth=2,t.beginPath(),t.arc(i,s,6,0,2*Math.PI),t.fill(),t.stroke(),t.restore()}drawBorders(t){let i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return this._useEndpointCoords?(this._drawLineBorders(t,i),this):super.drawBorders(t,i,{})}_drawLineBorders(t){var i;let s=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const e=(null===(i=this.canvas)||void 0===i?void 0:i.viewportTransform)||[1,0,0,1,0,0];t.save(),t.setTransform(e[0],e[1],e[2],e[3],e[4],e[5]),t.strokeStyle=s.borderColor||this.borderColor||"rgba(100, 200, 200, 0.5)",t.lineWidth=(this.strokeWidth||1)+5,t.lineCap=this.strokeLineCap||"butt",t.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,t.beginPath(),t.moveTo(this.x1,this.y1),t.lineTo(this.x2,this.y2),t.stroke(),t.restore()}_renderControls(t){let i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};t.save(),t.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,this.drawControls(t,i),t.restore()}getBoundingRect(){if(this._useEndpointCoords){const{x1:t,y1:i,x2:s,y2:e}=this,o="auto"===this.hitStrokeWidth?this.strokeWidth:this.hitStrokeWidth,n=Math.max(o/2+5,10);return{left:Math.min(t,s)-n,top:Math.min(i,e)-n,width:Math.abs(s-t)+2*n||2*n,height:Math.abs(e-i)+2*n||2*n}}return super.getBoundingRect()}setCoords(){if(this._useEndpointCoords){const t=Math.min(this.x1,this.x2),i=Math.max(this.x1,this.x2),s=Math.min(this.y1,this.y2),e=Math.max(this.y1,this.y2),o="auto"===this.hitStrokeWidth?this.strokeWidth:this.hitStrokeWidth,n=Math.max(o/2+5,10);this.left=t-n+(i-t+2*n)/2,this.top=s-n+(e-s+2*n)/2,this.width=Math.abs(this.x2-this.x1)+2*n,this.height=Math.abs(this.y2-this.y1)+2*n}super.setCoords()}getCoords(){if(this._useEndpointCoords){const t=this.x2-this.x1,i=this.y2-this.y1,s=Math.sqrt(t*t+i*i);if(0===s)return super.getCoords();const e="auto"===this.hitStrokeWidth?this.strokeWidth:this.hitStrokeWidth,o=Math.max(e/2+2,5),r=-i/s,h=t/s;return[new n(this.x1+r*o,this.y1+h*o),new n(this.x2+r*o,this.y2+h*o),new n(this.x2-r*o,this.y2-h*o),new n(this.x1-r*o,this.y1-h*o)]}return super.getCoords()}containsPoint(t){if(this._useEndpointCoords){var i;if((null===(i=this.canvas)||void 0===i?void 0:i.getActiveObject())===this)return super.containsPoint(t);const s=this._distanceToLineSegment(t.x,t.y),e="auto"===this.hitStrokeWidth?this.strokeWidth:this.hitStrokeWidth||1;return s<=Math.max(e/2+2,5)}return super.containsPoint(t)}_distanceToLineSegment(t,i){const s=this.x1,e=this.y1,o=this.x2,n=this.y2,r=(s-o)*(s-o)+(e-n)*(e-n);if(0===r)return Math.sqrt((t-s)*(t-s)+(i-e)*(i-e));const h=((t-s)*(o-s)+(i-e)*(n-e))/r;let a,d;return h<0?(a=s,d=e):h>1?(a=o,d=n):(a=s+h*(o-s),d=e+h*(n-e)),Math.sqrt((t-a)*(t-a)+(i-d)*(i-d))}_endpointActionHandler(t,i,s,e){var o;const r=i.corner,h=new n(s,e);let a=h.x,d=h.y;if(t.shiftKey){const t="p1"===r?"p2":"p1",i=this["p1"===t?"x1":"x2"],s=this["p1"===t?"y1":"y2"],e=this._snapToAngle(i,s,a,d);a=e.x,d=e.y}var l;return this._useEndpointCoords?("p1"===r?(this.x1=a,this.y1=d):"p2"===r&&(this.x2=a,this.y2=d),this.dirty=!0,this.setCoords(),null===(l=this.canvas)||void 0===l||l.requestRenderAll(),!0):(this._updatingEndpoints=!0,"p1"===r?(this.x1=a,this.y1=d):"p2"===r&&(this.x2=a,this.y2=d),this._setWidthHeight(),this.dirty=!0,this._updatingEndpoints=!1,null===(o=this.canvas)||void 0===o||o.requestRenderAll(),this.fire("modified",{transform:i,target:this,e:t}),!0)}_snapToAngle(t,i,s,e){const o=s-t,n=e-i,r=Math.sqrt(o*o+n*n);if(0===r)return{x:s,y:e};let h=Math.atan2(n,o)*(180/Math.PI);const a=15*Math.round(h/15)*(Math.PI/180);return{x:t+Math.cos(a)*r,y:i+Math.sin(a)*r}}_setWidthHeight(){let t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];if(this.width=Math.abs(this.x2-this.x1)||1,this.height=Math.abs(this.y2-this.y1)||1,!t&&!this._updatingEndpoints){const{left:t,top:i,width:s,height:e}=l([{x:this.x1,y:this.y1},{x:this.x2,y:this.y2}]);this.setPositionByOrigin(new n(t+s/2,i+e/2),d,d)}}_set(t,i){const s=this.left,e=this.top;if(super._set(t,i),u.includes(t)&&(this._setWidthHeight(),this.dirty=!0),("left"===t||"top"===t)&&this.canvas&&!this._updatingEndpoints){const t=this.left-s,i=this.top-e;0===t&&0===i||(this._updatingEndpoints=!0,this.x1+=t,this.y1+=i,this.x2+=t,this.y2+=i,this._updatingEndpoints=!1)}return this}render(t){this._useEndpointCoords?this._renderDirectly(t):super.render(t)}_renderDirectly(t){var i,s;if(!this.visible)return;t.save();const e=(null===(i=this.canvas)||void 0===i?void 0:i.viewportTransform)||[1,0,0,1,0,0];t.transform(e[0],e[1],e[2],e[3],e[4],e[5]),t.globalAlpha=this.opacity,t.strokeStyle=(null===(s=this.stroke)||void 0===s?void 0:s.toString())||"#000",t.lineWidth=this.strokeWidth,t.lineCap=this.strokeLineCap||"butt",t.beginPath(),t.moveTo(this.x1,this.y1),t.lineTo(this.x2,this.y2),t.stroke(),t.restore()}_render(t){if(this._useEndpointCoords)return;t.beginPath();const i=this.calcLinePoints();t.moveTo(i.x1,i.y1),t.lineTo(i.x2,i.y2),t.lineWidth=this.strokeWidth;const s=t.strokeStyle;r(this.stroke)&&(t.strokeStyle=this.stroke.toLive(t)),this.stroke&&this._renderStroke(t),t.strokeStyle=s}_findCenterFromElement(){return new n((this.x1+this.x2)/2,(this.y1+this.y2)/2)}toObject(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];return{...super.toObject(t),...this.calcLinePoints()}}_getNonTransformedDimensions(){const t=super._getNonTransformedDimensions();return"round"===this.strokeLineCap&&(t.x+=this.strokeWidth,t.y+=this.strokeWidth),t}calcLinePoints(){if(this._updatingEndpoints){const t=(this.x1+this.x2)/2,i=(this.y1+this.y2)/2;return{x1:this.x1-t,y1:this.y1-i,x2:this.x2-t,y2:this.y2-i}}const{x1:t,x2:i,y1:s,y2:e,width:o,height:n}=this,r=t<=i?-1:1,h=s<=e?-1:1;return{x1:r*o/2,y1:h*n/2,x2:r*-o/2,y2:h*-n/2}}_toSVG(){const{x1:t,x2:i,y1:s,y2:e}=this.calcLinePoints();return["<line ","COMMON_PARTS",`x1="${t}" y1="${s}" x2="${i}" y2="${e}" />\n`]}static async fromElement(t,i,e){const{x1:o=0,y1:n=0,x2:r=0,y2:h=0,...a}=s(t,this.ATTRIBUTE_NAMES,e);return new this([o,n,r,h],a)}static fromObject(t){let{x1:i,y1:s,x2:e,y2:o,...n}=t;return this._fromObject({...n,points:[i,s,e,o]},{extraParam:"points"})}}t(c,"type","Line"),t(c,"cacheProperties",[...m,...u]),t(c,"ATTRIBUTE_NAMES",i.concat(u)),e.setClass(c),e.setSVGClass(c);export{c as Line};
1
+ import{defineProperty as t}from"../../_virtual/_rollupPluginBabelHelpers.min.mjs";import{SHARED_ATTRIBUTES as i}from"../parser/attributes.min.mjs";import{parseAttributes as s}from"../parser/parseAttributes.min.mjs";import{classRegistry as e}from"../ClassRegistry.min.mjs";import{FabricObject as o}from"./Object/FabricObject.min.mjs";import{Point as n}from"../Point.min.mjs";import{isFiller as r}from"../util/typeAssertions.min.mjs";import{LEFT as h,TOP as d,CENTER as a}from"../constants.min.mjs";import"../util/misc/vectors.min.mjs";import"../util/misc/projectStroke/StrokeLineJoinProjections.min.mjs";import"../config.min.mjs";import"./Group.min.mjs";import{makeBoundingBoxFromPoints as l}from"../util/misc/boundingBoxFromPoints.min.mjs";import"../cache.min.mjs";import"../parser/constants.min.mjs";import"../util/animation/AnimationRegistry.min.mjs";import{Control as p}from"../controls/Control.min.mjs";import{cacheProperties as m}from"./Object/defaultValues.min.mjs";const u=["x1","x2","y1","y2"];class c extends o{constructor(){let[i,s,e,o]=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[0,0,100,0],n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};super(),t(this,"hitStrokeWidth","auto"),t(this,"_updatingEndpoints",!1),t(this,"_useEndpointCoords",!0),this.setOptions(n),this.x1=i,this.x2=e,this.y1=s,this.y2=o,void 0!==n.hitStrokeWidth&&(this.hitStrokeWidth=n.hitStrokeWidth),this.hasBorders=!1,this.hasControls=!0,this.selectable=!0,this.hoverCursor="move",this.perPixelTargetFind=!1,this.strokeLineCap="butt",this._setWidthHeight();const{left:r,top:a}=n;"number"==typeof r&&this.set(h,r),"number"==typeof a&&this.set(d,a),this._setupLineControls()}_setupLineControls(){this.controls={p1:new p({x:0,y:0,cursorStyle:"move",actionHandler:this._endpointActionHandler.bind(this),positionHandler:this._p1PositionHandler.bind(this),render:this._renderEndpointControl.bind(this),sizeX:12,sizeY:12}),p2:new p({x:0,y:0,cursorStyle:"move",actionHandler:this._endpointActionHandler.bind(this),positionHandler:this._p2PositionHandler.bind(this),render:this._renderEndpointControl.bind(this),sizeX:12,sizeY:12})}}_p1PositionHandler(){var t;const i=(null===(t=this.canvas)||void 0===t?void 0:t.viewportTransform)||[1,0,0,1,0,0];return new n(this.x1,this.y1).transform(i)}_p2PositionHandler(){var t;const i=(null===(t=this.canvas)||void 0===t?void 0:t.viewportTransform)||[1,0,0,1,0,0];return new n(this.x2,this.y2).transform(i)}_renderEndpointControl(t,i,s){t.save(),t.fillStyle="#007bff",t.strokeStyle="#ffffff",t.lineWidth=2,t.beginPath(),t.arc(i,s,6,0,2*Math.PI),t.fill(),t.stroke(),t.restore()}drawBorders(t){let i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return this._useEndpointCoords?(this._drawLineBorders(t,i),this):super.drawBorders(t,i,{})}_drawLineBorders(t){var i;let s=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const e=(null===(i=this.canvas)||void 0===i?void 0:i.viewportTransform)||[1,0,0,1,0,0];t.save(),t.setTransform(e[0],e[1],e[2],e[3],e[4],e[5]),t.strokeStyle=s.borderColor||this.borderColor||"rgba(100, 200, 200, 0.5)",t.lineWidth=(this.strokeWidth||1)+5,t.lineCap=this.strokeLineCap||"butt",t.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,t.beginPath(),t.moveTo(this.x1,this.y1),t.lineTo(this.x2,this.y2),t.stroke(),t.restore()}_renderControls(t){let i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};t.save(),t.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,this.drawControls(t,i),t.restore()}getBoundingRect(){if(this._useEndpointCoords){const{x1:t,y1:i,x2:s,y2:e}=this,o="auto"===this.hitStrokeWidth?this.strokeWidth:this.hitStrokeWidth,n=Math.max(o/2+5,10);return{left:Math.min(t,s)-n,top:Math.min(i,e)-n,width:Math.abs(s-t)+2*n||2*n,height:Math.abs(e-i)+2*n||2*n}}return super.getBoundingRect()}setCoords(){if(this._useEndpointCoords){const t=this._findCenterFromElement();this.left=t.x,this.top=t.y;const i="auto"===this.hitStrokeWidth?this.strokeWidth:this.hitStrokeWidth,s=Math.max(i/2+5,10);this.width=Math.abs(this.x2-this.x1)+2*s,this.height=Math.abs(this.y2-this.y1)+2*s}super.setCoords()}getCoords(){if(this._useEndpointCoords){const t=this.x2-this.x1,i=this.y2-this.y1,s=Math.sqrt(t*t+i*i);if(0===s)return super.getCoords();const e="auto"===this.hitStrokeWidth?this.strokeWidth:this.hitStrokeWidth,o=Math.max(e/2+2,5),r=-i/s,h=t/s;return[new n(this.x1+r*o,this.y1+h*o),new n(this.x2+r*o,this.y2+h*o),new n(this.x2-r*o,this.y2-h*o),new n(this.x1-r*o,this.y1-h*o)]}return super.getCoords()}containsPoint(t){if(this._useEndpointCoords){var i;if((null===(i=this.canvas)||void 0===i?void 0:i.getActiveObject())===this)return super.containsPoint(t);const s=this._distanceToLineSegment(t.x,t.y),e="auto"===this.hitStrokeWidth?this.strokeWidth:this.hitStrokeWidth||1;return s<=Math.max(e/2+2,5)}return super.containsPoint(t)}_distanceToLineSegment(t,i){const s=this.x1,e=this.y1,o=this.x2,n=this.y2,r=(s-o)*(s-o)+(e-n)*(e-n);if(0===r)return Math.sqrt((t-s)*(t-s)+(i-e)*(i-e));const h=((t-s)*(o-s)+(i-e)*(n-e))/r;let d,a;return h<0?(d=s,a=e):h>1?(d=o,a=n):(d=s+h*(o-s),a=e+h*(n-e)),Math.sqrt((t-d)*(t-d)+(i-a)*(i-a))}_endpointActionHandler(t,i,s,e){var o;const r=i.corner,h=new n(s,e);let d=h.x,a=h.y;if(t.shiftKey){const t="p1"===r?"p2":"p1",i=this["p1"===t?"x1":"x2"],s=this["p1"===t?"y1":"y2"],e=this._snapToAngle(i,s,d,a);d=e.x,a=e.y}var l;return this._useEndpointCoords?("p1"===r?(this.x1=d,this.y1=a):"p2"===r&&(this.x2=d,this.y2=a),this.dirty=!0,this.setCoords(),null===(l=this.canvas)||void 0===l||l.requestRenderAll(),!0):(this._updatingEndpoints=!0,"p1"===r?(this.x1=d,this.y1=a):"p2"===r&&(this.x2=d,this.y2=a),this._setWidthHeight(),this.dirty=!0,this._updatingEndpoints=!1,null===(o=this.canvas)||void 0===o||o.requestRenderAll(),this.fire("modified",{transform:i,target:this,e:t}),!0)}_snapToAngle(t,i,s,e){const o=s-t,n=e-i,r=Math.sqrt(o*o+n*n);if(0===r)return{x:s,y:e};let h=Math.atan2(n,o)*(180/Math.PI);const d=15*Math.round(h/15)*(Math.PI/180);return{x:t+Math.cos(d)*r,y:i+Math.sin(d)*r}}_setWidthHeight(){let t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];if(this.width=Math.abs(this.x2-this.x1)||1,this.height=Math.abs(this.y2-this.y1)||1,!t&&!this._updatingEndpoints){const{left:t,top:i,width:s,height:e}=l([{x:this.x1,y:this.y1},{x:this.x2,y:this.y2}]);this.setPositionByOrigin(new n(t+s/2,i+e/2),a,a)}}_set(t,i){const s=this.left,e=this.top;if(super._set(t,i),u.includes(t)&&(this._setWidthHeight(),this.dirty=!0),("left"===t||"top"===t)&&this.canvas&&!this._updatingEndpoints){const t=this.left-s,i=this.top-e;0===t&&0===i||(this._updatingEndpoints=!0,this.x1+=t,this.y1+=i,this.x2+=t,this.y2+=i,this._updatingEndpoints=!1)}return this}render(t){this._useEndpointCoords?this._renderDirectly(t):super.render(t)}_renderDirectly(t){var i,s;if(!this.visible)return;t.save();const e=(null===(i=this.canvas)||void 0===i?void 0:i.viewportTransform)||[1,0,0,1,0,0];t.transform(e[0],e[1],e[2],e[3],e[4],e[5]),t.globalAlpha=this.opacity,t.strokeStyle=(null===(s=this.stroke)||void 0===s?void 0:s.toString())||"#000",t.lineWidth=this.strokeWidth,t.lineCap=this.strokeLineCap||"butt",t.beginPath(),t.moveTo(this.x1,this.y1),t.lineTo(this.x2,this.y2),t.stroke(),t.restore()}_render(t){if(this._useEndpointCoords)return;t.beginPath();const i=this.calcLinePoints();t.moveTo(i.x1,i.y1),t.lineTo(i.x2,i.y2),t.lineWidth=this.strokeWidth;const s=t.strokeStyle;r(this.stroke)&&(t.strokeStyle=this.stroke.toLive(t)),this.stroke&&this._renderStroke(t),t.strokeStyle=s}_findCenterFromElement(){return new n((this.x1+this.x2)/2,(this.y1+this.y2)/2)}toObject(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];return{...super.toObject(t),...this.calcLinePoints()}}_getNonTransformedDimensions(){const t=super._getNonTransformedDimensions();return"round"===this.strokeLineCap&&(t.x+=this.strokeWidth,t.y+=this.strokeWidth),t}calcLinePoints(){if(this._updatingEndpoints){const t=(this.x1+this.x2)/2,i=(this.y1+this.y2)/2;return{x1:this.x1-t,y1:this.y1-i,x2:this.x2-t,y2:this.y2-i}}const{x1:t,x2:i,y1:s,y2:e,width:o,height:n}=this,r=t<=i?-1:1,h=s<=e?-1:1;return{x1:r*o/2,y1:h*n/2,x2:r*-o/2,y2:h*-n/2}}_toSVG(){if(this._useEndpointCoords)return[`<line stroke="${this.stroke}" stroke-width="${this.strokeWidth}" stroke-linecap="${this.strokeLineCap}" `,`x1="${this.x1}" y1="${this.y1}" x2="${this.x2}" y2="${this.y2}" />\n`];{const{x1:t,x2:i,y1:s,y2:e}=this.calcLinePoints();return["<line ","COMMON_PARTS",`x1="${t}" y1="${s}" x2="${i}" y2="${e}" />\n`]}}toSVG(t){if(this._useEndpointCoords){const i=this._toSVG().join("");return t?t(i):i}return super.toSVG(t)}static async fromElement(t,i,e){const{x1:o=0,y1:n=0,x2:r=0,y2:h=0,...d}=s(t,this.ATTRIBUTE_NAMES,e);return new this([o,n,r,h],d)}static fromObject(t){let{x1:i,y1:s,x2:e,y2:o,...n}=t;return this._fromObject({...n,points:[i,s,e,o]},{extraParam:"points"})}}t(c,"type","Line"),t(c,"cacheProperties",[...m,...u]),t(c,"ATTRIBUTE_NAMES",i.concat(u)),e.setClass(c),e.setSVGClass(c);export{c as Line};
2
2
  //# sourceMappingURL=Line.min.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"Line.min.mjs","sources":["../../../src/shapes/Line.ts"],"sourcesContent":["import { SHARED_ATTRIBUTES } from '../parser/attributes';\nimport { parseAttributes } from '../parser/parseAttributes';\nimport type { Abortable, TClassProperties, TOptions } from '../typedefs';\nimport { classRegistry } from '../ClassRegistry';\nimport { FabricObject, cacheProperties } from './Object/FabricObject';\nimport { Point } from '../Point';\nimport { isFiller } from '../util/typeAssertions';\nimport type { FabricObjectProps, SerializedObjectProps } from './Object/types';\nimport type { ObjectEvents } from '../EventTypeDefs';\nimport { makeBoundingBoxFromPoints } from '../util';\nimport { CENTER, LEFT, TOP } from '../constants';\nimport type { CSSRules } from '../parser/typedefs';\nimport { Control } from '../controls/Control';\nimport type { TPointerEvent, Transform } from '../EventTypeDefs';\n\nconst coordProps = ['x1', 'x2', 'y1', 'y2'] as const;\n\ninterface UniqueLineCoords {\n x1: number;\n x2: number;\n y1: number;\n y2: number;\n}\n\nexport interface SerializedLineProps\n extends SerializedObjectProps,\n UniqueLineCoords {}\n\nexport class Line< \n Props extends TOptions<FabricObjectProps> = Partial<FabricObjectProps>,\n SProps extends SerializedLineProps = SerializedLineProps,\n EventSpec extends ObjectEvents = ObjectEvents\n >\n extends FabricObject<Props, SProps, EventSpec>\n implements UniqueLineCoords\n{\n declare x1: number;\n declare y1: number;\n declare x2: number;\n declare y2: number;\n\n hitStrokeWidth: number | 'auto' = 'auto';\n\n private _updatingEndpoints = false;\n private _useEndpointCoords = true;\n\n static type = 'Line';\n static cacheProperties = [...cacheProperties, ...coordProps];\n\n constructor([x1, y1, x2, y2] = [0, 0, 100, 0], options: Partial<Props & {hitStrokeWidth?: number | 'auto'}> = {}) {\n super();\n this.setOptions(options);\n this.x1 = x1;\n this.x2 = x2;\n this.y1 = y1;\n this.y2 = y2;\n\n if (options.hitStrokeWidth !== undefined) {\n this.hitStrokeWidth = options.hitStrokeWidth;\n }\n\n this.hasBorders = false;\n this.hasControls = true;\n this.selectable = true;\n this.hoverCursor = 'move';\n this.perPixelTargetFind = false;\n this.strokeLineCap = 'butt';\n\n this._setWidthHeight();\n const { left, top } = options;\n typeof left === 'number' && this.set(LEFT, left);\n typeof top === 'number' && this.set(TOP, top);\n this._setupLineControls();\n }\n\n _setupLineControls() {\n this.controls = {\n p1: new Control({\n x: 0,\n y: 0,\n cursorStyle: 'move',\n actionHandler: this._endpointActionHandler.bind(this),\n positionHandler: this._p1PositionHandler.bind(this),\n render: this._renderEndpointControl.bind(this),\n sizeX: 12,\n sizeY: 12,\n }),\n p2: new Control({\n x: 0,\n y: 0,\n cursorStyle: 'move',\n actionHandler: this._endpointActionHandler.bind(this),\n positionHandler: this._p2PositionHandler.bind(this),\n render: this._renderEndpointControl.bind(this),\n sizeX: 12,\n sizeY: 12,\n }),\n };\n }\n\n _p1PositionHandler() {\n const vpt = this.canvas?.viewportTransform || [1, 0, 0, 1, 0, 0];\n return new Point(this.x1, this.y1).transform(vpt);\n }\n\n _p2PositionHandler() {\n const vpt = this.canvas?.viewportTransform || [1, 0, 0, 1, 0, 0];\n return new Point(this.x2, this.y2).transform(vpt);\n }\n\n _renderEndpointControl(\n ctx: CanvasRenderingContext2D,\n left: number,\n top: number\n ) {\n const size = 12;\n ctx.save();\n ctx.fillStyle = '#007bff';\n ctx.strokeStyle = '#ffffff';\n ctx.lineWidth = 2;\n ctx.beginPath();\n ctx.arc(left, top, size / 2, 0, 2 * Math.PI);\n ctx.fill();\n ctx.stroke();\n ctx.restore();\n }\n\n drawBorders(ctx: CanvasRenderingContext2D, styleOverride: any = {}) {\n if (this._useEndpointCoords) {\n this._drawLineBorders(ctx, styleOverride);\n return this;\n }\n return super.drawBorders(ctx, styleOverride, {});\n }\n\n _drawLineBorders(ctx: CanvasRenderingContext2D, styleOverride: any = {}) {\n const vpt = this.canvas?.viewportTransform || [1, 0, 0, 1, 0, 0];\n ctx.save();\n ctx.setTransform(vpt[0], vpt[1], vpt[2], vpt[3], vpt[4], vpt[5]);\n ctx.strokeStyle =\n styleOverride.borderColor || this.borderColor || 'rgba(100, 200, 200, 0.5)';\n ctx.lineWidth = (this.strokeWidth || 1) + 5;\n ctx.lineCap = this.strokeLineCap || 'butt';\n ctx.globalAlpha = this.isMoving ? this.borderOpacityWhenMoving : 1;\n ctx.beginPath();\n ctx.moveTo(this.x1, this.y1);\n ctx.lineTo(this.x2, this.y2);\n ctx.stroke();\n ctx.restore();\n }\n\n _renderControls(ctx: CanvasRenderingContext2D, styleOverride: any = {}) {\n ctx.save();\n ctx.globalAlpha = this.isMoving ? this.borderOpacityWhenMoving : 1;\n this.drawControls(ctx, styleOverride);\n ctx.restore();\n }\n\n getBoundingRect() {\n if (this._useEndpointCoords) {\n const { x1, y1, x2, y2 } = this;\n const effectiveStrokeWidth =\n this.hitStrokeWidth === 'auto'\n ? this.strokeWidth\n : this.hitStrokeWidth;\n const padding = Math.max(effectiveStrokeWidth / 2 + 5, 10);\n return {\n left: Math.min(x1, x2) - padding,\n top: Math.min(y1, y2) - padding,\n width: Math.abs(x2 - x1) + padding * 2 || padding * 2,\n height: Math.abs(y2 - y1) + padding * 2 || padding * 2,\n };\n }\n return super.getBoundingRect();\n }\n\n setCoords() {\n if (this._useEndpointCoords) {\n const minX = Math.min(this.x1, this.x2);\n const maxX = Math.max(this.x1, this.x2);\n const minY = Math.min(this.y1, this.y2);\n const maxY = Math.max(this.y1, this.y2);\n const effectiveStrokeWidth =\n this.hitStrokeWidth === 'auto'\n ? this.strokeWidth\n : this.hitStrokeWidth;\n const hitPadding = Math.max(effectiveStrokeWidth / 2 + 5, 10);\n this.left = minX - hitPadding + (maxX - minX + hitPadding * 2) / 2;\n this.top = minY - hitPadding + (maxY - minY + hitPadding * 2) / 2;\n this.width = Math.abs(this.x2 - this.x1) + hitPadding * 2;\n this.height = Math.abs(this.y2 - this.y1) + hitPadding * 2;\n }\n super.setCoords();\n }\n\n getCoords(): [Point, Point, Point, Point] {\n if (this._useEndpointCoords) {\n const deltaX = this.x2 - this.x1;\n const deltaY = this.y2 - this.y1;\n const length = Math.sqrt(deltaX * deltaX + deltaY * deltaY);\n \n if (length === 0) {\n return super.getCoords() as [Point, Point, Point, Point];\n }\n \n const effectiveStrokeWidth = this.hitStrokeWidth === 'auto' \n ? this.strokeWidth \n : this.hitStrokeWidth;\n const halfWidth = Math.max(effectiveStrokeWidth / 2 + 2, 5);\n \n // Unit vector perpendicular to line\n const perpX = -deltaY / length;\n const perpY = deltaX / length;\n \n // Four corners of oriented rectangle\n return [\n new Point(this.x1 + perpX * halfWidth, this.y1 + perpY * halfWidth),\n new Point(this.x2 + perpX * halfWidth, this.y2 + perpY * halfWidth),\n new Point(this.x2 - perpX * halfWidth, this.y2 - perpY * halfWidth),\n new Point(this.x1 - perpX * halfWidth, this.y1 - perpY * halfWidth),\n ];\n }\n return super.getCoords() as [Point, Point, Point, Point];\n }\n\n containsPoint(point: Point): boolean {\n if (this._useEndpointCoords) {\n if (this.canvas?.getActiveObject() === this) {\n return super.containsPoint(point);\n }\n const distance = this._distanceToLineSegment(point.x, point.y);\n const effectiveStrokeWidth = this.hitStrokeWidth === 'auto' \n ? this.strokeWidth \n : this.hitStrokeWidth || 1;\n \n const tolerance = Math.max(effectiveStrokeWidth / 2 + 2, 5);\n return distance <= tolerance;\n }\n return super.containsPoint(point);\n }\n\n _distanceToLineSegment(px: number, py: number): number {\n const x1 = this.x1, y1 = this.y1, x2 = this.x2, y2 = this.y2;\n \n const pd2 = (x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2);\n if (pd2 === 0) {\n return Math.sqrt((px - x1) * (px - x1) + (py - y1) * (py - y1));\n }\n \n const u = ((px - x1) * (x2 - x1) + (py - y1) * (y2 - y1)) / pd2;\n \n let closestX: number, closestY: number;\n if (u < 0) {\n closestX = x1;\n closestY = y1;\n } else if (u > 1) {\n closestX = x2;\n closestY = y2;\n } else {\n closestX = x1 + u * (x2 - x1);\n closestY = y1 + u * (y2 - y1);\n }\n \n return Math.sqrt((px - closestX) * (px - closestX) + (py - closestY) * (py - closestY));\n }\n\n _endpointActionHandler(\n eventData: TPointerEvent,\n transformData: Transform,\n x: number,\n y: number\n ) {\n const controlKey = transformData.corner;\n const pointer = new Point(x, y);\n let newX = pointer.x;\n let newY = pointer.y;\n\n if (eventData.shiftKey) {\n const otherControl = controlKey === 'p1' ? 'p2' : 'p1';\n const otherX = this[otherControl === 'p1' ? 'x1' : 'x2'];\n const otherY = this[otherControl === 'p1' ? 'y1' : 'y2'];\n const snapped = this._snapToAngle(otherX, otherY, newX, newY);\n newX = snapped.x;\n newY = snapped.y;\n }\n\n if (this._useEndpointCoords) {\n if (controlKey === 'p1') {\n this.x1 = newX;\n this.y1 = newY;\n } else if (controlKey === 'p2') {\n this.x2 = newX;\n this.y2 = newY;\n }\n this.dirty = true;\n this.setCoords();\n this.canvas?.requestRenderAll();\n return true;\n }\n\n // Fallback for old system\n this._updatingEndpoints = true;\n if (controlKey === 'p1') {\n this.x1 = newX;\n this.y1 = newY;\n } else if (controlKey === 'p2') {\n this.x2 = newX;\n this.y2 = newY;\n }\n this._setWidthHeight();\n this.dirty = true;\n this._updatingEndpoints = false;\n this.canvas?.requestRenderAll();\n this.fire('modified', { transform: transformData, target: this, e: eventData });\n return true;\n }\n\n _snapToAngle(\n fromX: number,\n fromY: number,\n toX: number,\n toY: number\n ): { x: number; y: number } {\n const deltaX = toX - fromX;\n const deltaY = toY - fromY;\n const distance = Math.sqrt(deltaX * deltaX + deltaY * deltaY);\n if (distance === 0) return { x: toX, y: toY };\n let angle = Math.atan2(deltaY, deltaX) * (180 / Math.PI);\n const snapIncrement = 15;\n const snappedAngle = Math.round(angle / snapIncrement) * snapIncrement;\n const snappedRadians = snappedAngle * (Math.PI / 180);\n return {\n x: fromX + Math.cos(snappedRadians) * distance,\n y: fromY + Math.sin(snappedRadians) * distance,\n };\n }\n\n _setWidthHeight(skipReposition = false) {\n this.width = Math.abs(this.x2 - this.x1) || 1;\n this.height = Math.abs(this.y2 - this.y1) || 1;\n if (!skipReposition && !this._updatingEndpoints) {\n const { left, top, width, height } = makeBoundingBoxFromPoints([\n { x: this.x1, y: this.y1 },\n { x: this.x2, y: this.y2 },\n ]);\n this.setPositionByOrigin(\n new Point(left + width / 2, top + height / 2),\n CENTER,\n CENTER\n );\n }\n }\n\n _set(key: string, value: any) {\n const oldLeft = this.left;\n const oldTop = this.top;\n super._set(key, value);\n if (coordProps.includes(key as keyof UniqueLineCoords)) {\n this._setWidthHeight();\n this.dirty = true;\n }\n if ((key === 'left' || key === 'top') && this.canvas && !this._updatingEndpoints) {\n const deltaX = this.left - oldLeft;\n const deltaY = this.top - oldTop;\n if (deltaX !== 0 || deltaY !== 0) {\n this._updatingEndpoints = true;\n this.x1 += deltaX;\n this.y1 += deltaY;\n this.x2 += deltaX;\n this.y2 += deltaY;\n this._updatingEndpoints = false;\n }\n }\n return this;\n }\n\n render(ctx: CanvasRenderingContext2D) {\n if (this._useEndpointCoords) {\n this._renderDirectly(ctx);\n return;\n }\n super.render(ctx);\n }\n\n _renderDirectly(ctx: CanvasRenderingContext2D) {\n if (!this.visible) return;\n ctx.save();\n const vpt = this.canvas?.viewportTransform || [1, 0, 0, 1, 0, 0];\n ctx.transform(vpt[0], vpt[1], vpt[2], vpt[3], vpt[4], vpt[5]);\n ctx.globalAlpha = this.opacity;\n ctx.strokeStyle = this.stroke?.toString() || '#000';\n ctx.lineWidth = this.strokeWidth;\n ctx.lineCap = this.strokeLineCap || 'butt';\n ctx.beginPath();\n ctx.moveTo(this.x1, this.y1);\n ctx.lineTo(this.x2, this.y2);\n ctx.stroke();\n ctx.restore();\n }\n\n _render(ctx: CanvasRenderingContext2D) {\n if (this._useEndpointCoords) return;\n ctx.beginPath();\n const p = this.calcLinePoints();\n ctx.moveTo(p.x1, p.y1);\n ctx.lineTo(p.x2, p.y2);\n ctx.lineWidth = this.strokeWidth;\n const origStrokeStyle = ctx.strokeStyle;\n if (isFiller(this.stroke)) {\n ctx.strokeStyle = this.stroke.toLive(ctx)!;\n }\n this.stroke && this._renderStroke(ctx);\n ctx.strokeStyle = origStrokeStyle;\n }\n\n _findCenterFromElement(): Point {\n return new Point((this.x1 + this.x2) / 2, (this.y1 + this.y2) / 2);\n }\n\n toObject< \n T extends Omit<Props & TClassProperties<this>, keyof SProps>,\n K extends keyof T = never\n >(propertiesToInclude: K[] = []): Pick<T, K> & SProps {\n return {\n ...super.toObject(propertiesToInclude),\n ...this.calcLinePoints(),\n };\n }\n\n _getNonTransformedDimensions(): Point {\n const dim = super._getNonTransformedDimensions();\n if (this.strokeLineCap === 'round') {\n dim.x += this.strokeWidth;\n dim.y += this.strokeWidth;\n }\n return dim;\n }\n\n calcLinePoints(): UniqueLineCoords {\n if (this._updatingEndpoints) {\n const centerX = (this.x1 + this.x2) / 2;\n const centerY = (this.y1 + this.y2) / 2;\n return {\n x1: this.x1 - centerX,\n y1: this.y1 - centerY,\n x2: this.x2 - centerX,\n y2: this.y2 - centerY,\n };\n }\n const { x1: _x1, x2: _x2, y1: _y1, y2: _y2, width, height } = this;\n const xMult = _x1 <= _x2 ? -1 : 1;\n const yMult = _y1 <= _y2 ? -1 : 1;\n return {\n x1: (xMult * width) / 2,\n y1: (yMult * height) / 2,\n x2: (xMult * -width) / 2,\n y2: (yMult * -height) / 2,\n };\n }\n\n _toSVG() {\n const { x1, x2, y1, y2 } = this.calcLinePoints();\n return [\n '<line ',\n 'COMMON_PARTS',\n `x1=\"${x1}\" y1=\"${y1}\" x2=\"${x2}\" y2=\"${y2}\" />\\n`,\n ];\n }\n\n static ATTRIBUTE_NAMES = SHARED_ATTRIBUTES.concat(coordProps);\n\n static async fromElement(\n element: HTMLElement,\n options?: Abortable,\n cssRules?: CSSRules\n ) {\n const {\n x1 = 0,\n y1 = 0,\n x2 = 0,\n y2 = 0,\n ...parsedAttributes\n } = parseAttributes(element, this.ATTRIBUTE_NAMES, cssRules);\n return new this([x1, y1, x2, y2], parsedAttributes);\n }\n\n static fromObject<T extends TOptions<SerializedLineProps>>({ \n x1,\n y1,\n x2,\n y2,\n ...object\n }: T) {\n return this._fromObject<Line>(\n { ...object, points: [x1, y1, x2, y2] },\n { extraParam: 'points' }\n );\n }\n}\n\nclassRegistry.setClass(Line);\nclassRegistry.setSVGClass(Line);"],"names":["coordProps","Line","FabricObject","constructor","x1","y1","x2","y2","arguments","length","undefined","options","super","_defineProperty","this","setOptions","hitStrokeWidth","hasBorders","hasControls","selectable","hoverCursor","perPixelTargetFind","strokeLineCap","_setWidthHeight","left","top","set","LEFT","TOP","_setupLineControls","controls","p1","Control","x","y","cursorStyle","actionHandler","_endpointActionHandler","bind","positionHandler","_p1PositionHandler","render","_renderEndpointControl","sizeX","sizeY","p2","_p2PositionHandler","_this$canvas","vpt","canvas","viewportTransform","Point","transform","_this$canvas2","ctx","save","fillStyle","strokeStyle","lineWidth","beginPath","arc","size","Math","PI","fill","stroke","restore","drawBorders","styleOverride","_useEndpointCoords","_drawLineBorders","_this$canvas3","setTransform","borderColor","strokeWidth","lineCap","globalAlpha","isMoving","borderOpacityWhenMoving","moveTo","lineTo","_renderControls","drawControls","getBoundingRect","effectiveStrokeWidth","padding","max","min","width","abs","height","setCoords","minX","maxX","minY","maxY","hitPadding","getCoords","deltaX","deltaY","sqrt","halfWidth","perpX","perpY","containsPoint","point","_this$canvas4","getActiveObject","distance","_distanceToLineSegment","px","py","pd2","u","closestX","closestY","eventData","transformData","_this$canvas6","controlKey","corner","pointer","newX","newY","shiftKey","otherControl","otherX","otherY","snapped","_snapToAngle","_this$canvas5","dirty","requestRenderAll","_updatingEndpoints","fire","target","e","fromX","fromY","toX","toY","angle","atan2","snappedRadians","round","cos","sin","skipReposition","makeBoundingBoxFromPoints","setPositionByOrigin","CENTER","_set","key","value","oldLeft","oldTop","includes","_renderDirectly","_this$canvas7","_this$stroke","visible","opacity","toString","_render","p","calcLinePoints","origStrokeStyle","isFiller","toLive","_renderStroke","_findCenterFromElement","toObject","propertiesToInclude","_getNonTransformedDimensions","dim","centerX","centerY","_x1","_x2","_y1","_y2","xMult","yMult","_toSVG","fromElement","element","cssRules","parsedAttributes","parseAttributes","ATTRIBUTE_NAMES","fromObject","_ref","object","_fromObject","points","extraParam","cacheProperties","SHARED_ATTRIBUTES","concat","classRegistry","setClass","setSVGClass"],"mappings":"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"}
1
+ {"version":3,"file":"Line.min.mjs","sources":["../../../src/shapes/Line.ts"],"sourcesContent":["import { SHARED_ATTRIBUTES } from '../parser/attributes';\nimport { parseAttributes } from '../parser/parseAttributes';\nimport type { Abortable, TClassProperties, TOptions } from '../typedefs';\nimport { classRegistry } from '../ClassRegistry';\nimport { FabricObject, cacheProperties } from './Object/FabricObject';\nimport { Point } from '../Point';\nimport { isFiller } from '../util/typeAssertions';\nimport type { FabricObjectProps, SerializedObjectProps } from './Object/types';\nimport type { ObjectEvents } from '../EventTypeDefs';\nimport { makeBoundingBoxFromPoints } from '../util';\nimport { CENTER, LEFT, TOP } from '../constants';\nimport type { CSSRules } from '../parser/typedefs';\nimport { Control } from '../controls/Control';\nimport type { TPointerEvent, Transform } from '../EventTypeDefs';\n\nconst coordProps = ['x1', 'x2', 'y1', 'y2'] as const;\n\ninterface UniqueLineCoords {\n x1: number;\n x2: number;\n y1: number;\n y2: number;\n}\n\nexport interface SerializedLineProps\n extends SerializedObjectProps,\n UniqueLineCoords {}\n\nexport class Line< \n Props extends TOptions<FabricObjectProps> = Partial<FabricObjectProps>,\n SProps extends SerializedLineProps = SerializedLineProps,\n EventSpec extends ObjectEvents = ObjectEvents\n >\n extends FabricObject<Props, SProps, EventSpec>\n implements UniqueLineCoords\n{\n declare x1: number;\n declare y1: number;\n declare x2: number;\n declare y2: number;\n\n hitStrokeWidth: number | 'auto' = 'auto';\n\n private _updatingEndpoints = false;\n private _useEndpointCoords = true;\n\n static type = 'Line';\n static cacheProperties = [...cacheProperties, ...coordProps];\n\n constructor([x1, y1, x2, y2] = [0, 0, 100, 0], options: Partial<Props & {hitStrokeWidth?: number | 'auto'}> = {}) {\n super();\n this.setOptions(options);\n this.x1 = x1;\n this.x2 = x2;\n this.y1 = y1;\n this.y2 = y2;\n\n if (options.hitStrokeWidth !== undefined) {\n this.hitStrokeWidth = options.hitStrokeWidth;\n }\n\n this.hasBorders = false;\n this.hasControls = true;\n this.selectable = true;\n this.hoverCursor = 'move';\n this.perPixelTargetFind = false;\n this.strokeLineCap = 'butt';\n\n this._setWidthHeight();\n const { left, top } = options;\n typeof left === 'number' && this.set(LEFT, left);\n typeof top === 'number' && this.set(TOP, top);\n this._setupLineControls();\n }\n\n _setupLineControls() {\n this.controls = {\n p1: new Control({\n x: 0,\n y: 0,\n cursorStyle: 'move',\n actionHandler: this._endpointActionHandler.bind(this),\n positionHandler: this._p1PositionHandler.bind(this),\n render: this._renderEndpointControl.bind(this),\n sizeX: 12,\n sizeY: 12,\n }),\n p2: new Control({\n x: 0,\n y: 0,\n cursorStyle: 'move',\n actionHandler: this._endpointActionHandler.bind(this),\n positionHandler: this._p2PositionHandler.bind(this),\n render: this._renderEndpointControl.bind(this),\n sizeX: 12,\n sizeY: 12,\n }),\n };\n }\n\n _p1PositionHandler() {\n const vpt = this.canvas?.viewportTransform || [1, 0, 0, 1, 0, 0];\n return new Point(this.x1, this.y1).transform(vpt);\n }\n\n _p2PositionHandler() {\n const vpt = this.canvas?.viewportTransform || [1, 0, 0, 1, 0, 0];\n return new Point(this.x2, this.y2).transform(vpt);\n }\n\n _renderEndpointControl(\n ctx: CanvasRenderingContext2D,\n left: number,\n top: number\n ) {\n const size = 12;\n ctx.save();\n ctx.fillStyle = '#007bff';\n ctx.strokeStyle = '#ffffff';\n ctx.lineWidth = 2;\n ctx.beginPath();\n ctx.arc(left, top, size / 2, 0, 2 * Math.PI);\n ctx.fill();\n ctx.stroke();\n ctx.restore();\n }\n\n drawBorders(ctx: CanvasRenderingContext2D, styleOverride: any = {}) {\n if (this._useEndpointCoords) {\n this._drawLineBorders(ctx, styleOverride);\n return this;\n }\n return super.drawBorders(ctx, styleOverride, {});\n }\n\n _drawLineBorders(ctx: CanvasRenderingContext2D, styleOverride: any = {}) {\n const vpt = this.canvas?.viewportTransform || [1, 0, 0, 1, 0, 0];\n ctx.save();\n ctx.setTransform(vpt[0], vpt[1], vpt[2], vpt[3], vpt[4], vpt[5]);\n ctx.strokeStyle =\n styleOverride.borderColor || this.borderColor || 'rgba(100, 200, 200, 0.5)';\n ctx.lineWidth = (this.strokeWidth || 1) + 5;\n ctx.lineCap = this.strokeLineCap || 'butt';\n ctx.globalAlpha = this.isMoving ? this.borderOpacityWhenMoving : 1;\n ctx.beginPath();\n ctx.moveTo(this.x1, this.y1);\n ctx.lineTo(this.x2, this.y2);\n ctx.stroke();\n ctx.restore();\n }\n\n _renderControls(ctx: CanvasRenderingContext2D, styleOverride: any = {}) {\n ctx.save();\n ctx.globalAlpha = this.isMoving ? this.borderOpacityWhenMoving : 1;\n this.drawControls(ctx, styleOverride);\n ctx.restore();\n }\n\n getBoundingRect() {\n if (this._useEndpointCoords) {\n const { x1, y1, x2, y2 } = this;\n const effectiveStrokeWidth =\n this.hitStrokeWidth === 'auto'\n ? this.strokeWidth\n : this.hitStrokeWidth;\n const padding = Math.max(effectiveStrokeWidth / 2 + 5, 10);\n return {\n left: Math.min(x1, x2) - padding,\n top: Math.min(y1, y2) - padding,\n width: Math.abs(x2 - x1) + padding * 2 || padding * 2,\n height: Math.abs(y2 - y1) + padding * 2 || padding * 2,\n };\n }\n return super.getBoundingRect();\n }\n\n setCoords() {\n if (this._useEndpointCoords) {\n // Set the object's center to the geometric center of the line\n const center = this._findCenterFromElement();\n this.left = center.x;\n this.top = center.y;\n \n // Set width and height for hit detection and bounding box\n const effectiveStrokeWidth =\n this.hitStrokeWidth === 'auto'\n ? this.strokeWidth\n : this.hitStrokeWidth;\n const hitPadding = Math.max(effectiveStrokeWidth / 2 + 5, 10);\n this.width = Math.abs(this.x2 - this.x1) + hitPadding * 2;\n this.height = Math.abs(this.y2 - this.y1) + hitPadding * 2;\n }\n super.setCoords();\n }\n\n getCoords(): [Point, Point, Point, Point] {\n if (this._useEndpointCoords) {\n const deltaX = this.x2 - this.x1;\n const deltaY = this.y2 - this.y1;\n const length = Math.sqrt(deltaX * deltaX + deltaY * deltaY);\n \n if (length === 0) {\n return super.getCoords() as [Point, Point, Point, Point];\n }\n \n const effectiveStrokeWidth = this.hitStrokeWidth === 'auto' \n ? this.strokeWidth \n : this.hitStrokeWidth;\n const halfWidth = Math.max(effectiveStrokeWidth / 2 + 2, 5);\n \n // Unit vector perpendicular to line\n const perpX = -deltaY / length;\n const perpY = deltaX / length;\n \n // Four corners of oriented rectangle\n return [\n new Point(this.x1 + perpX * halfWidth, this.y1 + perpY * halfWidth),\n new Point(this.x2 + perpX * halfWidth, this.y2 + perpY * halfWidth),\n new Point(this.x2 - perpX * halfWidth, this.y2 - perpY * halfWidth),\n new Point(this.x1 - perpX * halfWidth, this.y1 - perpY * halfWidth),\n ];\n }\n return super.getCoords() as [Point, Point, Point, Point];\n }\n\n containsPoint(point: Point): boolean {\n if (this._useEndpointCoords) {\n if (this.canvas?.getActiveObject() === this) {\n return super.containsPoint(point);\n }\n const distance = this._distanceToLineSegment(point.x, point.y);\n const effectiveStrokeWidth = this.hitStrokeWidth === 'auto' \n ? this.strokeWidth \n : this.hitStrokeWidth || 1;\n \n const tolerance = Math.max(effectiveStrokeWidth / 2 + 2, 5);\n return distance <= tolerance;\n }\n return super.containsPoint(point);\n }\n\n _distanceToLineSegment(px: number, py: number): number {\n const x1 = this.x1, y1 = this.y1, x2 = this.x2, y2 = this.y2;\n \n const pd2 = (x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2);\n if (pd2 === 0) {\n return Math.sqrt((px - x1) * (px - x1) + (py - y1) * (py - y1));\n }\n \n const u = ((px - x1) * (x2 - x1) + (py - y1) * (y2 - y1)) / pd2;\n \n let closestX: number, closestY: number;\n if (u < 0) {\n closestX = x1;\n closestY = y1;\n } else if (u > 1) {\n closestX = x2;\n closestY = y2;\n } else {\n closestX = x1 + u * (x2 - x1);\n closestY = y1 + u * (y2 - y1);\n }\n \n return Math.sqrt((px - closestX) * (px - closestX) + (py - closestY) * (py - closestY));\n }\n\n _endpointActionHandler(\n eventData: TPointerEvent,\n transformData: Transform,\n x: number,\n y: number\n ) {\n const controlKey = transformData.corner;\n const pointer = new Point(x, y);\n let newX = pointer.x;\n let newY = pointer.y;\n\n if (eventData.shiftKey) {\n const otherControl = controlKey === 'p1' ? 'p2' : 'p1';\n const otherX = this[otherControl === 'p1' ? 'x1' : 'x2'];\n const otherY = this[otherControl === 'p1' ? 'y1' : 'y2'];\n const snapped = this._snapToAngle(otherX, otherY, newX, newY);\n newX = snapped.x;\n newY = snapped.y;\n }\n\n if (this._useEndpointCoords) {\n if (controlKey === 'p1') {\n this.x1 = newX;\n this.y1 = newY;\n } else if (controlKey === 'p2') {\n this.x2 = newX;\n this.y2 = newY;\n }\n this.dirty = true;\n this.setCoords();\n this.canvas?.requestRenderAll();\n return true;\n }\n\n // Fallback for old system\n this._updatingEndpoints = true;\n if (controlKey === 'p1') {\n this.x1 = newX;\n this.y1 = newY;\n } else if (controlKey === 'p2') {\n this.x2 = newX;\n this.y2 = newY;\n }\n this._setWidthHeight();\n this.dirty = true;\n this._updatingEndpoints = false;\n this.canvas?.requestRenderAll();\n this.fire('modified', { transform: transformData, target: this, e: eventData });\n return true;\n }\n\n _snapToAngle(\n fromX: number,\n fromY: number,\n toX: number,\n toY: number\n ): { x: number; y: number } {\n const deltaX = toX - fromX;\n const deltaY = toY - fromY;\n const distance = Math.sqrt(deltaX * deltaX + deltaY * deltaY);\n if (distance === 0) return { x: toX, y: toY };\n let angle = Math.atan2(deltaY, deltaX) * (180 / Math.PI);\n const snapIncrement = 15;\n const snappedAngle = Math.round(angle / snapIncrement) * snapIncrement;\n const snappedRadians = snappedAngle * (Math.PI / 180);\n return {\n x: fromX + Math.cos(snappedRadians) * distance,\n y: fromY + Math.sin(snappedRadians) * distance,\n };\n }\n\n _setWidthHeight(skipReposition = false) {\n this.width = Math.abs(this.x2 - this.x1) || 1;\n this.height = Math.abs(this.y2 - this.y1) || 1;\n if (!skipReposition && !this._updatingEndpoints) {\n const { left, top, width, height } = makeBoundingBoxFromPoints([\n { x: this.x1, y: this.y1 },\n { x: this.x2, y: this.y2 },\n ]);\n this.setPositionByOrigin(\n new Point(left + width / 2, top + height / 2),\n CENTER,\n CENTER\n );\n }\n }\n\n _set(key: string, value: any) {\n const oldLeft = this.left;\n const oldTop = this.top;\n super._set(key, value);\n if (coordProps.includes(key as keyof UniqueLineCoords)) {\n this._setWidthHeight();\n this.dirty = true;\n }\n if ((key === 'left' || key === 'top') && this.canvas && !this._updatingEndpoints) {\n const deltaX = this.left - oldLeft;\n const deltaY = this.top - oldTop;\n if (deltaX !== 0 || deltaY !== 0) {\n this._updatingEndpoints = true;\n this.x1 += deltaX;\n this.y1 += deltaY;\n this.x2 += deltaX;\n this.y2 += deltaY;\n this._updatingEndpoints = false;\n }\n }\n return this;\n }\n\n render(ctx: CanvasRenderingContext2D) {\n if (this._useEndpointCoords) {\n this._renderDirectly(ctx);\n return;\n }\n super.render(ctx);\n }\n\n _renderDirectly(ctx: CanvasRenderingContext2D) {\n if (!this.visible) return;\n ctx.save();\n const vpt = this.canvas?.viewportTransform || [1, 0, 0, 1, 0, 0];\n ctx.transform(vpt[0], vpt[1], vpt[2], vpt[3], vpt[4], vpt[5]);\n ctx.globalAlpha = this.opacity;\n ctx.strokeStyle = this.stroke?.toString() || '#000';\n ctx.lineWidth = this.strokeWidth;\n ctx.lineCap = this.strokeLineCap || 'butt';\n ctx.beginPath();\n ctx.moveTo(this.x1, this.y1);\n ctx.lineTo(this.x2, this.y2);\n ctx.stroke();\n ctx.restore();\n }\n\n _render(ctx: CanvasRenderingContext2D) {\n if (this._useEndpointCoords) return;\n ctx.beginPath();\n const p = this.calcLinePoints();\n ctx.moveTo(p.x1, p.y1);\n ctx.lineTo(p.x2, p.y2);\n ctx.lineWidth = this.strokeWidth;\n const origStrokeStyle = ctx.strokeStyle;\n if (isFiller(this.stroke)) {\n ctx.strokeStyle = this.stroke.toLive(ctx)!;\n }\n this.stroke && this._renderStroke(ctx);\n ctx.strokeStyle = origStrokeStyle;\n }\n\n _findCenterFromElement(): Point {\n return new Point((this.x1 + this.x2) / 2, (this.y1 + this.y2) / 2);\n }\n\n toObject< \n T extends Omit<Props & TClassProperties<this>, keyof SProps>,\n K extends keyof T = never\n >(propertiesToInclude: K[] = []): Pick<T, K> & SProps {\n return {\n ...super.toObject(propertiesToInclude),\n ...this.calcLinePoints(),\n };\n }\n\n _getNonTransformedDimensions(): Point {\n const dim = super._getNonTransformedDimensions();\n if (this.strokeLineCap === 'round') {\n dim.x += this.strokeWidth;\n dim.y += this.strokeWidth;\n }\n return dim;\n }\n\n calcLinePoints(): UniqueLineCoords {\n if (this._updatingEndpoints) {\n const centerX = (this.x1 + this.x2) / 2;\n const centerY = (this.y1 + this.y2) / 2;\n return {\n x1: this.x1 - centerX,\n y1: this.y1 - centerY,\n x2: this.x2 - centerX,\n y2: this.y2 - centerY,\n };\n }\n const { x1: _x1, x2: _x2, y1: _y1, y2: _y2, width, height } = this;\n const xMult = _x1 <= _x2 ? -1 : 1;\n const yMult = _y1 <= _y2 ? -1 : 1;\n return {\n x1: (xMult * width) / 2,\n y1: (yMult * height) / 2,\n x2: (xMult * -width) / 2,\n y2: (yMult * -height) / 2,\n };\n }\n\n _toSVG() {\n if (this._useEndpointCoords) {\n // Use absolute coordinates to bypass all Fabric.js transforms\n return [\n `<line stroke=\"${this.stroke}\" stroke-width=\"${this.strokeWidth}\" stroke-linecap=\"${this.strokeLineCap}\" `,\n `x1=\"${this.x1}\" y1=\"${this.y1}\" x2=\"${this.x2}\" y2=\"${this.y2}\" />\\n`,\n ];\n } else {\n // Use standard calcLinePoints for legacy mode\n const { x1, x2, y1, y2 } = this.calcLinePoints();\n return [\n '<line ',\n 'COMMON_PARTS',\n `x1=\"${x1}\" y1=\"${y1}\" x2=\"${x2}\" y2=\"${y2}\" />\\n`,\n ];\n }\n }\n\n toSVG(reviver?: (markup: string) => string): string {\n if (this._useEndpointCoords) {\n // Override toSVG to prevent Fabric.js from adding transform wrapper\n const markup = this._toSVG().join('');\n return reviver ? reviver(markup) : markup;\n }\n // Use default behavior for legacy mode\n return super.toSVG(reviver);\n }\n\n static ATTRIBUTE_NAMES = SHARED_ATTRIBUTES.concat(coordProps);\n\n static async fromElement(\n element: HTMLElement,\n options?: Abortable,\n cssRules?: CSSRules\n ) {\n const {\n x1 = 0,\n y1 = 0,\n x2 = 0,\n y2 = 0,\n ...parsedAttributes\n } = parseAttributes(element, this.ATTRIBUTE_NAMES, cssRules);\n return new this([x1, y1, x2, y2], parsedAttributes);\n }\n\n static fromObject<T extends TOptions<SerializedLineProps>>({ \n x1,\n y1,\n x2,\n y2,\n ...object\n }: T) {\n return this._fromObject<Line>(\n { ...object, points: [x1, y1, x2, y2] },\n { extraParam: 'points' }\n );\n }\n}\n\nclassRegistry.setClass(Line);\nclassRegistry.setSVGClass(Line);"],"names":["coordProps","Line","FabricObject","constructor","x1","y1","x2","y2","arguments","length","undefined","options","super","_defineProperty","this","setOptions","hitStrokeWidth","hasBorders","hasControls","selectable","hoverCursor","perPixelTargetFind","strokeLineCap","_setWidthHeight","left","top","set","LEFT","TOP","_setupLineControls","controls","p1","Control","x","y","cursorStyle","actionHandler","_endpointActionHandler","bind","positionHandler","_p1PositionHandler","render","_renderEndpointControl","sizeX","sizeY","p2","_p2PositionHandler","_this$canvas","vpt","canvas","viewportTransform","Point","transform","_this$canvas2","ctx","save","fillStyle","strokeStyle","lineWidth","beginPath","arc","size","Math","PI","fill","stroke","restore","drawBorders","styleOverride","_useEndpointCoords","_drawLineBorders","_this$canvas3","setTransform","borderColor","strokeWidth","lineCap","globalAlpha","isMoving","borderOpacityWhenMoving","moveTo","lineTo","_renderControls","drawControls","getBoundingRect","effectiveStrokeWidth","padding","max","min","width","abs","height","setCoords","center","_findCenterFromElement","hitPadding","getCoords","deltaX","deltaY","sqrt","halfWidth","perpX","perpY","containsPoint","point","_this$canvas4","getActiveObject","distance","_distanceToLineSegment","px","py","pd2","u","closestX","closestY","eventData","transformData","_this$canvas6","controlKey","corner","pointer","newX","newY","shiftKey","otherControl","otherX","otherY","snapped","_snapToAngle","_this$canvas5","dirty","requestRenderAll","_updatingEndpoints","fire","target","e","fromX","fromY","toX","toY","angle","atan2","snappedRadians","round","cos","sin","skipReposition","makeBoundingBoxFromPoints","setPositionByOrigin","CENTER","_set","key","value","oldLeft","oldTop","includes","_renderDirectly","_this$canvas7","_this$stroke","visible","opacity","toString","_render","p","calcLinePoints","origStrokeStyle","isFiller","toLive","_renderStroke","toObject","propertiesToInclude","_getNonTransformedDimensions","dim","centerX","centerY","_x1","_x2","_y1","_y2","xMult","yMult","_toSVG","toSVG","reviver","markup","join","fromElement","element","cssRules","parsedAttributes","parseAttributes","ATTRIBUTE_NAMES","fromObject","_ref","object","_fromObject","points","extraParam","cacheProperties","SHARED_ATTRIBUTES","concat","classRegistry","setClass","setSVGClass"],"mappings":"48BAeA,MAAMA,EAAa,CAAC,KAAM,KAAM,KAAM,MAa/B,MAAMC,UAKHC,EAgBRC,WAAAA,GAAkH,IAArGC,EAAIC,EAAIC,EAAIC,GAAGC,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAC,EAAG,EAAG,IAAK,GAAIG,EAA4DH,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAA,EAC5GI,QAAQC,wBATwB,QAAMA,6BAEX,GAAKA,6BACL,GAO3BC,KAAKC,WAAWJ,GAChBG,KAAKV,GAAKA,EACVU,KAAKR,GAAKA,EACVQ,KAAKT,GAAKA,EACVS,KAAKP,GAAKA,OAEqBG,IAA3BC,EAAQK,iBACVF,KAAKE,eAAiBL,EAAQK,gBAGhCF,KAAKG,YAAa,EAClBH,KAAKI,aAAc,EACnBJ,KAAKK,YAAa,EAClBL,KAAKM,YAAc,OACnBN,KAAKO,oBAAqB,EAC1BP,KAAKQ,cAAgB,OAErBR,KAAKS,kBACL,MAAMC,KAAEA,EAAIC,IAAEA,GAAQd,EACN,iBAATa,GAAqBV,KAAKY,IAAIC,EAAMH,GAC5B,iBAARC,GAAoBX,KAAKY,IAAIE,EAAKH,GACzCX,KAAKe,oBACP,CAEAA,kBAAAA,GACEf,KAAKgB,SAAW,CACdC,GAAI,IAAIC,EAAQ,CACdC,EAAG,EACHC,EAAG,EACHC,YAAa,OACbC,cAAetB,KAAKuB,uBAAuBC,KAAKxB,MAChDyB,gBAAiBzB,KAAK0B,mBAAmBF,KAAKxB,MAC9C2B,OAAQ3B,KAAK4B,uBAAuBJ,KAAKxB,MACzC6B,MAAO,GACPC,MAAO,KAETC,GAAI,IAAIb,EAAQ,CACdC,EAAG,EACHC,EAAG,EACHC,YAAa,OACbC,cAAetB,KAAKuB,uBAAuBC,KAAKxB,MAChDyB,gBAAiBzB,KAAKgC,mBAAmBR,KAAKxB,MAC9C2B,OAAQ3B,KAAK4B,uBAAuBJ,KAAKxB,MACzC6B,MAAO,GACPC,MAAO,KAGb,CAEAJ,kBAAAA,GAAqB,IAAAO,EACnB,MAAMC,GAAiB,QAAXD,EAAAjC,KAAKmC,cAAM,IAAAF,OAAA,EAAXA,EAAaG,oBAAqB,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,GAC9D,OAAO,IAAIC,EAAMrC,KAAKV,GAAIU,KAAKT,IAAI+C,UAAUJ,EAC/C,CAEAF,kBAAAA,GAAqB,IAAAO,EACnB,MAAML,GAAiB,QAAXK,EAAAvC,KAAKmC,cAAM,IAAAI,OAAA,EAAXA,EAAaH,oBAAqB,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,GAC9D,OAAO,IAAIC,EAAMrC,KAAKR,GAAIQ,KAAKP,IAAI6C,UAAUJ,EAC/C,CAEAN,sBAAAA,CACEY,EACA9B,EACAC,GAGA6B,EAAIC,OACJD,EAAIE,UAAY,UAChBF,EAAIG,YAAc,UAClBH,EAAII,UAAY,EAChBJ,EAAIK,YACJL,EAAIM,IAAIpC,EAAMC,EAAKoC,EAAU,EAAG,EAAIC,KAAKC,IACzCT,EAAIU,OACJV,EAAIW,SACJX,EAAIY,SACN,CAEAC,WAAAA,CAAYb,GAAwD,IAAzBc,EAAkB5D,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAA,EAC9D,OAAIM,KAAKuD,oBACPvD,KAAKwD,iBAAiBhB,EAAKc,GACpBtD,MAEFF,MAAMuD,YAAYb,EAAKc,EAAe,CAAA,EAC/C,CAEAE,gBAAAA,CAAiBhB,GAAwD,IAAAiB,EAAA,IAAzBH,EAAkB5D,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAA,EACnE,MAAMwC,GAAiB,QAAXuB,EAAAzD,KAAKmC,cAAM,IAAAsB,OAAA,EAAXA,EAAarB,oBAAqB,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,GAC9DI,EAAIC,OACJD,EAAIkB,aAAaxB,EAAI,GAAIA,EAAI,GAAIA,EAAI,GAAIA,EAAI,GAAIA,EAAI,GAAIA,EAAI,IAC7DM,EAAIG,YACFW,EAAcK,aAAe3D,KAAK2D,aAAe,2BACnDnB,EAAII,WAAa5C,KAAK4D,aAAe,GAAK,EAC1CpB,EAAIqB,QAAU7D,KAAKQ,eAAiB,OACpCgC,EAAIsB,YAAc9D,KAAK+D,SAAW/D,KAAKgE,wBAA0B,EACjExB,EAAIK,YACJL,EAAIyB,OAAOjE,KAAKV,GAAIU,KAAKT,IACzBiD,EAAI0B,OAAOlE,KAAKR,GAAIQ,KAAKP,IACzB+C,EAAIW,SACJX,EAAIY,SACN,CAEAe,eAAAA,CAAgB3B,GAAwD,IAAzBc,EAAkB5D,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAA,EAClE8C,EAAIC,OACJD,EAAIsB,YAAc9D,KAAK+D,SAAW/D,KAAKgE,wBAA0B,EACjEhE,KAAKoE,aAAa5B,EAAKc,GACvBd,EAAIY,SACN,CAEAiB,eAAAA,GACE,GAAIrE,KAAKuD,mBAAoB,CAC3B,MAAMjE,GAAEA,EAAEC,GAAEA,EAAEC,GAAEA,EAAEC,GAAEA,GAAOO,KACrBsE,EACoB,SAAxBtE,KAAKE,eACDF,KAAK4D,YACL5D,KAAKE,eACLqE,EAAUvB,KAAKwB,IAAIF,EAAuB,EAAI,EAAG,IACvD,MAAO,CACL5D,KAAMsC,KAAKyB,IAAInF,EAAIE,GAAM+E,EACzB5D,IAAKqC,KAAKyB,IAAIlF,EAAIE,GAAM8E,EACxBG,MAAO1B,KAAK2B,IAAInF,EAAKF,GAAgB,EAAViF,GAAyB,EAAVA,EAC1CK,OAAQ5B,KAAK2B,IAAIlF,EAAKF,GAAgB,EAAVgF,GAAyB,EAAVA,EAE/C,CACA,OAAOzE,MAAMuE,iBACf,CAEAQ,SAAAA,GACE,GAAI7E,KAAKuD,mBAAoB,CAE3B,MAAMuB,EAAS9E,KAAK+E,yBACpB/E,KAAKU,KAAOoE,EAAO3D,EACnBnB,KAAKW,IAAMmE,EAAO1D,EAGlB,MAAMkD,EACoB,SAAxBtE,KAAKE,eACDF,KAAK4D,YACL5D,KAAKE,eACL8E,EAAahC,KAAKwB,IAAIF,EAAuB,EAAI,EAAG,IAC1DtE,KAAK0E,MAAQ1B,KAAK2B,IAAI3E,KAAKR,GAAKQ,KAAKV,IAAmB,EAAb0F,EAC3ChF,KAAK4E,OAAS5B,KAAK2B,IAAI3E,KAAKP,GAAKO,KAAKT,IAAmB,EAAbyF,CAC9C,CACAlF,MAAM+E,WACR,CAEAI,SAAAA,GACE,GAAIjF,KAAKuD,mBAAoB,CAC3B,MAAM2B,EAASlF,KAAKR,GAAKQ,KAAKV,GACxB6F,EAASnF,KAAKP,GAAKO,KAAKT,GACxBI,EAASqD,KAAKoC,KAAKF,EAASA,EAASC,EAASA,GAEpD,GAAe,IAAXxF,EACF,OAAOG,MAAMmF,YAGf,MAAMX,EAA+C,SAAxBtE,KAAKE,eAC9BF,KAAK4D,YACL5D,KAAKE,eACHmF,EAAYrC,KAAKwB,IAAIF,EAAuB,EAAI,EAAG,GAGnDgB,GAASH,EAASxF,EAClB4F,EAAQL,EAASvF,EAGvB,MAAO,CACL,IAAI0C,EAAMrC,KAAKV,GAAKgG,EAAQD,EAAWrF,KAAKT,GAAKgG,EAAQF,GACzD,IAAIhD,EAAMrC,KAAKR,GAAK8F,EAAQD,EAAWrF,KAAKP,GAAK8F,EAAQF,GACzD,IAAIhD,EAAMrC,KAAKR,GAAK8F,EAAQD,EAAWrF,KAAKP,GAAK8F,EAAQF,GACzD,IAAIhD,EAAMrC,KAAKV,GAAKgG,EAAQD,EAAWrF,KAAKT,GAAKgG,EAAQF,GAE7D,CACA,OAAOvF,MAAMmF,WACf,CAEAO,aAAAA,CAAcC,GACZ,GAAIzF,KAAKuD,mBAAoB,CAAA,IAAAmC,EAC3B,IAAe,QAAXA,EAAA1F,KAAKmC,cAAM,IAAAuD,OAAA,EAAXA,EAAaC,qBAAsB3F,KACrC,OAAOF,MAAM0F,cAAcC,GAE7B,MAAMG,EAAW5F,KAAK6F,uBAAuBJ,EAAMtE,EAAGsE,EAAMrE,GACtDkD,EAA+C,SAAxBtE,KAAKE,eAC9BF,KAAK4D,YACL5D,KAAKE,gBAAkB,EAG3B,OAAO0F,GADW5C,KAAKwB,IAAIF,EAAuB,EAAI,EAAG,EAE3D,CACA,OAAOxE,MAAM0F,cAAcC,EAC7B,CAEAI,sBAAAA,CAAuBC,EAAYC,GACjC,MAAMzG,EAAKU,KAAKV,GAAIC,EAAKS,KAAKT,GAAIC,EAAKQ,KAAKR,GAAIC,EAAKO,KAAKP,GAEpDuG,GAAO1G,EAAKE,IAAOF,EAAKE,IAAOD,EAAKE,IAAOF,EAAKE,GACtD,GAAY,IAARuG,EACF,OAAOhD,KAAKoC,MAAMU,EAAKxG,IAAOwG,EAAKxG,IAAOyG,EAAKxG,IAAOwG,EAAKxG,IAG7D,MAAM0G,IAAMH,EAAKxG,IAAOE,EAAKF,IAAOyG,EAAKxG,IAAOE,EAAKF,IAAOyG,EAE5D,IAAIE,EAAkBC,EAYtB,OAXIF,EAAI,GACNC,EAAW5G,EACX6G,EAAW5G,GACF0G,EAAI,GACbC,EAAW1G,EACX2G,EAAW1G,IAEXyG,EAAW5G,EAAK2G,GAAKzG,EAAKF,GAC1B6G,EAAW5G,EAAK0G,GAAKxG,EAAKF,IAGrByD,KAAKoC,MAAMU,EAAKI,IAAaJ,EAAKI,IAAaH,EAAKI,IAAaJ,EAAKI,GAC/E,CAEA5E,sBAAAA,CACE6E,EACAC,EACAlF,EACAC,GACA,IAAAkF,EACA,MAAMC,EAAaF,EAAcG,OAC3BC,EAAU,IAAIpE,EAAMlB,EAAGC,GAC7B,IAAIsF,EAAOD,EAAQtF,EACfwF,EAAOF,EAAQrF,EAEnB,GAAIgF,EAAUQ,SAAU,CACtB,MAAMC,EAA8B,OAAfN,EAAsB,KAAO,KAC5CO,EAAS9G,KAAsB,OAAjB6G,EAAwB,KAAO,MAC7CE,EAAS/G,KAAsB,OAAjB6G,EAAwB,KAAO,MAC7CG,EAAUhH,KAAKiH,aAAaH,EAAQC,EAAQL,EAAMC,GACxDD,EAAOM,EAAQ7F,EACfwF,EAAOK,EAAQ5F,CACjB,CAE6B,IAAA8F,EAA7B,OAAIlH,KAAKuD,oBACY,OAAfgD,GACFvG,KAAKV,GAAKoH,EACV1G,KAAKT,GAAKoH,GACc,OAAfJ,IACTvG,KAAKR,GAAKkH,EACV1G,KAAKP,GAAKkH,GAEZ3G,KAAKmH,OAAQ,EACbnH,KAAK6E,YACM,QAAXqC,EAAAlH,KAAKmC,cAAM,IAAA+E,GAAXA,EAAaE,oBACN,IAITpH,KAAKqH,oBAAqB,EACP,OAAfd,GACFvG,KAAKV,GAAKoH,EACV1G,KAAKT,GAAKoH,GACc,OAAfJ,IACTvG,KAAKR,GAAKkH,EACV1G,KAAKP,GAAKkH,GAEZ3G,KAAKS,kBACLT,KAAKmH,OAAQ,EACbnH,KAAKqH,oBAAqB,EACf,QAAXf,EAAAtG,KAAKmC,cAAM,IAAAmE,GAAXA,EAAac,mBACbpH,KAAKsH,KAAK,WAAY,CAAEhF,UAAW+D,EAAekB,OAAQvH,KAAMwH,EAAGpB,KAC5D,EACT,CAEAa,YAAAA,CACEQ,EACAC,EACAC,EACAC,GAEA,MAAM1C,EAASyC,EAAMF,EACftC,EAASyC,EAAMF,EACf9B,EAAW5C,KAAKoC,KAAKF,EAASA,EAASC,EAASA,GACtD,GAAiB,IAAbS,EAAgB,MAAO,CAAEzE,EAAGwG,EAAKvG,EAAGwG,GACxC,IAAIC,EAAQ7E,KAAK8E,MAAM3C,EAAQD,IAAW,IAAMlC,KAAKC,IACrD,MAEM8E,EAFgB,GACD/E,KAAKgF,MAAMH,EADV,KAEiB7E,KAAKC,GAAK,KACjD,MAAO,CACL9B,EAAGsG,EAAQzE,KAAKiF,IAAIF,GAAkBnC,EACtCxE,EAAGsG,EAAQ1E,KAAKkF,IAAIH,GAAkBnC,EAE1C,CAEAnF,eAAAA,GAAwC,IAAxB0H,EAAczI,UAAAC,OAAA,QAAAC,IAAAF,UAAA,IAAAA,UAAA,GAG5B,GAFAM,KAAK0E,MAAQ1B,KAAK2B,IAAI3E,KAAKR,GAAKQ,KAAKV,KAAO,EAC5CU,KAAK4E,OAAS5B,KAAK2B,IAAI3E,KAAKP,GAAKO,KAAKT,KAAO,GACxC4I,IAAmBnI,KAAKqH,mBAAoB,CAC/C,MAAM3G,KAAEA,EAAIC,IAAEA,EAAG+D,MAAEA,EAAKE,OAAEA,GAAWwD,EAA0B,CAC7D,CAAEjH,EAAGnB,KAAKV,GAAI8B,EAAGpB,KAAKT,IACtB,CAAE4B,EAAGnB,KAAKR,GAAI4B,EAAGpB,KAAKP,MAExBO,KAAKqI,oBACH,IAAIhG,EAAM3B,EAAOgE,EAAQ,EAAG/D,EAAMiE,EAAS,GAC3C0D,EACAA,EAEJ,CACF,CAEAC,IAAAA,CAAKC,EAAaC,GAChB,MAAMC,EAAU1I,KAAKU,KACfiI,EAAS3I,KAAKW,IAMpB,GALAb,MAAMyI,KAAKC,EAAKC,GACZvJ,EAAW0J,SAASJ,KACtBxI,KAAKS,kBACLT,KAAKmH,OAAQ,IAEF,SAARqB,GAA0B,QAARA,IAAkBxI,KAAKmC,SAAWnC,KAAKqH,mBAAoB,CAChF,MAAMnC,EAASlF,KAAKU,KAAOgI,EACrBvD,EAASnF,KAAKW,IAAMgI,EACX,IAAXzD,GAA2B,IAAXC,IAClBnF,KAAKqH,oBAAqB,EAC1BrH,KAAKV,IAAM4F,EACXlF,KAAKT,IAAM4F,EACXnF,KAAKR,IAAM0F,EACXlF,KAAKP,IAAM0F,EACXnF,KAAKqH,oBAAqB,EAE9B,CACA,OAAOrH,IACT,CAEA2B,MAAAA,CAAOa,GACDxC,KAAKuD,mBACPvD,KAAK6I,gBAAgBrG,GAGvB1C,MAAM6B,OAAOa,EACf,CAEAqG,eAAAA,CAAgBrG,GAA+B,IAAAsG,EAAAC,EAC7C,IAAK/I,KAAKgJ,QAAS,OACnBxG,EAAIC,OACJ,MAAMP,GAAiB,QAAX4G,EAAA9I,KAAKmC,cAAM,IAAA2G,OAAA,EAAXA,EAAa1G,oBAAqB,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,GAC9DI,EAAIF,UAAUJ,EAAI,GAAIA,EAAI,GAAIA,EAAI,GAAIA,EAAI,GAAIA,EAAI,GAAIA,EAAI,IAC1DM,EAAIsB,YAAc9D,KAAKiJ,QACvBzG,EAAIG,aAAyB,QAAXoG,OAAK5F,kBAAM4F,SAAXA,EAAaG,aAAc,OAC7C1G,EAAII,UAAY5C,KAAK4D,YACrBpB,EAAIqB,QAAU7D,KAAKQ,eAAiB,OACpCgC,EAAIK,YACJL,EAAIyB,OAAOjE,KAAKV,GAAIU,KAAKT,IACzBiD,EAAI0B,OAAOlE,KAAKR,GAAIQ,KAAKP,IACzB+C,EAAIW,SACJX,EAAIY,SACN,CAEA+F,OAAAA,CAAQ3G,GACN,GAAIxC,KAAKuD,mBAAoB,OAC7Bf,EAAIK,YACJ,MAAMuG,EAAIpJ,KAAKqJ,iBACf7G,EAAIyB,OAAOmF,EAAE9J,GAAI8J,EAAE7J,IACnBiD,EAAI0B,OAAOkF,EAAE5J,GAAI4J,EAAE3J,IACnB+C,EAAII,UAAY5C,KAAK4D,YACrB,MAAM0F,EAAkB9G,EAAIG,YACxB4G,EAASvJ,KAAKmD,UAChBX,EAAIG,YAAc3C,KAAKmD,OAAOqG,OAAOhH,IAEvCxC,KAAKmD,QAAUnD,KAAKyJ,cAAcjH,GAClCA,EAAIG,YAAc2G,CACpB,CAEAvE,sBAAAA,GACE,OAAO,IAAI1C,GAAOrC,KAAKV,GAAKU,KAAKR,IAAM,GAAIQ,KAAKT,GAAKS,KAAKP,IAAM,EAClE,CAEAiK,QAAAA,GAGsD,IAApDC,EAAwBjK,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,GAC3B,MAAO,IACFI,MAAM4J,SAASC,MACf3J,KAAKqJ,iBAEZ,CAEAO,4BAAAA,GACE,MAAMC,EAAM/J,MAAM8J,+BAKlB,MAJ2B,UAAvB5J,KAAKQ,gBACPqJ,EAAI1I,GAAKnB,KAAK4D,YACdiG,EAAIzI,GAAKpB,KAAK4D,aAETiG,CACT,CAEAR,cAAAA,GACE,GAAIrJ,KAAKqH,mBAAoB,CAC3B,MAAMyC,GAAW9J,KAAKV,GAAKU,KAAKR,IAAM,EAChCuK,GAAW/J,KAAKT,GAAKS,KAAKP,IAAM,EACtC,MAAO,CACLH,GAAIU,KAAKV,GAAKwK,EACdvK,GAAIS,KAAKT,GAAKwK,EACdvK,GAAIQ,KAAKR,GAAKsK,EACdrK,GAAIO,KAAKP,GAAKsK,EAElB,CACA,MAAQzK,GAAI0K,EAAKxK,GAAIyK,EAAK1K,GAAI2K,EAAKzK,GAAI0K,EAAGzF,MAAEA,EAAKE,OAAEA,GAAW5E,KACxDoK,EAAQJ,GAAOC,GAAM,EAAK,EAC1BI,EAAQH,GAAOC,GAAM,EAAK,EAChC,MAAO,CACL7K,GAAK8K,EAAQ1F,EAAS,EACtBnF,GAAK8K,EAAQzF,EAAU,EACvBpF,GAAK4K,GAAS1F,EAAS,EACvBjF,GAAK4K,GAASzF,EAAU,EAE5B,CAEA0F,MAAAA,GACE,GAAItK,KAAKuD,mBAEP,MAAO,CACL,iBAAiBvD,KAAKmD,yBAAyBnD,KAAK4D,gCAAgC5D,KAAKQ,kBACzF,OAAOR,KAAKV,WAAWU,KAAKT,WAAWS,KAAKR,WAAWQ,KAAKP,YAEzD,CAEL,MAAMH,GAAEA,EAAEE,GAAEA,EAAED,GAAEA,EAAEE,GAAEA,GAAOO,KAAKqJ,iBAChC,MAAO,CACL,SACA,eACA,OAAO/J,UAAWC,UAAWC,UAAWC,UAE5C,CACF,CAEA8K,KAAAA,CAAMC,GACJ,GAAIxK,KAAKuD,mBAAoB,CAE3B,MAAMkH,EAASzK,KAAKsK,SAASI,KAAK,IAClC,OAAOF,EAAUA,EAAQC,GAAUA,CACrC,CAEA,OAAO3K,MAAMyK,MAAMC,EACrB,CAIA,wBAAaG,CACXC,EACA/K,EACAgL,GAEA,MAAMvL,GACJA,EAAK,EAACC,GACNA,EAAK,EAACC,GACNA,EAAK,EAACC,GACNA,EAAK,KACFqL,GACDC,EAAgBH,EAAS5K,KAAKgL,gBAAiBH,GACnD,OAAO,IAAI7K,KAAK,CAACV,EAAIC,EAAIC,EAAIC,GAAKqL,EACpC,CAEA,iBAAOG,CAAUC,GAMX,IANqD5L,GACzDA,EAAEC,GACFA,EAAEC,GACFA,EAAEC,GACFA,KACG0L,GACDD,EACF,OAAOlL,KAAKoL,YACV,IAAKD,EAAQE,OAAQ,CAAC/L,EAAIC,EAAIC,EAAIC,IAClC,CAAE6L,WAAY,UAElB,EACDvL,EAzeYZ,EAAI,OAkBD,QAAMY,EAlBTZ,EAAI,kBAmBU,IAAIoM,KAAoBrM,IAAWa,EAnBjDZ,EAAI,kBA4cUqM,EAAkBC,OAAOvM,IA+BpDwM,EAAcC,SAASxM,GACvBuM,EAAcE,YAAYzM"}
@@ -147,14 +147,14 @@ class Line extends FabricObject {
147
147
  }
148
148
  setCoords() {
149
149
  if (this._useEndpointCoords) {
150
- const minX = Math.min(this.x1, this.x2);
151
- const maxX = Math.max(this.x1, this.x2);
152
- const minY = Math.min(this.y1, this.y2);
153
- const maxY = Math.max(this.y1, this.y2);
150
+ // Set the object's center to the geometric center of the line
151
+ const center = this._findCenterFromElement();
152
+ this.left = center.x;
153
+ this.top = center.y;
154
+
155
+ // Set width and height for hit detection and bounding box
154
156
  const effectiveStrokeWidth = this.hitStrokeWidth === 'auto' ? this.strokeWidth : this.hitStrokeWidth;
155
157
  const hitPadding = Math.max(effectiveStrokeWidth / 2 + 5, 10);
156
- this.left = minX - hitPadding + (maxX - minX + hitPadding * 2) / 2;
157
- this.top = minY - hitPadding + (maxY - minY + hitPadding * 2) / 2;
158
158
  this.width = Math.abs(this.x2 - this.x1) + hitPadding * 2;
159
159
  this.height = Math.abs(this.y2 - this.y1) + hitPadding * 2;
160
160
  }
@@ -408,13 +408,28 @@ class Line extends FabricObject {
408
408
  };
409
409
  }
410
410
  _toSVG() {
411
- const {
412
- x1,
413
- x2,
414
- y1,
415
- y2
416
- } = this.calcLinePoints();
417
- return ['<line ', 'COMMON_PARTS', `x1="${x1}" y1="${y1}" x2="${x2}" y2="${y2}" />\n`];
411
+ if (this._useEndpointCoords) {
412
+ // Use absolute coordinates to bypass all Fabric.js transforms
413
+ return [`<line stroke="${this.stroke}" stroke-width="${this.strokeWidth}" stroke-linecap="${this.strokeLineCap}" `, `x1="${this.x1}" y1="${this.y1}" x2="${this.x2}" y2="${this.y2}" />\n`];
414
+ } else {
415
+ // Use standard calcLinePoints for legacy mode
416
+ const {
417
+ x1,
418
+ x2,
419
+ y1,
420
+ y2
421
+ } = this.calcLinePoints();
422
+ return ['<line ', 'COMMON_PARTS', `x1="${x1}" y1="${y1}" x2="${x2}" y2="${y2}" />\n`];
423
+ }
424
+ }
425
+ toSVG(reviver) {
426
+ if (this._useEndpointCoords) {
427
+ // Override toSVG to prevent Fabric.js from adding transform wrapper
428
+ const markup = this._toSVG().join('');
429
+ return reviver ? reviver(markup) : markup;
430
+ }
431
+ // Use default behavior for legacy mode
432
+ return super.toSVG(reviver);
418
433
  }
419
434
  static async fromElement(element, options, cssRules) {
420
435
  const {
@@ -1 +1 @@
1
- {"version":3,"file":"Line.mjs","sources":["../../../src/shapes/Line.ts"],"sourcesContent":["import { SHARED_ATTRIBUTES } from '../parser/attributes';\nimport { parseAttributes } from '../parser/parseAttributes';\nimport type { Abortable, TClassProperties, TOptions } from '../typedefs';\nimport { classRegistry } from '../ClassRegistry';\nimport { FabricObject, cacheProperties } from './Object/FabricObject';\nimport { Point } from '../Point';\nimport { isFiller } from '../util/typeAssertions';\nimport type { FabricObjectProps, SerializedObjectProps } from './Object/types';\nimport type { ObjectEvents } from '../EventTypeDefs';\nimport { makeBoundingBoxFromPoints } from '../util';\nimport { CENTER, LEFT, TOP } from '../constants';\nimport type { CSSRules } from '../parser/typedefs';\nimport { Control } from '../controls/Control';\nimport type { TPointerEvent, Transform } from '../EventTypeDefs';\n\nconst coordProps = ['x1', 'x2', 'y1', 'y2'] as const;\n\ninterface UniqueLineCoords {\n x1: number;\n x2: number;\n y1: number;\n y2: number;\n}\n\nexport interface SerializedLineProps\n extends SerializedObjectProps,\n UniqueLineCoords {}\n\nexport class Line< \n Props extends TOptions<FabricObjectProps> = Partial<FabricObjectProps>,\n SProps extends SerializedLineProps = SerializedLineProps,\n EventSpec extends ObjectEvents = ObjectEvents\n >\n extends FabricObject<Props, SProps, EventSpec>\n implements UniqueLineCoords\n{\n declare x1: number;\n declare y1: number;\n declare x2: number;\n declare y2: number;\n\n hitStrokeWidth: number | 'auto' = 'auto';\n\n private _updatingEndpoints = false;\n private _useEndpointCoords = true;\n\n static type = 'Line';\n static cacheProperties = [...cacheProperties, ...coordProps];\n\n constructor([x1, y1, x2, y2] = [0, 0, 100, 0], options: Partial<Props & {hitStrokeWidth?: number | 'auto'}> = {}) {\n super();\n this.setOptions(options);\n this.x1 = x1;\n this.x2 = x2;\n this.y1 = y1;\n this.y2 = y2;\n\n if (options.hitStrokeWidth !== undefined) {\n this.hitStrokeWidth = options.hitStrokeWidth;\n }\n\n this.hasBorders = false;\n this.hasControls = true;\n this.selectable = true;\n this.hoverCursor = 'move';\n this.perPixelTargetFind = false;\n this.strokeLineCap = 'butt';\n\n this._setWidthHeight();\n const { left, top } = options;\n typeof left === 'number' && this.set(LEFT, left);\n typeof top === 'number' && this.set(TOP, top);\n this._setupLineControls();\n }\n\n _setupLineControls() {\n this.controls = {\n p1: new Control({\n x: 0,\n y: 0,\n cursorStyle: 'move',\n actionHandler: this._endpointActionHandler.bind(this),\n positionHandler: this._p1PositionHandler.bind(this),\n render: this._renderEndpointControl.bind(this),\n sizeX: 12,\n sizeY: 12,\n }),\n p2: new Control({\n x: 0,\n y: 0,\n cursorStyle: 'move',\n actionHandler: this._endpointActionHandler.bind(this),\n positionHandler: this._p2PositionHandler.bind(this),\n render: this._renderEndpointControl.bind(this),\n sizeX: 12,\n sizeY: 12,\n }),\n };\n }\n\n _p1PositionHandler() {\n const vpt = this.canvas?.viewportTransform || [1, 0, 0, 1, 0, 0];\n return new Point(this.x1, this.y1).transform(vpt);\n }\n\n _p2PositionHandler() {\n const vpt = this.canvas?.viewportTransform || [1, 0, 0, 1, 0, 0];\n return new Point(this.x2, this.y2).transform(vpt);\n }\n\n _renderEndpointControl(\n ctx: CanvasRenderingContext2D,\n left: number,\n top: number\n ) {\n const size = 12;\n ctx.save();\n ctx.fillStyle = '#007bff';\n ctx.strokeStyle = '#ffffff';\n ctx.lineWidth = 2;\n ctx.beginPath();\n ctx.arc(left, top, size / 2, 0, 2 * Math.PI);\n ctx.fill();\n ctx.stroke();\n ctx.restore();\n }\n\n drawBorders(ctx: CanvasRenderingContext2D, styleOverride: any = {}) {\n if (this._useEndpointCoords) {\n this._drawLineBorders(ctx, styleOverride);\n return this;\n }\n return super.drawBorders(ctx, styleOverride, {});\n }\n\n _drawLineBorders(ctx: CanvasRenderingContext2D, styleOverride: any = {}) {\n const vpt = this.canvas?.viewportTransform || [1, 0, 0, 1, 0, 0];\n ctx.save();\n ctx.setTransform(vpt[0], vpt[1], vpt[2], vpt[3], vpt[4], vpt[5]);\n ctx.strokeStyle =\n styleOverride.borderColor || this.borderColor || 'rgba(100, 200, 200, 0.5)';\n ctx.lineWidth = (this.strokeWidth || 1) + 5;\n ctx.lineCap = this.strokeLineCap || 'butt';\n ctx.globalAlpha = this.isMoving ? this.borderOpacityWhenMoving : 1;\n ctx.beginPath();\n ctx.moveTo(this.x1, this.y1);\n ctx.lineTo(this.x2, this.y2);\n ctx.stroke();\n ctx.restore();\n }\n\n _renderControls(ctx: CanvasRenderingContext2D, styleOverride: any = {}) {\n ctx.save();\n ctx.globalAlpha = this.isMoving ? this.borderOpacityWhenMoving : 1;\n this.drawControls(ctx, styleOverride);\n ctx.restore();\n }\n\n getBoundingRect() {\n if (this._useEndpointCoords) {\n const { x1, y1, x2, y2 } = this;\n const effectiveStrokeWidth =\n this.hitStrokeWidth === 'auto'\n ? this.strokeWidth\n : this.hitStrokeWidth;\n const padding = Math.max(effectiveStrokeWidth / 2 + 5, 10);\n return {\n left: Math.min(x1, x2) - padding,\n top: Math.min(y1, y2) - padding,\n width: Math.abs(x2 - x1) + padding * 2 || padding * 2,\n height: Math.abs(y2 - y1) + padding * 2 || padding * 2,\n };\n }\n return super.getBoundingRect();\n }\n\n setCoords() {\n if (this._useEndpointCoords) {\n const minX = Math.min(this.x1, this.x2);\n const maxX = Math.max(this.x1, this.x2);\n const minY = Math.min(this.y1, this.y2);\n const maxY = Math.max(this.y1, this.y2);\n const effectiveStrokeWidth =\n this.hitStrokeWidth === 'auto'\n ? this.strokeWidth\n : this.hitStrokeWidth;\n const hitPadding = Math.max(effectiveStrokeWidth / 2 + 5, 10);\n this.left = minX - hitPadding + (maxX - minX + hitPadding * 2) / 2;\n this.top = minY - hitPadding + (maxY - minY + hitPadding * 2) / 2;\n this.width = Math.abs(this.x2 - this.x1) + hitPadding * 2;\n this.height = Math.abs(this.y2 - this.y1) + hitPadding * 2;\n }\n super.setCoords();\n }\n\n getCoords(): [Point, Point, Point, Point] {\n if (this._useEndpointCoords) {\n const deltaX = this.x2 - this.x1;\n const deltaY = this.y2 - this.y1;\n const length = Math.sqrt(deltaX * deltaX + deltaY * deltaY);\n \n if (length === 0) {\n return super.getCoords() as [Point, Point, Point, Point];\n }\n \n const effectiveStrokeWidth = this.hitStrokeWidth === 'auto' \n ? this.strokeWidth \n : this.hitStrokeWidth;\n const halfWidth = Math.max(effectiveStrokeWidth / 2 + 2, 5);\n \n // Unit vector perpendicular to line\n const perpX = -deltaY / length;\n const perpY = deltaX / length;\n \n // Four corners of oriented rectangle\n return [\n new Point(this.x1 + perpX * halfWidth, this.y1 + perpY * halfWidth),\n new Point(this.x2 + perpX * halfWidth, this.y2 + perpY * halfWidth),\n new Point(this.x2 - perpX * halfWidth, this.y2 - perpY * halfWidth),\n new Point(this.x1 - perpX * halfWidth, this.y1 - perpY * halfWidth),\n ];\n }\n return super.getCoords() as [Point, Point, Point, Point];\n }\n\n containsPoint(point: Point): boolean {\n if (this._useEndpointCoords) {\n if (this.canvas?.getActiveObject() === this) {\n return super.containsPoint(point);\n }\n const distance = this._distanceToLineSegment(point.x, point.y);\n const effectiveStrokeWidth = this.hitStrokeWidth === 'auto' \n ? this.strokeWidth \n : this.hitStrokeWidth || 1;\n \n const tolerance = Math.max(effectiveStrokeWidth / 2 + 2, 5);\n return distance <= tolerance;\n }\n return super.containsPoint(point);\n }\n\n _distanceToLineSegment(px: number, py: number): number {\n const x1 = this.x1, y1 = this.y1, x2 = this.x2, y2 = this.y2;\n \n const pd2 = (x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2);\n if (pd2 === 0) {\n return Math.sqrt((px - x1) * (px - x1) + (py - y1) * (py - y1));\n }\n \n const u = ((px - x1) * (x2 - x1) + (py - y1) * (y2 - y1)) / pd2;\n \n let closestX: number, closestY: number;\n if (u < 0) {\n closestX = x1;\n closestY = y1;\n } else if (u > 1) {\n closestX = x2;\n closestY = y2;\n } else {\n closestX = x1 + u * (x2 - x1);\n closestY = y1 + u * (y2 - y1);\n }\n \n return Math.sqrt((px - closestX) * (px - closestX) + (py - closestY) * (py - closestY));\n }\n\n _endpointActionHandler(\n eventData: TPointerEvent,\n transformData: Transform,\n x: number,\n y: number\n ) {\n const controlKey = transformData.corner;\n const pointer = new Point(x, y);\n let newX = pointer.x;\n let newY = pointer.y;\n\n if (eventData.shiftKey) {\n const otherControl = controlKey === 'p1' ? 'p2' : 'p1';\n const otherX = this[otherControl === 'p1' ? 'x1' : 'x2'];\n const otherY = this[otherControl === 'p1' ? 'y1' : 'y2'];\n const snapped = this._snapToAngle(otherX, otherY, newX, newY);\n newX = snapped.x;\n newY = snapped.y;\n }\n\n if (this._useEndpointCoords) {\n if (controlKey === 'p1') {\n this.x1 = newX;\n this.y1 = newY;\n } else if (controlKey === 'p2') {\n this.x2 = newX;\n this.y2 = newY;\n }\n this.dirty = true;\n this.setCoords();\n this.canvas?.requestRenderAll();\n return true;\n }\n\n // Fallback for old system\n this._updatingEndpoints = true;\n if (controlKey === 'p1') {\n this.x1 = newX;\n this.y1 = newY;\n } else if (controlKey === 'p2') {\n this.x2 = newX;\n this.y2 = newY;\n }\n this._setWidthHeight();\n this.dirty = true;\n this._updatingEndpoints = false;\n this.canvas?.requestRenderAll();\n this.fire('modified', { transform: transformData, target: this, e: eventData });\n return true;\n }\n\n _snapToAngle(\n fromX: number,\n fromY: number,\n toX: number,\n toY: number\n ): { x: number; y: number } {\n const deltaX = toX - fromX;\n const deltaY = toY - fromY;\n const distance = Math.sqrt(deltaX * deltaX + deltaY * deltaY);\n if (distance === 0) return { x: toX, y: toY };\n let angle = Math.atan2(deltaY, deltaX) * (180 / Math.PI);\n const snapIncrement = 15;\n const snappedAngle = Math.round(angle / snapIncrement) * snapIncrement;\n const snappedRadians = snappedAngle * (Math.PI / 180);\n return {\n x: fromX + Math.cos(snappedRadians) * distance,\n y: fromY + Math.sin(snappedRadians) * distance,\n };\n }\n\n _setWidthHeight(skipReposition = false) {\n this.width = Math.abs(this.x2 - this.x1) || 1;\n this.height = Math.abs(this.y2 - this.y1) || 1;\n if (!skipReposition && !this._updatingEndpoints) {\n const { left, top, width, height } = makeBoundingBoxFromPoints([\n { x: this.x1, y: this.y1 },\n { x: this.x2, y: this.y2 },\n ]);\n this.setPositionByOrigin(\n new Point(left + width / 2, top + height / 2),\n CENTER,\n CENTER\n );\n }\n }\n\n _set(key: string, value: any) {\n const oldLeft = this.left;\n const oldTop = this.top;\n super._set(key, value);\n if (coordProps.includes(key as keyof UniqueLineCoords)) {\n this._setWidthHeight();\n this.dirty = true;\n }\n if ((key === 'left' || key === 'top') && this.canvas && !this._updatingEndpoints) {\n const deltaX = this.left - oldLeft;\n const deltaY = this.top - oldTop;\n if (deltaX !== 0 || deltaY !== 0) {\n this._updatingEndpoints = true;\n this.x1 += deltaX;\n this.y1 += deltaY;\n this.x2 += deltaX;\n this.y2 += deltaY;\n this._updatingEndpoints = false;\n }\n }\n return this;\n }\n\n render(ctx: CanvasRenderingContext2D) {\n if (this._useEndpointCoords) {\n this._renderDirectly(ctx);\n return;\n }\n super.render(ctx);\n }\n\n _renderDirectly(ctx: CanvasRenderingContext2D) {\n if (!this.visible) return;\n ctx.save();\n const vpt = this.canvas?.viewportTransform || [1, 0, 0, 1, 0, 0];\n ctx.transform(vpt[0], vpt[1], vpt[2], vpt[3], vpt[4], vpt[5]);\n ctx.globalAlpha = this.opacity;\n ctx.strokeStyle = this.stroke?.toString() || '#000';\n ctx.lineWidth = this.strokeWidth;\n ctx.lineCap = this.strokeLineCap || 'butt';\n ctx.beginPath();\n ctx.moveTo(this.x1, this.y1);\n ctx.lineTo(this.x2, this.y2);\n ctx.stroke();\n ctx.restore();\n }\n\n _render(ctx: CanvasRenderingContext2D) {\n if (this._useEndpointCoords) return;\n ctx.beginPath();\n const p = this.calcLinePoints();\n ctx.moveTo(p.x1, p.y1);\n ctx.lineTo(p.x2, p.y2);\n ctx.lineWidth = this.strokeWidth;\n const origStrokeStyle = ctx.strokeStyle;\n if (isFiller(this.stroke)) {\n ctx.strokeStyle = this.stroke.toLive(ctx)!;\n }\n this.stroke && this._renderStroke(ctx);\n ctx.strokeStyle = origStrokeStyle;\n }\n\n _findCenterFromElement(): Point {\n return new Point((this.x1 + this.x2) / 2, (this.y1 + this.y2) / 2);\n }\n\n toObject< \n T extends Omit<Props & TClassProperties<this>, keyof SProps>,\n K extends keyof T = never\n >(propertiesToInclude: K[] = []): Pick<T, K> & SProps {\n return {\n ...super.toObject(propertiesToInclude),\n ...this.calcLinePoints(),\n };\n }\n\n _getNonTransformedDimensions(): Point {\n const dim = super._getNonTransformedDimensions();\n if (this.strokeLineCap === 'round') {\n dim.x += this.strokeWidth;\n dim.y += this.strokeWidth;\n }\n return dim;\n }\n\n calcLinePoints(): UniqueLineCoords {\n if (this._updatingEndpoints) {\n const centerX = (this.x1 + this.x2) / 2;\n const centerY = (this.y1 + this.y2) / 2;\n return {\n x1: this.x1 - centerX,\n y1: this.y1 - centerY,\n x2: this.x2 - centerX,\n y2: this.y2 - centerY,\n };\n }\n const { x1: _x1, x2: _x2, y1: _y1, y2: _y2, width, height } = this;\n const xMult = _x1 <= _x2 ? -1 : 1;\n const yMult = _y1 <= _y2 ? -1 : 1;\n return {\n x1: (xMult * width) / 2,\n y1: (yMult * height) / 2,\n x2: (xMult * -width) / 2,\n y2: (yMult * -height) / 2,\n };\n }\n\n _toSVG() {\n const { x1, x2, y1, y2 } = this.calcLinePoints();\n return [\n '<line ',\n 'COMMON_PARTS',\n `x1=\"${x1}\" y1=\"${y1}\" x2=\"${x2}\" y2=\"${y2}\" />\\n`,\n ];\n }\n\n static ATTRIBUTE_NAMES = SHARED_ATTRIBUTES.concat(coordProps);\n\n static async fromElement(\n element: HTMLElement,\n options?: Abortable,\n cssRules?: CSSRules\n ) {\n const {\n x1 = 0,\n y1 = 0,\n x2 = 0,\n y2 = 0,\n ...parsedAttributes\n } = parseAttributes(element, this.ATTRIBUTE_NAMES, cssRules);\n return new this([x1, y1, x2, y2], parsedAttributes);\n }\n\n static fromObject<T extends TOptions<SerializedLineProps>>({ \n x1,\n y1,\n x2,\n y2,\n ...object\n }: T) {\n return this._fromObject<Line>(\n { ...object, points: [x1, y1, x2, y2] },\n { extraParam: 'points' }\n );\n }\n}\n\nclassRegistry.setClass(Line);\nclassRegistry.setSVGClass(Line);"],"names":["coordProps","Line","FabricObject","constructor","x1","y1","x2","y2","arguments","length","undefined","options","_defineProperty","setOptions","hitStrokeWidth","hasBorders","hasControls","selectable","hoverCursor","perPixelTargetFind","strokeLineCap","_setWidthHeight","left","top","set","LEFT","TOP","_setupLineControls","controls","p1","Control","x","y","cursorStyle","actionHandler","_endpointActionHandler","bind","positionHandler","_p1PositionHandler","render","_renderEndpointControl","sizeX","sizeY","p2","_p2PositionHandler","_this$canvas","vpt","canvas","viewportTransform","Point","transform","_this$canvas2","ctx","size","save","fillStyle","strokeStyle","lineWidth","beginPath","arc","Math","PI","fill","stroke","restore","drawBorders","styleOverride","_useEndpointCoords","_drawLineBorders","_this$canvas3","setTransform","borderColor","strokeWidth","lineCap","globalAlpha","isMoving","borderOpacityWhenMoving","moveTo","lineTo","_renderControls","drawControls","getBoundingRect","effectiveStrokeWidth","padding","max","min","width","abs","height","setCoords","minX","maxX","minY","maxY","hitPadding","getCoords","deltaX","deltaY","sqrt","halfWidth","perpX","perpY","containsPoint","point","_this$canvas4","getActiveObject","distance","_distanceToLineSegment","tolerance","px","py","pd2","u","closestX","closestY","eventData","transformData","_this$canvas6","controlKey","corner","pointer","newX","newY","shiftKey","otherControl","otherX","otherY","snapped","_snapToAngle","_this$canvas5","dirty","requestRenderAll","_updatingEndpoints","fire","target","e","fromX","fromY","toX","toY","angle","atan2","snapIncrement","snappedAngle","round","snappedRadians","cos","sin","skipReposition","makeBoundingBoxFromPoints","setPositionByOrigin","CENTER","_set","key","value","oldLeft","oldTop","includes","_renderDirectly","_this$canvas7","_this$stroke","visible","opacity","toString","_render","p","calcLinePoints","origStrokeStyle","isFiller","toLive","_renderStroke","_findCenterFromElement","toObject","propertiesToInclude","_getNonTransformedDimensions","dim","centerX","centerY","_x1","_x2","_y1","_y2","xMult","yMult","_toSVG","fromElement","element","cssRules","parsedAttributes","parseAttributes","ATTRIBUTE_NAMES","fromObject","_ref","object","_fromObject","points","extraParam","cacheProperties","SHARED_ATTRIBUTES","concat","classRegistry","setClass","setSVGClass"],"mappings":"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"}
1
+ {"version":3,"file":"Line.mjs","sources":["../../../src/shapes/Line.ts"],"sourcesContent":["import { SHARED_ATTRIBUTES } from '../parser/attributes';\nimport { parseAttributes } from '../parser/parseAttributes';\nimport type { Abortable, TClassProperties, TOptions } from '../typedefs';\nimport { classRegistry } from '../ClassRegistry';\nimport { FabricObject, cacheProperties } from './Object/FabricObject';\nimport { Point } from '../Point';\nimport { isFiller } from '../util/typeAssertions';\nimport type { FabricObjectProps, SerializedObjectProps } from './Object/types';\nimport type { ObjectEvents } from '../EventTypeDefs';\nimport { makeBoundingBoxFromPoints } from '../util';\nimport { CENTER, LEFT, TOP } from '../constants';\nimport type { CSSRules } from '../parser/typedefs';\nimport { Control } from '../controls/Control';\nimport type { TPointerEvent, Transform } from '../EventTypeDefs';\n\nconst coordProps = ['x1', 'x2', 'y1', 'y2'] as const;\n\ninterface UniqueLineCoords {\n x1: number;\n x2: number;\n y1: number;\n y2: number;\n}\n\nexport interface SerializedLineProps\n extends SerializedObjectProps,\n UniqueLineCoords {}\n\nexport class Line< \n Props extends TOptions<FabricObjectProps> = Partial<FabricObjectProps>,\n SProps extends SerializedLineProps = SerializedLineProps,\n EventSpec extends ObjectEvents = ObjectEvents\n >\n extends FabricObject<Props, SProps, EventSpec>\n implements UniqueLineCoords\n{\n declare x1: number;\n declare y1: number;\n declare x2: number;\n declare y2: number;\n\n hitStrokeWidth: number | 'auto' = 'auto';\n\n private _updatingEndpoints = false;\n private _useEndpointCoords = true;\n\n static type = 'Line';\n static cacheProperties = [...cacheProperties, ...coordProps];\n\n constructor([x1, y1, x2, y2] = [0, 0, 100, 0], options: Partial<Props & {hitStrokeWidth?: number | 'auto'}> = {}) {\n super();\n this.setOptions(options);\n this.x1 = x1;\n this.x2 = x2;\n this.y1 = y1;\n this.y2 = y2;\n\n if (options.hitStrokeWidth !== undefined) {\n this.hitStrokeWidth = options.hitStrokeWidth;\n }\n\n this.hasBorders = false;\n this.hasControls = true;\n this.selectable = true;\n this.hoverCursor = 'move';\n this.perPixelTargetFind = false;\n this.strokeLineCap = 'butt';\n\n this._setWidthHeight();\n const { left, top } = options;\n typeof left === 'number' && this.set(LEFT, left);\n typeof top === 'number' && this.set(TOP, top);\n this._setupLineControls();\n }\n\n _setupLineControls() {\n this.controls = {\n p1: new Control({\n x: 0,\n y: 0,\n cursorStyle: 'move',\n actionHandler: this._endpointActionHandler.bind(this),\n positionHandler: this._p1PositionHandler.bind(this),\n render: this._renderEndpointControl.bind(this),\n sizeX: 12,\n sizeY: 12,\n }),\n p2: new Control({\n x: 0,\n y: 0,\n cursorStyle: 'move',\n actionHandler: this._endpointActionHandler.bind(this),\n positionHandler: this._p2PositionHandler.bind(this),\n render: this._renderEndpointControl.bind(this),\n sizeX: 12,\n sizeY: 12,\n }),\n };\n }\n\n _p1PositionHandler() {\n const vpt = this.canvas?.viewportTransform || [1, 0, 0, 1, 0, 0];\n return new Point(this.x1, this.y1).transform(vpt);\n }\n\n _p2PositionHandler() {\n const vpt = this.canvas?.viewportTransform || [1, 0, 0, 1, 0, 0];\n return new Point(this.x2, this.y2).transform(vpt);\n }\n\n _renderEndpointControl(\n ctx: CanvasRenderingContext2D,\n left: number,\n top: number\n ) {\n const size = 12;\n ctx.save();\n ctx.fillStyle = '#007bff';\n ctx.strokeStyle = '#ffffff';\n ctx.lineWidth = 2;\n ctx.beginPath();\n ctx.arc(left, top, size / 2, 0, 2 * Math.PI);\n ctx.fill();\n ctx.stroke();\n ctx.restore();\n }\n\n drawBorders(ctx: CanvasRenderingContext2D, styleOverride: any = {}) {\n if (this._useEndpointCoords) {\n this._drawLineBorders(ctx, styleOverride);\n return this;\n }\n return super.drawBorders(ctx, styleOverride, {});\n }\n\n _drawLineBorders(ctx: CanvasRenderingContext2D, styleOverride: any = {}) {\n const vpt = this.canvas?.viewportTransform || [1, 0, 0, 1, 0, 0];\n ctx.save();\n ctx.setTransform(vpt[0], vpt[1], vpt[2], vpt[3], vpt[4], vpt[5]);\n ctx.strokeStyle =\n styleOverride.borderColor || this.borderColor || 'rgba(100, 200, 200, 0.5)';\n ctx.lineWidth = (this.strokeWidth || 1) + 5;\n ctx.lineCap = this.strokeLineCap || 'butt';\n ctx.globalAlpha = this.isMoving ? this.borderOpacityWhenMoving : 1;\n ctx.beginPath();\n ctx.moveTo(this.x1, this.y1);\n ctx.lineTo(this.x2, this.y2);\n ctx.stroke();\n ctx.restore();\n }\n\n _renderControls(ctx: CanvasRenderingContext2D, styleOverride: any = {}) {\n ctx.save();\n ctx.globalAlpha = this.isMoving ? this.borderOpacityWhenMoving : 1;\n this.drawControls(ctx, styleOverride);\n ctx.restore();\n }\n\n getBoundingRect() {\n if (this._useEndpointCoords) {\n const { x1, y1, x2, y2 } = this;\n const effectiveStrokeWidth =\n this.hitStrokeWidth === 'auto'\n ? this.strokeWidth\n : this.hitStrokeWidth;\n const padding = Math.max(effectiveStrokeWidth / 2 + 5, 10);\n return {\n left: Math.min(x1, x2) - padding,\n top: Math.min(y1, y2) - padding,\n width: Math.abs(x2 - x1) + padding * 2 || padding * 2,\n height: Math.abs(y2 - y1) + padding * 2 || padding * 2,\n };\n }\n return super.getBoundingRect();\n }\n\n setCoords() {\n if (this._useEndpointCoords) {\n // Set the object's center to the geometric center of the line\n const center = this._findCenterFromElement();\n this.left = center.x;\n this.top = center.y;\n \n // Set width and height for hit detection and bounding box\n const effectiveStrokeWidth =\n this.hitStrokeWidth === 'auto'\n ? this.strokeWidth\n : this.hitStrokeWidth;\n const hitPadding = Math.max(effectiveStrokeWidth / 2 + 5, 10);\n this.width = Math.abs(this.x2 - this.x1) + hitPadding * 2;\n this.height = Math.abs(this.y2 - this.y1) + hitPadding * 2;\n }\n super.setCoords();\n }\n\n getCoords(): [Point, Point, Point, Point] {\n if (this._useEndpointCoords) {\n const deltaX = this.x2 - this.x1;\n const deltaY = this.y2 - this.y1;\n const length = Math.sqrt(deltaX * deltaX + deltaY * deltaY);\n \n if (length === 0) {\n return super.getCoords() as [Point, Point, Point, Point];\n }\n \n const effectiveStrokeWidth = this.hitStrokeWidth === 'auto' \n ? this.strokeWidth \n : this.hitStrokeWidth;\n const halfWidth = Math.max(effectiveStrokeWidth / 2 + 2, 5);\n \n // Unit vector perpendicular to line\n const perpX = -deltaY / length;\n const perpY = deltaX / length;\n \n // Four corners of oriented rectangle\n return [\n new Point(this.x1 + perpX * halfWidth, this.y1 + perpY * halfWidth),\n new Point(this.x2 + perpX * halfWidth, this.y2 + perpY * halfWidth),\n new Point(this.x2 - perpX * halfWidth, this.y2 - perpY * halfWidth),\n new Point(this.x1 - perpX * halfWidth, this.y1 - perpY * halfWidth),\n ];\n }\n return super.getCoords() as [Point, Point, Point, Point];\n }\n\n containsPoint(point: Point): boolean {\n if (this._useEndpointCoords) {\n if (this.canvas?.getActiveObject() === this) {\n return super.containsPoint(point);\n }\n const distance = this._distanceToLineSegment(point.x, point.y);\n const effectiveStrokeWidth = this.hitStrokeWidth === 'auto' \n ? this.strokeWidth \n : this.hitStrokeWidth || 1;\n \n const tolerance = Math.max(effectiveStrokeWidth / 2 + 2, 5);\n return distance <= tolerance;\n }\n return super.containsPoint(point);\n }\n\n _distanceToLineSegment(px: number, py: number): number {\n const x1 = this.x1, y1 = this.y1, x2 = this.x2, y2 = this.y2;\n \n const pd2 = (x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2);\n if (pd2 === 0) {\n return Math.sqrt((px - x1) * (px - x1) + (py - y1) * (py - y1));\n }\n \n const u = ((px - x1) * (x2 - x1) + (py - y1) * (y2 - y1)) / pd2;\n \n let closestX: number, closestY: number;\n if (u < 0) {\n closestX = x1;\n closestY = y1;\n } else if (u > 1) {\n closestX = x2;\n closestY = y2;\n } else {\n closestX = x1 + u * (x2 - x1);\n closestY = y1 + u * (y2 - y1);\n }\n \n return Math.sqrt((px - closestX) * (px - closestX) + (py - closestY) * (py - closestY));\n }\n\n _endpointActionHandler(\n eventData: TPointerEvent,\n transformData: Transform,\n x: number,\n y: number\n ) {\n const controlKey = transformData.corner;\n const pointer = new Point(x, y);\n let newX = pointer.x;\n let newY = pointer.y;\n\n if (eventData.shiftKey) {\n const otherControl = controlKey === 'p1' ? 'p2' : 'p1';\n const otherX = this[otherControl === 'p1' ? 'x1' : 'x2'];\n const otherY = this[otherControl === 'p1' ? 'y1' : 'y2'];\n const snapped = this._snapToAngle(otherX, otherY, newX, newY);\n newX = snapped.x;\n newY = snapped.y;\n }\n\n if (this._useEndpointCoords) {\n if (controlKey === 'p1') {\n this.x1 = newX;\n this.y1 = newY;\n } else if (controlKey === 'p2') {\n this.x2 = newX;\n this.y2 = newY;\n }\n this.dirty = true;\n this.setCoords();\n this.canvas?.requestRenderAll();\n return true;\n }\n\n // Fallback for old system\n this._updatingEndpoints = true;\n if (controlKey === 'p1') {\n this.x1 = newX;\n this.y1 = newY;\n } else if (controlKey === 'p2') {\n this.x2 = newX;\n this.y2 = newY;\n }\n this._setWidthHeight();\n this.dirty = true;\n this._updatingEndpoints = false;\n this.canvas?.requestRenderAll();\n this.fire('modified', { transform: transformData, target: this, e: eventData });\n return true;\n }\n\n _snapToAngle(\n fromX: number,\n fromY: number,\n toX: number,\n toY: number\n ): { x: number; y: number } {\n const deltaX = toX - fromX;\n const deltaY = toY - fromY;\n const distance = Math.sqrt(deltaX * deltaX + deltaY * deltaY);\n if (distance === 0) return { x: toX, y: toY };\n let angle = Math.atan2(deltaY, deltaX) * (180 / Math.PI);\n const snapIncrement = 15;\n const snappedAngle = Math.round(angle / snapIncrement) * snapIncrement;\n const snappedRadians = snappedAngle * (Math.PI / 180);\n return {\n x: fromX + Math.cos(snappedRadians) * distance,\n y: fromY + Math.sin(snappedRadians) * distance,\n };\n }\n\n _setWidthHeight(skipReposition = false) {\n this.width = Math.abs(this.x2 - this.x1) || 1;\n this.height = Math.abs(this.y2 - this.y1) || 1;\n if (!skipReposition && !this._updatingEndpoints) {\n const { left, top, width, height } = makeBoundingBoxFromPoints([\n { x: this.x1, y: this.y1 },\n { x: this.x2, y: this.y2 },\n ]);\n this.setPositionByOrigin(\n new Point(left + width / 2, top + height / 2),\n CENTER,\n CENTER\n );\n }\n }\n\n _set(key: string, value: any) {\n const oldLeft = this.left;\n const oldTop = this.top;\n super._set(key, value);\n if (coordProps.includes(key as keyof UniqueLineCoords)) {\n this._setWidthHeight();\n this.dirty = true;\n }\n if ((key === 'left' || key === 'top') && this.canvas && !this._updatingEndpoints) {\n const deltaX = this.left - oldLeft;\n const deltaY = this.top - oldTop;\n if (deltaX !== 0 || deltaY !== 0) {\n this._updatingEndpoints = true;\n this.x1 += deltaX;\n this.y1 += deltaY;\n this.x2 += deltaX;\n this.y2 += deltaY;\n this._updatingEndpoints = false;\n }\n }\n return this;\n }\n\n render(ctx: CanvasRenderingContext2D) {\n if (this._useEndpointCoords) {\n this._renderDirectly(ctx);\n return;\n }\n super.render(ctx);\n }\n\n _renderDirectly(ctx: CanvasRenderingContext2D) {\n if (!this.visible) return;\n ctx.save();\n const vpt = this.canvas?.viewportTransform || [1, 0, 0, 1, 0, 0];\n ctx.transform(vpt[0], vpt[1], vpt[2], vpt[3], vpt[4], vpt[5]);\n ctx.globalAlpha = this.opacity;\n ctx.strokeStyle = this.stroke?.toString() || '#000';\n ctx.lineWidth = this.strokeWidth;\n ctx.lineCap = this.strokeLineCap || 'butt';\n ctx.beginPath();\n ctx.moveTo(this.x1, this.y1);\n ctx.lineTo(this.x2, this.y2);\n ctx.stroke();\n ctx.restore();\n }\n\n _render(ctx: CanvasRenderingContext2D) {\n if (this._useEndpointCoords) return;\n ctx.beginPath();\n const p = this.calcLinePoints();\n ctx.moveTo(p.x1, p.y1);\n ctx.lineTo(p.x2, p.y2);\n ctx.lineWidth = this.strokeWidth;\n const origStrokeStyle = ctx.strokeStyle;\n if (isFiller(this.stroke)) {\n ctx.strokeStyle = this.stroke.toLive(ctx)!;\n }\n this.stroke && this._renderStroke(ctx);\n ctx.strokeStyle = origStrokeStyle;\n }\n\n _findCenterFromElement(): Point {\n return new Point((this.x1 + this.x2) / 2, (this.y1 + this.y2) / 2);\n }\n\n toObject< \n T extends Omit<Props & TClassProperties<this>, keyof SProps>,\n K extends keyof T = never\n >(propertiesToInclude: K[] = []): Pick<T, K> & SProps {\n return {\n ...super.toObject(propertiesToInclude),\n ...this.calcLinePoints(),\n };\n }\n\n _getNonTransformedDimensions(): Point {\n const dim = super._getNonTransformedDimensions();\n if (this.strokeLineCap === 'round') {\n dim.x += this.strokeWidth;\n dim.y += this.strokeWidth;\n }\n return dim;\n }\n\n calcLinePoints(): UniqueLineCoords {\n if (this._updatingEndpoints) {\n const centerX = (this.x1 + this.x2) / 2;\n const centerY = (this.y1 + this.y2) / 2;\n return {\n x1: this.x1 - centerX,\n y1: this.y1 - centerY,\n x2: this.x2 - centerX,\n y2: this.y2 - centerY,\n };\n }\n const { x1: _x1, x2: _x2, y1: _y1, y2: _y2, width, height } = this;\n const xMult = _x1 <= _x2 ? -1 : 1;\n const yMult = _y1 <= _y2 ? -1 : 1;\n return {\n x1: (xMult * width) / 2,\n y1: (yMult * height) / 2,\n x2: (xMult * -width) / 2,\n y2: (yMult * -height) / 2,\n };\n }\n\n _toSVG() {\n if (this._useEndpointCoords) {\n // Use absolute coordinates to bypass all Fabric.js transforms\n return [\n `<line stroke=\"${this.stroke}\" stroke-width=\"${this.strokeWidth}\" stroke-linecap=\"${this.strokeLineCap}\" `,\n `x1=\"${this.x1}\" y1=\"${this.y1}\" x2=\"${this.x2}\" y2=\"${this.y2}\" />\\n`,\n ];\n } else {\n // Use standard calcLinePoints for legacy mode\n const { x1, x2, y1, y2 } = this.calcLinePoints();\n return [\n '<line ',\n 'COMMON_PARTS',\n `x1=\"${x1}\" y1=\"${y1}\" x2=\"${x2}\" y2=\"${y2}\" />\\n`,\n ];\n }\n }\n\n toSVG(reviver?: (markup: string) => string): string {\n if (this._useEndpointCoords) {\n // Override toSVG to prevent Fabric.js from adding transform wrapper\n const markup = this._toSVG().join('');\n return reviver ? reviver(markup) : markup;\n }\n // Use default behavior for legacy mode\n return super.toSVG(reviver);\n }\n\n static ATTRIBUTE_NAMES = SHARED_ATTRIBUTES.concat(coordProps);\n\n static async fromElement(\n element: HTMLElement,\n options?: Abortable,\n cssRules?: CSSRules\n ) {\n const {\n x1 = 0,\n y1 = 0,\n x2 = 0,\n y2 = 0,\n ...parsedAttributes\n } = parseAttributes(element, this.ATTRIBUTE_NAMES, cssRules);\n return new this([x1, y1, x2, y2], parsedAttributes);\n }\n\n static fromObject<T extends TOptions<SerializedLineProps>>({ \n x1,\n y1,\n x2,\n y2,\n ...object\n }: T) {\n return this._fromObject<Line>(\n { ...object, points: [x1, y1, x2, y2] },\n { extraParam: 'points' }\n );\n }\n}\n\nclassRegistry.setClass(Line);\nclassRegistry.setSVGClass(Line);"],"names":["coordProps","Line","FabricObject","constructor","x1","y1","x2","y2","arguments","length","undefined","options","_defineProperty","setOptions","hitStrokeWidth","hasBorders","hasControls","selectable","hoverCursor","perPixelTargetFind","strokeLineCap","_setWidthHeight","left","top","set","LEFT","TOP","_setupLineControls","controls","p1","Control","x","y","cursorStyle","actionHandler","_endpointActionHandler","bind","positionHandler","_p1PositionHandler","render","_renderEndpointControl","sizeX","sizeY","p2","_p2PositionHandler","_this$canvas","vpt","canvas","viewportTransform","Point","transform","_this$canvas2","ctx","size","save","fillStyle","strokeStyle","lineWidth","beginPath","arc","Math","PI","fill","stroke","restore","drawBorders","styleOverride","_useEndpointCoords","_drawLineBorders","_this$canvas3","setTransform","borderColor","strokeWidth","lineCap","globalAlpha","isMoving","borderOpacityWhenMoving","moveTo","lineTo","_renderControls","drawControls","getBoundingRect","effectiveStrokeWidth","padding","max","min","width","abs","height","setCoords","center","_findCenterFromElement","hitPadding","getCoords","deltaX","deltaY","sqrt","halfWidth","perpX","perpY","containsPoint","point","_this$canvas4","getActiveObject","distance","_distanceToLineSegment","tolerance","px","py","pd2","u","closestX","closestY","eventData","transformData","_this$canvas6","controlKey","corner","pointer","newX","newY","shiftKey","otherControl","otherX","otherY","snapped","_snapToAngle","_this$canvas5","dirty","requestRenderAll","_updatingEndpoints","fire","target","e","fromX","fromY","toX","toY","angle","atan2","snapIncrement","snappedAngle","round","snappedRadians","cos","sin","skipReposition","makeBoundingBoxFromPoints","setPositionByOrigin","CENTER","_set","key","value","oldLeft","oldTop","includes","_renderDirectly","_this$canvas7","_this$stroke","visible","opacity","toString","_render","p","calcLinePoints","origStrokeStyle","isFiller","toLive","_renderStroke","toObject","propertiesToInclude","_getNonTransformedDimensions","dim","centerX","centerY","_x1","_x2","_y1","_y2","xMult","yMult","_toSVG","toSVG","reviver","markup","join","fromElement","element","cssRules","parsedAttributes","parseAttributes","ATTRIBUTE_NAMES","fromObject","_ref","object","_fromObject","points","extraParam","cacheProperties","SHARED_ATTRIBUTES","concat","classRegistry","setClass","setSVGClass"],"mappings":"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"}
@@ -53,6 +53,7 @@ export declare class Line<Props extends TOptions<FabricObjectProps> = Partial<Fa
53
53
  _getNonTransformedDimensions(): Point;
54
54
  calcLinePoints(): UniqueLineCoords;
55
55
  _toSVG(): string[];
56
+ toSVG(reviver?: (markup: string) => string): string;
56
57
  static ATTRIBUTE_NAMES: string[];
57
58
  static fromElement(element: HTMLElement, options?: Abortable, cssRules?: CSSRules): Promise<Line<{
58
59
  [x: string]: /*elided*/ any;
@@ -1 +1 @@
1
- {"version":3,"file":"Line.d.ts","sourceRoot":"","sources":["../../../src/shapes/Line.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Line.d.ts","sourceRoot":"","sources":["../../../src/shapes/Line.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "@nasser-sw/fabric",
3
3
  "description": "Object model for HTML5 canvas, and SVG-to-canvas parser. Backed by jsdom and node-canvas.",
4
4
  "homepage": "http://fabricjs.com/",
5
- "version": "7.0.1-beta4",
5
+ "version": "7.0.1-beta5",
6
6
  "author": "Juriy Zaytsev <kangax@gmail.com>",
7
7
  "contributors": [
8
8
  {
@@ -176,17 +176,17 @@ export class Line<
176
176
 
177
177
  setCoords() {
178
178
  if (this._useEndpointCoords) {
179
- const minX = Math.min(this.x1, this.x2);
180
- const maxX = Math.max(this.x1, this.x2);
181
- const minY = Math.min(this.y1, this.y2);
182
- const maxY = Math.max(this.y1, this.y2);
179
+ // Set the object's center to the geometric center of the line
180
+ const center = this._findCenterFromElement();
181
+ this.left = center.x;
182
+ this.top = center.y;
183
+
184
+ // Set width and height for hit detection and bounding box
183
185
  const effectiveStrokeWidth =
184
186
  this.hitStrokeWidth === 'auto'
185
187
  ? this.strokeWidth
186
188
  : this.hitStrokeWidth;
187
189
  const hitPadding = Math.max(effectiveStrokeWidth / 2 + 5, 10);
188
- this.left = minX - hitPadding + (maxX - minX + hitPadding * 2) / 2;
189
- this.top = minY - hitPadding + (maxY - minY + hitPadding * 2) / 2;
190
190
  this.width = Math.abs(this.x2 - this.x1) + hitPadding * 2;
191
191
  this.height = Math.abs(this.y2 - this.y1) + hitPadding * 2;
192
192
  }
@@ -459,12 +459,31 @@ export class Line<
459
459
  }
460
460
 
461
461
  _toSVG() {
462
- const { x1, x2, y1, y2 } = this.calcLinePoints();
463
- return [
464
- '<line ',
465
- 'COMMON_PARTS',
466
- `x1="${x1}" y1="${y1}" x2="${x2}" y2="${y2}" />\n`,
467
- ];
462
+ if (this._useEndpointCoords) {
463
+ // Use absolute coordinates to bypass all Fabric.js transforms
464
+ return [
465
+ `<line stroke="${this.stroke}" stroke-width="${this.strokeWidth}" stroke-linecap="${this.strokeLineCap}" `,
466
+ `x1="${this.x1}" y1="${this.y1}" x2="${this.x2}" y2="${this.y2}" />\n`,
467
+ ];
468
+ } else {
469
+ // Use standard calcLinePoints for legacy mode
470
+ const { x1, x2, y1, y2 } = this.calcLinePoints();
471
+ return [
472
+ '<line ',
473
+ 'COMMON_PARTS',
474
+ `x1="${x1}" y1="${y1}" x2="${x2}" y2="${y2}" />\n`,
475
+ ];
476
+ }
477
+ }
478
+
479
+ toSVG(reviver?: (markup: string) => string): string {
480
+ if (this._useEndpointCoords) {
481
+ // Override toSVG to prevent Fabric.js from adding transform wrapper
482
+ const markup = this._toSVG().join('');
483
+ return reviver ? reviver(markup) : markup;
484
+ }
485
+ // Use default behavior for legacy mode
486
+ return super.toSVG(reviver);
468
487
  }
469
488
 
470
489
  static ATTRIBUTE_NAMES = SHARED_ATTRIBUTES.concat(coordProps);