@cyber-harbour/ui 2.2.18 → 2.2.20
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-MYEDFGO3.mjs → PdfDriver-MGKDGHEQ.mjs} +2 -2
- package/dist/{PdfDriver-MYEDFGO3.mjs.map → PdfDriver-MGKDGHEQ.mjs.map} +1 -1
- package/dist/{PdfDriver-FZC4EDGW.js → PdfDriver-QVSVI5RP.js} +2 -2
- package/dist/{PdfDriver-FZC4EDGW.js.map → PdfDriver-QVSVI5RP.js.map} +1 -1
- package/dist/{chunk-72BA4VF6.js → chunk-CHKXYQZ5.js} +3 -3
- package/dist/chunk-CHKXYQZ5.js.map +1 -0
- package/dist/{chunk-4AIWL7CV.mjs → chunk-DTPQDD44.mjs} +3 -3
- package/dist/chunk-DTPQDD44.mjs.map +1 -0
- package/dist/index.js +21 -21
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +3 -3
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
- package/dist/chunk-4AIWL7CV.mjs.map +0 -1
- package/dist/chunk-72BA4VF6.js.map +0 -1
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import {a,rb,_a,z as z$1,ma,la,Ra,na}from'./chunk-
|
|
2
|
-
//# sourceMappingURL=PdfDriver-
|
|
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
|
|
2
|
-
//# sourceMappingURL=PdfDriver-
|
|
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":"ubAQA,IAAMA,CAAAA,CAAW,QAAA,CAGb,OAAO,OAAW,GAAA,EAAe,OAAO,QAAA,CAAa,GAAA,GACvDC,cAAAA,CAAM,mBAAA,CAAoB,UAAY,CAAA,EAAGD,CAAQ,CAAA,kBAAA,CAAA,CAAA,CAMnD,IAAME,EAAAA,CAA4B,GAAA,CAC5BC,GAAuB,GAAA,CACvBC,EAAAA,CAAwB,GAAA,CACxBC,EAAAA,CAAoB,EAAA,CACpBC,EAAAA,CAAmB,MACnBC,CAAAA,CAAmB,GAAA,CAEZC,EAAAA,CAAsCC,kBAAAA,CAAA,CAAC,CAAE,IAAAC,CAAI,CAAA,GAAM,CAC9D,GAAM,CAACC,CAAAA,CAAUC,CAAW,CAAA,CAAIC,cAAAA,CAAiB,CAAC,CAAA,CAC5C,CAACC,CAAAA,CAAYC,CAAa,CAAA,CAAIF,cAAAA,CAAiB,CAAC,CAAA,CAChD,CAACG,CAAAA,CAASC,CAAU,CAAA,CAAIJ,cAAAA,CAAkB,IAAI,CAAA,CAC9C,CAACK,CAAAA,CAAOC,CAAQ,CAAA,CAAIN,cAAAA,CAAwB,IAAI,CAAA,CAChD,CAACO,CAAAA,CAAOC,CAAQ,CAAA,CAAIR,cAAAA,CAAiBN,CAAgB,CAAA,CACrD,CAACe,CAAAA,CAAQC,CAAS,CAAA,CAAIV,cAAAA,CAAiBN,CAAgB,CAAA,CACvD,CAACiB,CAAAA,CAAOC,CAAQ,CAAA,CAAIZ,cAAAA,CAAS,CAAC,CAAA,CAC9B,CAACa,CAAAA,CAAmBC,CAAoB,CAAA,CAAId,cAAAA,CAASN,CAAgB,CAAA,CACrE,CAACqB,CAAAA,CAAiBC,CAAkB,CAAA,CAAIhB,cAAAA,CAASP,EAAgB,CAAA,CAEjEwB,CAAAA,CAAeC,YAAAA,CAAuB,IAAI,CAAA,CAC1CC,CAAAA,CAAcD,YAAAA,CAAuB,IAAI,CAAA,CACzCE,CAAAA,CAAqBF,aAAgB,KAAK,CAAA,CAC1CG,CAAAA,CAAmBH,YAAAA,CAA8B,IAAI,CAAA,CACrDI,EAAeJ,YAAAA,CAAO,KAAK,CAAA,CAE3BK,CAAAA,CAAeC,iBAAAA,CACnB,CAACC,EAAcC,CAAAA,CAAS,IAAA,GAAS,CAC3BD,CAAAA,CAAO,CAAA,EAAKA,CAAAA,CAAO3B,IAEvBsB,CAAAA,CAAmB,OAAA,CAAU,IAAA,CAC7BD,CAAAA,CAAY,OAAA,EAAS,aAAA,CAAc,CACjC,KAAA,CAAOM,CAAAA,CAAO,CAAA,CACd,KAAA,CAAO,OAAA,CACP,QAAA,CAAUC,EAAS,QAAA,CAAW,MAChC,CAAC,CAAA,CAEGL,CAAAA,CAAiB,OAAA,EACnB,aAAaA,CAAAA,CAAiB,OAAO,CAAA,CAGvCA,CAAAA,CAAiB,OAAA,CAAU,UAAA,CAAW,IAAM,CACtCC,CAAAA,CAAa,OAAA,GAASF,CAAAA,CAAmB,OAAA,CAAU,KAAA,EACzD,EAAG/B,EAAyB,CAAA,EAC9B,CAAA,CACA,CAACS,CAAQ,CACX,EAEM6B,CAAAA,CAAkBC,aAAAA,CAAQ,IACvBC,kBAAAA,CAAS,CAACJ,CAAAA,CAAcC,EAAS,KAAA,GAAU,CAChDH,CAAAA,CAAaE,CAAAA,CAAMC,CAAM,EAC3B,EAAGpC,EAAoB,CAAA,CACtB,CAACiC,CAAY,CAAC,EAEXO,CAAAA,CAAeN,iBAAAA,CAAY,IAAM,CACrCZ,CAAAA,CAAUmB,CAAAA,EAAS,KAAK,GAAA,CAAIA,CAAAA,CAAO,GAAA,CAAM,CAAC,CAAC,EAC7C,EAAG,EAAE,CAAA,CAECC,CAAAA,CAAgBR,iBAAAA,CAAY,IAAM,CACtCZ,CAAAA,CAAUmB,CAAAA,EAAS,IAAA,CAAK,GAAA,CAAIA,CAAAA,CAAO,GAAA,CAAM,GAAI,CAAC,EAChD,CAAA,CAAG,EAAE,CAAA,CAELE,gBAAU,IAAM,CACd,GAAI,CAAChB,CAAAA,CAAa,OAAA,CAAS,OAC3B,IAAMiB,CAAAA,CAAaL,kBAAAA,CAAS,IAAM,CAC5BZ,CAAAA,CAAa,UACfT,CAAAA,CAASS,CAAAA,CAAa,OAAA,CAAQ,WAAA,CAAczB,EAAiB,CAAA,CAC7DkB,EAAUO,CAAAA,CAAa,OAAA,CAAQ,YAAY,CAAA,EAE/C,CAAA,CAAG1B,EAAqB,EACxB2C,CAAAA,EAAW,CACX,IAAMC,CAAAA,CAAW,IAAI,cAAA,CAAeD,CAAU,CAAA,CAC9C,OAAAC,CAAAA,CAAS,OAAA,CAAQlB,CAAAA,CAAa,OAAO,EAC9B,IAAM,CACXkB,CAAAA,CAAS,UAAA,EAAW,CACpBD,CAAAA,CAAW,SACb,CACF,CAAA,CAAG,EAAE,CAAA,CAEL,IAAME,CAAAA,CAAUR,aAAAA,CACd,KAAO,CACL,UAAA,CAAY,IAAA,CACZ,QAAS,CAAA,EAAGzC,CAAQ,CAAA,OAAA,CAAA,CACpB,mBAAA,CAAqB,CAAA,EAAGA,CAAQ,mBAChC,OAAA,CAAS,CAAA,EAAGA,CAAQ,CAAA,MAAA,CAAA,CACpB,MAAA,CAAQ,CAAA,EAAGA,CAAQ,CAAA,KAAA,CACrB,CAAA,CAAA,CACA,EACF,CAAA,CAEMkD,CAAAA,CAAwBb,kBAAY,CAAC,CAAE,QAAA,CAAA1B,CAAS,CAAA,GAAkC,CACtFC,EAAYD,CAAQ,CAAA,CACpBM,CAAAA,CAAW,KAAK,EAClB,CAAA,CAAG,EAAE,CAAA,CAECkC,CAAAA,CAAsBd,iBAAAA,CAAanB,CAAAA,EAAuB,CAC9DC,EAAS,CAAA,oBAAA,EAAuBD,CAAAA,CAAM,OAAO,CAAA,CAAE,CAAA,CAC/CD,CAAAA,CAAW,KAAK,EAClB,CAAA,CAAG,EAAE,CAAA,CAECmC,CAAAA,CAAaf,kBAChBgB,CAAAA,EAAyB,CACxB,IAAMC,CAAAA,CAAUxC,CAAAA,CAAauC,CAAAA,CAC7BtC,EAAcuC,CAAO,CAAA,CACrBlB,CAAAA,CAAakB,CAAO,EACtB,CAAA,CACA,CAACxC,CAAAA,CAAYsB,CAAY,CAC3B,CAAA,CAEMmB,CAAAA,CAAelB,iBAAAA,CAAY,IAAY,CAC3Ce,CAAAA,CAAW,EAAE,EACf,CAAA,CAAG,CAACA,CAAU,CAAC,CAAA,CAETI,CAAAA,CAAWnB,iBAAAA,CAAY,IAAY,CACvCe,EAAW,CAAC,EACd,CAAA,CAAG,CAACA,CAAU,CAAC,EAETK,EAAAA,CAAqBpB,iBAAAA,CACxBqB,CAAAA,EAAoD,CACnD,GAAIzB,CAAAA,CAAmB,QACrB,OAEF,IAAM0B,CAAAA,CAAcD,CAAAA,CAAM,UAAA,CAAa,CAAA,CACnCC,IAAgB7C,CAAAA,EAClBC,CAAAA,CAAc4C,CAAW,EAE7B,CAAA,CACA,CAAC7C,CAAU,CACb,CAAA,CAiBA,OAfAgC,eAAAA,CAAU,KACRX,EAAa,OAAA,CAAU,IAAA,CAChB,IAAM,CACXA,CAAAA,CAAa,OAAA,CAAU,MACvBK,CAAAA,CAAgB,MAAA,EAAO,CACnBN,CAAAA,CAAiB,OAAA,EACnB,YAAA,CAAaA,EAAiB,OAAO,EAEzC,CAAA,CAAA,CACC,CAACM,CAAe,CAAC,EAEpBM,eAAAA,CAAU,IAAM,CACdnB,CAAAA,CAAqBP,CAAAA,CAAQI,CAAAA,CAAQI,CAAe,EACtD,CAAA,CAAG,CAACR,CAAAA,CAAOI,CAAAA,CAAOI,CAAe,CAAC,CAAA,CAE9BV,CAAAA,CAEA0C,cAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,uDAAA,CACb,SAAAA,cAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,0BAAA,CACb,QAAA,CAAAA,cAAAA,CAAC,KAAG,QAAA,CAAA1C,CAAAA,CAAM,CAAA,CACZ,CAAA,CACF,CAAA,CAKF2C,eAAAA,CAAC,OAAI,SAAA,CAAU,kDAAA,CACZ,QAAA,CAAA,CAAA7C,CAAAA,EACC4C,cAAAA,CAAC,KAAA,CAAA,CAAI,UAAU,iDAAA,CACb,QAAA,CAAAA,cAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,kCAAA,CAAmC,0BAAc,CAAA,CAClE,CAAA,CAEDjD,CAAAA,CAAW,CAAA,EACVkD,eAAAA,CAAC,KAAA,CAAA,CAAI,UAAU,iFAAA,CACb,QAAA,CAAA,CAAAA,eAAAA,CAACC,mBAAAA,CAAA,CAAI,EAAA,CAAI,EAAG,EAAA,CAAI,CAAA,CAAG,SAAA,CAAU,sDAAA,CAC3B,QAAA,CAAA,CAAAF,cAAAA,CAACG,oBAAA,CAAW,KAAA,CAAM,cAAA,CAAe,KAAA,CAAO,CAAE,QAAA,CAAU,EAAG,CAAA,CAAG,QAAA,CAAA,OAAA,CAE1D,CAAA,CACAF,eAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAU,sCACd,QAAA,CAAA,CAAAD,cAAAA,CAAC,OAAA,CAAA,CACC,IAAA,CAAK,QAAA,CACL,GAAA,CAAK,EACL,GAAA,CAAKjD,CAAAA,CACL,KAAA,CAAOG,CAAAA,CACP,QAAA,CAAW,CAAA,EAAM,CACf,IAAMwB,CAAAA,CAAO,QAAA,CAAS,CAAA,CAAE,MAAA,CAAO,KAAA,CAAO,EAAE,CAAA,CACpCA,CAAAA,EAAQ,CAAA,EAAKA,CAAAA,EAAQ3B,CAAAA,GACvBI,CAAAA,CAAcuB,CAAI,CAAA,CAClBE,CAAAA,CAAgBF,CAAAA,CAAM,KAAK,CAAA,EAE/B,CAAA,CACA,UAAU,qCAAA,CACZ,CAAA,CAAE,IAAA,CACC3B,CAAAA,CAAAA,CACL,CAAA,CACAkD,eAAAA,CAAC,OAAI,SAAA,CAAU,6BAAA,CACb,QAAA,CAAA,CAAAD,cAAAA,CAACI,kBAAAA,CAAA,CACC,QAAQ,OAAA,CACR,YAAA,CAAW,eAAA,CACX,KAAA,CAAM,WAAA,CACN,IAAA,CAAK,QACL,IAAA,CAAK,QAAA,CACL,QAAA,CAAUlD,CAAAA,EAAc,CAAA,CACxB,OAAA,CAASyC,EACT,IAAA,CAAMK,cAAAA,CAACK,mBAAAA,CAAA,CAAc,KAAA,CAAO,CAAE,MAAO,CAAA,CAAG,MAAA,CAAQ,CAAE,CAAA,CAAG,CAAA,CACvD,CAAA,CACAL,eAACI,kBAAAA,CAAA,CACC,OAAA,CAAQ,OAAA,CACR,YAAA,CAAW,WAAA,CACX,MAAM,WAAA,CACN,IAAA,CAAK,OAAA,CACL,IAAA,CAAK,QAAA,CACL,QAAA,CAAUlD,GAAcH,CAAAA,CACxB,OAAA,CAAS6C,CAAAA,CACT,IAAA,CAAMI,cAAAA,CAACM,mBAAAA,CAAA,CAAgB,KAAA,CAAO,CAAE,KAAA,CAAO,CAAA,CAAG,MAAA,CAAQ,CAAE,EAAG,CAAA,CACzD,CAAA,CAAA,CACF,CAAA,CAAA,CACF,CAAA,CACAL,eAAAA,CAAC,KAAA,CAAA,CAAI,UAAU,wCAAA,CACb,QAAA,CAAA,CAAAD,cAAAA,CAACI,kBAAAA,CAAA,CACC,OAAA,CAAQ,WACR,YAAA,CAAW,UAAA,CACX,KAAA,CAAM,SAAA,CACN,IAAA,CAAK,OAAA,CACL,KAAMJ,cAAAA,CAACO,mBAAAA,CAAA,CAAU,KAAA,CAAO,CAAE,KAAA,CAAO,GAAI,MAAA,CAAQ,EAAG,CAAA,CAAG,CAAA,CACnD,OAAA,CAAStB,CAAAA,CACT,UAAU,6EAAA,CACV,QAAA,CAAUrB,CAAAA,EAAS,GAAA,CACnB,CAAA,CAAG,CAAA,CACL,EACAqC,eAAAA,CAACC,mBAAAA,CAAA,CAAI,EAAA,CAAI,CAAA,CAAG,EAAA,CAAI,EAAG,SAAA,CAAU,mEAAA,CAC3B,QAAA,CAAA,CAAAF,cAAAA,CAACG,mBAAAA,CAAA,CAAW,MAAM,cAAA,CAAe,KAAA,CAAO,CAAE,QAAA,CAAU,EAAG,CAAA,CAAG,kBAE1D,CAAA,CACAF,eAAAA,CAACE,mBAAAA,CAAA,CAAY,QAAA,CAAA,CAAAvC,CAAAA,CAAQ,IAAI,GAAA,CAAA,CAAC,CAAA,CAAA,CAC5B,CAAA,CACAoC,cAAAA,CAACI,kBAAAA,CAAA,CACC,QAAQ,UAAA,CACR,YAAA,CAAW,SAAA,CACX,IAAA,CAAK,OAAA,CACL,KAAA,CAAM,UACN,IAAA,CAAMJ,cAAAA,CAACQ,mBAAAA,CAAA,CAAS,KAAA,CAAO,CAAE,MAAO,EAAA,CAAI,MAAA,CAAQ,EAAG,CAAA,CAAG,CAAA,CAClD,OAAA,CAASzB,EACT,SAAA,CAAU,6EAAA,CACV,QAAA,CAAUnB,CAAAA,EAAS,CAAA,CACnB,CAAA,CAAG,GACL,CAAA,CAAA,CACF,CAAA,CAAA,CACF,CAAA,CAEFoC,cAAAA,CAAC,KAAA,CAAA,CAAI,GAAA,CAAK9B,EAAc,SAAA,CAAU,gCAAA,CAChC,QAAA,CAAA8B,cAAAA,CAACS,iBAAAA,CAAA,CACC,QAASpB,CAAAA,CACT,IAAA,CAAMvC,CAAAA,CACN,aAAA,CAAewC,CAAAA,CACf,WAAA,CAAaC,EACb,OAAA,CACES,cAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,kCAAA,CAAmC,KAAA,CAAO,CAAE,MAAA,CAAQlC,CAAkB,CAAA,CACnF,QAAA,CAAAkC,cAAAA,CAAC,KAAA,CAAA,CAAI,UAAU,kHAAA,CAAmH,CAAA,CACpI,CAAA,CAGF,QAAA,CAAAA,cAAAA,CAACU,sBAAAA,CAAA,CACC,GAAA,CAAKtC,CAAAA,CACL,KAAA,CAAO,CAAE,MAAA,CAAQV,CAAAA,EAAU,uBAAwB,KAAA,CAAO,MAAA,CAAQ,eAAA,CAAiB,mBAAoB,CAAA,CACvG,UAAA,CAAYX,EACZ,YAAA,CAAc8C,EAAAA,CACd,iBAAA,CAAmB/B,CAAAA,CACnB,WAAA,CAAc6C,CAAAA,EACZX,eAAC,KAAA,CAAA,CAAI,SAAA,CAAU,4EAAA,CACb,QAAA,CAAAA,cAAAA,CAACY,aAAAA,CAAA,CACC,UAAA,CAAYD,CAAAA,CAAQ,CAAA,CACpB,eAAA,CAAiB,IAAA,CACjB,qBAAA,CAAuB,KACvB,KAAA,CAAOnD,CAAAA,CAAQI,CAAAA,CACf,aAAA,CAAgBc,CAAAA,EAAS,CACvB,GAAIiC,CAAAA,GAAU,CAAA,CAAG,CACf,IAAME,EAAAA,CAAQnC,CAAAA,CAAK,OAASA,CAAAA,CAAK,KAAA,CACjCT,CAAAA,CAAmB4C,EAAK,EAC1B,CACF,EACA,OAAA,CACEb,cAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,kCAAA,CAAmC,KAAA,CAAO,CAAE,MAAA,CAAQlC,CAAkB,CAAA,CACnF,QAAA,CAAAkC,cAAAA,CAAC,KAAA,CAAA,CAAI,UAAU,kHAAA,CAAmH,CAAA,CACpI,CAAA,CAEF,SAAA,CAAU,+DAAA,CACZ,CAAA,CACF,EAEJ,CAAA,CACF,CAAA,CACF,CAAA,CAAA,CACF,CAEJ,CAAA,CApRmD,WAAA","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-
|
|
1385
|
-
//# sourceMappingURL=chunk-
|
|
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
|