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,333 @@
1
+ import { config } from '../config';
2
+ import { SHARED_ATTRIBUTES } from '../parser/attributes';
3
+ import { parseAttributes } from '../parser/parseAttributes';
4
+ import { parsePointsAttribute } from '../parser/parsePointsAttribute';
5
+ import { IPoint, Point } from '../Point';
6
+ import { TClassProperties } from '../typedefs';
7
+ import { classRegistry } from '../util/class_registry';
8
+ import { makeBoundingBoxFromPoints } from '../util/misc/boundingBoxFromPoints';
9
+ import { projectStrokeOnPoints } from '../util/misc/projectStroke';
10
+ import { degreesToRadians } from '../util/misc/radiansDegreesConversion';
11
+ import { toFixed } from '../util/misc/toFixed';
12
+ import { FabricObject, cacheProperties } from './Object/FabricObject';
13
+
14
+ export class Polyline extends FabricObject {
15
+ /**
16
+ * Points array
17
+ * @type Array
18
+ * @default
19
+ */
20
+ declare points: IPoint[];
21
+
22
+ /**
23
+ * WARNING: Feature in progress
24
+ * Calculate the exact bounding box taking in account strokeWidth on acute angles
25
+ * this will be turned to true by default on fabric 6.0
26
+ * maybe will be left in as an optimization since calculations may be slow
27
+ * @deprecated
28
+ * @type Boolean
29
+ * @default false
30
+ */
31
+ declare exactBoundingBox: boolean;
32
+
33
+ private declare initialized: true | undefined;
34
+
35
+ /**
36
+ * A list of properties that if changed trigger a recalculation of dimensions
37
+ * @todo check if you really need to recalculate for all cases
38
+ */
39
+ declare strokeBBoxAffectingProperties: (keyof this)[];
40
+
41
+ declare fromSVG: boolean;
42
+
43
+ declare pathOffset: Point;
44
+
45
+ declare strokeOffset: Point;
46
+
47
+ /**
48
+ * Constructor
49
+ * @param {Array} points Array of points (where each point is an object with x and y)
50
+ * @param {Object} [options] Options object
51
+ * @return {Polyline} thisArg
52
+ * @example
53
+ * var poly = new Polyline([
54
+ * { x: 10, y: 10 },
55
+ * { x: 50, y: 30 },
56
+ * { x: 40, y: 70 },
57
+ * { x: 60, y: 50 },
58
+ * { x: 100, y: 150 },
59
+ * { x: 40, y: 100 }
60
+ * ], {
61
+ * stroke: 'red',
62
+ * left: 100,
63
+ * top: 100
64
+ * });
65
+ */
66
+ constructor(points: IPoint[] = [], { left, top, ...options }: any = {}) {
67
+ super({ points, ...options });
68
+ this.initialized = true;
69
+ this.setBoundingBox(true);
70
+ typeof left === 'number' && this.set('left', left);
71
+ typeof top === 'number' && this.set('top', top);
72
+ }
73
+
74
+ protected isOpen() {
75
+ return true;
76
+ }
77
+
78
+ private _projectStrokeOnPoints() {
79
+ return projectStrokeOnPoints(this.points, this, this.isOpen());
80
+ }
81
+
82
+ /**
83
+ * Calculate the polygon bounding box
84
+ * @private
85
+ */
86
+ _calcDimensions() {
87
+ const points = this.exactBoundingBox
88
+ ? this._projectStrokeOnPoints().map(
89
+ (projection) => projection.projectedPoint
90
+ )
91
+ : this.points;
92
+ if (points.length === 0) {
93
+ return {
94
+ left: 0,
95
+ top: 0,
96
+ width: 0,
97
+ height: 0,
98
+ pathOffset: new Point(),
99
+ strokeOffset: new Point(),
100
+ };
101
+ }
102
+ const bbox = makeBoundingBoxFromPoints(points);
103
+ const bboxNoStroke = makeBoundingBoxFromPoints(this.points);
104
+ const offsetX = bbox.left + bbox.width / 2,
105
+ offsetY = bbox.top + bbox.height / 2;
106
+ const pathOffsetX =
107
+ offsetX - offsetY * Math.tan(degreesToRadians(this.skewX));
108
+ const pathOffsetY =
109
+ offsetY - pathOffsetX * Math.tan(degreesToRadians(this.skewY));
110
+ // TODO: remove next line
111
+ const legacyCorrection =
112
+ !this.fromSVG && !this.exactBoundingBox ? this.strokeWidth / 2 : 0;
113
+ return {
114
+ ...bbox,
115
+ left: bbox.left - legacyCorrection,
116
+ top: bbox.top - legacyCorrection,
117
+ pathOffset: new Point(pathOffsetX, pathOffsetY),
118
+ strokeOffset: new Point(bboxNoStroke.left, bboxNoStroke.top).subtract(
119
+ new Point(bbox.left, bbox.top)
120
+ ),
121
+ };
122
+ }
123
+
124
+ setDimensions() {
125
+ this.setBoundingBox();
126
+ }
127
+
128
+ setBoundingBox(adjustPosition?: boolean) {
129
+ const { left, top, width, height, pathOffset, strokeOffset } =
130
+ this._calcDimensions();
131
+ this.set({ width, height, pathOffset, strokeOffset });
132
+ adjustPosition &&
133
+ this.setPositionByOrigin(new Point(left, top), 'left', 'top');
134
+ }
135
+
136
+ /**
137
+ * @override stroke is taken in account in size
138
+ */
139
+ _getNonTransformedDimensions() {
140
+ return this.exactBoundingBox
141
+ ? new Point(this.width, this.height)
142
+ : super._getNonTransformedDimensions();
143
+ }
144
+
145
+ /**
146
+ * @override stroke and skewing are taken into account when projecting stroke on points,
147
+ * therefore we don't want the default calculation to account for skewing as well
148
+ *
149
+ * @private
150
+ */
151
+ _getTransformedDimensions(options?: any) {
152
+ return this.exactBoundingBox
153
+ ? super._getTransformedDimensions({
154
+ ...(options || {}),
155
+ // disable stroke bbox calculations
156
+ strokeWidth: 0,
157
+ // disable skewing bbox calculations
158
+ skewX: 0,
159
+ skewY: 0,
160
+ })
161
+ : super._getTransformedDimensions(options);
162
+ }
163
+
164
+ /**
165
+ * Recalculates dimensions when changing skew and scale
166
+ * @private
167
+ */
168
+ _set(key: string, value: any) {
169
+ const changed = this.initialized && this[key as keyof this] !== value;
170
+ const output = super._set(key, value);
171
+ if (
172
+ changed &&
173
+ (((key === 'scaleX' || key === 'scaleY') &&
174
+ this.strokeUniform &&
175
+ this.strokeBBoxAffectingProperties.includes('strokeUniform') &&
176
+ this.strokeLineJoin !== 'round') ||
177
+ this.strokeBBoxAffectingProperties.includes(key as keyof this))
178
+ ) {
179
+ this.setDimensions();
180
+ }
181
+ return output;
182
+ }
183
+
184
+ /**
185
+ * Returns object representation of an instance
186
+ * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output
187
+ * @return {Object} Object representation of an instance
188
+ */
189
+ toObject(propertiesToInclude?: string[]): object {
190
+ return {
191
+ ...super.toObject(propertiesToInclude),
192
+ points: this.points.concat(),
193
+ };
194
+ }
195
+
196
+ /**
197
+ * Returns svg representation of an instance
198
+ * @return {Array} an array of strings with the specific svg representation
199
+ * of the instance
200
+ */
201
+ _toSVG() {
202
+ const points = [],
203
+ diffX = this.pathOffset.x,
204
+ diffY = this.pathOffset.y,
205
+ NUM_FRACTION_DIGITS = config.NUM_FRACTION_DIGITS;
206
+
207
+ for (let i = 0, len = this.points.length; i < len; i++) {
208
+ points.push(
209
+ toFixed(this.points[i].x - diffX, NUM_FRACTION_DIGITS),
210
+ ',',
211
+ toFixed(this.points[i].y - diffY, NUM_FRACTION_DIGITS),
212
+ ' '
213
+ );
214
+ }
215
+ return [
216
+ `<${this.type} `,
217
+ 'COMMON_PARTS',
218
+ `points="${points.join('')}" />\n`,
219
+ ];
220
+ }
221
+
222
+ /**
223
+ * @private
224
+ * @param {CanvasRenderingContext2D} ctx Context to render on
225
+ */
226
+ _render(ctx: CanvasRenderingContext2D) {
227
+ const len = this.points.length,
228
+ x = this.pathOffset.x,
229
+ y = this.pathOffset.y;
230
+
231
+ if (!len || isNaN(this.points[len - 1].y)) {
232
+ // do not draw if no points or odd points
233
+ // NaN comes from parseFloat of a empty string in parser
234
+ return;
235
+ }
236
+ ctx.beginPath();
237
+ ctx.moveTo(this.points[0].x - x, this.points[0].y - y);
238
+ for (let i = 0; i < len; i++) {
239
+ const point = this.points[i];
240
+ ctx.lineTo(point.x - x, point.y - y);
241
+ }
242
+ !this.isOpen() && ctx.closePath();
243
+ this._renderPaintInOrder(ctx);
244
+ }
245
+
246
+ /**
247
+ * Returns complexity of an instance
248
+ * @return {Number} complexity of this instance
249
+ */
250
+ complexity(): number {
251
+ return this.points.length;
252
+ }
253
+
254
+ /* _FROM_SVG_START_ */
255
+
256
+ /**
257
+ * List of attribute names to account for when parsing SVG element (used by {@link Polyline.fromElement})
258
+ * @static
259
+ * @memberOf Polyline
260
+ * @see: http://www.w3.org/TR/SVG/shapes.html#PolylineElement
261
+ */
262
+ static ATTRIBUTE_NAMES = [...SHARED_ATTRIBUTES];
263
+
264
+ /**
265
+ * Returns Polyline instance from an SVG element
266
+ * @static
267
+ * @memberOf Polyline
268
+ * @param {SVGElement} element Element to parser
269
+ * @param {Function} callback callback function invoked after parsing
270
+ * @param {Object} [options] Options object
271
+ */
272
+ static fromElement(
273
+ element: SVGElement,
274
+ callback: (poly: Polyline | null) => any,
275
+ options?: any
276
+ ) {
277
+ if (!element) {
278
+ return callback(null);
279
+ }
280
+ const points = parsePointsAttribute(element.getAttribute('points')),
281
+ // we omit left and top to instruct the constructor to position the object using the bbox
282
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
283
+ { left, top, ...parsedAttributes } = parseAttributes(
284
+ element,
285
+ this.ATTRIBUTE_NAMES
286
+ );
287
+ callback(
288
+ new this(points || [], {
289
+ ...parsedAttributes,
290
+ ...options,
291
+ fromSVG: true,
292
+ })
293
+ );
294
+ }
295
+
296
+ /* _FROM_SVG_END_ */
297
+
298
+ /**
299
+ * Returns Polyline instance from an object representation
300
+ * @static
301
+ * @memberOf Polyline
302
+ * @param {Object} object Object to create an instance from
303
+ * @returns {Promise<Polyline>}
304
+ */
305
+ static fromObject(object: Record<string, unknown>) {
306
+ return this._fromObject(object, {
307
+ extraParam: 'points',
308
+ });
309
+ }
310
+ }
311
+
312
+ export const polylineDefaultValues: Partial<TClassProperties<Polyline>> = {
313
+ type: 'polyline',
314
+ exactBoundingBox: false,
315
+ };
316
+
317
+ Object.assign(Polyline.prototype, {
318
+ ...polylineDefaultValues,
319
+ cacheProperties: [...cacheProperties, 'points'],
320
+ strokeBBoxAffectingProperties: [
321
+ 'skewX',
322
+ 'skewY',
323
+ 'strokeLineCap',
324
+ 'strokeLineJoin',
325
+ 'strokeMiterLimit',
326
+ 'strokeWidth',
327
+ 'strokeUniform',
328
+ 'points',
329
+ ],
330
+ });
331
+
332
+ classRegistry.setClass(Polyline);
333
+ classRegistry.setSVGClass(Polyline);
@@ -0,0 +1,199 @@
1
+ import { kRect } 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 Rect extends FabricObject {
9
+ /**
10
+ * Horizontal border radius
11
+ * @type Number
12
+ * @default
13
+ */
14
+ declare rx: number;
15
+
16
+ /**
17
+ * Vertical border radius
18
+ * @type Number
19
+ * @default
20
+ */
21
+ declare ry: number;
22
+
23
+ /**
24
+ * Constructor
25
+ * @param {Object} [options] Options object
26
+ * @return {Object} thisArg
27
+ */
28
+ constructor(options: Record<string, unknown>) {
29
+ super(options);
30
+ this._initRxRy();
31
+ }
32
+
33
+ /**
34
+ * Initializes rx/ry attributes
35
+ * @private
36
+ */
37
+ _initRxRy() {
38
+ const { rx, ry } = this;
39
+ if (rx && !ry) {
40
+ this.ry = rx;
41
+ } else if (ry && !rx) {
42
+ this.rx = ry;
43
+ }
44
+ }
45
+
46
+ /**
47
+ * @private
48
+ * @param {CanvasRenderingContext2D} ctx Context to render on
49
+ */
50
+ _render(ctx: CanvasRenderingContext2D) {
51
+ const { width: w, height: h } = this;
52
+ const x = -w / 2;
53
+ const y = -h / 2;
54
+ const rx = this.rx ? Math.min(this.rx, w / 2) : 0;
55
+ const ry = this.ry ? Math.min(this.ry, h / 2) : 0;
56
+ const isRounded = rx !== 0 || ry !== 0;
57
+
58
+ ctx.beginPath();
59
+
60
+ ctx.moveTo(x + rx, y);
61
+
62
+ ctx.lineTo(x + w - rx, y);
63
+ isRounded &&
64
+ ctx.bezierCurveTo(
65
+ x + w - kRect * rx,
66
+ y,
67
+ x + w,
68
+ y + kRect * ry,
69
+ x + w,
70
+ y + ry
71
+ );
72
+
73
+ ctx.lineTo(x + w, y + h - ry);
74
+ isRounded &&
75
+ ctx.bezierCurveTo(
76
+ x + w,
77
+ y + h - kRect * ry,
78
+ x + w - kRect * rx,
79
+ y + h,
80
+ x + w - rx,
81
+ y + h
82
+ );
83
+
84
+ ctx.lineTo(x + rx, y + h);
85
+ isRounded &&
86
+ ctx.bezierCurveTo(
87
+ x + kRect * rx,
88
+ y + h,
89
+ x,
90
+ y + h - kRect * ry,
91
+ x,
92
+ y + h - ry
93
+ );
94
+
95
+ ctx.lineTo(x, y + ry);
96
+ isRounded &&
97
+ ctx.bezierCurveTo(x, y + kRect * ry, x + kRect * rx, y, x + rx, y);
98
+
99
+ ctx.closePath();
100
+
101
+ this._renderPaintInOrder(ctx);
102
+ }
103
+
104
+ /**
105
+ * Returns object representation of an instance
106
+ * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output
107
+ * @return {Object} object representation of an instance
108
+ */
109
+ toObject(propertiesToInclude: string[] = []) {
110
+ return super.toObject(['rx', 'ry', ...propertiesToInclude]);
111
+ }
112
+
113
+ /**
114
+ * Returns svg representation of an instance
115
+ * @return {Array} an array of strings with the specific svg representation
116
+ * of the instance
117
+ */
118
+ _toSVG() {
119
+ const { width, height, rx, ry } = this;
120
+ return [
121
+ '<rect ',
122
+ 'COMMON_PARTS',
123
+ `x="${-width / 2}" y="${
124
+ -height / 2
125
+ }" rx="${rx}" ry="${ry}" width="${width}" height="${height}" />\n`,
126
+ ];
127
+ }
128
+
129
+ /**
130
+ * List of attribute names to account for when parsing SVG element (used by `Rect.fromElement`)
131
+ * @static
132
+ * @memberOf Rect
133
+ * @see: http://www.w3.org/TR/SVG/shapes.html#RectElement
134
+ */
135
+ static ATTRIBUTE_NAMES = [
136
+ ...SHARED_ATTRIBUTES,
137
+ 'x',
138
+ 'y',
139
+ 'rx',
140
+ 'ry',
141
+ 'width',
142
+ 'height',
143
+ ];
144
+
145
+ /* _FROM_SVG_START_ */
146
+
147
+ /**
148
+ * Returns {@link Rect} instance from an SVG element
149
+ * @static
150
+ * @memberOf Rect
151
+ * @param {SVGElement} element Element to parse
152
+ * @param {Function} callback callback function invoked after parsing
153
+ * @param {Object} [options] Options object
154
+ */
155
+ static fromElement(
156
+ element: SVGElement,
157
+ callback: (rect: Rect | null) => void,
158
+ options = {}
159
+ ) {
160
+ if (!element) {
161
+ return callback(null);
162
+ }
163
+ const {
164
+ left = 0,
165
+ top = 0,
166
+ width = 0,
167
+ height = 0,
168
+ visible = true,
169
+ ...restOfparsedAttributes
170
+ } = parseAttributes(element, this.ATTRIBUTE_NAMES);
171
+
172
+ const rect = new this({
173
+ ...options,
174
+ ...restOfparsedAttributes,
175
+ left,
176
+ top,
177
+ width,
178
+ height,
179
+ visible: Boolean(visible && width && height),
180
+ });
181
+ callback(rect);
182
+ }
183
+
184
+ /* _FROM_SVG_END_ */
185
+ }
186
+
187
+ export const rectDefaultValues: Partial<TClassProperties<Rect>> = {
188
+ type: 'rect',
189
+ rx: 0,
190
+ ry: 0,
191
+ };
192
+
193
+ Object.assign(Rect.prototype, {
194
+ ...rectDefaultValues,
195
+ cacheProperties: [...cacheProperties, 'rx', 'ry'],
196
+ });
197
+
198
+ classRegistry.setClass(Rect);
199
+ classRegistry.setSVGClass(Rect);