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
JavaScript
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