UNPKG

motiontext-renderer

Version:

Web-based animated caption/subtitle renderer with plugin system

148 lines (147 loc) 3.93 kB
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