fabric 5.3.0 → 6.0.0-beta10

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 (634) 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 +51 -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 +615 -189
  13. package/CONTRIBUTING.md +233 -59
  14. package/README.md +200 -235
  15. package/babel-jest.config.js +6 -0
  16. package/bower.json +1 -3
  17. package/dist/fabric.d.ts +54 -0
  18. package/dist/index.d.ts +2 -0
  19. package/dist/index.js +28452 -0
  20. package/dist/index.js.map +1 -0
  21. package/dist/index.min.js +1 -0
  22. package/dist/index.mjs +28385 -0
  23. package/dist/index.mjs.map +1 -0
  24. package/dist/index.node.cjs +28538 -0
  25. package/dist/index.node.cjs.map +1 -0
  26. package/dist/index.node.d.ts +20 -0
  27. package/dist/index.node.mjs +28477 -0
  28. package/dist/index.node.mjs.map +1 -0
  29. package/dist/src/ClassRegistry.d.ts +13 -0
  30. package/dist/src/Collection.d.ts +136 -0
  31. package/dist/src/CommonMethods.d.ts +32 -0
  32. package/dist/src/EventTypeDefs.d.ts +227 -0
  33. package/dist/src/Intersection.d.ts +112 -0
  34. package/dist/src/Observable.d.ts +60 -0
  35. package/dist/src/Pattern/Pattern.d.ts +99 -0
  36. package/dist/src/Pattern/index.d.ts +3 -0
  37. package/dist/src/Pattern/types.d.ts +9 -0
  38. package/dist/src/Point.d.ts +232 -0
  39. package/dist/src/Shadow.d.ts +96 -0
  40. package/dist/src/brushes/BaseBrush.d.ts +101 -0
  41. package/dist/src/brushes/CircleBrush.d.ts +44 -0
  42. package/dist/src/brushes/CircleBrush.test.d.ts +2 -0
  43. package/dist/src/brushes/PatternBrush.d.ts +23 -0
  44. package/dist/src/brushes/PencilBrush.d.ts +92 -0
  45. package/dist/src/brushes/SprayBrush.d.ts +74 -0
  46. package/dist/src/brushes/typedefs.d.ts +18 -0
  47. package/dist/src/cache.d.ts +47 -0
  48. package/dist/src/canvas/Canvas.d.ts +364 -0
  49. package/dist/src/canvas/DOMManagers/CanvasDOMManager.d.ts +29 -0
  50. package/dist/src/canvas/DOMManagers/StaticCanvasDOMManager.d.ts +29 -0
  51. package/dist/src/canvas/DOMManagers/util.d.ts +24 -0
  52. package/dist/src/canvas/DOMManagers/util.spec.d.ts +2 -0
  53. package/dist/src/canvas/SelectableCanvas.d.ts +723 -0
  54. package/dist/src/canvas/StaticCanvas.d.ts +747 -0
  55. package/dist/src/canvas/TextEditingManager.d.ts +21 -0
  56. package/dist/src/canvas/canvas_gestures.mixin.d.ts +2 -0
  57. package/dist/src/color/Color.d.ts +152 -0
  58. package/dist/src/color/color_map.d.ts +155 -0
  59. package/dist/src/color/constants.d.ts +104 -0
  60. package/dist/src/color/typedefs.d.ts +16 -0
  61. package/dist/src/color/util.d.ts +27 -0
  62. package/dist/src/config.d.ts +115 -0
  63. package/dist/src/constants.d.ts +21 -0
  64. package/dist/src/controls/Control.d.ts +229 -0
  65. package/dist/src/controls/changeWidth.d.ts +13 -0
  66. package/dist/src/controls/commonControls.d.ts +28 -0
  67. package/dist/src/controls/controlRendering.d.ts +29 -0
  68. package/dist/src/controls/drag.d.ts +12 -0
  69. package/dist/src/controls/fireEvent.d.ts +3 -0
  70. package/dist/src/controls/index.d.ts +13 -0
  71. package/dist/src/controls/polyControl.d.ts +5 -0
  72. package/dist/src/controls/rotate.d.ts +12 -0
  73. package/dist/src/controls/scale.d.ts +47 -0
  74. package/dist/src/controls/scaleSkew.d.ts +39 -0
  75. package/dist/src/controls/skew.d.ts +33 -0
  76. package/dist/src/controls/util.d.ts +41 -0
  77. package/dist/src/controls/wrapWithFireEvent.d.ts +8 -0
  78. package/dist/src/controls/wrapWithFixedAnchor.d.ts +9 -0
  79. package/dist/src/env/browser.d.ts +3 -0
  80. package/dist/src/env/index.d.ts +28 -0
  81. package/dist/src/env/node.d.ts +6 -0
  82. package/dist/src/env/types.d.ts +15 -0
  83. package/dist/src/filters/BaseFilter.d.ts +160 -0
  84. package/dist/src/filters/BlendColor.d.ts +81 -0
  85. package/dist/src/filters/BlendImage.d.ts +93 -0
  86. package/dist/src/filters/Blur.d.ts +52 -0
  87. package/dist/src/filters/Boilerplate.d.ts +48 -0
  88. package/dist/src/filters/Brightness.d.ts +48 -0
  89. package/dist/src/filters/Canvas2dFilterBackend.d.ts +27 -0
  90. package/dist/src/filters/ColorMatrix.d.ts +64 -0
  91. package/dist/src/filters/ColorMatrixFilters.d.ts +537 -0
  92. package/dist/src/filters/Composed.d.ts +46 -0
  93. package/dist/src/filters/Contrast.d.ts +46 -0
  94. package/dist/src/filters/Convolute.d.ts +83 -0
  95. package/dist/src/filters/FilterBackend.d.ts +15 -0
  96. package/dist/src/filters/GLProbes/GLProbe.d.ts +7 -0
  97. package/dist/src/filters/GLProbes/NodeGLProbe.d.ts +11 -0
  98. package/dist/src/filters/GLProbes/WebGLProbe.d.ts +20 -0
  99. package/dist/src/filters/Gamma.d.ts +55 -0
  100. package/dist/src/filters/Grayscale.d.ts +47 -0
  101. package/dist/src/filters/HueRotation.d.ts +25 -0
  102. package/dist/src/filters/Invert.d.ts +56 -0
  103. package/dist/src/filters/Noise.d.ts +55 -0
  104. package/dist/src/filters/Pixelate.d.ts +45 -0
  105. package/dist/src/filters/RemoveColor.d.ts +64 -0
  106. package/dist/src/filters/Resize.d.ts +137 -0
  107. package/dist/src/filters/Saturation.d.ts +49 -0
  108. package/dist/src/filters/Vibrance.d.ts +49 -0
  109. package/dist/src/filters/WebGLFilterBackend.d.ts +128 -0
  110. package/dist/src/filters/filters.d.ts +21 -0
  111. package/dist/src/filters/index.d.ts +7 -0
  112. package/dist/src/filters/shaders/baseFilter.d.ts +4 -0
  113. package/dist/src/filters/shaders/blendColor.d.ts +13 -0
  114. package/dist/src/filters/shaders/blendImage.d.ts +3 -0
  115. package/dist/src/filters/shaders/blur.d.ts +2 -0
  116. package/dist/src/filters/shaders/brightness.d.ts +2 -0
  117. package/dist/src/filters/shaders/colorMatrix.d.ts +2 -0
  118. package/dist/src/filters/shaders/constrast.d.ts +2 -0
  119. package/dist/src/filters/shaders/convolute.d.ts +11 -0
  120. package/dist/src/filters/shaders/gamma.d.ts +2 -0
  121. package/dist/src/filters/shaders/grayscale.d.ts +3 -0
  122. package/dist/src/filters/shaders/invert.d.ts +2 -0
  123. package/dist/src/filters/shaders/noise.d.ts +2 -0
  124. package/dist/src/filters/shaders/pixelate.d.ts +2 -0
  125. package/dist/src/filters/shaders/removeColor.d.ts +2 -0
  126. package/dist/src/filters/shaders/saturation.d.ts +2 -0
  127. package/dist/src/filters/shaders/vibrance.d.ts +2 -0
  128. package/dist/src/filters/typedefs.d.ts +48 -0
  129. package/dist/src/filters/utils.d.ts +3 -0
  130. package/dist/src/gradient/Gradient.d.ts +150 -0
  131. package/dist/src/gradient/constants.d.ts +15 -0
  132. package/dist/src/gradient/index.d.ts +3 -0
  133. package/dist/src/gradient/parser/index.d.ts +4 -0
  134. package/dist/src/gradient/parser/misc.d.ts +4 -0
  135. package/dist/src/gradient/parser/parseColorStops.d.ts +3 -0
  136. package/dist/src/gradient/parser/parseCoords.d.ts +17 -0
  137. package/dist/src/gradient/typedefs.d.ts +93 -0
  138. package/dist/src/mixins/eraser_brush.mixin.d.ts +2 -0
  139. package/dist/src/parkinglot/canvas_animation.mixin.d.ts +2 -0
  140. package/dist/src/parkinglot/straighten.d.ts +2 -0
  141. package/dist/src/parser/applyViewboxTransform.d.ts +5 -0
  142. package/dist/src/parser/attributes.d.ts +6 -0
  143. package/dist/src/parser/constants.d.ts +53 -0
  144. package/dist/src/parser/doesSomeParentMatch.d.ts +2 -0
  145. package/dist/src/parser/elementById.d.ts +6 -0
  146. package/dist/src/parser/elementMatchesRule.d.ts +5 -0
  147. package/dist/src/parser/elements_parser.d.ts +3 -0
  148. package/dist/src/parser/getCSSRules.d.ts +7 -0
  149. package/dist/src/parser/getGlobalStylesForElement.d.ts +5 -0
  150. package/dist/src/parser/getGradientDefs.d.ts +7 -0
  151. package/dist/src/parser/getMultipleNodes.d.ts +2 -0
  152. package/dist/src/parser/getSvgRegex.d.ts +2 -0
  153. package/dist/src/parser/hasAncestorWithNodeName.d.ts +2 -0
  154. package/dist/src/parser/index.d.ts +9 -0
  155. package/dist/src/parser/loadSVGFromString.d.ts +18 -0
  156. package/dist/src/parser/loadSVGFromURL.d.ts +19 -0
  157. package/dist/src/parser/normalizeAttr.d.ts +2 -0
  158. package/dist/src/parser/normalizeValue.d.ts +2 -0
  159. package/dist/src/parser/parseAttributes.d.ts +9 -0
  160. package/dist/src/parser/parseFontDeclaration.d.ts +10 -0
  161. package/dist/src/parser/parsePointsAttribute.d.ts +12 -0
  162. package/dist/src/parser/parseSVGDocument.d.ts +23 -0
  163. package/dist/src/parser/parseStyleAttribute.d.ts +9 -0
  164. package/dist/src/parser/parseStyleObject.d.ts +2 -0
  165. package/dist/src/parser/parseStyleString.d.ts +2 -0
  166. package/dist/src/parser/parseTransformAttribute.d.ts +11 -0
  167. package/dist/src/parser/parseUseDirectives.d.ts +2 -0
  168. package/dist/src/parser/percent.d.ts +9 -0
  169. package/dist/src/parser/recursivelyParseGradientsXlink.d.ts +2 -0
  170. package/dist/src/parser/selectorMatches.d.ts +2 -0
  171. package/dist/src/parser/setStrokeFillOpacity.d.ts +6 -0
  172. package/dist/src/parser/typedefs.d.ts +9 -0
  173. package/dist/src/shapes/ActiveSelection.d.ts +83 -0
  174. package/dist/src/shapes/Circle.d.ts +99 -0
  175. package/dist/src/shapes/Ellipse.d.ts +84 -0
  176. package/dist/src/shapes/Group.d.ts +407 -0
  177. package/dist/src/shapes/IText/DraggableTextDelegate.d.ts +78 -0
  178. package/dist/src/shapes/IText/IText.d.ts +336 -0
  179. package/dist/src/shapes/IText/ITextBehavior.d.ts +287 -0
  180. package/dist/src/shapes/IText/ITextClickBehavior.d.ts +73 -0
  181. package/dist/src/shapes/IText/ITextKeyBehavior.d.ts +195 -0
  182. package/dist/src/shapes/IText/constants.d.ts +13 -0
  183. package/dist/src/shapes/Image.d.ts +309 -0
  184. package/dist/src/shapes/Line.d.ts +121 -0
  185. package/dist/src/shapes/Object/AnimatableObject.d.ts +33 -0
  186. package/dist/src/shapes/Object/FabricObject.d.ts +11 -0
  187. package/dist/src/shapes/Object/FabricObjectSVGExportMixin.d.ts +74 -0
  188. package/dist/src/shapes/Object/InteractiveObject.d.ts +296 -0
  189. package/dist/src/shapes/Object/Object.d.ts +599 -0
  190. package/dist/src/shapes/Object/ObjectGeometry.d.ts +327 -0
  191. package/dist/src/shapes/Object/ObjectOrigin.d.ts +109 -0
  192. package/dist/src/shapes/Object/StackedObject.d.ts +72 -0
  193. package/dist/src/shapes/Object/defaultValues.d.ts +76 -0
  194. package/dist/src/shapes/Object/types/BaseProps.d.ts +84 -0
  195. package/dist/src/shapes/Object/types/BorderProps.d.ts +37 -0
  196. package/dist/src/shapes/Object/types/ControlProps.d.ts +62 -0
  197. package/dist/src/shapes/Object/types/FabricObjectProps.d.ts +96 -0
  198. package/dist/src/shapes/Object/types/FillStrokeProps.d.ts +80 -0
  199. package/dist/src/shapes/Object/types/LockInteractionProps.d.ts +51 -0
  200. package/dist/src/shapes/Object/types/ObjectProps.d.ts +42 -0
  201. package/dist/src/shapes/Object/types/SerializedObjectProps.d.ts +66 -0
  202. package/dist/src/shapes/Object/types/index.d.ts +6 -0
  203. package/dist/src/shapes/Path.d.ts +214 -0
  204. package/dist/src/shapes/Polygon.d.ts +10 -0
  205. package/dist/src/shapes/Polyline.d.ts +147 -0
  206. package/dist/src/shapes/Rect.d.ts +82 -0
  207. package/dist/src/shapes/Text/StyledText.d.ts +123 -0
  208. package/dist/src/shapes/Text/Text.d.ts +688 -0
  209. package/dist/src/shapes/Text/TextSVGExportMixin.d.ts +32 -0
  210. package/dist/src/shapes/Text/constants.d.ts +13 -0
  211. package/dist/src/shapes/Textbox.d.ts +204 -0
  212. package/dist/src/shapes/Triangle.d.ts +26 -0
  213. package/dist/src/typedefs.d.ts +96 -0
  214. package/dist/src/util/animation/AnimationBase.d.ts +54 -0
  215. package/dist/src/util/animation/AnimationFrameProvider.d.ts +3 -0
  216. package/dist/src/util/animation/AnimationRegistry.d.ts +29 -0
  217. package/dist/src/util/animation/ArrayAnimation.d.ts +10 -0
  218. package/dist/src/util/animation/ColorAnimation.d.ts +11 -0
  219. package/dist/src/util/animation/ValueAnimation.d.ts +10 -0
  220. package/dist/src/util/animation/animate.d.ts +37 -0
  221. package/dist/src/util/animation/easing.d.ts +130 -0
  222. package/dist/src/util/animation/index.d.ts +3 -0
  223. package/dist/src/util/animation/types.d.ts +87 -0
  224. package/dist/src/util/applyMixins.d.ts +8 -0
  225. package/dist/src/util/dom_event.d.ts +5 -0
  226. package/dist/src/util/dom_misc.d.ts +12 -0
  227. package/dist/src/util/dom_request.d.ts +14 -0
  228. package/dist/src/util/dom_style.d.ts +7 -0
  229. package/dist/src/util/index.d.ts +36 -0
  230. package/dist/src/util/internals/cleanupSvgAttribute.d.ts +2 -0
  231. package/dist/src/util/internals/cleanupSvgAttribute.test.d.ts +2 -0
  232. package/dist/src/util/internals/cloneDeep.d.ts +2 -0
  233. package/dist/src/util/internals/cloneDeep.test.d.ts +2 -0
  234. package/dist/src/util/internals/getRandomInt.d.ts +8 -0
  235. package/dist/src/util/internals/getRandomInt.test.d.ts +2 -0
  236. package/dist/src/util/internals/ifNaN.d.ts +8 -0
  237. package/dist/src/util/internals/index.d.ts +4 -0
  238. package/dist/src/util/internals/removeFromArray.d.ts +9 -0
  239. package/dist/src/util/internals/uid.d.ts +2 -0
  240. package/dist/src/util/lang_string.d.ts +22 -0
  241. package/dist/src/util/misc/boundingBoxFromPoints.d.ts +9 -0
  242. package/dist/src/util/misc/capValue.d.ts +2 -0
  243. package/dist/src/util/misc/cos.d.ts +10 -0
  244. package/dist/src/util/misc/dom.d.ts +28 -0
  245. package/dist/src/util/misc/findScaleTo.d.ts +20 -0
  246. package/dist/src/util/misc/groupSVGElements.d.ts +9 -0
  247. package/dist/src/util/misc/isTransparent.d.ts +11 -0
  248. package/dist/src/util/misc/matrix.d.ts +168 -0
  249. package/dist/src/util/misc/mergeClipPaths.d.ts +23 -0
  250. package/dist/src/util/misc/objectEnlive.d.ts +41 -0
  251. package/dist/src/util/misc/objectTransforms.d.ts +68 -0
  252. package/dist/src/util/misc/pick.d.ts +9 -0
  253. package/dist/src/util/misc/planeChange.d.ts +81 -0
  254. package/dist/src/util/misc/projectStroke/StrokeLineCapProjections.d.ts +52 -0
  255. package/dist/src/util/misc/projectStroke/StrokeLineJoinProjections.d.ts +82 -0
  256. package/dist/src/util/misc/projectStroke/StrokeProjectionsBase.d.ts +26 -0
  257. package/dist/src/util/misc/projectStroke/index.d.ts +12 -0
  258. package/dist/src/util/misc/projectStroke/types.d.ts +23 -0
  259. package/dist/src/util/misc/radiansDegreesConversion.d.ts +14 -0
  260. package/dist/src/util/misc/resolveOrigin.d.ts +9 -0
  261. package/dist/src/util/misc/rotatePoint.d.ts +12 -0
  262. package/dist/src/util/misc/sin.d.ts +10 -0
  263. package/dist/src/util/misc/svgParsing.d.ts +45 -0
  264. package/dist/src/util/misc/textStyles.d.ts +32 -0
  265. package/dist/src/util/misc/toFixed.d.ts +8 -0
  266. package/dist/src/util/misc/vectors.d.ts +58 -0
  267. package/dist/src/util/path/index.d.ts +96 -0
  268. package/dist/src/util/path/regex.d.ts +2 -0
  269. package/dist/src/util/path/typechecks.d.ts +24 -0
  270. package/dist/src/util/path/typedefs.d.ts +220 -0
  271. package/dist/src/util/transform_matrix_removal.d.ts +14 -0
  272. package/dist/src/util/typeAssertions.d.ts +19 -0
  273. package/e2e/site/index.html +25 -0
  274. package/e2e/utils/objects.ts +36 -0
  275. package/fabric.ts +72 -0
  276. package/index.node.ts +43 -0
  277. package/index.ts +1 -0
  278. package/jest.config.js +194 -0
  279. package/lib/aligning_guidelines.js +2 -2
  280. package/package.json +110 -40
  281. package/playwright.config.ts +64 -0
  282. package/publish.js +0 -26
  283. package/rollup.config.mjs +99 -0
  284. package/rollup.test.config.js +24 -0
  285. package/scripts/build.mjs +50 -0
  286. package/scripts/buildLock.mjs +115 -0
  287. package/scripts/buildReporter.mjs +15 -0
  288. package/scripts/buildStats.mjs +139 -0
  289. package/scripts/dirname.mjs +14 -0
  290. package/scripts/git.mjs +36 -0
  291. package/scripts/index.mjs +564 -0
  292. package/scripts/sandbox.mjs +149 -0
  293. package/src/ClassRegistry.ts +56 -0
  294. package/src/Collection.ts +346 -0
  295. package/src/CommonMethods.ts +63 -0
  296. package/src/EventTypeDefs.ts +298 -0
  297. package/src/Intersection.ts +302 -0
  298. package/src/Observable.ts +181 -0
  299. package/src/Pattern/Pattern.ts +207 -0
  300. package/src/Pattern/index.ts +2 -0
  301. package/src/Pattern/types.ts +17 -0
  302. package/src/Point.ts +388 -0
  303. package/src/Shadow.ts +214 -0
  304. package/src/brushes/{base_brush.class.js → BaseBrush.ts} +63 -42
  305. package/src/brushes/CircleBrush.test.ts +11 -0
  306. package/src/brushes/CircleBrush.ts +140 -0
  307. package/src/brushes/PatternBrush.ts +70 -0
  308. package/src/brushes/PencilBrush.ts +300 -0
  309. package/src/brushes/SprayBrush.ts +214 -0
  310. package/src/brushes/typedefs.ts +18 -0
  311. package/src/cache.ts +90 -0
  312. package/src/canvas/Canvas.ts +1598 -0
  313. package/src/canvas/DOMManagers/CanvasDOMManager.ts +124 -0
  314. package/src/canvas/DOMManagers/StaticCanvasDOMManager.ts +80 -0
  315. package/src/canvas/DOMManagers/util.spec.ts +26 -0
  316. package/src/canvas/DOMManagers/util.ts +98 -0
  317. package/src/canvas/SelectableCanvas.ts +1506 -0
  318. package/src/canvas/StaticCanvas.ts +1634 -0
  319. package/src/canvas/TextEditingManager.ts +70 -0
  320. package/src/canvas/canvas_gestures.mixin.ts +207 -0
  321. package/src/color/Color.ts +320 -0
  322. package/src/color/color_map.ts +154 -0
  323. package/src/color/constants.ts +107 -0
  324. package/src/color/typedefs.ts +18 -0
  325. package/src/color/util.ts +93 -0
  326. package/src/config.ts +159 -0
  327. package/src/constants.ts +29 -0
  328. package/src/controls/Control.ts +385 -0
  329. package/src/controls/changeWidth.ts +53 -0
  330. package/src/controls/commonControls.ts +105 -0
  331. package/src/controls/controlRendering.ts +138 -0
  332. package/src/controls/drag.ts +32 -0
  333. package/src/controls/fireEvent.ts +18 -0
  334. package/src/controls/index.ts +22 -0
  335. package/src/controls/polyControl.ts +135 -0
  336. package/src/controls/rotate.ts +87 -0
  337. package/src/controls/scale.ts +277 -0
  338. package/src/controls/scaleSkew.ts +92 -0
  339. package/src/controls/skew.ts +243 -0
  340. package/src/controls/util.ts +155 -0
  341. package/src/controls/wrapWithFireEvent.ts +25 -0
  342. package/src/controls/wrapWithFixedAnchor.ts +20 -0
  343. package/src/env/browser.ts +32 -0
  344. package/src/env/index.ts +38 -0
  345. package/src/env/node.ts +58 -0
  346. package/src/env/types.ts +15 -0
  347. package/src/filters/{base_filter.class.js → BaseFilter.ts} +203 -151
  348. package/src/filters/BlendColor.ts +219 -0
  349. package/src/filters/BlendImage.ts +230 -0
  350. package/src/filters/Blur.ts +181 -0
  351. package/src/filters/Boilerplate.ts +94 -0
  352. package/src/filters/Brightness.ts +85 -0
  353. package/src/filters/Canvas2dFilterBackend.ts +65 -0
  354. package/src/filters/ColorMatrix.ts +147 -0
  355. package/src/filters/ColorMatrixFilters.ts +79 -0
  356. package/src/filters/Composed.ts +78 -0
  357. package/src/filters/Contrast.ts +84 -0
  358. package/src/filters/Convolute.ts +186 -0
  359. package/src/filters/FilterBackend.ts +38 -0
  360. package/src/filters/GLProbes/GLProbe.ts +7 -0
  361. package/src/filters/GLProbes/NodeGLProbe.ts +15 -0
  362. package/src/filters/GLProbes/WebGLProbe.ts +47 -0
  363. package/src/filters/Gamma.ts +112 -0
  364. package/src/filters/Grayscale.ts +104 -0
  365. package/src/filters/HueRotation.ts +64 -0
  366. package/src/filters/Invert.ts +101 -0
  367. package/src/filters/Noise.ts +96 -0
  368. package/src/filters/Pixelate.ts +98 -0
  369. package/src/filters/RemoveColor.ts +137 -0
  370. package/src/filters/Resize.ts +540 -0
  371. package/src/filters/Saturation.ts +89 -0
  372. package/src/filters/Vibrance.ts +90 -0
  373. package/src/filters/WebGLFilterBackend.ts +456 -0
  374. package/src/filters/filters.ts +28 -0
  375. package/src/filters/index.ts +12 -0
  376. package/src/filters/shaders/baseFilter.ts +17 -0
  377. package/src/filters/shaders/blendColor.ts +33 -0
  378. package/src/filters/shaders/blendImage.ts +32 -0
  379. package/src/filters/shaders/blur.ts +24 -0
  380. package/src/filters/shaders/brightness.ts +11 -0
  381. package/src/filters/shaders/colorMatrix.ts +12 -0
  382. package/src/filters/shaders/constrast.ts +11 -0
  383. package/src/filters/shaders/convolute.ts +154 -0
  384. package/src/filters/shaders/gamma.ts +15 -0
  385. package/src/filters/shaders/grayscale.ts +36 -0
  386. package/src/filters/shaders/invert.ts +19 -0
  387. package/src/filters/shaders/noise.ts +16 -0
  388. package/src/filters/shaders/pixelate.ts +19 -0
  389. package/src/filters/shaders/removeColor.ts +13 -0
  390. package/src/filters/shaders/saturation.ts +15 -0
  391. package/src/filters/shaders/vibrance.ts +16 -0
  392. package/src/filters/typedefs.ts +59 -0
  393. package/src/filters/utils.ts +7 -0
  394. package/src/gradient/Gradient.ts +409 -0
  395. package/src/gradient/constants.ts +12 -0
  396. package/src/gradient/index.ts +2 -0
  397. package/src/gradient/parser/index.ts +3 -0
  398. package/src/gradient/parser/misc.ts +13 -0
  399. package/src/gradient/parser/parseColorStops.ts +56 -0
  400. package/src/gradient/parser/parseCoords.ts +73 -0
  401. package/src/gradient/typedefs.ts +104 -0
  402. package/src/mixins/{eraser_brush.mixin.js → eraser_brush.mixin.ts} +350 -239
  403. package/src/parkinglot/canvas_animation.mixin.ts +121 -0
  404. package/src/parkinglot/straighten.ts +58 -0
  405. package/src/parser/applyViewboxTransform.ts +158 -0
  406. package/src/parser/attributes.ts +25 -0
  407. package/src/parser/constants.ts +116 -0
  408. package/src/parser/doesSomeParentMatch.ts +18 -0
  409. package/src/parser/elementById.ts +21 -0
  410. package/src/parser/elementMatchesRule.ts +16 -0
  411. package/src/parser/elements_parser.ts +158 -0
  412. package/src/parser/getCSSRules.ts +61 -0
  413. package/src/parser/getGlobalStylesForElement.ts +19 -0
  414. package/src/parser/getGradientDefs.ts +31 -0
  415. package/src/parser/getMultipleNodes.ts +15 -0
  416. package/src/parser/getSvgRegex.ts +3 -0
  417. package/src/parser/hasAncestorWithNodeName.ts +14 -0
  418. package/src/parser/index.ts +8 -0
  419. package/src/parser/loadSVGFromString.ts +29 -0
  420. package/src/parser/loadSVGFromURL.ts +47 -0
  421. package/src/parser/normalizeAttr.ts +10 -0
  422. package/src/parser/normalizeValue.ts +64 -0
  423. package/src/parser/parseAttributes.ts +90 -0
  424. package/src/parser/parseFontDeclaration.ts +44 -0
  425. package/src/parser/parsePointsAttribute.ts +34 -0
  426. package/src/parser/parseSVGDocument.ts +118 -0
  427. package/src/parser/parseStyleAttribute.ts +27 -0
  428. package/src/parser/parseStyleObject.ts +15 -0
  429. package/src/parser/parseStyleString.ts +16 -0
  430. package/src/parser/parseTransformAttribute.ts +94 -0
  431. package/src/parser/parseUseDirectives.ts +78 -0
  432. package/src/parser/percent.ts +27 -0
  433. package/src/parser/recursivelyParseGradientsXlink.ts +42 -0
  434. package/src/parser/selectorMatches.ts +25 -0
  435. package/src/parser/setStrokeFillOpacity.ts +40 -0
  436. package/src/parser/typedefs.ts +13 -0
  437. package/src/shapes/ActiveSelection.ts +192 -0
  438. package/src/shapes/Circle.ts +236 -0
  439. package/src/shapes/Ellipse.ts +177 -0
  440. package/src/shapes/Group.ts +1103 -0
  441. package/src/shapes/IText/DraggableTextDelegate.ts +385 -0
  442. package/src/shapes/IText/IText.ts +696 -0
  443. package/src/shapes/IText/ITextBehavior.ts +1073 -0
  444. package/src/shapes/IText/ITextClickBehavior.ts +292 -0
  445. package/src/shapes/IText/ITextKeyBehavior.ts +675 -0
  446. package/src/shapes/IText/constants.ts +53 -0
  447. package/src/shapes/Image.ts +848 -0
  448. package/src/shapes/Line.ts +285 -0
  449. package/src/shapes/Object/AnimatableObject.ts +103 -0
  450. package/src/shapes/Object/FabricObject.ts +29 -0
  451. package/src/shapes/Object/FabricObjectSVGExportMixin.ts +278 -0
  452. package/src/shapes/Object/InteractiveObject.ts +669 -0
  453. package/src/shapes/Object/Object.ts +1589 -0
  454. package/src/shapes/Object/ObjectGeometry.ts +814 -0
  455. package/src/shapes/Object/ObjectOrigin.ts +277 -0
  456. package/src/shapes/Object/StackedObject.ts +206 -0
  457. package/src/shapes/Object/defaultValues.ts +110 -0
  458. package/src/shapes/Object/types/BaseProps.ts +96 -0
  459. package/src/shapes/Object/types/BorderProps.ts +40 -0
  460. package/src/shapes/Object/types/ControlProps.ts +69 -0
  461. package/src/shapes/Object/types/FabricObjectProps.ts +111 -0
  462. package/src/shapes/Object/types/FillStrokeProps.ts +90 -0
  463. package/src/shapes/Object/types/LockInteractionProps.ts +57 -0
  464. package/src/shapes/Object/types/ObjectProps.ts +49 -0
  465. package/src/shapes/Object/types/SerializedObjectProps.ts +73 -0
  466. package/src/shapes/Object/types/index.ts +8 -0
  467. package/src/shapes/Path.ts +434 -0
  468. package/src/shapes/Polygon.ts +22 -0
  469. package/src/shapes/Polyline.ts +364 -0
  470. package/src/shapes/Rect.ts +230 -0
  471. package/src/shapes/Text/StyledText.ts +323 -0
  472. package/src/shapes/Text/Text.ts +1891 -0
  473. package/src/shapes/Text/TextSVGExportMixin.ts +289 -0
  474. package/src/shapes/Text/constants.ts +111 -0
  475. package/src/shapes/Textbox.ts +526 -0
  476. package/src/shapes/Triangle.ts +62 -0
  477. package/src/typedefs.ts +121 -0
  478. package/src/util/animation/AnimationBase.ts +166 -0
  479. package/src/util/animation/AnimationFrameProvider.ts +9 -0
  480. package/src/util/animation/AnimationRegistry.ts +58 -0
  481. package/src/util/animation/ArrayAnimation.ts +27 -0
  482. package/src/util/animation/ColorAnimation.ts +74 -0
  483. package/src/util/animation/ValueAnimation.ts +29 -0
  484. package/src/util/animation/animate.ts +74 -0
  485. package/src/util/animation/easing.ts +327 -0
  486. package/src/util/animation/index.ts +2 -0
  487. package/src/util/animation/types.ts +136 -0
  488. package/src/util/applyMixins.ts +22 -0
  489. package/src/util/dom_event.ts +28 -0
  490. package/src/util/dom_misc.ts +44 -0
  491. package/src/util/dom_request.ts +64 -0
  492. package/src/util/dom_style.ts +20 -0
  493. package/src/util/index.ts +106 -0
  494. package/src/util/internals/cleanupSvgAttribute.test.ts +16 -0
  495. package/src/util/internals/cleanupSvgAttribute.ts +8 -0
  496. package/src/util/internals/cloneDeep.test.ts +16 -0
  497. package/src/util/internals/cloneDeep.ts +2 -0
  498. package/src/util/internals/getRandomInt.test.ts +33 -0
  499. package/src/util/internals/getRandomInt.ts +8 -0
  500. package/src/util/internals/ifNaN.ts +9 -0
  501. package/src/util/internals/index.ts +3 -0
  502. package/src/util/internals/removeFromArray.ts +14 -0
  503. package/src/util/internals/uid.ts +3 -0
  504. package/src/util/lang_string.ts +79 -0
  505. package/src/util/misc/boundingBoxFromPoints.ts +38 -0
  506. package/src/util/misc/capValue.ts +2 -0
  507. package/src/util/misc/cos.ts +24 -0
  508. package/src/util/misc/dom.ts +55 -0
  509. package/src/util/misc/findScaleTo.ts +29 -0
  510. package/src/util/misc/groupSVGElements.ts +15 -0
  511. package/src/util/misc/isTransparent.ts +28 -0
  512. package/src/util/misc/matrix.ts +313 -0
  513. package/src/util/misc/mergeClipPaths.ts +40 -0
  514. package/src/util/misc/objectEnlive.ts +174 -0
  515. package/src/util/misc/objectTransforms.ts +130 -0
  516. package/src/util/misc/pick.ts +29 -0
  517. package/src/util/misc/planeChange.ts +127 -0
  518. package/src/util/misc/projectStroke/StrokeLineCapProjections.ts +113 -0
  519. package/src/util/misc/projectStroke/StrokeLineJoinProjections.ts +227 -0
  520. package/src/util/misc/projectStroke/StrokeProjectionsBase.ts +76 -0
  521. package/src/util/misc/projectStroke/index.ts +55 -0
  522. package/src/util/misc/projectStroke/types.ts +24 -0
  523. package/src/util/misc/radiansDegreesConversion.ts +18 -0
  524. package/src/util/misc/resolveOrigin.ts +22 -0
  525. package/src/util/misc/rotatePoint.ts +15 -0
  526. package/src/util/misc/sin.ts +26 -0
  527. package/src/util/misc/svgParsing.ts +171 -0
  528. package/src/util/misc/textStyles.ts +132 -0
  529. package/src/util/misc/toFixed.ts +8 -0
  530. package/src/util/misc/vectors.ts +83 -0
  531. package/src/util/path/index.ts +1039 -0
  532. package/src/util/path/regex.ts +39 -0
  533. package/src/util/path/typechecks.ts +145 -0
  534. package/src/util/path/typedefs.ts +305 -0
  535. package/src/util/transform_matrix_removal.ts +61 -0
  536. package/src/util/typeAssertions.ts +78 -0
  537. package/tsconfig.json +106 -0
  538. package/HEADER.js +0 -203
  539. package/build.js +0 -287
  540. package/dist/fabric.js +0 -31187
  541. package/dist/fabric.min.js +0 -1
  542. package/old-travis-reference.yml +0 -97
  543. package/src/brushes/circle_brush.class.js +0 -144
  544. package/src/brushes/pattern_brush.class.js +0 -61
  545. package/src/brushes/pencil_brush.class.js +0 -310
  546. package/src/brushes/spray_brush.class.js +0 -219
  547. package/src/canvas.class.js +0 -1312
  548. package/src/color.class.js +0 -636
  549. package/src/control.class.js +0 -339
  550. package/src/controls.actions.js +0 -740
  551. package/src/controls.render.js +0 -99
  552. package/src/elements_parser.js +0 -152
  553. package/src/filters/2d_backend.class.js +0 -65
  554. package/src/filters/blendcolor_filter.class.js +0 -251
  555. package/src/filters/blendimage_filter.class.js +0 -247
  556. package/src/filters/blur_filter.class.js +0 -217
  557. package/src/filters/brightness_filter.class.js +0 -113
  558. package/src/filters/colormatrix_filter.class.js +0 -159
  559. package/src/filters/composed_filter.class.js +0 -72
  560. package/src/filters/contrast_filter.class.js +0 -113
  561. package/src/filters/convolute_filter.class.js +0 -352
  562. package/src/filters/filter_boilerplate.js +0 -111
  563. package/src/filters/filter_generator.js +0 -85
  564. package/src/filters/gamma_filter.class.js +0 -136
  565. package/src/filters/grayscale_filter.class.js +0 -154
  566. package/src/filters/hue_rotation.class.js +0 -107
  567. package/src/filters/invert_filter.class.js +0 -111
  568. package/src/filters/noise_filter.class.js +0 -134
  569. package/src/filters/pixelate_filter.class.js +0 -137
  570. package/src/filters/removecolor_filter.class.js +0 -173
  571. package/src/filters/resize_filter.class.js +0 -490
  572. package/src/filters/saturate_filter.class.js +0 -119
  573. package/src/filters/vibrance_filter.class.js +0 -122
  574. package/src/filters/webgl_backend.class.js +0 -396
  575. package/src/globalFabric.js +0 -4
  576. package/src/gradient.class.js +0 -490
  577. package/src/intersection.class.js +0 -172
  578. package/src/log.js +0 -11
  579. package/src/mixins/animation.mixin.js +0 -231
  580. package/src/mixins/canvas_dataurl_exporter.mixin.js +0 -97
  581. package/src/mixins/canvas_events.mixin.js +0 -974
  582. package/src/mixins/canvas_gestures.mixin.js +0 -149
  583. package/src/mixins/canvas_grouping.mixin.js +0 -177
  584. package/src/mixins/canvas_serialization.mixin.js +0 -228
  585. package/src/mixins/collection.mixin.js +0 -170
  586. package/src/mixins/default_controls.js +0 -114
  587. package/src/mixins/itext.svg_export.js +0 -241
  588. package/src/mixins/itext_behavior.mixin.js +0 -940
  589. package/src/mixins/itext_click_behavior.mixin.js +0 -278
  590. package/src/mixins/itext_key_behavior.mixin.js +0 -694
  591. package/src/mixins/object.svg_export.js +0 -258
  592. package/src/mixins/object_geometry.mixin.js +0 -683
  593. package/src/mixins/object_interactivity.mixin.js +0 -314
  594. package/src/mixins/object_origin.mixin.js +0 -255
  595. package/src/mixins/object_stacking.mixin.js +0 -80
  596. package/src/mixins/object_straightening.mixin.js +0 -80
  597. package/src/mixins/observable.mixin.js +0 -141
  598. package/src/mixins/shared_methods.mixin.js +0 -94
  599. package/src/mixins/stateful.mixin.js +0 -107
  600. package/src/mixins/text_style.mixin.js +0 -324
  601. package/src/parser.js +0 -1090
  602. package/src/pattern.class.js +0 -189
  603. package/src/point.class.js +0 -337
  604. package/src/shadow.class.js +0 -195
  605. package/src/shapes/active_selection.class.js +0 -155
  606. package/src/shapes/circle.class.js +0 -210
  607. package/src/shapes/ellipse.class.js +0 -181
  608. package/src/shapes/group.class.js +0 -593
  609. package/src/shapes/image.class.js +0 -764
  610. package/src/shapes/itext.class.js +0 -526
  611. package/src/shapes/line.class.js +0 -324
  612. package/src/shapes/object.class.js +0 -2008
  613. package/src/shapes/path.class.js +0 -384
  614. package/src/shapes/polygon.class.js +0 -81
  615. package/src/shapes/polyline.class.js +0 -268
  616. package/src/shapes/rect.class.js +0 -187
  617. package/src/shapes/text.class.js +0 -1696
  618. package/src/shapes/textbox.class.js +0 -461
  619. package/src/shapes/triangle.class.js +0 -93
  620. package/src/static_canvas.class.js +0 -1881
  621. package/src/util/anim_ease.js +0 -398
  622. package/src/util/animate.js +0 -254
  623. package/src/util/animate_color.js +0 -74
  624. package/src/util/dom_event.js +0 -50
  625. package/src/util/dom_misc.js +0 -300
  626. package/src/util/dom_request.js +0 -54
  627. package/src/util/dom_style.js +0 -70
  628. package/src/util/lang_array.js +0 -94
  629. package/src/util/lang_class.js +0 -115
  630. package/src/util/lang_object.js +0 -75
  631. package/src/util/lang_string.js +0 -110
  632. package/src/util/misc.js +0 -1330
  633. package/src/util/named_accessors.mixin.js +0 -428
  634. package/src/util/path.js +0 -829
@@ -0,0 +1,526 @@
1
+ // @ts-nocheck
2
+ import type { TClassProperties } from '../typedefs';
3
+ import { IText } from './IText/IText';
4
+ import { classRegistry } from '../ClassRegistry';
5
+ import { createTextboxDefaultControls } from '../controls/commonControls';
6
+ import { JUSTIFY } from './Text/constants';
7
+ import type { TextStyleDeclaration } from 'fabric';
8
+ // @TODO: Many things here are configuration related and shouldn't be on the class nor prototype
9
+ // regexes, list of properties that are not suppose to change by instances, magic consts.
10
+ // this will be a separated effort
11
+ export const textboxDefaultValues: Partial<TClassProperties<Textbox>> = {
12
+ minWidth: 20,
13
+ dynamicMinWidth: 2,
14
+ lockScalingFlip: true,
15
+ noScaleCache: false,
16
+ _wordJoiners: /[ \t\r]/,
17
+ splitByGrapheme: false,
18
+ };
19
+
20
+ export type GraphemeData = {
21
+ wordsData: {
22
+ word: string;
23
+ width: number;
24
+ }[][];
25
+ largestWordWidth: number;
26
+ };
27
+
28
+ /**
29
+ * Textbox class, based on IText, allows the user to resize the text rectangle
30
+ * and wraps lines automatically. Textboxes have their Y scaling locked, the
31
+ * user can only change width. Height is adjusted automatically based on the
32
+ * wrapping of lines.
33
+ */
34
+ export class Textbox extends IText {
35
+ /**
36
+ * Minimum width of textbox, in pixels.
37
+ * @type Number
38
+ * @default
39
+ */
40
+ declare minWidth: number;
41
+
42
+ /**
43
+ * Minimum calculated width of a textbox, in pixels.
44
+ * fixed to 2 so that an empty textbox cannot go to 0
45
+ * and is still selectable without text.
46
+ * @type Number
47
+ * @default
48
+ */
49
+ declare dynamicMinWidth: number;
50
+
51
+ /**
52
+ * Use this boolean property in order to split strings that have no white space concept.
53
+ * this is a cheap way to help with chinese/japanese
54
+ * @type Boolean
55
+ * @since 2.6.0
56
+ */
57
+ declare splitByGrapheme: boolean;
58
+
59
+ static type = 'Textbox';
60
+
61
+ static textLayoutProperties = [...IText.textLayoutProperties, 'width'];
62
+
63
+ static ownDefaults: Record<string, any> = textboxDefaultValues;
64
+
65
+ static getDefaults() {
66
+ return {
67
+ ...super.getDefaults(),
68
+ controls: createTextboxDefaultControls(),
69
+ ...Textbox.ownDefaults,
70
+ };
71
+ }
72
+
73
+ /**
74
+ * Unlike superclass's version of this function, Textbox does not update
75
+ * its width.
76
+ * @private
77
+ * @override
78
+ */
79
+ initDimensions() {
80
+ if (!this.initialized) {
81
+ return;
82
+ }
83
+ this.isEditing && this.initDelayedCursor();
84
+ this._clearCache();
85
+ // clear dynamicMinWidth as it will be different after we re-wrap line
86
+ this.dynamicMinWidth = 0;
87
+ // wrap lines
88
+ this._styleMap = this._generateStyleMap(this._splitText());
89
+ // if after wrapping, the width is smaller than dynamicMinWidth, change the width and re-wrap
90
+ if (this.dynamicMinWidth > this.width) {
91
+ this._set('width', this.dynamicMinWidth);
92
+ }
93
+ if (this.textAlign.includes(JUSTIFY)) {
94
+ // once text is measured we need to make space fatter to make justified text.
95
+ this.enlargeSpaces();
96
+ }
97
+ // clear cache and re-calculate height
98
+ this.height = this.calcTextHeight();
99
+ }
100
+
101
+ /**
102
+ * Generate an object that translates the style object so that it is
103
+ * broken up by visual lines (new lines and automatic wrapping).
104
+ * The original text styles object is broken up by actual lines (new lines only),
105
+ * which is only sufficient for Text / IText
106
+ * @private
107
+ */
108
+ _generateStyleMap(textInfo) {
109
+ let realLineCount = 0,
110
+ realLineCharCount = 0,
111
+ charCount = 0;
112
+ const map = {};
113
+
114
+ for (let i = 0; i < textInfo.graphemeLines.length; i++) {
115
+ if (textInfo.graphemeText[charCount] === '\n' && i > 0) {
116
+ realLineCharCount = 0;
117
+ charCount++;
118
+ realLineCount++;
119
+ } else if (
120
+ !this.splitByGrapheme &&
121
+ this._reSpaceAndTab.test(textInfo.graphemeText[charCount]) &&
122
+ i > 0
123
+ ) {
124
+ // this case deals with space's that are removed from end of lines when wrapping
125
+ realLineCharCount++;
126
+ charCount++;
127
+ }
128
+
129
+ map[i] = { line: realLineCount, offset: realLineCharCount };
130
+
131
+ charCount += textInfo.graphemeLines[i].length;
132
+ realLineCharCount += textInfo.graphemeLines[i].length;
133
+ }
134
+
135
+ return map;
136
+ }
137
+
138
+ /**
139
+ * Returns true if object has a style property or has it on a specified line
140
+ * @param {Number} lineIndex
141
+ * @return {Boolean}
142
+ */
143
+ styleHas(property, lineIndex: number): boolean {
144
+ if (this._styleMap && !this.isWrapping) {
145
+ const map = this._styleMap[lineIndex];
146
+ if (map) {
147
+ lineIndex = map.line;
148
+ }
149
+ }
150
+ return super.styleHas(property, lineIndex);
151
+ }
152
+
153
+ /**
154
+ * Returns true if object has no styling or no styling in a line
155
+ * @param {Number} lineIndex , lineIndex is on wrapped lines.
156
+ * @return {Boolean}
157
+ */
158
+ isEmptyStyles(lineIndex: number): boolean {
159
+ if (!this.styles) {
160
+ return true;
161
+ }
162
+ let offset = 0,
163
+ nextLineIndex = lineIndex + 1,
164
+ nextOffset,
165
+ shouldLimit = false;
166
+ const map = this._styleMap[lineIndex],
167
+ mapNextLine = this._styleMap[lineIndex + 1];
168
+ if (map) {
169
+ lineIndex = map.line;
170
+ offset = map.offset;
171
+ }
172
+ if (mapNextLine) {
173
+ nextLineIndex = mapNextLine.line;
174
+ shouldLimit = nextLineIndex === lineIndex;
175
+ nextOffset = mapNextLine.offset;
176
+ }
177
+ const obj =
178
+ typeof lineIndex === 'undefined'
179
+ ? this.styles
180
+ : { line: this.styles[lineIndex] };
181
+ for (const p1 in obj) {
182
+ for (const p2 in obj[p1]) {
183
+ if (p2 >= offset && (!shouldLimit || p2 < nextOffset)) {
184
+ // eslint-disable-next-line no-unused-vars
185
+ for (const p3 in obj[p1][p2]) {
186
+ return false;
187
+ }
188
+ }
189
+ }
190
+ }
191
+ return true;
192
+ }
193
+
194
+ /**
195
+ * @param {Number} lineIndex
196
+ * @param {Number} charIndex
197
+ * @private
198
+ */
199
+ _getStyleDeclaration(
200
+ lineIndex: number,
201
+ charIndex: number
202
+ ): TextStyleDeclaration {
203
+ if (this._styleMap && !this.isWrapping) {
204
+ const map = this._styleMap[lineIndex];
205
+ if (!map) {
206
+ return {};
207
+ }
208
+ lineIndex = map.line;
209
+ charIndex = map.offset + charIndex;
210
+ }
211
+ return super._getStyleDeclaration(lineIndex, charIndex);
212
+ }
213
+
214
+ /**
215
+ * @param {Number} lineIndex
216
+ * @param {Number} charIndex
217
+ * @param {Object} style
218
+ * @private
219
+ */
220
+ protected _setStyleDeclaration(
221
+ lineIndex: number,
222
+ charIndex: number,
223
+ style: object
224
+ ) {
225
+ const map = this._styleMap[lineIndex];
226
+ lineIndex = map.line;
227
+ charIndex = map.offset + charIndex;
228
+
229
+ this.styles[lineIndex][charIndex] = style;
230
+ }
231
+
232
+ /**
233
+ * @param {Number} lineIndex
234
+ * @param {Number} charIndex
235
+ * @private
236
+ */
237
+ _deleteStyleDeclaration(lineIndex: number, charIndex: number) {
238
+ const map = this._styleMap[lineIndex];
239
+ lineIndex = map.line;
240
+ charIndex = map.offset + charIndex;
241
+ delete this.styles[lineIndex][charIndex];
242
+ }
243
+
244
+ /**
245
+ * probably broken need a fix
246
+ * Returns the real style line that correspond to the wrapped lineIndex line
247
+ * Used just to verify if the line does exist or not.
248
+ * @param {Number} lineIndex
249
+ * @returns {Boolean} if the line exists or not
250
+ * @private
251
+ */
252
+ protected _getLineStyle(lineIndex: number): boolean {
253
+ const map = this._styleMap[lineIndex];
254
+ return !!this.styles[map.line];
255
+ }
256
+
257
+ /**
258
+ * Set the line style to an empty object so that is initialized
259
+ * @param {Number} lineIndex
260
+ * @param {Object} style
261
+ * @private
262
+ */
263
+ protected _setLineStyle(lineIndex: number) {
264
+ const map = this._styleMap[lineIndex];
265
+ this.styles[map.line] = {};
266
+ }
267
+
268
+ /**
269
+ * Wraps text using the 'width' property of Textbox. First this function
270
+ * splits text on newlines, so we preserve newlines entered by the user.
271
+ * Then it wraps each line using the width of the Textbox by calling
272
+ * _wrapLine().
273
+ * @param {Array} lines The string array of text that is split into lines
274
+ * @param {Number} desiredWidth width you want to wrap to
275
+ * @returns {Array} Array of lines
276
+ */
277
+ _wrapText(lines: string[], desiredWidth: number): string[][] {
278
+ this.isWrapping = true;
279
+ // extract all thewords and the widths to optimally wrap lines.
280
+ const wordsData = this.getGraphemeDataForRender(lines);
281
+ const wrapped: string[][] = [];
282
+ for (let i = 0; i < lines.length; i++) {
283
+ wrapped.push(...this._wrapLine(i, desiredWidth, wordsData));
284
+ }
285
+ this.isWrapping = false;
286
+ return wrapped;
287
+ }
288
+
289
+ /**
290
+ * For each line of text terminated by an hard line stop,
291
+ * measure each word width and extract the largest word from all.
292
+ * The returned words here are the one that at the end will be rendered.
293
+ * @param {string[]} lines the lines we need to measure
294
+ *
295
+ */
296
+ getGraphemeDataForRender(lines: string[]): GraphemeData {
297
+ const splitByGrapheme = this.splitByGrapheme,
298
+ infix = splitByGrapheme ? '' : ' ';
299
+
300
+ let largestWordWidth = 0;
301
+
302
+ const data = lines.map((line, lineIndex) => {
303
+ let offset = 0;
304
+ const words = splitByGrapheme
305
+ ? this.graphemeSplit(line)
306
+ : this.wordSplit(line);
307
+
308
+ // fix a difference between split and graphemeSplit
309
+ if (words.length === 0) {
310
+ words.push([]);
311
+ }
312
+
313
+ return words.map((word) => {
314
+ // if using splitByGrapheme words are already in graphemes.
315
+ word = splitByGrapheme ? word : this.graphemeSplit(word);
316
+ const width = this._measureWord(word, lineIndex, offset);
317
+ largestWordWidth = Math.max(width, largestWordWidth);
318
+ offset += word.length + infix.length;
319
+ return { word, width };
320
+ });
321
+ });
322
+
323
+ return {
324
+ wordsData: data,
325
+ largestWordWidth,
326
+ };
327
+ }
328
+
329
+ /**
330
+ * Helper function to measure a string of text, given its lineIndex and charIndex offset
331
+ * It gets called when charBounds are not available yet.
332
+ * Override if necessary
333
+ * Use with {@link Textbox#wordSplit}
334
+ *
335
+ * @param {CanvasRenderingContext2D} ctx
336
+ * @param {String} text
337
+ * @param {number} lineIndex
338
+ * @param {number} charOffset
339
+ * @returns {number}
340
+ */
341
+ _measureWord(word, lineIndex: number, charOffset = 0): number {
342
+ let width = 0,
343
+ prevGrapheme;
344
+ const skipLeft = true;
345
+ for (let i = 0, len = word.length; i < len; i++) {
346
+ const box = this._getGraphemeBox(
347
+ word[i],
348
+ lineIndex,
349
+ i + charOffset,
350
+ prevGrapheme,
351
+ skipLeft
352
+ );
353
+ width += box.kernedWidth;
354
+ prevGrapheme = word[i];
355
+ }
356
+ return width;
357
+ }
358
+
359
+ /**
360
+ * Override this method to customize word splitting
361
+ * Use with {@link Textbox#_measureWord}
362
+ * @param {string} value
363
+ * @returns {string[]} array of words
364
+ */
365
+ wordSplit(value: string): string[] {
366
+ return value.split(this._wordJoiners);
367
+ }
368
+
369
+ /**
370
+ * Wraps a line of text using the width of the Textbox as desiredWidth
371
+ * and leveraging the known width o words from GraphemeData
372
+ * @private
373
+ * @param {Number} lineIndex
374
+ * @param {Number} desiredWidth width you want to wrap the line to
375
+ * @param {GraphemeData} graphemeData an object containing all the lines' words width.
376
+ * @param {Number} reservedSpace space to remove from wrapping for custom functionalities
377
+ * @returns {Array} Array of line(s) into which the given text is wrapped
378
+ * to.
379
+ */
380
+ _wrapLine(
381
+ lineIndex: number,
382
+ desiredWidth: number,
383
+ { largestWordWidth, wordsData }: GraphemeData,
384
+ reservedSpace = 0
385
+ ): Array<any> {
386
+ const additionalSpace = this._getWidthOfCharSpacing(),
387
+ splitByGrapheme = this.splitByGrapheme,
388
+ graphemeLines = [],
389
+ infix = splitByGrapheme ? '' : ' ';
390
+
391
+ let lineWidth = 0,
392
+ line = [],
393
+ // spaces in different languages?
394
+ offset = 0,
395
+ infixWidth = 0,
396
+ lineJustStarted = true;
397
+
398
+ desiredWidth -= reservedSpace;
399
+
400
+ const maxWidth = Math.max(
401
+ desiredWidth,
402
+ largestWordWidth,
403
+ this.dynamicMinWidth
404
+ );
405
+ // layout words
406
+ const data = wordsData[lineIndex];
407
+ offset = 0;
408
+ let i;
409
+ for (i = 0; i < data.length; i++) {
410
+ const { word, width: wordWidth } = data[i];
411
+ offset += word.length;
412
+
413
+ lineWidth += infixWidth + wordWidth - additionalSpace;
414
+ if (lineWidth > maxWidth && !lineJustStarted) {
415
+ graphemeLines.push(line);
416
+ line = [];
417
+ lineWidth = wordWidth;
418
+ lineJustStarted = true;
419
+ } else {
420
+ lineWidth += additionalSpace;
421
+ }
422
+
423
+ if (!lineJustStarted && !splitByGrapheme) {
424
+ line.push(infix);
425
+ }
426
+ line = line.concat(word);
427
+
428
+ infixWidth = splitByGrapheme
429
+ ? 0
430
+ : this._measureWord([infix], lineIndex, offset);
431
+ offset++;
432
+ lineJustStarted = false;
433
+ }
434
+
435
+ i && graphemeLines.push(line);
436
+
437
+ // TODO: this code is probably not necessary anymore.
438
+ // it can be moved out of this function since largestWordWidth is now
439
+ // known in advance
440
+ if (largestWordWidth + reservedSpace > this.dynamicMinWidth) {
441
+ this.dynamicMinWidth = largestWordWidth - additionalSpace + reservedSpace;
442
+ }
443
+ return graphemeLines;
444
+ }
445
+
446
+ /**
447
+ * Detect if the text line is ended with an hard break
448
+ * text and itext do not have wrapping, return false
449
+ * @param {Number} lineIndex text to split
450
+ * @return {Boolean}
451
+ */
452
+ isEndOfWrapping(lineIndex: number): boolean {
453
+ if (!this._styleMap[lineIndex + 1]) {
454
+ // is last line, return true;
455
+ return true;
456
+ }
457
+ if (this._styleMap[lineIndex + 1].line !== this._styleMap[lineIndex].line) {
458
+ // this is last line before a line break, return true;
459
+ return true;
460
+ }
461
+ return false;
462
+ }
463
+
464
+ /**
465
+ * Detect if a line has a linebreak and so we need to account for it when moving
466
+ * and counting style.
467
+ * @return Number
468
+ */
469
+ missingNewlineOffset(lineIndex) {
470
+ if (this.splitByGrapheme) {
471
+ return this.isEndOfWrapping(lineIndex) ? 1 : 0;
472
+ }
473
+ return 1;
474
+ }
475
+
476
+ /**
477
+ * Gets lines of text to render in the Textbox. This function calculates
478
+ * text wrapping on the fly every time it is called.
479
+ * @param {String} text text to split
480
+ * @returns {Array} Array of lines in the Textbox.
481
+ * @override
482
+ */
483
+ _splitTextIntoLines(text: string) {
484
+ const newText = super._splitTextIntoLines(text),
485
+ graphemeLines = this._wrapText(newText.lines, this.width),
486
+ lines = new Array(graphemeLines.length);
487
+ for (let i = 0; i < graphemeLines.length; i++) {
488
+ lines[i] = graphemeLines[i].join('');
489
+ }
490
+ newText.lines = lines;
491
+ newText.graphemeLines = graphemeLines;
492
+ return newText;
493
+ }
494
+
495
+ getMinWidth() {
496
+ return Math.max(this.minWidth, this.dynamicMinWidth);
497
+ }
498
+
499
+ _removeExtraneousStyles() {
500
+ const linesToKeep = {};
501
+ for (const prop in this._styleMap) {
502
+ if (this._textLines[prop]) {
503
+ linesToKeep[this._styleMap[prop].line] = 1;
504
+ }
505
+ }
506
+ for (const prop in this.styles) {
507
+ if (!linesToKeep[prop]) {
508
+ delete this.styles[prop];
509
+ }
510
+ }
511
+ }
512
+
513
+ /**
514
+ * Returns object representation of an instance
515
+ * @method toObject
516
+ * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output
517
+ * @return {Object} object representation of an instance
518
+ */
519
+ toObject(propertiesToInclude: Array<any>): object {
520
+ return super.toObject(
521
+ ['minWidth', 'splitByGrapheme'].concat(propertiesToInclude)
522
+ );
523
+ }
524
+ }
525
+
526
+ classRegistry.setClass(Textbox);
@@ -0,0 +1,62 @@
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 type = 'Triangle';
24
+
25
+ static ownDefaults: Record<string, any> = triangleDefaultValues;
26
+
27
+ static getDefaults() {
28
+ return { ...super.getDefaults(), ...Triangle.ownDefaults };
29
+ }
30
+
31
+ /**
32
+ * @private
33
+ * @param {CanvasRenderingContext2D} ctx Context to render on
34
+ */
35
+ _render(ctx: CanvasRenderingContext2D) {
36
+ const widthBy2 = this.width / 2,
37
+ heightBy2 = this.height / 2;
38
+
39
+ ctx.beginPath();
40
+ ctx.moveTo(-widthBy2, heightBy2);
41
+ ctx.lineTo(0, -heightBy2);
42
+ ctx.lineTo(widthBy2, heightBy2);
43
+ ctx.closePath();
44
+
45
+ this._renderPaintInOrder(ctx);
46
+ }
47
+
48
+ /**
49
+ * Returns svg representation of an instance
50
+ * @return {Array} an array of strings with the specific svg representation
51
+ * of the instance
52
+ */
53
+ _toSVG() {
54
+ const widthBy2 = this.width / 2,
55
+ heightBy2 = this.height / 2,
56
+ points = `${-widthBy2} ${heightBy2},0 ${-heightBy2},${widthBy2} ${heightBy2}`;
57
+ return ['<polygon ', 'COMMON_PARTS', 'points="', points, '" />'];
58
+ }
59
+ }
60
+
61
+ classRegistry.setClass(Triangle);
62
+ classRegistry.setSVGClass(Triangle);
@@ -0,0 +1,121 @@
1
+ // https://www.typescriptlang.org/docs/handbook/utility-types.html
2
+ import type { 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 type ImageFormat = 'jpeg' | 'png';
47
+
48
+ export type SVGElementName = 'linearGradient' | 'radialGradient' | 'stop';
49
+
50
+ export type SupportedSVGUnit = 'mm' | 'cm' | 'in' | 'pt' | 'pc' | 'em';
51
+
52
+ /**
53
+ * A transform matrix.
54
+ * Basically a matrix in the form
55
+ * [ a c e ]
56
+ * [ b d f ]
57
+ * [ 0 0 1 ]
58
+ * For more details, see @link https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/transform#matrix
59
+ */
60
+ export type TMat2D = [
61
+ a: number,
62
+ b: number,
63
+ c: number,
64
+ d: number,
65
+ e: number,
66
+ f: number
67
+ ];
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 Abortable = {
116
+ /**
117
+ * handle aborting
118
+ * @see https://developer.mozilla.org/en-US/docs/Web/API/AbortController/signal
119
+ */
120
+ signal?: AbortSignal;
121
+ };