@cyber-harbour/ui 2.1.20 → 2.1.21

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,2 +1,2 @@
1
- import {a,pb,Ya,z,la,ka,Pa,ma}from'./chunk-OXKOV5KN.mjs';import {useState,useRef,useCallback,useMemo,useEffect}from'react';import M from'lodash.debounce';import {pdfjs,Document,Page}from'react-pdf';import'react-pdf/dist/Page/AnnotationLayer.css';import'react-pdf/dist/Page/TextLayer.css';import {Virtuoso}from'react-virtuoso';import {jsx,jsxs}from'react/jsx-runtime';var f="/pdfjs";typeof window<"u"&&typeof document<"u"&&(pdfjs.GlobalWorkerOptions.workerSrc=`${f}/pdf.worker.min.js`);var ae=1e3,ie=400,le=150,ce=70,de=1.414,I=400,ye=a(({url:O})=>{let[s,k]=useState(0),[i,b]=useState(1),[H,T]=useState(true),[E,B]=useState(null),[v,F]=useState(I),[$,Z]=useState(I),[l,R]=useState(1),[x,G]=useState(I),[C,V]=useState(de),c=useRef(null),S=useRef(null),y=useRef(false),d=useRef(null),N=useRef(false),p=useCallback((e,r=true)=>{e<1||e>s||(y.current=true,S.current?.scrollToIndex({index:e-1,align:"start",behavior:r?"smooth":"auto"}),d.current&&clearTimeout(d.current),d.current=setTimeout(()=>{N.current&&(y.current=false);},ae));},[s]),w=useMemo(()=>M((e,r=false)=>{p(e,r);},ie),[p]),W=useCallback(()=>{R(e=>Math.min(e+.25,4));},[]),Y=useCallback(()=>{R(e=>Math.max(e-.25,.25));},[]);useEffect(()=>{if(!c.current)return;let e=M(()=>{c.current&&(F(c.current.offsetWidth-ce),Z(c.current.clientHeight));},le);e();let r=new ResizeObserver(e);return r.observe(c.current),()=>{r.disconnect(),e.cancel();}},[]);let J=useMemo(()=>({cMapPacked:true,cMapUrl:`${f}/cmaps/`,standardFontDataUrl:`${f}/standard_fonts/`,wasmUrl:`${f}/wasm/`,iccUrl:`${f}/icc/`}),[]),q=useCallback(({numPages:e})=>{k(e),T(false);},[]),K=useCallback(e=>{B(`Failed to load PDF: ${e.message}`),T(false);},[]),g=useCallback(e=>{let r=i+e;b(r),p(r);},[i,p]),Q=useCallback(()=>{g(-1);},[g]),X=useCallback(()=>{g(1);},[g]),ee=useCallback(e=>{if(y.current)return;let r=e.startIndex+1;r!==i&&b(r);},[i]);return useEffect(()=>(N.current=true,()=>{N.current=false,w.cancel(),d.current&&clearTimeout(d.current);}),[w]),useEffect(()=>{G(v*l*C);},[v,l,C]),E?jsx("div",{className:"flex items-center justify-center h-full w-full px-8.5",children:jsx("div",{className:"text-red-500 text-center",children:jsx("p",{children:E})})}):jsxs("div",{className:"h-full w-full flex flex-col overflow-hidden pb-5",children:[H&&jsx("div",{className:"flex items-center justify-center h-full px-8.5",children:jsx("div",{className:"text-gray-500",children:"Loading PDF..."})}),s>0&&jsxs("div",{className:"flex items-center justify-center md:justify-between flex-wrap gap-3 px-8.5 py-3",children:[jsxs(pb,{py:4,px:8,className:"flex items-center justify-start gap-1 rounded-[5px]!",children:[jsx(Ya,{color:"text.lighter",style:{fontSize:10},children:"Page:"}),jsxs("span",{className:"flex items-center gap-2 text-[12px]",children:[jsx("input",{type:"number",min:1,max:s,value:i,onChange:e=>{let r=parseInt(e.target.value,10);r>=1&&r<=s&&(b(r),w(r,false));},className:"w-15 px-1 py-1 text-end text-[12px]"}),"/ ",s]}),jsxs("div",{className:"flex flex-col gap-0.25 pl-1",children:[jsx(z,{variant:"empty","aria-label":"previous page",color:"secondary",size:"small",type:"button",disabled:i<=1,onClick:Q,icon:jsx(la,{style:{width:8,height:8}})}),jsx(z,{variant:"empty","aria-label":"next page",color:"secondary",size:"small",type:"button",disabled:i>=s,onClick:X,icon:jsx(ka,{style:{width:8,height:8}})})]})]}),jsxs("div",{className:"flex items-center justify-center gap-3",children:[jsx(z,{variant:"outlined","aria-label":"zoom-out",color:"default",size:"small",icon:jsx(Pa,{style:{width:20,height:20}}),onClick:Y,className:"bg-white! hover:bg-blue-50!",disabled:l<=.25,p:7}),jsxs(pb,{py:8,px:8,className:"flex items-center justify-between gap-1.5 min-w-21 rounded-[5px]!",children:[jsx(Ya,{color:"text.lighter",style:{fontSize:10},children:"Scale:"}),jsxs(Ya,{children:[l*100,"%"]})]}),jsx(z,{variant:"outlined","aria-label":"zoom-in",size:"small",color:"default",icon:jsx(ma,{style:{width:14,height:14}}),onClick:W,className:"bg-white! hover:bg-blue-50!",disabled:l>=4,p:10})]})]}),jsx("div",{ref:c,className:"flex-1 overflow-hidden min-h-0",children:jsx(Document,{options:J,file:O,onLoadSuccess:q,onLoadError:K,loading:jsx("div",{className:"flex items-center justify-center",style:{height:x},children:jsx("div",{className:"h-10 w-10 rounded-full border border-2 border-gray-200 animate-spin border-s-transparent"})}),children:jsx(Virtuoso,{ref:S,style:{height:$||"calc(100dvh - 190px)",width:"100%",scrollbarGutter:"stable both-edges"},totalCount:s,rangeChanged:ee,defaultItemHeight:x,itemContent:e=>jsx("div",{className:"mx-auto w-fit mb-4 border border-1 border-gray-100",children:jsx(Page,{pageNumber:e+1,renderTextLayer:true,renderAnnotationLayer:true,width:v*l,onLoadSuccess:r=>{if(e===0){let te=r.height/r.width;V(te);}},loading:jsx("div",{className:"flex items-center justify-center",style:{height:x},children:jsx("div",{className:"h-10 w-10 rounded-full border border-2 border-gray-200 animate-spin border-s-transparent"})}),className:"h-auto w-full transition-[width] duration-[600ms] ease-in-out"})})})})})]})},"PdfDriver");export{ye as PdfDriver};//# sourceMappingURL=PdfDriver-4DI6FGGQ.mjs.map
2
- //# sourceMappingURL=PdfDriver-4DI6FGGQ.mjs.map
1
+ import {a,pb,Ya,z,la,ka,Pa,ma}from'./chunk-IMZOAD2F.mjs';import {useState,useRef,useCallback,useMemo,useEffect}from'react';import M from'lodash.debounce';import {pdfjs,Document,Page}from'react-pdf';import'react-pdf/dist/Page/AnnotationLayer.css';import'react-pdf/dist/Page/TextLayer.css';import {Virtuoso}from'react-virtuoso';import {jsx,jsxs}from'react/jsx-runtime';var f="/pdfjs";typeof window<"u"&&typeof document<"u"&&(pdfjs.GlobalWorkerOptions.workerSrc=`${f}/pdf.worker.min.js`);var ae=1e3,ie=400,le=150,ce=70,de=1.414,I=400,ye=a(({url:O})=>{let[s,k]=useState(0),[i,b]=useState(1),[H,T]=useState(true),[E,B]=useState(null),[v,F]=useState(I),[$,Z]=useState(I),[l,R]=useState(1),[x,G]=useState(I),[C,V]=useState(de),c=useRef(null),S=useRef(null),y=useRef(false),d=useRef(null),N=useRef(false),p=useCallback((e,r=true)=>{e<1||e>s||(y.current=true,S.current?.scrollToIndex({index:e-1,align:"start",behavior:r?"smooth":"auto"}),d.current&&clearTimeout(d.current),d.current=setTimeout(()=>{N.current&&(y.current=false);},ae));},[s]),w=useMemo(()=>M((e,r=false)=>{p(e,r);},ie),[p]),W=useCallback(()=>{R(e=>Math.min(e+.25,4));},[]),Y=useCallback(()=>{R(e=>Math.max(e-.25,.25));},[]);useEffect(()=>{if(!c.current)return;let e=M(()=>{c.current&&(F(c.current.offsetWidth-ce),Z(c.current.clientHeight));},le);e();let r=new ResizeObserver(e);return r.observe(c.current),()=>{r.disconnect(),e.cancel();}},[]);let J=useMemo(()=>({cMapPacked:true,cMapUrl:`${f}/cmaps/`,standardFontDataUrl:`${f}/standard_fonts/`,wasmUrl:`${f}/wasm/`,iccUrl:`${f}/icc/`}),[]),q=useCallback(({numPages:e})=>{k(e),T(false);},[]),K=useCallback(e=>{B(`Failed to load PDF: ${e.message}`),T(false);},[]),g=useCallback(e=>{let r=i+e;b(r),p(r);},[i,p]),Q=useCallback(()=>{g(-1);},[g]),X=useCallback(()=>{g(1);},[g]),ee=useCallback(e=>{if(y.current)return;let r=e.startIndex+1;r!==i&&b(r);},[i]);return useEffect(()=>(N.current=true,()=>{N.current=false,w.cancel(),d.current&&clearTimeout(d.current);}),[w]),useEffect(()=>{G(v*l*C);},[v,l,C]),E?jsx("div",{className:"flex items-center justify-center h-full w-full px-8.5",children:jsx("div",{className:"text-red-500 text-center",children:jsx("p",{children:E})})}):jsxs("div",{className:"h-full w-full flex flex-col overflow-hidden pb-5",children:[H&&jsx("div",{className:"flex items-center justify-center h-full px-8.5",children:jsx("div",{className:"text-gray-500",children:"Loading PDF..."})}),s>0&&jsxs("div",{className:"flex items-center justify-center md:justify-between flex-wrap gap-3 px-8.5 py-3",children:[jsxs(pb,{py:4,px:8,className:"flex items-center justify-start gap-1 rounded-[5px]!",children:[jsx(Ya,{color:"text.lighter",style:{fontSize:10},children:"Page:"}),jsxs("span",{className:"flex items-center gap-2 text-[12px]",children:[jsx("input",{type:"number",min:1,max:s,value:i,onChange:e=>{let r=parseInt(e.target.value,10);r>=1&&r<=s&&(b(r),w(r,false));},className:"w-15 px-1 py-1 text-end text-[12px]"}),"/ ",s]}),jsxs("div",{className:"flex flex-col gap-0.25 pl-1",children:[jsx(z,{variant:"empty","aria-label":"previous page",color:"secondary",size:"small",type:"button",disabled:i<=1,onClick:Q,icon:jsx(la,{style:{width:8,height:8}})}),jsx(z,{variant:"empty","aria-label":"next page",color:"secondary",size:"small",type:"button",disabled:i>=s,onClick:X,icon:jsx(ka,{style:{width:8,height:8}})})]})]}),jsxs("div",{className:"flex items-center justify-center gap-3",children:[jsx(z,{variant:"outlined","aria-label":"zoom-out",color:"default",size:"small",icon:jsx(Pa,{style:{width:20,height:20}}),onClick:Y,className:"bg-white! hover:bg-blue-50!",disabled:l<=.25,p:7}),jsxs(pb,{py:8,px:8,className:"flex items-center justify-between gap-1.5 min-w-21 rounded-[5px]!",children:[jsx(Ya,{color:"text.lighter",style:{fontSize:10},children:"Scale:"}),jsxs(Ya,{children:[l*100,"%"]})]}),jsx(z,{variant:"outlined","aria-label":"zoom-in",size:"small",color:"default",icon:jsx(ma,{style:{width:14,height:14}}),onClick:W,className:"bg-white! hover:bg-blue-50!",disabled:l>=4,p:10})]})]}),jsx("div",{ref:c,className:"flex-1 overflow-hidden min-h-0",children:jsx(Document,{options:J,file:O,onLoadSuccess:q,onLoadError:K,loading:jsx("div",{className:"flex items-center justify-center",style:{height:x},children:jsx("div",{className:"h-10 w-10 rounded-full border border-2 border-gray-200 animate-spin border-s-transparent"})}),children:jsx(Virtuoso,{ref:S,style:{height:$||"calc(100dvh - 190px)",width:"100%",scrollbarGutter:"stable both-edges"},totalCount:s,rangeChanged:ee,defaultItemHeight:x,itemContent:e=>jsx("div",{className:"mx-auto w-fit mb-4 border border-1 border-gray-100",children:jsx(Page,{pageNumber:e+1,renderTextLayer:true,renderAnnotationLayer:true,width:v*l,onLoadSuccess:r=>{if(e===0){let te=r.height/r.width;V(te);}},loading:jsx("div",{className:"flex items-center justify-center",style:{height:x},children:jsx("div",{className:"h-10 w-10 rounded-full border border-2 border-gray-200 animate-spin border-s-transparent"})}),className:"h-auto w-full transition-[width] duration-[600ms] ease-in-out"})})})})})]})},"PdfDriver");export{ye as PdfDriver};//# sourceMappingURL=PdfDriver-6VLI6SL6.mjs.map
2
+ //# sourceMappingURL=PdfDriver-6VLI6SL6.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/FileViewer/drivers/PdfDriver/PdfDriver.tsx"],"names":["BASE_DIR","pdfjs","SCROLL_ANIMATION_DURATION","INPUT_DEBOUNCE_DELAY","RESIZE_DEBOUNCE_DELAY","CONTAINER_PADDING","DEFAULT_RATIO_A4","DEFAULT_MIN_SIZE","PdfDriver","__name","url","numPages","setNumPages","useState","pageNumber","setPageNumber","loading","setLoading","error","setError","width","setWidth","height","setHeight","scale","setScale","defaultPageHeight","setDefaultPageHeight","pageAspectRatio","setPageAspectRatio","containerRef","useRef","virtuosoRef","isUserScrollingRef","scrollTimeoutRef","isMountedRef","scrollToPage","useCallback","page","smooth","debouncedScroll","useMemo","debounce","handleZoomIn","prev","handleZoomOut","useEffect","updateSize","observer","options","onDocumentLoadSuccess","onDocumentLoadError","changePage","offset","newPage","previousPage","nextPage","handleRangeChanged","range","visiblePage","jsx","jsxs","Box","Typography","Button","ChevronUpIcon","ChevronDownIcon","MinusIcon","PlusIcon","Document","Virtuoso","index","Page","ratio"],"mappings":"+WAQA,IAAMA,CAAAA,CAAW,QAGb,CAAA,OAAO,OAAW,GAAe,EAAA,OAAO,QAAa,CAAA,GAAA,GACvDC,KAAM,CAAA,mBAAA,CAAoB,UAAY,CAAGD,EAAAA,CAAQ,CAMnD,kBAAA,CAAA,CAAA,CAAA,IAAME,EAA4B,CAAA,GAAA,CAC5BC,GAAuB,GACvBC,CAAAA,EAAAA,CAAwB,GACxBC,CAAAA,EAAAA,CAAoB,EACpBC,CAAAA,EAAAA,CAAmB,MACnBC,CAAmB,CAAA,GAAA,CAEZC,EAAsCC,CAAAA,CAAAA,CAAA,CAAC,CAAE,IAAAC,CAAI,CAAA,GAAM,CAC9D,GAAM,CAACC,CAAAA,CAAUC,CAAW,CAAIC,CAAAA,QAAAA,CAAiB,CAAC,CAAA,CAC5C,CAACC,CAAAA,CAAYC,CAAa,CAAIF,CAAAA,QAAAA,CAAiB,CAAC,CAAA,CAChD,CAACG,CAAAA,CAASC,CAAU,CAAIJ,CAAAA,QAAAA,CAAkB,IAAI,CAAA,CAC9C,CAACK,CAAAA,CAAOC,CAAQ,CAAIN,CAAAA,QAAAA,CAAwB,IAAI,CAAA,CAChD,CAACO,CAAAA,CAAOC,CAAQ,CAAIR,CAAAA,QAAAA,CAAiBN,CAAgB,CAAA,CACrD,CAACe,CAAAA,CAAQC,CAAS,CAAIV,CAAAA,QAAAA,CAAiBN,CAAgB,CAAA,CACvD,CAACiB,CAAAA,CAAOC,CAAQ,CAAIZ,CAAAA,QAAAA,CAAS,CAAC,CAAA,CAC9B,CAACa,CAAAA,CAAmBC,CAAoB,CAAId,CAAAA,QAAAA,CAASN,CAAgB,CAAA,CACrE,CAACqB,CAAAA,CAAiBC,CAAkB,CAAIhB,CAAAA,QAAAA,CAASP,EAAgB,CAAA,CAEjEwB,CAAeC,CAAAA,MAAAA,CAAuB,IAAI,CAC1CC,CAAAA,CAAAA,CAAcD,MAAuB,CAAA,IAAI,CACzCE,CAAAA,CAAAA,CAAqBF,OAAgB,KAAK,CAAA,CAC1CG,CAAmBH,CAAAA,MAAAA,CAA8B,IAAI,CAAA,CACrDI,EAAeJ,MAAO,CAAA,KAAK,CAE3BK,CAAAA,CAAAA,CAAeC,WACnB,CAAA,CAACC,EAAcC,CAAS,CAAA,IAAA,GAAS,CAC3BD,CAAAA,CAAO,CAAKA,EAAAA,CAAAA,CAAO3B,IAEvBsB,CAAmB,CAAA,OAAA,CAAU,IAC7BD,CAAAA,CAAAA,CAAY,OAAS,EAAA,aAAA,CAAc,CACjC,KAAOM,CAAAA,CAAAA,CAAO,CACd,CAAA,KAAA,CAAO,OACP,CAAA,QAAA,CAAUC,EAAS,QAAW,CAAA,MAChC,CAAC,CAAA,CAEGL,CAAiB,CAAA,OAAA,EACnB,aAAaA,CAAiB,CAAA,OAAO,CAGvCA,CAAAA,CAAAA,CAAiB,OAAU,CAAA,UAAA,CAAW,IAAM,CACtCC,CAAAA,CAAa,OAASF,GAAAA,CAAAA,CAAmB,OAAU,CAAA,KAAA,EACzD,EAAG/B,EAAyB,CAAA,EAC9B,CACA,CAAA,CAACS,CAAQ,CACX,EAEM6B,CAAkBC,CAAAA,OAAAA,CAAQ,IACvBC,CAAAA,CAAS,CAACJ,CAAAA,CAAcC,EAAS,KAAU,GAAA,CAChDH,CAAaE,CAAAA,CAAAA,CAAMC,CAAM,EAC3B,EAAGpC,EAAoB,CAAA,CACtB,CAACiC,CAAY,CAAC,EAEXO,CAAeN,CAAAA,WAAAA,CAAY,IAAM,CACrCZ,CAAUmB,CAAAA,CAAAA,EAAS,KAAK,GAAIA,CAAAA,CAAAA,CAAO,GAAM,CAAA,CAAC,CAAC,EAC7C,EAAG,EAAE,CAECC,CAAAA,CAAAA,CAAgBR,WAAY,CAAA,IAAM,CACtCZ,CAAUmB,CAAAA,CAAAA,EAAS,IAAK,CAAA,GAAA,CAAIA,CAAO,CAAA,GAAA,CAAM,GAAI,CAAC,EAChD,CAAG,CAAA,EAAE,CAAA,CAELE,UAAU,IAAM,CACd,GAAI,CAAChB,CAAa,CAAA,OAAA,CAAS,OAC3B,IAAMiB,CAAAA,CAAaL,CAAS,CAAA,IAAM,CAC5BZ,CAAAA,CAAa,UACfT,CAASS,CAAAA,CAAAA,CAAa,OAAQ,CAAA,WAAA,CAAczB,EAAiB,CAAA,CAC7DkB,EAAUO,CAAa,CAAA,OAAA,CAAQ,YAAY,CAAA,EAE/C,CAAG1B,CAAAA,EAAqB,EACxB2C,CAAW,EAAA,CACX,IAAMC,CAAAA,CAAW,IAAI,cAAA,CAAeD,CAAU,CAC9C,CAAA,OAAAC,CAAS,CAAA,OAAA,CAAQlB,CAAa,CAAA,OAAO,EAC9B,IAAM,CACXkB,CAAS,CAAA,UAAA,EACTD,CAAAA,CAAAA,CAAW,SACb,CACF,CAAG,CAAA,EAAE,CAAA,CAEL,IAAME,CAAUR,CAAAA,OAAAA,CACd,KAAO,CACL,UAAY,CAAA,IAAA,CACZ,QAAS,CAAGzC,EAAAA,CAAQ,CACpB,OAAA,CAAA,CAAA,mBAAA,CAAqB,CAAGA,EAAAA,CAAQ,mBAChC,OAAS,CAAA,CAAA,EAAGA,CAAQ,CAAA,MAAA,CAAA,CACpB,MAAQ,CAAA,CAAA,EAAGA,CAAQ,CACrB,KAAA,CAAA,CAAA,CAAA,CACA,EACF,CAEMkD,CAAAA,CAAAA,CAAwBb,YAAY,CAAC,CAAE,QAAA1B,CAAAA,CAAS,CAAkC,GAAA,CACtFC,EAAYD,CAAQ,CAAA,CACpBM,CAAW,CAAA,KAAK,EAClB,CAAA,CAAG,EAAE,CAAA,CAECkC,CAAsBd,CAAAA,WAAAA,CAAanB,CAAuB,EAAA,CAC9DC,EAAS,CAAuBD,oBAAAA,EAAAA,CAAAA,CAAM,OAAO,CAAA,CAAE,CAC/CD,CAAAA,CAAAA,CAAW,KAAK,EAClB,CAAA,CAAG,EAAE,CAECmC,CAAAA,CAAAA,CAAaf,YAChBgB,CAAyB,EAAA,CACxB,IAAMC,CAAAA,CAAUxC,CAAauC,CAAAA,CAAAA,CAC7BtC,EAAcuC,CAAO,CAAA,CACrBlB,CAAakB,CAAAA,CAAO,EACtB,CAAA,CACA,CAACxC,CAAYsB,CAAAA,CAAY,CAC3B,CAAA,CAEMmB,CAAelB,CAAAA,WAAAA,CAAY,IAAY,CAC3Ce,CAAAA,CAAW,EAAE,EACf,CAAG,CAAA,CAACA,CAAU,CAAC,CAAA,CAETI,CAAWnB,CAAAA,WAAAA,CAAY,IAAY,CACvCe,EAAW,CAAC,EACd,CAAG,CAAA,CAACA,CAAU,CAAC,EAETK,EAAqBpB,CAAAA,WAAAA,CACxBqB,CAAoD,EAAA,CACnD,GAAIzB,CAAAA,CAAmB,QACrB,OAEF,IAAM0B,CAAcD,CAAAA,CAAAA,CAAM,UAAa,CAAA,CAAA,CACnCC,IAAgB7C,CAClBC,EAAAA,CAAAA,CAAc4C,CAAW,EAE7B,CACA,CAAA,CAAC7C,CAAU,CACb,CAAA,CAiBA,OAfAgC,SAAU,CAAA,KACRX,EAAa,OAAU,CAAA,IAAA,CAChB,IAAM,CACXA,CAAa,CAAA,OAAA,CAAU,MACvBK,CAAgB,CAAA,MAAA,EACZN,CAAAA,CAAAA,CAAiB,OACnB,EAAA,YAAA,CAAaA,EAAiB,OAAO,EAEzC,CACC,CAAA,CAAA,CAACM,CAAe,CAAC,EAEpBM,SAAU,CAAA,IAAM,CACdnB,CAAAA,CAAqBP,CAAQI,CAAAA,CAAAA,CAAQI,CAAe,EACtD,CAAA,CAAG,CAACR,CAAAA,CAAOI,CAAOI,CAAAA,CAAe,CAAC,CAE9BV,CAAAA,CAAAA,CAEA0C,GAAC,CAAA,KAAA,CAAA,CAAI,SAAU,CAAA,uDAAA,CACb,SAAAA,GAAC,CAAA,KAAA,CAAA,CAAI,SAAU,CAAA,0BAAA,CACb,QAAAA,CAAAA,GAAAA,CAAC,KAAG,QAAA1C,CAAAA,CAAAA,CAAM,CACZ,CAAA,CAAA,CACF,CAKF2C,CAAAA,IAAAA,CAAC,OAAI,SAAU,CAAA,kDAAA,CACZ,QAAA7C,CAAAA,CAAAA,CAAAA,EACC4C,GAAC,CAAA,KAAA,CAAA,CAAI,UAAU,iDACb,CAAA,QAAA,CAAAA,GAAC,CAAA,KAAA,CAAA,CAAI,SAAU,CAAA,eAAA,CAAgB,0BAAc,CAC/C,CAAA,CAAA,CAEDjD,CAAW,CAAA,CAAA,EACVkD,IAAC,CAAA,KAAA,CAAA,CAAI,UAAU,iFACb,CAAA,QAAA,CAAA,CAAAA,IAACC,CAAAA,EAAAA,CAAA,CAAI,EAAA,CAAI,EAAG,EAAI,CAAA,CAAA,CAAG,SAAU,CAAA,sDAAA,CAC3B,QAAAF,CAAAA,CAAAA,GAAAA,CAACG,GAAA,CAAW,KAAA,CAAM,cAAe,CAAA,KAAA,CAAO,CAAE,QAAA,CAAU,EAAG,CAAG,CAAA,QAAA,CAAA,OAAA,CAE1D,CACAF,CAAAA,IAAAA,CAAC,MAAK,CAAA,CAAA,SAAA,CAAU,sCACd,QAAAD,CAAAA,CAAAA,GAAAA,CAAC,OACC,CAAA,CAAA,IAAA,CAAK,QACL,CAAA,GAAA,CAAK,EACL,GAAKjD,CAAAA,CAAAA,CACL,KAAOG,CAAAA,CAAAA,CACP,QAAW,CAAA,CAAA,EAAM,CACf,IAAMwB,CAAAA,CAAO,QAAS,CAAA,CAAA,CAAE,MAAO,CAAA,KAAA,CAAO,EAAE,CACpCA,CAAAA,CAAAA,EAAQ,CAAKA,EAAAA,CAAAA,EAAQ3B,CACvBI,GAAAA,CAAAA,CAAcuB,CAAI,CAClBE,CAAAA,CAAAA,CAAgBF,CAAM,CAAA,KAAK,CAE/B,EAAA,CAAA,CACA,UAAU,qCACZ,CAAA,CAAA,CAAE,IACC3B,CAAAA,CAAAA,CAAAA,CACL,CACAkD,CAAAA,IAAAA,CAAC,OAAI,SAAU,CAAA,6BAAA,CACb,QAAAD,CAAAA,CAAAA,GAAAA,CAACI,CAAA,CAAA,CACC,QAAQ,OACR,CAAA,YAAA,CAAW,eACX,CAAA,KAAA,CAAM,WACN,CAAA,IAAA,CAAK,QACL,IAAK,CAAA,QAAA,CACL,QAAUlD,CAAAA,CAAAA,EAAc,CACxB,CAAA,OAAA,CAASyC,EACT,IAAMK,CAAAA,GAAAA,CAACK,EAAA,CAAA,CAAc,KAAO,CAAA,CAAE,MAAO,CAAG,CAAA,MAAA,CAAQ,CAAE,CAAA,CAAG,CACvD,CAAA,CAAA,CACAL,IAACI,CAAA,CAAA,CACC,OAAQ,CAAA,OAAA,CACR,YAAW,CAAA,WAAA,CACX,MAAM,WACN,CAAA,IAAA,CAAK,OACL,CAAA,IAAA,CAAK,QACL,CAAA,QAAA,CAAUlD,GAAcH,CACxB,CAAA,OAAA,CAAS6C,CACT,CAAA,IAAA,CAAMI,GAACM,CAAAA,EAAAA,CAAA,CAAgB,KAAO,CAAA,CAAE,KAAO,CAAA,CAAA,CAAG,MAAQ,CAAA,CAAE,EAAG,CACzD,CAAA,CAAA,CAAA,CACF,CACF,CAAA,CAAA,CAAA,CACAL,IAAC,CAAA,KAAA,CAAA,CAAI,UAAU,wCACb,CAAA,QAAA,CAAA,CAAAD,GAACI,CAAAA,CAAAA,CAAA,CACC,OAAA,CAAQ,WACR,YAAW,CAAA,UAAA,CACX,KAAM,CAAA,SAAA,CACN,IAAK,CAAA,OAAA,CACL,KAAMJ,GAACO,CAAAA,EAAAA,CAAA,CAAU,KAAA,CAAO,CAAE,KAAA,CAAO,GAAI,MAAQ,CAAA,EAAG,CAAG,CAAA,CAAA,CACnD,OAAStB,CAAAA,CAAAA,CACT,UAAU,6BACV,CAAA,QAAA,CAAUrB,CAAS,EAAA,GAAA,CACnB,CAAG,CAAA,CAAA,CACL,EACAqC,IAACC,CAAAA,EAAAA,CAAA,CAAI,EAAA,CAAI,CAAG,CAAA,EAAA,CAAI,EAAG,SAAU,CAAA,mEAAA,CAC3B,QAAAF,CAAAA,CAAAA,GAAAA,CAACG,EAAA,CAAA,CAAW,MAAM,cAAe,CAAA,KAAA,CAAO,CAAE,QAAA,CAAU,EAAG,CAAA,CAAG,kBAE1D,CACAF,CAAAA,IAAAA,CAACE,EAAA,CAAA,CAAY,QAAAvC,CAAAA,CAAAA,CAAAA,CAAQ,IAAI,GAAC,CAAA,CAAA,CAAA,CAAA,CAC5B,CACAoC,CAAAA,GAAAA,CAACI,CAAA,CAAA,CACC,QAAQ,UACR,CAAA,YAAA,CAAW,SACX,CAAA,IAAA,CAAK,OACL,CAAA,KAAA,CAAM,UACN,IAAMJ,CAAAA,GAAAA,CAACQ,EAAA,CAAA,CAAS,KAAO,CAAA,CAAE,MAAO,EAAI,CAAA,MAAA,CAAQ,EAAG,CAAA,CAAG,CAClD,CAAA,OAAA,CAASzB,EACT,SAAU,CAAA,6BAAA,CACV,QAAUnB,CAAAA,CAAAA,EAAS,CACnB,CAAA,CAAA,CAAG,GACL,CACF,CAAA,CAAA,CAAA,CAAA,CACF,CAEFoC,CAAAA,GAAAA,CAAC,KAAI,CAAA,CAAA,GAAA,CAAK9B,EAAc,SAAU,CAAA,gCAAA,CAChC,QAAA8B,CAAAA,GAAAA,CAACS,QAAA,CAAA,CACC,QAASpB,CACT,CAAA,IAAA,CAAMvC,CACN,CAAA,aAAA,CAAewC,CACf,CAAA,WAAA,CAAaC,EACb,OACES,CAAAA,GAAAA,CAAC,KAAI,CAAA,CAAA,SAAA,CAAU,kCAAmC,CAAA,KAAA,CAAO,CAAE,MAAQlC,CAAAA,CAAkB,CACnF,CAAA,QAAA,CAAAkC,GAAC,CAAA,KAAA,CAAA,CAAI,UAAU,0FAA2F,CAAA,CAAA,CAC5G,CAGF,CAAA,QAAA,CAAAA,GAACU,CAAAA,QAAAA,CAAA,CACC,GAAKtC,CAAAA,CAAAA,CACL,KAAO,CAAA,CAAE,MAAQV,CAAAA,CAAAA,EAAU,uBAAwB,KAAO,CAAA,MAAA,CAAQ,eAAiB,CAAA,mBAAoB,CACvG,CAAA,UAAA,CAAYX,EACZ,YAAc8C,CAAAA,EAAAA,CACd,iBAAmB/B,CAAAA,CAAAA,CACnB,WAAc6C,CAAAA,CAAAA,EACZX,IAAC,KAAI,CAAA,CAAA,SAAA,CAAU,oDACb,CAAA,QAAA,CAAAA,GAACY,CAAAA,IAAAA,CAAA,CACC,UAAYD,CAAAA,CAAAA,CAAQ,CACpB,CAAA,eAAA,CAAiB,IACjB,CAAA,qBAAA,CAAuB,KACvB,KAAOnD,CAAAA,CAAAA,CAAQI,CACf,CAAA,aAAA,CAAgBc,CAAS,EAAA,CACvB,GAAIiC,CAAU,GAAA,CAAA,CAAG,CACf,IAAME,EAAQnC,CAAAA,CAAAA,CAAK,OAASA,CAAK,CAAA,KAAA,CACjCT,CAAmB4C,CAAAA,EAAK,EAC1B,CACF,EACA,OACEb,CAAAA,GAAAA,CAAC,KAAI,CAAA,CAAA,SAAA,CAAU,kCAAmC,CAAA,KAAA,CAAO,CAAE,MAAQlC,CAAAA,CAAkB,CACnF,CAAA,QAAA,CAAAkC,GAAC,CAAA,KAAA,CAAA,CAAI,UAAU,0FAA2F,CAAA,CAAA,CAC5G,CAEF,CAAA,SAAA,CAAU,+DACZ,CAAA,CAAA,CACF,EAEJ,CACF,CAAA,CAAA,CACF,CACF,CAAA,CAAA,CAEJ,CApRmD,CAAA,WAAA","file":"PdfDriver-4DI6FGGQ.mjs","sourcesContent":["import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport debounce from 'lodash.debounce';\nimport { Document, Page, pdfjs } from 'react-pdf';\nimport 'react-pdf/dist/Page/AnnotationLayer.css';\nimport 'react-pdf/dist/Page/TextLayer.css';\nimport { Virtuoso, VirtuosoHandle } from 'react-virtuoso';\nimport { Box, Button, ChevronDownIcon, ChevronUpIcon, MinusIcon, PlusIcon, Typography } from '../../../Core';\n\nconst BASE_DIR = '/pdfjs';\n\n// Set up the worker - self-hosted configuration (client-side only)\nif (typeof window !== 'undefined' && typeof document !== 'undefined') {\n pdfjs.GlobalWorkerOptions.workerSrc = `${BASE_DIR}/pdf.worker.min.js`;\n}\n\ninterface PdfDriverProps {\n url: string;\n}\nconst SCROLL_ANIMATION_DURATION = 1000;\nconst INPUT_DEBOUNCE_DELAY = 400;\nconst RESIZE_DEBOUNCE_DELAY = 150;\nconst CONTAINER_PADDING = 70;\nconst DEFAULT_RATIO_A4 = 1.414;\nconst DEFAULT_MIN_SIZE = 400;\n\nexport const PdfDriver: React.FC<PdfDriverProps> = ({ url }) => {\n const [numPages, setNumPages] = useState<number>(0);\n const [pageNumber, setPageNumber] = useState<number>(1);\n const [loading, setLoading] = useState<boolean>(true);\n const [error, setError] = useState<string | null>(null);\n const [width, setWidth] = useState<number>(DEFAULT_MIN_SIZE);\n const [height, setHeight] = useState<number>(DEFAULT_MIN_SIZE);\n const [scale, setScale] = useState(1);\n const [defaultPageHeight, setDefaultPageHeight] = useState(DEFAULT_MIN_SIZE);\n const [pageAspectRatio, setPageAspectRatio] = useState(DEFAULT_RATIO_A4);\n\n const containerRef = useRef<HTMLDivElement>(null);\n const virtuosoRef = useRef<VirtuosoHandle>(null);\n const isUserScrollingRef = useRef<boolean>(false);\n const scrollTimeoutRef = useRef<NodeJS.Timeout | null>(null);\n const isMountedRef = useRef(false);\n\n const scrollToPage = useCallback(\n (page: number, smooth = true) => {\n if (page < 1 || page > numPages) return;\n\n isUserScrollingRef.current = true;\n virtuosoRef.current?.scrollToIndex({\n index: page - 1,\n align: 'start',\n behavior: smooth ? 'smooth' : 'auto',\n });\n\n if (scrollTimeoutRef.current) {\n clearTimeout(scrollTimeoutRef.current);\n }\n\n scrollTimeoutRef.current = setTimeout(() => {\n if (isMountedRef.current) isUserScrollingRef.current = false;\n }, SCROLL_ANIMATION_DURATION);\n },\n [numPages]\n );\n\n const debouncedScroll = useMemo(() => {\n return debounce((page: number, smooth = false) => {\n scrollToPage(page, smooth);\n }, INPUT_DEBOUNCE_DELAY);\n }, [scrollToPage]);\n\n const handleZoomIn = useCallback(() => {\n setScale((prev) => Math.min(prev + 0.25, 4));\n }, []);\n\n const handleZoomOut = useCallback(() => {\n setScale((prev) => Math.max(prev - 0.25, 0.25));\n }, []);\n\n useEffect(() => {\n if (!containerRef.current) return;\n const updateSize = debounce(() => {\n if (containerRef.current) {\n setWidth(containerRef.current.offsetWidth - CONTAINER_PADDING);\n setHeight(containerRef.current.clientHeight);\n }\n }, RESIZE_DEBOUNCE_DELAY);\n updateSize();\n const observer = new ResizeObserver(updateSize);\n observer.observe(containerRef.current);\n return () => {\n observer.disconnect();\n updateSize.cancel();\n };\n }, []);\n\n const options = useMemo(\n () => ({\n cMapPacked: true,\n cMapUrl: `${BASE_DIR}/cmaps/`,\n standardFontDataUrl: `${BASE_DIR}/standard_fonts/`,\n wasmUrl: `${BASE_DIR}/wasm/`,\n iccUrl: `${BASE_DIR}/icc/`,\n }),\n []\n );\n\n const onDocumentLoadSuccess = useCallback(({ numPages }: { numPages: number }): void => {\n setNumPages(numPages);\n setLoading(false);\n }, []);\n\n const onDocumentLoadError = useCallback((error: Error): void => {\n setError(`Failed to load PDF: ${error.message}`);\n setLoading(false);\n }, []);\n\n const changePage = useCallback(\n (offset: number): void => {\n const newPage = pageNumber + offset;\n setPageNumber(newPage);\n scrollToPage(newPage);\n },\n [pageNumber, scrollToPage]\n );\n\n const previousPage = useCallback((): void => {\n changePage(-1);\n }, [changePage]);\n\n const nextPage = useCallback((): void => {\n changePage(1);\n }, [changePage]);\n\n const handleRangeChanged = useCallback(\n (range: { startIndex: number; endIndex: number }) => {\n if (isUserScrollingRef.current) {\n return;\n }\n const visiblePage = range.startIndex + 1;\n if (visiblePage !== pageNumber) {\n setPageNumber(visiblePage);\n }\n },\n [pageNumber]\n );\n\n useEffect(() => {\n isMountedRef.current = true;\n return () => {\n isMountedRef.current = false;\n debouncedScroll.cancel();\n if (scrollTimeoutRef.current) {\n clearTimeout(scrollTimeoutRef.current);\n }\n };\n }, [debouncedScroll]);\n\n useEffect(() => {\n setDefaultPageHeight(width * scale * pageAspectRatio);\n }, [width, scale, pageAspectRatio]);\n\n if (error) {\n return (\n <div className=\"flex items-center justify-center h-full w-full px-8.5\">\n <div className=\"text-red-500 text-center\">\n <p>{error}</p>\n </div>\n </div>\n );\n }\n\n return (\n <div className=\"h-full w-full flex flex-col overflow-hidden pb-5\">\n {loading && (\n <div className=\"flex items-center justify-center h-full px-8.5\">\n <div className=\"text-gray-500\">Loading PDF...</div>\n </div>\n )}\n {numPages > 0 && (\n <div className=\"flex items-center justify-center md:justify-between flex-wrap gap-3 px-8.5 py-3\">\n <Box py={4} px={8} className=\"flex items-center justify-start gap-1 rounded-[5px]!\">\n <Typography color=\"text.lighter\" style={{ fontSize: 10 }}>\n Page:\n </Typography>\n <span className=\"flex items-center gap-2 text-[12px]\">\n <input\n type=\"number\"\n min={1}\n max={numPages}\n value={pageNumber}\n onChange={(e) => {\n const page = parseInt(e.target.value, 10);\n if (page >= 1 && page <= numPages) {\n setPageNumber(page);\n debouncedScroll(page, false);\n }\n }}\n className=\"w-15 px-1 py-1 text-end text-[12px]\"\n />\n / {numPages}\n </span>\n <div className=\"flex flex-col gap-0.25 pl-1\">\n <Button\n variant=\"empty\"\n aria-label=\"previous page\"\n color=\"secondary\"\n size=\"small\"\n type=\"button\"\n disabled={pageNumber <= 1}\n onClick={previousPage}\n icon={<ChevronUpIcon style={{ width: 8, height: 8 }} />}\n />\n <Button\n variant=\"empty\"\n aria-label=\"next page\"\n color=\"secondary\"\n size=\"small\"\n type=\"button\"\n disabled={pageNumber >= numPages}\n onClick={nextPage}\n icon={<ChevronDownIcon style={{ width: 8, height: 8 }} />}\n />\n </div>\n </Box>\n <div className=\"flex items-center justify-center gap-3\">\n <Button\n variant=\"outlined\"\n aria-label=\"zoom-out\"\n color=\"default\"\n size=\"small\"\n icon={<MinusIcon style={{ width: 20, height: 20 }} />}\n onClick={handleZoomOut}\n className=\"bg-white! hover:bg-blue-50!\"\n disabled={scale <= 0.25}\n p={7}\n />\n <Box py={8} px={8} className=\"flex items-center justify-between gap-1.5 min-w-21 rounded-[5px]!\">\n <Typography color=\"text.lighter\" style={{ fontSize: 10 }}>\n Scale:\n </Typography>\n <Typography>{scale * 100}%</Typography>\n </Box>\n <Button\n variant=\"outlined\"\n aria-label=\"zoom-in\"\n size=\"small\"\n color=\"default\"\n icon={<PlusIcon style={{ width: 14, height: 14 }} />}\n onClick={handleZoomIn}\n className=\"bg-white! hover:bg-blue-50!\"\n disabled={scale >= 4}\n p={10}\n />\n </div>\n </div>\n )}\n <div ref={containerRef} className=\"flex-1 overflow-hidden min-h-0\">\n <Document\n options={options}\n file={url}\n onLoadSuccess={onDocumentLoadSuccess}\n onLoadError={onDocumentLoadError}\n loading={\n <div className=\"flex items-center justify-center\" style={{ height: defaultPageHeight }}>\n <div className=\"h-10 w-10 rounded-full border border-2 border-gray-200 animate-spin border-s-transparent\" />\n </div>\n }\n >\n <Virtuoso\n ref={virtuosoRef}\n style={{ height: height || 'calc(100dvh - 190px)', width: '100%', scrollbarGutter: 'stable both-edges' }}\n totalCount={numPages}\n rangeChanged={handleRangeChanged}\n defaultItemHeight={defaultPageHeight}\n itemContent={(index) => (\n <div className=\"mx-auto w-fit mb-4 border border-1 border-gray-100\">\n <Page\n pageNumber={index + 1}\n renderTextLayer={true}\n renderAnnotationLayer={true}\n width={width * scale}\n onLoadSuccess={(page) => {\n if (index === 0) {\n const ratio = page.height / page.width;\n setPageAspectRatio(ratio);\n }\n }}\n loading={\n <div className=\"flex items-center justify-center\" style={{ height: defaultPageHeight }}>\n <div className=\"h-10 w-10 rounded-full border border-2 border-gray-200 animate-spin border-s-transparent\" />\n </div>\n }\n className=\"h-auto w-full transition-[width] duration-[600ms] ease-in-out\"\n />\n </div>\n )}\n />\n </Document>\n </div>\n </div>\n );\n};\n"]}
1
+ {"version":3,"sources":["../src/FileViewer/drivers/PdfDriver/PdfDriver.tsx"],"names":["BASE_DIR","pdfjs","SCROLL_ANIMATION_DURATION","INPUT_DEBOUNCE_DELAY","RESIZE_DEBOUNCE_DELAY","CONTAINER_PADDING","DEFAULT_RATIO_A4","DEFAULT_MIN_SIZE","PdfDriver","__name","url","numPages","setNumPages","useState","pageNumber","setPageNumber","loading","setLoading","error","setError","width","setWidth","height","setHeight","scale","setScale","defaultPageHeight","setDefaultPageHeight","pageAspectRatio","setPageAspectRatio","containerRef","useRef","virtuosoRef","isUserScrollingRef","scrollTimeoutRef","isMountedRef","scrollToPage","useCallback","page","smooth","debouncedScroll","useMemo","debounce","handleZoomIn","prev","handleZoomOut","useEffect","updateSize","observer","options","onDocumentLoadSuccess","onDocumentLoadError","changePage","offset","newPage","previousPage","nextPage","handleRangeChanged","range","visiblePage","jsx","jsxs","Box","Typography","Button","ChevronUpIcon","ChevronDownIcon","MinusIcon","PlusIcon","Document","Virtuoso","index","Page","ratio"],"mappings":"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","file":"PdfDriver-6VLI6SL6.mjs","sourcesContent":["import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport debounce from 'lodash.debounce';\nimport { Document, Page, pdfjs } from 'react-pdf';\nimport 'react-pdf/dist/Page/AnnotationLayer.css';\nimport 'react-pdf/dist/Page/TextLayer.css';\nimport { Virtuoso, VirtuosoHandle } from 'react-virtuoso';\nimport { Box, Button, ChevronDownIcon, ChevronUpIcon, MinusIcon, PlusIcon, Typography } from '../../../Core';\n\nconst BASE_DIR = '/pdfjs';\n\n// Set up the worker - self-hosted configuration (client-side only)\nif (typeof window !== 'undefined' && typeof document !== 'undefined') {\n pdfjs.GlobalWorkerOptions.workerSrc = `${BASE_DIR}/pdf.worker.min.js`;\n}\n\ninterface PdfDriverProps {\n url: string;\n}\nconst SCROLL_ANIMATION_DURATION = 1000;\nconst INPUT_DEBOUNCE_DELAY = 400;\nconst RESIZE_DEBOUNCE_DELAY = 150;\nconst CONTAINER_PADDING = 70;\nconst DEFAULT_RATIO_A4 = 1.414;\nconst DEFAULT_MIN_SIZE = 400;\n\nexport const PdfDriver: React.FC<PdfDriverProps> = ({ url }) => {\n const [numPages, setNumPages] = useState<number>(0);\n const [pageNumber, setPageNumber] = useState<number>(1);\n const [loading, setLoading] = useState<boolean>(true);\n const [error, setError] = useState<string | null>(null);\n const [width, setWidth] = useState<number>(DEFAULT_MIN_SIZE);\n const [height, setHeight] = useState<number>(DEFAULT_MIN_SIZE);\n const [scale, setScale] = useState(1);\n const [defaultPageHeight, setDefaultPageHeight] = useState(DEFAULT_MIN_SIZE);\n const [pageAspectRatio, setPageAspectRatio] = useState(DEFAULT_RATIO_A4);\n\n const containerRef = useRef<HTMLDivElement>(null);\n const virtuosoRef = useRef<VirtuosoHandle>(null);\n const isUserScrollingRef = useRef<boolean>(false);\n const scrollTimeoutRef = useRef<NodeJS.Timeout | null>(null);\n const isMountedRef = useRef(false);\n\n const scrollToPage = useCallback(\n (page: number, smooth = true) => {\n if (page < 1 || page > numPages) return;\n\n isUserScrollingRef.current = true;\n virtuosoRef.current?.scrollToIndex({\n index: page - 1,\n align: 'start',\n behavior: smooth ? 'smooth' : 'auto',\n });\n\n if (scrollTimeoutRef.current) {\n clearTimeout(scrollTimeoutRef.current);\n }\n\n scrollTimeoutRef.current = setTimeout(() => {\n if (isMountedRef.current) isUserScrollingRef.current = false;\n }, SCROLL_ANIMATION_DURATION);\n },\n [numPages]\n );\n\n const debouncedScroll = useMemo(() => {\n return debounce((page: number, smooth = false) => {\n scrollToPage(page, smooth);\n }, INPUT_DEBOUNCE_DELAY);\n }, [scrollToPage]);\n\n const handleZoomIn = useCallback(() => {\n setScale((prev) => Math.min(prev + 0.25, 4));\n }, []);\n\n const handleZoomOut = useCallback(() => {\n setScale((prev) => Math.max(prev - 0.25, 0.25));\n }, []);\n\n useEffect(() => {\n if (!containerRef.current) return;\n const updateSize = debounce(() => {\n if (containerRef.current) {\n setWidth(containerRef.current.offsetWidth - CONTAINER_PADDING);\n setHeight(containerRef.current.clientHeight);\n }\n }, RESIZE_DEBOUNCE_DELAY);\n updateSize();\n const observer = new ResizeObserver(updateSize);\n observer.observe(containerRef.current);\n return () => {\n observer.disconnect();\n updateSize.cancel();\n };\n }, []);\n\n const options = useMemo(\n () => ({\n cMapPacked: true,\n cMapUrl: `${BASE_DIR}/cmaps/`,\n standardFontDataUrl: `${BASE_DIR}/standard_fonts/`,\n wasmUrl: `${BASE_DIR}/wasm/`,\n iccUrl: `${BASE_DIR}/icc/`,\n }),\n []\n );\n\n const onDocumentLoadSuccess = useCallback(({ numPages }: { numPages: number }): void => {\n setNumPages(numPages);\n setLoading(false);\n }, []);\n\n const onDocumentLoadError = useCallback((error: Error): void => {\n setError(`Failed to load PDF: ${error.message}`);\n setLoading(false);\n }, []);\n\n const changePage = useCallback(\n (offset: number): void => {\n const newPage = pageNumber + offset;\n setPageNumber(newPage);\n scrollToPage(newPage);\n },\n [pageNumber, scrollToPage]\n );\n\n const previousPage = useCallback((): void => {\n changePage(-1);\n }, [changePage]);\n\n const nextPage = useCallback((): void => {\n changePage(1);\n }, [changePage]);\n\n const handleRangeChanged = useCallback(\n (range: { startIndex: number; endIndex: number }) => {\n if (isUserScrollingRef.current) {\n return;\n }\n const visiblePage = range.startIndex + 1;\n if (visiblePage !== pageNumber) {\n setPageNumber(visiblePage);\n }\n },\n [pageNumber]\n );\n\n useEffect(() => {\n isMountedRef.current = true;\n return () => {\n isMountedRef.current = false;\n debouncedScroll.cancel();\n if (scrollTimeoutRef.current) {\n clearTimeout(scrollTimeoutRef.current);\n }\n };\n }, [debouncedScroll]);\n\n useEffect(() => {\n setDefaultPageHeight(width * scale * pageAspectRatio);\n }, [width, scale, pageAspectRatio]);\n\n if (error) {\n return (\n <div className=\"flex items-center justify-center h-full w-full px-8.5\">\n <div className=\"text-red-500 text-center\">\n <p>{error}</p>\n </div>\n </div>\n );\n }\n\n return (\n <div className=\"h-full w-full flex flex-col overflow-hidden pb-5\">\n {loading && (\n <div className=\"flex items-center justify-center h-full px-8.5\">\n <div className=\"text-gray-500\">Loading PDF...</div>\n </div>\n )}\n {numPages > 0 && (\n <div className=\"flex items-center justify-center md:justify-between flex-wrap gap-3 px-8.5 py-3\">\n <Box py={4} px={8} className=\"flex items-center justify-start gap-1 rounded-[5px]!\">\n <Typography color=\"text.lighter\" style={{ fontSize: 10 }}>\n Page:\n </Typography>\n <span className=\"flex items-center gap-2 text-[12px]\">\n <input\n type=\"number\"\n min={1}\n max={numPages}\n value={pageNumber}\n onChange={(e) => {\n const page = parseInt(e.target.value, 10);\n if (page >= 1 && page <= numPages) {\n setPageNumber(page);\n debouncedScroll(page, false);\n }\n }}\n className=\"w-15 px-1 py-1 text-end text-[12px]\"\n />\n / {numPages}\n </span>\n <div className=\"flex flex-col gap-0.25 pl-1\">\n <Button\n variant=\"empty\"\n aria-label=\"previous page\"\n color=\"secondary\"\n size=\"small\"\n type=\"button\"\n disabled={pageNumber <= 1}\n onClick={previousPage}\n icon={<ChevronUpIcon style={{ width: 8, height: 8 }} />}\n />\n <Button\n variant=\"empty\"\n aria-label=\"next page\"\n color=\"secondary\"\n size=\"small\"\n type=\"button\"\n disabled={pageNumber >= numPages}\n onClick={nextPage}\n icon={<ChevronDownIcon style={{ width: 8, height: 8 }} />}\n />\n </div>\n </Box>\n <div className=\"flex items-center justify-center gap-3\">\n <Button\n variant=\"outlined\"\n aria-label=\"zoom-out\"\n color=\"default\"\n size=\"small\"\n icon={<MinusIcon style={{ width: 20, height: 20 }} />}\n onClick={handleZoomOut}\n className=\"bg-white! hover:bg-blue-50!\"\n disabled={scale <= 0.25}\n p={7}\n />\n <Box py={8} px={8} className=\"flex items-center justify-between gap-1.5 min-w-21 rounded-[5px]!\">\n <Typography color=\"text.lighter\" style={{ fontSize: 10 }}>\n Scale:\n </Typography>\n <Typography>{scale * 100}%</Typography>\n </Box>\n <Button\n variant=\"outlined\"\n aria-label=\"zoom-in\"\n size=\"small\"\n color=\"default\"\n icon={<PlusIcon style={{ width: 14, height: 14 }} />}\n onClick={handleZoomIn}\n className=\"bg-white! hover:bg-blue-50!\"\n disabled={scale >= 4}\n p={10}\n />\n </div>\n </div>\n )}\n <div ref={containerRef} className=\"flex-1 overflow-hidden min-h-0\">\n <Document\n options={options}\n file={url}\n onLoadSuccess={onDocumentLoadSuccess}\n onLoadError={onDocumentLoadError}\n loading={\n <div className=\"flex items-center justify-center\" style={{ height: defaultPageHeight }}>\n <div className=\"h-10 w-10 rounded-full border border-2 border-gray-200 animate-spin border-s-transparent\" />\n </div>\n }\n >\n <Virtuoso\n ref={virtuosoRef}\n style={{ height: height || 'calc(100dvh - 190px)', width: '100%', scrollbarGutter: 'stable both-edges' }}\n totalCount={numPages}\n rangeChanged={handleRangeChanged}\n defaultItemHeight={defaultPageHeight}\n itemContent={(index) => (\n <div className=\"mx-auto w-fit mb-4 border border-1 border-gray-100\">\n <Page\n pageNumber={index + 1}\n renderTextLayer={true}\n renderAnnotationLayer={true}\n width={width * scale}\n onLoadSuccess={(page) => {\n if (index === 0) {\n const ratio = page.height / page.width;\n setPageAspectRatio(ratio);\n }\n }}\n loading={\n <div className=\"flex items-center justify-center\" style={{ height: defaultPageHeight }}>\n <div className=\"h-10 w-10 rounded-full border border-2 border-gray-200 animate-spin border-s-transparent\" />\n </div>\n }\n className=\"h-auto w-full transition-[width] duration-[600ms] ease-in-out\"\n />\n </div>\n )}\n />\n </Document>\n </div>\n </div>\n );\n};\n"]}
@@ -1,2 +1,2 @@
1
- 'use strict';var chunkM2BD4MK3_js=require('./chunk-M2BD4MK3.js'),react=require('react'),M=require('lodash.debounce'),reactPdf=require('react-pdf');require('react-pdf/dist/Page/AnnotationLayer.css'),require('react-pdf/dist/Page/TextLayer.css');var reactVirtuoso=require('react-virtuoso'),jsxRuntime=require('react/jsx-runtime');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var M__default=/*#__PURE__*/_interopDefault(M);var f="/pdfjs";typeof window<"u"&&typeof document<"u"&&(reactPdf.pdfjs.GlobalWorkerOptions.workerSrc=`${f}/pdf.worker.min.js`);var ae=1e3,ie=400,le=150,ce=70,de=1.414,I=400,Ne=chunkM2BD4MK3_js.a(({url:O})=>{let[s,k]=react.useState(0),[i,b]=react.useState(1),[H,T]=react.useState(true),[E,B]=react.useState(null),[v,F]=react.useState(I),[$,Z]=react.useState(I),[l,R]=react.useState(1),[x,G]=react.useState(I),[C,V]=react.useState(de),c=react.useRef(null),S=react.useRef(null),y=react.useRef(false),d=react.useRef(null),N=react.useRef(false),p=react.useCallback((e,r=true)=>{e<1||e>s||(y.current=true,S.current?.scrollToIndex({index:e-1,align:"start",behavior:r?"smooth":"auto"}),d.current&&clearTimeout(d.current),d.current=setTimeout(()=>{N.current&&(y.current=false);},ae));},[s]),w=react.useMemo(()=>M__default.default((e,r=false)=>{p(e,r);},ie),[p]),W=react.useCallback(()=>{R(e=>Math.min(e+.25,4));},[]),Y=react.useCallback(()=>{R(e=>Math.max(e-.25,.25));},[]);react.useEffect(()=>{if(!c.current)return;let e=M__default.default(()=>{c.current&&(F(c.current.offsetWidth-ce),Z(c.current.clientHeight));},le);e();let r=new ResizeObserver(e);return r.observe(c.current),()=>{r.disconnect(),e.cancel();}},[]);let J=react.useMemo(()=>({cMapPacked:true,cMapUrl:`${f}/cmaps/`,standardFontDataUrl:`${f}/standard_fonts/`,wasmUrl:`${f}/wasm/`,iccUrl:`${f}/icc/`}),[]),q=react.useCallback(({numPages:e})=>{k(e),T(false);},[]),K=react.useCallback(e=>{B(`Failed to load PDF: ${e.message}`),T(false);},[]),g=react.useCallback(e=>{let r=i+e;b(r),p(r);},[i,p]),Q=react.useCallback(()=>{g(-1);},[g]),X=react.useCallback(()=>{g(1);},[g]),ee=react.useCallback(e=>{if(y.current)return;let r=e.startIndex+1;r!==i&&b(r);},[i]);return react.useEffect(()=>(N.current=true,()=>{N.current=false,w.cancel(),d.current&&clearTimeout(d.current);}),[w]),react.useEffect(()=>{G(v*l*C);},[v,l,C]),E?jsxRuntime.jsx("div",{className:"flex items-center justify-center h-full w-full px-8.5",children:jsxRuntime.jsx("div",{className:"text-red-500 text-center",children:jsxRuntime.jsx("p",{children:E})})}):jsxRuntime.jsxs("div",{className:"h-full w-full flex flex-col overflow-hidden pb-5",children:[H&&jsxRuntime.jsx("div",{className:"flex items-center justify-center h-full px-8.5",children:jsxRuntime.jsx("div",{className:"text-gray-500",children:"Loading PDF..."})}),s>0&&jsxRuntime.jsxs("div",{className:"flex items-center justify-center md:justify-between flex-wrap gap-3 px-8.5 py-3",children:[jsxRuntime.jsxs(chunkM2BD4MK3_js.pb,{py:4,px:8,className:"flex items-center justify-start gap-1 rounded-[5px]!",children:[jsxRuntime.jsx(chunkM2BD4MK3_js.Ya,{color:"text.lighter",style:{fontSize:10},children:"Page:"}),jsxRuntime.jsxs("span",{className:"flex items-center gap-2 text-[12px]",children:[jsxRuntime.jsx("input",{type:"number",min:1,max:s,value:i,onChange:e=>{let r=parseInt(e.target.value,10);r>=1&&r<=s&&(b(r),w(r,false));},className:"w-15 px-1 py-1 text-end text-[12px]"}),"/ ",s]}),jsxRuntime.jsxs("div",{className:"flex flex-col gap-0.25 pl-1",children:[jsxRuntime.jsx(chunkM2BD4MK3_js.z,{variant:"empty","aria-label":"previous page",color:"secondary",size:"small",type:"button",disabled:i<=1,onClick:Q,icon:jsxRuntime.jsx(chunkM2BD4MK3_js.la,{style:{width:8,height:8}})}),jsxRuntime.jsx(chunkM2BD4MK3_js.z,{variant:"empty","aria-label":"next page",color:"secondary",size:"small",type:"button",disabled:i>=s,onClick:X,icon:jsxRuntime.jsx(chunkM2BD4MK3_js.ka,{style:{width:8,height:8}})})]})]}),jsxRuntime.jsxs("div",{className:"flex items-center justify-center gap-3",children:[jsxRuntime.jsx(chunkM2BD4MK3_js.z,{variant:"outlined","aria-label":"zoom-out",color:"default",size:"small",icon:jsxRuntime.jsx(chunkM2BD4MK3_js.Pa,{style:{width:20,height:20}}),onClick:Y,className:"bg-white! hover:bg-blue-50!",disabled:l<=.25,p:7}),jsxRuntime.jsxs(chunkM2BD4MK3_js.pb,{py:8,px:8,className:"flex items-center justify-between gap-1.5 min-w-21 rounded-[5px]!",children:[jsxRuntime.jsx(chunkM2BD4MK3_js.Ya,{color:"text.lighter",style:{fontSize:10},children:"Scale:"}),jsxRuntime.jsxs(chunkM2BD4MK3_js.Ya,{children:[l*100,"%"]})]}),jsxRuntime.jsx(chunkM2BD4MK3_js.z,{variant:"outlined","aria-label":"zoom-in",size:"small",color:"default",icon:jsxRuntime.jsx(chunkM2BD4MK3_js.ma,{style:{width:14,height:14}}),onClick:W,className:"bg-white! hover:bg-blue-50!",disabled:l>=4,p:10})]})]}),jsxRuntime.jsx("div",{ref:c,className:"flex-1 overflow-hidden min-h-0",children:jsxRuntime.jsx(reactPdf.Document,{options:J,file:O,onLoadSuccess:q,onLoadError:K,loading:jsxRuntime.jsx("div",{className:"flex items-center justify-center",style:{height:x},children:jsxRuntime.jsx("div",{className:"h-10 w-10 rounded-full border border-2 border-gray-200 animate-spin border-s-transparent"})}),children:jsxRuntime.jsx(reactVirtuoso.Virtuoso,{ref:S,style:{height:$||"calc(100dvh - 190px)",width:"100%",scrollbarGutter:"stable both-edges"},totalCount:s,rangeChanged:ee,defaultItemHeight:x,itemContent:e=>jsxRuntime.jsx("div",{className:"mx-auto w-fit mb-4 border border-1 border-gray-100",children:jsxRuntime.jsx(reactPdf.Page,{pageNumber:e+1,renderTextLayer:true,renderAnnotationLayer:true,width:v*l,onLoadSuccess:r=>{if(e===0){let te=r.height/r.width;V(te);}},loading:jsxRuntime.jsx("div",{className:"flex items-center justify-center",style:{height:x},children:jsxRuntime.jsx("div",{className:"h-10 w-10 rounded-full border border-2 border-gray-200 animate-spin border-s-transparent"})}),className:"h-auto w-full transition-[width] duration-[600ms] ease-in-out"})})})})})]})},"PdfDriver");exports.PdfDriver=Ne;//# sourceMappingURL=PdfDriver-NQYULP2A.js.map
2
- //# sourceMappingURL=PdfDriver-NQYULP2A.js.map
1
+ 'use strict';var chunkWHXTC5KK_js=require('./chunk-WHXTC5KK.js'),react=require('react'),M=require('lodash.debounce'),reactPdf=require('react-pdf');require('react-pdf/dist/Page/AnnotationLayer.css'),require('react-pdf/dist/Page/TextLayer.css');var reactVirtuoso=require('react-virtuoso'),jsxRuntime=require('react/jsx-runtime');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var M__default=/*#__PURE__*/_interopDefault(M);var f="/pdfjs";typeof window<"u"&&typeof document<"u"&&(reactPdf.pdfjs.GlobalWorkerOptions.workerSrc=`${f}/pdf.worker.min.js`);var ae=1e3,ie=400,le=150,ce=70,de=1.414,I=400,Ne=chunkWHXTC5KK_js.a(({url:O})=>{let[s,k]=react.useState(0),[i,b]=react.useState(1),[H,T]=react.useState(true),[E,B]=react.useState(null),[v,F]=react.useState(I),[$,Z]=react.useState(I),[l,R]=react.useState(1),[x,G]=react.useState(I),[C,V]=react.useState(de),c=react.useRef(null),S=react.useRef(null),y=react.useRef(false),d=react.useRef(null),N=react.useRef(false),p=react.useCallback((e,r=true)=>{e<1||e>s||(y.current=true,S.current?.scrollToIndex({index:e-1,align:"start",behavior:r?"smooth":"auto"}),d.current&&clearTimeout(d.current),d.current=setTimeout(()=>{N.current&&(y.current=false);},ae));},[s]),w=react.useMemo(()=>M__default.default((e,r=false)=>{p(e,r);},ie),[p]),W=react.useCallback(()=>{R(e=>Math.min(e+.25,4));},[]),Y=react.useCallback(()=>{R(e=>Math.max(e-.25,.25));},[]);react.useEffect(()=>{if(!c.current)return;let e=M__default.default(()=>{c.current&&(F(c.current.offsetWidth-ce),Z(c.current.clientHeight));},le);e();let r=new ResizeObserver(e);return r.observe(c.current),()=>{r.disconnect(),e.cancel();}},[]);let J=react.useMemo(()=>({cMapPacked:true,cMapUrl:`${f}/cmaps/`,standardFontDataUrl:`${f}/standard_fonts/`,wasmUrl:`${f}/wasm/`,iccUrl:`${f}/icc/`}),[]),q=react.useCallback(({numPages:e})=>{k(e),T(false);},[]),K=react.useCallback(e=>{B(`Failed to load PDF: ${e.message}`),T(false);},[]),g=react.useCallback(e=>{let r=i+e;b(r),p(r);},[i,p]),Q=react.useCallback(()=>{g(-1);},[g]),X=react.useCallback(()=>{g(1);},[g]),ee=react.useCallback(e=>{if(y.current)return;let r=e.startIndex+1;r!==i&&b(r);},[i]);return react.useEffect(()=>(N.current=true,()=>{N.current=false,w.cancel(),d.current&&clearTimeout(d.current);}),[w]),react.useEffect(()=>{G(v*l*C);},[v,l,C]),E?jsxRuntime.jsx("div",{className:"flex items-center justify-center h-full w-full px-8.5",children:jsxRuntime.jsx("div",{className:"text-red-500 text-center",children:jsxRuntime.jsx("p",{children:E})})}):jsxRuntime.jsxs("div",{className:"h-full w-full flex flex-col overflow-hidden pb-5",children:[H&&jsxRuntime.jsx("div",{className:"flex items-center justify-center h-full px-8.5",children:jsxRuntime.jsx("div",{className:"text-gray-500",children:"Loading PDF..."})}),s>0&&jsxRuntime.jsxs("div",{className:"flex items-center justify-center md:justify-between flex-wrap gap-3 px-8.5 py-3",children:[jsxRuntime.jsxs(chunkWHXTC5KK_js.pb,{py:4,px:8,className:"flex items-center justify-start gap-1 rounded-[5px]!",children:[jsxRuntime.jsx(chunkWHXTC5KK_js.Ya,{color:"text.lighter",style:{fontSize:10},children:"Page:"}),jsxRuntime.jsxs("span",{className:"flex items-center gap-2 text-[12px]",children:[jsxRuntime.jsx("input",{type:"number",min:1,max:s,value:i,onChange:e=>{let r=parseInt(e.target.value,10);r>=1&&r<=s&&(b(r),w(r,false));},className:"w-15 px-1 py-1 text-end text-[12px]"}),"/ ",s]}),jsxRuntime.jsxs("div",{className:"flex flex-col gap-0.25 pl-1",children:[jsxRuntime.jsx(chunkWHXTC5KK_js.z,{variant:"empty","aria-label":"previous page",color:"secondary",size:"small",type:"button",disabled:i<=1,onClick:Q,icon:jsxRuntime.jsx(chunkWHXTC5KK_js.la,{style:{width:8,height:8}})}),jsxRuntime.jsx(chunkWHXTC5KK_js.z,{variant:"empty","aria-label":"next page",color:"secondary",size:"small",type:"button",disabled:i>=s,onClick:X,icon:jsxRuntime.jsx(chunkWHXTC5KK_js.ka,{style:{width:8,height:8}})})]})]}),jsxRuntime.jsxs("div",{className:"flex items-center justify-center gap-3",children:[jsxRuntime.jsx(chunkWHXTC5KK_js.z,{variant:"outlined","aria-label":"zoom-out",color:"default",size:"small",icon:jsxRuntime.jsx(chunkWHXTC5KK_js.Pa,{style:{width:20,height:20}}),onClick:Y,className:"bg-white! hover:bg-blue-50!",disabled:l<=.25,p:7}),jsxRuntime.jsxs(chunkWHXTC5KK_js.pb,{py:8,px:8,className:"flex items-center justify-between gap-1.5 min-w-21 rounded-[5px]!",children:[jsxRuntime.jsx(chunkWHXTC5KK_js.Ya,{color:"text.lighter",style:{fontSize:10},children:"Scale:"}),jsxRuntime.jsxs(chunkWHXTC5KK_js.Ya,{children:[l*100,"%"]})]}),jsxRuntime.jsx(chunkWHXTC5KK_js.z,{variant:"outlined","aria-label":"zoom-in",size:"small",color:"default",icon:jsxRuntime.jsx(chunkWHXTC5KK_js.ma,{style:{width:14,height:14}}),onClick:W,className:"bg-white! hover:bg-blue-50!",disabled:l>=4,p:10})]})]}),jsxRuntime.jsx("div",{ref:c,className:"flex-1 overflow-hidden min-h-0",children:jsxRuntime.jsx(reactPdf.Document,{options:J,file:O,onLoadSuccess:q,onLoadError:K,loading:jsxRuntime.jsx("div",{className:"flex items-center justify-center",style:{height:x},children:jsxRuntime.jsx("div",{className:"h-10 w-10 rounded-full border border-2 border-gray-200 animate-spin border-s-transparent"})}),children:jsxRuntime.jsx(reactVirtuoso.Virtuoso,{ref:S,style:{height:$||"calc(100dvh - 190px)",width:"100%",scrollbarGutter:"stable both-edges"},totalCount:s,rangeChanged:ee,defaultItemHeight:x,itemContent:e=>jsxRuntime.jsx("div",{className:"mx-auto w-fit mb-4 border border-1 border-gray-100",children:jsxRuntime.jsx(reactPdf.Page,{pageNumber:e+1,renderTextLayer:true,renderAnnotationLayer:true,width:v*l,onLoadSuccess:r=>{if(e===0){let te=r.height/r.width;V(te);}},loading:jsxRuntime.jsx("div",{className:"flex items-center justify-center",style:{height:x},children:jsxRuntime.jsx("div",{className:"h-10 w-10 rounded-full border border-2 border-gray-200 animate-spin border-s-transparent"})}),className:"h-auto w-full transition-[width] duration-[600ms] ease-in-out"})})})})})]})},"PdfDriver");exports.PdfDriver=Ne;//# sourceMappingURL=PdfDriver-V6UBIXKA.js.map
2
+ //# sourceMappingURL=PdfDriver-V6UBIXKA.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/FileViewer/drivers/PdfDriver/PdfDriver.tsx"],"names":["BASE_DIR","pdfjs","SCROLL_ANIMATION_DURATION","INPUT_DEBOUNCE_DELAY","RESIZE_DEBOUNCE_DELAY","CONTAINER_PADDING","DEFAULT_RATIO_A4","DEFAULT_MIN_SIZE","PdfDriver","__name","url","numPages","setNumPages","useState","pageNumber","setPageNumber","loading","setLoading","error","setError","width","setWidth","height","setHeight","scale","setScale","defaultPageHeight","setDefaultPageHeight","pageAspectRatio","setPageAspectRatio","containerRef","useRef","virtuosoRef","isUserScrollingRef","scrollTimeoutRef","isMountedRef","scrollToPage","useCallback","page","smooth","debouncedScroll","useMemo","debounce","handleZoomIn","prev","handleZoomOut","useEffect","updateSize","observer","options","onDocumentLoadSuccess","onDocumentLoadError","changePage","offset","newPage","previousPage","nextPage","handleRangeChanged","range","visiblePage","jsx","jsxs","Box","Typography","Button","ChevronUpIcon","ChevronDownIcon","MinusIcon","PlusIcon","Document","Virtuoso","index","Page","ratio"],"mappings":"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","file":"PdfDriver-NQYULP2A.js","sourcesContent":["import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport debounce from 'lodash.debounce';\nimport { Document, Page, pdfjs } from 'react-pdf';\nimport 'react-pdf/dist/Page/AnnotationLayer.css';\nimport 'react-pdf/dist/Page/TextLayer.css';\nimport { Virtuoso, VirtuosoHandle } from 'react-virtuoso';\nimport { Box, Button, ChevronDownIcon, ChevronUpIcon, MinusIcon, PlusIcon, Typography } from '../../../Core';\n\nconst BASE_DIR = '/pdfjs';\n\n// Set up the worker - self-hosted configuration (client-side only)\nif (typeof window !== 'undefined' && typeof document !== 'undefined') {\n pdfjs.GlobalWorkerOptions.workerSrc = `${BASE_DIR}/pdf.worker.min.js`;\n}\n\ninterface PdfDriverProps {\n url: string;\n}\nconst SCROLL_ANIMATION_DURATION = 1000;\nconst INPUT_DEBOUNCE_DELAY = 400;\nconst RESIZE_DEBOUNCE_DELAY = 150;\nconst CONTAINER_PADDING = 70;\nconst DEFAULT_RATIO_A4 = 1.414;\nconst DEFAULT_MIN_SIZE = 400;\n\nexport const PdfDriver: React.FC<PdfDriverProps> = ({ url }) => {\n const [numPages, setNumPages] = useState<number>(0);\n const [pageNumber, setPageNumber] = useState<number>(1);\n const [loading, setLoading] = useState<boolean>(true);\n const [error, setError] = useState<string | null>(null);\n const [width, setWidth] = useState<number>(DEFAULT_MIN_SIZE);\n const [height, setHeight] = useState<number>(DEFAULT_MIN_SIZE);\n const [scale, setScale] = useState(1);\n const [defaultPageHeight, setDefaultPageHeight] = useState(DEFAULT_MIN_SIZE);\n const [pageAspectRatio, setPageAspectRatio] = useState(DEFAULT_RATIO_A4);\n\n const containerRef = useRef<HTMLDivElement>(null);\n const virtuosoRef = useRef<VirtuosoHandle>(null);\n const isUserScrollingRef = useRef<boolean>(false);\n const scrollTimeoutRef = useRef<NodeJS.Timeout | null>(null);\n const isMountedRef = useRef(false);\n\n const scrollToPage = useCallback(\n (page: number, smooth = true) => {\n if (page < 1 || page > numPages) return;\n\n isUserScrollingRef.current = true;\n virtuosoRef.current?.scrollToIndex({\n index: page - 1,\n align: 'start',\n behavior: smooth ? 'smooth' : 'auto',\n });\n\n if (scrollTimeoutRef.current) {\n clearTimeout(scrollTimeoutRef.current);\n }\n\n scrollTimeoutRef.current = setTimeout(() => {\n if (isMountedRef.current) isUserScrollingRef.current = false;\n }, SCROLL_ANIMATION_DURATION);\n },\n [numPages]\n );\n\n const debouncedScroll = useMemo(() => {\n return debounce((page: number, smooth = false) => {\n scrollToPage(page, smooth);\n }, INPUT_DEBOUNCE_DELAY);\n }, [scrollToPage]);\n\n const handleZoomIn = useCallback(() => {\n setScale((prev) => Math.min(prev + 0.25, 4));\n }, []);\n\n const handleZoomOut = useCallback(() => {\n setScale((prev) => Math.max(prev - 0.25, 0.25));\n }, []);\n\n useEffect(() => {\n if (!containerRef.current) return;\n const updateSize = debounce(() => {\n if (containerRef.current) {\n setWidth(containerRef.current.offsetWidth - CONTAINER_PADDING);\n setHeight(containerRef.current.clientHeight);\n }\n }, RESIZE_DEBOUNCE_DELAY);\n updateSize();\n const observer = new ResizeObserver(updateSize);\n observer.observe(containerRef.current);\n return () => {\n observer.disconnect();\n updateSize.cancel();\n };\n }, []);\n\n const options = useMemo(\n () => ({\n cMapPacked: true,\n cMapUrl: `${BASE_DIR}/cmaps/`,\n standardFontDataUrl: `${BASE_DIR}/standard_fonts/`,\n wasmUrl: `${BASE_DIR}/wasm/`,\n iccUrl: `${BASE_DIR}/icc/`,\n }),\n []\n );\n\n const onDocumentLoadSuccess = useCallback(({ numPages }: { numPages: number }): void => {\n setNumPages(numPages);\n setLoading(false);\n }, []);\n\n const onDocumentLoadError = useCallback((error: Error): void => {\n setError(`Failed to load PDF: ${error.message}`);\n setLoading(false);\n }, []);\n\n const changePage = useCallback(\n (offset: number): void => {\n const newPage = pageNumber + offset;\n setPageNumber(newPage);\n scrollToPage(newPage);\n },\n [pageNumber, scrollToPage]\n );\n\n const previousPage = useCallback((): void => {\n changePage(-1);\n }, [changePage]);\n\n const nextPage = useCallback((): void => {\n changePage(1);\n }, [changePage]);\n\n const handleRangeChanged = useCallback(\n (range: { startIndex: number; endIndex: number }) => {\n if (isUserScrollingRef.current) {\n return;\n }\n const visiblePage = range.startIndex + 1;\n if (visiblePage !== pageNumber) {\n setPageNumber(visiblePage);\n }\n },\n [pageNumber]\n );\n\n useEffect(() => {\n isMountedRef.current = true;\n return () => {\n isMountedRef.current = false;\n debouncedScroll.cancel();\n if (scrollTimeoutRef.current) {\n clearTimeout(scrollTimeoutRef.current);\n }\n };\n }, [debouncedScroll]);\n\n useEffect(() => {\n setDefaultPageHeight(width * scale * pageAspectRatio);\n }, [width, scale, pageAspectRatio]);\n\n if (error) {\n return (\n <div className=\"flex items-center justify-center h-full w-full px-8.5\">\n <div className=\"text-red-500 text-center\">\n <p>{error}</p>\n </div>\n </div>\n );\n }\n\n return (\n <div className=\"h-full w-full flex flex-col overflow-hidden pb-5\">\n {loading && (\n <div className=\"flex items-center justify-center h-full px-8.5\">\n <div className=\"text-gray-500\">Loading PDF...</div>\n </div>\n )}\n {numPages > 0 && (\n <div className=\"flex items-center justify-center md:justify-between flex-wrap gap-3 px-8.5 py-3\">\n <Box py={4} px={8} className=\"flex items-center justify-start gap-1 rounded-[5px]!\">\n <Typography color=\"text.lighter\" style={{ fontSize: 10 }}>\n Page:\n </Typography>\n <span className=\"flex items-center gap-2 text-[12px]\">\n <input\n type=\"number\"\n min={1}\n max={numPages}\n value={pageNumber}\n onChange={(e) => {\n const page = parseInt(e.target.value, 10);\n if (page >= 1 && page <= numPages) {\n setPageNumber(page);\n debouncedScroll(page, false);\n }\n }}\n className=\"w-15 px-1 py-1 text-end text-[12px]\"\n />\n / {numPages}\n </span>\n <div className=\"flex flex-col gap-0.25 pl-1\">\n <Button\n variant=\"empty\"\n aria-label=\"previous page\"\n color=\"secondary\"\n size=\"small\"\n type=\"button\"\n disabled={pageNumber <= 1}\n onClick={previousPage}\n icon={<ChevronUpIcon style={{ width: 8, height: 8 }} />}\n />\n <Button\n variant=\"empty\"\n aria-label=\"next page\"\n color=\"secondary\"\n size=\"small\"\n type=\"button\"\n disabled={pageNumber >= numPages}\n onClick={nextPage}\n icon={<ChevronDownIcon style={{ width: 8, height: 8 }} />}\n />\n </div>\n </Box>\n <div className=\"flex items-center justify-center gap-3\">\n <Button\n variant=\"outlined\"\n aria-label=\"zoom-out\"\n color=\"default\"\n size=\"small\"\n icon={<MinusIcon style={{ width: 20, height: 20 }} />}\n onClick={handleZoomOut}\n className=\"bg-white! hover:bg-blue-50!\"\n disabled={scale <= 0.25}\n p={7}\n />\n <Box py={8} px={8} className=\"flex items-center justify-between gap-1.5 min-w-21 rounded-[5px]!\">\n <Typography color=\"text.lighter\" style={{ fontSize: 10 }}>\n Scale:\n </Typography>\n <Typography>{scale * 100}%</Typography>\n </Box>\n <Button\n variant=\"outlined\"\n aria-label=\"zoom-in\"\n size=\"small\"\n color=\"default\"\n icon={<PlusIcon style={{ width: 14, height: 14 }} />}\n onClick={handleZoomIn}\n className=\"bg-white! hover:bg-blue-50!\"\n disabled={scale >= 4}\n p={10}\n />\n </div>\n </div>\n )}\n <div ref={containerRef} className=\"flex-1 overflow-hidden min-h-0\">\n <Document\n options={options}\n file={url}\n onLoadSuccess={onDocumentLoadSuccess}\n onLoadError={onDocumentLoadError}\n loading={\n <div className=\"flex items-center justify-center\" style={{ height: defaultPageHeight }}>\n <div className=\"h-10 w-10 rounded-full border border-2 border-gray-200 animate-spin border-s-transparent\" />\n </div>\n }\n >\n <Virtuoso\n ref={virtuosoRef}\n style={{ height: height || 'calc(100dvh - 190px)', width: '100%', scrollbarGutter: 'stable both-edges' }}\n totalCount={numPages}\n rangeChanged={handleRangeChanged}\n defaultItemHeight={defaultPageHeight}\n itemContent={(index) => (\n <div className=\"mx-auto w-fit mb-4 border border-1 border-gray-100\">\n <Page\n pageNumber={index + 1}\n renderTextLayer={true}\n renderAnnotationLayer={true}\n width={width * scale}\n onLoadSuccess={(page) => {\n if (index === 0) {\n const ratio = page.height / page.width;\n setPageAspectRatio(ratio);\n }\n }}\n loading={\n <div className=\"flex items-center justify-center\" style={{ height: defaultPageHeight }}>\n <div className=\"h-10 w-10 rounded-full border border-2 border-gray-200 animate-spin border-s-transparent\" />\n </div>\n }\n className=\"h-auto w-full transition-[width] duration-[600ms] ease-in-out\"\n />\n </div>\n )}\n />\n </Document>\n </div>\n </div>\n );\n};\n"]}
1
+ {"version":3,"sources":["../src/FileViewer/drivers/PdfDriver/PdfDriver.tsx"],"names":["BASE_DIR","pdfjs","SCROLL_ANIMATION_DURATION","INPUT_DEBOUNCE_DELAY","RESIZE_DEBOUNCE_DELAY","CONTAINER_PADDING","DEFAULT_RATIO_A4","DEFAULT_MIN_SIZE","PdfDriver","__name","url","numPages","setNumPages","useState","pageNumber","setPageNumber","loading","setLoading","error","setError","width","setWidth","height","setHeight","scale","setScale","defaultPageHeight","setDefaultPageHeight","pageAspectRatio","setPageAspectRatio","containerRef","useRef","virtuosoRef","isUserScrollingRef","scrollTimeoutRef","isMountedRef","scrollToPage","useCallback","page","smooth","debouncedScroll","useMemo","debounce","handleZoomIn","prev","handleZoomOut","useEffect","updateSize","observer","options","onDocumentLoadSuccess","onDocumentLoadError","changePage","offset","newPage","previousPage","nextPage","handleRangeChanged","range","visiblePage","jsx","jsxs","Box","Typography","Button","ChevronUpIcon","ChevronDownIcon","MinusIcon","PlusIcon","Document","Virtuoso","index","Page","ratio"],"mappings":"ubAQA,IAAMA,CAAAA,CAAW,QAGb,CAAA,OAAO,OAAW,GAAe,EAAA,OAAO,QAAa,CAAA,GAAA,GACvDC,cAAM,CAAA,mBAAA,CAAoB,UAAY,CAAGD,EAAAA,CAAQ,CAMnD,kBAAA,CAAA,CAAA,CAAA,IAAME,EAA4B,CAAA,GAAA,CAC5BC,GAAuB,GACvBC,CAAAA,EAAAA,CAAwB,GACxBC,CAAAA,EAAAA,CAAoB,EACpBC,CAAAA,EAAAA,CAAmB,MACnBC,CAAmB,CAAA,GAAA,CAEZC,EAAsCC,CAAAA,kBAAAA,CAAA,CAAC,CAAE,IAAAC,CAAI,CAAA,GAAM,CAC9D,GAAM,CAACC,CAAAA,CAAUC,CAAW,CAAIC,CAAAA,cAAAA,CAAiB,CAAC,CAAA,CAC5C,CAACC,CAAAA,CAAYC,CAAa,CAAIF,CAAAA,cAAAA,CAAiB,CAAC,CAAA,CAChD,CAACG,CAAAA,CAASC,CAAU,CAAIJ,CAAAA,cAAAA,CAAkB,IAAI,CAAA,CAC9C,CAACK,CAAAA,CAAOC,CAAQ,CAAIN,CAAAA,cAAAA,CAAwB,IAAI,CAAA,CAChD,CAACO,CAAAA,CAAOC,CAAQ,CAAIR,CAAAA,cAAAA,CAAiBN,CAAgB,CAAA,CACrD,CAACe,CAAAA,CAAQC,CAAS,CAAIV,CAAAA,cAAAA,CAAiBN,CAAgB,CAAA,CACvD,CAACiB,CAAAA,CAAOC,CAAQ,CAAIZ,CAAAA,cAAAA,CAAS,CAAC,CAAA,CAC9B,CAACa,CAAAA,CAAmBC,CAAoB,CAAId,CAAAA,cAAAA,CAASN,CAAgB,CAAA,CACrE,CAACqB,CAAAA,CAAiBC,CAAkB,CAAIhB,CAAAA,cAAAA,CAASP,EAAgB,CAAA,CAEjEwB,CAAeC,CAAAA,YAAAA,CAAuB,IAAI,CAC1CC,CAAAA,CAAAA,CAAcD,YAAuB,CAAA,IAAI,CACzCE,CAAAA,CAAAA,CAAqBF,aAAgB,KAAK,CAAA,CAC1CG,CAAmBH,CAAAA,YAAAA,CAA8B,IAAI,CAAA,CACrDI,EAAeJ,YAAO,CAAA,KAAK,CAE3BK,CAAAA,CAAAA,CAAeC,iBACnB,CAAA,CAACC,EAAcC,CAAS,CAAA,IAAA,GAAS,CAC3BD,CAAAA,CAAO,CAAKA,EAAAA,CAAAA,CAAO3B,IAEvBsB,CAAmB,CAAA,OAAA,CAAU,IAC7BD,CAAAA,CAAAA,CAAY,OAAS,EAAA,aAAA,CAAc,CACjC,KAAOM,CAAAA,CAAAA,CAAO,CACd,CAAA,KAAA,CAAO,OACP,CAAA,QAAA,CAAUC,EAAS,QAAW,CAAA,MAChC,CAAC,CAAA,CAEGL,CAAiB,CAAA,OAAA,EACnB,aAAaA,CAAiB,CAAA,OAAO,CAGvCA,CAAAA,CAAAA,CAAiB,OAAU,CAAA,UAAA,CAAW,IAAM,CACtCC,CAAAA,CAAa,OAASF,GAAAA,CAAAA,CAAmB,OAAU,CAAA,KAAA,EACzD,EAAG/B,EAAyB,CAAA,EAC9B,CACA,CAAA,CAACS,CAAQ,CACX,EAEM6B,CAAkBC,CAAAA,aAAAA,CAAQ,IACvBC,kBAAAA,CAAS,CAACJ,CAAAA,CAAcC,EAAS,KAAU,GAAA,CAChDH,CAAaE,CAAAA,CAAAA,CAAMC,CAAM,EAC3B,EAAGpC,EAAoB,CAAA,CACtB,CAACiC,CAAY,CAAC,EAEXO,CAAeN,CAAAA,iBAAAA,CAAY,IAAM,CACrCZ,CAAUmB,CAAAA,CAAAA,EAAS,KAAK,GAAIA,CAAAA,CAAAA,CAAO,GAAM,CAAA,CAAC,CAAC,EAC7C,EAAG,EAAE,CAECC,CAAAA,CAAAA,CAAgBR,iBAAY,CAAA,IAAM,CACtCZ,CAAUmB,CAAAA,CAAAA,EAAS,IAAK,CAAA,GAAA,CAAIA,CAAO,CAAA,GAAA,CAAM,GAAI,CAAC,EAChD,CAAG,CAAA,EAAE,CAAA,CAELE,gBAAU,IAAM,CACd,GAAI,CAAChB,CAAa,CAAA,OAAA,CAAS,OAC3B,IAAMiB,CAAAA,CAAaL,kBAAS,CAAA,IAAM,CAC5BZ,CAAAA,CAAa,UACfT,CAASS,CAAAA,CAAAA,CAAa,OAAQ,CAAA,WAAA,CAAczB,EAAiB,CAAA,CAC7DkB,EAAUO,CAAa,CAAA,OAAA,CAAQ,YAAY,CAAA,EAE/C,CAAG1B,CAAAA,EAAqB,EACxB2C,CAAW,EAAA,CACX,IAAMC,CAAAA,CAAW,IAAI,cAAA,CAAeD,CAAU,CAC9C,CAAA,OAAAC,CAAS,CAAA,OAAA,CAAQlB,CAAa,CAAA,OAAO,EAC9B,IAAM,CACXkB,CAAS,CAAA,UAAA,EACTD,CAAAA,CAAAA,CAAW,SACb,CACF,CAAG,CAAA,EAAE,CAAA,CAEL,IAAME,CAAUR,CAAAA,aAAAA,CACd,KAAO,CACL,UAAY,CAAA,IAAA,CACZ,QAAS,CAAGzC,EAAAA,CAAQ,CACpB,OAAA,CAAA,CAAA,mBAAA,CAAqB,CAAGA,EAAAA,CAAQ,mBAChC,OAAS,CAAA,CAAA,EAAGA,CAAQ,CAAA,MAAA,CAAA,CACpB,MAAQ,CAAA,CAAA,EAAGA,CAAQ,CACrB,KAAA,CAAA,CAAA,CAAA,CACA,EACF,CAEMkD,CAAAA,CAAAA,CAAwBb,kBAAY,CAAC,CAAE,QAAA1B,CAAAA,CAAS,CAAkC,GAAA,CACtFC,EAAYD,CAAQ,CAAA,CACpBM,CAAW,CAAA,KAAK,EAClB,CAAA,CAAG,EAAE,CAAA,CAECkC,CAAsBd,CAAAA,iBAAAA,CAAanB,CAAuB,EAAA,CAC9DC,EAAS,CAAuBD,oBAAAA,EAAAA,CAAAA,CAAM,OAAO,CAAA,CAAE,CAC/CD,CAAAA,CAAAA,CAAW,KAAK,EAClB,CAAA,CAAG,EAAE,CAECmC,CAAAA,CAAAA,CAAaf,kBAChBgB,CAAyB,EAAA,CACxB,IAAMC,CAAAA,CAAUxC,CAAauC,CAAAA,CAAAA,CAC7BtC,EAAcuC,CAAO,CAAA,CACrBlB,CAAakB,CAAAA,CAAO,EACtB,CAAA,CACA,CAACxC,CAAYsB,CAAAA,CAAY,CAC3B,CAAA,CAEMmB,CAAelB,CAAAA,iBAAAA,CAAY,IAAY,CAC3Ce,CAAAA,CAAW,EAAE,EACf,CAAG,CAAA,CAACA,CAAU,CAAC,CAAA,CAETI,CAAWnB,CAAAA,iBAAAA,CAAY,IAAY,CACvCe,EAAW,CAAC,EACd,CAAG,CAAA,CAACA,CAAU,CAAC,EAETK,EAAqBpB,CAAAA,iBAAAA,CACxBqB,CAAoD,EAAA,CACnD,GAAIzB,CAAAA,CAAmB,QACrB,OAEF,IAAM0B,CAAcD,CAAAA,CAAAA,CAAM,UAAa,CAAA,CAAA,CACnCC,IAAgB7C,CAClBC,EAAAA,CAAAA,CAAc4C,CAAW,EAE7B,CACA,CAAA,CAAC7C,CAAU,CACb,CAAA,CAiBA,OAfAgC,eAAU,CAAA,KACRX,EAAa,OAAU,CAAA,IAAA,CAChB,IAAM,CACXA,CAAa,CAAA,OAAA,CAAU,MACvBK,CAAgB,CAAA,MAAA,EACZN,CAAAA,CAAAA,CAAiB,OACnB,EAAA,YAAA,CAAaA,EAAiB,OAAO,EAEzC,CACC,CAAA,CAAA,CAACM,CAAe,CAAC,EAEpBM,eAAU,CAAA,IAAM,CACdnB,CAAAA,CAAqBP,CAAQI,CAAAA,CAAAA,CAAQI,CAAe,EACtD,CAAA,CAAG,CAACR,CAAAA,CAAOI,CAAOI,CAAAA,CAAe,CAAC,CAE9BV,CAAAA,CAAAA,CAEA0C,cAAC,CAAA,KAAA,CAAA,CAAI,SAAU,CAAA,uDAAA,CACb,SAAAA,cAAC,CAAA,KAAA,CAAA,CAAI,SAAU,CAAA,0BAAA,CACb,QAAAA,CAAAA,cAAAA,CAAC,KAAG,QAAA1C,CAAAA,CAAAA,CAAM,CACZ,CAAA,CAAA,CACF,CAKF2C,CAAAA,eAAAA,CAAC,OAAI,SAAU,CAAA,kDAAA,CACZ,QAAA7C,CAAAA,CAAAA,CAAAA,EACC4C,cAAC,CAAA,KAAA,CAAA,CAAI,UAAU,iDACb,CAAA,QAAA,CAAAA,cAAC,CAAA,KAAA,CAAA,CAAI,SAAU,CAAA,eAAA,CAAgB,0BAAc,CAC/C,CAAA,CAAA,CAEDjD,CAAW,CAAA,CAAA,EACVkD,eAAC,CAAA,KAAA,CAAA,CAAI,UAAU,iFACb,CAAA,QAAA,CAAA,CAAAA,eAACC,CAAAA,mBAAAA,CAAA,CAAI,EAAA,CAAI,EAAG,EAAI,CAAA,CAAA,CAAG,SAAU,CAAA,sDAAA,CAC3B,QAAAF,CAAAA,CAAAA,cAAAA,CAACG,oBAAA,CAAW,KAAA,CAAM,cAAe,CAAA,KAAA,CAAO,CAAE,QAAA,CAAU,EAAG,CAAG,CAAA,QAAA,CAAA,OAAA,CAE1D,CACAF,CAAAA,eAAAA,CAAC,MAAK,CAAA,CAAA,SAAA,CAAU,sCACd,QAAAD,CAAAA,CAAAA,cAAAA,CAAC,OACC,CAAA,CAAA,IAAA,CAAK,QACL,CAAA,GAAA,CAAK,EACL,GAAKjD,CAAAA,CAAAA,CACL,KAAOG,CAAAA,CAAAA,CACP,QAAW,CAAA,CAAA,EAAM,CACf,IAAMwB,CAAAA,CAAO,QAAS,CAAA,CAAA,CAAE,MAAO,CAAA,KAAA,CAAO,EAAE,CACpCA,CAAAA,CAAAA,EAAQ,CAAKA,EAAAA,CAAAA,EAAQ3B,CACvBI,GAAAA,CAAAA,CAAcuB,CAAI,CAClBE,CAAAA,CAAAA,CAAgBF,CAAM,CAAA,KAAK,CAE/B,EAAA,CAAA,CACA,UAAU,qCACZ,CAAA,CAAA,CAAE,IACC3B,CAAAA,CAAAA,CAAAA,CACL,CACAkD,CAAAA,eAAAA,CAAC,OAAI,SAAU,CAAA,6BAAA,CACb,QAAAD,CAAAA,CAAAA,cAAAA,CAACI,kBAAA,CAAA,CACC,QAAQ,OACR,CAAA,YAAA,CAAW,eACX,CAAA,KAAA,CAAM,WACN,CAAA,IAAA,CAAK,QACL,IAAK,CAAA,QAAA,CACL,QAAUlD,CAAAA,CAAAA,EAAc,CACxB,CAAA,OAAA,CAASyC,EACT,IAAMK,CAAAA,cAAAA,CAACK,mBAAA,CAAA,CAAc,KAAO,CAAA,CAAE,MAAO,CAAG,CAAA,MAAA,CAAQ,CAAE,CAAA,CAAG,CACvD,CAAA,CAAA,CACAL,eAACI,kBAAA,CAAA,CACC,OAAQ,CAAA,OAAA,CACR,YAAW,CAAA,WAAA,CACX,MAAM,WACN,CAAA,IAAA,CAAK,OACL,CAAA,IAAA,CAAK,QACL,CAAA,QAAA,CAAUlD,GAAcH,CACxB,CAAA,OAAA,CAAS6C,CACT,CAAA,IAAA,CAAMI,cAACM,CAAAA,mBAAAA,CAAA,CAAgB,KAAO,CAAA,CAAE,KAAO,CAAA,CAAA,CAAG,MAAQ,CAAA,CAAE,EAAG,CACzD,CAAA,CAAA,CAAA,CACF,CACF,CAAA,CAAA,CAAA,CACAL,eAAC,CAAA,KAAA,CAAA,CAAI,UAAU,wCACb,CAAA,QAAA,CAAA,CAAAD,cAACI,CAAAA,kBAAAA,CAAA,CACC,OAAA,CAAQ,WACR,YAAW,CAAA,UAAA,CACX,KAAM,CAAA,SAAA,CACN,IAAK,CAAA,OAAA,CACL,KAAMJ,cAACO,CAAAA,mBAAAA,CAAA,CAAU,KAAA,CAAO,CAAE,KAAA,CAAO,GAAI,MAAQ,CAAA,EAAG,CAAG,CAAA,CAAA,CACnD,OAAStB,CAAAA,CAAAA,CACT,UAAU,6BACV,CAAA,QAAA,CAAUrB,CAAS,EAAA,GAAA,CACnB,CAAG,CAAA,CAAA,CACL,EACAqC,eAACC,CAAAA,mBAAAA,CAAA,CAAI,EAAA,CAAI,CAAG,CAAA,EAAA,CAAI,EAAG,SAAU,CAAA,mEAAA,CAC3B,QAAAF,CAAAA,CAAAA,cAAAA,CAACG,mBAAA,CAAA,CAAW,MAAM,cAAe,CAAA,KAAA,CAAO,CAAE,QAAA,CAAU,EAAG,CAAA,CAAG,kBAE1D,CACAF,CAAAA,eAAAA,CAACE,mBAAA,CAAA,CAAY,QAAAvC,CAAAA,CAAAA,CAAAA,CAAQ,IAAI,GAAC,CAAA,CAAA,CAAA,CAAA,CAC5B,CACAoC,CAAAA,cAAAA,CAACI,kBAAA,CAAA,CACC,QAAQ,UACR,CAAA,YAAA,CAAW,SACX,CAAA,IAAA,CAAK,OACL,CAAA,KAAA,CAAM,UACN,IAAMJ,CAAAA,cAAAA,CAACQ,mBAAA,CAAA,CAAS,KAAO,CAAA,CAAE,MAAO,EAAI,CAAA,MAAA,CAAQ,EAAG,CAAA,CAAG,CAClD,CAAA,OAAA,CAASzB,EACT,SAAU,CAAA,6BAAA,CACV,QAAUnB,CAAAA,CAAAA,EAAS,CACnB,CAAA,CAAA,CAAG,GACL,CACF,CAAA,CAAA,CAAA,CAAA,CACF,CAEFoC,CAAAA,cAAAA,CAAC,KAAI,CAAA,CAAA,GAAA,CAAK9B,EAAc,SAAU,CAAA,gCAAA,CAChC,QAAA8B,CAAAA,cAAAA,CAACS,iBAAA,CAAA,CACC,QAASpB,CACT,CAAA,IAAA,CAAMvC,CACN,CAAA,aAAA,CAAewC,CACf,CAAA,WAAA,CAAaC,EACb,OACES,CAAAA,cAAAA,CAAC,KAAI,CAAA,CAAA,SAAA,CAAU,kCAAmC,CAAA,KAAA,CAAO,CAAE,MAAQlC,CAAAA,CAAkB,CACnF,CAAA,QAAA,CAAAkC,cAAC,CAAA,KAAA,CAAA,CAAI,UAAU,0FAA2F,CAAA,CAAA,CAC5G,CAGF,CAAA,QAAA,CAAAA,cAACU,CAAAA,sBAAAA,CAAA,CACC,GAAKtC,CAAAA,CAAAA,CACL,KAAO,CAAA,CAAE,MAAQV,CAAAA,CAAAA,EAAU,uBAAwB,KAAO,CAAA,MAAA,CAAQ,eAAiB,CAAA,mBAAoB,CACvG,CAAA,UAAA,CAAYX,EACZ,YAAc8C,CAAAA,EAAAA,CACd,iBAAmB/B,CAAAA,CAAAA,CACnB,WAAc6C,CAAAA,CAAAA,EACZX,eAAC,KAAI,CAAA,CAAA,SAAA,CAAU,oDACb,CAAA,QAAA,CAAAA,cAACY,CAAAA,aAAAA,CAAA,CACC,UAAYD,CAAAA,CAAAA,CAAQ,CACpB,CAAA,eAAA,CAAiB,IACjB,CAAA,qBAAA,CAAuB,KACvB,KAAOnD,CAAAA,CAAAA,CAAQI,CACf,CAAA,aAAA,CAAgBc,CAAS,EAAA,CACvB,GAAIiC,CAAU,GAAA,CAAA,CAAG,CACf,IAAME,EAAQnC,CAAAA,CAAAA,CAAK,OAASA,CAAK,CAAA,KAAA,CACjCT,CAAmB4C,CAAAA,EAAK,EAC1B,CACF,EACA,OACEb,CAAAA,cAAAA,CAAC,KAAI,CAAA,CAAA,SAAA,CAAU,kCAAmC,CAAA,KAAA,CAAO,CAAE,MAAQlC,CAAAA,CAAkB,CACnF,CAAA,QAAA,CAAAkC,cAAC,CAAA,KAAA,CAAA,CAAI,UAAU,0FAA2F,CAAA,CAAA,CAC5G,CAEF,CAAA,SAAA,CAAU,+DACZ,CAAA,CAAA,CACF,EAEJ,CACF,CAAA,CAAA,CACF,CACF,CAAA,CAAA,CAEJ,CApRmD,CAAA,WAAA","file":"PdfDriver-V6UBIXKA.js","sourcesContent":["import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport debounce from 'lodash.debounce';\nimport { Document, Page, pdfjs } from 'react-pdf';\nimport 'react-pdf/dist/Page/AnnotationLayer.css';\nimport 'react-pdf/dist/Page/TextLayer.css';\nimport { Virtuoso, VirtuosoHandle } from 'react-virtuoso';\nimport { Box, Button, ChevronDownIcon, ChevronUpIcon, MinusIcon, PlusIcon, Typography } from '../../../Core';\n\nconst BASE_DIR = '/pdfjs';\n\n// Set up the worker - self-hosted configuration (client-side only)\nif (typeof window !== 'undefined' && typeof document !== 'undefined') {\n pdfjs.GlobalWorkerOptions.workerSrc = `${BASE_DIR}/pdf.worker.min.js`;\n}\n\ninterface PdfDriverProps {\n url: string;\n}\nconst SCROLL_ANIMATION_DURATION = 1000;\nconst INPUT_DEBOUNCE_DELAY = 400;\nconst RESIZE_DEBOUNCE_DELAY = 150;\nconst CONTAINER_PADDING = 70;\nconst DEFAULT_RATIO_A4 = 1.414;\nconst DEFAULT_MIN_SIZE = 400;\n\nexport const PdfDriver: React.FC<PdfDriverProps> = ({ url }) => {\n const [numPages, setNumPages] = useState<number>(0);\n const [pageNumber, setPageNumber] = useState<number>(1);\n const [loading, setLoading] = useState<boolean>(true);\n const [error, setError] = useState<string | null>(null);\n const [width, setWidth] = useState<number>(DEFAULT_MIN_SIZE);\n const [height, setHeight] = useState<number>(DEFAULT_MIN_SIZE);\n const [scale, setScale] = useState(1);\n const [defaultPageHeight, setDefaultPageHeight] = useState(DEFAULT_MIN_SIZE);\n const [pageAspectRatio, setPageAspectRatio] = useState(DEFAULT_RATIO_A4);\n\n const containerRef = useRef<HTMLDivElement>(null);\n const virtuosoRef = useRef<VirtuosoHandle>(null);\n const isUserScrollingRef = useRef<boolean>(false);\n const scrollTimeoutRef = useRef<NodeJS.Timeout | null>(null);\n const isMountedRef = useRef(false);\n\n const scrollToPage = useCallback(\n (page: number, smooth = true) => {\n if (page < 1 || page > numPages) return;\n\n isUserScrollingRef.current = true;\n virtuosoRef.current?.scrollToIndex({\n index: page - 1,\n align: 'start',\n behavior: smooth ? 'smooth' : 'auto',\n });\n\n if (scrollTimeoutRef.current) {\n clearTimeout(scrollTimeoutRef.current);\n }\n\n scrollTimeoutRef.current = setTimeout(() => {\n if (isMountedRef.current) isUserScrollingRef.current = false;\n }, SCROLL_ANIMATION_DURATION);\n },\n [numPages]\n );\n\n const debouncedScroll = useMemo(() => {\n return debounce((page: number, smooth = false) => {\n scrollToPage(page, smooth);\n }, INPUT_DEBOUNCE_DELAY);\n }, [scrollToPage]);\n\n const handleZoomIn = useCallback(() => {\n setScale((prev) => Math.min(prev + 0.25, 4));\n }, []);\n\n const handleZoomOut = useCallback(() => {\n setScale((prev) => Math.max(prev - 0.25, 0.25));\n }, []);\n\n useEffect(() => {\n if (!containerRef.current) return;\n const updateSize = debounce(() => {\n if (containerRef.current) {\n setWidth(containerRef.current.offsetWidth - CONTAINER_PADDING);\n setHeight(containerRef.current.clientHeight);\n }\n }, RESIZE_DEBOUNCE_DELAY);\n updateSize();\n const observer = new ResizeObserver(updateSize);\n observer.observe(containerRef.current);\n return () => {\n observer.disconnect();\n updateSize.cancel();\n };\n }, []);\n\n const options = useMemo(\n () => ({\n cMapPacked: true,\n cMapUrl: `${BASE_DIR}/cmaps/`,\n standardFontDataUrl: `${BASE_DIR}/standard_fonts/`,\n wasmUrl: `${BASE_DIR}/wasm/`,\n iccUrl: `${BASE_DIR}/icc/`,\n }),\n []\n );\n\n const onDocumentLoadSuccess = useCallback(({ numPages }: { numPages: number }): void => {\n setNumPages(numPages);\n setLoading(false);\n }, []);\n\n const onDocumentLoadError = useCallback((error: Error): void => {\n setError(`Failed to load PDF: ${error.message}`);\n setLoading(false);\n }, []);\n\n const changePage = useCallback(\n (offset: number): void => {\n const newPage = pageNumber + offset;\n setPageNumber(newPage);\n scrollToPage(newPage);\n },\n [pageNumber, scrollToPage]\n );\n\n const previousPage = useCallback((): void => {\n changePage(-1);\n }, [changePage]);\n\n const nextPage = useCallback((): void => {\n changePage(1);\n }, [changePage]);\n\n const handleRangeChanged = useCallback(\n (range: { startIndex: number; endIndex: number }) => {\n if (isUserScrollingRef.current) {\n return;\n }\n const visiblePage = range.startIndex + 1;\n if (visiblePage !== pageNumber) {\n setPageNumber(visiblePage);\n }\n },\n [pageNumber]\n );\n\n useEffect(() => {\n isMountedRef.current = true;\n return () => {\n isMountedRef.current = false;\n debouncedScroll.cancel();\n if (scrollTimeoutRef.current) {\n clearTimeout(scrollTimeoutRef.current);\n }\n };\n }, [debouncedScroll]);\n\n useEffect(() => {\n setDefaultPageHeight(width * scale * pageAspectRatio);\n }, [width, scale, pageAspectRatio]);\n\n if (error) {\n return (\n <div className=\"flex items-center justify-center h-full w-full px-8.5\">\n <div className=\"text-red-500 text-center\">\n <p>{error}</p>\n </div>\n </div>\n );\n }\n\n return (\n <div className=\"h-full w-full flex flex-col overflow-hidden pb-5\">\n {loading && (\n <div className=\"flex items-center justify-center h-full px-8.5\">\n <div className=\"text-gray-500\">Loading PDF...</div>\n </div>\n )}\n {numPages > 0 && (\n <div className=\"flex items-center justify-center md:justify-between flex-wrap gap-3 px-8.5 py-3\">\n <Box py={4} px={8} className=\"flex items-center justify-start gap-1 rounded-[5px]!\">\n <Typography color=\"text.lighter\" style={{ fontSize: 10 }}>\n Page:\n </Typography>\n <span className=\"flex items-center gap-2 text-[12px]\">\n <input\n type=\"number\"\n min={1}\n max={numPages}\n value={pageNumber}\n onChange={(e) => {\n const page = parseInt(e.target.value, 10);\n if (page >= 1 && page <= numPages) {\n setPageNumber(page);\n debouncedScroll(page, false);\n }\n }}\n className=\"w-15 px-1 py-1 text-end text-[12px]\"\n />\n / {numPages}\n </span>\n <div className=\"flex flex-col gap-0.25 pl-1\">\n <Button\n variant=\"empty\"\n aria-label=\"previous page\"\n color=\"secondary\"\n size=\"small\"\n type=\"button\"\n disabled={pageNumber <= 1}\n onClick={previousPage}\n icon={<ChevronUpIcon style={{ width: 8, height: 8 }} />}\n />\n <Button\n variant=\"empty\"\n aria-label=\"next page\"\n color=\"secondary\"\n size=\"small\"\n type=\"button\"\n disabled={pageNumber >= numPages}\n onClick={nextPage}\n icon={<ChevronDownIcon style={{ width: 8, height: 8 }} />}\n />\n </div>\n </Box>\n <div className=\"flex items-center justify-center gap-3\">\n <Button\n variant=\"outlined\"\n aria-label=\"zoom-out\"\n color=\"default\"\n size=\"small\"\n icon={<MinusIcon style={{ width: 20, height: 20 }} />}\n onClick={handleZoomOut}\n className=\"bg-white! hover:bg-blue-50!\"\n disabled={scale <= 0.25}\n p={7}\n />\n <Box py={8} px={8} className=\"flex items-center justify-between gap-1.5 min-w-21 rounded-[5px]!\">\n <Typography color=\"text.lighter\" style={{ fontSize: 10 }}>\n Scale:\n </Typography>\n <Typography>{scale * 100}%</Typography>\n </Box>\n <Button\n variant=\"outlined\"\n aria-label=\"zoom-in\"\n size=\"small\"\n color=\"default\"\n icon={<PlusIcon style={{ width: 14, height: 14 }} />}\n onClick={handleZoomIn}\n className=\"bg-white! hover:bg-blue-50!\"\n disabled={scale >= 4}\n p={10}\n />\n </div>\n </div>\n )}\n <div ref={containerRef} className=\"flex-1 overflow-hidden min-h-0\">\n <Document\n options={options}\n file={url}\n onLoadSuccess={onDocumentLoadSuccess}\n onLoadError={onDocumentLoadError}\n loading={\n <div className=\"flex items-center justify-center\" style={{ height: defaultPageHeight }}>\n <div className=\"h-10 w-10 rounded-full border border-2 border-gray-200 animate-spin border-s-transparent\" />\n </div>\n }\n >\n <Virtuoso\n ref={virtuosoRef}\n style={{ height: height || 'calc(100dvh - 190px)', width: '100%', scrollbarGutter: 'stable both-edges' }}\n totalCount={numPages}\n rangeChanged={handleRangeChanged}\n defaultItemHeight={defaultPageHeight}\n itemContent={(index) => (\n <div className=\"mx-auto w-fit mb-4 border border-1 border-gray-100\">\n <Page\n pageNumber={index + 1}\n renderTextLayer={true}\n renderAnnotationLayer={true}\n width={width * scale}\n onLoadSuccess={(page) => {\n if (index === 0) {\n const ratio = page.height / page.width;\n setPageAspectRatio(ratio);\n }\n }}\n loading={\n <div className=\"flex items-center justify-center\" style={{ height: defaultPageHeight }}>\n <div className=\"h-10 w-10 rounded-full border border-2 border-gray-200 animate-spin border-s-transparent\" />\n </div>\n }\n className=\"h-auto w-full transition-[width] duration-[600ms] ease-in-out\"\n />\n </div>\n )}\n />\n </Document>\n </div>\n </div>\n );\n};\n"]}
@@ -1340,5 +1340,5 @@ import E4,{createContext,forwardRef,useState,useCallback,useRef,useMemo,useEffec
1340
1340
  }
1341
1341
  }
1342
1342
  animation: move 1.5s linear infinite;
1343
- `;export{$6 as $,Va as $a,p2 as A,f3 as Aa,ud as Ab,W4 as B,m3 as Ba,Hd as Bb,U4 as C,S3 as Ca,$d as Cb,c2 as D,M3 as Da,h4 as Db,X4 as E,L3 as Ea,Jd as Eb,Y4 as F,y3 as Fa,Kd as Fb,g2 as G,F3 as Ga,Qd as Gb,b2 as H,P3 as Ha,jd as Hb,Q4 as I,Z3 as Ia,D8 as Ib,o6 as J,$3 as Ja,mp as Jb,t6 as K,I3 as Ka,Vp as Kb,n6 as L,T3 as La,i6 as M,z3 as Ma,C6 as N,R3 as Na,l6 as O,A3 as Oa,p6 as P,N3 as Pa,g6 as Q,$2 as Qa,u6 as R,E2 as Ra,h6 as S,O3 as Sa,x6 as T,K as Ta,m6 as U,Ii as Ua,S6 as V,Di as Va,M6 as W,Yi as Wa,V6 as X,oa as Xa,H6 as Y,D5 as Ya,F6 as Z,ba as Za,k6 as _,ma as _a,r as a,E6 as aa,ka as ab,m1 as b,B6 as ba,Ia as bb,d as c,G6 as ca,Ra as cb,J2 as d,z6 as da,oC as db,E as e,A6 as ea,sC as eb,t1 as f,N6 as fa,J5 as fb,B as g,O6 as ga,VC as gb,A as h,_6 as ha,K5 as hb,Y8 as i,V2 as ia,zC as ib,q8 as j,Y6 as ja,es as jb,J8 as k,L2 as ka,t4 as kb,w1 as l,H2 as la,i4 as lb,K2 as m,q6 as ma,Zs as mb,Q2 as n,K6 as na,B7 as nb,j2 as o,l1 as oa,R7 as ob,o5 as p,j6 as pa,el as pb,r5 as q,d1 as qa,sl as qb,n5 as r,e3 as ra,cl as rb,M9 as s,r3 as sa,vl as sb,M1 as t,i3 as ta,kl as tb,h as u,a3 as ua,Gl as ub,G4 as v,s3 as va,Nl as vb,w,d3 as wa,Yl as wb,S as x,c3 as xa,td as xb,T9 as y,g3 as ya,gd as yb,N as z,u3 as za,bd as zb};//# sourceMappingURL=chunk-OXKOV5KN.mjs.map
1344
- //# sourceMappingURL=chunk-OXKOV5KN.mjs.map
1343
+ `;export{$6 as $,Va as $a,p2 as A,f3 as Aa,ud as Ab,W4 as B,m3 as Ba,Hd as Bb,U4 as C,S3 as Ca,P8 as Cb,c2 as D,M3 as Da,$d as Db,X4 as E,L3 as Ea,h4 as Eb,Y4 as F,y3 as Fa,Jd as Fb,g2 as G,F3 as Ga,Kd as Gb,b2 as H,P3 as Ha,Qd as Hb,Q4 as I,Z3 as Ia,jd as Ib,o6 as J,$3 as Ja,D8 as Jb,t6 as K,I3 as Ka,mp as Kb,n6 as L,T3 as La,Vp as Lb,i6 as M,z3 as Ma,C6 as N,R3 as Na,l6 as O,A3 as Oa,p6 as P,N3 as Pa,g6 as Q,$2 as Qa,u6 as R,E2 as Ra,h6 as S,O3 as Sa,x6 as T,K as Ta,m6 as U,Ii as Ua,S6 as V,Di as Va,M6 as W,Yi as Wa,V6 as X,oa as Xa,H6 as Y,D5 as Ya,F6 as Z,ba as Za,k6 as _,ma as _a,r as a,E6 as aa,ka as ab,m1 as b,B6 as ba,Ia as bb,d as c,G6 as ca,Ra as cb,J2 as d,z6 as da,oC as db,E as e,A6 as ea,sC as eb,t1 as f,N6 as fa,J5 as fb,B as g,O6 as ga,VC as gb,A as h,_6 as ha,K5 as hb,Y8 as i,V2 as ia,zC as ib,q8 as j,Y6 as ja,es as jb,J8 as k,L2 as ka,t4 as kb,w1 as l,H2 as la,i4 as lb,K2 as m,q6 as ma,Zs as mb,Q2 as n,K6 as na,B7 as nb,j2 as o,l1 as oa,R7 as ob,o5 as p,j6 as pa,el as pb,r5 as q,d1 as qa,sl as qb,n5 as r,e3 as ra,cl as rb,M9 as s,r3 as sa,vl as sb,M1 as t,i3 as ta,kl as tb,h as u,a3 as ua,Gl as ub,G4 as v,s3 as va,Nl as vb,w,d3 as wa,Yl as wb,S as x,c3 as xa,td as xb,T9 as y,g3 as ya,gd as yb,N as z,u3 as za,bd as zb};//# sourceMappingURL=chunk-IMZOAD2F.mjs.map
1344
+ //# sourceMappingURL=chunk-IMZOAD2F.mjs.map