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,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,32 @@
1
+ /* eslint-disable no-restricted-globals */
2
+ import { config } from '../config';
3
+ import { WebGLProbe } from '../filters/GLProbes/WebGLProbe';
4
+ import { TCopyPasteData, TFabricEnv } from './types';
5
+
6
+ const copyPasteData: TCopyPasteData = {};
7
+
8
+ let initialized = false;
9
+ let isTouchSupported: boolean;
10
+
11
+ export const getEnv = (): TFabricEnv => {
12
+ if (!initialized) {
13
+ config.configure({
14
+ devicePixelRatio: window.devicePixelRatio || 1,
15
+ });
16
+ isTouchSupported =
17
+ 'ontouchstart' in window ||
18
+ 'ontouchstart' in document ||
19
+ (window && window.navigator && window.navigator.maxTouchPoints > 0);
20
+ initialized = true;
21
+ }
22
+ return {
23
+ document,
24
+ window,
25
+ isTouchSupported,
26
+ WebGLProbe: new WebGLProbe(),
27
+ dispose() {
28
+ // noop
29
+ },
30
+ copyPasteData,
31
+ };
32
+ };
@@ -0,0 +1,24 @@
1
+ /**
2
+ * This file is consumed by fabric.
3
+ * The `./node` and `./browser` files define the env variable that is used by this module.
4
+ * The `./node` module sets the env at import time.
5
+ * The `./browser` module is defined to be the default env and doesn't set the env at all.
6
+ * This is done in order to support isomorphic usage for browser and node applications
7
+ * since window and document aren't defined at time of import in SSR, we can't set env so we avoid it by deferring to the default env.
8
+ */
9
+
10
+ import { TFabricEnv } from './types';
11
+ import { getEnv as getBrowserEnv } from './browser';
12
+ import type { DOMWindow } from 'jsdom';
13
+
14
+ let env: TFabricEnv;
15
+
16
+ export const setEnv = (value: TFabricEnv) => {
17
+ env = value;
18
+ };
19
+
20
+ export const getEnv = () => env || getBrowserEnv();
21
+
22
+ export const getDocument = (): Document => getEnv().document;
23
+
24
+ export const getWindow = (): Window | DOMWindow => getEnv().window;
@@ -0,0 +1,56 @@
1
+ /* eslint-disable no-restricted-globals */
2
+ import type { Canvas as NodeCanvas } from 'canvas';
3
+ import { JSDOM } from 'jsdom';
4
+ // @ts-ignore
5
+ import utils from 'jsdom/lib/jsdom/living/generated/utils.js';
6
+ import { config } from '../config';
7
+ import { NodeGLProbe } from '../filters/GLProbes/NodeGLProbe';
8
+ import { setEnv } from './index';
9
+ import { TCopyPasteData, TFabricEnv } from './types';
10
+
11
+ const { implForWrapper: jsdomImplForWrapper } = utils;
12
+
13
+ const copyPasteData: TCopyPasteData = {};
14
+
15
+ const { window: JSDOMWindow } = new JSDOM(
16
+ decodeURIComponent(
17
+ '%3C!DOCTYPE%20html%3E%3Chtml%3E%3Chead%3E%3C%2Fhead%3E%3Cbody%3E%3C%2Fbody%3E%3C%2Fhtml%3E'
18
+ ),
19
+ {
20
+ resources: 'usable',
21
+ // needed for `requestAnimationFrame`
22
+ pretendToBeVisual: true,
23
+ }
24
+ );
25
+
26
+ config.configure({
27
+ devicePixelRatio: JSDOMWindow.devicePixelRatio || 1,
28
+ });
29
+
30
+ export const getNodeCanvas = (canvasEl: HTMLCanvasElement) => {
31
+ const impl = jsdomImplForWrapper(canvasEl);
32
+ return (impl._canvas || impl._image) as NodeCanvas;
33
+ };
34
+
35
+ export const getEnv = (): TFabricEnv => {
36
+ return {
37
+ document: JSDOMWindow.document,
38
+ window: JSDOMWindow,
39
+ isTouchSupported: false,
40
+ WebGLProbe: new NodeGLProbe(),
41
+ dispose(element) {
42
+ const impl = jsdomImplForWrapper(element);
43
+ if (impl) {
44
+ impl._image = null;
45
+ impl._canvas = null;
46
+ // unsure if necessary
47
+ impl._currentSrc = null;
48
+ impl._attributes = null;
49
+ impl._classList = null;
50
+ }
51
+ },
52
+ copyPasteData,
53
+ };
54
+ };
55
+
56
+ setEnv(getEnv());
@@ -0,0 +1,15 @@
1
+ import { GLProbe } from '../filters/GLProbes/GLProbe';
2
+ import type { DOMWindow } from 'jsdom';
3
+
4
+ export type TCopyPasteData = {
5
+ copiedText?: string;
6
+ copiedStyle?: Record<string, string>;
7
+ };
8
+ export type TFabricEnv = {
9
+ document: Document;
10
+ window: Window | DOMWindow;
11
+ isTouchSupported: boolean;
12
+ WebGLProbe: GLProbe;
13
+ dispose(element: Element): void;
14
+ copyPasteData: TCopyPasteData;
15
+ };