import type { TagInstance, TagContentType, StickType, TagId, TagConfig, PlaneTag, MediaStore } from '../typings';
import * as THREE from 'three';
import type { Tag, Tags, PointTagInstance, Point3DTag } from '../typings';
import { TagCache } from './TagCache';
import type { CSS3DRenderPluginExportType } from '../../CSS3DRenderPlugin';
import { Five } from '@realsee/five';
import type { State as FiveState } from '@realsee/five';
import type { Mode } from '@realsee/five';
import { FiveDomEvents } from '../../shared-utils/five/FiveDomEvents';
import { WorkUtil } from '../../shared-utils/Utils/WorkUtil';
export declare abstract class TagUtil extends TagCache {
    tags: TagInstance[];
    config: Pick<Tags, 'globalConfig' | 'contentTypeConfig'>;
    set workCode(workCode: string);
    get workCode(): string;
    workUtil: WorkUtil;
    protected mediaStore: MediaStore;
    /** css3DRenderPlugin */
    protected css3DRenderPlugin?: CSS3DRenderPluginExportType;
    protected store: {
        /** 清理函数数组 */
        disposers: (() => void)[];
        visibleWithAnimation?: boolean;
        css3DRenderDisposer: Map<TagId, (() => void)[]>;
        eventListenerDisposer?: () => void;
        resizeObserverDisposer?: () => void;
        resizeObserverDisposerAdding: boolean;
        disposed: boolean;
    };
    protected domEvents: FiveDomEvents;
    protected constructor(five: Five);
    getTagById<C extends TagContentType = TagContentType, S extends StickType = StickType>(id: TagId): TagInstance<C, S> | undefined;
    /** 暂停当前标签内进行的所有多媒体 */
    pauseCurrentMedia(): void;
    /**
     * @description: 获取标签配置
     */
    getTagConfig(tag: Tag, params?: {
        useCache?: boolean;
        fiveMode?: Mode;
    }): TagConfig<"Panorama" | "Model" | "Custom" | "Audio" | "Text" | "ImageText" | "Image" | "Video" | "Link" | "Sticker" | "VRLink" | "PanoLink" | "Marketing" | "MediaPlane" | "MediaModel" | "Unknown">;
    /**
     * @description 获取标签当前状态
     */
    getCurrentVisibleState(tag: TagInstance): boolean;
    protected loadVideoFirstFrame: () => void;
    protected updateTagConfig(): void;
    protected can<T extends Tag>(action: 'show' | 'hide' | 'fold' | 'unfold', paramsTag: T): boolean;
    protected getRenderType(tag: TagInstance): 'Dom' | 'Mesh' | 'BehindDom';
    /**
     * @description: 获取角度
     */
    protected getAngle(tag: Point3DTag | PlaneTag, panoIndex?: number): number;
    /**
     * @description: 获取距离
     */
    protected getDistance(tag: TagInstance, fiveState?: Partial<FiveState>): number;
    protected getPositions(tag: TagInstance): [THREE.Vector3, THREE.Vector3, THREE.Vector3, THREE.Vector3] | [import("../typings").ArrayPosition, import("../typings").ArrayPosition, import("../typings").ArrayPosition, import("../typings").ArrayPosition];
    protected addObjectClickHandler(tag: TagInstance, object: THREE.Object3D | undefined, handler: (event: Event) => any): () => void;
    protected getTagNormal(tag: TagInstance): THREE.Vector3 | undefined;
    protected get filterPointTag(): PointTagInstance[];
    protected get filter2DPointTag(): TagInstance<"Panorama" | "Model" | "Custom" | "Audio" | "Text" | "ImageText" | "Image" | "Video" | "Link" | "Sticker" | "VRLink" | "PanoLink" | "Marketing" | "MediaPlane" | "MediaModel" | "Unknown", "2DPoint">[];
    protected get filterImagePlane(): TagInstance<"MediaPlane", "Plane">[];
    protected get filterMediaModel(): TagInstance<"MediaModel", "Model">[];
    protected get filterCSS3DTag(): (TagInstance<"Panorama" | "Model" | "Custom" | "Audio" | "Text" | "ImageText" | "Image" | "Video" | "Link" | "Sticker" | "VRLink" | "PanoLink" | "Marketing" | "MediaPlane" | "MediaModel" | "Unknown", "Plane"> | TagInstance<"Panorama" | "Model" | "Custom" | "Audio" | "Text" | "ImageText" | "Image" | "Video" | "Link" | "Sticker" | "VRLink" | "PanoLink" | "Marketing" | "MediaPlane" | "MediaModel" | "Unknown", "Model"> | TagInstance<"Panorama" | "Model" | "Custom" | "Audio" | "Text" | "ImageText" | "Image" | "Video" | "Link" | "Sticker" | "VRLink" | "PanoLink" | "Marketing" | "MediaPlane" | "MediaModel" | "Unknown", "3DPoint">)[];
    protected getTransformedPostion(position: Tag['position']): THREE.Vector3 | [THREE.Vector3, THREE.Vector3, THREE.Vector3, THREE.Vector3];
    /**
     * @description 检查是否已经销毁
     * @returns isDisposed; 已经销毁返回 true，否则返回 false
     */
    protected checkDisposed(): boolean;
    /**
     * @description: 获取merge后的配置
     */
    protected calculateTagConfig(tag: Tag | TagInstance, params?: {
        useCache?: boolean;
    }): TagInstance['computedConfig'];
}
