@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.
Files changed (38) hide show
  1. package/LICENSE +201 -21
  2. package/NOTICE +5 -0
  3. package/dist/color-props-are-equal.js +3 -0
  4. package/dist/color-props-are-equal.js.map +2 -2
  5. package/dist/index.d.ts +10 -1
  6. package/dist/index.js +13 -0
  7. package/dist/index.js.map +2 -2
  8. package/dist/set-min-image-size.d.ts +5 -0
  9. package/dist/set-min-image-size.js +19 -0
  10. package/dist/set-min-image-size.js.map +7 -0
  11. package/dist/shader-mount.js +15 -10
  12. package/dist/shader-mount.js.map +2 -2
  13. package/dist/shaders/fluted-glass.d.ts +0 -2
  14. package/dist/shaders/fluted-glass.js +12 -9
  15. package/dist/shaders/fluted-glass.js.map +2 -2
  16. package/dist/shaders/gem-smoke.d.ts +16 -0
  17. package/dist/shaders/gem-smoke.js +208 -0
  18. package/dist/shaders/gem-smoke.js.map +7 -0
  19. package/dist/shaders/halftone-cmyk.d.ts +12 -0
  20. package/dist/shaders/halftone-cmyk.js +236 -0
  21. package/dist/shaders/halftone-cmyk.js.map +7 -0
  22. package/dist/shaders/halftone-dots.js +26 -19
  23. package/dist/shaders/halftone-dots.js.map +2 -2
  24. package/dist/shaders/image-dithering.js +10 -4
  25. package/dist/shaders/image-dithering.js.map +2 -2
  26. package/dist/shaders/lens-distortion.d.ts +12 -0
  27. package/dist/shaders/lens-distortion.js +231 -0
  28. package/dist/shaders/lens-distortion.js.map +7 -0
  29. package/dist/shaders/liquid-metal.js +1 -1
  30. package/dist/shaders/liquid-metal.js.map +1 -1
  31. package/dist/shaders/paper-texture.d.ts +3 -7
  32. package/dist/shaders/paper-texture.js +119 -84
  33. package/dist/shaders/paper-texture.js.map +2 -2
  34. package/dist/shaders/pulsing-border.js +1 -1
  35. package/dist/shaders/pulsing-border.js.map +1 -1
  36. package/dist/shaders/static-radial-gradient.js +3 -3
  37. package/dist/shaders/static-radial-gradient.js.map +1 -1
  38. 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.2,
128
- marginLeft: 0.2,
129
- marginRight: 0.2,
130
- marginTop: 0.2,
131
- marginBottom: 0.2,
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
- // `edges` were renamed to `stretch`
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 `stretch` instead */\n edges?: number;\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 scale: 1.1,\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 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 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 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 stretch: 0,\n margin: 0.2,\n marginLeft: 0.2,\n marginRight: 0.2,\n marginTop: 0.2,\n marginBottom: 0.2,\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 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\n // `edges` were renamed to `stretch`\n edges,\n stretch = edges === undefined ? defaultPreset.params.stretch : edges,\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_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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",
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
+ }