/* eslint-disable @typescript-eslint/ban-ts-ignore */ import * as THREE from 'three' import { PointerEvent } from './canvas' export type NonFunctionKeys = { [K in keyof T]: T[K] extends Function ? never : K }[keyof T] export type Overwrite = Omit> & O /** * If **T** contains a constructor, @see ConstructorParameters must be used, otherwise **T**. */ type Args = T extends new (...args: any) => any ? ConstructorParameters : T export declare namespace ReactThreeFiber { type Euler = THREE.Euler | number[] type Matrix4 = THREE.Matrix4 | number[] type Vector3 = THREE.Vector3 | number[] type Color = THREE.Color | number | string export type Events = { onClick?: (e: PointerEvent) => void onPointerUp?: (e: PointerEvent) => void onPointerDown?: (e: PointerEvent) => void onPointerOver?: (e: PointerEvent) => void onPointerOut?: (e: PointerEvent) => void onPointerMove?: (e: PointerEvent) => void onWheel?: (e: PointerEvent) => void } export interface NodeProps { /** Attaches this class onto the parent under the given name and nulls it on unmount */ attach?: string /** Appends this class to an array on the parent under the given name and removes it on unmount */ attachArray?: string /** Adds this class to an object on the parent under the given name and deletes it on unmount */ attachObject?: [string, string] /** Constructor arguments */ args?: Args

children?: React.ReactNode ref?: React.Ref key?: React.Key onUpdate?: (self: T) => void } export type Node = Overwrite, NodeProps> export type Object3DNode = Overwrite< Node, { position?: Vector3 up?: Vector3 scale?: Vector3 rotation?: Euler matrix?: Matrix4 } > & ReactThreeFiber.Events export type GeometryNode = Overwrite, { vertices?: Vector3[] }> export type BufferGeometryNode = Overwrite, {}> export type MaterialNode = Overwrite, { color?: Color }> } declare global { namespace JSX { interface IntrinsicElements { // `audio` works but conflicts with @types/react. Try using Audio from react-three-fiber/components instead // audio: ReactThreeFiber.Object3DNode audioListener: ReactThreeFiber.Object3DNode positionalAudio: ReactThreeFiber.Object3DNode mesh: ReactThreeFiber.Object3DNode instancedMesh: ReactThreeFiber.Object3DNode scene: ReactThreeFiber.Object3DNode sprite: ReactThreeFiber.Object3DNode lOD: ReactThreeFiber.Object3DNode skinnedMesh: ReactThreeFiber.Object3DNode // @ts-ignore skeleton: ReactThreeFiber.Object3DNode bone: ReactThreeFiber.Object3DNode lineSegments: ReactThreeFiber.Object3DNode lineLoop: ReactThreeFiber.Object3DNode // see `audio` // line: ReactThreeFiber.Object3DNode points: ReactThreeFiber.Object3DNode group: ReactThreeFiber.Object3DNode immediateRenderObject: ReactThreeFiber.Object3DNode< THREE.ImmediateRenderObject, typeof THREE.ImmediateRenderObject > // cameras camera: ReactThreeFiber.Object3DNode perspectiveCamera: ReactThreeFiber.Object3DNode orthographicCamera: ReactThreeFiber.Object3DNode cubeCamera: ReactThreeFiber.Object3DNode arrayCamera: ReactThreeFiber.Object3DNode // geometry geometry: ReactThreeFiber.GeometryNode instancedBufferGeometry: ReactThreeFiber.BufferGeometryNode< THREE.InstancedBufferGeometry, typeof THREE.InstancedBufferGeometry > bufferGeometry: ReactThreeFiber.BufferGeometryNode boxBufferGeometry: ReactThreeFiber.BufferGeometryNode circleBufferGeometry: ReactThreeFiber.BufferGeometryNode< THREE.CircleBufferGeometry, typeof THREE.CircleBufferGeometry > coneBufferGeometry: ReactThreeFiber.BufferGeometryNode cylinderBufferGeometry: ReactThreeFiber.BufferGeometryNode< THREE.CylinderBufferGeometry, typeof THREE.CylinderBufferGeometry > dodecahedronBufferGeometry: ReactThreeFiber.BufferGeometryNode< THREE.DodecahedronBufferGeometry, typeof THREE.DodecahedronBufferGeometry > extrudeBufferGeometry: ReactThreeFiber.BufferGeometryNode< THREE.ExtrudeBufferGeometry, typeof THREE.ExtrudeBufferGeometry > icosahedronBufferGeometry: ReactThreeFiber.BufferGeometryNode< THREE.IcosahedronBufferGeometry, typeof THREE.IcosahedronBufferGeometry > latheBufferGeometry: ReactThreeFiber.BufferGeometryNode< THREE.LatheBufferGeometry, typeof THREE.LatheBufferGeometry > octahedronBufferGeometry: ReactThreeFiber.BufferGeometryNode< THREE.OctahedronBufferGeometry, typeof THREE.OctahedronBufferGeometry > parametricBufferGeometry: ReactThreeFiber.BufferGeometryNode< THREE.ParametricBufferGeometry, typeof THREE.ParametricBufferGeometry > planeBufferGeometry: ReactThreeFiber.BufferGeometryNode< THREE.PlaneBufferGeometry, typeof THREE.PlaneBufferGeometry > polyhedronBufferGeometry: ReactThreeFiber.BufferGeometryNode< THREE.PolyhedronBufferGeometry, typeof THREE.PolyhedronBufferGeometry > ringBufferGeometry: ReactThreeFiber.BufferGeometryNode shapeBufferGeometry: ReactThreeFiber.BufferGeometryNode< THREE.ShapeBufferGeometry, typeof THREE.ShapeBufferGeometry > sphereBufferGeometry: ReactThreeFiber.BufferGeometryNode< THREE.SphereBufferGeometry, typeof THREE.SphereBufferGeometry > tetrahedronBufferGeometry: ReactThreeFiber.BufferGeometryNode< THREE.TetrahedronBufferGeometry, typeof THREE.TetrahedronBufferGeometry > textBufferGeometry: ReactThreeFiber.BufferGeometryNode torusBufferGeometry: ReactThreeFiber.BufferGeometryNode< THREE.TorusBufferGeometry, typeof THREE.TorusBufferGeometry > torusKnotBufferGeometry: ReactThreeFiber.BufferGeometryNode< THREE.TorusKnotBufferGeometry, typeof THREE.TorusKnotBufferGeometry > tubeBufferGeometry: ReactThreeFiber.BufferGeometryNode wireframeGeometry: ReactThreeFiber.BufferGeometryNode parametricGeometry: ReactThreeFiber.GeometryNode tetrahedronGeometry: ReactThreeFiber.GeometryNode octahedronGeometry: ReactThreeFiber.GeometryNode icosahedronGeometry: ReactThreeFiber.GeometryNode dodecahedronGeometry: ReactThreeFiber.GeometryNode polyhedronGeometry: ReactThreeFiber.GeometryNode tubeGeometry: ReactThreeFiber.GeometryNode torusKnotGeometry: ReactThreeFiber.GeometryNode torusGeometry: ReactThreeFiber.GeometryNode textGeometry: ReactThreeFiber.GeometryNode sphereGeometry: ReactThreeFiber.GeometryNode ringGeometry: ReactThreeFiber.GeometryNode planeGeometry: ReactThreeFiber.GeometryNode latheGeometry: ReactThreeFiber.GeometryNode shapeGeometry: ReactThreeFiber.GeometryNode extrudeGeometry: ReactThreeFiber.GeometryNode edgesGeometry: ReactThreeFiber.BufferGeometryNode coneGeometry: ReactThreeFiber.GeometryNode cylinderGeometry: ReactThreeFiber.GeometryNode circleGeometry: ReactThreeFiber.GeometryNode boxGeometry: ReactThreeFiber.GeometryNode // materials material: ReactThreeFiber.MaterialNode shadowMaterial: ReactThreeFiber.MaterialNode spriteMaterial: ReactThreeFiber.MaterialNode rawShaderMaterial: ReactThreeFiber.MaterialNode shaderMaterial: ReactThreeFiber.MaterialNode pointsMaterial: ReactThreeFiber.MaterialNode meshPhysicalMaterial: ReactThreeFiber.MaterialNode< THREE.MeshPhysicalMaterial, [THREE.MeshPhysicalMaterialParameters] > meshStandardMaterial: ReactThreeFiber.MaterialNode< THREE.MeshStandardMaterial, [THREE.MeshStandardMaterialParameters] > meshPhongMaterial: ReactThreeFiber.MaterialNode meshToonMaterial: ReactThreeFiber.MaterialNode meshNormalMaterial: ReactThreeFiber.MaterialNode meshLambertMaterial: ReactThreeFiber.MaterialNode< THREE.MeshLambertMaterial, [THREE.MeshLambertMaterialParameters] > meshDepthMaterial: ReactThreeFiber.MaterialNode meshDistanceMaterial: ReactThreeFiber.MaterialNode< THREE.MeshDistanceMaterial, [THREE.MeshDistanceMaterialParameters] > meshBasicMaterial: ReactThreeFiber.MaterialNode meshMatcapMaterial: ReactThreeFiber.MaterialNode lineDashedMaterial: ReactThreeFiber.MaterialNode lineBasicMaterial: ReactThreeFiber.MaterialNode // primitive primitive: { object: any } & { [properties: string]: any } // lights and other light: ReactThreeFiber.Object3DNode spotLightShadow: ReactThreeFiber.Node spotLight: ReactThreeFiber.Object3DNode pointLight: ReactThreeFiber.Object3DNode rectAreaLight: ReactThreeFiber.Object3DNode hemisphereLight: ReactThreeFiber.Object3DNode directionalLightShadow: ReactThreeFiber.Node directionalLight: ReactThreeFiber.Object3DNode ambientLight: ReactThreeFiber.Object3DNode lightShadow: ReactThreeFiber.Node // @ts-ignore ambientLightProbe: ReactThreeFiber.Object3DNode // @ts-ignore hemisphereLightProbe: ReactThreeFiber.Object3DNode // @ts-ignore lightProbe: ReactThreeFiber.Object3DNode // helpers spotLightHelper: ReactThreeFiber.Object3DNode skeletonHelper: ReactThreeFiber.Object3DNode pointLightHelper: ReactThreeFiber.Object3DNode hemisphereLightHelper: ReactThreeFiber.Object3DNode< THREE.HemisphereLightHelper, typeof THREE.HemisphereLightHelper > gridHelper: ReactThreeFiber.Object3DNode polarGridHelper: ReactThreeFiber.Node directionalLightHelper: ReactThreeFiber.Object3DNode< THREE.DirectionalLightHelper, typeof THREE.DirectionalLightHelper > cameraHelper: ReactThreeFiber.Object3DNode boxHelper: ReactThreeFiber.Object3DNode box3Helper: ReactThreeFiber.Node planeHelper: ReactThreeFiber.Object3DNode arrowHelper: ReactThreeFiber.Object3DNode axesHelper: ReactThreeFiber.Object3DNode // textures texture: ReactThreeFiber.Node videoTexture: ReactThreeFiber.Node dataTexture: ReactThreeFiber.Node dataTexture3D: ReactThreeFiber.Node compressedTexture: ReactThreeFiber.Node cubeTexture: ReactThreeFiber.Node canvasTexture: ReactThreeFiber.Node depthTexture: ReactThreeFiber.Node // misc raycaster: ReactThreeFiber.Node vector2: ReactThreeFiber.Node vector3: ReactThreeFiber.Node vector4: ReactThreeFiber.Node euler: ReactThreeFiber.Node matrix3: ReactThreeFiber.Node matrix4: ReactThreeFiber.Node quaternion: ReactThreeFiber.Node bufferAttribute: ReactThreeFiber.Node } } }