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
@@ -1,64 +1,61 @@
1
- /**
2
- * @namespace fabric.Image.filters
3
- * @memberOf fabric.Image
4
- * @tutorial {@link http://fabricjs.com/fabric-intro-part-2#image_filters}
5
- * @see {@link http://fabricjs.com/image-filters|ImageFilters demo}
6
- */
7
- fabric.Image = fabric.Image || { };
8
- fabric.Image.filters = fabric.Image.filters || { };
9
-
10
- /**
11
- * Root filter class from which all filter classes inherit from
12
- * @class fabric.Image.filters.BaseFilter
13
- * @memberOf fabric.Image.filters
14
- */
15
- fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Image.filters.BaseFilter.prototype */ {
1
+ import { getEnv } from '../env';
2
+ import { createCanvasElement } from '../util/misc/dom';
3
+ import type {
4
+ T2DPipelineState,
5
+ TWebGLAttributeLocationMap,
6
+ TWebGLPipelineState,
7
+ TWebGLProgramCacheItem,
8
+ TWebGLUniformLocationMap,
9
+ } from './typedefs';
10
+ import { isWebGLPipelineState } from './typedefs';
11
+ import { GLPrecision } from './GLProbes/GLProbe';
12
+ import {
13
+ highPsourceCode,
14
+ identityFragmentShader,
15
+ vertexSource,
16
+ } from './shaders/baseFilter';
16
17
 
18
+ export class BaseFilter {
17
19
  /**
18
20
  * Filter type
19
21
  * @param {String} type
20
22
  * @default
21
23
  */
22
- type: 'BaseFilter',
24
+ get type(): string {
25
+ return this.constructor.name;
26
+ }
27
+
28
+ declare static defaults: Record<string, any>;
23
29
 
24
30
  /**
25
31
  * Array of attributes to send with buffers. do not modify
26
32
  * @private
27
33
  */
28
-
29
- vertexSource: 'attribute vec2 aPosition;\n' +
30
- 'varying vec2 vTexCoord;\n' +
31
- 'void main() {\n' +
32
- 'vTexCoord = aPosition;\n' +
33
- 'gl_Position = vec4(aPosition * 2.0 - 1.0, 0.0, 1.0);\n' +
34
- '}',
35
-
36
- fragmentSource: 'precision highp float;\n' +
37
- 'varying vec2 vTexCoord;\n' +
38
- 'uniform sampler2D uTexture;\n' +
39
- 'void main() {\n' +
40
- 'gl_FragColor = texture2D(uTexture, vTexCoord);\n' +
41
- '}',
34
+ vertexSource = vertexSource;
42
35
 
43
36
  /**
44
- * Constructor
45
- * @param {Object} [options] Options object
37
+ * Name of the parameter that can be changed in the filter.
38
+ * Some filters have more than one parameter and there is no
39
+ * mainParameter
40
+ * @private
46
41
  */
47
- initialize: function(options) {
48
- if (options) {
49
- this.setOptions(options);
50
- }
51
- },
42
+ declare mainParameter?: keyof this | undefined;
52
43
 
53
44
  /**
54
- * Sets filter's properties from options
45
+ * Constructor
55
46
  * @param {Object} [options] Options object
56
47
  */
57
- setOptions: function(options) {
58
- for (var prop in options) {
59
- this[prop] = options[prop];
60
- }
61
- },
48
+ constructor({ ...options }: Record<string, any> = {}) {
49
+ Object.assign(
50
+ this,
51
+ (this.constructor as typeof BaseFilter).defaults,
52
+ options
53
+ );
54
+ }
55
+
56
+ protected getFragmentSource(): string {
57
+ return identityFragmentShader;
58
+ }
62
59
 
63
60
  /**
64
61
  * Compile this filter's shader program.
@@ -67,59 +64,64 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag
67
64
  * @param {String} fragmentSource fragmentShader source for compilation
68
65
  * @param {String} vertexSource vertexShader source for compilation
69
66
  */
70
- createProgram: function(gl, fragmentSource, vertexSource) {
71
- fragmentSource = fragmentSource || this.fragmentSource;
72
- vertexSource = vertexSource || this.vertexSource;
73
- if (fabric.webGlPrecision !== 'highp'){
67
+ createProgram(
68
+ gl: WebGLRenderingContext,
69
+ fragmentSource: string = this.getFragmentSource(),
70
+ vertexSource: string = this.vertexSource
71
+ ) {
72
+ const { WebGLProbe } = getEnv();
73
+ if (WebGLProbe.GLPrecision && WebGLProbe.GLPrecision !== GLPrecision.high) {
74
74
  fragmentSource = fragmentSource.replace(
75
- /precision highp float/g,
76
- 'precision ' + fabric.webGlPrecision + ' float'
75
+ new RegExp(highPsourceCode, 'g'),
76
+ highPsourceCode.replace(GLPrecision.high, WebGLProbe.GLPrecision)
77
77
  );
78
78
  }
79
- var vertexShader = gl.createShader(gl.VERTEX_SHADER);
79
+ const vertexShader = gl.createShader(gl.VERTEX_SHADER);
80
+ const fragmentShader = gl.createShader(gl.FRAGMENT_SHADER);
81
+ const program = gl.createProgram();
82
+
83
+ if (!vertexShader || !fragmentShader || !program) {
84
+ throw new Error('Vertex, fragment shader or program creation error');
85
+ }
80
86
  gl.shaderSource(vertexShader, vertexSource);
81
87
  gl.compileShader(vertexShader);
82
88
  if (!gl.getShaderParameter(vertexShader, gl.COMPILE_STATUS)) {
83
89
  throw new Error(
84
- // eslint-disable-next-line prefer-template
85
- 'Vertex shader compile error for ' + this.type + ': ' +
86
- gl.getShaderInfoLog(vertexShader)
90
+ `Vertex shader compile error for ${this.type}: ${gl.getShaderInfoLog(
91
+ vertexShader
92
+ )}`
87
93
  );
88
94
  }
89
95
 
90
- var fragmentShader = gl.createShader(gl.FRAGMENT_SHADER);
91
96
  gl.shaderSource(fragmentShader, fragmentSource);
92
97
  gl.compileShader(fragmentShader);
93
98
  if (!gl.getShaderParameter(fragmentShader, gl.COMPILE_STATUS)) {
94
99
  throw new Error(
95
- // eslint-disable-next-line prefer-template
96
- 'Fragment shader compile error for ' + this.type + ': ' +
97
- gl.getShaderInfoLog(fragmentShader)
100
+ `Fragment shader compile error for ${this.type}: ${gl.getShaderInfoLog(
101
+ fragmentShader
102
+ )}`
98
103
  );
99
104
  }
100
105
 
101
- var program = gl.createProgram();
102
106
  gl.attachShader(program, vertexShader);
103
107
  gl.attachShader(program, fragmentShader);
104
108
  gl.linkProgram(program);
105
109
  if (!gl.getProgramParameter(program, gl.LINK_STATUS)) {
106
110
  throw new Error(
107
111
  // eslint-disable-next-line prefer-template
108
- 'Shader link error for "${this.type}" ' +
109
- gl.getProgramInfoLog(program)
112
+ 'Shader link error for "${this.type}" ' + gl.getProgramInfoLog(program)
110
113
  );
111
114
  }
112
115
 
113
- var attributeLocations = this.getAttributeLocations(gl, program);
114
- var uniformLocations = this.getUniformLocations(gl, program) || { };
116
+ const uniformLocations = this.getUniformLocations(gl, program) || {};
115
117
  uniformLocations.uStepW = gl.getUniformLocation(program, 'uStepW');
116
118
  uniformLocations.uStepH = gl.getUniformLocation(program, 'uStepH');
117
119
  return {
118
- program: program,
119
- attributeLocations: attributeLocations,
120
- uniformLocations: uniformLocations
120
+ program,
121
+ attributeLocations: this.getAttributeLocations(gl, program),
122
+ uniformLocations,
121
123
  };
122
- },
124
+ }
123
125
 
124
126
  /**
125
127
  * Return a map of attribute names to WebGLAttributeLocation objects.
@@ -128,11 +130,14 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag
128
130
  * @param {WebGLShaderProgram} program The shader program from which to take attribute locations.
129
131
  * @returns {Object} A map of attribute names to attribute locations.
130
132
  */
131
- getAttributeLocations: function(gl, program) {
133
+ getAttributeLocations(
134
+ gl: WebGLRenderingContext,
135
+ program: WebGLProgram
136
+ ): TWebGLAttributeLocationMap {
132
137
  return {
133
138
  aPosition: gl.getAttribLocation(program, 'aPosition'),
134
139
  };
135
- },
140
+ }
136
141
 
137
142
  /**
138
143
  * Return a map of uniform names to WebGLUniformLocation objects.
@@ -143,10 +148,12 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag
143
148
  * @param {WebGLShaderProgram} program The shader program from which to take uniform locations.
144
149
  * @returns {Object} A map of uniform names to uniform locations.
145
150
  */
146
- getUniformLocations: function (/* gl, program */) {
147
- // in case i do not need any special uniform i need to return an empty object
148
- return { };
149
- },
151
+ getUniformLocations(
152
+ gl: WebGLRenderingContext,
153
+ program: WebGLProgram
154
+ ): TWebGLUniformLocationMap {
155
+ return {};
156
+ }
150
157
 
151
158
  /**
152
159
  * Send attribute data from this filter to its shader program on the GPU.
@@ -154,41 +161,53 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag
154
161
  * @param {WebGLRenderingContext} gl The canvas context used to compile the shader program.
155
162
  * @param {Object} attributeLocations A map of shader attribute names to their locations.
156
163
  */
157
- sendAttributeData: function(gl, attributeLocations, aPositionData) {
158
- var attributeLocation = attributeLocations.aPosition;
159
- var buffer = gl.createBuffer();
164
+ sendAttributeData(
165
+ gl: WebGLRenderingContext,
166
+ attributeLocations: Record<string, number>,
167
+ aPositionData: Float32Array
168
+ ) {
169
+ const attributeLocation = attributeLocations.aPosition;
170
+ const buffer = gl.createBuffer();
160
171
  gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
161
172
  gl.enableVertexAttribArray(attributeLocation);
162
173
  gl.vertexAttribPointer(attributeLocation, 2, gl.FLOAT, false, 0, 0);
163
174
  gl.bufferData(gl.ARRAY_BUFFER, aPositionData, gl.STATIC_DRAW);
164
- },
175
+ }
165
176
 
166
- _setupFrameBuffer: function(options) {
167
- var gl = options.context, width, height;
177
+ _setupFrameBuffer(options: TWebGLPipelineState) {
178
+ const gl = options.context;
168
179
  if (options.passes > 1) {
169
- width = options.destinationWidth;
170
- height = options.destinationHeight;
180
+ const width = options.destinationWidth;
181
+ const height = options.destinationHeight;
171
182
  if (options.sourceWidth !== width || options.sourceHeight !== height) {
172
183
  gl.deleteTexture(options.targetTexture);
173
- options.targetTexture = options.filterBackend.createTexture(gl, width, height);
184
+ options.targetTexture = options.filterBackend.createTexture(
185
+ gl,
186
+ width,
187
+ height
188
+ );
174
189
  }
175
- gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D,
176
- options.targetTexture, 0);
177
- }
178
- else {
190
+ gl.framebufferTexture2D(
191
+ gl.FRAMEBUFFER,
192
+ gl.COLOR_ATTACHMENT0,
193
+ gl.TEXTURE_2D,
194
+ options.targetTexture,
195
+ 0
196
+ );
197
+ } else {
179
198
  // draw last filter on canvas and not to framebuffer.
180
199
  gl.bindFramebuffer(gl.FRAMEBUFFER, null);
181
200
  gl.finish();
182
201
  }
183
- },
202
+ }
184
203
 
185
- _swapTextures: function(options) {
204
+ _swapTextures(options: TWebGLPipelineState) {
186
205
  options.passes--;
187
206
  options.pass++;
188
- var temp = options.targetTexture;
207
+ const temp = options.targetTexture;
189
208
  options.targetTexture = options.sourceTexture;
190
209
  options.sourceTexture = temp;
191
- },
210
+ }
192
211
 
193
212
  /**
194
213
  * Generic isNeutral implementation for one parameter based filters.
@@ -197,26 +216,25 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag
197
216
  * Other filters may need their own version ( ColorMatrix, HueRotation, gamma, ComposedFilter )
198
217
  * @param {Object} options
199
218
  **/
200
- isNeutralState: function(/* options */) {
201
- var main = this.mainParameter,
202
- _class = fabric.Image.filters[this.type].prototype;
219
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
220
+ isNeutralState(options?: any): boolean {
221
+ const main = this.mainParameter,
222
+ defaultValue = (this.constructor as typeof BaseFilter).defaults[
223
+ main as string
224
+ ];
203
225
  if (main) {
204
- if (Array.isArray(_class[main])) {
205
- for (var i = _class[main].length; i--;) {
206
- if (this[main][i] !== _class[main][i]) {
207
- return false;
208
- }
209
- }
210
- return true;
211
- }
212
- else {
213
- return _class[main] === this[main];
226
+ const thisValue = this[main];
227
+ if (Array.isArray(defaultValue) && Array.isArray(thisValue)) {
228
+ return defaultValue.every(
229
+ (value: any, i: number) => value === thisValue[i]
230
+ );
231
+ } else {
232
+ return defaultValue === thisValue;
214
233
  }
215
- }
216
- else {
234
+ } else {
217
235
  return false;
218
236
  }
219
- },
237
+ }
220
238
 
221
239
  /**
222
240
  * Apply this filter to the input image data provided.
@@ -231,29 +249,43 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag
231
249
  * @param {WebGLRenderingContext} options.context The GL context used for rendering.
232
250
  * @param {Object} options.programCache A map of compiled shader programs, keyed by filter type.
233
251
  */
234
- applyTo: function(options) {
235
- if (options.webgl) {
252
+ applyTo(options: TWebGLPipelineState | T2DPipelineState) {
253
+ if (isWebGLPipelineState(options)) {
236
254
  this._setupFrameBuffer(options);
237
255
  this.applyToWebGL(options);
238
256
  this._swapTextures(options);
239
- }
240
- else {
257
+ } else {
241
258
  this.applyTo2d(options);
242
259
  }
243
- },
260
+ }
261
+
262
+ applyTo2d(options: T2DPipelineState): void {
263
+ // override by subclass
264
+ }
265
+
266
+ /**
267
+ * Returns a string that represent the current selected shader code for the filter.
268
+ * Used to force recompilation when parameters change or to retrieve the shader from cache
269
+ * @type string
270
+ **/
271
+ getCacheKey() {
272
+ return this.type;
273
+ }
244
274
 
245
275
  /**
246
276
  * Retrieves the cached shader.
247
277
  * @param {Object} options
248
278
  * @param {WebGLRenderingContext} options.context The GL context used for rendering.
249
279
  * @param {Object} options.programCache A map of compiled shader programs, keyed by filter type.
280
+ * @return {WebGLProgram} the compiled program shader
250
281
  */
251
- retrieveShader: function(options) {
252
- if (!options.programCache.hasOwnProperty(this.type)) {
253
- options.programCache[this.type] = this.createProgram(options.context);
282
+ retrieveShader(options: TWebGLPipelineState): TWebGLProgramCacheItem {
283
+ const key = this.getCacheKey();
284
+ if (!options.programCache[key]) {
285
+ options.programCache[key] = this.createProgram(options.context);
254
286
  }
255
- return options.programCache[this.type];
256
- },
287
+ return options.programCache[key];
288
+ }
257
289
 
258
290
  /**
259
291
  * Apply this filter using webgl.
@@ -267,13 +299,12 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag
267
299
  * @param {WebGLRenderingContext} options.context The GL context used for rendering.
268
300
  * @param {Object} options.programCache A map of compiled shader programs, keyed by filter type.
269
301
  */
270
- applyToWebGL: function(options) {
271
- var gl = options.context;
272
- var shader = this.retrieveShader(options);
302
+ applyToWebGL(options: TWebGLPipelineState) {
303
+ const gl = options.context;
304
+ const shader = this.retrieveShader(options);
273
305
  if (options.pass === 0 && options.originalTexture) {
274
306
  gl.bindTexture(gl.TEXTURE_2D, options.originalTexture);
275
- }
276
- else {
307
+ } else {
277
308
  gl.bindTexture(gl.TEXTURE_2D, options.sourceTexture);
278
309
  }
279
310
  gl.useProgram(shader.program);
@@ -285,28 +316,34 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag
285
316
  this.sendUniformData(gl, shader.uniformLocations);
286
317
  gl.viewport(0, 0, options.destinationWidth, options.destinationHeight);
287
318
  gl.drawArrays(gl.TRIANGLE_STRIP, 0, 4);
288
- },
319
+ }
289
320
 
290
- bindAdditionalTexture: function(gl, texture, textureUnit) {
321
+ bindAdditionalTexture(
322
+ gl: WebGLRenderingContext,
323
+ texture: WebGLTexture,
324
+ textureUnit: number
325
+ ) {
291
326
  gl.activeTexture(textureUnit);
292
327
  gl.bindTexture(gl.TEXTURE_2D, texture);
293
328
  // reset active texture to 0 as usual
294
329
  gl.activeTexture(gl.TEXTURE0);
295
- },
330
+ }
296
331
 
297
- unbindAdditionalTexture: function(gl, textureUnit) {
332
+ unbindAdditionalTexture(gl: WebGLRenderingContext, textureUnit: number) {
298
333
  gl.activeTexture(textureUnit);
299
334
  gl.bindTexture(gl.TEXTURE_2D, null);
300
335
  gl.activeTexture(gl.TEXTURE0);
301
- },
336
+ }
302
337
 
303
- getMainParameter: function() {
304
- return this[this.mainParameter];
305
- },
338
+ getMainParameter() {
339
+ return this.mainParameter ? this[this.mainParameter] : undefined;
340
+ }
306
341
 
307
- setMainParameter: function(value) {
308
- this[this.mainParameter] = value;
309
- },
342
+ setMainParameter(value: any) {
343
+ if (this.mainParameter) {
344
+ this[this.mainParameter] = value;
345
+ }
346
+ }
310
347
 
311
348
  /**
312
349
  * Send uniform data from this filter to its shader program on the GPU.
@@ -316,47 +353,51 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag
316
353
  * @param {WebGLRenderingContext} gl The canvas context used to compile the shader program.
317
354
  * @param {Object} uniformLocations A map of shader uniform names to their locations.
318
355
  */
319
- sendUniformData: function(/* gl, uniformLocations */) {
320
- // Intentionally left blank. Override me in subclasses.
321
- },
356
+ sendUniformData(
357
+ gl: WebGLRenderingContext,
358
+ uniformLocations: TWebGLUniformLocationMap
359
+ ): void {
360
+ // override by subclass
361
+ }
322
362
 
323
363
  /**
324
364
  * If needed by a 2d filter, this functions can create an helper canvas to be used
325
365
  * remember that options.targetCanvas is available for use till end of chain.
326
366
  */
327
- createHelpLayer: function(options) {
367
+ createHelpLayer(options: T2DPipelineState) {
328
368
  if (!options.helpLayer) {
329
- var helpLayer = document.createElement('canvas');
369
+ const helpLayer = createCanvasElement();
330
370
  helpLayer.width = options.sourceWidth;
331
371
  helpLayer.height = options.sourceHeight;
332
372
  options.helpLayer = helpLayer;
333
373
  }
334
- },
374
+ }
335
375
 
336
376
  /**
337
377
  * Returns object representation of an instance
338
378
  * @return {Object} Object representation of an instance
339
379
  */
340
- toObject: function() {
341
- var object = { type: this.type }, mainP = this.mainParameter;
342
- if (mainP) {
343
- object[mainP] = this[mainP];
344
- }
345
- return object;
346
- },
380
+ toObject() {
381
+ const mainP = this.mainParameter;
382
+ return {
383
+ type: this.type,
384
+ ...(mainP ? { [mainP]: this[mainP] } : {}),
385
+ };
386
+ }
347
387
 
348
388
  /**
349
389
  * Returns a JSON representation of an instance
350
390
  * @return {Object} JSON
351
391
  */
352
- toJSON: function() {
392
+ toJSON() {
353
393
  // delegate, not alias
354
394
  return this.toObject();
355
395
  }
356
- });
357
396
 
358
- fabric.Image.filters.BaseFilter.fromObject = function(object, callback) {
359
- var filter = new fabric.Image.filters[object.type](object);
360
- callback && callback(filter);
361
- return filter;
362
- };
397
+ static async fromObject(
398
+ { type, ...filterOptions }: Record<string, any>,
399
+ options: { signal: AbortSignal }
400
+ ) {
401
+ return new this(filterOptions);
402
+ }
403
+ }