@paper-design/shaders-react 0.0.0-canary.390a3d9

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,177 @@
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 {
9
+ getShaderColorFromString,
10
+ getShaderNoiseTexture,
11
+ grainGradientFragmentShader,
12
+ ShaderFitOptions,
13
+ defaultPatternSizing,
14
+ defaultObjectSizing,
15
+ GrainGradientShapes
16
+ } from "@paper-design/shaders";
17
+ import { jsx } from "react/jsx-runtime";
18
+ const defaultPreset = {
19
+ name: "Default",
20
+ params: {
21
+ ...defaultObjectSizing,
22
+ speed: 1,
23
+ frame: 0,
24
+ colorBack: "#000000",
25
+ colors: ["#7300ff", "#eba8ff", "#00bfff", "#2a00ff"],
26
+ softness: 0.5,
27
+ intensity: 0.5,
28
+ noise: 0.25,
29
+ shape: "corners"
30
+ }
31
+ };
32
+ const wavePreset = {
33
+ name: "Wave",
34
+ params: {
35
+ ...defaultPatternSizing,
36
+ speed: 1,
37
+ frame: 0,
38
+ colorBack: "#000a0f",
39
+ colors: ["#c4730b", "#bdad5f", "#d8ccc7"],
40
+ softness: 0.7,
41
+ intensity: 0.15,
42
+ noise: 0.5,
43
+ shape: "wave"
44
+ }
45
+ };
46
+ const dotsPreset = {
47
+ name: "Dots",
48
+ params: {
49
+ ...defaultPatternSizing,
50
+ scale: 0.6,
51
+ speed: 1,
52
+ frame: 0,
53
+ colorBack: "#0a0000",
54
+ colors: ["#6f0000", "#0080ff", "#f2ebc9", "#33cc33"],
55
+ softness: 1,
56
+ intensity: 1,
57
+ noise: 0.7,
58
+ shape: "dots"
59
+ }
60
+ };
61
+ const truchetPreset = {
62
+ name: "Truchet",
63
+ params: {
64
+ ...defaultPatternSizing,
65
+ speed: 1,
66
+ frame: 0,
67
+ colorBack: "#0a0000",
68
+ colors: ["#6f2200", "#eabb7c", "#39b523"],
69
+ softness: 0,
70
+ intensity: 0.2,
71
+ noise: 1,
72
+ shape: "truchet"
73
+ }
74
+ };
75
+ const ripplePreset = {
76
+ name: "Ripple",
77
+ params: {
78
+ ...defaultObjectSizing,
79
+ scale: 0.5,
80
+ speed: 1,
81
+ frame: 0,
82
+ colorBack: "#140a00",
83
+ colors: ["#6f2d00", "#88ddae", "#2c0b1d"],
84
+ softness: 0.5,
85
+ intensity: 0.5,
86
+ noise: 0.5,
87
+ shape: "ripple"
88
+ }
89
+ };
90
+ const blobPreset = {
91
+ name: "Blob",
92
+ params: {
93
+ ...defaultObjectSizing,
94
+ scale: 1.3,
95
+ speed: 1,
96
+ frame: 0,
97
+ colorBack: "#0f0e18",
98
+ colors: ["#3e6172", "#a49b74", "#568c50"],
99
+ softness: 0,
100
+ intensity: 0.15,
101
+ noise: 0.5,
102
+ shape: "blob"
103
+ }
104
+ };
105
+ const grainGradientPresets = [
106
+ defaultPreset,
107
+ wavePreset,
108
+ dotsPreset,
109
+ truchetPreset,
110
+ ripplePreset,
111
+ blobPreset
112
+ ];
113
+ const GrainGradient = memo(function GrainGradientImpl({
114
+ // Own props
115
+ speed = defaultPreset.params.speed,
116
+ frame = defaultPreset.params.frame,
117
+ colorBack = defaultPreset.params.colorBack,
118
+ colors = defaultPreset.params.colors,
119
+ softness = defaultPreset.params.softness,
120
+ intensity = defaultPreset.params.intensity,
121
+ noise = defaultPreset.params.noise,
122
+ shape = defaultPreset.params.shape,
123
+ // Sizing props
124
+ fit = defaultPreset.params.fit,
125
+ scale = defaultPreset.params.scale,
126
+ rotation = defaultPreset.params.rotation,
127
+ originX = defaultPreset.params.originX,
128
+ originY = defaultPreset.params.originY,
129
+ offsetX = defaultPreset.params.offsetX,
130
+ offsetY = defaultPreset.params.offsetY,
131
+ worldWidth = defaultPreset.params.worldWidth,
132
+ worldHeight = defaultPreset.params.worldHeight,
133
+ ...props
134
+ }) {
135
+ const uniforms = {
136
+ // Own uniforms
137
+ u_colorBack: getShaderColorFromString(colorBack),
138
+ u_colors: colors.map(getShaderColorFromString),
139
+ u_colorsCount: colors.length,
140
+ u_softness: softness,
141
+ u_intensity: intensity,
142
+ u_noise: noise,
143
+ u_shape: GrainGradientShapes[shape],
144
+ u_noiseTexture: getShaderNoiseTexture(),
145
+ // Sizing uniforms
146
+ u_fit: ShaderFitOptions[fit],
147
+ u_scale: scale,
148
+ u_rotation: rotation,
149
+ u_offsetX: offsetX,
150
+ u_offsetY: offsetY,
151
+ u_originX: originX,
152
+ u_originY: originY,
153
+ u_worldWidth: worldWidth,
154
+ u_worldHeight: worldHeight
155
+ };
156
+ return /* @__PURE__ */ jsx(
157
+ ShaderMount,
158
+ {
159
+ ...props,
160
+ speed,
161
+ frame,
162
+ fragmentShader: grainGradientFragmentShader,
163
+ uniforms
164
+ }
165
+ );
166
+ });
167
+ export {
168
+ GrainGradient,
169
+ blobPreset,
170
+ defaultPreset,
171
+ dotsPreset,
172
+ grainGradientPresets,
173
+ ripplePreset,
174
+ truchetPreset,
175
+ wavePreset
176
+ };
177
+ //# sourceMappingURL=grain-gradient.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/shaders/grain-gradient.tsx"],
4
+ "sourcesContent": ["import { memo } from 'react';\nimport { ShaderMount, type ShaderComponentProps } from '../shader-mount.js';\nimport {\n getShaderColorFromString,\n getShaderNoiseTexture,\n grainGradientFragmentShader,\n ShaderFitOptions,\n type GrainGradientUniforms,\n type GrainGradientParams,\n type ShaderPreset,\n defaultPatternSizing,\n defaultObjectSizing,\n GrainGradientShapes,\n} from '@paper-design/shaders';\n\nexport interface GrainGradientProps extends ShaderComponentProps, GrainGradientParams {}\n\ntype GrainGradientPreset = ShaderPreset<GrainGradientParams>;\n\nexport const defaultPreset: GrainGradientPreset = {\n name: 'Default',\n params: {\n ...defaultObjectSizing,\n speed: 1,\n frame: 0,\n colorBack: '#000000',\n colors: ['#7300ff', '#eba8ff', '#00bfff', '#2a00ff'],\n softness: 0.5,\n intensity: 0.5,\n noise: 0.25,\n shape: 'corners',\n },\n};\n\nexport const wavePreset: GrainGradientPreset = {\n name: 'Wave',\n params: {\n ...defaultPatternSizing,\n speed: 1,\n frame: 0,\n colorBack: '#000a0f',\n colors: ['#c4730b', '#bdad5f', '#d8ccc7'],\n softness: 0.7,\n intensity: 0.15,\n noise: 0.5,\n shape: 'wave',\n },\n};\n\nexport const dotsPreset: GrainGradientPreset = {\n name: 'Dots',\n params: {\n ...defaultPatternSizing,\n scale: 0.6,\n speed: 1,\n frame: 0,\n colorBack: '#0a0000',\n colors: ['#6f0000', '#0080ff', '#f2ebc9', '#33cc33'],\n softness: 1,\n intensity: 1,\n noise: 0.7,\n shape: 'dots',\n },\n};\n\nexport const truchetPreset: GrainGradientPreset = {\n name: 'Truchet',\n params: {\n ...defaultPatternSizing,\n speed: 1,\n frame: 0,\n colorBack: '#0a0000',\n colors: ['#6f2200', '#eabb7c', '#39b523'],\n softness: 0,\n intensity: 0.2,\n noise: 1,\n shape: 'truchet',\n },\n};\n\nexport const ripplePreset: GrainGradientPreset = {\n name: 'Ripple',\n params: {\n ...defaultObjectSizing,\n scale: 0.5,\n speed: 1,\n frame: 0,\n colorBack: '#140a00',\n colors: ['#6f2d00', '#88ddae', '#2c0b1d'],\n softness: 0.5,\n intensity: 0.5,\n noise: 0.5,\n shape: 'ripple',\n },\n};\n\nexport const blobPreset: GrainGradientPreset = {\n name: 'Blob',\n params: {\n ...defaultObjectSizing,\n scale: 1.3,\n speed: 1,\n frame: 0,\n colorBack: '#0f0e18',\n colors: ['#3e6172', '#a49b74', '#568c50'],\n softness: 0,\n intensity: 0.15,\n noise: 0.5,\n shape: 'blob',\n },\n};\n\nexport const grainGradientPresets: GrainGradientPreset[] = [\n defaultPreset,\n wavePreset,\n dotsPreset,\n truchetPreset,\n ripplePreset,\n blobPreset,\n];\n\nexport const GrainGradient: React.FC<GrainGradientProps> = memo(function GrainGradientImpl({\n // Own props\n speed = defaultPreset.params.speed,\n frame = defaultPreset.params.frame,\n colorBack = defaultPreset.params.colorBack,\n colors = defaultPreset.params.colors,\n softness = defaultPreset.params.softness,\n intensity = defaultPreset.params.intensity,\n noise = defaultPreset.params.noise,\n shape = defaultPreset.params.shape,\n\n // Sizing props\n fit = defaultPreset.params.fit,\n scale = defaultPreset.params.scale,\n rotation = defaultPreset.params.rotation,\n originX = defaultPreset.params.originX,\n originY = defaultPreset.params.originY,\n offsetX = defaultPreset.params.offsetX,\n offsetY = defaultPreset.params.offsetY,\n worldWidth = defaultPreset.params.worldWidth,\n worldHeight = defaultPreset.params.worldHeight,\n ...props\n}: GrainGradientProps) {\n const uniforms = {\n // Own uniforms\n u_colorBack: getShaderColorFromString(colorBack),\n u_colors: colors.map(getShaderColorFromString),\n u_colorsCount: colors.length,\n u_softness: softness,\n u_intensity: intensity,\n u_noise: noise,\n u_shape: GrainGradientShapes[shape],\n u_noiseTexture: getShaderNoiseTexture(),\n\n // Sizing uniforms\n u_fit: ShaderFitOptions[fit],\n u_scale: scale,\n u_rotation: rotation,\n u_offsetX: offsetX,\n u_offsetY: offsetY,\n u_originX: originX,\n u_originY: originY,\n u_worldWidth: worldWidth,\n u_worldHeight: worldHeight,\n } satisfies GrainGradientUniforms;\n\n return (\n <ShaderMount\n {...props}\n speed={speed}\n frame={frame}\n fragmentShader={grainGradientFragmentShader}\n uniforms={uniforms}\n />\n );\n});\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -0,0 +1,14 @@
1
+ import React from 'react';
2
+ import { type ShaderComponentProps } from '../shader-mount.js';
3
+ import { type HeatmapParams, type ImageShaderPreset } from '@paper-design/shaders';
4
+ export interface HeatmapProps extends ShaderComponentProps, HeatmapParams {
5
+ /**
6
+ * Suspends the component when the image is being processed.
7
+ */
8
+ suspendWhenProcessingImage?: boolean;
9
+ }
10
+ export type HeatmapPreset = ImageShaderPreset<HeatmapParams>;
11
+ export declare const defaultPreset: HeatmapPreset;
12
+ export declare const sepiaPreset: HeatmapPreset;
13
+ export declare const heatmapPresets: HeatmapPreset[];
14
+ export declare const Heatmap: React.FC<HeatmapProps>;
@@ -0,0 +1,161 @@
1
+ /* * * * * * * * * * * * * * * * * * * * * * * * * * * *
2
+ * Paper Shaders *
3
+ * https://github.com/paper-design/shaders *
4
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * */
5
+
6
+ import React, { memo, useLayoutEffect, useMemo, useState } from "react";
7
+ import { ShaderMount } from "../shader-mount.js";
8
+ import {
9
+ getShaderColorFromString,
10
+ heatmapFragmentShader,
11
+ ShaderFitOptions,
12
+ defaultObjectSizing,
13
+ toProcessedHeatmap
14
+ } from "@paper-design/shaders";
15
+ import { transparentPixel } from "../transparent-pixel.js";
16
+ import { suspend } from "../suspend.js";
17
+ import { colorPropsAreEqual } from "../color-props-are-equal.js";
18
+ import { jsx } from "react/jsx-runtime";
19
+ const defaultPreset = {
20
+ name: "Default",
21
+ params: {
22
+ ...defaultObjectSizing,
23
+ scale: 0.75,
24
+ speed: 1,
25
+ frame: 0,
26
+ contour: 0.5,
27
+ angle: 0,
28
+ noise: 0,
29
+ innerGlow: 0.5,
30
+ outerGlow: 0.5,
31
+ colorBack: "#000000",
32
+ colors: ["#11206a", "#1f3ba2", "#2f63e7", "#6bd7ff", "#ffe679", "#ff991e", "#ff4c00"]
33
+ }
34
+ };
35
+ const sepiaPreset = {
36
+ name: "Sepia",
37
+ params: {
38
+ ...defaultObjectSizing,
39
+ scale: 0.75,
40
+ speed: 0.5,
41
+ frame: 0,
42
+ contour: 0.5,
43
+ angle: 0,
44
+ noise: 0.75,
45
+ innerGlow: 0.5,
46
+ outerGlow: 0.5,
47
+ colorBack: "#000000",
48
+ colors: ["#997F45", "#ffffff"]
49
+ }
50
+ };
51
+ const heatmapPresets = [defaultPreset, sepiaPreset];
52
+ const Heatmap = memo(function HeatmapImpl({
53
+ // Own props
54
+ speed = defaultPreset.params.speed,
55
+ frame = defaultPreset.params.frame,
56
+ image = "",
57
+ contour = defaultPreset.params.contour,
58
+ angle = defaultPreset.params.angle,
59
+ noise = defaultPreset.params.noise,
60
+ innerGlow = defaultPreset.params.innerGlow,
61
+ outerGlow = defaultPreset.params.outerGlow,
62
+ colorBack = defaultPreset.params.colorBack,
63
+ colors = defaultPreset.params.colors,
64
+ suspendWhenProcessingImage = false,
65
+ // Sizing props
66
+ fit = defaultPreset.params.fit,
67
+ offsetX = defaultPreset.params.offsetX,
68
+ offsetY = defaultPreset.params.offsetY,
69
+ originX = defaultPreset.params.originX,
70
+ originY = defaultPreset.params.originY,
71
+ rotation = defaultPreset.params.rotation,
72
+ scale = defaultPreset.params.scale,
73
+ worldHeight = defaultPreset.params.worldHeight,
74
+ worldWidth = defaultPreset.params.worldWidth,
75
+ ...props
76
+ }) {
77
+ const imageUrl = typeof image === "string" ? image : image.src;
78
+ const [processedStateImage, setProcessedStateImage] = useState(transparentPixel);
79
+ let processedImage;
80
+ if (suspendWhenProcessingImage && typeof window !== "undefined") {
81
+ processedImage = suspend(
82
+ () => toProcessedHeatmap(imageUrl).then((result) => URL.createObjectURL(result.blob)),
83
+ [imageUrl, "heatmap"]
84
+ );
85
+ } else {
86
+ processedImage = processedStateImage;
87
+ }
88
+ useLayoutEffect(() => {
89
+ if (suspendWhenProcessingImage) {
90
+ return;
91
+ }
92
+ if (!imageUrl) {
93
+ setProcessedStateImage(transparentPixel);
94
+ return;
95
+ }
96
+ let url;
97
+ let current = true;
98
+ toProcessedHeatmap(imageUrl).then((result) => {
99
+ if (current) {
100
+ url = URL.createObjectURL(result.blob);
101
+ setProcessedStateImage(url);
102
+ }
103
+ });
104
+ return () => {
105
+ current = false;
106
+ };
107
+ }, [imageUrl, suspendWhenProcessingImage]);
108
+ const uniforms = useMemo(
109
+ () => ({
110
+ // Own uniforms
111
+ u_image: processedImage,
112
+ u_contour: contour,
113
+ u_angle: angle,
114
+ u_noise: noise,
115
+ u_innerGlow: innerGlow,
116
+ u_outerGlow: outerGlow,
117
+ u_colorBack: getShaderColorFromString(colorBack),
118
+ u_colors: colors.map(getShaderColorFromString),
119
+ u_colorsCount: colors.length,
120
+ // Sizing uniforms
121
+ u_fit: ShaderFitOptions[fit],
122
+ u_offsetX: offsetX,
123
+ u_offsetY: offsetY,
124
+ u_originX: originX,
125
+ u_originY: originY,
126
+ u_rotation: rotation,
127
+ u_scale: scale,
128
+ u_worldHeight: worldHeight,
129
+ u_worldWidth: worldWidth
130
+ }),
131
+ [
132
+ speed,
133
+ frame,
134
+ contour,
135
+ angle,
136
+ noise,
137
+ innerGlow,
138
+ outerGlow,
139
+ colors,
140
+ colorBack,
141
+ processedImage,
142
+ fit,
143
+ offsetX,
144
+ offsetY,
145
+ originX,
146
+ originY,
147
+ rotation,
148
+ scale,
149
+ worldHeight,
150
+ worldWidth
151
+ ]
152
+ );
153
+ return /* @__PURE__ */ jsx(ShaderMount, { ...props, speed, frame, fragmentShader: heatmapFragmentShader, uniforms });
154
+ }, colorPropsAreEqual);
155
+ export {
156
+ Heatmap,
157
+ defaultPreset,
158
+ heatmapPresets,
159
+ sepiaPreset
160
+ };
161
+ //# sourceMappingURL=heatmap.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/shaders/heatmap.tsx"],
4
+ "sourcesContent": ["import React, { memo, useLayoutEffect, useMemo, useState } from 'react';\nimport { ShaderMount, type ShaderComponentProps } from '../shader-mount.js';\nimport {\n getShaderColorFromString,\n heatmapFragmentShader,\n ShaderFitOptions,\n type HeatmapUniforms,\n type HeatmapParams,\n defaultObjectSizing,\n toProcessedHeatmap,\n type ImageShaderPreset,\n} from '@paper-design/shaders';\n\nimport { transparentPixel } from '../transparent-pixel.js';\nimport { suspend } from '../suspend.js';\nimport { colorPropsAreEqual } from '../color-props-are-equal.js';\n\nexport interface HeatmapProps extends ShaderComponentProps, HeatmapParams {\n /**\n * Suspends the component when the image is being processed.\n */\n suspendWhenProcessingImage?: boolean;\n}\n\nexport type HeatmapPreset = ImageShaderPreset<HeatmapParams>;\n\nexport const defaultPreset: HeatmapPreset = {\n name: 'Default',\n params: {\n ...defaultObjectSizing,\n scale: 0.75,\n speed: 1,\n frame: 0,\n contour: 0.5,\n angle: 0,\n noise: 0,\n innerGlow: 0.5,\n outerGlow: 0.5,\n colorBack: '#000000',\n colors: ['#11206a', '#1f3ba2', '#2f63e7', '#6bd7ff', '#ffe679', '#ff991e', '#ff4c00'],\n },\n} as const satisfies HeatmapPreset;\n\nexport const sepiaPreset: HeatmapPreset = {\n name: 'Sepia',\n params: {\n ...defaultObjectSizing,\n scale: 0.75,\n speed: 0.5,\n frame: 0,\n contour: 0.5,\n angle: 0,\n noise: 0.75,\n innerGlow: 0.5,\n outerGlow: 0.5,\n colorBack: '#000000',\n colors: ['#997F45', '#ffffff'],\n },\n} as const satisfies HeatmapPreset;\n\nexport const heatmapPresets: HeatmapPreset[] = [defaultPreset, sepiaPreset];\n\nexport const Heatmap: React.FC<HeatmapProps> = memo(function HeatmapImpl({\n // Own props\n speed = defaultPreset.params.speed,\n frame = defaultPreset.params.frame,\n image = '',\n contour = defaultPreset.params.contour,\n angle = defaultPreset.params.angle,\n noise = defaultPreset.params.noise,\n innerGlow = defaultPreset.params.innerGlow,\n outerGlow = defaultPreset.params.outerGlow,\n colorBack = defaultPreset.params.colorBack,\n colors = defaultPreset.params.colors,\n suspendWhenProcessingImage = false,\n\n // Sizing props\n fit = defaultPreset.params.fit,\n offsetX = defaultPreset.params.offsetX,\n offsetY = defaultPreset.params.offsetY,\n originX = defaultPreset.params.originX,\n originY = defaultPreset.params.originY,\n rotation = defaultPreset.params.rotation,\n scale = defaultPreset.params.scale,\n worldHeight = defaultPreset.params.worldHeight,\n worldWidth = defaultPreset.params.worldWidth,\n ...props\n}: HeatmapProps) {\n const imageUrl = typeof image === 'string' ? image : image.src;\n const [processedStateImage, setProcessedStateImage] = useState<string>(transparentPixel);\n\n let processedImage: string;\n\n // toProcessedHeatmap expects the document object to exist. This prevents SSR issues during builds.\n if (suspendWhenProcessingImage && typeof window !== 'undefined') {\n processedImage = suspend(\n (): Promise<string> => toProcessedHeatmap(imageUrl).then((result) => URL.createObjectURL(result.blob)),\n [imageUrl, 'heatmap']\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 toProcessedHeatmap(imageUrl).then((result) => {\n if (current) {\n url = URL.createObjectURL(result.blob);\n setProcessedStateImage(url);\n }\n });\n\n return () => {\n current = false;\n };\n }, [imageUrl, suspendWhenProcessingImage]);\n\n const uniforms = useMemo(\n () => ({\n // Own uniforms\n u_image: processedImage,\n u_contour: contour,\n u_angle: angle,\n u_noise: noise,\n u_innerGlow: innerGlow,\n u_outerGlow: outerGlow,\n u_colorBack: getShaderColorFromString(colorBack),\n u_colors: colors.map(getShaderColorFromString),\n u_colorsCount: colors.length,\n\n // Sizing uniforms\n u_fit: ShaderFitOptions[fit],\n u_offsetX: offsetX,\n u_offsetY: offsetY,\n u_originX: originX,\n u_originY: originY,\n u_rotation: rotation,\n u_scale: scale,\n u_worldHeight: worldHeight,\n u_worldWidth: worldWidth,\n }),\n [\n speed,\n frame,\n contour,\n angle,\n noise,\n innerGlow,\n outerGlow,\n colors,\n colorBack,\n processedImage,\n fit,\n offsetX,\n offsetY,\n originX,\n originY,\n rotation,\n scale,\n worldHeight,\n worldWidth,\n ]\n ) satisfies HeatmapUniforms;\n\n return (\n <ShaderMount {...props} speed={speed} frame={frame} fragmentShader={heatmapFragmentShader} uniforms={uniforms} />\n );\n}, colorPropsAreEqual);\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -0,0 +1,14 @@
1
+ import { type ShaderComponentProps } from '../shader-mount.js';
2
+ import { type ImageDitheringParams, type ImageShaderPreset } from '@paper-design/shaders';
3
+ export interface ImageDitheringProps extends ShaderComponentProps, ImageDitheringParams {
4
+ /** @deprecated use `size` instead */
5
+ pxSize?: number;
6
+ }
7
+ type ImageDitheringPreset = ImageShaderPreset<ImageDitheringParams>;
8
+ export declare const defaultPreset: ImageDitheringPreset;
9
+ export declare const retroPreset: ImageDitheringPreset;
10
+ export declare const noisePreset: ImageDitheringPreset;
11
+ export declare const naturalPreset: ImageDitheringPreset;
12
+ export declare const imageDitheringPresets: ImageDitheringPreset[];
13
+ export declare const ImageDithering: React.FC<ImageDitheringProps>;
14
+ export {};
@@ -0,0 +1,145 @@
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
+ imageDitheringFragmentShader,
11
+ getShaderColorFromString,
12
+ ShaderFitOptions,
13
+ defaultObjectSizing,
14
+ DitheringTypes
15
+ } from "@paper-design/shaders";
16
+ import { jsx } from "react/jsx-runtime";
17
+ const defaultPreset = {
18
+ name: "Default",
19
+ params: {
20
+ ...defaultObjectSizing,
21
+ fit: "cover",
22
+ // scale: 0.95,
23
+ speed: 0,
24
+ frame: 0,
25
+ colorFront: "#94ffaf",
26
+ colorBack: "#000c38",
27
+ colorHighlight: "#eaff94",
28
+ type: "8x8",
29
+ size: 2,
30
+ colorSteps: 2,
31
+ originalColors: false
32
+ }
33
+ };
34
+ const retroPreset = {
35
+ name: "Retro",
36
+ params: {
37
+ ...defaultObjectSizing,
38
+ speed: 0,
39
+ frame: 0,
40
+ colorFront: "#eeeeee",
41
+ colorBack: "#5452ff",
42
+ colorHighlight: "#eeeeee",
43
+ type: "2x2",
44
+ size: 3,
45
+ colorSteps: 1,
46
+ originalColors: true
47
+ }
48
+ };
49
+ const noisePreset = {
50
+ name: "Noise",
51
+ params: {
52
+ ...defaultObjectSizing,
53
+ speed: 0,
54
+ frame: 0,
55
+ colorFront: "#a2997c",
56
+ colorBack: "#000000",
57
+ colorHighlight: "#ededed",
58
+ type: "random",
59
+ size: 1,
60
+ colorSteps: 1,
61
+ originalColors: false
62
+ }
63
+ };
64
+ const naturalPreset = {
65
+ name: "Natural",
66
+ params: {
67
+ ...defaultObjectSizing,
68
+ speed: 0,
69
+ frame: 0,
70
+ colorFront: "#ffffff",
71
+ colorBack: "#000000",
72
+ colorHighlight: "#ffffff",
73
+ type: "8x8",
74
+ size: 2,
75
+ colorSteps: 5,
76
+ originalColors: true
77
+ }
78
+ };
79
+ const imageDitheringPresets = [defaultPreset, noisePreset, retroPreset, naturalPreset];
80
+ const ImageDithering = memo(function ImageDitheringImpl({
81
+ // Own props
82
+ speed = defaultPreset.params.speed,
83
+ frame = defaultPreset.params.frame,
84
+ colorFront = defaultPreset.params.colorFront,
85
+ colorBack = defaultPreset.params.colorBack,
86
+ colorHighlight = defaultPreset.params.colorHighlight,
87
+ image = "",
88
+ type = defaultPreset.params.type,
89
+ colorSteps = defaultPreset.params.colorSteps,
90
+ originalColors = defaultPreset.params.originalColors,
91
+ pxSize,
92
+ size = pxSize === void 0 ? defaultPreset.params.size : pxSize,
93
+ // Sizing props
94
+ fit = defaultPreset.params.fit,
95
+ scale = defaultPreset.params.scale,
96
+ rotation = defaultPreset.params.rotation,
97
+ originX = defaultPreset.params.originX,
98
+ originY = defaultPreset.params.originY,
99
+ offsetX = defaultPreset.params.offsetX,
100
+ offsetY = defaultPreset.params.offsetY,
101
+ worldWidth = defaultPreset.params.worldWidth,
102
+ worldHeight = defaultPreset.params.worldHeight,
103
+ ...props
104
+ }) {
105
+ const uniforms = {
106
+ // Own uniforms
107
+ u_image: image,
108
+ u_colorFront: getShaderColorFromString(colorFront),
109
+ u_colorBack: getShaderColorFromString(colorBack),
110
+ u_colorHighlight: getShaderColorFromString(colorHighlight),
111
+ u_type: DitheringTypes[type],
112
+ u_pxSize: size,
113
+ u_colorSteps: colorSteps,
114
+ u_originalColors: originalColors,
115
+ // Sizing uniforms
116
+ u_fit: ShaderFitOptions[fit],
117
+ u_rotation: rotation,
118
+ u_scale: scale,
119
+ u_offsetX: offsetX,
120
+ u_offsetY: offsetY,
121
+ u_originX: originX,
122
+ u_originY: originY,
123
+ u_worldWidth: worldWidth,
124
+ u_worldHeight: worldHeight
125
+ };
126
+ return /* @__PURE__ */ jsx(
127
+ ShaderMount,
128
+ {
129
+ ...props,
130
+ speed,
131
+ frame,
132
+ fragmentShader: imageDitheringFragmentShader,
133
+ uniforms
134
+ }
135
+ );
136
+ }, colorPropsAreEqual);
137
+ export {
138
+ ImageDithering,
139
+ defaultPreset,
140
+ imageDitheringPresets,
141
+ naturalPreset,
142
+ noisePreset,
143
+ retroPreset
144
+ };
145
+ //# sourceMappingURL=image-dithering.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/shaders/image-dithering.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 imageDitheringFragmentShader,\n getShaderColorFromString,\n ShaderFitOptions,\n type ImageDitheringUniforms,\n type ImageDitheringParams,\n defaultObjectSizing,\n DitheringTypes,\n type ImageShaderPreset,\n} from '@paper-design/shaders';\n\nexport interface ImageDitheringProps extends ShaderComponentProps, ImageDitheringParams {\n /** @deprecated use `size` instead */\n pxSize?: number;\n}\n\ntype ImageDitheringPreset = ImageShaderPreset<ImageDitheringParams>;\n\nexport const defaultPreset: ImageDitheringPreset = {\n name: 'Default',\n params: {\n ...defaultObjectSizing,\n fit: 'cover',\n // scale: 0.95,\n speed: 0,\n frame: 0,\n colorFront: '#94ffaf',\n colorBack: '#000c38',\n colorHighlight: '#eaff94',\n type: '8x8',\n size: 2,\n colorSteps: 2,\n originalColors: false,\n },\n} as const;\n\nexport const retroPreset: ImageDitheringPreset = {\n name: 'Retro',\n params: {\n ...defaultObjectSizing,\n speed: 0,\n frame: 0,\n colorFront: '#eeeeee',\n colorBack: '#5452ff',\n colorHighlight: '#eeeeee',\n type: '2x2',\n size: 3,\n colorSteps: 1,\n originalColors: true,\n },\n} as const;\n\nexport const noisePreset: ImageDitheringPreset = {\n name: 'Noise',\n params: {\n ...defaultObjectSizing,\n speed: 0,\n frame: 0,\n colorFront: '#a2997c',\n colorBack: '#000000',\n colorHighlight: '#ededed',\n type: 'random',\n size: 1,\n colorSteps: 1,\n originalColors: false,\n },\n} as const;\n\nexport const naturalPreset: ImageDitheringPreset = {\n name: 'Natural',\n params: {\n ...defaultObjectSizing,\n speed: 0,\n frame: 0,\n colorFront: '#ffffff',\n colorBack: '#000000',\n colorHighlight: '#ffffff',\n type: '8x8',\n size: 2,\n colorSteps: 5,\n originalColors: true,\n },\n} as const;\n\nexport const imageDitheringPresets: ImageDitheringPreset[] = [defaultPreset, noisePreset, retroPreset, naturalPreset];\n\nexport const ImageDithering: React.FC<ImageDitheringProps> = memo(function ImageDitheringImpl({\n // Own props\n speed = defaultPreset.params.speed,\n frame = defaultPreset.params.frame,\n colorFront = defaultPreset.params.colorFront,\n colorBack = defaultPreset.params.colorBack,\n colorHighlight = defaultPreset.params.colorHighlight,\n image = '',\n type = defaultPreset.params.type,\n colorSteps = defaultPreset.params.colorSteps,\n originalColors = defaultPreset.params.originalColors,\n pxSize,\n size = pxSize === undefined ? defaultPreset.params.size : pxSize,\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}: ImageDitheringProps) {\n const uniforms = {\n // Own uniforms\n u_image: image,\n u_colorFront: getShaderColorFromString(colorFront),\n u_colorBack: getShaderColorFromString(colorBack),\n u_colorHighlight: getShaderColorFromString(colorHighlight),\n u_type: DitheringTypes[type],\n u_pxSize: size,\n u_colorSteps: colorSteps,\n u_originalColors: originalColors,\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 ImageDitheringUniforms;\n\n return (\n <ShaderMount\n {...props}\n speed={speed}\n frame={frame}\n fragmentShader={imageDitheringFragmentShader}\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 ImageHalftoneDotsParams, type ImageShaderPreset } from '@paper-design/shaders';
3
+ export interface ImageHalftoneDotsProps extends ShaderComponentProps, ImageHalftoneDotsParams {
4
+ }
5
+ type ImageHalftoneDotsPreset = ImageShaderPreset<ImageHalftoneDotsParams>;
6
+ export declare const defaultPreset: ImageHalftoneDotsPreset;
7
+ export declare const abstractPreset: ImageHalftoneDotsPreset;
8
+ export declare const netPreset: ImageHalftoneDotsPreset;
9
+ export declare const holesPreset: ImageHalftoneDotsPreset;
10
+ export declare const imageHalftoneDotsPresets: ImageHalftoneDotsPreset[];
11
+ export declare const ImageHalftoneDots: React.FC<ImageHalftoneDotsProps>;
12
+ export {};