@postermywall/fabricjs-2 6.0.0-rc2.0 → 6.0.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 (268) hide show
  1. package/CHANGELOG.md +18 -1
  2. package/dist/index.js +229 -491
  3. package/dist/index.js.map +1 -1
  4. package/dist/index.min.js +1 -1
  5. package/dist/index.min.js.map +1 -1
  6. package/dist/index.min.mjs +1 -1
  7. package/dist/index.min.mjs.map +1 -1
  8. package/dist/index.mjs +229 -491
  9. package/dist/index.mjs.map +1 -1
  10. package/dist/index.node.cjs +229 -491
  11. package/dist/index.node.cjs.map +1 -1
  12. package/dist/index.node.mjs +229 -491
  13. package/dist/index.node.mjs.map +1 -1
  14. package/dist/package.json.min.mjs +1 -1
  15. package/dist/package.json.mjs +1 -1
  16. package/dist/src/canvas/Canvas.d.ts.map +1 -1
  17. package/dist/src/canvas/Canvas.min.mjs +1 -1
  18. package/dist/src/canvas/Canvas.min.mjs.map +1 -1
  19. package/dist/src/canvas/Canvas.mjs +8 -9
  20. package/dist/src/canvas/Canvas.mjs.map +1 -1
  21. package/dist/src/canvas/SelectableCanvas.d.ts +1 -1
  22. package/dist/src/canvas/SelectableCanvas.d.ts.map +1 -1
  23. package/dist/src/canvas/SelectableCanvas.min.mjs +1 -1
  24. package/dist/src/canvas/SelectableCanvas.min.mjs.map +1 -1
  25. package/dist/src/canvas/SelectableCanvas.mjs +1 -1
  26. package/dist/src/canvas/SelectableCanvas.mjs.map +1 -1
  27. package/dist/src/canvas/StaticCanvas.d.ts +4 -4
  28. package/dist/src/canvas/StaticCanvas.d.ts.map +1 -1
  29. package/dist/src/canvas/StaticCanvas.min.mjs +1 -1
  30. package/dist/src/canvas/StaticCanvas.min.mjs.map +1 -1
  31. package/dist/src/canvas/StaticCanvas.mjs +0 -13
  32. package/dist/src/canvas/StaticCanvas.mjs.map +1 -1
  33. package/dist/src/color/Color.d.ts +1 -0
  34. package/dist/src/color/Color.d.ts.map +1 -1
  35. package/dist/src/color/Color.min.mjs +1 -1
  36. package/dist/src/color/Color.min.mjs.map +1 -1
  37. package/dist/src/color/Color.mjs +3 -1
  38. package/dist/src/color/Color.mjs.map +1 -1
  39. package/dist/src/filters/BaseFilter.d.ts +16 -23
  40. package/dist/src/filters/BaseFilter.d.ts.map +1 -1
  41. package/dist/src/filters/BaseFilter.min.mjs +1 -1
  42. package/dist/src/filters/BaseFilter.min.mjs.map +1 -1
  43. package/dist/src/filters/BaseFilter.mjs +24 -41
  44. package/dist/src/filters/BaseFilter.mjs.map +1 -1
  45. package/dist/src/filters/BlendColor.d.ts +13 -24
  46. package/dist/src/filters/BlendColor.d.ts.map +1 -1
  47. package/dist/src/filters/BlendColor.min.mjs +1 -1
  48. package/dist/src/filters/BlendColor.min.mjs.map +1 -1
  49. package/dist/src/filters/BlendColor.mjs +1 -25
  50. package/dist/src/filters/BlendColor.mjs.map +1 -1
  51. package/dist/src/filters/BlendImage.d.ts +18 -19
  52. package/dist/src/filters/BlendImage.d.ts.map +1 -1
  53. package/dist/src/filters/BlendImage.min.mjs +1 -1
  54. package/dist/src/filters/BlendImage.min.mjs.map +1 -1
  55. package/dist/src/filters/BlendImage.mjs +13 -24
  56. package/dist/src/filters/BlendImage.mjs.map +1 -1
  57. package/dist/src/filters/Blur.d.ts +10 -12
  58. package/dist/src/filters/Blur.d.ts.map +1 -1
  59. package/dist/src/filters/Blur.min.mjs +1 -1
  60. package/dist/src/filters/Blur.min.mjs.map +1 -1
  61. package/dist/src/filters/Blur.mjs +5 -14
  62. package/dist/src/filters/Blur.mjs.map +1 -1
  63. package/dist/src/filters/Boilerplate.d.ts +11 -13
  64. package/dist/src/filters/Boilerplate.d.ts.map +1 -1
  65. package/dist/src/filters/Brightness.d.ts +10 -12
  66. package/dist/src/filters/Brightness.d.ts.map +1 -1
  67. package/dist/src/filters/Brightness.min.mjs +1 -1
  68. package/dist/src/filters/Brightness.min.mjs.map +1 -1
  69. package/dist/src/filters/Brightness.mjs +4 -16
  70. package/dist/src/filters/Brightness.mjs.map +1 -1
  71. package/dist/src/filters/Canvas2dFilterBackend.d.ts +1 -1
  72. package/dist/src/filters/Canvas2dFilterBackend.d.ts.map +1 -1
  73. package/dist/src/filters/Canvas2dFilterBackend.min.mjs.map +1 -1
  74. package/dist/src/filters/Canvas2dFilterBackend.mjs.map +1 -1
  75. package/dist/src/filters/ColorMatrix.d.ts +17 -15
  76. package/dist/src/filters/ColorMatrix.d.ts.map +1 -1
  77. package/dist/src/filters/ColorMatrix.min.mjs +1 -1
  78. package/dist/src/filters/ColorMatrix.min.mjs.map +1 -1
  79. package/dist/src/filters/ColorMatrix.mjs +7 -27
  80. package/dist/src/filters/ColorMatrix.mjs.map +1 -1
  81. package/dist/src/filters/ColorMatrixFilters.d.ts +63 -497
  82. package/dist/src/filters/ColorMatrixFilters.d.ts.map +1 -1
  83. package/dist/src/filters/ColorMatrixFilters.min.mjs +1 -1
  84. package/dist/src/filters/ColorMatrixFilters.min.mjs.map +1 -1
  85. package/dist/src/filters/ColorMatrixFilters.mjs +13 -8
  86. package/dist/src/filters/ColorMatrixFilters.mjs.map +1 -1
  87. package/dist/src/filters/Composed.d.ts +11 -10
  88. package/dist/src/filters/Composed.d.ts.map +1 -1
  89. package/dist/src/filters/Composed.min.mjs +1 -1
  90. package/dist/src/filters/Composed.min.mjs.map +1 -1
  91. package/dist/src/filters/Composed.mjs +7 -12
  92. package/dist/src/filters/Composed.mjs.map +1 -1
  93. package/dist/src/filters/Contrast.d.ts +10 -12
  94. package/dist/src/filters/Contrast.d.ts.map +1 -1
  95. package/dist/src/filters/Contrast.min.mjs +1 -1
  96. package/dist/src/filters/Contrast.min.mjs.map +1 -1
  97. package/dist/src/filters/Contrast.mjs +6 -17
  98. package/dist/src/filters/Contrast.mjs.map +1 -1
  99. package/dist/src/filters/Convolute.d.ts +11 -14
  100. package/dist/src/filters/Convolute.d.ts.map +1 -1
  101. package/dist/src/filters/Convolute.min.mjs +1 -1
  102. package/dist/src/filters/Convolute.min.mjs.map +1 -1
  103. package/dist/src/filters/Convolute.mjs +1 -15
  104. package/dist/src/filters/Convolute.mjs.map +1 -1
  105. package/dist/src/filters/Gamma.d.ts +17 -14
  106. package/dist/src/filters/Gamma.d.ts.map +1 -1
  107. package/dist/src/filters/Gamma.min.mjs +1 -1
  108. package/dist/src/filters/Gamma.min.mjs.map +1 -1
  109. package/dist/src/filters/Gamma.mjs +20 -24
  110. package/dist/src/filters/Gamma.mjs.map +1 -1
  111. package/dist/src/filters/Grayscale.d.ts +8 -11
  112. package/dist/src/filters/Grayscale.d.ts.map +1 -1
  113. package/dist/src/filters/Grayscale.min.mjs +1 -1
  114. package/dist/src/filters/Grayscale.min.mjs.map +1 -1
  115. package/dist/src/filters/Grayscale.mjs +2 -14
  116. package/dist/src/filters/Grayscale.mjs.map +1 -1
  117. package/dist/src/filters/HueRotation.d.ts +11 -5
  118. package/dist/src/filters/HueRotation.d.ts.map +1 -1
  119. package/dist/src/filters/HueRotation.min.mjs +1 -1
  120. package/dist/src/filters/HueRotation.min.mjs.map +1 -1
  121. package/dist/src/filters/HueRotation.mjs +10 -5
  122. package/dist/src/filters/HueRotation.mjs.map +1 -1
  123. package/dist/src/filters/Invert.d.ts +10 -13
  124. package/dist/src/filters/Invert.d.ts.map +1 -1
  125. package/dist/src/filters/Invert.min.mjs +1 -1
  126. package/dist/src/filters/Invert.min.mjs.map +1 -1
  127. package/dist/src/filters/Invert.mjs +2 -15
  128. package/dist/src/filters/Invert.mjs.map +1 -1
  129. package/dist/src/filters/Noise.d.ts +9 -20
  130. package/dist/src/filters/Noise.d.ts.map +1 -1
  131. package/dist/src/filters/Noise.min.mjs +1 -1
  132. package/dist/src/filters/Noise.min.mjs.map +1 -1
  133. package/dist/src/filters/Noise.mjs +4 -27
  134. package/dist/src/filters/Noise.mjs.map +1 -1
  135. package/dist/src/filters/Pixelate.d.ts +8 -12
  136. package/dist/src/filters/Pixelate.d.ts.map +1 -1
  137. package/dist/src/filters/Pixelate.min.mjs +1 -1
  138. package/dist/src/filters/Pixelate.min.mjs.map +1 -1
  139. package/dist/src/filters/Pixelate.mjs +2 -16
  140. package/dist/src/filters/Pixelate.mjs.map +1 -1
  141. package/dist/src/filters/RemoveColor.d.ts +12 -23
  142. package/dist/src/filters/RemoveColor.d.ts.map +1 -1
  143. package/dist/src/filters/RemoveColor.min.mjs +1 -1
  144. package/dist/src/filters/RemoveColor.min.mjs.map +1 -1
  145. package/dist/src/filters/RemoveColor.mjs +2 -25
  146. package/dist/src/filters/RemoveColor.mjs.map +1 -1
  147. package/dist/src/filters/Resize.d.ts +14 -30
  148. package/dist/src/filters/Resize.d.ts.map +1 -1
  149. package/dist/src/filters/Resize.min.mjs +1 -1
  150. package/dist/src/filters/Resize.min.mjs.map +1 -1
  151. package/dist/src/filters/Resize.mjs +3 -30
  152. package/dist/src/filters/Resize.mjs.map +1 -1
  153. package/dist/src/filters/Saturation.d.ts +9 -12
  154. package/dist/src/filters/Saturation.d.ts.map +1 -1
  155. package/dist/src/filters/Saturation.min.mjs +1 -1
  156. package/dist/src/filters/Saturation.min.mjs.map +1 -1
  157. package/dist/src/filters/Saturation.mjs +8 -20
  158. package/dist/src/filters/Saturation.mjs.map +1 -1
  159. package/dist/src/filters/Vibrance.d.ts +10 -13
  160. package/dist/src/filters/Vibrance.d.ts.map +1 -1
  161. package/dist/src/filters/Vibrance.min.mjs +1 -1
  162. package/dist/src/filters/Vibrance.min.mjs.map +1 -1
  163. package/dist/src/filters/Vibrance.mjs +6 -18
  164. package/dist/src/filters/Vibrance.mjs.map +1 -1
  165. package/dist/src/filters/WebGLFilterBackend.d.ts +1 -1
  166. package/dist/src/filters/WebGLFilterBackend.d.ts.map +1 -1
  167. package/dist/src/filters/WebGLFilterBackend.min.mjs.map +1 -1
  168. package/dist/src/filters/WebGLFilterBackend.mjs.map +1 -1
  169. package/dist/src/filters/shaders/blendImage.d.ts +1 -0
  170. package/dist/src/filters/shaders/blendImage.d.ts.map +1 -1
  171. package/dist/src/filters/shaders/blendImage.min.mjs +1 -1
  172. package/dist/src/filters/shaders/blendImage.min.mjs.map +1 -1
  173. package/dist/src/filters/shaders/blendImage.mjs +2 -1
  174. package/dist/src/filters/shaders/blendImage.mjs.map +1 -1
  175. package/dist/src/filters/typedefs.d.ts +22 -0
  176. package/dist/src/filters/typedefs.d.ts.map +1 -1
  177. package/dist/src/parser/elements_parser.d.ts +1 -1
  178. package/dist/src/parser/elements_parser.d.ts.map +1 -1
  179. package/dist/src/parser/elements_parser.min.mjs.map +1 -1
  180. package/dist/src/parser/elements_parser.mjs.map +1 -1
  181. package/dist/src/shapes/ActiveSelection.d.ts +1 -1
  182. package/dist/src/shapes/ActiveSelection.d.ts.map +1 -1
  183. package/dist/src/shapes/ActiveSelection.min.mjs +1 -1
  184. package/dist/src/shapes/ActiveSelection.min.mjs.map +1 -1
  185. package/dist/src/shapes/ActiveSelection.mjs +13 -10
  186. package/dist/src/shapes/ActiveSelection.mjs.map +1 -1
  187. package/dist/src/shapes/Group.d.ts +9 -0
  188. package/dist/src/shapes/Group.d.ts.map +1 -1
  189. package/dist/src/shapes/Group.min.mjs +1 -1
  190. package/dist/src/shapes/Group.min.mjs.map +1 -1
  191. package/dist/src/shapes/Group.mjs +10 -1
  192. package/dist/src/shapes/Group.mjs.map +1 -1
  193. package/dist/src/shapes/Image.d.ts +4 -4
  194. package/dist/src/shapes/Image.d.ts.map +1 -1
  195. package/dist/src/shapes/Image.min.mjs.map +1 -1
  196. package/dist/src/shapes/Image.mjs.map +1 -1
  197. package/dist/src/shapes/Object/InteractiveObject.d.ts +3 -0
  198. package/dist/src/shapes/Object/InteractiveObject.d.ts.map +1 -1
  199. package/dist/src/shapes/Object/InteractiveObject.min.mjs +1 -1
  200. package/dist/src/shapes/Object/InteractiveObject.min.mjs.map +1 -1
  201. package/dist/src/shapes/Object/InteractiveObject.mjs +3 -1
  202. package/dist/src/shapes/Object/InteractiveObject.mjs.map +1 -1
  203. package/dist/src/shapes/Object/Object.d.ts +1 -16
  204. package/dist/src/shapes/Object/Object.d.ts.map +1 -1
  205. package/dist/src/shapes/Object/Object.min.mjs +1 -1
  206. package/dist/src/shapes/Object/Object.min.mjs.map +1 -1
  207. package/dist/src/shapes/Object/Object.mjs +9 -10
  208. package/dist/src/shapes/Object/Object.mjs.map +1 -1
  209. package/dist/src/shapes/Object/StackedObject.d.ts +8 -15
  210. package/dist/src/shapes/Object/StackedObject.d.ts.map +1 -1
  211. package/dist/src/shapes/Object/StackedObject.min.mjs +1 -1
  212. package/dist/src/shapes/Object/StackedObject.min.mjs.map +1 -1
  213. package/dist/src/shapes/Object/StackedObject.mjs +11 -21
  214. package/dist/src/shapes/Object/StackedObject.mjs.map +1 -1
  215. package/dist/src/shapes/Path.d.ts +2 -2
  216. package/dist/src/shapes/Path.d.ts.map +1 -1
  217. package/dist/src/shapes/Path.min.mjs.map +1 -1
  218. package/dist/src/shapes/Path.mjs +2 -2
  219. package/dist/src/shapes/Path.mjs.map +1 -1
  220. package/dist/src/shapes/Text/TextSVGExportMixin.d.ts +1 -1
  221. package/dist/src/shapes/Text/TextSVGExportMixin.d.ts.map +1 -1
  222. package/dist/src/shapes/Text/TextSVGExportMixin.min.mjs.map +1 -1
  223. package/dist/src/shapes/Text/TextSVGExportMixin.mjs.map +1 -1
  224. package/dist/src/util/misc/objectEnlive.d.ts +2 -2
  225. package/dist/src/util/misc/objectEnlive.d.ts.map +1 -1
  226. package/dist/src/util/misc/objectEnlive.min.mjs.map +1 -1
  227. package/dist/src/util/misc/objectEnlive.mjs.map +1 -1
  228. package/package.json +2 -2
  229. package/src/canvas/Canvas.ts +6 -9
  230. package/src/canvas/SelectableCanvas.ts +2 -2
  231. package/src/canvas/StaticCanvas.ts +4 -18
  232. package/src/color/Color.ts +2 -1
  233. package/src/color/color.test.ts +6 -0
  234. package/src/filters/BaseFilter.ts +45 -51
  235. package/src/filters/BlendColor.ts +13 -35
  236. package/src/filters/BlendImage.ts +26 -40
  237. package/src/filters/Blur.ts +13 -20
  238. package/src/filters/Boilerplate.ts +13 -22
  239. package/src/filters/Brightness.ts +12 -21
  240. package/src/filters/Canvas2dFilterBackend.ts +1 -1
  241. package/src/filters/ColorMatrix.ts +29 -34
  242. package/src/filters/ColorMatrixFilters.ts +15 -9
  243. package/src/filters/Composed.ts +26 -16
  244. package/src/filters/Contrast.ts +15 -23
  245. package/src/filters/Convolute.ts +11 -23
  246. package/src/filters/Gamma.ts +32 -24
  247. package/src/filters/Grayscale.ts +8 -19
  248. package/src/filters/HueRotation.ts +21 -11
  249. package/src/filters/Invert.ts +11 -22
  250. package/src/filters/Noise.ts +11 -30
  251. package/src/filters/Pixelate.ts +9 -22
  252. package/src/filters/RemoveColor.ts +21 -35
  253. package/src/filters/Resize.ts +20 -44
  254. package/src/filters/Saturation.ts +16 -27
  255. package/src/filters/Vibrance.ts +14 -24
  256. package/src/filters/WebGLFilterBackend.ts +1 -1
  257. package/src/filters/shaders/blendImage.ts +12 -0
  258. package/src/filters/typedefs.ts +23 -0
  259. package/src/parser/elements_parser.ts +1 -1
  260. package/src/shapes/ActiveSelection.ts +8 -4
  261. package/src/shapes/Group.ts +16 -1
  262. package/src/shapes/Image.ts +8 -6
  263. package/src/shapes/Object/InteractiveObject.ts +3 -1
  264. package/src/shapes/Object/Object.ts +10 -35
  265. package/src/shapes/Object/StackedObject.ts +28 -44
  266. package/src/shapes/Path.ts +4 -4
  267. package/src/shapes/Text/TextSVGExportMixin.ts +1 -1
  268. package/src/util/misc/objectEnlive.ts +12 -2
@@ -1 +1 @@
1
- {"version":3,"file":"Convolute.mjs","sources":["../../../src/filters/Convolute.ts"],"sourcesContent":["import type { TClassProperties } from '../typedefs';\nimport { BaseFilter } from './BaseFilter';\nimport type { T2DPipelineState, TWebGLUniformLocationMap } from './typedefs';\nimport { classRegistry } from '../ClassRegistry';\nimport { fragmentSource } from './shaders/convolute';\n\nexport const convoluteDefaultValues: Partial<TClassProperties<Convolute>> = {\n opaque: false,\n matrix: [0, 0, 0, 0, 1, 0, 0, 0, 0],\n};\n\n/**\n * Adapted from <a href=\"http://www.html5rocks.com/en/tutorials/canvas/imagefilters/\">html5rocks article</a>\n * @example <caption>Sharpen filter</caption>\n * const filter = new Convolute({\n * matrix: [ 0, -1, 0,\n * -1, 5, -1,\n * 0, -1, 0 ]\n * });\n * object.filters.push(filter);\n * object.applyFilters();\n * canvas.renderAll();\n * @example <caption>Blur filter</caption>\n * const filter = new Convolute({\n * matrix: [ 1/9, 1/9, 1/9,\n * 1/9, 1/9, 1/9,\n * 1/9, 1/9, 1/9 ]\n * });\n * object.filters.push(filter);\n * object.applyFilters();\n * canvas.renderAll();\n * @example <caption>Emboss filter</caption>\n * const filter = new Convolute({\n * matrix: [ 1, 1, 1,\n * 1, 0.7, -1,\n * -1, -1, -1 ]\n * });\n * object.filters.push(filter);\n * object.applyFilters();\n * canvas.renderAll();\n * @example <caption>Emboss filter with opaqueness</caption>\n * const filter = new Convolute({\n * opaque: true,\n * matrix: [ 1, 1, 1,\n * 1, 0.7, -1,\n * -1, -1, -1 ]\n * });\n * object.filters.push(filter);\n * object.applyFilters();\n * canvas.renderAll();\n */\nexport class Convolute extends BaseFilter {\n /*\n * Opaque value (true/false)\n */\n declare opaque: boolean;\n\n /*\n * matrix for the filter, max 9x9\n */\n declare matrix: number[];\n\n static type = 'Convolute';\n\n static defaults = convoluteDefaultValues;\n\n getCacheKey() {\n return `${this.type}_${Math.sqrt(this.matrix.length)}_${\n this.opaque ? 1 : 0\n }` as keyof typeof fragmentSource;\n }\n\n getFragmentSource() {\n return fragmentSource[this.getCacheKey()];\n }\n\n /**\n * Apply the Brightness operation to a Uint8ClampedArray representing the pixels of an image.\n *\n * @param {Object} options\n * @param {ImageData} options.imageData The Uint8ClampedArray to be filtered.\n */\n applyTo2d(options: T2DPipelineState) {\n const imageData = options.imageData,\n data = imageData.data,\n weights = this.matrix,\n side = Math.round(Math.sqrt(weights.length)),\n halfSide = Math.floor(side / 2),\n sw = imageData.width,\n sh = imageData.height,\n output = options.ctx.createImageData(sw, sh),\n dst = output.data,\n // go through the destination image pixels\n alphaFac = this.opaque ? 1 : 0;\n let r, g, b, a, dstOff, scx, scy, srcOff, wt, x, y, cx, cy;\n\n for (y = 0; y < sh; y++) {\n for (x = 0; x < sw; x++) {\n dstOff = (y * sw + x) * 4;\n // calculate the weighed sum of the source image pixels that\n // fall under the convolution matrix\n r = 0;\n g = 0;\n b = 0;\n a = 0;\n\n for (cy = 0; cy < side; cy++) {\n for (cx = 0; cx < side; cx++) {\n scy = y + cy - halfSide;\n scx = x + cx - halfSide;\n\n // eslint-disable-next-line max-depth\n if (scy < 0 || scy >= sh || scx < 0 || scx >= sw) {\n continue;\n }\n\n srcOff = (scy * sw + scx) * 4;\n wt = weights[cy * side + cx];\n\n r += data[srcOff] * wt;\n g += data[srcOff + 1] * wt;\n b += data[srcOff + 2] * wt;\n // eslint-disable-next-line max-depth\n if (!alphaFac) {\n a += data[srcOff + 3] * wt;\n }\n }\n }\n dst[dstOff] = r;\n dst[dstOff + 1] = g;\n dst[dstOff + 2] = b;\n if (!alphaFac) {\n dst[dstOff + 3] = a;\n } else {\n dst[dstOff + 3] = data[dstOff + 3];\n }\n }\n }\n options.imageData = output;\n }\n\n /**\n * Return WebGL uniform locations for this filter's shader.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {WebGLShaderProgram} program This filter's compiled shader program.\n */\n getUniformLocations(\n gl: WebGLRenderingContext,\n program: WebGLProgram\n ): TWebGLUniformLocationMap {\n return {\n uMatrix: gl.getUniformLocation(program, 'uMatrix'),\n uOpaque: gl.getUniformLocation(program, 'uOpaque'),\n uHalfSize: gl.getUniformLocation(program, 'uHalfSize'),\n uSize: gl.getUniformLocation(program, 'uSize'),\n };\n }\n\n /**\n * Send data from this filter to its shader program's uniforms.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {Object} uniformLocations A map of string uniform names to WebGLUniformLocation objects\n */\n sendUniformData(\n gl: WebGLRenderingContext,\n uniformLocations: TWebGLUniformLocationMap\n ) {\n gl.uniform1fv(uniformLocations.uMatrix, this.matrix);\n }\n\n /**\n * Returns object representation of an instance\n * @return {Object} Object representation of an instance\n */\n toObject() {\n return {\n ...super.toObject(),\n opaque: this.opaque,\n matrix: [...this.matrix],\n };\n }\n}\n\nclassRegistry.setClass(Convolute);\n"],"names":["convoluteDefaultValues","opaque","matrix","Convolute","BaseFilter","getCacheKey","concat","type","Math","sqrt","length","getFragmentSource","fragmentSource","applyTo2d","options","imageData","data","weights","side","round","halfSide","floor","sw","width","sh","height","output","ctx","createImageData","dst","alphaFac","r","g","b","a","dstOff","scx","scy","srcOff","wt","x","y","cx","cy","getUniformLocations","gl","program","uMatrix","getUniformLocation","uOpaque","uHalfSize","uSize","sendUniformData","uniformLocations","uniform1fv","toObject","_objectSpread","_defineProperty","classRegistry","setClass"],"mappings":"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"}
1
+ {"version":3,"file":"Convolute.mjs","sources":["../../../src/filters/Convolute.ts"],"sourcesContent":["import { BaseFilter } from './BaseFilter';\nimport type { T2DPipelineState, TWebGLUniformLocationMap } from './typedefs';\nimport { classRegistry } from '../ClassRegistry';\nimport { fragmentSource } from './shaders/convolute';\n\nexport type ConvoluteOwnProps = {\n opaque: boolean;\n matrix: number[];\n};\n\nexport const convoluteDefaultValues: ConvoluteOwnProps = {\n opaque: false,\n matrix: [0, 0, 0, 0, 1, 0, 0, 0, 0],\n};\n\n/**\n * Adapted from <a href=\"http://www.html5rocks.com/en/tutorials/canvas/imagefilters/\">html5rocks article</a>\n * @example <caption>Sharpen filter</caption>\n * const filter = new Convolute({\n * matrix: [ 0, -1, 0,\n * -1, 5, -1,\n * 0, -1, 0 ]\n * });\n * object.filters.push(filter);\n * object.applyFilters();\n * canvas.renderAll();\n * @example <caption>Blur filter</caption>\n * const filter = new Convolute({\n * matrix: [ 1/9, 1/9, 1/9,\n * 1/9, 1/9, 1/9,\n * 1/9, 1/9, 1/9 ]\n * });\n * object.filters.push(filter);\n * object.applyFilters();\n * canvas.renderAll();\n * @example <caption>Emboss filter</caption>\n * const filter = new Convolute({\n * matrix: [ 1, 1, 1,\n * 1, 0.7, -1,\n * -1, -1, -1 ]\n * });\n * object.filters.push(filter);\n * object.applyFilters();\n * canvas.renderAll();\n * @example <caption>Emboss filter with opaqueness</caption>\n * const filter = new Convolute({\n * opaque: true,\n * matrix: [ 1, 1, 1,\n * 1, 0.7, -1,\n * -1, -1, -1 ]\n * });\n * object.filters.push(filter);\n * object.applyFilters();\n * canvas.renderAll();\n */\nexport class Convolute extends BaseFilter<'Convolute', ConvoluteOwnProps> {\n /*\n * Opaque value (true/false)\n */\n declare opaque: ConvoluteOwnProps['opaque'];\n\n /*\n * matrix for the filter, max 9x9\n */\n declare matrix: ConvoluteOwnProps['matrix'];\n\n static type = 'Convolute';\n\n static defaults = convoluteDefaultValues;\n\n static uniformLocations = ['uMatrix', 'uOpaque', 'uHalfSize', 'uSize'];\n\n getCacheKey() {\n return `${this.type}_${Math.sqrt(this.matrix.length)}_${\n this.opaque ? 1 : 0\n }` as keyof typeof fragmentSource;\n }\n\n getFragmentSource() {\n return fragmentSource[this.getCacheKey()];\n }\n\n /**\n * Apply the Brightness operation to a Uint8ClampedArray representing the pixels of an image.\n *\n * @param {Object} options\n * @param {ImageData} options.imageData The Uint8ClampedArray to be filtered.\n */\n applyTo2d(options: T2DPipelineState) {\n const imageData = options.imageData,\n data = imageData.data,\n weights = this.matrix,\n side = Math.round(Math.sqrt(weights.length)),\n halfSide = Math.floor(side / 2),\n sw = imageData.width,\n sh = imageData.height,\n output = options.ctx.createImageData(sw, sh),\n dst = output.data,\n // go through the destination image pixels\n alphaFac = this.opaque ? 1 : 0;\n let r, g, b, a, dstOff, scx, scy, srcOff, wt, x, y, cx, cy;\n\n for (y = 0; y < sh; y++) {\n for (x = 0; x < sw; x++) {\n dstOff = (y * sw + x) * 4;\n // calculate the weighed sum of the source image pixels that\n // fall under the convolution matrix\n r = 0;\n g = 0;\n b = 0;\n a = 0;\n\n for (cy = 0; cy < side; cy++) {\n for (cx = 0; cx < side; cx++) {\n scy = y + cy - halfSide;\n scx = x + cx - halfSide;\n\n // eslint-disable-next-line max-depth\n if (scy < 0 || scy >= sh || scx < 0 || scx >= sw) {\n continue;\n }\n\n srcOff = (scy * sw + scx) * 4;\n wt = weights[cy * side + cx];\n\n r += data[srcOff] * wt;\n g += data[srcOff + 1] * wt;\n b += data[srcOff + 2] * wt;\n // eslint-disable-next-line max-depth\n if (!alphaFac) {\n a += data[srcOff + 3] * wt;\n }\n }\n }\n dst[dstOff] = r;\n dst[dstOff + 1] = g;\n dst[dstOff + 2] = b;\n if (!alphaFac) {\n dst[dstOff + 3] = a;\n } else {\n dst[dstOff + 3] = data[dstOff + 3];\n }\n }\n }\n options.imageData = output;\n }\n\n /**\n * Send data from this filter to its shader program's uniforms.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {Object} uniformLocations A map of string uniform names to WebGLUniformLocation objects\n */\n sendUniformData(\n gl: WebGLRenderingContext,\n uniformLocations: TWebGLUniformLocationMap\n ) {\n gl.uniform1fv(uniformLocations.uMatrix, this.matrix);\n }\n\n /**\n * Returns object representation of an instance\n * @return {Object} Object representation of an instance\n */\n toObject() {\n return {\n ...super.toObject(),\n opaque: this.opaque,\n matrix: [...this.matrix],\n };\n }\n}\n\nclassRegistry.setClass(Convolute);\n"],"names":["convoluteDefaultValues","opaque","matrix","Convolute","BaseFilter","getCacheKey","concat","type","Math","sqrt","length","getFragmentSource","fragmentSource","applyTo2d","options","imageData","data","weights","side","round","halfSide","floor","sw","width","sh","height","output","ctx","createImageData","dst","alphaFac","r","g","b","a","dstOff","scx","scy","srcOff","wt","x","y","cx","cy","sendUniformData","gl","uniformLocations","uniform1fv","uMatrix","toObject","_objectSpread","_defineProperty","classRegistry","setClass"],"mappings":"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"}
@@ -1,8 +1,11 @@
1
- import type { TClassProperties } from '../typedefs';
2
1
  import { BaseFilter } from './BaseFilter';
3
2
  import type { T2DPipelineState, TWebGLUniformLocationMap } from './typedefs';
3
+ declare const GAMMA: "Gamma";
4
4
  export type GammaInput = [number, number, number];
5
- export declare const gammaDefaultValues: Partial<TClassProperties<Gamma>>;
5
+ export type GammaOwnProps = {
6
+ gamma: GammaInput;
7
+ };
8
+ export declare const gammaDefaultValues: GammaOwnProps;
6
9
  /**
7
10
  * Gamma filter class
8
11
  * @example
@@ -12,22 +15,23 @@ export declare const gammaDefaultValues: Partial<TClassProperties<Gamma>>;
12
15
  * object.filters.push(filter);
13
16
  * object.applyFilters();
14
17
  */
15
- export declare class Gamma extends BaseFilter {
18
+ export declare class Gamma extends BaseFilter<typeof GAMMA, GammaOwnProps> {
16
19
  /**
17
20
  * Gamma array value, from 0.01 to 2.2.
18
21
  * @param {Array} gamma
19
22
  * @default
20
23
  */
21
- gamma: GammaInput;
24
+ gamma: GammaOwnProps['gamma'];
22
25
  rgbValues?: {
23
26
  r: Uint8Array;
24
27
  g: Uint8Array;
25
28
  b: Uint8Array;
26
29
  };
27
- static type: string;
28
- static defaults: Partial<TClassProperties<Gamma>>;
30
+ static type: "Gamma";
31
+ static defaults: GammaOwnProps;
32
+ static uniformLocations: string[];
29
33
  getFragmentSource(): string;
30
- constructor({ gamma, ...options }?: {
34
+ constructor(options?: {
31
35
  gamma?: GammaInput;
32
36
  });
33
37
  /**
@@ -37,13 +41,6 @@ export declare class Gamma extends BaseFilter {
37
41
  * @param {ImageData} options.imageData The Uint8Array to be filtered.
38
42
  */
39
43
  applyTo2d({ imageData: { data } }: T2DPipelineState): void;
40
- /**
41
- * Return WebGL uniform locations for this filter's shader.
42
- *
43
- * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.
44
- * @param {WebGLShaderProgram} program This filter's compiled shader program.
45
- */
46
- getUniformLocations(gl: WebGLRenderingContext, program: WebGLProgram): TWebGLUniformLocationMap;
47
44
  /**
48
45
  * Send data from this filter to its shader program's uniforms.
49
46
  *
@@ -51,5 +48,11 @@ export declare class Gamma extends BaseFilter {
51
48
  * @param {Object} uniformLocations A map of string uniform names to WebGLUniformLocation objects
52
49
  */
53
50
  sendUniformData(gl: WebGLRenderingContext, uniformLocations: TWebGLUniformLocationMap): void;
51
+ isNeutralState(): boolean;
52
+ toObject(): {
53
+ type: typeof GAMMA;
54
+ gamma: GammaInput;
55
+ };
54
56
  }
57
+ export {};
55
58
  //# sourceMappingURL=Gamma.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Gamma.d.ts","sourceRoot":"","sources":["../../../src/filters/Gamma.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,KAAK,EAAE,gBAAgB,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAC;AAG7E,MAAM,MAAM,UAAU,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;AAElD,eAAO,MAAM,kBAAkB,EAAE,OAAO,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAG/D,CAAC;AAEF;;;;;;;;GAQG;AACH,qBAAa,KAAM,SAAQ,UAAU;IACnC;;;;OAIG;IACK,KAAK,EAAE,UAAU,CAAC;IAClB,SAAS,CAAC,EAAE;QAClB,CAAC,EAAE,UAAU,CAAC;QACd,CAAC,EAAE,UAAU,CAAC;QACd,CAAC,EAAE,UAAU,CAAC;KACf,CAAC;IAEF,MAAM,CAAC,IAAI,SAAW;IAEtB,MAAM,CAAC,QAAQ,mCAAsB;IAErC,iBAAiB;gBAIL,EAAE,KAAiB,EAAE,GAAG,OAAO,EAAE,GAAE;QAAE,KAAK,CAAC,EAAE,UAAU,CAAA;KAAO;IAK1E;;;;;OAKG;IACH,SAAS,CAAC,EAAE,SAAS,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,gBAAgB;IA6BnD;;;;;OAKG;IACH,mBAAmB,CACjB,EAAE,EAAE,qBAAqB,EACzB,OAAO,EAAE,YAAY,GACpB,wBAAwB;IAM3B;;;;;OAKG;IACH,eAAe,CACb,EAAE,EAAE,qBAAqB,EACzB,gBAAgB,EAAE,wBAAwB;CAI7C"}
1
+ {"version":3,"file":"Gamma.d.ts","sourceRoot":"","sources":["../../../src/filters/Gamma.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAG1C,OAAO,KAAK,EAAE,gBAAgB,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAC;AAE7E,QAAA,MAAM,KAAK,SAAmB,CAAC;AAE/B,MAAM,MAAM,UAAU,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;AAElD,MAAM,MAAM,aAAa,GAAG;IAC1B,KAAK,EAAE,UAAU,CAAC;CACnB,CAAC;AAEF,eAAO,MAAM,kBAAkB,EAAE,aAEhC,CAAC;AAEF;;;;;;;;GAQG;AACH,qBAAa,KAAM,SAAQ,UAAU,CAAC,OAAO,KAAK,EAAE,aAAa,CAAC;IAChE;;;;OAIG;IACK,KAAK,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC;IAC9B,SAAS,CAAC,EAAE;QAClB,CAAC,EAAE,UAAU,CAAC;QACd,CAAC,EAAE,UAAU,CAAC;QACd,CAAC,EAAE,UAAU,CAAC;KACf,CAAC;IAEF,MAAM,CAAC,IAAI,UAAS;IAEpB,MAAM,CAAC,QAAQ,gBAAsB;IAErC,MAAM,CAAC,gBAAgB,WAAc;IAErC,iBAAiB;gBAIL,OAAO,GAAE;QAAE,KAAK,CAAC,EAAE,UAAU,CAAA;KAAO;IAShD;;;;;OAKG;IACH,SAAS,CAAC,EAAE,SAAS,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,gBAAgB;IA6BnD;;;;;OAKG;IACH,eAAe,CACb,EAAE,EAAE,qBAAqB,EACzB,gBAAgB,EAAE,wBAAwB;IAK5C,cAAc;IAKd,QAAQ,IAAI;QAAE,IAAI,EAAE,OAAO,KAAK,CAAC;QAAC,KAAK,EAAE,UAAU,CAAA;KAAE;CAMtD"}
@@ -1,2 +1,2 @@
1
- import{defineProperty as a,objectWithoutProperties as t}from"../../_virtual/_rollupPluginBabelHelpers.min.mjs";import{BaseFilter as m}from"./BaseFilter.min.mjs";import{classRegistry as r}from"../ClassRegistry.min.mjs";import{fragmentSource as e}from"./shaders/gamma.min.mjs";const s=["gamma"],o={mainParameter:"gamma",gamma:[1,1,1]};class i extends m{getFragmentSource(){return e}constructor(){let a=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},{gamma:m=[1,1,1]}=a;super(t(a,s)),this.gamma=m}applyTo2d(a){let{imageData:{data:t}}=a;const m=this.gamma,r=1/m[0],e=1/m[1],s=1/m[2];this.rgbValues||(this.rgbValues={r:new Uint8Array(256),g:new Uint8Array(256),b:new Uint8Array(256)});const o=this.rgbValues;for(let a=0;a<256;a++)o.r[a]=255*Math.pow(a/255,r),o.g[a]=255*Math.pow(a/255,e),o.b[a]=255*Math.pow(a/255,s);for(let a=0;a<t.length;a+=4)t[a]=o.r[t[a]],t[a+1]=o.g[t[a+1]],t[a+2]=o.b[t[a+2]]}getUniformLocations(a,t){return{uGamma:a.getUniformLocation(t,"uGamma")}}sendUniformData(a,t){a.uniform3fv(t.uGamma,this.gamma)}}a(i,"type","Gamma"),a(i,"defaults",o),r.setClass(i);export{i as Gamma,o as gammaDefaultValues};
1
+ import{defineProperty as t}from"../../_virtual/_rollupPluginBabelHelpers.min.mjs";import{BaseFilter as a}from"./BaseFilter.min.mjs";import{classRegistry as r}from"../ClassRegistry.min.mjs";import{fragmentSource as m}from"./shaders/gamma.min.mjs";const e="Gamma",s={gamma:[1,1,1]};class o extends a{getFragmentSource(){return m}constructor(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};super(t),this.gamma=t.gamma||this.constructor.defaults.gamma.concat()}applyTo2d(t){let{imageData:{data:a}}=t;const r=this.gamma,m=1/r[0],e=1/r[1],s=1/r[2];this.rgbValues||(this.rgbValues={r:new Uint8Array(256),g:new Uint8Array(256),b:new Uint8Array(256)});const o=this.rgbValues;for(let t=0;t<256;t++)o.r[t]=255*Math.pow(t/255,m),o.g[t]=255*Math.pow(t/255,e),o.b[t]=255*Math.pow(t/255,s);for(let t=0;t<a.length;t+=4)a[t]=o.r[a[t]],a[t+1]=o.g[a[t+1]],a[t+2]=o.b[a[t+2]]}sendUniformData(t,a){t.uniform3fv(a.uGamma,this.gamma)}isNeutralState(){const{gamma:t}=this;return 1===t[0]&&1===t[1]&&1===t[2]}toObject(){return{type:e,gamma:this.gamma.concat()}}}t(o,"type",e),t(o,"defaults",s),t(o,"uniformLocations",["uGamma"]),r.setClass(o);export{o as Gamma,s as gammaDefaultValues};
2
2
  //# sourceMappingURL=Gamma.min.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"Gamma.min.mjs","sources":["../../../src/filters/Gamma.ts"],"sourcesContent":["import type { TClassProperties } from '../typedefs';\nimport { BaseFilter } from './BaseFilter';\nimport type { T2DPipelineState, TWebGLUniformLocationMap } from './typedefs';\nimport { classRegistry } from '../ClassRegistry';\nimport { fragmentSource } from './shaders/gamma';\nexport type GammaInput = [number, number, number];\n\nexport const gammaDefaultValues: Partial<TClassProperties<Gamma>> = {\n mainParameter: 'gamma',\n gamma: [1, 1, 1],\n};\n\n/**\n * Gamma filter class\n * @example\n * const filter = new Gamma({\n * gamma: [1, 0.5, 2.1]\n * });\n * object.filters.push(filter);\n * object.applyFilters();\n */\nexport class Gamma extends BaseFilter {\n /**\n * Gamma array value, from 0.01 to 2.2.\n * @param {Array} gamma\n * @default\n */\n declare gamma: GammaInput;\n declare rgbValues?: {\n r: Uint8Array;\n g: Uint8Array;\n b: Uint8Array;\n };\n\n static type = 'Gamma';\n\n static defaults = gammaDefaultValues;\n\n getFragmentSource() {\n return fragmentSource;\n }\n\n constructor({ gamma = [1, 1, 1], ...options }: { gamma?: GammaInput } = {}) {\n super(options);\n this.gamma = gamma;\n }\n\n /**\n * Apply the Gamma operation to a Uint8Array representing the pixels of an image.\n *\n * @param {Object} options\n * @param {ImageData} options.imageData The Uint8Array to be filtered.\n */\n applyTo2d({ imageData: { data } }: T2DPipelineState) {\n const gamma = this.gamma,\n rInv = 1 / gamma[0],\n gInv = 1 / gamma[1],\n bInv = 1 / gamma[2];\n\n if (!this.rgbValues) {\n this.rgbValues = {\n r: new Uint8Array(256),\n g: new Uint8Array(256),\n b: new Uint8Array(256),\n };\n }\n\n // This is an optimization - pre-compute a look-up table for each color channel\n // instead of performing these pow calls for each pixel in the image.\n const rgb = this.rgbValues;\n for (let i = 0; i < 256; i++) {\n rgb.r[i] = Math.pow(i / 255, rInv) * 255;\n rgb.g[i] = Math.pow(i / 255, gInv) * 255;\n rgb.b[i] = Math.pow(i / 255, bInv) * 255;\n }\n for (let i = 0; i < data.length; i += 4) {\n data[i] = rgb.r[data[i]];\n data[i + 1] = rgb.g[data[i + 1]];\n data[i + 2] = rgb.b[data[i + 2]];\n }\n }\n\n /**\n * Return WebGL uniform locations for this filter's shader.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {WebGLShaderProgram} program This filter's compiled shader program.\n */\n getUniformLocations(\n gl: WebGLRenderingContext,\n program: WebGLProgram\n ): TWebGLUniformLocationMap {\n return {\n uGamma: gl.getUniformLocation(program, 'uGamma'),\n };\n }\n\n /**\n * Send data from this filter to its shader program's uniforms.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {Object} uniformLocations A map of string uniform names to WebGLUniformLocation objects\n */\n sendUniformData(\n gl: WebGLRenderingContext,\n uniformLocations: TWebGLUniformLocationMap\n ) {\n gl.uniform3fv(uniformLocations.uGamma, this.gamma);\n }\n}\n\nclassRegistry.setClass(Gamma);\n"],"names":["gammaDefaultValues","mainParameter","gamma","Gamma","BaseFilter","getFragmentSource","fragmentSource","constructor","_ref","arguments","length","undefined","super","_objectWithoutProperties","_excluded","this","applyTo2d","_ref2","imageData","data","rInv","gInv","bInv","rgbValues","r","Uint8Array","g","b","rgb","i","Math","pow","getUniformLocations","gl","program","uGamma","getUniformLocation","sendUniformData","uniformLocations","uniform3fv","_defineProperty","classRegistry","setClass"],"mappings":"qSAOaA,EAAuD,CAClEC,cAAe,QACfC,MAAO,CAAC,EAAG,EAAG,IAYT,MAAMC,UAAcC,EAiBzBC,iBAAAA,GACE,OAAOC,CACT,CAEAC,WAAAA,GAA4E,IAAAC,EAAAC,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAJ,CAAE,GAA9DP,MAAEA,EAAQ,CAAC,EAAG,EAAG,IAAwCM,EACnEI,MADyCC,EAAAL,EAAAM,IAEzCC,KAAKb,MAAQA,CACf,CAQAc,SAAAA,CAASC,GAA4C,IAAzCC,WAAWC,KAAEA,IAA0BF,EACjD,MAAMf,EAAQa,KAAKb,MACjBkB,EAAO,EAAIlB,EAAM,GACjBmB,EAAO,EAAInB,EAAM,GACjBoB,EAAO,EAAIpB,EAAM,GAEda,KAAKQ,YACRR,KAAKQ,UAAY,CACfC,EAAG,IAAIC,WAAW,KAClBC,EAAG,IAAID,WAAW,KAClBE,EAAG,IAAIF,WAAW,OAMtB,MAAMG,EAAMb,KAAKQ,UACjB,IAAK,IAAIM,EAAI,EAAGA,EAAI,IAAKA,IACvBD,EAAIJ,EAAEK,GAA+B,IAA1BC,KAAKC,IAAIF,EAAI,IAAKT,GAC7BQ,EAAIF,EAAEG,GAA+B,IAA1BC,KAAKC,IAAIF,EAAI,IAAKR,GAC7BO,EAAID,EAAEE,GAA+B,IAA1BC,KAAKC,IAAIF,EAAI,IAAKP,GAE/B,IAAK,IAAIO,EAAI,EAAGA,EAAIV,EAAKT,OAAQmB,GAAK,EACpCV,EAAKU,GAAKD,EAAIJ,EAAEL,EAAKU,IACrBV,EAAKU,EAAI,GAAKD,EAAIF,EAAEP,EAAKU,EAAI,IAC7BV,EAAKU,EAAI,GAAKD,EAAID,EAAER,EAAKU,EAAI,GAEjC,CAQAG,mBAAAA,CACEC,EACAC,GAEA,MAAO,CACLC,OAAQF,EAAGG,mBAAmBF,EAAS,UAE3C,CAQAG,eAAAA,CACEJ,EACAK,GAEAL,EAAGM,WAAWD,EAAiBH,OAAQpB,KAAKb,MAC9C,EAtFAsC,EADWrC,EAAK,OAaF,SAAOqC,EAbVrC,EAAK,WAeEH,GA2EpByC,EAAcC,SAASvC"}
1
+ {"version":3,"file":"Gamma.min.mjs","sources":["../../../src/filters/Gamma.ts"],"sourcesContent":["import { BaseFilter } from './BaseFilter';\nimport { classRegistry } from '../ClassRegistry';\nimport { fragmentSource } from './shaders/gamma';\nimport type { T2DPipelineState, TWebGLUniformLocationMap } from './typedefs';\n\nconst GAMMA = 'Gamma' as const;\n\nexport type GammaInput = [number, number, number];\n\nexport type GammaOwnProps = {\n gamma: GammaInput;\n};\n\nexport const gammaDefaultValues: GammaOwnProps = {\n gamma: [1, 1, 1],\n};\n\n/**\n * Gamma filter class\n * @example\n * const filter = new Gamma({\n * gamma: [1, 0.5, 2.1]\n * });\n * object.filters.push(filter);\n * object.applyFilters();\n */\nexport class Gamma extends BaseFilter<typeof GAMMA, GammaOwnProps> {\n /**\n * Gamma array value, from 0.01 to 2.2.\n * @param {Array} gamma\n * @default\n */\n declare gamma: GammaOwnProps['gamma'];\n declare rgbValues?: {\n r: Uint8Array;\n g: Uint8Array;\n b: Uint8Array;\n };\n\n static type = GAMMA;\n\n static defaults = gammaDefaultValues;\n\n static uniformLocations = ['uGamma'];\n\n getFragmentSource() {\n return fragmentSource;\n }\n\n constructor(options: { gamma?: GammaInput } = {}) {\n super(options);\n this.gamma =\n options.gamma ||\n ((\n this.constructor as typeof Gamma\n ).defaults.gamma.concat() as GammaInput);\n }\n\n /**\n * Apply the Gamma operation to a Uint8Array representing the pixels of an image.\n *\n * @param {Object} options\n * @param {ImageData} options.imageData The Uint8Array to be filtered.\n */\n applyTo2d({ imageData: { data } }: T2DPipelineState) {\n const gamma = this.gamma,\n rInv = 1 / gamma[0],\n gInv = 1 / gamma[1],\n bInv = 1 / gamma[2];\n\n if (!this.rgbValues) {\n this.rgbValues = {\n r: new Uint8Array(256),\n g: new Uint8Array(256),\n b: new Uint8Array(256),\n };\n }\n\n // This is an optimization - pre-compute a look-up table for each color channel\n // instead of performing these pow calls for each pixel in the image.\n const rgb = this.rgbValues;\n for (let i = 0; i < 256; i++) {\n rgb.r[i] = Math.pow(i / 255, rInv) * 255;\n rgb.g[i] = Math.pow(i / 255, gInv) * 255;\n rgb.b[i] = Math.pow(i / 255, bInv) * 255;\n }\n for (let i = 0; i < data.length; i += 4) {\n data[i] = rgb.r[data[i]];\n data[i + 1] = rgb.g[data[i + 1]];\n data[i + 2] = rgb.b[data[i + 2]];\n }\n }\n\n /**\n * Send data from this filter to its shader program's uniforms.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {Object} uniformLocations A map of string uniform names to WebGLUniformLocation objects\n */\n sendUniformData(\n gl: WebGLRenderingContext,\n uniformLocations: TWebGLUniformLocationMap\n ) {\n gl.uniform3fv(uniformLocations.uGamma, this.gamma);\n }\n\n isNeutralState() {\n const { gamma } = this;\n return gamma[0] === 1 && gamma[1] === 1 && gamma[2] === 1;\n }\n\n toObject(): { type: typeof GAMMA; gamma: GammaInput } {\n return {\n type: GAMMA,\n gamma: this.gamma.concat() as GammaInput,\n };\n }\n}\n\nclassRegistry.setClass(Gamma);\n"],"names":["GAMMA","gammaDefaultValues","gamma","Gamma","BaseFilter","getFragmentSource","fragmentSource","constructor","options","arguments","length","undefined","super","this","defaults","concat","applyTo2d","_ref","imageData","data","rInv","gInv","bInv","rgbValues","r","Uint8Array","g","b","rgb","i","Math","pow","sendUniformData","gl","uniformLocations","uniform3fv","uGamma","isNeutralState","toObject","type","_defineProperty","classRegistry","setClass"],"mappings":"sPAKA,MAAMA,EAAQ,QAQDC,EAAoC,CAC/CC,MAAO,CAAC,EAAG,EAAG,IAYT,MAAMC,UAAcC,EAmBzBC,iBAAAA,GACE,OAAOC,CACT,CAEAC,WAAAA,GAAkD,IAAtCC,EAA+BC,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAA,EAC5CG,MAAMJ,GACNK,KAAKX,MACHM,EAAQN,OAENW,KAAKN,YACLO,SAASZ,MAAMa,QACrB,CAQAC,SAAAA,CAASC,GAA4C,IAAzCC,WAAWC,KAAEA,IAA0BF,EACjD,MAAMf,EAAQW,KAAKX,MACjBkB,EAAO,EAAIlB,EAAM,GACjBmB,EAAO,EAAInB,EAAM,GACjBoB,EAAO,EAAIpB,EAAM,GAEdW,KAAKU,YACRV,KAAKU,UAAY,CACfC,EAAG,IAAIC,WAAW,KAClBC,EAAG,IAAID,WAAW,KAClBE,EAAG,IAAIF,WAAW,OAMtB,MAAMG,EAAMf,KAAKU,UACjB,IAAK,IAAIM,EAAI,EAAGA,EAAI,IAAKA,IACvBD,EAAIJ,EAAEK,GAA+B,IAA1BC,KAAKC,IAAIF,EAAI,IAAKT,GAC7BQ,EAAIF,EAAEG,GAA+B,IAA1BC,KAAKC,IAAIF,EAAI,IAAKR,GAC7BO,EAAID,EAAEE,GAA+B,IAA1BC,KAAKC,IAAIF,EAAI,IAAKP,GAE/B,IAAK,IAAIO,EAAI,EAAGA,EAAIV,EAAKT,OAAQmB,GAAK,EACpCV,EAAKU,GAAKD,EAAIJ,EAAEL,EAAKU,IACrBV,EAAKU,EAAI,GAAKD,EAAIF,EAAEP,EAAKU,EAAI,IAC7BV,EAAKU,EAAI,GAAKD,EAAID,EAAER,EAAKU,EAAI,GAEjC,CAQAG,eAAAA,CACEC,EACAC,GAEAD,EAAGE,WAAWD,EAAiBE,OAAQvB,KAAKX,MAC9C,CAEAmC,cAAAA,GACE,MAAMnC,MAAEA,GAAUW,KAClB,OAAoB,IAAbX,EAAM,IAAyB,IAAbA,EAAM,IAAyB,IAAbA,EAAM,EACnD,CAEAoC,QAAAA,GACE,MAAO,CACLC,KAAMvC,EACNE,MAAOW,KAAKX,MAAMa,SAEtB,EAzFAyB,EADWrC,EAAK,OAaFH,GAAKwC,EAbRrC,EAAK,WAeEF,GAAkBuC,EAfzBrC,EAiBe,mBAAA,CAAC,WA4E7BsC,EAAcC,SAASvC"}
@@ -1,11 +1,10 @@
1
- import { defineProperty as _defineProperty, objectWithoutProperties as _objectWithoutProperties } from '../../_virtual/_rollupPluginBabelHelpers.mjs';
1
+ import { defineProperty as _defineProperty } from '../../_virtual/_rollupPluginBabelHelpers.mjs';
2
2
  import { BaseFilter } from './BaseFilter.mjs';
3
3
  import { classRegistry } from '../ClassRegistry.mjs';
4
4
  import { fragmentSource } from './shaders/gamma.mjs';
5
5
 
6
- const _excluded = ["gamma"];
6
+ const GAMMA = 'Gamma';
7
7
  const gammaDefaultValues = {
8
- mainParameter: 'gamma',
9
8
  gamma: [1, 1, 1]
10
9
  };
11
10
 
@@ -23,13 +22,9 @@ class Gamma extends BaseFilter {
23
22
  return fragmentSource;
24
23
  }
25
24
  constructor() {
26
- let _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
27
- {
28
- gamma = [1, 1, 1]
29
- } = _ref,
30
- options = _objectWithoutProperties(_ref, _excluded);
25
+ let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
31
26
  super(options);
32
- this.gamma = gamma;
27
+ this.gamma = options.gamma || this.constructor.defaults.gamma.concat();
33
28
  }
34
29
 
35
30
  /**
@@ -38,12 +33,12 @@ class Gamma extends BaseFilter {
38
33
  * @param {Object} options
39
34
  * @param {ImageData} options.imageData The Uint8Array to be filtered.
40
35
  */
41
- applyTo2d(_ref2) {
36
+ applyTo2d(_ref) {
42
37
  let {
43
38
  imageData: {
44
39
  data
45
40
  }
46
- } = _ref2;
41
+ } = _ref;
47
42
  const gamma = this.gamma,
48
43
  rInv = 1 / gamma[0],
49
44
  gInv = 1 / gamma[1],
@@ -71,18 +66,6 @@ class Gamma extends BaseFilter {
71
66
  }
72
67
  }
73
68
 
74
- /**
75
- * Return WebGL uniform locations for this filter's shader.
76
- *
77
- * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.
78
- * @param {WebGLShaderProgram} program This filter's compiled shader program.
79
- */
80
- getUniformLocations(gl, program) {
81
- return {
82
- uGamma: gl.getUniformLocation(program, 'uGamma')
83
- };
84
- }
85
-
86
69
  /**
87
70
  * Send data from this filter to its shader program's uniforms.
88
71
  *
@@ -92,14 +75,27 @@ class Gamma extends BaseFilter {
92
75
  sendUniformData(gl, uniformLocations) {
93
76
  gl.uniform3fv(uniformLocations.uGamma, this.gamma);
94
77
  }
78
+ isNeutralState() {
79
+ const {
80
+ gamma
81
+ } = this;
82
+ return gamma[0] === 1 && gamma[1] === 1 && gamma[2] === 1;
83
+ }
84
+ toObject() {
85
+ return {
86
+ type: GAMMA,
87
+ gamma: this.gamma.concat()
88
+ };
89
+ }
95
90
  }
96
91
  /**
97
92
  * Gamma array value, from 0.01 to 2.2.
98
93
  * @param {Array} gamma
99
94
  * @default
100
95
  */
101
- _defineProperty(Gamma, "type", 'Gamma');
96
+ _defineProperty(Gamma, "type", GAMMA);
102
97
  _defineProperty(Gamma, "defaults", gammaDefaultValues);
98
+ _defineProperty(Gamma, "uniformLocations", ['uGamma']);
103
99
  classRegistry.setClass(Gamma);
104
100
 
105
101
  export { Gamma, gammaDefaultValues };
@@ -1 +1 @@
1
- {"version":3,"file":"Gamma.mjs","sources":["../../../src/filters/Gamma.ts"],"sourcesContent":["import type { TClassProperties } from '../typedefs';\nimport { BaseFilter } from './BaseFilter';\nimport type { T2DPipelineState, TWebGLUniformLocationMap } from './typedefs';\nimport { classRegistry } from '../ClassRegistry';\nimport { fragmentSource } from './shaders/gamma';\nexport type GammaInput = [number, number, number];\n\nexport const gammaDefaultValues: Partial<TClassProperties<Gamma>> = {\n mainParameter: 'gamma',\n gamma: [1, 1, 1],\n};\n\n/**\n * Gamma filter class\n * @example\n * const filter = new Gamma({\n * gamma: [1, 0.5, 2.1]\n * });\n * object.filters.push(filter);\n * object.applyFilters();\n */\nexport class Gamma extends BaseFilter {\n /**\n * Gamma array value, from 0.01 to 2.2.\n * @param {Array} gamma\n * @default\n */\n declare gamma: GammaInput;\n declare rgbValues?: {\n r: Uint8Array;\n g: Uint8Array;\n b: Uint8Array;\n };\n\n static type = 'Gamma';\n\n static defaults = gammaDefaultValues;\n\n getFragmentSource() {\n return fragmentSource;\n }\n\n constructor({ gamma = [1, 1, 1], ...options }: { gamma?: GammaInput } = {}) {\n super(options);\n this.gamma = gamma;\n }\n\n /**\n * Apply the Gamma operation to a Uint8Array representing the pixels of an image.\n *\n * @param {Object} options\n * @param {ImageData} options.imageData The Uint8Array to be filtered.\n */\n applyTo2d({ imageData: { data } }: T2DPipelineState) {\n const gamma = this.gamma,\n rInv = 1 / gamma[0],\n gInv = 1 / gamma[1],\n bInv = 1 / gamma[2];\n\n if (!this.rgbValues) {\n this.rgbValues = {\n r: new Uint8Array(256),\n g: new Uint8Array(256),\n b: new Uint8Array(256),\n };\n }\n\n // This is an optimization - pre-compute a look-up table for each color channel\n // instead of performing these pow calls for each pixel in the image.\n const rgb = this.rgbValues;\n for (let i = 0; i < 256; i++) {\n rgb.r[i] = Math.pow(i / 255, rInv) * 255;\n rgb.g[i] = Math.pow(i / 255, gInv) * 255;\n rgb.b[i] = Math.pow(i / 255, bInv) * 255;\n }\n for (let i = 0; i < data.length; i += 4) {\n data[i] = rgb.r[data[i]];\n data[i + 1] = rgb.g[data[i + 1]];\n data[i + 2] = rgb.b[data[i + 2]];\n }\n }\n\n /**\n * Return WebGL uniform locations for this filter's shader.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {WebGLShaderProgram} program This filter's compiled shader program.\n */\n getUniformLocations(\n gl: WebGLRenderingContext,\n program: WebGLProgram\n ): TWebGLUniformLocationMap {\n return {\n uGamma: gl.getUniformLocation(program, 'uGamma'),\n };\n }\n\n /**\n * Send data from this filter to its shader program's uniforms.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {Object} uniformLocations A map of string uniform names to WebGLUniformLocation objects\n */\n sendUniformData(\n gl: WebGLRenderingContext,\n uniformLocations: TWebGLUniformLocationMap\n ) {\n gl.uniform3fv(uniformLocations.uGamma, this.gamma);\n }\n}\n\nclassRegistry.setClass(Gamma);\n"],"names":["gammaDefaultValues","mainParameter","gamma","Gamma","BaseFilter","getFragmentSource","fragmentSource","constructor","_ref","arguments","length","undefined","options","_objectWithoutProperties","_excluded","applyTo2d","_ref2","imageData","data","rInv","gInv","bInv","rgbValues","r","Uint8Array","g","b","rgb","i","Math","pow","getUniformLocations","gl","program","uGamma","getUniformLocation","sendUniformData","uniformLocations","uniform3fv","_defineProperty","classRegistry","setClass"],"mappings":"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"}
1
+ {"version":3,"file":"Gamma.mjs","sources":["../../../src/filters/Gamma.ts"],"sourcesContent":["import { BaseFilter } from './BaseFilter';\nimport { classRegistry } from '../ClassRegistry';\nimport { fragmentSource } from './shaders/gamma';\nimport type { T2DPipelineState, TWebGLUniformLocationMap } from './typedefs';\n\nconst GAMMA = 'Gamma' as const;\n\nexport type GammaInput = [number, number, number];\n\nexport type GammaOwnProps = {\n gamma: GammaInput;\n};\n\nexport const gammaDefaultValues: GammaOwnProps = {\n gamma: [1, 1, 1],\n};\n\n/**\n * Gamma filter class\n * @example\n * const filter = new Gamma({\n * gamma: [1, 0.5, 2.1]\n * });\n * object.filters.push(filter);\n * object.applyFilters();\n */\nexport class Gamma extends BaseFilter<typeof GAMMA, GammaOwnProps> {\n /**\n * Gamma array value, from 0.01 to 2.2.\n * @param {Array} gamma\n * @default\n */\n declare gamma: GammaOwnProps['gamma'];\n declare rgbValues?: {\n r: Uint8Array;\n g: Uint8Array;\n b: Uint8Array;\n };\n\n static type = GAMMA;\n\n static defaults = gammaDefaultValues;\n\n static uniformLocations = ['uGamma'];\n\n getFragmentSource() {\n return fragmentSource;\n }\n\n constructor(options: { gamma?: GammaInput } = {}) {\n super(options);\n this.gamma =\n options.gamma ||\n ((\n this.constructor as typeof Gamma\n ).defaults.gamma.concat() as GammaInput);\n }\n\n /**\n * Apply the Gamma operation to a Uint8Array representing the pixels of an image.\n *\n * @param {Object} options\n * @param {ImageData} options.imageData The Uint8Array to be filtered.\n */\n applyTo2d({ imageData: { data } }: T2DPipelineState) {\n const gamma = this.gamma,\n rInv = 1 / gamma[0],\n gInv = 1 / gamma[1],\n bInv = 1 / gamma[2];\n\n if (!this.rgbValues) {\n this.rgbValues = {\n r: new Uint8Array(256),\n g: new Uint8Array(256),\n b: new Uint8Array(256),\n };\n }\n\n // This is an optimization - pre-compute a look-up table for each color channel\n // instead of performing these pow calls for each pixel in the image.\n const rgb = this.rgbValues;\n for (let i = 0; i < 256; i++) {\n rgb.r[i] = Math.pow(i / 255, rInv) * 255;\n rgb.g[i] = Math.pow(i / 255, gInv) * 255;\n rgb.b[i] = Math.pow(i / 255, bInv) * 255;\n }\n for (let i = 0; i < data.length; i += 4) {\n data[i] = rgb.r[data[i]];\n data[i + 1] = rgb.g[data[i + 1]];\n data[i + 2] = rgb.b[data[i + 2]];\n }\n }\n\n /**\n * Send data from this filter to its shader program's uniforms.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {Object} uniformLocations A map of string uniform names to WebGLUniformLocation objects\n */\n sendUniformData(\n gl: WebGLRenderingContext,\n uniformLocations: TWebGLUniformLocationMap\n ) {\n gl.uniform3fv(uniformLocations.uGamma, this.gamma);\n }\n\n isNeutralState() {\n const { gamma } = this;\n return gamma[0] === 1 && gamma[1] === 1 && gamma[2] === 1;\n }\n\n toObject(): { type: typeof GAMMA; gamma: GammaInput } {\n return {\n type: GAMMA,\n gamma: this.gamma.concat() as GammaInput,\n };\n }\n}\n\nclassRegistry.setClass(Gamma);\n"],"names":["GAMMA","gammaDefaultValues","gamma","Gamma","BaseFilter","getFragmentSource","fragmentSource","constructor","options","arguments","length","undefined","defaults","concat","applyTo2d","_ref","imageData","data","rInv","gInv","bInv","rgbValues","r","Uint8Array","g","b","rgb","i","Math","pow","sendUniformData","gl","uniformLocations","uniform3fv","uGamma","isNeutralState","toObject","type","_defineProperty","classRegistry","setClass"],"mappings":"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"}
@@ -1,8 +1,10 @@
1
- import type { TClassProperties } from '../typedefs';
2
1
  import { BaseFilter } from './BaseFilter';
3
2
  import type { T2DPipelineState, TWebGLUniformLocationMap } from './typedefs';
4
3
  export type TGrayscaleMode = 'average' | 'lightness' | 'luminosity';
5
- export declare const grayscaleDefaultValues: Partial<TClassProperties<Grayscale>>;
4
+ type GrayscaleOwnProps = {
5
+ mode: TGrayscaleMode;
6
+ };
7
+ export declare const grayscaleDefaultValues: GrayscaleOwnProps;
6
8
  /**
7
9
  * Grayscale image filter class
8
10
  * @example
@@ -10,10 +12,11 @@ export declare const grayscaleDefaultValues: Partial<TClassProperties<Grayscale>
10
12
  * object.filters.push(filter);
11
13
  * object.applyFilters();
12
14
  */
13
- export declare class Grayscale extends BaseFilter {
15
+ export declare class Grayscale extends BaseFilter<'Grayscale', GrayscaleOwnProps> {
14
16
  mode: TGrayscaleMode;
15
17
  static type: string;
16
- static defaults: Partial<TClassProperties<Grayscale>>;
18
+ static defaults: GrayscaleOwnProps;
19
+ static uniformLocations: string[];
17
20
  /**
18
21
  * Apply the Grayscale operation to a Uint8Array representing the pixels of an image.
19
22
  *
@@ -23,13 +26,6 @@ export declare class Grayscale extends BaseFilter {
23
26
  applyTo2d({ imageData: { data } }: T2DPipelineState): void;
24
27
  getCacheKey(): string;
25
28
  getFragmentSource(): string;
26
- /**
27
- * Return WebGL uniform locations for this filter's shader.
28
- *
29
- * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.
30
- * @param {WebGLShaderProgram} program This filter's compiled shader program.
31
- */
32
- getUniformLocations(gl: WebGLRenderingContext, program: WebGLProgram): TWebGLUniformLocationMap;
33
29
  /**
34
30
  * Send data from this filter to its shader program's uniforms.
35
31
  *
@@ -44,4 +40,5 @@ export declare class Grayscale extends BaseFilter {
44
40
  **/
45
41
  isNeutralState(): boolean;
46
42
  }
43
+ export {};
47
44
  //# sourceMappingURL=Grayscale.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Grayscale.d.ts","sourceRoot":"","sources":["../../../src/filters/Grayscale.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,KAAK,EAAE,gBAAgB,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAC;AAI7E,MAAM,MAAM,cAAc,GAAG,SAAS,GAAG,WAAW,GAAG,YAAY,CAAC;AAEpE,eAAO,MAAM,sBAAsB,EAAE,OAAO,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAGvE,CAAC;AAEF;;;;;;GAMG;AACH,qBAAa,SAAU,SAAQ,UAAU;IAC/B,IAAI,EAAE,cAAc,CAAC;IAE7B,MAAM,CAAC,IAAI,SAAe;IAE1B,MAAM,CAAC,QAAQ,uCAA0B;IAEzC;;;;;OAKG;IACH,SAAS,CAAC,EAAE,SAAS,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,gBAAgB;IAuBnD,WAAW;IAIX,iBAAiB;IAIjB;;;;;OAKG;IACH,mBAAmB,CACjB,EAAE,EAAE,qBAAqB,EACzB,OAAO,EAAE,YAAY,GACpB,wBAAwB;IAM3B;;;;;OAKG;IACH,eAAe,CACb,EAAE,EAAE,qBAAqB,EACzB,gBAAgB,EAAE,wBAAwB;IAM5C;;;;QAII;IACJ,cAAc;CAGf"}
1
+ {"version":3,"file":"Grayscale.d.ts","sourceRoot":"","sources":["../../../src/filters/Grayscale.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,KAAK,EAAE,gBAAgB,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAC;AAI7E,MAAM,MAAM,cAAc,GAAG,SAAS,GAAG,WAAW,GAAG,YAAY,CAAC;AAEpE,KAAK,iBAAiB,GAAG;IACvB,IAAI,EAAE,cAAc,CAAC;CACtB,CAAC;AAEF,eAAO,MAAM,sBAAsB,EAAE,iBAEpC,CAAC;AAEF;;;;;;GAMG;AACH,qBAAa,SAAU,SAAQ,UAAU,CAAC,WAAW,EAAE,iBAAiB,CAAC;IAC/D,IAAI,EAAE,cAAc,CAAC;IAE7B,MAAM,CAAC,IAAI,SAAe;IAE1B,MAAM,CAAC,QAAQ,oBAA0B;IAEzC,MAAM,CAAC,gBAAgB,WAAa;IAEpC;;;;;OAKG;IACH,SAAS,CAAC,EAAE,SAAS,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,gBAAgB;IAuBnD,WAAW;IAIX,iBAAiB;IAIjB;;;;;OAKG;IACH,eAAe,CACb,EAAE,EAAE,qBAAqB,EACzB,gBAAgB,EAAE,wBAAwB;IAM5C;;;;QAII;IACJ,cAAc;CAGf"}
@@ -1,2 +1,2 @@
1
- import{defineProperty as e}from"../../_virtual/_rollupPluginBabelHelpers.min.mjs";import{BaseFilter as t}from"./BaseFilter.min.mjs";import{classRegistry as a}from"../ClassRegistry.min.mjs";import{fragmentSource as r}from"./shaders/grayscale.min.mjs";const s={mode:"average",mainParameter:"mode"};class o extends t{applyTo2d(e){let{imageData:{data:t}}=e;for(let e,a=0;a<t.length;a+=4){switch(this.mode){case"average":e=(t[a]+t[a+1]+t[a+2])/3;break;case"lightness":e=(Math.min(t[a],t[a+1],t[a+2])+Math.max(t[a],t[a+1],t[a+2]))/2;break;case"luminosity":e=.21*t[a]+.72*t[a+1]+.07*t[a+2]}t[a]=e,t[a+1]=e,t[a+2]=e}}getCacheKey(){return"".concat(this.type,"_").concat(this.mode)}getFragmentSource(){return r[this.mode]}getUniformLocations(e,t){return{uMode:e.getUniformLocation(t,"uMode")}}sendUniformData(e,t){e.uniform1i(t.uMode,1)}isNeutralState(){return!1}}e(o,"type","Grayscale"),e(o,"defaults",s),a.setClass(o);export{o as Grayscale,s as grayscaleDefaultValues};
1
+ import{defineProperty as e}from"../../_virtual/_rollupPluginBabelHelpers.min.mjs";import{BaseFilter as t}from"./BaseFilter.min.mjs";import{classRegistry as a}from"../ClassRegistry.min.mjs";import{fragmentSource as r}from"./shaders/grayscale.min.mjs";const s={mode:"average"};class i extends t{applyTo2d(e){let{imageData:{data:t}}=e;for(let e,a=0;a<t.length;a+=4){switch(this.mode){case"average":e=(t[a]+t[a+1]+t[a+2])/3;break;case"lightness":e=(Math.min(t[a],t[a+1],t[a+2])+Math.max(t[a],t[a+1],t[a+2]))/2;break;case"luminosity":e=.21*t[a]+.72*t[a+1]+.07*t[a+2]}t[a]=e,t[a+1]=e,t[a+2]=e}}getCacheKey(){return"".concat(this.type,"_").concat(this.mode)}getFragmentSource(){return r[this.mode]}sendUniformData(e,t){e.uniform1i(t.uMode,1)}isNeutralState(){return!1}}e(i,"type","Grayscale"),e(i,"defaults",s),e(i,"uniformLocations",["uMode"]),a.setClass(i);export{i as Grayscale,s as grayscaleDefaultValues};
2
2
  //# sourceMappingURL=Grayscale.min.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"Grayscale.min.mjs","sources":["../../../src/filters/Grayscale.ts"],"sourcesContent":["import type { TClassProperties } from '../typedefs';\nimport { BaseFilter } from './BaseFilter';\nimport type { T2DPipelineState, TWebGLUniformLocationMap } from './typedefs';\nimport { classRegistry } from '../ClassRegistry';\nimport { fragmentSource } from './shaders/grayscale';\n\nexport type TGrayscaleMode = 'average' | 'lightness' | 'luminosity';\n\nexport const grayscaleDefaultValues: Partial<TClassProperties<Grayscale>> = {\n mode: 'average',\n mainParameter: 'mode',\n};\n\n/**\n * Grayscale image filter class\n * @example\n * const filter = new Grayscale();\n * object.filters.push(filter);\n * object.applyFilters();\n */\nexport class Grayscale extends BaseFilter {\n declare mode: TGrayscaleMode;\n\n static type = 'Grayscale';\n\n static defaults = grayscaleDefaultValues;\n\n /**\n * Apply the Grayscale operation to a Uint8Array representing the pixels of an image.\n *\n * @param {Object} options\n * @param {ImageData} options.imageData The Uint8Array to be filtered.\n */\n applyTo2d({ imageData: { data } }: T2DPipelineState) {\n for (let i = 0, value: number; i < data.length; i += 4) {\n switch (this.mode) {\n case 'average':\n value = (data[i] + data[i + 1] + data[i + 2]) / 3;\n break;\n case 'lightness':\n value =\n (Math.min(data[i], data[i + 1], data[i + 2]) +\n Math.max(data[i], data[i + 1], data[i + 2])) /\n 2;\n break;\n case 'luminosity':\n value = 0.21 * data[i] + 0.72 * data[i + 1] + 0.07 * data[i + 2];\n break;\n }\n\n data[i] = value;\n data[i + 1] = value;\n data[i + 2] = value;\n }\n }\n\n getCacheKey() {\n return `${this.type}_${this.mode}`;\n }\n\n getFragmentSource() {\n return fragmentSource[this.mode];\n }\n\n /**\n * Return WebGL uniform locations for this filter's shader.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {WebGLShaderProgram} program This filter's compiled shader program.\n */\n getUniformLocations(\n gl: WebGLRenderingContext,\n program: WebGLProgram\n ): TWebGLUniformLocationMap {\n return {\n uMode: gl.getUniformLocation(program, 'uMode'),\n };\n }\n\n /**\n * Send data from this filter to its shader program's uniforms.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {Object} uniformLocations A map of string uniform names to WebGLUniformLocation objects\n */\n sendUniformData(\n gl: WebGLRenderingContext,\n uniformLocations: TWebGLUniformLocationMap\n ) {\n const mode = 1;\n gl.uniform1i(uniformLocations.uMode, mode);\n }\n\n /**\n * Grayscale filter isNeutralState implementation\n * The filter is never neutral\n * on the image\n **/\n isNeutralState() {\n return false;\n }\n}\n\nclassRegistry.setClass(Grayscale);\n"],"names":["grayscaleDefaultValues","mode","mainParameter","Grayscale","BaseFilter","applyTo2d","_ref","imageData","data","value","i","length","this","Math","min","max","getCacheKey","concat","type","getFragmentSource","fragmentSource","getUniformLocations","gl","program","uMode","getUniformLocation","sendUniformData","uniformLocations","uniform1i","isNeutralState","_defineProperty","classRegistry","setClass"],"mappings":"0PAQO,MAAMA,EAA+D,CAC1EC,KAAM,UACNC,cAAe,QAUV,MAAMC,UAAkBC,EAa7BC,SAAAA,CAASC,GAA4C,IAAzCC,WAAWC,KAAEA,IAA0BF,EACjD,IAAK,IAAWG,EAAPC,EAAI,EAAkBA,EAAIF,EAAKG,OAAQD,GAAK,EAAG,CACtD,OAAQE,KAAKX,MACX,IAAK,UACHQ,GAASD,EAAKE,GAAKF,EAAKE,EAAI,GAAKF,EAAKE,EAAI,IAAM,EAChD,MACF,IAAK,YACHD,GACGI,KAAKC,IAAIN,EAAKE,GAAIF,EAAKE,EAAI,GAAIF,EAAKE,EAAI,IACvCG,KAAKE,IAAIP,EAAKE,GAAIF,EAAKE,EAAI,GAAIF,EAAKE,EAAI,KAC1C,EACF,MACF,IAAK,aACHD,EAAQ,IAAOD,EAAKE,GAAK,IAAOF,EAAKE,EAAI,GAAK,IAAOF,EAAKE,EAAI,GAIlEF,EAAKE,GAAKD,EACVD,EAAKE,EAAI,GAAKD,EACdD,EAAKE,EAAI,GAAKD,CAChB,CACF,CAEAO,WAAAA,GACE,MAAAC,GAAAA,OAAUL,KAAKM,UAAID,OAAIL,KAAKX,KAC9B,CAEAkB,iBAAAA,GACE,OAAOC,EAAeR,KAAKX,KAC7B,CAQAoB,mBAAAA,CACEC,EACAC,GAEA,MAAO,CACLC,MAAOF,EAAGG,mBAAmBF,EAAS,SAE1C,CAQAG,eAAAA,CACEJ,EACAK,GAGAL,EAAGM,UAAUD,EAAiBH,MADjB,EAEf,CAOAK,cAAAA,GACE,OAAO,CACT,EACDC,EAjFY3B,EAAS,OAGN,aAAW2B,EAHd3B,EAAS,WAKFH,GA8EpB+B,EAAcC,SAAS7B"}
1
+ {"version":3,"file":"Grayscale.min.mjs","sources":["../../../src/filters/Grayscale.ts"],"sourcesContent":["import { BaseFilter } from './BaseFilter';\nimport type { T2DPipelineState, TWebGLUniformLocationMap } from './typedefs';\nimport { classRegistry } from '../ClassRegistry';\nimport { fragmentSource } from './shaders/grayscale';\n\nexport type TGrayscaleMode = 'average' | 'lightness' | 'luminosity';\n\ntype GrayscaleOwnProps = {\n mode: TGrayscaleMode;\n};\n\nexport const grayscaleDefaultValues: GrayscaleOwnProps = {\n mode: 'average',\n};\n\n/**\n * Grayscale image filter class\n * @example\n * const filter = new Grayscale();\n * object.filters.push(filter);\n * object.applyFilters();\n */\nexport class Grayscale extends BaseFilter<'Grayscale', GrayscaleOwnProps> {\n declare mode: TGrayscaleMode;\n\n static type = 'Grayscale';\n\n static defaults = grayscaleDefaultValues;\n\n static uniformLocations = ['uMode'];\n\n /**\n * Apply the Grayscale operation to a Uint8Array representing the pixels of an image.\n *\n * @param {Object} options\n * @param {ImageData} options.imageData The Uint8Array to be filtered.\n */\n applyTo2d({ imageData: { data } }: T2DPipelineState) {\n for (let i = 0, value: number; i < data.length; i += 4) {\n switch (this.mode) {\n case 'average':\n value = (data[i] + data[i + 1] + data[i + 2]) / 3;\n break;\n case 'lightness':\n value =\n (Math.min(data[i], data[i + 1], data[i + 2]) +\n Math.max(data[i], data[i + 1], data[i + 2])) /\n 2;\n break;\n case 'luminosity':\n value = 0.21 * data[i] + 0.72 * data[i + 1] + 0.07 * data[i + 2];\n break;\n }\n\n data[i] = value;\n data[i + 1] = value;\n data[i + 2] = value;\n }\n }\n\n getCacheKey() {\n return `${this.type}_${this.mode}`;\n }\n\n getFragmentSource() {\n return fragmentSource[this.mode];\n }\n\n /**\n * Send data from this filter to its shader program's uniforms.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {Object} uniformLocations A map of string uniform names to WebGLUniformLocation objects\n */\n sendUniformData(\n gl: WebGLRenderingContext,\n uniformLocations: TWebGLUniformLocationMap\n ) {\n const mode = 1;\n gl.uniform1i(uniformLocations.uMode, mode);\n }\n\n /**\n * Grayscale filter isNeutralState implementation\n * The filter is never neutral\n * on the image\n **/\n isNeutralState() {\n return false;\n }\n}\n\nclassRegistry.setClass(Grayscale);\n"],"names":["grayscaleDefaultValues","mode","Grayscale","BaseFilter","applyTo2d","_ref","imageData","data","value","i","length","this","Math","min","max","getCacheKey","concat","type","getFragmentSource","fragmentSource","sendUniformData","gl","uniformLocations","uniform1i","uMode","isNeutralState","_defineProperty","classRegistry","setClass"],"mappings":"0PAWO,MAAMA,EAA4C,CACvDC,KAAM,WAUD,MAAMC,UAAkBC,EAe7BC,SAAAA,CAASC,GAA4C,IAAzCC,WAAWC,KAAEA,IAA0BF,EACjD,IAAK,IAAWG,EAAPC,EAAI,EAAkBA,EAAIF,EAAKG,OAAQD,GAAK,EAAG,CACtD,OAAQE,KAAKV,MACX,IAAK,UACHO,GAASD,EAAKE,GAAKF,EAAKE,EAAI,GAAKF,EAAKE,EAAI,IAAM,EAChD,MACF,IAAK,YACHD,GACGI,KAAKC,IAAIN,EAAKE,GAAIF,EAAKE,EAAI,GAAIF,EAAKE,EAAI,IACvCG,KAAKE,IAAIP,EAAKE,GAAIF,EAAKE,EAAI,GAAIF,EAAKE,EAAI,KAC1C,EACF,MACF,IAAK,aACHD,EAAQ,IAAOD,EAAKE,GAAK,IAAOF,EAAKE,EAAI,GAAK,IAAOF,EAAKE,EAAI,GAIlEF,EAAKE,GAAKD,EACVD,EAAKE,EAAI,GAAKD,EACdD,EAAKE,EAAI,GAAKD,CAChB,CACF,CAEAO,WAAAA,GACE,MAAAC,GAAAA,OAAUL,KAAKM,UAAID,OAAIL,KAAKV,KAC9B,CAEAiB,iBAAAA,GACE,OAAOC,EAAeR,KAAKV,KAC7B,CAQAmB,eAAAA,CACEC,EACAC,GAGAD,EAAGE,UAAUD,EAAiBE,MADjB,EAEf,CAOAC,cAAAA,GACE,OAAO,CACT,EACDC,EApEYxB,EAAS,OAGN,aAAWwB,EAHdxB,EAAS,WAKFF,GAAsB0B,EAL7BxB,EAOe,mBAAA,CAAC,UA+D7ByB,EAAcC,SAAS1B"}
@@ -4,8 +4,7 @@ import { classRegistry } from '../ClassRegistry.mjs';
4
4
  import { fragmentSource } from './shaders/grayscale.mjs';
5
5
 
6
6
  const grayscaleDefaultValues = {
7
- mode: 'average',
8
- mainParameter: 'mode'
7
+ mode: 'average'
9
8
  };
10
9
 
11
10
  /**
@@ -52,18 +51,6 @@ class Grayscale extends BaseFilter {
52
51
  return fragmentSource[this.mode];
53
52
  }
54
53
 
55
- /**
56
- * Return WebGL uniform locations for this filter's shader.
57
- *
58
- * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.
59
- * @param {WebGLShaderProgram} program This filter's compiled shader program.
60
- */
61
- getUniformLocations(gl, program) {
62
- return {
63
- uMode: gl.getUniformLocation(program, 'uMode')
64
- };
65
- }
66
-
67
54
  /**
68
55
  * Send data from this filter to its shader program's uniforms.
69
56
  *
@@ -86,6 +73,7 @@ class Grayscale extends BaseFilter {
86
73
  }
87
74
  _defineProperty(Grayscale, "type", 'Grayscale');
88
75
  _defineProperty(Grayscale, "defaults", grayscaleDefaultValues);
76
+ _defineProperty(Grayscale, "uniformLocations", ['uMode']);
89
77
  classRegistry.setClass(Grayscale);
90
78
 
91
79
  export { Grayscale, grayscaleDefaultValues };
@@ -1 +1 @@
1
- {"version":3,"file":"Grayscale.mjs","sources":["../../../src/filters/Grayscale.ts"],"sourcesContent":["import type { TClassProperties } from '../typedefs';\nimport { BaseFilter } from './BaseFilter';\nimport type { T2DPipelineState, TWebGLUniformLocationMap } from './typedefs';\nimport { classRegistry } from '../ClassRegistry';\nimport { fragmentSource } from './shaders/grayscale';\n\nexport type TGrayscaleMode = 'average' | 'lightness' | 'luminosity';\n\nexport const grayscaleDefaultValues: Partial<TClassProperties<Grayscale>> = {\n mode: 'average',\n mainParameter: 'mode',\n};\n\n/**\n * Grayscale image filter class\n * @example\n * const filter = new Grayscale();\n * object.filters.push(filter);\n * object.applyFilters();\n */\nexport class Grayscale extends BaseFilter {\n declare mode: TGrayscaleMode;\n\n static type = 'Grayscale';\n\n static defaults = grayscaleDefaultValues;\n\n /**\n * Apply the Grayscale operation to a Uint8Array representing the pixels of an image.\n *\n * @param {Object} options\n * @param {ImageData} options.imageData The Uint8Array to be filtered.\n */\n applyTo2d({ imageData: { data } }: T2DPipelineState) {\n for (let i = 0, value: number; i < data.length; i += 4) {\n switch (this.mode) {\n case 'average':\n value = (data[i] + data[i + 1] + data[i + 2]) / 3;\n break;\n case 'lightness':\n value =\n (Math.min(data[i], data[i + 1], data[i + 2]) +\n Math.max(data[i], data[i + 1], data[i + 2])) /\n 2;\n break;\n case 'luminosity':\n value = 0.21 * data[i] + 0.72 * data[i + 1] + 0.07 * data[i + 2];\n break;\n }\n\n data[i] = value;\n data[i + 1] = value;\n data[i + 2] = value;\n }\n }\n\n getCacheKey() {\n return `${this.type}_${this.mode}`;\n }\n\n getFragmentSource() {\n return fragmentSource[this.mode];\n }\n\n /**\n * Return WebGL uniform locations for this filter's shader.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {WebGLShaderProgram} program This filter's compiled shader program.\n */\n getUniformLocations(\n gl: WebGLRenderingContext,\n program: WebGLProgram\n ): TWebGLUniformLocationMap {\n return {\n uMode: gl.getUniformLocation(program, 'uMode'),\n };\n }\n\n /**\n * Send data from this filter to its shader program's uniforms.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {Object} uniformLocations A map of string uniform names to WebGLUniformLocation objects\n */\n sendUniformData(\n gl: WebGLRenderingContext,\n uniformLocations: TWebGLUniformLocationMap\n ) {\n const mode = 1;\n gl.uniform1i(uniformLocations.uMode, mode);\n }\n\n /**\n * Grayscale filter isNeutralState implementation\n * The filter is never neutral\n * on the image\n **/\n isNeutralState() {\n return false;\n }\n}\n\nclassRegistry.setClass(Grayscale);\n"],"names":["grayscaleDefaultValues","mode","mainParameter","Grayscale","BaseFilter","applyTo2d","_ref","imageData","data","i","value","length","Math","min","max","getCacheKey","concat","type","getFragmentSource","fragmentSource","getUniformLocations","gl","program","uMode","getUniformLocation","sendUniformData","uniformLocations","uniform1i","isNeutralState","_defineProperty","classRegistry","setClass"],"mappings":"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"}
1
+ {"version":3,"file":"Grayscale.mjs","sources":["../../../src/filters/Grayscale.ts"],"sourcesContent":["import { BaseFilter } from './BaseFilter';\nimport type { T2DPipelineState, TWebGLUniformLocationMap } from './typedefs';\nimport { classRegistry } from '../ClassRegistry';\nimport { fragmentSource } from './shaders/grayscale';\n\nexport type TGrayscaleMode = 'average' | 'lightness' | 'luminosity';\n\ntype GrayscaleOwnProps = {\n mode: TGrayscaleMode;\n};\n\nexport const grayscaleDefaultValues: GrayscaleOwnProps = {\n mode: 'average',\n};\n\n/**\n * Grayscale image filter class\n * @example\n * const filter = new Grayscale();\n * object.filters.push(filter);\n * object.applyFilters();\n */\nexport class Grayscale extends BaseFilter<'Grayscale', GrayscaleOwnProps> {\n declare mode: TGrayscaleMode;\n\n static type = 'Grayscale';\n\n static defaults = grayscaleDefaultValues;\n\n static uniformLocations = ['uMode'];\n\n /**\n * Apply the Grayscale operation to a Uint8Array representing the pixels of an image.\n *\n * @param {Object} options\n * @param {ImageData} options.imageData The Uint8Array to be filtered.\n */\n applyTo2d({ imageData: { data } }: T2DPipelineState) {\n for (let i = 0, value: number; i < data.length; i += 4) {\n switch (this.mode) {\n case 'average':\n value = (data[i] + data[i + 1] + data[i + 2]) / 3;\n break;\n case 'lightness':\n value =\n (Math.min(data[i], data[i + 1], data[i + 2]) +\n Math.max(data[i], data[i + 1], data[i + 2])) /\n 2;\n break;\n case 'luminosity':\n value = 0.21 * data[i] + 0.72 * data[i + 1] + 0.07 * data[i + 2];\n break;\n }\n\n data[i] = value;\n data[i + 1] = value;\n data[i + 2] = value;\n }\n }\n\n getCacheKey() {\n return `${this.type}_${this.mode}`;\n }\n\n getFragmentSource() {\n return fragmentSource[this.mode];\n }\n\n /**\n * Send data from this filter to its shader program's uniforms.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {Object} uniformLocations A map of string uniform names to WebGLUniformLocation objects\n */\n sendUniformData(\n gl: WebGLRenderingContext,\n uniformLocations: TWebGLUniformLocationMap\n ) {\n const mode = 1;\n gl.uniform1i(uniformLocations.uMode, mode);\n }\n\n /**\n * Grayscale filter isNeutralState implementation\n * The filter is never neutral\n * on the image\n **/\n isNeutralState() {\n return false;\n }\n}\n\nclassRegistry.setClass(Grayscale);\n"],"names":["grayscaleDefaultValues","mode","Grayscale","BaseFilter","applyTo2d","_ref","imageData","data","i","value","length","Math","min","max","getCacheKey","concat","type","getFragmentSource","fragmentSource","sendUniformData","gl","uniformLocations","uniform1i","uMode","isNeutralState","_defineProperty","classRegistry","setClass"],"mappings":"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"}
@@ -1,7 +1,9 @@
1
- import type { TClassProperties } from '../typedefs';
2
1
  import { ColorMatrix } from './ColorMatrix';
3
2
  import type { TWebGLPipelineState, T2DPipelineState } from './typedefs';
4
- export declare const hueRotationDefaultValues: Partial<TClassProperties<HueRotation>>;
3
+ export type HueRotationOwnProps = {
4
+ rotation: number;
5
+ };
6
+ export declare const hueRotationDefaultValues: HueRotationOwnProps;
5
7
  /**
6
8
  * HueRotation filter class
7
9
  * @example
@@ -11,15 +13,19 @@ export declare const hueRotationDefaultValues: Partial<TClassProperties<HueRotat
11
13
  * object.filters.push(filter);
12
14
  * object.applyFilters();
13
15
  */
14
- export declare class HueRotation extends ColorMatrix {
16
+ export declare class HueRotation extends ColorMatrix<'HueRotation', HueRotationOwnProps> {
15
17
  /**
16
18
  * HueRotation value, from -1 to 1.
17
19
  */
18
- rotation: number;
20
+ rotation: HueRotationOwnProps['rotation'];
19
21
  static type: string;
20
- static defaults: Partial<TClassProperties<HueRotation>>;
22
+ static defaults: HueRotationOwnProps;
21
23
  calculateMatrix(): void;
22
24
  isNeutralState(): boolean;
23
25
  applyTo(options: TWebGLPipelineState | T2DPipelineState): void;
26
+ toObject(): {
27
+ type: 'HueRotation';
28
+ rotation: number;
29
+ };
24
30
  }
25
31
  //# sourceMappingURL=HueRotation.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"HueRotation.d.ts","sourceRoot":"","sources":["../../../src/filters/HueRotation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAGpD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,KAAK,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAGxE,eAAO,MAAM,wBAAwB,EAAE,OAAO,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAIzE,CAAC;AAEJ;;;;;;;;GAQG;AAEH,qBAAa,WAAY,SAAQ,WAAW;IAC1C;;OAEG;IACK,QAAQ,EAAE,MAAM,CAAC;IAEzB,MAAM,CAAC,IAAI,SAAiB;IAE5B,MAAM,CAAC,QAAQ,yCAA4B;IAE3C,eAAe;IAmBf,cAAc;IAKd,OAAO,CAAC,OAAO,EAAE,mBAAmB,GAAG,gBAAgB;CAIxD"}
1
+ {"version":3,"file":"HueRotation.d.ts","sourceRoot":"","sources":["../../../src/filters/HueRotation.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,KAAK,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAGxE,MAAM,MAAM,mBAAmB,GAAG;IAChC,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,eAAO,MAAM,wBAAwB,EAAE,mBAEtC,CAAC;AAEF;;;;;;;;GAQG;AACH,qBAAa,WAAY,SAAQ,WAAW,CAC1C,aAAa,EACb,mBAAmB,CACpB;IACC;;OAEG;IACK,QAAQ,EAAE,mBAAmB,CAAC,UAAU,CAAC,CAAC;IAElD,MAAM,CAAC,IAAI,SAAiB;IAE5B,MAAM,CAAC,QAAQ,sBAA4B;IAE3C,eAAe;IAmBf,cAAc;IAId,OAAO,CAAC,OAAO,EAAE,mBAAmB,GAAG,gBAAgB;IAMvD,QAAQ,IAAI;QAAE,IAAI,EAAE,aAAa,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE;CAMtD"}
@@ -1,2 +1,2 @@
1
- import{defineProperty as t}from"../../_virtual/_rollupPluginBabelHelpers.min.mjs";import{cos as i}from"../util/misc/cos.min.mjs";import{sin as r}from"../util/misc/sin.min.mjs";import{ColorMatrix as a}from"./ColorMatrix.min.mjs";import{classRegistry as s}from"../ClassRegistry.min.mjs";const m={rotation:0,mainParameter:"rotation"};class o extends a{calculateMatrix(){const t=this.rotation*Math.PI,a=i(t),s=r(t),m=1/3,o=Math.sqrt(m)*s,e=1-a;this.matrix=[1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0],this.matrix[0]=a+e/3,this.matrix[1]=m*e-o,this.matrix[2]=m*e+o,this.matrix[5]=m*e+o,this.matrix[6]=a+m*e,this.matrix[7]=m*e-o,this.matrix[10]=m*e-o,this.matrix[11]=m*e+o,this.matrix[12]=a+m*e}isNeutralState(){return this.calculateMatrix(),super.isNeutralState()}applyTo(t){this.calculateMatrix(),super.applyTo(t)}}t(o,"type","HueRotation"),t(o,"defaults",m),s.setClass(o);export{o as HueRotation,m as hueRotationDefaultValues};
1
+ import{defineProperty as t}from"../../_virtual/_rollupPluginBabelHelpers.min.mjs";import{cos as i}from"../util/misc/cos.min.mjs";import{sin as r}from"../util/misc/sin.min.mjs";import{ColorMatrix as s}from"./ColorMatrix.min.mjs";import{classRegistry as a}from"../ClassRegistry.min.mjs";const o={rotation:0};class m extends s{calculateMatrix(){const t=this.rotation*Math.PI,s=i(t),a=r(t),o=1/3,m=Math.sqrt(o)*a,e=1-s;this.matrix=[1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0],this.matrix[0]=s+e/3,this.matrix[1]=o*e-m,this.matrix[2]=o*e+m,this.matrix[5]=o*e+m,this.matrix[6]=s+o*e,this.matrix[7]=o*e-m,this.matrix[10]=o*e-m,this.matrix[11]=o*e+m,this.matrix[12]=s+o*e}isNeutralState(){return 0===this.rotation}applyTo(t){this.calculateMatrix(),super.applyTo(t)}toObject(){return{type:this.type,rotation:this.rotation}}}t(m,"type","HueRotation"),t(m,"defaults",o),a.setClass(m);export{m as HueRotation,o as hueRotationDefaultValues};
2
2
  //# sourceMappingURL=HueRotation.min.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"HueRotation.min.mjs","sources":["../../../src/filters/HueRotation.ts"],"sourcesContent":["import type { TClassProperties } from '../typedefs';\nimport { cos } from '../util/misc/cos';\nimport { sin } from '../util/misc/sin';\nimport { ColorMatrix } from './ColorMatrix';\nimport type { TWebGLPipelineState, T2DPipelineState } from './typedefs';\nimport { classRegistry } from '../ClassRegistry';\n\nexport const hueRotationDefaultValues: Partial<TClassProperties<HueRotation>> =\n {\n rotation: 0,\n mainParameter: 'rotation',\n };\n\n/**\n * HueRotation filter class\n * @example\n * const filter = new HueRotation({\n * rotation: -0.5\n * });\n * object.filters.push(filter);\n * object.applyFilters();\n */\n// @ts-expect-error some babbling about mainParameter\nexport class HueRotation extends ColorMatrix {\n /**\n * HueRotation value, from -1 to 1.\n */\n declare rotation: number;\n\n static type = 'HueRotation';\n\n static defaults = hueRotationDefaultValues;\n\n calculateMatrix() {\n const rad = this.rotation * Math.PI,\n cosine = cos(rad),\n sine = sin(rad),\n aThird = 1 / 3,\n aThirdSqtSin = Math.sqrt(aThird) * sine,\n OneMinusCos = 1 - cosine;\n this.matrix = [1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0];\n this.matrix[0] = cosine + OneMinusCos / 3;\n this.matrix[1] = aThird * OneMinusCos - aThirdSqtSin;\n this.matrix[2] = aThird * OneMinusCos + aThirdSqtSin;\n this.matrix[5] = aThird * OneMinusCos + aThirdSqtSin;\n this.matrix[6] = cosine + aThird * OneMinusCos;\n this.matrix[7] = aThird * OneMinusCos - aThirdSqtSin;\n this.matrix[10] = aThird * OneMinusCos - aThirdSqtSin;\n this.matrix[11] = aThird * OneMinusCos + aThirdSqtSin;\n this.matrix[12] = cosine + aThird * OneMinusCos;\n }\n\n isNeutralState() {\n this.calculateMatrix();\n return super.isNeutralState();\n }\n\n applyTo(options: TWebGLPipelineState | T2DPipelineState) {\n this.calculateMatrix();\n super.applyTo(options);\n }\n}\n\nclassRegistry.setClass(HueRotation);\n"],"names":["hueRotationDefaultValues","rotation","mainParameter","HueRotation","ColorMatrix","calculateMatrix","rad","this","Math","PI","cosine","cos","sine","sin","aThird","aThirdSqtSin","sqrt","OneMinusCos","matrix","isNeutralState","super","applyTo","options","_defineProperty","classRegistry","setClass"],"mappings":"6RAOO,MAAMA,EACX,CACEC,SAAU,EACVC,cAAe,YAaZ,MAAMC,UAAoBC,EAU/BC,eAAAA,GACE,MAAMC,EAAMC,KAAKN,SAAWO,KAAKC,GAC/BC,EAASC,EAAIL,GACbM,EAAOC,EAAIP,GACXQ,EAAS,EAAI,EACbC,EAAeP,KAAKQ,KAAKF,GAAUF,EACnCK,EAAc,EAAIP,EACpBH,KAAKW,OAAS,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GACxEX,KAAKW,OAAO,GAAKR,EAASO,EAAc,EACxCV,KAAKW,OAAO,GAAKJ,EAASG,EAAcF,EACxCR,KAAKW,OAAO,GAAKJ,EAASG,EAAcF,EACxCR,KAAKW,OAAO,GAAKJ,EAASG,EAAcF,EACxCR,KAAKW,OAAO,GAAKR,EAASI,EAASG,EACnCV,KAAKW,OAAO,GAAKJ,EAASG,EAAcF,EACxCR,KAAKW,OAAO,IAAMJ,EAASG,EAAcF,EACzCR,KAAKW,OAAO,IAAMJ,EAASG,EAAcF,EACzCR,KAAKW,OAAO,IAAMR,EAASI,EAASG,CACtC,CAEAE,cAAAA,GAEE,OADAZ,KAAKF,kBACEe,MAAMD,gBACf,CAEAE,OAAAA,CAAQC,GACNf,KAAKF,kBACLe,MAAMC,QAAQC,EAChB,EApCAC,EADWpB,EAAW,OAMR,eAAaoB,EANhBpB,EAAW,WAQJH,GAgCpBwB,EAAcC,SAAStB"}
1
+ {"version":3,"file":"HueRotation.min.mjs","sources":["../../../src/filters/HueRotation.ts"],"sourcesContent":["import { cos } from '../util/misc/cos';\nimport { sin } from '../util/misc/sin';\nimport { ColorMatrix } from './ColorMatrix';\nimport type { TWebGLPipelineState, T2DPipelineState } from './typedefs';\nimport { classRegistry } from '../ClassRegistry';\n\nexport type HueRotationOwnProps = {\n rotation: number;\n};\n\nexport const hueRotationDefaultValues: HueRotationOwnProps = {\n rotation: 0,\n};\n\n/**\n * HueRotation filter class\n * @example\n * const filter = new HueRotation({\n * rotation: -0.5\n * });\n * object.filters.push(filter);\n * object.applyFilters();\n */\nexport class HueRotation extends ColorMatrix<\n 'HueRotation',\n HueRotationOwnProps\n> {\n /**\n * HueRotation value, from -1 to 1.\n */\n declare rotation: HueRotationOwnProps['rotation'];\n\n static type = 'HueRotation';\n\n static defaults = hueRotationDefaultValues;\n\n calculateMatrix() {\n const rad = this.rotation * Math.PI,\n cosine = cos(rad),\n sine = sin(rad),\n aThird = 1 / 3,\n aThirdSqtSin = Math.sqrt(aThird) * sine,\n OneMinusCos = 1 - cosine;\n this.matrix = [1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0];\n this.matrix[0] = cosine + OneMinusCos / 3;\n this.matrix[1] = aThird * OneMinusCos - aThirdSqtSin;\n this.matrix[2] = aThird * OneMinusCos + aThirdSqtSin;\n this.matrix[5] = aThird * OneMinusCos + aThirdSqtSin;\n this.matrix[6] = cosine + aThird * OneMinusCos;\n this.matrix[7] = aThird * OneMinusCos - aThirdSqtSin;\n this.matrix[10] = aThird * OneMinusCos - aThirdSqtSin;\n this.matrix[11] = aThird * OneMinusCos + aThirdSqtSin;\n this.matrix[12] = cosine + aThird * OneMinusCos;\n }\n\n isNeutralState() {\n return this.rotation === 0;\n }\n\n applyTo(options: TWebGLPipelineState | T2DPipelineState) {\n this.calculateMatrix();\n super.applyTo(options);\n }\n\n //@ts-expect-error TS and classes with different methods\n toObject(): { type: 'HueRotation'; rotation: number } {\n return {\n type: this.type,\n rotation: this.rotation,\n };\n }\n}\n\nclassRegistry.setClass(HueRotation);\n"],"names":["hueRotationDefaultValues","rotation","HueRotation","ColorMatrix","calculateMatrix","rad","this","Math","PI","cosine","cos","sine","sin","aThird","aThirdSqtSin","sqrt","OneMinusCos","matrix","isNeutralState","applyTo","options","super","toObject","type","_defineProperty","classRegistry","setClass"],"mappings":"6RAUO,MAAMA,EAAgD,CAC3DC,SAAU,GAYL,MAAMC,UAAoBC,EAa/BC,eAAAA,GACE,MAAMC,EAAMC,KAAKL,SAAWM,KAAKC,GAC/BC,EAASC,EAAIL,GACbM,EAAOC,EAAIP,GACXQ,EAAS,EAAI,EACbC,EAAeP,KAAKQ,KAAKF,GAAUF,EACnCK,EAAc,EAAIP,EACpBH,KAAKW,OAAS,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GACxEX,KAAKW,OAAO,GAAKR,EAASO,EAAc,EACxCV,KAAKW,OAAO,GAAKJ,EAASG,EAAcF,EACxCR,KAAKW,OAAO,GAAKJ,EAASG,EAAcF,EACxCR,KAAKW,OAAO,GAAKJ,EAASG,EAAcF,EACxCR,KAAKW,OAAO,GAAKR,EAASI,EAASG,EACnCV,KAAKW,OAAO,GAAKJ,EAASG,EAAcF,EACxCR,KAAKW,OAAO,IAAMJ,EAASG,EAAcF,EACzCR,KAAKW,OAAO,IAAMJ,EAASG,EAAcF,EACzCR,KAAKW,OAAO,IAAMR,EAASI,EAASG,CACtC,CAEAE,cAAAA,GACE,OAAyB,IAAlBZ,KAAKL,QACd,CAEAkB,OAAAA,CAAQC,GACNd,KAAKF,kBACLiB,MAAMF,QAAQC,EAChB,CAGAE,QAAAA,GACE,MAAO,CACLC,KAAMjB,KAAKiB,KACXtB,SAAUK,KAAKL,SAEnB,EA3CAuB,EAJWtB,EAAW,OASR,eAAasB,EAThBtB,EAAW,WAWJF,GAuCpByB,EAAcC,SAASxB"}
@@ -5,8 +5,7 @@ import { ColorMatrix } from './ColorMatrix.mjs';
5
5
  import { classRegistry } from '../ClassRegistry.mjs';
6
6
 
7
7
  const hueRotationDefaultValues = {
8
- rotation: 0,
9
- mainParameter: 'rotation'
8
+ rotation: 0
10
9
  };
11
10
 
12
11
  /**
@@ -18,7 +17,6 @@ const hueRotationDefaultValues = {
18
17
  * object.filters.push(filter);
19
18
  * object.applyFilters();
20
19
  */
21
- // @ts-expect-error some babbling about mainParameter
22
20
  class HueRotation extends ColorMatrix {
23
21
  calculateMatrix() {
24
22
  const rad = this.rotation * Math.PI,
@@ -39,13 +37,20 @@ class HueRotation extends ColorMatrix {
39
37
  this.matrix[12] = cosine + aThird * OneMinusCos;
40
38
  }
41
39
  isNeutralState() {
42
- this.calculateMatrix();
43
- return super.isNeutralState();
40
+ return this.rotation === 0;
44
41
  }
45
42
  applyTo(options) {
46
43
  this.calculateMatrix();
47
44
  super.applyTo(options);
48
45
  }
46
+
47
+ //@ts-expect-error TS and classes with different methods
48
+ toObject() {
49
+ return {
50
+ type: this.type,
51
+ rotation: this.rotation
52
+ };
53
+ }
49
54
  }
50
55
  /**
51
56
  * HueRotation value, from -1 to 1.