fabric 5.3.0 → 6.0.0-beta1

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 (533) hide show
  1. package/.babelrc +11 -0
  2. package/.babelrcAlt +19 -0
  3. package/.browserslistrc +5 -0
  4. package/.eslintrc.js +43 -0
  5. package/.eslintrc.json +38 -46
  6. package/.eslintrc_tests +12 -0
  7. package/.gitattributes +2 -0
  8. package/.prettierignore +16 -0
  9. package/.prettierrc +4 -0
  10. package/CHANGELOG.md +491 -189
  11. package/CONTRIBUTING.md +226 -58
  12. package/README.md +188 -239
  13. package/bower.json +1 -3
  14. package/dist/fabric.d.ts +1021 -0
  15. package/dist/index.cjs +28027 -0
  16. package/dist/index.cjs.map +1 -0
  17. package/dist/index.d.ts +2 -0
  18. package/dist/index.min.js +1 -0
  19. package/dist/index.mjs +27964 -0
  20. package/dist/index.mjs.map +1 -0
  21. package/dist/index.node.cjs +28092 -0
  22. package/dist/index.node.cjs.map +1 -0
  23. package/dist/index.node.d.ts +15 -0
  24. package/dist/index.node.mjs +28035 -0
  25. package/dist/index.node.mjs.map +1 -0
  26. package/dist/src/Collection.d.ts +126 -0
  27. package/dist/src/CommonMethods.d.ts +32 -0
  28. package/dist/src/EventTypeDefs.d.ts +226 -0
  29. package/dist/src/Intersection.d.ts +100 -0
  30. package/dist/src/Observable.d.ts +54 -0
  31. package/dist/src/Pattern.d.ts +104 -0
  32. package/dist/src/Point.d.ts +232 -0
  33. package/dist/src/Shadow.d.ts +87 -0
  34. package/dist/src/brushes/BaseBrush.d.ts +105 -0
  35. package/dist/src/brushes/CircleBrush.d.ts +49 -0
  36. package/dist/src/brushes/PatternBrush.d.ts +23 -0
  37. package/dist/src/brushes/PencilBrush.d.ts +92 -0
  38. package/dist/src/brushes/SprayBrush.d.ts +79 -0
  39. package/dist/src/cache.d.ts +46 -0
  40. package/dist/src/canvas/Canvas.d.ts +567 -0
  41. package/dist/src/canvas/SelectableCanvas.d.ts +723 -0
  42. package/dist/src/canvas/StaticCanvas.d.ts +751 -0
  43. package/dist/src/canvas/TextEditingManager.d.ts +17 -0
  44. package/dist/src/canvas/canvas_gestures.mixin.d.ts +2 -0
  45. package/dist/src/color/Color.d.ts +174 -0
  46. package/dist/src/color/color_map.d.ts +155 -0
  47. package/dist/src/color/constants.d.ts +22 -0
  48. package/dist/src/color/util.d.ts +12 -0
  49. package/dist/src/config.d.ts +115 -0
  50. package/dist/src/constants.d.ts +14 -0
  51. package/dist/src/controls/Control.d.ts +228 -0
  52. package/dist/src/controls/changeWidth.d.ts +13 -0
  53. package/dist/src/controls/controls.render.d.ts +29 -0
  54. package/dist/src/controls/default_controls.d.ts +50 -0
  55. package/dist/src/controls/drag.d.ts +12 -0
  56. package/dist/src/controls/polyControl.d.ts +5 -0
  57. package/dist/src/controls/rotate.d.ts +12 -0
  58. package/dist/src/controls/scale.d.ts +47 -0
  59. package/dist/src/controls/scaleSkew.d.ts +39 -0
  60. package/dist/src/controls/skew.d.ts +33 -0
  61. package/dist/src/controls/util.d.ts +41 -0
  62. package/dist/src/controls/wrapWithFireEvent.d.ts +8 -0
  63. package/dist/src/controls/wrapWithFixedAnchor.d.ts +9 -0
  64. package/dist/src/env/browser.d.ts +3 -0
  65. package/dist/src/env/index.d.ts +7 -0
  66. package/dist/src/env/node.d.ts +3 -0
  67. package/dist/src/env/types.d.ts +15 -0
  68. package/dist/src/filters/BaseFilter.d.ts +156 -0
  69. package/dist/src/filters/BlendColor.d.ts +80 -0
  70. package/dist/src/filters/BlendImage.d.ts +90 -0
  71. package/dist/src/filters/Blur.d.ts +50 -0
  72. package/dist/src/filters/Boilerplate.d.ts +46 -0
  73. package/dist/src/filters/Brightness.d.ts +46 -0
  74. package/dist/src/filters/Canvas2dFilterBackend.d.ts +27 -0
  75. package/dist/src/filters/ColorMatrix.d.ts +62 -0
  76. package/dist/src/filters/ColorMatrixFilters.d.ts +1169 -0
  77. package/dist/src/filters/Composed.d.ts +47 -0
  78. package/dist/src/filters/Contrast.d.ts +44 -0
  79. package/dist/src/filters/Convolute.d.ts +82 -0
  80. package/dist/src/filters/FilterBackend.d.ts +14 -0
  81. package/dist/src/filters/Gamma.d.ts +53 -0
  82. package/dist/src/filters/Grayscale.d.ts +45 -0
  83. package/dist/src/filters/HueRotation.d.ts +24 -0
  84. package/dist/src/filters/Invert.d.ts +54 -0
  85. package/dist/src/filters/Noise.d.ts +53 -0
  86. package/dist/src/filters/Pixelate.d.ts +43 -0
  87. package/dist/src/filters/RemoveColor.d.ts +62 -0
  88. package/dist/src/filters/Resize.d.ts +134 -0
  89. package/dist/src/filters/Saturation.d.ts +47 -0
  90. package/dist/src/filters/Vibrance.d.ts +47 -0
  91. package/dist/src/filters/WebGLFilterBackend.d.ts +126 -0
  92. package/dist/src/filters/WebGLProbe.d.ts +28 -0
  93. package/dist/src/filters/typedefs.d.ts +49 -0
  94. package/dist/src/gradient/Gradient.d.ts +149 -0
  95. package/dist/src/gradient/constants.d.ts +15 -0
  96. package/dist/src/gradient/parser/index.d.ts +4 -0
  97. package/dist/src/gradient/parser/misc.d.ts +4 -0
  98. package/dist/src/gradient/parser/parseColorStops.d.ts +6 -0
  99. package/dist/src/gradient/parser/parseCoords.d.ts +17 -0
  100. package/dist/src/gradient/typedefs.d.ts +93 -0
  101. package/dist/src/mixins/eraser_brush.mixin.d.ts +2 -0
  102. package/dist/src/mixins/stateful.mixin.d.ts +18 -0
  103. package/dist/src/parkinglot/canvas_animation.mixin.d.ts +2 -0
  104. package/dist/src/parkinglot/straighten.d.ts +2 -0
  105. package/dist/src/parser/applyViewboxTransform.d.ts +5 -0
  106. package/dist/src/parser/attributes.d.ts +6 -0
  107. package/dist/src/parser/constants.d.ts +54 -0
  108. package/dist/src/parser/doesSomeParentMatch.d.ts +2 -0
  109. package/dist/src/parser/elementById.d.ts +6 -0
  110. package/dist/src/parser/elementMatchesRule.d.ts +5 -0
  111. package/dist/src/parser/elements_parser.d.ts +3 -0
  112. package/dist/src/parser/getCSSRules.d.ts +7 -0
  113. package/dist/src/parser/getGlobalStylesForElement.d.ts +5 -0
  114. package/dist/src/parser/getGradientDefs.d.ts +7 -0
  115. package/dist/src/parser/getMultipleNodes.d.ts +2 -0
  116. package/dist/src/parser/getSvgRegex.d.ts +2 -0
  117. package/dist/src/parser/hasAncestorWithNodeName.d.ts +2 -0
  118. package/dist/src/parser/loadSVGFromString.d.ts +12 -0
  119. package/dist/src/parser/loadSVGFromURL.d.ts +13 -0
  120. package/dist/src/parser/normalizeAttr.d.ts +2 -0
  121. package/dist/src/parser/normalizeValue.d.ts +2 -0
  122. package/dist/src/parser/parseAttributes.d.ts +9 -0
  123. package/dist/src/parser/parseElements.d.ts +11 -0
  124. package/dist/src/parser/parseFontDeclaration.d.ts +10 -0
  125. package/dist/src/parser/parsePointsAttribute.d.ts +12 -0
  126. package/dist/src/parser/parseSVGDocument.d.ts +15 -0
  127. package/dist/src/parser/parseStyleAttribute.d.ts +9 -0
  128. package/dist/src/parser/parseStyleObject.d.ts +2 -0
  129. package/dist/src/parser/parseStyleString.d.ts +2 -0
  130. package/dist/src/parser/parseTransformAttribute.d.ts +10 -0
  131. package/dist/src/parser/parseUseDirectives.d.ts +2 -0
  132. package/dist/src/parser/percent.d.ts +9 -0
  133. package/dist/src/parser/recursivelyParseGradientsXlink.d.ts +2 -0
  134. package/dist/src/parser/rotateMatrix.d.ts +2 -0
  135. package/dist/src/parser/scaleMatrix.d.ts +2 -0
  136. package/dist/src/parser/selectorMatches.d.ts +2 -0
  137. package/dist/src/parser/setStrokeFillOpacity.d.ts +6 -0
  138. package/dist/src/parser/skewMatrix.d.ts +2 -0
  139. package/dist/src/parser/translateMatrix.d.ts +2 -0
  140. package/dist/src/shapes/ActiveSelection.d.ts +66 -0
  141. package/dist/src/shapes/Circle.d.ts +80 -0
  142. package/dist/src/shapes/Ellipse.d.ts +74 -0
  143. package/dist/src/shapes/Group.d.ts +381 -0
  144. package/dist/src/shapes/IText/DraggableTextDelegate.d.ts +78 -0
  145. package/dist/src/shapes/IText/IText.d.ts +322 -0
  146. package/dist/src/shapes/IText/ITextBehavior.d.ts +285 -0
  147. package/dist/src/shapes/IText/ITextClickBehavior.d.ts +81 -0
  148. package/dist/src/shapes/IText/ITextKeyBehavior.d.ts +193 -0
  149. package/dist/src/shapes/IText/constants.d.ts +13 -0
  150. package/dist/src/shapes/Image.d.ts +283 -0
  151. package/dist/src/shapes/Line.d.ts +117 -0
  152. package/dist/src/shapes/Object/AnimatableObject.d.ts +33 -0
  153. package/dist/src/shapes/Object/FabricObject.d.ts +9 -0
  154. package/dist/src/shapes/Object/FabricObjectSVGExportMixin.d.ts +74 -0
  155. package/dist/src/shapes/Object/InteractiveObject.d.ts +282 -0
  156. package/dist/src/shapes/Object/Object.d.ts +906 -0
  157. package/dist/src/shapes/Object/ObjectGeometry.d.ts +343 -0
  158. package/dist/src/shapes/Object/ObjectOrigin.d.ts +178 -0
  159. package/dist/src/shapes/Object/StackedObject.d.ts +62 -0
  160. package/dist/src/shapes/Object/defaultValues.d.ts +77 -0
  161. package/dist/src/shapes/Path.d.ts +123 -0
  162. package/dist/src/shapes/Polygon.d.ts +7 -0
  163. package/dist/src/shapes/Polyline.d.ts +130 -0
  164. package/dist/src/shapes/Rect.d.ts +62 -0
  165. package/dist/src/shapes/Text/StyledText.d.ts +118 -0
  166. package/dist/src/shapes/Text/Text.d.ts +656 -0
  167. package/dist/src/shapes/Text/TextSVGExportMixin.d.ts +32 -0
  168. package/dist/src/shapes/Textbox.d.ts +170 -0
  169. package/dist/src/shapes/Triangle.d.ts +17 -0
  170. package/dist/src/typedefs.d.ts +93 -0
  171. package/dist/src/util/animation/AnimationBase.d.ts +54 -0
  172. package/dist/src/util/animation/AnimationFrameProvider.d.ts +8 -0
  173. package/dist/src/util/animation/AnimationRegistry.d.ts +29 -0
  174. package/dist/src/util/animation/ArrayAnimation.d.ts +10 -0
  175. package/dist/src/util/animation/ColorAnimation.d.ts +11 -0
  176. package/dist/src/util/animation/ValueAnimation.d.ts +10 -0
  177. package/dist/src/util/animation/animate.d.ts +37 -0
  178. package/dist/src/util/animation/easing.d.ts +130 -0
  179. package/dist/src/util/animation/types.d.ts +87 -0
  180. package/dist/src/util/applyMixins.d.ts +8 -0
  181. package/dist/src/util/class_registry.d.ts +14 -0
  182. package/dist/src/util/dom_event.d.ts +5 -0
  183. package/dist/src/util/dom_misc.d.ts +40 -0
  184. package/dist/src/util/dom_request.d.ts +14 -0
  185. package/dist/src/util/dom_style.d.ts +7 -0
  186. package/dist/src/util/fireEvent.d.ts +3 -0
  187. package/dist/src/util/internals/cloneDeep.d.ts +2 -0
  188. package/dist/src/util/internals/getRandomInt.d.ts +8 -0
  189. package/dist/src/util/internals/ifNaN.d.ts +8 -0
  190. package/dist/src/util/internals/index.d.ts +4 -0
  191. package/dist/src/util/internals/removeFromArray.d.ts +9 -0
  192. package/dist/src/util/internals/uid.d.ts +2 -0
  193. package/dist/src/util/lang_class.d.ts +12 -0
  194. package/dist/src/util/lang_string.d.ts +22 -0
  195. package/dist/src/util/misc/boundingBoxFromPoints.d.ts +9 -0
  196. package/dist/src/util/misc/capValue.d.ts +2 -0
  197. package/dist/src/util/misc/cos.d.ts +10 -0
  198. package/dist/src/util/misc/dom.d.ts +28 -0
  199. package/dist/src/util/misc/findScaleTo.d.ts +29 -0
  200. package/dist/src/util/misc/groupSVGElements.d.ts +9 -0
  201. package/dist/src/util/misc/isTransparent.d.ts +11 -0
  202. package/dist/src/util/misc/matrix.d.ts +92 -0
  203. package/dist/src/util/misc/mergeClipPaths.d.ts +23 -0
  204. package/dist/src/util/misc/objectEnlive.d.ts +56 -0
  205. package/dist/src/util/misc/objectTransforms.d.ts +68 -0
  206. package/dist/src/util/misc/pick.d.ts +8 -0
  207. package/dist/src/util/misc/planeChange.d.ts +84 -0
  208. package/dist/src/util/misc/projectStroke/StrokeLineCapProjections.d.ts +51 -0
  209. package/dist/src/util/misc/projectStroke/StrokeLineJoinProjections.d.ts +81 -0
  210. package/dist/src/util/misc/projectStroke/StrokeProjectionsBase.d.ts +25 -0
  211. package/dist/src/util/misc/projectStroke/index.d.ts +11 -0
  212. package/dist/src/util/misc/projectStroke/types.d.ts +23 -0
  213. package/dist/src/util/misc/radiansDegreesConversion.d.ts +14 -0
  214. package/dist/src/util/misc/resolveOrigin.d.ts +9 -0
  215. package/dist/src/util/misc/rotatePoint.d.ts +12 -0
  216. package/dist/src/util/misc/sin.d.ts +10 -0
  217. package/dist/src/util/misc/svgParsing.d.ts +53 -0
  218. package/dist/src/util/misc/textStyles.d.ts +32 -0
  219. package/dist/src/util/misc/toFixed.d.ts +8 -0
  220. package/dist/src/util/misc/vectors.d.ts +57 -0
  221. package/dist/src/util/path.d.ts +108 -0
  222. package/dist/src/util/transform_matrix_removal.d.ts +14 -0
  223. package/dist/src/util/types.d.ts +19 -0
  224. package/fabric.ts +427 -0
  225. package/index.node.ts +43 -0
  226. package/index.ts +1 -0
  227. package/package.json +90 -39
  228. package/publish.js +0 -26
  229. package/rollup.config.mjs +79 -0
  230. package/rollup.test.config.js +24 -0
  231. package/scripts/build.mjs +50 -0
  232. package/scripts/buildLock.mjs +115 -0
  233. package/scripts/buildReporter.mjs +15 -0
  234. package/scripts/buildStats.mjs +139 -0
  235. package/scripts/dirname.mjs +14 -0
  236. package/scripts/index.mjs +679 -0
  237. package/scripts/transform_files.mjs +504 -0
  238. package/src/Collection.ts +311 -0
  239. package/src/CommonMethods.ts +63 -0
  240. package/src/EventTypeDefs.ts +294 -0
  241. package/src/Intersection.ts +273 -0
  242. package/src/Observable.ts +175 -0
  243. package/src/Pattern.ts +211 -0
  244. package/src/Point.ts +388 -0
  245. package/src/Shadow.ts +215 -0
  246. package/src/brushes/{base_brush.class.js → BaseBrush.ts} +65 -42
  247. package/src/brushes/CircleBrush.ts +145 -0
  248. package/src/brushes/PatternBrush.ts +70 -0
  249. package/src/brushes/PencilBrush.ts +300 -0
  250. package/src/brushes/SprayBrush.ts +219 -0
  251. package/src/cache.ts +89 -0
  252. package/src/canvas/Canvas.ts +1672 -0
  253. package/src/canvas/SelectableCanvas.ts +1636 -0
  254. package/src/canvas/StaticCanvas.ts +1709 -0
  255. package/src/canvas/TextEditingManager.ts +48 -0
  256. package/src/canvas/canvas_gestures.mixin.ts +207 -0
  257. package/src/color/Color.ts +404 -0
  258. package/src/color/color_map.ts +154 -0
  259. package/src/color/constants.ts +26 -0
  260. package/src/color/util.ts +32 -0
  261. package/src/config.ts +159 -0
  262. package/src/constants.ts +19 -0
  263. package/src/controls/Control.ts +377 -0
  264. package/src/controls/changeWidth.ts +52 -0
  265. package/src/controls/controls.render.ts +138 -0
  266. package/src/controls/default_controls.ts +132 -0
  267. package/src/controls/drag.ts +31 -0
  268. package/src/controls/polyControl.ts +135 -0
  269. package/src/controls/rotate.ts +87 -0
  270. package/src/controls/scale.ts +277 -0
  271. package/src/controls/scaleSkew.ts +92 -0
  272. package/src/controls/skew.ts +242 -0
  273. package/src/controls/util.ts +154 -0
  274. package/src/controls/wrapWithFireEvent.ts +25 -0
  275. package/src/controls/wrapWithFixedAnchor.ts +20 -0
  276. package/src/env/browser.ts +28 -0
  277. package/src/env/index.ts +19 -0
  278. package/src/env/node.ts +52 -0
  279. package/src/env/types.ts +15 -0
  280. package/src/filters/{base_filter.class.js → BaseFilter.ts} +201 -149
  281. package/src/filters/BlendColor.ts +258 -0
  282. package/src/filters/BlendImage.ts +254 -0
  283. package/src/filters/Blur.ts +202 -0
  284. package/src/filters/Boilerplate.ts +91 -0
  285. package/src/filters/Brightness.ts +93 -0
  286. package/src/filters/Canvas2dFilterBackend.ts +65 -0
  287. package/src/filters/ColorMatrix.ts +156 -0
  288. package/src/filters/ColorMatrixFilters.ts +106 -0
  289. package/src/filters/Composed.ts +85 -0
  290. package/src/filters/Contrast.ts +94 -0
  291. package/src/filters/Convolute.ts +341 -0
  292. package/src/filters/FilterBackend.ts +32 -0
  293. package/src/filters/Gamma.ts +127 -0
  294. package/src/filters/Grayscale.ts +137 -0
  295. package/src/filters/HueRotation.ts +66 -0
  296. package/src/filters/Invert.ts +117 -0
  297. package/src/filters/Noise.ts +109 -0
  298. package/src/filters/Pixelate.ts +114 -0
  299. package/src/filters/RemoveColor.ts +148 -0
  300. package/src/filters/Resize.ts +540 -0
  301. package/src/filters/Saturation.ts +100 -0
  302. package/src/filters/Vibrance.ts +103 -0
  303. package/src/filters/WebGLFilterBackend.ts +430 -0
  304. package/src/filters/WebGLProbe.ts +62 -0
  305. package/src/filters/typedefs.ts +65 -0
  306. package/src/gradient/Gradient.ts +401 -0
  307. package/src/gradient/constants.ts +12 -0
  308. package/src/gradient/parser/index.ts +3 -0
  309. package/src/gradient/parser/misc.ts +13 -0
  310. package/src/gradient/parser/parseColorStops.ts +55 -0
  311. package/src/gradient/parser/parseCoords.ts +73 -0
  312. package/src/gradient/typedefs.ts +104 -0
  313. package/src/mixins/{eraser_brush.mixin.js → eraser_brush.mixin.ts} +350 -239
  314. package/src/mixins/stateful.mixin.ts +104 -0
  315. package/src/parkinglot/canvas_animation.mixin.ts +121 -0
  316. package/src/parkinglot/straighten.ts +58 -0
  317. package/src/parser/applyViewboxTransform.ts +162 -0
  318. package/src/parser/attributes.ts +25 -0
  319. package/src/parser/constants.ts +118 -0
  320. package/src/parser/doesSomeParentMatch.ts +19 -0
  321. package/src/parser/elementById.ts +23 -0
  322. package/src/parser/elementMatchesRule.ts +19 -0
  323. package/src/parser/elements_parser.ts +191 -0
  324. package/src/parser/getCSSRules.ts +62 -0
  325. package/src/parser/getGlobalStylesForElement.ts +19 -0
  326. package/src/parser/getGradientDefs.ts +32 -0
  327. package/src/parser/getMultipleNodes.ts +15 -0
  328. package/src/parser/getSvgRegex.ts +5 -0
  329. package/src/parser/hasAncestorWithNodeName.ts +14 -0
  330. package/src/parser/loadSVGFromString.ts +26 -0
  331. package/src/parser/loadSVGFromURL.ts +40 -0
  332. package/src/parser/normalizeAttr.ts +10 -0
  333. package/src/parser/normalizeValue.ts +63 -0
  334. package/src/parser/parseAttributes.ts +90 -0
  335. package/src/parser/parseElements.ts +28 -0
  336. package/src/parser/parseFontDeclaration.ts +44 -0
  337. package/src/parser/parsePointsAttribute.ts +36 -0
  338. package/src/parser/parseSVGDocument.ts +106 -0
  339. package/src/parser/parseStyleAttribute.ts +27 -0
  340. package/src/parser/parseStyleObject.ts +15 -0
  341. package/src/parser/parseStyleString.ts +16 -0
  342. package/src/parser/parseTransformAttribute.ts +155 -0
  343. package/src/parser/parseUseDirectives.ts +79 -0
  344. package/src/parser/percent.ts +27 -0
  345. package/src/parser/recursivelyParseGradientsXlink.ts +42 -0
  346. package/src/parser/rotateMatrix.ts +21 -0
  347. package/src/parser/scaleMatrix.ts +9 -0
  348. package/src/parser/selectorMatches.ts +25 -0
  349. package/src/parser/setStrokeFillOpacity.ts +40 -0
  350. package/src/parser/skewMatrix.ts +6 -0
  351. package/src/parser/translateMatrix.ts +8 -0
  352. package/src/shapes/ActiveSelection.ts +157 -0
  353. package/src/shapes/Circle.ts +205 -0
  354. package/src/shapes/Ellipse.ts +154 -0
  355. package/src/shapes/Group.ts +1053 -0
  356. package/src/shapes/IText/DraggableTextDelegate.ts +394 -0
  357. package/src/shapes/IText/IText.ts +666 -0
  358. package/src/shapes/IText/ITextBehavior.ts +1055 -0
  359. package/src/shapes/IText/ITextClickBehavior.ts +321 -0
  360. package/src/shapes/IText/ITextKeyBehavior.ts +683 -0
  361. package/src/shapes/IText/constants.ts +47 -0
  362. package/src/shapes/Image.ts +789 -0
  363. package/src/shapes/Line.ts +329 -0
  364. package/src/shapes/Object/AnimatableObject.ts +106 -0
  365. package/src/shapes/Object/FabricObject.ts +19 -0
  366. package/src/shapes/Object/FabricObjectSVGExportMixin.ts +277 -0
  367. package/src/shapes/Object/InteractiveObject.ts +645 -0
  368. package/src/shapes/Object/Object.ts +1896 -0
  369. package/src/shapes/Object/ObjectGeometry.ts +830 -0
  370. package/src/shapes/Object/ObjectOrigin.ts +354 -0
  371. package/src/shapes/Object/StackedObject.ts +191 -0
  372. package/src/shapes/Object/defaultValues.ts +112 -0
  373. package/src/shapes/Path.ts +395 -0
  374. package/src/shapes/Polygon.ts +19 -0
  375. package/src/shapes/Polyline.ts +333 -0
  376. package/src/shapes/Rect.ts +199 -0
  377. package/src/shapes/Text/StyledText.ts +319 -0
  378. package/src/shapes/Text/Text.ts +1948 -0
  379. package/src/shapes/Text/TextSVGExportMixin.ts +288 -0
  380. package/src/shapes/Textbox.ts +471 -0
  381. package/src/shapes/Triangle.ts +45 -0
  382. package/src/typedefs.ts +119 -0
  383. package/src/util/animation/AnimationBase.ts +166 -0
  384. package/src/util/animation/AnimationFrameProvider.ts +28 -0
  385. package/src/util/animation/AnimationRegistry.ts +58 -0
  386. package/src/util/animation/ArrayAnimation.ts +27 -0
  387. package/src/util/animation/ColorAnimation.ts +74 -0
  388. package/src/util/animation/ValueAnimation.ts +29 -0
  389. package/src/util/animation/animate.ts +74 -0
  390. package/src/util/animation/easing.ts +327 -0
  391. package/src/util/animation/types.ts +136 -0
  392. package/src/util/applyMixins.ts +22 -0
  393. package/src/util/class_registry.ts +54 -0
  394. package/src/util/dom_event.ts +28 -0
  395. package/src/util/dom_misc.ts +138 -0
  396. package/src/util/dom_request.ts +64 -0
  397. package/src/util/dom_style.ts +20 -0
  398. package/src/util/fireEvent.ts +15 -0
  399. package/src/util/internals/cloneDeep.ts +2 -0
  400. package/src/util/internals/getRandomInt.ts +8 -0
  401. package/src/util/internals/ifNaN.ts +9 -0
  402. package/src/util/internals/index.ts +3 -0
  403. package/src/util/internals/removeFromArray.ts +14 -0
  404. package/src/util/internals/uid.ts +3 -0
  405. package/src/util/lang_class.ts +90 -0
  406. package/src/util/lang_string.ts +79 -0
  407. package/src/util/misc/boundingBoxFromPoints.ts +37 -0
  408. package/src/util/misc/capValue.ts +2 -0
  409. package/src/util/misc/cos.ts +24 -0
  410. package/src/util/misc/dom.ts +50 -0
  411. package/src/util/misc/findScaleTo.ts +44 -0
  412. package/src/util/misc/groupSVGElements.ts +15 -0
  413. package/src/util/misc/isTransparent.ts +51 -0
  414. package/src/util/misc/matrix.ts +207 -0
  415. package/src/util/misc/mergeClipPaths.ts +40 -0
  416. package/src/util/misc/objectEnlive.ts +189 -0
  417. package/src/util/misc/objectTransforms.ts +129 -0
  418. package/src/util/misc/pick.ts +17 -0
  419. package/src/util/misc/planeChange.ts +136 -0
  420. package/src/util/misc/projectStroke/StrokeLineCapProjections.ts +112 -0
  421. package/src/util/misc/projectStroke/StrokeLineJoinProjections.ts +231 -0
  422. package/src/util/misc/projectStroke/StrokeProjectionsBase.ts +75 -0
  423. package/src/util/misc/projectStroke/index.ts +53 -0
  424. package/src/util/misc/projectStroke/types.ts +24 -0
  425. package/src/util/misc/radiansDegreesConversion.ts +18 -0
  426. package/src/util/misc/resolveOrigin.ts +22 -0
  427. package/src/util/misc/rotatePoint.ts +15 -0
  428. package/src/util/misc/sin.ts +26 -0
  429. package/src/util/misc/svgParsing.ts +181 -0
  430. package/src/util/misc/textStyles.ts +133 -0
  431. package/src/util/misc/toFixed.ts +8 -0
  432. package/src/util/misc/vectors.ts +82 -0
  433. package/src/util/path.ts +941 -0
  434. package/src/util/transform_matrix_removal.ts +60 -0
  435. package/src/util/types.ts +78 -0
  436. package/tsconfig.json +106 -0
  437. package/HEADER.js +0 -203
  438. package/build.js +0 -287
  439. package/dist/fabric.js +0 -31187
  440. package/dist/fabric.min.js +0 -1
  441. package/old-travis-reference.yml +0 -97
  442. package/src/brushes/circle_brush.class.js +0 -144
  443. package/src/brushes/pattern_brush.class.js +0 -61
  444. package/src/brushes/pencil_brush.class.js +0 -310
  445. package/src/brushes/spray_brush.class.js +0 -219
  446. package/src/canvas.class.js +0 -1312
  447. package/src/color.class.js +0 -636
  448. package/src/control.class.js +0 -339
  449. package/src/controls.actions.js +0 -740
  450. package/src/controls.render.js +0 -99
  451. package/src/elements_parser.js +0 -152
  452. package/src/filters/2d_backend.class.js +0 -65
  453. package/src/filters/blendcolor_filter.class.js +0 -251
  454. package/src/filters/blendimage_filter.class.js +0 -247
  455. package/src/filters/blur_filter.class.js +0 -217
  456. package/src/filters/brightness_filter.class.js +0 -113
  457. package/src/filters/colormatrix_filter.class.js +0 -159
  458. package/src/filters/composed_filter.class.js +0 -72
  459. package/src/filters/contrast_filter.class.js +0 -113
  460. package/src/filters/convolute_filter.class.js +0 -352
  461. package/src/filters/filter_boilerplate.js +0 -111
  462. package/src/filters/filter_generator.js +0 -85
  463. package/src/filters/gamma_filter.class.js +0 -136
  464. package/src/filters/grayscale_filter.class.js +0 -154
  465. package/src/filters/hue_rotation.class.js +0 -107
  466. package/src/filters/invert_filter.class.js +0 -111
  467. package/src/filters/noise_filter.class.js +0 -134
  468. package/src/filters/pixelate_filter.class.js +0 -137
  469. package/src/filters/removecolor_filter.class.js +0 -173
  470. package/src/filters/resize_filter.class.js +0 -490
  471. package/src/filters/saturate_filter.class.js +0 -119
  472. package/src/filters/vibrance_filter.class.js +0 -122
  473. package/src/filters/webgl_backend.class.js +0 -396
  474. package/src/globalFabric.js +0 -4
  475. package/src/gradient.class.js +0 -490
  476. package/src/intersection.class.js +0 -172
  477. package/src/log.js +0 -11
  478. package/src/mixins/animation.mixin.js +0 -231
  479. package/src/mixins/canvas_dataurl_exporter.mixin.js +0 -97
  480. package/src/mixins/canvas_events.mixin.js +0 -974
  481. package/src/mixins/canvas_gestures.mixin.js +0 -149
  482. package/src/mixins/canvas_grouping.mixin.js +0 -177
  483. package/src/mixins/canvas_serialization.mixin.js +0 -228
  484. package/src/mixins/collection.mixin.js +0 -170
  485. package/src/mixins/default_controls.js +0 -114
  486. package/src/mixins/itext.svg_export.js +0 -241
  487. package/src/mixins/itext_behavior.mixin.js +0 -940
  488. package/src/mixins/itext_click_behavior.mixin.js +0 -278
  489. package/src/mixins/itext_key_behavior.mixin.js +0 -694
  490. package/src/mixins/object.svg_export.js +0 -258
  491. package/src/mixins/object_geometry.mixin.js +0 -683
  492. package/src/mixins/object_interactivity.mixin.js +0 -314
  493. package/src/mixins/object_origin.mixin.js +0 -255
  494. package/src/mixins/object_stacking.mixin.js +0 -80
  495. package/src/mixins/object_straightening.mixin.js +0 -80
  496. package/src/mixins/observable.mixin.js +0 -141
  497. package/src/mixins/shared_methods.mixin.js +0 -94
  498. package/src/mixins/stateful.mixin.js +0 -107
  499. package/src/mixins/text_style.mixin.js +0 -324
  500. package/src/parser.js +0 -1090
  501. package/src/pattern.class.js +0 -189
  502. package/src/point.class.js +0 -337
  503. package/src/shadow.class.js +0 -195
  504. package/src/shapes/active_selection.class.js +0 -155
  505. package/src/shapes/circle.class.js +0 -210
  506. package/src/shapes/ellipse.class.js +0 -181
  507. package/src/shapes/group.class.js +0 -593
  508. package/src/shapes/image.class.js +0 -764
  509. package/src/shapes/itext.class.js +0 -526
  510. package/src/shapes/line.class.js +0 -324
  511. package/src/shapes/object.class.js +0 -2008
  512. package/src/shapes/path.class.js +0 -384
  513. package/src/shapes/polygon.class.js +0 -81
  514. package/src/shapes/polyline.class.js +0 -268
  515. package/src/shapes/rect.class.js +0 -187
  516. package/src/shapes/text.class.js +0 -1696
  517. package/src/shapes/textbox.class.js +0 -461
  518. package/src/shapes/triangle.class.js +0 -93
  519. package/src/static_canvas.class.js +0 -1881
  520. package/src/util/anim_ease.js +0 -398
  521. package/src/util/animate.js +0 -254
  522. package/src/util/animate_color.js +0 -74
  523. package/src/util/dom_event.js +0 -50
  524. package/src/util/dom_misc.js +0 -300
  525. package/src/util/dom_request.js +0 -54
  526. package/src/util/dom_style.js +0 -70
  527. package/src/util/lang_array.js +0 -94
  528. package/src/util/lang_class.js +0 -115
  529. package/src/util/lang_object.js +0 -75
  530. package/src/util/lang_string.js +0 -110
  531. package/src/util/misc.js +0 -1330
  532. package/src/util/named_accessors.mixin.js +0 -428
  533. package/src/util/path.js +0 -829
@@ -0,0 +1,157 @@
1
+ import { ControlRenderingStyleOverride } from '../controls/controls.render';
2
+ import { TClassProperties } from '../typedefs';
3
+ import { classRegistry } from '../util/class_registry';
4
+ import { Group } from './Group';
5
+ import type { FabricObject } from './Object/FabricObject';
6
+
7
+ export class ActiveSelection extends Group {
8
+ declare _objects: FabricObject[];
9
+
10
+ constructor(
11
+ objects?: FabricObject[],
12
+ options?: any,
13
+ objectsRelativeToGroup?: boolean
14
+ ) {
15
+ super(objects, options, objectsRelativeToGroup);
16
+ this.setCoords();
17
+ }
18
+
19
+ /**
20
+ * @private
21
+ */
22
+ _shouldSetNestedCoords() {
23
+ return true;
24
+ }
25
+
26
+ /**
27
+ * @private
28
+ * @param {FabricObject} object
29
+ * @param {boolean} [removeParentTransform] true if object is in canvas coordinate plane
30
+ * @returns {boolean} true if object entered group
31
+ */
32
+ enterGroup(object: FabricObject, removeParentTransform?: boolean) {
33
+ if (object.group) {
34
+ // save ref to group for later in order to return to it
35
+ const parent = object.group;
36
+ parent._exitGroup(object);
37
+ object.__owningGroup = parent;
38
+ }
39
+ this._enterGroup(object, removeParentTransform);
40
+ return true;
41
+ }
42
+
43
+ /**
44
+ * we want objects to retain their canvas ref when exiting instance
45
+ * @private
46
+ * @param {FabricObject} object
47
+ * @param {boolean} [removeParentTransform] true if object should exit group without applying group's transform to it
48
+ */
49
+ exitGroup(object: FabricObject, removeParentTransform?: boolean) {
50
+ this._exitGroup(object, removeParentTransform);
51
+ const parent = object.__owningGroup;
52
+ if (parent) {
53
+ // return to owning group
54
+ parent.enterGroup(object);
55
+ delete object.__owningGroup;
56
+ }
57
+ }
58
+
59
+ /**
60
+ * @private
61
+ * @param {'added'|'removed'} type
62
+ * @param {FabricObject[]} targets
63
+ */
64
+ _onAfterObjectsChange(type: 'added' | 'removed', targets: FabricObject[]) {
65
+ super._onAfterObjectsChange(type, targets);
66
+ const groups: Group[] = [];
67
+ targets.forEach((object) => {
68
+ object.group &&
69
+ !groups.includes(object.group) &&
70
+ groups.push(object.group);
71
+ });
72
+ if (type === 'removed') {
73
+ // invalidate groups' layout and mark as dirty
74
+ groups.forEach((group) => {
75
+ group._onAfterObjectsChange('added', targets);
76
+ });
77
+ } else {
78
+ // mark groups as dirty
79
+ groups.forEach((group) => {
80
+ group._set('dirty', true);
81
+ });
82
+ }
83
+ }
84
+
85
+ /**
86
+ * If returns true, deselection is cancelled.
87
+ * @since 2.0.0
88
+ * @return {Boolean} [cancel]
89
+ */
90
+ onDeselect() {
91
+ this.removeAll();
92
+ return false;
93
+ }
94
+
95
+ /**
96
+ * Returns string representation of a group
97
+ * @return {String}
98
+ */
99
+ toString() {
100
+ return `#<ActiveSelection: (${this.complexity()})>`;
101
+ }
102
+
103
+ /**
104
+ * Decide if the object should cache or not. Create its own cache level
105
+ * objectCaching is a global flag, wins over everything
106
+ * needsItsOwnCache should be used when the object drawing method requires
107
+ * a cache step. None of the fabric classes requires it.
108
+ * Generally you do not cache objects in groups because the group outside is cached.
109
+ * @return {Boolean}
110
+ */
111
+ shouldCache() {
112
+ return false;
113
+ }
114
+
115
+ /**
116
+ * Check if this group or its parent group are caching, recursively up
117
+ * @return {Boolean}
118
+ */
119
+ isOnACache() {
120
+ return false;
121
+ }
122
+
123
+ /**
124
+ * Renders controls and borders for the object
125
+ * @param {CanvasRenderingContext2D} ctx Context to render on
126
+ * @param {Object} [styleOverride] properties to override the object style
127
+ * @param {Object} [childrenOverride] properties to override the children overrides
128
+ */
129
+ _renderControls(
130
+ ctx: CanvasRenderingContext2D,
131
+ styleOverride?: ControlRenderingStyleOverride,
132
+ childrenOverride?: ControlRenderingStyleOverride
133
+ ) {
134
+ ctx.save();
135
+ ctx.globalAlpha = this.isMoving ? this.borderOpacityWhenMoving : 1;
136
+ super._renderControls(ctx, styleOverride);
137
+ const options = {
138
+ hasControls: false,
139
+ ...childrenOverride,
140
+ forActiveSelection: true,
141
+ };
142
+ for (let i = 0; i < this._objects.length; i++) {
143
+ this._objects[i]._renderControls(ctx, options);
144
+ }
145
+ ctx.restore();
146
+ }
147
+ }
148
+
149
+ export const activeSelectionDefaultValues: Partial<
150
+ TClassProperties<ActiveSelection>
151
+ > = {
152
+ type: 'activeSelection',
153
+ };
154
+
155
+ Object.assign(ActiveSelection.prototype, activeSelectionDefaultValues);
156
+
157
+ classRegistry.setClass(ActiveSelection);
@@ -0,0 +1,205 @@
1
+ import { SHARED_ATTRIBUTES } from '../parser/attributes';
2
+ import { parseAttributes } from '../parser/parseAttributes';
3
+ import { cos } from '../util/misc/cos';
4
+ import { degreesToRadians } from '../util/misc/radiansDegreesConversion';
5
+ import { sin } from '../util/misc/sin';
6
+ import { classRegistry } from '../util/class_registry';
7
+ import { FabricObject, cacheProperties } from './Object/FabricObject';
8
+ import { TClassProperties } from '../typedefs';
9
+
10
+ export class Circle extends FabricObject {
11
+ /**
12
+ * Radius of this circle
13
+ * @type Number
14
+ * @default 0
15
+ */
16
+ declare radius: number;
17
+
18
+ /**
19
+ * degrees of start of the circle.
20
+ * probably will change to degrees in next major version
21
+ * @type Number 0 - 359
22
+ * @default 0
23
+ */
24
+ declare startAngle: number;
25
+
26
+ /**
27
+ * End angle of the circle
28
+ * probably will change to degrees in next major version
29
+ * @type Number 1 - 360
30
+ * @default 360
31
+ */
32
+ declare endAngle: number;
33
+
34
+ /**
35
+ * @private
36
+ * @param {String} key
37
+ * @param {*} value
38
+ */
39
+ _set(key: string, value: any) {
40
+ super._set(key, value);
41
+
42
+ if (key === 'radius') {
43
+ this.setRadius(value);
44
+ }
45
+
46
+ return this;
47
+ }
48
+
49
+ /**
50
+ * @private
51
+ * @param {CanvasRenderingContext2D} ctx context to render on
52
+ */
53
+ _render(ctx: CanvasRenderingContext2D) {
54
+ ctx.beginPath();
55
+ ctx.arc(
56
+ 0,
57
+ 0,
58
+ this.radius,
59
+ degreesToRadians(this.startAngle),
60
+ degreesToRadians(this.endAngle),
61
+ false
62
+ );
63
+ this._renderPaintInOrder(ctx);
64
+ }
65
+
66
+ /**
67
+ * Returns horizontal radius of an object (according to how an object is scaled)
68
+ * @return {Number}
69
+ */
70
+ getRadiusX(): number {
71
+ return this.get('radius') * this.get('scaleX');
72
+ }
73
+
74
+ /**
75
+ * Returns vertical radius of an object (according to how an object is scaled)
76
+ * @return {Number}
77
+ */
78
+ getRadiusY(): number {
79
+ return this.get('radius') * this.get('scaleY');
80
+ }
81
+
82
+ /**
83
+ * Sets radius of an object (and updates width accordingly)
84
+ */
85
+ setRadius(value: number) {
86
+ this.radius = value;
87
+ this.set({ width: value * 2, height: value * 2 });
88
+ }
89
+
90
+ /**
91
+ * Returns object representation of an instance
92
+ * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output
93
+ * @return {Object} object representation of an instance
94
+ */
95
+ toObject(propertiesToInclude: string[] = []): object {
96
+ return super.toObject([
97
+ 'radius',
98
+ 'startAngle',
99
+ 'endAngle',
100
+ ...propertiesToInclude,
101
+ ]);
102
+ }
103
+
104
+ /* _TO_SVG_START_ */
105
+
106
+ /**
107
+ * Returns svg representation of an instance
108
+ * @return {Array} an array of strings with the specific svg representation
109
+ * of the instance
110
+ */
111
+ _toSVG(): (string | number)[] {
112
+ const angle = (this.endAngle - this.startAngle) % 360;
113
+
114
+ if (angle === 0) {
115
+ return [
116
+ '<circle ',
117
+ 'COMMON_PARTS',
118
+ 'cx="0" cy="0" ',
119
+ 'r="',
120
+ this.radius,
121
+ '" />\n',
122
+ ];
123
+ } else {
124
+ const { radius } = this;
125
+ const start = degreesToRadians(this.startAngle),
126
+ end = degreesToRadians(this.endAngle),
127
+ startX = cos(start) * radius,
128
+ startY = sin(start) * radius,
129
+ endX = cos(end) * radius,
130
+ endY = sin(end) * radius,
131
+ largeFlag = angle > 180 ? '1' : '0';
132
+ return [
133
+ `<path d="M ${startX} ${startY}`,
134
+ ` A ${radius} ${radius}`,
135
+ ' 0 ',
136
+ `${largeFlag} 1`,
137
+ ` ${endX} ${endY}`,
138
+ '" ',
139
+ 'COMMON_PARTS',
140
+ ' />\n',
141
+ ];
142
+ }
143
+ }
144
+ /* _TO_SVG_END_ */
145
+
146
+ /* _FROM_SVG_START_ */
147
+ /**
148
+ * List of attribute names to account for when parsing SVG element (used by {@link Circle.fromElement})
149
+ * @static
150
+ * @memberOf Circle
151
+ * @see: http://www.w3.org/TR/SVG/shapes.html#CircleElement
152
+ */
153
+ static ATTRIBUTE_NAMES = ['cx', 'cy', 'r', ...SHARED_ATTRIBUTES];
154
+
155
+ /**
156
+ * Returns {@link Circle} instance from an SVG element
157
+ * @static
158
+ * @memberOf Circle
159
+ * @param {SVGElement} element Element to parse
160
+ * @param {Function} [callback] Options callback invoked after parsing is finished
161
+ * @param {Object} [options] Partial Circle object to default missing properties on the element.
162
+ * @throws {Error} If value of `r` attribute is missing or invalid
163
+ */
164
+ static fromElement(element: SVGElement, callback: (circle: Circle) => any) {
165
+ const {
166
+ left = 0,
167
+ top = 0,
168
+ radius,
169
+ ...otherParsedAttributes
170
+ } = parseAttributes(element, this.ATTRIBUTE_NAMES);
171
+
172
+ if (!radius || radius < 0) {
173
+ throw new Error(
174
+ 'value of `r` attribute is required and can not be negative'
175
+ );
176
+ }
177
+
178
+ // this probably requires to be fixed for default origins not being top/left.
179
+ callback(
180
+ new this({
181
+ ...otherParsedAttributes,
182
+ radius,
183
+ left: left - radius,
184
+ top: top - radius,
185
+ })
186
+ );
187
+ }
188
+
189
+ /* _FROM_SVG_END_ */
190
+ }
191
+
192
+ export const circleDefaultValues: Partial<TClassProperties<Circle>> = {
193
+ type: 'circle',
194
+ radius: 0,
195
+ startAngle: 0,
196
+ endAngle: 360,
197
+ };
198
+
199
+ Object.assign(Circle.prototype, {
200
+ ...circleDefaultValues,
201
+ cacheProperties: [...cacheProperties, 'radius', 'startAngle', 'endAngle'],
202
+ });
203
+
204
+ classRegistry.setClass(Circle);
205
+ classRegistry.setSVGClass(Circle);
@@ -0,0 +1,154 @@
1
+ import { twoMathPi } from '../constants';
2
+ import { SHARED_ATTRIBUTES } from '../parser/attributes';
3
+ import { parseAttributes } from '../parser/parseAttributes';
4
+ import { TClassProperties } from '../typedefs';
5
+ import { classRegistry } from '../util/class_registry';
6
+ import { FabricObject, cacheProperties } from './Object/FabricObject';
7
+
8
+ export class Ellipse extends FabricObject {
9
+ /**
10
+ * Horizontal radius
11
+ * @type Number
12
+ * @default
13
+ */
14
+ declare rx: number;
15
+
16
+ /**
17
+ * Vertical radius
18
+ * @type Number
19
+ * @default
20
+ */
21
+ declare ry: number;
22
+
23
+ /**
24
+ * Constructor
25
+ * @param {Object} [options] Options object
26
+ * @return {Ellipse} thisArg
27
+ */
28
+ constructor(options: Record<string, unknown>) {
29
+ super(options);
30
+ }
31
+
32
+ /**
33
+ * @private
34
+ * @param {String} key
35
+ * @param {*} value
36
+ * @return {Ellipse} thisArg
37
+ */
38
+ _set(key: string, value: any) {
39
+ super._set(key, value);
40
+ switch (key) {
41
+ case 'rx':
42
+ this.rx = value;
43
+ this.set('width', value * 2);
44
+ break;
45
+
46
+ case 'ry':
47
+ this.ry = value;
48
+ this.set('height', value * 2);
49
+ break;
50
+ }
51
+ return this;
52
+ }
53
+
54
+ /**
55
+ * Returns horizontal radius of an object (according to how an object is scaled)
56
+ * @return {Number}
57
+ */
58
+ getRx() {
59
+ return this.get('rx') * this.get('scaleX');
60
+ }
61
+
62
+ /**
63
+ * Returns Vertical radius of an object (according to how an object is scaled)
64
+ * @return {Number}
65
+ */
66
+ getRy() {
67
+ return this.get('ry') * this.get('scaleY');
68
+ }
69
+
70
+ /**
71
+ * Returns object representation of an instance
72
+ * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output
73
+ * @return {Object} object representation of an instance
74
+ */
75
+ toObject(propertiesToInclude: string[] = []) {
76
+ return super.toObject(['rx', 'ry', ...propertiesToInclude]);
77
+ }
78
+
79
+ /**
80
+ * Returns svg representation of an instance
81
+ * @return {Array} an array of strings with the specific svg representation
82
+ * of the instance
83
+ */
84
+ _toSVG() {
85
+ return [
86
+ '<ellipse ',
87
+ 'COMMON_PARTS',
88
+ 'cx="0" cy="0" ',
89
+ 'rx="',
90
+ this.rx,
91
+ '" ry="',
92
+ this.ry,
93
+ '" />\n',
94
+ ];
95
+ }
96
+
97
+ /**
98
+ * @private
99
+ * @param {CanvasRenderingContext2D} ctx context to render on
100
+ */
101
+ _render(ctx: CanvasRenderingContext2D) {
102
+ ctx.beginPath();
103
+ ctx.save();
104
+ ctx.transform(1, 0, 0, this.ry / this.rx, 0, 0);
105
+ ctx.arc(0, 0, this.rx, 0, twoMathPi, false);
106
+ ctx.restore();
107
+ this._renderPaintInOrder(ctx);
108
+ }
109
+
110
+ /* _FROM_SVG_START_ */
111
+
112
+ /**
113
+ * List of attribute names to account for when parsing SVG element (used by {@link Ellipse.fromElement})
114
+ * @static
115
+ * @memberOf Ellipse
116
+ * @see http://www.w3.org/TR/SVG/shapes.html#EllipseElement
117
+ */
118
+ static ATTRIBUTE_NAMES = [...SHARED_ATTRIBUTES, 'cx', 'cy', 'rx', 'ry'];
119
+
120
+ /**
121
+ * Returns {@link Ellipse} instance from an SVG element
122
+ * @static
123
+ * @memberOf Ellipse
124
+ * @param {SVGElement} element Element to parse
125
+ * @param {Function} [callback] Options callback invoked after parsing is finished
126
+ * @return {Ellipse}
127
+ */
128
+ static fromElement(
129
+ element: SVGElement,
130
+ callback: (ellipse: Ellipse) => void
131
+ ) {
132
+ const parsedAttributes = parseAttributes(element, this.ATTRIBUTE_NAMES);
133
+
134
+ parsedAttributes.left = (parsedAttributes.left || 0) - parsedAttributes.rx;
135
+ parsedAttributes.top = (parsedAttributes.top || 0) - parsedAttributes.ry;
136
+ callback(new this(parsedAttributes));
137
+ }
138
+
139
+ /* _FROM_SVG_END_ */
140
+ }
141
+
142
+ export const ellipseDefaultValues: Partial<TClassProperties<Ellipse>> = {
143
+ type: 'ellipse',
144
+ rx: 0,
145
+ ry: 0,
146
+ };
147
+
148
+ Object.assign(Ellipse.prototype, {
149
+ ...ellipseDefaultValues,
150
+ cacheProperties: [...cacheProperties, 'rx', 'ry'],
151
+ });
152
+
153
+ classRegistry.setClass(Ellipse);
154
+ classRegistry.setSVGClass(Ellipse);