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,20 @@
1
+ //@ts-nocheck
2
+ // TODO this file needs to go away, cross browser style support is not fabricjs domain.
3
+
4
+ /**
5
+ * wrapper for setting element's style
6
+ * @param {HTMLElement} element
7
+ * @param {Object | string} styles
8
+ */
9
+ export function setStyle(element, styles) {
10
+ const elementStyle = element.style;
11
+ if (!elementStyle) {
12
+ return;
13
+ } else if (typeof styles === 'string') {
14
+ element.style.cssText += ';' + styles;
15
+ } else {
16
+ Object.entries(styles).forEach(([property, value]) =>
17
+ elementStyle.setProperty(property, value)
18
+ );
19
+ }
20
+ }
@@ -0,0 +1,15 @@
1
+ import { BasicTransformEvent, TModificationEvents } from '../EventTypeDefs';
2
+
3
+ export const fireEvent = (
4
+ eventName: TModificationEvents,
5
+ options: BasicTransformEvent
6
+ ) => {
7
+ const {
8
+ transform: { target },
9
+ } = options;
10
+ target.canvas?.fire(`object:${eventName}`, {
11
+ ...options,
12
+ target,
13
+ });
14
+ target.fire(eventName, options);
15
+ };
@@ -0,0 +1,102 @@
1
+ export { cos } from './misc/cos';
2
+ export { sin } from './misc/sin';
3
+ export {
4
+ rotateVector,
5
+ createVector,
6
+ calcAngleBetweenVectors,
7
+ getUnitVector,
8
+ getBisector,
9
+ } from './misc/vectors';
10
+ export {
11
+ degreesToRadians,
12
+ radiansToDegrees,
13
+ } from './misc/radiansDegreesConversion';
14
+ export { rotatePoint } from './misc/rotatePoint';
15
+ export { projectStrokeOnPoints } from './misc/projectStroke';
16
+ export {
17
+ transformPoint,
18
+ invertTransform,
19
+ composeMatrix,
20
+ qrDecompose,
21
+ calcDimensionsMatrix,
22
+ calcRotateMatrix,
23
+ multiplyTransformMatrices,
24
+ isIdentityMatrix,
25
+ } from './misc/matrix';
26
+ export {
27
+ stylesFromArray,
28
+ stylesToArray,
29
+ hasStyleChanged,
30
+ } from './misc/textStyles';
31
+ export {
32
+ createCanvasElement,
33
+ createImage,
34
+ copyCanvasElement,
35
+ toDataURL,
36
+ } from './misc/dom';
37
+ export { toFixed } from './misc/toFixed';
38
+ export {
39
+ matrixToSVG,
40
+ parsePreserveAspectRatioAttribute,
41
+ parseUnit,
42
+ getSvgAttributes,
43
+ } from './misc/svgParsing';
44
+ export { groupSVGElements } from './misc/groupSVGElements';
45
+ export { findScaleToFit, findScaleToCover } from './misc/findScaleTo';
46
+ export { capValue } from './misc/capValue';
47
+ export {
48
+ saveObjectTransform,
49
+ resetObjectTransform,
50
+ addTransformToObject,
51
+ applyTransformToObject,
52
+ removeTransformFromObject,
53
+ sizeAfterTransform,
54
+ } from './misc/objectTransforms';
55
+ export { makeBoundingBoxFromPoints } from './misc/boundingBoxFromPoints';
56
+ export {
57
+ calcPlaneChangeMatrix,
58
+ sendPointToPlane,
59
+ transformPointRelativeToCanvas,
60
+ sendObjectToPlane,
61
+ } from './misc/planeChange';
62
+ export * as string from './lang_string';
63
+ export {
64
+ loadImage,
65
+ enlivenObjects,
66
+ enlivenObjectEnlivables,
67
+ } from './misc/objectEnlive';
68
+ export { pick } from './misc/pick';
69
+ export {
70
+ joinPath,
71
+ parsePath,
72
+ makePathSimpler,
73
+ getSmoothPathFromPoints,
74
+ getPathSegmentsInfo,
75
+ getBoundsOfCurve,
76
+ getPointOnPath,
77
+ transformPath,
78
+ getRegularPolygonPath,
79
+ } from './path';
80
+ export { setStyle } from './dom_style';
81
+ export { isTouchEvent, getPointer } from './dom_event';
82
+ export {
83
+ // getScrollLeftTop,
84
+ getElementOffset,
85
+ makeElementUnselectable,
86
+ makeElementSelectable,
87
+ } from './dom_misc';
88
+ export { isTransparent } from './misc/isTransparent';
89
+ export { mergeClipPaths } from './misc/mergeClipPaths';
90
+ export { animate, animateColor } from './animation/animate';
91
+ export * as ease from './animation/easing';
92
+ export {
93
+ requestAnimFrame,
94
+ cancelAnimFrame,
95
+ } from './animation/AnimationFrameProvider';
96
+ export { removeFromArray } from './internals/removeFromArray';
97
+ export { getRandomInt } from './internals/getRandomInt';
98
+ export { wrapElement } from './dom_misc';
99
+ export { request } from './dom_request';
100
+
101
+ // for test compatibility. We don't want to export it
102
+ export { removeTransformMatrixForSvgParsing } from './transform_matrix_removal';
@@ -0,0 +1,2 @@
1
+ export const cloneDeep = <T extends object>(object: T): T =>
2
+ JSON.parse(JSON.stringify(object));
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Returns random number between 2 specified ones.
3
+ * @param {Number} min lower limit
4
+ * @param {Number} max upper limit
5
+ * @return {Number} random value (between min and max)
6
+ */
7
+ export const getRandomInt = (min: number, max: number): number =>
8
+ Math.floor(Math.random() * (max - min + 1)) + min;
@@ -0,0 +1,9 @@
1
+ /**
2
+ *
3
+ * @param value value to check if NaN
4
+ * @param [valueIfNaN]
5
+ * @returns `fallback` is `value is NaN
6
+ */
7
+ export const ifNaN = (value: number, valueIfNaN?: number) => {
8
+ return isNaN(value) && typeof valueIfNaN === 'number' ? valueIfNaN : value;
9
+ };
@@ -0,0 +1,3 @@
1
+ export { getRandomInt } from './getRandomInt';
2
+ export { ifNaN } from './ifNaN';
3
+ export { removeFromArray } from './removeFromArray';
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Removes value from an array.
3
+ * Presence of value (and its position in an array) is determined via `Array.prototype.indexOf`
4
+ * @param {Array} array
5
+ * @param {*} value
6
+ * @return {Array} original array
7
+ */
8
+ export const removeFromArray = <T>(array: T[], value: T): T[] => {
9
+ const idx = array.indexOf(value);
10
+ if (idx !== -1) {
11
+ array.splice(idx, 1);
12
+ }
13
+ return array;
14
+ };
@@ -0,0 +1,3 @@
1
+ let id = 0;
2
+
3
+ export const uid = () => id++;
@@ -0,0 +1,79 @@
1
+ /**
2
+ * Capitalizes a string
3
+ * @param {String} string String to capitalize
4
+ * @param {Boolean} [firstLetterOnly] If true only first letter is capitalized
5
+ * and other letters stay untouched, if false first letter is capitalized
6
+ * and other letters are converted to lowercase.
7
+ * @return {String} Capitalized version of a string
8
+ */
9
+ export const capitalize = (string: string, firstLetterOnly = false): string =>
10
+ `${string.charAt(0).toUpperCase()}${
11
+ firstLetterOnly ? string.slice(1) : string.slice(1).toLowerCase()
12
+ }`;
13
+
14
+ /**
15
+ * Escapes XML in a string
16
+ * @param {String} string String to escape
17
+ * @return {String} Escaped version of a string
18
+ */
19
+ export const escapeXml = (string: string): string =>
20
+ string
21
+ .replace(/&/g, '&amp;')
22
+ .replace(/"/g, '&quot;')
23
+ .replace(/'/g, '&apos;')
24
+ .replace(/</g, '&lt;')
25
+ .replace(/>/g, '&gt;');
26
+
27
+ /**
28
+ * Divide a string in the user perceived single units
29
+ * @param {String} textstring String to escape
30
+ * @return {Array} array containing the graphemes
31
+ */
32
+ export const graphemeSplit = (textstring: string): string[] => {
33
+ const graphemes = [];
34
+ for (let i = 0, chr; i < textstring.length; i++) {
35
+ if ((chr = getWholeChar(textstring, i)) === false) {
36
+ continue;
37
+ }
38
+ graphemes.push(chr as string);
39
+ }
40
+ return graphemes;
41
+ };
42
+
43
+ // taken from mdn in the charAt doc page.
44
+ const getWholeChar = (str: string, i: number): string | boolean => {
45
+ const code = str.charCodeAt(i);
46
+ if (isNaN(code)) {
47
+ return ''; // Position not found
48
+ }
49
+ if (code < 0xd800 || code > 0xdfff) {
50
+ return str.charAt(i);
51
+ }
52
+
53
+ // High surrogate (could change last hex to 0xDB7F to treat high private
54
+ // surrogates as single characters)
55
+ if (0xd800 <= code && code <= 0xdbff) {
56
+ if (str.length <= i + 1) {
57
+ throw 'High surrogate without following low surrogate';
58
+ }
59
+ const next = str.charCodeAt(i + 1);
60
+ if (0xdc00 > next || next > 0xdfff) {
61
+ throw 'High surrogate without following low surrogate';
62
+ }
63
+ return str.charAt(i) + str.charAt(i + 1);
64
+ }
65
+ // Low surrogate (0xDC00 <= code && code <= 0xDFFF)
66
+ if (i === 0) {
67
+ throw 'Low surrogate without preceding high surrogate';
68
+ }
69
+ const prev = str.charCodeAt(i - 1);
70
+
71
+ // (could change last hex to 0xDB7F to treat high private
72
+ // surrogates as single characters)
73
+ if (0xd800 > prev || prev > 0xdbff) {
74
+ throw 'Low surrogate without preceding high surrogate';
75
+ }
76
+ // We can pass over low surrogates now as the second component
77
+ // in a pair which we have already processed
78
+ return false;
79
+ };
@@ -0,0 +1,37 @@
1
+ import { XY, Point } from '../../Point';
2
+ import { TBBox } from '../../typedefs';
3
+
4
+ /**
5
+ * Calculates bounding box (left, top, width, height) from given `points`
6
+ * @param {XY[]} points
7
+ * @return {Object} Object with left, top, width, height properties
8
+ */
9
+ export const makeBoundingBoxFromPoints = (points: XY[]): TBBox => {
10
+ if (points.length === 0) {
11
+ return {
12
+ left: 0,
13
+ top: 0,
14
+ width: 0,
15
+ height: 0,
16
+ };
17
+ }
18
+
19
+ const { min, max } = points.reduce(
20
+ ({ min, max }, curr) => {
21
+ return {
22
+ min: min.min(curr),
23
+ max: max.max(curr),
24
+ };
25
+ },
26
+ { min: new Point(points[0]), max: new Point(points[0]) }
27
+ );
28
+
29
+ const size = max.subtract(min);
30
+
31
+ return {
32
+ left: min.x,
33
+ top: min.y,
34
+ width: size.x,
35
+ height: size.y,
36
+ };
37
+ };
@@ -0,0 +1,2 @@
1
+ export const capValue = (min: number, value: number, max: number) =>
2
+ Math.max(min, Math.min(value, max));
@@ -0,0 +1,24 @@
1
+ import type { TRadian } from '../../typedefs';
2
+ import { halfPI } from '../../constants';
3
+
4
+ /**
5
+ * Calculate the cos of an angle, avoiding returning floats for known results
6
+ * This function is here just to avoid getting 0.999999999999999 when dealing
7
+ * with numbers that are really 1 or 0.
8
+ * @param {TRadian} angle the angle
9
+ * @return {Number} the cosin value for angle.
10
+ */
11
+ export const cos = (angle: TRadian): number => {
12
+ if (angle === 0) {
13
+ return 1;
14
+ }
15
+ const angleSlice = Math.abs(angle) / halfPI;
16
+ switch (angleSlice) {
17
+ case 1:
18
+ case 3:
19
+ return 0;
20
+ case 2:
21
+ return -1;
22
+ }
23
+ return Math.cos(angle);
24
+ };
@@ -0,0 +1,50 @@
1
+ import { getDocument } from '../../env';
2
+ import { ImageFormat } from '../../typedefs';
3
+ /**
4
+ * Creates canvas element
5
+ * @return {CanvasElement} initialized canvas element
6
+ */
7
+ export const createCanvasElement = (): HTMLCanvasElement =>
8
+ getDocument().createElement('canvas');
9
+
10
+ /**
11
+ * Creates image element (works on client and node)
12
+ * @return {HTMLImageElement} HTML image element
13
+ */
14
+ export const createImage = (): HTMLImageElement =>
15
+ getDocument().createElement('img');
16
+
17
+ /**
18
+ * Creates a canvas element that is a copy of another and is also painted
19
+ * @param {CanvasElement} canvas to copy size and content of
20
+ * @return {CanvasElement} initialized canvas element
21
+ */
22
+ export const copyCanvasElement = (
23
+ canvas: HTMLCanvasElement
24
+ ): HTMLCanvasElement => {
25
+ const newCanvas = createCanvasElement();
26
+ newCanvas.width = canvas.width;
27
+ newCanvas.height = canvas.height;
28
+ newCanvas.getContext('2d')?.drawImage(canvas, 0, 0);
29
+ return newCanvas;
30
+ };
31
+
32
+ /**
33
+ * since 2.6.0 moved from canvas instance to utility.
34
+ * possibly useless
35
+ * @param {CanvasElement} canvasEl to copy size and content of
36
+ * @param {String} format 'jpeg' or 'png', in some browsers 'webp' is ok too
37
+ * @param {Number} quality <= 1 and > 0
38
+ * @return {String} data url
39
+ */
40
+ export const toDataURL = (
41
+ canvasEl: HTMLCanvasElement,
42
+ format: ImageFormat,
43
+ quality: number
44
+ ) => canvasEl.toDataURL(`image/${format}`, quality);
45
+
46
+ export const isHTMLCanvas = (
47
+ canvas: HTMLCanvasElement | string
48
+ ): canvas is HTMLCanvasElement => {
49
+ return !!canvas && (canvas as HTMLCanvasElement).getContext !== undefined;
50
+ };
@@ -0,0 +1,44 @@
1
+ export interface IWithDimensions {
2
+ /**
3
+ * natural unscaled width of the object
4
+ */
5
+ width: number;
6
+ /**
7
+ * natural unscaled height of the object
8
+ */
9
+ height: number;
10
+ }
11
+
12
+ /**
13
+ * Finds the scale for the object source to fit inside the object destination,
14
+ * keeping aspect ratio intact.
15
+ * respect the total allowed area for the cache.
16
+ * @param {IWithDimensions} source
17
+ * @param {IWithDimensions} destination
18
+ * @return {Number} scale factor to apply to source to fit into destination
19
+ */
20
+ export const findScaleToFit = (
21
+ source: IWithDimensions,
22
+ destination: IWithDimensions
23
+ ) =>
24
+ Math.min(
25
+ destination.width / source.width,
26
+ destination.height / source.height
27
+ );
28
+
29
+ /**
30
+ * Finds the scale for the object source to cover entirely the object destination,
31
+ * keeping aspect ratio intact.
32
+ * respect the total allowed area for the cache.
33
+ * @param {IWithDimensions} source
34
+ * @param {IWithDimensions} destination
35
+ * @return {Number} scale factor to apply to source to cover destination
36
+ */
37
+ export const findScaleToCover = (
38
+ source: IWithDimensions,
39
+ destination: IWithDimensions
40
+ ) =>
41
+ Math.max(
42
+ destination.width / source.width,
43
+ destination.height / source.height
44
+ );
@@ -0,0 +1,15 @@
1
+ import type { FabricObject } from '../../shapes/Object/FabricObject';
2
+ import { Group } from '../../shapes/Group';
3
+
4
+ /**
5
+ * Groups SVG elements (usually those retrieved from SVG document)
6
+ * @static
7
+ * @param {FabricObject[]} elements FabricObject(s) parsed from svg, to group
8
+ * @return {FabricObject | Group}
9
+ */
10
+ export const groupSVGElements = (elements: FabricObject[]) => {
11
+ if (elements && elements.length === 1) {
12
+ return elements[0];
13
+ }
14
+ return new Group(elements);
15
+ };
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Returns true if context has transparent pixel
3
+ * at specified location (taking tolerance into account)
4
+ * @param {CanvasRenderingContext2D} ctx context
5
+ * @param {Number} x x coordinate in canvasElementCoordinate, not fabric space. integer
6
+ * @param {Number} y y coordinate in canvasElementCoordinate, not fabric space. integer
7
+ * @param {Number} tolerance Tolerance pixels around the point, not alpha tolerance, integer
8
+ * @return {boolean} true if transparent
9
+ */
10
+ export const isTransparent = (
11
+ ctx: CanvasRenderingContext2D,
12
+ x: number,
13
+ y: number,
14
+ tolerance: number
15
+ ): boolean => {
16
+ tolerance = Math.round(tolerance);
17
+ const size = tolerance * 2 + 1;
18
+ const { data } = ctx.getImageData(x - tolerance, y - tolerance, size, size);
19
+
20
+ // Split image data - for tolerance > 1, pixelDataSize = 4;
21
+ for (let i = 3; i < data.length; i += 4) {
22
+ const alphaChannel = data[i];
23
+ if (alphaChannel > 0) {
24
+ return false;
25
+ }
26
+ }
27
+ return true;
28
+ };
@@ -0,0 +1,207 @@
1
+ import { iMatrix } from '../../constants';
2
+ import { XY, Point } from '../../Point';
3
+ import { TDegree, TMat2D } from '../../typedefs';
4
+ import { cos } from './cos';
5
+ import { degreesToRadians, radiansToDegrees } from './radiansDegreesConversion';
6
+ import { sin } from './sin';
7
+
8
+ type TRotateMatrixArgs = {
9
+ angle?: TDegree;
10
+ };
11
+
12
+ type TTranslateMatrixArgs = {
13
+ translateX?: number;
14
+ translateY?: number;
15
+ };
16
+
17
+ export type TScaleMatrixArgs = {
18
+ scaleX?: number;
19
+ scaleY?: number;
20
+ flipX?: boolean;
21
+ flipY?: boolean;
22
+ skewX?: TDegree;
23
+ skewY?: TDegree;
24
+ };
25
+
26
+ export type TComposeMatrixArgs = TTranslateMatrixArgs &
27
+ TRotateMatrixArgs &
28
+ TScaleMatrixArgs;
29
+
30
+ export type TQrDecomposeOut = Required<
31
+ Omit<TComposeMatrixArgs, 'flipX' | 'flipY'>
32
+ >;
33
+
34
+ export const isIdentityMatrix = (mat: TMat2D) =>
35
+ mat.every((value, index) => value === iMatrix[index]);
36
+
37
+ /**
38
+ * Apply transform t to point p
39
+ * @param {Point | XY} p The point to transform
40
+ * @param {Array} t The transform
41
+ * @param {Boolean} [ignoreOffset] Indicates that the offset should not be applied
42
+ * @return {Point} The transformed point
43
+ */
44
+ export const transformPoint = (
45
+ p: XY,
46
+ t: TMat2D,
47
+ ignoreOffset?: boolean
48
+ ): Point => new Point(p).transform(t, ignoreOffset);
49
+
50
+ /**
51
+ * Invert transformation t
52
+ * @param {Array} t The transform
53
+ * @return {Array} The inverted transform
54
+ */
55
+ export const invertTransform = (t: TMat2D): TMat2D => {
56
+ const a = 1 / (t[0] * t[3] - t[1] * t[2]),
57
+ r = [a * t[3], -a * t[1], -a * t[2], a * t[0], 0, 0] as TMat2D,
58
+ { x, y } = transformPoint(new Point(t[4], t[5]), r, true);
59
+ r[4] = -x;
60
+ r[5] = -y;
61
+ return r;
62
+ };
63
+
64
+ /**
65
+ * Multiply matrix A by matrix B to nest transformations
66
+ * @param {TMat2D} a First transformMatrix
67
+ * @param {TMat2D} b Second transformMatrix
68
+ * @param {Boolean} is2x2 flag to multiply matrices as 2x2 matrices
69
+ * @return {TMat2D} The product of the two transform matrices
70
+ */
71
+ export const multiplyTransformMatrices = (
72
+ a: TMat2D,
73
+ b: TMat2D,
74
+ is2x2?: boolean
75
+ ): TMat2D =>
76
+ [
77
+ a[0] * b[0] + a[2] * b[1],
78
+ a[1] * b[0] + a[3] * b[1],
79
+ a[0] * b[2] + a[2] * b[3],
80
+ a[1] * b[2] + a[3] * b[3],
81
+ is2x2 ? 0 : a[0] * b[4] + a[2] * b[5] + a[4],
82
+ is2x2 ? 0 : a[1] * b[4] + a[3] * b[5] + a[5],
83
+ ] as TMat2D;
84
+
85
+ /**
86
+ * Decomposes standard 2x3 matrix into transform components
87
+ * @param {TMat2D} a transformMatrix
88
+ * @return {Object} Components of transform
89
+ */
90
+ export const qrDecompose = (a: TMat2D): TQrDecomposeOut => {
91
+ const angle = Math.atan2(a[1], a[0]),
92
+ denom = Math.pow(a[0], 2) + Math.pow(a[1], 2),
93
+ scaleX = Math.sqrt(denom),
94
+ scaleY = (a[0] * a[3] - a[2] * a[1]) / scaleX,
95
+ skewX = Math.atan2(a[0] * a[2] + a[1] * a[3], denom);
96
+ return {
97
+ angle: radiansToDegrees(angle),
98
+ scaleX,
99
+ scaleY,
100
+ skewX: radiansToDegrees(skewX),
101
+ skewY: 0 as TDegree,
102
+ translateX: a[4] || 0,
103
+ translateY: a[5] || 0,
104
+ };
105
+ };
106
+
107
+ /**
108
+ * Returns a transform matrix starting from an object of the same kind of
109
+ * the one returned from qrDecompose, useful also if you want to calculate some
110
+ * transformations from an object that is not enlived yet
111
+ * @param {Object} options
112
+ * @param {Number} [options.angle] angle in degrees
113
+ * @return {TMat2D} transform matrix
114
+ */
115
+ export const calcRotateMatrix = ({ angle }: TRotateMatrixArgs): TMat2D => {
116
+ if (!angle) {
117
+ return iMatrix;
118
+ }
119
+ const theta = degreesToRadians(angle),
120
+ cosin = cos(theta),
121
+ sinus = sin(theta);
122
+ return [cosin, sinus, -sinus, cosin, 0, 0];
123
+ };
124
+
125
+ /**
126
+ * Returns a transform matrix starting from an object of the same kind of
127
+ * the one returned from qrDecompose, useful also if you want to calculate some
128
+ * transformations from an object that is not enlived yet.
129
+ * is called DimensionsTransformMatrix because those properties are the one that influence
130
+ * the size of the resulting box of the object.
131
+ * @param {Object} options
132
+ * @param {Number} [options.scaleX]
133
+ * @param {Number} [options.scaleY]
134
+ * @param {Boolean} [options.flipX]
135
+ * @param {Boolean} [options.flipY]
136
+ * @param {Number} [options.skewX]
137
+ * @param {Number} [options.skewY]
138
+ * @return {Number[]} transform matrix
139
+ */
140
+ export const calcDimensionsMatrix = ({
141
+ scaleX = 1,
142
+ scaleY = 1,
143
+ flipX = false,
144
+ flipY = false,
145
+ skewX = 0 as TDegree,
146
+ skewY = 0 as TDegree,
147
+ }: TScaleMatrixArgs) => {
148
+ let scaleMatrix = iMatrix;
149
+ if (scaleX !== 1 || scaleY !== 1 || flipX || flipY) {
150
+ scaleMatrix = [
151
+ flipX ? -scaleX : scaleX,
152
+ 0,
153
+ 0,
154
+ flipY ? -scaleY : scaleY,
155
+ 0,
156
+ 0,
157
+ ] as TMat2D;
158
+ }
159
+ if (skewX) {
160
+ scaleMatrix = multiplyTransformMatrices(
161
+ scaleMatrix,
162
+ [1, 0, Math.tan(degreesToRadians(skewX)), 1] as unknown as TMat2D,
163
+ true
164
+ );
165
+ }
166
+ if (skewY) {
167
+ scaleMatrix = multiplyTransformMatrices(
168
+ scaleMatrix,
169
+ [1, Math.tan(degreesToRadians(skewY)), 0, 1] as unknown as TMat2D,
170
+ true
171
+ );
172
+ }
173
+ return scaleMatrix;
174
+ };
175
+
176
+ /**
177
+ * Returns a transform matrix starting from an object of the same kind of
178
+ * the one returned from qrDecompose, useful also if you want to calculate some
179
+ * transformations from an object that is not enlived yet
180
+ * @param {Object} options
181
+ * @param {Number} [options.angle]
182
+ * @param {Number} [options.scaleX]
183
+ * @param {Number} [options.scaleY]
184
+ * @param {Boolean} [options.flipX]
185
+ * @param {Boolean} [options.flipY]
186
+ * @param {Number} [options.skewX]
187
+ * @param {Number} [options.skewY]
188
+ * @param {Number} [options.translateX]
189
+ * @param {Number} [options.translateY]
190
+ * @return {Number[]} transform matrix
191
+ */
192
+ export const composeMatrix = ({
193
+ translateX = 0,
194
+ translateY = 0,
195
+ angle = 0 as TDegree,
196
+ ...otherOptions
197
+ }: TComposeMatrixArgs): TMat2D => {
198
+ let matrix = [1, 0, 0, 1, translateX, translateY] as TMat2D;
199
+ if (angle) {
200
+ matrix = multiplyTransformMatrices(matrix, calcRotateMatrix({ angle }));
201
+ }
202
+ const scaleMatrix = calcDimensionsMatrix(otherOptions);
203
+ if (scaleMatrix !== iMatrix) {
204
+ matrix = multiplyTransformMatrices(matrix, scaleMatrix);
205
+ }
206
+ return matrix;
207
+ };