fabric 5.3.0 → 6.0.0-beta10

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 (634) 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 +51 -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 +615 -189
  13. package/CONTRIBUTING.md +233 -59
  14. package/README.md +200 -235
  15. package/babel-jest.config.js +6 -0
  16. package/bower.json +1 -3
  17. package/dist/fabric.d.ts +54 -0
  18. package/dist/index.d.ts +2 -0
  19. package/dist/index.js +28452 -0
  20. package/dist/index.js.map +1 -0
  21. package/dist/index.min.js +1 -0
  22. package/dist/index.mjs +28385 -0
  23. package/dist/index.mjs.map +1 -0
  24. package/dist/index.node.cjs +28538 -0
  25. package/dist/index.node.cjs.map +1 -0
  26. package/dist/index.node.d.ts +20 -0
  27. package/dist/index.node.mjs +28477 -0
  28. package/dist/index.node.mjs.map +1 -0
  29. package/dist/src/ClassRegistry.d.ts +13 -0
  30. package/dist/src/Collection.d.ts +136 -0
  31. package/dist/src/CommonMethods.d.ts +32 -0
  32. package/dist/src/EventTypeDefs.d.ts +227 -0
  33. package/dist/src/Intersection.d.ts +112 -0
  34. package/dist/src/Observable.d.ts +60 -0
  35. package/dist/src/Pattern/Pattern.d.ts +99 -0
  36. package/dist/src/Pattern/index.d.ts +3 -0
  37. package/dist/src/Pattern/types.d.ts +9 -0
  38. package/dist/src/Point.d.ts +232 -0
  39. package/dist/src/Shadow.d.ts +96 -0
  40. package/dist/src/brushes/BaseBrush.d.ts +101 -0
  41. package/dist/src/brushes/CircleBrush.d.ts +44 -0
  42. package/dist/src/brushes/CircleBrush.test.d.ts +2 -0
  43. package/dist/src/brushes/PatternBrush.d.ts +23 -0
  44. package/dist/src/brushes/PencilBrush.d.ts +92 -0
  45. package/dist/src/brushes/SprayBrush.d.ts +74 -0
  46. package/dist/src/brushes/typedefs.d.ts +18 -0
  47. package/dist/src/cache.d.ts +47 -0
  48. package/dist/src/canvas/Canvas.d.ts +364 -0
  49. package/dist/src/canvas/DOMManagers/CanvasDOMManager.d.ts +29 -0
  50. package/dist/src/canvas/DOMManagers/StaticCanvasDOMManager.d.ts +29 -0
  51. package/dist/src/canvas/DOMManagers/util.d.ts +24 -0
  52. package/dist/src/canvas/DOMManagers/util.spec.d.ts +2 -0
  53. package/dist/src/canvas/SelectableCanvas.d.ts +723 -0
  54. package/dist/src/canvas/StaticCanvas.d.ts +747 -0
  55. package/dist/src/canvas/TextEditingManager.d.ts +21 -0
  56. package/dist/src/canvas/canvas_gestures.mixin.d.ts +2 -0
  57. package/dist/src/color/Color.d.ts +152 -0
  58. package/dist/src/color/color_map.d.ts +155 -0
  59. package/dist/src/color/constants.d.ts +104 -0
  60. package/dist/src/color/typedefs.d.ts +16 -0
  61. package/dist/src/color/util.d.ts +27 -0
  62. package/dist/src/config.d.ts +115 -0
  63. package/dist/src/constants.d.ts +21 -0
  64. package/dist/src/controls/Control.d.ts +229 -0
  65. package/dist/src/controls/changeWidth.d.ts +13 -0
  66. package/dist/src/controls/commonControls.d.ts +28 -0
  67. package/dist/src/controls/controlRendering.d.ts +29 -0
  68. package/dist/src/controls/drag.d.ts +12 -0
  69. package/dist/src/controls/fireEvent.d.ts +3 -0
  70. package/dist/src/controls/index.d.ts +13 -0
  71. package/dist/src/controls/polyControl.d.ts +5 -0
  72. package/dist/src/controls/rotate.d.ts +12 -0
  73. package/dist/src/controls/scale.d.ts +47 -0
  74. package/dist/src/controls/scaleSkew.d.ts +39 -0
  75. package/dist/src/controls/skew.d.ts +33 -0
  76. package/dist/src/controls/util.d.ts +41 -0
  77. package/dist/src/controls/wrapWithFireEvent.d.ts +8 -0
  78. package/dist/src/controls/wrapWithFixedAnchor.d.ts +9 -0
  79. package/dist/src/env/browser.d.ts +3 -0
  80. package/dist/src/env/index.d.ts +28 -0
  81. package/dist/src/env/node.d.ts +6 -0
  82. package/dist/src/env/types.d.ts +15 -0
  83. package/dist/src/filters/BaseFilter.d.ts +160 -0
  84. package/dist/src/filters/BlendColor.d.ts +81 -0
  85. package/dist/src/filters/BlendImage.d.ts +93 -0
  86. package/dist/src/filters/Blur.d.ts +52 -0
  87. package/dist/src/filters/Boilerplate.d.ts +48 -0
  88. package/dist/src/filters/Brightness.d.ts +48 -0
  89. package/dist/src/filters/Canvas2dFilterBackend.d.ts +27 -0
  90. package/dist/src/filters/ColorMatrix.d.ts +64 -0
  91. package/dist/src/filters/ColorMatrixFilters.d.ts +537 -0
  92. package/dist/src/filters/Composed.d.ts +46 -0
  93. package/dist/src/filters/Contrast.d.ts +46 -0
  94. package/dist/src/filters/Convolute.d.ts +83 -0
  95. package/dist/src/filters/FilterBackend.d.ts +15 -0
  96. package/dist/src/filters/GLProbes/GLProbe.d.ts +7 -0
  97. package/dist/src/filters/GLProbes/NodeGLProbe.d.ts +11 -0
  98. package/dist/src/filters/GLProbes/WebGLProbe.d.ts +20 -0
  99. package/dist/src/filters/Gamma.d.ts +55 -0
  100. package/dist/src/filters/Grayscale.d.ts +47 -0
  101. package/dist/src/filters/HueRotation.d.ts +25 -0
  102. package/dist/src/filters/Invert.d.ts +56 -0
  103. package/dist/src/filters/Noise.d.ts +55 -0
  104. package/dist/src/filters/Pixelate.d.ts +45 -0
  105. package/dist/src/filters/RemoveColor.d.ts +64 -0
  106. package/dist/src/filters/Resize.d.ts +137 -0
  107. package/dist/src/filters/Saturation.d.ts +49 -0
  108. package/dist/src/filters/Vibrance.d.ts +49 -0
  109. package/dist/src/filters/WebGLFilterBackend.d.ts +128 -0
  110. package/dist/src/filters/filters.d.ts +21 -0
  111. package/dist/src/filters/index.d.ts +7 -0
  112. package/dist/src/filters/shaders/baseFilter.d.ts +4 -0
  113. package/dist/src/filters/shaders/blendColor.d.ts +13 -0
  114. package/dist/src/filters/shaders/blendImage.d.ts +3 -0
  115. package/dist/src/filters/shaders/blur.d.ts +2 -0
  116. package/dist/src/filters/shaders/brightness.d.ts +2 -0
  117. package/dist/src/filters/shaders/colorMatrix.d.ts +2 -0
  118. package/dist/src/filters/shaders/constrast.d.ts +2 -0
  119. package/dist/src/filters/shaders/convolute.d.ts +11 -0
  120. package/dist/src/filters/shaders/gamma.d.ts +2 -0
  121. package/dist/src/filters/shaders/grayscale.d.ts +3 -0
  122. package/dist/src/filters/shaders/invert.d.ts +2 -0
  123. package/dist/src/filters/shaders/noise.d.ts +2 -0
  124. package/dist/src/filters/shaders/pixelate.d.ts +2 -0
  125. package/dist/src/filters/shaders/removeColor.d.ts +2 -0
  126. package/dist/src/filters/shaders/saturation.d.ts +2 -0
  127. package/dist/src/filters/shaders/vibrance.d.ts +2 -0
  128. package/dist/src/filters/typedefs.d.ts +48 -0
  129. package/dist/src/filters/utils.d.ts +3 -0
  130. package/dist/src/gradient/Gradient.d.ts +150 -0
  131. package/dist/src/gradient/constants.d.ts +15 -0
  132. package/dist/src/gradient/index.d.ts +3 -0
  133. package/dist/src/gradient/parser/index.d.ts +4 -0
  134. package/dist/src/gradient/parser/misc.d.ts +4 -0
  135. package/dist/src/gradient/parser/parseColorStops.d.ts +3 -0
  136. package/dist/src/gradient/parser/parseCoords.d.ts +17 -0
  137. package/dist/src/gradient/typedefs.d.ts +93 -0
  138. package/dist/src/mixins/eraser_brush.mixin.d.ts +2 -0
  139. package/dist/src/parkinglot/canvas_animation.mixin.d.ts +2 -0
  140. package/dist/src/parkinglot/straighten.d.ts +2 -0
  141. package/dist/src/parser/applyViewboxTransform.d.ts +5 -0
  142. package/dist/src/parser/attributes.d.ts +6 -0
  143. package/dist/src/parser/constants.d.ts +53 -0
  144. package/dist/src/parser/doesSomeParentMatch.d.ts +2 -0
  145. package/dist/src/parser/elementById.d.ts +6 -0
  146. package/dist/src/parser/elementMatchesRule.d.ts +5 -0
  147. package/dist/src/parser/elements_parser.d.ts +3 -0
  148. package/dist/src/parser/getCSSRules.d.ts +7 -0
  149. package/dist/src/parser/getGlobalStylesForElement.d.ts +5 -0
  150. package/dist/src/parser/getGradientDefs.d.ts +7 -0
  151. package/dist/src/parser/getMultipleNodes.d.ts +2 -0
  152. package/dist/src/parser/getSvgRegex.d.ts +2 -0
  153. package/dist/src/parser/hasAncestorWithNodeName.d.ts +2 -0
  154. package/dist/src/parser/index.d.ts +9 -0
  155. package/dist/src/parser/loadSVGFromString.d.ts +18 -0
  156. package/dist/src/parser/loadSVGFromURL.d.ts +19 -0
  157. package/dist/src/parser/normalizeAttr.d.ts +2 -0
  158. package/dist/src/parser/normalizeValue.d.ts +2 -0
  159. package/dist/src/parser/parseAttributes.d.ts +9 -0
  160. package/dist/src/parser/parseFontDeclaration.d.ts +10 -0
  161. package/dist/src/parser/parsePointsAttribute.d.ts +12 -0
  162. package/dist/src/parser/parseSVGDocument.d.ts +23 -0
  163. package/dist/src/parser/parseStyleAttribute.d.ts +9 -0
  164. package/dist/src/parser/parseStyleObject.d.ts +2 -0
  165. package/dist/src/parser/parseStyleString.d.ts +2 -0
  166. package/dist/src/parser/parseTransformAttribute.d.ts +11 -0
  167. package/dist/src/parser/parseUseDirectives.d.ts +2 -0
  168. package/dist/src/parser/percent.d.ts +9 -0
  169. package/dist/src/parser/recursivelyParseGradientsXlink.d.ts +2 -0
  170. package/dist/src/parser/selectorMatches.d.ts +2 -0
  171. package/dist/src/parser/setStrokeFillOpacity.d.ts +6 -0
  172. package/dist/src/parser/typedefs.d.ts +9 -0
  173. package/dist/src/shapes/ActiveSelection.d.ts +83 -0
  174. package/dist/src/shapes/Circle.d.ts +99 -0
  175. package/dist/src/shapes/Ellipse.d.ts +84 -0
  176. package/dist/src/shapes/Group.d.ts +407 -0
  177. package/dist/src/shapes/IText/DraggableTextDelegate.d.ts +78 -0
  178. package/dist/src/shapes/IText/IText.d.ts +336 -0
  179. package/dist/src/shapes/IText/ITextBehavior.d.ts +287 -0
  180. package/dist/src/shapes/IText/ITextClickBehavior.d.ts +73 -0
  181. package/dist/src/shapes/IText/ITextKeyBehavior.d.ts +195 -0
  182. package/dist/src/shapes/IText/constants.d.ts +13 -0
  183. package/dist/src/shapes/Image.d.ts +309 -0
  184. package/dist/src/shapes/Line.d.ts +121 -0
  185. package/dist/src/shapes/Object/AnimatableObject.d.ts +33 -0
  186. package/dist/src/shapes/Object/FabricObject.d.ts +11 -0
  187. package/dist/src/shapes/Object/FabricObjectSVGExportMixin.d.ts +74 -0
  188. package/dist/src/shapes/Object/InteractiveObject.d.ts +296 -0
  189. package/dist/src/shapes/Object/Object.d.ts +599 -0
  190. package/dist/src/shapes/Object/ObjectGeometry.d.ts +327 -0
  191. package/dist/src/shapes/Object/ObjectOrigin.d.ts +109 -0
  192. package/dist/src/shapes/Object/StackedObject.d.ts +72 -0
  193. package/dist/src/shapes/Object/defaultValues.d.ts +76 -0
  194. package/dist/src/shapes/Object/types/BaseProps.d.ts +84 -0
  195. package/dist/src/shapes/Object/types/BorderProps.d.ts +37 -0
  196. package/dist/src/shapes/Object/types/ControlProps.d.ts +62 -0
  197. package/dist/src/shapes/Object/types/FabricObjectProps.d.ts +96 -0
  198. package/dist/src/shapes/Object/types/FillStrokeProps.d.ts +80 -0
  199. package/dist/src/shapes/Object/types/LockInteractionProps.d.ts +51 -0
  200. package/dist/src/shapes/Object/types/ObjectProps.d.ts +42 -0
  201. package/dist/src/shapes/Object/types/SerializedObjectProps.d.ts +66 -0
  202. package/dist/src/shapes/Object/types/index.d.ts +6 -0
  203. package/dist/src/shapes/Path.d.ts +214 -0
  204. package/dist/src/shapes/Polygon.d.ts +10 -0
  205. package/dist/src/shapes/Polyline.d.ts +147 -0
  206. package/dist/src/shapes/Rect.d.ts +82 -0
  207. package/dist/src/shapes/Text/StyledText.d.ts +123 -0
  208. package/dist/src/shapes/Text/Text.d.ts +688 -0
  209. package/dist/src/shapes/Text/TextSVGExportMixin.d.ts +32 -0
  210. package/dist/src/shapes/Text/constants.d.ts +13 -0
  211. package/dist/src/shapes/Textbox.d.ts +204 -0
  212. package/dist/src/shapes/Triangle.d.ts +26 -0
  213. package/dist/src/typedefs.d.ts +96 -0
  214. package/dist/src/util/animation/AnimationBase.d.ts +54 -0
  215. package/dist/src/util/animation/AnimationFrameProvider.d.ts +3 -0
  216. package/dist/src/util/animation/AnimationRegistry.d.ts +29 -0
  217. package/dist/src/util/animation/ArrayAnimation.d.ts +10 -0
  218. package/dist/src/util/animation/ColorAnimation.d.ts +11 -0
  219. package/dist/src/util/animation/ValueAnimation.d.ts +10 -0
  220. package/dist/src/util/animation/animate.d.ts +37 -0
  221. package/dist/src/util/animation/easing.d.ts +130 -0
  222. package/dist/src/util/animation/index.d.ts +3 -0
  223. package/dist/src/util/animation/types.d.ts +87 -0
  224. package/dist/src/util/applyMixins.d.ts +8 -0
  225. package/dist/src/util/dom_event.d.ts +5 -0
  226. package/dist/src/util/dom_misc.d.ts +12 -0
  227. package/dist/src/util/dom_request.d.ts +14 -0
  228. package/dist/src/util/dom_style.d.ts +7 -0
  229. package/dist/src/util/index.d.ts +36 -0
  230. package/dist/src/util/internals/cleanupSvgAttribute.d.ts +2 -0
  231. package/dist/src/util/internals/cleanupSvgAttribute.test.d.ts +2 -0
  232. package/dist/src/util/internals/cloneDeep.d.ts +2 -0
  233. package/dist/src/util/internals/cloneDeep.test.d.ts +2 -0
  234. package/dist/src/util/internals/getRandomInt.d.ts +8 -0
  235. package/dist/src/util/internals/getRandomInt.test.d.ts +2 -0
  236. package/dist/src/util/internals/ifNaN.d.ts +8 -0
  237. package/dist/src/util/internals/index.d.ts +4 -0
  238. package/dist/src/util/internals/removeFromArray.d.ts +9 -0
  239. package/dist/src/util/internals/uid.d.ts +2 -0
  240. package/dist/src/util/lang_string.d.ts +22 -0
  241. package/dist/src/util/misc/boundingBoxFromPoints.d.ts +9 -0
  242. package/dist/src/util/misc/capValue.d.ts +2 -0
  243. package/dist/src/util/misc/cos.d.ts +10 -0
  244. package/dist/src/util/misc/dom.d.ts +28 -0
  245. package/dist/src/util/misc/findScaleTo.d.ts +20 -0
  246. package/dist/src/util/misc/groupSVGElements.d.ts +9 -0
  247. package/dist/src/util/misc/isTransparent.d.ts +11 -0
  248. package/dist/src/util/misc/matrix.d.ts +168 -0
  249. package/dist/src/util/misc/mergeClipPaths.d.ts +23 -0
  250. package/dist/src/util/misc/objectEnlive.d.ts +41 -0
  251. package/dist/src/util/misc/objectTransforms.d.ts +68 -0
  252. package/dist/src/util/misc/pick.d.ts +9 -0
  253. package/dist/src/util/misc/planeChange.d.ts +81 -0
  254. package/dist/src/util/misc/projectStroke/StrokeLineCapProjections.d.ts +52 -0
  255. package/dist/src/util/misc/projectStroke/StrokeLineJoinProjections.d.ts +82 -0
  256. package/dist/src/util/misc/projectStroke/StrokeProjectionsBase.d.ts +26 -0
  257. package/dist/src/util/misc/projectStroke/index.d.ts +12 -0
  258. package/dist/src/util/misc/projectStroke/types.d.ts +23 -0
  259. package/dist/src/util/misc/radiansDegreesConversion.d.ts +14 -0
  260. package/dist/src/util/misc/resolveOrigin.d.ts +9 -0
  261. package/dist/src/util/misc/rotatePoint.d.ts +12 -0
  262. package/dist/src/util/misc/sin.d.ts +10 -0
  263. package/dist/src/util/misc/svgParsing.d.ts +45 -0
  264. package/dist/src/util/misc/textStyles.d.ts +32 -0
  265. package/dist/src/util/misc/toFixed.d.ts +8 -0
  266. package/dist/src/util/misc/vectors.d.ts +58 -0
  267. package/dist/src/util/path/index.d.ts +96 -0
  268. package/dist/src/util/path/regex.d.ts +2 -0
  269. package/dist/src/util/path/typechecks.d.ts +24 -0
  270. package/dist/src/util/path/typedefs.d.ts +220 -0
  271. package/dist/src/util/transform_matrix_removal.d.ts +14 -0
  272. package/dist/src/util/typeAssertions.d.ts +19 -0
  273. package/e2e/site/index.html +25 -0
  274. package/e2e/utils/objects.ts +36 -0
  275. package/fabric.ts +72 -0
  276. package/index.node.ts +43 -0
  277. package/index.ts +1 -0
  278. package/jest.config.js +194 -0
  279. package/lib/aligning_guidelines.js +2 -2
  280. package/package.json +110 -40
  281. package/playwright.config.ts +64 -0
  282. package/publish.js +0 -26
  283. package/rollup.config.mjs +99 -0
  284. package/rollup.test.config.js +24 -0
  285. package/scripts/build.mjs +50 -0
  286. package/scripts/buildLock.mjs +115 -0
  287. package/scripts/buildReporter.mjs +15 -0
  288. package/scripts/buildStats.mjs +139 -0
  289. package/scripts/dirname.mjs +14 -0
  290. package/scripts/git.mjs +36 -0
  291. package/scripts/index.mjs +564 -0
  292. package/scripts/sandbox.mjs +149 -0
  293. package/src/ClassRegistry.ts +56 -0
  294. package/src/Collection.ts +346 -0
  295. package/src/CommonMethods.ts +63 -0
  296. package/src/EventTypeDefs.ts +298 -0
  297. package/src/Intersection.ts +302 -0
  298. package/src/Observable.ts +181 -0
  299. package/src/Pattern/Pattern.ts +207 -0
  300. package/src/Pattern/index.ts +2 -0
  301. package/src/Pattern/types.ts +17 -0
  302. package/src/Point.ts +388 -0
  303. package/src/Shadow.ts +214 -0
  304. package/src/brushes/{base_brush.class.js → BaseBrush.ts} +63 -42
  305. package/src/brushes/CircleBrush.test.ts +11 -0
  306. package/src/brushes/CircleBrush.ts +140 -0
  307. package/src/brushes/PatternBrush.ts +70 -0
  308. package/src/brushes/PencilBrush.ts +300 -0
  309. package/src/brushes/SprayBrush.ts +214 -0
  310. package/src/brushes/typedefs.ts +18 -0
  311. package/src/cache.ts +90 -0
  312. package/src/canvas/Canvas.ts +1598 -0
  313. package/src/canvas/DOMManagers/CanvasDOMManager.ts +124 -0
  314. package/src/canvas/DOMManagers/StaticCanvasDOMManager.ts +80 -0
  315. package/src/canvas/DOMManagers/util.spec.ts +26 -0
  316. package/src/canvas/DOMManagers/util.ts +98 -0
  317. package/src/canvas/SelectableCanvas.ts +1506 -0
  318. package/src/canvas/StaticCanvas.ts +1634 -0
  319. package/src/canvas/TextEditingManager.ts +70 -0
  320. package/src/canvas/canvas_gestures.mixin.ts +207 -0
  321. package/src/color/Color.ts +320 -0
  322. package/src/color/color_map.ts +154 -0
  323. package/src/color/constants.ts +107 -0
  324. package/src/color/typedefs.ts +18 -0
  325. package/src/color/util.ts +93 -0
  326. package/src/config.ts +159 -0
  327. package/src/constants.ts +29 -0
  328. package/src/controls/Control.ts +385 -0
  329. package/src/controls/changeWidth.ts +53 -0
  330. package/src/controls/commonControls.ts +105 -0
  331. package/src/controls/controlRendering.ts +138 -0
  332. package/src/controls/drag.ts +32 -0
  333. package/src/controls/fireEvent.ts +18 -0
  334. package/src/controls/index.ts +22 -0
  335. package/src/controls/polyControl.ts +135 -0
  336. package/src/controls/rotate.ts +87 -0
  337. package/src/controls/scale.ts +277 -0
  338. package/src/controls/scaleSkew.ts +92 -0
  339. package/src/controls/skew.ts +243 -0
  340. package/src/controls/util.ts +155 -0
  341. package/src/controls/wrapWithFireEvent.ts +25 -0
  342. package/src/controls/wrapWithFixedAnchor.ts +20 -0
  343. package/src/env/browser.ts +32 -0
  344. package/src/env/index.ts +38 -0
  345. package/src/env/node.ts +58 -0
  346. package/src/env/types.ts +15 -0
  347. package/src/filters/{base_filter.class.js → BaseFilter.ts} +203 -151
  348. package/src/filters/BlendColor.ts +219 -0
  349. package/src/filters/BlendImage.ts +230 -0
  350. package/src/filters/Blur.ts +181 -0
  351. package/src/filters/Boilerplate.ts +94 -0
  352. package/src/filters/Brightness.ts +85 -0
  353. package/src/filters/Canvas2dFilterBackend.ts +65 -0
  354. package/src/filters/ColorMatrix.ts +147 -0
  355. package/src/filters/ColorMatrixFilters.ts +79 -0
  356. package/src/filters/Composed.ts +78 -0
  357. package/src/filters/Contrast.ts +84 -0
  358. package/src/filters/Convolute.ts +186 -0
  359. package/src/filters/FilterBackend.ts +38 -0
  360. package/src/filters/GLProbes/GLProbe.ts +7 -0
  361. package/src/filters/GLProbes/NodeGLProbe.ts +15 -0
  362. package/src/filters/GLProbes/WebGLProbe.ts +47 -0
  363. package/src/filters/Gamma.ts +112 -0
  364. package/src/filters/Grayscale.ts +104 -0
  365. package/src/filters/HueRotation.ts +64 -0
  366. package/src/filters/Invert.ts +101 -0
  367. package/src/filters/Noise.ts +96 -0
  368. package/src/filters/Pixelate.ts +98 -0
  369. package/src/filters/RemoveColor.ts +137 -0
  370. package/src/filters/Resize.ts +540 -0
  371. package/src/filters/Saturation.ts +89 -0
  372. package/src/filters/Vibrance.ts +90 -0
  373. package/src/filters/WebGLFilterBackend.ts +456 -0
  374. package/src/filters/filters.ts +28 -0
  375. package/src/filters/index.ts +12 -0
  376. package/src/filters/shaders/baseFilter.ts +17 -0
  377. package/src/filters/shaders/blendColor.ts +33 -0
  378. package/src/filters/shaders/blendImage.ts +32 -0
  379. package/src/filters/shaders/blur.ts +24 -0
  380. package/src/filters/shaders/brightness.ts +11 -0
  381. package/src/filters/shaders/colorMatrix.ts +12 -0
  382. package/src/filters/shaders/constrast.ts +11 -0
  383. package/src/filters/shaders/convolute.ts +154 -0
  384. package/src/filters/shaders/gamma.ts +15 -0
  385. package/src/filters/shaders/grayscale.ts +36 -0
  386. package/src/filters/shaders/invert.ts +19 -0
  387. package/src/filters/shaders/noise.ts +16 -0
  388. package/src/filters/shaders/pixelate.ts +19 -0
  389. package/src/filters/shaders/removeColor.ts +13 -0
  390. package/src/filters/shaders/saturation.ts +15 -0
  391. package/src/filters/shaders/vibrance.ts +16 -0
  392. package/src/filters/typedefs.ts +59 -0
  393. package/src/filters/utils.ts +7 -0
  394. package/src/gradient/Gradient.ts +409 -0
  395. package/src/gradient/constants.ts +12 -0
  396. package/src/gradient/index.ts +2 -0
  397. package/src/gradient/parser/index.ts +3 -0
  398. package/src/gradient/parser/misc.ts +13 -0
  399. package/src/gradient/parser/parseColorStops.ts +56 -0
  400. package/src/gradient/parser/parseCoords.ts +73 -0
  401. package/src/gradient/typedefs.ts +104 -0
  402. package/src/mixins/{eraser_brush.mixin.js → eraser_brush.mixin.ts} +350 -239
  403. package/src/parkinglot/canvas_animation.mixin.ts +121 -0
  404. package/src/parkinglot/straighten.ts +58 -0
  405. package/src/parser/applyViewboxTransform.ts +158 -0
  406. package/src/parser/attributes.ts +25 -0
  407. package/src/parser/constants.ts +116 -0
  408. package/src/parser/doesSomeParentMatch.ts +18 -0
  409. package/src/parser/elementById.ts +21 -0
  410. package/src/parser/elementMatchesRule.ts +16 -0
  411. package/src/parser/elements_parser.ts +158 -0
  412. package/src/parser/getCSSRules.ts +61 -0
  413. package/src/parser/getGlobalStylesForElement.ts +19 -0
  414. package/src/parser/getGradientDefs.ts +31 -0
  415. package/src/parser/getMultipleNodes.ts +15 -0
  416. package/src/parser/getSvgRegex.ts +3 -0
  417. package/src/parser/hasAncestorWithNodeName.ts +14 -0
  418. package/src/parser/index.ts +8 -0
  419. package/src/parser/loadSVGFromString.ts +29 -0
  420. package/src/parser/loadSVGFromURL.ts +47 -0
  421. package/src/parser/normalizeAttr.ts +10 -0
  422. package/src/parser/normalizeValue.ts +64 -0
  423. package/src/parser/parseAttributes.ts +90 -0
  424. package/src/parser/parseFontDeclaration.ts +44 -0
  425. package/src/parser/parsePointsAttribute.ts +34 -0
  426. package/src/parser/parseSVGDocument.ts +118 -0
  427. package/src/parser/parseStyleAttribute.ts +27 -0
  428. package/src/parser/parseStyleObject.ts +15 -0
  429. package/src/parser/parseStyleString.ts +16 -0
  430. package/src/parser/parseTransformAttribute.ts +94 -0
  431. package/src/parser/parseUseDirectives.ts +78 -0
  432. package/src/parser/percent.ts +27 -0
  433. package/src/parser/recursivelyParseGradientsXlink.ts +42 -0
  434. package/src/parser/selectorMatches.ts +25 -0
  435. package/src/parser/setStrokeFillOpacity.ts +40 -0
  436. package/src/parser/typedefs.ts +13 -0
  437. package/src/shapes/ActiveSelection.ts +192 -0
  438. package/src/shapes/Circle.ts +236 -0
  439. package/src/shapes/Ellipse.ts +177 -0
  440. package/src/shapes/Group.ts +1103 -0
  441. package/src/shapes/IText/DraggableTextDelegate.ts +385 -0
  442. package/src/shapes/IText/IText.ts +696 -0
  443. package/src/shapes/IText/ITextBehavior.ts +1073 -0
  444. package/src/shapes/IText/ITextClickBehavior.ts +292 -0
  445. package/src/shapes/IText/ITextKeyBehavior.ts +675 -0
  446. package/src/shapes/IText/constants.ts +53 -0
  447. package/src/shapes/Image.ts +848 -0
  448. package/src/shapes/Line.ts +285 -0
  449. package/src/shapes/Object/AnimatableObject.ts +103 -0
  450. package/src/shapes/Object/FabricObject.ts +29 -0
  451. package/src/shapes/Object/FabricObjectSVGExportMixin.ts +278 -0
  452. package/src/shapes/Object/InteractiveObject.ts +669 -0
  453. package/src/shapes/Object/Object.ts +1589 -0
  454. package/src/shapes/Object/ObjectGeometry.ts +814 -0
  455. package/src/shapes/Object/ObjectOrigin.ts +277 -0
  456. package/src/shapes/Object/StackedObject.ts +206 -0
  457. package/src/shapes/Object/defaultValues.ts +110 -0
  458. package/src/shapes/Object/types/BaseProps.ts +96 -0
  459. package/src/shapes/Object/types/BorderProps.ts +40 -0
  460. package/src/shapes/Object/types/ControlProps.ts +69 -0
  461. package/src/shapes/Object/types/FabricObjectProps.ts +111 -0
  462. package/src/shapes/Object/types/FillStrokeProps.ts +90 -0
  463. package/src/shapes/Object/types/LockInteractionProps.ts +57 -0
  464. package/src/shapes/Object/types/ObjectProps.ts +49 -0
  465. package/src/shapes/Object/types/SerializedObjectProps.ts +73 -0
  466. package/src/shapes/Object/types/index.ts +8 -0
  467. package/src/shapes/Path.ts +434 -0
  468. package/src/shapes/Polygon.ts +22 -0
  469. package/src/shapes/Polyline.ts +364 -0
  470. package/src/shapes/Rect.ts +230 -0
  471. package/src/shapes/Text/StyledText.ts +323 -0
  472. package/src/shapes/Text/Text.ts +1891 -0
  473. package/src/shapes/Text/TextSVGExportMixin.ts +289 -0
  474. package/src/shapes/Text/constants.ts +111 -0
  475. package/src/shapes/Textbox.ts +526 -0
  476. package/src/shapes/Triangle.ts +62 -0
  477. package/src/typedefs.ts +121 -0
  478. package/src/util/animation/AnimationBase.ts +166 -0
  479. package/src/util/animation/AnimationFrameProvider.ts +9 -0
  480. package/src/util/animation/AnimationRegistry.ts +58 -0
  481. package/src/util/animation/ArrayAnimation.ts +27 -0
  482. package/src/util/animation/ColorAnimation.ts +74 -0
  483. package/src/util/animation/ValueAnimation.ts +29 -0
  484. package/src/util/animation/animate.ts +74 -0
  485. package/src/util/animation/easing.ts +327 -0
  486. package/src/util/animation/index.ts +2 -0
  487. package/src/util/animation/types.ts +136 -0
  488. package/src/util/applyMixins.ts +22 -0
  489. package/src/util/dom_event.ts +28 -0
  490. package/src/util/dom_misc.ts +44 -0
  491. package/src/util/dom_request.ts +64 -0
  492. package/src/util/dom_style.ts +20 -0
  493. package/src/util/index.ts +106 -0
  494. package/src/util/internals/cleanupSvgAttribute.test.ts +16 -0
  495. package/src/util/internals/cleanupSvgAttribute.ts +8 -0
  496. package/src/util/internals/cloneDeep.test.ts +16 -0
  497. package/src/util/internals/cloneDeep.ts +2 -0
  498. package/src/util/internals/getRandomInt.test.ts +33 -0
  499. package/src/util/internals/getRandomInt.ts +8 -0
  500. package/src/util/internals/ifNaN.ts +9 -0
  501. package/src/util/internals/index.ts +3 -0
  502. package/src/util/internals/removeFromArray.ts +14 -0
  503. package/src/util/internals/uid.ts +3 -0
  504. package/src/util/lang_string.ts +79 -0
  505. package/src/util/misc/boundingBoxFromPoints.ts +38 -0
  506. package/src/util/misc/capValue.ts +2 -0
  507. package/src/util/misc/cos.ts +24 -0
  508. package/src/util/misc/dom.ts +55 -0
  509. package/src/util/misc/findScaleTo.ts +29 -0
  510. package/src/util/misc/groupSVGElements.ts +15 -0
  511. package/src/util/misc/isTransparent.ts +28 -0
  512. package/src/util/misc/matrix.ts +313 -0
  513. package/src/util/misc/mergeClipPaths.ts +40 -0
  514. package/src/util/misc/objectEnlive.ts +174 -0
  515. package/src/util/misc/objectTransforms.ts +130 -0
  516. package/src/util/misc/pick.ts +29 -0
  517. package/src/util/misc/planeChange.ts +127 -0
  518. package/src/util/misc/projectStroke/StrokeLineCapProjections.ts +113 -0
  519. package/src/util/misc/projectStroke/StrokeLineJoinProjections.ts +227 -0
  520. package/src/util/misc/projectStroke/StrokeProjectionsBase.ts +76 -0
  521. package/src/util/misc/projectStroke/index.ts +55 -0
  522. package/src/util/misc/projectStroke/types.ts +24 -0
  523. package/src/util/misc/radiansDegreesConversion.ts +18 -0
  524. package/src/util/misc/resolveOrigin.ts +22 -0
  525. package/src/util/misc/rotatePoint.ts +15 -0
  526. package/src/util/misc/sin.ts +26 -0
  527. package/src/util/misc/svgParsing.ts +171 -0
  528. package/src/util/misc/textStyles.ts +132 -0
  529. package/src/util/misc/toFixed.ts +8 -0
  530. package/src/util/misc/vectors.ts +83 -0
  531. package/src/util/path/index.ts +1039 -0
  532. package/src/util/path/regex.ts +39 -0
  533. package/src/util/path/typechecks.ts +145 -0
  534. package/src/util/path/typedefs.ts +305 -0
  535. package/src/util/transform_matrix_removal.ts +61 -0
  536. package/src/util/typeAssertions.ts +78 -0
  537. package/tsconfig.json +106 -0
  538. package/HEADER.js +0 -203
  539. package/build.js +0 -287
  540. package/dist/fabric.js +0 -31187
  541. package/dist/fabric.min.js +0 -1
  542. package/old-travis-reference.yml +0 -97
  543. package/src/brushes/circle_brush.class.js +0 -144
  544. package/src/brushes/pattern_brush.class.js +0 -61
  545. package/src/brushes/pencil_brush.class.js +0 -310
  546. package/src/brushes/spray_brush.class.js +0 -219
  547. package/src/canvas.class.js +0 -1312
  548. package/src/color.class.js +0 -636
  549. package/src/control.class.js +0 -339
  550. package/src/controls.actions.js +0 -740
  551. package/src/controls.render.js +0 -99
  552. package/src/elements_parser.js +0 -152
  553. package/src/filters/2d_backend.class.js +0 -65
  554. package/src/filters/blendcolor_filter.class.js +0 -251
  555. package/src/filters/blendimage_filter.class.js +0 -247
  556. package/src/filters/blur_filter.class.js +0 -217
  557. package/src/filters/brightness_filter.class.js +0 -113
  558. package/src/filters/colormatrix_filter.class.js +0 -159
  559. package/src/filters/composed_filter.class.js +0 -72
  560. package/src/filters/contrast_filter.class.js +0 -113
  561. package/src/filters/convolute_filter.class.js +0 -352
  562. package/src/filters/filter_boilerplate.js +0 -111
  563. package/src/filters/filter_generator.js +0 -85
  564. package/src/filters/gamma_filter.class.js +0 -136
  565. package/src/filters/grayscale_filter.class.js +0 -154
  566. package/src/filters/hue_rotation.class.js +0 -107
  567. package/src/filters/invert_filter.class.js +0 -111
  568. package/src/filters/noise_filter.class.js +0 -134
  569. package/src/filters/pixelate_filter.class.js +0 -137
  570. package/src/filters/removecolor_filter.class.js +0 -173
  571. package/src/filters/resize_filter.class.js +0 -490
  572. package/src/filters/saturate_filter.class.js +0 -119
  573. package/src/filters/vibrance_filter.class.js +0 -122
  574. package/src/filters/webgl_backend.class.js +0 -396
  575. package/src/globalFabric.js +0 -4
  576. package/src/gradient.class.js +0 -490
  577. package/src/intersection.class.js +0 -172
  578. package/src/log.js +0 -11
  579. package/src/mixins/animation.mixin.js +0 -231
  580. package/src/mixins/canvas_dataurl_exporter.mixin.js +0 -97
  581. package/src/mixins/canvas_events.mixin.js +0 -974
  582. package/src/mixins/canvas_gestures.mixin.js +0 -149
  583. package/src/mixins/canvas_grouping.mixin.js +0 -177
  584. package/src/mixins/canvas_serialization.mixin.js +0 -228
  585. package/src/mixins/collection.mixin.js +0 -170
  586. package/src/mixins/default_controls.js +0 -114
  587. package/src/mixins/itext.svg_export.js +0 -241
  588. package/src/mixins/itext_behavior.mixin.js +0 -940
  589. package/src/mixins/itext_click_behavior.mixin.js +0 -278
  590. package/src/mixins/itext_key_behavior.mixin.js +0 -694
  591. package/src/mixins/object.svg_export.js +0 -258
  592. package/src/mixins/object_geometry.mixin.js +0 -683
  593. package/src/mixins/object_interactivity.mixin.js +0 -314
  594. package/src/mixins/object_origin.mixin.js +0 -255
  595. package/src/mixins/object_stacking.mixin.js +0 -80
  596. package/src/mixins/object_straightening.mixin.js +0 -80
  597. package/src/mixins/observable.mixin.js +0 -141
  598. package/src/mixins/shared_methods.mixin.js +0 -94
  599. package/src/mixins/stateful.mixin.js +0 -107
  600. package/src/mixins/text_style.mixin.js +0 -324
  601. package/src/parser.js +0 -1090
  602. package/src/pattern.class.js +0 -189
  603. package/src/point.class.js +0 -337
  604. package/src/shadow.class.js +0 -195
  605. package/src/shapes/active_selection.class.js +0 -155
  606. package/src/shapes/circle.class.js +0 -210
  607. package/src/shapes/ellipse.class.js +0 -181
  608. package/src/shapes/group.class.js +0 -593
  609. package/src/shapes/image.class.js +0 -764
  610. package/src/shapes/itext.class.js +0 -526
  611. package/src/shapes/line.class.js +0 -324
  612. package/src/shapes/object.class.js +0 -2008
  613. package/src/shapes/path.class.js +0 -384
  614. package/src/shapes/polygon.class.js +0 -81
  615. package/src/shapes/polyline.class.js +0 -268
  616. package/src/shapes/rect.class.js +0 -187
  617. package/src/shapes/text.class.js +0 -1696
  618. package/src/shapes/textbox.class.js +0 -461
  619. package/src/shapes/triangle.class.js +0 -93
  620. package/src/static_canvas.class.js +0 -1881
  621. package/src/util/anim_ease.js +0 -398
  622. package/src/util/animate.js +0 -254
  623. package/src/util/animate_color.js +0 -74
  624. package/src/util/dom_event.js +0 -50
  625. package/src/util/dom_misc.js +0 -300
  626. package/src/util/dom_request.js +0 -54
  627. package/src/util/dom_style.js +0 -70
  628. package/src/util/lang_array.js +0 -94
  629. package/src/util/lang_class.js +0 -115
  630. package/src/util/lang_object.js +0 -75
  631. package/src/util/lang_string.js +0 -110
  632. package/src/util/misc.js +0 -1330
  633. package/src/util/named_accessors.mixin.js +0 -428
  634. package/src/util/path.js +0 -829
@@ -0,0 +1,364 @@
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 type { XY } from '../Point';
6
+ import { Point } from '../Point';
7
+ import type { TClassProperties } from '../typedefs';
8
+ import { classRegistry } from '../ClassRegistry';
9
+ import { makeBoundingBoxFromPoints } from '../util/misc/boundingBoxFromPoints';
10
+ import { projectStrokeOnPoints } from '../util/misc/projectStroke';
11
+ import { degreesToRadians } from '../util/misc/radiansDegreesConversion';
12
+ import { toFixed } from '../util/misc/toFixed';
13
+ import { FabricObject, cacheProperties } from './Object/FabricObject';
14
+ import type {
15
+ FabricObjectProps,
16
+ SerializedObjectProps,
17
+ TProps,
18
+ } from './Object/types';
19
+ import type { ObjectEvents } from '../EventTypeDefs';
20
+ import { cloneDeep } from '../util/internals/cloneDeep';
21
+ import { CENTER, LEFT, TOP } from '../constants';
22
+
23
+ export const polylineDefaultValues: Partial<TClassProperties<Polyline>> = {
24
+ exactBoundingBox: false,
25
+ };
26
+
27
+ export interface SerializedPolylineProps extends SerializedObjectProps {
28
+ points: XY[];
29
+ }
30
+
31
+ export class Polyline<
32
+ Props extends TProps<FabricObjectProps> = Partial<FabricObjectProps>,
33
+ SProps extends SerializedPolylineProps = SerializedPolylineProps,
34
+ EventSpec extends ObjectEvents = ObjectEvents
35
+ > extends FabricObject<Props, SProps, EventSpec> {
36
+ /**
37
+ * Points array
38
+ * @type Array
39
+ * @default
40
+ */
41
+ declare points: XY[];
42
+
43
+ /**
44
+ * WARNING: Feature in progress
45
+ * Calculate the exact bounding box taking in account strokeWidth on acute angles
46
+ * this will be turned to true by default on fabric 6.0
47
+ * maybe will be left in as an optimization since calculations may be slow
48
+ * @deprecated
49
+ * @type Boolean
50
+ * @default false
51
+ */
52
+ declare exactBoundingBox: boolean;
53
+
54
+ private declare initialized: true | undefined;
55
+
56
+ static ownDefaults: Record<string, any> = polylineDefaultValues;
57
+
58
+ static type = 'Polyline';
59
+
60
+ static getDefaults() {
61
+ return {
62
+ ...super.getDefaults(),
63
+ ...Polyline.ownDefaults,
64
+ };
65
+ }
66
+ /**
67
+ * A list of properties that if changed trigger a recalculation of dimensions
68
+ * @todo check if you really need to recalculate for all cases
69
+ */
70
+ static layoutProperties: (keyof Polyline)[] = [
71
+ 'skewX',
72
+ 'skewY',
73
+ 'strokeLineCap',
74
+ 'strokeLineJoin',
75
+ 'strokeMiterLimit',
76
+ 'strokeWidth',
77
+ 'strokeUniform',
78
+ 'points',
79
+ ];
80
+
81
+ declare pathOffset: Point;
82
+
83
+ declare strokeOffset: Point;
84
+
85
+ static cacheProperties = [...cacheProperties, 'points'];
86
+
87
+ /**
88
+ * Constructor
89
+ * @param {Array} points Array of points (where each point is an object with x and y)
90
+ * @param {Object} [options] Options object
91
+ * @return {Polyline} thisArg
92
+ * @example
93
+ * var poly = new Polyline([
94
+ * { x: 10, y: 10 },
95
+ * { x: 50, y: 30 },
96
+ * { x: 40, y: 70 },
97
+ * { x: 60, y: 50 },
98
+ * { x: 100, y: 150 },
99
+ * { x: 40, y: 100 }
100
+ * ], {
101
+ * stroke: 'red',
102
+ * left: 100,
103
+ * top: 100
104
+ * });
105
+ */
106
+ constructor(points: XY[] = [], options: Props = {} as Props) {
107
+ super({ points, ...options });
108
+ const { left, top } = options;
109
+ this.initialized = true;
110
+ this.setBoundingBox(true);
111
+ typeof left === 'number' && this.set(LEFT, left);
112
+ typeof top === 'number' && this.set(TOP, top);
113
+ }
114
+
115
+ protected isOpen() {
116
+ return true;
117
+ }
118
+
119
+ private _projectStrokeOnPoints() {
120
+ return projectStrokeOnPoints(this.points, this, this.isOpen());
121
+ }
122
+
123
+ /**
124
+ * Calculate the polygon bounding box
125
+ * @private
126
+ */
127
+ _calcDimensions() {
128
+ const points = this.exactBoundingBox
129
+ ? this._projectStrokeOnPoints().map(
130
+ (projection) => projection.projectedPoint
131
+ )
132
+ : this.points;
133
+ if (points.length === 0) {
134
+ return {
135
+ left: 0,
136
+ top: 0,
137
+ width: 0,
138
+ height: 0,
139
+ pathOffset: new Point(),
140
+ strokeOffset: new Point(),
141
+ };
142
+ }
143
+ const bbox = makeBoundingBoxFromPoints(points);
144
+ const bboxNoStroke = makeBoundingBoxFromPoints(this.points);
145
+ const offsetX = bbox.left + bbox.width / 2,
146
+ offsetY = bbox.top + bbox.height / 2;
147
+ const pathOffsetX =
148
+ offsetX - offsetY * Math.tan(degreesToRadians(this.skewX));
149
+ const pathOffsetY =
150
+ offsetY - pathOffsetX * Math.tan(degreesToRadians(this.skewY));
151
+ return {
152
+ ...bbox,
153
+ pathOffset: new Point(pathOffsetX, pathOffsetY),
154
+ strokeOffset: new Point(bboxNoStroke.left, bboxNoStroke.top).subtract(
155
+ new Point(bbox.left, bbox.top)
156
+ ),
157
+ };
158
+ }
159
+
160
+ /**
161
+ * This function is an helper for svg import. it returns the center of the object in the svg
162
+ * untransformed coordinates, by look at the polyline/polygon points.
163
+ * @private
164
+ * @return {Point} center point from element coordinates
165
+ */
166
+ _findCenterFromElement(): Point {
167
+ const bbox = makeBoundingBoxFromPoints(this.points);
168
+ return new Point(bbox.left + bbox.width / 2, bbox.top + bbox.height / 2);
169
+ }
170
+
171
+ setDimensions() {
172
+ this.setBoundingBox();
173
+ }
174
+
175
+ setBoundingBox(adjustPosition?: boolean) {
176
+ const { left, top, width, height, pathOffset, strokeOffset } =
177
+ this._calcDimensions();
178
+ this.set({ width, height, pathOffset, strokeOffset });
179
+ adjustPosition &&
180
+ this.setPositionByOrigin(
181
+ new Point(left + width / 2, top + height / 2),
182
+ CENTER,
183
+ CENTER
184
+ );
185
+ }
186
+
187
+ /**
188
+ * @override stroke is taken in account in size
189
+ */
190
+ _getNonTransformedDimensions() {
191
+ return this.exactBoundingBox
192
+ ? new Point(this.width, this.height)
193
+ : super._getNonTransformedDimensions();
194
+ }
195
+
196
+ /**
197
+ * @override stroke and skewing are taken into account when projecting stroke on points,
198
+ * therefore we don't want the default calculation to account for skewing as well
199
+ *
200
+ * @private
201
+ */
202
+ _getTransformedDimensions(options?: any) {
203
+ return this.exactBoundingBox
204
+ ? super._getTransformedDimensions({
205
+ ...(options || {}),
206
+ // disable stroke bbox calculations
207
+ strokeWidth: 0,
208
+ // disable skewing bbox calculations
209
+ skewX: 0,
210
+ skewY: 0,
211
+ })
212
+ : super._getTransformedDimensions(options);
213
+ }
214
+
215
+ /**
216
+ * Recalculates dimensions when changing skew and scale
217
+ * @private
218
+ */
219
+ _set(key: string, value: any) {
220
+ const changed = this.initialized && this[key as keyof this] !== value;
221
+ const output = super._set(key, value);
222
+ if (
223
+ changed &&
224
+ (((key === 'scaleX' || key === 'scaleY') &&
225
+ this.strokeUniform &&
226
+ (this.constructor as typeof Polyline).layoutProperties.includes(
227
+ 'strokeUniform'
228
+ ) &&
229
+ this.strokeLineJoin !== 'round') ||
230
+ (this.constructor as typeof Polyline).layoutProperties.includes(
231
+ key as keyof Polyline
232
+ ))
233
+ ) {
234
+ this.setDimensions();
235
+ }
236
+ return output;
237
+ }
238
+
239
+ /**
240
+ * Returns object representation of an instance
241
+ * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output
242
+ * @return {Object} Object representation of an instance
243
+ */
244
+ toObject<
245
+ T extends Omit<Props & TClassProperties<this>, keyof SProps>,
246
+ K extends keyof T = never
247
+ >(propertiesToInclude: K[] = []): Pick<T, K> & SProps {
248
+ return {
249
+ ...super.toObject(propertiesToInclude),
250
+ points: cloneDeep(this.points),
251
+ };
252
+ }
253
+
254
+ /**
255
+ * Returns svg representation of an instance
256
+ * @return {Array} an array of strings with the specific svg representation
257
+ * of the instance
258
+ */
259
+ _toSVG() {
260
+ const points = [],
261
+ diffX = this.pathOffset.x,
262
+ diffY = this.pathOffset.y,
263
+ NUM_FRACTION_DIGITS = config.NUM_FRACTION_DIGITS;
264
+
265
+ for (let i = 0, len = this.points.length; i < len; i++) {
266
+ points.push(
267
+ toFixed(this.points[i].x - diffX, NUM_FRACTION_DIGITS),
268
+ ',',
269
+ toFixed(this.points[i].y - diffY, NUM_FRACTION_DIGITS),
270
+ ' '
271
+ );
272
+ }
273
+ return [
274
+ `<${
275
+ (this.constructor as typeof Polyline).type.toLowerCase() as
276
+ | 'polyline'
277
+ | 'polygon'
278
+ } `,
279
+ 'COMMON_PARTS',
280
+ `points="${points.join('')}" />\n`,
281
+ ];
282
+ }
283
+
284
+ /**
285
+ * @private
286
+ * @param {CanvasRenderingContext2D} ctx Context to render on
287
+ */
288
+ _render(ctx: CanvasRenderingContext2D) {
289
+ const len = this.points.length,
290
+ x = this.pathOffset.x,
291
+ y = this.pathOffset.y;
292
+
293
+ if (!len || isNaN(this.points[len - 1].y)) {
294
+ // do not draw if no points or odd points
295
+ // NaN comes from parseFloat of a empty string in parser
296
+ return;
297
+ }
298
+ ctx.beginPath();
299
+ ctx.moveTo(this.points[0].x - x, this.points[0].y - y);
300
+ for (let i = 0; i < len; i++) {
301
+ const point = this.points[i];
302
+ ctx.lineTo(point.x - x, point.y - y);
303
+ }
304
+ !this.isOpen() && ctx.closePath();
305
+ this._renderPaintInOrder(ctx);
306
+ }
307
+
308
+ /**
309
+ * Returns complexity of an instance
310
+ * @return {Number} complexity of this instance
311
+ */
312
+ complexity(): number {
313
+ return this.points.length;
314
+ }
315
+
316
+ /* _FROM_SVG_START_ */
317
+
318
+ /**
319
+ * List of attribute names to account for when parsing SVG element (used by {@link Polyline.fromElement})
320
+ * @static
321
+ * @memberOf Polyline
322
+ * @see: http://www.w3.org/TR/SVG/shapes.html#PolylineElement
323
+ */
324
+ static ATTRIBUTE_NAMES = [...SHARED_ATTRIBUTES];
325
+
326
+ /**
327
+ * Returns Polyline instance from an SVG element
328
+ * @static
329
+ * @memberOf Polyline
330
+ * @param {SVGElement} element Element to parser
331
+ * @param {Object} [options] Options object
332
+ */
333
+ static async fromElement(element: SVGElement, options?: any) {
334
+ const points = parsePointsAttribute(element.getAttribute('points')),
335
+ // we omit left and top to instruct the constructor to position the object using the bbox
336
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
337
+ { left, top, ...parsedAttributes } = parseAttributes(
338
+ element,
339
+ this.ATTRIBUTE_NAMES
340
+ );
341
+ return new this(points || [], {
342
+ ...parsedAttributes,
343
+ ...options,
344
+ });
345
+ }
346
+
347
+ /* _FROM_SVG_END_ */
348
+
349
+ /**
350
+ * Returns Polyline instance from an object representation
351
+ * @static
352
+ * @memberOf Polyline
353
+ * @param {Object} object Object to create an instance from
354
+ * @returns {Promise<Polyline>}
355
+ */
356
+ static fromObject<T extends TProps<SerializedPolylineProps>>(object: T) {
357
+ return this._fromObject<Polyline>(object, {
358
+ extraParam: 'points',
359
+ });
360
+ }
361
+ }
362
+
363
+ classRegistry.setClass(Polyline);
364
+ classRegistry.setSVGClass(Polyline);
@@ -0,0 +1,230 @@
1
+ import { kRect } from '../constants';
2
+ import { SHARED_ATTRIBUTES } from '../parser/attributes';
3
+ import { parseAttributes } from '../parser/parseAttributes';
4
+ import type { 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 type = 'Rect';
55
+
56
+ static cacheProperties = [...cacheProperties, ...RECT_PROPS];
57
+
58
+ static ownDefaults: Record<string, any> = rectDefaultValues;
59
+
60
+ static getDefaults(): Record<string, any> {
61
+ return {
62
+ ...super.getDefaults(),
63
+ ...Rect.ownDefaults,
64
+ };
65
+ }
66
+
67
+ /**
68
+ * Constructor
69
+ * @param {Object} [options] Options object
70
+ * @return {Object} thisArg
71
+ */
72
+ constructor(options: Props) {
73
+ super(options);
74
+ this._initRxRy();
75
+ }
76
+
77
+ /**
78
+ * Initializes rx/ry attributes
79
+ * @private
80
+ */
81
+ _initRxRy() {
82
+ const { rx, ry } = this;
83
+ if (rx && !ry) {
84
+ this.ry = rx;
85
+ } else if (ry && !rx) {
86
+ this.rx = ry;
87
+ }
88
+ }
89
+
90
+ /**
91
+ * @private
92
+ * @param {CanvasRenderingContext2D} ctx Context to render on
93
+ */
94
+ _render(ctx: CanvasRenderingContext2D) {
95
+ const { width: w, height: h } = this;
96
+ const x = -w / 2;
97
+ const y = -h / 2;
98
+ const rx = this.rx ? Math.min(this.rx, w / 2) : 0;
99
+ const ry = this.ry ? Math.min(this.ry, h / 2) : 0;
100
+ const isRounded = rx !== 0 || ry !== 0;
101
+
102
+ ctx.beginPath();
103
+
104
+ ctx.moveTo(x + rx, y);
105
+
106
+ ctx.lineTo(x + w - rx, y);
107
+ isRounded &&
108
+ ctx.bezierCurveTo(
109
+ x + w - kRect * rx,
110
+ y,
111
+ x + w,
112
+ y + kRect * ry,
113
+ x + w,
114
+ y + ry
115
+ );
116
+
117
+ ctx.lineTo(x + w, y + h - ry);
118
+ isRounded &&
119
+ ctx.bezierCurveTo(
120
+ x + w,
121
+ y + h - kRect * ry,
122
+ x + w - kRect * rx,
123
+ y + h,
124
+ x + w - rx,
125
+ y + h
126
+ );
127
+
128
+ ctx.lineTo(x + rx, y + h);
129
+ isRounded &&
130
+ ctx.bezierCurveTo(
131
+ x + kRect * rx,
132
+ y + h,
133
+ x,
134
+ y + h - kRect * ry,
135
+ x,
136
+ y + h - ry
137
+ );
138
+
139
+ ctx.lineTo(x, y + ry);
140
+ isRounded &&
141
+ ctx.bezierCurveTo(x, y + kRect * ry, x + kRect * rx, y, x + rx, y);
142
+
143
+ ctx.closePath();
144
+
145
+ this._renderPaintInOrder(ctx);
146
+ }
147
+
148
+ /**
149
+ * Returns object representation of an instance
150
+ * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output
151
+ * @return {Object} object representation of an instance
152
+ */
153
+ toObject<
154
+ T extends Omit<Props & TClassProperties<this>, keyof SProps>,
155
+ K extends keyof T = never
156
+ >(propertiesToInclude: K[] = []): Pick<T, K> & SProps {
157
+ return super.toObject([...RECT_PROPS, ...propertiesToInclude]);
158
+ }
159
+
160
+ /**
161
+ * Returns svg representation of an instance
162
+ * @return {Array} an array of strings with the specific svg representation
163
+ * of the instance
164
+ */
165
+ _toSVG() {
166
+ const { width, height, rx, ry } = this;
167
+ return [
168
+ '<rect ',
169
+ 'COMMON_PARTS',
170
+ `x="${-width / 2}" y="${
171
+ -height / 2
172
+ }" rx="${rx}" ry="${ry}" width="${width}" height="${height}" />\n`,
173
+ ];
174
+ }
175
+
176
+ /**
177
+ * List of attribute names to account for when parsing SVG element (used by `Rect.fromElement`)
178
+ * @static
179
+ * @memberOf Rect
180
+ * @see: http://www.w3.org/TR/SVG/shapes.html#RectElement
181
+ */
182
+ static ATTRIBUTE_NAMES = [
183
+ ...SHARED_ATTRIBUTES,
184
+ 'x',
185
+ 'y',
186
+ 'rx',
187
+ 'ry',
188
+ 'width',
189
+ 'height',
190
+ ];
191
+
192
+ /* _FROM_SVG_START_ */
193
+
194
+ /**
195
+ * Returns {@link Rect} instance from an SVG element
196
+ * @static
197
+ * @memberOf Rect
198
+ * @param {SVGElement} element Element to parse
199
+ * @param {Object} [options] Options object
200
+ */
201
+ static async fromElement(
202
+ element: SVGElement,
203
+ callback: (rect: Rect | null) => void,
204
+ options = {}
205
+ ) {
206
+ const {
207
+ left = 0,
208
+ top = 0,
209
+ width = 0,
210
+ height = 0,
211
+ visible = true,
212
+ ...restOfparsedAttributes
213
+ } = parseAttributes(element, this.ATTRIBUTE_NAMES);
214
+
215
+ return new this({
216
+ ...options,
217
+ ...restOfparsedAttributes,
218
+ left,
219
+ top,
220
+ width,
221
+ height,
222
+ visible: Boolean(visible && width && height),
223
+ });
224
+ }
225
+
226
+ /* _FROM_SVG_END_ */
227
+ }
228
+
229
+ classRegistry.setClass(Rect);
230
+ classRegistry.setSVGClass(Rect);