import { IDisposable } from "../../Interfaces/IDisposable";
import { Nullable } from "../../types";
export type InfoPointsStyle = {
    borderColor?: string;
    innerPointColor?: string;
    color?: string;
    highlightColor?: string;
};
export type ImagePanelStyle = {
    backgroundColor?: string;
    loadingTextColor?: string;
    buttonsBorderColor?: string;
    buttonsColor?: string;
    buttonsBorderHighlightColor?: string;
    buttonsHighlightColor?: string;
    buttonsIconColor?: string;
};
export type InfoPointsManagerStyle = {
    infoPointsStyle?: InfoPointsStyle;
    imagePanelStyle?: ImagePanelStyle;
};
export type InfoPointPickedEventArgs = {
    meshID: string;
    materialID: string | null;
    materialPhotoUrl: string[];
};
export type InfoPointPickedEventListener = (evt: InfoPointPickedEventArgs) => void;
export type InfoPointContentShownListener = () => void;
export type InfoPointContentHiddenListener = () => void;
export declare class InfoPointsManager implements IDisposable {
    private _zkScene;
    private _scene;
    private _sceneHelper;
    private _style;
    private _rootContainer;
    private _meshesInfoPoints;
    private _infoPoints;
    private _imageUrls;
    private _currentIdx;
    private _imagePanel;
    private _loadingText;
    private _image;
    private _closeImageButton;
    private _moveNextImageButton;
    private _movePrevImageButton;
    private _isOnMoveNextButton;
    private _isOnMovePrevButton;
    private _lastCameraPosition;
    onBeforeShowImages: Nullable<() => void>;
    onAfterShowImages: Nullable<() => void>;
    private _infoPointsShown;
    get infoPointsShown(): boolean;
    private _canShowInfoPointsContent;
    get canShowInfoPointsContent(): boolean;
    set canShowInfoPointsContent(value: boolean);
    private _infoPointPickedListeners;
    private _infoPointContentShownListeners;
    private _infoPointContentHiddenListeners;
    private _renderingNeededListeners;
    private CLOSE_SVG;
    private CHEVRON_LEFT_SVG;
    private CHEVRON_RIGHT_SVG;
    constructor(zkScene: Zakeke.Scene, scene: BABYLON.Scene, style?: InfoPointsManagerStyle);
    dispose(): void;
    private setDefaultStyle;
    private setStyle;
    applyStyle(style: Nullable<InfoPointsManagerStyle>): void;
    showInfoPoints(): void;
    hideInfoPoints(): void;
    refresh(): void;
    private getAllInfoPoints;
    private refreshInfoPoints;
    private removeMeshInfoPoints;
    private getOrCreateMeshInfoPoint;
    private updateInfoPointUrls;
    private createMeshInfoPoint;
    private getMaterialInfoPoint;
    private getMaterialPhotoUrls;
    private getOrCreateImagePanel;
    private createImagePanel;
    private addCloseButton;
    private addMoveNextImageButton;
    private addMovePrevImageButton;
    private updateMoveNextImageButton;
    private updateMovePrevImageButton;
    private showImages;
    private moveNextImage;
    private movePrevImage;
    private showCurrentImage;
    private canMoveNextImage;
    private canMovePrevImage;
    private hideImages;
    private showImage;
    /**
     * Update info points visibility and return true if at least one info point has been updated.
     *
     * @return {boolean} Return true if any info point has been updated.
     */
    updateInfoPointsVisibility(): boolean;
    drawRay(origin: BABYLON.Vector3, forward: BABYLON.Vector3): void;
    private updateMeshInfoPointVisibility;
    private getCloseSvg;
    private getChevronLeftSvg;
    private getChevronRightSvg;
    private getSvg;
    private fireInfoPointPickedEvent;
    addInfoPointPickedListener(listenerFunction: InfoPointPickedEventListener): void;
    addInfoPointPickedListenerRange(listenerFunctions: InfoPointPickedEventListener[]): void;
    private fireInfoPointContentShownEvent;
    addInfoPointContentShownListener(listenerFunction: InfoPointContentShownListener): void;
    addInfoPointContentShownListenerRange(listenerFunctions: InfoPointContentShownListener[]): void;
    private fireInfoPointContentHiddenEvent;
    addInfoPointContentHiddenListener(listenerFunction: InfoPointContentHiddenListener): void;
    addInfoPointContentHiddenListenerRange(listenerFunctions: InfoPointContentHiddenListener[]): void;
    private fireRenderingNeededEvent;
    addRenderingNeededListener(listenerFunction: () => void): void;
    showLoadingText(): void;
    hideLoadingText(): void;
    private updateGuiElementsStyle;
    private updateMeshInfoPointsStyle;
    private updateImagePanelStyle;
}
