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