import { EventEmitter, h } from '../../stencil-public-runtime';
import { Euler, Matrix4, Quaternion, Vector3 } from '@vertexvis/geometry';
import { HTMLDomRendererPositionableElement } from '../../interfaces';
/**
 * The `ViewerDomElement` is responsible for managing a
 * `<vertex-viewer-dom-element>` element. These elements are intended to be
 * added as children to a `<vertex-viewer-dom-renderer>` and represent an
 * individual DOM element within a local 3D scene.
 */
export declare class ViewerDomElement implements HTMLDomRendererPositionableElement {
    /**
     * The local 3D position of where this element is located.
     */
    position: Vector3.Vector3;
    /**
     * @ignore
     */
    protected handlePositionChange(): void;
    /**
     * The local 3D position of where this element is located, as a JSON string.
     * JSON representation can either be in the format of `[x, y, z]` or `{"x": 0,
     * "y": 0, "z": 0}`.
     */
    positionJson: string;
    /**
     * @ignore
     */
    protected handlePositionJsonChanged(): void;
    /**
     * The local rotation of this element in Euler angles.
     */
    rotation?: Euler.Euler;
    /**
     * @ignore
     */
    protected handleRotationChanged(): void;
    /**
     * The local rotation of this element in Euler angles, as a JSON string. JSON
     * representation can either be `[x, y, z, order]` or `{"x": 0, "y": 0, "z":
     * 0, "order": "xyz"}`.
     */
    rotationJson?: string;
    /**
     * @ignore
     */
    protected handleRotationJsonChanged(): void;
    /**
     * The local rotation of this element.
     */
    quaternion: Quaternion.Quaternion;
    /**
     * @ignore
     */
    protected handleQuaternionChange(): void;
    /**
     * The local quaternion rotation of this element, as a JSON string. JSON
     * representation can either be `[x, y, z, w]` or `{"x": 0, "y": 0, "z":
     * 0, "w": 1}`.
     */
    quaternionJson: string;
    /**
     * @ignore
     */
    protected handleQuaternionJsonChanged(): void;
    /**
     * The local scale of this element.
     */
    scale: Vector3.Vector3;
    /**
     * @ignore
     */
    protected handleScaleChange(): void;
    /**
     * The local scale of this element, as a JSON string. JSON string
     * representation can either be in the format of `[x, y, z]` or `{"x": 0, "y":
     * 0, "z": 0}`.
     */
    scaleJson: string;
    /**
     * @ignore
     */
    protected handleScaleJsonChanged(): void;
    /**
     * @ignore
     */
    protected handleMatrixChanged(newMatrix: Matrix4.Matrix4, oldMatrix: Matrix4.Matrix4): void;
    /**
     * The local matrix of this element.
     */
    matrix: Matrix4.Matrix4;
    /**
     * Disables occlusion testing for this element. Defaults to enabled. When
     * enabled, the elements position will be tested against the current depth
     * buffer. If the position is occluded, then the `occluded` attribute will be
     * set.
     */
    occlusionOff: boolean;
    /**
     * Indicates if the element is hidden by geometry. This property can be used
     * with a CSS selector to modify the appearance of the element when its
     * occluded.
     *
     * @example
     *
     * ```html
     * <style>
     *   vertex-viewer-dom-element[occluded] {
     *     opacity: 0;
     *   }
     * </style>
     * ```
     */
    occluded: boolean;
    /**
     * Dispatched when the occlusion state is changed.
     */
    occlusionStateChanged: EventEmitter<boolean>;
    /**
     * **EXPERIMENTAL**
     * Disables detached testing for this element. Defaults to disabled. When
     * enabled, the elements position will be tested against the current depth
     * buffer. If the position is detached, then the `detached` attribute will be
     * set.
     */
    detachedOff: boolean;
    /**
     * **EXPERIMENTAL**
     * Indicates if the element is detached from geometry. This property can be used
     * with a CSS selector to modify the appearance of the element when its
     * detached.
     *
     * @example
     *
     * ```html
     * <style>
     *   vertex-viewer-dom-element[detached] {
     *     opacity: 0;
     *   }
     * </style>
     * ```
     */
    detached: boolean;
    /**
     * **EXPERIMENTAL**
     * Dispatched when the detached state is changed.
     */
    detachedStateChanged: EventEmitter<boolean>;
    /**
     * Disables the billboarding behavior of the element. When billboarding is
     * enabled, the element will always be oriented towards the screen.
     */
    billboardOff: boolean;
    /**
     * Disables interaction events from children.
     */
    interactionsOff: boolean;
    /**
     * An event that is emitted when any property on the dom group changes
     */
    propertyChange: EventEmitter<void>;
    /**
     * @ignore
     */
    protected connectedCallback(): void;
    /**
     * @ignore
     */
    protected componentShouldUpdate(newValue: unknown, oldValue: unknown, prop: string): boolean;
    /**
     * @ignore
     */
    protected handleOcclusionStateChanged(): void;
    /**
     * @ignore
     */
    protected handleDetachedStateChanged(): void;
    private syncProperties;
    private syncPosition;
    private syncRotation;
    private syncQuaternionWithRotation;
    private syncQuaternion;
    private syncScale;
    private syncMatrix;
    private parseJson;
    /**
     * @ignore
     */
    protected render(): h.JSX.IntrinsicElements;
}
