fabric 5.3.0 → 6.0.0-beta10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (634) hide show
  1. package/.babelrc +11 -0
  2. package/.babelrcAlt +19 -0
  3. package/.browserslistrc +5 -0
  4. package/.eslintignore +3 -0
  5. package/.eslintrc.js +51 -0
  6. package/.eslintrc.json +38 -46
  7. package/.eslintrc_tests +12 -0
  8. package/.gitattributes +2 -0
  9. package/.gitpod.yml +17 -1
  10. package/.prettierignore +19 -0
  11. package/.prettierrc +4 -0
  12. package/CHANGELOG.md +615 -189
  13. package/CONTRIBUTING.md +233 -59
  14. package/README.md +200 -235
  15. package/babel-jest.config.js +6 -0
  16. package/bower.json +1 -3
  17. package/dist/fabric.d.ts +54 -0
  18. package/dist/index.d.ts +2 -0
  19. package/dist/index.js +28452 -0
  20. package/dist/index.js.map +1 -0
  21. package/dist/index.min.js +1 -0
  22. package/dist/index.mjs +28385 -0
  23. package/dist/index.mjs.map +1 -0
  24. package/dist/index.node.cjs +28538 -0
  25. package/dist/index.node.cjs.map +1 -0
  26. package/dist/index.node.d.ts +20 -0
  27. package/dist/index.node.mjs +28477 -0
  28. package/dist/index.node.mjs.map +1 -0
  29. package/dist/src/ClassRegistry.d.ts +13 -0
  30. package/dist/src/Collection.d.ts +136 -0
  31. package/dist/src/CommonMethods.d.ts +32 -0
  32. package/dist/src/EventTypeDefs.d.ts +227 -0
  33. package/dist/src/Intersection.d.ts +112 -0
  34. package/dist/src/Observable.d.ts +60 -0
  35. package/dist/src/Pattern/Pattern.d.ts +99 -0
  36. package/dist/src/Pattern/index.d.ts +3 -0
  37. package/dist/src/Pattern/types.d.ts +9 -0
  38. package/dist/src/Point.d.ts +232 -0
  39. package/dist/src/Shadow.d.ts +96 -0
  40. package/dist/src/brushes/BaseBrush.d.ts +101 -0
  41. package/dist/src/brushes/CircleBrush.d.ts +44 -0
  42. package/dist/src/brushes/CircleBrush.test.d.ts +2 -0
  43. package/dist/src/brushes/PatternBrush.d.ts +23 -0
  44. package/dist/src/brushes/PencilBrush.d.ts +92 -0
  45. package/dist/src/brushes/SprayBrush.d.ts +74 -0
  46. package/dist/src/brushes/typedefs.d.ts +18 -0
  47. package/dist/src/cache.d.ts +47 -0
  48. package/dist/src/canvas/Canvas.d.ts +364 -0
  49. package/dist/src/canvas/DOMManagers/CanvasDOMManager.d.ts +29 -0
  50. package/dist/src/canvas/DOMManagers/StaticCanvasDOMManager.d.ts +29 -0
  51. package/dist/src/canvas/DOMManagers/util.d.ts +24 -0
  52. package/dist/src/canvas/DOMManagers/util.spec.d.ts +2 -0
  53. package/dist/src/canvas/SelectableCanvas.d.ts +723 -0
  54. package/dist/src/canvas/StaticCanvas.d.ts +747 -0
  55. package/dist/src/canvas/TextEditingManager.d.ts +21 -0
  56. package/dist/src/canvas/canvas_gestures.mixin.d.ts +2 -0
  57. package/dist/src/color/Color.d.ts +152 -0
  58. package/dist/src/color/color_map.d.ts +155 -0
  59. package/dist/src/color/constants.d.ts +104 -0
  60. package/dist/src/color/typedefs.d.ts +16 -0
  61. package/dist/src/color/util.d.ts +27 -0
  62. package/dist/src/config.d.ts +115 -0
  63. package/dist/src/constants.d.ts +21 -0
  64. package/dist/src/controls/Control.d.ts +229 -0
  65. package/dist/src/controls/changeWidth.d.ts +13 -0
  66. package/dist/src/controls/commonControls.d.ts +28 -0
  67. package/dist/src/controls/controlRendering.d.ts +29 -0
  68. package/dist/src/controls/drag.d.ts +12 -0
  69. package/dist/src/controls/fireEvent.d.ts +3 -0
  70. package/dist/src/controls/index.d.ts +13 -0
  71. package/dist/src/controls/polyControl.d.ts +5 -0
  72. package/dist/src/controls/rotate.d.ts +12 -0
  73. package/dist/src/controls/scale.d.ts +47 -0
  74. package/dist/src/controls/scaleSkew.d.ts +39 -0
  75. package/dist/src/controls/skew.d.ts +33 -0
  76. package/dist/src/controls/util.d.ts +41 -0
  77. package/dist/src/controls/wrapWithFireEvent.d.ts +8 -0
  78. package/dist/src/controls/wrapWithFixedAnchor.d.ts +9 -0
  79. package/dist/src/env/browser.d.ts +3 -0
  80. package/dist/src/env/index.d.ts +28 -0
  81. package/dist/src/env/node.d.ts +6 -0
  82. package/dist/src/env/types.d.ts +15 -0
  83. package/dist/src/filters/BaseFilter.d.ts +160 -0
  84. package/dist/src/filters/BlendColor.d.ts +81 -0
  85. package/dist/src/filters/BlendImage.d.ts +93 -0
  86. package/dist/src/filters/Blur.d.ts +52 -0
  87. package/dist/src/filters/Boilerplate.d.ts +48 -0
  88. package/dist/src/filters/Brightness.d.ts +48 -0
  89. package/dist/src/filters/Canvas2dFilterBackend.d.ts +27 -0
  90. package/dist/src/filters/ColorMatrix.d.ts +64 -0
  91. package/dist/src/filters/ColorMatrixFilters.d.ts +537 -0
  92. package/dist/src/filters/Composed.d.ts +46 -0
  93. package/dist/src/filters/Contrast.d.ts +46 -0
  94. package/dist/src/filters/Convolute.d.ts +83 -0
  95. package/dist/src/filters/FilterBackend.d.ts +15 -0
  96. package/dist/src/filters/GLProbes/GLProbe.d.ts +7 -0
  97. package/dist/src/filters/GLProbes/NodeGLProbe.d.ts +11 -0
  98. package/dist/src/filters/GLProbes/WebGLProbe.d.ts +20 -0
  99. package/dist/src/filters/Gamma.d.ts +55 -0
  100. package/dist/src/filters/Grayscale.d.ts +47 -0
  101. package/dist/src/filters/HueRotation.d.ts +25 -0
  102. package/dist/src/filters/Invert.d.ts +56 -0
  103. package/dist/src/filters/Noise.d.ts +55 -0
  104. package/dist/src/filters/Pixelate.d.ts +45 -0
  105. package/dist/src/filters/RemoveColor.d.ts +64 -0
  106. package/dist/src/filters/Resize.d.ts +137 -0
  107. package/dist/src/filters/Saturation.d.ts +49 -0
  108. package/dist/src/filters/Vibrance.d.ts +49 -0
  109. package/dist/src/filters/WebGLFilterBackend.d.ts +128 -0
  110. package/dist/src/filters/filters.d.ts +21 -0
  111. package/dist/src/filters/index.d.ts +7 -0
  112. package/dist/src/filters/shaders/baseFilter.d.ts +4 -0
  113. package/dist/src/filters/shaders/blendColor.d.ts +13 -0
  114. package/dist/src/filters/shaders/blendImage.d.ts +3 -0
  115. package/dist/src/filters/shaders/blur.d.ts +2 -0
  116. package/dist/src/filters/shaders/brightness.d.ts +2 -0
  117. package/dist/src/filters/shaders/colorMatrix.d.ts +2 -0
  118. package/dist/src/filters/shaders/constrast.d.ts +2 -0
  119. package/dist/src/filters/shaders/convolute.d.ts +11 -0
  120. package/dist/src/filters/shaders/gamma.d.ts +2 -0
  121. package/dist/src/filters/shaders/grayscale.d.ts +3 -0
  122. package/dist/src/filters/shaders/invert.d.ts +2 -0
  123. package/dist/src/filters/shaders/noise.d.ts +2 -0
  124. package/dist/src/filters/shaders/pixelate.d.ts +2 -0
  125. package/dist/src/filters/shaders/removeColor.d.ts +2 -0
  126. package/dist/src/filters/shaders/saturation.d.ts +2 -0
  127. package/dist/src/filters/shaders/vibrance.d.ts +2 -0
  128. package/dist/src/filters/typedefs.d.ts +48 -0
  129. package/dist/src/filters/utils.d.ts +3 -0
  130. package/dist/src/gradient/Gradient.d.ts +150 -0
  131. package/dist/src/gradient/constants.d.ts +15 -0
  132. package/dist/src/gradient/index.d.ts +3 -0
  133. package/dist/src/gradient/parser/index.d.ts +4 -0
  134. package/dist/src/gradient/parser/misc.d.ts +4 -0
  135. package/dist/src/gradient/parser/parseColorStops.d.ts +3 -0
  136. package/dist/src/gradient/parser/parseCoords.d.ts +17 -0
  137. package/dist/src/gradient/typedefs.d.ts +93 -0
  138. package/dist/src/mixins/eraser_brush.mixin.d.ts +2 -0
  139. package/dist/src/parkinglot/canvas_animation.mixin.d.ts +2 -0
  140. package/dist/src/parkinglot/straighten.d.ts +2 -0
  141. package/dist/src/parser/applyViewboxTransform.d.ts +5 -0
  142. package/dist/src/parser/attributes.d.ts +6 -0
  143. package/dist/src/parser/constants.d.ts +53 -0
  144. package/dist/src/parser/doesSomeParentMatch.d.ts +2 -0
  145. package/dist/src/parser/elementById.d.ts +6 -0
  146. package/dist/src/parser/elementMatchesRule.d.ts +5 -0
  147. package/dist/src/parser/elements_parser.d.ts +3 -0
  148. package/dist/src/parser/getCSSRules.d.ts +7 -0
  149. package/dist/src/parser/getGlobalStylesForElement.d.ts +5 -0
  150. package/dist/src/parser/getGradientDefs.d.ts +7 -0
  151. package/dist/src/parser/getMultipleNodes.d.ts +2 -0
  152. package/dist/src/parser/getSvgRegex.d.ts +2 -0
  153. package/dist/src/parser/hasAncestorWithNodeName.d.ts +2 -0
  154. package/dist/src/parser/index.d.ts +9 -0
  155. package/dist/src/parser/loadSVGFromString.d.ts +18 -0
  156. package/dist/src/parser/loadSVGFromURL.d.ts +19 -0
  157. package/dist/src/parser/normalizeAttr.d.ts +2 -0
  158. package/dist/src/parser/normalizeValue.d.ts +2 -0
  159. package/dist/src/parser/parseAttributes.d.ts +9 -0
  160. package/dist/src/parser/parseFontDeclaration.d.ts +10 -0
  161. package/dist/src/parser/parsePointsAttribute.d.ts +12 -0
  162. package/dist/src/parser/parseSVGDocument.d.ts +23 -0
  163. package/dist/src/parser/parseStyleAttribute.d.ts +9 -0
  164. package/dist/src/parser/parseStyleObject.d.ts +2 -0
  165. package/dist/src/parser/parseStyleString.d.ts +2 -0
  166. package/dist/src/parser/parseTransformAttribute.d.ts +11 -0
  167. package/dist/src/parser/parseUseDirectives.d.ts +2 -0
  168. package/dist/src/parser/percent.d.ts +9 -0
  169. package/dist/src/parser/recursivelyParseGradientsXlink.d.ts +2 -0
  170. package/dist/src/parser/selectorMatches.d.ts +2 -0
  171. package/dist/src/parser/setStrokeFillOpacity.d.ts +6 -0
  172. package/dist/src/parser/typedefs.d.ts +9 -0
  173. package/dist/src/shapes/ActiveSelection.d.ts +83 -0
  174. package/dist/src/shapes/Circle.d.ts +99 -0
  175. package/dist/src/shapes/Ellipse.d.ts +84 -0
  176. package/dist/src/shapes/Group.d.ts +407 -0
  177. package/dist/src/shapes/IText/DraggableTextDelegate.d.ts +78 -0
  178. package/dist/src/shapes/IText/IText.d.ts +336 -0
  179. package/dist/src/shapes/IText/ITextBehavior.d.ts +287 -0
  180. package/dist/src/shapes/IText/ITextClickBehavior.d.ts +73 -0
  181. package/dist/src/shapes/IText/ITextKeyBehavior.d.ts +195 -0
  182. package/dist/src/shapes/IText/constants.d.ts +13 -0
  183. package/dist/src/shapes/Image.d.ts +309 -0
  184. package/dist/src/shapes/Line.d.ts +121 -0
  185. package/dist/src/shapes/Object/AnimatableObject.d.ts +33 -0
  186. package/dist/src/shapes/Object/FabricObject.d.ts +11 -0
  187. package/dist/src/shapes/Object/FabricObjectSVGExportMixin.d.ts +74 -0
  188. package/dist/src/shapes/Object/InteractiveObject.d.ts +296 -0
  189. package/dist/src/shapes/Object/Object.d.ts +599 -0
  190. package/dist/src/shapes/Object/ObjectGeometry.d.ts +327 -0
  191. package/dist/src/shapes/Object/ObjectOrigin.d.ts +109 -0
  192. package/dist/src/shapes/Object/StackedObject.d.ts +72 -0
  193. package/dist/src/shapes/Object/defaultValues.d.ts +76 -0
  194. package/dist/src/shapes/Object/types/BaseProps.d.ts +84 -0
  195. package/dist/src/shapes/Object/types/BorderProps.d.ts +37 -0
  196. package/dist/src/shapes/Object/types/ControlProps.d.ts +62 -0
  197. package/dist/src/shapes/Object/types/FabricObjectProps.d.ts +96 -0
  198. package/dist/src/shapes/Object/types/FillStrokeProps.d.ts +80 -0
  199. package/dist/src/shapes/Object/types/LockInteractionProps.d.ts +51 -0
  200. package/dist/src/shapes/Object/types/ObjectProps.d.ts +42 -0
  201. package/dist/src/shapes/Object/types/SerializedObjectProps.d.ts +66 -0
  202. package/dist/src/shapes/Object/types/index.d.ts +6 -0
  203. package/dist/src/shapes/Path.d.ts +214 -0
  204. package/dist/src/shapes/Polygon.d.ts +10 -0
  205. package/dist/src/shapes/Polyline.d.ts +147 -0
  206. package/dist/src/shapes/Rect.d.ts +82 -0
  207. package/dist/src/shapes/Text/StyledText.d.ts +123 -0
  208. package/dist/src/shapes/Text/Text.d.ts +688 -0
  209. package/dist/src/shapes/Text/TextSVGExportMixin.d.ts +32 -0
  210. package/dist/src/shapes/Text/constants.d.ts +13 -0
  211. package/dist/src/shapes/Textbox.d.ts +204 -0
  212. package/dist/src/shapes/Triangle.d.ts +26 -0
  213. package/dist/src/typedefs.d.ts +96 -0
  214. package/dist/src/util/animation/AnimationBase.d.ts +54 -0
  215. package/dist/src/util/animation/AnimationFrameProvider.d.ts +3 -0
  216. package/dist/src/util/animation/AnimationRegistry.d.ts +29 -0
  217. package/dist/src/util/animation/ArrayAnimation.d.ts +10 -0
  218. package/dist/src/util/animation/ColorAnimation.d.ts +11 -0
  219. package/dist/src/util/animation/ValueAnimation.d.ts +10 -0
  220. package/dist/src/util/animation/animate.d.ts +37 -0
  221. package/dist/src/util/animation/easing.d.ts +130 -0
  222. package/dist/src/util/animation/index.d.ts +3 -0
  223. package/dist/src/util/animation/types.d.ts +87 -0
  224. package/dist/src/util/applyMixins.d.ts +8 -0
  225. package/dist/src/util/dom_event.d.ts +5 -0
  226. package/dist/src/util/dom_misc.d.ts +12 -0
  227. package/dist/src/util/dom_request.d.ts +14 -0
  228. package/dist/src/util/dom_style.d.ts +7 -0
  229. package/dist/src/util/index.d.ts +36 -0
  230. package/dist/src/util/internals/cleanupSvgAttribute.d.ts +2 -0
  231. package/dist/src/util/internals/cleanupSvgAttribute.test.d.ts +2 -0
  232. package/dist/src/util/internals/cloneDeep.d.ts +2 -0
  233. package/dist/src/util/internals/cloneDeep.test.d.ts +2 -0
  234. package/dist/src/util/internals/getRandomInt.d.ts +8 -0
  235. package/dist/src/util/internals/getRandomInt.test.d.ts +2 -0
  236. package/dist/src/util/internals/ifNaN.d.ts +8 -0
  237. package/dist/src/util/internals/index.d.ts +4 -0
  238. package/dist/src/util/internals/removeFromArray.d.ts +9 -0
  239. package/dist/src/util/internals/uid.d.ts +2 -0
  240. package/dist/src/util/lang_string.d.ts +22 -0
  241. package/dist/src/util/misc/boundingBoxFromPoints.d.ts +9 -0
  242. package/dist/src/util/misc/capValue.d.ts +2 -0
  243. package/dist/src/util/misc/cos.d.ts +10 -0
  244. package/dist/src/util/misc/dom.d.ts +28 -0
  245. package/dist/src/util/misc/findScaleTo.d.ts +20 -0
  246. package/dist/src/util/misc/groupSVGElements.d.ts +9 -0
  247. package/dist/src/util/misc/isTransparent.d.ts +11 -0
  248. package/dist/src/util/misc/matrix.d.ts +168 -0
  249. package/dist/src/util/misc/mergeClipPaths.d.ts +23 -0
  250. package/dist/src/util/misc/objectEnlive.d.ts +41 -0
  251. package/dist/src/util/misc/objectTransforms.d.ts +68 -0
  252. package/dist/src/util/misc/pick.d.ts +9 -0
  253. package/dist/src/util/misc/planeChange.d.ts +81 -0
  254. package/dist/src/util/misc/projectStroke/StrokeLineCapProjections.d.ts +52 -0
  255. package/dist/src/util/misc/projectStroke/StrokeLineJoinProjections.d.ts +82 -0
  256. package/dist/src/util/misc/projectStroke/StrokeProjectionsBase.d.ts +26 -0
  257. package/dist/src/util/misc/projectStroke/index.d.ts +12 -0
  258. package/dist/src/util/misc/projectStroke/types.d.ts +23 -0
  259. package/dist/src/util/misc/radiansDegreesConversion.d.ts +14 -0
  260. package/dist/src/util/misc/resolveOrigin.d.ts +9 -0
  261. package/dist/src/util/misc/rotatePoint.d.ts +12 -0
  262. package/dist/src/util/misc/sin.d.ts +10 -0
  263. package/dist/src/util/misc/svgParsing.d.ts +45 -0
  264. package/dist/src/util/misc/textStyles.d.ts +32 -0
  265. package/dist/src/util/misc/toFixed.d.ts +8 -0
  266. package/dist/src/util/misc/vectors.d.ts +58 -0
  267. package/dist/src/util/path/index.d.ts +96 -0
  268. package/dist/src/util/path/regex.d.ts +2 -0
  269. package/dist/src/util/path/typechecks.d.ts +24 -0
  270. package/dist/src/util/path/typedefs.d.ts +220 -0
  271. package/dist/src/util/transform_matrix_removal.d.ts +14 -0
  272. package/dist/src/util/typeAssertions.d.ts +19 -0
  273. package/e2e/site/index.html +25 -0
  274. package/e2e/utils/objects.ts +36 -0
  275. package/fabric.ts +72 -0
  276. package/index.node.ts +43 -0
  277. package/index.ts +1 -0
  278. package/jest.config.js +194 -0
  279. package/lib/aligning_guidelines.js +2 -2
  280. package/package.json +110 -40
  281. package/playwright.config.ts +64 -0
  282. package/publish.js +0 -26
  283. package/rollup.config.mjs +99 -0
  284. package/rollup.test.config.js +24 -0
  285. package/scripts/build.mjs +50 -0
  286. package/scripts/buildLock.mjs +115 -0
  287. package/scripts/buildReporter.mjs +15 -0
  288. package/scripts/buildStats.mjs +139 -0
  289. package/scripts/dirname.mjs +14 -0
  290. package/scripts/git.mjs +36 -0
  291. package/scripts/index.mjs +564 -0
  292. package/scripts/sandbox.mjs +149 -0
  293. package/src/ClassRegistry.ts +56 -0
  294. package/src/Collection.ts +346 -0
  295. package/src/CommonMethods.ts +63 -0
  296. package/src/EventTypeDefs.ts +298 -0
  297. package/src/Intersection.ts +302 -0
  298. package/src/Observable.ts +181 -0
  299. package/src/Pattern/Pattern.ts +207 -0
  300. package/src/Pattern/index.ts +2 -0
  301. package/src/Pattern/types.ts +17 -0
  302. package/src/Point.ts +388 -0
  303. package/src/Shadow.ts +214 -0
  304. package/src/brushes/{base_brush.class.js → BaseBrush.ts} +63 -42
  305. package/src/brushes/CircleBrush.test.ts +11 -0
  306. package/src/brushes/CircleBrush.ts +140 -0
  307. package/src/brushes/PatternBrush.ts +70 -0
  308. package/src/brushes/PencilBrush.ts +300 -0
  309. package/src/brushes/SprayBrush.ts +214 -0
  310. package/src/brushes/typedefs.ts +18 -0
  311. package/src/cache.ts +90 -0
  312. package/src/canvas/Canvas.ts +1598 -0
  313. package/src/canvas/DOMManagers/CanvasDOMManager.ts +124 -0
  314. package/src/canvas/DOMManagers/StaticCanvasDOMManager.ts +80 -0
  315. package/src/canvas/DOMManagers/util.spec.ts +26 -0
  316. package/src/canvas/DOMManagers/util.ts +98 -0
  317. package/src/canvas/SelectableCanvas.ts +1506 -0
  318. package/src/canvas/StaticCanvas.ts +1634 -0
  319. package/src/canvas/TextEditingManager.ts +70 -0
  320. package/src/canvas/canvas_gestures.mixin.ts +207 -0
  321. package/src/color/Color.ts +320 -0
  322. package/src/color/color_map.ts +154 -0
  323. package/src/color/constants.ts +107 -0
  324. package/src/color/typedefs.ts +18 -0
  325. package/src/color/util.ts +93 -0
  326. package/src/config.ts +159 -0
  327. package/src/constants.ts +29 -0
  328. package/src/controls/Control.ts +385 -0
  329. package/src/controls/changeWidth.ts +53 -0
  330. package/src/controls/commonControls.ts +105 -0
  331. package/src/controls/controlRendering.ts +138 -0
  332. package/src/controls/drag.ts +32 -0
  333. package/src/controls/fireEvent.ts +18 -0
  334. package/src/controls/index.ts +22 -0
  335. package/src/controls/polyControl.ts +135 -0
  336. package/src/controls/rotate.ts +87 -0
  337. package/src/controls/scale.ts +277 -0
  338. package/src/controls/scaleSkew.ts +92 -0
  339. package/src/controls/skew.ts +243 -0
  340. package/src/controls/util.ts +155 -0
  341. package/src/controls/wrapWithFireEvent.ts +25 -0
  342. package/src/controls/wrapWithFixedAnchor.ts +20 -0
  343. package/src/env/browser.ts +32 -0
  344. package/src/env/index.ts +38 -0
  345. package/src/env/node.ts +58 -0
  346. package/src/env/types.ts +15 -0
  347. package/src/filters/{base_filter.class.js → BaseFilter.ts} +203 -151
  348. package/src/filters/BlendColor.ts +219 -0
  349. package/src/filters/BlendImage.ts +230 -0
  350. package/src/filters/Blur.ts +181 -0
  351. package/src/filters/Boilerplate.ts +94 -0
  352. package/src/filters/Brightness.ts +85 -0
  353. package/src/filters/Canvas2dFilterBackend.ts +65 -0
  354. package/src/filters/ColorMatrix.ts +147 -0
  355. package/src/filters/ColorMatrixFilters.ts +79 -0
  356. package/src/filters/Composed.ts +78 -0
  357. package/src/filters/Contrast.ts +84 -0
  358. package/src/filters/Convolute.ts +186 -0
  359. package/src/filters/FilterBackend.ts +38 -0
  360. package/src/filters/GLProbes/GLProbe.ts +7 -0
  361. package/src/filters/GLProbes/NodeGLProbe.ts +15 -0
  362. package/src/filters/GLProbes/WebGLProbe.ts +47 -0
  363. package/src/filters/Gamma.ts +112 -0
  364. package/src/filters/Grayscale.ts +104 -0
  365. package/src/filters/HueRotation.ts +64 -0
  366. package/src/filters/Invert.ts +101 -0
  367. package/src/filters/Noise.ts +96 -0
  368. package/src/filters/Pixelate.ts +98 -0
  369. package/src/filters/RemoveColor.ts +137 -0
  370. package/src/filters/Resize.ts +540 -0
  371. package/src/filters/Saturation.ts +89 -0
  372. package/src/filters/Vibrance.ts +90 -0
  373. package/src/filters/WebGLFilterBackend.ts +456 -0
  374. package/src/filters/filters.ts +28 -0
  375. package/src/filters/index.ts +12 -0
  376. package/src/filters/shaders/baseFilter.ts +17 -0
  377. package/src/filters/shaders/blendColor.ts +33 -0
  378. package/src/filters/shaders/blendImage.ts +32 -0
  379. package/src/filters/shaders/blur.ts +24 -0
  380. package/src/filters/shaders/brightness.ts +11 -0
  381. package/src/filters/shaders/colorMatrix.ts +12 -0
  382. package/src/filters/shaders/constrast.ts +11 -0
  383. package/src/filters/shaders/convolute.ts +154 -0
  384. package/src/filters/shaders/gamma.ts +15 -0
  385. package/src/filters/shaders/grayscale.ts +36 -0
  386. package/src/filters/shaders/invert.ts +19 -0
  387. package/src/filters/shaders/noise.ts +16 -0
  388. package/src/filters/shaders/pixelate.ts +19 -0
  389. package/src/filters/shaders/removeColor.ts +13 -0
  390. package/src/filters/shaders/saturation.ts +15 -0
  391. package/src/filters/shaders/vibrance.ts +16 -0
  392. package/src/filters/typedefs.ts +59 -0
  393. package/src/filters/utils.ts +7 -0
  394. package/src/gradient/Gradient.ts +409 -0
  395. package/src/gradient/constants.ts +12 -0
  396. package/src/gradient/index.ts +2 -0
  397. package/src/gradient/parser/index.ts +3 -0
  398. package/src/gradient/parser/misc.ts +13 -0
  399. package/src/gradient/parser/parseColorStops.ts +56 -0
  400. package/src/gradient/parser/parseCoords.ts +73 -0
  401. package/src/gradient/typedefs.ts +104 -0
  402. package/src/mixins/{eraser_brush.mixin.js → eraser_brush.mixin.ts} +350 -239
  403. package/src/parkinglot/canvas_animation.mixin.ts +121 -0
  404. package/src/parkinglot/straighten.ts +58 -0
  405. package/src/parser/applyViewboxTransform.ts +158 -0
  406. package/src/parser/attributes.ts +25 -0
  407. package/src/parser/constants.ts +116 -0
  408. package/src/parser/doesSomeParentMatch.ts +18 -0
  409. package/src/parser/elementById.ts +21 -0
  410. package/src/parser/elementMatchesRule.ts +16 -0
  411. package/src/parser/elements_parser.ts +158 -0
  412. package/src/parser/getCSSRules.ts +61 -0
  413. package/src/parser/getGlobalStylesForElement.ts +19 -0
  414. package/src/parser/getGradientDefs.ts +31 -0
  415. package/src/parser/getMultipleNodes.ts +15 -0
  416. package/src/parser/getSvgRegex.ts +3 -0
  417. package/src/parser/hasAncestorWithNodeName.ts +14 -0
  418. package/src/parser/index.ts +8 -0
  419. package/src/parser/loadSVGFromString.ts +29 -0
  420. package/src/parser/loadSVGFromURL.ts +47 -0
  421. package/src/parser/normalizeAttr.ts +10 -0
  422. package/src/parser/normalizeValue.ts +64 -0
  423. package/src/parser/parseAttributes.ts +90 -0
  424. package/src/parser/parseFontDeclaration.ts +44 -0
  425. package/src/parser/parsePointsAttribute.ts +34 -0
  426. package/src/parser/parseSVGDocument.ts +118 -0
  427. package/src/parser/parseStyleAttribute.ts +27 -0
  428. package/src/parser/parseStyleObject.ts +15 -0
  429. package/src/parser/parseStyleString.ts +16 -0
  430. package/src/parser/parseTransformAttribute.ts +94 -0
  431. package/src/parser/parseUseDirectives.ts +78 -0
  432. package/src/parser/percent.ts +27 -0
  433. package/src/parser/recursivelyParseGradientsXlink.ts +42 -0
  434. package/src/parser/selectorMatches.ts +25 -0
  435. package/src/parser/setStrokeFillOpacity.ts +40 -0
  436. package/src/parser/typedefs.ts +13 -0
  437. package/src/shapes/ActiveSelection.ts +192 -0
  438. package/src/shapes/Circle.ts +236 -0
  439. package/src/shapes/Ellipse.ts +177 -0
  440. package/src/shapes/Group.ts +1103 -0
  441. package/src/shapes/IText/DraggableTextDelegate.ts +385 -0
  442. package/src/shapes/IText/IText.ts +696 -0
  443. package/src/shapes/IText/ITextBehavior.ts +1073 -0
  444. package/src/shapes/IText/ITextClickBehavior.ts +292 -0
  445. package/src/shapes/IText/ITextKeyBehavior.ts +675 -0
  446. package/src/shapes/IText/constants.ts +53 -0
  447. package/src/shapes/Image.ts +848 -0
  448. package/src/shapes/Line.ts +285 -0
  449. package/src/shapes/Object/AnimatableObject.ts +103 -0
  450. package/src/shapes/Object/FabricObject.ts +29 -0
  451. package/src/shapes/Object/FabricObjectSVGExportMixin.ts +278 -0
  452. package/src/shapes/Object/InteractiveObject.ts +669 -0
  453. package/src/shapes/Object/Object.ts +1589 -0
  454. package/src/shapes/Object/ObjectGeometry.ts +814 -0
  455. package/src/shapes/Object/ObjectOrigin.ts +277 -0
  456. package/src/shapes/Object/StackedObject.ts +206 -0
  457. package/src/shapes/Object/defaultValues.ts +110 -0
  458. package/src/shapes/Object/types/BaseProps.ts +96 -0
  459. package/src/shapes/Object/types/BorderProps.ts +40 -0
  460. package/src/shapes/Object/types/ControlProps.ts +69 -0
  461. package/src/shapes/Object/types/FabricObjectProps.ts +111 -0
  462. package/src/shapes/Object/types/FillStrokeProps.ts +90 -0
  463. package/src/shapes/Object/types/LockInteractionProps.ts +57 -0
  464. package/src/shapes/Object/types/ObjectProps.ts +49 -0
  465. package/src/shapes/Object/types/SerializedObjectProps.ts +73 -0
  466. package/src/shapes/Object/types/index.ts +8 -0
  467. package/src/shapes/Path.ts +434 -0
  468. package/src/shapes/Polygon.ts +22 -0
  469. package/src/shapes/Polyline.ts +364 -0
  470. package/src/shapes/Rect.ts +230 -0
  471. package/src/shapes/Text/StyledText.ts +323 -0
  472. package/src/shapes/Text/Text.ts +1891 -0
  473. package/src/shapes/Text/TextSVGExportMixin.ts +289 -0
  474. package/src/shapes/Text/constants.ts +111 -0
  475. package/src/shapes/Textbox.ts +526 -0
  476. package/src/shapes/Triangle.ts +62 -0
  477. package/src/typedefs.ts +121 -0
  478. package/src/util/animation/AnimationBase.ts +166 -0
  479. package/src/util/animation/AnimationFrameProvider.ts +9 -0
  480. package/src/util/animation/AnimationRegistry.ts +58 -0
  481. package/src/util/animation/ArrayAnimation.ts +27 -0
  482. package/src/util/animation/ColorAnimation.ts +74 -0
  483. package/src/util/animation/ValueAnimation.ts +29 -0
  484. package/src/util/animation/animate.ts +74 -0
  485. package/src/util/animation/easing.ts +327 -0
  486. package/src/util/animation/index.ts +2 -0
  487. package/src/util/animation/types.ts +136 -0
  488. package/src/util/applyMixins.ts +22 -0
  489. package/src/util/dom_event.ts +28 -0
  490. package/src/util/dom_misc.ts +44 -0
  491. package/src/util/dom_request.ts +64 -0
  492. package/src/util/dom_style.ts +20 -0
  493. package/src/util/index.ts +106 -0
  494. package/src/util/internals/cleanupSvgAttribute.test.ts +16 -0
  495. package/src/util/internals/cleanupSvgAttribute.ts +8 -0
  496. package/src/util/internals/cloneDeep.test.ts +16 -0
  497. package/src/util/internals/cloneDeep.ts +2 -0
  498. package/src/util/internals/getRandomInt.test.ts +33 -0
  499. package/src/util/internals/getRandomInt.ts +8 -0
  500. package/src/util/internals/ifNaN.ts +9 -0
  501. package/src/util/internals/index.ts +3 -0
  502. package/src/util/internals/removeFromArray.ts +14 -0
  503. package/src/util/internals/uid.ts +3 -0
  504. package/src/util/lang_string.ts +79 -0
  505. package/src/util/misc/boundingBoxFromPoints.ts +38 -0
  506. package/src/util/misc/capValue.ts +2 -0
  507. package/src/util/misc/cos.ts +24 -0
  508. package/src/util/misc/dom.ts +55 -0
  509. package/src/util/misc/findScaleTo.ts +29 -0
  510. package/src/util/misc/groupSVGElements.ts +15 -0
  511. package/src/util/misc/isTransparent.ts +28 -0
  512. package/src/util/misc/matrix.ts +313 -0
  513. package/src/util/misc/mergeClipPaths.ts +40 -0
  514. package/src/util/misc/objectEnlive.ts +174 -0
  515. package/src/util/misc/objectTransforms.ts +130 -0
  516. package/src/util/misc/pick.ts +29 -0
  517. package/src/util/misc/planeChange.ts +127 -0
  518. package/src/util/misc/projectStroke/StrokeLineCapProjections.ts +113 -0
  519. package/src/util/misc/projectStroke/StrokeLineJoinProjections.ts +227 -0
  520. package/src/util/misc/projectStroke/StrokeProjectionsBase.ts +76 -0
  521. package/src/util/misc/projectStroke/index.ts +55 -0
  522. package/src/util/misc/projectStroke/types.ts +24 -0
  523. package/src/util/misc/radiansDegreesConversion.ts +18 -0
  524. package/src/util/misc/resolveOrigin.ts +22 -0
  525. package/src/util/misc/rotatePoint.ts +15 -0
  526. package/src/util/misc/sin.ts +26 -0
  527. package/src/util/misc/svgParsing.ts +171 -0
  528. package/src/util/misc/textStyles.ts +132 -0
  529. package/src/util/misc/toFixed.ts +8 -0
  530. package/src/util/misc/vectors.ts +83 -0
  531. package/src/util/path/index.ts +1039 -0
  532. package/src/util/path/regex.ts +39 -0
  533. package/src/util/path/typechecks.ts +145 -0
  534. package/src/util/path/typedefs.ts +305 -0
  535. package/src/util/transform_matrix_removal.ts +61 -0
  536. package/src/util/typeAssertions.ts +78 -0
  537. package/tsconfig.json +106 -0
  538. package/HEADER.js +0 -203
  539. package/build.js +0 -287
  540. package/dist/fabric.js +0 -31187
  541. package/dist/fabric.min.js +0 -1
  542. package/old-travis-reference.yml +0 -97
  543. package/src/brushes/circle_brush.class.js +0 -144
  544. package/src/brushes/pattern_brush.class.js +0 -61
  545. package/src/brushes/pencil_brush.class.js +0 -310
  546. package/src/brushes/spray_brush.class.js +0 -219
  547. package/src/canvas.class.js +0 -1312
  548. package/src/color.class.js +0 -636
  549. package/src/control.class.js +0 -339
  550. package/src/controls.actions.js +0 -740
  551. package/src/controls.render.js +0 -99
  552. package/src/elements_parser.js +0 -152
  553. package/src/filters/2d_backend.class.js +0 -65
  554. package/src/filters/blendcolor_filter.class.js +0 -251
  555. package/src/filters/blendimage_filter.class.js +0 -247
  556. package/src/filters/blur_filter.class.js +0 -217
  557. package/src/filters/brightness_filter.class.js +0 -113
  558. package/src/filters/colormatrix_filter.class.js +0 -159
  559. package/src/filters/composed_filter.class.js +0 -72
  560. package/src/filters/contrast_filter.class.js +0 -113
  561. package/src/filters/convolute_filter.class.js +0 -352
  562. package/src/filters/filter_boilerplate.js +0 -111
  563. package/src/filters/filter_generator.js +0 -85
  564. package/src/filters/gamma_filter.class.js +0 -136
  565. package/src/filters/grayscale_filter.class.js +0 -154
  566. package/src/filters/hue_rotation.class.js +0 -107
  567. package/src/filters/invert_filter.class.js +0 -111
  568. package/src/filters/noise_filter.class.js +0 -134
  569. package/src/filters/pixelate_filter.class.js +0 -137
  570. package/src/filters/removecolor_filter.class.js +0 -173
  571. package/src/filters/resize_filter.class.js +0 -490
  572. package/src/filters/saturate_filter.class.js +0 -119
  573. package/src/filters/vibrance_filter.class.js +0 -122
  574. package/src/filters/webgl_backend.class.js +0 -396
  575. package/src/globalFabric.js +0 -4
  576. package/src/gradient.class.js +0 -490
  577. package/src/intersection.class.js +0 -172
  578. package/src/log.js +0 -11
  579. package/src/mixins/animation.mixin.js +0 -231
  580. package/src/mixins/canvas_dataurl_exporter.mixin.js +0 -97
  581. package/src/mixins/canvas_events.mixin.js +0 -974
  582. package/src/mixins/canvas_gestures.mixin.js +0 -149
  583. package/src/mixins/canvas_grouping.mixin.js +0 -177
  584. package/src/mixins/canvas_serialization.mixin.js +0 -228
  585. package/src/mixins/collection.mixin.js +0 -170
  586. package/src/mixins/default_controls.js +0 -114
  587. package/src/mixins/itext.svg_export.js +0 -241
  588. package/src/mixins/itext_behavior.mixin.js +0 -940
  589. package/src/mixins/itext_click_behavior.mixin.js +0 -278
  590. package/src/mixins/itext_key_behavior.mixin.js +0 -694
  591. package/src/mixins/object.svg_export.js +0 -258
  592. package/src/mixins/object_geometry.mixin.js +0 -683
  593. package/src/mixins/object_interactivity.mixin.js +0 -314
  594. package/src/mixins/object_origin.mixin.js +0 -255
  595. package/src/mixins/object_stacking.mixin.js +0 -80
  596. package/src/mixins/object_straightening.mixin.js +0 -80
  597. package/src/mixins/observable.mixin.js +0 -141
  598. package/src/mixins/shared_methods.mixin.js +0 -94
  599. package/src/mixins/stateful.mixin.js +0 -107
  600. package/src/mixins/text_style.mixin.js +0 -324
  601. package/src/parser.js +0 -1090
  602. package/src/pattern.class.js +0 -189
  603. package/src/point.class.js +0 -337
  604. package/src/shadow.class.js +0 -195
  605. package/src/shapes/active_selection.class.js +0 -155
  606. package/src/shapes/circle.class.js +0 -210
  607. package/src/shapes/ellipse.class.js +0 -181
  608. package/src/shapes/group.class.js +0 -593
  609. package/src/shapes/image.class.js +0 -764
  610. package/src/shapes/itext.class.js +0 -526
  611. package/src/shapes/line.class.js +0 -324
  612. package/src/shapes/object.class.js +0 -2008
  613. package/src/shapes/path.class.js +0 -384
  614. package/src/shapes/polygon.class.js +0 -81
  615. package/src/shapes/polyline.class.js +0 -268
  616. package/src/shapes/rect.class.js +0 -187
  617. package/src/shapes/text.class.js +0 -1696
  618. package/src/shapes/textbox.class.js +0 -461
  619. package/src/shapes/triangle.class.js +0 -93
  620. package/src/static_canvas.class.js +0 -1881
  621. package/src/util/anim_ease.js +0 -398
  622. package/src/util/animate.js +0 -254
  623. package/src/util/animate_color.js +0 -74
  624. package/src/util/dom_event.js +0 -50
  625. package/src/util/dom_misc.js +0 -300
  626. package/src/util/dom_request.js +0 -54
  627. package/src/util/dom_style.js +0 -70
  628. package/src/util/lang_array.js +0 -94
  629. package/src/util/lang_class.js +0 -115
  630. package/src/util/lang_object.js +0 -75
  631. package/src/util/lang_string.js +0 -110
  632. package/src/util/misc.js +0 -1330
  633. package/src/util/named_accessors.mixin.js +0 -428
  634. package/src/util/path.js +0 -829
@@ -0,0 +1,285 @@
1
+ import { SHARED_ATTRIBUTES } from '../parser/attributes';
2
+ import { parseAttributes } from '../parser/parseAttributes';
3
+ import type { TClassProperties } from '../typedefs';
4
+ import { classRegistry } from '../ClassRegistry';
5
+ import { FabricObject, cacheProperties } from './Object/FabricObject';
6
+ import { Point } from '../Point';
7
+ import { isFiller } from '../util/typeAssertions';
8
+ import type {
9
+ FabricObjectProps,
10
+ SerializedObjectProps,
11
+ TProps,
12
+ } from './Object/types';
13
+ import type { ObjectEvents } from '../EventTypeDefs';
14
+ import { makeBoundingBoxFromPoints } from '../util';
15
+ import { CENTER, LEFT, TOP } from '../constants';
16
+
17
+ // @TODO this code is terrible and Line should be a special case of polyline.
18
+
19
+ const coordProps = ['x1', 'x2', 'y1', 'y2'] as const;
20
+
21
+ interface UniqueLineProps {
22
+ x1: number;
23
+ x2: number;
24
+ y1: number;
25
+ y2: number;
26
+ }
27
+
28
+ export interface SerializedLineProps
29
+ extends SerializedObjectProps,
30
+ UniqueLineProps {}
31
+
32
+ export class Line<
33
+ Props extends TProps<FabricObjectProps> = Partial<FabricObjectProps>,
34
+ SProps extends SerializedLineProps = SerializedLineProps,
35
+ EventSpec extends ObjectEvents = ObjectEvents
36
+ >
37
+ extends FabricObject<Props, SProps, EventSpec>
38
+ implements UniqueLineProps
39
+ {
40
+ /**
41
+ * x value or first line edge
42
+ * @type number
43
+ * @default
44
+ */
45
+ declare x1: number;
46
+
47
+ /**
48
+ * y value or first line edge
49
+ * @type number
50
+ * @default
51
+ */
52
+ declare y1: number;
53
+
54
+ /**
55
+ * x value or second line edge
56
+ * @type number
57
+ * @default
58
+ */
59
+ declare x2: number;
60
+
61
+ /**
62
+ * y value or second line edge
63
+ * @type number
64
+ * @default
65
+ */
66
+ declare y2: number;
67
+
68
+ static type = 'Line';
69
+
70
+ static cacheProperties = [...cacheProperties, ...coordProps];
71
+ /**
72
+ * Constructor
73
+ * @param {Array} [points] Array of points
74
+ * @param {Object} [options] Options object
75
+ * @return {Line} thisArg
76
+ */
77
+ constructor([x1, y1, x2, y2] = [0, 0, 0, 0], options: Props = {} as Props) {
78
+ super({ ...options, x1, y1, x2, y2 });
79
+ this._setWidthHeight();
80
+ const { left, top } = options;
81
+ typeof left === 'number' && this.set(LEFT, left);
82
+ typeof top === 'number' && this.set(TOP, top);
83
+ }
84
+
85
+ /**
86
+ * @private
87
+ * @param {Object} [options] Options
88
+ */
89
+ _setWidthHeight() {
90
+ const { x1, y1, x2, y2 } = this;
91
+ this.width = Math.abs(x2 - x1);
92
+ this.height = Math.abs(y2 - y1);
93
+ const { left, top, width, height } = makeBoundingBoxFromPoints([
94
+ { x: x1, y: y1 },
95
+ { x: x2, y: y2 },
96
+ ]);
97
+ const position = new Point(left + width / 2, top + height / 2);
98
+ this.setPositionByOrigin(position, CENTER, CENTER);
99
+ }
100
+
101
+ /**
102
+ * @private
103
+ * @param {String} key
104
+ * @param {*} value
105
+ */
106
+ _set(key: string, value: any) {
107
+ super._set(key, value);
108
+ if (coordProps.includes(key as keyof UniqueLineProps)) {
109
+ // this doesn't make sense very much, since setting x1 when top or left
110
+ // are already set, is just going to show a strange result since the
111
+ // line will move way more than the developer expect.
112
+ // in fabric5 it worked only when the line didn't have extra transformations,
113
+ // in fabric6 too. With extra transform they behave bad in different ways.
114
+ // This needs probably a good rework or a tutorial if you have to create a dynamic line
115
+ this._setWidthHeight();
116
+ }
117
+ return this;
118
+ }
119
+
120
+ /**
121
+ * @private
122
+ * @param {CanvasRenderingContext2D} ctx Context to render on
123
+ */
124
+ _render(ctx: CanvasRenderingContext2D) {
125
+ ctx.beginPath();
126
+
127
+ const p = this.calcLinePoints();
128
+ ctx.moveTo(p.x1, p.y1);
129
+ ctx.lineTo(p.x2, p.y2);
130
+
131
+ ctx.lineWidth = this.strokeWidth;
132
+
133
+ // TODO: test this
134
+ // make sure setting "fill" changes color of a line
135
+ // (by copying fillStyle to strokeStyle, since line is stroked, not filled)
136
+ const origStrokeStyle = ctx.strokeStyle;
137
+ if (isFiller(this.stroke)) {
138
+ ctx.strokeStyle = this.stroke.toLive(ctx)!;
139
+ } else {
140
+ ctx.strokeStyle = this.stroke ?? ctx.fillStyle;
141
+ }
142
+ this.stroke && this._renderStroke(ctx);
143
+ ctx.strokeStyle = origStrokeStyle;
144
+ }
145
+
146
+ /**
147
+ * This function is an helper for svg import. it returns the center of the object in the svg
148
+ * untransformed coordinates
149
+ * @private
150
+ * @return {Point} center point from element coordinates
151
+ */
152
+ _findCenterFromElement(): Point {
153
+ return new Point((this.x1 + this.x2) / 2, (this.y1 + this.y2) / 2);
154
+ }
155
+
156
+ /**
157
+ * Returns object representation of an instance
158
+ * @method toObject
159
+ * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output
160
+ * @return {Object} object representation of an instance
161
+ */
162
+ toObject<
163
+ T extends Omit<Props & TClassProperties<this>, keyof SProps>,
164
+ K extends keyof T = never
165
+ >(propertiesToInclude: K[] = []): Pick<T, K> & SProps {
166
+ return {
167
+ ...super.toObject(propertiesToInclude),
168
+ ...this.calcLinePoints(),
169
+ };
170
+ }
171
+
172
+ /*
173
+ * Calculate object dimensions from its properties
174
+ * @private
175
+ */
176
+ _getNonTransformedDimensions(): Point {
177
+ const dim = super._getNonTransformedDimensions();
178
+ if (this.strokeLineCap === 'butt') {
179
+ if (this.width === 0) {
180
+ dim.y -= this.strokeWidth;
181
+ }
182
+ if (this.height === 0) {
183
+ dim.x -= this.strokeWidth;
184
+ }
185
+ }
186
+ return dim;
187
+ }
188
+
189
+ /**
190
+ * Recalculates line points given width and height
191
+ * Those points are simply placed around the center,
192
+ * This is not useful outside internal render functions and svg output
193
+ * Is not meant to be for the developer.
194
+ * @private
195
+ */
196
+ calcLinePoints(): UniqueLineProps {
197
+ const { x1: _x1, x2: _x2, y1: _y1, y2: _y2, width, height } = this;
198
+ const xMult = _x1 <= _x2 ? -1 : 1,
199
+ yMult = _y1 <= _y2 ? -1 : 1,
200
+ x1 = (xMult * width) / 2,
201
+ y1 = (yMult * height) / 2,
202
+ x2 = (xMult * -width) / 2,
203
+ y2 = (yMult * -height) / 2;
204
+
205
+ return {
206
+ x1,
207
+ x2,
208
+ y1,
209
+ y2,
210
+ };
211
+ }
212
+
213
+ /* _FROM_SVG_START_ */
214
+
215
+ /**
216
+ * Returns svg representation of an instance
217
+ * @return {Array} an array of strings with the specific svg representation
218
+ * of the instance
219
+ */
220
+ _toSVG() {
221
+ const { x1, x2, y1, y2 } = this.calcLinePoints();
222
+ return [
223
+ '<line ',
224
+ 'COMMON_PARTS',
225
+ `x1="${x1}" y1="${y1}" x2="${x2}" y2="${y2}" />\n`,
226
+ ];
227
+ }
228
+
229
+ /**
230
+ * List of attribute names to account for when parsing SVG element (used by {@link Line.fromElement})
231
+ * @static
232
+ * @memberOf Line
233
+ * @see http://www.w3.org/TR/SVG/shapes.html#LineElement
234
+ */
235
+ static ATTRIBUTE_NAMES = SHARED_ATTRIBUTES.concat(coordProps);
236
+
237
+ /**
238
+ * Returns Line instance from an SVG element
239
+ * @static
240
+ * @memberOf Line
241
+ * @param {SVGElement} element Element to parse
242
+ * @param {Object} [options] Options object
243
+ * @param {Function} [callback] callback function invoked after parsing
244
+ */
245
+ static async fromElement(element: SVGElement) {
246
+ const {
247
+ x1 = 0,
248
+ y1 = 0,
249
+ x2 = 0,
250
+ y2 = 0,
251
+ ...parsedAttributes
252
+ } = parseAttributes(element, this.ATTRIBUTE_NAMES);
253
+ return new this([x1, y1, x2, y2], parsedAttributes);
254
+ }
255
+
256
+ /* _FROM_SVG_END_ */
257
+
258
+ /**
259
+ * Returns Line instance from an object representation
260
+ * @static
261
+ * @memberOf Line
262
+ * @param {Object} object Object to create an instance from
263
+ * @returns {Promise<Line>}
264
+ */
265
+ static fromObject<T extends TProps<SerializedLineProps>>({
266
+ x1,
267
+ y1,
268
+ x2,
269
+ y2,
270
+ ...object
271
+ }: T) {
272
+ return this._fromObject<Line>(
273
+ {
274
+ ...object,
275
+ points: [x1, y1, x2, y2],
276
+ },
277
+ {
278
+ extraParam: 'points',
279
+ }
280
+ );
281
+ }
282
+ }
283
+
284
+ classRegistry.setClass(Line);
285
+ classRegistry.setSVGClass(Line);
@@ -0,0 +1,103 @@
1
+ import type { TColorArg } from '../../color/typedefs';
2
+ import type { ObjectEvents } from '../../EventTypeDefs';
3
+ import type { TAnimation } from '../../util/animation/animate';
4
+ import { animate, animateColor } from '../../util/animation/animate';
5
+ import type {
6
+ AnimationOptions,
7
+ ArrayAnimationOptions,
8
+ ColorAnimationOptions,
9
+ ValueAnimationOptions,
10
+ } from '../../util/animation/types';
11
+ import { StackedObject } from './StackedObject';
12
+
13
+ export abstract class AnimatableObject<
14
+ EventSpec extends ObjectEvents = ObjectEvents
15
+ > extends StackedObject<EventSpec> {
16
+ /**
17
+ * List of properties to consider for animating colors.
18
+ * @type String[]
19
+ */
20
+ declare colorProperties: string[];
21
+
22
+ /**
23
+ * Animates object's properties
24
+ * @param {Record<string, number | number[] | TColorArg>} animatable map of keys and end values
25
+ * @param {Partial<AnimationOptions<T>>} options
26
+ * @tutorial {@link http://fabricjs.com/fabric-intro-part-2#animation}
27
+ * @return {Record<string, TAnimation<T>>} map of animation contexts
28
+ *
29
+ * As object — multiple properties
30
+ *
31
+ * object.animate({ left: ..., top: ... });
32
+ * object.animate({ left: ..., top: ... }, { duration: ... });
33
+ */
34
+ animate<T extends number | number[] | TColorArg>(
35
+ animatable: Record<string, T>,
36
+ options?: Partial<AnimationOptions<T>>
37
+ ): Record<string, TAnimation<T>> {
38
+ return Object.entries(animatable).reduce((acc, [key, endValue]) => {
39
+ acc[key] = this._animate(key, endValue, options);
40
+ return acc;
41
+ }, {} as Record<string, TAnimation<T>>);
42
+ }
43
+
44
+ /**
45
+ * @private
46
+ * @param {String} key Property to animate
47
+ * @param {String} to Value to animate to
48
+ * @param {Object} [options] Options object
49
+ */
50
+ _animate<T extends number | number[] | TColorArg>(
51
+ key: string,
52
+ endValue: T,
53
+ options: Partial<AnimationOptions<T>> = {}
54
+ ): TAnimation<T> {
55
+ const path = key.split('.');
56
+ const propIsColor = this.colorProperties.includes(path[path.length - 1]);
57
+ const { easing, duration, abort, startValue, onChange, onComplete } =
58
+ options;
59
+ const animationOptions = {
60
+ target: this,
61
+ // path.reduce... is the current value in case start value isn't provided
62
+ startValue:
63
+ startValue ?? path.reduce((deep: any, key) => deep[key], this),
64
+ endValue,
65
+ easing,
66
+ duration,
67
+ abort: abort?.bind(this),
68
+ onChange: (
69
+ value: number | number[] | string,
70
+ valueProgress: number,
71
+ durationProgress: number
72
+ ) => {
73
+ path.reduce((deep: Record<string, any>, key, index) => {
74
+ if (index === path.length - 1) {
75
+ deep[key] = value;
76
+ }
77
+ return deep[key];
78
+ }, this);
79
+ onChange &&
80
+ // @ts-expect-error generic callback arg0 is wrong
81
+ onChange(value, valueProgress, durationProgress);
82
+ },
83
+ onComplete: (
84
+ value: number | number[] | string,
85
+ valueProgress: number,
86
+ durationProgress: number
87
+ ) => {
88
+ this.setCoords();
89
+ onComplete &&
90
+ // @ts-expect-error generic callback arg0 is wrong
91
+ onComplete(value, valueProgress, durationProgress);
92
+ },
93
+ } as AnimationOptions<T>;
94
+
95
+ return (
96
+ propIsColor
97
+ ? animateColor(animationOptions as ColorAnimationOptions)
98
+ : animate(
99
+ animationOptions as ValueAnimationOptions | ArrayAnimationOptions
100
+ )
101
+ ) as TAnimation<T>;
102
+ }
103
+ }
@@ -0,0 +1,29 @@
1
+ import type { ObjectEvents } from '../../EventTypeDefs';
2
+ import { FabricObjectSVGExportMixin } from './FabricObjectSVGExportMixin';
3
+ import { InteractiveFabricObject } from './InteractiveObject';
4
+ import { applyMixins } from '../../util/applyMixins';
5
+ import type { FabricObjectProps } from './types/FabricObjectProps';
6
+ import type { TFabricObjectProps, SerializedObjectProps } from './types';
7
+ import { classRegistry } from '../../ClassRegistry';
8
+
9
+ // TODO somehow we have to make a tree-shakeable import
10
+
11
+ // eslint-disable-next-line @typescript-eslint/no-empty-interface, @typescript-eslint/no-unused-vars
12
+ export interface FabricObject<
13
+ Props extends TFabricObjectProps = Partial<FabricObjectProps>,
14
+ SProps extends SerializedObjectProps = SerializedObjectProps,
15
+ EventSpec extends ObjectEvents = ObjectEvents
16
+ > extends FabricObjectSVGExportMixin {}
17
+
18
+ export class FabricObject<
19
+ Props extends TFabricObjectProps = Partial<FabricObjectProps>,
20
+ SProps extends SerializedObjectProps = SerializedObjectProps,
21
+ EventSpec extends ObjectEvents = ObjectEvents
22
+ > extends InteractiveFabricObject<Props, SProps, EventSpec> {}
23
+
24
+ applyMixins(FabricObject, [FabricObjectSVGExportMixin]);
25
+
26
+ classRegistry.setClass(FabricObject);
27
+ classRegistry.setClass(FabricObject, 'object');
28
+
29
+ export { cacheProperties } from './defaultValues';
@@ -0,0 +1,278 @@
1
+ // @ts-nocheck
2
+ import type { TSVGReviver } from '../../typedefs';
3
+ import { uid } from '../../util/internals/uid';
4
+ import { colorPropToSVG, matrixToSVG } from '../../util/misc/svgParsing';
5
+ import { NONE } from '../../constants';
6
+
7
+ export class FabricObjectSVGExportMixin {
8
+ /**
9
+ * When an object is being exported as SVG as a clippath, a reference inside the SVG is needed.
10
+ * This reference is a UID in the fabric namespace and is temporary stored here.
11
+ * @type {String}
12
+ */
13
+ declare clipPathId?: string;
14
+
15
+ /**
16
+ * Returns styles-string for svg-export
17
+ * @param {Boolean} skipShadow a boolean to skip shadow filter output
18
+ * @return {String}
19
+ */
20
+ getSvgStyles(skipShadow?: boolean) {
21
+ const fillRule = this.fillRule ? this.fillRule : 'nonzero',
22
+ strokeWidth = this.strokeWidth ? this.strokeWidth : '0',
23
+ strokeDashArray = this.strokeDashArray
24
+ ? this.strokeDashArray.join(' ')
25
+ : NONE,
26
+ strokeDashOffset = this.strokeDashOffset ? this.strokeDashOffset : '0',
27
+ strokeLineCap = this.strokeLineCap ? this.strokeLineCap : 'butt',
28
+ strokeLineJoin = this.strokeLineJoin ? this.strokeLineJoin : 'miter',
29
+ strokeMiterLimit = this.strokeMiterLimit ? this.strokeMiterLimit : '4',
30
+ opacity = typeof this.opacity !== 'undefined' ? this.opacity : '1',
31
+ visibility = this.visible ? '' : ' visibility: hidden;',
32
+ filter = skipShadow ? '' : this.getSvgFilter(),
33
+ fill = colorPropToSVG('fill', this.fill),
34
+ stroke = colorPropToSVG('stroke', this.stroke);
35
+
36
+ return [
37
+ stroke,
38
+ 'stroke-width: ',
39
+ strokeWidth,
40
+ '; ',
41
+ 'stroke-dasharray: ',
42
+ strokeDashArray,
43
+ '; ',
44
+ 'stroke-linecap: ',
45
+ strokeLineCap,
46
+ '; ',
47
+ 'stroke-dashoffset: ',
48
+ strokeDashOffset,
49
+ '; ',
50
+ 'stroke-linejoin: ',
51
+ strokeLineJoin,
52
+ '; ',
53
+ 'stroke-miterlimit: ',
54
+ strokeMiterLimit,
55
+ '; ',
56
+ fill,
57
+ 'fill-rule: ',
58
+ fillRule,
59
+ '; ',
60
+ 'opacity: ',
61
+ opacity,
62
+ ';',
63
+ filter,
64
+ visibility,
65
+ ].join('');
66
+ }
67
+
68
+ /**
69
+ * Returns styles-string for svg-export
70
+ * @param {Object} style the object from which to retrieve style properties
71
+ * @param {Boolean} useWhiteSpace a boolean to include an additional attribute in the style.
72
+ * @return {String}
73
+ */
74
+ getSvgSpanStyles(style, useWhiteSpace?: boolean) {
75
+ const term = '; ',
76
+ fontFamily = style.fontFamily
77
+ ? `font-family: ${
78
+ style.fontFamily.indexOf("'") === -1 &&
79
+ style.fontFamily.indexOf('"') === -1
80
+ ? `'${style.fontFamily}'`
81
+ : style.fontFamily
82
+ }${term}`
83
+ : '',
84
+ strokeWidth = style.strokeWidth
85
+ ? `stroke-width: ${style.strokeWidth}${term}`
86
+ : '',
87
+ fontSize = style.fontSize ? `font-size: ${style.fontSize}px${term}` : '',
88
+ fontStyle = style.fontStyle
89
+ ? `font-style: ${style.fontStyle}${term}`
90
+ : '',
91
+ fontWeight = style.fontWeight
92
+ ? `font-weight: ${style.fontWeight}${term}`
93
+ : '',
94
+ fill = style.fill ? colorPropToSVG('fill', style.fill) : '',
95
+ stroke = style.stroke ? colorPropToSVG('stroke', style.stroke) : '',
96
+ textDecoration = this.getSvgTextDecoration(style),
97
+ deltaY = style.deltaY ? `baseline-shift: ${-style.deltaY}; ` : '';
98
+
99
+ return [
100
+ stroke,
101
+ strokeWidth,
102
+ fontFamily,
103
+ fontSize,
104
+ fontStyle,
105
+ fontWeight,
106
+ textDecoration
107
+ ? `text-decoration: ${textDecoration}${term}`
108
+ : textDecoration,
109
+ fill,
110
+ deltaY,
111
+ useWhiteSpace ? 'white-space: pre; ' : '',
112
+ ].join('');
113
+ }
114
+
115
+ /**
116
+ * Returns text-decoration property for svg-export
117
+ * @param {Object} style the object from which to retrieve style properties
118
+ * @return {String}
119
+ */
120
+ getSvgTextDecoration(style) {
121
+ return ['overline', 'underline', 'line-through']
122
+ .filter((decoration) => style[decoration.replace('-', '')])
123
+ .join(' ');
124
+ }
125
+
126
+ /**
127
+ * Returns filter for svg shadow
128
+ * @return {String}
129
+ */
130
+ getSvgFilter() {
131
+ return this.shadow ? `filter: url(#SVGID_${this.shadow.id});` : '';
132
+ }
133
+
134
+ /**
135
+ * Returns id attribute for svg output
136
+ * @return {String}
137
+ */
138
+ getSvgCommons() {
139
+ return [
140
+ this.id ? `id="${this.id}" ` : '',
141
+ this.clipPath ? `clip-path="url(#${this.clipPath.clipPathId})" ` : '',
142
+ ].join('');
143
+ }
144
+
145
+ /**
146
+ * Returns transform-string for svg-export
147
+ * @param {Boolean} use the full transform or the single object one.
148
+ * @return {String}
149
+ */
150
+ getSvgTransform(full?: boolean, additionalTransform = '') {
151
+ const transform = full ? this.calcTransformMatrix() : this.calcOwnMatrix(),
152
+ svgTransform = `transform="${matrixToSVG(transform)}`;
153
+ return `${svgTransform}${additionalTransform}" `;
154
+ }
155
+
156
+ /**
157
+ * Returns svg representation of an instance
158
+ * @param {TSVGReviver} [reviver] Method for further parsing of svg representation.
159
+ * @return {String} svg representation of an instance
160
+ */
161
+ toSVG(reviver?: TSVGReviver) {
162
+ return this._createBaseSVGMarkup(this._toSVG(reviver), {
163
+ reviver,
164
+ });
165
+ }
166
+
167
+ /**
168
+ * Returns svg clipPath representation of an instance
169
+ * @param {TSVGReviver} [reviver] Method for further parsing of svg representation.
170
+ * @return {String} svg representation of an instance
171
+ */
172
+ toClipPathSVG(reviver?: TSVGReviver) {
173
+ return (
174
+ '\t' +
175
+ this._createBaseClipPathSVGMarkup(this._toSVG(reviver), {
176
+ reviver,
177
+ })
178
+ );
179
+ }
180
+
181
+ /**
182
+ * @private
183
+ */
184
+ _createBaseClipPathSVGMarkup(
185
+ objectMarkup: string[],
186
+ {
187
+ reviver,
188
+ additionalTransform = '',
189
+ }: { reviver?: TSVGReviver; additionalTransform?: string } = {}
190
+ ) {
191
+ const commonPieces = [
192
+ this.getSvgTransform(true, additionalTransform),
193
+ this.getSvgCommons(),
194
+ ].join(''),
195
+ // insert commons in the markup, style and svgCommons
196
+ index = objectMarkup.indexOf('COMMON_PARTS');
197
+ objectMarkup[index] = commonPieces;
198
+ return reviver ? reviver(objectMarkup.join('')) : objectMarkup.join('');
199
+ }
200
+
201
+ /**
202
+ * @private
203
+ */
204
+ _createBaseSVGMarkup(
205
+ objectMarkup: string[],
206
+ {
207
+ noStyle,
208
+ reviver,
209
+ withShadow,
210
+ additionalTransform,
211
+ }: {
212
+ noStyle?: boolean;
213
+ reviver?: TSVGReviver;
214
+ withShadow?: boolean;
215
+ additionalTransform?: string;
216
+ } = {}
217
+ ) {
218
+ const styleInfo = noStyle ? '' : `style="${this.getSvgStyles()}" `,
219
+ shadowInfo = withShadow ? `style="${this.getSvgFilter()}" ` : '',
220
+ clipPath = this.clipPath,
221
+ vectorEffect = this.strokeUniform
222
+ ? 'vector-effect="non-scaling-stroke" '
223
+ : '',
224
+ absoluteClipPath = clipPath && clipPath.absolutePositioned,
225
+ stroke = this.stroke,
226
+ fill = this.fill,
227
+ shadow = this.shadow,
228
+ markup = [],
229
+ // insert commons in the markup, style and svgCommons
230
+ index = objectMarkup.indexOf('COMMON_PARTS');
231
+ let clipPathMarkup;
232
+ if (clipPath) {
233
+ clipPath.clipPathId = `CLIPPATH_${uid()}`;
234
+ clipPathMarkup = `<clipPath id="${
235
+ clipPath.clipPathId
236
+ }" >\n${clipPath.toClipPathSVG(reviver)}</clipPath>\n`;
237
+ }
238
+ if (absoluteClipPath) {
239
+ markup.push('<g ', shadowInfo, this.getSvgCommons(), ' >\n');
240
+ }
241
+ markup.push(
242
+ '<g ',
243
+ this.getSvgTransform(false),
244
+ !absoluteClipPath ? shadowInfo + this.getSvgCommons() : '',
245
+ ' >\n'
246
+ );
247
+ const commonPieces = [
248
+ styleInfo,
249
+ vectorEffect,
250
+ noStyle ? '' : this.addPaintOrder(),
251
+ ' ',
252
+ additionalTransform ? `transform="${additionalTransform}" ` : '',
253
+ ].join('');
254
+ objectMarkup[index] = commonPieces;
255
+ if (fill && fill.toLive) {
256
+ markup.push(fill.toSVG(this));
257
+ }
258
+ if (stroke && stroke.toLive) {
259
+ markup.push(stroke.toSVG(this));
260
+ }
261
+ if (shadow) {
262
+ markup.push(shadow.toSVG(this));
263
+ }
264
+ if (clipPath) {
265
+ markup.push(clipPathMarkup);
266
+ }
267
+ markup.push(objectMarkup.join(''));
268
+ markup.push('</g>\n');
269
+ absoluteClipPath && markup.push('</g>\n');
270
+ return reviver ? reviver(markup.join('')) : markup.join('');
271
+ }
272
+
273
+ addPaintOrder() {
274
+ return this.paintFirst !== 'fill'
275
+ ? ` paint-order="${this.paintFirst}" `
276
+ : '';
277
+ }
278
+ }