fabric 7.0.0 → 7.2.0

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 (323) hide show
  1. package/.husky/pre-commit +1 -0
  2. package/CHANGELOG.md +21 -0
  3. package/dist/extensions/cropping_controls/croppingControls.d.ts +16 -0
  4. package/dist/extensions/cropping_controls/croppingControls.d.ts.map +1 -0
  5. package/dist/extensions/cropping_controls/croppingHandlers.d.ts +39 -0
  6. package/dist/extensions/cropping_controls/croppingHandlers.d.ts.map +1 -0
  7. package/dist/extensions/cropping_controls/enterCropMode.d.ts +7 -0
  8. package/dist/extensions/cropping_controls/enterCropMode.d.ts.map +1 -0
  9. package/dist/extensions/cropping_controls/renderCornerControl.d.ts +14 -0
  10. package/dist/extensions/cropping_controls/renderCornerControl.d.ts.map +1 -0
  11. package/dist/extensions/index.d.ts +3 -0
  12. package/dist/extensions/index.d.ts.map +1 -1
  13. package/dist/fabric.d.ts +1 -0
  14. package/dist/fabric.d.ts.map +1 -1
  15. package/dist/index.js +628 -537
  16. package/dist/index.js.map +1 -1
  17. package/dist/index.min.js +1 -1
  18. package/dist/index.min.js.map +1 -1
  19. package/dist/index.min.mjs +1 -1
  20. package/dist/index.min.mjs.map +1 -1
  21. package/dist/index.mjs +628 -537
  22. package/dist/index.mjs.map +1 -1
  23. package/dist/index.node.cjs +628 -537
  24. package/dist/index.node.cjs.map +1 -1
  25. package/dist/index.node.mjs +628 -537
  26. package/dist/index.node.mjs.map +1 -1
  27. package/dist/package.json.min.mjs +1 -1
  28. package/dist/package.json.mjs +1 -1
  29. package/dist/src/EventTypeDefs.d.ts +5 -0
  30. package/dist/src/EventTypeDefs.d.ts.map +1 -1
  31. package/dist/src/Pattern/Pattern.d.ts.map +1 -1
  32. package/dist/src/Pattern/Pattern.min.mjs +1 -1
  33. package/dist/src/Pattern/Pattern.min.mjs.map +1 -1
  34. package/dist/src/Pattern/Pattern.mjs +2 -1
  35. package/dist/src/Pattern/Pattern.mjs.map +1 -1
  36. package/dist/src/Shadow.d.ts +1 -1
  37. package/dist/src/Shadow.d.ts.map +1 -1
  38. package/dist/src/Shadow.min.mjs +1 -1
  39. package/dist/src/Shadow.min.mjs.map +1 -1
  40. package/dist/src/Shadow.mjs +5 -4
  41. package/dist/src/Shadow.mjs.map +1 -1
  42. package/dist/src/canvas/CanvasOptions.d.ts.map +1 -1
  43. package/dist/src/canvas/CanvasOptions.min.mjs.map +1 -1
  44. package/dist/src/canvas/CanvasOptions.mjs.map +1 -1
  45. package/dist/src/canvas/SelectableCanvas.d.ts +2 -0
  46. package/dist/src/canvas/SelectableCanvas.d.ts.map +1 -1
  47. package/dist/src/canvas/SelectableCanvas.min.mjs +1 -1
  48. package/dist/src/canvas/SelectableCanvas.min.mjs.map +1 -1
  49. package/dist/src/canvas/SelectableCanvas.mjs +33 -13
  50. package/dist/src/canvas/SelectableCanvas.mjs.map +1 -1
  51. package/dist/src/canvas/StaticCanvas.d.ts.map +1 -1
  52. package/dist/src/canvas/StaticCanvas.min.mjs +1 -1
  53. package/dist/src/canvas/StaticCanvas.min.mjs.map +1 -1
  54. package/dist/src/canvas/StaticCanvas.mjs +3 -1
  55. package/dist/src/canvas/StaticCanvas.mjs.map +1 -1
  56. package/dist/src/canvas/StaticCanvasOptions.d.ts.map +1 -1
  57. package/dist/src/canvas/StaticCanvasOptions.min.mjs.map +1 -1
  58. package/dist/src/canvas/StaticCanvasOptions.mjs.map +1 -1
  59. package/dist/src/constants.d.ts +1 -0
  60. package/dist/src/constants.d.ts.map +1 -1
  61. package/dist/src/constants.min.mjs.map +1 -1
  62. package/dist/src/constants.mjs.map +1 -1
  63. package/dist/src/controls/Control.d.ts +22 -1
  64. package/dist/src/controls/Control.d.ts.map +1 -1
  65. package/dist/src/controls/Control.min.mjs +1 -1
  66. package/dist/src/controls/Control.min.mjs.map +1 -1
  67. package/dist/src/controls/Control.mjs +45 -1
  68. package/dist/src/controls/Control.mjs.map +1 -1
  69. package/dist/src/controls/changeWidth.d.ts +22 -0
  70. package/dist/src/controls/changeWidth.d.ts.map +1 -1
  71. package/dist/src/controls/changeWidth.min.mjs +1 -1
  72. package/dist/src/controls/changeWidth.min.mjs.map +1 -1
  73. package/dist/src/controls/changeWidth.mjs +46 -18
  74. package/dist/src/controls/changeWidth.mjs.map +1 -1
  75. package/dist/src/controls/controlRendering.d.ts.map +1 -1
  76. package/dist/src/controls/controlRendering.min.mjs +1 -1
  77. package/dist/src/controls/controlRendering.min.mjs.map +1 -1
  78. package/dist/src/controls/controlRendering.mjs +18 -34
  79. package/dist/src/controls/controlRendering.mjs.map +1 -1
  80. package/dist/src/controls/index.d.ts +2 -1
  81. package/dist/src/controls/index.d.ts.map +1 -1
  82. package/dist/src/controls/index.min.mjs +1 -1
  83. package/dist/src/controls/index.mjs +1 -1
  84. package/dist/src/gradient/Gradient.d.ts.map +1 -1
  85. package/dist/src/gradient/Gradient.min.mjs +1 -1
  86. package/dist/src/gradient/Gradient.min.mjs.map +1 -1
  87. package/dist/src/gradient/Gradient.mjs +19 -6
  88. package/dist/src/gradient/Gradient.mjs.map +1 -1
  89. package/dist/src/shapes/Circle.d.ts.map +1 -1
  90. package/dist/src/shapes/Circle.min.mjs +1 -1
  91. package/dist/src/shapes/Circle.min.mjs.map +1 -1
  92. package/dist/src/shapes/Circle.mjs +10 -7
  93. package/dist/src/shapes/Circle.mjs.map +1 -1
  94. package/dist/src/shapes/Ellipse.d.ts.map +1 -1
  95. package/dist/src/shapes/Ellipse.min.mjs +1 -1
  96. package/dist/src/shapes/Ellipse.min.mjs.map +1 -1
  97. package/dist/src/shapes/Ellipse.mjs +2 -1
  98. package/dist/src/shapes/Ellipse.mjs.map +1 -1
  99. package/dist/src/shapes/Group.d.ts.map +1 -1
  100. package/dist/src/shapes/Group.min.mjs +1 -1
  101. package/dist/src/shapes/Group.min.mjs.map +1 -1
  102. package/dist/src/shapes/Group.mjs +2 -1
  103. package/dist/src/shapes/Group.mjs.map +1 -1
  104. package/dist/src/shapes/IText/IText.d.ts.map +1 -1
  105. package/dist/src/shapes/IText/IText.min.mjs.map +1 -1
  106. package/dist/src/shapes/IText/IText.mjs.map +1 -1
  107. package/dist/src/shapes/Image.d.ts +1 -1
  108. package/dist/src/shapes/Image.d.ts.map +1 -1
  109. package/dist/src/shapes/Image.min.mjs +1 -1
  110. package/dist/src/shapes/Image.min.mjs.map +1 -1
  111. package/dist/src/shapes/Image.mjs +4 -3
  112. package/dist/src/shapes/Image.mjs.map +1 -1
  113. package/dist/src/shapes/Line.d.ts.map +1 -1
  114. package/dist/src/shapes/Line.min.mjs +1 -1
  115. package/dist/src/shapes/Line.min.mjs.map +1 -1
  116. package/dist/src/shapes/Line.mjs +6 -10
  117. package/dist/src/shapes/Line.mjs.map +1 -1
  118. package/dist/src/shapes/Object/FabricObjectSVGExportMixin.d.ts.map +1 -1
  119. package/dist/src/shapes/Object/FabricObjectSVGExportMixin.min.mjs +1 -1
  120. package/dist/src/shapes/Object/FabricObjectSVGExportMixin.min.mjs.map +1 -1
  121. package/dist/src/shapes/Object/FabricObjectSVGExportMixin.mjs +5 -4
  122. package/dist/src/shapes/Object/FabricObjectSVGExportMixin.mjs.map +1 -1
  123. package/dist/src/shapes/Object/InteractiveObject.d.ts.map +1 -1
  124. package/dist/src/shapes/Object/InteractiveObject.min.mjs.map +1 -1
  125. package/dist/src/shapes/Object/InteractiveObject.mjs.map +1 -1
  126. package/dist/src/shapes/Object/Object.d.ts.map +1 -1
  127. package/dist/src/shapes/Object/Object.min.mjs +1 -1
  128. package/dist/src/shapes/Object/Object.min.mjs.map +1 -1
  129. package/dist/src/shapes/Object/Object.mjs +3 -0
  130. package/dist/src/shapes/Object/Object.mjs.map +1 -1
  131. package/dist/src/shapes/Object/ObjectGeometry.min.mjs +1 -1
  132. package/dist/src/shapes/Object/ObjectGeometry.min.mjs.map +1 -1
  133. package/dist/src/shapes/Object/ObjectGeometry.mjs +1 -1
  134. package/dist/src/shapes/Object/ObjectGeometry.mjs.map +1 -1
  135. package/dist/src/shapes/Object/types/FabricObjectProps.d.ts.map +1 -1
  136. package/dist/src/shapes/Object/types/ObjectProps.d.ts.map +1 -1
  137. package/dist/src/shapes/Path.d.ts.map +1 -1
  138. package/dist/src/shapes/Path.min.mjs.map +1 -1
  139. package/dist/src/shapes/Path.mjs +1 -2
  140. package/dist/src/shapes/Path.mjs.map +1 -1
  141. package/dist/src/shapes/Polyline.d.ts.map +1 -1
  142. package/dist/src/shapes/Polyline.min.mjs +1 -1
  143. package/dist/src/shapes/Polyline.min.mjs.map +1 -1
  144. package/dist/src/shapes/Polyline.mjs +10 -6
  145. package/dist/src/shapes/Polyline.mjs.map +1 -1
  146. package/dist/src/shapes/Rect.d.ts.map +1 -1
  147. package/dist/src/shapes/Rect.min.mjs +1 -1
  148. package/dist/src/shapes/Rect.min.mjs.map +1 -1
  149. package/dist/src/shapes/Rect.mjs +2 -1
  150. package/dist/src/shapes/Rect.mjs.map +1 -1
  151. package/dist/src/shapes/Text/StyledText.d.ts.map +1 -1
  152. package/dist/src/shapes/Text/StyledText.min.mjs.map +1 -1
  153. package/dist/src/shapes/Text/StyledText.mjs +0 -3
  154. package/dist/src/shapes/Text/StyledText.mjs.map +1 -1
  155. package/dist/src/shapes/Text/Text.d.ts.map +1 -1
  156. package/dist/src/shapes/Text/Text.min.mjs.map +1 -1
  157. package/dist/src/shapes/Text/Text.mjs.map +1 -1
  158. package/dist/src/shapes/Text/TextSVGExportMixin.d.ts.map +1 -1
  159. package/dist/src/shapes/Text/TextSVGExportMixin.min.mjs +1 -1
  160. package/dist/src/shapes/Text/TextSVGExportMixin.min.mjs.map +1 -1
  161. package/dist/src/shapes/Text/TextSVGExportMixin.mjs +5 -6
  162. package/dist/src/shapes/Text/TextSVGExportMixin.mjs.map +1 -1
  163. package/dist/src/shapes/Textbox.d.ts.map +1 -1
  164. package/dist/src/shapes/Textbox.min.mjs.map +1 -1
  165. package/dist/src/shapes/Textbox.mjs.map +1 -1
  166. package/dist/src/shapes/Triangle.d.ts.map +1 -1
  167. package/dist/src/shapes/Triangle.min.mjs.map +1 -1
  168. package/dist/src/shapes/Triangle.mjs.map +1 -1
  169. package/dist/src/util/lang_string.d.ts +1 -1
  170. package/dist/src/util/lang_string.d.ts.map +1 -1
  171. package/dist/src/util/lang_string.min.mjs +1 -1
  172. package/dist/src/util/lang_string.min.mjs.map +1 -1
  173. package/dist/src/util/lang_string.mjs +1 -1
  174. package/dist/src/util/lang_string.mjs.map +1 -1
  175. package/dist/src/util/misc/svgParsing.d.ts.map +1 -1
  176. package/dist/src/util/misc/svgParsing.min.mjs +1 -1
  177. package/dist/src/util/misc/svgParsing.min.mjs.map +1 -1
  178. package/dist/src/util/misc/svgParsing.mjs +2 -1
  179. package/dist/src/util/misc/svgParsing.mjs.map +1 -1
  180. package/dist-extensions/cropping_controls/croppingControls.mjs +140 -0
  181. package/dist-extensions/cropping_controls/croppingControls.mjs.map +1 -0
  182. package/dist-extensions/cropping_controls/croppingHandlers.mjs +228 -0
  183. package/dist-extensions/cropping_controls/croppingHandlers.mjs.map +1 -0
  184. package/dist-extensions/cropping_controls/enterCropMode.mjs +38 -0
  185. package/dist-extensions/cropping_controls/enterCropMode.mjs.map +1 -0
  186. package/dist-extensions/cropping_controls/renderCornerControl.mjs +45 -0
  187. package/dist-extensions/cropping_controls/renderCornerControl.mjs.map +1 -0
  188. package/dist-extensions/extensions/cropping_controls/croppingControls.d.ts +16 -0
  189. package/dist-extensions/extensions/cropping_controls/croppingControls.d.ts.map +1 -0
  190. package/dist-extensions/extensions/cropping_controls/croppingHandlers.d.ts +39 -0
  191. package/dist-extensions/extensions/cropping_controls/croppingHandlers.d.ts.map +1 -0
  192. package/dist-extensions/extensions/cropping_controls/enterCropMode.d.ts +7 -0
  193. package/dist-extensions/extensions/cropping_controls/enterCropMode.d.ts.map +1 -0
  194. package/dist-extensions/extensions/cropping_controls/renderCornerControl.d.ts +14 -0
  195. package/dist-extensions/extensions/cropping_controls/renderCornerControl.d.ts.map +1 -0
  196. package/dist-extensions/extensions/index.d.ts +3 -0
  197. package/dist-extensions/extensions/index.d.ts.map +1 -1
  198. package/dist-extensions/fabric-extensions.min.js +1 -1
  199. package/dist-extensions/fabric-extensions.min.js.map +1 -1
  200. package/dist-extensions/fabric.d.ts +1 -0
  201. package/dist-extensions/fabric.d.ts.map +1 -1
  202. package/dist-extensions/index.mjs +3 -0
  203. package/dist-extensions/index.mjs.map +1 -1
  204. package/dist-extensions/src/EventTypeDefs.d.ts +5 -0
  205. package/dist-extensions/src/EventTypeDefs.d.ts.map +1 -1
  206. package/dist-extensions/src/Pattern/Pattern.d.ts.map +1 -1
  207. package/dist-extensions/src/Shadow.d.ts +1 -1
  208. package/dist-extensions/src/Shadow.d.ts.map +1 -1
  209. package/dist-extensions/src/canvas/CanvasOptions.d.ts.map +1 -1
  210. package/dist-extensions/src/canvas/SelectableCanvas.d.ts +2 -0
  211. package/dist-extensions/src/canvas/SelectableCanvas.d.ts.map +1 -1
  212. package/dist-extensions/src/canvas/StaticCanvas.d.ts.map +1 -1
  213. package/dist-extensions/src/canvas/StaticCanvasOptions.d.ts.map +1 -1
  214. package/dist-extensions/src/constants.d.ts +1 -0
  215. package/dist-extensions/src/constants.d.ts.map +1 -1
  216. package/dist-extensions/src/controls/Control.d.ts +22 -1
  217. package/dist-extensions/src/controls/Control.d.ts.map +1 -1
  218. package/dist-extensions/src/controls/changeWidth.d.ts +22 -0
  219. package/dist-extensions/src/controls/changeWidth.d.ts.map +1 -1
  220. package/dist-extensions/src/controls/controlRendering.d.ts.map +1 -1
  221. package/dist-extensions/src/controls/index.d.ts +2 -1
  222. package/dist-extensions/src/controls/index.d.ts.map +1 -1
  223. package/dist-extensions/src/gradient/Gradient.d.ts.map +1 -1
  224. package/dist-extensions/src/shapes/Circle.d.ts.map +1 -1
  225. package/dist-extensions/src/shapes/Ellipse.d.ts.map +1 -1
  226. package/dist-extensions/src/shapes/Group.d.ts.map +1 -1
  227. package/dist-extensions/src/shapes/IText/IText.d.ts.map +1 -1
  228. package/dist-extensions/src/shapes/Image.d.ts.map +1 -1
  229. package/dist-extensions/src/shapes/Line.d.ts.map +1 -1
  230. package/dist-extensions/src/shapes/Object/FabricObjectSVGExportMixin.d.ts.map +1 -1
  231. package/dist-extensions/src/shapes/Object/InteractiveObject.d.ts.map +1 -1
  232. package/dist-extensions/src/shapes/Object/Object.d.ts.map +1 -1
  233. package/dist-extensions/src/shapes/Object/types/FabricObjectProps.d.ts.map +1 -1
  234. package/dist-extensions/src/shapes/Object/types/ObjectProps.d.ts.map +1 -1
  235. package/dist-extensions/src/shapes/Path.d.ts +1 -1
  236. package/dist-extensions/src/shapes/Path.d.ts.map +1 -1
  237. package/dist-extensions/src/shapes/Polyline.d.ts.map +1 -1
  238. package/dist-extensions/src/shapes/Rect.d.ts.map +1 -1
  239. package/dist-extensions/src/shapes/Text/StyledText.d.ts.map +1 -1
  240. package/dist-extensions/src/shapes/Text/Text.d.ts.map +1 -1
  241. package/dist-extensions/src/shapes/Text/TextSVGExportMixin.d.ts.map +1 -1
  242. package/dist-extensions/src/shapes/Textbox.d.ts.map +1 -1
  243. package/dist-extensions/src/shapes/Triangle.d.ts.map +1 -1
  244. package/dist-extensions/src/util/lang_string.d.ts +1 -1
  245. package/dist-extensions/src/util/lang_string.d.ts.map +1 -1
  246. package/dist-extensions/src/util/misc/svgParsing.d.ts.map +1 -1
  247. package/eslint.config.mjs +2 -0
  248. package/extensions/cropping_controls/croppingControls.spec.ts +115 -0
  249. package/extensions/cropping_controls/croppingControls.ts +150 -0
  250. package/extensions/cropping_controls/croppingHandlers.spec.ts +579 -0
  251. package/extensions/cropping_controls/croppingHandlers.ts +285 -0
  252. package/extensions/cropping_controls/enterCropMode.ts +30 -0
  253. package/extensions/cropping_controls/renderCornerControl.ts +53 -0
  254. package/extensions/index.ts +9 -0
  255. package/fabric.ts +1 -0
  256. package/package.json +17 -8
  257. package/src/ClassRegistry.spec.ts +18 -19
  258. package/src/EventTypeDefs.ts +15 -11
  259. package/src/Pattern/Pattern.spec.ts +12 -0
  260. package/src/Pattern/Pattern.ts +3 -2
  261. package/src/Shadow.ts +9 -8
  262. package/src/brushes/PencilBrush.spec.ts +11 -11
  263. package/src/canvas/Canvas-dispose.spec.ts +8 -7
  264. package/src/canvas/Canvas.spec.ts +27 -29
  265. package/src/canvas/CanvasOptions.ts +2 -1
  266. package/src/canvas/SelectableCanvas.ts +38 -15
  267. package/src/canvas/StaticCanvas.spec.ts +20 -0
  268. package/src/canvas/StaticCanvas.ts +7 -4
  269. package/src/canvas/StaticCanvasOptions.ts +1 -3
  270. package/src/constants.ts +1 -0
  271. package/src/controls/Control.spec.ts +102 -0
  272. package/src/controls/Control.ts +71 -2
  273. package/src/controls/changeHeight.spec.ts +147 -0
  274. package/src/controls/changeWidth.ts +68 -35
  275. package/src/controls/controlRendering.ts +20 -48
  276. package/src/controls/index.ts +7 -1
  277. package/src/gradient/Gradient.spec.ts +101 -46
  278. package/src/gradient/Gradient.ts +27 -14
  279. package/src/shapes/Circle.spec.ts +10 -39
  280. package/src/shapes/Circle.ts +11 -11
  281. package/src/shapes/Ellipse.spec.ts +8 -37
  282. package/src/shapes/Ellipse.ts +7 -7
  283. package/src/shapes/Group.ts +3 -3
  284. package/src/shapes/IText/IText-click-behavior.spec.ts +36 -49
  285. package/src/shapes/IText/IText.ts +5 -6
  286. package/src/shapes/IText/ITextKeyBehavior.test.ts +0 -1
  287. package/src/shapes/IText/__snapshots__/ITextBehavior.test.ts.snap +6 -6
  288. package/src/shapes/Image.spec.ts +17 -33
  289. package/src/shapes/Image.ts +15 -11
  290. package/src/shapes/Line.spec.ts +4 -30
  291. package/src/shapes/Line.ts +11 -16
  292. package/src/shapes/Object/FabricObjectSVGExportMixin.ts +11 -4
  293. package/src/shapes/Object/InteractiveObject.ts +4 -4
  294. package/src/shapes/Object/Object.ts +6 -5
  295. package/src/shapes/Object/ObjectGeometry.spec.ts +15 -0
  296. package/src/shapes/Object/ObjectGeometry.ts +1 -1
  297. package/src/shapes/Object/objectSvgExport.spec.ts +112 -0
  298. package/src/shapes/Object/types/FabricObjectProps.ts +1 -4
  299. package/src/shapes/Object/types/ObjectProps.ts +1 -3
  300. package/src/shapes/Path.spec.ts +4 -27
  301. package/src/shapes/Path.ts +2 -4
  302. package/src/shapes/Polygon.spec.ts +4 -31
  303. package/src/shapes/Polyline.spec.ts +4 -31
  304. package/src/shapes/Polyline.ts +11 -12
  305. package/src/shapes/Rect.spec.ts +25 -33
  306. package/src/shapes/Rect.ts +7 -7
  307. package/src/shapes/Text/StyledText.ts +0 -3
  308. package/src/shapes/Text/Text.spec.ts +3 -32
  309. package/src/shapes/Text/Text.ts +5 -6
  310. package/src/shapes/Text/TextSVGExportMixin.spec.ts +9 -0
  311. package/src/shapes/Text/TextSVGExportMixin.ts +14 -16
  312. package/src/shapes/Text/__snapshots__/Text.spec.ts.snap +1 -1
  313. package/src/shapes/Text/__snapshots__/TextSVGExportMixin.spec.ts.snap +1 -1
  314. package/src/shapes/Textbox.spec.ts +5 -5
  315. package/src/shapes/Textbox.ts +6 -5
  316. package/src/shapes/Triangle.ts +4 -4
  317. package/src/shapes/__snapshots__/Image.spec.ts.snap +4 -4
  318. package/src/shapes/__snapshots__/Textbox.spec.ts.snap +5 -5
  319. package/src/util/lang_string.ts +3 -2
  320. package/src/util/misc/svgParsing.ts +2 -1
  321. package/tsconfig.spec.json +1 -0
  322. package/vitest.config.ts +12 -2
  323. package/vitest.extend.ts +6 -2
@@ -1 +1 @@
1
- {"version":3,"file":"Object.mjs","sources":["../../../../src/shapes/Object/Object.ts"],"sourcesContent":["import { cache } from '../../cache';\nimport { config } from '../../config';\nimport {\n ALIASING_LIMIT,\n CENTER,\n iMatrix,\n LEFT,\n SCALE_X,\n SCALE_Y,\n STROKE,\n FILL,\n TOP,\n VERSION,\n} from '../../constants';\nimport type { ObjectEvents } from '../../EventTypeDefs';\nimport { Point } from '../../Point';\nimport { Shadow } from '../../Shadow';\nimport type {\n TDegree,\n TFiller,\n TSize,\n TCacheCanvasDimensions,\n Abortable,\n TOptions,\n ImageFormat,\n} from '../../typedefs';\nimport { classRegistry } from '../../ClassRegistry';\nimport { runningAnimations } from '../../util/animation/AnimationRegistry';\nimport { capValue } from '../../util/misc/capValue';\nimport {\n createCanvasElement,\n createCanvasElementFor,\n toDataURL,\n toBlob,\n} from '../../util/misc/dom';\nimport { invertTransform, qrDecompose } from '../../util/misc/matrix';\nimport { enlivenObjectEnlivables } from '../../util/misc/objectEnlive';\nimport {\n resetObjectTransform,\n saveObjectTransform,\n} from '../../util/misc/objectTransforms';\nimport { sendObjectToPlane } from '../../util/misc/planeChange';\nimport { pick, pickBy } from '../../util/misc/pick';\nimport { toFixed } from '../../util/misc/toFixed';\nimport type { Group } from '../Group';\nimport { StaticCanvas } from '../../canvas/StaticCanvas';\nimport { isFiller, isSerializableFiller } from '../../util/typeAssertions';\nimport type { FabricImage } from '../Image';\nimport {\n cacheProperties,\n fabricObjectDefaultValues,\n stateProperties,\n} from './defaultValues';\nimport type { Gradient } from '../../gradient/Gradient';\nimport type { Pattern } from '../../Pattern';\nimport type { Canvas } from '../../canvas/Canvas';\nimport type { SerializedObjectProps } from './types/SerializedObjectProps';\nimport type { ObjectProps } from './types/ObjectProps';\nimport { getDevicePixelRatio, getEnv } from '../../env';\nimport { log } from '../../util/internals/console';\nimport type { TColorArg } from '../../color/typedefs';\nimport type { TAnimation } from '../../util/animation/animate';\nimport { animate, animateColor } from '../../util/animation/animate';\nimport type {\n AnimationOptions,\n ArrayAnimationOptions,\n ColorAnimationOptions,\n ValueAnimationOptions,\n} from '../../util/animation/types';\nimport { ObjectGeometry } from './ObjectGeometry';\n\ntype TAncestor = FabricObject;\ntype TCollection = Group;\n\nexport type Ancestors =\n | [FabricObject | Group]\n | [FabricObject | Group, ...Group[]]\n | Group[];\n\nexport type AncestryComparison = {\n /**\n * common ancestors of `this` and`other`(may include`this` | `other`)\n */\n common: Ancestors;\n /**\n * ancestors that are of `this` only\n */\n fork: Ancestors;\n /**\n * ancestors that are of `other` only\n */\n otherFork: Ancestors;\n};\n\nexport type TCachedFabricObject<T extends FabricObject = FabricObject> = T &\n Required<\n Pick<\n T,\n | 'zoomX'\n | 'zoomY'\n | '_cacheCanvas'\n | '_cacheContext'\n | 'cacheTranslationX'\n | 'cacheTranslationY'\n >\n > & {\n _cacheContext: CanvasRenderingContext2D;\n };\n\nexport type ObjectToCanvasElementOptions = {\n format?: ImageFormat;\n /** Multiplier to scale by */\n multiplier?: number;\n /** Cropping left offset. Introduced in v1.2.14 */\n left?: number;\n /** Cropping top offset. Introduced in v1.2.14 */\n top?: number;\n /** Cropping width. Introduced in v1.2.14 */\n width?: number;\n /** Cropping height. Introduced in v1.2.14 */\n height?: number;\n /** Enable retina scaling for clone image. Introduce in 1.6.4 */\n enableRetinaScaling?: boolean;\n /** Remove current object transform ( no scale , no angle, no flip, no skew ). Introduced in 2.3.4 */\n withoutTransform?: boolean;\n /** Remove current object shadow. Introduced in 2.4.2 */\n withoutShadow?: boolean;\n /** Account for canvas viewport transform */\n viewportTransform?: boolean;\n /** Function to create the output canvas to export onto */\n canvasProvider?: <T extends StaticCanvas>(el?: HTMLCanvasElement) => T;\n};\n\ntype toDataURLOptions = ObjectToCanvasElementOptions & {\n quality?: number;\n};\n\nexport type DrawContext =\n | {\n parentClipPaths: FabricObject[];\n width: number;\n height: number;\n cacheTranslationX: number;\n cacheTranslationY: number;\n zoomX: number;\n zoomY: number;\n }\n | Record<string, never>;\n\n/**\n * Root object class from which all 2d shape classes inherit from\n * @see {@link http://fabric5.fabricjs.com/fabric-intro-part-1#objects}\n *\n * @fires added\n * @fires removed\n *\n * @fires selected\n * @fires deselected\n *\n * @fires rotating\n * @fires scaling\n * @fires moving\n * @fires skewing\n * @fires modified\n *\n * @fires mousedown\n * @fires mouseup\n * @fires mouseover\n * @fires mouseout\n * @fires mousewheel\n * @fires mousedblclick\n *\n * @fires dragover\n * @fires dragenter\n * @fires dragleave\n * @fires drop\n */\nexport class FabricObject<\n Props extends TOptions<ObjectProps> = Partial<ObjectProps>,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n SProps extends SerializedObjectProps = SerializedObjectProps,\n EventSpec extends ObjectEvents = ObjectEvents,\n >\n extends ObjectGeometry<EventSpec>\n implements ObjectProps\n{\n declare minScaleLimit: number;\n\n declare opacity: number;\n\n declare paintFirst: 'fill' | 'stroke';\n declare fill: string | TFiller | null;\n declare fillRule: CanvasFillRule;\n declare stroke: string | TFiller | null;\n declare strokeDashArray: number[] | null;\n declare strokeDashOffset: number;\n declare strokeLineCap: CanvasLineCap;\n declare strokeLineJoin: CanvasLineJoin;\n declare strokeMiterLimit: number;\n\n declare globalCompositeOperation: GlobalCompositeOperation;\n declare backgroundColor: string;\n\n declare shadow: Shadow | null;\n\n declare visible: boolean;\n\n declare includeDefaultValues: boolean;\n declare excludeFromExport: boolean;\n\n declare objectCaching: boolean;\n\n declare clipPath?: FabricObject;\n declare inverted: boolean;\n declare absolutePositioned: boolean;\n declare centeredRotation: boolean;\n declare centeredScaling: boolean;\n\n /**\n * This list of properties is used to check if the state of an object is changed.\n * This state change now is only used for children of groups to understand if a group\n * needs its cache regenerated during a .set call\n * @type Array\n */\n static stateProperties: string[] = stateProperties;\n\n /**\n * List of properties to consider when checking if cache needs refresh\n * Those properties are checked by\n * calls to Object.set(key, value). If the key is in this list, the object is marked as dirty\n * and refreshed at the next render\n * @type Array\n */\n static cacheProperties: string[] = cacheProperties;\n\n /**\n * When set to `true`, object's cache will be rerendered next render call.\n * since 1.7.0\n * @type Boolean\n * @default true\n */\n declare dirty: boolean;\n\n /**\n * Quick access for the _cacheCanvas rendering context\n * This is part of the objectCaching feature\n * since 1.7.0\n * @type boolean\n * @default undefined\n * @private\n */\n _cacheContext: CanvasRenderingContext2D | null = null;\n\n /**\n * A reference to the HTMLCanvasElement that is used to contain the cache of the object\n * this canvas element is resized and cleared as needed\n * Is marked private, you can read it, don't use it since it is handled by fabric\n * since 1.7.0\n * @type HTMLCanvasElement\n * @default undefined\n * @private\n */\n declare _cacheCanvas?: HTMLCanvasElement;\n\n /**\n * zoom level used on the cacheCanvas to draw the cache, X axe\n * since 1.7.0\n * @type number\n * @default undefined\n * @private\n */\n declare zoomX?: number;\n\n /**\n * zoom level used on the cacheCanvas to draw the cache, Y axe\n * since 1.7.0\n * @type number\n * @default undefined\n * @private\n */\n declare zoomY?: number;\n\n /**\n * zoom level used on the cacheCanvas to draw the cache, Y axe\n * since 1.7.0\n * @type number\n * @default undefined\n * @private\n */\n declare cacheTranslationX?: number;\n\n /**\n * translation of the cacheCanvas away from the center, for subpixel accuracy and crispness\n * since 1.7.0\n * @type number\n * @default undefined\n * @private\n */\n declare cacheTranslationY?: number;\n\n /**\n * A reference to the parent of the object, usually a Group\n * @type number\n * @default undefined\n * @private\n */\n declare group?: Group;\n\n /**\n * Indicate if the object is sitting on a cache dedicated to it\n * or is part of a larger cache for many object ( a group for example)\n * @type number\n * @default undefined\n * @private\n */\n declare ownCaching?: boolean;\n\n /**\n * Private. indicates if the object inside a group is on a transformed context or not\n * or is part of a larger cache for many object ( a group for example)\n * @type boolean\n * @default undefined\n * @private\n */\n declare _transformDone?: boolean;\n\n static ownDefaults = fabricObjectDefaultValues;\n\n static getDefaults(): Record<string, any> {\n return FabricObject.ownDefaults;\n }\n\n /**\n * The class type.\n * This is used for serialization and deserialization purposes and internally it can be used\n * to identify classes.\n * When we transform a class in a plain JS object we need a way to recognize which class it was,\n * and the type is the way we do that. It has no other purposes and you should not give one.\n * Hard to reach on instances and please do not use to drive instance's logic (this.constructor.type).\n * To idenfity a class use instanceof class ( instanceof Rect ).\n * We do not do that in fabricJS code because we want to try to have code splitting possible.\n */\n static type = 'FabricObject';\n\n /**\n * Legacy identifier of the class. Prefer using utils like isType or instanceOf\n * Will be removed in fabric 7 or 8.\n * The setter exists to avoid type errors in old code and possibly current deserialization code.\n * DO NOT build new code around this type value\n * @TODO add sustainable warning message\n * @type string\n * @deprecated\n */\n get type() {\n const name = (this.constructor as typeof FabricObject).type;\n if (name === 'FabricObject') {\n return 'object';\n }\n return name.toLowerCase();\n }\n\n set type(value) {\n log('warn', 'Setting type has no effect', value);\n }\n\n /**\n * Constructor\n * @param {Object} [options] Options object\n */\n constructor(options?: Props) {\n super();\n Object.assign(this, FabricObject.ownDefaults);\n this.setOptions(options);\n }\n\n /**\n * Create a the canvas used to keep the cached copy of the object\n * @private\n */\n _createCacheCanvas() {\n this._cacheCanvas = createCanvasElement();\n this._cacheContext = this._cacheCanvas.getContext('2d');\n this._updateCacheCanvas();\n // if canvas gets created, is empty, so dirty.\n this.dirty = true;\n }\n\n /**\n * Limit the cache dimensions so that X * Y do not cross config.perfLimitSizeTotal\n * and each side do not cross fabric.cacheSideLimit\n * those numbers are configurable so that you can get as much detail as you want\n * making bargain with performances.\n * It mutates the input object dims.\n * @param {TCacheCanvasDimensions} dims\n * @return {TCacheCanvasDimensions} dims\n */\n _limitCacheSize(\n dims: TCacheCanvasDimensions & { capped?: boolean },\n ): TCacheCanvasDimensions & { capped?: boolean } {\n const width = dims.width,\n height = dims.height,\n max = config.maxCacheSideLimit,\n min = config.minCacheSideLimit;\n if (\n width <= max &&\n height <= max &&\n width * height <= config.perfLimitSizeTotal\n ) {\n if (width < min) {\n dims.width = min;\n }\n if (height < min) {\n dims.height = min;\n }\n return dims;\n }\n const ar = width / height,\n [limX, limY] = cache.limitDimsByArea(ar),\n x = capValue(min, limX, max),\n y = capValue(min, limY, max);\n if (width > x) {\n dims.zoomX /= width / x;\n dims.width = x;\n dims.capped = true;\n }\n if (height > y) {\n dims.zoomY /= height / y;\n dims.height = y;\n dims.capped = true;\n }\n return dims;\n }\n\n /**\n * Return the dimension and the zoom level needed to create a cache canvas\n * big enough to host the object to be cached.\n * @private\n * @return {TCacheCanvasDimensions} Informations about the object to be cached\n */\n _getCacheCanvasDimensions(): TCacheCanvasDimensions {\n const objectScale = this.getTotalObjectScaling(),\n // calculate dimensions without skewing\n dim = this._getTransformedDimensions({ skewX: 0, skewY: 0 }),\n neededX = (dim.x * objectScale.x) / this.scaleX,\n neededY = (dim.y * objectScale.y) / this.scaleY;\n return {\n // for sure this ALIASING_LIMIT is slightly creating problem\n // in situation in which the cache canvas gets an upper limit\n // also objectScale contains already scaleX and scaleY\n width: Math.ceil(neededX + ALIASING_LIMIT),\n height: Math.ceil(neededY + ALIASING_LIMIT),\n zoomX: objectScale.x,\n zoomY: objectScale.y,\n x: neededX,\n y: neededY,\n };\n }\n\n /**\n * Update width and height of the canvas for cache\n * returns true or false if canvas needed resize.\n * @private\n * @return {Boolean} true if the canvas has been resized\n */\n _updateCacheCanvas() {\n const canvas = this._cacheCanvas!,\n context = this._cacheContext,\n { width, height, zoomX, zoomY, x, y } = this._limitCacheSize(\n this._getCacheCanvasDimensions(),\n ),\n dimensionsChanged = width !== canvas.width || height !== canvas.height,\n zoomChanged = this.zoomX !== zoomX || this.zoomY !== zoomY;\n\n if (!canvas || !context) {\n return false;\n }\n\n const shouldRedraw = dimensionsChanged || zoomChanged;\n\n if (shouldRedraw) {\n if (width !== canvas.width || height !== canvas.height) {\n canvas.width = width;\n canvas.height = height;\n } else {\n context.setTransform(1, 0, 0, 1, 0, 0);\n context.clearRect(0, 0, canvas.width, canvas.height);\n }\n const drawingWidth = x / 2;\n const drawingHeight = y / 2;\n this.cacheTranslationX =\n Math.round(canvas.width / 2 - drawingWidth) + drawingWidth;\n this.cacheTranslationY =\n Math.round(canvas.height / 2 - drawingHeight) + drawingHeight;\n context.translate(this.cacheTranslationX, this.cacheTranslationY);\n context.scale(zoomX, zoomY);\n this.zoomX = zoomX;\n this.zoomY = zoomY;\n return true;\n }\n return false;\n }\n\n /**\n * Sets object's properties from options, for class constructor only.\n * Needs to be overridden for different defaults.\n * @protected\n * @param {Object} [options] Options object\n */\n protected setOptions(options: Record<string, any> = {}) {\n this._setOptions(options);\n }\n\n /**\n * Transforms context when rendering an object\n * @param {CanvasRenderingContext2D} ctx Context\n */\n transform(ctx: CanvasRenderingContext2D) {\n const needFullTransform =\n (this.group && !this.group._transformDone) ||\n (this.group && this.canvas && ctx === (this.canvas as Canvas).contextTop);\n const m = this.calcTransformMatrix(!needFullTransform);\n ctx.transform(m[0], m[1], m[2], m[3], m[4], m[5]);\n }\n\n /**\n * Return the object scale factor counting also the group scaling\n * @return {Point}\n */\n getObjectScaling() {\n // if the object is a top level one, on the canvas, we go for simple aritmetic\n // otherwise the complex method with angles will return approximations and decimals\n // and will likely kill the cache when not needed\n // https://github.com/fabricjs/fabric.js/issues/7157\n if (!this.group) {\n return new Point(Math.abs(this.scaleX), Math.abs(this.scaleY));\n }\n // if we are inside a group total zoom calculation is complex, we defer to generic matrices\n const options = qrDecompose(this.calcTransformMatrix());\n return new Point(Math.abs(options.scaleX), Math.abs(options.scaleY));\n }\n\n /**\n * Return the object scale factor counting also the group scaling, zoom and retina\n * @return {Object} object with scaleX and scaleY properties\n */\n getTotalObjectScaling() {\n const scale = this.getObjectScaling();\n if (this.canvas) {\n const zoom = this.canvas.getZoom();\n const retina = this.getCanvasRetinaScaling();\n return scale.scalarMultiply(zoom * retina);\n }\n return scale;\n }\n\n /**\n * Return the object opacity counting also the group property\n * @return {Number}\n */\n getObjectOpacity() {\n let opacity = this.opacity;\n if (this.group) {\n opacity *= this.group.getObjectOpacity();\n }\n return opacity;\n }\n\n /**\n * Makes sure the scale is valid and modifies it if necessary\n * @todo: this is a control action issue, not a geometry one\n * @private\n * @param {Number} value, unconstrained\n * @return {Number} constrained value;\n */\n _constrainScale(value: number): number {\n if (Math.abs(value) < this.minScaleLimit) {\n if (value < 0) {\n return -this.minScaleLimit;\n } else {\n return this.minScaleLimit;\n }\n } else if (value === 0) {\n return 0.0001;\n }\n return value;\n }\n\n /**\n * Handles setting values on the instance and handling internal side effects\n * @protected\n * @param {String} key\n * @param {*} value\n */\n _set(key: string, value: any) {\n if (key === SCALE_X || key === SCALE_Y) {\n value = this._constrainScale(value);\n }\n if (key === SCALE_X && value < 0) {\n this.flipX = !this.flipX;\n value *= -1;\n } else if (key === 'scaleY' && value < 0) {\n this.flipY = !this.flipY;\n value *= -1;\n // i don't like this automatic initialization here\n } else if (key === 'shadow' && value && !(value instanceof Shadow)) {\n value = new Shadow(value);\n }\n\n const isChanged = this[key as keyof this] !== value;\n this[key as keyof this] = value;\n\n // invalidate caches\n if (\n isChanged &&\n (this.constructor as typeof FabricObject).cacheProperties.includes(key)\n ) {\n this.dirty = true;\n }\n // a dirty child makes the parent dirty.\n // but a non dirty child does not make the parent not dirty.\n // the parent could be dirty for some other reason.\n this.parent &&\n (this.dirty ||\n (isChanged &&\n (this.constructor as typeof FabricObject).stateProperties.includes(\n key,\n ))) &&\n this.parent._set('dirty', true);\n\n return this;\n }\n\n /**\n * return if the object would be visible in rendering\n * @return {Boolean}\n */\n isNotVisible() {\n return (\n this.opacity === 0 ||\n (!this.width && !this.height && this.strokeWidth === 0) ||\n !this.visible\n );\n }\n\n /**\n * Renders an object on a specified context\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n render(ctx: CanvasRenderingContext2D) {\n // do not render if width/height are zeros or object is not visible\n if (this.isNotVisible()) {\n return;\n }\n if (\n this.canvas &&\n this.canvas.skipOffscreen &&\n !this.group &&\n !this.isOnScreen()\n ) {\n return;\n }\n ctx.save();\n this._setupCompositeOperation(ctx);\n this.drawSelectionBackground(ctx);\n this.transform(ctx);\n this._setOpacity(ctx);\n this._setShadow(ctx);\n if (this.shouldCache()) {\n (this as TCachedFabricObject).renderCache();\n (this as TCachedFabricObject).drawCacheOnCanvas(ctx);\n } else {\n this._removeCacheCanvas();\n this.drawObject(ctx, false, {});\n this.dirty = false;\n }\n ctx.restore();\n }\n\n drawSelectionBackground(_ctx: CanvasRenderingContext2D) {\n /* no op */\n }\n\n renderCache(this: TCachedFabricObject, options?: any) {\n options = options || {};\n if (!this._cacheCanvas || !this._cacheContext) {\n this._createCacheCanvas();\n }\n if (this.isCacheDirty() && this._cacheContext) {\n const { zoomX, zoomY, cacheTranslationX, cacheTranslationY } = this;\n const { width, height } = this._cacheCanvas;\n this.drawObject(this._cacheContext, options.forClipping, {\n zoomX,\n zoomY,\n cacheTranslationX,\n cacheTranslationY,\n width,\n height,\n parentClipPaths: [],\n });\n this.dirty = false;\n }\n }\n\n /**\n * Remove cacheCanvas and its dimensions from the objects\n */\n _removeCacheCanvas() {\n this._cacheCanvas = undefined;\n this._cacheContext = null;\n }\n\n /**\n * return true if the object will draw a stroke\n * Does not consider text styles. This is just a shortcut used at rendering time\n * We want it to be an approximation and be fast.\n * wrote to avoid extra caching, it has to return true when stroke happens,\n * can guess when it will not happen at 100% chance, does not matter if it misses\n * some use case where the stroke is invisible.\n * @since 3.0.0\n * @returns Boolean\n */\n hasStroke(): boolean {\n return (\n !!this.stroke && this.stroke !== 'transparent' && this.strokeWidth !== 0\n );\n }\n\n /**\n * return true if the object will draw a fill\n * Does not consider text styles. This is just a shortcut used at rendering time\n * We want it to be an approximation and be fast.\n * wrote to avoid extra caching, it has to return true when fill happens,\n * can guess when it will not happen at 100% chance, does not matter if it misses\n * some use case where the fill is invisible.\n * @since 3.0.0\n * @returns Boolean\n */\n hasFill(): boolean {\n return !!this.fill && this.fill !== 'transparent';\n }\n\n /**\n * When returns `true`, force the object to have its own cache, even if it is inside a group\n * it may be needed when your object behave in a particular way on the cache and always needs\n * its own isolated canvas to render correctly.\n * Created to be overridden\n * since 1.7.12\n * @returns Boolean\n */\n needsItsOwnCache() {\n // TODO re-evaluate this shadow condition\n if (\n this.paintFirst === STROKE &&\n this.hasFill() &&\n this.hasStroke() &&\n !!this.shadow\n ) {\n return true;\n }\n if (this.clipPath) {\n return true;\n }\n return false;\n }\n\n /**\n * Decide if the object should cache or not. Create its own cache level\n * objectCaching is a global flag, wins over everything\n * needsItsOwnCache should be used when the object drawing method requires\n * a cache step.\n * Generally you do not cache objects in groups because the group outside is cached.\n * Read as: cache if is needed, or if the feature is enabled but we are not already caching.\n * @return {Boolean}\n */\n shouldCache() {\n this.ownCaching =\n (this.objectCaching && (!this.parent || !this.parent.isOnACache())) ||\n this.needsItsOwnCache();\n return this.ownCaching;\n }\n\n /**\n * Check if this object will cast a shadow with an offset.\n * used by Group.shouldCache to know if child has a shadow recursively\n * @return {Boolean}\n * @deprecated\n */\n willDrawShadow() {\n return (\n !!this.shadow && (this.shadow.offsetX !== 0 || this.shadow.offsetY !== 0)\n );\n }\n\n /**\n * Execute the drawing operation for an object clipPath\n * @param {CanvasRenderingContext2D} ctx Context to render on\n * @param {FabricObject} clipPath\n */\n drawClipPathOnCache(\n ctx: CanvasRenderingContext2D,\n clipPath: FabricObject,\n canvasWithClipPath: HTMLCanvasElement,\n ) {\n ctx.save();\n // DEBUG: uncomment this line, comment the following\n // ctx.globalAlpha = 0.4\n if (clipPath.inverted) {\n ctx.globalCompositeOperation = 'destination-out';\n } else {\n ctx.globalCompositeOperation = 'destination-in';\n }\n ctx.setTransform(1, 0, 0, 1, 0, 0);\n ctx.drawImage(canvasWithClipPath, 0, 0);\n ctx.restore();\n }\n\n /**\n * Execute the drawing operation for an object on a specified context\n * @param {CanvasRenderingContext2D} ctx Context to render on\n * @param {boolean} forClipping apply clipping styles\n * @param {DrawContext} context additional context for rendering\n */\n drawObject(\n ctx: CanvasRenderingContext2D,\n forClipping: boolean | undefined,\n context: DrawContext,\n ) {\n const originalFill = this.fill,\n originalStroke = this.stroke;\n if (forClipping) {\n this.fill = 'black';\n this.stroke = '';\n this._setClippingProperties(ctx);\n } else {\n this._renderBackground(ctx);\n }\n this._render(ctx);\n this._drawClipPath(ctx, this.clipPath, context);\n this.fill = originalFill;\n this.stroke = originalStroke;\n }\n\n private createClipPathLayer(\n this: TCachedFabricObject,\n clipPath: FabricObject,\n context: DrawContext,\n ) {\n const canvas = createCanvasElementFor(context as TSize);\n const ctx = canvas.getContext('2d')!;\n ctx.translate(context.cacheTranslationX, context.cacheTranslationY);\n ctx.scale(context.zoomX, context.zoomY);\n clipPath._cacheCanvas = canvas;\n context.parentClipPaths.forEach((prevClipPath) => {\n prevClipPath.transform(ctx);\n });\n context.parentClipPaths.push(clipPath);\n if (clipPath.absolutePositioned) {\n const m = invertTransform(this.calcTransformMatrix());\n ctx.transform(m[0], m[1], m[2], m[3], m[4], m[5]);\n }\n clipPath.transform(ctx);\n clipPath.drawObject(ctx, true, context);\n return canvas;\n }\n\n /**\n * Prepare clipPath state and cache and draw it on instance's cache\n * @param {CanvasRenderingContext2D} ctx\n * @param {FabricObject} clipPath\n */\n _drawClipPath(\n ctx: CanvasRenderingContext2D,\n clipPath: FabricObject | undefined,\n context: DrawContext,\n ) {\n if (!clipPath) {\n return;\n }\n // needed to setup _transformDone\n // TODO find a better solution?\n clipPath._transformDone = true;\n const canvas = (this as TCachedFabricObject).createClipPathLayer(\n clipPath,\n context,\n );\n this.drawClipPathOnCache(ctx, clipPath, canvas);\n }\n\n /**\n * Paint the cached copy of the object on the target context.\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n drawCacheOnCanvas(this: TCachedFabricObject, ctx: CanvasRenderingContext2D) {\n ctx.scale(1 / this.zoomX, 1 / this.zoomY);\n ctx.drawImage(\n this._cacheCanvas,\n -this.cacheTranslationX,\n -this.cacheTranslationY,\n );\n }\n\n /**\n * Check if cache is dirty and if is dirty clear the context.\n * This check has a big side effect, it changes the underlying cache canvas if necessary.\n * Do not call this method on your own to check if the cache is dirty, because if it is,\n * it is also going to wipe the cache. This is badly designed and needs to be fixed.\n * @param {Boolean} skipCanvas skip canvas checks because this object is painted\n * on parent canvas.\n */\n isCacheDirty(skipCanvas = false) {\n if (this.isNotVisible()) {\n return false;\n }\n const canvas = this._cacheCanvas;\n const ctx = this._cacheContext;\n if (canvas && ctx && !skipCanvas && this._updateCacheCanvas()) {\n // in this case the context is already cleared.\n return true;\n } else {\n if (this.dirty || (this.clipPath && this.clipPath.absolutePositioned)) {\n if (canvas && ctx && !skipCanvas) {\n ctx.save();\n ctx.setTransform(1, 0, 0, 1, 0, 0);\n ctx.clearRect(0, 0, canvas.width, canvas.height);\n ctx.restore();\n }\n return true;\n }\n }\n return false;\n }\n\n /**\n * Draws a background for the object big as its untransformed dimensions\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _renderBackground(ctx: CanvasRenderingContext2D) {\n if (!this.backgroundColor) {\n return;\n }\n const dim = this._getNonTransformedDimensions();\n ctx.fillStyle = this.backgroundColor;\n\n ctx.fillRect(-dim.x / 2, -dim.y / 2, dim.x, dim.y);\n // if there is background color no other shadows\n // should be casted\n this._removeShadow(ctx);\n }\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _setOpacity(ctx: CanvasRenderingContext2D) {\n if (this.group && !this.group._transformDone) {\n ctx.globalAlpha = this.getObjectOpacity();\n } else {\n ctx.globalAlpha *= this.opacity;\n }\n }\n\n _setStrokeStyles(\n ctx: CanvasRenderingContext2D,\n decl: Pick<\n this,\n | 'stroke'\n | 'strokeWidth'\n | 'strokeLineCap'\n | 'strokeDashOffset'\n | 'strokeLineJoin'\n | 'strokeMiterLimit'\n >,\n ) {\n const stroke = decl.stroke;\n if (stroke) {\n ctx.lineWidth = decl.strokeWidth;\n ctx.lineCap = decl.strokeLineCap;\n ctx.lineDashOffset = decl.strokeDashOffset;\n ctx.lineJoin = decl.strokeLineJoin;\n ctx.miterLimit = decl.strokeMiterLimit;\n if (isFiller(stroke)) {\n if (\n (stroke as Gradient<'linear'>).gradientUnits === 'percentage' ||\n (stroke as Gradient<'linear'>).gradientTransform ||\n (stroke as Pattern).patternTransform\n ) {\n // need to transform gradient in a pattern.\n // this is a slow process. If you are hitting this codepath, and the object\n // is not using caching, you should consider switching it on.\n // we need a canvas as big as the current object caching canvas.\n this._applyPatternForTransformedGradient(ctx, stroke);\n } else {\n // is a simple gradient or pattern\n ctx.strokeStyle = stroke.toLive(ctx)!;\n this._applyPatternGradientTransform(ctx, stroke);\n }\n } else {\n // is a color\n ctx.strokeStyle = decl.stroke as string;\n }\n }\n }\n\n _setFillStyles(ctx: CanvasRenderingContext2D, { fill }: Pick<this, 'fill'>) {\n if (fill) {\n if (isFiller(fill)) {\n ctx.fillStyle = fill.toLive(ctx)!;\n this._applyPatternGradientTransform(ctx, fill);\n } else {\n ctx.fillStyle = fill;\n }\n }\n }\n\n _setClippingProperties(ctx: CanvasRenderingContext2D) {\n ctx.globalAlpha = 1;\n ctx.strokeStyle = 'transparent';\n ctx.fillStyle = '#000000';\n }\n\n /**\n * @private\n * Sets line dash\n * @param {CanvasRenderingContext2D} ctx Context to set the dash line on\n * @param {Array} dashArray array representing dashes\n */\n _setLineDash(ctx: CanvasRenderingContext2D, dashArray?: number[] | null) {\n if (!dashArray || dashArray.length === 0) {\n return;\n }\n ctx.setLineDash(dashArray);\n }\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _setShadow(ctx: CanvasRenderingContext2D) {\n if (!this.shadow) {\n return;\n }\n\n const shadow = this.shadow,\n canvas = this.canvas,\n retinaScaling = this.getCanvasRetinaScaling(),\n [sx, , , sy] = canvas?.viewportTransform || iMatrix,\n multX = sx * retinaScaling,\n multY = sy * retinaScaling,\n scaling = shadow.nonScaling ? new Point(1, 1) : this.getObjectScaling();\n ctx.shadowColor = shadow.color;\n ctx.shadowBlur =\n (shadow.blur *\n config.browserShadowBlurConstant *\n (multX + multY) *\n (scaling.x + scaling.y)) /\n 4;\n ctx.shadowOffsetX = shadow.offsetX * multX * scaling.x;\n ctx.shadowOffsetY = shadow.offsetY * multY * scaling.y;\n }\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _removeShadow(ctx: CanvasRenderingContext2D) {\n if (!this.shadow) {\n return;\n }\n\n ctx.shadowColor = '';\n ctx.shadowBlur = ctx.shadowOffsetX = ctx.shadowOffsetY = 0;\n }\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n * @param {TFiller} filler {@link Pattern} or {@link Gradient}\n */\n _applyPatternGradientTransform(\n ctx: CanvasRenderingContext2D,\n filler: TFiller,\n ) {\n if (!isFiller(filler)) {\n return { offsetX: 0, offsetY: 0 };\n }\n const t =\n (filler as Gradient<'linear'>).gradientTransform ||\n (filler as Pattern).patternTransform;\n const offsetX = -this.width / 2 + filler.offsetX || 0,\n offsetY = -this.height / 2 + filler.offsetY || 0;\n\n if ((filler as Gradient<'linear'>).gradientUnits === 'percentage') {\n ctx.transform(this.width, 0, 0, this.height, offsetX, offsetY);\n } else {\n ctx.transform(1, 0, 0, 1, offsetX, offsetY);\n }\n if (t) {\n ctx.transform(t[0], t[1], t[2], t[3], t[4], t[5]);\n }\n return { offsetX: offsetX, offsetY: offsetY };\n }\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _renderPaintInOrder(ctx: CanvasRenderingContext2D) {\n if (this.paintFirst === STROKE) {\n this._renderStroke(ctx);\n this._renderFill(ctx);\n } else {\n this._renderFill(ctx);\n this._renderStroke(ctx);\n }\n }\n\n /**\n * @private\n * function that actually render something on the context.\n * empty here to allow Obects to work on tests to benchmark fabric functionalites\n * not related to rendering\n * @param {CanvasRenderingContext2D} _ctx Context to render on\n */\n _render(_ctx: CanvasRenderingContext2D) {\n // placeholder to be overridden\n }\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _renderFill(ctx: CanvasRenderingContext2D) {\n if (!this.fill) {\n return;\n }\n\n ctx.save();\n this._setFillStyles(ctx, this);\n if (this.fillRule === 'evenodd') {\n ctx.fill('evenodd');\n } else {\n ctx.fill();\n }\n ctx.restore();\n }\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _renderStroke(ctx: CanvasRenderingContext2D) {\n if (!this.stroke || this.strokeWidth === 0) {\n return;\n }\n\n if (this.shadow && !this.shadow.affectStroke) {\n this._removeShadow(ctx);\n }\n\n ctx.save();\n if (this.strokeUniform) {\n const scaling = this.getObjectScaling();\n ctx.scale(1 / scaling.x, 1 / scaling.y);\n }\n this._setLineDash(ctx, this.strokeDashArray);\n this._setStrokeStyles(ctx, this);\n ctx.stroke();\n ctx.restore();\n }\n\n /**\n * This function try to patch the missing gradientTransform on canvas gradients.\n * transforming a context to transform the gradient, is going to transform the stroke too.\n * we want to transform the gradient but not the stroke operation, so we create\n * a transformed gradient on a pattern and then we use the pattern instead of the gradient.\n * this method has drawbacks: is slow, is in low resolution, needs a patch for when the size\n * is limited.\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n * @param {Gradient} filler\n */\n _applyPatternForTransformedGradient(\n ctx: CanvasRenderingContext2D,\n filler: TFiller,\n ) {\n const dims = this._limitCacheSize(this._getCacheCanvasDimensions()),\n retinaScaling = this.getCanvasRetinaScaling(),\n width = dims.x / this.scaleX / retinaScaling,\n height = dims.y / this.scaleY / retinaScaling,\n pCanvas = createCanvasElementFor({\n // in case width and height are less than 1px, we have to round up.\n // since the pattern is no-repeat, this is fine\n width: Math.ceil(width),\n height: Math.ceil(height),\n });\n\n const pCtx = pCanvas.getContext('2d');\n if (!pCtx) {\n return;\n }\n pCtx.beginPath();\n pCtx.moveTo(0, 0);\n pCtx.lineTo(width, 0);\n pCtx.lineTo(width, height);\n pCtx.lineTo(0, height);\n pCtx.closePath();\n pCtx.translate(width / 2, height / 2);\n pCtx.scale(\n dims.zoomX / this.scaleX / retinaScaling,\n dims.zoomY / this.scaleY / retinaScaling,\n );\n this._applyPatternGradientTransform(pCtx, filler);\n pCtx.fillStyle = filler.toLive(ctx)!;\n pCtx.fill();\n ctx.translate(\n -this.width / 2 - this.strokeWidth / 2,\n -this.height / 2 - this.strokeWidth / 2,\n );\n ctx.scale(\n (retinaScaling * this.scaleX) / dims.zoomX,\n (retinaScaling * this.scaleY) / dims.zoomY,\n );\n ctx.strokeStyle = pCtx.createPattern(pCanvas, 'no-repeat') ?? '';\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 * It doesn't matter where the objects origin are, svg has left and top in the top left corner,\n * And this method is only run once on the object after the fromElement parser.\n * @private\n * @return {Point} center point from element coordinates\n */\n _findCenterFromElement() {\n return new Point(this.left + this.width / 2, this.top + this.height / 2);\n }\n\n /**\n * Clones an instance.\n * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n * @returns {Promise<FabricObject>}\n */\n clone(propertiesToInclude?: string[]): Promise<this> {\n const objectForm = this.toObject(propertiesToInclude);\n return (this.constructor as typeof FabricObject).fromObject(\n objectForm,\n ) as unknown as Promise<this>;\n }\n\n /**\n * Creates an instance of Image out of an object\n * makes use of toCanvasElement.\n * Once this method was based on toDataUrl and loadImage, so it also had a quality\n * and format option. toCanvasElement is faster and produce no loss of quality.\n * If you need to get a real Jpeg or Png from an object, using toDataURL is the right way to do it.\n * toCanvasElement and then toBlob from the obtained canvas is also a good option.\n * @todo fix the export type, it could not be Image but the type that getClass return for 'image'.\n * @param {ObjectToCanvasElementOptions} [options] for clone as image, passed to toDataURL\n * @param {Number} [options.multiplier=1] Multiplier to scale by\n * @param {Number} [options.left] Cropping left offset. Introduced in v1.2.14\n * @param {Number} [options.top] Cropping top offset. Introduced in v1.2.14\n * @param {Number} [options.width] Cropping width. Introduced in v1.2.14\n * @param {Number} [options.height] Cropping height. Introduced in v1.2.14\n * @param {Boolean} [options.enableRetinaScaling] Enable retina scaling for clone image. Introduce in 1.6.4\n * @param {Boolean} [options.withoutTransform] Remove current object transform ( no scale , no angle, no flip, no skew ). Introduced in 2.3.4\n * @param {Boolean} [options.withoutShadow] Remove current object shadow. Introduced in 2.4.2\n * @return {FabricImage} Object cloned as image.\n */\n cloneAsImage(options: ObjectToCanvasElementOptions): FabricImage {\n const canvasEl = this.toCanvasElement(options);\n // TODO: how to import Image w/o an import cycle?\n const ImageClass = classRegistry.getClass<typeof FabricImage>('image');\n return new ImageClass(canvasEl);\n }\n\n /**\n * Converts an object into a HTMLCanvas element\n * @param {ObjectToCanvasElementOptions} options Options object\n * @param {Number} [options.multiplier=1] Multiplier to scale by\n * @param {Number} [options.left] Cropping left offset. Introduced in v1.2.14\n * @param {Number} [options.top] Cropping top offset. Introduced in v1.2.14\n * @param {Number} [options.width] Cropping width. Introduced in v1.2.14\n * @param {Number} [options.height] Cropping height. Introduced in v1.2.14\n * @param {Boolean} [options.enableRetinaScaling] Enable retina scaling for clone image. Introduce in 1.6.4\n * @param {Boolean} [options.withoutTransform] Remove current object transform ( no scale , no angle, no flip, no skew ). Introduced in 2.3.4\n * @param {Boolean} [options.withoutShadow] Remove current object shadow. Introduced in 2.4.2\n * @param {Boolean} [options.viewportTransform] Account for canvas viewport transform\n * @param {(el?: HTMLCanvasElement) => StaticCanvas} [options.canvasProvider] Create the output canvas\n * @return {HTMLCanvasElement} Returns DOM element <canvas> with the FabricObject\n */\n toCanvasElement(options: ObjectToCanvasElementOptions = {}) {\n const origParams = saveObjectTransform(this),\n originalGroup = this.group,\n originalShadow = this.shadow,\n abs = Math.abs,\n retinaScaling = options.enableRetinaScaling ? getDevicePixelRatio() : 1,\n multiplier = (options.multiplier || 1) * retinaScaling,\n canvasProvider: (el: HTMLCanvasElement) => StaticCanvas =\n options.canvasProvider ||\n ((el: HTMLCanvasElement) =>\n new StaticCanvas(el, {\n enableRetinaScaling: false,\n renderOnAddRemove: false,\n skipOffscreen: false,\n }));\n delete this.group;\n if (options.withoutTransform) {\n resetObjectTransform(this);\n }\n if (options.withoutShadow) {\n this.shadow = null;\n }\n if (options.viewportTransform) {\n sendObjectToPlane(this, this.getViewportTransform());\n }\n\n this.setCoords();\n const el = createCanvasElement(),\n boundingRect = this.getBoundingRect(),\n shadow = this.shadow,\n shadowOffset = new Point();\n\n if (shadow) {\n const shadowBlur = shadow.blur;\n const scaling = shadow.nonScaling\n ? new Point(1, 1)\n : this.getObjectScaling();\n // consider non scaling shadow.\n shadowOffset.x =\n 2 * Math.round(abs(shadow.offsetX) + shadowBlur) * abs(scaling.x);\n shadowOffset.y =\n 2 * Math.round(abs(shadow.offsetY) + shadowBlur) * abs(scaling.y);\n }\n const width = boundingRect.width + shadowOffset.x,\n height = boundingRect.height + shadowOffset.y;\n // if the current width/height is not an integer\n // we need to make it so.\n el.width = Math.ceil(width);\n el.height = Math.ceil(height);\n const canvas = canvasProvider(el);\n if (options.format === 'jpeg') {\n canvas.backgroundColor = '#fff';\n }\n this.setPositionByOrigin(\n new Point(canvas.width / 2, canvas.height / 2),\n CENTER,\n CENTER,\n );\n const originalCanvas = this.canvas;\n // static canvas and canvas have both an array of InteractiveObjects\n // @ts-expect-error this needs to be fixed somehow, or ignored globally\n canvas._objects = [this];\n this.set('canvas', canvas);\n this.setCoords();\n const canvasEl = canvas.toCanvasElement(multiplier || 1, options);\n this.set('canvas', originalCanvas);\n this.shadow = originalShadow;\n if (originalGroup) {\n this.group = originalGroup;\n }\n this.set(origParams);\n this.setCoords();\n // canvas.dispose will call image.dispose that will nullify the elements\n // since this canvas is a simple element for the process, we remove references\n // to objects in this way in order to avoid object trashing.\n canvas._objects = [];\n // since render has settled it is safe to destroy canvas\n canvas.destroy();\n return canvasEl;\n }\n\n /**\n * Converts an object into a data-url-like string\n * @param {Object} options Options object\n * @param {String} [options.format=png] The format of the output image. Either \"jpeg\" or \"png\"\n * @param {Number} [options.quality=1] Quality level (0..1). Only used for jpeg.\n * @param {Number} [options.multiplier=1] Multiplier to scale by\n * @param {Number} [options.left] Cropping left offset. Introduced in v1.2.14\n * @param {Number} [options.top] Cropping top offset. Introduced in v1.2.14\n * @param {Number} [options.width] Cropping width. Introduced in v1.2.14\n * @param {Number} [options.height] Cropping height. Introduced in v1.2.14\n * @param {Boolean} [options.enableRetinaScaling] Enable retina scaling for clone image. Introduce in 1.6.4\n * @param {Boolean} [options.withoutTransform] Remove current object transform ( no scale , no angle, no flip, no skew ). Introduced in 2.3.4\n * @param {Boolean} [options.withoutShadow] Remove current object shadow. Introduced in 2.4.2\n * @return {String} Returns a data: URL containing a representation of the object in the format specified by options.format\n */\n toDataURL(options: toDataURLOptions = {}) {\n return toDataURL(\n this.toCanvasElement(options),\n options.format || 'png',\n options.quality || 1,\n );\n }\n toBlob(options: toDataURLOptions = {}) {\n return toBlob(\n this.toCanvasElement(options),\n options.format || 'png',\n options.quality || 1,\n );\n }\n\n /**\n * Checks if the instance is of any of the specified types.\n * We use this to filter a list of objects for the `getObjects` function.\n *\n * For detecting an instance type `instanceOf` is a better check,\n * but to avoid to make specific classes a dependency of generic code\n * internally we use this.\n *\n * This compares both the static class `type` and the instance's own `type` property\n * against the provided list of types.\n *\n * @param types - A list of type strings to check against.\n * @returns `true` if the object's type or class type matches any in the list, otherwise `false`.\n */\n isType(...types: string[]) {\n return (\n types.includes((this.constructor as typeof FabricObject).type) ||\n types.includes(this.type)\n );\n }\n\n /**\n * Returns complexity of an instance\n * @return {Number} complexity of this instance (is 1 unless subclassed)\n */\n complexity() {\n return 1;\n }\n\n /**\n * Returns a JSON representation of an instance\n * @return {Object} JSON\n */\n toJSON() {\n // delegate, not alias\n return this.toObject();\n }\n\n /**\n * Sets \"angle\" of an instance with centered rotation\n * @param {TDegree} angle Angle value (in degrees)\n */\n rotate(angle: TDegree) {\n const { centeredRotation, originX, originY } = this;\n\n if (centeredRotation) {\n const { x, y } = this.getRelativeCenterPoint();\n this.originX = CENTER;\n this.originY = CENTER;\n this.left = x;\n this.top = y;\n }\n\n this.set('angle', angle);\n\n if (centeredRotation) {\n const { x, y } = this.getPositionByOrigin(originX, originY);\n this.left = x;\n this.top = y;\n this.originX = originX;\n this.originY = originY;\n }\n }\n\n /**\n * This callback function is called by the parent group of an object every\n * time a non-delegated property changes on the group. It is passed the key\n * and value as parameters. Not adding in this function's signature to avoid\n * Travis build error about unused variables.\n */\n setOnGroup() {\n // implemented by sub-classes, as needed.\n }\n\n /**\n * Sets canvas globalCompositeOperation for specific object\n * custom composition operation for the particular object can be specified using globalCompositeOperation property\n * @param {CanvasRenderingContext2D} ctx Rendering canvas context\n */\n _setupCompositeOperation(ctx: CanvasRenderingContext2D) {\n if (this.globalCompositeOperation) {\n ctx.globalCompositeOperation = this.globalCompositeOperation;\n }\n }\n\n /**\n * cancel instance's running animations\n * override if necessary to dispose artifacts such as `clipPath`\n */\n dispose() {\n runningAnimations.cancelByTarget(this);\n this.off();\n this._set('canvas', undefined);\n // clear caches\n this._cacheCanvas && getEnv().dispose(this._cacheCanvas);\n this._cacheCanvas = undefined;\n this._cacheContext = null;\n }\n\n // #region Animation methods\n /**\n * List of properties to consider for animating colors.\n * @type String[]\n */\n static colorProperties: string[] = [FILL, STROKE, 'backgroundColor'];\n\n /**\n * Animates object's properties\n * @param {Record<string, number | number[] | TColorArg>} animatable map of keys and end values\n * @param {Partial<AnimationOptions<T>>} options\n * @see {@link http://fabric5.fabricjs.com/fabric-intro-part-2#animation}\n * @return {Record<string, TAnimation<T>>} map of animation contexts\n *\n * As object — multiple properties\n *\n * object.animate({ left: ..., top: ... });\n * object.animate({ left: ..., top: ... }, { duration: ... });\n */\n animate<T extends number | number[] | TColorArg>(\n animatable: Record<string, T>,\n options?: Partial<AnimationOptions<T>>,\n ): Record<string, TAnimation<T>> {\n return Object.entries(animatable).reduce(\n (acc, [key, endValue]) => {\n acc[key] = this._animate(key, endValue, options);\n return acc;\n },\n {} as Record<string, TAnimation<T>>,\n );\n }\n\n /**\n * @private\n * @param {String} key Property to animate\n * @param {String} to Value to animate to\n * @param {Object} [options] Options object\n */\n _animate<T extends number | number[] | TColorArg>(\n key: string,\n endValue: T,\n options: Partial<AnimationOptions<T>> = {},\n ): TAnimation<T> {\n const path = key.split('.');\n const propIsColor = (\n this.constructor as typeof FabricObject\n ).colorProperties.includes(path[path.length - 1]);\n const { abort, startValue, onChange, onComplete } = options;\n const animationOptions = {\n ...options,\n target: this,\n // path.reduce... is the current value in case start value isn't provided\n startValue:\n startValue ?? path.reduce((deep: any, key) => deep[key], this),\n endValue,\n abort: abort?.bind(this),\n onChange: (\n value: number | number[] | string,\n valueProgress: number,\n durationProgress: number,\n ) => {\n path.reduce((deep: Record<string, any>, key, index) => {\n if (index === path.length - 1) {\n deep[key] = value;\n }\n return deep[key];\n }, this);\n onChange &&\n // @ts-expect-error generic callback arg0 is wrong\n onChange(value, valueProgress, durationProgress);\n },\n onComplete: (\n value: number | number[] | string,\n valueProgress: number,\n durationProgress: number,\n ) => {\n this.setCoords();\n onComplete &&\n // @ts-expect-error generic callback arg0 is wrong\n onComplete(value, valueProgress, durationProgress);\n },\n } as AnimationOptions<T>;\n\n return (\n propIsColor\n ? animateColor(animationOptions as ColorAnimationOptions)\n : animate(\n animationOptions as ValueAnimationOptions | ArrayAnimationOptions,\n )\n ) as TAnimation<T>;\n }\n\n // #region Object stacking methods\n\n /**\n * A reference to the parent of the object\n * Used to keep the original parent ref when the object has been added to an ActiveSelection, hence loosing the `group` ref\n */\n declare parent?: Group;\n\n /**\n * Checks if object is descendant of target\n * Should be used instead of {@link Group.contains} or {@link StaticCanvas.contains} for performance reasons\n * @param {TAncestor} target\n * @returns {boolean}\n */\n isDescendantOf(target: TAncestor): boolean {\n const { parent, group } = this;\n return (\n parent === target ||\n group === target ||\n // walk up\n (!!parent && parent.isDescendantOf(target)) ||\n (!!group && group !== parent && group.isDescendantOf(target))\n );\n }\n\n /**\n * @returns {Ancestors} ancestors (excluding `ActiveSelection`) from bottom to top\n */\n getAncestors(): Ancestors {\n const ancestors: TAncestor[] = [];\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n let parent: TAncestor | undefined = this;\n do {\n parent = parent.parent;\n parent && ancestors.push(parent);\n } while (parent);\n return ancestors as Ancestors;\n }\n\n /**\n * Compare ancestors\n *\n * @param {StackedObject} other\n * @returns {AncestryComparison} an object that represent the ancestry situation.\n */\n findCommonAncestors<T extends this>(other: T): AncestryComparison {\n if (this === other) {\n return {\n fork: [],\n otherFork: [],\n common: [this, ...this.getAncestors()],\n } as AncestryComparison;\n }\n const ancestors = this.getAncestors();\n const otherAncestors = other.getAncestors();\n // if `this` has no ancestors and `this` is top ancestor of `other` we must handle the following case\n if (\n ancestors.length === 0 &&\n otherAncestors.length > 0 &&\n this === otherAncestors[otherAncestors.length - 1]\n ) {\n return {\n fork: [],\n otherFork: [\n other,\n ...otherAncestors.slice(0, otherAncestors.length - 1),\n ],\n common: [this],\n } as AncestryComparison;\n }\n // compare ancestors\n for (let i = 0, ancestor; i < ancestors.length; i++) {\n ancestor = ancestors[i];\n if (ancestor === other) {\n return {\n fork: [this, ...ancestors.slice(0, i)],\n otherFork: [],\n common: ancestors.slice(i),\n } as AncestryComparison;\n }\n for (let j = 0; j < otherAncestors.length; j++) {\n if (this === otherAncestors[j]) {\n return {\n fork: [],\n otherFork: [other, ...otherAncestors.slice(0, j)],\n common: [this, ...ancestors],\n } as AncestryComparison;\n }\n if (ancestor === otherAncestors[j]) {\n return {\n fork: [this, ...ancestors.slice(0, i)],\n otherFork: [other, ...otherAncestors.slice(0, j)],\n common: ancestors.slice(i),\n } as AncestryComparison;\n }\n }\n }\n // nothing shared\n return {\n fork: [this, ...ancestors],\n otherFork: [other, ...otherAncestors],\n common: [],\n } as AncestryComparison;\n }\n\n /**\n *\n * @param {StackedObject} other\n * @returns {boolean}\n */\n hasCommonAncestors<T extends this>(other: T): boolean {\n const commonAncestors = this.findCommonAncestors(other);\n return commonAncestors && !!commonAncestors.common.length;\n }\n\n /**\n *\n * @param {FabricObject} other object to compare against\n * @returns {boolean | undefined} if objects do not share a common ancestor or they are strictly equal it is impossible to determine which is in front of the other; in such cases the function returns `undefined`\n */\n isInFrontOf<T extends this>(other: T): boolean | undefined {\n if (this === other) {\n return undefined;\n }\n const ancestorData = this.findCommonAncestors(other);\n\n if (ancestorData.fork.includes(other as any)) {\n return true;\n }\n if (ancestorData.otherFork.includes(this as any)) {\n return false;\n }\n // if there isn't a common ancestor, we take the canvas.\n // if there is no canvas, there is nothing to compare\n const firstCommonAncestor = ancestorData.common[0] || this.canvas;\n if (!firstCommonAncestor) {\n return undefined;\n }\n const headOfFork = ancestorData.fork.pop(),\n headOfOtherFork = ancestorData.otherFork.pop(),\n thisIndex = (firstCommonAncestor as TCollection)._objects.indexOf(\n headOfFork as any,\n ),\n otherIndex = (firstCommonAncestor as TCollection)._objects.indexOf(\n headOfOtherFork as any,\n );\n return thisIndex > -1 && thisIndex > otherIndex;\n }\n\n // #region Serialization\n /**\n * Define a list of custom properties that will be serialized when\n * instance.toObject() gets called\n */\n static customProperties: string[] = [];\n\n /**\n * Returns an object representation of an instance\n * @param {string[]} [propertiesToInclude] Any properties that you might want to additionally include in the output\n * @return {Object} Object representation of an instance\n */\n toObject(propertiesToInclude: any[] = []): any {\n const propertiesToSerialize = propertiesToInclude.concat(\n FabricObject.customProperties,\n (this.constructor as typeof FabricObject).customProperties || [],\n );\n let clipPathData: Partial<SerializedObjectProps> | undefined;\n const NUM_FRACTION_DIGITS = config.NUM_FRACTION_DIGITS;\n const {\n clipPath,\n fill,\n stroke,\n shadow,\n strokeDashArray,\n left,\n top,\n originX,\n originY,\n width,\n height,\n strokeWidth,\n strokeLineCap,\n strokeDashOffset,\n strokeLineJoin,\n strokeUniform,\n strokeMiterLimit,\n scaleX,\n scaleY,\n angle,\n flipX,\n flipY,\n opacity,\n visible,\n backgroundColor,\n fillRule,\n paintFirst,\n globalCompositeOperation,\n skewX,\n skewY,\n } = this;\n if (clipPath && !clipPath.excludeFromExport) {\n clipPathData = clipPath.toObject(\n propertiesToSerialize.concat('inverted', 'absolutePositioned'),\n );\n }\n const toFixedBound = (val: number) => toFixed(val, NUM_FRACTION_DIGITS);\n const object = {\n ...pick(this, propertiesToSerialize as (keyof this)[]),\n type: (this.constructor as typeof FabricObject).type,\n version: VERSION,\n originX,\n originY,\n left: toFixedBound(left),\n top: toFixedBound(top),\n width: toFixedBound(width),\n height: toFixedBound(height),\n fill: isSerializableFiller(fill) ? fill.toObject() : fill,\n stroke: isSerializableFiller(stroke) ? stroke.toObject() : stroke,\n strokeWidth: toFixedBound(strokeWidth),\n strokeDashArray: strokeDashArray\n ? strokeDashArray.concat()\n : strokeDashArray,\n strokeLineCap,\n strokeDashOffset,\n strokeLineJoin,\n strokeUniform,\n strokeMiterLimit: toFixedBound(strokeMiterLimit),\n scaleX: toFixedBound(scaleX),\n scaleY: toFixedBound(scaleY),\n angle: toFixedBound(angle),\n flipX,\n flipY,\n opacity: toFixedBound(opacity),\n shadow: shadow ? shadow.toObject() : shadow,\n visible,\n backgroundColor,\n fillRule,\n paintFirst,\n globalCompositeOperation,\n skewX: toFixedBound(skewX),\n skewY: toFixedBound(skewY),\n ...(clipPathData ? { clipPath: clipPathData } : null),\n };\n\n return !this.includeDefaultValues\n ? this._removeDefaultValues(object)\n : object;\n }\n\n /**\n * Returns (dataless) 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 toDatalessObject(propertiesToInclude?: any[]): any {\n // will be overwritten by subclasses\n return this.toObject(propertiesToInclude);\n }\n\n /**\n * @private\n * @param {Object} object\n */\n _removeDefaultValues<T extends object>(object: T): Partial<T> {\n // getDefaults() ( get from static ownDefaults ) should win over prototype since anyway they get assigned to instance\n // ownDefault vs prototype is swappable only if you change all the fabric objects consistently.\n const defaults = (this.constructor as typeof FabricObject).getDefaults();\n const hasStaticDefaultValues = Object.keys(defaults).length > 0;\n const baseValues = hasStaticDefaultValues\n ? defaults\n : Object.getPrototypeOf(this);\n\n return pickBy(object, (value, key) => {\n if (key === LEFT || key === TOP || key === 'type') {\n return true;\n }\n const baseValue = baseValues[key];\n return (\n value !== baseValue &&\n // basically a check for [] === []\n !(\n Array.isArray(value) &&\n Array.isArray(baseValue) &&\n value.length === 0 &&\n baseValue.length === 0\n )\n );\n });\n }\n\n /**\n * Returns a string representation of an instance\n * @return {String}\n */\n toString() {\n return `#<${(this.constructor as typeof FabricObject).type}>`;\n }\n\n /**\n *\n * @param {Function} klass\n * @param {object} object\n * @param {object} [options]\n * @param {string} [options.extraParam] property to pass as first argument to the constructor\n * @param {AbortSignal} [options.signal] handle aborting, see https://developer.mozilla.org/en-US/docs/Web/API/AbortController/signal\n * @returns {Promise<FabricObject>}\n */\n static _fromObject<S extends FabricObject>(\n { type, ...serializedObjectOptions }: Record<string, unknown>,\n { extraParam, ...options }: Abortable & { extraParam?: string } = {},\n ): Promise<S> {\n return enlivenObjectEnlivables<any>(serializedObjectOptions, options).then(\n (enlivedObjectOptions) => {\n // from the resulting enlived options, extract options.extraParam to arg0\n // to avoid accidental overrides later\n if (extraParam) {\n delete enlivedObjectOptions[extraParam];\n return new this(\n serializedObjectOptions[extraParam],\n // @ts-expect-error different signature\n enlivedObjectOptions,\n );\n } else {\n return new this(enlivedObjectOptions);\n }\n },\n ) as Promise<S>;\n }\n\n /**\n *\n * @param {object} object\n * @param {object} [options]\n * @param {AbortSignal} [options.signal] handle aborting, see https://developer.mozilla.org/en-US/docs/Web/API/AbortController/signal\n * @returns {Promise<FabricObject>}\n */\n static fromObject<T extends TOptions<SerializedObjectProps>>(\n object: T,\n options?: Abortable,\n ) {\n return this._fromObject(object, options);\n }\n}\n\nclassRegistry.setClass(FabricObject);\nclassRegistry.setClass(FabricObject, 'object');\n"],"names":["FabricObject","ObjectGeometry","getDefaults","ownDefaults","type","name","constructor","toLowerCase","value","log","options","_defineProperty","Object","assign","setOptions","_createCacheCanvas","_cacheCanvas","createCanvasElement","_cacheContext","getContext","_updateCacheCanvas","dirty","_limitCacheSize","dims","width","height","max","config","maxCacheSideLimit","min","minCacheSideLimit","perfLimitSizeTotal","ar","limX","limY","cache","limitDimsByArea","x","capValue","y","zoomX","capped","zoomY","_getCacheCanvasDimensions","objectScale","getTotalObjectScaling","dim","_getTransformedDimensions","skewX","skewY","neededX","scaleX","neededY","scaleY","Math","ceil","ALIASING_LIMIT","canvas","context","dimensionsChanged","zoomChanged","shouldRedraw","setTransform","clearRect","drawingWidth","drawingHeight","cacheTranslationX","round","cacheTranslationY","translate","scale","arguments","length","undefined","_setOptions","transform","ctx","needFullTransform","group","_transformDone","contextTop","m","calcTransformMatrix","getObjectScaling","Point","abs","qrDecompose","zoom","getZoom","retina","getCanvasRetinaScaling","scalarMultiply","getObjectOpacity","opacity","_constrainScale","minScaleLimit","_set","key","SCALE_X","SCALE_Y","flipX","flipY","Shadow","isChanged","cacheProperties","includes","parent","stateProperties","isNotVisible","strokeWidth","visible","render","skipOffscreen","isOnScreen","save","_setupCompositeOperation","drawSelectionBackground","_setOpacity","_setShadow","shouldCache","renderCache","drawCacheOnCanvas","_removeCacheCanvas","drawObject","restore","_ctx","isCacheDirty","forClipping","parentClipPaths","hasStroke","stroke","hasFill","fill","needsItsOwnCache","paintFirst","STROKE","shadow","clipPath","ownCaching","objectCaching","isOnACache","willDrawShadow","offsetX","offsetY","drawClipPathOnCache","canvasWithClipPath","inverted","globalCompositeOperation","drawImage","originalFill","originalStroke","_setClippingProperties","_renderBackground","_render","_drawClipPath","createClipPathLayer","createCanvasElementFor","forEach","prevClipPath","push","absolutePositioned","invertTransform","skipCanvas","backgroundColor","_getNonTransformedDimensions","fillStyle","fillRect","_removeShadow","globalAlpha","_setStrokeStyles","decl","lineWidth","lineCap","strokeLineCap","lineDashOffset","strokeDashOffset","lineJoin","strokeLineJoin","miterLimit","strokeMiterLimit","isFiller","gradientUnits","gradientTransform","patternTransform","_applyPatternForTransformedGradient","strokeStyle","toLive","_applyPatternGradientTransform","_setFillStyles","_ref","_setLineDash","dashArray","setLineDash","retinaScaling","sx","sy","viewportTransform","iMatrix","multX","multY","scaling","nonScaling","shadowColor","color","shadowBlur","blur","browserShadowBlurConstant","shadowOffsetX","shadowOffsetY","filler","t","_renderPaintInOrder","_renderStroke","_renderFill","fillRule","affectStroke","strokeUniform","strokeDashArray","_pCtx$createPattern","pCanvas","pCtx","beginPath","moveTo","lineTo","closePath","createPattern","_findCenterFromElement","left","top","clone","propertiesToInclude","objectForm","toObject","fromObject","cloneAsImage","canvasEl","toCanvasElement","ImageClass","classRegistry","getClass","origParams","saveObjectTransform","originalGroup","originalShadow","enableRetinaScaling","getDevicePixelRatio","multiplier","canvasProvider","el","StaticCanvas","renderOnAddRemove","withoutTransform","resetObjectTransform","withoutShadow","sendObjectToPlane","getViewportTransform","setCoords","boundingRect","getBoundingRect","shadowOffset","format","setPositionByOrigin","CENTER","originalCanvas","_objects","set","destroy","toDataURL","quality","toBlob","isType","_len","types","Array","_key","complexity","toJSON","rotate","angle","centeredRotation","originX","originY","getRelativeCenterPoint","getPositionByOrigin","setOnGroup","dispose","runningAnimations","cancelByTarget","off","getEnv","animate","animatable","entries","reduce","acc","_ref2","endValue","_animate","path","split","propIsColor","colorProperties","abort","startValue","onChange","onComplete","animationOptions","target","deep","bind","valueProgress","durationProgress","index","animateColor","isDescendantOf","getAncestors","ancestors","findCommonAncestors","other","fork","otherFork","common","otherAncestors","slice","i","ancestor","j","hasCommonAncestors","commonAncestors","isInFrontOf","ancestorData","firstCommonAncestor","headOfFork","pop","headOfOtherFork","thisIndex","indexOf","otherIndex","propertiesToSerialize","concat","customProperties","clipPathData","NUM_FRACTION_DIGITS","excludeFromExport","toFixedBound","val","toFixed","object","pick","version","VERSION","isSerializableFiller","includeDefaultValues","_removeDefaultValues","toDatalessObject","defaults","hasStaticDefaultValues","keys","baseValues","getPrototypeOf","pickBy","LEFT","TOP","baseValue","isArray","toString","_fromObject","_ref3","serializedObjectOptions","extraParam","enlivenObjectEnlivables","then","enlivedObjectOptions","fabricObjectDefaultValues","FILL","setClass"],"mappings":"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"}
1
+ {"version":3,"file":"Object.mjs","sources":["../../../../src/shapes/Object/Object.ts"],"sourcesContent":["import { cache } from '../../cache';\nimport { config } from '../../config';\nimport {\n ALIASING_LIMIT,\n CENTER,\n iMatrix,\n LEFT,\n SCALE_X,\n SCALE_Y,\n STROKE,\n FILL,\n TOP,\n VERSION,\n} from '../../constants';\nimport type { ObjectEvents } from '../../EventTypeDefs';\nimport { Point } from '../../Point';\nimport { Shadow } from '../../Shadow';\nimport type {\n TDegree,\n TFiller,\n TSize,\n TCacheCanvasDimensions,\n Abortable,\n TOptions,\n ImageFormat,\n} from '../../typedefs';\nimport { classRegistry } from '../../ClassRegistry';\nimport { runningAnimations } from '../../util/animation/AnimationRegistry';\nimport { capValue } from '../../util/misc/capValue';\nimport {\n createCanvasElement,\n createCanvasElementFor,\n toDataURL,\n toBlob,\n} from '../../util/misc/dom';\nimport { invertTransform, qrDecompose } from '../../util/misc/matrix';\nimport { enlivenObjectEnlivables } from '../../util/misc/objectEnlive';\nimport {\n resetObjectTransform,\n saveObjectTransform,\n} from '../../util/misc/objectTransforms';\nimport { sendObjectToPlane } from '../../util/misc/planeChange';\nimport { pick, pickBy } from '../../util/misc/pick';\nimport { toFixed } from '../../util/misc/toFixed';\nimport type { Group } from '../Group';\nimport { StaticCanvas } from '../../canvas/StaticCanvas';\nimport { isFiller, isSerializableFiller } from '../../util/typeAssertions';\nimport type { FabricImage } from '../Image';\nimport {\n cacheProperties,\n fabricObjectDefaultValues,\n stateProperties,\n} from './defaultValues';\nimport type { Gradient } from '../../gradient/Gradient';\nimport type { Pattern } from '../../Pattern';\nimport type { Canvas } from '../../canvas/Canvas';\nimport type { SerializedObjectProps } from './types/SerializedObjectProps';\nimport type { ObjectProps } from './types/ObjectProps';\nimport { getDevicePixelRatio, getEnv } from '../../env';\nimport { log } from '../../util/internals/console';\nimport type { TColorArg } from '../../color/typedefs';\nimport type { TAnimation } from '../../util/animation/animate';\nimport { animate, animateColor } from '../../util/animation/animate';\nimport type {\n AnimationOptions,\n ArrayAnimationOptions,\n ColorAnimationOptions,\n ValueAnimationOptions,\n} from '../../util/animation/types';\nimport { ObjectGeometry } from './ObjectGeometry';\n\ntype TAncestor = FabricObject;\ntype TCollection = Group;\n\nexport type Ancestors =\n | [FabricObject | Group]\n | [FabricObject | Group, ...Group[]]\n | Group[];\n\nexport type AncestryComparison = {\n /**\n * common ancestors of `this` and`other`(may include`this` | `other`)\n */\n common: Ancestors;\n /**\n * ancestors that are of `this` only\n */\n fork: Ancestors;\n /**\n * ancestors that are of `other` only\n */\n otherFork: Ancestors;\n};\n\nexport type TCachedFabricObject<T extends FabricObject = FabricObject> = T &\n Required<\n Pick<\n T,\n | 'zoomX'\n | 'zoomY'\n | '_cacheCanvas'\n | '_cacheContext'\n | 'cacheTranslationX'\n | 'cacheTranslationY'\n >\n > & {\n _cacheContext: CanvasRenderingContext2D;\n };\n\nexport type ObjectToCanvasElementOptions = {\n format?: ImageFormat;\n /** Multiplier to scale by */\n multiplier?: number;\n /** Cropping left offset. Introduced in v1.2.14 */\n left?: number;\n /** Cropping top offset. Introduced in v1.2.14 */\n top?: number;\n /** Cropping width. Introduced in v1.2.14 */\n width?: number;\n /** Cropping height. Introduced in v1.2.14 */\n height?: number;\n /** Enable retina scaling for clone image. Introduce in 1.6.4 */\n enableRetinaScaling?: boolean;\n /** Remove current object transform ( no scale , no angle, no flip, no skew ). Introduced in 2.3.4 */\n withoutTransform?: boolean;\n /** Remove current object shadow. Introduced in 2.4.2 */\n withoutShadow?: boolean;\n /** Account for canvas viewport transform */\n viewportTransform?: boolean;\n /** Function to create the output canvas to export onto */\n canvasProvider?: <T extends StaticCanvas>(el?: HTMLCanvasElement) => T;\n};\n\ntype toDataURLOptions = ObjectToCanvasElementOptions & {\n quality?: number;\n};\n\nexport type DrawContext =\n | {\n parentClipPaths: FabricObject[];\n width: number;\n height: number;\n cacheTranslationX: number;\n cacheTranslationY: number;\n zoomX: number;\n zoomY: number;\n }\n | Record<string, never>;\n\n/**\n * Root object class from which all 2d shape classes inherit from\n * @see {@link http://fabric5.fabricjs.com/fabric-intro-part-1#objects}\n *\n * @fires added\n * @fires removed\n *\n * @fires selected\n * @fires deselected\n *\n * @fires rotating\n * @fires scaling\n * @fires moving\n * @fires skewing\n * @fires modified\n *\n * @fires mousedown\n * @fires mouseup\n * @fires mouseover\n * @fires mouseout\n * @fires mousewheel\n * @fires mousedblclick\n *\n * @fires dragover\n * @fires dragenter\n * @fires dragleave\n * @fires drop\n */\nexport class FabricObject<\n Props extends TOptions<ObjectProps> = Partial<ObjectProps>,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n SProps extends SerializedObjectProps = SerializedObjectProps,\n EventSpec extends ObjectEvents = ObjectEvents,\n>\n extends ObjectGeometry<EventSpec>\n implements ObjectProps\n{\n declare minScaleLimit: number;\n\n declare opacity: number;\n\n declare paintFirst: 'fill' | 'stroke';\n declare fill: string | TFiller | null;\n declare fillRule: CanvasFillRule;\n declare stroke: string | TFiller | null;\n declare strokeDashArray: number[] | null;\n declare strokeDashOffset: number;\n declare strokeLineCap: CanvasLineCap;\n declare strokeLineJoin: CanvasLineJoin;\n declare strokeMiterLimit: number;\n\n declare globalCompositeOperation: GlobalCompositeOperation;\n declare backgroundColor: string;\n\n declare shadow: Shadow | null;\n\n declare visible: boolean;\n\n declare includeDefaultValues: boolean;\n declare excludeFromExport: boolean;\n\n declare objectCaching: boolean;\n\n declare clipPath?: FabricObject;\n declare inverted: boolean;\n declare absolutePositioned: boolean;\n declare centeredRotation: boolean;\n declare centeredScaling: boolean;\n\n /**\n * This list of properties is used to check if the state of an object is changed.\n * This state change now is only used for children of groups to understand if a group\n * needs its cache regenerated during a .set call\n * @type Array\n */\n static stateProperties: string[] = stateProperties;\n\n /**\n * List of properties to consider when checking if cache needs refresh\n * Those properties are checked by\n * calls to Object.set(key, value). If the key is in this list, the object is marked as dirty\n * and refreshed at the next render\n * @type Array\n */\n static cacheProperties: string[] = cacheProperties;\n\n /**\n * When set to `true`, object's cache will be rerendered next render call.\n * since 1.7.0\n * @type Boolean\n * @default true\n */\n declare dirty: boolean;\n\n /**\n * Quick access for the _cacheCanvas rendering context\n * This is part of the objectCaching feature\n * since 1.7.0\n * @type boolean\n * @default undefined\n * @private\n */\n _cacheContext: CanvasRenderingContext2D | null = null;\n\n /**\n * A reference to the HTMLCanvasElement that is used to contain the cache of the object\n * this canvas element is resized and cleared as needed\n * Is marked private, you can read it, don't use it since it is handled by fabric\n * since 1.7.0\n * @type HTMLCanvasElement\n * @default undefined\n * @private\n */\n declare _cacheCanvas?: HTMLCanvasElement;\n\n /**\n * zoom level used on the cacheCanvas to draw the cache, X axe\n * since 1.7.0\n * @type number\n * @default undefined\n * @private\n */\n declare zoomX?: number;\n\n /**\n * zoom level used on the cacheCanvas to draw the cache, Y axe\n * since 1.7.0\n * @type number\n * @default undefined\n * @private\n */\n declare zoomY?: number;\n\n /**\n * zoom level used on the cacheCanvas to draw the cache, Y axe\n * since 1.7.0\n * @type number\n * @default undefined\n * @private\n */\n declare cacheTranslationX?: number;\n\n /**\n * translation of the cacheCanvas away from the center, for subpixel accuracy and crispness\n * since 1.7.0\n * @type number\n * @default undefined\n * @private\n */\n declare cacheTranslationY?: number;\n\n /**\n * A reference to the parent of the object, usually a Group\n * @type number\n * @default undefined\n * @private\n */\n declare group?: Group;\n\n /**\n * Indicate if the object is sitting on a cache dedicated to it\n * or is part of a larger cache for many object ( a group for example)\n * @type number\n * @default undefined\n * @private\n */\n declare ownCaching?: boolean;\n\n /**\n * Private. indicates if the object inside a group is on a transformed context or not\n * or is part of a larger cache for many object ( a group for example)\n * @type boolean\n * @default undefined\n * @private\n */\n declare _transformDone?: boolean;\n\n static ownDefaults = fabricObjectDefaultValues;\n\n static getDefaults(): Record<string, any> {\n return FabricObject.ownDefaults;\n }\n\n /**\n * The class type.\n * This is used for serialization and deserialization purposes and internally it can be used\n * to identify classes.\n * When we transform a class in a plain JS object we need a way to recognize which class it was,\n * and the type is the way we do that. It has no other purposes and you should not give one.\n * Hard to reach on instances and please do not use to drive instance's logic (this.constructor.type).\n * To idenfity a class use instanceof class ( instanceof Rect ).\n * We do not do that in fabricJS code because we want to try to have code splitting possible.\n */\n static type = 'FabricObject';\n\n /**\n * Legacy identifier of the class. Prefer using utils like isType or instanceOf\n * Will be removed in fabric 7 or 8.\n * The setter exists to avoid type errors in old code and possibly current deserialization code.\n * DO NOT build new code around this type value\n * @TODO add sustainable warning message\n * @type string\n * @deprecated\n */\n get type() {\n const name = (this.constructor as typeof FabricObject).type;\n if (name === 'FabricObject') {\n return 'object';\n }\n return name.toLowerCase();\n }\n\n set type(value) {\n log('warn', 'Setting type has no effect', value);\n }\n\n /**\n * Constructor\n * @param {Object} [options] Options object\n */\n constructor(options?: Props) {\n super();\n Object.assign(this, FabricObject.ownDefaults);\n this.setOptions(options);\n }\n\n /**\n * Create a the canvas used to keep the cached copy of the object\n * @private\n */\n _createCacheCanvas() {\n this._cacheCanvas = createCanvasElement();\n this._cacheContext = this._cacheCanvas.getContext('2d');\n this._updateCacheCanvas();\n // if canvas gets created, is empty, so dirty.\n this.dirty = true;\n }\n\n /**\n * Limit the cache dimensions so that X * Y do not cross config.perfLimitSizeTotal\n * and each side do not cross fabric.cacheSideLimit\n * those numbers are configurable so that you can get as much detail as you want\n * making bargain with performances.\n * It mutates the input object dims.\n * @param {TCacheCanvasDimensions} dims\n * @return {TCacheCanvasDimensions} dims\n */\n _limitCacheSize(\n dims: TCacheCanvasDimensions & { capped?: boolean },\n ): TCacheCanvasDimensions & { capped?: boolean } {\n const width = dims.width,\n height = dims.height,\n max = config.maxCacheSideLimit,\n min = config.minCacheSideLimit;\n if (\n width <= max &&\n height <= max &&\n width * height <= config.perfLimitSizeTotal\n ) {\n if (width < min) {\n dims.width = min;\n }\n if (height < min) {\n dims.height = min;\n }\n return dims;\n }\n const ar = width / height,\n [limX, limY] = cache.limitDimsByArea(ar),\n x = capValue(min, limX, max),\n y = capValue(min, limY, max);\n if (width > x) {\n dims.zoomX /= width / x;\n dims.width = x;\n dims.capped = true;\n }\n if (height > y) {\n dims.zoomY /= height / y;\n dims.height = y;\n dims.capped = true;\n }\n return dims;\n }\n\n /**\n * Return the dimension and the zoom level needed to create a cache canvas\n * big enough to host the object to be cached.\n * @private\n * @return {TCacheCanvasDimensions} Informations about the object to be cached\n */\n _getCacheCanvasDimensions(): TCacheCanvasDimensions {\n const objectScale = this.getTotalObjectScaling(),\n // calculate dimensions without skewing\n dim = this._getTransformedDimensions({ skewX: 0, skewY: 0 }),\n neededX = (dim.x * objectScale.x) / this.scaleX,\n neededY = (dim.y * objectScale.y) / this.scaleY;\n return {\n // for sure this ALIASING_LIMIT is slightly creating problem\n // in situation in which the cache canvas gets an upper limit\n // also objectScale contains already scaleX and scaleY\n width: Math.ceil(neededX + ALIASING_LIMIT),\n height: Math.ceil(neededY + ALIASING_LIMIT),\n zoomX: objectScale.x,\n zoomY: objectScale.y,\n x: neededX,\n y: neededY,\n };\n }\n\n /**\n * Update width and height of the canvas for cache\n * returns true or false if canvas needed resize.\n * @private\n * @return {Boolean} true if the canvas has been resized\n */\n _updateCacheCanvas() {\n const canvas = this._cacheCanvas!,\n context = this._cacheContext,\n { width, height, zoomX, zoomY, x, y } = this._limitCacheSize(\n this._getCacheCanvasDimensions(),\n ),\n dimensionsChanged = width !== canvas.width || height !== canvas.height,\n zoomChanged = this.zoomX !== zoomX || this.zoomY !== zoomY;\n\n if (!canvas || !context) {\n return false;\n }\n\n const shouldRedraw = dimensionsChanged || zoomChanged;\n\n if (shouldRedraw) {\n if (width !== canvas.width || height !== canvas.height) {\n canvas.width = width;\n canvas.height = height;\n } else {\n context.setTransform(1, 0, 0, 1, 0, 0);\n context.clearRect(0, 0, canvas.width, canvas.height);\n }\n const drawingWidth = x / 2;\n const drawingHeight = y / 2;\n this.cacheTranslationX =\n Math.round(canvas.width / 2 - drawingWidth) + drawingWidth;\n this.cacheTranslationY =\n Math.round(canvas.height / 2 - drawingHeight) + drawingHeight;\n context.translate(this.cacheTranslationX, this.cacheTranslationY);\n context.scale(zoomX, zoomY);\n this.zoomX = zoomX;\n this.zoomY = zoomY;\n return true;\n }\n return false;\n }\n\n /**\n * Sets object's properties from options, for class constructor only.\n * Needs to be overridden for different defaults.\n * @protected\n * @param {Object} [options] Options object\n */\n protected setOptions(options: Record<string, any> = {}) {\n this._setOptions(options);\n }\n\n /**\n * Transforms context when rendering an object\n * @param {CanvasRenderingContext2D} ctx Context\n */\n transform(ctx: CanvasRenderingContext2D) {\n const needFullTransform =\n (this.group && !this.group._transformDone) ||\n (this.group && this.canvas && ctx === (this.canvas as Canvas).contextTop);\n const m = this.calcTransformMatrix(!needFullTransform);\n ctx.transform(m[0], m[1], m[2], m[3], m[4], m[5]);\n }\n\n /**\n * Return the object scale factor counting also the group scaling\n * @return {Point}\n */\n getObjectScaling() {\n // if the object is a top level one, on the canvas, we go for simple aritmetic\n // otherwise the complex method with angles will return approximations and decimals\n // and will likely kill the cache when not needed\n // https://github.com/fabricjs/fabric.js/issues/7157\n if (!this.group) {\n return new Point(Math.abs(this.scaleX), Math.abs(this.scaleY));\n }\n // if we are inside a group total zoom calculation is complex, we defer to generic matrices\n const options = qrDecompose(this.calcTransformMatrix());\n return new Point(Math.abs(options.scaleX), Math.abs(options.scaleY));\n }\n\n /**\n * Return the object scale factor counting also the group scaling, zoom and retina\n * @return {Object} object with scaleX and scaleY properties\n */\n getTotalObjectScaling() {\n const scale = this.getObjectScaling();\n if (this.canvas) {\n const zoom = this.canvas.getZoom();\n const retina = this.getCanvasRetinaScaling();\n return scale.scalarMultiply(zoom * retina);\n }\n return scale;\n }\n\n /**\n * Return the object opacity counting also the group property\n * @return {Number}\n */\n getObjectOpacity() {\n let opacity = this.opacity;\n if (this.group) {\n opacity *= this.group.getObjectOpacity();\n }\n return opacity;\n }\n\n /**\n * Makes sure the scale is valid and modifies it if necessary\n * @todo: this is a control action issue, not a geometry one\n * @private\n * @param {Number} value, unconstrained\n * @return {Number} constrained value;\n */\n _constrainScale(value: number): number {\n if (Math.abs(value) < this.minScaleLimit) {\n if (value < 0) {\n return -this.minScaleLimit;\n } else {\n return this.minScaleLimit;\n }\n } else if (value === 0) {\n return 0.0001;\n }\n return value;\n }\n\n /**\n * Handles setting values on the instance and handling internal side effects\n * @protected\n * @param {String} key\n * @param {*} value\n */\n _set(key: string, value: any) {\n if (key === SCALE_X || key === SCALE_Y) {\n value = this._constrainScale(value);\n }\n if (key === SCALE_X && value < 0) {\n this.flipX = !this.flipX;\n value *= -1;\n } else if (key === 'scaleY' && value < 0) {\n this.flipY = !this.flipY;\n value *= -1;\n // i don't like this automatic initialization here\n } else if (key === 'shadow' && value && !(value instanceof Shadow)) {\n value = new Shadow(value);\n }\n\n const isChanged = this[key as keyof this] !== value;\n this[key as keyof this] = value;\n\n // invalidate caches\n if (\n isChanged &&\n (this.constructor as typeof FabricObject).cacheProperties.includes(key)\n ) {\n this.dirty = true;\n }\n // a dirty child makes the parent dirty.\n // but a non dirty child does not make the parent not dirty.\n // the parent could be dirty for some other reason.\n this.parent &&\n (this.dirty ||\n (isChanged &&\n (this.constructor as typeof FabricObject).stateProperties.includes(\n key,\n ))) &&\n this.parent._set('dirty', true);\n\n return this;\n }\n\n /**\n * return if the object would be visible in rendering\n * @return {Boolean}\n */\n isNotVisible() {\n return (\n this.opacity === 0 ||\n (!this.width && !this.height && this.strokeWidth === 0) ||\n !this.visible\n );\n }\n\n /**\n * Renders an object on a specified context\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n render(ctx: CanvasRenderingContext2D) {\n // do not render if width/height are zeros or object is not visible\n if (this.isNotVisible()) {\n return;\n }\n if (\n this.canvas &&\n this.canvas.skipOffscreen &&\n !this.group &&\n !this.isOnScreen()\n ) {\n return;\n }\n ctx.save();\n this._setupCompositeOperation(ctx);\n this.drawSelectionBackground(ctx);\n this.transform(ctx);\n this._setOpacity(ctx);\n this._setShadow(ctx);\n if (this.shouldCache()) {\n (this as TCachedFabricObject).renderCache();\n (this as TCachedFabricObject).drawCacheOnCanvas(ctx);\n } else {\n this._removeCacheCanvas();\n this.drawObject(ctx, false, {});\n this.dirty = false;\n }\n ctx.restore();\n }\n\n drawSelectionBackground(_ctx: CanvasRenderingContext2D) {\n /* no op */\n }\n\n renderCache(this: TCachedFabricObject, options?: any) {\n options = options || {};\n if (!this._cacheCanvas || !this._cacheContext) {\n this._createCacheCanvas();\n }\n if (this.isCacheDirty() && this._cacheContext) {\n const { zoomX, zoomY, cacheTranslationX, cacheTranslationY } = this;\n const { width, height } = this._cacheCanvas;\n this.drawObject(this._cacheContext, options.forClipping, {\n zoomX,\n zoomY,\n cacheTranslationX,\n cacheTranslationY,\n width,\n height,\n parentClipPaths: [],\n });\n this.dirty = false;\n }\n }\n\n /**\n * Remove cacheCanvas and its dimensions from the objects\n */\n _removeCacheCanvas() {\n this._cacheCanvas = undefined;\n this._cacheContext = null;\n }\n\n /**\n * return true if the object will draw a stroke\n * Does not consider text styles. This is just a shortcut used at rendering time\n * We want it to be an approximation and be fast.\n * wrote to avoid extra caching, it has to return true when stroke happens,\n * can guess when it will not happen at 100% chance, does not matter if it misses\n * some use case where the stroke is invisible.\n * @since 3.0.0\n * @returns Boolean\n */\n hasStroke(): boolean {\n return (\n !!this.stroke && this.stroke !== 'transparent' && this.strokeWidth !== 0\n );\n }\n\n /**\n * return true if the object will draw a fill\n * Does not consider text styles. This is just a shortcut used at rendering time\n * We want it to be an approximation and be fast.\n * wrote to avoid extra caching, it has to return true when fill happens,\n * can guess when it will not happen at 100% chance, does not matter if it misses\n * some use case where the fill is invisible.\n * @since 3.0.0\n * @returns Boolean\n */\n hasFill(): boolean {\n return !!this.fill && this.fill !== 'transparent';\n }\n\n /**\n * When returns `true`, force the object to have its own cache, even if it is inside a group\n * it may be needed when your object behave in a particular way on the cache and always needs\n * its own isolated canvas to render correctly.\n * Created to be overridden\n * since 1.7.12\n * @returns Boolean\n */\n needsItsOwnCache() {\n // TODO re-evaluate this shadow condition\n if (\n this.paintFirst === STROKE &&\n this.hasFill() &&\n this.hasStroke() &&\n !!this.shadow\n ) {\n return true;\n }\n if (this.clipPath) {\n return true;\n }\n return false;\n }\n\n /**\n * Decide if the object should cache or not. Create its own cache level\n * objectCaching is a global flag, wins over everything\n * needsItsOwnCache should be used when the object drawing method requires\n * a cache step.\n * Generally you do not cache objects in groups because the group outside is cached.\n * Read as: cache if is needed, or if the feature is enabled but we are not already caching.\n * @return {Boolean}\n */\n shouldCache() {\n this.ownCaching =\n (this.objectCaching && (!this.parent || !this.parent.isOnACache())) ||\n this.needsItsOwnCache();\n return this.ownCaching;\n }\n\n /**\n * Check if this object will cast a shadow with an offset.\n * used by Group.shouldCache to know if child has a shadow recursively\n * @return {Boolean}\n * @deprecated\n */\n willDrawShadow() {\n return (\n !!this.shadow && (this.shadow.offsetX !== 0 || this.shadow.offsetY !== 0)\n );\n }\n\n /**\n * Execute the drawing operation for an object clipPath\n * @param {CanvasRenderingContext2D} ctx Context to render on\n * @param {FabricObject} clipPath\n */\n drawClipPathOnCache(\n ctx: CanvasRenderingContext2D,\n clipPath: FabricObject,\n canvasWithClipPath: HTMLCanvasElement,\n ) {\n ctx.save();\n // DEBUG: uncomment this line, comment the following\n // ctx.globalAlpha = 0.4\n if (clipPath.inverted) {\n ctx.globalCompositeOperation = 'destination-out';\n } else {\n ctx.globalCompositeOperation = 'destination-in';\n }\n ctx.setTransform(1, 0, 0, 1, 0, 0);\n ctx.drawImage(canvasWithClipPath, 0, 0);\n ctx.restore();\n }\n\n /**\n * Execute the drawing operation for an object on a specified context\n * @param {CanvasRenderingContext2D} ctx Context to render on\n * @param {boolean} forClipping apply clipping styles\n * @param {DrawContext} context additional context for rendering\n */\n drawObject(\n ctx: CanvasRenderingContext2D,\n forClipping: boolean | undefined,\n context: DrawContext,\n ) {\n const originalFill = this.fill,\n originalStroke = this.stroke;\n if (forClipping) {\n this.fill = 'black';\n this.stroke = '';\n this._setClippingProperties(ctx);\n } else {\n this._renderBackground(ctx);\n }\n this.fire('before:render', { ctx });\n this._render(ctx);\n this._drawClipPath(ctx, this.clipPath, context);\n this.fill = originalFill;\n this.stroke = originalStroke;\n }\n\n private createClipPathLayer(\n this: TCachedFabricObject,\n clipPath: FabricObject,\n context: DrawContext,\n ) {\n const canvas = createCanvasElementFor(context as TSize);\n const ctx = canvas.getContext('2d')!;\n ctx.translate(context.cacheTranslationX, context.cacheTranslationY);\n ctx.scale(context.zoomX, context.zoomY);\n clipPath._cacheCanvas = canvas;\n context.parentClipPaths.forEach((prevClipPath) => {\n prevClipPath.transform(ctx);\n });\n context.parentClipPaths.push(clipPath);\n if (clipPath.absolutePositioned) {\n const m = invertTransform(this.calcTransformMatrix());\n ctx.transform(m[0], m[1], m[2], m[3], m[4], m[5]);\n }\n clipPath.transform(ctx);\n clipPath.drawObject(ctx, true, context);\n return canvas;\n }\n\n /**\n * Prepare clipPath state and cache and draw it on instance's cache\n * @param {CanvasRenderingContext2D} ctx\n * @param {FabricObject} clipPath\n */\n _drawClipPath(\n ctx: CanvasRenderingContext2D,\n clipPath: FabricObject | undefined,\n context: DrawContext,\n ) {\n if (!clipPath) {\n return;\n }\n // needed to setup _transformDone\n // TODO find a better solution?\n clipPath._transformDone = true;\n const canvas = (this as TCachedFabricObject).createClipPathLayer(\n clipPath,\n context,\n );\n this.drawClipPathOnCache(ctx, clipPath, canvas);\n }\n\n /**\n * Paint the cached copy of the object on the target context.\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n drawCacheOnCanvas(this: TCachedFabricObject, ctx: CanvasRenderingContext2D) {\n ctx.scale(1 / this.zoomX, 1 / this.zoomY);\n ctx.drawImage(\n this._cacheCanvas,\n -this.cacheTranslationX,\n -this.cacheTranslationY,\n );\n }\n\n /**\n * Check if cache is dirty and if is dirty clear the context.\n * This check has a big side effect, it changes the underlying cache canvas if necessary.\n * Do not call this method on your own to check if the cache is dirty, because if it is,\n * it is also going to wipe the cache. This is badly designed and needs to be fixed.\n * @param {Boolean} skipCanvas skip canvas checks because this object is painted\n * on parent canvas.\n */\n isCacheDirty(skipCanvas = false) {\n if (this.isNotVisible()) {\n return false;\n }\n const canvas = this._cacheCanvas;\n const ctx = this._cacheContext;\n if (canvas && ctx && !skipCanvas && this._updateCacheCanvas()) {\n // in this case the context is already cleared.\n return true;\n } else {\n if (this.dirty || (this.clipPath && this.clipPath.absolutePositioned)) {\n if (canvas && ctx && !skipCanvas) {\n ctx.save();\n ctx.setTransform(1, 0, 0, 1, 0, 0);\n ctx.clearRect(0, 0, canvas.width, canvas.height);\n ctx.restore();\n }\n return true;\n }\n }\n return false;\n }\n\n /**\n * Draws a background for the object big as its untransformed dimensions\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _renderBackground(ctx: CanvasRenderingContext2D) {\n if (!this.backgroundColor) {\n return;\n }\n const dim = this._getNonTransformedDimensions();\n ctx.fillStyle = this.backgroundColor;\n\n ctx.fillRect(-dim.x / 2, -dim.y / 2, dim.x, dim.y);\n // if there is background color no other shadows\n // should be casted\n this._removeShadow(ctx);\n }\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _setOpacity(ctx: CanvasRenderingContext2D) {\n if (this.group && !this.group._transformDone) {\n ctx.globalAlpha = this.getObjectOpacity();\n } else {\n ctx.globalAlpha *= this.opacity;\n }\n }\n\n _setStrokeStyles(\n ctx: CanvasRenderingContext2D,\n decl: Pick<\n this,\n | 'stroke'\n | 'strokeWidth'\n | 'strokeLineCap'\n | 'strokeDashOffset'\n | 'strokeLineJoin'\n | 'strokeMiterLimit'\n >,\n ) {\n const stroke = decl.stroke;\n if (stroke) {\n ctx.lineWidth = decl.strokeWidth;\n ctx.lineCap = decl.strokeLineCap;\n ctx.lineDashOffset = decl.strokeDashOffset;\n ctx.lineJoin = decl.strokeLineJoin;\n ctx.miterLimit = decl.strokeMiterLimit;\n if (isFiller(stroke)) {\n if (\n (stroke as Gradient<'linear'>).gradientUnits === 'percentage' ||\n (stroke as Gradient<'linear'>).gradientTransform ||\n (stroke as Pattern).patternTransform\n ) {\n // need to transform gradient in a pattern.\n // this is a slow process. If you are hitting this codepath, and the object\n // is not using caching, you should consider switching it on.\n // we need a canvas as big as the current object caching canvas.\n this._applyPatternForTransformedGradient(ctx, stroke);\n } else {\n // is a simple gradient or pattern\n ctx.strokeStyle = stroke.toLive(ctx)!;\n this._applyPatternGradientTransform(ctx, stroke);\n }\n } else {\n // is a color\n ctx.strokeStyle = decl.stroke as string;\n }\n }\n }\n\n _setFillStyles(ctx: CanvasRenderingContext2D, { fill }: Pick<this, 'fill'>) {\n if (fill) {\n if (isFiller(fill)) {\n ctx.fillStyle = fill.toLive(ctx)!;\n this._applyPatternGradientTransform(ctx, fill);\n } else {\n ctx.fillStyle = fill;\n }\n }\n }\n\n _setClippingProperties(ctx: CanvasRenderingContext2D) {\n ctx.globalAlpha = 1;\n ctx.strokeStyle = 'transparent';\n ctx.fillStyle = '#000000';\n }\n\n /**\n * @private\n * Sets line dash\n * @param {CanvasRenderingContext2D} ctx Context to set the dash line on\n * @param {Array} dashArray array representing dashes\n */\n _setLineDash(ctx: CanvasRenderingContext2D, dashArray?: number[] | null) {\n if (!dashArray || dashArray.length === 0) {\n return;\n }\n ctx.setLineDash(dashArray);\n }\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _setShadow(ctx: CanvasRenderingContext2D) {\n if (!this.shadow) {\n return;\n }\n\n const shadow = this.shadow,\n canvas = this.canvas,\n retinaScaling = this.getCanvasRetinaScaling(),\n [sx, , , sy] = canvas?.viewportTransform || iMatrix,\n multX = sx * retinaScaling,\n multY = sy * retinaScaling,\n scaling = shadow.nonScaling ? new Point(1, 1) : this.getObjectScaling();\n ctx.shadowColor = shadow.color;\n ctx.shadowBlur =\n (shadow.blur *\n config.browserShadowBlurConstant *\n (multX + multY) *\n (scaling.x + scaling.y)) /\n 4;\n ctx.shadowOffsetX = shadow.offsetX * multX * scaling.x;\n ctx.shadowOffsetY = shadow.offsetY * multY * scaling.y;\n }\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _removeShadow(ctx: CanvasRenderingContext2D) {\n if (!this.shadow) {\n return;\n }\n\n ctx.shadowColor = '';\n ctx.shadowBlur = ctx.shadowOffsetX = ctx.shadowOffsetY = 0;\n }\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n * @param {TFiller} filler {@link Pattern} or {@link Gradient}\n */\n _applyPatternGradientTransform(\n ctx: CanvasRenderingContext2D,\n filler: TFiller,\n ) {\n if (!isFiller(filler)) {\n return { offsetX: 0, offsetY: 0 };\n }\n const t =\n (filler as Gradient<'linear'>).gradientTransform ||\n (filler as Pattern).patternTransform;\n const offsetX = -this.width / 2 + filler.offsetX || 0,\n offsetY = -this.height / 2 + filler.offsetY || 0;\n\n if ((filler as Gradient<'linear'>).gradientUnits === 'percentage') {\n ctx.transform(this.width, 0, 0, this.height, offsetX, offsetY);\n } else {\n ctx.transform(1, 0, 0, 1, offsetX, offsetY);\n }\n if (t) {\n ctx.transform(t[0], t[1], t[2], t[3], t[4], t[5]);\n }\n return { offsetX: offsetX, offsetY: offsetY };\n }\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _renderPaintInOrder(ctx: CanvasRenderingContext2D) {\n if (this.paintFirst === STROKE) {\n this._renderStroke(ctx);\n this._renderFill(ctx);\n } else {\n this._renderFill(ctx);\n this._renderStroke(ctx);\n }\n }\n\n /**\n * @private\n * function that actually render something on the context.\n * empty here to allow Obects to work on tests to benchmark fabric functionalites\n * not related to rendering\n * @param {CanvasRenderingContext2D} _ctx Context to render on\n */\n _render(_ctx: CanvasRenderingContext2D) {\n // placeholder to be overridden\n }\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _renderFill(ctx: CanvasRenderingContext2D) {\n if (!this.fill) {\n return;\n }\n\n ctx.save();\n this._setFillStyles(ctx, this);\n if (this.fillRule === 'evenodd') {\n ctx.fill('evenodd');\n } else {\n ctx.fill();\n }\n ctx.restore();\n }\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _renderStroke(ctx: CanvasRenderingContext2D) {\n if (!this.stroke || this.strokeWidth === 0) {\n return;\n }\n\n if (this.shadow && !this.shadow.affectStroke) {\n this._removeShadow(ctx);\n }\n\n ctx.save();\n if (this.strokeUniform) {\n const scaling = this.getObjectScaling();\n ctx.scale(1 / scaling.x, 1 / scaling.y);\n }\n this._setLineDash(ctx, this.strokeDashArray);\n this._setStrokeStyles(ctx, this);\n ctx.stroke();\n ctx.restore();\n }\n\n /**\n * This function try to patch the missing gradientTransform on canvas gradients.\n * transforming a context to transform the gradient, is going to transform the stroke too.\n * we want to transform the gradient but not the stroke operation, so we create\n * a transformed gradient on a pattern and then we use the pattern instead of the gradient.\n * this method has drawbacks: is slow, is in low resolution, needs a patch for when the size\n * is limited.\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n * @param {Gradient} filler\n */\n _applyPatternForTransformedGradient(\n ctx: CanvasRenderingContext2D,\n filler: TFiller,\n ) {\n const dims = this._limitCacheSize(this._getCacheCanvasDimensions()),\n retinaScaling = this.getCanvasRetinaScaling(),\n width = dims.x / this.scaleX / retinaScaling,\n height = dims.y / this.scaleY / retinaScaling,\n pCanvas = createCanvasElementFor({\n // in case width and height are less than 1px, we have to round up.\n // since the pattern is no-repeat, this is fine\n width: Math.ceil(width),\n height: Math.ceil(height),\n });\n\n const pCtx = pCanvas.getContext('2d');\n if (!pCtx) {\n return;\n }\n pCtx.beginPath();\n pCtx.moveTo(0, 0);\n pCtx.lineTo(width, 0);\n pCtx.lineTo(width, height);\n pCtx.lineTo(0, height);\n pCtx.closePath();\n pCtx.translate(width / 2, height / 2);\n pCtx.scale(\n dims.zoomX / this.scaleX / retinaScaling,\n dims.zoomY / this.scaleY / retinaScaling,\n );\n this._applyPatternGradientTransform(pCtx, filler);\n pCtx.fillStyle = filler.toLive(ctx)!;\n pCtx.fill();\n ctx.translate(\n -this.width / 2 - this.strokeWidth / 2,\n -this.height / 2 - this.strokeWidth / 2,\n );\n ctx.scale(\n (retinaScaling * this.scaleX) / dims.zoomX,\n (retinaScaling * this.scaleY) / dims.zoomY,\n );\n ctx.strokeStyle = pCtx.createPattern(pCanvas, 'no-repeat') ?? '';\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 * It doesn't matter where the objects origin are, svg has left and top in the top left corner,\n * And this method is only run once on the object after the fromElement parser.\n * @private\n * @return {Point} center point from element coordinates\n */\n _findCenterFromElement() {\n return new Point(this.left + this.width / 2, this.top + this.height / 2);\n }\n\n /**\n * Clones an instance.\n * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n * @returns {Promise<FabricObject>}\n */\n clone(propertiesToInclude?: string[]): Promise<this> {\n const objectForm = this.toObject(propertiesToInclude);\n return (this.constructor as typeof FabricObject).fromObject(\n objectForm,\n ) as unknown as Promise<this>;\n }\n\n /**\n * Creates an instance of Image out of an object\n * makes use of toCanvasElement.\n * Once this method was based on toDataUrl and loadImage, so it also had a quality\n * and format option. toCanvasElement is faster and produce no loss of quality.\n * If you need to get a real Jpeg or Png from an object, using toDataURL is the right way to do it.\n * toCanvasElement and then toBlob from the obtained canvas is also a good option.\n * @todo fix the export type, it could not be Image but the type that getClass return for 'image'.\n * @param {ObjectToCanvasElementOptions} [options] for clone as image, passed to toDataURL\n * @param {Number} [options.multiplier=1] Multiplier to scale by\n * @param {Number} [options.left] Cropping left offset. Introduced in v1.2.14\n * @param {Number} [options.top] Cropping top offset. Introduced in v1.2.14\n * @param {Number} [options.width] Cropping width. Introduced in v1.2.14\n * @param {Number} [options.height] Cropping height. Introduced in v1.2.14\n * @param {Boolean} [options.enableRetinaScaling] Enable retina scaling for clone image. Introduce in 1.6.4\n * @param {Boolean} [options.withoutTransform] Remove current object transform ( no scale , no angle, no flip, no skew ). Introduced in 2.3.4\n * @param {Boolean} [options.withoutShadow] Remove current object shadow. Introduced in 2.4.2\n * @return {FabricImage} Object cloned as image.\n */\n cloneAsImage(options: ObjectToCanvasElementOptions): FabricImage {\n const canvasEl = this.toCanvasElement(options);\n // TODO: how to import Image w/o an import cycle?\n const ImageClass = classRegistry.getClass<typeof FabricImage>('image');\n return new ImageClass(canvasEl);\n }\n\n /**\n * Converts an object into a HTMLCanvas element\n * @param {ObjectToCanvasElementOptions} options Options object\n * @param {Number} [options.multiplier=1] Multiplier to scale by\n * @param {Number} [options.left] Cropping left offset. Introduced in v1.2.14\n * @param {Number} [options.top] Cropping top offset. Introduced in v1.2.14\n * @param {Number} [options.width] Cropping width. Introduced in v1.2.14\n * @param {Number} [options.height] Cropping height. Introduced in v1.2.14\n * @param {Boolean} [options.enableRetinaScaling] Enable retina scaling for clone image. Introduce in 1.6.4\n * @param {Boolean} [options.withoutTransform] Remove current object transform ( no scale , no angle, no flip, no skew ). Introduced in 2.3.4\n * @param {Boolean} [options.withoutShadow] Remove current object shadow. Introduced in 2.4.2\n * @param {Boolean} [options.viewportTransform] Account for canvas viewport transform\n * @param {(el?: HTMLCanvasElement) => StaticCanvas} [options.canvasProvider] Create the output canvas\n * @return {HTMLCanvasElement} Returns DOM element <canvas> with the FabricObject\n */\n toCanvasElement(options: ObjectToCanvasElementOptions = {}) {\n const origParams = saveObjectTransform(this),\n originalGroup = this.group,\n originalShadow = this.shadow,\n abs = Math.abs,\n retinaScaling = options.enableRetinaScaling ? getDevicePixelRatio() : 1,\n multiplier = (options.multiplier || 1) * retinaScaling,\n canvasProvider: (el: HTMLCanvasElement) => StaticCanvas =\n options.canvasProvider ||\n ((el: HTMLCanvasElement) =>\n new StaticCanvas(el, {\n enableRetinaScaling: false,\n renderOnAddRemove: false,\n skipOffscreen: false,\n }));\n delete this.group;\n if (options.withoutTransform) {\n resetObjectTransform(this);\n }\n if (options.withoutShadow) {\n this.shadow = null;\n }\n if (options.viewportTransform) {\n sendObjectToPlane(this, this.getViewportTransform());\n }\n\n this.setCoords();\n const el = createCanvasElement(),\n boundingRect = this.getBoundingRect(),\n shadow = this.shadow,\n shadowOffset = new Point();\n\n if (shadow) {\n const shadowBlur = shadow.blur;\n const scaling = shadow.nonScaling\n ? new Point(1, 1)\n : this.getObjectScaling();\n // consider non scaling shadow.\n shadowOffset.x =\n 2 * Math.round(abs(shadow.offsetX) + shadowBlur) * abs(scaling.x);\n shadowOffset.y =\n 2 * Math.round(abs(shadow.offsetY) + shadowBlur) * abs(scaling.y);\n }\n const width = boundingRect.width + shadowOffset.x,\n height = boundingRect.height + shadowOffset.y;\n // if the current width/height is not an integer\n // we need to make it so.\n el.width = Math.ceil(width);\n el.height = Math.ceil(height);\n const canvas = canvasProvider(el);\n if (options.format === 'jpeg') {\n canvas.backgroundColor = '#fff';\n }\n this.setPositionByOrigin(\n new Point(canvas.width / 2, canvas.height / 2),\n CENTER,\n CENTER,\n );\n const originalCanvas = this.canvas;\n // static canvas and canvas have both an array of InteractiveObjects\n // @ts-expect-error this needs to be fixed somehow, or ignored globally\n canvas._objects = [this];\n this.set('canvas', canvas);\n this.setCoords();\n const canvasEl = canvas.toCanvasElement(multiplier || 1, options);\n this.set('canvas', originalCanvas);\n this.shadow = originalShadow;\n if (originalGroup) {\n this.group = originalGroup;\n }\n this.set(origParams);\n this.setCoords();\n // canvas.dispose will call image.dispose that will nullify the elements\n // since this canvas is a simple element for the process, we remove references\n // to objects in this way in order to avoid object trashing.\n canvas._objects = [];\n // since render has settled it is safe to destroy canvas\n canvas.destroy();\n return canvasEl;\n }\n\n /**\n * Converts an object into a data-url-like string\n * @param {Object} options Options object\n * @param {String} [options.format=png] The format of the output image. Either \"jpeg\" or \"png\"\n * @param {Number} [options.quality=1] Quality level (0..1). Only used for jpeg.\n * @param {Number} [options.multiplier=1] Multiplier to scale by\n * @param {Number} [options.left] Cropping left offset. Introduced in v1.2.14\n * @param {Number} [options.top] Cropping top offset. Introduced in v1.2.14\n * @param {Number} [options.width] Cropping width. Introduced in v1.2.14\n * @param {Number} [options.height] Cropping height. Introduced in v1.2.14\n * @param {Boolean} [options.enableRetinaScaling] Enable retina scaling for clone image. Introduce in 1.6.4\n * @param {Boolean} [options.withoutTransform] Remove current object transform ( no scale , no angle, no flip, no skew ). Introduced in 2.3.4\n * @param {Boolean} [options.withoutShadow] Remove current object shadow. Introduced in 2.4.2\n * @return {String} Returns a data: URL containing a representation of the object in the format specified by options.format\n */\n toDataURL(options: toDataURLOptions = {}) {\n return toDataURL(\n this.toCanvasElement(options),\n options.format || 'png',\n options.quality || 1,\n );\n }\n toBlob(options: toDataURLOptions = {}) {\n return toBlob(\n this.toCanvasElement(options),\n options.format || 'png',\n options.quality || 1,\n );\n }\n\n /**\n * Checks if the instance is of any of the specified types.\n * We use this to filter a list of objects for the `getObjects` function.\n *\n * For detecting an instance type `instanceOf` is a better check,\n * but to avoid to make specific classes a dependency of generic code\n * internally we use this.\n *\n * This compares both the static class `type` and the instance's own `type` property\n * against the provided list of types.\n *\n * @param types - A list of type strings to check against.\n * @returns `true` if the object's type or class type matches any in the list, otherwise `false`.\n */\n isType(...types: string[]) {\n return (\n types.includes((this.constructor as typeof FabricObject).type) ||\n types.includes(this.type)\n );\n }\n\n /**\n * Returns complexity of an instance\n * @return {Number} complexity of this instance (is 1 unless subclassed)\n */\n complexity() {\n return 1;\n }\n\n /**\n * Returns a JSON representation of an instance\n * @return {Object} JSON\n */\n toJSON() {\n // delegate, not alias\n return this.toObject();\n }\n\n /**\n * Sets \"angle\" of an instance with centered rotation\n * @param {TDegree} angle Angle value (in degrees)\n */\n rotate(angle: TDegree) {\n const { centeredRotation, originX, originY } = this;\n\n if (centeredRotation) {\n const { x, y } = this.getRelativeCenterPoint();\n this.originX = CENTER;\n this.originY = CENTER;\n this.left = x;\n this.top = y;\n }\n\n this.set('angle', angle);\n\n if (centeredRotation) {\n const { x, y } = this.getPositionByOrigin(originX, originY);\n this.left = x;\n this.top = y;\n this.originX = originX;\n this.originY = originY;\n }\n }\n\n /**\n * This callback function is called by the parent group of an object every\n * time a non-delegated property changes on the group. It is passed the key\n * and value as parameters. Not adding in this function's signature to avoid\n * Travis build error about unused variables.\n */\n setOnGroup() {\n // implemented by sub-classes, as needed.\n }\n\n /**\n * Sets canvas globalCompositeOperation for specific object\n * custom composition operation for the particular object can be specified using globalCompositeOperation property\n * @param {CanvasRenderingContext2D} ctx Rendering canvas context\n */\n _setupCompositeOperation(ctx: CanvasRenderingContext2D) {\n if (this.globalCompositeOperation) {\n ctx.globalCompositeOperation = this.globalCompositeOperation;\n }\n }\n\n /**\n * cancel instance's running animations\n * override if necessary to dispose artifacts such as `clipPath`\n */\n dispose() {\n runningAnimations.cancelByTarget(this);\n this.off();\n this._set('canvas', undefined);\n // clear caches\n this._cacheCanvas && getEnv().dispose(this._cacheCanvas);\n this._cacheCanvas = undefined;\n this._cacheContext = null;\n }\n\n // #region Animation methods\n /**\n * List of properties to consider for animating colors.\n * @type String[]\n */\n static colorProperties: string[] = [FILL, STROKE, 'backgroundColor'];\n\n /**\n * Animates object's properties\n * @param {Record<string, number | number[] | TColorArg>} animatable map of keys and end values\n * @param {Partial<AnimationOptions<T>>} options\n * @see {@link http://fabric5.fabricjs.com/fabric-intro-part-2#animation}\n * @return {Record<string, TAnimation<T>>} map of animation contexts\n *\n * As object — multiple properties\n *\n * object.animate({ left: ..., top: ... });\n * object.animate({ left: ..., top: ... }, { duration: ... });\n */\n animate<T extends number | number[] | TColorArg>(\n animatable: Record<string, T>,\n options?: Partial<AnimationOptions<T>>,\n ): Record<string, TAnimation<T>> {\n return Object.entries(animatable).reduce(\n (acc, [key, endValue]) => {\n acc[key] = this._animate(key, endValue, options);\n return acc;\n },\n {} as Record<string, TAnimation<T>>,\n );\n }\n\n /**\n * @private\n * @param {String} key Property to animate\n * @param {String} to Value to animate to\n * @param {Object} [options] Options object\n */\n _animate<T extends number | number[] | TColorArg>(\n key: string,\n endValue: T,\n options: Partial<AnimationOptions<T>> = {},\n ): TAnimation<T> {\n const path = key.split('.');\n const propIsColor = (\n this.constructor as typeof FabricObject\n ).colorProperties.includes(path[path.length - 1]);\n const { abort, startValue, onChange, onComplete } = options;\n const animationOptions = {\n ...options,\n target: this,\n // path.reduce... is the current value in case start value isn't provided\n startValue:\n startValue ?? path.reduce((deep: any, key) => deep[key], this),\n endValue,\n abort: abort?.bind(this),\n onChange: (\n value: number | number[] | string,\n valueProgress: number,\n durationProgress: number,\n ) => {\n path.reduce((deep: Record<string, any>, key, index) => {\n if (index === path.length - 1) {\n deep[key] = value;\n }\n return deep[key];\n }, this);\n onChange &&\n // @ts-expect-error generic callback arg0 is wrong\n onChange(value, valueProgress, durationProgress);\n },\n onComplete: (\n value: number | number[] | string,\n valueProgress: number,\n durationProgress: number,\n ) => {\n this.setCoords();\n onComplete &&\n // @ts-expect-error generic callback arg0 is wrong\n onComplete(value, valueProgress, durationProgress);\n },\n } as AnimationOptions<T>;\n\n return (\n propIsColor\n ? animateColor(animationOptions as ColorAnimationOptions)\n : animate(\n animationOptions as ValueAnimationOptions | ArrayAnimationOptions,\n )\n ) as TAnimation<T>;\n }\n\n // #region Object stacking methods\n\n /**\n * A reference to the parent of the object\n * Used to keep the original parent ref when the object has been added to an ActiveSelection, hence loosing the `group` ref\n */\n declare parent?: Group;\n\n /**\n * Checks if object is descendant of target\n * Should be used instead of {@link Group.contains} or {@link StaticCanvas.contains} for performance reasons\n * @param {TAncestor} target\n * @returns {boolean}\n */\n isDescendantOf(target: TAncestor): boolean {\n const { parent, group } = this;\n return (\n parent === target ||\n group === target ||\n // walk up\n (!!parent && parent.isDescendantOf(target)) ||\n (!!group && group !== parent && group.isDescendantOf(target))\n );\n }\n\n /**\n * @returns {Ancestors} ancestors (excluding `ActiveSelection`) from bottom to top\n */\n getAncestors(): Ancestors {\n const ancestors: TAncestor[] = [];\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n let parent: TAncestor | undefined = this;\n do {\n parent = parent.parent;\n parent && ancestors.push(parent);\n } while (parent);\n return ancestors as Ancestors;\n }\n\n /**\n * Compare ancestors\n *\n * @param {StackedObject} other\n * @returns {AncestryComparison} an object that represent the ancestry situation.\n */\n findCommonAncestors<T extends this>(other: T): AncestryComparison {\n if (this === other) {\n return {\n fork: [],\n otherFork: [],\n common: [this, ...this.getAncestors()],\n } as AncestryComparison;\n }\n const ancestors = this.getAncestors();\n const otherAncestors = other.getAncestors();\n // if `this` has no ancestors and `this` is top ancestor of `other` we must handle the following case\n if (\n ancestors.length === 0 &&\n otherAncestors.length > 0 &&\n this === otherAncestors[otherAncestors.length - 1]\n ) {\n return {\n fork: [],\n otherFork: [\n other,\n ...otherAncestors.slice(0, otherAncestors.length - 1),\n ],\n common: [this],\n } as AncestryComparison;\n }\n // compare ancestors\n for (let i = 0, ancestor; i < ancestors.length; i++) {\n ancestor = ancestors[i];\n if (ancestor === other) {\n return {\n fork: [this, ...ancestors.slice(0, i)],\n otherFork: [],\n common: ancestors.slice(i),\n } as AncestryComparison;\n }\n for (let j = 0; j < otherAncestors.length; j++) {\n if (this === otherAncestors[j]) {\n return {\n fork: [],\n otherFork: [other, ...otherAncestors.slice(0, j)],\n common: [this, ...ancestors],\n } as AncestryComparison;\n }\n if (ancestor === otherAncestors[j]) {\n return {\n fork: [this, ...ancestors.slice(0, i)],\n otherFork: [other, ...otherAncestors.slice(0, j)],\n common: ancestors.slice(i),\n } as AncestryComparison;\n }\n }\n }\n // nothing shared\n return {\n fork: [this, ...ancestors],\n otherFork: [other, ...otherAncestors],\n common: [],\n } as AncestryComparison;\n }\n\n /**\n *\n * @param {StackedObject} other\n * @returns {boolean}\n */\n hasCommonAncestors<T extends this>(other: T): boolean {\n const commonAncestors = this.findCommonAncestors(other);\n return commonAncestors && !!commonAncestors.common.length;\n }\n\n /**\n *\n * @param {FabricObject} other object to compare against\n * @returns {boolean | undefined} if objects do not share a common ancestor or they are strictly equal it is impossible to determine which is in front of the other; in such cases the function returns `undefined`\n */\n isInFrontOf<T extends this>(other: T): boolean | undefined {\n if (this === other) {\n return undefined;\n }\n const ancestorData = this.findCommonAncestors(other);\n\n if (ancestorData.fork.includes(other as any)) {\n return true;\n }\n if (ancestorData.otherFork.includes(this as any)) {\n return false;\n }\n // if there isn't a common ancestor, we take the canvas.\n // if there is no canvas, there is nothing to compare\n const firstCommonAncestor = ancestorData.common[0] || this.canvas;\n if (!firstCommonAncestor) {\n return undefined;\n }\n const headOfFork = ancestorData.fork.pop(),\n headOfOtherFork = ancestorData.otherFork.pop(),\n thisIndex = (firstCommonAncestor as TCollection)._objects.indexOf(\n headOfFork as any,\n ),\n otherIndex = (firstCommonAncestor as TCollection)._objects.indexOf(\n headOfOtherFork as any,\n );\n return thisIndex > -1 && thisIndex > otherIndex;\n }\n\n // #region Serialization\n /**\n * Define a list of custom properties that will be serialized when\n * instance.toObject() gets called\n */\n static customProperties: string[] = [];\n\n /**\n * Returns an object representation of an instance\n * @param {string[]} [propertiesToInclude] Any properties that you might want to additionally include in the output\n * @return {Object} Object representation of an instance\n */\n toObject(propertiesToInclude: any[] = []): any {\n const propertiesToSerialize = propertiesToInclude.concat(\n FabricObject.customProperties,\n (this.constructor as typeof FabricObject).customProperties || [],\n );\n let clipPathData: Partial<SerializedObjectProps> | undefined;\n const NUM_FRACTION_DIGITS = config.NUM_FRACTION_DIGITS;\n const {\n clipPath,\n fill,\n stroke,\n shadow,\n strokeDashArray,\n left,\n top,\n originX,\n originY,\n width,\n height,\n strokeWidth,\n strokeLineCap,\n strokeDashOffset,\n strokeLineJoin,\n strokeUniform,\n strokeMiterLimit,\n scaleX,\n scaleY,\n angle,\n flipX,\n flipY,\n opacity,\n visible,\n backgroundColor,\n fillRule,\n paintFirst,\n globalCompositeOperation,\n skewX,\n skewY,\n } = this;\n if (clipPath && !clipPath.excludeFromExport) {\n clipPathData = clipPath.toObject(\n propertiesToSerialize.concat('inverted', 'absolutePositioned'),\n );\n }\n const toFixedBound = (val: number) => toFixed(val, NUM_FRACTION_DIGITS);\n const object = {\n ...pick(this, propertiesToSerialize as (keyof this)[]),\n type: (this.constructor as typeof FabricObject).type,\n version: VERSION,\n originX,\n originY,\n left: toFixedBound(left),\n top: toFixedBound(top),\n width: toFixedBound(width),\n height: toFixedBound(height),\n fill: isSerializableFiller(fill) ? fill.toObject() : fill,\n stroke: isSerializableFiller(stroke) ? stroke.toObject() : stroke,\n strokeWidth: toFixedBound(strokeWidth),\n strokeDashArray: strokeDashArray\n ? strokeDashArray.concat()\n : strokeDashArray,\n strokeLineCap,\n strokeDashOffset,\n strokeLineJoin,\n strokeUniform,\n strokeMiterLimit: toFixedBound(strokeMiterLimit),\n scaleX: toFixedBound(scaleX),\n scaleY: toFixedBound(scaleY),\n angle: toFixedBound(angle),\n flipX,\n flipY,\n opacity: toFixedBound(opacity),\n shadow: shadow ? shadow.toObject() : shadow,\n visible,\n backgroundColor,\n fillRule,\n paintFirst,\n globalCompositeOperation,\n skewX: toFixedBound(skewX),\n skewY: toFixedBound(skewY),\n ...(clipPathData ? { clipPath: clipPathData } : null),\n };\n\n return !this.includeDefaultValues\n ? this._removeDefaultValues(object)\n : object;\n }\n\n /**\n * Returns (dataless) 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 toDatalessObject(propertiesToInclude?: any[]): any {\n // will be overwritten by subclasses\n return this.toObject(propertiesToInclude);\n }\n\n /**\n * @private\n * @param {Object} object\n */\n _removeDefaultValues<T extends object>(object: T): Partial<T> {\n // getDefaults() ( get from static ownDefaults ) should win over prototype since anyway they get assigned to instance\n // ownDefault vs prototype is swappable only if you change all the fabric objects consistently.\n const defaults = (this.constructor as typeof FabricObject).getDefaults();\n const hasStaticDefaultValues = Object.keys(defaults).length > 0;\n const baseValues = hasStaticDefaultValues\n ? defaults\n : Object.getPrototypeOf(this);\n\n return pickBy(object, (value, key) => {\n if (key === LEFT || key === TOP || key === 'type') {\n return true;\n }\n const baseValue = baseValues[key];\n return (\n value !== baseValue &&\n // basically a check for [] === []\n !(\n Array.isArray(value) &&\n Array.isArray(baseValue) &&\n value.length === 0 &&\n baseValue.length === 0\n )\n );\n });\n }\n\n /**\n * Returns a string representation of an instance\n * @return {String}\n */\n toString() {\n return `#<${(this.constructor as typeof FabricObject).type}>`;\n }\n\n /**\n *\n * @param {Function} klass\n * @param {object} object\n * @param {object} [options]\n * @param {string} [options.extraParam] property to pass as first argument to the constructor\n * @param {AbortSignal} [options.signal] handle aborting, see https://developer.mozilla.org/en-US/docs/Web/API/AbortController/signal\n * @returns {Promise<FabricObject>}\n */\n static _fromObject<S extends FabricObject>(\n { type, ...serializedObjectOptions }: Record<string, unknown>,\n { extraParam, ...options }: Abortable & { extraParam?: string } = {},\n ): Promise<S> {\n return enlivenObjectEnlivables<any>(serializedObjectOptions, options).then(\n (enlivedObjectOptions) => {\n // from the resulting enlived options, extract options.extraParam to arg0\n // to avoid accidental overrides later\n if (extraParam) {\n delete enlivedObjectOptions[extraParam];\n return new this(\n serializedObjectOptions[extraParam],\n // @ts-expect-error different signature\n enlivedObjectOptions,\n );\n } else {\n return new this(enlivedObjectOptions);\n }\n },\n ) as Promise<S>;\n }\n\n /**\n *\n * @param {object} object\n * @param {object} [options]\n * @param {AbortSignal} [options.signal] handle aborting, see https://developer.mozilla.org/en-US/docs/Web/API/AbortController/signal\n * @returns {Promise<FabricObject>}\n */\n static fromObject<T extends TOptions<SerializedObjectProps>>(\n object: T,\n options?: Abortable,\n ) {\n return this._fromObject(object, options);\n }\n}\n\nclassRegistry.setClass(FabricObject);\nclassRegistry.setClass(FabricObject, 'object');\n"],"names":["FabricObject","ObjectGeometry","getDefaults","ownDefaults","type","name","constructor","toLowerCase","value","log","options","_defineProperty","Object","assign","setOptions","_createCacheCanvas","_cacheCanvas","createCanvasElement","_cacheContext","getContext","_updateCacheCanvas","dirty","_limitCacheSize","dims","width","height","max","config","maxCacheSideLimit","min","minCacheSideLimit","perfLimitSizeTotal","ar","limX","limY","cache","limitDimsByArea","x","capValue","y","zoomX","capped","zoomY","_getCacheCanvasDimensions","objectScale","getTotalObjectScaling","dim","_getTransformedDimensions","skewX","skewY","neededX","scaleX","neededY","scaleY","Math","ceil","ALIASING_LIMIT","canvas","context","dimensionsChanged","zoomChanged","shouldRedraw","setTransform","clearRect","drawingWidth","drawingHeight","cacheTranslationX","round","cacheTranslationY","translate","scale","arguments","length","undefined","_setOptions","transform","ctx","needFullTransform","group","_transformDone","contextTop","m","calcTransformMatrix","getObjectScaling","Point","abs","qrDecompose","zoom","getZoom","retina","getCanvasRetinaScaling","scalarMultiply","getObjectOpacity","opacity","_constrainScale","minScaleLimit","_set","key","SCALE_X","SCALE_Y","flipX","flipY","Shadow","isChanged","cacheProperties","includes","parent","stateProperties","isNotVisible","strokeWidth","visible","render","skipOffscreen","isOnScreen","save","_setupCompositeOperation","drawSelectionBackground","_setOpacity","_setShadow","shouldCache","renderCache","drawCacheOnCanvas","_removeCacheCanvas","drawObject","restore","_ctx","isCacheDirty","forClipping","parentClipPaths","hasStroke","stroke","hasFill","fill","needsItsOwnCache","paintFirst","STROKE","shadow","clipPath","ownCaching","objectCaching","isOnACache","willDrawShadow","offsetX","offsetY","drawClipPathOnCache","canvasWithClipPath","inverted","globalCompositeOperation","drawImage","originalFill","originalStroke","_setClippingProperties","_renderBackground","fire","_render","_drawClipPath","createClipPathLayer","createCanvasElementFor","forEach","prevClipPath","push","absolutePositioned","invertTransform","skipCanvas","backgroundColor","_getNonTransformedDimensions","fillStyle","fillRect","_removeShadow","globalAlpha","_setStrokeStyles","decl","lineWidth","lineCap","strokeLineCap","lineDashOffset","strokeDashOffset","lineJoin","strokeLineJoin","miterLimit","strokeMiterLimit","isFiller","gradientUnits","gradientTransform","patternTransform","_applyPatternForTransformedGradient","strokeStyle","toLive","_applyPatternGradientTransform","_setFillStyles","_ref","_setLineDash","dashArray","setLineDash","retinaScaling","sx","sy","viewportTransform","iMatrix","multX","multY","scaling","nonScaling","shadowColor","color","shadowBlur","blur","browserShadowBlurConstant","shadowOffsetX","shadowOffsetY","filler","t","_renderPaintInOrder","_renderStroke","_renderFill","fillRule","affectStroke","strokeUniform","strokeDashArray","_pCtx$createPattern","pCanvas","pCtx","beginPath","moveTo","lineTo","closePath","createPattern","_findCenterFromElement","left","top","clone","propertiesToInclude","objectForm","toObject","fromObject","cloneAsImage","canvasEl","toCanvasElement","ImageClass","classRegistry","getClass","origParams","saveObjectTransform","originalGroup","originalShadow","enableRetinaScaling","getDevicePixelRatio","multiplier","canvasProvider","el","StaticCanvas","renderOnAddRemove","withoutTransform","resetObjectTransform","withoutShadow","sendObjectToPlane","getViewportTransform","setCoords","boundingRect","getBoundingRect","shadowOffset","format","setPositionByOrigin","CENTER","originalCanvas","_objects","set","destroy","toDataURL","quality","toBlob","isType","_len","types","Array","_key","complexity","toJSON","rotate","angle","centeredRotation","originX","originY","getRelativeCenterPoint","getPositionByOrigin","setOnGroup","dispose","runningAnimations","cancelByTarget","off","getEnv","animate","animatable","entries","reduce","acc","_ref2","endValue","_animate","path","split","propIsColor","colorProperties","abort","startValue","onChange","onComplete","animationOptions","target","deep","bind","valueProgress","durationProgress","index","animateColor","isDescendantOf","getAncestors","ancestors","findCommonAncestors","other","fork","otherFork","common","otherAncestors","slice","i","ancestor","j","hasCommonAncestors","commonAncestors","isInFrontOf","ancestorData","firstCommonAncestor","headOfFork","pop","headOfOtherFork","thisIndex","indexOf","otherIndex","propertiesToSerialize","concat","customProperties","clipPathData","NUM_FRACTION_DIGITS","excludeFromExport","toFixedBound","val","toFixed","object","pick","version","VERSION","isSerializableFiller","includeDefaultValues","_removeDefaultValues","toDatalessObject","defaults","hasStaticDefaultValues","keys","baseValues","getPrototypeOf","pickBy","LEFT","TOP","baseValue","isArray","toString","_fromObject","_ref3","serializedObjectOptions","extraParam","enlivenObjectEnlivables","then","enlivedObjectOptions","fabricObjectDefaultValues","FILL","setClass"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import{SCALE_X as t,SCALE_Y as i,iMatrix as e,CENTER as s,LEFT as n,TOP as r}from"../../constants.min.mjs";import{Intersection as o}from"../../Intersection.min.mjs";import{Point as h}from"../../Point.min.mjs";import{makeBoundingBoxFromPoints as a}from"../../util/misc/boundingBoxFromPoints.min.mjs";import{transformPoint as l,invertTransform as g,calcPlaneRotation as c,createRotateMatrix as m,multiplyTransformMatrices as u,composeMatrix as d,calcDimensionsMatrix as f,createTranslateMatrix as p}from"../../util/misc/matrix.min.mjs";import{radiansToDegrees as v,degreesToRadians as y}from"../../util/misc/radiansDegreesConversion.min.mjs";import{resolveOrigin as C}from"../../util/misc/resolveOrigin.min.mjs";import{sizeAfterTransform as x}from"../../util/misc/objectTransforms.min.mjs";import{CommonMethods as X}from"../../CommonMethods.min.mjs";class Y extends X{getX(){return this.getXY().x}setX(t){this.setXY(this.getXY().setX(t))}getY(){return this.getXY().y}setY(t){this.setXY(this.getXY().setY(t))}getRelativeX(){return this.left}setRelativeX(t){this.left=t}getRelativeY(){return this.top}setRelativeY(t){this.top=t}getXY(){const t=this.getRelativeXY();return this.group?l(t,this.group.calcTransformMatrix()):t}setXY(t,i,e){this.group&&(t=l(t,g(this.group.calcTransformMatrix()))),this.setRelativeXY(t,i,e)}getRelativeXY(){return new h(this.left,this.top)}setRelativeXY(t){let i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.originX,e=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.originY;this.setPositionByOrigin(t,i,e)}isStrokeAccountedForInDimensions(){return!1}getCoords(){const{tl:t,tr:i,br:e,bl:s}=this.aCoords||(this.aCoords=this.calcACoords()),n=[t,i,e,s];if(this.group){const t=this.group.calcTransformMatrix();return n.map(i=>l(i,t))}return n}intersectsWithRect(t,i){return"Intersection"===o.intersectPolygonRectangle(this.getCoords(),t,i).status}intersectsWithObject(t){const i=o.intersectPolygonPolygon(this.getCoords(),t.getCoords());return"Intersection"===i.status||"Coincident"===i.status||t.isContainedWithinObject(this)||this.isContainedWithinObject(t)}isContainedWithinObject(t){return this.getCoords().every(i=>t.containsPoint(i))}isContainedWithinRect(t,i){const{left:e,top:s,width:n,height:r}=this.getBoundingRect();return e>=t.x&&e+n<=i.x&&s>=t.y&&s+r<=i.y}isOverlapping(t){return this.intersectsWithObject(t)||this.isContainedWithinObject(t)||t.isContainedWithinObject(this)}containsPoint(t){return o.isPointInPolygon(t,this.getCoords())}isOnScreen(){if(!this.canvas)return!1;const{tl:t,br:i}=this.canvas.vptCoords;return!!this.getCoords().some(e=>e.x<=i.x&&e.x>=t.x&&e.y<=i.y&&e.y>=t.y)||(!!this.intersectsWithRect(t,i)||this.containsPoint(t.midPointFrom(i)))}isPartiallyOnScreen(){if(!this.canvas)return!1;const{tl:t,br:i}=this.canvas.vptCoords;if(this.intersectsWithRect(t,i))return!0;return this.getCoords().every(e=>(e.x>=i.x||e.x<=t.x)&&(e.y>=i.y||e.y<=t.y))&&this.containsPoint(t.midPointFrom(i))}getBoundingRect(){return a(this.getCoords())}getScaledWidth(){return this._getTransformedDimensions().x}getScaledHeight(){return this._getTransformedDimensions().y}scale(e){this._set(t,e),this._set(i,e),this.setCoords()}scaleToWidth(t){const i=this.getBoundingRect().width/this.getScaledWidth();return this.scale(t/this.width/i)}scaleToHeight(t){const i=this.getBoundingRect().height/this.getScaledHeight();return this.scale(t/this.height/i)}getCanvasRetinaScaling(){var t;return(null===(t=this.canvas)||void 0===t?void 0:t.getRetinaScaling())||1}getTotalAngle(){return this.group?v(c(this.calcTransformMatrix())):this.angle}getViewportTransform(){var t;return(null===(t=this.canvas)||void 0===t?void 0:t.viewportTransform)||e.concat()}calcACoords(){const t=m({angle:this.angle}),{x:i,y:e}=this.getRelativeCenterPoint(),s=p(i,e),n=u(s,t),r=this._getTransformedDimensions(),o=r.x/2,h=r.y/2;return{tl:l({x:-o,y:-h},n),tr:l({x:o,y:-h},n),bl:l({x:-o,y:h},n),br:l({x:o,y:h},n)}}setCoords(){this.aCoords=this.calcACoords()}transformMatrixKey(){let t=arguments.length>0&&void 0!==arguments[0]&&arguments[0],i=[];return!t&&this.group&&(i=this.group.transformMatrixKey(t)),i.push(this.top,this.left,this.width,this.height,this.scaleX,this.scaleY,this.angle,this.strokeWidth,this.skewX,this.skewY,+this.flipX,+this.flipY,C(this.originX),C(this.originY)),i}calcTransformMatrix(){let t=arguments.length>0&&void 0!==arguments[0]&&arguments[0],i=this.calcOwnMatrix();if(t||!this.group)return i;const e=this.transformMatrixKey(t),s=this.matrixCache;return s&&s.key.every((t,i)=>t===e[i])?s.value:(this.group&&(i=u(this.group.calcTransformMatrix(!1),i)),this.matrixCache={key:e,value:i},i)}calcOwnMatrix(){const t=this.transformMatrixKey(!0),i=this.ownMatrixCache;if(i&&i.key===t)return i.value;const e=this.getRelativeCenterPoint(),s={angle:this.angle,translateX:e.x,translateY:e.y,scaleX:this.scaleX,scaleY:this.scaleY,skewX:this.skewX,skewY:this.skewY,flipX:this.flipX,flipY:this.flipY},n=d(s);return this.ownMatrixCache={key:t,value:n},n}_getNonTransformedDimensions(){return new h(this.width,this.height).scalarAdd(this.strokeWidth)}_calculateCurrentDimensions(t){return this._getTransformedDimensions(t).transform(this.getViewportTransform(),!0).scalarAdd(2*this.padding)}_getTransformedDimensions(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const i={scaleX:this.scaleX,scaleY:this.scaleY,skewX:this.skewX,skewY:this.skewY,width:this.width,height:this.height,strokeWidth:this.strokeWidth,...t},e=i.strokeWidth;let s=e,n=0;this.strokeUniform&&(s=0,n=e);const r=i.width+s,o=i.height+s;let a;return a=0===i.skewX&&0===i.skewY?new h(r*i.scaleX,o*i.scaleY):x(r,o,f(i)),a.scalarAdd(n)}translateToGivenOrigin(t,i,e,s,n){let r=t.x,o=t.y;const a=C(s)-C(i),l=C(n)-C(e);if(a||l){const t=this._getTransformedDimensions();r+=a*t.x,o+=l*t.y}return new h(r,o)}translateToCenterPoint(t,i,e){if(i===s&&e===s)return t;const n=this.translateToGivenOrigin(t,i,e,s,s);return this.angle?n.rotate(y(this.angle),t):n}translateToOriginPoint(t,i,e){const n=this.translateToGivenOrigin(t,s,s,i,e);return this.angle?n.rotate(y(this.angle),t):n}getCenterPoint(){const t=this.getRelativeCenterPoint();return this.group?l(t,this.group.calcTransformMatrix()):t}getRelativeCenterPoint(){return this.translateToCenterPoint(new h(this.left,this.top),this.originX,this.originY)}getPointByOrigin(t,i){return this.getPositionByOrigin(t,i)}getPositionByOrigin(t,i){return this.translateToOriginPoint(this.getRelativeCenterPoint(),t,i)}setPositionByOrigin(t,i,e){const s=this.translateToCenterPoint(t,i,e),n=this.translateToOriginPoint(s,this.originX,this.originY);this.set({left:n.x,top:n.y})}_getLeftTopCoords(){return this.getPositionByOrigin(n,r)}positionByLeftTop(t){return this.setPositionByOrigin(t,n,r)}}export{Y as ObjectGeometry};
1
+ import{SCALE_X as t,SCALE_Y as i,iMatrix as e,CENTER as s,LEFT as n,TOP as r}from"../../constants.min.mjs";import{Intersection as o}from"../../Intersection.min.mjs";import{Point as h}from"../../Point.min.mjs";import{makeBoundingBoxFromPoints as a}from"../../util/misc/boundingBoxFromPoints.min.mjs";import{transformPoint as l,invertTransform as g,calcPlaneRotation as c,createRotateMatrix as m,multiplyTransformMatrices as u,composeMatrix as d,calcDimensionsMatrix as f,createTranslateMatrix as p}from"../../util/misc/matrix.min.mjs";import{radiansToDegrees as v,degreesToRadians as y}from"../../util/misc/radiansDegreesConversion.min.mjs";import{resolveOrigin as C}from"../../util/misc/resolveOrigin.min.mjs";import{sizeAfterTransform as x}from"../../util/misc/objectTransforms.min.mjs";import{CommonMethods as X}from"../../CommonMethods.min.mjs";class Y extends X{getX(){return this.getXY().x}setX(t){this.setXY(this.getXY().setX(t))}getY(){return this.getXY().y}setY(t){this.setXY(this.getXY().setY(t))}getRelativeX(){return this.left}setRelativeX(t){this.left=t}getRelativeY(){return this.top}setRelativeY(t){this.top=t}getXY(){const t=this.getRelativeXY();return this.group?l(t,this.group.calcTransformMatrix()):t}setXY(t,i,e){this.group&&(t=l(t,g(this.group.calcTransformMatrix()))),this.setRelativeXY(t,i,e)}getRelativeXY(){return new h(this.left,this.top)}setRelativeXY(t){let i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.originX,e=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.originY;this.setPositionByOrigin(t,i,e)}isStrokeAccountedForInDimensions(){return!1}getCoords(){const{tl:t,tr:i,br:e,bl:s}=this.aCoords||(this.aCoords=this.calcACoords()),n=[t,i,e,s];if(this.group){const t=this.group.calcTransformMatrix();return n.map(i=>l(i,t))}return n}intersectsWithRect(t,i){return"Intersection"===o.intersectPolygonRectangle(this.getCoords(),t,i).status}intersectsWithObject(t){const i=o.intersectPolygonPolygon(this.getCoords(),t.getCoords());return"Intersection"===i.status||"Coincident"===i.status||t.isContainedWithinObject(this)||this.isContainedWithinObject(t)}isContainedWithinObject(t){return this.getCoords().every(i=>t.containsPoint(i))}isContainedWithinRect(t,i){const{left:e,top:s,width:n,height:r}=this.getBoundingRect();return e>=t.x&&e+n<=i.x&&s>=t.y&&s+r<=i.y}isOverlapping(t){return this.intersectsWithObject(t)||this.isContainedWithinObject(t)||t.isContainedWithinObject(this)}containsPoint(t){return o.isPointInPolygon(t,this.getCoords())}isOnScreen(){if(!this.canvas)return!1;const{tl:t,br:i}=this.canvas.vptCoords;return!!this.getCoords().some(e=>e.x<=i.x&&e.x>=t.x&&e.y<=i.y&&e.y>=t.y)||(!!this.intersectsWithRect(t,i)||this.containsPoint(t.midPointFrom(i)))}isPartiallyOnScreen(){if(!this.canvas)return!1;const{tl:t,br:i}=this.canvas.vptCoords;if(this.intersectsWithRect(t,i))return!0;return this.getCoords().every(e=>(e.x>=i.x||e.x<=t.x)&&(e.y>=i.y||e.y<=t.y))&&this.containsPoint(t.midPointFrom(i))}getBoundingRect(){return a(this.getCoords())}getScaledWidth(){return this._getTransformedDimensions().x}getScaledHeight(){return this._getTransformedDimensions().y}scale(e){this._set(t,e),this._set(i,e),this.setCoords()}scaleToWidth(t){const i=this.getBoundingRect().width/this.getScaledWidth();return this.scale(t/this.width/i)}scaleToHeight(t){const i=this.getBoundingRect().height/this.getScaledHeight();return this.scale(t/this.height/i)}getCanvasRetinaScaling(){var t;return(null===(t=this.canvas)||void 0===t?void 0:t.getRetinaScaling())||1}getTotalAngle(){return this.group?v(c(this.calcTransformMatrix())):this.angle}getViewportTransform(){var t;return(null===(t=this.canvas)||void 0===t?void 0:t.viewportTransform)||e.concat()}calcACoords(){const t=m({angle:this.angle}),{x:i,y:e}=this.getRelativeCenterPoint(),s=p(i,e),n=u(s,t),r=this._getTransformedDimensions(),o=r.x/2,h=r.y/2;return{tl:l({x:-o,y:-h},n),tr:l({x:o,y:-h},n),bl:l({x:-o,y:h},n),br:l({x:o,y:h},n)}}setCoords(){this.aCoords=this.calcACoords()}transformMatrixKey(){let t=arguments.length>0&&void 0!==arguments[0]&&arguments[0],i=[];return!t&&this.group&&(i=this.group.transformMatrixKey(t)),i.push(this.top,this.left,this.width,this.height,this.scaleX,this.scaleY,this.angle,this.strokeWidth,this.skewX,this.skewY,+this.flipX,+this.flipY,C(this.originX),C(this.originY)),i}calcTransformMatrix(){let t=arguments.length>0&&void 0!==arguments[0]&&arguments[0],i=this.calcOwnMatrix();if(t||!this.group)return i;const e=this.transformMatrixKey(t),s=this.matrixCache;return s&&s.key.every((t,i)=>t===e[i])?s.value:(this.group&&(i=u(this.group.calcTransformMatrix(!1),i)),this.matrixCache={key:e,value:i},i)}calcOwnMatrix(){const t=this.transformMatrixKey(!0),i=this.ownMatrixCache;if(i&&i.key.every((i,e)=>i===t[e]))return i.value;const e=this.getRelativeCenterPoint(),s={angle:this.angle,translateX:e.x,translateY:e.y,scaleX:this.scaleX,scaleY:this.scaleY,skewX:this.skewX,skewY:this.skewY,flipX:this.flipX,flipY:this.flipY},n=d(s);return this.ownMatrixCache={key:t,value:n},n}_getNonTransformedDimensions(){return new h(this.width,this.height).scalarAdd(this.strokeWidth)}_calculateCurrentDimensions(t){return this._getTransformedDimensions(t).transform(this.getViewportTransform(),!0).scalarAdd(2*this.padding)}_getTransformedDimensions(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const i={scaleX:this.scaleX,scaleY:this.scaleY,skewX:this.skewX,skewY:this.skewY,width:this.width,height:this.height,strokeWidth:this.strokeWidth,...t},e=i.strokeWidth;let s=e,n=0;this.strokeUniform&&(s=0,n=e);const r=i.width+s,o=i.height+s;let a;return a=0===i.skewX&&0===i.skewY?new h(r*i.scaleX,o*i.scaleY):x(r,o,f(i)),a.scalarAdd(n)}translateToGivenOrigin(t,i,e,s,n){let r=t.x,o=t.y;const a=C(s)-C(i),l=C(n)-C(e);if(a||l){const t=this._getTransformedDimensions();r+=a*t.x,o+=l*t.y}return new h(r,o)}translateToCenterPoint(t,i,e){if(i===s&&e===s)return t;const n=this.translateToGivenOrigin(t,i,e,s,s);return this.angle?n.rotate(y(this.angle),t):n}translateToOriginPoint(t,i,e){const n=this.translateToGivenOrigin(t,s,s,i,e);return this.angle?n.rotate(y(this.angle),t):n}getCenterPoint(){const t=this.getRelativeCenterPoint();return this.group?l(t,this.group.calcTransformMatrix()):t}getRelativeCenterPoint(){return this.translateToCenterPoint(new h(this.left,this.top),this.originX,this.originY)}getPointByOrigin(t,i){return this.getPositionByOrigin(t,i)}getPositionByOrigin(t,i){return this.translateToOriginPoint(this.getRelativeCenterPoint(),t,i)}setPositionByOrigin(t,i,e){const s=this.translateToCenterPoint(t,i,e),n=this.translateToOriginPoint(s,this.originX,this.originY);this.set({left:n.x,top:n.y})}_getLeftTopCoords(){return this.getPositionByOrigin(n,r)}positionByLeftTop(t){return this.setPositionByOrigin(t,n,r)}}export{Y as ObjectGeometry};
2
2
  //# sourceMappingURL=ObjectGeometry.min.mjs.map