@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.
@@ -1,3 +1,3 @@
1
- import {a,z,Pa,ob,ma}from'./chunk-FGJLQ56A.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-3CHKFA4R.mjs.map
3
- //# sourceMappingURL=PdfDriver-3CHKFA4R.mjs.map
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":"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","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 chunkZIIDXY3U_js=require('./chunk-ZIIDXY3U.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=chunkZIIDXY3U_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=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(()=>{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);}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(n=>n+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..."})}),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(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: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(chunkZIIDXY3U_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(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:u<=.25,p:7}),jsxRuntime.jsxs(chunkZIIDXY3U_js.ob,{py:5,px:8,children:[u*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: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-WZXWUWZB.js.map
3
- //# sourceMappingURL=PdfDriver-WZXWUWZB.js.map
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":"+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-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":"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","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"]}