fabric 5.3.0 → 6.0.0-beta1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (533) hide show
  1. package/.babelrc +11 -0
  2. package/.babelrcAlt +19 -0
  3. package/.browserslistrc +5 -0
  4. package/.eslintrc.js +43 -0
  5. package/.eslintrc.json +38 -46
  6. package/.eslintrc_tests +12 -0
  7. package/.gitattributes +2 -0
  8. package/.prettierignore +16 -0
  9. package/.prettierrc +4 -0
  10. package/CHANGELOG.md +491 -189
  11. package/CONTRIBUTING.md +226 -58
  12. package/README.md +188 -239
  13. package/bower.json +1 -3
  14. package/dist/fabric.d.ts +1021 -0
  15. package/dist/index.cjs +28027 -0
  16. package/dist/index.cjs.map +1 -0
  17. package/dist/index.d.ts +2 -0
  18. package/dist/index.min.js +1 -0
  19. package/dist/index.mjs +27964 -0
  20. package/dist/index.mjs.map +1 -0
  21. package/dist/index.node.cjs +28092 -0
  22. package/dist/index.node.cjs.map +1 -0
  23. package/dist/index.node.d.ts +15 -0
  24. package/dist/index.node.mjs +28035 -0
  25. package/dist/index.node.mjs.map +1 -0
  26. package/dist/src/Collection.d.ts +126 -0
  27. package/dist/src/CommonMethods.d.ts +32 -0
  28. package/dist/src/EventTypeDefs.d.ts +226 -0
  29. package/dist/src/Intersection.d.ts +100 -0
  30. package/dist/src/Observable.d.ts +54 -0
  31. package/dist/src/Pattern.d.ts +104 -0
  32. package/dist/src/Point.d.ts +232 -0
  33. package/dist/src/Shadow.d.ts +87 -0
  34. package/dist/src/brushes/BaseBrush.d.ts +105 -0
  35. package/dist/src/brushes/CircleBrush.d.ts +49 -0
  36. package/dist/src/brushes/PatternBrush.d.ts +23 -0
  37. package/dist/src/brushes/PencilBrush.d.ts +92 -0
  38. package/dist/src/brushes/SprayBrush.d.ts +79 -0
  39. package/dist/src/cache.d.ts +46 -0
  40. package/dist/src/canvas/Canvas.d.ts +567 -0
  41. package/dist/src/canvas/SelectableCanvas.d.ts +723 -0
  42. package/dist/src/canvas/StaticCanvas.d.ts +751 -0
  43. package/dist/src/canvas/TextEditingManager.d.ts +17 -0
  44. package/dist/src/canvas/canvas_gestures.mixin.d.ts +2 -0
  45. package/dist/src/color/Color.d.ts +174 -0
  46. package/dist/src/color/color_map.d.ts +155 -0
  47. package/dist/src/color/constants.d.ts +22 -0
  48. package/dist/src/color/util.d.ts +12 -0
  49. package/dist/src/config.d.ts +115 -0
  50. package/dist/src/constants.d.ts +14 -0
  51. package/dist/src/controls/Control.d.ts +228 -0
  52. package/dist/src/controls/changeWidth.d.ts +13 -0
  53. package/dist/src/controls/controls.render.d.ts +29 -0
  54. package/dist/src/controls/default_controls.d.ts +50 -0
  55. package/dist/src/controls/drag.d.ts +12 -0
  56. package/dist/src/controls/polyControl.d.ts +5 -0
  57. package/dist/src/controls/rotate.d.ts +12 -0
  58. package/dist/src/controls/scale.d.ts +47 -0
  59. package/dist/src/controls/scaleSkew.d.ts +39 -0
  60. package/dist/src/controls/skew.d.ts +33 -0
  61. package/dist/src/controls/util.d.ts +41 -0
  62. package/dist/src/controls/wrapWithFireEvent.d.ts +8 -0
  63. package/dist/src/controls/wrapWithFixedAnchor.d.ts +9 -0
  64. package/dist/src/env/browser.d.ts +3 -0
  65. package/dist/src/env/index.d.ts +7 -0
  66. package/dist/src/env/node.d.ts +3 -0
  67. package/dist/src/env/types.d.ts +15 -0
  68. package/dist/src/filters/BaseFilter.d.ts +156 -0
  69. package/dist/src/filters/BlendColor.d.ts +80 -0
  70. package/dist/src/filters/BlendImage.d.ts +90 -0
  71. package/dist/src/filters/Blur.d.ts +50 -0
  72. package/dist/src/filters/Boilerplate.d.ts +46 -0
  73. package/dist/src/filters/Brightness.d.ts +46 -0
  74. package/dist/src/filters/Canvas2dFilterBackend.d.ts +27 -0
  75. package/dist/src/filters/ColorMatrix.d.ts +62 -0
  76. package/dist/src/filters/ColorMatrixFilters.d.ts +1169 -0
  77. package/dist/src/filters/Composed.d.ts +47 -0
  78. package/dist/src/filters/Contrast.d.ts +44 -0
  79. package/dist/src/filters/Convolute.d.ts +82 -0
  80. package/dist/src/filters/FilterBackend.d.ts +14 -0
  81. package/dist/src/filters/Gamma.d.ts +53 -0
  82. package/dist/src/filters/Grayscale.d.ts +45 -0
  83. package/dist/src/filters/HueRotation.d.ts +24 -0
  84. package/dist/src/filters/Invert.d.ts +54 -0
  85. package/dist/src/filters/Noise.d.ts +53 -0
  86. package/dist/src/filters/Pixelate.d.ts +43 -0
  87. package/dist/src/filters/RemoveColor.d.ts +62 -0
  88. package/dist/src/filters/Resize.d.ts +134 -0
  89. package/dist/src/filters/Saturation.d.ts +47 -0
  90. package/dist/src/filters/Vibrance.d.ts +47 -0
  91. package/dist/src/filters/WebGLFilterBackend.d.ts +126 -0
  92. package/dist/src/filters/WebGLProbe.d.ts +28 -0
  93. package/dist/src/filters/typedefs.d.ts +49 -0
  94. package/dist/src/gradient/Gradient.d.ts +149 -0
  95. package/dist/src/gradient/constants.d.ts +15 -0
  96. package/dist/src/gradient/parser/index.d.ts +4 -0
  97. package/dist/src/gradient/parser/misc.d.ts +4 -0
  98. package/dist/src/gradient/parser/parseColorStops.d.ts +6 -0
  99. package/dist/src/gradient/parser/parseCoords.d.ts +17 -0
  100. package/dist/src/gradient/typedefs.d.ts +93 -0
  101. package/dist/src/mixins/eraser_brush.mixin.d.ts +2 -0
  102. package/dist/src/mixins/stateful.mixin.d.ts +18 -0
  103. package/dist/src/parkinglot/canvas_animation.mixin.d.ts +2 -0
  104. package/dist/src/parkinglot/straighten.d.ts +2 -0
  105. package/dist/src/parser/applyViewboxTransform.d.ts +5 -0
  106. package/dist/src/parser/attributes.d.ts +6 -0
  107. package/dist/src/parser/constants.d.ts +54 -0
  108. package/dist/src/parser/doesSomeParentMatch.d.ts +2 -0
  109. package/dist/src/parser/elementById.d.ts +6 -0
  110. package/dist/src/parser/elementMatchesRule.d.ts +5 -0
  111. package/dist/src/parser/elements_parser.d.ts +3 -0
  112. package/dist/src/parser/getCSSRules.d.ts +7 -0
  113. package/dist/src/parser/getGlobalStylesForElement.d.ts +5 -0
  114. package/dist/src/parser/getGradientDefs.d.ts +7 -0
  115. package/dist/src/parser/getMultipleNodes.d.ts +2 -0
  116. package/dist/src/parser/getSvgRegex.d.ts +2 -0
  117. package/dist/src/parser/hasAncestorWithNodeName.d.ts +2 -0
  118. package/dist/src/parser/loadSVGFromString.d.ts +12 -0
  119. package/dist/src/parser/loadSVGFromURL.d.ts +13 -0
  120. package/dist/src/parser/normalizeAttr.d.ts +2 -0
  121. package/dist/src/parser/normalizeValue.d.ts +2 -0
  122. package/dist/src/parser/parseAttributes.d.ts +9 -0
  123. package/dist/src/parser/parseElements.d.ts +11 -0
  124. package/dist/src/parser/parseFontDeclaration.d.ts +10 -0
  125. package/dist/src/parser/parsePointsAttribute.d.ts +12 -0
  126. package/dist/src/parser/parseSVGDocument.d.ts +15 -0
  127. package/dist/src/parser/parseStyleAttribute.d.ts +9 -0
  128. package/dist/src/parser/parseStyleObject.d.ts +2 -0
  129. package/dist/src/parser/parseStyleString.d.ts +2 -0
  130. package/dist/src/parser/parseTransformAttribute.d.ts +10 -0
  131. package/dist/src/parser/parseUseDirectives.d.ts +2 -0
  132. package/dist/src/parser/percent.d.ts +9 -0
  133. package/dist/src/parser/recursivelyParseGradientsXlink.d.ts +2 -0
  134. package/dist/src/parser/rotateMatrix.d.ts +2 -0
  135. package/dist/src/parser/scaleMatrix.d.ts +2 -0
  136. package/dist/src/parser/selectorMatches.d.ts +2 -0
  137. package/dist/src/parser/setStrokeFillOpacity.d.ts +6 -0
  138. package/dist/src/parser/skewMatrix.d.ts +2 -0
  139. package/dist/src/parser/translateMatrix.d.ts +2 -0
  140. package/dist/src/shapes/ActiveSelection.d.ts +66 -0
  141. package/dist/src/shapes/Circle.d.ts +80 -0
  142. package/dist/src/shapes/Ellipse.d.ts +74 -0
  143. package/dist/src/shapes/Group.d.ts +381 -0
  144. package/dist/src/shapes/IText/DraggableTextDelegate.d.ts +78 -0
  145. package/dist/src/shapes/IText/IText.d.ts +322 -0
  146. package/dist/src/shapes/IText/ITextBehavior.d.ts +285 -0
  147. package/dist/src/shapes/IText/ITextClickBehavior.d.ts +81 -0
  148. package/dist/src/shapes/IText/ITextKeyBehavior.d.ts +193 -0
  149. package/dist/src/shapes/IText/constants.d.ts +13 -0
  150. package/dist/src/shapes/Image.d.ts +283 -0
  151. package/dist/src/shapes/Line.d.ts +117 -0
  152. package/dist/src/shapes/Object/AnimatableObject.d.ts +33 -0
  153. package/dist/src/shapes/Object/FabricObject.d.ts +9 -0
  154. package/dist/src/shapes/Object/FabricObjectSVGExportMixin.d.ts +74 -0
  155. package/dist/src/shapes/Object/InteractiveObject.d.ts +282 -0
  156. package/dist/src/shapes/Object/Object.d.ts +906 -0
  157. package/dist/src/shapes/Object/ObjectGeometry.d.ts +343 -0
  158. package/dist/src/shapes/Object/ObjectOrigin.d.ts +178 -0
  159. package/dist/src/shapes/Object/StackedObject.d.ts +62 -0
  160. package/dist/src/shapes/Object/defaultValues.d.ts +77 -0
  161. package/dist/src/shapes/Path.d.ts +123 -0
  162. package/dist/src/shapes/Polygon.d.ts +7 -0
  163. package/dist/src/shapes/Polyline.d.ts +130 -0
  164. package/dist/src/shapes/Rect.d.ts +62 -0
  165. package/dist/src/shapes/Text/StyledText.d.ts +118 -0
  166. package/dist/src/shapes/Text/Text.d.ts +656 -0
  167. package/dist/src/shapes/Text/TextSVGExportMixin.d.ts +32 -0
  168. package/dist/src/shapes/Textbox.d.ts +170 -0
  169. package/dist/src/shapes/Triangle.d.ts +17 -0
  170. package/dist/src/typedefs.d.ts +93 -0
  171. package/dist/src/util/animation/AnimationBase.d.ts +54 -0
  172. package/dist/src/util/animation/AnimationFrameProvider.d.ts +8 -0
  173. package/dist/src/util/animation/AnimationRegistry.d.ts +29 -0
  174. package/dist/src/util/animation/ArrayAnimation.d.ts +10 -0
  175. package/dist/src/util/animation/ColorAnimation.d.ts +11 -0
  176. package/dist/src/util/animation/ValueAnimation.d.ts +10 -0
  177. package/dist/src/util/animation/animate.d.ts +37 -0
  178. package/dist/src/util/animation/easing.d.ts +130 -0
  179. package/dist/src/util/animation/types.d.ts +87 -0
  180. package/dist/src/util/applyMixins.d.ts +8 -0
  181. package/dist/src/util/class_registry.d.ts +14 -0
  182. package/dist/src/util/dom_event.d.ts +5 -0
  183. package/dist/src/util/dom_misc.d.ts +40 -0
  184. package/dist/src/util/dom_request.d.ts +14 -0
  185. package/dist/src/util/dom_style.d.ts +7 -0
  186. package/dist/src/util/fireEvent.d.ts +3 -0
  187. package/dist/src/util/internals/cloneDeep.d.ts +2 -0
  188. package/dist/src/util/internals/getRandomInt.d.ts +8 -0
  189. package/dist/src/util/internals/ifNaN.d.ts +8 -0
  190. package/dist/src/util/internals/index.d.ts +4 -0
  191. package/dist/src/util/internals/removeFromArray.d.ts +9 -0
  192. package/dist/src/util/internals/uid.d.ts +2 -0
  193. package/dist/src/util/lang_class.d.ts +12 -0
  194. package/dist/src/util/lang_string.d.ts +22 -0
  195. package/dist/src/util/misc/boundingBoxFromPoints.d.ts +9 -0
  196. package/dist/src/util/misc/capValue.d.ts +2 -0
  197. package/dist/src/util/misc/cos.d.ts +10 -0
  198. package/dist/src/util/misc/dom.d.ts +28 -0
  199. package/dist/src/util/misc/findScaleTo.d.ts +29 -0
  200. package/dist/src/util/misc/groupSVGElements.d.ts +9 -0
  201. package/dist/src/util/misc/isTransparent.d.ts +11 -0
  202. package/dist/src/util/misc/matrix.d.ts +92 -0
  203. package/dist/src/util/misc/mergeClipPaths.d.ts +23 -0
  204. package/dist/src/util/misc/objectEnlive.d.ts +56 -0
  205. package/dist/src/util/misc/objectTransforms.d.ts +68 -0
  206. package/dist/src/util/misc/pick.d.ts +8 -0
  207. package/dist/src/util/misc/planeChange.d.ts +84 -0
  208. package/dist/src/util/misc/projectStroke/StrokeLineCapProjections.d.ts +51 -0
  209. package/dist/src/util/misc/projectStroke/StrokeLineJoinProjections.d.ts +81 -0
  210. package/dist/src/util/misc/projectStroke/StrokeProjectionsBase.d.ts +25 -0
  211. package/dist/src/util/misc/projectStroke/index.d.ts +11 -0
  212. package/dist/src/util/misc/projectStroke/types.d.ts +23 -0
  213. package/dist/src/util/misc/radiansDegreesConversion.d.ts +14 -0
  214. package/dist/src/util/misc/resolveOrigin.d.ts +9 -0
  215. package/dist/src/util/misc/rotatePoint.d.ts +12 -0
  216. package/dist/src/util/misc/sin.d.ts +10 -0
  217. package/dist/src/util/misc/svgParsing.d.ts +53 -0
  218. package/dist/src/util/misc/textStyles.d.ts +32 -0
  219. package/dist/src/util/misc/toFixed.d.ts +8 -0
  220. package/dist/src/util/misc/vectors.d.ts +57 -0
  221. package/dist/src/util/path.d.ts +108 -0
  222. package/dist/src/util/transform_matrix_removal.d.ts +14 -0
  223. package/dist/src/util/types.d.ts +19 -0
  224. package/fabric.ts +427 -0
  225. package/index.node.ts +43 -0
  226. package/index.ts +1 -0
  227. package/package.json +90 -39
  228. package/publish.js +0 -26
  229. package/rollup.config.mjs +79 -0
  230. package/rollup.test.config.js +24 -0
  231. package/scripts/build.mjs +50 -0
  232. package/scripts/buildLock.mjs +115 -0
  233. package/scripts/buildReporter.mjs +15 -0
  234. package/scripts/buildStats.mjs +139 -0
  235. package/scripts/dirname.mjs +14 -0
  236. package/scripts/index.mjs +679 -0
  237. package/scripts/transform_files.mjs +504 -0
  238. package/src/Collection.ts +311 -0
  239. package/src/CommonMethods.ts +63 -0
  240. package/src/EventTypeDefs.ts +294 -0
  241. package/src/Intersection.ts +273 -0
  242. package/src/Observable.ts +175 -0
  243. package/src/Pattern.ts +211 -0
  244. package/src/Point.ts +388 -0
  245. package/src/Shadow.ts +215 -0
  246. package/src/brushes/{base_brush.class.js → BaseBrush.ts} +65 -42
  247. package/src/brushes/CircleBrush.ts +145 -0
  248. package/src/brushes/PatternBrush.ts +70 -0
  249. package/src/brushes/PencilBrush.ts +300 -0
  250. package/src/brushes/SprayBrush.ts +219 -0
  251. package/src/cache.ts +89 -0
  252. package/src/canvas/Canvas.ts +1672 -0
  253. package/src/canvas/SelectableCanvas.ts +1636 -0
  254. package/src/canvas/StaticCanvas.ts +1709 -0
  255. package/src/canvas/TextEditingManager.ts +48 -0
  256. package/src/canvas/canvas_gestures.mixin.ts +207 -0
  257. package/src/color/Color.ts +404 -0
  258. package/src/color/color_map.ts +154 -0
  259. package/src/color/constants.ts +26 -0
  260. package/src/color/util.ts +32 -0
  261. package/src/config.ts +159 -0
  262. package/src/constants.ts +19 -0
  263. package/src/controls/Control.ts +377 -0
  264. package/src/controls/changeWidth.ts +52 -0
  265. package/src/controls/controls.render.ts +138 -0
  266. package/src/controls/default_controls.ts +132 -0
  267. package/src/controls/drag.ts +31 -0
  268. package/src/controls/polyControl.ts +135 -0
  269. package/src/controls/rotate.ts +87 -0
  270. package/src/controls/scale.ts +277 -0
  271. package/src/controls/scaleSkew.ts +92 -0
  272. package/src/controls/skew.ts +242 -0
  273. package/src/controls/util.ts +154 -0
  274. package/src/controls/wrapWithFireEvent.ts +25 -0
  275. package/src/controls/wrapWithFixedAnchor.ts +20 -0
  276. package/src/env/browser.ts +28 -0
  277. package/src/env/index.ts +19 -0
  278. package/src/env/node.ts +52 -0
  279. package/src/env/types.ts +15 -0
  280. package/src/filters/{base_filter.class.js → BaseFilter.ts} +201 -149
  281. package/src/filters/BlendColor.ts +258 -0
  282. package/src/filters/BlendImage.ts +254 -0
  283. package/src/filters/Blur.ts +202 -0
  284. package/src/filters/Boilerplate.ts +91 -0
  285. package/src/filters/Brightness.ts +93 -0
  286. package/src/filters/Canvas2dFilterBackend.ts +65 -0
  287. package/src/filters/ColorMatrix.ts +156 -0
  288. package/src/filters/ColorMatrixFilters.ts +106 -0
  289. package/src/filters/Composed.ts +85 -0
  290. package/src/filters/Contrast.ts +94 -0
  291. package/src/filters/Convolute.ts +341 -0
  292. package/src/filters/FilterBackend.ts +32 -0
  293. package/src/filters/Gamma.ts +127 -0
  294. package/src/filters/Grayscale.ts +137 -0
  295. package/src/filters/HueRotation.ts +66 -0
  296. package/src/filters/Invert.ts +117 -0
  297. package/src/filters/Noise.ts +109 -0
  298. package/src/filters/Pixelate.ts +114 -0
  299. package/src/filters/RemoveColor.ts +148 -0
  300. package/src/filters/Resize.ts +540 -0
  301. package/src/filters/Saturation.ts +100 -0
  302. package/src/filters/Vibrance.ts +103 -0
  303. package/src/filters/WebGLFilterBackend.ts +430 -0
  304. package/src/filters/WebGLProbe.ts +62 -0
  305. package/src/filters/typedefs.ts +65 -0
  306. package/src/gradient/Gradient.ts +401 -0
  307. package/src/gradient/constants.ts +12 -0
  308. package/src/gradient/parser/index.ts +3 -0
  309. package/src/gradient/parser/misc.ts +13 -0
  310. package/src/gradient/parser/parseColorStops.ts +55 -0
  311. package/src/gradient/parser/parseCoords.ts +73 -0
  312. package/src/gradient/typedefs.ts +104 -0
  313. package/src/mixins/{eraser_brush.mixin.js → eraser_brush.mixin.ts} +350 -239
  314. package/src/mixins/stateful.mixin.ts +104 -0
  315. package/src/parkinglot/canvas_animation.mixin.ts +121 -0
  316. package/src/parkinglot/straighten.ts +58 -0
  317. package/src/parser/applyViewboxTransform.ts +162 -0
  318. package/src/parser/attributes.ts +25 -0
  319. package/src/parser/constants.ts +118 -0
  320. package/src/parser/doesSomeParentMatch.ts +19 -0
  321. package/src/parser/elementById.ts +23 -0
  322. package/src/parser/elementMatchesRule.ts +19 -0
  323. package/src/parser/elements_parser.ts +191 -0
  324. package/src/parser/getCSSRules.ts +62 -0
  325. package/src/parser/getGlobalStylesForElement.ts +19 -0
  326. package/src/parser/getGradientDefs.ts +32 -0
  327. package/src/parser/getMultipleNodes.ts +15 -0
  328. package/src/parser/getSvgRegex.ts +5 -0
  329. package/src/parser/hasAncestorWithNodeName.ts +14 -0
  330. package/src/parser/loadSVGFromString.ts +26 -0
  331. package/src/parser/loadSVGFromURL.ts +40 -0
  332. package/src/parser/normalizeAttr.ts +10 -0
  333. package/src/parser/normalizeValue.ts +63 -0
  334. package/src/parser/parseAttributes.ts +90 -0
  335. package/src/parser/parseElements.ts +28 -0
  336. package/src/parser/parseFontDeclaration.ts +44 -0
  337. package/src/parser/parsePointsAttribute.ts +36 -0
  338. package/src/parser/parseSVGDocument.ts +106 -0
  339. package/src/parser/parseStyleAttribute.ts +27 -0
  340. package/src/parser/parseStyleObject.ts +15 -0
  341. package/src/parser/parseStyleString.ts +16 -0
  342. package/src/parser/parseTransformAttribute.ts +155 -0
  343. package/src/parser/parseUseDirectives.ts +79 -0
  344. package/src/parser/percent.ts +27 -0
  345. package/src/parser/recursivelyParseGradientsXlink.ts +42 -0
  346. package/src/parser/rotateMatrix.ts +21 -0
  347. package/src/parser/scaleMatrix.ts +9 -0
  348. package/src/parser/selectorMatches.ts +25 -0
  349. package/src/parser/setStrokeFillOpacity.ts +40 -0
  350. package/src/parser/skewMatrix.ts +6 -0
  351. package/src/parser/translateMatrix.ts +8 -0
  352. package/src/shapes/ActiveSelection.ts +157 -0
  353. package/src/shapes/Circle.ts +205 -0
  354. package/src/shapes/Ellipse.ts +154 -0
  355. package/src/shapes/Group.ts +1053 -0
  356. package/src/shapes/IText/DraggableTextDelegate.ts +394 -0
  357. package/src/shapes/IText/IText.ts +666 -0
  358. package/src/shapes/IText/ITextBehavior.ts +1055 -0
  359. package/src/shapes/IText/ITextClickBehavior.ts +321 -0
  360. package/src/shapes/IText/ITextKeyBehavior.ts +683 -0
  361. package/src/shapes/IText/constants.ts +47 -0
  362. package/src/shapes/Image.ts +789 -0
  363. package/src/shapes/Line.ts +329 -0
  364. package/src/shapes/Object/AnimatableObject.ts +106 -0
  365. package/src/shapes/Object/FabricObject.ts +19 -0
  366. package/src/shapes/Object/FabricObjectSVGExportMixin.ts +277 -0
  367. package/src/shapes/Object/InteractiveObject.ts +645 -0
  368. package/src/shapes/Object/Object.ts +1896 -0
  369. package/src/shapes/Object/ObjectGeometry.ts +830 -0
  370. package/src/shapes/Object/ObjectOrigin.ts +354 -0
  371. package/src/shapes/Object/StackedObject.ts +191 -0
  372. package/src/shapes/Object/defaultValues.ts +112 -0
  373. package/src/shapes/Path.ts +395 -0
  374. package/src/shapes/Polygon.ts +19 -0
  375. package/src/shapes/Polyline.ts +333 -0
  376. package/src/shapes/Rect.ts +199 -0
  377. package/src/shapes/Text/StyledText.ts +319 -0
  378. package/src/shapes/Text/Text.ts +1948 -0
  379. package/src/shapes/Text/TextSVGExportMixin.ts +288 -0
  380. package/src/shapes/Textbox.ts +471 -0
  381. package/src/shapes/Triangle.ts +45 -0
  382. package/src/typedefs.ts +119 -0
  383. package/src/util/animation/AnimationBase.ts +166 -0
  384. package/src/util/animation/AnimationFrameProvider.ts +28 -0
  385. package/src/util/animation/AnimationRegistry.ts +58 -0
  386. package/src/util/animation/ArrayAnimation.ts +27 -0
  387. package/src/util/animation/ColorAnimation.ts +74 -0
  388. package/src/util/animation/ValueAnimation.ts +29 -0
  389. package/src/util/animation/animate.ts +74 -0
  390. package/src/util/animation/easing.ts +327 -0
  391. package/src/util/animation/types.ts +136 -0
  392. package/src/util/applyMixins.ts +22 -0
  393. package/src/util/class_registry.ts +54 -0
  394. package/src/util/dom_event.ts +28 -0
  395. package/src/util/dom_misc.ts +138 -0
  396. package/src/util/dom_request.ts +64 -0
  397. package/src/util/dom_style.ts +20 -0
  398. package/src/util/fireEvent.ts +15 -0
  399. package/src/util/internals/cloneDeep.ts +2 -0
  400. package/src/util/internals/getRandomInt.ts +8 -0
  401. package/src/util/internals/ifNaN.ts +9 -0
  402. package/src/util/internals/index.ts +3 -0
  403. package/src/util/internals/removeFromArray.ts +14 -0
  404. package/src/util/internals/uid.ts +3 -0
  405. package/src/util/lang_class.ts +90 -0
  406. package/src/util/lang_string.ts +79 -0
  407. package/src/util/misc/boundingBoxFromPoints.ts +37 -0
  408. package/src/util/misc/capValue.ts +2 -0
  409. package/src/util/misc/cos.ts +24 -0
  410. package/src/util/misc/dom.ts +50 -0
  411. package/src/util/misc/findScaleTo.ts +44 -0
  412. package/src/util/misc/groupSVGElements.ts +15 -0
  413. package/src/util/misc/isTransparent.ts +51 -0
  414. package/src/util/misc/matrix.ts +207 -0
  415. package/src/util/misc/mergeClipPaths.ts +40 -0
  416. package/src/util/misc/objectEnlive.ts +189 -0
  417. package/src/util/misc/objectTransforms.ts +129 -0
  418. package/src/util/misc/pick.ts +17 -0
  419. package/src/util/misc/planeChange.ts +136 -0
  420. package/src/util/misc/projectStroke/StrokeLineCapProjections.ts +112 -0
  421. package/src/util/misc/projectStroke/StrokeLineJoinProjections.ts +231 -0
  422. package/src/util/misc/projectStroke/StrokeProjectionsBase.ts +75 -0
  423. package/src/util/misc/projectStroke/index.ts +53 -0
  424. package/src/util/misc/projectStroke/types.ts +24 -0
  425. package/src/util/misc/radiansDegreesConversion.ts +18 -0
  426. package/src/util/misc/resolveOrigin.ts +22 -0
  427. package/src/util/misc/rotatePoint.ts +15 -0
  428. package/src/util/misc/sin.ts +26 -0
  429. package/src/util/misc/svgParsing.ts +181 -0
  430. package/src/util/misc/textStyles.ts +133 -0
  431. package/src/util/misc/toFixed.ts +8 -0
  432. package/src/util/misc/vectors.ts +82 -0
  433. package/src/util/path.ts +941 -0
  434. package/src/util/transform_matrix_removal.ts +60 -0
  435. package/src/util/types.ts +78 -0
  436. package/tsconfig.json +106 -0
  437. package/HEADER.js +0 -203
  438. package/build.js +0 -287
  439. package/dist/fabric.js +0 -31187
  440. package/dist/fabric.min.js +0 -1
  441. package/old-travis-reference.yml +0 -97
  442. package/src/brushes/circle_brush.class.js +0 -144
  443. package/src/brushes/pattern_brush.class.js +0 -61
  444. package/src/brushes/pencil_brush.class.js +0 -310
  445. package/src/brushes/spray_brush.class.js +0 -219
  446. package/src/canvas.class.js +0 -1312
  447. package/src/color.class.js +0 -636
  448. package/src/control.class.js +0 -339
  449. package/src/controls.actions.js +0 -740
  450. package/src/controls.render.js +0 -99
  451. package/src/elements_parser.js +0 -152
  452. package/src/filters/2d_backend.class.js +0 -65
  453. package/src/filters/blendcolor_filter.class.js +0 -251
  454. package/src/filters/blendimage_filter.class.js +0 -247
  455. package/src/filters/blur_filter.class.js +0 -217
  456. package/src/filters/brightness_filter.class.js +0 -113
  457. package/src/filters/colormatrix_filter.class.js +0 -159
  458. package/src/filters/composed_filter.class.js +0 -72
  459. package/src/filters/contrast_filter.class.js +0 -113
  460. package/src/filters/convolute_filter.class.js +0 -352
  461. package/src/filters/filter_boilerplate.js +0 -111
  462. package/src/filters/filter_generator.js +0 -85
  463. package/src/filters/gamma_filter.class.js +0 -136
  464. package/src/filters/grayscale_filter.class.js +0 -154
  465. package/src/filters/hue_rotation.class.js +0 -107
  466. package/src/filters/invert_filter.class.js +0 -111
  467. package/src/filters/noise_filter.class.js +0 -134
  468. package/src/filters/pixelate_filter.class.js +0 -137
  469. package/src/filters/removecolor_filter.class.js +0 -173
  470. package/src/filters/resize_filter.class.js +0 -490
  471. package/src/filters/saturate_filter.class.js +0 -119
  472. package/src/filters/vibrance_filter.class.js +0 -122
  473. package/src/filters/webgl_backend.class.js +0 -396
  474. package/src/globalFabric.js +0 -4
  475. package/src/gradient.class.js +0 -490
  476. package/src/intersection.class.js +0 -172
  477. package/src/log.js +0 -11
  478. package/src/mixins/animation.mixin.js +0 -231
  479. package/src/mixins/canvas_dataurl_exporter.mixin.js +0 -97
  480. package/src/mixins/canvas_events.mixin.js +0 -974
  481. package/src/mixins/canvas_gestures.mixin.js +0 -149
  482. package/src/mixins/canvas_grouping.mixin.js +0 -177
  483. package/src/mixins/canvas_serialization.mixin.js +0 -228
  484. package/src/mixins/collection.mixin.js +0 -170
  485. package/src/mixins/default_controls.js +0 -114
  486. package/src/mixins/itext.svg_export.js +0 -241
  487. package/src/mixins/itext_behavior.mixin.js +0 -940
  488. package/src/mixins/itext_click_behavior.mixin.js +0 -278
  489. package/src/mixins/itext_key_behavior.mixin.js +0 -694
  490. package/src/mixins/object.svg_export.js +0 -258
  491. package/src/mixins/object_geometry.mixin.js +0 -683
  492. package/src/mixins/object_interactivity.mixin.js +0 -314
  493. package/src/mixins/object_origin.mixin.js +0 -255
  494. package/src/mixins/object_stacking.mixin.js +0 -80
  495. package/src/mixins/object_straightening.mixin.js +0 -80
  496. package/src/mixins/observable.mixin.js +0 -141
  497. package/src/mixins/shared_methods.mixin.js +0 -94
  498. package/src/mixins/stateful.mixin.js +0 -107
  499. package/src/mixins/text_style.mixin.js +0 -324
  500. package/src/parser.js +0 -1090
  501. package/src/pattern.class.js +0 -189
  502. package/src/point.class.js +0 -337
  503. package/src/shadow.class.js +0 -195
  504. package/src/shapes/active_selection.class.js +0 -155
  505. package/src/shapes/circle.class.js +0 -210
  506. package/src/shapes/ellipse.class.js +0 -181
  507. package/src/shapes/group.class.js +0 -593
  508. package/src/shapes/image.class.js +0 -764
  509. package/src/shapes/itext.class.js +0 -526
  510. package/src/shapes/line.class.js +0 -324
  511. package/src/shapes/object.class.js +0 -2008
  512. package/src/shapes/path.class.js +0 -384
  513. package/src/shapes/polygon.class.js +0 -81
  514. package/src/shapes/polyline.class.js +0 -268
  515. package/src/shapes/rect.class.js +0 -187
  516. package/src/shapes/text.class.js +0 -1696
  517. package/src/shapes/textbox.class.js +0 -461
  518. package/src/shapes/triangle.class.js +0 -93
  519. package/src/static_canvas.class.js +0 -1881
  520. package/src/util/anim_ease.js +0 -398
  521. package/src/util/animate.js +0 -254
  522. package/src/util/animate_color.js +0 -74
  523. package/src/util/dom_event.js +0 -50
  524. package/src/util/dom_misc.js +0 -300
  525. package/src/util/dom_request.js +0 -54
  526. package/src/util/dom_style.js +0 -70
  527. package/src/util/lang_array.js +0 -94
  528. package/src/util/lang_class.js +0 -115
  529. package/src/util/lang_object.js +0 -75
  530. package/src/util/lang_string.js +0 -110
  531. package/src/util/misc.js +0 -1330
  532. package/src/util/named_accessors.mixin.js +0 -428
  533. package/src/util/path.js +0 -829
@@ -0,0 +1,64 @@
1
+ // @ts-nocheck
2
+ import { getEnv } from '../env';
3
+ import { noop } from '../constants';
4
+
5
+ /**
6
+ * Cross-browser abstraction for sending XMLHttpRequest
7
+ * @deprecated this has to go away, we can use a modern browser method to do the same.
8
+ * @param {String} url URL to send XMLHttpRequest to
9
+ * @param {Object} [options] Options object
10
+ * @param {String} [options.method="GET"]
11
+ * @param {Record<string, string>} [options.parameters] parameters to append to url in GET or in body
12
+ * @param {String} [options.body] body to send with POST or PUT request
13
+ * @param {AbortSignal} [options.signal] handle aborting, see https://developer.mozilla.org/en-US/docs/Web/API/AbortController/signal
14
+ * @param {Function} options.onComplete Callback to invoke when request is completed
15
+ * @return {XMLHttpRequest} request
16
+ */
17
+ export function request(url, options = {}) {
18
+ const method = options.method ? options.method.toUpperCase() : 'GET',
19
+ onComplete = options.onComplete || noop,
20
+ xhr = new (getEnv().window.XMLHttpRequest)(),
21
+ body = options.body || options.parameters,
22
+ signal = options.signal,
23
+ abort = function () {
24
+ xhr.abort();
25
+ },
26
+ removeListener = function () {
27
+ signal && signal.removeEventListener('abort', abort);
28
+ xhr.onerror = xhr.ontimeout = noop;
29
+ };
30
+
31
+ if (signal && signal.aborted) {
32
+ throw new Error('`options.signal` is in `aborted` state');
33
+ } else if (signal) {
34
+ signal.addEventListener('abort', abort, { once: true });
35
+ }
36
+
37
+ /** @ignore */
38
+ xhr.onreadystatechange = function () {
39
+ if (xhr.readyState === 4) {
40
+ removeListener();
41
+ onComplete(xhr);
42
+ xhr.onreadystatechange = noop;
43
+ }
44
+ };
45
+
46
+ xhr.onerror = xhr.ontimeout = removeListener;
47
+
48
+ if (method === 'GET' && options.parameters) {
49
+ const { origin, pathname, searchParams } = new URL(url);
50
+ url = `${origin}${pathname}?${new URLSearchParams([
51
+ ...Array.from(searchParams.entries()),
52
+ ...Object.entries(options.parameters),
53
+ ])}`;
54
+ }
55
+
56
+ xhr.open(method, url, true);
57
+
58
+ if (method === 'POST' || method === 'PUT') {
59
+ xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
60
+ }
61
+
62
+ xhr.send(method === 'GET' ? null : body);
63
+ return xhr;
64
+ }
@@ -0,0 +1,20 @@
1
+ //@ts-nocheck
2
+ // TODO this file needs to go away, cross browser style support is not fabricjs domain.
3
+
4
+ /**
5
+ * wrapper for setting element's style
6
+ * @param {HTMLElement} element
7
+ * @param {Object | string} styles
8
+ */
9
+ export function setStyle(element, styles) {
10
+ const elementStyle = element.style;
11
+ if (!elementStyle) {
12
+ return;
13
+ } else if (typeof styles === 'string') {
14
+ element.style.cssText += ';' + styles;
15
+ } else {
16
+ Object.entries(styles).forEach(([property, value]) =>
17
+ elementStyle.setProperty(property, value)
18
+ );
19
+ }
20
+ }
@@ -0,0 +1,15 @@
1
+ import { BasicTransformEvent, TModificationEvents } from '../EventTypeDefs';
2
+
3
+ export const fireEvent = (
4
+ eventName: TModificationEvents,
5
+ options: BasicTransformEvent
6
+ ) => {
7
+ const {
8
+ transform: { target },
9
+ } = options;
10
+ target.canvas?.fire(`object:${eventName}`, {
11
+ ...options,
12
+ target,
13
+ });
14
+ target.fire(eventName, options);
15
+ };
@@ -0,0 +1,2 @@
1
+ export const cloneDeep = <T extends object>(object: T): T =>
2
+ JSON.parse(JSON.stringify(object));
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Returns random number between 2 specified ones.
3
+ * @param {Number} min lower limit
4
+ * @param {Number} max upper limit
5
+ * @return {Number} random value (between min and max)
6
+ */
7
+ export const getRandomInt = (min: number, max: number): number =>
8
+ Math.floor(Math.random() * (max - min + 1)) + min;
@@ -0,0 +1,9 @@
1
+ /**
2
+ *
3
+ * @param value value to check if NaN
4
+ * @param [valueIfNaN]
5
+ * @returns `fallback` is `value is NaN
6
+ */
7
+ export const ifNaN = (value: number, valueIfNaN?: number) => {
8
+ return isNaN(value) && typeof valueIfNaN === 'number' ? valueIfNaN : value;
9
+ };
@@ -0,0 +1,3 @@
1
+ export { getRandomInt } from './getRandomInt';
2
+ export { ifNaN } from './ifNaN';
3
+ export { removeFromArray } from './removeFromArray';
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Removes value from an array.
3
+ * Presence of value (and its position in an array) is determined via `Array.prototype.indexOf`
4
+ * @param {Array} array
5
+ * @param {*} value
6
+ * @return {Array} original array
7
+ */
8
+ export const removeFromArray = <T>(array: T[], value: T): T[] => {
9
+ const idx = array.indexOf(value);
10
+ if (idx !== -1) {
11
+ array.splice(idx, 1);
12
+ }
13
+ return array;
14
+ };
@@ -0,0 +1,3 @@
1
+ let id = 0;
2
+
3
+ export const uid = () => id++;
@@ -0,0 +1,90 @@
1
+ //@ts-nocheck
2
+ import { noop } from '../constants';
3
+
4
+ function addMethods(klass, source, parent) {
5
+ for (var property in source) {
6
+ if (
7
+ property in klass.prototype &&
8
+ typeof klass.prototype[property] === 'function' &&
9
+ (source[property] + '').indexOf('callSuper') > -1
10
+ ) {
11
+ klass.prototype[property] = (function (property) {
12
+ return function (...args) {
13
+ var superclass = this.constructor.superclass;
14
+ this.constructor.superclass = parent;
15
+ var returnValue = source[property].call(this, ...args);
16
+ this.constructor.superclass = superclass;
17
+
18
+ if (property !== 'initialize') {
19
+ return returnValue;
20
+ }
21
+ };
22
+ })(property);
23
+ } else {
24
+ klass.prototype[property] = source[property];
25
+ }
26
+ }
27
+ }
28
+
29
+ function Subclass() {}
30
+
31
+ function callSuper(methodName, ...args) {
32
+ var parentMethod = null,
33
+ _this = this;
34
+
35
+ // climb prototype chain to find method not equal to callee's method
36
+ while (_this.constructor.superclass) {
37
+ var superClassMethod = _this.constructor.superclass.prototype[methodName];
38
+ if (_this[methodName] !== superClassMethod) {
39
+ parentMethod = superClassMethod;
40
+ break;
41
+ }
42
+ // eslint-disable-next-line
43
+ _this = _this.constructor.superclass.prototype;
44
+ }
45
+
46
+ if (!parentMethod) {
47
+ return console.log(
48
+ 'tried to callSuper ' +
49
+ methodName +
50
+ ', method not found in prototype chain',
51
+ this
52
+ );
53
+ }
54
+
55
+ return parentMethod.call(this, ...args);
56
+ }
57
+
58
+ /**
59
+ * Helper for creation of "classes".
60
+ * @param {Function} [parent] optional "Class" to inherit from
61
+ * @param {Object} [properties] Properties shared by all instances of this class
62
+ * (be careful modifying objects defined here as this would affect all instances)
63
+ */
64
+ export function createClass(...args) {
65
+ var parent = null,
66
+ properties = [...args];
67
+
68
+ if (typeof args[0] === 'function') {
69
+ parent = properties.shift();
70
+ }
71
+ function klass(...klassArgs) {
72
+ this.initialize.call(this, ...klassArgs);
73
+ }
74
+
75
+ klass.superclass = parent;
76
+
77
+ if (parent) {
78
+ Subclass.prototype = parent.prototype;
79
+ klass.prototype = new Subclass();
80
+ }
81
+ for (var i = 0, length = properties.length; i < length; i++) {
82
+ addMethods(klass, properties[i], parent);
83
+ }
84
+ if (!klass.prototype.initialize) {
85
+ klass.prototype.initialize = noop;
86
+ }
87
+ klass.prototype.constructor = klass;
88
+ klass.prototype.callSuper = callSuper;
89
+ return klass;
90
+ }
@@ -0,0 +1,79 @@
1
+ /**
2
+ * Capitalizes a string
3
+ * @param {String} string String to capitalize
4
+ * @param {Boolean} [firstLetterOnly] If true only first letter is capitalized
5
+ * and other letters stay untouched, if false first letter is capitalized
6
+ * and other letters are converted to lowercase.
7
+ * @return {String} Capitalized version of a string
8
+ */
9
+ export const capitalize = (string: string, firstLetterOnly = false): string =>
10
+ `${string.charAt(0).toUpperCase()}${
11
+ firstLetterOnly ? string.slice(1) : string.slice(1).toLowerCase()
12
+ }`;
13
+
14
+ /**
15
+ * Escapes XML in a string
16
+ * @param {String} string String to escape
17
+ * @return {String} Escaped version of a string
18
+ */
19
+ export const escapeXml = (string: string): string =>
20
+ string
21
+ .replace(/&/g, '&amp;')
22
+ .replace(/"/g, '&quot;')
23
+ .replace(/'/g, '&apos;')
24
+ .replace(/</g, '&lt;')
25
+ .replace(/>/g, '&gt;');
26
+
27
+ /**
28
+ * Divide a string in the user perceived single units
29
+ * @param {String} textstring String to escape
30
+ * @return {Array} array containing the graphemes
31
+ */
32
+ export const graphemeSplit = (textstring: string): string[] => {
33
+ const graphemes = [];
34
+ for (let i = 0, chr; i < textstring.length; i++) {
35
+ if ((chr = getWholeChar(textstring, i)) === false) {
36
+ continue;
37
+ }
38
+ graphemes.push(chr as string);
39
+ }
40
+ return graphemes;
41
+ };
42
+
43
+ // taken from mdn in the charAt doc page.
44
+ const getWholeChar = (str: string, i: number): string | boolean => {
45
+ const code = str.charCodeAt(i);
46
+ if (isNaN(code)) {
47
+ return ''; // Position not found
48
+ }
49
+ if (code < 0xd800 || code > 0xdfff) {
50
+ return str.charAt(i);
51
+ }
52
+
53
+ // High surrogate (could change last hex to 0xDB7F to treat high private
54
+ // surrogates as single characters)
55
+ if (0xd800 <= code && code <= 0xdbff) {
56
+ if (str.length <= i + 1) {
57
+ throw 'High surrogate without following low surrogate';
58
+ }
59
+ const next = str.charCodeAt(i + 1);
60
+ if (0xdc00 > next || next > 0xdfff) {
61
+ throw 'High surrogate without following low surrogate';
62
+ }
63
+ return str.charAt(i) + str.charAt(i + 1);
64
+ }
65
+ // Low surrogate (0xDC00 <= code && code <= 0xDFFF)
66
+ if (i === 0) {
67
+ throw 'Low surrogate without preceding high surrogate';
68
+ }
69
+ const prev = str.charCodeAt(i - 1);
70
+
71
+ // (could change last hex to 0xDB7F to treat high private
72
+ // surrogates as single characters)
73
+ if (0xd800 > prev || prev > 0xdbff) {
74
+ throw 'Low surrogate without preceding high surrogate';
75
+ }
76
+ // We can pass over low surrogates now as the second component
77
+ // in a pair which we have already processed
78
+ return false;
79
+ };
@@ -0,0 +1,37 @@
1
+ import { IPoint, Point } from '../../Point';
2
+ import { TBBox } from '../../typedefs';
3
+
4
+ /**
5
+ * Calculates bounding box (left, top, width, height) from given `points`
6
+ * @param {IPoint[]} points
7
+ * @return {Object} Object with left, top, width, height properties
8
+ */
9
+ export const makeBoundingBoxFromPoints = (points: IPoint[]): TBBox => {
10
+ if (points.length === 0) {
11
+ return {
12
+ left: 0,
13
+ top: 0,
14
+ width: 0,
15
+ height: 0,
16
+ };
17
+ }
18
+
19
+ const { min, max } = points.reduce(
20
+ ({ min, max }, curr) => {
21
+ return {
22
+ min: min.min(curr),
23
+ max: max.max(curr),
24
+ };
25
+ },
26
+ { min: new Point(points[0]), max: new Point(points[0]) }
27
+ );
28
+
29
+ const size = max.subtract(min);
30
+
31
+ return {
32
+ left: min.x,
33
+ top: min.y,
34
+ width: size.x,
35
+ height: size.y,
36
+ };
37
+ };
@@ -0,0 +1,2 @@
1
+ export const capValue = (min: number, value: number, max: number) =>
2
+ Math.max(min, Math.min(value, max));
@@ -0,0 +1,24 @@
1
+ import type { TRadian } from '../../typedefs';
2
+ import { halfPI } from '../../constants';
3
+
4
+ /**
5
+ * Calculate the cos of an angle, avoiding returning floats for known results
6
+ * This function is here just to avoid getting 0.999999999999999 when dealing
7
+ * with numbers that are really 1 or 0.
8
+ * @param {TRadian} angle the angle
9
+ * @return {Number} the cosin value for angle.
10
+ */
11
+ export const cos = (angle: TRadian): number => {
12
+ if (angle === 0) {
13
+ return 1;
14
+ }
15
+ const angleSlice = Math.abs(angle) / halfPI;
16
+ switch (angleSlice) {
17
+ case 1:
18
+ case 3:
19
+ return 0;
20
+ case 2:
21
+ return -1;
22
+ }
23
+ return Math.cos(angle);
24
+ };
@@ -0,0 +1,50 @@
1
+ import { getEnv } from '../../env';
2
+ import { ImageFormat } from '../../typedefs';
3
+ /**
4
+ * Creates canvas element
5
+ * @return {CanvasElement} initialized canvas element
6
+ */
7
+ export const createCanvasElement = (): HTMLCanvasElement =>
8
+ getEnv().document.createElement('canvas');
9
+
10
+ /**
11
+ * Creates image element (works on client and node)
12
+ * @return {HTMLImageElement} HTML image element
13
+ */
14
+ export const createImage = (): HTMLImageElement =>
15
+ getEnv().document.createElement('img');
16
+
17
+ /**
18
+ * Creates a canvas element that is a copy of another and is also painted
19
+ * @param {CanvasElement} canvas to copy size and content of
20
+ * @return {CanvasElement} initialized canvas element
21
+ */
22
+ export const copyCanvasElement = (
23
+ canvas: HTMLCanvasElement
24
+ ): HTMLCanvasElement => {
25
+ const newCanvas = createCanvasElement();
26
+ newCanvas.width = canvas.width;
27
+ newCanvas.height = canvas.height;
28
+ newCanvas.getContext('2d')?.drawImage(canvas, 0, 0);
29
+ return newCanvas;
30
+ };
31
+
32
+ /**
33
+ * since 2.6.0 moved from canvas instance to utility.
34
+ * possibly useless
35
+ * @param {CanvasElement} canvasEl to copy size and content of
36
+ * @param {String} format 'jpeg' or 'png', in some browsers 'webp' is ok too
37
+ * @param {Number} quality <= 1 and > 0
38
+ * @return {String} data url
39
+ */
40
+ export const toDataURL = (
41
+ canvasEl: HTMLCanvasElement,
42
+ format: ImageFormat,
43
+ quality: number
44
+ ) => canvasEl.toDataURL(`image/${format}`, quality);
45
+
46
+ export const isHTMLCanvas = (
47
+ canvas: HTMLCanvasElement | string
48
+ ): canvas is HTMLCanvasElement => {
49
+ return !!canvas && (canvas as HTMLCanvasElement).getContext !== undefined;
50
+ };
@@ -0,0 +1,44 @@
1
+ export interface IWithDimensions {
2
+ /**
3
+ * natural unscaled width of the object
4
+ */
5
+ width: number;
6
+ /**
7
+ * natural unscaled height of the object
8
+ */
9
+ height: number;
10
+ }
11
+
12
+ /**
13
+ * Finds the scale for the object source to fit inside the object destination,
14
+ * keeping aspect ratio intact.
15
+ * respect the total allowed area for the cache.
16
+ * @param {IWithDimensions} source
17
+ * @param {IWithDimensions} destination
18
+ * @return {Number} scale factor to apply to source to fit into destination
19
+ */
20
+ export const findScaleToFit = (
21
+ source: IWithDimensions,
22
+ destination: IWithDimensions
23
+ ) =>
24
+ Math.min(
25
+ destination.width / source.width,
26
+ destination.height / source.height
27
+ );
28
+
29
+ /**
30
+ * Finds the scale for the object source to cover entirely the object destination,
31
+ * keeping aspect ratio intact.
32
+ * respect the total allowed area for the cache.
33
+ * @param {IWithDimensions} source
34
+ * @param {IWithDimensions} destination
35
+ * @return {Number} scale factor to apply to source to cover destination
36
+ */
37
+ export const findScaleToCover = (
38
+ source: IWithDimensions,
39
+ destination: IWithDimensions
40
+ ) =>
41
+ Math.max(
42
+ destination.width / source.width,
43
+ destination.height / source.height
44
+ );
@@ -0,0 +1,15 @@
1
+ import type { FabricObject } from '../../shapes/Object/FabricObject';
2
+ import { Group } from '../../shapes/Group';
3
+
4
+ /**
5
+ * Groups SVG elements (usually those retrieved from SVG document)
6
+ * @static
7
+ * @param {FabricObject[]} elements FabricObject(s) parsed from svg, to group
8
+ * @return {FabricObject | Group}
9
+ */
10
+ export const groupSVGElements = (elements: FabricObject[]) => {
11
+ if (elements && elements.length === 1) {
12
+ return elements[0];
13
+ }
14
+ return new Group(elements);
15
+ };
@@ -0,0 +1,51 @@
1
+ /**
2
+ * Returns true if context has transparent pixel
3
+ * at specified location (taking tolerance into account)
4
+ * @param {CanvasRenderingContext2D} ctx context
5
+ * @param {Number} x x coordinate in canvasElementCoordinate, not fabric space
6
+ * @param {Number} y y coordinate in canvasElementCoordinate, not fabric space
7
+ * @param {Number} tolerance Tolerance pixels around the point, not alpha tolerance
8
+ * @return {boolean} true if transparent
9
+ */
10
+ export const isTransparent = (
11
+ ctx: CanvasRenderingContext2D,
12
+ x: number,
13
+ y: number,
14
+ tolerance: number
15
+ ): boolean => {
16
+ // If tolerance is > 0 adjust start coords to take into account.
17
+ // If moves off Canvas fix to 0
18
+ if (tolerance > 0) {
19
+ if (x > tolerance) {
20
+ x -= tolerance;
21
+ } else {
22
+ x = 0;
23
+ }
24
+ if (y > tolerance) {
25
+ y -= tolerance;
26
+ } else {
27
+ y = 0;
28
+ }
29
+ }
30
+
31
+ let _isTransparent = true;
32
+ const { data } = ctx.getImageData(
33
+ x,
34
+ y,
35
+ tolerance * 2 || 1,
36
+ tolerance * 2 || 1
37
+ );
38
+ const l = data.length;
39
+
40
+ // Split image data - for tolerance > 1, pixelDataSize = 4;
41
+ for (let i = 3; i < l; i += 4) {
42
+ const alphaChannel = data[i];
43
+ if (alphaChannel > 0) {
44
+ // Stop if colour found
45
+ _isTransparent = false;
46
+ break;
47
+ }
48
+ }
49
+
50
+ return _isTransparent;
51
+ };