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
package/src/Point.ts ADDED
@@ -0,0 +1,388 @@
1
+ import { TMat2D, TRadian } from './typedefs';
2
+ import { cos } from './util/misc/cos';
3
+ import { sin } from './util/misc/sin';
4
+
5
+ export interface IPoint {
6
+ x: number;
7
+ y: number;
8
+ }
9
+
10
+ /**
11
+ * Adaptation of work of Kevin Lindsey(kevin@kevlindev.com)
12
+ */
13
+ export class Point implements IPoint {
14
+ declare x: number;
15
+
16
+ declare y: number;
17
+
18
+ constructor();
19
+ constructor(x: number, y: number);
20
+ constructor(point: IPoint);
21
+ constructor(arg0: number | IPoint = 0, y = 0) {
22
+ if (typeof arg0 === 'object') {
23
+ this.x = arg0.x;
24
+ this.y = arg0.y;
25
+ } else {
26
+ this.x = arg0;
27
+ this.y = y;
28
+ }
29
+ }
30
+
31
+ /**
32
+ * Adds another point to this one and returns another one
33
+ * @param {IPoint} that
34
+ * @return {Point} new Point instance with added values
35
+ */
36
+ add(that: IPoint): Point {
37
+ return new Point(this.x + that.x, this.y + that.y);
38
+ }
39
+
40
+ /**
41
+ * Adds another point to this one
42
+ * @param {IPoint} that
43
+ * @return {Point} thisArg
44
+ * @chainable
45
+ * @deprecated
46
+ */
47
+ addEquals(that: IPoint): Point {
48
+ this.x += that.x;
49
+ this.y += that.y;
50
+ return this;
51
+ }
52
+
53
+ /**
54
+ * Adds value to this point and returns a new one
55
+ * @param {Number} scalar
56
+ * @return {Point} new Point with added value
57
+ */
58
+ scalarAdd(scalar: number): Point {
59
+ return new Point(this.x + scalar, this.y + scalar);
60
+ }
61
+
62
+ /**
63
+ * Adds value to this point
64
+ * @param {Number} scalar
65
+ * @return {Point} thisArg
66
+ * @chainable
67
+ * @deprecated
68
+ */
69
+ scalarAddEquals(scalar: number): Point {
70
+ this.x += scalar;
71
+ this.y += scalar;
72
+ return this;
73
+ }
74
+
75
+ /**
76
+ * Subtracts another point from this point and returns a new one
77
+ * @param {IPoint} that
78
+ * @return {Point} new Point object with subtracted values
79
+ */
80
+ subtract(that: IPoint): Point {
81
+ return new Point(this.x - that.x, this.y - that.y);
82
+ }
83
+
84
+ /**
85
+ * Subtracts another point from this point
86
+ * @param {IPoint} that
87
+ * @return {Point} thisArg
88
+ * @chainable
89
+ * @deprecated
90
+ */
91
+ subtractEquals(that: IPoint): Point {
92
+ this.x -= that.x;
93
+ this.y -= that.y;
94
+ return this;
95
+ }
96
+
97
+ /**
98
+ * Subtracts value from this point and returns a new one
99
+ * @param {Number} scalar
100
+ * @return {Point}
101
+ */
102
+ scalarSubtract(scalar: number): Point {
103
+ return new Point(this.x - scalar, this.y - scalar);
104
+ }
105
+
106
+ /**
107
+ * Subtracts value from this point
108
+ * @param {Number} scalar
109
+ * @return {Point} thisArg
110
+ * @chainable
111
+ * @deprecated
112
+ */
113
+ scalarSubtractEquals(scalar: number): Point {
114
+ this.x -= scalar;
115
+ this.y -= scalar;
116
+ return this;
117
+ }
118
+
119
+ /**
120
+ * Multiplies this point by another value and returns a new one
121
+ * @param {IPoint} that
122
+ * @return {Point}
123
+ */
124
+ multiply(that: IPoint): Point {
125
+ return new Point(this.x * that.x, this.y * that.y);
126
+ }
127
+
128
+ /**
129
+ * Multiplies this point by a value and returns a new one
130
+ * @param {Number} scalar
131
+ * @return {Point}
132
+ */
133
+ scalarMultiply(scalar: number): Point {
134
+ return new Point(this.x * scalar, this.y * scalar);
135
+ }
136
+
137
+ /**
138
+ * Multiplies this point by a value
139
+ * @param {Number} scalar
140
+ * @return {Point} thisArg
141
+ * @chainable
142
+ * @deprecated
143
+ */
144
+ scalarMultiplyEquals(scalar: number): Point {
145
+ this.x *= scalar;
146
+ this.y *= scalar;
147
+ return this;
148
+ }
149
+
150
+ /**
151
+ * Divides this point by another and returns a new one
152
+ * @param {IPoint} that
153
+ * @return {Point}
154
+ */
155
+ divide(that: IPoint): Point {
156
+ return new Point(this.x / that.x, this.y / that.y);
157
+ }
158
+
159
+ /**
160
+ * Divides this point by a value and returns a new one
161
+ * @param {Number} scalar
162
+ * @return {Point}
163
+ */
164
+ scalarDivide(scalar: number): Point {
165
+ return new Point(this.x / scalar, this.y / scalar);
166
+ }
167
+
168
+ /**
169
+ * Divides this point by a value
170
+ * @param {Number} scalar
171
+ * @return {Point} thisArg
172
+ * @chainable
173
+ * @deprecated
174
+ */
175
+ scalarDivideEquals(scalar: number): Point {
176
+ this.x /= scalar;
177
+ this.y /= scalar;
178
+ return this;
179
+ }
180
+
181
+ /**
182
+ * Returns true if this point is equal to another one
183
+ * @param {IPoint} that
184
+ * @return {Boolean}
185
+ */
186
+ eq(that: IPoint): boolean {
187
+ return this.x === that.x && this.y === that.y;
188
+ }
189
+
190
+ /**
191
+ * Returns true if this point is less than another one
192
+ * @param {IPoint} that
193
+ * @return {Boolean}
194
+ */
195
+ lt(that: IPoint): boolean {
196
+ return this.x < that.x && this.y < that.y;
197
+ }
198
+
199
+ /**
200
+ * Returns true if this point is less than or equal to another one
201
+ * @param {IPoint} that
202
+ * @return {Boolean}
203
+ */
204
+ lte(that: IPoint): boolean {
205
+ return this.x <= that.x && this.y <= that.y;
206
+ }
207
+
208
+ /**
209
+
210
+ * Returns true if this point is greater another one
211
+ * @param {IPoint} that
212
+ * @return {Boolean}
213
+ */
214
+ gt(that: IPoint): boolean {
215
+ return this.x > that.x && this.y > that.y;
216
+ }
217
+
218
+ /**
219
+ * Returns true if this point is greater than or equal to another one
220
+ * @param {IPoint} that
221
+ * @return {Boolean}
222
+ */
223
+ gte(that: IPoint): boolean {
224
+ return this.x >= that.x && this.y >= that.y;
225
+ }
226
+
227
+ /**
228
+ * Returns new point which is the result of linear interpolation with this one and another one
229
+ * @param {IPoint} that
230
+ * @param {Number} t , position of interpolation, between 0 and 1 default 0.5
231
+ * @return {Point}
232
+ */
233
+ lerp(that: IPoint, t = 0.5): Point {
234
+ t = Math.max(Math.min(1, t), 0);
235
+ return new Point(
236
+ this.x + (that.x - this.x) * t,
237
+ this.y + (that.y - this.y) * t
238
+ );
239
+ }
240
+
241
+ /**
242
+ * Returns distance from this point and another one
243
+ * @param {IPoint} that
244
+ * @return {Number}
245
+ */
246
+ distanceFrom(that: IPoint): number {
247
+ const dx = this.x - that.x,
248
+ dy = this.y - that.y;
249
+ return Math.sqrt(dx * dx + dy * dy);
250
+ }
251
+
252
+ /**
253
+ * Returns the point between this point and another one
254
+ * @param {IPoint} that
255
+ * @return {Point}
256
+ */
257
+ midPointFrom(that: IPoint): Point {
258
+ return this.lerp(that);
259
+ }
260
+
261
+ /**
262
+ * Returns a new point which is the min of this and another one
263
+ * @param {IPoint} that
264
+ * @return {Point}
265
+ */
266
+ min(that: IPoint): Point {
267
+ return new Point(Math.min(this.x, that.x), Math.min(this.y, that.y));
268
+ }
269
+
270
+ /**
271
+ * Returns a new point which is the max of this and another one
272
+ * @param {IPoint} that
273
+ * @return {Point}
274
+ */
275
+ max(that: IPoint): Point {
276
+ return new Point(Math.max(this.x, that.x), Math.max(this.y, that.y));
277
+ }
278
+
279
+ /**
280
+ * Returns string representation of this point
281
+ * @return {String}
282
+ */
283
+ toString(): string {
284
+ return `${this.x},${this.y}`;
285
+ }
286
+
287
+ /**
288
+ * Sets x/y of this point
289
+ * @param {Number} x
290
+ * @param {Number} y
291
+ * @chainable
292
+ */
293
+ setXY(x: number, y: number) {
294
+ this.x = x;
295
+ this.y = y;
296
+ return this;
297
+ }
298
+
299
+ /**
300
+ * Sets x of this point
301
+ * @param {Number} x
302
+ * @chainable
303
+ */
304
+ setX(x: number) {
305
+ this.x = x;
306
+ return this;
307
+ }
308
+
309
+ /**
310
+ * Sets y of this point
311
+ * @param {Number} y
312
+ * @chainable
313
+ */
314
+ setY(y: number) {
315
+ this.y = y;
316
+ return this;
317
+ }
318
+
319
+ /**
320
+ * Sets x/y of this point from another point
321
+ * @param {IPoint} that
322
+ * @chainable
323
+ */
324
+ setFromPoint(that: IPoint) {
325
+ this.x = that.x;
326
+ this.y = that.y;
327
+ return this;
328
+ }
329
+
330
+ /**
331
+ * Swaps x/y of this point and another point
332
+ * @param {IPoint} that
333
+ */
334
+ swap(that: IPoint) {
335
+ const x = this.x,
336
+ y = this.y;
337
+ this.x = that.x;
338
+ this.y = that.y;
339
+ that.x = x;
340
+ that.y = y;
341
+ }
342
+
343
+ /**
344
+ * return a cloned instance of the point
345
+ * @return {Point}
346
+ */
347
+ clone(): Point {
348
+ return new Point(this.x, this.y);
349
+ }
350
+
351
+ /**
352
+ * Rotates `point` around `origin` with `radians`
353
+ * @static
354
+ * @memberOf fabric.util
355
+ * @param {IPoint} origin The origin of the rotation
356
+ * @param {TRadian} radians The radians of the angle for the rotation
357
+ * @return {Point} The new rotated point
358
+ */
359
+ rotate(radians: TRadian, origin: IPoint = originZero): Point {
360
+ // TODO benchmark and verify the add and subtract how much cost
361
+ // and then in case early return if no origin is passed
362
+ const sinus = sin(radians),
363
+ cosinus = cos(radians);
364
+ const p = this.subtract(origin);
365
+ const rotated = new Point(
366
+ p.x * cosinus - p.y * sinus,
367
+ p.x * sinus + p.y * cosinus
368
+ );
369
+ return rotated.add(origin);
370
+ }
371
+
372
+ /**
373
+ * Apply transform t to point p
374
+ * @static
375
+ * @memberOf fabric.util
376
+ * @param {TMat2D} t The transform
377
+ * @param {Boolean} [ignoreOffset] Indicates that the offset should not be applied
378
+ * @return {Point} The transformed point
379
+ */
380
+ transform(t: TMat2D, ignoreOffset = false): Point {
381
+ return new Point(
382
+ t[0] * this.x + t[2] * this.y + (ignoreOffset ? 0 : t[4]),
383
+ t[1] * this.x + t[3] * this.y + (ignoreOffset ? 0 : t[5])
384
+ );
385
+ }
386
+ }
387
+
388
+ const originZero = new Point(0, 0);
package/src/Shadow.ts ADDED
@@ -0,0 +1,215 @@
1
+ import { Color } from './color/Color';
2
+ import { config } from './config';
3
+ import { Point } from './Point';
4
+ import type { FabricObject } from './shapes/Object/FabricObject';
5
+ import { TClassProperties } from './typedefs';
6
+ import { uid } from './util/internals/uid';
7
+ import { degreesToRadians } from './util/misc/radiansDegreesConversion';
8
+ import { toFixed } from './util/misc/toFixed';
9
+ import { rotateVector } from './util/misc/vectors';
10
+
11
+ export class Shadow {
12
+ /**
13
+ * Shadow color
14
+ * @type String
15
+ * @default
16
+ */
17
+ declare color: string;
18
+
19
+ /**
20
+ * Shadow blur
21
+ * @type Number
22
+ */
23
+ declare blur: number;
24
+
25
+ /**
26
+ * Shadow horizontal offset
27
+ * @type Number
28
+ * @default
29
+ */
30
+ declare offsetX: number;
31
+
32
+ /**
33
+ * Shadow vertical offset
34
+ * @type Number
35
+ * @default
36
+ */
37
+ declare offsetY: number;
38
+
39
+ /**
40
+ * Whether the shadow should affect stroke operations
41
+ * @type Boolean
42
+ * @default
43
+ */
44
+ declare affectStroke: boolean;
45
+
46
+ /**
47
+ * Indicates whether toObject should include default values
48
+ * @type Boolean
49
+ * @default
50
+ */
51
+ declare includeDefaultValues: boolean;
52
+
53
+ /**
54
+ * When `false`, the shadow will scale with the object.
55
+ * When `true`, the shadow's offsetX, offsetY, and blur will not be affected by the object's scale.
56
+ * default to false
57
+ * @type Boolean
58
+ * @default
59
+ */
60
+ declare nonScaling: boolean;
61
+
62
+ declare id: number;
63
+
64
+ /**
65
+ * @see {@link http://fabricjs.com/shadows|Shadow demo}
66
+ * @param {Object|String} [options] Options object with any of color, blur, offsetX, offsetY properties or string (e.g. "rgba(0,0,0,0.2) 2px 2px 10px")
67
+ */
68
+ constructor(options: Partial<TClassProperties<Shadow>>);
69
+ constructor(svgAttribute: string);
70
+ constructor(arg0: string | Partial<TClassProperties<Shadow>>) {
71
+ const options: Partial<TClassProperties<Shadow>> =
72
+ typeof arg0 === 'string' ? Shadow.parseShadow(arg0) : arg0;
73
+ for (const prop in options) {
74
+ // @ts-expect-error for loops are so messy in TS
75
+ this[prop] = options[prop];
76
+ }
77
+
78
+ this.id = uid();
79
+ }
80
+
81
+ /**
82
+ * @param {String} value Shadow value to parse
83
+ * @return {Object} Shadow object with color, offsetX, offsetY and blur
84
+ */
85
+ static parseShadow(value: string) {
86
+ const shadowStr = value.trim(),
87
+ [__, offsetX = 0, offsetY = 0, blur = 0] = (
88
+ Shadow.reOffsetsAndBlur.exec(shadowStr) || []
89
+ ).map((value) => parseFloat(value) || 0),
90
+ color = (
91
+ shadowStr.replace(Shadow.reOffsetsAndBlur, '') || 'rgb(0,0,0)'
92
+ ).trim();
93
+
94
+ return {
95
+ color,
96
+ offsetX,
97
+ offsetY,
98
+ blur,
99
+ };
100
+ }
101
+
102
+ /**
103
+ * Returns a string representation of an instance
104
+ * @see http://www.w3.org/TR/css-text-decor-3/#text-shadow
105
+ * @return {String} Returns CSS3 text-shadow declaration
106
+ */
107
+ toString() {
108
+ return [this.offsetX, this.offsetY, this.blur, this.color].join('px ');
109
+ }
110
+
111
+ /**
112
+ * Returns SVG representation of a shadow
113
+ * @param {FabricObject} object
114
+ * @return {String} SVG representation of a shadow
115
+ */
116
+ toSVG(object: FabricObject) {
117
+ const offset = rotateVector(
118
+ new Point(this.offsetX, this.offsetY),
119
+ degreesToRadians(-object.angle)
120
+ ),
121
+ BLUR_BOX = 20,
122
+ color = new Color(this.color);
123
+ let fBoxX = 40,
124
+ fBoxY = 40;
125
+
126
+ if (object.width && object.height) {
127
+ //http://www.w3.org/TR/SVG/filters.html#FilterEffectsRegion
128
+ // we add some extra space to filter box to contain the blur ( 20 )
129
+ fBoxX =
130
+ toFixed(
131
+ (Math.abs(offset.x) + this.blur) / object.width,
132
+ config.NUM_FRACTION_DIGITS
133
+ ) *
134
+ 100 +
135
+ BLUR_BOX;
136
+ fBoxY =
137
+ toFixed(
138
+ (Math.abs(offset.y) + this.blur) / object.height,
139
+ config.NUM_FRACTION_DIGITS
140
+ ) *
141
+ 100 +
142
+ BLUR_BOX;
143
+ }
144
+ if (object.flipX) {
145
+ offset.x *= -1;
146
+ }
147
+ if (object.flipY) {
148
+ offset.y *= -1;
149
+ }
150
+
151
+ return `<filter id="SVGID_${this.id}" y="-${fBoxY}%" height="${
152
+ 100 + 2 * fBoxY
153
+ }%" x="-${fBoxX}%" width="${
154
+ 100 + 2 * fBoxX
155
+ }%" >\n\t<feGaussianBlur in="SourceAlpha" stdDeviation="${toFixed(
156
+ this.blur ? this.blur / 2 : 0,
157
+ config.NUM_FRACTION_DIGITS
158
+ )}"></feGaussianBlur>\n\t<feOffset dx="${toFixed(
159
+ offset.x,
160
+ config.NUM_FRACTION_DIGITS
161
+ )}" dy="${toFixed(
162
+ offset.y,
163
+ config.NUM_FRACTION_DIGITS
164
+ )}" result="oBlur" ></feOffset>\n\t<feFlood flood-color="${color.toRgb()}" flood-opacity="${color.getAlpha()}"/>\n\t<feComposite in2="oBlur" operator="in" />\n\t<feMerge>\n\t\t<feMergeNode></feMergeNode>\n\t\t<feMergeNode in="SourceGraphic"></feMergeNode>\n\t</feMerge>\n</filter>\n`;
165
+ }
166
+
167
+ /**
168
+ * Returns object representation of a shadow
169
+ * @return {Object} Object representation of a shadow instance
170
+ */
171
+ toObject() {
172
+ const data = {
173
+ color: this.color,
174
+ blur: this.blur,
175
+ offsetX: this.offsetX,
176
+ offsetY: this.offsetY,
177
+ affectStroke: this.affectStroke,
178
+ nonScaling: this.nonScaling,
179
+ };
180
+
181
+ if (this.includeDefaultValues) {
182
+ return data;
183
+ }
184
+
185
+ const defaults = Shadow.prototype;
186
+ const out: Record<string, unknown> = {};
187
+ for (const key in data) {
188
+ if (
189
+ data[key as keyof typeof data] !== defaults[key as keyof typeof data]
190
+ ) {
191
+ out[key] = data[key as keyof typeof data];
192
+ }
193
+ }
194
+ return out;
195
+ }
196
+
197
+ /**
198
+ * Regex matching shadow offsetX, offsetY and blur (ex: "2px 2px 10px rgba(0,0,0,0.2)", "rgb(0,255,0) 2px 2px")
199
+ */
200
+ // eslint-disable-next-line max-len
201
+ static reOffsetsAndBlur =
202
+ /(?:\s|^)(-?\d+(?:\.\d*)?(?:px)?(?:\s?|$))?(-?\d+(?:\.\d*)?(?:px)?(?:\s?|$))?(\d+(?:\.\d*)?(?:px)?)?(?:\s?|$)(?:$|\s)/;
203
+ }
204
+
205
+ export const shadowDefaultValues: Partial<TClassProperties<Shadow>> = {
206
+ color: 'rgb(0,0,0)',
207
+ blur: 0,
208
+ offsetX: 0,
209
+ offsetY: 0,
210
+ affectStroke: false,
211
+ includeDefaultValues: true,
212
+ nonScaling: false,
213
+ };
214
+
215
+ Object.assign(Shadow.prototype, shadowDefaultValues);