import { e as MMDPlayerBaseProps, f as MMDPlayerBaseRef, g as MMDPlayerEnhancedProps, h as MMDPlaylistProps, b as MMDPlaylistNode, d as MMDResources, i as MMDStage, j as MobileOptimization } from '../types-B60F7EZZ.js';
export { B as BloomOptions, M as MMDPlaylistConfig, a as MMDResourceItem, c as MMDResourceOptions, O as OutlineOptions, R as ResourceOption, T as ToonOptions } from '../types-B60F7EZZ.js';
import React__default from 'react';
import 'three';

declare const MMDPlayerBase: React__default.ForwardRefExoticComponent<MMDPlayerBaseProps & React__default.RefAttributes<MMDPlayerBaseRef>>;

declare const MMDPlayerEnhanced: React__default.FC<MMDPlayerEnhancedProps>;

/**
 * MMDPlaylist - 播放列表管理器
 *
 * 核心功能：
 * - 管理多个播放节点
 * - 实现无缝切换（通过 key 变化触发组件重新挂载）
 * - 预加载策略 (none / next / all)
 * - 智能内存回收
 * - 播放列表 UI
 */
declare const MMDPlaylist: React__default.FC<MMDPlaylistProps>;

interface MMDPlayerEnhancedDebugInfoProps {
    isPlaying: boolean;
    isLooping: boolean;
    isFullscreen: boolean;
    showAxes: boolean;
    isLoading: boolean;
    currentResourceId?: string;
    currentResourceName?: string;
    mode: 'single' | 'list' | 'options';
    totalResources: number;
}
declare const MMDPlayerEnhancedDebugInfo: React__default.FC<MMDPlayerEnhancedDebugInfoProps>;

interface MMDPlaylistDebugInfoProps {
    playlistName: string;
    currentIndex: number;
    currentNode: MMDPlaylistNode;
    totalNodes: number;
    isPlaying: boolean;
    isListLooping: boolean;
    isNodeLooping: boolean;
    preloadStrategy: 'none' | 'next' | 'all';
    isLoading: boolean;
    isFullscreen: boolean;
    showAxes: boolean;
    preloadedNodes: number[];
}
declare const MMDPlaylistDebugInfo: React__default.FC<MMDPlaylistDebugInfoProps>;

/**
 * Ammo.js 加载器
 * 用于异步加载 Ammo.js 物理引擎 (WASM 版本)
 */
declare global {
    interface Window {
        Ammo: any;
    }
}
/**
 * 加载 Ammo.js
 * @param path Ammo.js (WASM wrapper) 的路径，默认为 '/libs/ammo.wasm.js'
 */
declare const loadAmmo: (path?: string) => Promise<any>;

/**
 * MMD Visual Novel (Galgame 风格) 类型定义
 */

/** 单条对话/文案 */
interface DialogueLine {
    /** 唯一标识 */
    id: string;
    /** 说话者名称（可选，不填则不显示名称栏） */
    speaker?: string;
    /** 说话者名称颜色 */
    speakerColor?: string;
    /** 对话文本内容 */
    text: string;
    /** 文字显示速度（毫秒/字符），默认 50 */
    typeSpeed?: number;
    /** 是否等待用户点击才显示下一条（默认 true） */
    waitForClick?: boolean;
    /** 自动等待时间（毫秒），仅在 waitForClick 为 false 时生效 */
    autoDelay?: number;
    /** 对话时的表情/动作切换（可选） */
    expression?: string;
    /** 对话时播放的音效（可选） */
    voicePath?: string;
    /** 对话中插入的分支选项（可选，若有则显示选项） */
    choices?: DialogueChoice[];
    /** 视觉特效（可选） */
    effect?: VisualEffect;
}
/** 视觉特效配置 */
interface VisualEffect {
    /** 特效类型 */
    type: 'flash' | 'gif' | 'shake';
    /** 闪屏颜色，如 'white', 'red' */
    color?: string;
    /** 持续时间（毫秒） */
    duration?: number;
    /** GIF 动画地址 */
    url?: string;
    /** GIF 显示位置 */
    position?: 'center' | 'full';
}
/** 分支判定逻辑 */
interface BranchCondition {
    /** 变量名 */
    key: string;
    /** 变量值与节点索引的映射 */
    map: Record<string | number, number>;
    /** 默认跳转的节点索引 */
    defaultIndex: number;
}
/** 对话分支选项 */
interface DialogueChoice {
    /** 选项文字 */
    text: string;
    /** 跳转到的节点索引（可选，若不填则继续当前剧情） */
    nextNodeIndex?: number;
    /** 跳转到的对话索引（可选，默认 0） */
    nextDialogueIndex?: number;
    /** 设置变量（可选，用于后续剧情判定） */
    setVariable?: {
        key: string;
        value: string | number | boolean;
    };
    /** 选项点击后的回调（可选） */
    onSelect?: () => void;
    /** 点击选项后触发的特效（可选） */
    effect?: VisualEffect;
}
/** 视觉小说播放节点 */
interface VisualNovelNode {
    /** 唯一标识 */
    id: string;
    /** 节点名称（用于调试） */
    name?: string;
    /** MMD 资源配置（模型、动作等） */
    resources: MMDResources;
    /** 该节点的对话数组（按顺序播放） */
    dialogues: DialogueLine[];
    /** 节点特定的舞台配置（可选，覆盖全局配置） */
    stage?: MMDStage;
    /** 节点结束时的分支选项（可选，已废弃，建议使用 DialogueLine.choices） */
    choices?: DialogueChoice[];
    /** 节点结束时的分支判定逻辑（可选，根据变量跳转不同节点） */
    nextCondition?: BranchCondition;
    /** 节点开始时播放的背景音乐（可选） */
    bgmPath?: string;
    /** 背景音乐音量 0-1（默认 0.5） */
    bgmVolume?: number;
    /** 节点是否循环 MMD 动画（对话期间循环，默认 true） */
    loopAnimation?: boolean;
}
/** 视觉小说剧本配置 */
interface VisualNovelScript {
    /** 剧本唯一标识 */
    id: string;
    /** 剧本名称 */
    name: string;
    /** 播放节点列表 */
    nodes: VisualNovelNode[];
    /** 是否在剧本结束后循环（默认 false） */
    loop?: boolean;
}
/** 对话框主题配置 */
interface DialogueBoxTheme {
    /** 对话框背景颜色 */
    backgroundColor?: string;
    /** 对话框边框颜色 */
    borderColor?: string;
    /** 对话框文字颜色 */
    textColor?: string;
    /** 说话者名称背景颜色 */
    speakerBgColor?: string;
    /** 说话者名称文字颜色 */
    speakerTextColor?: string;
    /** 对话框透明度 0-1（默认 0.85） */
    opacity?: number;
    /** 对话框模糊度（backdrop-blur，默认 8px） */
    blur?: string;
    /** 点击继续提示文字 */
    continueHint?: string;
    /** 是否显示点击继续提示（默认 true） */
    showContinueHint?: boolean;
}
/** 视觉小说组件属性 */
interface MMDVisualNovelProps {
    /** 剧本配置 */
    script: VisualNovelScript;
    /** 舞台配置 */
    stage?: MMDStage;
    /** 移动端优化配置 */
    mobileOptimization?: MobileOptimization;
    /** 对话框主题 */
    dialogueTheme?: DialogueBoxTheme;
    /** 是否自动开始（默认 true） */
    autoStart?: boolean;
    /** 开始按钮文本 */
    startText?: string;
    /** 设置按钮文本 */
    settingsText?: string;
    /** 关于按钮文本 */
    aboutText?: string;
    /** 初始节点索引（默认 0） */
    initialNodeIndex?: number;
    /** 初始对话索引（默认 0） */
    initialDialogueIndex?: number;
    /** 事件回调 */
    onNodeChange?: (node: VisualNovelNode, index: number) => void;
    onDialogueChange?: (dialogue: DialogueLine, index: number, nodeIndex: number) => void;
    onScriptComplete?: () => void;
    onError?: (error: Error) => void;
    /** 是否显示调试信息 */
    showDebugInfo?: boolean;
    /** 是否显示快进按钮 */
    showSkipButton?: boolean;
    /** 是否显示自动播放按钮 */
    showAutoButton?: boolean;
    /** 是否显示历史记录按钮 */
    showHistoryButton?: boolean;
    /** 样式 */
    className?: string;
    style?: React.CSSProperties;
}
/** 对话框组件属性 */
interface DialogueBoxProps {
    /** 当前对话 */
    dialogue: DialogueLine | null;
    /** 主题配置 */
    theme?: DialogueBoxTheme;
    /** 是否正在打字中 */
    isTyping?: boolean;
    /** 是否自动播放模式 */
    isAutoMode?: boolean;
    /** 点击事件 */
    onClick?: () => void;
    /** 跳过打字动画 */
    onSkipTyping?: () => void;
    /** 切换自动模式 */
    onToggleAuto?: () => void;
    /** 打开历史记录 */
    onOpenHistory?: () => void;
    /** 快进 */
    onSkip?: () => void;
    /** 重置相机 */
    onResetCamera?: () => void;
    /** 相机是否处于手动调整状态 */
    isCameraManual?: boolean;
    /** 是否显示控制按钮 */
    showControls?: boolean;
    /** 是否显示快进按钮 */
    showSkipButton?: boolean;
    /** 是否显示自动按钮 */
    showAutoButton?: boolean;
    /** 是否显示历史按钮 */
    showHistoryButton?: boolean;
    /** 样式 */
    className?: string;
}
/** 历史记录项 */
interface DialogueHistoryItem {
    nodeIndex: number;
    dialogueIndex: number;
    speaker?: string;
    text: string;
    timestamp: number;
}
/** 视觉小说组件 Ref 接口 */
interface MMDVisualNovelRef {
    /** 跳转到指定节点 */
    goToNode: (nodeIndex: number, force?: boolean) => void;
    /** 跳转到指定对话 */
    goToDialogue: (dialogueIndex: number) => void;
    /** 获取当前节点索引 */
    getCurrentNodeIndex: () => number;
    /** 获取当前对话索引 */
    getCurrentDialogueIndex: () => number;
    /** 获取对话历史 */
    getHistory: () => DialogueHistoryItem[];
    /** 获取当前剧情变量 */
    getVariables: () => Record<string, string | number | boolean>;
    /** 设置剧情变量 */
    setVariable: (key: string, value: string | number | boolean) => void;
    /** 设置自动播放模式 */
    setAutoMode: (enabled: boolean) => void;
    /** 跳过当前打字动画 */
    skipTyping: () => void;
}

/**
 * MMDVisualNovel - Galgame 风格视觉小说组件
 *
 * 核心功能：
 * - 将 MMDPlaylist 封装为 Galgame 风格
 * - 每个节点包含：模型、动作、对话数组
 * - 用户阅读完对话后自动切换节点
 * - 打字机效果显示文本
 * - 支持自动播放、快进、历史记录
 */
declare const MMDVisualNovel: React__default.ForwardRefExoticComponent<MMDVisualNovelProps & React__default.RefAttributes<MMDVisualNovelRef>>;

/**
 * DialogueBox - Galgame 风格对话框组件
 *
 * 功能：
 * - 打字机效果显示文本
 * - 说话者名称栏
 * - 点击继续提示
 * - 控制按钮（自动、快进、历史）
 */
declare const DialogueBox: React__default.FC<DialogueBoxProps>;

interface HistoryPanelProps {
    /** 历史记录列表 */
    history: DialogueHistoryItem[];
    /** 主题配置 */
    theme?: DialogueBoxTheme;
    /** 关闭面板 */
    onClose: () => void;
    /** 样式 */
    className?: string;
}
/**
 * HistoryPanel - 对话历史记录面板
 *
 * 显示玩家已经阅读过的所有对话
 */
declare const HistoryPanel: React__default.FC<HistoryPanelProps>;

interface LoadingOverlayProps {
    /** 是否显示加载状态 */
    isLoading?: boolean;
    /** 是否显示开始界面 */
    showStartScreen?: boolean;
    /** 脚本名称（用于开始界面） */
    scriptName?: string;
    /** 加载文本 */
    loadingText?: string;
    /** 开始按钮文本 */
    startText?: string;
    /** 设置按钮文本 */
    settingsText?: string;
    /** 关于按钮文本 */
    aboutText?: string;
    /** 点击开始回调 */
    onStart?: () => void;
    /** 自定义类名 */
    className?: string;
}
/**
 * LoadingOverlay - 加载遮罩和开始界面组件容器
 *
 * 用于 MMD Visual Novel 的加载状态和开始界面显示
 * 组合了 LoadingScreen 和 StartScreen 两个独立组件
 */
declare const LoadingOverlay: React__default.FC<LoadingOverlayProps>;

interface LoadingScreenProps {
    /** 是否显示加载状态 */
    isLoading?: boolean;
    /** 加载文本 */
    loadingText?: string;
    /** 自定义类名 */
    className?: string;
}
/**
 * LoadingScreen - 加载界面组件
 *
 * 用于 MMD Visual Novel 的加载状态显示
 */
declare const LoadingScreen: React__default.FC<LoadingScreenProps>;

interface StartScreenProps {
    /** 是否显示开始界面 */
    showStartScreen?: boolean;
    /** 脚本名称 */
    scriptName?: string;
    /** 开始按钮文本 */
    startText?: string;
    /** 设置按钮文本 */
    settingsText?: string;
    /** 关于按钮文本 */
    aboutText?: string;
    /** 点击开始回调 */
    onStart?: () => void;
    /** 自定义类名 */
    className?: string;
}
/**
 * StartScreen - 开始界面组件
 *
 * 用于 MMD Visual Novel 的开始界面显示
 */
declare const StartScreen: React__default.FC<StartScreenProps>;

interface ChoiceMenuProps {
    choices: DialogueChoice[];
    onSelect: (choice: DialogueChoice) => void;
    theme?: DialogueBoxTheme;
}
declare const ChoiceMenu: React__default.FC<ChoiceMenuProps>;

/** 音乐曲目配置 */
interface MusicTrack {
    /** 唯一标识 */
    id: string;
    /** 歌曲名称 */
    title: string;
    /** 艺术家/歌手 */
    artist?: string;
    /** 封面图 URL */
    coverUrl?: string;
    /** MMD 资源（模型、动作、音频等） */
    resources: MMDResources;
    /** 曲目特定的舞台配置（可选，覆盖全局配置） */
    stage?: MMDStage;
    /** 预计时长（秒） */
    duration?: number;
}
/** 音乐播放器配置 */
interface MMDMusicPlayerConfig {
    /** 播放列表名称 */
    name: string;
    /** 曲目列表 */
    tracks: MusicTrack[];
    /** 是否自动播放 */
    autoPlay?: boolean;
    /** 默认循环模式 */
    defaultLoopMode?: 'list' | 'single' | 'shuffle';
}
/** 音乐播放器组件属性 */
interface MMDMusicPlayerProps {
    /** 播放配置 */
    config: MMDMusicPlayerConfig;
    /** 舞台配置 */
    stage?: MMDStage;
    /** 移动端优化配置 */
    mobileOptimization?: MobileOptimization;
    /** 初始曲目索引 */
    initialTrackIndex?: number;
    /**
     * 固定资源配置
     * 如果提供，所有曲目将使用这些指定的模型和动作，仅切换音频
     */
    fixedResources?: {
        modelPath: string;
        motionPath?: string;
        stageModelPath?: string | string[];
        cameraPath?: string;
    };
    /** 是否开启 Miku 搜索模式 */
    mikuMode?: boolean;
    /** 事件回调 */
    onTrackChange?: (track: MusicTrack, index: number) => void;
    onPlayPause?: (isPlaying: boolean) => void;
    onProgress?: (currentTime: number, duration: number) => void;
    onError?: (error: Error) => void;
    /** 样式 */
    className?: string;
    style?: React.CSSProperties;
}
/** 音乐播放器 Ref 接口 */
interface MMDMusicPlayerRef {
    /** 播放 */
    play: () => void;
    /** 暂停 */
    pause: () => void;
    /** 跳转到下一曲 */
    next: () => void;
    /** 跳转到上一曲 */
    previous: () => void;
    /** 跳转到指定曲目 */
    goToTrack: (index: number) => void;
    /** 设置循环模式 */
    setLoopMode: (mode: 'list' | 'single' | 'shuffle') => void;
    /** 获取当前状态 */
    getState: () => {
        currentIndex: number;
        isPlaying: boolean;
        currentTime: number;
        duration: number;
        loopMode: 'list' | 'single' | 'shuffle';
    };
}

/**
 * MMDMusicPlayer - MMD 音乐播放器组件 (Study with Miku 风格)
 *
 * 核心功能：
 * - 多曲目无缝切换
 * - 完整的媒体控制 (播放/暂停/进度/音量)
 * - 沉浸式 3D 舞台
 * - 自动清理内存与物理引擎
 */
declare const MMDMusicPlayer: React__default.ForwardRefExoticComponent<MMDMusicPlayerProps & React__default.RefAttributes<MMDMusicPlayerRef>>;

interface MusicControlsProps {
    isPlaying: boolean;
    currentTime: number;
    duration: number;
    loopMode: 'list' | 'single' | 'shuffle';
    isCameraManual?: boolean;
    onPlayPause: () => void;
    onNext: () => void;
    onPrevious: () => void;
    onSeek: (time: number) => void;
    onToggleLoop: () => void;
    onTogglePlaylist: () => void;
    onResetCamera?: () => void;
    className?: string;
}
declare const MusicControls: React__default.FC<MusicControlsProps>;

interface PlaylistPanelProps {
    tracks: MusicTrack[];
    currentIndex: number;
    isOpen: boolean;
    onClose: () => void;
    onSelectTrack: (index: number) => void;
    className?: string;
    mikuMode?: boolean;
    onSearch?: (keyword: string) => void;
    isSearching?: boolean;
}
declare const PlaylistPanel: React__default.FC<PlaylistPanelProps>;

interface TrackInfoProps {
    track: MusicTrack;
    className?: string;
}
declare const TrackInfo: React__default.FC<TrackInfoProps>;

interface MMDARPlayerProps {
    /** MMD 资源配置 */
    resources: MMDResources;
    /** 舞台配置 */
    stage?: MMDStage;
    /** 移动端优化配置 */
    mobileOptimization?: MobileOptimization;
    /** 摄像头配置 */
    cameraConfig?: {
        /** 偏好使用的摄像头 ('user' 为前置, 'environment' 为后置) */
        facingMode?: 'user' | 'environment';
        /** 视频分辨率 */
        width?: number | {
            min?: number;
            ideal?: number;
            max?: number;
        };
        height?: number | {
            min?: number;
            ideal?: number;
            max?: number;
        };
    };
    /** 是否开启镜像显示 (通常前置摄像头需要开启) */
    mirrored?: boolean;
    /** 是否显示设置按钮 (允许手动输入模型和动作路径) */
    showSettings?: boolean;
    /** 播放控制 */
    autoPlay?: boolean;
    loop?: boolean;
    /** 事件回调 */
    onCameraReady?: (stream: MediaStream) => void;
    onCameraError?: (error: Error) => void;
    onResourcesChange?: (resources: MMDResources) => void;
    onLoad?: () => void;
    onError?: (error: Error) => void;
    /** 样式 */
    className?: string;
    style?: React.CSSProperties;
}
interface MMDARPlayerRef {
    /** 开启摄像头 */
    startCamera: () => Promise<void>;
    /** 关闭摄像头 */
    stopCamera: () => void;
    /** 切换摄像头 */
    switchCamera: () => Promise<void>;
    /** 截图 (包含视频背景和模型) */
    snapshot: () => Promise<string>;
}

/**
 * MMDARPlayer - 基于实时摄像头的 MMD 增强现实播放器
 *
 * 功能：
 * - 调用设备摄像头作为背景
 * - 叠加透明背景的 MMD 模型渲染
 * - 支持前后摄像头切换
 * - 针对 AR 场景优化模型光照与定位
 */
declare const MMDARPlayer: React__default.ForwardRefExoticComponent<MMDARPlayerProps & React__default.RefAttributes<MMDARPlayerRef>>;

export { type BranchCondition, ChoiceMenu, type ChoiceMenuProps, DialogueBox, type DialogueBoxProps, type DialogueBoxTheme, type DialogueChoice, type DialogueHistoryItem, type DialogueLine, HistoryPanel, LoadingOverlay, type LoadingOverlayProps, LoadingScreen, type LoadingScreenProps, MMDARPlayer, type MMDARPlayerProps, type MMDARPlayerRef, MMDMusicPlayer, type MMDMusicPlayerConfig, type MMDMusicPlayerProps, type MMDMusicPlayerRef, MMDPlayerBase, MMDPlayerBaseProps, MMDPlayerBaseRef, MMDPlayerEnhanced, MMDPlayerEnhancedDebugInfo, MMDPlayerEnhancedProps, MMDPlaylist, MMDPlaylistDebugInfo, MMDPlaylistNode, MMDPlaylistProps, MMDResources, MMDStage, MMDVisualNovel, type MMDVisualNovelProps, type MMDVisualNovelRef, MobileOptimization, MusicControls, type MusicControlsProps, type MusicTrack, PlaylistPanel, type PlaylistPanelProps, StartScreen, type StartScreenProps, TrackInfo, type TrackInfoProps, type VisualEffect, type VisualNovelNode, type VisualNovelScript, loadAmmo };
