fabric 5.3.0 → 6.0.0-beta3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (604) hide show
  1. package/.babelrc +11 -0
  2. package/.babelrcAlt +19 -0
  3. package/.browserslistrc +5 -0
  4. package/.eslintignore +3 -0
  5. package/.eslintrc.js +43 -0
  6. package/.eslintrc.json +38 -46
  7. package/.eslintrc_tests +12 -0
  8. package/.gitattributes +2 -0
  9. package/.gitpod.yml +17 -1
  10. package/.prettierignore +19 -0
  11. package/.prettierrc +4 -0
  12. package/CHANGELOG.md +532 -189
  13. package/CONTRIBUTING.md +224 -59
  14. package/README.md +200 -235
  15. package/bower.json +1 -3
  16. package/dist/fabric.d.ts +42 -0
  17. package/dist/index.d.ts +2 -0
  18. package/dist/index.js +27582 -0
  19. package/dist/index.js.map +1 -0
  20. package/dist/index.min.js +1 -0
  21. package/dist/index.mjs +27519 -0
  22. package/dist/index.mjs.map +1 -0
  23. package/dist/index.node.cjs +27663 -0
  24. package/dist/index.node.cjs.map +1 -0
  25. package/dist/index.node.d.ts +14 -0
  26. package/dist/index.node.mjs +27606 -0
  27. package/dist/index.node.mjs.map +1 -0
  28. package/dist/src/ClassRegistry.d.ts +13 -0
  29. package/dist/src/Collection.d.ts +136 -0
  30. package/dist/src/CommonMethods.d.ts +32 -0
  31. package/dist/src/EventTypeDefs.d.ts +227 -0
  32. package/dist/src/Intersection.d.ts +112 -0
  33. package/dist/src/Observable.d.ts +60 -0
  34. package/dist/src/Pattern.d.ts +113 -0
  35. package/dist/src/Point.d.ts +232 -0
  36. package/dist/src/Shadow.d.ts +97 -0
  37. package/dist/src/brushes/BaseBrush.d.ts +105 -0
  38. package/dist/src/brushes/CircleBrush.d.ts +49 -0
  39. package/dist/src/brushes/PatternBrush.d.ts +23 -0
  40. package/dist/src/brushes/PencilBrush.d.ts +92 -0
  41. package/dist/src/brushes/SprayBrush.d.ts +79 -0
  42. package/dist/src/cache.d.ts +47 -0
  43. package/dist/src/canvas/Canvas.d.ts +548 -0
  44. package/dist/src/canvas/SelectableCanvas.d.ts +754 -0
  45. package/dist/src/canvas/StaticCanvas.d.ts +778 -0
  46. package/dist/src/canvas/TextEditingManager.d.ts +17 -0
  47. package/dist/src/canvas/canvas_gestures.mixin.d.ts +2 -0
  48. package/dist/src/color/Color.d.ts +174 -0
  49. package/dist/src/color/color_map.d.ts +155 -0
  50. package/dist/src/color/constants.d.ts +22 -0
  51. package/dist/src/color/util.d.ts +12 -0
  52. package/dist/src/config.d.ts +115 -0
  53. package/dist/src/constants.d.ts +14 -0
  54. package/dist/src/controls/Control.d.ts +228 -0
  55. package/dist/src/controls/changeWidth.d.ts +13 -0
  56. package/dist/src/controls/commonControls.d.ts +28 -0
  57. package/dist/src/controls/controlRendering.d.ts +29 -0
  58. package/dist/src/controls/drag.d.ts +12 -0
  59. package/dist/src/controls/index.d.ts +13 -0
  60. package/dist/src/controls/polyControl.d.ts +5 -0
  61. package/dist/src/controls/rotate.d.ts +12 -0
  62. package/dist/src/controls/scale.d.ts +47 -0
  63. package/dist/src/controls/scaleSkew.d.ts +39 -0
  64. package/dist/src/controls/skew.d.ts +33 -0
  65. package/dist/src/controls/util.d.ts +41 -0
  66. package/dist/src/controls/wrapWithFireEvent.d.ts +8 -0
  67. package/dist/src/controls/wrapWithFixedAnchor.d.ts +9 -0
  68. package/dist/src/env/browser.d.ts +3 -0
  69. package/dist/src/env/index.d.ts +15 -0
  70. package/dist/src/env/node.d.ts +5 -0
  71. package/dist/src/env/types.d.ts +15 -0
  72. package/dist/src/filters/BaseFilter.d.ts +153 -0
  73. package/dist/src/filters/BlendColor.d.ts +80 -0
  74. package/dist/src/filters/BlendImage.d.ts +92 -0
  75. package/dist/src/filters/Blur.d.ts +51 -0
  76. package/dist/src/filters/Boilerplate.d.ts +48 -0
  77. package/dist/src/filters/Brightness.d.ts +47 -0
  78. package/dist/src/filters/Canvas2dFilterBackend.d.ts +27 -0
  79. package/dist/src/filters/ColorMatrix.d.ts +63 -0
  80. package/dist/src/filters/ColorMatrixFilters.d.ts +545 -0
  81. package/dist/src/filters/Composed.d.ts +45 -0
  82. package/dist/src/filters/Contrast.d.ts +45 -0
  83. package/dist/src/filters/Convolute.d.ts +82 -0
  84. package/dist/src/filters/FilterBackend.d.ts +14 -0
  85. package/dist/src/filters/GLProbes/GLProbe.d.ts +11 -0
  86. package/dist/src/filters/GLProbes/NodeGLProbe.d.ts +11 -0
  87. package/dist/src/filters/GLProbes/WebGLProbe.d.ts +20 -0
  88. package/dist/src/filters/Gamma.d.ts +54 -0
  89. package/dist/src/filters/Grayscale.d.ts +46 -0
  90. package/dist/src/filters/HueRotation.d.ts +24 -0
  91. package/dist/src/filters/Invert.d.ts +55 -0
  92. package/dist/src/filters/Noise.d.ts +54 -0
  93. package/dist/src/filters/Pixelate.d.ts +44 -0
  94. package/dist/src/filters/RemoveColor.d.ts +63 -0
  95. package/dist/src/filters/Resize.d.ts +136 -0
  96. package/dist/src/filters/Saturation.d.ts +48 -0
  97. package/dist/src/filters/Vibrance.d.ts +48 -0
  98. package/dist/src/filters/WebGLFilterBackend.d.ts +126 -0
  99. package/dist/src/filters/filters.d.ts +21 -0
  100. package/dist/src/filters/index.d.ts +5 -0
  101. package/dist/src/filters/shaders/baseFilter.d.ts +4 -0
  102. package/dist/src/filters/shaders/blendColor.d.ts +13 -0
  103. package/dist/src/filters/shaders/blendImage.d.ts +3 -0
  104. package/dist/src/filters/shaders/blur.d.ts +2 -0
  105. package/dist/src/filters/shaders/brightness.d.ts +2 -0
  106. package/dist/src/filters/shaders/colorMatrix.d.ts +2 -0
  107. package/dist/src/filters/shaders/constrast.d.ts +2 -0
  108. package/dist/src/filters/shaders/convolute.d.ts +11 -0
  109. package/dist/src/filters/shaders/gamma.d.ts +2 -0
  110. package/dist/src/filters/shaders/grayscale.d.ts +3 -0
  111. package/dist/src/filters/shaders/invert.d.ts +2 -0
  112. package/dist/src/filters/shaders/noise.d.ts +2 -0
  113. package/dist/src/filters/shaders/pixelate.d.ts +2 -0
  114. package/dist/src/filters/shaders/removeColor.d.ts +2 -0
  115. package/dist/src/filters/shaders/saturation.d.ts +2 -0
  116. package/dist/src/filters/shaders/vibrance.d.ts +2 -0
  117. package/dist/src/filters/typedefs.d.ts +49 -0
  118. package/dist/src/gradient/Gradient.d.ts +149 -0
  119. package/dist/src/gradient/constants.d.ts +15 -0
  120. package/dist/src/gradient/parser/index.d.ts +4 -0
  121. package/dist/src/gradient/parser/misc.d.ts +4 -0
  122. package/dist/src/gradient/parser/parseColorStops.d.ts +3 -0
  123. package/dist/src/gradient/parser/parseCoords.d.ts +17 -0
  124. package/dist/src/gradient/typedefs.d.ts +93 -0
  125. package/dist/src/mixins/eraser_brush.mixin.d.ts +2 -0
  126. package/dist/src/parkinglot/canvas_animation.mixin.d.ts +2 -0
  127. package/dist/src/parkinglot/straighten.d.ts +2 -0
  128. package/dist/src/parser/applyViewboxTransform.d.ts +5 -0
  129. package/dist/src/parser/attributes.d.ts +6 -0
  130. package/dist/src/parser/constants.d.ts +53 -0
  131. package/dist/src/parser/doesSomeParentMatch.d.ts +2 -0
  132. package/dist/src/parser/elementById.d.ts +6 -0
  133. package/dist/src/parser/elementMatchesRule.d.ts +5 -0
  134. package/dist/src/parser/elements_parser.d.ts +3 -0
  135. package/dist/src/parser/getCSSRules.d.ts +7 -0
  136. package/dist/src/parser/getGlobalStylesForElement.d.ts +5 -0
  137. package/dist/src/parser/getGradientDefs.d.ts +7 -0
  138. package/dist/src/parser/getMultipleNodes.d.ts +2 -0
  139. package/dist/src/parser/getSvgRegex.d.ts +2 -0
  140. package/dist/src/parser/hasAncestorWithNodeName.d.ts +2 -0
  141. package/dist/src/parser/index.d.ts +10 -0
  142. package/dist/src/parser/loadSVGFromString.d.ts +12 -0
  143. package/dist/src/parser/loadSVGFromURL.d.ts +13 -0
  144. package/dist/src/parser/normalizeAttr.d.ts +2 -0
  145. package/dist/src/parser/normalizeValue.d.ts +2 -0
  146. package/dist/src/parser/parseAttributes.d.ts +9 -0
  147. package/dist/src/parser/parseElements.d.ts +11 -0
  148. package/dist/src/parser/parseFontDeclaration.d.ts +10 -0
  149. package/dist/src/parser/parsePointsAttribute.d.ts +12 -0
  150. package/dist/src/parser/parseSVGDocument.d.ts +15 -0
  151. package/dist/src/parser/parseStyleAttribute.d.ts +9 -0
  152. package/dist/src/parser/parseStyleObject.d.ts +2 -0
  153. package/dist/src/parser/parseStyleString.d.ts +2 -0
  154. package/dist/src/parser/parseTransformAttribute.d.ts +10 -0
  155. package/dist/src/parser/parseUseDirectives.d.ts +2 -0
  156. package/dist/src/parser/percent.d.ts +9 -0
  157. package/dist/src/parser/recursivelyParseGradientsXlink.d.ts +2 -0
  158. package/dist/src/parser/rotateMatrix.d.ts +2 -0
  159. package/dist/src/parser/scaleMatrix.d.ts +2 -0
  160. package/dist/src/parser/selectorMatches.d.ts +2 -0
  161. package/dist/src/parser/setStrokeFillOpacity.d.ts +6 -0
  162. package/dist/src/parser/skewMatrix.d.ts +2 -0
  163. package/dist/src/parser/translateMatrix.d.ts +2 -0
  164. package/dist/src/shapes/ActiveSelection.d.ts +82 -0
  165. package/dist/src/shapes/Circle.d.ts +99 -0
  166. package/dist/src/shapes/Ellipse.d.ts +84 -0
  167. package/dist/src/shapes/Group.d.ts +408 -0
  168. package/dist/src/shapes/IText/DraggableTextDelegate.d.ts +78 -0
  169. package/dist/src/shapes/IText/IText.d.ts +335 -0
  170. package/dist/src/shapes/IText/ITextBehavior.d.ts +287 -0
  171. package/dist/src/shapes/IText/ITextClickBehavior.d.ts +83 -0
  172. package/dist/src/shapes/IText/ITextKeyBehavior.d.ts +195 -0
  173. package/dist/src/shapes/IText/constants.d.ts +13 -0
  174. package/dist/src/shapes/Image.d.ts +311 -0
  175. package/dist/src/shapes/Line.d.ts +126 -0
  176. package/dist/src/shapes/Object/AnimatableObject.d.ts +33 -0
  177. package/dist/src/shapes/Object/FabricObject.d.ts +11 -0
  178. package/dist/src/shapes/Object/FabricObjectSVGExportMixin.d.ts +74 -0
  179. package/dist/src/shapes/Object/InteractiveObject.d.ts +296 -0
  180. package/dist/src/shapes/Object/Object.d.ts +594 -0
  181. package/dist/src/shapes/Object/ObjectGeometry.d.ts +327 -0
  182. package/dist/src/shapes/Object/ObjectOrigin.d.ts +109 -0
  183. package/dist/src/shapes/Object/StackedObject.d.ts +72 -0
  184. package/dist/src/shapes/Object/defaultValues.d.ts +76 -0
  185. package/dist/src/shapes/Object/types/BaseProps.d.ts +84 -0
  186. package/dist/src/shapes/Object/types/BorderProps.d.ts +37 -0
  187. package/dist/src/shapes/Object/types/ControlProps.d.ts +62 -0
  188. package/dist/src/shapes/Object/types/FabricObjectProps.d.ts +96 -0
  189. package/dist/src/shapes/Object/types/FillStrokeProps.d.ts +80 -0
  190. package/dist/src/shapes/Object/types/LockInteractionProps.d.ts +51 -0
  191. package/dist/src/shapes/Object/types/ObjectProps.d.ts +42 -0
  192. package/dist/src/shapes/Object/types/SerializedObjectProps.d.ts +66 -0
  193. package/dist/src/shapes/Object/types/index.d.ts +6 -0
  194. package/dist/src/shapes/Path.d.ts +130 -0
  195. package/dist/src/shapes/Polygon.d.ts +9 -0
  196. package/dist/src/shapes/Polyline.d.ts +140 -0
  197. package/dist/src/shapes/Rect.d.ts +76 -0
  198. package/dist/src/shapes/Text/StyledText.d.ts +119 -0
  199. package/dist/src/shapes/Text/Text.d.ts +673 -0
  200. package/dist/src/shapes/Text/TextSVGExportMixin.d.ts +32 -0
  201. package/dist/src/shapes/Text/constants.d.ts +7 -0
  202. package/dist/src/shapes/Textbox.d.ts +185 -0
  203. package/dist/src/shapes/Triangle.d.ts +25 -0
  204. package/dist/src/typedefs.d.ts +90 -0
  205. package/dist/src/util/animation/AnimationBase.d.ts +54 -0
  206. package/dist/src/util/animation/AnimationFrameProvider.d.ts +3 -0
  207. package/dist/src/util/animation/AnimationRegistry.d.ts +29 -0
  208. package/dist/src/util/animation/ArrayAnimation.d.ts +10 -0
  209. package/dist/src/util/animation/ColorAnimation.d.ts +11 -0
  210. package/dist/src/util/animation/ValueAnimation.d.ts +10 -0
  211. package/dist/src/util/animation/animate.d.ts +37 -0
  212. package/dist/src/util/animation/easing.d.ts +130 -0
  213. package/dist/src/util/animation/types.d.ts +87 -0
  214. package/dist/src/util/applyMixins.d.ts +8 -0
  215. package/dist/src/util/dom_event.d.ts +5 -0
  216. package/dist/src/util/dom_misc.d.ts +39 -0
  217. package/dist/src/util/dom_request.d.ts +14 -0
  218. package/dist/src/util/dom_style.d.ts +7 -0
  219. package/dist/src/util/fireEvent.d.ts +3 -0
  220. package/dist/src/util/index.d.ts +35 -0
  221. package/dist/src/util/internals/cloneDeep.d.ts +2 -0
  222. package/dist/src/util/internals/getRandomInt.d.ts +8 -0
  223. package/dist/src/util/internals/ifNaN.d.ts +8 -0
  224. package/dist/src/util/internals/index.d.ts +4 -0
  225. package/dist/src/util/internals/removeFromArray.d.ts +9 -0
  226. package/dist/src/util/internals/uid.d.ts +2 -0
  227. package/dist/src/util/lang_string.d.ts +22 -0
  228. package/dist/src/util/misc/boundingBoxFromPoints.d.ts +9 -0
  229. package/dist/src/util/misc/capValue.d.ts +2 -0
  230. package/dist/src/util/misc/cos.d.ts +10 -0
  231. package/dist/src/util/misc/dom.d.ts +28 -0
  232. package/dist/src/util/misc/findScaleTo.d.ts +29 -0
  233. package/dist/src/util/misc/groupSVGElements.d.ts +9 -0
  234. package/dist/src/util/misc/isTransparent.d.ts +11 -0
  235. package/dist/src/util/misc/matrix.d.ts +92 -0
  236. package/dist/src/util/misc/mergeClipPaths.d.ts +23 -0
  237. package/dist/src/util/misc/objectEnlive.d.ts +56 -0
  238. package/dist/src/util/misc/objectTransforms.d.ts +68 -0
  239. package/dist/src/util/misc/pick.d.ts +9 -0
  240. package/dist/src/util/misc/planeChange.d.ts +84 -0
  241. package/dist/src/util/misc/projectStroke/StrokeLineCapProjections.d.ts +51 -0
  242. package/dist/src/util/misc/projectStroke/StrokeLineJoinProjections.d.ts +81 -0
  243. package/dist/src/util/misc/projectStroke/StrokeProjectionsBase.d.ts +25 -0
  244. package/dist/src/util/misc/projectStroke/index.d.ts +11 -0
  245. package/dist/src/util/misc/projectStroke/types.d.ts +23 -0
  246. package/dist/src/util/misc/radiansDegreesConversion.d.ts +14 -0
  247. package/dist/src/util/misc/resolveOrigin.d.ts +9 -0
  248. package/dist/src/util/misc/rotatePoint.d.ts +12 -0
  249. package/dist/src/util/misc/sin.d.ts +10 -0
  250. package/dist/src/util/misc/svgParsing.d.ts +53 -0
  251. package/dist/src/util/misc/textStyles.d.ts +32 -0
  252. package/dist/src/util/misc/toFixed.d.ts +8 -0
  253. package/dist/src/util/misc/vectors.d.ts +57 -0
  254. package/dist/src/util/path/index.d.ts +96 -0
  255. package/dist/src/util/path/regex.d.ts +3 -0
  256. package/dist/src/util/path/typechecks.d.ts +24 -0
  257. package/dist/src/util/path/typedefs.d.ts +220 -0
  258. package/dist/src/util/transform_matrix_removal.d.ts +14 -0
  259. package/dist/src/util/types.d.ts +19 -0
  260. package/fabric.ts +51 -0
  261. package/index.node.ts +37 -0
  262. package/index.ts +1 -0
  263. package/package.json +100 -40
  264. package/publish.js +0 -26
  265. package/rollup.config.mjs +91 -0
  266. package/rollup.test.config.js +24 -0
  267. package/scripts/build.mjs +50 -0
  268. package/scripts/buildLock.mjs +115 -0
  269. package/scripts/buildReporter.mjs +15 -0
  270. package/scripts/buildStats.mjs +139 -0
  271. package/scripts/dirname.mjs +14 -0
  272. package/scripts/git.mjs +36 -0
  273. package/scripts/index.mjs +564 -0
  274. package/scripts/sandbox.mjs +149 -0
  275. package/src/ClassRegistry.ts +56 -0
  276. package/src/Collection.ts +346 -0
  277. package/src/CommonMethods.ts +63 -0
  278. package/src/EventTypeDefs.ts +296 -0
  279. package/src/Intersection.ts +302 -0
  280. package/src/Observable.ts +181 -0
  281. package/src/Pattern.ts +227 -0
  282. package/src/Point.ts +388 -0
  283. package/src/Shadow.ts +214 -0
  284. package/src/brushes/{base_brush.class.js → BaseBrush.ts} +65 -42
  285. package/src/brushes/CircleBrush.ts +145 -0
  286. package/src/brushes/PatternBrush.ts +70 -0
  287. package/src/brushes/PencilBrush.ts +300 -0
  288. package/src/brushes/SprayBrush.ts +219 -0
  289. package/src/cache.ts +90 -0
  290. package/src/canvas/Canvas.ts +1607 -0
  291. package/src/canvas/SelectableCanvas.ts +1608 -0
  292. package/src/canvas/StaticCanvas.ts +1734 -0
  293. package/src/canvas/TextEditingManager.ts +48 -0
  294. package/src/canvas/canvas_gestures.mixin.ts +207 -0
  295. package/src/color/Color.ts +404 -0
  296. package/src/color/color_map.ts +154 -0
  297. package/src/color/constants.ts +26 -0
  298. package/src/color/util.ts +32 -0
  299. package/src/config.ts +159 -0
  300. package/src/constants.ts +20 -0
  301. package/src/controls/Control.ts +380 -0
  302. package/src/controls/changeWidth.ts +52 -0
  303. package/src/controls/commonControls.ts +105 -0
  304. package/src/controls/controlRendering.ts +138 -0
  305. package/src/controls/drag.ts +31 -0
  306. package/src/controls/index.ts +22 -0
  307. package/src/controls/polyControl.ts +135 -0
  308. package/src/controls/rotate.ts +87 -0
  309. package/src/controls/scale.ts +277 -0
  310. package/src/controls/scaleSkew.ts +92 -0
  311. package/src/controls/skew.ts +242 -0
  312. package/src/controls/util.ts +154 -0
  313. package/src/controls/wrapWithFireEvent.ts +25 -0
  314. package/src/controls/wrapWithFixedAnchor.ts +20 -0
  315. package/src/env/browser.ts +32 -0
  316. package/src/env/index.ts +24 -0
  317. package/src/env/node.ts +56 -0
  318. package/src/env/types.ts +15 -0
  319. package/src/filters/{base_filter.class.js → BaseFilter.ts} +192 -151
  320. package/src/filters/BlendColor.ts +217 -0
  321. package/src/filters/BlendImage.ts +228 -0
  322. package/src/filters/Blur.ts +179 -0
  323. package/src/filters/Boilerplate.ts +94 -0
  324. package/src/filters/Brightness.ts +83 -0
  325. package/src/filters/Canvas2dFilterBackend.ts +65 -0
  326. package/src/filters/ColorMatrix.ts +145 -0
  327. package/src/filters/ColorMatrixFilters.ts +77 -0
  328. package/src/filters/Composed.ts +76 -0
  329. package/src/filters/Contrast.ts +82 -0
  330. package/src/filters/Convolute.ts +184 -0
  331. package/src/filters/FilterBackend.ts +34 -0
  332. package/src/filters/GLProbes/GLProbe.ts +11 -0
  333. package/src/filters/GLProbes/NodeGLProbe.ts +15 -0
  334. package/src/filters/GLProbes/WebGLProbe.ts +46 -0
  335. package/src/filters/Gamma.ts +110 -0
  336. package/src/filters/Grayscale.ts +102 -0
  337. package/src/filters/HueRotation.ts +62 -0
  338. package/src/filters/Invert.ts +99 -0
  339. package/src/filters/Noise.ts +94 -0
  340. package/src/filters/Pixelate.ts +96 -0
  341. package/src/filters/RemoveColor.ts +135 -0
  342. package/src/filters/Resize.ts +538 -0
  343. package/src/filters/Saturation.ts +87 -0
  344. package/src/filters/Vibrance.ts +88 -0
  345. package/src/filters/WebGLFilterBackend.ts +430 -0
  346. package/src/filters/filters.ts +28 -0
  347. package/src/filters/index.ts +5 -0
  348. package/src/filters/shaders/baseFilter.ts +19 -0
  349. package/src/filters/shaders/blendColor.ts +33 -0
  350. package/src/filters/shaders/blendImage.ts +32 -0
  351. package/src/filters/shaders/blur.ts +24 -0
  352. package/src/filters/shaders/brightness.ts +11 -0
  353. package/src/filters/shaders/colorMatrix.ts +12 -0
  354. package/src/filters/shaders/constrast.ts +11 -0
  355. package/src/filters/shaders/convolute.ts +154 -0
  356. package/src/filters/shaders/gamma.ts +15 -0
  357. package/src/filters/shaders/grayscale.ts +36 -0
  358. package/src/filters/shaders/invert.ts +19 -0
  359. package/src/filters/shaders/noise.ts +16 -0
  360. package/src/filters/shaders/pixelate.ts +19 -0
  361. package/src/filters/shaders/removeColor.ts +13 -0
  362. package/src/filters/shaders/saturation.ts +15 -0
  363. package/src/filters/shaders/vibrance.ts +16 -0
  364. package/src/filters/typedefs.ts +65 -0
  365. package/src/gradient/Gradient.ts +406 -0
  366. package/src/gradient/constants.ts +12 -0
  367. package/src/gradient/parser/index.ts +3 -0
  368. package/src/gradient/parser/misc.ts +13 -0
  369. package/src/gradient/parser/parseColorStops.ts +56 -0
  370. package/src/gradient/parser/parseCoords.ts +73 -0
  371. package/src/gradient/typedefs.ts +104 -0
  372. package/src/mixins/{eraser_brush.mixin.js → eraser_brush.mixin.ts} +350 -239
  373. package/src/parkinglot/canvas_animation.mixin.ts +121 -0
  374. package/src/parkinglot/straighten.ts +58 -0
  375. package/src/parser/applyViewboxTransform.ts +157 -0
  376. package/src/parser/attributes.ts +25 -0
  377. package/src/parser/constants.ts +115 -0
  378. package/src/parser/doesSomeParentMatch.ts +19 -0
  379. package/src/parser/elementById.ts +21 -0
  380. package/src/parser/elementMatchesRule.ts +16 -0
  381. package/src/parser/elements_parser.ts +191 -0
  382. package/src/parser/getCSSRules.ts +62 -0
  383. package/src/parser/getGlobalStylesForElement.ts +19 -0
  384. package/src/parser/getGradientDefs.ts +31 -0
  385. package/src/parser/getMultipleNodes.ts +15 -0
  386. package/src/parser/getSvgRegex.ts +5 -0
  387. package/src/parser/hasAncestorWithNodeName.ts +14 -0
  388. package/src/parser/index.ts +9 -0
  389. package/src/parser/loadSVGFromString.ts +26 -0
  390. package/src/parser/loadSVGFromURL.ts +40 -0
  391. package/src/parser/normalizeAttr.ts +10 -0
  392. package/src/parser/normalizeValue.ts +63 -0
  393. package/src/parser/parseAttributes.ts +90 -0
  394. package/src/parser/parseElements.ts +28 -0
  395. package/src/parser/parseFontDeclaration.ts +44 -0
  396. package/src/parser/parsePointsAttribute.ts +34 -0
  397. package/src/parser/parseSVGDocument.ts +93 -0
  398. package/src/parser/parseStyleAttribute.ts +27 -0
  399. package/src/parser/parseStyleObject.ts +15 -0
  400. package/src/parser/parseStyleString.ts +16 -0
  401. package/src/parser/parseTransformAttribute.ts +155 -0
  402. package/src/parser/parseUseDirectives.ts +78 -0
  403. package/src/parser/percent.ts +27 -0
  404. package/src/parser/recursivelyParseGradientsXlink.ts +42 -0
  405. package/src/parser/rotateMatrix.ts +21 -0
  406. package/src/parser/scaleMatrix.ts +9 -0
  407. package/src/parser/selectorMatches.ts +25 -0
  408. package/src/parser/setStrokeFillOpacity.ts +40 -0
  409. package/src/parser/skewMatrix.ts +6 -0
  410. package/src/parser/translateMatrix.ts +8 -0
  411. package/src/shapes/ActiveSelection.ts +189 -0
  412. package/src/shapes/Circle.ts +242 -0
  413. package/src/shapes/Ellipse.ts +179 -0
  414. package/src/shapes/Group.ts +1100 -0
  415. package/src/shapes/IText/DraggableTextDelegate.ts +382 -0
  416. package/src/shapes/IText/IText.ts +693 -0
  417. package/src/shapes/IText/ITextBehavior.ts +1064 -0
  418. package/src/shapes/IText/ITextClickBehavior.ts +325 -0
  419. package/src/shapes/IText/ITextKeyBehavior.ts +685 -0
  420. package/src/shapes/IText/constants.ts +47 -0
  421. package/src/shapes/Image.ts +841 -0
  422. package/src/shapes/Line.ts +346 -0
  423. package/src/shapes/Object/AnimatableObject.ts +106 -0
  424. package/src/shapes/Object/FabricObject.ts +29 -0
  425. package/src/shapes/Object/FabricObjectSVGExportMixin.ts +277 -0
  426. package/src/shapes/Object/InteractiveObject.ts +672 -0
  427. package/src/shapes/Object/Object.ts +1561 -0
  428. package/src/shapes/Object/ObjectGeometry.ts +813 -0
  429. package/src/shapes/Object/ObjectOrigin.ts +276 -0
  430. package/src/shapes/Object/StackedObject.ts +206 -0
  431. package/src/shapes/Object/defaultValues.ts +108 -0
  432. package/src/shapes/Object/types/BaseProps.ts +96 -0
  433. package/src/shapes/Object/types/BorderProps.ts +40 -0
  434. package/src/shapes/Object/types/ControlProps.ts +69 -0
  435. package/src/shapes/Object/types/FabricObjectProps.ts +111 -0
  436. package/src/shapes/Object/types/FillStrokeProps.ts +90 -0
  437. package/src/shapes/Object/types/LockInteractionProps.ts +57 -0
  438. package/src/shapes/Object/types/ObjectProps.ts +46 -0
  439. package/src/shapes/Object/types/SerializedObjectProps.ts +73 -0
  440. package/src/shapes/Object/types/index.ts +8 -0
  441. package/src/shapes/Path.ts +416 -0
  442. package/src/shapes/Polygon.ts +20 -0
  443. package/src/shapes/Polyline.ts +359 -0
  444. package/src/shapes/Rect.ts +233 -0
  445. package/src/shapes/Text/StyledText.ts +329 -0
  446. package/src/shapes/Text/Text.ts +1884 -0
  447. package/src/shapes/Text/TextSVGExportMixin.ts +288 -0
  448. package/src/shapes/Text/constants.ts +91 -0
  449. package/src/shapes/Textbox.ts +477 -0
  450. package/src/shapes/Triangle.ts +60 -0
  451. package/src/typedefs.ts +115 -0
  452. package/src/util/animation/AnimationBase.ts +166 -0
  453. package/src/util/animation/AnimationFrameProvider.ts +9 -0
  454. package/src/util/animation/AnimationRegistry.ts +58 -0
  455. package/src/util/animation/ArrayAnimation.ts +27 -0
  456. package/src/util/animation/ColorAnimation.ts +74 -0
  457. package/src/util/animation/ValueAnimation.ts +29 -0
  458. package/src/util/animation/animate.ts +74 -0
  459. package/src/util/animation/easing.ts +327 -0
  460. package/src/util/animation/types.ts +136 -0
  461. package/src/util/applyMixins.ts +22 -0
  462. package/src/util/dom_event.ts +28 -0
  463. package/src/util/dom_misc.ts +121 -0
  464. package/src/util/dom_request.ts +64 -0
  465. package/src/util/dom_style.ts +20 -0
  466. package/src/util/fireEvent.ts +15 -0
  467. package/src/util/index.ts +102 -0
  468. package/src/util/internals/cloneDeep.ts +2 -0
  469. package/src/util/internals/getRandomInt.ts +8 -0
  470. package/src/util/internals/ifNaN.ts +9 -0
  471. package/src/util/internals/index.ts +3 -0
  472. package/src/util/internals/removeFromArray.ts +14 -0
  473. package/src/util/internals/uid.ts +3 -0
  474. package/src/util/lang_string.ts +79 -0
  475. package/src/util/misc/boundingBoxFromPoints.ts +37 -0
  476. package/src/util/misc/capValue.ts +2 -0
  477. package/src/util/misc/cos.ts +24 -0
  478. package/src/util/misc/dom.ts +50 -0
  479. package/src/util/misc/findScaleTo.ts +44 -0
  480. package/src/util/misc/groupSVGElements.ts +15 -0
  481. package/src/util/misc/isTransparent.ts +28 -0
  482. package/src/util/misc/matrix.ts +207 -0
  483. package/src/util/misc/mergeClipPaths.ts +40 -0
  484. package/src/util/misc/objectEnlive.ts +189 -0
  485. package/src/util/misc/objectTransforms.ts +129 -0
  486. package/src/util/misc/pick.ts +29 -0
  487. package/src/util/misc/planeChange.ts +136 -0
  488. package/src/util/misc/projectStroke/StrokeLineCapProjections.ts +112 -0
  489. package/src/util/misc/projectStroke/StrokeLineJoinProjections.ts +226 -0
  490. package/src/util/misc/projectStroke/StrokeProjectionsBase.ts +75 -0
  491. package/src/util/misc/projectStroke/index.ts +53 -0
  492. package/src/util/misc/projectStroke/types.ts +24 -0
  493. package/src/util/misc/radiansDegreesConversion.ts +18 -0
  494. package/src/util/misc/resolveOrigin.ts +22 -0
  495. package/src/util/misc/rotatePoint.ts +15 -0
  496. package/src/util/misc/sin.ts +26 -0
  497. package/src/util/misc/svgParsing.ts +181 -0
  498. package/src/util/misc/textStyles.ts +134 -0
  499. package/src/util/misc/toFixed.ts +8 -0
  500. package/src/util/misc/vectors.ts +82 -0
  501. package/src/util/path/index.ts +1038 -0
  502. package/src/util/path/regex.ts +41 -0
  503. package/src/util/path/typechecks.ts +145 -0
  504. package/src/util/path/typedefs.ts +305 -0
  505. package/src/util/transform_matrix_removal.ts +60 -0
  506. package/src/util/types.ts +78 -0
  507. package/tsconfig.json +106 -0
  508. package/HEADER.js +0 -203
  509. package/build.js +0 -287
  510. package/dist/fabric.js +0 -31187
  511. package/dist/fabric.min.js +0 -1
  512. package/old-travis-reference.yml +0 -97
  513. package/src/brushes/circle_brush.class.js +0 -144
  514. package/src/brushes/pattern_brush.class.js +0 -61
  515. package/src/brushes/pencil_brush.class.js +0 -310
  516. package/src/brushes/spray_brush.class.js +0 -219
  517. package/src/canvas.class.js +0 -1312
  518. package/src/color.class.js +0 -636
  519. package/src/control.class.js +0 -339
  520. package/src/controls.actions.js +0 -740
  521. package/src/controls.render.js +0 -99
  522. package/src/elements_parser.js +0 -152
  523. package/src/filters/2d_backend.class.js +0 -65
  524. package/src/filters/blendcolor_filter.class.js +0 -251
  525. package/src/filters/blendimage_filter.class.js +0 -247
  526. package/src/filters/blur_filter.class.js +0 -217
  527. package/src/filters/brightness_filter.class.js +0 -113
  528. package/src/filters/colormatrix_filter.class.js +0 -159
  529. package/src/filters/composed_filter.class.js +0 -72
  530. package/src/filters/contrast_filter.class.js +0 -113
  531. package/src/filters/convolute_filter.class.js +0 -352
  532. package/src/filters/filter_boilerplate.js +0 -111
  533. package/src/filters/filter_generator.js +0 -85
  534. package/src/filters/gamma_filter.class.js +0 -136
  535. package/src/filters/grayscale_filter.class.js +0 -154
  536. package/src/filters/hue_rotation.class.js +0 -107
  537. package/src/filters/invert_filter.class.js +0 -111
  538. package/src/filters/noise_filter.class.js +0 -134
  539. package/src/filters/pixelate_filter.class.js +0 -137
  540. package/src/filters/removecolor_filter.class.js +0 -173
  541. package/src/filters/resize_filter.class.js +0 -490
  542. package/src/filters/saturate_filter.class.js +0 -119
  543. package/src/filters/vibrance_filter.class.js +0 -122
  544. package/src/filters/webgl_backend.class.js +0 -396
  545. package/src/globalFabric.js +0 -4
  546. package/src/gradient.class.js +0 -490
  547. package/src/intersection.class.js +0 -172
  548. package/src/log.js +0 -11
  549. package/src/mixins/animation.mixin.js +0 -231
  550. package/src/mixins/canvas_dataurl_exporter.mixin.js +0 -97
  551. package/src/mixins/canvas_events.mixin.js +0 -974
  552. package/src/mixins/canvas_gestures.mixin.js +0 -149
  553. package/src/mixins/canvas_grouping.mixin.js +0 -177
  554. package/src/mixins/canvas_serialization.mixin.js +0 -228
  555. package/src/mixins/collection.mixin.js +0 -170
  556. package/src/mixins/default_controls.js +0 -114
  557. package/src/mixins/itext.svg_export.js +0 -241
  558. package/src/mixins/itext_behavior.mixin.js +0 -940
  559. package/src/mixins/itext_click_behavior.mixin.js +0 -278
  560. package/src/mixins/itext_key_behavior.mixin.js +0 -694
  561. package/src/mixins/object.svg_export.js +0 -258
  562. package/src/mixins/object_geometry.mixin.js +0 -683
  563. package/src/mixins/object_interactivity.mixin.js +0 -314
  564. package/src/mixins/object_origin.mixin.js +0 -255
  565. package/src/mixins/object_stacking.mixin.js +0 -80
  566. package/src/mixins/object_straightening.mixin.js +0 -80
  567. package/src/mixins/observable.mixin.js +0 -141
  568. package/src/mixins/shared_methods.mixin.js +0 -94
  569. package/src/mixins/stateful.mixin.js +0 -107
  570. package/src/mixins/text_style.mixin.js +0 -324
  571. package/src/parser.js +0 -1090
  572. package/src/pattern.class.js +0 -189
  573. package/src/point.class.js +0 -337
  574. package/src/shadow.class.js +0 -195
  575. package/src/shapes/active_selection.class.js +0 -155
  576. package/src/shapes/circle.class.js +0 -210
  577. package/src/shapes/ellipse.class.js +0 -181
  578. package/src/shapes/group.class.js +0 -593
  579. package/src/shapes/image.class.js +0 -764
  580. package/src/shapes/itext.class.js +0 -526
  581. package/src/shapes/line.class.js +0 -324
  582. package/src/shapes/object.class.js +0 -2008
  583. package/src/shapes/path.class.js +0 -384
  584. package/src/shapes/polygon.class.js +0 -81
  585. package/src/shapes/polyline.class.js +0 -268
  586. package/src/shapes/rect.class.js +0 -187
  587. package/src/shapes/text.class.js +0 -1696
  588. package/src/shapes/textbox.class.js +0 -461
  589. package/src/shapes/triangle.class.js +0 -93
  590. package/src/static_canvas.class.js +0 -1881
  591. package/src/util/anim_ease.js +0 -398
  592. package/src/util/animate.js +0 -254
  593. package/src/util/animate_color.js +0 -74
  594. package/src/util/dom_event.js +0 -50
  595. package/src/util/dom_misc.js +0 -300
  596. package/src/util/dom_request.js +0 -54
  597. package/src/util/dom_style.js +0 -70
  598. package/src/util/lang_array.js +0 -94
  599. package/src/util/lang_class.js +0 -115
  600. package/src/util/lang_object.js +0 -75
  601. package/src/util/lang_string.js +0 -110
  602. package/src/util/misc.js +0 -1330
  603. package/src/util/named_accessors.mixin.js +0 -428
  604. package/src/util/path.js +0 -829
@@ -0,0 +1,191 @@
1
+ //@ts-nocheck
2
+ import { Gradient } from '../gradient/Gradient';
3
+ import { Group } from '../shapes/Group';
4
+ import { Image } from '../shapes/Image';
5
+ import { classRegistry } from '../ClassRegistry';
6
+ import {
7
+ invertTransform,
8
+ multiplyTransformMatrices,
9
+ qrDecompose,
10
+ } from '../util/misc/matrix';
11
+ import { storage } from './constants';
12
+ import { removeTransformMatrixForSvgParsing } from '../util/transform_matrix_removal';
13
+
14
+ const ElementsParser = function (
15
+ elements,
16
+ callback,
17
+ options,
18
+ reviver,
19
+ parsingOptions,
20
+ doc
21
+ ) {
22
+ this.elements = elements;
23
+ this.callback = callback;
24
+ this.options = options;
25
+ this.reviver = reviver;
26
+ this.svgUid = (options && options.svgUid) || 0;
27
+ this.parsingOptions = parsingOptions;
28
+ this.regexUrl = /^url\(['"]?#([^'"]+)['"]?\)/g;
29
+ this.doc = doc;
30
+ };
31
+
32
+ (function (proto) {
33
+ proto.parse = function () {
34
+ this.instances = new Array(this.elements.length);
35
+ this.numElements = this.elements.length;
36
+ this.createObjects();
37
+ };
38
+
39
+ proto.createObjects = function () {
40
+ this.elements.forEach((element, i) => {
41
+ element.setAttribute('svgUid', this.svgUid);
42
+ this.createObject(element, i);
43
+ });
44
+ };
45
+
46
+ proto.findTag = function (el) {
47
+ return classRegistry.getSVGClass(
48
+ el.tagName.toLowerCase().replace('svg:', '')
49
+ );
50
+ };
51
+
52
+ proto.createObject = function (el, index) {
53
+ const klass = this.findTag(el);
54
+ if (klass && klass.fromElement) {
55
+ try {
56
+ klass.fromElement(el, this.createCallback(index, el), this.options);
57
+ } catch (err) {
58
+ console.log(err);
59
+ }
60
+ } else {
61
+ this.checkIfDone();
62
+ }
63
+ };
64
+
65
+ proto.createCallback = function (index, el) {
66
+ return (obj) => {
67
+ let _options;
68
+ this.resolveGradient(obj, el, 'fill');
69
+ this.resolveGradient(obj, el, 'stroke');
70
+ if (obj instanceof Image && obj._originalElement) {
71
+ _options = obj.parsePreserveAspectRatioAttribute(el);
72
+ }
73
+ removeTransformMatrixForSvgParsing(obj, _options);
74
+ this.resolveClipPath(obj, el);
75
+ this.reviver && this.reviver(el, obj);
76
+ this.instances[index] = obj;
77
+ this.checkIfDone();
78
+ };
79
+ };
80
+
81
+ proto.extractPropertyDefinition = function (obj, property, storageType) {
82
+ const value = obj[property],
83
+ regex = this.regexUrl;
84
+ if (!regex.test(value)) {
85
+ return;
86
+ }
87
+ regex.lastIndex = 0;
88
+ const id = regex.exec(value)[1];
89
+ regex.lastIndex = 0;
90
+ // @todo fix this
91
+ return storage[storageType][this.svgUid][id];
92
+ };
93
+
94
+ proto.resolveGradient = function (obj, el, property) {
95
+ const gradientDef = this.extractPropertyDefinition(
96
+ obj,
97
+ property,
98
+ 'gradientDefs'
99
+ );
100
+ if (gradientDef) {
101
+ const opacityAttr = el.getAttribute(property + '-opacity');
102
+ const gradient = Gradient.fromElement(gradientDef, obj, {
103
+ ...this.options,
104
+ opacity: opacityAttr,
105
+ });
106
+ obj.set(property, gradient);
107
+ }
108
+ };
109
+
110
+ proto.createClipPathCallback = function (obj, container) {
111
+ return function (_newObj) {
112
+ removeTransformMatrixForSvgParsing(_newObj);
113
+ _newObj.fillRule = _newObj.clipRule;
114
+ container.push(_newObj);
115
+ };
116
+ };
117
+
118
+ proto.resolveClipPath = function (obj, usingElement) {
119
+ let clipPath = this.extractPropertyDefinition(obj, 'clipPath', 'clipPaths'),
120
+ element,
121
+ klass,
122
+ objTransformInv,
123
+ container,
124
+ gTransform,
125
+ options;
126
+ if (clipPath) {
127
+ container = [];
128
+ objTransformInv = invertTransform(obj.calcTransformMatrix());
129
+ // move the clipPath tag as sibling to the real element that is using it
130
+ const clipPathTag = clipPath[0].parentNode;
131
+ let clipPathOwner = usingElement;
132
+ while (
133
+ clipPathOwner.parentNode &&
134
+ clipPathOwner.getAttribute('clip-path') !== obj.clipPath
135
+ ) {
136
+ clipPathOwner = clipPathOwner.parentNode;
137
+ }
138
+ clipPathOwner.parentNode.appendChild(clipPathTag);
139
+ for (let i = 0; i < clipPath.length; i++) {
140
+ element = clipPath[i];
141
+ klass = this.findTag(element);
142
+ klass.fromElement(
143
+ element,
144
+ this.createClipPathCallback(obj, container),
145
+ this.options
146
+ );
147
+ }
148
+ if (container.length === 1) {
149
+ clipPath = container[0];
150
+ } else {
151
+ clipPath = new Group(container);
152
+ }
153
+ gTransform = multiplyTransformMatrices(
154
+ objTransformInv,
155
+ clipPath.calcTransformMatrix()
156
+ );
157
+ if (clipPath.clipPath) {
158
+ this.resolveClipPath(clipPath, clipPathOwner);
159
+ }
160
+ const options = qrDecompose(gTransform);
161
+ clipPath.flipX = false;
162
+ clipPath.flipY = false;
163
+ clipPath.set('scaleX', options.scaleX);
164
+ clipPath.set('scaleY', options.scaleY);
165
+ clipPath.angle = options.angle;
166
+ clipPath.skewX = options.skewX;
167
+ clipPath.skewY = 0;
168
+ clipPath.setPositionByOrigin(
169
+ { x: options.translateX, y: options.translateY },
170
+ 'center',
171
+ 'center'
172
+ );
173
+ obj.clipPath = clipPath;
174
+ } else {
175
+ // if clip-path does not resolve to any element, delete the property.
176
+ delete obj.clipPath;
177
+ }
178
+ };
179
+
180
+ proto.checkIfDone = function () {
181
+ if (--this.numElements === 0) {
182
+ this.instances = this.instances.filter(function (el) {
183
+ // eslint-disable-next-line no-eq-null, eqeqeq
184
+ return el != null;
185
+ });
186
+ this.callback(this.instances, this.elements);
187
+ }
188
+ };
189
+ })(ElementsParser.prototype);
190
+
191
+ export { ElementsParser };
@@ -0,0 +1,62 @@
1
+ //@ts-nocheck
2
+
3
+ /**
4
+ * Returns CSS rules for a given SVG document
5
+ * @param {SVGDocument} doc SVG document to parse
6
+ * @return {Object} CSS rules of this document
7
+ */
8
+ export function getCSSRules(doc) {
9
+ const styles = doc.getElementsByTagName('style');
10
+ let i;
11
+ let len;
12
+ const allRules = {};
13
+ let rules;
14
+
15
+ // very crude parsing of style contents
16
+ for (i = 0, len = styles.length; i < len; i++) {
17
+ let styleContents = styles[i].textContent;
18
+
19
+ // remove comments
20
+ styleContents = styleContents.replace(/\/\*[\s\S]*?\*\//g, '');
21
+ if (styleContents.trim() === '') {
22
+ continue;
23
+ }
24
+ // recovers all the rule in this form `body { style code... }`
25
+ // rules = styleContents.match(/[^{]*\{[\s\S]*?\}/g);
26
+ rules = styleContents.split('}');
27
+ // remove empty rules.
28
+ rules = rules.filter(function (rule) {
29
+ return rule.trim();
30
+ });
31
+ // at this point we have hopefully an array of rules `body { style code... `
32
+ // eslint-disable-next-line no-loop-func
33
+ rules.forEach(function (rule) {
34
+ const match = rule.split('{'),
35
+ ruleObj = {},
36
+ declaration = match[1].trim(),
37
+ propertyValuePairs = declaration.split(';').filter(function (pair) {
38
+ return pair.trim();
39
+ });
40
+
41
+ for (i = 0, len = propertyValuePairs.length; i < len; i++) {
42
+ const pair = propertyValuePairs[i].split(':'),
43
+ property = pair[0].trim(),
44
+ value = pair[1].trim();
45
+ ruleObj[property] = value;
46
+ }
47
+ rule = match[0].trim();
48
+ rule.split(',').forEach(function (_rule) {
49
+ _rule = _rule.replace(/^svg/i, '').trim();
50
+ if (_rule === '') {
51
+ return;
52
+ }
53
+ if (allRules[_rule]) {
54
+ Object.assign(allRules[_rule], ruleObj);
55
+ } else {
56
+ allRules[_rule] = Object.assign({}, ruleObj);
57
+ }
58
+ });
59
+ });
60
+ }
61
+ return allRules;
62
+ }
@@ -0,0 +1,19 @@
1
+ //@ts-nocheck
2
+ import { cssRules } from './constants';
3
+ import { elementMatchesRule } from './elementMatchesRule';
4
+
5
+ /**
6
+ * @private
7
+ */
8
+
9
+ export function getGlobalStylesForElement(element, svgUid) {
10
+ const styles = {};
11
+ for (const rule in cssRules[svgUid]) {
12
+ if (elementMatchesRule(element, rule.split(' '))) {
13
+ for (const property in cssRules[svgUid][rule]) {
14
+ styles[property] = cssRules[svgUid][rule][property];
15
+ }
16
+ }
17
+ }
18
+ return styles;
19
+ }
@@ -0,0 +1,31 @@
1
+ //@ts-nocheck
2
+
3
+ import { getMultipleNodes } from './getMultipleNodes';
4
+ import { recursivelyParseGradientsXlink } from './recursivelyParseGradientsXlink';
5
+
6
+ const tagArray = [
7
+ 'linearGradient',
8
+ 'radialGradient',
9
+ 'svg:linearGradient',
10
+ 'svg:radialGradient',
11
+ ];
12
+
13
+ /**
14
+ * Parses an SVG document, returning all of the gradient declarations found in it
15
+ * @param {SVGDocument} doc SVG document to parse
16
+ * @return {Object} Gradient definitions; key corresponds to element id, value -- to gradient definition element
17
+ */
18
+ export function getGradientDefs(doc) {
19
+ const elList = getMultipleNodes(doc, tagArray);
20
+ let el;
21
+ const gradientDefs = {};
22
+ let j = elList.length;
23
+ while (j--) {
24
+ el = elList[j];
25
+ if (el.getAttribute('xlink:href')) {
26
+ recursivelyParseGradientsXlink(doc, el);
27
+ }
28
+ gradientDefs[el.getAttribute('id')] = el;
29
+ }
30
+ return gradientDefs;
31
+ }
@@ -0,0 +1,15 @@
1
+ //@ts-nocheck
2
+
3
+ export function getMultipleNodes(doc, nodeNames) {
4
+ let nodeName,
5
+ nodeArray = [],
6
+ nodeList,
7
+ i,
8
+ len;
9
+ for (i = 0, len = nodeNames.length; i < len; i++) {
10
+ nodeName = nodeNames[i];
11
+ nodeList = doc.getElementsByTagName(nodeName);
12
+ nodeArray = nodeArray.concat(Array.prototype.slice.call(nodeList));
13
+ }
14
+ return nodeArray;
15
+ }
@@ -0,0 +1,5 @@
1
+ //@ts-nocheck
2
+
3
+ export function getSvgRegex(arr) {
4
+ return new RegExp('^(' + arr.join('|') + ')\\b', 'i');
5
+ }
@@ -0,0 +1,14 @@
1
+ //@ts-nocheck
2
+
3
+ export function hasAncestorWithNodeName(element, nodeName) {
4
+ while (element && (element = element.parentNode)) {
5
+ if (
6
+ element.nodeName &&
7
+ nodeName.test(element.nodeName.replace('svg:', '')) &&
8
+ !element.getAttribute('instantiated_by_use')
9
+ ) {
10
+ return true;
11
+ }
12
+ }
13
+ return false;
14
+ }
@@ -0,0 +1,9 @@
1
+ export { loadSVGFromURL } from './loadSVGFromURL';
2
+ export { loadSVGFromString } from './loadSVGFromString';
3
+ export { parseAttributes } from './parseAttributes';
4
+ export { parseElements } from './parseElements';
5
+ export { parseStyleAttribute } from './parseStyleAttribute';
6
+ export { parsePointsAttribute } from './parsePointsAttribute';
7
+ export { parseTransformAttribute } from './parseTransformAttribute';
8
+ export { getCSSRules } from './getCSSRules';
9
+ export { parseFontDeclaration } from './parseFontDeclaration';
@@ -0,0 +1,26 @@
1
+ //@ts-nocheck
2
+ import { getWindow } from '../env';
3
+ import { parseSVGDocument } from './parseSVGDocument';
4
+
5
+ /**
6
+ * Takes string corresponding to an SVG document, and parses it into a set of fabric objects
7
+ * @memberOf fabric
8
+ * @param {String} string
9
+ * @param {Function} callback
10
+ * @param {Function} [reviver] Method for further parsing of SVG elements, called after each fabric object created.
11
+ * @param {Object} [options] Object containing options for parsing
12
+ * @param {String} [options.crossOrigin] crossOrigin crossOrigin setting to use for external resources
13
+ * @param {AbortSignal} [options.signal] handle aborting, see https://developer.mozilla.org/en-US/docs/Web/API/AbortController/signal
14
+ */
15
+ export function loadSVGFromString(string, callback, reviver, options) {
16
+ const parser = new (getWindow().DOMParser)(),
17
+ doc = parser.parseFromString(string.trim(), 'text/xml');
18
+ parseSVGDocument(
19
+ doc.documentElement,
20
+ function (results, _options, elements, allElements) {
21
+ callback(results, _options, elements, allElements);
22
+ },
23
+ reviver,
24
+ options
25
+ );
26
+ }
@@ -0,0 +1,40 @@
1
+ //@ts-nocheck
2
+
3
+ import { request } from '../util/dom_request';
4
+ import { parseSVGDocument } from './parseSVGDocument';
5
+
6
+ /**
7
+ * Takes url corresponding to an SVG document, and parses it into a set of fabric objects.
8
+ * Note that SVG is fetched via XMLHttpRequest, so it needs to conform to SOP (Same Origin Policy)
9
+ * @memberOf fabric
10
+ * @param {String} url
11
+ * @param {Function} callback
12
+ * @param {Function} [reviver] Method for further parsing of SVG elements, called after each fabric object created.
13
+ * @param {Object} [options] Object containing options for parsing
14
+ * @param {String} [options.crossOrigin] crossOrigin crossOrigin setting to use for external resources
15
+ * @param {AbortSignal} [options.signal] handle aborting, see https://developer.mozilla.org/en-US/docs/Web/API/AbortController/signal
16
+ */
17
+ export function loadSVGFromURL(url, callback, reviver, options) {
18
+ new request(url.replace(/^\n\s*/, '').trim(), {
19
+ method: 'get',
20
+ onComplete: onComplete,
21
+ signal: options && options.signal,
22
+ });
23
+
24
+ function onComplete(r) {
25
+ const xml = r.responseXML;
26
+ if (!xml || !xml.documentElement) {
27
+ callback && callback(null);
28
+ return false;
29
+ }
30
+
31
+ parseSVGDocument(
32
+ xml.documentElement,
33
+ function (results, _options, elements, allElements) {
34
+ callback && callback(results, _options, elements, allElements);
35
+ },
36
+ reviver,
37
+ options
38
+ );
39
+ }
40
+ }
@@ -0,0 +1,10 @@
1
+ //@ts-nocheck
2
+ import { attributesMap } from './constants';
3
+
4
+ export function normalizeAttr(attr) {
5
+ // transform attribute names
6
+ if (attr in attributesMap) {
7
+ return attributesMap[attr];
8
+ }
9
+ return attr;
10
+ }
@@ -0,0 +1,63 @@
1
+ //@ts-nocheck
2
+ import { multiplyTransformMatrices } from '../util/misc/matrix';
3
+ import { parseUnit } from '../util/misc/svgParsing';
4
+ import { parseTransformAttribute } from './parseTransformAttribute';
5
+
6
+ export function normalizeValue(attr, value, parentAttributes, fontSize) {
7
+ const isArray = Array.isArray(value);
8
+ let parsed;
9
+
10
+ if ((attr === 'fill' || attr === 'stroke') && value === 'none') {
11
+ value = '';
12
+ } else if (attr === 'strokeUniform') {
13
+ return value === 'non-scaling-stroke';
14
+ } else if (attr === 'strokeDashArray') {
15
+ if (value === 'none') {
16
+ value = null;
17
+ } else {
18
+ value = value.replace(/,/g, ' ').split(/\s+/).map(parseFloat);
19
+ }
20
+ } else if (attr === 'transformMatrix') {
21
+ if (parentAttributes && parentAttributes.transformMatrix) {
22
+ value = multiplyTransformMatrices(
23
+ parentAttributes.transformMatrix,
24
+ parseTransformAttribute(value)
25
+ );
26
+ } else {
27
+ value = parseTransformAttribute(value);
28
+ }
29
+ } else if (attr === 'visible') {
30
+ value = value !== 'none' && value !== 'hidden';
31
+ // display=none on parent element always takes precedence over child element
32
+ if (parentAttributes && parentAttributes.visible === false) {
33
+ value = false;
34
+ }
35
+ } else if (attr === 'opacity') {
36
+ value = parseFloat(value);
37
+ if (parentAttributes && typeof parentAttributes.opacity !== 'undefined') {
38
+ value *= parentAttributes.opacity;
39
+ }
40
+ } else if (attr === 'textAnchor' /* text-anchor */) {
41
+ value = value === 'start' ? 'left' : value === 'end' ? 'right' : 'center';
42
+ } else if (attr === 'charSpacing') {
43
+ // parseUnit returns px and we convert it to em
44
+ parsed = (parseUnit(value, fontSize) / fontSize) * 1000;
45
+ } else if (attr === 'paintFirst') {
46
+ const fillIndex = value.indexOf('fill');
47
+ const strokeIndex = value.indexOf('stroke');
48
+ value = 'fill';
49
+ if (fillIndex > -1 && strokeIndex > -1 && strokeIndex < fillIndex) {
50
+ value = 'stroke';
51
+ } else if (fillIndex === -1 && strokeIndex > -1) {
52
+ value = 'stroke';
53
+ }
54
+ } else if (attr === 'href' || attr === 'xlink:href' || attr === 'font') {
55
+ return value;
56
+ } else if (attr === 'imageSmoothing') {
57
+ return value === 'optimizeQuality';
58
+ } else {
59
+ parsed = isArray ? value.map(parseUnit) : parseUnit(value, fontSize);
60
+ }
61
+
62
+ return !isArray && isNaN(parsed) ? value : parsed;
63
+ }
@@ -0,0 +1,90 @@
1
+ //@ts-nocheck
2
+ import { DEFAULT_SVG_FONT_SIZE } from '../constants';
3
+ import { parseUnit } from '../util/misc/svgParsing';
4
+ import { cPath, fSize, svgValidParentsRegEx } from './constants';
5
+ import { getGlobalStylesForElement } from './getGlobalStylesForElement';
6
+ import { normalizeAttr } from './normalizeAttr';
7
+ import { normalizeValue } from './normalizeValue';
8
+ import { parseFontDeclaration } from './parseFontDeclaration';
9
+ import { parseStyleAttribute } from './parseStyleAttribute';
10
+ import { setStrokeFillOpacity } from './setStrokeFillOpacity';
11
+
12
+ /**
13
+ * Returns an object of attributes' name/value, given element and an array of attribute names;
14
+ * Parses parent "g" nodes recursively upwards.
15
+ * @param {SVGElement | HTMLElement} element Element to parse
16
+ * @param {Array} attributes Array of attributes to parse
17
+ * @return {Object} object containing parsed attributes' names/values
18
+ */
19
+ export function parseAttributes(
20
+ element: SVGElement | HTMLElement,
21
+ attributes: string[],
22
+ svgUid?: string
23
+ ): Record<string, any> {
24
+ if (!element) {
25
+ return {};
26
+ }
27
+
28
+ let value,
29
+ parentAttributes = {},
30
+ fontSize,
31
+ parentFontSize;
32
+
33
+ if (typeof svgUid === 'undefined') {
34
+ svgUid = element.getAttribute('svgUid');
35
+ }
36
+ // if there's a parent container (`g` or `a` or `symbol` node), parse its attributes recursively upwards
37
+ if (
38
+ element.parentNode &&
39
+ svgValidParentsRegEx.test(element.parentNode.nodeName)
40
+ ) {
41
+ parentAttributes = parseAttributes(element.parentNode, attributes, svgUid);
42
+ }
43
+
44
+ let ownAttributes = attributes.reduce(function (memo, attr) {
45
+ value = element.getAttribute(attr);
46
+ if (value) {
47
+ // eslint-disable-line
48
+ memo[attr] = value;
49
+ }
50
+ return memo;
51
+ }, {});
52
+ // add values parsed from style, which take precedence over attributes
53
+ // (see: http://www.w3.org/TR/SVG/styling.html#UsingPresentationAttributes)
54
+ const cssAttrs = Object.assign(
55
+ getGlobalStylesForElement(element, svgUid),
56
+ parseStyleAttribute(element)
57
+ );
58
+ ownAttributes = Object.assign(ownAttributes, cssAttrs);
59
+ if (cssAttrs[cPath]) {
60
+ element.setAttribute(cPath, cssAttrs[cPath]);
61
+ }
62
+ fontSize = parentFontSize =
63
+ parentAttributes.fontSize || DEFAULT_SVG_FONT_SIZE;
64
+ if (ownAttributes[fSize]) {
65
+ // looks like the minimum should be 9px when dealing with ems. this is what looks like in browsers.
66
+ ownAttributes[fSize] = fontSize = parseUnit(
67
+ ownAttributes[fSize],
68
+ parentFontSize
69
+ );
70
+ }
71
+
72
+ const normalizedStyle = {};
73
+ for (const attr in ownAttributes) {
74
+ const normalizedAttr = normalizeAttr(attr);
75
+ const normalizedValue = normalizeValue(
76
+ normalizedAttr,
77
+ ownAttributes[attr],
78
+ parentAttributes,
79
+ fontSize
80
+ );
81
+ normalizedStyle[normalizedAttr] = normalizedValue;
82
+ }
83
+ if (normalizedStyle && normalizedStyle.font) {
84
+ parseFontDeclaration(normalizedStyle.font, normalizedStyle);
85
+ }
86
+ const mergedAttrs = { ...parentAttributes, ...normalizedStyle };
87
+ return svgValidParentsRegEx.test(element.nodeName)
88
+ ? mergedAttrs
89
+ : setStrokeFillOpacity(mergedAttrs);
90
+ }
@@ -0,0 +1,28 @@
1
+ //@ts-nocheck
2
+
3
+ import { ElementsParser } from './elements_parser';
4
+
5
+ /**
6
+ * Transforms an array of svg elements to corresponding fabric.* instances
7
+ * @static
8
+ * @memberOf fabric
9
+ * @param {Array} elements Array of elements to parse
10
+ * @param {Function} callback Being passed an array of fabric instances (transformed from SVG elements)
11
+ * @param {Object} [options] Options object
12
+ * @param {Function} [reviver] Method for further parsing of SVG elements, called after each fabric object created.
13
+ */
14
+ export function parseElements(
15
+ elements,
16
+ callback,
17
+ options,
18
+ reviver,
19
+ parsingOptions
20
+ ) {
21
+ new ElementsParser(
22
+ elements,
23
+ callback,
24
+ options,
25
+ reviver,
26
+ parsingOptions
27
+ ).parse();
28
+ }
@@ -0,0 +1,44 @@
1
+ //@ts-nocheck
2
+ import { parseUnit } from '../util/misc/svgParsing';
3
+ import { reFontDeclaration } from './constants';
4
+
5
+ /**
6
+ * Parses a short font declaration, building adding its properties to a style object
7
+ * @static
8
+ * @function
9
+ * @memberOf fabric
10
+ * @param {String} value font declaration
11
+ * @param {Object} oStyle definition
12
+ */
13
+ export function parseFontDeclaration(value, oStyle) {
14
+ const match = value.match(reFontDeclaration);
15
+
16
+ if (!match) {
17
+ return;
18
+ }
19
+ const fontStyle = match[1],
20
+ // font variant is not used
21
+ // fontVariant = match[2],
22
+ fontWeight = match[3],
23
+ fontSize = match[4],
24
+ lineHeight = match[5],
25
+ fontFamily = match[6];
26
+
27
+ if (fontStyle) {
28
+ oStyle.fontStyle = fontStyle;
29
+ }
30
+ if (fontWeight) {
31
+ oStyle.fontWeight = isNaN(parseFloat(fontWeight))
32
+ ? fontWeight
33
+ : parseFloat(fontWeight);
34
+ }
35
+ if (fontSize) {
36
+ oStyle.fontSize = parseUnit(fontSize);
37
+ }
38
+ if (fontFamily) {
39
+ oStyle.fontFamily = fontFamily;
40
+ }
41
+ if (lineHeight) {
42
+ oStyle.lineHeight = lineHeight === 'normal' ? 1 : lineHeight;
43
+ }
44
+ }