UNPKG

vlibras-player-nextjs

Version:

VLibras Player para Next.js - Biblioteca moderna para tradução de texto em Libras com callbacks de estado

257 lines (256 loc) 9.32 kB
import type { CSSProperties, RefObject } from 'react'; export interface UnityDebugInfo { hasUnityInstance: boolean; hasModule: boolean; moduleReady: boolean; hasSendMessage: boolean; hasCanvas: boolean; canvasSize: string; isReady: boolean; isAnimationPlaying: boolean; isAnimationComplete: boolean; registeredInstances: number; } export interface VLibrasPlayerCallbacks { /** Callback executado quando uma tradução é iniciada */ onTranslationStart?: () => void; /** Callback executado quando uma tradução é finalizada */ onTranslationEnd?: () => void; /** Callback executado quando há erro na tradução */ onTranslationError?: (_error: string) => void; /** Callback executado quando a reprodução é iniciada */ onPlay?: () => void; /** Callback executado quando a reprodução é pausada */ onPause?: () => void; /** Callback executado quando a reprodução é retomada */ onResume?: () => void; /** Callback executado quando a reprodução é reiniciada */ onRestart?: () => void; /** Callback executado quando a reprodução é interrompida */ onStop?: () => void; /** Callback executado quando o player está pronto para uso */ onPlayerReady?: () => void; /** Callback executado quando há erro no player */ onPlayerError?: (_error: string) => void; } export interface VLibrasPlayerOptions extends VLibrasPlayerCallbacks { /** URL do serviço de tradução */ translatorUrl?: string; /** Caminho para os arquivos Unity WebGL */ targetPath?: string; /** Callback executado quando o player é carregado */ onLoad?: () => void; /** Função de progresso customizada */ progress?: (_wrapper: HTMLElement) => any; /** Configurações de personalização do avatar */ personalization?: PersonalizationConfig; /** Região para dicionário de sinais */ region?: 'BR' | 'PT'; /** Habilitar/desabilitar estatísticas */ enableStats?: boolean; } export interface PersonalizationConfig { /** Nome do avatar */ avatar?: string; /** Configurações de aparência */ appearance?: { skinColor?: string; hairColor?: string; clothingColor?: string; }; } export interface TranslationOptions { /** Habilitar estatísticas na tradução */ isEnabledStats?: boolean; /** Indica se a tradução vem do processo de tradução automática */ fromTranslation?: boolean; } export interface VLibrasPlayerState { /** Status atual do player */ status: PlayerStatus; /** Se o player está carregado */ loaded: boolean; /** Texto original */ text?: string; /** Glosa traduzida */ gloss?: string; /** Se foi traduzido */ translated: boolean; /** Progresso da animação (0-1) */ progress: number | null; /** Região atual */ region: string; /** Se está traduzindo no momento */ isTranslating: boolean; /** Se está reproduzindo no momento */ isPlaying: boolean; } export type PlayerStatus = 'idle' | 'preparing' | 'playing' | 'translating'; export interface VLibrasPlayerEvents { /** Disparado quando o player é carregado */ 'load': () => void; /** Disparado quando a tradução inicia */ 'translate:start': () => void; /** Disparado quando a tradução termina */ 'translate:end': () => void; /** Disparado quando a animação inicia */ 'animation:play': () => void; /** Disparado quando a animação é pausada */ 'animation:pause': () => void; /** Disparado quando a animação é retomada após pausa */ 'animation:resume': () => void; /** Disparado quando a animação é reiniciada */ 'animation:restart': () => void; /** Disparado quando a animação termina */ 'animation:end': () => void; /** Disparado durante o progresso da animação */ 'animation:progress': (_progress: number) => void; /** Disparado quando a glosa inicia */ 'gloss:start': () => void; /** Disparado quando a glosa termina */ 'gloss:end': (_length: number) => void; /** Disparado quando há erro */ 'error': (_error: string) => void; /** Disparado quando o avatar é alterado */ 'avatar:change': (_avatar: string) => void; /** Disparado quando a apresentação de boas-vindas inicia */ 'welcome:start': () => void; /** Disparado quando a apresentação de boas-vindas termina */ 'welcome:end': (_finished: boolean) => void; /** Disparado com informações da glosa */ 'gloss:info': (_counter: number, _length: number) => void; } export interface UnityPlayerInstance { SendMessage: (_gameObject: string, _method: string, _params?: any) => void; } export interface VLibrasConfig { translatorUrl: string; dictionaryUrl: string; dictionaryStaticUrl: string; } export interface VLibrasPlayerProps extends VLibrasPlayerOptions { /** Classe CSS para o container */ className?: string; /** Estilo inline para o container */ style?: CSSProperties; /** ID do elemento container */ id?: string; /** Se deve inicializar automaticamente */ autoInit?: boolean; /** Texto inicial para traduzir */ initialText?: string; /** Callbacks para eventos */ onLoad?: () => void; onTranslateStart?: () => void; onTranslateEnd?: () => void; onPlay?: () => void; onPause?: () => void; onEnd?: () => void; onError?: (_error: string) => void; } export interface VLibrasWidgetProps extends VLibrasPlayerProps { /** Posição do widget na tela */ position?: 'bottom-right' | 'bottom-left' | 'top-right' | 'top-left'; /** Se o widget deve ser draggable */ draggable?: boolean; /** Se deve mostrar controles */ showControls?: boolean; /** Tema do widget */ theme?: 'light' | 'dark' | 'auto'; } export interface UseVLibrasPlayer { /** Instância do player */ player: VLibrasPlayerState; /** Função para traduzir texto */ translate: (_text: string, _options?: TranslationOptions) => Promise<void>; /** Função para reproduzir */ play: (_gloss?: string, _options?: TranslationOptions) => void; /** Função para pausar */ pause: () => void; /** Função para retomar após pausa */ resume: () => void; /** Função para reiniciar animação atual */ restart: () => void; /** Função para parar */ stop: () => void; /** Função para repetir */ repeat: () => void; /** Função para definir velocidade */ setSpeed: (_speed: number) => void; /** Função para alternar legendas */ toggleSubtitle: () => void; /** Função para trocar avatar */ changeAvatar: (_avatarName: string) => void; /** Função para definir região */ setRegion: (_region: 'BR' | 'PT') => void; /** Função para conectar manualmente a um container */ connect: (_container: HTMLElement) => void; /** Se está carregando */ isLoading: boolean; /** Se há erro */ error: string | null; /** Se está traduzindo no momento (baseado em eventos reais) */ isTranslating: boolean; /** Se está reproduzindo no momento (baseado em eventos reais) */ isPlaying: boolean; /** Se o player está pronto para uso */ isReady: boolean; /** Alias para isReady (compatibilidade) */ isPlayerReady: boolean; /** Se a animação está pausada */ isPaused: boolean; /** Texto atual sendo traduzido */ currentText: string; /** Log de eventos do player */ eventLog: Array<{ timestamp: string; message: string; type: string; }>; /** Função para inicializar o player */ initializePlayer: () => Promise<void>; /** Função para traduzir texto (nova interface) */ translateText: (_text: string) => Promise<void>; /** Função para limpar logs de eventos */ clearLogs: () => void; /** Se pode pausar no momento */ canPause: boolean; /** Se pode retomar no momento */ canResume: boolean; /** Se pode parar no momento */ canStop: boolean; /** Se pode reiniciar no momento */ canRestart: boolean; /** Referência do container (opcional) */ containerRef?: RefObject<HTMLElement>; } export interface VLibrasContextValue extends UseVLibrasPlayer { /** Se o provider está inicializado */ isInitialized: boolean; } export interface VLibrasPlayerRef { /** Traduzir texto para Libras */ translate: (_text: string, _options?: TranslationOptions) => Promise<void>; /** Tocar animação com glosa */ play: (_gloss?: string, _options?: TranslationOptions) => void; /** Pausar animação */ pause: () => void; /** Retomar animação pausada */ resume: () => void; /** Reiniciar animação atual */ restart: () => void; /** Parar animação */ stop: () => void; /** Repetir animação */ repeat: () => void; /** Definir velocidade de reprodução */ setSpeed: (_speed: number) => void; /** Alternar legendas */ toggleSubtitle: () => void; /** Trocar avatar */ changeAvatar: (_avatarName: string) => void; /** Definir região */ setRegion: (_region: 'BR' | 'PT') => void; /** Obter estado atual */ getState: () => VLibrasPlayerState; }