fabric 5.3.0 → 6.0.0-beta3

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