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,471 @@
1
+ // @ts-nocheck
2
+ import { TClassProperties } from '../typedefs';
3
+ import { IText } from './IText/IText';
4
+ import { textDefaultValues } from './Text/Text';
5
+ import { classRegistry } from '../util/class_registry';
6
+
7
+ /**
8
+ * Textbox class, based on IText, allows the user to resize the text rectangle
9
+ * and wraps lines automatically. Textboxes have their Y scaling locked, the
10
+ * user can only change width. Height is adjusted automatically based on the
11
+ * wrapping of lines.
12
+ */
13
+ export class Textbox extends IText {
14
+ /**
15
+ * Minimum width of textbox, in pixels.
16
+ * @type Number
17
+ * @default
18
+ */
19
+ declare minWidth: number;
20
+
21
+ /**
22
+ * Minimum calculated width of a textbox, in pixels.
23
+ * fixed to 2 so that an empty textbox cannot go to 0
24
+ * and is still selectable without text.
25
+ * @type Number
26
+ * @default
27
+ */
28
+ declare dynamicMinWidth: number;
29
+
30
+ /**
31
+ * Use this boolean property in order to split strings that have no white space concept.
32
+ * this is a cheap way to help with chinese/japanese
33
+ * @type Boolean
34
+ * @since 2.6.0
35
+ */
36
+ declare splitByGrapheme: boolean;
37
+
38
+ /**
39
+ * Unlike superclass's version of this function, Textbox does not update
40
+ * its width.
41
+ * @private
42
+ * @override
43
+ */
44
+ initDimensions() {
45
+ if (!this.initialized) {
46
+ return;
47
+ }
48
+ this.isEditing && this.initDelayedCursor();
49
+ this._clearCache();
50
+ // clear dynamicMinWidth as it will be different after we re-wrap line
51
+ this.dynamicMinWidth = 0;
52
+ // wrap lines
53
+ this._styleMap = this._generateStyleMap(this._splitText());
54
+ // if after wrapping, the width is smaller than dynamicMinWidth, change the width and re-wrap
55
+ if (this.dynamicMinWidth > this.width) {
56
+ this._set('width', this.dynamicMinWidth);
57
+ }
58
+ if (this.textAlign.indexOf('justify') !== -1) {
59
+ // once text is measured we need to make space fatter to make justified text.
60
+ this.enlargeSpaces();
61
+ }
62
+ // clear cache and re-calculate height
63
+ this.height = this.calcTextHeight();
64
+ this.saveState({ propertySet: '_dimensionAffectingProps' });
65
+ }
66
+
67
+ /**
68
+ * Generate an object that translates the style object so that it is
69
+ * broken up by visual lines (new lines and automatic wrapping).
70
+ * The original text styles object is broken up by actual lines (new lines only),
71
+ * which is only sufficient for Text / IText
72
+ * @private
73
+ */
74
+ _generateStyleMap(textInfo) {
75
+ let realLineCount = 0,
76
+ realLineCharCount = 0,
77
+ charCount = 0;
78
+ const map = {};
79
+
80
+ for (let i = 0; i < textInfo.graphemeLines.length; i++) {
81
+ if (textInfo.graphemeText[charCount] === '\n' && i > 0) {
82
+ realLineCharCount = 0;
83
+ charCount++;
84
+ realLineCount++;
85
+ } else if (
86
+ !this.splitByGrapheme &&
87
+ this._reSpaceAndTab.test(textInfo.graphemeText[charCount]) &&
88
+ i > 0
89
+ ) {
90
+ // this case deals with space's that are removed from end of lines when wrapping
91
+ realLineCharCount++;
92
+ charCount++;
93
+ }
94
+
95
+ map[i] = { line: realLineCount, offset: realLineCharCount };
96
+
97
+ charCount += textInfo.graphemeLines[i].length;
98
+ realLineCharCount += textInfo.graphemeLines[i].length;
99
+ }
100
+
101
+ return map;
102
+ }
103
+
104
+ /**
105
+ * Returns true if object has a style property or has it on a specified line
106
+ * @param {Number} lineIndex
107
+ * @return {Boolean}
108
+ */
109
+ styleHas(property, lineIndex: number): boolean {
110
+ if (this._styleMap && !this.isWrapping) {
111
+ const map = this._styleMap[lineIndex];
112
+ if (map) {
113
+ lineIndex = map.line;
114
+ }
115
+ }
116
+ return super.styleHas(property, lineIndex);
117
+ }
118
+
119
+ /**
120
+ * Returns true if object has no styling or no styling in a line
121
+ * @param {Number} lineIndex , lineIndex is on wrapped lines.
122
+ * @return {Boolean}
123
+ */
124
+ isEmptyStyles(lineIndex: number): boolean {
125
+ if (!this.styles) {
126
+ return true;
127
+ }
128
+ let offset = 0,
129
+ nextLineIndex = lineIndex + 1,
130
+ nextOffset,
131
+ shouldLimit = false;
132
+ const map = this._styleMap[lineIndex],
133
+ mapNextLine = this._styleMap[lineIndex + 1];
134
+ if (map) {
135
+ lineIndex = map.line;
136
+ offset = map.offset;
137
+ }
138
+ if (mapNextLine) {
139
+ nextLineIndex = mapNextLine.line;
140
+ shouldLimit = nextLineIndex === lineIndex;
141
+ nextOffset = mapNextLine.offset;
142
+ }
143
+ const obj =
144
+ typeof lineIndex === 'undefined'
145
+ ? this.styles
146
+ : { line: this.styles[lineIndex] };
147
+ for (const p1 in obj) {
148
+ for (const p2 in obj[p1]) {
149
+ if (p2 >= offset && (!shouldLimit || p2 < nextOffset)) {
150
+ // eslint-disable-next-line no-unused-vars
151
+ for (const p3 in obj[p1][p2]) {
152
+ return false;
153
+ }
154
+ }
155
+ }
156
+ }
157
+ return true;
158
+ }
159
+
160
+ /**
161
+ * @param {Number} lineIndex
162
+ * @param {Number} charIndex
163
+ * @private
164
+ */
165
+ _getStyleDeclaration(lineIndex: number, charIndex: number) {
166
+ if (this._styleMap && !this.isWrapping) {
167
+ const map = this._styleMap[lineIndex];
168
+ if (!map) {
169
+ return null;
170
+ }
171
+ lineIndex = map.line;
172
+ charIndex = map.offset + charIndex;
173
+ }
174
+ return super._getStyleDeclaration(lineIndex, charIndex);
175
+ }
176
+
177
+ /**
178
+ * @param {Number} lineIndex
179
+ * @param {Number} charIndex
180
+ * @param {Object} style
181
+ * @private
182
+ */
183
+ _setStyleDeclaration(lineIndex: number, charIndex: number, style: object) {
184
+ const map = this._styleMap[lineIndex];
185
+ lineIndex = map.line;
186
+ charIndex = map.offset + charIndex;
187
+
188
+ this.styles[lineIndex][charIndex] = style;
189
+ }
190
+
191
+ /**
192
+ * @param {Number} lineIndex
193
+ * @param {Number} charIndex
194
+ * @private
195
+ */
196
+ _deleteStyleDeclaration(lineIndex: number, charIndex: number) {
197
+ const map = this._styleMap[lineIndex];
198
+ lineIndex = map.line;
199
+ charIndex = map.offset + charIndex;
200
+ delete this.styles[lineIndex][charIndex];
201
+ }
202
+
203
+ /**
204
+ * probably broken need a fix
205
+ * Returns the real style line that correspond to the wrapped lineIndex line
206
+ * Used just to verify if the line does exist or not.
207
+ * @param {Number} lineIndex
208
+ * @returns {Boolean} if the line exists or not
209
+ * @private
210
+ */
211
+ _getLineStyle(lineIndex: number): boolean {
212
+ const map = this._styleMap[lineIndex];
213
+ return !!this.styles[map.line];
214
+ }
215
+
216
+ /**
217
+ * Set the line style to an empty object so that is initialized
218
+ * @param {Number} lineIndex
219
+ * @param {Object} style
220
+ * @private
221
+ */
222
+ _setLineStyle(lineIndex: number) {
223
+ const map = this._styleMap[lineIndex];
224
+ this.styles[map.line] = {};
225
+ }
226
+
227
+ /**
228
+ * Wraps text using the 'width' property of Textbox. First this function
229
+ * splits text on newlines, so we preserve newlines entered by the user.
230
+ * Then it wraps each line using the width of the Textbox by calling
231
+ * _wrapLine().
232
+ * @param {Array} lines The string array of text that is split into lines
233
+ * @param {Number} desiredWidth width you want to wrap to
234
+ * @returns {Array} Array of lines
235
+ */
236
+ _wrapText(lines: Array<any>, desiredWidth: number): Array<any> {
237
+ const wrapped = [];
238
+ this.isWrapping = true;
239
+ for (let i = 0; i < lines.length; i++) {
240
+ wrapped.push(...this._wrapLine(lines[i], i, desiredWidth));
241
+ }
242
+ this.isWrapping = false;
243
+ return wrapped;
244
+ }
245
+
246
+ /**
247
+ * Helper function to measure a string of text, given its lineIndex and charIndex offset
248
+ * It gets called when charBounds are not available yet.
249
+ * Override if necessary
250
+ * Use with {@link Textbox#wordSplit}
251
+ *
252
+ * @param {CanvasRenderingContext2D} ctx
253
+ * @param {String} text
254
+ * @param {number} lineIndex
255
+ * @param {number} charOffset
256
+ * @returns {number}
257
+ */
258
+ _measureWord(word, lineIndex: number, charOffset = 0): number {
259
+ let width = 0,
260
+ prevGrapheme;
261
+ const skipLeft = true;
262
+ for (let i = 0, len = word.length; i < len; i++) {
263
+ const box = this._getGraphemeBox(
264
+ word[i],
265
+ lineIndex,
266
+ i + charOffset,
267
+ prevGrapheme,
268
+ skipLeft
269
+ );
270
+ width += box.kernedWidth;
271
+ prevGrapheme = word[i];
272
+ }
273
+ return width;
274
+ }
275
+
276
+ /**
277
+ * Override this method to customize word splitting
278
+ * Use with {@link Textbox#_measureWord}
279
+ * @param {string} value
280
+ * @returns {string[]} array of words
281
+ */
282
+ wordSplit(value: string): string[] {
283
+ return value.split(this._wordJoiners);
284
+ }
285
+
286
+ /**
287
+ * Wraps a line of text using the width of the Textbox and a context.
288
+ * @param {Array} line The grapheme array that represent the line
289
+ * @param {Number} lineIndex
290
+ * @param {Number} desiredWidth width you want to wrap the line to
291
+ * @param {Number} reservedSpace space to remove from wrapping for custom functionalities
292
+ * @returns {Array} Array of line(s) into which the given text is wrapped
293
+ * to.
294
+ */
295
+ _wrapLine(
296
+ _line,
297
+ lineIndex: number,
298
+ desiredWidth: number,
299
+ reservedSpace = 0
300
+ ): Array<any> {
301
+ const additionalSpace = this._getWidthOfCharSpacing(),
302
+ splitByGrapheme = this.splitByGrapheme,
303
+ graphemeLines = [],
304
+ words = splitByGrapheme
305
+ ? this.graphemeSplit(_line)
306
+ : this.wordSplit(_line),
307
+ infix = splitByGrapheme ? '' : ' ';
308
+
309
+ let lineWidth = 0,
310
+ line = [],
311
+ // spaces in different languages?
312
+ offset = 0,
313
+ infixWidth = 0,
314
+ largestWordWidth = 0,
315
+ lineJustStarted = true;
316
+ // fix a difference between split and graphemeSplit
317
+ if (words.length === 0) {
318
+ words.push([]);
319
+ }
320
+ desiredWidth -= reservedSpace;
321
+ // measure words
322
+ const data = words.map((word) => {
323
+ // if using splitByGrapheme words are already in graphemes.
324
+ word = splitByGrapheme ? word : this.graphemeSplit(word);
325
+ const width = this._measureWord(word, lineIndex, offset);
326
+ largestWordWidth = Math.max(width, largestWordWidth);
327
+ offset += word.length + 1;
328
+ return { word: word, width: width };
329
+ });
330
+
331
+ const maxWidth = Math.max(
332
+ desiredWidth,
333
+ largestWordWidth,
334
+ this.dynamicMinWidth
335
+ );
336
+ // layout words
337
+ offset = 0;
338
+ let i;
339
+ for (i = 0; i < words.length; i++) {
340
+ const word = data[i].word;
341
+ const wordWidth = data[i].width;
342
+ offset += word.length;
343
+
344
+ lineWidth += infixWidth + wordWidth - additionalSpace;
345
+ if (lineWidth > maxWidth && !lineJustStarted) {
346
+ graphemeLines.push(line);
347
+ line = [];
348
+ lineWidth = wordWidth;
349
+ lineJustStarted = true;
350
+ } else {
351
+ lineWidth += additionalSpace;
352
+ }
353
+
354
+ if (!lineJustStarted && !splitByGrapheme) {
355
+ line.push(infix);
356
+ }
357
+ line = line.concat(word);
358
+
359
+ infixWidth = splitByGrapheme
360
+ ? 0
361
+ : this._measureWord([infix], lineIndex, offset);
362
+ offset++;
363
+ lineJustStarted = false;
364
+ }
365
+
366
+ i && graphemeLines.push(line);
367
+
368
+ if (largestWordWidth + reservedSpace > this.dynamicMinWidth) {
369
+ this.dynamicMinWidth = largestWordWidth - additionalSpace + reservedSpace;
370
+ }
371
+ return graphemeLines;
372
+ }
373
+
374
+ /**
375
+ * Detect if the text line is ended with an hard break
376
+ * text and itext do not have wrapping, return false
377
+ * @param {Number} lineIndex text to split
378
+ * @return {Boolean}
379
+ */
380
+ isEndOfWrapping(lineIndex: number): boolean {
381
+ if (!this._styleMap[lineIndex + 1]) {
382
+ // is last line, return true;
383
+ return true;
384
+ }
385
+ if (this._styleMap[lineIndex + 1].line !== this._styleMap[lineIndex].line) {
386
+ // this is last line before a line break, return true;
387
+ return true;
388
+ }
389
+ return false;
390
+ }
391
+
392
+ /**
393
+ * Detect if a line has a linebreak and so we need to account for it when moving
394
+ * and counting style.
395
+ * @return Number
396
+ */
397
+ missingNewlineOffset(lineIndex) {
398
+ if (this.splitByGrapheme) {
399
+ return this.isEndOfWrapping(lineIndex) ? 1 : 0;
400
+ }
401
+ return 1;
402
+ }
403
+
404
+ /**
405
+ * Gets lines of text to render in the Textbox. This function calculates
406
+ * text wrapping on the fly every time it is called.
407
+ * @param {String} text text to split
408
+ * @returns {Array} Array of lines in the Textbox.
409
+ * @override
410
+ */
411
+ _splitTextIntoLines(text: string) {
412
+ const newText = super._splitTextIntoLines(text),
413
+ graphemeLines = this._wrapText(newText.lines, this.width),
414
+ lines = new Array(graphemeLines.length);
415
+ for (let i = 0; i < graphemeLines.length; i++) {
416
+ lines[i] = graphemeLines[i].join('');
417
+ }
418
+ newText.lines = lines;
419
+ newText.graphemeLines = graphemeLines;
420
+ return newText;
421
+ }
422
+
423
+ getMinWidth() {
424
+ return Math.max(this.minWidth, this.dynamicMinWidth);
425
+ }
426
+
427
+ _removeExtraneousStyles() {
428
+ const linesToKeep = {};
429
+ for (const prop in this._styleMap) {
430
+ if (this._textLines[prop]) {
431
+ linesToKeep[this._styleMap[prop].line] = 1;
432
+ }
433
+ }
434
+ for (const prop in this.styles) {
435
+ if (!linesToKeep[prop]) {
436
+ delete this.styles[prop];
437
+ }
438
+ }
439
+ }
440
+
441
+ /**
442
+ * Returns object representation of an instance
443
+ * @method toObject
444
+ * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output
445
+ * @return {Object} object representation of an instance
446
+ */
447
+ toObject(propertiesToInclude: Array<any>): object {
448
+ return super.toObject(
449
+ ['minWidth', 'splitByGrapheme'].concat(propertiesToInclude)
450
+ );
451
+ }
452
+ }
453
+
454
+ // @TODO: Many things here are configuration related and shouldn't be on the class nor prototype
455
+ // regexes, list of properties that are not suppose to change by instances, magic consts.
456
+ // this will be a separated effort
457
+ export const textboxDefaultValues: Partial<TClassProperties<Textbox>> = {
458
+ type: 'textbox',
459
+ minWidth: 20,
460
+ dynamicMinWidth: 2,
461
+ lockScalingFlip: true,
462
+ noScaleCache: false,
463
+ _dimensionAffectingProps:
464
+ textDefaultValues._dimensionAffectingProps!.concat('width'),
465
+ _wordJoiners: /[ \t\r]/,
466
+ splitByGrapheme: false,
467
+ };
468
+
469
+ Object.assign(Textbox.prototype, textboxDefaultValues);
470
+
471
+ classRegistry.setClass(Textbox);
@@ -0,0 +1,45 @@
1
+ import { TClassProperties } from '../typedefs';
2
+ import { classRegistry } from '../util/class_registry';
3
+ import { FabricObject } from './Object/FabricObject';
4
+
5
+ export class Triangle extends FabricObject {
6
+ /**
7
+ * @private
8
+ * @param {CanvasRenderingContext2D} ctx Context to render on
9
+ */
10
+ _render(ctx: CanvasRenderingContext2D) {
11
+ const widthBy2 = this.width / 2,
12
+ heightBy2 = this.height / 2;
13
+
14
+ ctx.beginPath();
15
+ ctx.moveTo(-widthBy2, heightBy2);
16
+ ctx.lineTo(0, -heightBy2);
17
+ ctx.lineTo(widthBy2, heightBy2);
18
+ ctx.closePath();
19
+
20
+ this._renderPaintInOrder(ctx);
21
+ }
22
+
23
+ /**
24
+ * Returns svg representation of an instance
25
+ * @return {Array} an array of strings with the specific svg representation
26
+ * of the instance
27
+ */
28
+ _toSVG() {
29
+ const widthBy2 = this.width / 2,
30
+ heightBy2 = this.height / 2,
31
+ points = `${-widthBy2} ${heightBy2},0 ${-heightBy2},${widthBy2} ${heightBy2}`;
32
+ return ['<polygon ', 'COMMON_PARTS', 'points="', points, '" />'];
33
+ }
34
+ }
35
+
36
+ export const triangleDefaultValues: Partial<TClassProperties<Triangle>> = {
37
+ type: 'triangle',
38
+ width: 100,
39
+ height: 100,
40
+ };
41
+
42
+ Object.assign(Triangle.prototype, triangleDefaultValues);
43
+
44
+ classRegistry.setClass(Triangle);
45
+ classRegistry.setSVGClass(Triangle);
@@ -0,0 +1,119 @@
1
+ // https://www.typescriptlang.org/docs/handbook/utility-types.html
2
+ import { BaseFabricObject } from './EventTypeDefs';
3
+ import type { Gradient } from './gradient/Gradient';
4
+ import type { Pattern } from './Pattern';
5
+ import type { Point } from './Point';
6
+ import type { FabricObject } from './shapes/Object/FabricObject';
7
+
8
+ interface NominalTag<T> {
9
+ nominalTag?: T;
10
+ }
11
+
12
+ type Nominal<Type, Tag> = NominalTag<Tag> & Type;
13
+
14
+ // eslint-disable-next-line @typescript-eslint/ban-types
15
+ type TNonFunctionPropertyNames<T> = {
16
+ [K in keyof T]: T[K] extends Function ? never : K;
17
+ }[keyof T];
18
+ export type TClassProperties<T> = Pick<T, TNonFunctionPropertyNames<T>>;
19
+
20
+ // https://github.com/microsoft/TypeScript/issues/32080
21
+ export type Constructor<T = object> = new (...args: any[]) => T;
22
+
23
+ const enum Degree {}
24
+ const enum Radian {}
25
+
26
+ export type TDegree = Nominal<number, Degree>;
27
+ export type TRadian = Nominal<number, Radian>;
28
+
29
+ export type TAxis = 'x' | 'y';
30
+
31
+ export type TAxisKey<T extends string> = `${T}${Capitalize<TAxis>}`;
32
+
33
+ export type TFiller = Gradient<'linear'> | Gradient<'radial'> | Pattern;
34
+
35
+ export type TSize = {
36
+ width: number;
37
+ height: number;
38
+ };
39
+
40
+ export type TBBox = {
41
+ left: number;
42
+ top: number;
43
+ } & TSize;
44
+
45
+ export type Percent = `${number}%`;
46
+
47
+ export const enum ImageFormat {
48
+ jpeg = 'jpeg',
49
+ jpg = 'jpeg',
50
+ png = 'png',
51
+ }
52
+
53
+ export const enum SVGElementName {
54
+ linearGradient = 'linearGradient',
55
+ radialGradient = 'radialGradient',
56
+ stop = 'stop',
57
+ }
58
+
59
+ export const enum SupportedSVGUnit {
60
+ mm = 'mm',
61
+ cm = 'cm',
62
+ in = 'in',
63
+ pt = 'pt',
64
+ pc = 'pc',
65
+ em = 'em',
66
+ }
67
+
68
+ export type TMat2D = [number, number, number, number, number, number];
69
+
70
+ /**
71
+ * SVG path commands
72
+ */
73
+ export type PathData = (string | number)[][];
74
+
75
+ /**
76
+ * An invalid keyword and an empty string will be handled as the `anonymous` keyword.
77
+ * @see https://developer.mozilla.org/en-US/docs/HTML/CORS_settings_attributes
78
+ */
79
+ export type TCrossOrigin = '' | 'anonymous' | 'use-credentials' | null;
80
+
81
+ export type TOriginX = 'center' | 'left' | 'right' | number;
82
+ export type TOriginY = 'center' | 'top' | 'bottom' | number;
83
+
84
+ export type TCornerPoint = {
85
+ tl: Point;
86
+ tr: Point;
87
+ bl: Point;
88
+ br: Point;
89
+ };
90
+
91
+ export type TSVGReviver = (markup: string) => string;
92
+
93
+ export type TValidToObjectMethod = 'toDatalessObject' | 'toObject';
94
+
95
+ export type TCacheCanvasDimensions = {
96
+ width: number;
97
+ height: number;
98
+ zoomX: number;
99
+ zoomY: number;
100
+ x: number;
101
+ y: number;
102
+ };
103
+
104
+ export type TToCanvasElementOptions = {
105
+ left?: number;
106
+ top?: number;
107
+ width?: number;
108
+ height?: number;
109
+ filter?: (object: BaseFabricObject) => boolean;
110
+ };
111
+
112
+ export type TDataUrlOptions = TToCanvasElementOptions & {
113
+ multiplier: number;
114
+ format?: ImageFormat;
115
+ quality?: number;
116
+ enableRetinaScaling?: boolean;
117
+ };
118
+
119
+ export type AssertKeys<T, K extends keyof T> = T & Record<K, NonNullable<T[K]>>;