fabric 5.3.0 → 6.0.0-beta10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (634) hide show
  1. package/.babelrc +11 -0
  2. package/.babelrcAlt +19 -0
  3. package/.browserslistrc +5 -0
  4. package/.eslintignore +3 -0
  5. package/.eslintrc.js +51 -0
  6. package/.eslintrc.json +38 -46
  7. package/.eslintrc_tests +12 -0
  8. package/.gitattributes +2 -0
  9. package/.gitpod.yml +17 -1
  10. package/.prettierignore +19 -0
  11. package/.prettierrc +4 -0
  12. package/CHANGELOG.md +615 -189
  13. package/CONTRIBUTING.md +233 -59
  14. package/README.md +200 -235
  15. package/babel-jest.config.js +6 -0
  16. package/bower.json +1 -3
  17. package/dist/fabric.d.ts +54 -0
  18. package/dist/index.d.ts +2 -0
  19. package/dist/index.js +28452 -0
  20. package/dist/index.js.map +1 -0
  21. package/dist/index.min.js +1 -0
  22. package/dist/index.mjs +28385 -0
  23. package/dist/index.mjs.map +1 -0
  24. package/dist/index.node.cjs +28538 -0
  25. package/dist/index.node.cjs.map +1 -0
  26. package/dist/index.node.d.ts +20 -0
  27. package/dist/index.node.mjs +28477 -0
  28. package/dist/index.node.mjs.map +1 -0
  29. package/dist/src/ClassRegistry.d.ts +13 -0
  30. package/dist/src/Collection.d.ts +136 -0
  31. package/dist/src/CommonMethods.d.ts +32 -0
  32. package/dist/src/EventTypeDefs.d.ts +227 -0
  33. package/dist/src/Intersection.d.ts +112 -0
  34. package/dist/src/Observable.d.ts +60 -0
  35. package/dist/src/Pattern/Pattern.d.ts +99 -0
  36. package/dist/src/Pattern/index.d.ts +3 -0
  37. package/dist/src/Pattern/types.d.ts +9 -0
  38. package/dist/src/Point.d.ts +232 -0
  39. package/dist/src/Shadow.d.ts +96 -0
  40. package/dist/src/brushes/BaseBrush.d.ts +101 -0
  41. package/dist/src/brushes/CircleBrush.d.ts +44 -0
  42. package/dist/src/brushes/CircleBrush.test.d.ts +2 -0
  43. package/dist/src/brushes/PatternBrush.d.ts +23 -0
  44. package/dist/src/brushes/PencilBrush.d.ts +92 -0
  45. package/dist/src/brushes/SprayBrush.d.ts +74 -0
  46. package/dist/src/brushes/typedefs.d.ts +18 -0
  47. package/dist/src/cache.d.ts +47 -0
  48. package/dist/src/canvas/Canvas.d.ts +364 -0
  49. package/dist/src/canvas/DOMManagers/CanvasDOMManager.d.ts +29 -0
  50. package/dist/src/canvas/DOMManagers/StaticCanvasDOMManager.d.ts +29 -0
  51. package/dist/src/canvas/DOMManagers/util.d.ts +24 -0
  52. package/dist/src/canvas/DOMManagers/util.spec.d.ts +2 -0
  53. package/dist/src/canvas/SelectableCanvas.d.ts +723 -0
  54. package/dist/src/canvas/StaticCanvas.d.ts +747 -0
  55. package/dist/src/canvas/TextEditingManager.d.ts +21 -0
  56. package/dist/src/canvas/canvas_gestures.mixin.d.ts +2 -0
  57. package/dist/src/color/Color.d.ts +152 -0
  58. package/dist/src/color/color_map.d.ts +155 -0
  59. package/dist/src/color/constants.d.ts +104 -0
  60. package/dist/src/color/typedefs.d.ts +16 -0
  61. package/dist/src/color/util.d.ts +27 -0
  62. package/dist/src/config.d.ts +115 -0
  63. package/dist/src/constants.d.ts +21 -0
  64. package/dist/src/controls/Control.d.ts +229 -0
  65. package/dist/src/controls/changeWidth.d.ts +13 -0
  66. package/dist/src/controls/commonControls.d.ts +28 -0
  67. package/dist/src/controls/controlRendering.d.ts +29 -0
  68. package/dist/src/controls/drag.d.ts +12 -0
  69. package/dist/src/controls/fireEvent.d.ts +3 -0
  70. package/dist/src/controls/index.d.ts +13 -0
  71. package/dist/src/controls/polyControl.d.ts +5 -0
  72. package/dist/src/controls/rotate.d.ts +12 -0
  73. package/dist/src/controls/scale.d.ts +47 -0
  74. package/dist/src/controls/scaleSkew.d.ts +39 -0
  75. package/dist/src/controls/skew.d.ts +33 -0
  76. package/dist/src/controls/util.d.ts +41 -0
  77. package/dist/src/controls/wrapWithFireEvent.d.ts +8 -0
  78. package/dist/src/controls/wrapWithFixedAnchor.d.ts +9 -0
  79. package/dist/src/env/browser.d.ts +3 -0
  80. package/dist/src/env/index.d.ts +28 -0
  81. package/dist/src/env/node.d.ts +6 -0
  82. package/dist/src/env/types.d.ts +15 -0
  83. package/dist/src/filters/BaseFilter.d.ts +160 -0
  84. package/dist/src/filters/BlendColor.d.ts +81 -0
  85. package/dist/src/filters/BlendImage.d.ts +93 -0
  86. package/dist/src/filters/Blur.d.ts +52 -0
  87. package/dist/src/filters/Boilerplate.d.ts +48 -0
  88. package/dist/src/filters/Brightness.d.ts +48 -0
  89. package/dist/src/filters/Canvas2dFilterBackend.d.ts +27 -0
  90. package/dist/src/filters/ColorMatrix.d.ts +64 -0
  91. package/dist/src/filters/ColorMatrixFilters.d.ts +537 -0
  92. package/dist/src/filters/Composed.d.ts +46 -0
  93. package/dist/src/filters/Contrast.d.ts +46 -0
  94. package/dist/src/filters/Convolute.d.ts +83 -0
  95. package/dist/src/filters/FilterBackend.d.ts +15 -0
  96. package/dist/src/filters/GLProbes/GLProbe.d.ts +7 -0
  97. package/dist/src/filters/GLProbes/NodeGLProbe.d.ts +11 -0
  98. package/dist/src/filters/GLProbes/WebGLProbe.d.ts +20 -0
  99. package/dist/src/filters/Gamma.d.ts +55 -0
  100. package/dist/src/filters/Grayscale.d.ts +47 -0
  101. package/dist/src/filters/HueRotation.d.ts +25 -0
  102. package/dist/src/filters/Invert.d.ts +56 -0
  103. package/dist/src/filters/Noise.d.ts +55 -0
  104. package/dist/src/filters/Pixelate.d.ts +45 -0
  105. package/dist/src/filters/RemoveColor.d.ts +64 -0
  106. package/dist/src/filters/Resize.d.ts +137 -0
  107. package/dist/src/filters/Saturation.d.ts +49 -0
  108. package/dist/src/filters/Vibrance.d.ts +49 -0
  109. package/dist/src/filters/WebGLFilterBackend.d.ts +128 -0
  110. package/dist/src/filters/filters.d.ts +21 -0
  111. package/dist/src/filters/index.d.ts +7 -0
  112. package/dist/src/filters/shaders/baseFilter.d.ts +4 -0
  113. package/dist/src/filters/shaders/blendColor.d.ts +13 -0
  114. package/dist/src/filters/shaders/blendImage.d.ts +3 -0
  115. package/dist/src/filters/shaders/blur.d.ts +2 -0
  116. package/dist/src/filters/shaders/brightness.d.ts +2 -0
  117. package/dist/src/filters/shaders/colorMatrix.d.ts +2 -0
  118. package/dist/src/filters/shaders/constrast.d.ts +2 -0
  119. package/dist/src/filters/shaders/convolute.d.ts +11 -0
  120. package/dist/src/filters/shaders/gamma.d.ts +2 -0
  121. package/dist/src/filters/shaders/grayscale.d.ts +3 -0
  122. package/dist/src/filters/shaders/invert.d.ts +2 -0
  123. package/dist/src/filters/shaders/noise.d.ts +2 -0
  124. package/dist/src/filters/shaders/pixelate.d.ts +2 -0
  125. package/dist/src/filters/shaders/removeColor.d.ts +2 -0
  126. package/dist/src/filters/shaders/saturation.d.ts +2 -0
  127. package/dist/src/filters/shaders/vibrance.d.ts +2 -0
  128. package/dist/src/filters/typedefs.d.ts +48 -0
  129. package/dist/src/filters/utils.d.ts +3 -0
  130. package/dist/src/gradient/Gradient.d.ts +150 -0
  131. package/dist/src/gradient/constants.d.ts +15 -0
  132. package/dist/src/gradient/index.d.ts +3 -0
  133. package/dist/src/gradient/parser/index.d.ts +4 -0
  134. package/dist/src/gradient/parser/misc.d.ts +4 -0
  135. package/dist/src/gradient/parser/parseColorStops.d.ts +3 -0
  136. package/dist/src/gradient/parser/parseCoords.d.ts +17 -0
  137. package/dist/src/gradient/typedefs.d.ts +93 -0
  138. package/dist/src/mixins/eraser_brush.mixin.d.ts +2 -0
  139. package/dist/src/parkinglot/canvas_animation.mixin.d.ts +2 -0
  140. package/dist/src/parkinglot/straighten.d.ts +2 -0
  141. package/dist/src/parser/applyViewboxTransform.d.ts +5 -0
  142. package/dist/src/parser/attributes.d.ts +6 -0
  143. package/dist/src/parser/constants.d.ts +53 -0
  144. package/dist/src/parser/doesSomeParentMatch.d.ts +2 -0
  145. package/dist/src/parser/elementById.d.ts +6 -0
  146. package/dist/src/parser/elementMatchesRule.d.ts +5 -0
  147. package/dist/src/parser/elements_parser.d.ts +3 -0
  148. package/dist/src/parser/getCSSRules.d.ts +7 -0
  149. package/dist/src/parser/getGlobalStylesForElement.d.ts +5 -0
  150. package/dist/src/parser/getGradientDefs.d.ts +7 -0
  151. package/dist/src/parser/getMultipleNodes.d.ts +2 -0
  152. package/dist/src/parser/getSvgRegex.d.ts +2 -0
  153. package/dist/src/parser/hasAncestorWithNodeName.d.ts +2 -0
  154. package/dist/src/parser/index.d.ts +9 -0
  155. package/dist/src/parser/loadSVGFromString.d.ts +18 -0
  156. package/dist/src/parser/loadSVGFromURL.d.ts +19 -0
  157. package/dist/src/parser/normalizeAttr.d.ts +2 -0
  158. package/dist/src/parser/normalizeValue.d.ts +2 -0
  159. package/dist/src/parser/parseAttributes.d.ts +9 -0
  160. package/dist/src/parser/parseFontDeclaration.d.ts +10 -0
  161. package/dist/src/parser/parsePointsAttribute.d.ts +12 -0
  162. package/dist/src/parser/parseSVGDocument.d.ts +23 -0
  163. package/dist/src/parser/parseStyleAttribute.d.ts +9 -0
  164. package/dist/src/parser/parseStyleObject.d.ts +2 -0
  165. package/dist/src/parser/parseStyleString.d.ts +2 -0
  166. package/dist/src/parser/parseTransformAttribute.d.ts +11 -0
  167. package/dist/src/parser/parseUseDirectives.d.ts +2 -0
  168. package/dist/src/parser/percent.d.ts +9 -0
  169. package/dist/src/parser/recursivelyParseGradientsXlink.d.ts +2 -0
  170. package/dist/src/parser/selectorMatches.d.ts +2 -0
  171. package/dist/src/parser/setStrokeFillOpacity.d.ts +6 -0
  172. package/dist/src/parser/typedefs.d.ts +9 -0
  173. package/dist/src/shapes/ActiveSelection.d.ts +83 -0
  174. package/dist/src/shapes/Circle.d.ts +99 -0
  175. package/dist/src/shapes/Ellipse.d.ts +84 -0
  176. package/dist/src/shapes/Group.d.ts +407 -0
  177. package/dist/src/shapes/IText/DraggableTextDelegate.d.ts +78 -0
  178. package/dist/src/shapes/IText/IText.d.ts +336 -0
  179. package/dist/src/shapes/IText/ITextBehavior.d.ts +287 -0
  180. package/dist/src/shapes/IText/ITextClickBehavior.d.ts +73 -0
  181. package/dist/src/shapes/IText/ITextKeyBehavior.d.ts +195 -0
  182. package/dist/src/shapes/IText/constants.d.ts +13 -0
  183. package/dist/src/shapes/Image.d.ts +309 -0
  184. package/dist/src/shapes/Line.d.ts +121 -0
  185. package/dist/src/shapes/Object/AnimatableObject.d.ts +33 -0
  186. package/dist/src/shapes/Object/FabricObject.d.ts +11 -0
  187. package/dist/src/shapes/Object/FabricObjectSVGExportMixin.d.ts +74 -0
  188. package/dist/src/shapes/Object/InteractiveObject.d.ts +296 -0
  189. package/dist/src/shapes/Object/Object.d.ts +599 -0
  190. package/dist/src/shapes/Object/ObjectGeometry.d.ts +327 -0
  191. package/dist/src/shapes/Object/ObjectOrigin.d.ts +109 -0
  192. package/dist/src/shapes/Object/StackedObject.d.ts +72 -0
  193. package/dist/src/shapes/Object/defaultValues.d.ts +76 -0
  194. package/dist/src/shapes/Object/types/BaseProps.d.ts +84 -0
  195. package/dist/src/shapes/Object/types/BorderProps.d.ts +37 -0
  196. package/dist/src/shapes/Object/types/ControlProps.d.ts +62 -0
  197. package/dist/src/shapes/Object/types/FabricObjectProps.d.ts +96 -0
  198. package/dist/src/shapes/Object/types/FillStrokeProps.d.ts +80 -0
  199. package/dist/src/shapes/Object/types/LockInteractionProps.d.ts +51 -0
  200. package/dist/src/shapes/Object/types/ObjectProps.d.ts +42 -0
  201. package/dist/src/shapes/Object/types/SerializedObjectProps.d.ts +66 -0
  202. package/dist/src/shapes/Object/types/index.d.ts +6 -0
  203. package/dist/src/shapes/Path.d.ts +214 -0
  204. package/dist/src/shapes/Polygon.d.ts +10 -0
  205. package/dist/src/shapes/Polyline.d.ts +147 -0
  206. package/dist/src/shapes/Rect.d.ts +82 -0
  207. package/dist/src/shapes/Text/StyledText.d.ts +123 -0
  208. package/dist/src/shapes/Text/Text.d.ts +688 -0
  209. package/dist/src/shapes/Text/TextSVGExportMixin.d.ts +32 -0
  210. package/dist/src/shapes/Text/constants.d.ts +13 -0
  211. package/dist/src/shapes/Textbox.d.ts +204 -0
  212. package/dist/src/shapes/Triangle.d.ts +26 -0
  213. package/dist/src/typedefs.d.ts +96 -0
  214. package/dist/src/util/animation/AnimationBase.d.ts +54 -0
  215. package/dist/src/util/animation/AnimationFrameProvider.d.ts +3 -0
  216. package/dist/src/util/animation/AnimationRegistry.d.ts +29 -0
  217. package/dist/src/util/animation/ArrayAnimation.d.ts +10 -0
  218. package/dist/src/util/animation/ColorAnimation.d.ts +11 -0
  219. package/dist/src/util/animation/ValueAnimation.d.ts +10 -0
  220. package/dist/src/util/animation/animate.d.ts +37 -0
  221. package/dist/src/util/animation/easing.d.ts +130 -0
  222. package/dist/src/util/animation/index.d.ts +3 -0
  223. package/dist/src/util/animation/types.d.ts +87 -0
  224. package/dist/src/util/applyMixins.d.ts +8 -0
  225. package/dist/src/util/dom_event.d.ts +5 -0
  226. package/dist/src/util/dom_misc.d.ts +12 -0
  227. package/dist/src/util/dom_request.d.ts +14 -0
  228. package/dist/src/util/dom_style.d.ts +7 -0
  229. package/dist/src/util/index.d.ts +36 -0
  230. package/dist/src/util/internals/cleanupSvgAttribute.d.ts +2 -0
  231. package/dist/src/util/internals/cleanupSvgAttribute.test.d.ts +2 -0
  232. package/dist/src/util/internals/cloneDeep.d.ts +2 -0
  233. package/dist/src/util/internals/cloneDeep.test.d.ts +2 -0
  234. package/dist/src/util/internals/getRandomInt.d.ts +8 -0
  235. package/dist/src/util/internals/getRandomInt.test.d.ts +2 -0
  236. package/dist/src/util/internals/ifNaN.d.ts +8 -0
  237. package/dist/src/util/internals/index.d.ts +4 -0
  238. package/dist/src/util/internals/removeFromArray.d.ts +9 -0
  239. package/dist/src/util/internals/uid.d.ts +2 -0
  240. package/dist/src/util/lang_string.d.ts +22 -0
  241. package/dist/src/util/misc/boundingBoxFromPoints.d.ts +9 -0
  242. package/dist/src/util/misc/capValue.d.ts +2 -0
  243. package/dist/src/util/misc/cos.d.ts +10 -0
  244. package/dist/src/util/misc/dom.d.ts +28 -0
  245. package/dist/src/util/misc/findScaleTo.d.ts +20 -0
  246. package/dist/src/util/misc/groupSVGElements.d.ts +9 -0
  247. package/dist/src/util/misc/isTransparent.d.ts +11 -0
  248. package/dist/src/util/misc/matrix.d.ts +168 -0
  249. package/dist/src/util/misc/mergeClipPaths.d.ts +23 -0
  250. package/dist/src/util/misc/objectEnlive.d.ts +41 -0
  251. package/dist/src/util/misc/objectTransforms.d.ts +68 -0
  252. package/dist/src/util/misc/pick.d.ts +9 -0
  253. package/dist/src/util/misc/planeChange.d.ts +81 -0
  254. package/dist/src/util/misc/projectStroke/StrokeLineCapProjections.d.ts +52 -0
  255. package/dist/src/util/misc/projectStroke/StrokeLineJoinProjections.d.ts +82 -0
  256. package/dist/src/util/misc/projectStroke/StrokeProjectionsBase.d.ts +26 -0
  257. package/dist/src/util/misc/projectStroke/index.d.ts +12 -0
  258. package/dist/src/util/misc/projectStroke/types.d.ts +23 -0
  259. package/dist/src/util/misc/radiansDegreesConversion.d.ts +14 -0
  260. package/dist/src/util/misc/resolveOrigin.d.ts +9 -0
  261. package/dist/src/util/misc/rotatePoint.d.ts +12 -0
  262. package/dist/src/util/misc/sin.d.ts +10 -0
  263. package/dist/src/util/misc/svgParsing.d.ts +45 -0
  264. package/dist/src/util/misc/textStyles.d.ts +32 -0
  265. package/dist/src/util/misc/toFixed.d.ts +8 -0
  266. package/dist/src/util/misc/vectors.d.ts +58 -0
  267. package/dist/src/util/path/index.d.ts +96 -0
  268. package/dist/src/util/path/regex.d.ts +2 -0
  269. package/dist/src/util/path/typechecks.d.ts +24 -0
  270. package/dist/src/util/path/typedefs.d.ts +220 -0
  271. package/dist/src/util/transform_matrix_removal.d.ts +14 -0
  272. package/dist/src/util/typeAssertions.d.ts +19 -0
  273. package/e2e/site/index.html +25 -0
  274. package/e2e/utils/objects.ts +36 -0
  275. package/fabric.ts +72 -0
  276. package/index.node.ts +43 -0
  277. package/index.ts +1 -0
  278. package/jest.config.js +194 -0
  279. package/lib/aligning_guidelines.js +2 -2
  280. package/package.json +110 -40
  281. package/playwright.config.ts +64 -0
  282. package/publish.js +0 -26
  283. package/rollup.config.mjs +99 -0
  284. package/rollup.test.config.js +24 -0
  285. package/scripts/build.mjs +50 -0
  286. package/scripts/buildLock.mjs +115 -0
  287. package/scripts/buildReporter.mjs +15 -0
  288. package/scripts/buildStats.mjs +139 -0
  289. package/scripts/dirname.mjs +14 -0
  290. package/scripts/git.mjs +36 -0
  291. package/scripts/index.mjs +564 -0
  292. package/scripts/sandbox.mjs +149 -0
  293. package/src/ClassRegistry.ts +56 -0
  294. package/src/Collection.ts +346 -0
  295. package/src/CommonMethods.ts +63 -0
  296. package/src/EventTypeDefs.ts +298 -0
  297. package/src/Intersection.ts +302 -0
  298. package/src/Observable.ts +181 -0
  299. package/src/Pattern/Pattern.ts +207 -0
  300. package/src/Pattern/index.ts +2 -0
  301. package/src/Pattern/types.ts +17 -0
  302. package/src/Point.ts +388 -0
  303. package/src/Shadow.ts +214 -0
  304. package/src/brushes/{base_brush.class.js → BaseBrush.ts} +63 -42
  305. package/src/brushes/CircleBrush.test.ts +11 -0
  306. package/src/brushes/CircleBrush.ts +140 -0
  307. package/src/brushes/PatternBrush.ts +70 -0
  308. package/src/brushes/PencilBrush.ts +300 -0
  309. package/src/brushes/SprayBrush.ts +214 -0
  310. package/src/brushes/typedefs.ts +18 -0
  311. package/src/cache.ts +90 -0
  312. package/src/canvas/Canvas.ts +1598 -0
  313. package/src/canvas/DOMManagers/CanvasDOMManager.ts +124 -0
  314. package/src/canvas/DOMManagers/StaticCanvasDOMManager.ts +80 -0
  315. package/src/canvas/DOMManagers/util.spec.ts +26 -0
  316. package/src/canvas/DOMManagers/util.ts +98 -0
  317. package/src/canvas/SelectableCanvas.ts +1506 -0
  318. package/src/canvas/StaticCanvas.ts +1634 -0
  319. package/src/canvas/TextEditingManager.ts +70 -0
  320. package/src/canvas/canvas_gestures.mixin.ts +207 -0
  321. package/src/color/Color.ts +320 -0
  322. package/src/color/color_map.ts +154 -0
  323. package/src/color/constants.ts +107 -0
  324. package/src/color/typedefs.ts +18 -0
  325. package/src/color/util.ts +93 -0
  326. package/src/config.ts +159 -0
  327. package/src/constants.ts +29 -0
  328. package/src/controls/Control.ts +385 -0
  329. package/src/controls/changeWidth.ts +53 -0
  330. package/src/controls/commonControls.ts +105 -0
  331. package/src/controls/controlRendering.ts +138 -0
  332. package/src/controls/drag.ts +32 -0
  333. package/src/controls/fireEvent.ts +18 -0
  334. package/src/controls/index.ts +22 -0
  335. package/src/controls/polyControl.ts +135 -0
  336. package/src/controls/rotate.ts +87 -0
  337. package/src/controls/scale.ts +277 -0
  338. package/src/controls/scaleSkew.ts +92 -0
  339. package/src/controls/skew.ts +243 -0
  340. package/src/controls/util.ts +155 -0
  341. package/src/controls/wrapWithFireEvent.ts +25 -0
  342. package/src/controls/wrapWithFixedAnchor.ts +20 -0
  343. package/src/env/browser.ts +32 -0
  344. package/src/env/index.ts +38 -0
  345. package/src/env/node.ts +58 -0
  346. package/src/env/types.ts +15 -0
  347. package/src/filters/{base_filter.class.js → BaseFilter.ts} +203 -151
  348. package/src/filters/BlendColor.ts +219 -0
  349. package/src/filters/BlendImage.ts +230 -0
  350. package/src/filters/Blur.ts +181 -0
  351. package/src/filters/Boilerplate.ts +94 -0
  352. package/src/filters/Brightness.ts +85 -0
  353. package/src/filters/Canvas2dFilterBackend.ts +65 -0
  354. package/src/filters/ColorMatrix.ts +147 -0
  355. package/src/filters/ColorMatrixFilters.ts +79 -0
  356. package/src/filters/Composed.ts +78 -0
  357. package/src/filters/Contrast.ts +84 -0
  358. package/src/filters/Convolute.ts +186 -0
  359. package/src/filters/FilterBackend.ts +38 -0
  360. package/src/filters/GLProbes/GLProbe.ts +7 -0
  361. package/src/filters/GLProbes/NodeGLProbe.ts +15 -0
  362. package/src/filters/GLProbes/WebGLProbe.ts +47 -0
  363. package/src/filters/Gamma.ts +112 -0
  364. package/src/filters/Grayscale.ts +104 -0
  365. package/src/filters/HueRotation.ts +64 -0
  366. package/src/filters/Invert.ts +101 -0
  367. package/src/filters/Noise.ts +96 -0
  368. package/src/filters/Pixelate.ts +98 -0
  369. package/src/filters/RemoveColor.ts +137 -0
  370. package/src/filters/Resize.ts +540 -0
  371. package/src/filters/Saturation.ts +89 -0
  372. package/src/filters/Vibrance.ts +90 -0
  373. package/src/filters/WebGLFilterBackend.ts +456 -0
  374. package/src/filters/filters.ts +28 -0
  375. package/src/filters/index.ts +12 -0
  376. package/src/filters/shaders/baseFilter.ts +17 -0
  377. package/src/filters/shaders/blendColor.ts +33 -0
  378. package/src/filters/shaders/blendImage.ts +32 -0
  379. package/src/filters/shaders/blur.ts +24 -0
  380. package/src/filters/shaders/brightness.ts +11 -0
  381. package/src/filters/shaders/colorMatrix.ts +12 -0
  382. package/src/filters/shaders/constrast.ts +11 -0
  383. package/src/filters/shaders/convolute.ts +154 -0
  384. package/src/filters/shaders/gamma.ts +15 -0
  385. package/src/filters/shaders/grayscale.ts +36 -0
  386. package/src/filters/shaders/invert.ts +19 -0
  387. package/src/filters/shaders/noise.ts +16 -0
  388. package/src/filters/shaders/pixelate.ts +19 -0
  389. package/src/filters/shaders/removeColor.ts +13 -0
  390. package/src/filters/shaders/saturation.ts +15 -0
  391. package/src/filters/shaders/vibrance.ts +16 -0
  392. package/src/filters/typedefs.ts +59 -0
  393. package/src/filters/utils.ts +7 -0
  394. package/src/gradient/Gradient.ts +409 -0
  395. package/src/gradient/constants.ts +12 -0
  396. package/src/gradient/index.ts +2 -0
  397. package/src/gradient/parser/index.ts +3 -0
  398. package/src/gradient/parser/misc.ts +13 -0
  399. package/src/gradient/parser/parseColorStops.ts +56 -0
  400. package/src/gradient/parser/parseCoords.ts +73 -0
  401. package/src/gradient/typedefs.ts +104 -0
  402. package/src/mixins/{eraser_brush.mixin.js → eraser_brush.mixin.ts} +350 -239
  403. package/src/parkinglot/canvas_animation.mixin.ts +121 -0
  404. package/src/parkinglot/straighten.ts +58 -0
  405. package/src/parser/applyViewboxTransform.ts +158 -0
  406. package/src/parser/attributes.ts +25 -0
  407. package/src/parser/constants.ts +116 -0
  408. package/src/parser/doesSomeParentMatch.ts +18 -0
  409. package/src/parser/elementById.ts +21 -0
  410. package/src/parser/elementMatchesRule.ts +16 -0
  411. package/src/parser/elements_parser.ts +158 -0
  412. package/src/parser/getCSSRules.ts +61 -0
  413. package/src/parser/getGlobalStylesForElement.ts +19 -0
  414. package/src/parser/getGradientDefs.ts +31 -0
  415. package/src/parser/getMultipleNodes.ts +15 -0
  416. package/src/parser/getSvgRegex.ts +3 -0
  417. package/src/parser/hasAncestorWithNodeName.ts +14 -0
  418. package/src/parser/index.ts +8 -0
  419. package/src/parser/loadSVGFromString.ts +29 -0
  420. package/src/parser/loadSVGFromURL.ts +47 -0
  421. package/src/parser/normalizeAttr.ts +10 -0
  422. package/src/parser/normalizeValue.ts +64 -0
  423. package/src/parser/parseAttributes.ts +90 -0
  424. package/src/parser/parseFontDeclaration.ts +44 -0
  425. package/src/parser/parsePointsAttribute.ts +34 -0
  426. package/src/parser/parseSVGDocument.ts +118 -0
  427. package/src/parser/parseStyleAttribute.ts +27 -0
  428. package/src/parser/parseStyleObject.ts +15 -0
  429. package/src/parser/parseStyleString.ts +16 -0
  430. package/src/parser/parseTransformAttribute.ts +94 -0
  431. package/src/parser/parseUseDirectives.ts +78 -0
  432. package/src/parser/percent.ts +27 -0
  433. package/src/parser/recursivelyParseGradientsXlink.ts +42 -0
  434. package/src/parser/selectorMatches.ts +25 -0
  435. package/src/parser/setStrokeFillOpacity.ts +40 -0
  436. package/src/parser/typedefs.ts +13 -0
  437. package/src/shapes/ActiveSelection.ts +192 -0
  438. package/src/shapes/Circle.ts +236 -0
  439. package/src/shapes/Ellipse.ts +177 -0
  440. package/src/shapes/Group.ts +1103 -0
  441. package/src/shapes/IText/DraggableTextDelegate.ts +385 -0
  442. package/src/shapes/IText/IText.ts +696 -0
  443. package/src/shapes/IText/ITextBehavior.ts +1073 -0
  444. package/src/shapes/IText/ITextClickBehavior.ts +292 -0
  445. package/src/shapes/IText/ITextKeyBehavior.ts +675 -0
  446. package/src/shapes/IText/constants.ts +53 -0
  447. package/src/shapes/Image.ts +848 -0
  448. package/src/shapes/Line.ts +285 -0
  449. package/src/shapes/Object/AnimatableObject.ts +103 -0
  450. package/src/shapes/Object/FabricObject.ts +29 -0
  451. package/src/shapes/Object/FabricObjectSVGExportMixin.ts +278 -0
  452. package/src/shapes/Object/InteractiveObject.ts +669 -0
  453. package/src/shapes/Object/Object.ts +1589 -0
  454. package/src/shapes/Object/ObjectGeometry.ts +814 -0
  455. package/src/shapes/Object/ObjectOrigin.ts +277 -0
  456. package/src/shapes/Object/StackedObject.ts +206 -0
  457. package/src/shapes/Object/defaultValues.ts +110 -0
  458. package/src/shapes/Object/types/BaseProps.ts +96 -0
  459. package/src/shapes/Object/types/BorderProps.ts +40 -0
  460. package/src/shapes/Object/types/ControlProps.ts +69 -0
  461. package/src/shapes/Object/types/FabricObjectProps.ts +111 -0
  462. package/src/shapes/Object/types/FillStrokeProps.ts +90 -0
  463. package/src/shapes/Object/types/LockInteractionProps.ts +57 -0
  464. package/src/shapes/Object/types/ObjectProps.ts +49 -0
  465. package/src/shapes/Object/types/SerializedObjectProps.ts +73 -0
  466. package/src/shapes/Object/types/index.ts +8 -0
  467. package/src/shapes/Path.ts +434 -0
  468. package/src/shapes/Polygon.ts +22 -0
  469. package/src/shapes/Polyline.ts +364 -0
  470. package/src/shapes/Rect.ts +230 -0
  471. package/src/shapes/Text/StyledText.ts +323 -0
  472. package/src/shapes/Text/Text.ts +1891 -0
  473. package/src/shapes/Text/TextSVGExportMixin.ts +289 -0
  474. package/src/shapes/Text/constants.ts +111 -0
  475. package/src/shapes/Textbox.ts +526 -0
  476. package/src/shapes/Triangle.ts +62 -0
  477. package/src/typedefs.ts +121 -0
  478. package/src/util/animation/AnimationBase.ts +166 -0
  479. package/src/util/animation/AnimationFrameProvider.ts +9 -0
  480. package/src/util/animation/AnimationRegistry.ts +58 -0
  481. package/src/util/animation/ArrayAnimation.ts +27 -0
  482. package/src/util/animation/ColorAnimation.ts +74 -0
  483. package/src/util/animation/ValueAnimation.ts +29 -0
  484. package/src/util/animation/animate.ts +74 -0
  485. package/src/util/animation/easing.ts +327 -0
  486. package/src/util/animation/index.ts +2 -0
  487. package/src/util/animation/types.ts +136 -0
  488. package/src/util/applyMixins.ts +22 -0
  489. package/src/util/dom_event.ts +28 -0
  490. package/src/util/dom_misc.ts +44 -0
  491. package/src/util/dom_request.ts +64 -0
  492. package/src/util/dom_style.ts +20 -0
  493. package/src/util/index.ts +106 -0
  494. package/src/util/internals/cleanupSvgAttribute.test.ts +16 -0
  495. package/src/util/internals/cleanupSvgAttribute.ts +8 -0
  496. package/src/util/internals/cloneDeep.test.ts +16 -0
  497. package/src/util/internals/cloneDeep.ts +2 -0
  498. package/src/util/internals/getRandomInt.test.ts +33 -0
  499. package/src/util/internals/getRandomInt.ts +8 -0
  500. package/src/util/internals/ifNaN.ts +9 -0
  501. package/src/util/internals/index.ts +3 -0
  502. package/src/util/internals/removeFromArray.ts +14 -0
  503. package/src/util/internals/uid.ts +3 -0
  504. package/src/util/lang_string.ts +79 -0
  505. package/src/util/misc/boundingBoxFromPoints.ts +38 -0
  506. package/src/util/misc/capValue.ts +2 -0
  507. package/src/util/misc/cos.ts +24 -0
  508. package/src/util/misc/dom.ts +55 -0
  509. package/src/util/misc/findScaleTo.ts +29 -0
  510. package/src/util/misc/groupSVGElements.ts +15 -0
  511. package/src/util/misc/isTransparent.ts +28 -0
  512. package/src/util/misc/matrix.ts +313 -0
  513. package/src/util/misc/mergeClipPaths.ts +40 -0
  514. package/src/util/misc/objectEnlive.ts +174 -0
  515. package/src/util/misc/objectTransforms.ts +130 -0
  516. package/src/util/misc/pick.ts +29 -0
  517. package/src/util/misc/planeChange.ts +127 -0
  518. package/src/util/misc/projectStroke/StrokeLineCapProjections.ts +113 -0
  519. package/src/util/misc/projectStroke/StrokeLineJoinProjections.ts +227 -0
  520. package/src/util/misc/projectStroke/StrokeProjectionsBase.ts +76 -0
  521. package/src/util/misc/projectStroke/index.ts +55 -0
  522. package/src/util/misc/projectStroke/types.ts +24 -0
  523. package/src/util/misc/radiansDegreesConversion.ts +18 -0
  524. package/src/util/misc/resolveOrigin.ts +22 -0
  525. package/src/util/misc/rotatePoint.ts +15 -0
  526. package/src/util/misc/sin.ts +26 -0
  527. package/src/util/misc/svgParsing.ts +171 -0
  528. package/src/util/misc/textStyles.ts +132 -0
  529. package/src/util/misc/toFixed.ts +8 -0
  530. package/src/util/misc/vectors.ts +83 -0
  531. package/src/util/path/index.ts +1039 -0
  532. package/src/util/path/regex.ts +39 -0
  533. package/src/util/path/typechecks.ts +145 -0
  534. package/src/util/path/typedefs.ts +305 -0
  535. package/src/util/transform_matrix_removal.ts +61 -0
  536. package/src/util/typeAssertions.ts +78 -0
  537. package/tsconfig.json +106 -0
  538. package/HEADER.js +0 -203
  539. package/build.js +0 -287
  540. package/dist/fabric.js +0 -31187
  541. package/dist/fabric.min.js +0 -1
  542. package/old-travis-reference.yml +0 -97
  543. package/src/brushes/circle_brush.class.js +0 -144
  544. package/src/brushes/pattern_brush.class.js +0 -61
  545. package/src/brushes/pencil_brush.class.js +0 -310
  546. package/src/brushes/spray_brush.class.js +0 -219
  547. package/src/canvas.class.js +0 -1312
  548. package/src/color.class.js +0 -636
  549. package/src/control.class.js +0 -339
  550. package/src/controls.actions.js +0 -740
  551. package/src/controls.render.js +0 -99
  552. package/src/elements_parser.js +0 -152
  553. package/src/filters/2d_backend.class.js +0 -65
  554. package/src/filters/blendcolor_filter.class.js +0 -251
  555. package/src/filters/blendimage_filter.class.js +0 -247
  556. package/src/filters/blur_filter.class.js +0 -217
  557. package/src/filters/brightness_filter.class.js +0 -113
  558. package/src/filters/colormatrix_filter.class.js +0 -159
  559. package/src/filters/composed_filter.class.js +0 -72
  560. package/src/filters/contrast_filter.class.js +0 -113
  561. package/src/filters/convolute_filter.class.js +0 -352
  562. package/src/filters/filter_boilerplate.js +0 -111
  563. package/src/filters/filter_generator.js +0 -85
  564. package/src/filters/gamma_filter.class.js +0 -136
  565. package/src/filters/grayscale_filter.class.js +0 -154
  566. package/src/filters/hue_rotation.class.js +0 -107
  567. package/src/filters/invert_filter.class.js +0 -111
  568. package/src/filters/noise_filter.class.js +0 -134
  569. package/src/filters/pixelate_filter.class.js +0 -137
  570. package/src/filters/removecolor_filter.class.js +0 -173
  571. package/src/filters/resize_filter.class.js +0 -490
  572. package/src/filters/saturate_filter.class.js +0 -119
  573. package/src/filters/vibrance_filter.class.js +0 -122
  574. package/src/filters/webgl_backend.class.js +0 -396
  575. package/src/globalFabric.js +0 -4
  576. package/src/gradient.class.js +0 -490
  577. package/src/intersection.class.js +0 -172
  578. package/src/log.js +0 -11
  579. package/src/mixins/animation.mixin.js +0 -231
  580. package/src/mixins/canvas_dataurl_exporter.mixin.js +0 -97
  581. package/src/mixins/canvas_events.mixin.js +0 -974
  582. package/src/mixins/canvas_gestures.mixin.js +0 -149
  583. package/src/mixins/canvas_grouping.mixin.js +0 -177
  584. package/src/mixins/canvas_serialization.mixin.js +0 -228
  585. package/src/mixins/collection.mixin.js +0 -170
  586. package/src/mixins/default_controls.js +0 -114
  587. package/src/mixins/itext.svg_export.js +0 -241
  588. package/src/mixins/itext_behavior.mixin.js +0 -940
  589. package/src/mixins/itext_click_behavior.mixin.js +0 -278
  590. package/src/mixins/itext_key_behavior.mixin.js +0 -694
  591. package/src/mixins/object.svg_export.js +0 -258
  592. package/src/mixins/object_geometry.mixin.js +0 -683
  593. package/src/mixins/object_interactivity.mixin.js +0 -314
  594. package/src/mixins/object_origin.mixin.js +0 -255
  595. package/src/mixins/object_stacking.mixin.js +0 -80
  596. package/src/mixins/object_straightening.mixin.js +0 -80
  597. package/src/mixins/observable.mixin.js +0 -141
  598. package/src/mixins/shared_methods.mixin.js +0 -94
  599. package/src/mixins/stateful.mixin.js +0 -107
  600. package/src/mixins/text_style.mixin.js +0 -324
  601. package/src/parser.js +0 -1090
  602. package/src/pattern.class.js +0 -189
  603. package/src/point.class.js +0 -337
  604. package/src/shadow.class.js +0 -195
  605. package/src/shapes/active_selection.class.js +0 -155
  606. package/src/shapes/circle.class.js +0 -210
  607. package/src/shapes/ellipse.class.js +0 -181
  608. package/src/shapes/group.class.js +0 -593
  609. package/src/shapes/image.class.js +0 -764
  610. package/src/shapes/itext.class.js +0 -526
  611. package/src/shapes/line.class.js +0 -324
  612. package/src/shapes/object.class.js +0 -2008
  613. package/src/shapes/path.class.js +0 -384
  614. package/src/shapes/polygon.class.js +0 -81
  615. package/src/shapes/polyline.class.js +0 -268
  616. package/src/shapes/rect.class.js +0 -187
  617. package/src/shapes/text.class.js +0 -1696
  618. package/src/shapes/textbox.class.js +0 -461
  619. package/src/shapes/triangle.class.js +0 -93
  620. package/src/static_canvas.class.js +0 -1881
  621. package/src/util/anim_ease.js +0 -398
  622. package/src/util/animate.js +0 -254
  623. package/src/util/animate_color.js +0 -74
  624. package/src/util/dom_event.js +0 -50
  625. package/src/util/dom_misc.js +0 -300
  626. package/src/util/dom_request.js +0 -54
  627. package/src/util/dom_style.js +0 -70
  628. package/src/util/lang_array.js +0 -94
  629. package/src/util/lang_class.js +0 -115
  630. package/src/util/lang_object.js +0 -75
  631. package/src/util/lang_string.js +0 -110
  632. package/src/util/misc.js +0 -1330
  633. package/src/util/named_accessors.mixin.js +0 -428
  634. package/src/util/path.js +0 -829
@@ -0,0 +1,298 @@
1
+ import type { Control } from './controls/Control';
2
+ import type { Point } from './Point';
3
+ import type { FabricObject } from './shapes/Object/FabricObject';
4
+ import type { FabricObject as StaticFabricObject } from './shapes/Object/Object';
5
+ import type { FabricObjectSVGExportMixin } from './shapes/Object/FabricObjectSVGExportMixin';
6
+ import type { Group } from './shapes/Group';
7
+ import type { TOriginX, TOriginY, TRadian } from './typedefs';
8
+ import type { saveObjectTransform } from './util/misc/objectTransforms';
9
+ import type { Canvas } from './canvas/Canvas';
10
+ import type { IText } from './shapes/IText/IText';
11
+ import type { StaticCanvas } from './canvas/StaticCanvas';
12
+
13
+ // eslint-disable-next-line @typescript-eslint/no-empty-interface, @typescript-eslint/no-unused-vars
14
+ export interface BaseFabricObject
15
+ extends StaticFabricObject,
16
+ FabricObjectSVGExportMixin {}
17
+
18
+ export type ModifierKey = keyof Pick<
19
+ MouseEvent | PointerEvent | TouchEvent,
20
+ 'altKey' | 'shiftKey' | 'ctrlKey' | 'metaKey'
21
+ >;
22
+
23
+ export type TOptionalModifierKey = ModifierKey | null | undefined;
24
+
25
+ export type TPointerEvent = MouseEvent | TouchEvent | PointerEvent;
26
+
27
+ export type TransformAction<T extends Transform = Transform, R = void> = (
28
+ eventData: TPointerEvent,
29
+ transform: T,
30
+ x: number,
31
+ y: number
32
+ ) => R;
33
+
34
+ /**
35
+ * Control handlers that define a transformation
36
+ * Those handlers run when the user starts a transform and during a transform
37
+ */
38
+ export type TransformActionHandler<T extends Transform = Transform> =
39
+ TransformAction<T, boolean>;
40
+
41
+ /**
42
+ * Control handlers that run on control click/down/up
43
+ * Those handlers run with or without a transform defined
44
+ */
45
+ export type ControlActionHandler = TransformAction<Transform, any>;
46
+
47
+ export type ControlCallback<R = void> = (
48
+ eventData: TPointerEvent,
49
+ control: Control,
50
+ fabricObject: FabricObject
51
+ ) => R;
52
+
53
+ export type ControlCursorCallback = ControlCallback<string>;
54
+
55
+ /**
56
+ * relative to target's containing coordinate plane
57
+ * both agree on every point
58
+ */
59
+ export type Transform = {
60
+ target: FabricObject;
61
+ action: string;
62
+ actionHandler?: TransformActionHandler;
63
+ corner: string | 0;
64
+ scaleX: number;
65
+ scaleY: number;
66
+ skewX: number;
67
+ skewY: number;
68
+ offsetX: number;
69
+ offsetY: number;
70
+ originX: TOriginX;
71
+ originY: TOriginY;
72
+ ex: number;
73
+ ey: number;
74
+ lastX: number;
75
+ lastY: number;
76
+ theta: TRadian;
77
+ width: number;
78
+ height: number;
79
+ shiftKey: boolean;
80
+ altKey: boolean;
81
+ original: ReturnType<typeof saveObjectTransform> & {
82
+ originX: TOriginX;
83
+ originY: TOriginY;
84
+ };
85
+ // @TODO: investigate if this reset is really needed
86
+ reset?: boolean;
87
+ actionPerformed: boolean;
88
+ };
89
+
90
+ export type TEvent<E extends Event = TPointerEvent> = {
91
+ e: E;
92
+ };
93
+
94
+ type TEventWithTarget<E extends Event = TPointerEvent> = TEvent<E> & {
95
+ target: FabricObject;
96
+ };
97
+
98
+ export type BasicTransformEvent<E extends Event = TPointerEvent> = TEvent<E> & {
99
+ transform: Transform;
100
+ pointer: Point;
101
+ };
102
+
103
+ export type TModificationEvents =
104
+ | 'moving'
105
+ | 'scaling'
106
+ | 'rotating'
107
+ | 'skewing'
108
+ | 'resizing';
109
+
110
+ export type ModifiedEvent<E extends Event = TPointerEvent> = TEvent<E> & {
111
+ transform: Transform;
112
+ target: FabricObject;
113
+ action: string;
114
+ };
115
+
116
+ type ModificationEventsSpec<
117
+ Prefix extends string = '',
118
+ Modification = BasicTransformEvent,
119
+ Modified = ModifiedEvent | never
120
+ > = Record<`${Prefix}${TModificationEvents}`, Modification> &
121
+ Record<`${Prefix}modified`, Modified>;
122
+
123
+ type ObjectModificationEvents = ModificationEventsSpec;
124
+
125
+ type CanvasModificationEvents = ModificationEventsSpec<
126
+ 'object:',
127
+ BasicTransformEvent & { target: FabricObject },
128
+ ModifiedEvent | { target: FabricObject }
129
+ > & {
130
+ 'before:transform': TEvent & { transform: Transform };
131
+ };
132
+
133
+ export type TPointerEventInfo<E extends TPointerEvent = TPointerEvent> =
134
+ TEvent<E> & {
135
+ target?: FabricObject;
136
+ subTargets?: FabricObject[];
137
+ button?: number;
138
+ isClick: boolean;
139
+ pointer: Point;
140
+ transform?: Transform | null;
141
+ absolutePointer: Point;
142
+ currentSubTargets?: FabricObject[];
143
+ currentTarget?: FabricObject | null;
144
+ };
145
+
146
+ type SimpleEventHandler<T extends Event = TPointerEvent> = TEvent<T> & {
147
+ target?: FabricObject;
148
+ subTargets: FabricObject[];
149
+ };
150
+
151
+ type InEvent = {
152
+ previousTarget?: FabricObject;
153
+ };
154
+
155
+ type OutEvent = {
156
+ nextTarget?: FabricObject;
157
+ };
158
+
159
+ export type DragEventData = TEvent<DragEvent> & {
160
+ target?: FabricObject;
161
+ subTargets?: FabricObject[];
162
+ dragSource?: FabricObject;
163
+ canDrop?: boolean;
164
+ didDrop?: boolean;
165
+ dropTarget?: FabricObject;
166
+ };
167
+
168
+ export type DropEventData = DragEventData & { pointer: Point };
169
+
170
+ interface DnDEvents {
171
+ dragstart: TEventWithTarget<DragEvent>;
172
+ drag: DragEventData;
173
+ dragover: DragEventData;
174
+ dragenter: DragEventData & InEvent;
175
+ dragleave: DragEventData & OutEvent;
176
+ dragend: DragEventData;
177
+ 'drop:before': DropEventData;
178
+ drop: DropEventData;
179
+ 'drop:after': DropEventData;
180
+ }
181
+
182
+ interface CanvasDnDEvents extends DnDEvents {
183
+ 'drag:enter': DragEventData & InEvent;
184
+ 'drag:leave': DragEventData & OutEvent;
185
+ }
186
+
187
+ interface CanvasSelectionEvents {
188
+ 'selection:created': Partial<TEvent> & {
189
+ selected: FabricObject[];
190
+ };
191
+ 'selection:updated': Partial<TEvent> & {
192
+ selected: FabricObject[];
193
+ deselected: FabricObject[];
194
+ };
195
+ 'before:selection:cleared': Partial<TEvent> & {
196
+ deselected: FabricObject[];
197
+ };
198
+ 'selection:cleared': Partial<TEvent> & {
199
+ deselected: FabricObject[];
200
+ };
201
+ }
202
+
203
+ export interface CollectionEvents {
204
+ 'object:added': { target: StaticFabricObject };
205
+ 'object:removed': { target: StaticFabricObject };
206
+ }
207
+
208
+ type BeforeSuffix<T extends string> = `${T}:before`;
209
+ type WithBeforeSuffix<T extends string> = T | BeforeSuffix<T>;
210
+
211
+ type TPointerEvents<Prefix extends string> = Record<
212
+ `${Prefix}${
213
+ | WithBeforeSuffix<'down'>
214
+ | WithBeforeSuffix<'move'>
215
+ | WithBeforeSuffix<'up'>
216
+ | 'dblclick'}`,
217
+ TPointerEventInfo
218
+ > &
219
+ Record<`${Prefix}wheel`, TPointerEventInfo<WheelEvent>> &
220
+ Record<`${Prefix}over`, TPointerEventInfo & InEvent> &
221
+ Record<`${Prefix}out`, TPointerEventInfo & OutEvent>;
222
+
223
+ export type TPointerEventNames =
224
+ | WithBeforeSuffix<'down'>
225
+ | WithBeforeSuffix<'move'>
226
+ | WithBeforeSuffix<'up'>
227
+ | 'dblclick'
228
+ | 'wheel';
229
+
230
+ export type ObjectPointerEvents = TPointerEvents<'mouse'>;
231
+ export type CanvasPointerEvents = TPointerEvents<'mouse:'>;
232
+
233
+ export interface MiscEvents {
234
+ 'contextmenu:before': SimpleEventHandler<Event>;
235
+ contextmenu: SimpleEventHandler<Event>;
236
+ }
237
+
238
+ export interface ObjectEvents
239
+ extends ObjectPointerEvents,
240
+ DnDEvents,
241
+ MiscEvents,
242
+ ObjectModificationEvents {
243
+ // selection
244
+ selected: Partial<TEvent> & {
245
+ target: FabricObject;
246
+ };
247
+ deselected: Partial<TEvent> & {
248
+ target: FabricObject;
249
+ };
250
+
251
+ // tree
252
+ added: { target: Group | Canvas | StaticCanvas };
253
+ removed: { target: Group | Canvas | StaticCanvas };
254
+
255
+ // erasing
256
+ 'erasing:end': { path: FabricObject };
257
+ }
258
+
259
+ export interface StaticCanvasEvents extends CollectionEvents {
260
+ // tree
261
+ 'canvas:cleared': never;
262
+
263
+ // rendering
264
+ 'before:render': { ctx: CanvasRenderingContext2D };
265
+ 'after:render': { ctx: CanvasRenderingContext2D };
266
+ }
267
+
268
+ export interface CanvasEvents
269
+ extends StaticCanvasEvents,
270
+ CanvasPointerEvents,
271
+ CanvasDnDEvents,
272
+ MiscEvents,
273
+ CanvasModificationEvents,
274
+ CanvasSelectionEvents {
275
+ // brushes
276
+ 'before:path:created': { path: FabricObject };
277
+ 'path:created': { path: FabricObject };
278
+
279
+ // erasing
280
+ 'erasing:start': never;
281
+ 'erasing:end':
282
+ | never
283
+ | {
284
+ path: FabricObject;
285
+ targets: FabricObject[];
286
+ subTargets: FabricObject[];
287
+ drawables: {
288
+ backgroundImage?: FabricObject;
289
+ overlayImage?: FabricObject;
290
+ };
291
+ };
292
+
293
+ // IText
294
+ 'text:selection:changed': { target: IText };
295
+ 'text:changed': { target: IText };
296
+ 'text:editing:entered': { target: IText };
297
+ 'text:editing:exited': { target: IText };
298
+ }
@@ -0,0 +1,302 @@
1
+ import { Point } from './Point';
2
+ import { createVector } from './util/misc/vectors';
3
+
4
+ /* Adaptation of work of Kevin Lindsey (kevin@kevlindev.com) */
5
+
6
+ export type IntersectionType = 'Intersection' | 'Coincident' | 'Parallel';
7
+
8
+ export class Intersection {
9
+ declare points: Point[];
10
+
11
+ declare status?: IntersectionType;
12
+
13
+ constructor(status?: IntersectionType) {
14
+ this.status = status;
15
+ this.points = [];
16
+ }
17
+
18
+ /**
19
+ * Used to verify if a point is alredy in the collection
20
+ * @param {Point} point
21
+ * @returns {boolean}
22
+ */
23
+ private includes(point: Point): boolean {
24
+ return this.points.some((p) => p.eq(point));
25
+ }
26
+
27
+ /**
28
+ * Appends points of intersection
29
+ * @param {...Point[]} points
30
+ * @return {Intersection} thisArg
31
+ * @chainable
32
+ */
33
+ private append(...points: Point[]): Intersection {
34
+ this.points = this.points.concat(
35
+ points.filter((point) => {
36
+ return !this.includes(point);
37
+ })
38
+ );
39
+ return this;
40
+ }
41
+
42
+ /**
43
+ * check if point T is on the segment or line defined between A and B
44
+ *
45
+ * @param {Point} T the point we are checking for
46
+ * @param {Point} A one extremity of the segment
47
+ * @param {Point} B the other extremity of the segment
48
+ * @param [infinite] if true checks if `T` is on the line defined by `A` and `B`
49
+ * @returns true if `T` is contained
50
+ */
51
+ static isPointContained(T: Point, A: Point, B: Point, infinite = false) {
52
+ if (A.eq(B)) {
53
+ // Edge case: the segment is a point, we check for coincidence,
54
+ // infinite param has no meaning because there are infinite lines to consider
55
+ return T.eq(A);
56
+ } else if (A.x === B.x) {
57
+ // Edge case: horizontal line.
58
+ // we first check if T.x has the same value, and then if T.y is contained between A.y and B.y
59
+ return (
60
+ T.x === A.x &&
61
+ (infinite || (T.y >= Math.min(A.y, B.y) && T.y <= Math.max(A.y, B.y)))
62
+ );
63
+ } else if (A.y === B.y) {
64
+ // Edge case: vertical line.
65
+ // we first check if T.y has the same value, and then if T.x is contained between A.x and B.x
66
+ return (
67
+ T.y === A.y &&
68
+ (infinite || (T.x >= Math.min(A.x, B.x) && T.x <= Math.max(A.x, B.x)))
69
+ );
70
+ } else {
71
+ // Generic case: sloped line.
72
+ // we check that AT has the same slope as AB
73
+ // for the segment case we need both the vectors to have the same direction and for AT to be lte AB in size
74
+ // for the infinite case we check the absolute value of the slope, since direction is meaningless
75
+ const AB = createVector(A, B);
76
+ const AT = createVector(A, T);
77
+ const s = AT.divide(AB);
78
+ return infinite
79
+ ? Math.abs(s.x) === Math.abs(s.y)
80
+ : s.x === s.y && s.x >= 0 && s.x <= 1;
81
+ }
82
+ }
83
+
84
+ /**
85
+ * Checks if a line intersects another
86
+ * @see {@link https://en.wikipedia.org/wiki/Line%E2%80%93line_intersection line intersection}
87
+ * @see {@link https://en.wikipedia.org/wiki/Cramer%27s_rule Cramer's rule}
88
+ * @static
89
+ * @param {Point} a1
90
+ * @param {Point} a2
91
+ * @param {Point} b1
92
+ * @param {Point} b2
93
+ * @param {boolean} [aInfinite=true] check segment intersection by passing `false`
94
+ * @param {boolean} [bInfinite=true] check segment intersection by passing `false`
95
+ * @return {Intersection}
96
+ */
97
+ static intersectLineLine(
98
+ a1: Point,
99
+ a2: Point,
100
+ b1: Point,
101
+ b2: Point,
102
+ aInfinite = true,
103
+ bInfinite = true
104
+ ): Intersection {
105
+ const a2xa1x = a2.x - a1.x,
106
+ a2ya1y = a2.y - a1.y,
107
+ b2xb1x = b2.x - b1.x,
108
+ b2yb1y = b2.y - b1.y,
109
+ a1xb1x = a1.x - b1.x,
110
+ a1yb1y = a1.y - b1.y,
111
+ uaT = b2xb1x * a1yb1y - b2yb1y * a1xb1x,
112
+ ubT = a2xa1x * a1yb1y - a2ya1y * a1xb1x,
113
+ uB = b2yb1y * a2xa1x - b2xb1x * a2ya1y;
114
+ if (uB !== 0) {
115
+ const ua = uaT / uB,
116
+ ub = ubT / uB;
117
+ if (
118
+ (aInfinite || (0 <= ua && ua <= 1)) &&
119
+ (bInfinite || (0 <= ub && ub <= 1))
120
+ ) {
121
+ return new Intersection('Intersection').append(
122
+ new Point(a1.x + ua * a2xa1x, a1.y + ua * a2ya1y)
123
+ );
124
+ } else {
125
+ return new Intersection();
126
+ }
127
+ } else {
128
+ if (uaT === 0 || ubT === 0) {
129
+ const segmentsCoincide =
130
+ aInfinite ||
131
+ bInfinite ||
132
+ Intersection.isPointContained(a1, b1, b2) ||
133
+ Intersection.isPointContained(a2, b1, b2) ||
134
+ Intersection.isPointContained(b1, a1, a2) ||
135
+ Intersection.isPointContained(b2, a1, a2);
136
+ return new Intersection(segmentsCoincide ? 'Coincident' : undefined);
137
+ } else {
138
+ return new Intersection('Parallel');
139
+ }
140
+ }
141
+ }
142
+
143
+ /**
144
+ * Checks if a segment intersects a line
145
+ * @see {@link intersectLineLine} for line intersection
146
+ * @static
147
+ * @param {Point} s1 boundary point of segment
148
+ * @param {Point} s2 other boundary point of segment
149
+ * @param {Point} l1 point on line
150
+ * @param {Point} l2 other point on line
151
+ * @return {Intersection}
152
+ */
153
+ static intersectSegmentLine(
154
+ s1: Point,
155
+ s2: Point,
156
+ l1: Point,
157
+ l2: Point
158
+ ): Intersection {
159
+ return Intersection.intersectLineLine(s1, s2, l1, l2, false, true);
160
+ }
161
+
162
+ /**
163
+ * Checks if a segment intersects another
164
+ * @see {@link intersectLineLine} for line intersection
165
+ * @static
166
+ * @param {Point} a1 boundary point of segment
167
+ * @param {Point} a2 other boundary point of segment
168
+ * @param {Point} b1 boundary point of segment
169
+ * @param {Point} b2 other boundary point of segment
170
+ * @return {Intersection}
171
+ */
172
+ static intersectSegmentSegment(
173
+ a1: Point,
174
+ a2: Point,
175
+ b1: Point,
176
+ b2: Point
177
+ ): Intersection {
178
+ return Intersection.intersectLineLine(a1, a2, b1, b2, false, false);
179
+ }
180
+
181
+ /**
182
+ * Checks if line intersects polygon
183
+ *
184
+ * @todo account for stroke
185
+ *
186
+ * @static
187
+ * @see {@link intersectSegmentPolygon} for segment intersection
188
+ * @param {Point} a1 point on line
189
+ * @param {Point} a2 other point on line
190
+ * @param {Point[]} points polygon points
191
+ * @param {boolean} [infinite=true] check segment intersection by passing `false`
192
+ * @return {Intersection}
193
+ */
194
+ static intersectLinePolygon(
195
+ a1: Point,
196
+ a2: Point,
197
+ points: Point[],
198
+ infinite = true
199
+ ): Intersection {
200
+ const result = new Intersection();
201
+ const length = points.length;
202
+
203
+ for (let i = 0, b1, b2, inter; i < length; i++) {
204
+ b1 = points[i];
205
+ b2 = points[(i + 1) % length];
206
+ inter = Intersection.intersectLineLine(a1, a2, b1, b2, infinite, false);
207
+ if (inter.status === 'Coincident') {
208
+ return inter;
209
+ }
210
+ result.append(...inter.points);
211
+ }
212
+
213
+ if (result.points.length > 0) {
214
+ result.status = 'Intersection';
215
+ }
216
+
217
+ return result;
218
+ }
219
+
220
+ /**
221
+ * Checks if segment intersects polygon
222
+ * @static
223
+ * @see {@link intersectLinePolygon} for line intersection
224
+ * @param {Point} a1 boundary point of segment
225
+ * @param {Point} a2 other boundary point of segment
226
+ * @param {Point[]} points polygon points
227
+ * @return {Intersection}
228
+ */
229
+ static intersectSegmentPolygon(
230
+ a1: Point,
231
+ a2: Point,
232
+ points: Point[]
233
+ ): Intersection {
234
+ return Intersection.intersectLinePolygon(a1, a2, points, false);
235
+ }
236
+
237
+ /**
238
+ * Checks if polygon intersects another polygon
239
+ *
240
+ * @todo account for stroke
241
+ *
242
+ * @static
243
+ * @param {Point[]} points1
244
+ * @param {Point[]} points2
245
+ * @return {Intersection}
246
+ */
247
+ static intersectPolygonPolygon(
248
+ points1: Point[],
249
+ points2: Point[]
250
+ ): Intersection {
251
+ const result = new Intersection(),
252
+ length = points1.length;
253
+ const coincidences: Intersection[] = [];
254
+
255
+ for (let i = 0; i < length; i++) {
256
+ const a1 = points1[i],
257
+ a2 = points1[(i + 1) % length],
258
+ inter = Intersection.intersectSegmentPolygon(a1, a2, points2);
259
+ if (inter.status === 'Coincident') {
260
+ coincidences.push(inter);
261
+ result.append(a1, a2);
262
+ } else {
263
+ result.append(...inter.points);
264
+ }
265
+ }
266
+
267
+ if (coincidences.length > 0 && coincidences.length === points1.length) {
268
+ return new Intersection('Coincident');
269
+ } else if (result.points.length > 0) {
270
+ result.status = 'Intersection';
271
+ }
272
+
273
+ return result;
274
+ }
275
+
276
+ /**
277
+ * Checks if polygon intersects rectangle
278
+ * @static
279
+ * @see {@link intersectPolygonPolygon} for polygon intersection
280
+ * @param {Point[]} points polygon points
281
+ * @param {Point} r1 top left point of rect
282
+ * @param {Point} r2 bottom right point of rect
283
+ * @return {Intersection}
284
+ */
285
+ static intersectPolygonRectangle(
286
+ points: Point[],
287
+ r1: Point,
288
+ r2: Point
289
+ ): Intersection {
290
+ const min = r1.min(r2),
291
+ max = r1.max(r2),
292
+ topRight = new Point(max.x, min.y),
293
+ bottomLeft = new Point(min.x, max.y);
294
+
295
+ return Intersection.intersectPolygonPolygon(points, [
296
+ min,
297
+ topRight,
298
+ max,
299
+ bottomLeft,
300
+ ]);
301
+ }
302
+ }