UNPKG

vlibras-player-webjs

Version:

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

124 lines 4.68 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.SSRSafeVLibrasProvider = SSRSafeVLibrasProvider; exports.useSSRSafeVLibrasContext = useSSRSafeVLibrasContext; const jsx_runtime_1 = require("react/jsx-runtime"); /** * @file Provider VLibras compatível com SSR * @description Provider que funciona corretamente em ambientes SSR */ const react_1 = require("react"); const VLibrasGlobalConfig_1 = require("../../../../core/config/VLibrasGlobalConfig"); const useIsHydrated_1 = require("./useIsHydrated"); const useIsomorphicLayoutEffect_1 = require("./useIsomorphicLayoutEffect"); const SSRSafeVLibrasContext = (0, react_1.createContext)(null); /** * Provider VLibras que funciona corretamente com SSR * Evita erros de hidratação e problemas com APIs do navegador */ function SSRSafeVLibrasProvider({ config: initialConfig = {}, children, fallback = null }) { const isHydrated = (0, useIsHydrated_1.useIsHydrated)(); const [config, setConfig] = (0, react_1.useState)(() => { // Durante SSR, usa configuração padrão if (!useIsomorphicLayoutEffect_1.isBrowser) { return { assetsPath: '/vlibras', debug: false, enableStats: false, autoRetry: true, retryAttempts: 3, ...initialConfig }; } // No cliente, tenta obter configuração existente try { return VLibrasGlobalConfig_1.VLibrasGlobalConfig.getConfig(); } catch { return { assetsPath: '/vlibras', debug: false, enableStats: false, autoRetry: true, retryAttempts: 3, ...initialConfig }; } }); // Configura VLibras após hidratação (0, react_1.useEffect)(() => { if (isHydrated && useIsomorphicLayoutEffect_1.isBrowser) { try { VLibrasGlobalConfig_1.VLibrasGlobalConfig.configure(initialConfig); setConfig(VLibrasGlobalConfig_1.VLibrasGlobalConfig.getConfig()); } catch (error) { console.warn('Erro ao configurar VLibras:', error); } } }, [isHydrated, initialConfig]); const updateConfig = (newConfig) => { if (!useIsomorphicLayoutEffect_1.isBrowser) return; try { VLibrasGlobalConfig_1.VLibrasGlobalConfig.configure(newConfig); setConfig(VLibrasGlobalConfig_1.VLibrasGlobalConfig.getConfig()); } catch (error) { console.warn('Erro ao atualizar configuração VLibras:', error); } }; const initializePlayer = async (containerId) => { if (!useIsomorphicLayoutEffect_1.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 (!useIsomorphicLayoutEffect_1.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: useIsomorphicLayoutEffect_1.isBrowser, initializePlayer, translateText }; // Durante SSR ou antes da hidratação, mostra fallback se fornecido if (!isHydrated && fallback) { return (0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: fallback }); } return ((0, jsx_runtime_1.jsx)(SSRSafeVLibrasContext.Provider, { value: contextValue, children: children })); } /** * Hook para usar o contexto SSR-safe do VLibras */ function useSSRSafeVLibrasContext() { const context = (0, react_1.useContext)(SSRSafeVLibrasContext); if (!context) { throw new Error('useSSRSafeVLibrasContext deve ser usado dentro de SSRSafeVLibrasProvider'); } return context; } //# sourceMappingURL=SSRSafeProvider.js.map