fabric 6.2.0 → 6.3.0

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 (1161) hide show
  1. package/.prettierignore +1 -0
  2. package/CHANGELOG.md +12 -4
  3. package/README.md +1 -1
  4. package/dist/extensions/aligning_guidelines/constant.d.ts +3 -0
  5. package/dist/extensions/aligning_guidelines/constant.d.ts.map +1 -0
  6. package/dist/extensions/aligning_guidelines/index.d.ts +5 -0
  7. package/dist/extensions/aligning_guidelines/index.d.ts.map +1 -0
  8. package/dist/extensions/aligning_guidelines/typedefs.d.ts +33 -0
  9. package/dist/extensions/aligning_guidelines/typedefs.d.ts.map +1 -0
  10. package/dist/extensions/aligning_guidelines/util/basic.d.ts +4 -0
  11. package/dist/extensions/aligning_guidelines/util/basic.d.ts.map +1 -0
  12. package/dist/extensions/aligning_guidelines/util/collect-line.d.ts +13 -0
  13. package/dist/extensions/aligning_guidelines/util/collect-line.d.ts.map +1 -0
  14. package/dist/extensions/aligning_guidelines/util/collect-point.d.ts +20 -0
  15. package/dist/extensions/aligning_guidelines/util/collect-point.d.ts.map +1 -0
  16. package/dist/extensions/aligning_guidelines/util/draw.d.ts +6 -0
  17. package/dist/extensions/aligning_guidelines/util/draw.d.ts.map +1 -0
  18. package/dist/extensions/aligning_guidelines/util/get-objects-by-target.d.ts +3 -0
  19. package/dist/extensions/aligning_guidelines/util/get-objects-by-target.d.ts.map +1 -0
  20. package/dist/extensions/index.d.ts +2 -0
  21. package/dist/extensions/index.d.ts.map +1 -0
  22. package/dist/index.js +140 -108
  23. package/dist/index.js.map +1 -1
  24. package/dist/index.min.js +1 -1
  25. package/dist/index.min.js.map +1 -1
  26. package/dist/index.min.mjs +1 -1
  27. package/dist/index.min.mjs.map +1 -1
  28. package/dist/index.mjs +140 -108
  29. package/dist/index.mjs.map +1 -1
  30. package/dist/index.node.cjs +140 -108
  31. package/dist/index.node.cjs.map +1 -1
  32. package/dist/index.node.mjs +140 -108
  33. package/dist/index.node.mjs.map +1 -1
  34. package/dist/package.json.min.mjs +1 -1
  35. package/dist/package.json.mjs +1 -1
  36. package/dist/src/ClassRegistry.min.mjs.map +1 -1
  37. package/dist/src/ClassRegistry.mjs.map +1 -1
  38. package/dist/src/Collection.min.mjs.map +1 -1
  39. package/dist/src/Collection.mjs.map +1 -1
  40. package/dist/src/Intersection.min.mjs.map +1 -1
  41. package/dist/src/Intersection.mjs.map +1 -1
  42. package/dist/src/LayoutManager/ActiveSelectionLayoutManager.min.mjs.map +1 -1
  43. package/dist/src/LayoutManager/ActiveSelectionLayoutManager.mjs.map +1 -1
  44. package/dist/src/LayoutManager/LayoutManager.d.ts +1 -1
  45. package/dist/src/LayoutManager/LayoutManager.d.ts.map +1 -1
  46. package/dist/src/LayoutManager/LayoutManager.min.mjs.map +1 -1
  47. package/dist/src/LayoutManager/LayoutManager.mjs +1 -1
  48. package/dist/src/LayoutManager/LayoutManager.mjs.map +1 -1
  49. package/dist/src/LayoutManager/LayoutStrategies/ClipPathLayout.min.mjs.map +1 -1
  50. package/dist/src/LayoutManager/LayoutStrategies/ClipPathLayout.mjs.map +1 -1
  51. package/dist/src/LayoutManager/LayoutStrategies/FixedLayout.min.mjs.map +1 -1
  52. package/dist/src/LayoutManager/LayoutStrategies/FixedLayout.mjs.map +1 -1
  53. package/dist/src/LayoutManager/LayoutStrategies/LayoutStrategy.min.mjs.map +1 -1
  54. package/dist/src/LayoutManager/LayoutStrategies/LayoutStrategy.mjs.map +1 -1
  55. package/dist/src/LayoutManager/LayoutStrategies/utils.min.mjs.map +1 -1
  56. package/dist/src/LayoutManager/LayoutStrategies/utils.mjs.map +1 -1
  57. package/dist/src/LayoutManager/types.d.ts.map +1 -1
  58. package/dist/src/Observable.min.mjs.map +1 -1
  59. package/dist/src/Observable.mjs.map +1 -1
  60. package/dist/src/Pattern/Pattern.d.ts +2 -2
  61. package/dist/src/Pattern/Pattern.d.ts.map +1 -1
  62. package/dist/src/Pattern/Pattern.min.mjs +1 -1
  63. package/dist/src/Pattern/Pattern.min.mjs.map +1 -1
  64. package/dist/src/Pattern/Pattern.mjs +14 -12
  65. package/dist/src/Pattern/Pattern.mjs.map +1 -1
  66. package/dist/src/Point.min.mjs.map +1 -1
  67. package/dist/src/Point.mjs.map +1 -1
  68. package/dist/src/Shadow.min.mjs.map +1 -1
  69. package/dist/src/Shadow.mjs.map +1 -1
  70. package/dist/src/brushes/CircleBrush.min.mjs.map +1 -1
  71. package/dist/src/brushes/CircleBrush.mjs.map +1 -1
  72. package/dist/src/brushes/PatternBrush.min.mjs.map +1 -1
  73. package/dist/src/brushes/PatternBrush.mjs.map +1 -1
  74. package/dist/src/brushes/PencilBrush.min.mjs.map +1 -1
  75. package/dist/src/brushes/PencilBrush.mjs.map +1 -1
  76. package/dist/src/brushes/SprayBrush.min.mjs.map +1 -1
  77. package/dist/src/brushes/SprayBrush.mjs.map +1 -1
  78. package/dist/src/canvas/Canvas.d.ts +1 -1
  79. package/dist/src/canvas/Canvas.d.ts.map +1 -1
  80. package/dist/src/canvas/Canvas.min.mjs.map +1 -1
  81. package/dist/src/canvas/Canvas.mjs +2 -1
  82. package/dist/src/canvas/Canvas.mjs.map +1 -1
  83. package/dist/src/canvas/DOMManagers/CanvasDOMManager.min.mjs.map +1 -1
  84. package/dist/src/canvas/DOMManagers/CanvasDOMManager.mjs.map +1 -1
  85. package/dist/src/canvas/DOMManagers/StaticCanvasDOMManager.min.mjs.map +1 -1
  86. package/dist/src/canvas/DOMManagers/StaticCanvasDOMManager.mjs.map +1 -1
  87. package/dist/src/canvas/DOMManagers/util.min.mjs.map +1 -1
  88. package/dist/src/canvas/DOMManagers/util.mjs.map +1 -1
  89. package/dist/src/canvas/SelectableCanvas.min.mjs.map +1 -1
  90. package/dist/src/canvas/SelectableCanvas.mjs.map +1 -1
  91. package/dist/src/canvas/StaticCanvas.d.ts +1 -1
  92. package/dist/src/canvas/StaticCanvas.d.ts.map +1 -1
  93. package/dist/src/canvas/StaticCanvas.min.mjs.map +1 -1
  94. package/dist/src/canvas/StaticCanvas.mjs +1 -1
  95. package/dist/src/canvas/StaticCanvas.mjs.map +1 -1
  96. package/dist/src/canvas/StaticCanvasOptions.d.ts.map +1 -1
  97. package/dist/src/canvas/StaticCanvasOptions.min.mjs.map +1 -1
  98. package/dist/src/canvas/StaticCanvasOptions.mjs.map +1 -1
  99. package/dist/src/canvas/TextEditingManager.min.mjs.map +1 -1
  100. package/dist/src/canvas/TextEditingManager.mjs.map +1 -1
  101. package/dist/src/color/Color.d.ts.map +1 -1
  102. package/dist/src/color/Color.min.mjs.map +1 -1
  103. package/dist/src/color/Color.mjs +1 -0
  104. package/dist/src/color/Color.mjs.map +1 -1
  105. package/dist/src/color/util.min.mjs.map +1 -1
  106. package/dist/src/color/util.mjs.map +1 -1
  107. package/dist/src/config.min.mjs.map +1 -1
  108. package/dist/src/config.mjs.map +1 -1
  109. package/dist/src/controls/Control.min.mjs.map +1 -1
  110. package/dist/src/controls/Control.mjs.map +1 -1
  111. package/dist/src/controls/changeWidth.min.mjs.map +1 -1
  112. package/dist/src/controls/changeWidth.mjs.map +1 -1
  113. package/dist/src/controls/controlRendering.min.mjs.map +1 -1
  114. package/dist/src/controls/controlRendering.mjs.map +1 -1
  115. package/dist/src/controls/drag.min.mjs.map +1 -1
  116. package/dist/src/controls/drag.mjs.map +1 -1
  117. package/dist/src/controls/fireEvent.min.mjs.map +1 -1
  118. package/dist/src/controls/fireEvent.mjs.map +1 -1
  119. package/dist/src/controls/pathControl.min.mjs.map +1 -1
  120. package/dist/src/controls/pathControl.mjs.map +1 -1
  121. package/dist/src/controls/polyControl.min.mjs.map +1 -1
  122. package/dist/src/controls/polyControl.mjs.map +1 -1
  123. package/dist/src/controls/rotate.min.mjs.map +1 -1
  124. package/dist/src/controls/rotate.mjs.map +1 -1
  125. package/dist/src/controls/scale.min.mjs.map +1 -1
  126. package/dist/src/controls/scale.mjs.map +1 -1
  127. package/dist/src/controls/scaleSkew.min.mjs.map +1 -1
  128. package/dist/src/controls/scaleSkew.mjs.map +1 -1
  129. package/dist/src/controls/skew.min.mjs.map +1 -1
  130. package/dist/src/controls/skew.mjs.map +1 -1
  131. package/dist/src/controls/util.min.mjs.map +1 -1
  132. package/dist/src/controls/util.mjs.map +1 -1
  133. package/dist/src/controls/wrapWithFireEvent.min.mjs.map +1 -1
  134. package/dist/src/controls/wrapWithFireEvent.mjs.map +1 -1
  135. package/dist/src/controls/wrapWithFixedAnchor.min.mjs.map +1 -1
  136. package/dist/src/controls/wrapWithFixedAnchor.mjs.map +1 -1
  137. package/dist/src/filters/BaseFilter.d.ts +5 -5
  138. package/dist/src/filters/BaseFilter.d.ts.map +1 -1
  139. package/dist/src/filters/BaseFilter.min.mjs.map +1 -1
  140. package/dist/src/filters/BaseFilter.mjs +5 -5
  141. package/dist/src/filters/BaseFilter.mjs.map +1 -1
  142. package/dist/src/filters/BlendColor.min.mjs.map +1 -1
  143. package/dist/src/filters/BlendColor.mjs.map +1 -1
  144. package/dist/src/filters/BlendImage.min.mjs.map +1 -1
  145. package/dist/src/filters/BlendImage.mjs.map +1 -1
  146. package/dist/src/filters/Blur.min.mjs.map +1 -1
  147. package/dist/src/filters/Blur.mjs.map +1 -1
  148. package/dist/src/filters/Brightness.min.mjs.map +1 -1
  149. package/dist/src/filters/Brightness.mjs.map +1 -1
  150. package/dist/src/filters/Canvas2dFilterBackend.min.mjs.map +1 -1
  151. package/dist/src/filters/Canvas2dFilterBackend.mjs.map +1 -1
  152. package/dist/src/filters/ColorMatrix.min.mjs.map +1 -1
  153. package/dist/src/filters/ColorMatrix.mjs.map +1 -1
  154. package/dist/src/filters/ColorMatrixFilters.min.mjs.map +1 -1
  155. package/dist/src/filters/ColorMatrixFilters.mjs.map +1 -1
  156. package/dist/src/filters/Composed.min.mjs.map +1 -1
  157. package/dist/src/filters/Composed.mjs.map +1 -1
  158. package/dist/src/filters/Contrast.min.mjs.map +1 -1
  159. package/dist/src/filters/Contrast.mjs.map +1 -1
  160. package/dist/src/filters/Convolute.min.mjs.map +1 -1
  161. package/dist/src/filters/Convolute.mjs.map +1 -1
  162. package/dist/src/filters/GLProbes/WebGLProbe.min.mjs.map +1 -1
  163. package/dist/src/filters/GLProbes/WebGLProbe.mjs.map +1 -1
  164. package/dist/src/filters/Gamma.min.mjs.map +1 -1
  165. package/dist/src/filters/Gamma.mjs.map +1 -1
  166. package/dist/src/filters/Grayscale.min.mjs.map +1 -1
  167. package/dist/src/filters/Grayscale.mjs.map +1 -1
  168. package/dist/src/filters/Invert.min.mjs.map +1 -1
  169. package/dist/src/filters/Invert.mjs.map +1 -1
  170. package/dist/src/filters/Noise.min.mjs.map +1 -1
  171. package/dist/src/filters/Noise.mjs.map +1 -1
  172. package/dist/src/filters/Pixelate.min.mjs.map +1 -1
  173. package/dist/src/filters/Pixelate.mjs.map +1 -1
  174. package/dist/src/filters/RemoveColor.min.mjs.map +1 -1
  175. package/dist/src/filters/RemoveColor.mjs.map +1 -1
  176. package/dist/src/filters/Resize.min.mjs.map +1 -1
  177. package/dist/src/filters/Resize.mjs.map +1 -1
  178. package/dist/src/filters/Saturation.min.mjs.map +1 -1
  179. package/dist/src/filters/Saturation.mjs.map +1 -1
  180. package/dist/src/filters/Vibrance.min.mjs.map +1 -1
  181. package/dist/src/filters/Vibrance.mjs.map +1 -1
  182. package/dist/src/filters/WebGLFilterBackend.min.mjs.map +1 -1
  183. package/dist/src/filters/WebGLFilterBackend.mjs.map +1 -1
  184. package/dist/src/filters/typedefs.d.ts +0 -1
  185. package/dist/src/filters/typedefs.d.ts.map +1 -1
  186. package/dist/src/filters/utils.min.mjs.map +1 -1
  187. package/dist/src/filters/utils.mjs.map +1 -1
  188. package/dist/src/gradient/Gradient.d.ts +7 -3
  189. package/dist/src/gradient/Gradient.d.ts.map +1 -1
  190. package/dist/src/gradient/Gradient.min.mjs +1 -1
  191. package/dist/src/gradient/Gradient.min.mjs.map +1 -1
  192. package/dist/src/gradient/Gradient.mjs +36 -24
  193. package/dist/src/gradient/Gradient.mjs.map +1 -1
  194. package/dist/src/gradient/parser/parseColorStops.min.mjs.map +1 -1
  195. package/dist/src/gradient/parser/parseColorStops.mjs.map +1 -1
  196. package/dist/src/gradient/parser/parseCoords.d.ts.map +1 -1
  197. package/dist/src/gradient/parser/parseCoords.min.mjs.map +1 -1
  198. package/dist/src/gradient/parser/parseCoords.mjs.map +1 -1
  199. package/dist/src/parser/applyViewboxTransform.min.mjs.map +1 -1
  200. package/dist/src/parser/applyViewboxTransform.mjs.map +1 -1
  201. package/dist/src/parser/constants.min.mjs.map +1 -1
  202. package/dist/src/parser/constants.mjs.map +1 -1
  203. package/dist/src/parser/elements_parser.min.mjs.map +1 -1
  204. package/dist/src/parser/elements_parser.mjs.map +1 -1
  205. package/dist/src/parser/getCSSRules.min.mjs.map +1 -1
  206. package/dist/src/parser/getCSSRules.mjs.map +1 -1
  207. package/dist/src/parser/getGlobalStylesForElement.min.mjs.map +1 -1
  208. package/dist/src/parser/getGlobalStylesForElement.mjs.map +1 -1
  209. package/dist/src/parser/getGradientDefs.min.mjs.map +1 -1
  210. package/dist/src/parser/getGradientDefs.mjs.map +1 -1
  211. package/dist/src/parser/getMultipleNodes.min.mjs.map +1 -1
  212. package/dist/src/parser/getMultipleNodes.mjs.map +1 -1
  213. package/dist/src/parser/loadSVGFromString.min.mjs.map +1 -1
  214. package/dist/src/parser/loadSVGFromString.mjs.map +1 -1
  215. package/dist/src/parser/loadSVGFromURL.min.mjs.map +1 -1
  216. package/dist/src/parser/loadSVGFromURL.mjs.map +1 -1
  217. package/dist/src/parser/normalizeAttr.min.mjs.map +1 -1
  218. package/dist/src/parser/normalizeAttr.mjs.map +1 -1
  219. package/dist/src/parser/normalizeValue.min.mjs.map +1 -1
  220. package/dist/src/parser/normalizeValue.mjs.map +1 -1
  221. package/dist/src/parser/parseAttributes.min.mjs.map +1 -1
  222. package/dist/src/parser/parseAttributes.mjs.map +1 -1
  223. package/dist/src/parser/parseFontDeclaration.min.mjs.map +1 -1
  224. package/dist/src/parser/parseFontDeclaration.mjs.map +1 -1
  225. package/dist/src/parser/parseSVGDocument.min.mjs.map +1 -1
  226. package/dist/src/parser/parseSVGDocument.mjs.map +1 -1
  227. package/dist/src/parser/parseStyleObject.min.mjs.map +1 -1
  228. package/dist/src/parser/parseStyleObject.mjs.map +1 -1
  229. package/dist/src/parser/parseStyleString.min.mjs.map +1 -1
  230. package/dist/src/parser/parseStyleString.mjs.map +1 -1
  231. package/dist/src/parser/parseTransformAttribute.min.mjs.map +1 -1
  232. package/dist/src/parser/parseTransformAttribute.mjs.map +1 -1
  233. package/dist/src/parser/parseUseDirectives.min.mjs.map +1 -1
  234. package/dist/src/parser/parseUseDirectives.mjs.map +1 -1
  235. package/dist/src/parser/percent.min.mjs.map +1 -1
  236. package/dist/src/parser/percent.mjs.map +1 -1
  237. package/dist/src/parser/recursivelyParseGradientsXlink.min.mjs.map +1 -1
  238. package/dist/src/parser/recursivelyParseGradientsXlink.mjs.map +1 -1
  239. package/dist/src/parser/setStrokeFillOpacity.min.mjs.map +1 -1
  240. package/dist/src/parser/setStrokeFillOpacity.mjs.map +1 -1
  241. package/dist/src/shapes/ActiveSelection.min.mjs.map +1 -1
  242. package/dist/src/shapes/ActiveSelection.mjs.map +1 -1
  243. package/dist/src/shapes/Circle.min.mjs.map +1 -1
  244. package/dist/src/shapes/Circle.mjs.map +1 -1
  245. package/dist/src/shapes/Ellipse.min.mjs.map +1 -1
  246. package/dist/src/shapes/Ellipse.mjs.map +1 -1
  247. package/dist/src/shapes/Group.d.ts +2 -2
  248. package/dist/src/shapes/Group.d.ts.map +1 -1
  249. package/dist/src/shapes/Group.min.mjs.map +1 -1
  250. package/dist/src/shapes/Group.mjs.map +1 -1
  251. package/dist/src/shapes/IText/DraggableTextDelegate.d.ts.map +1 -1
  252. package/dist/src/shapes/IText/DraggableTextDelegate.min.mjs +1 -1
  253. package/dist/src/shapes/IText/DraggableTextDelegate.min.mjs.map +1 -1
  254. package/dist/src/shapes/IText/DraggableTextDelegate.mjs +2 -2
  255. package/dist/src/shapes/IText/DraggableTextDelegate.mjs.map +1 -1
  256. package/dist/src/shapes/IText/IText.min.mjs.map +1 -1
  257. package/dist/src/shapes/IText/IText.mjs.map +1 -1
  258. package/dist/src/shapes/IText/ITextBehavior.min.mjs.map +1 -1
  259. package/dist/src/shapes/IText/ITextBehavior.mjs.map +1 -1
  260. package/dist/src/shapes/IText/ITextClickBehavior.min.mjs.map +1 -1
  261. package/dist/src/shapes/IText/ITextClickBehavior.mjs.map +1 -1
  262. package/dist/src/shapes/IText/ITextKeyBehavior.min.mjs.map +1 -1
  263. package/dist/src/shapes/IText/ITextKeyBehavior.mjs.map +1 -1
  264. package/dist/src/shapes/Image.min.mjs.map +1 -1
  265. package/dist/src/shapes/Image.mjs.map +1 -1
  266. package/dist/src/shapes/Line.min.mjs.map +1 -1
  267. package/dist/src/shapes/Line.mjs.map +1 -1
  268. package/dist/src/shapes/Object/AnimatableObject.d.ts.map +1 -1
  269. package/dist/src/shapes/Object/AnimatableObject.min.mjs.map +1 -1
  270. package/dist/src/shapes/Object/AnimatableObject.mjs.map +1 -1
  271. package/dist/src/shapes/Object/FabricObject.d.ts.map +1 -1
  272. package/dist/src/shapes/Object/FabricObject.min.mjs.map +1 -1
  273. package/dist/src/shapes/Object/FabricObject.mjs +2 -1
  274. package/dist/src/shapes/Object/FabricObject.mjs.map +1 -1
  275. package/dist/src/shapes/Object/FabricObjectSVGExportMixin.d.ts +1 -1
  276. package/dist/src/shapes/Object/FabricObjectSVGExportMixin.d.ts.map +1 -1
  277. package/dist/src/shapes/Object/FabricObjectSVGExportMixin.min.mjs.map +1 -1
  278. package/dist/src/shapes/Object/FabricObjectSVGExportMixin.mjs +1 -1
  279. package/dist/src/shapes/Object/FabricObjectSVGExportMixin.mjs.map +1 -1
  280. package/dist/src/shapes/Object/InteractiveObject.d.ts +13 -13
  281. package/dist/src/shapes/Object/InteractiveObject.d.ts.map +1 -1
  282. package/dist/src/shapes/Object/InteractiveObject.min.mjs.map +1 -1
  283. package/dist/src/shapes/Object/InteractiveObject.mjs +13 -13
  284. package/dist/src/shapes/Object/InteractiveObject.mjs.map +1 -1
  285. package/dist/src/shapes/Object/Object.d.ts +4 -4
  286. package/dist/src/shapes/Object/Object.d.ts.map +1 -1
  287. package/dist/src/shapes/Object/Object.min.mjs +1 -1
  288. package/dist/src/shapes/Object/Object.min.mjs.map +1 -1
  289. package/dist/src/shapes/Object/Object.mjs +10 -14
  290. package/dist/src/shapes/Object/Object.mjs.map +1 -1
  291. package/dist/src/shapes/Object/ObjectGeometry.d.ts +1 -1
  292. package/dist/src/shapes/Object/ObjectGeometry.min.mjs.map +1 -1
  293. package/dist/src/shapes/Object/ObjectGeometry.mjs +1 -1
  294. package/dist/src/shapes/Object/ObjectGeometry.mjs.map +1 -1
  295. package/dist/src/shapes/Object/ObjectOrigin.min.mjs.map +1 -1
  296. package/dist/src/shapes/Object/ObjectOrigin.mjs.map +1 -1
  297. package/dist/src/shapes/Object/StackedObject.d.ts.map +1 -1
  298. package/dist/src/shapes/Object/StackedObject.min.mjs.map +1 -1
  299. package/dist/src/shapes/Object/StackedObject.mjs.map +1 -1
  300. package/dist/src/shapes/Path.min.mjs.map +1 -1
  301. package/dist/src/shapes/Path.mjs.map +1 -1
  302. package/dist/src/shapes/Polyline.d.ts.map +1 -1
  303. package/dist/src/shapes/Polyline.min.mjs +1 -1
  304. package/dist/src/shapes/Polyline.min.mjs.map +1 -1
  305. package/dist/src/shapes/Polyline.mjs +10 -2
  306. package/dist/src/shapes/Polyline.mjs.map +1 -1
  307. package/dist/src/shapes/Rect.min.mjs.map +1 -1
  308. package/dist/src/shapes/Rect.mjs.map +1 -1
  309. package/dist/src/shapes/Text/StyledText.min.mjs.map +1 -1
  310. package/dist/src/shapes/Text/StyledText.mjs.map +1 -1
  311. package/dist/src/shapes/Text/Text.min.mjs.map +1 -1
  312. package/dist/src/shapes/Text/Text.mjs +1 -1
  313. package/dist/src/shapes/Text/Text.mjs.map +1 -1
  314. package/dist/src/shapes/Text/TextSVGExportMixin.min.mjs.map +1 -1
  315. package/dist/src/shapes/Text/TextSVGExportMixin.mjs.map +1 -1
  316. package/dist/src/shapes/Textbox.min.mjs.map +1 -1
  317. package/dist/src/shapes/Textbox.mjs.map +1 -1
  318. package/dist/src/shapes/Triangle.min.mjs.map +1 -1
  319. package/dist/src/shapes/Triangle.mjs.map +1 -1
  320. package/dist/src/util/animation/AnimationBase.min.mjs.map +1 -1
  321. package/dist/src/util/animation/AnimationBase.mjs.map +1 -1
  322. package/dist/src/util/animation/AnimationRegistry.min.mjs.map +1 -1
  323. package/dist/src/util/animation/AnimationRegistry.mjs.map +1 -1
  324. package/dist/src/util/animation/ArrayAnimation.min.mjs.map +1 -1
  325. package/dist/src/util/animation/ArrayAnimation.mjs.map +1 -1
  326. package/dist/src/util/animation/ColorAnimation.min.mjs.map +1 -1
  327. package/dist/src/util/animation/ColorAnimation.mjs.map +1 -1
  328. package/dist/src/util/animation/ValueAnimation.min.mjs.map +1 -1
  329. package/dist/src/util/animation/ValueAnimation.mjs.map +1 -1
  330. package/dist/src/util/animation/animate.d.ts.map +1 -1
  331. package/dist/src/util/animation/animate.min.mjs.map +1 -1
  332. package/dist/src/util/animation/animate.mjs.map +1 -1
  333. package/dist/src/util/animation/easing.min.mjs.map +1 -1
  334. package/dist/src/util/animation/easing.mjs.map +1 -1
  335. package/dist/src/util/animation/types.d.ts.map +1 -1
  336. package/dist/src/util/applyMixins.min.mjs.map +1 -1
  337. package/dist/src/util/applyMixins.mjs.map +1 -1
  338. package/dist/src/util/dom_style.min.mjs.map +1 -1
  339. package/dist/src/util/dom_style.mjs.map +1 -1
  340. package/dist/src/util/internals/cloneDeep.d.ts +6 -0
  341. package/dist/src/util/internals/cloneDeep.d.ts.map +1 -1
  342. package/dist/src/util/internals/cloneStyles.d.ts +3 -0
  343. package/dist/src/util/internals/cloneStyles.d.ts.map +1 -0
  344. package/dist/src/util/internals/cloneStyles.min.mjs +2 -0
  345. package/dist/src/util/internals/cloneStyles.min.mjs.map +1 -0
  346. package/dist/src/util/internals/cloneStyles.mjs +15 -0
  347. package/dist/src/util/internals/cloneStyles.mjs.map +1 -0
  348. package/dist/src/util/internals/findRight.min.mjs.map +1 -1
  349. package/dist/src/util/internals/findRight.mjs.map +1 -1
  350. package/dist/src/util/misc/boundingBoxFromPoints.min.mjs.map +1 -1
  351. package/dist/src/util/misc/boundingBoxFromPoints.mjs.map +1 -1
  352. package/dist/src/util/misc/dom.min.mjs.map +1 -1
  353. package/dist/src/util/misc/dom.mjs.map +1 -1
  354. package/dist/src/util/misc/findScaleTo.min.mjs.map +1 -1
  355. package/dist/src/util/misc/findScaleTo.mjs.map +1 -1
  356. package/dist/src/util/misc/groupSVGElements.min.mjs.map +1 -1
  357. package/dist/src/util/misc/groupSVGElements.mjs.map +1 -1
  358. package/dist/src/util/misc/isTransparent.min.mjs.map +1 -1
  359. package/dist/src/util/misc/isTransparent.mjs.map +1 -1
  360. package/dist/src/util/misc/matrix.min.mjs.map +1 -1
  361. package/dist/src/util/misc/matrix.mjs.map +1 -1
  362. package/dist/src/util/misc/objectEnlive.min.mjs.map +1 -1
  363. package/dist/src/util/misc/objectEnlive.mjs.map +1 -1
  364. package/dist/src/util/misc/objectTransforms.min.mjs.map +1 -1
  365. package/dist/src/util/misc/objectTransforms.mjs.map +1 -1
  366. package/dist/src/util/misc/pick.min.mjs.map +1 -1
  367. package/dist/src/util/misc/pick.mjs.map +1 -1
  368. package/dist/src/util/misc/planeChange.min.mjs.map +1 -1
  369. package/dist/src/util/misc/planeChange.mjs.map +1 -1
  370. package/dist/src/util/misc/projectStroke/StrokeLineCapProjections.min.mjs.map +1 -1
  371. package/dist/src/util/misc/projectStroke/StrokeLineCapProjections.mjs.map +1 -1
  372. package/dist/src/util/misc/projectStroke/StrokeLineJoinProjections.min.mjs.map +1 -1
  373. package/dist/src/util/misc/projectStroke/StrokeLineJoinProjections.mjs.map +1 -1
  374. package/dist/src/util/misc/projectStroke/StrokeProjectionsBase.min.mjs.map +1 -1
  375. package/dist/src/util/misc/projectStroke/StrokeProjectionsBase.mjs.map +1 -1
  376. package/dist/src/util/misc/projectStroke/index.min.mjs.map +1 -1
  377. package/dist/src/util/misc/projectStroke/index.mjs.map +1 -1
  378. package/dist/src/util/misc/resolveOrigin.min.mjs.map +1 -1
  379. package/dist/src/util/misc/resolveOrigin.mjs.map +1 -1
  380. package/dist/src/util/misc/rotatePoint.min.mjs.map +1 -1
  381. package/dist/src/util/misc/rotatePoint.mjs.map +1 -1
  382. package/dist/src/util/misc/svgParsing.min.mjs.map +1 -1
  383. package/dist/src/util/misc/svgParsing.mjs.map +1 -1
  384. package/dist/src/util/misc/textStyles.min.mjs +1 -1
  385. package/dist/src/util/misc/textStyles.min.mjs.map +1 -1
  386. package/dist/src/util/misc/textStyles.mjs +3 -3
  387. package/dist/src/util/misc/textStyles.mjs.map +1 -1
  388. package/dist/src/util/misc/vectors.min.mjs.map +1 -1
  389. package/dist/src/util/misc/vectors.mjs.map +1 -1
  390. package/dist/src/util/path/index.min.mjs.map +1 -1
  391. package/dist/src/util/path/index.mjs.map +1 -1
  392. package/dist/src/util/path/typedefs.d.ts.map +1 -1
  393. package/dist/src/util/transform_matrix_removal.min.mjs.map +1 -1
  394. package/dist/src/util/transform_matrix_removal.mjs.map +1 -1
  395. package/dist/src/util/typeAssertions.min.mjs.map +1 -1
  396. package/dist/src/util/typeAssertions.mjs.map +1 -1
  397. package/dist-extensions/aligning_guidelines/constant.mjs +11 -0
  398. package/dist-extensions/aligning_guidelines/constant.mjs.map +1 -0
  399. package/dist-extensions/aligning_guidelines/index.mjs +130 -0
  400. package/dist-extensions/aligning_guidelines/index.mjs.map +1 -0
  401. package/dist-extensions/aligning_guidelines/util/basic.mjs +11 -0
  402. package/dist-extensions/aligning_guidelines/util/basic.mjs.map +1 -0
  403. package/dist-extensions/aligning_guidelines/util/collect-line.mjs +193 -0
  404. package/dist-extensions/aligning_guidelines/util/collect-line.mjs.map +1 -0
  405. package/dist-extensions/aligning_guidelines/util/collect-point.mjs +102 -0
  406. package/dist-extensions/aligning_guidelines/util/collect-point.mjs.map +1 -0
  407. package/dist-extensions/aligning_guidelines/util/draw.mjs +75 -0
  408. package/dist-extensions/aligning_guidelines/util/draw.mjs.map +1 -0
  409. package/dist-extensions/aligning_guidelines/util/get-objects-by-target.mjs +42 -0
  410. package/dist-extensions/aligning_guidelines/util/get-objects-by-target.mjs.map +1 -0
  411. package/dist-extensions/extensions/aligning_guidelines/constant.d.ts +3 -0
  412. package/dist-extensions/extensions/aligning_guidelines/constant.d.ts.map +1 -0
  413. package/dist-extensions/extensions/aligning_guidelines/index.d.ts +5 -0
  414. package/dist-extensions/extensions/aligning_guidelines/index.d.ts.map +1 -0
  415. package/dist-extensions/extensions/aligning_guidelines/typedefs.d.ts +33 -0
  416. package/dist-extensions/extensions/aligning_guidelines/typedefs.d.ts.map +1 -0
  417. package/dist-extensions/extensions/aligning_guidelines/util/basic.d.ts +4 -0
  418. package/dist-extensions/extensions/aligning_guidelines/util/basic.d.ts.map +1 -0
  419. package/dist-extensions/extensions/aligning_guidelines/util/collect-line.d.ts +13 -0
  420. package/dist-extensions/extensions/aligning_guidelines/util/collect-line.d.ts.map +1 -0
  421. package/dist-extensions/extensions/aligning_guidelines/util/collect-point.d.ts +20 -0
  422. package/dist-extensions/extensions/aligning_guidelines/util/collect-point.d.ts.map +1 -0
  423. package/dist-extensions/extensions/aligning_guidelines/util/draw.d.ts +6 -0
  424. package/dist-extensions/extensions/aligning_guidelines/util/draw.d.ts.map +1 -0
  425. package/dist-extensions/extensions/aligning_guidelines/util/get-objects-by-target.d.ts +3 -0
  426. package/dist-extensions/extensions/aligning_guidelines/util/get-objects-by-target.d.ts.map +1 -0
  427. package/dist-extensions/extensions/index.d.ts +2 -0
  428. package/dist-extensions/extensions/index.d.ts.map +1 -0
  429. package/dist-extensions/fabric-extensions.min.js +2 -0
  430. package/dist-extensions/fabric-extensions.min.js.map +1 -0
  431. package/dist-extensions/fabric.d.ts +119 -0
  432. package/dist-extensions/fabric.d.ts.map +1 -0
  433. package/dist-extensions/index.d.ts +2 -0
  434. package/dist-extensions/index.d.ts.map +1 -0
  435. package/dist-extensions/index.mjs +2 -0
  436. package/dist-extensions/index.mjs.map +1 -0
  437. package/dist-extensions/src/ClassRegistry.d.ts +14 -0
  438. package/dist-extensions/src/ClassRegistry.d.ts.map +1 -0
  439. package/dist-extensions/src/Collection.d.ts +141 -0
  440. package/dist-extensions/src/Collection.d.ts.map +1 -0
  441. package/dist-extensions/src/CommonMethods.d.ts +32 -0
  442. package/dist-extensions/src/CommonMethods.d.ts.map +1 -0
  443. package/dist-extensions/src/EventTypeDefs.d.ts +286 -0
  444. package/dist-extensions/src/EventTypeDefs.d.ts.map +1 -0
  445. package/dist-extensions/src/Intersection.d.ts +120 -0
  446. package/dist-extensions/src/Intersection.d.ts.map +1 -0
  447. package/dist-extensions/src/LayoutManager/ActiveSelectionLayoutManager.d.ts +22 -0
  448. package/dist-extensions/src/LayoutManager/ActiveSelectionLayoutManager.d.ts.map +1 -0
  449. package/dist-extensions/src/LayoutManager/LayoutManager.d.ts +56 -0
  450. package/dist-extensions/src/LayoutManager/LayoutManager.d.ts.map +1 -0
  451. package/dist-extensions/src/LayoutManager/LayoutStrategies/ClipPathLayout.d.ts +13 -0
  452. package/dist-extensions/src/LayoutManager/LayoutStrategies/ClipPathLayout.d.ts.map +1 -0
  453. package/dist-extensions/src/LayoutManager/LayoutStrategies/FitContentLayout.d.ts +14 -0
  454. package/dist-extensions/src/LayoutManager/LayoutStrategies/FitContentLayout.d.ts.map +1 -0
  455. package/dist-extensions/src/LayoutManager/LayoutStrategies/FixedLayout.d.ts +14 -0
  456. package/dist-extensions/src/LayoutManager/LayoutStrategies/FixedLayout.d.ts.map +1 -0
  457. package/dist-extensions/src/LayoutManager/LayoutStrategies/LayoutStrategy.d.ts +30 -0
  458. package/dist-extensions/src/LayoutManager/LayoutStrategies/LayoutStrategy.d.ts.map +1 -0
  459. package/dist-extensions/src/LayoutManager/LayoutStrategies/utils.d.ts +10 -0
  460. package/dist-extensions/src/LayoutManager/LayoutStrategies/utils.d.ts.map +1 -0
  461. package/dist-extensions/src/LayoutManager/constants.d.ts +7 -0
  462. package/dist-extensions/src/LayoutManager/constants.d.ts.map +1 -0
  463. package/dist-extensions/src/LayoutManager/index.d.ts +7 -0
  464. package/dist-extensions/src/LayoutManager/index.d.ts.map +1 -0
  465. package/dist-extensions/src/LayoutManager/types.d.ts +106 -0
  466. package/dist-extensions/src/LayoutManager/types.d.ts.map +1 -0
  467. package/dist-extensions/src/Observable.d.ts +68 -0
  468. package/dist-extensions/src/Observable.d.ts.map +1 -0
  469. package/dist-extensions/src/Pattern/Pattern.d.ts +99 -0
  470. package/dist-extensions/src/Pattern/Pattern.d.ts.map +1 -0
  471. package/dist-extensions/src/Pattern/index.d.ts +3 -0
  472. package/dist-extensions/src/Pattern/index.d.ts.map +1 -0
  473. package/dist-extensions/src/Pattern/types.d.ts +12 -0
  474. package/dist-extensions/src/Pattern/types.d.ts.map +1 -0
  475. package/dist-extensions/src/Point.d.ts +233 -0
  476. package/dist-extensions/src/Point.d.ts.map +1 -0
  477. package/dist-extensions/src/Shadow.d.ts +95 -0
  478. package/dist-extensions/src/Shadow.d.ts.map +1 -0
  479. package/dist-extensions/src/brushes/BaseBrush.d.ts +101 -0
  480. package/dist-extensions/src/brushes/BaseBrush.d.ts.map +1 -0
  481. package/dist-extensions/src/brushes/CircleBrush.d.ts +44 -0
  482. package/dist-extensions/src/brushes/CircleBrush.d.ts.map +1 -0
  483. package/dist-extensions/src/brushes/PatternBrush.d.ts +23 -0
  484. package/dist-extensions/src/brushes/PatternBrush.d.ts.map +1 -0
  485. package/dist-extensions/src/brushes/PencilBrush.d.ts +92 -0
  486. package/dist-extensions/src/brushes/PencilBrush.d.ts.map +1 -0
  487. package/dist-extensions/src/brushes/SprayBrush.d.ts +74 -0
  488. package/dist-extensions/src/brushes/SprayBrush.d.ts.map +1 -0
  489. package/dist-extensions/src/brushes/typedefs.d.ts +18 -0
  490. package/dist-extensions/src/brushes/typedefs.d.ts.map +1 -0
  491. package/dist-extensions/src/cache.d.ts +47 -0
  492. package/dist-extensions/src/cache.d.ts.map +1 -0
  493. package/dist-extensions/src/canvas/Canvas.d.ts +339 -0
  494. package/dist-extensions/src/canvas/Canvas.d.ts.map +1 -0
  495. package/dist-extensions/src/canvas/CanvasOptions.d.ts +229 -0
  496. package/dist-extensions/src/canvas/CanvasOptions.d.ts.map +1 -0
  497. package/dist-extensions/src/canvas/DOMManagers/CanvasDOMManager.d.ts +29 -0
  498. package/dist-extensions/src/canvas/DOMManagers/CanvasDOMManager.d.ts.map +1 -0
  499. package/dist-extensions/src/canvas/DOMManagers/StaticCanvasDOMManager.d.ts +29 -0
  500. package/dist-extensions/src/canvas/DOMManagers/StaticCanvasDOMManager.d.ts.map +1 -0
  501. package/dist-extensions/src/canvas/DOMManagers/util.d.ts +24 -0
  502. package/dist-extensions/src/canvas/DOMManagers/util.d.ts.map +1 -0
  503. package/dist-extensions/src/canvas/SelectableCanvas.d.ts +534 -0
  504. package/dist-extensions/src/canvas/SelectableCanvas.d.ts.map +1 -0
  505. package/dist-extensions/src/canvas/StaticCanvas.d.ts +639 -0
  506. package/dist-extensions/src/canvas/StaticCanvas.d.ts.map +1 -0
  507. package/dist-extensions/src/canvas/StaticCanvasOptions.d.ts +153 -0
  508. package/dist-extensions/src/canvas/StaticCanvasOptions.d.ts.map +1 -0
  509. package/dist-extensions/src/canvas/TextEditingManager.d.ts +21 -0
  510. package/dist-extensions/src/canvas/TextEditingManager.d.ts.map +1 -0
  511. package/dist-extensions/src/color/Color.d.ts +162 -0
  512. package/dist-extensions/src/color/Color.d.ts.map +1 -0
  513. package/dist-extensions/src/color/color_map.d.ts +155 -0
  514. package/dist-extensions/src/color/color_map.d.ts.map +1 -0
  515. package/dist-extensions/src/color/constants.d.ts +111 -0
  516. package/dist-extensions/src/color/constants.d.ts.map +1 -0
  517. package/dist-extensions/src/color/typedefs.d.ts +16 -0
  518. package/dist-extensions/src/color/typedefs.d.ts.map +1 -0
  519. package/dist-extensions/src/color/util.d.ts +27 -0
  520. package/dist-extensions/src/color/util.d.ts.map +1 -0
  521. package/dist-extensions/src/config.d.ts +115 -0
  522. package/dist-extensions/src/config.d.ts.map +1 -0
  523. package/dist-extensions/src/constants.d.ts +35 -0
  524. package/dist-extensions/src/constants.d.ts.map +1 -0
  525. package/dist-extensions/src/controls/Control.d.ts +229 -0
  526. package/dist-extensions/src/controls/Control.d.ts.map +1 -0
  527. package/dist-extensions/src/controls/changeWidth.d.ts +13 -0
  528. package/dist-extensions/src/controls/changeWidth.d.ts.map +1 -0
  529. package/dist-extensions/src/controls/commonControls.d.ts +28 -0
  530. package/dist-extensions/src/controls/commonControls.d.ts.map +1 -0
  531. package/dist-extensions/src/controls/controlRendering.d.ts +29 -0
  532. package/dist-extensions/src/controls/controlRendering.d.ts.map +1 -0
  533. package/dist-extensions/src/controls/drag.d.ts +12 -0
  534. package/dist-extensions/src/controls/drag.d.ts.map +1 -0
  535. package/dist-extensions/src/controls/fireEvent.d.ts +3 -0
  536. package/dist-extensions/src/controls/fireEvent.d.ts.map +1 -0
  537. package/dist-extensions/src/controls/index.d.ts +14 -0
  538. package/dist-extensions/src/controls/index.d.ts.map +1 -0
  539. package/dist-extensions/src/controls/pathControl.d.ts +12 -0
  540. package/dist-extensions/src/controls/pathControl.d.ts.map +1 -0
  541. package/dist-extensions/src/controls/polyControl.d.ts +30 -0
  542. package/dist-extensions/src/controls/polyControl.d.ts.map +1 -0
  543. package/dist-extensions/src/controls/rotate.d.ts +12 -0
  544. package/dist-extensions/src/controls/rotate.d.ts.map +1 -0
  545. package/dist-extensions/src/controls/scale.d.ts +47 -0
  546. package/dist-extensions/src/controls/scale.d.ts.map +1 -0
  547. package/dist-extensions/src/controls/scaleSkew.d.ts +39 -0
  548. package/dist-extensions/src/controls/scaleSkew.d.ts.map +1 -0
  549. package/dist-extensions/src/controls/skew.d.ts +33 -0
  550. package/dist-extensions/src/controls/skew.d.ts.map +1 -0
  551. package/dist-extensions/src/controls/util.d.ts +41 -0
  552. package/dist-extensions/src/controls/util.d.ts.map +1 -0
  553. package/dist-extensions/src/controls/wrapWithFireEvent.d.ts +10 -0
  554. package/dist-extensions/src/controls/wrapWithFireEvent.d.ts.map +1 -0
  555. package/dist-extensions/src/controls/wrapWithFixedAnchor.d.ts +9 -0
  556. package/dist-extensions/src/controls/wrapWithFixedAnchor.d.ts.map +1 -0
  557. package/dist-extensions/src/env/browser.d.ts +3 -0
  558. package/dist-extensions/src/env/browser.d.ts.map +1 -0
  559. package/dist-extensions/src/env/index.d.ts +34 -0
  560. package/dist-extensions/src/env/index.d.ts.map +1 -0
  561. package/dist-extensions/src/env/types.d.ts +16 -0
  562. package/dist-extensions/src/env/types.d.ts.map +1 -0
  563. package/dist-extensions/src/filters/BaseFilter.d.ts +153 -0
  564. package/dist-extensions/src/filters/BaseFilter.d.ts.map +1 -0
  565. package/dist-extensions/src/filters/BlendColor.d.ts +68 -0
  566. package/dist-extensions/src/filters/BlendColor.d.ts.map +1 -0
  567. package/dist-extensions/src/filters/BlendImage.d.ts +99 -0
  568. package/dist-extensions/src/filters/BlendImage.d.ts.map +1 -0
  569. package/dist-extensions/src/filters/Blur.d.ts +50 -0
  570. package/dist-extensions/src/filters/Blur.d.ts.map +1 -0
  571. package/dist-extensions/src/filters/Brightness.d.ts +46 -0
  572. package/dist-extensions/src/filters/Brightness.d.ts.map +1 -0
  573. package/dist-extensions/src/filters/Canvas2dFilterBackend.d.ts +27 -0
  574. package/dist-extensions/src/filters/Canvas2dFilterBackend.d.ts.map +1 -0
  575. package/dist-extensions/src/filters/ColorMatrix.d.ts +66 -0
  576. package/dist-extensions/src/filters/ColorMatrix.d.ts.map +1 -0
  577. package/dist-extensions/src/filters/ColorMatrixFilters.d.ts +15 -0
  578. package/dist-extensions/src/filters/ColorMatrixFilters.d.ts.map +1 -0
  579. package/dist-extensions/src/filters/Composed.d.ts +47 -0
  580. package/dist-extensions/src/filters/Composed.d.ts.map +1 -0
  581. package/dist-extensions/src/filters/Contrast.d.ts +44 -0
  582. package/dist-extensions/src/filters/Contrast.d.ts.map +1 -0
  583. package/dist-extensions/src/filters/Convolute.d.ts +81 -0
  584. package/dist-extensions/src/filters/Convolute.d.ts.map +1 -0
  585. package/dist-extensions/src/filters/FilterBackend.d.ts +15 -0
  586. package/dist-extensions/src/filters/FilterBackend.d.ts.map +1 -0
  587. package/dist-extensions/src/filters/GLProbes/GLProbe.d.ts +7 -0
  588. package/dist-extensions/src/filters/GLProbes/GLProbe.d.ts.map +1 -0
  589. package/dist-extensions/src/filters/GLProbes/WebGLProbe.d.ts +20 -0
  590. package/dist-extensions/src/filters/GLProbes/WebGLProbe.d.ts.map +1 -0
  591. package/dist-extensions/src/filters/Gamma.d.ts +58 -0
  592. package/dist-extensions/src/filters/Gamma.d.ts.map +1 -0
  593. package/dist-extensions/src/filters/Grayscale.d.ts +44 -0
  594. package/dist-extensions/src/filters/Grayscale.d.ts.map +1 -0
  595. package/dist-extensions/src/filters/HueRotation.d.ts +31 -0
  596. package/dist-extensions/src/filters/HueRotation.d.ts.map +1 -0
  597. package/dist-extensions/src/filters/Invert.d.ts +53 -0
  598. package/dist-extensions/src/filters/Invert.d.ts.map +1 -0
  599. package/dist-extensions/src/filters/Noise.d.ts +44 -0
  600. package/dist-extensions/src/filters/Noise.d.ts.map +1 -0
  601. package/dist-extensions/src/filters/Pixelate.d.ts +41 -0
  602. package/dist-extensions/src/filters/Pixelate.d.ts.map +1 -0
  603. package/dist-extensions/src/filters/RemoveColor.d.ts +53 -0
  604. package/dist-extensions/src/filters/RemoveColor.d.ts.map +1 -0
  605. package/dist-extensions/src/filters/Resize.d.ts +137 -0
  606. package/dist-extensions/src/filters/Resize.d.ts.map +1 -0
  607. package/dist-extensions/src/filters/Saturation.d.ts +46 -0
  608. package/dist-extensions/src/filters/Saturation.d.ts.map +1 -0
  609. package/dist-extensions/src/filters/Vibrance.d.ts +46 -0
  610. package/dist-extensions/src/filters/Vibrance.d.ts.map +1 -0
  611. package/dist-extensions/src/filters/WebGLFilterBackend.d.ts +131 -0
  612. package/dist-extensions/src/filters/WebGLFilterBackend.d.ts.map +1 -0
  613. package/dist-extensions/src/filters/filters.d.ts +23 -0
  614. package/dist-extensions/src/filters/filters.d.ts.map +1 -0
  615. package/dist-extensions/src/filters/index.d.ts +7 -0
  616. package/dist-extensions/src/filters/index.d.ts.map +1 -0
  617. package/dist-extensions/src/filters/shaders/baseFilter.d.ts +4 -0
  618. package/dist-extensions/src/filters/shaders/baseFilter.d.ts.map +1 -0
  619. package/dist-extensions/src/filters/shaders/blendColor.d.ts +13 -0
  620. package/dist-extensions/src/filters/shaders/blendColor.d.ts.map +1 -0
  621. package/dist-extensions/src/filters/shaders/blendImage.d.ts +4 -0
  622. package/dist-extensions/src/filters/shaders/blendImage.d.ts.map +1 -0
  623. package/dist-extensions/src/filters/shaders/blur.d.ts +2 -0
  624. package/dist-extensions/src/filters/shaders/blur.d.ts.map +1 -0
  625. package/dist-extensions/src/filters/shaders/brightness.d.ts +2 -0
  626. package/dist-extensions/src/filters/shaders/brightness.d.ts.map +1 -0
  627. package/dist-extensions/src/filters/shaders/colorMatrix.d.ts +2 -0
  628. package/dist-extensions/src/filters/shaders/colorMatrix.d.ts.map +1 -0
  629. package/dist-extensions/src/filters/shaders/constrast.d.ts +2 -0
  630. package/dist-extensions/src/filters/shaders/constrast.d.ts.map +1 -0
  631. package/dist-extensions/src/filters/shaders/convolute.d.ts +11 -0
  632. package/dist-extensions/src/filters/shaders/convolute.d.ts.map +1 -0
  633. package/dist-extensions/src/filters/shaders/gamma.d.ts +2 -0
  634. package/dist-extensions/src/filters/shaders/gamma.d.ts.map +1 -0
  635. package/dist-extensions/src/filters/shaders/grayscale.d.ts +3 -0
  636. package/dist-extensions/src/filters/shaders/grayscale.d.ts.map +1 -0
  637. package/dist-extensions/src/filters/shaders/invert.d.ts +2 -0
  638. package/dist-extensions/src/filters/shaders/invert.d.ts.map +1 -0
  639. package/dist-extensions/src/filters/shaders/noise.d.ts +2 -0
  640. package/dist-extensions/src/filters/shaders/noise.d.ts.map +1 -0
  641. package/dist-extensions/src/filters/shaders/pixelate.d.ts +2 -0
  642. package/dist-extensions/src/filters/shaders/pixelate.d.ts.map +1 -0
  643. package/dist-extensions/src/filters/shaders/removeColor.d.ts +2 -0
  644. package/dist-extensions/src/filters/shaders/removeColor.d.ts.map +1 -0
  645. package/dist-extensions/src/filters/shaders/saturation.d.ts +2 -0
  646. package/dist-extensions/src/filters/shaders/saturation.d.ts.map +1 -0
  647. package/dist-extensions/src/filters/shaders/vibrance.d.ts +2 -0
  648. package/dist-extensions/src/filters/shaders/vibrance.d.ts.map +1 -0
  649. package/dist-extensions/src/filters/typedefs.d.ts +70 -0
  650. package/dist-extensions/src/filters/typedefs.d.ts.map +1 -0
  651. package/dist-extensions/src/filters/utils.d.ts +10 -0
  652. package/dist-extensions/src/filters/utils.d.ts.map +1 -0
  653. package/dist-extensions/src/gradient/Gradient.d.ts +156 -0
  654. package/dist-extensions/src/gradient/Gradient.d.ts.map +1 -0
  655. package/dist-extensions/src/gradient/constants.d.ts +15 -0
  656. package/dist-extensions/src/gradient/constants.d.ts.map +1 -0
  657. package/dist-extensions/src/gradient/index.d.ts +3 -0
  658. package/dist-extensions/src/gradient/index.d.ts.map +1 -0
  659. package/dist-extensions/src/gradient/parser/misc.d.ts +4 -0
  660. package/dist-extensions/src/gradient/parser/misc.d.ts.map +1 -0
  661. package/dist-extensions/src/gradient/parser/parseColorStops.d.ts +3 -0
  662. package/dist-extensions/src/gradient/parser/parseColorStops.d.ts.map +1 -0
  663. package/dist-extensions/src/gradient/parser/parseCoords.d.ts +17 -0
  664. package/dist-extensions/src/gradient/parser/parseCoords.d.ts.map +1 -0
  665. package/dist-extensions/src/gradient/typedefs.d.ts +93 -0
  666. package/dist-extensions/src/gradient/typedefs.d.ts.map +1 -0
  667. package/dist-extensions/src/parser/applyViewboxTransform.d.ts +13 -0
  668. package/dist-extensions/src/parser/applyViewboxTransform.d.ts.map +1 -0
  669. package/dist-extensions/src/parser/attributes.d.ts +6 -0
  670. package/dist-extensions/src/parser/attributes.d.ts.map +1 -0
  671. package/dist-extensions/src/parser/constants.d.ts +41 -0
  672. package/dist-extensions/src/parser/constants.d.ts.map +1 -0
  673. package/dist-extensions/src/parser/doesSomeParentMatch.d.ts +2 -0
  674. package/dist-extensions/src/parser/doesSomeParentMatch.d.ts.map +1 -0
  675. package/dist-extensions/src/parser/elementMatchesRule.d.ts +5 -0
  676. package/dist-extensions/src/parser/elementMatchesRule.d.ts.map +1 -0
  677. package/dist-extensions/src/parser/elements_parser.d.ts +33 -0
  678. package/dist-extensions/src/parser/elements_parser.d.ts.map +1 -0
  679. package/dist-extensions/src/parser/getCSSRules.d.ts +8 -0
  680. package/dist-extensions/src/parser/getCSSRules.d.ts.map +1 -0
  681. package/dist-extensions/src/parser/getGlobalStylesForElement.d.ts +6 -0
  682. package/dist-extensions/src/parser/getGlobalStylesForElement.d.ts.map +1 -0
  683. package/dist-extensions/src/parser/getGradientDefs.d.ts +7 -0
  684. package/dist-extensions/src/parser/getGradientDefs.d.ts.map +1 -0
  685. package/dist-extensions/src/parser/getMultipleNodes.d.ts +2 -0
  686. package/dist-extensions/src/parser/getMultipleNodes.d.ts.map +1 -0
  687. package/dist-extensions/src/parser/getSvgRegex.d.ts +2 -0
  688. package/dist-extensions/src/parser/getSvgRegex.d.ts.map +1 -0
  689. package/dist-extensions/src/parser/getTagName.d.ts +2 -0
  690. package/dist-extensions/src/parser/getTagName.d.ts.map +1 -0
  691. package/dist-extensions/src/parser/hasInvalidAncestor.d.ts +2 -0
  692. package/dist-extensions/src/parser/hasInvalidAncestor.d.ts.map +1 -0
  693. package/dist-extensions/src/parser/loadSVGFromString.d.ts +18 -0
  694. package/dist-extensions/src/parser/loadSVGFromString.d.ts.map +1 -0
  695. package/dist-extensions/src/parser/loadSVGFromURL.d.ts +19 -0
  696. package/dist-extensions/src/parser/loadSVGFromURL.d.ts.map +1 -0
  697. package/dist-extensions/src/parser/normalizeAttr.d.ts +3 -0
  698. package/dist-extensions/src/parser/normalizeAttr.d.ts.map +1 -0
  699. package/dist-extensions/src/parser/normalizeValue.d.ts +2 -0
  700. package/dist-extensions/src/parser/normalizeValue.d.ts.map +1 -0
  701. package/dist-extensions/src/parser/parseAttributes.d.ts +10 -0
  702. package/dist-extensions/src/parser/parseAttributes.d.ts.map +1 -0
  703. package/dist-extensions/src/parser/parseFontDeclaration.d.ts +10 -0
  704. package/dist-extensions/src/parser/parseFontDeclaration.d.ts.map +1 -0
  705. package/dist-extensions/src/parser/parsePointsAttribute.d.ts +10 -0
  706. package/dist-extensions/src/parser/parsePointsAttribute.d.ts.map +1 -0
  707. package/dist-extensions/src/parser/parseSVGDocument.d.ts +22 -0
  708. package/dist-extensions/src/parser/parseSVGDocument.d.ts.map +1 -0
  709. package/dist-extensions/src/parser/parseStyleAttribute.d.ts +9 -0
  710. package/dist-extensions/src/parser/parseStyleAttribute.d.ts.map +1 -0
  711. package/dist-extensions/src/parser/parseStyleObject.d.ts +8 -0
  712. package/dist-extensions/src/parser/parseStyleObject.d.ts.map +1 -0
  713. package/dist-extensions/src/parser/parseStyleString.d.ts +8 -0
  714. package/dist-extensions/src/parser/parseStyleString.d.ts.map +1 -0
  715. package/dist-extensions/src/parser/parseTransformAttribute.d.ts +11 -0
  716. package/dist-extensions/src/parser/parseTransformAttribute.d.ts.map +1 -0
  717. package/dist-extensions/src/parser/parseUseDirectives.d.ts +2 -0
  718. package/dist-extensions/src/parser/parseUseDirectives.d.ts.map +1 -0
  719. package/dist-extensions/src/parser/percent.d.ts +9 -0
  720. package/dist-extensions/src/parser/percent.d.ts.map +1 -0
  721. package/dist-extensions/src/parser/recursivelyParseGradientsXlink.d.ts +2 -0
  722. package/dist-extensions/src/parser/recursivelyParseGradientsXlink.d.ts.map +1 -0
  723. package/dist-extensions/src/parser/selectorMatches.d.ts +2 -0
  724. package/dist-extensions/src/parser/selectorMatches.d.ts.map +1 -0
  725. package/dist-extensions/src/parser/setStrokeFillOpacity.d.ts +6 -0
  726. package/dist-extensions/src/parser/setStrokeFillOpacity.d.ts.map +1 -0
  727. package/dist-extensions/src/parser/typedefs.d.ts +10 -0
  728. package/dist-extensions/src/parser/typedefs.d.ts.map +1 -0
  729. package/dist-extensions/src/shapes/ActiveSelection.d.ts +109 -0
  730. package/dist-extensions/src/shapes/ActiveSelection.d.ts.map +1 -0
  731. package/dist-extensions/src/shapes/Circle.d.ts +111 -0
  732. package/dist-extensions/src/shapes/Circle.d.ts.map +1 -0
  733. package/dist-extensions/src/shapes/Ellipse.d.ts +88 -0
  734. package/dist-extensions/src/shapes/Ellipse.d.ts.map +1 -0
  735. package/dist-extensions/src/shapes/Group.d.ts +303 -0
  736. package/dist-extensions/src/shapes/Group.d.ts.map +1 -0
  737. package/dist-extensions/src/shapes/IText/DraggableTextDelegate.d.ts +78 -0
  738. package/dist-extensions/src/shapes/IText/DraggableTextDelegate.d.ts.map +1 -0
  739. package/dist-extensions/src/shapes/IText/IText.d.ts +314 -0
  740. package/dist-extensions/src/shapes/IText/IText.d.ts.map +1 -0
  741. package/dist-extensions/src/shapes/IText/ITextBehavior.d.ts +299 -0
  742. package/dist-extensions/src/shapes/IText/ITextBehavior.d.ts.map +1 -0
  743. package/dist-extensions/src/shapes/IText/ITextClickBehavior.d.ts +81 -0
  744. package/dist-extensions/src/shapes/IText/ITextClickBehavior.d.ts.map +1 -0
  745. package/dist-extensions/src/shapes/IText/ITextKeyBehavior.d.ts +198 -0
  746. package/dist-extensions/src/shapes/IText/ITextKeyBehavior.d.ts.map +1 -0
  747. package/dist-extensions/src/shapes/IText/constants.d.ts +13 -0
  748. package/dist-extensions/src/shapes/IText/constants.d.ts.map +1 -0
  749. package/dist-extensions/src/shapes/Image.d.ts +312 -0
  750. package/dist-extensions/src/shapes/Image.d.ts.map +1 -0
  751. package/dist-extensions/src/shapes/Line.d.ts +122 -0
  752. package/dist-extensions/src/shapes/Line.d.ts.map +1 -0
  753. package/dist-extensions/src/shapes/Object/AnimatableObject.d.ts +33 -0
  754. package/dist-extensions/src/shapes/Object/AnimatableObject.d.ts.map +1 -0
  755. package/dist-extensions/src/shapes/Object/FabricObject.d.ts +11 -0
  756. package/dist-extensions/src/shapes/Object/FabricObject.d.ts.map +1 -0
  757. package/dist-extensions/src/shapes/Object/FabricObjectSVGExportMixin.d.ts +72 -0
  758. package/dist-extensions/src/shapes/Object/FabricObjectSVGExportMixin.d.ts.map +1 -0
  759. package/dist-extensions/src/shapes/Object/InteractiveObject.d.ts +317 -0
  760. package/dist-extensions/src/shapes/Object/InteractiveObject.d.ts.map +1 -0
  761. package/dist-extensions/src/shapes/Object/Object.d.ts +614 -0
  762. package/dist-extensions/src/shapes/Object/Object.d.ts.map +1 -0
  763. package/dist-extensions/src/shapes/Object/ObjectGeometry.d.ts +237 -0
  764. package/dist-extensions/src/shapes/Object/ObjectGeometry.d.ts.map +1 -0
  765. package/dist-extensions/src/shapes/Object/ObjectOrigin.d.ts +96 -0
  766. package/dist-extensions/src/shapes/Object/ObjectOrigin.d.ts.map +1 -0
  767. package/dist-extensions/src/shapes/Object/StackedObject.d.ts +60 -0
  768. package/dist-extensions/src/shapes/Object/StackedObject.d.ts.map +1 -0
  769. package/dist-extensions/src/shapes/Object/defaultValues.d.ts +8 -0
  770. package/dist-extensions/src/shapes/Object/defaultValues.d.ts.map +1 -0
  771. package/dist-extensions/src/shapes/Object/types/BaseProps.d.ts +88 -0
  772. package/dist-extensions/src/shapes/Object/types/BaseProps.d.ts.map +1 -0
  773. package/dist-extensions/src/shapes/Object/types/BorderProps.d.ts +37 -0
  774. package/dist-extensions/src/shapes/Object/types/BorderProps.d.ts.map +1 -0
  775. package/dist-extensions/src/shapes/Object/types/ControlProps.d.ts +63 -0
  776. package/dist-extensions/src/shapes/Object/types/ControlProps.d.ts.map +1 -0
  777. package/dist-extensions/src/shapes/Object/types/FabricObjectProps.d.ts +66 -0
  778. package/dist-extensions/src/shapes/Object/types/FabricObjectProps.d.ts.map +1 -0
  779. package/dist-extensions/src/shapes/Object/types/FillStrokeProps.d.ts +80 -0
  780. package/dist-extensions/src/shapes/Object/types/FillStrokeProps.d.ts.map +1 -0
  781. package/dist-extensions/src/shapes/Object/types/LockInteractionProps.d.ts +51 -0
  782. package/dist-extensions/src/shapes/Object/types/LockInteractionProps.d.ts.map +1 -0
  783. package/dist-extensions/src/shapes/Object/types/ObjectProps.d.ts +43 -0
  784. package/dist-extensions/src/shapes/Object/types/ObjectProps.d.ts.map +1 -0
  785. package/dist-extensions/src/shapes/Object/types/ObjectTransformProps.d.ts +34 -0
  786. package/dist-extensions/src/shapes/Object/types/ObjectTransformProps.d.ts.map +1 -0
  787. package/dist-extensions/src/shapes/Object/types/SerializedObjectProps.d.ts +66 -0
  788. package/dist-extensions/src/shapes/Object/types/SerializedObjectProps.d.ts.map +1 -0
  789. package/dist-extensions/src/shapes/Object/types/index.d.ts +6 -0
  790. package/dist-extensions/src/shapes/Object/types/index.d.ts.map +1 -0
  791. package/dist-extensions/src/shapes/Path.d.ts +215 -0
  792. package/dist-extensions/src/shapes/Path.d.ts.map +1 -0
  793. package/dist-extensions/src/shapes/Polygon.d.ts +7 -0
  794. package/dist-extensions/src/shapes/Polygon.d.ts.map +1 -0
  795. package/dist-extensions/src/shapes/Polyline.d.ts +156 -0
  796. package/dist-extensions/src/shapes/Polyline.d.ts.map +1 -0
  797. package/dist-extensions/src/shapes/Rect.d.ts +83 -0
  798. package/dist-extensions/src/shapes/Rect.d.ts.map +1 -0
  799. package/dist-extensions/src/shapes/Text/StyledText.d.ts +128 -0
  800. package/dist-extensions/src/shapes/Text/StyledText.d.ts.map +1 -0
  801. package/dist-extensions/src/shapes/Text/Text.d.ts +697 -0
  802. package/dist-extensions/src/shapes/Text/Text.d.ts.map +1 -0
  803. package/dist-extensions/src/shapes/Text/TextSVGExportMixin.d.ts +47 -0
  804. package/dist-extensions/src/shapes/Text/TextSVGExportMixin.d.ts.map +1 -0
  805. package/dist-extensions/src/shapes/Text/constants.d.ts +13 -0
  806. package/dist-extensions/src/shapes/Text/constants.d.ts.map +1 -0
  807. package/dist-extensions/src/shapes/Textbox.d.ts +226 -0
  808. package/dist-extensions/src/shapes/Textbox.d.ts.map +1 -0
  809. package/dist-extensions/src/shapes/Triangle.d.ts +27 -0
  810. package/dist-extensions/src/shapes/Triangle.d.ts.map +1 -0
  811. package/dist-extensions/src/typedefs.d.ts +97 -0
  812. package/dist-extensions/src/typedefs.d.ts.map +1 -0
  813. package/dist-extensions/src/util/animation/AnimationBase.d.ts +54 -0
  814. package/dist-extensions/src/util/animation/AnimationBase.d.ts.map +1 -0
  815. package/dist-extensions/src/util/animation/AnimationFrameProvider.d.ts +3 -0
  816. package/dist-extensions/src/util/animation/AnimationFrameProvider.d.ts.map +1 -0
  817. package/dist-extensions/src/util/animation/AnimationRegistry.d.ts +29 -0
  818. package/dist-extensions/src/util/animation/AnimationRegistry.d.ts.map +1 -0
  819. package/dist-extensions/src/util/animation/ArrayAnimation.d.ts +10 -0
  820. package/dist-extensions/src/util/animation/ArrayAnimation.d.ts.map +1 -0
  821. package/dist-extensions/src/util/animation/ColorAnimation.d.ts +11 -0
  822. package/dist-extensions/src/util/animation/ColorAnimation.d.ts.map +1 -0
  823. package/dist-extensions/src/util/animation/ValueAnimation.d.ts +10 -0
  824. package/dist-extensions/src/util/animation/ValueAnimation.d.ts.map +1 -0
  825. package/dist-extensions/src/util/animation/animate.d.ts +37 -0
  826. package/dist-extensions/src/util/animation/animate.d.ts.map +1 -0
  827. package/dist-extensions/src/util/animation/easing.d.ts +130 -0
  828. package/dist-extensions/src/util/animation/easing.d.ts.map +1 -0
  829. package/dist-extensions/src/util/animation/index.d.ts +3 -0
  830. package/dist-extensions/src/util/animation/index.d.ts.map +1 -0
  831. package/dist-extensions/src/util/animation/types.d.ts +87 -0
  832. package/dist-extensions/src/util/animation/types.d.ts.map +1 -0
  833. package/dist-extensions/src/util/applyMixins.d.ts +8 -0
  834. package/dist-extensions/src/util/applyMixins.d.ts.map +1 -0
  835. package/dist-extensions/src/util/dom_event.d.ts +6 -0
  836. package/dist-extensions/src/util/dom_event.d.ts.map +1 -0
  837. package/dist-extensions/src/util/dom_misc.d.ts +12 -0
  838. package/dist-extensions/src/util/dom_misc.d.ts.map +1 -0
  839. package/dist-extensions/src/util/dom_style.d.ts +7 -0
  840. package/dist-extensions/src/util/dom_style.d.ts.map +1 -0
  841. package/dist-extensions/src/util/index.d.ts +37 -0
  842. package/dist-extensions/src/util/index.d.ts.map +1 -0
  843. package/dist-extensions/src/util/internals/cleanupSvgAttribute.d.ts +2 -0
  844. package/dist-extensions/src/util/internals/cleanupSvgAttribute.d.ts.map +1 -0
  845. package/dist-extensions/src/util/internals/cloneStyles.d.ts +3 -0
  846. package/dist-extensions/src/util/internals/cloneStyles.d.ts.map +1 -0
  847. package/dist-extensions/src/util/internals/console.d.ts +8 -0
  848. package/dist-extensions/src/util/internals/console.d.ts.map +1 -0
  849. package/dist-extensions/src/util/internals/dom_request.d.ts +16 -0
  850. package/dist-extensions/src/util/internals/dom_request.d.ts.map +1 -0
  851. package/dist-extensions/src/util/internals/findRight.d.ts +2 -0
  852. package/dist-extensions/src/util/internals/findRight.d.ts.map +1 -0
  853. package/dist-extensions/src/util/internals/getRandomInt.d.ts +8 -0
  854. package/dist-extensions/src/util/internals/getRandomInt.d.ts.map +1 -0
  855. package/dist-extensions/src/util/internals/ifNaN.d.ts +8 -0
  856. package/dist-extensions/src/util/internals/ifNaN.d.ts.map +1 -0
  857. package/dist-extensions/src/util/internals/removeFromArray.d.ts +9 -0
  858. package/dist-extensions/src/util/internals/removeFromArray.d.ts.map +1 -0
  859. package/dist-extensions/src/util/internals/uid.d.ts +2 -0
  860. package/dist-extensions/src/util/internals/uid.d.ts.map +1 -0
  861. package/dist-extensions/src/util/lang_string.d.ts +22 -0
  862. package/dist-extensions/src/util/lang_string.d.ts.map +1 -0
  863. package/dist-extensions/src/util/misc/boundingBoxFromPoints.d.ts +9 -0
  864. package/dist-extensions/src/util/misc/boundingBoxFromPoints.d.ts.map +1 -0
  865. package/dist-extensions/src/util/misc/capValue.d.ts +2 -0
  866. package/dist-extensions/src/util/misc/capValue.d.ts.map +1 -0
  867. package/dist-extensions/src/util/misc/cos.d.ts +10 -0
  868. package/dist-extensions/src/util/misc/cos.d.ts.map +1 -0
  869. package/dist-extensions/src/util/misc/dom.d.ts +28 -0
  870. package/dist-extensions/src/util/misc/dom.d.ts.map +1 -0
  871. package/dist-extensions/src/util/misc/findScaleTo.d.ts +20 -0
  872. package/dist-extensions/src/util/misc/findScaleTo.d.ts.map +1 -0
  873. package/dist-extensions/src/util/misc/groupSVGElements.d.ts +11 -0
  874. package/dist-extensions/src/util/misc/groupSVGElements.d.ts.map +1 -0
  875. package/dist-extensions/src/util/misc/isTransparent.d.ts +11 -0
  876. package/dist-extensions/src/util/misc/isTransparent.d.ts.map +1 -0
  877. package/dist-extensions/src/util/misc/matrix.d.ts +170 -0
  878. package/dist-extensions/src/util/misc/matrix.d.ts.map +1 -0
  879. package/dist-extensions/src/util/misc/mergeClipPaths.d.ts +23 -0
  880. package/dist-extensions/src/util/misc/mergeClipPaths.d.ts.map +1 -0
  881. package/dist-extensions/src/util/misc/objectEnlive.d.ts +45 -0
  882. package/dist-extensions/src/util/misc/objectEnlive.d.ts.map +1 -0
  883. package/dist-extensions/src/util/misc/objectTransforms.d.ts +62 -0
  884. package/dist-extensions/src/util/misc/objectTransforms.d.ts.map +1 -0
  885. package/dist-extensions/src/util/misc/pick.d.ts +9 -0
  886. package/dist-extensions/src/util/misc/pick.d.ts.map +1 -0
  887. package/dist-extensions/src/util/misc/planeChange.d.ts +64 -0
  888. package/dist-extensions/src/util/misc/planeChange.d.ts.map +1 -0
  889. package/dist-extensions/src/util/misc/projectStroke/StrokeLineCapProjections.d.ts +52 -0
  890. package/dist-extensions/src/util/misc/projectStroke/StrokeLineCapProjections.d.ts.map +1 -0
  891. package/dist-extensions/src/util/misc/projectStroke/StrokeLineJoinProjections.d.ts +90 -0
  892. package/dist-extensions/src/util/misc/projectStroke/StrokeLineJoinProjections.d.ts.map +1 -0
  893. package/dist-extensions/src/util/misc/projectStroke/StrokeProjectionsBase.d.ts +27 -0
  894. package/dist-extensions/src/util/misc/projectStroke/StrokeProjectionsBase.d.ts.map +1 -0
  895. package/dist-extensions/src/util/misc/projectStroke/index.d.ts +12 -0
  896. package/dist-extensions/src/util/misc/projectStroke/index.d.ts.map +1 -0
  897. package/dist-extensions/src/util/misc/projectStroke/types.d.ts +23 -0
  898. package/dist-extensions/src/util/misc/projectStroke/types.d.ts.map +1 -0
  899. package/dist-extensions/src/util/misc/radiansDegreesConversion.d.ts +14 -0
  900. package/dist-extensions/src/util/misc/radiansDegreesConversion.d.ts.map +1 -0
  901. package/dist-extensions/src/util/misc/resolveOrigin.d.ts +9 -0
  902. package/dist-extensions/src/util/misc/resolveOrigin.d.ts.map +1 -0
  903. package/dist-extensions/src/util/misc/rotatePoint.d.ts +12 -0
  904. package/dist-extensions/src/util/misc/rotatePoint.d.ts.map +1 -0
  905. package/dist-extensions/src/util/misc/sin.d.ts +10 -0
  906. package/dist-extensions/src/util/misc/sin.d.ts.map +1 -0
  907. package/dist-extensions/src/util/misc/svgParsing.d.ts +46 -0
  908. package/dist-extensions/src/util/misc/svgParsing.d.ts.map +1 -0
  909. package/dist-extensions/src/util/misc/textStyles.d.ts +32 -0
  910. package/dist-extensions/src/util/misc/textStyles.d.ts.map +1 -0
  911. package/dist-extensions/src/util/misc/toFixed.d.ts +8 -0
  912. package/dist-extensions/src/util/misc/toFixed.d.ts.map +1 -0
  913. package/dist-extensions/src/util/misc/vectors.d.ts +72 -0
  914. package/dist-extensions/src/util/misc/vectors.d.ts.map +1 -0
  915. package/dist-extensions/src/util/path/index.d.ts +95 -0
  916. package/dist-extensions/src/util/path/index.d.ts.map +1 -0
  917. package/dist-extensions/src/util/path/regex.d.ts +2 -0
  918. package/dist-extensions/src/util/path/regex.d.ts.map +1 -0
  919. package/dist-extensions/src/util/path/typedefs.d.ts +221 -0
  920. package/dist-extensions/src/util/path/typedefs.d.ts.map +1 -0
  921. package/dist-extensions/src/util/transform_matrix_removal.d.ts +14 -0
  922. package/dist-extensions/src/util/transform_matrix_removal.d.ts.map +1 -0
  923. package/dist-extensions/src/util/typeAssertions.d.ts +13 -0
  924. package/dist-extensions/src/util/typeAssertions.d.ts.map +1 -0
  925. package/eslint.config.mjs +108 -0
  926. package/extensions/README.MD +27 -0
  927. package/extensions/aligning_guidelines/README.MD +22 -0
  928. package/extensions/aligning_guidelines/constant.ts +10 -0
  929. package/extensions/aligning_guidelines/index.ts +166 -0
  930. package/extensions/aligning_guidelines/typedefs.ts +36 -0
  931. package/extensions/aligning_guidelines/util/basic.spec.ts +31 -0
  932. package/extensions/aligning_guidelines/util/basic.ts +20 -0
  933. package/extensions/aligning_guidelines/util/collect-line.ts +172 -0
  934. package/extensions/aligning_guidelines/util/collect-point.ts +83 -0
  935. package/extensions/aligning_guidelines/util/draw.ts +74 -0
  936. package/extensions/aligning_guidelines/util/get-objects-by-target.ts +45 -0
  937. package/extensions/index.ts +4 -0
  938. package/jest.config.js +1 -1
  939. package/jest.extend.ts +14 -15
  940. package/package.json +17 -12
  941. package/playwright.setup.ts +5 -5
  942. package/rollup.config.mjs +46 -4
  943. package/scripts/build.mjs +1 -1
  944. package/scripts/buildLock.mjs +5 -5
  945. package/scripts/buildStats.mjs +2 -2
  946. package/scripts/git.mjs +1 -1
  947. package/scripts/index.mjs +34 -32
  948. package/scripts/sandbox.mjs +15 -15
  949. package/src/ClassRegistry.spec.ts +1 -1
  950. package/src/ClassRegistry.ts +1 -1
  951. package/src/Collection.ts +9 -9
  952. package/src/EventTypeDefs.ts +2 -2
  953. package/src/Intersection.spec.ts +2 -2
  954. package/src/Intersection.ts +11 -11
  955. package/src/LayoutManager/ActiveSelectionLayoutManager.spec.ts +3 -3
  956. package/src/LayoutManager/ActiveSelectionLayoutManager.ts +2 -2
  957. package/src/LayoutManager/LayoutManager.spec.ts +17 -17
  958. package/src/LayoutManager/LayoutManager.ts +15 -15
  959. package/src/LayoutManager/LayoutStrategies/ClipPathLayout.ts +3 -3
  960. package/src/LayoutManager/LayoutStrategies/FixedLayout.ts +1 -1
  961. package/src/LayoutManager/LayoutStrategies/LayoutStrategy.ts +4 -4
  962. package/src/LayoutManager/LayoutStrategies/utils.ts +4 -4
  963. package/src/LayoutManager/types.ts +12 -13
  964. package/src/Observable.ts +7 -7
  965. package/src/Pattern/Pattern.ts +20 -10
  966. package/src/Point.ts +3 -3
  967. package/src/Shadow.ts +7 -7
  968. package/src/brushes/CircleBrush.ts +1 -1
  969. package/src/brushes/PatternBrush.ts +1 -1
  970. package/src/brushes/PencilBrush.ts +1 -1
  971. package/src/brushes/SprayBrush.ts +3 -3
  972. package/src/canvas/Canvas.ts +38 -35
  973. package/src/canvas/DOMManagers/CanvasDOMManager.ts +2 -2
  974. package/src/canvas/DOMManagers/StaticCanvasDOMManager.ts +1 -1
  975. package/src/canvas/DOMManagers/util.ts +2 -2
  976. package/src/canvas/SelectableCanvas.spec.ts +8 -8
  977. package/src/canvas/SelectableCanvas.ts +20 -20
  978. package/src/canvas/StaticCanvas.ts +44 -43
  979. package/src/canvas/StaticCanvasOptions.ts +0 -1
  980. package/src/canvas/TextEditingManager.ts +1 -1
  981. package/src/canvas/__tests__/eventData.test.ts +17 -17
  982. package/src/color/Color.ts +3 -2
  983. package/src/color/color.test.ts +2 -2
  984. package/src/color/typedefs.ts +1 -1
  985. package/src/color/util.ts +1 -1
  986. package/src/config.ts +1 -1
  987. package/src/controls/Control.spec.ts +8 -8
  988. package/src/controls/Control.ts +14 -14
  989. package/src/controls/changeWidth.test.ts +2 -2
  990. package/src/controls/changeWidth.ts +4 -4
  991. package/src/controls/controlRendering.ts +4 -4
  992. package/src/controls/drag.ts +1 -1
  993. package/src/controls/fireEvent.ts +1 -1
  994. package/src/controls/pathControl.spec.ts +9 -9
  995. package/src/controls/pathControl.ts +20 -20
  996. package/src/controls/polyControl.spec.ts +6 -6
  997. package/src/controls/polyControl.ts +11 -11
  998. package/src/controls/rotate.ts +4 -4
  999. package/src/controls/scale.test.ts +9 -9
  1000. package/src/controls/scale.ts +13 -13
  1001. package/src/controls/scaleSkew.ts +3 -3
  1002. package/src/controls/skew.ts +8 -8
  1003. package/src/controls/util.ts +6 -6
  1004. package/src/controls/wrapWithFireEvent.ts +2 -2
  1005. package/src/controls/wrapWithFixedAnchor.spec.ts +5 -5
  1006. package/src/controls/wrapWithFixedAnchor.ts +2 -2
  1007. package/src/env/node.ts +2 -2
  1008. package/src/filters/BaseFilter.ts +27 -25
  1009. package/src/filters/BlendColor.ts +1 -1
  1010. package/src/filters/BlendImage.ts +4 -4
  1011. package/src/filters/Blur.ts +1 -1
  1012. package/src/filters/Boilerplate.ts +1 -1
  1013. package/src/filters/Brightness.ts +1 -1
  1014. package/src/filters/Canvas2dFilterBackend.ts +1 -1
  1015. package/src/filters/ColorMatrix.ts +2 -2
  1016. package/src/filters/ColorMatrixFilters.ts +7 -7
  1017. package/src/filters/Composed.ts +5 -5
  1018. package/src/filters/Contrast.ts +1 -1
  1019. package/src/filters/Convolute.ts +1 -1
  1020. package/src/filters/GLProbes/WebGLProbe.ts +2 -2
  1021. package/src/filters/Gamma.ts +1 -1
  1022. package/src/filters/Grayscale.ts +1 -1
  1023. package/src/filters/Invert.ts +1 -1
  1024. package/src/filters/Noise.ts +1 -1
  1025. package/src/filters/Pixelate.ts +1 -1
  1026. package/src/filters/RemoveColor.ts +1 -1
  1027. package/src/filters/Resize.ts +9 -9
  1028. package/src/filters/Saturation.ts +1 -1
  1029. package/src/filters/Vibrance.ts +1 -1
  1030. package/src/filters/WebGLFilterBackend.ts +10 -10
  1031. package/src/filters/typedefs.ts +1 -3
  1032. package/src/filters/utils.ts +3 -3
  1033. package/src/gradient/Gradient.spec.ts +19 -19
  1034. package/src/gradient/Gradient.ts +51 -50
  1035. package/src/gradient/parser/parseColorStops.ts +3 -3
  1036. package/src/gradient/parser/parseCoords.ts +28 -25
  1037. package/src/mixins/eraser_brush.mixin.ts +21 -21
  1038. package/src/parkinglot/straighten.ts +1 -1
  1039. package/src/parser/applyViewboxTransform.ts +2 -2
  1040. package/src/parser/constants.ts +2 -2
  1041. package/src/parser/elements_parser.ts +13 -13
  1042. package/src/parser/getCSSRules.ts +1 -1
  1043. package/src/parser/getGlobalStylesForElement.ts +1 -1
  1044. package/src/parser/getGradientDefs.ts +1 -1
  1045. package/src/parser/getMultipleNodes.ts +2 -2
  1046. package/src/parser/loadSVGFromString.test.ts +1 -4
  1047. package/src/parser/loadSVGFromString.ts +1 -1
  1048. package/src/parser/loadSVGFromURL.ts +1 -1
  1049. package/src/parser/normalizeAttr.ts +1 -1
  1050. package/src/parser/normalizeValue.ts +2 -2
  1051. package/src/parser/parseAttributes.ts +3 -3
  1052. package/src/parser/parseFontDeclaration.ts +1 -1
  1053. package/src/parser/parseSVGDocument.ts +3 -3
  1054. package/src/parser/parseStyleObject.ts +1 -1
  1055. package/src/parser/parseStyleString.ts +1 -1
  1056. package/src/parser/parseTransformAttribute.ts +1 -1
  1057. package/src/parser/parseUseDirectives.ts +1 -1
  1058. package/src/parser/percent.ts +4 -4
  1059. package/src/parser/recursivelyParseGradientsXlink.ts +1 -1
  1060. package/src/parser/setStrokeFillOpacity.ts +1 -1
  1061. package/src/parser/typedefs.ts +1 -1
  1062. package/src/shapes/ActiveSelection.spec.ts +1 -1
  1063. package/src/shapes/ActiveSelection.ts +4 -4
  1064. package/src/shapes/Circle.ts +5 -5
  1065. package/src/shapes/Ellipse.ts +4 -4
  1066. package/src/shapes/Group.spec.ts +5 -5
  1067. package/src/shapes/Group.ts +19 -17
  1068. package/src/shapes/IText/DraggableTextDelegate.ts +9 -10
  1069. package/src/shapes/IText/IText.test.ts +1 -1
  1070. package/src/shapes/IText/IText.ts +12 -12
  1071. package/src/shapes/IText/ITextBehavior.test.ts +2 -2
  1072. package/src/shapes/IText/ITextBehavior.ts +21 -21
  1073. package/src/shapes/IText/ITextClickBehavior.ts +2 -2
  1074. package/src/shapes/IText/ITextKeyBehavior.test.ts +2 -2
  1075. package/src/shapes/IText/ITextKeyBehavior.ts +13 -13
  1076. package/src/shapes/Image.ts +16 -16
  1077. package/src/shapes/Line.ts +4 -4
  1078. package/src/shapes/Object/AnimatableObject.ts +13 -10
  1079. package/src/shapes/Object/FabricObject.ts +7 -3
  1080. package/src/shapes/Object/FabricObjectSVGExportMixin.ts +9 -9
  1081. package/src/shapes/Object/InteractiveObject.spec.ts +3 -3
  1082. package/src/shapes/Object/InteractiveObject.ts +32 -32
  1083. package/src/shapes/Object/Object.ts +33 -31
  1084. package/src/shapes/Object/ObjectGeometry.ts +9 -9
  1085. package/src/shapes/Object/ObjectOrigin.ts +11 -11
  1086. package/src/shapes/Object/StackedObject.ts +3 -4
  1087. package/src/shapes/Path.ts +14 -14
  1088. package/src/shapes/Polyline.spec.ts +1 -1
  1089. package/src/shapes/Polyline.ts +15 -16
  1090. package/src/shapes/Rect.ts +6 -6
  1091. package/src/shapes/Text/StyledText.spec.ts +2 -2
  1092. package/src/shapes/Text/StyledText.ts +7 -7
  1093. package/src/shapes/Text/Text.spec.ts +1 -1
  1094. package/src/shapes/Text/Text.ts +33 -33
  1095. package/src/shapes/Text/TextSVGExportMixin.spec.ts +1 -1
  1096. package/src/shapes/Text/TextSVGExportMixin.ts +23 -23
  1097. package/src/shapes/Textbox.ts +7 -7
  1098. package/src/shapes/Triangle.ts +1 -1
  1099. package/src/typedefs.ts +3 -3
  1100. package/src/util/animation/AnimationBase.ts +2 -2
  1101. package/src/util/animation/AnimationRegistry.ts +1 -1
  1102. package/src/util/animation/ArrayAnimation.ts +2 -2
  1103. package/src/util/animation/ColorAnimation.ts +5 -5
  1104. package/src/util/animation/ValueAnimation.ts +1 -1
  1105. package/src/util/animation/animate.ts +6 -6
  1106. package/src/util/animation/animations.spec.ts +7 -7
  1107. package/src/util/animation/easing.ts +1 -1
  1108. package/src/util/animation/types.ts +5 -6
  1109. package/src/util/applyMixins.ts +2 -2
  1110. package/src/util/dom_style.ts +2 -2
  1111. package/src/util/internals/cloneDeep.ts +6 -0
  1112. package/src/util/internals/cloneStyles.spec.ts +46 -0
  1113. package/src/util/internals/cloneStyles.ts +12 -0
  1114. package/src/util/internals/findRight.ts +1 -1
  1115. package/src/util/internals/getRandomInt.test.ts +1 -1
  1116. package/src/util/misc/boundingBoxFromPoints.ts +1 -1
  1117. package/src/util/misc/dom.ts +3 -3
  1118. package/src/util/misc/findScaleTo.ts +2 -2
  1119. package/src/util/misc/groupSVGElements.ts +1 -1
  1120. package/src/util/misc/isTransparent.ts +1 -1
  1121. package/src/util/misc/matrix.ts +6 -6
  1122. package/src/util/misc/objectEnlive.ts +9 -9
  1123. package/src/util/misc/objectTransforms.ts +5 -5
  1124. package/src/util/misc/pick.ts +2 -2
  1125. package/src/util/misc/planeChange.spec.ts +9 -9
  1126. package/src/util/misc/planeChange.ts +5 -5
  1127. package/src/util/misc/projectStroke/StrokeLineCapProjections.ts +7 -7
  1128. package/src/util/misc/projectStroke/StrokeLineJoinProjections.ts +16 -16
  1129. package/src/util/misc/projectStroke/StrokeProjectionsBase.ts +2 -2
  1130. package/src/util/misc/projectStroke/index.ts +7 -7
  1131. package/src/util/misc/resolveOrigin.ts +1 -1
  1132. package/src/util/misc/rotatePoint.ts +1 -1
  1133. package/src/util/misc/svgParsing.ts +5 -5
  1134. package/src/util/misc/textStyles.ts +6 -6
  1135. package/src/util/misc/vectors.ts +1 -1
  1136. package/src/util/path/index.spec.ts +3 -3
  1137. package/src/util/path/index.ts +30 -30
  1138. package/src/util/path/typechecks.ts +22 -22
  1139. package/src/util/path/typedefs.ts +14 -17
  1140. package/src/util/transform_matrix_removal.ts +3 -3
  1141. package/src/util/typeAssertions.ts +4 -4
  1142. package/tsconfig-extensions.json +108 -0
  1143. package/tsconfig.json +4 -3
  1144. package/.eslintignore +0 -3
  1145. package/.eslintrc.js +0 -60
  1146. package/.eslintrc.json +0 -143
  1147. package/.eslintrc_tests +0 -58
  1148. package/dist/src/util/internals/cloneDeep.min.mjs +0 -2
  1149. package/dist/src/util/internals/cloneDeep.min.mjs.map +0 -1
  1150. package/dist/src/util/internals/cloneDeep.mjs +0 -4
  1151. package/dist/src/util/internals/cloneDeep.mjs.map +0 -1
  1152. package/dist/src/util/internals/index.d.ts +0 -5
  1153. package/dist/src/util/internals/index.d.ts.map +0 -1
  1154. package/src/benchmarks/README.md +0 -7
  1155. package/src/benchmarks/calcCornerCoords.mjs +0 -117
  1156. package/src/benchmarks/calcTransformMatrix.mjs +0 -104
  1157. package/src/benchmarks/pathCloning.mjs +0 -111
  1158. package/src/benchmarks/pathData.mjs +0 -5
  1159. package/src/benchmarks/raycasting.mjs +0 -152
  1160. package/src/benchmarks/transformMatrixKey.mjs +0 -97
  1161. package/src/util/internals/index.ts +0 -4
@@ -1 +1 @@
1
- {"version":3,"file":"WebGLFilterBackend.min.mjs","sources":["../../../src/filters/WebGLFilterBackend.ts"],"sourcesContent":["import { config } from '../config';\nimport { createCanvasElement } from '../util/misc/dom';\nimport type {\n TWebGLPipelineState,\n TProgramCache,\n TTextureCache,\n TPipelineResources,\n} from './typedefs';\nimport type { BaseFilter } from './BaseFilter';\n\nexport class WebGLFilterBackend {\n declare tileSize: number;\n\n /**\n * Define ...\n **/\n aPosition: Float32Array = new Float32Array([0, 0, 0, 1, 1, 0, 1, 1]);\n\n /**\n * If GLPut data is the fastest operation, or if forced, this buffer will be used\n * to transfer the data back in the 2d logic\n **/\n declare imageBuffer?: ArrayBuffer;\n\n declare canvas: HTMLCanvasElement;\n\n /**\n * The Webgl context that will execute the operations for filtering\n **/\n declare gl: WebGLRenderingContext;\n\n /**\n * Keyed map for shader cache\n **/\n declare programCache: TProgramCache;\n\n /**\n * Keyed map for texture cache\n **/\n declare textureCache: TTextureCache;\n\n /**\n * Contains GPU info for debug\n **/\n declare gpuInfo: any;\n\n /**\n * Experimental. This object is a sort of repository of help layers used to avoid\n * of recreating them during frequent filtering. If you are previewing a filter with\n * a slider you probably do not want to create help layers every filter step.\n * in this object there will be appended some canvases, created once, resized sometimes\n * cleared never. Clearing is left to the developer.\n **/\n resources: TPipelineResources = {};\n\n constructor({ tileSize = config.textureSize } = {}) {\n this.tileSize = tileSize;\n this.setupGLContext(tileSize, tileSize);\n this.captureGPUInfo();\n }\n\n /**\n * Setup a WebGL context suitable for filtering, and bind any needed event handlers.\n */\n setupGLContext(width: number, height: number): void {\n this.dispose();\n this.createWebGLCanvas(width, height);\n }\n\n /**\n * Create a canvas element and associated WebGL context and attaches them as\n * class properties to the GLFilterBackend class.\n */\n createWebGLCanvas(width: number, height: number): void {\n const canvas = createCanvasElement();\n canvas.width = width;\n canvas.height = height;\n const glOptions = {\n alpha: true,\n premultipliedAlpha: false,\n depth: false,\n stencil: false,\n antialias: false,\n },\n gl = canvas.getContext('webgl', glOptions) as WebGLRenderingContext;\n\n if (!gl) {\n return;\n }\n gl.clearColor(0, 0, 0, 0);\n // this canvas can fire webglcontextlost and webglcontextrestored\n this.canvas = canvas;\n this.gl = gl;\n }\n\n /**\n * Attempts to apply the requested filters to the source provided, drawing the filtered output\n * to the provided target canvas.\n *\n * @param {Array} filters The filters to apply.\n * @param {TexImageSource} source The source to be filtered.\n * @param {Number} width The width of the source input.\n * @param {Number} height The height of the source input.\n * @param {HTMLCanvasElement} targetCanvas The destination for filtered output to be drawn.\n * @param {String|undefined} cacheKey A key used to cache resources related to the source. If\n * omitted, caching will be skipped.\n */\n applyFilters(\n filters: BaseFilter<string, Record<string, any>>[],\n source: TexImageSource,\n width: number,\n height: number,\n targetCanvas: HTMLCanvasElement,\n cacheKey?: string\n ): TWebGLPipelineState | undefined {\n const gl = this.gl;\n const ctx = targetCanvas.getContext('2d');\n if (!gl || !ctx) {\n return;\n }\n let cachedTexture;\n if (cacheKey) {\n cachedTexture = this.getCachedTexture(cacheKey, source);\n }\n const pipelineState: TWebGLPipelineState = {\n originalWidth:\n (source as HTMLImageElement).width ||\n // @ts-expect-error is this a bug? should this be naturalWidth? or is this the pipeline state?\n (source as HTMLImageElement).originalWidth ||\n 0,\n originalHeight:\n (source as HTMLImageElement).height ||\n // @ts-expect-error is this a bug? should this be naturalHeight? or is this the pipeline state?\n (source as HTMLImageElement).originalHeight ||\n 0,\n sourceWidth: width,\n sourceHeight: height,\n destinationWidth: width,\n destinationHeight: height,\n context: gl,\n sourceTexture: this.createTexture(\n gl,\n width,\n height,\n !cachedTexture ? source : undefined\n ),\n targetTexture: this.createTexture(gl, width, height),\n originalTexture:\n cachedTexture ||\n this.createTexture(\n gl,\n width,\n height,\n !cachedTexture ? source : undefined\n )!,\n passes: filters.length,\n webgl: true,\n aPosition: this.aPosition,\n programCache: this.programCache,\n pass: 0,\n filterBackend: this,\n targetCanvas: targetCanvas,\n };\n const tempFbo = gl.createFramebuffer();\n gl.bindFramebuffer(gl.FRAMEBUFFER, tempFbo);\n filters.forEach((filter: any) => {\n filter && filter.applyTo(pipelineState);\n });\n resizeCanvasIfNeeded(pipelineState);\n this.copyGLTo2D(gl, pipelineState);\n gl.bindTexture(gl.TEXTURE_2D, null);\n gl.deleteTexture(pipelineState.sourceTexture);\n gl.deleteTexture(pipelineState.targetTexture);\n gl.deleteFramebuffer(tempFbo);\n ctx.setTransform(1, 0, 0, 1, 0, 0);\n return pipelineState;\n }\n\n /**\n * Detach event listeners, remove references, and clean up caches.\n */\n dispose() {\n if (this.canvas) {\n // we are disposing, we don't care about the fact\n // that the canvas shouldn't be null.\n // @ts-expect-error disposing\n this.canvas = null;\n // @ts-expect-error disposing\n this.gl = null;\n }\n this.clearWebGLCaches();\n }\n\n /**\n * Wipe out WebGL-related caches.\n */\n clearWebGLCaches() {\n this.programCache = {};\n this.textureCache = {};\n }\n\n /**\n * Create a WebGL texture object.\n *\n * Accepts specific dimensions to initialize the texture to or a source image.\n *\n * @param {WebGLRenderingContext} gl The GL context to use for creating the texture.\n * @param {number} width The width to initialize the texture at.\n * @param {number} height The height to initialize the texture.\n * @param {TexImageSource} textureImageSource A source for the texture data.\n * @param {number} filter gl.NEAREST default or gl.LINEAR filters for the texture.\n * This filter is very useful for LUTs filters. If you need interpolation use gl.LINEAR\n * @returns {WebGLTexture}\n */\n createTexture(\n gl: WebGLRenderingContext,\n width: number,\n height: number,\n textureImageSource?: TexImageSource,\n filter?:\n | WebGLRenderingContextBase['NEAREST']\n | WebGLRenderingContextBase['LINEAR']\n ) {\n const {\n NEAREST,\n TEXTURE_2D,\n RGBA,\n UNSIGNED_BYTE,\n CLAMP_TO_EDGE,\n TEXTURE_MAG_FILTER,\n TEXTURE_MIN_FILTER,\n TEXTURE_WRAP_S,\n TEXTURE_WRAP_T,\n } = gl;\n const texture = gl.createTexture();\n gl.bindTexture(TEXTURE_2D, texture);\n gl.texParameteri(TEXTURE_2D, TEXTURE_MAG_FILTER, filter || NEAREST);\n gl.texParameteri(TEXTURE_2D, TEXTURE_MIN_FILTER, filter || NEAREST);\n gl.texParameteri(TEXTURE_2D, TEXTURE_WRAP_S, CLAMP_TO_EDGE);\n gl.texParameteri(TEXTURE_2D, TEXTURE_WRAP_T, CLAMP_TO_EDGE);\n if (textureImageSource) {\n gl.texImage2D(\n TEXTURE_2D,\n 0,\n RGBA,\n RGBA,\n UNSIGNED_BYTE,\n textureImageSource\n );\n } else {\n gl.texImage2D(\n TEXTURE_2D,\n 0,\n RGBA,\n width,\n height,\n 0,\n RGBA,\n UNSIGNED_BYTE,\n null\n );\n }\n return texture;\n }\n\n /**\n * Can be optionally used to get a texture from the cache array\n *\n * If an existing texture is not found, a new texture is created and cached.\n *\n * @param {String} uniqueId A cache key to use to find an existing texture.\n * @param {HTMLImageElement|HTMLCanvasElement} textureImageSource A source to use to create the\n * texture cache entry if one does not already exist.\n */\n getCachedTexture(\n uniqueId: string,\n textureImageSource: TexImageSource,\n filter?:\n | WebGLRenderingContextBase['NEAREST']\n | WebGLRenderingContextBase['LINEAR']\n ): WebGLTexture | null {\n const { textureCache } = this;\n if (textureCache[uniqueId]) {\n return textureCache[uniqueId];\n } else {\n const texture = this.createTexture(\n this.gl,\n (textureImageSource as HTMLImageElement).width,\n (textureImageSource as HTMLImageElement).height,\n textureImageSource,\n filter\n );\n if (texture) {\n textureCache[uniqueId] = texture;\n }\n return texture;\n }\n }\n\n /**\n * Clear out cached resources related to a source image that has been\n * filtered previously.\n *\n * @param {String} cacheKey The cache key provided when the source image was filtered.\n */\n evictCachesForKey(cacheKey: string) {\n if (this.textureCache[cacheKey]) {\n this.gl.deleteTexture(this.textureCache[cacheKey]);\n delete this.textureCache[cacheKey];\n }\n }\n\n /**\n * Copy an input WebGL canvas on to an output 2D canvas.\n *\n * The WebGL canvas is assumed to be upside down, with the top-left pixel of the\n * desired output image appearing in the bottom-left corner of the WebGL canvas.\n *\n * @param {WebGLRenderingContext} sourceContext The WebGL context to copy from.\n * @param {Object} pipelineState The 2D target canvas to copy on to.\n */\n copyGLTo2D(gl: WebGLRenderingContext, pipelineState: TWebGLPipelineState) {\n const glCanvas = gl.canvas,\n targetCanvas = pipelineState.targetCanvas,\n ctx = targetCanvas.getContext('2d');\n if (!ctx) {\n return;\n }\n ctx.translate(0, targetCanvas.height); // move it down again\n ctx.scale(1, -1); // vertical flip\n // where is my image on the big glcanvas?\n const sourceY = glCanvas.height - targetCanvas.height;\n ctx.drawImage(\n glCanvas,\n 0,\n sourceY,\n targetCanvas.width,\n targetCanvas.height,\n 0,\n 0,\n targetCanvas.width,\n targetCanvas.height\n );\n }\n\n /**\n * Copy an input WebGL canvas on to an output 2D canvas using 2d canvas' putImageData\n * API. Measurably faster than using ctx.drawImage in Firefox (version 54 on OSX Sierra).\n *\n * @param {WebGLRenderingContext} sourceContext The WebGL context to copy from.\n * @param {HTMLCanvasElement} targetCanvas The 2D target canvas to copy on to.\n * @param {Object} pipelineState The 2D target canvas to copy on to.\n */\n copyGLTo2DPutImageData(\n this: Required<WebGLFilterBackend>,\n gl: WebGLRenderingContext,\n pipelineState: TWebGLPipelineState\n ) {\n const targetCanvas = pipelineState.targetCanvas,\n ctx = targetCanvas.getContext('2d'),\n dWidth = pipelineState.destinationWidth,\n dHeight = pipelineState.destinationHeight,\n numBytes = dWidth * dHeight * 4;\n if (!ctx) {\n return;\n }\n const u8 = new Uint8Array(this.imageBuffer, 0, numBytes);\n const u8Clamped = new Uint8ClampedArray(this.imageBuffer, 0, numBytes);\n\n gl.readPixels(0, 0, dWidth, dHeight, gl.RGBA, gl.UNSIGNED_BYTE, u8);\n const imgData = new ImageData(u8Clamped, dWidth, dHeight);\n ctx.putImageData(imgData, 0, 0);\n }\n\n /**\n * Attempt to extract GPU information strings from a WebGL context.\n *\n * Useful information when debugging or blacklisting specific GPUs.\n *\n * @returns {Object} A GPU info object with renderer and vendor strings.\n */\n captureGPUInfo() {\n if (this.gpuInfo) {\n return this.gpuInfo;\n }\n const gl = this.gl,\n gpuInfo = { renderer: '', vendor: '' };\n if (!gl) {\n return gpuInfo;\n }\n const ext = gl.getExtension('WEBGL_debug_renderer_info');\n if (ext) {\n const renderer = gl.getParameter(ext.UNMASKED_RENDERER_WEBGL);\n const vendor = gl.getParameter(ext.UNMASKED_VENDOR_WEBGL);\n if (renderer) {\n gpuInfo.renderer = renderer.toLowerCase();\n }\n if (vendor) {\n gpuInfo.vendor = vendor.toLowerCase();\n }\n }\n this.gpuInfo = gpuInfo;\n return gpuInfo;\n }\n}\n\nfunction resizeCanvasIfNeeded(pipelineState: TWebGLPipelineState): void {\n const targetCanvas = pipelineState.targetCanvas,\n width = targetCanvas.width,\n height = targetCanvas.height,\n dWidth = pipelineState.destinationWidth,\n dHeight = pipelineState.destinationHeight;\n\n if (width !== dWidth || height !== dHeight) {\n targetCanvas.width = dWidth;\n targetCanvas.height = dHeight;\n }\n}\n"],"names":["WebGLFilterBackend","constructor","tileSize","config","textureSize","arguments","length","undefined","_defineProperty","this","Float32Array","setupGLContext","captureGPUInfo","width","height","dispose","createWebGLCanvas","canvas","createCanvasElement","gl","getContext","alpha","premultipliedAlpha","depth","stencil","antialias","clearColor","applyFilters","filters","source","targetCanvas","cacheKey","ctx","cachedTexture","getCachedTexture","pipelineState","originalWidth","originalHeight","sourceWidth","sourceHeight","destinationWidth","destinationHeight","context","sourceTexture","createTexture","targetTexture","originalTexture","passes","webgl","aPosition","programCache","pass","filterBackend","tempFbo","createFramebuffer","bindFramebuffer","FRAMEBUFFER","forEach","filter","applyTo","dWidth","dHeight","resizeCanvasIfNeeded","copyGLTo2D","bindTexture","TEXTURE_2D","deleteTexture","deleteFramebuffer","setTransform","clearWebGLCaches","textureCache","textureImageSource","NEAREST","RGBA","UNSIGNED_BYTE","CLAMP_TO_EDGE","TEXTURE_MAG_FILTER","TEXTURE_MIN_FILTER","TEXTURE_WRAP_S","TEXTURE_WRAP_T","texture","texParameteri","texImage2D","uniqueId","evictCachesForKey","glCanvas","translate","scale","sourceY","drawImage","copyGLTo2DPutImageData","numBytes","u8","Uint8Array","imageBuffer","u8Clamped","Uint8ClampedArray","readPixels","imgData","ImageData","putImageData","gpuInfo","renderer","vendor","ext","getExtension","getParameter","UNMASKED_RENDERER_WEBGL","UNMASKED_VENDOR_WEBGL","toLowerCase"],"mappings":"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"}
1
+ {"version":3,"file":"WebGLFilterBackend.min.mjs","sources":["../../../src/filters/WebGLFilterBackend.ts"],"sourcesContent":["import { config } from '../config';\nimport { createCanvasElement } from '../util/misc/dom';\nimport type {\n TWebGLPipelineState,\n TProgramCache,\n TTextureCache,\n TPipelineResources,\n} from './typedefs';\nimport type { BaseFilter } from './BaseFilter';\n\nexport class WebGLFilterBackend {\n declare tileSize: number;\n\n /**\n * Define ...\n **/\n aPosition: Float32Array = new Float32Array([0, 0, 0, 1, 1, 0, 1, 1]);\n\n /**\n * If GLPut data is the fastest operation, or if forced, this buffer will be used\n * to transfer the data back in the 2d logic\n **/\n declare imageBuffer?: ArrayBuffer;\n\n declare canvas: HTMLCanvasElement;\n\n /**\n * The Webgl context that will execute the operations for filtering\n **/\n declare gl: WebGLRenderingContext;\n\n /**\n * Keyed map for shader cache\n **/\n declare programCache: TProgramCache;\n\n /**\n * Keyed map for texture cache\n **/\n declare textureCache: TTextureCache;\n\n /**\n * Contains GPU info for debug\n **/\n declare gpuInfo: any;\n\n /**\n * Experimental. This object is a sort of repository of help layers used to avoid\n * of recreating them during frequent filtering. If you are previewing a filter with\n * a slider you probably do not want to create help layers every filter step.\n * in this object there will be appended some canvases, created once, resized sometimes\n * cleared never. Clearing is left to the developer.\n **/\n resources: TPipelineResources = {};\n\n constructor({ tileSize = config.textureSize } = {}) {\n this.tileSize = tileSize;\n this.setupGLContext(tileSize, tileSize);\n this.captureGPUInfo();\n }\n\n /**\n * Setup a WebGL context suitable for filtering, and bind any needed event handlers.\n */\n setupGLContext(width: number, height: number): void {\n this.dispose();\n this.createWebGLCanvas(width, height);\n }\n\n /**\n * Create a canvas element and associated WebGL context and attaches them as\n * class properties to the GLFilterBackend class.\n */\n createWebGLCanvas(width: number, height: number): void {\n const canvas = createCanvasElement();\n canvas.width = width;\n canvas.height = height;\n const glOptions = {\n alpha: true,\n premultipliedAlpha: false,\n depth: false,\n stencil: false,\n antialias: false,\n },\n gl = canvas.getContext('webgl', glOptions) as WebGLRenderingContext;\n\n if (!gl) {\n return;\n }\n gl.clearColor(0, 0, 0, 0);\n // this canvas can fire webglcontextlost and webglcontextrestored\n this.canvas = canvas;\n this.gl = gl;\n }\n\n /**\n * Attempts to apply the requested filters to the source provided, drawing the filtered output\n * to the provided target canvas.\n *\n * @param {Array} filters The filters to apply.\n * @param {TexImageSource} source The source to be filtered.\n * @param {Number} width The width of the source input.\n * @param {Number} height The height of the source input.\n * @param {HTMLCanvasElement} targetCanvas The destination for filtered output to be drawn.\n * @param {String|undefined} cacheKey A key used to cache resources related to the source. If\n * omitted, caching will be skipped.\n */\n applyFilters(\n filters: BaseFilter<string, Record<string, any>>[],\n source: TexImageSource,\n width: number,\n height: number,\n targetCanvas: HTMLCanvasElement,\n cacheKey?: string,\n ): TWebGLPipelineState | undefined {\n const gl = this.gl;\n const ctx = targetCanvas.getContext('2d');\n if (!gl || !ctx) {\n return;\n }\n let cachedTexture;\n if (cacheKey) {\n cachedTexture = this.getCachedTexture(cacheKey, source);\n }\n const pipelineState: TWebGLPipelineState = {\n originalWidth:\n (source as HTMLImageElement).width ||\n // @ts-expect-error is this a bug? should this be naturalWidth? or is this the pipeline state?\n (source as HTMLImageElement).originalWidth ||\n 0,\n originalHeight:\n (source as HTMLImageElement).height ||\n // @ts-expect-error is this a bug? should this be naturalHeight? or is this the pipeline state?\n (source as HTMLImageElement).originalHeight ||\n 0,\n sourceWidth: width,\n sourceHeight: height,\n destinationWidth: width,\n destinationHeight: height,\n context: gl,\n sourceTexture: this.createTexture(\n gl,\n width,\n height,\n !cachedTexture ? source : undefined,\n ),\n targetTexture: this.createTexture(gl, width, height),\n originalTexture:\n cachedTexture ||\n this.createTexture(\n gl,\n width,\n height,\n !cachedTexture ? source : undefined,\n )!,\n passes: filters.length,\n webgl: true,\n aPosition: this.aPosition,\n programCache: this.programCache,\n pass: 0,\n filterBackend: this,\n targetCanvas: targetCanvas,\n };\n const tempFbo = gl.createFramebuffer();\n gl.bindFramebuffer(gl.FRAMEBUFFER, tempFbo);\n filters.forEach((filter: any) => {\n filter && filter.applyTo(pipelineState);\n });\n resizeCanvasIfNeeded(pipelineState);\n this.copyGLTo2D(gl, pipelineState);\n gl.bindTexture(gl.TEXTURE_2D, null);\n gl.deleteTexture(pipelineState.sourceTexture);\n gl.deleteTexture(pipelineState.targetTexture);\n gl.deleteFramebuffer(tempFbo);\n ctx.setTransform(1, 0, 0, 1, 0, 0);\n return pipelineState;\n }\n\n /**\n * Detach event listeners, remove references, and clean up caches.\n */\n dispose() {\n if (this.canvas) {\n // we are disposing, we don't care about the fact\n // that the canvas shouldn't be null.\n // @ts-expect-error disposing\n this.canvas = null;\n // @ts-expect-error disposing\n this.gl = null;\n }\n this.clearWebGLCaches();\n }\n\n /**\n * Wipe out WebGL-related caches.\n */\n clearWebGLCaches() {\n this.programCache = {};\n this.textureCache = {};\n }\n\n /**\n * Create a WebGL texture object.\n *\n * Accepts specific dimensions to initialize the texture to or a source image.\n *\n * @param {WebGLRenderingContext} gl The GL context to use for creating the texture.\n * @param {number} width The width to initialize the texture at.\n * @param {number} height The height to initialize the texture.\n * @param {TexImageSource} textureImageSource A source for the texture data.\n * @param {number} filter gl.NEAREST default or gl.LINEAR filters for the texture.\n * This filter is very useful for LUTs filters. If you need interpolation use gl.LINEAR\n * @returns {WebGLTexture}\n */\n createTexture(\n gl: WebGLRenderingContext,\n width: number,\n height: number,\n textureImageSource?: TexImageSource,\n filter?:\n | WebGLRenderingContextBase['NEAREST']\n | WebGLRenderingContextBase['LINEAR'],\n ) {\n const {\n NEAREST,\n TEXTURE_2D,\n RGBA,\n UNSIGNED_BYTE,\n CLAMP_TO_EDGE,\n TEXTURE_MAG_FILTER,\n TEXTURE_MIN_FILTER,\n TEXTURE_WRAP_S,\n TEXTURE_WRAP_T,\n } = gl;\n const texture = gl.createTexture();\n gl.bindTexture(TEXTURE_2D, texture);\n gl.texParameteri(TEXTURE_2D, TEXTURE_MAG_FILTER, filter || NEAREST);\n gl.texParameteri(TEXTURE_2D, TEXTURE_MIN_FILTER, filter || NEAREST);\n gl.texParameteri(TEXTURE_2D, TEXTURE_WRAP_S, CLAMP_TO_EDGE);\n gl.texParameteri(TEXTURE_2D, TEXTURE_WRAP_T, CLAMP_TO_EDGE);\n if (textureImageSource) {\n gl.texImage2D(\n TEXTURE_2D,\n 0,\n RGBA,\n RGBA,\n UNSIGNED_BYTE,\n textureImageSource,\n );\n } else {\n gl.texImage2D(\n TEXTURE_2D,\n 0,\n RGBA,\n width,\n height,\n 0,\n RGBA,\n UNSIGNED_BYTE,\n null,\n );\n }\n return texture;\n }\n\n /**\n * Can be optionally used to get a texture from the cache array\n *\n * If an existing texture is not found, a new texture is created and cached.\n *\n * @param {String} uniqueId A cache key to use to find an existing texture.\n * @param {HTMLImageElement|HTMLCanvasElement} textureImageSource A source to use to create the\n * texture cache entry if one does not already exist.\n */\n getCachedTexture(\n uniqueId: string,\n textureImageSource: TexImageSource,\n filter?:\n | WebGLRenderingContextBase['NEAREST']\n | WebGLRenderingContextBase['LINEAR'],\n ): WebGLTexture | null {\n const { textureCache } = this;\n if (textureCache[uniqueId]) {\n return textureCache[uniqueId];\n } else {\n const texture = this.createTexture(\n this.gl,\n (textureImageSource as HTMLImageElement).width,\n (textureImageSource as HTMLImageElement).height,\n textureImageSource,\n filter,\n );\n if (texture) {\n textureCache[uniqueId] = texture;\n }\n return texture;\n }\n }\n\n /**\n * Clear out cached resources related to a source image that has been\n * filtered previously.\n *\n * @param {String} cacheKey The cache key provided when the source image was filtered.\n */\n evictCachesForKey(cacheKey: string) {\n if (this.textureCache[cacheKey]) {\n this.gl.deleteTexture(this.textureCache[cacheKey]);\n delete this.textureCache[cacheKey];\n }\n }\n\n /**\n * Copy an input WebGL canvas on to an output 2D canvas.\n *\n * The WebGL canvas is assumed to be upside down, with the top-left pixel of the\n * desired output image appearing in the bottom-left corner of the WebGL canvas.\n *\n * @param {WebGLRenderingContext} sourceContext The WebGL context to copy from.\n * @param {Object} pipelineState The 2D target canvas to copy on to.\n */\n copyGLTo2D(gl: WebGLRenderingContext, pipelineState: TWebGLPipelineState) {\n const glCanvas = gl.canvas,\n targetCanvas = pipelineState.targetCanvas,\n ctx = targetCanvas.getContext('2d');\n if (!ctx) {\n return;\n }\n ctx.translate(0, targetCanvas.height); // move it down again\n ctx.scale(1, -1); // vertical flip\n // where is my image on the big glcanvas?\n const sourceY = glCanvas.height - targetCanvas.height;\n ctx.drawImage(\n glCanvas,\n 0,\n sourceY,\n targetCanvas.width,\n targetCanvas.height,\n 0,\n 0,\n targetCanvas.width,\n targetCanvas.height,\n );\n }\n\n /**\n * Copy an input WebGL canvas on to an output 2D canvas using 2d canvas' putImageData\n * API. Measurably faster than using ctx.drawImage in Firefox (version 54 on OSX Sierra).\n *\n * @param {WebGLRenderingContext} sourceContext The WebGL context to copy from.\n * @param {HTMLCanvasElement} targetCanvas The 2D target canvas to copy on to.\n * @param {Object} pipelineState The 2D target canvas to copy on to.\n */\n copyGLTo2DPutImageData(\n this: Required<WebGLFilterBackend>,\n gl: WebGLRenderingContext,\n pipelineState: TWebGLPipelineState,\n ) {\n const targetCanvas = pipelineState.targetCanvas,\n ctx = targetCanvas.getContext('2d'),\n dWidth = pipelineState.destinationWidth,\n dHeight = pipelineState.destinationHeight,\n numBytes = dWidth * dHeight * 4;\n if (!ctx) {\n return;\n }\n const u8 = new Uint8Array(this.imageBuffer, 0, numBytes);\n const u8Clamped = new Uint8ClampedArray(this.imageBuffer, 0, numBytes);\n\n gl.readPixels(0, 0, dWidth, dHeight, gl.RGBA, gl.UNSIGNED_BYTE, u8);\n const imgData = new ImageData(u8Clamped, dWidth, dHeight);\n ctx.putImageData(imgData, 0, 0);\n }\n\n /**\n * Attempt to extract GPU information strings from a WebGL context.\n *\n * Useful information when debugging or blacklisting specific GPUs.\n *\n * @returns {Object} A GPU info object with renderer and vendor strings.\n */\n captureGPUInfo() {\n if (this.gpuInfo) {\n return this.gpuInfo;\n }\n const gl = this.gl,\n gpuInfo = { renderer: '', vendor: '' };\n if (!gl) {\n return gpuInfo;\n }\n const ext = gl.getExtension('WEBGL_debug_renderer_info');\n if (ext) {\n const renderer = gl.getParameter(ext.UNMASKED_RENDERER_WEBGL);\n const vendor = gl.getParameter(ext.UNMASKED_VENDOR_WEBGL);\n if (renderer) {\n gpuInfo.renderer = renderer.toLowerCase();\n }\n if (vendor) {\n gpuInfo.vendor = vendor.toLowerCase();\n }\n }\n this.gpuInfo = gpuInfo;\n return gpuInfo;\n }\n}\n\nfunction resizeCanvasIfNeeded(pipelineState: TWebGLPipelineState): void {\n const targetCanvas = pipelineState.targetCanvas,\n width = targetCanvas.width,\n height = targetCanvas.height,\n dWidth = pipelineState.destinationWidth,\n dHeight = pipelineState.destinationHeight;\n\n if (width !== dWidth || height !== dHeight) {\n targetCanvas.width = dWidth;\n targetCanvas.height = dHeight;\n }\n}\n"],"names":["WebGLFilterBackend","constructor","tileSize","config","textureSize","arguments","length","undefined","_defineProperty","this","Float32Array","setupGLContext","captureGPUInfo","width","height","dispose","createWebGLCanvas","canvas","createCanvasElement","gl","getContext","alpha","premultipliedAlpha","depth","stencil","antialias","clearColor","applyFilters","filters","source","targetCanvas","cacheKey","ctx","cachedTexture","getCachedTexture","pipelineState","originalWidth","originalHeight","sourceWidth","sourceHeight","destinationWidth","destinationHeight","context","sourceTexture","createTexture","targetTexture","originalTexture","passes","webgl","aPosition","programCache","pass","filterBackend","tempFbo","createFramebuffer","bindFramebuffer","FRAMEBUFFER","forEach","filter","applyTo","dWidth","dHeight","resizeCanvasIfNeeded","copyGLTo2D","bindTexture","TEXTURE_2D","deleteTexture","deleteFramebuffer","setTransform","clearWebGLCaches","textureCache","textureImageSource","NEAREST","RGBA","UNSIGNED_BYTE","CLAMP_TO_EDGE","TEXTURE_MAG_FILTER","TEXTURE_MIN_FILTER","TEXTURE_WRAP_S","TEXTURE_WRAP_T","texture","texParameteri","texImage2D","uniqueId","evictCachesForKey","glCanvas","translate","scale","sourceY","drawImage","copyGLTo2DPutImageData","numBytes","u8","Uint8Array","imageBuffer","u8Clamped","Uint8ClampedArray","readPixels","imgData","ImageData","putImageData","gpuInfo","renderer","vendor","ext","getExtension","getParameter","UNMASKED_RENDERER_WEBGL","UNMASKED_VENDOR_WEBGL","toLowerCase"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"WebGLFilterBackend.mjs","sources":["../../../src/filters/WebGLFilterBackend.ts"],"sourcesContent":["import { config } from '../config';\nimport { createCanvasElement } from '../util/misc/dom';\nimport type {\n TWebGLPipelineState,\n TProgramCache,\n TTextureCache,\n TPipelineResources,\n} from './typedefs';\nimport type { BaseFilter } from './BaseFilter';\n\nexport class WebGLFilterBackend {\n declare tileSize: number;\n\n /**\n * Define ...\n **/\n aPosition: Float32Array = new Float32Array([0, 0, 0, 1, 1, 0, 1, 1]);\n\n /**\n * If GLPut data is the fastest operation, or if forced, this buffer will be used\n * to transfer the data back in the 2d logic\n **/\n declare imageBuffer?: ArrayBuffer;\n\n declare canvas: HTMLCanvasElement;\n\n /**\n * The Webgl context that will execute the operations for filtering\n **/\n declare gl: WebGLRenderingContext;\n\n /**\n * Keyed map for shader cache\n **/\n declare programCache: TProgramCache;\n\n /**\n * Keyed map for texture cache\n **/\n declare textureCache: TTextureCache;\n\n /**\n * Contains GPU info for debug\n **/\n declare gpuInfo: any;\n\n /**\n * Experimental. This object is a sort of repository of help layers used to avoid\n * of recreating them during frequent filtering. If you are previewing a filter with\n * a slider you probably do not want to create help layers every filter step.\n * in this object there will be appended some canvases, created once, resized sometimes\n * cleared never. Clearing is left to the developer.\n **/\n resources: TPipelineResources = {};\n\n constructor({ tileSize = config.textureSize } = {}) {\n this.tileSize = tileSize;\n this.setupGLContext(tileSize, tileSize);\n this.captureGPUInfo();\n }\n\n /**\n * Setup a WebGL context suitable for filtering, and bind any needed event handlers.\n */\n setupGLContext(width: number, height: number): void {\n this.dispose();\n this.createWebGLCanvas(width, height);\n }\n\n /**\n * Create a canvas element and associated WebGL context and attaches them as\n * class properties to the GLFilterBackend class.\n */\n createWebGLCanvas(width: number, height: number): void {\n const canvas = createCanvasElement();\n canvas.width = width;\n canvas.height = height;\n const glOptions = {\n alpha: true,\n premultipliedAlpha: false,\n depth: false,\n stencil: false,\n antialias: false,\n },\n gl = canvas.getContext('webgl', glOptions) as WebGLRenderingContext;\n\n if (!gl) {\n return;\n }\n gl.clearColor(0, 0, 0, 0);\n // this canvas can fire webglcontextlost and webglcontextrestored\n this.canvas = canvas;\n this.gl = gl;\n }\n\n /**\n * Attempts to apply the requested filters to the source provided, drawing the filtered output\n * to the provided target canvas.\n *\n * @param {Array} filters The filters to apply.\n * @param {TexImageSource} source The source to be filtered.\n * @param {Number} width The width of the source input.\n * @param {Number} height The height of the source input.\n * @param {HTMLCanvasElement} targetCanvas The destination for filtered output to be drawn.\n * @param {String|undefined} cacheKey A key used to cache resources related to the source. If\n * omitted, caching will be skipped.\n */\n applyFilters(\n filters: BaseFilter<string, Record<string, any>>[],\n source: TexImageSource,\n width: number,\n height: number,\n targetCanvas: HTMLCanvasElement,\n cacheKey?: string\n ): TWebGLPipelineState | undefined {\n const gl = this.gl;\n const ctx = targetCanvas.getContext('2d');\n if (!gl || !ctx) {\n return;\n }\n let cachedTexture;\n if (cacheKey) {\n cachedTexture = this.getCachedTexture(cacheKey, source);\n }\n const pipelineState: TWebGLPipelineState = {\n originalWidth:\n (source as HTMLImageElement).width ||\n // @ts-expect-error is this a bug? should this be naturalWidth? or is this the pipeline state?\n (source as HTMLImageElement).originalWidth ||\n 0,\n originalHeight:\n (source as HTMLImageElement).height ||\n // @ts-expect-error is this a bug? should this be naturalHeight? or is this the pipeline state?\n (source as HTMLImageElement).originalHeight ||\n 0,\n sourceWidth: width,\n sourceHeight: height,\n destinationWidth: width,\n destinationHeight: height,\n context: gl,\n sourceTexture: this.createTexture(\n gl,\n width,\n height,\n !cachedTexture ? source : undefined\n ),\n targetTexture: this.createTexture(gl, width, height),\n originalTexture:\n cachedTexture ||\n this.createTexture(\n gl,\n width,\n height,\n !cachedTexture ? source : undefined\n )!,\n passes: filters.length,\n webgl: true,\n aPosition: this.aPosition,\n programCache: this.programCache,\n pass: 0,\n filterBackend: this,\n targetCanvas: targetCanvas,\n };\n const tempFbo = gl.createFramebuffer();\n gl.bindFramebuffer(gl.FRAMEBUFFER, tempFbo);\n filters.forEach((filter: any) => {\n filter && filter.applyTo(pipelineState);\n });\n resizeCanvasIfNeeded(pipelineState);\n this.copyGLTo2D(gl, pipelineState);\n gl.bindTexture(gl.TEXTURE_2D, null);\n gl.deleteTexture(pipelineState.sourceTexture);\n gl.deleteTexture(pipelineState.targetTexture);\n gl.deleteFramebuffer(tempFbo);\n ctx.setTransform(1, 0, 0, 1, 0, 0);\n return pipelineState;\n }\n\n /**\n * Detach event listeners, remove references, and clean up caches.\n */\n dispose() {\n if (this.canvas) {\n // we are disposing, we don't care about the fact\n // that the canvas shouldn't be null.\n // @ts-expect-error disposing\n this.canvas = null;\n // @ts-expect-error disposing\n this.gl = null;\n }\n this.clearWebGLCaches();\n }\n\n /**\n * Wipe out WebGL-related caches.\n */\n clearWebGLCaches() {\n this.programCache = {};\n this.textureCache = {};\n }\n\n /**\n * Create a WebGL texture object.\n *\n * Accepts specific dimensions to initialize the texture to or a source image.\n *\n * @param {WebGLRenderingContext} gl The GL context to use for creating the texture.\n * @param {number} width The width to initialize the texture at.\n * @param {number} height The height to initialize the texture.\n * @param {TexImageSource} textureImageSource A source for the texture data.\n * @param {number} filter gl.NEAREST default or gl.LINEAR filters for the texture.\n * This filter is very useful for LUTs filters. If you need interpolation use gl.LINEAR\n * @returns {WebGLTexture}\n */\n createTexture(\n gl: WebGLRenderingContext,\n width: number,\n height: number,\n textureImageSource?: TexImageSource,\n filter?:\n | WebGLRenderingContextBase['NEAREST']\n | WebGLRenderingContextBase['LINEAR']\n ) {\n const {\n NEAREST,\n TEXTURE_2D,\n RGBA,\n UNSIGNED_BYTE,\n CLAMP_TO_EDGE,\n TEXTURE_MAG_FILTER,\n TEXTURE_MIN_FILTER,\n TEXTURE_WRAP_S,\n TEXTURE_WRAP_T,\n } = gl;\n const texture = gl.createTexture();\n gl.bindTexture(TEXTURE_2D, texture);\n gl.texParameteri(TEXTURE_2D, TEXTURE_MAG_FILTER, filter || NEAREST);\n gl.texParameteri(TEXTURE_2D, TEXTURE_MIN_FILTER, filter || NEAREST);\n gl.texParameteri(TEXTURE_2D, TEXTURE_WRAP_S, CLAMP_TO_EDGE);\n gl.texParameteri(TEXTURE_2D, TEXTURE_WRAP_T, CLAMP_TO_EDGE);\n if (textureImageSource) {\n gl.texImage2D(\n TEXTURE_2D,\n 0,\n RGBA,\n RGBA,\n UNSIGNED_BYTE,\n textureImageSource\n );\n } else {\n gl.texImage2D(\n TEXTURE_2D,\n 0,\n RGBA,\n width,\n height,\n 0,\n RGBA,\n UNSIGNED_BYTE,\n null\n );\n }\n return texture;\n }\n\n /**\n * Can be optionally used to get a texture from the cache array\n *\n * If an existing texture is not found, a new texture is created and cached.\n *\n * @param {String} uniqueId A cache key to use to find an existing texture.\n * @param {HTMLImageElement|HTMLCanvasElement} textureImageSource A source to use to create the\n * texture cache entry if one does not already exist.\n */\n getCachedTexture(\n uniqueId: string,\n textureImageSource: TexImageSource,\n filter?:\n | WebGLRenderingContextBase['NEAREST']\n | WebGLRenderingContextBase['LINEAR']\n ): WebGLTexture | null {\n const { textureCache } = this;\n if (textureCache[uniqueId]) {\n return textureCache[uniqueId];\n } else {\n const texture = this.createTexture(\n this.gl,\n (textureImageSource as HTMLImageElement).width,\n (textureImageSource as HTMLImageElement).height,\n textureImageSource,\n filter\n );\n if (texture) {\n textureCache[uniqueId] = texture;\n }\n return texture;\n }\n }\n\n /**\n * Clear out cached resources related to a source image that has been\n * filtered previously.\n *\n * @param {String} cacheKey The cache key provided when the source image was filtered.\n */\n evictCachesForKey(cacheKey: string) {\n if (this.textureCache[cacheKey]) {\n this.gl.deleteTexture(this.textureCache[cacheKey]);\n delete this.textureCache[cacheKey];\n }\n }\n\n /**\n * Copy an input WebGL canvas on to an output 2D canvas.\n *\n * The WebGL canvas is assumed to be upside down, with the top-left pixel of the\n * desired output image appearing in the bottom-left corner of the WebGL canvas.\n *\n * @param {WebGLRenderingContext} sourceContext The WebGL context to copy from.\n * @param {Object} pipelineState The 2D target canvas to copy on to.\n */\n copyGLTo2D(gl: WebGLRenderingContext, pipelineState: TWebGLPipelineState) {\n const glCanvas = gl.canvas,\n targetCanvas = pipelineState.targetCanvas,\n ctx = targetCanvas.getContext('2d');\n if (!ctx) {\n return;\n }\n ctx.translate(0, targetCanvas.height); // move it down again\n ctx.scale(1, -1); // vertical flip\n // where is my image on the big glcanvas?\n const sourceY = glCanvas.height - targetCanvas.height;\n ctx.drawImage(\n glCanvas,\n 0,\n sourceY,\n targetCanvas.width,\n targetCanvas.height,\n 0,\n 0,\n targetCanvas.width,\n targetCanvas.height\n );\n }\n\n /**\n * Copy an input WebGL canvas on to an output 2D canvas using 2d canvas' putImageData\n * API. Measurably faster than using ctx.drawImage in Firefox (version 54 on OSX Sierra).\n *\n * @param {WebGLRenderingContext} sourceContext The WebGL context to copy from.\n * @param {HTMLCanvasElement} targetCanvas The 2D target canvas to copy on to.\n * @param {Object} pipelineState The 2D target canvas to copy on to.\n */\n copyGLTo2DPutImageData(\n this: Required<WebGLFilterBackend>,\n gl: WebGLRenderingContext,\n pipelineState: TWebGLPipelineState\n ) {\n const targetCanvas = pipelineState.targetCanvas,\n ctx = targetCanvas.getContext('2d'),\n dWidth = pipelineState.destinationWidth,\n dHeight = pipelineState.destinationHeight,\n numBytes = dWidth * dHeight * 4;\n if (!ctx) {\n return;\n }\n const u8 = new Uint8Array(this.imageBuffer, 0, numBytes);\n const u8Clamped = new Uint8ClampedArray(this.imageBuffer, 0, numBytes);\n\n gl.readPixels(0, 0, dWidth, dHeight, gl.RGBA, gl.UNSIGNED_BYTE, u8);\n const imgData = new ImageData(u8Clamped, dWidth, dHeight);\n ctx.putImageData(imgData, 0, 0);\n }\n\n /**\n * Attempt to extract GPU information strings from a WebGL context.\n *\n * Useful information when debugging or blacklisting specific GPUs.\n *\n * @returns {Object} A GPU info object with renderer and vendor strings.\n */\n captureGPUInfo() {\n if (this.gpuInfo) {\n return this.gpuInfo;\n }\n const gl = this.gl,\n gpuInfo = { renderer: '', vendor: '' };\n if (!gl) {\n return gpuInfo;\n }\n const ext = gl.getExtension('WEBGL_debug_renderer_info');\n if (ext) {\n const renderer = gl.getParameter(ext.UNMASKED_RENDERER_WEBGL);\n const vendor = gl.getParameter(ext.UNMASKED_VENDOR_WEBGL);\n if (renderer) {\n gpuInfo.renderer = renderer.toLowerCase();\n }\n if (vendor) {\n gpuInfo.vendor = vendor.toLowerCase();\n }\n }\n this.gpuInfo = gpuInfo;\n return gpuInfo;\n }\n}\n\nfunction resizeCanvasIfNeeded(pipelineState: TWebGLPipelineState): void {\n const targetCanvas = pipelineState.targetCanvas,\n width = targetCanvas.width,\n height = targetCanvas.height,\n dWidth = pipelineState.destinationWidth,\n dHeight = pipelineState.destinationHeight;\n\n if (width !== dWidth || height !== dHeight) {\n targetCanvas.width = dWidth;\n targetCanvas.height = dHeight;\n }\n}\n"],"names":["WebGLFilterBackend","constructor","tileSize","config","textureSize","arguments","length","undefined","_defineProperty","Float32Array","setupGLContext","captureGPUInfo","width","height","dispose","createWebGLCanvas","canvas","createCanvasElement","glOptions","alpha","premultipliedAlpha","depth","stencil","antialias","gl","getContext","clearColor","applyFilters","filters","source","targetCanvas","cacheKey","ctx","cachedTexture","getCachedTexture","pipelineState","originalWidth","originalHeight","sourceWidth","sourceHeight","destinationWidth","destinationHeight","context","sourceTexture","createTexture","targetTexture","originalTexture","passes","webgl","aPosition","programCache","pass","filterBackend","tempFbo","createFramebuffer","bindFramebuffer","FRAMEBUFFER","forEach","filter","applyTo","resizeCanvasIfNeeded","copyGLTo2D","bindTexture","TEXTURE_2D","deleteTexture","deleteFramebuffer","setTransform","clearWebGLCaches","textureCache","textureImageSource","NEAREST","RGBA","UNSIGNED_BYTE","CLAMP_TO_EDGE","TEXTURE_MAG_FILTER","TEXTURE_MIN_FILTER","TEXTURE_WRAP_S","TEXTURE_WRAP_T","texture","texParameteri","texImage2D","uniqueId","evictCachesForKey","glCanvas","translate","scale","sourceY","drawImage","copyGLTo2DPutImageData","dWidth","dHeight","numBytes","u8","Uint8Array","imageBuffer","u8Clamped","Uint8ClampedArray","readPixels","imgData","ImageData","putImageData","gpuInfo","renderer","vendor","ext","getExtension","getParameter","UNMASKED_RENDERER_WEBGL","UNMASKED_VENDOR_WEBGL","toLowerCase"],"mappings":"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"}
1
+ {"version":3,"file":"WebGLFilterBackend.mjs","sources":["../../../src/filters/WebGLFilterBackend.ts"],"sourcesContent":["import { config } from '../config';\nimport { createCanvasElement } from '../util/misc/dom';\nimport type {\n TWebGLPipelineState,\n TProgramCache,\n TTextureCache,\n TPipelineResources,\n} from './typedefs';\nimport type { BaseFilter } from './BaseFilter';\n\nexport class WebGLFilterBackend {\n declare tileSize: number;\n\n /**\n * Define ...\n **/\n aPosition: Float32Array = new Float32Array([0, 0, 0, 1, 1, 0, 1, 1]);\n\n /**\n * If GLPut data is the fastest operation, or if forced, this buffer will be used\n * to transfer the data back in the 2d logic\n **/\n declare imageBuffer?: ArrayBuffer;\n\n declare canvas: HTMLCanvasElement;\n\n /**\n * The Webgl context that will execute the operations for filtering\n **/\n declare gl: WebGLRenderingContext;\n\n /**\n * Keyed map for shader cache\n **/\n declare programCache: TProgramCache;\n\n /**\n * Keyed map for texture cache\n **/\n declare textureCache: TTextureCache;\n\n /**\n * Contains GPU info for debug\n **/\n declare gpuInfo: any;\n\n /**\n * Experimental. This object is a sort of repository of help layers used to avoid\n * of recreating them during frequent filtering. If you are previewing a filter with\n * a slider you probably do not want to create help layers every filter step.\n * in this object there will be appended some canvases, created once, resized sometimes\n * cleared never. Clearing is left to the developer.\n **/\n resources: TPipelineResources = {};\n\n constructor({ tileSize = config.textureSize } = {}) {\n this.tileSize = tileSize;\n this.setupGLContext(tileSize, tileSize);\n this.captureGPUInfo();\n }\n\n /**\n * Setup a WebGL context suitable for filtering, and bind any needed event handlers.\n */\n setupGLContext(width: number, height: number): void {\n this.dispose();\n this.createWebGLCanvas(width, height);\n }\n\n /**\n * Create a canvas element and associated WebGL context and attaches them as\n * class properties to the GLFilterBackend class.\n */\n createWebGLCanvas(width: number, height: number): void {\n const canvas = createCanvasElement();\n canvas.width = width;\n canvas.height = height;\n const glOptions = {\n alpha: true,\n premultipliedAlpha: false,\n depth: false,\n stencil: false,\n antialias: false,\n },\n gl = canvas.getContext('webgl', glOptions) as WebGLRenderingContext;\n\n if (!gl) {\n return;\n }\n gl.clearColor(0, 0, 0, 0);\n // this canvas can fire webglcontextlost and webglcontextrestored\n this.canvas = canvas;\n this.gl = gl;\n }\n\n /**\n * Attempts to apply the requested filters to the source provided, drawing the filtered output\n * to the provided target canvas.\n *\n * @param {Array} filters The filters to apply.\n * @param {TexImageSource} source The source to be filtered.\n * @param {Number} width The width of the source input.\n * @param {Number} height The height of the source input.\n * @param {HTMLCanvasElement} targetCanvas The destination for filtered output to be drawn.\n * @param {String|undefined} cacheKey A key used to cache resources related to the source. If\n * omitted, caching will be skipped.\n */\n applyFilters(\n filters: BaseFilter<string, Record<string, any>>[],\n source: TexImageSource,\n width: number,\n height: number,\n targetCanvas: HTMLCanvasElement,\n cacheKey?: string,\n ): TWebGLPipelineState | undefined {\n const gl = this.gl;\n const ctx = targetCanvas.getContext('2d');\n if (!gl || !ctx) {\n return;\n }\n let cachedTexture;\n if (cacheKey) {\n cachedTexture = this.getCachedTexture(cacheKey, source);\n }\n const pipelineState: TWebGLPipelineState = {\n originalWidth:\n (source as HTMLImageElement).width ||\n // @ts-expect-error is this a bug? should this be naturalWidth? or is this the pipeline state?\n (source as HTMLImageElement).originalWidth ||\n 0,\n originalHeight:\n (source as HTMLImageElement).height ||\n // @ts-expect-error is this a bug? should this be naturalHeight? or is this the pipeline state?\n (source as HTMLImageElement).originalHeight ||\n 0,\n sourceWidth: width,\n sourceHeight: height,\n destinationWidth: width,\n destinationHeight: height,\n context: gl,\n sourceTexture: this.createTexture(\n gl,\n width,\n height,\n !cachedTexture ? source : undefined,\n ),\n targetTexture: this.createTexture(gl, width, height),\n originalTexture:\n cachedTexture ||\n this.createTexture(\n gl,\n width,\n height,\n !cachedTexture ? source : undefined,\n )!,\n passes: filters.length,\n webgl: true,\n aPosition: this.aPosition,\n programCache: this.programCache,\n pass: 0,\n filterBackend: this,\n targetCanvas: targetCanvas,\n };\n const tempFbo = gl.createFramebuffer();\n gl.bindFramebuffer(gl.FRAMEBUFFER, tempFbo);\n filters.forEach((filter: any) => {\n filter && filter.applyTo(pipelineState);\n });\n resizeCanvasIfNeeded(pipelineState);\n this.copyGLTo2D(gl, pipelineState);\n gl.bindTexture(gl.TEXTURE_2D, null);\n gl.deleteTexture(pipelineState.sourceTexture);\n gl.deleteTexture(pipelineState.targetTexture);\n gl.deleteFramebuffer(tempFbo);\n ctx.setTransform(1, 0, 0, 1, 0, 0);\n return pipelineState;\n }\n\n /**\n * Detach event listeners, remove references, and clean up caches.\n */\n dispose() {\n if (this.canvas) {\n // we are disposing, we don't care about the fact\n // that the canvas shouldn't be null.\n // @ts-expect-error disposing\n this.canvas = null;\n // @ts-expect-error disposing\n this.gl = null;\n }\n this.clearWebGLCaches();\n }\n\n /**\n * Wipe out WebGL-related caches.\n */\n clearWebGLCaches() {\n this.programCache = {};\n this.textureCache = {};\n }\n\n /**\n * Create a WebGL texture object.\n *\n * Accepts specific dimensions to initialize the texture to or a source image.\n *\n * @param {WebGLRenderingContext} gl The GL context to use for creating the texture.\n * @param {number} width The width to initialize the texture at.\n * @param {number} height The height to initialize the texture.\n * @param {TexImageSource} textureImageSource A source for the texture data.\n * @param {number} filter gl.NEAREST default or gl.LINEAR filters for the texture.\n * This filter is very useful for LUTs filters. If you need interpolation use gl.LINEAR\n * @returns {WebGLTexture}\n */\n createTexture(\n gl: WebGLRenderingContext,\n width: number,\n height: number,\n textureImageSource?: TexImageSource,\n filter?:\n | WebGLRenderingContextBase['NEAREST']\n | WebGLRenderingContextBase['LINEAR'],\n ) {\n const {\n NEAREST,\n TEXTURE_2D,\n RGBA,\n UNSIGNED_BYTE,\n CLAMP_TO_EDGE,\n TEXTURE_MAG_FILTER,\n TEXTURE_MIN_FILTER,\n TEXTURE_WRAP_S,\n TEXTURE_WRAP_T,\n } = gl;\n const texture = gl.createTexture();\n gl.bindTexture(TEXTURE_2D, texture);\n gl.texParameteri(TEXTURE_2D, TEXTURE_MAG_FILTER, filter || NEAREST);\n gl.texParameteri(TEXTURE_2D, TEXTURE_MIN_FILTER, filter || NEAREST);\n gl.texParameteri(TEXTURE_2D, TEXTURE_WRAP_S, CLAMP_TO_EDGE);\n gl.texParameteri(TEXTURE_2D, TEXTURE_WRAP_T, CLAMP_TO_EDGE);\n if (textureImageSource) {\n gl.texImage2D(\n TEXTURE_2D,\n 0,\n RGBA,\n RGBA,\n UNSIGNED_BYTE,\n textureImageSource,\n );\n } else {\n gl.texImage2D(\n TEXTURE_2D,\n 0,\n RGBA,\n width,\n height,\n 0,\n RGBA,\n UNSIGNED_BYTE,\n null,\n );\n }\n return texture;\n }\n\n /**\n * Can be optionally used to get a texture from the cache array\n *\n * If an existing texture is not found, a new texture is created and cached.\n *\n * @param {String} uniqueId A cache key to use to find an existing texture.\n * @param {HTMLImageElement|HTMLCanvasElement} textureImageSource A source to use to create the\n * texture cache entry if one does not already exist.\n */\n getCachedTexture(\n uniqueId: string,\n textureImageSource: TexImageSource,\n filter?:\n | WebGLRenderingContextBase['NEAREST']\n | WebGLRenderingContextBase['LINEAR'],\n ): WebGLTexture | null {\n const { textureCache } = this;\n if (textureCache[uniqueId]) {\n return textureCache[uniqueId];\n } else {\n const texture = this.createTexture(\n this.gl,\n (textureImageSource as HTMLImageElement).width,\n (textureImageSource as HTMLImageElement).height,\n textureImageSource,\n filter,\n );\n if (texture) {\n textureCache[uniqueId] = texture;\n }\n return texture;\n }\n }\n\n /**\n * Clear out cached resources related to a source image that has been\n * filtered previously.\n *\n * @param {String} cacheKey The cache key provided when the source image was filtered.\n */\n evictCachesForKey(cacheKey: string) {\n if (this.textureCache[cacheKey]) {\n this.gl.deleteTexture(this.textureCache[cacheKey]);\n delete this.textureCache[cacheKey];\n }\n }\n\n /**\n * Copy an input WebGL canvas on to an output 2D canvas.\n *\n * The WebGL canvas is assumed to be upside down, with the top-left pixel of the\n * desired output image appearing in the bottom-left corner of the WebGL canvas.\n *\n * @param {WebGLRenderingContext} sourceContext The WebGL context to copy from.\n * @param {Object} pipelineState The 2D target canvas to copy on to.\n */\n copyGLTo2D(gl: WebGLRenderingContext, pipelineState: TWebGLPipelineState) {\n const glCanvas = gl.canvas,\n targetCanvas = pipelineState.targetCanvas,\n ctx = targetCanvas.getContext('2d');\n if (!ctx) {\n return;\n }\n ctx.translate(0, targetCanvas.height); // move it down again\n ctx.scale(1, -1); // vertical flip\n // where is my image on the big glcanvas?\n const sourceY = glCanvas.height - targetCanvas.height;\n ctx.drawImage(\n glCanvas,\n 0,\n sourceY,\n targetCanvas.width,\n targetCanvas.height,\n 0,\n 0,\n targetCanvas.width,\n targetCanvas.height,\n );\n }\n\n /**\n * Copy an input WebGL canvas on to an output 2D canvas using 2d canvas' putImageData\n * API. Measurably faster than using ctx.drawImage in Firefox (version 54 on OSX Sierra).\n *\n * @param {WebGLRenderingContext} sourceContext The WebGL context to copy from.\n * @param {HTMLCanvasElement} targetCanvas The 2D target canvas to copy on to.\n * @param {Object} pipelineState The 2D target canvas to copy on to.\n */\n copyGLTo2DPutImageData(\n this: Required<WebGLFilterBackend>,\n gl: WebGLRenderingContext,\n pipelineState: TWebGLPipelineState,\n ) {\n const targetCanvas = pipelineState.targetCanvas,\n ctx = targetCanvas.getContext('2d'),\n dWidth = pipelineState.destinationWidth,\n dHeight = pipelineState.destinationHeight,\n numBytes = dWidth * dHeight * 4;\n if (!ctx) {\n return;\n }\n const u8 = new Uint8Array(this.imageBuffer, 0, numBytes);\n const u8Clamped = new Uint8ClampedArray(this.imageBuffer, 0, numBytes);\n\n gl.readPixels(0, 0, dWidth, dHeight, gl.RGBA, gl.UNSIGNED_BYTE, u8);\n const imgData = new ImageData(u8Clamped, dWidth, dHeight);\n ctx.putImageData(imgData, 0, 0);\n }\n\n /**\n * Attempt to extract GPU information strings from a WebGL context.\n *\n * Useful information when debugging or blacklisting specific GPUs.\n *\n * @returns {Object} A GPU info object with renderer and vendor strings.\n */\n captureGPUInfo() {\n if (this.gpuInfo) {\n return this.gpuInfo;\n }\n const gl = this.gl,\n gpuInfo = { renderer: '', vendor: '' };\n if (!gl) {\n return gpuInfo;\n }\n const ext = gl.getExtension('WEBGL_debug_renderer_info');\n if (ext) {\n const renderer = gl.getParameter(ext.UNMASKED_RENDERER_WEBGL);\n const vendor = gl.getParameter(ext.UNMASKED_VENDOR_WEBGL);\n if (renderer) {\n gpuInfo.renderer = renderer.toLowerCase();\n }\n if (vendor) {\n gpuInfo.vendor = vendor.toLowerCase();\n }\n }\n this.gpuInfo = gpuInfo;\n return gpuInfo;\n }\n}\n\nfunction resizeCanvasIfNeeded(pipelineState: TWebGLPipelineState): void {\n const targetCanvas = pipelineState.targetCanvas,\n width = targetCanvas.width,\n height = targetCanvas.height,\n dWidth = pipelineState.destinationWidth,\n dHeight = pipelineState.destinationHeight;\n\n if (width !== dWidth || height !== dHeight) {\n targetCanvas.width = dWidth;\n targetCanvas.height = dHeight;\n }\n}\n"],"names":["WebGLFilterBackend","constructor","tileSize","config","textureSize","arguments","length","undefined","_defineProperty","Float32Array","setupGLContext","captureGPUInfo","width","height","dispose","createWebGLCanvas","canvas","createCanvasElement","glOptions","alpha","premultipliedAlpha","depth","stencil","antialias","gl","getContext","clearColor","applyFilters","filters","source","targetCanvas","cacheKey","ctx","cachedTexture","getCachedTexture","pipelineState","originalWidth","originalHeight","sourceWidth","sourceHeight","destinationWidth","destinationHeight","context","sourceTexture","createTexture","targetTexture","originalTexture","passes","webgl","aPosition","programCache","pass","filterBackend","tempFbo","createFramebuffer","bindFramebuffer","FRAMEBUFFER","forEach","filter","applyTo","resizeCanvasIfNeeded","copyGLTo2D","bindTexture","TEXTURE_2D","deleteTexture","deleteFramebuffer","setTransform","clearWebGLCaches","textureCache","textureImageSource","NEAREST","RGBA","UNSIGNED_BYTE","CLAMP_TO_EDGE","TEXTURE_MAG_FILTER","TEXTURE_MIN_FILTER","TEXTURE_WRAP_S","TEXTURE_WRAP_T","texture","texParameteri","texImage2D","uniqueId","evictCachesForKey","glCanvas","translate","scale","sourceY","drawImage","copyGLTo2DPutImageData","dWidth","dHeight","numBytes","u8","Uint8Array","imageBuffer","u8Clamped","Uint8ClampedArray","readPixels","imgData","ImageData","putImageData","gpuInfo","renderer","vendor","ext","getExtension","getParameter","UNMASKED_RENDERER_WEBGL","UNMASKED_VENDOR_WEBGL","toLowerCase"],"mappings":"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"}
@@ -45,7 +45,6 @@ export type TWebGLProgramCacheItem = {
45
45
  attributeLocations: TWebGLAttributeLocationMap;
46
46
  uniformLocations: TWebGLUniformLocationMap;
47
47
  };
48
- export type TApplyFilterArgs = {};
49
48
  export type TMatColorMatrix = [
50
49
  number,
51
50
  number,
@@ -1 +1 @@
1
- {"version":3,"file":"typedefs.d.ts","sourceRoot":"","sources":["../../../src/filters/typedefs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC/D,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAErE,MAAM,MAAM,aAAa,GAAG,GAAG,CAAC;AAEhC,MAAM,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;AAEzD,MAAM,MAAM,kBAAkB,GAAG;IAC/B,UAAU,CAAC,EAAE,iBAAiB,CAAC;IAC/B,UAAU,CAAC,EAAE,iBAAiB,CAAC;IAC/B,UAAU,CAAC,EAAE,iBAAiB,CAAC;IAC/B,UAAU,CAAC,EAAE,iBAAiB,CAAC;CAChC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAE5B,MAAM,MAAM,mBAAmB,GAAG;IAChC,aAAa,EAAE,kBAAkB,CAAC;IAClC,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,EAAE,MAAM,CAAC;IACzB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,OAAO,EAAE,qBAAqB,CAAC;IAC/B,aAAa,EAAE,YAAY,GAAG,IAAI,CAAC;IACnC,aAAa,EAAE,YAAY,GAAG,IAAI,CAAC;IACnC,eAAe,EAAE,YAAY,CAAC;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,OAAO,CAAC;IACf,SAAS,EAAE,YAAY,CAAC;IACxB,YAAY,EAAE,aAAa,CAAC;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,iBAAiB,CAAC;CACjC,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,qBAAqB,CAAC;IACrC,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,SAAS,EAAE,SAAS,CAAC;IACrB,UAAU,EAAE,iBAAiB,CAAC;IAC9B,iBAAiB,CAAC,EAAE,SAAS,CAAC;IAC9B,GAAG,EAAE,wBAAwB,CAAC;IAC9B,SAAS,CAAC,EAAE,iBAAiB,CAAC;CAC/B,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG,MAAM,CAC3C,MAAM,EACN,oBAAoB,GAAG,IAAI,CAC5B,CAAC;AAEF,MAAM,MAAM,0BAA0B,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAEhE,MAAM,MAAM,sBAAsB,GAAG;IACnC,OAAO,EAAE,YAAY,CAAC;IACtB,kBAAkB,EAAE,0BAA0B,CAAC;IAC/C,gBAAgB,EAAE,wBAAwB,CAAC;CAC5C,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG,EAAE,CAAC;AAElC,MAAM,MAAM,eAAe,GAAG;IAC5B,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;CACP,CAAC"}
1
+ {"version":3,"file":"typedefs.d.ts","sourceRoot":"","sources":["../../../src/filters/typedefs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC/D,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAErE,MAAM,MAAM,aAAa,GAAG,GAAG,CAAC;AAEhC,MAAM,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;AAEzD,MAAM,MAAM,kBAAkB,GAAG;IAC/B,UAAU,CAAC,EAAE,iBAAiB,CAAC;IAC/B,UAAU,CAAC,EAAE,iBAAiB,CAAC;IAC/B,UAAU,CAAC,EAAE,iBAAiB,CAAC;IAC/B,UAAU,CAAC,EAAE,iBAAiB,CAAC;CAChC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAE5B,MAAM,MAAM,mBAAmB,GAAG;IAChC,aAAa,EAAE,kBAAkB,CAAC;IAClC,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,EAAE,MAAM,CAAC;IACzB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,OAAO,EAAE,qBAAqB,CAAC;IAC/B,aAAa,EAAE,YAAY,GAAG,IAAI,CAAC;IACnC,aAAa,EAAE,YAAY,GAAG,IAAI,CAAC;IACnC,eAAe,EAAE,YAAY,CAAC;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,OAAO,CAAC;IACf,SAAS,EAAE,YAAY,CAAC;IACxB,YAAY,EAAE,aAAa,CAAC;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,iBAAiB,CAAC;CACjC,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,qBAAqB,CAAC;IACrC,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,SAAS,EAAE,SAAS,CAAC;IACrB,UAAU,EAAE,iBAAiB,CAAC;IAC9B,iBAAiB,CAAC,EAAE,SAAS,CAAC;IAC9B,GAAG,EAAE,wBAAwB,CAAC;IAC9B,SAAS,CAAC,EAAE,iBAAiB,CAAC;CAC/B,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG,MAAM,CAC3C,MAAM,EACN,oBAAoB,GAAG,IAAI,CAC5B,CAAC;AAEF,MAAM,MAAM,0BAA0B,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAEhE,MAAM,MAAM,sBAAsB,GAAG;IACnC,OAAO,EAAE,YAAY,CAAC;IACtB,kBAAkB,EAAE,0BAA0B,CAAC;IAC/C,gBAAgB,EAAE,wBAAwB,CAAC;CAC5C,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;CACP,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"utils.min.mjs","sources":["../../../src/filters/utils.ts"],"sourcesContent":["import { getFabricWindow } from '../env';\nimport { createCanvasElement } from '../util/misc/dom';\nimport { WebGLFilterBackend } from './WebGLFilterBackend';\nimport type { TWebGLPipelineState, T2DPipelineState } from './typedefs';\n\nexport const isWebGLPipelineState = (\n options: TWebGLPipelineState | T2DPipelineState\n): options is TWebGLPipelineState => {\n return (options as TWebGLPipelineState).webgl !== undefined;\n};\n\n/**\n * Pick a method to copy data from GL context to 2d canvas. In some browsers using\n * drawImage should be faster, but is also bugged for a small combination of old hardware\n * and drivers.\n * putImageData is faster than drawImage for that specific operation.\n */\nexport const isPutImageFaster = (width: number, height: number): boolean => {\n const targetCanvas = createCanvasElement();\n const sourceCanvas = createCanvasElement();\n const gl = sourceCanvas.getContext('webgl')!;\n // eslint-disable-next-line no-undef\n const imageBuffer = new ArrayBuffer(width * height * 4);\n\n const testContext = {\n imageBuffer: imageBuffer,\n } as unknown as Required<WebGLFilterBackend>;\n const testPipelineState = {\n destinationWidth: width,\n destinationHeight: height,\n targetCanvas: targetCanvas,\n } as unknown as TWebGLPipelineState;\n let startTime;\n targetCanvas.width = width;\n targetCanvas.height = height;\n\n startTime = getFabricWindow().performance.now();\n WebGLFilterBackend.prototype.copyGLTo2D.call(\n testContext,\n gl,\n testPipelineState\n );\n const drawImageTime = getFabricWindow().performance.now() - startTime;\n\n startTime = getFabricWindow().performance.now();\n WebGLFilterBackend.prototype.copyGLTo2DPutImageData.call(\n testContext,\n gl,\n testPipelineState\n );\n const putImageDataTime = getFabricWindow().performance.now() - startTime;\n\n return drawImageTime > putImageDataTime;\n};\n"],"names":["isWebGLPipelineState","options","undefined","webgl","isPutImageFaster","width","height","targetCanvas","createCanvasElement","gl","getContext","testContext","imageBuffer","ArrayBuffer","testPipelineState","destinationWidth","destinationHeight","startTime","getFabricWindow","performance","now","WebGLFilterBackend","prototype","copyGLTo2D","call","drawImageTime","copyGLTo2DPutImageData"],"mappings":"wLAKaA,MAAAA,EACXC,QAEkDC,IAA1CD,EAAgCE,MAS7BC,EAAmBA,CAACC,EAAeC,KAC9C,MAAMC,EAAeC,IAEfC,EADeD,IACGE,WAAW,SAI7BC,EAAc,CAClBC,YAHkB,IAAIC,YAAYR,EAAQC,EAAS,IAK/CQ,EAAoB,CACxBC,iBAAkBV,EAClBW,kBAAmBV,EACnBC,aAAcA,GAEhB,IAAIU,EACJV,EAAaF,MAAQA,EACrBE,EAAaD,OAASA,EAEtBW,EAAYC,IAAkBC,YAAYC,MAC1CC,EAAmBC,UAAUC,WAAWC,KACtCb,EACAF,EACAK,GAEF,MAAMW,EAAgBP,IAAkBC,YAAYC,MAAQH,EAE5DA,EAAYC,IAAkBC,YAAYC,MAC1CC,EAAmBC,UAAUI,uBAAuBF,KAClDb,EACAF,EACAK,GAIF,OAAOW,EAFkBP,IAAkBC,YAAYC,MAAQH,CAExB"}
1
+ {"version":3,"file":"utils.min.mjs","sources":["../../../src/filters/utils.ts"],"sourcesContent":["import { getFabricWindow } from '../env';\nimport { createCanvasElement } from '../util/misc/dom';\nimport { WebGLFilterBackend } from './WebGLFilterBackend';\nimport type { TWebGLPipelineState, T2DPipelineState } from './typedefs';\n\nexport const isWebGLPipelineState = (\n options: TWebGLPipelineState | T2DPipelineState,\n): options is TWebGLPipelineState => {\n return (options as TWebGLPipelineState).webgl !== undefined;\n};\n\n/**\n * Pick a method to copy data from GL context to 2d canvas. In some browsers using\n * drawImage should be faster, but is also bugged for a small combination of old hardware\n * and drivers.\n * putImageData is faster than drawImage for that specific operation.\n */\nexport const isPutImageFaster = (width: number, height: number): boolean => {\n const targetCanvas = createCanvasElement();\n const sourceCanvas = createCanvasElement();\n const gl = sourceCanvas.getContext('webgl')!;\n // eslint-disable-next-line no-undef\n const imageBuffer = new ArrayBuffer(width * height * 4);\n\n const testContext = {\n imageBuffer: imageBuffer,\n } as unknown as Required<WebGLFilterBackend>;\n const testPipelineState = {\n destinationWidth: width,\n destinationHeight: height,\n targetCanvas: targetCanvas,\n } as unknown as TWebGLPipelineState;\n let startTime;\n targetCanvas.width = width;\n targetCanvas.height = height;\n\n startTime = getFabricWindow().performance.now();\n WebGLFilterBackend.prototype.copyGLTo2D.call(\n testContext,\n gl,\n testPipelineState,\n );\n const drawImageTime = getFabricWindow().performance.now() - startTime;\n\n startTime = getFabricWindow().performance.now();\n WebGLFilterBackend.prototype.copyGLTo2DPutImageData.call(\n testContext,\n gl,\n testPipelineState,\n );\n const putImageDataTime = getFabricWindow().performance.now() - startTime;\n\n return drawImageTime > putImageDataTime;\n};\n"],"names":["isWebGLPipelineState","options","undefined","webgl","isPutImageFaster","width","height","targetCanvas","createCanvasElement","gl","getContext","testContext","imageBuffer","ArrayBuffer","testPipelineState","destinationWidth","destinationHeight","startTime","getFabricWindow","performance","now","WebGLFilterBackend","prototype","copyGLTo2D","call","drawImageTime","copyGLTo2DPutImageData"],"mappings":"wLAKaA,MAAAA,EACXC,QAEkDC,IAA1CD,EAAgCE,MAS7BC,EAAmBA,CAACC,EAAeC,KAC9C,MAAMC,EAAeC,IAEfC,EADeD,IACGE,WAAW,SAI7BC,EAAc,CAClBC,YAHkB,IAAIC,YAAYR,EAAQC,EAAS,IAK/CQ,EAAoB,CACxBC,iBAAkBV,EAClBW,kBAAmBV,EACnBC,aAAcA,GAEhB,IAAIU,EACJV,EAAaF,MAAQA,EACrBE,EAAaD,OAASA,EAEtBW,EAAYC,IAAkBC,YAAYC,MAC1CC,EAAmBC,UAAUC,WAAWC,KACtCb,EACAF,EACAK,GAEF,MAAMW,EAAgBP,IAAkBC,YAAYC,MAAQH,EAE5DA,EAAYC,IAAkBC,YAAYC,MAC1CC,EAAmBC,UAAUI,uBAAuBF,KAClDb,EACAF,EACAK,GAIF,OAAOW,EAFkBP,IAAkBC,YAAYC,MAAQH,CAExB"}
@@ -1 +1 @@
1
- {"version":3,"file":"utils.mjs","sources":["../../../src/filters/utils.ts"],"sourcesContent":["import { getFabricWindow } from '../env';\nimport { createCanvasElement } from '../util/misc/dom';\nimport { WebGLFilterBackend } from './WebGLFilterBackend';\nimport type { TWebGLPipelineState, T2DPipelineState } from './typedefs';\n\nexport const isWebGLPipelineState = (\n options: TWebGLPipelineState | T2DPipelineState\n): options is TWebGLPipelineState => {\n return (options as TWebGLPipelineState).webgl !== undefined;\n};\n\n/**\n * Pick a method to copy data from GL context to 2d canvas. In some browsers using\n * drawImage should be faster, but is also bugged for a small combination of old hardware\n * and drivers.\n * putImageData is faster than drawImage for that specific operation.\n */\nexport const isPutImageFaster = (width: number, height: number): boolean => {\n const targetCanvas = createCanvasElement();\n const sourceCanvas = createCanvasElement();\n const gl = sourceCanvas.getContext('webgl')!;\n // eslint-disable-next-line no-undef\n const imageBuffer = new ArrayBuffer(width * height * 4);\n\n const testContext = {\n imageBuffer: imageBuffer,\n } as unknown as Required<WebGLFilterBackend>;\n const testPipelineState = {\n destinationWidth: width,\n destinationHeight: height,\n targetCanvas: targetCanvas,\n } as unknown as TWebGLPipelineState;\n let startTime;\n targetCanvas.width = width;\n targetCanvas.height = height;\n\n startTime = getFabricWindow().performance.now();\n WebGLFilterBackend.prototype.copyGLTo2D.call(\n testContext,\n gl,\n testPipelineState\n );\n const drawImageTime = getFabricWindow().performance.now() - startTime;\n\n startTime = getFabricWindow().performance.now();\n WebGLFilterBackend.prototype.copyGLTo2DPutImageData.call(\n testContext,\n gl,\n testPipelineState\n );\n const putImageDataTime = getFabricWindow().performance.now() - startTime;\n\n return drawImageTime > putImageDataTime;\n};\n"],"names":["isWebGLPipelineState","options","webgl","undefined","isPutImageFaster","width","height","targetCanvas","createCanvasElement","sourceCanvas","gl","getContext","imageBuffer","ArrayBuffer","testContext","testPipelineState","destinationWidth","destinationHeight","startTime","getFabricWindow","performance","now","WebGLFilterBackend","prototype","copyGLTo2D","call","drawImageTime","copyGLTo2DPutImageData","putImageDataTime"],"mappings":";;;;AAKaA,MAAAA,oBAAoB,GAC/BC,OAA+C,IACZ;AACnC,EAAA,OAAQA,OAAO,CAAyBC,KAAK,KAAKC,SAAS,CAAA;AAC7D,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA;MACaC,gBAAgB,GAAGA,CAACC,KAAa,EAAEC,MAAc,KAAc;AAC1E,EAAA,MAAMC,YAAY,GAAGC,mBAAmB,EAAE,CAAA;AAC1C,EAAA,MAAMC,YAAY,GAAGD,mBAAmB,EAAE,CAAA;AAC1C,EAAA,MAAME,EAAE,GAAGD,YAAY,CAACE,UAAU,CAAC,OAAO,CAAE,CAAA;AAC5C;EACA,MAAMC,WAAW,GAAG,IAAIC,WAAW,CAACR,KAAK,GAAGC,MAAM,GAAG,CAAC,CAAC,CAAA;AAEvD,EAAA,MAAMQ,WAAW,GAAG;AAClBF,IAAAA,WAAW,EAAEA,WAAAA;GAC6B,CAAA;AAC5C,EAAA,MAAMG,iBAAiB,GAAG;AACxBC,IAAAA,gBAAgB,EAAEX,KAAK;AACvBY,IAAAA,iBAAiB,EAAEX,MAAM;AACzBC,IAAAA,YAAY,EAAEA,YAAAA;GACmB,CAAA;AACnC,EAAA,IAAIW,SAAS,CAAA;EACbX,YAAY,CAACF,KAAK,GAAGA,KAAK,CAAA;EAC1BE,YAAY,CAACD,MAAM,GAAGA,MAAM,CAAA;EAE5BY,SAAS,GAAGC,eAAe,EAAE,CAACC,WAAW,CAACC,GAAG,EAAE,CAAA;AAC/CC,EAAAA,kBAAkB,CAACC,SAAS,CAACC,UAAU,CAACC,IAAI,CAC1CX,WAAW,EACXJ,EAAE,EACFK,iBACF,CAAC,CAAA;AACD,EAAA,MAAMW,aAAa,GAAGP,eAAe,EAAE,CAACC,WAAW,CAACC,GAAG,EAAE,GAAGH,SAAS,CAAA;EAErEA,SAAS,GAAGC,eAAe,EAAE,CAACC,WAAW,CAACC,GAAG,EAAE,CAAA;AAC/CC,EAAAA,kBAAkB,CAACC,SAAS,CAACI,sBAAsB,CAACF,IAAI,CACtDX,WAAW,EACXJ,EAAE,EACFK,iBACF,CAAC,CAAA;AACD,EAAA,MAAMa,gBAAgB,GAAGT,eAAe,EAAE,CAACC,WAAW,CAACC,GAAG,EAAE,GAAGH,SAAS,CAAA;EAExE,OAAOQ,aAAa,GAAGE,gBAAgB,CAAA;AACzC;;;;"}
1
+ {"version":3,"file":"utils.mjs","sources":["../../../src/filters/utils.ts"],"sourcesContent":["import { getFabricWindow } from '../env';\nimport { createCanvasElement } from '../util/misc/dom';\nimport { WebGLFilterBackend } from './WebGLFilterBackend';\nimport type { TWebGLPipelineState, T2DPipelineState } from './typedefs';\n\nexport const isWebGLPipelineState = (\n options: TWebGLPipelineState | T2DPipelineState,\n): options is TWebGLPipelineState => {\n return (options as TWebGLPipelineState).webgl !== undefined;\n};\n\n/**\n * Pick a method to copy data from GL context to 2d canvas. In some browsers using\n * drawImage should be faster, but is also bugged for a small combination of old hardware\n * and drivers.\n * putImageData is faster than drawImage for that specific operation.\n */\nexport const isPutImageFaster = (width: number, height: number): boolean => {\n const targetCanvas = createCanvasElement();\n const sourceCanvas = createCanvasElement();\n const gl = sourceCanvas.getContext('webgl')!;\n // eslint-disable-next-line no-undef\n const imageBuffer = new ArrayBuffer(width * height * 4);\n\n const testContext = {\n imageBuffer: imageBuffer,\n } as unknown as Required<WebGLFilterBackend>;\n const testPipelineState = {\n destinationWidth: width,\n destinationHeight: height,\n targetCanvas: targetCanvas,\n } as unknown as TWebGLPipelineState;\n let startTime;\n targetCanvas.width = width;\n targetCanvas.height = height;\n\n startTime = getFabricWindow().performance.now();\n WebGLFilterBackend.prototype.copyGLTo2D.call(\n testContext,\n gl,\n testPipelineState,\n );\n const drawImageTime = getFabricWindow().performance.now() - startTime;\n\n startTime = getFabricWindow().performance.now();\n WebGLFilterBackend.prototype.copyGLTo2DPutImageData.call(\n testContext,\n gl,\n testPipelineState,\n );\n const putImageDataTime = getFabricWindow().performance.now() - startTime;\n\n return drawImageTime > putImageDataTime;\n};\n"],"names":["isWebGLPipelineState","options","webgl","undefined","isPutImageFaster","width","height","targetCanvas","createCanvasElement","sourceCanvas","gl","getContext","imageBuffer","ArrayBuffer","testContext","testPipelineState","destinationWidth","destinationHeight","startTime","getFabricWindow","performance","now","WebGLFilterBackend","prototype","copyGLTo2D","call","drawImageTime","copyGLTo2DPutImageData","putImageDataTime"],"mappings":";;;;AAKaA,MAAAA,oBAAoB,GAC/BC,OAA+C,IACZ;AACnC,EAAA,OAAQA,OAAO,CAAyBC,KAAK,KAAKC,SAAS,CAAA;AAC7D,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA;MACaC,gBAAgB,GAAGA,CAACC,KAAa,EAAEC,MAAc,KAAc;AAC1E,EAAA,MAAMC,YAAY,GAAGC,mBAAmB,EAAE,CAAA;AAC1C,EAAA,MAAMC,YAAY,GAAGD,mBAAmB,EAAE,CAAA;AAC1C,EAAA,MAAME,EAAE,GAAGD,YAAY,CAACE,UAAU,CAAC,OAAO,CAAE,CAAA;AAC5C;EACA,MAAMC,WAAW,GAAG,IAAIC,WAAW,CAACR,KAAK,GAAGC,MAAM,GAAG,CAAC,CAAC,CAAA;AAEvD,EAAA,MAAMQ,WAAW,GAAG;AAClBF,IAAAA,WAAW,EAAEA,WAAAA;GAC6B,CAAA;AAC5C,EAAA,MAAMG,iBAAiB,GAAG;AACxBC,IAAAA,gBAAgB,EAAEX,KAAK;AACvBY,IAAAA,iBAAiB,EAAEX,MAAM;AACzBC,IAAAA,YAAY,EAAEA,YAAAA;GACmB,CAAA;AACnC,EAAA,IAAIW,SAAS,CAAA;EACbX,YAAY,CAACF,KAAK,GAAGA,KAAK,CAAA;EAC1BE,YAAY,CAACD,MAAM,GAAGA,MAAM,CAAA;EAE5BY,SAAS,GAAGC,eAAe,EAAE,CAACC,WAAW,CAACC,GAAG,EAAE,CAAA;AAC/CC,EAAAA,kBAAkB,CAACC,SAAS,CAACC,UAAU,CAACC,IAAI,CAC1CX,WAAW,EACXJ,EAAE,EACFK,iBACF,CAAC,CAAA;AACD,EAAA,MAAMW,aAAa,GAAGP,eAAe,EAAE,CAACC,WAAW,CAACC,GAAG,EAAE,GAAGH,SAAS,CAAA;EAErEA,SAAS,GAAGC,eAAe,EAAE,CAACC,WAAW,CAACC,GAAG,EAAE,CAAA;AAC/CC,EAAAA,kBAAkB,CAACC,SAAS,CAACI,sBAAsB,CAACF,IAAI,CACtDX,WAAW,EACXJ,EAAE,EACFK,iBACF,CAAC,CAAA;AACD,EAAA,MAAMa,gBAAgB,GAAGT,eAAe,EAAE,CAACC,WAAW,CAACC,GAAG,EAAE,GAAGH,SAAS,CAAA;EAExE,OAAOQ,aAAa,GAAGE,gBAAgB,CAAA;AACzC;;;;"}
@@ -66,7 +66,7 @@ export declare class Gradient<S, T extends GradientType = S extends GradientType
66
66
  */
67
67
  readonly id: string | number;
68
68
  static type: string;
69
- constructor({ type, gradientUnits, coords, colorStops, offsetX, offsetY, gradientTransform, id, }: GradientOptions<T>);
69
+ constructor(options: GradientOptions<T>);
70
70
  /**
71
71
  * Adds another colorStop
72
72
  * @param {Record<string, string>} colorStop Object with offset and color
@@ -81,7 +81,11 @@ export declare class Gradient<S, T extends GradientType = S extends GradientType
81
81
  toObject(propertiesToInclude?: (keyof this | string)[]): Partial<this> & {
82
82
  type: T;
83
83
  coords: GradientCoords<T>;
84
- colorStops: ColorStop[];
84
+ colorStops: {
85
+ color: string;
86
+ offset: number;
87
+ opacity?: number;
88
+ }[];
85
89
  offsetX: number;
86
90
  offsetY: number;
87
91
  gradientUnits: GradientUnits;
@@ -92,7 +96,7 @@ export declare class Gradient<S, T extends GradientType = S extends GradientType
92
96
  * @param {FabricObject} object Object to create a gradient for
93
97
  * @return {String} SVG representation of an gradient (linear/radial)
94
98
  */
95
- toSVG(object: FabricObject, { additionalTransform: preTransform }?: {
99
+ toSVG(object: FabricObject, { additionalTransform: preTransform, }?: {
96
100
  additionalTransform?: string;
97
101
  }): string;
98
102
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"Gradient.d.ts","sourceRoot":"","sources":["../../../src/gradient/Gradient.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAClE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAQ1C,OAAO,KAAK,EACV,SAAS,EACT,cAAc,EACd,eAAe,EACf,YAAY,EACZ,aAAa,EACb,UAAU,EACX,MAAM,YAAY,CAAC;AAIpB;;;;GAIG;AACH,qBAAa,QAAQ,CACnB,CAAC,EACD,CAAC,SAAS,YAAY,GAAG,CAAC,SAAS,YAAY,GAAG,CAAC,GAAG,QAAQ;IAE9D;;;;OAIG;IACK,OAAO,EAAE,MAAM,CAAC;IAExB;;;;OAIG;IACK,OAAO,EAAE,MAAM,CAAC;IAExB;;;;;;;OAOG;IACK,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAEnC;;;;;;;;OAQG;IACK,aAAa,EAAE,aAAa,CAAC;IAErC;;;;OAIG;IACK,IAAI,EAAE,CAAC,CAAC;IAEhB;;;OAGG;IACK,MAAM,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC;IAElC;;;;OAIG;IACK,UAAU,EAAE,SAAS,EAAE,CAAC;IAEhC;;;OAGG;IACK,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAEpC;;;OAGG;IACH,SAAiB,EAAE,EAAE,MAAM,GAAG,MAAM,CAAC;IAErC,MAAM,CAAC,IAAI,SAAc;gBAEb,EACV,IAAoB,EACpB,aAAwB,EACxB,MAAW,EACX,UAAe,EACf,OAAW,EACX,OAAW,EACX,iBAAiB,EACjB,EAAE,GACH,EAAE,eAAe,CAAC,CAAC,CAAC;IAkBrB;;;;OAIG;IACH,YAAY,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAY/C;;;;OAIG;IACH,QAAQ,CAAC,mBAAmB,CAAC,EAAE,CAAC,MAAM,IAAI,GAAG,MAAM,CAAC,EAAE;;;;;;;;;IAgBtD;;;;OAIG;IACH,KAAK,CACH,MAAM,EAAE,YAAY,EACpB,EAAE,mBAAmB,EAAE,YAAY,EAAE,GAAE;QAAE,mBAAmB,CAAC,EAAE,MAAM,CAAA;KAAO;IAuH9E;;;;OAIG;IACH,MAAM,CAAC,GAAG,EAAE,wBAAwB,GAAG,cAAc;WA0BxC,UAAU,CACrB,OAAO,EAAE,eAAe,CAAC,QAAQ,CAAC,GACjC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;WACjB,UAAU,CACrB,OAAO,EAAE,eAAe,CAAC,QAAQ,CAAC,GACjC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAQ9B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA2CG;IACH,MAAM,CAAC,WAAW,CAChB,EAAE,EAAE,kBAAkB,EACtB,QAAQ,EAAE,YAAY,EACtB,UAAU,EAAE,UAAU,GACrB,QAAQ,CAAC,YAAY,CAAC;CA2B1B"}
1
+ {"version":3,"file":"Gradient.d.ts","sourceRoot":"","sources":["../../../src/gradient/Gradient.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAClE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAQ1C,OAAO,KAAK,EACV,SAAS,EACT,cAAc,EACd,eAAe,EACf,YAAY,EACZ,aAAa,EACb,UAAU,EACX,MAAM,YAAY,CAAC;AAIpB;;;;GAIG;AACH,qBAAa,QAAQ,CACnB,CAAC,EACD,CAAC,SAAS,YAAY,GAAG,CAAC,SAAS,YAAY,GAAG,CAAC,GAAG,QAAQ;IAE9D;;;;OAIG;IACK,OAAO,EAAE,MAAM,CAAC;IAExB;;;;OAIG;IACK,OAAO,EAAE,MAAM,CAAC;IAExB;;;;;;;OAOG;IACK,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAEnC;;;;;;;;OAQG;IACK,aAAa,EAAE,aAAa,CAAC;IAErC;;;;OAIG;IACK,IAAI,EAAE,CAAC,CAAC;IAEhB;;;OAGG;IACK,MAAM,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC;IAElC;;;;OAIG;IACK,UAAU,EAAE,SAAS,EAAE,CAAC;IAEhC;;;OAGG;IACK,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAEpC;;;OAGG;IACH,SAAiB,EAAE,EAAE,MAAM,GAAG,MAAM,CAAC;IAErC,MAAM,CAAC,IAAI,SAAc;gBAEb,OAAO,EAAE,eAAe,CAAC,CAAC,CAAC;IA0BvC;;;;OAIG;IACH,YAAY,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAY/C;;;;OAIG;IACH,QAAQ,CAAC,mBAAmB,CAAC,EAAE,CAAC,MAAM,IAAI,GAAG,MAAM,CAAC,EAAE;;;;;;;;;;;;;IAgBtD;;;;OAIG;IACH,KAAK,CACH,MAAM,EAAE,YAAY,EACpB,EACE,mBAAmB,EAAE,YAAY,GAClC,GAAE;QAAE,mBAAmB,CAAC,EAAE,MAAM,CAAA;KAAO;IAuH1C;;;;OAIG;IACH,MAAM,CAAC,GAAG,EAAE,wBAAwB,GAAG,cAAc;WAmBxC,UAAU,CACrB,OAAO,EAAE,eAAe,CAAC,QAAQ,CAAC,GACjC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;WACjB,UAAU,CACrB,OAAO,EAAE,eAAe,CAAC,QAAQ,CAAC,GACjC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAe9B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA2CG;IACH,MAAM,CAAC,WAAW,CAChB,EAAE,EAAE,kBAAkB,EACtB,QAAQ,EAAE,YAAY,EACtB,UAAU,EAAE,UAAU,GACrB,QAAQ,CAAC,YAAY,CAAC;CA2B1B"}
@@ -1,2 +1,2 @@
1
- import{defineProperty as t,objectSpread2 as o}from"../../_virtual/_rollupPluginBabelHelpers.min.mjs";import{Color as s}from"../color/Color.min.mjs";import{iMatrix as i}from"../constants.min.mjs";import{parseTransformAttribute as r}from"../parser/parseTransformAttribute.min.mjs";import{uid as e}from"../util/internals/uid.min.mjs";import{pick as n}from"../util/misc/pick.min.mjs";import{matrixToSVG as a}from"../util/misc/svgParsing.min.mjs";import{radialDefaultCoords as f,linearDefaultCoords as c}from"./constants.min.mjs";import{parseColorStops as m}from"./parser/parseColorStops.min.mjs";import{parseCoords as p}from"./parser/parseCoords.min.mjs";import{parseGradientUnits as h,parseType as d}from"./parser/misc.min.mjs";import{classRegistry as l}from"../ClassRegistry.min.mjs";import{isPath as g}from"../util/typeAssertions.min.mjs";class y{constructor(t){let{type:s="linear",gradientUnits:i="pixels",coords:r={},colorStops:n=[],offsetX:a=0,offsetY:m=0,gradientTransform:p,id:h}=t;this.id=h?"".concat(h,"_").concat(e()):e(),this.type=s,this.gradientUnits=i,this.gradientTransform=p,this.offsetX=a,this.offsetY=m,this.coords=o(o({},"radial"===this.type?f:c),r),this.colorStops=n.slice()}addColorStop(t){for(const o in t){const i=new s(t[o]);this.colorStops.push({offset:parseFloat(o),color:i.toRgb(),opacity:i.getAlpha()})}return this}toObject(t){return o(o({},n(this,t)),{},{type:this.type,coords:this.coords,colorStops:this.colorStops,offsetX:this.offsetX,offsetY:this.offsetY,gradientUnits:this.gradientUnits,gradientTransform:this.gradientTransform?[...this.gradientTransform]:void 0})}toSVG(t){let{additionalTransform:s}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const r=[],e=this.gradientTransform?this.gradientTransform.concat():i.concat(),n="pixels"===this.gradientUnits?"userSpaceOnUse":"objectBoundingBox",f=this.colorStops.map((t=>o({},t))).sort(((t,o)=>t.offset-o.offset));let c=-this.offsetX,m=-this.offsetY;"objectBoundingBox"===n?(c/=t.width,m/=t.height):(c+=t.width/2,m+=t.height/2),g(t)&&"percentage"!==this.gradientUnits&&(c-=t.pathOffset.x,m-=t.pathOffset.y),e[4]-=c,e[5]-=m;const p=['id="SVGID_'.concat(this.id,'"'),'gradientUnits="'.concat(n,'"'),'gradientTransform="'.concat(s?s+" ":"").concat(a(e),'"'),""].join(" ");if("linear"===this.type){const{x1:t,y1:o,x2:s,y2:i}=this.coords;r.push("<linearGradient ",p,' x1="',t,'" y1="',o,'" x2="',s,'" y2="',i,'">\n')}else if("radial"===this.type){const{x1:t,y1:o,x2:s,y2:i,r1:e,r2:n}=this.coords,a=e>n;r.push("<radialGradient ",p,' cx="',a?t:s,'" cy="',a?o:i,'" r="',a?e:n,'" fx="',a?s:t,'" fy="',a?i:o,'">\n'),a&&(f.reverse(),f.forEach((t=>{t.offset=1-t.offset})));const c=Math.min(e,n);if(c>0){const t=c/Math.max(e,n);f.forEach((o=>{o.offset+=t*(1-o.offset)}))}}return f.forEach((t=>{let{color:o,offset:s,opacity:i}=t;r.push("<stop ",'offset="',100*s+"%",'" style="stop-color:',o,void 0!==i?";stop-opacity: "+i:";",'"/>\n')})),r.push("linear"===this.type?"</linearGradient>":"</radialGradient>","\n"),r.join("")}toLive(t){const o=this.coords,i="linear"===this.type?t.createLinearGradient(o.x1,o.y1,o.x2,o.y2):t.createRadialGradient(o.x1,o.y1,o.r1,o.x2,o.y2,o.r2);return this.colorStops.forEach((t=>{let{color:o,opacity:r,offset:e}=t;i.addColorStop(e,void 0!==r?new s(o).setAlpha(r).toRgba():o)})),i}static async fromObject(t){return new this(t)}static fromElement(t,s,i){const e=h(t),n=s._findCenterFromElement();return new this(o({id:t.getAttribute("id")||void 0,type:d(t),coords:p(t,{width:i.viewBoxWidth||i.width,height:i.viewBoxHeight||i.height}),colorStops:m(t,i.opacity),gradientUnits:e,gradientTransform:r(t.getAttribute("gradientTransform")||"")},"pixels"===e?{offsetX:s.width/2-n.x,offsetY:s.height/2-n.y}:{offsetX:0,offsetY:0}))}}t(y,"type","Gradient"),l.setClass(y,"gradient"),l.setClass(y,"linear"),l.setClass(y,"radial");export{y as Gradient};
1
+ import{defineProperty as t,objectSpread2 as o}from"../../_virtual/_rollupPluginBabelHelpers.min.mjs";import{Color as s}from"../color/Color.min.mjs";import{iMatrix as r}from"../constants.min.mjs";import{parseTransformAttribute as i}from"../parser/parseTransformAttribute.min.mjs";import{uid as e}from"../util/internals/uid.min.mjs";import{pick as n}from"../util/misc/pick.min.mjs";import{matrixToSVG as a}from"../util/misc/svgParsing.min.mjs";import{radialDefaultCoords as f,linearDefaultCoords as c}from"./constants.min.mjs";import{parseColorStops as m}from"./parser/parseColorStops.min.mjs";import{parseCoords as p}from"./parser/parseCoords.min.mjs";import{parseGradientUnits as d,parseType as l}from"./parser/misc.min.mjs";import{classRegistry as h}from"../ClassRegistry.min.mjs";import{isPath as g}from"../util/typeAssertions.min.mjs";class y{constructor(t){const{type:s="linear",gradientUnits:r="pixels",coords:i={},colorStops:n=[],offsetX:a=0,offsetY:m=0,gradientTransform:p,id:d}=t||{};Object.assign(this,{type:s,gradientUnits:r,coords:o(o({},"radial"===s?f:c),i),colorStops:n,offsetX:a,offsetY:m,gradientTransform:p,id:d?"".concat(d,"_").concat(e()):e()})}addColorStop(t){for(const o in t){const r=new s(t[o]);this.colorStops.push({offset:parseFloat(o),color:r.toRgb(),opacity:r.getAlpha()})}return this}toObject(t){return o(o({},n(this,t)),{},{type:this.type,coords:o({},this.coords),colorStops:this.colorStops.map((t=>o({},t))),offsetX:this.offsetX,offsetY:this.offsetY,gradientUnits:this.gradientUnits,gradientTransform:this.gradientTransform?[...this.gradientTransform]:void 0})}toSVG(t){let{additionalTransform:s}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const i=[],e=this.gradientTransform?this.gradientTransform.concat():r.concat(),n="pixels"===this.gradientUnits?"userSpaceOnUse":"objectBoundingBox",f=this.colorStops.map((t=>o({},t))).sort(((t,o)=>t.offset-o.offset));let c=-this.offsetX,m=-this.offsetY;"objectBoundingBox"===n?(c/=t.width,m/=t.height):(c+=t.width/2,m+=t.height/2),g(t)&&"percentage"!==this.gradientUnits&&(c-=t.pathOffset.x,m-=t.pathOffset.y),e[4]-=c,e[5]-=m;const p=['id="SVGID_'.concat(this.id,'"'),'gradientUnits="'.concat(n,'"'),'gradientTransform="'.concat(s?s+" ":"").concat(a(e),'"'),""].join(" ");if("linear"===this.type){const{x1:t,y1:o,x2:s,y2:r}=this.coords;i.push("<linearGradient ",p,' x1="',t,'" y1="',o,'" x2="',s,'" y2="',r,'">\n')}else if("radial"===this.type){const{x1:t,y1:o,x2:s,y2:r,r1:e,r2:n}=this.coords,a=e>n;i.push("<radialGradient ",p,' cx="',a?t:s,'" cy="',a?o:r,'" r="',a?e:n,'" fx="',a?s:t,'" fy="',a?r:o,'">\n'),a&&(f.reverse(),f.forEach((t=>{t.offset=1-t.offset})));const c=Math.min(e,n);if(c>0){const t=c/Math.max(e,n);f.forEach((o=>{o.offset+=t*(1-o.offset)}))}}return f.forEach((t=>{let{color:o,offset:s,opacity:r}=t;i.push("<stop ",'offset="',100*s+"%",'" style="stop-color:',o,void 0!==r?";stop-opacity: "+r:";",'"/>\n')})),i.push("linear"===this.type?"</linearGradient>":"</radialGradient>","\n"),i.join("")}toLive(t){const{x1:o,y1:r,x2:i,y2:e,r1:n,r2:a}=this.coords,f="linear"===this.type?t.createLinearGradient(o,r,i,e):t.createRadialGradient(o,r,n,i,e,a);return this.colorStops.forEach((t=>{let{color:o,opacity:r,offset:i}=t;f.addColorStop(i,void 0!==r?new s(o).setAlpha(r).toRgba():o)})),f}static async fromObject(t){const{colorStops:s,gradientTransform:r}=t;return new this(o(o({},t),{},{colorStops:s?s.map((t=>o({},t))):void 0,gradientTransform:r?[...r]:void 0}))}static fromElement(t,s,r){const e=d(t),n=s._findCenterFromElement();return new this(o({id:t.getAttribute("id")||void 0,type:l(t),coords:p(t,{width:r.viewBoxWidth||r.width,height:r.viewBoxHeight||r.height}),colorStops:m(t,r.opacity),gradientUnits:e,gradientTransform:i(t.getAttribute("gradientTransform")||"")},"pixels"===e?{offsetX:s.width/2-n.x,offsetY:s.height/2-n.y}:{offsetX:0,offsetY:0}))}}t(y,"type","Gradient"),h.setClass(y,"gradient"),h.setClass(y,"linear"),h.setClass(y,"radial");export{y as Gradient};
2
2
  //# sourceMappingURL=Gradient.min.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"Gradient.min.mjs","sources":["../../../src/gradient/Gradient.ts"],"sourcesContent":["import { Color } from '../color/Color';\nimport { iMatrix } from '../constants';\nimport { parseTransformAttribute } from '../parser/parseTransformAttribute';\nimport type { FabricObject } from '../shapes/Object/FabricObject';\nimport type { TMat2D } from '../typedefs';\nimport { uid } from '../util/internals/uid';\nimport { pick } from '../util/misc/pick';\nimport { matrixToSVG } from '../util/misc/svgParsing';\nimport { linearDefaultCoords, radialDefaultCoords } from './constants';\nimport { parseColorStops } from './parser/parseColorStops';\nimport { parseCoords } from './parser/parseCoords';\nimport { parseType, parseGradientUnits } from './parser/misc';\nimport type {\n ColorStop,\n GradientCoords,\n GradientOptions,\n GradientType,\n GradientUnits,\n SVGOptions,\n} from './typedefs';\nimport { classRegistry } from '../ClassRegistry';\nimport { isPath } from '../util/typeAssertions';\n\n/**\n * Gradient class\n * @class Gradient\n * @tutorial {@link http://fabricjs.com/fabric-intro-part-2#gradients}\n */\nexport class Gradient<\n S,\n T extends GradientType = S extends GradientType ? S : 'linear'\n> {\n /**\n * Horizontal offset for aligning gradients coming from SVG when outside pathgroups\n * @type Number\n * @default 0\n */\n declare offsetX: number;\n\n /**\n * Vertical offset for aligning gradients coming from SVG when outside pathgroups\n * @type Number\n * @default 0\n */\n declare offsetY: number;\n\n /**\n * A transform matrix to apply to the gradient before painting.\n * Imported from svg gradients, is not applied with the current transform in the center.\n * Before this transform is applied, the origin point is at the top left corner of the object\n * plus the addition of offsetY and offsetX.\n * @type Number[]\n * @default null\n */\n declare gradientTransform?: TMat2D;\n\n /**\n * coordinates units for coords.\n * If `pixels`, the number of coords are in the same unit of width / height.\n * If set as `percentage` the coords are still a number, but 1 means 100% of width\n * for the X and 100% of the height for the y. It can be bigger than 1 and negative.\n * allowed values pixels or percentage.\n * @type GradientUnits\n * @default 'pixels'\n */\n declare gradientUnits: GradientUnits;\n\n /**\n * Gradient type linear or radial\n * @type GradientType\n * @default 'linear'\n */\n declare type: T;\n\n /**\n * Defines how the gradient is located in space and spread\n * @type GradientCoords\n */\n declare coords: GradientCoords<T>;\n\n /**\n * Defines how many colors a gradient has and how they are located on the axis\n * defined by coords\n * @type GradientCoords\n */\n declare colorStops: ColorStop[];\n\n /**\n * If true, this object will not be exported during the serialization of a canvas\n * @type boolean\n */\n declare excludeFromExport?: boolean;\n\n /**\n * ID used for SVG export functionalities\n * @type number | string\n */\n declare readonly id: string | number;\n\n static type = 'Gradient';\n\n constructor({\n type = 'linear' as T,\n gradientUnits = 'pixels',\n coords = {},\n colorStops = [],\n offsetX = 0,\n offsetY = 0,\n gradientTransform,\n id,\n }: GradientOptions<T>) {\n this.id = id ? `${id}_${uid()}` : uid();\n this.type = type;\n this.gradientUnits = gradientUnits;\n this.gradientTransform = gradientTransform;\n this.offsetX = offsetX;\n this.offsetY = offsetY;\n this.coords = {\n ...(this.type === 'radial' ? radialDefaultCoords : linearDefaultCoords),\n ...coords,\n } as GradientCoords<T>;\n this.colorStops = colorStops.slice();\n }\n\n // isType<S extends GradientType>(type: S): this is Gradient<S> {\n // return (this.type as GradientType) === type;\n // }\n\n /**\n * Adds another colorStop\n * @param {Record<string, string>} colorStop Object with offset and color\n * @return {Gradient} thisArg\n */\n addColorStop(colorStops: Record<string, string>) {\n for (const position in colorStops) {\n const color = new Color(colorStops[position]);\n this.colorStops.push({\n offset: parseFloat(position),\n color: color.toRgb(),\n opacity: color.getAlpha(),\n });\n }\n return this;\n }\n\n /**\n * Returns object representation of a gradient\n * @param {string[]} [propertiesToInclude] Any properties that you might want to additionally include in the output\n * @return {object}\n */\n toObject(propertiesToInclude?: (keyof this | string)[]) {\n return {\n ...pick(this, propertiesToInclude as (keyof this)[]),\n type: this.type,\n coords: this.coords,\n colorStops: this.colorStops,\n offsetX: this.offsetX,\n offsetY: this.offsetY,\n gradientUnits: this.gradientUnits,\n gradientTransform: this.gradientTransform\n ? [...this.gradientTransform]\n : undefined,\n };\n }\n\n /* _TO_SVG_START_ */\n /**\n * Returns SVG representation of an gradient\n * @param {FabricObject} object Object to create a gradient for\n * @return {String} SVG representation of an gradient (linear/radial)\n */\n toSVG(\n object: FabricObject,\n { additionalTransform: preTransform }: { additionalTransform?: string } = {}\n ) {\n const markup = [],\n transform = (\n this.gradientTransform\n ? this.gradientTransform.concat()\n : iMatrix.concat()\n ) as TMat2D,\n gradientUnits =\n this.gradientUnits === 'pixels'\n ? 'userSpaceOnUse'\n : 'objectBoundingBox';\n // colorStops must be sorted ascending, and guarded against deep mutations\n const colorStops = this.colorStops\n .map((colorStop) => ({ ...colorStop }))\n .sort((a, b) => {\n return a.offset - b.offset;\n });\n\n let offsetX = -this.offsetX,\n offsetY = -this.offsetY;\n if (gradientUnits === 'objectBoundingBox') {\n offsetX /= object.width;\n offsetY /= object.height;\n } else {\n offsetX += object.width / 2;\n offsetY += object.height / 2;\n }\n // todo what about polygon/polyline?\n if (isPath(object) && this.gradientUnits !== 'percentage') {\n offsetX -= object.pathOffset.x;\n offsetY -= object.pathOffset.y;\n }\n transform[4] -= offsetX;\n transform[5] -= offsetY;\n\n const commonAttributes = [\n `id=\"SVGID_${this.id}\"`,\n `gradientUnits=\"${gradientUnits}\"`,\n `gradientTransform=\"${\n preTransform ? preTransform + ' ' : ''\n }${matrixToSVG(transform)}\"`,\n '',\n ].join(' ');\n\n if (this.type === 'linear') {\n const { x1, y1, x2, y2 } = this.coords;\n markup.push(\n '<linearGradient ',\n commonAttributes,\n ' x1=\"',\n x1,\n '\" y1=\"',\n y1,\n '\" x2=\"',\n x2,\n '\" y2=\"',\n y2,\n '\">\\n'\n );\n } else if (this.type === 'radial') {\n const { x1, y1, x2, y2, r1, r2 } = this\n .coords as GradientCoords<'radial'>;\n const needsSwap = r1 > r2;\n // svg radial gradient has just 1 radius. the biggest.\n markup.push(\n '<radialGradient ',\n commonAttributes,\n ' cx=\"',\n needsSwap ? x1 : x2,\n '\" cy=\"',\n needsSwap ? y1 : y2,\n '\" r=\"',\n needsSwap ? r1 : r2,\n '\" fx=\"',\n needsSwap ? x2 : x1,\n '\" fy=\"',\n needsSwap ? y2 : y1,\n '\">\\n'\n );\n if (needsSwap) {\n // svg goes from internal to external radius. if radius are inverted, swap color stops.\n colorStops.reverse(); // mutates array\n colorStops.forEach((colorStop) => {\n colorStop.offset = 1 - colorStop.offset;\n });\n }\n const minRadius = Math.min(r1, r2);\n if (minRadius > 0) {\n // i have to shift all colorStops and add new one in 0.\n const maxRadius = Math.max(r1, r2),\n percentageShift = minRadius / maxRadius;\n colorStops.forEach((colorStop) => {\n colorStop.offset += percentageShift * (1 - colorStop.offset);\n });\n }\n }\n\n colorStops.forEach(({ color, offset, opacity }) => {\n markup.push(\n '<stop ',\n 'offset=\"',\n offset * 100 + '%',\n '\" style=\"stop-color:',\n color,\n typeof opacity !== 'undefined' ? ';stop-opacity: ' + opacity : ';',\n '\"/>\\n'\n );\n });\n\n markup.push(\n this.type === 'linear' ? '</linearGradient>' : '</radialGradient>',\n '\\n'\n );\n\n return markup.join('');\n }\n /* _TO_SVG_END_ */\n\n /**\n * Returns an instance of CanvasGradient\n * @param {CanvasRenderingContext2D} ctx Context to render on\n * @return {CanvasGradient}\n */\n toLive(ctx: CanvasRenderingContext2D): CanvasGradient {\n const coords = this.coords as GradientCoords<'radial'>;\n const gradient =\n this.type === 'linear'\n ? ctx.createLinearGradient(coords.x1, coords.y1, coords.x2, coords.y2)\n : ctx.createRadialGradient(\n coords.x1,\n coords.y1,\n coords.r1,\n coords.x2,\n coords.y2,\n coords.r2\n );\n\n this.colorStops.forEach(({ color, opacity, offset }) => {\n gradient.addColorStop(\n offset,\n typeof opacity !== 'undefined'\n ? new Color(color).setAlpha(opacity).toRgba()\n : color\n );\n });\n\n return gradient;\n }\n\n static async fromObject(\n options: GradientOptions<'linear'>\n ): Promise<Gradient<'radial'>>;\n static async fromObject(\n options: GradientOptions<'radial'>\n ): Promise<Gradient<'radial'>>;\n static async fromObject(\n options: GradientOptions<'linear'> | GradientOptions<'radial'>\n ) {\n return new this(options);\n }\n\n /* _FROM_SVG_START_ */\n /**\n * Returns {@link Gradient} instance from an SVG element\n * @static\n * @memberOf Gradient\n * @param {SVGGradientElement} el SVG gradient element\n * @param {FabricObject} instance\n * @param {String} opacity A fill-opacity or stroke-opacity attribute to multiply to each stop's opacity.\n * @param {SVGOptions} svgOptions an object containing the size of the SVG in order to parse correctly gradients\n * that uses gradientUnits as 'userSpaceOnUse' and percentages.\n * @return {Gradient} Gradient instance\n * @see http://www.w3.org/TR/SVG/pservers.html#LinearGradientElement\n * @see http://www.w3.org/TR/SVG/pservers.html#RadialGradientElement\n *\n * @example\n *\n * <linearGradient id=\"linearGrad1\">\n * <stop offset=\"0%\" stop-color=\"white\"/>\n * <stop offset=\"100%\" stop-color=\"black\"/>\n * </linearGradient>\n *\n * OR\n *\n * <linearGradient id=\"linearGrad2\">\n * <stop offset=\"0\" style=\"stop-color:rgb(255,255,255)\"/>\n * <stop offset=\"1\" style=\"stop-color:rgb(0,0,0)\"/>\n * </linearGradient>\n *\n * OR\n *\n * <radialGradient id=\"radialGrad1\">\n * <stop offset=\"0%\" stop-color=\"white\" stop-opacity=\"1\" />\n * <stop offset=\"50%\" stop-color=\"black\" stop-opacity=\"0.5\" />\n * <stop offset=\"100%\" stop-color=\"white\" stop-opacity=\"1\" />\n * </radialGradient>\n *\n * OR\n *\n * <radialGradient id=\"radialGrad2\">\n * <stop offset=\"0\" stop-color=\"rgb(255,255,255)\" />\n * <stop offset=\"0.5\" stop-color=\"rgb(0,0,0)\" />\n * <stop offset=\"1\" stop-color=\"rgb(255,255,255)\" />\n * </radialGradient>\n *\n */\n static fromElement(\n el: SVGGradientElement,\n instance: FabricObject,\n svgOptions: SVGOptions\n ): Gradient<GradientType> {\n const gradientUnits = parseGradientUnits(el);\n const center = instance._findCenterFromElement();\n return new this({\n id: el.getAttribute('id') || undefined,\n type: parseType(el),\n coords: parseCoords(el, {\n width: svgOptions.viewBoxWidth || svgOptions.width,\n height: svgOptions.viewBoxHeight || svgOptions.height,\n }),\n colorStops: parseColorStops(el, svgOptions.opacity),\n gradientUnits,\n gradientTransform: parseTransformAttribute(\n el.getAttribute('gradientTransform') || ''\n ),\n ...(gradientUnits === 'pixels'\n ? {\n offsetX: instance.width / 2 - center.x,\n offsetY: instance.height / 2 - center.y,\n }\n : {\n offsetX: 0,\n offsetY: 0,\n }),\n });\n }\n /* _FROM_SVG_END_ */\n}\n\nclassRegistry.setClass(Gradient, 'gradient');\nclassRegistry.setClass(Gradient, 'linear');\nclassRegistry.setClass(Gradient, 'radial');\n"],"names":["Gradient","constructor","_ref","type","gradientUnits","coords","colorStops","offsetX","offsetY","gradientTransform","id","this","concat","uid","_objectSpread","radialDefaultCoords","linearDefaultCoords","slice","addColorStop","position","color","Color","push","offset","parseFloat","toRgb","opacity","getAlpha","toObject","propertiesToInclude","pick","undefined","toSVG","object","additionalTransform","preTransform","arguments","length","markup","transform","iMatrix","map","colorStop","sort","a","b","width","height","isPath","pathOffset","x","y","commonAttributes","matrixToSVG","join","x1","y1","x2","y2","r1","r2","needsSwap","reverse","forEach","minRadius","Math","min","percentageShift","max","_ref2","toLive","ctx","gradient","createLinearGradient","createRadialGradient","_ref3","setAlpha","toRgba","fromObject","options","fromElement","el","instance","svgOptions","parseGradientUnits","center","_findCenterFromElement","getAttribute","parseType","parseCoords","viewBoxWidth","viewBoxHeight","parseColorStops","parseTransformAttribute","_defineProperty","classRegistry","setClass"],"mappings":"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"}
1
+ {"version":3,"file":"Gradient.min.mjs","sources":["../../../src/gradient/Gradient.ts"],"sourcesContent":["import { Color } from '../color/Color';\nimport { iMatrix } from '../constants';\nimport { parseTransformAttribute } from '../parser/parseTransformAttribute';\nimport type { FabricObject } from '../shapes/Object/FabricObject';\nimport type { TMat2D } from '../typedefs';\nimport { uid } from '../util/internals/uid';\nimport { pick } from '../util/misc/pick';\nimport { matrixToSVG } from '../util/misc/svgParsing';\nimport { linearDefaultCoords, radialDefaultCoords } from './constants';\nimport { parseColorStops } from './parser/parseColorStops';\nimport { parseCoords } from './parser/parseCoords';\nimport { parseType, parseGradientUnits } from './parser/misc';\nimport type {\n ColorStop,\n GradientCoords,\n GradientOptions,\n GradientType,\n GradientUnits,\n SVGOptions,\n} from './typedefs';\nimport { classRegistry } from '../ClassRegistry';\nimport { isPath } from '../util/typeAssertions';\n\n/**\n * Gradient class\n * @class Gradient\n * @tutorial {@link http://fabricjs.com/fabric-intro-part-2#gradients}\n */\nexport class Gradient<\n S,\n T extends GradientType = S extends GradientType ? S : 'linear',\n> {\n /**\n * Horizontal offset for aligning gradients coming from SVG when outside pathgroups\n * @type Number\n * @default 0\n */\n declare offsetX: number;\n\n /**\n * Vertical offset for aligning gradients coming from SVG when outside pathgroups\n * @type Number\n * @default 0\n */\n declare offsetY: number;\n\n /**\n * A transform matrix to apply to the gradient before painting.\n * Imported from svg gradients, is not applied with the current transform in the center.\n * Before this transform is applied, the origin point is at the top left corner of the object\n * plus the addition of offsetY and offsetX.\n * @type Number[]\n * @default null\n */\n declare gradientTransform?: TMat2D;\n\n /**\n * coordinates units for coords.\n * If `pixels`, the number of coords are in the same unit of width / height.\n * If set as `percentage` the coords are still a number, but 1 means 100% of width\n * for the X and 100% of the height for the y. It can be bigger than 1 and negative.\n * allowed values pixels or percentage.\n * @type GradientUnits\n * @default 'pixels'\n */\n declare gradientUnits: GradientUnits;\n\n /**\n * Gradient type linear or radial\n * @type GradientType\n * @default 'linear'\n */\n declare type: T;\n\n /**\n * Defines how the gradient is located in space and spread\n * @type GradientCoords\n */\n declare coords: GradientCoords<T>;\n\n /**\n * Defines how many colors a gradient has and how they are located on the axis\n * defined by coords\n * @type GradientCoords\n */\n declare colorStops: ColorStop[];\n\n /**\n * If true, this object will not be exported during the serialization of a canvas\n * @type boolean\n */\n declare excludeFromExport?: boolean;\n\n /**\n * ID used for SVG export functionalities\n * @type number | string\n */\n declare readonly id: string | number;\n\n static type = 'Gradient';\n\n constructor(options: GradientOptions<T>) {\n const {\n type = 'linear' as T,\n gradientUnits = 'pixels',\n coords = {},\n colorStops = [],\n offsetX = 0,\n offsetY = 0,\n gradientTransform,\n id,\n } = options || {};\n Object.assign(this, {\n type,\n gradientUnits,\n coords: {\n ...(type === 'radial' ? radialDefaultCoords : linearDefaultCoords),\n ...coords,\n },\n colorStops,\n offsetX,\n offsetY,\n gradientTransform,\n id: id ? `${id}_${uid()}` : uid(),\n });\n }\n\n /**\n * Adds another colorStop\n * @param {Record<string, string>} colorStop Object with offset and color\n * @return {Gradient} thisArg\n */\n addColorStop(colorStops: Record<string, string>) {\n for (const position in colorStops) {\n const color = new Color(colorStops[position]);\n this.colorStops.push({\n offset: parseFloat(position),\n color: color.toRgb(),\n opacity: color.getAlpha(),\n });\n }\n return this;\n }\n\n /**\n * Returns object representation of a gradient\n * @param {string[]} [propertiesToInclude] Any properties that you might want to additionally include in the output\n * @return {object}\n */\n toObject(propertiesToInclude?: (keyof this | string)[]) {\n return {\n ...pick(this, propertiesToInclude as (keyof this)[]),\n type: this.type,\n coords: { ...this.coords },\n colorStops: this.colorStops.map((colorStop) => ({ ...colorStop })),\n offsetX: this.offsetX,\n offsetY: this.offsetY,\n gradientUnits: this.gradientUnits,\n gradientTransform: this.gradientTransform\n ? [...this.gradientTransform]\n : undefined,\n };\n }\n\n /* _TO_SVG_START_ */\n /**\n * Returns SVG representation of an gradient\n * @param {FabricObject} object Object to create a gradient for\n * @return {String} SVG representation of an gradient (linear/radial)\n */\n toSVG(\n object: FabricObject,\n {\n additionalTransform: preTransform,\n }: { additionalTransform?: string } = {},\n ) {\n const markup = [],\n transform = (\n this.gradientTransform\n ? this.gradientTransform.concat()\n : iMatrix.concat()\n ) as TMat2D,\n gradientUnits =\n this.gradientUnits === 'pixels'\n ? 'userSpaceOnUse'\n : 'objectBoundingBox';\n // colorStops must be sorted ascending, and guarded against deep mutations\n const colorStops = this.colorStops\n .map((colorStop) => ({ ...colorStop }))\n .sort((a, b) => {\n return a.offset - b.offset;\n });\n\n let offsetX = -this.offsetX,\n offsetY = -this.offsetY;\n if (gradientUnits === 'objectBoundingBox') {\n offsetX /= object.width;\n offsetY /= object.height;\n } else {\n offsetX += object.width / 2;\n offsetY += object.height / 2;\n }\n // todo what about polygon/polyline?\n if (isPath(object) && this.gradientUnits !== 'percentage') {\n offsetX -= object.pathOffset.x;\n offsetY -= object.pathOffset.y;\n }\n transform[4] -= offsetX;\n transform[5] -= offsetY;\n\n const commonAttributes = [\n `id=\"SVGID_${this.id}\"`,\n `gradientUnits=\"${gradientUnits}\"`,\n `gradientTransform=\"${\n preTransform ? preTransform + ' ' : ''\n }${matrixToSVG(transform)}\"`,\n '',\n ].join(' ');\n\n if (this.type === 'linear') {\n const { x1, y1, x2, y2 } = this.coords;\n markup.push(\n '<linearGradient ',\n commonAttributes,\n ' x1=\"',\n x1,\n '\" y1=\"',\n y1,\n '\" x2=\"',\n x2,\n '\" y2=\"',\n y2,\n '\">\\n',\n );\n } else if (this.type === 'radial') {\n const { x1, y1, x2, y2, r1, r2 } = this\n .coords as GradientCoords<'radial'>;\n const needsSwap = r1 > r2;\n // svg radial gradient has just 1 radius. the biggest.\n markup.push(\n '<radialGradient ',\n commonAttributes,\n ' cx=\"',\n needsSwap ? x1 : x2,\n '\" cy=\"',\n needsSwap ? y1 : y2,\n '\" r=\"',\n needsSwap ? r1 : r2,\n '\" fx=\"',\n needsSwap ? x2 : x1,\n '\" fy=\"',\n needsSwap ? y2 : y1,\n '\">\\n',\n );\n if (needsSwap) {\n // svg goes from internal to external radius. if radius are inverted, swap color stops.\n colorStops.reverse(); // mutates array\n colorStops.forEach((colorStop) => {\n colorStop.offset = 1 - colorStop.offset;\n });\n }\n const minRadius = Math.min(r1, r2);\n if (minRadius > 0) {\n // i have to shift all colorStops and add new one in 0.\n const maxRadius = Math.max(r1, r2),\n percentageShift = minRadius / maxRadius;\n colorStops.forEach((colorStop) => {\n colorStop.offset += percentageShift * (1 - colorStop.offset);\n });\n }\n }\n\n colorStops.forEach(({ color, offset, opacity }) => {\n markup.push(\n '<stop ',\n 'offset=\"',\n offset * 100 + '%',\n '\" style=\"stop-color:',\n color,\n typeof opacity !== 'undefined' ? ';stop-opacity: ' + opacity : ';',\n '\"/>\\n',\n );\n });\n\n markup.push(\n this.type === 'linear' ? '</linearGradient>' : '</radialGradient>',\n '\\n',\n );\n\n return markup.join('');\n }\n /* _TO_SVG_END_ */\n\n /**\n * Returns an instance of CanvasGradient\n * @param {CanvasRenderingContext2D} ctx Context to render on\n * @return {CanvasGradient}\n */\n toLive(ctx: CanvasRenderingContext2D): CanvasGradient {\n const { x1, y1, x2, y2, r1, r2 } = this.coords as GradientCoords<'radial'>;\n const gradient =\n this.type === 'linear'\n ? ctx.createLinearGradient(x1, y1, x2, y2)\n : ctx.createRadialGradient(x1, y1, r1, x2, y2, r2);\n\n this.colorStops.forEach(({ color, opacity, offset }) => {\n gradient.addColorStop(\n offset,\n typeof opacity !== 'undefined'\n ? new Color(color).setAlpha(opacity).toRgba()\n : color,\n );\n });\n\n return gradient;\n }\n\n static async fromObject(\n options: GradientOptions<'linear'>,\n ): Promise<Gradient<'radial'>>;\n static async fromObject(\n options: GradientOptions<'radial'>,\n ): Promise<Gradient<'radial'>>;\n static async fromObject(\n options: GradientOptions<'linear'> | GradientOptions<'radial'>,\n ) {\n const { colorStops, gradientTransform } = options;\n return new this({\n ...options,\n colorStops: colorStops\n ? colorStops.map((colorStop) => ({ ...colorStop }))\n : undefined,\n gradientTransform: gradientTransform ? [...gradientTransform] : undefined,\n });\n }\n\n /* _FROM_SVG_START_ */\n /**\n * Returns {@link Gradient} instance from an SVG element\n * @static\n * @memberOf Gradient\n * @param {SVGGradientElement} el SVG gradient element\n * @param {FabricObject} instance\n * @param {String} opacity A fill-opacity or stroke-opacity attribute to multiply to each stop's opacity.\n * @param {SVGOptions} svgOptions an object containing the size of the SVG in order to parse correctly gradients\n * that uses gradientUnits as 'userSpaceOnUse' and percentages.\n * @return {Gradient} Gradient instance\n * @see http://www.w3.org/TR/SVG/pservers.html#LinearGradientElement\n * @see http://www.w3.org/TR/SVG/pservers.html#RadialGradientElement\n *\n * @example\n *\n * <linearGradient id=\"linearGrad1\">\n * <stop offset=\"0%\" stop-color=\"white\"/>\n * <stop offset=\"100%\" stop-color=\"black\"/>\n * </linearGradient>\n *\n * OR\n *\n * <linearGradient id=\"linearGrad2\">\n * <stop offset=\"0\" style=\"stop-color:rgb(255,255,255)\"/>\n * <stop offset=\"1\" style=\"stop-color:rgb(0,0,0)\"/>\n * </linearGradient>\n *\n * OR\n *\n * <radialGradient id=\"radialGrad1\">\n * <stop offset=\"0%\" stop-color=\"white\" stop-opacity=\"1\" />\n * <stop offset=\"50%\" stop-color=\"black\" stop-opacity=\"0.5\" />\n * <stop offset=\"100%\" stop-color=\"white\" stop-opacity=\"1\" />\n * </radialGradient>\n *\n * OR\n *\n * <radialGradient id=\"radialGrad2\">\n * <stop offset=\"0\" stop-color=\"rgb(255,255,255)\" />\n * <stop offset=\"0.5\" stop-color=\"rgb(0,0,0)\" />\n * <stop offset=\"1\" stop-color=\"rgb(255,255,255)\" />\n * </radialGradient>\n *\n */\n static fromElement(\n el: SVGGradientElement,\n instance: FabricObject,\n svgOptions: SVGOptions,\n ): Gradient<GradientType> {\n const gradientUnits = parseGradientUnits(el);\n const center = instance._findCenterFromElement();\n return new this({\n id: el.getAttribute('id') || undefined,\n type: parseType(el),\n coords: parseCoords(el, {\n width: svgOptions.viewBoxWidth || svgOptions.width,\n height: svgOptions.viewBoxHeight || svgOptions.height,\n }),\n colorStops: parseColorStops(el, svgOptions.opacity),\n gradientUnits,\n gradientTransform: parseTransformAttribute(\n el.getAttribute('gradientTransform') || '',\n ),\n ...(gradientUnits === 'pixels'\n ? {\n offsetX: instance.width / 2 - center.x,\n offsetY: instance.height / 2 - center.y,\n }\n : {\n offsetX: 0,\n offsetY: 0,\n }),\n });\n }\n /* _FROM_SVG_END_ */\n}\n\nclassRegistry.setClass(Gradient, 'gradient');\nclassRegistry.setClass(Gradient, 'linear');\nclassRegistry.setClass(Gradient, 'radial');\n"],"names":["Gradient","constructor","options","type","gradientUnits","coords","colorStops","offsetX","offsetY","gradientTransform","id","Object","assign","this","_objectSpread","radialDefaultCoords","linearDefaultCoords","concat","uid","addColorStop","position","color","Color","push","offset","parseFloat","toRgb","opacity","getAlpha","toObject","propertiesToInclude","pick","map","colorStop","undefined","toSVG","object","additionalTransform","preTransform","arguments","length","markup","transform","iMatrix","sort","a","b","width","height","isPath","pathOffset","x","y","commonAttributes","matrixToSVG","join","x1","y1","x2","y2","r1","r2","needsSwap","reverse","forEach","minRadius","Math","min","percentageShift","max","_ref","toLive","ctx","gradient","createLinearGradient","createRadialGradient","_ref2","setAlpha","toRgba","fromObject","fromElement","el","instance","svgOptions","parseGradientUnits","center","_findCenterFromElement","getAttribute","parseType","parseCoords","viewBoxWidth","viewBoxHeight","parseColorStops","parseTransformAttribute","_defineProperty","classRegistry","setClass"],"mappings":"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"}
@@ -18,8 +18,8 @@ import { isPath } from '../util/typeAssertions.mjs';
18
18
  * @tutorial {@link http://fabricjs.com/fabric-intro-part-2#gradients}
19
19
  */
20
20
  class Gradient {
21
- constructor(_ref) {
22
- let {
21
+ constructor(options) {
22
+ const {
23
23
  type = 'linear',
24
24
  gradientUnits = 'pixels',
25
25
  coords = {},
@@ -28,21 +28,19 @@ class Gradient {
28
28
  offsetY = 0,
29
29
  gradientTransform,
30
30
  id
31
- } = _ref;
32
- this.id = id ? "".concat(id, "_").concat(uid()) : uid();
33
- this.type = type;
34
- this.gradientUnits = gradientUnits;
35
- this.gradientTransform = gradientTransform;
36
- this.offsetX = offsetX;
37
- this.offsetY = offsetY;
38
- this.coords = _objectSpread2(_objectSpread2({}, this.type === 'radial' ? radialDefaultCoords : linearDefaultCoords), coords);
39
- this.colorStops = colorStops.slice();
31
+ } = options || {};
32
+ Object.assign(this, {
33
+ type,
34
+ gradientUnits,
35
+ coords: _objectSpread2(_objectSpread2({}, type === 'radial' ? radialDefaultCoords : linearDefaultCoords), coords),
36
+ colorStops,
37
+ offsetX,
38
+ offsetY,
39
+ gradientTransform,
40
+ id: id ? "".concat(id, "_").concat(uid()) : uid()
41
+ });
40
42
  }
41
43
 
42
- // isType<S extends GradientType>(type: S): this is Gradient<S> {
43
- // return (this.type as GradientType) === type;
44
- // }
45
-
46
44
  /**
47
45
  * Adds another colorStop
48
46
  * @param {Record<string, string>} colorStop Object with offset and color
@@ -68,8 +66,8 @@ class Gradient {
68
66
  toObject(propertiesToInclude) {
69
67
  return _objectSpread2(_objectSpread2({}, pick(this, propertiesToInclude)), {}, {
70
68
  type: this.type,
71
- coords: this.coords,
72
- colorStops: this.colorStops,
69
+ coords: _objectSpread2({}, this.coords),
70
+ colorStops: this.colorStops.map(colorStop => _objectSpread2({}, colorStop)),
73
71
  offsetX: this.offsetX,
74
72
  offsetY: this.offsetY,
75
73
  gradientUnits: this.gradientUnits,
@@ -148,12 +146,12 @@ class Gradient {
148
146
  });
149
147
  }
150
148
  }
151
- colorStops.forEach(_ref2 => {
149
+ colorStops.forEach(_ref => {
152
150
  let {
153
151
  color,
154
152
  offset,
155
153
  opacity
156
- } = _ref2;
154
+ } = _ref;
157
155
  markup.push('<stop ', 'offset="', offset * 100 + '%', '" style="stop-color:', color, typeof opacity !== 'undefined' ? ';stop-opacity: ' + opacity : ';', '"/>\n');
158
156
  });
159
157
  markup.push(this.type === 'linear' ? '</linearGradient>' : '</radialGradient>', '\n');
@@ -167,20 +165,34 @@ class Gradient {
167
165
  * @return {CanvasGradient}
168
166
  */
169
167
  toLive(ctx) {
170
- const coords = this.coords;
171
- const gradient = this.type === 'linear' ? ctx.createLinearGradient(coords.x1, coords.y1, coords.x2, coords.y2) : ctx.createRadialGradient(coords.x1, coords.y1, coords.r1, coords.x2, coords.y2, coords.r2);
172
- this.colorStops.forEach(_ref3 => {
168
+ const {
169
+ x1,
170
+ y1,
171
+ x2,
172
+ y2,
173
+ r1,
174
+ r2
175
+ } = this.coords;
176
+ const gradient = this.type === 'linear' ? ctx.createLinearGradient(x1, y1, x2, y2) : ctx.createRadialGradient(x1, y1, r1, x2, y2, r2);
177
+ this.colorStops.forEach(_ref2 => {
173
178
  let {
174
179
  color,
175
180
  opacity,
176
181
  offset
177
- } = _ref3;
182
+ } = _ref2;
178
183
  gradient.addColorStop(offset, typeof opacity !== 'undefined' ? new Color(color).setAlpha(opacity).toRgba() : color);
179
184
  });
180
185
  return gradient;
181
186
  }
182
187
  static async fromObject(options) {
183
- return new this(options);
188
+ const {
189
+ colorStops,
190
+ gradientTransform
191
+ } = options;
192
+ return new this(_objectSpread2(_objectSpread2({}, options), {}, {
193
+ colorStops: colorStops ? colorStops.map(colorStop => _objectSpread2({}, colorStop)) : undefined,
194
+ gradientTransform: gradientTransform ? [...gradientTransform] : undefined
195
+ }));
184
196
  }
185
197
 
186
198
  /* _FROM_SVG_START_ */