@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,194 @@
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
+ defaultPatternSizing,
11
+ getShaderColorFromString,
12
+ getShaderNoiseTexture,
13
+ warpFragmentShader,
14
+ ShaderFitOptions,
15
+ WarpPatterns
16
+ } from "@paper-design/shaders";
17
+ import { jsx } from "react/jsx-runtime";
18
+ const defaultPreset = {
19
+ name: "Default",
20
+ params: {
21
+ ...defaultPatternSizing,
22
+ rotation: 0,
23
+ speed: 1,
24
+ frame: 0,
25
+ colors: ["#121212", "#9470ff", "#121212", "#8838ff"],
26
+ proportion: 0.45,
27
+ softness: 1,
28
+ distortion: 0.25,
29
+ swirl: 0.8,
30
+ swirlIterations: 10,
31
+ shapeScale: 0.1,
32
+ shape: "checks"
33
+ }
34
+ };
35
+ const presetCauldron = {
36
+ name: "Cauldron Pot",
37
+ params: {
38
+ ...defaultPatternSizing,
39
+ scale: 0.9,
40
+ rotation: 160,
41
+ speed: 10,
42
+ frame: 0,
43
+ colors: ["#a7e58b", "#324472", "#0a180d"],
44
+ proportion: 0.64,
45
+ softness: 1.5,
46
+ distortion: 0.2,
47
+ swirl: 0.86,
48
+ swirlIterations: 7,
49
+ shapeScale: 0.6,
50
+ shape: "edge"
51
+ }
52
+ };
53
+ const presetInk = {
54
+ name: "Live Ink",
55
+ params: {
56
+ ...defaultPatternSizing,
57
+ scale: 1.2,
58
+ rotation: 44,
59
+ offsetY: -0.3,
60
+ speed: 2.5,
61
+ frame: 0,
62
+ colors: ["#111314", "#9faeab", "#f3fee7", "#f3fee7"],
63
+ proportion: 0.05,
64
+ softness: 0,
65
+ distortion: 0.25,
66
+ swirl: 0.8,
67
+ swirlIterations: 10,
68
+ shapeScale: 0.28,
69
+ shape: "checks"
70
+ }
71
+ };
72
+ const presetKelp = {
73
+ name: "Kelp",
74
+ params: {
75
+ ...defaultPatternSizing,
76
+ scale: 0.8,
77
+ rotation: 50,
78
+ speed: 20,
79
+ frame: 0,
80
+ colors: ["#dbff8f", "#404f3e", "#091316"],
81
+ proportion: 0.67,
82
+ softness: 0,
83
+ distortion: 0,
84
+ swirl: 0.2,
85
+ swirlIterations: 3,
86
+ shapeScale: 1,
87
+ shape: "stripes"
88
+ }
89
+ };
90
+ const presetNectar = {
91
+ name: "Nectar",
92
+ params: {
93
+ ...defaultPatternSizing,
94
+ scale: 2,
95
+ offsetY: 0.6,
96
+ rotation: 0,
97
+ speed: 4.2,
98
+ frame: 0,
99
+ colors: ["#151310", "#d3a86b", "#f0edea"],
100
+ proportion: 0.24,
101
+ softness: 1,
102
+ distortion: 0.21,
103
+ swirl: 0.57,
104
+ swirlIterations: 10,
105
+ shapeScale: 0.75,
106
+ shape: "edge"
107
+ }
108
+ };
109
+ const presetPassion = {
110
+ name: "Passion",
111
+ params: {
112
+ ...defaultPatternSizing,
113
+ scale: 2.5,
114
+ rotation: 1.35,
115
+ speed: 3,
116
+ frame: 0,
117
+ colors: ["#3b1515", "#954751", "#ffc085"],
118
+ proportion: 0.5,
119
+ softness: 1,
120
+ distortion: 0.09,
121
+ swirl: 0.9,
122
+ swirlIterations: 6,
123
+ shapeScale: 0.25,
124
+ shape: "checks"
125
+ }
126
+ };
127
+ const warpPresets = [
128
+ defaultPreset,
129
+ presetCauldron,
130
+ presetInk,
131
+ presetKelp,
132
+ presetNectar,
133
+ presetPassion
134
+ ];
135
+ const Warp = memo(function WarpImpl({
136
+ // Own props
137
+ speed = defaultPreset.params.speed,
138
+ frame = defaultPreset.params.frame,
139
+ colors = defaultPreset.params.colors,
140
+ proportion = defaultPreset.params.proportion,
141
+ softness = defaultPreset.params.softness,
142
+ distortion = defaultPreset.params.distortion,
143
+ swirl = defaultPreset.params.swirl,
144
+ swirlIterations = defaultPreset.params.swirlIterations,
145
+ shapeScale = defaultPreset.params.shapeScale,
146
+ shape = defaultPreset.params.shape,
147
+ // Sizing props
148
+ fit = defaultPreset.params.fit,
149
+ scale = defaultPreset.params.scale,
150
+ rotation = defaultPreset.params.rotation,
151
+ originX = defaultPreset.params.originX,
152
+ originY = defaultPreset.params.originY,
153
+ offsetX = defaultPreset.params.offsetX,
154
+ offsetY = defaultPreset.params.offsetY,
155
+ worldWidth = defaultPreset.params.worldWidth,
156
+ worldHeight = defaultPreset.params.worldHeight,
157
+ ...props
158
+ }) {
159
+ const uniforms = {
160
+ // Own uniforms
161
+ u_colors: colors.map(getShaderColorFromString),
162
+ u_colorsCount: colors.length,
163
+ u_proportion: proportion,
164
+ u_softness: softness,
165
+ u_distortion: distortion,
166
+ u_swirl: swirl,
167
+ u_swirlIterations: swirlIterations,
168
+ u_shapeScale: shapeScale,
169
+ u_shape: WarpPatterns[shape],
170
+ u_noiseTexture: getShaderNoiseTexture(),
171
+ // Sizing uniforms
172
+ u_scale: scale,
173
+ u_rotation: rotation,
174
+ u_fit: ShaderFitOptions[fit],
175
+ u_offsetX: offsetX,
176
+ u_offsetY: offsetY,
177
+ u_originX: originX,
178
+ u_originY: originY,
179
+ u_worldWidth: worldWidth,
180
+ u_worldHeight: worldHeight
181
+ };
182
+ return /* @__PURE__ */ jsx(ShaderMount, { ...props, speed, frame, fragmentShader: warpFragmentShader, uniforms });
183
+ }, colorPropsAreEqual);
184
+ export {
185
+ Warp,
186
+ defaultPreset,
187
+ presetCauldron,
188
+ presetInk,
189
+ presetKelp,
190
+ presetNectar,
191
+ presetPassion,
192
+ warpPresets
193
+ };
194
+ //# sourceMappingURL=warp.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/shaders/warp.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 defaultPatternSizing,\n getShaderColorFromString,\n getShaderNoiseTexture,\n warpFragmentShader,\n ShaderFitOptions,\n type WarpParams,\n type WarpUniforms,\n type ShaderPreset,\n WarpPatterns,\n} from '@paper-design/shaders';\n\nexport interface WarpProps extends ShaderComponentProps, WarpParams {}\n\ntype WarpPreset = ShaderPreset<WarpParams>;\n\nexport const defaultPreset: WarpPreset = {\n name: 'Default',\n params: {\n ...defaultPatternSizing,\n rotation: 0,\n speed: 1,\n frame: 0,\n colors: ['#121212', '#9470ff', '#121212', '#8838ff'],\n proportion: 0.45,\n softness: 1,\n distortion: 0.25,\n swirl: 0.8,\n swirlIterations: 10,\n shapeScale: 0.1,\n shape: 'checks',\n },\n};\n\nexport const presetCauldron: WarpPreset = {\n name: 'Cauldron Pot',\n params: {\n ...defaultPatternSizing,\n scale: 0.9,\n rotation: 160,\n speed: 10,\n frame: 0,\n colors: ['#a7e58b', '#324472', '#0a180d'],\n proportion: 0.64,\n softness: 1.5,\n distortion: 0.2,\n swirl: 0.86,\n swirlIterations: 7,\n shapeScale: 0.6,\n shape: 'edge',\n },\n};\n\nexport const presetInk: WarpPreset = {\n name: 'Live Ink',\n params: {\n ...defaultPatternSizing,\n scale: 1.2,\n rotation: 44,\n offsetY: -0.3,\n speed: 2.5,\n frame: 0,\n colors: ['#111314', '#9faeab', '#f3fee7', '#f3fee7'],\n proportion: 0.05,\n softness: 0,\n distortion: 0.25,\n swirl: 0.8,\n swirlIterations: 10,\n shapeScale: 0.28,\n shape: 'checks',\n },\n};\n\nexport const presetKelp: WarpPreset = {\n name: 'Kelp',\n params: {\n ...defaultPatternSizing,\n scale: 0.8,\n rotation: 50,\n speed: 20,\n frame: 0,\n colors: ['#dbff8f', '#404f3e', '#091316'],\n proportion: 0.67,\n softness: 0,\n distortion: 0,\n swirl: 0.2,\n swirlIterations: 3,\n shapeScale: 1,\n shape: 'stripes',\n },\n};\n\nexport const presetNectar: WarpPreset = {\n name: 'Nectar',\n params: {\n ...defaultPatternSizing,\n scale: 2,\n offsetY: 0.6,\n rotation: 0,\n speed: 4.2,\n frame: 0,\n colors: ['#151310', '#d3a86b', '#f0edea'],\n proportion: 0.24,\n softness: 1,\n distortion: 0.21,\n swirl: 0.57,\n swirlIterations: 10,\n shapeScale: 0.75,\n shape: 'edge',\n },\n};\n\nexport const presetPassion: WarpPreset = {\n name: 'Passion',\n params: {\n ...defaultPatternSizing,\n scale: 2.5,\n rotation: 1.35,\n speed: 3,\n frame: 0,\n colors: ['#3b1515', '#954751', '#ffc085'],\n proportion: 0.5,\n softness: 1,\n distortion: 0.09,\n swirl: 0.9,\n swirlIterations: 6,\n shapeScale: 0.25,\n shape: 'checks',\n },\n};\n\nexport const warpPresets: WarpPreset[] = [\n defaultPreset,\n presetCauldron,\n presetInk,\n presetKelp,\n presetNectar,\n presetPassion,\n];\n\nexport const Warp: React.FC<WarpProps> = memo(function WarpImpl({\n // Own props\n speed = defaultPreset.params.speed,\n frame = defaultPreset.params.frame,\n colors = defaultPreset.params.colors,\n proportion = defaultPreset.params.proportion,\n softness = defaultPreset.params.softness,\n distortion = defaultPreset.params.distortion,\n swirl = defaultPreset.params.swirl,\n swirlIterations = defaultPreset.params.swirlIterations,\n shapeScale = defaultPreset.params.shapeScale,\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}: WarpProps) {\n const uniforms = {\n // Own uniforms\n u_colors: colors.map(getShaderColorFromString),\n u_colorsCount: colors.length,\n u_proportion: proportion,\n u_softness: softness,\n u_distortion: distortion,\n u_swirl: swirl,\n u_swirlIterations: swirlIterations,\n u_shapeScale: shapeScale,\n u_shape: WarpPatterns[shape],\n u_noiseTexture: getShaderNoiseTexture(),\n\n // Sizing uniforms\n u_scale: scale,\n u_rotation: rotation,\n u_fit: ShaderFitOptions[fit],\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 WarpUniforms;\n\n return <ShaderMount {...props} speed={speed} frame={frame} fragmentShader={warpFragmentShader} uniforms={uniforms} />;\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 WaterParams, type ImageShaderPreset } from '@paper-design/shaders';
3
+ export interface WaterProps extends ShaderComponentProps, WaterParams {
4
+ /** @deprecated use `size` instead */
5
+ effectScale?: number;
6
+ }
7
+ type WaterPreset = ImageShaderPreset<WaterParams>;
8
+ export declare const defaultPreset: WaterPreset;
9
+ export declare const abstractPreset: WaterPreset;
10
+ export declare const streamingPreset: WaterPreset;
11
+ export declare const slowMoPreset: WaterPreset;
12
+ export declare const waterPresets: WaterPreset[];
13
+ export declare const Water: React.FC<WaterProps>;
14
+ export {};
@@ -0,0 +1,148 @@
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
+ waterFragmentShader,
11
+ getShaderColorFromString,
12
+ ShaderFitOptions,
13
+ defaultObjectSizing
14
+ } from "@paper-design/shaders";
15
+ import { jsx } from "react/jsx-runtime";
16
+ const defaultPreset = {
17
+ name: "Default",
18
+ params: {
19
+ ...defaultObjectSizing,
20
+ scale: 0.8,
21
+ speed: 1,
22
+ frame: 0,
23
+ colorBack: "#909090",
24
+ colorHighlight: "#ffffff",
25
+ highlights: 0.07,
26
+ layering: 0.5,
27
+ edges: 0.8,
28
+ waves: 0.3,
29
+ caustic: 0.1,
30
+ size: 1
31
+ }
32
+ };
33
+ const abstractPreset = {
34
+ name: "Abstract",
35
+ params: {
36
+ ...defaultObjectSizing,
37
+ fit: "cover",
38
+ scale: 3,
39
+ speed: 1,
40
+ frame: 0,
41
+ colorBack: "#909090",
42
+ colorHighlight: "#ffffff",
43
+ highlights: 0,
44
+ layering: 0,
45
+ edges: 1,
46
+ waves: 1,
47
+ caustic: 0.4,
48
+ size: 4
49
+ }
50
+ };
51
+ const streamingPreset = {
52
+ name: "Streaming",
53
+ params: {
54
+ ...defaultObjectSizing,
55
+ fit: "contain",
56
+ scale: 0.4,
57
+ speed: 2,
58
+ frame: 0,
59
+ colorBack: "#909090",
60
+ colorHighlight: "#ffffff",
61
+ highlights: 0,
62
+ layering: 0,
63
+ edges: 0,
64
+ waves: 0.5,
65
+ caustic: 0,
66
+ size: 3
67
+ }
68
+ };
69
+ const slowMoPreset = {
70
+ name: "Slow-mo",
71
+ params: {
72
+ ...defaultObjectSizing,
73
+ fit: "cover",
74
+ scale: 1,
75
+ speed: 0.1,
76
+ frame: 0,
77
+ colorBack: "#909090",
78
+ colorHighlight: "#ffffff",
79
+ highlights: 0.4,
80
+ layering: 0,
81
+ edges: 0,
82
+ waves: 0,
83
+ caustic: 0.2,
84
+ size: 2
85
+ }
86
+ };
87
+ const waterPresets = [defaultPreset, slowMoPreset, abstractPreset, streamingPreset];
88
+ const Water = memo(function WaterImpl({
89
+ // Own props
90
+ speed = defaultPreset.params.speed,
91
+ frame = defaultPreset.params.frame,
92
+ colorBack = defaultPreset.params.colorBack,
93
+ colorHighlight = defaultPreset.params.colorHighlight,
94
+ image = "",
95
+ highlights = defaultPreset.params.highlights,
96
+ layering = defaultPreset.params.layering,
97
+ waves = defaultPreset.params.waves,
98
+ edges = defaultPreset.params.edges,
99
+ caustic = defaultPreset.params.caustic,
100
+ // `effectScale` was deprecated in favor of `size`
101
+ // (it was a reverse value by mistake, so we took the opportunity to rename the param too)
102
+ effectScale,
103
+ size = effectScale === void 0 ? defaultPreset.params.size : 10 / 9 / effectScale - 1 / 9,
104
+ // Sizing props
105
+ fit = defaultPreset.params.fit,
106
+ scale = defaultPreset.params.scale,
107
+ rotation = defaultPreset.params.rotation,
108
+ originX = defaultPreset.params.originX,
109
+ originY = defaultPreset.params.originY,
110
+ offsetX = defaultPreset.params.offsetX,
111
+ offsetY = defaultPreset.params.offsetY,
112
+ worldWidth = defaultPreset.params.worldWidth,
113
+ worldHeight = defaultPreset.params.worldHeight,
114
+ ...props
115
+ }) {
116
+ const uniforms = {
117
+ // Own uniforms
118
+ u_image: image,
119
+ u_colorBack: getShaderColorFromString(colorBack),
120
+ u_colorHighlight: getShaderColorFromString(colorHighlight),
121
+ u_highlights: highlights,
122
+ u_layering: layering,
123
+ u_waves: waves,
124
+ u_edges: edges,
125
+ u_caustic: caustic,
126
+ u_size: size,
127
+ // Sizing uniforms
128
+ u_fit: ShaderFitOptions[fit],
129
+ u_rotation: rotation,
130
+ u_scale: scale,
131
+ u_offsetX: offsetX,
132
+ u_offsetY: offsetY,
133
+ u_originX: originX,
134
+ u_originY: originY,
135
+ u_worldWidth: worldWidth,
136
+ u_worldHeight: worldHeight
137
+ };
138
+ return /* @__PURE__ */ jsx(ShaderMount, { ...props, speed, frame, fragmentShader: waterFragmentShader, uniforms });
139
+ }, colorPropsAreEqual);
140
+ export {
141
+ Water,
142
+ abstractPreset,
143
+ defaultPreset,
144
+ slowMoPreset,
145
+ streamingPreset,
146
+ waterPresets
147
+ };
148
+ //# sourceMappingURL=water.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/shaders/water.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 waterFragmentShader,\n getShaderColorFromString,\n ShaderFitOptions,\n type WaterUniforms,\n type WaterParams,\n defaultObjectSizing,\n type ImageShaderPreset,\n} from '@paper-design/shaders';\n\nexport interface WaterProps extends ShaderComponentProps, WaterParams {\n /** @deprecated use `size` instead */\n effectScale?: number;\n}\n\ntype WaterPreset = ImageShaderPreset<WaterParams>;\n\nexport const defaultPreset: WaterPreset = {\n name: 'Default',\n params: {\n ...defaultObjectSizing,\n scale: 0.8,\n speed: 1,\n frame: 0,\n colorBack: '#909090',\n colorHighlight: '#ffffff',\n highlights: 0.07,\n layering: 0.5,\n edges: 0.8,\n waves: 0.3,\n caustic: 0.1,\n size: 1,\n },\n};\n\nexport const abstractPreset: WaterPreset = {\n name: 'Abstract',\n params: {\n ...defaultObjectSizing,\n fit: 'cover',\n scale: 3,\n speed: 1,\n frame: 0,\n colorBack: '#909090',\n colorHighlight: '#ffffff',\n highlights: 0,\n layering: 0,\n edges: 1,\n waves: 1,\n caustic: 0.4,\n size: 4,\n },\n};\n\nexport const streamingPreset: WaterPreset = {\n name: 'Streaming',\n params: {\n ...defaultObjectSizing,\n fit: 'contain',\n scale: 0.4,\n speed: 2,\n frame: 0,\n colorBack: '#909090',\n colorHighlight: '#ffffff',\n highlights: 0,\n layering: 0,\n edges: 0,\n waves: 0.5,\n caustic: 0,\n size: 3,\n },\n};\n\nexport const slowMoPreset: WaterPreset = {\n name: 'Slow-mo',\n params: {\n ...defaultObjectSizing,\n fit: 'cover',\n scale: 1,\n speed: 0.1,\n frame: 0,\n colorBack: '#909090',\n colorHighlight: '#ffffff',\n highlights: 0.4,\n layering: 0,\n edges: 0,\n waves: 0,\n caustic: 0.2,\n size: 2,\n },\n};\n\nexport const waterPresets: WaterPreset[] = [defaultPreset, slowMoPreset, abstractPreset, streamingPreset];\n\nexport const Water: React.FC<WaterProps> = memo(function WaterImpl({\n // Own props\n speed = defaultPreset.params.speed,\n frame = defaultPreset.params.frame,\n colorBack = defaultPreset.params.colorBack,\n colorHighlight = defaultPreset.params.colorHighlight,\n image = '',\n highlights = defaultPreset.params.highlights,\n layering = defaultPreset.params.layering,\n waves = defaultPreset.params.waves,\n edges = defaultPreset.params.edges,\n caustic = defaultPreset.params.caustic,\n\n // `effectScale` was deprecated in favor of `size`\n // (it was a reverse value by mistake, so we took the opportunity to rename the param too)\n effectScale,\n size = effectScale === undefined ? defaultPreset.params.size : 10 / 9 / effectScale - 1 / 9,\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}: WaterProps) {\n const uniforms = {\n // Own uniforms\n u_image: image,\n u_colorBack: getShaderColorFromString(colorBack),\n u_colorHighlight: getShaderColorFromString(colorHighlight),\n u_highlights: highlights,\n u_layering: layering,\n u_waves: waves,\n u_edges: edges,\n u_caustic: caustic,\n u_size: size,\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 WaterUniforms;\n\n return (\n <ShaderMount {...props} speed={speed} frame={frame} fragmentShader={waterFragmentShader} uniforms={uniforms} />\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 WavesParams, type ShaderPreset } from '@paper-design/shaders';
3
+ export interface WavesProps extends ShaderComponentProps, WavesParams {
4
+ }
5
+ type WavesPreset = ShaderPreset<WavesParams>;
6
+ export declare const defaultPreset: WavesPreset;
7
+ export declare const groovyPreset: WavesPreset;
8
+ export declare const tangledUpPreset: WavesPreset;
9
+ export declare const waveRidePreset: WavesPreset;
10
+ export declare const wavesPresets: WavesPreset[];
11
+ export declare const Waves: React.FC<WavesProps>;
12
+ export {};
@@ -0,0 +1,136 @@
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
+ defaultPatternSizing,
11
+ getShaderColorFromString,
12
+ wavesFragmentShader,
13
+ ShaderFitOptions
14
+ } from "@paper-design/shaders";
15
+ import { jsx } from "react/jsx-runtime";
16
+ const defaultPreset = {
17
+ name: "Default",
18
+ params: {
19
+ ...defaultPatternSizing,
20
+ scale: 0.6,
21
+ colorFront: "#ffbb00",
22
+ colorBack: "#000000",
23
+ shape: 0,
24
+ frequency: 0.5,
25
+ amplitude: 0.5,
26
+ spacing: 1.2,
27
+ proportion: 0.1,
28
+ softness: 0
29
+ }
30
+ };
31
+ const groovyPreset = {
32
+ name: "Groovy",
33
+ params: {
34
+ ...defaultPatternSizing,
35
+ scale: 5,
36
+ rotation: 90,
37
+ colorFront: "#fcfcee",
38
+ colorBack: "#ff896b",
39
+ shape: 3,
40
+ frequency: 0.2,
41
+ amplitude: 0.25,
42
+ spacing: 1.17,
43
+ proportion: 0.57,
44
+ softness: 0
45
+ }
46
+ };
47
+ const tangledUpPreset = {
48
+ name: "Tangled up",
49
+ params: {
50
+ ...defaultPatternSizing,
51
+ scale: 0.5,
52
+ rotation: 0,
53
+ colorFront: "#133a41",
54
+ colorBack: "#c2d8b6",
55
+ shape: 2.07,
56
+ frequency: 0.44,
57
+ amplitude: 0.57,
58
+ spacing: 1.05,
59
+ proportion: 0.75,
60
+ softness: 0
61
+ }
62
+ };
63
+ const waveRidePreset = {
64
+ name: "Ride the wave",
65
+ params: {
66
+ ...defaultPatternSizing,
67
+ scale: 1.7,
68
+ rotation: 0,
69
+ colorFront: "#fdffe6",
70
+ colorBack: "#1f1f1f",
71
+ shape: 2.25,
72
+ frequency: 0.2,
73
+ amplitude: 1,
74
+ spacing: 1.25,
75
+ proportion: 1,
76
+ softness: 0
77
+ }
78
+ };
79
+ const wavesPresets = [defaultPreset, groovyPreset, tangledUpPreset, waveRidePreset];
80
+ const Waves = memo(function WavesImpl({
81
+ // Own props
82
+ colorFront = defaultPreset.params.colorFront,
83
+ colorBack = defaultPreset.params.colorBack,
84
+ shape = defaultPreset.params.shape,
85
+ frequency = defaultPreset.params.frequency,
86
+ amplitude = defaultPreset.params.amplitude,
87
+ spacing = defaultPreset.params.spacing,
88
+ proportion = defaultPreset.params.proportion,
89
+ softness = defaultPreset.params.softness,
90
+ // Sizing props
91
+ fit = defaultPreset.params.fit,
92
+ scale = defaultPreset.params.scale,
93
+ rotation = defaultPreset.params.rotation,
94
+ offsetX = defaultPreset.params.offsetX,
95
+ offsetY = defaultPreset.params.offsetY,
96
+ originX = defaultPreset.params.originX,
97
+ originY = defaultPreset.params.originY,
98
+ worldWidth = defaultPreset.params.worldWidth,
99
+ worldHeight = defaultPreset.params.worldHeight,
100
+ // Other props
101
+ maxPixelCount = 6016 * 3384,
102
+ // Higher max resolution for this shader
103
+ ...props
104
+ }) {
105
+ const uniforms = {
106
+ // Own uniforms
107
+ u_colorFront: getShaderColorFromString(colorFront),
108
+ u_colorBack: getShaderColorFromString(colorBack),
109
+ u_shape: shape,
110
+ u_frequency: frequency,
111
+ u_amplitude: amplitude,
112
+ u_spacing: spacing,
113
+ u_proportion: proportion,
114
+ u_softness: softness,
115
+ // Sizing uniforms
116
+ u_fit: ShaderFitOptions[fit],
117
+ u_scale: scale,
118
+ u_rotation: rotation,
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(ShaderMount, { ...props, fragmentShader: wavesFragmentShader, uniforms });
127
+ }, colorPropsAreEqual);
128
+ export {
129
+ Waves,
130
+ defaultPreset,
131
+ groovyPreset,
132
+ tangledUpPreset,
133
+ waveRidePreset,
134
+ wavesPresets
135
+ };
136
+ //# sourceMappingURL=waves.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/shaders/waves.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 defaultPatternSizing,\n getShaderColorFromString,\n wavesFragmentShader,\n ShaderFitOptions,\n type WavesParams,\n type WavesUniforms,\n type ShaderPreset,\n} from '@paper-design/shaders';\n\nexport interface WavesProps extends ShaderComponentProps, WavesParams {}\n\ntype WavesPreset = ShaderPreset<WavesParams>;\n\nexport const defaultPreset: WavesPreset = {\n name: 'Default',\n params: {\n ...defaultPatternSizing,\n scale: 0.6,\n colorFront: '#ffbb00',\n colorBack: '#000000',\n shape: 0,\n frequency: 0.5,\n amplitude: 0.5,\n spacing: 1.2,\n proportion: 0.1,\n softness: 0,\n },\n};\n\nexport const groovyPreset: WavesPreset = {\n name: 'Groovy',\n params: {\n ...defaultPatternSizing,\n scale: 5,\n rotation: 90,\n colorFront: '#fcfcee',\n colorBack: '#ff896b',\n shape: 3,\n frequency: 0.2,\n amplitude: 0.25,\n spacing: 1.17,\n proportion: 0.57,\n softness: 0,\n },\n};\n\nexport const tangledUpPreset: WavesPreset = {\n name: 'Tangled up',\n params: {\n ...defaultPatternSizing,\n scale: 0.5,\n rotation: 0,\n colorFront: '#133a41',\n colorBack: '#c2d8b6',\n shape: 2.07,\n frequency: 0.44,\n amplitude: 0.57,\n spacing: 1.05,\n proportion: 0.75,\n softness: 0,\n },\n};\n\nexport const waveRidePreset: WavesPreset = {\n name: 'Ride the wave',\n params: {\n ...defaultPatternSizing,\n scale: 1.7,\n rotation: 0,\n colorFront: '#fdffe6',\n colorBack: '#1f1f1f',\n shape: 2.25,\n frequency: 0.2,\n amplitude: 1,\n spacing: 1.25,\n proportion: 1,\n softness: 0,\n },\n};\n\nexport const wavesPresets: WavesPreset[] = [defaultPreset, groovyPreset, tangledUpPreset, waveRidePreset];\n\nexport const Waves: React.FC<WavesProps> = memo(function WavesImpl({\n // Own props\n colorFront = defaultPreset.params.colorFront,\n colorBack = defaultPreset.params.colorBack,\n shape = defaultPreset.params.shape,\n frequency = defaultPreset.params.frequency,\n amplitude = defaultPreset.params.amplitude,\n spacing = defaultPreset.params.spacing,\n proportion = defaultPreset.params.proportion,\n softness = defaultPreset.params.softness,\n\n // Sizing props\n fit = defaultPreset.params.fit,\n scale = defaultPreset.params.scale,\n rotation = defaultPreset.params.rotation,\n offsetX = defaultPreset.params.offsetX,\n offsetY = defaultPreset.params.offsetY,\n originX = defaultPreset.params.originX,\n originY = defaultPreset.params.originY,\n worldWidth = defaultPreset.params.worldWidth,\n worldHeight = defaultPreset.params.worldHeight,\n\n // Other props\n maxPixelCount = 6016 * 3384, // Higher max resolution for this shader\n ...props\n}: WavesProps) {\n const uniforms = {\n // Own uniforms\n u_colorFront: getShaderColorFromString(colorFront),\n u_colorBack: getShaderColorFromString(colorBack),\n u_shape: shape,\n u_frequency: frequency,\n u_amplitude: amplitude,\n u_spacing: spacing,\n u_proportion: proportion,\n u_softness: softness,\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 WavesUniforms;\n\n return <ShaderMount {...props} fragmentShader={wavesFragmentShader} uniforms={uniforms} />;\n}, colorPropsAreEqual);\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -0,0 +1,8 @@
1
+ /**
2
+ * A cut down version of suspend-react.
3
+ * When paper-shaders only supports React 19+ we can use the use hook instead.
4
+ */
5
+ type Tuple<T = any> = [T] | T[];
6
+ type Await<T> = T extends Promise<infer V> ? V : never;
7
+ declare const suspend: <Keys extends Tuple<unknown>, Fn extends (...keys: Keys) => Promise<unknown>>(fn: Fn | Promise<unknown>, keys?: Keys) => Await<ReturnType<Fn>>;
8
+ export { suspend };
@@ -0,0 +1,43 @@
1
+ /* * * * * * * * * * * * * * * * * * * * * * * * * * * *
2
+ * Paper Shaders *
3
+ * https://github.com/paper-design/shaders *
4
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * */
5
+
6
+ const isPromise = (promise) => typeof promise === "object" && typeof promise.then === "function";
7
+ const globalCache = [];
8
+ function shallowEqualArrays(arrA, arrB) {
9
+ if (arrA === arrB) return true;
10
+ if (!arrA || !arrB) return false;
11
+ const len = arrA.length;
12
+ if (arrB.length !== len) return false;
13
+ for (let i = 0; i < len; i++) if (arrA[i] !== arrB[i]) return false;
14
+ return true;
15
+ }
16
+ function query(fn, keys = null) {
17
+ if (keys === null) keys = [fn];
18
+ for (const entry2 of globalCache) {
19
+ if (shallowEqualArrays(keys, entry2.keys)) {
20
+ if (Object.prototype.hasOwnProperty.call(entry2, "error")) throw entry2.error;
21
+ if (Object.prototype.hasOwnProperty.call(entry2, "response")) {
22
+ return entry2.response;
23
+ }
24
+ throw entry2.promise;
25
+ }
26
+ }
27
+ const entry = {
28
+ keys,
29
+ promise: (
30
+ // Execute the promise
31
+ (isPromise(fn) ? fn : fn(...keys)).then((response) => {
32
+ entry.response = response;
33
+ }).catch((error) => entry.error = error)
34
+ )
35
+ };
36
+ globalCache.push(entry);
37
+ throw entry.promise;
38
+ }
39
+ const suspend = (fn, keys) => query(fn, keys);
40
+ export {
41
+ suspend
42
+ };
43
+ //# sourceMappingURL=suspend.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/suspend.tsx"],
4
+ "sourcesContent": ["/**\n * A cut down version of suspend-react.\n * When paper-shaders only supports React 19+ we can use the use hook instead.\n */\n\ntype Tuple<T = any> = [T] | T[];\ntype Await<T> = T extends Promise<infer V> ? V : never;\ntype Cache<Keys extends Tuple<unknown>> = {\n promise: Promise<unknown>;\n keys: Keys;\n error?: any;\n response?: unknown;\n};\n\nconst isPromise = (promise: any): promise is Promise<unknown> =>\n typeof promise === 'object' && typeof (promise as Promise<any>).then === 'function';\n\nconst globalCache: Cache<Tuple<unknown>>[] = [];\n\nfunction shallowEqualArrays(arrA: any[], arrB: any[]) {\n if (arrA === arrB) return true;\n if (!arrA || !arrB) return false;\n const len = arrA.length;\n if (arrB.length !== len) return false;\n for (let i = 0; i < len; i++) if (arrA[i] !== arrB[i]) return false;\n return true;\n}\n\nfunction query<Keys extends Tuple<unknown>, Fn extends (...keys: Keys) => Promise<unknown>>(\n fn: Fn | Promise<unknown>,\n keys: Keys = null as unknown as Keys\n) {\n // If no keys were given, the function is the key\n if (keys === null) keys = [fn] as unknown as Keys;\n\n for (const entry of globalCache) {\n // Find a match\n if (shallowEqualArrays(keys, entry.keys)) {\n // If an error occurred, throw\n if (Object.prototype.hasOwnProperty.call(entry, 'error')) throw entry.error;\n // If a response was successful, return\n if (Object.prototype.hasOwnProperty.call(entry, 'response')) {\n return entry.response as Await<ReturnType<Fn>>;\n }\n // If the promise is still unresolved, throw\n throw entry.promise;\n }\n }\n\n // The request is new or has changed.\n const entry: Cache<Keys> = {\n keys,\n promise:\n // Execute the promise\n (isPromise(fn) ? fn : fn(...keys))\n // When it resolves, store its value\n .then((response) => {\n entry.response = response;\n })\n // Store caught errors, they will be thrown in the render-phase to bubble into an error-bound\n .catch((error) => (entry.error = error)),\n };\n // Register the entry\n globalCache.push(entry);\n // And throw the promise, this yields control back to React\n throw entry.promise;\n}\n\nconst suspend = <Keys extends Tuple<unknown>, Fn extends (...keys: Keys) => Promise<unknown>>(\n fn: Fn | Promise<unknown>,\n keys?: Keys\n): Await<ReturnType<Fn>> => query(fn, keys);\n\nexport { suspend };\n"],
5
+ "mappings": ";;;;;AAcA,MAAM,YAAY,CAAC,YACjB,OAAO,YAAY,YAAY,OAAQ,QAAyB,SAAS;AAE3E,MAAM,cAAuC,CAAC;AAE9C,SAAS,mBAAmB,MAAa,MAAa;AACpD,MAAI,SAAS,KAAM,QAAO;AAC1B,MAAI,CAAC,QAAQ,CAAC,KAAM,QAAO;AAC3B,QAAM,MAAM,KAAK;AACjB,MAAI,KAAK,WAAW,IAAK,QAAO;AAChC,WAAS,IAAI,GAAG,IAAI,KAAK,IAAK,KAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAG,QAAO;AAC9D,SAAO;AACT;AAEA,SAAS,MACP,IACA,OAAa,MACb;AAEA,MAAI,SAAS,KAAM,QAAO,CAAC,EAAE;AAE7B,aAAWA,UAAS,aAAa;AAE/B,QAAI,mBAAmB,MAAMA,OAAM,IAAI,GAAG;AAExC,UAAI,OAAO,UAAU,eAAe,KAAKA,QAAO,OAAO,EAAG,OAAMA,OAAM;AAEtE,UAAI,OAAO,UAAU,eAAe,KAAKA,QAAO,UAAU,GAAG;AAC3D,eAAOA,OAAM;AAAA,MACf;AAEA,YAAMA,OAAM;AAAA,IACd;AAAA,EACF;AAGA,QAAM,QAAqB;AAAA,IACzB;AAAA,IACA;AAAA;AAAA,OAEG,UAAU,EAAE,IAAI,KAAK,GAAG,GAAG,IAAI,GAE7B,KAAK,CAAC,aAAa;AAClB,cAAM,WAAW;AAAA,MACnB,CAAC,EAEA,MAAM,CAAC,UAAW,MAAM,QAAQ,KAAM;AAAA;AAAA,EAC7C;AAEA,cAAY,KAAK,KAAK;AAEtB,QAAM,MAAM;AACd;AAEA,MAAM,UAAU,CACd,IACA,SAC0B,MAAM,IAAI,IAAI;",
6
+ "names": ["entry"]
7
+ }
@@ -0,0 +1 @@
1
+ export declare const transparentPixel = "data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==";
@@ -0,0 +1,10 @@
1
+ /* * * * * * * * * * * * * * * * * * * * * * * * * * * *
2
+ * Paper Shaders *
3
+ * https://github.com/paper-design/shaders *
4
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * */
5
+
6
+ const transparentPixel = "data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==";
7
+ export {
8
+ transparentPixel
9
+ };
10
+ //# sourceMappingURL=transparent-pixel.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/transparent-pixel.ts"],
4
+ "sourcesContent": ["export const transparentPixel = 'data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==';\n"],
5
+ "mappings": ";;;;;AAAO,MAAM,mBAAmB;",
6
+ "names": []
7
+ }
@@ -0,0 +1,6 @@
1
+ import * as React from 'react';
2
+ /**
3
+ * Merges an array of refs into a single memoized callback ref or `null`.
4
+ * @see https://floating-ui.com/docs/react-utils#usemergerefs
5
+ */
6
+ export declare function useMergeRefs<Instance>(refs: Array<React.Ref<Instance> | undefined>): null | React.Ref<Instance>;