UNPKG

vlibras-player-webjs

Version:

Biblioteca JavaScript moderna para integração do VLibras Player com React, Vue, Angular e vanilla JS

92 lines 3.62 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.useVLibrasTranslation = useVLibrasTranslation; const react_1 = require("react"); const useVLibras_1 = require("./useVLibras"); /** * Hook específico para gerenciar traduções de texto para Libras */ function useVLibrasTranslation(options = {}) { const { autoTranslate = false, debounceMs = 500, onTranslationStart, onTranslationComplete, onTranslationError } = options; const { player, isLoaded } = (0, useVLibras_1.useVLibras)(); const [isTranslating, setIsTranslating] = (0, react_1.useState)(false); const [error, setError] = (0, react_1.useState)(null); const [lastTranslation, setLastTranslation] = (0, react_1.useState)(null); const [translationHistory, setTranslationHistory] = (0, react_1.useState)([]); const [debounceTimer, setDebounceTimer] = (0, react_1.useState)(null); const translate = (0, react_1.useCallback)(async (text) => { if (!player || !isLoaded || !text.trim()) { return; } setIsTranslating(true); setError(null); onTranslationStart?.(text); try { await player.translateAsync(text); setLastTranslation(text); setTranslationHistory(prev => { const updated = [text, ...prev.filter(t => t !== text)]; return updated.slice(0, 10); // Manter apenas últimas 10 traduções }); onTranslationComplete?.(); } catch (err) { const errorMsg = err instanceof Error ? err.message : 'Erro na tradução'; setError(errorMsg); onTranslationError?.(err instanceof Error ? err : new Error(errorMsg)); } finally { setIsTranslating(false); } }, [player, isLoaded, onTranslationStart, onTranslationComplete, onTranslationError]); const translateAndPlay = (0, react_1.useCallback)(async (text) => { if (!player || !isLoaded || !text.trim()) { return; } try { await translate(text); await player.playAsync(); } catch (err) { const errorMsg = err instanceof Error ? err.message : 'Erro na tradução e reprodução'; setError(errorMsg); onTranslationError?.(err instanceof Error ? err : new Error(errorMsg)); } }, [player, isLoaded, translate, onTranslationError]); const debouncedTranslate = (0, react_1.useCallback)(async (text) => { if (debounceTimer) { clearTimeout(debounceTimer); } return new Promise((resolve) => { const timer = setTimeout(async () => { if (autoTranslate) { await translate(text); } resolve(); }, debounceMs); setDebounceTimer(timer); }); }, [translate, autoTranslate, debounceMs, debounceTimer]); const clearHistory = (0, react_1.useCallback)(() => { setTranslationHistory([]); setLastTranslation(null); }, []); // Cleanup do timer quando componente desmonta (0, react_1.useEffect)(() => { return () => { if (debounceTimer) { clearTimeout(debounceTimer); } }; }, [debounceTimer]); return { translate: autoTranslate ? debouncedTranslate : translate, translateAndPlay, isTranslating, error, lastTranslation, translationHistory, clearHistory }; } //# sourceMappingURL=useVLibrasTranslation.js.map