import * as THREE from 'three' import { FC } from 'react' import { OmitByValue } from 'utility-types' import { ReactThreeFiber } from '../three-types' type Three = typeof import('three') /** Classes exported `three/src/Three.d.ts` but not from `three/src/Three.js` */ type MissingInThreeRuntimeExports = | THREE.AnimationAction | THREE.DirectGeometry | THREE.WebGLClipping | THREE.WebGLInfo | THREE.WebGLProperties | THREE.WebGLRenderList | THREE.WebGLRenderLists | THREE.WebGLColorBuffer | THREE.WebGLDepthBuffer | THREE.WebGLStencilBuffer type InterestingThreeExports = OmitByValue type __ThreeFiberComponents = { [P in keyof InterestingThreeExports]: Three[P] extends new (...args: any) => any ? InstanceType extends InstanceType ? FC, Three[P]>> : InstanceType extends InstanceType ? FC, Three[P]>> : InstanceType extends InstanceType ? FC, Three[P]>> : InstanceType extends InstanceType ? FC, Required>>> : FC, Three[P]>> : never } export { OmitByValue } export interface ThreeFiberComponents extends OmitByValue<__ThreeFiberComponents, never> {}