) => void;
}
export interface NgtPointerCaptureTarget {
intersection: NgtIntersection;
target: Element;
}
export interface NgtNodeProps {
attach?: string[];
/** Constructor arguments */
args?: NgtArgs
;
}
export declare type NgtNode = NgtExtendedColors, NgtNodeProps>>;
export declare type NgtObject3dNode = Overwrite, {
position?: NgtVector3;
up?: NgtVector3;
scale?: NgtVector3;
rotation?: NgtEuler;
matrix?: NgtMatrix4;
quaternion?: NgtQuaternion;
layers?: NgtLayers;
dispose?: (() => void) | null;
}> & NgtEventHandlers;
export declare type NgtCamera = THREE.PerspectiveCamera | THREE.OrthographicCamera;
export declare type NgtCameraOptions = (NgtCamera | Partial & NgtObject3dNode & NgtObject3dNode>) & {
manual?: boolean;
};
export declare type NgtSceneOptions = Overwrite>, {
position?: NgtVector3;
up?: NgtVector3;
scale?: NgtVector3;
rotation?: NgtEuler;
matrix?: NgtMatrix4;
quaternion?: NgtQuaternion;
layers?: NgtLayers;
dispose?: (() => void) | null;
}>;
export declare type NgtGLOptions = THREE.Renderer | ((canvas: HTMLCanvasElement) => THREE.Renderer) | Partial | THREE.WebGLRendererParameters>;
export declare type NgtDpr = number | [min: number, max: number];
export interface NgtSize {
width: number;
height: number;
}
export declare type NgtViewport = NgtSize & {
/** The initial pixel ratio */
initialDpr: number;
/** Current pixel ratio */
dpr: number;
/** size.width / viewport.width */
factor: number;
/** Camera distance */
distance: number;
/** Camera aspect ratio: width / height */
aspect: number;
};
export declare type NgtCurrentViewport = Omit;
export interface NgtRenderState extends NgtState {
delta: number;
frame?: XRFrame;
}
export declare type NgtBeforeRenderCallback = (state: NgtRenderState, obj: TObject) => void;
export interface NgtBeforeRenderRecord {
obj?: THREE.Object3D | Ref;
callback: NgtBeforeRenderCallback;
priority?: number;
}
export interface NgtPerformanceOptions {
current?: number;
min?: number;
max?: number;
debounce?: number;
}
export interface NgtPerformance extends NgtPerformanceOptions {
regress: () => void;
}
export declare type NgtInternalState = {
active: boolean;
priority: number;
frames: number;
lastEvent: NgtDomEvent | null;
interaction: THREE.Object3D[];
hovered: Map>;
capturedMap: Map>;
initialClick: [x: number, y: number];
initialHits: THREE.Object3D[];
animations: Map;
subscribers: NgtBeforeRenderRecord[];
};
export interface NgtState {
ready: boolean;
raycasterOptions: Partial;
cameraOptions: NgtCameraOptions;
sceneOptions: NgtSceneOptions;
glOptions: NgtGLOptions;
gl: THREE.WebGLRenderer;
lookAt?: THREE.Vector3;
camera: NgtCamera & {
manual?: boolean;
};
cameraRef: Ref;
scene: THREE.Scene;
sceneRef: Ref;
raycaster: THREE.Raycaster;
/** Default clock */
clock: THREE.Clock;
/** Event layer interface, contains the event handler and the node they're connected to */
events: NgtEventManager;
/** XR interface */
xr: {
connect: () => void;
disconnect: () => void;
};
/** Currently used controls */
controls: THREE.EventDispatcher | null;
/** Normalized event coordinates */
pointer: THREE.Vector2;
/** @deprecated Normalized event coordinates, use "pointer" instead! */
mouse: THREE.Vector2;
legacy: boolean;
/** Shortcut to gl.outputEncoding = LinearEncoding */
linear: boolean;
/** Shortcut to gl.toneMapping = NoTonemapping */
flat: boolean;
/** Shortcut to gl.shadowMap */
shadows: boolean | Partial;
/** Render loop flags */
frameloop: 'always' | 'demand' | 'never';
/** Whether to initialize an OrthographicCamera instead */
orthographic: boolean;
/** Adaptive performance interface */
performance: NgtPerformance;
/** Reactive dpr of the canvas */
dpr: NgtDpr;
/** Reactive pixel-size of the canvas */
size: NgtSize;
/** Reactive size of the viewport in threejs units */
viewport: NgtViewport & {
getCurrentViewport: (camera?: NgtCamera, target?: THREE.Vector3 | Parameters, size?: NgtSize) => NgtCurrentViewport;
};
/** When the canvas was clicked but nothing was hit */
pointerMissed?: (event: MouseEvent) => void;
/** Flags the canvas for render, but doesn't render in itself */
invalidate: () => void;
/** Advance (render) one step */
advance: (timestamp: number, runGlobalCallbacks?: boolean) => void;
/** If this state model is layerd (via createPortal) then this contains the previous layer */
previousState?: NgtState;
/** Internals */
internal: NgtInternalState;
}
export interface NgtInstanceInternal {
root: () => NgtState;
objects: Ref[;
parent: Ref | null;
primitive?: boolean;
eventCount: number;
handlers: Partial;
previousAttach?: string[] | (() => void);
previousAttachValue?: unknown;
}
export declare type AttachFunction = (parent: Ref, child: Ref) => void | (() => void);
export declare type NgtUnknownInstance = TInstance & {
__ngt__: NgtInstanceInternal;
};
export interface NgtObjectMap {
nodes: {
[name: string]: THREE.Object3D;
};
materials: {
[name: string]: THREE.Material;
};
}
export {};
]