PdfPreviewModal-B1DP1K1b.js 8.1 KB

12
  1. const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/pdf-Tp8LLG1-.js","assets/index-DWBWyYf2.js","assets/chunk-aKtaBQYM.js","assets/QueryClientProvider-BqikUEEO.js","assets/client-C5b1pVUf.js","assets/useMutation-BAyvCE1t.js","assets/useQueries-C4vh_gLU.js","assets/useQuery-DOr0golm.js","assets/createLucideIcon-Br1j9igo.js","assets/arrow-down-Cxl6vzXB.js","assets/arrow-up-BA-zWepm.js","assets/calendar-evWoPgiR.js","assets/check-DeJLbG-z.js","assets/info-7SrTpN6e.js","assets/ToastContext-CypVB8nG.js","assets/loader-circle-0NMQFk3n.js","assets/x-BdS-BMFW.js","assets/file-DDkFXH-b.js","assets/triangle-alert-BAqbkTqR.js","assets/react-dom-BPpli5WM.js","assets/Button-BOrMgOyo.js","assets/Card-C6dM19X9.js","assets/filamentSwatchHelpers-D3oXQSGk.js","assets/AuthContext-DS-dpwJp.js","assets/date-G9KUauqz.js","assets/index-LBjsy7mY.css"])))=>i.map(i=>d[i]);
  2. import{i as e}from"./chunk-aKtaBQYM.js";import{C as t,D as n,a as r,l as i,w as a}from"./client-C5b1pVUf.js";import{t as o}from"./loader-circle-0NMQFk3n.js";import{n as s,t as c}from"./zoom-out-BhJDvXo0.js";import{t as l}from"./file-DDkFXH-b.js";import{Mn as u,Nn as d,Sn as ee,qn as f}from"./index-DWBWyYf2.js";import{n as p,r as m,t as h}from"./usePreviewFullscreen-CCAq0D6Y.js";var g=e(n(),1),_=t(),v=.4,y=4,b=1.25,x=30,te=Math.log(b)/x,ne=150,S=16*1024*1024,C=`/assets/pdfjs/`,w=e=>Math.min(y,Math.max(v,e));function T(e){let t=document.createElement(`canvas`);t.width=256,t.height=256;let n=t.getContext(`2d`);if(!n)return Promise.resolve(null);n.fillStyle=`#ffffff`,n.fillRect(0,0,256,256);let r=256/Math.max(e.width,e.height),i=e.width*r,a=e.height*r;return n.drawImage(e,(256-i)/2,(256-a)/2,i,a),new Promise(e=>t.toBlob(e,`image/png`))}function re(e){return e.deltaMode===1?e.deltaY*16:e.deltaMode===2?e.deltaY*100:e.deltaY}function E({libraryFileId:e,filename:t,fileSize:n,onClose:v,onSnapshot:y}){let{t:E}=a(),D=h(),{panelRef:O,isFullscreen:ie,toggleFullscreen:ae}=D,k=(0,g.useRef)(null),A=(0,g.useRef)(null),j=(0,g.useRef)(null),M=(0,g.useRef)(!1),N=(0,g.useRef)(y);(0,g.useEffect)(()=>{N.current=y});let[P,F]=(0,g.useState)(null),[I,L]=(0,g.useState)(1),[R,z]=(0,g.useState)(1),[B,V]=(0,g.useState)(1),[oe,se]=(0,g.useState)(0),[H,U]=(0,g.useState)(null),[ce,W]=(0,g.useState)(!0),G=(0,g.useRef)(R),K=(0,g.useRef)(null),q=(0,g.useRef)(null),J=(0,g.useRef)(new Map),Y=(0,g.useRef)(null),X=(0,g.useCallback)((e,t,n)=>{let r=k.current,i=A.current;if(r&&i){let e=r.getBoundingClientRect(),a=i.getBoundingClientRect(),o=t==null?e.width/2:t-e.left,s=n==null?e.height/2:n-e.top;q.current=a.width>0&&a.height>0?{fx:(o+e.left-a.left)/a.width,fy:(s+e.top-a.top)/a.height,px:o,py:s}:null}z(t=>w(t*e))},[]);(0,g.useEffect)(()=>{let e=e=>{e.ctrlKey||e.metaKey||e.altKey||(e.key===`+`||e.key===`=`?(e.preventDefault(),X(b)):e.key===`-`?(e.preventDefault(),X(1/b)):e.key===`0`&&(e.preventDefault(),q.current=null,z(1)))};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[X]),(0,g.useEffect)(()=>{let e=k.current;if(!e)return;let t=t=>{if(!A.current||!K.current||!(t.ctrlKey||t.metaKey)&&!(e.scrollHeight<=e.clientHeight&&e.scrollWidth<=e.clientWidth))return;t.preventDefault();let n=Math.max(-30,Math.min(x,re(t)));X(Math.exp(-n*te),t.clientX,t.clientY)};return e.addEventListener(`wheel`,t,{passive:!1}),()=>e.removeEventListener(`wheel`,t)},[X]);let le=e=>{e.pointerType===`touch`&&(J.current.set(e.pointerId,{x:e.clientX,y:e.clientY}),Y.current=null)},ue=e=>{if(e.pointerType!==`touch`)return;let t=J.current,n=t.get(e.pointerId);if(!n)return;if(t.set(e.pointerId,{x:e.clientX,y:e.clientY}),t.size===1){let t=k.current;t&&(t.scrollLeft-=e.clientX-n.x,t.scrollTop-=e.clientY-n.y);return}if(t.size!==2)return;let[r,i]=Array.from(t.values()),a=Math.hypot(r.x-i.x,r.y-i.y),o=Y.current;Y.current=a,o!=null&&o>0&&a>0&&X(a/o,(r.x+i.x)/2,(r.y+i.y)/2)},Z=e=>{e.pointerType===`touch`&&(J.current.delete(e.pointerId),Y.current=null)};(0,g.useLayoutEffect)(()=>{G.current=R;let e=A.current,t=k.current,n=K.current;if(!e||!t||!n)return;e.style.width=`${n.width*R}px`,e.style.height=`${n.height*R}px`;let r=q.current;q.current=null,r&&(t.scrollLeft=e.offsetLeft+r.fx*e.offsetWidth-r.px,t.scrollTop=e.offsetTop+r.fy*e.offsetHeight-r.py)},[R]),(0,g.useEffect)(()=>{if(R===B)return;let e=window.setTimeout(()=>V(R),ne);return()=>window.clearTimeout(e)},[R,B]),(0,g.useEffect)(()=>{let e=O.current;if(!e)return;let t=new ResizeObserver(()=>se(e=>e+1));return t.observe(e),()=>t.disconnect()},[O]),(0,g.useEffect)(()=>{let t=!1,a=null;if(F(null),U(null),L(1),W(!0),n>52428800){U(E(`fileManager.preview.tooLarge`,{size:l(n)})),W(!1);return}let o={},s=i();return s&&(o.Authorization=`Bearer ${s}`),(async()=>{let n=await fetch(r.getLibraryFileDownloadUrl(e),{headers:o});if(!n.ok)throw Error(`HTTP ${n.status}`);let i=await n.arrayBuffer(),s=await f(()=>import(`./pdf-Tp8LLG1-.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25]));if(s.GlobalWorkerOptions.workerSrc||(s.GlobalWorkerOptions.workerSrc=(await f(async()=>{let{default:e}=await import(`./pdf.worker.min-DpOxPwGP.js`);return{default:e}},[])).default),a=s.getDocument({data:new Uint8Array(i),cMapUrl:`${C}cmaps/`,iccUrl:`${C}iccs/`,standardFontDataUrl:`${C}standard_fonts/`,wasmUrl:`${C}wasm/`}),t){a.destroy();return}let c=await a.promise;t||F(c)})().catch(e=>{console.error(`[pdf-preview] load failed`,e),t||(U(E(`fileManager.preview.error`)),W(!1))}),()=>{t=!0,j.current?.cancel(),j.current=null,a?.destroy()}},[e,n,E]),(0,g.useEffect)(()=>{if(!P)return;let e=!1;return W(!0),(async()=>{let t=await P.getPage(I),n=A.current,r=k.current;if(!n||!r||e)return;let i=t.getViewport({scale:1}),a=Math.max((r.clientWidth-32)/i.width,.1),o=Math.min(window.devicePixelRatio||1,2),s=a*B*o,c=i.width*s*(i.height*s),l=c>S?s*Math.sqrt(S/c):s,u=t.getViewport({scale:l});n.width=u.width,n.height=u.height,K.current={width:i.width*a,height:i.height*a},n.style.width=`${K.current.width*G.current}px`,n.style.height=`${K.current.height*G.current}px`,j.current?.cancel();let d=t.render({canvas:n,viewport:u});if(j.current=d,await d.promise,!e&&(W(!1),I===1&&N.current&&!M.current)){M.current=!0;let t=await T(n);t&&!e&&N.current?.(t)}})().catch(t=>{!e&&t?.name!==`RenderingCancelledException`&&(console.error(`[pdf-preview] render failed`,t),U(E(`fileManager.preview.error`)),W(!1))}),()=>{e=!0}},[P,I,B,oe,E]);let Q=P?.numPages??0,$=m;return(0,_.jsx)(p,{title:t,fullscreen:D,onClose:v,icon:(0,_.jsx)(ee,{className:`w-5 h-5 text-bambu-green flex-shrink-0`}),actions:(0,_.jsxs)(_.Fragment,{children:[P&&Q>1&&(0,_.jsxs)(`div`,{className:`flex items-center gap-1 mr-2`,children:[(0,_.jsx)(`button`,{onClick:()=>L(e=>Math.max(1,e-1)),disabled:I<=1,className:`${$} disabled:opacity-40 disabled:cursor-not-allowed`,"aria-label":E(`fileManager.preview.prevPage`),children:(0,_.jsx)(u,{className:`w-4 h-4`})}),(0,_.jsx)(`span`,{className:`text-sm text-bambu-gray whitespace-nowrap`,children:E(`fileManager.preview.page`,{current:I,total:Q})}),(0,_.jsx)(`button`,{onClick:()=>L(e=>Math.min(Q,e+1)),disabled:I>=Q,className:`${$} disabled:opacity-40 disabled:cursor-not-allowed`,"aria-label":E(`fileManager.preview.nextPage`),children:(0,_.jsx)(d,{className:`w-4 h-4`})})]}),P&&(0,_.jsxs)(_.Fragment,{children:[(0,_.jsx)(`button`,{onClick:()=>X(1/b),className:$,"aria-label":E(`fileManager.preview.zoomOut`),children:(0,_.jsx)(c,{className:`w-4 h-4`})}),(0,_.jsx)(`button`,{onClick:()=>X(b),className:$,"aria-label":E(`fileManager.preview.zoomIn`),children:(0,_.jsx)(s,{className:`w-4 h-4`})})]})]}),children:(0,_.jsxs)(`div`,{ref:k,"data-testid":`pdf-preview-page`,className:`relative flex-1 min-h-0 overflow-auto bg-bambu-dark p-4 touch-none ${ie?``:`rounded-b-lg`}`,onDoubleClick:ae,onPointerDown:le,onPointerMove:ue,onPointerUp:Z,onPointerCancel:Z,onPointerLeave:Z,children:[H?(0,_.jsx)(`div`,{className:`h-full flex items-center justify-center`,children:(0,_.jsx)(`p`,{className:`text-bambu-gray text-center`,children:H})}):(0,_.jsx)(`div`,{className:`flex justify-center min-w-fit`,children:(0,_.jsx)(`canvas`,{ref:A,className:`shadow-lg`})}),!H&&ce&&(0,_.jsx)(`div`,{className:`absolute inset-0 flex items-center justify-center pointer-events-none`,children:(0,_.jsx)(o,{className:`w-8 h-8 text-bambu-green animate-spin`})})]})})}export{E as PdfPreviewModal};