fabric 6.5.1 → 6.5.3

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 (144) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/dist/index.js +95 -135
  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 +95 -135
  9. package/dist/index.mjs.map +1 -1
  10. package/dist/index.node.cjs +95 -135
  11. package/dist/index.node.cjs.map +1 -1
  12. package/dist/index.node.mjs +95 -135
  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 +1 -3
  20. package/dist/src/canvas/Canvas.mjs.map +1 -1
  21. package/dist/src/color/Color.d.ts.map +1 -1
  22. package/dist/src/color/Color.min.mjs +1 -1
  23. package/dist/src/color/Color.min.mjs.map +1 -1
  24. package/dist/src/color/Color.mjs +1 -0
  25. package/dist/src/color/Color.mjs.map +1 -1
  26. package/dist/src/filters/BaseFilter.d.ts +3 -3
  27. package/dist/src/filters/BaseFilter.d.ts.map +1 -1
  28. package/dist/src/filters/BaseFilter.min.mjs.map +1 -1
  29. package/dist/src/filters/BaseFilter.mjs.map +1 -1
  30. package/dist/src/filters/BlendColor.d.ts.map +1 -1
  31. package/dist/src/filters/BlendColor.min.mjs +1 -1
  32. package/dist/src/filters/BlendColor.min.mjs.map +1 -1
  33. package/dist/src/filters/BlendColor.mjs +39 -34
  34. package/dist/src/filters/BlendColor.mjs.map +1 -1
  35. package/dist/src/filters/Brightness.min.mjs +1 -1
  36. package/dist/src/filters/Brightness.min.mjs.map +1 -1
  37. package/dist/src/filters/Brightness.mjs +3 -3
  38. package/dist/src/filters/Brightness.mjs.map +1 -1
  39. package/dist/src/filters/ColorMatrix.d.ts +3 -6
  40. package/dist/src/filters/ColorMatrix.d.ts.map +1 -1
  41. package/dist/src/filters/ColorMatrix.min.mjs +1 -1
  42. package/dist/src/filters/ColorMatrix.min.mjs.map +1 -1
  43. package/dist/src/filters/ColorMatrix.mjs +7 -8
  44. package/dist/src/filters/ColorMatrix.mjs.map +1 -1
  45. package/dist/src/filters/ColorMatrixFilters.d.ts.map +1 -1
  46. package/dist/src/filters/ColorMatrixFilters.min.mjs.map +1 -1
  47. package/dist/src/filters/ColorMatrixFilters.mjs +0 -1
  48. package/dist/src/filters/ColorMatrixFilters.mjs.map +1 -1
  49. package/dist/src/filters/Composed.d.ts +9 -4
  50. package/dist/src/filters/Composed.d.ts.map +1 -1
  51. package/dist/src/filters/Composed.min.mjs.map +1 -1
  52. package/dist/src/filters/Composed.mjs +0 -1
  53. package/dist/src/filters/Composed.mjs.map +1 -1
  54. package/dist/src/filters/Grayscale.d.ts.map +1 -1
  55. package/dist/src/filters/Grayscale.min.mjs +1 -1
  56. package/dist/src/filters/Grayscale.min.mjs.map +1 -1
  57. package/dist/src/filters/Grayscale.mjs +7 -6
  58. package/dist/src/filters/Grayscale.mjs.map +1 -1
  59. package/dist/src/filters/HueRotation.d.ts +7 -4
  60. package/dist/src/filters/HueRotation.d.ts.map +1 -1
  61. package/dist/src/filters/HueRotation.min.mjs +1 -1
  62. package/dist/src/filters/HueRotation.min.mjs.map +1 -1
  63. package/dist/src/filters/HueRotation.mjs +5 -16
  64. package/dist/src/filters/HueRotation.mjs.map +1 -1
  65. package/dist/src/filters/Saturation.d.ts.map +1 -1
  66. package/dist/src/filters/Saturation.min.mjs +1 -1
  67. package/dist/src/filters/Saturation.min.mjs.map +1 -1
  68. package/dist/src/filters/Saturation.mjs +7 -4
  69. package/dist/src/filters/Saturation.mjs.map +1 -1
  70. package/dist/src/filters/Vibrance.d.ts.map +1 -1
  71. package/dist/src/filters/Vibrance.min.mjs +1 -1
  72. package/dist/src/filters/Vibrance.min.mjs.map +1 -1
  73. package/dist/src/filters/Vibrance.mjs +8 -5
  74. package/dist/src/filters/Vibrance.mjs.map +1 -1
  75. package/dist/src/filters/WebGLFilterBackend.d.ts.map +1 -1
  76. package/dist/src/filters/WebGLFilterBackend.min.mjs +1 -1
  77. package/dist/src/filters/WebGLFilterBackend.min.mjs.map +1 -1
  78. package/dist/src/filters/WebGLFilterBackend.mjs +2 -6
  79. package/dist/src/filters/WebGLFilterBackend.mjs.map +1 -1
  80. package/dist/src/shapes/Group.d.ts.map +1 -1
  81. package/dist/src/shapes/IText/ITextClickBehavior.d.ts.map +1 -1
  82. package/dist/src/shapes/IText/ITextClickBehavior.min.mjs.map +1 -1
  83. package/dist/src/shapes/IText/ITextClickBehavior.mjs +0 -2
  84. package/dist/src/shapes/IText/ITextClickBehavior.mjs.map +1 -1
  85. package/dist/src/shapes/IText/ITextKeyBehavior.d.ts.map +1 -1
  86. package/dist/src/shapes/IText/ITextKeyBehavior.min.mjs.map +1 -1
  87. package/dist/src/shapes/IText/ITextKeyBehavior.mjs +0 -3
  88. package/dist/src/shapes/IText/ITextKeyBehavior.mjs.map +1 -1
  89. package/dist/src/shapes/Image.d.ts +1 -1
  90. package/dist/src/shapes/Object/Object.d.ts.map +1 -1
  91. package/dist/src/shapes/Object/Object.min.mjs +1 -1
  92. package/dist/src/shapes/Object/Object.min.mjs.map +1 -1
  93. package/dist/src/shapes/Object/Object.mjs +17 -42
  94. package/dist/src/shapes/Object/Object.mjs.map +1 -1
  95. package/dist/src/shapes/Text/StyledText.d.ts +0 -2
  96. package/dist/src/shapes/Text/StyledText.d.ts.map +1 -1
  97. package/dist/src/shapes/Text/StyledText.min.mjs.map +1 -1
  98. package/dist/src/shapes/Text/StyledText.mjs +0 -3
  99. package/dist/src/shapes/Text/StyledText.mjs.map +1 -1
  100. package/dist-extensions/src/canvas/Canvas.d.ts.map +1 -1
  101. package/dist-extensions/src/color/Color.d.ts.map +1 -1
  102. package/dist-extensions/src/filters/BaseFilter.d.ts +3 -3
  103. package/dist-extensions/src/filters/BaseFilter.d.ts.map +1 -1
  104. package/dist-extensions/src/filters/BlendColor.d.ts.map +1 -1
  105. package/dist-extensions/src/filters/ColorMatrix.d.ts +3 -6
  106. package/dist-extensions/src/filters/ColorMatrix.d.ts.map +1 -1
  107. package/dist-extensions/src/filters/ColorMatrixFilters.d.ts.map +1 -1
  108. package/dist-extensions/src/filters/Composed.d.ts +9 -4
  109. package/dist-extensions/src/filters/Composed.d.ts.map +1 -1
  110. package/dist-extensions/src/filters/Grayscale.d.ts.map +1 -1
  111. package/dist-extensions/src/filters/HueRotation.d.ts +7 -4
  112. package/dist-extensions/src/filters/HueRotation.d.ts.map +1 -1
  113. package/dist-extensions/src/filters/Saturation.d.ts.map +1 -1
  114. package/dist-extensions/src/filters/Vibrance.d.ts.map +1 -1
  115. package/dist-extensions/src/filters/WebGLFilterBackend.d.ts.map +1 -1
  116. package/dist-extensions/src/shapes/Group.d.ts.map +1 -1
  117. package/dist-extensions/src/shapes/IText/ITextClickBehavior.d.ts.map +1 -1
  118. package/dist-extensions/src/shapes/IText/ITextKeyBehavior.d.ts.map +1 -1
  119. package/dist-extensions/src/shapes/Image.d.ts +1 -1
  120. package/dist-extensions/src/shapes/Object/Object.d.ts.map +1 -1
  121. package/dist-extensions/src/shapes/Text/StyledText.d.ts +0 -2
  122. package/dist-extensions/src/shapes/Text/StyledText.d.ts.map +1 -1
  123. package/package.json +1 -1
  124. package/src/canvas/Canvas.ts +1 -3
  125. package/src/color/Color.ts +1 -0
  126. package/src/color/color.test.ts +8 -0
  127. package/src/filters/BaseFilter.ts +5 -4
  128. package/src/filters/BlendColor.ts +39 -35
  129. package/src/filters/Brightness.ts +3 -3
  130. package/src/filters/ColorMatrix.spec.ts +37 -0
  131. package/src/filters/ColorMatrix.ts +12 -12
  132. package/src/filters/ColorMatrixFilters.ts +5 -2
  133. package/src/filters/Composed.ts +11 -7
  134. package/src/filters/Grayscale.ts +7 -9
  135. package/src/filters/HueRotation.ts +36 -15
  136. package/src/filters/Saturation.ts +7 -4
  137. package/src/filters/Vibrance.ts +8 -5
  138. package/src/filters/WebGLFilterBackend.ts +2 -4
  139. package/src/shapes/IText/ITextClickBehavior.ts +4 -3
  140. package/src/shapes/IText/ITextKeyBehavior.ts +13 -6
  141. package/src/shapes/Object/Object.spec.ts +13 -0
  142. package/src/shapes/Object/Object.ts +13 -54
  143. package/src/shapes/Text/StyledText.ts +6 -6
  144. package/tsconfig.json +3 -3
package/CHANGELOG.md CHANGED
@@ -2,6 +2,20 @@
2
2
 
3
3
  ## [next]
4
4
 
5
+ ## [6.5.3]
6
+
7
+ - fix(ColorMatrix): Restore correct alpha for JS colorMatrix filter [#10313](https://github.com/fabricjs/fabric.js/pull/10313)
8
+
9
+ ## [6.5.2]
10
+
11
+ - chore(): Reduce some verbose code [#10311](https://github.com/fabricjs/fabric.js/pull/10311)
12
+ - ci(): Test node 22 again [#10310](https://github.com/fabricjs/fabric.js/pull/10310)
13
+ - chore(TS): Try to remove all TS-ERROR directives [#10309](https://github.com/fabricjs/fabric.js/pull/10309)
14
+ - chore(): Make TS config more strict [#10308](https://github.com/fabricjs/fabric.js/pull/10308)
15
+ - fix(Color): Support uppercase keywords [#10300](https://github.com/fabricjs/fabric.js/pull/10300)
16
+ - fix(): The \_setLineDash method has additional side effects, altering the value of strokeDashArray [#10292](https://github.com/fabricjs/fabric.js/issues/10292)
17
+ - fix(): for object caching over invalidating the cache [#10294](https://github.com/fabricjs/fabric.js/pull/10294)
18
+
5
19
  ## [6.5.1]
6
20
 
7
21
  - fix(TS): Add missing export for type DrawContext [#10281](https://github.com/fabricjs/fabric.js/pull/10281)
package/dist/index.js CHANGED
@@ -411,7 +411,7 @@
411
411
  }
412
412
  const cache = new Cache();
413
413
 
414
- var version = "6.5.1";
414
+ var version = "6.5.3";
415
415
 
416
416
  // use this syntax so babel plugin see this import here
417
417
  const VERSION = version;
@@ -2381,6 +2381,7 @@
2381
2381
  * @returns {TRGBAColorSource}
2382
2382
  */
2383
2383
  _tryParsingColor(color) {
2384
+ color = color.toLowerCase();
2384
2385
  if (color in ColorNameMap) {
2385
2386
  color = ColorNameMap[color];
2386
2387
  }
@@ -6850,8 +6851,8 @@
6850
6851
  // for sure this ALIASING_LIMIT is slightly creating problem
6851
6852
  // in situation in which the cache canvas gets an upper limit
6852
6853
  // also objectScale contains already scaleX and scaleY
6853
- width: neededX + ALIASING_LIMIT,
6854
- height: neededY + ALIASING_LIMIT,
6854
+ width: Math.ceil(neededX + ALIASING_LIMIT),
6855
+ height: Math.ceil(neededY + ALIASING_LIMIT),
6855
6856
  zoomX: objectScale.x,
6856
6857
  zoomY: objectScale.y,
6857
6858
  x: neededX,
@@ -6868,51 +6869,30 @@
6868
6869
  _updateCacheCanvas() {
6869
6870
  const canvas = this._cacheCanvas,
6870
6871
  context = this._cacheContext,
6871
- dims = this._limitCacheSize(this._getCacheCanvasDimensions()),
6872
- minCacheSize = config.minCacheSideLimit,
6873
- width = dims.width,
6874
- height = dims.height,
6875
- zoomX = dims.zoomX,
6876
- zoomY = dims.zoomY,
6872
+ {
6873
+ width,
6874
+ height,
6875
+ zoomX,
6876
+ zoomY,
6877
+ x,
6878
+ y
6879
+ } = this._limitCacheSize(this._getCacheCanvasDimensions()),
6877
6880
  dimensionsChanged = width !== canvas.width || height !== canvas.height,
6878
6881
  zoomChanged = this.zoomX !== zoomX || this.zoomY !== zoomY;
6879
6882
  if (!canvas || !context) {
6880
6883
  return false;
6881
6884
  }
6882
- let drawingWidth,
6883
- drawingHeight,
6884
- shouldRedraw = dimensionsChanged || zoomChanged,
6885
- additionalWidth = 0,
6886
- additionalHeight = 0,
6887
- shouldResizeCanvas = false;
6888
- if (dimensionsChanged) {
6889
- const canvasWidth = this._cacheCanvas.width,
6890
- canvasHeight = this._cacheCanvas.height,
6891
- sizeGrowing = width > canvasWidth || height > canvasHeight,
6892
- sizeShrinking = (width < canvasWidth * 0.9 || height < canvasHeight * 0.9) && canvasWidth > minCacheSize && canvasHeight > minCacheSize;
6893
- shouldResizeCanvas = sizeGrowing || sizeShrinking;
6894
- if (sizeGrowing && !dims.capped && (width > minCacheSize || height > minCacheSize)) {
6895
- additionalWidth = width * 0.1;
6896
- additionalHeight = height * 0.1;
6897
- }
6898
- }
6899
- if (isTextObject(this) && this.path) {
6900
- shouldRedraw = true;
6901
- shouldResizeCanvas = true;
6902
- // IMHO in those lines we are using zoomX and zoomY not the this version.
6903
- additionalWidth += this.getHeightOfLine(0) * this.zoomX;
6904
- additionalHeight += this.getHeightOfLine(0) * this.zoomY;
6905
- }
6885
+ const shouldRedraw = dimensionsChanged || zoomChanged;
6906
6886
  if (shouldRedraw) {
6907
- if (shouldResizeCanvas) {
6908
- canvas.width = Math.ceil(width + additionalWidth);
6909
- canvas.height = Math.ceil(height + additionalHeight);
6887
+ if (width !== canvas.width || height !== canvas.height) {
6888
+ canvas.width = width;
6889
+ canvas.height = height;
6910
6890
  } else {
6911
6891
  context.setTransform(1, 0, 0, 1, 0, 0);
6912
6892
  context.clearRect(0, 0, canvas.width, canvas.height);
6913
6893
  }
6914
- drawingWidth = dims.x / 2;
6915
- drawingHeight = dims.y / 2;
6894
+ const drawingWidth = x / 2;
6895
+ const drawingHeight = y / 2;
6916
6896
  this.cacheTranslationX = Math.round(canvas.width / 2 - drawingWidth) + drawingWidth;
6917
6897
  this.cacheTranslationY = Math.round(canvas.height / 2 - drawingHeight) + drawingHeight;
6918
6898
  context.translate(this.cacheTranslationX, this.cacheTranslationY);
@@ -7387,10 +7367,6 @@
7387
7367
  if (!dashArray || dashArray.length === 0) {
7388
7368
  return;
7389
7369
  }
7390
- // Spec requires the concatenation of two copies of the dash array when the number of elements is odd
7391
- if (1 & dashArray.length) {
7392
- dashArray.push(...dashArray);
7393
- }
7394
7370
  ctx.setLineDash(dashArray);
7395
7371
  }
7396
7372
 
@@ -15274,9 +15250,7 @@
15274
15250
  * @private
15275
15251
  */
15276
15252
  _resetTransformEventData() {
15277
- this._target = undefined;
15278
- this._pointer = undefined;
15279
- this._absolutePointer = undefined;
15253
+ this._target = this._pointer = this._absolutePointer = undefined;
15280
15254
  }
15281
15255
 
15282
15256
  /**
@@ -18480,8 +18454,6 @@
18480
18454
  * has no other properties, then it is also deleted. Finally,
18481
18455
  * if the line containing that character has no other characters
18482
18456
  * then it also is deleted.
18483
- *
18484
- * @param {string} property The property to compare between characters and text.
18485
18457
  */
18486
18458
  cleanStyle(property) {
18487
18459
  if (!this.styles) {
@@ -18527,7 +18499,6 @@
18527
18499
  graphemeCount += this._textLines[i].length;
18528
18500
  }
18529
18501
  if (allStyleObjectPropertiesMatch && stylesCount === graphemeCount) {
18530
- // @ts-expect-error conspiracy theory of TS
18531
18502
  this[property] = stylePropertyValue;
18532
18503
  this.removeStyle(property);
18533
18504
  }
@@ -21520,10 +21491,8 @@
21520
21491
  }
21521
21492
  const keyMap = this.direction === 'rtl' ? this.keysMapRtl : this.keysMap;
21522
21493
  if (e.keyCode in keyMap) {
21523
- // @ts-expect-error legacy method calling pattern
21524
21494
  this[keyMap[e.keyCode]](e);
21525
21495
  } else if (e.keyCode in this.ctrlKeysMapDown && (e.ctrlKey || e.metaKey)) {
21526
- // @ts-expect-error legacy method calling pattern
21527
21496
  this[this.ctrlKeysMapDown[e.keyCode]](e);
21528
21497
  } else {
21529
21498
  return;
@@ -21552,7 +21521,6 @@
21552
21521
  return;
21553
21522
  }
21554
21523
  if (e.keyCode in this.ctrlKeysMapUp && (e.ctrlKey || e.metaKey)) {
21555
- // @ts-expect-error legacy method calling pattern
21556
21524
  this[this.ctrlKeysMapUp[e.keyCode]](e);
21557
21525
  } else {
21558
21526
  return;
@@ -22043,8 +22011,6 @@
22043
22011
  this.__lastLastClickTime = +new Date();
22044
22012
  this.__lastPointer = {};
22045
22013
  this.on('mousedown', this.onMouseDown);
22046
-
22047
- // @ts-expect-error in reality it is an IText instance
22048
22014
  this.draggableTextDelegate = new DraggableTextDelegate(this);
22049
22015
  super.initBehavior();
22050
22016
  }
@@ -23884,12 +23850,8 @@
23884
23850
  cachedTexture = this.getCachedTexture(cacheKey, source);
23885
23851
  }
23886
23852
  const pipelineState = {
23887
- originalWidth: source.width ||
23888
- // @ts-expect-error is this a bug? should this be naturalWidth? or is this the pipeline state?
23889
- source.originalWidth || 0,
23890
- originalHeight: source.height ||
23891
- // @ts-expect-error is this a bug? should this be naturalHeight? or is this the pipeline state?
23892
- source.originalHeight || 0,
23853
+ originalWidth: source.width || source.naturalWidth || 0,
23854
+ originalHeight: source.height || source.naturalHeight || 0,
23893
23855
  sourceWidth: width,
23894
23856
  sourceHeight: height,
23895
23857
  destinationWidth: width,
@@ -26047,65 +26009,70 @@
26047
26009
  }
26048
26010
  } = _ref;
26049
26011
  const source = new Color(this.color).getSource();
26050
- const tr = source[0] * this.alpha;
26051
- const tg = source[1] * this.alpha;
26052
- const tb = source[2] * this.alpha;
26053
- const alpha1 = 1 - this.alpha;
26012
+ const alpha = this.alpha;
26013
+ const tr = source[0] * alpha;
26014
+ const tg = source[1] * alpha;
26015
+ const tb = source[2] * alpha;
26016
+ const alpha1 = 1 - alpha;
26054
26017
  for (let i = 0; i < data.length; i += 4) {
26055
26018
  const r = data[i];
26056
26019
  const g = data[i + 1];
26057
26020
  const b = data[i + 2];
26021
+ let oR, oG, oB;
26058
26022
  switch (this.mode) {
26059
26023
  case 'multiply':
26060
- data[i] = r * tr / 255;
26061
- data[i + 1] = g * tg / 255;
26062
- data[i + 2] = b * tb / 255;
26024
+ oR = r * tr / 255;
26025
+ oG = g * tg / 255;
26026
+ oB = b * tb / 255;
26063
26027
  break;
26064
26028
  case 'screen':
26065
- data[i] = 255 - (255 - r) * (255 - tr) / 255;
26066
- data[i + 1] = 255 - (255 - g) * (255 - tg) / 255;
26067
- data[i + 2] = 255 - (255 - b) * (255 - tb) / 255;
26029
+ oR = 255 - (255 - r) * (255 - tr) / 255;
26030
+ oG = 255 - (255 - g) * (255 - tg) / 255;
26031
+ oB = 255 - (255 - b) * (255 - tb) / 255;
26068
26032
  break;
26069
26033
  case 'add':
26070
- data[i] = r + tr;
26071
- data[i + 1] = g + tg;
26072
- data[i + 2] = b + tb;
26034
+ oR = r + tr;
26035
+ oG = g + tg;
26036
+ oB = b + tb;
26073
26037
  break;
26074
26038
  case 'difference':
26075
- data[i] = Math.abs(r - tr);
26076
- data[i + 1] = Math.abs(g - tg);
26077
- data[i + 2] = Math.abs(b - tb);
26039
+ oR = Math.abs(r - tr);
26040
+ oG = Math.abs(g - tg);
26041
+ oB = Math.abs(b - tb);
26078
26042
  break;
26079
26043
  case 'subtract':
26080
- data[i] = r - tr;
26081
- data[i + 1] = g - tg;
26082
- data[i + 2] = b - tb;
26044
+ oR = r - tr;
26045
+ oG = g - tg;
26046
+ oB = b - tb;
26083
26047
  break;
26084
26048
  case 'darken':
26085
- data[i] = Math.min(r, tr);
26086
- data[i + 1] = Math.min(g, tg);
26087
- data[i + 2] = Math.min(b, tb);
26049
+ oR = Math.min(r, tr);
26050
+ oG = Math.min(g, tg);
26051
+ oB = Math.min(b, tb);
26088
26052
  break;
26089
26053
  case 'lighten':
26090
- data[i] = Math.max(r, tr);
26091
- data[i + 1] = Math.max(g, tg);
26092
- data[i + 2] = Math.max(b, tb);
26054
+ oR = Math.max(r, tr);
26055
+ oG = Math.max(g, tg);
26056
+ oB = Math.max(b, tb);
26093
26057
  break;
26094
26058
  case 'overlay':
26095
- data[i] = tr < 128 ? 2 * r * tr / 255 : 255 - 2 * (255 - r) * (255 - tr) / 255;
26096
- data[i + 1] = tg < 128 ? 2 * g * tg / 255 : 255 - 2 * (255 - g) * (255 - tg) / 255;
26097
- data[i + 2] = tb < 128 ? 2 * b * tb / 255 : 255 - 2 * (255 - b) * (255 - tb) / 255;
26059
+ oR = tr < 128 ? 2 * r * tr / 255 : 255 - 2 * (255 - r) * (255 - tr) / 255;
26060
+ oG = tg < 128 ? 2 * g * tg / 255 : 255 - 2 * (255 - g) * (255 - tg) / 255;
26061
+ oB = tb < 128 ? 2 * b * tb / 255 : 255 - 2 * (255 - b) * (255 - tb) / 255;
26098
26062
  break;
26099
26063
  case 'exclusion':
26100
- data[i] = tr + r - 2 * tr * r / 255;
26101
- data[i + 1] = tg + g - 2 * tg * g / 255;
26102
- data[i + 2] = tb + b - 2 * tb * b / 255;
26064
+ oR = tr + r - 2 * tr * r / 255;
26065
+ oG = tg + g - 2 * tg * g / 255;
26066
+ oB = tb + b - 2 * tb * b / 255;
26103
26067
  break;
26104
26068
  case 'tint':
26105
- data[i] = tr + r * alpha1;
26106
- data[i + 1] = tg + g * alpha1;
26107
- data[i + 2] = tb + b * alpha1;
26069
+ oR = tr + r * alpha1;
26070
+ oG = tg + g * alpha1;
26071
+ oB = tb + b * alpha1;
26108
26072
  }
26073
+ data[i] = oR;
26074
+ data[i + 1] = oG;
26075
+ data[i + 2] = oB;
26109
26076
  }
26110
26077
  }
26111
26078
 
@@ -26514,9 +26481,9 @@
26514
26481
  } = _ref;
26515
26482
  const brightness = Math.round(this.brightness * 255);
26516
26483
  for (let i = 0; i < data.length; i += 4) {
26517
- data[i] = data[i] + brightness;
26518
- data[i + 1] = data[i + 1] + brightness;
26519
- data[i + 2] = data[i + 2] + brightness;
26484
+ data[i] += brightness;
26485
+ data[i + 1] += brightness;
26486
+ data[i + 2] += brightness;
26520
26487
  }
26521
26488
  }
26522
26489
  isNeutralState() {
@@ -26588,15 +26555,14 @@
26588
26555
  const r = data[i];
26589
26556
  const g = data[i + 1];
26590
26557
  const b = data[i + 2];
26591
- if (colorsOnly) {
26592
- data[i] = r * m[0] + g * m[1] + b * m[2] + m[4] * 255;
26593
- data[i + 1] = r * m[5] + g * m[6] + b * m[7] + m[9] * 255;
26594
- data[i + 2] = r * m[10] + g * m[11] + b * m[12] + m[14] * 255;
26595
- } else {
26558
+ data[i] = r * m[0] + g * m[1] + b * m[2] + m[4] * 255;
26559
+ data[i + 1] = r * m[5] + g * m[6] + b * m[7] + m[9] * 255;
26560
+ data[i + 2] = r * m[10] + g * m[11] + b * m[12] + m[14] * 255;
26561
+ if (!colorsOnly) {
26596
26562
  const a = data[i + 3];
26597
- data[i] = r * m[0] + g * m[1] + b * m[2] + a * m[3] + m[4] * 255;
26598
- data[i + 1] = r * m[5] + g * m[6] + b * m[7] + a * m[8] + m[9] * 255;
26599
- data[i + 2] = r * m[10] + g * m[11] + b * m[12] + a * m[13] + m[14] * 255;
26563
+ data[i] += a * m[3];
26564
+ data[i + 1] += a * m[8];
26565
+ data[i + 2] += a * m[13];
26600
26566
  data[i + 3] = r * m[15] + g * m[16] + b * m[17] + a * m[18] + m[19] * 255;
26601
26567
  }
26602
26568
  }
@@ -26643,7 +26609,6 @@
26643
26609
  function createColorMatrixFilter(key, matrix) {
26644
26610
  var _Class;
26645
26611
  const newClass = (_Class = class newClass extends ColorMatrix {
26646
- //@ts-expect-error TS wants matrix to be exported.
26647
26612
  toObject() {
26648
26613
  return {
26649
26614
  type: this.type,
@@ -26694,7 +26659,6 @@
26694
26659
  * Serialize this filter into JSON.
26695
26660
  * @returns {Object} A JSON representation of this filter.
26696
26661
  */
26697
- //@ts-expect-error TS doesn't like this toObject
26698
26662
  toObject() {
26699
26663
  return {
26700
26664
  type: this.type,
@@ -27074,20 +27038,21 @@
27074
27038
  }
27075
27039
  } = _ref;
27076
27040
  for (let i = 0, value; i < data.length; i += 4) {
27041
+ const r = data[i];
27042
+ const g = data[i + 1];
27043
+ const b = data[i + 2];
27077
27044
  switch (this.mode) {
27078
27045
  case 'average':
27079
- value = (data[i] + data[i + 1] + data[i + 2]) / 3;
27046
+ value = (r + g + b) / 3;
27080
27047
  break;
27081
27048
  case 'lightness':
27082
- value = (Math.min(data[i], data[i + 1], data[i + 2]) + Math.max(data[i], data[i + 1], data[i + 2])) / 2;
27049
+ value = (Math.min(r, g, b) + Math.max(r, g, b)) / 2;
27083
27050
  break;
27084
27051
  case 'luminosity':
27085
- value = 0.21 * data[i] + 0.72 * data[i + 1] + 0.07 * data[i + 2];
27052
+ value = 0.21 * r + 0.72 * g + 0.07 * b;
27086
27053
  break;
27087
27054
  }
27088
- data[i] = value;
27089
- data[i + 1] = value;
27090
- data[i + 2] = value;
27055
+ data[i + 2] = data[i + 1] = data[i] = value;
27091
27056
  }
27092
27057
  }
27093
27058
  getCacheKey() {
@@ -27122,9 +27087,9 @@
27122
27087
  _defineProperty(Grayscale, "uniformLocations", ['uMode']);
27123
27088
  classRegistry.setClass(Grayscale);
27124
27089
 
27125
- const hueRotationDefaultValues = {
27090
+ const hueRotationDefaultValues = _objectSpread2(_objectSpread2({}, colorMatrixDefaultValues), {}, {
27126
27091
  rotation: 0
27127
- };
27092
+ });
27128
27093
 
27129
27094
  /**
27130
27095
  * HueRotation filter class
@@ -27143,16 +27108,7 @@
27143
27108
  aThird = 1 / 3,
27144
27109
  aThirdSqtSin = Math.sqrt(aThird) * sine,
27145
27110
  OneMinusCos = 1 - cosine;
27146
- this.matrix = [1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0];
27147
- this.matrix[0] = cosine + OneMinusCos / 3;
27148
- this.matrix[1] = aThird * OneMinusCos - aThirdSqtSin;
27149
- this.matrix[2] = aThird * OneMinusCos + aThirdSqtSin;
27150
- this.matrix[5] = aThird * OneMinusCos + aThirdSqtSin;
27151
- this.matrix[6] = cosine + aThird * OneMinusCos;
27152
- this.matrix[7] = aThird * OneMinusCos - aThirdSqtSin;
27153
- this.matrix[10] = aThird * OneMinusCos - aThirdSqtSin;
27154
- this.matrix[11] = aThird * OneMinusCos + aThirdSqtSin;
27155
- this.matrix[12] = cosine + aThird * OneMinusCos;
27111
+ this.matrix = [cosine + OneMinusCos / 3, aThird * OneMinusCos - aThirdSqtSin, aThird * OneMinusCos + aThirdSqtSin, 0, 0, aThird * OneMinusCos + aThirdSqtSin, cosine + aThird * OneMinusCos, aThird * OneMinusCos - aThirdSqtSin, 0, 0, aThird * OneMinusCos - aThirdSqtSin, aThird * OneMinusCos + aThirdSqtSin, cosine + aThird * OneMinusCos, 0, 0, 0, 0, 0, 1, 0];
27156
27112
  }
27157
27113
  isNeutralState() {
27158
27114
  return this.rotation === 0;
@@ -27161,8 +27117,6 @@
27161
27117
  this.calculateMatrix();
27162
27118
  super.applyTo(options);
27163
27119
  }
27164
-
27165
- //@ts-expect-error TS and classes with different methods
27166
27120
  toObject() {
27167
27121
  return {
27168
27122
  type: this.type,
@@ -27932,10 +27886,13 @@
27932
27886
  } = _ref;
27933
27887
  const adjust = -this.saturation;
27934
27888
  for (let i = 0; i < data.length; i += 4) {
27935
- const max = Math.max(data[i], data[i + 1], data[i + 2]);
27936
- data[i] += max !== data[i] ? (max - data[i]) * adjust : 0;
27937
- data[i + 1] += max !== data[i + 1] ? (max - data[i + 1]) * adjust : 0;
27938
- data[i + 2] += max !== data[i + 2] ? (max - data[i + 2]) * adjust : 0;
27889
+ const r = data[i];
27890
+ const g = data[i + 1];
27891
+ const b = data[i + 2];
27892
+ const max = Math.max(r, g, b);
27893
+ data[i] += max !== r ? (max - r) * adjust : 0;
27894
+ data[i + 1] += max !== g ? (max - g) * adjust : 0;
27895
+ data[i + 2] += max !== b ? (max - b) * adjust : 0;
27939
27896
  }
27940
27897
  }
27941
27898
 
@@ -27999,12 +27956,15 @@
27999
27956
  } = _ref;
28000
27957
  const adjust = -this.vibrance;
28001
27958
  for (let i = 0; i < data.length; i += 4) {
28002
- const max = Math.max(data[i], data[i + 1], data[i + 2]);
28003
- const avg = (data[i] + data[i + 1] + data[i + 2]) / 3;
27959
+ const r = data[i];
27960
+ const g = data[i + 1];
27961
+ const b = data[i + 2];
27962
+ const max = Math.max(r, g, b);
27963
+ const avg = (r + g + b) / 3;
28004
27964
  const amt = Math.abs(max - avg) * 2 / 255 * adjust;
28005
- data[i] += max !== data[i] ? (max - data[i]) * amt : 0;
28006
- data[i + 1] += max !== data[i + 1] ? (max - data[i + 1]) * amt : 0;
28007
- data[i + 2] += max !== data[i + 2] ? (max - data[i + 2]) * amt : 0;
27965
+ data[i] += max !== r ? (max - r) * amt : 0;
27966
+ data[i + 1] += max !== g ? (max - g) * amt : 0;
27967
+ data[i + 2] += max !== b ? (max - b) * amt : 0;
28008
27968
  }
28009
27969
  }
28010
27970