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