fabric 5.3.0 → 6.0.0-beta1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (533) hide show
  1. package/.babelrc +11 -0
  2. package/.babelrcAlt +19 -0
  3. package/.browserslistrc +5 -0
  4. package/.eslintrc.js +43 -0
  5. package/.eslintrc.json +38 -46
  6. package/.eslintrc_tests +12 -0
  7. package/.gitattributes +2 -0
  8. package/.prettierignore +16 -0
  9. package/.prettierrc +4 -0
  10. package/CHANGELOG.md +491 -189
  11. package/CONTRIBUTING.md +226 -58
  12. package/README.md +188 -239
  13. package/bower.json +1 -3
  14. package/dist/fabric.d.ts +1021 -0
  15. package/dist/index.cjs +28027 -0
  16. package/dist/index.cjs.map +1 -0
  17. package/dist/index.d.ts +2 -0
  18. package/dist/index.min.js +1 -0
  19. package/dist/index.mjs +27964 -0
  20. package/dist/index.mjs.map +1 -0
  21. package/dist/index.node.cjs +28092 -0
  22. package/dist/index.node.cjs.map +1 -0
  23. package/dist/index.node.d.ts +15 -0
  24. package/dist/index.node.mjs +28035 -0
  25. package/dist/index.node.mjs.map +1 -0
  26. package/dist/src/Collection.d.ts +126 -0
  27. package/dist/src/CommonMethods.d.ts +32 -0
  28. package/dist/src/EventTypeDefs.d.ts +226 -0
  29. package/dist/src/Intersection.d.ts +100 -0
  30. package/dist/src/Observable.d.ts +54 -0
  31. package/dist/src/Pattern.d.ts +104 -0
  32. package/dist/src/Point.d.ts +232 -0
  33. package/dist/src/Shadow.d.ts +87 -0
  34. package/dist/src/brushes/BaseBrush.d.ts +105 -0
  35. package/dist/src/brushes/CircleBrush.d.ts +49 -0
  36. package/dist/src/brushes/PatternBrush.d.ts +23 -0
  37. package/dist/src/brushes/PencilBrush.d.ts +92 -0
  38. package/dist/src/brushes/SprayBrush.d.ts +79 -0
  39. package/dist/src/cache.d.ts +46 -0
  40. package/dist/src/canvas/Canvas.d.ts +567 -0
  41. package/dist/src/canvas/SelectableCanvas.d.ts +723 -0
  42. package/dist/src/canvas/StaticCanvas.d.ts +751 -0
  43. package/dist/src/canvas/TextEditingManager.d.ts +17 -0
  44. package/dist/src/canvas/canvas_gestures.mixin.d.ts +2 -0
  45. package/dist/src/color/Color.d.ts +174 -0
  46. package/dist/src/color/color_map.d.ts +155 -0
  47. package/dist/src/color/constants.d.ts +22 -0
  48. package/dist/src/color/util.d.ts +12 -0
  49. package/dist/src/config.d.ts +115 -0
  50. package/dist/src/constants.d.ts +14 -0
  51. package/dist/src/controls/Control.d.ts +228 -0
  52. package/dist/src/controls/changeWidth.d.ts +13 -0
  53. package/dist/src/controls/controls.render.d.ts +29 -0
  54. package/dist/src/controls/default_controls.d.ts +50 -0
  55. package/dist/src/controls/drag.d.ts +12 -0
  56. package/dist/src/controls/polyControl.d.ts +5 -0
  57. package/dist/src/controls/rotate.d.ts +12 -0
  58. package/dist/src/controls/scale.d.ts +47 -0
  59. package/dist/src/controls/scaleSkew.d.ts +39 -0
  60. package/dist/src/controls/skew.d.ts +33 -0
  61. package/dist/src/controls/util.d.ts +41 -0
  62. package/dist/src/controls/wrapWithFireEvent.d.ts +8 -0
  63. package/dist/src/controls/wrapWithFixedAnchor.d.ts +9 -0
  64. package/dist/src/env/browser.d.ts +3 -0
  65. package/dist/src/env/index.d.ts +7 -0
  66. package/dist/src/env/node.d.ts +3 -0
  67. package/dist/src/env/types.d.ts +15 -0
  68. package/dist/src/filters/BaseFilter.d.ts +156 -0
  69. package/dist/src/filters/BlendColor.d.ts +80 -0
  70. package/dist/src/filters/BlendImage.d.ts +90 -0
  71. package/dist/src/filters/Blur.d.ts +50 -0
  72. package/dist/src/filters/Boilerplate.d.ts +46 -0
  73. package/dist/src/filters/Brightness.d.ts +46 -0
  74. package/dist/src/filters/Canvas2dFilterBackend.d.ts +27 -0
  75. package/dist/src/filters/ColorMatrix.d.ts +62 -0
  76. package/dist/src/filters/ColorMatrixFilters.d.ts +1169 -0
  77. package/dist/src/filters/Composed.d.ts +47 -0
  78. package/dist/src/filters/Contrast.d.ts +44 -0
  79. package/dist/src/filters/Convolute.d.ts +82 -0
  80. package/dist/src/filters/FilterBackend.d.ts +14 -0
  81. package/dist/src/filters/Gamma.d.ts +53 -0
  82. package/dist/src/filters/Grayscale.d.ts +45 -0
  83. package/dist/src/filters/HueRotation.d.ts +24 -0
  84. package/dist/src/filters/Invert.d.ts +54 -0
  85. package/dist/src/filters/Noise.d.ts +53 -0
  86. package/dist/src/filters/Pixelate.d.ts +43 -0
  87. package/dist/src/filters/RemoveColor.d.ts +62 -0
  88. package/dist/src/filters/Resize.d.ts +134 -0
  89. package/dist/src/filters/Saturation.d.ts +47 -0
  90. package/dist/src/filters/Vibrance.d.ts +47 -0
  91. package/dist/src/filters/WebGLFilterBackend.d.ts +126 -0
  92. package/dist/src/filters/WebGLProbe.d.ts +28 -0
  93. package/dist/src/filters/typedefs.d.ts +49 -0
  94. package/dist/src/gradient/Gradient.d.ts +149 -0
  95. package/dist/src/gradient/constants.d.ts +15 -0
  96. package/dist/src/gradient/parser/index.d.ts +4 -0
  97. package/dist/src/gradient/parser/misc.d.ts +4 -0
  98. package/dist/src/gradient/parser/parseColorStops.d.ts +6 -0
  99. package/dist/src/gradient/parser/parseCoords.d.ts +17 -0
  100. package/dist/src/gradient/typedefs.d.ts +93 -0
  101. package/dist/src/mixins/eraser_brush.mixin.d.ts +2 -0
  102. package/dist/src/mixins/stateful.mixin.d.ts +18 -0
  103. package/dist/src/parkinglot/canvas_animation.mixin.d.ts +2 -0
  104. package/dist/src/parkinglot/straighten.d.ts +2 -0
  105. package/dist/src/parser/applyViewboxTransform.d.ts +5 -0
  106. package/dist/src/parser/attributes.d.ts +6 -0
  107. package/dist/src/parser/constants.d.ts +54 -0
  108. package/dist/src/parser/doesSomeParentMatch.d.ts +2 -0
  109. package/dist/src/parser/elementById.d.ts +6 -0
  110. package/dist/src/parser/elementMatchesRule.d.ts +5 -0
  111. package/dist/src/parser/elements_parser.d.ts +3 -0
  112. package/dist/src/parser/getCSSRules.d.ts +7 -0
  113. package/dist/src/parser/getGlobalStylesForElement.d.ts +5 -0
  114. package/dist/src/parser/getGradientDefs.d.ts +7 -0
  115. package/dist/src/parser/getMultipleNodes.d.ts +2 -0
  116. package/dist/src/parser/getSvgRegex.d.ts +2 -0
  117. package/dist/src/parser/hasAncestorWithNodeName.d.ts +2 -0
  118. package/dist/src/parser/loadSVGFromString.d.ts +12 -0
  119. package/dist/src/parser/loadSVGFromURL.d.ts +13 -0
  120. package/dist/src/parser/normalizeAttr.d.ts +2 -0
  121. package/dist/src/parser/normalizeValue.d.ts +2 -0
  122. package/dist/src/parser/parseAttributes.d.ts +9 -0
  123. package/dist/src/parser/parseElements.d.ts +11 -0
  124. package/dist/src/parser/parseFontDeclaration.d.ts +10 -0
  125. package/dist/src/parser/parsePointsAttribute.d.ts +12 -0
  126. package/dist/src/parser/parseSVGDocument.d.ts +15 -0
  127. package/dist/src/parser/parseStyleAttribute.d.ts +9 -0
  128. package/dist/src/parser/parseStyleObject.d.ts +2 -0
  129. package/dist/src/parser/parseStyleString.d.ts +2 -0
  130. package/dist/src/parser/parseTransformAttribute.d.ts +10 -0
  131. package/dist/src/parser/parseUseDirectives.d.ts +2 -0
  132. package/dist/src/parser/percent.d.ts +9 -0
  133. package/dist/src/parser/recursivelyParseGradientsXlink.d.ts +2 -0
  134. package/dist/src/parser/rotateMatrix.d.ts +2 -0
  135. package/dist/src/parser/scaleMatrix.d.ts +2 -0
  136. package/dist/src/parser/selectorMatches.d.ts +2 -0
  137. package/dist/src/parser/setStrokeFillOpacity.d.ts +6 -0
  138. package/dist/src/parser/skewMatrix.d.ts +2 -0
  139. package/dist/src/parser/translateMatrix.d.ts +2 -0
  140. package/dist/src/shapes/ActiveSelection.d.ts +66 -0
  141. package/dist/src/shapes/Circle.d.ts +80 -0
  142. package/dist/src/shapes/Ellipse.d.ts +74 -0
  143. package/dist/src/shapes/Group.d.ts +381 -0
  144. package/dist/src/shapes/IText/DraggableTextDelegate.d.ts +78 -0
  145. package/dist/src/shapes/IText/IText.d.ts +322 -0
  146. package/dist/src/shapes/IText/ITextBehavior.d.ts +285 -0
  147. package/dist/src/shapes/IText/ITextClickBehavior.d.ts +81 -0
  148. package/dist/src/shapes/IText/ITextKeyBehavior.d.ts +193 -0
  149. package/dist/src/shapes/IText/constants.d.ts +13 -0
  150. package/dist/src/shapes/Image.d.ts +283 -0
  151. package/dist/src/shapes/Line.d.ts +117 -0
  152. package/dist/src/shapes/Object/AnimatableObject.d.ts +33 -0
  153. package/dist/src/shapes/Object/FabricObject.d.ts +9 -0
  154. package/dist/src/shapes/Object/FabricObjectSVGExportMixin.d.ts +74 -0
  155. package/dist/src/shapes/Object/InteractiveObject.d.ts +282 -0
  156. package/dist/src/shapes/Object/Object.d.ts +906 -0
  157. package/dist/src/shapes/Object/ObjectGeometry.d.ts +343 -0
  158. package/dist/src/shapes/Object/ObjectOrigin.d.ts +178 -0
  159. package/dist/src/shapes/Object/StackedObject.d.ts +62 -0
  160. package/dist/src/shapes/Object/defaultValues.d.ts +77 -0
  161. package/dist/src/shapes/Path.d.ts +123 -0
  162. package/dist/src/shapes/Polygon.d.ts +7 -0
  163. package/dist/src/shapes/Polyline.d.ts +130 -0
  164. package/dist/src/shapes/Rect.d.ts +62 -0
  165. package/dist/src/shapes/Text/StyledText.d.ts +118 -0
  166. package/dist/src/shapes/Text/Text.d.ts +656 -0
  167. package/dist/src/shapes/Text/TextSVGExportMixin.d.ts +32 -0
  168. package/dist/src/shapes/Textbox.d.ts +170 -0
  169. package/dist/src/shapes/Triangle.d.ts +17 -0
  170. package/dist/src/typedefs.d.ts +93 -0
  171. package/dist/src/util/animation/AnimationBase.d.ts +54 -0
  172. package/dist/src/util/animation/AnimationFrameProvider.d.ts +8 -0
  173. package/dist/src/util/animation/AnimationRegistry.d.ts +29 -0
  174. package/dist/src/util/animation/ArrayAnimation.d.ts +10 -0
  175. package/dist/src/util/animation/ColorAnimation.d.ts +11 -0
  176. package/dist/src/util/animation/ValueAnimation.d.ts +10 -0
  177. package/dist/src/util/animation/animate.d.ts +37 -0
  178. package/dist/src/util/animation/easing.d.ts +130 -0
  179. package/dist/src/util/animation/types.d.ts +87 -0
  180. package/dist/src/util/applyMixins.d.ts +8 -0
  181. package/dist/src/util/class_registry.d.ts +14 -0
  182. package/dist/src/util/dom_event.d.ts +5 -0
  183. package/dist/src/util/dom_misc.d.ts +40 -0
  184. package/dist/src/util/dom_request.d.ts +14 -0
  185. package/dist/src/util/dom_style.d.ts +7 -0
  186. package/dist/src/util/fireEvent.d.ts +3 -0
  187. package/dist/src/util/internals/cloneDeep.d.ts +2 -0
  188. package/dist/src/util/internals/getRandomInt.d.ts +8 -0
  189. package/dist/src/util/internals/ifNaN.d.ts +8 -0
  190. package/dist/src/util/internals/index.d.ts +4 -0
  191. package/dist/src/util/internals/removeFromArray.d.ts +9 -0
  192. package/dist/src/util/internals/uid.d.ts +2 -0
  193. package/dist/src/util/lang_class.d.ts +12 -0
  194. package/dist/src/util/lang_string.d.ts +22 -0
  195. package/dist/src/util/misc/boundingBoxFromPoints.d.ts +9 -0
  196. package/dist/src/util/misc/capValue.d.ts +2 -0
  197. package/dist/src/util/misc/cos.d.ts +10 -0
  198. package/dist/src/util/misc/dom.d.ts +28 -0
  199. package/dist/src/util/misc/findScaleTo.d.ts +29 -0
  200. package/dist/src/util/misc/groupSVGElements.d.ts +9 -0
  201. package/dist/src/util/misc/isTransparent.d.ts +11 -0
  202. package/dist/src/util/misc/matrix.d.ts +92 -0
  203. package/dist/src/util/misc/mergeClipPaths.d.ts +23 -0
  204. package/dist/src/util/misc/objectEnlive.d.ts +56 -0
  205. package/dist/src/util/misc/objectTransforms.d.ts +68 -0
  206. package/dist/src/util/misc/pick.d.ts +8 -0
  207. package/dist/src/util/misc/planeChange.d.ts +84 -0
  208. package/dist/src/util/misc/projectStroke/StrokeLineCapProjections.d.ts +51 -0
  209. package/dist/src/util/misc/projectStroke/StrokeLineJoinProjections.d.ts +81 -0
  210. package/dist/src/util/misc/projectStroke/StrokeProjectionsBase.d.ts +25 -0
  211. package/dist/src/util/misc/projectStroke/index.d.ts +11 -0
  212. package/dist/src/util/misc/projectStroke/types.d.ts +23 -0
  213. package/dist/src/util/misc/radiansDegreesConversion.d.ts +14 -0
  214. package/dist/src/util/misc/resolveOrigin.d.ts +9 -0
  215. package/dist/src/util/misc/rotatePoint.d.ts +12 -0
  216. package/dist/src/util/misc/sin.d.ts +10 -0
  217. package/dist/src/util/misc/svgParsing.d.ts +53 -0
  218. package/dist/src/util/misc/textStyles.d.ts +32 -0
  219. package/dist/src/util/misc/toFixed.d.ts +8 -0
  220. package/dist/src/util/misc/vectors.d.ts +57 -0
  221. package/dist/src/util/path.d.ts +108 -0
  222. package/dist/src/util/transform_matrix_removal.d.ts +14 -0
  223. package/dist/src/util/types.d.ts +19 -0
  224. package/fabric.ts +427 -0
  225. package/index.node.ts +43 -0
  226. package/index.ts +1 -0
  227. package/package.json +90 -39
  228. package/publish.js +0 -26
  229. package/rollup.config.mjs +79 -0
  230. package/rollup.test.config.js +24 -0
  231. package/scripts/build.mjs +50 -0
  232. package/scripts/buildLock.mjs +115 -0
  233. package/scripts/buildReporter.mjs +15 -0
  234. package/scripts/buildStats.mjs +139 -0
  235. package/scripts/dirname.mjs +14 -0
  236. package/scripts/index.mjs +679 -0
  237. package/scripts/transform_files.mjs +504 -0
  238. package/src/Collection.ts +311 -0
  239. package/src/CommonMethods.ts +63 -0
  240. package/src/EventTypeDefs.ts +294 -0
  241. package/src/Intersection.ts +273 -0
  242. package/src/Observable.ts +175 -0
  243. package/src/Pattern.ts +211 -0
  244. package/src/Point.ts +388 -0
  245. package/src/Shadow.ts +215 -0
  246. package/src/brushes/{base_brush.class.js → BaseBrush.ts} +65 -42
  247. package/src/brushes/CircleBrush.ts +145 -0
  248. package/src/brushes/PatternBrush.ts +70 -0
  249. package/src/brushes/PencilBrush.ts +300 -0
  250. package/src/brushes/SprayBrush.ts +219 -0
  251. package/src/cache.ts +89 -0
  252. package/src/canvas/Canvas.ts +1672 -0
  253. package/src/canvas/SelectableCanvas.ts +1636 -0
  254. package/src/canvas/StaticCanvas.ts +1709 -0
  255. package/src/canvas/TextEditingManager.ts +48 -0
  256. package/src/canvas/canvas_gestures.mixin.ts +207 -0
  257. package/src/color/Color.ts +404 -0
  258. package/src/color/color_map.ts +154 -0
  259. package/src/color/constants.ts +26 -0
  260. package/src/color/util.ts +32 -0
  261. package/src/config.ts +159 -0
  262. package/src/constants.ts +19 -0
  263. package/src/controls/Control.ts +377 -0
  264. package/src/controls/changeWidth.ts +52 -0
  265. package/src/controls/controls.render.ts +138 -0
  266. package/src/controls/default_controls.ts +132 -0
  267. package/src/controls/drag.ts +31 -0
  268. package/src/controls/polyControl.ts +135 -0
  269. package/src/controls/rotate.ts +87 -0
  270. package/src/controls/scale.ts +277 -0
  271. package/src/controls/scaleSkew.ts +92 -0
  272. package/src/controls/skew.ts +242 -0
  273. package/src/controls/util.ts +154 -0
  274. package/src/controls/wrapWithFireEvent.ts +25 -0
  275. package/src/controls/wrapWithFixedAnchor.ts +20 -0
  276. package/src/env/browser.ts +28 -0
  277. package/src/env/index.ts +19 -0
  278. package/src/env/node.ts +52 -0
  279. package/src/env/types.ts +15 -0
  280. package/src/filters/{base_filter.class.js → BaseFilter.ts} +201 -149
  281. package/src/filters/BlendColor.ts +258 -0
  282. package/src/filters/BlendImage.ts +254 -0
  283. package/src/filters/Blur.ts +202 -0
  284. package/src/filters/Boilerplate.ts +91 -0
  285. package/src/filters/Brightness.ts +93 -0
  286. package/src/filters/Canvas2dFilterBackend.ts +65 -0
  287. package/src/filters/ColorMatrix.ts +156 -0
  288. package/src/filters/ColorMatrixFilters.ts +106 -0
  289. package/src/filters/Composed.ts +85 -0
  290. package/src/filters/Contrast.ts +94 -0
  291. package/src/filters/Convolute.ts +341 -0
  292. package/src/filters/FilterBackend.ts +32 -0
  293. package/src/filters/Gamma.ts +127 -0
  294. package/src/filters/Grayscale.ts +137 -0
  295. package/src/filters/HueRotation.ts +66 -0
  296. package/src/filters/Invert.ts +117 -0
  297. package/src/filters/Noise.ts +109 -0
  298. package/src/filters/Pixelate.ts +114 -0
  299. package/src/filters/RemoveColor.ts +148 -0
  300. package/src/filters/Resize.ts +540 -0
  301. package/src/filters/Saturation.ts +100 -0
  302. package/src/filters/Vibrance.ts +103 -0
  303. package/src/filters/WebGLFilterBackend.ts +430 -0
  304. package/src/filters/WebGLProbe.ts +62 -0
  305. package/src/filters/typedefs.ts +65 -0
  306. package/src/gradient/Gradient.ts +401 -0
  307. package/src/gradient/constants.ts +12 -0
  308. package/src/gradient/parser/index.ts +3 -0
  309. package/src/gradient/parser/misc.ts +13 -0
  310. package/src/gradient/parser/parseColorStops.ts +55 -0
  311. package/src/gradient/parser/parseCoords.ts +73 -0
  312. package/src/gradient/typedefs.ts +104 -0
  313. package/src/mixins/{eraser_brush.mixin.js → eraser_brush.mixin.ts} +350 -239
  314. package/src/mixins/stateful.mixin.ts +104 -0
  315. package/src/parkinglot/canvas_animation.mixin.ts +121 -0
  316. package/src/parkinglot/straighten.ts +58 -0
  317. package/src/parser/applyViewboxTransform.ts +162 -0
  318. package/src/parser/attributes.ts +25 -0
  319. package/src/parser/constants.ts +118 -0
  320. package/src/parser/doesSomeParentMatch.ts +19 -0
  321. package/src/parser/elementById.ts +23 -0
  322. package/src/parser/elementMatchesRule.ts +19 -0
  323. package/src/parser/elements_parser.ts +191 -0
  324. package/src/parser/getCSSRules.ts +62 -0
  325. package/src/parser/getGlobalStylesForElement.ts +19 -0
  326. package/src/parser/getGradientDefs.ts +32 -0
  327. package/src/parser/getMultipleNodes.ts +15 -0
  328. package/src/parser/getSvgRegex.ts +5 -0
  329. package/src/parser/hasAncestorWithNodeName.ts +14 -0
  330. package/src/parser/loadSVGFromString.ts +26 -0
  331. package/src/parser/loadSVGFromURL.ts +40 -0
  332. package/src/parser/normalizeAttr.ts +10 -0
  333. package/src/parser/normalizeValue.ts +63 -0
  334. package/src/parser/parseAttributes.ts +90 -0
  335. package/src/parser/parseElements.ts +28 -0
  336. package/src/parser/parseFontDeclaration.ts +44 -0
  337. package/src/parser/parsePointsAttribute.ts +36 -0
  338. package/src/parser/parseSVGDocument.ts +106 -0
  339. package/src/parser/parseStyleAttribute.ts +27 -0
  340. package/src/parser/parseStyleObject.ts +15 -0
  341. package/src/parser/parseStyleString.ts +16 -0
  342. package/src/parser/parseTransformAttribute.ts +155 -0
  343. package/src/parser/parseUseDirectives.ts +79 -0
  344. package/src/parser/percent.ts +27 -0
  345. package/src/parser/recursivelyParseGradientsXlink.ts +42 -0
  346. package/src/parser/rotateMatrix.ts +21 -0
  347. package/src/parser/scaleMatrix.ts +9 -0
  348. package/src/parser/selectorMatches.ts +25 -0
  349. package/src/parser/setStrokeFillOpacity.ts +40 -0
  350. package/src/parser/skewMatrix.ts +6 -0
  351. package/src/parser/translateMatrix.ts +8 -0
  352. package/src/shapes/ActiveSelection.ts +157 -0
  353. package/src/shapes/Circle.ts +205 -0
  354. package/src/shapes/Ellipse.ts +154 -0
  355. package/src/shapes/Group.ts +1053 -0
  356. package/src/shapes/IText/DraggableTextDelegate.ts +394 -0
  357. package/src/shapes/IText/IText.ts +666 -0
  358. package/src/shapes/IText/ITextBehavior.ts +1055 -0
  359. package/src/shapes/IText/ITextClickBehavior.ts +321 -0
  360. package/src/shapes/IText/ITextKeyBehavior.ts +683 -0
  361. package/src/shapes/IText/constants.ts +47 -0
  362. package/src/shapes/Image.ts +789 -0
  363. package/src/shapes/Line.ts +329 -0
  364. package/src/shapes/Object/AnimatableObject.ts +106 -0
  365. package/src/shapes/Object/FabricObject.ts +19 -0
  366. package/src/shapes/Object/FabricObjectSVGExportMixin.ts +277 -0
  367. package/src/shapes/Object/InteractiveObject.ts +645 -0
  368. package/src/shapes/Object/Object.ts +1896 -0
  369. package/src/shapes/Object/ObjectGeometry.ts +830 -0
  370. package/src/shapes/Object/ObjectOrigin.ts +354 -0
  371. package/src/shapes/Object/StackedObject.ts +191 -0
  372. package/src/shapes/Object/defaultValues.ts +112 -0
  373. package/src/shapes/Path.ts +395 -0
  374. package/src/shapes/Polygon.ts +19 -0
  375. package/src/shapes/Polyline.ts +333 -0
  376. package/src/shapes/Rect.ts +199 -0
  377. package/src/shapes/Text/StyledText.ts +319 -0
  378. package/src/shapes/Text/Text.ts +1948 -0
  379. package/src/shapes/Text/TextSVGExportMixin.ts +288 -0
  380. package/src/shapes/Textbox.ts +471 -0
  381. package/src/shapes/Triangle.ts +45 -0
  382. package/src/typedefs.ts +119 -0
  383. package/src/util/animation/AnimationBase.ts +166 -0
  384. package/src/util/animation/AnimationFrameProvider.ts +28 -0
  385. package/src/util/animation/AnimationRegistry.ts +58 -0
  386. package/src/util/animation/ArrayAnimation.ts +27 -0
  387. package/src/util/animation/ColorAnimation.ts +74 -0
  388. package/src/util/animation/ValueAnimation.ts +29 -0
  389. package/src/util/animation/animate.ts +74 -0
  390. package/src/util/animation/easing.ts +327 -0
  391. package/src/util/animation/types.ts +136 -0
  392. package/src/util/applyMixins.ts +22 -0
  393. package/src/util/class_registry.ts +54 -0
  394. package/src/util/dom_event.ts +28 -0
  395. package/src/util/dom_misc.ts +138 -0
  396. package/src/util/dom_request.ts +64 -0
  397. package/src/util/dom_style.ts +20 -0
  398. package/src/util/fireEvent.ts +15 -0
  399. package/src/util/internals/cloneDeep.ts +2 -0
  400. package/src/util/internals/getRandomInt.ts +8 -0
  401. package/src/util/internals/ifNaN.ts +9 -0
  402. package/src/util/internals/index.ts +3 -0
  403. package/src/util/internals/removeFromArray.ts +14 -0
  404. package/src/util/internals/uid.ts +3 -0
  405. package/src/util/lang_class.ts +90 -0
  406. package/src/util/lang_string.ts +79 -0
  407. package/src/util/misc/boundingBoxFromPoints.ts +37 -0
  408. package/src/util/misc/capValue.ts +2 -0
  409. package/src/util/misc/cos.ts +24 -0
  410. package/src/util/misc/dom.ts +50 -0
  411. package/src/util/misc/findScaleTo.ts +44 -0
  412. package/src/util/misc/groupSVGElements.ts +15 -0
  413. package/src/util/misc/isTransparent.ts +51 -0
  414. package/src/util/misc/matrix.ts +207 -0
  415. package/src/util/misc/mergeClipPaths.ts +40 -0
  416. package/src/util/misc/objectEnlive.ts +189 -0
  417. package/src/util/misc/objectTransforms.ts +129 -0
  418. package/src/util/misc/pick.ts +17 -0
  419. package/src/util/misc/planeChange.ts +136 -0
  420. package/src/util/misc/projectStroke/StrokeLineCapProjections.ts +112 -0
  421. package/src/util/misc/projectStroke/StrokeLineJoinProjections.ts +231 -0
  422. package/src/util/misc/projectStroke/StrokeProjectionsBase.ts +75 -0
  423. package/src/util/misc/projectStroke/index.ts +53 -0
  424. package/src/util/misc/projectStroke/types.ts +24 -0
  425. package/src/util/misc/radiansDegreesConversion.ts +18 -0
  426. package/src/util/misc/resolveOrigin.ts +22 -0
  427. package/src/util/misc/rotatePoint.ts +15 -0
  428. package/src/util/misc/sin.ts +26 -0
  429. package/src/util/misc/svgParsing.ts +181 -0
  430. package/src/util/misc/textStyles.ts +133 -0
  431. package/src/util/misc/toFixed.ts +8 -0
  432. package/src/util/misc/vectors.ts +82 -0
  433. package/src/util/path.ts +941 -0
  434. package/src/util/transform_matrix_removal.ts +60 -0
  435. package/src/util/types.ts +78 -0
  436. package/tsconfig.json +106 -0
  437. package/HEADER.js +0 -203
  438. package/build.js +0 -287
  439. package/dist/fabric.js +0 -31187
  440. package/dist/fabric.min.js +0 -1
  441. package/old-travis-reference.yml +0 -97
  442. package/src/brushes/circle_brush.class.js +0 -144
  443. package/src/brushes/pattern_brush.class.js +0 -61
  444. package/src/brushes/pencil_brush.class.js +0 -310
  445. package/src/brushes/spray_brush.class.js +0 -219
  446. package/src/canvas.class.js +0 -1312
  447. package/src/color.class.js +0 -636
  448. package/src/control.class.js +0 -339
  449. package/src/controls.actions.js +0 -740
  450. package/src/controls.render.js +0 -99
  451. package/src/elements_parser.js +0 -152
  452. package/src/filters/2d_backend.class.js +0 -65
  453. package/src/filters/blendcolor_filter.class.js +0 -251
  454. package/src/filters/blendimage_filter.class.js +0 -247
  455. package/src/filters/blur_filter.class.js +0 -217
  456. package/src/filters/brightness_filter.class.js +0 -113
  457. package/src/filters/colormatrix_filter.class.js +0 -159
  458. package/src/filters/composed_filter.class.js +0 -72
  459. package/src/filters/contrast_filter.class.js +0 -113
  460. package/src/filters/convolute_filter.class.js +0 -352
  461. package/src/filters/filter_boilerplate.js +0 -111
  462. package/src/filters/filter_generator.js +0 -85
  463. package/src/filters/gamma_filter.class.js +0 -136
  464. package/src/filters/grayscale_filter.class.js +0 -154
  465. package/src/filters/hue_rotation.class.js +0 -107
  466. package/src/filters/invert_filter.class.js +0 -111
  467. package/src/filters/noise_filter.class.js +0 -134
  468. package/src/filters/pixelate_filter.class.js +0 -137
  469. package/src/filters/removecolor_filter.class.js +0 -173
  470. package/src/filters/resize_filter.class.js +0 -490
  471. package/src/filters/saturate_filter.class.js +0 -119
  472. package/src/filters/vibrance_filter.class.js +0 -122
  473. package/src/filters/webgl_backend.class.js +0 -396
  474. package/src/globalFabric.js +0 -4
  475. package/src/gradient.class.js +0 -490
  476. package/src/intersection.class.js +0 -172
  477. package/src/log.js +0 -11
  478. package/src/mixins/animation.mixin.js +0 -231
  479. package/src/mixins/canvas_dataurl_exporter.mixin.js +0 -97
  480. package/src/mixins/canvas_events.mixin.js +0 -974
  481. package/src/mixins/canvas_gestures.mixin.js +0 -149
  482. package/src/mixins/canvas_grouping.mixin.js +0 -177
  483. package/src/mixins/canvas_serialization.mixin.js +0 -228
  484. package/src/mixins/collection.mixin.js +0 -170
  485. package/src/mixins/default_controls.js +0 -114
  486. package/src/mixins/itext.svg_export.js +0 -241
  487. package/src/mixins/itext_behavior.mixin.js +0 -940
  488. package/src/mixins/itext_click_behavior.mixin.js +0 -278
  489. package/src/mixins/itext_key_behavior.mixin.js +0 -694
  490. package/src/mixins/object.svg_export.js +0 -258
  491. package/src/mixins/object_geometry.mixin.js +0 -683
  492. package/src/mixins/object_interactivity.mixin.js +0 -314
  493. package/src/mixins/object_origin.mixin.js +0 -255
  494. package/src/mixins/object_stacking.mixin.js +0 -80
  495. package/src/mixins/object_straightening.mixin.js +0 -80
  496. package/src/mixins/observable.mixin.js +0 -141
  497. package/src/mixins/shared_methods.mixin.js +0 -94
  498. package/src/mixins/stateful.mixin.js +0 -107
  499. package/src/mixins/text_style.mixin.js +0 -324
  500. package/src/parser.js +0 -1090
  501. package/src/pattern.class.js +0 -189
  502. package/src/point.class.js +0 -337
  503. package/src/shadow.class.js +0 -195
  504. package/src/shapes/active_selection.class.js +0 -155
  505. package/src/shapes/circle.class.js +0 -210
  506. package/src/shapes/ellipse.class.js +0 -181
  507. package/src/shapes/group.class.js +0 -593
  508. package/src/shapes/image.class.js +0 -764
  509. package/src/shapes/itext.class.js +0 -526
  510. package/src/shapes/line.class.js +0 -324
  511. package/src/shapes/object.class.js +0 -2008
  512. package/src/shapes/path.class.js +0 -384
  513. package/src/shapes/polygon.class.js +0 -81
  514. package/src/shapes/polyline.class.js +0 -268
  515. package/src/shapes/rect.class.js +0 -187
  516. package/src/shapes/text.class.js +0 -1696
  517. package/src/shapes/textbox.class.js +0 -461
  518. package/src/shapes/triangle.class.js +0 -93
  519. package/src/static_canvas.class.js +0 -1881
  520. package/src/util/anim_ease.js +0 -398
  521. package/src/util/animate.js +0 -254
  522. package/src/util/animate_color.js +0 -74
  523. package/src/util/dom_event.js +0 -50
  524. package/src/util/dom_misc.js +0 -300
  525. package/src/util/dom_request.js +0 -54
  526. package/src/util/dom_style.js +0 -70
  527. package/src/util/lang_array.js +0 -94
  528. package/src/util/lang_class.js +0 -115
  529. package/src/util/lang_object.js +0 -75
  530. package/src/util/lang_string.js +0 -110
  531. package/src/util/misc.js +0 -1330
  532. package/src/util/named_accessors.mixin.js +0 -428
  533. package/src/util/path.js +0 -829
@@ -0,0 +1,327 @@
1
+ /**
2
+ * Easing functions
3
+ * @see {@link http://gizma.com/easing/ Easing Equations by Robert Penner}
4
+ */
5
+
6
+ import { twoMathPi, halfPI } from '../../constants';
7
+ import { TEasingFunction } from './types';
8
+
9
+ const normalize = (a: number, c: number, p: number, s: number) => {
10
+ if (a < Math.abs(c)) {
11
+ a = c;
12
+ s = p / 4;
13
+ } else {
14
+ //handle the 0/0 case:
15
+ if (c === 0 && a === 0) {
16
+ s = (p / twoMathPi) * Math.asin(1);
17
+ } else {
18
+ s = (p / twoMathPi) * Math.asin(c / a);
19
+ }
20
+ }
21
+ return { a, c, p, s };
22
+ };
23
+
24
+ const elastic = (
25
+ a: number,
26
+ s: number,
27
+ p: number,
28
+ t: number,
29
+ d: number
30
+ ): number =>
31
+ a * Math.pow(2, 10 * (t -= 1)) * Math.sin(((t * d - s) * twoMathPi) / p);
32
+
33
+ /**
34
+ * Default sinusoidal easing
35
+ */
36
+ export const defaultEasing: TEasingFunction = (t, b, c, d) =>
37
+ -c * Math.cos((t / d) * halfPI) + c + b;
38
+
39
+ /**
40
+ * Cubic easing in
41
+ */
42
+ export const easeInCubic: TEasingFunction = (t, b, c, d) =>
43
+ c * (t / d) ** 3 + b;
44
+
45
+ /**
46
+ * Cubic easing out
47
+ */
48
+ export const easeOutCubic: TEasingFunction = (t, b, c, d) =>
49
+ c * ((t / d - 1) ** 3 + 1) + b;
50
+
51
+ /**
52
+ * Cubic easing in and out
53
+ */
54
+ export const easeInOutCubic: TEasingFunction = (t, b, c, d) => {
55
+ t /= d / 2;
56
+ if (t < 1) {
57
+ return (c / 2) * t ** 3 + b;
58
+ }
59
+ return (c / 2) * ((t - 2) ** 3 + 2) + b;
60
+ };
61
+
62
+ /**
63
+ * Quartic easing in
64
+ */
65
+ export const easeInQuart: TEasingFunction = (t, b, c, d) =>
66
+ c * (t /= d) * t ** 3 + b;
67
+
68
+ /**
69
+ * Quartic easing out
70
+ */
71
+ export const easeOutQuart: TEasingFunction = (t, b, c, d) =>
72
+ -c * ((t = t / d - 1) * t ** 3 - 1) + b;
73
+
74
+ /**
75
+ * Quartic easing in and out
76
+ */
77
+ export const easeInOutQuart: TEasingFunction = (t, b, c, d) => {
78
+ t /= d / 2;
79
+ if (t < 1) {
80
+ return (c / 2) * t ** 4 + b;
81
+ }
82
+ return (-c / 2) * ((t -= 2) * t ** 3 - 2) + b;
83
+ };
84
+
85
+ /**
86
+ * Quintic easing in
87
+ */
88
+ export const easeInQuint: TEasingFunction = (t, b, c, d) =>
89
+ c * (t / d) ** 5 + b;
90
+
91
+ /**
92
+ * Quintic easing out
93
+ */
94
+ export const easeOutQuint: TEasingFunction = (t, b, c, d) =>
95
+ c * ((t / d - 1) ** 5 + 1) + b;
96
+
97
+ /**
98
+ * Quintic easing in and out
99
+ */
100
+ export const easeInOutQuint: TEasingFunction = (t, b, c, d) => {
101
+ t /= d / 2;
102
+ if (t < 1) {
103
+ return (c / 2) * t ** 5 + b;
104
+ }
105
+ return (c / 2) * ((t - 2) ** 5 + 2) + b;
106
+ };
107
+
108
+ /**
109
+ * Sinusoidal easing in
110
+ */
111
+ export const easeInSine: TEasingFunction = (t, b, c, d) =>
112
+ -c * Math.cos((t / d) * halfPI) + c + b;
113
+
114
+ /**
115
+ * Sinusoidal easing out
116
+ */
117
+ export const easeOutSine: TEasingFunction = (t, b, c, d) =>
118
+ c * Math.sin((t / d) * halfPI) + b;
119
+
120
+ /**
121
+ * Sinusoidal easing in and out
122
+ */
123
+ export const easeInOutSine: TEasingFunction = (t, b, c, d) =>
124
+ (-c / 2) * (Math.cos((Math.PI * t) / d) - 1) + b;
125
+
126
+ /**
127
+ * Exponential easing in
128
+ */
129
+ export const easeInExpo: TEasingFunction = (t, b, c, d) =>
130
+ t === 0 ? b : c * 2 ** (10 * (t / d - 1)) + b;
131
+
132
+ /**
133
+ * Exponential easing out
134
+ */
135
+ export const easeOutExpo: TEasingFunction = (t, b, c, d) =>
136
+ t === d ? b + c : c * -(2 ** ((-10 * t) / d) + 1) + b;
137
+
138
+ /**
139
+ * Exponential easing in and out
140
+ */
141
+ export const easeInOutExpo: TEasingFunction = (t, b, c, d) => {
142
+ if (t === 0) {
143
+ return b;
144
+ }
145
+ if (t === d) {
146
+ return b + c;
147
+ }
148
+ t /= d / 2;
149
+ if (t < 1) {
150
+ return (c / 2) * 2 ** (10 * (t - 1)) + b;
151
+ }
152
+ return (c / 2) * -(2 ** (-10 * --t) + 2) + b;
153
+ };
154
+
155
+ /**
156
+ * Circular easing in
157
+ */
158
+ export const easeInCirc: TEasingFunction = (t, b, c, d) =>
159
+ -c * (Math.sqrt(1 - (t /= d) * t) - 1) + b;
160
+
161
+ /**
162
+ * Circular easing out
163
+ */
164
+ export const easeOutCirc: TEasingFunction = (t, b, c, d) =>
165
+ c * Math.sqrt(1 - (t = t / d - 1) * t) + b;
166
+
167
+ /**
168
+ * Circular easing in and out
169
+ */
170
+ export const easeInOutCirc: TEasingFunction = (t, b, c, d) => {
171
+ t /= d / 2;
172
+ if (t < 1) {
173
+ return (-c / 2) * (Math.sqrt(1 - t ** 2) - 1) + b;
174
+ }
175
+ return (c / 2) * (Math.sqrt(1 - (t -= 2) * t) + 1) + b;
176
+ };
177
+
178
+ /**
179
+ * Elastic easing in
180
+ */
181
+ export const easeInElastic: TEasingFunction = (t, b, c, d) => {
182
+ const s = 1.70158,
183
+ a = c;
184
+ let p = 0;
185
+ if (t === 0) {
186
+ return b;
187
+ }
188
+ t /= d;
189
+ if (t === 1) {
190
+ return b + c;
191
+ }
192
+ if (!p) {
193
+ p = d * 0.3;
194
+ }
195
+ const { a: normA, s: normS, p: normP } = normalize(a, c, p, s);
196
+ return -elastic(normA, normS, normP, t, d) + b;
197
+ };
198
+
199
+ /**
200
+ * Elastic easing out
201
+ */
202
+ export const easeOutElastic: TEasingFunction = (t, b, c, d) => {
203
+ const s = 1.70158,
204
+ a = c;
205
+ let p = 0;
206
+ if (t === 0) {
207
+ return b;
208
+ }
209
+ t /= d;
210
+ if (t === 1) {
211
+ return b + c;
212
+ }
213
+ if (!p) {
214
+ p = d * 0.3;
215
+ }
216
+ const { a: normA, s: normS, p: normP, c: normC } = normalize(a, c, p, s);
217
+ return (
218
+ normA * 2 ** (-10 * t) * Math.sin(((t * d - normS) * twoMathPi) / normP) +
219
+ normC +
220
+ b
221
+ );
222
+ };
223
+
224
+ /**
225
+ * Elastic easing in and out
226
+ */
227
+ export const easeInOutElastic: TEasingFunction = (t, b, c, d) => {
228
+ const s = 1.70158,
229
+ a = c;
230
+ let p = 0;
231
+ if (t === 0) {
232
+ return b;
233
+ }
234
+ t /= d / 2;
235
+ if (t === 2) {
236
+ return b + c;
237
+ }
238
+ if (!p) {
239
+ p = d * (0.3 * 1.5);
240
+ }
241
+ const { a: normA, s: normS, p: normP, c: normC } = normalize(a, c, p, s);
242
+ if (t < 1) {
243
+ return -0.5 * elastic(normA, normS, normP, t, d) + b;
244
+ }
245
+ return (
246
+ normA *
247
+ Math.pow(2, -10 * (t -= 1)) *
248
+ Math.sin(((t * d - normS) * twoMathPi) / normP) *
249
+ 0.5 +
250
+ normC +
251
+ b
252
+ );
253
+ };
254
+
255
+ /**
256
+ * Backwards easing in
257
+ */
258
+ export const easeInBack: TEasingFunction = (t, b, c, d, s = 1.70158) =>
259
+ c * (t /= d) * t * ((s + 1) * t - s) + b;
260
+
261
+ /**
262
+ * Backwards easing out
263
+ */
264
+ export const easeOutBack: TEasingFunction = (t, b, c, d, s = 1.70158) =>
265
+ c * ((t = t / d - 1) * t * ((s + 1) * t + s) + 1) + b;
266
+
267
+ /**
268
+ * Backwards easing in and out
269
+ */
270
+ export const easeInOutBack: TEasingFunction = (t, b, c, d, s = 1.70158) => {
271
+ t /= d / 2;
272
+ if (t < 1) {
273
+ return (c / 2) * (t * t * (((s *= 1.525) + 1) * t - s)) + b;
274
+ }
275
+ return (c / 2) * ((t -= 2) * t * (((s *= 1.525) + 1) * t + s) + 2) + b;
276
+ };
277
+
278
+ /**
279
+ * Bouncing easing out
280
+ */
281
+ export const easeOutBounce: TEasingFunction = (t, b, c, d) => {
282
+ if ((t /= d) < 1 / 2.75) {
283
+ return c * (7.5625 * t * t) + b;
284
+ } else if (t < 2 / 2.75) {
285
+ return c * (7.5625 * (t -= 1.5 / 2.75) * t + 0.75) + b;
286
+ } else if (t < 2.5 / 2.75) {
287
+ return c * (7.5625 * (t -= 2.25 / 2.75) * t + 0.9375) + b;
288
+ } else {
289
+ return c * (7.5625 * (t -= 2.625 / 2.75) * t + 0.984375) + b;
290
+ }
291
+ };
292
+
293
+ /**
294
+ * Bouncing easing in
295
+ */
296
+ export const easeInBounce: TEasingFunction = (t, b, c, d) =>
297
+ c - easeOutBounce(d - t, 0, c, d) + b;
298
+
299
+ /**
300
+ * Bouncing easing in and out
301
+ */
302
+ export const easeInOutBounce: TEasingFunction = (t, b, c, d) =>
303
+ t < d / 2
304
+ ? easeInBounce(t * 2, 0, c, d) * 0.5 + b
305
+ : easeOutBounce(t * 2 - d, 0, c, d) * 0.5 + c * 0.5 + b;
306
+
307
+ /**
308
+ * Quadratic easing in
309
+ */
310
+ export const easeInQuad: TEasingFunction = (t, b, c, d) => c * (t /= d) * t + b;
311
+
312
+ /**
313
+ * Quadratic easing out
314
+ */
315
+ export const easeOutQuad: TEasingFunction = (t, b, c, d) =>
316
+ -c * (t /= d) * (t - 2) + b;
317
+
318
+ /**
319
+ * Quadratic easing in and out
320
+ */
321
+ export const easeInOutQuad: TEasingFunction = (t, b, c, d) => {
322
+ t /= d / 2;
323
+ if (t < 1) {
324
+ return (c / 2) * t ** 2 + b;
325
+ }
326
+ return (-c / 2) * (--t * (t - 2) - 1) + b;
327
+ };
@@ -0,0 +1,136 @@
1
+ import { TColorArg } from '../../color/Color';
2
+
3
+ export type AnimationState = 'pending' | 'running' | 'completed' | 'aborted';
4
+
5
+ /**
6
+ * Callback called every frame
7
+ * @param {number | number[]} value current value of the animation.
8
+ * @param {number} valueProgress ∈ [0, 1], the current animation progress reflected on value, normalized.
9
+ * 0 is the starting value and 1 is the ending value.
10
+ * @param {number} durationProgress ∈ [0, 1], the current animation duration normalized to 1.
11
+ */
12
+ export type TOnAnimationChangeCallback<T, R = void> = (
13
+ value: T,
14
+ valueProgress: number,
15
+ durationProgress: number
16
+ ) => R;
17
+
18
+ /**
19
+ * Called on each step to determine if animation should abort
20
+ * @returns truthy if animation should abort
21
+ */
22
+ export type TAbortCallback<T> = TOnAnimationChangeCallback<T, boolean>;
23
+
24
+ /**
25
+ * An easing function used to calculate the current value
26
+ * @see {@link AnimationBase['calculate']}
27
+ *
28
+ * @param timeElapsed ms elapsed since start
29
+ * @param startValue
30
+ * @param byValue
31
+ * @param duration in ms
32
+ * @returns next value
33
+ */
34
+ export type TEasingFunction<T = unknown> = T extends number[]
35
+ ? (
36
+ timeElapsed: number,
37
+ startValue: number,
38
+ byValue: number,
39
+ duration: number,
40
+ index: number
41
+ ) => number
42
+ : (
43
+ timeElapsed: number,
44
+ startValue: number,
45
+ byValue: number,
46
+ duration: number
47
+ ) => number;
48
+
49
+ export type TAnimationBaseOptions<T> = {
50
+ /**
51
+ * Duration of the animation in ms
52
+ * @default 500
53
+ */
54
+ duration: number;
55
+
56
+ /**
57
+ * Delay to start the animation in ms
58
+ * @default 0
59
+ */
60
+ delay: number;
61
+
62
+ /**
63
+ * Easing function
64
+ * @default {defaultEasing}
65
+ */
66
+ easing: TEasingFunction<T>;
67
+
68
+ /**
69
+ * The object this animation is being performed on
70
+ */
71
+ target: unknown;
72
+ };
73
+
74
+ export type TAnimationCallbacks<T> = {
75
+ /**
76
+ * Called when the animation starts
77
+ */
78
+ onStart: VoidFunction;
79
+
80
+ /**
81
+ * Called at each frame of the animation
82
+ */
83
+ onChange: TOnAnimationChangeCallback<T>;
84
+
85
+ /**
86
+ * Called after the last frame of the animation
87
+ */
88
+ onComplete: TOnAnimationChangeCallback<T>;
89
+
90
+ /**
91
+ * Function called at each frame.
92
+ * If it returns true, abort
93
+ */
94
+ abort: TAbortCallback<T>;
95
+ };
96
+
97
+ export type TBaseAnimationOptions<T, TCallback = T, TEasing = T> = Partial<
98
+ TAnimationBaseOptions<TEasing> & TAnimationCallbacks<TCallback>
99
+ > & {
100
+ startValue: T;
101
+ byValue: T;
102
+ };
103
+
104
+ export type TAnimationOptions<T, TCallback = T, TEasing = T> = Partial<
105
+ TAnimationBaseOptions<TEasing> &
106
+ TAnimationCallbacks<TCallback> & {
107
+ /**
108
+ * Starting value(s)
109
+ * @default 0
110
+ */
111
+ startValue: T;
112
+
113
+ /**
114
+ * Ending value(s)
115
+ * @default 100
116
+ */
117
+ endValue: T;
118
+ }
119
+ >;
120
+
121
+ export type ValueAnimationOptions = TAnimationOptions<number>;
122
+
123
+ export type ArrayAnimationOptions = TAnimationOptions<number[]>;
124
+
125
+ export type ColorAnimationOptions = TAnimationOptions<
126
+ TColorArg,
127
+ string,
128
+ number[]
129
+ >;
130
+
131
+ export type AnimationOptions<T extends number | number[] | TColorArg> =
132
+ T extends TColorArg
133
+ ? ColorAnimationOptions
134
+ : T extends number[]
135
+ ? ArrayAnimationOptions
136
+ : ValueAnimationOptions;
@@ -0,0 +1,22 @@
1
+ import { Constructor } from '../typedefs';
2
+
3
+ /***
4
+ * https://www.typescriptlang.org/docs/handbook/mixins.html#alternative-pattern
5
+ */
6
+ export function applyMixins<T extends Constructor, S extends Constructor>(
7
+ derivedCtor: T,
8
+ constructors: S[]
9
+ ) {
10
+ constructors.forEach((baseCtor) => {
11
+ Object.getOwnPropertyNames(baseCtor.prototype).forEach((name) => {
12
+ name !== 'constructor' &&
13
+ Object.defineProperty(
14
+ derivedCtor.prototype,
15
+ name,
16
+ Object.getOwnPropertyDescriptor(baseCtor.prototype, name) ||
17
+ Object.create(null)
18
+ );
19
+ });
20
+ });
21
+ return derivedCtor as T & { prototype: InstanceType<T & S> };
22
+ }
@@ -0,0 +1,54 @@
1
+ /*
2
+ * This Map connects the objects type value with their
3
+ * class implementation. It used from any object to understand which are
4
+ * the classes to enlive when requesting a object.type = 'path' for example.
5
+ * Objects uses it for clipPath, Canvas uses it for everything.
6
+ * This is necessary for generic code to run and enlive instances from serialized representation.
7
+ * You can customize which classes get enlived from SVG parsing using this classRegistry.
8
+ * The Registry start empty and gets filled in depending which files you import.
9
+ * If you want to be able to parse arbitrary SVGs or JSON representation of canvases, coming from
10
+ * differnet sources you will need to import all fabric because you may need all classes.
11
+ */
12
+
13
+ export const JSON = 'json';
14
+ export const SVG = 'svg';
15
+
16
+ export class ClassRegistry {
17
+ declare [JSON]: Map<string, any>;
18
+ declare [SVG]: Map<string, any>;
19
+
20
+ constructor() {
21
+ this[JSON] = new Map();
22
+ this[SVG] = new Map();
23
+ }
24
+
25
+ getClass(classType: string): any {
26
+ const constructor = this[JSON].get(classType);
27
+ if (!constructor) {
28
+ throw new Error(`No class registered for ${classType}`);
29
+ }
30
+ return constructor;
31
+ }
32
+
33
+ setClass(classConstructor: any, classType?: string) {
34
+ this[JSON].set(
35
+ classType ?? classConstructor.prototype.type,
36
+ classConstructor
37
+ );
38
+ }
39
+
40
+ getSVGClass(SVGTagName: string): any {
41
+ return this[SVG].get(SVGTagName);
42
+ }
43
+
44
+ setSVGClass(classConstructor: any, SVGTagName?: string) {
45
+ this[SVG].set(
46
+ SVGTagName ?? classConstructor.prototype.type,
47
+ classConstructor
48
+ );
49
+ }
50
+ }
51
+
52
+ const classRegistry = new ClassRegistry();
53
+
54
+ export { classRegistry };
@@ -0,0 +1,28 @@
1
+ //@ts-nocheck
2
+ import { Point } from '../Point';
3
+ import { getScrollLeftTop } from './dom_misc';
4
+
5
+ const touchEvents = ['touchstart', 'touchmove', 'touchend'];
6
+
7
+ function getTouchInfo(event) {
8
+ const touchProp = event.changedTouches;
9
+ if (touchProp && touchProp[0]) {
10
+ return touchProp[0];
11
+ }
12
+ return event;
13
+ }
14
+
15
+ export const getPointer = (event) => {
16
+ const element = event.target,
17
+ scroll = getScrollLeftTop(element),
18
+ _evt = getTouchInfo(event);
19
+ return new Point(_evt.clientX + scroll.left, _evt.clientY + scroll.top);
20
+ };
21
+
22
+ export const isTouchEvent = (event) =>
23
+ touchEvents.indexOf(event.type) > -1 || event.pointerType === 'touch';
24
+
25
+ export const stopEvent = (e: Event) => {
26
+ e.preventDefault();
27
+ e.stopPropagation();
28
+ };
@@ -0,0 +1,138 @@
1
+ //@ts-nocheck
2
+
3
+ import { getEnv } from '../env';
4
+
5
+ /**
6
+ * Wraps element with another element
7
+ * @param {HTMLElement} element Element to wrap
8
+ * @param {HTMLElement|String} wrapper Element to wrap with
9
+ * @param {Object} [attributes] Attributes to set on a wrapper
10
+ * @return {HTMLElement} wrapper
11
+ */
12
+ export function wrapElement(element, wrapper) {
13
+ if (element.parentNode) {
14
+ element.parentNode.replaceChild(wrapper, element);
15
+ }
16
+ wrapper.appendChild(element);
17
+ return wrapper;
18
+ }
19
+
20
+ /**
21
+ * Returns element scroll offsets
22
+ * @param {HTMLElement} element Element to operate on
23
+ * @return {Object} Object with left/top values
24
+ */
25
+ export function getScrollLeftTop(element) {
26
+ let left = 0,
27
+ top = 0;
28
+
29
+ const docElement = getEnv().document.documentElement,
30
+ body = getEnv().document.body || {
31
+ scrollLeft: 0,
32
+ scrollTop: 0,
33
+ };
34
+ // While loop checks (and then sets element to) .parentNode OR .host
35
+ // to account for ShadowDOM. We still want to traverse up out of ShadowDOM,
36
+ // but the .parentNode of a root ShadowDOM node will always be null, instead
37
+ // it should be accessed through .host. See http://stackoverflow.com/a/24765528/4383938
38
+ while (element && (element.parentNode || element.host)) {
39
+ // Set element to element parent, or 'host' in case of ShadowDOM
40
+ element = element.parentNode || element.host;
41
+
42
+ if (element === getEnv().document) {
43
+ left = body.scrollLeft || docElement.scrollLeft || 0;
44
+ top = body.scrollTop || docElement.scrollTop || 0;
45
+ } else {
46
+ left += element.scrollLeft || 0;
47
+ top += element.scrollTop || 0;
48
+ }
49
+
50
+ if (element.nodeType === 1 && element.style.position === 'fixed') {
51
+ break;
52
+ }
53
+ }
54
+
55
+ return { left, top };
56
+ }
57
+
58
+ /**
59
+ * Returns offset for a given element
60
+ * @param {HTMLElement} element Element to get offset for
61
+ * @return {Object} Object with "left" and "top" properties
62
+ */
63
+ export function getElementOffset(element) {
64
+ let box = { left: 0, top: 0 };
65
+ const doc = element && element.ownerDocument,
66
+ offset = { left: 0, top: 0 },
67
+ offsetAttributes = {
68
+ borderLeftWidth: 'left',
69
+ borderTopWidth: 'top',
70
+ paddingLeft: 'left',
71
+ paddingTop: 'top',
72
+ };
73
+
74
+ if (!doc) {
75
+ return offset;
76
+ }
77
+ const elemStyle = getEnv().document.defaultView.getComputedStyle(
78
+ element,
79
+ null
80
+ );
81
+ for (const attr in offsetAttributes) {
82
+ offset[offsetAttributes[attr]] += parseInt(elemStyle[attr], 10) || 0;
83
+ }
84
+
85
+ const docElem = doc.documentElement;
86
+ if (typeof element.getBoundingClientRect !== 'undefined') {
87
+ box = element.getBoundingClientRect();
88
+ }
89
+
90
+ const scrollLeftTop = getScrollLeftTop(element);
91
+
92
+ return {
93
+ left:
94
+ box.left + scrollLeftTop.left - (docElem.clientLeft || 0) + offset.left,
95
+ top: box.top + scrollLeftTop.top - (docElem.clientTop || 0) + offset.top,
96
+ };
97
+ }
98
+
99
+ /**
100
+ * Makes element unselectable
101
+ * @param {HTMLElement} element Element to make unselectable
102
+ * @return {HTMLElement} Element that was passed in
103
+ */
104
+ export function makeElementUnselectable(element) {
105
+ if (typeof element.onselectstart !== 'undefined') {
106
+ element.onselectstart = () => false;
107
+ }
108
+ element.style.userSelect = 'none';
109
+ return element;
110
+ }
111
+
112
+ /**
113
+ * Makes element selectable
114
+ * @param {HTMLElement} element Element to make selectable
115
+ * @return {HTMLElement} Element that was passed in
116
+ */
117
+ export function makeElementSelectable(element) {
118
+ if (typeof element.onselectstart !== 'undefined') {
119
+ element.onselectstart = null;
120
+ }
121
+ element.style.userSelect = '';
122
+ return element;
123
+ }
124
+
125
+ export function cleanUpJsdomNode(element) {
126
+ if (!getEnv().isLikelyNode) {
127
+ return;
128
+ }
129
+ const impl = getEnv().jsdomImplForWrapper(element);
130
+ if (impl) {
131
+ impl._image = null;
132
+ impl._canvas = null;
133
+ // unsure if necessary
134
+ impl._currentSrc = null;
135
+ impl._attributes = null;
136
+ impl._classList = null;
137
+ }
138
+ }