@cyber-harbour/ui 2.1.2 → 2.1.4
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.
- package/dist/{PdfDriver-3CHKFA4R.mjs → PdfDriver-PYJWMVPM.mjs} +3 -3
- package/dist/{PdfDriver-3CHKFA4R.mjs.map → PdfDriver-PYJWMVPM.mjs.map} +1 -1
- package/dist/{PdfDriver-WZXWUWZB.js → PdfDriver-YJUS3VDA.js} +3 -3
- package/dist/{PdfDriver-WZXWUWZB.js.map → PdfDriver-YJUS3VDA.js.map} +1 -1
- package/dist/{chunk-FGJLQ56A.mjs → chunk-EC5SPMSB.mjs} +157 -157
- package/dist/chunk-EC5SPMSB.mjs.map +1 -0
- package/dist/{chunk-ZIIDXY3U.js → chunk-LH53TVT2.js} +158 -158
- package/dist/chunk-LH53TVT2.js.map +1 -0
- package/dist/index.css +1 -1
- package/dist/index.css.map +1 -1
- package/dist/index.d.mts +4 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.js +16 -16
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +2 -2
- package/dist/index.mjs.map +1 -1
- package/dist/styles/tailwind.css +1 -1
- package/dist/styles/tailwind.css.map +1 -1
- package/package.json +1 -1
- package/dist/chunk-FGJLQ56A.mjs.map +0 -1
- package/dist/chunk-ZIIDXY3U.js.map +0 -1
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import {a,z,Pa,ob,ma}from'./chunk-
|
|
2
|
-
export{q as PdfDriver};//# sourceMappingURL=PdfDriver-
|
|
3
|
-
//# sourceMappingURL=PdfDriver-
|
|
1
|
+
import {a,z,Pa,ob,ma}from'./chunk-EC5SPMSB.mjs';import {useState,useRef,useEffect,useMemo}from'react';import F 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 {jsx,jsxs}from'react/jsx-runtime';var c="/pdfjs";typeof window<"u"&&typeof document<"u"&&(pdfjs.GlobalWorkerOptions.workerSrc=`${c}/pdf.worker.min.js`);var q=a(({url:x})=>{let[s,y]=useState(0),[d,m]=useState(1),[N,f]=useState(true),[p,P]=useState(null),[k,L]=useState(400),[u,v]=useState(1),a$1=useRef(null),D=a(()=>{v(t=>Math.min(t+.25,4));},"handleZoomIn"),j=a(()=>{v(t=>Math.max(t-.25,.25));},"handleZoomOut");useEffect(()=>{if(!a$1.current)return;let t=F(()=>{a$1.current&&L(a$1.current.offsetWidth-70);},150);t();let n=new ResizeObserver(t);return n.observe(a$1.current),window.addEventListener("resize",t),()=>{n.disconnect(),window.removeEventListener("resize",t);}},[]);let z$1=useMemo(()=>({cMapPacked:true,cMapUrl:`${c}/cmaps/`,standardFontDataUrl:`${c}/standard_fonts/`,wasmUrl:`${c}/wasm/`,iccUrl:`${c}/icc/`}),[]);function E({numPages:t}){y(t),f(false);}a(E,"onDocumentLoadSuccess");function C(t){P(`Failed to load PDF: ${t.message}`),f(false);}a(C,"onDocumentLoadError");function g(t){m(n=>n+t);}a(g,"changePage");function M(){g(-1);}a(M,"previousPage");function S(){g(1);}return a(S,"nextPage"),p?jsx("div",{className:"flex items-center justify-center h-full w-full",children:jsx("div",{className:"text-red-500 text-center",children:jsx("p",{children:p})})}):jsxs("div",{className:"h-full w-full flex flex-col overflow-hidden pb-5",children:[N&&jsx("div",{className:"flex items-center justify-center h-full",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 p-4",children:[jsxs("div",{className:"flex items-center justify-center gap-3",children:[jsx(z,{variant:"outlined","aria-label":"previous page",color:"secondary",size:"small",type:"button",disabled:d<=1,onClick:M,p:5,icon:jsx("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:jsx("path",{d:"m15 18-6-6 6-6"})})}),jsxs("span",{className:"flex items-center gap-2",children:[jsx("input",{type:"number",min:1,max:s,value:d,onChange:t=>{let n=parseInt(t.target.value,10);n>=1&&n<=s&&m(n);},className:"w-15 px-1 py-1 border border-gray-400! rounded text-center"}),"/ ",s]}),jsx(z,{variant:"outlined","aria-label":"next page",color:"secondary",size:"small",type:"button",disabled:d>=s,onClick:S,p:7,icon:jsx("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:jsx("path",{d:"m9 18 6-6-6-6"})})})]}),jsxs("div",{className:"flex items-center justify-center gap-3",children:[jsx(z,{variant:"outlined","aria-label":"zoom-out",color:"secondary",size:"small",icon:jsx(Pa,{style:{width:20,height:20}}),onClick:j,disabled:u<=.25,p:7}),jsxs(ob,{py:5,px:8,children:[u*100,"%"]}),jsx(z,{variant:"outlined","aria-label":"zoom-in",size:"small",color:"secondary",icon:jsx(ma,{style:{width:14,height:14}}),onClick:D,disabled:u>=4,p:8})]})]}),jsx("div",{ref:a$1,className:"flex-1 overflow-auto min-h-0",children:jsx(Document,{options:z$1,file:x,onLoadSuccess:E,onLoadError:C,loading:"",className:"mx-auto w-fit",children:jsx(Page,{pageNumber:d,renderTextLayer:true,renderAnnotationLayer:true,width:k*u,className:"h-auto w-full transition-[width] duration-[600ms] ease-in-out mx-auto"})})})]})},"PdfDriver");
|
|
2
|
+
export{q as PdfDriver};//# sourceMappingURL=PdfDriver-PYJWMVPM.mjs.map
|
|
3
|
+
//# sourceMappingURL=PdfDriver-PYJWMVPM.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/FileViewer/drivers/PdfDriver/PdfDriver.tsx"],"names":["BASE_DIR","pdfjs","PdfDriver","__name","url","numPages","setNumPages","useState","pageNumber","setPageNumber","loading","setLoading","error","setError","width","setWidth","scale","setScale","containerRef","useRef","handleZoomIn","prev","handleZoomOut","useEffect","updateSize","debounce","observer","options","useMemo","onDocumentLoadSuccess","onDocumentLoadError","changePage","offset","prevPageNumber","previousPage","nextPage","jsx","jsxs","Button","e","page","MinusIcon","Box","PlusIcon","Document","Page"],"mappings":"oTAOA,IAAMA,CAAAA,CAAW,SAGb,OAAO,MAAA,CAAW,GAAe,EAAA,OAAO,QAAa,CAAA,GAAA,GACvDC,KAAM,CAAA,mBAAA,CAAoB,UAAY,CAAGD,EAAAA,CAAQ,CAO5C,kBAAA,CAAA,CAAA,CAAA,IAAME,CAAsCC,CAAAA,CAAAA,CAAA,CAAC,CAAE,IAAAC,CAAI,CAAA,GAAM,CAC9D,GAAM,CAACC,CAAAA,CAAUC,CAAW,CAAA,CAAIC,SAAiB,CAAC,CAAA,CAC5C,CAACC,CAAAA,CAAYC,CAAa,CAAIF,CAAAA,QAAAA,CAAiB,CAAC,CAAA,CAChD,CAACG,CAASC,CAAAA,CAAU,CAAIJ,CAAAA,QAAAA,CAAkB,IAAI,CAAA,CAC9C,CAACK,CAAAA,CAAOC,CAAQ,CAAIN,CAAAA,QAAAA,CAAwB,IAAI,CAAA,CAChD,CAACO,CAAAA,CAAOC,CAAQ,CAAA,CAAIR,SAAiB,GAAG,CAAA,CACxC,CAACS,CAAAA,CAAOC,CAAQ,CAAA,CAAIV,QAAS,CAAA,CAAC,EAC9BW,GAAeC,CAAAA,MAAAA,CAAuB,IAAI,CAAA,CAC1CC,EAAejB,CAAA,CAAA,IAAM,CACzBc,CAAAA,CAAUI,GAAS,IAAK,CAAA,GAAA,CAAIA,CAAO,CAAA,GAAA,CAAM,CAAC,CAAC,EAC7C,CAAA,CAFqB,gBAIfC,CAAgBnB,CAAAA,CAAAA,CAAA,IAAM,CAC1Bc,CAAUI,CAAAA,CAAAA,EAAS,IAAK,CAAA,GAAA,CAAIA,EAAO,GAAM,CAAA,GAAI,CAAC,EAChD,CAFsB,CAAA,eAAA,CAAA,CAItBE,SAAU,CAAA,IAAM,CACd,GAAI,CAACL,GAAa,CAAA,OAAA,CAAS,OAC3B,IAAMM,CAAAA,CAAaC,CAAS,CAAA,IAAM,CAC5BP,GAAa,CAAA,OAAA,EACfH,CAASG,CAAAA,GAAAA,CAAa,OAAQ,CAAA,WAAA,CAAc,EAAE,EAElD,EAAG,GAAG,CAAA,CACNM,CAAW,EAAA,CACX,IAAME,CAAAA,CAAW,IAAI,cAAA,CAAeF,CAAU,CAC9C,CAAA,OAAAE,CAAS,CAAA,OAAA,CAAQR,GAAa,CAAA,OAAO,CACrC,CAAA,MAAA,CAAO,iBAAiB,QAAUM,CAAAA,CAAU,CACrC,CAAA,IAAM,CACXE,CAAAA,CAAS,UAAW,EAAA,CACpB,OAAO,mBAAoB,CAAA,QAAA,CAAUF,CAAU,EACjD,CACF,CAAA,CAAG,EAAE,EAEL,IAAMG,GAAAA,CAAUC,OACd,CAAA,KAAO,CACL,UAAA,CAAY,IACZ,CAAA,OAAA,CAAS,GAAG5B,CAAQ,CAAA,OAAA,CAAA,CACpB,mBAAqB,CAAA,CAAA,EAAGA,CAAQ,CAAA,gBAAA,CAAA,CAChC,OAAS,CAAA,CAAA,EAAGA,CAAQ,CACpB,MAAA,CAAA,CAAA,MAAA,CAAQ,CAAGA,EAAAA,CAAQ,OACrB,CACA,CAAA,CAAA,EACF,CAAA,CAIA,SAAS6B,CAAsB,CAAA,CAAE,QAAAxB,CAAAA,CAAS,CAA+B,CAAA,CACvEC,CAAYD,CAAAA,CAAQ,EACpBM,CAAW,CAAA,KAAK,EAClB,CAHSR,CAAA0B,CAAAA,CAAAA,CAAA,uBAKT,CAAA,CAAA,SAASC,EAAoBlB,CAAoB,CAAA,CAC/CC,CAAS,CAAA,CAAA,oBAAA,EAAuBD,CAAM,CAAA,OAAO,CAAE,CAAA,CAAA,CAC/CD,EAAW,KAAK,EAClB,CAHSR,CAAAA,CAAA2B,EAAA,qBAKT,CAAA,CAAA,SAASC,CAAWC,CAAAA,CAAAA,CAAsB,CACxCvB,CAAewB,CAAAA,CAAAA,EAAmBA,CAAiBD,CAAAA,CAAM,EAC3D,CAFS7B,CAAA4B,CAAAA,CAAAA,CAAA,cAIT,SAASG,CAAAA,EAAqB,CAC5BH,CAAAA,CAAW,EAAE,EACf,CAFS5B,CAAAA,CAAA+B,EAAA,cAIT,CAAA,CAAA,SAASC,CAAiB,EAAA,CACxBJ,CAAW,CAAA,CAAC,EACd,CAEA,OAJS5B,CAAAgC,CAAAA,CAAAA,CAAA,UAILvB,CAAAA,CAAAA,CAAAA,CAEAwB,IAAC,KAAI,CAAA,CAAA,SAAA,CAAU,gDACb,CAAA,QAAA,CAAAA,IAAC,KAAI,CAAA,CAAA,SAAA,CAAU,0BACb,CAAA,QAAA,CAAAA,GAAC,CAAA,GAAA,CAAA,CAAG,QAAAxB,CAAAA,CAAAA,CAAM,EACZ,CACF,CAAA,CAAA,CAKFyB,IAAC,CAAA,KAAA,CAAA,CAAI,SAAU,CAAA,kDAAA,CACZ,QAAA3B,CAAAA,CAAAA,CAAAA,EACC0B,IAAC,KAAI,CAAA,CAAA,SAAA,CAAU,yCACb,CAAA,QAAA,CAAAA,GAAC,CAAA,KAAA,CAAA,CAAI,SAAU,CAAA,eAAA,CAAgB,0BAAc,CAC/C,CAAA,CAAA,CAED/B,CAAW,CAAA,CAAA,EACVgC,IAAC,CAAA,KAAA,CAAA,CAAI,SAAU,CAAA,yEAAA,CACb,UAAAA,IAAC,CAAA,KAAA,CAAA,CAAI,SAAU,CAAA,wCAAA,CACb,QAAAD,CAAAA,CAAAA,GAAAA,CAACE,CAAA,CAAA,CACC,QAAQ,UACR,CAAA,YAAA,CAAW,eACX,CAAA,KAAA,CAAM,WACN,CAAA,IAAA,CAAK,OACL,CAAA,IAAA,CAAK,SACL,QAAU9B,CAAAA,CAAAA,EAAc,CACxB,CAAA,OAAA,CAAS0B,CACT,CAAA,CAAA,CAAG,CACH,CAAA,IAAA,CACEE,IAAC,KACC,CAAA,CAAA,KAAA,CAAM,4BACN,CAAA,OAAA,CAAQ,YACR,IAAK,CAAA,MAAA,CACL,MAAO,CAAA,cAAA,CACP,YAAY,GACZ,CAAA,aAAA,CAAc,OACd,CAAA,cAAA,CAAe,OAEf,CAAA,QAAA,CAAAA,GAAC,CAAA,MAAA,CAAA,CAAK,EAAE,gBAAiB,CAAA,CAAA,CAC3B,CAEJ,CAAA,CAAA,CAEAC,IAAC,CAAA,MAAA,CAAA,CAAK,SAAU,CAAA,yBAAA,CACd,UAAAD,GAAC,CAAA,OAAA,CAAA,CACC,IAAK,CAAA,QAAA,CACL,GAAK,CAAA,CAAA,CACL,GAAK/B,CAAAA,CAAAA,CACL,MAAOG,CACP,CAAA,QAAA,CAAW+B,CAAM,EAAA,CACf,IAAMC,CAAO,CAAA,QAAA,CAASD,CAAE,CAAA,MAAA,CAAO,MAAO,EAAE,CAAA,CACpCC,CAAQ,EAAA,CAAA,EAAKA,CAAQnC,EAAAA,CAAAA,EACvBI,CAAc+B,CAAAA,CAAI,EAEtB,CACA,CAAA,SAAA,CAAU,4DACZ,CAAA,CAAA,CAAE,IACCnC,CAAAA,CAAAA,CAAAA,CACL,CACA+B,CAAAA,GAAAA,CAACE,EAAA,CACC,OAAA,CAAQ,UACR,CAAA,YAAA,CAAW,WACX,CAAA,KAAA,CAAM,WACN,CAAA,IAAA,CAAK,QACL,IAAK,CAAA,QAAA,CACL,QAAU9B,CAAAA,CAAAA,EAAcH,EACxB,OAAS8B,CAAAA,CAAAA,CACT,CAAG,CAAA,CAAA,CACH,KACEC,GAAC,CAAA,KAAA,CAAA,CACC,KAAM,CAAA,4BAAA,CACN,OAAQ,CAAA,WAAA,CACR,IAAK,CAAA,MAAA,CACL,OAAO,cACP,CAAA,WAAA,CAAY,GACZ,CAAA,aAAA,CAAc,OACd,CAAA,cAAA,CAAe,OAEf,CAAA,QAAA,CAAAA,IAAC,MAAK,CAAA,CAAA,CAAA,CAAE,eAAgB,CAAA,CAAA,CAC1B,CAEJ,CAAA,CAAA,CAAA,CACF,CACAC,CAAAA,IAAAA,CAAC,OAAI,SAAU,CAAA,wCAAA,CACb,QAAAD,CAAAA,CAAAA,GAAAA,CAACE,CAAA,CAAA,CACC,OAAQ,CAAA,UAAA,CACR,aAAW,UACX,CAAA,KAAA,CAAM,WACN,CAAA,IAAA,CAAK,OACL,CAAA,IAAA,CAAMF,GAACK,CAAAA,EAAAA,CAAA,CAAU,KAAO,CAAA,CAAE,KAAO,CAAA,EAAA,CAAI,MAAQ,CAAA,EAAG,CAAG,CAAA,CAAA,CACnD,QAASnB,CACT,CAAA,QAAA,CAAUN,CAAS,EAAA,GAAA,CACnB,CAAG,CAAA,CAAA,CACL,CACAqB,CAAAA,IAAAA,CAACK,GAAA,CAAI,EAAA,CAAI,CAAG,CAAA,EAAA,CAAI,EACb,QAAA1B,CAAAA,CAAAA,CAAAA,CAAQ,GAAI,CAAA,GAAA,CAAA,CACf,EACAoB,GAACE,CAAAA,CAAAA,CAAA,CACC,OAAA,CAAQ,UACR,CAAA,YAAA,CAAW,SACX,CAAA,IAAA,CAAK,QACL,KAAM,CAAA,WAAA,CACN,IAAMF,CAAAA,GAAAA,CAACO,EAAA,CAAA,CAAS,KAAO,CAAA,CAAE,MAAO,EAAI,CAAA,MAAA,CAAQ,EAAG,CAAA,CAAG,CAClD,CAAA,OAAA,CAASvB,CACT,CAAA,QAAA,CAAUJ,GAAS,CACnB,CAAA,CAAA,CAAG,CACL,CAAA,CAAA,CAAA,CACF,GACF,CAEFoB,CAAAA,GAAAA,CAAC,KAAI,CAAA,CAAA,GAAA,CAAKlB,IAAc,SAAU,CAAA,8BAAA,CAChC,QAAAkB,CAAAA,GAAAA,CAACQ,QAAA,CAAA,CACC,OAASjB,CAAAA,GAAAA,CACT,KAAMvB,CACN,CAAA,aAAA,CAAeyB,CACf,CAAA,WAAA,CAAaC,CACb,CAAA,OAAA,CAAQ,EACR,CAAA,SAAA,CAAU,gBAEV,QAAAM,CAAAA,GAAAA,CAACS,IAAA,CAAA,CACC,UAAYrC,CAAAA,CAAAA,CACZ,eAAiB,CAAA,IAAA,CACjB,sBAAuB,IACvB,CAAA,KAAA,CAAOM,CAAQE,CAAAA,CAAAA,CACf,UAAU,uEACZ,CAAA,CAAA,CACF,CACF,CAAA,CAAA,CAAA,CACF,CAEJ,CAvMmD,CAAA,WAAA","file":"PdfDriver-3CHKFA4R.mjs","sourcesContent":["import React, { 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 { Box, Button, MinusIcon, PlusIcon } 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}\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>(400);\n const [scale, setScale] = useState(1);\n const containerRef = useRef<HTMLDivElement>(null);\n const handleZoomIn = () => {\n setScale((prev) => Math.min(prev + 0.25, 4));\n };\n\n const handleZoomOut = () => {\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 - 70);\n }\n }, 150);\n updateSize();\n const observer = new ResizeObserver(updateSize);\n observer.observe(containerRef.current);\n window.addEventListener('resize', updateSize);\n return () => {\n observer.disconnect();\n window.removeEventListener('resize', updateSize);\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 //TODO: add fix 100px problem;\n\n function onDocumentLoadSuccess({ numPages }: { numPages: number }): void {\n setNumPages(numPages);\n setLoading(false);\n }\n\n function onDocumentLoadError(error: Error): void {\n setError(`Failed to load PDF: ${error.message}`);\n setLoading(false);\n }\n\n function changePage(offset: number): void {\n setPageNumber((prevPageNumber) => prevPageNumber + offset);\n }\n\n function previousPage(): void {\n changePage(-1);\n }\n\n function nextPage(): void {\n changePage(1);\n }\n\n if (error) {\n return (\n <div className=\"flex items-center justify-center h-full w-full\">\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\">\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 p-4\">\n <div className=\"flex items-center justify-center gap-3\">\n <Button\n variant=\"outlined\"\n aria-label=\"previous page\"\n color=\"secondary\"\n size=\"small\"\n type=\"button\"\n disabled={pageNumber <= 1}\n onClick={previousPage}\n p={5}\n icon={\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"m15 18-6-6 6-6\" />\n </svg>\n }\n />\n\n <span className=\"flex items-center gap-2\">\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 }\n }}\n className=\"w-15 px-1 py-1 border border-gray-400! rounded text-center\"\n />\n / {numPages}\n </span>\n <Button\n variant=\"outlined\"\n aria-label=\"next page\"\n color=\"secondary\"\n size=\"small\"\n type=\"button\"\n disabled={pageNumber >= numPages}\n onClick={nextPage}\n p={7}\n icon={\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"m9 18 6-6-6-6\" />\n </svg>\n }\n />\n </div>\n <div className=\"flex items-center justify-center gap-3\">\n <Button\n variant=\"outlined\"\n aria-label=\"zoom-out\"\n color=\"secondary\"\n size=\"small\"\n icon={<MinusIcon style={{ width: 20, height: 20 }} />}\n onClick={handleZoomOut}\n disabled={scale <= 0.25}\n p={7}\n />\n <Box py={5} px={8}>\n {scale * 100}%\n </Box>\n <Button\n variant=\"outlined\"\n aria-label=\"zoom-in\"\n size=\"small\"\n color=\"secondary\"\n icon={<PlusIcon style={{ width: 14, height: 14 }} />}\n onClick={handleZoomIn}\n disabled={scale >= 4}\n p={8}\n />\n </div>\n </div>\n )}\n <div ref={containerRef} className=\"flex-1 overflow-auto min-h-0\">\n <Document\n options={options}\n file={url}\n onLoadSuccess={onDocumentLoadSuccess}\n onLoadError={onDocumentLoadError}\n loading=\"\"\n className=\"mx-auto w-fit\"\n >\n <Page\n pageNumber={pageNumber}\n renderTextLayer={true}\n renderAnnotationLayer={true}\n width={width * scale}\n className=\"h-auto w-full transition-[width] duration-[600ms] ease-in-out mx-auto\"\n />\n </Document>\n </div>\n </div>\n );\n};\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/FileViewer/drivers/PdfDriver/PdfDriver.tsx"],"names":["BASE_DIR","pdfjs","PdfDriver","__name","url","numPages","setNumPages","useState","pageNumber","setPageNumber","loading","setLoading","error","setError","width","setWidth","scale","setScale","containerRef","useRef","handleZoomIn","prev","handleZoomOut","useEffect","updateSize","debounce","observer","options","useMemo","onDocumentLoadSuccess","onDocumentLoadError","changePage","offset","prevPageNumber","previousPage","nextPage","jsx","jsxs","Button","e","page","MinusIcon","Box","PlusIcon","Document","Page"],"mappings":"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","file":"PdfDriver-PYJWMVPM.mjs","sourcesContent":["import React, { 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 { Box, Button, MinusIcon, PlusIcon } 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}\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>(400);\n const [scale, setScale] = useState(1);\n const containerRef = useRef<HTMLDivElement>(null);\n const handleZoomIn = () => {\n setScale((prev) => Math.min(prev + 0.25, 4));\n };\n\n const handleZoomOut = () => {\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 - 70);\n }\n }, 150);\n updateSize();\n const observer = new ResizeObserver(updateSize);\n observer.observe(containerRef.current);\n window.addEventListener('resize', updateSize);\n return () => {\n observer.disconnect();\n window.removeEventListener('resize', updateSize);\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 //TODO: add fix 100px problem;\n\n function onDocumentLoadSuccess({ numPages }: { numPages: number }): void {\n setNumPages(numPages);\n setLoading(false);\n }\n\n function onDocumentLoadError(error: Error): void {\n setError(`Failed to load PDF: ${error.message}`);\n setLoading(false);\n }\n\n function changePage(offset: number): void {\n setPageNumber((prevPageNumber) => prevPageNumber + offset);\n }\n\n function previousPage(): void {\n changePage(-1);\n }\n\n function nextPage(): void {\n changePage(1);\n }\n\n if (error) {\n return (\n <div className=\"flex items-center justify-center h-full w-full\">\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\">\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 p-4\">\n <div className=\"flex items-center justify-center gap-3\">\n <Button\n variant=\"outlined\"\n aria-label=\"previous page\"\n color=\"secondary\"\n size=\"small\"\n type=\"button\"\n disabled={pageNumber <= 1}\n onClick={previousPage}\n p={5}\n icon={\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"m15 18-6-6 6-6\" />\n </svg>\n }\n />\n\n <span className=\"flex items-center gap-2\">\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 }\n }}\n className=\"w-15 px-1 py-1 border border-gray-400! rounded text-center\"\n />\n / {numPages}\n </span>\n <Button\n variant=\"outlined\"\n aria-label=\"next page\"\n color=\"secondary\"\n size=\"small\"\n type=\"button\"\n disabled={pageNumber >= numPages}\n onClick={nextPage}\n p={7}\n icon={\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"m9 18 6-6-6-6\" />\n </svg>\n }\n />\n </div>\n <div className=\"flex items-center justify-center gap-3\">\n <Button\n variant=\"outlined\"\n aria-label=\"zoom-out\"\n color=\"secondary\"\n size=\"small\"\n icon={<MinusIcon style={{ width: 20, height: 20 }} />}\n onClick={handleZoomOut}\n disabled={scale <= 0.25}\n p={7}\n />\n <Box py={5} px={8}>\n {scale * 100}%\n </Box>\n <Button\n variant=\"outlined\"\n aria-label=\"zoom-in\"\n size=\"small\"\n color=\"secondary\"\n icon={<PlusIcon style={{ width: 14, height: 14 }} />}\n onClick={handleZoomIn}\n disabled={scale >= 4}\n p={8}\n />\n </div>\n </div>\n )}\n <div ref={containerRef} className=\"flex-1 overflow-auto min-h-0\">\n <Document\n options={options}\n file={url}\n onLoadSuccess={onDocumentLoadSuccess}\n onLoadError={onDocumentLoadError}\n loading=\"\"\n className=\"mx-auto w-fit\"\n >\n <Page\n pageNumber={pageNumber}\n renderTextLayer={true}\n renderAnnotationLayer={true}\n width={width * scale}\n className=\"h-auto w-full transition-[width] duration-[600ms] ease-in-out mx-auto\"\n />\n </Document>\n </div>\n </div>\n );\n};\n"]}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
'use strict';var
|
|
2
|
-
exports.PdfDriver=J;//# sourceMappingURL=PdfDriver-
|
|
3
|
-
//# sourceMappingURL=PdfDriver-
|
|
1
|
+
'use strict';var chunkLH53TVT2_js=require('./chunk-LH53TVT2.js'),react=require('react'),F=require('lodash.debounce'),reactPdf=require('react-pdf');require('react-pdf/dist/Page/AnnotationLayer.css'),require('react-pdf/dist/Page/TextLayer.css');var jsxRuntime=require('react/jsx-runtime');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var F__default=/*#__PURE__*/_interopDefault(F);var c="/pdfjs";typeof window<"u"&&typeof document<"u"&&(reactPdf.pdfjs.GlobalWorkerOptions.workerSrc=`${c}/pdf.worker.min.js`);var J=chunkLH53TVT2_js.a(({url:x})=>{let[s,y]=react.useState(0),[d,m]=react.useState(1),[N,f]=react.useState(true),[p,P]=react.useState(null),[k,L]=react.useState(400),[u,v]=react.useState(1),a=react.useRef(null),D=chunkLH53TVT2_js.a(()=>{v(t=>Math.min(t+.25,4));},"handleZoomIn"),j=chunkLH53TVT2_js.a(()=>{v(t=>Math.max(t-.25,.25));},"handleZoomOut");react.useEffect(()=>{if(!a.current)return;let t=F__default.default(()=>{a.current&&L(a.current.offsetWidth-70);},150);t();let n=new ResizeObserver(t);return n.observe(a.current),window.addEventListener("resize",t),()=>{n.disconnect(),window.removeEventListener("resize",t);}},[]);let z=react.useMemo(()=>({cMapPacked:true,cMapUrl:`${c}/cmaps/`,standardFontDataUrl:`${c}/standard_fonts/`,wasmUrl:`${c}/wasm/`,iccUrl:`${c}/icc/`}),[]);function E({numPages:t}){y(t),f(false);}chunkLH53TVT2_js.a(E,"onDocumentLoadSuccess");function C(t){P(`Failed to load PDF: ${t.message}`),f(false);}chunkLH53TVT2_js.a(C,"onDocumentLoadError");function g(t){m(n=>n+t);}chunkLH53TVT2_js.a(g,"changePage");function M(){g(-1);}chunkLH53TVT2_js.a(M,"previousPage");function S(){g(1);}return chunkLH53TVT2_js.a(S,"nextPage"),p?jsxRuntime.jsx("div",{className:"flex items-center justify-center h-full w-full",children:jsxRuntime.jsx("div",{className:"text-red-500 text-center",children:jsxRuntime.jsx("p",{children:p})})}):jsxRuntime.jsxs("div",{className:"h-full w-full flex flex-col overflow-hidden pb-5",children:[N&&jsxRuntime.jsx("div",{className:"flex items-center justify-center h-full",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 p-4",children:[jsxRuntime.jsxs("div",{className:"flex items-center justify-center gap-3",children:[jsxRuntime.jsx(chunkLH53TVT2_js.z,{variant:"outlined","aria-label":"previous page",color:"secondary",size:"small",type:"button",disabled:d<=1,onClick:M,p:5,icon:jsxRuntime.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:jsxRuntime.jsx("path",{d:"m15 18-6-6 6-6"})})}),jsxRuntime.jsxs("span",{className:"flex items-center gap-2",children:[jsxRuntime.jsx("input",{type:"number",min:1,max:s,value:d,onChange:t=>{let n=parseInt(t.target.value,10);n>=1&&n<=s&&m(n);},className:"w-15 px-1 py-1 border border-gray-400! rounded text-center"}),"/ ",s]}),jsxRuntime.jsx(chunkLH53TVT2_js.z,{variant:"outlined","aria-label":"next page",color:"secondary",size:"small",type:"button",disabled:d>=s,onClick:S,p:7,icon:jsxRuntime.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:jsxRuntime.jsx("path",{d:"m9 18 6-6-6-6"})})})]}),jsxRuntime.jsxs("div",{className:"flex items-center justify-center gap-3",children:[jsxRuntime.jsx(chunkLH53TVT2_js.z,{variant:"outlined","aria-label":"zoom-out",color:"secondary",size:"small",icon:jsxRuntime.jsx(chunkLH53TVT2_js.Pa,{style:{width:20,height:20}}),onClick:j,disabled:u<=.25,p:7}),jsxRuntime.jsxs(chunkLH53TVT2_js.ob,{py:5,px:8,children:[u*100,"%"]}),jsxRuntime.jsx(chunkLH53TVT2_js.z,{variant:"outlined","aria-label":"zoom-in",size:"small",color:"secondary",icon:jsxRuntime.jsx(chunkLH53TVT2_js.ma,{style:{width:14,height:14}}),onClick:D,disabled:u>=4,p:8})]})]}),jsxRuntime.jsx("div",{ref:a,className:"flex-1 overflow-auto min-h-0",children:jsxRuntime.jsx(reactPdf.Document,{options:z,file:x,onLoadSuccess:E,onLoadError:C,loading:"",className:"mx-auto w-fit",children:jsxRuntime.jsx(reactPdf.Page,{pageNumber:d,renderTextLayer:true,renderAnnotationLayer:true,width:k*u,className:"h-auto w-full transition-[width] duration-[600ms] ease-in-out mx-auto"})})})]})},"PdfDriver");
|
|
2
|
+
exports.PdfDriver=J;//# sourceMappingURL=PdfDriver-YJUS3VDA.js.map
|
|
3
|
+
//# sourceMappingURL=PdfDriver-YJUS3VDA.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/FileViewer/drivers/PdfDriver/PdfDriver.tsx"],"names":["BASE_DIR","pdfjs","PdfDriver","__name","url","numPages","setNumPages","useState","pageNumber","setPageNumber","loading","setLoading","error","setError","width","setWidth","scale","setScale","containerRef","useRef","handleZoomIn","prev","handleZoomOut","useEffect","updateSize","debounce","observer","options","useMemo","onDocumentLoadSuccess","onDocumentLoadError","changePage","offset","prevPageNumber","previousPage","nextPage","jsx","jsxs","Button","e","page","MinusIcon","Box","PlusIcon","Document","Page"],"mappings":"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","file":"PdfDriver-WZXWUWZB.js","sourcesContent":["import React, { 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 { Box, Button, MinusIcon, PlusIcon } 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}\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>(400);\n const [scale, setScale] = useState(1);\n const containerRef = useRef<HTMLDivElement>(null);\n const handleZoomIn = () => {\n setScale((prev) => Math.min(prev + 0.25, 4));\n };\n\n const handleZoomOut = () => {\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 - 70);\n }\n }, 150);\n updateSize();\n const observer = new ResizeObserver(updateSize);\n observer.observe(containerRef.current);\n window.addEventListener('resize', updateSize);\n return () => {\n observer.disconnect();\n window.removeEventListener('resize', updateSize);\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 //TODO: add fix 100px problem;\n\n function onDocumentLoadSuccess({ numPages }: { numPages: number }): void {\n setNumPages(numPages);\n setLoading(false);\n }\n\n function onDocumentLoadError(error: Error): void {\n setError(`Failed to load PDF: ${error.message}`);\n setLoading(false);\n }\n\n function changePage(offset: number): void {\n setPageNumber((prevPageNumber) => prevPageNumber + offset);\n }\n\n function previousPage(): void {\n changePage(-1);\n }\n\n function nextPage(): void {\n changePage(1);\n }\n\n if (error) {\n return (\n <div className=\"flex items-center justify-center h-full w-full\">\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\">\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 p-4\">\n <div className=\"flex items-center justify-center gap-3\">\n <Button\n variant=\"outlined\"\n aria-label=\"previous page\"\n color=\"secondary\"\n size=\"small\"\n type=\"button\"\n disabled={pageNumber <= 1}\n onClick={previousPage}\n p={5}\n icon={\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"m15 18-6-6 6-6\" />\n </svg>\n }\n />\n\n <span className=\"flex items-center gap-2\">\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 }\n }}\n className=\"w-15 px-1 py-1 border border-gray-400! rounded text-center\"\n />\n / {numPages}\n </span>\n <Button\n variant=\"outlined\"\n aria-label=\"next page\"\n color=\"secondary\"\n size=\"small\"\n type=\"button\"\n disabled={pageNumber >= numPages}\n onClick={nextPage}\n p={7}\n icon={\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"m9 18 6-6-6-6\" />\n </svg>\n }\n />\n </div>\n <div className=\"flex items-center justify-center gap-3\">\n <Button\n variant=\"outlined\"\n aria-label=\"zoom-out\"\n color=\"secondary\"\n size=\"small\"\n icon={<MinusIcon style={{ width: 20, height: 20 }} />}\n onClick={handleZoomOut}\n disabled={scale <= 0.25}\n p={7}\n />\n <Box py={5} px={8}>\n {scale * 100}%\n </Box>\n <Button\n variant=\"outlined\"\n aria-label=\"zoom-in\"\n size=\"small\"\n color=\"secondary\"\n icon={<PlusIcon style={{ width: 14, height: 14 }} />}\n onClick={handleZoomIn}\n disabled={scale >= 4}\n p={8}\n />\n </div>\n </div>\n )}\n <div ref={containerRef} className=\"flex-1 overflow-auto min-h-0\">\n <Document\n options={options}\n file={url}\n onLoadSuccess={onDocumentLoadSuccess}\n onLoadError={onDocumentLoadError}\n loading=\"\"\n className=\"mx-auto w-fit\"\n >\n <Page\n pageNumber={pageNumber}\n renderTextLayer={true}\n renderAnnotationLayer={true}\n width={width * scale}\n className=\"h-auto w-full transition-[width] duration-[600ms] ease-in-out mx-auto\"\n />\n </Document>\n </div>\n </div>\n );\n};\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/FileViewer/drivers/PdfDriver/PdfDriver.tsx"],"names":["BASE_DIR","pdfjs","PdfDriver","__name","url","numPages","setNumPages","useState","pageNumber","setPageNumber","loading","setLoading","error","setError","width","setWidth","scale","setScale","containerRef","useRef","handleZoomIn","prev","handleZoomOut","useEffect","updateSize","debounce","observer","options","useMemo","onDocumentLoadSuccess","onDocumentLoadError","changePage","offset","prevPageNumber","previousPage","nextPage","jsx","jsxs","Button","e","page","MinusIcon","Box","PlusIcon","Document","Page"],"mappings":"+YAOA,IAAMA,CAAAA,CAAW,SAGb,OAAO,MAAA,CAAW,GAAe,EAAA,OAAO,QAAa,CAAA,GAAA,GACvDC,cAAM,CAAA,mBAAA,CAAoB,UAAY,CAAGD,EAAAA,CAAQ,CAO5C,kBAAA,CAAA,CAAA,CAAA,IAAME,CAAsCC,CAAAA,kBAAAA,CAAA,CAAC,CAAE,IAAAC,CAAI,CAAA,GAAM,CAC9D,GAAM,CAACC,CAAAA,CAAUC,CAAW,CAAA,CAAIC,eAAiB,CAAC,CAAA,CAC5C,CAACC,CAAAA,CAAYC,CAAa,CAAIF,CAAAA,cAAAA,CAAiB,CAAC,CAAA,CAChD,CAACG,CAASC,CAAAA,CAAU,CAAIJ,CAAAA,cAAAA,CAAkB,IAAI,CAAA,CAC9C,CAACK,CAAAA,CAAOC,CAAQ,CAAIN,CAAAA,cAAAA,CAAwB,IAAI,CAAA,CAChD,CAACO,CAAAA,CAAOC,CAAQ,CAAA,CAAIR,eAAiB,GAAG,CAAA,CACxC,CAACS,CAAAA,CAAOC,CAAQ,CAAA,CAAIV,cAAS,CAAA,CAAC,EAC9BW,CAAeC,CAAAA,YAAAA,CAAuB,IAAI,CAAA,CAC1CC,EAAejB,kBAAA,CAAA,IAAM,CACzBc,CAAAA,CAAUI,GAAS,IAAK,CAAA,GAAA,CAAIA,CAAO,CAAA,GAAA,CAAM,CAAC,CAAC,EAC7C,CAAA,CAFqB,gBAIfC,CAAgBnB,CAAAA,kBAAAA,CAAA,IAAM,CAC1Bc,CAAUI,CAAAA,CAAAA,EAAS,IAAK,CAAA,GAAA,CAAIA,EAAO,GAAM,CAAA,GAAI,CAAC,EAChD,CAFsB,CAAA,eAAA,CAAA,CAItBE,eAAU,CAAA,IAAM,CACd,GAAI,CAACL,CAAa,CAAA,OAAA,CAAS,OAC3B,IAAMM,CAAAA,CAAaC,kBAAS,CAAA,IAAM,CAC5BP,CAAa,CAAA,OAAA,EACfH,CAASG,CAAAA,CAAAA,CAAa,OAAQ,CAAA,WAAA,CAAc,EAAE,EAElD,EAAG,GAAG,CAAA,CACNM,CAAW,EAAA,CACX,IAAME,CAAAA,CAAW,IAAI,cAAA,CAAeF,CAAU,CAC9C,CAAA,OAAAE,CAAS,CAAA,OAAA,CAAQR,CAAa,CAAA,OAAO,CACrC,CAAA,MAAA,CAAO,iBAAiB,QAAUM,CAAAA,CAAU,CACrC,CAAA,IAAM,CACXE,CAAAA,CAAS,UAAW,EAAA,CACpB,OAAO,mBAAoB,CAAA,QAAA,CAAUF,CAAU,EACjD,CACF,CAAA,CAAG,EAAE,EAEL,IAAMG,CAAAA,CAAUC,aACd,CAAA,KAAO,CACL,UAAA,CAAY,IACZ,CAAA,OAAA,CAAS,GAAG5B,CAAQ,CAAA,OAAA,CAAA,CACpB,mBAAqB,CAAA,CAAA,EAAGA,CAAQ,CAAA,gBAAA,CAAA,CAChC,OAAS,CAAA,CAAA,EAAGA,CAAQ,CACpB,MAAA,CAAA,CAAA,MAAA,CAAQ,CAAGA,EAAAA,CAAQ,OACrB,CACA,CAAA,CAAA,EACF,CAAA,CAIA,SAAS6B,CAAsB,CAAA,CAAE,QAAAxB,CAAAA,CAAS,CAA+B,CAAA,CACvEC,CAAYD,CAAAA,CAAQ,EACpBM,CAAW,CAAA,KAAK,EAClB,CAHSR,kBAAA0B,CAAAA,CAAAA,CAAA,uBAKT,CAAA,CAAA,SAASC,EAAoBlB,CAAoB,CAAA,CAC/CC,CAAS,CAAA,CAAA,oBAAA,EAAuBD,CAAM,CAAA,OAAO,CAAE,CAAA,CAAA,CAC/CD,EAAW,KAAK,EAClB,CAHSR,kBAAAA,CAAA2B,EAAA,qBAKT,CAAA,CAAA,SAASC,CAAWC,CAAAA,CAAAA,CAAsB,CACxCvB,CAAewB,CAAAA,CAAAA,EAAmBA,CAAiBD,CAAAA,CAAM,EAC3D,CAFS7B,kBAAA4B,CAAAA,CAAAA,CAAA,cAIT,SAASG,CAAAA,EAAqB,CAC5BH,CAAAA,CAAW,EAAE,EACf,CAFS5B,kBAAAA,CAAA+B,EAAA,cAIT,CAAA,CAAA,SAASC,CAAiB,EAAA,CACxBJ,CAAW,CAAA,CAAC,EACd,CAEA,OAJS5B,kBAAAgC,CAAAA,CAAAA,CAAA,UAILvB,CAAAA,CAAAA,CAAAA,CAEAwB,eAAC,KAAI,CAAA,CAAA,SAAA,CAAU,gDACb,CAAA,QAAA,CAAAA,eAAC,KAAI,CAAA,CAAA,SAAA,CAAU,0BACb,CAAA,QAAA,CAAAA,cAAC,CAAA,GAAA,CAAA,CAAG,QAAAxB,CAAAA,CAAAA,CAAM,EACZ,CACF,CAAA,CAAA,CAKFyB,eAAC,CAAA,KAAA,CAAA,CAAI,SAAU,CAAA,kDAAA,CACZ,QAAA3B,CAAAA,CAAAA,CAAAA,EACC0B,eAAC,KAAI,CAAA,CAAA,SAAA,CAAU,yCACb,CAAA,QAAA,CAAAA,cAAC,CAAA,KAAA,CAAA,CAAI,SAAU,CAAA,eAAA,CAAgB,0BAAc,CAC/C,CAAA,CAAA,CAED/B,CAAW,CAAA,CAAA,EACVgC,eAAC,CAAA,KAAA,CAAA,CAAI,SAAU,CAAA,yEAAA,CACb,UAAAA,eAAC,CAAA,KAAA,CAAA,CAAI,SAAU,CAAA,wCAAA,CACb,QAAAD,CAAAA,CAAAA,cAAAA,CAACE,kBAAA,CAAA,CACC,QAAQ,UACR,CAAA,YAAA,CAAW,eACX,CAAA,KAAA,CAAM,WACN,CAAA,IAAA,CAAK,OACL,CAAA,IAAA,CAAK,SACL,QAAU9B,CAAAA,CAAAA,EAAc,CACxB,CAAA,OAAA,CAAS0B,CACT,CAAA,CAAA,CAAG,CACH,CAAA,IAAA,CACEE,eAAC,KACC,CAAA,CAAA,KAAA,CAAM,4BACN,CAAA,OAAA,CAAQ,YACR,IAAK,CAAA,MAAA,CACL,MAAO,CAAA,cAAA,CACP,YAAY,GACZ,CAAA,aAAA,CAAc,OACd,CAAA,cAAA,CAAe,OAEf,CAAA,QAAA,CAAAA,cAAC,CAAA,MAAA,CAAA,CAAK,EAAE,gBAAiB,CAAA,CAAA,CAC3B,CAEJ,CAAA,CAAA,CAEAC,eAAC,CAAA,MAAA,CAAA,CAAK,SAAU,CAAA,yBAAA,CACd,UAAAD,cAAC,CAAA,OAAA,CAAA,CACC,IAAK,CAAA,QAAA,CACL,GAAK,CAAA,CAAA,CACL,GAAK/B,CAAAA,CAAAA,CACL,MAAOG,CACP,CAAA,QAAA,CAAW+B,CAAM,EAAA,CACf,IAAMC,CAAO,CAAA,QAAA,CAASD,CAAE,CAAA,MAAA,CAAO,MAAO,EAAE,CAAA,CACpCC,CAAQ,EAAA,CAAA,EAAKA,CAAQnC,EAAAA,CAAAA,EACvBI,CAAc+B,CAAAA,CAAI,EAEtB,CACA,CAAA,SAAA,CAAU,4DACZ,CAAA,CAAA,CAAE,IACCnC,CAAAA,CAAAA,CAAAA,CACL,CACA+B,CAAAA,cAAAA,CAACE,mBAAA,CACC,OAAA,CAAQ,UACR,CAAA,YAAA,CAAW,WACX,CAAA,KAAA,CAAM,WACN,CAAA,IAAA,CAAK,QACL,IAAK,CAAA,QAAA,CACL,QAAU9B,CAAAA,CAAAA,EAAcH,EACxB,OAAS8B,CAAAA,CAAAA,CACT,CAAG,CAAA,CAAA,CACH,KACEC,cAAC,CAAA,KAAA,CAAA,CACC,KAAM,CAAA,4BAAA,CACN,OAAQ,CAAA,WAAA,CACR,IAAK,CAAA,MAAA,CACL,OAAO,cACP,CAAA,WAAA,CAAY,GACZ,CAAA,aAAA,CAAc,OACd,CAAA,cAAA,CAAe,OAEf,CAAA,QAAA,CAAAA,eAAC,MAAK,CAAA,CAAA,CAAA,CAAE,eAAgB,CAAA,CAAA,CAC1B,CAEJ,CAAA,CAAA,CAAA,CACF,CACAC,CAAAA,eAAAA,CAAC,OAAI,SAAU,CAAA,wCAAA,CACb,QAAAD,CAAAA,CAAAA,cAAAA,CAACE,kBAAA,CAAA,CACC,OAAQ,CAAA,UAAA,CACR,aAAW,UACX,CAAA,KAAA,CAAM,WACN,CAAA,IAAA,CAAK,OACL,CAAA,IAAA,CAAMF,cAACK,CAAAA,mBAAAA,CAAA,CAAU,KAAO,CAAA,CAAE,KAAO,CAAA,EAAA,CAAI,MAAQ,CAAA,EAAG,CAAG,CAAA,CAAA,CACnD,QAASnB,CACT,CAAA,QAAA,CAAUN,CAAS,EAAA,GAAA,CACnB,CAAG,CAAA,CAAA,CACL,CACAqB,CAAAA,eAAAA,CAACK,oBAAA,CAAI,EAAA,CAAI,CAAG,CAAA,EAAA,CAAI,EACb,QAAA1B,CAAAA,CAAAA,CAAAA,CAAQ,GAAI,CAAA,GAAA,CAAA,CACf,EACAoB,cAACE,CAAAA,kBAAAA,CAAA,CACC,OAAA,CAAQ,UACR,CAAA,YAAA,CAAW,SACX,CAAA,IAAA,CAAK,QACL,KAAM,CAAA,WAAA,CACN,IAAMF,CAAAA,cAAAA,CAACO,mBAAA,CAAA,CAAS,KAAO,CAAA,CAAE,MAAO,EAAI,CAAA,MAAA,CAAQ,EAAG,CAAA,CAAG,CAClD,CAAA,OAAA,CAASvB,CACT,CAAA,QAAA,CAAUJ,GAAS,CACnB,CAAA,CAAA,CAAG,CACL,CAAA,CAAA,CAAA,CACF,GACF,CAEFoB,CAAAA,cAAAA,CAAC,KAAI,CAAA,CAAA,GAAA,CAAKlB,EAAc,SAAU,CAAA,8BAAA,CAChC,QAAAkB,CAAAA,cAAAA,CAACQ,iBAAA,CAAA,CACC,OAASjB,CAAAA,CAAAA,CACT,KAAMvB,CACN,CAAA,aAAA,CAAeyB,CACf,CAAA,WAAA,CAAaC,CACb,CAAA,OAAA,CAAQ,EACR,CAAA,SAAA,CAAU,gBAEV,QAAAM,CAAAA,cAAAA,CAACS,aAAA,CAAA,CACC,UAAYrC,CAAAA,CAAAA,CACZ,eAAiB,CAAA,IAAA,CACjB,sBAAuB,IACvB,CAAA,KAAA,CAAOM,CAAQE,CAAAA,CAAAA,CACf,UAAU,uEACZ,CAAA,CAAA,CACF,CACF,CAAA,CAAA,CAAA,CACF,CAEJ,CAvMmD,CAAA,WAAA","file":"PdfDriver-YJUS3VDA.js","sourcesContent":["import React, { 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 { Box, Button, MinusIcon, PlusIcon } 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}\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>(400);\n const [scale, setScale] = useState(1);\n const containerRef = useRef<HTMLDivElement>(null);\n const handleZoomIn = () => {\n setScale((prev) => Math.min(prev + 0.25, 4));\n };\n\n const handleZoomOut = () => {\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 - 70);\n }\n }, 150);\n updateSize();\n const observer = new ResizeObserver(updateSize);\n observer.observe(containerRef.current);\n window.addEventListener('resize', updateSize);\n return () => {\n observer.disconnect();\n window.removeEventListener('resize', updateSize);\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 //TODO: add fix 100px problem;\n\n function onDocumentLoadSuccess({ numPages }: { numPages: number }): void {\n setNumPages(numPages);\n setLoading(false);\n }\n\n function onDocumentLoadError(error: Error): void {\n setError(`Failed to load PDF: ${error.message}`);\n setLoading(false);\n }\n\n function changePage(offset: number): void {\n setPageNumber((prevPageNumber) => prevPageNumber + offset);\n }\n\n function previousPage(): void {\n changePage(-1);\n }\n\n function nextPage(): void {\n changePage(1);\n }\n\n if (error) {\n return (\n <div className=\"flex items-center justify-center h-full w-full\">\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\">\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 p-4\">\n <div className=\"flex items-center justify-center gap-3\">\n <Button\n variant=\"outlined\"\n aria-label=\"previous page\"\n color=\"secondary\"\n size=\"small\"\n type=\"button\"\n disabled={pageNumber <= 1}\n onClick={previousPage}\n p={5}\n icon={\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"m15 18-6-6 6-6\" />\n </svg>\n }\n />\n\n <span className=\"flex items-center gap-2\">\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 }\n }}\n className=\"w-15 px-1 py-1 border border-gray-400! rounded text-center\"\n />\n / {numPages}\n </span>\n <Button\n variant=\"outlined\"\n aria-label=\"next page\"\n color=\"secondary\"\n size=\"small\"\n type=\"button\"\n disabled={pageNumber >= numPages}\n onClick={nextPage}\n p={7}\n icon={\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"m9 18 6-6-6-6\" />\n </svg>\n }\n />\n </div>\n <div className=\"flex items-center justify-center gap-3\">\n <Button\n variant=\"outlined\"\n aria-label=\"zoom-out\"\n color=\"secondary\"\n size=\"small\"\n icon={<MinusIcon style={{ width: 20, height: 20 }} />}\n onClick={handleZoomOut}\n disabled={scale <= 0.25}\n p={7}\n />\n <Box py={5} px={8}>\n {scale * 100}%\n </Box>\n <Button\n variant=\"outlined\"\n aria-label=\"zoom-in\"\n size=\"small\"\n color=\"secondary\"\n icon={<PlusIcon style={{ width: 14, height: 14 }} />}\n onClick={handleZoomIn}\n disabled={scale >= 4}\n p={8}\n />\n </div>\n </div>\n )}\n <div ref={containerRef} className=\"flex-1 overflow-auto min-h-0\">\n <Document\n options={options}\n file={url}\n onLoadSuccess={onDocumentLoadSuccess}\n onLoadError={onDocumentLoadError}\n loading=\"\"\n className=\"mx-auto w-fit\"\n >\n <Page\n pageNumber={pageNumber}\n renderTextLayer={true}\n renderAnnotationLayer={true}\n width={width * scale}\n className=\"h-auto w-full transition-[width] duration-[600ms] ease-in-out mx-auto\"\n />\n </Document>\n </div>\n </div>\n );\n};\n"]}
|