fabric 5.3.0 → 6.0.0-beta3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (604) hide show
  1. package/.babelrc +11 -0
  2. package/.babelrcAlt +19 -0
  3. package/.browserslistrc +5 -0
  4. package/.eslintignore +3 -0
  5. package/.eslintrc.js +43 -0
  6. package/.eslintrc.json +38 -46
  7. package/.eslintrc_tests +12 -0
  8. package/.gitattributes +2 -0
  9. package/.gitpod.yml +17 -1
  10. package/.prettierignore +19 -0
  11. package/.prettierrc +4 -0
  12. package/CHANGELOG.md +532 -189
  13. package/CONTRIBUTING.md +224 -59
  14. package/README.md +200 -235
  15. package/bower.json +1 -3
  16. package/dist/fabric.d.ts +42 -0
  17. package/dist/index.d.ts +2 -0
  18. package/dist/index.js +27582 -0
  19. package/dist/index.js.map +1 -0
  20. package/dist/index.min.js +1 -0
  21. package/dist/index.mjs +27519 -0
  22. package/dist/index.mjs.map +1 -0
  23. package/dist/index.node.cjs +27663 -0
  24. package/dist/index.node.cjs.map +1 -0
  25. package/dist/index.node.d.ts +14 -0
  26. package/dist/index.node.mjs +27606 -0
  27. package/dist/index.node.mjs.map +1 -0
  28. package/dist/src/ClassRegistry.d.ts +13 -0
  29. package/dist/src/Collection.d.ts +136 -0
  30. package/dist/src/CommonMethods.d.ts +32 -0
  31. package/dist/src/EventTypeDefs.d.ts +227 -0
  32. package/dist/src/Intersection.d.ts +112 -0
  33. package/dist/src/Observable.d.ts +60 -0
  34. package/dist/src/Pattern.d.ts +113 -0
  35. package/dist/src/Point.d.ts +232 -0
  36. package/dist/src/Shadow.d.ts +97 -0
  37. package/dist/src/brushes/BaseBrush.d.ts +105 -0
  38. package/dist/src/brushes/CircleBrush.d.ts +49 -0
  39. package/dist/src/brushes/PatternBrush.d.ts +23 -0
  40. package/dist/src/brushes/PencilBrush.d.ts +92 -0
  41. package/dist/src/brushes/SprayBrush.d.ts +79 -0
  42. package/dist/src/cache.d.ts +47 -0
  43. package/dist/src/canvas/Canvas.d.ts +548 -0
  44. package/dist/src/canvas/SelectableCanvas.d.ts +754 -0
  45. package/dist/src/canvas/StaticCanvas.d.ts +778 -0
  46. package/dist/src/canvas/TextEditingManager.d.ts +17 -0
  47. package/dist/src/canvas/canvas_gestures.mixin.d.ts +2 -0
  48. package/dist/src/color/Color.d.ts +174 -0
  49. package/dist/src/color/color_map.d.ts +155 -0
  50. package/dist/src/color/constants.d.ts +22 -0
  51. package/dist/src/color/util.d.ts +12 -0
  52. package/dist/src/config.d.ts +115 -0
  53. package/dist/src/constants.d.ts +14 -0
  54. package/dist/src/controls/Control.d.ts +228 -0
  55. package/dist/src/controls/changeWidth.d.ts +13 -0
  56. package/dist/src/controls/commonControls.d.ts +28 -0
  57. package/dist/src/controls/controlRendering.d.ts +29 -0
  58. package/dist/src/controls/drag.d.ts +12 -0
  59. package/dist/src/controls/index.d.ts +13 -0
  60. package/dist/src/controls/polyControl.d.ts +5 -0
  61. package/dist/src/controls/rotate.d.ts +12 -0
  62. package/dist/src/controls/scale.d.ts +47 -0
  63. package/dist/src/controls/scaleSkew.d.ts +39 -0
  64. package/dist/src/controls/skew.d.ts +33 -0
  65. package/dist/src/controls/util.d.ts +41 -0
  66. package/dist/src/controls/wrapWithFireEvent.d.ts +8 -0
  67. package/dist/src/controls/wrapWithFixedAnchor.d.ts +9 -0
  68. package/dist/src/env/browser.d.ts +3 -0
  69. package/dist/src/env/index.d.ts +15 -0
  70. package/dist/src/env/node.d.ts +5 -0
  71. package/dist/src/env/types.d.ts +15 -0
  72. package/dist/src/filters/BaseFilter.d.ts +153 -0
  73. package/dist/src/filters/BlendColor.d.ts +80 -0
  74. package/dist/src/filters/BlendImage.d.ts +92 -0
  75. package/dist/src/filters/Blur.d.ts +51 -0
  76. package/dist/src/filters/Boilerplate.d.ts +48 -0
  77. package/dist/src/filters/Brightness.d.ts +47 -0
  78. package/dist/src/filters/Canvas2dFilterBackend.d.ts +27 -0
  79. package/dist/src/filters/ColorMatrix.d.ts +63 -0
  80. package/dist/src/filters/ColorMatrixFilters.d.ts +545 -0
  81. package/dist/src/filters/Composed.d.ts +45 -0
  82. package/dist/src/filters/Contrast.d.ts +45 -0
  83. package/dist/src/filters/Convolute.d.ts +82 -0
  84. package/dist/src/filters/FilterBackend.d.ts +14 -0
  85. package/dist/src/filters/GLProbes/GLProbe.d.ts +11 -0
  86. package/dist/src/filters/GLProbes/NodeGLProbe.d.ts +11 -0
  87. package/dist/src/filters/GLProbes/WebGLProbe.d.ts +20 -0
  88. package/dist/src/filters/Gamma.d.ts +54 -0
  89. package/dist/src/filters/Grayscale.d.ts +46 -0
  90. package/dist/src/filters/HueRotation.d.ts +24 -0
  91. package/dist/src/filters/Invert.d.ts +55 -0
  92. package/dist/src/filters/Noise.d.ts +54 -0
  93. package/dist/src/filters/Pixelate.d.ts +44 -0
  94. package/dist/src/filters/RemoveColor.d.ts +63 -0
  95. package/dist/src/filters/Resize.d.ts +136 -0
  96. package/dist/src/filters/Saturation.d.ts +48 -0
  97. package/dist/src/filters/Vibrance.d.ts +48 -0
  98. package/dist/src/filters/WebGLFilterBackend.d.ts +126 -0
  99. package/dist/src/filters/filters.d.ts +21 -0
  100. package/dist/src/filters/index.d.ts +5 -0
  101. package/dist/src/filters/shaders/baseFilter.d.ts +4 -0
  102. package/dist/src/filters/shaders/blendColor.d.ts +13 -0
  103. package/dist/src/filters/shaders/blendImage.d.ts +3 -0
  104. package/dist/src/filters/shaders/blur.d.ts +2 -0
  105. package/dist/src/filters/shaders/brightness.d.ts +2 -0
  106. package/dist/src/filters/shaders/colorMatrix.d.ts +2 -0
  107. package/dist/src/filters/shaders/constrast.d.ts +2 -0
  108. package/dist/src/filters/shaders/convolute.d.ts +11 -0
  109. package/dist/src/filters/shaders/gamma.d.ts +2 -0
  110. package/dist/src/filters/shaders/grayscale.d.ts +3 -0
  111. package/dist/src/filters/shaders/invert.d.ts +2 -0
  112. package/dist/src/filters/shaders/noise.d.ts +2 -0
  113. package/dist/src/filters/shaders/pixelate.d.ts +2 -0
  114. package/dist/src/filters/shaders/removeColor.d.ts +2 -0
  115. package/dist/src/filters/shaders/saturation.d.ts +2 -0
  116. package/dist/src/filters/shaders/vibrance.d.ts +2 -0
  117. package/dist/src/filters/typedefs.d.ts +49 -0
  118. package/dist/src/gradient/Gradient.d.ts +149 -0
  119. package/dist/src/gradient/constants.d.ts +15 -0
  120. package/dist/src/gradient/parser/index.d.ts +4 -0
  121. package/dist/src/gradient/parser/misc.d.ts +4 -0
  122. package/dist/src/gradient/parser/parseColorStops.d.ts +3 -0
  123. package/dist/src/gradient/parser/parseCoords.d.ts +17 -0
  124. package/dist/src/gradient/typedefs.d.ts +93 -0
  125. package/dist/src/mixins/eraser_brush.mixin.d.ts +2 -0
  126. package/dist/src/parkinglot/canvas_animation.mixin.d.ts +2 -0
  127. package/dist/src/parkinglot/straighten.d.ts +2 -0
  128. package/dist/src/parser/applyViewboxTransform.d.ts +5 -0
  129. package/dist/src/parser/attributes.d.ts +6 -0
  130. package/dist/src/parser/constants.d.ts +53 -0
  131. package/dist/src/parser/doesSomeParentMatch.d.ts +2 -0
  132. package/dist/src/parser/elementById.d.ts +6 -0
  133. package/dist/src/parser/elementMatchesRule.d.ts +5 -0
  134. package/dist/src/parser/elements_parser.d.ts +3 -0
  135. package/dist/src/parser/getCSSRules.d.ts +7 -0
  136. package/dist/src/parser/getGlobalStylesForElement.d.ts +5 -0
  137. package/dist/src/parser/getGradientDefs.d.ts +7 -0
  138. package/dist/src/parser/getMultipleNodes.d.ts +2 -0
  139. package/dist/src/parser/getSvgRegex.d.ts +2 -0
  140. package/dist/src/parser/hasAncestorWithNodeName.d.ts +2 -0
  141. package/dist/src/parser/index.d.ts +10 -0
  142. package/dist/src/parser/loadSVGFromString.d.ts +12 -0
  143. package/dist/src/parser/loadSVGFromURL.d.ts +13 -0
  144. package/dist/src/parser/normalizeAttr.d.ts +2 -0
  145. package/dist/src/parser/normalizeValue.d.ts +2 -0
  146. package/dist/src/parser/parseAttributes.d.ts +9 -0
  147. package/dist/src/parser/parseElements.d.ts +11 -0
  148. package/dist/src/parser/parseFontDeclaration.d.ts +10 -0
  149. package/dist/src/parser/parsePointsAttribute.d.ts +12 -0
  150. package/dist/src/parser/parseSVGDocument.d.ts +15 -0
  151. package/dist/src/parser/parseStyleAttribute.d.ts +9 -0
  152. package/dist/src/parser/parseStyleObject.d.ts +2 -0
  153. package/dist/src/parser/parseStyleString.d.ts +2 -0
  154. package/dist/src/parser/parseTransformAttribute.d.ts +10 -0
  155. package/dist/src/parser/parseUseDirectives.d.ts +2 -0
  156. package/dist/src/parser/percent.d.ts +9 -0
  157. package/dist/src/parser/recursivelyParseGradientsXlink.d.ts +2 -0
  158. package/dist/src/parser/rotateMatrix.d.ts +2 -0
  159. package/dist/src/parser/scaleMatrix.d.ts +2 -0
  160. package/dist/src/parser/selectorMatches.d.ts +2 -0
  161. package/dist/src/parser/setStrokeFillOpacity.d.ts +6 -0
  162. package/dist/src/parser/skewMatrix.d.ts +2 -0
  163. package/dist/src/parser/translateMatrix.d.ts +2 -0
  164. package/dist/src/shapes/ActiveSelection.d.ts +82 -0
  165. package/dist/src/shapes/Circle.d.ts +99 -0
  166. package/dist/src/shapes/Ellipse.d.ts +84 -0
  167. package/dist/src/shapes/Group.d.ts +408 -0
  168. package/dist/src/shapes/IText/DraggableTextDelegate.d.ts +78 -0
  169. package/dist/src/shapes/IText/IText.d.ts +335 -0
  170. package/dist/src/shapes/IText/ITextBehavior.d.ts +287 -0
  171. package/dist/src/shapes/IText/ITextClickBehavior.d.ts +83 -0
  172. package/dist/src/shapes/IText/ITextKeyBehavior.d.ts +195 -0
  173. package/dist/src/shapes/IText/constants.d.ts +13 -0
  174. package/dist/src/shapes/Image.d.ts +311 -0
  175. package/dist/src/shapes/Line.d.ts +126 -0
  176. package/dist/src/shapes/Object/AnimatableObject.d.ts +33 -0
  177. package/dist/src/shapes/Object/FabricObject.d.ts +11 -0
  178. package/dist/src/shapes/Object/FabricObjectSVGExportMixin.d.ts +74 -0
  179. package/dist/src/shapes/Object/InteractiveObject.d.ts +296 -0
  180. package/dist/src/shapes/Object/Object.d.ts +594 -0
  181. package/dist/src/shapes/Object/ObjectGeometry.d.ts +327 -0
  182. package/dist/src/shapes/Object/ObjectOrigin.d.ts +109 -0
  183. package/dist/src/shapes/Object/StackedObject.d.ts +72 -0
  184. package/dist/src/shapes/Object/defaultValues.d.ts +76 -0
  185. package/dist/src/shapes/Object/types/BaseProps.d.ts +84 -0
  186. package/dist/src/shapes/Object/types/BorderProps.d.ts +37 -0
  187. package/dist/src/shapes/Object/types/ControlProps.d.ts +62 -0
  188. package/dist/src/shapes/Object/types/FabricObjectProps.d.ts +96 -0
  189. package/dist/src/shapes/Object/types/FillStrokeProps.d.ts +80 -0
  190. package/dist/src/shapes/Object/types/LockInteractionProps.d.ts +51 -0
  191. package/dist/src/shapes/Object/types/ObjectProps.d.ts +42 -0
  192. package/dist/src/shapes/Object/types/SerializedObjectProps.d.ts +66 -0
  193. package/dist/src/shapes/Object/types/index.d.ts +6 -0
  194. package/dist/src/shapes/Path.d.ts +130 -0
  195. package/dist/src/shapes/Polygon.d.ts +9 -0
  196. package/dist/src/shapes/Polyline.d.ts +140 -0
  197. package/dist/src/shapes/Rect.d.ts +76 -0
  198. package/dist/src/shapes/Text/StyledText.d.ts +119 -0
  199. package/dist/src/shapes/Text/Text.d.ts +673 -0
  200. package/dist/src/shapes/Text/TextSVGExportMixin.d.ts +32 -0
  201. package/dist/src/shapes/Text/constants.d.ts +7 -0
  202. package/dist/src/shapes/Textbox.d.ts +185 -0
  203. package/dist/src/shapes/Triangle.d.ts +25 -0
  204. package/dist/src/typedefs.d.ts +90 -0
  205. package/dist/src/util/animation/AnimationBase.d.ts +54 -0
  206. package/dist/src/util/animation/AnimationFrameProvider.d.ts +3 -0
  207. package/dist/src/util/animation/AnimationRegistry.d.ts +29 -0
  208. package/dist/src/util/animation/ArrayAnimation.d.ts +10 -0
  209. package/dist/src/util/animation/ColorAnimation.d.ts +11 -0
  210. package/dist/src/util/animation/ValueAnimation.d.ts +10 -0
  211. package/dist/src/util/animation/animate.d.ts +37 -0
  212. package/dist/src/util/animation/easing.d.ts +130 -0
  213. package/dist/src/util/animation/types.d.ts +87 -0
  214. package/dist/src/util/applyMixins.d.ts +8 -0
  215. package/dist/src/util/dom_event.d.ts +5 -0
  216. package/dist/src/util/dom_misc.d.ts +39 -0
  217. package/dist/src/util/dom_request.d.ts +14 -0
  218. package/dist/src/util/dom_style.d.ts +7 -0
  219. package/dist/src/util/fireEvent.d.ts +3 -0
  220. package/dist/src/util/index.d.ts +35 -0
  221. package/dist/src/util/internals/cloneDeep.d.ts +2 -0
  222. package/dist/src/util/internals/getRandomInt.d.ts +8 -0
  223. package/dist/src/util/internals/ifNaN.d.ts +8 -0
  224. package/dist/src/util/internals/index.d.ts +4 -0
  225. package/dist/src/util/internals/removeFromArray.d.ts +9 -0
  226. package/dist/src/util/internals/uid.d.ts +2 -0
  227. package/dist/src/util/lang_string.d.ts +22 -0
  228. package/dist/src/util/misc/boundingBoxFromPoints.d.ts +9 -0
  229. package/dist/src/util/misc/capValue.d.ts +2 -0
  230. package/dist/src/util/misc/cos.d.ts +10 -0
  231. package/dist/src/util/misc/dom.d.ts +28 -0
  232. package/dist/src/util/misc/findScaleTo.d.ts +29 -0
  233. package/dist/src/util/misc/groupSVGElements.d.ts +9 -0
  234. package/dist/src/util/misc/isTransparent.d.ts +11 -0
  235. package/dist/src/util/misc/matrix.d.ts +92 -0
  236. package/dist/src/util/misc/mergeClipPaths.d.ts +23 -0
  237. package/dist/src/util/misc/objectEnlive.d.ts +56 -0
  238. package/dist/src/util/misc/objectTransforms.d.ts +68 -0
  239. package/dist/src/util/misc/pick.d.ts +9 -0
  240. package/dist/src/util/misc/planeChange.d.ts +84 -0
  241. package/dist/src/util/misc/projectStroke/StrokeLineCapProjections.d.ts +51 -0
  242. package/dist/src/util/misc/projectStroke/StrokeLineJoinProjections.d.ts +81 -0
  243. package/dist/src/util/misc/projectStroke/StrokeProjectionsBase.d.ts +25 -0
  244. package/dist/src/util/misc/projectStroke/index.d.ts +11 -0
  245. package/dist/src/util/misc/projectStroke/types.d.ts +23 -0
  246. package/dist/src/util/misc/radiansDegreesConversion.d.ts +14 -0
  247. package/dist/src/util/misc/resolveOrigin.d.ts +9 -0
  248. package/dist/src/util/misc/rotatePoint.d.ts +12 -0
  249. package/dist/src/util/misc/sin.d.ts +10 -0
  250. package/dist/src/util/misc/svgParsing.d.ts +53 -0
  251. package/dist/src/util/misc/textStyles.d.ts +32 -0
  252. package/dist/src/util/misc/toFixed.d.ts +8 -0
  253. package/dist/src/util/misc/vectors.d.ts +57 -0
  254. package/dist/src/util/path/index.d.ts +96 -0
  255. package/dist/src/util/path/regex.d.ts +3 -0
  256. package/dist/src/util/path/typechecks.d.ts +24 -0
  257. package/dist/src/util/path/typedefs.d.ts +220 -0
  258. package/dist/src/util/transform_matrix_removal.d.ts +14 -0
  259. package/dist/src/util/types.d.ts +19 -0
  260. package/fabric.ts +51 -0
  261. package/index.node.ts +37 -0
  262. package/index.ts +1 -0
  263. package/package.json +100 -40
  264. package/publish.js +0 -26
  265. package/rollup.config.mjs +91 -0
  266. package/rollup.test.config.js +24 -0
  267. package/scripts/build.mjs +50 -0
  268. package/scripts/buildLock.mjs +115 -0
  269. package/scripts/buildReporter.mjs +15 -0
  270. package/scripts/buildStats.mjs +139 -0
  271. package/scripts/dirname.mjs +14 -0
  272. package/scripts/git.mjs +36 -0
  273. package/scripts/index.mjs +564 -0
  274. package/scripts/sandbox.mjs +149 -0
  275. package/src/ClassRegistry.ts +56 -0
  276. package/src/Collection.ts +346 -0
  277. package/src/CommonMethods.ts +63 -0
  278. package/src/EventTypeDefs.ts +296 -0
  279. package/src/Intersection.ts +302 -0
  280. package/src/Observable.ts +181 -0
  281. package/src/Pattern.ts +227 -0
  282. package/src/Point.ts +388 -0
  283. package/src/Shadow.ts +214 -0
  284. package/src/brushes/{base_brush.class.js → BaseBrush.ts} +65 -42
  285. package/src/brushes/CircleBrush.ts +145 -0
  286. package/src/brushes/PatternBrush.ts +70 -0
  287. package/src/brushes/PencilBrush.ts +300 -0
  288. package/src/brushes/SprayBrush.ts +219 -0
  289. package/src/cache.ts +90 -0
  290. package/src/canvas/Canvas.ts +1607 -0
  291. package/src/canvas/SelectableCanvas.ts +1608 -0
  292. package/src/canvas/StaticCanvas.ts +1734 -0
  293. package/src/canvas/TextEditingManager.ts +48 -0
  294. package/src/canvas/canvas_gestures.mixin.ts +207 -0
  295. package/src/color/Color.ts +404 -0
  296. package/src/color/color_map.ts +154 -0
  297. package/src/color/constants.ts +26 -0
  298. package/src/color/util.ts +32 -0
  299. package/src/config.ts +159 -0
  300. package/src/constants.ts +20 -0
  301. package/src/controls/Control.ts +380 -0
  302. package/src/controls/changeWidth.ts +52 -0
  303. package/src/controls/commonControls.ts +105 -0
  304. package/src/controls/controlRendering.ts +138 -0
  305. package/src/controls/drag.ts +31 -0
  306. package/src/controls/index.ts +22 -0
  307. package/src/controls/polyControl.ts +135 -0
  308. package/src/controls/rotate.ts +87 -0
  309. package/src/controls/scale.ts +277 -0
  310. package/src/controls/scaleSkew.ts +92 -0
  311. package/src/controls/skew.ts +242 -0
  312. package/src/controls/util.ts +154 -0
  313. package/src/controls/wrapWithFireEvent.ts +25 -0
  314. package/src/controls/wrapWithFixedAnchor.ts +20 -0
  315. package/src/env/browser.ts +32 -0
  316. package/src/env/index.ts +24 -0
  317. package/src/env/node.ts +56 -0
  318. package/src/env/types.ts +15 -0
  319. package/src/filters/{base_filter.class.js → BaseFilter.ts} +192 -151
  320. package/src/filters/BlendColor.ts +217 -0
  321. package/src/filters/BlendImage.ts +228 -0
  322. package/src/filters/Blur.ts +179 -0
  323. package/src/filters/Boilerplate.ts +94 -0
  324. package/src/filters/Brightness.ts +83 -0
  325. package/src/filters/Canvas2dFilterBackend.ts +65 -0
  326. package/src/filters/ColorMatrix.ts +145 -0
  327. package/src/filters/ColorMatrixFilters.ts +77 -0
  328. package/src/filters/Composed.ts +76 -0
  329. package/src/filters/Contrast.ts +82 -0
  330. package/src/filters/Convolute.ts +184 -0
  331. package/src/filters/FilterBackend.ts +34 -0
  332. package/src/filters/GLProbes/GLProbe.ts +11 -0
  333. package/src/filters/GLProbes/NodeGLProbe.ts +15 -0
  334. package/src/filters/GLProbes/WebGLProbe.ts +46 -0
  335. package/src/filters/Gamma.ts +110 -0
  336. package/src/filters/Grayscale.ts +102 -0
  337. package/src/filters/HueRotation.ts +62 -0
  338. package/src/filters/Invert.ts +99 -0
  339. package/src/filters/Noise.ts +94 -0
  340. package/src/filters/Pixelate.ts +96 -0
  341. package/src/filters/RemoveColor.ts +135 -0
  342. package/src/filters/Resize.ts +538 -0
  343. package/src/filters/Saturation.ts +87 -0
  344. package/src/filters/Vibrance.ts +88 -0
  345. package/src/filters/WebGLFilterBackend.ts +430 -0
  346. package/src/filters/filters.ts +28 -0
  347. package/src/filters/index.ts +5 -0
  348. package/src/filters/shaders/baseFilter.ts +19 -0
  349. package/src/filters/shaders/blendColor.ts +33 -0
  350. package/src/filters/shaders/blendImage.ts +32 -0
  351. package/src/filters/shaders/blur.ts +24 -0
  352. package/src/filters/shaders/brightness.ts +11 -0
  353. package/src/filters/shaders/colorMatrix.ts +12 -0
  354. package/src/filters/shaders/constrast.ts +11 -0
  355. package/src/filters/shaders/convolute.ts +154 -0
  356. package/src/filters/shaders/gamma.ts +15 -0
  357. package/src/filters/shaders/grayscale.ts +36 -0
  358. package/src/filters/shaders/invert.ts +19 -0
  359. package/src/filters/shaders/noise.ts +16 -0
  360. package/src/filters/shaders/pixelate.ts +19 -0
  361. package/src/filters/shaders/removeColor.ts +13 -0
  362. package/src/filters/shaders/saturation.ts +15 -0
  363. package/src/filters/shaders/vibrance.ts +16 -0
  364. package/src/filters/typedefs.ts +65 -0
  365. package/src/gradient/Gradient.ts +406 -0
  366. package/src/gradient/constants.ts +12 -0
  367. package/src/gradient/parser/index.ts +3 -0
  368. package/src/gradient/parser/misc.ts +13 -0
  369. package/src/gradient/parser/parseColorStops.ts +56 -0
  370. package/src/gradient/parser/parseCoords.ts +73 -0
  371. package/src/gradient/typedefs.ts +104 -0
  372. package/src/mixins/{eraser_brush.mixin.js → eraser_brush.mixin.ts} +350 -239
  373. package/src/parkinglot/canvas_animation.mixin.ts +121 -0
  374. package/src/parkinglot/straighten.ts +58 -0
  375. package/src/parser/applyViewboxTransform.ts +157 -0
  376. package/src/parser/attributes.ts +25 -0
  377. package/src/parser/constants.ts +115 -0
  378. package/src/parser/doesSomeParentMatch.ts +19 -0
  379. package/src/parser/elementById.ts +21 -0
  380. package/src/parser/elementMatchesRule.ts +16 -0
  381. package/src/parser/elements_parser.ts +191 -0
  382. package/src/parser/getCSSRules.ts +62 -0
  383. package/src/parser/getGlobalStylesForElement.ts +19 -0
  384. package/src/parser/getGradientDefs.ts +31 -0
  385. package/src/parser/getMultipleNodes.ts +15 -0
  386. package/src/parser/getSvgRegex.ts +5 -0
  387. package/src/parser/hasAncestorWithNodeName.ts +14 -0
  388. package/src/parser/index.ts +9 -0
  389. package/src/parser/loadSVGFromString.ts +26 -0
  390. package/src/parser/loadSVGFromURL.ts +40 -0
  391. package/src/parser/normalizeAttr.ts +10 -0
  392. package/src/parser/normalizeValue.ts +63 -0
  393. package/src/parser/parseAttributes.ts +90 -0
  394. package/src/parser/parseElements.ts +28 -0
  395. package/src/parser/parseFontDeclaration.ts +44 -0
  396. package/src/parser/parsePointsAttribute.ts +34 -0
  397. package/src/parser/parseSVGDocument.ts +93 -0
  398. package/src/parser/parseStyleAttribute.ts +27 -0
  399. package/src/parser/parseStyleObject.ts +15 -0
  400. package/src/parser/parseStyleString.ts +16 -0
  401. package/src/parser/parseTransformAttribute.ts +155 -0
  402. package/src/parser/parseUseDirectives.ts +78 -0
  403. package/src/parser/percent.ts +27 -0
  404. package/src/parser/recursivelyParseGradientsXlink.ts +42 -0
  405. package/src/parser/rotateMatrix.ts +21 -0
  406. package/src/parser/scaleMatrix.ts +9 -0
  407. package/src/parser/selectorMatches.ts +25 -0
  408. package/src/parser/setStrokeFillOpacity.ts +40 -0
  409. package/src/parser/skewMatrix.ts +6 -0
  410. package/src/parser/translateMatrix.ts +8 -0
  411. package/src/shapes/ActiveSelection.ts +189 -0
  412. package/src/shapes/Circle.ts +242 -0
  413. package/src/shapes/Ellipse.ts +179 -0
  414. package/src/shapes/Group.ts +1100 -0
  415. package/src/shapes/IText/DraggableTextDelegate.ts +382 -0
  416. package/src/shapes/IText/IText.ts +693 -0
  417. package/src/shapes/IText/ITextBehavior.ts +1064 -0
  418. package/src/shapes/IText/ITextClickBehavior.ts +325 -0
  419. package/src/shapes/IText/ITextKeyBehavior.ts +685 -0
  420. package/src/shapes/IText/constants.ts +47 -0
  421. package/src/shapes/Image.ts +841 -0
  422. package/src/shapes/Line.ts +346 -0
  423. package/src/shapes/Object/AnimatableObject.ts +106 -0
  424. package/src/shapes/Object/FabricObject.ts +29 -0
  425. package/src/shapes/Object/FabricObjectSVGExportMixin.ts +277 -0
  426. package/src/shapes/Object/InteractiveObject.ts +672 -0
  427. package/src/shapes/Object/Object.ts +1561 -0
  428. package/src/shapes/Object/ObjectGeometry.ts +813 -0
  429. package/src/shapes/Object/ObjectOrigin.ts +276 -0
  430. package/src/shapes/Object/StackedObject.ts +206 -0
  431. package/src/shapes/Object/defaultValues.ts +108 -0
  432. package/src/shapes/Object/types/BaseProps.ts +96 -0
  433. package/src/shapes/Object/types/BorderProps.ts +40 -0
  434. package/src/shapes/Object/types/ControlProps.ts +69 -0
  435. package/src/shapes/Object/types/FabricObjectProps.ts +111 -0
  436. package/src/shapes/Object/types/FillStrokeProps.ts +90 -0
  437. package/src/shapes/Object/types/LockInteractionProps.ts +57 -0
  438. package/src/shapes/Object/types/ObjectProps.ts +46 -0
  439. package/src/shapes/Object/types/SerializedObjectProps.ts +73 -0
  440. package/src/shapes/Object/types/index.ts +8 -0
  441. package/src/shapes/Path.ts +416 -0
  442. package/src/shapes/Polygon.ts +20 -0
  443. package/src/shapes/Polyline.ts +359 -0
  444. package/src/shapes/Rect.ts +233 -0
  445. package/src/shapes/Text/StyledText.ts +329 -0
  446. package/src/shapes/Text/Text.ts +1884 -0
  447. package/src/shapes/Text/TextSVGExportMixin.ts +288 -0
  448. package/src/shapes/Text/constants.ts +91 -0
  449. package/src/shapes/Textbox.ts +477 -0
  450. package/src/shapes/Triangle.ts +60 -0
  451. package/src/typedefs.ts +115 -0
  452. package/src/util/animation/AnimationBase.ts +166 -0
  453. package/src/util/animation/AnimationFrameProvider.ts +9 -0
  454. package/src/util/animation/AnimationRegistry.ts +58 -0
  455. package/src/util/animation/ArrayAnimation.ts +27 -0
  456. package/src/util/animation/ColorAnimation.ts +74 -0
  457. package/src/util/animation/ValueAnimation.ts +29 -0
  458. package/src/util/animation/animate.ts +74 -0
  459. package/src/util/animation/easing.ts +327 -0
  460. package/src/util/animation/types.ts +136 -0
  461. package/src/util/applyMixins.ts +22 -0
  462. package/src/util/dom_event.ts +28 -0
  463. package/src/util/dom_misc.ts +121 -0
  464. package/src/util/dom_request.ts +64 -0
  465. package/src/util/dom_style.ts +20 -0
  466. package/src/util/fireEvent.ts +15 -0
  467. package/src/util/index.ts +102 -0
  468. package/src/util/internals/cloneDeep.ts +2 -0
  469. package/src/util/internals/getRandomInt.ts +8 -0
  470. package/src/util/internals/ifNaN.ts +9 -0
  471. package/src/util/internals/index.ts +3 -0
  472. package/src/util/internals/removeFromArray.ts +14 -0
  473. package/src/util/internals/uid.ts +3 -0
  474. package/src/util/lang_string.ts +79 -0
  475. package/src/util/misc/boundingBoxFromPoints.ts +37 -0
  476. package/src/util/misc/capValue.ts +2 -0
  477. package/src/util/misc/cos.ts +24 -0
  478. package/src/util/misc/dom.ts +50 -0
  479. package/src/util/misc/findScaleTo.ts +44 -0
  480. package/src/util/misc/groupSVGElements.ts +15 -0
  481. package/src/util/misc/isTransparent.ts +28 -0
  482. package/src/util/misc/matrix.ts +207 -0
  483. package/src/util/misc/mergeClipPaths.ts +40 -0
  484. package/src/util/misc/objectEnlive.ts +189 -0
  485. package/src/util/misc/objectTransforms.ts +129 -0
  486. package/src/util/misc/pick.ts +29 -0
  487. package/src/util/misc/planeChange.ts +136 -0
  488. package/src/util/misc/projectStroke/StrokeLineCapProjections.ts +112 -0
  489. package/src/util/misc/projectStroke/StrokeLineJoinProjections.ts +226 -0
  490. package/src/util/misc/projectStroke/StrokeProjectionsBase.ts +75 -0
  491. package/src/util/misc/projectStroke/index.ts +53 -0
  492. package/src/util/misc/projectStroke/types.ts +24 -0
  493. package/src/util/misc/radiansDegreesConversion.ts +18 -0
  494. package/src/util/misc/resolveOrigin.ts +22 -0
  495. package/src/util/misc/rotatePoint.ts +15 -0
  496. package/src/util/misc/sin.ts +26 -0
  497. package/src/util/misc/svgParsing.ts +181 -0
  498. package/src/util/misc/textStyles.ts +134 -0
  499. package/src/util/misc/toFixed.ts +8 -0
  500. package/src/util/misc/vectors.ts +82 -0
  501. package/src/util/path/index.ts +1038 -0
  502. package/src/util/path/regex.ts +41 -0
  503. package/src/util/path/typechecks.ts +145 -0
  504. package/src/util/path/typedefs.ts +305 -0
  505. package/src/util/transform_matrix_removal.ts +60 -0
  506. package/src/util/types.ts +78 -0
  507. package/tsconfig.json +106 -0
  508. package/HEADER.js +0 -203
  509. package/build.js +0 -287
  510. package/dist/fabric.js +0 -31187
  511. package/dist/fabric.min.js +0 -1
  512. package/old-travis-reference.yml +0 -97
  513. package/src/brushes/circle_brush.class.js +0 -144
  514. package/src/brushes/pattern_brush.class.js +0 -61
  515. package/src/brushes/pencil_brush.class.js +0 -310
  516. package/src/brushes/spray_brush.class.js +0 -219
  517. package/src/canvas.class.js +0 -1312
  518. package/src/color.class.js +0 -636
  519. package/src/control.class.js +0 -339
  520. package/src/controls.actions.js +0 -740
  521. package/src/controls.render.js +0 -99
  522. package/src/elements_parser.js +0 -152
  523. package/src/filters/2d_backend.class.js +0 -65
  524. package/src/filters/blendcolor_filter.class.js +0 -251
  525. package/src/filters/blendimage_filter.class.js +0 -247
  526. package/src/filters/blur_filter.class.js +0 -217
  527. package/src/filters/brightness_filter.class.js +0 -113
  528. package/src/filters/colormatrix_filter.class.js +0 -159
  529. package/src/filters/composed_filter.class.js +0 -72
  530. package/src/filters/contrast_filter.class.js +0 -113
  531. package/src/filters/convolute_filter.class.js +0 -352
  532. package/src/filters/filter_boilerplate.js +0 -111
  533. package/src/filters/filter_generator.js +0 -85
  534. package/src/filters/gamma_filter.class.js +0 -136
  535. package/src/filters/grayscale_filter.class.js +0 -154
  536. package/src/filters/hue_rotation.class.js +0 -107
  537. package/src/filters/invert_filter.class.js +0 -111
  538. package/src/filters/noise_filter.class.js +0 -134
  539. package/src/filters/pixelate_filter.class.js +0 -137
  540. package/src/filters/removecolor_filter.class.js +0 -173
  541. package/src/filters/resize_filter.class.js +0 -490
  542. package/src/filters/saturate_filter.class.js +0 -119
  543. package/src/filters/vibrance_filter.class.js +0 -122
  544. package/src/filters/webgl_backend.class.js +0 -396
  545. package/src/globalFabric.js +0 -4
  546. package/src/gradient.class.js +0 -490
  547. package/src/intersection.class.js +0 -172
  548. package/src/log.js +0 -11
  549. package/src/mixins/animation.mixin.js +0 -231
  550. package/src/mixins/canvas_dataurl_exporter.mixin.js +0 -97
  551. package/src/mixins/canvas_events.mixin.js +0 -974
  552. package/src/mixins/canvas_gestures.mixin.js +0 -149
  553. package/src/mixins/canvas_grouping.mixin.js +0 -177
  554. package/src/mixins/canvas_serialization.mixin.js +0 -228
  555. package/src/mixins/collection.mixin.js +0 -170
  556. package/src/mixins/default_controls.js +0 -114
  557. package/src/mixins/itext.svg_export.js +0 -241
  558. package/src/mixins/itext_behavior.mixin.js +0 -940
  559. package/src/mixins/itext_click_behavior.mixin.js +0 -278
  560. package/src/mixins/itext_key_behavior.mixin.js +0 -694
  561. package/src/mixins/object.svg_export.js +0 -258
  562. package/src/mixins/object_geometry.mixin.js +0 -683
  563. package/src/mixins/object_interactivity.mixin.js +0 -314
  564. package/src/mixins/object_origin.mixin.js +0 -255
  565. package/src/mixins/object_stacking.mixin.js +0 -80
  566. package/src/mixins/object_straightening.mixin.js +0 -80
  567. package/src/mixins/observable.mixin.js +0 -141
  568. package/src/mixins/shared_methods.mixin.js +0 -94
  569. package/src/mixins/stateful.mixin.js +0 -107
  570. package/src/mixins/text_style.mixin.js +0 -324
  571. package/src/parser.js +0 -1090
  572. package/src/pattern.class.js +0 -189
  573. package/src/point.class.js +0 -337
  574. package/src/shadow.class.js +0 -195
  575. package/src/shapes/active_selection.class.js +0 -155
  576. package/src/shapes/circle.class.js +0 -210
  577. package/src/shapes/ellipse.class.js +0 -181
  578. package/src/shapes/group.class.js +0 -593
  579. package/src/shapes/image.class.js +0 -764
  580. package/src/shapes/itext.class.js +0 -526
  581. package/src/shapes/line.class.js +0 -324
  582. package/src/shapes/object.class.js +0 -2008
  583. package/src/shapes/path.class.js +0 -384
  584. package/src/shapes/polygon.class.js +0 -81
  585. package/src/shapes/polyline.class.js +0 -268
  586. package/src/shapes/rect.class.js +0 -187
  587. package/src/shapes/text.class.js +0 -1696
  588. package/src/shapes/textbox.class.js +0 -461
  589. package/src/shapes/triangle.class.js +0 -93
  590. package/src/static_canvas.class.js +0 -1881
  591. package/src/util/anim_ease.js +0 -398
  592. package/src/util/animate.js +0 -254
  593. package/src/util/animate_color.js +0 -74
  594. package/src/util/dom_event.js +0 -50
  595. package/src/util/dom_misc.js +0 -300
  596. package/src/util/dom_request.js +0 -54
  597. package/src/util/dom_style.js +0 -70
  598. package/src/util/lang_array.js +0 -94
  599. package/src/util/lang_class.js +0 -115
  600. package/src/util/lang_object.js +0 -75
  601. package/src/util/lang_string.js +0 -110
  602. package/src/util/misc.js +0 -1330
  603. package/src/util/named_accessors.mixin.js +0 -428
  604. package/src/util/path.js +0 -829
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 XY {
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 XY {
14
+ declare x: number;
15
+
16
+ declare y: number;
17
+
18
+ constructor();
19
+ constructor(x: number, y: number);
20
+ constructor(point: XY);
21
+ constructor(arg0: number | XY = 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 {XY} that
34
+ * @return {Point} new Point instance with added values
35
+ */
36
+ add(that: XY): 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 {XY} that
43
+ * @return {Point} thisArg
44
+ * @chainable
45
+ * @deprecated
46
+ */
47
+ addEquals(that: XY): 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 {XY} that
78
+ * @return {Point} new Point object with subtracted values
79
+ */
80
+ subtract(that: XY): 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 {XY} that
87
+ * @return {Point} thisArg
88
+ * @chainable
89
+ * @deprecated
90
+ */
91
+ subtractEquals(that: XY): 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 {XY} that
122
+ * @return {Point}
123
+ */
124
+ multiply(that: XY): 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 {XY} that
153
+ * @return {Point}
154
+ */
155
+ divide(that: XY): 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 {XY} that
184
+ * @return {Boolean}
185
+ */
186
+ eq(that: XY): 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 {XY} that
193
+ * @return {Boolean}
194
+ */
195
+ lt(that: XY): 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 {XY} that
202
+ * @return {Boolean}
203
+ */
204
+ lte(that: XY): 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 {XY} that
212
+ * @return {Boolean}
213
+ */
214
+ gt(that: XY): 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 {XY} that
221
+ * @return {Boolean}
222
+ */
223
+ gte(that: XY): 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 {XY} that
230
+ * @param {Number} t , position of interpolation, between 0 and 1 default 0.5
231
+ * @return {Point}
232
+ */
233
+ lerp(that: XY, 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 {XY} that
244
+ * @return {Number}
245
+ */
246
+ distanceFrom(that: XY): 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 {XY} that
255
+ * @return {Point}
256
+ */
257
+ midPointFrom(that: XY): 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 {XY} that
264
+ * @return {Point}
265
+ */
266
+ min(that: XY): 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 {XY} that
273
+ * @return {Point}
274
+ */
275
+ max(that: XY): 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 {XY} that
322
+ * @chainable
323
+ */
324
+ setFromPoint(that: XY) {
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 {XY} that
333
+ */
334
+ swap(that: XY) {
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 {XY} 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: XY = 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,214 @@
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 { pickBy } from './util/misc/pick';
8
+ import { degreesToRadians } from './util/misc/radiansDegreesConversion';
9
+ import { toFixed } from './util/misc/toFixed';
10
+ import { rotateVector } from './util/misc/vectors';
11
+
12
+ export const shadowDefaultValues: Partial<TClassProperties<Shadow>> = {
13
+ color: 'rgb(0,0,0)',
14
+ blur: 0,
15
+ offsetX: 0,
16
+ offsetY: 0,
17
+ affectStroke: false,
18
+ includeDefaultValues: true,
19
+ nonScaling: false,
20
+ };
21
+
22
+ type TShadowSerializedProps = {
23
+ color: string;
24
+ blur: number;
25
+ offsetX: number;
26
+ offsetY: number;
27
+ affectStroke: boolean;
28
+ nonScaling: boolean;
29
+ };
30
+
31
+ export class Shadow {
32
+ /**
33
+ * Shadow color
34
+ * @type String
35
+ * @default
36
+ */
37
+ declare color: string;
38
+
39
+ /**
40
+ * Shadow blur
41
+ * @type Number
42
+ */
43
+ declare blur: number;
44
+
45
+ /**
46
+ * Shadow horizontal offset
47
+ * @type Number
48
+ * @default
49
+ */
50
+ declare offsetX: number;
51
+
52
+ /**
53
+ * Shadow vertical offset
54
+ * @type Number
55
+ * @default
56
+ */
57
+ declare offsetY: number;
58
+
59
+ /**
60
+ * Whether the shadow should affect stroke operations
61
+ * @type Boolean
62
+ * @default
63
+ */
64
+ declare affectStroke: boolean;
65
+
66
+ /**
67
+ * Indicates whether toObject should include default values
68
+ * @type Boolean
69
+ * @default
70
+ */
71
+ declare includeDefaultValues: boolean;
72
+
73
+ /**
74
+ * When `false`, the shadow will scale with the object.
75
+ * When `true`, the shadow's offsetX, offsetY, and blur will not be affected by the object's scale.
76
+ * default to false
77
+ * @type Boolean
78
+ * @default
79
+ */
80
+ declare nonScaling: boolean;
81
+
82
+ declare id: number;
83
+
84
+ static ownDefaults = shadowDefaultValues;
85
+ /**
86
+ * @see {@link http://fabricjs.com/shadows|Shadow demo}
87
+ * @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")
88
+ */
89
+ constructor(options: Partial<TClassProperties<Shadow>>);
90
+ constructor(svgAttribute: string);
91
+ constructor(arg0: string | Partial<TClassProperties<Shadow>>) {
92
+ const options: Partial<TClassProperties<Shadow>> =
93
+ typeof arg0 === 'string' ? Shadow.parseShadow(arg0) : arg0;
94
+ Object.assign(this, (this.constructor as typeof Shadow).ownDefaults);
95
+ for (const prop in options) {
96
+ // @ts-expect-error for loops are so messy in TS
97
+ this[prop] = options[prop];
98
+ }
99
+
100
+ this.id = uid();
101
+ }
102
+
103
+ /**
104
+ * @param {String} value Shadow value to parse
105
+ * @return {Object} Shadow object with color, offsetX, offsetY and blur
106
+ */
107
+ static parseShadow(value: string) {
108
+ const shadowStr = value.trim(),
109
+ [__, offsetX = 0, offsetY = 0, blur = 0] = (
110
+ Shadow.reOffsetsAndBlur.exec(shadowStr) || []
111
+ ).map((value) => parseFloat(value) || 0),
112
+ color = (
113
+ shadowStr.replace(Shadow.reOffsetsAndBlur, '') || 'rgb(0,0,0)'
114
+ ).trim();
115
+
116
+ return {
117
+ color,
118
+ offsetX,
119
+ offsetY,
120
+ blur,
121
+ };
122
+ }
123
+
124
+ /**
125
+ * Returns a string representation of an instance
126
+ * @see http://www.w3.org/TR/css-text-decor-3/#text-shadow
127
+ * @return {String} Returns CSS3 text-shadow declaration
128
+ */
129
+ toString() {
130
+ return [this.offsetX, this.offsetY, this.blur, this.color].join('px ');
131
+ }
132
+
133
+ /**
134
+ * Returns SVG representation of a shadow
135
+ * @param {FabricObject} object
136
+ * @return {String} SVG representation of a shadow
137
+ */
138
+ toSVG(object: FabricObject) {
139
+ const offset = rotateVector(
140
+ new Point(this.offsetX, this.offsetY),
141
+ degreesToRadians(-object.angle)
142
+ ),
143
+ BLUR_BOX = 20,
144
+ color = new Color(this.color);
145
+ let fBoxX = 40,
146
+ fBoxY = 40;
147
+
148
+ if (object.width && object.height) {
149
+ //http://www.w3.org/TR/SVG/filters.html#FilterEffectsRegion
150
+ // we add some extra space to filter box to contain the blur ( 20 )
151
+ fBoxX =
152
+ toFixed(
153
+ (Math.abs(offset.x) + this.blur) / object.width,
154
+ config.NUM_FRACTION_DIGITS
155
+ ) *
156
+ 100 +
157
+ BLUR_BOX;
158
+ fBoxY =
159
+ toFixed(
160
+ (Math.abs(offset.y) + this.blur) / object.height,
161
+ config.NUM_FRACTION_DIGITS
162
+ ) *
163
+ 100 +
164
+ BLUR_BOX;
165
+ }
166
+ if (object.flipX) {
167
+ offset.x *= -1;
168
+ }
169
+ if (object.flipY) {
170
+ offset.y *= -1;
171
+ }
172
+
173
+ return `<filter id="SVGID_${this.id}" y="-${fBoxY}%" height="${
174
+ 100 + 2 * fBoxY
175
+ }%" x="-${fBoxX}%" width="${
176
+ 100 + 2 * fBoxX
177
+ }%" >\n\t<feGaussianBlur in="SourceAlpha" stdDeviation="${toFixed(
178
+ this.blur ? this.blur / 2 : 0,
179
+ config.NUM_FRACTION_DIGITS
180
+ )}"></feGaussianBlur>\n\t<feOffset dx="${toFixed(
181
+ offset.x,
182
+ config.NUM_FRACTION_DIGITS
183
+ )}" dy="${toFixed(
184
+ offset.y,
185
+ config.NUM_FRACTION_DIGITS
186
+ )}" 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`;
187
+ }
188
+
189
+ /**
190
+ * Returns object representation of a shadow
191
+ * @return {Object} Object representation of a shadow instance
192
+ */
193
+ toObject() {
194
+ const data: TShadowSerializedProps = {
195
+ color: this.color,
196
+ blur: this.blur,
197
+ offsetX: this.offsetX,
198
+ offsetY: this.offsetY,
199
+ affectStroke: this.affectStroke,
200
+ nonScaling: this.nonScaling,
201
+ };
202
+ const defaults = Shadow.ownDefaults;
203
+ return !this.includeDefaultValues
204
+ ? pickBy(data, (value, key) => value !== defaults[key])
205
+ : data;
206
+ }
207
+
208
+ /**
209
+ * Regex matching shadow offsetX, offsetY and blur (ex: "2px 2px 10px rgba(0,0,0,0.2)", "rgb(0,255,0) 2px 2px")
210
+ */
211
+ // eslint-disable-next-line max-len
212
+ static reOffsetsAndBlur =
213
+ /(?:\s|^)(-?\d+(?:\.\d*)?(?:px)?(?:\s?|$))?(-?\d+(?:\.\d*)?(?:px)?(?:\s?|$))?(\d+(?:\.\d*)?(?:px)?)?(?:\s?|$)(?:$|\s)/;
214
+ }