@flighthq/effects 0.1.0 → 0.2.1-next.410.a23f189

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 (168) hide show
  1. package/dist/bevelEffect.d.ts +3 -0
  2. package/dist/bevelEffect.d.ts.map +1 -0
  3. package/dist/bevelEffect.js +5 -0
  4. package/dist/bevelEffect.js.map +1 -0
  5. package/dist/blendEffect.d.ts +3 -0
  6. package/dist/blendEffect.d.ts.map +1 -0
  7. package/dist/blendEffect.js +10 -0
  8. package/dist/blendEffect.js.map +1 -0
  9. package/dist/blendModeMath.d.ts +6 -0
  10. package/dist/blendModeMath.d.ts.map +1 -0
  11. package/dist/blendModeMath.js +172 -0
  12. package/dist/blendModeMath.js.map +1 -0
  13. package/dist/blurDownsample.d.ts +17 -0
  14. package/dist/blurDownsample.d.ts.map +1 -0
  15. package/dist/blurDownsample.js +35 -0
  16. package/dist/blurDownsample.js.map +1 -0
  17. package/dist/blurEffect.d.ts +3 -0
  18. package/dist/blurEffect.d.ts.map +1 -0
  19. package/dist/blurEffect.js +7 -0
  20. package/dist/blurEffect.js.map +1 -0
  21. package/dist/boxBlurMath.d.ts +27 -0
  22. package/dist/boxBlurMath.d.ts.map +1 -0
  23. package/dist/boxBlurMath.js +64 -0
  24. package/dist/boxBlurMath.js.map +1 -0
  25. package/dist/compositeEffect.d.ts +3 -0
  26. package/dist/compositeEffect.d.ts.map +1 -0
  27. package/dist/compositeEffect.js +10 -0
  28. package/dist/compositeEffect.js.map +1 -0
  29. package/dist/compositeOperatorMath.d.ts +3 -0
  30. package/dist/compositeOperatorMath.d.ts.map +1 -0
  31. package/dist/compositeOperatorMath.js +65 -0
  32. package/dist/compositeOperatorMath.js.map +1 -0
  33. package/dist/convolutionEffect.d.ts +3 -0
  34. package/dist/convolutionEffect.d.ts.map +1 -0
  35. package/dist/convolutionEffect.js +4 -0
  36. package/dist/convolutionEffect.js.map +1 -0
  37. package/dist/dropShadowEffect.d.ts +3 -0
  38. package/dist/dropShadowEffect.d.ts.map +1 -0
  39. package/dist/dropShadowEffect.js +5 -0
  40. package/dist/dropShadowEffect.js.map +1 -0
  41. package/dist/gaussianKernel.d.ts +17 -0
  42. package/dist/gaussianKernel.d.ts.map +1 -0
  43. package/dist/gaussianKernel.js +49 -0
  44. package/dist/gaussianKernel.js.map +1 -0
  45. package/dist/gradientBevelEffect.d.ts +3 -0
  46. package/dist/gradientBevelEffect.d.ts.map +1 -0
  47. package/dist/gradientBevelEffect.js +5 -0
  48. package/dist/gradientBevelEffect.js.map +1 -0
  49. package/dist/gradientGlowEffect.d.ts +3 -0
  50. package/dist/gradientGlowEffect.d.ts.map +1 -0
  51. package/dist/gradientGlowEffect.js +5 -0
  52. package/dist/gradientGlowEffect.js.map +1 -0
  53. package/dist/index.d.ts +18 -13
  54. package/dist/index.d.ts.map +1 -1
  55. package/dist/index.js +18 -13
  56. package/dist/index.js.map +1 -1
  57. package/dist/innerGlowEffect.d.ts +3 -0
  58. package/dist/innerGlowEffect.d.ts.map +1 -0
  59. package/dist/innerGlowEffect.js +5 -0
  60. package/dist/innerGlowEffect.js.map +1 -0
  61. package/dist/innerShadowEffect.d.ts +3 -0
  62. package/dist/innerShadowEffect.d.ts.map +1 -0
  63. package/dist/innerShadowEffect.js +5 -0
  64. package/dist/innerShadowEffect.js.map +1 -0
  65. package/dist/linearSampledGaussian.d.ts +22 -0
  66. package/dist/linearSampledGaussian.d.ts.map +1 -0
  67. package/dist/linearSampledGaussian.js +56 -0
  68. package/dist/linearSampledGaussian.js.map +1 -0
  69. package/dist/medianEffect.d.ts +3 -0
  70. package/dist/medianEffect.d.ts.map +1 -0
  71. package/dist/medianEffect.js +4 -0
  72. package/dist/medianEffect.js.map +1 -0
  73. package/dist/outerGlowEffect.d.ts +3 -0
  74. package/dist/outerGlowEffect.d.ts.map +1 -0
  75. package/dist/outerGlowEffect.js +5 -0
  76. package/dist/outerGlowEffect.js.map +1 -0
  77. package/dist/renderEffectDefaults.js +51 -20
  78. package/dist/renderEffectDefaults.js.map +1 -1
  79. package/dist/renderEffectInputs.js +11 -11
  80. package/dist/renderEffectInputs.js.map +1 -1
  81. package/package.json +7 -2
  82. package/src/bevelEffect.test.ts +14 -0
  83. package/src/blendEffect.test.ts +23 -0
  84. package/src/blendModeMath.test.ts +160 -0
  85. package/src/blurDownsample.test.ts +46 -0
  86. package/src/blurEffect.test.ts +17 -0
  87. package/src/boxBlurMath.test.ts +96 -0
  88. package/src/compositeEffect.test.ts +21 -0
  89. package/src/compositeOperatorMath.test.ts +45 -0
  90. package/src/convolutionEffect.test.ts +20 -0
  91. package/src/dropShadowEffect.test.ts +14 -0
  92. package/src/gaussianKernel.test.ts +80 -0
  93. package/src/gradientBevelEffect.test.ts +21 -0
  94. package/src/gradientGlowEffect.test.ts +21 -0
  95. package/src/innerGlowEffect.test.ts +15 -0
  96. package/src/innerShadowEffect.test.ts +15 -0
  97. package/src/linearSampledGaussian.test.ts +87 -0
  98. package/src/medianEffect.test.ts +11 -0
  99. package/src/outerGlowEffect.test.ts +14 -0
  100. package/src/renderEffectDefaults.test.ts +13 -5
  101. package/src/renderEffectInputs.test.ts +3 -5
  102. package/src/renderEffectInterpolation.test.ts +6 -9
  103. package/src/renderEffectValidation.test.ts +2 -2
  104. package/dist/brightnessContrastEffect.d.ts +0 -3
  105. package/dist/brightnessContrastEffect.d.ts.map +0 -1
  106. package/dist/brightnessContrastEffect.js +0 -4
  107. package/dist/brightnessContrastEffect.js.map +0 -1
  108. package/dist/channelMixerEffect.d.ts +0 -3
  109. package/dist/channelMixerEffect.d.ts.map +0 -1
  110. package/dist/channelMixerEffect.js +0 -4
  111. package/dist/channelMixerEffect.js.map +0 -1
  112. package/dist/colorBlindSimulationEffect.d.ts +0 -3
  113. package/dist/colorBlindSimulationEffect.d.ts.map +0 -1
  114. package/dist/colorBlindSimulationEffect.js +0 -4
  115. package/dist/colorBlindSimulationEffect.js.map +0 -1
  116. package/dist/colorGradeEffect.d.ts +0 -3
  117. package/dist/colorGradeEffect.d.ts.map +0 -1
  118. package/dist/colorGradeEffect.js +0 -4
  119. package/dist/colorGradeEffect.js.map +0 -1
  120. package/dist/colorScienceMath.d.ts +0 -9
  121. package/dist/colorScienceMath.d.ts.map +0 -1
  122. package/dist/colorScienceMath.js +0 -135
  123. package/dist/colorScienceMath.js.map +0 -1
  124. package/dist/exposureEffect.d.ts +0 -3
  125. package/dist/exposureEffect.d.ts.map +0 -1
  126. package/dist/exposureEffect.js +0 -4
  127. package/dist/exposureEffect.js.map +0 -1
  128. package/dist/grayscaleEffect.d.ts +0 -3
  129. package/dist/grayscaleEffect.d.ts.map +0 -1
  130. package/dist/grayscaleEffect.js +0 -4
  131. package/dist/grayscaleEffect.js.map +0 -1
  132. package/dist/hueSaturationEffect.d.ts +0 -3
  133. package/dist/hueSaturationEffect.d.ts.map +0 -1
  134. package/dist/hueSaturationEffect.js +0 -4
  135. package/dist/hueSaturationEffect.js.map +0 -1
  136. package/dist/invertEffect.d.ts +0 -3
  137. package/dist/invertEffect.d.ts.map +0 -1
  138. package/dist/invertEffect.js +0 -4
  139. package/dist/invertEffect.js.map +0 -1
  140. package/dist/liftGammaGainEffect.d.ts +0 -3
  141. package/dist/liftGammaGainEffect.d.ts.map +0 -1
  142. package/dist/liftGammaGainEffect.js +0 -4
  143. package/dist/liftGammaGainEffect.js.map +0 -1
  144. package/dist/lookupTableGradeEffect.d.ts +0 -3
  145. package/dist/lookupTableGradeEffect.d.ts.map +0 -1
  146. package/dist/lookupTableGradeEffect.js +0 -4
  147. package/dist/lookupTableGradeEffect.js.map +0 -1
  148. package/dist/lutMath.d.ts +0 -7
  149. package/dist/lutMath.d.ts.map +0 -1
  150. package/dist/lutMath.js +0 -39
  151. package/dist/lutMath.js.map +0 -1
  152. package/dist/sepiaEffect.d.ts +0 -3
  153. package/dist/sepiaEffect.d.ts.map +0 -1
  154. package/dist/sepiaEffect.js +0 -4
  155. package/dist/sepiaEffect.js.map +0 -1
  156. package/src/brightnessContrastEffect.test.ts +0 -14
  157. package/src/channelMixerEffect.test.ts +0 -12
  158. package/src/colorBlindSimulationEffect.test.ts +0 -13
  159. package/src/colorGradeEffect.test.ts +0 -11
  160. package/src/colorScienceMath.test.ts +0 -160
  161. package/src/exposureEffect.test.ts +0 -7
  162. package/src/grayscaleEffect.test.ts +0 -11
  163. package/src/hueSaturationEffect.test.ts +0 -15
  164. package/src/invertEffect.test.ts +0 -11
  165. package/src/liftGammaGainEffect.test.ts +0 -15
  166. package/src/lookupTableGradeEffect.test.ts +0 -11
  167. package/src/lutMath.test.ts +0 -67
  168. package/src/sepiaEffect.test.ts +0 -11
@@ -0,0 +1,87 @@
1
+ import { computeGaussianKernelWeights, getGaussianKernelSize } from './gaussianKernel';
2
+ import { computeLinearSampledGaussian, getLinearSampledGaussianTapCount } from './linearSampledGaussian';
3
+
4
+ describe('computeLinearSampledGaussian', () => {
5
+ const sumOf = (weights: ReadonlyArray<number>): number => weights.reduce((total, weight) => total + weight, 0);
6
+
7
+ it('produces combined weights that sum to 1', () => {
8
+ for (const sigma of [1, 2, 3.5, 6]) {
9
+ const weights: number[] = [];
10
+ const offsets: number[] = [];
11
+ computeLinearSampledGaussian(sigma, weights, offsets);
12
+ expect(sumOf(weights)).toBeCloseTo(1, 12);
13
+ }
14
+ });
15
+
16
+ it('sizes both arrays to the tap count', () => {
17
+ const weights: number[] = [];
18
+ const offsets: number[] = [];
19
+ computeLinearSampledGaussian(3, weights, offsets);
20
+ const tapCount = getLinearSampledGaussianTapCount(3);
21
+ expect(weights.length).toBe(tapCount);
22
+ expect(offsets.length).toBe(tapCount);
23
+ });
24
+
25
+ it('sets each paired offset to the weighted midpoint of its two texels', () => {
26
+ const sigma = 2;
27
+ const discrete: number[] = [];
28
+ computeGaussianKernelWeights(sigma, discrete);
29
+ const radius = (getGaussianKernelSize(sigma) - 1) / 2;
30
+
31
+ const weights: number[] = [];
32
+ const offsets: number[] = [];
33
+ computeLinearSampledGaussian(sigma, weights, offsets);
34
+
35
+ for (let tap = 0; tap < weights.length; tap++) {
36
+ const i = tap * 2;
37
+ const posA = i - radius;
38
+ if (i + 1 < discrete.length) {
39
+ const weightA = discrete[i];
40
+ const weightB = discrete[i + 1];
41
+ expect(weights[tap]).toBeCloseTo(weightA + weightB, 12);
42
+ const midpoint = (posA * weightA + (posA + 1) * weightB) / (weightA + weightB);
43
+ expect(offsets[tap]).toBeCloseTo(midpoint, 12);
44
+ // The bilinear tap samples strictly between its two source texels.
45
+ expect(offsets[tap]).toBeGreaterThanOrEqual(posA);
46
+ expect(offsets[tap]).toBeLessThanOrEqual(posA + 1);
47
+ } else {
48
+ // Odd kernel: the last texel is emitted alone at its integer offset.
49
+ expect(weights[tap]).toBeCloseTo(discrete[i], 12);
50
+ expect(offsets[tap]).toBe(posA);
51
+ }
52
+ }
53
+ });
54
+
55
+ it('reconstructs the discrete kernel mass at each tap', () => {
56
+ // A bilinear read at a fractional offset returns the linear blend of the two texels weighted by
57
+ // the tap weight; summed over the pair that equals w[i]+w[i+1] applied at those two positions.
58
+ const sigma = 3;
59
+ const discrete: number[] = [];
60
+ computeGaussianKernelWeights(sigma, discrete);
61
+ const weights: number[] = [];
62
+ const offsets: number[] = [];
63
+ computeLinearSampledGaussian(sigma, weights, offsets);
64
+ expect(sumOf(weights)).toBeCloseTo(sumOf(discrete), 12);
65
+ });
66
+
67
+ it('returns outWeights', () => {
68
+ const weights: number[] = [];
69
+ const offsets: number[] = [];
70
+ expect(computeLinearSampledGaussian(2, weights, offsets)).toBe(weights);
71
+ });
72
+ });
73
+
74
+ describe('getLinearSampledGaussianTapCount', () => {
75
+ it('is ceil(kernelSize / 2)', () => {
76
+ for (const sigma of [1, 2, 3.5, 6]) {
77
+ expect(getLinearSampledGaussianTapCount(sigma)).toBe(Math.ceil(getGaussianKernelSize(sigma) / 2));
78
+ }
79
+ });
80
+
81
+ it('roughly halves the discrete tap count', () => {
82
+ const discrete = getGaussianKernelSize(4);
83
+ const linear = getLinearSampledGaussianTapCount(4);
84
+ expect(linear).toBeLessThan(discrete);
85
+ expect(linear).toBe(Math.ceil(discrete / 2));
86
+ });
87
+ });
@@ -0,0 +1,11 @@
1
+ import { createMedianEffect } from './medianEffect';
2
+
3
+ describe('createMedianEffect', () => {
4
+ it('tags the intent type', () => {
5
+ expect(createMedianEffect().kind).toBe('MedianEffect');
6
+ });
7
+
8
+ it('carries options', () => {
9
+ expect(createMedianEffect({ radius: 2 })).toMatchObject({ radius: 2 });
10
+ });
11
+ });
@@ -0,0 +1,14 @@
1
+ import { createOuterGlowEffect } from './outerGlowEffect';
2
+
3
+ describe('createOuterGlowEffect', () => {
4
+ it('tags the intent type', () => {
5
+ expect(createOuterGlowEffect().kind).toBe('OuterGlowEffect');
6
+ });
7
+
8
+ it('carries options', () => {
9
+ expect(createOuterGlowEffect({ sourceMode: 'hide', strength: 2 })).toMatchObject({
10
+ sourceMode: 'hide',
11
+ strength: 2,
12
+ });
13
+ });
14
+ });
@@ -1,7 +1,6 @@
1
- import type { BloomEffect, GrayscaleEffect, RenderEffect, ToneMapEffect, VignetteEffect } from '@flighthq/types';
1
+ import type { BloomEffect, RenderEffect, ToneMapEffect, VignetteEffect } from '@flighthq/types';
2
2
 
3
3
  import { createBloomEffect } from './bloomEffect';
4
- import { createGrayscaleEffect } from './grayscaleEffect';
5
4
  import { getRenderEffectDefaults, normalizeRenderEffect } from './renderEffectDefaults';
6
5
  import { createToneMapEffect } from './toneMapEffect';
7
6
  import { createVignetteEffect } from './vignetteEffect';
@@ -20,6 +19,15 @@ describe('getRenderEffectDefaults', () => {
20
19
  expect(d.operator).toBe('aces');
21
20
  expect(d.exposure).toBe(0);
22
21
  });
22
+ it('returns sourceMode draw for composite source-mode effects', () => {
23
+ expect(getRenderEffectDefaults('DropShadowEffect').sourceMode).toBe('draw');
24
+ expect(getRenderEffectDefaults('OuterGlowEffect').sourceMode).toBe('draw');
25
+ expect(getRenderEffectDefaults('InnerGlowEffect').sourceMode).toBe('draw');
26
+ expect(getRenderEffectDefaults('InnerShadowEffect').sourceMode).toBe('draw');
27
+ expect(getRenderEffectDefaults('BevelEffect').sourceMode).toBe('draw');
28
+ expect(getRenderEffectDefaults('GradientGlowEffect').sourceMode).toBe('draw');
29
+ expect(getRenderEffectDefaults('GradientBevelEffect').sourceMode).toBe('draw');
30
+ });
23
31
  it('returns a fresh copy each call (mutations do not persist)', () => {
24
32
  const d1 = getRenderEffectDefaults('BloomEffect');
25
33
  const d2 = getRenderEffectDefaults('BloomEffect');
@@ -42,10 +50,10 @@ describe('normalizeRenderEffect', () => {
42
50
  expect(out.radius).toBe(8); // filled from defaults
43
51
  });
44
52
  it('preserves explicitly set zero and false', () => {
45
- const effect = createGrayscaleEffect({ intensity: 0 });
46
- const out = { kind: 'GrayscaleEffect' } as GrayscaleEffect;
53
+ const effect = createBloomEffect({ threshold: 0 });
54
+ const out = { kind: 'BloomEffect' } as BloomEffect;
47
55
  normalizeRenderEffect(effect, out);
48
- expect(out.intensity).toBe(0); // 0 is explicit, should not be replaced by default 1
56
+ expect(out.threshold).toBe(0); // 0 is explicit, should not be replaced by default 0.8
49
57
  });
50
58
  it('carries over fields not in the defaults table', () => {
51
59
  const effect = createVignetteEffect({ intensity: 0.3 });
@@ -1,11 +1,10 @@
1
1
  import { createBloomEffect } from './bloomEffect';
2
2
  import { createBokehDepthOfFieldEffect } from './bokehDepthOfFieldEffect';
3
- import { createColorGradeEffect } from './colorGradeEffect';
4
- import { createGrayscaleEffect } from './grayscaleEffect';
5
3
  import { getRenderEffectInputs, getRenderEffectKinds, RENDER_EFFECT_KINDS } from './renderEffectInputs';
6
4
  import { createSsaoEffect } from './ssaoEffect';
7
5
  import { createTaaEffect } from './taaEffect';
8
6
  import { createToneMapEffect } from './toneMapEffect';
7
+ import { createVignetteEffect } from './vignetteEffect';
9
8
 
10
9
  describe('getRenderEffectInputs', () => {
11
10
  it('returns Hdr for BloomEffect', () => {
@@ -29,8 +28,7 @@ describe('getRenderEffectInputs', () => {
29
28
  });
30
29
 
31
30
  it('returns empty array for effects that need only the color buffer', () => {
32
- expect(getRenderEffectInputs(createGrayscaleEffect())).toEqual([]);
33
- expect(getRenderEffectInputs(createColorGradeEffect())).toEqual([]);
31
+ expect(getRenderEffectInputs(createVignetteEffect())).toEqual([]);
34
32
  });
35
33
 
36
34
  it('returns empty array for unknown kind', () => {
@@ -44,7 +42,7 @@ describe('getRenderEffectKinds', () => {
44
42
  expect(kinds).toContain('BloomEffect');
45
43
  expect(kinds).toContain('ToneMapEffect');
46
44
  expect(kinds).toContain('SsaoEffect');
47
- expect(kinds).toContain('GrayscaleEffect');
45
+ expect(kinds).toContain('VignetteEffect');
48
46
  });
49
47
 
50
48
  it('returns the same reference as RENDER_EFFECT_KINDS', () => {
@@ -1,23 +1,20 @@
1
- import type { GrayscaleEffect } from '@flighthq/types';
2
-
3
1
  import { createBloomEffect } from './bloomEffect';
4
- import { createColorGradeEffect } from './colorGradeEffect';
5
- import { createGrayscaleEffect } from './grayscaleEffect';
6
2
  import { canLerpRenderEffects, lerpRenderEffect } from './renderEffectInterpolation';
3
+ import { createVignetteEffect } from './vignetteEffect';
7
4
 
8
5
  describe('canLerpRenderEffects', () => {
9
6
  it('returns true for same kind', () => {
10
7
  expect(canLerpRenderEffects(createBloomEffect(), createBloomEffect())).toBe(true);
11
8
  });
12
9
  it('returns false for different kinds', () => {
13
- expect(canLerpRenderEffects(createBloomEffect(), createColorGradeEffect())).toBe(false);
10
+ expect(canLerpRenderEffects(createBloomEffect(), createVignetteEffect())).toBe(false);
14
11
  });
15
12
  });
16
13
 
17
14
  describe('lerpRenderEffect', () => {
18
15
  it('returns false and leaves out unchanged for mismatched kinds', () => {
19
16
  const a = createBloomEffect({ threshold: 0.5 });
20
- const b = createColorGradeEffect({ exposure: 1 });
17
+ const b = createVignetteEffect({ intensity: 1 });
21
18
  const out = createBloomEffect({ threshold: 0.99 });
22
19
  const result = lerpRenderEffect(a, b, 0.5, out);
23
20
  expect(result).toBe(false);
@@ -60,9 +57,9 @@ describe('lerpRenderEffect', () => {
60
57
  expect(a.threshold).toBeCloseTo(0.5, 5);
61
58
  });
62
59
  it('boolean fields snap at t=0.5 boundary', () => {
63
- const a = createGrayscaleEffect({ enabled: false } as Partial<GrayscaleEffect>);
64
- const b = createGrayscaleEffect({ enabled: true } as Partial<GrayscaleEffect>);
65
- const out = createGrayscaleEffect();
60
+ const a = createVignetteEffect({ enabled: false } as never);
61
+ const b = createVignetteEffect({ enabled: true } as never);
62
+ const out = createVignetteEffect();
66
63
  lerpRenderEffect(a, b, 0.4, out);
67
64
  expect((out as unknown as Record<string, unknown>).enabled).toBe(false);
68
65
  lerpRenderEffect(a, b, 0.5, out);
@@ -1,8 +1,8 @@
1
1
  import { createBloomEffect } from './bloomEffect';
2
- import { createColorGradeEffect } from './colorGradeEffect';
3
2
  import { validateRenderEffectList } from './renderEffectValidation';
4
3
  import { createSsaoEffect } from './ssaoEffect';
5
4
  import { createToneMapEffect } from './toneMapEffect';
5
+ import { createVignetteEffect } from './vignetteEffect';
6
6
 
7
7
  describe('validateRenderEffectList', () => {
8
8
  it('returns null when all required inputs are available', () => {
@@ -11,7 +11,7 @@ describe('validateRenderEffectList', () => {
11
11
  });
12
12
 
13
13
  it('returns null for effects that need only the color buffer', () => {
14
- const effects = [createColorGradeEffect()];
14
+ const effects = [createVignetteEffect()];
15
15
  expect(validateRenderEffectList(effects, [])).toBeNull();
16
16
  });
17
17
 
@@ -1,3 +0,0 @@
1
- import type { BrightnessContrastEffect } from '@flighthq/types';
2
- export declare function createBrightnessContrastEffect(options?: Readonly<Omit<BrightnessContrastEffect, 'kind'>>): BrightnessContrastEffect;
3
- //# sourceMappingURL=brightnessContrastEffect.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"brightnessContrastEffect.d.ts","sourceRoot":"","sources":["../src/brightnessContrastEffect.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,iBAAiB,CAAC;AAEhE,wBAAgB,8BAA8B,CAC5C,OAAO,GAAE,QAAQ,CAAC,IAAI,CAAC,wBAAwB,EAAE,MAAM,CAAC,CAAM,GAC7D,wBAAwB,CAE1B"}
@@ -1,4 +0,0 @@
1
- export function createBrightnessContrastEffect(options = {}) {
2
- return { kind: 'BrightnessContrastEffect', ...options };
3
- }
4
- //# sourceMappingURL=brightnessContrastEffect.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"brightnessContrastEffect.js","sourceRoot":"","sources":["../src/brightnessContrastEffect.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,8BAA8B,CAC5C,UAA4D,EAAE;IAE9D,OAAO,EAAE,IAAI,EAAE,0BAA0B,EAAE,GAAG,OAAO,EAAE,CAAC;AAC1D,CAAC"}
@@ -1,3 +0,0 @@
1
- import type { ChannelMixerEffect } from '@flighthq/types';
2
- export declare function createChannelMixerEffect(options: Readonly<Omit<ChannelMixerEffect, 'kind'>>): ChannelMixerEffect;
3
- //# sourceMappingURL=channelMixerEffect.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"channelMixerEffect.d.ts","sourceRoot":"","sources":["../src/channelMixerEffect.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAE1D,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,QAAQ,CAAC,IAAI,CAAC,kBAAkB,EAAE,MAAM,CAAC,CAAC,GAAG,kBAAkB,CAEhH"}
@@ -1,4 +0,0 @@
1
- export function createChannelMixerEffect(options) {
2
- return { kind: 'ChannelMixerEffect', ...options };
3
- }
4
- //# sourceMappingURL=channelMixerEffect.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"channelMixerEffect.js","sourceRoot":"","sources":["../src/channelMixerEffect.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,wBAAwB,CAAC,OAAmD;IAC1F,OAAO,EAAE,IAAI,EAAE,oBAAoB,EAAE,GAAG,OAAO,EAAE,CAAC;AACpD,CAAC"}
@@ -1,3 +0,0 @@
1
- import type { ColorBlindSimulationEffect } from '@flighthq/types';
2
- export declare function createColorBlindSimulationEffect(options?: Readonly<Omit<ColorBlindSimulationEffect, 'kind'>>): ColorBlindSimulationEffect;
3
- //# sourceMappingURL=colorBlindSimulationEffect.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"colorBlindSimulationEffect.d.ts","sourceRoot":"","sources":["../src/colorBlindSimulationEffect.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,iBAAiB,CAAC;AAElE,wBAAgB,gCAAgC,CAC9C,OAAO,GAAE,QAAQ,CAAC,IAAI,CAAC,0BAA0B,EAAE,MAAM,CAAC,CAAM,GAC/D,0BAA0B,CAE5B"}
@@ -1,4 +0,0 @@
1
- export function createColorBlindSimulationEffect(options = {}) {
2
- return { kind: 'ColorBlindSimulationEffect', ...options };
3
- }
4
- //# sourceMappingURL=colorBlindSimulationEffect.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"colorBlindSimulationEffect.js","sourceRoot":"","sources":["../src/colorBlindSimulationEffect.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,gCAAgC,CAC9C,UAA8D,EAAE;IAEhE,OAAO,EAAE,IAAI,EAAE,4BAA4B,EAAE,GAAG,OAAO,EAAE,CAAC;AAC5D,CAAC"}
@@ -1,3 +0,0 @@
1
- import type { ColorGradeEffect } from '@flighthq/types';
2
- export declare function createColorGradeEffect(options?: Readonly<Omit<ColorGradeEffect, 'kind'>>): ColorGradeEffect;
3
- //# sourceMappingURL=colorGradeEffect.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"colorGradeEffect.d.ts","sourceRoot":"","sources":["../src/colorGradeEffect.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAExD,wBAAgB,sBAAsB,CAAC,OAAO,GAAE,QAAQ,CAAC,IAAI,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAAM,GAAG,gBAAgB,CAE/G"}
@@ -1,4 +0,0 @@
1
- export function createColorGradeEffect(options = {}) {
2
- return { kind: 'ColorGradeEffect', ...options };
3
- }
4
- //# sourceMappingURL=colorGradeEffect.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"colorGradeEffect.js","sourceRoot":"","sources":["../src/colorGradeEffect.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,sBAAsB,CAAC,UAAoD,EAAE;IAC3F,OAAO,EAAE,IAAI,EAAE,kBAAkB,EAAE,GAAG,OAAO,EAAE,CAAC;AAClD,CAAC"}
@@ -1,9 +0,0 @@
1
- export declare function computeHslToRgb(h: number, s: number, l: number, out: [number, number, number]): void;
2
- export declare function computeLinearToSrgb(x: number): number;
3
- export declare function computeOklabToRgb(L: number, a: number, b: number, out: [number, number, number]): void;
4
- export declare function computeRgbToHsl(r: number, g: number, b: number, out: [number, number, number]): void;
5
- export declare function computeRgbToOklab(r: number, g: number, b: number, out: [number, number, number]): void;
6
- export declare function computeSrgbToLinear(x: number): number;
7
- export declare function getRec2020LuminanceWeights(out: [number, number, number]): void;
8
- export declare function getRec709LuminanceWeights(out: [number, number, number]): void;
9
- //# sourceMappingURL=colorScienceMath.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"colorScienceMath.d.ts","sourceRoot":"","sources":["../src/colorScienceMath.ts"],"names":[],"mappings":"AAMA,wBAAgB,eAAe,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAoCpG;AAID,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAGrD;AAGD,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAatG;AAID,wBAAgB,eAAe,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAwBpG;AAKD,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAatG;AAID,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAGrD;AAID,wBAAgB,0BAA0B,CAAC,GAAG,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAI9E;AAID,wBAAgB,yBAAyB,CAAC,GAAG,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAI7E"}
@@ -1,135 +0,0 @@
1
- // Color-science recipe math. Complete working-space functions for HDR rendering, color grading,
2
- // and perceptual operations. All functions are alias-safe and zero-allocation (out-param pattern).
3
- // These are the substrate-agnostic primitives shared across all backends.
4
- // Converts HSL [h∈[0..360), s∈[0..1], l∈[0..1]] to sRGB [0..1]. Writes into `out`.
5
- // Alias-safe.
6
- export function computeHslToRgb(h, s, l, out) {
7
- const c = (1 - Math.abs(2 * l - 1)) * s;
8
- const hh = (((h % 360) + 360) % 360) / 60;
9
- const x = c * (1 - Math.abs((hh % 2) - 1));
10
- let r1;
11
- let g1;
12
- let b1;
13
- if (hh < 1) {
14
- r1 = c;
15
- g1 = x;
16
- b1 = 0;
17
- }
18
- else if (hh < 2) {
19
- r1 = x;
20
- g1 = c;
21
- b1 = 0;
22
- }
23
- else if (hh < 3) {
24
- r1 = 0;
25
- g1 = c;
26
- b1 = x;
27
- }
28
- else if (hh < 4) {
29
- r1 = 0;
30
- g1 = x;
31
- b1 = c;
32
- }
33
- else if (hh < 5) {
34
- r1 = x;
35
- g1 = 0;
36
- b1 = c;
37
- }
38
- else {
39
- r1 = c;
40
- g1 = 0;
41
- b1 = x;
42
- }
43
- const m = l - c / 2;
44
- out[0] = r1 + m;
45
- out[1] = g1 + m;
46
- out[2] = b1 + m;
47
- }
48
- // sRGB transfer function: converts a single linear-light channel value to gamma-encoded sRGB.
49
- // The piecewise IEC 61966-2-1 formula. Input in [0..∞], output in [0..1].
50
- export function computeLinearToSrgb(x) {
51
- const v = Math.max(0, x);
52
- return v <= 0.0031308 ? 12.92 * v : 1.055 * Math.pow(v, 1 / 2.4) - 0.055;
53
- }
54
- // Converts Oklab back to linear sRGB [0..1]. Alias-safe.
55
- export function computeOklabToRgb(L, a, b, out) {
56
- // Oklab → LMS.
57
- const lc = L + 0.3963377774 * a + 0.2158037573 * b;
58
- const mc = L - 0.1055613458 * a - 0.0638541728 * b;
59
- const sc = L - 0.0894841775 * a - 1.291485548 * b;
60
- // Cube.
61
- const l = lc * lc * lc;
62
- const m = mc * mc * mc;
63
- const s = sc * sc * sc;
64
- // LMS → linear sRGB.
65
- out[0] = Math.max(0, 4.0767416621 * l - 3.3077115913 * m + 0.2309699292 * s);
66
- out[1] = Math.max(0, -1.2684380046 * l + 2.6097574011 * m - 0.3413193965 * s);
67
- out[2] = Math.max(0, -0.0041960863 * l - 0.7034186147 * m + 1.707614701 * s);
68
- }
69
- // Converts sRGB [0..1] to HSL [h∈[0..360), s∈[0..1], l∈[0..1]]. Writes into `out`.
70
- // Alias-safe: reads all inputs before writing.
71
- export function computeRgbToHsl(r, g, b, out) {
72
- const rc = Math.max(0, Math.min(1, r));
73
- const gc = Math.max(0, Math.min(1, g));
74
- const bc = Math.max(0, Math.min(1, b));
75
- const max = Math.max(rc, gc, bc);
76
- const min = Math.min(rc, gc, bc);
77
- const d = max - min;
78
- const l = (max + min) / 2;
79
- let h = 0;
80
- let s = 0;
81
- if (d > 1e-10) {
82
- s = d / (1 - Math.abs(2 * l - 1));
83
- if (max === rc) {
84
- h = ((gc - bc) / d + 6) % 6;
85
- }
86
- else if (max === gc) {
87
- h = (bc - rc) / d + 2;
88
- }
89
- else {
90
- h = (rc - gc) / d + 4;
91
- }
92
- h *= 60;
93
- }
94
- out[0] = h;
95
- out[1] = s;
96
- out[2] = l;
97
- }
98
- // Converts linear sRGB [0..1] to Oklab [L∈[0..1], a∈~[-0.5..0.5], b∈~[-0.5..0.5]].
99
- // Oklab is a perceptually uniform space; changes in L, a, b produce visually equal steps.
100
- // Reference: Ottosson 2020. Alias-safe.
101
- export function computeRgbToOklab(r, g, b, out) {
102
- // sRGB (linear) → LMS via a 3×3 matrix.
103
- const l = 0.4122214708 * r + 0.5363325363 * g + 0.0514459929 * b;
104
- const m = 0.2119034982 * r + 0.6806995451 * g + 0.1073969566 * b;
105
- const s = 0.0883024619 * r + 0.2817188376 * g + 0.6299787005 * b;
106
- // Cube-root compress.
107
- const lc = Math.cbrt(Math.max(0, l));
108
- const mc = Math.cbrt(Math.max(0, m));
109
- const sc = Math.cbrt(Math.max(0, s));
110
- // LMS → Oklab.
111
- out[0] = 0.2104542553 * lc + 0.793617785 * mc - 0.0040720468 * sc;
112
- out[1] = 1.9779984951 * lc - 2.428592205 * mc + 0.4505937099 * sc;
113
- out[2] = 0.0259040371 * lc + 0.7827717662 * mc - 0.808675766 * sc;
114
- }
115
- // sRGB transfer function: converts a gamma-encoded sRGB channel to linear light.
116
- // The piecewise IEC 61966-2-1 inverse. Input in [0..1], output in [0..∞).
117
- export function computeSrgbToLinear(x) {
118
- const v = Math.max(0, x);
119
- return v <= 0.04045 ? v / 12.92 : Math.pow((v + 0.055) / 1.055, 2.4);
120
- }
121
- // Rec. 2020 luminance weights (ITU-R BT.2020). Writes [r, g, b] weights into `out`.
122
- // L = 0.2627 * R + 0.6780 * G + 0.0593 * B.
123
- export function getRec2020LuminanceWeights(out) {
124
- out[0] = 0.2627;
125
- out[1] = 0.678;
126
- out[2] = 0.0593;
127
- }
128
- // Rec. 709 / sRGB luminance weights (ITU-R BT.709). Writes [r, g, b] weights into `out`.
129
- // L = 0.2126 * R + 0.7152 * G + 0.0722 * B.
130
- export function getRec709LuminanceWeights(out) {
131
- out[0] = 0.2126;
132
- out[1] = 0.7152;
133
- out[2] = 0.0722;
134
- }
135
- //# sourceMappingURL=colorScienceMath.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"colorScienceMath.js","sourceRoot":"","sources":["../src/colorScienceMath.ts"],"names":[],"mappings":"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"}
@@ -1,3 +0,0 @@
1
- import type { ExposureEffect } from '@flighthq/types';
2
- export declare function createExposureEffect(options?: Readonly<Omit<ExposureEffect, 'kind'>>): ExposureEffect;
3
- //# sourceMappingURL=exposureEffect.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"exposureEffect.d.ts","sourceRoot":"","sources":["../src/exposureEffect.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAEtD,wBAAgB,oBAAoB,CAAC,OAAO,GAAE,QAAQ,CAAC,IAAI,CAAC,cAAc,EAAE,MAAM,CAAC,CAAM,GAAG,cAAc,CAEzG"}
@@ -1,4 +0,0 @@
1
- export function createExposureEffect(options = {}) {
2
- return { kind: 'ExposureEffect', ...options };
3
- }
4
- //# sourceMappingURL=exposureEffect.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"exposureEffect.js","sourceRoot":"","sources":["../src/exposureEffect.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,oBAAoB,CAAC,UAAkD,EAAE;IACvF,OAAO,EAAE,IAAI,EAAE,gBAAgB,EAAE,GAAG,OAAO,EAAE,CAAC;AAChD,CAAC"}
@@ -1,3 +0,0 @@
1
- import type { GrayscaleEffect } from '@flighthq/types';
2
- export declare function createGrayscaleEffect(options?: Readonly<Omit<GrayscaleEffect, 'kind'>>): GrayscaleEffect;
3
- //# sourceMappingURL=grayscaleEffect.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"grayscaleEffect.d.ts","sourceRoot":"","sources":["../src/grayscaleEffect.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAEvD,wBAAgB,qBAAqB,CAAC,OAAO,GAAE,QAAQ,CAAC,IAAI,CAAC,eAAe,EAAE,MAAM,CAAC,CAAM,GAAG,eAAe,CAE5G"}
@@ -1,4 +0,0 @@
1
- export function createGrayscaleEffect(options = {}) {
2
- return { kind: 'GrayscaleEffect', ...options };
3
- }
4
- //# sourceMappingURL=grayscaleEffect.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"grayscaleEffect.js","sourceRoot":"","sources":["../src/grayscaleEffect.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,qBAAqB,CAAC,UAAmD,EAAE;IACzF,OAAO,EAAE,IAAI,EAAE,iBAAiB,EAAE,GAAG,OAAO,EAAE,CAAC;AACjD,CAAC"}
@@ -1,3 +0,0 @@
1
- import type { HueSaturationEffect } from '@flighthq/types';
2
- export declare function createHueSaturationEffect(options?: Readonly<Omit<HueSaturationEffect, 'kind'>>): HueSaturationEffect;
3
- //# sourceMappingURL=hueSaturationEffect.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"hueSaturationEffect.d.ts","sourceRoot":"","sources":["../src/hueSaturationEffect.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAE3D,wBAAgB,yBAAyB,CACvC,OAAO,GAAE,QAAQ,CAAC,IAAI,CAAC,mBAAmB,EAAE,MAAM,CAAC,CAAM,GACxD,mBAAmB,CAErB"}
@@ -1,4 +0,0 @@
1
- export function createHueSaturationEffect(options = {}) {
2
- return { kind: 'HueSaturationEffect', ...options };
3
- }
4
- //# sourceMappingURL=hueSaturationEffect.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"hueSaturationEffect.js","sourceRoot":"","sources":["../src/hueSaturationEffect.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,yBAAyB,CACvC,UAAuD,EAAE;IAEzD,OAAO,EAAE,IAAI,EAAE,qBAAqB,EAAE,GAAG,OAAO,EAAE,CAAC;AACrD,CAAC"}
@@ -1,3 +0,0 @@
1
- import type { InvertEffect } from '@flighthq/types';
2
- export declare function createInvertEffect(options?: Readonly<Omit<InvertEffect, 'kind'>>): InvertEffect;
3
- //# sourceMappingURL=invertEffect.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"invertEffect.d.ts","sourceRoot":"","sources":["../src/invertEffect.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAEpD,wBAAgB,kBAAkB,CAAC,OAAO,GAAE,QAAQ,CAAC,IAAI,CAAC,YAAY,EAAE,MAAM,CAAC,CAAM,GAAG,YAAY,CAEnG"}
@@ -1,4 +0,0 @@
1
- export function createInvertEffect(options = {}) {
2
- return { kind: 'InvertEffect', ...options };
3
- }
4
- //# sourceMappingURL=invertEffect.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"invertEffect.js","sourceRoot":"","sources":["../src/invertEffect.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,kBAAkB,CAAC,UAAgD,EAAE;IACnF,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,GAAG,OAAO,EAAE,CAAC;AAC9C,CAAC"}
@@ -1,3 +0,0 @@
1
- import type { LiftGammaGainEffect } from '@flighthq/types';
2
- export declare function createLiftGammaGainEffect(options?: Readonly<Omit<LiftGammaGainEffect, 'kind'>>): LiftGammaGainEffect;
3
- //# sourceMappingURL=liftGammaGainEffect.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"liftGammaGainEffect.d.ts","sourceRoot":"","sources":["../src/liftGammaGainEffect.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAE3D,wBAAgB,yBAAyB,CACvC,OAAO,GAAE,QAAQ,CAAC,IAAI,CAAC,mBAAmB,EAAE,MAAM,CAAC,CAAM,GACxD,mBAAmB,CAErB"}
@@ -1,4 +0,0 @@
1
- export function createLiftGammaGainEffect(options = {}) {
2
- return { kind: 'LiftGammaGainEffect', ...options };
3
- }
4
- //# sourceMappingURL=liftGammaGainEffect.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"liftGammaGainEffect.js","sourceRoot":"","sources":["../src/liftGammaGainEffect.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,yBAAyB,CACvC,UAAuD,EAAE;IAEzD,OAAO,EAAE,IAAI,EAAE,qBAAqB,EAAE,GAAG,OAAO,EAAE,CAAC;AACrD,CAAC"}
@@ -1,3 +0,0 @@
1
- import type { LookupTableGradeEffect } from '@flighthq/types';
2
- export declare function createLookupTableGradeEffect(options?: Readonly<Omit<LookupTableGradeEffect, 'kind'>>): LookupTableGradeEffect;
3
- //# sourceMappingURL=lookupTableGradeEffect.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"lookupTableGradeEffect.d.ts","sourceRoot":"","sources":["../src/lookupTableGradeEffect.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AAE9D,wBAAgB,4BAA4B,CAC1C,OAAO,GAAE,QAAQ,CAAC,IAAI,CAAC,sBAAsB,EAAE,MAAM,CAAC,CAAM,GAC3D,sBAAsB,CAExB"}
@@ -1,4 +0,0 @@
1
- export function createLookupTableGradeEffect(options = {}) {
2
- return { kind: 'LookupTableGradeEffect', ...options };
3
- }
4
- //# sourceMappingURL=lookupTableGradeEffect.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"lookupTableGradeEffect.js","sourceRoot":"","sources":["../src/lookupTableGradeEffect.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,4BAA4B,CAC1C,UAA0D,EAAE;IAE5D,OAAO,EAAE,IAAI,EAAE,wBAAwB,EAAE,GAAG,OAAO,EAAE,CAAC;AACxD,CAAC"}
package/dist/lutMath.d.ts DELETED
@@ -1,7 +0,0 @@
1
- export declare function computeLookupTableCoord(r: number, // normalized R channel [0..1].
2
- g: number, // normalized G channel [0..1].
3
- b: number, // normalized B channel [0..1].
4
- lutSize: number, // cube size of the LUT (e.g. 16, 32, 64).
5
- out: [number, number]): void;
6
- export declare function getLookupTableTileLayout(lutSize: number, out: [number, number]): void;
7
- //# sourceMappingURL=lutMath.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"lutMath.d.ts","sourceRoot":"","sources":["../src/lutMath.ts"],"names":[],"mappings":"AASA,wBAAgB,uBAAuB,CACrC,CAAC,EAAE,MAAM,EAAE,+BAA+B;AAC1C,CAAC,EAAE,MAAM,EAAE,+BAA+B;AAC1C,CAAC,EAAE,MAAM,EAAE,+BAA+B;AAC1C,OAAO,EAAE,MAAM,EAAE,0CAA0C;AAC3D,GAAG,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,GACpB,IAAI,CAiBN;AAKD,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAIrF"}