@firecms/neat 0.1.3 → 0.1.4

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.
@@ -14,7 +14,8 @@ export declare type NeatConfig = {
14
14
  waveAmplitude?: number;
15
15
  highlights?: number;
16
16
  shadows?: number;
17
- saturation?: number;
17
+ colorSaturation?: number;
18
+ colorBrightness?: number;
18
19
  colors: NeatColor[];
19
20
  colorBlending?: number;
20
21
  wireframe?: boolean;
@@ -42,6 +43,7 @@ export declare class NeatGradient implements NeatController {
42
43
  private _shadows;
43
44
  private _highlights;
44
45
  private _saturation;
46
+ private _brightness;
45
47
  private _colorBlending;
46
48
  private _colors;
47
49
  private _wireframe;
@@ -64,7 +66,8 @@ export declare class NeatGradient implements NeatController {
64
66
  set colors(colors: NeatColor[]);
65
67
  set highlights(highlights: number);
66
68
  set shadows(shadows: number);
67
- set saturation(saturation: number);
69
+ set colorSaturation(colorSaturation: number);
70
+ set colorBrightness(colorBrightness: number);
68
71
  set colorBlending(colorBlending: number);
69
72
  set wireframe(wireframe: boolean);
70
73
  set backgroundColor(backgroundColor: string);
@@ -14,6 +14,7 @@ export class NeatGradient {
14
14
  _shadows = -1;
15
15
  _highlights = -1;
16
16
  _saturation = -1;
17
+ _brightness = -1;
17
18
  _colorBlending = -1;
18
19
  _colors = [];
19
20
  _wireframe = false;
@@ -23,7 +24,7 @@ export class NeatGradient {
23
24
  sizeObserver;
24
25
  sceneState;
25
26
  constructor(config) {
26
- const { ref, speed = 4, horizontalPressure = 3, verticalPressure = 3, waveFrequencyX = 5, waveFrequencyY = 5, waveAmplitude = 3, colors, highlights = 4, shadows = 4, saturation = 0, colorBlending = 5, wireframe = false, backgroundColor = "#FFFFFF", backgroundAlpha = 1.0, resolution = 1 } = config;
27
+ const { ref, speed = 4, horizontalPressure = 3, verticalPressure = 3, waveFrequencyX = 5, waveFrequencyY = 5, waveAmplitude = 3, colors, highlights = 4, shadows = 4, colorSaturation = 0, colorBrightness = 1, colorBlending = 5, wireframe = false, backgroundColor = "#FFFFFF", backgroundAlpha = 1.0, resolution = 1 } = config;
27
28
  const width = ref.width, height = ref.height;
28
29
  this.destroy = this.destroy.bind(this);
29
30
  this._initScene = this._initScene.bind(this);
@@ -38,7 +39,8 @@ export class NeatGradient {
38
39
  this.colors = colors;
39
40
  this.shadows = shadows;
40
41
  this.highlights = highlights;
41
- this.saturation = saturation;
42
+ this.colorSaturation = colorSaturation;
43
+ this.colorBrightness = colorBrightness;
42
44
  this.wireframe = wireframe;
43
45
  this.backgroundColor = backgroundColor;
44
46
  this.backgroundAlpha = backgroundAlpha;
@@ -92,6 +94,8 @@ export class NeatGradient {
92
94
  // @ts-ignore
93
95
  mesh.material.uniforms.u_saturation = { value: this._saturation };
94
96
  // @ts-ignore
97
+ mesh.material.uniforms.u_brightness = { value: this._brightness };
98
+ // @ts-ignore
95
99
  mesh.material.wireframe = this._wireframe;
96
100
  });
97
101
  renderer.render(scene, camera);
@@ -143,8 +147,12 @@ export class NeatGradient {
143
147
  set shadows(shadows) {
144
148
  this._shadows = shadows / 100;
145
149
  }
146
- set saturation(saturation) {
147
- this._saturation = saturation / 10;
150
+ set colorSaturation(colorSaturation) {
151
+ this._saturation = colorSaturation / 10;
152
+ }
153
+ set colorBrightness(colorBrightness) {
154
+ console.log("colorBrightness", colorBrightness);
155
+ this._brightness = colorBrightness;
148
156
  }
149
157
  set colorBlending(colorBlending) {
150
158
  this._colorBlending = colorBlending / 10;
@@ -305,6 +313,7 @@ void main(){
305
313
  color.rgb += pow(v_displacement_amount, 1.0) * u_highlights;
306
314
  color.rgb -= pow(1.0 - v_displacement_amount, 2.0) * u_shadows;
307
315
  color = saturation(color, 1.0 + u_saturation);
316
+ color = color * u_brightness;
308
317
 
309
318
  gl_FragColor = vec4(color,1.0);
310
319
  }
@@ -333,6 +342,7 @@ uniform float u_plane_height;
333
342
  uniform float u_shadows;
334
343
  uniform float u_highlights;
335
344
  uniform float u_saturation;
345
+ uniform float u_brightness;
336
346
 
337
347
  uniform float u_color_blending;
338
348
 
@@ -1 +1 @@
1
- {"version":3,"file":"NeatGradient.js","sourceRoot":"","sources":["../src/NeatGradient.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"NeatGradient.js","sourceRoot":"","sources":["../src/NeatGradient.ts"],"names":[],"mappings":"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"}
package/dist/index.es.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import * as i from "three";
2
- const g = 50, m = 80, V = !0, b = 5, B = new i.Clock();
3
- class L {
2
+ const x = 50, h = 80, V = !0, b = 5, Y = new i.Clock();
3
+ class W {
4
4
  _speed = -1;
5
5
  _horizontalPressure = -1;
6
6
  _verticalPressure = -1;
@@ -10,6 +10,7 @@ class L {
10
10
  _shadows = -1;
11
11
  _highlights = -1;
12
12
  _saturation = -1;
13
+ _brightness = -1;
13
14
  _colorBlending = -1;
14
15
  _colors = [];
15
16
  _wireframe = !1;
@@ -23,41 +24,42 @@ class L {
23
24
  ref: r,
24
25
  speed: s = 4,
25
26
  horizontalPressure: l = 3,
26
- verticalPressure: a = 3,
27
- waveFrequencyX: n = 5,
27
+ verticalPressure: n = 3,
28
+ waveFrequencyX: a = 5,
28
29
  waveFrequencyY: v = 5,
29
- waveAmplitude: h = 3,
30
- colors: x,
30
+ waveAmplitude: m = 3,
31
+ colors: _,
31
32
  highlights: c = 4,
32
33
  shadows: u = 4,
33
- saturation: f = 0,
34
- colorBlending: y = 5,
35
- wireframe: p = !1,
36
- backgroundColor: E = "#FFFFFF",
37
- backgroundAlpha: N = 1,
38
- resolution: R = 1
34
+ colorSaturation: d = 0,
35
+ colorBrightness: y = 1,
36
+ colorBlending: p = 5,
37
+ wireframe: E = !1,
38
+ backgroundColor: N = "#FFFFFF",
39
+ backgroundAlpha: R = 1,
40
+ resolution: B = 1
39
41
  } = e, P = r.width, q = r.height;
40
- this.destroy = this.destroy.bind(this), this._initScene = this._initScene.bind(this), this._buildMaterial = this._buildMaterial.bind(this), this.speed = s, this.horizontalPressure = l, this.verticalPressure = a, this.waveFrequencyX = n, this.waveFrequencyY = v, this.waveAmplitude = h, this.colorBlending = y, this.colors = x, this.shadows = u, this.highlights = c, this.saturation = f, this.wireframe = p, this.backgroundColor = E, this.backgroundAlpha = N, this.sceneState = this._initScene(r, P, q, R);
42
+ this.destroy = this.destroy.bind(this), this._initScene = this._initScene.bind(this), this._buildMaterial = this._buildMaterial.bind(this), this.speed = s, this.horizontalPressure = l, this.verticalPressure = n, this.waveFrequencyX = a, this.waveFrequencyY = v, this.waveAmplitude = m, this.colorBlending = p, this.colors = _, this.shadows = u, this.highlights = c, this.colorSaturation = d, this.colorBrightness = y, this.wireframe = E, this.backgroundColor = N, this.backgroundAlpha = R, this.sceneState = this._initScene(r, P, q, B);
41
43
  const { renderer: w, camera: I, scene: K, meshes: O } = this.sceneState;
42
44
  let z = 0;
43
45
  const C = () => {
44
- Math.floor(z * 10) % 5 === 0 && D(r), w.setClearColor(this._backgroundColor, this._backgroundAlpha), O.forEach((o) => {
45
- const d = [
46
- ...this._colors.map((_) => ({
47
- is_active: _.enabled,
48
- color: new i.Color(_.color),
49
- influence: _.influence
46
+ Math.floor(z * 10) % 5 === 0 && L(r), w.setClearColor(this._backgroundColor, this._backgroundAlpha), O.forEach((o) => {
47
+ const f = [
48
+ ...this._colors.map((g) => ({
49
+ is_active: g.enabled,
50
+ color: new i.Color(g.color),
51
+ influence: g.influence
50
52
  })),
51
53
  ...Array.from({ length: b - this._colors.length }).map(() => ({
52
54
  is_active: !1,
53
55
  color: new i.Color(0)
54
56
  }))
55
57
  ];
56
- z += B.getDelta() * this._speed, o.material.uniforms.u_time.value = z, o.material.uniforms.u_resolution = { value: new i.Vector2(P, q) }, o.material.uniforms.u_color_pressure = { value: new i.Vector2(this._horizontalPressure, this._verticalPressure) }, o.material.uniforms.u_wave_frequency_x = { value: this._waveFrequencyX }, o.material.uniforms.u_wave_frequency_y = { value: this._waveFrequencyY }, o.material.uniforms.u_wave_amplitude = { value: this._waveAmplitude }, o.material.uniforms.u_plane_width = { value: g }, o.material.uniforms.u_plane_height = { value: m }, o.material.uniforms.u_color_blending = { value: this._colorBlending }, o.material.uniforms.u_colors = { value: d }, o.material.uniforms.u_colors_count = { value: b }, o.material.uniforms.u_shadows = { value: this._shadows }, o.material.uniforms.u_highlights = { value: this._highlights }, o.material.uniforms.u_saturation = { value: this._saturation }, o.material.wireframe = this._wireframe;
58
+ z += Y.getDelta() * this._speed, o.material.uniforms.u_time.value = z, o.material.uniforms.u_resolution = { value: new i.Vector2(P, q) }, o.material.uniforms.u_color_pressure = { value: new i.Vector2(this._horizontalPressure, this._verticalPressure) }, o.material.uniforms.u_wave_frequency_x = { value: this._waveFrequencyX }, o.material.uniforms.u_wave_frequency_y = { value: this._waveFrequencyY }, o.material.uniforms.u_wave_amplitude = { value: this._waveAmplitude }, o.material.uniforms.u_plane_width = { value: x }, o.material.uniforms.u_plane_height = { value: h }, o.material.uniforms.u_color_blending = { value: this._colorBlending }, o.material.uniforms.u_colors = { value: f }, o.material.uniforms.u_colors_count = { value: b }, o.material.uniforms.u_shadows = { value: this._shadows }, o.material.uniforms.u_highlights = { value: this._highlights }, o.material.uniforms.u_saturation = { value: this._saturation }, o.material.uniforms.u_brightness = { value: this._brightness }, o.material.wireframe = this._wireframe;
57
59
  }), w.render(K, I), this.requestRef = requestAnimationFrame(C);
58
60
  }, T = () => {
59
- const o = w.domElement, d = o.clientWidth, _ = o.clientHeight;
60
- this.sceneState.renderer.setSize(d, _, !1), F(this.sceneState.camera, d, _);
61
+ const o = w.domElement, f = o.clientWidth, g = o.clientHeight;
62
+ this.sceneState.renderer.setSize(f, g, !1), F(this.sceneState.camera, f, g);
61
63
  };
62
64
  this.sizeObserver = new ResizeObserver((o) => {
63
65
  T();
@@ -93,9 +95,12 @@ class L {
93
95
  set shadows(e) {
94
96
  this._shadows = e / 100;
95
97
  }
96
- set saturation(e) {
98
+ set colorSaturation(e) {
97
99
  this._saturation = e / 10;
98
100
  }
101
+ set colorBrightness(e) {
102
+ console.log("colorBrightness", e), this._brightness = e;
103
+ }
99
104
  set colorBlending(e) {
100
105
  this._colorBlending = e / 10;
101
106
  }
@@ -109,27 +114,27 @@ class L {
109
114
  this._backgroundAlpha = e;
110
115
  }
111
116
  _initScene(e, r, s, l) {
112
- const a = new i.WebGLRenderer({
117
+ const n = new i.WebGLRenderer({
113
118
  alpha: !0,
114
119
  canvas: e
115
120
  });
116
- a.setClearColor(16711680, 0.5), a.setSize(r, s, !1);
117
- const n = [], v = new i.Scene(), h = this._buildMaterial(r, s), x = new i.PlaneGeometry(g, m, 240 * l, 240 * l), c = new i.Mesh(x, h);
118
- c.rotation.x = -Math.PI / 3.5, c.position.z = -1, n.push(c), v.add(c);
121
+ n.setClearColor(16711680, 0.5), n.setSize(r, s, !1);
122
+ const a = [], v = new i.Scene(), m = this._buildMaterial(r, s), _ = new i.PlaneGeometry(x, h, 240 * l, 240 * l), c = new i.Mesh(_, m);
123
+ c.rotation.x = -Math.PI / 3.5, c.position.z = -1, a.push(c), v.add(c);
119
124
  const u = new i.OrthographicCamera(0, 0, 0, 0, 0, 0);
120
125
  return F(u, r, s), {
121
- renderer: a,
126
+ renderer: n,
122
127
  camera: u,
123
128
  scene: v,
124
- meshes: n
129
+ meshes: a
125
130
  };
126
131
  }
127
132
  _buildMaterial(e, r) {
128
133
  const s = [
129
- ...this._colors.map((n) => ({
130
- is_active: n.enabled,
131
- color: new i.Color(n.color),
132
- influence: n.influence
134
+ ...this._colors.map((a) => ({
135
+ is_active: a.enabled,
136
+ color: new i.Color(a.color),
137
+ influence: a.influence
133
138
  })),
134
139
  ...Array.from({ length: b - this._colors.length }).map(() => ({
135
140
  is_active: !1,
@@ -144,23 +149,23 @@ class L {
144
149
  u_resolution: { value: new i.Vector2(e, r) },
145
150
  u_colors: { value: s },
146
151
  u_colors_count: { value: this._colors.length },
147
- u_plane_width: { value: g },
148
- u_plane_height: { value: m },
152
+ u_plane_width: { value: x },
153
+ u_plane_height: { value: h },
149
154
  u_shadows: { value: this._shadows },
150
155
  u_highlights: { value: this._highlights }
151
- }, a = new i.ShaderMaterial({
156
+ }, n = new i.ShaderMaterial({
152
157
  uniforms: l,
153
- vertexShader: S() + k() + A() + Y(),
154
- fragmentShader: S() + A() + j()
158
+ vertexShader: S() + D() + A() + j(),
159
+ fragmentShader: S() + A() + k()
155
160
  });
156
- return a.wireframe = V, a;
161
+ return n.wireframe = V, n;
157
162
  }
158
163
  }
159
164
  function F(t, e, r) {
160
- const a = e * r / 1e6 * g * m / 1.5, n = e / r, v = Math.sqrt(a * n), h = a / v, x = -g / 2, c = Math.min((x + v) / 1.5, g / 2), u = m / 4, f = Math.max((u - h) / 2, -m / 4), y = -100, p = 1e3;
161
- t.left = x, t.right = c, t.top = u, t.bottom = f, t.near = y, t.far = p, t.updateProjectionMatrix();
165
+ const n = e * r / 1e6 * x * h / 1.5, a = e / r, v = Math.sqrt(n * a), m = n / v, _ = -x / 2, c = Math.min((_ + v) / 1.5, x / 2), u = h / 4, d = Math.max((u - m) / 2, -h / 4), y = -100, p = 1e3;
166
+ t.left = _, t.right = c, t.top = u, t.bottom = d, t.near = y, t.far = p, t.updateProjectionMatrix();
162
167
  }
163
- function Y() {
168
+ function j() {
164
169
  return `
165
170
 
166
171
  void main() {
@@ -214,7 +219,7 @@ void main() {
214
219
  }
215
220
  `;
216
221
  }
217
- function j() {
222
+ function k() {
218
223
  return `
219
224
 
220
225
  void main(){
@@ -223,6 +228,7 @@ void main(){
223
228
  color.rgb += pow(v_displacement_amount, 1.0) * u_highlights;
224
229
  color.rgb -= pow(1.0 - v_displacement_amount, 2.0) * u_shadows;
225
230
  color = saturation(color, 1.0 + u_saturation);
231
+ color = color * u_brightness;
226
232
 
227
233
  gl_FragColor = vec4(color,1.0);
228
234
  }
@@ -251,6 +257,7 @@ uniform float u_plane_height;
251
257
  uniform float u_shadows;
252
258
  uniform float u_highlights;
253
259
  uniform float u_saturation;
260
+ uniform float u_brightness;
254
261
 
255
262
  uniform float u_color_blending;
256
263
 
@@ -263,7 +270,7 @@ varying vec4 v_new_position;
263
270
  varying vec3 v_color;
264
271
  varying float v_displacement_amount;
265
272
 
266
- `, k = () => `
273
+ `, D = () => `
267
274
 
268
275
  vec3 mod289(vec3 x)
269
276
  {
@@ -489,7 +496,7 @@ vec3 hsv2rgb(vec3 c)
489
496
  }
490
497
  `, M = (t) => {
491
498
  t.id = "neat-link", t.href = "https://neat.firecms.co", t.target = "_blank", t.style.position = "absolute", t.style.display = "block", t.style.opacity = "1", t.style.bottom = "0", t.style.right = "0", t.style.padding = "10px", t.style.color = "#dcdcdc", t.style.fontFamily = "sans-serif", t.style.fontSize = "16px", t.style.fontWeight = "bold", t.style.textDecoration = "none", t.style.zIndex = "100", t.innerHTML = "NEAT";
492
- }, D = (t) => {
499
+ }, L = (t) => {
493
500
  const e = t.parentElement?.getElementsByTagName("a");
494
501
  if (e) {
495
502
  for (let s = 0; s < e.length; s++)
@@ -502,6 +509,6 @@ vec3 hsv2rgb(vec3 c)
502
509
  M(r), t.parentElement?.appendChild(r);
503
510
  };
504
511
  export {
505
- L as NeatGradient
512
+ W as NeatGradient
506
513
  };
507
514
  //# sourceMappingURL=index.es.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.es.js","sources":["../src/NeatGradient.ts"],"sourcesContent":["import * as THREE from \"three\";\n\nconst PLANE_WIDTH = 50;\nconst PLANE_HEIGHT = 80;\n\nconst WIREFRAME = true;\nconst COLORS_COUNT = 5;\n\nconst clock = new THREE.Clock();\n\ntype SceneState = {\n renderer: THREE.WebGLRenderer,\n camera: THREE.OrthographicCamera,\n scene: THREE.Scene,\n meshes: THREE.Mesh[],\n}\n\nexport type NeatConfig = {\n speed?: number;\n horizontalPressure?: number;\n verticalPressure?: number;\n waveFrequencyX?: number;\n waveFrequencyY?: number;\n waveAmplitude?: number;\n highlights?: number;\n shadows?: number;\n saturation?: number;\n colors: NeatColor[];\n colorBlending?: number;\n wireframe?: boolean;\n backgroundColor?: string;\n backgroundAlpha?: number;\n};\n\nexport type NeatColor = {\n color: string;\n enabled: boolean;\n /**\n * Value from 0 to 1\n */\n influence?: number;\n}\n\nexport type NeatController = {\n destroy: () => void;\n}\n\nexport class NeatGradient implements NeatController {\n\n private _speed: number = -1;\n\n private _horizontalPressure: number = -1;\n private _verticalPressure: number = -1;\n\n private _waveFrequencyX: number = -1;\n private _waveFrequencyY: number = -1;\n private _waveAmplitude: number = -1;\n\n private _shadows: number = -1;\n private _highlights: number = -1;\n private _saturation: number = -1;\n\n private _colorBlending: number = -1;\n\n private _colors: NeatColor[] = [];\n private _wireframe: boolean = false;\n\n private _backgroundColor: string = \"#FFFFFF\";\n private _backgroundAlpha: number = 1.0;\n\n private requestRef: number = -1;\n private sizeObserver: ResizeObserver;\n private readonly sceneState: SceneState;\n\n constructor(config: NeatConfig & { ref: HTMLCanvasElement, resolution?: number }) {\n\n const {\n ref,\n speed = 4,\n horizontalPressure = 3,\n verticalPressure = 3,\n waveFrequencyX = 5,\n waveFrequencyY = 5,\n waveAmplitude = 3,\n colors,\n highlights = 4,\n shadows = 4,\n saturation = 0,\n colorBlending = 5,\n wireframe = false,\n backgroundColor = \"#FFFFFF\",\n backgroundAlpha = 1.0,\n resolution = 1\n } = config;\n\n const width = ref.width,\n height = ref.height;\n\n this.destroy = this.destroy.bind(this);\n this._initScene = this._initScene.bind(this);\n this._buildMaterial = this._buildMaterial.bind(this);\n\n this.speed = speed;\n this.horizontalPressure = horizontalPressure;\n this.verticalPressure = verticalPressure;\n this.waveFrequencyX = waveFrequencyX;\n this.waveFrequencyY = waveFrequencyY;\n this.waveAmplitude = waveAmplitude;\n this.colorBlending = colorBlending;\n this.colors = colors;\n this.shadows = shadows;\n this.highlights = highlights;\n this.saturation = saturation;\n this.wireframe = wireframe;\n this.backgroundColor = backgroundColor;\n this.backgroundAlpha = backgroundAlpha;\n\n this.sceneState = this._initScene(ref, width, height, resolution);\n\n const { renderer, camera, scene, meshes } = this.sceneState;\n\n let tick = 0;\n const render = () => {\n\n if (Math.floor(tick * 10) % 5 === 0) {\n addNeatLink(ref);\n }\n\n renderer.setClearColor(this._backgroundColor, this._backgroundAlpha);\n meshes.forEach((mesh) => {\n\n const colors = [\n ...this._colors.map(color => ({\n is_active: color.enabled,\n color: new THREE.Color(color.color),\n influence: color.influence\n })),\n ...Array.from({ length: COLORS_COUNT - this._colors.length }).map(() => ({\n is_active: false,\n color: new THREE.Color(0x000000)\n }))\n ];\n\n tick += clock.getDelta() * this._speed;\n // @ts-ignore\n mesh.material.uniforms.u_time.value = tick;\n // @ts-ignore\n mesh.material.uniforms.u_resolution = { value: new THREE.Vector2(width, height) };\n // @ts-ignore\n mesh.material.uniforms.u_color_pressure = { value: new THREE.Vector2(this._horizontalPressure, this._verticalPressure) };\n // @ts-ignore\n mesh.material.uniforms.u_wave_frequency_x = { value: this._waveFrequencyX };\n // @ts-ignore\n mesh.material.uniforms.u_wave_frequency_y = { value: this._waveFrequencyY };\n // @ts-ignore\n mesh.material.uniforms.u_wave_amplitude = { value: this._waveAmplitude };\n // @ts-ignore\n mesh.material.uniforms.u_plane_width = { value: PLANE_WIDTH };\n // @ts-ignore\n mesh.material.uniforms.u_plane_height = { value: PLANE_HEIGHT };\n // @ts-ignore\n mesh.material.uniforms.u_color_blending = { value: this._colorBlending };\n // @ts-ignore\n mesh.material.uniforms.u_colors = { value: colors };\n // @ts-ignore\n mesh.material.uniforms.u_colors_count = { value: COLORS_COUNT };\n // @ts-ignore\n mesh.material.uniforms.u_shadows = { value: this._shadows };\n // @ts-ignore\n mesh.material.uniforms.u_highlights = { value: this._highlights };\n // @ts-ignore\n mesh.material.uniforms.u_saturation = { value: this._saturation };\n // @ts-ignore\n mesh.material.wireframe = this._wireframe;\n });\n\n renderer.render(scene, camera);\n this.requestRef = requestAnimationFrame(render);\n };\n\n const setSize = () => {\n const canvas = renderer.domElement;\n const width = canvas.clientWidth;\n const height = canvas.clientHeight;\n\n this.sceneState.renderer.setSize(width, height, false);\n updateCamera(this.sceneState.camera, width, height);\n };\n\n this.sizeObserver = new ResizeObserver(entries => {\n setSize();\n });\n\n this.sizeObserver.observe(ref);\n\n\n render();\n }\n\n destroy() {\n if (this) {\n cancelAnimationFrame(this.requestRef);\n this.sizeObserver.disconnect();\n }\n }\n\n set speed(speed: number) {\n this._speed = speed / 20;\n }\n\n set horizontalPressure(horizontalPressure: number) {\n this._horizontalPressure = horizontalPressure / 4;\n }\n\n set verticalPressure(verticalPressure: number) {\n this._verticalPressure = verticalPressure / 4;\n }\n\n set waveFrequencyX(waveFrequencyX: number) {\n this._waveFrequencyX = waveFrequencyX * 0.04;\n }\n\n set waveFrequencyY(waveFrequencyY: number) {\n this._waveFrequencyY = waveFrequencyY * 0.04;\n }\n\n set waveAmplitude(waveAmplitude: number) {\n this._waveAmplitude = waveAmplitude * .75;\n }\n\n set colors(colors: NeatColor[]) {\n this._colors = colors;\n }\n\n set highlights(highlights: number) {\n this._highlights = highlights / 100;\n }\n\n set shadows(shadows: number) {\n this._shadows = shadows / 100;\n }\n\n set saturation(saturation: number) {\n this._saturation = saturation / 10;\n }\n\n set colorBlending(colorBlending: number) {\n this._colorBlending = colorBlending / 10;\n }\n\n set wireframe(wireframe: boolean) {\n this._wireframe = wireframe;\n }\n\n set backgroundColor(backgroundColor: string) {\n this._backgroundColor = backgroundColor;\n }\n\n set backgroundAlpha(backgroundAlpha: number) {\n this._backgroundAlpha = backgroundAlpha;\n }\n\n _initScene(ref: HTMLCanvasElement, width: number, height: number, resolution: number): SceneState {\n\n const renderer = new THREE.WebGLRenderer({\n // antialias: true,\n alpha: true,\n canvas: ref\n });\n\n renderer.setClearColor(0xFF0000, .5);\n renderer.setSize(width, height, false);\n\n const meshes: THREE.Mesh[] = [];\n\n const scene = new THREE.Scene();\n\n const material = this._buildMaterial(width, height);\n\n const geo = new THREE.PlaneGeometry(PLANE_WIDTH, PLANE_HEIGHT, 240 * resolution, 240 * resolution);\n const plane = new THREE.Mesh(geo, material);\n plane.rotation.x = -Math.PI / 3.5;\n plane.position.z = -1;\n meshes.push(plane);\n scene.add(plane);\n\n const camera = new THREE.OrthographicCamera(0.0, 0.0, 0.0, 0.0, 0.0, 0.0);\n // camera.zoom = 1;\n updateCamera(camera, width, height);\n\n return {\n renderer,\n camera,\n scene,\n meshes\n };\n }\n\n _buildMaterial(width: number, height: number) {\n\n const colors = [\n ...this._colors.map(color => ({\n is_active: color.enabled,\n color: new THREE.Color(color.color),\n influence: color.influence\n })),\n ...Array.from({ length: COLORS_COUNT - this._colors.length }).map(() => ({\n is_active: false,\n color: new THREE.Color(0x000000)\n }))\n ];\n\n const uniforms = {\n u_time: { value: 0 },\n u_color_pressure: { value: new THREE.Vector2(this._horizontalPressure, this._verticalPressure) },\n u_wave_frequency_x: { value: this._waveFrequencyX },\n u_wave_frequency_y: { value: this._waveFrequencyY },\n u_wave_amplitude: { value: this._waveAmplitude },\n u_resolution: { value: new THREE.Vector2(width, height) },\n u_colors: { value: colors },\n u_colors_count: { value: this._colors.length },\n u_plane_width: { value: PLANE_WIDTH },\n u_plane_height: { value: PLANE_HEIGHT },\n u_shadows: { value: this._shadows },\n u_highlights: { value: this._highlights },\n };\n\n const material = new THREE.ShaderMaterial({\n uniforms: uniforms,\n vertexShader: buildUniforms() + buildNoise() + buildColorFunctions() + buildVertexShader(),\n fragmentShader: buildUniforms() + buildColorFunctions() + buildFragmentShader()\n });\n\n material.wireframe = WIREFRAME;\n return material;\n }\n\n\n}\n\nfunction updateCamera(camera: THREE.OrthographicCamera, width: number, height: number) {\n\n const viewPortAreaRatio = 1000000;\n const areaViewPort = width * height;\n const targetPlaneArea =\n areaViewPort / viewPortAreaRatio *\n PLANE_WIDTH * PLANE_HEIGHT / 1.5;\n\n const ratio = width / height;\n\n const targetWidth = Math.sqrt(targetPlaneArea * ratio);\n const targetHeight = targetPlaneArea / targetWidth;\n\n const left = -PLANE_WIDTH / 2;\n const right = Math.min((left + targetWidth) / 1.5, PLANE_WIDTH / 2);\n\n const top = PLANE_HEIGHT / 4;\n const bottom = Math.max((top - targetHeight) / 2, -PLANE_HEIGHT / 4);\n\n const near = -100;\n const far = 1000;\n camera.left = left;\n camera.right = right;\n camera.top = top;\n camera.bottom = bottom;\n camera.near = near;\n camera.far = far;\n camera.updateProjectionMatrix();\n}\n\n\nfunction buildVertexShader() {\n return `\n\nvoid main() {\n\n vUv = uv;\n\n v_displacement_amount = cnoise( vec3(\n u_wave_frequency_x * position.x + u_time,\n u_wave_frequency_y * position.y + u_time,\n u_time\n ));\n \n vec3 color;\n\n // float t = mod(u_base_color, 100.0);\n color = u_colors[0].color;\n \n vec2 noise_cord = vUv * u_color_pressure;\n \n const float minNoise = .0;\n const float maxNoise = .9;\n \n for (int i = 1; i < u_colors_count; i++) {\n \n if(u_colors[i].is_active == 1.0){\n float noiseFlow = (1. + float(i)) / 30.;\n float noiseSpeed = (1. + float(i)) * 0.11;\n float noiseSeed = 13. + float(i) * 7.;\n \n float noise = snoise(\n vec3(\n noise_cord.x * u_color_pressure.x + u_time * noiseFlow * 2.,\n noise_cord.y * u_color_pressure.y,\n u_time * noiseSpeed\n ) + noiseSeed\n );\n \n noise = clamp(minNoise, maxNoise + float(i) * 0.02, noise);\n vec3 nextColor = u_colors[i].color;\n color = mix(color, nextColor, smoothstep(0.0, u_color_blending, noise));\n }\n \n }\n \n v_color = color;\n \n vec3 newPosition = position + normal * v_displacement_amount * u_wave_amplitude;\n gl_Position = projectionMatrix * modelViewMatrix * vec4( newPosition, 1.0 );\n \n v_new_position = gl_Position;\n}\n`;\n}\n\nfunction buildFragmentShader() {\n return `\n\nvoid main(){\n vec3 color = v_color;\n \n color.rgb += pow(v_displacement_amount, 1.0) * u_highlights;\n color.rgb -= pow(1.0 - v_displacement_amount, 2.0) * u_shadows;\n color = saturation(color, 1.0 + u_saturation);\n \n gl_FragColor = vec4(color,1.0);\n}\n`;\n}\n\nconst buildUniforms = () => `\nprecision highp float;\n\nstruct Color {\n float is_active;\n vec3 color;\n float value;\n};\n\nuniform float u_time;\n\nuniform float u_wave_amplitude;\nuniform float u_wave_frequency_x;\nuniform float u_wave_frequency_y;\n\nuniform vec2 u_color_pressure;\n\nuniform float u_plane_width;\nuniform float u_plane_height;\n\nuniform float u_shadows;\nuniform float u_highlights;\nuniform float u_saturation;\n\nuniform float u_color_blending;\n\nuniform int u_colors_count;\nuniform Color u_colors[5];\nuniform vec2 u_resolution;\n\nvarying vec2 vUv;\nvarying vec4 v_new_position;\nvarying vec3 v_color;\nvarying float v_displacement_amount;\n\n `;\n\nconst buildNoise = () => `\n\nvec3 mod289(vec3 x)\n{\n return x - floor(x * (1.0 / 289.0)) * 289.0;\n}\n\nvec4 mod289(vec4 x)\n{\n return x - floor(x * (1.0 / 289.0)) * 289.0;\n}\n\nvec4 permute(vec4 x)\n{\n return mod289(((x*34.0)+1.0)*x);\n}\n\nvec4 taylorInvSqrt(vec4 r)\n{\n return 1.79284291400159 - 0.85373472095314 * r;\n}\n\nvec3 fade(vec3 t) {\n return t*t*t*(t*(t*6.0-15.0)+10.0);\n}\n\nfloat snoise(vec3 v)\n{\n const vec2 C = vec2(1.0/6.0, 1.0/3.0) ;\n const vec4 D = vec4(0.0, 0.5, 1.0, 2.0);\n\n// First corner\n vec3 i = floor(v + dot(v, C.yyy) );\n vec3 x0 = v - i + dot(i, C.xxx) ;\n\n// Other corners\n vec3 g = step(x0.yzx, x0.xyz);\n vec3 l = 1.0 - g;\n vec3 i1 = min( g.xyz, l.zxy );\n vec3 i2 = max( g.xyz, l.zxy );\n\n // x0 = x0 - 0.0 + 0.0 * C.xxx;\n // x1 = x0 - i1 + 1.0 * C.xxx;\n // x2 = x0 - i2 + 2.0 * C.xxx;\n // x3 = x0 - 1.0 + 3.0 * C.xxx;\n vec3 x1 = x0 - i1 + C.xxx;\n vec3 x2 = x0 - i2 + C.yyy; // 2.0*C.x = 1/3 = C.y\n vec3 x3 = x0 - D.yyy; // -1.0+3.0*C.x = -0.5 = -D.y\n\n// Permutations\n i = mod289(i);\n vec4 p = permute( permute( permute(\n i.z + vec4(0.0, i1.z, i2.z, 1.0 ))\n + i.y + vec4(0.0, i1.y, i2.y, 1.0 ))\n + i.x + vec4(0.0, i1.x, i2.x, 1.0 ));\n\n// Gradients: 7x7 points over a square, mapped onto an octahedron.\n// The ring size 17*17 = 289 is close to a multiple of 49 (49*6 = 294)\n float n_ = 0.142857142857; // 1.0/7.0\n vec3 ns = n_ * D.wyz - D.xzx;\n\n vec4 j = p - 49.0 * floor(p * ns.z * ns.z); // mod(p,7*7)\n\n vec4 x_ = floor(j * ns.z);\n vec4 y_ = floor(j - 7.0 * x_ ); // mod(j,N)\n\n vec4 x = x_ *ns.x + ns.yyyy;\n vec4 y = y_ *ns.x + ns.yyyy;\n vec4 h = 1.0 - abs(x) - abs(y);\n\n vec4 b0 = vec4( x.xy, y.xy );\n vec4 b1 = vec4( x.zw, y.zw );\n\n //vec4 s0 = vec4(lessThan(b0,0.0))*2.0 - 1.0;\n //vec4 s1 = vec4(lessThan(b1,0.0))*2.0 - 1.0;\n vec4 s0 = floor(b0)*2.0 + 1.0;\n vec4 s1 = floor(b1)*2.0 + 1.0;\n vec4 sh = -step(h, vec4(0.0));\n\n vec4 a0 = b0.xzyw + s0.xzyw*sh.xxyy ;\n vec4 a1 = b1.xzyw + s1.xzyw*sh.zzww ;\n\n vec3 p0 = vec3(a0.xy,h.x);\n vec3 p1 = vec3(a0.zw,h.y);\n vec3 p2 = vec3(a1.xy,h.z);\n vec3 p3 = vec3(a1.zw,h.w);\n\n//Normalise gradients\n vec4 norm = taylorInvSqrt(vec4(dot(p0,p0), dot(p1,p1), dot(p2, p2), dot(p3,p3)));\n p0 *= norm.x;\n p1 *= norm.y;\n p2 *= norm.z;\n p3 *= norm.w;\n\n// Mix final noise value\n vec4 m = max(0.6 - vec4(dot(x0,x0), dot(x1,x1), dot(x2,x2), dot(x3,x3)), 0.0);\n m = m * m;\n return 42.0 * dot( m*m, vec4( dot(p0,x0), dot(p1,x1),\n dot(p2,x2), dot(p3,x3) ) );\n}\n\n// Classic Perlin noise\nfloat cnoise(vec3 P)\n{\n vec3 Pi0 = floor(P); // Integer part for indexing\n vec3 Pi1 = Pi0 + vec3(1.0); // Integer part + 1\n Pi0 = mod289(Pi0);\n Pi1 = mod289(Pi1);\n vec3 Pf0 = fract(P); // Fractional part for interpolation\n vec3 Pf1 = Pf0 - vec3(1.0); // Fractional part - 1.0\n vec4 ix = vec4(Pi0.x, Pi1.x, Pi0.x, Pi1.x);\n vec4 iy = vec4(Pi0.yy, Pi1.yy);\n vec4 iz0 = Pi0.zzzz;\n vec4 iz1 = Pi1.zzzz;\n\n vec4 ixy = permute(permute(ix) + iy);\n vec4 ixy0 = permute(ixy + iz0);\n vec4 ixy1 = permute(ixy + iz1);\n\n vec4 gx0 = ixy0 * (1.0 / 7.0);\n vec4 gy0 = fract(floor(gx0) * (1.0 / 7.0)) - 0.5;\n gx0 = fract(gx0);\n vec4 gz0 = vec4(0.5) - abs(gx0) - abs(gy0);\n vec4 sz0 = step(gz0, vec4(0.0));\n gx0 -= sz0 * (step(0.0, gx0) - 0.5);\n gy0 -= sz0 * (step(0.0, gy0) - 0.5);\n\n vec4 gx1 = ixy1 * (1.0 / 7.0);\n vec4 gy1 = fract(floor(gx1) * (1.0 / 7.0)) - 0.5;\n gx1 = fract(gx1);\n vec4 gz1 = vec4(0.5) - abs(gx1) - abs(gy1);\n vec4 sz1 = step(gz1, vec4(0.0));\n gx1 -= sz1 * (step(0.0, gx1) - 0.5);\n gy1 -= sz1 * (step(0.0, gy1) - 0.5);\n\n vec3 g000 = vec3(gx0.x,gy0.x,gz0.x);\n vec3 g100 = vec3(gx0.y,gy0.y,gz0.y);\n vec3 g010 = vec3(gx0.z,gy0.z,gz0.z);\n vec3 g110 = vec3(gx0.w,gy0.w,gz0.w);\n vec3 g001 = vec3(gx1.x,gy1.x,gz1.x);\n vec3 g101 = vec3(gx1.y,gy1.y,gz1.y);\n vec3 g011 = vec3(gx1.z,gy1.z,gz1.z);\n vec3 g111 = vec3(gx1.w,gy1.w,gz1.w);\n\n vec4 norm0 = taylorInvSqrt(vec4(dot(g000, g000), dot(g010, g010), dot(g100, g100), dot(g110, g110)));\n g000 *= norm0.x;\n g010 *= norm0.y;\n g100 *= norm0.z;\n g110 *= norm0.w;\n vec4 norm1 = taylorInvSqrt(vec4(dot(g001, g001), dot(g011, g011), dot(g101, g101), dot(g111, g111)));\n g001 *= norm1.x;\n g011 *= norm1.y;\n g101 *= norm1.z;\n g111 *= norm1.w;\n\n float n000 = dot(g000, Pf0);\n float n100 = dot(g100, vec3(Pf1.x, Pf0.yz));\n float n010 = dot(g010, vec3(Pf0.x, Pf1.y, Pf0.z));\n float n110 = dot(g110, vec3(Pf1.xy, Pf0.z));\n float n001 = dot(g001, vec3(Pf0.xy, Pf1.z));\n float n101 = dot(g101, vec3(Pf1.x, Pf0.y, Pf1.z));\n float n011 = dot(g011, vec3(Pf0.x, Pf1.yz));\n float n111 = dot(g111, Pf1);\n\n vec3 fade_xyz = fade(Pf0);\n vec4 n_z = mix(vec4(n000, n100, n010, n110), vec4(n001, n101, n011, n111), fade_xyz.z);\n vec2 n_yz = mix(n_z.xy, n_z.zw, fade_xyz.y);\n float n_xyz = mix(n_yz.x, n_yz.y, fade_xyz.x);\n return 2.2 * n_xyz;\n}\n\n// YUV to RGB matrix\nmat3 yuv2rgb = mat3(1.0, 0.0, 1.13983,\n 1.0, -0.39465, -0.58060,\n 1.0, 2.03211, 0.0);\n\n// RGB to YUV matrix\nmat3 rgb2yuv = mat3(0.2126, 0.7152, 0.0722,\n -0.09991, -0.33609, 0.43600,\n 0.615, -0.5586, -0.05639);\n\n `;\n\nconst buildColorFunctions = () => `\n\nvec3 saturation(vec3 rgb, float adjustment) {\n const vec3 W = vec3(0.2125, 0.7154, 0.0721);\n vec3 intensity = vec3(dot(rgb, W));\n return mix(intensity, rgb, adjustment);\n}\n\nfloat saturation(vec3 rgb)\n{\n vec4 K = vec4(0.0, -1.0 / 3.0, 2.0 / 3.0, -1.0);\n vec4 p = mix(vec4(rgb.bg, K.wz), vec4(rgb.gb, K.xy), step(rgb.b, rgb.g));\n vec4 q = mix(vec4(p.xyw, rgb.r), vec4(rgb.r, p.yzx), step(p.x, rgb.r));\n\n float d = q.x - min(q.w, q.y);\n float e = 1.0e-10;\n return abs(6.0 * d + e);\n}\n\n// get saturation of a color in values between 0 and 1\nfloat getSaturation(vec3 color) {\n float max = max(color.r, max(color.g, color.b));\n float min = min(color.r, min(color.g, color.b));\n return (max - min) / max;\n}\n \nvec3 rgb2hsv(vec3 c)\n{\n vec4 K = vec4(0.0, -1.0 / 3.0, 2.0 / 3.0, -1.0);\n vec4 p = mix(vec4(c.bg, K.wz), vec4(c.gb, K.xy), step(c.b, c.g));\n vec4 q = mix(vec4(p.xyw, c.r), vec4(c.r, p.yzx), step(p.x, c.r));\n\n float d = q.x - min(q.w, q.y);\n float e = 1.0e-10;\n return vec3(abs(q.z + (q.w - q.y) / (6.0 * d + e)), d / (q.x + e), q.x);\n}\n\nvec3 hsv2rgb(vec3 c)\n{\n vec4 K = vec4(1.0, 2.0 / 3.0, 1.0 / 3.0, 3.0);\n vec3 p = abs(fract(c.xxx + K.xyz) * 6.0 - K.www);\n return c.z * mix(K.xxx, clamp(p - K.xxx, 0.0, 1.0), c.y);\n}\n`;\n\n\nconst setLinkStyles = (link: HTMLAnchorElement) => {\n link.id = \"neat-link\";\n link.href = \"https://neat.firecms.co\";\n link.target = \"_blank\";\n link.style.position = \"absolute\";\n link.style.display = \"block\";\n link.style.opacity = \"1\";\n link.style.bottom = \"0\";\n link.style.right = \"0\";\n link.style.padding = \"10px\";\n link.style.color = \"#dcdcdc\";\n link.style.fontFamily = \"sans-serif\";\n link.style.fontSize = \"16px\";\n link.style.fontWeight = \"bold\";\n link.style.textDecoration = \"none\";\n link.style.zIndex = \"100\";\n link.innerHTML = \"NEAT\";\n}\n\nconst addNeatLink = (ref: HTMLCanvasElement) => {\n const existingLinks = ref.parentElement?.getElementsByTagName(\"a\");\n if (existingLinks) {\n for (let i = 0; i < existingLinks.length; i++) {\n if (existingLinks[i].id === \"neat-link\") {\n setLinkStyles(existingLinks[i]);\n return;\n }\n }\n }\n const link = document.createElement(\"a\");\n setLinkStyles(link);\n ref.parentElement?.appendChild(link);\n}\n"],"names":["PLANE_WIDTH","PLANE_HEIGHT","WIREFRAME","COLORS_COUNT","clock","THREE","NeatGradient","config","ref","speed","horizontalPressure","verticalPressure","waveFrequencyX","waveFrequencyY","waveAmplitude","colors","highlights","shadows","saturation","colorBlending","wireframe","backgroundColor","backgroundAlpha","resolution","width","height","renderer","camera","scene","meshes","tick","render","addNeatLink","mesh","color","setSize","canvas","updateCamera","entries","material","geo","plane","uniforms","buildUniforms","buildNoise","buildColorFunctions","buildVertexShader","buildFragmentShader","targetPlaneArea","ratio","targetWidth","targetHeight","left","right","top","bottom","near","far","setLinkStyles","link","existingLinks","i"],"mappings":"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"}
1
+ {"version":3,"file":"index.es.js","sources":["../src/NeatGradient.ts"],"sourcesContent":["import * as THREE from \"three\";\n\nconst PLANE_WIDTH = 50;\nconst PLANE_HEIGHT = 80;\n\nconst WIREFRAME = true;\nconst COLORS_COUNT = 5;\n\nconst clock = new THREE.Clock();\n\ntype SceneState = {\n renderer: THREE.WebGLRenderer,\n camera: THREE.OrthographicCamera,\n scene: THREE.Scene,\n meshes: THREE.Mesh[],\n}\n\nexport type NeatConfig = {\n speed?: number;\n horizontalPressure?: number;\n verticalPressure?: number;\n waveFrequencyX?: number;\n waveFrequencyY?: number;\n waveAmplitude?: number;\n highlights?: number;\n shadows?: number;\n colorSaturation?: number;\n colorBrightness?: number;\n colors: NeatColor[];\n colorBlending?: number;\n wireframe?: boolean;\n backgroundColor?: string;\n backgroundAlpha?: number;\n};\n\nexport type NeatColor = {\n color: string;\n enabled: boolean;\n /**\n * Value from 0 to 1\n */\n influence?: number;\n}\n\nexport type NeatController = {\n destroy: () => void;\n}\n\nexport class NeatGradient implements NeatController {\n\n private _speed: number = -1;\n\n private _horizontalPressure: number = -1;\n private _verticalPressure: number = -1;\n\n private _waveFrequencyX: number = -1;\n private _waveFrequencyY: number = -1;\n private _waveAmplitude: number = -1;\n\n private _shadows: number = -1;\n private _highlights: number = -1;\n private _saturation: number = -1;\n private _brightness: number = -1;\n\n private _colorBlending: number = -1;\n\n private _colors: NeatColor[] = [];\n private _wireframe: boolean = false;\n\n private _backgroundColor: string = \"#FFFFFF\";\n private _backgroundAlpha: number = 1.0;\n\n private requestRef: number = -1;\n private sizeObserver: ResizeObserver;\n private readonly sceneState: SceneState;\n\n constructor(config: NeatConfig & { ref: HTMLCanvasElement, resolution?: number }) {\n\n const {\n ref,\n speed = 4,\n horizontalPressure = 3,\n verticalPressure = 3,\n waveFrequencyX = 5,\n waveFrequencyY = 5,\n waveAmplitude = 3,\n colors,\n highlights = 4,\n shadows = 4,\n colorSaturation = 0,\n colorBrightness = 1,\n colorBlending = 5,\n wireframe = false,\n backgroundColor = \"#FFFFFF\",\n backgroundAlpha = 1.0,\n resolution = 1\n } = config;\n\n const width = ref.width,\n height = ref.height;\n\n this.destroy = this.destroy.bind(this);\n this._initScene = this._initScene.bind(this);\n this._buildMaterial = this._buildMaterial.bind(this);\n\n this.speed = speed;\n this.horizontalPressure = horizontalPressure;\n this.verticalPressure = verticalPressure;\n this.waveFrequencyX = waveFrequencyX;\n this.waveFrequencyY = waveFrequencyY;\n this.waveAmplitude = waveAmplitude;\n this.colorBlending = colorBlending;\n this.colors = colors;\n this.shadows = shadows;\n this.highlights = highlights;\n this.colorSaturation = colorSaturation;\n this.colorBrightness = colorBrightness;\n this.wireframe = wireframe;\n this.backgroundColor = backgroundColor;\n this.backgroundAlpha = backgroundAlpha;\n\n this.sceneState = this._initScene(ref, width, height, resolution);\n\n const { renderer, camera, scene, meshes } = this.sceneState;\n\n let tick = 0;\n const render = () => {\n\n if (Math.floor(tick * 10) % 5 === 0) {\n addNeatLink(ref);\n }\n\n renderer.setClearColor(this._backgroundColor, this._backgroundAlpha);\n meshes.forEach((mesh) => {\n\n const colors = [\n ...this._colors.map(color => ({\n is_active: color.enabled,\n color: new THREE.Color(color.color),\n influence: color.influence\n })),\n ...Array.from({ length: COLORS_COUNT - this._colors.length }).map(() => ({\n is_active: false,\n color: new THREE.Color(0x000000)\n }))\n ];\n\n tick += clock.getDelta() * this._speed;\n // @ts-ignore\n mesh.material.uniforms.u_time.value = tick;\n // @ts-ignore\n mesh.material.uniforms.u_resolution = { value: new THREE.Vector2(width, height) };\n // @ts-ignore\n mesh.material.uniforms.u_color_pressure = { value: new THREE.Vector2(this._horizontalPressure, this._verticalPressure) };\n // @ts-ignore\n mesh.material.uniforms.u_wave_frequency_x = { value: this._waveFrequencyX };\n // @ts-ignore\n mesh.material.uniforms.u_wave_frequency_y = { value: this._waveFrequencyY };\n // @ts-ignore\n mesh.material.uniforms.u_wave_amplitude = { value: this._waveAmplitude };\n // @ts-ignore\n mesh.material.uniforms.u_plane_width = { value: PLANE_WIDTH };\n // @ts-ignore\n mesh.material.uniforms.u_plane_height = { value: PLANE_HEIGHT };\n // @ts-ignore\n mesh.material.uniforms.u_color_blending = { value: this._colorBlending };\n // @ts-ignore\n mesh.material.uniforms.u_colors = { value: colors };\n // @ts-ignore\n mesh.material.uniforms.u_colors_count = { value: COLORS_COUNT };\n // @ts-ignore\n mesh.material.uniforms.u_shadows = { value: this._shadows };\n // @ts-ignore\n mesh.material.uniforms.u_highlights = { value: this._highlights };\n // @ts-ignore\n mesh.material.uniforms.u_saturation = { value: this._saturation };\n // @ts-ignore\n mesh.material.uniforms.u_brightness = { value: this._brightness };\n // @ts-ignore\n mesh.material.wireframe = this._wireframe;\n });\n\n renderer.render(scene, camera);\n this.requestRef = requestAnimationFrame(render);\n };\n\n const setSize = () => {\n const canvas = renderer.domElement;\n const width = canvas.clientWidth;\n const height = canvas.clientHeight;\n\n this.sceneState.renderer.setSize(width, height, false);\n updateCamera(this.sceneState.camera, width, height);\n };\n\n this.sizeObserver = new ResizeObserver(entries => {\n setSize();\n });\n\n this.sizeObserver.observe(ref);\n\n\n render();\n }\n\n destroy() {\n if (this) {\n cancelAnimationFrame(this.requestRef);\n this.sizeObserver.disconnect();\n }\n }\n\n set speed(speed: number) {\n this._speed = speed / 20;\n }\n\n set horizontalPressure(horizontalPressure: number) {\n this._horizontalPressure = horizontalPressure / 4;\n }\n\n set verticalPressure(verticalPressure: number) {\n this._verticalPressure = verticalPressure / 4;\n }\n\n set waveFrequencyX(waveFrequencyX: number) {\n this._waveFrequencyX = waveFrequencyX * 0.04;\n }\n\n set waveFrequencyY(waveFrequencyY: number) {\n this._waveFrequencyY = waveFrequencyY * 0.04;\n }\n\n set waveAmplitude(waveAmplitude: number) {\n this._waveAmplitude = waveAmplitude * .75;\n }\n\n set colors(colors: NeatColor[]) {\n this._colors = colors;\n }\n\n set highlights(highlights: number) {\n this._highlights = highlights / 100;\n }\n\n set shadows(shadows: number) {\n this._shadows = shadows / 100;\n }\n\n set colorSaturation(colorSaturation: number) {\n this._saturation = colorSaturation / 10;\n }\n\n set colorBrightness(colorBrightness: number) {\n console.log(\"colorBrightness\", colorBrightness)\n this._brightness = colorBrightness;\n }\n\n set colorBlending(colorBlending: number) {\n this._colorBlending = colorBlending / 10;\n }\n\n set wireframe(wireframe: boolean) {\n this._wireframe = wireframe;\n }\n\n set backgroundColor(backgroundColor: string) {\n this._backgroundColor = backgroundColor;\n }\n\n set backgroundAlpha(backgroundAlpha: number) {\n this._backgroundAlpha = backgroundAlpha;\n }\n\n _initScene(ref: HTMLCanvasElement, width: number, height: number, resolution: number): SceneState {\n\n const renderer = new THREE.WebGLRenderer({\n // antialias: true,\n alpha: true,\n canvas: ref\n });\n\n renderer.setClearColor(0xFF0000, .5);\n renderer.setSize(width, height, false);\n\n const meshes: THREE.Mesh[] = [];\n\n const scene = new THREE.Scene();\n\n const material = this._buildMaterial(width, height);\n\n const geo = new THREE.PlaneGeometry(PLANE_WIDTH, PLANE_HEIGHT, 240 * resolution, 240 * resolution);\n const plane = new THREE.Mesh(geo, material);\n plane.rotation.x = -Math.PI / 3.5;\n plane.position.z = -1;\n meshes.push(plane);\n scene.add(plane);\n\n const camera = new THREE.OrthographicCamera(0.0, 0.0, 0.0, 0.0, 0.0, 0.0);\n // camera.zoom = 1;\n updateCamera(camera, width, height);\n\n return {\n renderer,\n camera,\n scene,\n meshes\n };\n }\n\n _buildMaterial(width: number, height: number) {\n\n const colors = [\n ...this._colors.map(color => ({\n is_active: color.enabled,\n color: new THREE.Color(color.color),\n influence: color.influence\n })),\n ...Array.from({ length: COLORS_COUNT - this._colors.length }).map(() => ({\n is_active: false,\n color: new THREE.Color(0x000000)\n }))\n ];\n\n const uniforms = {\n u_time: { value: 0 },\n u_color_pressure: { value: new THREE.Vector2(this._horizontalPressure, this._verticalPressure) },\n u_wave_frequency_x: { value: this._waveFrequencyX },\n u_wave_frequency_y: { value: this._waveFrequencyY },\n u_wave_amplitude: { value: this._waveAmplitude },\n u_resolution: { value: new THREE.Vector2(width, height) },\n u_colors: { value: colors },\n u_colors_count: { value: this._colors.length },\n u_plane_width: { value: PLANE_WIDTH },\n u_plane_height: { value: PLANE_HEIGHT },\n u_shadows: { value: this._shadows },\n u_highlights: { value: this._highlights },\n };\n\n const material = new THREE.ShaderMaterial({\n uniforms: uniforms,\n vertexShader: buildUniforms() + buildNoise() + buildColorFunctions() + buildVertexShader(),\n fragmentShader: buildUniforms() + buildColorFunctions() + buildFragmentShader()\n });\n\n material.wireframe = WIREFRAME;\n return material;\n }\n\n\n}\n\nfunction updateCamera(camera: THREE.OrthographicCamera, width: number, height: number) {\n\n const viewPortAreaRatio = 1000000;\n const areaViewPort = width * height;\n const targetPlaneArea =\n areaViewPort / viewPortAreaRatio *\n PLANE_WIDTH * PLANE_HEIGHT / 1.5;\n\n const ratio = width / height;\n\n const targetWidth = Math.sqrt(targetPlaneArea * ratio);\n const targetHeight = targetPlaneArea / targetWidth;\n\n const left = -PLANE_WIDTH / 2;\n const right = Math.min((left + targetWidth) / 1.5, PLANE_WIDTH / 2);\n\n const top = PLANE_HEIGHT / 4;\n const bottom = Math.max((top - targetHeight) / 2, -PLANE_HEIGHT / 4);\n\n const near = -100;\n const far = 1000;\n camera.left = left;\n camera.right = right;\n camera.top = top;\n camera.bottom = bottom;\n camera.near = near;\n camera.far = far;\n camera.updateProjectionMatrix();\n}\n\n\nfunction buildVertexShader() {\n return `\n\nvoid main() {\n\n vUv = uv;\n\n v_displacement_amount = cnoise( vec3(\n u_wave_frequency_x * position.x + u_time,\n u_wave_frequency_y * position.y + u_time,\n u_time\n ));\n \n vec3 color;\n\n // float t = mod(u_base_color, 100.0);\n color = u_colors[0].color;\n \n vec2 noise_cord = vUv * u_color_pressure;\n \n const float minNoise = .0;\n const float maxNoise = .9;\n \n for (int i = 1; i < u_colors_count; i++) {\n \n if(u_colors[i].is_active == 1.0){\n float noiseFlow = (1. + float(i)) / 30.;\n float noiseSpeed = (1. + float(i)) * 0.11;\n float noiseSeed = 13. + float(i) * 7.;\n \n float noise = snoise(\n vec3(\n noise_cord.x * u_color_pressure.x + u_time * noiseFlow * 2.,\n noise_cord.y * u_color_pressure.y,\n u_time * noiseSpeed\n ) + noiseSeed\n );\n \n noise = clamp(minNoise, maxNoise + float(i) * 0.02, noise);\n vec3 nextColor = u_colors[i].color;\n color = mix(color, nextColor, smoothstep(0.0, u_color_blending, noise));\n }\n \n }\n \n v_color = color;\n \n vec3 newPosition = position + normal * v_displacement_amount * u_wave_amplitude;\n gl_Position = projectionMatrix * modelViewMatrix * vec4( newPosition, 1.0 );\n \n v_new_position = gl_Position;\n}\n`;\n}\n\nfunction buildFragmentShader() {\n return `\n\nvoid main(){\n vec3 color = v_color;\n \n color.rgb += pow(v_displacement_amount, 1.0) * u_highlights;\n color.rgb -= pow(1.0 - v_displacement_amount, 2.0) * u_shadows;\n color = saturation(color, 1.0 + u_saturation);\n color = color * u_brightness;\n \n gl_FragColor = vec4(color,1.0);\n}\n`;\n}\n\nconst buildUniforms = () => `\nprecision highp float;\n\nstruct Color {\n float is_active;\n vec3 color;\n float value;\n};\n\nuniform float u_time;\n\nuniform float u_wave_amplitude;\nuniform float u_wave_frequency_x;\nuniform float u_wave_frequency_y;\n\nuniform vec2 u_color_pressure;\n\nuniform float u_plane_width;\nuniform float u_plane_height;\n\nuniform float u_shadows;\nuniform float u_highlights;\nuniform float u_saturation;\nuniform float u_brightness;\n\nuniform float u_color_blending;\n\nuniform int u_colors_count;\nuniform Color u_colors[5];\nuniform vec2 u_resolution;\n\nvarying vec2 vUv;\nvarying vec4 v_new_position;\nvarying vec3 v_color;\nvarying float v_displacement_amount;\n\n `;\n\nconst buildNoise = () => `\n\nvec3 mod289(vec3 x)\n{\n return x - floor(x * (1.0 / 289.0)) * 289.0;\n}\n\nvec4 mod289(vec4 x)\n{\n return x - floor(x * (1.0 / 289.0)) * 289.0;\n}\n\nvec4 permute(vec4 x)\n{\n return mod289(((x*34.0)+1.0)*x);\n}\n\nvec4 taylorInvSqrt(vec4 r)\n{\n return 1.79284291400159 - 0.85373472095314 * r;\n}\n\nvec3 fade(vec3 t) {\n return t*t*t*(t*(t*6.0-15.0)+10.0);\n}\n\nfloat snoise(vec3 v)\n{\n const vec2 C = vec2(1.0/6.0, 1.0/3.0) ;\n const vec4 D = vec4(0.0, 0.5, 1.0, 2.0);\n\n// First corner\n vec3 i = floor(v + dot(v, C.yyy) );\n vec3 x0 = v - i + dot(i, C.xxx) ;\n\n// Other corners\n vec3 g = step(x0.yzx, x0.xyz);\n vec3 l = 1.0 - g;\n vec3 i1 = min( g.xyz, l.zxy );\n vec3 i2 = max( g.xyz, l.zxy );\n\n // x0 = x0 - 0.0 + 0.0 * C.xxx;\n // x1 = x0 - i1 + 1.0 * C.xxx;\n // x2 = x0 - i2 + 2.0 * C.xxx;\n // x3 = x0 - 1.0 + 3.0 * C.xxx;\n vec3 x1 = x0 - i1 + C.xxx;\n vec3 x2 = x0 - i2 + C.yyy; // 2.0*C.x = 1/3 = C.y\n vec3 x3 = x0 - D.yyy; // -1.0+3.0*C.x = -0.5 = -D.y\n\n// Permutations\n i = mod289(i);\n vec4 p = permute( permute( permute(\n i.z + vec4(0.0, i1.z, i2.z, 1.0 ))\n + i.y + vec4(0.0, i1.y, i2.y, 1.0 ))\n + i.x + vec4(0.0, i1.x, i2.x, 1.0 ));\n\n// Gradients: 7x7 points over a square, mapped onto an octahedron.\n// The ring size 17*17 = 289 is close to a multiple of 49 (49*6 = 294)\n float n_ = 0.142857142857; // 1.0/7.0\n vec3 ns = n_ * D.wyz - D.xzx;\n\n vec4 j = p - 49.0 * floor(p * ns.z * ns.z); // mod(p,7*7)\n\n vec4 x_ = floor(j * ns.z);\n vec4 y_ = floor(j - 7.0 * x_ ); // mod(j,N)\n\n vec4 x = x_ *ns.x + ns.yyyy;\n vec4 y = y_ *ns.x + ns.yyyy;\n vec4 h = 1.0 - abs(x) - abs(y);\n\n vec4 b0 = vec4( x.xy, y.xy );\n vec4 b1 = vec4( x.zw, y.zw );\n\n //vec4 s0 = vec4(lessThan(b0,0.0))*2.0 - 1.0;\n //vec4 s1 = vec4(lessThan(b1,0.0))*2.0 - 1.0;\n vec4 s0 = floor(b0)*2.0 + 1.0;\n vec4 s1 = floor(b1)*2.0 + 1.0;\n vec4 sh = -step(h, vec4(0.0));\n\n vec4 a0 = b0.xzyw + s0.xzyw*sh.xxyy ;\n vec4 a1 = b1.xzyw + s1.xzyw*sh.zzww ;\n\n vec3 p0 = vec3(a0.xy,h.x);\n vec3 p1 = vec3(a0.zw,h.y);\n vec3 p2 = vec3(a1.xy,h.z);\n vec3 p3 = vec3(a1.zw,h.w);\n\n//Normalise gradients\n vec4 norm = taylorInvSqrt(vec4(dot(p0,p0), dot(p1,p1), dot(p2, p2), dot(p3,p3)));\n p0 *= norm.x;\n p1 *= norm.y;\n p2 *= norm.z;\n p3 *= norm.w;\n\n// Mix final noise value\n vec4 m = max(0.6 - vec4(dot(x0,x0), dot(x1,x1), dot(x2,x2), dot(x3,x3)), 0.0);\n m = m * m;\n return 42.0 * dot( m*m, vec4( dot(p0,x0), dot(p1,x1),\n dot(p2,x2), dot(p3,x3) ) );\n}\n\n// Classic Perlin noise\nfloat cnoise(vec3 P)\n{\n vec3 Pi0 = floor(P); // Integer part for indexing\n vec3 Pi1 = Pi0 + vec3(1.0); // Integer part + 1\n Pi0 = mod289(Pi0);\n Pi1 = mod289(Pi1);\n vec3 Pf0 = fract(P); // Fractional part for interpolation\n vec3 Pf1 = Pf0 - vec3(1.0); // Fractional part - 1.0\n vec4 ix = vec4(Pi0.x, Pi1.x, Pi0.x, Pi1.x);\n vec4 iy = vec4(Pi0.yy, Pi1.yy);\n vec4 iz0 = Pi0.zzzz;\n vec4 iz1 = Pi1.zzzz;\n\n vec4 ixy = permute(permute(ix) + iy);\n vec4 ixy0 = permute(ixy + iz0);\n vec4 ixy1 = permute(ixy + iz1);\n\n vec4 gx0 = ixy0 * (1.0 / 7.0);\n vec4 gy0 = fract(floor(gx0) * (1.0 / 7.0)) - 0.5;\n gx0 = fract(gx0);\n vec4 gz0 = vec4(0.5) - abs(gx0) - abs(gy0);\n vec4 sz0 = step(gz0, vec4(0.0));\n gx0 -= sz0 * (step(0.0, gx0) - 0.5);\n gy0 -= sz0 * (step(0.0, gy0) - 0.5);\n\n vec4 gx1 = ixy1 * (1.0 / 7.0);\n vec4 gy1 = fract(floor(gx1) * (1.0 / 7.0)) - 0.5;\n gx1 = fract(gx1);\n vec4 gz1 = vec4(0.5) - abs(gx1) - abs(gy1);\n vec4 sz1 = step(gz1, vec4(0.0));\n gx1 -= sz1 * (step(0.0, gx1) - 0.5);\n gy1 -= sz1 * (step(0.0, gy1) - 0.5);\n\n vec3 g000 = vec3(gx0.x,gy0.x,gz0.x);\n vec3 g100 = vec3(gx0.y,gy0.y,gz0.y);\n vec3 g010 = vec3(gx0.z,gy0.z,gz0.z);\n vec3 g110 = vec3(gx0.w,gy0.w,gz0.w);\n vec3 g001 = vec3(gx1.x,gy1.x,gz1.x);\n vec3 g101 = vec3(gx1.y,gy1.y,gz1.y);\n vec3 g011 = vec3(gx1.z,gy1.z,gz1.z);\n vec3 g111 = vec3(gx1.w,gy1.w,gz1.w);\n\n vec4 norm0 = taylorInvSqrt(vec4(dot(g000, g000), dot(g010, g010), dot(g100, g100), dot(g110, g110)));\n g000 *= norm0.x;\n g010 *= norm0.y;\n g100 *= norm0.z;\n g110 *= norm0.w;\n vec4 norm1 = taylorInvSqrt(vec4(dot(g001, g001), dot(g011, g011), dot(g101, g101), dot(g111, g111)));\n g001 *= norm1.x;\n g011 *= norm1.y;\n g101 *= norm1.z;\n g111 *= norm1.w;\n\n float n000 = dot(g000, Pf0);\n float n100 = dot(g100, vec3(Pf1.x, Pf0.yz));\n float n010 = dot(g010, vec3(Pf0.x, Pf1.y, Pf0.z));\n float n110 = dot(g110, vec3(Pf1.xy, Pf0.z));\n float n001 = dot(g001, vec3(Pf0.xy, Pf1.z));\n float n101 = dot(g101, vec3(Pf1.x, Pf0.y, Pf1.z));\n float n011 = dot(g011, vec3(Pf0.x, Pf1.yz));\n float n111 = dot(g111, Pf1);\n\n vec3 fade_xyz = fade(Pf0);\n vec4 n_z = mix(vec4(n000, n100, n010, n110), vec4(n001, n101, n011, n111), fade_xyz.z);\n vec2 n_yz = mix(n_z.xy, n_z.zw, fade_xyz.y);\n float n_xyz = mix(n_yz.x, n_yz.y, fade_xyz.x);\n return 2.2 * n_xyz;\n}\n\n// YUV to RGB matrix\nmat3 yuv2rgb = mat3(1.0, 0.0, 1.13983,\n 1.0, -0.39465, -0.58060,\n 1.0, 2.03211, 0.0);\n\n// RGB to YUV matrix\nmat3 rgb2yuv = mat3(0.2126, 0.7152, 0.0722,\n -0.09991, -0.33609, 0.43600,\n 0.615, -0.5586, -0.05639);\n\n `;\n\nconst buildColorFunctions = () => `\n\nvec3 saturation(vec3 rgb, float adjustment) {\n const vec3 W = vec3(0.2125, 0.7154, 0.0721);\n vec3 intensity = vec3(dot(rgb, W));\n return mix(intensity, rgb, adjustment);\n}\n\nfloat saturation(vec3 rgb)\n{\n vec4 K = vec4(0.0, -1.0 / 3.0, 2.0 / 3.0, -1.0);\n vec4 p = mix(vec4(rgb.bg, K.wz), vec4(rgb.gb, K.xy), step(rgb.b, rgb.g));\n vec4 q = mix(vec4(p.xyw, rgb.r), vec4(rgb.r, p.yzx), step(p.x, rgb.r));\n\n float d = q.x - min(q.w, q.y);\n float e = 1.0e-10;\n return abs(6.0 * d + e);\n}\n\n// get saturation of a color in values between 0 and 1\nfloat getSaturation(vec3 color) {\n float max = max(color.r, max(color.g, color.b));\n float min = min(color.r, min(color.g, color.b));\n return (max - min) / max;\n}\n \nvec3 rgb2hsv(vec3 c)\n{\n vec4 K = vec4(0.0, -1.0 / 3.0, 2.0 / 3.0, -1.0);\n vec4 p = mix(vec4(c.bg, K.wz), vec4(c.gb, K.xy), step(c.b, c.g));\n vec4 q = mix(vec4(p.xyw, c.r), vec4(c.r, p.yzx), step(p.x, c.r));\n\n float d = q.x - min(q.w, q.y);\n float e = 1.0e-10;\n return vec3(abs(q.z + (q.w - q.y) / (6.0 * d + e)), d / (q.x + e), q.x);\n}\n\nvec3 hsv2rgb(vec3 c)\n{\n vec4 K = vec4(1.0, 2.0 / 3.0, 1.0 / 3.0, 3.0);\n vec3 p = abs(fract(c.xxx + K.xyz) * 6.0 - K.www);\n return c.z * mix(K.xxx, clamp(p - K.xxx, 0.0, 1.0), c.y);\n}\n`;\n\n\nconst setLinkStyles = (link: HTMLAnchorElement) => {\n link.id = \"neat-link\";\n link.href = \"https://neat.firecms.co\";\n link.target = \"_blank\";\n link.style.position = \"absolute\";\n link.style.display = \"block\";\n link.style.opacity = \"1\";\n link.style.bottom = \"0\";\n link.style.right = \"0\";\n link.style.padding = \"10px\";\n link.style.color = \"#dcdcdc\";\n link.style.fontFamily = \"sans-serif\";\n link.style.fontSize = \"16px\";\n link.style.fontWeight = \"bold\";\n link.style.textDecoration = \"none\";\n link.style.zIndex = \"100\";\n link.innerHTML = \"NEAT\";\n}\n\nconst addNeatLink = (ref: HTMLCanvasElement) => {\n const existingLinks = ref.parentElement?.getElementsByTagName(\"a\");\n if (existingLinks) {\n for (let i = 0; i < existingLinks.length; i++) {\n if (existingLinks[i].id === \"neat-link\") {\n setLinkStyles(existingLinks[i]);\n return;\n }\n }\n }\n const link = document.createElement(\"a\");\n setLinkStyles(link);\n ref.parentElement?.appendChild(link);\n}\n"],"names":["PLANE_WIDTH","PLANE_HEIGHT","WIREFRAME","COLORS_COUNT","clock","THREE","NeatGradient","config","ref","speed","horizontalPressure","verticalPressure","waveFrequencyX","waveFrequencyY","waveAmplitude","colors","highlights","shadows","colorSaturation","colorBrightness","colorBlending","wireframe","backgroundColor","backgroundAlpha","resolution","width","height","renderer","camera","scene","meshes","tick","render","addNeatLink","mesh","color","setSize","canvas","updateCamera","entries","material","geo","plane","uniforms","buildUniforms","buildNoise","buildColorFunctions","buildVertexShader","buildFragmentShader","targetPlaneArea","ratio","targetWidth","targetHeight","left","right","top","bottom","near","far","setLinkStyles","link","existingLinks","i"],"mappings":"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"}
package/dist/index.umd.js CHANGED
@@ -1,4 +1,4 @@
1
- (function(l,m){typeof exports=="object"&&typeof module<"u"?m(exports,require("three")):typeof define=="function"&&define.amd?define(["exports","three"],m):(l=typeof globalThis<"u"?globalThis:l||self,m(l.FireCMS={},l.THREE))})(this,function(l,m){"use strict";function O(t){if(t&&t.__esModule)return t;const e=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(t){for(const o in t)if(o!=="default"){const i=Object.getOwnPropertyDescriptor(t,o);Object.defineProperty(e,o,i.get?i:{enumerable:!0,get:()=>t[o]})}}return e.default=t,Object.freeze(e)}const n=O(m),x=50,g=80,T=!0,p=5,j=new n.Clock;class R{_speed=-1;_horizontalPressure=-1;_verticalPressure=-1;_waveFrequencyX=-1;_waveFrequencyY=-1;_waveAmplitude=-1;_shadows=-1;_highlights=-1;_saturation=-1;_colorBlending=-1;_colors=[];_wireframe=!1;_backgroundColor="#FFFFFF";_backgroundAlpha=1;requestRef=-1;sizeObserver;sceneState;constructor(e){const{ref:o,speed:i=4,horizontalPressure:u=3,verticalPressure:s=3,waveFrequencyX:a=5,waveFrequencyY:v=5,waveAmplitude:h=3,colors:f,highlights:c=4,shadows:_=4,saturation:w=0,colorBlending:z=5,wireframe:b=!1,backgroundColor:B="#FFFFFF",backgroundAlpha:D=1,resolution:Y=1}=e,M=o.width,E=o.height;this.destroy=this.destroy.bind(this),this._initScene=this._initScene.bind(this),this._buildMaterial=this._buildMaterial.bind(this),this.speed=i,this.horizontalPressure=u,this.verticalPressure=s,this.waveFrequencyX=a,this.waveFrequencyY=v,this.waveAmplitude=h,this.colorBlending=z,this.colors=f,this.shadows=_,this.highlights=c,this.saturation=w,this.wireframe=b,this.backgroundColor=B,this.backgroundAlpha=D,this.sceneState=this._initScene(o,M,E,Y);const{renderer:P,camera:G,scene:H,meshes:L}=this.sceneState;let q=0;const N=()=>{Math.floor(q*10)%5===0&&k(o),P.setClearColor(this._backgroundColor,this._backgroundAlpha),L.forEach(r=>{const y=[...this._colors.map(d=>({is_active:d.enabled,color:new n.Color(d.color),influence:d.influence})),...Array.from({length:p-this._colors.length}).map(()=>({is_active:!1,color:new n.Color(0)}))];q+=j.getDelta()*this._speed,r.material.uniforms.u_time.value=q,r.material.uniforms.u_resolution={value:new n.Vector2(M,E)},r.material.uniforms.u_color_pressure={value:new n.Vector2(this._horizontalPressure,this._verticalPressure)},r.material.uniforms.u_wave_frequency_x={value:this._waveFrequencyX},r.material.uniforms.u_wave_frequency_y={value:this._waveFrequencyY},r.material.uniforms.u_wave_amplitude={value:this._waveAmplitude},r.material.uniforms.u_plane_width={value:x},r.material.uniforms.u_plane_height={value:g},r.material.uniforms.u_color_blending={value:this._colorBlending},r.material.uniforms.u_colors={value:y},r.material.uniforms.u_colors_count={value:p},r.material.uniforms.u_shadows={value:this._shadows},r.material.uniforms.u_highlights={value:this._highlights},r.material.uniforms.u_saturation={value:this._saturation},r.material.wireframe=this._wireframe}),P.render(H,G),this.requestRef=requestAnimationFrame(N)},W=()=>{const r=P.domElement,y=r.clientWidth,d=r.clientHeight;this.sceneState.renderer.setSize(y,d,!1),C(this.sceneState.camera,y,d)};this.sizeObserver=new ResizeObserver(r=>{W()}),this.sizeObserver.observe(o),N()}destroy(){this&&(cancelAnimationFrame(this.requestRef),this.sizeObserver.disconnect())}set speed(e){this._speed=e/20}set horizontalPressure(e){this._horizontalPressure=e/4}set verticalPressure(e){this._verticalPressure=e/4}set waveFrequencyX(e){this._waveFrequencyX=e*.04}set waveFrequencyY(e){this._waveFrequencyY=e*.04}set waveAmplitude(e){this._waveAmplitude=e*.75}set colors(e){this._colors=e}set highlights(e){this._highlights=e/100}set shadows(e){this._shadows=e/100}set saturation(e){this._saturation=e/10}set colorBlending(e){this._colorBlending=e/10}set wireframe(e){this._wireframe=e}set backgroundColor(e){this._backgroundColor=e}set backgroundAlpha(e){this._backgroundAlpha=e}_initScene(e,o,i,u){const s=new n.WebGLRenderer({alpha:!0,canvas:e});s.setClearColor(16711680,.5),s.setSize(o,i,!1);const a=[],v=new n.Scene,h=this._buildMaterial(o,i),f=new n.PlaneGeometry(x,g,240*u,240*u),c=new n.Mesh(f,h);c.rotation.x=-Math.PI/3.5,c.position.z=-1,a.push(c),v.add(c);const _=new n.OrthographicCamera(0,0,0,0,0,0);return C(_,o,i),{renderer:s,camera:_,scene:v,meshes:a}}_buildMaterial(e,o){const i=[...this._colors.map(a=>({is_active:a.enabled,color:new n.Color(a.color),influence:a.influence})),...Array.from({length:p-this._colors.length}).map(()=>({is_active:!1,color:new n.Color(0)}))],u={u_time:{value:0},u_color_pressure:{value:new n.Vector2(this._horizontalPressure,this._verticalPressure)},u_wave_frequency_x:{value:this._waveFrequencyX},u_wave_frequency_y:{value:this._waveFrequencyY},u_wave_amplitude:{value:this._waveAmplitude},u_resolution:{value:new n.Vector2(e,o)},u_colors:{value:i},u_colors_count:{value:this._colors.length},u_plane_width:{value:x},u_plane_height:{value:g},u_shadows:{value:this._shadows},u_highlights:{value:this._highlights}},s=new n.ShaderMaterial({uniforms:u,vertexShader:F()+V()+S()+I(),fragmentShader:F()+S()+K()});return s.wireframe=T,s}}function C(t,e,o){const s=e*o/1e6*x*g/1.5,a=e/o,v=Math.sqrt(s*a),h=s/v,f=-x/2,c=Math.min((f+v)/1.5,x/2),_=g/4,w=Math.max((_-h)/2,-g/4),z=-100,b=1e3;t.left=f,t.right=c,t.top=_,t.bottom=w,t.near=z,t.far=b,t.updateProjectionMatrix()}function I(){return`
1
+ (function(l,h){typeof exports=="object"&&typeof module<"u"?h(exports,require("three")):typeof define=="function"&&define.amd?define(["exports","three"],h):(l=typeof globalThis<"u"?globalThis:l||self,h(l.FireCMS={},l.THREE))})(this,function(l,h){"use strict";function O(t){if(t&&t.__esModule)return t;const e=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(t){for(const o in t)if(o!=="default"){const i=Object.getOwnPropertyDescriptor(t,o);Object.defineProperty(e,o,i.get?i:{enumerable:!0,get:()=>t[o]})}}return e.default=t,Object.freeze(e)}const s=O(h),g=50,x=80,T=!0,p=5,j=new s.Clock;class R{_speed=-1;_horizontalPressure=-1;_verticalPressure=-1;_waveFrequencyX=-1;_waveFrequencyY=-1;_waveAmplitude=-1;_shadows=-1;_highlights=-1;_saturation=-1;_brightness=-1;_colorBlending=-1;_colors=[];_wireframe=!1;_backgroundColor="#FFFFFF";_backgroundAlpha=1;requestRef=-1;sizeObserver;sceneState;constructor(e){const{ref:o,speed:i=4,horizontalPressure:u=3,verticalPressure:n=3,waveFrequencyX:a=5,waveFrequencyY:v=5,waveAmplitude:m=3,colors:f,highlights:c=4,shadows:_=4,colorSaturation:w=0,colorBrightness:z=1,colorBlending:b=5,wireframe:k=!1,backgroundColor:D="#FFFFFF",backgroundAlpha:Y=1,resolution:G=1}=e,M=o.width,E=o.height;this.destroy=this.destroy.bind(this),this._initScene=this._initScene.bind(this),this._buildMaterial=this._buildMaterial.bind(this),this.speed=i,this.horizontalPressure=u,this.verticalPressure=n,this.waveFrequencyX=a,this.waveFrequencyY=v,this.waveAmplitude=m,this.colorBlending=b,this.colors=f,this.shadows=_,this.highlights=c,this.colorSaturation=w,this.colorBrightness=z,this.wireframe=k,this.backgroundColor=D,this.backgroundAlpha=Y,this.sceneState=this._initScene(o,M,E,G);const{renderer:P,camera:H,scene:L,meshes:W}=this.sceneState;let q=0;const N=()=>{Math.floor(q*10)%5===0&&V(o),P.setClearColor(this._backgroundColor,this._backgroundAlpha),W.forEach(r=>{const y=[...this._colors.map(d=>({is_active:d.enabled,color:new s.Color(d.color),influence:d.influence})),...Array.from({length:p-this._colors.length}).map(()=>({is_active:!1,color:new s.Color(0)}))];q+=j.getDelta()*this._speed,r.material.uniforms.u_time.value=q,r.material.uniforms.u_resolution={value:new s.Vector2(M,E)},r.material.uniforms.u_color_pressure={value:new s.Vector2(this._horizontalPressure,this._verticalPressure)},r.material.uniforms.u_wave_frequency_x={value:this._waveFrequencyX},r.material.uniforms.u_wave_frequency_y={value:this._waveFrequencyY},r.material.uniforms.u_wave_amplitude={value:this._waveAmplitude},r.material.uniforms.u_plane_width={value:g},r.material.uniforms.u_plane_height={value:x},r.material.uniforms.u_color_blending={value:this._colorBlending},r.material.uniforms.u_colors={value:y},r.material.uniforms.u_colors_count={value:p},r.material.uniforms.u_shadows={value:this._shadows},r.material.uniforms.u_highlights={value:this._highlights},r.material.uniforms.u_saturation={value:this._saturation},r.material.uniforms.u_brightness={value:this._brightness},r.material.wireframe=this._wireframe}),P.render(L,H),this.requestRef=requestAnimationFrame(N)},U=()=>{const r=P.domElement,y=r.clientWidth,d=r.clientHeight;this.sceneState.renderer.setSize(y,d,!1),C(this.sceneState.camera,y,d)};this.sizeObserver=new ResizeObserver(r=>{U()}),this.sizeObserver.observe(o),N()}destroy(){this&&(cancelAnimationFrame(this.requestRef),this.sizeObserver.disconnect())}set speed(e){this._speed=e/20}set horizontalPressure(e){this._horizontalPressure=e/4}set verticalPressure(e){this._verticalPressure=e/4}set waveFrequencyX(e){this._waveFrequencyX=e*.04}set waveFrequencyY(e){this._waveFrequencyY=e*.04}set waveAmplitude(e){this._waveAmplitude=e*.75}set colors(e){this._colors=e}set highlights(e){this._highlights=e/100}set shadows(e){this._shadows=e/100}set colorSaturation(e){this._saturation=e/10}set colorBrightness(e){console.log("colorBrightness",e),this._brightness=e}set colorBlending(e){this._colorBlending=e/10}set wireframe(e){this._wireframe=e}set backgroundColor(e){this._backgroundColor=e}set backgroundAlpha(e){this._backgroundAlpha=e}_initScene(e,o,i,u){const n=new s.WebGLRenderer({alpha:!0,canvas:e});n.setClearColor(16711680,.5),n.setSize(o,i,!1);const a=[],v=new s.Scene,m=this._buildMaterial(o,i),f=new s.PlaneGeometry(g,x,240*u,240*u),c=new s.Mesh(f,m);c.rotation.x=-Math.PI/3.5,c.position.z=-1,a.push(c),v.add(c);const _=new s.OrthographicCamera(0,0,0,0,0,0);return C(_,o,i),{renderer:n,camera:_,scene:v,meshes:a}}_buildMaterial(e,o){const i=[...this._colors.map(a=>({is_active:a.enabled,color:new s.Color(a.color),influence:a.influence})),...Array.from({length:p-this._colors.length}).map(()=>({is_active:!1,color:new s.Color(0)}))],u={u_time:{value:0},u_color_pressure:{value:new s.Vector2(this._horizontalPressure,this._verticalPressure)},u_wave_frequency_x:{value:this._waveFrequencyX},u_wave_frequency_y:{value:this._waveFrequencyY},u_wave_amplitude:{value:this._waveAmplitude},u_resolution:{value:new s.Vector2(e,o)},u_colors:{value:i},u_colors_count:{value:this._colors.length},u_plane_width:{value:g},u_plane_height:{value:x},u_shadows:{value:this._shadows},u_highlights:{value:this._highlights}},n=new s.ShaderMaterial({uniforms:u,vertexShader:F()+K()+S()+B(),fragmentShader:F()+S()+I()});return n.wireframe=T,n}}function C(t,e,o){const n=e*o/1e6*g*x/1.5,a=e/o,v=Math.sqrt(n*a),m=n/v,f=-g/2,c=Math.min((f+v)/1.5,g/2),_=x/4,w=Math.max((_-m)/2,-x/4),z=-100,b=1e3;t.left=f,t.right=c,t.top=_,t.bottom=w,t.near=z,t.far=b,t.updateProjectionMatrix()}function B(){return`
2
2
 
3
3
  void main() {
4
4
 
@@ -49,7 +49,7 @@ void main() {
49
49
 
50
50
  v_new_position = gl_Position;
51
51
  }
52
- `}function K(){return`
52
+ `}function I(){return`
53
53
 
54
54
  void main(){
55
55
  vec3 color = v_color;
@@ -57,6 +57,7 @@ void main(){
57
57
  color.rgb += pow(v_displacement_amount, 1.0) * u_highlights;
58
58
  color.rgb -= pow(1.0 - v_displacement_amount, 2.0) * u_shadows;
59
59
  color = saturation(color, 1.0 + u_saturation);
60
+ color = color * u_brightness;
60
61
 
61
62
  gl_FragColor = vec4(color,1.0);
62
63
  }
@@ -83,6 +84,7 @@ uniform float u_plane_height;
83
84
  uniform float u_shadows;
84
85
  uniform float u_highlights;
85
86
  uniform float u_saturation;
87
+ uniform float u_brightness;
86
88
 
87
89
  uniform float u_color_blending;
88
90
 
@@ -95,7 +97,7 @@ varying vec4 v_new_position;
95
97
  varying vec3 v_color;
96
98
  varying float v_displacement_amount;
97
99
 
98
- `,V=()=>`
100
+ `,K=()=>`
99
101
 
100
102
  vec3 mod289(vec3 x)
101
103
  {
@@ -319,5 +321,5 @@ vec3 hsv2rgb(vec3 c)
319
321
  vec3 p = abs(fract(c.xxx + K.xyz) * 6.0 - K.www);
320
322
  return c.z * mix(K.xxx, clamp(p - K.xxx, 0.0, 1.0), c.y);
321
323
  }
322
- `,A=t=>{t.id="neat-link",t.href="https://neat.firecms.co",t.target="_blank",t.style.position="absolute",t.style.display="block",t.style.opacity="1",t.style.bottom="0",t.style.right="0",t.style.padding="10px",t.style.color="#dcdcdc",t.style.fontFamily="sans-serif",t.style.fontSize="16px",t.style.fontWeight="bold",t.style.textDecoration="none",t.style.zIndex="100",t.innerHTML="NEAT"},k=t=>{const e=t.parentElement?.getElementsByTagName("a");if(e){for(let i=0;i<e.length;i++)if(e[i].id==="neat-link"){A(e[i]);return}}const o=document.createElement("a");A(o),t.parentElement?.appendChild(o)};l.NeatGradient=R,Object.defineProperties(l,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})});
324
+ `,A=t=>{t.id="neat-link",t.href="https://neat.firecms.co",t.target="_blank",t.style.position="absolute",t.style.display="block",t.style.opacity="1",t.style.bottom="0",t.style.right="0",t.style.padding="10px",t.style.color="#dcdcdc",t.style.fontFamily="sans-serif",t.style.fontSize="16px",t.style.fontWeight="bold",t.style.textDecoration="none",t.style.zIndex="100",t.innerHTML="NEAT"},V=t=>{const e=t.parentElement?.getElementsByTagName("a");if(e){for(let i=0;i<e.length;i++)if(e[i].id==="neat-link"){A(e[i]);return}}const o=document.createElement("a");A(o),t.parentElement?.appendChild(o)};l.NeatGradient=R,Object.defineProperties(l,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})});
323
325
  //# sourceMappingURL=index.umd.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.umd.js","sources":["../src/NeatGradient.ts"],"sourcesContent":["import * as THREE from \"three\";\n\nconst PLANE_WIDTH = 50;\nconst PLANE_HEIGHT = 80;\n\nconst WIREFRAME = true;\nconst COLORS_COUNT = 5;\n\nconst clock = new THREE.Clock();\n\ntype SceneState = {\n renderer: THREE.WebGLRenderer,\n camera: THREE.OrthographicCamera,\n scene: THREE.Scene,\n meshes: THREE.Mesh[],\n}\n\nexport type NeatConfig = {\n speed?: number;\n horizontalPressure?: number;\n verticalPressure?: number;\n waveFrequencyX?: number;\n waveFrequencyY?: number;\n waveAmplitude?: number;\n highlights?: number;\n shadows?: number;\n saturation?: number;\n colors: NeatColor[];\n colorBlending?: number;\n wireframe?: boolean;\n backgroundColor?: string;\n backgroundAlpha?: number;\n};\n\nexport type NeatColor = {\n color: string;\n enabled: boolean;\n /**\n * Value from 0 to 1\n */\n influence?: number;\n}\n\nexport type NeatController = {\n destroy: () => void;\n}\n\nexport class NeatGradient implements NeatController {\n\n private _speed: number = -1;\n\n private _horizontalPressure: number = -1;\n private _verticalPressure: number = -1;\n\n private _waveFrequencyX: number = -1;\n private _waveFrequencyY: number = -1;\n private _waveAmplitude: number = -1;\n\n private _shadows: number = -1;\n private _highlights: number = -1;\n private _saturation: number = -1;\n\n private _colorBlending: number = -1;\n\n private _colors: NeatColor[] = [];\n private _wireframe: boolean = false;\n\n private _backgroundColor: string = \"#FFFFFF\";\n private _backgroundAlpha: number = 1.0;\n\n private requestRef: number = -1;\n private sizeObserver: ResizeObserver;\n private readonly sceneState: SceneState;\n\n constructor(config: NeatConfig & { ref: HTMLCanvasElement, resolution?: number }) {\n\n const {\n ref,\n speed = 4,\n horizontalPressure = 3,\n verticalPressure = 3,\n waveFrequencyX = 5,\n waveFrequencyY = 5,\n waveAmplitude = 3,\n colors,\n highlights = 4,\n shadows = 4,\n saturation = 0,\n colorBlending = 5,\n wireframe = false,\n backgroundColor = \"#FFFFFF\",\n backgroundAlpha = 1.0,\n resolution = 1\n } = config;\n\n const width = ref.width,\n height = ref.height;\n\n this.destroy = this.destroy.bind(this);\n this._initScene = this._initScene.bind(this);\n this._buildMaterial = this._buildMaterial.bind(this);\n\n this.speed = speed;\n this.horizontalPressure = horizontalPressure;\n this.verticalPressure = verticalPressure;\n this.waveFrequencyX = waveFrequencyX;\n this.waveFrequencyY = waveFrequencyY;\n this.waveAmplitude = waveAmplitude;\n this.colorBlending = colorBlending;\n this.colors = colors;\n this.shadows = shadows;\n this.highlights = highlights;\n this.saturation = saturation;\n this.wireframe = wireframe;\n this.backgroundColor = backgroundColor;\n this.backgroundAlpha = backgroundAlpha;\n\n this.sceneState = this._initScene(ref, width, height, resolution);\n\n const { renderer, camera, scene, meshes } = this.sceneState;\n\n let tick = 0;\n const render = () => {\n\n if (Math.floor(tick * 10) % 5 === 0) {\n addNeatLink(ref);\n }\n\n renderer.setClearColor(this._backgroundColor, this._backgroundAlpha);\n meshes.forEach((mesh) => {\n\n const colors = [\n ...this._colors.map(color => ({\n is_active: color.enabled,\n color: new THREE.Color(color.color),\n influence: color.influence\n })),\n ...Array.from({ length: COLORS_COUNT - this._colors.length }).map(() => ({\n is_active: false,\n color: new THREE.Color(0x000000)\n }))\n ];\n\n tick += clock.getDelta() * this._speed;\n // @ts-ignore\n mesh.material.uniforms.u_time.value = tick;\n // @ts-ignore\n mesh.material.uniforms.u_resolution = { value: new THREE.Vector2(width, height) };\n // @ts-ignore\n mesh.material.uniforms.u_color_pressure = { value: new THREE.Vector2(this._horizontalPressure, this._verticalPressure) };\n // @ts-ignore\n mesh.material.uniforms.u_wave_frequency_x = { value: this._waveFrequencyX };\n // @ts-ignore\n mesh.material.uniforms.u_wave_frequency_y = { value: this._waveFrequencyY };\n // @ts-ignore\n mesh.material.uniforms.u_wave_amplitude = { value: this._waveAmplitude };\n // @ts-ignore\n mesh.material.uniforms.u_plane_width = { value: PLANE_WIDTH };\n // @ts-ignore\n mesh.material.uniforms.u_plane_height = { value: PLANE_HEIGHT };\n // @ts-ignore\n mesh.material.uniforms.u_color_blending = { value: this._colorBlending };\n // @ts-ignore\n mesh.material.uniforms.u_colors = { value: colors };\n // @ts-ignore\n mesh.material.uniforms.u_colors_count = { value: COLORS_COUNT };\n // @ts-ignore\n mesh.material.uniforms.u_shadows = { value: this._shadows };\n // @ts-ignore\n mesh.material.uniforms.u_highlights = { value: this._highlights };\n // @ts-ignore\n mesh.material.uniforms.u_saturation = { value: this._saturation };\n // @ts-ignore\n mesh.material.wireframe = this._wireframe;\n });\n\n renderer.render(scene, camera);\n this.requestRef = requestAnimationFrame(render);\n };\n\n const setSize = () => {\n const canvas = renderer.domElement;\n const width = canvas.clientWidth;\n const height = canvas.clientHeight;\n\n this.sceneState.renderer.setSize(width, height, false);\n updateCamera(this.sceneState.camera, width, height);\n };\n\n this.sizeObserver = new ResizeObserver(entries => {\n setSize();\n });\n\n this.sizeObserver.observe(ref);\n\n\n render();\n }\n\n destroy() {\n if (this) {\n cancelAnimationFrame(this.requestRef);\n this.sizeObserver.disconnect();\n }\n }\n\n set speed(speed: number) {\n this._speed = speed / 20;\n }\n\n set horizontalPressure(horizontalPressure: number) {\n this._horizontalPressure = horizontalPressure / 4;\n }\n\n set verticalPressure(verticalPressure: number) {\n this._verticalPressure = verticalPressure / 4;\n }\n\n set waveFrequencyX(waveFrequencyX: number) {\n this._waveFrequencyX = waveFrequencyX * 0.04;\n }\n\n set waveFrequencyY(waveFrequencyY: number) {\n this._waveFrequencyY = waveFrequencyY * 0.04;\n }\n\n set waveAmplitude(waveAmplitude: number) {\n this._waveAmplitude = waveAmplitude * .75;\n }\n\n set colors(colors: NeatColor[]) {\n this._colors = colors;\n }\n\n set highlights(highlights: number) {\n this._highlights = highlights / 100;\n }\n\n set shadows(shadows: number) {\n this._shadows = shadows / 100;\n }\n\n set saturation(saturation: number) {\n this._saturation = saturation / 10;\n }\n\n set colorBlending(colorBlending: number) {\n this._colorBlending = colorBlending / 10;\n }\n\n set wireframe(wireframe: boolean) {\n this._wireframe = wireframe;\n }\n\n set backgroundColor(backgroundColor: string) {\n this._backgroundColor = backgroundColor;\n }\n\n set backgroundAlpha(backgroundAlpha: number) {\n this._backgroundAlpha = backgroundAlpha;\n }\n\n _initScene(ref: HTMLCanvasElement, width: number, height: number, resolution: number): SceneState {\n\n const renderer = new THREE.WebGLRenderer({\n // antialias: true,\n alpha: true,\n canvas: ref\n });\n\n renderer.setClearColor(0xFF0000, .5);\n renderer.setSize(width, height, false);\n\n const meshes: THREE.Mesh[] = [];\n\n const scene = new THREE.Scene();\n\n const material = this._buildMaterial(width, height);\n\n const geo = new THREE.PlaneGeometry(PLANE_WIDTH, PLANE_HEIGHT, 240 * resolution, 240 * resolution);\n const plane = new THREE.Mesh(geo, material);\n plane.rotation.x = -Math.PI / 3.5;\n plane.position.z = -1;\n meshes.push(plane);\n scene.add(plane);\n\n const camera = new THREE.OrthographicCamera(0.0, 0.0, 0.0, 0.0, 0.0, 0.0);\n // camera.zoom = 1;\n updateCamera(camera, width, height);\n\n return {\n renderer,\n camera,\n scene,\n meshes\n };\n }\n\n _buildMaterial(width: number, height: number) {\n\n const colors = [\n ...this._colors.map(color => ({\n is_active: color.enabled,\n color: new THREE.Color(color.color),\n influence: color.influence\n })),\n ...Array.from({ length: COLORS_COUNT - this._colors.length }).map(() => ({\n is_active: false,\n color: new THREE.Color(0x000000)\n }))\n ];\n\n const uniforms = {\n u_time: { value: 0 },\n u_color_pressure: { value: new THREE.Vector2(this._horizontalPressure, this._verticalPressure) },\n u_wave_frequency_x: { value: this._waveFrequencyX },\n u_wave_frequency_y: { value: this._waveFrequencyY },\n u_wave_amplitude: { value: this._waveAmplitude },\n u_resolution: { value: new THREE.Vector2(width, height) },\n u_colors: { value: colors },\n u_colors_count: { value: this._colors.length },\n u_plane_width: { value: PLANE_WIDTH },\n u_plane_height: { value: PLANE_HEIGHT },\n u_shadows: { value: this._shadows },\n u_highlights: { value: this._highlights },\n };\n\n const material = new THREE.ShaderMaterial({\n uniforms: uniforms,\n vertexShader: buildUniforms() + buildNoise() + buildColorFunctions() + buildVertexShader(),\n fragmentShader: buildUniforms() + buildColorFunctions() + buildFragmentShader()\n });\n\n material.wireframe = WIREFRAME;\n return material;\n }\n\n\n}\n\nfunction updateCamera(camera: THREE.OrthographicCamera, width: number, height: number) {\n\n const viewPortAreaRatio = 1000000;\n const areaViewPort = width * height;\n const targetPlaneArea =\n areaViewPort / viewPortAreaRatio *\n PLANE_WIDTH * PLANE_HEIGHT / 1.5;\n\n const ratio = width / height;\n\n const targetWidth = Math.sqrt(targetPlaneArea * ratio);\n const targetHeight = targetPlaneArea / targetWidth;\n\n const left = -PLANE_WIDTH / 2;\n const right = Math.min((left + targetWidth) / 1.5, PLANE_WIDTH / 2);\n\n const top = PLANE_HEIGHT / 4;\n const bottom = Math.max((top - targetHeight) / 2, -PLANE_HEIGHT / 4);\n\n const near = -100;\n const far = 1000;\n camera.left = left;\n camera.right = right;\n camera.top = top;\n camera.bottom = bottom;\n camera.near = near;\n camera.far = far;\n camera.updateProjectionMatrix();\n}\n\n\nfunction buildVertexShader() {\n return `\n\nvoid main() {\n\n vUv = uv;\n\n v_displacement_amount = cnoise( vec3(\n u_wave_frequency_x * position.x + u_time,\n u_wave_frequency_y * position.y + u_time,\n u_time\n ));\n \n vec3 color;\n\n // float t = mod(u_base_color, 100.0);\n color = u_colors[0].color;\n \n vec2 noise_cord = vUv * u_color_pressure;\n \n const float minNoise = .0;\n const float maxNoise = .9;\n \n for (int i = 1; i < u_colors_count; i++) {\n \n if(u_colors[i].is_active == 1.0){\n float noiseFlow = (1. + float(i)) / 30.;\n float noiseSpeed = (1. + float(i)) * 0.11;\n float noiseSeed = 13. + float(i) * 7.;\n \n float noise = snoise(\n vec3(\n noise_cord.x * u_color_pressure.x + u_time * noiseFlow * 2.,\n noise_cord.y * u_color_pressure.y,\n u_time * noiseSpeed\n ) + noiseSeed\n );\n \n noise = clamp(minNoise, maxNoise + float(i) * 0.02, noise);\n vec3 nextColor = u_colors[i].color;\n color = mix(color, nextColor, smoothstep(0.0, u_color_blending, noise));\n }\n \n }\n \n v_color = color;\n \n vec3 newPosition = position + normal * v_displacement_amount * u_wave_amplitude;\n gl_Position = projectionMatrix * modelViewMatrix * vec4( newPosition, 1.0 );\n \n v_new_position = gl_Position;\n}\n`;\n}\n\nfunction buildFragmentShader() {\n return `\n\nvoid main(){\n vec3 color = v_color;\n \n color.rgb += pow(v_displacement_amount, 1.0) * u_highlights;\n color.rgb -= pow(1.0 - v_displacement_amount, 2.0) * u_shadows;\n color = saturation(color, 1.0 + u_saturation);\n \n gl_FragColor = vec4(color,1.0);\n}\n`;\n}\n\nconst buildUniforms = () => `\nprecision highp float;\n\nstruct Color {\n float is_active;\n vec3 color;\n float value;\n};\n\nuniform float u_time;\n\nuniform float u_wave_amplitude;\nuniform float u_wave_frequency_x;\nuniform float u_wave_frequency_y;\n\nuniform vec2 u_color_pressure;\n\nuniform float u_plane_width;\nuniform float u_plane_height;\n\nuniform float u_shadows;\nuniform float u_highlights;\nuniform float u_saturation;\n\nuniform float u_color_blending;\n\nuniform int u_colors_count;\nuniform Color u_colors[5];\nuniform vec2 u_resolution;\n\nvarying vec2 vUv;\nvarying vec4 v_new_position;\nvarying vec3 v_color;\nvarying float v_displacement_amount;\n\n `;\n\nconst buildNoise = () => `\n\nvec3 mod289(vec3 x)\n{\n return x - floor(x * (1.0 / 289.0)) * 289.0;\n}\n\nvec4 mod289(vec4 x)\n{\n return x - floor(x * (1.0 / 289.0)) * 289.0;\n}\n\nvec4 permute(vec4 x)\n{\n return mod289(((x*34.0)+1.0)*x);\n}\n\nvec4 taylorInvSqrt(vec4 r)\n{\n return 1.79284291400159 - 0.85373472095314 * r;\n}\n\nvec3 fade(vec3 t) {\n return t*t*t*(t*(t*6.0-15.0)+10.0);\n}\n\nfloat snoise(vec3 v)\n{\n const vec2 C = vec2(1.0/6.0, 1.0/3.0) ;\n const vec4 D = vec4(0.0, 0.5, 1.0, 2.0);\n\n// First corner\n vec3 i = floor(v + dot(v, C.yyy) );\n vec3 x0 = v - i + dot(i, C.xxx) ;\n\n// Other corners\n vec3 g = step(x0.yzx, x0.xyz);\n vec3 l = 1.0 - g;\n vec3 i1 = min( g.xyz, l.zxy );\n vec3 i2 = max( g.xyz, l.zxy );\n\n // x0 = x0 - 0.0 + 0.0 * C.xxx;\n // x1 = x0 - i1 + 1.0 * C.xxx;\n // x2 = x0 - i2 + 2.0 * C.xxx;\n // x3 = x0 - 1.0 + 3.0 * C.xxx;\n vec3 x1 = x0 - i1 + C.xxx;\n vec3 x2 = x0 - i2 + C.yyy; // 2.0*C.x = 1/3 = C.y\n vec3 x3 = x0 - D.yyy; // -1.0+3.0*C.x = -0.5 = -D.y\n\n// Permutations\n i = mod289(i);\n vec4 p = permute( permute( permute(\n i.z + vec4(0.0, i1.z, i2.z, 1.0 ))\n + i.y + vec4(0.0, i1.y, i2.y, 1.0 ))\n + i.x + vec4(0.0, i1.x, i2.x, 1.0 ));\n\n// Gradients: 7x7 points over a square, mapped onto an octahedron.\n// The ring size 17*17 = 289 is close to a multiple of 49 (49*6 = 294)\n float n_ = 0.142857142857; // 1.0/7.0\n vec3 ns = n_ * D.wyz - D.xzx;\n\n vec4 j = p - 49.0 * floor(p * ns.z * ns.z); // mod(p,7*7)\n\n vec4 x_ = floor(j * ns.z);\n vec4 y_ = floor(j - 7.0 * x_ ); // mod(j,N)\n\n vec4 x = x_ *ns.x + ns.yyyy;\n vec4 y = y_ *ns.x + ns.yyyy;\n vec4 h = 1.0 - abs(x) - abs(y);\n\n vec4 b0 = vec4( x.xy, y.xy );\n vec4 b1 = vec4( x.zw, y.zw );\n\n //vec4 s0 = vec4(lessThan(b0,0.0))*2.0 - 1.0;\n //vec4 s1 = vec4(lessThan(b1,0.0))*2.0 - 1.0;\n vec4 s0 = floor(b0)*2.0 + 1.0;\n vec4 s1 = floor(b1)*2.0 + 1.0;\n vec4 sh = -step(h, vec4(0.0));\n\n vec4 a0 = b0.xzyw + s0.xzyw*sh.xxyy ;\n vec4 a1 = b1.xzyw + s1.xzyw*sh.zzww ;\n\n vec3 p0 = vec3(a0.xy,h.x);\n vec3 p1 = vec3(a0.zw,h.y);\n vec3 p2 = vec3(a1.xy,h.z);\n vec3 p3 = vec3(a1.zw,h.w);\n\n//Normalise gradients\n vec4 norm = taylorInvSqrt(vec4(dot(p0,p0), dot(p1,p1), dot(p2, p2), dot(p3,p3)));\n p0 *= norm.x;\n p1 *= norm.y;\n p2 *= norm.z;\n p3 *= norm.w;\n\n// Mix final noise value\n vec4 m = max(0.6 - vec4(dot(x0,x0), dot(x1,x1), dot(x2,x2), dot(x3,x3)), 0.0);\n m = m * m;\n return 42.0 * dot( m*m, vec4( dot(p0,x0), dot(p1,x1),\n dot(p2,x2), dot(p3,x3) ) );\n}\n\n// Classic Perlin noise\nfloat cnoise(vec3 P)\n{\n vec3 Pi0 = floor(P); // Integer part for indexing\n vec3 Pi1 = Pi0 + vec3(1.0); // Integer part + 1\n Pi0 = mod289(Pi0);\n Pi1 = mod289(Pi1);\n vec3 Pf0 = fract(P); // Fractional part for interpolation\n vec3 Pf1 = Pf0 - vec3(1.0); // Fractional part - 1.0\n vec4 ix = vec4(Pi0.x, Pi1.x, Pi0.x, Pi1.x);\n vec4 iy = vec4(Pi0.yy, Pi1.yy);\n vec4 iz0 = Pi0.zzzz;\n vec4 iz1 = Pi1.zzzz;\n\n vec4 ixy = permute(permute(ix) + iy);\n vec4 ixy0 = permute(ixy + iz0);\n vec4 ixy1 = permute(ixy + iz1);\n\n vec4 gx0 = ixy0 * (1.0 / 7.0);\n vec4 gy0 = fract(floor(gx0) * (1.0 / 7.0)) - 0.5;\n gx0 = fract(gx0);\n vec4 gz0 = vec4(0.5) - abs(gx0) - abs(gy0);\n vec4 sz0 = step(gz0, vec4(0.0));\n gx0 -= sz0 * (step(0.0, gx0) - 0.5);\n gy0 -= sz0 * (step(0.0, gy0) - 0.5);\n\n vec4 gx1 = ixy1 * (1.0 / 7.0);\n vec4 gy1 = fract(floor(gx1) * (1.0 / 7.0)) - 0.5;\n gx1 = fract(gx1);\n vec4 gz1 = vec4(0.5) - abs(gx1) - abs(gy1);\n vec4 sz1 = step(gz1, vec4(0.0));\n gx1 -= sz1 * (step(0.0, gx1) - 0.5);\n gy1 -= sz1 * (step(0.0, gy1) - 0.5);\n\n vec3 g000 = vec3(gx0.x,gy0.x,gz0.x);\n vec3 g100 = vec3(gx0.y,gy0.y,gz0.y);\n vec3 g010 = vec3(gx0.z,gy0.z,gz0.z);\n vec3 g110 = vec3(gx0.w,gy0.w,gz0.w);\n vec3 g001 = vec3(gx1.x,gy1.x,gz1.x);\n vec3 g101 = vec3(gx1.y,gy1.y,gz1.y);\n vec3 g011 = vec3(gx1.z,gy1.z,gz1.z);\n vec3 g111 = vec3(gx1.w,gy1.w,gz1.w);\n\n vec4 norm0 = taylorInvSqrt(vec4(dot(g000, g000), dot(g010, g010), dot(g100, g100), dot(g110, g110)));\n g000 *= norm0.x;\n g010 *= norm0.y;\n g100 *= norm0.z;\n g110 *= norm0.w;\n vec4 norm1 = taylorInvSqrt(vec4(dot(g001, g001), dot(g011, g011), dot(g101, g101), dot(g111, g111)));\n g001 *= norm1.x;\n g011 *= norm1.y;\n g101 *= norm1.z;\n g111 *= norm1.w;\n\n float n000 = dot(g000, Pf0);\n float n100 = dot(g100, vec3(Pf1.x, Pf0.yz));\n float n010 = dot(g010, vec3(Pf0.x, Pf1.y, Pf0.z));\n float n110 = dot(g110, vec3(Pf1.xy, Pf0.z));\n float n001 = dot(g001, vec3(Pf0.xy, Pf1.z));\n float n101 = dot(g101, vec3(Pf1.x, Pf0.y, Pf1.z));\n float n011 = dot(g011, vec3(Pf0.x, Pf1.yz));\n float n111 = dot(g111, Pf1);\n\n vec3 fade_xyz = fade(Pf0);\n vec4 n_z = mix(vec4(n000, n100, n010, n110), vec4(n001, n101, n011, n111), fade_xyz.z);\n vec2 n_yz = mix(n_z.xy, n_z.zw, fade_xyz.y);\n float n_xyz = mix(n_yz.x, n_yz.y, fade_xyz.x);\n return 2.2 * n_xyz;\n}\n\n// YUV to RGB matrix\nmat3 yuv2rgb = mat3(1.0, 0.0, 1.13983,\n 1.0, -0.39465, -0.58060,\n 1.0, 2.03211, 0.0);\n\n// RGB to YUV matrix\nmat3 rgb2yuv = mat3(0.2126, 0.7152, 0.0722,\n -0.09991, -0.33609, 0.43600,\n 0.615, -0.5586, -0.05639);\n\n `;\n\nconst buildColorFunctions = () => `\n\nvec3 saturation(vec3 rgb, float adjustment) {\n const vec3 W = vec3(0.2125, 0.7154, 0.0721);\n vec3 intensity = vec3(dot(rgb, W));\n return mix(intensity, rgb, adjustment);\n}\n\nfloat saturation(vec3 rgb)\n{\n vec4 K = vec4(0.0, -1.0 / 3.0, 2.0 / 3.0, -1.0);\n vec4 p = mix(vec4(rgb.bg, K.wz), vec4(rgb.gb, K.xy), step(rgb.b, rgb.g));\n vec4 q = mix(vec4(p.xyw, rgb.r), vec4(rgb.r, p.yzx), step(p.x, rgb.r));\n\n float d = q.x - min(q.w, q.y);\n float e = 1.0e-10;\n return abs(6.0 * d + e);\n}\n\n// get saturation of a color in values between 0 and 1\nfloat getSaturation(vec3 color) {\n float max = max(color.r, max(color.g, color.b));\n float min = min(color.r, min(color.g, color.b));\n return (max - min) / max;\n}\n \nvec3 rgb2hsv(vec3 c)\n{\n vec4 K = vec4(0.0, -1.0 / 3.0, 2.0 / 3.0, -1.0);\n vec4 p = mix(vec4(c.bg, K.wz), vec4(c.gb, K.xy), step(c.b, c.g));\n vec4 q = mix(vec4(p.xyw, c.r), vec4(c.r, p.yzx), step(p.x, c.r));\n\n float d = q.x - min(q.w, q.y);\n float e = 1.0e-10;\n return vec3(abs(q.z + (q.w - q.y) / (6.0 * d + e)), d / (q.x + e), q.x);\n}\n\nvec3 hsv2rgb(vec3 c)\n{\n vec4 K = vec4(1.0, 2.0 / 3.0, 1.0 / 3.0, 3.0);\n vec3 p = abs(fract(c.xxx + K.xyz) * 6.0 - K.www);\n return c.z * mix(K.xxx, clamp(p - K.xxx, 0.0, 1.0), c.y);\n}\n`;\n\n\nconst setLinkStyles = (link: HTMLAnchorElement) => {\n link.id = \"neat-link\";\n link.href = \"https://neat.firecms.co\";\n link.target = \"_blank\";\n link.style.position = \"absolute\";\n link.style.display = \"block\";\n link.style.opacity = \"1\";\n link.style.bottom = \"0\";\n link.style.right = \"0\";\n link.style.padding = \"10px\";\n link.style.color = \"#dcdcdc\";\n link.style.fontFamily = \"sans-serif\";\n link.style.fontSize = \"16px\";\n link.style.fontWeight = \"bold\";\n link.style.textDecoration = \"none\";\n link.style.zIndex = \"100\";\n link.innerHTML = \"NEAT\";\n}\n\nconst addNeatLink = (ref: HTMLCanvasElement) => {\n const existingLinks = ref.parentElement?.getElementsByTagName(\"a\");\n if (existingLinks) {\n for (let i = 0; i < existingLinks.length; i++) {\n if (existingLinks[i].id === \"neat-link\") {\n setLinkStyles(existingLinks[i]);\n return;\n }\n }\n }\n const link = document.createElement(\"a\");\n setLinkStyles(link);\n ref.parentElement?.appendChild(link);\n}\n"],"names":["PLANE_WIDTH","PLANE_HEIGHT","WIREFRAME","COLORS_COUNT","clock","THREE","NeatGradient","config","ref","speed","horizontalPressure","verticalPressure","waveFrequencyX","waveFrequencyY","waveAmplitude","colors","highlights","shadows","saturation","colorBlending","wireframe","backgroundColor","backgroundAlpha","resolution","width","height","renderer","camera","scene","meshes","tick","render","addNeatLink","mesh","color","setSize","canvas","updateCamera","entries","material","geo","plane","uniforms","buildUniforms","buildNoise","buildColorFunctions","buildVertexShader","buildFragmentShader","targetPlaneArea","ratio","targetWidth","targetHeight","left","right","top","bottom","near","far","setLinkStyles","link","existingLinks"],"mappings":"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"}
1
+ {"version":3,"file":"index.umd.js","sources":["../src/NeatGradient.ts"],"sourcesContent":["import * as THREE from \"three\";\n\nconst PLANE_WIDTH = 50;\nconst PLANE_HEIGHT = 80;\n\nconst WIREFRAME = true;\nconst COLORS_COUNT = 5;\n\nconst clock = new THREE.Clock();\n\ntype SceneState = {\n renderer: THREE.WebGLRenderer,\n camera: THREE.OrthographicCamera,\n scene: THREE.Scene,\n meshes: THREE.Mesh[],\n}\n\nexport type NeatConfig = {\n speed?: number;\n horizontalPressure?: number;\n verticalPressure?: number;\n waveFrequencyX?: number;\n waveFrequencyY?: number;\n waveAmplitude?: number;\n highlights?: number;\n shadows?: number;\n colorSaturation?: number;\n colorBrightness?: number;\n colors: NeatColor[];\n colorBlending?: number;\n wireframe?: boolean;\n backgroundColor?: string;\n backgroundAlpha?: number;\n};\n\nexport type NeatColor = {\n color: string;\n enabled: boolean;\n /**\n * Value from 0 to 1\n */\n influence?: number;\n}\n\nexport type NeatController = {\n destroy: () => void;\n}\n\nexport class NeatGradient implements NeatController {\n\n private _speed: number = -1;\n\n private _horizontalPressure: number = -1;\n private _verticalPressure: number = -1;\n\n private _waveFrequencyX: number = -1;\n private _waveFrequencyY: number = -1;\n private _waveAmplitude: number = -1;\n\n private _shadows: number = -1;\n private _highlights: number = -1;\n private _saturation: number = -1;\n private _brightness: number = -1;\n\n private _colorBlending: number = -1;\n\n private _colors: NeatColor[] = [];\n private _wireframe: boolean = false;\n\n private _backgroundColor: string = \"#FFFFFF\";\n private _backgroundAlpha: number = 1.0;\n\n private requestRef: number = -1;\n private sizeObserver: ResizeObserver;\n private readonly sceneState: SceneState;\n\n constructor(config: NeatConfig & { ref: HTMLCanvasElement, resolution?: number }) {\n\n const {\n ref,\n speed = 4,\n horizontalPressure = 3,\n verticalPressure = 3,\n waveFrequencyX = 5,\n waveFrequencyY = 5,\n waveAmplitude = 3,\n colors,\n highlights = 4,\n shadows = 4,\n colorSaturation = 0,\n colorBrightness = 1,\n colorBlending = 5,\n wireframe = false,\n backgroundColor = \"#FFFFFF\",\n backgroundAlpha = 1.0,\n resolution = 1\n } = config;\n\n const width = ref.width,\n height = ref.height;\n\n this.destroy = this.destroy.bind(this);\n this._initScene = this._initScene.bind(this);\n this._buildMaterial = this._buildMaterial.bind(this);\n\n this.speed = speed;\n this.horizontalPressure = horizontalPressure;\n this.verticalPressure = verticalPressure;\n this.waveFrequencyX = waveFrequencyX;\n this.waveFrequencyY = waveFrequencyY;\n this.waveAmplitude = waveAmplitude;\n this.colorBlending = colorBlending;\n this.colors = colors;\n this.shadows = shadows;\n this.highlights = highlights;\n this.colorSaturation = colorSaturation;\n this.colorBrightness = colorBrightness;\n this.wireframe = wireframe;\n this.backgroundColor = backgroundColor;\n this.backgroundAlpha = backgroundAlpha;\n\n this.sceneState = this._initScene(ref, width, height, resolution);\n\n const { renderer, camera, scene, meshes } = this.sceneState;\n\n let tick = 0;\n const render = () => {\n\n if (Math.floor(tick * 10) % 5 === 0) {\n addNeatLink(ref);\n }\n\n renderer.setClearColor(this._backgroundColor, this._backgroundAlpha);\n meshes.forEach((mesh) => {\n\n const colors = [\n ...this._colors.map(color => ({\n is_active: color.enabled,\n color: new THREE.Color(color.color),\n influence: color.influence\n })),\n ...Array.from({ length: COLORS_COUNT - this._colors.length }).map(() => ({\n is_active: false,\n color: new THREE.Color(0x000000)\n }))\n ];\n\n tick += clock.getDelta() * this._speed;\n // @ts-ignore\n mesh.material.uniforms.u_time.value = tick;\n // @ts-ignore\n mesh.material.uniforms.u_resolution = { value: new THREE.Vector2(width, height) };\n // @ts-ignore\n mesh.material.uniforms.u_color_pressure = { value: new THREE.Vector2(this._horizontalPressure, this._verticalPressure) };\n // @ts-ignore\n mesh.material.uniforms.u_wave_frequency_x = { value: this._waveFrequencyX };\n // @ts-ignore\n mesh.material.uniforms.u_wave_frequency_y = { value: this._waveFrequencyY };\n // @ts-ignore\n mesh.material.uniforms.u_wave_amplitude = { value: this._waveAmplitude };\n // @ts-ignore\n mesh.material.uniforms.u_plane_width = { value: PLANE_WIDTH };\n // @ts-ignore\n mesh.material.uniforms.u_plane_height = { value: PLANE_HEIGHT };\n // @ts-ignore\n mesh.material.uniforms.u_color_blending = { value: this._colorBlending };\n // @ts-ignore\n mesh.material.uniforms.u_colors = { value: colors };\n // @ts-ignore\n mesh.material.uniforms.u_colors_count = { value: COLORS_COUNT };\n // @ts-ignore\n mesh.material.uniforms.u_shadows = { value: this._shadows };\n // @ts-ignore\n mesh.material.uniforms.u_highlights = { value: this._highlights };\n // @ts-ignore\n mesh.material.uniforms.u_saturation = { value: this._saturation };\n // @ts-ignore\n mesh.material.uniforms.u_brightness = { value: this._brightness };\n // @ts-ignore\n mesh.material.wireframe = this._wireframe;\n });\n\n renderer.render(scene, camera);\n this.requestRef = requestAnimationFrame(render);\n };\n\n const setSize = () => {\n const canvas = renderer.domElement;\n const width = canvas.clientWidth;\n const height = canvas.clientHeight;\n\n this.sceneState.renderer.setSize(width, height, false);\n updateCamera(this.sceneState.camera, width, height);\n };\n\n this.sizeObserver = new ResizeObserver(entries => {\n setSize();\n });\n\n this.sizeObserver.observe(ref);\n\n\n render();\n }\n\n destroy() {\n if (this) {\n cancelAnimationFrame(this.requestRef);\n this.sizeObserver.disconnect();\n }\n }\n\n set speed(speed: number) {\n this._speed = speed / 20;\n }\n\n set horizontalPressure(horizontalPressure: number) {\n this._horizontalPressure = horizontalPressure / 4;\n }\n\n set verticalPressure(verticalPressure: number) {\n this._verticalPressure = verticalPressure / 4;\n }\n\n set waveFrequencyX(waveFrequencyX: number) {\n this._waveFrequencyX = waveFrequencyX * 0.04;\n }\n\n set waveFrequencyY(waveFrequencyY: number) {\n this._waveFrequencyY = waveFrequencyY * 0.04;\n }\n\n set waveAmplitude(waveAmplitude: number) {\n this._waveAmplitude = waveAmplitude * .75;\n }\n\n set colors(colors: NeatColor[]) {\n this._colors = colors;\n }\n\n set highlights(highlights: number) {\n this._highlights = highlights / 100;\n }\n\n set shadows(shadows: number) {\n this._shadows = shadows / 100;\n }\n\n set colorSaturation(colorSaturation: number) {\n this._saturation = colorSaturation / 10;\n }\n\n set colorBrightness(colorBrightness: number) {\n console.log(\"colorBrightness\", colorBrightness)\n this._brightness = colorBrightness;\n }\n\n set colorBlending(colorBlending: number) {\n this._colorBlending = colorBlending / 10;\n }\n\n set wireframe(wireframe: boolean) {\n this._wireframe = wireframe;\n }\n\n set backgroundColor(backgroundColor: string) {\n this._backgroundColor = backgroundColor;\n }\n\n set backgroundAlpha(backgroundAlpha: number) {\n this._backgroundAlpha = backgroundAlpha;\n }\n\n _initScene(ref: HTMLCanvasElement, width: number, height: number, resolution: number): SceneState {\n\n const renderer = new THREE.WebGLRenderer({\n // antialias: true,\n alpha: true,\n canvas: ref\n });\n\n renderer.setClearColor(0xFF0000, .5);\n renderer.setSize(width, height, false);\n\n const meshes: THREE.Mesh[] = [];\n\n const scene = new THREE.Scene();\n\n const material = this._buildMaterial(width, height);\n\n const geo = new THREE.PlaneGeometry(PLANE_WIDTH, PLANE_HEIGHT, 240 * resolution, 240 * resolution);\n const plane = new THREE.Mesh(geo, material);\n plane.rotation.x = -Math.PI / 3.5;\n plane.position.z = -1;\n meshes.push(plane);\n scene.add(plane);\n\n const camera = new THREE.OrthographicCamera(0.0, 0.0, 0.0, 0.0, 0.0, 0.0);\n // camera.zoom = 1;\n updateCamera(camera, width, height);\n\n return {\n renderer,\n camera,\n scene,\n meshes\n };\n }\n\n _buildMaterial(width: number, height: number) {\n\n const colors = [\n ...this._colors.map(color => ({\n is_active: color.enabled,\n color: new THREE.Color(color.color),\n influence: color.influence\n })),\n ...Array.from({ length: COLORS_COUNT - this._colors.length }).map(() => ({\n is_active: false,\n color: new THREE.Color(0x000000)\n }))\n ];\n\n const uniforms = {\n u_time: { value: 0 },\n u_color_pressure: { value: new THREE.Vector2(this._horizontalPressure, this._verticalPressure) },\n u_wave_frequency_x: { value: this._waveFrequencyX },\n u_wave_frequency_y: { value: this._waveFrequencyY },\n u_wave_amplitude: { value: this._waveAmplitude },\n u_resolution: { value: new THREE.Vector2(width, height) },\n u_colors: { value: colors },\n u_colors_count: { value: this._colors.length },\n u_plane_width: { value: PLANE_WIDTH },\n u_plane_height: { value: PLANE_HEIGHT },\n u_shadows: { value: this._shadows },\n u_highlights: { value: this._highlights },\n };\n\n const material = new THREE.ShaderMaterial({\n uniforms: uniforms,\n vertexShader: buildUniforms() + buildNoise() + buildColorFunctions() + buildVertexShader(),\n fragmentShader: buildUniforms() + buildColorFunctions() + buildFragmentShader()\n });\n\n material.wireframe = WIREFRAME;\n return material;\n }\n\n\n}\n\nfunction updateCamera(camera: THREE.OrthographicCamera, width: number, height: number) {\n\n const viewPortAreaRatio = 1000000;\n const areaViewPort = width * height;\n const targetPlaneArea =\n areaViewPort / viewPortAreaRatio *\n PLANE_WIDTH * PLANE_HEIGHT / 1.5;\n\n const ratio = width / height;\n\n const targetWidth = Math.sqrt(targetPlaneArea * ratio);\n const targetHeight = targetPlaneArea / targetWidth;\n\n const left = -PLANE_WIDTH / 2;\n const right = Math.min((left + targetWidth) / 1.5, PLANE_WIDTH / 2);\n\n const top = PLANE_HEIGHT / 4;\n const bottom = Math.max((top - targetHeight) / 2, -PLANE_HEIGHT / 4);\n\n const near = -100;\n const far = 1000;\n camera.left = left;\n camera.right = right;\n camera.top = top;\n camera.bottom = bottom;\n camera.near = near;\n camera.far = far;\n camera.updateProjectionMatrix();\n}\n\n\nfunction buildVertexShader() {\n return `\n\nvoid main() {\n\n vUv = uv;\n\n v_displacement_amount = cnoise( vec3(\n u_wave_frequency_x * position.x + u_time,\n u_wave_frequency_y * position.y + u_time,\n u_time\n ));\n \n vec3 color;\n\n // float t = mod(u_base_color, 100.0);\n color = u_colors[0].color;\n \n vec2 noise_cord = vUv * u_color_pressure;\n \n const float minNoise = .0;\n const float maxNoise = .9;\n \n for (int i = 1; i < u_colors_count; i++) {\n \n if(u_colors[i].is_active == 1.0){\n float noiseFlow = (1. + float(i)) / 30.;\n float noiseSpeed = (1. + float(i)) * 0.11;\n float noiseSeed = 13. + float(i) * 7.;\n \n float noise = snoise(\n vec3(\n noise_cord.x * u_color_pressure.x + u_time * noiseFlow * 2.,\n noise_cord.y * u_color_pressure.y,\n u_time * noiseSpeed\n ) + noiseSeed\n );\n \n noise = clamp(minNoise, maxNoise + float(i) * 0.02, noise);\n vec3 nextColor = u_colors[i].color;\n color = mix(color, nextColor, smoothstep(0.0, u_color_blending, noise));\n }\n \n }\n \n v_color = color;\n \n vec3 newPosition = position + normal * v_displacement_amount * u_wave_amplitude;\n gl_Position = projectionMatrix * modelViewMatrix * vec4( newPosition, 1.0 );\n \n v_new_position = gl_Position;\n}\n`;\n}\n\nfunction buildFragmentShader() {\n return `\n\nvoid main(){\n vec3 color = v_color;\n \n color.rgb += pow(v_displacement_amount, 1.0) * u_highlights;\n color.rgb -= pow(1.0 - v_displacement_amount, 2.0) * u_shadows;\n color = saturation(color, 1.0 + u_saturation);\n color = color * u_brightness;\n \n gl_FragColor = vec4(color,1.0);\n}\n`;\n}\n\nconst buildUniforms = () => `\nprecision highp float;\n\nstruct Color {\n float is_active;\n vec3 color;\n float value;\n};\n\nuniform float u_time;\n\nuniform float u_wave_amplitude;\nuniform float u_wave_frequency_x;\nuniform float u_wave_frequency_y;\n\nuniform vec2 u_color_pressure;\n\nuniform float u_plane_width;\nuniform float u_plane_height;\n\nuniform float u_shadows;\nuniform float u_highlights;\nuniform float u_saturation;\nuniform float u_brightness;\n\nuniform float u_color_blending;\n\nuniform int u_colors_count;\nuniform Color u_colors[5];\nuniform vec2 u_resolution;\n\nvarying vec2 vUv;\nvarying vec4 v_new_position;\nvarying vec3 v_color;\nvarying float v_displacement_amount;\n\n `;\n\nconst buildNoise = () => `\n\nvec3 mod289(vec3 x)\n{\n return x - floor(x * (1.0 / 289.0)) * 289.0;\n}\n\nvec4 mod289(vec4 x)\n{\n return x - floor(x * (1.0 / 289.0)) * 289.0;\n}\n\nvec4 permute(vec4 x)\n{\n return mod289(((x*34.0)+1.0)*x);\n}\n\nvec4 taylorInvSqrt(vec4 r)\n{\n return 1.79284291400159 - 0.85373472095314 * r;\n}\n\nvec3 fade(vec3 t) {\n return t*t*t*(t*(t*6.0-15.0)+10.0);\n}\n\nfloat snoise(vec3 v)\n{\n const vec2 C = vec2(1.0/6.0, 1.0/3.0) ;\n const vec4 D = vec4(0.0, 0.5, 1.0, 2.0);\n\n// First corner\n vec3 i = floor(v + dot(v, C.yyy) );\n vec3 x0 = v - i + dot(i, C.xxx) ;\n\n// Other corners\n vec3 g = step(x0.yzx, x0.xyz);\n vec3 l = 1.0 - g;\n vec3 i1 = min( g.xyz, l.zxy );\n vec3 i2 = max( g.xyz, l.zxy );\n\n // x0 = x0 - 0.0 + 0.0 * C.xxx;\n // x1 = x0 - i1 + 1.0 * C.xxx;\n // x2 = x0 - i2 + 2.0 * C.xxx;\n // x3 = x0 - 1.0 + 3.0 * C.xxx;\n vec3 x1 = x0 - i1 + C.xxx;\n vec3 x2 = x0 - i2 + C.yyy; // 2.0*C.x = 1/3 = C.y\n vec3 x3 = x0 - D.yyy; // -1.0+3.0*C.x = -0.5 = -D.y\n\n// Permutations\n i = mod289(i);\n vec4 p = permute( permute( permute(\n i.z + vec4(0.0, i1.z, i2.z, 1.0 ))\n + i.y + vec4(0.0, i1.y, i2.y, 1.0 ))\n + i.x + vec4(0.0, i1.x, i2.x, 1.0 ));\n\n// Gradients: 7x7 points over a square, mapped onto an octahedron.\n// The ring size 17*17 = 289 is close to a multiple of 49 (49*6 = 294)\n float n_ = 0.142857142857; // 1.0/7.0\n vec3 ns = n_ * D.wyz - D.xzx;\n\n vec4 j = p - 49.0 * floor(p * ns.z * ns.z); // mod(p,7*7)\n\n vec4 x_ = floor(j * ns.z);\n vec4 y_ = floor(j - 7.0 * x_ ); // mod(j,N)\n\n vec4 x = x_ *ns.x + ns.yyyy;\n vec4 y = y_ *ns.x + ns.yyyy;\n vec4 h = 1.0 - abs(x) - abs(y);\n\n vec4 b0 = vec4( x.xy, y.xy );\n vec4 b1 = vec4( x.zw, y.zw );\n\n //vec4 s0 = vec4(lessThan(b0,0.0))*2.0 - 1.0;\n //vec4 s1 = vec4(lessThan(b1,0.0))*2.0 - 1.0;\n vec4 s0 = floor(b0)*2.0 + 1.0;\n vec4 s1 = floor(b1)*2.0 + 1.0;\n vec4 sh = -step(h, vec4(0.0));\n\n vec4 a0 = b0.xzyw + s0.xzyw*sh.xxyy ;\n vec4 a1 = b1.xzyw + s1.xzyw*sh.zzww ;\n\n vec3 p0 = vec3(a0.xy,h.x);\n vec3 p1 = vec3(a0.zw,h.y);\n vec3 p2 = vec3(a1.xy,h.z);\n vec3 p3 = vec3(a1.zw,h.w);\n\n//Normalise gradients\n vec4 norm = taylorInvSqrt(vec4(dot(p0,p0), dot(p1,p1), dot(p2, p2), dot(p3,p3)));\n p0 *= norm.x;\n p1 *= norm.y;\n p2 *= norm.z;\n p3 *= norm.w;\n\n// Mix final noise value\n vec4 m = max(0.6 - vec4(dot(x0,x0), dot(x1,x1), dot(x2,x2), dot(x3,x3)), 0.0);\n m = m * m;\n return 42.0 * dot( m*m, vec4( dot(p0,x0), dot(p1,x1),\n dot(p2,x2), dot(p3,x3) ) );\n}\n\n// Classic Perlin noise\nfloat cnoise(vec3 P)\n{\n vec3 Pi0 = floor(P); // Integer part for indexing\n vec3 Pi1 = Pi0 + vec3(1.0); // Integer part + 1\n Pi0 = mod289(Pi0);\n Pi1 = mod289(Pi1);\n vec3 Pf0 = fract(P); // Fractional part for interpolation\n vec3 Pf1 = Pf0 - vec3(1.0); // Fractional part - 1.0\n vec4 ix = vec4(Pi0.x, Pi1.x, Pi0.x, Pi1.x);\n vec4 iy = vec4(Pi0.yy, Pi1.yy);\n vec4 iz0 = Pi0.zzzz;\n vec4 iz1 = Pi1.zzzz;\n\n vec4 ixy = permute(permute(ix) + iy);\n vec4 ixy0 = permute(ixy + iz0);\n vec4 ixy1 = permute(ixy + iz1);\n\n vec4 gx0 = ixy0 * (1.0 / 7.0);\n vec4 gy0 = fract(floor(gx0) * (1.0 / 7.0)) - 0.5;\n gx0 = fract(gx0);\n vec4 gz0 = vec4(0.5) - abs(gx0) - abs(gy0);\n vec4 sz0 = step(gz0, vec4(0.0));\n gx0 -= sz0 * (step(0.0, gx0) - 0.5);\n gy0 -= sz0 * (step(0.0, gy0) - 0.5);\n\n vec4 gx1 = ixy1 * (1.0 / 7.0);\n vec4 gy1 = fract(floor(gx1) * (1.0 / 7.0)) - 0.5;\n gx1 = fract(gx1);\n vec4 gz1 = vec4(0.5) - abs(gx1) - abs(gy1);\n vec4 sz1 = step(gz1, vec4(0.0));\n gx1 -= sz1 * (step(0.0, gx1) - 0.5);\n gy1 -= sz1 * (step(0.0, gy1) - 0.5);\n\n vec3 g000 = vec3(gx0.x,gy0.x,gz0.x);\n vec3 g100 = vec3(gx0.y,gy0.y,gz0.y);\n vec3 g010 = vec3(gx0.z,gy0.z,gz0.z);\n vec3 g110 = vec3(gx0.w,gy0.w,gz0.w);\n vec3 g001 = vec3(gx1.x,gy1.x,gz1.x);\n vec3 g101 = vec3(gx1.y,gy1.y,gz1.y);\n vec3 g011 = vec3(gx1.z,gy1.z,gz1.z);\n vec3 g111 = vec3(gx1.w,gy1.w,gz1.w);\n\n vec4 norm0 = taylorInvSqrt(vec4(dot(g000, g000), dot(g010, g010), dot(g100, g100), dot(g110, g110)));\n g000 *= norm0.x;\n g010 *= norm0.y;\n g100 *= norm0.z;\n g110 *= norm0.w;\n vec4 norm1 = taylorInvSqrt(vec4(dot(g001, g001), dot(g011, g011), dot(g101, g101), dot(g111, g111)));\n g001 *= norm1.x;\n g011 *= norm1.y;\n g101 *= norm1.z;\n g111 *= norm1.w;\n\n float n000 = dot(g000, Pf0);\n float n100 = dot(g100, vec3(Pf1.x, Pf0.yz));\n float n010 = dot(g010, vec3(Pf0.x, Pf1.y, Pf0.z));\n float n110 = dot(g110, vec3(Pf1.xy, Pf0.z));\n float n001 = dot(g001, vec3(Pf0.xy, Pf1.z));\n float n101 = dot(g101, vec3(Pf1.x, Pf0.y, Pf1.z));\n float n011 = dot(g011, vec3(Pf0.x, Pf1.yz));\n float n111 = dot(g111, Pf1);\n\n vec3 fade_xyz = fade(Pf0);\n vec4 n_z = mix(vec4(n000, n100, n010, n110), vec4(n001, n101, n011, n111), fade_xyz.z);\n vec2 n_yz = mix(n_z.xy, n_z.zw, fade_xyz.y);\n float n_xyz = mix(n_yz.x, n_yz.y, fade_xyz.x);\n return 2.2 * n_xyz;\n}\n\n// YUV to RGB matrix\nmat3 yuv2rgb = mat3(1.0, 0.0, 1.13983,\n 1.0, -0.39465, -0.58060,\n 1.0, 2.03211, 0.0);\n\n// RGB to YUV matrix\nmat3 rgb2yuv = mat3(0.2126, 0.7152, 0.0722,\n -0.09991, -0.33609, 0.43600,\n 0.615, -0.5586, -0.05639);\n\n `;\n\nconst buildColorFunctions = () => `\n\nvec3 saturation(vec3 rgb, float adjustment) {\n const vec3 W = vec3(0.2125, 0.7154, 0.0721);\n vec3 intensity = vec3(dot(rgb, W));\n return mix(intensity, rgb, adjustment);\n}\n\nfloat saturation(vec3 rgb)\n{\n vec4 K = vec4(0.0, -1.0 / 3.0, 2.0 / 3.0, -1.0);\n vec4 p = mix(vec4(rgb.bg, K.wz), vec4(rgb.gb, K.xy), step(rgb.b, rgb.g));\n vec4 q = mix(vec4(p.xyw, rgb.r), vec4(rgb.r, p.yzx), step(p.x, rgb.r));\n\n float d = q.x - min(q.w, q.y);\n float e = 1.0e-10;\n return abs(6.0 * d + e);\n}\n\n// get saturation of a color in values between 0 and 1\nfloat getSaturation(vec3 color) {\n float max = max(color.r, max(color.g, color.b));\n float min = min(color.r, min(color.g, color.b));\n return (max - min) / max;\n}\n \nvec3 rgb2hsv(vec3 c)\n{\n vec4 K = vec4(0.0, -1.0 / 3.0, 2.0 / 3.0, -1.0);\n vec4 p = mix(vec4(c.bg, K.wz), vec4(c.gb, K.xy), step(c.b, c.g));\n vec4 q = mix(vec4(p.xyw, c.r), vec4(c.r, p.yzx), step(p.x, c.r));\n\n float d = q.x - min(q.w, q.y);\n float e = 1.0e-10;\n return vec3(abs(q.z + (q.w - q.y) / (6.0 * d + e)), d / (q.x + e), q.x);\n}\n\nvec3 hsv2rgb(vec3 c)\n{\n vec4 K = vec4(1.0, 2.0 / 3.0, 1.0 / 3.0, 3.0);\n vec3 p = abs(fract(c.xxx + K.xyz) * 6.0 - K.www);\n return c.z * mix(K.xxx, clamp(p - K.xxx, 0.0, 1.0), c.y);\n}\n`;\n\n\nconst setLinkStyles = (link: HTMLAnchorElement) => {\n link.id = \"neat-link\";\n link.href = \"https://neat.firecms.co\";\n link.target = \"_blank\";\n link.style.position = \"absolute\";\n link.style.display = \"block\";\n link.style.opacity = \"1\";\n link.style.bottom = \"0\";\n link.style.right = \"0\";\n link.style.padding = \"10px\";\n link.style.color = \"#dcdcdc\";\n link.style.fontFamily = \"sans-serif\";\n link.style.fontSize = \"16px\";\n link.style.fontWeight = \"bold\";\n link.style.textDecoration = \"none\";\n link.style.zIndex = \"100\";\n link.innerHTML = \"NEAT\";\n}\n\nconst addNeatLink = (ref: HTMLCanvasElement) => {\n const existingLinks = ref.parentElement?.getElementsByTagName(\"a\");\n if (existingLinks) {\n for (let i = 0; i < existingLinks.length; i++) {\n if (existingLinks[i].id === \"neat-link\") {\n setLinkStyles(existingLinks[i]);\n return;\n }\n }\n }\n const link = document.createElement(\"a\");\n setLinkStyles(link);\n ref.parentElement?.appendChild(link);\n}\n"],"names":["PLANE_WIDTH","PLANE_HEIGHT","WIREFRAME","COLORS_COUNT","clock","THREE","NeatGradient","config","ref","speed","horizontalPressure","verticalPressure","waveFrequencyX","waveFrequencyY","waveAmplitude","colors","highlights","shadows","colorSaturation","colorBrightness","colorBlending","wireframe","backgroundColor","backgroundAlpha","resolution","width","height","renderer","camera","scene","meshes","tick","render","addNeatLink","mesh","color","setSize","canvas","updateCamera","entries","material","geo","plane","uniforms","buildUniforms","buildNoise","buildColorFunctions","buildVertexShader","buildFragmentShader","targetPlaneArea","ratio","targetWidth","targetHeight","left","right","top","bottom","near","far","setLinkStyles","link","existingLinks"],"mappings":"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A;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAsCtBC,EAAa,IAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAuLnBC,EAAsB,IAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EA8C5Ba,EAAiBC,GAA4B,CAC/CA,EAAK,GAAK,YACVA,EAAK,KAAO,0BACZA,EAAK,OAAS,SACdA,EAAK,MAAM,SAAW,WACtBA,EAAK,MAAM,QAAU,QACrBA,EAAK,MAAM,QAAU,IACrBA,EAAK,MAAM,OAAS,IACpBA,EAAK,MAAM,MAAQ,IACnBA,EAAK,MAAM,QAAU,OACrBA,EAAK,MAAM,MAAQ,UACnBA,EAAK,MAAM,WAAa,aACxBA,EAAK,MAAM,SAAW,OACtBA,EAAK,MAAM,WAAa,OACxBA,EAAK,MAAM,eAAiB,OAC5BA,EAAK,MAAM,OAAS,MACpBA,EAAK,UAAY,MACrB,EAEM3B,EAAezB,GAA2B,CAC5C,MAAMqD,EAAgBrD,EAAI,eAAe,qBAAqB,GAAG,EACjE,GAAIqD,GACA,QAAS,EAAI,EAAG,EAAIA,EAAc,OAAQ,IAClC,GAAAA,EAAc,GAAG,KAAO,YAAa,CACrCF,EAAcE,EAAc,EAAE,EAC9B,MACJ,EAGF,MAAAD,EAAO,SAAS,cAAc,GAAG,EACvCD,EAAcC,CAAI,EACdpD,EAAA,eAAe,YAAYoD,CAAI,CACvC"}
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "@firecms/neat",
3
3
  "description": "Beautiful 3D gradients for your website",
4
4
  "access": "public",
5
- "version": "0.1.3",
5
+ "version": "0.1.4",
6
6
  "main": "./dist/index.umd.js",
7
7
  "module": "./dist/index.es.js",
8
8
  "types": "dist/index.d.ts",
@@ -20,8 +20,8 @@
20
20
  "three": "^0.144.0"
21
21
  },
22
22
  "scripts": {
23
- "start": "../node_modules/.bin/vite",
24
- "build": "../node_modules/.bin/vite build && tsc"
23
+ "start": "vite",
24
+ "build": "vite build && tsc"
25
25
  },
26
26
  "browserslist": {
27
27
  "production": [
@@ -24,7 +24,8 @@ export type NeatConfig = {
24
24
  waveAmplitude?: number;
25
25
  highlights?: number;
26
26
  shadows?: number;
27
- saturation?: number;
27
+ colorSaturation?: number;
28
+ colorBrightness?: number;
28
29
  colors: NeatColor[];
29
30
  colorBlending?: number;
30
31
  wireframe?: boolean;
@@ -59,6 +60,7 @@ export class NeatGradient implements NeatController {
59
60
  private _shadows: number = -1;
60
61
  private _highlights: number = -1;
61
62
  private _saturation: number = -1;
63
+ private _brightness: number = -1;
62
64
 
63
65
  private _colorBlending: number = -1;
64
66
 
@@ -85,7 +87,8 @@ export class NeatGradient implements NeatController {
85
87
  colors,
86
88
  highlights = 4,
87
89
  shadows = 4,
88
- saturation = 0,
90
+ colorSaturation = 0,
91
+ colorBrightness = 1,
89
92
  colorBlending = 5,
90
93
  wireframe = false,
91
94
  backgroundColor = "#FFFFFF",
@@ -110,7 +113,8 @@ export class NeatGradient implements NeatController {
110
113
  this.colors = colors;
111
114
  this.shadows = shadows;
112
115
  this.highlights = highlights;
113
- this.saturation = saturation;
116
+ this.colorSaturation = colorSaturation;
117
+ this.colorBrightness = colorBrightness;
114
118
  this.wireframe = wireframe;
115
119
  this.backgroundColor = backgroundColor;
116
120
  this.backgroundAlpha = backgroundAlpha;
@@ -171,6 +175,8 @@ export class NeatGradient implements NeatController {
171
175
  // @ts-ignore
172
176
  mesh.material.uniforms.u_saturation = { value: this._saturation };
173
177
  // @ts-ignore
178
+ mesh.material.uniforms.u_brightness = { value: this._brightness };
179
+ // @ts-ignore
174
180
  mesh.material.wireframe = this._wireframe;
175
181
  });
176
182
 
@@ -240,8 +246,13 @@ export class NeatGradient implements NeatController {
240
246
  this._shadows = shadows / 100;
241
247
  }
242
248
 
243
- set saturation(saturation: number) {
244
- this._saturation = saturation / 10;
249
+ set colorSaturation(colorSaturation: number) {
250
+ this._saturation = colorSaturation / 10;
251
+ }
252
+
253
+ set colorBrightness(colorBrightness: number) {
254
+ console.log("colorBrightness", colorBrightness)
255
+ this._brightness = colorBrightness;
245
256
  }
246
257
 
247
258
  set colorBlending(colorBlending: number) {
@@ -433,6 +444,7 @@ void main(){
433
444
  color.rgb += pow(v_displacement_amount, 1.0) * u_highlights;
434
445
  color.rgb -= pow(1.0 - v_displacement_amount, 2.0) * u_shadows;
435
446
  color = saturation(color, 1.0 + u_saturation);
447
+ color = color * u_brightness;
436
448
 
437
449
  gl_FragColor = vec4(color,1.0);
438
450
  }
@@ -462,6 +474,7 @@ uniform float u_plane_height;
462
474
  uniform float u_shadows;
463
475
  uniform float u_highlights;
464
476
  uniform float u_saturation;
477
+ uniform float u_brightness;
465
478
 
466
479
  uniform float u_color_blending;
467
480