@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.
Files changed (102) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +29 -0
  3. package/dist/color-props-are-equal.d.ts +6 -0
  4. package/dist/color-props-are-equal.js +34 -0
  5. package/dist/color-props-are-equal.js.map +7 -0
  6. package/dist/index.d.ts +86 -0
  7. package/dist/index.js +129 -0
  8. package/dist/index.js.map +7 -0
  9. package/dist/shader-mount.d.ts +38 -0
  10. package/dist/shader-mount.js +149 -0
  11. package/dist/shader-mount.js.map +7 -0
  12. package/dist/shaders/color-panels.d.ts +12 -0
  13. package/dist/shaders/color-panels.js +173 -0
  14. package/dist/shaders/color-panels.js.map +7 -0
  15. package/dist/shaders/dithering.d.ts +16 -0
  16. package/dist/shaders/dithering.js +158 -0
  17. package/dist/shaders/dithering.js.map +7 -0
  18. package/dist/shaders/dot-grid.d.ts +9 -0
  19. package/dist/shaders/dot-grid.js +139 -0
  20. package/dist/shaders/dot-grid.js.map +7 -0
  21. package/dist/shaders/dot-orbit.d.ts +12 -0
  22. package/dist/shaders/dot-orbit.js +130 -0
  23. package/dist/shaders/dot-orbit.js.map +7 -0
  24. package/dist/shaders/fluted-glass.d.ts +14 -0
  25. package/dist/shaders/fluted-glass.js +183 -0
  26. package/dist/shaders/fluted-glass.js.map +7 -0
  27. package/dist/shaders/god-rays.d.ts +12 -0
  28. package/dist/shaders/god-rays.js +150 -0
  29. package/dist/shaders/god-rays.js.map +7 -0
  30. package/dist/shaders/grain-gradient.d.ts +14 -0
  31. package/dist/shaders/grain-gradient.js +177 -0
  32. package/dist/shaders/grain-gradient.js.map +7 -0
  33. package/dist/shaders/heatmap.d.ts +14 -0
  34. package/dist/shaders/heatmap.js +161 -0
  35. package/dist/shaders/heatmap.js.map +7 -0
  36. package/dist/shaders/image-dithering.d.ts +14 -0
  37. package/dist/shaders/image-dithering.js +145 -0
  38. package/dist/shaders/image-dithering.js.map +7 -0
  39. package/dist/shaders/image-halftone-dots.d.ts +12 -0
  40. package/dist/shaders/image-halftone-dots.js +171 -0
  41. package/dist/shaders/image-halftone-dots.js.map +7 -0
  42. package/dist/shaders/liquid-metal.d.ts +16 -0
  43. package/dist/shaders/liquid-metal.js +201 -0
  44. package/dist/shaders/liquid-metal.js.map +7 -0
  45. package/dist/shaders/mesh-gradient.d.ts +12 -0
  46. package/dist/shaders/mesh-gradient.js +129 -0
  47. package/dist/shaders/mesh-gradient.js.map +7 -0
  48. package/dist/shaders/metaballs.d.ts +12 -0
  49. package/dist/shaders/metaballs.js +121 -0
  50. package/dist/shaders/metaballs.js.map +7 -0
  51. package/dist/shaders/neuro-noise.d.ts +12 -0
  52. package/dist/shaders/neuro-noise.js +126 -0
  53. package/dist/shaders/neuro-noise.js.map +7 -0
  54. package/dist/shaders/paper-texture.d.ts +20 -0
  55. package/dist/shaders/paper-texture.js +198 -0
  56. package/dist/shaders/paper-texture.js.map +7 -0
  57. package/dist/shaders/perlin-noise.d.ts +12 -0
  58. package/dist/shaders/perlin-noise.js +142 -0
  59. package/dist/shaders/perlin-noise.js.map +7 -0
  60. package/dist/shaders/pulsing-border.d.ts +12 -0
  61. package/dist/shaders/pulsing-border.js +216 -0
  62. package/dist/shaders/pulsing-border.js.map +7 -0
  63. package/dist/shaders/simplex-noise.d.ts +12 -0
  64. package/dist/shaders/simplex-noise.js +125 -0
  65. package/dist/shaders/simplex-noise.js.map +7 -0
  66. package/dist/shaders/smoke-ring.d.ts +12 -0
  67. package/dist/shaders/smoke-ring.js +137 -0
  68. package/dist/shaders/smoke-ring.js.map +7 -0
  69. package/dist/shaders/spiral.d.ts +12 -0
  70. package/dist/shaders/spiral.js +151 -0
  71. package/dist/shaders/spiral.js.map +7 -0
  72. package/dist/shaders/static-mesh-gradient.d.ts +12 -0
  73. package/dist/shaders/static-mesh-gradient.js +158 -0
  74. package/dist/shaders/static-mesh-gradient.js.map +7 -0
  75. package/dist/shaders/static-radial-gradient.d.ts +12 -0
  76. package/dist/shaders/static-radial-gradient.js +178 -0
  77. package/dist/shaders/static-radial-gradient.js.map +7 -0
  78. package/dist/shaders/swirl.d.ts +12 -0
  79. package/dist/shaders/swirl.js +146 -0
  80. package/dist/shaders/swirl.js.map +7 -0
  81. package/dist/shaders/voronoi.d.ts +12 -0
  82. package/dist/shaders/voronoi.js +137 -0
  83. package/dist/shaders/voronoi.js.map +7 -0
  84. package/dist/shaders/warp.d.ts +14 -0
  85. package/dist/shaders/warp.js +194 -0
  86. package/dist/shaders/warp.js.map +7 -0
  87. package/dist/shaders/water.d.ts +14 -0
  88. package/dist/shaders/water.js +148 -0
  89. package/dist/shaders/water.js.map +7 -0
  90. package/dist/shaders/waves.d.ts +12 -0
  91. package/dist/shaders/waves.js +136 -0
  92. package/dist/shaders/waves.js.map +7 -0
  93. package/dist/suspend.d.ts +8 -0
  94. package/dist/suspend.js +43 -0
  95. package/dist/suspend.js.map +7 -0
  96. package/dist/transparent-pixel.d.ts +1 -0
  97. package/dist/transparent-pixel.js +10 -0
  98. package/dist/transparent-pixel.js.map +7 -0
  99. package/dist/use-merge-refs.d.ts +6 -0
  100. package/dist/use-merge-refs.js +48 -0
  101. package/dist/use-merge-refs.js.map +7 -0
  102. 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": "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",
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 {};