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