fabric 5.3.0 → 6.0.0-beta1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (533) hide show
  1. package/.babelrc +11 -0
  2. package/.babelrcAlt +19 -0
  3. package/.browserslistrc +5 -0
  4. package/.eslintrc.js +43 -0
  5. package/.eslintrc.json +38 -46
  6. package/.eslintrc_tests +12 -0
  7. package/.gitattributes +2 -0
  8. package/.prettierignore +16 -0
  9. package/.prettierrc +4 -0
  10. package/CHANGELOG.md +491 -189
  11. package/CONTRIBUTING.md +226 -58
  12. package/README.md +188 -239
  13. package/bower.json +1 -3
  14. package/dist/fabric.d.ts +1021 -0
  15. package/dist/index.cjs +28027 -0
  16. package/dist/index.cjs.map +1 -0
  17. package/dist/index.d.ts +2 -0
  18. package/dist/index.min.js +1 -0
  19. package/dist/index.mjs +27964 -0
  20. package/dist/index.mjs.map +1 -0
  21. package/dist/index.node.cjs +28092 -0
  22. package/dist/index.node.cjs.map +1 -0
  23. package/dist/index.node.d.ts +15 -0
  24. package/dist/index.node.mjs +28035 -0
  25. package/dist/index.node.mjs.map +1 -0
  26. package/dist/src/Collection.d.ts +126 -0
  27. package/dist/src/CommonMethods.d.ts +32 -0
  28. package/dist/src/EventTypeDefs.d.ts +226 -0
  29. package/dist/src/Intersection.d.ts +100 -0
  30. package/dist/src/Observable.d.ts +54 -0
  31. package/dist/src/Pattern.d.ts +104 -0
  32. package/dist/src/Point.d.ts +232 -0
  33. package/dist/src/Shadow.d.ts +87 -0
  34. package/dist/src/brushes/BaseBrush.d.ts +105 -0
  35. package/dist/src/brushes/CircleBrush.d.ts +49 -0
  36. package/dist/src/brushes/PatternBrush.d.ts +23 -0
  37. package/dist/src/brushes/PencilBrush.d.ts +92 -0
  38. package/dist/src/brushes/SprayBrush.d.ts +79 -0
  39. package/dist/src/cache.d.ts +46 -0
  40. package/dist/src/canvas/Canvas.d.ts +567 -0
  41. package/dist/src/canvas/SelectableCanvas.d.ts +723 -0
  42. package/dist/src/canvas/StaticCanvas.d.ts +751 -0
  43. package/dist/src/canvas/TextEditingManager.d.ts +17 -0
  44. package/dist/src/canvas/canvas_gestures.mixin.d.ts +2 -0
  45. package/dist/src/color/Color.d.ts +174 -0
  46. package/dist/src/color/color_map.d.ts +155 -0
  47. package/dist/src/color/constants.d.ts +22 -0
  48. package/dist/src/color/util.d.ts +12 -0
  49. package/dist/src/config.d.ts +115 -0
  50. package/dist/src/constants.d.ts +14 -0
  51. package/dist/src/controls/Control.d.ts +228 -0
  52. package/dist/src/controls/changeWidth.d.ts +13 -0
  53. package/dist/src/controls/controls.render.d.ts +29 -0
  54. package/dist/src/controls/default_controls.d.ts +50 -0
  55. package/dist/src/controls/drag.d.ts +12 -0
  56. package/dist/src/controls/polyControl.d.ts +5 -0
  57. package/dist/src/controls/rotate.d.ts +12 -0
  58. package/dist/src/controls/scale.d.ts +47 -0
  59. package/dist/src/controls/scaleSkew.d.ts +39 -0
  60. package/dist/src/controls/skew.d.ts +33 -0
  61. package/dist/src/controls/util.d.ts +41 -0
  62. package/dist/src/controls/wrapWithFireEvent.d.ts +8 -0
  63. package/dist/src/controls/wrapWithFixedAnchor.d.ts +9 -0
  64. package/dist/src/env/browser.d.ts +3 -0
  65. package/dist/src/env/index.d.ts +7 -0
  66. package/dist/src/env/node.d.ts +3 -0
  67. package/dist/src/env/types.d.ts +15 -0
  68. package/dist/src/filters/BaseFilter.d.ts +156 -0
  69. package/dist/src/filters/BlendColor.d.ts +80 -0
  70. package/dist/src/filters/BlendImage.d.ts +90 -0
  71. package/dist/src/filters/Blur.d.ts +50 -0
  72. package/dist/src/filters/Boilerplate.d.ts +46 -0
  73. package/dist/src/filters/Brightness.d.ts +46 -0
  74. package/dist/src/filters/Canvas2dFilterBackend.d.ts +27 -0
  75. package/dist/src/filters/ColorMatrix.d.ts +62 -0
  76. package/dist/src/filters/ColorMatrixFilters.d.ts +1169 -0
  77. package/dist/src/filters/Composed.d.ts +47 -0
  78. package/dist/src/filters/Contrast.d.ts +44 -0
  79. package/dist/src/filters/Convolute.d.ts +82 -0
  80. package/dist/src/filters/FilterBackend.d.ts +14 -0
  81. package/dist/src/filters/Gamma.d.ts +53 -0
  82. package/dist/src/filters/Grayscale.d.ts +45 -0
  83. package/dist/src/filters/HueRotation.d.ts +24 -0
  84. package/dist/src/filters/Invert.d.ts +54 -0
  85. package/dist/src/filters/Noise.d.ts +53 -0
  86. package/dist/src/filters/Pixelate.d.ts +43 -0
  87. package/dist/src/filters/RemoveColor.d.ts +62 -0
  88. package/dist/src/filters/Resize.d.ts +134 -0
  89. package/dist/src/filters/Saturation.d.ts +47 -0
  90. package/dist/src/filters/Vibrance.d.ts +47 -0
  91. package/dist/src/filters/WebGLFilterBackend.d.ts +126 -0
  92. package/dist/src/filters/WebGLProbe.d.ts +28 -0
  93. package/dist/src/filters/typedefs.d.ts +49 -0
  94. package/dist/src/gradient/Gradient.d.ts +149 -0
  95. package/dist/src/gradient/constants.d.ts +15 -0
  96. package/dist/src/gradient/parser/index.d.ts +4 -0
  97. package/dist/src/gradient/parser/misc.d.ts +4 -0
  98. package/dist/src/gradient/parser/parseColorStops.d.ts +6 -0
  99. package/dist/src/gradient/parser/parseCoords.d.ts +17 -0
  100. package/dist/src/gradient/typedefs.d.ts +93 -0
  101. package/dist/src/mixins/eraser_brush.mixin.d.ts +2 -0
  102. package/dist/src/mixins/stateful.mixin.d.ts +18 -0
  103. package/dist/src/parkinglot/canvas_animation.mixin.d.ts +2 -0
  104. package/dist/src/parkinglot/straighten.d.ts +2 -0
  105. package/dist/src/parser/applyViewboxTransform.d.ts +5 -0
  106. package/dist/src/parser/attributes.d.ts +6 -0
  107. package/dist/src/parser/constants.d.ts +54 -0
  108. package/dist/src/parser/doesSomeParentMatch.d.ts +2 -0
  109. package/dist/src/parser/elementById.d.ts +6 -0
  110. package/dist/src/parser/elementMatchesRule.d.ts +5 -0
  111. package/dist/src/parser/elements_parser.d.ts +3 -0
  112. package/dist/src/parser/getCSSRules.d.ts +7 -0
  113. package/dist/src/parser/getGlobalStylesForElement.d.ts +5 -0
  114. package/dist/src/parser/getGradientDefs.d.ts +7 -0
  115. package/dist/src/parser/getMultipleNodes.d.ts +2 -0
  116. package/dist/src/parser/getSvgRegex.d.ts +2 -0
  117. package/dist/src/parser/hasAncestorWithNodeName.d.ts +2 -0
  118. package/dist/src/parser/loadSVGFromString.d.ts +12 -0
  119. package/dist/src/parser/loadSVGFromURL.d.ts +13 -0
  120. package/dist/src/parser/normalizeAttr.d.ts +2 -0
  121. package/dist/src/parser/normalizeValue.d.ts +2 -0
  122. package/dist/src/parser/parseAttributes.d.ts +9 -0
  123. package/dist/src/parser/parseElements.d.ts +11 -0
  124. package/dist/src/parser/parseFontDeclaration.d.ts +10 -0
  125. package/dist/src/parser/parsePointsAttribute.d.ts +12 -0
  126. package/dist/src/parser/parseSVGDocument.d.ts +15 -0
  127. package/dist/src/parser/parseStyleAttribute.d.ts +9 -0
  128. package/dist/src/parser/parseStyleObject.d.ts +2 -0
  129. package/dist/src/parser/parseStyleString.d.ts +2 -0
  130. package/dist/src/parser/parseTransformAttribute.d.ts +10 -0
  131. package/dist/src/parser/parseUseDirectives.d.ts +2 -0
  132. package/dist/src/parser/percent.d.ts +9 -0
  133. package/dist/src/parser/recursivelyParseGradientsXlink.d.ts +2 -0
  134. package/dist/src/parser/rotateMatrix.d.ts +2 -0
  135. package/dist/src/parser/scaleMatrix.d.ts +2 -0
  136. package/dist/src/parser/selectorMatches.d.ts +2 -0
  137. package/dist/src/parser/setStrokeFillOpacity.d.ts +6 -0
  138. package/dist/src/parser/skewMatrix.d.ts +2 -0
  139. package/dist/src/parser/translateMatrix.d.ts +2 -0
  140. package/dist/src/shapes/ActiveSelection.d.ts +66 -0
  141. package/dist/src/shapes/Circle.d.ts +80 -0
  142. package/dist/src/shapes/Ellipse.d.ts +74 -0
  143. package/dist/src/shapes/Group.d.ts +381 -0
  144. package/dist/src/shapes/IText/DraggableTextDelegate.d.ts +78 -0
  145. package/dist/src/shapes/IText/IText.d.ts +322 -0
  146. package/dist/src/shapes/IText/ITextBehavior.d.ts +285 -0
  147. package/dist/src/shapes/IText/ITextClickBehavior.d.ts +81 -0
  148. package/dist/src/shapes/IText/ITextKeyBehavior.d.ts +193 -0
  149. package/dist/src/shapes/IText/constants.d.ts +13 -0
  150. package/dist/src/shapes/Image.d.ts +283 -0
  151. package/dist/src/shapes/Line.d.ts +117 -0
  152. package/dist/src/shapes/Object/AnimatableObject.d.ts +33 -0
  153. package/dist/src/shapes/Object/FabricObject.d.ts +9 -0
  154. package/dist/src/shapes/Object/FabricObjectSVGExportMixin.d.ts +74 -0
  155. package/dist/src/shapes/Object/InteractiveObject.d.ts +282 -0
  156. package/dist/src/shapes/Object/Object.d.ts +906 -0
  157. package/dist/src/shapes/Object/ObjectGeometry.d.ts +343 -0
  158. package/dist/src/shapes/Object/ObjectOrigin.d.ts +178 -0
  159. package/dist/src/shapes/Object/StackedObject.d.ts +62 -0
  160. package/dist/src/shapes/Object/defaultValues.d.ts +77 -0
  161. package/dist/src/shapes/Path.d.ts +123 -0
  162. package/dist/src/shapes/Polygon.d.ts +7 -0
  163. package/dist/src/shapes/Polyline.d.ts +130 -0
  164. package/dist/src/shapes/Rect.d.ts +62 -0
  165. package/dist/src/shapes/Text/StyledText.d.ts +118 -0
  166. package/dist/src/shapes/Text/Text.d.ts +656 -0
  167. package/dist/src/shapes/Text/TextSVGExportMixin.d.ts +32 -0
  168. package/dist/src/shapes/Textbox.d.ts +170 -0
  169. package/dist/src/shapes/Triangle.d.ts +17 -0
  170. package/dist/src/typedefs.d.ts +93 -0
  171. package/dist/src/util/animation/AnimationBase.d.ts +54 -0
  172. package/dist/src/util/animation/AnimationFrameProvider.d.ts +8 -0
  173. package/dist/src/util/animation/AnimationRegistry.d.ts +29 -0
  174. package/dist/src/util/animation/ArrayAnimation.d.ts +10 -0
  175. package/dist/src/util/animation/ColorAnimation.d.ts +11 -0
  176. package/dist/src/util/animation/ValueAnimation.d.ts +10 -0
  177. package/dist/src/util/animation/animate.d.ts +37 -0
  178. package/dist/src/util/animation/easing.d.ts +130 -0
  179. package/dist/src/util/animation/types.d.ts +87 -0
  180. package/dist/src/util/applyMixins.d.ts +8 -0
  181. package/dist/src/util/class_registry.d.ts +14 -0
  182. package/dist/src/util/dom_event.d.ts +5 -0
  183. package/dist/src/util/dom_misc.d.ts +40 -0
  184. package/dist/src/util/dom_request.d.ts +14 -0
  185. package/dist/src/util/dom_style.d.ts +7 -0
  186. package/dist/src/util/fireEvent.d.ts +3 -0
  187. package/dist/src/util/internals/cloneDeep.d.ts +2 -0
  188. package/dist/src/util/internals/getRandomInt.d.ts +8 -0
  189. package/dist/src/util/internals/ifNaN.d.ts +8 -0
  190. package/dist/src/util/internals/index.d.ts +4 -0
  191. package/dist/src/util/internals/removeFromArray.d.ts +9 -0
  192. package/dist/src/util/internals/uid.d.ts +2 -0
  193. package/dist/src/util/lang_class.d.ts +12 -0
  194. package/dist/src/util/lang_string.d.ts +22 -0
  195. package/dist/src/util/misc/boundingBoxFromPoints.d.ts +9 -0
  196. package/dist/src/util/misc/capValue.d.ts +2 -0
  197. package/dist/src/util/misc/cos.d.ts +10 -0
  198. package/dist/src/util/misc/dom.d.ts +28 -0
  199. package/dist/src/util/misc/findScaleTo.d.ts +29 -0
  200. package/dist/src/util/misc/groupSVGElements.d.ts +9 -0
  201. package/dist/src/util/misc/isTransparent.d.ts +11 -0
  202. package/dist/src/util/misc/matrix.d.ts +92 -0
  203. package/dist/src/util/misc/mergeClipPaths.d.ts +23 -0
  204. package/dist/src/util/misc/objectEnlive.d.ts +56 -0
  205. package/dist/src/util/misc/objectTransforms.d.ts +68 -0
  206. package/dist/src/util/misc/pick.d.ts +8 -0
  207. package/dist/src/util/misc/planeChange.d.ts +84 -0
  208. package/dist/src/util/misc/projectStroke/StrokeLineCapProjections.d.ts +51 -0
  209. package/dist/src/util/misc/projectStroke/StrokeLineJoinProjections.d.ts +81 -0
  210. package/dist/src/util/misc/projectStroke/StrokeProjectionsBase.d.ts +25 -0
  211. package/dist/src/util/misc/projectStroke/index.d.ts +11 -0
  212. package/dist/src/util/misc/projectStroke/types.d.ts +23 -0
  213. package/dist/src/util/misc/radiansDegreesConversion.d.ts +14 -0
  214. package/dist/src/util/misc/resolveOrigin.d.ts +9 -0
  215. package/dist/src/util/misc/rotatePoint.d.ts +12 -0
  216. package/dist/src/util/misc/sin.d.ts +10 -0
  217. package/dist/src/util/misc/svgParsing.d.ts +53 -0
  218. package/dist/src/util/misc/textStyles.d.ts +32 -0
  219. package/dist/src/util/misc/toFixed.d.ts +8 -0
  220. package/dist/src/util/misc/vectors.d.ts +57 -0
  221. package/dist/src/util/path.d.ts +108 -0
  222. package/dist/src/util/transform_matrix_removal.d.ts +14 -0
  223. package/dist/src/util/types.d.ts +19 -0
  224. package/fabric.ts +427 -0
  225. package/index.node.ts +43 -0
  226. package/index.ts +1 -0
  227. package/package.json +90 -39
  228. package/publish.js +0 -26
  229. package/rollup.config.mjs +79 -0
  230. package/rollup.test.config.js +24 -0
  231. package/scripts/build.mjs +50 -0
  232. package/scripts/buildLock.mjs +115 -0
  233. package/scripts/buildReporter.mjs +15 -0
  234. package/scripts/buildStats.mjs +139 -0
  235. package/scripts/dirname.mjs +14 -0
  236. package/scripts/index.mjs +679 -0
  237. package/scripts/transform_files.mjs +504 -0
  238. package/src/Collection.ts +311 -0
  239. package/src/CommonMethods.ts +63 -0
  240. package/src/EventTypeDefs.ts +294 -0
  241. package/src/Intersection.ts +273 -0
  242. package/src/Observable.ts +175 -0
  243. package/src/Pattern.ts +211 -0
  244. package/src/Point.ts +388 -0
  245. package/src/Shadow.ts +215 -0
  246. package/src/brushes/{base_brush.class.js → BaseBrush.ts} +65 -42
  247. package/src/brushes/CircleBrush.ts +145 -0
  248. package/src/brushes/PatternBrush.ts +70 -0
  249. package/src/brushes/PencilBrush.ts +300 -0
  250. package/src/brushes/SprayBrush.ts +219 -0
  251. package/src/cache.ts +89 -0
  252. package/src/canvas/Canvas.ts +1672 -0
  253. package/src/canvas/SelectableCanvas.ts +1636 -0
  254. package/src/canvas/StaticCanvas.ts +1709 -0
  255. package/src/canvas/TextEditingManager.ts +48 -0
  256. package/src/canvas/canvas_gestures.mixin.ts +207 -0
  257. package/src/color/Color.ts +404 -0
  258. package/src/color/color_map.ts +154 -0
  259. package/src/color/constants.ts +26 -0
  260. package/src/color/util.ts +32 -0
  261. package/src/config.ts +159 -0
  262. package/src/constants.ts +19 -0
  263. package/src/controls/Control.ts +377 -0
  264. package/src/controls/changeWidth.ts +52 -0
  265. package/src/controls/controls.render.ts +138 -0
  266. package/src/controls/default_controls.ts +132 -0
  267. package/src/controls/drag.ts +31 -0
  268. package/src/controls/polyControl.ts +135 -0
  269. package/src/controls/rotate.ts +87 -0
  270. package/src/controls/scale.ts +277 -0
  271. package/src/controls/scaleSkew.ts +92 -0
  272. package/src/controls/skew.ts +242 -0
  273. package/src/controls/util.ts +154 -0
  274. package/src/controls/wrapWithFireEvent.ts +25 -0
  275. package/src/controls/wrapWithFixedAnchor.ts +20 -0
  276. package/src/env/browser.ts +28 -0
  277. package/src/env/index.ts +19 -0
  278. package/src/env/node.ts +52 -0
  279. package/src/env/types.ts +15 -0
  280. package/src/filters/{base_filter.class.js → BaseFilter.ts} +201 -149
  281. package/src/filters/BlendColor.ts +258 -0
  282. package/src/filters/BlendImage.ts +254 -0
  283. package/src/filters/Blur.ts +202 -0
  284. package/src/filters/Boilerplate.ts +91 -0
  285. package/src/filters/Brightness.ts +93 -0
  286. package/src/filters/Canvas2dFilterBackend.ts +65 -0
  287. package/src/filters/ColorMatrix.ts +156 -0
  288. package/src/filters/ColorMatrixFilters.ts +106 -0
  289. package/src/filters/Composed.ts +85 -0
  290. package/src/filters/Contrast.ts +94 -0
  291. package/src/filters/Convolute.ts +341 -0
  292. package/src/filters/FilterBackend.ts +32 -0
  293. package/src/filters/Gamma.ts +127 -0
  294. package/src/filters/Grayscale.ts +137 -0
  295. package/src/filters/HueRotation.ts +66 -0
  296. package/src/filters/Invert.ts +117 -0
  297. package/src/filters/Noise.ts +109 -0
  298. package/src/filters/Pixelate.ts +114 -0
  299. package/src/filters/RemoveColor.ts +148 -0
  300. package/src/filters/Resize.ts +540 -0
  301. package/src/filters/Saturation.ts +100 -0
  302. package/src/filters/Vibrance.ts +103 -0
  303. package/src/filters/WebGLFilterBackend.ts +430 -0
  304. package/src/filters/WebGLProbe.ts +62 -0
  305. package/src/filters/typedefs.ts +65 -0
  306. package/src/gradient/Gradient.ts +401 -0
  307. package/src/gradient/constants.ts +12 -0
  308. package/src/gradient/parser/index.ts +3 -0
  309. package/src/gradient/parser/misc.ts +13 -0
  310. package/src/gradient/parser/parseColorStops.ts +55 -0
  311. package/src/gradient/parser/parseCoords.ts +73 -0
  312. package/src/gradient/typedefs.ts +104 -0
  313. package/src/mixins/{eraser_brush.mixin.js → eraser_brush.mixin.ts} +350 -239
  314. package/src/mixins/stateful.mixin.ts +104 -0
  315. package/src/parkinglot/canvas_animation.mixin.ts +121 -0
  316. package/src/parkinglot/straighten.ts +58 -0
  317. package/src/parser/applyViewboxTransform.ts +162 -0
  318. package/src/parser/attributes.ts +25 -0
  319. package/src/parser/constants.ts +118 -0
  320. package/src/parser/doesSomeParentMatch.ts +19 -0
  321. package/src/parser/elementById.ts +23 -0
  322. package/src/parser/elementMatchesRule.ts +19 -0
  323. package/src/parser/elements_parser.ts +191 -0
  324. package/src/parser/getCSSRules.ts +62 -0
  325. package/src/parser/getGlobalStylesForElement.ts +19 -0
  326. package/src/parser/getGradientDefs.ts +32 -0
  327. package/src/parser/getMultipleNodes.ts +15 -0
  328. package/src/parser/getSvgRegex.ts +5 -0
  329. package/src/parser/hasAncestorWithNodeName.ts +14 -0
  330. package/src/parser/loadSVGFromString.ts +26 -0
  331. package/src/parser/loadSVGFromURL.ts +40 -0
  332. package/src/parser/normalizeAttr.ts +10 -0
  333. package/src/parser/normalizeValue.ts +63 -0
  334. package/src/parser/parseAttributes.ts +90 -0
  335. package/src/parser/parseElements.ts +28 -0
  336. package/src/parser/parseFontDeclaration.ts +44 -0
  337. package/src/parser/parsePointsAttribute.ts +36 -0
  338. package/src/parser/parseSVGDocument.ts +106 -0
  339. package/src/parser/parseStyleAttribute.ts +27 -0
  340. package/src/parser/parseStyleObject.ts +15 -0
  341. package/src/parser/parseStyleString.ts +16 -0
  342. package/src/parser/parseTransformAttribute.ts +155 -0
  343. package/src/parser/parseUseDirectives.ts +79 -0
  344. package/src/parser/percent.ts +27 -0
  345. package/src/parser/recursivelyParseGradientsXlink.ts +42 -0
  346. package/src/parser/rotateMatrix.ts +21 -0
  347. package/src/parser/scaleMatrix.ts +9 -0
  348. package/src/parser/selectorMatches.ts +25 -0
  349. package/src/parser/setStrokeFillOpacity.ts +40 -0
  350. package/src/parser/skewMatrix.ts +6 -0
  351. package/src/parser/translateMatrix.ts +8 -0
  352. package/src/shapes/ActiveSelection.ts +157 -0
  353. package/src/shapes/Circle.ts +205 -0
  354. package/src/shapes/Ellipse.ts +154 -0
  355. package/src/shapes/Group.ts +1053 -0
  356. package/src/shapes/IText/DraggableTextDelegate.ts +394 -0
  357. package/src/shapes/IText/IText.ts +666 -0
  358. package/src/shapes/IText/ITextBehavior.ts +1055 -0
  359. package/src/shapes/IText/ITextClickBehavior.ts +321 -0
  360. package/src/shapes/IText/ITextKeyBehavior.ts +683 -0
  361. package/src/shapes/IText/constants.ts +47 -0
  362. package/src/shapes/Image.ts +789 -0
  363. package/src/shapes/Line.ts +329 -0
  364. package/src/shapes/Object/AnimatableObject.ts +106 -0
  365. package/src/shapes/Object/FabricObject.ts +19 -0
  366. package/src/shapes/Object/FabricObjectSVGExportMixin.ts +277 -0
  367. package/src/shapes/Object/InteractiveObject.ts +645 -0
  368. package/src/shapes/Object/Object.ts +1896 -0
  369. package/src/shapes/Object/ObjectGeometry.ts +830 -0
  370. package/src/shapes/Object/ObjectOrigin.ts +354 -0
  371. package/src/shapes/Object/StackedObject.ts +191 -0
  372. package/src/shapes/Object/defaultValues.ts +112 -0
  373. package/src/shapes/Path.ts +395 -0
  374. package/src/shapes/Polygon.ts +19 -0
  375. package/src/shapes/Polyline.ts +333 -0
  376. package/src/shapes/Rect.ts +199 -0
  377. package/src/shapes/Text/StyledText.ts +319 -0
  378. package/src/shapes/Text/Text.ts +1948 -0
  379. package/src/shapes/Text/TextSVGExportMixin.ts +288 -0
  380. package/src/shapes/Textbox.ts +471 -0
  381. package/src/shapes/Triangle.ts +45 -0
  382. package/src/typedefs.ts +119 -0
  383. package/src/util/animation/AnimationBase.ts +166 -0
  384. package/src/util/animation/AnimationFrameProvider.ts +28 -0
  385. package/src/util/animation/AnimationRegistry.ts +58 -0
  386. package/src/util/animation/ArrayAnimation.ts +27 -0
  387. package/src/util/animation/ColorAnimation.ts +74 -0
  388. package/src/util/animation/ValueAnimation.ts +29 -0
  389. package/src/util/animation/animate.ts +74 -0
  390. package/src/util/animation/easing.ts +327 -0
  391. package/src/util/animation/types.ts +136 -0
  392. package/src/util/applyMixins.ts +22 -0
  393. package/src/util/class_registry.ts +54 -0
  394. package/src/util/dom_event.ts +28 -0
  395. package/src/util/dom_misc.ts +138 -0
  396. package/src/util/dom_request.ts +64 -0
  397. package/src/util/dom_style.ts +20 -0
  398. package/src/util/fireEvent.ts +15 -0
  399. package/src/util/internals/cloneDeep.ts +2 -0
  400. package/src/util/internals/getRandomInt.ts +8 -0
  401. package/src/util/internals/ifNaN.ts +9 -0
  402. package/src/util/internals/index.ts +3 -0
  403. package/src/util/internals/removeFromArray.ts +14 -0
  404. package/src/util/internals/uid.ts +3 -0
  405. package/src/util/lang_class.ts +90 -0
  406. package/src/util/lang_string.ts +79 -0
  407. package/src/util/misc/boundingBoxFromPoints.ts +37 -0
  408. package/src/util/misc/capValue.ts +2 -0
  409. package/src/util/misc/cos.ts +24 -0
  410. package/src/util/misc/dom.ts +50 -0
  411. package/src/util/misc/findScaleTo.ts +44 -0
  412. package/src/util/misc/groupSVGElements.ts +15 -0
  413. package/src/util/misc/isTransparent.ts +51 -0
  414. package/src/util/misc/matrix.ts +207 -0
  415. package/src/util/misc/mergeClipPaths.ts +40 -0
  416. package/src/util/misc/objectEnlive.ts +189 -0
  417. package/src/util/misc/objectTransforms.ts +129 -0
  418. package/src/util/misc/pick.ts +17 -0
  419. package/src/util/misc/planeChange.ts +136 -0
  420. package/src/util/misc/projectStroke/StrokeLineCapProjections.ts +112 -0
  421. package/src/util/misc/projectStroke/StrokeLineJoinProjections.ts +231 -0
  422. package/src/util/misc/projectStroke/StrokeProjectionsBase.ts +75 -0
  423. package/src/util/misc/projectStroke/index.ts +53 -0
  424. package/src/util/misc/projectStroke/types.ts +24 -0
  425. package/src/util/misc/radiansDegreesConversion.ts +18 -0
  426. package/src/util/misc/resolveOrigin.ts +22 -0
  427. package/src/util/misc/rotatePoint.ts +15 -0
  428. package/src/util/misc/sin.ts +26 -0
  429. package/src/util/misc/svgParsing.ts +181 -0
  430. package/src/util/misc/textStyles.ts +133 -0
  431. package/src/util/misc/toFixed.ts +8 -0
  432. package/src/util/misc/vectors.ts +82 -0
  433. package/src/util/path.ts +941 -0
  434. package/src/util/transform_matrix_removal.ts +60 -0
  435. package/src/util/types.ts +78 -0
  436. package/tsconfig.json +106 -0
  437. package/HEADER.js +0 -203
  438. package/build.js +0 -287
  439. package/dist/fabric.js +0 -31187
  440. package/dist/fabric.min.js +0 -1
  441. package/old-travis-reference.yml +0 -97
  442. package/src/brushes/circle_brush.class.js +0 -144
  443. package/src/brushes/pattern_brush.class.js +0 -61
  444. package/src/brushes/pencil_brush.class.js +0 -310
  445. package/src/brushes/spray_brush.class.js +0 -219
  446. package/src/canvas.class.js +0 -1312
  447. package/src/color.class.js +0 -636
  448. package/src/control.class.js +0 -339
  449. package/src/controls.actions.js +0 -740
  450. package/src/controls.render.js +0 -99
  451. package/src/elements_parser.js +0 -152
  452. package/src/filters/2d_backend.class.js +0 -65
  453. package/src/filters/blendcolor_filter.class.js +0 -251
  454. package/src/filters/blendimage_filter.class.js +0 -247
  455. package/src/filters/blur_filter.class.js +0 -217
  456. package/src/filters/brightness_filter.class.js +0 -113
  457. package/src/filters/colormatrix_filter.class.js +0 -159
  458. package/src/filters/composed_filter.class.js +0 -72
  459. package/src/filters/contrast_filter.class.js +0 -113
  460. package/src/filters/convolute_filter.class.js +0 -352
  461. package/src/filters/filter_boilerplate.js +0 -111
  462. package/src/filters/filter_generator.js +0 -85
  463. package/src/filters/gamma_filter.class.js +0 -136
  464. package/src/filters/grayscale_filter.class.js +0 -154
  465. package/src/filters/hue_rotation.class.js +0 -107
  466. package/src/filters/invert_filter.class.js +0 -111
  467. package/src/filters/noise_filter.class.js +0 -134
  468. package/src/filters/pixelate_filter.class.js +0 -137
  469. package/src/filters/removecolor_filter.class.js +0 -173
  470. package/src/filters/resize_filter.class.js +0 -490
  471. package/src/filters/saturate_filter.class.js +0 -119
  472. package/src/filters/vibrance_filter.class.js +0 -122
  473. package/src/filters/webgl_backend.class.js +0 -396
  474. package/src/globalFabric.js +0 -4
  475. package/src/gradient.class.js +0 -490
  476. package/src/intersection.class.js +0 -172
  477. package/src/log.js +0 -11
  478. package/src/mixins/animation.mixin.js +0 -231
  479. package/src/mixins/canvas_dataurl_exporter.mixin.js +0 -97
  480. package/src/mixins/canvas_events.mixin.js +0 -974
  481. package/src/mixins/canvas_gestures.mixin.js +0 -149
  482. package/src/mixins/canvas_grouping.mixin.js +0 -177
  483. package/src/mixins/canvas_serialization.mixin.js +0 -228
  484. package/src/mixins/collection.mixin.js +0 -170
  485. package/src/mixins/default_controls.js +0 -114
  486. package/src/mixins/itext.svg_export.js +0 -241
  487. package/src/mixins/itext_behavior.mixin.js +0 -940
  488. package/src/mixins/itext_click_behavior.mixin.js +0 -278
  489. package/src/mixins/itext_key_behavior.mixin.js +0 -694
  490. package/src/mixins/object.svg_export.js +0 -258
  491. package/src/mixins/object_geometry.mixin.js +0 -683
  492. package/src/mixins/object_interactivity.mixin.js +0 -314
  493. package/src/mixins/object_origin.mixin.js +0 -255
  494. package/src/mixins/object_stacking.mixin.js +0 -80
  495. package/src/mixins/object_straightening.mixin.js +0 -80
  496. package/src/mixins/observable.mixin.js +0 -141
  497. package/src/mixins/shared_methods.mixin.js +0 -94
  498. package/src/mixins/stateful.mixin.js +0 -107
  499. package/src/mixins/text_style.mixin.js +0 -324
  500. package/src/parser.js +0 -1090
  501. package/src/pattern.class.js +0 -189
  502. package/src/point.class.js +0 -337
  503. package/src/shadow.class.js +0 -195
  504. package/src/shapes/active_selection.class.js +0 -155
  505. package/src/shapes/circle.class.js +0 -210
  506. package/src/shapes/ellipse.class.js +0 -181
  507. package/src/shapes/group.class.js +0 -593
  508. package/src/shapes/image.class.js +0 -764
  509. package/src/shapes/itext.class.js +0 -526
  510. package/src/shapes/line.class.js +0 -324
  511. package/src/shapes/object.class.js +0 -2008
  512. package/src/shapes/path.class.js +0 -384
  513. package/src/shapes/polygon.class.js +0 -81
  514. package/src/shapes/polyline.class.js +0 -268
  515. package/src/shapes/rect.class.js +0 -187
  516. package/src/shapes/text.class.js +0 -1696
  517. package/src/shapes/textbox.class.js +0 -461
  518. package/src/shapes/triangle.class.js +0 -93
  519. package/src/static_canvas.class.js +0 -1881
  520. package/src/util/anim_ease.js +0 -398
  521. package/src/util/animate.js +0 -254
  522. package/src/util/animate_color.js +0 -74
  523. package/src/util/dom_event.js +0 -50
  524. package/src/util/dom_misc.js +0 -300
  525. package/src/util/dom_request.js +0 -54
  526. package/src/util/dom_style.js +0 -70
  527. package/src/util/lang_array.js +0 -94
  528. package/src/util/lang_class.js +0 -115
  529. package/src/util/lang_object.js +0 -75
  530. package/src/util/lang_string.js +0 -110
  531. package/src/util/misc.js +0 -1330
  532. package/src/util/named_accessors.mixin.js +0 -428
  533. package/src/util/path.js +0 -829
@@ -0,0 +1,242 @@
1
+ import {
2
+ ControlCursorCallback,
3
+ TPointerEvent,
4
+ Transform,
5
+ TransformActionHandler,
6
+ } from '../EventTypeDefs';
7
+ import { resolveOrigin } from '../util/misc/resolveOrigin';
8
+ import { Point } from '../Point';
9
+ import { TAxis, TAxisKey } from '../typedefs';
10
+ import {
11
+ degreesToRadians,
12
+ radiansToDegrees,
13
+ } from '../util/misc/radiansDegreesConversion';
14
+ import {
15
+ findCornerQuadrant,
16
+ getLocalPoint,
17
+ isLocked,
18
+ NOT_ALLOWED_CURSOR,
19
+ } from './util';
20
+ import { wrapWithFireEvent } from './wrapWithFireEvent';
21
+ import { wrapWithFixedAnchor } from './wrapWithFixedAnchor';
22
+
23
+ export type SkewTransform = Transform & { skewingSide: -1 | 1 };
24
+
25
+ const AXIS_KEYS: Record<
26
+ TAxis,
27
+ {
28
+ counterAxis: TAxis;
29
+ scale: TAxisKey<'scale'>;
30
+ skew: TAxisKey<'skew'>;
31
+ lockSkewing: TAxisKey<'lockSkewing'>;
32
+ origin: TAxisKey<'origin'>;
33
+ flip: TAxisKey<'flip'>;
34
+ }
35
+ > = {
36
+ x: {
37
+ counterAxis: 'y',
38
+ scale: 'scaleX',
39
+ skew: 'skewX',
40
+ lockSkewing: 'lockSkewingX',
41
+ origin: 'originX',
42
+ flip: 'flipX',
43
+ },
44
+ y: {
45
+ counterAxis: 'x',
46
+ scale: 'scaleY',
47
+ skew: 'skewY',
48
+ lockSkewing: 'lockSkewingY',
49
+ origin: 'originY',
50
+ flip: 'flipY',
51
+ },
52
+ };
53
+
54
+ const skewMap = ['ns', 'nesw', 'ew', 'nwse'];
55
+
56
+ /**
57
+ * return the correct cursor style for the skew action
58
+ * @param {Event} eventData the javascript event that is causing the scale
59
+ * @param {Control} control the control that is interested in the action
60
+ * @param {FabricObject} fabricObject the fabric object that is interested in the action
61
+ * @return {String} a valid css string for the cursor
62
+ */
63
+ export const skewCursorStyleHandler: ControlCursorCallback = (
64
+ eventData,
65
+ control,
66
+ fabricObject
67
+ ) => {
68
+ if (control.x !== 0 && isLocked(fabricObject, 'lockSkewingY')) {
69
+ return NOT_ALLOWED_CURSOR;
70
+ }
71
+ if (control.y !== 0 && isLocked(fabricObject, 'lockSkewingX')) {
72
+ return NOT_ALLOWED_CURSOR;
73
+ }
74
+ const n = findCornerQuadrant(fabricObject, control) % 4;
75
+ return `${skewMap[n]}-resize`;
76
+ };
77
+
78
+ /**
79
+ * Since skewing is applied before scaling, calculations are done in a scaleless plane
80
+ * @see https://github.com/fabricjs/fabric.js/pull/8380
81
+ */
82
+ function skewObject(
83
+ axis: TAxis,
84
+ { target, ex, ey, skewingSide, ...transform }: SkewTransform,
85
+ pointer: Point
86
+ ) {
87
+ const { skew: skewKey } = AXIS_KEYS[axis],
88
+ offset = pointer
89
+ .subtract(new Point(ex, ey))
90
+ .divide(new Point(target.scaleX, target.scaleY))[axis],
91
+ skewingBefore = target[skewKey],
92
+ skewingStart = transform[skewKey],
93
+ shearingStart = Math.tan(degreesToRadians(skewingStart)),
94
+ // let a, b be the size of target
95
+ // let a' be the value of a after applying skewing
96
+ // then:
97
+ // a' = a + b * skewA => skewA = (a' - a) / b
98
+ // the value b is tricky since skewY is applied before skewX
99
+ b =
100
+ axis === 'y'
101
+ ? target._getTransformedDimensions({
102
+ scaleX: 1,
103
+ scaleY: 1,
104
+ // since skewY is applied before skewX, b (=width) is not affected by skewX
105
+ skewX: 0,
106
+ }).x
107
+ : target._getTransformedDimensions({
108
+ scaleX: 1,
109
+ scaleY: 1,
110
+ }).y;
111
+
112
+ const shearing =
113
+ (2 * offset * skewingSide) /
114
+ // we max out fractions to safeguard from asymptotic behavior
115
+ Math.max(b, 1) +
116
+ // add starting state
117
+ shearingStart;
118
+
119
+ const skewing = radiansToDegrees(Math.atan(shearing));
120
+
121
+ target.set(skewKey, skewing);
122
+ const changed = skewingBefore !== target[skewKey];
123
+
124
+ if (changed && axis === 'y') {
125
+ // we don't want skewing to affect scaleX
126
+ // so we factor it by the inverse skewing diff to make it seem unchanged to the viewer
127
+ const { skewX, scaleX } = target,
128
+ dimBefore = target._getTransformedDimensions({ skewY: skewingBefore }),
129
+ dimAfter = target._getTransformedDimensions(),
130
+ compensationFactor = skewX !== 0 ? dimBefore.x / dimAfter.x : 1;
131
+ compensationFactor !== 1 &&
132
+ target.set('scaleX', compensationFactor * scaleX);
133
+ }
134
+
135
+ return changed;
136
+ }
137
+
138
+ /**
139
+ * Wrapped Action handler for skewing on a given axis, takes care of the
140
+ * skew direction and determines the correct transform origin for the anchor point
141
+ * @param {Event} eventData javascript event that is doing the transform
142
+ * @param {Object} transform javascript object containing a series of information around the current transform
143
+ * @param {number} x current mouse x position, canvas normalized
144
+ * @param {number} y current mouse y position, canvas normalized
145
+ * @return {Boolean} true if some change happened
146
+ */
147
+ function skewHandler(
148
+ axis: TAxis,
149
+ eventData: TPointerEvent,
150
+ transform: Transform,
151
+ x: number,
152
+ y: number
153
+ ) {
154
+ const { target } = transform,
155
+ {
156
+ counterAxis,
157
+ origin: originKey,
158
+ lockSkewing: lockSkewingKey,
159
+ skew: skewKey,
160
+ flip: flipKey,
161
+ } = AXIS_KEYS[axis];
162
+ if (isLocked(target, lockSkewingKey)) {
163
+ return false;
164
+ }
165
+
166
+ const { origin: counterOriginKey, flip: counterFlipKey } =
167
+ AXIS_KEYS[counterAxis],
168
+ counterOriginFactor =
169
+ resolveOrigin(transform[counterOriginKey]) *
170
+ (target[counterFlipKey] ? -1 : 1),
171
+ // if the counter origin is top/left (= -0.5) then we are skewing x/y values on the bottom/right side of target respectively.
172
+ // if the counter origin is bottom/right (= 0.5) then we are skewing x/y values on the top/left side of target respectively.
173
+ // skewing direction on the top/left side of target is OPPOSITE to the direction of the movement of the pointer,
174
+ // so we factor skewing direction by this value.
175
+ skewingSide = (-Math.sign(counterOriginFactor) *
176
+ (target[flipKey] ? -1 : 1)) as 1 | -1,
177
+ skewingDirection =
178
+ ((target[skewKey] === 0 &&
179
+ // in case skewing equals 0 we use the pointer offset from target center to determine the direction of skewing
180
+ getLocalPoint(transform, 'center', 'center', x, y)[axis] > 0) ||
181
+ // in case target has skewing we use that as the direction
182
+ target[skewKey] > 0
183
+ ? 1
184
+ : -1) * skewingSide,
185
+ // anchor to the opposite side of the skewing direction
186
+ // normalize value from [-1, 1] to origin value [0, 1]
187
+ origin = -skewingDirection * 0.5 + 0.5;
188
+
189
+ const finalHandler = wrapWithFireEvent<SkewTransform>(
190
+ 'skewing',
191
+ wrapWithFixedAnchor((eventData, transform, x, y) =>
192
+ skewObject(axis, transform, new Point(x, y))
193
+ )
194
+ );
195
+
196
+ return finalHandler(
197
+ eventData,
198
+ {
199
+ ...transform,
200
+ [originKey]: origin,
201
+ skewingSide,
202
+ },
203
+ x,
204
+ y
205
+ );
206
+ }
207
+
208
+ /**
209
+ * Wrapped Action handler for skewing on the X axis, takes care of the
210
+ * skew direction and determines the correct transform origin for the anchor point
211
+ * @param {Event} eventData javascript event that is doing the transform
212
+ * @param {Object} transform javascript object containing a series of information around the current transform
213
+ * @param {number} x current mouse x position, canvas normalized
214
+ * @param {number} y current mouse y position, canvas normalized
215
+ * @return {Boolean} true if some change happened
216
+ */
217
+ export const skewHandlerX: TransformActionHandler = (
218
+ eventData,
219
+ transform,
220
+ x,
221
+ y
222
+ ) => {
223
+ return skewHandler('x', eventData, transform, x, y);
224
+ };
225
+
226
+ /**
227
+ * Wrapped Action handler for skewing on the Y axis, takes care of the
228
+ * skew direction and determines the correct transform origin for the anchor point
229
+ * @param {Event} eventData javascript event that is doing the transform
230
+ * @param {Object} transform javascript object containing a series of information around the current transform
231
+ * @param {number} x current mouse x position, canvas normalized
232
+ * @param {number} y current mouse y position, canvas normalized
233
+ * @return {Boolean} true if some change happened
234
+ */
235
+ export const skewHandlerY: TransformActionHandler = (
236
+ eventData,
237
+ transform,
238
+ x,
239
+ y
240
+ ) => {
241
+ return skewHandler('y', eventData, transform, x, y);
242
+ };
@@ -0,0 +1,154 @@
1
+ import {
2
+ TPointerEvent,
3
+ Transform,
4
+ TransformAction,
5
+ BasicTransformEvent,
6
+ } from '../EventTypeDefs';
7
+ import { resolveOrigin } from '../util/misc/resolveOrigin';
8
+ import { Point } from '../Point';
9
+ import type { FabricObject } from '../shapes/Object/FabricObject';
10
+ import { TOriginX, TOriginY } from '../typedefs';
11
+ import {
12
+ degreesToRadians,
13
+ radiansToDegrees,
14
+ } from '../util/misc/radiansDegreesConversion';
15
+ import type { Control } from './Control';
16
+
17
+ export const NOT_ALLOWED_CURSOR = 'not-allowed';
18
+
19
+ /**
20
+ * @param {Boolean} alreadySelected true if target is already selected
21
+ * @param {String} corner a string representing the corner ml, mr, tl ...
22
+ * @param {Event} e Event object
23
+ * @param {FabricObject} [target] inserted back to help overriding. Unused
24
+ */
25
+ export const getActionFromCorner = (
26
+ alreadySelected: boolean,
27
+ corner: string,
28
+ e: TPointerEvent,
29
+ target: FabricObject
30
+ ) => {
31
+ if (!corner || !alreadySelected) {
32
+ return 'drag';
33
+ }
34
+ const control = target.controls[corner];
35
+ return control.getActionName(e, control, target);
36
+ };
37
+
38
+ /**
39
+ * Checks if transform is centered
40
+ * @param {Object} transform transform data
41
+ * @return {Boolean} true if transform is centered
42
+ */
43
+ export function isTransformCentered(transform: Transform) {
44
+ return transform.originX === 'center' && transform.originY === 'center';
45
+ }
46
+
47
+ export function invertOrigin(origin: TOriginX | TOriginY) {
48
+ return -resolveOrigin(origin) + 0.5;
49
+ }
50
+
51
+ export const isLocked = (
52
+ target: FabricObject,
53
+ lockingKey:
54
+ | 'lockMovementX'
55
+ | 'lockMovementY'
56
+ | 'lockRotation'
57
+ | 'lockScalingX'
58
+ | 'lockScalingY'
59
+ | 'lockSkewingX'
60
+ | 'lockSkewingY'
61
+ | 'lockScalingFlip'
62
+ ) => target[lockingKey];
63
+
64
+ export const commonEventInfo: TransformAction<
65
+ Transform,
66
+ BasicTransformEvent
67
+ > = (eventData, transform, x, y) => {
68
+ return {
69
+ e: eventData,
70
+ transform,
71
+ pointer: new Point(x, y),
72
+ };
73
+ };
74
+
75
+ /**
76
+ * Combine control position and object angle to find the control direction compared
77
+ * to the object center.
78
+ * @param {FabricObject} fabricObject the fabric object for which we are rendering controls
79
+ * @param {Control} control the control class
80
+ * @return {Number} 0 - 7 a quadrant number
81
+ */
82
+ export function findCornerQuadrant(
83
+ fabricObject: FabricObject,
84
+ control: Control
85
+ ) {
86
+ // angle is relative to canvas plane
87
+ const angle = fabricObject.getTotalAngle(),
88
+ cornerAngle =
89
+ angle + radiansToDegrees(Math.atan2(control.y, control.x)) + 360;
90
+ return Math.round((cornerAngle % 360) / 45);
91
+ }
92
+
93
+ /**
94
+ * @returns the normalized point (rotated relative to center) in local coordinates
95
+ */
96
+ function normalizePoint(
97
+ target: FabricObject,
98
+ point: Point,
99
+ originX: TOriginX,
100
+ originY: TOriginY
101
+ ): Point {
102
+ const center = target.getRelativeCenterPoint(),
103
+ p =
104
+ typeof originX !== 'undefined' && typeof originY !== 'undefined'
105
+ ? target.translateToGivenOrigin(
106
+ center,
107
+ 'center',
108
+ 'center',
109
+ originX,
110
+ originY
111
+ )
112
+ : new Point(target.left, target.top),
113
+ p2 = target.angle
114
+ ? point.rotate(-degreesToRadians(target.angle), center)
115
+ : point;
116
+ return p2.subtract(p);
117
+ }
118
+
119
+ /**
120
+ * Transforms a point to the offset from the given origin
121
+ * @param {Object} transform
122
+ * @param {String} originX
123
+ * @param {String} originY
124
+ * @param {number} x
125
+ * @param {number} y
126
+ * @return {Fabric.Point} the normalized point
127
+ */
128
+ export function getLocalPoint(
129
+ { target, corner }: Transform,
130
+ originX: TOriginX,
131
+ originY: TOriginY,
132
+ x: number,
133
+ y: number
134
+ ) {
135
+ const control = target.controls[corner],
136
+ zoom = target.canvas?.getZoom() || 1,
137
+ padding = target.padding / zoom,
138
+ localPoint = normalizePoint(target, new Point(x, y), originX, originY);
139
+ if (localPoint.x >= padding) {
140
+ localPoint.x -= padding;
141
+ }
142
+ if (localPoint.x <= -padding) {
143
+ localPoint.x += padding;
144
+ }
145
+ if (localPoint.y >= padding) {
146
+ localPoint.y -= padding;
147
+ }
148
+ if (localPoint.y <= padding) {
149
+ localPoint.y += padding;
150
+ }
151
+ localPoint.x -= control.offsetX;
152
+ localPoint.y -= control.offsetY;
153
+ return localPoint;
154
+ }
@@ -0,0 +1,25 @@
1
+ import {
2
+ TModificationEvents,
3
+ Transform,
4
+ TransformActionHandler,
5
+ } from '../EventTypeDefs';
6
+ import { fireEvent } from '../util/fireEvent';
7
+ import { commonEventInfo } from './util';
8
+
9
+ /**
10
+ * Wrap an action handler with firing an event if the action is performed
11
+ * @param {Function} actionHandler the function to wrap
12
+ * @return {Function} a function with an action handler signature
13
+ */
14
+ export const wrapWithFireEvent = <T extends Transform>(
15
+ eventName: TModificationEvents,
16
+ actionHandler: TransformActionHandler<T>
17
+ ) => {
18
+ return ((eventData, transform, x, y) => {
19
+ const actionPerformed = actionHandler(eventData, transform, x, y);
20
+ if (actionPerformed) {
21
+ fireEvent(eventName, commonEventInfo(eventData, transform, x, y));
22
+ }
23
+ return actionPerformed;
24
+ }) as TransformActionHandler<T>;
25
+ };
@@ -0,0 +1,20 @@
1
+ import { Transform, TransformActionHandler } from '../EventTypeDefs';
2
+
3
+ /**
4
+ * Wrap an action handler with saving/restoring object position on the transform.
5
+ * this is the code that permits to objects to keep their position while transforming.
6
+ * @param {Function} actionHandler the function to wrap
7
+ * @return {Function} a function with an action handler signature
8
+ */
9
+ export function wrapWithFixedAnchor<T extends Transform>(
10
+ actionHandler: TransformActionHandler<T>
11
+ ) {
12
+ return ((eventData, transform, x, y) => {
13
+ const { target, originX, originY } = transform,
14
+ centerPoint = target.getRelativeCenterPoint(),
15
+ constraint = target.translateToOriginPoint(centerPoint, originX, originY),
16
+ actionPerformed = actionHandler(eventData, transform, x, y);
17
+ target.setPositionByOrigin(constraint, originX, originY);
18
+ return actionPerformed;
19
+ }) as TransformActionHandler<T>;
20
+ }
@@ -0,0 +1,28 @@
1
+ /* eslint-disable no-restricted-globals */
2
+ import { config } from '../config';
3
+ import { TCopyPasteData, TFabricEnv } from './types';
4
+
5
+ const copyPasteData: TCopyPasteData = {};
6
+
7
+ let initialized = false;
8
+ let isTouchSupported: boolean;
9
+
10
+ export const getEnv = (): TFabricEnv => {
11
+ if (!initialized) {
12
+ config.configure({
13
+ devicePixelRatio: window.devicePixelRatio || 1,
14
+ });
15
+ isTouchSupported =
16
+ 'ontouchstart' in window ||
17
+ 'ontouchstart' in document ||
18
+ (window && window.navigator && window.navigator.maxTouchPoints > 0);
19
+ initialized = true;
20
+ }
21
+ return {
22
+ document,
23
+ window,
24
+ isTouchSupported,
25
+ isLikelyNode: false,
26
+ copyPasteData,
27
+ };
28
+ };
@@ -0,0 +1,19 @@
1
+ import { TFabricEnv } from './types';
2
+ import { getEnv as getBrowserEnv } from './browser';
3
+
4
+ let env: TFabricEnv;
5
+
6
+ export const setEnv = (value: TFabricEnv) => {
7
+ env = value;
8
+ };
9
+
10
+ export const getEnv = () => env || getBrowserEnv();
11
+
12
+ export const getDocument = (): Document => getEnv().document;
13
+
14
+ export const getWindow = (): Window => getEnv().window;
15
+
16
+ export const setEnvForTests = (window: Window) => {
17
+ env.document = window.document;
18
+ env.window = window;
19
+ };
@@ -0,0 +1,52 @@
1
+ /* eslint-disable no-restricted-globals */
2
+ import { JSDOM } from 'jsdom';
3
+ import utils1 from 'jsdom/lib/jsdom/living/generated/utils.js';
4
+ import utils2 from 'jsdom/lib/jsdom/utils.js';
5
+ import { config } from '../config';
6
+ import { setEnv } from './index';
7
+ import { TCopyPasteData, TFabricEnv } from './types';
8
+
9
+ const { implForWrapper: jsdomImplForWrapper } = utils1;
10
+ const { Canvas: nodeCanvas } = utils2;
11
+
12
+ const copyPasteData: TCopyPasteData = {};
13
+
14
+ const { window: virtualWindow } = new JSDOM(
15
+ decodeURIComponent(
16
+ '%3C!DOCTYPE%20html%3E%3Chtml%3E%3Chead%3E%3C%2Fhead%3E%3Cbody%3E%3C%2Fbody%3E%3C%2Fhtml%3E'
17
+ ),
18
+ {
19
+ features: {
20
+ FetchExternalResources: ['img'],
21
+ },
22
+ resources: 'usable',
23
+ }
24
+ );
25
+
26
+ const fabricDocument = virtualWindow.document;
27
+ const fabricWindow = virtualWindow;
28
+
29
+ const isTouchSupported =
30
+ 'ontouchstart' in fabricWindow ||
31
+ 'ontouchstart' in fabricDocument ||
32
+ (fabricWindow &&
33
+ fabricWindow.navigator &&
34
+ fabricWindow.navigator.maxTouchPoints > 0);
35
+
36
+ config.configure({
37
+ devicePixelRatio: fabricWindow.devicePixelRatio || 1,
38
+ });
39
+
40
+ export const getEnv = (): TFabricEnv => {
41
+ return {
42
+ document: fabricDocument,
43
+ window: fabricWindow,
44
+ isTouchSupported,
45
+ isLikelyNode: true,
46
+ nodeCanvas,
47
+ jsdomImplForWrapper,
48
+ copyPasteData,
49
+ };
50
+ };
51
+
52
+ setEnv(getEnv());
@@ -0,0 +1,15 @@
1
+ import type { Canvas } from 'canvas';
2
+
3
+ export type TCopyPasteData = {
4
+ copiedText?: string;
5
+ copiedStyle?: Record<string, string>;
6
+ };
7
+ export type TFabricEnv = {
8
+ document: Document;
9
+ window: Window;
10
+ isTouchSupported: boolean;
11
+ isLikelyNode: boolean;
12
+ nodeCanvas?: Canvas;
13
+ jsdomImplForWrapper?: any;
14
+ copyPasteData: TCopyPasteData;
15
+ };