import * as THREE from 'three'; import * as React from 'react'; import Reconciler from '../../react-reconciler/index.js'; import { IsAllOptional } from "./utils.js"; import type { RootStore } from "./store.js"; import { type EventHandlers } from "./events.js"; import type { ThreeElement } from "../three-types.js"; export interface Root { fiber: Reconciler.FiberRoot; store: RootStore; } export type AttachFnType = (parent: any, self: O) => () => void; export type AttachType = string | AttachFnType; export type ConstructorRepresentation = new (...args: any[]) => T; export interface Catalogue { [name: string]: ConstructorRepresentation; } export type Args = T extends ConstructorRepresentation ? T extends typeof THREE.Color ? [r: number, g: number, b: number] | [color: THREE.ColorRepresentation] : ConstructorParameters : any[]; type ArgsProp

= P extends ConstructorRepresentation ? IsAllOptional> extends true ? { args?: Args

; } : { args: Args

; } : { args: unknown[]; }; export type InstanceProps = ArgsProp

& { object?: T; dispose?: null; attach?: AttachType; onUpdate?: (self: T) => void; }; export interface Instance { root: RootStore; type: string; parent: Instance | null; children: Instance[]; props: InstanceProps & Record; object: O & { __r3f?: Instance; }; eventCount: number; handlers: Partial; attach?: AttachType; previousAttach?: any; isHidden: boolean; } export declare function extend(objects: T): React.ExoticComponent>; export declare function extend(objects: T): void; export declare const reconciler: Reconciler.Reconciler, void, Instance, never, any>; export {};