@paper-design/shaders-react 0.0.0-canary.7930b4d → 0.0.0-canary.7fc2fb35
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 +201 -21
- package/NOTICE +5 -0
- package/dist/color-props-are-equal.js +3 -0
- package/dist/color-props-are-equal.js.map +2 -2
- package/dist/index.d.ts +10 -1
- package/dist/index.js +13 -0
- package/dist/index.js.map +2 -2
- package/dist/set-min-image-size.d.ts +5 -0
- package/dist/set-min-image-size.js +19 -0
- package/dist/set-min-image-size.js.map +7 -0
- package/dist/shader-mount.js +15 -10
- package/dist/shader-mount.js.map +2 -2
- package/dist/shaders/fluted-glass.d.ts +0 -2
- package/dist/shaders/fluted-glass.js +12 -9
- package/dist/shaders/fluted-glass.js.map +2 -2
- package/dist/shaders/gem-smoke.d.ts +16 -0
- package/dist/shaders/gem-smoke.js +208 -0
- package/dist/shaders/gem-smoke.js.map +7 -0
- package/dist/shaders/halftone-cmyk.d.ts +12 -0
- package/dist/shaders/halftone-cmyk.js +236 -0
- package/dist/shaders/halftone-cmyk.js.map +7 -0
- package/dist/shaders/halftone-dots.js +26 -19
- package/dist/shaders/halftone-dots.js.map +2 -2
- package/dist/shaders/image-dithering.js +10 -4
- package/dist/shaders/image-dithering.js.map +2 -2
- package/dist/shaders/lens-distortion.d.ts +12 -0
- package/dist/shaders/lens-distortion.js +231 -0
- package/dist/shaders/lens-distortion.js.map +7 -0
- package/dist/shaders/liquid-metal.js +1 -1
- package/dist/shaders/liquid-metal.js.map +1 -1
- package/dist/shaders/paper-texture.d.ts +3 -7
- package/dist/shaders/paper-texture.js +119 -84
- package/dist/shaders/paper-texture.js.map +2 -2
- package/dist/shaders/pulsing-border.js +1 -1
- package/dist/shaders/pulsing-border.js.map +1 -1
- package/dist/shaders/static-radial-gradient.js +3 -3
- package/dist/shaders/static-radial-gradient.js.map +1 -1
- package/package.json +6 -4
|
@@ -19,7 +19,6 @@ const defaultPreset = {
|
|
|
19
19
|
params: {
|
|
20
20
|
...defaultObjectSizing,
|
|
21
21
|
fit: "cover",
|
|
22
|
-
scale: 1.1,
|
|
23
22
|
speed: 0,
|
|
24
23
|
frame: 0,
|
|
25
24
|
colorBack: "#00000000",
|
|
@@ -34,6 +33,7 @@ const defaultPreset = {
|
|
|
34
33
|
distortion: 0.5,
|
|
35
34
|
shift: 0,
|
|
36
35
|
blur: 0,
|
|
36
|
+
edges: 0.25,
|
|
37
37
|
stretch: 0,
|
|
38
38
|
margin: 0,
|
|
39
39
|
marginLeft: 0,
|
|
@@ -64,6 +64,7 @@ const wavesPreset = {
|
|
|
64
64
|
distortion: 0.5,
|
|
65
65
|
shift: 0,
|
|
66
66
|
blur: 0.1,
|
|
67
|
+
edges: 0.5,
|
|
67
68
|
stretch: 1,
|
|
68
69
|
margin: 0,
|
|
69
70
|
marginLeft: 0,
|
|
@@ -94,6 +95,7 @@ const abstractPreset = {
|
|
|
94
95
|
distortion: 1,
|
|
95
96
|
shift: 0,
|
|
96
97
|
blur: 1,
|
|
98
|
+
edges: 0.5,
|
|
97
99
|
stretch: 1,
|
|
98
100
|
margin: 0,
|
|
99
101
|
marginLeft: 0,
|
|
@@ -123,12 +125,13 @@ const foldsPreset = {
|
|
|
123
125
|
distortion: 0.75,
|
|
124
126
|
shift: 0,
|
|
125
127
|
blur: 0.25,
|
|
128
|
+
edges: 0.5,
|
|
126
129
|
stretch: 0,
|
|
127
|
-
margin: 0.
|
|
128
|
-
marginLeft: 0.
|
|
129
|
-
marginRight: 0.
|
|
130
|
-
marginTop: 0.
|
|
131
|
-
marginBottom: 0.
|
|
130
|
+
margin: 0.1,
|
|
131
|
+
marginLeft: 0.1,
|
|
132
|
+
marginRight: 0.1,
|
|
133
|
+
marginTop: 0.1,
|
|
134
|
+
marginBottom: 0.1,
|
|
132
135
|
grainMixer: 0,
|
|
133
136
|
grainOverlay: 0
|
|
134
137
|
}
|
|
@@ -150,6 +153,7 @@ const FlutedGlass = memo(function FlutedGlassImpl({
|
|
|
150
153
|
shape = defaultPreset.params.shape,
|
|
151
154
|
shift = defaultPreset.params.shift,
|
|
152
155
|
blur = defaultPreset.params.blur,
|
|
156
|
+
edges = defaultPreset.params.edges,
|
|
153
157
|
margin,
|
|
154
158
|
marginLeft = margin ?? defaultPreset.params.marginLeft,
|
|
155
159
|
marginRight = margin ?? defaultPreset.params.marginRight,
|
|
@@ -157,9 +161,7 @@ const FlutedGlass = memo(function FlutedGlassImpl({
|
|
|
157
161
|
marginBottom = margin ?? defaultPreset.params.marginBottom,
|
|
158
162
|
grainMixer = defaultPreset.params.grainMixer,
|
|
159
163
|
grainOverlay = defaultPreset.params.grainOverlay,
|
|
160
|
-
|
|
161
|
-
edges,
|
|
162
|
-
stretch = edges === void 0 ? defaultPreset.params.stretch : edges,
|
|
164
|
+
stretch = defaultPreset.params.stretch,
|
|
163
165
|
// integer `count` was deprecated in favor of the normalized `size` param
|
|
164
166
|
count,
|
|
165
167
|
size = count === void 0 ? defaultPreset.params.size : Math.pow(1 / (count * 1.6), 1 / 6) / 0.7 - 0.5,
|
|
@@ -187,6 +189,7 @@ const FlutedGlass = memo(function FlutedGlassImpl({
|
|
|
187
189
|
u_distortion: distortion,
|
|
188
190
|
u_shift: shift,
|
|
189
191
|
u_blur: blur,
|
|
192
|
+
u_edges: edges,
|
|
190
193
|
u_stretch: stretch,
|
|
191
194
|
u_distortionShape: GlassDistortionShapes[distortionShape],
|
|
192
195
|
u_highlights: highlights,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/shaders/fluted-glass.tsx"],
|
|
4
|
-
"sourcesContent": ["import { memo } from 'react';\nimport { ShaderMount, type ShaderComponentProps } from '../shader-mount.js';\nimport {\n flutedGlassFragmentShader,\n ShaderFitOptions,\n type FlutedGlassUniforms,\n type FlutedGlassParams,\n defaultObjectSizing,\n GlassDistortionShapes,\n GlassGridShapes,\n type ImageShaderPreset,\n getShaderColorFromString,\n} from '@paper-design/shaders';\n\nexport interface FlutedGlassProps extends ShaderComponentProps, FlutedGlassParams {\n /** @deprecated use `
|
|
5
|
-
"mappings": ";;;;;AAAA,SAAS,YAAY;AACrB,SAAS,mBAA8C;AACvD;AAAA,EACE;AAAA,EACA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EAEA;AAAA,OACK;AAwNH;
|
|
4
|
+
"sourcesContent": ["import { memo } from 'react';\nimport { ShaderMount, type ShaderComponentProps } from '../shader-mount.js';\nimport {\n flutedGlassFragmentShader,\n ShaderFitOptions,\n type FlutedGlassUniforms,\n type FlutedGlassParams,\n defaultObjectSizing,\n GlassDistortionShapes,\n GlassGridShapes,\n type ImageShaderPreset,\n getShaderColorFromString,\n} from '@paper-design/shaders';\n\nexport interface FlutedGlassProps extends ShaderComponentProps, FlutedGlassParams {\n /** @deprecated use `size` instead */\n count?: number;\n}\n\ntype FlutedGlassPreset = ImageShaderPreset<FlutedGlassParams>;\n\nexport const defaultPreset: FlutedGlassPreset = {\n name: 'Default',\n params: {\n ...defaultObjectSizing,\n fit: 'cover',\n speed: 0,\n frame: 0,\n colorBack: '#00000000',\n colorShadow: '#000000',\n colorHighlight: '#ffffff',\n shadows: 0.25,\n size: 0.5,\n angle: 0,\n distortionShape: 'prism',\n highlights: 0.1,\n shape: 'lines',\n distortion: 0.5,\n shift: 0,\n blur: 0,\n edges: 0.25,\n stretch: 0,\n margin: 0,\n marginLeft: 0,\n marginRight: 0,\n marginTop: 0,\n marginBottom: 0,\n grainMixer: 0,\n grainOverlay: 0,\n },\n};\n\nexport const wavesPreset: FlutedGlassPreset = {\n name: 'Waves',\n params: {\n ...defaultObjectSizing,\n fit: 'cover',\n scale: 1.2,\n speed: 0,\n frame: 0,\n colorBack: '#00000000',\n colorShadow: '#000000',\n colorHighlight: '#ffffff',\n shadows: 0,\n size: 0.9,\n angle: 0,\n distortionShape: 'contour',\n highlights: 0,\n shape: 'wave',\n distortion: 0.5,\n shift: 0,\n blur: 0.1,\n edges: 0.5,\n stretch: 1,\n margin: 0,\n marginLeft: 0,\n marginRight: 0,\n marginTop: 0,\n marginBottom: 0,\n grainMixer: 0,\n grainOverlay: 0.05,\n },\n};\n\nexport const abstractPreset: FlutedGlassPreset = {\n name: 'Abstract',\n params: {\n ...defaultObjectSizing,\n fit: 'cover',\n scale: 4,\n speed: 0,\n frame: 0,\n colorBack: '#00000000',\n colorShadow: '#000000',\n colorHighlight: '#ffffff',\n shadows: 0,\n size: 0.7,\n angle: 30,\n distortionShape: 'flat',\n highlights: 0,\n shape: 'linesIrregular',\n distortion: 1,\n shift: 0,\n blur: 1,\n edges: 0.5,\n stretch: 1,\n margin: 0,\n marginLeft: 0,\n marginRight: 0,\n marginTop: 0,\n marginBottom: 0,\n grainMixer: 0.1,\n grainOverlay: 0.1,\n },\n};\n\nexport const foldsPreset: FlutedGlassPreset = {\n name: 'Folds',\n params: {\n ...defaultObjectSizing,\n fit: 'cover',\n speed: 0,\n frame: 0,\n colorBack: '#00000000',\n colorShadow: '#000000',\n colorHighlight: '#ffffff',\n shadows: 0.4,\n size: 0.4,\n angle: 0,\n distortionShape: 'cascade',\n highlights: 0,\n shape: 'lines',\n distortion: 0.75,\n shift: 0,\n blur: 0.25,\n edges: 0.5,\n stretch: 0,\n margin: 0.1,\n marginLeft: 0.1,\n marginRight: 0.1,\n marginTop: 0.1,\n marginBottom: 0.1,\n grainMixer: 0,\n grainOverlay: 0,\n },\n};\n\nexport const flutedGlassPresets: FlutedGlassPreset[] = [defaultPreset, abstractPreset, wavesPreset, foldsPreset];\n\nexport const FlutedGlass: React.FC<FlutedGlassProps> = memo(function FlutedGlassImpl({\n // Own props\n speed = defaultPreset.params.speed,\n frame = defaultPreset.params.frame,\n colorBack = defaultPreset.params.colorBack,\n colorShadow = defaultPreset.params.colorShadow,\n colorHighlight = defaultPreset.params.colorHighlight,\n image = '',\n shadows = defaultPreset.params.shadows,\n angle = defaultPreset.params.angle,\n distortion = defaultPreset.params.distortion,\n distortionShape = defaultPreset.params.distortionShape,\n highlights = defaultPreset.params.highlights,\n shape = defaultPreset.params.shape,\n shift = defaultPreset.params.shift,\n blur = defaultPreset.params.blur,\n edges = defaultPreset.params.edges,\n margin,\n marginLeft = margin ?? defaultPreset.params.marginLeft,\n marginRight = margin ?? defaultPreset.params.marginRight,\n marginTop = margin ?? defaultPreset.params.marginTop,\n marginBottom = margin ?? defaultPreset.params.marginBottom,\n grainMixer = defaultPreset.params.grainMixer,\n grainOverlay = defaultPreset.params.grainOverlay,\n stretch = defaultPreset.params.stretch,\n\n // integer `count` was deprecated in favor of the normalized `size` param\n count,\n size = count === undefined ? defaultPreset.params.size : Math.pow(1 / (count * 1.6), 1 / 6) / 0.7 - 0.5,\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}: FlutedGlassProps) {\n const uniforms = {\n // Own uniforms\n u_image: image,\n u_colorBack: getShaderColorFromString(colorBack),\n u_colorShadow: getShaderColorFromString(colorShadow),\n u_colorHighlight: getShaderColorFromString(colorHighlight),\n u_shadows: shadows,\n u_size: size,\n u_angle: angle,\n u_distortion: distortion,\n u_shift: shift,\n u_blur: blur,\n u_edges: edges,\n u_stretch: stretch,\n u_distortionShape: GlassDistortionShapes[distortionShape],\n u_highlights: highlights,\n u_shape: GlassGridShapes[shape],\n u_marginLeft: marginLeft,\n u_marginRight: marginRight,\n u_marginTop: marginTop,\n u_marginBottom: marginBottom,\n u_grainMixer: grainMixer,\n u_grainOverlay: grainOverlay,\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 FlutedGlassUniforms;\n\n return (\n <ShaderMount\n {...props}\n speed={speed}\n frame={frame}\n fragmentShader={flutedGlassFragmentShader}\n mipmaps={['u_image']}\n uniforms={uniforms}\n />\n );\n});\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { type ShaderComponentProps } from '../shader-mount.js';
|
|
2
|
+
import { type GemSmokeParams, type ImageShaderPreset } from '@paper-design/shaders';
|
|
3
|
+
export interface GemSmokeProps extends ShaderComponentProps, GemSmokeParams {
|
|
4
|
+
/**
|
|
5
|
+
* Suspends the component when the image is being processed.
|
|
6
|
+
*/
|
|
7
|
+
suspendWhenProcessingImage?: boolean;
|
|
8
|
+
}
|
|
9
|
+
type GemSmokePreset = ImageShaderPreset<GemSmokeParams>;
|
|
10
|
+
export declare const defaultPreset: GemSmokePreset;
|
|
11
|
+
export declare const fluorescentPreset: GemSmokePreset;
|
|
12
|
+
export declare const firePreset: GemSmokePreset;
|
|
13
|
+
export declare const infraredPreset: GemSmokePreset;
|
|
14
|
+
export declare const gemSmokePresets: GemSmokePreset[];
|
|
15
|
+
export declare const GemSmoke: React.FC<GemSmokeProps>;
|
|
16
|
+
export {};
|
|
@@ -0,0 +1,208 @@
|
|
|
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 { colorPropsAreEqual } from "../color-props-are-equal.js";
|
|
9
|
+
import {
|
|
10
|
+
gemSmokeFragmentShader,
|
|
11
|
+
ShaderFitOptions,
|
|
12
|
+
defaultObjectSizing,
|
|
13
|
+
toProcessedGemSmoke,
|
|
14
|
+
getShaderColorFromString,
|
|
15
|
+
GemSmokeShapes
|
|
16
|
+
} from "@paper-design/shaders";
|
|
17
|
+
import { transparentPixel } from "../transparent-pixel.js";
|
|
18
|
+
import { suspend } from "../suspend.js";
|
|
19
|
+
import { jsx } from "react/jsx-runtime";
|
|
20
|
+
const defaultPreset = {
|
|
21
|
+
name: "Default",
|
|
22
|
+
params: {
|
|
23
|
+
...defaultObjectSizing,
|
|
24
|
+
scale: 0.6,
|
|
25
|
+
speed: 1,
|
|
26
|
+
frame: 0,
|
|
27
|
+
colorBack: "#f0efea",
|
|
28
|
+
colorInner: "#fafaf5",
|
|
29
|
+
colors: ["#333333", "#e7e6df"],
|
|
30
|
+
outerGlow: 0.55,
|
|
31
|
+
innerGlow: 1,
|
|
32
|
+
innerDistortion: 0.8,
|
|
33
|
+
outerDistortion: 0.6,
|
|
34
|
+
offset: 0,
|
|
35
|
+
angle: 0,
|
|
36
|
+
size: 0.8,
|
|
37
|
+
shape: "diamond"
|
|
38
|
+
}
|
|
39
|
+
};
|
|
40
|
+
const fluorescentPreset = {
|
|
41
|
+
name: "Fluorescent",
|
|
42
|
+
params: {
|
|
43
|
+
...defaultObjectSizing,
|
|
44
|
+
scale: 0.6,
|
|
45
|
+
speed: 1,
|
|
46
|
+
frame: 0,
|
|
47
|
+
colorBack: "#000000",
|
|
48
|
+
colorInner: "#000000",
|
|
49
|
+
colors: ["#2fb64c", "#cdff61", "#ffffff"],
|
|
50
|
+
outerGlow: 0,
|
|
51
|
+
innerGlow: 1,
|
|
52
|
+
innerDistortion: 1,
|
|
53
|
+
outerDistortion: 0.8,
|
|
54
|
+
offset: 0,
|
|
55
|
+
angle: 0,
|
|
56
|
+
size: 0.8,
|
|
57
|
+
shape: "diamond"
|
|
58
|
+
}
|
|
59
|
+
};
|
|
60
|
+
const firePreset = {
|
|
61
|
+
name: "Fire",
|
|
62
|
+
params: {
|
|
63
|
+
...defaultObjectSizing,
|
|
64
|
+
scale: 0.6,
|
|
65
|
+
speed: 1,
|
|
66
|
+
frame: 0,
|
|
67
|
+
colorBack: "#000000",
|
|
68
|
+
colorInner: "#000000",
|
|
69
|
+
colors: ["#fe5b16", "#f7ff61", "#ffffff"],
|
|
70
|
+
outerGlow: 1,
|
|
71
|
+
innerGlow: 0.65,
|
|
72
|
+
innerDistortion: 0.6,
|
|
73
|
+
outerDistortion: 0.8,
|
|
74
|
+
offset: 0,
|
|
75
|
+
angle: 0,
|
|
76
|
+
size: 0.8,
|
|
77
|
+
shape: "diamond"
|
|
78
|
+
}
|
|
79
|
+
};
|
|
80
|
+
const infraredPreset = {
|
|
81
|
+
name: "Infrared",
|
|
82
|
+
params: {
|
|
83
|
+
...defaultObjectSizing,
|
|
84
|
+
scale: 0.6,
|
|
85
|
+
speed: 0.5,
|
|
86
|
+
frame: 0,
|
|
87
|
+
colorBack: "#cd28dc",
|
|
88
|
+
colorInner: "#00000000",
|
|
89
|
+
colors: ["#ff9900", "#fff67a", "#dcff52", "#00ffbb", "#0077ff"],
|
|
90
|
+
outerGlow: 1,
|
|
91
|
+
innerGlow: 1,
|
|
92
|
+
innerDistortion: 1,
|
|
93
|
+
outerDistortion: 1,
|
|
94
|
+
offset: 0.2,
|
|
95
|
+
angle: 0,
|
|
96
|
+
size: 1,
|
|
97
|
+
shape: "diamond"
|
|
98
|
+
}
|
|
99
|
+
};
|
|
100
|
+
const gemSmokePresets = [defaultPreset, firePreset, fluorescentPreset, infraredPreset];
|
|
101
|
+
const GemSmoke = memo(function GemSmokeImpl({
|
|
102
|
+
// Own props
|
|
103
|
+
colorBack = defaultPreset.params.colorBack,
|
|
104
|
+
colors = defaultPreset.params.colors,
|
|
105
|
+
speed = defaultPreset.params.speed,
|
|
106
|
+
frame = defaultPreset.params.frame,
|
|
107
|
+
image = "",
|
|
108
|
+
innerDistortion = defaultPreset.params.innerDistortion,
|
|
109
|
+
outerDistortion = defaultPreset.params.outerDistortion,
|
|
110
|
+
outerGlow = defaultPreset.params.outerGlow,
|
|
111
|
+
innerGlow = defaultPreset.params.innerGlow,
|
|
112
|
+
colorInner = defaultPreset.params.colorInner,
|
|
113
|
+
offset = defaultPreset.params.offset,
|
|
114
|
+
angle = defaultPreset.params.angle,
|
|
115
|
+
size = defaultPreset.params.size,
|
|
116
|
+
shape = defaultPreset.params.shape,
|
|
117
|
+
suspendWhenProcessingImage = false,
|
|
118
|
+
// Sizing props
|
|
119
|
+
fit = defaultPreset.params.fit,
|
|
120
|
+
scale = defaultPreset.params.scale,
|
|
121
|
+
rotation = defaultPreset.params.rotation,
|
|
122
|
+
originX = defaultPreset.params.originX,
|
|
123
|
+
originY = defaultPreset.params.originY,
|
|
124
|
+
offsetX = defaultPreset.params.offsetX,
|
|
125
|
+
offsetY = defaultPreset.params.offsetY,
|
|
126
|
+
worldWidth = defaultPreset.params.worldWidth,
|
|
127
|
+
worldHeight = defaultPreset.params.worldHeight,
|
|
128
|
+
...props
|
|
129
|
+
}) {
|
|
130
|
+
const imageUrl = typeof image === "string" ? image : image.src;
|
|
131
|
+
const [processedStateImage, setProcessedStateImage] = useState(transparentPixel);
|
|
132
|
+
let processedImage;
|
|
133
|
+
if (suspendWhenProcessingImage && typeof window !== "undefined" && imageUrl) {
|
|
134
|
+
processedImage = suspend(
|
|
135
|
+
() => toProcessedGemSmoke(imageUrl).then((result) => URL.createObjectURL(result.pngBlob)),
|
|
136
|
+
[imageUrl, "gemSmoke"]
|
|
137
|
+
);
|
|
138
|
+
} else {
|
|
139
|
+
processedImage = processedStateImage;
|
|
140
|
+
}
|
|
141
|
+
useLayoutEffect(() => {
|
|
142
|
+
if (suspendWhenProcessingImage) {
|
|
143
|
+
return;
|
|
144
|
+
}
|
|
145
|
+
if (!imageUrl) {
|
|
146
|
+
setProcessedStateImage(transparentPixel);
|
|
147
|
+
return;
|
|
148
|
+
}
|
|
149
|
+
let url;
|
|
150
|
+
let current = true;
|
|
151
|
+
toProcessedGemSmoke(imageUrl).then((result) => {
|
|
152
|
+
if (current) {
|
|
153
|
+
url = URL.createObjectURL(result.pngBlob);
|
|
154
|
+
setProcessedStateImage(url);
|
|
155
|
+
}
|
|
156
|
+
});
|
|
157
|
+
return () => {
|
|
158
|
+
current = false;
|
|
159
|
+
};
|
|
160
|
+
}, [imageUrl, suspendWhenProcessingImage]);
|
|
161
|
+
const uniforms = {
|
|
162
|
+
// Own uniforms
|
|
163
|
+
u_colors: colors.map(getShaderColorFromString),
|
|
164
|
+
u_colorsCount: colors.length,
|
|
165
|
+
u_colorBack: getShaderColorFromString(colorBack),
|
|
166
|
+
u_image: processedImage,
|
|
167
|
+
u_innerDistortion: innerDistortion,
|
|
168
|
+
u_outerDistortion: outerDistortion,
|
|
169
|
+
u_outerGlow: outerGlow,
|
|
170
|
+
u_innerGlow: innerGlow,
|
|
171
|
+
u_colorInner: getShaderColorFromString(colorInner),
|
|
172
|
+
u_offset: offset,
|
|
173
|
+
u_angle: angle,
|
|
174
|
+
u_size: size,
|
|
175
|
+
u_isImage: Boolean(image),
|
|
176
|
+
u_shape: GemSmokeShapes[shape],
|
|
177
|
+
// Sizing uniforms
|
|
178
|
+
u_fit: ShaderFitOptions[fit],
|
|
179
|
+
u_scale: scale,
|
|
180
|
+
u_rotation: rotation,
|
|
181
|
+
u_offsetX: offsetX,
|
|
182
|
+
u_offsetY: offsetY,
|
|
183
|
+
u_originX: originX,
|
|
184
|
+
u_originY: originY,
|
|
185
|
+
u_worldWidth: worldWidth,
|
|
186
|
+
u_worldHeight: worldHeight
|
|
187
|
+
};
|
|
188
|
+
return /* @__PURE__ */ jsx(
|
|
189
|
+
ShaderMount,
|
|
190
|
+
{
|
|
191
|
+
...props,
|
|
192
|
+
speed,
|
|
193
|
+
frame,
|
|
194
|
+
fragmentShader: gemSmokeFragmentShader,
|
|
195
|
+
mipmaps: ["u_image"],
|
|
196
|
+
uniforms
|
|
197
|
+
}
|
|
198
|
+
);
|
|
199
|
+
}, colorPropsAreEqual);
|
|
200
|
+
export {
|
|
201
|
+
GemSmoke,
|
|
202
|
+
defaultPreset,
|
|
203
|
+
firePreset,
|
|
204
|
+
fluorescentPreset,
|
|
205
|
+
gemSmokePresets,
|
|
206
|
+
infraredPreset
|
|
207
|
+
};
|
|
208
|
+
//# sourceMappingURL=gem-smoke.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/shaders/gem-smoke.tsx"],
|
|
4
|
+
"sourcesContent": ["import { memo, useLayoutEffect, useState } from 'react';\nimport { ShaderMount, type ShaderComponentProps } from '../shader-mount.js';\nimport { colorPropsAreEqual } from '../color-props-are-equal.js';\nimport {\n gemSmokeFragmentShader,\n ShaderFitOptions,\n defaultObjectSizing,\n type GemSmokeUniforms,\n type GemSmokeParams,\n toProcessedGemSmoke,\n type ImageShaderPreset,\n getShaderColorFromString,\n GemSmokeShapes,\n} from '@paper-design/shaders';\nimport { transparentPixel } from '../transparent-pixel.js';\nimport { suspend } from '../suspend.js';\n\nexport interface GemSmokeProps extends ShaderComponentProps, GemSmokeParams {\n /**\n * Suspends the component when the image is being processed.\n */\n suspendWhenProcessingImage?: boolean;\n}\n\ntype GemSmokePreset = ImageShaderPreset<GemSmokeParams>;\n\nexport const defaultPreset: GemSmokePreset = {\n name: 'Default',\n params: {\n ...defaultObjectSizing,\n scale: 0.6,\n speed: 1,\n frame: 0,\n colorBack: '#f0efea',\n colorInner: '#fafaf5',\n colors: ['#333333', '#e7e6df'],\n outerGlow: 0.55,\n innerGlow: 1,\n innerDistortion: 0.8,\n outerDistortion: 0.6,\n offset: 0,\n angle: 0,\n size: 0.8,\n shape: 'diamond',\n },\n};\n\nexport const fluorescentPreset: GemSmokePreset = {\n name: 'Fluorescent',\n params: {\n ...defaultObjectSizing,\n scale: 0.6,\n speed: 1,\n frame: 0,\n colorBack: '#000000',\n colorInner: '#000000',\n colors: ['#2fb64c', '#cdff61', '#ffffff'],\n outerGlow: 0,\n innerGlow: 1,\n innerDistortion: 1,\n outerDistortion: 0.8,\n offset: 0,\n angle: 0,\n size: 0.8,\n shape: 'diamond',\n },\n};\n\nexport const firePreset: GemSmokePreset = {\n name: 'Fire',\n params: {\n ...defaultObjectSizing,\n scale: 0.6,\n speed: 1,\n frame: 0,\n colorBack: '#000000',\n colorInner: '#000000',\n colors: ['#fe5b16', '#f7ff61', '#ffffff'],\n outerGlow: 1,\n innerGlow: 0.65,\n innerDistortion: 0.6,\n outerDistortion: 0.8,\n offset: 0,\n angle: 0,\n size: 0.8,\n shape: 'diamond',\n },\n};\n\nexport const infraredPreset: GemSmokePreset = {\n name: 'Infrared',\n params: {\n ...defaultObjectSizing,\n scale: 0.6,\n speed: 0.5,\n frame: 0,\n colorBack: '#cd28dc',\n colorInner: '#00000000',\n colors: ['#ff9900', '#fff67a', '#dcff52', '#00ffbb', '#0077ff'],\n outerGlow: 1,\n innerGlow: 1,\n innerDistortion: 1,\n outerDistortion: 1,\n offset: 0.2,\n angle: 0,\n size: 1,\n shape: 'diamond',\n },\n};\n\nexport const gemSmokePresets: GemSmokePreset[] = [defaultPreset, firePreset, fluorescentPreset, infraredPreset];\n\nexport const GemSmoke: React.FC<GemSmokeProps> = memo(function GemSmokeImpl({\n // Own props\n colorBack = defaultPreset.params.colorBack,\n colors = defaultPreset.params.colors,\n speed = defaultPreset.params.speed,\n frame = defaultPreset.params.frame,\n image = '',\n innerDistortion = defaultPreset.params.innerDistortion,\n outerDistortion = defaultPreset.params.outerDistortion,\n outerGlow = defaultPreset.params.outerGlow,\n innerGlow = defaultPreset.params.innerGlow,\n colorInner = defaultPreset.params.colorInner,\n offset = defaultPreset.params.offset,\n angle = defaultPreset.params.angle,\n size = defaultPreset.params.size,\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}: GemSmokeProps) {\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> => toProcessedGemSmoke(imageUrl).then((result) => URL.createObjectURL(result.pngBlob)),\n [imageUrl, 'gemSmoke']\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 toProcessedGemSmoke(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_colors: colors.map(getShaderColorFromString),\n u_colorsCount: colors.length,\n u_colorBack: getShaderColorFromString(colorBack),\n u_image: processedImage,\n u_innerDistortion: innerDistortion,\n u_outerDistortion: outerDistortion,\n u_outerGlow: outerGlow,\n u_innerGlow: innerGlow,\n u_colorInner: getShaderColorFromString(colorInner),\n u_offset: offset,\n u_angle: angle,\n u_size: size,\n u_isImage: Boolean(image),\n u_shape: GemSmokeShapes[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 GemSmokeUniforms;\n\n return (\n <ShaderMount\n {...props}\n speed={speed}\n frame={frame}\n fragmentShader={gemSmokeFragmentShader}\n mipmaps={['u_image']}\n uniforms={uniforms}\n />\n );\n}, colorPropsAreEqual);\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { type ShaderComponentProps } from '../shader-mount.js';
|
|
2
|
+
import { type HalftoneCmykParams, type ImageShaderPreset } from '@paper-design/shaders';
|
|
3
|
+
export interface HalftoneCmykProps extends ShaderComponentProps, HalftoneCmykParams {
|
|
4
|
+
}
|
|
5
|
+
type HalftoneCmykPreset = ImageShaderPreset<HalftoneCmykParams>;
|
|
6
|
+
export declare const defaultPreset: HalftoneCmykPreset;
|
|
7
|
+
export declare const dropsPreset: HalftoneCmykPreset;
|
|
8
|
+
export declare const newspaper: HalftoneCmykPreset;
|
|
9
|
+
export declare const vintagePreset: HalftoneCmykPreset;
|
|
10
|
+
export declare const halftoneCmykPresets: HalftoneCmykPreset[];
|
|
11
|
+
export declare const HalftoneCmyk: React.FC<HalftoneCmykProps>;
|
|
12
|
+
export {};
|
|
@@ -0,0 +1,236 @@
|
|
|
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
|
+
halftoneCmykFragmentShader,
|
|
11
|
+
getShaderColorFromString,
|
|
12
|
+
getShaderNoiseTexture,
|
|
13
|
+
ShaderFitOptions,
|
|
14
|
+
defaultObjectSizing,
|
|
15
|
+
HalftoneCmykTypes
|
|
16
|
+
} from "@paper-design/shaders";
|
|
17
|
+
import { jsx } from "react/jsx-runtime";
|
|
18
|
+
const defaultPreset = {
|
|
19
|
+
name: "Default",
|
|
20
|
+
params: {
|
|
21
|
+
...defaultObjectSizing,
|
|
22
|
+
scale: 1,
|
|
23
|
+
fit: "cover",
|
|
24
|
+
speed: 0,
|
|
25
|
+
frame: 0,
|
|
26
|
+
colorBack: "#fbfaf5",
|
|
27
|
+
colorC: "#00b4ff",
|
|
28
|
+
colorM: "#fc519f",
|
|
29
|
+
colorY: "#ffd800",
|
|
30
|
+
colorK: "#231f20",
|
|
31
|
+
size: 0.2,
|
|
32
|
+
contrast: 1,
|
|
33
|
+
softness: 1,
|
|
34
|
+
grainSize: 0.5,
|
|
35
|
+
grainMixer: 0,
|
|
36
|
+
grainOverlay: 0,
|
|
37
|
+
gridNoise: 0.2,
|
|
38
|
+
floodC: 0.15,
|
|
39
|
+
floodM: 0,
|
|
40
|
+
floodY: 0,
|
|
41
|
+
floodK: 0,
|
|
42
|
+
gainC: 0.3,
|
|
43
|
+
gainM: 0,
|
|
44
|
+
gainY: 0.2,
|
|
45
|
+
gainK: 0,
|
|
46
|
+
type: "ink"
|
|
47
|
+
}
|
|
48
|
+
};
|
|
49
|
+
const dropsPreset = {
|
|
50
|
+
name: "Drops",
|
|
51
|
+
params: {
|
|
52
|
+
...defaultObjectSizing,
|
|
53
|
+
scale: 1,
|
|
54
|
+
fit: "cover",
|
|
55
|
+
speed: 0,
|
|
56
|
+
frame: 0,
|
|
57
|
+
colorBack: "#eeefd7",
|
|
58
|
+
colorC: "#00b2ff",
|
|
59
|
+
colorM: "#fc4f4f",
|
|
60
|
+
colorY: "#ffd900",
|
|
61
|
+
colorK: "#231f20",
|
|
62
|
+
size: 0.88,
|
|
63
|
+
contrast: 1.15,
|
|
64
|
+
softness: 0,
|
|
65
|
+
grainSize: 0.01,
|
|
66
|
+
grainMixer: 0.05,
|
|
67
|
+
grainOverlay: 0.25,
|
|
68
|
+
gridNoise: 0.5,
|
|
69
|
+
floodC: 0.15,
|
|
70
|
+
floodM: 0,
|
|
71
|
+
floodY: 0,
|
|
72
|
+
floodK: 0,
|
|
73
|
+
gainC: 1,
|
|
74
|
+
gainM: 0.44,
|
|
75
|
+
gainY: -1,
|
|
76
|
+
gainK: 0,
|
|
77
|
+
type: "ink"
|
|
78
|
+
}
|
|
79
|
+
};
|
|
80
|
+
const newspaper = {
|
|
81
|
+
name: "Newspaper",
|
|
82
|
+
params: {
|
|
83
|
+
...defaultObjectSizing,
|
|
84
|
+
scale: 1,
|
|
85
|
+
fit: "cover",
|
|
86
|
+
speed: 0,
|
|
87
|
+
frame: 0,
|
|
88
|
+
colorBack: "#f2f1e8",
|
|
89
|
+
colorC: "#7a7a75",
|
|
90
|
+
colorM: "#7a7a75",
|
|
91
|
+
colorY: "#7a7a75",
|
|
92
|
+
colorK: "#231f20",
|
|
93
|
+
size: 0.01,
|
|
94
|
+
contrast: 2,
|
|
95
|
+
softness: 0.2,
|
|
96
|
+
grainSize: 0,
|
|
97
|
+
grainMixer: 0,
|
|
98
|
+
grainOverlay: 0.2,
|
|
99
|
+
gridNoise: 0.6,
|
|
100
|
+
floodC: 0,
|
|
101
|
+
floodM: 0,
|
|
102
|
+
floodY: 0,
|
|
103
|
+
floodK: 0.1,
|
|
104
|
+
gainC: -0.17,
|
|
105
|
+
gainM: -0.45,
|
|
106
|
+
gainY: -0.45,
|
|
107
|
+
gainK: 0,
|
|
108
|
+
type: "dots"
|
|
109
|
+
}
|
|
110
|
+
};
|
|
111
|
+
const vintagePreset = {
|
|
112
|
+
name: "Vintage",
|
|
113
|
+
params: {
|
|
114
|
+
...defaultObjectSizing,
|
|
115
|
+
scale: 1,
|
|
116
|
+
fit: "cover",
|
|
117
|
+
speed: 0,
|
|
118
|
+
frame: 0,
|
|
119
|
+
colorBack: "#fffaf0",
|
|
120
|
+
colorC: "#59afc5",
|
|
121
|
+
colorM: "#d8697c",
|
|
122
|
+
colorY: "#fad85c",
|
|
123
|
+
colorK: "#2d2824",
|
|
124
|
+
size: 0.2,
|
|
125
|
+
contrast: 1.25,
|
|
126
|
+
softness: 0.4,
|
|
127
|
+
grainSize: 0.5,
|
|
128
|
+
grainMixer: 0.15,
|
|
129
|
+
grainOverlay: 0.1,
|
|
130
|
+
gridNoise: 0.45,
|
|
131
|
+
floodC: 0.15,
|
|
132
|
+
floodM: 0,
|
|
133
|
+
floodY: 0,
|
|
134
|
+
floodK: 0,
|
|
135
|
+
gainC: 0.3,
|
|
136
|
+
gainM: 0,
|
|
137
|
+
gainY: 0.2,
|
|
138
|
+
gainK: 0,
|
|
139
|
+
type: "sharp"
|
|
140
|
+
}
|
|
141
|
+
};
|
|
142
|
+
const halftoneCmykPresets = [defaultPreset, dropsPreset, newspaper, vintagePreset];
|
|
143
|
+
const HalftoneCmyk = memo(function HalftoneCmykImpl({
|
|
144
|
+
// Own props
|
|
145
|
+
speed = defaultPreset.params.speed,
|
|
146
|
+
frame = defaultPreset.params.frame,
|
|
147
|
+
colorBack = defaultPreset.params.colorBack,
|
|
148
|
+
colorC = defaultPreset.params.colorC,
|
|
149
|
+
colorM = defaultPreset.params.colorM,
|
|
150
|
+
colorY = defaultPreset.params.colorY,
|
|
151
|
+
colorK = defaultPreset.params.colorK,
|
|
152
|
+
image = "",
|
|
153
|
+
size = defaultPreset.params.size,
|
|
154
|
+
contrast = defaultPreset.params.contrast,
|
|
155
|
+
softness = defaultPreset.params.softness,
|
|
156
|
+
grainSize = defaultPreset.params.grainSize,
|
|
157
|
+
grainMixer = defaultPreset.params.grainMixer,
|
|
158
|
+
grainOverlay = defaultPreset.params.grainOverlay,
|
|
159
|
+
gridNoise = defaultPreset.params.gridNoise,
|
|
160
|
+
floodC = defaultPreset.params.floodC,
|
|
161
|
+
floodM = defaultPreset.params.floodM,
|
|
162
|
+
floodY = defaultPreset.params.floodY,
|
|
163
|
+
floodK = defaultPreset.params.floodK,
|
|
164
|
+
gainC = defaultPreset.params.gainC,
|
|
165
|
+
gainM = defaultPreset.params.gainM,
|
|
166
|
+
gainY = defaultPreset.params.gainY,
|
|
167
|
+
gainK = defaultPreset.params.gainK,
|
|
168
|
+
type = defaultPreset.params.type,
|
|
169
|
+
// Sizing props
|
|
170
|
+
fit = defaultPreset.params.fit,
|
|
171
|
+
scale = defaultPreset.params.scale,
|
|
172
|
+
rotation = defaultPreset.params.rotation,
|
|
173
|
+
originX = defaultPreset.params.originX,
|
|
174
|
+
originY = defaultPreset.params.originY,
|
|
175
|
+
offsetX = defaultPreset.params.offsetX,
|
|
176
|
+
offsetY = defaultPreset.params.offsetY,
|
|
177
|
+
worldWidth = defaultPreset.params.worldWidth,
|
|
178
|
+
worldHeight = defaultPreset.params.worldHeight,
|
|
179
|
+
...props
|
|
180
|
+
}) {
|
|
181
|
+
const uniforms = {
|
|
182
|
+
// Own uniforms
|
|
183
|
+
u_image: image,
|
|
184
|
+
u_noiseTexture: getShaderNoiseTexture(),
|
|
185
|
+
u_colorBack: getShaderColorFromString(colorBack),
|
|
186
|
+
u_colorC: getShaderColorFromString(colorC),
|
|
187
|
+
u_colorM: getShaderColorFromString(colorM),
|
|
188
|
+
u_colorY: getShaderColorFromString(colorY),
|
|
189
|
+
u_colorK: getShaderColorFromString(colorK),
|
|
190
|
+
u_size: size,
|
|
191
|
+
u_contrast: contrast,
|
|
192
|
+
u_softness: softness,
|
|
193
|
+
u_grainSize: grainSize,
|
|
194
|
+
u_grainMixer: grainMixer,
|
|
195
|
+
u_grainOverlay: grainOverlay,
|
|
196
|
+
u_gridNoise: gridNoise,
|
|
197
|
+
u_floodC: floodC,
|
|
198
|
+
u_floodM: floodM,
|
|
199
|
+
u_floodY: floodY,
|
|
200
|
+
u_floodK: floodK,
|
|
201
|
+
u_gainC: gainC,
|
|
202
|
+
u_gainM: gainM,
|
|
203
|
+
u_gainY: gainY,
|
|
204
|
+
u_gainK: gainK,
|
|
205
|
+
u_type: HalftoneCmykTypes[type],
|
|
206
|
+
// Sizing uniforms
|
|
207
|
+
u_fit: ShaderFitOptions[fit],
|
|
208
|
+
u_rotation: rotation,
|
|
209
|
+
u_scale: scale,
|
|
210
|
+
u_offsetX: offsetX,
|
|
211
|
+
u_offsetY: offsetY,
|
|
212
|
+
u_originX: originX,
|
|
213
|
+
u_originY: originY,
|
|
214
|
+
u_worldWidth: worldWidth,
|
|
215
|
+
u_worldHeight: worldHeight
|
|
216
|
+
};
|
|
217
|
+
return /* @__PURE__ */ jsx(
|
|
218
|
+
ShaderMount,
|
|
219
|
+
{
|
|
220
|
+
...props,
|
|
221
|
+
speed,
|
|
222
|
+
frame,
|
|
223
|
+
fragmentShader: halftoneCmykFragmentShader,
|
|
224
|
+
uniforms
|
|
225
|
+
}
|
|
226
|
+
);
|
|
227
|
+
}, colorPropsAreEqual);
|
|
228
|
+
export {
|
|
229
|
+
HalftoneCmyk,
|
|
230
|
+
defaultPreset,
|
|
231
|
+
dropsPreset,
|
|
232
|
+
halftoneCmykPresets,
|
|
233
|
+
newspaper,
|
|
234
|
+
vintagePreset
|
|
235
|
+
};
|
|
236
|
+
//# sourceMappingURL=halftone-cmyk.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/shaders/halftone-cmyk.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 halftoneCmykFragmentShader,\n getShaderColorFromString,\n getShaderNoiseTexture,\n ShaderFitOptions,\n type HalftoneCmykUniforms,\n type HalftoneCmykParams,\n defaultObjectSizing,\n type ImageShaderPreset,\n HalftoneCmykTypes,\n} from '@paper-design/shaders';\n\nexport interface HalftoneCmykProps extends ShaderComponentProps, HalftoneCmykParams {}\n\ntype HalftoneCmykPreset = ImageShaderPreset<HalftoneCmykParams>;\n\nexport const defaultPreset: HalftoneCmykPreset = {\n name: 'Default',\n params: {\n ...defaultObjectSizing,\n scale: 1,\n fit: 'cover',\n speed: 0,\n frame: 0,\n colorBack: '#fbfaf5',\n colorC: '#00b4ff',\n colorM: '#fc519f',\n colorY: '#ffd800',\n colorK: '#231f20',\n size: 0.2,\n contrast: 1,\n softness: 1,\n grainSize: 0.5,\n grainMixer: 0,\n grainOverlay: 0,\n gridNoise: 0.2,\n floodC: 0.15,\n floodM: 0,\n floodY: 0,\n floodK: 0,\n gainC: 0.3,\n gainM: 0,\n gainY: 0.2,\n gainK: 0,\n type: 'ink',\n },\n};\n\nexport const dropsPreset: HalftoneCmykPreset = {\n name: 'Drops',\n params: {\n ...defaultObjectSizing,\n scale: 1,\n fit: 'cover',\n speed: 0,\n frame: 0,\n colorBack: '#eeefd7',\n colorC: '#00b2ff',\n colorM: '#fc4f4f',\n colorY: '#ffd900',\n colorK: '#231f20',\n size: 0.88,\n contrast: 1.15,\n softness: 0,\n grainSize: 0.01,\n grainMixer: 0.05,\n grainOverlay: 0.25,\n gridNoise: 0.5,\n floodC: 0.15,\n floodM: 0,\n floodY: 0,\n floodK: 0,\n gainC: 1.0,\n gainM: 0.44,\n gainY: -1.0,\n gainK: 0,\n type: 'ink',\n },\n};\n\nexport const newspaper: HalftoneCmykPreset = {\n name: 'Newspaper',\n params: {\n ...defaultObjectSizing,\n scale: 1,\n fit: 'cover',\n speed: 0,\n frame: 0,\n colorBack: '#f2f1e8',\n colorC: '#7a7a75',\n colorM: '#7a7a75',\n colorY: '#7a7a75',\n colorK: '#231f20',\n size: 0.01,\n contrast: 2,\n softness: 0.2,\n grainSize: 0,\n grainMixer: 0,\n grainOverlay: 0.2,\n gridNoise: 0.6,\n floodC: 0,\n floodM: 0,\n floodY: 0,\n floodK: 0.1,\n gainC: -0.17,\n gainM: -0.45,\n gainY: -0.45,\n gainK: 0,\n type: 'dots',\n },\n};\n\nexport const vintagePreset: HalftoneCmykPreset = {\n name: 'Vintage',\n params: {\n ...defaultObjectSizing,\n scale: 1,\n fit: 'cover',\n speed: 0,\n frame: 0,\n colorBack: '#fffaf0',\n colorC: '#59afc5',\n colorM: '#d8697c',\n colorY: '#fad85c',\n colorK: '#2d2824',\n size: 0.2,\n contrast: 1.25,\n softness: 0.4,\n grainSize: 0.5,\n grainMixer: 0.15,\n grainOverlay: 0.1,\n gridNoise: 0.45,\n floodC: 0.15,\n floodM: 0,\n floodY: 0,\n floodK: 0,\n gainC: 0.3,\n gainM: 0,\n gainY: 0.2,\n gainK: 0,\n type: 'sharp',\n },\n};\n\nexport const halftoneCmykPresets: HalftoneCmykPreset[] = [defaultPreset, dropsPreset, newspaper, vintagePreset];\n\nexport const HalftoneCmyk: React.FC<HalftoneCmykProps> = memo(function HalftoneCmykImpl({\n // Own props\n speed = defaultPreset.params.speed,\n frame = defaultPreset.params.frame,\n colorBack = defaultPreset.params.colorBack,\n colorC = defaultPreset.params.colorC,\n colorM = defaultPreset.params.colorM,\n colorY = defaultPreset.params.colorY,\n colorK = defaultPreset.params.colorK,\n image = '',\n size = defaultPreset.params.size,\n contrast = defaultPreset.params.contrast,\n softness = defaultPreset.params.softness,\n grainSize = defaultPreset.params.grainSize,\n grainMixer = defaultPreset.params.grainMixer,\n grainOverlay = defaultPreset.params.grainOverlay,\n gridNoise = defaultPreset.params.gridNoise,\n floodC = defaultPreset.params.floodC,\n floodM = defaultPreset.params.floodM,\n floodY = defaultPreset.params.floodY,\n floodK = defaultPreset.params.floodK,\n gainC = defaultPreset.params.gainC,\n gainM = defaultPreset.params.gainM,\n gainY = defaultPreset.params.gainY,\n gainK = defaultPreset.params.gainK,\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}: HalftoneCmykProps) {\n const uniforms = {\n // Own uniforms\n u_image: image,\n u_noiseTexture: getShaderNoiseTexture(),\n u_colorBack: getShaderColorFromString(colorBack),\n u_colorC: getShaderColorFromString(colorC),\n u_colorM: getShaderColorFromString(colorM),\n u_colorY: getShaderColorFromString(colorY),\n u_colorK: getShaderColorFromString(colorK),\n u_size: size,\n u_contrast: contrast,\n u_softness: softness,\n u_grainSize: grainSize,\n u_grainMixer: grainMixer,\n u_grainOverlay: grainOverlay,\n u_gridNoise: gridNoise,\n u_floodC: floodC,\n u_floodM: floodM,\n u_floodY: floodY,\n u_floodK: floodK,\n u_gainC: gainC,\n u_gainM: gainM,\n u_gainY: gainY,\n u_gainK: gainK,\n u_type: HalftoneCmykTypes[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 HalftoneCmykUniforms;\n\n return (\n <ShaderMount\n {...props}\n speed={speed}\n frame={frame}\n fragmentShader={halftoneCmykFragmentShader}\n uniforms={uniforms}\n />\n );\n}, colorPropsAreEqual);\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|