UNPKG

vlibras-player-webjs

Version:

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

120 lines 4.12 kB
import { Fragment as _Fragment, jsx as _jsx } from "react/jsx-runtime"; /** * @file Provider VLibras compatível com SSR * @description Provider que funciona corretamente em ambientes SSR */ import { createContext, useContext, useState, useEffect } from 'react'; import { VLibrasGlobalConfig } from '../../../../core/config/VLibrasGlobalConfig'; import { useIsHydrated } from './useIsHydrated'; import { isBrowser } from './useIsomorphicLayoutEffect'; const SSRSafeVLibrasContext = createContext(null); /** * Provider VLibras que funciona corretamente com SSR * Evita erros de hidratação e problemas com APIs do navegador */ export function SSRSafeVLibrasProvider({ config: initialConfig = {}, children, fallback = null }) { const isHydrated = useIsHydrated(); const [config, setConfig] = useState(() => { // Durante SSR, usa configuração padrão if (!isBrowser) { return { assetsPath: '/vlibras', debug: false, enableStats: false, autoRetry: true, retryAttempts: 3, ...initialConfig }; } // No cliente, tenta obter configuração existente try { return VLibrasGlobalConfig.getConfig(); } catch { return { assetsPath: '/vlibras', debug: false, enableStats: false, autoRetry: true, retryAttempts: 3, ...initialConfig }; } }); // Configura VLibras após hidratação useEffect(() => { if (isHydrated && isBrowser) { try { VLibrasGlobalConfig.configure(initialConfig); setConfig(VLibrasGlobalConfig.getConfig()); } catch (error) { console.warn('Erro ao configurar VLibras:', error); } } }, [isHydrated, initialConfig]); const updateConfig = (newConfig) => { if (!isBrowser) return; try { VLibrasGlobalConfig.configure(newConfig); setConfig(VLibrasGlobalConfig.getConfig()); } catch (error) { console.warn('Erro ao atualizar configuração VLibras:', error); } }; const initializePlayer = async (containerId) => { if (!isBrowser || !isHydrated) { console.warn('VLibras Player só pode ser inicializado no cliente após hidratação'); return; } try { // Aqui seria a inicialização real do player // Por enquanto, apenas log console.log('Inicializando VLibras Player no container:', containerId); } catch (error) { console.error('Erro ao inicializar VLibras Player:', error); throw error; } }; const translateText = async (text) => { if (!isBrowser || !isHydrated) { console.warn('Tradução VLibras só funciona no cliente após hidratação'); return; } try { // Aqui seria a tradução real console.log('Traduzindo texto:', text); } catch (error) { console.error('Erro ao traduzir texto:', error); throw error; } }; const contextValue = { config, updateConfig, isHydrated, isBrowser, initializePlayer, translateText }; // Durante SSR ou antes da hidratação, mostra fallback se fornecido if (!isHydrated && fallback) { return _jsx(_Fragment, { children: fallback }); } return (_jsx(SSRSafeVLibrasContext.Provider, { value: contextValue, children: children })); } /** * Hook para usar o contexto SSR-safe do VLibras */ export function useSSRSafeVLibrasContext() { const context = useContext(SSRSafeVLibrasContext); if (!context) { throw new Error('useSSRSafeVLibrasContext deve ser usado dentro de SSRSafeVLibrasProvider'); } return context; } //# sourceMappingURL=SSRSafeProvider.js.map