@cyber-harbour/ui 2.0.54 → 2.1.0
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-DXBZZSBO.mjs → PdfDriver-B23AQDZV.mjs} +3 -3
- package/dist/{PdfDriver-DXBZZSBO.mjs.map → PdfDriver-B23AQDZV.mjs.map} +1 -1
- package/dist/{PdfDriver-YUAER26N.js → PdfDriver-LHN7B43D.js} +3 -3
- package/dist/{PdfDriver-YUAER26N.js.map → PdfDriver-LHN7B43D.js.map} +1 -1
- package/dist/chunk-FGJLQ56A.mjs +1340 -0
- package/dist/{chunk-NEKSHIKN.mjs.map → chunk-FGJLQ56A.mjs.map} +1 -1
- package/dist/chunk-ZIIDXY3U.js +1340 -0
- package/dist/{chunk-6LI43DVZ.js.map → chunk-ZIIDXY3U.js.map} +1 -1
- package/dist/index.css +1 -1
- package/dist/index.css.map +1 -1
- package/dist/index.js +18 -18
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +16 -16
- 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 +16 -3
- package/dist/chunk-6LI43DVZ.js +0 -1340
- package/dist/chunk-NEKSHIKN.mjs +0 -1340
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import {a,z,Pa,ob,ma}from'./chunk-
|
|
2
|
-
export{G as PdfDriver};//# sourceMappingURL=PdfDriver-
|
|
3
|
-
//# sourceMappingURL=PdfDriver-
|
|
1
|
+
import {a,z,Pa,ob,ma}from'./chunk-FGJLQ56A.mjs';import {useState,useRef,useEffect,useMemo}from'react';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 l="/pdfjs";typeof window<"u"&&typeof document<"u"&&(pdfjs.GlobalWorkerOptions.workerSrc=`${l}/pdf.worker.min.js`);var G=a(({url:b})=>{let[a$1,y]=useState(0),[d,m]=useState(1),[N,f]=useState(true),[p,P]=useState(null),[k,L]=useState(400),[c,v]=useState(1),u=useRef(null),D=a(()=>{v(t=>Math.min(t+.25,4));},"handleZoomIn"),j=a(()=>{v(t=>Math.max(t-.25,.25));},"handleZoomOut");useEffect(()=>{let t=a(()=>{u.current&&L(u.current.offsetWidth-70);},"updateSize");return t(),window.addEventListener("resize",t),()=>window.removeEventListener("resize",t)},[]);let z$1=useMemo(()=>({cMapPacked:true,cMapUrl:`${l}/cmaps/`,standardFontDataUrl:`${l}/standard_fonts/`,wasmUrl:`${l}/wasm/`,iccUrl:`${l}/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(i=>i+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..."})}),a$1>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:a$1,value:d,onChange:t=>{let i=parseInt(t.target.value,10);i>=1&&i<=a$1&&m(i);},className:"w-15 px-1 py-1 border border-gray-400! rounded text-center"}),"/ ",a$1]}),jsx(z,{variant:"outlined","aria-label":"next page",color:"secondary",size:"small",type:"button",disabled:d>=a$1,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:c<=.25,p:7}),jsxs(ob,{py:5,px:8,children:[c*100,"%"]}),jsx(z,{variant:"outlined","aria-label":"zoom-in",size:"small",color:"secondary",icon:jsx(ma,{style:{width:14,height:14}}),onClick:D,disabled:c>=4,p:8})]})]}),jsx("div",{ref:u,className:"flex-1 overflow-auto",children:jsx(Document,{options:z$1,file:b,onLoadSuccess:E,onLoadError:C,loading:"",className:"mx-auto w-fit",children:jsx(Page,{pageNumber:d,renderTextLayer:true,renderAnnotationLayer:true,width:k*c,className:"h-auto w-full transition-[width] duration-[600ms] ease-in-out mx-auto"})})})]})},"PdfDriver");
|
|
2
|
+
export{G as PdfDriver};//# sourceMappingURL=PdfDriver-B23AQDZV.mjs.map
|
|
3
|
+
//# sourceMappingURL=PdfDriver-B23AQDZV.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","options","useMemo","onDocumentLoadSuccess","onDocumentLoadError","changePage","offset","prevPageNumber","previousPage","nextPage","jsx","jsxs","Button","e","page","MinusIcon","Box","PlusIcon","Document","Page"],"mappings":"qRAMA,IAAMA,CAAAA,CAAW,QAGb,CAAA,OAAO,OAAW,GAAe,EAAA,OAAO,QAAa,CAAA,GAAA,GACvDC,KAAM,CAAA,mBAAA,CAAoB,SAAY,CAAA,CAAA,EAAGD,CAAQ,CAAA,kBAAA,CAAA,CAAA,CAOtCE,IAAAA,CAAAA,CAAsCC,CAAA,CAAA,CAAC,CAAE,GAAA,CAAAC,CAAI,CAAM,GAAA,CAC9D,GAAM,CAACC,GAAUC,CAAAA,CAAW,CAAIC,CAAAA,QAAAA,CAAiB,CAAC,CAC5C,CAAA,CAACC,CAAYC,CAAAA,CAAa,CAAIF,CAAAA,QAAAA,CAAiB,CAAC,CAAA,CAChD,CAACG,CAASC,CAAAA,CAAU,CAAIJ,CAAAA,QAAAA,CAAkB,IAAI,CAAA,CAC9C,CAACK,CAAAA,CAAOC,CAAQ,CAAA,CAAIN,QAAwB,CAAA,IAAI,CAChD,CAAA,CAACO,CAAOC,CAAAA,CAAQ,EAAIR,QAAiB,CAAA,GAAG,CACxC,CAAA,CAACS,CAAOC,CAAAA,CAAQ,CAAIV,CAAAA,QAAAA,CAAS,CAAC,CAC9BW,CAAAA,CAAAA,CAAeC,MAAuB,CAAA,IAAI,CAC1CC,CAAAA,CAAAA,CAAejB,CAAA,CAAA,IAAM,CACzBc,CAAUI,CAAAA,CAAAA,EAAS,IAAK,CAAA,GAAA,CAAIA,CAAO,CAAA,GAAA,CAAM,CAAC,CAAC,EAC7C,CAAA,CAFqB,cAIfC,CAAAA,CAAAA,CAAAA,CAAgBnB,CAAA,CAAA,IAAM,CAC1Bc,CAAAA,CAAUI,GAAS,IAAK,CAAA,GAAA,CAAIA,CAAO,CAAA,GAAA,CAAM,GAAI,CAAC,EAChD,CAAA,CAFsB,iBAItBE,SAAU,CAAA,IAAM,CACd,IAAMC,CAAarB,CAAAA,CAAAA,CAAA,IAAM,CACnBe,EAAa,OACfH,EAAAA,CAAAA,CAASG,CAAa,CAAA,OAAA,CAAQ,WAAc,CAAA,EAAE,EAElD,CAAA,CAJmB,YAKnB,CAAA,CAAA,OAAAM,CAAW,EAAA,CACX,MAAO,CAAA,gBAAA,CAAiB,QAAUA,CAAAA,CAAU,EACrC,IAAM,MAAA,CAAO,mBAAoB,CAAA,QAAA,CAAUA,CAAU,CAC9D,CAAG,CAAA,EAAE,CAEL,CAAA,IAAMC,GAAUC,CAAAA,OAAAA,CACd,KAAO,CACL,UAAY,CAAA,IAAA,CACZ,QAAS,CAAG1B,EAAAA,CAAQ,CACpB,OAAA,CAAA,CAAA,mBAAA,CAAqB,CAAGA,EAAAA,CAAQ,CAChC,gBAAA,CAAA,CAAA,OAAA,CAAS,CAAGA,EAAAA,CAAQ,CACpB,MAAA,CAAA,CAAA,MAAA,CAAQ,CAAGA,EAAAA,CAAQ,CACrB,KAAA,CAAA,CAAA,CAAA,CACA,EACF,CAAA,CAIA,SAAS2B,CAAAA,CAAsB,CAAE,QAAA,CAAAtB,CAAS,CAAA,CAA+B,CACvEC,CAAYD,CAAAA,CAAQ,CACpBM,CAAAA,CAAAA,CAAW,KAAK,EAClB,CAHSR,CAAAA,CAAAwB,EAAA,uBAKT,CAAA,CAAA,SAASC,CAAoBhB,CAAAA,CAAAA,CAAoB,CAC/CC,CAAAA,CAAS,CAAuBD,oBAAAA,EAAAA,CAAAA,CAAM,OAAO,CAAA,CAAE,CAC/CD,CAAAA,CAAAA,CAAW,KAAK,EAClB,CAHSR,CAAAA,CAAAyB,EAAA,qBAKT,CAAA,CAAA,SAASC,CAAWC,CAAAA,CAAAA,CAAsB,CACxCrB,CAAAA,CAAesB,CAAmBA,EAAAA,CAAAA,CAAiBD,CAAM,EAC3D,CAFS3B,CAAA0B,CAAAA,CAAAA,CAAA,YAIT,CAAA,CAAA,SAASG,CAAqB,EAAA,CAC5BH,EAAW,EAAE,EACf,CAFS1B,CAAAA,CAAA6B,CAAA,CAAA,cAAA,CAAA,CAIT,SAASC,CAAAA,EAAiB,CACxBJ,CAAW,CAAA,CAAC,EACd,CAEA,OAJS1B,CAAAA,CAAA8B,CAAA,CAAA,UAAA,CAAA,CAILrB,EAEAsB,GAAC,CAAA,KAAA,CAAA,CAAI,SAAU,CAAA,gDAAA,CACb,QAAAA,CAAAA,GAAAA,CAAC,KAAI,CAAA,CAAA,SAAA,CAAU,2BACb,QAAAA,CAAAA,GAAAA,CAAC,GAAG,CAAA,CAAA,QAAA,CAAAtB,CAAM,CAAA,CAAA,CACZ,CACF,CAAA,CAAA,CAKFuB,KAAC,KAAI,CAAA,CAAA,SAAA,CAAU,kDACZ,CAAA,QAAA,CAAA,CAAAzB,CACCwB,EAAAA,GAAAA,CAAC,KAAI,CAAA,CAAA,SAAA,CAAU,yCACb,CAAA,QAAA,CAAAA,GAAC,CAAA,KAAA,CAAA,CAAI,SAAU,CAAA,eAAA,CAAgB,QAAc,CAAA,gBAAA,CAAA,CAAA,CAC/C,EAED7B,GAAW,CAAA,CAAA,EACV8B,IAAC,CAAA,KAAA,CAAA,CAAI,SAAU,CAAA,yEAAA,CACb,QAAAA,CAAAA,CAAAA,IAAAA,CAAC,OAAI,SAAU,CAAA,wCAAA,CACb,QAAAD,CAAAA,CAAAA,GAAAA,CAACE,CAAA,CAAA,CACC,OAAQ,CAAA,UAAA,CACR,aAAW,eACX,CAAA,KAAA,CAAM,WACN,CAAA,IAAA,CAAK,OACL,CAAA,IAAA,CAAK,QACL,CAAA,QAAA,CAAU5B,CAAc,EAAA,CAAA,CACxB,OAASwB,CAAAA,CAAAA,CACT,CAAG,CAAA,CAAA,CACH,IACEE,CAAAA,GAAAA,CAAC,OACC,KAAM,CAAA,4BAAA,CACN,OAAQ,CAAA,WAAA,CACR,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,QAAAD,CAAAA,CAAAA,GAAAA,CAAC,OACC,CAAA,CAAA,IAAA,CAAK,QACL,CAAA,GAAA,CAAK,CACL,CAAA,GAAA,CAAK7B,IACL,KAAOG,CAAAA,CAAAA,CACP,QAAW6B,CAAAA,CAAAA,EAAM,CACf,IAAMC,CAAO,CAAA,QAAA,CAASD,EAAE,MAAO,CAAA,KAAA,CAAO,EAAE,CAAA,CACpCC,CAAQ,EAAA,CAAA,EAAKA,CAAQjC,EAAAA,GAAAA,EACvBI,EAAc6B,CAAI,EAEtB,CACA,CAAA,SAAA,CAAU,4DACZ,CAAA,CAAA,CAAE,IACCjC,CAAAA,GAAAA,CAAAA,CACL,EACA6B,GAACE,CAAAA,CAAAA,CAAA,CACC,OAAA,CAAQ,UACR,CAAA,YAAA,CAAW,WACX,CAAA,KAAA,CAAM,YACN,IAAK,CAAA,OAAA,CACL,IAAK,CAAA,QAAA,CACL,QAAU5B,CAAAA,CAAAA,EAAcH,GACxB,CAAA,OAAA,CAAS4B,EACT,CAAG,CAAA,CAAA,CACH,IACEC,CAAAA,GAAAA,CAAC,KACC,CAAA,CAAA,KAAA,CAAM,4BACN,CAAA,OAAA,CAAQ,YACR,IAAK,CAAA,MAAA,CACL,MAAO,CAAA,cAAA,CACP,WAAY,CAAA,GAAA,CACZ,aAAc,CAAA,OAAA,CACd,cAAe,CAAA,OAAA,CAEf,QAAAA,CAAAA,GAAAA,CAAC,MAAK,CAAA,CAAA,CAAA,CAAE,eAAgB,CAAA,CAAA,CAC1B,EAEJ,CACF,CAAA,CAAA,CAAA,CACAC,IAAC,CAAA,KAAA,CAAA,CAAI,SAAU,CAAA,wCAAA,CACb,QAAAD,CAAAA,CAAAA,GAAAA,CAACE,EAAA,CACC,OAAA,CAAQ,UACR,CAAA,YAAA,CAAW,UACX,CAAA,KAAA,CAAM,WACN,CAAA,IAAA,CAAK,QACL,IAAMF,CAAAA,GAAAA,CAACK,EAAA,CAAA,CAAU,KAAO,CAAA,CAAE,KAAO,CAAA,EAAA,CAAI,MAAQ,CAAA,EAAG,CAAG,CAAA,CAAA,CACnD,OAASjB,CAAAA,CAAAA,CACT,QAAUN,CAAAA,CAAAA,EAAS,IACnB,CAAG,CAAA,CAAA,CACL,CACAmB,CAAAA,IAAAA,CAACK,EAAA,CAAA,CAAI,EAAI,CAAA,CAAA,CAAG,GAAI,CACb,CAAA,QAAA,CAAA,CAAAxB,CAAQ,CAAA,GAAA,CAAI,GACf,CAAA,CAAA,CAAA,CACAkB,GAACE,CAAAA,CAAAA,CAAA,CACC,OAAQ,CAAA,UAAA,CACR,YAAW,CAAA,SAAA,CACX,IAAK,CAAA,OAAA,CACL,KAAM,CAAA,WAAA,CACN,IAAMF,CAAAA,GAAAA,CAACO,EAAA,CAAA,CAAS,KAAO,CAAA,CAAE,KAAO,CAAA,EAAA,CAAI,OAAQ,EAAG,CAAA,CAAG,CAClD,CAAA,OAAA,CAASrB,CACT,CAAA,QAAA,CAAUJ,CAAS,EAAA,CAAA,CACnB,EAAG,CACL,CAAA,CAAA,CAAA,CACF,CACF,CAAA,CAAA,CAAA,CAEFkB,GAAC,CAAA,KAAA,CAAA,CAAI,GAAKhB,CAAAA,CAAAA,CAAc,UAAU,sBAChC,CAAA,QAAA,CAAAgB,GAACQ,CAAAA,QAAAA,CAAA,CACC,OAAA,CAASjB,GACT,CAAA,IAAA,CAAMrB,EACN,aAAeuB,CAAAA,CAAAA,CACf,WAAaC,CAAAA,CAAAA,CACb,OAAQ,CAAA,EAAA,CACR,SAAU,CAAA,eAAA,CAEV,SAAAM,GAACS,CAAAA,IAAAA,CAAA,CACC,UAAA,CAAYnC,CACZ,CAAA,eAAA,CAAiB,IACjB,CAAA,qBAAA,CAAuB,KACvB,KAAOM,CAAAA,CAAAA,CAAQE,CACf,CAAA,SAAA,CAAU,uEACZ,CAAA,CAAA,CACF,CACF,CAAA,CAAA,CAAA,CACF,CAEJ,CAjMmD,CAAA,WAAA","file":"PdfDriver-DXBZZSBO.mjs","sourcesContent":["import React, { useEffect, useMemo, useRef, useState } from 'react';\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 const updateSize = () => {\n if (containerRef.current) {\n setWidth(containerRef.current.offsetWidth - 70);\n }\n };\n updateSize();\n window.addEventListener('resize', updateSize);\n return () => window.removeEventListener('resize', updateSize);\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\">\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","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-B23AQDZV.mjs","sourcesContent":["import React, { useEffect, useMemo, useRef, useState } from 'react';\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 const updateSize = () => {\n if (containerRef.current) {\n setWidth(containerRef.current.offsetWidth - 70);\n }\n };\n updateSize();\n window.addEventListener('resize', updateSize);\n return () => window.removeEventListener('resize', updateSize);\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\">\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=H;//# sourceMappingURL=PdfDriver-
|
|
3
|
-
//# sourceMappingURL=PdfDriver-
|
|
1
|
+
'use strict';var chunkZIIDXY3U_js=require('./chunk-ZIIDXY3U.js'),react=require('react'),reactPdf=require('react-pdf');require('react-pdf/dist/Page/AnnotationLayer.css'),require('react-pdf/dist/Page/TextLayer.css');var jsxRuntime=require('react/jsx-runtime');var l="/pdfjs";typeof window<"u"&&typeof document<"u"&&(reactPdf.pdfjs.GlobalWorkerOptions.workerSrc=`${l}/pdf.worker.min.js`);var H=chunkZIIDXY3U_js.a(({url:b})=>{let[a,y]=react.useState(0),[d,m]=react.useState(1),[N,f]=react.useState(true),[p,P]=react.useState(null),[k,L]=react.useState(400),[c,v]=react.useState(1),u=react.useRef(null),D=chunkZIIDXY3U_js.a(()=>{v(t=>Math.min(t+.25,4));},"handleZoomIn"),j=chunkZIIDXY3U_js.a(()=>{v(t=>Math.max(t-.25,.25));},"handleZoomOut");react.useEffect(()=>{let t=chunkZIIDXY3U_js.a(()=>{u.current&&L(u.current.offsetWidth-70);},"updateSize");return t(),window.addEventListener("resize",t),()=>window.removeEventListener("resize",t)},[]);let z=react.useMemo(()=>({cMapPacked:true,cMapUrl:`${l}/cmaps/`,standardFontDataUrl:`${l}/standard_fonts/`,wasmUrl:`${l}/wasm/`,iccUrl:`${l}/icc/`}),[]);function E({numPages:t}){y(t),f(false);}chunkZIIDXY3U_js.a(E,"onDocumentLoadSuccess");function C(t){P(`Failed to load PDF: ${t.message}`),f(false);}chunkZIIDXY3U_js.a(C,"onDocumentLoadError");function g(t){m(i=>i+t);}chunkZIIDXY3U_js.a(g,"changePage");function M(){g(-1);}chunkZIIDXY3U_js.a(M,"previousPage");function S(){g(1);}return chunkZIIDXY3U_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..."})}),a>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(chunkZIIDXY3U_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:a,value:d,onChange:t=>{let i=parseInt(t.target.value,10);i>=1&&i<=a&&m(i);},className:"w-15 px-1 py-1 border border-gray-400! rounded text-center"}),"/ ",a]}),jsxRuntime.jsx(chunkZIIDXY3U_js.z,{variant:"outlined","aria-label":"next page",color:"secondary",size:"small",type:"button",disabled:d>=a,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(chunkZIIDXY3U_js.z,{variant:"outlined","aria-label":"zoom-out",color:"secondary",size:"small",icon:jsxRuntime.jsx(chunkZIIDXY3U_js.Pa,{style:{width:20,height:20}}),onClick:j,disabled:c<=.25,p:7}),jsxRuntime.jsxs(chunkZIIDXY3U_js.ob,{py:5,px:8,children:[c*100,"%"]}),jsxRuntime.jsx(chunkZIIDXY3U_js.z,{variant:"outlined","aria-label":"zoom-in",size:"small",color:"secondary",icon:jsxRuntime.jsx(chunkZIIDXY3U_js.ma,{style:{width:14,height:14}}),onClick:D,disabled:c>=4,p:8})]})]}),jsxRuntime.jsx("div",{ref:u,className:"flex-1 overflow-auto",children:jsxRuntime.jsx(reactPdf.Document,{options:z,file:b,onLoadSuccess:E,onLoadError:C,loading:"",className:"mx-auto w-fit",children:jsxRuntime.jsx(reactPdf.Page,{pageNumber:d,renderTextLayer:true,renderAnnotationLayer:true,width:k*c,className:"h-auto w-full transition-[width] duration-[600ms] ease-in-out mx-auto"})})})]})},"PdfDriver");
|
|
2
|
+
exports.PdfDriver=H;//# sourceMappingURL=PdfDriver-LHN7B43D.js.map
|
|
3
|
+
//# sourceMappingURL=PdfDriver-LHN7B43D.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","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-YUAER26N.js","sourcesContent":["import React, { useEffect, useMemo, useRef, useState } from 'react';\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 const updateSize = () => {\n if (containerRef.current) {\n setWidth(containerRef.current.offsetWidth - 70);\n }\n };\n updateSize();\n window.addEventListener('resize', updateSize);\n return () => window.removeEventListener('resize', updateSize);\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\">\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","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-LHN7B43D.js","sourcesContent":["import React, { useEffect, useMemo, useRef, useState } from 'react';\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 const updateSize = () => {\n if (containerRef.current) {\n setWidth(containerRef.current.offsetWidth - 70);\n }\n };\n updateSize();\n window.addEventListener('resize', updateSize);\n return () => window.removeEventListener('resize', updateSize);\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\">\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"]}
|