import { Object3D } from 'three';
import * as ThreeMeshUI from 'three-mesh-ui';
import { ComponentInit } from '../../engine/engine_types.js';
import { Behaviour } from "../Component.js";
import type { ICanvas } from './Interfaces.js';
export declare const includesDir = "./include";
export declare const $shadowDomOwner: unique symbol;
/**
 * Derive from this class if you want to implement your own UI components.
 * It provides utility methods and simplifies managing the underlying three-mesh-ui hierarchy.
 * @category User Interface
 * @group Components
*/
export declare class BaseUIComponent extends Behaviour {
    /** Is this object on the root of the UI hierarchy ? */
    isRoot(): boolean;
    /** Access the parent canvas component */
    get canvas(): ICanvas | null;
    /** @deprecated use `canvas` */
    protected get Canvas(): ICanvas | null;
    /** Mark the UI dirty which will trigger an THREE-Mesh-UI update */
    markDirty(): void;
    /** the underlying three-mesh-ui */
    get shadowComponent(): Object3D | null;
    private set shadowComponent(value);
    private _shadowComponent;
    private _controlsChildLayout;
    get controlsChildLayout(): boolean;
    set controlsChildLayout(val: boolean);
    private _root?;
    protected get Root(): UIRootComponent | null;
    protected _parentComponent?: BaseUIComponent | null;
    __internalNewInstanceCreated(args: ComponentInit<this>): this;
    onEnable(): void;
    /** Add a three-mesh-ui object to the UI hierarchy
     * @param container the three-mesh-ui object to add
     * @param parent the parent component to add the object to
    */
    protected addShadowComponent(container: any, parent?: BaseUIComponent): void;
    protected setShadowComponentOwner(current: ThreeMeshUI.MeshUIBaseElement | Object3D | null | undefined): void;
    private traverseOwnedShadowComponents;
    /** Remove the underlying UI object from the hierarchy */
    protected removeShadowComponent(): void;
    protected onAfterAddedToScene(): void;
    setInteractable(value: boolean): void;
}
export declare class UIRootComponent extends BaseUIComponent {
    awake(): void;
}
