@cyber-harbour/ui 2.2.17 → 2.2.19

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,2 +1,2 @@
1
- import {a,rb,_a,z as z$1,ma,la,Ra,na}from'./chunk-4AIWL7CV.mjs';import {useState,useRef,useCallback,useMemo,useEffect}from'react';import z 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 se=1e3,ie=400,le=150,ce=70,de=1.414,I=400,ye=a(({url:M})=>{let[a,O]=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),[k,V]=useState(de),c=useRef(null),C=useRef(null),y=useRef(false),d=useRef(null),N=useRef(false),p=useCallback((e,r=true)=>{e<1||e>a||(y.current=true,C.current?.scrollToIndex({index:e-1,align:"start",behavior:r?"smooth":"auto"}),d.current&&clearTimeout(d.current),d.current=setTimeout(()=>{N.current&&(y.current=false);},se));},[a]),w=useMemo(()=>z((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=z(()=>{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})=>{O(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*k);},[v,l,k]),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 dark:text-gray-400",children:"Loading PDF..."})}),a>0&&jsxs("div",{className:"flex items-center justify-center md:justify-between flex-wrap gap-3 px-8.5 py-3",children:[jsxs(rb,{py:4,px:8,className:"flex items-center justify-start gap-1 rounded-[5px]!",children:[jsx(_a,{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:a,value:i,onChange:e=>{let r=parseInt(e.target.value,10);r>=1&&r<=a&&(b(r),w(r,false));},className:"w-15 px-1 py-1 text-end text-[12px]"}),"/ ",a]}),jsxs("div",{className:"flex flex-col gap-0.25 pl-1",children:[jsx(z$1,{variant:"empty","aria-label":"previous page",color:"secondary",size:"small",type:"button",disabled:i<=1,onClick:Q,icon:jsx(ma,{style:{width:8,height:8}})}),jsx(z$1,{variant:"empty","aria-label":"next page",color:"secondary",size:"small",type:"button",disabled:i>=a,onClick:X,icon:jsx(la,{style:{width:8,height:8}})})]})]}),jsxs("div",{className:"flex items-center justify-center gap-3",children:[jsx(z$1,{variant:"outlined","aria-label":"zoom-out",color:"default",size:"small",icon:jsx(Ra,{style:{width:20,height:20}}),onClick:Y,className:"bg-white! dark:bg-neutral-800! hover:bg-blue-50! dark:hover:bg-neutral-700!",disabled:l<=.25,p:7}),jsxs(rb,{py:8,px:8,className:"flex items-center justify-between gap-1.5 min-w-21 rounded-[5px]!",children:[jsx(_a,{color:"text.lighter",style:{fontSize:10},children:"Scale:"}),jsxs(_a,{children:[l*100,"%"]})]}),jsx(z$1,{variant:"outlined","aria-label":"zoom-in",size:"small",color:"default",icon:jsx(na,{style:{width:14,height:14}}),onClick:W,className:"bg-white! dark:bg-neutral-800! hover:bg-blue-50! dark:hover:bg-neutral-700!",disabled:l>=4,p:10})]})]}),jsx("div",{ref:c,className:"flex-1 overflow-hidden min-h-0",children:jsx(Document,{options:J,file:M,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 dark:border-neutral-700 animate-spin border-s-transparent"})}),children:jsx(Virtuoso,{ref:C,style:{height:$||"calc(100dvh - 190px)",width:"100%",scrollbarGutter:"stable both-edges"},totalCount:a,rangeChanged:ee,defaultItemHeight:x,itemContent:e=>jsx("div",{className:"mx-auto w-fit mb-4 border border-1 border-gray-100 dark:border-neutral-800",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 dark:border-neutral-700 animate-spin border-s-transparent"})}),className:"h-auto w-full transition-[width] duration-[600ms] ease-in-out"})})})})})]})},"PdfDriver");export{ye as PdfDriver};//# sourceMappingURL=PdfDriver-MYEDFGO3.mjs.map
2
- //# sourceMappingURL=PdfDriver-MYEDFGO3.mjs.map
1
+ import {a,rb,_a,z as z$1,ma,la,Ra,na}from'./chunk-DTPQDD44.mjs';import {useState,useRef,useCallback,useMemo,useEffect}from'react';import z 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 se=1e3,ie=400,le=150,ce=70,de=1.414,I=400,ye=a(({url:M})=>{let[a,O]=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),[k,V]=useState(de),c=useRef(null),C=useRef(null),y=useRef(false),d=useRef(null),N=useRef(false),p=useCallback((e,r=true)=>{e<1||e>a||(y.current=true,C.current?.scrollToIndex({index:e-1,align:"start",behavior:r?"smooth":"auto"}),d.current&&clearTimeout(d.current),d.current=setTimeout(()=>{N.current&&(y.current=false);},se));},[a]),w=useMemo(()=>z((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=z(()=>{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})=>{O(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*k);},[v,l,k]),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 dark:text-gray-400",children:"Loading PDF..."})}),a>0&&jsxs("div",{className:"flex items-center justify-center md:justify-between flex-wrap gap-3 px-8.5 py-3",children:[jsxs(rb,{py:4,px:8,className:"flex items-center justify-start gap-1 rounded-[5px]!",children:[jsx(_a,{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:a,value:i,onChange:e=>{let r=parseInt(e.target.value,10);r>=1&&r<=a&&(b(r),w(r,false));},className:"w-15 px-1 py-1 text-end text-[12px]"}),"/ ",a]}),jsxs("div",{className:"flex flex-col gap-0.25 pl-1",children:[jsx(z$1,{variant:"empty","aria-label":"previous page",color:"secondary",size:"small",type:"button",disabled:i<=1,onClick:Q,icon:jsx(ma,{style:{width:8,height:8}})}),jsx(z$1,{variant:"empty","aria-label":"next page",color:"secondary",size:"small",type:"button",disabled:i>=a,onClick:X,icon:jsx(la,{style:{width:8,height:8}})})]})]}),jsxs("div",{className:"flex items-center justify-center gap-3",children:[jsx(z$1,{variant:"outlined","aria-label":"zoom-out",color:"default",size:"small",icon:jsx(Ra,{style:{width:20,height:20}}),onClick:Y,className:"bg-white! dark:bg-neutral-800! hover:bg-blue-50! dark:hover:bg-neutral-700!",disabled:l<=.25,p:7}),jsxs(rb,{py:8,px:8,className:"flex items-center justify-between gap-1.5 min-w-21 rounded-[5px]!",children:[jsx(_a,{color:"text.lighter",style:{fontSize:10},children:"Scale:"}),jsxs(_a,{children:[l*100,"%"]})]}),jsx(z$1,{variant:"outlined","aria-label":"zoom-in",size:"small",color:"default",icon:jsx(na,{style:{width:14,height:14}}),onClick:W,className:"bg-white! dark:bg-neutral-800! hover:bg-blue-50! dark:hover:bg-neutral-700!",disabled:l>=4,p:10})]})]}),jsx("div",{ref:c,className:"flex-1 overflow-hidden min-h-0",children:jsx(Document,{options:J,file:M,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 dark:border-neutral-700 animate-spin border-s-transparent"})}),children:jsx(Virtuoso,{ref:C,style:{height:$||"calc(100dvh - 190px)",width:"100%",scrollbarGutter:"stable both-edges"},totalCount:a,rangeChanged:ee,defaultItemHeight:x,itemContent:e=>jsx("div",{className:"mx-auto w-fit mb-4 border border-1 border-gray-100 dark:border-neutral-800",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 dark:border-neutral-700 animate-spin border-s-transparent"})}),className:"h-auto w-full transition-[width] duration-[600ms] ease-in-out"})})})})})]})},"PdfDriver");export{ye as PdfDriver};//# sourceMappingURL=PdfDriver-MGKDGHEQ.mjs.map
2
+ //# sourceMappingURL=PdfDriver-MGKDGHEQ.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-MYEDFGO3.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 dark:text-gray-400\">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! dark:bg-neutral-800! hover:bg-blue-50! dark:hover:bg-neutral-700!\"\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! dark:bg-neutral-800! hover:bg-blue-50! dark:hover:bg-neutral-700!\"\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 dark:border-neutral-700 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 dark:border-neutral-800\">\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 dark:border-neutral-700 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-MGKDGHEQ.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 dark:text-gray-400\">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! dark:bg-neutral-800! hover:bg-blue-50! dark:hover:bg-neutral-700!\"\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! dark:bg-neutral-800! hover:bg-blue-50! dark:hover:bg-neutral-700!\"\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 dark:border-neutral-700 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 dark:border-neutral-800\">\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 dark:border-neutral-700 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 chunk72BA4VF6_js=require('./chunk-72BA4VF6.js'),react=require('react'),z=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 z__default=/*#__PURE__*/_interopDefault(z);var f="/pdfjs";typeof window<"u"&&typeof document<"u"&&(reactPdf.pdfjs.GlobalWorkerOptions.workerSrc=`${f}/pdf.worker.min.js`);var se=1e3,ie=400,le=150,ce=70,de=1.414,I=400,Ne=chunk72BA4VF6_js.a(({url:M})=>{let[a,O]=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),[k,V]=react.useState(de),c=react.useRef(null),C=react.useRef(null),y=react.useRef(false),d=react.useRef(null),N=react.useRef(false),p=react.useCallback((e,r=true)=>{e<1||e>a||(y.current=true,C.current?.scrollToIndex({index:e-1,align:"start",behavior:r?"smooth":"auto"}),d.current&&clearTimeout(d.current),d.current=setTimeout(()=>{N.current&&(y.current=false);},se));},[a]),w=react.useMemo(()=>z__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=z__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})=>{O(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*k);},[v,l,k]),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 dark:text-gray-400",children:"Loading PDF..."})}),a>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(chunk72BA4VF6_js.rb,{py:4,px:8,className:"flex items-center justify-start gap-1 rounded-[5px]!",children:[jsxRuntime.jsx(chunk72BA4VF6_js._a,{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:a,value:i,onChange:e=>{let r=parseInt(e.target.value,10);r>=1&&r<=a&&(b(r),w(r,false));},className:"w-15 px-1 py-1 text-end text-[12px]"}),"/ ",a]}),jsxRuntime.jsxs("div",{className:"flex flex-col gap-0.25 pl-1",children:[jsxRuntime.jsx(chunk72BA4VF6_js.z,{variant:"empty","aria-label":"previous page",color:"secondary",size:"small",type:"button",disabled:i<=1,onClick:Q,icon:jsxRuntime.jsx(chunk72BA4VF6_js.ma,{style:{width:8,height:8}})}),jsxRuntime.jsx(chunk72BA4VF6_js.z,{variant:"empty","aria-label":"next page",color:"secondary",size:"small",type:"button",disabled:i>=a,onClick:X,icon:jsxRuntime.jsx(chunk72BA4VF6_js.la,{style:{width:8,height:8}})})]})]}),jsxRuntime.jsxs("div",{className:"flex items-center justify-center gap-3",children:[jsxRuntime.jsx(chunk72BA4VF6_js.z,{variant:"outlined","aria-label":"zoom-out",color:"default",size:"small",icon:jsxRuntime.jsx(chunk72BA4VF6_js.Ra,{style:{width:20,height:20}}),onClick:Y,className:"bg-white! dark:bg-neutral-800! hover:bg-blue-50! dark:hover:bg-neutral-700!",disabled:l<=.25,p:7}),jsxRuntime.jsxs(chunk72BA4VF6_js.rb,{py:8,px:8,className:"flex items-center justify-between gap-1.5 min-w-21 rounded-[5px]!",children:[jsxRuntime.jsx(chunk72BA4VF6_js._a,{color:"text.lighter",style:{fontSize:10},children:"Scale:"}),jsxRuntime.jsxs(chunk72BA4VF6_js._a,{children:[l*100,"%"]})]}),jsxRuntime.jsx(chunk72BA4VF6_js.z,{variant:"outlined","aria-label":"zoom-in",size:"small",color:"default",icon:jsxRuntime.jsx(chunk72BA4VF6_js.na,{style:{width:14,height:14}}),onClick:W,className:"bg-white! dark:bg-neutral-800! hover:bg-blue-50! dark:hover:bg-neutral-700!",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:M,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 dark:border-neutral-700 animate-spin border-s-transparent"})}),children:jsxRuntime.jsx(reactVirtuoso.Virtuoso,{ref:C,style:{height:$||"calc(100dvh - 190px)",width:"100%",scrollbarGutter:"stable both-edges"},totalCount:a,rangeChanged:ee,defaultItemHeight:x,itemContent:e=>jsxRuntime.jsx("div",{className:"mx-auto w-fit mb-4 border border-1 border-gray-100 dark:border-neutral-800",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 dark:border-neutral-700 animate-spin border-s-transparent"})}),className:"h-auto w-full transition-[width] duration-[600ms] ease-in-out"})})})})})]})},"PdfDriver");exports.PdfDriver=Ne;//# sourceMappingURL=PdfDriver-FZC4EDGW.js.map
2
- //# sourceMappingURL=PdfDriver-FZC4EDGW.js.map
1
+ 'use strict';var chunkCHKXYQZ5_js=require('./chunk-CHKXYQZ5.js'),react=require('react'),z=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 z__default=/*#__PURE__*/_interopDefault(z);var f="/pdfjs";typeof window<"u"&&typeof document<"u"&&(reactPdf.pdfjs.GlobalWorkerOptions.workerSrc=`${f}/pdf.worker.min.js`);var se=1e3,ie=400,le=150,ce=70,de=1.414,I=400,Ne=chunkCHKXYQZ5_js.a(({url:M})=>{let[a,O]=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),[k,V]=react.useState(de),c=react.useRef(null),C=react.useRef(null),y=react.useRef(false),d=react.useRef(null),N=react.useRef(false),p=react.useCallback((e,r=true)=>{e<1||e>a||(y.current=true,C.current?.scrollToIndex({index:e-1,align:"start",behavior:r?"smooth":"auto"}),d.current&&clearTimeout(d.current),d.current=setTimeout(()=>{N.current&&(y.current=false);},se));},[a]),w=react.useMemo(()=>z__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=z__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})=>{O(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*k);},[v,l,k]),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 dark:text-gray-400",children:"Loading PDF..."})}),a>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(chunkCHKXYQZ5_js.rb,{py:4,px:8,className:"flex items-center justify-start gap-1 rounded-[5px]!",children:[jsxRuntime.jsx(chunkCHKXYQZ5_js._a,{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:a,value:i,onChange:e=>{let r=parseInt(e.target.value,10);r>=1&&r<=a&&(b(r),w(r,false));},className:"w-15 px-1 py-1 text-end text-[12px]"}),"/ ",a]}),jsxRuntime.jsxs("div",{className:"flex flex-col gap-0.25 pl-1",children:[jsxRuntime.jsx(chunkCHKXYQZ5_js.z,{variant:"empty","aria-label":"previous page",color:"secondary",size:"small",type:"button",disabled:i<=1,onClick:Q,icon:jsxRuntime.jsx(chunkCHKXYQZ5_js.ma,{style:{width:8,height:8}})}),jsxRuntime.jsx(chunkCHKXYQZ5_js.z,{variant:"empty","aria-label":"next page",color:"secondary",size:"small",type:"button",disabled:i>=a,onClick:X,icon:jsxRuntime.jsx(chunkCHKXYQZ5_js.la,{style:{width:8,height:8}})})]})]}),jsxRuntime.jsxs("div",{className:"flex items-center justify-center gap-3",children:[jsxRuntime.jsx(chunkCHKXYQZ5_js.z,{variant:"outlined","aria-label":"zoom-out",color:"default",size:"small",icon:jsxRuntime.jsx(chunkCHKXYQZ5_js.Ra,{style:{width:20,height:20}}),onClick:Y,className:"bg-white! dark:bg-neutral-800! hover:bg-blue-50! dark:hover:bg-neutral-700!",disabled:l<=.25,p:7}),jsxRuntime.jsxs(chunkCHKXYQZ5_js.rb,{py:8,px:8,className:"flex items-center justify-between gap-1.5 min-w-21 rounded-[5px]!",children:[jsxRuntime.jsx(chunkCHKXYQZ5_js._a,{color:"text.lighter",style:{fontSize:10},children:"Scale:"}),jsxRuntime.jsxs(chunkCHKXYQZ5_js._a,{children:[l*100,"%"]})]}),jsxRuntime.jsx(chunkCHKXYQZ5_js.z,{variant:"outlined","aria-label":"zoom-in",size:"small",color:"default",icon:jsxRuntime.jsx(chunkCHKXYQZ5_js.na,{style:{width:14,height:14}}),onClick:W,className:"bg-white! dark:bg-neutral-800! hover:bg-blue-50! dark:hover:bg-neutral-700!",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:M,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 dark:border-neutral-700 animate-spin border-s-transparent"})}),children:jsxRuntime.jsx(reactVirtuoso.Virtuoso,{ref:C,style:{height:$||"calc(100dvh - 190px)",width:"100%",scrollbarGutter:"stable both-edges"},totalCount:a,rangeChanged:ee,defaultItemHeight:x,itemContent:e=>jsxRuntime.jsx("div",{className:"mx-auto w-fit mb-4 border border-1 border-gray-100 dark:border-neutral-800",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 dark:border-neutral-700 animate-spin border-s-transparent"})}),className:"h-auto w-full transition-[width] duration-[600ms] ease-in-out"})})})})})]})},"PdfDriver");exports.PdfDriver=Ne;//# sourceMappingURL=PdfDriver-QVSVI5RP.js.map
2
+ //# sourceMappingURL=PdfDriver-QVSVI5RP.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-FZC4EDGW.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 dark:text-gray-400\">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! dark:bg-neutral-800! hover:bg-blue-50! dark:hover:bg-neutral-700!\"\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! dark:bg-neutral-800! hover:bg-blue-50! dark:hover:bg-neutral-700!\"\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 dark:border-neutral-700 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 dark:border-neutral-800\">\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 dark:border-neutral-700 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-QVSVI5RP.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 dark:text-gray-400\">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! dark:bg-neutral-800! hover:bg-blue-50! dark:hover:bg-neutral-700!\"\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! dark:bg-neutral-800! hover:bg-blue-50! dark:hover:bg-neutral-700!\"\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 dark:border-neutral-700 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 dark:border-neutral-800\">\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 dark:border-neutral-700 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"]}
@@ -762,7 +762,7 @@
762
762
  background: ${o.input[s].disabled.background};
763
763
  cursor: not-allowed;
764
764
  `}
765
- `);var Q1=r(o=>{Y4.useEffect(()=>{if(!o||typeof window>"u")return;let e=document.body,t=document.documentElement,i=window.getComputedStyle(e),C=window.innerWidth-t.clientWidth,s=i.paddingRight,l=e.style.overflow,d=t.style.overflow;return e.style.overflow="hidden",t.style.overflow="hidden",e.style.paddingRight=`${parseInt(s)+C}px`,()=>{e.style.overflow=l,t.style.overflow=d,e.style.paddingRight=s;}},[o]);},"useBodyScrollLock"),u4=r(async o=>{let e=[],t=r(async C=>{if(C.isFile){let s=await new Promise((l,d)=>{C.file(l,d);});s.folder_path=C.fullPath.split("/").slice(0,-1).join("/"),e.push(s);}else if(C.isDirectory){let s=C.createReader(),l=r(async()=>{let d=await new Promise((c,g)=>{s.readEntries(c,g);});d.length!==0&&(await Promise.all(d.map(c=>t(c))),await l());},"readEntries");await l();}},"readEntry"),i=Array.from(o);return await Promise.all(i.map(async C=>{let s=C.webkitGetAsEntry();s&&await t(s);})),e},"getFilesFromDataTransfer");var pp=Y4.forwardRef(r(function({error:e,variant:t="outlined",multiple:i=false,accept:C,uploadButtonText:s="Files",uploadFolderButtonText:l="Folder",dragDropPlaceholder:d="Drag and drop files here",infoPlaceholder:c,dragDropText:g="Drop to upload",enableFilePreview:u=true,value:h=[],onChange:m,onError:v,disabled:b,className:M,dragDropClassName:k,hasIcon:y=true,hasButton:D=true,onClick:G,...P},q){let[L,I]=Y4.useState(false),[B,y1]=Y4.useState(false),C1=Y4.useRef(null),s1=Y4.useRef(null),J=r(x=>{if(i){let F=[...h,...x];m?.(F);}else m?.(x.length>0?[x[0]]:[]);},"handleFiles"),s2=r(x=>{x.preventDefault(),b||I(true);},"handleDragOver"),l2=r(x=>{x.preventDefault(),I(false);},"handleDragLeave"),d2=r(async x=>{if(x.preventDefault(),I(false),!(b||B))try{y1(!0);let F=await u4(x.dataTransfer.items);J(F);}catch(F){console.error("\u041F\u043E\u043C\u0438\u043B\u043A\u0430 \u043F\u0440\u0438 \u0447\u0438\u0442\u0430\u043D\u043D\u0456 \u0444\u0430\u0439\u043B\u0456\u0432:",F);}finally{y1(false);}},"handleDrop"),p2=r(x=>{if(!x.target.files)return;let F=Array.from(x.target.files);J(F);},"handleInputChange"),l1=r(()=>{!b&&C1.current&&C1.current.click();},"handleUploadClick"),H=r(()=>{!b&&s1.current&&s1.current.click();},"handleFolderUploadClick"),Z=r(x=>{if(!x.target.files)return;let F=Array.from(x.target.files).map(d1=>{let U=d1,i5=d1.webkitRelativePath??"";return U.folder_path=i5?"/"+i5.split("/").slice(0,-1).join("/"):"",U});J(F);},"handleFolderInputChange"),W=r(x=>{if(b)return;let F=h.filter((d1,U)=>U!==x);m?.(F);},"removeFile"),c2=r(x=>{if(x===0)return "0 Bytes";let F=1024,d1=["Bytes","KB","MB","GB"],U=Math.floor(Math.log(x)/Math.log(F));return parseFloat((x/Math.pow(F,U)).toFixed(2))+" "+d1[U]},"formatFileSize");return jsxRuntime.jsxs(z7,{className:M,children:[jsxRuntime.jsxs(T7,{$error:!!e,$variant:t,$disabled:!!b,$isDragOver:L,onDragOver:s2,onDragLeave:l2,onDrop:d2,className:k,onClick:G||l1,children:[jsxRuntime.jsx(m4,{ref:C1,type:"file",multiple:i,accept:C,onChange:p2,disabled:b||B,onClick:x=>x.stopPropagation(),...P}),jsxRuntime.jsx(m4,{ref:s1,type:"file",webkitdirectory:"",accept:C,onChange:Z,disabled:b||B,onClick:x=>x.stopPropagation()}),jsxRuntime.jsxs(G7,{children:[y&&(L?jsxRuntime.jsx("div",{className:"mb-3 flex items-center justify-center w-[50px] h-[50px] border border-gray-200 dark:border-neutral-700 rounded-md",children:jsxRuntime.jsx(m2,{width:20,className:"-rotate-90"})}):jsxRuntime.jsx(O,{size:"small",variant:"empty",color:"primary",type:"button",onClick:x=>{x.stopPropagation(),l1();},disabled:b||B,icon:jsxRuntime.jsx(A2,{color:"currentColor",width:64,className:"shrink-0 w-[64px]! h-[47px]!"}),className:"mb-3"})),jsxRuntime.jsx("div",{className:"flex flex-wrap items-center justify-center gap-1.25",children:L?jsxRuntime.jsx(x4,{children:g}):jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx(x4,{children:d}),B&&jsxRuntime.jsx("div",{className:"h-4.5 w-4.5 shrink-0 animate-spin rounded-full border-2 border-blue-500 border-s-transparent"})]})}),!!c&&jsxRuntime.jsx(R7,{$variant:t,children:c}),D&&!B&&jsxRuntime.jsxs("div",{className:"flex flex-wrap md:flex-nowrap items-center justify-center gap-2 mt-1",children:[jsxRuntime.jsx(O,{size:"small",variant:"outlined",color:"default",type:"button",icon:jsxRuntime.jsx(z2,{}),onClick:x=>{x.stopPropagation(),l1();},disabled:b,className:"text-[14px]! py-1.5!",children:s}),jsxRuntime.jsx(O,{size:"small",variant:"outlined",color:"default",type:"button",icon:jsxRuntime.jsx(y2,{}),onClick:x=>{x.stopPropagation(),H();},disabled:b,className:"text-[14px]! py-1.5!",children:l})]}),!!e&&jsxRuntime.jsxs(A7,{$variant:t,children:[jsxRuntime.jsx(m1,{}),jsxRuntime.jsx(j5,{ml:5,color:"error",variant:"body",children:e})]})]})]}),u&&h.length>0&&jsxRuntime.jsx(D7,{children:h.map((x,F)=>jsxRuntime.jsxs(W7,{children:[jsxRuntime.jsxs(N7,{children:[jsxRuntime.jsx(O7,{children:x.name}),jsxRuntime.jsx(_7,{children:c2(x.size)})]}),!b&&jsxRuntime.jsx(U7,{type:"button",onClick:()=>W(F),children:"\xD7"})]},`${x.name}-${F}`))})]})},"FileField")),z7=a1.styled.div`
765
+ `);var Q1=r(o=>{Y4.useEffect(()=>{if(!o||typeof window>"u")return;let e=document.body,t=document.documentElement,i=window.getComputedStyle(e),C=window.innerWidth-t.clientWidth,s=i.paddingRight,l=e.style.overflow,d=t.style.overflow;return e.style.overflow="hidden",t.style.overflow="hidden",e.style.paddingRight=`${parseInt(s)+C}px`,()=>{e.style.overflow=l,t.style.overflow=d,e.style.paddingRight=s;}},[o]);},"useBodyScrollLock"),u4=r(async o=>{let e=[],t=r(async C=>{if(C.isFile){let s=await new Promise((l,d)=>{C.file(l,d);});s.folder_path=C.fullPath.split("/").slice(0,-1).join("/"),e.push(s);}else if(C.isDirectory){let s=C.createReader(),l=r(async()=>{let d=await new Promise((c,g)=>{s.readEntries(c,g);});d.length!==0&&(await Promise.all(d.map(c=>t(c))),await l());},"readEntries");await l();}},"readEntry"),i=Array.from(o);return await Promise.all(i.map(async C=>{let s=C.webkitGetAsEntry();s&&await t(s);})),e},"getFilesFromDataTransfer");var pp=Y4.forwardRef(r(function({error:e,variant:t="outlined",multiple:i=false,accept:C,uploadButtonText:s="Files",uploadFolderButtonText:l="Folder",dragDropPlaceholder:d="Drag and drop files here",infoPlaceholder:c,dragDropText:g="Drop to upload",enableFilePreview:u=true,value:h=[],onChange:m,onError:v,disabled:b,className:M,dragDropClassName:k,hasIcon:y=true,hasButton:D=true,onClick:G,...P},q){let[L,I]=Y4.useState(false),[B,y1]=Y4.useState(false),C1=Y4.useRef(null),s1=Y4.useRef(null),J=r(x=>{if(i){let F=[...h,...x];m?.(F);}else m?.(x.length>0?[x[0]]:[]);},"handleFiles"),s2=r(x=>{x.preventDefault(),b||I(true);},"handleDragOver"),l2=r(x=>{x.preventDefault(),I(false);},"handleDragLeave"),d2=r(async x=>{if(x.preventDefault(),I(false),!(b||B))try{y1(!0);let F=await u4(x.dataTransfer.items);J(F);}catch(F){console.error("\u041F\u043E\u043C\u0438\u043B\u043A\u0430 \u043F\u0440\u0438 \u0447\u0438\u0442\u0430\u043D\u043D\u0456 \u0444\u0430\u0439\u043B\u0456\u0432:",F);}finally{y1(false);}},"handleDrop"),p2=r(x=>{if(!x.target.files)return;let F=Array.from(x.target.files);x.target.value="",J(F);},"handleInputChange"),l1=r(()=>{!b&&C1.current&&C1.current.click();},"handleUploadClick"),H=r(()=>{!b&&s1.current&&s1.current.click();},"handleFolderUploadClick"),Z=r(x=>{if(!x.target.files)return;let F=Array.from(x.target.files).map(d1=>{let U=d1,i5=d1.webkitRelativePath??"";return U.folder_path=i5?"/"+i5.split("/").slice(0,-1).join("/"):"",U});x.target.value="",J(F);},"handleFolderInputChange"),W=r(x=>{if(b)return;let F=h.filter((d1,U)=>U!==x);m?.(F);},"removeFile"),c2=r(x=>{if(x===0)return "0 Bytes";let F=1024,d1=["Bytes","KB","MB","GB"],U=Math.floor(Math.log(x)/Math.log(F));return parseFloat((x/Math.pow(F,U)).toFixed(2))+" "+d1[U]},"formatFileSize");return jsxRuntime.jsxs(z7,{className:M,children:[jsxRuntime.jsxs(T7,{$error:!!e,$variant:t,$disabled:!!b,$isDragOver:L,onDragOver:s2,onDragLeave:l2,onDrop:d2,className:k,onClick:G||l1,children:[jsxRuntime.jsx(m4,{ref:C1,type:"file",multiple:i,accept:C,onChange:p2,disabled:b||B,onClick:x=>x.stopPropagation(),...P}),jsxRuntime.jsx(m4,{ref:s1,type:"file",webkitdirectory:"",accept:C,onChange:Z,disabled:b||B,onClick:x=>x.stopPropagation()}),jsxRuntime.jsxs(G7,{children:[y&&(L?jsxRuntime.jsx("div",{className:"mb-3 flex items-center justify-center w-[50px] h-[50px] border border-gray-200 dark:border-neutral-700 rounded-md",children:jsxRuntime.jsx(m2,{width:20,className:"-rotate-90"})}):jsxRuntime.jsx(O,{size:"small",variant:"empty",color:"primary",type:"button",onClick:x=>{x.stopPropagation(),l1();},disabled:b||B,icon:jsxRuntime.jsx(A2,{color:"currentColor",width:64,className:"shrink-0 w-[64px]! h-[47px]!"}),className:"mb-3"})),jsxRuntime.jsx("div",{className:"flex flex-wrap items-center justify-center gap-1.25",children:L?jsxRuntime.jsx(x4,{children:g}):jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx(x4,{children:d}),B&&jsxRuntime.jsx("div",{className:"h-4.5 w-4.5 shrink-0 animate-spin rounded-full border-2 border-blue-500 border-s-transparent"})]})}),!!c&&jsxRuntime.jsx(R7,{$variant:t,children:c}),D&&!B&&jsxRuntime.jsxs("div",{className:"flex flex-wrap md:flex-nowrap items-center justify-center gap-2 mt-1",children:[jsxRuntime.jsx(O,{size:"small",variant:"outlined",color:"default",type:"button",icon:jsxRuntime.jsx(z2,{}),onClick:x=>{x.stopPropagation(),l1();},disabled:b,className:"text-[14px]! py-1.5!",children:s}),jsxRuntime.jsx(O,{size:"small",variant:"outlined",color:"default",type:"button",icon:jsxRuntime.jsx(y2,{}),onClick:x=>{x.stopPropagation(),H();},disabled:b,className:"text-[14px]! py-1.5!",children:l})]}),!!e&&jsxRuntime.jsxs(A7,{$variant:t,children:[jsxRuntime.jsx(m1,{}),jsxRuntime.jsx(j5,{ml:5,color:"error",variant:"body",children:e})]})]})]}),u&&h.length>0&&jsxRuntime.jsx(D7,{children:h.map((x,F)=>jsxRuntime.jsxs(W7,{children:[jsxRuntime.jsxs(N7,{children:[jsxRuntime.jsx(O7,{children:x.name}),jsxRuntime.jsx(_7,{children:c2(x.size)})]}),!b&&jsxRuntime.jsx(U7,{type:"button",onClick:()=>W(F),children:"\xD7"})]},`${x.name}-${F}`))})]})},"FileField")),z7=a1.styled.div`
766
766
  width: 100%;
767
767
  `,m4=a1.styled.input`
768
768
  display: none;
@@ -1381,5 +1381,5 @@
1381
1381
  }
1382
1382
  }
1383
1383
  animation: move 1.5s linear infinite;
1384
- `;exports.$=O6;exports.$a=Ls;exports.A=f2;exports.Aa=F3;exports.Ab=ag;exports.B=r6;exports.Ba=P3;exports.Bb=Cg;exports.C=i6;exports.Ca=$3;exports.Cb=sg;exports.D=m2;exports.Da=I3;exports.Db=k4;exports.E=C6;exports.Ea=z3;exports.Eb=N8;exports.F=s6;exports.Fa=G3;exports.Fb=Lg;exports.G=x2;exports.Ga=A3;exports.Gb=P4;exports.H=S2;exports.Ha=W3;exports.Hb=Kg;exports.I=c6;exports.Ia=N3;exports.Ib=qg;exports.J=b6;exports.Ja=O3;exports.Jb=Jg;exports.K=h6;exports.Ka=U3;exports.Kb=Qg;exports.L=m6;exports.La=Y3;exports.Lb=n9;exports.M=x6;exports.Ma=K3;exports.Mb=Lb;exports.N=w6;exports.Na=J3;exports.Nb=$b;exports.O=M6;exports.Oa=j3;exports.P=V6;exports.Pa=o0;exports.Q=H6;exports.Qa=e0;exports.R=k6;exports.Ra=r0;exports.S=P6;exports.Sa=A2;exports.T=y2;exports.Ta=D2;exports.U=$6;exports.Ua=i0;exports.V=E6;exports.Va=t1;exports.W=B6;exports.Wa=DC;exports.X=T6;exports.Xa=KC;exports.Y=G6;exports.Ya=rs;exports.Z=A6;exports.Za=ds;exports._=W6;exports._a=j5;exports.a=r;exports.aa=U6;exports.ab=$s;exports.b=V1;exports.ba=Y6;exports.bb=Gs;exports.c=p;exports.ca=K6;exports.cb=_s;exports.d=a5;exports.da=J6;exports.db=qs;exports.e=z;exports.ea=Q6;exports.eb=tl;exports.f=p1;exports.fa=o3;exports.fb=Sl;exports.g=R;exports.ga=t3;exports.gb=kl;exports.h=N;exports.ha=n3;exports.hb=C4;exports.i=p9;exports.ia=a3;exports.ib=Yl;exports.j=c9;exports.ja=Z2;exports.jb=s4;exports.k=g9;exports.ka=s3;exports.kb=dd;exports.l=L1;exports.la=$2;exports.lb=kd;exports.m=C5;exports.ma=E2;exports.mb=c4;exports.n=s5;exports.na=l3;exports.nb=u4;exports.o=l5;exports.oa=p3;exports.ob=pp;exports.p=d5;exports.pa=m1;exports.pb=q7;exports.q=g5;exports.qa=g3;exports.qb=o8;exports.r=b5;exports.ra=x1;exports.rb=Rp;exports.s=Y9;exports.sa=u3;exports.sb=Yp;exports.t=k1;exports.ta=f3;exports.tb=Qp;exports.u=f;exports.ua=x3;exports.ub=lc;exports.v=J4;exports.va=S3;exports.vb=mc;exports.w=S;exports.wa=v3;exports.wb=Lc;exports.x=w;exports.xa=y3;exports.xb=$c;exports.y=so;exports.ya=L3;exports.yb=Rc;exports.z=O;exports.za=z2;exports.zb=Xc;//# sourceMappingURL=chunk-72BA4VF6.js.map
1385
- //# sourceMappingURL=chunk-72BA4VF6.js.map
1384
+ `;exports.$=O6;exports.$a=Ls;exports.A=f2;exports.Aa=F3;exports.Ab=ag;exports.B=r6;exports.Ba=P3;exports.Bb=Cg;exports.C=i6;exports.Ca=$3;exports.Cb=sg;exports.D=m2;exports.Da=I3;exports.Db=k4;exports.E=C6;exports.Ea=z3;exports.Eb=N8;exports.F=s6;exports.Fa=G3;exports.Fb=Lg;exports.G=x2;exports.Ga=A3;exports.Gb=P4;exports.H=S2;exports.Ha=W3;exports.Hb=Kg;exports.I=c6;exports.Ia=N3;exports.Ib=qg;exports.J=b6;exports.Ja=O3;exports.Jb=Jg;exports.K=h6;exports.Ka=U3;exports.Kb=Qg;exports.L=m6;exports.La=Y3;exports.Lb=n9;exports.M=x6;exports.Ma=K3;exports.Mb=Lb;exports.N=w6;exports.Na=J3;exports.Nb=$b;exports.O=M6;exports.Oa=j3;exports.P=V6;exports.Pa=o0;exports.Q=H6;exports.Qa=e0;exports.R=k6;exports.Ra=r0;exports.S=P6;exports.Sa=A2;exports.T=y2;exports.Ta=D2;exports.U=$6;exports.Ua=i0;exports.V=E6;exports.Va=t1;exports.W=B6;exports.Wa=DC;exports.X=T6;exports.Xa=KC;exports.Y=G6;exports.Ya=rs;exports.Z=A6;exports.Za=ds;exports._=W6;exports._a=j5;exports.a=r;exports.aa=U6;exports.ab=$s;exports.b=V1;exports.ba=Y6;exports.bb=Gs;exports.c=p;exports.ca=K6;exports.cb=_s;exports.d=a5;exports.da=J6;exports.db=qs;exports.e=z;exports.ea=Q6;exports.eb=tl;exports.f=p1;exports.fa=o3;exports.fb=Sl;exports.g=R;exports.ga=t3;exports.gb=kl;exports.h=N;exports.ha=n3;exports.hb=C4;exports.i=p9;exports.ia=a3;exports.ib=Yl;exports.j=c9;exports.ja=Z2;exports.jb=s4;exports.k=g9;exports.ka=s3;exports.kb=dd;exports.l=L1;exports.la=$2;exports.lb=kd;exports.m=C5;exports.ma=E2;exports.mb=c4;exports.n=s5;exports.na=l3;exports.nb=u4;exports.o=l5;exports.oa=p3;exports.ob=pp;exports.p=d5;exports.pa=m1;exports.pb=q7;exports.q=g5;exports.qa=g3;exports.qb=o8;exports.r=b5;exports.ra=x1;exports.rb=Rp;exports.s=Y9;exports.sa=u3;exports.sb=Yp;exports.t=k1;exports.ta=f3;exports.tb=Qp;exports.u=f;exports.ua=x3;exports.ub=lc;exports.v=J4;exports.va=S3;exports.vb=mc;exports.w=S;exports.wa=v3;exports.wb=Lc;exports.x=w;exports.xa=y3;exports.xb=$c;exports.y=so;exports.ya=L3;exports.yb=Rc;exports.z=O;exports.za=z2;exports.zb=Xc;//# sourceMappingURL=chunk-CHKXYQZ5.js.map
1385
+ //# sourceMappingURL=chunk-CHKXYQZ5.js.map