import { Group } from 'three';
import { MirisScene as MirisScene_2 } from '@miris-inc/three';
import { MirisStream as MirisStream_2 } from '@miris-inc/three';
import { Object3D } from 'three';
import { OrbitControls } from 'three/addons/controls/OrbitControls.js';
import { PerspectiveCamera } from 'three';
import { Scene } from '@miris-inc/core/dist/core';
import { Vector3Tuple } from 'three';
import { WebGLRenderer } from 'three';

export declare class MirisCamera extends MirisPrimitive {
    #private;
    static observedAttributes: readonly ["position", "rotation", "scale", "zoom", "controls"];
    get fov(): number;
    set fov(fov: number);
    get aspect(): number;
    set aspect(aspect: number);
    get near(): number;
    set near(near: number);
    get far(): number;
    set far(far: number);
    get controls(): boolean;
    /** Whether the user explicitly set the camera position (via HTML attribute or JS). */
    get positionExplicitlySet(): boolean;
    /** Whether the user explicitly set the camera rotation (via HTML attribute or JS). */
    get rotationExplicitlySet(): boolean;
    set controls(controls: boolean);
    threeObject: PerspectiveCamera | null;
    _enable(): void;
    connectedCallback(): void;
    attributeChangedCallback(name: string, oldValue: string | null, newValue: string | null): void;
}

export declare class MirisGroup extends MirisPrimitive {
    threeObject: Group | null;
    _enable(): void;
}

declare class MirisPrimitive extends HTMLElement {
    #private;
    static observedAttributes: readonly [
    "position",
    "rotation",
    "scale",
    "zoom",
    ...string[]
    ];
    readonly position: Vector3;
    readonly rotation: Vector3;
    readonly scale: Vector3;
    /**
     * Tracks whether position was explicitly set by the user (via HTML attribute or JS).
     * Used to determine if asset's default camera should override the position.
     */
    _positionExplicitlySet: boolean;
    /**
     * Tracks whether rotation was explicitly set by the user (via HTML attribute or JS).
     * Used to determine if asset's default camera should override the rotation.
     */
    _rotationExplicitlySet: boolean;
    get zoom(): number;
    set zoom(zoom: number);
    get _parent(): MirisGroup | MirisScene | null;
    threeObject: Object3D | null;
    constructor();
    _enable(): void;
    _disable(): void;
    connectedCallback(): void;
    disconnectedCallback(): void;
    attributeChangedCallback(name: string, oldValue: string | null, newValue: string | null): void;
}

export declare class MirisScene extends HTMLElement {
    #private;
    static observedAttributes: readonly ["exposure", "viewer-key"];
    get threeCamera(): PerspectiveCamera | null;
    set threeCamera(camera: PerspectiveCamera | null);
    get exposure(): number | null;
    set exposure(exposure: number | null);
    constructor();
    get cameraControls(): OrbitControls | null;
    get ready(): Promise<this>;
    get _scene(): MirisScene_2;
    get viewerKey(): string | null;
    set viewerKey(viewerKey: string | null);
    connectedCallback(): Promise<void>;
    /* Excluded from this release type: _setupAnimationLoop */
    /* Excluded from this release type: _getRenderStats */
    disconnectedCallback(): void;
    attributeChangedCallback(name: string, _oldValue: string | null, newValue: string | null): void;
    setViewerKey(viewerKey: string): void;
    _forceRender(): void;
    fetchAssets(...args: Parameters<MirisScene_2["fetchAssets"]>): Promise<{
        name: string;
        thumbnailUrl: string;
        uuid: string;
        tags: string[];
    }[]>;
    get coreScene(): Scene | undefined;
    get threeScene(): MirisScene_2 | null;
    get threeRenderer(): WebGLRenderer | null;
}

export declare class MirisStream extends MirisPrimitive {
    #private;
    static observedAttributes: readonly ["position", "rotation", "scale", "zoom", "auth-token", "controls", "disabled", "drm-key", "viewer-key", "uuid"];
    get disabled(): boolean;
    set disabled(disabled: boolean);
    get uuid(): string | null;
    set uuid(uuid: string | null);
    get controls(): boolean;
    set controls(controls: boolean);
    get viewerKey(): string | null;
    set viewerKey(viewerKey: string | null);
    get authToken(): string | null;
    set authToken(authToken: string | null);
    get drmKey(): string | null;
    set drmKey(drmKey: string | null);
    threeObject: MirisStream_2 | null;
    constructor();
    _enable(): void;
    _disable(): void;
    attributeChangedCallback(name: string, oldValue: string | null, newValue: string | null): void;
    _update(): void;
    getBounds(): {
        min: Vector3Tuple;
        max: Vector3Tuple;
        size: Vector3Tuple;
        center: Vector3Tuple;
    } | undefined;
    /**
     * @deprecated Use `getBounds` instead.
     */
    getObjectBounds(): {
        min: Vector3Tuple;
        max: Vector3Tuple;
        size: Vector3Tuple;
        center: Vector3Tuple;
    } | undefined;
    frameAsset(externalBounds?: {
        size: [number, number, number];
        center: [number, number, number];
    }): void;
    /* Excluded from this release type: _exportVariantHierarchies */
    /* Excluded from this release type: _setVariantSelection */
}

declare type Vector3 = {
    x: number;
    y: number;
    z: number;
    set: (x: number, y: number, z: number) => void;
};

export { }
