fabric 5.3.0 → 6.0.0-beta3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (604) hide show
  1. package/.babelrc +11 -0
  2. package/.babelrcAlt +19 -0
  3. package/.browserslistrc +5 -0
  4. package/.eslintignore +3 -0
  5. package/.eslintrc.js +43 -0
  6. package/.eslintrc.json +38 -46
  7. package/.eslintrc_tests +12 -0
  8. package/.gitattributes +2 -0
  9. package/.gitpod.yml +17 -1
  10. package/.prettierignore +19 -0
  11. package/.prettierrc +4 -0
  12. package/CHANGELOG.md +532 -189
  13. package/CONTRIBUTING.md +224 -59
  14. package/README.md +200 -235
  15. package/bower.json +1 -3
  16. package/dist/fabric.d.ts +42 -0
  17. package/dist/index.d.ts +2 -0
  18. package/dist/index.js +27582 -0
  19. package/dist/index.js.map +1 -0
  20. package/dist/index.min.js +1 -0
  21. package/dist/index.mjs +27519 -0
  22. package/dist/index.mjs.map +1 -0
  23. package/dist/index.node.cjs +27663 -0
  24. package/dist/index.node.cjs.map +1 -0
  25. package/dist/index.node.d.ts +14 -0
  26. package/dist/index.node.mjs +27606 -0
  27. package/dist/index.node.mjs.map +1 -0
  28. package/dist/src/ClassRegistry.d.ts +13 -0
  29. package/dist/src/Collection.d.ts +136 -0
  30. package/dist/src/CommonMethods.d.ts +32 -0
  31. package/dist/src/EventTypeDefs.d.ts +227 -0
  32. package/dist/src/Intersection.d.ts +112 -0
  33. package/dist/src/Observable.d.ts +60 -0
  34. package/dist/src/Pattern.d.ts +113 -0
  35. package/dist/src/Point.d.ts +232 -0
  36. package/dist/src/Shadow.d.ts +97 -0
  37. package/dist/src/brushes/BaseBrush.d.ts +105 -0
  38. package/dist/src/brushes/CircleBrush.d.ts +49 -0
  39. package/dist/src/brushes/PatternBrush.d.ts +23 -0
  40. package/dist/src/brushes/PencilBrush.d.ts +92 -0
  41. package/dist/src/brushes/SprayBrush.d.ts +79 -0
  42. package/dist/src/cache.d.ts +47 -0
  43. package/dist/src/canvas/Canvas.d.ts +548 -0
  44. package/dist/src/canvas/SelectableCanvas.d.ts +754 -0
  45. package/dist/src/canvas/StaticCanvas.d.ts +778 -0
  46. package/dist/src/canvas/TextEditingManager.d.ts +17 -0
  47. package/dist/src/canvas/canvas_gestures.mixin.d.ts +2 -0
  48. package/dist/src/color/Color.d.ts +174 -0
  49. package/dist/src/color/color_map.d.ts +155 -0
  50. package/dist/src/color/constants.d.ts +22 -0
  51. package/dist/src/color/util.d.ts +12 -0
  52. package/dist/src/config.d.ts +115 -0
  53. package/dist/src/constants.d.ts +14 -0
  54. package/dist/src/controls/Control.d.ts +228 -0
  55. package/dist/src/controls/changeWidth.d.ts +13 -0
  56. package/dist/src/controls/commonControls.d.ts +28 -0
  57. package/dist/src/controls/controlRendering.d.ts +29 -0
  58. package/dist/src/controls/drag.d.ts +12 -0
  59. package/dist/src/controls/index.d.ts +13 -0
  60. package/dist/src/controls/polyControl.d.ts +5 -0
  61. package/dist/src/controls/rotate.d.ts +12 -0
  62. package/dist/src/controls/scale.d.ts +47 -0
  63. package/dist/src/controls/scaleSkew.d.ts +39 -0
  64. package/dist/src/controls/skew.d.ts +33 -0
  65. package/dist/src/controls/util.d.ts +41 -0
  66. package/dist/src/controls/wrapWithFireEvent.d.ts +8 -0
  67. package/dist/src/controls/wrapWithFixedAnchor.d.ts +9 -0
  68. package/dist/src/env/browser.d.ts +3 -0
  69. package/dist/src/env/index.d.ts +15 -0
  70. package/dist/src/env/node.d.ts +5 -0
  71. package/dist/src/env/types.d.ts +15 -0
  72. package/dist/src/filters/BaseFilter.d.ts +153 -0
  73. package/dist/src/filters/BlendColor.d.ts +80 -0
  74. package/dist/src/filters/BlendImage.d.ts +92 -0
  75. package/dist/src/filters/Blur.d.ts +51 -0
  76. package/dist/src/filters/Boilerplate.d.ts +48 -0
  77. package/dist/src/filters/Brightness.d.ts +47 -0
  78. package/dist/src/filters/Canvas2dFilterBackend.d.ts +27 -0
  79. package/dist/src/filters/ColorMatrix.d.ts +63 -0
  80. package/dist/src/filters/ColorMatrixFilters.d.ts +545 -0
  81. package/dist/src/filters/Composed.d.ts +45 -0
  82. package/dist/src/filters/Contrast.d.ts +45 -0
  83. package/dist/src/filters/Convolute.d.ts +82 -0
  84. package/dist/src/filters/FilterBackend.d.ts +14 -0
  85. package/dist/src/filters/GLProbes/GLProbe.d.ts +11 -0
  86. package/dist/src/filters/GLProbes/NodeGLProbe.d.ts +11 -0
  87. package/dist/src/filters/GLProbes/WebGLProbe.d.ts +20 -0
  88. package/dist/src/filters/Gamma.d.ts +54 -0
  89. package/dist/src/filters/Grayscale.d.ts +46 -0
  90. package/dist/src/filters/HueRotation.d.ts +24 -0
  91. package/dist/src/filters/Invert.d.ts +55 -0
  92. package/dist/src/filters/Noise.d.ts +54 -0
  93. package/dist/src/filters/Pixelate.d.ts +44 -0
  94. package/dist/src/filters/RemoveColor.d.ts +63 -0
  95. package/dist/src/filters/Resize.d.ts +136 -0
  96. package/dist/src/filters/Saturation.d.ts +48 -0
  97. package/dist/src/filters/Vibrance.d.ts +48 -0
  98. package/dist/src/filters/WebGLFilterBackend.d.ts +126 -0
  99. package/dist/src/filters/filters.d.ts +21 -0
  100. package/dist/src/filters/index.d.ts +5 -0
  101. package/dist/src/filters/shaders/baseFilter.d.ts +4 -0
  102. package/dist/src/filters/shaders/blendColor.d.ts +13 -0
  103. package/dist/src/filters/shaders/blendImage.d.ts +3 -0
  104. package/dist/src/filters/shaders/blur.d.ts +2 -0
  105. package/dist/src/filters/shaders/brightness.d.ts +2 -0
  106. package/dist/src/filters/shaders/colorMatrix.d.ts +2 -0
  107. package/dist/src/filters/shaders/constrast.d.ts +2 -0
  108. package/dist/src/filters/shaders/convolute.d.ts +11 -0
  109. package/dist/src/filters/shaders/gamma.d.ts +2 -0
  110. package/dist/src/filters/shaders/grayscale.d.ts +3 -0
  111. package/dist/src/filters/shaders/invert.d.ts +2 -0
  112. package/dist/src/filters/shaders/noise.d.ts +2 -0
  113. package/dist/src/filters/shaders/pixelate.d.ts +2 -0
  114. package/dist/src/filters/shaders/removeColor.d.ts +2 -0
  115. package/dist/src/filters/shaders/saturation.d.ts +2 -0
  116. package/dist/src/filters/shaders/vibrance.d.ts +2 -0
  117. package/dist/src/filters/typedefs.d.ts +49 -0
  118. package/dist/src/gradient/Gradient.d.ts +149 -0
  119. package/dist/src/gradient/constants.d.ts +15 -0
  120. package/dist/src/gradient/parser/index.d.ts +4 -0
  121. package/dist/src/gradient/parser/misc.d.ts +4 -0
  122. package/dist/src/gradient/parser/parseColorStops.d.ts +3 -0
  123. package/dist/src/gradient/parser/parseCoords.d.ts +17 -0
  124. package/dist/src/gradient/typedefs.d.ts +93 -0
  125. package/dist/src/mixins/eraser_brush.mixin.d.ts +2 -0
  126. package/dist/src/parkinglot/canvas_animation.mixin.d.ts +2 -0
  127. package/dist/src/parkinglot/straighten.d.ts +2 -0
  128. package/dist/src/parser/applyViewboxTransform.d.ts +5 -0
  129. package/dist/src/parser/attributes.d.ts +6 -0
  130. package/dist/src/parser/constants.d.ts +53 -0
  131. package/dist/src/parser/doesSomeParentMatch.d.ts +2 -0
  132. package/dist/src/parser/elementById.d.ts +6 -0
  133. package/dist/src/parser/elementMatchesRule.d.ts +5 -0
  134. package/dist/src/parser/elements_parser.d.ts +3 -0
  135. package/dist/src/parser/getCSSRules.d.ts +7 -0
  136. package/dist/src/parser/getGlobalStylesForElement.d.ts +5 -0
  137. package/dist/src/parser/getGradientDefs.d.ts +7 -0
  138. package/dist/src/parser/getMultipleNodes.d.ts +2 -0
  139. package/dist/src/parser/getSvgRegex.d.ts +2 -0
  140. package/dist/src/parser/hasAncestorWithNodeName.d.ts +2 -0
  141. package/dist/src/parser/index.d.ts +10 -0
  142. package/dist/src/parser/loadSVGFromString.d.ts +12 -0
  143. package/dist/src/parser/loadSVGFromURL.d.ts +13 -0
  144. package/dist/src/parser/normalizeAttr.d.ts +2 -0
  145. package/dist/src/parser/normalizeValue.d.ts +2 -0
  146. package/dist/src/parser/parseAttributes.d.ts +9 -0
  147. package/dist/src/parser/parseElements.d.ts +11 -0
  148. package/dist/src/parser/parseFontDeclaration.d.ts +10 -0
  149. package/dist/src/parser/parsePointsAttribute.d.ts +12 -0
  150. package/dist/src/parser/parseSVGDocument.d.ts +15 -0
  151. package/dist/src/parser/parseStyleAttribute.d.ts +9 -0
  152. package/dist/src/parser/parseStyleObject.d.ts +2 -0
  153. package/dist/src/parser/parseStyleString.d.ts +2 -0
  154. package/dist/src/parser/parseTransformAttribute.d.ts +10 -0
  155. package/dist/src/parser/parseUseDirectives.d.ts +2 -0
  156. package/dist/src/parser/percent.d.ts +9 -0
  157. package/dist/src/parser/recursivelyParseGradientsXlink.d.ts +2 -0
  158. package/dist/src/parser/rotateMatrix.d.ts +2 -0
  159. package/dist/src/parser/scaleMatrix.d.ts +2 -0
  160. package/dist/src/parser/selectorMatches.d.ts +2 -0
  161. package/dist/src/parser/setStrokeFillOpacity.d.ts +6 -0
  162. package/dist/src/parser/skewMatrix.d.ts +2 -0
  163. package/dist/src/parser/translateMatrix.d.ts +2 -0
  164. package/dist/src/shapes/ActiveSelection.d.ts +82 -0
  165. package/dist/src/shapes/Circle.d.ts +99 -0
  166. package/dist/src/shapes/Ellipse.d.ts +84 -0
  167. package/dist/src/shapes/Group.d.ts +408 -0
  168. package/dist/src/shapes/IText/DraggableTextDelegate.d.ts +78 -0
  169. package/dist/src/shapes/IText/IText.d.ts +335 -0
  170. package/dist/src/shapes/IText/ITextBehavior.d.ts +287 -0
  171. package/dist/src/shapes/IText/ITextClickBehavior.d.ts +83 -0
  172. package/dist/src/shapes/IText/ITextKeyBehavior.d.ts +195 -0
  173. package/dist/src/shapes/IText/constants.d.ts +13 -0
  174. package/dist/src/shapes/Image.d.ts +311 -0
  175. package/dist/src/shapes/Line.d.ts +126 -0
  176. package/dist/src/shapes/Object/AnimatableObject.d.ts +33 -0
  177. package/dist/src/shapes/Object/FabricObject.d.ts +11 -0
  178. package/dist/src/shapes/Object/FabricObjectSVGExportMixin.d.ts +74 -0
  179. package/dist/src/shapes/Object/InteractiveObject.d.ts +296 -0
  180. package/dist/src/shapes/Object/Object.d.ts +594 -0
  181. package/dist/src/shapes/Object/ObjectGeometry.d.ts +327 -0
  182. package/dist/src/shapes/Object/ObjectOrigin.d.ts +109 -0
  183. package/dist/src/shapes/Object/StackedObject.d.ts +72 -0
  184. package/dist/src/shapes/Object/defaultValues.d.ts +76 -0
  185. package/dist/src/shapes/Object/types/BaseProps.d.ts +84 -0
  186. package/dist/src/shapes/Object/types/BorderProps.d.ts +37 -0
  187. package/dist/src/shapes/Object/types/ControlProps.d.ts +62 -0
  188. package/dist/src/shapes/Object/types/FabricObjectProps.d.ts +96 -0
  189. package/dist/src/shapes/Object/types/FillStrokeProps.d.ts +80 -0
  190. package/dist/src/shapes/Object/types/LockInteractionProps.d.ts +51 -0
  191. package/dist/src/shapes/Object/types/ObjectProps.d.ts +42 -0
  192. package/dist/src/shapes/Object/types/SerializedObjectProps.d.ts +66 -0
  193. package/dist/src/shapes/Object/types/index.d.ts +6 -0
  194. package/dist/src/shapes/Path.d.ts +130 -0
  195. package/dist/src/shapes/Polygon.d.ts +9 -0
  196. package/dist/src/shapes/Polyline.d.ts +140 -0
  197. package/dist/src/shapes/Rect.d.ts +76 -0
  198. package/dist/src/shapes/Text/StyledText.d.ts +119 -0
  199. package/dist/src/shapes/Text/Text.d.ts +673 -0
  200. package/dist/src/shapes/Text/TextSVGExportMixin.d.ts +32 -0
  201. package/dist/src/shapes/Text/constants.d.ts +7 -0
  202. package/dist/src/shapes/Textbox.d.ts +185 -0
  203. package/dist/src/shapes/Triangle.d.ts +25 -0
  204. package/dist/src/typedefs.d.ts +90 -0
  205. package/dist/src/util/animation/AnimationBase.d.ts +54 -0
  206. package/dist/src/util/animation/AnimationFrameProvider.d.ts +3 -0
  207. package/dist/src/util/animation/AnimationRegistry.d.ts +29 -0
  208. package/dist/src/util/animation/ArrayAnimation.d.ts +10 -0
  209. package/dist/src/util/animation/ColorAnimation.d.ts +11 -0
  210. package/dist/src/util/animation/ValueAnimation.d.ts +10 -0
  211. package/dist/src/util/animation/animate.d.ts +37 -0
  212. package/dist/src/util/animation/easing.d.ts +130 -0
  213. package/dist/src/util/animation/types.d.ts +87 -0
  214. package/dist/src/util/applyMixins.d.ts +8 -0
  215. package/dist/src/util/dom_event.d.ts +5 -0
  216. package/dist/src/util/dom_misc.d.ts +39 -0
  217. package/dist/src/util/dom_request.d.ts +14 -0
  218. package/dist/src/util/dom_style.d.ts +7 -0
  219. package/dist/src/util/fireEvent.d.ts +3 -0
  220. package/dist/src/util/index.d.ts +35 -0
  221. package/dist/src/util/internals/cloneDeep.d.ts +2 -0
  222. package/dist/src/util/internals/getRandomInt.d.ts +8 -0
  223. package/dist/src/util/internals/ifNaN.d.ts +8 -0
  224. package/dist/src/util/internals/index.d.ts +4 -0
  225. package/dist/src/util/internals/removeFromArray.d.ts +9 -0
  226. package/dist/src/util/internals/uid.d.ts +2 -0
  227. package/dist/src/util/lang_string.d.ts +22 -0
  228. package/dist/src/util/misc/boundingBoxFromPoints.d.ts +9 -0
  229. package/dist/src/util/misc/capValue.d.ts +2 -0
  230. package/dist/src/util/misc/cos.d.ts +10 -0
  231. package/dist/src/util/misc/dom.d.ts +28 -0
  232. package/dist/src/util/misc/findScaleTo.d.ts +29 -0
  233. package/dist/src/util/misc/groupSVGElements.d.ts +9 -0
  234. package/dist/src/util/misc/isTransparent.d.ts +11 -0
  235. package/dist/src/util/misc/matrix.d.ts +92 -0
  236. package/dist/src/util/misc/mergeClipPaths.d.ts +23 -0
  237. package/dist/src/util/misc/objectEnlive.d.ts +56 -0
  238. package/dist/src/util/misc/objectTransforms.d.ts +68 -0
  239. package/dist/src/util/misc/pick.d.ts +9 -0
  240. package/dist/src/util/misc/planeChange.d.ts +84 -0
  241. package/dist/src/util/misc/projectStroke/StrokeLineCapProjections.d.ts +51 -0
  242. package/dist/src/util/misc/projectStroke/StrokeLineJoinProjections.d.ts +81 -0
  243. package/dist/src/util/misc/projectStroke/StrokeProjectionsBase.d.ts +25 -0
  244. package/dist/src/util/misc/projectStroke/index.d.ts +11 -0
  245. package/dist/src/util/misc/projectStroke/types.d.ts +23 -0
  246. package/dist/src/util/misc/radiansDegreesConversion.d.ts +14 -0
  247. package/dist/src/util/misc/resolveOrigin.d.ts +9 -0
  248. package/dist/src/util/misc/rotatePoint.d.ts +12 -0
  249. package/dist/src/util/misc/sin.d.ts +10 -0
  250. package/dist/src/util/misc/svgParsing.d.ts +53 -0
  251. package/dist/src/util/misc/textStyles.d.ts +32 -0
  252. package/dist/src/util/misc/toFixed.d.ts +8 -0
  253. package/dist/src/util/misc/vectors.d.ts +57 -0
  254. package/dist/src/util/path/index.d.ts +96 -0
  255. package/dist/src/util/path/regex.d.ts +3 -0
  256. package/dist/src/util/path/typechecks.d.ts +24 -0
  257. package/dist/src/util/path/typedefs.d.ts +220 -0
  258. package/dist/src/util/transform_matrix_removal.d.ts +14 -0
  259. package/dist/src/util/types.d.ts +19 -0
  260. package/fabric.ts +51 -0
  261. package/index.node.ts +37 -0
  262. package/index.ts +1 -0
  263. package/package.json +100 -40
  264. package/publish.js +0 -26
  265. package/rollup.config.mjs +91 -0
  266. package/rollup.test.config.js +24 -0
  267. package/scripts/build.mjs +50 -0
  268. package/scripts/buildLock.mjs +115 -0
  269. package/scripts/buildReporter.mjs +15 -0
  270. package/scripts/buildStats.mjs +139 -0
  271. package/scripts/dirname.mjs +14 -0
  272. package/scripts/git.mjs +36 -0
  273. package/scripts/index.mjs +564 -0
  274. package/scripts/sandbox.mjs +149 -0
  275. package/src/ClassRegistry.ts +56 -0
  276. package/src/Collection.ts +346 -0
  277. package/src/CommonMethods.ts +63 -0
  278. package/src/EventTypeDefs.ts +296 -0
  279. package/src/Intersection.ts +302 -0
  280. package/src/Observable.ts +181 -0
  281. package/src/Pattern.ts +227 -0
  282. package/src/Point.ts +388 -0
  283. package/src/Shadow.ts +214 -0
  284. package/src/brushes/{base_brush.class.js → BaseBrush.ts} +65 -42
  285. package/src/brushes/CircleBrush.ts +145 -0
  286. package/src/brushes/PatternBrush.ts +70 -0
  287. package/src/brushes/PencilBrush.ts +300 -0
  288. package/src/brushes/SprayBrush.ts +219 -0
  289. package/src/cache.ts +90 -0
  290. package/src/canvas/Canvas.ts +1607 -0
  291. package/src/canvas/SelectableCanvas.ts +1608 -0
  292. package/src/canvas/StaticCanvas.ts +1734 -0
  293. package/src/canvas/TextEditingManager.ts +48 -0
  294. package/src/canvas/canvas_gestures.mixin.ts +207 -0
  295. package/src/color/Color.ts +404 -0
  296. package/src/color/color_map.ts +154 -0
  297. package/src/color/constants.ts +26 -0
  298. package/src/color/util.ts +32 -0
  299. package/src/config.ts +159 -0
  300. package/src/constants.ts +20 -0
  301. package/src/controls/Control.ts +380 -0
  302. package/src/controls/changeWidth.ts +52 -0
  303. package/src/controls/commonControls.ts +105 -0
  304. package/src/controls/controlRendering.ts +138 -0
  305. package/src/controls/drag.ts +31 -0
  306. package/src/controls/index.ts +22 -0
  307. package/src/controls/polyControl.ts +135 -0
  308. package/src/controls/rotate.ts +87 -0
  309. package/src/controls/scale.ts +277 -0
  310. package/src/controls/scaleSkew.ts +92 -0
  311. package/src/controls/skew.ts +242 -0
  312. package/src/controls/util.ts +154 -0
  313. package/src/controls/wrapWithFireEvent.ts +25 -0
  314. package/src/controls/wrapWithFixedAnchor.ts +20 -0
  315. package/src/env/browser.ts +32 -0
  316. package/src/env/index.ts +24 -0
  317. package/src/env/node.ts +56 -0
  318. package/src/env/types.ts +15 -0
  319. package/src/filters/{base_filter.class.js → BaseFilter.ts} +192 -151
  320. package/src/filters/BlendColor.ts +217 -0
  321. package/src/filters/BlendImage.ts +228 -0
  322. package/src/filters/Blur.ts +179 -0
  323. package/src/filters/Boilerplate.ts +94 -0
  324. package/src/filters/Brightness.ts +83 -0
  325. package/src/filters/Canvas2dFilterBackend.ts +65 -0
  326. package/src/filters/ColorMatrix.ts +145 -0
  327. package/src/filters/ColorMatrixFilters.ts +77 -0
  328. package/src/filters/Composed.ts +76 -0
  329. package/src/filters/Contrast.ts +82 -0
  330. package/src/filters/Convolute.ts +184 -0
  331. package/src/filters/FilterBackend.ts +34 -0
  332. package/src/filters/GLProbes/GLProbe.ts +11 -0
  333. package/src/filters/GLProbes/NodeGLProbe.ts +15 -0
  334. package/src/filters/GLProbes/WebGLProbe.ts +46 -0
  335. package/src/filters/Gamma.ts +110 -0
  336. package/src/filters/Grayscale.ts +102 -0
  337. package/src/filters/HueRotation.ts +62 -0
  338. package/src/filters/Invert.ts +99 -0
  339. package/src/filters/Noise.ts +94 -0
  340. package/src/filters/Pixelate.ts +96 -0
  341. package/src/filters/RemoveColor.ts +135 -0
  342. package/src/filters/Resize.ts +538 -0
  343. package/src/filters/Saturation.ts +87 -0
  344. package/src/filters/Vibrance.ts +88 -0
  345. package/src/filters/WebGLFilterBackend.ts +430 -0
  346. package/src/filters/filters.ts +28 -0
  347. package/src/filters/index.ts +5 -0
  348. package/src/filters/shaders/baseFilter.ts +19 -0
  349. package/src/filters/shaders/blendColor.ts +33 -0
  350. package/src/filters/shaders/blendImage.ts +32 -0
  351. package/src/filters/shaders/blur.ts +24 -0
  352. package/src/filters/shaders/brightness.ts +11 -0
  353. package/src/filters/shaders/colorMatrix.ts +12 -0
  354. package/src/filters/shaders/constrast.ts +11 -0
  355. package/src/filters/shaders/convolute.ts +154 -0
  356. package/src/filters/shaders/gamma.ts +15 -0
  357. package/src/filters/shaders/grayscale.ts +36 -0
  358. package/src/filters/shaders/invert.ts +19 -0
  359. package/src/filters/shaders/noise.ts +16 -0
  360. package/src/filters/shaders/pixelate.ts +19 -0
  361. package/src/filters/shaders/removeColor.ts +13 -0
  362. package/src/filters/shaders/saturation.ts +15 -0
  363. package/src/filters/shaders/vibrance.ts +16 -0
  364. package/src/filters/typedefs.ts +65 -0
  365. package/src/gradient/Gradient.ts +406 -0
  366. package/src/gradient/constants.ts +12 -0
  367. package/src/gradient/parser/index.ts +3 -0
  368. package/src/gradient/parser/misc.ts +13 -0
  369. package/src/gradient/parser/parseColorStops.ts +56 -0
  370. package/src/gradient/parser/parseCoords.ts +73 -0
  371. package/src/gradient/typedefs.ts +104 -0
  372. package/src/mixins/{eraser_brush.mixin.js → eraser_brush.mixin.ts} +350 -239
  373. package/src/parkinglot/canvas_animation.mixin.ts +121 -0
  374. package/src/parkinglot/straighten.ts +58 -0
  375. package/src/parser/applyViewboxTransform.ts +157 -0
  376. package/src/parser/attributes.ts +25 -0
  377. package/src/parser/constants.ts +115 -0
  378. package/src/parser/doesSomeParentMatch.ts +19 -0
  379. package/src/parser/elementById.ts +21 -0
  380. package/src/parser/elementMatchesRule.ts +16 -0
  381. package/src/parser/elements_parser.ts +191 -0
  382. package/src/parser/getCSSRules.ts +62 -0
  383. package/src/parser/getGlobalStylesForElement.ts +19 -0
  384. package/src/parser/getGradientDefs.ts +31 -0
  385. package/src/parser/getMultipleNodes.ts +15 -0
  386. package/src/parser/getSvgRegex.ts +5 -0
  387. package/src/parser/hasAncestorWithNodeName.ts +14 -0
  388. package/src/parser/index.ts +9 -0
  389. package/src/parser/loadSVGFromString.ts +26 -0
  390. package/src/parser/loadSVGFromURL.ts +40 -0
  391. package/src/parser/normalizeAttr.ts +10 -0
  392. package/src/parser/normalizeValue.ts +63 -0
  393. package/src/parser/parseAttributes.ts +90 -0
  394. package/src/parser/parseElements.ts +28 -0
  395. package/src/parser/parseFontDeclaration.ts +44 -0
  396. package/src/parser/parsePointsAttribute.ts +34 -0
  397. package/src/parser/parseSVGDocument.ts +93 -0
  398. package/src/parser/parseStyleAttribute.ts +27 -0
  399. package/src/parser/parseStyleObject.ts +15 -0
  400. package/src/parser/parseStyleString.ts +16 -0
  401. package/src/parser/parseTransformAttribute.ts +155 -0
  402. package/src/parser/parseUseDirectives.ts +78 -0
  403. package/src/parser/percent.ts +27 -0
  404. package/src/parser/recursivelyParseGradientsXlink.ts +42 -0
  405. package/src/parser/rotateMatrix.ts +21 -0
  406. package/src/parser/scaleMatrix.ts +9 -0
  407. package/src/parser/selectorMatches.ts +25 -0
  408. package/src/parser/setStrokeFillOpacity.ts +40 -0
  409. package/src/parser/skewMatrix.ts +6 -0
  410. package/src/parser/translateMatrix.ts +8 -0
  411. package/src/shapes/ActiveSelection.ts +189 -0
  412. package/src/shapes/Circle.ts +242 -0
  413. package/src/shapes/Ellipse.ts +179 -0
  414. package/src/shapes/Group.ts +1100 -0
  415. package/src/shapes/IText/DraggableTextDelegate.ts +382 -0
  416. package/src/shapes/IText/IText.ts +693 -0
  417. package/src/shapes/IText/ITextBehavior.ts +1064 -0
  418. package/src/shapes/IText/ITextClickBehavior.ts +325 -0
  419. package/src/shapes/IText/ITextKeyBehavior.ts +685 -0
  420. package/src/shapes/IText/constants.ts +47 -0
  421. package/src/shapes/Image.ts +841 -0
  422. package/src/shapes/Line.ts +346 -0
  423. package/src/shapes/Object/AnimatableObject.ts +106 -0
  424. package/src/shapes/Object/FabricObject.ts +29 -0
  425. package/src/shapes/Object/FabricObjectSVGExportMixin.ts +277 -0
  426. package/src/shapes/Object/InteractiveObject.ts +672 -0
  427. package/src/shapes/Object/Object.ts +1561 -0
  428. package/src/shapes/Object/ObjectGeometry.ts +813 -0
  429. package/src/shapes/Object/ObjectOrigin.ts +276 -0
  430. package/src/shapes/Object/StackedObject.ts +206 -0
  431. package/src/shapes/Object/defaultValues.ts +108 -0
  432. package/src/shapes/Object/types/BaseProps.ts +96 -0
  433. package/src/shapes/Object/types/BorderProps.ts +40 -0
  434. package/src/shapes/Object/types/ControlProps.ts +69 -0
  435. package/src/shapes/Object/types/FabricObjectProps.ts +111 -0
  436. package/src/shapes/Object/types/FillStrokeProps.ts +90 -0
  437. package/src/shapes/Object/types/LockInteractionProps.ts +57 -0
  438. package/src/shapes/Object/types/ObjectProps.ts +46 -0
  439. package/src/shapes/Object/types/SerializedObjectProps.ts +73 -0
  440. package/src/shapes/Object/types/index.ts +8 -0
  441. package/src/shapes/Path.ts +416 -0
  442. package/src/shapes/Polygon.ts +20 -0
  443. package/src/shapes/Polyline.ts +359 -0
  444. package/src/shapes/Rect.ts +233 -0
  445. package/src/shapes/Text/StyledText.ts +329 -0
  446. package/src/shapes/Text/Text.ts +1884 -0
  447. package/src/shapes/Text/TextSVGExportMixin.ts +288 -0
  448. package/src/shapes/Text/constants.ts +91 -0
  449. package/src/shapes/Textbox.ts +477 -0
  450. package/src/shapes/Triangle.ts +60 -0
  451. package/src/typedefs.ts +115 -0
  452. package/src/util/animation/AnimationBase.ts +166 -0
  453. package/src/util/animation/AnimationFrameProvider.ts +9 -0
  454. package/src/util/animation/AnimationRegistry.ts +58 -0
  455. package/src/util/animation/ArrayAnimation.ts +27 -0
  456. package/src/util/animation/ColorAnimation.ts +74 -0
  457. package/src/util/animation/ValueAnimation.ts +29 -0
  458. package/src/util/animation/animate.ts +74 -0
  459. package/src/util/animation/easing.ts +327 -0
  460. package/src/util/animation/types.ts +136 -0
  461. package/src/util/applyMixins.ts +22 -0
  462. package/src/util/dom_event.ts +28 -0
  463. package/src/util/dom_misc.ts +121 -0
  464. package/src/util/dom_request.ts +64 -0
  465. package/src/util/dom_style.ts +20 -0
  466. package/src/util/fireEvent.ts +15 -0
  467. package/src/util/index.ts +102 -0
  468. package/src/util/internals/cloneDeep.ts +2 -0
  469. package/src/util/internals/getRandomInt.ts +8 -0
  470. package/src/util/internals/ifNaN.ts +9 -0
  471. package/src/util/internals/index.ts +3 -0
  472. package/src/util/internals/removeFromArray.ts +14 -0
  473. package/src/util/internals/uid.ts +3 -0
  474. package/src/util/lang_string.ts +79 -0
  475. package/src/util/misc/boundingBoxFromPoints.ts +37 -0
  476. package/src/util/misc/capValue.ts +2 -0
  477. package/src/util/misc/cos.ts +24 -0
  478. package/src/util/misc/dom.ts +50 -0
  479. package/src/util/misc/findScaleTo.ts +44 -0
  480. package/src/util/misc/groupSVGElements.ts +15 -0
  481. package/src/util/misc/isTransparent.ts +28 -0
  482. package/src/util/misc/matrix.ts +207 -0
  483. package/src/util/misc/mergeClipPaths.ts +40 -0
  484. package/src/util/misc/objectEnlive.ts +189 -0
  485. package/src/util/misc/objectTransforms.ts +129 -0
  486. package/src/util/misc/pick.ts +29 -0
  487. package/src/util/misc/planeChange.ts +136 -0
  488. package/src/util/misc/projectStroke/StrokeLineCapProjections.ts +112 -0
  489. package/src/util/misc/projectStroke/StrokeLineJoinProjections.ts +226 -0
  490. package/src/util/misc/projectStroke/StrokeProjectionsBase.ts +75 -0
  491. package/src/util/misc/projectStroke/index.ts +53 -0
  492. package/src/util/misc/projectStroke/types.ts +24 -0
  493. package/src/util/misc/radiansDegreesConversion.ts +18 -0
  494. package/src/util/misc/resolveOrigin.ts +22 -0
  495. package/src/util/misc/rotatePoint.ts +15 -0
  496. package/src/util/misc/sin.ts +26 -0
  497. package/src/util/misc/svgParsing.ts +181 -0
  498. package/src/util/misc/textStyles.ts +134 -0
  499. package/src/util/misc/toFixed.ts +8 -0
  500. package/src/util/misc/vectors.ts +82 -0
  501. package/src/util/path/index.ts +1038 -0
  502. package/src/util/path/regex.ts +41 -0
  503. package/src/util/path/typechecks.ts +145 -0
  504. package/src/util/path/typedefs.ts +305 -0
  505. package/src/util/transform_matrix_removal.ts +60 -0
  506. package/src/util/types.ts +78 -0
  507. package/tsconfig.json +106 -0
  508. package/HEADER.js +0 -203
  509. package/build.js +0 -287
  510. package/dist/fabric.js +0 -31187
  511. package/dist/fabric.min.js +0 -1
  512. package/old-travis-reference.yml +0 -97
  513. package/src/brushes/circle_brush.class.js +0 -144
  514. package/src/brushes/pattern_brush.class.js +0 -61
  515. package/src/brushes/pencil_brush.class.js +0 -310
  516. package/src/brushes/spray_brush.class.js +0 -219
  517. package/src/canvas.class.js +0 -1312
  518. package/src/color.class.js +0 -636
  519. package/src/control.class.js +0 -339
  520. package/src/controls.actions.js +0 -740
  521. package/src/controls.render.js +0 -99
  522. package/src/elements_parser.js +0 -152
  523. package/src/filters/2d_backend.class.js +0 -65
  524. package/src/filters/blendcolor_filter.class.js +0 -251
  525. package/src/filters/blendimage_filter.class.js +0 -247
  526. package/src/filters/blur_filter.class.js +0 -217
  527. package/src/filters/brightness_filter.class.js +0 -113
  528. package/src/filters/colormatrix_filter.class.js +0 -159
  529. package/src/filters/composed_filter.class.js +0 -72
  530. package/src/filters/contrast_filter.class.js +0 -113
  531. package/src/filters/convolute_filter.class.js +0 -352
  532. package/src/filters/filter_boilerplate.js +0 -111
  533. package/src/filters/filter_generator.js +0 -85
  534. package/src/filters/gamma_filter.class.js +0 -136
  535. package/src/filters/grayscale_filter.class.js +0 -154
  536. package/src/filters/hue_rotation.class.js +0 -107
  537. package/src/filters/invert_filter.class.js +0 -111
  538. package/src/filters/noise_filter.class.js +0 -134
  539. package/src/filters/pixelate_filter.class.js +0 -137
  540. package/src/filters/removecolor_filter.class.js +0 -173
  541. package/src/filters/resize_filter.class.js +0 -490
  542. package/src/filters/saturate_filter.class.js +0 -119
  543. package/src/filters/vibrance_filter.class.js +0 -122
  544. package/src/filters/webgl_backend.class.js +0 -396
  545. package/src/globalFabric.js +0 -4
  546. package/src/gradient.class.js +0 -490
  547. package/src/intersection.class.js +0 -172
  548. package/src/log.js +0 -11
  549. package/src/mixins/animation.mixin.js +0 -231
  550. package/src/mixins/canvas_dataurl_exporter.mixin.js +0 -97
  551. package/src/mixins/canvas_events.mixin.js +0 -974
  552. package/src/mixins/canvas_gestures.mixin.js +0 -149
  553. package/src/mixins/canvas_grouping.mixin.js +0 -177
  554. package/src/mixins/canvas_serialization.mixin.js +0 -228
  555. package/src/mixins/collection.mixin.js +0 -170
  556. package/src/mixins/default_controls.js +0 -114
  557. package/src/mixins/itext.svg_export.js +0 -241
  558. package/src/mixins/itext_behavior.mixin.js +0 -940
  559. package/src/mixins/itext_click_behavior.mixin.js +0 -278
  560. package/src/mixins/itext_key_behavior.mixin.js +0 -694
  561. package/src/mixins/object.svg_export.js +0 -258
  562. package/src/mixins/object_geometry.mixin.js +0 -683
  563. package/src/mixins/object_interactivity.mixin.js +0 -314
  564. package/src/mixins/object_origin.mixin.js +0 -255
  565. package/src/mixins/object_stacking.mixin.js +0 -80
  566. package/src/mixins/object_straightening.mixin.js +0 -80
  567. package/src/mixins/observable.mixin.js +0 -141
  568. package/src/mixins/shared_methods.mixin.js +0 -94
  569. package/src/mixins/stateful.mixin.js +0 -107
  570. package/src/mixins/text_style.mixin.js +0 -324
  571. package/src/parser.js +0 -1090
  572. package/src/pattern.class.js +0 -189
  573. package/src/point.class.js +0 -337
  574. package/src/shadow.class.js +0 -195
  575. package/src/shapes/active_selection.class.js +0 -155
  576. package/src/shapes/circle.class.js +0 -210
  577. package/src/shapes/ellipse.class.js +0 -181
  578. package/src/shapes/group.class.js +0 -593
  579. package/src/shapes/image.class.js +0 -764
  580. package/src/shapes/itext.class.js +0 -526
  581. package/src/shapes/line.class.js +0 -324
  582. package/src/shapes/object.class.js +0 -2008
  583. package/src/shapes/path.class.js +0 -384
  584. package/src/shapes/polygon.class.js +0 -81
  585. package/src/shapes/polyline.class.js +0 -268
  586. package/src/shapes/rect.class.js +0 -187
  587. package/src/shapes/text.class.js +0 -1696
  588. package/src/shapes/textbox.class.js +0 -461
  589. package/src/shapes/triangle.class.js +0 -93
  590. package/src/static_canvas.class.js +0 -1881
  591. package/src/util/anim_ease.js +0 -398
  592. package/src/util/animate.js +0 -254
  593. package/src/util/animate_color.js +0 -74
  594. package/src/util/dom_event.js +0 -50
  595. package/src/util/dom_misc.js +0 -300
  596. package/src/util/dom_request.js +0 -54
  597. package/src/util/dom_style.js +0 -70
  598. package/src/util/lang_array.js +0 -94
  599. package/src/util/lang_class.js +0 -115
  600. package/src/util/lang_object.js +0 -75
  601. package/src/util/lang_string.js +0 -110
  602. package/src/util/misc.js +0 -1330
  603. package/src/util/named_accessors.mixin.js +0 -428
  604. package/src/util/path.js +0 -829
@@ -0,0 +1,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
+ const 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
+ const self = this.__gesturesParams.self;
61
+ const t = this._currentTransform;
62
+ const 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
+ const t = this._currentTransform;
156
+ const 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
+ const 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
+ }