PageSourceSearch

https://balperconnect.lovable.app/assets/Standalone3DViewer-CNPbRpR9.js

js balperconnect.lovable.app collected 2026-10-03 03:23:48 UTC 6,451 bytes, 2 lines download raw bytes

1const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/ScanFileViewer3D-BRK6iWsD.js","assets/index-BrlxVnbf.js","assets/index-kycZLd_M.css","assets/progress-CoKhm_pw.js","assets/rotate-ccw-BuLzmKy7.js","assets/circle-alert-2fmRBQku.js"])))=>i.map(i=>d[i]);
2import{s as w,u as H,m as K,Z as Q,r as i,j as a,B as C,af as X,C as L,k as M,c as Z,_ as J,an as Y,ao as ee,A as ae}from"./index-BrlxVnbf.js";import{P as re}from"./progress-CoKhm_pw.js";import{b as se}from"./triggerDerivative-Be4d8JEj.js";const ne=2;async function ie(e,s){const{data:d,error:n}=await w.from("scan_derivatives").select("id, attachment_id, kind, derivative_path, status, source_size_bytes, derivative_size_bytes, source_triangles, derivative_triangles, error_message, processed_at, created_at, updated_at, pipeline_version").eq("attachment_id",e).eq("kind",s).maybeSingle();return n?(console.warn(`[scan3d/derivatives] read error for ${e}/${s}:`,n.message),null):d??null}function oe(e){return!e||e.status!=="ready"||!e.derivative_path?!1:(e.pipeline_version??1)>=ne}function p(e){return{kind:"original",signedUrl:null,fileName:e.file_name,originalFileName:e.file_name,originalFilePath:e.file_path}}async function te(e){try{const s=await ie(e.id,"glb_view");if(!oe(s))return se(e),p(e)}catch{return p(e)}try{const{data:s,error:d}=await w.functions.invoke("generate-3d-derivative",{body:{attachmentId:e.id}});if(d)return console.warn(`[scan3d/resolve] edge falhou para ${e.id}, usando original.`,d.message),p(e);if((s==null?void 0:s.status)==="ready"&&(s!=null&&s.derivativeUrl)){const n=e.file_name.replace(/\.[^.]+$/,"");return{kind:"derivative_glb",signedUrl:s.derivativeUrl,fileName:`${n}.glb`,originalFileName:e.file_name,originalFilePath:e.file_path}}return p(e)}catch(s){return console.warn(`[scan3d/resolve] exceção ao resolver derivado de ${e.id} — usando original.`,s),p(e)}}const le=i.lazy(()=>J(()=>import("./ScanFileViewer3D-BRK6iWsD.js"),__vite__mapDeps([0,1,2,3,4,5])));function de(e){return e.replace(/\/viewer-3d$/,"")||"/"}function ce(e,s){return new Promise((d,n)=>{const r=new XMLHttpRequest;r.open("GET",e),r.responseType="arraybuffer",r.onprogress=u=>{u.lengthComputable&&s&&s(Math.round(u.loaded/u.total*100))},r.onload=()=>{r.status>=200&&r.status<300&&r.response?d(r.response):n(new Error(`Falha ao baixar derivado (${r.status})`))},r.onerror=()=>n(new Error("Falha de rede ao baixar derivado")),r.send()})}function ge(){const e=H(),s=K(),[d]=Q(),n=s.state??null,r=i.useMemo(()=>{var t;const o=((t=n==null?void 0:n.attachmentIds)==null?void 0:t.filter(Boolean))??[];if(o.length>0)return o;const f=d.get("attachments");return f?f.split(",").filter(Boolean):[]},[n==null?void 0:n.attachmentIds,d]),u=i.useMemo(()=>(n==null?void 0:n.inlineFiles)??[],[n==null?void 0:n.inlineFiles]),q=i.useMemo(()=>`${r.join(",")}::${u.map(o=>`${o.name}:${o.data.byteLength}`).join("|")}`,[r,u]),I=i.useMemo(()=>de(s.pathname),[s.pathname]),[V,v]=i.useState("Preparando visualizador..."),[$,x]=i.useState(0),[m,E]=i.useState([]),[P,S]=i.useState([]),[A,N]=i.useState(!0),[k,y]=i.useState(null),[D,F]=i.useState(0);i.useEffect(()=>{let o=!0;return(async()=>{if(N(!0),y(null),E([]),S([]),x(0),F(0),r.length===0&&u.length===0){y("Nenhum modelo 3D foi enviado para a tela isolada."),N(!1);return}try{const t=[...u],U=[];let B=0;for(let c=0;c<r.length;c++){const z=r[c];v(`Buscando arquivo ${c+1}/${r.length}...`);const{data:l,error:W}=await w.from("case_attachments").select("id, file_path, file_name").eq("id",z).single();if(W||!l)throw new Error("Arquivo não encontrado.");U.push(l);let g;try{g=await te(l)}catch{g={kind:"original",signedUrl:null,fileName:l.file_name,originalFileName:l.file_name,originalFilePath:l.file_path}}let _=null;if(g.kind==="derivative_glb"&&g.signedUrl){v(`Baixando visualização leve ${c+1}/${r.length}...`);try{_=await ce(g.signedUrl,h=>{const j=(c+h/100)/r.length*100;x(Math.round(j))}),B+=1,t.push({name:g.fileName,data:_});continue}catch(h){console.warn(`[Standalone3DViewer] falha ao baixar derivado ${z}, usando original.`,h)}}v(`Gerando URL segura ${c+1}/${r.length}...`),await Y(l.file_path),v(`Baixando modelo original ${c+1}/${r.length}...`),_=await ee(l.file_path,{fileName:l.file_name,onProgress:h=>{const j=(c+h/100)/r.length*100;x(Math.round(j))}}),t.push({name:l.file_name,data:_})}if(!o)return;S(U),F(B),E(t)}catch(t){if(!o)return;console.error(t),y(t instanceof Error?t.message:"Erro ao preparar modelo 3D.")}finally{o&&(N(!1),x(0))}})(),()=>{o=!1}},[q]);const R=async()=>{for(const o of P){const{data:f}=await w.storage.from("scans").createSignedUrl(o.file_path,3600);f!=null&&f.signedUrl&&window.open(f.signedUrl,"_blank","noopener,noreferrer")}},b=a.jsxs(C,{variant:"ghost",size:"sm",className:"gap-1.5",onClick:()=>e(I,{replace:!0}),children:[a.jsx(ae,{className:"h-3.5 w-3.5"}),"Voltar para a OS"]}),O=m.length===1?m[0].name:`${m.length} modelos 3D`,T=a.jsxs(a.Fragment,{children:[b,P.length>0&&a.jsxs(C,{variant:"outline",size:"sm",className:"gap-1.5",onClick:R,children:[a.jsx(X,{className:"h-3.5 w-3.5"}),"Baixar original"]})]});if(A)return a.jsx("main",{className:"min-h-screen bg-background px-4 py-6",children:a.jsxs("div",{className:"mx-auto flex max-w-3xl flex-col gap-4",children:[b,a.jsx(L,{children:a.jsxs(M,{className:"space-y-4 p-6",children:[a.jsxs("div",{className:"flex items-center gap-3 text-foreground",children:[a.jsx(Z,{className:"h-5 w-5 animate-spin text-primary"}),a.jsxs("div",{children:[a.jsx("p",{className:"font-medium",children:V}),a.jsx("p",{className:"text-sm text-muted-foreground",children:"Carregando o modelo original com qual
2idade total."})]})]}),$>0&&a.jsx(re,{value:$,className:"h-2"})]})})]})});if(k||m.length===0)return a.jsx("main",{className:"min-h-screen bg-background px-4 py-6",children:a.jsxs("div",{className:"mx-auto flex max-w-3xl flex-col gap-4",children:[b,a.jsx(L,{children:a.jsxs(M,{className:"space-y-2 p-6",children:[a.jsx("p",{className:"font-medium text-foreground",children:"Não foi possível abrir o visualizador 3D."}),a.jsx("p",{className:"text-sm text-muted-foreground",children:k??"Nenhum arquivo foi carregado."})]})})]})});const G=D>0&&D===m.length?"Visualizador 3D isolado — pré-visualização leve. Use 'Baixar original' para o STL completo.":"Visualizador 3D isolado — modelo original com qualidade total.";return a.jsx(i.Suspense,{fallback:null,children:a.jsx(le,{files:m,title:O,description:G,extraActions:T})})}export{ge as default};

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.