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,41 @@
1
+ // absolute value number
2
+ const absNumberRegExStr = String.raw`(?:\d*\.\d+|\d+\.?)(?:[eE][-+]?\d+)?`;
3
+ export const numberRegExStr = `[-+]?${absNumberRegExStr}`;
4
+
5
+ /**
6
+ * p for param
7
+ * using "bad naming" here because it makes the regex much easier to read
8
+ */
9
+ const p = `(${numberRegExStr})`;
10
+
11
+ const reMoveToCommand = `(M) (?:${p} ${p} ?)+`;
12
+
13
+ const reLineCommand = `(L) (?:${p} ${p} ?)+`;
14
+
15
+ const reHorizontalLineCommand = `(H) (?:${p} ?)+`;
16
+
17
+ const reVerticalLineCommand = `(V) (?:${p} ?)+`;
18
+
19
+ const reClosePathCommand = String.raw`(Z)\s*`;
20
+
21
+ const reCubicCurveCommand = `(C) (?:${p} ${p} ${p} ${p} ${p} ${p} ?)+`;
22
+
23
+ const reCubicCurveShortcutCommand = `(S) (?:${p} ${p} ${p} ${p} ?)+`;
24
+
25
+ const reQuadraticCurveCommand = `(Q) (?:${p} ${p} ${p} ${p} ?)+`;
26
+
27
+ const reQuadraticCurveShortcutCommand = `(T) (?:${p} ${p} ?)+`;
28
+
29
+ const reArcCommand = `(A) (?:${p} ${p} ${p} ([01]) ?([01]) ${p} ${p} ?)+`;
30
+
31
+ export const rePathCommand =
32
+ `(?:(?:${reMoveToCommand})` +
33
+ `|(?:${reLineCommand})` +
34
+ `|(?:${reHorizontalLineCommand})` +
35
+ `|(?:${reVerticalLineCommand})` +
36
+ `|(?:${reClosePathCommand})` +
37
+ `|(?:${reCubicCurveCommand})` +
38
+ `|(?:${reCubicCurveShortcutCommand})` +
39
+ `|(?:${reQuadraticCurveCommand})` +
40
+ `|(?:${reQuadraticCurveShortcutCommand})` +
41
+ `|(?:${reArcCommand}))`;
@@ -0,0 +1,145 @@
1
+ import type {
2
+ TComplexParsedCommand,
3
+ TParsedAbsoluteArcCommand,
4
+ TParsedAbsoluteClosePathCommand,
5
+ TParsedAbsoluteCubicCurveCommand,
6
+ TParsedAbsoluteCubicCurveShortcutCommand,
7
+ TParsedAbsoluteHorizontalLineCommand,
8
+ TParsedAbsoluteLineCommand,
9
+ TParsedAbsoluteMoveToCommand,
10
+ TParsedAbsoluteQuadraticCurveCommand,
11
+ TParsedAbsoluteQuadraticCurveShortcutCommand,
12
+ TParsedAbsoluteVerticalLineCommand,
13
+ TParsedClosePathCommand,
14
+ TParsedLineCommand,
15
+ TParsedRelativeArcCommand,
16
+ TParsedRelativeClosePathCommand,
17
+ TParsedRelativeCubicCurveCommand,
18
+ TParsedRelativeCubicCurveShortcutCommand,
19
+ TParsedRelativeHorizontalLineCommand,
20
+ TParsedRelativeLineCommand,
21
+ TParsedRelativeMoveToCommand,
22
+ TParsedRelativeQuadraticCurveCommand,
23
+ TParsedRelativeQuadraticCurveShortcutCommand,
24
+ TParsedRelativeVerticalLineCommand,
25
+ } from './typedefs';
26
+
27
+ export function isAbsMoveToCmd(
28
+ cmd: TComplexParsedCommand
29
+ ): cmd is TParsedAbsoluteMoveToCommand {
30
+ return cmd.length == 3 && cmd[0] == 'M';
31
+ }
32
+ export function isRelMoveToCmd(
33
+ cmd: TComplexParsedCommand
34
+ ): cmd is TParsedRelativeMoveToCommand {
35
+ return cmd.length == 3 && cmd[0] == 'm';
36
+ }
37
+
38
+ export function isAbsLineCmd(
39
+ cmd: TComplexParsedCommand
40
+ ): cmd is TParsedAbsoluteLineCommand {
41
+ return cmd.length == 3 && cmd[0] == 'L';
42
+ }
43
+ export function isRelLineCmd(
44
+ cmd: TComplexParsedCommand
45
+ ): cmd is TParsedRelativeLineCommand {
46
+ return cmd.length == 3 && cmd[0] == 'l';
47
+ }
48
+ export function isLineCommand(
49
+ cmd: TComplexParsedCommand
50
+ ): cmd is TParsedLineCommand {
51
+ return isAbsLineCmd(cmd) || isRelLineCmd(cmd);
52
+ }
53
+
54
+ export function isAbsHorizontalLineCmd(
55
+ cmd: TComplexParsedCommand
56
+ ): cmd is TParsedAbsoluteHorizontalLineCommand {
57
+ return cmd.length == 2 && cmd[0] == 'H';
58
+ }
59
+ export function isRelHorizontalLineCmd(
60
+ cmd: TComplexParsedCommand
61
+ ): cmd is TParsedRelativeHorizontalLineCommand {
62
+ return cmd.length == 2 && cmd[0] == 'h';
63
+ }
64
+
65
+ export function isAbsVerticalLineCmd(
66
+ cmd: TComplexParsedCommand
67
+ ): cmd is TParsedAbsoluteVerticalLineCommand {
68
+ return cmd.length == 2 && cmd[0] == 'V';
69
+ }
70
+ export function isRelVerticalLineCmd(
71
+ cmd: TComplexParsedCommand
72
+ ): cmd is TParsedRelativeVerticalLineCommand {
73
+ return cmd.length == 2 && cmd[0] == 'v';
74
+ }
75
+
76
+ export function isAbsClosePathCmd(
77
+ cmd: TComplexParsedCommand
78
+ ): cmd is TParsedAbsoluteClosePathCommand {
79
+ return cmd.length == 1 && cmd[0] == 'Z';
80
+ }
81
+ export function isRelClosePathCmd(
82
+ cmd: TComplexParsedCommand
83
+ ): cmd is TParsedRelativeClosePathCommand {
84
+ return cmd.length == 1 && cmd[0] == 'z';
85
+ }
86
+ export function isClosePathCommand(
87
+ cmd: TComplexParsedCommand
88
+ ): cmd is TParsedClosePathCommand {
89
+ return cmd.length == 1 && (cmd[0] == 'z' || cmd[0] == 'Z');
90
+ }
91
+
92
+ export function isAbsCubicCurveCmd(
93
+ cmd: TComplexParsedCommand
94
+ ): cmd is TParsedAbsoluteCubicCurveCommand {
95
+ return cmd.length == 7 && cmd[0] == 'C';
96
+ }
97
+ export function isRelCubicCurveCmd(
98
+ cmd: TComplexParsedCommand
99
+ ): cmd is TParsedRelativeCubicCurveCommand {
100
+ return cmd.length == 7 && cmd[0] == 'c';
101
+ }
102
+
103
+ export function isAbsCubicCurveShortcutCmd(
104
+ cmd: TComplexParsedCommand
105
+ ): cmd is TParsedAbsoluteCubicCurveShortcutCommand {
106
+ return cmd.length == 5 && cmd[0] == 'S';
107
+ }
108
+ export function isRelCubicCurveShortcutCmd(
109
+ cmd: TComplexParsedCommand
110
+ ): cmd is TParsedRelativeCubicCurveShortcutCommand {
111
+ return cmd.length == 5 && cmd[0] == 's';
112
+ }
113
+
114
+ export function isAbsQuadraticCurveCmd(
115
+ cmd: TComplexParsedCommand
116
+ ): cmd is TParsedAbsoluteQuadraticCurveCommand {
117
+ return cmd.length == 5 && cmd[0] == 'Q';
118
+ }
119
+ export function isRelQuadraticCurveCmd(
120
+ cmd: TComplexParsedCommand
121
+ ): cmd is TParsedRelativeQuadraticCurveCommand {
122
+ return cmd.length == 5 && cmd[0] == 'q';
123
+ }
124
+
125
+ export function isAbsQuadraticCurveShortcutCmd(
126
+ cmd: TComplexParsedCommand
127
+ ): cmd is TParsedAbsoluteQuadraticCurveShortcutCommand {
128
+ return cmd.length == 3 && cmd[0] == 'T';
129
+ }
130
+ export function isRelQuadraticCurveShortcutCmd(
131
+ cmd: TComplexParsedCommand
132
+ ): cmd is TParsedRelativeQuadraticCurveShortcutCommand {
133
+ return cmd.length == 3 && cmd[0] == 't';
134
+ }
135
+
136
+ export function isAbsArcCmd(
137
+ cmd: TComplexParsedCommand
138
+ ): cmd is TParsedAbsoluteArcCommand {
139
+ return cmd.length == 8 && cmd[0] == 'A';
140
+ }
141
+ export function isRelArcCmd(
142
+ cmd: TComplexParsedCommand
143
+ ): cmd is TParsedRelativeArcCommand {
144
+ return cmd.length == 8 && cmd[0] == 'a';
145
+ }
@@ -0,0 +1,305 @@
1
+ import type { TRadian } from '../../typedefs';
2
+ import type { XY, Point } from '../../Point';
3
+
4
+ export type TPathSegmentInfoCommon<C extends string> = {
5
+ x: number;
6
+ y: number;
7
+ command?: C;
8
+ length: number;
9
+ };
10
+
11
+ export type TCurveInfo<C extends string> = TPathSegmentInfoCommon<C> & {
12
+ /**
13
+ * Get the Point a certain percent distance along the curve
14
+ * @param pct
15
+ */
16
+ iterator: (pct: number) => Point;
17
+ /**
18
+ * Get the angle to a percent
19
+ * @param pct
20
+ */
21
+ angleFinder: (pct: number) => number;
22
+ /**
23
+ * Total length of the curve
24
+ */
25
+ length: number;
26
+ };
27
+
28
+ export type TEndPathInfo = TPathSegmentInfoCommon<'Z'> & {
29
+ destX: number;
30
+ destY: number;
31
+ };
32
+
33
+ /**
34
+ * Relevant info to calculate path length/points on path
35
+ * for each command type in a simplified parsed path
36
+ */
37
+ export type TPathSegmentCommandInfo = {
38
+ M: TPathSegmentInfoCommon<'M'>;
39
+ L: TPathSegmentInfoCommon<'L'>;
40
+ C: TCurveInfo<'C'>;
41
+ Q: TCurveInfo<'Q'>;
42
+ Z: TEndPathInfo;
43
+ };
44
+
45
+ export type TPathSegmentInfo =
46
+ TPathSegmentCommandInfo[keyof TPathSegmentCommandInfo];
47
+
48
+ /**
49
+ * A parsed command of any length (even impossible ones)
50
+ */
51
+ export type TParsedCommand =
52
+ | [command: string]
53
+ | [command: string, arg1: number]
54
+ | [command: string, arg1: number, arg2: number]
55
+ | [command: string, arg1: number, arg2: number, arg3: number]
56
+ | [command: string, arg1: number, arg2: number, arg3: number, arg4: number]
57
+ | [
58
+ command: string,
59
+ arg1: number,
60
+ arg2: number,
61
+ arg3: number,
62
+ arg4: number,
63
+ arg5: number
64
+ ]
65
+ | [
66
+ command: string,
67
+ arg1: number,
68
+ arg2: number,
69
+ arg3: number,
70
+ arg4: number,
71
+ arg5: number,
72
+ arg6: number
73
+ ]
74
+ | [
75
+ command: string,
76
+ arg1: number,
77
+ arg2: number,
78
+ arg3: number,
79
+ arg4: number,
80
+ arg5: number,
81
+ arg6: number,
82
+ arg7: number
83
+ ];
84
+
85
+ /**
86
+ * Command strings of any length
87
+ */
88
+ type TCommand1<T extends TParsedCommand> = `${T[0]}`;
89
+ type TCommand2<T extends TParsedCommand> = `${T[0]} ${T[1]}`;
90
+ type TCommand3<T extends TParsedCommand> = `${T[0]} ${T[1]} ${T[2]}`;
91
+ type TCommand4<T extends TParsedCommand> = `${T[0]} ${T[1]} ${T[2]} ${T[3]}`;
92
+ type TCommand5<T extends TParsedCommand> =
93
+ `${T[0]} ${T[1]} ${T[2]} ${T[3]} ${T[4]}`;
94
+ type TCommand6<T extends TParsedCommand> =
95
+ `${T[0]} ${T[1]} ${T[2]} ${T[3]} ${T[4]} ${T[5]}`;
96
+ type TCommand7<T extends TParsedCommand> =
97
+ `${T[0]} ${T[1]} ${T[2]} ${T[3]} ${T[4]} ${T[5]} ${T[6]}`;
98
+ type TCommand8<T extends TParsedCommand> =
99
+ `${T[0]} ${T[1]} ${T[2]} ${T[3]} ${T[4]} ${T[5]} ${T[6]} ${T[7]}`;
100
+
101
+ /**
102
+ * Begin parsed SVG path commands
103
+ * Read about commands at {@link https://developer.mozilla.org/en-US/docs/Web/SVG/Tutorial/Paths|MDN}
104
+ */
105
+ export type TParsedAbsoluteMoveToCommand = [command: 'M', x: number, y: number];
106
+ export type TParsedRelativeMoveToCommand = [
107
+ command: 'm',
108
+ dx: number,
109
+ dy: number
110
+ ];
111
+ export type TParsedMoveToCommand =
112
+ | TParsedAbsoluteMoveToCommand
113
+ | TParsedRelativeMoveToCommand;
114
+
115
+ export type TMoveToCommand = TCommand3<TParsedMoveToCommand>;
116
+
117
+ export type TParsedAbsoluteLineCommand = [command: 'L', x: number, y: number];
118
+ export type TParsedRelativeLineCommand = [command: 'l', dx: number, dy: number];
119
+ export type TParsedLineCommand =
120
+ | TParsedAbsoluteLineCommand
121
+ | TParsedRelativeLineCommand;
122
+
123
+ export type TLineCommand = TCommand3<TParsedLineCommand>;
124
+
125
+ export type TParsedAbsoluteHorizontalLineCommand = [command: 'H', x: number];
126
+ export type TParsedRelativeHorizontalLineCommand = [command: 'h', dx: number];
127
+ export type TParsedHorizontalLineCommand =
128
+ | TParsedAbsoluteHorizontalLineCommand
129
+ | TParsedRelativeHorizontalLineCommand;
130
+
131
+ export type THorizontalLineCommand = TCommand2<TParsedHorizontalLineCommand>;
132
+
133
+ export type TParsedAbsoluteVerticalLineCommand = [command: 'V', y: number];
134
+ export type TParsedRelativeVerticalLineCommand = [command: 'v', dy: number];
135
+ export type TParsedVerticalLineCommand =
136
+ | TParsedAbsoluteVerticalLineCommand
137
+ | TParsedRelativeVerticalLineCommand;
138
+
139
+ export type TVerticalLineCommand = TCommand2<TParsedVerticalLineCommand>;
140
+
141
+ export type TParsedAbsoluteClosePathCommand = [command: 'Z'];
142
+ export type TParsedRelativeClosePathCommand = [command: 'z'];
143
+ export type TParsedClosePathCommand =
144
+ | TParsedAbsoluteClosePathCommand
145
+ | TParsedRelativeClosePathCommand;
146
+
147
+ export type TClosePathCommand = TCommand1<TParsedClosePathCommand>;
148
+
149
+ export type TParsedAbsoluteCubicCurveCommand = [
150
+ command: 'C',
151
+ controlPoint1X: number,
152
+ controlPoint1Y: number,
153
+ controlPoint2X: number,
154
+ controlPoint2Y: number,
155
+ endX: number,
156
+ endY: number
157
+ ];
158
+ export type TParsedRelativeCubicCurveCommand = [
159
+ command: 'c',
160
+ controlPoint1DX: number,
161
+ controlPoint1DY: number,
162
+ controlPoint2DX: number,
163
+ controlPoint2DY: number,
164
+ endDX: number,
165
+ endDY: number
166
+ ];
167
+ export type TParsedCubicCurveCommand =
168
+ | TParsedAbsoluteCubicCurveCommand
169
+ | TParsedRelativeCubicCurveCommand;
170
+
171
+ export type TCubicCurveCommand = TCommand7<TParsedCubicCurveCommand>;
172
+
173
+ export type TParsedAbsoluteCubicCurveShortcutCommand = [
174
+ command: 'S',
175
+ controlPoint2X: number,
176
+ controlPoint2Y: number,
177
+ endX: number,
178
+ endY: number
179
+ ];
180
+ export type TParsedRelativeCubicCurveShortcutCommand = [
181
+ command: 's',
182
+ controlPoint2DX: number,
183
+ controlPoint2DY: number,
184
+ endDX: number,
185
+ endDY: number
186
+ ];
187
+ export type TParsedCubicCurveShortcutCommand =
188
+ | TParsedAbsoluteCubicCurveShortcutCommand
189
+ | TParsedRelativeCubicCurveShortcutCommand;
190
+
191
+ export type TCubicCurveShortcutCommand =
192
+ TCommand5<TParsedCubicCurveShortcutCommand>;
193
+
194
+ export type TParsedAbsoluteQuadraticCurveCommand = [
195
+ command: 'Q',
196
+ controlPointX: number,
197
+ controlPointY: number,
198
+ endX: number,
199
+ endY: number
200
+ ];
201
+ export type TParsedRelativeQuadraticCurveCommand = [
202
+ command: 'q',
203
+ controlPointDX: number,
204
+ controlPointDY: number,
205
+ endDX: number,
206
+ endDY: number
207
+ ];
208
+ export type TParsedQuadraticCurveCommand =
209
+ | TParsedAbsoluteQuadraticCurveCommand
210
+ | TParsedRelativeQuadraticCurveCommand;
211
+
212
+ export type TQuadraticCurveCommand = TCommand5<TParsedQuadraticCurveCommand>;
213
+
214
+ export type TParsedAbsoluteQuadraticCurveShortcutCommand = [
215
+ command: 'T',
216
+ endX: number,
217
+ endY: number
218
+ ];
219
+ export type TParsedRelativeQuadraticCurveShortcutCommand = [
220
+ command: 't',
221
+ endDX: number,
222
+ endDY: number
223
+ ];
224
+ export type TParsedQuadraticCurveShortcutCommand =
225
+ | TParsedAbsoluteQuadraticCurveShortcutCommand
226
+ | TParsedRelativeQuadraticCurveShortcutCommand;
227
+
228
+ export type TQuadraticCurveShortcutCommand =
229
+ TCommand3<TParsedQuadraticCurveShortcutCommand>;
230
+
231
+ export type TParsedAbsoluteArcCommand = [
232
+ command: 'A',
233
+ radiusX: number,
234
+ radiusY: number,
235
+ rotation: TRadian,
236
+ largeArc: 0 | 1,
237
+ sweep: 0 | 1,
238
+ endX: number,
239
+ endY: number
240
+ ];
241
+ export type TParsedRelativeArcCommand = [
242
+ command: 'a',
243
+ radiusX: number,
244
+ radiusY: number,
245
+ rotation: TRadian,
246
+ largeArc: 0 | 1,
247
+ sweep: 0 | 1,
248
+ endDX: number,
249
+ endDY: number
250
+ ];
251
+
252
+ export type TParsedArcCommand =
253
+ | TParsedAbsoluteArcCommand
254
+ | TParsedRelativeArcCommand;
255
+
256
+ export type TArcCommandSingleFlag<T extends TParsedArcCommand> =
257
+ `${T[0]} ${T[1]} ${T[2]} ${T[3]} ${T[4]}${T[5]} ${T[6]} ${T[7]}`;
258
+ export type TArcCommand =
259
+ | TCommand8<TParsedArcCommand>
260
+ | TArcCommandSingleFlag<TParsedArcCommand>;
261
+
262
+ /**
263
+ * End parsed path commands
264
+ */
265
+
266
+ /**
267
+ * Any old valid SVG path command
268
+ */
269
+ export type TComplexParsedCommand =
270
+ | TParsedMoveToCommand
271
+ | TParsedLineCommand
272
+ | TParsedHorizontalLineCommand
273
+ | TParsedVerticalLineCommand
274
+ | TParsedClosePathCommand
275
+ | TParsedCubicCurveCommand
276
+ | TParsedCubicCurveShortcutCommand
277
+ | TParsedQuadraticCurveCommand
278
+ | TParsedQuadraticCurveShortcutCommand
279
+ | TParsedArcCommand;
280
+
281
+ /**
282
+ * A series of path commands
283
+ */
284
+ export type TComplexPathData = TComplexParsedCommand[];
285
+
286
+ /**
287
+ * Any SVG command that all Fabric functions can understand
288
+ *
289
+ */
290
+ export type TSimpleParsedCommand =
291
+ | TParsedAbsoluteMoveToCommand
292
+ | TParsedAbsoluteLineCommand
293
+ | TParsedAbsoluteClosePathCommand
294
+ | TParsedAbsoluteCubicCurveCommand
295
+ | TParsedAbsoluteQuadraticCurveCommand;
296
+
297
+ /**
298
+ * A series of simple paths
299
+ */
300
+ export type TSimplePathData = TSimpleParsedCommand[];
301
+
302
+ /**
303
+ * A point (vector) and angle between the vector and x-axis
304
+ */
305
+ export type TPointAngle = XY & { angle: TRadian };
@@ -0,0 +1,60 @@
1
+ import { Image } from '../shapes/Image';
2
+ import type { FabricObject } from '../shapes/Object/FabricObject';
3
+ import { TMat2D } from '../typedefs';
4
+ import { qrDecompose } from './misc/matrix';
5
+
6
+ type FabricObjectWithTransformMatrix = FabricObject & {
7
+ transformMatrix?: TMat2D;
8
+ };
9
+
10
+ /**
11
+ * This function is an helper for svg import. it decompose the transformMatrix
12
+ * and assign properties to object.
13
+ * untransformed coordinates
14
+ * @private
15
+ */
16
+ const _assignTransformMatrixProps = (
17
+ object: FabricObjectWithTransformMatrix
18
+ ) => {
19
+ if (object.transformMatrix) {
20
+ const { scaleX, scaleY, angle, skewX } = qrDecompose(
21
+ object.transformMatrix
22
+ );
23
+ object.flipX = false;
24
+ object.flipY = false;
25
+ object.set('scaleX', scaleX);
26
+ object.set('scaleY', scaleY);
27
+ object.angle = angle;
28
+ object.skewX = skewX;
29
+ object.skewY = 0;
30
+ }
31
+ };
32
+
33
+ /**
34
+ * This function is an helper for svg import. it removes the transform matrix
35
+ * and set to object properties that fabricjs can handle
36
+ * @private
37
+ * @param {Object} preserveAspectRatioOptions
38
+ */
39
+ export const removeTransformMatrixForSvgParsing = (
40
+ object: FabricObjectWithTransformMatrix,
41
+ preserveAspectRatioOptions?: any
42
+ ) => {
43
+ let center = object._findCenterFromElement();
44
+ if (object.transformMatrix) {
45
+ _assignTransformMatrixProps(object);
46
+ center = center.transform(object.transformMatrix);
47
+ }
48
+ delete object.transformMatrix;
49
+ if (preserveAspectRatioOptions) {
50
+ object.scaleX *= preserveAspectRatioOptions.scaleX;
51
+ object.scaleY *= preserveAspectRatioOptions.scaleY;
52
+ (object as Image).cropX = preserveAspectRatioOptions.cropX;
53
+ (object as Image).cropY = preserveAspectRatioOptions.cropY;
54
+ center.x += preserveAspectRatioOptions.offsetLeft;
55
+ center.y += preserveAspectRatioOptions.offsetTop;
56
+ object.width = preserveAspectRatioOptions.width;
57
+ object.height = preserveAspectRatioOptions.height;
58
+ }
59
+ object.setPositionByOrigin(center, 'center', 'center');
60
+ };
@@ -0,0 +1,78 @@
1
+ import type { ActiveSelection } from '../shapes/ActiveSelection';
2
+ import type { Group } from '../shapes/Group';
3
+ import type {
4
+ FabricObject,
5
+ TCachedFabricObject,
6
+ } from '../shapes/Object/Object';
7
+ import type { FabricObjectWithDragSupport } from '../shapes/Object/InteractiveObject';
8
+ import type { TFiller } from '../typedefs';
9
+ import type { Text } from '../shapes/Text/Text';
10
+ import type { Pattern } from '../Pattern';
11
+ import type { IText } from '../shapes/IText/IText';
12
+ import type { Textbox } from '../shapes/Textbox';
13
+
14
+ export const isFiller = (
15
+ filler: TFiller | string | null
16
+ ): filler is TFiller => {
17
+ return !!filler && (filler as TFiller).toLive !== undefined;
18
+ };
19
+
20
+ export const isSerializableFiller = (
21
+ filler: TFiller | string | null
22
+ ): filler is TFiller => {
23
+ return !!filler && typeof (filler as TFiller).toObject === 'function';
24
+ };
25
+
26
+ export const isPattern = (filler: TFiller): filler is Pattern => {
27
+ return (
28
+ !!filler &&
29
+ (filler as Pattern).offsetX !== undefined &&
30
+ (filler as Pattern).source !== undefined
31
+ );
32
+ };
33
+
34
+ export const isCollection = (
35
+ fabricObject?: FabricObject
36
+ ): fabricObject is Group | ActiveSelection => {
37
+ return !!fabricObject && Array.isArray((fabricObject as Group)._objects);
38
+ };
39
+
40
+ export const isActiveSelection = (
41
+ fabricObject?: FabricObject
42
+ ): fabricObject is ActiveSelection => {
43
+ return !!fabricObject && fabricObject.isType('ActiveSelection');
44
+ };
45
+
46
+ export const isTextObject = (
47
+ fabricObject?: FabricObject
48
+ ): fabricObject is Text => {
49
+ // we could use instanceof but that would mean pulling in Text code for a simple check
50
+ // @todo discuss what to do and how to do
51
+ return !!fabricObject && fabricObject.isType('Text', 'IText', 'Textbox');
52
+ };
53
+
54
+ export const isInteractiveTextObject = (
55
+ fabricObject?: FabricObject
56
+ ): fabricObject is IText | Textbox => {
57
+ // we could use instanceof but that would mean pulling in Text code for a simple check
58
+ // @todo discuss what to do and how to do
59
+ return !!fabricObject && fabricObject.isType('IText', 'Textbox');
60
+ };
61
+
62
+ export const isFabricObjectCached = (
63
+ fabricObject: FabricObject
64
+ ): fabricObject is TCachedFabricObject => {
65
+ return fabricObject.shouldCache() && !!fabricObject._cacheCanvas;
66
+ };
67
+
68
+ export const isFabricObjectWithDragSupport = (
69
+ fabricObject?: FabricObject
70
+ ): fabricObject is FabricObjectWithDragSupport => {
71
+ return (
72
+ !!fabricObject &&
73
+ typeof (fabricObject as FabricObjectWithDragSupport).onDragStart ===
74
+ 'function' &&
75
+ typeof (fabricObject as FabricObjectWithDragSupport).shouldStartDragging ===
76
+ 'function'
77
+ );
78
+ };