@cyber-harbour/ui 2.1.23 → 2.1.24
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-HTH3EQDH.mjs → PdfDriver-JBTZ7E5F.mjs} +2 -2
- package/dist/{PdfDriver-HTH3EQDH.mjs.map → PdfDriver-JBTZ7E5F.mjs.map} +1 -1
- package/dist/{PdfDriver-L5WRYO6R.js → PdfDriver-XDMXZLNI.js} +2 -2
- package/dist/{PdfDriver-L5WRYO6R.js.map → PdfDriver-XDMXZLNI.js.map} +1 -1
- package/dist/{chunk-WWPTBIBH.mjs → chunk-5F7EBG5K.mjs} +12 -7
- package/dist/chunk-5F7EBG5K.mjs.map +1 -0
- package/dist/{chunk-64ZEBIDZ.js → chunk-QQ6EL7I4.js} +12 -7
- package/dist/chunk-QQ6EL7I4.js.map +1 -0
- package/dist/index.js +16 -16
- package/dist/index.mjs +2 -2
- package/package.json +1 -1
- package/dist/chunk-64ZEBIDZ.js.map +0 -1
- package/dist/chunk-WWPTBIBH.mjs.map +0 -1
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import {a,pb,Ya,z,la,ka,Pa,ma}from'./chunk-
|
|
2
|
-
//# sourceMappingURL=PdfDriver-
|
|
1
|
+
import {a,pb,Ya,z,la,ka,Pa,ma}from'./chunk-5F7EBG5K.mjs';import {useState,useRef,useCallback,useMemo,useEffect}from'react';import M from'lodash.debounce';import {pdfjs,Document,Page}from'react-pdf';import'react-pdf/dist/Page/AnnotationLayer.css';import'react-pdf/dist/Page/TextLayer.css';import {Virtuoso}from'react-virtuoso';import {jsx,jsxs}from'react/jsx-runtime';var f="/pdfjs";typeof window<"u"&&typeof document<"u"&&(pdfjs.GlobalWorkerOptions.workerSrc=`${f}/pdf.worker.min.js`);var ae=1e3,ie=400,le=150,ce=70,de=1.414,I=400,ye=a(({url:O})=>{let[s,k]=useState(0),[i,b]=useState(1),[H,T]=useState(true),[E,B]=useState(null),[v,F]=useState(I),[$,Z]=useState(I),[l,R]=useState(1),[x,G]=useState(I),[C,V]=useState(de),c=useRef(null),S=useRef(null),y=useRef(false),d=useRef(null),N=useRef(false),p=useCallback((e,r=true)=>{e<1||e>s||(y.current=true,S.current?.scrollToIndex({index:e-1,align:"start",behavior:r?"smooth":"auto"}),d.current&&clearTimeout(d.current),d.current=setTimeout(()=>{N.current&&(y.current=false);},ae));},[s]),w=useMemo(()=>M((e,r=false)=>{p(e,r);},ie),[p]),W=useCallback(()=>{R(e=>Math.min(e+.25,4));},[]),Y=useCallback(()=>{R(e=>Math.max(e-.25,.25));},[]);useEffect(()=>{if(!c.current)return;let e=M(()=>{c.current&&(F(c.current.offsetWidth-ce),Z(c.current.clientHeight));},le);e();let r=new ResizeObserver(e);return r.observe(c.current),()=>{r.disconnect(),e.cancel();}},[]);let J=useMemo(()=>({cMapPacked:true,cMapUrl:`${f}/cmaps/`,standardFontDataUrl:`${f}/standard_fonts/`,wasmUrl:`${f}/wasm/`,iccUrl:`${f}/icc/`}),[]),q=useCallback(({numPages:e})=>{k(e),T(false);},[]),K=useCallback(e=>{B(`Failed to load PDF: ${e.message}`),T(false);},[]),g=useCallback(e=>{let r=i+e;b(r),p(r);},[i,p]),Q=useCallback(()=>{g(-1);},[g]),X=useCallback(()=>{g(1);},[g]),ee=useCallback(e=>{if(y.current)return;let r=e.startIndex+1;r!==i&&b(r);},[i]);return useEffect(()=>(N.current=true,()=>{N.current=false,w.cancel(),d.current&&clearTimeout(d.current);}),[w]),useEffect(()=>{G(v*l*C);},[v,l,C]),E?jsx("div",{className:"flex items-center justify-center h-full w-full px-8.5",children:jsx("div",{className:"text-red-500 text-center",children:jsx("p",{children:E})})}):jsxs("div",{className:"h-full w-full flex flex-col overflow-hidden pb-5",children:[H&&jsx("div",{className:"flex items-center justify-center h-full px-8.5",children:jsx("div",{className:"text-gray-500",children:"Loading PDF..."})}),s>0&&jsxs("div",{className:"flex items-center justify-center md:justify-between flex-wrap gap-3 px-8.5 py-3",children:[jsxs(pb,{py:4,px:8,className:"flex items-center justify-start gap-1 rounded-[5px]!",children:[jsx(Ya,{color:"text.lighter",style:{fontSize:10},children:"Page:"}),jsxs("span",{className:"flex items-center gap-2 text-[12px]",children:[jsx("input",{type:"number",min:1,max:s,value:i,onChange:e=>{let r=parseInt(e.target.value,10);r>=1&&r<=s&&(b(r),w(r,false));},className:"w-15 px-1 py-1 text-end text-[12px]"}),"/ ",s]}),jsxs("div",{className:"flex flex-col gap-0.25 pl-1",children:[jsx(z,{variant:"empty","aria-label":"previous page",color:"secondary",size:"small",type:"button",disabled:i<=1,onClick:Q,icon:jsx(la,{style:{width:8,height:8}})}),jsx(z,{variant:"empty","aria-label":"next page",color:"secondary",size:"small",type:"button",disabled:i>=s,onClick:X,icon:jsx(ka,{style:{width:8,height:8}})})]})]}),jsxs("div",{className:"flex items-center justify-center gap-3",children:[jsx(z,{variant:"outlined","aria-label":"zoom-out",color:"default",size:"small",icon:jsx(Pa,{style:{width:20,height:20}}),onClick:Y,className:"bg-white! hover:bg-blue-50!",disabled:l<=.25,p:7}),jsxs(pb,{py:8,px:8,className:"flex items-center justify-between gap-1.5 min-w-21 rounded-[5px]!",children:[jsx(Ya,{color:"text.lighter",style:{fontSize:10},children:"Scale:"}),jsxs(Ya,{children:[l*100,"%"]})]}),jsx(z,{variant:"outlined","aria-label":"zoom-in",size:"small",color:"default",icon:jsx(ma,{style:{width:14,height:14}}),onClick:W,className:"bg-white! hover:bg-blue-50!",disabled:l>=4,p:10})]})]}),jsx("div",{ref:c,className:"flex-1 overflow-hidden min-h-0",children:jsx(Document,{options:J,file:O,onLoadSuccess:q,onLoadError:K,loading:jsx("div",{className:"flex items-center justify-center",style:{height:x},children:jsx("div",{className:"h-10 w-10 rounded-full border border-2 border-gray-200 animate-spin border-s-transparent"})}),children:jsx(Virtuoso,{ref:S,style:{height:$||"calc(100dvh - 190px)",width:"100%",scrollbarGutter:"stable both-edges"},totalCount:s,rangeChanged:ee,defaultItemHeight:x,itemContent:e=>jsx("div",{className:"mx-auto w-fit mb-4 border border-1 border-gray-100",children:jsx(Page,{pageNumber:e+1,renderTextLayer:true,renderAnnotationLayer:true,width:v*l,onLoadSuccess:r=>{if(e===0){let te=r.height/r.width;V(te);}},loading:jsx("div",{className:"flex items-center justify-center",style:{height:x},children:jsx("div",{className:"h-10 w-10 rounded-full border border-2 border-gray-200 animate-spin border-s-transparent"})}),className:"h-auto w-full transition-[width] duration-[600ms] ease-in-out"})})})})})]})},"PdfDriver");export{ye as PdfDriver};//# sourceMappingURL=PdfDriver-JBTZ7E5F.mjs.map
|
|
2
|
+
//# sourceMappingURL=PdfDriver-JBTZ7E5F.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/FileViewer/drivers/PdfDriver/PdfDriver.tsx"],"names":["BASE_DIR","pdfjs","SCROLL_ANIMATION_DURATION","INPUT_DEBOUNCE_DELAY","RESIZE_DEBOUNCE_DELAY","CONTAINER_PADDING","DEFAULT_RATIO_A4","DEFAULT_MIN_SIZE","PdfDriver","__name","url","numPages","setNumPages","useState","pageNumber","setPageNumber","loading","setLoading","error","setError","width","setWidth","height","setHeight","scale","setScale","defaultPageHeight","setDefaultPageHeight","pageAspectRatio","setPageAspectRatio","containerRef","useRef","virtuosoRef","isUserScrollingRef","scrollTimeoutRef","isMountedRef","scrollToPage","useCallback","page","smooth","debouncedScroll","useMemo","debounce","handleZoomIn","prev","handleZoomOut","useEffect","updateSize","observer","options","onDocumentLoadSuccess","onDocumentLoadError","changePage","offset","newPage","previousPage","nextPage","handleRangeChanged","range","visiblePage","jsx","jsxs","Box","Typography","Button","ChevronUpIcon","ChevronDownIcon","MinusIcon","PlusIcon","Document","Virtuoso","index","Page","ratio"],"mappings":"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","file":"PdfDriver-HTH3EQDH.mjs","sourcesContent":["import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport debounce from 'lodash.debounce';\nimport { Document, Page, pdfjs } from 'react-pdf';\nimport 'react-pdf/dist/Page/AnnotationLayer.css';\nimport 'react-pdf/dist/Page/TextLayer.css';\nimport { Virtuoso, VirtuosoHandle } from 'react-virtuoso';\nimport { Box, Button, ChevronDownIcon, ChevronUpIcon, MinusIcon, PlusIcon, Typography } from '../../../Core';\n\nconst BASE_DIR = '/pdfjs';\n\n// Set up the worker - self-hosted configuration (client-side only)\nif (typeof window !== 'undefined' && typeof document !== 'undefined') {\n pdfjs.GlobalWorkerOptions.workerSrc = `${BASE_DIR}/pdf.worker.min.js`;\n}\n\ninterface PdfDriverProps {\n url: string;\n}\nconst SCROLL_ANIMATION_DURATION = 1000;\nconst INPUT_DEBOUNCE_DELAY = 400;\nconst RESIZE_DEBOUNCE_DELAY = 150;\nconst CONTAINER_PADDING = 70;\nconst DEFAULT_RATIO_A4 = 1.414;\nconst DEFAULT_MIN_SIZE = 400;\n\nexport const PdfDriver: React.FC<PdfDriverProps> = ({ url }) => {\n const [numPages, setNumPages] = useState<number>(0);\n const [pageNumber, setPageNumber] = useState<number>(1);\n const [loading, setLoading] = useState<boolean>(true);\n const [error, setError] = useState<string | null>(null);\n const [width, setWidth] = useState<number>(DEFAULT_MIN_SIZE);\n const [height, setHeight] = useState<number>(DEFAULT_MIN_SIZE);\n const [scale, setScale] = useState(1);\n const [defaultPageHeight, setDefaultPageHeight] = useState(DEFAULT_MIN_SIZE);\n const [pageAspectRatio, setPageAspectRatio] = useState(DEFAULT_RATIO_A4);\n\n const containerRef = useRef<HTMLDivElement>(null);\n const virtuosoRef = useRef<VirtuosoHandle>(null);\n const isUserScrollingRef = useRef<boolean>(false);\n const scrollTimeoutRef = useRef<NodeJS.Timeout | null>(null);\n const isMountedRef = useRef(false);\n\n const scrollToPage = useCallback(\n (page: number, smooth = true) => {\n if (page < 1 || page > numPages) return;\n\n isUserScrollingRef.current = true;\n virtuosoRef.current?.scrollToIndex({\n index: page - 1,\n align: 'start',\n behavior: smooth ? 'smooth' : 'auto',\n });\n\n if (scrollTimeoutRef.current) {\n clearTimeout(scrollTimeoutRef.current);\n }\n\n scrollTimeoutRef.current = setTimeout(() => {\n if (isMountedRef.current) isUserScrollingRef.current = false;\n }, SCROLL_ANIMATION_DURATION);\n },\n [numPages]\n );\n\n const debouncedScroll = useMemo(() => {\n return debounce((page: number, smooth = false) => {\n scrollToPage(page, smooth);\n }, INPUT_DEBOUNCE_DELAY);\n }, [scrollToPage]);\n\n const handleZoomIn = useCallback(() => {\n setScale((prev) => Math.min(prev + 0.25, 4));\n }, []);\n\n const handleZoomOut = useCallback(() => {\n setScale((prev) => Math.max(prev - 0.25, 0.25));\n }, []);\n\n useEffect(() => {\n if (!containerRef.current) return;\n const updateSize = debounce(() => {\n if (containerRef.current) {\n setWidth(containerRef.current.offsetWidth - CONTAINER_PADDING);\n setHeight(containerRef.current.clientHeight);\n }\n }, RESIZE_DEBOUNCE_DELAY);\n updateSize();\n const observer = new ResizeObserver(updateSize);\n observer.observe(containerRef.current);\n return () => {\n observer.disconnect();\n updateSize.cancel();\n };\n }, []);\n\n const options = useMemo(\n () => ({\n cMapPacked: true,\n cMapUrl: `${BASE_DIR}/cmaps/`,\n standardFontDataUrl: `${BASE_DIR}/standard_fonts/`,\n wasmUrl: `${BASE_DIR}/wasm/`,\n iccUrl: `${BASE_DIR}/icc/`,\n }),\n []\n );\n\n const onDocumentLoadSuccess = useCallback(({ numPages }: { numPages: number }): void => {\n setNumPages(numPages);\n setLoading(false);\n }, []);\n\n const onDocumentLoadError = useCallback((error: Error): void => {\n setError(`Failed to load PDF: ${error.message}`);\n setLoading(false);\n }, []);\n\n const changePage = useCallback(\n (offset: number): void => {\n const newPage = pageNumber + offset;\n setPageNumber(newPage);\n scrollToPage(newPage);\n },\n [pageNumber, scrollToPage]\n );\n\n const previousPage = useCallback((): void => {\n changePage(-1);\n }, [changePage]);\n\n const nextPage = useCallback((): void => {\n changePage(1);\n }, [changePage]);\n\n const handleRangeChanged = useCallback(\n (range: { startIndex: number; endIndex: number }) => {\n if (isUserScrollingRef.current) {\n return;\n }\n const visiblePage = range.startIndex + 1;\n if (visiblePage !== pageNumber) {\n setPageNumber(visiblePage);\n }\n },\n [pageNumber]\n );\n\n useEffect(() => {\n isMountedRef.current = true;\n return () => {\n isMountedRef.current = false;\n debouncedScroll.cancel();\n if (scrollTimeoutRef.current) {\n clearTimeout(scrollTimeoutRef.current);\n }\n };\n }, [debouncedScroll]);\n\n useEffect(() => {\n setDefaultPageHeight(width * scale * pageAspectRatio);\n }, [width, scale, pageAspectRatio]);\n\n if (error) {\n return (\n <div className=\"flex items-center justify-center h-full w-full px-8.5\">\n <div className=\"text-red-500 text-center\">\n <p>{error}</p>\n </div>\n </div>\n );\n }\n\n return (\n <div className=\"h-full w-full flex flex-col overflow-hidden pb-5\">\n {loading && (\n <div className=\"flex items-center justify-center h-full px-8.5\">\n <div className=\"text-gray-500\">Loading PDF...</div>\n </div>\n )}\n {numPages > 0 && (\n <div className=\"flex items-center justify-center md:justify-between flex-wrap gap-3 px-8.5 py-3\">\n <Box py={4} px={8} className=\"flex items-center justify-start gap-1 rounded-[5px]!\">\n <Typography color=\"text.lighter\" style={{ fontSize: 10 }}>\n Page:\n </Typography>\n <span className=\"flex items-center gap-2 text-[12px]\">\n <input\n type=\"number\"\n min={1}\n max={numPages}\n value={pageNumber}\n onChange={(e) => {\n const page = parseInt(e.target.value, 10);\n if (page >= 1 && page <= numPages) {\n setPageNumber(page);\n debouncedScroll(page, false);\n }\n }}\n className=\"w-15 px-1 py-1 text-end text-[12px]\"\n />\n / {numPages}\n </span>\n <div className=\"flex flex-col gap-0.25 pl-1\">\n <Button\n variant=\"empty\"\n aria-label=\"previous page\"\n color=\"secondary\"\n size=\"small\"\n type=\"button\"\n disabled={pageNumber <= 1}\n onClick={previousPage}\n icon={<ChevronUpIcon style={{ width: 8, height: 8 }} />}\n />\n <Button\n variant=\"empty\"\n aria-label=\"next page\"\n color=\"secondary\"\n size=\"small\"\n type=\"button\"\n disabled={pageNumber >= numPages}\n onClick={nextPage}\n icon={<ChevronDownIcon style={{ width: 8, height: 8 }} />}\n />\n </div>\n </Box>\n <div className=\"flex items-center justify-center gap-3\">\n <Button\n variant=\"outlined\"\n aria-label=\"zoom-out\"\n color=\"default\"\n size=\"small\"\n icon={<MinusIcon style={{ width: 20, height: 20 }} />}\n onClick={handleZoomOut}\n className=\"bg-white! hover:bg-blue-50!\"\n disabled={scale <= 0.25}\n p={7}\n />\n <Box py={8} px={8} className=\"flex items-center justify-between gap-1.5 min-w-21 rounded-[5px]!\">\n <Typography color=\"text.lighter\" style={{ fontSize: 10 }}>\n Scale:\n </Typography>\n <Typography>{scale * 100}%</Typography>\n </Box>\n <Button\n variant=\"outlined\"\n aria-label=\"zoom-in\"\n size=\"small\"\n color=\"default\"\n icon={<PlusIcon style={{ width: 14, height: 14 }} />}\n onClick={handleZoomIn}\n className=\"bg-white! hover:bg-blue-50!\"\n disabled={scale >= 4}\n p={10}\n />\n </div>\n </div>\n )}\n <div ref={containerRef} className=\"flex-1 overflow-hidden min-h-0\">\n <Document\n options={options}\n file={url}\n onLoadSuccess={onDocumentLoadSuccess}\n onLoadError={onDocumentLoadError}\n loading={\n <div className=\"flex items-center justify-center\" style={{ height: defaultPageHeight }}>\n <div className=\"h-10 w-10 rounded-full border border-2 border-gray-200 animate-spin border-s-transparent\" />\n </div>\n }\n >\n <Virtuoso\n ref={virtuosoRef}\n style={{ height: height || 'calc(100dvh - 190px)', width: '100%', scrollbarGutter: 'stable both-edges' }}\n totalCount={numPages}\n rangeChanged={handleRangeChanged}\n defaultItemHeight={defaultPageHeight}\n itemContent={(index) => (\n <div className=\"mx-auto w-fit mb-4 border border-1 border-gray-100\">\n <Page\n pageNumber={index + 1}\n renderTextLayer={true}\n renderAnnotationLayer={true}\n width={width * scale}\n onLoadSuccess={(page) => {\n if (index === 0) {\n const ratio = page.height / page.width;\n setPageAspectRatio(ratio);\n }\n }}\n loading={\n <div className=\"flex items-center justify-center\" style={{ height: defaultPageHeight }}>\n <div className=\"h-10 w-10 rounded-full border border-2 border-gray-200 animate-spin border-s-transparent\" />\n </div>\n }\n className=\"h-auto w-full transition-[width] duration-[600ms] ease-in-out\"\n />\n </div>\n )}\n />\n </Document>\n </div>\n </div>\n );\n};\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/FileViewer/drivers/PdfDriver/PdfDriver.tsx"],"names":["BASE_DIR","pdfjs","SCROLL_ANIMATION_DURATION","INPUT_DEBOUNCE_DELAY","RESIZE_DEBOUNCE_DELAY","CONTAINER_PADDING","DEFAULT_RATIO_A4","DEFAULT_MIN_SIZE","PdfDriver","__name","url","numPages","setNumPages","useState","pageNumber","setPageNumber","loading","setLoading","error","setError","width","setWidth","height","setHeight","scale","setScale","defaultPageHeight","setDefaultPageHeight","pageAspectRatio","setPageAspectRatio","containerRef","useRef","virtuosoRef","isUserScrollingRef","scrollTimeoutRef","isMountedRef","scrollToPage","useCallback","page","smooth","debouncedScroll","useMemo","debounce","handleZoomIn","prev","handleZoomOut","useEffect","updateSize","observer","options","onDocumentLoadSuccess","onDocumentLoadError","changePage","offset","newPage","previousPage","nextPage","handleRangeChanged","range","visiblePage","jsx","jsxs","Box","Typography","Button","ChevronUpIcon","ChevronDownIcon","MinusIcon","PlusIcon","Document","Virtuoso","index","Page","ratio"],"mappings":"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","file":"PdfDriver-JBTZ7E5F.mjs","sourcesContent":["import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport debounce from 'lodash.debounce';\nimport { Document, Page, pdfjs } from 'react-pdf';\nimport 'react-pdf/dist/Page/AnnotationLayer.css';\nimport 'react-pdf/dist/Page/TextLayer.css';\nimport { Virtuoso, VirtuosoHandle } from 'react-virtuoso';\nimport { Box, Button, ChevronDownIcon, ChevronUpIcon, MinusIcon, PlusIcon, Typography } from '../../../Core';\n\nconst BASE_DIR = '/pdfjs';\n\n// Set up the worker - self-hosted configuration (client-side only)\nif (typeof window !== 'undefined' && typeof document !== 'undefined') {\n pdfjs.GlobalWorkerOptions.workerSrc = `${BASE_DIR}/pdf.worker.min.js`;\n}\n\ninterface PdfDriverProps {\n url: string;\n}\nconst SCROLL_ANIMATION_DURATION = 1000;\nconst INPUT_DEBOUNCE_DELAY = 400;\nconst RESIZE_DEBOUNCE_DELAY = 150;\nconst CONTAINER_PADDING = 70;\nconst DEFAULT_RATIO_A4 = 1.414;\nconst DEFAULT_MIN_SIZE = 400;\n\nexport const PdfDriver: React.FC<PdfDriverProps> = ({ url }) => {\n const [numPages, setNumPages] = useState<number>(0);\n const [pageNumber, setPageNumber] = useState<number>(1);\n const [loading, setLoading] = useState<boolean>(true);\n const [error, setError] = useState<string | null>(null);\n const [width, setWidth] = useState<number>(DEFAULT_MIN_SIZE);\n const [height, setHeight] = useState<number>(DEFAULT_MIN_SIZE);\n const [scale, setScale] = useState(1);\n const [defaultPageHeight, setDefaultPageHeight] = useState(DEFAULT_MIN_SIZE);\n const [pageAspectRatio, setPageAspectRatio] = useState(DEFAULT_RATIO_A4);\n\n const containerRef = useRef<HTMLDivElement>(null);\n const virtuosoRef = useRef<VirtuosoHandle>(null);\n const isUserScrollingRef = useRef<boolean>(false);\n const scrollTimeoutRef = useRef<NodeJS.Timeout | null>(null);\n const isMountedRef = useRef(false);\n\n const scrollToPage = useCallback(\n (page: number, smooth = true) => {\n if (page < 1 || page > numPages) return;\n\n isUserScrollingRef.current = true;\n virtuosoRef.current?.scrollToIndex({\n index: page - 1,\n align: 'start',\n behavior: smooth ? 'smooth' : 'auto',\n });\n\n if (scrollTimeoutRef.current) {\n clearTimeout(scrollTimeoutRef.current);\n }\n\n scrollTimeoutRef.current = setTimeout(() => {\n if (isMountedRef.current) isUserScrollingRef.current = false;\n }, SCROLL_ANIMATION_DURATION);\n },\n [numPages]\n );\n\n const debouncedScroll = useMemo(() => {\n return debounce((page: number, smooth = false) => {\n scrollToPage(page, smooth);\n }, INPUT_DEBOUNCE_DELAY);\n }, [scrollToPage]);\n\n const handleZoomIn = useCallback(() => {\n setScale((prev) => Math.min(prev + 0.25, 4));\n }, []);\n\n const handleZoomOut = useCallback(() => {\n setScale((prev) => Math.max(prev - 0.25, 0.25));\n }, []);\n\n useEffect(() => {\n if (!containerRef.current) return;\n const updateSize = debounce(() => {\n if (containerRef.current) {\n setWidth(containerRef.current.offsetWidth - CONTAINER_PADDING);\n setHeight(containerRef.current.clientHeight);\n }\n }, RESIZE_DEBOUNCE_DELAY);\n updateSize();\n const observer = new ResizeObserver(updateSize);\n observer.observe(containerRef.current);\n return () => {\n observer.disconnect();\n updateSize.cancel();\n };\n }, []);\n\n const options = useMemo(\n () => ({\n cMapPacked: true,\n cMapUrl: `${BASE_DIR}/cmaps/`,\n standardFontDataUrl: `${BASE_DIR}/standard_fonts/`,\n wasmUrl: `${BASE_DIR}/wasm/`,\n iccUrl: `${BASE_DIR}/icc/`,\n }),\n []\n );\n\n const onDocumentLoadSuccess = useCallback(({ numPages }: { numPages: number }): void => {\n setNumPages(numPages);\n setLoading(false);\n }, []);\n\n const onDocumentLoadError = useCallback((error: Error): void => {\n setError(`Failed to load PDF: ${error.message}`);\n setLoading(false);\n }, []);\n\n const changePage = useCallback(\n (offset: number): void => {\n const newPage = pageNumber + offset;\n setPageNumber(newPage);\n scrollToPage(newPage);\n },\n [pageNumber, scrollToPage]\n );\n\n const previousPage = useCallback((): void => {\n changePage(-1);\n }, [changePage]);\n\n const nextPage = useCallback((): void => {\n changePage(1);\n }, [changePage]);\n\n const handleRangeChanged = useCallback(\n (range: { startIndex: number; endIndex: number }) => {\n if (isUserScrollingRef.current) {\n return;\n }\n const visiblePage = range.startIndex + 1;\n if (visiblePage !== pageNumber) {\n setPageNumber(visiblePage);\n }\n },\n [pageNumber]\n );\n\n useEffect(() => {\n isMountedRef.current = true;\n return () => {\n isMountedRef.current = false;\n debouncedScroll.cancel();\n if (scrollTimeoutRef.current) {\n clearTimeout(scrollTimeoutRef.current);\n }\n };\n }, [debouncedScroll]);\n\n useEffect(() => {\n setDefaultPageHeight(width * scale * pageAspectRatio);\n }, [width, scale, pageAspectRatio]);\n\n if (error) {\n return (\n <div className=\"flex items-center justify-center h-full w-full px-8.5\">\n <div className=\"text-red-500 text-center\">\n <p>{error}</p>\n </div>\n </div>\n );\n }\n\n return (\n <div className=\"h-full w-full flex flex-col overflow-hidden pb-5\">\n {loading && (\n <div className=\"flex items-center justify-center h-full px-8.5\">\n <div className=\"text-gray-500\">Loading PDF...</div>\n </div>\n )}\n {numPages > 0 && (\n <div className=\"flex items-center justify-center md:justify-between flex-wrap gap-3 px-8.5 py-3\">\n <Box py={4} px={8} className=\"flex items-center justify-start gap-1 rounded-[5px]!\">\n <Typography color=\"text.lighter\" style={{ fontSize: 10 }}>\n Page:\n </Typography>\n <span className=\"flex items-center gap-2 text-[12px]\">\n <input\n type=\"number\"\n min={1}\n max={numPages}\n value={pageNumber}\n onChange={(e) => {\n const page = parseInt(e.target.value, 10);\n if (page >= 1 && page <= numPages) {\n setPageNumber(page);\n debouncedScroll(page, false);\n }\n }}\n className=\"w-15 px-1 py-1 text-end text-[12px]\"\n />\n / {numPages}\n </span>\n <div className=\"flex flex-col gap-0.25 pl-1\">\n <Button\n variant=\"empty\"\n aria-label=\"previous page\"\n color=\"secondary\"\n size=\"small\"\n type=\"button\"\n disabled={pageNumber <= 1}\n onClick={previousPage}\n icon={<ChevronUpIcon style={{ width: 8, height: 8 }} />}\n />\n <Button\n variant=\"empty\"\n aria-label=\"next page\"\n color=\"secondary\"\n size=\"small\"\n type=\"button\"\n disabled={pageNumber >= numPages}\n onClick={nextPage}\n icon={<ChevronDownIcon style={{ width: 8, height: 8 }} />}\n />\n </div>\n </Box>\n <div className=\"flex items-center justify-center gap-3\">\n <Button\n variant=\"outlined\"\n aria-label=\"zoom-out\"\n color=\"default\"\n size=\"small\"\n icon={<MinusIcon style={{ width: 20, height: 20 }} />}\n onClick={handleZoomOut}\n className=\"bg-white! hover:bg-blue-50!\"\n disabled={scale <= 0.25}\n p={7}\n />\n <Box py={8} px={8} className=\"flex items-center justify-between gap-1.5 min-w-21 rounded-[5px]!\">\n <Typography color=\"text.lighter\" style={{ fontSize: 10 }}>\n Scale:\n </Typography>\n <Typography>{scale * 100}%</Typography>\n </Box>\n <Button\n variant=\"outlined\"\n aria-label=\"zoom-in\"\n size=\"small\"\n color=\"default\"\n icon={<PlusIcon style={{ width: 14, height: 14 }} />}\n onClick={handleZoomIn}\n className=\"bg-white! hover:bg-blue-50!\"\n disabled={scale >= 4}\n p={10}\n />\n </div>\n </div>\n )}\n <div ref={containerRef} className=\"flex-1 overflow-hidden min-h-0\">\n <Document\n options={options}\n file={url}\n onLoadSuccess={onDocumentLoadSuccess}\n onLoadError={onDocumentLoadError}\n loading={\n <div className=\"flex items-center justify-center\" style={{ height: defaultPageHeight }}>\n <div className=\"h-10 w-10 rounded-full border border-2 border-gray-200 animate-spin border-s-transparent\" />\n </div>\n }\n >\n <Virtuoso\n ref={virtuosoRef}\n style={{ height: height || 'calc(100dvh - 190px)', width: '100%', scrollbarGutter: 'stable both-edges' }}\n totalCount={numPages}\n rangeChanged={handleRangeChanged}\n defaultItemHeight={defaultPageHeight}\n itemContent={(index) => (\n <div className=\"mx-auto w-fit mb-4 border border-1 border-gray-100\">\n <Page\n pageNumber={index + 1}\n renderTextLayer={true}\n renderAnnotationLayer={true}\n width={width * scale}\n onLoadSuccess={(page) => {\n if (index === 0) {\n const ratio = page.height / page.width;\n setPageAspectRatio(ratio);\n }\n }}\n loading={\n <div className=\"flex items-center justify-center\" style={{ height: defaultPageHeight }}>\n <div className=\"h-10 w-10 rounded-full border border-2 border-gray-200 animate-spin border-s-transparent\" />\n </div>\n }\n className=\"h-auto w-full transition-[width] duration-[600ms] ease-in-out\"\n />\n </div>\n )}\n />\n </Document>\n </div>\n </div>\n );\n};\n"]}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
'use strict';var
|
|
2
|
-
//# sourceMappingURL=PdfDriver-
|
|
1
|
+
'use strict';var chunkQQ6EL7I4_js=require('./chunk-QQ6EL7I4.js'),react=require('react'),M=require('lodash.debounce'),reactPdf=require('react-pdf');require('react-pdf/dist/Page/AnnotationLayer.css'),require('react-pdf/dist/Page/TextLayer.css');var reactVirtuoso=require('react-virtuoso'),jsxRuntime=require('react/jsx-runtime');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var M__default=/*#__PURE__*/_interopDefault(M);var f="/pdfjs";typeof window<"u"&&typeof document<"u"&&(reactPdf.pdfjs.GlobalWorkerOptions.workerSrc=`${f}/pdf.worker.min.js`);var ae=1e3,ie=400,le=150,ce=70,de=1.414,I=400,Ne=chunkQQ6EL7I4_js.a(({url:O})=>{let[s,k]=react.useState(0),[i,b]=react.useState(1),[H,T]=react.useState(true),[E,B]=react.useState(null),[v,F]=react.useState(I),[$,Z]=react.useState(I),[l,R]=react.useState(1),[x,G]=react.useState(I),[C,V]=react.useState(de),c=react.useRef(null),S=react.useRef(null),y=react.useRef(false),d=react.useRef(null),N=react.useRef(false),p=react.useCallback((e,r=true)=>{e<1||e>s||(y.current=true,S.current?.scrollToIndex({index:e-1,align:"start",behavior:r?"smooth":"auto"}),d.current&&clearTimeout(d.current),d.current=setTimeout(()=>{N.current&&(y.current=false);},ae));},[s]),w=react.useMemo(()=>M__default.default((e,r=false)=>{p(e,r);},ie),[p]),W=react.useCallback(()=>{R(e=>Math.min(e+.25,4));},[]),Y=react.useCallback(()=>{R(e=>Math.max(e-.25,.25));},[]);react.useEffect(()=>{if(!c.current)return;let e=M__default.default(()=>{c.current&&(F(c.current.offsetWidth-ce),Z(c.current.clientHeight));},le);e();let r=new ResizeObserver(e);return r.observe(c.current),()=>{r.disconnect(),e.cancel();}},[]);let J=react.useMemo(()=>({cMapPacked:true,cMapUrl:`${f}/cmaps/`,standardFontDataUrl:`${f}/standard_fonts/`,wasmUrl:`${f}/wasm/`,iccUrl:`${f}/icc/`}),[]),q=react.useCallback(({numPages:e})=>{k(e),T(false);},[]),K=react.useCallback(e=>{B(`Failed to load PDF: ${e.message}`),T(false);},[]),g=react.useCallback(e=>{let r=i+e;b(r),p(r);},[i,p]),Q=react.useCallback(()=>{g(-1);},[g]),X=react.useCallback(()=>{g(1);},[g]),ee=react.useCallback(e=>{if(y.current)return;let r=e.startIndex+1;r!==i&&b(r);},[i]);return react.useEffect(()=>(N.current=true,()=>{N.current=false,w.cancel(),d.current&&clearTimeout(d.current);}),[w]),react.useEffect(()=>{G(v*l*C);},[v,l,C]),E?jsxRuntime.jsx("div",{className:"flex items-center justify-center h-full w-full px-8.5",children:jsxRuntime.jsx("div",{className:"text-red-500 text-center",children:jsxRuntime.jsx("p",{children:E})})}):jsxRuntime.jsxs("div",{className:"h-full w-full flex flex-col overflow-hidden pb-5",children:[H&&jsxRuntime.jsx("div",{className:"flex items-center justify-center h-full px-8.5",children:jsxRuntime.jsx("div",{className:"text-gray-500",children:"Loading PDF..."})}),s>0&&jsxRuntime.jsxs("div",{className:"flex items-center justify-center md:justify-between flex-wrap gap-3 px-8.5 py-3",children:[jsxRuntime.jsxs(chunkQQ6EL7I4_js.pb,{py:4,px:8,className:"flex items-center justify-start gap-1 rounded-[5px]!",children:[jsxRuntime.jsx(chunkQQ6EL7I4_js.Ya,{color:"text.lighter",style:{fontSize:10},children:"Page:"}),jsxRuntime.jsxs("span",{className:"flex items-center gap-2 text-[12px]",children:[jsxRuntime.jsx("input",{type:"number",min:1,max:s,value:i,onChange:e=>{let r=parseInt(e.target.value,10);r>=1&&r<=s&&(b(r),w(r,false));},className:"w-15 px-1 py-1 text-end text-[12px]"}),"/ ",s]}),jsxRuntime.jsxs("div",{className:"flex flex-col gap-0.25 pl-1",children:[jsxRuntime.jsx(chunkQQ6EL7I4_js.z,{variant:"empty","aria-label":"previous page",color:"secondary",size:"small",type:"button",disabled:i<=1,onClick:Q,icon:jsxRuntime.jsx(chunkQQ6EL7I4_js.la,{style:{width:8,height:8}})}),jsxRuntime.jsx(chunkQQ6EL7I4_js.z,{variant:"empty","aria-label":"next page",color:"secondary",size:"small",type:"button",disabled:i>=s,onClick:X,icon:jsxRuntime.jsx(chunkQQ6EL7I4_js.ka,{style:{width:8,height:8}})})]})]}),jsxRuntime.jsxs("div",{className:"flex items-center justify-center gap-3",children:[jsxRuntime.jsx(chunkQQ6EL7I4_js.z,{variant:"outlined","aria-label":"zoom-out",color:"default",size:"small",icon:jsxRuntime.jsx(chunkQQ6EL7I4_js.Pa,{style:{width:20,height:20}}),onClick:Y,className:"bg-white! hover:bg-blue-50!",disabled:l<=.25,p:7}),jsxRuntime.jsxs(chunkQQ6EL7I4_js.pb,{py:8,px:8,className:"flex items-center justify-between gap-1.5 min-w-21 rounded-[5px]!",children:[jsxRuntime.jsx(chunkQQ6EL7I4_js.Ya,{color:"text.lighter",style:{fontSize:10},children:"Scale:"}),jsxRuntime.jsxs(chunkQQ6EL7I4_js.Ya,{children:[l*100,"%"]})]}),jsxRuntime.jsx(chunkQQ6EL7I4_js.z,{variant:"outlined","aria-label":"zoom-in",size:"small",color:"default",icon:jsxRuntime.jsx(chunkQQ6EL7I4_js.ma,{style:{width:14,height:14}}),onClick:W,className:"bg-white! hover:bg-blue-50!",disabled:l>=4,p:10})]})]}),jsxRuntime.jsx("div",{ref:c,className:"flex-1 overflow-hidden min-h-0",children:jsxRuntime.jsx(reactPdf.Document,{options:J,file:O,onLoadSuccess:q,onLoadError:K,loading:jsxRuntime.jsx("div",{className:"flex items-center justify-center",style:{height:x},children:jsxRuntime.jsx("div",{className:"h-10 w-10 rounded-full border border-2 border-gray-200 animate-spin border-s-transparent"})}),children:jsxRuntime.jsx(reactVirtuoso.Virtuoso,{ref:S,style:{height:$||"calc(100dvh - 190px)",width:"100%",scrollbarGutter:"stable both-edges"},totalCount:s,rangeChanged:ee,defaultItemHeight:x,itemContent:e=>jsxRuntime.jsx("div",{className:"mx-auto w-fit mb-4 border border-1 border-gray-100",children:jsxRuntime.jsx(reactPdf.Page,{pageNumber:e+1,renderTextLayer:true,renderAnnotationLayer:true,width:v*l,onLoadSuccess:r=>{if(e===0){let te=r.height/r.width;V(te);}},loading:jsxRuntime.jsx("div",{className:"flex items-center justify-center",style:{height:x},children:jsxRuntime.jsx("div",{className:"h-10 w-10 rounded-full border border-2 border-gray-200 animate-spin border-s-transparent"})}),className:"h-auto w-full transition-[width] duration-[600ms] ease-in-out"})})})})})]})},"PdfDriver");exports.PdfDriver=Ne;//# sourceMappingURL=PdfDriver-XDMXZLNI.js.map
|
|
2
|
+
//# sourceMappingURL=PdfDriver-XDMXZLNI.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/FileViewer/drivers/PdfDriver/PdfDriver.tsx"],"names":["BASE_DIR","pdfjs","SCROLL_ANIMATION_DURATION","INPUT_DEBOUNCE_DELAY","RESIZE_DEBOUNCE_DELAY","CONTAINER_PADDING","DEFAULT_RATIO_A4","DEFAULT_MIN_SIZE","PdfDriver","__name","url","numPages","setNumPages","useState","pageNumber","setPageNumber","loading","setLoading","error","setError","width","setWidth","height","setHeight","scale","setScale","defaultPageHeight","setDefaultPageHeight","pageAspectRatio","setPageAspectRatio","containerRef","useRef","virtuosoRef","isUserScrollingRef","scrollTimeoutRef","isMountedRef","scrollToPage","useCallback","page","smooth","debouncedScroll","useMemo","debounce","handleZoomIn","prev","handleZoomOut","useEffect","updateSize","observer","options","onDocumentLoadSuccess","onDocumentLoadError","changePage","offset","newPage","previousPage","nextPage","handleRangeChanged","range","visiblePage","jsx","jsxs","Box","Typography","Button","ChevronUpIcon","ChevronDownIcon","MinusIcon","PlusIcon","Document","Virtuoso","index","Page","ratio"],"mappings":"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","file":"PdfDriver-L5WRYO6R.js","sourcesContent":["import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport debounce from 'lodash.debounce';\nimport { Document, Page, pdfjs } from 'react-pdf';\nimport 'react-pdf/dist/Page/AnnotationLayer.css';\nimport 'react-pdf/dist/Page/TextLayer.css';\nimport { Virtuoso, VirtuosoHandle } from 'react-virtuoso';\nimport { Box, Button, ChevronDownIcon, ChevronUpIcon, MinusIcon, PlusIcon, Typography } from '../../../Core';\n\nconst BASE_DIR = '/pdfjs';\n\n// Set up the worker - self-hosted configuration (client-side only)\nif (typeof window !== 'undefined' && typeof document !== 'undefined') {\n pdfjs.GlobalWorkerOptions.workerSrc = `${BASE_DIR}/pdf.worker.min.js`;\n}\n\ninterface PdfDriverProps {\n url: string;\n}\nconst SCROLL_ANIMATION_DURATION = 1000;\nconst INPUT_DEBOUNCE_DELAY = 400;\nconst RESIZE_DEBOUNCE_DELAY = 150;\nconst CONTAINER_PADDING = 70;\nconst DEFAULT_RATIO_A4 = 1.414;\nconst DEFAULT_MIN_SIZE = 400;\n\nexport const PdfDriver: React.FC<PdfDriverProps> = ({ url }) => {\n const [numPages, setNumPages] = useState<number>(0);\n const [pageNumber, setPageNumber] = useState<number>(1);\n const [loading, setLoading] = useState<boolean>(true);\n const [error, setError] = useState<string | null>(null);\n const [width, setWidth] = useState<number>(DEFAULT_MIN_SIZE);\n const [height, setHeight] = useState<number>(DEFAULT_MIN_SIZE);\n const [scale, setScale] = useState(1);\n const [defaultPageHeight, setDefaultPageHeight] = useState(DEFAULT_MIN_SIZE);\n const [pageAspectRatio, setPageAspectRatio] = useState(DEFAULT_RATIO_A4);\n\n const containerRef = useRef<HTMLDivElement>(null);\n const virtuosoRef = useRef<VirtuosoHandle>(null);\n const isUserScrollingRef = useRef<boolean>(false);\n const scrollTimeoutRef = useRef<NodeJS.Timeout | null>(null);\n const isMountedRef = useRef(false);\n\n const scrollToPage = useCallback(\n (page: number, smooth = true) => {\n if (page < 1 || page > numPages) return;\n\n isUserScrollingRef.current = true;\n virtuosoRef.current?.scrollToIndex({\n index: page - 1,\n align: 'start',\n behavior: smooth ? 'smooth' : 'auto',\n });\n\n if (scrollTimeoutRef.current) {\n clearTimeout(scrollTimeoutRef.current);\n }\n\n scrollTimeoutRef.current = setTimeout(() => {\n if (isMountedRef.current) isUserScrollingRef.current = false;\n }, SCROLL_ANIMATION_DURATION);\n },\n [numPages]\n );\n\n const debouncedScroll = useMemo(() => {\n return debounce((page: number, smooth = false) => {\n scrollToPage(page, smooth);\n }, INPUT_DEBOUNCE_DELAY);\n }, [scrollToPage]);\n\n const handleZoomIn = useCallback(() => {\n setScale((prev) => Math.min(prev + 0.25, 4));\n }, []);\n\n const handleZoomOut = useCallback(() => {\n setScale((prev) => Math.max(prev - 0.25, 0.25));\n }, []);\n\n useEffect(() => {\n if (!containerRef.current) return;\n const updateSize = debounce(() => {\n if (containerRef.current) {\n setWidth(containerRef.current.offsetWidth - CONTAINER_PADDING);\n setHeight(containerRef.current.clientHeight);\n }\n }, RESIZE_DEBOUNCE_DELAY);\n updateSize();\n const observer = new ResizeObserver(updateSize);\n observer.observe(containerRef.current);\n return () => {\n observer.disconnect();\n updateSize.cancel();\n };\n }, []);\n\n const options = useMemo(\n () => ({\n cMapPacked: true,\n cMapUrl: `${BASE_DIR}/cmaps/`,\n standardFontDataUrl: `${BASE_DIR}/standard_fonts/`,\n wasmUrl: `${BASE_DIR}/wasm/`,\n iccUrl: `${BASE_DIR}/icc/`,\n }),\n []\n );\n\n const onDocumentLoadSuccess = useCallback(({ numPages }: { numPages: number }): void => {\n setNumPages(numPages);\n setLoading(false);\n }, []);\n\n const onDocumentLoadError = useCallback((error: Error): void => {\n setError(`Failed to load PDF: ${error.message}`);\n setLoading(false);\n }, []);\n\n const changePage = useCallback(\n (offset: number): void => {\n const newPage = pageNumber + offset;\n setPageNumber(newPage);\n scrollToPage(newPage);\n },\n [pageNumber, scrollToPage]\n );\n\n const previousPage = useCallback((): void => {\n changePage(-1);\n }, [changePage]);\n\n const nextPage = useCallback((): void => {\n changePage(1);\n }, [changePage]);\n\n const handleRangeChanged = useCallback(\n (range: { startIndex: number; endIndex: number }) => {\n if (isUserScrollingRef.current) {\n return;\n }\n const visiblePage = range.startIndex + 1;\n if (visiblePage !== pageNumber) {\n setPageNumber(visiblePage);\n }\n },\n [pageNumber]\n );\n\n useEffect(() => {\n isMountedRef.current = true;\n return () => {\n isMountedRef.current = false;\n debouncedScroll.cancel();\n if (scrollTimeoutRef.current) {\n clearTimeout(scrollTimeoutRef.current);\n }\n };\n }, [debouncedScroll]);\n\n useEffect(() => {\n setDefaultPageHeight(width * scale * pageAspectRatio);\n }, [width, scale, pageAspectRatio]);\n\n if (error) {\n return (\n <div className=\"flex items-center justify-center h-full w-full px-8.5\">\n <div className=\"text-red-500 text-center\">\n <p>{error}</p>\n </div>\n </div>\n );\n }\n\n return (\n <div className=\"h-full w-full flex flex-col overflow-hidden pb-5\">\n {loading && (\n <div className=\"flex items-center justify-center h-full px-8.5\">\n <div className=\"text-gray-500\">Loading PDF...</div>\n </div>\n )}\n {numPages > 0 && (\n <div className=\"flex items-center justify-center md:justify-between flex-wrap gap-3 px-8.5 py-3\">\n <Box py={4} px={8} className=\"flex items-center justify-start gap-1 rounded-[5px]!\">\n <Typography color=\"text.lighter\" style={{ fontSize: 10 }}>\n Page:\n </Typography>\n <span className=\"flex items-center gap-2 text-[12px]\">\n <input\n type=\"number\"\n min={1}\n max={numPages}\n value={pageNumber}\n onChange={(e) => {\n const page = parseInt(e.target.value, 10);\n if (page >= 1 && page <= numPages) {\n setPageNumber(page);\n debouncedScroll(page, false);\n }\n }}\n className=\"w-15 px-1 py-1 text-end text-[12px]\"\n />\n / {numPages}\n </span>\n <div className=\"flex flex-col gap-0.25 pl-1\">\n <Button\n variant=\"empty\"\n aria-label=\"previous page\"\n color=\"secondary\"\n size=\"small\"\n type=\"button\"\n disabled={pageNumber <= 1}\n onClick={previousPage}\n icon={<ChevronUpIcon style={{ width: 8, height: 8 }} />}\n />\n <Button\n variant=\"empty\"\n aria-label=\"next page\"\n color=\"secondary\"\n size=\"small\"\n type=\"button\"\n disabled={pageNumber >= numPages}\n onClick={nextPage}\n icon={<ChevronDownIcon style={{ width: 8, height: 8 }} />}\n />\n </div>\n </Box>\n <div className=\"flex items-center justify-center gap-3\">\n <Button\n variant=\"outlined\"\n aria-label=\"zoom-out\"\n color=\"default\"\n size=\"small\"\n icon={<MinusIcon style={{ width: 20, height: 20 }} />}\n onClick={handleZoomOut}\n className=\"bg-white! hover:bg-blue-50!\"\n disabled={scale <= 0.25}\n p={7}\n />\n <Box py={8} px={8} className=\"flex items-center justify-between gap-1.5 min-w-21 rounded-[5px]!\">\n <Typography color=\"text.lighter\" style={{ fontSize: 10 }}>\n Scale:\n </Typography>\n <Typography>{scale * 100}%</Typography>\n </Box>\n <Button\n variant=\"outlined\"\n aria-label=\"zoom-in\"\n size=\"small\"\n color=\"default\"\n icon={<PlusIcon style={{ width: 14, height: 14 }} />}\n onClick={handleZoomIn}\n className=\"bg-white! hover:bg-blue-50!\"\n disabled={scale >= 4}\n p={10}\n />\n </div>\n </div>\n )}\n <div ref={containerRef} className=\"flex-1 overflow-hidden min-h-0\">\n <Document\n options={options}\n file={url}\n onLoadSuccess={onDocumentLoadSuccess}\n onLoadError={onDocumentLoadError}\n loading={\n <div className=\"flex items-center justify-center\" style={{ height: defaultPageHeight }}>\n <div className=\"h-10 w-10 rounded-full border border-2 border-gray-200 animate-spin border-s-transparent\" />\n </div>\n }\n >\n <Virtuoso\n ref={virtuosoRef}\n style={{ height: height || 'calc(100dvh - 190px)', width: '100%', scrollbarGutter: 'stable both-edges' }}\n totalCount={numPages}\n rangeChanged={handleRangeChanged}\n defaultItemHeight={defaultPageHeight}\n itemContent={(index) => (\n <div className=\"mx-auto w-fit mb-4 border border-1 border-gray-100\">\n <Page\n pageNumber={index + 1}\n renderTextLayer={true}\n renderAnnotationLayer={true}\n width={width * scale}\n onLoadSuccess={(page) => {\n if (index === 0) {\n const ratio = page.height / page.width;\n setPageAspectRatio(ratio);\n }\n }}\n loading={\n <div className=\"flex items-center justify-center\" style={{ height: defaultPageHeight }}>\n <div className=\"h-10 w-10 rounded-full border border-2 border-gray-200 animate-spin border-s-transparent\" />\n </div>\n }\n className=\"h-auto w-full transition-[width] duration-[600ms] ease-in-out\"\n />\n </div>\n )}\n />\n </Document>\n </div>\n </div>\n );\n};\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/FileViewer/drivers/PdfDriver/PdfDriver.tsx"],"names":["BASE_DIR","pdfjs","SCROLL_ANIMATION_DURATION","INPUT_DEBOUNCE_DELAY","RESIZE_DEBOUNCE_DELAY","CONTAINER_PADDING","DEFAULT_RATIO_A4","DEFAULT_MIN_SIZE","PdfDriver","__name","url","numPages","setNumPages","useState","pageNumber","setPageNumber","loading","setLoading","error","setError","width","setWidth","height","setHeight","scale","setScale","defaultPageHeight","setDefaultPageHeight","pageAspectRatio","setPageAspectRatio","containerRef","useRef","virtuosoRef","isUserScrollingRef","scrollTimeoutRef","isMountedRef","scrollToPage","useCallback","page","smooth","debouncedScroll","useMemo","debounce","handleZoomIn","prev","handleZoomOut","useEffect","updateSize","observer","options","onDocumentLoadSuccess","onDocumentLoadError","changePage","offset","newPage","previousPage","nextPage","handleRangeChanged","range","visiblePage","jsx","jsxs","Box","Typography","Button","ChevronUpIcon","ChevronDownIcon","MinusIcon","PlusIcon","Document","Virtuoso","index","Page","ratio"],"mappings":"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","file":"PdfDriver-XDMXZLNI.js","sourcesContent":["import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport debounce from 'lodash.debounce';\nimport { Document, Page, pdfjs } from 'react-pdf';\nimport 'react-pdf/dist/Page/AnnotationLayer.css';\nimport 'react-pdf/dist/Page/TextLayer.css';\nimport { Virtuoso, VirtuosoHandle } from 'react-virtuoso';\nimport { Box, Button, ChevronDownIcon, ChevronUpIcon, MinusIcon, PlusIcon, Typography } from '../../../Core';\n\nconst BASE_DIR = '/pdfjs';\n\n// Set up the worker - self-hosted configuration (client-side only)\nif (typeof window !== 'undefined' && typeof document !== 'undefined') {\n pdfjs.GlobalWorkerOptions.workerSrc = `${BASE_DIR}/pdf.worker.min.js`;\n}\n\ninterface PdfDriverProps {\n url: string;\n}\nconst SCROLL_ANIMATION_DURATION = 1000;\nconst INPUT_DEBOUNCE_DELAY = 400;\nconst RESIZE_DEBOUNCE_DELAY = 150;\nconst CONTAINER_PADDING = 70;\nconst DEFAULT_RATIO_A4 = 1.414;\nconst DEFAULT_MIN_SIZE = 400;\n\nexport const PdfDriver: React.FC<PdfDriverProps> = ({ url }) => {\n const [numPages, setNumPages] = useState<number>(0);\n const [pageNumber, setPageNumber] = useState<number>(1);\n const [loading, setLoading] = useState<boolean>(true);\n const [error, setError] = useState<string | null>(null);\n const [width, setWidth] = useState<number>(DEFAULT_MIN_SIZE);\n const [height, setHeight] = useState<number>(DEFAULT_MIN_SIZE);\n const [scale, setScale] = useState(1);\n const [defaultPageHeight, setDefaultPageHeight] = useState(DEFAULT_MIN_SIZE);\n const [pageAspectRatio, setPageAspectRatio] = useState(DEFAULT_RATIO_A4);\n\n const containerRef = useRef<HTMLDivElement>(null);\n const virtuosoRef = useRef<VirtuosoHandle>(null);\n const isUserScrollingRef = useRef<boolean>(false);\n const scrollTimeoutRef = useRef<NodeJS.Timeout | null>(null);\n const isMountedRef = useRef(false);\n\n const scrollToPage = useCallback(\n (page: number, smooth = true) => {\n if (page < 1 || page > numPages) return;\n\n isUserScrollingRef.current = true;\n virtuosoRef.current?.scrollToIndex({\n index: page - 1,\n align: 'start',\n behavior: smooth ? 'smooth' : 'auto',\n });\n\n if (scrollTimeoutRef.current) {\n clearTimeout(scrollTimeoutRef.current);\n }\n\n scrollTimeoutRef.current = setTimeout(() => {\n if (isMountedRef.current) isUserScrollingRef.current = false;\n }, SCROLL_ANIMATION_DURATION);\n },\n [numPages]\n );\n\n const debouncedScroll = useMemo(() => {\n return debounce((page: number, smooth = false) => {\n scrollToPage(page, smooth);\n }, INPUT_DEBOUNCE_DELAY);\n }, [scrollToPage]);\n\n const handleZoomIn = useCallback(() => {\n setScale((prev) => Math.min(prev + 0.25, 4));\n }, []);\n\n const handleZoomOut = useCallback(() => {\n setScale((prev) => Math.max(prev - 0.25, 0.25));\n }, []);\n\n useEffect(() => {\n if (!containerRef.current) return;\n const updateSize = debounce(() => {\n if (containerRef.current) {\n setWidth(containerRef.current.offsetWidth - CONTAINER_PADDING);\n setHeight(containerRef.current.clientHeight);\n }\n }, RESIZE_DEBOUNCE_DELAY);\n updateSize();\n const observer = new ResizeObserver(updateSize);\n observer.observe(containerRef.current);\n return () => {\n observer.disconnect();\n updateSize.cancel();\n };\n }, []);\n\n const options = useMemo(\n () => ({\n cMapPacked: true,\n cMapUrl: `${BASE_DIR}/cmaps/`,\n standardFontDataUrl: `${BASE_DIR}/standard_fonts/`,\n wasmUrl: `${BASE_DIR}/wasm/`,\n iccUrl: `${BASE_DIR}/icc/`,\n }),\n []\n );\n\n const onDocumentLoadSuccess = useCallback(({ numPages }: { numPages: number }): void => {\n setNumPages(numPages);\n setLoading(false);\n }, []);\n\n const onDocumentLoadError = useCallback((error: Error): void => {\n setError(`Failed to load PDF: ${error.message}`);\n setLoading(false);\n }, []);\n\n const changePage = useCallback(\n (offset: number): void => {\n const newPage = pageNumber + offset;\n setPageNumber(newPage);\n scrollToPage(newPage);\n },\n [pageNumber, scrollToPage]\n );\n\n const previousPage = useCallback((): void => {\n changePage(-1);\n }, [changePage]);\n\n const nextPage = useCallback((): void => {\n changePage(1);\n }, [changePage]);\n\n const handleRangeChanged = useCallback(\n (range: { startIndex: number; endIndex: number }) => {\n if (isUserScrollingRef.current) {\n return;\n }\n const visiblePage = range.startIndex + 1;\n if (visiblePage !== pageNumber) {\n setPageNumber(visiblePage);\n }\n },\n [pageNumber]\n );\n\n useEffect(() => {\n isMountedRef.current = true;\n return () => {\n isMountedRef.current = false;\n debouncedScroll.cancel();\n if (scrollTimeoutRef.current) {\n clearTimeout(scrollTimeoutRef.current);\n }\n };\n }, [debouncedScroll]);\n\n useEffect(() => {\n setDefaultPageHeight(width * scale * pageAspectRatio);\n }, [width, scale, pageAspectRatio]);\n\n if (error) {\n return (\n <div className=\"flex items-center justify-center h-full w-full px-8.5\">\n <div className=\"text-red-500 text-center\">\n <p>{error}</p>\n </div>\n </div>\n );\n }\n\n return (\n <div className=\"h-full w-full flex flex-col overflow-hidden pb-5\">\n {loading && (\n <div className=\"flex items-center justify-center h-full px-8.5\">\n <div className=\"text-gray-500\">Loading PDF...</div>\n </div>\n )}\n {numPages > 0 && (\n <div className=\"flex items-center justify-center md:justify-between flex-wrap gap-3 px-8.5 py-3\">\n <Box py={4} px={8} className=\"flex items-center justify-start gap-1 rounded-[5px]!\">\n <Typography color=\"text.lighter\" style={{ fontSize: 10 }}>\n Page:\n </Typography>\n <span className=\"flex items-center gap-2 text-[12px]\">\n <input\n type=\"number\"\n min={1}\n max={numPages}\n value={pageNumber}\n onChange={(e) => {\n const page = parseInt(e.target.value, 10);\n if (page >= 1 && page <= numPages) {\n setPageNumber(page);\n debouncedScroll(page, false);\n }\n }}\n className=\"w-15 px-1 py-1 text-end text-[12px]\"\n />\n / {numPages}\n </span>\n <div className=\"flex flex-col gap-0.25 pl-1\">\n <Button\n variant=\"empty\"\n aria-label=\"previous page\"\n color=\"secondary\"\n size=\"small\"\n type=\"button\"\n disabled={pageNumber <= 1}\n onClick={previousPage}\n icon={<ChevronUpIcon style={{ width: 8, height: 8 }} />}\n />\n <Button\n variant=\"empty\"\n aria-label=\"next page\"\n color=\"secondary\"\n size=\"small\"\n type=\"button\"\n disabled={pageNumber >= numPages}\n onClick={nextPage}\n icon={<ChevronDownIcon style={{ width: 8, height: 8 }} />}\n />\n </div>\n </Box>\n <div className=\"flex items-center justify-center gap-3\">\n <Button\n variant=\"outlined\"\n aria-label=\"zoom-out\"\n color=\"default\"\n size=\"small\"\n icon={<MinusIcon style={{ width: 20, height: 20 }} />}\n onClick={handleZoomOut}\n className=\"bg-white! hover:bg-blue-50!\"\n disabled={scale <= 0.25}\n p={7}\n />\n <Box py={8} px={8} className=\"flex items-center justify-between gap-1.5 min-w-21 rounded-[5px]!\">\n <Typography color=\"text.lighter\" style={{ fontSize: 10 }}>\n Scale:\n </Typography>\n <Typography>{scale * 100}%</Typography>\n </Box>\n <Button\n variant=\"outlined\"\n aria-label=\"zoom-in\"\n size=\"small\"\n color=\"default\"\n icon={<PlusIcon style={{ width: 14, height: 14 }} />}\n onClick={handleZoomIn}\n className=\"bg-white! hover:bg-blue-50!\"\n disabled={scale >= 4}\n p={10}\n />\n </div>\n </div>\n )}\n <div ref={containerRef} className=\"flex-1 overflow-hidden min-h-0\">\n <Document\n options={options}\n file={url}\n onLoadSuccess={onDocumentLoadSuccess}\n onLoadError={onDocumentLoadError}\n loading={\n <div className=\"flex items-center justify-center\" style={{ height: defaultPageHeight }}>\n <div className=\"h-10 w-10 rounded-full border border-2 border-gray-200 animate-spin border-s-transparent\" />\n </div>\n }\n >\n <Virtuoso\n ref={virtuosoRef}\n style={{ height: height || 'calc(100dvh - 190px)', width: '100%', scrollbarGutter: 'stable both-edges' }}\n totalCount={numPages}\n rangeChanged={handleRangeChanged}\n defaultItemHeight={defaultPageHeight}\n itemContent={(index) => (\n <div className=\"mx-auto w-fit mb-4 border border-1 border-gray-100\">\n <Page\n pageNumber={index + 1}\n renderTextLayer={true}\n renderAnnotationLayer={true}\n width={width * scale}\n onLoadSuccess={(page) => {\n if (index === 0) {\n const ratio = page.height / page.width;\n setPageAspectRatio(ratio);\n }\n }}\n loading={\n <div className=\"flex items-center justify-center\" style={{ height: defaultPageHeight }}>\n <div className=\"h-10 w-10 rounded-full border border-2 border-gray-200 animate-spin border-s-transparent\" />\n </div>\n }\n className=\"h-auto w-full transition-[width] duration-[600ms] ease-in-out\"\n />\n </div>\n )}\n />\n </Document>\n </div>\n </div>\n );\n};\n"]}
|
|
@@ -69,10 +69,13 @@ import I4,{createContext,forwardRef,useState,useCallback,useRef,useMemo,useEffec
|
|
|
69
69
|
|
|
70
70
|
${C==="right"?"flex-direction: row-reverse;":""}
|
|
71
71
|
|
|
72
|
-
|
|
73
|
-
|
|
72
|
+
@media (hover: hover) {
|
|
73
|
+
&:hover {
|
|
74
|
+
${V1(G(p,o,e,"hover"))}
|
|
75
|
+
}
|
|
74
76
|
}
|
|
75
77
|
|
|
78
|
+
|
|
76
79
|
&:active {
|
|
77
80
|
${V1(G(p,o,e,"active"))}
|
|
78
81
|
}
|
|
@@ -94,9 +97,11 @@ import I4,{createContext,forwardRef,useState,useCallback,useRef,useMemo,useEffec
|
|
|
94
97
|
transition: all 0.2s ease;
|
|
95
98
|
${L1(G(p,o,e,"default"))}
|
|
96
99
|
}
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
${
|
|
100
|
+
@media (hover: hover) {
|
|
101
|
+
&:hover {
|
|
102
|
+
${q} {
|
|
103
|
+
${L1(G(p,o,e,"hover"))}
|
|
104
|
+
}
|
|
100
105
|
}
|
|
101
106
|
}
|
|
102
107
|
|
|
@@ -1340,5 +1345,5 @@ import I4,{createContext,forwardRef,useState,useCallback,useRef,useMemo,useEffec
|
|
|
1340
1345
|
}
|
|
1341
1346
|
}
|
|
1342
1347
|
animation: move 1.5s linear infinite;
|
|
1343
|
-
`;export{E6 as $,La as $a,p2 as A,x3 as Aa,xd as Ab,O4 as B,w3 as Ba,Pd as Bb,_4 as C,v3 as Ca,k8 as Cb,c2 as D,V3 as Da,Bd as Db,Y4 as E,H3 as Ea,f4 as Eb,q4 as F,F3 as Fa,jd as Fb,g2 as G,P3 as Ga,op as Gb,b2 as H,k3 as Ha,ep as Hb,j4 as I,$3 as Ia,tp as Ib,e6 as J,E3 as Ja,N8 as Jb,r6 as K,B3 as Ka,vp as Kb,i6 as L,G3 as La,yp as Lb,a6 as M,R3 as Ma,s6 as N,A3 as Na,d6 as O,D3 as Oa,c6 as P,W3 as Pa,b6 as Q,$2 as Qa,u6 as R,E2 as Ra,f6 as S,U3 as Sa,m6 as T,Q as Ta,w6 as U,Bi as Ua,v6 as V,Ni as Va,V6 as W,qi as Wa,L6 as X,ea as Xa,y6 as Y,N5 as Ya,P6 as Z,ha as Za,Z6 as _,wa as _a,r as a,I6 as aa,Za as ab,m1 as b,T6 as ba,Ba as bb,d as c,z6 as ca,Aa as cb,K2 as d,R6 as da,eC as db,B as e,D6 as ea,lC as eb,a1 as f,W6 as fa,K5 as fb,G as g,U6 as ga,LC as gb,D as h,X6 as ha,Q5 as hb,q8 as i,V2 as ia,RC as ib,J8 as j,q6 as ja,ts as jb,K8 as k,L2 as ka,r4 as kb,w1 as l,H2 as la,a4 as lb,Q2 as m,J6 as ma,Is as mb,j2 as n,Q6 as na,T7 as nb,o5 as o,g1 as oa,A7 as ob,e5 as p,o3 as pa,nl as pb,n5 as q,b1 as qa,pl as qb,i5 as r,t3 as ra,hl as rb,V9 as s,n3 as sa,Ll as sb,M1 as t,a3 as ta,El as tb,u,C3 as ua,Al as ub,z4 as v,l3 as va,Ul as vb,w,p3 as wa,Kl as wb,S as x,g3 as xa,id as xb,G9 as y,b3 as ya,ud as yb,N as z,u3 as za,fd as zb};//# sourceMappingURL=chunk-
|
|
1344
|
-
//# sourceMappingURL=chunk-
|
|
1348
|
+
`;export{E6 as $,La as $a,p2 as A,x3 as Aa,xd as Ab,O4 as B,w3 as Ba,Pd as Bb,_4 as C,v3 as Ca,k8 as Cb,c2 as D,V3 as Da,Bd as Db,Y4 as E,H3 as Ea,f4 as Eb,q4 as F,F3 as Fa,jd as Fb,g2 as G,P3 as Ga,op as Gb,b2 as H,k3 as Ha,ep as Hb,j4 as I,$3 as Ia,tp as Ib,e6 as J,E3 as Ja,N8 as Jb,r6 as K,B3 as Ka,vp as Kb,i6 as L,G3 as La,yp as Lb,a6 as M,R3 as Ma,s6 as N,A3 as Na,d6 as O,D3 as Oa,c6 as P,W3 as Pa,b6 as Q,$2 as Qa,u6 as R,E2 as Ra,f6 as S,U3 as Sa,m6 as T,Q as Ta,w6 as U,Bi as Ua,v6 as V,Ni as Va,V6 as W,qi as Wa,L6 as X,ea as Xa,y6 as Y,N5 as Ya,P6 as Z,ha as Za,Z6 as _,wa as _a,r as a,I6 as aa,Za as ab,m1 as b,T6 as ba,Ba as bb,d as c,z6 as ca,Aa as cb,K2 as d,R6 as da,eC as db,B as e,D6 as ea,lC as eb,a1 as f,W6 as fa,K5 as fb,G as g,U6 as ga,LC as gb,D as h,X6 as ha,Q5 as hb,q8 as i,V2 as ia,RC as ib,J8 as j,q6 as ja,ts as jb,K8 as k,L2 as ka,r4 as kb,w1 as l,H2 as la,a4 as lb,Q2 as m,J6 as ma,Is as mb,j2 as n,Q6 as na,T7 as nb,o5 as o,g1 as oa,A7 as ob,e5 as p,o3 as pa,nl as pb,n5 as q,b1 as qa,pl as qb,i5 as r,t3 as ra,hl as rb,V9 as s,n3 as sa,Ll as sb,M1 as t,a3 as ta,El as tb,u,C3 as ua,Al as ub,z4 as v,l3 as va,Ul as vb,w,p3 as wa,Kl as wb,S as x,g3 as xa,id as xb,G9 as y,b3 as ya,ud as yb,N as z,u3 as za,fd as zb};//# sourceMappingURL=chunk-5F7EBG5K.mjs.map
|
|
1349
|
+
//# sourceMappingURL=chunk-5F7EBG5K.mjs.map
|