fabric 5.3.0 → 6.0.0-beta1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (533) hide show
  1. package/.babelrc +11 -0
  2. package/.babelrcAlt +19 -0
  3. package/.browserslistrc +5 -0
  4. package/.eslintrc.js +43 -0
  5. package/.eslintrc.json +38 -46
  6. package/.eslintrc_tests +12 -0
  7. package/.gitattributes +2 -0
  8. package/.prettierignore +16 -0
  9. package/.prettierrc +4 -0
  10. package/CHANGELOG.md +491 -189
  11. package/CONTRIBUTING.md +226 -58
  12. package/README.md +188 -239
  13. package/bower.json +1 -3
  14. package/dist/fabric.d.ts +1021 -0
  15. package/dist/index.cjs +28027 -0
  16. package/dist/index.cjs.map +1 -0
  17. package/dist/index.d.ts +2 -0
  18. package/dist/index.min.js +1 -0
  19. package/dist/index.mjs +27964 -0
  20. package/dist/index.mjs.map +1 -0
  21. package/dist/index.node.cjs +28092 -0
  22. package/dist/index.node.cjs.map +1 -0
  23. package/dist/index.node.d.ts +15 -0
  24. package/dist/index.node.mjs +28035 -0
  25. package/dist/index.node.mjs.map +1 -0
  26. package/dist/src/Collection.d.ts +126 -0
  27. package/dist/src/CommonMethods.d.ts +32 -0
  28. package/dist/src/EventTypeDefs.d.ts +226 -0
  29. package/dist/src/Intersection.d.ts +100 -0
  30. package/dist/src/Observable.d.ts +54 -0
  31. package/dist/src/Pattern.d.ts +104 -0
  32. package/dist/src/Point.d.ts +232 -0
  33. package/dist/src/Shadow.d.ts +87 -0
  34. package/dist/src/brushes/BaseBrush.d.ts +105 -0
  35. package/dist/src/brushes/CircleBrush.d.ts +49 -0
  36. package/dist/src/brushes/PatternBrush.d.ts +23 -0
  37. package/dist/src/brushes/PencilBrush.d.ts +92 -0
  38. package/dist/src/brushes/SprayBrush.d.ts +79 -0
  39. package/dist/src/cache.d.ts +46 -0
  40. package/dist/src/canvas/Canvas.d.ts +567 -0
  41. package/dist/src/canvas/SelectableCanvas.d.ts +723 -0
  42. package/dist/src/canvas/StaticCanvas.d.ts +751 -0
  43. package/dist/src/canvas/TextEditingManager.d.ts +17 -0
  44. package/dist/src/canvas/canvas_gestures.mixin.d.ts +2 -0
  45. package/dist/src/color/Color.d.ts +174 -0
  46. package/dist/src/color/color_map.d.ts +155 -0
  47. package/dist/src/color/constants.d.ts +22 -0
  48. package/dist/src/color/util.d.ts +12 -0
  49. package/dist/src/config.d.ts +115 -0
  50. package/dist/src/constants.d.ts +14 -0
  51. package/dist/src/controls/Control.d.ts +228 -0
  52. package/dist/src/controls/changeWidth.d.ts +13 -0
  53. package/dist/src/controls/controls.render.d.ts +29 -0
  54. package/dist/src/controls/default_controls.d.ts +50 -0
  55. package/dist/src/controls/drag.d.ts +12 -0
  56. package/dist/src/controls/polyControl.d.ts +5 -0
  57. package/dist/src/controls/rotate.d.ts +12 -0
  58. package/dist/src/controls/scale.d.ts +47 -0
  59. package/dist/src/controls/scaleSkew.d.ts +39 -0
  60. package/dist/src/controls/skew.d.ts +33 -0
  61. package/dist/src/controls/util.d.ts +41 -0
  62. package/dist/src/controls/wrapWithFireEvent.d.ts +8 -0
  63. package/dist/src/controls/wrapWithFixedAnchor.d.ts +9 -0
  64. package/dist/src/env/browser.d.ts +3 -0
  65. package/dist/src/env/index.d.ts +7 -0
  66. package/dist/src/env/node.d.ts +3 -0
  67. package/dist/src/env/types.d.ts +15 -0
  68. package/dist/src/filters/BaseFilter.d.ts +156 -0
  69. package/dist/src/filters/BlendColor.d.ts +80 -0
  70. package/dist/src/filters/BlendImage.d.ts +90 -0
  71. package/dist/src/filters/Blur.d.ts +50 -0
  72. package/dist/src/filters/Boilerplate.d.ts +46 -0
  73. package/dist/src/filters/Brightness.d.ts +46 -0
  74. package/dist/src/filters/Canvas2dFilterBackend.d.ts +27 -0
  75. package/dist/src/filters/ColorMatrix.d.ts +62 -0
  76. package/dist/src/filters/ColorMatrixFilters.d.ts +1169 -0
  77. package/dist/src/filters/Composed.d.ts +47 -0
  78. package/dist/src/filters/Contrast.d.ts +44 -0
  79. package/dist/src/filters/Convolute.d.ts +82 -0
  80. package/dist/src/filters/FilterBackend.d.ts +14 -0
  81. package/dist/src/filters/Gamma.d.ts +53 -0
  82. package/dist/src/filters/Grayscale.d.ts +45 -0
  83. package/dist/src/filters/HueRotation.d.ts +24 -0
  84. package/dist/src/filters/Invert.d.ts +54 -0
  85. package/dist/src/filters/Noise.d.ts +53 -0
  86. package/dist/src/filters/Pixelate.d.ts +43 -0
  87. package/dist/src/filters/RemoveColor.d.ts +62 -0
  88. package/dist/src/filters/Resize.d.ts +134 -0
  89. package/dist/src/filters/Saturation.d.ts +47 -0
  90. package/dist/src/filters/Vibrance.d.ts +47 -0
  91. package/dist/src/filters/WebGLFilterBackend.d.ts +126 -0
  92. package/dist/src/filters/WebGLProbe.d.ts +28 -0
  93. package/dist/src/filters/typedefs.d.ts +49 -0
  94. package/dist/src/gradient/Gradient.d.ts +149 -0
  95. package/dist/src/gradient/constants.d.ts +15 -0
  96. package/dist/src/gradient/parser/index.d.ts +4 -0
  97. package/dist/src/gradient/parser/misc.d.ts +4 -0
  98. package/dist/src/gradient/parser/parseColorStops.d.ts +6 -0
  99. package/dist/src/gradient/parser/parseCoords.d.ts +17 -0
  100. package/dist/src/gradient/typedefs.d.ts +93 -0
  101. package/dist/src/mixins/eraser_brush.mixin.d.ts +2 -0
  102. package/dist/src/mixins/stateful.mixin.d.ts +18 -0
  103. package/dist/src/parkinglot/canvas_animation.mixin.d.ts +2 -0
  104. package/dist/src/parkinglot/straighten.d.ts +2 -0
  105. package/dist/src/parser/applyViewboxTransform.d.ts +5 -0
  106. package/dist/src/parser/attributes.d.ts +6 -0
  107. package/dist/src/parser/constants.d.ts +54 -0
  108. package/dist/src/parser/doesSomeParentMatch.d.ts +2 -0
  109. package/dist/src/parser/elementById.d.ts +6 -0
  110. package/dist/src/parser/elementMatchesRule.d.ts +5 -0
  111. package/dist/src/parser/elements_parser.d.ts +3 -0
  112. package/dist/src/parser/getCSSRules.d.ts +7 -0
  113. package/dist/src/parser/getGlobalStylesForElement.d.ts +5 -0
  114. package/dist/src/parser/getGradientDefs.d.ts +7 -0
  115. package/dist/src/parser/getMultipleNodes.d.ts +2 -0
  116. package/dist/src/parser/getSvgRegex.d.ts +2 -0
  117. package/dist/src/parser/hasAncestorWithNodeName.d.ts +2 -0
  118. package/dist/src/parser/loadSVGFromString.d.ts +12 -0
  119. package/dist/src/parser/loadSVGFromURL.d.ts +13 -0
  120. package/dist/src/parser/normalizeAttr.d.ts +2 -0
  121. package/dist/src/parser/normalizeValue.d.ts +2 -0
  122. package/dist/src/parser/parseAttributes.d.ts +9 -0
  123. package/dist/src/parser/parseElements.d.ts +11 -0
  124. package/dist/src/parser/parseFontDeclaration.d.ts +10 -0
  125. package/dist/src/parser/parsePointsAttribute.d.ts +12 -0
  126. package/dist/src/parser/parseSVGDocument.d.ts +15 -0
  127. package/dist/src/parser/parseStyleAttribute.d.ts +9 -0
  128. package/dist/src/parser/parseStyleObject.d.ts +2 -0
  129. package/dist/src/parser/parseStyleString.d.ts +2 -0
  130. package/dist/src/parser/parseTransformAttribute.d.ts +10 -0
  131. package/dist/src/parser/parseUseDirectives.d.ts +2 -0
  132. package/dist/src/parser/percent.d.ts +9 -0
  133. package/dist/src/parser/recursivelyParseGradientsXlink.d.ts +2 -0
  134. package/dist/src/parser/rotateMatrix.d.ts +2 -0
  135. package/dist/src/parser/scaleMatrix.d.ts +2 -0
  136. package/dist/src/parser/selectorMatches.d.ts +2 -0
  137. package/dist/src/parser/setStrokeFillOpacity.d.ts +6 -0
  138. package/dist/src/parser/skewMatrix.d.ts +2 -0
  139. package/dist/src/parser/translateMatrix.d.ts +2 -0
  140. package/dist/src/shapes/ActiveSelection.d.ts +66 -0
  141. package/dist/src/shapes/Circle.d.ts +80 -0
  142. package/dist/src/shapes/Ellipse.d.ts +74 -0
  143. package/dist/src/shapes/Group.d.ts +381 -0
  144. package/dist/src/shapes/IText/DraggableTextDelegate.d.ts +78 -0
  145. package/dist/src/shapes/IText/IText.d.ts +322 -0
  146. package/dist/src/shapes/IText/ITextBehavior.d.ts +285 -0
  147. package/dist/src/shapes/IText/ITextClickBehavior.d.ts +81 -0
  148. package/dist/src/shapes/IText/ITextKeyBehavior.d.ts +193 -0
  149. package/dist/src/shapes/IText/constants.d.ts +13 -0
  150. package/dist/src/shapes/Image.d.ts +283 -0
  151. package/dist/src/shapes/Line.d.ts +117 -0
  152. package/dist/src/shapes/Object/AnimatableObject.d.ts +33 -0
  153. package/dist/src/shapes/Object/FabricObject.d.ts +9 -0
  154. package/dist/src/shapes/Object/FabricObjectSVGExportMixin.d.ts +74 -0
  155. package/dist/src/shapes/Object/InteractiveObject.d.ts +282 -0
  156. package/dist/src/shapes/Object/Object.d.ts +906 -0
  157. package/dist/src/shapes/Object/ObjectGeometry.d.ts +343 -0
  158. package/dist/src/shapes/Object/ObjectOrigin.d.ts +178 -0
  159. package/dist/src/shapes/Object/StackedObject.d.ts +62 -0
  160. package/dist/src/shapes/Object/defaultValues.d.ts +77 -0
  161. package/dist/src/shapes/Path.d.ts +123 -0
  162. package/dist/src/shapes/Polygon.d.ts +7 -0
  163. package/dist/src/shapes/Polyline.d.ts +130 -0
  164. package/dist/src/shapes/Rect.d.ts +62 -0
  165. package/dist/src/shapes/Text/StyledText.d.ts +118 -0
  166. package/dist/src/shapes/Text/Text.d.ts +656 -0
  167. package/dist/src/shapes/Text/TextSVGExportMixin.d.ts +32 -0
  168. package/dist/src/shapes/Textbox.d.ts +170 -0
  169. package/dist/src/shapes/Triangle.d.ts +17 -0
  170. package/dist/src/typedefs.d.ts +93 -0
  171. package/dist/src/util/animation/AnimationBase.d.ts +54 -0
  172. package/dist/src/util/animation/AnimationFrameProvider.d.ts +8 -0
  173. package/dist/src/util/animation/AnimationRegistry.d.ts +29 -0
  174. package/dist/src/util/animation/ArrayAnimation.d.ts +10 -0
  175. package/dist/src/util/animation/ColorAnimation.d.ts +11 -0
  176. package/dist/src/util/animation/ValueAnimation.d.ts +10 -0
  177. package/dist/src/util/animation/animate.d.ts +37 -0
  178. package/dist/src/util/animation/easing.d.ts +130 -0
  179. package/dist/src/util/animation/types.d.ts +87 -0
  180. package/dist/src/util/applyMixins.d.ts +8 -0
  181. package/dist/src/util/class_registry.d.ts +14 -0
  182. package/dist/src/util/dom_event.d.ts +5 -0
  183. package/dist/src/util/dom_misc.d.ts +40 -0
  184. package/dist/src/util/dom_request.d.ts +14 -0
  185. package/dist/src/util/dom_style.d.ts +7 -0
  186. package/dist/src/util/fireEvent.d.ts +3 -0
  187. package/dist/src/util/internals/cloneDeep.d.ts +2 -0
  188. package/dist/src/util/internals/getRandomInt.d.ts +8 -0
  189. package/dist/src/util/internals/ifNaN.d.ts +8 -0
  190. package/dist/src/util/internals/index.d.ts +4 -0
  191. package/dist/src/util/internals/removeFromArray.d.ts +9 -0
  192. package/dist/src/util/internals/uid.d.ts +2 -0
  193. package/dist/src/util/lang_class.d.ts +12 -0
  194. package/dist/src/util/lang_string.d.ts +22 -0
  195. package/dist/src/util/misc/boundingBoxFromPoints.d.ts +9 -0
  196. package/dist/src/util/misc/capValue.d.ts +2 -0
  197. package/dist/src/util/misc/cos.d.ts +10 -0
  198. package/dist/src/util/misc/dom.d.ts +28 -0
  199. package/dist/src/util/misc/findScaleTo.d.ts +29 -0
  200. package/dist/src/util/misc/groupSVGElements.d.ts +9 -0
  201. package/dist/src/util/misc/isTransparent.d.ts +11 -0
  202. package/dist/src/util/misc/matrix.d.ts +92 -0
  203. package/dist/src/util/misc/mergeClipPaths.d.ts +23 -0
  204. package/dist/src/util/misc/objectEnlive.d.ts +56 -0
  205. package/dist/src/util/misc/objectTransforms.d.ts +68 -0
  206. package/dist/src/util/misc/pick.d.ts +8 -0
  207. package/dist/src/util/misc/planeChange.d.ts +84 -0
  208. package/dist/src/util/misc/projectStroke/StrokeLineCapProjections.d.ts +51 -0
  209. package/dist/src/util/misc/projectStroke/StrokeLineJoinProjections.d.ts +81 -0
  210. package/dist/src/util/misc/projectStroke/StrokeProjectionsBase.d.ts +25 -0
  211. package/dist/src/util/misc/projectStroke/index.d.ts +11 -0
  212. package/dist/src/util/misc/projectStroke/types.d.ts +23 -0
  213. package/dist/src/util/misc/radiansDegreesConversion.d.ts +14 -0
  214. package/dist/src/util/misc/resolveOrigin.d.ts +9 -0
  215. package/dist/src/util/misc/rotatePoint.d.ts +12 -0
  216. package/dist/src/util/misc/sin.d.ts +10 -0
  217. package/dist/src/util/misc/svgParsing.d.ts +53 -0
  218. package/dist/src/util/misc/textStyles.d.ts +32 -0
  219. package/dist/src/util/misc/toFixed.d.ts +8 -0
  220. package/dist/src/util/misc/vectors.d.ts +57 -0
  221. package/dist/src/util/path.d.ts +108 -0
  222. package/dist/src/util/transform_matrix_removal.d.ts +14 -0
  223. package/dist/src/util/types.d.ts +19 -0
  224. package/fabric.ts +427 -0
  225. package/index.node.ts +43 -0
  226. package/index.ts +1 -0
  227. package/package.json +90 -39
  228. package/publish.js +0 -26
  229. package/rollup.config.mjs +79 -0
  230. package/rollup.test.config.js +24 -0
  231. package/scripts/build.mjs +50 -0
  232. package/scripts/buildLock.mjs +115 -0
  233. package/scripts/buildReporter.mjs +15 -0
  234. package/scripts/buildStats.mjs +139 -0
  235. package/scripts/dirname.mjs +14 -0
  236. package/scripts/index.mjs +679 -0
  237. package/scripts/transform_files.mjs +504 -0
  238. package/src/Collection.ts +311 -0
  239. package/src/CommonMethods.ts +63 -0
  240. package/src/EventTypeDefs.ts +294 -0
  241. package/src/Intersection.ts +273 -0
  242. package/src/Observable.ts +175 -0
  243. package/src/Pattern.ts +211 -0
  244. package/src/Point.ts +388 -0
  245. package/src/Shadow.ts +215 -0
  246. package/src/brushes/{base_brush.class.js → BaseBrush.ts} +65 -42
  247. package/src/brushes/CircleBrush.ts +145 -0
  248. package/src/brushes/PatternBrush.ts +70 -0
  249. package/src/brushes/PencilBrush.ts +300 -0
  250. package/src/brushes/SprayBrush.ts +219 -0
  251. package/src/cache.ts +89 -0
  252. package/src/canvas/Canvas.ts +1672 -0
  253. package/src/canvas/SelectableCanvas.ts +1636 -0
  254. package/src/canvas/StaticCanvas.ts +1709 -0
  255. package/src/canvas/TextEditingManager.ts +48 -0
  256. package/src/canvas/canvas_gestures.mixin.ts +207 -0
  257. package/src/color/Color.ts +404 -0
  258. package/src/color/color_map.ts +154 -0
  259. package/src/color/constants.ts +26 -0
  260. package/src/color/util.ts +32 -0
  261. package/src/config.ts +159 -0
  262. package/src/constants.ts +19 -0
  263. package/src/controls/Control.ts +377 -0
  264. package/src/controls/changeWidth.ts +52 -0
  265. package/src/controls/controls.render.ts +138 -0
  266. package/src/controls/default_controls.ts +132 -0
  267. package/src/controls/drag.ts +31 -0
  268. package/src/controls/polyControl.ts +135 -0
  269. package/src/controls/rotate.ts +87 -0
  270. package/src/controls/scale.ts +277 -0
  271. package/src/controls/scaleSkew.ts +92 -0
  272. package/src/controls/skew.ts +242 -0
  273. package/src/controls/util.ts +154 -0
  274. package/src/controls/wrapWithFireEvent.ts +25 -0
  275. package/src/controls/wrapWithFixedAnchor.ts +20 -0
  276. package/src/env/browser.ts +28 -0
  277. package/src/env/index.ts +19 -0
  278. package/src/env/node.ts +52 -0
  279. package/src/env/types.ts +15 -0
  280. package/src/filters/{base_filter.class.js → BaseFilter.ts} +201 -149
  281. package/src/filters/BlendColor.ts +258 -0
  282. package/src/filters/BlendImage.ts +254 -0
  283. package/src/filters/Blur.ts +202 -0
  284. package/src/filters/Boilerplate.ts +91 -0
  285. package/src/filters/Brightness.ts +93 -0
  286. package/src/filters/Canvas2dFilterBackend.ts +65 -0
  287. package/src/filters/ColorMatrix.ts +156 -0
  288. package/src/filters/ColorMatrixFilters.ts +106 -0
  289. package/src/filters/Composed.ts +85 -0
  290. package/src/filters/Contrast.ts +94 -0
  291. package/src/filters/Convolute.ts +341 -0
  292. package/src/filters/FilterBackend.ts +32 -0
  293. package/src/filters/Gamma.ts +127 -0
  294. package/src/filters/Grayscale.ts +137 -0
  295. package/src/filters/HueRotation.ts +66 -0
  296. package/src/filters/Invert.ts +117 -0
  297. package/src/filters/Noise.ts +109 -0
  298. package/src/filters/Pixelate.ts +114 -0
  299. package/src/filters/RemoveColor.ts +148 -0
  300. package/src/filters/Resize.ts +540 -0
  301. package/src/filters/Saturation.ts +100 -0
  302. package/src/filters/Vibrance.ts +103 -0
  303. package/src/filters/WebGLFilterBackend.ts +430 -0
  304. package/src/filters/WebGLProbe.ts +62 -0
  305. package/src/filters/typedefs.ts +65 -0
  306. package/src/gradient/Gradient.ts +401 -0
  307. package/src/gradient/constants.ts +12 -0
  308. package/src/gradient/parser/index.ts +3 -0
  309. package/src/gradient/parser/misc.ts +13 -0
  310. package/src/gradient/parser/parseColorStops.ts +55 -0
  311. package/src/gradient/parser/parseCoords.ts +73 -0
  312. package/src/gradient/typedefs.ts +104 -0
  313. package/src/mixins/{eraser_brush.mixin.js → eraser_brush.mixin.ts} +350 -239
  314. package/src/mixins/stateful.mixin.ts +104 -0
  315. package/src/parkinglot/canvas_animation.mixin.ts +121 -0
  316. package/src/parkinglot/straighten.ts +58 -0
  317. package/src/parser/applyViewboxTransform.ts +162 -0
  318. package/src/parser/attributes.ts +25 -0
  319. package/src/parser/constants.ts +118 -0
  320. package/src/parser/doesSomeParentMatch.ts +19 -0
  321. package/src/parser/elementById.ts +23 -0
  322. package/src/parser/elementMatchesRule.ts +19 -0
  323. package/src/parser/elements_parser.ts +191 -0
  324. package/src/parser/getCSSRules.ts +62 -0
  325. package/src/parser/getGlobalStylesForElement.ts +19 -0
  326. package/src/parser/getGradientDefs.ts +32 -0
  327. package/src/parser/getMultipleNodes.ts +15 -0
  328. package/src/parser/getSvgRegex.ts +5 -0
  329. package/src/parser/hasAncestorWithNodeName.ts +14 -0
  330. package/src/parser/loadSVGFromString.ts +26 -0
  331. package/src/parser/loadSVGFromURL.ts +40 -0
  332. package/src/parser/normalizeAttr.ts +10 -0
  333. package/src/parser/normalizeValue.ts +63 -0
  334. package/src/parser/parseAttributes.ts +90 -0
  335. package/src/parser/parseElements.ts +28 -0
  336. package/src/parser/parseFontDeclaration.ts +44 -0
  337. package/src/parser/parsePointsAttribute.ts +36 -0
  338. package/src/parser/parseSVGDocument.ts +106 -0
  339. package/src/parser/parseStyleAttribute.ts +27 -0
  340. package/src/parser/parseStyleObject.ts +15 -0
  341. package/src/parser/parseStyleString.ts +16 -0
  342. package/src/parser/parseTransformAttribute.ts +155 -0
  343. package/src/parser/parseUseDirectives.ts +79 -0
  344. package/src/parser/percent.ts +27 -0
  345. package/src/parser/recursivelyParseGradientsXlink.ts +42 -0
  346. package/src/parser/rotateMatrix.ts +21 -0
  347. package/src/parser/scaleMatrix.ts +9 -0
  348. package/src/parser/selectorMatches.ts +25 -0
  349. package/src/parser/setStrokeFillOpacity.ts +40 -0
  350. package/src/parser/skewMatrix.ts +6 -0
  351. package/src/parser/translateMatrix.ts +8 -0
  352. package/src/shapes/ActiveSelection.ts +157 -0
  353. package/src/shapes/Circle.ts +205 -0
  354. package/src/shapes/Ellipse.ts +154 -0
  355. package/src/shapes/Group.ts +1053 -0
  356. package/src/shapes/IText/DraggableTextDelegate.ts +394 -0
  357. package/src/shapes/IText/IText.ts +666 -0
  358. package/src/shapes/IText/ITextBehavior.ts +1055 -0
  359. package/src/shapes/IText/ITextClickBehavior.ts +321 -0
  360. package/src/shapes/IText/ITextKeyBehavior.ts +683 -0
  361. package/src/shapes/IText/constants.ts +47 -0
  362. package/src/shapes/Image.ts +789 -0
  363. package/src/shapes/Line.ts +329 -0
  364. package/src/shapes/Object/AnimatableObject.ts +106 -0
  365. package/src/shapes/Object/FabricObject.ts +19 -0
  366. package/src/shapes/Object/FabricObjectSVGExportMixin.ts +277 -0
  367. package/src/shapes/Object/InteractiveObject.ts +645 -0
  368. package/src/shapes/Object/Object.ts +1896 -0
  369. package/src/shapes/Object/ObjectGeometry.ts +830 -0
  370. package/src/shapes/Object/ObjectOrigin.ts +354 -0
  371. package/src/shapes/Object/StackedObject.ts +191 -0
  372. package/src/shapes/Object/defaultValues.ts +112 -0
  373. package/src/shapes/Path.ts +395 -0
  374. package/src/shapes/Polygon.ts +19 -0
  375. package/src/shapes/Polyline.ts +333 -0
  376. package/src/shapes/Rect.ts +199 -0
  377. package/src/shapes/Text/StyledText.ts +319 -0
  378. package/src/shapes/Text/Text.ts +1948 -0
  379. package/src/shapes/Text/TextSVGExportMixin.ts +288 -0
  380. package/src/shapes/Textbox.ts +471 -0
  381. package/src/shapes/Triangle.ts +45 -0
  382. package/src/typedefs.ts +119 -0
  383. package/src/util/animation/AnimationBase.ts +166 -0
  384. package/src/util/animation/AnimationFrameProvider.ts +28 -0
  385. package/src/util/animation/AnimationRegistry.ts +58 -0
  386. package/src/util/animation/ArrayAnimation.ts +27 -0
  387. package/src/util/animation/ColorAnimation.ts +74 -0
  388. package/src/util/animation/ValueAnimation.ts +29 -0
  389. package/src/util/animation/animate.ts +74 -0
  390. package/src/util/animation/easing.ts +327 -0
  391. package/src/util/animation/types.ts +136 -0
  392. package/src/util/applyMixins.ts +22 -0
  393. package/src/util/class_registry.ts +54 -0
  394. package/src/util/dom_event.ts +28 -0
  395. package/src/util/dom_misc.ts +138 -0
  396. package/src/util/dom_request.ts +64 -0
  397. package/src/util/dom_style.ts +20 -0
  398. package/src/util/fireEvent.ts +15 -0
  399. package/src/util/internals/cloneDeep.ts +2 -0
  400. package/src/util/internals/getRandomInt.ts +8 -0
  401. package/src/util/internals/ifNaN.ts +9 -0
  402. package/src/util/internals/index.ts +3 -0
  403. package/src/util/internals/removeFromArray.ts +14 -0
  404. package/src/util/internals/uid.ts +3 -0
  405. package/src/util/lang_class.ts +90 -0
  406. package/src/util/lang_string.ts +79 -0
  407. package/src/util/misc/boundingBoxFromPoints.ts +37 -0
  408. package/src/util/misc/capValue.ts +2 -0
  409. package/src/util/misc/cos.ts +24 -0
  410. package/src/util/misc/dom.ts +50 -0
  411. package/src/util/misc/findScaleTo.ts +44 -0
  412. package/src/util/misc/groupSVGElements.ts +15 -0
  413. package/src/util/misc/isTransparent.ts +51 -0
  414. package/src/util/misc/matrix.ts +207 -0
  415. package/src/util/misc/mergeClipPaths.ts +40 -0
  416. package/src/util/misc/objectEnlive.ts +189 -0
  417. package/src/util/misc/objectTransforms.ts +129 -0
  418. package/src/util/misc/pick.ts +17 -0
  419. package/src/util/misc/planeChange.ts +136 -0
  420. package/src/util/misc/projectStroke/StrokeLineCapProjections.ts +112 -0
  421. package/src/util/misc/projectStroke/StrokeLineJoinProjections.ts +231 -0
  422. package/src/util/misc/projectStroke/StrokeProjectionsBase.ts +75 -0
  423. package/src/util/misc/projectStroke/index.ts +53 -0
  424. package/src/util/misc/projectStroke/types.ts +24 -0
  425. package/src/util/misc/radiansDegreesConversion.ts +18 -0
  426. package/src/util/misc/resolveOrigin.ts +22 -0
  427. package/src/util/misc/rotatePoint.ts +15 -0
  428. package/src/util/misc/sin.ts +26 -0
  429. package/src/util/misc/svgParsing.ts +181 -0
  430. package/src/util/misc/textStyles.ts +133 -0
  431. package/src/util/misc/toFixed.ts +8 -0
  432. package/src/util/misc/vectors.ts +82 -0
  433. package/src/util/path.ts +941 -0
  434. package/src/util/transform_matrix_removal.ts +60 -0
  435. package/src/util/types.ts +78 -0
  436. package/tsconfig.json +106 -0
  437. package/HEADER.js +0 -203
  438. package/build.js +0 -287
  439. package/dist/fabric.js +0 -31187
  440. package/dist/fabric.min.js +0 -1
  441. package/old-travis-reference.yml +0 -97
  442. package/src/brushes/circle_brush.class.js +0 -144
  443. package/src/brushes/pattern_brush.class.js +0 -61
  444. package/src/brushes/pencil_brush.class.js +0 -310
  445. package/src/brushes/spray_brush.class.js +0 -219
  446. package/src/canvas.class.js +0 -1312
  447. package/src/color.class.js +0 -636
  448. package/src/control.class.js +0 -339
  449. package/src/controls.actions.js +0 -740
  450. package/src/controls.render.js +0 -99
  451. package/src/elements_parser.js +0 -152
  452. package/src/filters/2d_backend.class.js +0 -65
  453. package/src/filters/blendcolor_filter.class.js +0 -251
  454. package/src/filters/blendimage_filter.class.js +0 -247
  455. package/src/filters/blur_filter.class.js +0 -217
  456. package/src/filters/brightness_filter.class.js +0 -113
  457. package/src/filters/colormatrix_filter.class.js +0 -159
  458. package/src/filters/composed_filter.class.js +0 -72
  459. package/src/filters/contrast_filter.class.js +0 -113
  460. package/src/filters/convolute_filter.class.js +0 -352
  461. package/src/filters/filter_boilerplate.js +0 -111
  462. package/src/filters/filter_generator.js +0 -85
  463. package/src/filters/gamma_filter.class.js +0 -136
  464. package/src/filters/grayscale_filter.class.js +0 -154
  465. package/src/filters/hue_rotation.class.js +0 -107
  466. package/src/filters/invert_filter.class.js +0 -111
  467. package/src/filters/noise_filter.class.js +0 -134
  468. package/src/filters/pixelate_filter.class.js +0 -137
  469. package/src/filters/removecolor_filter.class.js +0 -173
  470. package/src/filters/resize_filter.class.js +0 -490
  471. package/src/filters/saturate_filter.class.js +0 -119
  472. package/src/filters/vibrance_filter.class.js +0 -122
  473. package/src/filters/webgl_backend.class.js +0 -396
  474. package/src/globalFabric.js +0 -4
  475. package/src/gradient.class.js +0 -490
  476. package/src/intersection.class.js +0 -172
  477. package/src/log.js +0 -11
  478. package/src/mixins/animation.mixin.js +0 -231
  479. package/src/mixins/canvas_dataurl_exporter.mixin.js +0 -97
  480. package/src/mixins/canvas_events.mixin.js +0 -974
  481. package/src/mixins/canvas_gestures.mixin.js +0 -149
  482. package/src/mixins/canvas_grouping.mixin.js +0 -177
  483. package/src/mixins/canvas_serialization.mixin.js +0 -228
  484. package/src/mixins/collection.mixin.js +0 -170
  485. package/src/mixins/default_controls.js +0 -114
  486. package/src/mixins/itext.svg_export.js +0 -241
  487. package/src/mixins/itext_behavior.mixin.js +0 -940
  488. package/src/mixins/itext_click_behavior.mixin.js +0 -278
  489. package/src/mixins/itext_key_behavior.mixin.js +0 -694
  490. package/src/mixins/object.svg_export.js +0 -258
  491. package/src/mixins/object_geometry.mixin.js +0 -683
  492. package/src/mixins/object_interactivity.mixin.js +0 -314
  493. package/src/mixins/object_origin.mixin.js +0 -255
  494. package/src/mixins/object_stacking.mixin.js +0 -80
  495. package/src/mixins/object_straightening.mixin.js +0 -80
  496. package/src/mixins/observable.mixin.js +0 -141
  497. package/src/mixins/shared_methods.mixin.js +0 -94
  498. package/src/mixins/stateful.mixin.js +0 -107
  499. package/src/mixins/text_style.mixin.js +0 -324
  500. package/src/parser.js +0 -1090
  501. package/src/pattern.class.js +0 -189
  502. package/src/point.class.js +0 -337
  503. package/src/shadow.class.js +0 -195
  504. package/src/shapes/active_selection.class.js +0 -155
  505. package/src/shapes/circle.class.js +0 -210
  506. package/src/shapes/ellipse.class.js +0 -181
  507. package/src/shapes/group.class.js +0 -593
  508. package/src/shapes/image.class.js +0 -764
  509. package/src/shapes/itext.class.js +0 -526
  510. package/src/shapes/line.class.js +0 -324
  511. package/src/shapes/object.class.js +0 -2008
  512. package/src/shapes/path.class.js +0 -384
  513. package/src/shapes/polygon.class.js +0 -81
  514. package/src/shapes/polyline.class.js +0 -268
  515. package/src/shapes/rect.class.js +0 -187
  516. package/src/shapes/text.class.js +0 -1696
  517. package/src/shapes/textbox.class.js +0 -461
  518. package/src/shapes/triangle.class.js +0 -93
  519. package/src/static_canvas.class.js +0 -1881
  520. package/src/util/anim_ease.js +0 -398
  521. package/src/util/animate.js +0 -254
  522. package/src/util/animate_color.js +0 -74
  523. package/src/util/dom_event.js +0 -50
  524. package/src/util/dom_misc.js +0 -300
  525. package/src/util/dom_request.js +0 -54
  526. package/src/util/dom_style.js +0 -70
  527. package/src/util/lang_array.js +0 -94
  528. package/src/util/lang_class.js +0 -115
  529. package/src/util/lang_object.js +0 -75
  530. package/src/util/lang_string.js +0 -110
  531. package/src/util/misc.js +0 -1330
  532. package/src/util/named_accessors.mixin.js +0 -428
  533. package/src/util/path.js +0 -829
@@ -0,0 +1,48 @@
1
+ import { TPointerEvent } from '../EventTypeDefs';
2
+ import type { ITextBehavior } from '../shapes/IText/ITextBehavior';
3
+ import { removeFromArray } from '../util/internals';
4
+
5
+ /**
6
+ * In charge of synchronizing all interactive text instances of a canvas
7
+ */
8
+ export class TextEditingManager {
9
+ private targets: ITextBehavior[] = [];
10
+ private declare target?: ITextBehavior;
11
+
12
+ exitTextEditing() {
13
+ this.target = undefined;
14
+ this.targets.forEach((target) => {
15
+ if (target.isEditing) {
16
+ target.exitEditing();
17
+ }
18
+ });
19
+ }
20
+
21
+ add(target: ITextBehavior) {
22
+ this.targets.push(target);
23
+ }
24
+
25
+ remove(target: ITextBehavior) {
26
+ this.unregister(target);
27
+ removeFromArray(this.targets, target);
28
+ }
29
+
30
+ register(target: ITextBehavior) {
31
+ this.target = target;
32
+ }
33
+
34
+ unregister(target: ITextBehavior) {
35
+ if (target === this.target) {
36
+ this.target = undefined;
37
+ }
38
+ }
39
+
40
+ onMouseMove(e: TPointerEvent) {
41
+ this.target?.isEditing && this.target.updateSelectionOnMouseMove(e);
42
+ }
43
+
44
+ dispose() {
45
+ this.targets = [];
46
+ this.target = undefined;
47
+ }
48
+ }
@@ -0,0 +1,207 @@
1
+ //@ts-nocheck
2
+
3
+ import { scalingEqually } from '../controls/scale';
4
+ import { fireEvent } from '../util/fireEvent';
5
+ import {
6
+ degreesToRadians,
7
+ radiansToDegrees,
8
+ } from '../util/misc/radiansDegreesConversion';
9
+ import { Canvas } from './Canvas';
10
+
11
+ /**
12
+ * Adds support for multi-touch gestures using the Event.js library.
13
+ * Fires the following custom events:
14
+ * - touch:gesture
15
+ * - touch:drag
16
+ * - touch:orientation
17
+ * - touch:shake
18
+ * - touch:longpress
19
+ */
20
+ Object.assign(Canvas.prototype, {
21
+ /**
22
+ * Method that defines actions when an Event.js gesture is detected on an object. Currently only supports
23
+ * 2 finger gestures.
24
+ * @param {Event} e Event object by Event.js
25
+ * @param {Event} self Event proxy object by Event.js
26
+ */
27
+ __onTransformGesture: function (e, self) {
28
+ if (
29
+ this.isDrawingMode ||
30
+ !e.touches ||
31
+ e.touches.length !== 2 ||
32
+ 'gesture' !== self.gesture
33
+ ) {
34
+ return;
35
+ }
36
+
37
+ var target = this.findTarget(e);
38
+ if ('undefined' !== typeof target) {
39
+ this.__gesturesParams = {
40
+ e: e,
41
+ self: self,
42
+ target: target,
43
+ };
44
+
45
+ this.__gesturesRenderer();
46
+ }
47
+
48
+ this.fire('touch:gesture', {
49
+ target: target,
50
+ e: e,
51
+ self: self,
52
+ });
53
+ },
54
+ __gesturesParams: null,
55
+ __gesturesRenderer: function () {
56
+ if (this.__gesturesParams === null || this._currentTransform === null) {
57
+ return;
58
+ }
59
+
60
+ var self = this.__gesturesParams.self,
61
+ t = this._currentTransform,
62
+ e = this.__gesturesParams.e;
63
+
64
+ t.action = 'scale';
65
+ t.originX = t.originY = 'center';
66
+
67
+ this._scaleObjectBy(self.scale, e);
68
+
69
+ if (self.rotation !== 0) {
70
+ t.action = 'rotate';
71
+ this._rotateObjectByAngle(self.rotation, e);
72
+ }
73
+
74
+ this.requestRenderAll();
75
+
76
+ t.action = 'drag';
77
+ },
78
+
79
+ /**
80
+ * Method that defines actions when an Event.js drag is detected.
81
+ *
82
+ * @param {Event} e Event object by Event.js
83
+ * @param {Event} self Event proxy object by Event.js
84
+ */
85
+ __onDrag: function (e, self) {
86
+ this.fire('touch:drag', {
87
+ e: e,
88
+ self: self,
89
+ });
90
+ },
91
+
92
+ /**
93
+ * Method that defines actions when an Event.js orientation event is detected.
94
+ *
95
+ * @param {Event} e Event object by Event.js
96
+ * @param {Event} self Event proxy object by Event.js
97
+ */
98
+ __onOrientationChange: function (e, self) {
99
+ this.fire('touch:orientation', {
100
+ e: e,
101
+ self: self,
102
+ });
103
+ },
104
+
105
+ /**
106
+ * Method that defines actions when an Event.js shake event is detected.
107
+ *
108
+ * @param {Event} e Event object by Event.js
109
+ * @param {Event} self Event proxy object by Event.js
110
+ */
111
+ __onShake: function (e, self) {
112
+ this.fire('touch:shake', {
113
+ e: e,
114
+ self: self,
115
+ });
116
+ },
117
+
118
+ /**
119
+ * Method that defines actions when an Event.js longpress event is detected.
120
+ *
121
+ * @param {Event} e Event object by Event.js
122
+ * @param {Event} self Event proxy object by Event.js
123
+ */
124
+ __onLongPress: function (e, self) {
125
+ this.fire('touch:longpress', {
126
+ e: e,
127
+ self: self,
128
+ });
129
+ },
130
+
131
+ /**
132
+ * @private
133
+ * @param {Event} [e] Event object fired on Event.js gesture
134
+ * @param {Event} [self] Inner Event object
135
+ */
136
+ _onGesture: function (e, self) {
137
+ this.__onTransformGesture(e, self);
138
+ },
139
+
140
+ /**
141
+ * @private
142
+ * @param {Event} [e] Event object fired on Event.js drag
143
+ * @param {Event} [self] Inner Event object
144
+ */
145
+ _onDrag: function (e, self) {
146
+ this.__onDrag(e, self);
147
+ },
148
+
149
+ /**
150
+ * Scales an object by a factor
151
+ * @param {Number} s The scale factor to apply to the current scale level
152
+ * @param {Event} e Event object by Event.js
153
+ */
154
+ _scaleObjectBy: function (s, e) {
155
+ var t = this._currentTransform,
156
+ target = t.target;
157
+ t.gestureScale = s;
158
+ target._scaling = true;
159
+ return scalingEqually(e, t, 0, 0);
160
+ },
161
+
162
+ /**
163
+ * Rotates object by an angle
164
+ * @param {Number} curAngle The angle of rotation in degrees
165
+ * @param {Event} e Event object by Event.js
166
+ */
167
+ _rotateObjectByAngle: function (curAngle, e) {
168
+ var t = this._currentTransform;
169
+
170
+ if (t.target.get('lockRotation')) {
171
+ return;
172
+ }
173
+ t.target.rotate(radiansToDegrees(degreesToRadians(curAngle) + t.theta));
174
+ fireEvent('rotating', {
175
+ target: t.target,
176
+ e: e,
177
+ transform: t,
178
+ });
179
+ },
180
+
181
+ /**
182
+ * @private
183
+ * @param {Event} [e] Event object fired on Event.js orientation change
184
+ * @param {Event} [self] Inner Event object
185
+ */
186
+ _onOrientationChange: function (e, self) {
187
+ this.__onOrientationChange(e, self);
188
+ },
189
+
190
+ /**
191
+ * @private
192
+ * @param {Event} [e] Event object fired on Event.js shake
193
+ * @param {Event} [self] Inner Event object
194
+ */
195
+ _onShake: function (e, self) {
196
+ this.__onShake(e, self);
197
+ },
198
+
199
+ /**
200
+ * @private
201
+ * @param {Event} [e] Event object fired on Event.js shake
202
+ * @param {Event} [self] Inner Event object
203
+ */
204
+ _onLongPress: function (e, self) {
205
+ this.__onLongPress(e, self);
206
+ },
207
+ });
@@ -0,0 +1,404 @@
1
+ import { ColorNameMap } from './color_map';
2
+ import { reHSLa, reHex, reRGBa } from './constants';
3
+ import { hue2rgb, hexify } from './util';
4
+
5
+ /**
6
+ * RGB format
7
+ */
8
+ export type TRGBColorSource = [red: number, green: number, blue: number];
9
+
10
+ /**
11
+ * RGBA format
12
+ */
13
+ export type TRGBAColorSource = [
14
+ red: number,
15
+ green: number,
16
+ blue: number,
17
+ alpha: number
18
+ ];
19
+
20
+ export type TColorArg = string | TRGBColorSource | TRGBAColorSource | Color;
21
+
22
+ /**
23
+ * @class Color common color operations
24
+ * @tutorial {@link http://fabricjs.com/fabric-intro-part-2/#colors colors}
25
+ */
26
+ export class Color {
27
+ private declare _source: TRGBAColorSource;
28
+
29
+ /**
30
+ *
31
+ * @param {string} [color] optional in hex or rgb(a) or hsl format or from known color list
32
+ */
33
+ constructor(color?: TColorArg) {
34
+ if (!color) {
35
+ // we default to black as canvas does
36
+ this.setSource([0, 0, 0, 1]);
37
+ } else if (color instanceof Color) {
38
+ this.setSource([...color._source]);
39
+ } else if (Array.isArray(color)) {
40
+ const [r, g, b, a = 1] = color;
41
+ this.setSource([r, g, b, a]);
42
+ } else {
43
+ this.setSource(this._tryParsingColor(color));
44
+ }
45
+ }
46
+
47
+ /**
48
+ * @private
49
+ * @param {string} [color] Color value to parse
50
+ * @returns {TRGBAColorSource}
51
+ */
52
+ protected _tryParsingColor(color: string) {
53
+ if (color in ColorNameMap) {
54
+ color = ColorNameMap[color as keyof typeof ColorNameMap];
55
+ }
56
+ return color === 'transparent'
57
+ ? ([255, 255, 255, 0] as TRGBAColorSource)
58
+ : Color.sourceFromHex(color) ||
59
+ Color.sourceFromRgb(color) ||
60
+ Color.sourceFromHsl(color) ||
61
+ // color is not recognized
62
+ // we default to black as canvas does
63
+ ([0, 0, 0, 1] as TRGBAColorSource);
64
+ }
65
+
66
+ /**
67
+ * Adapted from {@link https://gist.github.com/mjackson/5311256 https://gist.github.com/mjackson}
68
+ * @private
69
+ * @param {Number} r Red color value
70
+ * @param {Number} g Green color value
71
+ * @param {Number} b Blue color value
72
+ * @return {TRGBColorSource} Hsl color
73
+ */
74
+ _rgbToHsl(r: number, g: number, b: number): TRGBColorSource {
75
+ r /= 255;
76
+ g /= 255;
77
+ b /= 255;
78
+ const maxValue = Math.max(r, g, b),
79
+ minValue = Math.min(r, g, b);
80
+
81
+ let h!: number, s: number;
82
+ const l = (maxValue + minValue) / 2;
83
+
84
+ if (maxValue === minValue) {
85
+ h = s = 0; // achromatic
86
+ } else {
87
+ const d = maxValue - minValue;
88
+ s = l > 0.5 ? d / (2 - maxValue - minValue) : d / (maxValue + minValue);
89
+ switch (maxValue) {
90
+ case r:
91
+ h = (g - b) / d + (g < b ? 6 : 0);
92
+ break;
93
+ case g:
94
+ h = (b - r) / d + 2;
95
+ break;
96
+ case b:
97
+ h = (r - g) / d + 4;
98
+ break;
99
+ }
100
+ h /= 6;
101
+ }
102
+
103
+ return [Math.round(h * 360), Math.round(s * 100), Math.round(l * 100)];
104
+ }
105
+
106
+ /**
107
+ * Returns source of this color (where source is an array representation; ex: [200, 200, 100, 1])
108
+ * @return {TRGBAColorSource}
109
+ */
110
+ getSource() {
111
+ return this._source;
112
+ }
113
+
114
+ /**
115
+ * Sets source of this color (where source is an array representation; ex: [200, 200, 100, 1])
116
+ * @param {TRGBAColorSource} source
117
+ */
118
+ setSource(source: TRGBAColorSource) {
119
+ this._source = source;
120
+ }
121
+
122
+ /**
123
+ * Returns color representation in RGB format
124
+ * @return {String} ex: rgb(0-255,0-255,0-255)
125
+ */
126
+ toRgb() {
127
+ const source = this.getSource();
128
+ return `rgb(${source[0]},${source[1]},${source[2]})`;
129
+ }
130
+
131
+ /**
132
+ * Returns color representation in RGBA format
133
+ * @return {String} ex: rgba(0-255,0-255,0-255,0-1)
134
+ */
135
+ toRgba() {
136
+ const source = this.getSource();
137
+ return `rgba(${source[0]},${source[1]},${source[2]},${source[3]})`;
138
+ }
139
+
140
+ /**
141
+ * Returns color representation in HSL format
142
+ * @return {String} ex: hsl(0-360,0%-100%,0%-100%)
143
+ */
144
+ toHsl() {
145
+ const source = this.getSource(),
146
+ hsl = this._rgbToHsl(source[0], source[1], source[2]);
147
+
148
+ return `hsl(${hsl[0]},${hsl[1]}%,${hsl[2]}%)`;
149
+ }
150
+
151
+ /**
152
+ * Returns color representation in HSLA format
153
+ * @return {String} ex: hsla(0-360,0%-100%,0%-100%,0-1)
154
+ */
155
+ toHsla() {
156
+ const source = this.getSource(),
157
+ hsl = this._rgbToHsl(source[0], source[1], source[2]);
158
+
159
+ return `hsla(${hsl[0]},${hsl[1]}%,${hsl[2]}%,${source[3]})`;
160
+ }
161
+
162
+ /**
163
+ * Returns color representation in HEX format
164
+ * @return {String} ex: FF5555
165
+ */
166
+ toHex() {
167
+ const [r, g, b] = this.getSource();
168
+ return `${hexify(r)}${hexify(g)}${hexify(b)}`;
169
+ }
170
+
171
+ /**
172
+ * Returns color representation in HEXA format
173
+ * @return {String} ex: FF5555CC
174
+ */
175
+ toHexa() {
176
+ const source = this.getSource();
177
+ return `${this.toHex()}${hexify(Math.round(source[3] * 255))}`;
178
+ }
179
+
180
+ /**
181
+ * Gets value of alpha channel for this color
182
+ * @return {Number} 0-1
183
+ */
184
+ getAlpha() {
185
+ return this.getSource()[3];
186
+ }
187
+
188
+ /**
189
+ * Sets value of alpha channel for this color
190
+ * @param {Number} alpha Alpha value 0-1
191
+ * @return {Color} thisArg
192
+ */
193
+ setAlpha(alpha: number) {
194
+ const source = this.getSource();
195
+ source[3] = alpha;
196
+ this.setSource(source);
197
+ return this;
198
+ }
199
+
200
+ /**
201
+ * Transforms color to its grayscale representation
202
+ * @return {Color} thisArg
203
+ */
204
+ toGrayscale() {
205
+ const source = this.getSource(),
206
+ average = parseInt(
207
+ (source[0] * 0.3 + source[1] * 0.59 + source[2] * 0.11).toFixed(0),
208
+ 10
209
+ ),
210
+ currentAlpha = source[3];
211
+ this.setSource([average, average, average, currentAlpha]);
212
+ return this;
213
+ }
214
+
215
+ /**
216
+ * Transforms color to its black and white representation
217
+ * @param {Number} threshold
218
+ * @return {Color} thisArg
219
+ */
220
+ toBlackWhite(threshold: number) {
221
+ const source = this.getSource(),
222
+ currentAlpha = source[3];
223
+ let average = Math.round(
224
+ source[0] * 0.3 + source[1] * 0.59 + source[2] * 0.11
225
+ );
226
+
227
+ average = average < (threshold || 127) ? 0 : 255;
228
+ this.setSource([average, average, average, currentAlpha]);
229
+ return this;
230
+ }
231
+
232
+ /**
233
+ * Overlays color with another color
234
+ * @param {String|Color} otherColor
235
+ * @return {Color} thisArg
236
+ */
237
+ overlayWith(otherColor: string | Color) {
238
+ if (!(otherColor instanceof Color)) {
239
+ otherColor = new Color(otherColor);
240
+ }
241
+
242
+ const [r, g, b, alpha] = this.getSource(),
243
+ otherAlpha = 0.5,
244
+ otherSource = otherColor.getSource(),
245
+ [R, G, B] = [r, g, b].map((value, index) =>
246
+ Math.round(value * (1 - otherAlpha) + otherSource[index] * otherAlpha)
247
+ );
248
+
249
+ this.setSource([R, G, B, alpha]);
250
+ return this;
251
+ }
252
+
253
+ /**
254
+ * Returns new color object, when given a color in RGB format
255
+ * @memberOf Color
256
+ * @param {String} color Color value ex: rgb(0-255,0-255,0-255)
257
+ * @return {Color}
258
+ */
259
+ static fromRgb(color: string): Color {
260
+ return Color.fromRgba(color);
261
+ }
262
+
263
+ /**
264
+ * Returns new color object, when given a color in RGBA format
265
+ * @static
266
+ * @function
267
+ * @memberOf Color
268
+ * @param {String} color
269
+ * @return {Color}
270
+ */
271
+ static fromRgba(color: string): Color {
272
+ return new Color(Color.sourceFromRgb(color));
273
+ }
274
+
275
+ /**
276
+ * Returns array representation (ex: [100, 100, 200, 1]) of a color that's in RGB or RGBA format
277
+ * @memberOf Color
278
+ * @param {String} color Color value ex: rgb(0-255,0-255,0-255), rgb(0%-100%,0%-100%,0%-100%)
279
+ * @return {TRGBAColorSource | undefined} source
280
+ */
281
+ static sourceFromRgb(color: string): TRGBAColorSource | undefined {
282
+ const match = color.match(reRGBa);
283
+ if (match) {
284
+ const r =
285
+ (parseInt(match[1], 10) / (/%$/.test(match[1]) ? 100 : 1)) *
286
+ (/%$/.test(match[1]) ? 255 : 1),
287
+ g =
288
+ (parseInt(match[2], 10) / (/%$/.test(match[2]) ? 100 : 1)) *
289
+ (/%$/.test(match[2]) ? 255 : 1),
290
+ b =
291
+ (parseInt(match[3], 10) / (/%$/.test(match[3]) ? 100 : 1)) *
292
+ (/%$/.test(match[3]) ? 255 : 1);
293
+
294
+ return [r, g, b, match[4] ? parseFloat(match[4]) : 1];
295
+ }
296
+ }
297
+
298
+ /**
299
+ * Returns new color object, when given a color in HSL format
300
+ * @param {String} color Color value ex: hsl(0-260,0%-100%,0%-100%)
301
+ * @memberOf Color
302
+ * @return {Color}
303
+ */
304
+ static fromHsl(color: string): Color {
305
+ return Color.fromHsla(color);
306
+ }
307
+
308
+ /**
309
+ * Returns new color object, when given a color in HSLA format
310
+ * @static
311
+ * @function
312
+ * @memberOf Color
313
+ * @param {String} color
314
+ * @return {Color}
315
+ */
316
+ static fromHsla(color: string): Color {
317
+ return new Color(Color.sourceFromHsl(color));
318
+ }
319
+
320
+ /**
321
+ * Returns array representation (ex: [100, 100, 200, 1]) of a color that's in HSL or HSLA format.
322
+ * Adapted from <a href="https://rawgithub.com/mjijackson/mjijackson.github.com/master/2008/02/rgb-to-hsl-and-rgb-to-hsv-color-model-conversion-algorithms-in-javascript.html">https://github.com/mjijackson</a>
323
+ * @memberOf Color
324
+ * @param {String} color Color value ex: hsl(0-360,0%-100%,0%-100%) or hsla(0-360,0%-100%,0%-100%, 0-1)
325
+ * @return {TRGBAColorSource | undefined} source
326
+ * @see http://http://www.w3.org/TR/css3-color/#hsl-color
327
+ */
328
+ static sourceFromHsl(color: string): TRGBAColorSource | undefined {
329
+ const match = color.match(reHSLa);
330
+ if (!match) {
331
+ return;
332
+ }
333
+
334
+ const h = (((parseFloat(match[1]) % 360) + 360) % 360) / 360,
335
+ s = parseFloat(match[2]) / (/%$/.test(match[2]) ? 100 : 1),
336
+ l = parseFloat(match[3]) / (/%$/.test(match[3]) ? 100 : 1);
337
+ let r: number, g: number, b: number;
338
+
339
+ if (s === 0) {
340
+ r = g = b = l;
341
+ } else {
342
+ const q = l <= 0.5 ? l * (s + 1) : l + s - l * s,
343
+ p = l * 2 - q;
344
+
345
+ r = hue2rgb(p, q, h + 1 / 3);
346
+ g = hue2rgb(p, q, h);
347
+ b = hue2rgb(p, q, h - 1 / 3);
348
+ }
349
+
350
+ return [
351
+ Math.round(r * 255),
352
+ Math.round(g * 255),
353
+ Math.round(b * 255),
354
+ match[4] ? parseFloat(match[4]) : 1,
355
+ ];
356
+ }
357
+
358
+ /**
359
+ * Returns new color object, when given a color in HEX format
360
+ * @static
361
+ * @memberOf Color
362
+ * @param {String} color Color value ex: FF5555
363
+ * @return {Color}
364
+ */
365
+ static fromHex(color: string): Color {
366
+ return new Color(Color.sourceFromHex(color));
367
+ }
368
+
369
+ /**
370
+ * Returns array representation (ex: [100, 100, 200, 1]) of a color that's in HEX format
371
+ * @static
372
+ * @memberOf Color
373
+ * @param {String} color ex: FF5555 or FF5544CC (RGBa)
374
+ * @return {TRGBAColorSource | undefined} source
375
+ */
376
+ static sourceFromHex(color: string): TRGBAColorSource | undefined {
377
+ if (color.match(reHex)) {
378
+ const value = color.slice(color.indexOf('#') + 1),
379
+ isShortNotation = value.length === 3 || value.length === 4,
380
+ isRGBa = value.length === 8 || value.length === 4,
381
+ r = isShortNotation
382
+ ? value.charAt(0) + value.charAt(0)
383
+ : value.substring(0, 2),
384
+ g = isShortNotation
385
+ ? value.charAt(1) + value.charAt(1)
386
+ : value.substring(2, 4),
387
+ b = isShortNotation
388
+ ? value.charAt(2) + value.charAt(2)
389
+ : value.substring(4, 6),
390
+ a = isRGBa
391
+ ? isShortNotation
392
+ ? value.charAt(3) + value.charAt(3)
393
+ : value.substring(6, 8)
394
+ : 'FF';
395
+
396
+ return [
397
+ parseInt(r, 16),
398
+ parseInt(g, 16),
399
+ parseInt(b, 16),
400
+ parseFloat((parseInt(a, 16) / 255).toFixed(2)),
401
+ ];
402
+ }
403
+ }
404
+ }