fabric 5.3.0 → 6.0.0-beta10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (634) hide show
  1. package/.babelrc +11 -0
  2. package/.babelrcAlt +19 -0
  3. package/.browserslistrc +5 -0
  4. package/.eslintignore +3 -0
  5. package/.eslintrc.js +51 -0
  6. package/.eslintrc.json +38 -46
  7. package/.eslintrc_tests +12 -0
  8. package/.gitattributes +2 -0
  9. package/.gitpod.yml +17 -1
  10. package/.prettierignore +19 -0
  11. package/.prettierrc +4 -0
  12. package/CHANGELOG.md +615 -189
  13. package/CONTRIBUTING.md +233 -59
  14. package/README.md +200 -235
  15. package/babel-jest.config.js +6 -0
  16. package/bower.json +1 -3
  17. package/dist/fabric.d.ts +54 -0
  18. package/dist/index.d.ts +2 -0
  19. package/dist/index.js +28452 -0
  20. package/dist/index.js.map +1 -0
  21. package/dist/index.min.js +1 -0
  22. package/dist/index.mjs +28385 -0
  23. package/dist/index.mjs.map +1 -0
  24. package/dist/index.node.cjs +28538 -0
  25. package/dist/index.node.cjs.map +1 -0
  26. package/dist/index.node.d.ts +20 -0
  27. package/dist/index.node.mjs +28477 -0
  28. package/dist/index.node.mjs.map +1 -0
  29. package/dist/src/ClassRegistry.d.ts +13 -0
  30. package/dist/src/Collection.d.ts +136 -0
  31. package/dist/src/CommonMethods.d.ts +32 -0
  32. package/dist/src/EventTypeDefs.d.ts +227 -0
  33. package/dist/src/Intersection.d.ts +112 -0
  34. package/dist/src/Observable.d.ts +60 -0
  35. package/dist/src/Pattern/Pattern.d.ts +99 -0
  36. package/dist/src/Pattern/index.d.ts +3 -0
  37. package/dist/src/Pattern/types.d.ts +9 -0
  38. package/dist/src/Point.d.ts +232 -0
  39. package/dist/src/Shadow.d.ts +96 -0
  40. package/dist/src/brushes/BaseBrush.d.ts +101 -0
  41. package/dist/src/brushes/CircleBrush.d.ts +44 -0
  42. package/dist/src/brushes/CircleBrush.test.d.ts +2 -0
  43. package/dist/src/brushes/PatternBrush.d.ts +23 -0
  44. package/dist/src/brushes/PencilBrush.d.ts +92 -0
  45. package/dist/src/brushes/SprayBrush.d.ts +74 -0
  46. package/dist/src/brushes/typedefs.d.ts +18 -0
  47. package/dist/src/cache.d.ts +47 -0
  48. package/dist/src/canvas/Canvas.d.ts +364 -0
  49. package/dist/src/canvas/DOMManagers/CanvasDOMManager.d.ts +29 -0
  50. package/dist/src/canvas/DOMManagers/StaticCanvasDOMManager.d.ts +29 -0
  51. package/dist/src/canvas/DOMManagers/util.d.ts +24 -0
  52. package/dist/src/canvas/DOMManagers/util.spec.d.ts +2 -0
  53. package/dist/src/canvas/SelectableCanvas.d.ts +723 -0
  54. package/dist/src/canvas/StaticCanvas.d.ts +747 -0
  55. package/dist/src/canvas/TextEditingManager.d.ts +21 -0
  56. package/dist/src/canvas/canvas_gestures.mixin.d.ts +2 -0
  57. package/dist/src/color/Color.d.ts +152 -0
  58. package/dist/src/color/color_map.d.ts +155 -0
  59. package/dist/src/color/constants.d.ts +104 -0
  60. package/dist/src/color/typedefs.d.ts +16 -0
  61. package/dist/src/color/util.d.ts +27 -0
  62. package/dist/src/config.d.ts +115 -0
  63. package/dist/src/constants.d.ts +21 -0
  64. package/dist/src/controls/Control.d.ts +229 -0
  65. package/dist/src/controls/changeWidth.d.ts +13 -0
  66. package/dist/src/controls/commonControls.d.ts +28 -0
  67. package/dist/src/controls/controlRendering.d.ts +29 -0
  68. package/dist/src/controls/drag.d.ts +12 -0
  69. package/dist/src/controls/fireEvent.d.ts +3 -0
  70. package/dist/src/controls/index.d.ts +13 -0
  71. package/dist/src/controls/polyControl.d.ts +5 -0
  72. package/dist/src/controls/rotate.d.ts +12 -0
  73. package/dist/src/controls/scale.d.ts +47 -0
  74. package/dist/src/controls/scaleSkew.d.ts +39 -0
  75. package/dist/src/controls/skew.d.ts +33 -0
  76. package/dist/src/controls/util.d.ts +41 -0
  77. package/dist/src/controls/wrapWithFireEvent.d.ts +8 -0
  78. package/dist/src/controls/wrapWithFixedAnchor.d.ts +9 -0
  79. package/dist/src/env/browser.d.ts +3 -0
  80. package/dist/src/env/index.d.ts +28 -0
  81. package/dist/src/env/node.d.ts +6 -0
  82. package/dist/src/env/types.d.ts +15 -0
  83. package/dist/src/filters/BaseFilter.d.ts +160 -0
  84. package/dist/src/filters/BlendColor.d.ts +81 -0
  85. package/dist/src/filters/BlendImage.d.ts +93 -0
  86. package/dist/src/filters/Blur.d.ts +52 -0
  87. package/dist/src/filters/Boilerplate.d.ts +48 -0
  88. package/dist/src/filters/Brightness.d.ts +48 -0
  89. package/dist/src/filters/Canvas2dFilterBackend.d.ts +27 -0
  90. package/dist/src/filters/ColorMatrix.d.ts +64 -0
  91. package/dist/src/filters/ColorMatrixFilters.d.ts +537 -0
  92. package/dist/src/filters/Composed.d.ts +46 -0
  93. package/dist/src/filters/Contrast.d.ts +46 -0
  94. package/dist/src/filters/Convolute.d.ts +83 -0
  95. package/dist/src/filters/FilterBackend.d.ts +15 -0
  96. package/dist/src/filters/GLProbes/GLProbe.d.ts +7 -0
  97. package/dist/src/filters/GLProbes/NodeGLProbe.d.ts +11 -0
  98. package/dist/src/filters/GLProbes/WebGLProbe.d.ts +20 -0
  99. package/dist/src/filters/Gamma.d.ts +55 -0
  100. package/dist/src/filters/Grayscale.d.ts +47 -0
  101. package/dist/src/filters/HueRotation.d.ts +25 -0
  102. package/dist/src/filters/Invert.d.ts +56 -0
  103. package/dist/src/filters/Noise.d.ts +55 -0
  104. package/dist/src/filters/Pixelate.d.ts +45 -0
  105. package/dist/src/filters/RemoveColor.d.ts +64 -0
  106. package/dist/src/filters/Resize.d.ts +137 -0
  107. package/dist/src/filters/Saturation.d.ts +49 -0
  108. package/dist/src/filters/Vibrance.d.ts +49 -0
  109. package/dist/src/filters/WebGLFilterBackend.d.ts +128 -0
  110. package/dist/src/filters/filters.d.ts +21 -0
  111. package/dist/src/filters/index.d.ts +7 -0
  112. package/dist/src/filters/shaders/baseFilter.d.ts +4 -0
  113. package/dist/src/filters/shaders/blendColor.d.ts +13 -0
  114. package/dist/src/filters/shaders/blendImage.d.ts +3 -0
  115. package/dist/src/filters/shaders/blur.d.ts +2 -0
  116. package/dist/src/filters/shaders/brightness.d.ts +2 -0
  117. package/dist/src/filters/shaders/colorMatrix.d.ts +2 -0
  118. package/dist/src/filters/shaders/constrast.d.ts +2 -0
  119. package/dist/src/filters/shaders/convolute.d.ts +11 -0
  120. package/dist/src/filters/shaders/gamma.d.ts +2 -0
  121. package/dist/src/filters/shaders/grayscale.d.ts +3 -0
  122. package/dist/src/filters/shaders/invert.d.ts +2 -0
  123. package/dist/src/filters/shaders/noise.d.ts +2 -0
  124. package/dist/src/filters/shaders/pixelate.d.ts +2 -0
  125. package/dist/src/filters/shaders/removeColor.d.ts +2 -0
  126. package/dist/src/filters/shaders/saturation.d.ts +2 -0
  127. package/dist/src/filters/shaders/vibrance.d.ts +2 -0
  128. package/dist/src/filters/typedefs.d.ts +48 -0
  129. package/dist/src/filters/utils.d.ts +3 -0
  130. package/dist/src/gradient/Gradient.d.ts +150 -0
  131. package/dist/src/gradient/constants.d.ts +15 -0
  132. package/dist/src/gradient/index.d.ts +3 -0
  133. package/dist/src/gradient/parser/index.d.ts +4 -0
  134. package/dist/src/gradient/parser/misc.d.ts +4 -0
  135. package/dist/src/gradient/parser/parseColorStops.d.ts +3 -0
  136. package/dist/src/gradient/parser/parseCoords.d.ts +17 -0
  137. package/dist/src/gradient/typedefs.d.ts +93 -0
  138. package/dist/src/mixins/eraser_brush.mixin.d.ts +2 -0
  139. package/dist/src/parkinglot/canvas_animation.mixin.d.ts +2 -0
  140. package/dist/src/parkinglot/straighten.d.ts +2 -0
  141. package/dist/src/parser/applyViewboxTransform.d.ts +5 -0
  142. package/dist/src/parser/attributes.d.ts +6 -0
  143. package/dist/src/parser/constants.d.ts +53 -0
  144. package/dist/src/parser/doesSomeParentMatch.d.ts +2 -0
  145. package/dist/src/parser/elementById.d.ts +6 -0
  146. package/dist/src/parser/elementMatchesRule.d.ts +5 -0
  147. package/dist/src/parser/elements_parser.d.ts +3 -0
  148. package/dist/src/parser/getCSSRules.d.ts +7 -0
  149. package/dist/src/parser/getGlobalStylesForElement.d.ts +5 -0
  150. package/dist/src/parser/getGradientDefs.d.ts +7 -0
  151. package/dist/src/parser/getMultipleNodes.d.ts +2 -0
  152. package/dist/src/parser/getSvgRegex.d.ts +2 -0
  153. package/dist/src/parser/hasAncestorWithNodeName.d.ts +2 -0
  154. package/dist/src/parser/index.d.ts +9 -0
  155. package/dist/src/parser/loadSVGFromString.d.ts +18 -0
  156. package/dist/src/parser/loadSVGFromURL.d.ts +19 -0
  157. package/dist/src/parser/normalizeAttr.d.ts +2 -0
  158. package/dist/src/parser/normalizeValue.d.ts +2 -0
  159. package/dist/src/parser/parseAttributes.d.ts +9 -0
  160. package/dist/src/parser/parseFontDeclaration.d.ts +10 -0
  161. package/dist/src/parser/parsePointsAttribute.d.ts +12 -0
  162. package/dist/src/parser/parseSVGDocument.d.ts +23 -0
  163. package/dist/src/parser/parseStyleAttribute.d.ts +9 -0
  164. package/dist/src/parser/parseStyleObject.d.ts +2 -0
  165. package/dist/src/parser/parseStyleString.d.ts +2 -0
  166. package/dist/src/parser/parseTransformAttribute.d.ts +11 -0
  167. package/dist/src/parser/parseUseDirectives.d.ts +2 -0
  168. package/dist/src/parser/percent.d.ts +9 -0
  169. package/dist/src/parser/recursivelyParseGradientsXlink.d.ts +2 -0
  170. package/dist/src/parser/selectorMatches.d.ts +2 -0
  171. package/dist/src/parser/setStrokeFillOpacity.d.ts +6 -0
  172. package/dist/src/parser/typedefs.d.ts +9 -0
  173. package/dist/src/shapes/ActiveSelection.d.ts +83 -0
  174. package/dist/src/shapes/Circle.d.ts +99 -0
  175. package/dist/src/shapes/Ellipse.d.ts +84 -0
  176. package/dist/src/shapes/Group.d.ts +407 -0
  177. package/dist/src/shapes/IText/DraggableTextDelegate.d.ts +78 -0
  178. package/dist/src/shapes/IText/IText.d.ts +336 -0
  179. package/dist/src/shapes/IText/ITextBehavior.d.ts +287 -0
  180. package/dist/src/shapes/IText/ITextClickBehavior.d.ts +73 -0
  181. package/dist/src/shapes/IText/ITextKeyBehavior.d.ts +195 -0
  182. package/dist/src/shapes/IText/constants.d.ts +13 -0
  183. package/dist/src/shapes/Image.d.ts +309 -0
  184. package/dist/src/shapes/Line.d.ts +121 -0
  185. package/dist/src/shapes/Object/AnimatableObject.d.ts +33 -0
  186. package/dist/src/shapes/Object/FabricObject.d.ts +11 -0
  187. package/dist/src/shapes/Object/FabricObjectSVGExportMixin.d.ts +74 -0
  188. package/dist/src/shapes/Object/InteractiveObject.d.ts +296 -0
  189. package/dist/src/shapes/Object/Object.d.ts +599 -0
  190. package/dist/src/shapes/Object/ObjectGeometry.d.ts +327 -0
  191. package/dist/src/shapes/Object/ObjectOrigin.d.ts +109 -0
  192. package/dist/src/shapes/Object/StackedObject.d.ts +72 -0
  193. package/dist/src/shapes/Object/defaultValues.d.ts +76 -0
  194. package/dist/src/shapes/Object/types/BaseProps.d.ts +84 -0
  195. package/dist/src/shapes/Object/types/BorderProps.d.ts +37 -0
  196. package/dist/src/shapes/Object/types/ControlProps.d.ts +62 -0
  197. package/dist/src/shapes/Object/types/FabricObjectProps.d.ts +96 -0
  198. package/dist/src/shapes/Object/types/FillStrokeProps.d.ts +80 -0
  199. package/dist/src/shapes/Object/types/LockInteractionProps.d.ts +51 -0
  200. package/dist/src/shapes/Object/types/ObjectProps.d.ts +42 -0
  201. package/dist/src/shapes/Object/types/SerializedObjectProps.d.ts +66 -0
  202. package/dist/src/shapes/Object/types/index.d.ts +6 -0
  203. package/dist/src/shapes/Path.d.ts +214 -0
  204. package/dist/src/shapes/Polygon.d.ts +10 -0
  205. package/dist/src/shapes/Polyline.d.ts +147 -0
  206. package/dist/src/shapes/Rect.d.ts +82 -0
  207. package/dist/src/shapes/Text/StyledText.d.ts +123 -0
  208. package/dist/src/shapes/Text/Text.d.ts +688 -0
  209. package/dist/src/shapes/Text/TextSVGExportMixin.d.ts +32 -0
  210. package/dist/src/shapes/Text/constants.d.ts +13 -0
  211. package/dist/src/shapes/Textbox.d.ts +204 -0
  212. package/dist/src/shapes/Triangle.d.ts +26 -0
  213. package/dist/src/typedefs.d.ts +96 -0
  214. package/dist/src/util/animation/AnimationBase.d.ts +54 -0
  215. package/dist/src/util/animation/AnimationFrameProvider.d.ts +3 -0
  216. package/dist/src/util/animation/AnimationRegistry.d.ts +29 -0
  217. package/dist/src/util/animation/ArrayAnimation.d.ts +10 -0
  218. package/dist/src/util/animation/ColorAnimation.d.ts +11 -0
  219. package/dist/src/util/animation/ValueAnimation.d.ts +10 -0
  220. package/dist/src/util/animation/animate.d.ts +37 -0
  221. package/dist/src/util/animation/easing.d.ts +130 -0
  222. package/dist/src/util/animation/index.d.ts +3 -0
  223. package/dist/src/util/animation/types.d.ts +87 -0
  224. package/dist/src/util/applyMixins.d.ts +8 -0
  225. package/dist/src/util/dom_event.d.ts +5 -0
  226. package/dist/src/util/dom_misc.d.ts +12 -0
  227. package/dist/src/util/dom_request.d.ts +14 -0
  228. package/dist/src/util/dom_style.d.ts +7 -0
  229. package/dist/src/util/index.d.ts +36 -0
  230. package/dist/src/util/internals/cleanupSvgAttribute.d.ts +2 -0
  231. package/dist/src/util/internals/cleanupSvgAttribute.test.d.ts +2 -0
  232. package/dist/src/util/internals/cloneDeep.d.ts +2 -0
  233. package/dist/src/util/internals/cloneDeep.test.d.ts +2 -0
  234. package/dist/src/util/internals/getRandomInt.d.ts +8 -0
  235. package/dist/src/util/internals/getRandomInt.test.d.ts +2 -0
  236. package/dist/src/util/internals/ifNaN.d.ts +8 -0
  237. package/dist/src/util/internals/index.d.ts +4 -0
  238. package/dist/src/util/internals/removeFromArray.d.ts +9 -0
  239. package/dist/src/util/internals/uid.d.ts +2 -0
  240. package/dist/src/util/lang_string.d.ts +22 -0
  241. package/dist/src/util/misc/boundingBoxFromPoints.d.ts +9 -0
  242. package/dist/src/util/misc/capValue.d.ts +2 -0
  243. package/dist/src/util/misc/cos.d.ts +10 -0
  244. package/dist/src/util/misc/dom.d.ts +28 -0
  245. package/dist/src/util/misc/findScaleTo.d.ts +20 -0
  246. package/dist/src/util/misc/groupSVGElements.d.ts +9 -0
  247. package/dist/src/util/misc/isTransparent.d.ts +11 -0
  248. package/dist/src/util/misc/matrix.d.ts +168 -0
  249. package/dist/src/util/misc/mergeClipPaths.d.ts +23 -0
  250. package/dist/src/util/misc/objectEnlive.d.ts +41 -0
  251. package/dist/src/util/misc/objectTransforms.d.ts +68 -0
  252. package/dist/src/util/misc/pick.d.ts +9 -0
  253. package/dist/src/util/misc/planeChange.d.ts +81 -0
  254. package/dist/src/util/misc/projectStroke/StrokeLineCapProjections.d.ts +52 -0
  255. package/dist/src/util/misc/projectStroke/StrokeLineJoinProjections.d.ts +82 -0
  256. package/dist/src/util/misc/projectStroke/StrokeProjectionsBase.d.ts +26 -0
  257. package/dist/src/util/misc/projectStroke/index.d.ts +12 -0
  258. package/dist/src/util/misc/projectStroke/types.d.ts +23 -0
  259. package/dist/src/util/misc/radiansDegreesConversion.d.ts +14 -0
  260. package/dist/src/util/misc/resolveOrigin.d.ts +9 -0
  261. package/dist/src/util/misc/rotatePoint.d.ts +12 -0
  262. package/dist/src/util/misc/sin.d.ts +10 -0
  263. package/dist/src/util/misc/svgParsing.d.ts +45 -0
  264. package/dist/src/util/misc/textStyles.d.ts +32 -0
  265. package/dist/src/util/misc/toFixed.d.ts +8 -0
  266. package/dist/src/util/misc/vectors.d.ts +58 -0
  267. package/dist/src/util/path/index.d.ts +96 -0
  268. package/dist/src/util/path/regex.d.ts +2 -0
  269. package/dist/src/util/path/typechecks.d.ts +24 -0
  270. package/dist/src/util/path/typedefs.d.ts +220 -0
  271. package/dist/src/util/transform_matrix_removal.d.ts +14 -0
  272. package/dist/src/util/typeAssertions.d.ts +19 -0
  273. package/e2e/site/index.html +25 -0
  274. package/e2e/utils/objects.ts +36 -0
  275. package/fabric.ts +72 -0
  276. package/index.node.ts +43 -0
  277. package/index.ts +1 -0
  278. package/jest.config.js +194 -0
  279. package/lib/aligning_guidelines.js +2 -2
  280. package/package.json +110 -40
  281. package/playwright.config.ts +64 -0
  282. package/publish.js +0 -26
  283. package/rollup.config.mjs +99 -0
  284. package/rollup.test.config.js +24 -0
  285. package/scripts/build.mjs +50 -0
  286. package/scripts/buildLock.mjs +115 -0
  287. package/scripts/buildReporter.mjs +15 -0
  288. package/scripts/buildStats.mjs +139 -0
  289. package/scripts/dirname.mjs +14 -0
  290. package/scripts/git.mjs +36 -0
  291. package/scripts/index.mjs +564 -0
  292. package/scripts/sandbox.mjs +149 -0
  293. package/src/ClassRegistry.ts +56 -0
  294. package/src/Collection.ts +346 -0
  295. package/src/CommonMethods.ts +63 -0
  296. package/src/EventTypeDefs.ts +298 -0
  297. package/src/Intersection.ts +302 -0
  298. package/src/Observable.ts +181 -0
  299. package/src/Pattern/Pattern.ts +207 -0
  300. package/src/Pattern/index.ts +2 -0
  301. package/src/Pattern/types.ts +17 -0
  302. package/src/Point.ts +388 -0
  303. package/src/Shadow.ts +214 -0
  304. package/src/brushes/{base_brush.class.js → BaseBrush.ts} +63 -42
  305. package/src/brushes/CircleBrush.test.ts +11 -0
  306. package/src/brushes/CircleBrush.ts +140 -0
  307. package/src/brushes/PatternBrush.ts +70 -0
  308. package/src/brushes/PencilBrush.ts +300 -0
  309. package/src/brushes/SprayBrush.ts +214 -0
  310. package/src/brushes/typedefs.ts +18 -0
  311. package/src/cache.ts +90 -0
  312. package/src/canvas/Canvas.ts +1598 -0
  313. package/src/canvas/DOMManagers/CanvasDOMManager.ts +124 -0
  314. package/src/canvas/DOMManagers/StaticCanvasDOMManager.ts +80 -0
  315. package/src/canvas/DOMManagers/util.spec.ts +26 -0
  316. package/src/canvas/DOMManagers/util.ts +98 -0
  317. package/src/canvas/SelectableCanvas.ts +1506 -0
  318. package/src/canvas/StaticCanvas.ts +1634 -0
  319. package/src/canvas/TextEditingManager.ts +70 -0
  320. package/src/canvas/canvas_gestures.mixin.ts +207 -0
  321. package/src/color/Color.ts +320 -0
  322. package/src/color/color_map.ts +154 -0
  323. package/src/color/constants.ts +107 -0
  324. package/src/color/typedefs.ts +18 -0
  325. package/src/color/util.ts +93 -0
  326. package/src/config.ts +159 -0
  327. package/src/constants.ts +29 -0
  328. package/src/controls/Control.ts +385 -0
  329. package/src/controls/changeWidth.ts +53 -0
  330. package/src/controls/commonControls.ts +105 -0
  331. package/src/controls/controlRendering.ts +138 -0
  332. package/src/controls/drag.ts +32 -0
  333. package/src/controls/fireEvent.ts +18 -0
  334. package/src/controls/index.ts +22 -0
  335. package/src/controls/polyControl.ts +135 -0
  336. package/src/controls/rotate.ts +87 -0
  337. package/src/controls/scale.ts +277 -0
  338. package/src/controls/scaleSkew.ts +92 -0
  339. package/src/controls/skew.ts +243 -0
  340. package/src/controls/util.ts +155 -0
  341. package/src/controls/wrapWithFireEvent.ts +25 -0
  342. package/src/controls/wrapWithFixedAnchor.ts +20 -0
  343. package/src/env/browser.ts +32 -0
  344. package/src/env/index.ts +38 -0
  345. package/src/env/node.ts +58 -0
  346. package/src/env/types.ts +15 -0
  347. package/src/filters/{base_filter.class.js → BaseFilter.ts} +203 -151
  348. package/src/filters/BlendColor.ts +219 -0
  349. package/src/filters/BlendImage.ts +230 -0
  350. package/src/filters/Blur.ts +181 -0
  351. package/src/filters/Boilerplate.ts +94 -0
  352. package/src/filters/Brightness.ts +85 -0
  353. package/src/filters/Canvas2dFilterBackend.ts +65 -0
  354. package/src/filters/ColorMatrix.ts +147 -0
  355. package/src/filters/ColorMatrixFilters.ts +79 -0
  356. package/src/filters/Composed.ts +78 -0
  357. package/src/filters/Contrast.ts +84 -0
  358. package/src/filters/Convolute.ts +186 -0
  359. package/src/filters/FilterBackend.ts +38 -0
  360. package/src/filters/GLProbes/GLProbe.ts +7 -0
  361. package/src/filters/GLProbes/NodeGLProbe.ts +15 -0
  362. package/src/filters/GLProbes/WebGLProbe.ts +47 -0
  363. package/src/filters/Gamma.ts +112 -0
  364. package/src/filters/Grayscale.ts +104 -0
  365. package/src/filters/HueRotation.ts +64 -0
  366. package/src/filters/Invert.ts +101 -0
  367. package/src/filters/Noise.ts +96 -0
  368. package/src/filters/Pixelate.ts +98 -0
  369. package/src/filters/RemoveColor.ts +137 -0
  370. package/src/filters/Resize.ts +540 -0
  371. package/src/filters/Saturation.ts +89 -0
  372. package/src/filters/Vibrance.ts +90 -0
  373. package/src/filters/WebGLFilterBackend.ts +456 -0
  374. package/src/filters/filters.ts +28 -0
  375. package/src/filters/index.ts +12 -0
  376. package/src/filters/shaders/baseFilter.ts +17 -0
  377. package/src/filters/shaders/blendColor.ts +33 -0
  378. package/src/filters/shaders/blendImage.ts +32 -0
  379. package/src/filters/shaders/blur.ts +24 -0
  380. package/src/filters/shaders/brightness.ts +11 -0
  381. package/src/filters/shaders/colorMatrix.ts +12 -0
  382. package/src/filters/shaders/constrast.ts +11 -0
  383. package/src/filters/shaders/convolute.ts +154 -0
  384. package/src/filters/shaders/gamma.ts +15 -0
  385. package/src/filters/shaders/grayscale.ts +36 -0
  386. package/src/filters/shaders/invert.ts +19 -0
  387. package/src/filters/shaders/noise.ts +16 -0
  388. package/src/filters/shaders/pixelate.ts +19 -0
  389. package/src/filters/shaders/removeColor.ts +13 -0
  390. package/src/filters/shaders/saturation.ts +15 -0
  391. package/src/filters/shaders/vibrance.ts +16 -0
  392. package/src/filters/typedefs.ts +59 -0
  393. package/src/filters/utils.ts +7 -0
  394. package/src/gradient/Gradient.ts +409 -0
  395. package/src/gradient/constants.ts +12 -0
  396. package/src/gradient/index.ts +2 -0
  397. package/src/gradient/parser/index.ts +3 -0
  398. package/src/gradient/parser/misc.ts +13 -0
  399. package/src/gradient/parser/parseColorStops.ts +56 -0
  400. package/src/gradient/parser/parseCoords.ts +73 -0
  401. package/src/gradient/typedefs.ts +104 -0
  402. package/src/mixins/{eraser_brush.mixin.js → eraser_brush.mixin.ts} +350 -239
  403. package/src/parkinglot/canvas_animation.mixin.ts +121 -0
  404. package/src/parkinglot/straighten.ts +58 -0
  405. package/src/parser/applyViewboxTransform.ts +158 -0
  406. package/src/parser/attributes.ts +25 -0
  407. package/src/parser/constants.ts +116 -0
  408. package/src/parser/doesSomeParentMatch.ts +18 -0
  409. package/src/parser/elementById.ts +21 -0
  410. package/src/parser/elementMatchesRule.ts +16 -0
  411. package/src/parser/elements_parser.ts +158 -0
  412. package/src/parser/getCSSRules.ts +61 -0
  413. package/src/parser/getGlobalStylesForElement.ts +19 -0
  414. package/src/parser/getGradientDefs.ts +31 -0
  415. package/src/parser/getMultipleNodes.ts +15 -0
  416. package/src/parser/getSvgRegex.ts +3 -0
  417. package/src/parser/hasAncestorWithNodeName.ts +14 -0
  418. package/src/parser/index.ts +8 -0
  419. package/src/parser/loadSVGFromString.ts +29 -0
  420. package/src/parser/loadSVGFromURL.ts +47 -0
  421. package/src/parser/normalizeAttr.ts +10 -0
  422. package/src/parser/normalizeValue.ts +64 -0
  423. package/src/parser/parseAttributes.ts +90 -0
  424. package/src/parser/parseFontDeclaration.ts +44 -0
  425. package/src/parser/parsePointsAttribute.ts +34 -0
  426. package/src/parser/parseSVGDocument.ts +118 -0
  427. package/src/parser/parseStyleAttribute.ts +27 -0
  428. package/src/parser/parseStyleObject.ts +15 -0
  429. package/src/parser/parseStyleString.ts +16 -0
  430. package/src/parser/parseTransformAttribute.ts +94 -0
  431. package/src/parser/parseUseDirectives.ts +78 -0
  432. package/src/parser/percent.ts +27 -0
  433. package/src/parser/recursivelyParseGradientsXlink.ts +42 -0
  434. package/src/parser/selectorMatches.ts +25 -0
  435. package/src/parser/setStrokeFillOpacity.ts +40 -0
  436. package/src/parser/typedefs.ts +13 -0
  437. package/src/shapes/ActiveSelection.ts +192 -0
  438. package/src/shapes/Circle.ts +236 -0
  439. package/src/shapes/Ellipse.ts +177 -0
  440. package/src/shapes/Group.ts +1103 -0
  441. package/src/shapes/IText/DraggableTextDelegate.ts +385 -0
  442. package/src/shapes/IText/IText.ts +696 -0
  443. package/src/shapes/IText/ITextBehavior.ts +1073 -0
  444. package/src/shapes/IText/ITextClickBehavior.ts +292 -0
  445. package/src/shapes/IText/ITextKeyBehavior.ts +675 -0
  446. package/src/shapes/IText/constants.ts +53 -0
  447. package/src/shapes/Image.ts +848 -0
  448. package/src/shapes/Line.ts +285 -0
  449. package/src/shapes/Object/AnimatableObject.ts +103 -0
  450. package/src/shapes/Object/FabricObject.ts +29 -0
  451. package/src/shapes/Object/FabricObjectSVGExportMixin.ts +278 -0
  452. package/src/shapes/Object/InteractiveObject.ts +669 -0
  453. package/src/shapes/Object/Object.ts +1589 -0
  454. package/src/shapes/Object/ObjectGeometry.ts +814 -0
  455. package/src/shapes/Object/ObjectOrigin.ts +277 -0
  456. package/src/shapes/Object/StackedObject.ts +206 -0
  457. package/src/shapes/Object/defaultValues.ts +110 -0
  458. package/src/shapes/Object/types/BaseProps.ts +96 -0
  459. package/src/shapes/Object/types/BorderProps.ts +40 -0
  460. package/src/shapes/Object/types/ControlProps.ts +69 -0
  461. package/src/shapes/Object/types/FabricObjectProps.ts +111 -0
  462. package/src/shapes/Object/types/FillStrokeProps.ts +90 -0
  463. package/src/shapes/Object/types/LockInteractionProps.ts +57 -0
  464. package/src/shapes/Object/types/ObjectProps.ts +49 -0
  465. package/src/shapes/Object/types/SerializedObjectProps.ts +73 -0
  466. package/src/shapes/Object/types/index.ts +8 -0
  467. package/src/shapes/Path.ts +434 -0
  468. package/src/shapes/Polygon.ts +22 -0
  469. package/src/shapes/Polyline.ts +364 -0
  470. package/src/shapes/Rect.ts +230 -0
  471. package/src/shapes/Text/StyledText.ts +323 -0
  472. package/src/shapes/Text/Text.ts +1891 -0
  473. package/src/shapes/Text/TextSVGExportMixin.ts +289 -0
  474. package/src/shapes/Text/constants.ts +111 -0
  475. package/src/shapes/Textbox.ts +526 -0
  476. package/src/shapes/Triangle.ts +62 -0
  477. package/src/typedefs.ts +121 -0
  478. package/src/util/animation/AnimationBase.ts +166 -0
  479. package/src/util/animation/AnimationFrameProvider.ts +9 -0
  480. package/src/util/animation/AnimationRegistry.ts +58 -0
  481. package/src/util/animation/ArrayAnimation.ts +27 -0
  482. package/src/util/animation/ColorAnimation.ts +74 -0
  483. package/src/util/animation/ValueAnimation.ts +29 -0
  484. package/src/util/animation/animate.ts +74 -0
  485. package/src/util/animation/easing.ts +327 -0
  486. package/src/util/animation/index.ts +2 -0
  487. package/src/util/animation/types.ts +136 -0
  488. package/src/util/applyMixins.ts +22 -0
  489. package/src/util/dom_event.ts +28 -0
  490. package/src/util/dom_misc.ts +44 -0
  491. package/src/util/dom_request.ts +64 -0
  492. package/src/util/dom_style.ts +20 -0
  493. package/src/util/index.ts +106 -0
  494. package/src/util/internals/cleanupSvgAttribute.test.ts +16 -0
  495. package/src/util/internals/cleanupSvgAttribute.ts +8 -0
  496. package/src/util/internals/cloneDeep.test.ts +16 -0
  497. package/src/util/internals/cloneDeep.ts +2 -0
  498. package/src/util/internals/getRandomInt.test.ts +33 -0
  499. package/src/util/internals/getRandomInt.ts +8 -0
  500. package/src/util/internals/ifNaN.ts +9 -0
  501. package/src/util/internals/index.ts +3 -0
  502. package/src/util/internals/removeFromArray.ts +14 -0
  503. package/src/util/internals/uid.ts +3 -0
  504. package/src/util/lang_string.ts +79 -0
  505. package/src/util/misc/boundingBoxFromPoints.ts +38 -0
  506. package/src/util/misc/capValue.ts +2 -0
  507. package/src/util/misc/cos.ts +24 -0
  508. package/src/util/misc/dom.ts +55 -0
  509. package/src/util/misc/findScaleTo.ts +29 -0
  510. package/src/util/misc/groupSVGElements.ts +15 -0
  511. package/src/util/misc/isTransparent.ts +28 -0
  512. package/src/util/misc/matrix.ts +313 -0
  513. package/src/util/misc/mergeClipPaths.ts +40 -0
  514. package/src/util/misc/objectEnlive.ts +174 -0
  515. package/src/util/misc/objectTransforms.ts +130 -0
  516. package/src/util/misc/pick.ts +29 -0
  517. package/src/util/misc/planeChange.ts +127 -0
  518. package/src/util/misc/projectStroke/StrokeLineCapProjections.ts +113 -0
  519. package/src/util/misc/projectStroke/StrokeLineJoinProjections.ts +227 -0
  520. package/src/util/misc/projectStroke/StrokeProjectionsBase.ts +76 -0
  521. package/src/util/misc/projectStroke/index.ts +55 -0
  522. package/src/util/misc/projectStroke/types.ts +24 -0
  523. package/src/util/misc/radiansDegreesConversion.ts +18 -0
  524. package/src/util/misc/resolveOrigin.ts +22 -0
  525. package/src/util/misc/rotatePoint.ts +15 -0
  526. package/src/util/misc/sin.ts +26 -0
  527. package/src/util/misc/svgParsing.ts +171 -0
  528. package/src/util/misc/textStyles.ts +132 -0
  529. package/src/util/misc/toFixed.ts +8 -0
  530. package/src/util/misc/vectors.ts +83 -0
  531. package/src/util/path/index.ts +1039 -0
  532. package/src/util/path/regex.ts +39 -0
  533. package/src/util/path/typechecks.ts +145 -0
  534. package/src/util/path/typedefs.ts +305 -0
  535. package/src/util/transform_matrix_removal.ts +61 -0
  536. package/src/util/typeAssertions.ts +78 -0
  537. package/tsconfig.json +106 -0
  538. package/HEADER.js +0 -203
  539. package/build.js +0 -287
  540. package/dist/fabric.js +0 -31187
  541. package/dist/fabric.min.js +0 -1
  542. package/old-travis-reference.yml +0 -97
  543. package/src/brushes/circle_brush.class.js +0 -144
  544. package/src/brushes/pattern_brush.class.js +0 -61
  545. package/src/brushes/pencil_brush.class.js +0 -310
  546. package/src/brushes/spray_brush.class.js +0 -219
  547. package/src/canvas.class.js +0 -1312
  548. package/src/color.class.js +0 -636
  549. package/src/control.class.js +0 -339
  550. package/src/controls.actions.js +0 -740
  551. package/src/controls.render.js +0 -99
  552. package/src/elements_parser.js +0 -152
  553. package/src/filters/2d_backend.class.js +0 -65
  554. package/src/filters/blendcolor_filter.class.js +0 -251
  555. package/src/filters/blendimage_filter.class.js +0 -247
  556. package/src/filters/blur_filter.class.js +0 -217
  557. package/src/filters/brightness_filter.class.js +0 -113
  558. package/src/filters/colormatrix_filter.class.js +0 -159
  559. package/src/filters/composed_filter.class.js +0 -72
  560. package/src/filters/contrast_filter.class.js +0 -113
  561. package/src/filters/convolute_filter.class.js +0 -352
  562. package/src/filters/filter_boilerplate.js +0 -111
  563. package/src/filters/filter_generator.js +0 -85
  564. package/src/filters/gamma_filter.class.js +0 -136
  565. package/src/filters/grayscale_filter.class.js +0 -154
  566. package/src/filters/hue_rotation.class.js +0 -107
  567. package/src/filters/invert_filter.class.js +0 -111
  568. package/src/filters/noise_filter.class.js +0 -134
  569. package/src/filters/pixelate_filter.class.js +0 -137
  570. package/src/filters/removecolor_filter.class.js +0 -173
  571. package/src/filters/resize_filter.class.js +0 -490
  572. package/src/filters/saturate_filter.class.js +0 -119
  573. package/src/filters/vibrance_filter.class.js +0 -122
  574. package/src/filters/webgl_backend.class.js +0 -396
  575. package/src/globalFabric.js +0 -4
  576. package/src/gradient.class.js +0 -490
  577. package/src/intersection.class.js +0 -172
  578. package/src/log.js +0 -11
  579. package/src/mixins/animation.mixin.js +0 -231
  580. package/src/mixins/canvas_dataurl_exporter.mixin.js +0 -97
  581. package/src/mixins/canvas_events.mixin.js +0 -974
  582. package/src/mixins/canvas_gestures.mixin.js +0 -149
  583. package/src/mixins/canvas_grouping.mixin.js +0 -177
  584. package/src/mixins/canvas_serialization.mixin.js +0 -228
  585. package/src/mixins/collection.mixin.js +0 -170
  586. package/src/mixins/default_controls.js +0 -114
  587. package/src/mixins/itext.svg_export.js +0 -241
  588. package/src/mixins/itext_behavior.mixin.js +0 -940
  589. package/src/mixins/itext_click_behavior.mixin.js +0 -278
  590. package/src/mixins/itext_key_behavior.mixin.js +0 -694
  591. package/src/mixins/object.svg_export.js +0 -258
  592. package/src/mixins/object_geometry.mixin.js +0 -683
  593. package/src/mixins/object_interactivity.mixin.js +0 -314
  594. package/src/mixins/object_origin.mixin.js +0 -255
  595. package/src/mixins/object_stacking.mixin.js +0 -80
  596. package/src/mixins/object_straightening.mixin.js +0 -80
  597. package/src/mixins/observable.mixin.js +0 -141
  598. package/src/mixins/shared_methods.mixin.js +0 -94
  599. package/src/mixins/stateful.mixin.js +0 -107
  600. package/src/mixins/text_style.mixin.js +0 -324
  601. package/src/parser.js +0 -1090
  602. package/src/pattern.class.js +0 -189
  603. package/src/point.class.js +0 -337
  604. package/src/shadow.class.js +0 -195
  605. package/src/shapes/active_selection.class.js +0 -155
  606. package/src/shapes/circle.class.js +0 -210
  607. package/src/shapes/ellipse.class.js +0 -181
  608. package/src/shapes/group.class.js +0 -593
  609. package/src/shapes/image.class.js +0 -764
  610. package/src/shapes/itext.class.js +0 -526
  611. package/src/shapes/line.class.js +0 -324
  612. package/src/shapes/object.class.js +0 -2008
  613. package/src/shapes/path.class.js +0 -384
  614. package/src/shapes/polygon.class.js +0 -81
  615. package/src/shapes/polyline.class.js +0 -268
  616. package/src/shapes/rect.class.js +0 -187
  617. package/src/shapes/text.class.js +0 -1696
  618. package/src/shapes/textbox.class.js +0 -461
  619. package/src/shapes/triangle.class.js +0 -93
  620. package/src/static_canvas.class.js +0 -1881
  621. package/src/util/anim_ease.js +0 -398
  622. package/src/util/animate.js +0 -254
  623. package/src/util/animate_color.js +0 -74
  624. package/src/util/dom_event.js +0 -50
  625. package/src/util/dom_misc.js +0 -300
  626. package/src/util/dom_request.js +0 -54
  627. package/src/util/dom_style.js +0 -70
  628. package/src/util/lang_array.js +0 -94
  629. package/src/util/lang_class.js +0 -115
  630. package/src/util/lang_object.js +0 -75
  631. package/src/util/lang_string.js +0 -110
  632. package/src/util/misc.js +0 -1330
  633. package/src/util/named_accessors.mixin.js +0 -428
  634. package/src/util/path.js +0 -829
@@ -0,0 +1,61 @@
1
+ /**
2
+ * Returns CSS rules for a given SVG document
3
+ * @param {SVGDocument} doc SVG document to parse
4
+ * @return {Object} CSS rules of this document
5
+ */
6
+ export function getCSSRules(doc: Document) {
7
+ const styles = doc.getElementsByTagName('style');
8
+ let i;
9
+ let len;
10
+ const allRules: Record<string, Record<string, string>> = {};
11
+ let rules;
12
+
13
+ // very crude parsing of style contents
14
+ for (i = 0, len = styles.length; i < len; i++) {
15
+ const styleContents = (styles[i].textContent || '').replace(
16
+ // remove comments
17
+ /\/\*[\s\S]*?\*\//g,
18
+ ''
19
+ );
20
+
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: Record<string, string> = {},
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((_rule) => {
49
+ _rule = _rule.replace(/^svg/i, '').trim();
50
+ if (_rule === '') {
51
+ return;
52
+ }
53
+ allRules[_rule] = {
54
+ ...(allRules[_rule] || {}),
55
+ ...ruleObj,
56
+ };
57
+ });
58
+ });
59
+ }
60
+ return allRules;
61
+ }
@@ -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,3 @@
1
+ export function getSvgRegex(arr: string[]) {
2
+ return new RegExp('^(' + arr.join('|') + ')\\b', 'i');
3
+ }
@@ -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,8 @@
1
+ export { loadSVGFromURL } from './loadSVGFromURL';
2
+ export { loadSVGFromString } from './loadSVGFromString';
3
+ export { parseAttributes } from './parseAttributes';
4
+ export { parseStyleAttribute } from './parseStyleAttribute';
5
+ export { parsePointsAttribute } from './parsePointsAttribute';
6
+ export { parseTransformAttribute } from './parseTransformAttribute';
7
+ export { getCSSRules } from './getCSSRules';
8
+ export { parseFontDeclaration } from './parseFontDeclaration';
@@ -0,0 +1,29 @@
1
+ import { getFabricWindow } from '../env';
2
+ import type { LoadImageOptions } from '../util/misc/objectEnlive';
3
+ import { parseSVGDocument } from './parseSVGDocument';
4
+ import type { SVGParsingOutput, TSvgReviverCallback } from './typedefs';
5
+
6
+ /**
7
+ * Takes string corresponding to an SVG document, and parses it into a set of fabric objects
8
+ * @memberOf fabric
9
+ * @param {String} string representing the svg
10
+ * @param {TSvgParsedCallback} callback Invoked when the parsing is done, with null if parsing wasn't possible with the list of svg nodes.
11
+ * {@link TSvgParsedCallback} also receives `allElements` array as the last argument. This is the full list of svg nodes available in the document.
12
+ * You may want to use it if you are trying to regroup the objects as they were originally grouped in the SVG. ( This was the reason why it was added )
13
+ * @param {TSvgReviverCallback} [reviver] Extra callback for further parsing of SVG elements, called after each fabric object has been created.
14
+ * Takes as input the original svg element and the generated `FabricObject` as arguments. Used to inspect extra properties not parsed by fabric,
15
+ * or extra custom manipulation
16
+ * @param {Object} [options] Object containing options for parsing
17
+ * @param {String} [options.crossOrigin] crossOrigin setting to use for external resources
18
+ * @param {AbortSignal} [options.signal] handle aborting, see https://developer.mozilla.org/en-US/docs/Web/API/AbortController/signal
19
+ */
20
+ export function loadSVGFromString(
21
+ string: string,
22
+ reviver?: TSvgReviverCallback,
23
+ options?: LoadImageOptions
24
+ ): Promise<SVGParsingOutput> {
25
+ const parser = new (getFabricWindow().DOMParser)(),
26
+ // should we use `image/svg+xml` here?
27
+ doc = parser.parseFromString(string.trim(), 'text/xml');
28
+ return parseSVGDocument(doc.documentElement, reviver, options);
29
+ }
@@ -0,0 +1,47 @@
1
+ import { request } from '../util/dom_request';
2
+ import { parseSVGDocument, createEmptyResponse } from './parseSVGDocument';
3
+ import type { SVGParsingOutput, TSvgReviverCallback } from './typedefs';
4
+ import type { LoadImageOptions } from '../util/misc/objectEnlive';
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 where the SVG is
11
+ * @param {TSvgParsedCallback} callback Invoked when the parsing is done, with null if parsing wasn't possible with the list of svg nodes.
12
+ * {@link TSvgParsedCallback} also receives `allElements` array as the last argument. This is the full list of svg nodes available in the document.
13
+ * You may want to use it if you are trying to regroup the objects as they were originally grouped in the SVG. ( This was the reason why it was added )
14
+ * @param {TSvgReviverCallback} [reviver] Extra callback for further parsing of SVG elements, called after each fabric object has been created.
15
+ * Takes as input the original svg element and the generated `FabricObject` as arguments. Used to inspect extra properties not parsed by fabric,
16
+ * or extra custom manipulation
17
+ * @param {Object} [options] Object containing options for parsing
18
+ * @param {String} [options.crossOrigin] crossOrigin setting to use for external resources
19
+ * @param {AbortSignal} [options.signal] handle aborting, see https://developer.mozilla.org/en-US/docs/Web/API/AbortController/signal
20
+ */
21
+ export function loadSVGFromURL(
22
+ url: string,
23
+ reviver?: TSvgReviverCallback,
24
+ options: LoadImageOptions = {}
25
+ ): Promise<SVGParsingOutput> {
26
+ // need to handle error properly
27
+ return new Promise<HTMLElement>((resolve, reject) => {
28
+ const onComplete = (r: XMLHttpRequest) => {
29
+ const xml = r.responseXML;
30
+ if (xml && xml.documentElement) {
31
+ resolve(xml.documentElement);
32
+ }
33
+ reject();
34
+ };
35
+
36
+ request(url.replace(/^\n\s*/, '').trim(), {
37
+ method: 'get',
38
+ onComplete,
39
+ signal: options.signal,
40
+ });
41
+ })
42
+ .then((parsedDoc) => parseSVGDocument(parsedDoc, reviver, options))
43
+ .catch(() => {
44
+ // this is an unhappy path, we dont care about speed
45
+ return createEmptyResponse();
46
+ });
47
+ }
@@ -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,64 @@
1
+ //@ts-nocheck
2
+ import { multiplyTransformMatrices } from '../util/misc/matrix';
3
+ import { parseUnit } from '../util/misc/svgParsing';
4
+ import { parseTransformAttribute } from './parseTransformAttribute';
5
+ import { CENTER, LEFT, RIGHT, NONE } from '../constants';
6
+
7
+ export function normalizeValue(attr, value, parentAttributes, fontSize) {
8
+ const isArray = Array.isArray(value);
9
+ let parsed;
10
+
11
+ if ((attr === 'fill' || attr === 'stroke') && value === NONE) {
12
+ value = '';
13
+ } else if (attr === 'strokeUniform') {
14
+ return value === 'non-scaling-stroke';
15
+ } else if (attr === 'strokeDashArray') {
16
+ if (value === NONE) {
17
+ value = null;
18
+ } else {
19
+ value = value.replace(/,/g, ' ').split(/\s+/).map(parseFloat);
20
+ }
21
+ } else if (attr === 'transformMatrix') {
22
+ if (parentAttributes && parentAttributes.transformMatrix) {
23
+ value = multiplyTransformMatrices(
24
+ parentAttributes.transformMatrix,
25
+ parseTransformAttribute(value)
26
+ );
27
+ } else {
28
+ value = parseTransformAttribute(value);
29
+ }
30
+ } else if (attr === 'visible') {
31
+ value = value !== NONE && value !== 'hidden';
32
+ // display=none on parent element always takes precedence over child element
33
+ if (parentAttributes && parentAttributes.visible === false) {
34
+ value = false;
35
+ }
36
+ } else if (attr === 'opacity') {
37
+ value = parseFloat(value);
38
+ if (parentAttributes && typeof parentAttributes.opacity !== 'undefined') {
39
+ value *= parentAttributes.opacity;
40
+ }
41
+ } else if (attr === 'textAnchor' /* text-anchor */) {
42
+ value = value === 'start' ? LEFT : value === 'end' ? RIGHT : CENTER;
43
+ } else if (attr === 'charSpacing') {
44
+ // parseUnit returns px and we convert it to em
45
+ parsed = (parseUnit(value, fontSize) / fontSize) * 1000;
46
+ } else if (attr === 'paintFirst') {
47
+ const fillIndex = value.indexOf('fill');
48
+ const strokeIndex = value.indexOf('stroke');
49
+ value = 'fill';
50
+ if (fillIndex > -1 && strokeIndex > -1 && strokeIndex < fillIndex) {
51
+ value = 'stroke';
52
+ } else if (fillIndex === -1 && strokeIndex > -1) {
53
+ value = 'stroke';
54
+ }
55
+ } else if (attr === 'href' || attr === 'xlink:href' || attr === 'font') {
56
+ return value;
57
+ } else if (attr === 'imageSmoothing') {
58
+ return value === 'optimizeQuality';
59
+ } else {
60
+ parsed = isArray ? value.map(parseUnit) : parseUnit(value, fontSize);
61
+ }
62
+
63
+ return !isArray && isNaN(parsed) ? value : parsed;
64
+ }
@@ -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,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
+ }
@@ -0,0 +1,34 @@
1
+ //@ts-nocheck
2
+
3
+ /**
4
+ * Parses "points" attribute, returning an array of values
5
+ * @static
6
+ * @memberOf fabric
7
+ * @param {String} points points attribute string
8
+ * @return {Array} array of points
9
+ */
10
+ export function parsePointsAttribute(points) {
11
+ // points attribute is required and must not be empty
12
+ if (!points) {
13
+ return null;
14
+ }
15
+
16
+ // replace commas with whitespace and remove bookending whitespace
17
+ points = points.replace(/,/g, ' ').trim();
18
+
19
+ points = points.split(/\s+/);
20
+ const parsedPoints = [];
21
+
22
+ for (let i = 0; i < points.length; i += 2) {
23
+ parsedPoints.push({
24
+ x: parseFloat(points[i]),
25
+ y: parseFloat(points[i + 1]),
26
+ });
27
+ }
28
+
29
+ // odd number of points is an error
30
+ // if (parsedPoints.length % 2 !== 0) {
31
+ // return null;
32
+ // }
33
+ return parsedPoints;
34
+ }
@@ -0,0 +1,118 @@
1
+ // @ts-nocheck
2
+ import { uid } from '../util/internals/uid';
3
+ import { applyViewboxTransform } from './applyViewboxTransform';
4
+ import {
5
+ clipPaths,
6
+ cssRules,
7
+ gradientDefs,
8
+ svgInvalidAncestorsRegEx,
9
+ svgValidTagNamesRegEx,
10
+ } from './constants';
11
+ import { getCSSRules } from './getCSSRules';
12
+ import { getGradientDefs } from './getGradientDefs';
13
+ import { hasAncestorWithNodeName } from './hasAncestorWithNodeName';
14
+ import { parseUseDirectives } from './parseUseDirectives';
15
+ import type { SVGParsingOutput, TSvgReviverCallback } from './typedefs';
16
+ import type { LoadImageOptions } from '../util/misc/objectEnlive';
17
+ import { ElementsParser } from './elements_parser';
18
+
19
+ /**
20
+ * Parses an SVG document, converts it to an array of corresponding fabric.* instances and passes them to a callback
21
+ * @static
22
+ * @function
23
+ * @memberOf fabric
24
+ * @param {HTMLElement} doc SVG document to parse
25
+ * @param {TSvgParsedCallback} callback Invoked when the parsing is done, with null if parsing wasn't possible with the list of svg nodes.
26
+ * @param {TSvgReviverCallback} [reviver] Extra callback for further parsing of SVG elements, called after each fabric object has been created.
27
+ * Takes as input the original svg element and the generated `FabricObject` as arguments. Used to inspect extra properties not parsed by fabric,
28
+ * or extra custom manipulation
29
+ * @param {Object} [options] Object containing options for parsing
30
+ * @param {String} [options.crossOrigin] crossOrigin setting to use for external resources
31
+ * @param {AbortSignal} [options.signal] handle aborting, see https://developer.mozilla.org/en-US/docs/Web/API/AbortController/signal
32
+ * @return {SVGParsingOutput}
33
+ * {@link SVGParsingOutput} also receives `allElements` array as the last argument. This is the full list of svg nodes available in the document.
34
+ * You may want to use it if you are trying to regroup the objects as they were originally grouped in the SVG. ( This was the reason why it was added )
35
+
36
+ */
37
+
38
+ export const createEmptyResponse = (): SVGParsingOutput => ({
39
+ objects: [],
40
+ elements: [],
41
+ options: {},
42
+ allElements: [],
43
+ });
44
+
45
+ export async function parseSVGDocument(
46
+ doc: HTMLElement,
47
+ reviver?: TSvgReviverCallback,
48
+ { crossOrigin, signal }: LoadImageOptions = {}
49
+ ): Promise<SVGParsingOutput> {
50
+ if (signal && signal.aborted) {
51
+ console.log('`options.signal` is in `aborted` state');
52
+ // this is an unhappy path, we dont care about speed
53
+ return createEmptyResponse();
54
+ }
55
+ parseUseDirectives(doc);
56
+
57
+ const svgUid = uid(),
58
+ descendants = Array.from(doc.getElementsByTagName('*')),
59
+ options = {
60
+ ...applyViewboxTransform(doc),
61
+ crossOrigin,
62
+ svgUid,
63
+ signal,
64
+ };
65
+
66
+ const elements = descendants.filter(function (el) {
67
+ applyViewboxTransform(el);
68
+ return (
69
+ svgValidTagNamesRegEx.test(el.nodeName.replace('svg:', '')) &&
70
+ !hasAncestorWithNodeName(el, svgInvalidAncestorsRegEx)
71
+ ); // http://www.w3.org/TR/SVG/struct.html#DefsElement
72
+ });
73
+ if (!elements || (elements && !elements.length)) {
74
+ return {
75
+ ...createEmptyResponse(),
76
+ options,
77
+ allElements: descendants,
78
+ };
79
+ }
80
+ const localClipPaths = {};
81
+ descendants
82
+ .filter((el) => el.nodeName.replace('svg:', '') === 'clipPath')
83
+ .forEach((el) => {
84
+ const id = el.getAttribute('id');
85
+ localClipPaths[id] = Array.from(el.getElementsByTagName('*')).filter(
86
+ (el) => svgValidTagNamesRegEx.test(el.nodeName.replace('svg:', ''))
87
+ );
88
+ });
89
+
90
+ // thos are like globals we need to fix
91
+ gradientDefs[svgUid] = getGradientDefs(doc);
92
+ cssRules[svgUid] = getCSSRules(doc);
93
+ clipPaths[svgUid] = localClipPaths;
94
+
95
+ // Precedence of rules: style > class > attribute
96
+ const elementParser = new ElementsParser(
97
+ elements,
98
+ options,
99
+ reviver,
100
+ {
101
+ crossOrigin,
102
+ signal,
103
+ },
104
+ doc
105
+ );
106
+ const instances = await elementParser.parse();
107
+
108
+ delete gradientDefs[svgUid];
109
+ delete cssRules[svgUid];
110
+ delete clipPaths[svgUid];
111
+
112
+ return {
113
+ objects: instances,
114
+ elements,
115
+ options,
116
+ allElements: descendants,
117
+ };
118
+ }
@@ -0,0 +1,27 @@
1
+ //@ts-nocheck
2
+ import { parseStyleObject } from './parseStyleObject';
3
+ import { parseStyleString } from './parseStyleString';
4
+
5
+ /**
6
+ * Parses "style" attribute, retuning an object with values
7
+ * @static
8
+ * @memberOf fabric
9
+ * @param {SVGElement} element Element to parse
10
+ * @return {Object} Objects with values parsed from style attribute of an element
11
+ */
12
+ export function parseStyleAttribute(element) {
13
+ const oStyle = {},
14
+ style = element.getAttribute('style');
15
+
16
+ if (!style) {
17
+ return oStyle;
18
+ }
19
+
20
+ if (typeof style === 'string') {
21
+ parseStyleString(style, oStyle);
22
+ } else {
23
+ parseStyleObject(style, oStyle);
24
+ }
25
+
26
+ return oStyle;
27
+ }
@@ -0,0 +1,15 @@
1
+ //@ts-nocheck
2
+
3
+ export function parseStyleObject(style, oStyle) {
4
+ let attr, value;
5
+ for (const prop in style) {
6
+ if (typeof style[prop] === 'undefined') {
7
+ continue;
8
+ }
9
+
10
+ attr = prop.toLowerCase();
11
+ value = style[prop];
12
+
13
+ oStyle[attr] = value;
14
+ }
15
+ }
@@ -0,0 +1,16 @@
1
+ //@ts-nocheck
2
+
3
+ export function parseStyleString(style, oStyle) {
4
+ let attr, value;
5
+ style
6
+ .replace(/;\s*$/, '')
7
+ .split(';')
8
+ .forEach(function (chunk) {
9
+ const pair = chunk.split(':');
10
+
11
+ attr = pair[0].trim().toLowerCase();
12
+ value = pair[1].trim();
13
+
14
+ oStyle[attr] = value;
15
+ });
16
+ }