@paper-design/shaders-react 0.0.29 → 0.0.30

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 (67) hide show
  1. package/dist/color-props-are-equal.d.ts +6 -0
  2. package/dist/color-props-are-equal.js +34 -0
  3. package/dist/color-props-are-equal.js.map +7 -0
  4. package/dist/index.d.ts +46 -41
  5. package/dist/index.js +61 -1872
  6. package/dist/index.js.map +4 -4
  7. package/dist/shader-mount.d.ts +15 -13
  8. package/dist/shader-mount.js +120 -0
  9. package/dist/shader-mount.js.map +7 -0
  10. package/dist/shaders/dithering.d.ts +15 -0
  11. package/dist/shaders/dithering.js +179 -0
  12. package/dist/shaders/dithering.js.map +7 -0
  13. package/dist/shaders/dot-grid.d.ts +6 -20
  14. package/dist/shaders/dot-grid.js +230 -0
  15. package/dist/shaders/dot-grid.js.map +7 -0
  16. package/dist/shaders/dot-orbit.d.ts +6 -18
  17. package/dist/shaders/dot-orbit.js +77 -0
  18. package/dist/shaders/dot-orbit.js.map +7 -0
  19. package/dist/shaders/god-rays.d.ts +6 -22
  20. package/dist/shaders/god-rays.js +160 -0
  21. package/dist/shaders/god-rays.js.map +7 -0
  22. package/dist/shaders/grain-gradient.d.ts +16 -0
  23. package/dist/shaders/grain-gradient.js +197 -0
  24. package/dist/shaders/grain-gradient.js.map +7 -0
  25. package/dist/shaders/liquid-metal.d.ts +9 -0
  26. package/dist/shaders/liquid-metal.js +87 -0
  27. package/dist/shaders/liquid-metal.js.map +7 -0
  28. package/dist/shaders/mesh-gradient.d.ts +7 -15
  29. package/dist/shaders/mesh-gradient.js +104 -0
  30. package/dist/shaders/mesh-gradient.js.map +7 -0
  31. package/dist/shaders/metaballs.d.ts +6 -16
  32. package/dist/shaders/metaballs.js +72 -0
  33. package/dist/shaders/metaballs.js.map +7 -0
  34. package/dist/shaders/neuro-noise.d.ts +6 -14
  35. package/dist/shaders/neuro-noise.js +82 -0
  36. package/dist/shaders/neuro-noise.js.map +7 -0
  37. package/dist/shaders/perlin-noise.d.ts +6 -17
  38. package/dist/shaders/perlin-noise.js +183 -0
  39. package/dist/shaders/perlin-noise.js.map +7 -0
  40. package/dist/shaders/pulsing-border.d.ts +11 -0
  41. package/dist/shaders/pulsing-border.js +153 -0
  42. package/dist/shaders/pulsing-border.js.map +7 -0
  43. package/dist/shaders/simplex-noise.d.ts +9 -0
  44. package/dist/shaders/simplex-noise.js +80 -0
  45. package/dist/shaders/simplex-noise.js.map +7 -0
  46. package/dist/shaders/smoke-ring.d.ts +8 -18
  47. package/dist/shaders/smoke-ring.js +134 -0
  48. package/dist/shaders/smoke-ring.js.map +7 -0
  49. package/dist/shaders/spiral.d.ts +6 -23
  50. package/dist/shaders/spiral.js +218 -0
  51. package/dist/shaders/spiral.js.map +7 -0
  52. package/dist/shaders/swirl.d.ts +12 -0
  53. package/dist/shaders/swirl.js +137 -0
  54. package/dist/shaders/swirl.js.map +7 -0
  55. package/dist/shaders/voronoi.d.ts +7 -28
  56. package/dist/shaders/voronoi.js +102 -0
  57. package/dist/shaders/voronoi.js.map +7 -0
  58. package/dist/shaders/warp.d.ts +6 -23
  59. package/dist/shaders/warp.js +290 -0
  60. package/dist/shaders/warp.js.map +7 -0
  61. package/dist/shaders/waves.d.ts +6 -19
  62. package/dist/shaders/waves.js +178 -0
  63. package/dist/shaders/waves.js.map +7 -0
  64. package/dist/use-merge-refs.js +48 -0
  65. package/dist/use-merge-refs.js.map +7 -0
  66. package/package.json +13 -4
  67. package/dist/shaders/stepped-simplex-noise.d.ts +0 -20
@@ -0,0 +1,197 @@
1
+ /* * * * * * * * * * * * * * * * * * * * * * * * * * * *
2
+ * Paper Shaders *
3
+ * https://github.com/paper-design/shaders *
4
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * */
5
+
6
+ import { memo } from "react";
7
+ import { ShaderMount } from "../shader-mount";
8
+ import {
9
+ getShaderColorFromString,
10
+ grainGradientFragmentShader,
11
+ ShaderFitOptions,
12
+ defaultPatternSizing,
13
+ defaultObjectSizing
14
+ } from "@paper-design/shaders";
15
+ import { jsx } from "react/jsx-runtime";
16
+ const defaultPreset = {
17
+ name: "Default",
18
+ params: {
19
+ ...defaultPatternSizing,
20
+ speed: 1,
21
+ frame: 0,
22
+ colors: ["hsla(210, 100%, 3%, 1)", "hsla(32, 89%, 40%, 1)", "hsla(46, 60%, 60%, 1)", "hsla(39, 28%, 81%, 1)"],
23
+ softness: 0.7,
24
+ intensity: 0.15,
25
+ noise: 0.5,
26
+ shape: 1
27
+ }
28
+ };
29
+ const dotsPreset = {
30
+ name: "Dots",
31
+ params: {
32
+ ...defaultPatternSizing,
33
+ scale: 0.6,
34
+ speed: 1,
35
+ frame: 0,
36
+ colors: ["hsla(0, 100%, 2%, 1)", "hsla(0, 100%, 22%, 1)", "hsla(210, 100%, 50%, 1)", "hsla(48, 52%, 90%, 1)"],
37
+ softness: 0.75,
38
+ intensity: 0.15,
39
+ noise: 0.7,
40
+ shape: 2
41
+ }
42
+ };
43
+ const truchetPreset = {
44
+ name: "Truchet",
45
+ params: {
46
+ ...defaultPatternSizing,
47
+ speed: 1,
48
+ frame: 0,
49
+ colors: ["hsla(0, 100%, 2%, 1)", "hsla(24, 100%, 22%, 1)", "hsla(35, 85%, 69%, 1)", "hsla(100, 52%, 45%, 1)"],
50
+ softness: 0,
51
+ intensity: 0.2,
52
+ noise: 1,
53
+ shape: 3
54
+ }
55
+ };
56
+ const cornersPreset = {
57
+ name: "Corners",
58
+ params: {
59
+ ...defaultObjectSizing,
60
+ speed: 1,
61
+ frame: 0,
62
+ colors: ["hsla(210, 80%, 6%, 1)", "hsla(200, 100%, 40%, 1)", "hsla(170, 100%, 50%, 1)", "hsla(50, 100%, 50%, 1)"],
63
+ softness: 0.4,
64
+ intensity: 0.35,
65
+ noise: 0.35,
66
+ shape: 4
67
+ }
68
+ };
69
+ const ripplePreset = {
70
+ name: "Ripple",
71
+ params: {
72
+ ...defaultObjectSizing,
73
+ scale: 0.5,
74
+ speed: 1,
75
+ frame: 0,
76
+ colors: ["hsla(30, 100%, 4%, 1)", "hsla(25, 100%, 22%, 1)", "hsla(140, 70%, 70%, 1)", "hsla(4305, 64%, 11%, 1)"],
77
+ softness: 0.5,
78
+ intensity: 0.5,
79
+ noise: 0.5,
80
+ shape: 5
81
+ }
82
+ };
83
+ const blobPreset = {
84
+ name: "Blob",
85
+ params: {
86
+ ...defaultObjectSizing,
87
+ scale: 1.3,
88
+ speed: 1,
89
+ frame: 0,
90
+ colors: ["hsla(240, 30%, 8%, 1)", "hsla(200, 30%, 35%, 1)", "hsla(50, 30%, 55%, 1)", "hsla(90, 25%, 45%, 1)"],
91
+ softness: 0,
92
+ intensity: 0.15,
93
+ noise: 0.5,
94
+ shape: 6
95
+ }
96
+ };
97
+ const spherePreset = {
98
+ name: "Sphere",
99
+ params: {
100
+ ...defaultObjectSizing,
101
+ speed: 1,
102
+ frame: 0,
103
+ colors: ["hsla(230, 100%, 5%, 1)", "hsla(210, 100%, 35%, 1)", "hsla(180, 95%, 60%, 1)", "hsla(130, 80%, 45%, 1)"],
104
+ softness: 1,
105
+ intensity: 0.15,
106
+ noise: 0.5,
107
+ shape: 7
108
+ }
109
+ };
110
+ const moonPreset = {
111
+ name: "Moon",
112
+ params: {
113
+ ...defaultObjectSizing,
114
+ scale: 0.6,
115
+ speed: 1,
116
+ frame: 0,
117
+ colors: ["hsla(0, 0%, 0%, 1)", "hsla(0, 0%, 0%, 1)", "hsla(240, 8%, 17%, 1)", "hsla(40, 100%, 90%, 1)"],
118
+ softness: 1,
119
+ intensity: 0.56,
120
+ noise: 1,
121
+ shape: 7
122
+ }
123
+ };
124
+ const grainGradientPresets = [
125
+ cornersPreset,
126
+ defaultPreset,
127
+ dotsPreset,
128
+ truchetPreset,
129
+ ripplePreset,
130
+ blobPreset,
131
+ spherePreset,
132
+ moonPreset
133
+ ];
134
+ const GrainGradient = memo(function GrainGradientImpl({
135
+ // Own props
136
+ speed = defaultPreset.params.speed,
137
+ frame = defaultPreset.params.frame,
138
+ colors = defaultPreset.params.colors,
139
+ softness = defaultPreset.params.softness,
140
+ intensity = defaultPreset.params.intensity,
141
+ noise = defaultPreset.params.noise,
142
+ shape = defaultPreset.params.shape,
143
+ // Sizing props
144
+ fit = defaultPreset.params.fit,
145
+ scale = defaultPreset.params.scale,
146
+ rotation = defaultPreset.params.rotation,
147
+ originX = defaultPreset.params.originX,
148
+ originY = defaultPreset.params.originY,
149
+ offsetX = defaultPreset.params.offsetX,
150
+ offsetY = defaultPreset.params.offsetY,
151
+ worldWidth = defaultPreset.params.worldWidth,
152
+ worldHeight = defaultPreset.params.worldHeight,
153
+ ...props
154
+ }) {
155
+ const uniforms = {
156
+ // Own uniforms
157
+ u_colors: colors.map(getShaderColorFromString),
158
+ u_colorsCount: colors.length,
159
+ u_softness: softness,
160
+ u_intensity: intensity,
161
+ u_noise: noise,
162
+ u_shape: shape,
163
+ // Sizing uniforms
164
+ u_fit: ShaderFitOptions[fit],
165
+ u_scale: scale,
166
+ u_rotation: rotation,
167
+ u_offsetX: offsetX,
168
+ u_offsetY: offsetY,
169
+ u_originX: originX,
170
+ u_originY: originY,
171
+ u_worldWidth: worldWidth,
172
+ u_worldHeight: worldHeight
173
+ };
174
+ return /* @__PURE__ */ jsx(
175
+ ShaderMount,
176
+ {
177
+ ...props,
178
+ speed,
179
+ frame,
180
+ fragmentShader: grainGradientFragmentShader,
181
+ uniforms
182
+ }
183
+ );
184
+ });
185
+ export {
186
+ GrainGradient,
187
+ blobPreset,
188
+ cornersPreset,
189
+ defaultPreset,
190
+ dotsPreset,
191
+ grainGradientPresets,
192
+ moonPreset,
193
+ ripplePreset,
194
+ spherePreset,
195
+ truchetPreset
196
+ };
197
+ //# sourceMappingURL=grain-gradient.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/shaders/grain-gradient.tsx"],
4
+ "sourcesContent": ["import { memo } from 'react';\nimport { ShaderMount, type ShaderComponentProps } from '../shader-mount';\nimport {\n getShaderColorFromString,\n grainGradientFragmentShader,\n ShaderFitOptions,\n type GrainGradientUniforms,\n type GrainGradientParams,\n type ShaderPreset,\n defaultPatternSizing,\n defaultObjectSizing,\n} from '@paper-design/shaders';\n\nexport interface GrainGradientProps extends ShaderComponentProps, GrainGradientParams {}\n\ntype GrainGradientPreset = ShaderPreset<GrainGradientParams>;\n\n// Due to Leva controls limitation:\n// 1) keep default colors in HSLA format to keep alpha channel\n// 2) don't use decimal values on HSL values (to avoid button highlight bug)\n\nexport const defaultPreset: GrainGradientPreset = {\n name: 'Default',\n params: {\n ...defaultPatternSizing,\n speed: 1,\n frame: 0,\n colors: ['hsla(210, 100%, 3%, 1)', 'hsla(32, 89%, 40%, 1)', 'hsla(46, 60%, 60%, 1)', 'hsla(39, 28%, 81%, 1)'],\n softness: 0.7,\n intensity: 0.15,\n noise: 0.5,\n shape: 1,\n },\n};\n\nexport const dotsPreset: GrainGradientPreset = {\n name: 'Dots',\n params: {\n ...defaultPatternSizing,\n scale: 0.6,\n speed: 1,\n frame: 0,\n colors: ['hsla(0, 100%, 2%, 1)', 'hsla(0, 100%, 22%, 1)', 'hsla(210, 100%, 50%, 1)', 'hsla(48, 52%, 90%, 1)'],\n softness: 0.75,\n intensity: 0.15,\n noise: 0.7,\n shape: 2,\n },\n};\n\nexport const truchetPreset: GrainGradientPreset = {\n name: 'Truchet',\n params: {\n ...defaultPatternSizing,\n speed: 1,\n frame: 0,\n colors: ['hsla(0, 100%, 2%, 1)', 'hsla(24, 100%, 22%, 1)', 'hsla(35, 85%, 69%, 1)', 'hsla(100, 52%, 45%, 1)'],\n softness: 0,\n intensity: 0.2,\n noise: 1,\n shape: 3,\n },\n};\n\nexport const cornersPreset: GrainGradientPreset = {\n name: 'Corners',\n params: {\n ...defaultObjectSizing,\n speed: 1,\n frame: 0,\n colors: ['hsla(210, 80%, 6%, 1)', 'hsla(200, 100%, 40%, 1)', 'hsla(170, 100%, 50%, 1)', 'hsla(50, 100%, 50%, 1)'],\n softness: 0.4,\n intensity: 0.35,\n noise: 0.35,\n shape: 4,\n },\n};\n\nexport const ripplePreset: GrainGradientPreset = {\n name: 'Ripple',\n params: {\n ...defaultObjectSizing,\n scale: 0.5,\n speed: 1,\n frame: 0,\n colors: ['hsla(30, 100%, 4%, 1)', 'hsla(25, 100%, 22%, 1)', 'hsla(140, 70%, 70%, 1)', 'hsla(4305, 64%, 11%, 1)'],\n softness: 0.5,\n intensity: 0.5,\n noise: 0.5,\n shape: 5,\n },\n};\n\nexport const blobPreset: GrainGradientPreset = {\n name: 'Blob',\n params: {\n ...defaultObjectSizing,\n scale: 1.3,\n speed: 1,\n frame: 0,\n colors: ['hsla(240, 30%, 8%, 1)', 'hsla(200, 30%, 35%, 1)', 'hsla(50, 30%, 55%, 1)', 'hsla(90, 25%, 45%, 1)'],\n softness: 0,\n intensity: 0.15,\n noise: 0.5,\n shape: 6,\n },\n};\n\nexport const spherePreset: GrainGradientPreset = {\n name: 'Sphere',\n params: {\n ...defaultObjectSizing,\n speed: 1,\n frame: 0,\n colors: ['hsla(230, 100%, 5%, 1)', 'hsla(210, 100%, 35%, 1)', 'hsla(180, 95%, 60%, 1)', 'hsla(130, 80%, 45%, 1)'],\n softness: 1,\n intensity: 0.15,\n noise: 0.5,\n shape: 7,\n },\n};\n\nexport const moonPreset: GrainGradientPreset = {\n name: 'Moon',\n params: {\n ...defaultObjectSizing,\n scale: 0.6,\n speed: 1,\n frame: 0,\n colors: ['hsla(0, 0%, 0%, 1)', 'hsla(0, 0%, 0%, 1)', 'hsla(240, 8%, 17%, 1)', 'hsla(40, 100%, 90%, 1)'],\n softness: 1,\n intensity: 0.56,\n noise: 1,\n shape: 7,\n },\n};\n\nexport const grainGradientPresets: GrainGradientPreset[] = [\n cornersPreset,\n defaultPreset,\n dotsPreset,\n truchetPreset,\n ripplePreset,\n blobPreset,\n spherePreset,\n moonPreset,\n];\n\nexport const GrainGradient: React.FC<GrainGradientProps> = memo(function GrainGradientImpl({\n // Own props\n speed = defaultPreset.params.speed,\n frame = defaultPreset.params.frame,\n colors = defaultPreset.params.colors,\n softness = defaultPreset.params.softness,\n intensity = defaultPreset.params.intensity,\n noise = defaultPreset.params.noise,\n shape = defaultPreset.params.shape,\n\n // Sizing props\n fit = defaultPreset.params.fit,\n scale = defaultPreset.params.scale,\n rotation = defaultPreset.params.rotation,\n originX = defaultPreset.params.originX,\n originY = defaultPreset.params.originY,\n offsetX = defaultPreset.params.offsetX,\n offsetY = defaultPreset.params.offsetY,\n worldWidth = defaultPreset.params.worldWidth,\n worldHeight = defaultPreset.params.worldHeight,\n ...props\n}) {\n const uniforms = {\n // Own uniforms\n u_colors: colors.map(getShaderColorFromString),\n u_colorsCount: colors.length,\n u_softness: softness,\n u_intensity: intensity,\n u_noise: noise,\n u_shape: shape,\n\n // Sizing uniforms\n u_fit: ShaderFitOptions[fit],\n u_scale: scale,\n u_rotation: rotation,\n u_offsetX: offsetX,\n u_offsetY: offsetY,\n u_originX: originX,\n u_originY: originY,\n u_worldWidth: worldWidth,\n u_worldHeight: worldHeight,\n } satisfies GrainGradientUniforms;\n\n return (\n <ShaderMount\n {...props}\n speed={speed}\n frame={frame}\n fragmentShader={grainGradientFragmentShader}\n uniforms={uniforms}\n />\n );\n});\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -0,0 +1,9 @@
1
+ import { type ShaderComponentProps } from '../shader-mount';
2
+ import { type LiquidMetalParams, type ShaderPreset } from '@paper-design/shaders';
3
+ export interface LiquidMetalProps extends ShaderComponentProps, LiquidMetalParams {
4
+ }
5
+ type LiquidMetalPreset = ShaderPreset<LiquidMetalParams>;
6
+ export declare const defaultPreset: LiquidMetalPreset;
7
+ export declare const liquidMetalPresets: LiquidMetalPreset[];
8
+ export declare const LiquidMetal: React.FC<LiquidMetalProps>;
9
+ export {};
@@ -0,0 +1,87 @@
1
+ /* * * * * * * * * * * * * * * * * * * * * * * * * * * *
2
+ * Paper Shaders *
3
+ * https://github.com/paper-design/shaders *
4
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * */
5
+
6
+ import { memo } from "react";
7
+ import { ShaderMount } from "../shader-mount";
8
+ import { colorPropsAreEqual } from "../color-props-are-equal";
9
+ import {
10
+ getShaderColorFromString,
11
+ liquidMetalFragmentShader,
12
+ ShaderFitOptions,
13
+ defaultObjectSizing
14
+ } from "@paper-design/shaders";
15
+ import { jsx } from "react/jsx-runtime";
16
+ const defaultPreset = {
17
+ name: "Default",
18
+ params: {
19
+ ...defaultObjectSizing,
20
+ speed: 1,
21
+ frame: 0,
22
+ patternBlur: 5e-3,
23
+ patternScale: 3,
24
+ dispersion: 0.015,
25
+ liquid: 0.07,
26
+ shape: 0,
27
+ worldWidth: 0,
28
+ worldHeight: 0
29
+ }
30
+ };
31
+ const liquidMetalPresets = [defaultPreset];
32
+ const LiquidMetal = memo(function LiquidMetalImpl({
33
+ // Own props
34
+ speed = defaultPreset.params.speed,
35
+ frame = defaultPreset.params.frame,
36
+ patternBlur = defaultPreset.params.patternBlur,
37
+ patternScale = defaultPreset.params.patternScale,
38
+ dispersion = defaultPreset.params.dispersion,
39
+ liquid = defaultPreset.params.liquid,
40
+ shape = defaultPreset.params.shape,
41
+ // Sizing props
42
+ fit = defaultPreset.params.fit,
43
+ scale = defaultPreset.params.scale,
44
+ rotation = defaultPreset.params.rotation,
45
+ originX = defaultPreset.params.originX,
46
+ originY = defaultPreset.params.originY,
47
+ offsetX = defaultPreset.params.offsetX,
48
+ offsetY = defaultPreset.params.offsetY,
49
+ worldWidth = defaultPreset.params.worldWidth,
50
+ worldHeight = defaultPreset.params.worldHeight,
51
+ ...props
52
+ }) {
53
+ const uniforms = {
54
+ // Own uniforms
55
+ u_patternBlur: patternBlur,
56
+ u_patternScale: patternScale,
57
+ u_dispersion: dispersion,
58
+ u_liquid: liquid,
59
+ u_shape: shape,
60
+ // Sizing uniforms
61
+ u_fit: ShaderFitOptions[fit],
62
+ u_scale: scale,
63
+ u_rotation: rotation,
64
+ u_offsetX: offsetX,
65
+ u_offsetY: offsetY,
66
+ u_originX: originX,
67
+ u_originY: originY,
68
+ u_worldWidth: worldWidth,
69
+ u_worldHeight: worldHeight
70
+ };
71
+ return /* @__PURE__ */ jsx(
72
+ ShaderMount,
73
+ {
74
+ ...props,
75
+ speed,
76
+ frame,
77
+ fragmentShader: liquidMetalFragmentShader,
78
+ uniforms
79
+ }
80
+ );
81
+ }, colorPropsAreEqual);
82
+ export {
83
+ LiquidMetal,
84
+ defaultPreset,
85
+ liquidMetalPresets
86
+ };
87
+ //# sourceMappingURL=liquid-metal.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/shaders/liquid-metal.tsx"],
4
+ "sourcesContent": ["import { memo } from 'react';\nimport { ShaderMount, type ShaderComponentProps } from '../shader-mount';\nimport { colorPropsAreEqual } from '../color-props-are-equal';\nimport {\n getShaderColorFromString,\n liquidMetalFragmentShader,\n ShaderFitOptions,\n type LiquidMetalUniforms,\n type LiquidMetalParams,\n type ShaderPreset,\n defaultObjectSizing,\n} from '@paper-design/shaders';\n\nexport interface LiquidMetalProps extends ShaderComponentProps, LiquidMetalParams {}\n\ntype LiquidMetalPreset = ShaderPreset<LiquidMetalParams>;\n\n// Due to Leva controls limitation:\n// 1) keep default colors in HSLA format to keep alpha channel\n// 2) don't use decimal values on HSL values (to avoid button highlight bug)\n\nexport const defaultPreset: LiquidMetalPreset = {\n name: 'Default',\n params: {\n ...defaultObjectSizing,\n speed: 1,\n frame: 0,\n patternBlur: 0.005,\n patternScale: 3,\n dispersion: 0.015,\n liquid: 0.07,\n shape: 0,\n worldWidth: 0,\n worldHeight: 0,\n },\n};\n\nexport const liquidMetalPresets: LiquidMetalPreset[] = [defaultPreset];\n\nexport const LiquidMetal: React.FC<LiquidMetalProps> = memo(function LiquidMetalImpl({\n // Own props\n speed = defaultPreset.params.speed,\n frame = defaultPreset.params.frame,\n patternBlur = defaultPreset.params.patternBlur,\n patternScale = defaultPreset.params.patternScale,\n dispersion = defaultPreset.params.dispersion,\n liquid = defaultPreset.params.liquid,\n shape = defaultPreset.params.shape,\n\n // Sizing props\n fit = defaultPreset.params.fit,\n scale = defaultPreset.params.scale,\n rotation = defaultPreset.params.rotation,\n originX = defaultPreset.params.originX,\n originY = defaultPreset.params.originY,\n offsetX = defaultPreset.params.offsetX,\n offsetY = defaultPreset.params.offsetY,\n worldWidth = defaultPreset.params.worldWidth,\n worldHeight = defaultPreset.params.worldHeight,\n ...props\n}: LiquidMetalProps) {\n const uniforms = {\n // Own uniforms\n u_patternBlur: patternBlur,\n u_patternScale: patternScale,\n u_dispersion: dispersion,\n u_liquid: liquid,\n u_shape: shape,\n\n // Sizing uniforms\n u_fit: ShaderFitOptions[fit],\n u_scale: scale,\n u_rotation: rotation,\n u_offsetX: offsetX,\n u_offsetY: offsetY,\n u_originX: originX,\n u_originY: originY,\n u_worldWidth: worldWidth,\n u_worldHeight: worldHeight,\n } satisfies LiquidMetalUniforms;\n\n return (\n <ShaderMount\n {...props}\n speed={speed}\n frame={frame}\n fragmentShader={liquidMetalFragmentShader}\n uniforms={uniforms}\n />\n );\n}, colorPropsAreEqual);\n"],
5
+ "mappings": ";;;;;AAAA,SAAS,YAAY;AACrB,SAAS,mBAA8C;AACvD,SAAS,0BAA0B;AACnC;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EAIA;AAAA,OACK;AAuEH;AA7DG,MAAM,gBAAmC;AAAA,EAC9C,MAAM;AAAA,EACN,QAAQ;AAAA,IACN,GAAG;AAAA,IACH,OAAO;AAAA,IACP,OAAO;AAAA,IACP,aAAa;AAAA,IACb,cAAc;AAAA,IACd,YAAY;AAAA,IACZ,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,YAAY;AAAA,IACZ,aAAa;AAAA,EACf;AACF;AAEO,MAAM,qBAA0C,CAAC,aAAa;AAE9D,MAAM,cAA0C,KAAK,SAAS,gBAAgB;AAAA;AAAA,EAEnF,QAAQ,cAAc,OAAO;AAAA,EAC7B,QAAQ,cAAc,OAAO;AAAA,EAC7B,cAAc,cAAc,OAAO;AAAA,EACnC,eAAe,cAAc,OAAO;AAAA,EACpC,aAAa,cAAc,OAAO;AAAA,EAClC,SAAS,cAAc,OAAO;AAAA,EAC9B,QAAQ,cAAc,OAAO;AAAA;AAAA,EAG7B,MAAM,cAAc,OAAO;AAAA,EAC3B,QAAQ,cAAc,OAAO;AAAA,EAC7B,WAAW,cAAc,OAAO;AAAA,EAChC,UAAU,cAAc,OAAO;AAAA,EAC/B,UAAU,cAAc,OAAO;AAAA,EAC/B,UAAU,cAAc,OAAO;AAAA,EAC/B,UAAU,cAAc,OAAO;AAAA,EAC/B,aAAa,cAAc,OAAO;AAAA,EAClC,cAAc,cAAc,OAAO;AAAA,EACnC,GAAG;AACL,GAAqB;AACnB,QAAM,WAAW;AAAA;AAAA,IAEf,eAAe;AAAA,IACf,gBAAgB;AAAA,IAChB,cAAc;AAAA,IACd,UAAU;AAAA,IACV,SAAS;AAAA;AAAA,IAGT,OAAO,iBAAiB,GAAG;AAAA,IAC3B,SAAS;AAAA,IACT,YAAY;AAAA,IACZ,WAAW;AAAA,IACX,WAAW;AAAA,IACX,WAAW;AAAA,IACX,WAAW;AAAA,IACX,cAAc;AAAA,IACd,eAAe;AAAA,EACjB;AAEA,SACE;AAAA,IAAC;AAAA;AAAA,MACE,GAAG;AAAA,MACJ;AAAA,MACA;AAAA,MACA,gBAAgB;AAAA,MAChB;AAAA;AAAA,EACF;AAEJ,GAAG,kBAAkB;",
6
+ "names": []
7
+ }
@@ -1,19 +1,11 @@
1
- import { type GlobalParams, type ShaderMountProps } from '../shader-mount';
2
- export type MeshGradientParams = {
3
- color1?: string;
4
- color2?: string;
5
- color3?: string;
6
- color4?: string;
7
- } & GlobalParams;
8
- export type MeshGradientProps = Omit<ShaderMountProps, 'fragmentShader'> & MeshGradientParams;
9
- type MeshGradientPreset = {
10
- name: string;
11
- params: Required<MeshGradientParams>;
12
- style?: React.CSSProperties;
13
- };
1
+ import { type ShaderComponentProps } from '../shader-mount';
2
+ import { type MeshGradientParams, type ShaderPreset } from '@paper-design/shaders';
3
+ export interface MeshGradientProps extends ShaderComponentProps, MeshGradientParams {
4
+ }
5
+ type MeshGradientPreset = ShaderPreset<MeshGradientParams>;
14
6
  export declare const defaultPreset: MeshGradientPreset;
7
+ export declare const purplePreset: MeshGradientPreset;
15
8
  export declare const beachPreset: MeshGradientPreset;
16
- export declare const fadedPreset: MeshGradientPreset;
17
9
  export declare const meshGradientPresets: MeshGradientPreset[];
18
- export declare const MeshGradient: ({ color1, color2, color3, color4, ...props }: MeshGradientProps) => React.ReactElement;
10
+ export declare const MeshGradient: React.FC<MeshGradientProps>;
19
11
  export {};
@@ -0,0 +1,104 @@
1
+ /* * * * * * * * * * * * * * * * * * * * * * * * * * * *
2
+ * Paper Shaders *
3
+ * https://github.com/paper-design/shaders *
4
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * */
5
+
6
+ import { memo } from "react";
7
+ import { ShaderMount } from "../shader-mount";
8
+ import { colorPropsAreEqual } from "../color-props-are-equal";
9
+ import {
10
+ defaultObjectSizing,
11
+ getShaderColorFromString,
12
+ meshGradientFragmentShader,
13
+ ShaderFitOptions
14
+ } from "@paper-design/shaders";
15
+ import { jsx } from "react/jsx-runtime";
16
+ const defaultPreset = {
17
+ name: "Default",
18
+ params: {
19
+ ...defaultObjectSizing,
20
+ speed: 1,
21
+ frame: 4e4,
22
+ colors: ["hsla(259, 100%, 50%, 1)", "hsla(150, 100%, 50%, 1)", "hsla(48, 100%, 50%, 1)", "hsla(295, 100%, 50%, 1)"],
23
+ distortion: 0.8,
24
+ swirl: 0.1
25
+ }
26
+ };
27
+ const purplePreset = {
28
+ name: "Purple",
29
+ params: {
30
+ ...defaultObjectSizing,
31
+ speed: 0.6,
32
+ frame: 100,
33
+ colors: ["hsla(259, 29%, 73%, 1)", "hsla(263, 57%, 39%, 1)", "hsla(48, 73%, 84%, 1)", "hsla(295, 32%, 70%, 1)"],
34
+ distortion: 0.3,
35
+ swirl: 0.5
36
+ }
37
+ };
38
+ const beachPreset = {
39
+ name: "Beach",
40
+ params: {
41
+ ...defaultObjectSizing,
42
+ speed: 0.1,
43
+ frame: 0,
44
+ colors: ["hsla(186, 81%, 83%, 1)", "hsla(198, 55%, 68%, 1)", "hsla(53, 67%, 88%, 1)", "hsla(45, 93%, 73%, 1)"],
45
+ distortion: 0.8,
46
+ swirl: 0.35
47
+ }
48
+ };
49
+ const meshGradientPresets = [defaultPreset, purplePreset, beachPreset];
50
+ const MeshGradient = memo(function MeshGradientImpl({
51
+ // Own props
52
+ speed = defaultPreset.params.speed,
53
+ frame = defaultPreset.params.frame,
54
+ colors = defaultPreset.params.colors,
55
+ distortion = defaultPreset.params.distortion,
56
+ swirl = defaultPreset.params.swirl,
57
+ // Sizing props
58
+ fit = defaultPreset.params.fit,
59
+ rotation = defaultPreset.params.rotation,
60
+ scale = defaultPreset.params.scale,
61
+ originX = defaultPreset.params.originX,
62
+ originY = defaultPreset.params.originY,
63
+ offsetX = defaultPreset.params.offsetX,
64
+ offsetY = defaultPreset.params.offsetY,
65
+ worldWidth = defaultPreset.params.worldWidth,
66
+ worldHeight = defaultPreset.params.worldHeight,
67
+ ...props
68
+ }) {
69
+ const uniforms = {
70
+ // Own uniforms
71
+ u_colors: colors.map(getShaderColorFromString),
72
+ u_colorsCount: colors.length,
73
+ u_distortion: distortion,
74
+ u_swirl: swirl,
75
+ // Sizing uniforms
76
+ u_fit: ShaderFitOptions[fit],
77
+ u_rotation: rotation,
78
+ u_scale: scale,
79
+ u_offsetX: offsetX,
80
+ u_offsetY: offsetY,
81
+ u_originX: originX,
82
+ u_originY: originY,
83
+ u_worldWidth: worldWidth,
84
+ u_worldHeight: worldHeight
85
+ };
86
+ return /* @__PURE__ */ jsx(
87
+ ShaderMount,
88
+ {
89
+ ...props,
90
+ speed,
91
+ frame,
92
+ fragmentShader: meshGradientFragmentShader,
93
+ uniforms
94
+ }
95
+ );
96
+ }, colorPropsAreEqual);
97
+ export {
98
+ MeshGradient,
99
+ beachPreset,
100
+ defaultPreset,
101
+ meshGradientPresets,
102
+ purplePreset
103
+ };
104
+ //# sourceMappingURL=mesh-gradient.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/shaders/mesh-gradient.tsx"],
4
+ "sourcesContent": ["import { memo } from 'react';\nimport { ShaderMount, type ShaderComponentProps } from '../shader-mount';\nimport { colorPropsAreEqual } from '../color-props-are-equal';\nimport {\n defaultObjectSizing,\n getShaderColorFromString,\n meshGradientFragmentShader,\n ShaderFitOptions,\n type MeshGradientParams,\n type MeshGradientUniforms,\n type ShaderPreset,\n} from '@paper-design/shaders';\n\nexport interface MeshGradientProps extends ShaderComponentProps, MeshGradientParams {}\n\ntype MeshGradientPreset = ShaderPreset<MeshGradientParams>;\n\n// Due to Leva controls limitation:\n// 1) keep default colors in HSLA format to keep alpha channel\n// 2) don't use decimal values on HSL values (to avoid button highlight bug)\n\nexport const defaultPreset: MeshGradientPreset = {\n name: 'Default',\n params: {\n ...defaultObjectSizing,\n speed: 1,\n frame: 40000,\n colors: ['hsla(259, 100%, 50%, 1)', 'hsla(150, 100%, 50%, 1)', 'hsla(48, 100%, 50%, 1)', 'hsla(295, 100%, 50%, 1)'],\n distortion: 0.8,\n swirl: 0.1,\n },\n};\n\nexport const purplePreset: MeshGradientPreset = {\n name: 'Purple',\n params: {\n ...defaultObjectSizing,\n speed: 0.6,\n frame: 100,\n colors: ['hsla(259, 29%, 73%, 1)', 'hsla(263, 57%, 39%, 1)', 'hsla(48, 73%, 84%, 1)', 'hsla(295, 32%, 70%, 1)'],\n distortion: 0.3,\n swirl: 0.5,\n },\n};\n\nexport const beachPreset: MeshGradientPreset = {\n name: 'Beach',\n params: {\n ...defaultObjectSizing,\n speed: 0.1,\n frame: 0,\n colors: ['hsla(186, 81%, 83%, 1)', 'hsla(198, 55%, 68%, 1)', 'hsla(53, 67%, 88%, 1)', 'hsla(45, 93%, 73%, 1)'],\n distortion: 0.8,\n swirl: 0.35,\n },\n};\n\nexport const meshGradientPresets: MeshGradientPreset[] = [defaultPreset, purplePreset, beachPreset];\n\nexport const MeshGradient: React.FC<MeshGradientProps> = memo(function MeshGradientImpl({\n // Own props\n speed = defaultPreset.params.speed,\n frame = defaultPreset.params.frame,\n colors = defaultPreset.params.colors,\n distortion = defaultPreset.params.distortion,\n swirl = defaultPreset.params.swirl,\n\n // Sizing props\n fit = defaultPreset.params.fit,\n rotation = defaultPreset.params.rotation,\n scale = defaultPreset.params.scale,\n originX = defaultPreset.params.originX,\n originY = defaultPreset.params.originY,\n offsetX = defaultPreset.params.offsetX,\n offsetY = defaultPreset.params.offsetY,\n worldWidth = defaultPreset.params.worldWidth,\n worldHeight = defaultPreset.params.worldHeight,\n ...props\n}: MeshGradientProps) {\n const uniforms = {\n // Own uniforms\n u_colors: colors.map(getShaderColorFromString),\n u_colorsCount: colors.length,\n u_distortion: distortion,\n u_swirl: swirl,\n\n // Sizing uniforms\n u_fit: ShaderFitOptions[fit],\n u_rotation: rotation,\n u_scale: scale,\n u_offsetX: offsetX,\n u_offsetY: offsetY,\n u_originX: originX,\n u_originY: originY,\n u_worldWidth: worldWidth,\n u_worldHeight: worldHeight,\n } satisfies MeshGradientUniforms;\n\n return (\n <ShaderMount\n {...props}\n speed={speed}\n frame={frame}\n fragmentShader={meshGradientFragmentShader}\n uniforms={uniforms}\n />\n );\n}, colorPropsAreEqual);\n"],
5
+ "mappings": ";;;;;AAAA,SAAS,YAAY;AACrB,SAAS,mBAA8C;AACvD,SAAS,0BAA0B;AACnC;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OAIK;AAwFH;AA9EG,MAAM,gBAAoC;AAAA,EAC/C,MAAM;AAAA,EACN,QAAQ;AAAA,IACN,GAAG;AAAA,IACH,OAAO;AAAA,IACP,OAAO;AAAA,IACP,QAAQ,CAAC,2BAA2B,2BAA2B,0BAA0B,yBAAyB;AAAA,IAClH,YAAY;AAAA,IACZ,OAAO;AAAA,EACT;AACF;AAEO,MAAM,eAAmC;AAAA,EAC9C,MAAM;AAAA,EACN,QAAQ;AAAA,IACN,GAAG;AAAA,IACH,OAAO;AAAA,IACP,OAAO;AAAA,IACP,QAAQ,CAAC,0BAA0B,0BAA0B,yBAAyB,wBAAwB;AAAA,IAC9G,YAAY;AAAA,IACZ,OAAO;AAAA,EACT;AACF;AAEO,MAAM,cAAkC;AAAA,EAC7C,MAAM;AAAA,EACN,QAAQ;AAAA,IACN,GAAG;AAAA,IACH,OAAO;AAAA,IACP,OAAO;AAAA,IACP,QAAQ,CAAC,0BAA0B,0BAA0B,yBAAyB,uBAAuB;AAAA,IAC7G,YAAY;AAAA,IACZ,OAAO;AAAA,EACT;AACF;AAEO,MAAM,sBAA4C,CAAC,eAAe,cAAc,WAAW;AAE3F,MAAM,eAA4C,KAAK,SAAS,iBAAiB;AAAA;AAAA,EAEtF,QAAQ,cAAc,OAAO;AAAA,EAC7B,QAAQ,cAAc,OAAO;AAAA,EAC7B,SAAS,cAAc,OAAO;AAAA,EAC9B,aAAa,cAAc,OAAO;AAAA,EAClC,QAAQ,cAAc,OAAO;AAAA;AAAA,EAG7B,MAAM,cAAc,OAAO;AAAA,EAC3B,WAAW,cAAc,OAAO;AAAA,EAChC,QAAQ,cAAc,OAAO;AAAA,EAC7B,UAAU,cAAc,OAAO;AAAA,EAC/B,UAAU,cAAc,OAAO;AAAA,EAC/B,UAAU,cAAc,OAAO;AAAA,EAC/B,UAAU,cAAc,OAAO;AAAA,EAC/B,aAAa,cAAc,OAAO;AAAA,EAClC,cAAc,cAAc,OAAO;AAAA,EACnC,GAAG;AACL,GAAsB;AACpB,QAAM,WAAW;AAAA;AAAA,IAEf,UAAU,OAAO,IAAI,wBAAwB;AAAA,IAC7C,eAAe,OAAO;AAAA,IACtB,cAAc;AAAA,IACd,SAAS;AAAA;AAAA,IAGT,OAAO,iBAAiB,GAAG;AAAA,IAC3B,YAAY;AAAA,IACZ,SAAS;AAAA,IACT,WAAW;AAAA,IACX,WAAW;AAAA,IACX,WAAW;AAAA,IACX,WAAW;AAAA,IACX,cAAc;AAAA,IACd,eAAe;AAAA,EACjB;AAEA,SACE;AAAA,IAAC;AAAA;AAAA,MACE,GAAG;AAAA,MACJ;AAAA,MACA;AAAA,MACA,gBAAgB;AAAA,MAChB;AAAA;AAAA,EACF;AAEJ,GAAG,kBAAkB;",
6
+ "names": []
7
+ }
@@ -1,19 +1,9 @@
1
- import { type GlobalParams, type ShaderMountProps } from '../shader-mount';
2
- export type MetaballsParams = {
3
- scale?: number;
4
- color1?: string;
5
- color2?: string;
6
- color3?: string;
7
- ballSize?: number;
8
- visibilityRange?: number;
9
- } & GlobalParams;
10
- export type MetaballsProps = Omit<ShaderMountProps, 'fragmentShader'> & MetaballsParams;
11
- type MetaballsPreset = {
12
- name: string;
13
- params: Required<MetaballsParams>;
14
- style?: React.CSSProperties;
15
- };
1
+ import { type ShaderComponentProps } from '../shader-mount';
2
+ import { type MetaballsParams, type ShaderPreset } from '@paper-design/shaders';
3
+ export interface MetaballsProps extends ShaderComponentProps, MetaballsParams {
4
+ }
5
+ type MetaballsPreset = ShaderPreset<MetaballsParams>;
16
6
  export declare const defaultPreset: MetaballsPreset;
17
7
  export declare const metaballsPresets: MetaballsPreset[];
18
- export declare const Metaballs: ({ scale, color1, color2, color3, ballSize, visibilityRange, ...props }: MetaballsProps) => React.ReactElement;
8
+ export declare const Metaballs: React.FC<MetaballsProps>;
19
9
  export {};
@@ -0,0 +1,72 @@
1
+ /* * * * * * * * * * * * * * * * * * * * * * * * * * * *
2
+ * Paper Shaders *
3
+ * https://github.com/paper-design/shaders *
4
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * */
5
+
6
+ import { memo } from "react";
7
+ import { ShaderMount } from "../shader-mount";
8
+ import { colorPropsAreEqual } from "../color-props-are-equal";
9
+ import {
10
+ defaultObjectSizing,
11
+ getShaderColorFromString,
12
+ metaballsFragmentShader,
13
+ ShaderFitOptions
14
+ } from "@paper-design/shaders";
15
+ import { jsx } from "react/jsx-runtime";
16
+ const defaultPreset = {
17
+ name: "Default",
18
+ params: {
19
+ ...defaultObjectSizing,
20
+ scale: 1,
21
+ speed: 1,
22
+ frame: 0,
23
+ colors: ["hsla(259, 100%, 80%, 1)", "hsla(150, 100%, 80%, 1)", "hsla(48, 100%, 80%, 1)", "hsla(295, 100%, 80%, 1)"],
24
+ count: 7,
25
+ size: 1
26
+ }
27
+ };
28
+ const metaballsPresets = [defaultPreset];
29
+ const Metaballs = memo(function MetaballsImpl({
30
+ // Own props
31
+ speed = defaultPreset.params.speed,
32
+ frame = defaultPreset.params.frame,
33
+ colors = defaultPreset.params.colors,
34
+ size = defaultPreset.params.size,
35
+ count = defaultPreset.params.count,
36
+ // Sizing props
37
+ fit = defaultPreset.params.fit,
38
+ rotation = defaultPreset.params.rotation,
39
+ scale = defaultPreset.params.scale,
40
+ originX = defaultPreset.params.originX,
41
+ originY = defaultPreset.params.originY,
42
+ offsetX = defaultPreset.params.offsetX,
43
+ offsetY = defaultPreset.params.offsetY,
44
+ worldWidth = defaultPreset.params.worldWidth,
45
+ worldHeight = defaultPreset.params.worldHeight,
46
+ ...props
47
+ }) {
48
+ const uniforms = {
49
+ // Own uniforms
50
+ u_colors: colors.map(getShaderColorFromString),
51
+ u_colorsCount: colors.length,
52
+ u_size: size,
53
+ u_count: count,
54
+ // Sizing uniforms
55
+ u_fit: ShaderFitOptions[fit],
56
+ u_rotation: rotation,
57
+ u_scale: scale,
58
+ u_offsetX: offsetX,
59
+ u_offsetY: offsetY,
60
+ u_originX: originX,
61
+ u_originY: originY,
62
+ u_worldWidth: worldWidth,
63
+ u_worldHeight: worldHeight
64
+ };
65
+ return /* @__PURE__ */ jsx(ShaderMount, { ...props, speed, frame, fragmentShader: metaballsFragmentShader, uniforms });
66
+ }, colorPropsAreEqual);
67
+ export {
68
+ Metaballs,
69
+ defaultPreset,
70
+ metaballsPresets
71
+ };
72
+ //# sourceMappingURL=metaballs.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/shaders/metaballs.tsx"],
4
+ "sourcesContent": ["import { memo } from 'react';\nimport { ShaderMount, type ShaderComponentProps } from '../shader-mount';\nimport { colorPropsAreEqual } from '../color-props-are-equal';\nimport {\n defaultObjectSizing,\n getShaderColorFromString,\n metaballsFragmentShader,\n ShaderFitOptions,\n type MetaballsParams,\n type MetaballsUniforms,\n type ShaderPreset,\n} from '@paper-design/shaders';\n\nexport interface MetaballsProps extends ShaderComponentProps, MetaballsParams {}\n\ntype MetaballsPreset = ShaderPreset<MetaballsParams>;\n\n// Due to Leva controls limitation:\n// 1) keep default colors in HSLA format to keep alpha channel\n// 2) don't use decimal values on HSL values (to avoid button highlight bug)\n\nexport const defaultPreset: MetaballsPreset = {\n name: 'Default',\n params: {\n ...defaultObjectSizing,\n scale: 1,\n speed: 1,\n frame: 0,\n colors: ['hsla(259, 100%, 80%, 1)', 'hsla(150, 100%, 80%, 1)', 'hsla(48, 100%, 80%, 1)', 'hsla(295, 100%, 80%, 1)'],\n count: 7,\n size: 1,\n },\n};\n\nexport const metaballsPresets: MetaballsPreset[] = [defaultPreset];\n\nexport const Metaballs: React.FC<MetaballsProps> = memo(function MetaballsImpl({\n // Own props\n speed = defaultPreset.params.speed,\n frame = defaultPreset.params.frame,\n colors = defaultPreset.params.colors,\n size = defaultPreset.params.size,\n count = defaultPreset.params.count,\n\n // Sizing props\n fit = defaultPreset.params.fit,\n rotation = defaultPreset.params.rotation,\n scale = defaultPreset.params.scale,\n originX = defaultPreset.params.originX,\n originY = defaultPreset.params.originY,\n offsetX = defaultPreset.params.offsetX,\n offsetY = defaultPreset.params.offsetY,\n worldWidth = defaultPreset.params.worldWidth,\n worldHeight = defaultPreset.params.worldHeight,\n ...props\n}: MetaballsProps) {\n const uniforms = {\n // Own uniforms\n u_colors: colors.map(getShaderColorFromString),\n u_colorsCount: colors.length,\n u_size: size,\n u_count: count,\n\n // Sizing uniforms\n u_fit: ShaderFitOptions[fit],\n u_rotation: rotation,\n u_scale: scale,\n u_offsetX: offsetX,\n u_offsetY: offsetY,\n u_originX: originX,\n u_originY: originY,\n u_worldWidth: worldWidth,\n u_worldHeight: worldHeight,\n } satisfies MetaballsUniforms;\n\n return (\n <ShaderMount {...props} speed={speed} frame={frame} fragmentShader={metaballsFragmentShader} uniforms={uniforms} />\n );\n}, colorPropsAreEqual);\n"],
5
+ "mappings": ";;;;;AAAA,SAAS,YAAY;AACrB,SAAS,mBAA8C;AACvD,SAAS,0BAA0B;AACnC;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OAIK;AAiEH;AAvDG,MAAM,gBAAiC;AAAA,EAC5C,MAAM;AAAA,EACN,QAAQ;AAAA,IACN,GAAG;AAAA,IACH,OAAO;AAAA,IACP,OAAO;AAAA,IACP,OAAO;AAAA,IACP,QAAQ,CAAC,2BAA2B,2BAA2B,0BAA0B,yBAAyB;AAAA,IAClH,OAAO;AAAA,IACP,MAAM;AAAA,EACR;AACF;AAEO,MAAM,mBAAsC,CAAC,aAAa;AAE1D,MAAM,YAAsC,KAAK,SAAS,cAAc;AAAA;AAAA,EAE7E,QAAQ,cAAc,OAAO;AAAA,EAC7B,QAAQ,cAAc,OAAO;AAAA,EAC7B,SAAS,cAAc,OAAO;AAAA,EAC9B,OAAO,cAAc,OAAO;AAAA,EAC5B,QAAQ,cAAc,OAAO;AAAA;AAAA,EAG7B,MAAM,cAAc,OAAO;AAAA,EAC3B,WAAW,cAAc,OAAO;AAAA,EAChC,QAAQ,cAAc,OAAO;AAAA,EAC7B,UAAU,cAAc,OAAO;AAAA,EAC/B,UAAU,cAAc,OAAO;AAAA,EAC/B,UAAU,cAAc,OAAO;AAAA,EAC/B,UAAU,cAAc,OAAO;AAAA,EAC/B,aAAa,cAAc,OAAO;AAAA,EAClC,cAAc,cAAc,OAAO;AAAA,EACnC,GAAG;AACL,GAAmB;AACjB,QAAM,WAAW;AAAA;AAAA,IAEf,UAAU,OAAO,IAAI,wBAAwB;AAAA,IAC7C,eAAe,OAAO;AAAA,IACtB,QAAQ;AAAA,IACR,SAAS;AAAA;AAAA,IAGT,OAAO,iBAAiB,GAAG;AAAA,IAC3B,YAAY;AAAA,IACZ,SAAS;AAAA,IACT,WAAW;AAAA,IACX,WAAW;AAAA,IACX,WAAW;AAAA,IACX,WAAW;AAAA,IACX,cAAc;AAAA,IACd,eAAe;AAAA,EACjB;AAEA,SACE,oBAAC,eAAa,GAAG,OAAO,OAAc,OAAc,gBAAgB,yBAAyB,UAAoB;AAErH,GAAG,kBAAkB;",
6
+ "names": []
7
+ }
@@ -1,17 +1,9 @@
1
- import { type GlobalParams, type ShaderMountProps } from '../shader-mount';
2
- export type NeuroNoiseParams = {
3
- scale?: number;
4
- colorFront?: string;
5
- colorBack?: string;
6
- brightness?: number;
7
- } & GlobalParams;
8
- export type NeuroNoiseProps = Omit<ShaderMountProps, 'fragmentShader'> & NeuroNoiseParams;
9
- type NeuroNoisePreset = {
10
- name: string;
11
- params: Required<NeuroNoiseParams>;
12
- style?: React.CSSProperties;
13
- };
1
+ import { type ShaderComponentProps } from '../shader-mount';
2
+ import { type NeuroNoiseParams, type ShaderPreset } from '@paper-design/shaders';
3
+ export interface NeuroNoiseProps extends ShaderComponentProps, NeuroNoiseParams {
4
+ }
5
+ type NeuroNoisePreset = ShaderPreset<NeuroNoiseParams>;
14
6
  export declare const defaultPreset: NeuroNoisePreset;
15
7
  export declare const neuroNoisePresets: NeuroNoisePreset[];
16
- export declare const NeuroNoise: ({ scale, colorFront, colorBack, brightness, ...props }: NeuroNoiseProps) => React.ReactElement;
8
+ export declare const NeuroNoise: React.FC<NeuroNoiseProps>;
17
9
  export {};