@react-three/drei 9.121.6-rc.1 → 9.122.0

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 (201) hide show
  1. package/core/AccumulativeShadows.d.ts +10 -8
  2. package/core/ArcballControls.d.ts +4 -4
  3. package/core/AsciiRenderer.d.ts +2 -1
  4. package/core/BBAnchor.d.ts +3 -3
  5. package/core/Backdrop.d.ts +1 -2
  6. package/core/Billboard.cjs.js +1 -1
  7. package/core/Billboard.d.ts +2 -3
  8. package/core/Billboard.js +1 -1
  9. package/core/Bounds.d.ts +1 -2
  10. package/core/Bvh.d.ts +2 -3
  11. package/core/CameraControls.d.ts +4 -4
  12. package/core/CatmullRomLine.d.ts +3 -2
  13. package/core/Caustics.d.ts +17 -14
  14. package/core/Center.d.ts +2 -3
  15. package/core/Clone.d.ts +4 -4
  16. package/core/Cloud.cjs.js +1 -1
  17. package/core/Cloud.d.ts +12 -50
  18. package/core/Cloud.js +3 -3
  19. package/core/ComputedAttribute.cjs.js +1 -1
  20. package/core/ComputedAttribute.d.ts +4 -3
  21. package/core/ComputedAttribute.js +1 -1
  22. package/core/ContactShadows.d.ts +2 -3
  23. package/core/CubeCamera.d.ts +3 -3
  24. package/core/CubeTexture.d.ts +6 -5
  25. package/core/CubeTexture.js +7 -2
  26. package/core/CubicBezierLine.d.ts +3 -2
  27. package/core/CurveModifier.d.ts +1 -2
  28. package/core/Decal.d.ts +2 -2
  29. package/core/Detailed.d.ts +3 -3
  30. package/core/DetectGPU.d.ts +2 -1
  31. package/core/DeviceOrientationControls.d.ts +2 -2
  32. package/core/Edges.cjs.js +1 -1
  33. package/core/Edges.d.ts +2 -2
  34. package/core/Edges.js +2 -2
  35. package/core/Effects.cjs.js +1 -1
  36. package/core/Effects.d.ts +13 -9
  37. package/core/Effects.js +3 -3
  38. package/core/Environment.cjs.js +1 -1
  39. package/core/Environment.d.ts +7 -5
  40. package/core/Fbo.d.ts +4 -1
  41. package/core/Fbo.js +2 -0
  42. package/core/Fbx.d.ts +1 -1
  43. package/core/FirstPersonControls.d.ts +2 -2
  44. package/core/Fisheye.d.ts +1 -2
  45. package/core/Float.d.ts +1 -2
  46. package/core/FlyControls.d.ts +2 -2
  47. package/core/GizmoHelper.d.ts +1 -2
  48. package/core/GizmoViewport.d.ts +2 -2
  49. package/core/Gltf.d.ts +5 -9
  50. package/core/GradientTexture.d.ts +4 -4
  51. package/core/GradientTexture.js +2 -0
  52. package/core/Grid.d.ts +7 -6
  53. package/core/Helper.cjs.js +1 -1
  54. package/core/Helper.d.ts +1 -1
  55. package/core/Helper.js +1 -1
  56. package/core/Hud.d.ts +2 -1
  57. package/core/Image.d.ts +8 -6
  58. package/core/Instances.cjs.js +1 -1
  59. package/core/Instances.d.ts +35 -27
  60. package/core/Instances.js +30 -35
  61. package/core/Ktx2.d.ts +1 -1
  62. package/core/Lightformer.d.ts +3 -3
  63. package/core/Line.d.ts +4 -4
  64. package/core/MapControls.d.ts +4 -4
  65. package/core/MarchingCubes.d.ts +6 -6
  66. package/core/Mask.d.ts +3 -3
  67. package/core/MeshDiscardMaterial.d.ts +7 -6
  68. package/core/MeshDistortMaterial.d.ts +17 -15
  69. package/core/MeshPortalMaterial.cjs.js +1 -1
  70. package/core/MeshPortalMaterial.d.ts +17 -14
  71. package/core/MeshPortalMaterial.js +2 -2
  72. package/core/MeshReflectorMaterial.cjs.js +1 -1
  73. package/core/MeshReflectorMaterial.d.ts +22 -9
  74. package/core/MeshReflectorMaterial.js +4 -2
  75. package/core/MeshRefractionMaterial.cjs.js +1 -1
  76. package/core/MeshRefractionMaterial.d.ts +8 -5
  77. package/core/MeshRefractionMaterial.js +2 -2
  78. package/core/MeshTransmissionMaterial.cjs.js +1 -1
  79. package/core/MeshTransmissionMaterial.d.ts +8 -7
  80. package/core/MeshTransmissionMaterial.js +1 -2
  81. package/core/MeshWobbleMaterial.d.ts +17 -15
  82. package/core/MotionPathControls.cjs.js +1 -1
  83. package/core/MotionPathControls.d.ts +11 -18
  84. package/core/MotionPathControls.js +32 -24
  85. package/core/MultiMaterial.cjs.js +1 -1
  86. package/core/MultiMaterial.d.ts +1 -3
  87. package/core/MultiMaterial.js +3 -2
  88. package/core/OrbitControls.d.ts +4 -4
  89. package/core/OrthographicCamera.d.ts +3 -3
  90. package/core/Outlines.cjs.js +1 -1
  91. package/core/Outlines.d.ts +3 -2
  92. package/core/Outlines.js +2 -2
  93. package/core/PerformanceMonitor.d.ts +2 -2
  94. package/core/PerspectiveCamera.d.ts +3 -3
  95. package/core/PointMaterial.d.ts +11 -3
  96. package/core/PointerLockControls.d.ts +2 -2
  97. package/core/Points.cjs.js +1 -1
  98. package/core/Points.d.ts +13 -10
  99. package/core/Points.js +16 -6
  100. package/core/PositionalAudio.d.ts +3 -3
  101. package/core/Preload.d.ts +3 -2
  102. package/core/QuadraticBezierLine.d.ts +7 -5
  103. package/core/Reflector.cjs.js +1 -0
  104. package/core/Reflector.d.ts +30 -0
  105. package/core/Reflector.js +180 -0
  106. package/core/RenderCubeTexture.d.ts +2 -2
  107. package/core/RenderTexture.cjs.js +1 -1
  108. package/core/RenderTexture.d.ts +3 -3
  109. package/core/RenderTexture.js +2 -3
  110. package/core/Resize.d.ts +2 -9
  111. package/core/RoundedBox.d.ts +4 -4
  112. package/core/Sampler.d.ts +4 -4
  113. package/core/ScreenQuad.d.ts +3 -3
  114. package/core/ScreenSizer.d.ts +3 -3
  115. package/core/ScreenSpace.d.ts +2 -3
  116. package/core/Segments.d.ts +8 -6
  117. package/core/Shadow.d.ts +3 -3
  118. package/core/ShadowAlpha.cjs.js +1 -1
  119. package/core/ShadowAlpha.d.ts +2 -1
  120. package/core/ShadowAlpha.js +1 -1
  121. package/core/Sky.d.ts +3 -2
  122. package/core/Sparkles.d.ts +16 -14
  123. package/core/Splat.d.ts +8 -6
  124. package/core/SpotLight.d.ts +1 -2
  125. package/core/SpriteAnimator.cjs.js +1 -1
  126. package/core/SpriteAnimator.d.ts +3 -36
  127. package/core/Stage.cjs.js +1 -1
  128. package/core/Stage.d.ts +2 -3
  129. package/core/Stars.cjs.js +1 -1
  130. package/core/Stars.d.ts +8 -6
  131. package/core/Stars.js +1 -1
  132. package/core/Stats.d.ts +3 -2
  133. package/core/StatsGl.d.ts +2 -2
  134. package/core/Svg.d.ts +6 -6
  135. package/core/Text.d.ts +4 -3
  136. package/core/Text3D.d.ts +10 -7
  137. package/core/Texture.d.ts +1 -1
  138. package/core/TrackballControls.d.ts +4 -4
  139. package/core/Trail.cjs.js +1 -1
  140. package/core/Trail.d.ts +3 -3
  141. package/core/Trail.js +3 -3
  142. package/core/TrailTexture.d.ts +2 -3
  143. package/core/TransformControls.cjs.js +1 -1
  144. package/core/TransformControls.d.ts +3 -3
  145. package/core/TransformControls.js +5 -4
  146. package/core/VideoTexture.cjs.js +1 -1
  147. package/core/VideoTexture.js +1 -1
  148. package/core/Wireframe.d.ts +7 -5
  149. package/core/index.cjs.js +1 -1
  150. package/core/index.d.ts +1 -0
  151. package/core/index.js +3 -1
  152. package/core/shapes.d.ts +20 -21
  153. package/core/softShadows.d.ts +2 -1
  154. package/core/useAnimations.cjs.js +1 -1
  155. package/core/useAnimations.d.ts +2 -2
  156. package/core/useAnimations.js +1 -1
  157. package/core/useBoxProjectedEnv.d.ts +1 -1
  158. package/core/useCamera.cjs.js +1 -1
  159. package/core/useCamera.d.ts +1 -1
  160. package/core/useCamera.js +8 -1
  161. package/core/useContextBridge.d.ts +1 -1
  162. package/core/useEnvironment.cjs.js +1 -1
  163. package/core/useEnvironment.d.ts +4 -3
  164. package/core/useEnvironment.js +19 -11
  165. package/core/useIntersect.d.ts +1 -1
  166. package/core/useSpriteLoader.d.ts +1 -1
  167. package/helpers/deprecated.cjs.js +1 -1
  168. package/helpers/deprecated.d.ts +4 -1
  169. package/helpers/deprecated.js +14 -2
  170. package/helpers/ts-utils.d.ts +0 -4
  171. package/helpers/useEffectfulState.d.ts +1 -1
  172. package/index.cjs.js +1 -1
  173. package/index.js +1 -0
  174. package/materials/BlurPass.js +1 -0
  175. package/materials/MeshReflectorMaterial.d.ts +16 -0
  176. package/native/index.cjs.js +1 -1
  177. package/native/index.js +3 -1
  178. package/package.json +8 -7
  179. package/web/CycleRaycast.d.ts +1 -1
  180. package/web/FaceLandmarker.d.ts +2 -1
  181. package/web/Facemesh.d.ts +2 -3
  182. package/web/Html.cjs.js +1 -1
  183. package/web/Html.d.ts +4 -4
  184. package/web/Html.js +1 -1
  185. package/web/KeyboardControls.d.ts +1 -1
  186. package/web/PresentationControls.cjs.js +1 -1
  187. package/web/PresentationControls.d.ts +4 -3
  188. package/web/PresentationControls.js +28 -20
  189. package/web/ScrollControls.d.ts +1 -1
  190. package/web/Select.d.ts +3 -3
  191. package/web/Select.js +2 -6
  192. package/web/View.cjs.js +1 -1
  193. package/web/View.d.ts +10 -8
  194. package/web/View.js +34 -4
  195. package/web/index.cjs.js +1 -1
  196. package/web/index.js +3 -0
  197. package/web/pivotControls/AxisArrow.js +2 -0
  198. package/web/pivotControls/AxisRotator.js +2 -0
  199. package/web/pivotControls/PlaneSlider.js +2 -0
  200. package/web/pivotControls/ScalingSphere.js +1 -0
  201. package/web/pivotControls/index.d.ts +2 -1
package/core/Instances.js CHANGED
@@ -2,6 +2,7 @@ import _extends from '@babel/runtime/helpers/esm/extends';
2
2
  import * as THREE from 'three';
3
3
  import * as React from 'react';
4
4
  import { extend, useFrame } from '@react-three/fiber';
5
+ import Composer from 'react-composer';
5
6
  import { setUpdateRange } from '../helpers/deprecated.js';
6
7
 
7
8
  function isFunctionChild(value) {
@@ -73,7 +74,7 @@ const Instance = /* @__PURE__ */React.forwardRef(({
73
74
  React.useMemo(() => extend({
74
75
  PositionMesh
75
76
  }), []);
76
- const group = React.useRef(null);
77
+ const group = React.useRef();
77
78
  React.useImperativeHandle(ref, () => group.current, []);
78
79
  const {
79
80
  subscribe,
@@ -134,11 +135,11 @@ const Instances = /* @__PURE__ */React.forwardRef(({
134
135
  count = Math.min(limit, range !== undefined ? range : limit, instances.length);
135
136
  parentRef.current.count = count;
136
137
  setUpdateRange(parentRef.current.instanceMatrix, {
137
- start: 0,
138
+ offset: 0,
138
139
  count: count * 16
139
140
  });
140
141
  setUpdateRange(parentRef.current.instanceColor, {
141
- start: 0,
142
+ offset: 0,
142
143
  count: count * 3
143
144
  });
144
145
  for (let i = 0; i < instances.length; i++) {
@@ -174,11 +175,15 @@ const Instances = /* @__PURE__ */React.forwardRef(({
174
175
  raycast: () => null
175
176
  }, props), /*#__PURE__*/React.createElement("instancedBufferAttribute", {
176
177
  attach: "instanceMatrix",
177
- args: [matrices, 16],
178
+ count: matrices.length / 16,
179
+ array: matrices,
180
+ itemSize: 16,
178
181
  usage: THREE.DynamicDrawUsage
179
182
  }), /*#__PURE__*/React.createElement("instancedBufferAttribute", {
180
183
  attach: "instanceColor",
181
- args: [colors, 3],
184
+ count: colors.length / 3,
185
+ array: colors,
186
+ itemSize: 3,
182
187
  usage: THREE.DynamicDrawUsage
183
188
  }), isFunctionChild(children) ? /*#__PURE__*/React.createElement(localContext.Provider, {
184
189
  value: api
@@ -188,37 +193,29 @@ const Instances = /* @__PURE__ */React.forwardRef(({
188
193
  value: api
189
194
  }, children));
190
195
  });
191
- const Merged = /*#__PURE__*/React.forwardRef(function Merged({
196
+ const Merged = /* @__PURE__ */React.forwardRef(function Merged({
192
197
  meshes,
193
198
  children,
194
- ...rest
199
+ ...props
195
200
  }, ref) {
196
- const instances = [];
197
- if (Array.isArray(meshes)) {
198
- for (const mesh of meshes) {
199
- if (mesh != null && mesh.isMesh) {
200
- instances.push(props => /*#__PURE__*/React.createElement(Instances, _extends({
201
- key: mesh.geometry.uuid,
202
- geometry: mesh.geometry,
203
- material: mesh.material
204
- }, rest, props)));
205
- }
206
- }
207
- } else if (meshes != null && typeof meshes === 'object') {
208
- for (const key in meshes) {
209
- const mesh = meshes[key];
210
- if (mesh != null && mesh.isMesh) {
211
- instances.push(props => /*#__PURE__*/React.createElement(Instances, _extends({
212
- key: mesh.geometry.uuid,
213
- geometry: mesh.geometry,
214
- material: mesh.material
215
- }, rest, props)));
216
- }
217
- }
218
- }
201
+ const isArray = Array.isArray(meshes);
202
+ // Filter out meshes from collections, which may contain non-meshes
203
+ if (!isArray) for (const key of Object.keys(meshes)) if (!meshes[key].isMesh) delete meshes[key];
219
204
  return /*#__PURE__*/React.createElement("group", {
220
205
  ref: ref
221
- }, children(instances));
206
+ }, /*#__PURE__*/React.createElement(Composer, {
207
+ components: (isArray ? meshes : Object.values(meshes)).map(({
208
+ geometry,
209
+ material
210
+ }) => /*#__PURE__*/React.createElement(Instances, _extends({
211
+ key: geometry.uuid,
212
+ geometry: geometry,
213
+ material: material
214
+ }, props)))
215
+ }, args => isArray ? children(...args) : children(Object.keys(meshes).filter(key => meshes[key].isMesh).reduce((acc, key, i) => ({
216
+ ...acc,
217
+ [key]: args[i]
218
+ }), {}))));
222
219
  });
223
220
 
224
221
  /** Idea and implementation for global instances and instanced attributes by
@@ -244,7 +241,7 @@ const InstancedAttribute = /*#__PURE__*/React.forwardRef(({
244
241
  const ref = React.useRef(null);
245
242
  React.useImperativeHandle(fref, () => ref.current, []);
246
243
  React.useLayoutEffect(() => {
247
- const parent = ref.current.__r3f.parent.object;
244
+ const parent = ref.current.__r3f.parent;
248
245
  parent.geometry.attributes[name] = ref.current;
249
246
  const value = Array.isArray(defaultValue) ? defaultValue : [defaultValue];
250
247
  const array = Array.from({
@@ -252,7 +249,6 @@ const InstancedAttribute = /*#__PURE__*/React.forwardRef(({
252
249
  }, () => value).flat();
253
250
  ref.current.array = new Float32Array(array);
254
251
  ref.current.itemSize = value.length;
255
- // @ts-expect-error
256
252
  ref.current.count = array.length / ref.current.itemSize;
257
253
  return () => {
258
254
  delete parent.geometry.attributes[name];
@@ -260,7 +256,7 @@ const InstancedAttribute = /*#__PURE__*/React.forwardRef(({
260
256
  }, [name]);
261
257
  let iterations = 0;
262
258
  useFrame(() => {
263
- const parent = ref.current.__r3f.parent.object;
259
+ const parent = ref.current.__r3f.parent;
264
260
  if (parent.userData.frames === Infinity || iterations < parent.userData.frames) {
265
261
  for (let i = 0; i < parent.userData.instances.length; i++) {
266
262
  const instance = parent.userData.instances[i].current;
@@ -273,7 +269,6 @@ const InstancedAttribute = /*#__PURE__*/React.forwardRef(({
273
269
  iterations++;
274
270
  }
275
271
  });
276
- // @ts-expect-error we're abusing three API here by mutating immutable args
277
272
  return /*#__PURE__*/React.createElement("instancedBufferAttribute", {
278
273
  ref: ref,
279
274
  usage: usage,
package/core/Ktx2.d.ts CHANGED
@@ -4,7 +4,7 @@ export declare function useKTX2<Url extends string[] | string | Record<string, s
4
4
  [key in keyof Url]: Texture;
5
5
  } : Texture;
6
6
  export declare namespace useKTX2 {
7
- var preload: (url: string extends any[] ? string[] : string, basisPath?: string) => void;
7
+ var preload: (url: string extends any[] ? string[] : string, basisPath?: string) => undefined;
8
8
  var clear: (input: string | string[]) => void;
9
9
  }
10
10
  export declare const Ktx2: ({ children, input, basisPath, }: {
@@ -1,7 +1,7 @@
1
- import { ReactThreeFiber, ThreeElements } from '@react-three/fiber';
1
+ import { ReactThreeFiber } from '@react-three/fiber';
2
2
  import * as THREE from 'three';
3
3
  import { ForwardRefComponent } from '../helpers/ts-utils';
4
- export type LightProps = Omit<ThreeElements['mesh'], 'ref'> & {
4
+ export type LightProps = JSX.IntrinsicElements['mesh'] & {
5
5
  args?: any[];
6
6
  map?: THREE.Texture;
7
7
  toneMapped?: boolean;
@@ -10,6 +10,6 @@ export type LightProps = Omit<ThreeElements['mesh'], 'ref'> & {
10
10
  scale?: number | [number, number, number] | [number, number];
11
11
  intensity?: number;
12
12
  target?: boolean | [number, number, number] | THREE.Vector3;
13
- light?: Partial<ThreeElements['pointLight']>;
13
+ light?: Partial<JSX.IntrinsicElements['pointLight']>;
14
14
  };
15
15
  export declare const Lightformer: ForwardRefComponent<LightProps, THREE.Mesh>;
package/core/Line.d.ts CHANGED
@@ -1,13 +1,13 @@
1
1
  import { Color, ColorRepresentation } from 'three';
2
- import { Vector2 as FiberVector2, Vector3 as FiberVector3, ThreeElement } from '@react-three/fiber';
2
+ import { ReactThreeFiber, Vector2 as FiberVector2, Vector3 as FiberVector3 } from '@react-three/fiber';
3
3
  import { LineMaterial, LineMaterialParameters, Line2, LineSegments2 } from 'three-stdlib';
4
4
  import { ForwardRefComponent } from '../helpers/ts-utils';
5
- export type LineProps = Omit<{
5
+ export type LineProps = {
6
6
  points: ReadonlyArray<FiberVector2 | FiberVector3>;
7
7
  vertexColors?: ReadonlyArray<Color | [number, number, number] | [number, number, number, number]>;
8
8
  lineWidth?: number;
9
9
  segments?: boolean;
10
- } & Omit<LineMaterialParameters, 'vertexColors' | 'color'> & Omit<ThreeElement<typeof Line2>, 'ref' | 'args'> & Omit<ThreeElement<typeof LineMaterial>, 'ref' | 'color' | 'vertexColors' | 'args'> & {
10
+ } & Omit<LineMaterialParameters, 'vertexColors' | 'color'> & Omit<ReactThreeFiber.Object3DNode<Line2, typeof Line2>, 'args'> & Omit<ReactThreeFiber.Object3DNode<LineMaterial, [LineMaterialParameters]>, 'color' | 'vertexColors' | 'args'> & {
11
11
  color?: ColorRepresentation;
12
- }, 'ref'>;
12
+ };
13
13
  export declare const Line: ForwardRefComponent<LineProps, Line2 | LineSegments2>;
@@ -1,8 +1,8 @@
1
- import { ReactThreeFiber, ThreeElement } from '@react-three/fiber';
1
+ import { ReactThreeFiber } from '@react-three/fiber';
2
2
  import * as THREE from 'three';
3
3
  import { MapControls as MapControlsImpl } from 'three-stdlib';
4
- import { ForwardRefComponent, Overwrite } from '../helpers/ts-utils';
5
- export type MapControlsProps = Omit<Overwrite<ThreeElement<typeof MapControlsImpl>, {
4
+ import { ForwardRefComponent } from '../helpers/ts-utils';
5
+ export type MapControlsProps = ReactThreeFiber.Overwrite<ReactThreeFiber.Object3DNode<MapControlsImpl, typeof MapControlsImpl>, {
6
6
  target?: ReactThreeFiber.Vector3;
7
7
  camera?: THREE.Camera;
8
8
  makeDefault?: boolean;
@@ -10,5 +10,5 @@ export type MapControlsProps = Omit<Overwrite<ThreeElement<typeof MapControlsImp
10
10
  onStart?: (e?: THREE.Event) => void;
11
11
  onEnd?: (e?: THREE.Event) => void;
12
12
  domElement?: HTMLElement;
13
- }>, 'ref' | 'args'>;
13
+ }>;
14
14
  export declare const MapControls: ForwardRefComponent<MapControlsProps, MapControlsImpl>;
@@ -1,24 +1,24 @@
1
1
  import * as THREE from 'three';
2
2
  import { Color } from 'three';
3
3
  import { MarchingCubes as MarchingCubesImpl } from 'three-stdlib';
4
- import { ThreeElements } from '@react-three/fiber';
5
4
  import { ForwardRefComponent } from '../helpers/ts-utils';
6
5
  export type MarchingCubesProps = {
7
6
  resolution?: number;
8
7
  maxPolyCount?: number;
9
8
  enableUvs?: boolean;
10
9
  enableColors?: boolean;
11
- } & Omit<ThreeElements['group'], 'ref'>;
10
+ } & JSX.IntrinsicElements['group'];
12
11
  export declare const MarchingCubes: ForwardRefComponent<MarchingCubesProps, MarchingCubesImpl>;
13
- export type MarchingCubeProps = {
12
+ type MarchingCubeProps = {
14
13
  strength?: number;
15
14
  subtract?: number;
16
15
  color?: Color;
17
- } & ThreeElements['group'];
16
+ } & JSX.IntrinsicElements['group'];
18
17
  export declare const MarchingCube: ForwardRefComponent<MarchingCubeProps, THREE.Group>;
19
- export type MarchingPlaneProps = {
18
+ type MarchingPlaneProps = {
20
19
  planeType?: 'x' | 'y' | 'z';
21
20
  strength?: number;
22
21
  subtract?: number;
23
- } & ThreeElements['group'];
22
+ } & JSX.IntrinsicElements['group'];
24
23
  export declare const MarchingPlane: ForwardRefComponent<MarchingPlaneProps, THREE.Group>;
24
+ export {};
package/core/Mask.d.ts CHANGED
@@ -1,12 +1,11 @@
1
1
  import * as THREE from 'three';
2
2
  import { ForwardRefComponent } from '../helpers/ts-utils';
3
- import { ThreeElements } from '@react-three/fiber';
4
- export type MaskProps = Omit<ThreeElements['mesh'], 'ref' | 'id'> & {
3
+ type Props = Omit<JSX.IntrinsicElements['mesh'], 'id'> & {
5
4
  id: number;
6
5
  colorWrite?: boolean;
7
6
  depthWrite?: boolean;
8
7
  };
9
- export declare const Mask: ForwardRefComponent<MaskProps, THREE.Mesh>;
8
+ export declare const Mask: ForwardRefComponent<Props, THREE.Mesh>;
10
9
  export declare function useMask(id: number, inverse?: boolean): {
11
10
  stencilWrite: boolean;
12
11
  stencilRef: number;
@@ -15,3 +14,4 @@ export declare function useMask(id: number, inverse?: boolean): {
15
14
  stencilZFail: 7680;
16
15
  stencilZPass: 7680;
17
16
  };
17
+ export {};
@@ -1,10 +1,11 @@
1
1
  import { ShaderMaterial } from 'three';
2
- import { ThreeElements } from '@react-three/fiber';
2
+ import { ReactThreeFiber } from '@react-three/fiber';
3
3
  import { ForwardRefComponent } from '../helpers/ts-utils';
4
- declare module '@react-three/fiber' {
5
- interface ThreeElements {
6
- discardMaterialImpl: ThreeElements['shaderMaterial'];
4
+ declare global {
5
+ namespace JSX {
6
+ interface IntrinsicElements {
7
+ discardMaterialImpl: ReactThreeFiber.ShaderMaterialProps;
8
+ }
7
9
  }
8
10
  }
9
- export type MeshDiscardMaterialProps = Omit<ThreeElements['shaderMaterial'], 'ref'>;
10
- export declare const MeshDiscardMaterial: ForwardRefComponent<MeshDiscardMaterialProps, ShaderMaterial>;
11
+ export declare const MeshDiscardMaterial: ForwardRefComponent<JSX.IntrinsicElements['shaderMaterial'], ShaderMaterial>;
@@ -1,6 +1,21 @@
1
1
  import { IUniform, MeshPhysicalMaterial, MeshPhysicalMaterialParameters } from 'three';
2
- import { ThreeElements } from '@react-three/fiber';
3
2
  import { ForwardRefComponent } from '../helpers/ts-utils';
3
+ type DistortMaterialType = JSX.IntrinsicElements['meshPhysicalMaterial'] & {
4
+ time?: number;
5
+ distort?: number;
6
+ radius?: number;
7
+ };
8
+ type Props = DistortMaterialType & {
9
+ speed?: number;
10
+ factor?: number;
11
+ };
12
+ declare global {
13
+ namespace JSX {
14
+ interface IntrinsicElements {
15
+ distortMaterialImpl: DistortMaterialType;
16
+ }
17
+ }
18
+ }
4
19
  interface Uniform<T> {
5
20
  value: T;
6
21
  }
@@ -22,18 +37,5 @@ declare class DistortMaterialImpl extends MeshPhysicalMaterial {
22
37
  get radius(): number;
23
38
  set radius(v: number);
24
39
  }
25
- declare module '@react-three/fiber' {
26
- interface ThreeElements {
27
- distortMaterialImpl: ThreeElements['meshPhysicalMaterial'] & {
28
- time?: number;
29
- distort?: number;
30
- radius?: number;
31
- };
32
- }
33
- }
34
- export type MeshDistortMaterialProps = Omit<ThreeElements['distortMaterialImpl'], 'ref'> & {
35
- speed?: number;
36
- factor?: number;
37
- };
38
- export declare const MeshDistortMaterial: ForwardRefComponent<MeshDistortMaterialProps, DistortMaterialImpl>;
40
+ export declare const MeshDistortMaterial: ForwardRefComponent<Props, DistortMaterialImpl>;
39
41
  export {};
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/extends"),r=require("three"),t=require("react"),n=require("@react-three/fiber"),a=require("./useIntersect.cjs.js"),i=require("./Fbo.cjs.js"),l=require("./RenderTexture.cjs.js"),o=require("./shaderMaterial.cjs.js"),u=require("three-stdlib"),s=require("../helpers/constants.cjs.js");function v(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}function c(e){if(e&&e.__esModule)return e;var r=Object.create(null);return e&&Object.keys(e).forEach((function(t){if("default"!==t){var n=Object.getOwnPropertyDescriptor(e,t);Object.defineProperty(r,t,n.get?n:{enumerable:!0,get:function(){return e[t]}})}})),r.default=e,Object.freeze(r)}var d=v(e),m=c(r),f=c(t);const g=o.shaderMaterial({blur:0,map:null,sdf:null,blend:0,size:0,resolution:new m.Vector2},"varying vec2 vUv;\n void main() {\n gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\n vUv = uv;\n }",`uniform sampler2D sdf;\n uniform sampler2D map;\n uniform float blur;\n uniform float size;\n uniform float time;\n uniform vec2 resolution;\n varying vec2 vUv;\n #include <packing>\n void main() {\n vec2 uv = gl_FragCoord.xy / resolution.xy;\n vec4 t = texture2D(map, uv);\n float k = blur;\n float d = texture2D(sdf, vUv).r/size;\n float alpha = 1.0 - smoothstep(0.0, 1.0, clamp(d/k + 1.0, 0.0, 1.0));\n gl_FragColor = vec4(t.rgb, blur == 0.0 ? t.a : t.a * alpha);\n #include <tonemapping_fragment>\n #include <${s.version>=154?"colorspace_fragment":"encodings_fragment"}>\n }`),p=f.forwardRef((({children:e,events:r,blur:t=0,eventPriority:o=0,renderPriority:u=0,worldUnits:s=!1,resolution:v=512,...c},p)=>{n.extend({PortalMaterialImpl:g});const h=f.useRef(null),{scene:b,gl:y,size:w,viewport:M,setEvents:U}=n.useThree(),T=i.useFBO(v,v),[R,S]=f.useState(0);n.useFrame((()=>{const e=h.current.blend>0?Math.max(1,u):0;R!==e&&S(e)})),f.useEffect((()=>{void 0!==r&&U({enabled:!r})}),[r]);const[_,j]=f.useState(!0),D=a.useIntersect(j);f.useLayoutEffect((()=>{var e;D.current=null==(e=h.current)||null==(e=e.__r3f.parent)?void 0:e.object}),[]),f.useLayoutEffect((()=>{if(D.current&&t&&null===h.current.sdf){const e=new m.Mesh(D.current.geometry,new m.MeshBasicMaterial),r=(new m.Box3).setFromBufferAttribute(e.geometry.attributes.position),t=new m.OrthographicCamera(r.min.x*(1+2/v),r.max.x*(1+2/v),r.max.y*(1+2/v),r.min.y*(1+2/v),.1,1e3);t.position.set(0,0,1),t.lookAt(0,0,0),y.setRenderTarget(T),y.render(e,t);const n=F(v,v,y)(T.texture),a=new Float32Array(v*v);y.readRenderTargetPixels(n,0,0,v,v,a);let i=1/0;for(let e=0;e<a.length;e++)a[e]<i&&(i=a[e]);i=-i,h.current.size=i,h.current.sdf=n.texture,y.setRenderTarget(null)}}),[v,t]),f.useImperativeHandle(p,(()=>h.current));const P=f.useCallback(((e,r,t)=>{var n;if(!D.current)return!1;if(r.pointer.set(e.offsetX/r.size.width*2-1,-e.offsetY/r.size.height*2+1),r.raycaster.setFromCamera(r.pointer,r.camera),0===(null==(n=h.current)?void 0:n.blend)){const[e]=r.raycaster.intersectObject(D.current);if(!e)return r.raycaster.camera=void 0,!1}}),[]);return f.createElement("portalMaterialImpl",d.default({ref:h,blur:t,blend:0,resolution:[w.width*M.dpr,w.height*M.dpr],attach:"material"},c),f.createElement(l.RenderTexture,{attach:"map",frames:_?1/0:0,eventPriority:o,renderPriority:u,compute:P},e,f.createElement(x,{events:r,rootScene:b,priority:R,material:h,worldUnits:s})))}));function x({events:e,rootScene:r,material:t,priority:a,worldUnits:l}){const o=n.useThree((e=>e.scene)),v=n.useThree((e=>e.setEvents)),c=i.useFBO(),d=i.useFBO();f.useLayoutEffect((()=>{o.matrixAutoUpdate=!1}),[]),f.useEffect((()=>{void 0!==e&&v({enabled:e})}),[e]);const[g,p]=f.useMemo((()=>{const e={value:0};return[new u.FullScreenQuad(new m.ShaderMaterial({uniforms:{a:{value:c.texture},b:{value:d.texture},blend:e},vertexShader:"\n varying vec2 vUv;\n void main() {\n vUv = uv;\n gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n }",fragmentShader:`\n uniform sampler2D a;\n uniform sampler2D b;\n uniform float blend;\n varying vec2 vUv;\n #include <packing>\n void main() {\n vec4 ta = texture2D(a, vUv);\n vec4 tb = texture2D(b, vUv);\n gl_FragColor = mix(tb, ta, blend);\n #include <tonemapping_fragment>\n #include <${s.version>=154?"colorspace_fragment":"encodings_fragment"}>\n }`})),e]}),[]);return n.useFrame((e=>{var n;let i=null==t||null==(n=t.current)||null==(n=n.__r3f.parent)?void 0:n.object;if(i){var u,s,v,m;if(l)o.matrixWorld.identity();else a&&1===(null==(u=t.current)?void 0:u.blend)&&i.updateWorldMatrix(!0,!1),o.matrixWorld.copy(i.matrixWorld);if(a)(null==(s=t.current)?void 0:s.blend)>0&&(null==(v=t.current)?void 0:v.blend)<1?(p.value=t.current.blend,e.gl.setRenderTarget(c),e.gl.render(o,e.camera),e.gl.setRenderTarget(d),e.gl.render(r,e.camera),e.gl.setRenderTarget(null),g.render(e.gl)):1===(null==(m=t.current)?void 0:m.blend)&&e.gl.render(o,e.camera)}}),a),f.createElement(f.Fragment,null)}const F=(e,r,t)=>{let n=new m.WebGLRenderTarget(e,r,{minFilter:m.LinearMipmapLinearFilter,magFilter:m.LinearFilter,type:m.FloatType,format:m.RedFormat,generateMipmaps:!0}),a=new m.WebGLRenderTarget(e,r,{minFilter:m.NearestFilter,magFilter:m.NearestFilter}),i=new m.WebGLRenderTarget(e,r,{minFilter:m.NearestFilter,magFilter:m.NearestFilter}),l=new m.WebGLRenderTarget(e,r,{minFilter:m.NearestFilter,magFilter:m.NearestFilter}),o=new m.WebGLRenderTarget(e,r,{minFilter:m.NearestFilter,magFilter:m.NearestFilter}),s=new m.WebGLRenderTarget(e,r,{minFilter:m.NearestFilter,magFilter:m.NearestFilter,type:m.FloatType,format:m.RedFormat}),v=new m.WebGLRenderTarget(e,r,{minFilter:m.NearestFilter,magFilter:m.NearestFilter,type:m.FloatType,format:m.RedFormat});const c=new u.FullScreenQuad(new m.ShaderMaterial({uniforms:{tex:{value:null}},vertexShader:"\n varying vec2 vUv;\n void main() {\n vUv = uv;\n gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n }",fragmentShader:"\n uniform sampler2D tex;\n varying vec2 vUv;\n #include <packing>\n void main() {\n gl_FragColor = pack2HalfToRGBA(vUv * (round(texture2D(tex, vUv).x)));\n }"})),d=new u.FullScreenQuad(new m.ShaderMaterial({uniforms:{tex:{value:null}},vertexShader:"\n varying vec2 vUv;\n void main() {\n vUv = uv;\n gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n }",fragmentShader:"\n uniform sampler2D tex;\n varying vec2 vUv;\n #include <packing>\n void main() {\n gl_FragColor = pack2HalfToRGBA(vUv * (1.0 - round(texture2D(tex, vUv).x)));\n }"})),f=new u.FullScreenQuad(new m.ShaderMaterial({uniforms:{tex:{value:null},offset:{value:0},level:{value:0},maxSteps:{value:0}},vertexShader:"\n varying vec2 vUv;\n void main() {\n vUv = uv;\n gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n }",fragmentShader:`\n varying vec2 vUv;\n uniform sampler2D tex;\n uniform float offset;\n uniform float level;\n uniform float maxSteps;\n #include <packing>\n void main() {\n float closestDist = 9999999.9;\n vec2 closestPos = vec2(0.0);\n for (float x = -1.0; x <= 1.0; x += 1.0) {\n for (float y = -1.0; y <= 1.0; y += 1.0) {\n vec2 voffset = vUv;\n voffset += vec2(x, y) * vec2(${1/e}, ${1/r}) * offset;\n vec2 pos = unpackRGBATo2Half(texture2D(tex, voffset));\n float dist = distance(pos.xy, vUv);\n if(pos.x != 0.0 && pos.y != 0.0 && dist < closestDist) {\n closestDist = dist;\n closestPos = pos;\n }\n }\n }\n gl_FragColor = pack2HalfToRGBA(closestPos);\n }`})),g=new u.FullScreenQuad(new m.ShaderMaterial({uniforms:{tex:{value:null},size:{value:new m.Vector2(e,r)}},vertexShader:"\n varying vec2 vUv;\n void main() {\n vUv = uv;\n gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n }",fragmentShader:"\n varying vec2 vUv;\n uniform sampler2D tex;\n uniform vec2 size;\n #include <packing>\n void main() {\n gl_FragColor = vec4(distance(size * unpackRGBATo2Half(texture2D(tex, vUv)), size * vUv), 0.0, 0.0, 0.0);\n }"})),p=new u.FullScreenQuad(new m.ShaderMaterial({uniforms:{inside:{value:v.texture},outside:{value:s.texture},tex:{value:null}},vertexShader:"\n varying vec2 vUv;\n void main() {\n vUv = uv;\n gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n }",fragmentShader:"\n varying vec2 vUv;\n uniform sampler2D inside;\n uniform sampler2D outside;\n uniform sampler2D tex;\n #include <packing>\n void main() {\n float i = texture2D(inside, vUv).x;\n float o =texture2D(outside, vUv).x;\n if (texture2D(tex, vUv).x == 0.0) {\n gl_FragColor = vec4(o, 0.0, 0.0, 0.0);\n } else {\n gl_FragColor = vec4(-i, 0.0, 0.0, 0.0);\n }\n }"}));return u=>{let x=n;u.minFilter=m.NearestFilter,u.magFilter=m.NearestFilter,c.material.uniforms.tex.value=u,t.setRenderTarget(a),c.render(t);const F=Math.ceil(Math.log(Math.max(e,r))/Math.log(2));let h=a,b=null;for(let e=0;e<F;e++){const r=Math.pow(2,F-e-1);b=h===a?l:a,f.material.uniforms.level.value=e,f.material.uniforms.maxSteps.value=F,f.material.uniforms.offset.value=r,f.material.uniforms.tex.value=h.texture,t.setRenderTarget(b),f.render(t),h=b}t.setRenderTarget(s),g.material.uniforms.tex.value=b.texture,g.render(t),d.material.uniforms.tex.value=u,t.setRenderTarget(i),d.render(t),h=i;for(let e=0;e<F;e++){const r=Math.pow(2,F-e-1);b=h===i?o:i,f.material.uniforms.level.value=e,f.material.uniforms.maxSteps.value=F,f.material.uniforms.offset.value=r,f.material.uniforms.tex.value=h.texture,t.setRenderTarget(b),f.render(t),h=b}return t.setRenderTarget(v),g.material.uniforms.tex.value=b.texture,g.render(t),t.setRenderTarget(x),p.material.uniforms.tex.value=u,p.render(t),t.setRenderTarget(null),x}};exports.MeshPortalMaterial=p;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/extends"),r=require("three"),t=require("react"),n=require("@react-three/fiber"),a=require("./useIntersect.cjs.js"),i=require("./Fbo.cjs.js"),l=require("./RenderTexture.cjs.js"),o=require("./shaderMaterial.cjs.js"),u=require("three-stdlib"),s=require("../helpers/constants.cjs.js");function v(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}function c(e){if(e&&e.__esModule)return e;var r=Object.create(null);return e&&Object.keys(e).forEach((function(t){if("default"!==t){var n=Object.getOwnPropertyDescriptor(e,t);Object.defineProperty(r,t,n.get?n:{enumerable:!0,get:function(){return e[t]}})}})),r.default=e,Object.freeze(r)}var d=v(e),m=c(r),f=c(t);const g=o.shaderMaterial({blur:0,map:null,sdf:null,blend:0,size:0,resolution:new m.Vector2},"varying vec2 vUv;\n void main() {\n gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\n vUv = uv;\n }",`uniform sampler2D sdf;\n uniform sampler2D map;\n uniform float blur;\n uniform float size;\n uniform float time;\n uniform vec2 resolution;\n varying vec2 vUv;\n #include <packing>\n void main() {\n vec2 uv = gl_FragCoord.xy / resolution.xy;\n vec4 t = texture2D(map, uv);\n float k = blur;\n float d = texture2D(sdf, vUv).r/size;\n float alpha = 1.0 - smoothstep(0.0, 1.0, clamp(d/k + 1.0, 0.0, 1.0));\n gl_FragColor = vec4(t.rgb, blur == 0.0 ? t.a : t.a * alpha);\n #include <tonemapping_fragment>\n #include <${s.version>=154?"colorspace_fragment":"encodings_fragment"}>\n }`),p=f.forwardRef((({children:e,events:r,blur:t=0,eventPriority:o=0,renderPriority:u=0,worldUnits:s=!1,resolution:v=512,...c},p)=>{n.extend({PortalMaterialImpl:g});const h=f.useRef(null),{scene:y,gl:b,size:w,viewport:M,setEvents:U}=n.useThree(),T=i.useFBO(v,v),[R,S]=f.useState(0);n.useFrame((()=>{const e=h.current.blend>0?Math.max(1,u):0;R!==e&&S(e)})),f.useEffect((()=>{void 0!==r&&U({enabled:!r})}),[r]);const[_,D]=f.useState(!0),j=a.useIntersect(D);f.useLayoutEffect((()=>{var e;j.current=null==(e=h.current)?void 0:e.__r3f.parent}),[]),f.useLayoutEffect((()=>{if(j.current&&t&&null===h.current.sdf){const e=new m.Mesh(j.current.geometry,new m.MeshBasicMaterial),r=(new m.Box3).setFromBufferAttribute(e.geometry.attributes.position),t=new m.OrthographicCamera(r.min.x*(1+2/v),r.max.x*(1+2/v),r.max.y*(1+2/v),r.min.y*(1+2/v),.1,1e3);t.position.set(0,0,1),t.lookAt(0,0,0),b.setRenderTarget(T),b.render(e,t);const n=F(v,v,b)(T.texture),a=new Float32Array(v*v);b.readRenderTargetPixels(n,0,0,v,v,a);let i=1/0;for(let e=0;e<a.length;e++)a[e]<i&&(i=a[e]);i=-i,h.current.size=i,h.current.sdf=n.texture,b.setRenderTarget(null)}}),[v,t]),f.useImperativeHandle(p,(()=>h.current));const P=f.useCallback(((e,r,t)=>{var n;if(!j.current)return!1;if(r.pointer.set(e.offsetX/r.size.width*2-1,-e.offsetY/r.size.height*2+1),r.raycaster.setFromCamera(r.pointer,r.camera),0===(null==(n=h.current)?void 0:n.blend)){const[e]=r.raycaster.intersectObject(j.current);if(!e)return r.raycaster.camera=void 0,!1}}),[]);return f.createElement("portalMaterialImpl",d.default({ref:h,blur:t,blend:0,resolution:[w.width*M.dpr,w.height*M.dpr],attach:"material"},c),f.createElement(l.RenderTexture,{attach:"map",frames:_?1/0:0,eventPriority:o,renderPriority:u,compute:P},e,f.createElement(x,{events:r,rootScene:y,priority:R,material:h,worldUnits:s})))}));function x({events:e,rootScene:r,material:t,priority:a,worldUnits:l}){const o=n.useThree((e=>e.scene)),v=n.useThree((e=>e.setEvents)),c=i.useFBO(),d=i.useFBO();f.useLayoutEffect((()=>{o.matrixAutoUpdate=!1}),[]),f.useEffect((()=>{void 0!==e&&v({enabled:e})}),[e]);const[g,p]=f.useMemo((()=>{const e={value:0};return[new u.FullScreenQuad(new m.ShaderMaterial({uniforms:{a:{value:c.texture},b:{value:d.texture},blend:e},vertexShader:"\n varying vec2 vUv;\n void main() {\n vUv = uv;\n gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n }",fragmentShader:`\n uniform sampler2D a;\n uniform sampler2D b;\n uniform float blend;\n varying vec2 vUv;\n #include <packing>\n void main() {\n vec4 ta = texture2D(a, vUv);\n vec4 tb = texture2D(b, vUv);\n gl_FragColor = mix(tb, ta, blend);\n #include <tonemapping_fragment>\n #include <${s.version>=154?"colorspace_fragment":"encodings_fragment"}>\n }`})),e]}),[]);return n.useFrame((e=>{var n;let i=null==t||null==(n=t.current)?void 0:n.__r3f.parent;if(i){var u,s,v,m;if(l)o.matrixWorld.identity();else a&&1===(null==(u=t.current)?void 0:u.blend)&&i.updateWorldMatrix(!0,!1),o.matrixWorld.copy(i.matrixWorld);if(a)(null==(s=t.current)?void 0:s.blend)>0&&(null==(v=t.current)?void 0:v.blend)<1?(p.value=t.current.blend,e.gl.setRenderTarget(c),e.gl.render(o,e.camera),e.gl.setRenderTarget(d),e.gl.render(r,e.camera),e.gl.setRenderTarget(null),g.render(e.gl)):1===(null==(m=t.current)?void 0:m.blend)&&e.gl.render(o,e.camera)}}),a),f.createElement(f.Fragment,null)}const F=(e,r,t)=>{let n=new m.WebGLRenderTarget(e,r,{minFilter:m.LinearMipmapLinearFilter,magFilter:m.LinearFilter,type:m.FloatType,format:m.RedFormat,generateMipmaps:!0}),a=new m.WebGLRenderTarget(e,r,{minFilter:m.NearestFilter,magFilter:m.NearestFilter}),i=new m.WebGLRenderTarget(e,r,{minFilter:m.NearestFilter,magFilter:m.NearestFilter}),l=new m.WebGLRenderTarget(e,r,{minFilter:m.NearestFilter,magFilter:m.NearestFilter}),o=new m.WebGLRenderTarget(e,r,{minFilter:m.NearestFilter,magFilter:m.NearestFilter}),s=new m.WebGLRenderTarget(e,r,{minFilter:m.NearestFilter,magFilter:m.NearestFilter,type:m.FloatType,format:m.RedFormat}),v=new m.WebGLRenderTarget(e,r,{minFilter:m.NearestFilter,magFilter:m.NearestFilter,type:m.FloatType,format:m.RedFormat});const c=new u.FullScreenQuad(new m.ShaderMaterial({uniforms:{tex:{value:null}},vertexShader:"\n varying vec2 vUv;\n void main() {\n vUv = uv;\n gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n }",fragmentShader:"\n uniform sampler2D tex;\n varying vec2 vUv;\n #include <packing>\n void main() {\n gl_FragColor = pack2HalfToRGBA(vUv * (round(texture2D(tex, vUv).x)));\n }"})),d=new u.FullScreenQuad(new m.ShaderMaterial({uniforms:{tex:{value:null}},vertexShader:"\n varying vec2 vUv;\n void main() {\n vUv = uv;\n gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n }",fragmentShader:"\n uniform sampler2D tex;\n varying vec2 vUv;\n #include <packing>\n void main() {\n gl_FragColor = pack2HalfToRGBA(vUv * (1.0 - round(texture2D(tex, vUv).x)));\n }"})),f=new u.FullScreenQuad(new m.ShaderMaterial({uniforms:{tex:{value:null},offset:{value:0},level:{value:0},maxSteps:{value:0}},vertexShader:"\n varying vec2 vUv;\n void main() {\n vUv = uv;\n gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n }",fragmentShader:`\n varying vec2 vUv;\n uniform sampler2D tex;\n uniform float offset;\n uniform float level;\n uniform float maxSteps;\n #include <packing>\n void main() {\n float closestDist = 9999999.9;\n vec2 closestPos = vec2(0.0);\n for (float x = -1.0; x <= 1.0; x += 1.0) {\n for (float y = -1.0; y <= 1.0; y += 1.0) {\n vec2 voffset = vUv;\n voffset += vec2(x, y) * vec2(${1/e}, ${1/r}) * offset;\n vec2 pos = unpackRGBATo2Half(texture2D(tex, voffset));\n float dist = distance(pos.xy, vUv);\n if(pos.x != 0.0 && pos.y != 0.0 && dist < closestDist) {\n closestDist = dist;\n closestPos = pos;\n }\n }\n }\n gl_FragColor = pack2HalfToRGBA(closestPos);\n }`})),g=new u.FullScreenQuad(new m.ShaderMaterial({uniforms:{tex:{value:null},size:{value:new m.Vector2(e,r)}},vertexShader:"\n varying vec2 vUv;\n void main() {\n vUv = uv;\n gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n }",fragmentShader:"\n varying vec2 vUv;\n uniform sampler2D tex;\n uniform vec2 size;\n #include <packing>\n void main() {\n gl_FragColor = vec4(distance(size * unpackRGBATo2Half(texture2D(tex, vUv)), size * vUv), 0.0, 0.0, 0.0);\n }"})),p=new u.FullScreenQuad(new m.ShaderMaterial({uniforms:{inside:{value:v.texture},outside:{value:s.texture},tex:{value:null}},vertexShader:"\n varying vec2 vUv;\n void main() {\n vUv = uv;\n gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n }",fragmentShader:"\n varying vec2 vUv;\n uniform sampler2D inside;\n uniform sampler2D outside;\n uniform sampler2D tex;\n #include <packing>\n void main() {\n float i = texture2D(inside, vUv).x;\n float o =texture2D(outside, vUv).x;\n if (texture2D(tex, vUv).x == 0.0) {\n gl_FragColor = vec4(o, 0.0, 0.0, 0.0);\n } else {\n gl_FragColor = vec4(-i, 0.0, 0.0, 0.0);\n }\n }"}));return u=>{let x=n;u.minFilter=m.NearestFilter,u.magFilter=m.NearestFilter,c.material.uniforms.tex.value=u,t.setRenderTarget(a),c.render(t);const F=Math.ceil(Math.log(Math.max(e,r))/Math.log(2));let h=a,y=null;for(let e=0;e<F;e++){const r=Math.pow(2,F-e-1);y=h===a?l:a,f.material.uniforms.level.value=e,f.material.uniforms.maxSteps.value=F,f.material.uniforms.offset.value=r,f.material.uniforms.tex.value=h.texture,t.setRenderTarget(y),f.render(t),h=y}t.setRenderTarget(s),g.material.uniforms.tex.value=y.texture,g.render(t),d.material.uniforms.tex.value=u,t.setRenderTarget(i),d.render(t),h=i;for(let e=0;e<F;e++){const r=Math.pow(2,F-e-1);y=h===i?o:i,f.material.uniforms.level.value=e,f.material.uniforms.maxSteps.value=F,f.material.uniforms.offset.value=r,f.material.uniforms.tex.value=h.texture,t.setRenderTarget(y),f.render(t),h=y}return t.setRenderTarget(v),g.material.uniforms.tex.value=y.texture,g.render(t),t.setRenderTarget(x),p.material.uniforms.tex.value=u,p.render(t),t.setRenderTarget(null),x}};exports.MeshPortalMaterial=p;
@@ -1,19 +1,22 @@
1
1
  import * as THREE from 'three';
2
- import { ReactThreeFiber, ThreeElements } from '@react-three/fiber';
3
- import { ForwardRefComponent } from '../helpers/ts-utils';
4
- declare module '@react-three/fiber' {
5
- interface ThreeElements {
6
- portalMaterialImpl: ThreeElements['shaderMaterial'] & {
7
- resolution: ReactThreeFiber.Vector2;
8
- blur: number;
9
- blend: number;
10
- size?: number;
11
- sdf?: THREE.Texture;
12
- map?: THREE.Texture;
13
- };
2
+ import * as React from 'react';
3
+ import { ReactThreeFiber } from '@react-three/fiber';
4
+ export type PortalMaterialType = {
5
+ resolution: ReactThreeFiber.Vector2;
6
+ blur: number;
7
+ blend: number;
8
+ size?: number;
9
+ sdf?: THREE.Texture;
10
+ map?: THREE.Texture;
11
+ } & JSX.IntrinsicElements['shaderMaterial'];
12
+ declare global {
13
+ namespace JSX {
14
+ interface IntrinsicElements {
15
+ portalMaterialImpl: PortalMaterialType;
16
+ }
14
17
  }
15
18
  }
16
- export type PortalProps = Omit<ThreeElements['portalMaterialImpl'], 'ref' | 'blend'> & {
19
+ export type PortalProps = JSX.IntrinsicElements['shaderMaterial'] & {
17
20
  blend?: number;
18
21
  blur?: number;
19
22
  resolution?: number;
@@ -22,4 +25,4 @@ export type PortalProps = Omit<ThreeElements['portalMaterialImpl'], 'ref' | 'ble
22
25
  renderPriority?: number;
23
26
  events?: boolean;
24
27
  };
25
- export declare const MeshPortalMaterial: ForwardRefComponent<PortalProps, ThreeElements['portalMaterialImpl']>;
28
+ export declare const MeshPortalMaterial: React.ForwardRefExoticComponent<Omit<PortalProps, "ref"> & React.RefAttributes<PortalMaterialType>>;
@@ -78,7 +78,7 @@ const MeshPortalMaterial = /* @__PURE__ */React.forwardRef(({
78
78
  var _ref$current;
79
79
  // Since the ref above is not tied to a mesh directly (we're inside a material),
80
80
  // it has to be tied to the parent mesh here
81
- parent.current = (_ref$current = ref.current) == null || (_ref$current = _ref$current.__r3f.parent) == null ? void 0 : _ref$current.object;
81
+ parent.current = (_ref$current = ref.current) == null ? void 0 : _ref$current.__r3f.parent;
82
82
  }, []);
83
83
  React.useLayoutEffect(() => {
84
84
  if (!parent.current) return;
@@ -201,7 +201,7 @@ function ManagePortalScene({
201
201
  }, []);
202
202
  useFrame(state => {
203
203
  var _material$current;
204
- let parent = material == null || (_material$current = material.current) == null || (_material$current = _material$current.__r3f.parent) == null ? void 0 : _material$current.object;
204
+ let parent = material == null || (_material$current = material.current) == null ? void 0 : _material$current.__r3f.parent;
205
205
  if (parent) {
206
206
  // Move portal contents along with the parent if worldUnits is true
207
207
  if (!worldUnits) {
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/extends"),t=require("react"),r=require("three"),a=require("@react-three/fiber"),n=require("../materials/BlurPass.cjs.js"),o=require("../materials/MeshReflectorMaterial.cjs.js");function s(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}function i(e){if(e&&e.__esModule)return e;var t=Object.create(null);return e&&Object.keys(e).forEach((function(r){if("default"!==r){var a=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(t,r,a.get?a:{enumerable:!0,get:function(){return e[r]}})}})),t.default=e,Object.freeze(t)}require("../materials/ConvolutionMaterial.cjs.js"),require("../helpers/constants.cjs.js");var l=s(e),u=i(t);const d=u.forwardRef((({mixBlur:e=0,mixStrength:t=1,resolution:s=256,blur:i=[0,0],minDepthThreshold:d=.9,maxDepthThreshold:c=1,depthScale:p=0,depthToBlurRatioBias:m=.25,mirror:h=0,distortion:f=1,mixContrast:x=1,distortionMap:M,reflectorOffset:T=0,...S},y)=>{a.extend({MeshReflectorMaterialImpl:o.MeshReflectorMaterial});const b=a.useThree((({gl:e})=>e)),w=a.useThree((({camera:e})=>e)),j=a.useThree((({scene:e})=>e)),R=(i=Array.isArray(i)?i:[i,i])[0]+i[1]>0,v=u.useRef(null);u.useImperativeHandle(y,(()=>v.current),[]);const[g]=u.useState((()=>new r.Plane)),[D]=u.useState((()=>new r.Vector3)),[B]=u.useState((()=>new r.Vector3)),[_]=u.useState((()=>new r.Vector3)),[O]=u.useState((()=>new r.Matrix4)),[P]=u.useState((()=>new r.Vector3(0,0,-1))),[U]=u.useState((()=>new r.Vector4)),[V]=u.useState((()=>new r.Vector3)),[E]=u.useState((()=>new r.Vector3)),[F]=u.useState((()=>new r.Vector4)),[W]=u.useState((()=>new r.Matrix4)),[I]=u.useState((()=>new r.PerspectiveCamera)),q=u.useCallback((()=>{var e;const t=v.current.parent||(null==(e=v.current)||null==(e=e.__r3f.parent)?void 0:e.object);if(!t)return;if(B.setFromMatrixPosition(t.matrixWorld),_.setFromMatrixPosition(w.matrixWorld),O.extractRotation(t.matrixWorld),D.set(0,0,1),D.applyMatrix4(O),B.addScaledVector(D,T),V.subVectors(B,_),V.dot(D)>0)return;V.reflect(D).negate(),V.add(B),O.extractRotation(w.matrixWorld),P.set(0,0,-1),P.applyMatrix4(O),P.add(_),E.subVectors(B,P),E.reflect(D).negate(),E.add(B),I.position.copy(V),I.up.set(0,1,0),I.up.applyMatrix4(O),I.up.reflect(D),I.lookAt(E),I.far=w.far,I.updateMatrixWorld(),I.projectionMatrix.copy(w.projectionMatrix),W.set(.5,0,0,.5,0,.5,0,.5,0,0,.5,.5,0,0,0,1),W.multiply(I.projectionMatrix),W.multiply(I.matrixWorldInverse),W.multiply(t.matrixWorld),g.setFromNormalAndCoplanarPoint(D,B),g.applyMatrix4(I.matrixWorldInverse),U.set(g.normal.x,g.normal.y,g.normal.z,g.constant);const r=I.projectionMatrix;F.x=(Math.sign(U.x)+r.elements[8])/r.elements[0],F.y=(Math.sign(U.y)+r.elements[9])/r.elements[5],F.z=-1,F.w=(1+r.elements[10])/r.elements[14],U.multiplyScalar(2/U.dot(F)),r.elements[2]=U.x,r.elements[6]=U.y,r.elements[10]=U.z+1,r.elements[14]=U.w}),[w,T]),[C,k,L,z]=u.useMemo((()=>{const a={minFilter:r.LinearFilter,magFilter:r.LinearFilter,type:r.HalfFloatType},o=new r.WebGLRenderTarget(s,s,a);o.depthBuffer=!0,o.depthTexture=new r.DepthTexture(s,s),o.depthTexture.format=r.DepthFormat,o.depthTexture.type=r.UnsignedShortType;const l=new r.WebGLRenderTarget(s,s,a);return[o,l,new n.BlurPass({gl:b,resolution:s,width:i[0],height:i[1],minDepthThreshold:d,maxDepthThreshold:c,depthScale:p,depthToBlurRatioBias:m}),{mirror:h,textureMatrix:W,mixBlur:e,tDiffuse:o.texture,tDepth:o.depthTexture,tDiffuseBlur:l.texture,hasBlur:R,mixStrength:t,minDepthThreshold:d,maxDepthThreshold:c,depthScale:p,depthToBlurRatioBias:m,distortion:f,distortionMap:M,mixContrast:x,"defines-USE_BLUR":R?"":void 0,"defines-USE_DEPTH":p>0?"":void 0,"defines-USE_DISTORTION":M?"":void 0}]}),[b,i,W,s,h,R,e,t,d,c,p,m,f,M,x]);return a.useFrame((()=>{var e;const t=v.current.parent||(null==(e=v.current)||null==(e=e.__r3f.parent)?void 0:e.object);if(!t)return;t.visible=!1;const r=b.xr.enabled,a=b.shadowMap.autoUpdate;q(),b.xr.enabled=!1,b.shadowMap.autoUpdate=!1,b.setRenderTarget(C),b.state.buffers.depth.setMask(!0),b.autoClear||b.clear(),b.render(j,I),R&&L.render(b,C,k),b.xr.enabled=r,b.shadowMap.autoUpdate=a,t.visible=!0,b.setRenderTarget(null)})),u.createElement("meshReflectorMaterialImpl",l.default({attach:"material",key:"key"+z["defines-USE_BLUR"]+z["defines-USE_DEPTH"]+z["defines-USE_DISTORTION"],ref:v},z,S))}));exports.MeshReflectorMaterial=d;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/extends"),t=require("react"),r=require("three"),a=require("@react-three/fiber"),n=require("../materials/BlurPass.cjs.js"),s=require("../materials/MeshReflectorMaterial.cjs.js");function o(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}function i(e){if(e&&e.__esModule)return e;var t=Object.create(null);return e&&Object.keys(e).forEach((function(r){if("default"!==r){var a=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(t,r,a.get?a:{enumerable:!0,get:function(){return e[r]}})}})),t.default=e,Object.freeze(t)}require("../materials/ConvolutionMaterial.cjs.js"),require("../helpers/constants.cjs.js");var l=o(e),u=i(t);const d=u.forwardRef((({mixBlur:e=0,mixStrength:t=1,resolution:o=256,blur:i=[0,0],minDepthThreshold:d=.9,maxDepthThreshold:c=1,depthScale:p=0,depthToBlurRatioBias:m=.25,mirror:h=0,distortion:f=1,mixContrast:x=1,distortionMap:M,reflectorOffset:T=0,...S},y)=>{a.extend({MeshReflectorMaterialImpl:s.MeshReflectorMaterial});const w=a.useThree((({gl:e})=>e)),b=a.useThree((({camera:e})=>e)),R=a.useThree((({scene:e})=>e)),j=(i=Array.isArray(i)?i:[i,i])[0]+i[1]>0,v=u.useRef(null);u.useImperativeHandle(y,(()=>v.current),[]);const[g]=u.useState((()=>new r.Plane)),[D]=u.useState((()=>new r.Vector3)),[B]=u.useState((()=>new r.Vector3)),[_]=u.useState((()=>new r.Vector3)),[O]=u.useState((()=>new r.Matrix4)),[P]=u.useState((()=>new r.Vector3(0,0,-1))),[U]=u.useState((()=>new r.Vector4)),[V]=u.useState((()=>new r.Vector3)),[E]=u.useState((()=>new r.Vector3)),[F]=u.useState((()=>new r.Vector4)),[W]=u.useState((()=>new r.Matrix4)),[I]=u.useState((()=>new r.PerspectiveCamera)),q=u.useCallback((()=>{var e;const t=v.current.parent||(null==(e=v.current)?void 0:e.__r3f.parent);if(!t)return;if(B.setFromMatrixPosition(t.matrixWorld),_.setFromMatrixPosition(b.matrixWorld),O.extractRotation(t.matrixWorld),D.set(0,0,1),D.applyMatrix4(O),B.addScaledVector(D,T),V.subVectors(B,_),V.dot(D)>0)return;V.reflect(D).negate(),V.add(B),O.extractRotation(b.matrixWorld),P.set(0,0,-1),P.applyMatrix4(O),P.add(_),E.subVectors(B,P),E.reflect(D).negate(),E.add(B),I.position.copy(V),I.up.set(0,1,0),I.up.applyMatrix4(O),I.up.reflect(D),I.lookAt(E),I.far=b.far,I.updateMatrixWorld(),I.projectionMatrix.copy(b.projectionMatrix),W.set(.5,0,0,.5,0,.5,0,.5,0,0,.5,.5,0,0,0,1),W.multiply(I.projectionMatrix),W.multiply(I.matrixWorldInverse),W.multiply(t.matrixWorld),g.setFromNormalAndCoplanarPoint(D,B),g.applyMatrix4(I.matrixWorldInverse),U.set(g.normal.x,g.normal.y,g.normal.z,g.constant);const r=I.projectionMatrix;F.x=(Math.sign(U.x)+r.elements[8])/r.elements[0],F.y=(Math.sign(U.y)+r.elements[9])/r.elements[5],F.z=-1,F.w=(1+r.elements[10])/r.elements[14],U.multiplyScalar(2/U.dot(F)),r.elements[2]=U.x,r.elements[6]=U.y,r.elements[10]=U.z+1,r.elements[14]=U.w}),[b,T]),[C,k,L,z]=u.useMemo((()=>{const a={minFilter:r.LinearFilter,magFilter:r.LinearFilter,type:r.HalfFloatType},s=new r.WebGLRenderTarget(o,o,a);s.depthBuffer=!0,s.depthTexture=new r.DepthTexture(o,o),s.depthTexture.format=r.DepthFormat,s.depthTexture.type=r.UnsignedShortType;const l=new r.WebGLRenderTarget(o,o,a);return[s,l,new n.BlurPass({gl:w,resolution:o,width:i[0],height:i[1],minDepthThreshold:d,maxDepthThreshold:c,depthScale:p,depthToBlurRatioBias:m}),{mirror:h,textureMatrix:W,mixBlur:e,tDiffuse:s.texture,tDepth:s.depthTexture,tDiffuseBlur:l.texture,hasBlur:j,mixStrength:t,minDepthThreshold:d,maxDepthThreshold:c,depthScale:p,depthToBlurRatioBias:m,distortion:f,distortionMap:M,mixContrast:x,"defines-USE_BLUR":j?"":void 0,"defines-USE_DEPTH":p>0?"":void 0,"defines-USE_DISTORTION":M?"":void 0}]}),[w,i,W,o,h,j,e,t,d,c,p,m,f,M,x]);return a.useFrame((()=>{var e;const t=v.current.parent||(null==(e=v.current)?void 0:e.__r3f.parent);if(!t)return;t.visible=!1;const r=w.xr.enabled,a=w.shadowMap.autoUpdate;q(),w.xr.enabled=!1,w.shadowMap.autoUpdate=!1,w.setRenderTarget(C),w.state.buffers.depth.setMask(!0),w.autoClear||w.clear(),w.render(R,I),j&&L.render(w,C,k),w.xr.enabled=r,w.shadowMap.autoUpdate=a,t.visible=!0,w.setRenderTarget(null)})),u.createElement("meshReflectorMaterialImpl",l.default({attach:"material",key:"key"+z["defines-USE_BLUR"]+z["defines-USE_DEPTH"]+z["defines-USE_DISTORTION"],ref:v},z,S))}));exports.MeshReflectorMaterial=d;
@@ -1,14 +1,27 @@
1
- import { ThreeElements, ThreeElement } from '@react-three/fiber';
2
- import { MeshReflectorMaterial as MeshReflectorMaterialImpl } from '../materials/MeshReflectorMaterial';
1
+ import { Texture } from 'three';
2
+ import { MeshReflectorMaterialProps, MeshReflectorMaterial as MeshReflectorMaterialImpl } from '../materials/MeshReflectorMaterial';
3
3
  import { ForwardRefComponent } from '../helpers/ts-utils';
4
- declare module '@react-three/fiber' {
5
- interface ThreeElements {
6
- meshReflectorMaterialImpl: ThreeElement<typeof MeshReflectorMaterialImpl>;
7
- }
8
- }
9
- export type MeshReflectorMaterialProps = ThreeElements['meshReflectorMaterialImpl'] & {
4
+ type Props = JSX.IntrinsicElements['meshStandardMaterial'] & {
10
5
  resolution?: number;
6
+ mixBlur?: number;
7
+ mixStrength?: number;
11
8
  blur?: [number, number] | number;
9
+ mirror: number;
10
+ minDepthThreshold?: number;
11
+ maxDepthThreshold?: number;
12
+ depthScale?: number;
13
+ depthToBlurRatioBias?: number;
14
+ distortionMap?: Texture;
15
+ distortion?: number;
16
+ mixContrast?: number;
12
17
  reflectorOffset?: number;
13
18
  };
14
- export declare const MeshReflectorMaterial: ForwardRefComponent<MeshReflectorMaterialProps, MeshReflectorMaterialImpl>;
19
+ declare global {
20
+ namespace JSX {
21
+ interface IntrinsicElements {
22
+ meshReflectorMaterialImpl: MeshReflectorMaterialProps;
23
+ }
24
+ }
25
+ }
26
+ export declare const MeshReflectorMaterial: ForwardRefComponent<Props, MeshReflectorMaterialImpl>;
27
+ export {};
@@ -51,7 +51,8 @@ const MeshReflectorMaterial = /* @__PURE__ */React.forwardRef(({
51
51
  const [virtualCamera] = React.useState(() => new PerspectiveCamera());
52
52
  const beforeRender = React.useCallback(() => {
53
53
  var _materialRef$current;
54
- const parent = materialRef.current.parent || ((_materialRef$current = materialRef.current) == null || (_materialRef$current = _materialRef$current.__r3f.parent) == null ? void 0 : _materialRef$current.object);
54
+ // TODO: As of R3f 7-8 this should be __r3f.parent
55
+ const parent = materialRef.current.parent || ((_materialRef$current = materialRef.current) == null ? void 0 : _materialRef$current.__r3f.parent);
55
56
  if (!parent) return;
56
57
  reflectorWorldPosition.setFromMatrixPosition(parent.matrixWorld);
57
58
  cameraWorldPosition.setFromMatrixPosition(camera.matrixWorld);
@@ -148,7 +149,8 @@ const MeshReflectorMaterial = /* @__PURE__ */React.forwardRef(({
148
149
  }, [gl, blur, textureMatrix, resolution, mirror, hasBlur, mixBlur, mixStrength, minDepthThreshold, maxDepthThreshold, depthScale, depthToBlurRatioBias, distortion, distortionMap, mixContrast]);
149
150
  useFrame(() => {
150
151
  var _materialRef$current2;
151
- const parent = materialRef.current.parent || ((_materialRef$current2 = materialRef.current) == null || (_materialRef$current2 = _materialRef$current2.__r3f.parent) == null ? void 0 : _materialRef$current2.object);
152
+ // TODO: As of R3f 7-8 this should be __r3f.parent
153
+ const parent = materialRef.current.parent || ((_materialRef$current2 = materialRef.current) == null ? void 0 : _materialRef$current2.__r3f.parent);
152
154
  if (!parent) return;
153
155
  parent.visible = false;
154
156
  const currentXrEnabled = gl.xr.enabled;
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/extends"),r=require("react"),t=require("@react-three/fiber"),n=require("three-mesh-bvh"),a=require("../materials/MeshRefractionMaterial.cjs.js");function i(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}function u(e){if(e&&e.__esModule)return e;var r=Object.create(null);return e&&Object.keys(e).forEach((function(t){if("default"!==t){var n=Object.getOwnPropertyDescriptor(e,t);Object.defineProperty(r,t,n.get?n:{enumerable:!0,get:function(){return e[t]}})}})),r.default=e,Object.freeze(r)}require("three"),require("./shaderMaterial.cjs.js"),require("../helpers/constants.cjs.js");var o=i(e),s=u(r);exports.MeshRefractionMaterial=function({aberrationStrength:e=0,fastChroma:i=!0,envMap:u,...c}){t.extend({MeshRefractionMaterial:a.MeshRefractionMaterial});const l=r.useRef(null),{size:f}=t.useThree(),h=r.useMemo((()=>{var r,t;const n={},a=(o=u)&&o.isCubeTexture;var o;const s=(null!==(r=a?null==(t=u.image[0])?void 0:t.width:u.image.width)&&void 0!==r?r:1024)/4,c=Math.floor(Math.log2(s)),l=Math.pow(2,c),f=3*Math.max(l,112),h=4*l;return a&&(n.ENVMAP_TYPE_CUBEM=""),n.CUBEUV_TEXEL_WIDTH=""+1/f,n.CUBEUV_TEXEL_HEIGHT=""+1/h,n.CUBEUV_MAX_MIP=`${c}.0`,e>0&&(n.CHROMATIC_ABERRATIONS=""),i&&(n.FAST_CHROMA=""),n}),[e,i]);return r.useLayoutEffect((()=>{var e;const r=null==(e=l.current)||null==(e=e.__r3f)||null==(e=e.parent)||null==(e=e.object)?void 0:e.geometry;r&&(l.current.bvh=new n.MeshBVHUniformStruct,l.current.bvh.updateFrom(new n.MeshBVH(r.clone().toNonIndexed(),{strategy:n.SAH})))}),[]),t.useFrame((({camera:e})=>{l.current.viewMatrixInverse=e.matrixWorld,l.current.projectionMatrixInverse=e.projectionMatrixInverse})),s.createElement("meshRefractionMaterial",o.default({key:JSON.stringify(h),defines:h,ref:l,resolution:[f.width,f.height],aberrationStrength:e,envMap:u},c))};
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/extends"),r=require("react"),t=require("@react-three/fiber"),n=require("three-mesh-bvh"),a=require("../materials/MeshRefractionMaterial.cjs.js");function i(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}function u(e){if(e&&e.__esModule)return e;var r=Object.create(null);return e&&Object.keys(e).forEach((function(t){if("default"!==t){var n=Object.getOwnPropertyDescriptor(e,t);Object.defineProperty(r,t,n.get?n:{enumerable:!0,get:function(){return e[t]}})}})),r.default=e,Object.freeze(r)}require("three"),require("./shaderMaterial.cjs.js"),require("../helpers/constants.cjs.js");var o=i(e),s=u(r);exports.MeshRefractionMaterial=function({aberrationStrength:e=0,fastChroma:i=!0,envMap:u,...c}){t.extend({MeshRefractionMaterial:a.MeshRefractionMaterial});const l=r.useRef(),{size:f}=t.useThree(),h=r.useMemo((()=>{var r,t;const n={},a=(o=u)&&o.isCubeTexture;var o;const s=(null!==(r=a?null==(t=u.image[0])?void 0:t.width:u.image.width)&&void 0!==r?r:1024)/4,c=Math.floor(Math.log2(s)),l=Math.pow(2,c),f=3*Math.max(l,112),h=4*l;return a&&(n.ENVMAP_TYPE_CUBEM=""),n.CUBEUV_TEXEL_WIDTH=""+1/f,n.CUBEUV_TEXEL_HEIGHT=""+1/h,n.CUBEUV_MAX_MIP=`${c}.0`,e>0&&(n.CHROMATIC_ABERRATIONS=""),i&&(n.FAST_CHROMA=""),n}),[e,i]);return r.useLayoutEffect((()=>{var e;const r=null==(e=l.current)||null==(e=e.__r3f)||null==(e=e.parent)?void 0:e.geometry;r&&(l.current.bvh=new n.MeshBVHUniformStruct,l.current.bvh.updateFrom(new n.MeshBVH(r.clone().toNonIndexed(),{strategy:n.SAH})))}),[]),t.useFrame((({camera:e})=>{l.current.viewMatrixInverse=e.matrixWorld,l.current.projectionMatrixInverse=e.projectionMatrixInverse})),s.createElement("meshRefractionMaterial",o.default({key:JSON.stringify(h),defines:h,ref:l,resolution:[f.width,f.height],aberrationStrength:e,envMap:u},c))};
@@ -1,13 +1,15 @@
1
1
  import * as THREE from 'three';
2
2
  import * as React from 'react';
3
- import { ReactThreeFiber, ThreeElements } from '@react-three/fiber';
3
+ import { ReactThreeFiber } from '@react-three/fiber';
4
4
  import { MeshRefractionMaterial as MeshRefractionMaterial_ } from '../materials/MeshRefractionMaterial';
5
- declare module '@react-three/fiber' {
6
- interface ThreeElements {
7
- meshRefractionMaterial: typeof MeshRefractionMaterial_;
5
+ declare global {
6
+ namespace JSX {
7
+ interface IntrinsicElements {
8
+ meshRefractionMaterial: typeof MeshRefractionMaterial_;
9
+ }
8
10
  }
9
11
  }
10
- export type MeshRefractionMaterialProps = ThreeElements['shaderMaterial'] & {
12
+ type MeshRefractionMaterialProps = JSX.IntrinsicElements['shaderMaterial'] & {
11
13
  envMap: THREE.CubeTexture | THREE.Texture;
12
14
  bounces?: number;
13
15
  ior?: number;
@@ -17,3 +19,4 @@ export type MeshRefractionMaterialProps = ThreeElements['shaderMaterial'] & {
17
19
  fastChroma?: boolean;
18
20
  };
19
21
  export declare function MeshRefractionMaterial({ aberrationStrength, fastChroma, envMap, ...props }: MeshRefractionMaterialProps): React.JSX.Element;
22
+ export {};
@@ -15,7 +15,7 @@ function MeshRefractionMaterial({
15
15
  extend({
16
16
  MeshRefractionMaterial: MeshRefractionMaterial$1
17
17
  });
18
- const material = useRef(null);
18
+ const material = useRef();
19
19
  const {
20
20
  size
21
21
  } = useThree();
@@ -42,7 +42,7 @@ function MeshRefractionMaterial({
42
42
  useLayoutEffect(() => {
43
43
  var _material$current;
44
44
  // Get the geometry of this materials parent
45
- const geometry = (_material$current = material.current) == null || (_material$current = _material$current.__r3f) == null || (_material$current = _material$current.parent) == null || (_material$current = _material$current.object) == null ? void 0 : _material$current.geometry;
45
+ const geometry = (_material$current = material.current) == null || (_material$current = _material$current.__r3f) == null || (_material$current = _material$current.parent) == null ? void 0 : _material$current.geometry;
46
46
  // Update the BVH
47
47
  if (geometry) {
48
48
  material.current.bvh = new MeshBVHUniformStruct();