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,83 @@
1
+ import type { TClassProperties } from '../typedefs';
2
+ import { BaseFilter } from './BaseFilter';
3
+ import type { T2DPipelineState, TWebGLUniformLocationMap } from './typedefs';
4
+ import { classRegistry } from '../ClassRegistry';
5
+ import { fragmentSource } from './shaders/brightness';
6
+ export const brightnessDefaultValues: Partial<TClassProperties<Brightness>> = {
7
+ brightness: 0,
8
+ mainParameter: 'brightness',
9
+ };
10
+
11
+ /**
12
+ * Brightness filter class
13
+ * @example
14
+ * const filter = new Brightness({
15
+ * brightness: 0.05
16
+ * });
17
+ * object.filters.push(filter);
18
+ * object.applyFilters();
19
+ */
20
+ export class Brightness extends BaseFilter {
21
+ /**
22
+ * Brightness value, from -1 to 1.
23
+ * translated to -255 to 255 for 2d
24
+ * 0.0039215686 is the part of 1 that get translated to 1 in 2d
25
+ * @param {Number} brightness
26
+ * @default
27
+ */
28
+ declare brightness: number;
29
+
30
+ static defaults = brightnessDefaultValues;
31
+
32
+ getFragmentSource() {
33
+ return fragmentSource;
34
+ }
35
+
36
+ /**
37
+ * Apply the Brightness operation to a Uint8ClampedArray representing the pixels of an image.
38
+ *
39
+ * @param {Object} options
40
+ * @param {ImageData} options.imageData The Uint8ClampedArray to be filtered.
41
+ */
42
+ applyTo2d({ imageData: { data } }: T2DPipelineState) {
43
+ if (this.brightness === 0) {
44
+ return;
45
+ }
46
+ const brightness = Math.round(this.brightness * 255);
47
+ for (let i = 0; i < data.length; i += 4) {
48
+ data[i] = data[i] + brightness;
49
+ data[i + 1] = data[i + 1] + brightness;
50
+ data[i + 2] = data[i + 2] + brightness;
51
+ }
52
+ }
53
+
54
+ /**
55
+ * Return WebGL uniform locations for this filter's shader.
56
+ *
57
+ * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.
58
+ * @param {WebGLShaderProgram} program This filter's compiled shader program.
59
+ */
60
+ getUniformLocations(
61
+ gl: WebGLRenderingContext,
62
+ program: WebGLProgram
63
+ ): TWebGLUniformLocationMap {
64
+ return {
65
+ uBrightness: gl.getUniformLocation(program, 'uBrightness'),
66
+ };
67
+ }
68
+
69
+ /**
70
+ * Send data from this filter to its shader program's uniforms.
71
+ *
72
+ * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.
73
+ * @param {Object} uniformLocations A map of string uniform names to WebGLUniformLocation objects
74
+ */
75
+ sendUniformData(
76
+ gl: WebGLRenderingContext,
77
+ uniformLocations: TWebGLUniformLocationMap
78
+ ) {
79
+ gl.uniform1f(uniformLocations.uBrightness, this.brightness);
80
+ }
81
+ }
82
+
83
+ 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,145 @@
1
+ import type { TClassProperties } from '../typedefs';
2
+ import { BaseFilter } from './BaseFilter';
3
+ import type { T2DPipelineState, TWebGLUniformLocationMap } from './typedefs';
4
+ import { classRegistry } from '../ClassRegistry';
5
+ import { fragmentSource } from './shaders/colorMatrix';
6
+ export const colorMatrixDefaultValues: Partial<TClassProperties<ColorMatrix>> =
7
+ {
8
+ matrix: [1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0],
9
+ mainParameter: 'matrix',
10
+ colorsOnly: true,
11
+ };
12
+
13
+ /**
14
+ * Color Matrix filter class
15
+ * @see {@link http://fabricjs.com/image-filters|ImageFilters demo}
16
+ * @see {@Link http://phoboslab.org/log/2013/11/fast-image-filters-with-webgl demo}
17
+ * @example <caption>Kodachrome filter</caption>
18
+ * const filter = new ColorMatrix({
19
+ * matrix: [
20
+ 1.1285582396593525, -0.3967382283601348, -0.03992559172921793, 0, 63.72958762196502,
21
+ -0.16404339962244616, 1.0835251566291304, -0.05498805115633132, 0, 24.732407896706203,
22
+ -0.16786010706155763, -0.5603416277695248, 1.6014850761964943, 0, 35.62982807460946,
23
+ 0, 0, 0, 1, 0
24
+ ]
25
+ * });
26
+ * object.filters.push(filter);
27
+ * object.applyFilters();
28
+ */
29
+ export class ColorMatrix extends BaseFilter {
30
+ /**
31
+ * Colormatrix for pixels.
32
+ * array of 20 floats. Numbers in positions 4, 9, 14, 19 loose meaning
33
+ * outside the -1, 1 range.
34
+ * 0.0039215686 is the part of 1 that get translated to 1 in 2d
35
+ * @param {Array} matrix array of 20 numbers.
36
+ * @default
37
+ */
38
+ declare matrix: number[];
39
+
40
+ /**
41
+ * Lock the colormatrix on the color part, skipping alpha, mainly for non webgl scenario
42
+ * to save some calculation
43
+ * @type Boolean
44
+ * @default true
45
+ */
46
+ declare colorsOnly: boolean;
47
+
48
+ static defaults = colorMatrixDefaultValues;
49
+
50
+ setOptions({ matrix, ...options }: Record<string, any>) {
51
+ if (matrix) {
52
+ // safeguard against mutation
53
+ this.matrix = [...matrix];
54
+ }
55
+ Object.assign(this, options);
56
+ }
57
+
58
+ getFragmentSource(): string {
59
+ return fragmentSource;
60
+ }
61
+
62
+ /**
63
+ * Apply the ColorMatrix operation to a Uint8Array representing the pixels of an image.
64
+ *
65
+ * @param {Object} options
66
+ * @param {ImageData} options.imageData The Uint8Array to be filtered.
67
+ */
68
+ applyTo2d(options: T2DPipelineState) {
69
+ const imageData = options.imageData,
70
+ data = imageData.data,
71
+ m = this.matrix,
72
+ colorsOnly = this.colorsOnly;
73
+
74
+ for (let i = 0; i < data.length; i += 4) {
75
+ const r = data[i];
76
+ const g = data[i + 1];
77
+ const b = data[i + 2];
78
+ if (colorsOnly) {
79
+ data[i] = r * m[0] + g * m[1] + b * m[2] + m[4] * 255;
80
+ data[i + 1] = r * m[5] + g * m[6] + b * m[7] + m[9] * 255;
81
+ data[i + 2] = r * m[10] + g * m[11] + b * m[12] + m[14] * 255;
82
+ } else {
83
+ const a = data[i + 3];
84
+ data[i] = r * m[0] + g * m[1] + b * m[2] + a * m[3] + m[4] * 255;
85
+ data[i + 1] = r * m[5] + g * m[6] + b * m[7] + a * m[8] + m[9] * 255;
86
+ data[i + 2] =
87
+ r * m[10] + g * m[11] + b * m[12] + a * m[13] + m[14] * 255;
88
+ data[i + 3] =
89
+ r * m[15] + g * m[16] + b * m[17] + a * m[18] + m[19] * 255;
90
+ }
91
+ }
92
+ }
93
+
94
+ /**
95
+ * Return WebGL uniform locations for this filter's shader.
96
+ *
97
+ * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.
98
+ * @param {WebGLShaderProgram} program This filter's compiled shader program.
99
+ */
100
+ getUniformLocations(
101
+ gl: WebGLRenderingContext,
102
+ program: WebGLProgram
103
+ ): TWebGLUniformLocationMap {
104
+ return {
105
+ uColorMatrix: gl.getUniformLocation(program, 'uColorMatrix'),
106
+ uConstants: gl.getUniformLocation(program, 'uConstants'),
107
+ };
108
+ }
109
+
110
+ /**
111
+ * Send data from this filter to its shader program's uniforms.
112
+ *
113
+ * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.
114
+ * @param {Object} uniformLocations A map of string uniform names to WebGLUniformLocation objects
115
+ */
116
+ sendUniformData(
117
+ gl: WebGLRenderingContext,
118
+ uniformLocations: TWebGLUniformLocationMap
119
+ ) {
120
+ const m = this.matrix,
121
+ matrix = [
122
+ m[0],
123
+ m[1],
124
+ m[2],
125
+ m[3],
126
+ m[5],
127
+ m[6],
128
+ m[7],
129
+ m[8],
130
+ m[10],
131
+ m[11],
132
+ m[12],
133
+ m[13],
134
+ m[15],
135
+ m[16],
136
+ m[17],
137
+ m[18],
138
+ ],
139
+ constants = [m[4], m[9], m[14], m[19]];
140
+ gl.uniformMatrix4fv(uniformLocations.uColorMatrix, false, matrix);
141
+ gl.uniform4fv(uniformLocations.uConstants, constants);
142
+ }
143
+ }
144
+
145
+ classRegistry.setClass(ColorMatrix);
@@ -0,0 +1,77 @@
1
+ import { ColorMatrix, colorMatrixDefaultValues } from './ColorMatrix';
2
+ import { classRegistry } from '../ClassRegistry';
3
+
4
+ export function createColorMatrixFilter(key: string, matrix: number[]) {
5
+ const newClass = class extends ColorMatrix {
6
+ get type() {
7
+ return key;
8
+ }
9
+
10
+ static defaults = {
11
+ ...colorMatrixDefaultValues,
12
+ /**
13
+ * Lock the matrix export for this kind of static, parameter less filters.
14
+ */
15
+ mainParameter: undefined,
16
+ matrix,
17
+ };
18
+ };
19
+ classRegistry.setClass(newClass, key);
20
+ return newClass;
21
+ }
22
+
23
+ export const Brownie = createColorMatrixFilter(
24
+ 'Brownie',
25
+ [
26
+ 0.5997, 0.34553, -0.27082, 0, 0.186, -0.0377, 0.86095, 0.15059, 0, -0.1449,
27
+ 0.24113, -0.07441, 0.44972, 0, -0.02965, 0, 0, 0, 1, 0,
28
+ ]
29
+ );
30
+
31
+ export const Vintage = createColorMatrixFilter(
32
+ 'Vintage',
33
+ [
34
+ 0.62793, 0.32021, -0.03965, 0, 0.03784, 0.02578, 0.64411, 0.03259, 0,
35
+ 0.02926, 0.0466, -0.08512, 0.52416, 0, 0.02023, 0, 0, 0, 1, 0,
36
+ ]
37
+ );
38
+
39
+ export const Kodachrome = createColorMatrixFilter(
40
+ 'Kodachrome',
41
+ [
42
+ 1.12855, -0.39673, -0.03992, 0, 0.24991, -0.16404, 1.08352, -0.05498, 0,
43
+ 0.09698, -0.16786, -0.56034, 1.60148, 0, 0.13972, 0, 0, 0, 1, 0,
44
+ ]
45
+ );
46
+
47
+ export const Technicolor = createColorMatrixFilter(
48
+ 'Technicolor',
49
+ [
50
+ 1.91252, -0.85453, -0.09155, 0, 0.04624, -0.30878, 1.76589, -0.10601, 0,
51
+ -0.27589, -0.2311, -0.75018, 1.84759, 0, 0.12137, 0, 0, 0, 1, 0,
52
+ ]
53
+ );
54
+
55
+ export const Polaroid = createColorMatrixFilter(
56
+ 'Polaroid',
57
+ [
58
+ 1.438, -0.062, -0.062, 0, 0, -0.122, 1.378, -0.122, 0, 0, -0.016, -0.016,
59
+ 1.483, 0, 0, 0, 0, 0, 1, 0,
60
+ ]
61
+ );
62
+
63
+ export const Sepia = createColorMatrixFilter(
64
+ 'Sepia',
65
+ [
66
+ 0.393, 0.769, 0.189, 0, 0, 0.349, 0.686, 0.168, 0, 0, 0.272, 0.534, 0.131,
67
+ 0, 0, 0, 0, 0, 1, 0,
68
+ ]
69
+ );
70
+
71
+ export const BlackWhite = createColorMatrixFilter(
72
+ 'BlackWhite',
73
+ [
74
+ 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,
75
+ 1, 0,
76
+ ]
77
+ );
@@ -0,0 +1,76 @@
1
+ import { BaseFilter } from './BaseFilter';
2
+ import type { T2DPipelineState, TWebGLPipelineState } from './typedefs';
3
+ import { isWebGLPipelineState } from './typedefs';
4
+ import { classRegistry } from '../ClassRegistry';
5
+
6
+ /**
7
+ * A container class that knows how to apply a sequence of filters to an input image.
8
+ */
9
+ export class Composed extends BaseFilter {
10
+ /**
11
+ * A non sparse array of filters to apply
12
+ */
13
+ declare subFilters: BaseFilter[];
14
+
15
+ constructor({
16
+ subFilters = [],
17
+ ...options
18
+ }: { subFilters?: BaseFilter[] } & Record<string, any> = {}) {
19
+ super(options);
20
+ this.subFilters = subFilters;
21
+ }
22
+
23
+ /**
24
+ * Apply this container's filters to the input image provided.
25
+ *
26
+ * @param {Object} options
27
+ * @param {Number} options.passes The number of filters remaining to be applied.
28
+ */
29
+ applyTo(options: TWebGLPipelineState | T2DPipelineState) {
30
+ if (isWebGLPipelineState(options)) {
31
+ options.passes += this.subFilters.length - 1;
32
+ }
33
+ this.subFilters.forEach((filter) => {
34
+ filter.applyTo(options);
35
+ });
36
+ }
37
+
38
+ /**
39
+ * Serialize this filter into JSON.
40
+ *
41
+ * @returns {Object} A JSON representation of this filter.
42
+ */
43
+ toObject() {
44
+ return {
45
+ ...super.toObject(),
46
+ subFilters: this.subFilters.map((filter) => filter.toObject()),
47
+ };
48
+ }
49
+
50
+ isNeutralState() {
51
+ return !this.subFilters.some((filter) => !filter.isNeutralState());
52
+ }
53
+
54
+ /**
55
+ * Deserialize a JSON definition of a ComposedFilter into a concrete instance.
56
+ * @static
57
+ * @param {oject} object Object to create an instance from
58
+ * @param {object} [options]
59
+ * @param {AbortSignal} [options.signal] handle aborting `BlendImage` filter loading, see https://developer.mozilla.org/en-US/docs/Web/API/AbortController/signal
60
+ * @returns {Promise<Composed>}
61
+ */
62
+ static fromObject(
63
+ object: Record<string, any>,
64
+ options: { signal: AbortSignal }
65
+ ) {
66
+ return Promise.all(
67
+ ((object.subFilters || []) as BaseFilter[]).map((filter) =>
68
+ classRegistry.getClass(filter.type).fromObject(filter, options)
69
+ )
70
+ ).then(
71
+ (enlivedFilters) => new this({ subFilters: enlivedFilters }) as BaseFilter
72
+ );
73
+ }
74
+ }
75
+
76
+ classRegistry.setClass(Composed);
@@ -0,0 +1,82 @@
1
+ import type { TClassProperties } from '../typedefs';
2
+ import { BaseFilter } from './BaseFilter';
3
+ import type { T2DPipelineState, TWebGLUniformLocationMap } from './typedefs';
4
+ import { classRegistry } from '../ClassRegistry';
5
+ import { fragmentSource } from './shaders/constrast';
6
+ export const contrastDefaultValues: Partial<TClassProperties<Contrast>> = {
7
+ contrast: 0,
8
+ mainParameter: 'contrast',
9
+ };
10
+
11
+ /**
12
+ * Contrast filter class
13
+ * @example
14
+ * const filter = new Contrast({
15
+ * contrast: 0.25
16
+ * });
17
+ * object.filters.push(filter);
18
+ * object.applyFilters();
19
+ */
20
+ export class Contrast extends BaseFilter {
21
+ /**
22
+ * contrast value, range from -1 to 1.
23
+ * @param {Number} contrast
24
+ * @default 0
25
+ */
26
+ declare contrast: number;
27
+
28
+ static defaults = contrastDefaultValues;
29
+
30
+ getFragmentSource() {
31
+ return fragmentSource;
32
+ }
33
+ /**
34
+ * Apply the Contrast operation to a Uint8Array representing the pixels of an image.
35
+ *
36
+ * @param {Object} options
37
+ * @param {ImageData} options.imageData The Uint8Array to be filtered.
38
+ */
39
+ applyTo2d({ imageData: { data } }: T2DPipelineState) {
40
+ if (this.contrast === 0) {
41
+ return;
42
+ }
43
+ const contrast = Math.floor(this.contrast * 255),
44
+ contrastF = (259 * (contrast + 255)) / (255 * (259 - contrast));
45
+
46
+ for (let i = 0; i < data.length; i += 4) {
47
+ data[i] = contrastF * (data[i] - 128) + 128;
48
+ data[i + 1] = contrastF * (data[i + 1] - 128) + 128;
49
+ data[i + 2] = contrastF * (data[i + 2] - 128) + 128;
50
+ }
51
+ }
52
+
53
+ /**
54
+ * Return WebGL uniform locations for this filter's shader.
55
+ *
56
+ * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.
57
+ * @param {WebGLShaderProgram} program This filter's compiled shader program.
58
+ */
59
+ getUniformLocations(
60
+ gl: WebGLRenderingContext,
61
+ program: WebGLProgram
62
+ ): TWebGLUniformLocationMap {
63
+ return {
64
+ uContrast: gl.getUniformLocation(program, 'uContrast'),
65
+ };
66
+ }
67
+
68
+ /**
69
+ * Send data from this filter to its shader program's uniforms.
70
+ *
71
+ * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.
72
+ * @param {Object} uniformLocations A map of string uniform names to WebGLUniformLocation objects
73
+ */
74
+ sendUniformData(
75
+ gl: WebGLRenderingContext,
76
+ uniformLocations: TWebGLUniformLocationMap
77
+ ) {
78
+ gl.uniform1f(uniformLocations.uContrast, this.contrast);
79
+ }
80
+ }
81
+
82
+ classRegistry.setClass(Contrast);