@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.
- 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
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2024 Lost Coast Labs, Inc. (Paper Design)
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# @paper-design/shaders-react
|
|
2
|
+
|
|
3
|
+
## Usage
|
|
4
|
+
|
|
5
|
+
```
|
|
6
|
+
import { MeshGradient, DotOrbit } from '@paper-design/shaders-react';
|
|
7
|
+
|
|
8
|
+
<MeshGradient
|
|
9
|
+
colors={['#5100ff', '#00ff80', '#ffcc00', '#ea00ff']}
|
|
10
|
+
distortion={1}
|
|
11
|
+
swirl={0.8}
|
|
12
|
+
speed={0.2}
|
|
13
|
+
style={{width: 200, height: 200}}
|
|
14
|
+
/>
|
|
15
|
+
|
|
16
|
+
<DotOrbit
|
|
17
|
+
colors={['#d2822d', '#0c3b7e', '#b31a57', '#37a066']}
|
|
18
|
+
colorBack={'#000000'}
|
|
19
|
+
scale={0.3}
|
|
20
|
+
style={{width: 200, height: 200}}
|
|
21
|
+
/>
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
// these settings can be configured in code or designed in Paper
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
## Release notes
|
|
28
|
+
|
|
29
|
+
[View changelog →](https://github.com/paper-design/shaders/blob/main/CHANGELOG.md)
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/* * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
|
2
|
+
* Paper Shaders *
|
|
3
|
+
* https://github.com/paper-design/shaders *
|
|
4
|
+
* * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
|
5
|
+
|
|
6
|
+
function colorPropsAreEqual(prevProps, nextProps) {
|
|
7
|
+
for (const key in prevProps) {
|
|
8
|
+
if (key === "colors") {
|
|
9
|
+
const prevIsArray = Array.isArray(prevProps.colors);
|
|
10
|
+
const nextIsArray = Array.isArray(nextProps.colors);
|
|
11
|
+
if (!prevIsArray || !nextIsArray) {
|
|
12
|
+
if (Object.is(prevProps.colors, nextProps.colors) === false) {
|
|
13
|
+
return false;
|
|
14
|
+
}
|
|
15
|
+
continue;
|
|
16
|
+
}
|
|
17
|
+
if (prevProps.colors?.length !== nextProps.colors?.length) {
|
|
18
|
+
return false;
|
|
19
|
+
}
|
|
20
|
+
if (!prevProps.colors?.every((color, index) => color === nextProps.colors?.[index])) {
|
|
21
|
+
return false;
|
|
22
|
+
}
|
|
23
|
+
continue;
|
|
24
|
+
}
|
|
25
|
+
if (Object.is(prevProps[key], nextProps[key]) === false) {
|
|
26
|
+
return false;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
return true;
|
|
30
|
+
}
|
|
31
|
+
export {
|
|
32
|
+
colorPropsAreEqual
|
|
33
|
+
};
|
|
34
|
+
//# sourceMappingURL=color-props-are-equal.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/color-props-are-equal.ts"],
|
|
4
|
+
"sourcesContent": ["interface PropsWithColors {\n colors?: string[];\n [key: string]: unknown;\n}\n\nexport function colorPropsAreEqual(prevProps: PropsWithColors, nextProps: PropsWithColors): boolean {\n for (const key in prevProps) {\n if (key === 'colors') {\n const prevIsArray = Array.isArray(prevProps.colors);\n const nextIsArray = Array.isArray(nextProps.colors);\n\n if (!prevIsArray || !nextIsArray) {\n if (Object.is(prevProps.colors, nextProps.colors) === false) {\n return false;\n }\n\n continue;\n }\n\n if (prevProps.colors?.length !== nextProps.colors?.length) {\n return false;\n }\n\n if (!prevProps.colors?.every((color, index) => color === nextProps.colors?.[index])) {\n return false;\n }\n\n continue;\n }\n\n if (Object.is(prevProps[key], nextProps[key]) === false) {\n return false;\n }\n }\n\n return true;\n}\n"],
|
|
5
|
+
"mappings": ";;;;;AAKO,SAAS,mBAAmB,WAA4B,WAAqC;AAClG,aAAW,OAAO,WAAW;AAC3B,QAAI,QAAQ,UAAU;AACpB,YAAM,cAAc,MAAM,QAAQ,UAAU,MAAM;AAClD,YAAM,cAAc,MAAM,QAAQ,UAAU,MAAM;AAElD,UAAI,CAAC,eAAe,CAAC,aAAa;AAChC,YAAI,OAAO,GAAG,UAAU,QAAQ,UAAU,MAAM,MAAM,OAAO;AAC3D,iBAAO;AAAA,QACT;AAEA;AAAA,MACF;AAEA,UAAI,UAAU,QAAQ,WAAW,UAAU,QAAQ,QAAQ;AACzD,eAAO;AAAA,MACT;AAEA,UAAI,CAAC,UAAU,QAAQ,MAAM,CAAC,OAAO,UAAU,UAAU,UAAU,SAAS,KAAK,CAAC,GAAG;AACnF,eAAO;AAAA,MACT;AAEA;AAAA,IACF;AAEA,QAAI,OAAO,GAAG,UAAU,GAAG,GAAG,UAAU,GAAG,CAAC,MAAM,OAAO;AACvD,aAAO;AAAA,IACT;AAAA,EACF;AAEA,SAAO;AACT;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
export { ShaderMount } from './shader-mount.js';
|
|
2
|
+
export type { ShaderMountProps, ShaderComponentProps } from './shader-mount.js';
|
|
3
|
+
export { MeshGradient, meshGradientPresets } from './shaders/mesh-gradient.js';
|
|
4
|
+
export type { MeshGradientProps } from './shaders/mesh-gradient.js';
|
|
5
|
+
export type { MeshGradientUniforms, MeshGradientParams } from '@paper-design/shaders';
|
|
6
|
+
export { SmokeRing, smokeRingPresets } from './shaders/smoke-ring.js';
|
|
7
|
+
export type { SmokeRingProps } from './shaders/smoke-ring.js';
|
|
8
|
+
export type { SmokeRingUniforms, SmokeRingParams } from '@paper-design/shaders';
|
|
9
|
+
export { NeuroNoise, neuroNoisePresets } from './shaders/neuro-noise.js';
|
|
10
|
+
export type { NeuroNoiseProps } from './shaders/neuro-noise.js';
|
|
11
|
+
export type { NeuroNoiseUniforms, NeuroNoiseParams } from '@paper-design/shaders';
|
|
12
|
+
export { DotOrbit, dotOrbitPresets } from './shaders/dot-orbit.js';
|
|
13
|
+
export type { DotOrbitProps } from './shaders/dot-orbit.js';
|
|
14
|
+
export type { DotOrbitUniforms, DotOrbitParams } from '@paper-design/shaders';
|
|
15
|
+
export { DotGrid, dotGridPresets } from './shaders/dot-grid.js';
|
|
16
|
+
export type { DotGridProps } from './shaders/dot-grid.js';
|
|
17
|
+
export type { DotGridUniforms, DotGridParams } from '@paper-design/shaders';
|
|
18
|
+
export { SimplexNoise, simplexNoisePresets } from './shaders/simplex-noise.js';
|
|
19
|
+
export type { SimplexNoiseProps } from './shaders/simplex-noise.js';
|
|
20
|
+
export type { SimplexNoiseUniforms, SimplexNoiseParams } from '@paper-design/shaders';
|
|
21
|
+
export { Metaballs, metaballsPresets } from './shaders/metaballs.js';
|
|
22
|
+
export type { MetaballsProps } from './shaders/metaballs.js';
|
|
23
|
+
export type { MetaballsUniforms, MetaballsParams } from '@paper-design/shaders';
|
|
24
|
+
export { Waves, wavesPresets } from './shaders/waves.js';
|
|
25
|
+
export type { WavesProps } from './shaders/waves.js';
|
|
26
|
+
export type { WavesUniforms, WavesParams } from '@paper-design/shaders';
|
|
27
|
+
export { PerlinNoise, perlinNoisePresets } from './shaders/perlin-noise.js';
|
|
28
|
+
export type { PerlinNoiseProps } from './shaders/perlin-noise.js';
|
|
29
|
+
export type { PerlinNoiseUniforms, PerlinNoiseParams } from '@paper-design/shaders';
|
|
30
|
+
export { Voronoi, voronoiPresets } from './shaders/voronoi.js';
|
|
31
|
+
export type { VoronoiProps } from './shaders/voronoi.js';
|
|
32
|
+
export type { VoronoiUniforms, VoronoiParams } from '@paper-design/shaders';
|
|
33
|
+
export { Warp, warpPresets } from './shaders/warp.js';
|
|
34
|
+
export type { WarpProps } from './shaders/warp.js';
|
|
35
|
+
export type { WarpUniforms, WarpParams, WarpPattern } from '@paper-design/shaders';
|
|
36
|
+
export { GodRays, godRaysPresets } from './shaders/god-rays.js';
|
|
37
|
+
export type { GodRaysProps } from './shaders/god-rays.js';
|
|
38
|
+
export type { GodRaysUniforms, GodRaysParams } from '@paper-design/shaders';
|
|
39
|
+
export { Spiral, spiralPresets } from './shaders/spiral.js';
|
|
40
|
+
export type { SpiralProps } from './shaders/spiral.js';
|
|
41
|
+
export type { SpiralUniforms, SpiralParams } from '@paper-design/shaders';
|
|
42
|
+
export { Swirl, swirlPresets } from './shaders/swirl.js';
|
|
43
|
+
export type { SwirlProps } from './shaders/swirl.js';
|
|
44
|
+
export type { SwirlUniforms, SwirlParams } from '@paper-design/shaders';
|
|
45
|
+
export { Dithering, ditheringPresets } from './shaders/dithering.js';
|
|
46
|
+
export type { DitheringProps } from './shaders/dithering.js';
|
|
47
|
+
export type { DitheringUniforms, DitheringParams } from '@paper-design/shaders';
|
|
48
|
+
export { GrainGradient, grainGradientPresets } from './shaders/grain-gradient.js';
|
|
49
|
+
export type { GrainGradientProps } from './shaders/grain-gradient.js';
|
|
50
|
+
export type { GrainGradientUniforms, GrainGradientParams } from '@paper-design/shaders';
|
|
51
|
+
export { PulsingBorder, pulsingBorderPresets } from './shaders/pulsing-border.js';
|
|
52
|
+
export type { PulsingBorderProps } from './shaders/pulsing-border.js';
|
|
53
|
+
export type { PulsingBorderUniforms, PulsingBorderParams } from '@paper-design/shaders';
|
|
54
|
+
export { ColorPanels, colorPanelsPresets } from './shaders/color-panels.js';
|
|
55
|
+
export type { ColorPanelsProps } from './shaders/color-panels.js';
|
|
56
|
+
export type { ColorPanelsUniforms, ColorPanelsParams } from '@paper-design/shaders';
|
|
57
|
+
export { StaticMeshGradient, staticMeshGradientPresets } from './shaders/static-mesh-gradient.js';
|
|
58
|
+
export type { StaticMeshGradientProps } from './shaders/static-mesh-gradient.js';
|
|
59
|
+
export type { StaticMeshGradientUniforms, StaticMeshGradientParams } from '@paper-design/shaders';
|
|
60
|
+
export { StaticRadialGradient, staticRadialGradientPresets } from './shaders/static-radial-gradient.js';
|
|
61
|
+
export type { StaticRadialGradientProps } from './shaders/static-radial-gradient.js';
|
|
62
|
+
export type { StaticRadialGradientUniforms, StaticRadialGradientParams } from '@paper-design/shaders';
|
|
63
|
+
export { PaperTexture, paperTexturePresets } from './shaders/paper-texture.js';
|
|
64
|
+
export type { PaperTextureProps } from './shaders/paper-texture.js';
|
|
65
|
+
export type { PaperTextureUniforms, PaperTextureParams } from '@paper-design/shaders';
|
|
66
|
+
export { FlutedGlass, flutedGlassPresets } from './shaders/fluted-glass.js';
|
|
67
|
+
export { type FlutedGlassProps } from './shaders/fluted-glass.js';
|
|
68
|
+
export { type FlutedGlassUniforms, type FlutedGlassParams } from '@paper-design/shaders';
|
|
69
|
+
export { Water, waterPresets } from './shaders/water.js';
|
|
70
|
+
export type { WaterProps } from './shaders/water.js';
|
|
71
|
+
export type { WaterUniforms, WaterParams } from '@paper-design/shaders';
|
|
72
|
+
export { ImageDithering, imageDitheringPresets } from './shaders/image-dithering.js';
|
|
73
|
+
export type { ImageDitheringProps } from './shaders/image-dithering.js';
|
|
74
|
+
export type { ImageDitheringUniforms, ImageDitheringParams } from '@paper-design/shaders';
|
|
75
|
+
export { Heatmap, heatmapPresets } from './shaders/heatmap.js';
|
|
76
|
+
export type { HeatmapProps } from './shaders/heatmap.js';
|
|
77
|
+
export type { HeatmapUniforms, HeatmapParams } from '@paper-design/shaders';
|
|
78
|
+
export { LiquidMetal, liquidMetalPresets } from './shaders/liquid-metal.js';
|
|
79
|
+
export type { LiquidMetalProps } from './shaders/liquid-metal.js';
|
|
80
|
+
export type { LiquidMetalUniforms, LiquidMetalParams } from '@paper-design/shaders';
|
|
81
|
+
export { ImageHalftoneDots, imageHalftoneDotsPresets } from './shaders/image-halftone-dots.js';
|
|
82
|
+
export type { ImageHalftoneDotsProps } from './shaders/image-halftone-dots.js';
|
|
83
|
+
export type { ImageHalftoneDotsUniforms, ImageHalftoneDotsParams } from '@paper-design/shaders';
|
|
84
|
+
export { isPaperShaderElement, getShaderColorFromString } from '@paper-design/shaders';
|
|
85
|
+
export type { PaperShaderElement, ShaderFit, ShaderSizingParams, ShaderSizingUniforms } from '@paper-design/shaders';
|
|
86
|
+
export { colorPanelsMeta, dotOrbitMeta, godRaysMeta, grainGradientMeta, meshGradientMeta, metaballsMeta, pulsingBorderMeta, simplexNoiseMeta, smokeRingMeta, swirlMeta, voronoiMeta, warpMeta, heatmapMeta, staticMeshGradientMeta, staticRadialGradientMeta, } from '@paper-design/shaders';
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
/* * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
|
2
|
+
* Paper Shaders *
|
|
3
|
+
* https://github.com/paper-design/shaders *
|
|
4
|
+
* * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
|
5
|
+
|
|
6
|
+
"use client";
|
|
7
|
+
import { ShaderMount } from "./shader-mount.js";
|
|
8
|
+
import { MeshGradient, meshGradientPresets } from "./shaders/mesh-gradient.js";
|
|
9
|
+
import { SmokeRing, smokeRingPresets } from "./shaders/smoke-ring.js";
|
|
10
|
+
import { NeuroNoise, neuroNoisePresets } from "./shaders/neuro-noise.js";
|
|
11
|
+
import { DotOrbit, dotOrbitPresets } from "./shaders/dot-orbit.js";
|
|
12
|
+
import { DotGrid, dotGridPresets } from "./shaders/dot-grid.js";
|
|
13
|
+
import { SimplexNoise, simplexNoisePresets } from "./shaders/simplex-noise.js";
|
|
14
|
+
import { Metaballs, metaballsPresets } from "./shaders/metaballs.js";
|
|
15
|
+
import { Waves, wavesPresets } from "./shaders/waves.js";
|
|
16
|
+
import { PerlinNoise, perlinNoisePresets } from "./shaders/perlin-noise.js";
|
|
17
|
+
import { Voronoi, voronoiPresets } from "./shaders/voronoi.js";
|
|
18
|
+
import { Warp, warpPresets } from "./shaders/warp.js";
|
|
19
|
+
import { GodRays, godRaysPresets } from "./shaders/god-rays.js";
|
|
20
|
+
import { Spiral, spiralPresets } from "./shaders/spiral.js";
|
|
21
|
+
import { Swirl, swirlPresets } from "./shaders/swirl.js";
|
|
22
|
+
import { Dithering, ditheringPresets } from "./shaders/dithering.js";
|
|
23
|
+
import { GrainGradient, grainGradientPresets } from "./shaders/grain-gradient.js";
|
|
24
|
+
import { PulsingBorder, pulsingBorderPresets } from "./shaders/pulsing-border.js";
|
|
25
|
+
import { ColorPanels, colorPanelsPresets } from "./shaders/color-panels.js";
|
|
26
|
+
import { StaticMeshGradient, staticMeshGradientPresets } from "./shaders/static-mesh-gradient.js";
|
|
27
|
+
import { StaticRadialGradient, staticRadialGradientPresets } from "./shaders/static-radial-gradient.js";
|
|
28
|
+
import { PaperTexture, paperTexturePresets } from "./shaders/paper-texture.js";
|
|
29
|
+
import { FlutedGlass, flutedGlassPresets } from "./shaders/fluted-glass.js";
|
|
30
|
+
import {} from "./shaders/fluted-glass.js";
|
|
31
|
+
import {} from "@paper-design/shaders";
|
|
32
|
+
import { Water, waterPresets } from "./shaders/water.js";
|
|
33
|
+
import { ImageDithering, imageDitheringPresets } from "./shaders/image-dithering.js";
|
|
34
|
+
import { Heatmap, heatmapPresets } from "./shaders/heatmap.js";
|
|
35
|
+
import { LiquidMetal, liquidMetalPresets } from "./shaders/liquid-metal.js";
|
|
36
|
+
import { ImageHalftoneDots, imageHalftoneDotsPresets } from "./shaders/image-halftone-dots.js";
|
|
37
|
+
import { isPaperShaderElement, getShaderColorFromString } from "@paper-design/shaders";
|
|
38
|
+
import {
|
|
39
|
+
colorPanelsMeta,
|
|
40
|
+
dotOrbitMeta,
|
|
41
|
+
godRaysMeta,
|
|
42
|
+
grainGradientMeta,
|
|
43
|
+
meshGradientMeta,
|
|
44
|
+
metaballsMeta,
|
|
45
|
+
pulsingBorderMeta,
|
|
46
|
+
simplexNoiseMeta,
|
|
47
|
+
smokeRingMeta,
|
|
48
|
+
swirlMeta,
|
|
49
|
+
voronoiMeta,
|
|
50
|
+
warpMeta,
|
|
51
|
+
heatmapMeta,
|
|
52
|
+
staticMeshGradientMeta,
|
|
53
|
+
staticRadialGradientMeta
|
|
54
|
+
} from "@paper-design/shaders";
|
|
55
|
+
export {
|
|
56
|
+
ColorPanels,
|
|
57
|
+
Dithering,
|
|
58
|
+
DotGrid,
|
|
59
|
+
DotOrbit,
|
|
60
|
+
FlutedGlass,
|
|
61
|
+
GodRays,
|
|
62
|
+
GrainGradient,
|
|
63
|
+
Heatmap,
|
|
64
|
+
ImageDithering,
|
|
65
|
+
ImageHalftoneDots,
|
|
66
|
+
LiquidMetal,
|
|
67
|
+
MeshGradient,
|
|
68
|
+
Metaballs,
|
|
69
|
+
NeuroNoise,
|
|
70
|
+
PaperTexture,
|
|
71
|
+
PerlinNoise,
|
|
72
|
+
PulsingBorder,
|
|
73
|
+
ShaderMount,
|
|
74
|
+
SimplexNoise,
|
|
75
|
+
SmokeRing,
|
|
76
|
+
Spiral,
|
|
77
|
+
StaticMeshGradient,
|
|
78
|
+
StaticRadialGradient,
|
|
79
|
+
Swirl,
|
|
80
|
+
Voronoi,
|
|
81
|
+
Warp,
|
|
82
|
+
Water,
|
|
83
|
+
Waves,
|
|
84
|
+
colorPanelsMeta,
|
|
85
|
+
colorPanelsPresets,
|
|
86
|
+
ditheringPresets,
|
|
87
|
+
dotGridPresets,
|
|
88
|
+
dotOrbitMeta,
|
|
89
|
+
dotOrbitPresets,
|
|
90
|
+
flutedGlassPresets,
|
|
91
|
+
getShaderColorFromString,
|
|
92
|
+
godRaysMeta,
|
|
93
|
+
godRaysPresets,
|
|
94
|
+
grainGradientMeta,
|
|
95
|
+
grainGradientPresets,
|
|
96
|
+
heatmapMeta,
|
|
97
|
+
heatmapPresets,
|
|
98
|
+
imageDitheringPresets,
|
|
99
|
+
imageHalftoneDotsPresets,
|
|
100
|
+
isPaperShaderElement,
|
|
101
|
+
liquidMetalPresets,
|
|
102
|
+
meshGradientMeta,
|
|
103
|
+
meshGradientPresets,
|
|
104
|
+
metaballsMeta,
|
|
105
|
+
metaballsPresets,
|
|
106
|
+
neuroNoisePresets,
|
|
107
|
+
paperTexturePresets,
|
|
108
|
+
perlinNoisePresets,
|
|
109
|
+
pulsingBorderMeta,
|
|
110
|
+
pulsingBorderPresets,
|
|
111
|
+
simplexNoiseMeta,
|
|
112
|
+
simplexNoisePresets,
|
|
113
|
+
smokeRingMeta,
|
|
114
|
+
smokeRingPresets,
|
|
115
|
+
spiralPresets,
|
|
116
|
+
staticMeshGradientMeta,
|
|
117
|
+
staticMeshGradientPresets,
|
|
118
|
+
staticRadialGradientMeta,
|
|
119
|
+
staticRadialGradientPresets,
|
|
120
|
+
swirlMeta,
|
|
121
|
+
swirlPresets,
|
|
122
|
+
voronoiMeta,
|
|
123
|
+
voronoiPresets,
|
|
124
|
+
warpMeta,
|
|
125
|
+
warpPresets,
|
|
126
|
+
waterPresets,
|
|
127
|
+
wavesPresets
|
|
128
|
+
};
|
|
129
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/index.ts"],
|
|
4
|
+
"sourcesContent": ["'use client';\n\nexport { ShaderMount } from './shader-mount.js';\nexport type { ShaderMountProps, ShaderComponentProps } from './shader-mount.js';\n\nexport { MeshGradient, meshGradientPresets } from './shaders/mesh-gradient.js';\nexport type { MeshGradientProps } from './shaders/mesh-gradient.js';\nexport type { MeshGradientUniforms, MeshGradientParams } from '@paper-design/shaders';\n\nexport { SmokeRing, smokeRingPresets } from './shaders/smoke-ring.js';\nexport type { SmokeRingProps } from './shaders/smoke-ring.js';\nexport type { SmokeRingUniforms, SmokeRingParams } from '@paper-design/shaders';\n\nexport { NeuroNoise, neuroNoisePresets } from './shaders/neuro-noise.js';\nexport type { NeuroNoiseProps } from './shaders/neuro-noise.js';\nexport type { NeuroNoiseUniforms, NeuroNoiseParams } from '@paper-design/shaders';\n\nexport { DotOrbit, dotOrbitPresets } from './shaders/dot-orbit.js';\nexport type { DotOrbitProps } from './shaders/dot-orbit.js';\nexport type { DotOrbitUniforms, DotOrbitParams } from '@paper-design/shaders';\n\nexport { DotGrid, dotGridPresets } from './shaders/dot-grid.js';\nexport type { DotGridProps } from './shaders/dot-grid.js';\nexport type { DotGridUniforms, DotGridParams } from '@paper-design/shaders';\n\nexport { SimplexNoise, simplexNoisePresets } from './shaders/simplex-noise.js';\nexport type { SimplexNoiseProps } from './shaders/simplex-noise.js';\nexport type { SimplexNoiseUniforms, SimplexNoiseParams } from '@paper-design/shaders';\n\nexport { Metaballs, metaballsPresets } from './shaders/metaballs.js';\nexport type { MetaballsProps } from './shaders/metaballs.js';\nexport type { MetaballsUniforms, MetaballsParams } from '@paper-design/shaders';\n\nexport { Waves, wavesPresets } from './shaders/waves.js';\nexport type { WavesProps } from './shaders/waves.js';\nexport type { WavesUniforms, WavesParams } from '@paper-design/shaders';\n\nexport { PerlinNoise, perlinNoisePresets } from './shaders/perlin-noise.js';\nexport type { PerlinNoiseProps } from './shaders/perlin-noise.js';\nexport type { PerlinNoiseUniforms, PerlinNoiseParams } from '@paper-design/shaders';\n\nexport { Voronoi, voronoiPresets } from './shaders/voronoi.js';\nexport type { VoronoiProps } from './shaders/voronoi.js';\nexport type { VoronoiUniforms, VoronoiParams } from '@paper-design/shaders';\n\nexport { Warp, warpPresets } from './shaders/warp.js';\nexport type { WarpProps } from './shaders/warp.js';\nexport type { WarpUniforms, WarpParams, WarpPattern } from '@paper-design/shaders';\n\nexport { GodRays, godRaysPresets } from './shaders/god-rays.js';\nexport type { GodRaysProps } from './shaders/god-rays.js';\nexport type { GodRaysUniforms, GodRaysParams } from '@paper-design/shaders';\n\nexport { Spiral, spiralPresets } from './shaders/spiral.js';\nexport type { SpiralProps } from './shaders/spiral.js';\nexport type { SpiralUniforms, SpiralParams } from '@paper-design/shaders';\n\nexport { Swirl, swirlPresets } from './shaders/swirl.js';\nexport type { SwirlProps } from './shaders/swirl.js';\nexport type { SwirlUniforms, SwirlParams } from '@paper-design/shaders';\n\nexport { Dithering, ditheringPresets } from './shaders/dithering.js';\nexport type { DitheringProps } from './shaders/dithering.js';\nexport type { DitheringUniforms, DitheringParams } from '@paper-design/shaders';\n\nexport { GrainGradient, grainGradientPresets } from './shaders/grain-gradient.js';\nexport type { GrainGradientProps } from './shaders/grain-gradient.js';\nexport type { GrainGradientUniforms, GrainGradientParams } from '@paper-design/shaders';\n\nexport { PulsingBorder, pulsingBorderPresets } from './shaders/pulsing-border.js';\nexport type { PulsingBorderProps } from './shaders/pulsing-border.js';\nexport type { PulsingBorderUniforms, PulsingBorderParams } from '@paper-design/shaders';\n\nexport { ColorPanels, colorPanelsPresets } from './shaders/color-panels.js';\nexport type { ColorPanelsProps } from './shaders/color-panels.js';\nexport type { ColorPanelsUniforms, ColorPanelsParams } from '@paper-design/shaders';\n\nexport { StaticMeshGradient, staticMeshGradientPresets } from './shaders/static-mesh-gradient.js';\nexport type { StaticMeshGradientProps } from './shaders/static-mesh-gradient.js';\nexport type { StaticMeshGradientUniforms, StaticMeshGradientParams } from '@paper-design/shaders';\n\nexport { StaticRadialGradient, staticRadialGradientPresets } from './shaders/static-radial-gradient.js';\nexport type { StaticRadialGradientProps } from './shaders/static-radial-gradient.js';\nexport type { StaticRadialGradientUniforms, StaticRadialGradientParams } from '@paper-design/shaders';\n\nexport { PaperTexture, paperTexturePresets } from './shaders/paper-texture.js';\nexport type { PaperTextureProps } from './shaders/paper-texture.js';\nexport type { PaperTextureUniforms, PaperTextureParams } from '@paper-design/shaders';\n\nexport { FlutedGlass, flutedGlassPresets } from './shaders/fluted-glass.js';\nexport { type FlutedGlassProps } from './shaders/fluted-glass.js';\nexport { type FlutedGlassUniforms, type FlutedGlassParams } from '@paper-design/shaders';\n\nexport { Water, waterPresets } from './shaders/water.js';\nexport type { WaterProps } from './shaders/water.js';\nexport type { WaterUniforms, WaterParams } from '@paper-design/shaders';\n\nexport { ImageDithering, imageDitheringPresets } from './shaders/image-dithering.js';\nexport type { ImageDitheringProps } from './shaders/image-dithering.js';\nexport type { ImageDitheringUniforms, ImageDitheringParams } from '@paper-design/shaders';\n\nexport { Heatmap, heatmapPresets } from './shaders/heatmap.js';\nexport type { HeatmapProps } from './shaders/heatmap.js';\nexport type { HeatmapUniforms, HeatmapParams } from '@paper-design/shaders';\n\nexport { LiquidMetal, liquidMetalPresets } from './shaders/liquid-metal.js';\nexport type { LiquidMetalProps } from './shaders/liquid-metal.js';\nexport type { LiquidMetalUniforms, LiquidMetalParams } from '@paper-design/shaders';\n\nexport { ImageHalftoneDots, imageHalftoneDotsPresets } from './shaders/image-halftone-dots.js';\nexport type { ImageHalftoneDotsProps } from './shaders/image-halftone-dots.js';\nexport type { ImageHalftoneDotsUniforms, ImageHalftoneDotsParams } from '@paper-design/shaders';\n\nexport { isPaperShaderElement, getShaderColorFromString } from '@paper-design/shaders';\nexport type { PaperShaderElement, ShaderFit, ShaderSizingParams, ShaderSizingUniforms } from '@paper-design/shaders';\n\nexport {\n colorPanelsMeta,\n dotOrbitMeta,\n godRaysMeta,\n grainGradientMeta,\n meshGradientMeta,\n metaballsMeta,\n pulsingBorderMeta,\n simplexNoiseMeta,\n smokeRingMeta,\n swirlMeta,\n voronoiMeta,\n warpMeta,\n heatmapMeta,\n staticMeshGradientMeta,\n staticRadialGradientMeta,\n} from '@paper-design/shaders';\n"],
|
|
5
|
+
"mappings": ";;;;;;AAEA,SAAS,mBAAmB;AAG5B,SAAS,cAAc,2BAA2B;AAIlD,SAAS,WAAW,wBAAwB;AAI5C,SAAS,YAAY,yBAAyB;AAI9C,SAAS,UAAU,uBAAuB;AAI1C,SAAS,SAAS,sBAAsB;AAIxC,SAAS,cAAc,2BAA2B;AAIlD,SAAS,WAAW,wBAAwB;AAI5C,SAAS,OAAO,oBAAoB;AAIpC,SAAS,aAAa,0BAA0B;AAIhD,SAAS,SAAS,sBAAsB;AAIxC,SAAS,MAAM,mBAAmB;AAIlC,SAAS,SAAS,sBAAsB;AAIxC,SAAS,QAAQ,qBAAqB;AAItC,SAAS,OAAO,oBAAoB;AAIpC,SAAS,WAAW,wBAAwB;AAI5C,SAAS,eAAe,4BAA4B;AAIpD,SAAS,eAAe,4BAA4B;AAIpD,SAAS,aAAa,0BAA0B;AAIhD,SAAS,oBAAoB,iCAAiC;AAI9D,SAAS,sBAAsB,mCAAmC;AAIlE,SAAS,cAAc,2BAA2B;AAIlD,SAAS,aAAa,0BAA0B;AAChD,eAAsC;AACtC,eAAiE;AAEjE,SAAS,OAAO,oBAAoB;AAIpC,SAAS,gBAAgB,6BAA6B;AAItD,SAAS,SAAS,sBAAsB;AAIxC,SAAS,aAAa,0BAA0B;AAIhD,SAAS,mBAAmB,gCAAgC;AAI5D,SAAS,sBAAsB,gCAAgC;AAG/D;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { type PaperShaderElement, type ShaderMotionParams } from '@paper-design/shaders';
|
|
2
|
+
/**
|
|
3
|
+
* React Shader Mount can also accept strings as uniform values, which will assumed to be URLs and loaded as images
|
|
4
|
+
*
|
|
5
|
+
* We accept undefined as a convenience for server rendering, when some things may be undefined
|
|
6
|
+
* We just skip setting the uniform if it's undefined. This allows the shader mount to still take up space during server rendering
|
|
7
|
+
*/
|
|
8
|
+
interface ShaderMountUniformsReact {
|
|
9
|
+
[key: string]: string | boolean | number | number[] | number[][] | HTMLImageElement | undefined;
|
|
10
|
+
}
|
|
11
|
+
export interface ShaderMountProps extends Omit<React.ComponentProps<'div'>, 'color' | 'ref'>, ShaderMotionParams {
|
|
12
|
+
ref?: React.Ref<PaperShaderElement>;
|
|
13
|
+
fragmentShader: string;
|
|
14
|
+
uniforms: ShaderMountUniformsReact;
|
|
15
|
+
minPixelRatio?: number;
|
|
16
|
+
maxPixelCount?: number;
|
|
17
|
+
webGlContextAttributes?: WebGLContextAttributes;
|
|
18
|
+
/** Inline CSS width style */
|
|
19
|
+
width?: string | number;
|
|
20
|
+
/** Inline CSS height style */
|
|
21
|
+
height?: string | number;
|
|
22
|
+
}
|
|
23
|
+
export interface ShaderComponentProps extends Omit<React.ComponentProps<'div'>, 'color' | 'ref'> {
|
|
24
|
+
ref?: React.Ref<PaperShaderElement>;
|
|
25
|
+
minPixelRatio?: number;
|
|
26
|
+
maxPixelCount?: number;
|
|
27
|
+
webGlContextAttributes?: WebGLContextAttributes;
|
|
28
|
+
/** Inline CSS width style */
|
|
29
|
+
width?: string | number;
|
|
30
|
+
/** Inline CSS height style */
|
|
31
|
+
height?: string | number;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* A React component that mounts a shader and updates its uniforms as the component's props change
|
|
35
|
+
* If you pass a string as a uniform value, it will be assumed to be a URL and attempted to be loaded as an image
|
|
36
|
+
*/
|
|
37
|
+
export declare const ShaderMount: React.FC<ShaderMountProps>;
|
|
38
|
+
export {};
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
/* * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
|
2
|
+
* Paper Shaders *
|
|
3
|
+
* https://github.com/paper-design/shaders *
|
|
4
|
+
* * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
|
5
|
+
|
|
6
|
+
"use client";
|
|
7
|
+
import { useEffect, useRef, forwardRef, useState } from "react";
|
|
8
|
+
import {
|
|
9
|
+
ShaderMount as ShaderMountVanilla,
|
|
10
|
+
getEmptyPixel
|
|
11
|
+
} from "@paper-design/shaders";
|
|
12
|
+
import { useMergeRefs } from "./use-merge-refs.js";
|
|
13
|
+
import { jsx } from "react/jsx-runtime";
|
|
14
|
+
async function processUniforms(uniformsProp) {
|
|
15
|
+
const processedUniforms = {};
|
|
16
|
+
const imageLoadPromises = [];
|
|
17
|
+
const isValidUrl = (url) => {
|
|
18
|
+
try {
|
|
19
|
+
if (url.startsWith("/")) return true;
|
|
20
|
+
new URL(url);
|
|
21
|
+
return true;
|
|
22
|
+
} catch {
|
|
23
|
+
return false;
|
|
24
|
+
}
|
|
25
|
+
};
|
|
26
|
+
const isExternalUrl = (url) => {
|
|
27
|
+
try {
|
|
28
|
+
if (url.startsWith("/")) return false;
|
|
29
|
+
const urlObject = new URL(url, window.location.origin);
|
|
30
|
+
return urlObject.origin !== window.location.origin;
|
|
31
|
+
} catch {
|
|
32
|
+
return false;
|
|
33
|
+
}
|
|
34
|
+
};
|
|
35
|
+
Object.entries(uniformsProp).forEach(([key, value]) => {
|
|
36
|
+
if (typeof value === "string") {
|
|
37
|
+
if (!value) {
|
|
38
|
+
processedUniforms[key] = getEmptyPixel();
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
if (!isValidUrl(value)) {
|
|
42
|
+
console.warn(`Uniform "${key}" has invalid URL "${value}". Skipping image loading.`);
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
const imagePromise = new Promise((resolve, reject) => {
|
|
46
|
+
const img = new Image();
|
|
47
|
+
if (isExternalUrl(value)) {
|
|
48
|
+
img.crossOrigin = "anonymous";
|
|
49
|
+
}
|
|
50
|
+
img.onload = () => {
|
|
51
|
+
processedUniforms[key] = img;
|
|
52
|
+
resolve();
|
|
53
|
+
};
|
|
54
|
+
img.onerror = () => {
|
|
55
|
+
console.error(`Could not set uniforms. Failed to load image at ${value}`);
|
|
56
|
+
reject();
|
|
57
|
+
};
|
|
58
|
+
img.src = value;
|
|
59
|
+
});
|
|
60
|
+
imageLoadPromises.push(imagePromise);
|
|
61
|
+
} else {
|
|
62
|
+
processedUniforms[key] = value;
|
|
63
|
+
}
|
|
64
|
+
});
|
|
65
|
+
await Promise.all(imageLoadPromises);
|
|
66
|
+
return processedUniforms;
|
|
67
|
+
}
|
|
68
|
+
const ShaderMount = forwardRef(
|
|
69
|
+
function ShaderMountImpl({
|
|
70
|
+
fragmentShader,
|
|
71
|
+
uniforms: uniformsProp,
|
|
72
|
+
webGlContextAttributes,
|
|
73
|
+
speed = 0,
|
|
74
|
+
frame = 0,
|
|
75
|
+
width,
|
|
76
|
+
height,
|
|
77
|
+
minPixelRatio,
|
|
78
|
+
maxPixelCount,
|
|
79
|
+
style,
|
|
80
|
+
...divProps
|
|
81
|
+
}, forwardedRef) {
|
|
82
|
+
const [isInitialized, setIsInitialized] = useState(false);
|
|
83
|
+
const divRef = useRef(null);
|
|
84
|
+
const shaderMountRef = useRef(null);
|
|
85
|
+
const webGlContextAttributesRef = useRef(webGlContextAttributes);
|
|
86
|
+
useEffect(() => {
|
|
87
|
+
const initShader = async () => {
|
|
88
|
+
const uniforms = await processUniforms(uniformsProp);
|
|
89
|
+
if (divRef.current && !shaderMountRef.current) {
|
|
90
|
+
shaderMountRef.current = new ShaderMountVanilla(
|
|
91
|
+
divRef.current,
|
|
92
|
+
fragmentShader,
|
|
93
|
+
uniforms,
|
|
94
|
+
webGlContextAttributesRef.current,
|
|
95
|
+
speed,
|
|
96
|
+
frame,
|
|
97
|
+
minPixelRatio,
|
|
98
|
+
maxPixelCount
|
|
99
|
+
);
|
|
100
|
+
setIsInitialized(true);
|
|
101
|
+
}
|
|
102
|
+
};
|
|
103
|
+
initShader();
|
|
104
|
+
return () => {
|
|
105
|
+
shaderMountRef.current?.dispose();
|
|
106
|
+
shaderMountRef.current = null;
|
|
107
|
+
};
|
|
108
|
+
}, [fragmentShader]);
|
|
109
|
+
useEffect(() => {
|
|
110
|
+
let isStale = false;
|
|
111
|
+
const updateUniforms = async () => {
|
|
112
|
+
const uniforms = await processUniforms(uniformsProp);
|
|
113
|
+
if (!isStale) {
|
|
114
|
+
shaderMountRef.current?.setUniforms(uniforms);
|
|
115
|
+
}
|
|
116
|
+
};
|
|
117
|
+
updateUniforms();
|
|
118
|
+
return () => {
|
|
119
|
+
isStale = true;
|
|
120
|
+
};
|
|
121
|
+
}, [uniformsProp, isInitialized]);
|
|
122
|
+
useEffect(() => {
|
|
123
|
+
shaderMountRef.current?.setSpeed(speed);
|
|
124
|
+
}, [speed, isInitialized]);
|
|
125
|
+
useEffect(() => {
|
|
126
|
+
shaderMountRef.current?.setMaxPixelCount(maxPixelCount);
|
|
127
|
+
}, [maxPixelCount, isInitialized]);
|
|
128
|
+
useEffect(() => {
|
|
129
|
+
shaderMountRef.current?.setMinPixelRatio(minPixelRatio);
|
|
130
|
+
}, [minPixelRatio, isInitialized]);
|
|
131
|
+
useEffect(() => {
|
|
132
|
+
shaderMountRef.current?.setFrame(frame);
|
|
133
|
+
}, [frame, isInitialized]);
|
|
134
|
+
const mergedRef = useMergeRefs([divRef, forwardedRef]);
|
|
135
|
+
return /* @__PURE__ */ jsx(
|
|
136
|
+
"div",
|
|
137
|
+
{
|
|
138
|
+
ref: mergedRef,
|
|
139
|
+
style: width !== void 0 || height !== void 0 ? { width, height, ...style } : style,
|
|
140
|
+
...divProps
|
|
141
|
+
}
|
|
142
|
+
);
|
|
143
|
+
}
|
|
144
|
+
);
|
|
145
|
+
ShaderMount.displayName = "ShaderMount";
|
|
146
|
+
export {
|
|
147
|
+
ShaderMount
|
|
148
|
+
};
|
|
149
|
+
//# sourceMappingURL=shader-mount.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/shader-mount.tsx"],
|
|
4
|
+
"sourcesContent": ["'use client';\n\nimport { useEffect, useRef, forwardRef, useState } from 'react';\nimport {\n ShaderMount as ShaderMountVanilla,\n getEmptyPixel,\n type PaperShaderElement,\n type ShaderMotionParams,\n type ShaderMountUniforms,\n} from '@paper-design/shaders';\nimport { useMergeRefs } from './use-merge-refs.js';\n\n/**\n * React Shader Mount can also accept strings as uniform values, which will assumed to be URLs and loaded as images\n *\n * We accept undefined as a convenience for server rendering, when some things may be undefined\n * We just skip setting the uniform if it's undefined. This allows the shader mount to still take up space during server rendering\n */\ninterface ShaderMountUniformsReact {\n [key: string]: string | boolean | number | number[] | number[][] | HTMLImageElement | undefined;\n}\n\nexport interface ShaderMountProps extends Omit<React.ComponentProps<'div'>, 'color' | 'ref'>, ShaderMotionParams {\n ref?: React.Ref<PaperShaderElement>;\n fragmentShader: string;\n uniforms: ShaderMountUniformsReact;\n minPixelRatio?: number;\n maxPixelCount?: number;\n webGlContextAttributes?: WebGLContextAttributes;\n\n /** Inline CSS width style */\n width?: string | number;\n /** Inline CSS height style */\n height?: string | number;\n}\n\nexport interface ShaderComponentProps extends Omit<React.ComponentProps<'div'>, 'color' | 'ref'> {\n ref?: React.Ref<PaperShaderElement>;\n minPixelRatio?: number;\n maxPixelCount?: number;\n webGlContextAttributes?: WebGLContextAttributes;\n\n /** Inline CSS width style */\n width?: string | number;\n /** Inline CSS height style */\n height?: string | number;\n}\n\n/** Parse the provided uniforms, turning URL strings into loaded images */\nasync function processUniforms(uniformsProp: ShaderMountUniformsReact): Promise<ShaderMountUniforms> {\n const processedUniforms = {} as ShaderMountUniforms;\n const imageLoadPromises: Promise<void>[] = [];\n\n const isValidUrl = (url: string): boolean => {\n try {\n // Handle absolute paths\n if (url.startsWith('/')) return true;\n // Check if it's a valid URL\n new URL(url);\n return true;\n } catch {\n return false;\n }\n };\n\n const isExternalUrl = (url: string): boolean => {\n try {\n if (url.startsWith('/')) return false;\n const urlObject = new URL(url, window.location.origin);\n return urlObject.origin !== window.location.origin;\n } catch {\n return false;\n }\n };\n\n Object.entries(uniformsProp).forEach(([key, value]) => {\n if (typeof value === 'string') {\n // Use a transparent pixel for empty strings\n if (!value) {\n processedUniforms[key] = getEmptyPixel();\n return;\n }\n\n // Make sure the provided string is a valid URL or just skip trying to set this uniform entirely\n if (!isValidUrl(value)) {\n console.warn(`Uniform \"${key}\" has invalid URL \"${value}\". Skipping image loading.`);\n return;\n }\n\n const imagePromise = new Promise<void>((resolve, reject) => {\n const img = new Image();\n if (isExternalUrl(value)) {\n img.crossOrigin = 'anonymous';\n }\n img.onload = () => {\n processedUniforms[key] = img;\n resolve();\n };\n img.onerror = () => {\n console.error(`Could not set uniforms. Failed to load image at ${value}`);\n reject();\n };\n img.src = value;\n });\n imageLoadPromises.push(imagePromise);\n } else {\n processedUniforms[key] = value;\n }\n });\n\n await Promise.all(imageLoadPromises);\n return processedUniforms;\n}\n\n/**\n * A React component that mounts a shader and updates its uniforms as the component's props change\n * If you pass a string as a uniform value, it will be assumed to be a URL and attempted to be loaded as an image\n */\nexport const ShaderMount: React.FC<ShaderMountProps> = forwardRef<PaperShaderElement, ShaderMountProps>(\n function ShaderMountImpl(\n {\n fragmentShader,\n uniforms: uniformsProp,\n webGlContextAttributes,\n speed = 0,\n frame = 0,\n width,\n height,\n minPixelRatio,\n maxPixelCount,\n style,\n ...divProps\n },\n forwardedRef\n ) {\n const [isInitialized, setIsInitialized] = useState(false);\n const divRef = useRef<PaperShaderElement>(null);\n const shaderMountRef: React.RefObject<ShaderMountVanilla | null> = useRef<ShaderMountVanilla>(null);\n const webGlContextAttributesRef = useRef(webGlContextAttributes);\n\n // Initialize the ShaderMountVanilla\n useEffect(() => {\n const initShader = async () => {\n const uniforms = await processUniforms(uniformsProp);\n\n if (divRef.current && !shaderMountRef.current) {\n shaderMountRef.current = new ShaderMountVanilla(\n divRef.current,\n fragmentShader,\n uniforms,\n webGlContextAttributesRef.current,\n speed,\n frame,\n minPixelRatio,\n maxPixelCount\n );\n\n setIsInitialized(true);\n }\n };\n\n initShader();\n\n return () => {\n shaderMountRef.current?.dispose();\n shaderMountRef.current = null;\n };\n }, [fragmentShader]);\n\n // Uniforms\n useEffect(() => {\n let isStale = false;\n\n const updateUniforms = async () => {\n const uniforms = await processUniforms(uniformsProp);\n\n if (!isStale) {\n // We only use the freshest uniforms otherwise we can get into race conditions\n // if some uniforms (images!) take longer to load in subsequent effect runs.\n shaderMountRef.current?.setUniforms(uniforms);\n }\n };\n\n updateUniforms();\n\n return () => {\n isStale = true;\n };\n }, [uniformsProp, isInitialized]);\n\n // Speed\n useEffect(() => {\n shaderMountRef.current?.setSpeed(speed);\n }, [speed, isInitialized]);\n\n // Max Pixel Count\n useEffect(() => {\n shaderMountRef.current?.setMaxPixelCount(maxPixelCount);\n }, [maxPixelCount, isInitialized]);\n\n // Min Pixel Ratio\n useEffect(() => {\n shaderMountRef.current?.setMinPixelRatio(minPixelRatio);\n }, [minPixelRatio, isInitialized]);\n\n // Frame\n useEffect(() => {\n shaderMountRef.current?.setFrame(frame);\n }, [frame, isInitialized]);\n\n const mergedRef = useMergeRefs([divRef, forwardedRef]) as unknown as React.RefObject<HTMLDivElement>;\n return (\n <div\n ref={mergedRef}\n style={width !== undefined || height !== undefined ? { width, height, ...style } : style}\n {...divProps}\n />\n );\n }\n);\n\nShaderMount.displayName = 'ShaderMount';\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 ColorPanelsParams, type ShaderPreset } from '@paper-design/shaders';
|
|
3
|
+
export interface ColorPanelsProps extends ShaderComponentProps, ColorPanelsParams {
|
|
4
|
+
}
|
|
5
|
+
type ColorPanelsPreset = ShaderPreset<ColorPanelsParams>;
|
|
6
|
+
export declare const defaultPreset: ColorPanelsPreset;
|
|
7
|
+
export declare const glassPreset: ColorPanelsPreset;
|
|
8
|
+
export declare const gradientPreset: ColorPanelsPreset;
|
|
9
|
+
export declare const openingPreset: ColorPanelsPreset;
|
|
10
|
+
export declare const colorPanelsPresets: ColorPanelsPreset[];
|
|
11
|
+
export declare const ColorPanels: React.FC<ColorPanelsProps>;
|
|
12
|
+
export {};
|