import {
	Object3D,
	Scene,
	Camera
} from 'three';

export class CSS3DObject extends Object3D {

	constructor( element?: HTMLElement );

	readonly isCSS3DObject: true;
	element: HTMLElement;

	onBeforeRender: ( renderer: unknown, scene: Scene, camera: Camera ) => void;
	onAfterRender: ( renderer: unknown, scene: Scene, camera: Camera ) => void;

	copy( source: CSS3DObject, recursive?: boolean ): this;

}

export class CSS3DSprite extends CSS3DObject {

	constructor( element?: HTMLElement );

	readonly isCSS3DSprite: true;
	rotation2D: number;

}

export interface CSS3DRendererParameters {
	element?: HTMLElement;
}

export class CSS3DRenderer {

	constructor( parameters?: CSS3DRendererParameters );
	domElement: HTMLElement;

	getSize(): { width: number, height: number };
	setSize( width: number, height: number ): void;
	markDirty(): void;
	updateSpriteSet( scene: Scene ): void;
	render( scene: Scene, camera: Camera ): void;

}
