motiontext-renderer
Version:
Web-based animated caption/subtitle renderer with plugin system
148 lines (147 loc) • 3.93 kB
TypeScript
import { AssetManager } from '../assets/AssetManager';
import { AssetManager as PluginAssetManager } from './PluginContextV3';
/**
* 플러그인용 AssetManager 어댑터
* 기존 AssetManager를 플러그인 인터페이스에 맞게 래핑
*/
export declare class PluginAssetManagerAdapter implements PluginAssetManager {
private pluginBaseUrl;
private capabilities;
constructor(_coreAssetManager: AssetManager, // TODO: 향후 코어 AssetManager 통합시 사용
pluginBaseUrl: string, capabilities?: string[]);
/**
* 에셋 URL 생성 (플러그인 baseUrl 기준)
*/
getUrl(path: string): string;
/**
* 폰트 로드 및 등록 (권한 필요: asset-loading)
*/
loadFont(fontSpec: {
family: string;
src: string;
weight?: string;
style?: string;
}): Promise<void>;
/**
* 이미지 프리로드 (권한 필요: asset-loading)
*/
preloadImage(url: string): Promise<HTMLImageElement>;
/**
* 오디오 프리로드 (권한 필요: asset-loading)
*/
preloadAudio(url: string): Promise<HTMLAudioElement>;
/**
* 플러그인이 로드한 폰트 추적
*/
private loadedFonts;
private trackLoadedFont;
/**
* 플러그인이 로드한 모든 폰트 정리
*/
cleanup(): void;
/**
* 권한 확인
*/
private hasCapability;
}
/**
* 플러그인용 오디오 시스템
* Web Audio API를 사용한 고급 오디오 제어
*/
export declare class PluginAudioSystem {
private assetAdapter;
private capabilities;
private audioContext;
private loadedAudioBuffers;
private playingSources;
private gainNodes;
constructor(assetAdapter: PluginAssetManagerAdapter, capabilities?: string[]);
/**
* 오디오 컨텍스트 초기화 (지연 초기화)
*/
private getAudioContext;
/**
* 오디오 재생
*/
play(url: string, options?: {
volume?: number;
loop?: boolean;
startTime?: number;
}): Promise<void>;
/**
* 오디오 일시정지 (Web Audio API는 일시정지 미지원, 정지만 가능)
*/
pause(url: string): void;
/**
* 볼륨 설정
*/
setVolume(url: string, volume: number): void;
/**
* 오디오 정지
*/
stop(url: string): void;
/**
* 오디오 버퍼 로드
*/
private loadAudioBuffer;
/**
* 모든 오디오 정리
*/
cleanup(): void;
/**
* 권한 확인
*/
private hasCapability;
}
/**
* 플러그인용 포털 시스템
* effectsRoot 밖으로 탈출하여 전체 화면 효과 구현
*/
export declare class PluginPortalSystem {
private stageContainer;
private capabilities;
private breakoutElement;
private originalParent;
constructor(_effectsRoot: HTMLElement, // TODO: effectsRoot 기반 portal 관리시 사용
stageContainer: HTMLElement, capabilities?: string[]);
/**
* effectsRoot 밖으로 탈출
*/
breakout(options?: {
zIndex?: number;
className?: string;
appendTo?: 'body' | 'stage';
}): HTMLElement;
/**
* 탈출 상태 해제
*/
return(): void;
/**
* 현재 탈출 상태인지 확인
*/
get isBreakout(): boolean;
/**
* 정리 (플러그인 종료 시 호출)
*/
cleanup(): void;
/**
* 권한 확인
*/
private hasCapability;
}
/**
* 플러그인 에셋 시스템 통합 팩토리
*/
export declare function createPluginAssetSystems(config: {
coreAssetManager: AssetManager;
pluginBaseUrl: string;
effectsRoot: HTMLElement;
stageContainer: HTMLElement;
capabilities: string[];
}): {
assets: PluginAssetManagerAdapter;
audio: PluginAudioSystem;
portal: PluginPortalSystem;
cleanup: () => void;
};
//# sourceMappingURL=PluginAssetBridge.d.ts.map