import { Cancellable } from "@lincode/promiselikes";
import { Object3D } from "three";
import MeshAppendable from "../MeshAppendable";
import { LingoMouseEvent } from "../../../interface/IMouse";
import IVisible, { HitEvent } from "../../../interface/IVisible";
import Nullable from "../../../interface/utils/Nullable";
export default abstract class VisibleMixin<T extends Object3D = Object3D> extends MeshAppendable<T> implements IVisible {
    private _bloom?;
    get bloom(): boolean | undefined;
    set bloom(val: boolean | undefined);
    private _outline?;
    get outline(): boolean | undefined;
    set outline(val: boolean | undefined);
    private _visible?;
    get visible(): boolean | undefined;
    set visible(val: boolean | undefined);
    private _reflectionVisible?;
    get reflectionVisible(): boolean | undefined;
    set reflectionVisible(val: boolean | undefined);
    private initRenderCheck?;
    get isRendered(): boolean;
    private _castShadow?;
    get castShadow(): boolean;
    set castShadow(val: boolean);
    $addToRaycastSet(set: Set<Object3D>): Cancellable;
    private _onClick?;
    get onClick(): ((e: LingoMouseEvent) => void) | undefined;
    set onClick(cb: ((e: LingoMouseEvent) => void) | undefined);
    private _onMouseDown?;
    get onMouseDown(): ((e: LingoMouseEvent) => void) | undefined;
    set onMouseDown(cb: ((e: LingoMouseEvent) => void) | undefined);
    private _onMouseUp?;
    get onMouseUp(): ((e: LingoMouseEvent) => void) | undefined;
    set onMouseUp(cb: ((e: LingoMouseEvent) => void) | undefined);
    private _onMouseOver?;
    get onMouseOver(): ((e: LingoMouseEvent) => void) | undefined;
    set onMouseOver(cb: ((e: LingoMouseEvent) => void) | undefined);
    private _onMouseOut?;
    get onMouseOut(): ((e: LingoMouseEvent) => void) | undefined;
    set onMouseOut(cb: ((e: LingoMouseEvent) => void) | undefined);
    private _onMouseMove?;
    get onMouseMove(): ((e: LingoMouseEvent) => void) | undefined;
    set onMouseMove(cb: ((e: LingoMouseEvent) => void) | undefined);
    hitTest(target: MeshAppendable): boolean;
    private _hitTarget?;
    get hitTarget(): string | string[] | undefined;
    set hitTarget(val: string | string[] | undefined);
    onHit: Nullable<(instance: HitEvent) => void>;
    onHitStart: Nullable<(instance: HitEvent) => void>;
    onHitEnd: Nullable<(instance: HitEvent) => void>;
}
