@nasser-sw/fabric 7.0.1-beta7 → 7.0.1-beta9

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.
Files changed (148) hide show
  1. package/debug/konva-master/CHANGELOG.md +1475 -0
  2. package/debug/konva-master/LICENSE +22 -0
  3. package/debug/konva-master/README.md +209 -0
  4. package/debug/konva-master/gulpfile.mjs +110 -0
  5. package/debug/konva-master/package.json +139 -0
  6. package/debug/konva-master/release.sh +62 -0
  7. package/debug/konva-master/resources/doc-includes/ContainerParams.txt +6 -0
  8. package/debug/konva-master/resources/doc-includes/NodeParams.txt +20 -0
  9. package/debug/konva-master/resources/doc-includes/ShapeParams.txt +53 -0
  10. package/debug/konva-master/resources/jsdoc.conf.json +28 -0
  11. package/debug/konva-master/rollup.config.mjs +32 -0
  12. package/debug/konva-master/src/Animation.ts +237 -0
  13. package/debug/konva-master/src/BezierFunctions.ts +826 -0
  14. package/debug/konva-master/src/Canvas.ts +230 -0
  15. package/debug/konva-master/src/Container.ts +649 -0
  16. package/debug/konva-master/src/Context.ts +1017 -0
  17. package/debug/konva-master/src/Core.ts +5 -0
  18. package/debug/konva-master/src/DragAndDrop.ts +173 -0
  19. package/debug/konva-master/src/Factory.ts +246 -0
  20. package/debug/konva-master/src/FastLayer.ts +29 -0
  21. package/debug/konva-master/src/Global.ts +210 -0
  22. package/debug/konva-master/src/Group.ts +31 -0
  23. package/debug/konva-master/src/Layer.ts +546 -0
  24. package/debug/konva-master/src/Node.ts +3477 -0
  25. package/debug/konva-master/src/PointerEvents.ts +67 -0
  26. package/debug/konva-master/src/Shape.ts +2081 -0
  27. package/debug/konva-master/src/Stage.ts +1000 -0
  28. package/debug/konva-master/src/Tween.ts +811 -0
  29. package/debug/konva-master/src/Util.ts +1123 -0
  30. package/debug/konva-master/src/Validators.ts +210 -0
  31. package/debug/konva-master/src/_CoreInternals.ts +85 -0
  32. package/debug/konva-master/src/_FullInternals.ts +171 -0
  33. package/debug/konva-master/src/canvas-backend.ts +36 -0
  34. package/debug/konva-master/src/filters/Blur.ts +388 -0
  35. package/debug/konva-master/src/filters/Brighten.ts +48 -0
  36. package/debug/konva-master/src/filters/Brightness.ts +30 -0
  37. package/debug/konva-master/src/filters/Contrast.ts +75 -0
  38. package/debug/konva-master/src/filters/Emboss.ts +207 -0
  39. package/debug/konva-master/src/filters/Enhance.ts +154 -0
  40. package/debug/konva-master/src/filters/Grayscale.ts +25 -0
  41. package/debug/konva-master/src/filters/HSL.ts +108 -0
  42. package/debug/konva-master/src/filters/HSV.ts +106 -0
  43. package/debug/konva-master/src/filters/Invert.ts +23 -0
  44. package/debug/konva-master/src/filters/Kaleidoscope.ts +274 -0
  45. package/debug/konva-master/src/filters/Mask.ts +220 -0
  46. package/debug/konva-master/src/filters/Noise.ts +44 -0
  47. package/debug/konva-master/src/filters/Pixelate.ts +107 -0
  48. package/debug/konva-master/src/filters/Posterize.ts +46 -0
  49. package/debug/konva-master/src/filters/RGB.ts +82 -0
  50. package/debug/konva-master/src/filters/RGBA.ts +103 -0
  51. package/debug/konva-master/src/filters/Sepia.ts +27 -0
  52. package/debug/konva-master/src/filters/Solarize.ts +29 -0
  53. package/debug/konva-master/src/filters/Threshold.ts +44 -0
  54. package/debug/konva-master/src/index.ts +3 -0
  55. package/debug/konva-master/src/shapes/Arc.ts +176 -0
  56. package/debug/konva-master/src/shapes/Arrow.ts +231 -0
  57. package/debug/konva-master/src/shapes/Circle.ts +76 -0
  58. package/debug/konva-master/src/shapes/Ellipse.ts +121 -0
  59. package/debug/konva-master/src/shapes/Image.ts +319 -0
  60. package/debug/konva-master/src/shapes/Label.ts +386 -0
  61. package/debug/konva-master/src/shapes/Line.ts +364 -0
  62. package/debug/konva-master/src/shapes/Path.ts +1013 -0
  63. package/debug/konva-master/src/shapes/Rect.ts +79 -0
  64. package/debug/konva-master/src/shapes/RegularPolygon.ts +167 -0
  65. package/debug/konva-master/src/shapes/Ring.ts +94 -0
  66. package/debug/konva-master/src/shapes/Sprite.ts +370 -0
  67. package/debug/konva-master/src/shapes/Star.ts +125 -0
  68. package/debug/konva-master/src/shapes/Text.ts +1065 -0
  69. package/debug/konva-master/src/shapes/TextPath.ts +583 -0
  70. package/debug/konva-master/src/shapes/Transformer.ts +1889 -0
  71. package/debug/konva-master/src/shapes/Wedge.ts +129 -0
  72. package/debug/konva-master/src/skia-backend.ts +35 -0
  73. package/debug/konva-master/src/types.ts +84 -0
  74. package/debug/konva-master/tsconfig.json +31 -0
  75. package/debug/konva-master/tsconfig.test.json +7 -0
  76. package/dist/index.js +977 -29
  77. package/dist/index.js.map +1 -1
  78. package/dist/index.min.js +1 -1
  79. package/dist/index.min.js.map +1 -1
  80. package/dist/index.min.mjs +1 -1
  81. package/dist/index.min.mjs.map +1 -1
  82. package/dist/index.mjs +977 -29
  83. package/dist/index.mjs.map +1 -1
  84. package/dist/index.node.cjs +977 -29
  85. package/dist/index.node.cjs.map +1 -1
  86. package/dist/index.node.mjs +977 -29
  87. package/dist/index.node.mjs.map +1 -1
  88. package/dist/package.json.min.mjs +1 -1
  89. package/dist/package.json.mjs +1 -1
  90. package/dist/src/shapes/Line.d.ts +1 -0
  91. package/dist/src/shapes/Line.d.ts.map +1 -1
  92. package/dist/src/shapes/Line.min.mjs +1 -1
  93. package/dist/src/shapes/Line.min.mjs.map +1 -1
  94. package/dist/src/shapes/Line.mjs +63 -6
  95. package/dist/src/shapes/Line.mjs.map +1 -1
  96. package/dist/src/shapes/Text/Text.d.ts +19 -0
  97. package/dist/src/shapes/Text/Text.d.ts.map +1 -1
  98. package/dist/src/shapes/Text/Text.min.mjs +1 -1
  99. package/dist/src/shapes/Text/Text.min.mjs.map +1 -1
  100. package/dist/src/shapes/Text/Text.mjs +238 -4
  101. package/dist/src/shapes/Text/Text.mjs.map +1 -1
  102. package/dist/src/shapes/Textbox.d.ts +38 -1
  103. package/dist/src/shapes/Textbox.d.ts.map +1 -1
  104. package/dist/src/shapes/Textbox.min.mjs +1 -1
  105. package/dist/src/shapes/Textbox.min.mjs.map +1 -1
  106. package/dist/src/shapes/Textbox.mjs +497 -15
  107. package/dist/src/shapes/Textbox.mjs.map +1 -1
  108. package/dist/src/text/examples/arabicTextExample.d.ts +60 -0
  109. package/dist/src/text/examples/arabicTextExample.d.ts.map +1 -0
  110. package/dist/src/text/measure.d.ts +9 -0
  111. package/dist/src/text/measure.d.ts.map +1 -1
  112. package/dist/src/text/measure.min.mjs +1 -1
  113. package/dist/src/text/measure.min.mjs.map +1 -1
  114. package/dist/src/text/measure.mjs +175 -4
  115. package/dist/src/text/measure.mjs.map +1 -1
  116. package/dist/src/text/overlayEditor.d.ts.map +1 -1
  117. package/dist/src/text/overlayEditor.min.mjs +1 -1
  118. package/dist/src/text/overlayEditor.min.mjs.map +1 -1
  119. package/dist/src/text/overlayEditor.mjs +7 -0
  120. package/dist/src/text/overlayEditor.mjs.map +1 -1
  121. package/dist/src/text/scriptUtils.d.ts +142 -0
  122. package/dist/src/text/scriptUtils.d.ts.map +1 -0
  123. package/dist/src/text/scriptUtils.min.mjs +2 -0
  124. package/dist/src/text/scriptUtils.min.mjs.map +1 -0
  125. package/dist/src/text/scriptUtils.mjs +212 -0
  126. package/dist/src/text/scriptUtils.mjs.map +1 -0
  127. package/dist-extensions/src/shapes/Line.d.ts +1 -0
  128. package/dist-extensions/src/shapes/Line.d.ts.map +1 -1
  129. package/dist-extensions/src/shapes/Text/Text.d.ts +19 -0
  130. package/dist-extensions/src/shapes/Text/Text.d.ts.map +1 -1
  131. package/dist-extensions/src/shapes/Textbox.d.ts +38 -1
  132. package/dist-extensions/src/shapes/Textbox.d.ts.map +1 -1
  133. package/dist-extensions/src/text/measure.d.ts +9 -0
  134. package/dist-extensions/src/text/measure.d.ts.map +1 -1
  135. package/dist-extensions/src/text/overlayEditor.d.ts.map +1 -1
  136. package/dist-extensions/src/text/scriptUtils.d.ts +142 -0
  137. package/dist-extensions/src/text/scriptUtils.d.ts.map +1 -0
  138. package/fabric-test-editor.html +2401 -46
  139. package/fabric-test2.html +43 -0
  140. package/fonts/STV Bold.ttf +0 -0
  141. package/fonts/STV Light.ttf +0 -0
  142. package/fonts/STV Regular.ttf +0 -0
  143. package/package.json +1 -1
  144. package/src/shapes/Line.ts +132 -46
  145. package/src/shapes/Text/Text.ts +238 -5
  146. package/src/shapes/Textbox.ts +521 -11
  147. package/src/text/measure.ts +200 -50
  148. package/src/text/overlayEditor.ts +7 -0
@@ -1,2 +1,2 @@
1
- var a="7.0.1-beta6";export{a as version};
1
+ var a="7.0.1-beta8";export{a as version};
2
2
  //# sourceMappingURL=package.json.min.mjs.map
@@ -1,4 +1,4 @@
1
- var version = "7.0.1-beta6";
1
+ var version = "7.0.1-beta8";
2
2
 
3
3
  export { version };
4
4
  //# sourceMappingURL=package.json.mjs.map
@@ -21,6 +21,7 @@ export declare class Line<Props extends TOptions<FabricObjectProps> = Partial<Fa
21
21
  hitStrokeWidth: number | 'auto';
22
22
  private _updatingEndpoints;
23
23
  private _useEndpointCoords;
24
+ private _exportingSVG;
24
25
  static type: string;
25
26
  static cacheProperties: string[];
26
27
  constructor([x1, y1, x2, y2]?: [number, number, number, number], options?: Partial<Props & {
@@ -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;AAKjE,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;IAIlB,kBAAkB;IAIlB,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;IAqBT,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;IAc7C,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;IAgBrD,4BAA4B,IAAI,KAAK;IASrC,cAAc,IAAI,gBAAgB;IAsBlC,MAAM;IAkBN,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,MAAM,GAAG,MAAM;IAUnD,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 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 p}from"../util/misc/boundingBoxFromPoints.min.mjs";import"../cache.min.mjs";import"../parser/constants.min.mjs";import"../util/animation/AnimationRegistry.min.mjs";import{Control as l}from"../controls/Control.min.mjs";import{cacheProperties as m}from"./Object/defaultValues.min.mjs";const u=["x1","x2","y1","y2"];class y 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 l({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 l({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(){return new n(this.x1,this.y1).transform(this.getViewportTransform())}_p2PositionHandler(){return new n(this.x2,this.y2).transform(this.getViewportTransform())}_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="auto"===this.hitStrokeWidth?this.strokeWidth:this.hitStrokeWidth,i=Math.max(t/2+5,10);if(this.width=Math.abs(this.x2-this.x1)+2*i,this.height=Math.abs(this.y2-this.y1)+2*i,0===this.left&&0===this.top){const t=this._findCenterFromElement();this.left=t.x,this.top=t.y}}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 p;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===(p=this.canvas)||void 0===p||p.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}=p([{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;this.visible&&(t.save(),t.globalAlpha=this.opacity,t.strokeStyle=(null===(i=this.stroke)||void 0===i?void 0:i.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 this._useEndpointCoords?{...super.toObject(t),x1:this.x1,y1:this.y1,x2:this.x2,y2:this.y2}:{...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(y,"type","Line"),t(y,"cacheProperties",[...m,...u]),t(y,"ATTRIBUTE_NAMES",i.concat(u)),e.setClass(y),e.setSVGClass(y);export{y 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 r}from"../Point.min.mjs";import{isFiller as h}from"../util/typeAssertions.min.mjs";import{LEFT as n,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{Gradient as y}from"../gradient/Gradient.min.mjs";import{cacheProperties as c}from"./Object/defaultValues.min.mjs";const m=["x1","x2","y1","y2"];class u extends o{constructor(){let[i,s,e,o]=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[0,0,100,0],r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};super(),t(this,"hitStrokeWidth","auto"),t(this,"_updatingEndpoints",!1),t(this,"_useEndpointCoords",!0),t(this,"_exportingSVG",!1),this.setOptions(r),this.x1=i,this.x2=e,this.y1=s,this.y2=o,void 0!==r.hitStrokeWidth&&(this.hitStrokeWidth=r.hitStrokeWidth),this.hasBorders=!1,this.hasControls=!0,this.selectable=!0,this.hoverCursor="move",this.perPixelTargetFind=!1,this.strokeLineCap="butt",this._setWidthHeight();const{left:h,top:a}=r;"number"==typeof h&&this.set(n,h),"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(){return new r(this.x1,this.y1).transform(this.getViewportTransform())}_p2PositionHandler(){return new r(this.x2,this.y2).transform(this.getViewportTransform())}_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,r=Math.max(o/2+5,10);return{left:Math.min(t,s)-r,top:Math.min(i,e)-r,width:Math.abs(s-t)+2*r||2*r,height:Math.abs(e-i)+2*r||2*r}}return super.getBoundingRect()}setCoords(){if(this._useEndpointCoords){const t="auto"===this.hitStrokeWidth?this.strokeWidth:this.hitStrokeWidth,i=Math.max(t/2+5,10);if(this.width=Math.abs(this.x2-this.x1)+2*i,this.height=Math.abs(this.y2-this.y1)+2*i,0===this.left&&0===this.top){const t=this._findCenterFromElement();this.left=t.x,this.top=t.y}}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),h=-i/s,n=t/s;return[new r(this.x1+h*o,this.y1+n*o),new r(this.x2+h*o,this.y2+n*o),new r(this.x2-h*o,this.y2-n*o),new r(this.x1-h*o,this.y1-n*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,r=this.y2,h=(s-o)*(s-o)+(e-r)*(e-r);if(0===h)return Math.sqrt((t-s)*(t-s)+(i-e)*(i-e));const n=((t-s)*(o-s)+(i-e)*(r-e))/h;let d,a;return n<0?(d=s,a=e):n>1?(d=o,a=r):(d=s+n*(o-s),a=e+n*(r-e)),Math.sqrt((t-d)*(t-d)+(i-a)*(i-a))}_endpointActionHandler(t,i,s,e){var o;const h=i.corner,n=new r(s,e);let d=n.x,a=n.y;if(t.shiftKey){const t="p1"===h?"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"===h?(this.x1=d,this.y1=a):"p2"===h&&(this.x2=d,this.y2=a),this.stroke instanceof y&&!this._exportingSVG&&(this.stroke.coords.x1=this.x1,this.stroke.coords.y1=this.y1,this.stroke.coords.x2=this.x2,this.stroke.coords.y2=this.y2),this.dirty=!0,this.setCoords(),null===(l=this.canvas)||void 0===l||l.requestRenderAll(),!0):(this._updatingEndpoints=!0,"p1"===h?(this.x1=d,this.y1=a):"p2"===h&&(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,r=e-i,h=Math.sqrt(o*o+r*r);if(0===h)return{x:s,y:e};let n=Math.atan2(r,o)*(180/Math.PI);const d=15*Math.round(n/15)*(Math.PI/180);return{x:t+Math.cos(d)*h,y:i+Math.sin(d)*h}}_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 r(t+s/2,i+e/2),a,a)}}_set(t,i){const s=this.left,e=this.top;if(super._set(t,i),m.includes(t)&&(this._setWidthHeight(),this.dirty=!0,this.stroke instanceof y&&!this._exportingSVG&&(this.stroke.coords.x1=this.x1,this.stroke.coords.y1=this.y1,this.stroke.coords.x2=this.x2,this.stroke.coords.y2=this.y2)),("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.stroke instanceof y&&(this.stroke.coords.x1=this.x1,this.stroke.coords.y1=this.y1,this.stroke.coords.x2=this.x2,this.stroke.coords.y2=this.y2),this._updatingEndpoints=!1)}return this}render(t){this._useEndpointCoords?this._renderDirectly(t):super.render(t)}_renderDirectly(t){if(!this.visible)return;t.save(),t.globalAlpha=this.opacity,t.lineWidth=this.strokeWidth,t.lineCap=this.strokeLineCap||"butt",t.beginPath(),t.moveTo(this.x1,this.y1),t.lineTo(this.x2,this.y2);const i=t.strokeStyle;var s;h(this.stroke)?t.strokeStyle=this.stroke.toLive(t):t.strokeStyle=(null===(s=this.stroke)||void 0===s?void 0:s.toString())||"#000";t.stroke(),t.strokeStyle=i,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;h(this.stroke)&&(t.strokeStyle=this.stroke.toLive(t)),this.stroke&&this._renderStroke(t),t.strokeStyle=s}_findCenterFromElement(){return new r((this.x1+this.x2)/2,(this.y1+this.y2)/2)}toObject(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];return this._useEndpointCoords?{...super.toObject(t),x1:this.x1,y1:this.y1,x2:this.x2,y2:this.y2}:{...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:r}=this,h=t<=i?-1:1,n=s<=e?-1:1;return{x1:h*o/2,y1:n*r/2,x2:h*-o/2,y2:n*-r/2}}_toSVG(){if(this._useEndpointCoords){let t="";return t=this.stroke instanceof y?`stroke="url(#${this.stroke.id})"`:`stroke="${this.stroke||"none"}"`,[`<line ${t} stroke-width="${this.strokeWidth}" stroke-linecap="${this.strokeLineCap}" `,`stroke-dasharray="${this.strokeDashArray?this.strokeDashArray.join(" "):"none"}" `,`stroke-dashoffset="${this.strokeDashOffset}" stroke-linejoin="${this.strokeLineJoin}" `,`stroke-miterlimit="${this.strokeMiterLimit}" fill="${this.fill||"none"}" `,`fill-rule="${this.fillRule}" opacity="${this.opacity}" `,`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.left,s=this.top;this.left=(this.x1+this.x2)/2,this.top=(this.y1+this.y2)/2;const e=super.toSVG(t);this.left=i,this.top=s;return e.replace(/<g transform="[^"]*"[^>]*>/g,"").replace(/<\/g>/g,"").replace(/x1="[^"]*"/g,`x1="${this.x1}"`).replace(/y1="[^"]*"/g,`y1="${this.y1}"`).replace(/x2="[^"]*"/g,`x2="${this.x2}"`).replace(/y2="[^"]*"/g,`y2="${this.y2}"`)}return super.toSVG(t)}static async fromElement(t,i,e){const{x1:o=0,y1:r=0,x2:h=0,y2:n=0,...d}=s(t,this.ATTRIBUTE_NAMES,e);return new this([o,r,h,n],d)}static fromObject(t){let{x1:i,y1:s,x2:e,y2:o,...r}=t;return this._fromObject({...r,points:[i,s,e,o]},{extraParam:"points"})}}t(u,"type","Line"),t(u,"cacheProperties",[...c,...m]),t(u,"ATTRIBUTE_NAMES",i.concat(m)),e.setClass(u),e.setSVGClass(u);export{u 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';\nimport { multiplyTransformMatrices } from '../util/misc/matrix';\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 return new Point(this.x1, this.y1).transform(this.getViewportTransform());\n }\n\n _p2PositionHandler() {\n return new Point(this.x2, this.y2).transform(this.getViewportTransform());\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 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 // Only update left/top if they haven't been explicitly set (e.g., during loading)\n if (this.left === 0 && this.top === 0) {\n const center = this._findCenterFromElement();\n this.left = center.x;\n this.top = center.y;\n }\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 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 if (this._useEndpointCoords) {\n return {\n ...super.toObject(propertiesToInclude),\n x1: this.x1,\n y1: this.y1,\n x2: this.x2,\n y2: this.y2,\n };\n }\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","Point","transform","getViewportTransform","ctx","save","fillStyle","strokeStyle","lineWidth","beginPath","arc","size","Math","PI","fill","stroke","restore","drawBorders","styleOverride","_useEndpointCoords","_drawLineBorders","_this$canvas","vpt","canvas","viewportTransform","setTransform","borderColor","strokeWidth","lineCap","globalAlpha","isMoving","borderOpacityWhenMoving","moveTo","lineTo","_renderControls","drawControls","getBoundingRect","effectiveStrokeWidth","padding","max","min","width","abs","height","setCoords","hitPadding","center","_findCenterFromElement","getCoords","deltaX","deltaY","sqrt","halfWidth","perpX","perpY","containsPoint","point","_this$canvas2","getActiveObject","distance","_distanceToLineSegment","px","py","pd2","u","closestX","closestY","eventData","transformData","_this$canvas4","controlKey","corner","pointer","newX","newY","shiftKey","otherControl","otherX","otherY","snapped","_snapToAngle","_this$canvas3","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$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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"}
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';\nimport { Gradient } from '../gradient/Gradient';\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 private _exportingSVG = false;\n\n static type = 'Line';\n static cacheProperties = [...cacheProperties, ...coordProps];\n\n constructor(\n [x1, y1, x2, y2] = [0, 0, 100, 0],\n options: Partial<Props & { hitStrokeWidth?: number | 'auto' }> = {},\n ) {\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 return new Point(this.x1, this.y1).transform(this.getViewportTransform());\n }\n\n _p2PositionHandler() {\n return new Point(this.x2, this.y2).transform(this.getViewportTransform());\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 ||\n this.borderColor ||\n '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' ? this.strokeWidth : 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 width and height for hit detection and bounding box\n const effectiveStrokeWidth =\n this.hitStrokeWidth === 'auto' ? this.strokeWidth : 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 // Only update left/top if they haven't been explicitly set (e.g., during loading)\n if (this.left === 0 && this.top === 0) {\n const center = this._findCenterFromElement();\n this.left = center.x;\n this.top = center.y;\n }\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 =\n this.hitStrokeWidth === 'auto' ? this.strokeWidth : 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 =\n 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,\n y1 = this.y1,\n x2 = this.x2,\n 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(\n (px - closestX) * (px - closestX) + (py - closestY) * (py - closestY),\n );\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\n // Update gradient coordinates if stroke is a gradient (but not during SVG export)\n if (this.stroke instanceof Gradient && !this._exportingSVG) {\n this.stroke.coords.x1 = this.x1;\n this.stroke.coords.y1 = this.y1;\n this.stroke.coords.x2 = this.x2;\n this.stroke.coords.y2 = this.y2;\n }\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', {\n transform: transformData,\n target: this,\n e: eventData,\n });\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 // Update gradient coordinates if stroke is a gradient (but not during SVG export)\n if (this.stroke instanceof Gradient && !this._exportingSVG) {\n this.stroke.coords.x1 = this.x1;\n this.stroke.coords.y1 = this.y1;\n this.stroke.coords.x2 = this.x2;\n this.stroke.coords.y2 = this.y2;\n }\n }\n if (\n (key === 'left' || key === 'top') &&\n this.canvas &&\n !this._updatingEndpoints\n ) {\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\n // Update gradient coordinates if stroke is a gradient\n if (this.stroke instanceof Gradient) {\n this.stroke.coords.x1 = this.x1;\n this.stroke.coords.y1 = this.y1;\n this.stroke.coords.x2 = this.x2;\n this.stroke.coords.y2 = this.y2;\n }\n\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 ctx.globalAlpha = this.opacity;\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\n const origStrokeStyle = ctx.strokeStyle;\n if (isFiller(this.stroke)) {\n ctx.strokeStyle = this.stroke.toLive(ctx)!;\n } else {\n ctx.strokeStyle = this.stroke?.toString() || '#000';\n }\n\n ctx.stroke();\n ctx.strokeStyle = origStrokeStyle;\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 if (this._useEndpointCoords) {\n return {\n ...super.toObject(propertiesToInclude),\n x1: this.x1,\n y1: this.y1,\n x2: this.x2,\n y2: this.y2,\n };\n }\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 // Handle gradients manually for proper SVG export\n let strokeAttr = '';\n if (this.stroke instanceof Gradient) {\n // Let Fabric.js handle gradient definition, but we'll use the reference\n strokeAttr = `stroke=\"url(#${this.stroke.id})\"`;\n } else {\n strokeAttr = `stroke=\"${this.stroke || 'none'}\"`;\n }\n\n return [\n `<line ${strokeAttr} stroke-width=\"${this.strokeWidth}\" stroke-linecap=\"${this.strokeLineCap}\" `,\n `stroke-dasharray=\"${this.strokeDashArray ? this.strokeDashArray.join(' ') : 'none'}\" `,\n `stroke-dashoffset=\"${this.strokeDashOffset}\" stroke-linejoin=\"${this.strokeLineJoin}\" `,\n `stroke-miterlimit=\"${this.strokeMiterLimit}\" fill=\"${this.fill || 'none'}\" `,\n `fill-rule=\"${this.fillRule}\" opacity=\"${this.opacity}\" `,\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 // For endpoint coords, we need to bypass transforms but still allow gradients\n // Let's temporarily disable transforms during SVG generation\n const originalLeft = this.left;\n const originalTop = this.top;\n\n // Set position to center of line for gradient calculation\n this.left = (this.x1 + this.x2) / 2;\n this.top = (this.y1 + this.y2) / 2;\n\n // Get the SVG with standard system (for gradient handling)\n const standardSVG = super.toSVG(reviver);\n\n // Restore original position\n this.left = originalLeft;\n this.top = originalTop;\n\n // Extract gradient definition and clean up the line element\n // Remove the transform wrapper and update coordinates\n const cleanSVG = standardSVG\n .replace(/<g transform=\"[^\"]*\"[^>]*>/g, '')\n .replace(/<\\/g>/g, '')\n .replace(/x1=\"[^\"]*\"/g, `x1=\"${this.x1}\"`)\n .replace(/y1=\"[^\"]*\"/g, `y1=\"${this.y1}\"`)\n .replace(/x2=\"[^\"]*\"/g, `x2=\"${this.x2}\"`)\n .replace(/y2=\"[^\"]*\"/g, `y2=\"${this.y2}\"`);\n\n return cleanSVG;\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);\n"],"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","Point","transform","getViewportTransform","ctx","save","fillStyle","strokeStyle","lineWidth","beginPath","arc","size","Math","PI","fill","stroke","restore","drawBorders","styleOverride","_useEndpointCoords","_drawLineBorders","_this$canvas","vpt","canvas","viewportTransform","setTransform","borderColor","strokeWidth","lineCap","globalAlpha","isMoving","borderOpacityWhenMoving","moveTo","lineTo","_renderControls","drawControls","getBoundingRect","effectiveStrokeWidth","padding","max","min","width","abs","height","setCoords","hitPadding","center","_findCenterFromElement","getCoords","deltaX","deltaY","sqrt","halfWidth","perpX","perpY","containsPoint","point","_this$canvas2","getActiveObject","distance","_distanceToLineSegment","px","py","pd2","u","closestX","closestY","eventData","transformData","_this$canvas4","controlKey","corner","pointer","newX","newY","shiftKey","otherControl","otherX","otherY","snapped","_snapToAngle","_this$canvas3","Gradient","_exportingSVG","coords","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","visible","opacity","origStrokeStyle","_this$stroke","isFiller","toLive","toString","_render","p","calcLinePoints","_renderStroke","toObject","propertiesToInclude","_getNonTransformedDimensions","dim","centerX","centerY","_x1","_x2","_y1","_y2","xMult","yMult","_toSVG","strokeAttr","id","strokeDashArray","join","strokeDashOffset","strokeLineJoin","strokeMiterLimit","fillRule","toSVG","reviver","originalLeft","originalTop","standardSVG","replace","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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"}
@@ -15,6 +15,7 @@ import '../cache.mjs';
15
15
  import '../parser/constants.mjs';
16
16
  import '../util/animation/AnimationRegistry.mjs';
17
17
  import { Control } from '../controls/Control.mjs';
18
+ import { Gradient } from '../gradient/Gradient.mjs';
18
19
  import { cacheProperties } from './Object/defaultValues.mjs';
19
20
 
20
21
  const coordProps = ['x1', 'x2', 'y1', 'y2'];
@@ -26,6 +27,7 @@ class Line extends FabricObject {
26
27
  _defineProperty(this, "hitStrokeWidth", 'auto');
27
28
  _defineProperty(this, "_updatingEndpoints", false);
28
29
  _defineProperty(this, "_useEndpointCoords", true);
30
+ _defineProperty(this, "_exportingSVG", false);
29
31
  this.setOptions(options);
30
32
  this.x1 = x1;
31
33
  this.x2 = x2;
@@ -237,6 +239,14 @@ class Line extends FabricObject {
237
239
  this.x2 = newX;
238
240
  this.y2 = newY;
239
241
  }
242
+
243
+ // Update gradient coordinates if stroke is a gradient (but not during SVG export)
244
+ if (this.stroke instanceof Gradient && !this._exportingSVG) {
245
+ this.stroke.coords.x1 = this.x1;
246
+ this.stroke.coords.y1 = this.y1;
247
+ this.stroke.coords.x2 = this.x2;
248
+ this.stroke.coords.y2 = this.y2;
249
+ }
240
250
  this.dirty = true;
241
251
  this.setCoords();
242
252
  (_this$canvas3 = this.canvas) === null || _this$canvas3 === void 0 || _this$canvas3.requestRenderAll();
@@ -307,6 +317,14 @@ class Line extends FabricObject {
307
317
  if (coordProps.includes(key)) {
308
318
  this._setWidthHeight();
309
319
  this.dirty = true;
320
+
321
+ // Update gradient coordinates if stroke is a gradient (but not during SVG export)
322
+ if (this.stroke instanceof Gradient && !this._exportingSVG) {
323
+ this.stroke.coords.x1 = this.x1;
324
+ this.stroke.coords.y1 = this.y1;
325
+ this.stroke.coords.x2 = this.x2;
326
+ this.stroke.coords.y2 = this.y2;
327
+ }
310
328
  }
311
329
  if ((key === 'left' || key === 'top') && this.canvas && !this._updatingEndpoints) {
312
330
  const deltaX = this.left - oldLeft;
@@ -317,6 +335,14 @@ class Line extends FabricObject {
317
335
  this.y1 += deltaY;
318
336
  this.x2 += deltaX;
319
337
  this.y2 += deltaY;
338
+
339
+ // Update gradient coordinates if stroke is a gradient
340
+ if (this.stroke instanceof Gradient) {
341
+ this.stroke.coords.x1 = this.x1;
342
+ this.stroke.coords.y1 = this.y1;
343
+ this.stroke.coords.x2 = this.x2;
344
+ this.stroke.coords.y2 = this.y2;
345
+ }
320
346
  this._updatingEndpoints = false;
321
347
  }
322
348
  }
@@ -330,17 +356,23 @@ class Line extends FabricObject {
330
356
  super.render(ctx);
331
357
  }
332
358
  _renderDirectly(ctx) {
333
- var _this$stroke;
334
359
  if (!this.visible) return;
335
360
  ctx.save();
336
361
  ctx.globalAlpha = this.opacity;
337
- ctx.strokeStyle = ((_this$stroke = this.stroke) === null || _this$stroke === void 0 ? void 0 : _this$stroke.toString()) || '#000';
338
362
  ctx.lineWidth = this.strokeWidth;
339
363
  ctx.lineCap = this.strokeLineCap || 'butt';
340
364
  ctx.beginPath();
341
365
  ctx.moveTo(this.x1, this.y1);
342
366
  ctx.lineTo(this.x2, this.y2);
367
+ const origStrokeStyle = ctx.strokeStyle;
368
+ if (isFiller(this.stroke)) {
369
+ ctx.strokeStyle = this.stroke.toLive(ctx);
370
+ } else {
371
+ var _this$stroke;
372
+ ctx.strokeStyle = ((_this$stroke = this.stroke) === null || _this$stroke === void 0 ? void 0 : _this$stroke.toString()) || '#000';
373
+ }
343
374
  ctx.stroke();
375
+ ctx.strokeStyle = origStrokeStyle;
344
376
  ctx.restore();
345
377
  }
346
378
  _render(ctx) {
@@ -415,7 +447,15 @@ class Line extends FabricObject {
415
447
  _toSVG() {
416
448
  if (this._useEndpointCoords) {
417
449
  // Use absolute coordinates to bypass all Fabric.js transforms
418
- 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`];
450
+ // Handle gradients manually for proper SVG export
451
+ let strokeAttr = '';
452
+ if (this.stroke instanceof Gradient) {
453
+ // Let Fabric.js handle gradient definition, but we'll use the reference
454
+ strokeAttr = `stroke="url(#${this.stroke.id})"`;
455
+ } else {
456
+ strokeAttr = `stroke="${this.stroke || 'none'}"`;
457
+ }
458
+ return [`<line ${strokeAttr} stroke-width="${this.strokeWidth}" stroke-linecap="${this.strokeLineCap}" `, `stroke-dasharray="${this.strokeDashArray ? this.strokeDashArray.join(' ') : 'none'}" `, `stroke-dashoffset="${this.strokeDashOffset}" stroke-linejoin="${this.strokeLineJoin}" `, `stroke-miterlimit="${this.strokeMiterLimit}" fill="${this.fill || 'none'}" `, `fill-rule="${this.fillRule}" opacity="${this.opacity}" `, `x1="${this.x1}" y1="${this.y1}" x2="${this.x2}" y2="${this.y2}" />\n`];
419
459
  } else {
420
460
  // Use standard calcLinePoints for legacy mode
421
461
  const {
@@ -429,9 +469,26 @@ class Line extends FabricObject {
429
469
  }
430
470
  toSVG(reviver) {
431
471
  if (this._useEndpointCoords) {
432
- // Override toSVG to prevent Fabric.js from adding transform wrapper
433
- const markup = this._toSVG().join('');
434
- return reviver ? reviver(markup) : markup;
472
+ // For endpoint coords, we need to bypass transforms but still allow gradients
473
+ // Let's temporarily disable transforms during SVG generation
474
+ const originalLeft = this.left;
475
+ const originalTop = this.top;
476
+
477
+ // Set position to center of line for gradient calculation
478
+ this.left = (this.x1 + this.x2) / 2;
479
+ this.top = (this.y1 + this.y2) / 2;
480
+
481
+ // Get the SVG with standard system (for gradient handling)
482
+ const standardSVG = super.toSVG(reviver);
483
+
484
+ // Restore original position
485
+ this.left = originalLeft;
486
+ this.top = originalTop;
487
+
488
+ // Extract gradient definition and clean up the line element
489
+ // Remove the transform wrapper and update coordinates
490
+ const cleanSVG = standardSVG.replace(/<g transform="[^"]*"[^>]*>/g, '').replace(/<\/g>/g, '').replace(/x1="[^"]*"/g, `x1="${this.x1}"`).replace(/y1="[^"]*"/g, `y1="${this.y1}"`).replace(/x2="[^"]*"/g, `x2="${this.x2}"`).replace(/y2="[^"]*"/g, `y2="${this.y2}"`);
491
+ return cleanSVG;
435
492
  }
436
493
  // Use default behavior for legacy mode
437
494
  return super.toSVG(reviver);
@@ -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';\nimport { multiplyTransformMatrices } from '../util/misc/matrix';\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 return new Point(this.x1, this.y1).transform(this.getViewportTransform());\n }\n\n _p2PositionHandler() {\n return new Point(this.x2, this.y2).transform(this.getViewportTransform());\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 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 // Only update left/top if they haven't been explicitly set (e.g., during loading)\n if (this.left === 0 && this.top === 0) {\n const center = this._findCenterFromElement();\n this.left = center.x;\n this.top = center.y;\n }\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 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 if (this._useEndpointCoords) {\n return {\n ...super.toObject(propertiesToInclude),\n x1: this.x1,\n y1: this.y1,\n x2: this.x2,\n y2: this.y2,\n };\n }\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","Point","transform","getViewportTransform","ctx","size","save","fillStyle","strokeStyle","lineWidth","beginPath","arc","Math","PI","fill","stroke","restore","drawBorders","styleOverride","_useEndpointCoords","_drawLineBorders","_this$canvas","vpt","canvas","viewportTransform","setTransform","borderColor","strokeWidth","lineCap","globalAlpha","isMoving","borderOpacityWhenMoving","moveTo","lineTo","_renderControls","drawControls","getBoundingRect","effectiveStrokeWidth","padding","max","min","width","abs","height","setCoords","hitPadding","center","_findCenterFromElement","getCoords","deltaX","deltaY","sqrt","halfWidth","perpX","perpY","containsPoint","point","_this$canvas2","getActiveObject","distance","_distanceToLineSegment","tolerance","px","py","pd2","u","closestX","closestY","eventData","transformData","_this$canvas4","controlKey","corner","pointer","newX","newY","shiftKey","otherControl","otherX","otherY","snapped","_snapToAngle","_this$canvas3","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$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":";;;;;;;;;;;;;;;;;;;AAgBA,MAAMA,UAAU,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAU;AAa7C,MAAMC,IAAI,SAKPC,YAAY,CAEtB;AAcEC,EAAAA,WAAWA,GAAuG;AAAA,IAAA,IAAtG,CAACC,EAAE,EAAEC,EAAE,EAAEC,EAAE,EAAEC,EAAE,CAAC,GAAAC,SAAA,CAAAC,MAAA,GAAA,CAAA,IAAAD,SAAA,CAAA,CAAA,CAAA,KAAAE,SAAA,GAAAF,SAAA,CAAA,CAAA,CAAA,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;AAAA,IAAA,IAAEG,OAA4D,GAAAH,SAAA,CAAAC,MAAA,GAAA,CAAA,IAAAD,SAAA,CAAA,CAAA,CAAA,KAAAE,SAAA,GAAAF,SAAA,CAAA,CAAA,CAAA,GAAG,EAAE;AAC9G,IAAA,KAAK,EAAE;AAACI,IAAAA,eAAA,yBATwB,MAAM,CAAA;AAAAA,IAAAA,eAAA,6BAEX,KAAK,CAAA;AAAAA,IAAAA,eAAA,6BACL,IAAI,CAAA;AAO/B,IAAA,IAAI,CAACC,UAAU,CAACF,OAAO,CAAC;IACxB,IAAI,CAACP,EAAE,GAAGA,EAAE;IACZ,IAAI,CAACE,EAAE,GAAGA,EAAE;IACZ,IAAI,CAACD,EAAE,GAAGA,EAAE;IACZ,IAAI,CAACE,EAAE,GAAGA,EAAE;AAEZ,IAAA,IAAII,OAAO,CAACG,cAAc,KAAKJ,SAAS,EAAE;AACxC,MAAA,IAAI,CAACI,cAAc,GAAGH,OAAO,CAACG,cAAc;AAC9C,IAAA;IAEA,IAAI,CAACC,UAAU,GAAG,KAAK;IACvB,IAAI,CAACC,WAAW,GAAG,IAAI;IACvB,IAAI,CAACC,UAAU,GAAG,IAAI;IACtB,IAAI,CAACC,WAAW,GAAG,MAAM;IACzB,IAAI,CAACC,kBAAkB,GAAG,KAAK;IAC/B,IAAI,CAACC,aAAa,GAAG,MAAM;IAE3B,IAAI,CAACC,eAAe,EAAE;IACtB,MAAM;MAAEC,IAAI;AAAEC,MAAAA;AAAI,KAAC,GAAGZ,OAAO;IAC7B,OAAOW,IAAI,KAAK,QAAQ,IAAI,IAAI,CAACE,GAAG,CAACC,IAAI,EAAEH,IAAI,CAAC;IAChD,OAAOC,GAAG,KAAK,QAAQ,IAAI,IAAI,CAACC,GAAG,CAACE,GAAG,EAAEH,GAAG,CAAC;IAC7C,IAAI,CAACI,kBAAkB,EAAE;AAC3B,EAAA;AAEAA,EAAAA,kBAAkBA,GAAG;IACnB,IAAI,CAACC,QAAQ,GAAG;MACdC,EAAE,EAAE,IAAIC,OAAO,CAAC;AACdC,QAAAA,CAAC,EAAE,CAAC;AACJC,QAAAA,CAAC,EAAE,CAAC;AACJC,QAAAA,WAAW,EAAE,MAAM;QACnBC,aAAa,EAAE,IAAI,CAACC,sBAAsB,CAACC,IAAI,CAAC,IAAI,CAAC;QACrDC,eAAe,EAAE,IAAI,CAACC,kBAAkB,CAACF,IAAI,CAAC,IAAI,CAAC;QACnDG,MAAM,EAAE,IAAI,CAACC,sBAAsB,CAACJ,IAAI,CAAC,IAAI,CAAC;AAC9CK,QAAAA,KAAK,EAAE,EAAE;AACTC,QAAAA,KAAK,EAAE;AACT,OAAC,CAAC;MACFC,EAAE,EAAE,IAAIb,OAAO,CAAC;AACdC,QAAAA,CAAC,EAAE,CAAC;AACJC,QAAAA,CAAC,EAAE,CAAC;AACJC,QAAAA,WAAW,EAAE,MAAM;QACnBC,aAAa,EAAE,IAAI,CAACC,sBAAsB,CAACC,IAAI,CAAC,IAAI,CAAC;QACrDC,eAAe,EAAE,IAAI,CAACO,kBAAkB,CAACR,IAAI,CAAC,IAAI,CAAC;QACnDG,MAAM,EAAE,IAAI,CAACC,sBAAsB,CAACJ,IAAI,CAAC,IAAI,CAAC;AAC9CK,QAAAA,KAAK,EAAE,EAAE;AACTC,QAAAA,KAAK,EAAE;OACR;KACF;AACH,EAAA;AAEAJ,EAAAA,kBAAkBA,GAAG;AACnB,IAAA,OAAO,IAAIO,KAAK,CAAC,IAAI,CAACzC,EAAE,EAAE,IAAI,CAACC,EAAE,CAAC,CAACyC,SAAS,CAAC,IAAI,CAACC,oBAAoB,EAAE,CAAC;AAC3E,EAAA;AAEAH,EAAAA,kBAAkBA,GAAG;AACnB,IAAA,OAAO,IAAIC,KAAK,CAAC,IAAI,CAACvC,EAAE,EAAE,IAAI,CAACC,EAAE,CAAC,CAACuC,SAAS,CAAC,IAAI,CAACC,oBAAoB,EAAE,CAAC;AAC3E,EAAA;AAEAP,EAAAA,sBAAsBA,CACpBQ,GAA6B,EAC7B1B,IAAY,EACZC,GAAW,EACX;IACA,MAAM0B,IAAI,GAAG,EAAE;IACfD,GAAG,CAACE,IAAI,EAAE;IACVF,GAAG,CAACG,SAAS,GAAG,SAAS;IACzBH,GAAG,CAACI,WAAW,GAAG,SAAS;IAC3BJ,GAAG,CAACK,SAAS,GAAG,CAAC;IACjBL,GAAG,CAACM,SAAS,EAAE;AACfN,IAAAA,GAAG,CAACO,GAAG,CAACjC,IAAI,EAAEC,GAAG,EAAE0B,IAAI,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,GAAGO,IAAI,CAACC,EAAE,CAAC;IAC5CT,GAAG,CAACU,IAAI,EAAE;IACVV,GAAG,CAACW,MAAM,EAAE;IACZX,GAAG,CAACY,OAAO,EAAE;AACf,EAAA;EAEAC,WAAWA,CAACb,GAA6B,EAA2B;AAAA,IAAA,IAAzBc,aAAkB,GAAAtD,SAAA,CAAAC,MAAA,GAAA,CAAA,IAAAD,SAAA,CAAA,CAAA,CAAA,KAAAE,SAAA,GAAAF,SAAA,CAAA,CAAA,CAAA,GAAG,EAAE;IAChE,IAAI,IAAI,CAACuD,kBAAkB,EAAE;AAC3B,MAAA,IAAI,CAACC,gBAAgB,CAAChB,GAAG,EAAEc,aAAa,CAAC;AACzC,MAAA,OAAO,IAAI;AACb,IAAA;IACA,OAAO,KAAK,CAACD,WAAW,CAACb,GAAG,EAAEc,aAAa,EAAE,EAAE,CAAC;AAClD,EAAA;EAEAE,gBAAgBA,CAAChB,GAA6B,EAA2B;AAAA,IAAA,IAAAiB,YAAA;AAAA,IAAA,IAAzBH,aAAkB,GAAAtD,SAAA,CAAAC,MAAA,GAAA,CAAA,IAAAD,SAAA,CAAA,CAAA,CAAA,KAAAE,SAAA,GAAAF,SAAA,CAAA,CAAA,CAAA,GAAG,EAAE;IACrE,MAAM0D,GAAG,GAAG,CAAA,CAAAD,YAAA,GAAA,IAAI,CAACE,MAAM,MAAA,IAAA,IAAAF,YAAA,KAAA,MAAA,GAAA,MAAA,GAAXA,YAAA,CAAaG,iBAAiB,KAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAChEpB,GAAG,CAACE,IAAI,EAAE;AACVF,IAAAA,GAAG,CAACqB,YAAY,CAACH,GAAG,CAAC,CAAC,CAAC,EAAEA,GAAG,CAAC,CAAC,CAAC,EAAEA,GAAG,CAAC,CAAC,CAAC,EAAEA,GAAG,CAAC,CAAC,CAAC,EAAEA,GAAG,CAAC,CAAC,CAAC,EAAEA,GAAG,CAAC,CAAC,CAAC,CAAC;IAChElB,GAAG,CAACI,WAAW,GACbU,aAAa,CAACQ,WAAW,IAAI,IAAI,CAACA,WAAW,IAAI,0BAA0B;IAC7EtB,GAAG,CAACK,SAAS,GAAG,CAAC,IAAI,CAACkB,WAAW,IAAI,CAAC,IAAI,CAAC;AAC3CvB,IAAAA,GAAG,CAACwB,OAAO,GAAG,IAAI,CAACpD,aAAa,IAAI,MAAM;IAC1C4B,GAAG,CAACyB,WAAW,GAAG,IAAI,CAACC,QAAQ,GAAG,IAAI,CAACC,uBAAuB,GAAG,CAAC;IAClE3B,GAAG,CAACM,SAAS,EAAE;IACfN,GAAG,CAAC4B,MAAM,CAAC,IAAI,CAACxE,EAAE,EAAE,IAAI,CAACC,EAAE,CAAC;IAC5B2C,GAAG,CAAC6B,MAAM,CAAC,IAAI,CAACvE,EAAE,EAAE,IAAI,CAACC,EAAE,CAAC;IAC5ByC,GAAG,CAACW,MAAM,EAAE;IACZX,GAAG,CAACY,OAAO,EAAE;AACf,EAAA;EAEAkB,eAAeA,CAAC9B,GAA6B,EAA2B;AAAA,IAAA,IAAzBc,aAAkB,GAAAtD,SAAA,CAAAC,MAAA,GAAA,CAAA,IAAAD,SAAA,CAAA,CAAA,CAAA,KAAAE,SAAA,GAAAF,SAAA,CAAA,CAAA,CAAA,GAAG,EAAE;IACpEwC,GAAG,CAACE,IAAI,EAAE;IACVF,GAAG,CAACyB,WAAW,GAAG,IAAI,CAACC,QAAQ,GAAG,IAAI,CAACC,uBAAuB,GAAG,CAAC;AAClE,IAAA,IAAI,CAACI,YAAY,CAAC/B,GAAG,EAAEc,aAAa,CAAC;IACrCd,GAAG,CAACY,OAAO,EAAE;AACf,EAAA;AAEAoB,EAAAA,eAAeA,GAAG;IAChB,IAAI,IAAI,CAACjB,kBAAkB,EAAE;MAC3B,MAAM;QAAE3D,EAAE;QAAEC,EAAE;QAAEC,EAAE;AAAEC,QAAAA;AAAG,OAAC,GAAG,IAAI;AAC/B,MAAA,MAAM0E,oBAAoB,GACxB,IAAI,CAACnE,cAAc,KAAK,MAAM,GAC1B,IAAI,CAACyD,WAAW,GAChB,IAAI,CAACzD,cAAc;AACzB,MAAA,MAAMoE,OAAO,GAAG1B,IAAI,CAAC2B,GAAG,CAACF,oBAAoB,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;MAC1D,OAAO;QACL3D,IAAI,EAAEkC,IAAI,CAAC4B,GAAG,CAAChF,EAAE,EAAEE,EAAE,CAAC,GAAG4E,OAAO;QAChC3D,GAAG,EAAEiC,IAAI,CAAC4B,GAAG,CAAC/E,EAAE,EAAEE,EAAE,CAAC,GAAG2E,OAAO;AAC/BG,QAAAA,KAAK,EAAE7B,IAAI,CAAC8B,GAAG,CAAChF,EAAE,GAAGF,EAAE,CAAC,GAAG8E,OAAO,GAAG,CAAC,IAAIA,OAAO,GAAG,CAAC;AACrDK,QAAAA,MAAM,EAAE/B,IAAI,CAAC8B,GAAG,CAAC/E,EAAE,GAAGF,EAAE,CAAC,GAAG6E,OAAO,GAAG,CAAC,IAAIA,OAAO,GAAG;OACtD;AACH,IAAA;AACA,IAAA,OAAO,KAAK,CAACF,eAAe,EAAE;AAChC,EAAA;AAEAQ,EAAAA,SAASA,GAAG;IACV,IAAI,IAAI,CAACzB,kBAAkB,EAAE;AAC3B;AACA,MAAA,MAAMkB,oBAAoB,GACxB,IAAI,CAACnE,cAAc,KAAK,MAAM,GAC1B,IAAI,CAACyD,WAAW,GAChB,IAAI,CAACzD,cAAc;AACzB,MAAA,MAAM2E,UAAU,GAAGjC,IAAI,CAAC2B,GAAG,CAACF,oBAAoB,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;AAC7D,MAAA,IAAI,CAACI,KAAK,GAAG7B,IAAI,CAAC8B,GAAG,CAAC,IAAI,CAAChF,EAAE,GAAG,IAAI,CAACF,EAAE,CAAC,GAAGqF,UAAU,GAAG,CAAC;AACzD,MAAA,IAAI,CAACF,MAAM,GAAG/B,IAAI,CAAC8B,GAAG,CAAC,IAAI,CAAC/E,EAAE,GAAG,IAAI,CAACF,EAAE,CAAC,GAAGoF,UAAU,GAAG,CAAC;;AAE1D;MACA,IAAI,IAAI,CAACnE,IAAI,KAAK,CAAC,IAAI,IAAI,CAACC,GAAG,KAAK,CAAC,EAAE;AACrC,QAAA,MAAMmE,MAAM,GAAG,IAAI,CAACC,sBAAsB,EAAE;AAC5C,QAAA,IAAI,CAACrE,IAAI,GAAGoE,MAAM,CAAC3D,CAAC;AACpB,QAAA,IAAI,CAACR,GAAG,GAAGmE,MAAM,CAAC1D,CAAC;AACrB,MAAA;AACF,IAAA;IACA,KAAK,CAACwD,SAAS,EAAE;AACnB,EAAA;AAEAI,EAAAA,SAASA,GAAiC;IACxC,IAAI,IAAI,CAAC7B,kBAAkB,EAAE;MAC3B,MAAM8B,MAAM,GAAG,IAAI,CAACvF,EAAE,GAAG,IAAI,CAACF,EAAE;MAChC,MAAM0F,MAAM,GAAG,IAAI,CAACvF,EAAE,GAAG,IAAI,CAACF,EAAE;AAChC,MAAA,MAAMI,MAAM,GAAG+C,IAAI,CAACuC,IAAI,CAACF,MAAM,GAAGA,MAAM,GAAGC,MAAM,GAAGA,MAAM,CAAC;MAE3D,IAAIrF,MAAM,KAAK,CAAC,EAAE;AAChB,QAAA,OAAO,KAAK,CAACmF,SAAS,EAAE;AAC1B,MAAA;AAEA,MAAA,MAAMX,oBAAoB,GAAG,IAAI,CAACnE,cAAc,KAAK,MAAM,GACvD,IAAI,CAACyD,WAAW,GAChB,IAAI,CAACzD,cAAc;AACvB,MAAA,MAAMkF,SAAS,GAAGxC,IAAI,CAAC2B,GAAG,CAACF,oBAAoB,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;;AAE3D;AACA,MAAA,MAAMgB,KAAK,GAAG,CAACH,MAAM,GAAGrF,MAAM;AAC9B,MAAA,MAAMyF,KAAK,GAAGL,MAAM,GAAGpF,MAAM;;AAE7B;AACA,MAAA,OAAO,CACL,IAAIoC,KAAK,CAAC,IAAI,CAACzC,EAAE,GAAG6F,KAAK,GAAGD,SAAS,EAAE,IAAI,CAAC3F,EAAE,GAAG6F,KAAK,GAAGF,SAAS,CAAC,EACnE,IAAInD,KAAK,CAAC,IAAI,CAACvC,EAAE,GAAG2F,KAAK,GAAGD,SAAS,EAAE,IAAI,CAACzF,EAAE,GAAG2F,KAAK,GAAGF,SAAS,CAAC,EACnE,IAAInD,KAAK,CAAC,IAAI,CAACvC,EAAE,GAAG2F,KAAK,GAAGD,SAAS,EAAE,IAAI,CAACzF,EAAE,GAAG2F,KAAK,GAAGF,SAAS,CAAC,EACnE,IAAInD,KAAK,CAAC,IAAI,CAACzC,EAAE,GAAG6F,KAAK,GAAGD,SAAS,EAAE,IAAI,CAAC3F,EAAE,GAAG6F,KAAK,GAAGF,SAAS,CAAC,CACpE;AACH,IAAA;AACA,IAAA,OAAO,KAAK,CAACJ,SAAS,EAAE;AAC1B,EAAA;EAEAO,aAAaA,CAACC,KAAY,EAAW;IACnC,IAAI,IAAI,CAACrC,kBAAkB,EAAE;AAAA,MAAA,IAAAsC,aAAA;AAC3B,MAAA,IAAI,CAAA,CAAAA,aAAA,GAAA,IAAI,CAAClC,MAAM,MAAA,IAAA,IAAAkC,aAAA,KAAA,MAAA,GAAA,MAAA,GAAXA,aAAA,CAAaC,eAAe,EAAE,MAAK,IAAI,EAAE;AAC3C,QAAA,OAAO,KAAK,CAACH,aAAa,CAACC,KAAK,CAAC;AACnC,MAAA;AACA,MAAA,MAAMG,QAAQ,GAAG,IAAI,CAACC,sBAAsB,CAACJ,KAAK,CAACrE,CAAC,EAAEqE,KAAK,CAACpE,CAAC,CAAC;AAC9D,MAAA,MAAMiD,oBAAoB,GAAG,IAAI,CAACnE,cAAc,KAAK,MAAM,GACvD,IAAI,CAACyD,WAAW,GAChB,IAAI,CAACzD,cAAc,IAAI,CAAC;AAE5B,MAAA,MAAM2F,SAAS,GAAGjD,IAAI,CAAC2B,GAAG,CAACF,oBAAoB,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;MAC3D,OAAOsB,QAAQ,IAAIE,SAAS;AAC9B,IAAA;AACA,IAAA,OAAO,KAAK,CAACN,aAAa,CAACC,KAAK,CAAC;AACnC,EAAA;AAEAI,EAAAA,sBAAsBA,CAACE,EAAU,EAAEC,EAAU,EAAU;AACrD,IAAA,MAAMvG,EAAE,GAAG,IAAI,CAACA,EAAE;MAAEC,EAAE,GAAG,IAAI,CAACA,EAAE;MAAEC,EAAE,GAAG,IAAI,CAACA,EAAE;MAAEC,EAAE,GAAG,IAAI,CAACA,EAAE;IAE5D,MAAMqG,GAAG,GAAG,CAACxG,EAAE,GAAGE,EAAE,KAAKF,EAAE,GAAGE,EAAE,CAAC,GAAG,CAACD,EAAE,GAAGE,EAAE,KAAKF,EAAE,GAAGE,EAAE,CAAC;IACzD,IAAIqG,GAAG,KAAK,CAAC,EAAE;MACb,OAAOpD,IAAI,CAACuC,IAAI,CAAC,CAACW,EAAE,GAAGtG,EAAE,KAAKsG,EAAE,GAAGtG,EAAE,CAAC,GAAG,CAACuG,EAAE,GAAGtG,EAAE,KAAKsG,EAAE,GAAGtG,EAAE,CAAC,CAAC;AACjE,IAAA;IAEA,MAAMwG,CAAC,GAAG,CAAC,CAACH,EAAE,GAAGtG,EAAE,KAAKE,EAAE,GAAGF,EAAE,CAAC,GAAG,CAACuG,EAAE,GAAGtG,EAAE,KAAKE,EAAE,GAAGF,EAAE,CAAC,IAAIuG,GAAG;IAE/D,IAAIE,QAAgB,EAAEC,QAAgB;IACtC,IAAIF,CAAC,GAAG,CAAC,EAAE;AACTC,MAAAA,QAAQ,GAAG1G,EAAE;AACb2G,MAAAA,QAAQ,GAAG1G,EAAE;AACf,IAAA,CAAC,MAAM,IAAIwG,CAAC,GAAG,CAAC,EAAE;AAChBC,MAAAA,QAAQ,GAAGxG,EAAE;AACbyG,MAAAA,QAAQ,GAAGxG,EAAE;AACf,IAAA,CAAC,MAAM;MACLuG,QAAQ,GAAG1G,EAAE,GAAGyG,CAAC,IAAIvG,EAAE,GAAGF,EAAE,CAAC;MAC7B2G,QAAQ,GAAG1G,EAAE,GAAGwG,CAAC,IAAItG,EAAE,GAAGF,EAAE,CAAC;AAC/B,IAAA;IAEA,OAAOmD,IAAI,CAACuC,IAAI,CAAC,CAACW,EAAE,GAAGI,QAAQ,KAAKJ,EAAE,GAAGI,QAAQ,CAAC,GAAG,CAACH,EAAE,GAAGI,QAAQ,KAAKJ,EAAE,GAAGI,QAAQ,CAAC,CAAC;AACzF,EAAA;EAEA5E,sBAAsBA,CACpB6E,SAAwB,EACxBC,aAAwB,EACxBlF,CAAS,EACTC,CAAS,EACT;AAAA,IAAA,IAAAkF,aAAA;AACA,IAAA,MAAMC,UAAU,GAAGF,aAAa,CAACG,MAAM;IACvC,MAAMC,OAAO,GAAG,IAAIxE,KAAK,CAACd,CAAC,EAAEC,CAAC,CAAC;AAC/B,IAAA,IAAIsF,IAAI,GAAGD,OAAO,CAACtF,CAAC;AACpB,IAAA,IAAIwF,IAAI,GAAGF,OAAO,CAACrF,CAAC;IAEpB,IAAIgF,SAAS,CAACQ,QAAQ,EAAE;MACtB,MAAMC,YAAY,GAAGN,UAAU,KAAK,IAAI,GAAG,IAAI,GAAG,IAAI;MACtD,MAAMO,MAAM,GAAG,IAAI,CAACD,YAAY,KAAK,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;MACxD,MAAME,MAAM,GAAG,IAAI,CAACF,YAAY,KAAK,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AACxD,MAAA,MAAMG,OAAO,GAAG,IAAI,CAACC,YAAY,CAACH,MAAM,EAAEC,MAAM,EAAEL,IAAI,EAAEC,IAAI,CAAC;MAC7DD,IAAI,GAAGM,OAAO,CAAC7F,CAAC;MAChBwF,IAAI,GAAGK,OAAO,CAAC5F,CAAC;AAClB,IAAA;IAEA,IAAI,IAAI,CAAC+B,kBAAkB,EAAE;AAAA,MAAA,IAAA+D,aAAA;MAC3B,IAAIX,UAAU,KAAK,IAAI,EAAE;QACvB,IAAI,CAAC/G,EAAE,GAAGkH,IAAI;QACd,IAAI,CAACjH,EAAE,GAAGkH,IAAI;AAChB,MAAA,CAAC,MAAM,IAAIJ,UAAU,KAAK,IAAI,EAAE;QAC9B,IAAI,CAAC7G,EAAE,GAAGgH,IAAI;QACd,IAAI,CAAC/G,EAAE,GAAGgH,IAAI;AAChB,MAAA;MACA,IAAI,CAACQ,KAAK,GAAG,IAAI;MACjB,IAAI,CAACvC,SAAS,EAAE;MAChB,CAAAsC,aAAA,GAAA,IAAI,CAAC3D,MAAM,MAAA,IAAA,IAAA2D,aAAA,KAAA,MAAA,IAAXA,aAAA,CAAaE,gBAAgB,EAAE;AAC/B,MAAA,OAAO,IAAI;AACb,IAAA;;AAEA;IACA,IAAI,CAACC,kBAAkB,GAAG,IAAI;IAC9B,IAAId,UAAU,KAAK,IAAI,EAAE;MACvB,IAAI,CAAC/G,EAAE,GAAGkH,IAAI;MACd,IAAI,CAACjH,EAAE,GAAGkH,IAAI;AAChB,IAAA,CAAC,MAAM,IAAIJ,UAAU,KAAK,IAAI,EAAE;MAC9B,IAAI,CAAC7G,EAAE,GAAGgH,IAAI;MACd,IAAI,CAAC/G,EAAE,GAAGgH,IAAI;AAChB,IAAA;IACA,IAAI,CAAClG,eAAe,EAAE;IACtB,IAAI,CAAC0G,KAAK,GAAG,IAAI;IACjB,IAAI,CAACE,kBAAkB,GAAG,KAAK;IAC/B,CAAAf,aAAA,GAAA,IAAI,CAAC/C,MAAM,MAAA,IAAA,IAAA+C,aAAA,KAAA,MAAA,IAAXA,aAAA,CAAac,gBAAgB,EAAE;AAC/B,IAAA,IAAI,CAACE,IAAI,CAAC,UAAU,EAAE;AAAEpF,MAAAA,SAAS,EAAEmE,aAAa;AAAEkB,MAAAA,MAAM,EAAE,IAAI;AAAEC,MAAAA,CAAC,EAAEpB;AAAU,KAAC,CAAC;AAC/E,IAAA,OAAO,IAAI;AACb,EAAA;EAEAa,YAAYA,CACVQ,KAAa,EACbC,KAAa,EACbC,GAAW,EACXC,GAAW,EACe;AAC1B,IAAA,MAAM3C,MAAM,GAAG0C,GAAG,GAAGF,KAAK;AAC1B,IAAA,MAAMvC,MAAM,GAAG0C,GAAG,GAAGF,KAAK;AAC1B,IAAA,MAAM/B,QAAQ,GAAG/C,IAAI,CAACuC,IAAI,CAACF,MAAM,GAAGA,MAAM,GAAGC,MAAM,GAAGA,MAAM,CAAC;AAC7D,IAAA,IAAIS,QAAQ,KAAK,CAAC,EAAE,OAAO;AAAExE,MAAAA,CAAC,EAAEwG,GAAG;AAAEvG,MAAAA,CAAC,EAAEwG;KAAK;AAC7C,IAAA,IAAIC,KAAK,GAAGjF,IAAI,CAACkF,KAAK,CAAC5C,MAAM,EAAED,MAAM,CAAC,IAAI,GAAG,GAAGrC,IAAI,CAACC,EAAE,CAAC;IACxD,MAAMkF,aAAa,GAAG,EAAE;IACxB,MAAMC,YAAY,GAAGpF,IAAI,CAACqF,KAAK,CAACJ,KAAK,GAAGE,aAAa,CAAC,GAAGA,aAAa;IACtE,MAAMG,cAAc,GAAGF,YAAY,IAAIpF,IAAI,CAACC,EAAE,GAAG,GAAG,CAAC;IACrD,OAAO;MACL1B,CAAC,EAAEsG,KAAK,GAAG7E,IAAI,CAACuF,GAAG,CAACD,cAAc,CAAC,GAAGvC,QAAQ;MAC9CvE,CAAC,EAAEsG,KAAK,GAAG9E,IAAI,CAACwF,GAAG,CAACF,cAAc,CAAC,GAAGvC;KACvC;AACH,EAAA;AAEAlF,EAAAA,eAAeA,GAAyB;AAAA,IAAA,IAAxB4H,cAAc,GAAAzI,SAAA,CAAAC,MAAA,GAAA,CAAA,IAAAD,SAAA,CAAA,CAAA,CAAA,KAAAE,SAAA,GAAAF,SAAA,CAAA,CAAA,CAAA,GAAG,KAAK;AACpC,IAAA,IAAI,CAAC6E,KAAK,GAAG7B,IAAI,CAAC8B,GAAG,CAAC,IAAI,CAAChF,EAAE,GAAG,IAAI,CAACF,EAAE,CAAC,IAAI,CAAC;AAC7C,IAAA,IAAI,CAACmF,MAAM,GAAG/B,IAAI,CAAC8B,GAAG,CAAC,IAAI,CAAC/E,EAAE,GAAG,IAAI,CAACF,EAAE,CAAC,IAAI,CAAC;AAC9C,IAAA,IAAI,CAAC4I,cAAc,IAAI,CAAC,IAAI,CAAChB,kBAAkB,EAAE;MAC/C,MAAM;QAAE3G,IAAI;QAAEC,GAAG;QAAE8D,KAAK;AAAEE,QAAAA;OAAQ,GAAG2D,yBAAyB,CAAC,CAC7D;QAAEnH,CAAC,EAAE,IAAI,CAAC3B,EAAE;QAAE4B,CAAC,EAAE,IAAI,CAAC3B;AAAG,OAAC,EAC1B;QAAE0B,CAAC,EAAE,IAAI,CAACzB,EAAE;QAAE0B,CAAC,EAAE,IAAI,CAACzB;AAAG,OAAC,CAC3B,CAAC;MACF,IAAI,CAAC4I,mBAAmB,CACtB,IAAItG,KAAK,CAACvB,IAAI,GAAG+D,KAAK,GAAG,CAAC,EAAE9D,GAAG,GAAGgE,MAAM,GAAG,CAAC,CAAC,EAC7C6D,MAAM,EACNA,MACF,CAAC;AACH,IAAA;AACF,EAAA;AAEAC,EAAAA,IAAIA,CAACC,GAAW,EAAEC,KAAU,EAAE;AAC5B,IAAA,MAAMC,OAAO,GAAG,IAAI,CAAClI,IAAI;AACzB,IAAA,MAAMmI,MAAM,GAAG,IAAI,CAAClI,GAAG;AACvB,IAAA,KAAK,CAAC8H,IAAI,CAACC,GAAG,EAAEC,KAAK,CAAC;AACtB,IAAA,IAAIvJ,UAAU,CAAC0J,QAAQ,CAACJ,GAA6B,CAAC,EAAE;MACtD,IAAI,CAACjI,eAAe,EAAE;MACtB,IAAI,CAAC0G,KAAK,GAAG,IAAI;AACnB,IAAA;AACA,IAAA,IAAI,CAACuB,GAAG,KAAK,MAAM,IAAIA,GAAG,KAAK,KAAK,KAAK,IAAI,CAACnF,MAAM,IAAI,CAAC,IAAI,CAAC8D,kBAAkB,EAAE;AAChF,MAAA,MAAMpC,MAAM,GAAG,IAAI,CAACvE,IAAI,GAAGkI,OAAO;AAClC,MAAA,MAAM1D,MAAM,GAAG,IAAI,CAACvE,GAAG,GAAGkI,MAAM;AAChC,MAAA,IAAI5D,MAAM,KAAK,CAAC,IAAIC,MAAM,KAAK,CAAC,EAAE;QAChC,IAAI,CAACmC,kBAAkB,GAAG,IAAI;QAC9B,IAAI,CAAC7H,EAAE,IAAIyF,MAAM;QACjB,IAAI,CAACxF,EAAE,IAAIyF,MAAM;QACjB,IAAI,CAACxF,EAAE,IAAIuF,MAAM;QACjB,IAAI,CAACtF,EAAE,IAAIuF,MAAM;QACjB,IAAI,CAACmC,kBAAkB,GAAG,KAAK;AACjC,MAAA;AACF,IAAA;AACA,IAAA,OAAO,IAAI;AACb,EAAA;EAEA1F,MAAMA,CAACS,GAA6B,EAAE;IACpC,IAAI,IAAI,CAACe,kBAAkB,EAAE;AAC3B,MAAA,IAAI,CAAC4F,eAAe,CAAC3G,GAAG,CAAC;AACzB,MAAA;AACF,IAAA;AACA,IAAA,KAAK,CAACT,MAAM,CAACS,GAAG,CAAC;AACnB,EAAA;EAEA2G,eAAeA,CAAC3G,GAA6B,EAAE;AAAA,IAAA,IAAA4G,YAAA;AAC7C,IAAA,IAAI,CAAC,IAAI,CAACC,OAAO,EAAE;IACnB7G,GAAG,CAACE,IAAI,EAAE;AACVF,IAAAA,GAAG,CAACyB,WAAW,GAAG,IAAI,CAACqF,OAAO;AAC9B9G,IAAAA,GAAG,CAACI,WAAW,GAAG,CAAA,CAAAwG,YAAA,OAAI,CAACjG,MAAM,MAAA,IAAA,IAAAiG,YAAA,uBAAXA,YAAA,CAAaG,QAAQ,EAAE,KAAI,MAAM;AACnD/G,IAAAA,GAAG,CAACK,SAAS,GAAG,IAAI,CAACkB,WAAW;AAChCvB,IAAAA,GAAG,CAACwB,OAAO,GAAG,IAAI,CAACpD,aAAa,IAAI,MAAM;IAC1C4B,GAAG,CAACM,SAAS,EAAE;IACfN,GAAG,CAAC4B,MAAM,CAAC,IAAI,CAACxE,EAAE,EAAE,IAAI,CAACC,EAAE,CAAC;IAC5B2C,GAAG,CAAC6B,MAAM,CAAC,IAAI,CAACvE,EAAE,EAAE,IAAI,CAACC,EAAE,CAAC;IAC5ByC,GAAG,CAACW,MAAM,EAAE;IACZX,GAAG,CAACY,OAAO,EAAE;AACf,EAAA;EAEAoG,OAAOA,CAAChH,GAA6B,EAAE;IACrC,IAAI,IAAI,CAACe,kBAAkB,EAAE;IAC7Bf,GAAG,CAACM,SAAS,EAAE;AACf,IAAA,MAAM2G,CAAC,GAAG,IAAI,CAACC,cAAc,EAAE;IAC/BlH,GAAG,CAAC4B,MAAM,CAACqF,CAAC,CAAC7J,EAAE,EAAE6J,CAAC,CAAC5J,EAAE,CAAC;IACtB2C,GAAG,CAAC6B,MAAM,CAACoF,CAAC,CAAC3J,EAAE,EAAE2J,CAAC,CAAC1J,EAAE,CAAC;AACtByC,IAAAA,GAAG,CAACK,SAAS,GAAG,IAAI,CAACkB,WAAW;AAChC,IAAA,MAAM4F,eAAe,GAAGnH,GAAG,CAACI,WAAW;AACvC,IAAA,IAAIgH,QAAQ,CAAC,IAAI,CAACzG,MAAM,CAAC,EAAE;MACzBX,GAAG,CAACI,WAAW,GAAG,IAAI,CAACO,MAAM,CAAC0G,MAAM,CAACrH,GAAG,CAAE;AAC5C,IAAA;IACA,IAAI,CAACW,MAAM,IAAI,IAAI,CAAC2G,aAAa,CAACtH,GAAG,CAAC;IACtCA,GAAG,CAACI,WAAW,GAAG+G,eAAe;AACnC,EAAA;AAEAxE,EAAAA,sBAAsBA,GAAU;IAC9B,OAAO,IAAI9C,KAAK,CAAC,CAAC,IAAI,CAACzC,EAAE,GAAG,IAAI,CAACE,EAAE,IAAI,CAAC,EAAE,CAAC,IAAI,CAACD,EAAE,GAAG,IAAI,CAACE,EAAE,IAAI,CAAC,CAAC;AACpE,EAAA;AAEAgK,EAAAA,QAAQA,GAG8C;AAAA,IAAA,IAApDC,mBAAwB,GAAAhK,SAAA,CAAAC,MAAA,GAAA,CAAA,IAAAD,SAAA,CAAA,CAAA,CAAA,KAAAE,SAAA,GAAAF,SAAA,CAAA,CAAA,CAAA,GAAG,EAAE;IAC7B,IAAI,IAAI,CAACuD,kBAAkB,EAAE;MAC3B,OAAO;AACL,QAAA,GAAG,KAAK,CAACwG,QAAQ,CAACC,mBAAmB,CAAC;QACtCpK,EAAE,EAAE,IAAI,CAACA,EAAE;QACXC,EAAE,EAAE,IAAI,CAACA,EAAE;QACXC,EAAE,EAAE,IAAI,CAACA,EAAE;QACXC,EAAE,EAAE,IAAI,CAACA;OACV;AACH,IAAA;IACA,OAAO;AACL,MAAA,GAAG,KAAK,CAACgK,QAAQ,CAACC,mBAAmB,CAAC;MACtC,GAAG,IAAI,CAACN,cAAc;KACvB;AACH,EAAA;AAEAO,EAAAA,4BAA4BA,GAAU;AACpC,IAAA,MAAMC,GAAG,GAAG,KAAK,CAACD,4BAA4B,EAAE;AAChD,IAAA,IAAI,IAAI,CAACrJ,aAAa,KAAK,OAAO,EAAE;AAClCsJ,MAAAA,GAAG,CAAC3I,CAAC,IAAI,IAAI,CAACwC,WAAW;AACzBmG,MAAAA,GAAG,CAAC1I,CAAC,IAAI,IAAI,CAACuC,WAAW;AAC3B,IAAA;AACA,IAAA,OAAOmG,GAAG;AACZ,EAAA;AAEAR,EAAAA,cAAcA,GAAqB;IACjC,IAAI,IAAI,CAACjC,kBAAkB,EAAE;MAC3B,MAAM0C,OAAO,GAAG,CAAC,IAAI,CAACvK,EAAE,GAAG,IAAI,CAACE,EAAE,IAAI,CAAC;MACvC,MAAMsK,OAAO,GAAG,CAAC,IAAI,CAACvK,EAAE,GAAG,IAAI,CAACE,EAAE,IAAI,CAAC;MACvC,OAAO;AACLH,QAAAA,EAAE,EAAE,IAAI,CAACA,EAAE,GAAGuK,OAAO;AACrBtK,QAAAA,EAAE,EAAE,IAAI,CAACA,EAAE,GAAGuK,OAAO;AACrBtK,QAAAA,EAAE,EAAE,IAAI,CAACA,EAAE,GAAGqK,OAAO;AACrBpK,QAAAA,EAAE,EAAE,IAAI,CAACA,EAAE,GAAGqK;OACf;AACH,IAAA;IACA,MAAM;AAAExK,MAAAA,EAAE,EAAEyK,GAAG;AAAEvK,MAAAA,EAAE,EAAEwK,GAAG;AAAEzK,MAAAA,EAAE,EAAE0K,GAAG;AAAExK,MAAAA,EAAE,EAAEyK,GAAG;MAAE3F,KAAK;AAAEE,MAAAA;AAAO,KAAC,GAAG,IAAI;IAClE,MAAM0F,KAAK,GAAGJ,GAAG,IAAIC,GAAG,GAAG,EAAE,GAAG,CAAC;IACjC,MAAMI,KAAK,GAAGH,GAAG,IAAIC,GAAG,GAAG,EAAE,GAAG,CAAC;IACjC,OAAO;AACL5K,MAAAA,EAAE,EAAG6K,KAAK,GAAG5F,KAAK,GAAI,CAAC;AACvBhF,MAAAA,EAAE,EAAG6K,KAAK,GAAG3F,MAAM,GAAI,CAAC;AACxBjF,MAAAA,EAAE,EAAG2K,KAAK,GAAG,CAAC5F,KAAK,GAAI,CAAC;AACxB9E,MAAAA,EAAE,EAAG2K,KAAK,GAAG,CAAC3F,MAAM,GAAI;KACzB;AACH,EAAA;AAEA4F,EAAAA,MAAMA,GAAG;IACP,IAAI,IAAI,CAACpH,kBAAkB,EAAE;AAC3B;AACA,MAAA,OAAO,CACL,CAAA,cAAA,EAAiB,IAAI,CAACJ,MAAM,CAAA,gBAAA,EAAmB,IAAI,CAACY,WAAW,CAAA,kBAAA,EAAqB,IAAI,CAACnD,aAAa,IAAI,EAC1G,CAAA,IAAA,EAAO,IAAI,CAAChB,EAAE,CAAA,MAAA,EAAS,IAAI,CAACC,EAAE,CAAA,MAAA,EAAS,IAAI,CAACC,EAAE,CAAA,MAAA,EAAS,IAAI,CAACC,EAAE,QAAQ,CACvE;AACH,IAAA,CAAC,MAAM;AACL;MACA,MAAM;QAAEH,EAAE;QAAEE,EAAE;QAAED,EAAE;AAAEE,QAAAA;AAAG,OAAC,GAAG,IAAI,CAAC2J,cAAc,EAAE;AAChD,MAAA,OAAO,CACL,QAAQ,EACR,cAAc,EACd,CAAA,IAAA,EAAO9J,EAAE,CAAA,MAAA,EAASC,EAAE,CAAA,MAAA,EAASC,EAAE,CAAA,MAAA,EAASC,EAAE,QAAQ,CACnD;AACH,IAAA;AACF,EAAA;EAEA6K,KAAKA,CAACC,OAAoC,EAAU;IAClD,IAAI,IAAI,CAACtH,kBAAkB,EAAE;AAC3B;MACA,MAAMuH,MAAM,GAAG,IAAI,CAACH,MAAM,EAAE,CAACI,IAAI,CAAC,EAAE,CAAC;AACrC,MAAA,OAAOF,OAAO,GAAGA,OAAO,CAACC,MAAM,CAAC,GAAGA,MAAM;AAC3C,IAAA;AACA;AACA,IAAA,OAAO,KAAK,CAACF,KAAK,CAACC,OAAO,CAAC;AAC7B,EAAA;AAIA,EAAA,aAAaG,WAAWA,CACtBC,OAAoB,EACpB9K,OAAmB,EACnB+K,QAAmB,EACnB;IACA,MAAM;AACJtL,MAAAA,EAAE,GAAG,CAAC;AACNC,MAAAA,EAAE,GAAG,CAAC;AACNC,MAAAA,EAAE,GAAG,CAAC;AACNC,MAAAA,EAAE,GAAG,CAAC;MACN,GAAGoL;KACJ,GAAGC,eAAe,CAACH,OAAO,EAAE,IAAI,CAACI,eAAe,EAAEH,QAAQ,CAAC;AAC5D,IAAA,OAAO,IAAI,IAAI,CAAC,CAACtL,EAAE,EAAEC,EAAE,EAAEC,EAAE,EAAEC,EAAE,CAAC,EAAEoL,gBAAgB,CAAC;AACrD,EAAA;EAEA,OAAOG,UAAUA,CAAAC,IAAA,EAMX;IAAA,IANqD;MACzD3L,EAAE;MACFC,EAAE;MACFC,EAAE;MACFC,EAAE;MACF,GAAGyL;AACF,KAAC,GAAAD,IAAA;IACF,OAAO,IAAI,CAACE,WAAW,CACrB;AAAE,MAAA,GAAGD,MAAM;MAAEE,MAAM,EAAE,CAAC9L,EAAE,EAAEC,EAAE,EAAEC,EAAE,EAAEC,EAAE;AAAE,KAAC,EACvC;AAAE4L,MAAAA,UAAU,EAAE;AAAS,KACzB,CAAC;AACH,EAAA;AACF;AAACvL,eAAA,CAhfYX,IAAI,EAAA,MAAA,EAkBD,MAAM,CAAA;AAAAW,eAAA,CAlBTX,IAAI,EAAA,iBAAA,EAmBU,CAAC,GAAGmM,eAAe,EAAE,GAAGpM,UAAU,CAAC,CAAA;AAAAY,eAAA,CAnBjDX,IAAI,EAAA,iBAAA,EAmdUoM,iBAAiB,CAACC,MAAM,CAACtM,UAAU,CAAC,CAAA;AA+B/DuM,aAAa,CAACC,QAAQ,CAACvM,IAAI,CAAC;AAC5BsM,aAAa,CAACE,WAAW,CAACxM,IAAI,CAAC;;;;"}
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';\nimport { Gradient } from '../gradient/Gradient';\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 private _exportingSVG = false;\n\n static type = 'Line';\n static cacheProperties = [...cacheProperties, ...coordProps];\n\n constructor(\n [x1, y1, x2, y2] = [0, 0, 100, 0],\n options: Partial<Props & { hitStrokeWidth?: number | 'auto' }> = {},\n ) {\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 return new Point(this.x1, this.y1).transform(this.getViewportTransform());\n }\n\n _p2PositionHandler() {\n return new Point(this.x2, this.y2).transform(this.getViewportTransform());\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 ||\n this.borderColor ||\n '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' ? this.strokeWidth : 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 width and height for hit detection and bounding box\n const effectiveStrokeWidth =\n this.hitStrokeWidth === 'auto' ? this.strokeWidth : 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 // Only update left/top if they haven't been explicitly set (e.g., during loading)\n if (this.left === 0 && this.top === 0) {\n const center = this._findCenterFromElement();\n this.left = center.x;\n this.top = center.y;\n }\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 =\n this.hitStrokeWidth === 'auto' ? this.strokeWidth : 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 =\n 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,\n y1 = this.y1,\n x2 = this.x2,\n 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(\n (px - closestX) * (px - closestX) + (py - closestY) * (py - closestY),\n );\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\n // Update gradient coordinates if stroke is a gradient (but not during SVG export)\n if (this.stroke instanceof Gradient && !this._exportingSVG) {\n this.stroke.coords.x1 = this.x1;\n this.stroke.coords.y1 = this.y1;\n this.stroke.coords.x2 = this.x2;\n this.stroke.coords.y2 = this.y2;\n }\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', {\n transform: transformData,\n target: this,\n e: eventData,\n });\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 // Update gradient coordinates if stroke is a gradient (but not during SVG export)\n if (this.stroke instanceof Gradient && !this._exportingSVG) {\n this.stroke.coords.x1 = this.x1;\n this.stroke.coords.y1 = this.y1;\n this.stroke.coords.x2 = this.x2;\n this.stroke.coords.y2 = this.y2;\n }\n }\n if (\n (key === 'left' || key === 'top') &&\n this.canvas &&\n !this._updatingEndpoints\n ) {\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\n // Update gradient coordinates if stroke is a gradient\n if (this.stroke instanceof Gradient) {\n this.stroke.coords.x1 = this.x1;\n this.stroke.coords.y1 = this.y1;\n this.stroke.coords.x2 = this.x2;\n this.stroke.coords.y2 = this.y2;\n }\n\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 ctx.globalAlpha = this.opacity;\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\n const origStrokeStyle = ctx.strokeStyle;\n if (isFiller(this.stroke)) {\n ctx.strokeStyle = this.stroke.toLive(ctx)!;\n } else {\n ctx.strokeStyle = this.stroke?.toString() || '#000';\n }\n\n ctx.stroke();\n ctx.strokeStyle = origStrokeStyle;\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 if (this._useEndpointCoords) {\n return {\n ...super.toObject(propertiesToInclude),\n x1: this.x1,\n y1: this.y1,\n x2: this.x2,\n y2: this.y2,\n };\n }\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 // Handle gradients manually for proper SVG export\n let strokeAttr = '';\n if (this.stroke instanceof Gradient) {\n // Let Fabric.js handle gradient definition, but we'll use the reference\n strokeAttr = `stroke=\"url(#${this.stroke.id})\"`;\n } else {\n strokeAttr = `stroke=\"${this.stroke || 'none'}\"`;\n }\n\n return [\n `<line ${strokeAttr} stroke-width=\"${this.strokeWidth}\" stroke-linecap=\"${this.strokeLineCap}\" `,\n `stroke-dasharray=\"${this.strokeDashArray ? this.strokeDashArray.join(' ') : 'none'}\" `,\n `stroke-dashoffset=\"${this.strokeDashOffset}\" stroke-linejoin=\"${this.strokeLineJoin}\" `,\n `stroke-miterlimit=\"${this.strokeMiterLimit}\" fill=\"${this.fill || 'none'}\" `,\n `fill-rule=\"${this.fillRule}\" opacity=\"${this.opacity}\" `,\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 // For endpoint coords, we need to bypass transforms but still allow gradients\n // Let's temporarily disable transforms during SVG generation\n const originalLeft = this.left;\n const originalTop = this.top;\n\n // Set position to center of line for gradient calculation\n this.left = (this.x1 + this.x2) / 2;\n this.top = (this.y1 + this.y2) / 2;\n\n // Get the SVG with standard system (for gradient handling)\n const standardSVG = super.toSVG(reviver);\n\n // Restore original position\n this.left = originalLeft;\n this.top = originalTop;\n\n // Extract gradient definition and clean up the line element\n // Remove the transform wrapper and update coordinates\n const cleanSVG = standardSVG\n .replace(/<g transform=\"[^\"]*\"[^>]*>/g, '')\n .replace(/<\\/g>/g, '')\n .replace(/x1=\"[^\"]*\"/g, `x1=\"${this.x1}\"`)\n .replace(/y1=\"[^\"]*\"/g, `y1=\"${this.y1}\"`)\n .replace(/x2=\"[^\"]*\"/g, `x2=\"${this.x2}\"`)\n .replace(/y2=\"[^\"]*\"/g, `y2=\"${this.y2}\"`);\n\n return cleanSVG;\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);\n"],"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","Point","transform","getViewportTransform","ctx","size","save","fillStyle","strokeStyle","lineWidth","beginPath","arc","Math","PI","fill","stroke","restore","drawBorders","styleOverride","_useEndpointCoords","_drawLineBorders","_this$canvas","vpt","canvas","viewportTransform","setTransform","borderColor","strokeWidth","lineCap","globalAlpha","isMoving","borderOpacityWhenMoving","moveTo","lineTo","_renderControls","drawControls","getBoundingRect","effectiveStrokeWidth","padding","max","min","width","abs","height","setCoords","hitPadding","center","_findCenterFromElement","getCoords","deltaX","deltaY","sqrt","halfWidth","perpX","perpY","containsPoint","point","_this$canvas2","getActiveObject","distance","_distanceToLineSegment","tolerance","px","py","pd2","u","closestX","closestY","eventData","transformData","_this$canvas4","controlKey","corner","pointer","newX","newY","shiftKey","otherControl","otherX","otherY","snapped","_snapToAngle","_this$canvas3","Gradient","_exportingSVG","coords","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","visible","opacity","origStrokeStyle","isFiller","toLive","_this$stroke","toString","_render","p","calcLinePoints","_renderStroke","toObject","propertiesToInclude","_getNonTransformedDimensions","dim","centerX","centerY","_x1","_x2","_y1","_y2","xMult","yMult","_toSVG","strokeAttr","id","strokeDashArray","join","strokeDashOffset","strokeLineJoin","strokeMiterLimit","fillRule","toSVG","reviver","originalLeft","originalTop","standardSVG","cleanSVG","replace","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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"}