@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.
- package/LICENSE +21 -0
- package/README.md +29 -0
- package/dist/color-props-are-equal.d.ts +6 -0
- package/dist/color-props-are-equal.js +34 -0
- package/dist/color-props-are-equal.js.map +7 -0
- package/dist/index.d.ts +86 -0
- package/dist/index.js +129 -0
- package/dist/index.js.map +7 -0
- package/dist/shader-mount.d.ts +38 -0
- package/dist/shader-mount.js +149 -0
- package/dist/shader-mount.js.map +7 -0
- package/dist/shaders/color-panels.d.ts +12 -0
- package/dist/shaders/color-panels.js +173 -0
- package/dist/shaders/color-panels.js.map +7 -0
- package/dist/shaders/dithering.d.ts +16 -0
- package/dist/shaders/dithering.js +158 -0
- package/dist/shaders/dithering.js.map +7 -0
- package/dist/shaders/dot-grid.d.ts +9 -0
- package/dist/shaders/dot-grid.js +139 -0
- package/dist/shaders/dot-grid.js.map +7 -0
- package/dist/shaders/dot-orbit.d.ts +12 -0
- package/dist/shaders/dot-orbit.js +130 -0
- package/dist/shaders/dot-orbit.js.map +7 -0
- package/dist/shaders/fluted-glass.d.ts +14 -0
- package/dist/shaders/fluted-glass.js +183 -0
- package/dist/shaders/fluted-glass.js.map +7 -0
- package/dist/shaders/god-rays.d.ts +12 -0
- package/dist/shaders/god-rays.js +150 -0
- package/dist/shaders/god-rays.js.map +7 -0
- package/dist/shaders/grain-gradient.d.ts +14 -0
- package/dist/shaders/grain-gradient.js +177 -0
- package/dist/shaders/grain-gradient.js.map +7 -0
- package/dist/shaders/heatmap.d.ts +14 -0
- package/dist/shaders/heatmap.js +161 -0
- package/dist/shaders/heatmap.js.map +7 -0
- package/dist/shaders/image-dithering.d.ts +14 -0
- package/dist/shaders/image-dithering.js +145 -0
- package/dist/shaders/image-dithering.js.map +7 -0
- package/dist/shaders/image-halftone-dots.d.ts +12 -0
- package/dist/shaders/image-halftone-dots.js +171 -0
- package/dist/shaders/image-halftone-dots.js.map +7 -0
- package/dist/shaders/liquid-metal.d.ts +16 -0
- package/dist/shaders/liquid-metal.js +201 -0
- package/dist/shaders/liquid-metal.js.map +7 -0
- package/dist/shaders/mesh-gradient.d.ts +12 -0
- package/dist/shaders/mesh-gradient.js +129 -0
- package/dist/shaders/mesh-gradient.js.map +7 -0
- package/dist/shaders/metaballs.d.ts +12 -0
- package/dist/shaders/metaballs.js +121 -0
- package/dist/shaders/metaballs.js.map +7 -0
- package/dist/shaders/neuro-noise.d.ts +12 -0
- package/dist/shaders/neuro-noise.js +126 -0
- package/dist/shaders/neuro-noise.js.map +7 -0
- package/dist/shaders/paper-texture.d.ts +20 -0
- package/dist/shaders/paper-texture.js +198 -0
- package/dist/shaders/paper-texture.js.map +7 -0
- package/dist/shaders/perlin-noise.d.ts +12 -0
- package/dist/shaders/perlin-noise.js +142 -0
- package/dist/shaders/perlin-noise.js.map +7 -0
- package/dist/shaders/pulsing-border.d.ts +12 -0
- package/dist/shaders/pulsing-border.js +216 -0
- package/dist/shaders/pulsing-border.js.map +7 -0
- package/dist/shaders/simplex-noise.d.ts +12 -0
- package/dist/shaders/simplex-noise.js +125 -0
- package/dist/shaders/simplex-noise.js.map +7 -0
- package/dist/shaders/smoke-ring.d.ts +12 -0
- package/dist/shaders/smoke-ring.js +137 -0
- package/dist/shaders/smoke-ring.js.map +7 -0
- package/dist/shaders/spiral.d.ts +12 -0
- package/dist/shaders/spiral.js +151 -0
- package/dist/shaders/spiral.js.map +7 -0
- package/dist/shaders/static-mesh-gradient.d.ts +12 -0
- package/dist/shaders/static-mesh-gradient.js +158 -0
- package/dist/shaders/static-mesh-gradient.js.map +7 -0
- package/dist/shaders/static-radial-gradient.d.ts +12 -0
- package/dist/shaders/static-radial-gradient.js +178 -0
- package/dist/shaders/static-radial-gradient.js.map +7 -0
- package/dist/shaders/swirl.d.ts +12 -0
- package/dist/shaders/swirl.js +146 -0
- package/dist/shaders/swirl.js.map +7 -0
- package/dist/shaders/voronoi.d.ts +12 -0
- package/dist/shaders/voronoi.js +137 -0
- package/dist/shaders/voronoi.js.map +7 -0
- package/dist/shaders/warp.d.ts +14 -0
- package/dist/shaders/warp.js +194 -0
- package/dist/shaders/warp.js.map +7 -0
- package/dist/shaders/water.d.ts +14 -0
- package/dist/shaders/water.js +148 -0
- package/dist/shaders/water.js.map +7 -0
- package/dist/shaders/waves.d.ts +12 -0
- package/dist/shaders/waves.js +136 -0
- package/dist/shaders/waves.js.map +7 -0
- package/dist/suspend.d.ts +8 -0
- package/dist/suspend.js +43 -0
- package/dist/suspend.js.map +7 -0
- package/dist/transparent-pixel.d.ts +1 -0
- package/dist/transparent-pixel.js +10 -0
- package/dist/transparent-pixel.js.map +7 -0
- package/dist/use-merge-refs.d.ts +6 -0
- package/dist/use-merge-refs.js +48 -0
- package/dist/use-merge-refs.js.map +7 -0
- package/package.json +41 -0
|
@@ -0,0 +1,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 {};
|