2025-12-04 15:24:44 +08:00
|
|
|
|
/**
|
|
|
|
|
|
* 通用按钮组组件 (BimButtonGroup)
|
|
|
|
|
|
*/
|
|
|
|
|
|
export declare class BimButtonGroup implements IBimComponent {
|
|
|
|
|
|
private container;
|
|
|
|
|
|
private options;
|
|
|
|
|
|
private groups;
|
|
|
|
|
|
private activeBtnIds;
|
|
|
|
|
|
private btnRefs;
|
|
|
|
|
|
private dropdownElement;
|
|
|
|
|
|
private hoverTimeout;
|
|
|
|
|
|
private customColors;
|
|
|
|
|
|
private unsubscribeLocale;
|
|
|
|
|
|
private unsubscribeTheme;
|
|
|
|
|
|
private readonly DEFAULT_ICON;
|
|
|
|
|
|
constructor(options: ButtonGroupOptions);
|
|
|
|
|
|
private initContainer;
|
|
|
|
|
|
private updatePosition;
|
|
|
|
|
|
/**
|
|
|
|
|
|
* 应用样式到容器
|
|
|
|
|
|
*/
|
|
|
|
|
|
private applyStyles;
|
|
|
|
|
|
/**
|
|
|
|
|
|
* 设置主题颜色
|
|
|
|
|
|
* 只会应用到没有被用户自定义的颜色属性上
|
|
|
|
|
|
*/
|
|
|
|
|
|
setTheme(theme: ThemeConfig): void;
|
|
|
|
|
|
/**
|
|
|
|
|
|
* 直接设置颜色(强制覆盖)
|
|
|
|
|
|
* 设置的颜色会被标记为自定义,后续的 setTheme 不会覆盖它们
|
|
|
|
|
|
*/
|
|
|
|
|
|
setColors(colors: ButtonGroupColors): void;
|
|
|
|
|
|
init(): Promise<void>;
|
|
|
|
|
|
setLocales(): void;
|
|
|
|
|
|
addGroup(groupId: string, beforeGroupId?: string): void;
|
|
|
|
|
|
addButton(config: ButtonConfig): void;
|
|
|
|
|
|
private findButton;
|
|
|
|
|
|
render(): void;
|
|
|
|
|
|
private renderGroup;
|
|
|
|
|
|
private renderButton;
|
|
|
|
|
|
private handleClick;
|
|
|
|
|
|
private handleMouseEnter;
|
|
|
|
|
|
private handleMouseLeave;
|
|
|
|
|
|
private showDropdown;
|
|
|
|
|
|
private renderDropdownItem;
|
|
|
|
|
|
private closeDropdown;
|
|
|
|
|
|
private updateButtonState;
|
|
|
|
|
|
private getIcon;
|
|
|
|
|
|
updateButtonVisibility(id: string, visible: boolean): void;
|
|
|
|
|
|
setShowLabel(show: boolean): void;
|
|
|
|
|
|
private updateLabelsVisibility;
|
|
|
|
|
|
private findButtonById;
|
|
|
|
|
|
setBackgroundColor(color: string): void;
|
|
|
|
|
|
private isVisible;
|
|
|
|
|
|
destroy(): void;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2025-12-03 18:35:05 +08:00
|
|
|
|
/**
|
|
|
|
|
|
* 通用弹窗组件类
|
|
|
|
|
|
* 支持拖拽、缩放、自定义内容和位置。
|
|
|
|
|
|
*/
|
2025-12-04 15:24:44 +08:00
|
|
|
|
declare class BimDialog implements IBimComponent {
|
2025-12-03 18:35:05 +08:00
|
|
|
|
private element;
|
|
|
|
|
|
private options;
|
|
|
|
|
|
private container;
|
|
|
|
|
|
private header;
|
|
|
|
|
|
private contentArea;
|
|
|
|
|
|
private _isDestroyed;
|
2025-12-04 15:24:44 +08:00
|
|
|
|
private _isInitialized;
|
|
|
|
|
|
private unsubscribeTheme;
|
|
|
|
|
|
private unsubscribeLocale;
|
2025-12-04 18:39:07 +08:00
|
|
|
|
private rafId;
|
2025-12-03 18:35:05 +08:00
|
|
|
|
/**
|
|
|
|
|
|
* 构造函数
|
|
|
|
|
|
* @param options 弹窗配置选项
|
|
|
|
|
|
*/
|
|
|
|
|
|
constructor(options: DialogOptions);
|
2025-12-04 15:24:44 +08:00
|
|
|
|
/**
|
|
|
|
|
|
* 设置主题
|
|
|
|
|
|
* @param theme 全局主题配置
|
|
|
|
|
|
*/
|
|
|
|
|
|
setTheme(theme: ThemeConfig): void;
|
|
|
|
|
|
/**
|
|
|
|
|
|
* 初始化组件功能 (接口实现)
|
|
|
|
|
|
*/
|
|
|
|
|
|
init(): void;
|
|
|
|
|
|
setLocales(): void;
|
2025-12-03 18:35:05 +08:00
|
|
|
|
/**
|
|
|
|
|
|
* 创建弹窗的 DOM 结构
|
|
|
|
|
|
*/
|
|
|
|
|
|
private createDom;
|
|
|
|
|
|
/**
|
|
|
|
|
|
* 设置元素尺寸
|
|
|
|
|
|
*/
|
|
|
|
|
|
private setSize;
|
|
|
|
|
|
/**
|
|
|
|
|
|
* 初始化弹窗位置
|
|
|
|
|
|
*/
|
|
|
|
|
|
private initPosition;
|
|
|
|
|
|
/**
|
2025-12-04 18:39:07 +08:00
|
|
|
|
* 初始化拖拽功能 (性能优化 + 解决粘手)
|
2025-12-03 18:35:05 +08:00
|
|
|
|
*/
|
|
|
|
|
|
private initDrag;
|
|
|
|
|
|
/**
|
2025-12-04 18:39:07 +08:00
|
|
|
|
* 初始化缩放功能 (性能优化 + 解决粘手)
|
2025-12-03 18:35:05 +08:00
|
|
|
|
*/
|
|
|
|
|
|
private initResize;
|
|
|
|
|
|
/**
|
|
|
|
|
|
* 动态设置内容
|
|
|
|
|
|
* @param content 内容元素或 HTML 字符串
|
|
|
|
|
|
*/
|
|
|
|
|
|
setContent(content: HTMLElement | string): void;
|
|
|
|
|
|
/**
|
|
|
|
|
|
* 关闭弹窗并销毁
|
|
|
|
|
|
*/
|
|
|
|
|
|
close(): void;
|
2025-12-04 15:24:44 +08:00
|
|
|
|
/**
|
|
|
|
|
|
* 销毁组件 (接口实现)
|
|
|
|
|
|
*/
|
|
|
|
|
|
destroy(): void;
|
2025-12-03 18:35:05 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2025-12-03 12:00:46 +08:00
|
|
|
|
export declare class BimEngine {
|
|
|
|
|
|
private container;
|
2025-12-03 18:35:05 +08:00
|
|
|
|
private wrapper;
|
2025-12-04 15:24:44 +08:00
|
|
|
|
private topLeftGroup;
|
2025-12-03 18:35:05 +08:00
|
|
|
|
toolbar: ToolbarManager | null;
|
2025-12-04 15:24:44 +08:00
|
|
|
|
buttonGroup: ButtonGroupManager | null;
|
2025-12-03 18:35:05 +08:00
|
|
|
|
dialog: DialogManager | null;
|
2025-12-04 18:39:07 +08:00
|
|
|
|
engine: EngineManager | null;
|
2025-12-04 15:24:44 +08:00
|
|
|
|
get localeManager(): LocaleManager;
|
|
|
|
|
|
get themeManager(): ThemeManager;
|
|
|
|
|
|
constructor(container: HTMLElement | string, options?: {
|
|
|
|
|
|
locale?: LocaleType;
|
|
|
|
|
|
theme?: ThemeType;
|
|
|
|
|
|
});
|
|
|
|
|
|
setLocale(locale: LocaleType): void;
|
|
|
|
|
|
getLocale(): LocaleType;
|
|
|
|
|
|
setTheme(theme: 'dark' | 'light'): void;
|
|
|
|
|
|
setCustomTheme(theme: ThemeConfig): void;
|
2025-12-03 12:00:46 +08:00
|
|
|
|
private init;
|
2025-12-04 18:39:07 +08:00
|
|
|
|
/**
|
|
|
|
|
|
* 初始化 3D 引擎组件
|
|
|
|
|
|
* 注意:只初始化引擎,不加载模型。模型加载在使用层(如 demo.html)进行
|
|
|
|
|
|
* @param options 引擎配置选项(可选)
|
|
|
|
|
|
*/
|
|
|
|
|
|
initEngine(options?: Omit<EngineOptions, 'container'>): boolean;
|
2025-12-04 15:24:44 +08:00
|
|
|
|
private updateTheme;
|
2025-12-03 15:46:18 +08:00
|
|
|
|
destroy(): void;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2025-12-04 15:24:44 +08:00
|
|
|
|
/** 按钮内部文字图标排列 */
|
|
|
|
|
|
declare type ButtonAlign = 'vertical' | 'horizontal';
|
|
|
|
|
|
|
|
|
|
|
|
/** 按钮配置 */
|
2025-12-03 15:46:18 +08:00
|
|
|
|
declare interface ButtonConfig {
|
|
|
|
|
|
id: string;
|
|
|
|
|
|
type: ButtonType;
|
|
|
|
|
|
label: string;
|
|
|
|
|
|
icon?: string;
|
|
|
|
|
|
keepActive?: boolean;
|
|
|
|
|
|
disabled?: boolean;
|
|
|
|
|
|
onClick?: (button: OptButton) => void;
|
|
|
|
|
|
children?: ButtonConfig[];
|
|
|
|
|
|
groupId?: string;
|
|
|
|
|
|
parentId?: string;
|
2025-12-04 15:24:44 +08:00
|
|
|
|
/** 按钮内部图标文字排列 (默认 vertical,即图标在上) */
|
|
|
|
|
|
align?: ButtonAlign;
|
|
|
|
|
|
/** 图标大小 (正方形,单位 px,默认 32) */
|
|
|
|
|
|
iconSize?: number;
|
|
|
|
|
|
/** 按钮最小宽度 (单位 px,默认 50) */
|
|
|
|
|
|
minWidth?: number;
|
2025-12-03 15:46:18 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
export declare interface ButtonGroup {
|
|
|
|
|
|
id: string;
|
|
|
|
|
|
buttons: OptButton[];
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2025-12-04 15:24:44 +08:00
|
|
|
|
declare interface ButtonGroupColors {
|
|
|
|
|
|
backgroundColor?: string;
|
|
|
|
|
|
btnBackgroundColor?: string;
|
|
|
|
|
|
btnHoverColor?: string;
|
|
|
|
|
|
btnActiveColor?: string;
|
|
|
|
|
|
iconColor?: string;
|
|
|
|
|
|
iconActiveColor?: string;
|
|
|
|
|
|
textColor?: string;
|
|
|
|
|
|
textActiveColor?: string;
|
|
|
|
|
|
}
|
2025-12-03 15:46:18 +08:00
|
|
|
|
|
|
|
|
|
|
/**
|
2025-12-04 15:24:44 +08:00
|
|
|
|
* 通用按钮组管理器
|
|
|
|
|
|
* 负责创建和管理除底部工具栏以外的其他按钮组。
|
2025-12-03 15:46:18 +08:00
|
|
|
|
*/
|
2025-12-04 15:24:44 +08:00
|
|
|
|
declare class ButtonGroupManager {
|
|
|
|
|
|
private activeGroups;
|
|
|
|
|
|
private container;
|
|
|
|
|
|
constructor(container: HTMLElement);
|
|
|
|
|
|
/**
|
|
|
|
|
|
* 创建一个新的按钮组
|
|
|
|
|
|
*/
|
|
|
|
|
|
create(options: Omit<ButtonGroupOptions, 'container'>): BimButtonGroup;
|
|
|
|
|
|
updateTheme(theme: ThemeConfig): void;
|
|
|
|
|
|
refresh(): void;
|
|
|
|
|
|
destroy(): void;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
export declare interface ButtonGroupOptions extends ButtonGroupColors {
|
|
|
|
|
|
container: HTMLElement | string;
|
|
|
|
|
|
/** 屏幕位置 (如 top-left) */
|
|
|
|
|
|
position?: GroupPosition;
|
|
|
|
|
|
/** 按钮组排列方向 (默认 row) */
|
|
|
|
|
|
direction?: GroupDirection;
|
|
|
|
|
|
/** 按钮内部图标文字排列 (默认 vertical) */
|
|
|
|
|
|
align?: ButtonAlign;
|
|
|
|
|
|
/** 菜单展开方向 */
|
|
|
|
|
|
expand?: ExpandDirection;
|
|
|
|
|
|
showLabel?: boolean;
|
|
|
|
|
|
visibility?: Record<string, boolean>;
|
|
|
|
|
|
className?: string;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
declare type ButtonType = 'button' | 'menu';
|
|
|
|
|
|
|
2025-12-03 15:46:18 +08:00
|
|
|
|
export declare interface ClickPayload {
|
|
|
|
|
|
button: OptButton;
|
|
|
|
|
|
action: 'activate' | 'deactivate' | 'trigger';
|
|
|
|
|
|
isActive?: boolean;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2025-12-04 18:39:07 +08:00
|
|
|
|
export declare function createEngine(r) {
|
|
|
|
|
|
const e = r.version || "v1";
|
|
|
|
|
|
switch (e) {
|
|
|
|
|
|
case "v2":
|
|
|
|
|
|
return new Uc(r);
|
|
|
|
|
|
case "v1":
|
|
|
|
|
|
return new L_(r);
|
|
|
|
|
|
:
|
|
|
|
|
|
return console.warn(`Version '${e}' not found. Falling back to v2.`), new Uc(r);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2025-12-03 18:35:05 +08:00
|
|
|
|
/**
|
|
|
|
|
|
* 弹窗颜色配置
|
|
|
|
|
|
*/
|
|
|
|
|
|
declare interface DialogColors {
|
|
|
|
|
|
/** 窗体背景颜色,默认 rgba(17, 17, 17, 0.95) */
|
|
|
|
|
|
backgroundColor?: string;
|
|
|
|
|
|
/** 标题栏背景颜色,默认 #2a2a2a */
|
|
|
|
|
|
headerBackgroundColor?: string;
|
|
|
|
|
|
/** 标题文字颜色,默认 #fff */
|
|
|
|
|
|
titleColor?: string;
|
|
|
|
|
|
/** 内容文字颜色,默认 #ccc */
|
|
|
|
|
|
textColor?: string;
|
|
|
|
|
|
/** 边框颜色,默认 #444 */
|
|
|
|
|
|
borderColor?: string;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* 弹窗管理器
|
|
|
|
|
|
* 负责创建和管理应用中的各类弹窗。
|
|
|
|
|
|
*/
|
|
|
|
|
|
declare class DialogManager {
|
|
|
|
|
|
/** 弹窗挂载的父容器 */
|
|
|
|
|
|
private container;
|
2025-12-04 15:24:44 +08:00
|
|
|
|
/** 活跃的弹窗实例列表 */
|
|
|
|
|
|
private activeDialogs;
|
2025-12-03 18:35:05 +08:00
|
|
|
|
/**
|
|
|
|
|
|
* 构造函数
|
|
|
|
|
|
* @param container 弹窗挂载的目标容器
|
|
|
|
|
|
*/
|
|
|
|
|
|
constructor(container: HTMLElement);
|
|
|
|
|
|
/**
|
|
|
|
|
|
* 创建一个通用弹窗
|
|
|
|
|
|
* @param options 弹窗配置选项(不需要传 container,自动使用管理器绑定的容器)
|
|
|
|
|
|
* @returns BimDialog 实例
|
|
|
|
|
|
*/
|
|
|
|
|
|
create(options: Omit<DialogOptions, 'container'>): BimDialog;
|
|
|
|
|
|
/**
|
|
|
|
|
|
* 显示二次封装的模型信息弹窗
|
|
|
|
|
|
* 演示如何调用特定的业务弹窗组件
|
|
|
|
|
|
*/
|
|
|
|
|
|
showInfoDialog(): void;
|
2025-12-04 15:24:44 +08:00
|
|
|
|
/**
|
|
|
|
|
|
* 响应全局主题变更
|
|
|
|
|
|
* @param theme 全局主题配置
|
|
|
|
|
|
*/
|
|
|
|
|
|
updateTheme(theme: ThemeConfig): void;
|
2025-12-03 18:35:05 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* 弹窗配置选项接口
|
|
|
|
|
|
*/
|
|
|
|
|
|
declare interface DialogOptions extends DialogColors {
|
|
|
|
|
|
/** 弹窗挂载的父容器 */
|
|
|
|
|
|
container: HTMLElement;
|
|
|
|
|
|
/** 弹窗标题 */
|
|
|
|
|
|
title?: string;
|
|
|
|
|
|
/** 弹窗内容,支持 HTML 字符串或 HTMLElement */
|
|
|
|
|
|
content?: HTMLElement | string;
|
|
|
|
|
|
/** 弹窗宽度,数字(像素)或字符串(如 '50%') */
|
|
|
|
|
|
width?: number | string;
|
|
|
|
|
|
/** 弹窗高度 */
|
|
|
|
|
|
height?: number | string;
|
|
|
|
|
|
/** 弹窗位置 */
|
|
|
|
|
|
position?: DialogPosition;
|
|
|
|
|
|
/** 是否可拖拽 */
|
|
|
|
|
|
draggable?: boolean;
|
|
|
|
|
|
/** 是否可调整大小 */
|
|
|
|
|
|
resizable?: boolean;
|
|
|
|
|
|
/** 最小宽度限制 */
|
|
|
|
|
|
minWidth?: number;
|
|
|
|
|
|
/** 最小高度限制 */
|
|
|
|
|
|
minHeight?: number;
|
|
|
|
|
|
/** 关闭时的回调函数 */
|
|
|
|
|
|
onClose?: () => void;
|
2025-12-04 15:24:44 +08:00
|
|
|
|
/** 打开时的回调函数 */
|
|
|
|
|
|
onOpen?: () => void;
|
2025-12-03 18:35:05 +08:00
|
|
|
|
/** 弹窗唯一标识 ID (可选) */
|
|
|
|
|
|
id?: string;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* 弹窗位置类型定义
|
|
|
|
|
|
* 可以是预设的字符串位置(如 'center', 'top-left' 等),
|
|
|
|
|
|
* 也可以是具体的坐标对象 { x, y }
|
|
|
|
|
|
*/
|
|
|
|
|
|
declare type DialogPosition = 'center' | 'top-left' | 'top-center' | 'top-right' | 'left-center' | 'right-center' | 'bottom-left' | 'bottom-center' | 'bottom-right' | {
|
|
|
|
|
|
x: number;
|
|
|
|
|
|
y: number;
|
|
|
|
|
|
};
|
|
|
|
|
|
|
2025-12-04 18:39:07 +08:00
|
|
|
|
/**
|
|
|
|
|
|
* 3D 引擎管理器
|
|
|
|
|
|
* 负责连接 Engine 组件和 BimEngine,向外部暴露简化的 API
|
|
|
|
|
|
* 采用延迟初始化模式,用户需主动调用 initialize() 方法
|
|
|
|
|
|
*/
|
|
|
|
|
|
declare class EngineManager {
|
|
|
|
|
|
/** 3D 引擎挂载的父容器 */
|
|
|
|
|
|
private container;
|
|
|
|
|
|
/** 3D 引擎组件实例 */
|
|
|
|
|
|
private engine;
|
|
|
|
|
|
/**
|
|
|
|
|
|
* 构造函数
|
|
|
|
|
|
* @param container 3D 引擎挂载的目标容器
|
|
|
|
|
|
*/
|
|
|
|
|
|
constructor(container: HTMLElement);
|
|
|
|
|
|
/**
|
|
|
|
|
|
* 初始化 3D 引擎
|
|
|
|
|
|
* @param options 引擎配置选项(可选,如果不提供则使用默认配置)
|
|
|
|
|
|
* @returns 是否初始化成功
|
|
|
|
|
|
*/
|
|
|
|
|
|
initialize(options?: Omit<EngineOptions, 'container'>): boolean;
|
|
|
|
|
|
/**
|
|
|
|
|
|
* 检查 3D 引擎是否已初始化
|
|
|
|
|
|
*/
|
|
|
|
|
|
isInitialized(): boolean;
|
|
|
|
|
|
/**
|
|
|
|
|
|
* 加载 3D 模型
|
|
|
|
|
|
* @param url 模型文件 URL
|
|
|
|
|
|
* @param options 加载选项(位置、旋转、缩放)
|
|
|
|
|
|
*/
|
|
|
|
|
|
loadModel(url: string, options?: ModelLoadOptions): void;
|
|
|
|
|
|
/**
|
|
|
|
|
|
* 获取原始 3D 引擎实例
|
|
|
|
|
|
* 用于直接调用第三方引擎的其他 API
|
|
|
|
|
|
*/
|
|
|
|
|
|
getEngine(): any;
|
|
|
|
|
|
/**
|
|
|
|
|
|
* 销毁 3D 引擎实例
|
|
|
|
|
|
*/
|
|
|
|
|
|
destroy(): void;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* 引擎配置选项
|
|
|
|
|
|
* 用于 Engine 组件的初始化
|
|
|
|
|
|
*/
|
|
|
|
|
|
export declare interface EngineOptions {
|
|
|
|
|
|
/** 容器元素 */
|
|
|
|
|
|
container: HTMLElement;
|
|
|
|
|
|
/** 背景颜色(十六进制数字,如 0x333333) */
|
|
|
|
|
|
backgroundColor?: number;
|
|
|
|
|
|
/** WebGL 版本 */
|
|
|
|
|
|
version?: 'v1' | 'v2';
|
|
|
|
|
|
/** 是否显示性能统计 */
|
|
|
|
|
|
showStats?: boolean;
|
|
|
|
|
|
/** 是否显示视图立方体 */
|
|
|
|
|
|
showViewCube?: boolean;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2025-12-04 15:24:44 +08:00
|
|
|
|
/** 二级菜单展开方向 */
|
|
|
|
|
|
declare type ExpandDirection = 'up' | 'down' | 'left' | 'right';
|
|
|
|
|
|
|
|
|
|
|
|
/** 按钮组排列方向 (Flex-direction) */
|
|
|
|
|
|
declare type GroupDirection = 'row' | 'column';
|
|
|
|
|
|
|
|
|
|
|
|
/** 弹窗/按钮组位置 */
|
|
|
|
|
|
declare type GroupPosition = 'center' | 'top-left' | 'top-center' | 'top-right' | 'left-center' | 'right-center' | 'bottom-left' | 'bottom-center' | 'bottom-right' | {
|
|
|
|
|
|
x: number;
|
|
|
|
|
|
y: number;
|
|
|
|
|
|
} | 'static';
|
|
|
|
|
|
|
2025-12-03 18:35:05 +08:00
|
|
|
|
/**
|
2025-12-04 15:24:44 +08:00
|
|
|
|
* BIM 引擎组件通用接口
|
|
|
|
|
|
* 所有受引擎管理的 UI 组件都必须实现此接口
|
2025-12-03 18:35:05 +08:00
|
|
|
|
*/
|
2025-12-04 15:24:44 +08:00
|
|
|
|
declare interface IBimComponent {
|
2025-12-03 18:35:05 +08:00
|
|
|
|
/**
|
2025-12-04 15:24:44 +08:00
|
|
|
|
* 初始化组件
|
|
|
|
|
|
* 用于创建 DOM、绑定事件、加载资源等
|
|
|
|
|
|
* 支持同步或异步操作
|
2025-12-03 18:35:05 +08:00
|
|
|
|
*/
|
2025-12-04 15:24:44 +08:00
|
|
|
|
init(): void | Promise<void>;
|
2025-12-03 18:35:05 +08:00
|
|
|
|
/**
|
2025-12-04 15:24:44 +08:00
|
|
|
|
* 设置主题
|
|
|
|
|
|
* 组件应在此方法中将 ThemeConfig 映射为自身的 CSS 变量或样式
|
2025-12-03 18:35:05 +08:00
|
|
|
|
*/
|
2025-12-04 15:24:44 +08:00
|
|
|
|
setTheme(theme: ThemeConfig): void;
|
2025-12-03 18:35:05 +08:00
|
|
|
|
/**
|
2025-12-04 15:24:44 +08:00
|
|
|
|
* 设置语言
|
2025-12-03 18:35:05 +08:00
|
|
|
|
*/
|
2025-12-04 15:24:44 +08:00
|
|
|
|
setLocales(): void;
|
2025-12-03 15:46:18 +08:00
|
|
|
|
/**
|
2025-12-04 15:24:44 +08:00
|
|
|
|
* 销毁组件
|
|
|
|
|
|
* 清理 DOM 事件监听、定时器和引用
|
2025-12-03 15:46:18 +08:00
|
|
|
|
*/
|
2025-12-04 15:24:44 +08:00
|
|
|
|
destroy(): void;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
declare type LocaleChangeListener = (locale: LocaleType) => void;
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* 语言管理器类
|
|
|
|
|
|
*/
|
|
|
|
|
|
declare class LocaleManager {
|
|
|
|
|
|
private currentLocale;
|
|
|
|
|
|
private messages;
|
|
|
|
|
|
private listeners;
|
|
|
|
|
|
constructor();
|
2025-12-03 18:35:05 +08:00
|
|
|
|
/**
|
2025-12-04 15:24:44 +08:00
|
|
|
|
* 获取当前语言
|
2025-12-03 18:35:05 +08:00
|
|
|
|
*/
|
2025-12-04 15:24:44 +08:00
|
|
|
|
getLocale(): LocaleType;
|
2025-12-03 18:35:05 +08:00
|
|
|
|
/**
|
2025-12-04 15:24:44 +08:00
|
|
|
|
* 切换语言
|
2025-12-03 18:35:05 +08:00
|
|
|
|
*/
|
2025-12-04 15:24:44 +08:00
|
|
|
|
setLocale(locale: LocaleType): void;
|
2025-12-03 18:35:05 +08:00
|
|
|
|
/**
|
2025-12-04 15:24:44 +08:00
|
|
|
|
* 翻译核心方法
|
2025-12-03 18:35:05 +08:00
|
|
|
|
*/
|
2025-12-04 15:24:44 +08:00
|
|
|
|
t(key: string): string;
|
2025-12-03 18:35:05 +08:00
|
|
|
|
/**
|
2025-12-04 15:24:44 +08:00
|
|
|
|
* 订阅变更
|
2025-12-03 18:35:05 +08:00
|
|
|
|
*/
|
2025-12-04 15:24:44 +08:00
|
|
|
|
subscribe(listener: LocaleChangeListener): () => void;
|
|
|
|
|
|
private notifyListeners;
|
2025-12-03 15:46:18 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
2025-12-04 15:24:44 +08:00
|
|
|
|
* 语言代码类型
|
2025-12-03 15:46:18 +08:00
|
|
|
|
*/
|
2025-12-04 15:24:44 +08:00
|
|
|
|
declare type LocaleType = 'zh-CN' | 'en-US';
|
2025-12-03 15:46:18 +08:00
|
|
|
|
|
2025-12-04 18:39:07 +08:00
|
|
|
|
/**
|
|
|
|
|
|
* 模型加载选项
|
|
|
|
|
|
* 用于配置模型的位置、旋转和缩放
|
|
|
|
|
|
*/
|
|
|
|
|
|
export declare interface ModelLoadOptions {
|
|
|
|
|
|
/** 模型初始位置 [x, y, z] */
|
|
|
|
|
|
position?: [number, number, number];
|
|
|
|
|
|
/** 模型初始旋转 [x, y, z](弧度) */
|
|
|
|
|
|
rotation?: [number, number, number];
|
|
|
|
|
|
/** 模型初始缩放 [x, y, z] */
|
|
|
|
|
|
scale?: [number, number, number];
|
|
|
|
|
|
/** 模型 ID(可选,如果不提供则自动生成) */
|
|
|
|
|
|
id?: string;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2025-12-03 15:46:18 +08:00
|
|
|
|
export declare interface OptButton extends ButtonConfig {
|
|
|
|
|
|
children?: OptButton[];
|
2025-12-03 12:00:46 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2025-12-04 15:24:44 +08:00
|
|
|
|
declare type ThemeChangeListener = (theme: ThemeConfig) => void;
|
|
|
|
|
|
|
2025-12-03 18:35:05 +08:00
|
|
|
|
/**
|
2025-12-04 15:24:44 +08:00
|
|
|
|
* 全局主题配置接口
|
|
|
|
|
|
* 定义系统通用的语义化颜色
|
2025-12-03 18:35:05 +08:00
|
|
|
|
*/
|
2025-12-04 15:24:44 +08:00
|
|
|
|
declare interface ThemeConfig {
|
|
|
|
|
|
/** 主题名称 */
|
|
|
|
|
|
name: string;
|
|
|
|
|
|
/** 品牌色/主色 */
|
|
|
|
|
|
primary: string;
|
|
|
|
|
|
/** 主色悬停/激活态 */
|
|
|
|
|
|
primaryHover: string;
|
|
|
|
|
|
/** 基础背景色 (应用整体背景) */
|
|
|
|
|
|
background: string;
|
|
|
|
|
|
/** 面板背景色 (工具栏、弹窗背景) */
|
|
|
|
|
|
panelBackground: string;
|
|
|
|
|
|
/** 主要文字颜色 */
|
|
|
|
|
|
textPrimary: string;
|
|
|
|
|
|
/** 次要文字颜色 */
|
|
|
|
|
|
textSecondary: string;
|
|
|
|
|
|
/** 边框/分割线颜色 */
|
|
|
|
|
|
border: string;
|
2025-12-03 18:35:05 +08:00
|
|
|
|
/** 图标默认颜色 */
|
2025-12-04 15:24:44 +08:00
|
|
|
|
icon: string;
|
|
|
|
|
|
/** 图标激活颜色 */
|
|
|
|
|
|
iconActive: string;
|
|
|
|
|
|
/** 交互组件背景 (如按钮默认背景) */
|
|
|
|
|
|
componentBackground: string;
|
|
|
|
|
|
/** 交互组件悬停背景 */
|
|
|
|
|
|
componentHover: string;
|
|
|
|
|
|
/** 交互组件激活背景 */
|
|
|
|
|
|
componentActive: string;
|
2025-12-03 18:35:05 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
2025-12-04 15:24:44 +08:00
|
|
|
|
* 主题管理器 (单例)
|
2025-12-03 18:35:05 +08:00
|
|
|
|
*/
|
2025-12-04 15:24:44 +08:00
|
|
|
|
declare class ThemeManager {
|
|
|
|
|
|
private currentTheme;
|
|
|
|
|
|
private listeners;
|
|
|
|
|
|
constructor();
|
2025-12-03 18:35:05 +08:00
|
|
|
|
/**
|
2025-12-04 15:24:44 +08:00
|
|
|
|
* 获取当前主题配置
|
2025-12-03 18:35:05 +08:00
|
|
|
|
*/
|
2025-12-04 15:24:44 +08:00
|
|
|
|
getTheme(): ThemeConfig;
|
2025-12-03 18:35:05 +08:00
|
|
|
|
/**
|
2025-12-04 15:24:44 +08:00
|
|
|
|
* 切换预设主题
|
|
|
|
|
|
* @param themeName 'dark' | 'light'
|
2025-12-03 18:35:05 +08:00
|
|
|
|
*/
|
2025-12-04 15:24:44 +08:00
|
|
|
|
setTheme(themeName: 'dark' | 'light'): void;
|
2025-12-03 18:35:05 +08:00
|
|
|
|
/**
|
2025-12-04 15:24:44 +08:00
|
|
|
|
* 应用自定义主题配置
|
|
|
|
|
|
* @param theme 配置对象
|
2025-12-03 18:35:05 +08:00
|
|
|
|
*/
|
2025-12-04 15:24:44 +08:00
|
|
|
|
setCustomTheme(theme: ThemeConfig): void;
|
2025-12-03 18:35:05 +08:00
|
|
|
|
/**
|
2025-12-04 15:24:44 +08:00
|
|
|
|
* 内部应用主题逻辑
|
2025-12-03 18:35:05 +08:00
|
|
|
|
*/
|
2025-12-04 15:24:44 +08:00
|
|
|
|
private applyTheme;
|
2025-12-03 18:35:05 +08:00
|
|
|
|
/**
|
2025-12-04 15:24:44 +08:00
|
|
|
|
* 订阅主题变更
|
2025-12-03 18:35:05 +08:00
|
|
|
|
*/
|
2025-12-04 15:24:44 +08:00
|
|
|
|
subscribe(listener: ThemeChangeListener): () => void;
|
|
|
|
|
|
private notifyListeners;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* 主题类型定义
|
|
|
|
|
|
*/
|
|
|
|
|
|
declare type ThemeType = 'dark' | 'light' | 'custom';
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* 底部工具栏 (Toolbar)
|
|
|
|
|
|
* BimButtonGroup 的子类,专门用于加载工具栏默认按钮。
|
|
|
|
|
|
*/
|
|
|
|
|
|
export declare class Toolbar extends BimButtonGroup {
|
2025-12-03 18:35:05 +08:00
|
|
|
|
/**
|
2025-12-04 15:24:44 +08:00
|
|
|
|
* 重写初始化,加载默认按钮
|
2025-12-03 18:35:05 +08:00
|
|
|
|
*/
|
2025-12-04 15:24:44 +08:00
|
|
|
|
init(): Promise<void>;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* 底部工具栏管理器 (ToolbarManager)
|
|
|
|
|
|
* 仅负责管理底部工具栏实例。
|
|
|
|
|
|
*/
|
|
|
|
|
|
declare class ToolbarManager {
|
|
|
|
|
|
private toolbar;
|
|
|
|
|
|
private toolbarContainer;
|
|
|
|
|
|
private container;
|
|
|
|
|
|
constructor(container: HTMLElement);
|
|
|
|
|
|
private init;
|
|
|
|
|
|
updateTheme(theme: ThemeConfig): void;
|
|
|
|
|
|
refresh(): void;
|
|
|
|
|
|
destroy(): void;
|
|
|
|
|
|
addGroup(groupId: string, beforeGroupId?: string): void;
|
|
|
|
|
|
addButton(config: ButtonConfig): void;
|
|
|
|
|
|
setButtonVisibility(id: string, v: boolean): void;
|
2025-12-03 18:35:05 +08:00
|
|
|
|
setShowLabel(show: boolean): void;
|
|
|
|
|
|
setVisible(visible: boolean): void;
|
|
|
|
|
|
setBackgroundColor(color: string): void;
|
2025-12-04 15:24:44 +08:00
|
|
|
|
setColors(colors: ButtonGroupColors): void;
|
2025-12-03 18:35:05 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2025-12-03 12:00:46 +08:00
|
|
|
|
export { }
|