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,401 @@
1
+ //@ts-nocheck
2
+ import { Color } from '../color/Color';
3
+ import { iMatrix } from '../constants';
4
+ import { parseTransformAttribute } from '../parser/parseTransformAttribute';
5
+ import type { FabricObject } from '../shapes/Object/FabricObject';
6
+ import { TMat2D } from '../typedefs';
7
+ import { uid } from '../util/internals/uid';
8
+ import { pick } from '../util/misc/pick';
9
+ import { matrixToSVG } from '../util/misc/svgParsing';
10
+ import { linearDefaultCoords, radialDefaultCoords } from './constants';
11
+ import {
12
+ parseColorStops,
13
+ parseCoords,
14
+ parseGradientUnits,
15
+ parseType,
16
+ } from './parser';
17
+ import {
18
+ ColorStop,
19
+ GradientCoords,
20
+ GradientOptions,
21
+ GradientType,
22
+ GradientUnits,
23
+ SVGOptions,
24
+ } from './typedefs';
25
+ import { classRegistry } from '../util/class_registry';
26
+
27
+ /**
28
+ * Gradient class
29
+ * @class Gradient
30
+ * @tutorial {@link http://fabricjs.com/fabric-intro-part-2#gradients}
31
+ */
32
+ export class Gradient<
33
+ S,
34
+ T extends GradientType = S extends GradientType ? S : 'linear'
35
+ > {
36
+ /**
37
+ * Horizontal offset for aligning gradients coming from SVG when outside pathgroups
38
+ * @type Number
39
+ * @default 0
40
+ */
41
+ declare offsetX: number;
42
+
43
+ /**
44
+ * Vertical offset for aligning gradients coming from SVG when outside pathgroups
45
+ * @type Number
46
+ * @default 0
47
+ */
48
+ declare offsetY: number;
49
+
50
+ /**
51
+ * A transform matrix to apply to the gradient before painting.
52
+ * Imported from svg gradients, is not applied with the current transform in the center.
53
+ * Before this transform is applied, the origin point is at the top left corner of the object
54
+ * plus the addition of offsetY and offsetX.
55
+ * @type Number[]
56
+ * @default null
57
+ */
58
+ declare gradientTransform: TMat2D | null;
59
+
60
+ /**
61
+ * coordinates units for coords.
62
+ * If `pixels`, the number of coords are in the same unit of width / height.
63
+ * If set as `percentage` the coords are still a number, but 1 means 100% of width
64
+ * for the X and 100% of the height for the y. It can be bigger than 1 and negative.
65
+ * allowed values pixels or percentage.
66
+ * @type GradientUnits
67
+ * @default 'pixels'
68
+ */
69
+ declare gradientUnits: GradientUnits;
70
+
71
+ /**
72
+ * Gradient type linear or radial
73
+ * @type GradientType
74
+ * @default 'linear'
75
+ */
76
+ declare type: T;
77
+
78
+ /**
79
+ * Defines how the gradient is located in space and spread
80
+ * @type GradientCoords
81
+ */
82
+ declare coords: GradientCoords<T>;
83
+
84
+ /**
85
+ * Defines how many colors a gradient has and how they are located on the axis
86
+ * defined by coords
87
+ * @type GradientCoords
88
+ */
89
+ declare colorStops: ColorStop[];
90
+
91
+ /**
92
+ * If true, this object will not be exported during the serialization of a canvas
93
+ * @type boolean
94
+ */
95
+ declare excludeFromExport?: boolean;
96
+
97
+ /**
98
+ * ID used for SVG export functionalities
99
+ * @type number | string
100
+ */
101
+ declare readonly id: string | number;
102
+
103
+ constructor({
104
+ type = 'linear' as T,
105
+ gradientUnits = 'pixels',
106
+ coords,
107
+ colorStops = [],
108
+ offsetX = 0,
109
+ offsetY = 0,
110
+ gradientTransform = null,
111
+ id,
112
+ }: GradientOptions<T>) {
113
+ this.id = id ? `${id}_${uid()}` : uid();
114
+ this.type = type;
115
+ this.gradientUnits = gradientUnits;
116
+ this.gradientTransform = gradientTransform;
117
+ this.offsetX = offsetX;
118
+ this.offsetY = offsetY;
119
+ this.coords = {
120
+ ...(this.type === 'radial' ? radialDefaultCoords : linearDefaultCoords),
121
+ ...coords,
122
+ } as GradientCoords<T>;
123
+ this.colorStops = colorStops.slice();
124
+ }
125
+
126
+ // isType<S extends GradientType>(type: S): this is Gradient<S> {
127
+ // return (this.type as GradientType) === type;
128
+ // }
129
+
130
+ /**
131
+ * Adds another colorStop
132
+ * @param {Record<string, string>} colorStop Object with offset and color
133
+ * @return {Gradient} thisArg
134
+ */
135
+ addColorStop(colorStops: Record<string, string>) {
136
+ for (const position in colorStops) {
137
+ const color = new Color(colorStops[position]);
138
+ this.colorStops.push({
139
+ offset: parseFloat(position),
140
+ color: color.toRgb(),
141
+ opacity: color.getAlpha(),
142
+ });
143
+ }
144
+ return this;
145
+ }
146
+
147
+ /**
148
+ * Returns object representation of a gradient
149
+ * @param {string[]} [propertiesToInclude] Any properties that you might want to additionally include in the output
150
+ * @return {object}
151
+ */
152
+ toObject(propertiesToInclude?: (keyof this | string)[]) {
153
+ return {
154
+ ...pick(this, propertiesToInclude),
155
+ type: this.type,
156
+ coords: this.coords,
157
+ colorStops: this.colorStops,
158
+ offsetX: this.offsetX,
159
+ offsetY: this.offsetY,
160
+ gradientUnits: this.gradientUnits,
161
+ gradientTransform: this.gradientTransform
162
+ ? this.gradientTransform.concat()
163
+ : this.gradientTransform,
164
+ };
165
+ }
166
+
167
+ /* _TO_SVG_START_ */
168
+ /**
169
+ * Returns SVG representation of an gradient
170
+ * @param {FabricObject} object Object to create a gradient for
171
+ * @return {String} SVG representation of an gradient (linear/radial)
172
+ */
173
+ toSVG(
174
+ object: FabricObject,
175
+ { additionalTransform: preTransform }: { additionalTransform?: string } = {}
176
+ ) {
177
+ const markup = [],
178
+ transform = (
179
+ this.gradientTransform
180
+ ? this.gradientTransform.concat()
181
+ : iMatrix.concat()
182
+ ) as TMat2D,
183
+ gradientUnits =
184
+ this.gradientUnits === 'pixels'
185
+ ? 'userSpaceOnUse'
186
+ : 'objectBoundingBox';
187
+ // colorStops must be sorted ascending, and guarded against deep mutations
188
+ const colorStops = this.colorStops
189
+ .map((colorStop) => ({ ...colorStop }))
190
+ .sort((a, b) => {
191
+ return a.offset - b.offset;
192
+ });
193
+
194
+ let offsetX = -this.offsetX,
195
+ offsetY = -this.offsetY;
196
+ if (gradientUnits === 'objectBoundingBox') {
197
+ offsetX /= object.width;
198
+ offsetY /= object.height;
199
+ } else {
200
+ offsetX += object.width / 2;
201
+ offsetY += object.height / 2;
202
+ }
203
+ if (object.type === 'path' && this.gradientUnits !== 'percentage') {
204
+ offsetX -= object.pathOffset.x;
205
+ offsetY -= object.pathOffset.y;
206
+ }
207
+ transform[4] -= offsetX;
208
+ transform[5] -= offsetY;
209
+
210
+ const commonAttributes = [
211
+ `id="SVGID_${this.id}"`,
212
+ `gradientUnits="${gradientUnits}"`,
213
+ `gradientTransform="${
214
+ preTransform ? preTransform + ' ' : ''
215
+ }${matrixToSVG(transform)}"`,
216
+ '',
217
+ ].join(' ');
218
+
219
+ if (this.type === 'linear') {
220
+ const { x1, y1, x2, y2 } = this.coords;
221
+ markup.push(
222
+ '<linearGradient ',
223
+ commonAttributes,
224
+ ' x1="',
225
+ x1,
226
+ '" y1="',
227
+ y1,
228
+ '" x2="',
229
+ x2,
230
+ '" y2="',
231
+ y2,
232
+ '">\n'
233
+ );
234
+ } else if (this.type === 'radial') {
235
+ const { x1, y1, x2, y2, r1, r2 } = this
236
+ .coords as GradientCoords<'radial'>;
237
+ const needsSwap = r1 > r2;
238
+ // svg radial gradient has just 1 radius. the biggest.
239
+ markup.push(
240
+ '<radialGradient ',
241
+ commonAttributes,
242
+ ' cx="',
243
+ needsSwap ? x1 : x2,
244
+ '" cy="',
245
+ needsSwap ? y1 : y2,
246
+ '" r="',
247
+ needsSwap ? r1 : r2,
248
+ '" fx="',
249
+ needsSwap ? x2 : x1,
250
+ '" fy="',
251
+ needsSwap ? y2 : y1,
252
+ '">\n'
253
+ );
254
+ if (needsSwap) {
255
+ // svg goes from internal to external radius. if radius are inverted, swap color stops.
256
+ colorStops.reverse(); // mutates array
257
+ colorStops.forEach((colorStop) => {
258
+ colorStop.offset = 1 - colorStop.offset;
259
+ });
260
+ }
261
+ const minRadius = Math.min(r1, r2);
262
+ if (minRadius > 0) {
263
+ // i have to shift all colorStops and add new one in 0.
264
+ const maxRadius = Math.max(r1, r2),
265
+ percentageShift = minRadius / maxRadius;
266
+ colorStops.forEach((colorStop) => {
267
+ colorStop.offset += percentageShift * (1 - colorStop.offset);
268
+ });
269
+ }
270
+ }
271
+
272
+ colorStops.forEach(({ color, offset, opacity }) => {
273
+ markup.push(
274
+ '<stop ',
275
+ 'offset="',
276
+ offset * 100 + '%',
277
+ '" style="stop-color:',
278
+ color,
279
+ typeof opacity !== 'undefined' ? ';stop-opacity: ' + opacity : ';',
280
+ '"/>\n'
281
+ );
282
+ });
283
+
284
+ markup.push(
285
+ this.type === 'linear' ? '</linearGradient>' : '</radialGradient>',
286
+ '\n'
287
+ );
288
+
289
+ return markup.join('');
290
+ }
291
+ /* _TO_SVG_END_ */
292
+
293
+ /**
294
+ * Returns an instance of CanvasGradient
295
+ * @param {CanvasRenderingContext2D} ctx Context to render on
296
+ * @return {CanvasGradient}
297
+ */
298
+ toLive(ctx: CanvasRenderingContext2D): CanvasGradient {
299
+ const coords = this.coords as GradientCoords<'radial'>;
300
+ const gradient =
301
+ this.type === 'linear'
302
+ ? ctx.createLinearGradient(coords.x1, coords.y1, coords.x2, coords.y2)
303
+ : ctx.createRadialGradient(
304
+ coords.x1,
305
+ coords.y1,
306
+ coords.r1,
307
+ coords.x2,
308
+ coords.y2,
309
+ coords.r2
310
+ );
311
+
312
+ this.colorStops.forEach(({ color, opacity, offset }) => {
313
+ gradient.addColorStop(
314
+ offset,
315
+ typeof opacity !== 'undefined'
316
+ ? new Color(color).setAlpha(opacity).toRgba()
317
+ : color
318
+ );
319
+ });
320
+
321
+ return gradient;
322
+ }
323
+
324
+ /* _FROM_SVG_START_ */
325
+ /**
326
+ * Returns {@link Gradient} instance from an SVG element
327
+ * @static
328
+ * @memberOf Gradient
329
+ * @param {SVGGradientElement} el SVG gradient element
330
+ * @param {FabricObject} instance
331
+ * @param {String} opacity A fill-opacity or stroke-opacity attribute to multiply to each stop's opacity.
332
+ * @param {SVGOptions} svgOptions an object containing the size of the SVG in order to parse correctly gradients
333
+ * that uses gradientUnits as 'userSpaceOnUse' and percentages.
334
+ * @return {Gradient} Gradient instance
335
+ * @see http://www.w3.org/TR/SVG/pservers.html#LinearGradientElement
336
+ * @see http://www.w3.org/TR/SVG/pservers.html#RadialGradientElement
337
+ *
338
+ * @example
339
+ *
340
+ * <linearGradient id="linearGrad1">
341
+ * <stop offset="0%" stop-color="white"/>
342
+ * <stop offset="100%" stop-color="black"/>
343
+ * </linearGradient>
344
+ *
345
+ * OR
346
+ *
347
+ * <linearGradient id="linearGrad2">
348
+ * <stop offset="0" style="stop-color:rgb(255,255,255)"/>
349
+ * <stop offset="1" style="stop-color:rgb(0,0,0)"/>
350
+ * </linearGradient>
351
+ *
352
+ * OR
353
+ *
354
+ * <radialGradient id="radialGrad1">
355
+ * <stop offset="0%" stop-color="white" stop-opacity="1" />
356
+ * <stop offset="50%" stop-color="black" stop-opacity="0.5" />
357
+ * <stop offset="100%" stop-color="white" stop-opacity="1" />
358
+ * </radialGradient>
359
+ *
360
+ * OR
361
+ *
362
+ * <radialGradient id="radialGrad2">
363
+ * <stop offset="0" stop-color="rgb(255,255,255)" />
364
+ * <stop offset="0.5" stop-color="rgb(0,0,0)" />
365
+ * <stop offset="1" stop-color="rgb(255,255,255)" />
366
+ * </radialGradient>
367
+ *
368
+ */
369
+ static fromElement(
370
+ el: SVGGradientElement,
371
+ instance: FabricObject,
372
+ svgOptions: SVGOptions
373
+ ): Gradient<GradientType> {
374
+ const gradientUnits = parseGradientUnits(el);
375
+ return new this({
376
+ id: el.getAttribute('id') || undefined,
377
+ type: parseType(el),
378
+ coords: parseCoords(el, {
379
+ width: svgOptions.viewBoxWidth || svgOptions.width,
380
+ height: svgOptions.viewBoxHeight || svgOptions.height,
381
+ }),
382
+ colorStops: parseColorStops(el, svgOptions.opacity),
383
+ gradientUnits,
384
+ gradientTransform: parseTransformAttribute(
385
+ el.getAttribute('gradientTransform') || ''
386
+ ),
387
+ ...(gradientUnits === 'pixels'
388
+ ? {
389
+ offsetX: -instance.left,
390
+ offsetY: -instance.top,
391
+ }
392
+ : {
393
+ offsetX: 0,
394
+ offsetY: 0,
395
+ }),
396
+ });
397
+ }
398
+ /* _FROM_SVG_END_ */
399
+ }
400
+
401
+ classRegistry.setClass(Gradient, 'gradient');
@@ -0,0 +1,12 @@
1
+ export const linearDefaultCoords = {
2
+ x1: 0,
3
+ y1: 0,
4
+ x2: 0,
5
+ y2: 0,
6
+ };
7
+
8
+ export const radialDefaultCoords = {
9
+ ...linearDefaultCoords,
10
+ r1: 0,
11
+ r2: 0,
12
+ };
@@ -0,0 +1,3 @@
1
+ export * from './misc';
2
+ export * from './parseColorStops';
3
+ export * from './parseCoords';
@@ -0,0 +1,13 @@
1
+ import { GradientType, GradientUnits } from '../typedefs';
2
+
3
+ export function parseType(el: SVGGradientElement): GradientType {
4
+ return el.nodeName === 'linearGradient' || el.nodeName === 'LINEARGRADIENT'
5
+ ? 'linear'
6
+ : 'radial';
7
+ }
8
+
9
+ export function parseGradientUnits(el: SVGGradientElement): GradientUnits {
10
+ return el.getAttribute('gradientUnits') === 'userSpaceOnUse'
11
+ ? 'pixels'
12
+ : 'percentage';
13
+ }
@@ -0,0 +1,55 @@
1
+ import { Color } from '../../color/Color';
2
+ import { parsePercent } from '../../parser/percent';
3
+ import { ifNaN } from '../../util/internals';
4
+
5
+ const RE_KEY_VALUE_PAIRS = /\s*;\s*/;
6
+ const RE_KEY_VALUE = /\s*:\s*/;
7
+
8
+ function parseColorStop(el: SVGStopElement, multiplier: number) {
9
+ let colorValue, opacity;
10
+ const style = el.getAttribute('style');
11
+ if (style) {
12
+ const keyValuePairs = style.split(RE_KEY_VALUE_PAIRS);
13
+
14
+ if (keyValuePairs[keyValuePairs.length - 1] === '') {
15
+ keyValuePairs.pop();
16
+ }
17
+
18
+ for (let i = keyValuePairs.length; i--; ) {
19
+ const [key, value] = keyValuePairs[i]
20
+ .split(RE_KEY_VALUE)
21
+ .map((s) => s.trim());
22
+ if (key === 'stop-color') {
23
+ colorValue = value;
24
+ } else if (key === 'stop-opacity') {
25
+ opacity = value;
26
+ }
27
+ }
28
+ }
29
+
30
+ const color = new Color(
31
+ colorValue || el.getAttribute('stop-color') || 'rgb(0,0,0)'
32
+ );
33
+
34
+ return {
35
+ offset: parsePercent(el.getAttribute('offset'), 0),
36
+ color: color.toRgb(),
37
+ opacity:
38
+ ifNaN(parseFloat(opacity || el.getAttribute('stop-opacity') || ''), 1) *
39
+ color.getAlpha() *
40
+ multiplier,
41
+ };
42
+ }
43
+
44
+ export function parseColorStops(
45
+ el: SVGGradientElement,
46
+ opacityAttr: string | null
47
+ ) {
48
+ const colorStops = [],
49
+ colorStopEls = el.getElementsByTagName('stop'),
50
+ multiplier = parsePercent(opacityAttr, 1);
51
+ for (let i = colorStopEls.length; i--; ) {
52
+ colorStops.push(parseColorStop(colorStopEls[i], multiplier));
53
+ }
54
+ return colorStops;
55
+ }
@@ -0,0 +1,73 @@
1
+ import { isPercent } from '../../parser/percent';
2
+ import { TSize } from '../../typedefs';
3
+ import { GradientCoords, GradientType, GradientUnits } from '../typedefs';
4
+ import { parseGradientUnits, parseType } from './misc';
5
+
6
+ function convertPercentUnitsToValues<
7
+ T extends GradientType,
8
+ K extends keyof GradientCoords<T>
9
+ >(
10
+ valuesToConvert: Record<K, string | number>,
11
+ { width, height, gradientUnits }: TSize & { gradientUnits: GradientUnits }
12
+ ) {
13
+ let finalValue;
14
+ return (Object.keys(valuesToConvert) as K[]).reduce((acc, prop) => {
15
+ const propValue = valuesToConvert[prop];
16
+ if (propValue === 'Infinity') {
17
+ finalValue = 1;
18
+ } else if (propValue === '-Infinity') {
19
+ finalValue = 0;
20
+ } else {
21
+ finalValue =
22
+ typeof propValue === 'string' ? parseFloat(propValue) : propValue;
23
+ if (typeof propValue === 'string' && isPercent(propValue)) {
24
+ finalValue *= 0.01;
25
+ if (gradientUnits === 'pixels') {
26
+ // then we need to fix those percentages here in svg parsing
27
+ if (prop === 'x1' || prop === 'x2' || prop === 'r2') {
28
+ finalValue *= width;
29
+ }
30
+ if (prop === 'y1' || prop === 'y2') {
31
+ finalValue *= height;
32
+ }
33
+ }
34
+ }
35
+ }
36
+ acc[prop] = finalValue;
37
+ return acc;
38
+ }, {} as Record<K, number>);
39
+ }
40
+
41
+ function getValue(el: SVGGradientElement, key: string) {
42
+ return el.getAttribute(key);
43
+ }
44
+
45
+ export function parseLinearCoords(el: SVGGradientElement) {
46
+ return {
47
+ x1: getValue(el, 'x1') || 0,
48
+ y1: getValue(el, 'y1') || 0,
49
+ x2: getValue(el, 'x2') || '100%',
50
+ y2: getValue(el, 'y2') || 0,
51
+ };
52
+ }
53
+
54
+ export function parseRadialCoords(el: SVGGradientElement) {
55
+ return {
56
+ x1: getValue(el, 'fx') || getValue(el, 'cx') || '50%',
57
+ y1: getValue(el, 'fy') || getValue(el, 'cy') || '50%',
58
+ r1: 0,
59
+ x2: getValue(el, 'cx') || '50%',
60
+ y2: getValue(el, 'cy') || '50%',
61
+ r2: getValue(el, 'r') || '50%',
62
+ };
63
+ }
64
+
65
+ export function parseCoords(el: SVGGradientElement, size: TSize) {
66
+ return convertPercentUnitsToValues(
67
+ parseType(el) === 'linear' ? parseLinearCoords(el) : parseRadialCoords(el),
68
+ {
69
+ ...size,
70
+ gradientUnits: parseGradientUnits(el),
71
+ }
72
+ );
73
+ }
@@ -0,0 +1,104 @@
1
+ import { Percent, TMat2D } from '../typedefs';
2
+
3
+ export type GradientUnits = 'pixels' | 'percentage';
4
+
5
+ export type GradientType = 'linear' | 'radial';
6
+
7
+ export type GradientCoordValue = number | Percent | string;
8
+
9
+ export type ColorStop = {
10
+ color: string;
11
+ offset: number;
12
+ opacity?: number;
13
+ };
14
+
15
+ export type LinearGradientCoords<T extends GradientCoordValue> = {
16
+ /**
17
+ * X coordiante of the first point
18
+ */
19
+ x1: T;
20
+ /**
21
+ * Y coordiante of the first point
22
+ */
23
+ y1: T;
24
+ /**
25
+ * X coordiante of the second point
26
+ */
27
+ x2: T;
28
+ /**
29
+ * Y coordiante of the second point
30
+ */
31
+ y2: T;
32
+ };
33
+
34
+ export type RadialGradientCoords<T extends GradientCoordValue> = {
35
+ /**
36
+ * X coordiante of the first focal point
37
+ */
38
+ x1: T;
39
+ /**
40
+ * Y coordiante of the first focal point
41
+ */
42
+ y1: T;
43
+ /**
44
+ * X coordiante of the second focal point
45
+ */
46
+ x2: T;
47
+ /**
48
+ * Y coordiante of the second focal point
49
+ */
50
+ y2: T;
51
+ /**
52
+ * radius of the inner circle
53
+ */
54
+ r1: T;
55
+ /**
56
+ * radius of the outer circle
57
+ */
58
+ r2: T;
59
+ };
60
+
61
+ export type GradientCoords<T extends GradientType> = T extends 'linear'
62
+ ? LinearGradientCoords<number>
63
+ : RadialGradientCoords<number>;
64
+
65
+ export type GradientOptions<T extends GradientType> = {
66
+ type?: T;
67
+ gradientUnits?: GradientUnits;
68
+ colorStops?: ColorStop[];
69
+ coords: Partial<GradientCoords<T>>;
70
+ /**
71
+ * @todo rename?
72
+ */
73
+ gradientTransform?: TMat2D;
74
+ id?: string;
75
+ /**
76
+ * SVG import compatibility
77
+ */
78
+ offsetX?: number;
79
+ /**
80
+ * SVG import compatibility
81
+ */
82
+ offsetY?: number;
83
+ };
84
+
85
+ export type SVGOptions = {
86
+ /**
87
+ * width part of the viewBox attribute on svg
88
+ */
89
+ viewBoxWidth: number;
90
+ /**
91
+ * height part of the viewBox attribute on svg
92
+ */
93
+ viewBoxHeight: number;
94
+ /**
95
+ * width part of the svg tag if viewBox is not specified
96
+ */
97
+ width: number;
98
+ /**
99
+ * height part of the svg tag if viewBox is not specified
100
+ */
101
+ height: number;
102
+
103
+ opacity: string | null;
104
+ };