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,276 @@
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
+ import { BaseProps } from './types/BaseProps';
10
+ import { FillStrokeProps } from './types/FillStrokeProps';
11
+
12
+ export class ObjectOrigin<EventSpec>
13
+ extends CommonMethods<EventSpec>
14
+ implements BaseProps, Pick<FillStrokeProps, 'strokeWidth' | 'strokeUniform'>
15
+ {
16
+ declare top: number;
17
+ declare left: number;
18
+ declare width: number;
19
+ declare height: number;
20
+ declare flipX: boolean;
21
+ declare flipY: boolean;
22
+ declare scaleX: number;
23
+ declare scaleY: number;
24
+ declare skewX: number;
25
+ declare skewY: number;
26
+ declare originX: TOriginX;
27
+ declare originY: TOriginY;
28
+ declare angle: TDegree;
29
+ declare strokeWidth: number;
30
+ declare strokeUniform: boolean;
31
+
32
+ /**
33
+ * Object containing this object.
34
+ * can influence its size and position
35
+ */
36
+ declare group?: Group;
37
+
38
+ declare _originalOriginX?: TOriginX;
39
+
40
+ declare _originalOriginY?: TOriginY;
41
+
42
+ /**
43
+ * Calculate object bounding box dimensions from its properties scale, skew.
44
+ * @param {Object} [options]
45
+ * @param {Number} [options.scaleX]
46
+ * @param {Number} [options.scaleY]
47
+ * @param {Number} [options.skewX]
48
+ * @param {Number} [options.skewY]
49
+ * @private
50
+ * @returns {Point} dimensions
51
+ */
52
+ _getTransformedDimensions(options: any = {}): Point {
53
+ const dimOptions = {
54
+ scaleX: this.scaleX,
55
+ scaleY: this.scaleY,
56
+ skewX: this.skewX,
57
+ skewY: this.skewY,
58
+ width: this.width,
59
+ height: this.height,
60
+ strokeWidth: this.strokeWidth,
61
+ ...options,
62
+ };
63
+ // stroke is applied before/after transformations are applied according to `strokeUniform`
64
+ const strokeWidth = dimOptions.strokeWidth;
65
+ let preScalingStrokeValue = strokeWidth,
66
+ postScalingStrokeValue = 0;
67
+
68
+ if (this.strokeUniform) {
69
+ preScalingStrokeValue = 0;
70
+ postScalingStrokeValue = strokeWidth;
71
+ }
72
+ const dimX = dimOptions.width + preScalingStrokeValue,
73
+ dimY = dimOptions.height + preScalingStrokeValue,
74
+ noSkew = dimOptions.skewX === 0 && dimOptions.skewY === 0;
75
+ let finalDimensions;
76
+ if (noSkew) {
77
+ finalDimensions = new Point(
78
+ dimX * dimOptions.scaleX,
79
+ dimY * dimOptions.scaleY
80
+ );
81
+ } else {
82
+ finalDimensions = sizeAfterTransform(dimX, dimY, dimOptions);
83
+ }
84
+
85
+ return finalDimensions.scalarAdd(postScalingStrokeValue);
86
+ }
87
+
88
+ /**
89
+ * Translates the coordinates from a set of origin to another (based on the object's dimensions)
90
+ * @param {Point} point The point which corresponds to the originX and originY params
91
+ * @param {TOriginX} fromOriginX Horizontal origin: 'left', 'center' or 'right'
92
+ * @param {TOriginY} fromOriginY Vertical origin: 'top', 'center' or 'bottom'
93
+ * @param {TOriginX} toOriginX Horizontal origin: 'left', 'center' or 'right'
94
+ * @param {TOriginY} toOriginY Vertical origin: 'top', 'center' or 'bottom'
95
+ * @return {Point}
96
+ */
97
+ translateToGivenOrigin(
98
+ point: Point,
99
+ fromOriginX: TOriginX,
100
+ fromOriginY: TOriginY,
101
+ toOriginX: TOriginX,
102
+ toOriginY: TOriginY
103
+ ): Point {
104
+ let x = point.x,
105
+ y = point.y;
106
+ const offsetX = resolveOrigin(toOriginX) - resolveOrigin(fromOriginX),
107
+ offsetY = resolveOrigin(toOriginY) - resolveOrigin(fromOriginY);
108
+
109
+ if (offsetX || offsetY) {
110
+ const dim = this._getTransformedDimensions();
111
+ x += offsetX * dim.x;
112
+ y += offsetY * dim.y;
113
+ }
114
+
115
+ return new Point(x, y);
116
+ }
117
+
118
+ /**
119
+ * Translates the coordinates from origin to center coordinates (based on the object's dimensions)
120
+ * @param {Point} point The point which corresponds to the originX and originY params
121
+ * @param {TOriginX} originX Horizontal origin: 'left', 'center' or 'right'
122
+ * @param {TOriginY} originY Vertical origin: 'top', 'center' or 'bottom'
123
+ * @return {Point}
124
+ */
125
+ translateToCenterPoint(
126
+ point: Point,
127
+ originX: TOriginX,
128
+ originY: TOriginY
129
+ ): Point {
130
+ const p = this.translateToGivenOrigin(
131
+ point,
132
+ originX,
133
+ originY,
134
+ 'center',
135
+ 'center'
136
+ );
137
+ if (this.angle) {
138
+ return p.rotate(degreesToRadians(this.angle), point);
139
+ }
140
+ return p;
141
+ }
142
+
143
+ /**
144
+ * Translates the coordinates from center to origin coordinates (based on the object's dimensions)
145
+ * @param {Point} center The point which corresponds to center of the object
146
+ * @param {OriginX} originX Horizontal origin: 'left', 'center' or 'right'
147
+ * @param {OriginY} originY Vertical origin: 'top', 'center' or 'bottom'
148
+ * @return {Point}
149
+ */
150
+ translateToOriginPoint(
151
+ center: Point,
152
+ originX: TOriginX,
153
+ originY: TOriginY
154
+ ): Point {
155
+ const p = this.translateToGivenOrigin(
156
+ center,
157
+ 'center',
158
+ 'center',
159
+ originX,
160
+ originY
161
+ );
162
+ if (this.angle) {
163
+ return p.rotate(degreesToRadians(this.angle), center);
164
+ }
165
+ return p;
166
+ }
167
+
168
+ /**
169
+ * Returns the center coordinates of the object relative to canvas
170
+ * @return {Point}
171
+ */
172
+ getCenterPoint(): Point {
173
+ const relCenter = this.getRelativeCenterPoint();
174
+ return this.group
175
+ ? transformPoint(relCenter, this.group.calcTransformMatrix())
176
+ : relCenter;
177
+ }
178
+
179
+ /**
180
+ * Returns the center coordinates of the object relative to it's parent
181
+ * @return {Point}
182
+ */
183
+ getRelativeCenterPoint(): Point {
184
+ return this.translateToCenterPoint(
185
+ new Point(this.left, this.top),
186
+ this.originX,
187
+ this.originY
188
+ );
189
+ }
190
+
191
+ /**
192
+ * Returns the coordinates of the object as if it has a different origin
193
+ * @param {TOriginX} originX Horizontal origin: 'left', 'center' or 'right'
194
+ * @param {TOriginY} originY Vertical origin: 'top', 'center' or 'bottom'
195
+ * @return {Point}
196
+ */
197
+ getPointByOrigin(originX: TOriginX, originY: TOriginY): Point {
198
+ return this.translateToOriginPoint(
199
+ this.getRelativeCenterPoint(),
200
+ originX,
201
+ originY
202
+ );
203
+ }
204
+
205
+ /**
206
+ * Sets the position of the object taking into consideration the object's origin
207
+ * @param {Point} pos The new position of the object
208
+ * @param {TOriginX} originX Horizontal origin: 'left', 'center' or 'right'
209
+ * @param {TOriginY} originY Vertical origin: 'top', 'center' or 'bottom'
210
+ * @return {void}
211
+ */
212
+ setPositionByOrigin(pos: Point, originX: TOriginX, originY: TOriginY) {
213
+ const center = this.translateToCenterPoint(pos, originX, originY),
214
+ position = this.translateToOriginPoint(
215
+ center,
216
+ this.originX,
217
+ this.originY
218
+ );
219
+ this.set({ left: position.x, top: position.y });
220
+ }
221
+
222
+ /**
223
+ * Sets the origin/position of the object to it's center point
224
+ * @private
225
+ * @return {void}
226
+ */
227
+ _setOriginToCenter() {
228
+ this._originalOriginX = this.originX;
229
+ this._originalOriginY = this.originY;
230
+
231
+ const center = this.getRelativeCenterPoint();
232
+
233
+ this.originX = 'center';
234
+ this.originY = 'center';
235
+
236
+ this.left = center.x;
237
+ this.top = center.y;
238
+ }
239
+
240
+ /**
241
+ * Resets the origin/position of the object to it's original origin
242
+ * @private
243
+ * @return {void}
244
+ */
245
+ _resetOrigin() {
246
+ if (
247
+ this._originalOriginX !== undefined &&
248
+ this._originalOriginY !== undefined
249
+ ) {
250
+ const originPoint = this.translateToOriginPoint(
251
+ this.getRelativeCenterPoint(),
252
+ this._originalOriginX,
253
+ this._originalOriginY
254
+ );
255
+
256
+ this.left = originPoint.x;
257
+ this.top = originPoint.y;
258
+
259
+ this.originX = this._originalOriginX;
260
+ this.originY = this._originalOriginY;
261
+ this._originalOriginX = undefined;
262
+ this._originalOriginY = undefined;
263
+ }
264
+ }
265
+
266
+ /**
267
+ * @private
268
+ */
269
+ _getLeftTopCoords() {
270
+ return this.translateToOriginPoint(
271
+ this.getRelativeCenterPoint(),
272
+ 'left',
273
+ 'top'
274
+ );
275
+ }
276
+ }
@@ -0,0 +1,206 @@
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
+ import { isActiveSelection } from '../../util/types';
7
+
8
+ type TAncestor = StackedObject | Canvas | StaticCanvas;
9
+ type TCollection = Group | Canvas | StaticCanvas;
10
+
11
+ /**
12
+ * Strict: only ancestors that are objects (without canvas)
13
+ */
14
+ export type Ancestors<Strict> = Strict extends true
15
+ ? [StackedObject | Group] | [StackedObject | Group, ...Group[]] | Group[]
16
+ :
17
+ | [StackedObject | Group | Canvas | StaticCanvas]
18
+ | [StackedObject | Group, Canvas | StaticCanvas]
19
+ | [StackedObject, ...Group[]]
20
+ | Group[]
21
+ | [StackedObject | Group, ...Group[], Canvas | StaticCanvas];
22
+
23
+ export type AncestryComparison<Strict> = {
24
+ /**
25
+ * common ancestors of `this` and`other`(may include`this` | `other`)
26
+ */
27
+ common: Ancestors<Strict>;
28
+ /**
29
+ * ancestors that are of `this` only
30
+ */
31
+ fork: Ancestors<Strict>;
32
+ /**
33
+ * ancestors that are of `other` only
34
+ */
35
+ otherFork: Ancestors<Strict>;
36
+ };
37
+
38
+ export class StackedObject<
39
+ EventSpec extends ObjectEvents = ObjectEvents
40
+ > extends ObjectGeometry<EventSpec> {
41
+ /**
42
+ * A reference to the parent of the object
43
+ * Used to keep the original parent ref when the object has been added to an ActiveSelection, hence loosing the `group` ref
44
+ */
45
+ declare __owningGroup?: Group;
46
+
47
+ /**
48
+ * Returns instance's parent **EXCLUDING** `ActiveSelection`
49
+ * @param {boolean} [strict] exclude canvas as well
50
+ */
51
+ getParent<T extends boolean>(strict?: T): TAncestor | undefined {
52
+ return (
53
+ (isActiveSelection(this.group) ? this.__owningGroup : this.group) ||
54
+ (strict ? undefined : this.canvas)
55
+ );
56
+ }
57
+
58
+ /**
59
+ * Checks if object is descendant of target
60
+ * Should be used instead of {@link Group.contains} or {@link StaticCanvas.contains} for performance reasons
61
+ * @param {TAncestor} target
62
+ * @returns {boolean}
63
+ */
64
+ isDescendantOf(target: TAncestor): boolean {
65
+ return (
66
+ this.__owningGroup === target ||
67
+ this.group === target ||
68
+ this.canvas === target ||
69
+ // walk up
70
+ (!!this.__owningGroup && this.__owningGroup.isDescendantOf(target)) ||
71
+ (!!this.group && this.group.isDescendantOf(target))
72
+ );
73
+ }
74
+
75
+ /**
76
+ *
77
+ * @param {boolean} [strict] returns only ancestors that are objects (without canvas)
78
+ * @returns {Ancestors} ancestors (excluding `ActiveSelection`) from bottom to top
79
+ */
80
+ getAncestors<T extends boolean>(strict?: T): Ancestors<T> {
81
+ const ancestors: TAncestor[] = [];
82
+ // eslint-disable-next-line @typescript-eslint/no-this-alias
83
+ let parent: TAncestor | undefined = this;
84
+ do {
85
+ parent =
86
+ parent instanceof StackedObject ? parent.getParent(strict) : undefined;
87
+ parent && ancestors.push(parent);
88
+ } while (parent);
89
+ return ancestors as Ancestors<T>;
90
+ }
91
+
92
+ /**
93
+ * Compare ancestors
94
+ *
95
+ * @param {StackedObject} other
96
+ * @param {boolean} [strict] finds only ancestors that are objects (without canvas)
97
+ * @returns {AncestryComparison} an object that represent the ancestry situation.
98
+ */
99
+ findCommonAncestors<T extends this, S extends boolean>(
100
+ other: T,
101
+ strict?: S
102
+ ): AncestryComparison<S> {
103
+ if (this === other) {
104
+ return {
105
+ fork: [],
106
+ otherFork: [],
107
+ common: [this, ...this.getAncestors(strict)],
108
+ } as AncestryComparison<S>;
109
+ }
110
+ const ancestors = this.getAncestors(strict);
111
+ const otherAncestors = other.getAncestors(strict);
112
+ // if `this` has no ancestors and `this` is top ancestor of `other` we must handle the following case
113
+ if (
114
+ ancestors.length === 0 &&
115
+ otherAncestors.length > 0 &&
116
+ this === otherAncestors[otherAncestors.length - 1]
117
+ ) {
118
+ return {
119
+ fork: [],
120
+ otherFork: [
121
+ other,
122
+ ...otherAncestors.slice(0, otherAncestors.length - 1),
123
+ ],
124
+ common: [this],
125
+ } as AncestryComparison<S>;
126
+ }
127
+ // compare ancestors
128
+ for (let i = 0, ancestor; i < ancestors.length; i++) {
129
+ ancestor = ancestors[i];
130
+ if (ancestor === other) {
131
+ return {
132
+ fork: [this, ...ancestors.slice(0, i)],
133
+ otherFork: [],
134
+ common: ancestors.slice(i),
135
+ } as AncestryComparison<S>;
136
+ }
137
+ for (let j = 0; j < otherAncestors.length; j++) {
138
+ if (this === otherAncestors[j]) {
139
+ return {
140
+ fork: [],
141
+ otherFork: [other, ...otherAncestors.slice(0, j)],
142
+ common: [this, ...ancestors],
143
+ } as AncestryComparison<S>;
144
+ }
145
+ if (ancestor === otherAncestors[j]) {
146
+ return {
147
+ fork: [this, ...ancestors.slice(0, i)],
148
+ otherFork: [other, ...otherAncestors.slice(0, j)],
149
+ common: ancestors.slice(i),
150
+ } as AncestryComparison<S>;
151
+ }
152
+ }
153
+ }
154
+ // nothing shared
155
+ return {
156
+ fork: [this, ...ancestors],
157
+ otherFork: [other, ...otherAncestors],
158
+ common: [],
159
+ } as AncestryComparison<S>;
160
+ }
161
+
162
+ /**
163
+ *
164
+ * @param {StackedObject} other
165
+ * @param {boolean} [strict] checks only ancestors that are objects (without canvas)
166
+ * @returns {boolean}
167
+ */
168
+ hasCommonAncestors<T extends this>(other: T, strict?: boolean): boolean {
169
+ const commonAncestors = this.findCommonAncestors(other, strict);
170
+ return commonAncestors && !!commonAncestors.common.length;
171
+ }
172
+
173
+ /**
174
+ *
175
+ * @param {FabricObject} other object to compare against
176
+ * @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`
177
+ */
178
+ isInFrontOf<T extends this>(other: T): boolean | undefined {
179
+ if (this === other) {
180
+ return undefined;
181
+ }
182
+ const ancestorData = this.findCommonAncestors(other);
183
+ if (!ancestorData) {
184
+ return undefined;
185
+ }
186
+ if (ancestorData.fork.includes(other as any)) {
187
+ return true;
188
+ }
189
+ if (ancestorData.otherFork.includes(this as any)) {
190
+ return false;
191
+ }
192
+ const firstCommonAncestor = ancestorData.common[0];
193
+ if (!firstCommonAncestor) {
194
+ return undefined;
195
+ }
196
+ const headOfFork = ancestorData.fork.pop(),
197
+ headOfOtherFork = ancestorData.otherFork.pop(),
198
+ thisIndex = (firstCommonAncestor as TCollection)._objects.indexOf(
199
+ headOfFork as any
200
+ ),
201
+ otherIndex = (firstCommonAncestor as TCollection)._objects.indexOf(
202
+ headOfOtherFork as any
203
+ );
204
+ return thisIndex > -1 && thisIndex > otherIndex;
205
+ }
206
+ }
@@ -0,0 +1,108 @@
1
+ export const stateProperties = [
2
+ 'top',
3
+ 'left',
4
+ 'scaleX',
5
+ 'scaleY',
6
+ 'flipX',
7
+ 'flipY',
8
+ 'originX',
9
+ 'originY',
10
+ 'angle',
11
+ 'opacity',
12
+ 'globalCompositeOperation',
13
+ 'shadow',
14
+ 'visible',
15
+ 'skewX',
16
+ 'skewY',
17
+ ];
18
+
19
+ export const cacheProperties = [
20
+ 'fill',
21
+ 'stroke',
22
+ 'strokeWidth',
23
+ 'strokeDashArray',
24
+ 'width',
25
+ 'height',
26
+ 'paintFirst',
27
+ 'strokeUniform',
28
+ 'strokeLineCap',
29
+ 'strokeDashOffset',
30
+ 'strokeLineJoin',
31
+ 'strokeMiterLimit',
32
+ 'backgroundColor',
33
+ 'clipPath',
34
+ ];
35
+
36
+ export const fabricObjectDefaultValues = {
37
+ originX: 'left',
38
+ originY: 'top',
39
+ top: 0,
40
+ left: 0,
41
+ width: 0,
42
+ height: 0,
43
+ scaleX: 1,
44
+ scaleY: 1,
45
+ flipX: false,
46
+ flipY: false,
47
+ opacity: 1,
48
+ angle: 0,
49
+ skewX: 0,
50
+ skewY: 0,
51
+ cornerSize: 13,
52
+ touchCornerSize: 24,
53
+ transparentCorners: true,
54
+ hoverCursor: null,
55
+ moveCursor: null,
56
+ padding: 0,
57
+ borderColor: 'rgb(178,204,255)',
58
+ borderDashArray: null,
59
+ cornerColor: 'rgb(178,204,255)',
60
+ cornerStrokeColor: '',
61
+ cornerStyle: 'rect',
62
+ cornerDashArray: null,
63
+ centeredScaling: false,
64
+ centeredRotation: true,
65
+ fill: 'rgb(0,0,0)',
66
+ fillRule: 'nonzero',
67
+ globalCompositeOperation: 'source-over',
68
+ backgroundColor: '',
69
+ selectionBackgroundColor: '',
70
+ stroke: null,
71
+ strokeWidth: 1,
72
+ strokeDashArray: null,
73
+ strokeDashOffset: 0,
74
+ strokeLineCap: 'butt',
75
+ strokeLineJoin: 'miter',
76
+ strokeMiterLimit: 4,
77
+ shadow: null,
78
+ borderOpacityWhenMoving: 0.4,
79
+ borderScaleFactor: 1,
80
+ minScaleLimit: 0,
81
+ selectable: true,
82
+ evented: true,
83
+ visible: true,
84
+ hasControls: true,
85
+ hasBorders: true,
86
+ perPixelTargetFind: false,
87
+ includeDefaultValues: true,
88
+ lockMovementX: false,
89
+ lockMovementY: false,
90
+ lockRotation: false,
91
+ lockScalingX: false,
92
+ lockScalingY: false,
93
+ lockSkewingX: false,
94
+ lockSkewingY: false,
95
+ lockScalingFlip: false,
96
+ excludeFromExport: false,
97
+ objectCaching: true,
98
+ noScaleCache: true,
99
+ strokeUniform: false,
100
+ dirty: true,
101
+ paintFirst: 'fill',
102
+ activeOn: 'down',
103
+ colorProperties: ['fill', 'stroke', 'backgroundColor'],
104
+ clipPath: undefined,
105
+ inverted: false,
106
+ absolutePositioned: false,
107
+ FX_DURATION: 500,
108
+ } as const;
@@ -0,0 +1,96 @@
1
+ import { TDegree, TOriginX, TOriginY } from '../../../typedefs';
2
+
3
+ export interface BaseProps {
4
+ /**
5
+ * 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}
6
+ * @type Number
7
+ * @default 0
8
+ */
9
+ top: number;
10
+
11
+ /**
12
+ * 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}
13
+ * @type Number
14
+ * @default 0
15
+ */
16
+ left: number;
17
+
18
+ /**
19
+ * Object width
20
+ * @type Number
21
+ * @default
22
+ */
23
+ width: number;
24
+
25
+ /**
26
+ * Object height
27
+ * @type Number
28
+ * @default
29
+ */
30
+ height: number;
31
+
32
+ /**
33
+ * When true, an object is rendered as flipped horizontally
34
+ * @type Boolean
35
+ * @default false
36
+ */
37
+ flipX: boolean;
38
+
39
+ /**
40
+ * When true, an object is rendered as flipped vertically
41
+ * @type Boolean
42
+ * @default false
43
+ */
44
+ flipY: boolean;
45
+
46
+ /**
47
+ * Object scale factor (horizontal)
48
+ * @type Number
49
+ * @default 1
50
+ */
51
+ scaleX: number;
52
+
53
+ /**
54
+ * Object scale factor (vertical)
55
+ * @type Number
56
+ * @default 1
57
+ */
58
+ scaleY: number;
59
+
60
+ /**
61
+ * Angle of skew on x axes of an object (in degrees)
62
+ * @type Number
63
+ * @default 0
64
+ */
65
+ skewX: number;
66
+
67
+ /**
68
+ * Angle of skew on y axes of an object (in degrees)
69
+ * @type Number
70
+ * @default 0
71
+ */
72
+ skewY: number;
73
+
74
+ /**
75
+ * Horizontal origin of transformation of an object (one of "left", "right", "center")
76
+ * See http://jsfiddle.net/1ow02gea/244/ on how originX/originY affect objects in groups
77
+ * @type String
78
+ * @default 'left'
79
+ */
80
+ originX: TOriginX;
81
+
82
+ /**
83
+ * Vertical origin of transformation of an object (one of "top", "bottom", "center")
84
+ * See http://jsfiddle.net/1ow02gea/244/ on how originX/originY affect objects in groups
85
+ * @type String
86
+ * @default 'top'
87
+ */
88
+ originY: TOriginY;
89
+
90
+ /**
91
+ * Angle of rotation of an object (in degrees)
92
+ * @type Number
93
+ * @default 0
94
+ */
95
+ angle: TDegree;
96
+ }