fabric 5.3.0 → 6.0.0-beta1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (533) hide show
  1. package/.babelrc +11 -0
  2. package/.babelrcAlt +19 -0
  3. package/.browserslistrc +5 -0
  4. package/.eslintrc.js +43 -0
  5. package/.eslintrc.json +38 -46
  6. package/.eslintrc_tests +12 -0
  7. package/.gitattributes +2 -0
  8. package/.prettierignore +16 -0
  9. package/.prettierrc +4 -0
  10. package/CHANGELOG.md +491 -189
  11. package/CONTRIBUTING.md +226 -58
  12. package/README.md +188 -239
  13. package/bower.json +1 -3
  14. package/dist/fabric.d.ts +1021 -0
  15. package/dist/index.cjs +28027 -0
  16. package/dist/index.cjs.map +1 -0
  17. package/dist/index.d.ts +2 -0
  18. package/dist/index.min.js +1 -0
  19. package/dist/index.mjs +27964 -0
  20. package/dist/index.mjs.map +1 -0
  21. package/dist/index.node.cjs +28092 -0
  22. package/dist/index.node.cjs.map +1 -0
  23. package/dist/index.node.d.ts +15 -0
  24. package/dist/index.node.mjs +28035 -0
  25. package/dist/index.node.mjs.map +1 -0
  26. package/dist/src/Collection.d.ts +126 -0
  27. package/dist/src/CommonMethods.d.ts +32 -0
  28. package/dist/src/EventTypeDefs.d.ts +226 -0
  29. package/dist/src/Intersection.d.ts +100 -0
  30. package/dist/src/Observable.d.ts +54 -0
  31. package/dist/src/Pattern.d.ts +104 -0
  32. package/dist/src/Point.d.ts +232 -0
  33. package/dist/src/Shadow.d.ts +87 -0
  34. package/dist/src/brushes/BaseBrush.d.ts +105 -0
  35. package/dist/src/brushes/CircleBrush.d.ts +49 -0
  36. package/dist/src/brushes/PatternBrush.d.ts +23 -0
  37. package/dist/src/brushes/PencilBrush.d.ts +92 -0
  38. package/dist/src/brushes/SprayBrush.d.ts +79 -0
  39. package/dist/src/cache.d.ts +46 -0
  40. package/dist/src/canvas/Canvas.d.ts +567 -0
  41. package/dist/src/canvas/SelectableCanvas.d.ts +723 -0
  42. package/dist/src/canvas/StaticCanvas.d.ts +751 -0
  43. package/dist/src/canvas/TextEditingManager.d.ts +17 -0
  44. package/dist/src/canvas/canvas_gestures.mixin.d.ts +2 -0
  45. package/dist/src/color/Color.d.ts +174 -0
  46. package/dist/src/color/color_map.d.ts +155 -0
  47. package/dist/src/color/constants.d.ts +22 -0
  48. package/dist/src/color/util.d.ts +12 -0
  49. package/dist/src/config.d.ts +115 -0
  50. package/dist/src/constants.d.ts +14 -0
  51. package/dist/src/controls/Control.d.ts +228 -0
  52. package/dist/src/controls/changeWidth.d.ts +13 -0
  53. package/dist/src/controls/controls.render.d.ts +29 -0
  54. package/dist/src/controls/default_controls.d.ts +50 -0
  55. package/dist/src/controls/drag.d.ts +12 -0
  56. package/dist/src/controls/polyControl.d.ts +5 -0
  57. package/dist/src/controls/rotate.d.ts +12 -0
  58. package/dist/src/controls/scale.d.ts +47 -0
  59. package/dist/src/controls/scaleSkew.d.ts +39 -0
  60. package/dist/src/controls/skew.d.ts +33 -0
  61. package/dist/src/controls/util.d.ts +41 -0
  62. package/dist/src/controls/wrapWithFireEvent.d.ts +8 -0
  63. package/dist/src/controls/wrapWithFixedAnchor.d.ts +9 -0
  64. package/dist/src/env/browser.d.ts +3 -0
  65. package/dist/src/env/index.d.ts +7 -0
  66. package/dist/src/env/node.d.ts +3 -0
  67. package/dist/src/env/types.d.ts +15 -0
  68. package/dist/src/filters/BaseFilter.d.ts +156 -0
  69. package/dist/src/filters/BlendColor.d.ts +80 -0
  70. package/dist/src/filters/BlendImage.d.ts +90 -0
  71. package/dist/src/filters/Blur.d.ts +50 -0
  72. package/dist/src/filters/Boilerplate.d.ts +46 -0
  73. package/dist/src/filters/Brightness.d.ts +46 -0
  74. package/dist/src/filters/Canvas2dFilterBackend.d.ts +27 -0
  75. package/dist/src/filters/ColorMatrix.d.ts +62 -0
  76. package/dist/src/filters/ColorMatrixFilters.d.ts +1169 -0
  77. package/dist/src/filters/Composed.d.ts +47 -0
  78. package/dist/src/filters/Contrast.d.ts +44 -0
  79. package/dist/src/filters/Convolute.d.ts +82 -0
  80. package/dist/src/filters/FilterBackend.d.ts +14 -0
  81. package/dist/src/filters/Gamma.d.ts +53 -0
  82. package/dist/src/filters/Grayscale.d.ts +45 -0
  83. package/dist/src/filters/HueRotation.d.ts +24 -0
  84. package/dist/src/filters/Invert.d.ts +54 -0
  85. package/dist/src/filters/Noise.d.ts +53 -0
  86. package/dist/src/filters/Pixelate.d.ts +43 -0
  87. package/dist/src/filters/RemoveColor.d.ts +62 -0
  88. package/dist/src/filters/Resize.d.ts +134 -0
  89. package/dist/src/filters/Saturation.d.ts +47 -0
  90. package/dist/src/filters/Vibrance.d.ts +47 -0
  91. package/dist/src/filters/WebGLFilterBackend.d.ts +126 -0
  92. package/dist/src/filters/WebGLProbe.d.ts +28 -0
  93. package/dist/src/filters/typedefs.d.ts +49 -0
  94. package/dist/src/gradient/Gradient.d.ts +149 -0
  95. package/dist/src/gradient/constants.d.ts +15 -0
  96. package/dist/src/gradient/parser/index.d.ts +4 -0
  97. package/dist/src/gradient/parser/misc.d.ts +4 -0
  98. package/dist/src/gradient/parser/parseColorStops.d.ts +6 -0
  99. package/dist/src/gradient/parser/parseCoords.d.ts +17 -0
  100. package/dist/src/gradient/typedefs.d.ts +93 -0
  101. package/dist/src/mixins/eraser_brush.mixin.d.ts +2 -0
  102. package/dist/src/mixins/stateful.mixin.d.ts +18 -0
  103. package/dist/src/parkinglot/canvas_animation.mixin.d.ts +2 -0
  104. package/dist/src/parkinglot/straighten.d.ts +2 -0
  105. package/dist/src/parser/applyViewboxTransform.d.ts +5 -0
  106. package/dist/src/parser/attributes.d.ts +6 -0
  107. package/dist/src/parser/constants.d.ts +54 -0
  108. package/dist/src/parser/doesSomeParentMatch.d.ts +2 -0
  109. package/dist/src/parser/elementById.d.ts +6 -0
  110. package/dist/src/parser/elementMatchesRule.d.ts +5 -0
  111. package/dist/src/parser/elements_parser.d.ts +3 -0
  112. package/dist/src/parser/getCSSRules.d.ts +7 -0
  113. package/dist/src/parser/getGlobalStylesForElement.d.ts +5 -0
  114. package/dist/src/parser/getGradientDefs.d.ts +7 -0
  115. package/dist/src/parser/getMultipleNodes.d.ts +2 -0
  116. package/dist/src/parser/getSvgRegex.d.ts +2 -0
  117. package/dist/src/parser/hasAncestorWithNodeName.d.ts +2 -0
  118. package/dist/src/parser/loadSVGFromString.d.ts +12 -0
  119. package/dist/src/parser/loadSVGFromURL.d.ts +13 -0
  120. package/dist/src/parser/normalizeAttr.d.ts +2 -0
  121. package/dist/src/parser/normalizeValue.d.ts +2 -0
  122. package/dist/src/parser/parseAttributes.d.ts +9 -0
  123. package/dist/src/parser/parseElements.d.ts +11 -0
  124. package/dist/src/parser/parseFontDeclaration.d.ts +10 -0
  125. package/dist/src/parser/parsePointsAttribute.d.ts +12 -0
  126. package/dist/src/parser/parseSVGDocument.d.ts +15 -0
  127. package/dist/src/parser/parseStyleAttribute.d.ts +9 -0
  128. package/dist/src/parser/parseStyleObject.d.ts +2 -0
  129. package/dist/src/parser/parseStyleString.d.ts +2 -0
  130. package/dist/src/parser/parseTransformAttribute.d.ts +10 -0
  131. package/dist/src/parser/parseUseDirectives.d.ts +2 -0
  132. package/dist/src/parser/percent.d.ts +9 -0
  133. package/dist/src/parser/recursivelyParseGradientsXlink.d.ts +2 -0
  134. package/dist/src/parser/rotateMatrix.d.ts +2 -0
  135. package/dist/src/parser/scaleMatrix.d.ts +2 -0
  136. package/dist/src/parser/selectorMatches.d.ts +2 -0
  137. package/dist/src/parser/setStrokeFillOpacity.d.ts +6 -0
  138. package/dist/src/parser/skewMatrix.d.ts +2 -0
  139. package/dist/src/parser/translateMatrix.d.ts +2 -0
  140. package/dist/src/shapes/ActiveSelection.d.ts +66 -0
  141. package/dist/src/shapes/Circle.d.ts +80 -0
  142. package/dist/src/shapes/Ellipse.d.ts +74 -0
  143. package/dist/src/shapes/Group.d.ts +381 -0
  144. package/dist/src/shapes/IText/DraggableTextDelegate.d.ts +78 -0
  145. package/dist/src/shapes/IText/IText.d.ts +322 -0
  146. package/dist/src/shapes/IText/ITextBehavior.d.ts +285 -0
  147. package/dist/src/shapes/IText/ITextClickBehavior.d.ts +81 -0
  148. package/dist/src/shapes/IText/ITextKeyBehavior.d.ts +193 -0
  149. package/dist/src/shapes/IText/constants.d.ts +13 -0
  150. package/dist/src/shapes/Image.d.ts +283 -0
  151. package/dist/src/shapes/Line.d.ts +117 -0
  152. package/dist/src/shapes/Object/AnimatableObject.d.ts +33 -0
  153. package/dist/src/shapes/Object/FabricObject.d.ts +9 -0
  154. package/dist/src/shapes/Object/FabricObjectSVGExportMixin.d.ts +74 -0
  155. package/dist/src/shapes/Object/InteractiveObject.d.ts +282 -0
  156. package/dist/src/shapes/Object/Object.d.ts +906 -0
  157. package/dist/src/shapes/Object/ObjectGeometry.d.ts +343 -0
  158. package/dist/src/shapes/Object/ObjectOrigin.d.ts +178 -0
  159. package/dist/src/shapes/Object/StackedObject.d.ts +62 -0
  160. package/dist/src/shapes/Object/defaultValues.d.ts +77 -0
  161. package/dist/src/shapes/Path.d.ts +123 -0
  162. package/dist/src/shapes/Polygon.d.ts +7 -0
  163. package/dist/src/shapes/Polyline.d.ts +130 -0
  164. package/dist/src/shapes/Rect.d.ts +62 -0
  165. package/dist/src/shapes/Text/StyledText.d.ts +118 -0
  166. package/dist/src/shapes/Text/Text.d.ts +656 -0
  167. package/dist/src/shapes/Text/TextSVGExportMixin.d.ts +32 -0
  168. package/dist/src/shapes/Textbox.d.ts +170 -0
  169. package/dist/src/shapes/Triangle.d.ts +17 -0
  170. package/dist/src/typedefs.d.ts +93 -0
  171. package/dist/src/util/animation/AnimationBase.d.ts +54 -0
  172. package/dist/src/util/animation/AnimationFrameProvider.d.ts +8 -0
  173. package/dist/src/util/animation/AnimationRegistry.d.ts +29 -0
  174. package/dist/src/util/animation/ArrayAnimation.d.ts +10 -0
  175. package/dist/src/util/animation/ColorAnimation.d.ts +11 -0
  176. package/dist/src/util/animation/ValueAnimation.d.ts +10 -0
  177. package/dist/src/util/animation/animate.d.ts +37 -0
  178. package/dist/src/util/animation/easing.d.ts +130 -0
  179. package/dist/src/util/animation/types.d.ts +87 -0
  180. package/dist/src/util/applyMixins.d.ts +8 -0
  181. package/dist/src/util/class_registry.d.ts +14 -0
  182. package/dist/src/util/dom_event.d.ts +5 -0
  183. package/dist/src/util/dom_misc.d.ts +40 -0
  184. package/dist/src/util/dom_request.d.ts +14 -0
  185. package/dist/src/util/dom_style.d.ts +7 -0
  186. package/dist/src/util/fireEvent.d.ts +3 -0
  187. package/dist/src/util/internals/cloneDeep.d.ts +2 -0
  188. package/dist/src/util/internals/getRandomInt.d.ts +8 -0
  189. package/dist/src/util/internals/ifNaN.d.ts +8 -0
  190. package/dist/src/util/internals/index.d.ts +4 -0
  191. package/dist/src/util/internals/removeFromArray.d.ts +9 -0
  192. package/dist/src/util/internals/uid.d.ts +2 -0
  193. package/dist/src/util/lang_class.d.ts +12 -0
  194. package/dist/src/util/lang_string.d.ts +22 -0
  195. package/dist/src/util/misc/boundingBoxFromPoints.d.ts +9 -0
  196. package/dist/src/util/misc/capValue.d.ts +2 -0
  197. package/dist/src/util/misc/cos.d.ts +10 -0
  198. package/dist/src/util/misc/dom.d.ts +28 -0
  199. package/dist/src/util/misc/findScaleTo.d.ts +29 -0
  200. package/dist/src/util/misc/groupSVGElements.d.ts +9 -0
  201. package/dist/src/util/misc/isTransparent.d.ts +11 -0
  202. package/dist/src/util/misc/matrix.d.ts +92 -0
  203. package/dist/src/util/misc/mergeClipPaths.d.ts +23 -0
  204. package/dist/src/util/misc/objectEnlive.d.ts +56 -0
  205. package/dist/src/util/misc/objectTransforms.d.ts +68 -0
  206. package/dist/src/util/misc/pick.d.ts +8 -0
  207. package/dist/src/util/misc/planeChange.d.ts +84 -0
  208. package/dist/src/util/misc/projectStroke/StrokeLineCapProjections.d.ts +51 -0
  209. package/dist/src/util/misc/projectStroke/StrokeLineJoinProjections.d.ts +81 -0
  210. package/dist/src/util/misc/projectStroke/StrokeProjectionsBase.d.ts +25 -0
  211. package/dist/src/util/misc/projectStroke/index.d.ts +11 -0
  212. package/dist/src/util/misc/projectStroke/types.d.ts +23 -0
  213. package/dist/src/util/misc/radiansDegreesConversion.d.ts +14 -0
  214. package/dist/src/util/misc/resolveOrigin.d.ts +9 -0
  215. package/dist/src/util/misc/rotatePoint.d.ts +12 -0
  216. package/dist/src/util/misc/sin.d.ts +10 -0
  217. package/dist/src/util/misc/svgParsing.d.ts +53 -0
  218. package/dist/src/util/misc/textStyles.d.ts +32 -0
  219. package/dist/src/util/misc/toFixed.d.ts +8 -0
  220. package/dist/src/util/misc/vectors.d.ts +57 -0
  221. package/dist/src/util/path.d.ts +108 -0
  222. package/dist/src/util/transform_matrix_removal.d.ts +14 -0
  223. package/dist/src/util/types.d.ts +19 -0
  224. package/fabric.ts +427 -0
  225. package/index.node.ts +43 -0
  226. package/index.ts +1 -0
  227. package/package.json +90 -39
  228. package/publish.js +0 -26
  229. package/rollup.config.mjs +79 -0
  230. package/rollup.test.config.js +24 -0
  231. package/scripts/build.mjs +50 -0
  232. package/scripts/buildLock.mjs +115 -0
  233. package/scripts/buildReporter.mjs +15 -0
  234. package/scripts/buildStats.mjs +139 -0
  235. package/scripts/dirname.mjs +14 -0
  236. package/scripts/index.mjs +679 -0
  237. package/scripts/transform_files.mjs +504 -0
  238. package/src/Collection.ts +311 -0
  239. package/src/CommonMethods.ts +63 -0
  240. package/src/EventTypeDefs.ts +294 -0
  241. package/src/Intersection.ts +273 -0
  242. package/src/Observable.ts +175 -0
  243. package/src/Pattern.ts +211 -0
  244. package/src/Point.ts +388 -0
  245. package/src/Shadow.ts +215 -0
  246. package/src/brushes/{base_brush.class.js → BaseBrush.ts} +65 -42
  247. package/src/brushes/CircleBrush.ts +145 -0
  248. package/src/brushes/PatternBrush.ts +70 -0
  249. package/src/brushes/PencilBrush.ts +300 -0
  250. package/src/brushes/SprayBrush.ts +219 -0
  251. package/src/cache.ts +89 -0
  252. package/src/canvas/Canvas.ts +1672 -0
  253. package/src/canvas/SelectableCanvas.ts +1636 -0
  254. package/src/canvas/StaticCanvas.ts +1709 -0
  255. package/src/canvas/TextEditingManager.ts +48 -0
  256. package/src/canvas/canvas_gestures.mixin.ts +207 -0
  257. package/src/color/Color.ts +404 -0
  258. package/src/color/color_map.ts +154 -0
  259. package/src/color/constants.ts +26 -0
  260. package/src/color/util.ts +32 -0
  261. package/src/config.ts +159 -0
  262. package/src/constants.ts +19 -0
  263. package/src/controls/Control.ts +377 -0
  264. package/src/controls/changeWidth.ts +52 -0
  265. package/src/controls/controls.render.ts +138 -0
  266. package/src/controls/default_controls.ts +132 -0
  267. package/src/controls/drag.ts +31 -0
  268. package/src/controls/polyControl.ts +135 -0
  269. package/src/controls/rotate.ts +87 -0
  270. package/src/controls/scale.ts +277 -0
  271. package/src/controls/scaleSkew.ts +92 -0
  272. package/src/controls/skew.ts +242 -0
  273. package/src/controls/util.ts +154 -0
  274. package/src/controls/wrapWithFireEvent.ts +25 -0
  275. package/src/controls/wrapWithFixedAnchor.ts +20 -0
  276. package/src/env/browser.ts +28 -0
  277. package/src/env/index.ts +19 -0
  278. package/src/env/node.ts +52 -0
  279. package/src/env/types.ts +15 -0
  280. package/src/filters/{base_filter.class.js → BaseFilter.ts} +201 -149
  281. package/src/filters/BlendColor.ts +258 -0
  282. package/src/filters/BlendImage.ts +254 -0
  283. package/src/filters/Blur.ts +202 -0
  284. package/src/filters/Boilerplate.ts +91 -0
  285. package/src/filters/Brightness.ts +93 -0
  286. package/src/filters/Canvas2dFilterBackend.ts +65 -0
  287. package/src/filters/ColorMatrix.ts +156 -0
  288. package/src/filters/ColorMatrixFilters.ts +106 -0
  289. package/src/filters/Composed.ts +85 -0
  290. package/src/filters/Contrast.ts +94 -0
  291. package/src/filters/Convolute.ts +341 -0
  292. package/src/filters/FilterBackend.ts +32 -0
  293. package/src/filters/Gamma.ts +127 -0
  294. package/src/filters/Grayscale.ts +137 -0
  295. package/src/filters/HueRotation.ts +66 -0
  296. package/src/filters/Invert.ts +117 -0
  297. package/src/filters/Noise.ts +109 -0
  298. package/src/filters/Pixelate.ts +114 -0
  299. package/src/filters/RemoveColor.ts +148 -0
  300. package/src/filters/Resize.ts +540 -0
  301. package/src/filters/Saturation.ts +100 -0
  302. package/src/filters/Vibrance.ts +103 -0
  303. package/src/filters/WebGLFilterBackend.ts +430 -0
  304. package/src/filters/WebGLProbe.ts +62 -0
  305. package/src/filters/typedefs.ts +65 -0
  306. package/src/gradient/Gradient.ts +401 -0
  307. package/src/gradient/constants.ts +12 -0
  308. package/src/gradient/parser/index.ts +3 -0
  309. package/src/gradient/parser/misc.ts +13 -0
  310. package/src/gradient/parser/parseColorStops.ts +55 -0
  311. package/src/gradient/parser/parseCoords.ts +73 -0
  312. package/src/gradient/typedefs.ts +104 -0
  313. package/src/mixins/{eraser_brush.mixin.js → eraser_brush.mixin.ts} +350 -239
  314. package/src/mixins/stateful.mixin.ts +104 -0
  315. package/src/parkinglot/canvas_animation.mixin.ts +121 -0
  316. package/src/parkinglot/straighten.ts +58 -0
  317. package/src/parser/applyViewboxTransform.ts +162 -0
  318. package/src/parser/attributes.ts +25 -0
  319. package/src/parser/constants.ts +118 -0
  320. package/src/parser/doesSomeParentMatch.ts +19 -0
  321. package/src/parser/elementById.ts +23 -0
  322. package/src/parser/elementMatchesRule.ts +19 -0
  323. package/src/parser/elements_parser.ts +191 -0
  324. package/src/parser/getCSSRules.ts +62 -0
  325. package/src/parser/getGlobalStylesForElement.ts +19 -0
  326. package/src/parser/getGradientDefs.ts +32 -0
  327. package/src/parser/getMultipleNodes.ts +15 -0
  328. package/src/parser/getSvgRegex.ts +5 -0
  329. package/src/parser/hasAncestorWithNodeName.ts +14 -0
  330. package/src/parser/loadSVGFromString.ts +26 -0
  331. package/src/parser/loadSVGFromURL.ts +40 -0
  332. package/src/parser/normalizeAttr.ts +10 -0
  333. package/src/parser/normalizeValue.ts +63 -0
  334. package/src/parser/parseAttributes.ts +90 -0
  335. package/src/parser/parseElements.ts +28 -0
  336. package/src/parser/parseFontDeclaration.ts +44 -0
  337. package/src/parser/parsePointsAttribute.ts +36 -0
  338. package/src/parser/parseSVGDocument.ts +106 -0
  339. package/src/parser/parseStyleAttribute.ts +27 -0
  340. package/src/parser/parseStyleObject.ts +15 -0
  341. package/src/parser/parseStyleString.ts +16 -0
  342. package/src/parser/parseTransformAttribute.ts +155 -0
  343. package/src/parser/parseUseDirectives.ts +79 -0
  344. package/src/parser/percent.ts +27 -0
  345. package/src/parser/recursivelyParseGradientsXlink.ts +42 -0
  346. package/src/parser/rotateMatrix.ts +21 -0
  347. package/src/parser/scaleMatrix.ts +9 -0
  348. package/src/parser/selectorMatches.ts +25 -0
  349. package/src/parser/setStrokeFillOpacity.ts +40 -0
  350. package/src/parser/skewMatrix.ts +6 -0
  351. package/src/parser/translateMatrix.ts +8 -0
  352. package/src/shapes/ActiveSelection.ts +157 -0
  353. package/src/shapes/Circle.ts +205 -0
  354. package/src/shapes/Ellipse.ts +154 -0
  355. package/src/shapes/Group.ts +1053 -0
  356. package/src/shapes/IText/DraggableTextDelegate.ts +394 -0
  357. package/src/shapes/IText/IText.ts +666 -0
  358. package/src/shapes/IText/ITextBehavior.ts +1055 -0
  359. package/src/shapes/IText/ITextClickBehavior.ts +321 -0
  360. package/src/shapes/IText/ITextKeyBehavior.ts +683 -0
  361. package/src/shapes/IText/constants.ts +47 -0
  362. package/src/shapes/Image.ts +789 -0
  363. package/src/shapes/Line.ts +329 -0
  364. package/src/shapes/Object/AnimatableObject.ts +106 -0
  365. package/src/shapes/Object/FabricObject.ts +19 -0
  366. package/src/shapes/Object/FabricObjectSVGExportMixin.ts +277 -0
  367. package/src/shapes/Object/InteractiveObject.ts +645 -0
  368. package/src/shapes/Object/Object.ts +1896 -0
  369. package/src/shapes/Object/ObjectGeometry.ts +830 -0
  370. package/src/shapes/Object/ObjectOrigin.ts +354 -0
  371. package/src/shapes/Object/StackedObject.ts +191 -0
  372. package/src/shapes/Object/defaultValues.ts +112 -0
  373. package/src/shapes/Path.ts +395 -0
  374. package/src/shapes/Polygon.ts +19 -0
  375. package/src/shapes/Polyline.ts +333 -0
  376. package/src/shapes/Rect.ts +199 -0
  377. package/src/shapes/Text/StyledText.ts +319 -0
  378. package/src/shapes/Text/Text.ts +1948 -0
  379. package/src/shapes/Text/TextSVGExportMixin.ts +288 -0
  380. package/src/shapes/Textbox.ts +471 -0
  381. package/src/shapes/Triangle.ts +45 -0
  382. package/src/typedefs.ts +119 -0
  383. package/src/util/animation/AnimationBase.ts +166 -0
  384. package/src/util/animation/AnimationFrameProvider.ts +28 -0
  385. package/src/util/animation/AnimationRegistry.ts +58 -0
  386. package/src/util/animation/ArrayAnimation.ts +27 -0
  387. package/src/util/animation/ColorAnimation.ts +74 -0
  388. package/src/util/animation/ValueAnimation.ts +29 -0
  389. package/src/util/animation/animate.ts +74 -0
  390. package/src/util/animation/easing.ts +327 -0
  391. package/src/util/animation/types.ts +136 -0
  392. package/src/util/applyMixins.ts +22 -0
  393. package/src/util/class_registry.ts +54 -0
  394. package/src/util/dom_event.ts +28 -0
  395. package/src/util/dom_misc.ts +138 -0
  396. package/src/util/dom_request.ts +64 -0
  397. package/src/util/dom_style.ts +20 -0
  398. package/src/util/fireEvent.ts +15 -0
  399. package/src/util/internals/cloneDeep.ts +2 -0
  400. package/src/util/internals/getRandomInt.ts +8 -0
  401. package/src/util/internals/ifNaN.ts +9 -0
  402. package/src/util/internals/index.ts +3 -0
  403. package/src/util/internals/removeFromArray.ts +14 -0
  404. package/src/util/internals/uid.ts +3 -0
  405. package/src/util/lang_class.ts +90 -0
  406. package/src/util/lang_string.ts +79 -0
  407. package/src/util/misc/boundingBoxFromPoints.ts +37 -0
  408. package/src/util/misc/capValue.ts +2 -0
  409. package/src/util/misc/cos.ts +24 -0
  410. package/src/util/misc/dom.ts +50 -0
  411. package/src/util/misc/findScaleTo.ts +44 -0
  412. package/src/util/misc/groupSVGElements.ts +15 -0
  413. package/src/util/misc/isTransparent.ts +51 -0
  414. package/src/util/misc/matrix.ts +207 -0
  415. package/src/util/misc/mergeClipPaths.ts +40 -0
  416. package/src/util/misc/objectEnlive.ts +189 -0
  417. package/src/util/misc/objectTransforms.ts +129 -0
  418. package/src/util/misc/pick.ts +17 -0
  419. package/src/util/misc/planeChange.ts +136 -0
  420. package/src/util/misc/projectStroke/StrokeLineCapProjections.ts +112 -0
  421. package/src/util/misc/projectStroke/StrokeLineJoinProjections.ts +231 -0
  422. package/src/util/misc/projectStroke/StrokeProjectionsBase.ts +75 -0
  423. package/src/util/misc/projectStroke/index.ts +53 -0
  424. package/src/util/misc/projectStroke/types.ts +24 -0
  425. package/src/util/misc/radiansDegreesConversion.ts +18 -0
  426. package/src/util/misc/resolveOrigin.ts +22 -0
  427. package/src/util/misc/rotatePoint.ts +15 -0
  428. package/src/util/misc/sin.ts +26 -0
  429. package/src/util/misc/svgParsing.ts +181 -0
  430. package/src/util/misc/textStyles.ts +133 -0
  431. package/src/util/misc/toFixed.ts +8 -0
  432. package/src/util/misc/vectors.ts +82 -0
  433. package/src/util/path.ts +941 -0
  434. package/src/util/transform_matrix_removal.ts +60 -0
  435. package/src/util/types.ts +78 -0
  436. package/tsconfig.json +106 -0
  437. package/HEADER.js +0 -203
  438. package/build.js +0 -287
  439. package/dist/fabric.js +0 -31187
  440. package/dist/fabric.min.js +0 -1
  441. package/old-travis-reference.yml +0 -97
  442. package/src/brushes/circle_brush.class.js +0 -144
  443. package/src/brushes/pattern_brush.class.js +0 -61
  444. package/src/brushes/pencil_brush.class.js +0 -310
  445. package/src/brushes/spray_brush.class.js +0 -219
  446. package/src/canvas.class.js +0 -1312
  447. package/src/color.class.js +0 -636
  448. package/src/control.class.js +0 -339
  449. package/src/controls.actions.js +0 -740
  450. package/src/controls.render.js +0 -99
  451. package/src/elements_parser.js +0 -152
  452. package/src/filters/2d_backend.class.js +0 -65
  453. package/src/filters/blendcolor_filter.class.js +0 -251
  454. package/src/filters/blendimage_filter.class.js +0 -247
  455. package/src/filters/blur_filter.class.js +0 -217
  456. package/src/filters/brightness_filter.class.js +0 -113
  457. package/src/filters/colormatrix_filter.class.js +0 -159
  458. package/src/filters/composed_filter.class.js +0 -72
  459. package/src/filters/contrast_filter.class.js +0 -113
  460. package/src/filters/convolute_filter.class.js +0 -352
  461. package/src/filters/filter_boilerplate.js +0 -111
  462. package/src/filters/filter_generator.js +0 -85
  463. package/src/filters/gamma_filter.class.js +0 -136
  464. package/src/filters/grayscale_filter.class.js +0 -154
  465. package/src/filters/hue_rotation.class.js +0 -107
  466. package/src/filters/invert_filter.class.js +0 -111
  467. package/src/filters/noise_filter.class.js +0 -134
  468. package/src/filters/pixelate_filter.class.js +0 -137
  469. package/src/filters/removecolor_filter.class.js +0 -173
  470. package/src/filters/resize_filter.class.js +0 -490
  471. package/src/filters/saturate_filter.class.js +0 -119
  472. package/src/filters/vibrance_filter.class.js +0 -122
  473. package/src/filters/webgl_backend.class.js +0 -396
  474. package/src/globalFabric.js +0 -4
  475. package/src/gradient.class.js +0 -490
  476. package/src/intersection.class.js +0 -172
  477. package/src/log.js +0 -11
  478. package/src/mixins/animation.mixin.js +0 -231
  479. package/src/mixins/canvas_dataurl_exporter.mixin.js +0 -97
  480. package/src/mixins/canvas_events.mixin.js +0 -974
  481. package/src/mixins/canvas_gestures.mixin.js +0 -149
  482. package/src/mixins/canvas_grouping.mixin.js +0 -177
  483. package/src/mixins/canvas_serialization.mixin.js +0 -228
  484. package/src/mixins/collection.mixin.js +0 -170
  485. package/src/mixins/default_controls.js +0 -114
  486. package/src/mixins/itext.svg_export.js +0 -241
  487. package/src/mixins/itext_behavior.mixin.js +0 -940
  488. package/src/mixins/itext_click_behavior.mixin.js +0 -278
  489. package/src/mixins/itext_key_behavior.mixin.js +0 -694
  490. package/src/mixins/object.svg_export.js +0 -258
  491. package/src/mixins/object_geometry.mixin.js +0 -683
  492. package/src/mixins/object_interactivity.mixin.js +0 -314
  493. package/src/mixins/object_origin.mixin.js +0 -255
  494. package/src/mixins/object_stacking.mixin.js +0 -80
  495. package/src/mixins/object_straightening.mixin.js +0 -80
  496. package/src/mixins/observable.mixin.js +0 -141
  497. package/src/mixins/shared_methods.mixin.js +0 -94
  498. package/src/mixins/stateful.mixin.js +0 -107
  499. package/src/mixins/text_style.mixin.js +0 -324
  500. package/src/parser.js +0 -1090
  501. package/src/pattern.class.js +0 -189
  502. package/src/point.class.js +0 -337
  503. package/src/shadow.class.js +0 -195
  504. package/src/shapes/active_selection.class.js +0 -155
  505. package/src/shapes/circle.class.js +0 -210
  506. package/src/shapes/ellipse.class.js +0 -181
  507. package/src/shapes/group.class.js +0 -593
  508. package/src/shapes/image.class.js +0 -764
  509. package/src/shapes/itext.class.js +0 -526
  510. package/src/shapes/line.class.js +0 -324
  511. package/src/shapes/object.class.js +0 -2008
  512. package/src/shapes/path.class.js +0 -384
  513. package/src/shapes/polygon.class.js +0 -81
  514. package/src/shapes/polyline.class.js +0 -268
  515. package/src/shapes/rect.class.js +0 -187
  516. package/src/shapes/text.class.js +0 -1696
  517. package/src/shapes/textbox.class.js +0 -461
  518. package/src/shapes/triangle.class.js +0 -93
  519. package/src/static_canvas.class.js +0 -1881
  520. package/src/util/anim_ease.js +0 -398
  521. package/src/util/animate.js +0 -254
  522. package/src/util/animate_color.js +0 -74
  523. package/src/util/dom_event.js +0 -50
  524. package/src/util/dom_misc.js +0 -300
  525. package/src/util/dom_request.js +0 -54
  526. package/src/util/dom_style.js +0 -70
  527. package/src/util/lang_array.js +0 -94
  528. package/src/util/lang_class.js +0 -115
  529. package/src/util/lang_object.js +0 -75
  530. package/src/util/lang_string.js +0 -110
  531. package/src/util/misc.js +0 -1330
  532. package/src/util/named_accessors.mixin.js +0 -428
  533. package/src/util/path.js +0 -829
@@ -0,0 +1,354 @@
1
+ import { Point } from '../../Point';
2
+ import type { Group } from '../Group';
3
+ import { TDegree, TOriginX, TOriginY } from '../../typedefs';
4
+ import { transformPoint } from '../../util/misc/matrix';
5
+ import { sizeAfterTransform } from '../../util/misc/objectTransforms';
6
+ import { degreesToRadians } from '../../util/misc/radiansDegreesConversion';
7
+ import { CommonMethods } from '../../CommonMethods';
8
+ import { resolveOrigin } from '../../util/misc/resolveOrigin';
9
+
10
+ export class ObjectOrigin<EventSpec> extends CommonMethods<EventSpec> {
11
+ /**
12
+ * Top position of an object. Note that by default it's relative to object top. You can change this by setting originY={top/center/bottom}
13
+ * @type Number
14
+ * @default 0
15
+ */
16
+ declare top: number;
17
+
18
+ /**
19
+ * Left position of an object. Note that by default it's relative to object left. You can change this by setting originX={left/center/right}
20
+ * @type Number
21
+ * @default 0
22
+ */
23
+ declare left: number;
24
+
25
+ /**
26
+ * Object width
27
+ * @type Number
28
+ * @default
29
+ */
30
+ declare width: number;
31
+
32
+ /**
33
+ * Object height
34
+ * @type Number
35
+ * @default
36
+ */
37
+ declare height: number;
38
+
39
+ /**
40
+ * Object scale factor (horizontal)
41
+ * @type Number
42
+ * @default 1
43
+ */
44
+ declare scaleX: number;
45
+
46
+ /**
47
+ * Object scale factor (vertical)
48
+ * @type Number
49
+ * @default 1
50
+ */
51
+ declare scaleY: number;
52
+
53
+ /**
54
+ * Angle of skew on x axes of an object (in degrees)
55
+ * @type Number
56
+ * @default 0
57
+ */
58
+ declare skewX: number;
59
+
60
+ /**
61
+ * Angle of skew on y axes of an object (in degrees)
62
+ * @type Number
63
+ * @default 0
64
+ */
65
+ declare skewY: number;
66
+
67
+ /**
68
+ * Horizontal origin of transformation of an object (one of "left", "right", "center")
69
+ * See http://jsfiddle.net/1ow02gea/244/ on how originX/originY affect objects in groups
70
+ * @type String
71
+ * @default 'left'
72
+ */
73
+ declare originX: TOriginX;
74
+
75
+ /**
76
+ * Vertical origin of transformation of an object (one of "top", "bottom", "center")
77
+ * See http://jsfiddle.net/1ow02gea/244/ on how originX/originY affect objects in groups
78
+ * @type String
79
+ * @default 'top'
80
+ */
81
+ declare originY: TOriginY;
82
+
83
+ /**
84
+ * Angle of rotation of an object (in degrees)
85
+ * @type Number
86
+ * @default 0
87
+ */
88
+ declare angle: TDegree;
89
+
90
+ /**
91
+ * Width of a stroke used to render this object
92
+ * @type Number
93
+ * @default 1
94
+ */
95
+ declare strokeWidth: number;
96
+
97
+ /**
98
+ * When `false`, the stoke width will scale with the object.
99
+ * When `true`, the stroke will always match the exact pixel size entered for stroke width.
100
+ * this Property does not work on Text classes or drawing call that uses strokeText,fillText methods
101
+ * default to false
102
+ * @since 2.6.0
103
+ * @type Boolean
104
+ * @default false
105
+ * @type Boolean
106
+ * @default false
107
+ */
108
+ declare strokeUniform: boolean;
109
+
110
+ /**
111
+ * Object containing this object.
112
+ * can influence its size and position
113
+ */
114
+ declare group?: Group;
115
+
116
+ declare _originalOriginX?: TOriginX;
117
+
118
+ declare _originalOriginY?: TOriginY;
119
+
120
+ /**
121
+ * Calculate object bounding box dimensions from its properties scale, skew.
122
+ * @param {Object} [options]
123
+ * @param {Number} [options.scaleX]
124
+ * @param {Number} [options.scaleY]
125
+ * @param {Number} [options.skewX]
126
+ * @param {Number} [options.skewY]
127
+ * @private
128
+ * @returns {Point} dimensions
129
+ */
130
+ _getTransformedDimensions(options: any = {}): Point {
131
+ const dimOptions = {
132
+ scaleX: this.scaleX,
133
+ scaleY: this.scaleY,
134
+ skewX: this.skewX,
135
+ skewY: this.skewY,
136
+ width: this.width,
137
+ height: this.height,
138
+ strokeWidth: this.strokeWidth,
139
+ ...options,
140
+ };
141
+ // stroke is applied before/after transformations are applied according to `strokeUniform`
142
+ const strokeWidth = dimOptions.strokeWidth;
143
+ let preScalingStrokeValue = strokeWidth,
144
+ postScalingStrokeValue = 0;
145
+
146
+ if (this.strokeUniform) {
147
+ preScalingStrokeValue = 0;
148
+ postScalingStrokeValue = strokeWidth;
149
+ }
150
+ const dimX = dimOptions.width + preScalingStrokeValue,
151
+ dimY = dimOptions.height + preScalingStrokeValue,
152
+ noSkew = dimOptions.skewX === 0 && dimOptions.skewY === 0;
153
+ let finalDimensions;
154
+ if (noSkew) {
155
+ finalDimensions = new Point(
156
+ dimX * dimOptions.scaleX,
157
+ dimY * dimOptions.scaleY
158
+ );
159
+ } else {
160
+ finalDimensions = sizeAfterTransform(dimX, dimY, dimOptions);
161
+ }
162
+
163
+ return finalDimensions.scalarAdd(postScalingStrokeValue);
164
+ }
165
+
166
+ /**
167
+ * Translates the coordinates from a set of origin to another (based on the object's dimensions)
168
+ * @param {Point} point The point which corresponds to the originX and originY params
169
+ * @param {TOriginX} fromOriginX Horizontal origin: 'left', 'center' or 'right'
170
+ * @param {TOriginY} fromOriginY Vertical origin: 'top', 'center' or 'bottom'
171
+ * @param {TOriginX} toOriginX Horizontal origin: 'left', 'center' or 'right'
172
+ * @param {TOriginY} toOriginY Vertical origin: 'top', 'center' or 'bottom'
173
+ * @return {Point}
174
+ */
175
+ translateToGivenOrigin(
176
+ point: Point,
177
+ fromOriginX: TOriginX,
178
+ fromOriginY: TOriginY,
179
+ toOriginX: TOriginX,
180
+ toOriginY: TOriginY
181
+ ): Point {
182
+ let x = point.x,
183
+ y = point.y;
184
+ const offsetX = resolveOrigin(toOriginX) - resolveOrigin(fromOriginX),
185
+ offsetY = resolveOrigin(toOriginY) - resolveOrigin(fromOriginY);
186
+
187
+ if (offsetX || offsetY) {
188
+ const dim = this._getTransformedDimensions();
189
+ x += offsetX * dim.x;
190
+ y += offsetY * dim.y;
191
+ }
192
+
193
+ return new Point(x, y);
194
+ }
195
+
196
+ /**
197
+ * Translates the coordinates from origin to center coordinates (based on the object's dimensions)
198
+ * @param {Point} point The point which corresponds to the originX and originY params
199
+ * @param {TOriginX} originX Horizontal origin: 'left', 'center' or 'right'
200
+ * @param {TOriginY} originY Vertical origin: 'top', 'center' or 'bottom'
201
+ * @return {Point}
202
+ */
203
+ translateToCenterPoint(
204
+ point: Point,
205
+ originX: TOriginX,
206
+ originY: TOriginY
207
+ ): Point {
208
+ const p = this.translateToGivenOrigin(
209
+ point,
210
+ originX,
211
+ originY,
212
+ 'center',
213
+ 'center'
214
+ );
215
+ if (this.angle) {
216
+ return p.rotate(degreesToRadians(this.angle), point);
217
+ }
218
+ return p;
219
+ }
220
+
221
+ /**
222
+ * Translates the coordinates from center to origin coordinates (based on the object's dimensions)
223
+ * @param {Point} center The point which corresponds to center of the object
224
+ * @param {OriginX} originX Horizontal origin: 'left', 'center' or 'right'
225
+ * @param {OriginY} originY Vertical origin: 'top', 'center' or 'bottom'
226
+ * @return {Point}
227
+ */
228
+ translateToOriginPoint(
229
+ center: Point,
230
+ originX: TOriginX,
231
+ originY: TOriginY
232
+ ): Point {
233
+ const p = this.translateToGivenOrigin(
234
+ center,
235
+ 'center',
236
+ 'center',
237
+ originX,
238
+ originY
239
+ );
240
+ if (this.angle) {
241
+ return p.rotate(degreesToRadians(this.angle), center);
242
+ }
243
+ return p;
244
+ }
245
+
246
+ /**
247
+ * Returns the center coordinates of the object relative to canvas
248
+ * @return {Point}
249
+ */
250
+ getCenterPoint(): Point {
251
+ const relCenter = this.getRelativeCenterPoint();
252
+ return this.group
253
+ ? transformPoint(relCenter, this.group.calcTransformMatrix())
254
+ : relCenter;
255
+ }
256
+
257
+ /**
258
+ * Returns the center coordinates of the object relative to it's parent
259
+ * @return {Point}
260
+ */
261
+ getRelativeCenterPoint(): Point {
262
+ return this.translateToCenterPoint(
263
+ new Point(this.left, this.top),
264
+ this.originX,
265
+ this.originY
266
+ );
267
+ }
268
+
269
+ /**
270
+ * Returns the coordinates of the object as if it has a different origin
271
+ * @param {TOriginX} originX Horizontal origin: 'left', 'center' or 'right'
272
+ * @param {TOriginY} originY Vertical origin: 'top', 'center' or 'bottom'
273
+ * @return {Point}
274
+ */
275
+ getPointByOrigin(originX: TOriginX, originY: TOriginY): Point {
276
+ return this.translateToOriginPoint(
277
+ this.getRelativeCenterPoint(),
278
+ originX,
279
+ originY
280
+ );
281
+ }
282
+
283
+ /**
284
+ * Sets the position of the object taking into consideration the object's origin
285
+ * @param {Point} pos The new position of the object
286
+ * @param {TOriginX} originX Horizontal origin: 'left', 'center' or 'right'
287
+ * @param {TOriginY} originY Vertical origin: 'top', 'center' or 'bottom'
288
+ * @return {void}
289
+ */
290
+ setPositionByOrigin(pos: Point, originX: TOriginX, originY: TOriginY) {
291
+ const center = this.translateToCenterPoint(pos, originX, originY),
292
+ position = this.translateToOriginPoint(
293
+ center,
294
+ this.originX,
295
+ this.originY
296
+ );
297
+ this.set({ left: position.x, top: position.y });
298
+ }
299
+
300
+ /**
301
+ * Sets the origin/position of the object to it's center point
302
+ * @private
303
+ * @return {void}
304
+ */
305
+ _setOriginToCenter() {
306
+ this._originalOriginX = this.originX;
307
+ this._originalOriginY = this.originY;
308
+
309
+ const center = this.getRelativeCenterPoint();
310
+
311
+ this.originX = 'center';
312
+ this.originY = 'center';
313
+
314
+ this.left = center.x;
315
+ this.top = center.y;
316
+ }
317
+
318
+ /**
319
+ * Resets the origin/position of the object to it's original origin
320
+ * @private
321
+ * @return {void}
322
+ */
323
+ _resetOrigin() {
324
+ if (
325
+ this._originalOriginX !== undefined &&
326
+ this._originalOriginY !== undefined
327
+ ) {
328
+ const originPoint = this.translateToOriginPoint(
329
+ this.getRelativeCenterPoint(),
330
+ this._originalOriginX,
331
+ this._originalOriginY
332
+ );
333
+
334
+ this.left = originPoint.x;
335
+ this.top = originPoint.y;
336
+
337
+ this.originX = this._originalOriginX;
338
+ this.originY = this._originalOriginY;
339
+ this._originalOriginX = undefined;
340
+ this._originalOriginY = undefined;
341
+ }
342
+ }
343
+
344
+ /**
345
+ * @private
346
+ */
347
+ _getLeftTopCoords() {
348
+ return this.translateToOriginPoint(
349
+ this.getRelativeCenterPoint(),
350
+ 'left',
351
+ 'top'
352
+ );
353
+ }
354
+ }
@@ -0,0 +1,191 @@
1
+ import { ObjectEvents } from '../../EventTypeDefs';
2
+ import type { Group } from '../Group';
3
+ import type { Canvas } from '../../canvas/Canvas';
4
+ import { StaticCanvas } from '../../canvas/StaticCanvas';
5
+ import { ObjectGeometry } from './ObjectGeometry';
6
+
7
+ type TAncestor = StackedObject | Canvas | StaticCanvas;
8
+ type TCollection = Group | Canvas | StaticCanvas;
9
+
10
+ /**
11
+ * Strict: only ancestors that are objects (without canvas)
12
+ */
13
+ export type Ancestors<Strict> = Strict extends true
14
+ ? [StackedObject | Group] | [StackedObject | Group, ...Group[]] | Group[]
15
+ :
16
+ | [StackedObject | Group | Canvas | StaticCanvas]
17
+ | [StackedObject | Group, Canvas | StaticCanvas]
18
+ | [StackedObject, ...Group[]]
19
+ | Group[]
20
+ | [StackedObject | Group, ...Group[], Canvas | StaticCanvas];
21
+
22
+ export type AncestryComparison<Strict> = {
23
+ /**
24
+ * common ancestors of `this` and`other`(may include`this` | `other`)
25
+ */
26
+ common: Ancestors<Strict>;
27
+ /**
28
+ * ancestors that are of `this` only
29
+ */
30
+ fork: Ancestors<Strict>;
31
+ /**
32
+ * ancestors that are of `other` only
33
+ */
34
+ otherFork: Ancestors<Strict>;
35
+ };
36
+
37
+ export class StackedObject<
38
+ EventSpec extends ObjectEvents = ObjectEvents
39
+ > extends ObjectGeometry<EventSpec> {
40
+ /**
41
+ * Checks if object is descendant of target
42
+ * Should be used instead of @link {Collection.contains} for performance reasons
43
+ * @param {TAncestor} target
44
+ * @returns {boolean}
45
+ */
46
+ isDescendantOf(target: TAncestor): boolean {
47
+ let parent = this.group || this.canvas;
48
+ while (parent) {
49
+ if (target === parent) {
50
+ return true;
51
+ } else if (parent instanceof StaticCanvas) {
52
+ // happens after all parents were traversed through without a match
53
+ return false;
54
+ }
55
+ parent = (parent as Group).group || (parent as Group).canvas;
56
+ }
57
+ return false;
58
+ }
59
+
60
+ /**
61
+ *
62
+ * @param {boolean} [strict] returns only ancestors that are objects (without canvas)
63
+ * @returns {Ancestors} ancestors from bottom to top
64
+ */
65
+ getAncestors<T extends boolean>(strict?: T): Ancestors<T> {
66
+ const ancestors: TAncestor[] = [];
67
+ let parent = this.group || (strict ? undefined : this.canvas);
68
+ while (parent) {
69
+ ancestors.push(parent);
70
+ parent =
71
+ (parent as Group).group ||
72
+ (strict ? undefined : (parent as Group).canvas);
73
+ }
74
+ return ancestors as Ancestors<T>;
75
+ }
76
+
77
+ /**
78
+ * Compare ancestors
79
+ *
80
+ * @param {StackedObject} other
81
+ * @param {boolean} [strict] finds only ancestors that are objects (without canvas)
82
+ * @returns {AncestryComparison} an object that represent the ancestry situation.
83
+ */
84
+ findCommonAncestors<T extends this, S extends boolean>(
85
+ other: T,
86
+ strict?: S
87
+ ): AncestryComparison<S> {
88
+ if (this === other) {
89
+ return {
90
+ fork: [],
91
+ otherFork: [],
92
+ common: [this, ...this.getAncestors(strict)],
93
+ } as AncestryComparison<S>;
94
+ }
95
+ const ancestors = this.getAncestors(strict);
96
+ const otherAncestors = other.getAncestors(strict);
97
+ // if `this` has no ancestors and `this` is top ancestor of `other` we must handle the following case
98
+ if (
99
+ ancestors.length === 0 &&
100
+ otherAncestors.length > 0 &&
101
+ this === otherAncestors[otherAncestors.length - 1]
102
+ ) {
103
+ return {
104
+ fork: [],
105
+ otherFork: [
106
+ other,
107
+ ...otherAncestors.slice(0, otherAncestors.length - 1),
108
+ ],
109
+ common: [this],
110
+ } as AncestryComparison<S>;
111
+ }
112
+ // compare ancestors
113
+ for (let i = 0, ancestor; i < ancestors.length; i++) {
114
+ ancestor = ancestors[i];
115
+ if (ancestor === other) {
116
+ return {
117
+ fork: [this, ...ancestors.slice(0, i)],
118
+ otherFork: [],
119
+ common: ancestors.slice(i),
120
+ } as AncestryComparison<S>;
121
+ }
122
+ for (let j = 0; j < otherAncestors.length; j++) {
123
+ if (this === otherAncestors[j]) {
124
+ return {
125
+ fork: [],
126
+ otherFork: [other, ...otherAncestors.slice(0, j)],
127
+ common: [this, ...ancestors],
128
+ } as AncestryComparison<S>;
129
+ }
130
+ if (ancestor === otherAncestors[j]) {
131
+ return {
132
+ fork: [this, ...ancestors.slice(0, i)],
133
+ otherFork: [other, ...otherAncestors.slice(0, j)],
134
+ common: ancestors.slice(i),
135
+ } as AncestryComparison<S>;
136
+ }
137
+ }
138
+ }
139
+ // nothing shared
140
+ return {
141
+ fork: [this, ...ancestors],
142
+ otherFork: [other, ...otherAncestors],
143
+ common: [],
144
+ } as AncestryComparison<S>;
145
+ }
146
+
147
+ /**
148
+ *
149
+ * @param {StackedObject} other
150
+ * @param {boolean} [strict] checks only ancestors that are objects (without canvas)
151
+ * @returns {boolean}
152
+ */
153
+ hasCommonAncestors<T extends this>(other: T, strict?: boolean): boolean {
154
+ const commonAncestors = this.findCommonAncestors(other, strict);
155
+ return commonAncestors && !!commonAncestors.common.length;
156
+ }
157
+
158
+ /**
159
+ *
160
+ * @param {FabricObject} other object to compare against
161
+ * @returns {boolean | undefined} if objects do not share a common ancestor or they are strictly equal it is impossible to determine which is in front of the other; in such cases the function returns `undefined`
162
+ */
163
+ isInFrontOf<T extends this>(other: T): boolean | undefined {
164
+ if (this === other) {
165
+ return undefined;
166
+ }
167
+ const ancestorData = this.findCommonAncestors(other);
168
+ if (!ancestorData) {
169
+ return undefined;
170
+ }
171
+ if (ancestorData.fork.includes(other as any)) {
172
+ return true;
173
+ }
174
+ if (ancestorData.otherFork.includes(this as any)) {
175
+ return false;
176
+ }
177
+ const firstCommonAncestor = ancestorData.common[0];
178
+ if (!firstCommonAncestor) {
179
+ return undefined;
180
+ }
181
+ const headOfFork = ancestorData.fork.pop(),
182
+ headOfOtherFork = ancestorData.otherFork.pop(),
183
+ thisIndex = (firstCommonAncestor as TCollection)._objects.indexOf(
184
+ headOfFork as any
185
+ ),
186
+ otherIndex = (firstCommonAncestor as TCollection)._objects.indexOf(
187
+ headOfOtherFork as any
188
+ );
189
+ return thisIndex > -1 && thisIndex > otherIndex;
190
+ }
191
+ }
@@ -0,0 +1,112 @@
1
+ import { getEnv } from '../../env';
2
+
3
+ export const stateProperties = [
4
+ 'top',
5
+ 'left',
6
+ 'scaleX',
7
+ 'scaleY',
8
+ 'flipX',
9
+ 'flipY',
10
+ 'originX',
11
+ 'originY',
12
+ 'angle',
13
+ 'opacity',
14
+ 'globalCompositeOperation',
15
+ 'shadow',
16
+ 'visible',
17
+ 'skewX',
18
+ 'skewY',
19
+ ];
20
+
21
+ export const cacheProperties = [
22
+ 'fill',
23
+ 'stroke',
24
+ 'strokeWidth',
25
+ 'strokeDashArray',
26
+ 'width',
27
+ 'height',
28
+ 'paintFirst',
29
+ 'strokeUniform',
30
+ 'strokeLineCap',
31
+ 'strokeDashOffset',
32
+ 'strokeLineJoin',
33
+ 'strokeMiterLimit',
34
+ 'backgroundColor',
35
+ 'clipPath',
36
+ ];
37
+
38
+ export const fabricObjectDefaultValues = {
39
+ type: 'object',
40
+ originX: 'left',
41
+ originY: 'top',
42
+ top: 0,
43
+ left: 0,
44
+ width: 0,
45
+ height: 0,
46
+ scaleX: 1,
47
+ scaleY: 1,
48
+ flipX: false,
49
+ flipY: false,
50
+ opacity: 1,
51
+ angle: 0,
52
+ skewX: 0,
53
+ skewY: 0,
54
+ cornerSize: 13,
55
+ touchCornerSize: 24,
56
+ transparentCorners: true,
57
+ hoverCursor: null,
58
+ moveCursor: null,
59
+ padding: 0,
60
+ borderColor: 'rgb(178,204,255)',
61
+ borderDashArray: null,
62
+ cornerColor: 'rgb(178,204,255)',
63
+ cornerStrokeColor: '',
64
+ cornerStyle: 'rect',
65
+ cornerDashArray: null,
66
+ centeredScaling: false,
67
+ centeredRotation: true,
68
+ fill: 'rgb(0,0,0)',
69
+ fillRule: 'nonzero',
70
+ globalCompositeOperation: 'source-over',
71
+ backgroundColor: '',
72
+ selectionBackgroundColor: '',
73
+ stroke: null,
74
+ strokeWidth: 1,
75
+ strokeDashArray: null,
76
+ strokeDashOffset: 0,
77
+ strokeLineCap: 'butt',
78
+ strokeLineJoin: 'miter',
79
+ strokeMiterLimit: 4,
80
+ shadow: null,
81
+ borderOpacityWhenMoving: 0.4,
82
+ borderScaleFactor: 1,
83
+ minScaleLimit: 0,
84
+ selectable: true,
85
+ evented: true,
86
+ visible: true,
87
+ hasControls: true,
88
+ hasBorders: true,
89
+ perPixelTargetFind: false,
90
+ includeDefaultValues: true,
91
+ lockMovementX: false,
92
+ lockMovementY: false,
93
+ lockRotation: false,
94
+ lockScalingX: false,
95
+ lockScalingY: false,
96
+ lockSkewingX: false,
97
+ lockSkewingY: false,
98
+ lockScalingFlip: false,
99
+ excludeFromExport: false,
100
+ // TODO: restore once default values are refactored to a method
101
+ objectCaching: true, // !getEnv().isLikelyNode
102
+ noScaleCache: true,
103
+ strokeUniform: false,
104
+ dirty: true,
105
+ paintFirst: 'fill',
106
+ activeOn: 'down',
107
+ colorProperties: ['fill', 'stroke', 'backgroundColor'],
108
+ clipPath: undefined,
109
+ inverted: false,
110
+ absolutePositioned: false,
111
+ FX_DURATION: 500,
112
+ };