import * as pdfjs from '../vendor/pdfjs/pdf.min.mjs'; const cfg=JSON.parse(document.querySelector('#pdf-config').textContent);pdfjs.GlobalWorkerOptions.workerSrc=cfg.base+'pdf.worker.min.mjs'; const canvas=document.querySelector('#canvas'),status=document.querySelector('#status'),input=document.querySelector('#page'),prev=document.querySelector('#prev'),next=document.querySelector('#next'),zoom=document.querySelector('#zoom');let pdf,current=1,task,serial=0; async function render(n){if(!pdf)return;const request=++serial;current=Math.max(1,Math.min(pdf.numPages,n||1));input.value=current;prev.disabled=current===1;next.disabled=current===pdf.numPages;status.textContent='Cargando página '+current+'…';if(task){task.cancel();try{await task.promise;}catch{}} try{const page=await pdf.getPage(current);if(request!==serial)return;const base=page.getViewport({scale:1}),width=Math.min(innerWidth-36,1250),scale=zoom.value==='fit'?width/base.width:Number(zoom.value),ratio=Math.min(devicePixelRatio||1,2);const view=page.getViewport({scale});canvas.width=Math.floor(view.width*ratio);canvas.height=Math.floor(view.height*ratio);canvas.style.width=view.width+'px';canvas.style.height=view.height+'px';task=page.render({canvasContext:canvas.getContext('2d'),viewport:view,transform:ratio===1?null:[ratio,0,0,ratio,0,0]});await task.promise;if(request!==serial)return;status.textContent='Página '+current+' de '+pdf.numPages;const text=await page.getTextContent();if(request===serial)document.querySelector('#pdf-text').textContent=text.items.map(i=>i.str).join(' '); }catch(e){if(e.name!=='RenderingCancelledException'&&request===serial)status.textContent='No se pudo mostrar esta página. Puedes abrir el PDF original con el enlace superior.';}} try{pdf=await pdfjs.getDocument({url:cfg.url,cMapUrl:cfg.base+'cmaps/',cMapPacked:true,standardFontDataUrl:cfg.base+'standard_fonts/',wasmUrl:cfg.base+'wasm/',disableAutoFetch:true,disableStream:true,rangeChunkSize:65536}).promise;document.querySelector('#total').textContent='/ '+pdf.numPages;input.max=pdf.numPages;input.disabled=false;await render(1);}catch{status.textContent='No se pudo cargar el visor. Abre el PDF original con el enlace superior.';} prev.onclick=()=>render(current-1);next.onclick=()=>render(current+1);input.onchange=()=>render(Math.round(Number(input.value)));zoom.onchange=()=>render(current);let timer;addEventListener('resize',()=>{clearTimeout(timer);timer=setTimeout(()=>render(current),200);});