UNPKG

@realsee/dnalogel

Version:
225 lines (224 loc) 7.4 kB
import type { Tag, TagId, Tags, State, ContentTypeConfigKey } from '../typings'; import type { TagClickParams, TagConfigByKey, TagContentType } from '..'; import type { ArrayPosition } from '../typings'; import type { Five } from '@realsee/five'; import { TagRender } from './TagRender'; import type { PartialObjectDeep } from '../../typings/typings'; export declare const pluginFlag: (name: string) => string; declare class PanoTagPluginController extends TagRender { /** state */ state: { enabled: boolean; visible: boolean; }; /** debug */ private debug; private debugUtil; /** 全局 hover 启用状态,默认 true */ globalHoverEnabled: boolean; constructor(five: Five, params?: { config?: Pick<Tags, 'contentTypeConfig' | 'globalConfig'>; debug?: boolean; containerZIndex?: number; }); appendTo(wrapper: Element): void; /** * @description 加载数据 */ load(data: Tags): Promise<void>; /** * @description 添加标签 * @param tag 标签或标签数组 * @param options 可选配置 * @param options.updateMaskUrl 是否更新 mask。若为 true 且该 panoIndex 已有 Mask 标签,仅更新其 maskUrl(不变 color、style),并添加新标签 */ addTag(tag: Tag | Tag[], options?: { updateMaskUrl?: boolean; }): Promise<void>; /** * @description 改变配置 */ changeConfig(config: Pick<Tags, 'globalConfig' | 'contentTypeConfig'>, merge?: boolean): void; /** * @description 改变全局配置 */ changeGlobalConfig(globalConfig: Tags['globalConfig'], merge?: boolean): void; /** * @description 改变类型配置 */ changeContentTypeConfig<T extends ContentTypeConfigKey>(key: T, contentTypeConfig: TagConfigByKey<T>, merge?: boolean): void; show(params?: { userAction?: boolean; }): Promise<void>; hide(params?: { userAction?: boolean; }): Promise<void>; enable(params?: { userAction?: boolean; }): void; disable(params?: { userAction?: boolean; }): void; setState(state: Partial<State>, params?: { userAction?: boolean; }): void; /** * @description 销毁 */ dispose(): void; /** * @description 闪烁标签 * @param {TagId} id * @param {Partial<anime.AnimeParams>} animeConfig */ blinkTagById(id: TagId, animeConfig?: Partial<anime.AnimeParams>): Promise<void>; /** * @description 展开/收起指定id的标签 * @param {TagId} id * @param {boolean} unfolded */ changeUnfoldedById(id: TagId, unfolded: boolean): void; /** * @description 启用/停用指定id的标签 * @param {TagId} id * @param {boolean} enabled */ changeEnabledById(id: TagId, enabled: boolean): void; /** * @description 修改3D标签normal * @param {TagId} id * @param {ArrayPosition} normal */ changeTagNormalById(id: TagId, normal: ArrayPosition): void; /** * @description 改变data */ changePositionById(id: TagId, position: Tag['position']): void; /** * @description 改变data */ changeDataById<C extends TagContentType = TagContentType>(id: TagId, data: PartialObjectDeep<Tag<C>['data']>, deepMerge?: boolean): void; /** * @description 改变tag的stickType */ changeStickTypeById<C extends TagContentType = TagContentType>(id: TagId, data: PartialObjectDeep<{ [P in keyof Pick<Tag<C>, 'stickType' | 'position' | 'normal' | 'data'>]: Tag[P]; }>, deepMerge?: boolean): void; /** * @description 改变tag任意属性 */ changeTagById<C extends TagContentType = TagContentType>(id: TagId, tag: PartialObjectDeep<Tag<C>>, deepMerge?: boolean): void; /** * @description 批量更新指定点位的 Mask 图 * @param maskUpdates 包含点位索引和对应 mask 的数组 * @example * changeMask([ * { index: 0, mask: 'https://example.com/mask1.png' }, * { index: 1, mask: canvasElement } * ]) */ changeMask(maskUpdates: Array<{ index: number; mask: string | HTMLCanvasElement; }>): void; /** * @description 销毁tag */ destroyTagById(id: TagId | TagId[]): void; /** 更改 tag 模型 */ changeTagModel: (tag: any, data: PartialObjectDeep<Tag<'MediaModel'>['data']>) => Promise<void>; /** * @deprecated */ updateRenderAllTags(): void; /** * @description 清除所有标签 */ clearTags(): void; /** * @description 设置 unfolded */ private setUnfolded; private handleShow; private handleHide; private handleEnable; private handleDisable; private addResizeListener; private addResizeObserver; private handleFiveModeChange; private handleFiveWantsMoveToPano; clickhandler: (params: TagClickParams) => void; private handleFiveCameraUpdate; private handleFiveCameraFovUpdate; private handleFivePanoArrived; /** 楼层切换时,需要更新标签可见性 */ private handleFiveModelShownFloorChange; private onFiveRefined; private onFiveEveryReady; private setUnfoldedByCamera; private changeTagMode; /** * @description 添加 cameraUpdate, panoArrived 等事件监听 */ private addEventListener; render: () => void; /** * @description 设置标签 hover 启用状态 */ setTagHoverEnabled(id: TagId, enabled: boolean): void; /** * @description 获取标签 hover 启用状态 */ getTagHoverEnabled(id: TagId): boolean | undefined; /** * 设置全局 hover 启用状态 */ setGlobalHoverEnabled(enabled: boolean): void; /** * 获取全局 hover 启用状态 */ getGlobalHoverEnabled(): boolean; /** * 验证 ArrayPosition 是否为有效格式 * @param value 待验证的值 * @returns 是否为有效的 ArrayPosition */ private isValidArrayPosition; /** * 更新当前点位的 Mask 标签 * Mask 标签仅在当前点位可见 */ private updateMaskTagsForCurrentPano; /** * 获取所有 Mask 类型的标签 */ get filterMaskTag(): (import("./Tag/BaseTag").BaseTag<"Panorama" | "Model" | "Custom" | "Audio" | "Text" | "ImageText" | "Image" | "Video" | "Link" | "Sticker" | "VRLink" | "PanoLink" | "Marketing" | "MediaPlane" | "MediaModel" | "Unknown", import("..").StickType> & { [key: string]: any; })[]; /** * 获取 MaskTag 性能统计信息(用于性能监控和调试) * @returns 性能统计信息 */ getMaskTagPerformanceStats(): { totalMaskTags: number; visibleMaskTags: number; textureCache: { totalCached: number; totalRefCount: number; estimatedMemoryMB: number; cacheEntries: { source: string; refCount: number; sizeMB: number; }[]; }; currentPanoIndex: number; }; /** * 清理所有 MaskTag 纹理缓存(用于内存管理) * 注意:这会释放所有纹理缓存,谨慎使用 */ clearMaskTagCache(): void; } export default PanoTagPluginController; export { PanoTagPluginController };