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,91 @@
1
+ import { TClassProperties } from '../typedefs';
2
+ import { BaseFilter } from './BaseFilter';
3
+ import { T2DPipelineState, TWebGLUniformLocationMap } from './typedefs';
4
+
5
+ /**
6
+ * MyFilter filter class
7
+ * @example
8
+ * const filter = new MyFilter({
9
+ * add here an example of how to use your filter
10
+ * });
11
+ * object.filters.push(filter);
12
+ * object.applyFilters();
13
+ */
14
+ export class MyFilter extends BaseFilter {
15
+ /**
16
+ * MyFilter value, from -1 to 1.
17
+ * translated to -255 to 255 for 2d
18
+ * 0.0039215686 is the part of 1 that get translated to 1 in 2d
19
+ * @param {Number} myParameter
20
+ * @default
21
+ */
22
+ declare myParameter: number;
23
+
24
+ /**
25
+ * Apply the MyFilter operation to a Uint8ClampedArray representing the pixels of an image.
26
+ *
27
+ * @param {Object} options
28
+ * @param {ImageData} options.imageData The Uint8ClampedArray to be filtered.
29
+ */
30
+ applyTo2d(options: T2DPipelineState) {
31
+ if (this.myParameter === 0) {
32
+ // early return if the parameter value has a neutral value
33
+ return;
34
+ }
35
+
36
+ for (let i = 0; i < options.imageData.data.length; i += 4) {
37
+ // insert here your code to modify data[i]
38
+ }
39
+ }
40
+
41
+ /**
42
+ * Return WebGL uniform locations for this filter's shader.
43
+ *
44
+ * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.
45
+ * @param {WebGLShaderProgram} program This filter's compiled shader program.
46
+ */
47
+ getUniformLocations(
48
+ gl: WebGLRenderingContext,
49
+ program: WebGLProgram
50
+ ): TWebGLUniformLocationMap {
51
+ return {
52
+ uMyParameter: gl.getUniformLocation(program, 'uMyParameter'),
53
+ };
54
+ }
55
+
56
+ /**
57
+ * Send data from this filter to its shader program's uniforms.
58
+ *
59
+ * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.
60
+ * @param {Object} uniformLocations A map of string uniform names to WebGLUniformLocation objects
61
+ */
62
+ sendUniformData(
63
+ gl: WebGLRenderingContext,
64
+ uniformLocations: TWebGLUniformLocationMap
65
+ ) {
66
+ gl.uniform1f(uniformLocations.uMyParameter, this.myParameter);
67
+ }
68
+
69
+ static async fromObject(object: any) {
70
+ return new MyFilter(object);
71
+ }
72
+ }
73
+
74
+ export const myFilterDefaultValues: Partial<TClassProperties<MyFilter>> = {
75
+ type: 'MyFilter',
76
+ fragmentSource: `
77
+ precision highp float;
78
+ uniform sampler2D uTexture;
79
+ uniform float uMyParameter;
80
+ varying vec2 vTexCoord;
81
+ void main() {
82
+ vec4 color = texture2D(uTexture, vTexCoord);
83
+ // add your gl code here
84
+ gl_FragColor = color;
85
+ }
86
+ `,
87
+ myParameter: 0,
88
+ mainParameter: 'myParameter',
89
+ };
90
+
91
+ Object.assign(MyFilter.prototype, myFilterDefaultValues);
@@ -0,0 +1,93 @@
1
+ import type { TClassProperties } from '../typedefs';
2
+ import { BaseFilter } from './BaseFilter';
3
+ import type { T2DPipelineState, TWebGLUniformLocationMap } from './typedefs';
4
+ import { classRegistry } from '../util/class_registry';
5
+ /**
6
+ * Brightness filter class
7
+ * @example
8
+ * const filter = new Brightness({
9
+ * brightness: 0.05
10
+ * });
11
+ * object.filters.push(filter);
12
+ * object.applyFilters();
13
+ */
14
+ export class Brightness extends BaseFilter {
15
+ /**
16
+ * Brightness value, from -1 to 1.
17
+ * translated to -255 to 255 for 2d
18
+ * 0.0039215686 is the part of 1 that get translated to 1 in 2d
19
+ * @param {Number} brightness
20
+ * @default
21
+ */
22
+ declare brightness: number;
23
+
24
+ /**
25
+ * Apply the Brightness operation to a Uint8ClampedArray representing the pixels of an image.
26
+ *
27
+ * @param {Object} options
28
+ * @param {ImageData} options.imageData The Uint8ClampedArray to be filtered.
29
+ */
30
+ applyTo2d({ imageData: { data } }: T2DPipelineState) {
31
+ if (this.brightness === 0) {
32
+ return;
33
+ }
34
+ const brightness = Math.round(this.brightness * 255);
35
+ for (let i = 0; i < data.length; i += 4) {
36
+ data[i] = data[i] + brightness;
37
+ data[i + 1] = data[i + 1] + brightness;
38
+ data[i + 2] = data[i + 2] + brightness;
39
+ }
40
+ }
41
+
42
+ /**
43
+ * Return WebGL uniform locations for this filter's shader.
44
+ *
45
+ * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.
46
+ * @param {WebGLShaderProgram} program This filter's compiled shader program.
47
+ */
48
+ getUniformLocations(
49
+ gl: WebGLRenderingContext,
50
+ program: WebGLProgram
51
+ ): TWebGLUniformLocationMap {
52
+ return {
53
+ uBrightness: gl.getUniformLocation(program, 'uBrightness'),
54
+ };
55
+ }
56
+
57
+ /**
58
+ * Send data from this filter to its shader program's uniforms.
59
+ *
60
+ * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.
61
+ * @param {Object} uniformLocations A map of string uniform names to WebGLUniformLocation objects
62
+ */
63
+ sendUniformData(
64
+ gl: WebGLRenderingContext,
65
+ uniformLocations: TWebGLUniformLocationMap
66
+ ) {
67
+ gl.uniform1f(uniformLocations.uBrightness, this.brightness);
68
+ }
69
+
70
+ static async fromObject(object: any) {
71
+ return new Brightness(object);
72
+ }
73
+ }
74
+
75
+ export const brightnessDefaultValues: Partial<TClassProperties<Brightness>> = {
76
+ type: 'Brightness',
77
+ fragmentSource: `
78
+ precision highp float;
79
+ uniform sampler2D uTexture;
80
+ uniform float uBrightness;
81
+ varying vec2 vTexCoord;
82
+ void main() {
83
+ vec4 color = texture2D(uTexture, vTexCoord);
84
+ color.rgb += uBrightness;
85
+ gl_FragColor = color;
86
+ }
87
+ `,
88
+ brightness: 0,
89
+ mainParameter: 'brightness',
90
+ };
91
+
92
+ Object.assign(Brightness.prototype, brightnessDefaultValues);
93
+ classRegistry.setClass(Brightness);
@@ -0,0 +1,65 @@
1
+ /**
2
+ * Canvas 2D filter backend.
3
+ */
4
+ import type { BaseFilter } from './BaseFilter';
5
+ import { T2DPipelineState, TPipelineResources } from './typedefs';
6
+
7
+ export class Canvas2dFilterBackend {
8
+ /**
9
+ * Experimental. This object is a sort of repository of help layers used to avoid
10
+ * of recreating them during frequent filtering. If you are previewing a filter with
11
+ * a slider you probably do not want to create help layers every filter step.
12
+ * in this object there will be appended some canvases, created once, resized sometimes
13
+ * cleared never. Clearing is left to the developer.
14
+ **/
15
+ resources: TPipelineResources = {};
16
+
17
+ /**
18
+ * Apply a set of filters against a source image and draw the filtered output
19
+ * to the provided destination canvas.
20
+ *
21
+ * @param {EnhancedFilter} filters The filter to apply.
22
+ * @param {HTMLImageElement|HTMLCanvasElement} sourceElement The source to be filtered.
23
+ * @param {Number} sourceWidth The width of the source input.
24
+ * @param {Number} sourceHeight The height of the source input.
25
+ * @param {HTMLCanvasElement} targetCanvas The destination for filtered output to be drawn.
26
+ */
27
+ applyFilters(
28
+ filters: BaseFilter[],
29
+ sourceElement: CanvasImageSource,
30
+ sourceWidth: number,
31
+ sourceHeight: number,
32
+ targetCanvas: HTMLCanvasElement
33
+ ): T2DPipelineState | void {
34
+ const ctx = targetCanvas.getContext('2d');
35
+ if (!ctx) {
36
+ return;
37
+ }
38
+ ctx.drawImage(sourceElement, 0, 0, sourceWidth, sourceHeight);
39
+ const imageData = ctx.getImageData(0, 0, sourceWidth, sourceHeight);
40
+ const originalImageData = ctx.getImageData(0, 0, sourceWidth, sourceHeight);
41
+ const pipelineState: T2DPipelineState = {
42
+ sourceWidth,
43
+ sourceHeight,
44
+ imageData,
45
+ originalEl: sourceElement,
46
+ originalImageData,
47
+ canvasEl: targetCanvas,
48
+ ctx,
49
+ filterBackend: this,
50
+ };
51
+ filters.forEach((filter) => {
52
+ filter.applyTo(pipelineState);
53
+ });
54
+ const { imageData: imageDataPostFilter } = pipelineState;
55
+ if (
56
+ imageDataPostFilter.width !== sourceWidth ||
57
+ imageDataPostFilter.height !== sourceHeight
58
+ ) {
59
+ targetCanvas.width = imageDataPostFilter.width;
60
+ targetCanvas.height = imageDataPostFilter.height;
61
+ }
62
+ ctx.putImageData(imageDataPostFilter, 0, 0);
63
+ return pipelineState;
64
+ }
65
+ }
@@ -0,0 +1,156 @@
1
+ import type { TClassProperties } from '../typedefs';
2
+ import { BaseFilter } from './BaseFilter';
3
+ import type { T2DPipelineState, TWebGLUniformLocationMap } from './typedefs';
4
+ import { classRegistry } from '../util/class_registry';
5
+ /**
6
+ * Color Matrix filter class
7
+ * @see {@link http://fabricjs.com/image-filters|ImageFilters demo}
8
+ * @see {@Link http://phoboslab.org/log/2013/11/fast-image-filters-with-webgl demo}
9
+ * @example <caption>Kodachrome filter</caption>
10
+ * const filter = new ColorMatrix({
11
+ * matrix: [
12
+ 1.1285582396593525, -0.3967382283601348, -0.03992559172921793, 0, 63.72958762196502,
13
+ -0.16404339962244616, 1.0835251566291304, -0.05498805115633132, 0, 24.732407896706203,
14
+ -0.16786010706155763, -0.5603416277695248, 1.6014850761964943, 0, 35.62982807460946,
15
+ 0, 0, 0, 1, 0
16
+ ]
17
+ * });
18
+ * object.filters.push(filter);
19
+ * object.applyFilters();
20
+ */
21
+ export class ColorMatrix extends BaseFilter {
22
+ /**
23
+ * Colormatrix for pixels.
24
+ * array of 20 floats. Numbers in positions 4, 9, 14, 19 loose meaning
25
+ * outside the -1, 1 range.
26
+ * 0.0039215686 is the part of 1 that get translated to 1 in 2d
27
+ * @param {Array} matrix array of 20 numbers.
28
+ * @default
29
+ */
30
+ declare matrix: number[];
31
+
32
+ /**
33
+ * Lock the colormatrix on the color part, skipping alpha, mainly for non webgl scenario
34
+ * to save some calculation
35
+ * @type Boolean
36
+ * @default true
37
+ */
38
+ declare colorsOnly: boolean;
39
+
40
+ setOptions({ matrix, ...options }: Record<string, any>) {
41
+ if (matrix) {
42
+ // safeguard against mutation
43
+ this.matrix = [...matrix];
44
+ }
45
+ Object.assign(this, options);
46
+ }
47
+
48
+ /**
49
+ * Apply the ColorMatrix operation to a Uint8Array representing the pixels of an image.
50
+ *
51
+ * @param {Object} options
52
+ * @param {ImageData} options.imageData The Uint8Array to be filtered.
53
+ */
54
+ applyTo2d(options: T2DPipelineState) {
55
+ const imageData = options.imageData,
56
+ data = imageData.data,
57
+ m = this.matrix,
58
+ colorsOnly = this.colorsOnly;
59
+
60
+ for (let i = 0; i < data.length; i += 4) {
61
+ const r = data[i];
62
+ const g = data[i + 1];
63
+ const b = data[i + 2];
64
+ if (colorsOnly) {
65
+ data[i] = r * m[0] + g * m[1] + b * m[2] + m[4] * 255;
66
+ data[i + 1] = r * m[5] + g * m[6] + b * m[7] + m[9] * 255;
67
+ data[i + 2] = r * m[10] + g * m[11] + b * m[12] + m[14] * 255;
68
+ } else {
69
+ const a = data[i + 3];
70
+ data[i] = r * m[0] + g * m[1] + b * m[2] + a * m[3] + m[4] * 255;
71
+ data[i + 1] = r * m[5] + g * m[6] + b * m[7] + a * m[8] + m[9] * 255;
72
+ data[i + 2] =
73
+ r * m[10] + g * m[11] + b * m[12] + a * m[13] + m[14] * 255;
74
+ data[i + 3] =
75
+ r * m[15] + g * m[16] + b * m[17] + a * m[18] + m[19] * 255;
76
+ }
77
+ }
78
+ }
79
+
80
+ /**
81
+ * Return WebGL uniform locations for this filter's shader.
82
+ *
83
+ * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.
84
+ * @param {WebGLShaderProgram} program This filter's compiled shader program.
85
+ */
86
+ getUniformLocations(
87
+ gl: WebGLRenderingContext,
88
+ program: WebGLProgram
89
+ ): TWebGLUniformLocationMap {
90
+ return {
91
+ uColorMatrix: gl.getUniformLocation(program, 'uColorMatrix'),
92
+ uConstants: gl.getUniformLocation(program, 'uConstants'),
93
+ };
94
+ }
95
+
96
+ /**
97
+ * Send data from this filter to its shader program's uniforms.
98
+ *
99
+ * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.
100
+ * @param {Object} uniformLocations A map of string uniform names to WebGLUniformLocation objects
101
+ */
102
+ sendUniformData(
103
+ gl: WebGLRenderingContext,
104
+ uniformLocations: TWebGLUniformLocationMap
105
+ ) {
106
+ const m = this.matrix,
107
+ matrix = [
108
+ m[0],
109
+ m[1],
110
+ m[2],
111
+ m[3],
112
+ m[5],
113
+ m[6],
114
+ m[7],
115
+ m[8],
116
+ m[10],
117
+ m[11],
118
+ m[12],
119
+ m[13],
120
+ m[15],
121
+ m[16],
122
+ m[17],
123
+ m[18],
124
+ ],
125
+ constants = [m[4], m[9], m[14], m[19]];
126
+ gl.uniformMatrix4fv(uniformLocations.uColorMatrix, false, matrix);
127
+ gl.uniform4fv(uniformLocations.uConstants, constants);
128
+ }
129
+
130
+ static async fromObject(object: any) {
131
+ return new ColorMatrix(object);
132
+ }
133
+ }
134
+
135
+ export const colorMatrixDefaultValues: Partial<TClassProperties<ColorMatrix>> =
136
+ {
137
+ type: 'ColorMatrix',
138
+ fragmentSource: `
139
+ precision highp float;
140
+ uniform sampler2D uTexture;
141
+ varying vec2 vTexCoord;
142
+ uniform mat4 uColorMatrix;
143
+ uniform vec4 uConstants;
144
+ void main() {
145
+ vec4 color = texture2D(uTexture, vTexCoord);
146
+ color *= uColorMatrix;
147
+ color += uConstants;
148
+ gl_FragColor = color;
149
+ }`,
150
+ matrix: [1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0],
151
+ mainParameter: 'matrix',
152
+ colorsOnly: true,
153
+ };
154
+
155
+ Object.assign(ColorMatrix.prototype, colorMatrixDefaultValues);
156
+ classRegistry.setClass(ColorMatrix);
@@ -0,0 +1,106 @@
1
+ import { ColorMatrix } from './ColorMatrix';
2
+ import { classRegistry } from '../util/class_registry';
3
+
4
+ export function createColorMatrixFilter(key: string, matrix: number[]) {
5
+ return class GeneratedColorMatrix extends ColorMatrix {
6
+ /**
7
+ * Filter type
8
+ * @param {String} type
9
+ * @default
10
+ */
11
+ type = key;
12
+
13
+ /**
14
+ * Colormatrix for the effect
15
+ * array of 20 floats. Numbers in positions 4, 9, 14, 19 loose meaning
16
+ * outside the -1, 1 range.
17
+ * @param {Array} matrix array of 20 numbers.
18
+ * @default
19
+ */
20
+ matrix = matrix;
21
+
22
+ /**
23
+ * Lock the matrix export for this kind of static, parameter less filters.
24
+ */
25
+ mainParameter = undefined;
26
+
27
+ /**
28
+ * Lock the colormatrix on the color part, skipping alpha
29
+ */
30
+ colorsOnly = true;
31
+
32
+ static async fromObject(object: any) {
33
+ return new GeneratedColorMatrix(object);
34
+ }
35
+ };
36
+ }
37
+
38
+ export const Brownie = createColorMatrixFilter(
39
+ 'Brownie',
40
+ [
41
+ 0.5997, 0.34553, -0.27082, 0, 0.186, -0.0377, 0.86095, 0.15059, 0, -0.1449,
42
+ 0.24113, -0.07441, 0.44972, 0, -0.02965, 0, 0, 0, 1, 0,
43
+ ]
44
+ );
45
+
46
+ classRegistry.setClass(Brownie);
47
+
48
+ export const Vintage = createColorMatrixFilter(
49
+ 'Vintage',
50
+ [
51
+ 0.62793, 0.32021, -0.03965, 0, 0.03784, 0.02578, 0.64411, 0.03259, 0,
52
+ 0.02926, 0.0466, -0.08512, 0.52416, 0, 0.02023, 0, 0, 0, 1, 0,
53
+ ]
54
+ );
55
+
56
+ classRegistry.setClass(Vintage);
57
+
58
+ export const Kodachrome = createColorMatrixFilter(
59
+ 'Kodachrome',
60
+ [
61
+ 1.12855, -0.39673, -0.03992, 0, 0.24991, -0.16404, 1.08352, -0.05498, 0,
62
+ 0.09698, -0.16786, -0.56034, 1.60148, 0, 0.13972, 0, 0, 0, 1, 0,
63
+ ]
64
+ );
65
+
66
+ classRegistry.setClass(Kodachrome);
67
+
68
+ export const Technicolor = createColorMatrixFilter(
69
+ 'Technicolor',
70
+ [
71
+ 1.91252, -0.85453, -0.09155, 0, 0.04624, -0.30878, 1.76589, -0.10601, 0,
72
+ -0.27589, -0.2311, -0.75018, 1.84759, 0, 0.12137, 0, 0, 0, 1, 0,
73
+ ]
74
+ );
75
+
76
+ classRegistry.setClass(Technicolor);
77
+
78
+ export const Polaroid = createColorMatrixFilter(
79
+ 'Polaroid',
80
+ [
81
+ 1.438, -0.062, -0.062, 0, 0, -0.122, 1.378, -0.122, 0, 0, -0.016, -0.016,
82
+ 1.483, 0, 0, 0, 0, 0, 1, 0,
83
+ ]
84
+ );
85
+
86
+ classRegistry.setClass(Polaroid);
87
+
88
+ export const Sepia = createColorMatrixFilter(
89
+ 'Sepia',
90
+ [
91
+ 0.393, 0.769, 0.189, 0, 0, 0.349, 0.686, 0.168, 0, 0, 0.272, 0.534, 0.131,
92
+ 0, 0, 0, 0, 0, 1, 0,
93
+ ]
94
+ );
95
+
96
+ classRegistry.setClass(Sepia);
97
+
98
+ export const BlackWhite = createColorMatrixFilter(
99
+ 'BlackWhite',
100
+ [
101
+ 1.5, 1.5, 1.5, 0, -1, 1.5, 1.5, 1.5, 0, -1, 1.5, 1.5, 1.5, 0, -1, 0, 0, 0,
102
+ 1, 0,
103
+ ]
104
+ );
105
+
106
+ classRegistry.setClass(BlackWhite);
@@ -0,0 +1,85 @@
1
+ import type { TClassProperties } from '../typedefs';
2
+ import {
3
+ type AnyFilter,
4
+ BaseFilter,
5
+ type BaseFilterOptions,
6
+ } from './BaseFilter';
7
+ import type { T2DPipelineState, TWebGLPipelineState } from './typedefs';
8
+ import { isWebGLPipelineState } from './typedefs';
9
+ import { classRegistry } from '../util/class_registry';
10
+
11
+ /**
12
+ * A container class that knows how to apply a sequence of filters to an input image.
13
+ */
14
+ // @ts-expect-error
15
+ export class Composed extends BaseFilter {
16
+ /**
17
+ * A non sparse array of filters to apply
18
+ */
19
+ declare subFilters: AnyFilter[];
20
+
21
+ constructor({
22
+ subFilters = [],
23
+ ...options
24
+ }: Partial<BaseFilterOptions & { subFilters: AnyFilter[] }> = {}) {
25
+ super(options);
26
+ this.subFilters = subFilters;
27
+ }
28
+
29
+ /**
30
+ * Apply this container's filters to the input image provided.
31
+ *
32
+ * @param {Object} options
33
+ * @param {Number} options.passes The number of filters remaining to be applied.
34
+ */
35
+ applyTo(options: TWebGLPipelineState | T2DPipelineState) {
36
+ if (isWebGLPipelineState(options)) {
37
+ options.passes += this.subFilters.length - 1;
38
+ }
39
+ this.subFilters.forEach((filter) => {
40
+ filter.applyTo(options);
41
+ });
42
+ }
43
+
44
+ /**
45
+ * Serialize this filter into JSON.
46
+ *
47
+ * @returns {Object} A JSON representation of this filter.
48
+ */
49
+ toObject() {
50
+ return {
51
+ ...super.toObject(),
52
+ subFilters: this.subFilters.map((filter) => filter.toObject()),
53
+ };
54
+ }
55
+
56
+ isNeutralState() {
57
+ return !this.subFilters.some((filter) => !filter.isNeutralState());
58
+ }
59
+
60
+ /**
61
+ * Deserialize a JSON definition of a ComposedFilter into a concrete instance.
62
+ * @static
63
+ * @param {oject} object Object to create an instance from
64
+ * @param {object} [options]
65
+ * @param {AbortSignal} [options.signal] handle aborting `BlendImage` filter loading, see https://developer.mozilla.org/en-US/docs/Web/API/AbortController/signal
66
+ * @returns {Promise<Composed>}
67
+ */
68
+ static fromObject(
69
+ object: Record<string, any>,
70
+ options: { signal: AbortSignal }
71
+ ) {
72
+ return Promise.all(
73
+ ((object.subFilters || []) as AnyFilter[]).map((filter) =>
74
+ classRegistry.getClass(filter.type).fromObject(filter, options)
75
+ )
76
+ ).then((enlivedFilters) => new Composed({ subFilters: enlivedFilters }));
77
+ }
78
+ }
79
+
80
+ export const composedDefaultValues: Partial<TClassProperties<Composed>> = {
81
+ type: 'Composed',
82
+ };
83
+
84
+ Object.assign(Composed.prototype, composedDefaultValues);
85
+ classRegistry.setClass(Composed);
@@ -0,0 +1,94 @@
1
+ import type { TClassProperties } from '../typedefs';
2
+ import { BaseFilter } from './BaseFilter';
3
+ import type { T2DPipelineState, TWebGLUniformLocationMap } from './typedefs';
4
+ import { classRegistry } from '../util/class_registry';
5
+
6
+ /**
7
+ * Contrast filter class
8
+ * @example
9
+ * const filter = new Contrast({
10
+ * contrast: 0.25
11
+ * });
12
+ * object.filters.push(filter);
13
+ * object.applyFilters();
14
+ */
15
+ export class Contrast extends BaseFilter {
16
+ /**
17
+ * contrast value, range from -1 to 1.
18
+ * @param {Number} contrast
19
+ * @default 0
20
+ */
21
+ declare contrast: number;
22
+
23
+ /**
24
+ * Apply the Contrast operation to a Uint8Array representing the pixels of an image.
25
+ *
26
+ * @param {Object} options
27
+ * @param {ImageData} options.imageData The Uint8Array to be filtered.
28
+ */
29
+ applyTo2d({ imageData: { data } }: T2DPipelineState) {
30
+ if (this.contrast === 0) {
31
+ return;
32
+ }
33
+ const contrast = Math.floor(this.contrast * 255),
34
+ contrastF = (259 * (contrast + 255)) / (255 * (259 - contrast));
35
+
36
+ for (let i = 0; i < data.length; i += 4) {
37
+ data[i] = contrastF * (data[i] - 128) + 128;
38
+ data[i + 1] = contrastF * (data[i + 1] - 128) + 128;
39
+ data[i + 2] = contrastF * (data[i + 2] - 128) + 128;
40
+ }
41
+ }
42
+
43
+ /**
44
+ * Return WebGL uniform locations for this filter's shader.
45
+ *
46
+ * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.
47
+ * @param {WebGLShaderProgram} program This filter's compiled shader program.
48
+ */
49
+ getUniformLocations(
50
+ gl: WebGLRenderingContext,
51
+ program: WebGLProgram
52
+ ): TWebGLUniformLocationMap {
53
+ return {
54
+ uContrast: gl.getUniformLocation(program, 'uContrast'),
55
+ };
56
+ }
57
+
58
+ /**
59
+ * Send data from this filter to its shader program's uniforms.
60
+ *
61
+ * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.
62
+ * @param {Object} uniformLocations A map of string uniform names to WebGLUniformLocation objects
63
+ */
64
+ sendUniformData(
65
+ gl: WebGLRenderingContext,
66
+ uniformLocations: TWebGLUniformLocationMap
67
+ ) {
68
+ gl.uniform1f(uniformLocations.uContrast, this.contrast);
69
+ }
70
+
71
+ static async fromObject(object: any) {
72
+ return new Contrast(object);
73
+ }
74
+ }
75
+
76
+ export const contrastDefaultValues: Partial<TClassProperties<Contrast>> = {
77
+ type: 'Contrast',
78
+ fragmentSource: `
79
+ precision highp float;
80
+ uniform sampler2D uTexture;
81
+ uniform float uContrast;
82
+ varying vec2 vTexCoord;
83
+ void main() {
84
+ vec4 color = texture2D(uTexture, vTexCoord);
85
+ float contrastF = 1.015 * (uContrast + 1.0) / (1.0 * (1.015 - uContrast));
86
+ color.rgb = contrastF * (color.rgb - 0.5) + 0.5;
87
+ gl_FragColor = color;
88
+ }`,
89
+ contrast: 0,
90
+ mainParameter: 'contrast',
91
+ };
92
+
93
+ Object.assign(Contrast.prototype, contrastDefaultValues);
94
+ classRegistry.setClass(Contrast);