diff --git a/src/pages/Index.tsx b/src/pages/Index.tsx
index 50089d2..4aad18a 100644
--- a/src/pages/Index.tsx
+++ b/src/pages/Index.tsx
@@ -348,7 +348,7 @@ const Index = () => {
{/* Footer */}
- SteelXR v1.10 — Q.C. Inspection
+ SteelXR v1.11 — Q.C. Inspection
{showLogs && (
diff --git a/src/pages/Viewer.tsx b/src/pages/Viewer.tsx
index bef4145..07835c1 100644
--- a/src/pages/Viewer.tsx
+++ b/src/pages/Viewer.tsx
@@ -218,17 +218,36 @@ const Viewer = () => {
// Removido o bloqueio para permitir carregamento de modelo na sala
- const handleEnterXR = async () => {
+ const [enteringXR, setEnteringXR] = useState(false);
+
+ const handleEnterXR = useCallback(async () => {
if (!xrSupported) {
toast.error("WebXR não é suportado neste navegador. Use o navegador do Meta Quest 3.");
return;
}
- // Entra diretamente no AR para não perder o clique do usuário!
- import('@/stores/useXRStore').then(({ xrStore }) => {
- xrStore.enterAR().catch(e => console.error('[Viewer] XR enterAR error:', e));
+ setEnteringXR(true);
+
+ // Timeout de segurança — se não entrar em 15s, cancela
+ const timeoutId = setTimeout(() => {
+ setEnteringXR(false);
+ toast.error("Tempo limite ao iniciar modo AR. Verifique se o Meta Quest Browser está conectado.");
+ }, 15000);
+
+ try {
+ const { xrStore } = await import('@/stores/useXRStore');
+ // Marca que está entrando no AR antes de navegar — bloqueia auto-return prematuro
+ (window as unknown as { __setXrEntering?: (v: boolean) => void }).__setXrEntering?.(true);
+ await xrStore.enterAR();
+ clearTimeout(timeoutId);
navigate("/xr");
- });
- };
+ } catch (e) {
+ clearTimeout(timeoutId);
+ setEnteringXR(false);
+ (window as unknown as { __setXrEntering?: (v: boolean) => void }).__setXrEntering?.(false);
+ console.error('[Viewer] XR enterAR error:', e);
+ toast.error("Falha ao iniciar modo AR. Verifique se o Meta Quest Browser está conectado.");
+ }
+ }, [xrSupported, navigate]);
const handleEnterMeeting = () => {
// Coleta o eixo habilitado de seção no Viewer
@@ -297,9 +316,9 @@ const Viewer = () => {
Reunião Virtual
-