/**
 * MinigameTools.ts — 小游戏 iframe 覆盖层管理工具（TypeScript 完整实现）
 *
 * 向 LLM 暴露两个工具：
 * - `load_minigame`：将工作空间相对路径的 HTML 加载到 iframe 覆盖层
 * - `configure_minigame`：运行时更新 iframe 外观（位置/大小/标题栏等）
 *
 * 特性：
 * - 多 slot 并发（每个 slot 独立 iframe + z-index）
 * - 拖拽标题栏、关闭按钮
 * - postMessage 双向通信 + gameLoaded / gameFinished 生命周期事件
 * - persistKey 防止重复加载同一游戏
 * - backdrop 遮罩层支持
 * - 前景元素提升（setSlotForegroundElements）
 * - 与 DigitalHuman 集成（launchSkill / openSkill 消息桥）
 */
/** OpenAI Function Calling 工具定义 */
export interface ToolDefinition {
    type: 'function';
    function: {
        name: string;
        description: string;
        parameters: Record<string, unknown>;
    };
}
/** 帧外观选项（load_minigame / configure_minigame 参数） */
export interface FrameOptions {
    width?: number | string;
    height?: number | string;
    left?: string;
    top?: string;
    right?: string;
    bottom?: string;
    zIndex?: number;
    showTitleBar?: boolean;
    showCloseButton?: boolean;
    titleText?: string;
    borderRadius?: string;
    boxShadow?: string;
    background?: string;
    backdrop?: string | boolean;
    slot?: string;
    layout?: string;
    preset?: string;
    frameOptions?: FrameOptions;
    [key: string]: unknown;
}
/** Slot 会话信息 */
export interface SlotSession {
    slot: string;
    parentSlot: string | null;
    promptFile: string;
    tools?: string[];
    parentPromptFile: string;
    parentTools?: string[];
    root: boolean;
    restorePolicy: string;
    closePolicy: string;
    frameOptions: FrameOptions | null;
    title: string;
    sourceSlot: string;
    openedAt: number;
    preload: boolean;
    revealed: boolean;
    [key: string]: unknown;
}
/** MinigameTools 构造选项 */
export interface MinigameToolsOptions {
    width?: number;
    height?: number;
    zIndex?: number;
    containerId?: string;
    onEvent?: (data: Record<string, unknown>) => void;
    log?: (msg: string) => void;
}
/** openSlotSession 选项 */
export interface OpenSlotSessionOptions extends FrameOptions {
    slot?: string;
    root?: boolean;
    parentSlot?: string;
    sourceSlot?: string;
    promptFile?: string;
    skillPath?: string;
    tools?: string[];
    parentPromptFile?: string;
    parentTools?: string[];
    restorePolicy?: string;
    closePolicy?: string;
    gameTitle?: string;
    title?: string;
    preload?: boolean;
    foregroundElements?: HTMLElement | HTMLElement[] | string | string[];
    foregroundOptions?: Record<string, unknown>;
    autoContinue?: boolean;
    [key: string]: unknown;
}
/** SDK 最小接口 */
interface SDKRef {
    copilotTools?: {
        registerToolCategory?: (name: string, entry: Record<string, unknown>) => void;
        resolveEnabledCategories?: (tools: Record<string, unknown>) => string[];
    };
    personalPageStore?: {
        withConfig: (config: Record<string, unknown>) => {
            getAbsUrl: (path: string) => string;
            workspace?: string;
            mountedFolder?: unknown;
        };
    };
    getToken?: () => string;
    constructor?: {
        source?: string;
        sourceIsModule?: boolean;
    };
    token?: string | null;
    __minigameTools?: MinigameTools;
    [key: string]: unknown;
}
/**
 * MinigameTools — 小游戏 iframe 管理工具（供 CopilotTools 注册为 'minigame' 分类）。
 *
 * 使用工厂方法创建实例：
 * ```ts
 * const minigame = MinigameTools.register(sdk, { onEvent: (d) => console.log(d) });
 * ```
 */
export default class MinigameTools {
    static readonly definitions: ToolDefinition[];
    readonly sdk: SDKRef;
    defaultWidth: number;
    defaultHeight: number;
    zIndex: number;
    containerId: string;
    private _listeners;
    private _log;
    private _slots;
    private _slotSessions;
    private _sessionStack;
    private _launchHost;
    private _zIndexCursor;
    private _activeSlot;
    _defaultSlot: string | null;
    private _msgListener;
    constructor(sdk: SDKRef, options?: MinigameToolsOptions);
    get _container(): HTMLDivElement | null;
    get _iframe(): HTMLIFrameElement | null;
    get _title(): HTMLSpanElement | null;
    get _header(): HTMLDivElement | null;
    get _closeBtn(): HTMLButtonElement | null;
    private _getActiveSlotField;
    /**
     * 创建并注册 MinigameTools 实例（幂等）。
     * 若 sdk 上已有实例则复用，并追加 onEvent / log。
     */
    static register(sdk: SDKRef, options?: MinigameToolsOptions): MinigameTools;
    /**
     * 向 CopilotTools 注册 'minigame' 工具分类并启动 postMessage 监听。
     */
    register(): this;
    private _resolveSlot;
    private _getOrCreateSlot;
    private _getSlot;
    /**
     * 设置当前活跃 slot，将 `id="minigame-iframe"` 移动到目标 slot 的 iframe。
     */
    setActiveSlot(name: string): void;
    /** 当前活跃 slot 名称。 */
    get activeSlot(): string;
    setLaunchHost(host: typeof this._launchHost): void;
    getLaunchSession(slotName?: string): SlotSession | null;
    finishSlotSession(slotName?: string): SlotSession | null;
    /**
     * 打开一个命名 slot 会话（设置尺寸/层级/前景元素并激活 slot）。
     */
    openSlotSession(options?: OpenSlotSessionOptions): SlotSession;
    restorePreviousActiveSlot(preferredSlot?: string): string | null;
    /**
     * 运行时更新 slot 的帧外观配置（可在加载前后调用）。
     */
    configure(options?: FrameOptions): void;
    setSlotForegroundElements(slotName: string | undefined, elements?: HTMLElement | HTMLElement[] | string | string[], options?: Record<string, unknown>): void;
    /**
     * 执行工具函数（CopilotTools 分发入口）。
     */
    execute(fnName: string, fnArgs?: Record<string, unknown>, config?: Record<string, unknown>): Promise<unknown>;
    /**
     * 预加载（隐藏加载）小游戏页面。
     */
    preload(fnArgs?: Record<string, unknown>, config?: Record<string, unknown>): Promise<unknown>;
    /**
     * 显示已预加载的 slot（使其可见）。
     */
    showSlot(slotName: string | undefined, options?: Record<string, unknown>): boolean;
    private _loadMinigame;
    /**
     * 隐藏并清除 slot 的 iframe src。
     * @param opts - slot 名称和关闭原因
     */
    close(opts?: {
        slot?: string;
        reason?: string;
    }): void;
    /** 销毁所有 slot 并移除 DOM 和监听器。 */
    destroy(): void;
    /**
     * 注册 iframe 事件监听器（gameLoaded / gameFinished / 自定义）。
     * @returns unsubscribe 函数
     */
    addEventListener(fn: (data: Record<string, unknown>) => void): () => void;
    removeEventListener(fn: (data: Record<string, unknown>) => void): void;
    /**
     * 向指定 slot 的 minigame iframe 发送 postMessage。
     * @param data - 结构化可克隆的消息载荷
     * @param opts - 目标 slot（默认当前活跃 slot）
     */
    postMessageToMinigame(data: Record<string, unknown>, opts?: {
        slot?: string;
    }): boolean;
    private _createSessionSlotName;
    private _withoutBackdrop;
    private _nextZIndex;
    private _resolveFrameOptions;
    private _applyFrameOptions;
    private _showBackdrop;
    private _hideBackdrop;
    private _normalizeForegroundElements;
    private _applyForegroundElements;
    private _restoreForegroundElements;
    private _ensureMessageListener;
    private _createSlotDOM;
    private _wireDrag;
}
export {};
//# sourceMappingURL=MinigameTools.d.ts.map