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,296 @@
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
+ type 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
+ type CanvasDnDEvents = DnDEvents & {
183
+ 'drag:enter': DragEventData & InEvent;
184
+ 'drag:leave': DragEventData & OutEvent;
185
+ };
186
+
187
+ type 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 type 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 type MiscEvents = {
234
+ 'contextmenu:before': SimpleEventHandler<Event>;
235
+ contextmenu: SimpleEventHandler<Event>;
236
+ };
237
+
238
+ export type ObjectEvents = ObjectPointerEvents &
239
+ DnDEvents &
240
+ MiscEvents &
241
+ ObjectModificationEvents & {
242
+ // selection
243
+ selected: Partial<TEvent> & {
244
+ target: FabricObject;
245
+ };
246
+ deselected: Partial<TEvent> & {
247
+ target: FabricObject;
248
+ };
249
+
250
+ // tree
251
+ added: { target: Group | Canvas | StaticCanvas };
252
+ removed: { target: Group | Canvas | StaticCanvas };
253
+
254
+ // erasing
255
+ 'erasing:end': { path: FabricObject };
256
+ };
257
+
258
+ export type StaticCanvasEvents = CollectionEvents & {
259
+ // tree
260
+ 'canvas:cleared': never;
261
+
262
+ // rendering
263
+ 'before:render': { ctx: CanvasRenderingContext2D };
264
+ 'after:render': { ctx: CanvasRenderingContext2D };
265
+ };
266
+
267
+ export type CanvasEvents = StaticCanvasEvents &
268
+ CanvasPointerEvents &
269
+ CanvasDnDEvents &
270
+ MiscEvents &
271
+ CanvasModificationEvents &
272
+ CanvasSelectionEvents & {
273
+ // brushes
274
+ 'before:path:created': { path: FabricObject };
275
+ 'path:created': { path: FabricObject };
276
+
277
+ // erasing
278
+ 'erasing:start': never;
279
+ 'erasing:end':
280
+ | never
281
+ | {
282
+ path: FabricObject;
283
+ targets: FabricObject[];
284
+ subTargets: FabricObject[];
285
+ drawables: {
286
+ backgroundImage?: FabricObject;
287
+ overlayImage?: FabricObject;
288
+ };
289
+ };
290
+
291
+ // IText
292
+ 'text:selection:changed': { target: IText };
293
+ 'text:changed': { target: IText };
294
+ 'text:editing:entered': { target: IText };
295
+ 'text:editing:exited': { target: IText };
296
+ };
@@ -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
+ }