@paper-design/shaders-react 0.0.0-canary.156ab35
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.
- package/LICENSE +21 -0
- package/README.md +29 -0
- package/dist/color-props-are-equal.d.ts +6 -0
- package/dist/color-props-are-equal.js +34 -0
- package/dist/color-props-are-equal.js.map +7 -0
- package/dist/index.d.ts +86 -0
- package/dist/index.js +129 -0
- package/dist/index.js.map +7 -0
- package/dist/shader-mount.d.ts +38 -0
- package/dist/shader-mount.js +149 -0
- package/dist/shader-mount.js.map +7 -0
- package/dist/shaders/color-panels.d.ts +12 -0
- package/dist/shaders/color-panels.js +173 -0
- package/dist/shaders/color-panels.js.map +7 -0
- package/dist/shaders/dithering.d.ts +16 -0
- package/dist/shaders/dithering.js +158 -0
- package/dist/shaders/dithering.js.map +7 -0
- package/dist/shaders/dot-grid.d.ts +9 -0
- package/dist/shaders/dot-grid.js +139 -0
- package/dist/shaders/dot-grid.js.map +7 -0
- package/dist/shaders/dot-orbit.d.ts +12 -0
- package/dist/shaders/dot-orbit.js +130 -0
- package/dist/shaders/dot-orbit.js.map +7 -0
- package/dist/shaders/fluted-glass.d.ts +14 -0
- package/dist/shaders/fluted-glass.js +183 -0
- package/dist/shaders/fluted-glass.js.map +7 -0
- package/dist/shaders/god-rays.d.ts +12 -0
- package/dist/shaders/god-rays.js +150 -0
- package/dist/shaders/god-rays.js.map +7 -0
- package/dist/shaders/grain-gradient.d.ts +14 -0
- package/dist/shaders/grain-gradient.js +177 -0
- package/dist/shaders/grain-gradient.js.map +7 -0
- package/dist/shaders/heatmap.d.ts +14 -0
- package/dist/shaders/heatmap.js +161 -0
- package/dist/shaders/heatmap.js.map +7 -0
- package/dist/shaders/image-dithering.d.ts +14 -0
- package/dist/shaders/image-dithering.js +145 -0
- package/dist/shaders/image-dithering.js.map +7 -0
- package/dist/shaders/image-halftone-dots.d.ts +12 -0
- package/dist/shaders/image-halftone-dots.js +171 -0
- package/dist/shaders/image-halftone-dots.js.map +7 -0
- package/dist/shaders/liquid-metal.d.ts +16 -0
- package/dist/shaders/liquid-metal.js +201 -0
- package/dist/shaders/liquid-metal.js.map +7 -0
- package/dist/shaders/mesh-gradient.d.ts +12 -0
- package/dist/shaders/mesh-gradient.js +129 -0
- package/dist/shaders/mesh-gradient.js.map +7 -0
- package/dist/shaders/metaballs.d.ts +12 -0
- package/dist/shaders/metaballs.js +121 -0
- package/dist/shaders/metaballs.js.map +7 -0
- package/dist/shaders/neuro-noise.d.ts +12 -0
- package/dist/shaders/neuro-noise.js +126 -0
- package/dist/shaders/neuro-noise.js.map +7 -0
- package/dist/shaders/paper-texture.d.ts +20 -0
- package/dist/shaders/paper-texture.js +198 -0
- package/dist/shaders/paper-texture.js.map +7 -0
- package/dist/shaders/perlin-noise.d.ts +12 -0
- package/dist/shaders/perlin-noise.js +142 -0
- package/dist/shaders/perlin-noise.js.map +7 -0
- package/dist/shaders/pulsing-border.d.ts +12 -0
- package/dist/shaders/pulsing-border.js +216 -0
- package/dist/shaders/pulsing-border.js.map +7 -0
- package/dist/shaders/simplex-noise.d.ts +12 -0
- package/dist/shaders/simplex-noise.js +125 -0
- package/dist/shaders/simplex-noise.js.map +7 -0
- package/dist/shaders/smoke-ring.d.ts +12 -0
- package/dist/shaders/smoke-ring.js +137 -0
- package/dist/shaders/smoke-ring.js.map +7 -0
- package/dist/shaders/spiral.d.ts +12 -0
- package/dist/shaders/spiral.js +151 -0
- package/dist/shaders/spiral.js.map +7 -0
- package/dist/shaders/static-mesh-gradient.d.ts +12 -0
- package/dist/shaders/static-mesh-gradient.js +158 -0
- package/dist/shaders/static-mesh-gradient.js.map +7 -0
- package/dist/shaders/static-radial-gradient.d.ts +12 -0
- package/dist/shaders/static-radial-gradient.js +178 -0
- package/dist/shaders/static-radial-gradient.js.map +7 -0
- package/dist/shaders/swirl.d.ts +12 -0
- package/dist/shaders/swirl.js +146 -0
- package/dist/shaders/swirl.js.map +7 -0
- package/dist/shaders/voronoi.d.ts +12 -0
- package/dist/shaders/voronoi.js +137 -0
- package/dist/shaders/voronoi.js.map +7 -0
- package/dist/shaders/warp.d.ts +14 -0
- package/dist/shaders/warp.js +194 -0
- package/dist/shaders/warp.js.map +7 -0
- package/dist/shaders/water.d.ts +14 -0
- package/dist/shaders/water.js +148 -0
- package/dist/shaders/water.js.map +7 -0
- package/dist/shaders/waves.d.ts +12 -0
- package/dist/shaders/waves.js +136 -0
- package/dist/shaders/waves.js.map +7 -0
- package/dist/suspend.d.ts +8 -0
- package/dist/suspend.js +43 -0
- package/dist/suspend.js.map +7 -0
- package/dist/transparent-pixel.d.ts +1 -0
- package/dist/transparent-pixel.js +10 -0
- package/dist/transparent-pixel.js.map +7 -0
- package/dist/use-merge-refs.d.ts +6 -0
- package/dist/use-merge-refs.js +48 -0
- package/dist/use-merge-refs.js.map +7 -0
- package/package.json +41 -0
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
/* * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
|
2
|
+
* Paper Shaders *
|
|
3
|
+
* https://github.com/paper-design/shaders *
|
|
4
|
+
* * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
|
5
|
+
|
|
6
|
+
import { memo } from "react";
|
|
7
|
+
import { ShaderMount } from "../shader-mount.js";
|
|
8
|
+
import { colorPropsAreEqual } from "../color-props-are-equal.js";
|
|
9
|
+
import {
|
|
10
|
+
imageHalftoneDotsFragmentShader,
|
|
11
|
+
getShaderColorFromString,
|
|
12
|
+
ShaderFitOptions,
|
|
13
|
+
defaultObjectSizing,
|
|
14
|
+
ImageHalftoneDotsTypes
|
|
15
|
+
} from "@paper-design/shaders";
|
|
16
|
+
import { jsx } from "react/jsx-runtime";
|
|
17
|
+
const defaultPreset = {
|
|
18
|
+
name: "Default",
|
|
19
|
+
params: {
|
|
20
|
+
...defaultObjectSizing,
|
|
21
|
+
speed: 1,
|
|
22
|
+
frame: 0,
|
|
23
|
+
colorBack: "#d4d4d4",
|
|
24
|
+
colorFront: "#2b2b2b",
|
|
25
|
+
size: 5,
|
|
26
|
+
radius: 1,
|
|
27
|
+
contrast: 0.5,
|
|
28
|
+
originalColors: false,
|
|
29
|
+
inverted: false,
|
|
30
|
+
grainMixer: 0.3,
|
|
31
|
+
grainOverlay: 0,
|
|
32
|
+
diagonalGrid: true,
|
|
33
|
+
type: "gooey"
|
|
34
|
+
}
|
|
35
|
+
};
|
|
36
|
+
const abstractPreset = {
|
|
37
|
+
name: "Abstract",
|
|
38
|
+
params: {
|
|
39
|
+
...defaultObjectSizing,
|
|
40
|
+
speed: 1,
|
|
41
|
+
frame: 0,
|
|
42
|
+
colorBack: "#00000000",
|
|
43
|
+
colorFront: "#2b2b2b",
|
|
44
|
+
size: 25,
|
|
45
|
+
radius: 2,
|
|
46
|
+
contrast: 0.45,
|
|
47
|
+
originalColors: true,
|
|
48
|
+
inverted: false,
|
|
49
|
+
grainMixer: 0,
|
|
50
|
+
grainOverlay: 0,
|
|
51
|
+
diagonalGrid: true,
|
|
52
|
+
type: "classic"
|
|
53
|
+
}
|
|
54
|
+
};
|
|
55
|
+
const netPreset = {
|
|
56
|
+
name: "Net",
|
|
57
|
+
params: {
|
|
58
|
+
...defaultObjectSizing,
|
|
59
|
+
speed: 1,
|
|
60
|
+
frame: 0,
|
|
61
|
+
colorBack: "#000000",
|
|
62
|
+
colorFront: "#2b2b2b",
|
|
63
|
+
size: 12,
|
|
64
|
+
radius: 2,
|
|
65
|
+
contrast: 0,
|
|
66
|
+
originalColors: true,
|
|
67
|
+
inverted: false,
|
|
68
|
+
grainMixer: 0,
|
|
69
|
+
grainOverlay: 0,
|
|
70
|
+
diagonalGrid: true,
|
|
71
|
+
type: "classic"
|
|
72
|
+
}
|
|
73
|
+
};
|
|
74
|
+
const holesPreset = {
|
|
75
|
+
name: "Holes",
|
|
76
|
+
params: {
|
|
77
|
+
...defaultObjectSizing,
|
|
78
|
+
speed: 1,
|
|
79
|
+
frame: 0,
|
|
80
|
+
colorBack: "#ffffff00",
|
|
81
|
+
colorFront: "#0012b3",
|
|
82
|
+
size: 10,
|
|
83
|
+
radius: 1.4,
|
|
84
|
+
contrast: 0.35,
|
|
85
|
+
originalColors: false,
|
|
86
|
+
inverted: false,
|
|
87
|
+
grainMixer: 0,
|
|
88
|
+
grainOverlay: 0,
|
|
89
|
+
diagonalGrid: false,
|
|
90
|
+
type: "hole"
|
|
91
|
+
}
|
|
92
|
+
};
|
|
93
|
+
const imageHalftoneDotsPresets = [
|
|
94
|
+
defaultPreset,
|
|
95
|
+
abstractPreset,
|
|
96
|
+
netPreset,
|
|
97
|
+
holesPreset
|
|
98
|
+
];
|
|
99
|
+
const ImageHalftoneDots = memo(function ImageHalftoneDotsImpl({
|
|
100
|
+
// Own props
|
|
101
|
+
speed = defaultPreset.params.speed,
|
|
102
|
+
frame = defaultPreset.params.frame,
|
|
103
|
+
colorFront = defaultPreset.params.colorFront,
|
|
104
|
+
colorBack = defaultPreset.params.colorBack,
|
|
105
|
+
image = "",
|
|
106
|
+
size = defaultPreset.params.size,
|
|
107
|
+
radius = defaultPreset.params.radius,
|
|
108
|
+
contrast = defaultPreset.params.contrast,
|
|
109
|
+
originalColors = defaultPreset.params.originalColors,
|
|
110
|
+
inverted = defaultPreset.params.inverted,
|
|
111
|
+
grainMixer = defaultPreset.params.grainMixer,
|
|
112
|
+
grainOverlay = defaultPreset.params.grainOverlay,
|
|
113
|
+
diagonalGrid = defaultPreset.params.diagonalGrid,
|
|
114
|
+
type = defaultPreset.params.type,
|
|
115
|
+
// Sizing props
|
|
116
|
+
fit = defaultPreset.params.fit,
|
|
117
|
+
scale = defaultPreset.params.scale,
|
|
118
|
+
rotation = defaultPreset.params.rotation,
|
|
119
|
+
originX = defaultPreset.params.originX,
|
|
120
|
+
originY = defaultPreset.params.originY,
|
|
121
|
+
offsetX = defaultPreset.params.offsetX,
|
|
122
|
+
offsetY = defaultPreset.params.offsetY,
|
|
123
|
+
worldWidth = defaultPreset.params.worldWidth,
|
|
124
|
+
worldHeight = defaultPreset.params.worldHeight,
|
|
125
|
+
...props
|
|
126
|
+
}) {
|
|
127
|
+
const uniforms = {
|
|
128
|
+
// Own uniforms
|
|
129
|
+
u_image: image,
|
|
130
|
+
u_colorFront: getShaderColorFromString(colorFront),
|
|
131
|
+
u_colorBack: getShaderColorFromString(colorBack),
|
|
132
|
+
u_size: size,
|
|
133
|
+
u_radius: radius,
|
|
134
|
+
u_contrast: contrast,
|
|
135
|
+
u_originalColors: originalColors,
|
|
136
|
+
u_inverted: inverted,
|
|
137
|
+
u_grainMixer: grainMixer,
|
|
138
|
+
u_grainOverlay: grainOverlay,
|
|
139
|
+
u_diagonalGrid: diagonalGrid,
|
|
140
|
+
u_type: ImageHalftoneDotsTypes[type],
|
|
141
|
+
// Sizing uniforms
|
|
142
|
+
u_fit: ShaderFitOptions[fit],
|
|
143
|
+
u_rotation: rotation,
|
|
144
|
+
u_scale: scale,
|
|
145
|
+
u_offsetX: offsetX,
|
|
146
|
+
u_offsetY: offsetY,
|
|
147
|
+
u_originX: originX,
|
|
148
|
+
u_originY: originY,
|
|
149
|
+
u_worldWidth: worldWidth,
|
|
150
|
+
u_worldHeight: worldHeight
|
|
151
|
+
};
|
|
152
|
+
return /* @__PURE__ */ jsx(
|
|
153
|
+
ShaderMount,
|
|
154
|
+
{
|
|
155
|
+
...props,
|
|
156
|
+
speed,
|
|
157
|
+
frame,
|
|
158
|
+
fragmentShader: imageHalftoneDotsFragmentShader,
|
|
159
|
+
uniforms
|
|
160
|
+
}
|
|
161
|
+
);
|
|
162
|
+
}, colorPropsAreEqual);
|
|
163
|
+
export {
|
|
164
|
+
ImageHalftoneDots,
|
|
165
|
+
abstractPreset,
|
|
166
|
+
defaultPreset,
|
|
167
|
+
holesPreset,
|
|
168
|
+
imageHalftoneDotsPresets,
|
|
169
|
+
netPreset
|
|
170
|
+
};
|
|
171
|
+
//# sourceMappingURL=image-halftone-dots.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/shaders/image-halftone-dots.tsx"],
|
|
4
|
+
"sourcesContent": ["import { memo } from 'react';\nimport { ShaderMount, type ShaderComponentProps } from '../shader-mount.js';\nimport { colorPropsAreEqual } from '../color-props-are-equal.js';\nimport {\n imageHalftoneDotsFragmentShader,\n getShaderColorFromString,\n ShaderFitOptions,\n type ImageHalftoneDotsUniforms,\n type ImageHalftoneDotsParams,\n defaultObjectSizing,\n type ImageShaderPreset,\n ImageHalftoneDotsTypes,\n} from '@paper-design/shaders';\n\nexport interface ImageHalftoneDotsProps extends ShaderComponentProps, ImageHalftoneDotsParams {}\n\ntype ImageHalftoneDotsPreset = ImageShaderPreset<ImageHalftoneDotsParams>;\n\nexport const defaultPreset: ImageHalftoneDotsPreset = {\n name: 'Default',\n params: {\n ...defaultObjectSizing,\n speed: 1,\n frame: 0,\n colorBack: '#d4d4d4',\n colorFront: '#2b2b2b',\n size: 5,\n radius: 1,\n contrast: 0.5,\n originalColors: false,\n inverted: false,\n grainMixer: 0.3,\n grainOverlay: 0,\n diagonalGrid: true,\n type: 'gooey',\n },\n};\n\nexport const abstractPreset: ImageHalftoneDotsPreset = {\n name: 'Abstract',\n params: {\n ...defaultObjectSizing,\n speed: 1,\n frame: 0,\n colorBack: '#00000000',\n colorFront: '#2b2b2b',\n size: 25,\n radius: 2,\n contrast: 0.45,\n originalColors: true,\n inverted: false,\n grainMixer: 0,\n grainOverlay: 0,\n diagonalGrid: true,\n type: 'classic',\n },\n};\n\nexport const netPreset: ImageHalftoneDotsPreset = {\n name: 'Net',\n params: {\n ...defaultObjectSizing,\n speed: 1,\n frame: 0,\n colorBack: '#000000',\n colorFront: '#2b2b2b',\n size: 12,\n radius: 2,\n contrast: 0,\n originalColors: true,\n inverted: false,\n grainMixer: 0,\n grainOverlay: 0,\n diagonalGrid: true,\n type: 'classic',\n },\n};\n\nexport const holesPreset: ImageHalftoneDotsPreset = {\n name: 'Holes',\n params: {\n ...defaultObjectSizing,\n speed: 1,\n frame: 0,\n colorBack: '#ffffff00',\n colorFront: '#0012b3',\n size: 10,\n radius: 1.4,\n contrast: 0.35,\n originalColors: false,\n inverted: false,\n grainMixer: 0,\n grainOverlay: 0,\n diagonalGrid: false,\n type: 'hole',\n },\n};\n\nexport const imageHalftoneDotsPresets: ImageHalftoneDotsPreset[] = [\n defaultPreset,\n abstractPreset,\n netPreset,\n holesPreset,\n];\n\nexport const ImageHalftoneDots: React.FC<ImageHalftoneDotsProps> = memo(function ImageHalftoneDotsImpl({\n // Own props\n speed = defaultPreset.params.speed,\n frame = defaultPreset.params.frame,\n colorFront = defaultPreset.params.colorFront,\n colorBack = defaultPreset.params.colorBack,\n image = '',\n size = defaultPreset.params.size,\n radius = defaultPreset.params.radius,\n contrast = defaultPreset.params.contrast,\n originalColors = defaultPreset.params.originalColors,\n inverted = defaultPreset.params.inverted,\n grainMixer = defaultPreset.params.grainMixer,\n grainOverlay = defaultPreset.params.grainOverlay,\n diagonalGrid = defaultPreset.params.diagonalGrid,\n type = defaultPreset.params.type,\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}: ImageHalftoneDotsProps) {\n const uniforms = {\n // Own uniforms\n u_image: image,\n u_colorFront: getShaderColorFromString(colorFront),\n u_colorBack: getShaderColorFromString(colorBack),\n u_size: size,\n u_radius: radius,\n u_contrast: contrast,\n u_originalColors: originalColors,\n u_inverted: inverted,\n u_grainMixer: grainMixer,\n u_grainOverlay: grainOverlay,\n u_diagonalGrid: diagonalGrid,\n u_type: ImageHalftoneDotsTypes[type],\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 ImageHalftoneDotsUniforms;\n\n return (\n <ShaderMount\n {...props}\n speed={speed}\n frame={frame}\n fragmentShader={imageHalftoneDotsFragmentShader}\n uniforms={uniforms}\n />\n );\n}, colorPropsAreEqual);\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { type ShaderComponentProps } from '../shader-mount.js';
|
|
2
|
+
import { type LiquidMetalParams, type ImageShaderPreset } from '@paper-design/shaders';
|
|
3
|
+
export interface LiquidMetalProps extends ShaderComponentProps, LiquidMetalParams {
|
|
4
|
+
/**
|
|
5
|
+
* Suspends the component when the image is being processed.
|
|
6
|
+
*/
|
|
7
|
+
suspendWhenProcessingImage?: boolean;
|
|
8
|
+
}
|
|
9
|
+
type LiquidMetalPreset = ImageShaderPreset<LiquidMetalParams>;
|
|
10
|
+
export declare const defaultPreset: LiquidMetalPreset;
|
|
11
|
+
export declare const noirPreset: LiquidMetalPreset;
|
|
12
|
+
export declare const fullScreenPreset: LiquidMetalPreset;
|
|
13
|
+
export declare const stripesPreset: LiquidMetalPreset;
|
|
14
|
+
export declare const liquidMetalPresets: LiquidMetalPreset[];
|
|
15
|
+
export declare const LiquidMetal: React.FC<LiquidMetalProps>;
|
|
16
|
+
export {};
|
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
/* * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
|
2
|
+
* Paper Shaders *
|
|
3
|
+
* https://github.com/paper-design/shaders *
|
|
4
|
+
* * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
|
5
|
+
|
|
6
|
+
import { memo, useLayoutEffect, useState } from "react";
|
|
7
|
+
import { ShaderMount } from "../shader-mount.js";
|
|
8
|
+
import {
|
|
9
|
+
liquidMetalFragmentShader,
|
|
10
|
+
ShaderFitOptions,
|
|
11
|
+
defaultObjectSizing,
|
|
12
|
+
toProcessedLiquidMetal,
|
|
13
|
+
getShaderColorFromString,
|
|
14
|
+
LiquidMetalShapes
|
|
15
|
+
} from "@paper-design/shaders";
|
|
16
|
+
import { transparentPixel } from "../transparent-pixel.js";
|
|
17
|
+
import { suspend } from "../suspend.js";
|
|
18
|
+
import { jsx } from "react/jsx-runtime";
|
|
19
|
+
const defaultPreset = {
|
|
20
|
+
name: "Default",
|
|
21
|
+
params: {
|
|
22
|
+
...defaultObjectSizing,
|
|
23
|
+
scale: 0.6,
|
|
24
|
+
speed: 1,
|
|
25
|
+
frame: 0,
|
|
26
|
+
colorBack: "#AAAAAC",
|
|
27
|
+
colorTint: "#ffffff",
|
|
28
|
+
distortion: 0.07,
|
|
29
|
+
repetition: 2,
|
|
30
|
+
shiftRed: 0.3,
|
|
31
|
+
shiftBlue: 0.3,
|
|
32
|
+
contour: 0.4,
|
|
33
|
+
softness: 0.1,
|
|
34
|
+
angle: 70,
|
|
35
|
+
shape: "diamond"
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
const noirPreset = {
|
|
39
|
+
name: "Noir",
|
|
40
|
+
params: {
|
|
41
|
+
...defaultObjectSizing,
|
|
42
|
+
scale: 0.6,
|
|
43
|
+
speed: 1,
|
|
44
|
+
frame: 0,
|
|
45
|
+
colorBack: "#000000",
|
|
46
|
+
colorTint: "#606060",
|
|
47
|
+
softness: 0.45,
|
|
48
|
+
repetition: 1.5,
|
|
49
|
+
shiftRed: 0,
|
|
50
|
+
shiftBlue: 0,
|
|
51
|
+
distortion: 0,
|
|
52
|
+
contour: 0,
|
|
53
|
+
angle: 90,
|
|
54
|
+
shape: "diamond"
|
|
55
|
+
}
|
|
56
|
+
};
|
|
57
|
+
const fullScreenPreset = {
|
|
58
|
+
name: "Backdrop",
|
|
59
|
+
params: {
|
|
60
|
+
...defaultObjectSizing,
|
|
61
|
+
speed: 1,
|
|
62
|
+
frame: 0,
|
|
63
|
+
scale: 1.5,
|
|
64
|
+
colorBack: "#AAAAAC",
|
|
65
|
+
colorTint: "#ffffff",
|
|
66
|
+
softness: 0.05,
|
|
67
|
+
repetition: 1.5,
|
|
68
|
+
shiftRed: 0.3,
|
|
69
|
+
shiftBlue: 0.3,
|
|
70
|
+
distortion: 0.1,
|
|
71
|
+
contour: 0.4,
|
|
72
|
+
shape: "none",
|
|
73
|
+
angle: 90,
|
|
74
|
+
worldWidth: 0,
|
|
75
|
+
worldHeight: 0
|
|
76
|
+
}
|
|
77
|
+
};
|
|
78
|
+
const stripesPreset = {
|
|
79
|
+
name: "Stripes",
|
|
80
|
+
params: {
|
|
81
|
+
...defaultObjectSizing,
|
|
82
|
+
speed: 1,
|
|
83
|
+
frame: 0,
|
|
84
|
+
scale: 0.6,
|
|
85
|
+
colorBack: "#000000",
|
|
86
|
+
colorTint: "#2c5d72",
|
|
87
|
+
softness: 0.8,
|
|
88
|
+
repetition: 6,
|
|
89
|
+
shiftRed: 1,
|
|
90
|
+
shiftBlue: -1,
|
|
91
|
+
distortion: 0.4,
|
|
92
|
+
contour: 0.4,
|
|
93
|
+
shape: "circle",
|
|
94
|
+
angle: 0
|
|
95
|
+
}
|
|
96
|
+
};
|
|
97
|
+
const liquidMetalPresets = [defaultPreset, noirPreset, fullScreenPreset, stripesPreset];
|
|
98
|
+
const LiquidMetal = memo(function LiquidMetalImpl({
|
|
99
|
+
// Own props
|
|
100
|
+
colorBack = defaultPreset.params.colorBack,
|
|
101
|
+
colorTint = defaultPreset.params.colorTint,
|
|
102
|
+
speed = defaultPreset.params.speed,
|
|
103
|
+
frame = defaultPreset.params.frame,
|
|
104
|
+
image = "",
|
|
105
|
+
contour = defaultPreset.params.contour,
|
|
106
|
+
distortion = defaultPreset.params.distortion,
|
|
107
|
+
softness = defaultPreset.params.softness,
|
|
108
|
+
repetition = defaultPreset.params.repetition,
|
|
109
|
+
shiftRed = defaultPreset.params.shiftRed,
|
|
110
|
+
shiftBlue = defaultPreset.params.shiftBlue,
|
|
111
|
+
angle = defaultPreset.params.angle,
|
|
112
|
+
shape = defaultPreset.params.shape,
|
|
113
|
+
suspendWhenProcessingImage = false,
|
|
114
|
+
// Sizing props
|
|
115
|
+
fit = defaultPreset.params.fit,
|
|
116
|
+
scale = defaultPreset.params.scale,
|
|
117
|
+
rotation = defaultPreset.params.rotation,
|
|
118
|
+
originX = defaultPreset.params.originX,
|
|
119
|
+
originY = defaultPreset.params.originY,
|
|
120
|
+
offsetX = defaultPreset.params.offsetX,
|
|
121
|
+
offsetY = defaultPreset.params.offsetY,
|
|
122
|
+
worldWidth = defaultPreset.params.worldWidth,
|
|
123
|
+
worldHeight = defaultPreset.params.worldHeight,
|
|
124
|
+
...props
|
|
125
|
+
}) {
|
|
126
|
+
const imageUrl = typeof image === "string" ? image : image.src;
|
|
127
|
+
const [processedStateImage, setProcessedStateImage] = useState(transparentPixel);
|
|
128
|
+
let processedImage;
|
|
129
|
+
if (suspendWhenProcessingImage && typeof window !== "undefined" && imageUrl) {
|
|
130
|
+
processedImage = suspend(
|
|
131
|
+
() => toProcessedLiquidMetal(imageUrl).then((result) => URL.createObjectURL(result.pngBlob)),
|
|
132
|
+
[imageUrl, "liquid-metal"]
|
|
133
|
+
);
|
|
134
|
+
} else {
|
|
135
|
+
processedImage = processedStateImage;
|
|
136
|
+
}
|
|
137
|
+
useLayoutEffect(() => {
|
|
138
|
+
if (suspendWhenProcessingImage) {
|
|
139
|
+
return;
|
|
140
|
+
}
|
|
141
|
+
if (!imageUrl) {
|
|
142
|
+
setProcessedStateImage(transparentPixel);
|
|
143
|
+
return;
|
|
144
|
+
}
|
|
145
|
+
let url;
|
|
146
|
+
let current = true;
|
|
147
|
+
toProcessedLiquidMetal(imageUrl).then((result) => {
|
|
148
|
+
if (current) {
|
|
149
|
+
url = URL.createObjectURL(result.pngBlob);
|
|
150
|
+
setProcessedStateImage(url);
|
|
151
|
+
}
|
|
152
|
+
});
|
|
153
|
+
return () => {
|
|
154
|
+
current = false;
|
|
155
|
+
};
|
|
156
|
+
}, [imageUrl, suspendWhenProcessingImage]);
|
|
157
|
+
const uniforms = {
|
|
158
|
+
// Own uniforms
|
|
159
|
+
u_colorBack: getShaderColorFromString(colorBack),
|
|
160
|
+
u_colorTint: getShaderColorFromString(colorTint),
|
|
161
|
+
u_image: processedImage,
|
|
162
|
+
u_contour: contour,
|
|
163
|
+
u_distortion: distortion,
|
|
164
|
+
u_softness: softness,
|
|
165
|
+
u_repetition: repetition,
|
|
166
|
+
u_shiftRed: shiftRed,
|
|
167
|
+
u_shiftBlue: shiftBlue,
|
|
168
|
+
u_angle: angle,
|
|
169
|
+
u_isImage: Boolean(image),
|
|
170
|
+
u_shape: LiquidMetalShapes[shape],
|
|
171
|
+
// Sizing uniforms
|
|
172
|
+
u_fit: ShaderFitOptions[fit],
|
|
173
|
+
u_scale: scale,
|
|
174
|
+
u_rotation: rotation,
|
|
175
|
+
u_offsetX: offsetX,
|
|
176
|
+
u_offsetY: offsetY,
|
|
177
|
+
u_originX: originX,
|
|
178
|
+
u_originY: originY,
|
|
179
|
+
u_worldWidth: worldWidth,
|
|
180
|
+
u_worldHeight: worldHeight
|
|
181
|
+
};
|
|
182
|
+
return /* @__PURE__ */ jsx(
|
|
183
|
+
ShaderMount,
|
|
184
|
+
{
|
|
185
|
+
...props,
|
|
186
|
+
speed,
|
|
187
|
+
frame,
|
|
188
|
+
fragmentShader: liquidMetalFragmentShader,
|
|
189
|
+
uniforms
|
|
190
|
+
}
|
|
191
|
+
);
|
|
192
|
+
});
|
|
193
|
+
export {
|
|
194
|
+
LiquidMetal,
|
|
195
|
+
defaultPreset,
|
|
196
|
+
fullScreenPreset,
|
|
197
|
+
liquidMetalPresets,
|
|
198
|
+
noirPreset,
|
|
199
|
+
stripesPreset
|
|
200
|
+
};
|
|
201
|
+
//# sourceMappingURL=liquid-metal.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/shaders/liquid-metal.tsx"],
|
|
4
|
+
"sourcesContent": ["import { memo, useLayoutEffect, useState } from 'react';\nimport { ShaderMount, type ShaderComponentProps } from '../shader-mount.js';\nimport {\n liquidMetalFragmentShader,\n ShaderFitOptions,\n defaultObjectSizing,\n type LiquidMetalUniforms,\n type LiquidMetalParams,\n toProcessedLiquidMetal,\n type ImageShaderPreset,\n getShaderColorFromString,\n LiquidMetalShapes,\n} from '@paper-design/shaders';\nimport { transparentPixel } from '../transparent-pixel.js';\nimport { suspend } from '../suspend.js';\n\nexport interface LiquidMetalProps extends ShaderComponentProps, LiquidMetalParams {\n /**\n * Suspends the component when the image is being processed.\n */\n suspendWhenProcessingImage?: boolean;\n}\n\ntype LiquidMetalPreset = ImageShaderPreset<LiquidMetalParams>;\n\nexport const defaultPreset: LiquidMetalPreset = {\n name: 'Default',\n params: {\n ...defaultObjectSizing,\n scale: 0.6,\n speed: 1,\n frame: 0,\n colorBack: '#AAAAAC',\n colorTint: '#ffffff',\n distortion: 0.07,\n repetition: 2.0,\n shiftRed: 0.3,\n shiftBlue: 0.3,\n contour: 0.4,\n softness: 0.1,\n angle: 70,\n shape: 'diamond',\n },\n};\n\nexport const noirPreset: LiquidMetalPreset = {\n name: 'Noir',\n params: {\n ...defaultObjectSizing,\n scale: 0.6,\n speed: 1,\n frame: 0,\n colorBack: '#000000',\n colorTint: '#606060',\n softness: 0.45,\n repetition: 1.5,\n shiftRed: 0,\n shiftBlue: 0,\n distortion: 0,\n contour: 0,\n angle: 90,\n shape: 'diamond',\n },\n};\n\nexport const fullScreenPreset: LiquidMetalPreset = {\n name: 'Backdrop',\n params: {\n ...defaultObjectSizing,\n speed: 1,\n frame: 0,\n scale: 1.5,\n colorBack: '#AAAAAC',\n colorTint: '#ffffff',\n softness: 0.05,\n repetition: 1.5,\n shiftRed: 0.3,\n shiftBlue: 0.3,\n distortion: 0.1,\n contour: 0.4,\n shape: 'none',\n angle: 90,\n worldWidth: 0,\n worldHeight: 0,\n },\n};\n\nexport const stripesPreset: LiquidMetalPreset = {\n name: 'Stripes',\n params: {\n ...defaultObjectSizing,\n speed: 1,\n frame: 0,\n scale: 0.6,\n colorBack: '#000000',\n colorTint: '#2c5d72',\n softness: 0.8,\n repetition: 6,\n shiftRed: 1,\n shiftBlue: -1,\n distortion: 0.4,\n contour: 0.4,\n shape: 'circle',\n angle: 0,\n },\n};\n\nexport const liquidMetalPresets: LiquidMetalPreset[] = [defaultPreset, noirPreset, fullScreenPreset, stripesPreset];\n\nexport const LiquidMetal: React.FC<LiquidMetalProps> = memo(function LiquidMetalImpl({\n // Own props\n colorBack = defaultPreset.params.colorBack,\n colorTint = defaultPreset.params.colorTint,\n speed = defaultPreset.params.speed,\n frame = defaultPreset.params.frame,\n image = '',\n contour = defaultPreset.params.contour,\n distortion = defaultPreset.params.distortion,\n softness = defaultPreset.params.softness,\n repetition = defaultPreset.params.repetition,\n shiftRed = defaultPreset.params.shiftRed,\n shiftBlue = defaultPreset.params.shiftBlue,\n angle = defaultPreset.params.angle,\n shape = defaultPreset.params.shape,\n suspendWhenProcessingImage = false,\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 imageUrl = typeof image === 'string' ? image : image.src;\n const [processedStateImage, setProcessedStateImage] = useState<string>(transparentPixel);\n\n let processedImage: string;\n\n if (suspendWhenProcessingImage && typeof window !== 'undefined' && imageUrl) {\n processedImage = suspend(\n (): Promise<string> => toProcessedLiquidMetal(imageUrl).then((result) => URL.createObjectURL(result.pngBlob)),\n [imageUrl, 'liquid-metal']\n );\n } else {\n processedImage = processedStateImage;\n }\n\n useLayoutEffect(() => {\n if (suspendWhenProcessingImage) {\n // Skip doing work in the effect as it's been handled by suspense.\n return;\n }\n\n if (!imageUrl) {\n setProcessedStateImage(transparentPixel);\n return;\n }\n\n let url: string;\n let current = true;\n\n toProcessedLiquidMetal(imageUrl).then((result) => {\n if (current) {\n url = URL.createObjectURL(result.pngBlob);\n setProcessedStateImage(url);\n }\n });\n\n return () => {\n current = false;\n };\n }, [imageUrl, suspendWhenProcessingImage]);\n\n const uniforms = {\n // Own uniforms\n u_colorBack: getShaderColorFromString(colorBack),\n u_colorTint: getShaderColorFromString(colorTint),\n\n u_image: processedImage,\n u_contour: contour,\n u_distortion: distortion,\n u_softness: softness,\n u_repetition: repetition,\n u_shiftRed: shiftRed,\n u_shiftBlue: shiftBlue,\n u_angle: angle,\n u_isImage: Boolean(image),\n u_shape: LiquidMetalShapes[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});\n"],
|
|
5
|
+
"mappings": ";;;;;AAAA,SAAS,MAAM,iBAAiB,gBAAgB;AAChD,SAAS,mBAA8C;AACvD;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EAGA;AAAA,EAEA;AAAA,EACA;AAAA,OACK;AACP,SAAS,wBAAwB;AACjC,SAAS,eAAe;AAiMpB;AAtLG,MAAM,gBAAmC;AAAA,EAC9C,MAAM;AAAA,EACN,QAAQ;AAAA,IACN,GAAG;AAAA,IACH,OAAO;AAAA,IACP,OAAO;AAAA,IACP,OAAO;AAAA,IACP,WAAW;AAAA,IACX,WAAW;AAAA,IACX,YAAY;AAAA,IACZ,YAAY;AAAA,IACZ,UAAU;AAAA,IACV,WAAW;AAAA,IACX,SAAS;AAAA,IACT,UAAU;AAAA,IACV,OAAO;AAAA,IACP,OAAO;AAAA,EACT;AACF;AAEO,MAAM,aAAgC;AAAA,EAC3C,MAAM;AAAA,EACN,QAAQ;AAAA,IACN,GAAG;AAAA,IACH,OAAO;AAAA,IACP,OAAO;AAAA,IACP,OAAO;AAAA,IACP,WAAW;AAAA,IACX,WAAW;AAAA,IACX,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,UAAU;AAAA,IACV,WAAW;AAAA,IACX,YAAY;AAAA,IACZ,SAAS;AAAA,IACT,OAAO;AAAA,IACP,OAAO;AAAA,EACT;AACF;AAEO,MAAM,mBAAsC;AAAA,EACjD,MAAM;AAAA,EACN,QAAQ;AAAA,IACN,GAAG;AAAA,IACH,OAAO;AAAA,IACP,OAAO;AAAA,IACP,OAAO;AAAA,IACP,WAAW;AAAA,IACX,WAAW;AAAA,IACX,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,UAAU;AAAA,IACV,WAAW;AAAA,IACX,YAAY;AAAA,IACZ,SAAS;AAAA,IACT,OAAO;AAAA,IACP,OAAO;AAAA,IACP,YAAY;AAAA,IACZ,aAAa;AAAA,EACf;AACF;AAEO,MAAM,gBAAmC;AAAA,EAC9C,MAAM;AAAA,EACN,QAAQ;AAAA,IACN,GAAG;AAAA,IACH,OAAO;AAAA,IACP,OAAO;AAAA,IACP,OAAO;AAAA,IACP,WAAW;AAAA,IACX,WAAW;AAAA,IACX,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,UAAU;AAAA,IACV,WAAW;AAAA,IACX,YAAY;AAAA,IACZ,SAAS;AAAA,IACT,OAAO;AAAA,IACP,OAAO;AAAA,EACT;AACF;AAEO,MAAM,qBAA0C,CAAC,eAAe,YAAY,kBAAkB,aAAa;AAE3G,MAAM,cAA0C,KAAK,SAAS,gBAAgB;AAAA;AAAA,EAEnF,YAAY,cAAc,OAAO;AAAA,EACjC,YAAY,cAAc,OAAO;AAAA,EACjC,QAAQ,cAAc,OAAO;AAAA,EAC7B,QAAQ,cAAc,OAAO;AAAA,EAC7B,QAAQ;AAAA,EACR,UAAU,cAAc,OAAO;AAAA,EAC/B,aAAa,cAAc,OAAO;AAAA,EAClC,WAAW,cAAc,OAAO;AAAA,EAChC,aAAa,cAAc,OAAO;AAAA,EAClC,WAAW,cAAc,OAAO;AAAA,EAChC,YAAY,cAAc,OAAO;AAAA,EACjC,QAAQ,cAAc,OAAO;AAAA,EAC7B,QAAQ,cAAc,OAAO;AAAA,EAC7B,6BAA6B;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,OAAO,UAAU,WAAW,QAAQ,MAAM;AAC3D,QAAM,CAAC,qBAAqB,sBAAsB,IAAI,SAAiB,gBAAgB;AAEvF,MAAI;AAEJ,MAAI,8BAA8B,OAAO,WAAW,eAAe,UAAU;AAC3E,qBAAiB;AAAA,MACf,MAAuB,uBAAuB,QAAQ,EAAE,KAAK,CAAC,WAAW,IAAI,gBAAgB,OAAO,OAAO,CAAC;AAAA,MAC5G,CAAC,UAAU,cAAc;AAAA,IAC3B;AAAA,EACF,OAAO;AACL,qBAAiB;AAAA,EACnB;AAEA,kBAAgB,MAAM;AACpB,QAAI,4BAA4B;AAE9B;AAAA,IACF;AAEA,QAAI,CAAC,UAAU;AACb,6BAAuB,gBAAgB;AACvC;AAAA,IACF;AAEA,QAAI;AACJ,QAAI,UAAU;AAEd,2BAAuB,QAAQ,EAAE,KAAK,CAAC,WAAW;AAChD,UAAI,SAAS;AACX,cAAM,IAAI,gBAAgB,OAAO,OAAO;AACxC,+BAAuB,GAAG;AAAA,MAC5B;AAAA,IACF,CAAC;AAED,WAAO,MAAM;AACX,gBAAU;AAAA,IACZ;AAAA,EACF,GAAG,CAAC,UAAU,0BAA0B,CAAC;AAEzC,QAAM,WAAW;AAAA;AAAA,IAEf,aAAa,yBAAyB,SAAS;AAAA,IAC/C,aAAa,yBAAyB,SAAS;AAAA,IAE/C,SAAS;AAAA,IACT,WAAW;AAAA,IACX,cAAc;AAAA,IACd,YAAY;AAAA,IACZ,cAAc;AAAA,IACd,YAAY;AAAA,IACZ,aAAa;AAAA,IACb,SAAS;AAAA,IACT,WAAW,QAAQ,KAAK;AAAA,IACxB,SAAS,kBAAkB,KAAK;AAAA;AAAA,IAGhC,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,CAAC;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { type ShaderComponentProps } from '../shader-mount.js';
|
|
2
|
+
import { type MeshGradientParams, type ShaderPreset } from '@paper-design/shaders';
|
|
3
|
+
export interface MeshGradientProps extends ShaderComponentProps, MeshGradientParams {
|
|
4
|
+
}
|
|
5
|
+
type MeshGradientPreset = ShaderPreset<MeshGradientParams>;
|
|
6
|
+
export declare const defaultPreset: MeshGradientPreset;
|
|
7
|
+
export declare const purplePreset: MeshGradientPreset;
|
|
8
|
+
export declare const beachPreset: MeshGradientPreset;
|
|
9
|
+
export declare const inkPreset: MeshGradientPreset;
|
|
10
|
+
export declare const meshGradientPresets: MeshGradientPreset[];
|
|
11
|
+
export declare const MeshGradient: React.FC<MeshGradientProps>;
|
|
12
|
+
export {};
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
/* * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
|
2
|
+
* Paper Shaders *
|
|
3
|
+
* https://github.com/paper-design/shaders *
|
|
4
|
+
* * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
|
5
|
+
|
|
6
|
+
import { memo } from "react";
|
|
7
|
+
import { ShaderMount } from "../shader-mount.js";
|
|
8
|
+
import { colorPropsAreEqual } from "../color-props-are-equal.js";
|
|
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: 0,
|
|
22
|
+
colors: ["#e0eaff", "#241d9a", "#f75092", "#9f50d3"],
|
|
23
|
+
distortion: 0.8,
|
|
24
|
+
swirl: 0.1,
|
|
25
|
+
grainMixer: 0,
|
|
26
|
+
grainOverlay: 0
|
|
27
|
+
}
|
|
28
|
+
};
|
|
29
|
+
const purplePreset = {
|
|
30
|
+
name: "Purple",
|
|
31
|
+
params: {
|
|
32
|
+
...defaultObjectSizing,
|
|
33
|
+
speed: 0.6,
|
|
34
|
+
frame: 0,
|
|
35
|
+
colors: ["#aaa7d7", "#3c2b8e"],
|
|
36
|
+
distortion: 1,
|
|
37
|
+
swirl: 1,
|
|
38
|
+
grainMixer: 0,
|
|
39
|
+
grainOverlay: 0
|
|
40
|
+
}
|
|
41
|
+
};
|
|
42
|
+
const beachPreset = {
|
|
43
|
+
name: "Beach",
|
|
44
|
+
params: {
|
|
45
|
+
...defaultObjectSizing,
|
|
46
|
+
speed: 0.1,
|
|
47
|
+
frame: 0,
|
|
48
|
+
colors: ["#bcecf6", "#00aaff", "#00f7ff", "#ffd447"],
|
|
49
|
+
distortion: 0.8,
|
|
50
|
+
swirl: 0.35,
|
|
51
|
+
grainMixer: 0,
|
|
52
|
+
grainOverlay: 0
|
|
53
|
+
}
|
|
54
|
+
};
|
|
55
|
+
const inkPreset = {
|
|
56
|
+
name: "Ink",
|
|
57
|
+
params: {
|
|
58
|
+
...defaultObjectSizing,
|
|
59
|
+
speed: 1,
|
|
60
|
+
frame: 0,
|
|
61
|
+
colors: ["#ffffff", "#000000"],
|
|
62
|
+
distortion: 1,
|
|
63
|
+
swirl: 0.2,
|
|
64
|
+
rotation: 90,
|
|
65
|
+
grainMixer: 0,
|
|
66
|
+
grainOverlay: 0
|
|
67
|
+
}
|
|
68
|
+
};
|
|
69
|
+
const meshGradientPresets = [defaultPreset, inkPreset, purplePreset, beachPreset];
|
|
70
|
+
const MeshGradient = memo(function MeshGradientImpl({
|
|
71
|
+
// Own props
|
|
72
|
+
speed = defaultPreset.params.speed,
|
|
73
|
+
frame = defaultPreset.params.frame,
|
|
74
|
+
colors = defaultPreset.params.colors,
|
|
75
|
+
distortion = defaultPreset.params.distortion,
|
|
76
|
+
swirl = defaultPreset.params.swirl,
|
|
77
|
+
grainMixer = defaultPreset.params.grainMixer,
|
|
78
|
+
grainOverlay = defaultPreset.params.grainOverlay,
|
|
79
|
+
// Sizing props
|
|
80
|
+
fit = defaultPreset.params.fit,
|
|
81
|
+
rotation = defaultPreset.params.rotation,
|
|
82
|
+
scale = defaultPreset.params.scale,
|
|
83
|
+
originX = defaultPreset.params.originX,
|
|
84
|
+
originY = defaultPreset.params.originY,
|
|
85
|
+
offsetX = defaultPreset.params.offsetX,
|
|
86
|
+
offsetY = defaultPreset.params.offsetY,
|
|
87
|
+
worldWidth = defaultPreset.params.worldWidth,
|
|
88
|
+
worldHeight = defaultPreset.params.worldHeight,
|
|
89
|
+
...props
|
|
90
|
+
}) {
|
|
91
|
+
const uniforms = {
|
|
92
|
+
// Own uniforms
|
|
93
|
+
u_colors: colors.map(getShaderColorFromString),
|
|
94
|
+
u_colorsCount: colors.length,
|
|
95
|
+
u_distortion: distortion,
|
|
96
|
+
u_swirl: swirl,
|
|
97
|
+
u_grainMixer: grainMixer,
|
|
98
|
+
u_grainOverlay: grainOverlay,
|
|
99
|
+
// Sizing uniforms
|
|
100
|
+
u_fit: ShaderFitOptions[fit],
|
|
101
|
+
u_rotation: rotation,
|
|
102
|
+
u_scale: scale,
|
|
103
|
+
u_offsetX: offsetX,
|
|
104
|
+
u_offsetY: offsetY,
|
|
105
|
+
u_originX: originX,
|
|
106
|
+
u_originY: originY,
|
|
107
|
+
u_worldWidth: worldWidth,
|
|
108
|
+
u_worldHeight: worldHeight
|
|
109
|
+
};
|
|
110
|
+
return /* @__PURE__ */ jsx(
|
|
111
|
+
ShaderMount,
|
|
112
|
+
{
|
|
113
|
+
...props,
|
|
114
|
+
speed,
|
|
115
|
+
frame,
|
|
116
|
+
fragmentShader: meshGradientFragmentShader,
|
|
117
|
+
uniforms
|
|
118
|
+
}
|
|
119
|
+
);
|
|
120
|
+
}, colorPropsAreEqual);
|
|
121
|
+
export {
|
|
122
|
+
MeshGradient,
|
|
123
|
+
beachPreset,
|
|
124
|
+
defaultPreset,
|
|
125
|
+
inkPreset,
|
|
126
|
+
meshGradientPresets,
|
|
127
|
+
purplePreset
|
|
128
|
+
};
|
|
129
|
+
//# 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.js';\nimport { colorPropsAreEqual } from '../color-props-are-equal.js';\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\nexport const defaultPreset: MeshGradientPreset = {\n name: 'Default',\n params: {\n ...defaultObjectSizing,\n speed: 1,\n frame: 0,\n colors: ['#e0eaff', '#241d9a', '#f75092', '#9f50d3'],\n distortion: 0.8,\n swirl: 0.1,\n grainMixer: 0,\n grainOverlay: 0,\n },\n};\n\nexport const purplePreset: MeshGradientPreset = {\n name: 'Purple',\n params: {\n ...defaultObjectSizing,\n speed: 0.6,\n frame: 0,\n colors: ['#aaa7d7', '#3c2b8e'],\n distortion: 1,\n swirl: 1,\n grainMixer: 0,\n grainOverlay: 0,\n },\n};\n\nexport const beachPreset: MeshGradientPreset = {\n name: 'Beach',\n params: {\n ...defaultObjectSizing,\n speed: 0.1,\n frame: 0,\n colors: ['#bcecf6', '#00aaff', '#00f7ff', '#ffd447'],\n distortion: 0.8,\n swirl: 0.35,\n grainMixer: 0,\n grainOverlay: 0,\n },\n};\n\nexport const inkPreset: MeshGradientPreset = {\n name: 'Ink',\n params: {\n ...defaultObjectSizing,\n speed: 1,\n frame: 0,\n colors: ['#ffffff', '#000000'],\n distortion: 1,\n swirl: 0.2,\n rotation: 90,\n grainMixer: 0,\n grainOverlay: 0,\n },\n};\n\nexport const meshGradientPresets: MeshGradientPreset[] = [defaultPreset, inkPreset, 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 grainMixer = defaultPreset.params.grainMixer,\n grainOverlay = defaultPreset.params.grainOverlay,\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 u_grainMixer: grainMixer,\n u_grainOverlay: grainOverlay,\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;AA6GH;AAvGG,MAAM,gBAAoC;AAAA,EAC/C,MAAM;AAAA,EACN,QAAQ;AAAA,IACN,GAAG;AAAA,IACH,OAAO;AAAA,IACP,OAAO;AAAA,IACP,QAAQ,CAAC,WAAW,WAAW,WAAW,SAAS;AAAA,IACnD,YAAY;AAAA,IACZ,OAAO;AAAA,IACP,YAAY;AAAA,IACZ,cAAc;AAAA,EAChB;AACF;AAEO,MAAM,eAAmC;AAAA,EAC9C,MAAM;AAAA,EACN,QAAQ;AAAA,IACN,GAAG;AAAA,IACH,OAAO;AAAA,IACP,OAAO;AAAA,IACP,QAAQ,CAAC,WAAW,SAAS;AAAA,IAC7B,YAAY;AAAA,IACZ,OAAO;AAAA,IACP,YAAY;AAAA,IACZ,cAAc;AAAA,EAChB;AACF;AAEO,MAAM,cAAkC;AAAA,EAC7C,MAAM;AAAA,EACN,QAAQ;AAAA,IACN,GAAG;AAAA,IACH,OAAO;AAAA,IACP,OAAO;AAAA,IACP,QAAQ,CAAC,WAAW,WAAW,WAAW,SAAS;AAAA,IACnD,YAAY;AAAA,IACZ,OAAO;AAAA,IACP,YAAY;AAAA,IACZ,cAAc;AAAA,EAChB;AACF;AAEO,MAAM,YAAgC;AAAA,EAC3C,MAAM;AAAA,EACN,QAAQ;AAAA,IACN,GAAG;AAAA,IACH,OAAO;AAAA,IACP,OAAO;AAAA,IACP,QAAQ,CAAC,WAAW,SAAS;AAAA,IAC7B,YAAY;AAAA,IACZ,OAAO;AAAA,IACP,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,cAAc;AAAA,EAChB;AACF;AAEO,MAAM,sBAA4C,CAAC,eAAe,WAAW,cAAc,WAAW;AAEtG,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,EAC7B,aAAa,cAAc,OAAO;AAAA,EAClC,eAAe,cAAc,OAAO;AAAA;AAAA,EAGpC,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,IACT,cAAc;AAAA,IACd,gBAAgB;AAAA;AAAA,IAGhB,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
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { type ShaderComponentProps } from '../shader-mount.js';
|
|
2
|
+
import { type MetaballsParams, type ShaderPreset } from '@paper-design/shaders';
|
|
3
|
+
export interface MetaballsProps extends ShaderComponentProps, MetaballsParams {
|
|
4
|
+
}
|
|
5
|
+
type MetaballsPreset = ShaderPreset<MetaballsParams>;
|
|
6
|
+
export declare const defaultPreset: MetaballsPreset;
|
|
7
|
+
export declare const inkDropsPreset: MetaballsPreset;
|
|
8
|
+
export declare const backgroundPreset: MetaballsPreset;
|
|
9
|
+
export declare const solarPreset: MetaballsPreset;
|
|
10
|
+
export declare const metaballsPresets: MetaballsPreset[];
|
|
11
|
+
export declare const Metaballs: React.FC<MetaballsProps>;
|
|
12
|
+
export {};
|