@nasser-sw/fabric 7.0.1-beta1 → 7.0.1-beta10

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 (181) hide show
  1. package/0 +0 -0
  2. package/debug/{konva → konva-master}/CHANGELOG.md +2 -1
  3. package/debug/{konva → konva-master}/README.md +7 -3
  4. package/debug/{konva → konva-master}/package.json +1 -1
  5. package/debug/{konva → konva-master}/release.sh +1 -4
  6. package/debug/{konva → konva-master}/src/Canvas.ts +37 -0
  7. package/debug/{konva → konva-master}/src/shapes/Text.ts +2 -2
  8. package/dist/index.js +1853 -288
  9. package/dist/index.js.map +1 -1
  10. package/dist/index.min.js +1 -1
  11. package/dist/index.min.js.map +1 -1
  12. package/dist/index.min.mjs +1 -1
  13. package/dist/index.min.mjs.map +1 -1
  14. package/dist/index.mjs +1853 -288
  15. package/dist/index.mjs.map +1 -1
  16. package/dist/index.node.cjs +1853 -288
  17. package/dist/index.node.cjs.map +1 -1
  18. package/dist/index.node.mjs +1853 -288
  19. package/dist/index.node.mjs.map +1 -1
  20. package/dist/package.json.min.mjs +1 -1
  21. package/dist/package.json.mjs +1 -1
  22. package/dist/src/shapes/Line.d.ts +33 -86
  23. package/dist/src/shapes/Line.d.ts.map +1 -1
  24. package/dist/src/shapes/Line.min.mjs +1 -1
  25. package/dist/src/shapes/Line.min.mjs.map +1 -1
  26. package/dist/src/shapes/Line.mjs +405 -159
  27. package/dist/src/shapes/Line.mjs.map +1 -1
  28. package/dist/src/shapes/Polyline.d.ts +7 -0
  29. package/dist/src/shapes/Polyline.d.ts.map +1 -1
  30. package/dist/src/shapes/Polyline.min.mjs +1 -1
  31. package/dist/src/shapes/Polyline.min.mjs.map +1 -1
  32. package/dist/src/shapes/Polyline.mjs +48 -16
  33. package/dist/src/shapes/Polyline.mjs.map +1 -1
  34. package/dist/src/shapes/Text/Text.d.ts +19 -0
  35. package/dist/src/shapes/Text/Text.d.ts.map +1 -1
  36. package/dist/src/shapes/Text/Text.min.mjs +1 -1
  37. package/dist/src/shapes/Text/Text.min.mjs.map +1 -1
  38. package/dist/src/shapes/Text/Text.mjs +302 -16
  39. package/dist/src/shapes/Text/Text.mjs.map +1 -1
  40. package/dist/src/shapes/Textbox.d.ts +43 -1
  41. package/dist/src/shapes/Textbox.d.ts.map +1 -1
  42. package/dist/src/shapes/Textbox.min.mjs +1 -1
  43. package/dist/src/shapes/Textbox.min.mjs.map +1 -1
  44. package/dist/src/shapes/Textbox.mjs +521 -67
  45. package/dist/src/shapes/Textbox.mjs.map +1 -1
  46. package/dist/src/shapes/Triangle.d.ts +27 -2
  47. package/dist/src/shapes/Triangle.d.ts.map +1 -1
  48. package/dist/src/shapes/Triangle.min.mjs +1 -1
  49. package/dist/src/shapes/Triangle.min.mjs.map +1 -1
  50. package/dist/src/shapes/Triangle.mjs +72 -12
  51. package/dist/src/shapes/Triangle.mjs.map +1 -1
  52. package/dist/src/text/examples/arabicTextExample.d.ts +60 -0
  53. package/dist/src/text/examples/arabicTextExample.d.ts.map +1 -0
  54. package/dist/src/text/measure.d.ts +9 -0
  55. package/dist/src/text/measure.d.ts.map +1 -1
  56. package/dist/src/text/measure.min.mjs +1 -1
  57. package/dist/src/text/measure.min.mjs.map +1 -1
  58. package/dist/src/text/measure.mjs +175 -4
  59. package/dist/src/text/measure.mjs.map +1 -1
  60. package/dist/src/text/overlayEditor.d.ts.map +1 -1
  61. package/dist/src/text/overlayEditor.min.mjs +1 -1
  62. package/dist/src/text/overlayEditor.min.mjs.map +1 -1
  63. package/dist/src/text/overlayEditor.mjs +155 -9
  64. package/dist/src/text/overlayEditor.mjs.map +1 -1
  65. package/dist/src/text/scriptUtils.d.ts +142 -0
  66. package/dist/src/text/scriptUtils.d.ts.map +1 -0
  67. package/dist/src/text/scriptUtils.min.mjs +2 -0
  68. package/dist/src/text/scriptUtils.min.mjs.map +1 -0
  69. package/dist/src/text/scriptUtils.mjs +212 -0
  70. package/dist/src/text/scriptUtils.mjs.map +1 -0
  71. package/dist/src/util/misc/cornerRadius.d.ts +70 -0
  72. package/dist/src/util/misc/cornerRadius.d.ts.map +1 -0
  73. package/dist/src/util/misc/cornerRadius.min.mjs +2 -0
  74. package/dist/src/util/misc/cornerRadius.min.mjs.map +1 -0
  75. package/dist/src/util/misc/cornerRadius.mjs +181 -0
  76. package/dist/src/util/misc/cornerRadius.mjs.map +1 -0
  77. package/dist-extensions/src/shapes/CustomLine.d.ts +10 -0
  78. package/dist-extensions/src/shapes/CustomLine.d.ts.map +1 -0
  79. package/dist-extensions/src/shapes/Line.d.ts +33 -86
  80. package/dist-extensions/src/shapes/Line.d.ts.map +1 -1
  81. package/dist-extensions/src/shapes/Polyline.d.ts +7 -0
  82. package/dist-extensions/src/shapes/Polyline.d.ts.map +1 -1
  83. package/dist-extensions/src/shapes/Text/Text.d.ts +19 -0
  84. package/dist-extensions/src/shapes/Text/Text.d.ts.map +1 -1
  85. package/dist-extensions/src/shapes/Textbox.d.ts +43 -1
  86. package/dist-extensions/src/shapes/Textbox.d.ts.map +1 -1
  87. package/dist-extensions/src/shapes/Triangle.d.ts +27 -2
  88. package/dist-extensions/src/shapes/Triangle.d.ts.map +1 -1
  89. package/dist-extensions/src/text/measure.d.ts +9 -0
  90. package/dist-extensions/src/text/measure.d.ts.map +1 -1
  91. package/dist-extensions/src/text/overlayEditor.d.ts.map +1 -1
  92. package/dist-extensions/src/text/scriptUtils.d.ts +142 -0
  93. package/dist-extensions/src/text/scriptUtils.d.ts.map +1 -0
  94. package/dist-extensions/src/util/misc/cornerRadius.d.ts +70 -0
  95. package/dist-extensions/src/util/misc/cornerRadius.d.ts.map +1 -0
  96. package/fabric-test-editor.html +3552 -0
  97. package/fabric-test2.html +647 -0
  98. package/fabric.ts +182 -182
  99. package/fonts/STV Bold.ttf +0 -0
  100. package/fonts/STV Light.ttf +0 -0
  101. package/fonts/STV Regular.ttf +0 -0
  102. package/package.json +164 -164
  103. package/src/shapes/Line.ts +484 -157
  104. package/src/shapes/Polyline.ts +70 -29
  105. package/src/shapes/Text/Text.ts +317 -19
  106. package/src/shapes/Textbox.ts +544 -12
  107. package/src/shapes/Triangle.spec.ts +76 -0
  108. package/src/shapes/Triangle.ts +85 -15
  109. package/src/text/measure.ts +200 -50
  110. package/src/text/overlayEditor.ts +164 -12
  111. package/src/util/misc/cornerRadius.spec.ts +141 -0
  112. package/src/util/misc/cornerRadius.ts +269 -0
  113. /package/debug/{konva → konva-master}/LICENSE +0 -0
  114. /package/debug/{konva → konva-master}/gulpfile.mjs +0 -0
  115. /package/debug/{konva → konva-master}/resources/doc-includes/ContainerParams.txt +0 -0
  116. /package/debug/{konva → konva-master}/resources/doc-includes/NodeParams.txt +0 -0
  117. /package/debug/{konva → konva-master}/resources/doc-includes/ShapeParams.txt +0 -0
  118. /package/debug/{konva → konva-master}/resources/jsdoc.conf.json +0 -0
  119. /package/debug/{konva → konva-master}/rollup.config.mjs +0 -0
  120. /package/debug/{konva → konva-master}/src/Animation.ts +0 -0
  121. /package/debug/{konva → konva-master}/src/BezierFunctions.ts +0 -0
  122. /package/debug/{konva → konva-master}/src/Container.ts +0 -0
  123. /package/debug/{konva → konva-master}/src/Context.ts +0 -0
  124. /package/debug/{konva → konva-master}/src/Core.ts +0 -0
  125. /package/debug/{konva → konva-master}/src/DragAndDrop.ts +0 -0
  126. /package/debug/{konva → konva-master}/src/Factory.ts +0 -0
  127. /package/debug/{konva → konva-master}/src/FastLayer.ts +0 -0
  128. /package/debug/{konva → konva-master}/src/Global.ts +0 -0
  129. /package/debug/{konva → konva-master}/src/Group.ts +0 -0
  130. /package/debug/{konva → konva-master}/src/Layer.ts +0 -0
  131. /package/debug/{konva → konva-master}/src/Node.ts +0 -0
  132. /package/debug/{konva → konva-master}/src/PointerEvents.ts +0 -0
  133. /package/debug/{konva → konva-master}/src/Shape.ts +0 -0
  134. /package/debug/{konva → konva-master}/src/Stage.ts +0 -0
  135. /package/debug/{konva → konva-master}/src/Tween.ts +0 -0
  136. /package/debug/{konva → konva-master}/src/Util.ts +0 -0
  137. /package/debug/{konva → konva-master}/src/Validators.ts +0 -0
  138. /package/debug/{konva → konva-master}/src/_CoreInternals.ts +0 -0
  139. /package/debug/{konva → konva-master}/src/_FullInternals.ts +0 -0
  140. /package/debug/{konva → konva-master}/src/canvas-backend.ts +0 -0
  141. /package/debug/{konva → konva-master}/src/filters/Blur.ts +0 -0
  142. /package/debug/{konva → konva-master}/src/filters/Brighten.ts +0 -0
  143. /package/debug/{konva → konva-master}/src/filters/Brightness.ts +0 -0
  144. /package/debug/{konva → konva-master}/src/filters/Contrast.ts +0 -0
  145. /package/debug/{konva → konva-master}/src/filters/Emboss.ts +0 -0
  146. /package/debug/{konva → konva-master}/src/filters/Enhance.ts +0 -0
  147. /package/debug/{konva → konva-master}/src/filters/Grayscale.ts +0 -0
  148. /package/debug/{konva → konva-master}/src/filters/HSL.ts +0 -0
  149. /package/debug/{konva → konva-master}/src/filters/HSV.ts +0 -0
  150. /package/debug/{konva → konva-master}/src/filters/Invert.ts +0 -0
  151. /package/debug/{konva → konva-master}/src/filters/Kaleidoscope.ts +0 -0
  152. /package/debug/{konva → konva-master}/src/filters/Mask.ts +0 -0
  153. /package/debug/{konva → konva-master}/src/filters/Noise.ts +0 -0
  154. /package/debug/{konva → konva-master}/src/filters/Pixelate.ts +0 -0
  155. /package/debug/{konva → konva-master}/src/filters/Posterize.ts +0 -0
  156. /package/debug/{konva → konva-master}/src/filters/RGB.ts +0 -0
  157. /package/debug/{konva → konva-master}/src/filters/RGBA.ts +0 -0
  158. /package/debug/{konva → konva-master}/src/filters/Sepia.ts +0 -0
  159. /package/debug/{konva → konva-master}/src/filters/Solarize.ts +0 -0
  160. /package/debug/{konva → konva-master}/src/filters/Threshold.ts +0 -0
  161. /package/debug/{konva → konva-master}/src/index.ts +0 -0
  162. /package/debug/{konva → konva-master}/src/shapes/Arc.ts +0 -0
  163. /package/debug/{konva → konva-master}/src/shapes/Arrow.ts +0 -0
  164. /package/debug/{konva → konva-master}/src/shapes/Circle.ts +0 -0
  165. /package/debug/{konva → konva-master}/src/shapes/Ellipse.ts +0 -0
  166. /package/debug/{konva → konva-master}/src/shapes/Image.ts +0 -0
  167. /package/debug/{konva → konva-master}/src/shapes/Label.ts +0 -0
  168. /package/debug/{konva → konva-master}/src/shapes/Line.ts +0 -0
  169. /package/debug/{konva → konva-master}/src/shapes/Path.ts +0 -0
  170. /package/debug/{konva → konva-master}/src/shapes/Rect.ts +0 -0
  171. /package/debug/{konva → konva-master}/src/shapes/RegularPolygon.ts +0 -0
  172. /package/debug/{konva → konva-master}/src/shapes/Ring.ts +0 -0
  173. /package/debug/{konva → konva-master}/src/shapes/Sprite.ts +0 -0
  174. /package/debug/{konva → konva-master}/src/shapes/Star.ts +0 -0
  175. /package/debug/{konva → konva-master}/src/shapes/TextPath.ts +0 -0
  176. /package/debug/{konva → konva-master}/src/shapes/Transformer.ts +0 -0
  177. /package/debug/{konva → konva-master}/src/shapes/Wedge.ts +0 -0
  178. /package/debug/{konva → konva-master}/src/skia-backend.ts +0 -0
  179. /package/debug/{konva → konva-master}/src/types.ts +0 -0
  180. /package/debug/{konva → konva-master}/tsconfig.json +0 -0
  181. /package/debug/{konva → konva-master}/tsconfig.test.json +0 -0
@@ -1,2 +1,2 @@
1
- var a="7.0.0-beta1";export{a as version};
1
+ var a="7.0.1-beta9";export{a as version};
2
2
  //# sourceMappingURL=package.json.min.mjs.map
@@ -1,4 +1,4 @@
1
- var version = "7.0.0-beta1";
1
+ var version = "7.0.1-beta9";
2
2
 
3
3
  export { version };
4
4
  //# sourceMappingURL=package.json.mjs.map
@@ -4,114 +4,61 @@ import { Point } from '../Point';
4
4
  import type { FabricObjectProps, SerializedObjectProps } from './Object/types';
5
5
  import type { ObjectEvents } from '../EventTypeDefs';
6
6
  import type { CSSRules } from '../parser/typedefs';
7
- interface UniqueLineProps {
7
+ import type { TPointerEvent, Transform } from '../EventTypeDefs';
8
+ interface UniqueLineCoords {
8
9
  x1: number;
9
10
  x2: number;
10
11
  y1: number;
11
12
  y2: number;
12
13
  }
13
- export interface SerializedLineProps extends SerializedObjectProps, UniqueLineProps {
14
+ export interface SerializedLineProps extends SerializedObjectProps, UniqueLineCoords {
14
15
  }
15
- /**
16
- * A Class to draw a line
17
- * A bunch of methods will be added to Polyline to handle the line case
18
- * The line class is very strange to work with, is all special, it hardly aligns
19
- * to what a developer want everytime there is an angle
20
- * @deprecated
21
- */
22
- export declare class Line<Props extends TOptions<FabricObjectProps> = Partial<FabricObjectProps>, SProps extends SerializedLineProps = SerializedLineProps, EventSpec extends ObjectEvents = ObjectEvents> extends FabricObject<Props, SProps, EventSpec> implements UniqueLineProps {
23
- /**
24
- * x value or first line edge
25
- * @type number
26
- */
16
+ export declare class Line<Props extends TOptions<FabricObjectProps> = Partial<FabricObjectProps>, SProps extends SerializedLineProps = SerializedLineProps, EventSpec extends ObjectEvents = ObjectEvents> extends FabricObject<Props, SProps, EventSpec> implements UniqueLineCoords {
27
17
  x1: number;
28
- /**
29
- * y value or first line edge
30
- * @type number
31
- */
32
18
  y1: number;
33
- /**
34
- * x value or second line edge
35
- * @type number
36
- */
37
19
  x2: number;
38
- /**
39
- * y value or second line edge
40
- * @type number
41
- */
42
20
  y2: number;
21
+ hitStrokeWidth: number | 'auto';
22
+ private _updatingEndpoints;
23
+ private _useEndpointCoords;
24
+ private _exportingSVG;
43
25
  static type: string;
44
26
  static cacheProperties: string[];
45
- /**
46
- * Constructor
47
- * @param {Array} [points] Array of points
48
- * @param {Object} [options] Options object
49
- * @return {Line} thisArg
50
- */
51
- constructor([x1, y1, x2, y2]?: [number, number, number, number], options?: Partial<Props>);
52
- /**
53
- * @private
54
- * @param {Object} [options] Options
55
- */
56
- _setWidthHeight(): void;
57
- /**
58
- * @private
59
- * @param {String} key
60
- * @param {*} value
61
- */
27
+ constructor([x1, y1, x2, y2]?: [number, number, number, number], options?: Partial<Props & {
28
+ hitStrokeWidth?: number | 'auto';
29
+ }>);
30
+ _setupLineControls(): void;
31
+ _p1PositionHandler(): Point;
32
+ _p2PositionHandler(): Point;
33
+ _renderEndpointControl(ctx: CanvasRenderingContext2D, left: number, top: number): void;
34
+ drawBorders(ctx: CanvasRenderingContext2D, styleOverride?: any): void | this;
35
+ _drawLineBorders(ctx: CanvasRenderingContext2D, styleOverride?: any): void;
36
+ _renderControls(ctx: CanvasRenderingContext2D, styleOverride?: any): void;
37
+ getBoundingRect(): import("../typedefs").TBBox;
38
+ setCoords(): void;
39
+ getCoords(): [Point, Point, Point, Point];
40
+ containsPoint(point: Point): boolean;
41
+ _distanceToLineSegment(px: number, py: number): number;
42
+ _endpointActionHandler(eventData: TPointerEvent, transformData: Transform, x: number, y: number): boolean;
43
+ _snapToAngle(fromX: number, fromY: number, toX: number, toY: number): {
44
+ x: number;
45
+ y: number;
46
+ };
47
+ _setWidthHeight(skipReposition?: boolean): void;
62
48
  _set(key: string, value: any): this;
63
- /**
64
- * @private
65
- * @param {CanvasRenderingContext2D} ctx Context to render on
66
- */
49
+ render(ctx: CanvasRenderingContext2D): void;
50
+ _renderDirectly(ctx: CanvasRenderingContext2D): void;
67
51
  _render(ctx: CanvasRenderingContext2D): void;
68
- /**
69
- * This function is an helper for svg import. it returns the center of the object in the svg
70
- * untransformed coordinates
71
- * @private
72
- * @return {Point} center point from element coordinates
73
- */
74
52
  _findCenterFromElement(): Point;
75
- /**
76
- * Returns object representation of an instance
77
- * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output
78
- * @return {Object} object representation of an instance
79
- */
80
53
  toObject<T extends Omit<Props & TClassProperties<this>, keyof SProps>, K extends keyof T = never>(propertiesToInclude?: K[]): Pick<T, K> & SProps;
81
54
  _getNonTransformedDimensions(): Point;
82
- /**
83
- * Recalculates line points given width and height
84
- * Those points are simply placed around the center,
85
- * This is not useful outside internal render functions and svg output
86
- * Is not meant to be for the developer.
87
- * @private
88
- */
89
- calcLinePoints(): UniqueLineProps;
90
- /**
91
- * Returns svg representation of an instance
92
- * @return {Array} an array of strings with the specific svg representation
93
- * of the instance
94
- */
55
+ calcLinePoints(): UniqueLineCoords;
95
56
  _toSVG(): string[];
96
- /**
97
- * List of attribute names to account for when parsing SVG element (used by {@link Line.fromElement})
98
- * @see http://www.w3.org/TR/SVG/shapes.html#LineElement
99
- */
57
+ toSVG(reviver?: (markup: string) => string): string;
100
58
  static ATTRIBUTE_NAMES: string[];
101
- /**
102
- * Returns Line instance from an SVG element
103
- * @param {HTMLElement} element Element to parse
104
- * @param {Object} [options] Options object
105
- * @param {Function} [callback] callback function invoked after parsing
106
- */
107
59
  static fromElement(element: HTMLElement, options?: Abortable, cssRules?: CSSRules): Promise<Line<{
108
60
  [x: string]: /*elided*/ any;
109
61
  }, SerializedLineProps, ObjectEvents>>;
110
- /**
111
- * Returns Line instance from an object representation
112
- * @param {Object} object Object to create an instance from
113
- * @returns {Promise<Line>}
114
- */
115
62
  static fromObject<T extends TOptions<SerializedLineProps>>({ x1, y1, x2, y2, ...object }: T): Promise<Line<Partial<FabricObjectProps>, SerializedLineProps, ObjectEvents>>;
116
63
  }
117
64
  export {};
@@ -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;AAMnD,UAAU,eAAe;IACvB,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,eAAe;CAAG;AAEtB;;;;;;GAMG;AACH,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,eAAe;IAE1B;;;OAGG;IACK,EAAE,EAAE,MAAM,CAAC;IAEnB;;;OAGG;IACK,EAAE,EAAE,MAAM,CAAC;IAEnB;;;OAGG;IACK,EAAE,EAAE,MAAM,CAAC;IAEnB;;;OAGG;IACK,EAAE,EAAE,MAAM,CAAC;IAEnB,MAAM,CAAC,IAAI,SAAU;IAErB,MAAM,CAAC,eAAe,WAAuC;IAC7D;;;;;OAKG;gBACS,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,mCAAe,EAAE,OAAO,GAAE,OAAO,CAAC,KAAK,CAAM;IAczE;;;OAGG;IACH,eAAe;IAYf;;;;OAIG;IACH,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG;IAc5B;;;OAGG;IACH,OAAO,CAAC,GAAG,EAAE,wBAAwB;IAsBrC;;;;;OAKG;IACH,sBAAsB,IAAI,KAAK;IAI/B;;;;OAIG;IACH,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;IAWrD,4BAA4B,IAAI,KAAK;IAarC;;;;;;OAMG;IACH,cAAc,IAAI,eAAe;IAmBjC;;;;OAIG;IACH,MAAM;IASN;;;OAGG;IACH,MAAM,CAAC,eAAe,WAAwC;IAE9D;;;;;OAKG;WACU,WAAW,CACtB,OAAO,EAAE,WAAW,EACpB,OAAO,CAAC,EAAE,SAAS,EACnB,QAAQ,CAAC,EAAE,QAAQ;;;IAcrB;;;;OAIG;IACH,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;CAWL"}
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 r}from"../Point.min.mjs";import{isFiller as n}from"../util/typeAssertions.min.mjs";import{LEFT as m,TOP as h,CENTER as c}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{cacheProperties as a}from"./Object/defaultValues.min.mjs";const p=["x1","x2","y1","y2"];class y extends o{constructor(){let[t,i,s,e]=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[0,0,0,0],o=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};super(),Object.assign(this,y.ownDefaults),this.setOptions(o),this.x1=t,this.x2=s,this.y1=i,this.y2=e,this._setWidthHeight();const{left:r,top:n}=o;"number"==typeof r&&this.set(m,r),"number"==typeof n&&this.set(h,n)}_setWidthHeight(){const{x1:t,y1:i,x2:s,y2:e}=this;this.width=Math.abs(s-t),this.height=Math.abs(e-i);const{left:o,top:n,width:m,height:h}=l([{x:t,y:i},{x:s,y:e}]),a=new r(o+m/2,n+h/2);this.setPositionByOrigin(a,c,c)}_set(t,i){return super._set(t,i),p.includes(t)&&this._setWidthHeight(),this}_render(t){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;var e;n(this.stroke)?t.strokeStyle=this.stroke.toLive(t):t.strokeStyle=null!==(e=this.stroke)&&void 0!==e?e:t.fillStyle;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{...super.toObject(t),...this.calcLinePoints()}}_getNonTransformedDimensions(){const t=super._getNonTransformedDimensions();return"butt"===this.strokeLineCap&&(0===this.width&&(t.y-=this.strokeWidth),0===this.height&&(t.x-=this.strokeWidth)),t}calcLinePoints(){const{x1:t,x2:i,y1:s,y2:e,width:o,height:r}=this,n=t<=i?-1:1,m=s<=e?-1:1;return{x1:n*o/2,x2:n*-o/2,y1:m*r/2,y2:m*-r/2}}_toSVG(){const{x1:t,x2:i,y1:s,y2:e}=this.calcLinePoints();return["<line ","COMMON_PARTS",`x1="${t}" y1="${s}" x2="${i}" y2="${e}" />\n`]}static async fromElement(t,i,e){const{x1:o=0,y1:r=0,x2:n=0,y2:m=0,...h}=s(t,this.ATTRIBUTE_NAMES,e);return new this([o,r,n,m],h)}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(y,"type","Line"),t(y,"cacheProperties",[...a,...p]),t(y,"ATTRIBUTE_NAMES",i.concat(p)),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';\n\n// @TODO this code is terrible and Line should be a special case of polyline.\n\nconst coordProps = ['x1', 'x2', 'y1', 'y2'] as const;\n\ninterface UniqueLineProps {\n x1: number;\n x2: number;\n y1: number;\n y2: number;\n}\n\nexport interface SerializedLineProps\n extends SerializedObjectProps,\n UniqueLineProps {}\n\n/**\n * A Class to draw a line\n * A bunch of methods will be added to Polyline to handle the line case\n * The line class is very strange to work with, is all special, it hardly aligns\n * to what a developer want everytime there is an angle\n * @deprecated\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 UniqueLineProps\n{\n /**\n * x value or first line edge\n * @type number\n */\n declare x1: number;\n\n /**\n * y value or first line edge\n * @type number\n */\n declare y1: number;\n\n /**\n * x value or second line edge\n * @type number\n */\n declare x2: number;\n\n /**\n * y value or second line edge\n * @type number\n */\n declare y2: number;\n\n static type = 'Line';\n\n static cacheProperties = [...cacheProperties, ...coordProps];\n /**\n * Constructor\n * @param {Array} [points] Array of points\n * @param {Object} [options] Options object\n * @return {Line} thisArg\n */\n constructor([x1, y1, x2, y2] = [0, 0, 0, 0], options: Partial<Props> = {}) {\n super();\n Object.assign(this, Line.ownDefaults);\n this.setOptions(options);\n this.x1 = x1;\n this.x2 = x2;\n this.y1 = y1;\n this.y2 = y2;\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 }\n\n /**\n * @private\n * @param {Object} [options] Options\n */\n _setWidthHeight() {\n const { x1, y1, x2, y2 } = this;\n this.width = Math.abs(x2 - x1);\n this.height = Math.abs(y2 - y1);\n const { left, top, width, height } = makeBoundingBoxFromPoints([\n { x: x1, y: y1 },\n { x: x2, y: y2 },\n ]);\n const position = new Point(left + width / 2, top + height / 2);\n this.setPositionByOrigin(position, CENTER, CENTER);\n }\n\n /**\n * @private\n * @param {String} key\n * @param {*} value\n */\n _set(key: string, value: any) {\n super._set(key, value);\n if (coordProps.includes(key as keyof UniqueLineProps)) {\n // this doesn't make sense very much, since setting x1 when top or left\n // are already set, is just going to show a strange result since the\n // line will move way more than the developer expect.\n // in fabric5 it worked only when the line didn't have extra transformations,\n // in fabric6 too. With extra transform they behave bad in different ways.\n // This needs probably a good rework or a tutorial if you have to create a dynamic line\n this._setWidthHeight();\n }\n return this;\n }\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _render(ctx: CanvasRenderingContext2D) {\n ctx.beginPath();\n\n const p = this.calcLinePoints();\n ctx.moveTo(p.x1, p.y1);\n ctx.lineTo(p.x2, p.y2);\n\n ctx.lineWidth = this.strokeWidth;\n\n // TODO: test this\n // make sure setting \"fill\" changes color of a line\n // (by copying fillStyle to strokeStyle, since line is stroked, not filled)\n const origStrokeStyle = ctx.strokeStyle;\n if (isFiller(this.stroke)) {\n ctx.strokeStyle = this.stroke.toLive(ctx)!;\n } else {\n ctx.strokeStyle = this.stroke ?? ctx.fillStyle;\n }\n this.stroke && this._renderStroke(ctx);\n ctx.strokeStyle = origStrokeStyle;\n }\n\n /**\n * This function is an helper for svg import. it returns the center of the object in the svg\n * untransformed coordinates\n * @private\n * @return {Point} center point from element coordinates\n */\n _findCenterFromElement(): Point {\n return new Point((this.x1 + this.x2) / 2, (this.y1 + this.y2) / 2);\n }\n\n /**\n * Returns object representation of an instance\n * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n * @return {Object} object representation of an instance\n */\n toObject<\n T extends Omit<Props & TClassProperties<this>, keyof SProps>,\n K extends keyof T = never,\n >(propertiesToInclude: K[] = []): Pick<T, K> & SProps {\n return {\n ...super.toObject(propertiesToInclude),\n ...this.calcLinePoints(),\n };\n }\n\n /*\n * Calculate object dimensions from its properties\n * @private\n */\n _getNonTransformedDimensions(): Point {\n const dim = super._getNonTransformedDimensions();\n if (this.strokeLineCap === 'butt') {\n if (this.width === 0) {\n dim.y -= this.strokeWidth;\n }\n if (this.height === 0) {\n dim.x -= this.strokeWidth;\n }\n }\n return dim;\n }\n\n /**\n * Recalculates line points given width and height\n * Those points are simply placed around the center,\n * This is not useful outside internal render functions and svg output\n * Is not meant to be for the developer.\n * @private\n */\n calcLinePoints(): UniqueLineProps {\n const { x1: _x1, x2: _x2, y1: _y1, y2: _y2, width, height } = this;\n const xMult = _x1 <= _x2 ? -1 : 1,\n yMult = _y1 <= _y2 ? -1 : 1,\n x1 = (xMult * width) / 2,\n y1 = (yMult * height) / 2,\n x2 = (xMult * -width) / 2,\n y2 = (yMult * -height) / 2;\n\n return {\n x1,\n x2,\n y1,\n y2,\n };\n }\n\n /* _FROM_SVG_START_ */\n\n /**\n * Returns svg representation of an instance\n * @return {Array} an array of strings with the specific svg representation\n * of the instance\n */\n _toSVG() {\n const { x1, x2, y1, y2 } = this.calcLinePoints();\n return [\n '<line ',\n 'COMMON_PARTS',\n `x1=\"${x1}\" y1=\"${y1}\" x2=\"${x2}\" y2=\"${y2}\" />\\n`,\n ];\n }\n\n /**\n * List of attribute names to account for when parsing SVG element (used by {@link Line.fromElement})\n * @see http://www.w3.org/TR/SVG/shapes.html#LineElement\n */\n static ATTRIBUTE_NAMES = SHARED_ATTRIBUTES.concat(coordProps);\n\n /**\n * Returns Line instance from an SVG element\n * @param {HTMLElement} element Element to parse\n * @param {Object} [options] Options object\n * @param {Function} [callback] callback function invoked after parsing\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 /* _FROM_SVG_END_ */\n\n /**\n * Returns Line instance from an object representation\n * @param {Object} object Object to create an instance from\n * @returns {Promise<Line>}\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 {\n ...object,\n points: [x1, y1, x2, y2],\n },\n {\n extraParam: 'points',\n },\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","Object","assign","this","ownDefaults","setOptions","_setWidthHeight","left","top","set","LEFT","TOP","width","Math","abs","height","makeBoundingBoxFromPoints","x","y","position","Point","setPositionByOrigin","CENTER","_set","key","value","includes","_render","ctx","beginPath","p","calcLinePoints","moveTo","lineTo","lineWidth","strokeWidth","origStrokeStyle","strokeStyle","_this$stroke","isFiller","stroke","toLive","fillStyle","_renderStroke","_findCenterFromElement","toObject","propertiesToInclude","_getNonTransformedDimensions","dim","strokeLineCap","_x1","_x2","_y1","_y2","xMult","yMult","_toSVG","fromElement","element","cssRules","parsedAttributes","parseAttributes","ATTRIBUTE_NAMES","fromObject","_ref","object","_fromObject","points","extraParam","_defineProperty","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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"}