@paper-design/shaders 0.0.30 → 0.0.31

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (62) hide show
  1. package/README.md +7 -4
  2. package/dist/index.d.ts +25 -23
  3. package/dist/index.js +35 -22
  4. package/dist/index.js.map +2 -2
  5. package/dist/shaders/color-panels.d.ts +48 -0
  6. package/dist/shaders/color-panels.js +213 -0
  7. package/dist/shaders/color-panels.js.map +7 -0
  8. package/dist/shaders/dithering.d.ts +8 -8
  9. package/dist/shaders/dithering.js +15 -7
  10. package/dist/shaders/dithering.js.map +2 -2
  11. package/dist/shaders/dot-grid.d.ts +1 -1
  12. package/dist/shaders/dot-grid.js +4 -4
  13. package/dist/shaders/dot-grid.js.map +1 -1
  14. package/dist/shaders/dot-orbit.d.ts +6 -3
  15. package/dist/shaders/dot-orbit.js +14 -10
  16. package/dist/shaders/dot-orbit.js.map +2 -2
  17. package/dist/shaders/god-rays.d.ts +9 -6
  18. package/dist/shaders/god-rays.js +15 -16
  19. package/dist/shaders/god-rays.js.map +2 -2
  20. package/dist/shaders/grain-gradient.d.ts +5 -3
  21. package/dist/shaders/grain-gradient.js +50 -36
  22. package/dist/shaders/grain-gradient.js.map +2 -2
  23. package/dist/shaders/liquid-metal.d.ts +27 -12
  24. package/dist/shaders/liquid-metal.js +63 -66
  25. package/dist/shaders/liquid-metal.js.map +2 -2
  26. package/dist/shaders/mesh-gradient.d.ts +3 -3
  27. package/dist/shaders/mesh-gradient.js +6 -6
  28. package/dist/shaders/mesh-gradient.js.map +1 -1
  29. package/dist/shaders/metaballs.d.ts +6 -3
  30. package/dist/shaders/metaballs.js +11 -10
  31. package/dist/shaders/metaballs.js.map +2 -2
  32. package/dist/shaders/neuro-noise.d.ts +12 -6
  33. package/dist/shaders/neuro-noise.js +26 -11
  34. package/dist/shaders/neuro-noise.js.map +2 -2
  35. package/dist/shaders/perlin-noise.d.ts +10 -10
  36. package/dist/shaders/perlin-noise.js +29 -21
  37. package/dist/shaders/perlin-noise.js.map +2 -2
  38. package/dist/shaders/pulsing-border.d.ts +3 -3
  39. package/dist/shaders/pulsing-border.js +25 -25
  40. package/dist/shaders/pulsing-border.js.map +1 -1
  41. package/dist/shaders/simplex-noise.d.ts +3 -3
  42. package/dist/shaders/simplex-noise.js +12 -12
  43. package/dist/shaders/simplex-noise.js.map +1 -1
  44. package/dist/shaders/smoke-ring.d.ts +3 -3
  45. package/dist/shaders/smoke-ring.js +6 -6
  46. package/dist/shaders/smoke-ring.js.map +1 -1
  47. package/dist/shaders/spiral.d.ts +8 -8
  48. package/dist/shaders/spiral.js +15 -7
  49. package/dist/shaders/spiral.js.map +2 -2
  50. package/dist/shaders/swirl.d.ts +5 -3
  51. package/dist/shaders/swirl.js +29 -18
  52. package/dist/shaders/swirl.js.map +2 -2
  53. package/dist/shaders/voronoi.d.ts +8 -8
  54. package/dist/shaders/voronoi.js +11 -11
  55. package/dist/shaders/voronoi.js.map +1 -1
  56. package/dist/shaders/warp.d.ts +3 -3
  57. package/dist/shaders/warp.js +31 -27
  58. package/dist/shaders/warp.js.map +2 -2
  59. package/dist/shaders/waves.d.ts +7 -7
  60. package/dist/shaders/waves.js +16 -8
  61. package/dist/shaders/waves.js.map +2 -2
  62. package/package.json +1 -1
package/README.md CHANGED
@@ -13,10 +13,13 @@ myDiv.style.width = '600px';
13
13
  myDiv.style.height = '400px';
14
14
 
15
15
  const shaderParams = {
16
- u_color1: getShaderColorFromString("#283BFC"),
17
- u_color2: getShaderColorFromString("#FF2828"),
18
- u_color3: getShaderColorFromString("#dddddd"),
19
- u_color4: getShaderColorFromString("#800080")
16
+ u_colorsCount: 4,
17
+ u_colors: [
18
+ getShaderColorFromString("#283bfc"),
19
+ getShaderColorFromString("#ff2828"),
20
+ getShaderColorFromString("#dddddd"),
21
+ getShaderColorFromString("#800080")
22
+ ],
20
23
  };
21
24
 
22
25
  const speed = 0.25;
package/dist/index.d.ts CHANGED
@@ -1,43 +1,45 @@
1
1
  /** The core Shader Mount class. Pass it a parent element and a fragment shader to get started. */
2
- export { ShaderMount, isPaperShaderElement } from './shader-mount';
3
- export type { PaperShaderElement, ShaderMotionParams, ShaderMountUniforms, ShaderPreset } from './shader-mount';
2
+ export { ShaderMount, isPaperShaderElement } from './shader-mount.js';
3
+ export type { PaperShaderElement, ShaderMotionParams, ShaderMountUniforms, ShaderPreset } from './shader-mount.js';
4
4
  /** Shader sizing options and uniforms */
5
- export { defaultObjectSizing, defaultPatternSizing, ShaderFitOptions, type ShaderFit, type ShaderSizingParams, type ShaderSizingUniforms, } from './shader-sizing';
5
+ export { defaultObjectSizing, defaultPatternSizing, ShaderFitOptions, type ShaderFit, type ShaderSizingParams, type ShaderSizingUniforms, } from './shader-sizing.js';
6
6
  /** A shader that renders a mesh gradient with a rotating noise pattern and several layers of fractal noise */
7
- export { meshGradientFragmentShader, meshGradientMeta, type MeshGradientParams, type MeshGradientUniforms, } from './shaders/mesh-gradient';
7
+ export { meshGradientFragmentShader, meshGradientMeta, type MeshGradientParams, type MeshGradientUniforms, } from './shaders/mesh-gradient.js';
8
8
  /** Fractional Brownian motion (fBm) noise over the polar coordinates, masked with ring shape */
9
- export { smokeRingMeta, smokeRingFragmentShader, type SmokeRingParams, type SmokeRingUniforms, } from './shaders/smoke-ring';
9
+ export { smokeRingMeta, smokeRingFragmentShader, type SmokeRingParams, type SmokeRingUniforms, } from './shaders/smoke-ring.js';
10
10
  /** A shader rendering a fractal-like structure made of several layers of since-arches */
11
- export { neuroNoiseFragmentShader, type NeuroNoiseParams, type NeuroNoiseUniforms } from './shaders/neuro-noise';
11
+ export { neuroNoiseFragmentShader, type NeuroNoiseParams, type NeuroNoiseUniforms } from './shaders/neuro-noise.js';
12
12
  /** A shader rendering an animated dot pattern based on Voronoi diagram */
13
- export { dotOrbitMeta, dotOrbitFragmentShader, type DotOrbitParams, type DotOrbitUniforms } from './shaders/dot-orbit';
13
+ export { dotOrbitMeta, dotOrbitFragmentShader, type DotOrbitParams, type DotOrbitUniforms, } from './shaders/dot-orbit.js';
14
14
  /** A shader rendering a static dot pattern */
15
- export { dotGridFragmentShader, DotGridShapes, type DotGridShape, type DotGridParams, type DotGridUniforms, } from './shaders/dot-grid';
15
+ export { dotGridFragmentShader, DotGridShapes, type DotGridShape, type DotGridParams, type DotGridUniforms, } from './shaders/dot-grid.js';
16
16
  /** A shader that calculates a combination of 2 simplex noises with result rendered as a gradient */
17
- export { simplexNoiseMeta, simplexNoiseFragmentShader, type SimplexNoiseParams, type SimplexNoiseUniforms, } from './shaders/simplex-noise';
17
+ export { simplexNoiseMeta, simplexNoiseFragmentShader, type SimplexNoiseParams, type SimplexNoiseUniforms, } from './shaders/simplex-noise.js';
18
18
  /** A number of circlular shapes blened in a gooey way */
19
- export { metaballsMeta, metaballsFragmentShader, type MetaballsParams, type MetaballsUniforms, } from './shaders/metaballs';
19
+ export { metaballsMeta, metaballsFragmentShader, type MetaballsParams, type MetaballsUniforms, } from './shaders/metaballs.js';
20
20
  /** 2d noise with max number of parameters to be exposed to users */
21
- export { perlinNoiseFragmentShader, type PerlinNoiseParams, type PerlinNoiseUniforms } from './shaders/perlin-noise';
21
+ export { perlinNoiseFragmentShader, type PerlinNoiseParams, type PerlinNoiseUniforms } from './shaders/perlin-noise.js';
22
22
  /** Voronoi diagram: classic + rounded edges */
23
- export { voronoiMeta, voronoiFragmentShader, type VoronoiParams, type VoronoiUniforms } from './shaders/voronoi';
23
+ export { voronoiMeta, voronoiFragmentShader, type VoronoiParams, type VoronoiUniforms } from './shaders/voronoi.js';
24
24
  /** Waves pattern */
25
- export { wavesFragmentShader, type WavesParams, type WavesUniforms } from './shaders/waves';
25
+ export { wavesFragmentShader, type WavesParams, type WavesUniforms } from './shaders/waves.js';
26
26
  /** Warp: distortion + swirl + underlying shapes */
27
- export { warpMeta, warpFragmentShader, WarpPatterns, type WarpParams, type WarpUniforms, type WarpPattern, } from './shaders/warp';
27
+ export { warpMeta, warpFragmentShader, WarpPatterns, type WarpParams, type WarpUniforms, type WarpPattern, } from './shaders/warp.js';
28
28
  /** Radial shape made of randomized stripes */
29
- export { godRaysMeta, godRaysFragmentShader, type GodRaysParams, type GodRaysUniforms } from './shaders/god-rays';
29
+ export { godRaysMeta, godRaysFragmentShader, type GodRaysParams, type GodRaysUniforms } from './shaders/god-rays.js';
30
30
  /** Single-color spiral shape */
31
- export { spiralFragmentShader, type SpiralParams, type SpiralUniforms } from './shaders/spiral';
31
+ export { spiralFragmentShader, type SpiralParams, type SpiralUniforms } from './shaders/spiral.js';
32
32
  /** Multi-color radial swirl */
33
- export { swirlMeta, swirlFragmentShader, type SwirlParams, type SwirlUniforms } from './shaders/swirl';
33
+ export { swirlMeta, swirlFragmentShader, type SwirlParams, type SwirlUniforms } from './shaders/swirl.js';
34
34
  /** Dithering effect applied over abstract shapes */
35
- export { ditheringFragmentShader, DitheringShapes, DitheringTypes, type DitheringParams, type DitheringUniforms, type DitheringShape, type DitheringType, } from './shaders/dithering';
35
+ export { ditheringFragmentShader, DitheringShapes, DitheringTypes, type DitheringParams, type DitheringUniforms, type DitheringShape, type DitheringType, } from './shaders/dithering.js';
36
36
  /** N-color gradient applied to the abstract shapes w/ grainy overlay & distortion */
37
- export { grainGradientFragmentShader, grainGradientMeta, GrainGradientShapes, type GrainGradientParams, type GrainGradientUniforms, type GrainGradientShape, } from './shaders/grain-gradient';
37
+ export { grainGradientFragmentShader, grainGradientMeta, GrainGradientShapes, type GrainGradientParams, type GrainGradientUniforms, type GrainGradientShape, } from './shaders/grain-gradient.js';
38
38
  /** Liquid metal effect applied to the abstract shapes */
39
- export { liquidMetalFragmentShader, type LiquidMetalParams, type LiquidMetalUniforms } from './shaders/liquid-metal';
39
+ export { liquidMetalFragmentShader, LiquidMetalShapes, type LiquidMetalParams, type LiquidMetalUniforms, type LiquidMetalShape, } from './shaders/liquid-metal.js';
40
40
  /** Border with configurable size & radius ade of rotating pulsing light spots */
41
- export { pulsingBorderMeta, pulsingBorderFragmentShader, type PulsingBorderParams, type PulsingBorderUniforms, } from './shaders/pulsing-border';
42
- export { getShaderColorFromString } from './get-shader-color-from-string';
43
- export { getShaderNoiseTexture } from './get-shader-noise-texture';
41
+ export { pulsingBorderMeta, pulsingBorderFragmentShader, type PulsingBorderParams, type PulsingBorderUniforms, } from './shaders/pulsing-border.js';
42
+ /** */
43
+ export { colorPanelsFragmentShader, colorPanelsMeta, type ColorPanelsParams, type ColorPanelsUniforms, } from './shaders/color-panels.js';
44
+ export { getShaderColorFromString } from './get-shader-color-from-string.js';
45
+ export { getShaderNoiseTexture } from './get-shader-noise-texture.js';
package/dist/index.js CHANGED
@@ -3,70 +3,83 @@
3
3
  * https://github.com/paper-design/shaders *
4
4
  * * * * * * * * * * * * * * * * * * * * * * * * * * * */
5
5
 
6
- import { ShaderMount, isPaperShaderElement } from "./shader-mount";
6
+ import { ShaderMount, isPaperShaderElement } from "./shader-mount.js";
7
7
  import {
8
8
  defaultObjectSizing,
9
9
  defaultPatternSizing,
10
10
  ShaderFitOptions
11
- } from "./shader-sizing";
11
+ } from "./shader-sizing.js";
12
12
  import {
13
13
  meshGradientFragmentShader,
14
14
  meshGradientMeta
15
- } from "./shaders/mesh-gradient";
15
+ } from "./shaders/mesh-gradient.js";
16
16
  import {
17
17
  smokeRingMeta,
18
18
  smokeRingFragmentShader
19
- } from "./shaders/smoke-ring";
20
- import { neuroNoiseFragmentShader } from "./shaders/neuro-noise";
21
- import { dotOrbitMeta, dotOrbitFragmentShader } from "./shaders/dot-orbit";
19
+ } from "./shaders/smoke-ring.js";
20
+ import { neuroNoiseFragmentShader } from "./shaders/neuro-noise.js";
21
+ import {
22
+ dotOrbitMeta,
23
+ dotOrbitFragmentShader
24
+ } from "./shaders/dot-orbit.js";
22
25
  import {
23
26
  dotGridFragmentShader,
24
27
  DotGridShapes
25
- } from "./shaders/dot-grid";
28
+ } from "./shaders/dot-grid.js";
26
29
  import {
27
30
  simplexNoiseMeta,
28
31
  simplexNoiseFragmentShader
29
- } from "./shaders/simplex-noise";
32
+ } from "./shaders/simplex-noise.js";
30
33
  import {
31
34
  metaballsMeta,
32
35
  metaballsFragmentShader
33
- } from "./shaders/metaballs";
34
- import { perlinNoiseFragmentShader } from "./shaders/perlin-noise";
35
- import { voronoiMeta, voronoiFragmentShader } from "./shaders/voronoi";
36
- import { wavesFragmentShader } from "./shaders/waves";
36
+ } from "./shaders/metaballs.js";
37
+ import { perlinNoiseFragmentShader } from "./shaders/perlin-noise.js";
38
+ import { voronoiMeta, voronoiFragmentShader } from "./shaders/voronoi.js";
39
+ import { wavesFragmentShader } from "./shaders/waves.js";
37
40
  import {
38
41
  warpMeta,
39
42
  warpFragmentShader,
40
43
  WarpPatterns
41
- } from "./shaders/warp";
42
- import { godRaysMeta, godRaysFragmentShader } from "./shaders/god-rays";
43
- import { spiralFragmentShader } from "./shaders/spiral";
44
- import { swirlMeta, swirlFragmentShader } from "./shaders/swirl";
44
+ } from "./shaders/warp.js";
45
+ import { godRaysMeta, godRaysFragmentShader } from "./shaders/god-rays.js";
46
+ import { spiralFragmentShader } from "./shaders/spiral.js";
47
+ import { swirlMeta, swirlFragmentShader } from "./shaders/swirl.js";
45
48
  import {
46
49
  ditheringFragmentShader,
47
50
  DitheringShapes,
48
51
  DitheringTypes
49
- } from "./shaders/dithering";
52
+ } from "./shaders/dithering.js";
50
53
  import {
51
54
  grainGradientFragmentShader,
52
55
  grainGradientMeta,
53
56
  GrainGradientShapes
54
- } from "./shaders/grain-gradient";
55
- import { liquidMetalFragmentShader } from "./shaders/liquid-metal";
57
+ } from "./shaders/grain-gradient.js";
58
+ import {
59
+ liquidMetalFragmentShader,
60
+ LiquidMetalShapes
61
+ } from "./shaders/liquid-metal.js";
56
62
  import {
57
63
  pulsingBorderMeta,
58
64
  pulsingBorderFragmentShader
59
- } from "./shaders/pulsing-border";
60
- import { getShaderColorFromString } from "./get-shader-color-from-string";
61
- import { getShaderNoiseTexture } from "./get-shader-noise-texture";
65
+ } from "./shaders/pulsing-border.js";
66
+ import {
67
+ colorPanelsFragmentShader,
68
+ colorPanelsMeta
69
+ } from "./shaders/color-panels.js";
70
+ import { getShaderColorFromString } from "./get-shader-color-from-string.js";
71
+ import { getShaderNoiseTexture } from "./get-shader-noise-texture.js";
62
72
  export {
63
73
  DitheringShapes,
64
74
  DitheringTypes,
65
75
  DotGridShapes,
66
76
  GrainGradientShapes,
77
+ LiquidMetalShapes,
67
78
  ShaderFitOptions,
68
79
  ShaderMount,
69
80
  WarpPatterns,
81
+ colorPanelsFragmentShader,
82
+ colorPanelsMeta,
70
83
  defaultObjectSizing,
71
84
  defaultPatternSizing,
72
85
  ditheringFragmentShader,
package/dist/index.js.map CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../src/index.ts"],
4
- "sourcesContent": ["/** The core Shader Mount class. Pass it a parent element and a fragment shader to get started. */\nexport { ShaderMount, isPaperShaderElement } from './shader-mount';\nexport type { PaperShaderElement, ShaderMotionParams, ShaderMountUniforms, ShaderPreset } from './shader-mount';\n\n/** Shader sizing options and uniforms */\nexport {\n defaultObjectSizing,\n defaultPatternSizing,\n ShaderFitOptions,\n type ShaderFit,\n type ShaderSizingParams,\n type ShaderSizingUniforms,\n} from './shader-sizing';\n\n// ----- Mesh gradient ----- //\n/** A shader that renders a mesh gradient with a rotating noise pattern and several layers of fractal noise */\nexport {\n meshGradientFragmentShader,\n meshGradientMeta,\n type MeshGradientParams,\n type MeshGradientUniforms,\n} from './shaders/mesh-gradient';\n\n// ----- Smoke ring ----- //\n/** Fractional Brownian motion (fBm) noise over the polar coordinates, masked with ring shape */\nexport {\n smokeRingMeta,\n smokeRingFragmentShader,\n type SmokeRingParams,\n type SmokeRingUniforms,\n} from './shaders/smoke-ring';\n\n// ----- Neuro noise ----- //\n/** A shader rendering a fractal-like structure made of several layers of since-arches */\nexport { neuroNoiseFragmentShader, type NeuroNoiseParams, type NeuroNoiseUniforms } from './shaders/neuro-noise';\n\n// ----- Animated dot pattern: orbit type of animation ----- //\n/** A shader rendering an animated dot pattern based on Voronoi diagram */\nexport { dotOrbitMeta, dotOrbitFragmentShader, type DotOrbitParams, type DotOrbitUniforms } from './shaders/dot-orbit';\n\n// ----- Dot Grid ----- //\n/** A shader rendering a static dot pattern */\nexport {\n dotGridFragmentShader,\n DotGridShapes,\n type DotGridShape,\n type DotGridParams,\n type DotGridUniforms,\n} from './shaders/dot-grid';\n\n// ----- Simplex noise ----- //\n/** A shader that calculates a combination of 2 simplex noises with result rendered as a gradient */\nexport {\n simplexNoiseMeta,\n simplexNoiseFragmentShader,\n type SimplexNoiseParams,\n type SimplexNoiseUniforms,\n} from './shaders/simplex-noise';\n\n// ----- Metaballs ----- //\n/** A number of circlular shapes blened in a gooey way */\nexport {\n metaballsMeta,\n metaballsFragmentShader,\n type MetaballsParams,\n type MetaballsUniforms,\n} from './shaders/metaballs';\n\n// ----- Perlin noise ----- //\n/** 2d noise with max number of parameters to be exposed to users */\nexport { perlinNoiseFragmentShader, type PerlinNoiseParams, type PerlinNoiseUniforms } from './shaders/perlin-noise';\n\n// ----- Voronoi Diagram ----- //\n/** Voronoi diagram: classic + rounded edges */\nexport { voronoiMeta, voronoiFragmentShader, type VoronoiParams, type VoronoiUniforms } from './shaders/voronoi';\n\n// ----- Waves ----- //\n/** Waves pattern */\nexport { wavesFragmentShader, type WavesParams, type WavesUniforms } from './shaders/waves';\n\n// ----- Warping Distortion ----- //\n/** Warp: distortion + swirl + underlying shapes */\nexport {\n warpMeta,\n warpFragmentShader,\n WarpPatterns,\n type WarpParams,\n type WarpUniforms,\n type WarpPattern,\n} from './shaders/warp';\n\n// ----- God Rays Effect ----- //\n/** Radial shape made of randomized stripes */\nexport { godRaysMeta, godRaysFragmentShader, type GodRaysParams, type GodRaysUniforms } from './shaders/god-rays';\n\n// ----- Spiral Shape ----- //\n/** Single-color spiral shape */\nexport { spiralFragmentShader, type SpiralParams, type SpiralUniforms } from './shaders/spiral';\n\n// ----- Swirl gradient ----- //\n/** Multi-color radial swirl */\nexport { swirlMeta, swirlFragmentShader, type SwirlParams, type SwirlUniforms } from './shaders/swirl';\n\n// ----- Dithering ----- //\n/** Dithering effect applied over abstract shapes */\nexport {\n ditheringFragmentShader,\n DitheringShapes,\n DitheringTypes,\n type DitheringParams,\n type DitheringUniforms,\n type DitheringShape,\n type DitheringType,\n} from './shaders/dithering';\n\n// ----- Grainy Gradient ----- //\n/** N-color gradient applied to the abstract shapes w/ grainy overlay & distortion */\nexport {\n grainGradientFragmentShader,\n grainGradientMeta,\n GrainGradientShapes,\n type GrainGradientParams,\n type GrainGradientUniforms,\n type GrainGradientShape,\n} from './shaders/grain-gradient';\n\n// ----- Liquid Metal ----- //\n/** Liquid metal effect applied to the abstract shapes */\nexport { liquidMetalFragmentShader, type LiquidMetalParams, type LiquidMetalUniforms } from './shaders/liquid-metal';\n\n// ----- Pulsing Border ----- //\n/** Border with configurable size & radius ade of rotating pulsing light spots */\nexport {\n pulsingBorderMeta,\n pulsingBorderFragmentShader,\n type PulsingBorderParams,\n type PulsingBorderUniforms,\n} from './shaders/pulsing-border';\n\n// ----- Utils ----- //\nexport { getShaderColorFromString } from './get-shader-color-from-string';\nexport { getShaderNoiseTexture } from './get-shader-noise-texture';\n"],
5
- "mappings": ";;;;;AACA,SAAS,aAAa,4BAA4B;AAIlD;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OAIK;AAIP;AAAA,EACE;AAAA,EACA;AAAA,OAGK;AAIP;AAAA,EACE;AAAA,EACA;AAAA,OAGK;AAIP,SAAS,gCAAgF;AAIzF,SAAS,cAAc,8BAA0E;AAIjG;AAAA,EACE;AAAA,EACA;AAAA,OAIK;AAIP;AAAA,EACE;AAAA,EACA;AAAA,OAGK;AAIP;AAAA,EACE;AAAA,EACA;AAAA,OAGK;AAIP,SAAS,iCAAmF;AAI5F,SAAS,aAAa,6BAAuE;AAI7F,SAAS,2BAAiE;AAI1E;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OAIK;AAIP,SAAS,aAAa,6BAAuE;AAI7F,SAAS,4BAAoE;AAI7E,SAAS,WAAW,2BAAiE;AAIrF;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OAKK;AAIP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OAIK;AAIP,SAAS,iCAAmF;AAI5F;AAAA,EACE;AAAA,EACA;AAAA,OAGK;AAGP,SAAS,gCAAgC;AACzC,SAAS,6BAA6B;",
4
+ "sourcesContent": ["/** The core Shader Mount class. Pass it a parent element and a fragment shader to get started. */\nexport { ShaderMount, isPaperShaderElement } from './shader-mount.js';\nexport type { PaperShaderElement, ShaderMotionParams, ShaderMountUniforms, ShaderPreset } from './shader-mount.js';\n\n/** Shader sizing options and uniforms */\nexport {\n defaultObjectSizing,\n defaultPatternSizing,\n ShaderFitOptions,\n type ShaderFit,\n type ShaderSizingParams,\n type ShaderSizingUniforms,\n} from './shader-sizing.js';\n\n// ----- Mesh gradient ----- //\n/** A shader that renders a mesh gradient with a rotating noise pattern and several layers of fractal noise */\nexport {\n meshGradientFragmentShader,\n meshGradientMeta,\n type MeshGradientParams,\n type MeshGradientUniforms,\n} from './shaders/mesh-gradient.js';\n\n// ----- Smoke ring ----- //\n/** Fractional Brownian motion (fBm) noise over the polar coordinates, masked with ring shape */\nexport {\n smokeRingMeta,\n smokeRingFragmentShader,\n type SmokeRingParams,\n type SmokeRingUniforms,\n} from './shaders/smoke-ring.js';\n\n// ----- Neuro noise ----- //\n/** A shader rendering a fractal-like structure made of several layers of since-arches */\nexport { neuroNoiseFragmentShader, type NeuroNoiseParams, type NeuroNoiseUniforms } from './shaders/neuro-noise.js';\n\n// ----- Animated dot pattern: orbit type of animation ----- //\n/** A shader rendering an animated dot pattern based on Voronoi diagram */\nexport {\n dotOrbitMeta,\n dotOrbitFragmentShader,\n type DotOrbitParams,\n type DotOrbitUniforms,\n} from './shaders/dot-orbit.js';\n\n// ----- Dot Grid ----- //\n/** A shader rendering a static dot pattern */\nexport {\n dotGridFragmentShader,\n DotGridShapes,\n type DotGridShape,\n type DotGridParams,\n type DotGridUniforms,\n} from './shaders/dot-grid.js';\n\n// ----- Simplex noise ----- //\n/** A shader that calculates a combination of 2 simplex noises with result rendered as a gradient */\nexport {\n simplexNoiseMeta,\n simplexNoiseFragmentShader,\n type SimplexNoiseParams,\n type SimplexNoiseUniforms,\n} from './shaders/simplex-noise.js';\n\n// ----- Metaballs ----- //\n/** A number of circlular shapes blened in a gooey way */\nexport {\n metaballsMeta,\n metaballsFragmentShader,\n type MetaballsParams,\n type MetaballsUniforms,\n} from './shaders/metaballs.js';\n\n// ----- Perlin noise ----- //\n/** 2d noise with max number of parameters to be exposed to users */\nexport { perlinNoiseFragmentShader, type PerlinNoiseParams, type PerlinNoiseUniforms } from './shaders/perlin-noise.js';\n\n// ----- Voronoi Diagram ----- //\n/** Voronoi diagram: classic + rounded edges */\nexport { voronoiMeta, voronoiFragmentShader, type VoronoiParams, type VoronoiUniforms } from './shaders/voronoi.js';\n\n// ----- Waves ----- //\n/** Waves pattern */\nexport { wavesFragmentShader, type WavesParams, type WavesUniforms } from './shaders/waves.js';\n\n// ----- Warping Distortion ----- //\n/** Warp: distortion + swirl + underlying shapes */\nexport {\n warpMeta,\n warpFragmentShader,\n WarpPatterns,\n type WarpParams,\n type WarpUniforms,\n type WarpPattern,\n} from './shaders/warp.js';\n\n// ----- God Rays Effect ----- //\n/** Radial shape made of randomized stripes */\nexport { godRaysMeta, godRaysFragmentShader, type GodRaysParams, type GodRaysUniforms } from './shaders/god-rays.js';\n\n// ----- Spiral Shape ----- //\n/** Single-color spiral shape */\nexport { spiralFragmentShader, type SpiralParams, type SpiralUniforms } from './shaders/spiral.js';\n\n// ----- Swirl gradient ----- //\n/** Multi-color radial swirl */\nexport { swirlMeta, swirlFragmentShader, type SwirlParams, type SwirlUniforms } from './shaders/swirl.js';\n\n// ----- Dithering ----- //\n/** Dithering effect applied over abstract shapes */\nexport {\n ditheringFragmentShader,\n DitheringShapes,\n DitheringTypes,\n type DitheringParams,\n type DitheringUniforms,\n type DitheringShape,\n type DitheringType,\n} from './shaders/dithering.js';\n\n// ----- Grainy Gradient ----- //\n/** N-color gradient applied to the abstract shapes w/ grainy overlay & distortion */\nexport {\n grainGradientFragmentShader,\n grainGradientMeta,\n GrainGradientShapes,\n type GrainGradientParams,\n type GrainGradientUniforms,\n type GrainGradientShape,\n} from './shaders/grain-gradient.js';\n\n// ----- Liquid Metal ----- //\n/** Liquid metal effect applied to the abstract shapes */\nexport {\n liquidMetalFragmentShader,\n LiquidMetalShapes,\n type LiquidMetalParams,\n type LiquidMetalUniforms,\n type LiquidMetalShape,\n} from './shaders/liquid-metal.js';\n\n// ----- Pulsing Border ----- //\n/** Border with configurable size & radius ade of rotating pulsing light spots */\nexport {\n pulsingBorderMeta,\n pulsingBorderFragmentShader,\n type PulsingBorderParams,\n type PulsingBorderUniforms,\n} from './shaders/pulsing-border.js';\n\n// ----- Color Gradient Panels ----- //\n/** */\nexport {\n colorPanelsFragmentShader,\n colorPanelsMeta,\n type ColorPanelsParams,\n type ColorPanelsUniforms,\n} from './shaders/color-panels.js';\n\n// ----- Utils ----- //\nexport { getShaderColorFromString } from './get-shader-color-from-string.js';\nexport { getShaderNoiseTexture } from './get-shader-noise-texture.js';\n"],
5
+ "mappings": ";;;;;AACA,SAAS,aAAa,4BAA4B;AAIlD;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OAIK;AAIP;AAAA,EACE;AAAA,EACA;AAAA,OAGK;AAIP;AAAA,EACE;AAAA,EACA;AAAA,OAGK;AAIP,SAAS,gCAAgF;AAIzF;AAAA,EACE;AAAA,EACA;AAAA,OAGK;AAIP;AAAA,EACE;AAAA,EACA;AAAA,OAIK;AAIP;AAAA,EACE;AAAA,EACA;AAAA,OAGK;AAIP;AAAA,EACE;AAAA,EACA;AAAA,OAGK;AAIP,SAAS,iCAAmF;AAI5F,SAAS,aAAa,6BAAuE;AAI7F,SAAS,2BAAiE;AAI1E;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OAIK;AAIP,SAAS,aAAa,6BAAuE;AAI7F,SAAS,4BAAoE;AAI7E,SAAS,WAAW,2BAAiE;AAIrF;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OAKK;AAIP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OAIK;AAIP;AAAA,EACE;AAAA,EACA;AAAA,OAIK;AAIP;AAAA,EACE;AAAA,EACA;AAAA,OAGK;AAIP;AAAA,EACE;AAAA,EACA;AAAA,OAGK;AAGP,SAAS,gCAAgC;AACzC,SAAS,6BAA6B;",
6
6
  "names": []
7
7
  }
@@ -0,0 +1,48 @@
1
+ import type { vec4 } from '../types.js';
2
+ import type { ShaderMotionParams } from '../shader-mount.js';
3
+ import { type ShaderSizingParams, type ShaderSizingUniforms } from '../shader-sizing.js';
4
+ export declare const colorPanelsMeta: {
5
+ readonly maxColorCount: 7;
6
+ };
7
+ /**
8
+ * Animated, pseudo-3D color panels with dynamic layering and directional blur
9
+ * by Ksenia Kondrashova
10
+ *
11
+ * Uniforms include:
12
+ * - u_colors (vec4[]): Input RGBA colors for panels
13
+ * - u_colorsCount (float): Number of active colors (`u_colors` length)
14
+ * - u_density (float): Panels to show
15
+ * - u_colorBack (vec4): Background color to blend behind panels
16
+ * - u_angle (float): Panel skew angle to morph rect to triangle panels
17
+ * - u_length (float): Length of panels (relative to total height)
18
+ * - u_blur (float): Horizontal blur amount along panel edges
19
+ * - u_fadePosition (float): Controls transparency toward the center of panels
20
+ * - u_colorShuffler (float): Affects how panel colors cycle
21
+ * - u_singleColor (float): Controls blending of adjacent colors per panel
22
+ */
23
+ export declare const colorPanelsFragmentShader: string;
24
+ export interface ColorPanelsUniforms extends ShaderSizingUniforms {
25
+ u_colors: vec4[];
26
+ u_colorsCount: number;
27
+ u_colorBack: [number, number, number, number];
28
+ u_angle1: number;
29
+ u_angle2: number;
30
+ u_length: number;
31
+ u_blur: number;
32
+ u_fadeIn: number;
33
+ u_fadeOut: number;
34
+ u_density: number;
35
+ u_gradient: number;
36
+ }
37
+ export interface ColorPanelsParams extends ShaderSizingParams, ShaderMotionParams {
38
+ colors?: string[];
39
+ colorBack?: string;
40
+ angle1?: number;
41
+ angle2?: number;
42
+ length?: number;
43
+ blur?: number;
44
+ fadeIn?: number;
45
+ fadeOut?: number;
46
+ density?: number;
47
+ gradient?: number;
48
+ }
@@ -0,0 +1,213 @@
1
+ /* * * * * * * * * * * * * * * * * * * * * * * * * * * *
2
+ * Paper Shaders *
3
+ * https://github.com/paper-design/shaders *
4
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * */
5
+
6
+ import { sizingVariablesDeclaration } from "../shader-sizing.js";
7
+ import { declarePI, colorBandingFix } from "../shader-utils.js";
8
+ const colorPanelsMeta = {
9
+ maxColorCount: 7
10
+ };
11
+ const colorPanelsFragmentShader = `#version 300 es
12
+ precision lowp float;
13
+
14
+ uniform vec2 u_resolution;
15
+
16
+ uniform float u_time;
17
+ uniform float u_scale;
18
+
19
+ uniform vec4 u_colors[${colorPanelsMeta.maxColorCount}];
20
+ uniform float u_colorsCount;
21
+ uniform vec4 u_colorBack;
22
+ uniform float u_angle1;
23
+ uniform float u_angle2;
24
+ uniform float u_length;
25
+ uniform float u_blur;
26
+ uniform float u_fadeIn;
27
+ uniform float u_fadeOut;
28
+ uniform float u_density;
29
+ uniform float u_gradient;
30
+
31
+ ${sizingVariablesDeclaration}
32
+
33
+ out vec4 fragColor;
34
+
35
+ ${declarePI}
36
+
37
+ vec2 getPanel(float angle, vec2 uv, float invLength) {
38
+ float sinA = sin(angle);
39
+ float cosA = cos(angle);
40
+
41
+ float denom = sinA - uv.y * cosA;
42
+ if (abs(denom) < 1e-5) return vec2(0.);
43
+
44
+ float z = uv.y / denom;
45
+ float zLimit = 0.5;
46
+
47
+ if (z < 0. || z > zLimit) return vec2(0.);
48
+
49
+ float zRatio = z / zLimit;
50
+ float panelMap = 1.0 - zRatio;
51
+ float x = uv.x * (cosA * z + 1.) * invLength;
52
+
53
+ float zOffset = zRatio - .5;
54
+ float left = -.5 + zOffset * u_angle1;
55
+ float right = .5 - zOffset * u_angle2;
56
+
57
+ float blurFactor = (1. - panelMap) * clamp((abs(angle / TWO_PI - .5) - .01) / (-.01), 0., 1.);;
58
+ float blurX = .15 * blurFactor + panelMap * u_blur;
59
+
60
+ float leftEdge1 = left - .5 * blurX;
61
+ float leftEdge2 = left + blurX;
62
+ float rightEdge1 = right - blurX;
63
+ float rightEdge2 = right + .5 * blurX;
64
+
65
+ float panel = smoothstep(leftEdge1, leftEdge2, x) * (1.0 - smoothstep(rightEdge1, rightEdge2, x));
66
+
67
+ return vec2(panel, clamp(panelMap, 0., 1.));
68
+ }
69
+
70
+ vec4 blendColor(vec4 colorA, float panelMask, float panelMap) {
71
+ float fade = smoothstep(-.2 * (1. - u_fadeOut), u_fadeOut, panelMap)
72
+ * (1. - smoothstep(1. - u_fadeIn, 1., panelMap));
73
+
74
+ vec3 blendedRGB = mix(vec3(0.), colorA.rgb, fade);
75
+ float blendedAlpha = mix(0., colorA.a, fade);
76
+
77
+ return vec4(blendedRGB, blendedAlpha) * panelMask;
78
+ }
79
+
80
+ void main() {
81
+ vec2 uv = v_objectUV;
82
+ uv *= 1.25;
83
+
84
+ float t = .05 * u_time;
85
+ t = fract(t);
86
+ bool reverseTime = (t < 0.5);
87
+
88
+ vec3 color = vec3(0.);
89
+ float opacity = 0.;
90
+
91
+ int colorsCount = int(u_colorsCount);
92
+
93
+ vec4 premultipliedColors[${colorPanelsMeta.maxColorCount}];
94
+ for (int i = 0; i < ${colorPanelsMeta.maxColorCount}; i++) {
95
+ if (i >= colorsCount) break;
96
+ vec4 c = u_colors[i];
97
+ c.rgb *= c.a;
98
+ premultipliedColors[i] = c;
99
+ }
100
+
101
+ float invLength = 1.5 / (u_length + 0.001);
102
+
103
+ float totalColorWeight = 0.;
104
+ int panelsNumber = 12;
105
+
106
+ float densityNormalizer = 1.;
107
+ if (colorsCount == 4) {
108
+ panelsNumber = 16;
109
+ densityNormalizer = 1.34;
110
+ } else if (colorsCount == 5) {
111
+ panelsNumber = 20;
112
+ densityNormalizer = 1.67;
113
+ } else if (colorsCount == 7) {
114
+ panelsNumber = 14;
115
+ densityNormalizer = 1.17;
116
+ }
117
+
118
+ float fPanelsNumber = float(panelsNumber);
119
+
120
+ float totalPanelsShape = 0.;
121
+ float panelGrad = 1. - clamp(u_gradient, 0., 1.);
122
+
123
+ for (int set = 0; set < 2; set++) {
124
+ bool isForward = (set == 0 && !reverseTime) || (set == 1 && reverseTime);
125
+ if (!isForward) continue;
126
+
127
+ for (int i = 0; i <= 20; i++) {
128
+ if (i >= panelsNumber) break;
129
+
130
+ int idx = panelsNumber - 1 - i;
131
+
132
+ float offset = float(idx) / fPanelsNumber;
133
+ if (set == 1) {
134
+ offset += .5;
135
+ }
136
+
137
+ float densityFract = densityNormalizer * fract(t + offset);
138
+ float angleNorm = densityFract / u_density;
139
+ if (densityFract >= .5 || angleNorm >= .3) continue;
140
+
141
+ float smoothDensity = clamp((.5 - densityFract) / .1, 0., 1.) * clamp(densityFract / .01, 0., 1.);
142
+ float smoothAngle = clamp((.3 - angleNorm) / .05, 0., 1.);
143
+ if (smoothDensity * smoothAngle < .001) continue;
144
+
145
+ vec2 panel = getPanel(angleNorm * TWO_PI + PI, uv, invLength);
146
+ float panelMask = panel[0] * smoothDensity * smoothAngle;
147
+ if (panelMask <= .001) continue;
148
+ float panelMap = panel[1];
149
+
150
+ int colorIdx = idx % colorsCount;
151
+ int nextColorIdx = (idx + 1) % colorsCount;
152
+
153
+ vec4 colorA = premultipliedColors[colorIdx];
154
+ vec4 colorB = premultipliedColors[nextColorIdx];
155
+
156
+ colorA = mix(colorA, colorB, max(0., smoothstep(.0, .45, panelMap) - panelGrad));
157
+ vec4 blended = blendColor(colorA, panelMask, panelMap);
158
+ color = blended.rgb + color * (1. - blended.a);
159
+ opacity = blended.a + opacity * (1. - blended.a);
160
+ }
161
+
162
+
163
+ for (int i = 0; i <= 20; i++) {
164
+ if (i >= panelsNumber) break;
165
+
166
+ int idx = panelsNumber - 1 - i;
167
+
168
+ float offset = float(idx) / fPanelsNumber;
169
+ if (set == 0) {
170
+ offset += .5;
171
+ }
172
+
173
+ float densityFract = densityNormalizer * fract(-t + offset);
174
+ float angleNorm = -densityFract / u_density;
175
+ if (densityFract >= .5 || angleNorm < -.3) continue;
176
+
177
+ float smoothDensity = clamp((.5 - densityFract) / .1, 0., 1.) * clamp(densityFract / .01, 0., 1.);
178
+ float smoothAngle = clamp((angleNorm + .3) / .05, 0., 1.);
179
+ if (smoothDensity * smoothAngle < .001) continue;
180
+
181
+ vec2 panel = getPanel(angleNorm * TWO_PI + PI, uv, invLength);
182
+ float panelMask = panel[0] * smoothDensity * smoothAngle;
183
+ if (panelMask <= .001) continue;
184
+ float panelMap = panel[1];
185
+
186
+ int colorIdx = (colorsCount - (idx % colorsCount)) % colorsCount;
187
+ if (colorIdx < 0) colorIdx += colorsCount;
188
+ int nextColorIdx = (colorIdx + 1) % colorsCount;
189
+
190
+ vec4 colorA = premultipliedColors[colorIdx];
191
+ vec4 colorB = premultipliedColors[nextColorIdx];
192
+
193
+ colorA = mix(colorA, colorB, max(0., smoothstep(.0, .45, panelMap) - panelGrad));
194
+ vec4 blended = blendColor(colorA, panelMask, panelMap);
195
+ color = blended.rgb + color * (1. - blended.a);
196
+ opacity = blended.a + opacity * (1. - blended.a);
197
+ }
198
+ }
199
+
200
+ vec3 bgColor = u_colorBack.rgb * u_colorBack.a;
201
+ color = color + bgColor * (1.0 - opacity);
202
+ opacity = opacity + u_colorBack.a * (1.0 - opacity);
203
+
204
+ ${colorBandingFix}
205
+
206
+ fragColor = vec4(color, opacity);
207
+ }
208
+ `;
209
+ export {
210
+ colorPanelsFragmentShader,
211
+ colorPanelsMeta
212
+ };
213
+ //# sourceMappingURL=color-panels.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/shaders/color-panels.ts"],
4
+ "sourcesContent": ["import type { vec4 } from '../types.js';\nimport type { ShaderMotionParams } from '../shader-mount.js';\nimport { sizingVariablesDeclaration, type ShaderSizingParams, type ShaderSizingUniforms } from '../shader-sizing.js';\nimport { declarePI, colorBandingFix } from '../shader-utils.js';\n\nexport const colorPanelsMeta = {\n maxColorCount: 7,\n} as const;\n\n/**\n * Animated, pseudo-3D color panels with dynamic layering and directional blur\n * by Ksenia Kondrashova\n *\n * Uniforms include:\n * - u_colors (vec4[]): Input RGBA colors for panels\n * - u_colorsCount (float): Number of active colors (`u_colors` length)\n * - u_density (float): Panels to show\n * - u_colorBack (vec4): Background color to blend behind panels\n * - u_angle (float): Panel skew angle to morph rect to triangle panels\n * - u_length (float): Length of panels (relative to total height)\n * - u_blur (float): Horizontal blur amount along panel edges\n * - u_fadePosition (float): Controls transparency toward the center of panels\n * - u_colorShuffler (float): Affects how panel colors cycle\n * - u_singleColor (float): Controls blending of adjacent colors per panel\n */\n\nexport const colorPanelsFragmentShader: string = `#version 300 es\nprecision lowp float;\n\nuniform vec2 u_resolution;\n\nuniform float u_time;\nuniform float u_scale;\n\nuniform vec4 u_colors[${colorPanelsMeta.maxColorCount}];\nuniform float u_colorsCount;\nuniform vec4 u_colorBack;\nuniform float u_angle1;\nuniform float u_angle2;\nuniform float u_length;\nuniform float u_blur;\nuniform float u_fadeIn;\nuniform float u_fadeOut;\nuniform float u_density;\nuniform float u_gradient;\n\n${sizingVariablesDeclaration}\n\nout vec4 fragColor;\n\n${declarePI}\n\nvec2 getPanel(float angle, vec2 uv, float invLength) {\n float sinA = sin(angle);\n float cosA = cos(angle);\n\n float denom = sinA - uv.y * cosA;\n if (abs(denom) < 1e-5) return vec2(0.);\n\n float z = uv.y / denom;\n float zLimit = 0.5;\n\n if (z < 0. || z > zLimit) return vec2(0.);\n\n float zRatio = z / zLimit;\n float panelMap = 1.0 - zRatio;\n float x = uv.x * (cosA * z + 1.) * invLength;\n\n float zOffset = zRatio - .5;\n float left = -.5 + zOffset * u_angle1;\n float right = .5 - zOffset * u_angle2;\n\n float blurFactor = (1. - panelMap) * clamp((abs(angle / TWO_PI - .5) - .01) / (-.01), 0., 1.);;\n float blurX = .15 * blurFactor + panelMap * u_blur;\n\n float leftEdge1 = left - .5 * blurX;\n float leftEdge2 = left + blurX;\n float rightEdge1 = right - blurX;\n float rightEdge2 = right + .5 * blurX;\n\n float panel = smoothstep(leftEdge1, leftEdge2, x) * (1.0 - smoothstep(rightEdge1, rightEdge2, x));\n\n return vec2(panel, clamp(panelMap, 0., 1.));\n}\n\nvec4 blendColor(vec4 colorA, float panelMask, float panelMap) {\n float fade = smoothstep(-.2 * (1. - u_fadeOut), u_fadeOut, panelMap)\n * (1. - smoothstep(1. - u_fadeIn, 1., panelMap));\n\n vec3 blendedRGB = mix(vec3(0.), colorA.rgb, fade);\n float blendedAlpha = mix(0., colorA.a, fade);\n\n return vec4(blendedRGB, blendedAlpha) * panelMask;\n}\n\nvoid main() {\n vec2 uv = v_objectUV;\n uv *= 1.25;\n\n float t = .05 * u_time;\n t = fract(t);\n bool reverseTime = (t < 0.5);\n\n vec3 color = vec3(0.);\n float opacity = 0.;\n\n int colorsCount = int(u_colorsCount);\n\n vec4 premultipliedColors[${colorPanelsMeta.maxColorCount}];\n for (int i = 0; i < ${colorPanelsMeta.maxColorCount}; i++) {\n if (i >= colorsCount) break;\n vec4 c = u_colors[i];\n c.rgb *= c.a;\n premultipliedColors[i] = c;\n }\n\n float invLength = 1.5 / (u_length + 0.001);\n\n float totalColorWeight = 0.;\n int panelsNumber = 12;\n\n float densityNormalizer = 1.;\n if (colorsCount == 4) {\n panelsNumber = 16;\n densityNormalizer = 1.34;\n } else if (colorsCount == 5) {\n panelsNumber = 20;\n densityNormalizer = 1.67;\n } else if (colorsCount == 7) {\n panelsNumber = 14;\n densityNormalizer = 1.17;\n }\n\n float fPanelsNumber = float(panelsNumber);\n\n float totalPanelsShape = 0.;\n float panelGrad = 1. - clamp(u_gradient, 0., 1.);\n\n for (int set = 0; set < 2; set++) {\n bool isForward = (set == 0 && !reverseTime) || (set == 1 && reverseTime);\n if (!isForward) continue;\n\n for (int i = 0; i <= 20; i++) {\n if (i >= panelsNumber) break;\n\n int idx = panelsNumber - 1 - i;\n\n float offset = float(idx) / fPanelsNumber;\n if (set == 1) {\n offset += .5;\n }\n\n float densityFract = densityNormalizer * fract(t + offset);\n float angleNorm = densityFract / u_density;\n if (densityFract >= .5 || angleNorm >= .3) continue;\n\n float smoothDensity = clamp((.5 - densityFract) / .1, 0., 1.) * clamp(densityFract / .01, 0., 1.);\n float smoothAngle = clamp((.3 - angleNorm) / .05, 0., 1.);\n if (smoothDensity * smoothAngle < .001) continue;\n\n vec2 panel = getPanel(angleNorm * TWO_PI + PI, uv, invLength);\n float panelMask = panel[0] * smoothDensity * smoothAngle;\n if (panelMask <= .001) continue;\n float panelMap = panel[1];\n\n int colorIdx = idx % colorsCount;\n int nextColorIdx = (idx + 1) % colorsCount;\n\n vec4 colorA = premultipliedColors[colorIdx];\n vec4 colorB = premultipliedColors[nextColorIdx];\n\n colorA = mix(colorA, colorB, max(0., smoothstep(.0, .45, panelMap) - panelGrad));\n vec4 blended = blendColor(colorA, panelMask, panelMap);\n color = blended.rgb + color * (1. - blended.a);\n opacity = blended.a + opacity * (1. - blended.a);\n }\n\n\n for (int i = 0; i <= 20; i++) {\n if (i >= panelsNumber) break;\n\n int idx = panelsNumber - 1 - i;\n\n float offset = float(idx) / fPanelsNumber;\n if (set == 0) {\n offset += .5;\n }\n\n float densityFract = densityNormalizer * fract(-t + offset);\n float angleNorm = -densityFract / u_density;\n if (densityFract >= .5 || angleNorm < -.3) continue;\n\n float smoothDensity = clamp((.5 - densityFract) / .1, 0., 1.) * clamp(densityFract / .01, 0., 1.);\n float smoothAngle = clamp((angleNorm + .3) / .05, 0., 1.);\n if (smoothDensity * smoothAngle < .001) continue;\n\n vec2 panel = getPanel(angleNorm * TWO_PI + PI, uv, invLength);\n float panelMask = panel[0] * smoothDensity * smoothAngle;\n if (panelMask <= .001) continue;\n float panelMap = panel[1];\n\n int colorIdx = (colorsCount - (idx % colorsCount)) % colorsCount;\n if (colorIdx < 0) colorIdx += colorsCount;\n int nextColorIdx = (colorIdx + 1) % colorsCount;\n\n vec4 colorA = premultipliedColors[colorIdx];\n vec4 colorB = premultipliedColors[nextColorIdx];\n\n colorA = mix(colorA, colorB, max(0., smoothstep(.0, .45, panelMap) - panelGrad));\n vec4 blended = blendColor(colorA, panelMask, panelMap);\n color = blended.rgb + color * (1. - blended.a);\n opacity = blended.a + opacity * (1. - blended.a);\n }\n }\n\n vec3 bgColor = u_colorBack.rgb * u_colorBack.a;\n color = color + bgColor * (1.0 - opacity);\n opacity = opacity + u_colorBack.a * (1.0 - opacity);\n\n ${colorBandingFix}\n\n fragColor = vec4(color, opacity);\n}\n`;\n\nexport interface ColorPanelsUniforms extends ShaderSizingUniforms {\n u_colors: vec4[];\n u_colorsCount: number;\n u_colorBack: [number, number, number, number];\n u_angle1: number;\n u_angle2: number;\n u_length: number;\n u_blur: number;\n u_fadeIn: number;\n u_fadeOut: number;\n u_density: number;\n u_gradient: number;\n}\n\nexport interface ColorPanelsParams extends ShaderSizingParams, ShaderMotionParams {\n colors?: string[];\n colorBack?: string;\n angle1?: number;\n angle2?: number;\n length?: number;\n blur?: number;\n fadeIn?: number;\n fadeOut?: number;\n density?: number;\n gradient?: number;\n}\n"],
5
+ "mappings": ";;;;;AAEA,SAAS,kCAAsF;AAC/F,SAAS,WAAW,uBAAuB;AAEpC,MAAM,kBAAkB;AAAA,EAC7B,eAAe;AACjB;AAmBO,MAAM,4BAAoC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,wBAQzB,gBAAgB,aAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYnD,0BAA0B;AAAA;AAAA;AAAA;AAAA,EAI1B,SAAS;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,6BA0DkB,gBAAgB,aAAa;AAAA,wBAClC,gBAAgB,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,IA8GjD,eAAe;AAAA;AAAA;AAAA;AAAA;",
6
+ "names": []
7
+ }
@@ -1,13 +1,13 @@
1
- import type { ShaderMotionParams } from '../shader-mount';
2
- import { type ShaderSizingParams, type ShaderSizingUniforms } from '../shader-sizing';
1
+ import type { ShaderMotionParams } from '../shader-mount.js';
2
+ import { type ShaderSizingParams, type ShaderSizingUniforms } from '../shader-sizing.js';
3
3
  /**
4
4
  * Dithering Fragment Shader by Ksenia Kondrashova
5
5
  * Applies dithering (4 dithering types available) over the
6
6
  * abstract shapes animation (7 animated shapes available)
7
7
  *
8
8
  * Uniforms include:
9
- * - u_color1: background color, RGBA
10
- * - u_color2: pixels color, RGBA
9
+ * - u_colorBack: background color, RGBA
10
+ * - u_colorFront: pixels color, RGBA
11
11
  *
12
12
  * - u_shape (float, used as int, 1 to 7):
13
13
  * --- shape = 1: Simplex noise pattern
@@ -29,15 +29,15 @@ import { type ShaderSizingParams, type ShaderSizingUniforms } from '../shader-si
29
29
  */
30
30
  export declare const ditheringFragmentShader: string;
31
31
  export interface DitheringUniforms extends ShaderSizingUniforms {
32
- u_color1: [number, number, number, number];
33
- u_color2: [number, number, number, number];
32
+ u_colorBack: [number, number, number, number];
33
+ u_colorFront: [number, number, number, number];
34
34
  u_shape: (typeof DitheringShapes)[DitheringShape];
35
35
  u_type: (typeof DitheringTypes)[DitheringType];
36
36
  u_pxSize: number;
37
37
  }
38
38
  export interface DitheringParams extends ShaderSizingParams, ShaderMotionParams {
39
- color1?: string;
40
- color2?: string;
39
+ colorBack?: string;
40
+ colorFront?: string;
41
41
  shape?: DitheringShape;
42
42
  type?: DitheringType;
43
43
  pxSize?: number;
@@ -7,8 +7,8 @@ import {
7
7
  sizingUniformsDeclaration,
8
8
  sizingUV,
9
9
  drawSizingHelpers
10
- } from "../shader-sizing";
11
- import { declareSimplexNoise, declarePI, declareRandom } from "../shader-utils";
10
+ } from "../shader-sizing.js";
11
+ import { declareSimplexNoise, declarePI, declareRandom } from "../shader-utils.js";
12
12
  const ditheringFragmentShader = `#version 300 es
13
13
  precision mediump float;
14
14
 
@@ -18,8 +18,8 @@ uniform float u_pixelRatio;
18
18
 
19
19
  ${sizingUniformsDeclaration}
20
20
 
21
- uniform vec4 u_color1;
22
- uniform vec4 u_color2;
21
+ uniform vec4 u_colorBack;
22
+ uniform vec4 u_colorFront;
23
23
  uniform float u_shape;
24
24
  uniform float u_type;
25
25
  uniform float u_pxSize;
@@ -174,8 +174,16 @@ void main() {
174
174
  dithering -= .5;
175
175
  float res = step(.5, shape + dithering);
176
176
 
177
- vec3 color = mix(u_color1.rgb, u_color2.rgb, res);
178
- float opacity = mix(u_color1.a, u_color2.a, res);
177
+ vec3 fgColor = u_colorFront.rgb * u_colorFront.a;
178
+ float fgOpacity = u_colorFront.a;
179
+ vec3 bgColor = u_colorBack.rgb * u_colorBack.a;
180
+ float bgOpacity = u_colorBack.a;
181
+
182
+ vec3 color = fgColor * res;
183
+ float opacity = fgOpacity * res;
184
+
185
+ color += bgColor * (1. - opacity);
186
+ opacity += bgOpacity * (1. - opacity);
179
187
 
180
188
  #ifdef ADD_HELPERS
181
189
  vec2 helperBox = objectHelperBox;
@@ -200,7 +208,7 @@ const DitheringShapes = {
200
208
  sphere: 7
201
209
  };
202
210
  const DitheringTypes = {
203
- random: 1,
211
+ "random": 1,
204
212
  "2x2": 2,
205
213
  "4x4": 3,
206
214
  "8x8": 4