@cannyminds/dms-file-viewers 0.3.0 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{chunk-FZYMVHF6.mjs → chunk-4DJJINTB.mjs} +54 -55
- package/dist/chunk-4DJJINTB.mjs.map +1 -0
- package/dist/chunk-677DWENS.mjs +133 -0
- package/dist/chunk-677DWENS.mjs.map +1 -0
- package/dist/{chunk-GNWU6XHH.js → chunk-6ZBHO5SP.js} +15 -9
- package/dist/{chunk-GNWU6XHH.js.map → chunk-6ZBHO5SP.js.map} +1 -1
- package/dist/chunk-77UARJVQ.js +133 -0
- package/dist/chunk-77UARJVQ.js.map +1 -0
- package/dist/{chunk-LKBM4O47.mjs → chunk-7BLEPGZ4.mjs} +67 -61
- package/dist/chunk-7BLEPGZ4.mjs.map +1 -0
- package/dist/{chunk-QRYIHDRT.mjs → chunk-BHMFZTZ7.mjs} +54 -55
- package/dist/chunk-BHMFZTZ7.mjs.map +1 -0
- package/dist/{chunk-EMP7RZM2.js → chunk-DOOYIHGW.js} +52 -53
- package/dist/chunk-DOOYIHGW.js.map +1 -0
- package/dist/{chunk-73ZIFR3P.mjs → chunk-K5SKH4SD.mjs} +798 -466
- package/dist/chunk-K5SKH4SD.mjs.map +1 -0
- package/dist/{chunk-3STHCDAC.js → chunk-QELOFQEB.js} +757 -425
- package/dist/chunk-QELOFQEB.js.map +1 -0
- package/dist/{chunk-BNHQYEZ7.js → chunk-SBEFC7HP.js} +203 -158
- package/dist/chunk-SBEFC7HP.js.map +1 -0
- package/dist/{chunk-4RL77HKO.js → chunk-SNEIVT4R.js} +52 -53
- package/dist/chunk-SNEIVT4R.js.map +1 -0
- package/dist/{chunk-XQBXRMB7.mjs → chunk-UX6U3H7J.mjs} +14 -8
- package/dist/chunk-UX6U3H7J.mjs.map +1 -0
- package/dist/{chunk-7JTIG6OU.js → chunk-WP55NYFS.js} +67 -61
- package/dist/chunk-WP55NYFS.js.map +1 -0
- package/dist/{chunk-NOLXOOIP.mjs → chunk-YHMHDPLQ.mjs} +200 -155
- package/dist/chunk-YHMHDPLQ.mjs.map +1 -0
- package/dist/components/viewers/AudioViewer.d.mts +1 -1
- package/dist/components/viewers/AudioViewer.d.ts +1 -1
- package/dist/components/viewers/AudioViewer.js +2 -2
- package/dist/components/viewers/AudioViewer.mjs +1 -1
- package/dist/components/viewers/DefaultViewer.d.mts +1 -1
- package/dist/components/viewers/DefaultViewer.d.ts +1 -1
- package/dist/components/viewers/DefaultViewer.js +3 -2
- package/dist/components/viewers/DefaultViewer.js.map +1 -1
- package/dist/components/viewers/DefaultViewer.mjs +2 -1
- package/dist/components/viewers/ImageViewer.d.mts +1 -1
- package/dist/components/viewers/ImageViewer.d.ts +1 -1
- package/dist/components/viewers/ImageViewer.js +3 -3
- package/dist/components/viewers/ImageViewer.mjs +2 -2
- package/dist/components/viewers/PDFViewer.d.mts +1 -1
- package/dist/components/viewers/PDFViewer.d.ts +1 -1
- package/dist/components/viewers/PDFViewer.js +2 -2
- package/dist/components/viewers/PDFViewer.mjs +1 -1
- package/dist/components/viewers/TIFFViewer.d.mts +1 -1
- package/dist/components/viewers/TIFFViewer.d.ts +1 -1
- package/dist/components/viewers/TIFFViewer.js +2 -2
- package/dist/components/viewers/TIFFViewer.mjs +1 -1
- package/dist/components/viewers/TextViewer.d.mts +1 -1
- package/dist/components/viewers/TextViewer.d.ts +1 -1
- package/dist/components/viewers/TextViewer.js +2 -2
- package/dist/components/viewers/TextViewer.mjs +1 -1
- package/dist/components/viewers/VideoViewer.d.mts +1 -1
- package/dist/components/viewers/VideoViewer.d.ts +1 -1
- package/dist/components/viewers/VideoViewer.js +2 -2
- package/dist/components/viewers/VideoViewer.mjs +1 -1
- package/dist/index.d.mts +2 -2
- package/dist/index.d.ts +2 -2
- package/dist/index.js +30 -9
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +29 -8
- package/dist/index.mjs.map +1 -1
- package/dist/{types-CquKzJLE.d.mts → types-C6IEfcTM.d.mts} +13 -1
- package/dist/{types-CquKzJLE.d.ts → types-C6IEfcTM.d.ts} +13 -1
- package/package.json +1 -1
- package/dist/chunk-3STHCDAC.js.map +0 -1
- package/dist/chunk-4RL77HKO.js.map +0 -1
- package/dist/chunk-73ZIFR3P.mjs.map +0 -1
- package/dist/chunk-7JTIG6OU.js.map +0 -1
- package/dist/chunk-BNHQYEZ7.js.map +0 -1
- package/dist/chunk-EMP7RZM2.js.map +0 -1
- package/dist/chunk-FZYMVHF6.mjs.map +0 -1
- package/dist/chunk-LKBM4O47.mjs.map +0 -1
- package/dist/chunk-NOLXOOIP.mjs.map +0 -1
- package/dist/chunk-QLJKOQTP.mjs +0 -78
- package/dist/chunk-QLJKOQTP.mjs.map +0 -1
- package/dist/chunk-QRYIHDRT.mjs.map +0 -1
- package/dist/chunk-XQBXRMB7.mjs.map +0 -1
- package/dist/chunk-Z7FUO5RX.js +0 -78
- package/dist/chunk-Z7FUO5RX.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/viewers/PDFViewer.tsx","../src/components/viewers/pdf/SearchSidebar.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useMemo, useRef, useState, forwardRef, useImperativeHandle } from 'react';\r\nimport { PDFViewer as HeadlessPDFViewer } from '@cannyminds/pdf-viewer';\r\nimport { FileViewerProps } from '../../types';\r\nimport { getFileExtension } from '../../utils/fileUtils';\r\nimport FileIcon from '../FileIcon';\r\nimport FirstPageIcon from '@mui/icons-material/FirstPage';\r\nimport LastPageIcon from '@mui/icons-material/LastPage';\r\nimport ChevronLeftIcon from '@mui/icons-material/ChevronLeft';\r\nimport ChevronRightIcon from '@mui/icons-material/ChevronRight';\r\nimport ZoomInIcon from '@mui/icons-material/ZoomIn';\r\nimport ZoomOutIcon from '@mui/icons-material/ZoomOut';\r\nimport FitScreenIcon from '@mui/icons-material/FitScreen';\r\nimport AspectRatioIcon from '@mui/icons-material/AspectRatio';\r\nimport SearchIcon from '@mui/icons-material/Search';\r\nimport DownloadIcon from '@mui/icons-material/Download';\r\nimport PrintIcon from '@mui/icons-material/Print';\r\nimport InfoIcon from '@mui/icons-material/Info';\r\nimport DescriptionIcon from '@mui/icons-material/Description';\r\nimport { SearchSidebar } from './pdf/SearchSidebar';\r\n\r\ntype LoadingState = 'idle' | 'loading' | 'ready' | 'error';\r\n\r\n/**\r\n * IMPORTANT: The @cannyminds/pdf-viewer navigation API is not fully implemented.\r\n * Methods like getCurrentPage(), getTotalPages(), goToPage() return hardcoded values.\r\n * This component implements custom page tracking using DOM inspection and search detection.\r\n */\r\n\r\n// ============================================================================\r\n// Toolbar Styles\r\n// ============================================================================\r\nconst toolbarStyles = `\r\n @import url('https://fonts.googleapis.com/css2?family=Noto+Sans+Tamil:wght@400;500;600;700&family=Noto+Sans+Devanagari:wght@400;500;600;700&display=swap');\r\n \r\n * {\r\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen',\r\n 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue',\r\n 'Noto Sans Tamil', 'Noto Sans Devanagari', 'Lohit Tamil', 'Tamil MN', \r\n 'Arial Unicode MS', sans-serif !important;\r\n }\r\n \r\n /* Target PDF.js text layer */\r\n .textLayer,\r\n .textLayer span,\r\n .textLayer div,\r\n [class*=\"pdf\"],\r\n [class*=\"page\"],\r\n canvas + div,\r\n .embedpdf-viewport *,\r\n [data-pdf-viewer] *,\r\n [role=\"document\"] * {\r\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen',\r\n 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue',\r\n 'Noto Sans Tamil', 'Noto Sans Devanagari', 'Lohit Tamil', 'Tamil MN', \r\n 'Arial Unicode MS', sans-serif !important;\r\n }\r\n \r\n .pdf-viewer-header {\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n gap: 8px;\r\n padding: 3px 16px 0 16px;\r\n background: #fff;\r\n min-height: 36px;\r\n }\r\n .header-file-name {\r\n font-size: 12px;\r\n font-weight: 500;\r\n color: #424242;\r\n white-space: nowrap;\r\n overflow: hidden;\r\n text-overflow: ellipsis;\r\n max-width: 400px;\r\n }\r\n .pdf-viewer-toolbar {\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n padding: 0 16px 6px 16px;\r\n background: #fff;\r\n gap: 12px;\r\n flex-wrap: wrap;\r\n min-height: 44px;\r\n }\r\n .toolbar-section {\r\n display: flex;\r\n align-items: center;\r\n gap: 8px;\r\n }\r\n .toolbar-separator {\r\n width: 1px;\r\n height: 24px;\r\n background: #e0e0e0;\r\n margin: 0 4px;\r\n }\r\n .toolbar-button {\r\n padding: 8px;\r\n border: none;\r\n background: transparent;\r\n cursor: pointer;\r\n border-radius: 4px;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n transition: background 0.2s;\r\n }\r\n .toolbar-button:hover:not(:disabled) {\r\n background: #f5f5f5;\r\n }\r\n .toolbar-button:disabled {\r\n opacity: 0.4;\r\n cursor: not-allowed;\r\n }\r\n .toolbar-button svg {\r\n width: 20px;\r\n height: 20px;\r\n display: block;\r\n }\r\n .page-input {\r\n width: 60px;\r\n padding: 4px 8px;\r\n border: 1px solid #e0e0e0;\r\n border-radius: 4px;\r\n text-align: center;\r\n font-size: 14px;\r\n }\r\n .page-info {\r\n font-size: 14px;\r\n color: #666;\r\n white-space: nowrap;\r\n }\r\n .zoom-display {\r\n min-width: 60px;\r\n text-align: center;\r\n font-size: 14px;\r\n color: #666;\r\n }\r\n .search-input {\r\n padding: 4px 8px;\r\n border: 1px solid #e0e0e0;\r\n border-radius: 4px;\r\n font-size: 14px;\r\n min-width: 200px;\r\n }\r\n .pdf-viewer-content {\r\n flex: 1;\r\n overflow: hidden;\r\n position: relative;\r\n user-select: text;\r\n -webkit-user-select: text;\r\n -moz-user-select: text;\r\n -ms-user-select: text;\r\n }\r\n .pdf-viewer-container {\r\n display: flex;\r\n flex-direction: column;\r\n height: 100%;\r\n width: 100%;\r\n }\r\n .pdf-viewer-main {\r\n display: flex;\r\n flex: 1;\r\n overflow: hidden;\r\n position: relative;\r\n }\r\n .pdf-viewer-viewer-area {\r\n flex: 1;\r\n overflow: hidden;\r\n position: relative;\r\n user-select: text;\r\n -webkit-user-select: text;\r\n -moz-user-select: text;\r\n -ms-user-select: text;\r\n }\r\n .pdf-viewer-viewer-area * {\r\n user-select: text !important;\r\n -webkit-user-select: text !important;\r\n -moz-user-select: text !important;\r\n -ms-user-select: text !important;\r\n }\r\n`;\r\n\r\n// Define the PDFViewerRef interface matching the upstream library\r\ninterface CannyMindsPDFViewerRef {\r\n zoom: {\r\n zoomIn: () => void;\r\n zoomOut: () => void;\r\n setZoom: (level: number) => void;\r\n resetZoom: () => void;\r\n getZoom: () => number | any;\r\n fitToWidth: () => void;\r\n fitToPage: () => void;\r\n };\r\n navigation: {\r\n goToPage: (page: number) => void;\r\n getCurrentPage: () => number;\r\n getTotalPages: () => number;\r\n nextPage: () => void;\r\n previousPage: () => void;\r\n goToFirstPage: () => void;\r\n goToLastPage: () => void;\r\n };\r\n selection: {\r\n clearSelection: () => void;\r\n getSelectedText: () => string;\r\n };\r\n search: {\r\n searchText: (keyword: string) => Promise<any>;\r\n nextResult: () => number;\r\n previousResult: () => number;\r\n goToResult: (index: number) => number;\r\n stopSearch: () => void;\r\n startSearch: () => void;\r\n getSearchState: () => any;\r\n setShowAllResults: (show: boolean) => void;\r\n };\r\n document?: {\r\n isReady: () => boolean;\r\n isLoading: () => boolean;\r\n hasPassword: () => boolean;\r\n getDocumentInfo: () => any;\r\n };\r\n scroll?: {\r\n scrollToPage: (page: number) => void;\r\n };\r\n}\r\n\r\ninterface PDFViewerContentProps extends FileViewerProps {\r\n sourceDescription: string;\r\n}\r\n\r\nexport interface PDFViewerMethods {\r\n zoomIn: () => void;\r\n zoomOut: () => void;\r\n setZoom: (level: number) => void;\r\n resetZoom: () => void;\r\n getZoom: () => number;\r\n goToPage: (page: number) => void;\r\n getCurrentPage: () => number;\r\n getTotalPages: () => number;\r\n nextPage: () => void;\r\n previousPage: () => void;\r\n goToFirstPage: () => void;\r\n goToLastPage: () => void;\r\n searchText: (keyword: string) => Promise<any>;\r\n nextResult: () => number;\r\n previousResult: () => number;\r\n goToResult: (index: number) => number;\r\n stopSearch: () => void;\r\n getSearchState: () => any;\r\n getSelectedText: () => string;\r\n clearSelection: () => void;\r\n}\r\n\r\nconst PDFViewerContent = forwardRef<PDFViewerMethods, PDFViewerContentProps>((props, ref) => {\r\n const { \r\n file, \r\n onLoad, \r\n onError, \r\n fileName, \r\n showPageCount = true,\r\n showPageNavigation = true,\r\n showZoomControls = true,\r\n showDownload = true,\r\n showPrint = true,\r\n showSearch = true,\r\n showMetadata = true,\r\n showProperties = true,\r\n onMetadataClick,\r\n onPropertiesClick,\r\n onDownloadClick,\r\n onPrintClick\r\n } = props;\r\n const [pdfBuffer, setPdfBuffer] = useState<ArrayBuffer | null>(null);\r\n const [state, setState] = useState<LoadingState>('idle');\r\n const [error, setError] = useState<string | null>(null);\r\n const pdfViewerRef = useRef<CannyMindsPDFViewerRef>(null);\r\n \r\n // File info\r\n const resolvedFileName = useMemo(() => {\r\n if (fileName) return fileName;\r\n if (file instanceof File) return file.name;\r\n if (typeof file === 'string') {\r\n const urlParts = file.split('/');\r\n return urlParts[urlParts.length - 1] || 'document.pdf';\r\n }\r\n return 'document.pdf';\r\n }, [file, fileName]);\r\n\r\n const fileExtension = useMemo(\r\n () => getFileExtension(resolvedFileName),\r\n [resolvedFileName]\r\n );\r\n \r\n // Toolbar state\r\n const [currentPage, setCurrentPage] = useState(1);\r\n const [totalPages, setTotalPages] = useState(0);\r\n const [zoom, setZoom] = useState(100);\r\n const [searchQuery, setSearchQuery] = useState('');\r\n const [isSearching, setIsSearching] = useState(false);\r\n const [pdfContainer, setPdfContainer] = useState<HTMLElement | null>(null);\r\n const [isSidebarOpen, setIsSidebarOpen] = useState(false);\r\n const [searchResults, setSearchResults] = useState<any[]>([]);\r\n const [currentSearchResultIndex, setCurrentSearchResultIndex] = useState(0);\r\n const [totalSearchResults, setTotalSearchResults] = useState(0);\r\n\r\n // Reset all state when file changes\r\n useEffect(() => {\r\n // Reset search state\r\n setSearchQuery('');\r\n setSearchResults([]);\r\n setCurrentSearchResultIndex(0);\r\n setTotalSearchResults(0);\r\n setIsSearching(false);\r\n setIsSidebarOpen(false);\r\n \r\n // Reset page state\r\n setCurrentPage(1);\r\n setTotalPages(0);\r\n setZoom(100);\r\n \r\n // Reset PDF state\r\n setState('idle');\r\n setError(null);\r\n setPdfBuffer(null);\r\n }, [file]);\r\n\r\n // Track the PDF container for page detection\r\n useEffect(() => {\r\n if (state === 'ready') {\r\n // Find the PDF container after a short delay\r\n setTimeout(() => {\r\n const container = document.querySelector('[data-pdf-viewer], .embedpdf-viewport, [role=\"document\"]') as HTMLElement;\r\n if (container) {\r\n setPdfContainer(container);\r\n }\r\n }, 500);\r\n }\r\n }, [state]);\r\n\r\n // Initialize page count after PDF loads - using DOM-based detection\r\n useEffect(() => {\r\n if (state === 'ready' && totalPages === 0) {\r\n const initializePageCount = async () => {\r\n // Wait for viewer ref to be set and pages to render\r\n let viewer = pdfViewerRef.current;\r\n let retries = 0;\r\n \r\n // Retry getting the viewer ref up to 10 times (5 seconds total)\r\n while (!viewer && retries < 10) {\r\n await new Promise(resolve => setTimeout(resolve, 500));\r\n viewer = pdfViewerRef.current;\r\n retries++;\r\n }\r\n \r\n if (!viewer) return;\r\n\r\n // Wait additional time for pages to render\r\n await new Promise(resolve => setTimeout(resolve, 1500));\r\n\r\n // Method 1: Try the navigation API (even though it's broken)\r\n try {\r\n let count = viewer.navigation?.getTotalPages?.();\r\n \r\n if (count && count > 1) {\r\n setTotalPages(count);\r\n return;\r\n }\r\n } catch (e) {\r\n // Silent fail\r\n }\r\n\r\n // Method 2: Search for common character and count unique pages\r\n try {\r\n const results = await viewer.search?.searchText?.('e');\r\n \r\n if (results?.results && results.results.length > 0) {\r\n const pageIndices = results.results.map((m: any) => m.pageIndex as number).filter((idx: any): idx is number => typeof idx === 'number');\r\n const count = Math.max(...pageIndices) + 1;\r\n viewer.search?.stopSearch?.();\r\n setTotalPages(count);\r\n return;\r\n }\r\n } catch (error) {\r\n // Silent fail\r\n }\r\n\r\n // Method 3: DOM inspection - count rendered pages\r\n try {\r\n await new Promise(resolve => setTimeout(resolve, 1000));\r\n \r\n const selectors = [\r\n '[data-page-index]',\r\n '[data-page-number]',\r\n '.embedpdf-page',\r\n '[role=\"article\"]',\r\n 'canvas[data-page]',\r\n '.react-pdf__Page'\r\n ];\r\n \r\n let pages: NodeListOf<Element> | null = null;\r\n for (const selector of selectors) {\r\n pages = document.querySelectorAll(selector);\r\n if (pages.length > 0) break;\r\n }\r\n \r\n if (pages && pages.length > 0) {\r\n setTotalPages(pages.length);\r\n return;\r\n }\r\n } catch (error) {\r\n // Silent fail\r\n }\r\n\r\n // Method 4: Ultimate fallback\r\n setTotalPages(1);\r\n };\r\n\r\n initializePageCount();\r\n }\r\n }, [state, totalPages]);\r\n\r\n // Update page info and search state periodically\r\n useEffect(() => {\r\n if (state === 'ready' && pdfViewerRef.current) {\r\n const updateInfo = () => {\r\n const current = pdfViewerRef.current?.navigation.getCurrentPage() || 1;\r\n const total = pdfViewerRef.current?.navigation.getTotalPages() || 0;\r\n const zoomValue = pdfViewerRef.current?.zoom.getZoom();\r\n const currentSearchState = pdfViewerRef.current?.search.getSearchState();\r\n \r\n setCurrentPage(current);\r\n \r\n // Update total pages if we got a valid count\r\n if (total > 0 && total !== totalPages) {\r\n setTotalPages(total);\r\n }\r\n \r\n if (typeof zoomValue === 'number') {\r\n setZoom(Math.round(zoomValue * 100));\r\n }\r\n };\r\n\r\n updateInfo();\r\n const interval = setInterval(updateInfo, 300);\r\n return () => clearInterval(interval);\r\n }\r\n }, [state, totalPages]);\r\n\r\n // Expose methods through ref\r\n useImperativeHandle(ref, () => ({\r\n zoomIn: () => {\r\n pdfViewerRef.current?.zoom.zoomIn();\r\n updateZoomDisplay();\r\n },\r\n zoomOut: () => {\r\n pdfViewerRef.current?.zoom.zoomOut();\r\n updateZoomDisplay();\r\n },\r\n setZoom: (level: number) => {\r\n pdfViewerRef.current?.zoom.setZoom(level);\r\n updateZoomDisplay();\r\n },\r\n resetZoom: () => {\r\n pdfViewerRef.current?.zoom.resetZoom();\r\n updateZoomDisplay();\r\n },\r\n getZoom: () => {\r\n const zoom = pdfViewerRef.current?.zoom.getZoom();\r\n return typeof zoom === 'number' ? zoom : 1.0;\r\n },\r\n goToPage: (page: number) => {\r\n pdfViewerRef.current?.navigation.goToPage(page);\r\n setCurrentPage(page);\r\n },\r\n getCurrentPage: () => pdfViewerRef.current?.navigation.getCurrentPage() || 1,\r\n getTotalPages: () => pdfViewerRef.current?.navigation.getTotalPages() || 0,\r\n nextPage: () => {\r\n pdfViewerRef.current?.navigation.nextPage();\r\n updatePageDisplay();\r\n },\r\n previousPage: () => {\r\n pdfViewerRef.current?.navigation.previousPage();\r\n updatePageDisplay();\r\n },\r\n goToFirstPage: () => {\r\n pdfViewerRef.current?.navigation.goToFirstPage();\r\n updatePageDisplay();\r\n },\r\n goToLastPage: () => {\r\n pdfViewerRef.current?.navigation.goToLastPage();\r\n updatePageDisplay();\r\n },\r\n searchText: async (keyword: string) => {\r\n setIsSearching(true);\r\n const results = await pdfViewerRef.current?.search.searchText(keyword);\r\n setIsSearching(false);\r\n setSearchQuery(keyword);\r\n // Search state will be updated by the interval\r\n return results;\r\n },\r\n nextResult: () => {\r\n const index = pdfViewerRef.current?.search.nextResult() || -1;\r\n return index;\r\n },\r\n previousResult: () => {\r\n const index = pdfViewerRef.current?.search.previousResult() || -1;\r\n return index;\r\n },\r\n goToResult: (index: number) => pdfViewerRef.current?.search.goToResult(index) || -1,\r\n stopSearch: () => {\r\n pdfViewerRef.current?.search.stopSearch();\r\n setSearchQuery('');\r\n },\r\n getSearchState: () => pdfViewerRef.current?.search.getSearchState() || null,\r\n getSelectedText: () => pdfViewerRef.current?.selection.getSelectedText() || '',\r\n clearSelection: () => pdfViewerRef.current?.selection.clearSelection(),\r\n }), []);\r\n\r\n const updatePageDisplay = () => {\r\n setTimeout(() => {\r\n const current = pdfViewerRef.current?.navigation.getCurrentPage() || 1;\r\n setCurrentPage(current);\r\n }, 100);\r\n };\r\n\r\n const updateZoomDisplay = () => {\r\n setTimeout(() => {\r\n const zoomValue = pdfViewerRef.current?.zoom.getZoom();\r\n if (typeof zoomValue === 'number') {\r\n setZoom(Math.round(zoomValue * 100));\r\n }\r\n }, 100);\r\n };\r\n\r\n // Toolbar handlers\r\n const handleZoomIn = () => {\r\n pdfViewerRef.current?.zoom.zoomIn();\r\n updateZoomDisplay();\r\n };\r\n\r\n const handleZoomOut = () => {\r\n pdfViewerRef.current?.zoom.zoomOut();\r\n updateZoomDisplay();\r\n };\r\n\r\n const handleFitToWidth = () => {\r\n pdfViewerRef.current?.zoom.fitToWidth();\r\n updateZoomDisplay();\r\n };\r\n\r\n const handleFitToPage = () => {\r\n pdfViewerRef.current?.zoom.fitToPage();\r\n updateZoomDisplay();\r\n };\r\n\r\n const handlePreviousPage = () => {\r\n pdfViewerRef.current?.navigation.previousPage();\r\n updatePageDisplay();\r\n };\r\n\r\n const handleNextPage = () => {\r\n pdfViewerRef.current?.navigation.nextPage();\r\n updatePageDisplay();\r\n };\r\n\r\n const handleFirstPage = () => {\r\n pdfViewerRef.current?.navigation.goToFirstPage();\r\n updatePageDisplay();\r\n };\r\n\r\n const handleLastPage = () => {\r\n pdfViewerRef.current?.navigation.goToLastPage();\r\n updatePageDisplay();\r\n };\r\n\r\n const handlePageInput = (e: React.ChangeEvent<HTMLInputElement>) => {\r\n const value = e.target.value;\r\n const page = parseInt(value, 10);\r\n \r\n // Allow typing (update input immediately)\r\n if (/^\\d*$/.test(value)) {\r\n // Valid number format - user is still typing\r\n return;\r\n }\r\n \r\n // Validate and navigate when complete\r\n if (!isNaN(page) && page >= 1 && (totalPages === 0 || page <= totalPages)) {\r\n pdfViewerRef.current?.navigation.goToPage(page);\r\n setCurrentPage(page);\r\n }\r\n };\r\n\r\n const handlePageInputKeyPress = (e: React.KeyboardEvent<HTMLInputElement>) => {\r\n if (e.key === 'Enter') {\r\n const value = (e.target as HTMLInputElement).value;\r\n const page = parseInt(value, 10);\r\n if (!isNaN(page) && page >= 1 && (totalPages === 0 || page <= totalPages)) {\r\n pdfViewerRef.current?.navigation.goToPage(page);\r\n setCurrentPage(page);\r\n }\r\n }\r\n };\r\n\r\n const handleSearch = async () => {\r\n if (searchQuery.trim()) {\r\n setIsSearching(true);\r\n const results = await pdfViewerRef.current?.search.searchText(searchQuery);\r\n setIsSearching(false);\r\n \r\n // Store search results for sidebar\r\n if (results && results.results) {\r\n const formattedResults = results.results.map((result: any, index: number) => {\r\n // Extract text content - try different possible properties\r\n let textContent = '';\r\n let contextContent = '';\r\n \r\n if (typeof result === 'string') {\r\n textContent = result;\r\n contextContent = result;\r\n } else if (result.text) {\r\n textContent = String(result.text);\r\n contextContent = result.context ? String(result.context) : String(result.text);\r\n } else if (result.str) {\r\n textContent = String(result.str);\r\n contextContent = String(result.str);\r\n } else if (result.match) {\r\n textContent = String(result.match);\r\n contextContent = String(result.match);\r\n } else {\r\n textContent = JSON.stringify(result);\r\n contextContent = textContent;\r\n }\r\n \r\n return {\r\n pageNumber: (result.pageIndex ?? result.pageNumber ?? 0) + 1,\r\n text: textContent,\r\n context: contextContent,\r\n index: index\r\n };\r\n });\r\n \r\n setSearchResults(formattedResults);\r\n setTotalSearchResults(formattedResults.length);\r\n setCurrentSearchResultIndex(0);\r\n } else {\r\n setSearchResults([]);\r\n setTotalSearchResults(0);\r\n setCurrentSearchResultIndex(0);\r\n }\r\n }\r\n };\r\n\r\n const handleSearchKeyPress = (e: React.KeyboardEvent<HTMLInputElement>) => {\r\n if (e.key === 'Enter') {\r\n handleSearch();\r\n }\r\n };\r\n\r\n const handleSidebarSearch = async (keyword: string) => {\r\n setSearchQuery(keyword);\r\n if (keyword.trim()) {\r\n setIsSearching(true);\r\n const results = await pdfViewerRef.current?.search.searchText(keyword);\r\n setIsSearching(false);\r\n \r\n // Store search results for sidebar\r\n if (results && results.results) {\r\n const formattedResults = results.results.map((result: any, index: number) => {\r\n // Extract text content from the context object\r\n let textContent = '';\r\n let contextContent = '';\r\n \r\n if (result.context && typeof result.context === 'object') {\r\n // Build the full context string\r\n const before = result.context.before || '';\r\n const match = result.context.match || '';\r\n const after = result.context.after || '';\r\n \r\n textContent = match;\r\n contextContent = `${before}${match}${after}`;\r\n } else if (typeof result === 'string') {\r\n textContent = result;\r\n contextContent = result;\r\n } else {\r\n textContent = String(result.match || result.text || '');\r\n contextContent = textContent;\r\n }\r\n \r\n return {\r\n pageNumber: (result.pageIndex ?? result.pageNumber ?? 0) + 1,\r\n text: textContent,\r\n context: contextContent,\r\n index: index\r\n };\r\n });\r\n \r\n setSearchResults(formattedResults);\r\n setTotalSearchResults(formattedResults.length);\r\n setCurrentSearchResultIndex(0);\r\n \r\n // Navigate to the first result's page\r\n if (formattedResults.length > 0) {\r\n const firstPageNumber = formattedResults[0].pageNumber;\r\n pdfViewerRef.current?.navigation.goToPage(firstPageNumber);\r\n setCurrentPage(firstPageNumber);\r\n }\r\n } else {\r\n setSearchResults([]);\r\n setTotalSearchResults(0);\r\n setCurrentSearchResultIndex(0);\r\n }\r\n } else {\r\n setSearchResults([]);\r\n pdfViewerRef.current?.search.stopSearch();\r\n setTotalSearchResults(0);\r\n setCurrentSearchResultIndex(0);\r\n }\r\n };\r\n\r\n const handleSearchResultClick = (pageNumber: number, resultIndex: number) => {\r\n // Navigate to the page first\r\n pdfViewerRef.current?.navigation.goToPage(pageNumber);\r\n setCurrentSearchResultIndex(resultIndex);\r\n setCurrentPage(pageNumber);\r\n \r\n // Then go to the specific result\r\n pdfViewerRef.current?.search.goToResult(resultIndex);\r\n };\r\n\r\n const toggleSidebar = () => {\r\n setIsSidebarOpen(!isSidebarOpen);\r\n };\r\n\r\n const handleNextSearchResult = () => {\r\n if (currentSearchResultIndex < totalSearchResults - 1) {\r\n const nextIndex = currentSearchResultIndex + 1;\r\n setCurrentSearchResultIndex(nextIndex);\r\n \r\n pdfViewerRef.current?.search.nextResult();\r\n \r\n // Navigate to the page of the next result\r\n if (searchResults[nextIndex]) {\r\n const pageNumber = searchResults[nextIndex].pageNumber;\r\n pdfViewerRef.current?.navigation.goToPage(pageNumber);\r\n setCurrentPage(pageNumber);\r\n }\r\n }\r\n };\r\n\r\n const handlePreviousSearchResult = () => {\r\n if (currentSearchResultIndex > 0) {\r\n const prevIndex = currentSearchResultIndex - 1;\r\n setCurrentSearchResultIndex(prevIndex);\r\n \r\n pdfViewerRef.current?.search.previousResult();\r\n \r\n // Navigate to the page of the previous result\r\n if (searchResults[prevIndex]) {\r\n const pageNumber = searchResults[prevIndex].pageNumber;\r\n pdfViewerRef.current?.navigation.goToPage(pageNumber);\r\n setCurrentPage(pageNumber);\r\n }\r\n }\r\n };\r\n\r\n const handleDownload = () => {\r\n if (onDownloadClick) {\r\n onDownloadClick();\r\n return;\r\n }\r\n \r\n if (!pdfBuffer) return;\r\n \r\n const blob = new Blob([pdfBuffer], { type: 'application/pdf' });\r\n const url = URL.createObjectURL(blob);\r\n const link = document.createElement('a');\r\n link.href = url;\r\n link.download = resolvedFileName;\r\n document.body.appendChild(link);\r\n link.click();\r\n document.body.removeChild(link);\r\n URL.revokeObjectURL(url);\r\n };\r\n\r\n const handlePrint = () => {\r\n if (onPrintClick) {\r\n onPrintClick();\r\n return;\r\n }\r\n \r\n if (!pdfBuffer) return;\r\n \r\n const blob = new Blob([pdfBuffer], { type: 'application/pdf' });\r\n const blobUrl = URL.createObjectURL(blob);\r\n \r\n // Create hidden iframe for printing\r\n const iframe = document.createElement('iframe');\r\n iframe.style.position = 'fixed';\r\n iframe.style.right = '0';\r\n iframe.style.bottom = '0';\r\n iframe.style.width = '0';\r\n iframe.style.height = '0';\r\n iframe.style.border = '0';\r\n \r\n document.body.appendChild(iframe);\r\n \r\n iframe.onload = () => {\r\n try {\r\n // Give the PDF time to fully load\r\n setTimeout(() => {\r\n const iframeWindow = iframe.contentWindow;\r\n if (!iframeWindow) return;\r\n \r\n iframeWindow.focus();\r\n iframeWindow.print();\r\n \r\n // Listen for when print dialog is closed\r\n // Use a longer timeout and check window focus\r\n const checkPrintComplete = () => {\r\n setTimeout(() => {\r\n try {\r\n document.body.removeChild(iframe);\r\n URL.revokeObjectURL(blobUrl);\r\n } catch (e) {\r\n // Element might already be removed\r\n }\r\n }, 500);\r\n };\r\n \r\n // Try to detect when print dialog closes\r\n if ('onafterprint' in iframeWindow) {\r\n iframeWindow.onafterprint = checkPrintComplete;\r\n } else {\r\n // Fallback: wait longer before cleanup\r\n setTimeout(checkPrintComplete, 3000);\r\n }\r\n }, 500);\r\n } catch (error) {\r\n // Cleanup on error\r\n document.body.removeChild(iframe);\r\n URL.revokeObjectURL(blobUrl);\r\n }\r\n };\r\n\r\n iframe.onerror = () => {\r\n // Cleanup on load error\r\n document.body.removeChild(iframe);\r\n URL.revokeObjectURL(blobUrl);\r\n };\r\n \r\n iframe.src = blobUrl;\r\n };\r\n\r\n // Load PDF from file\r\n useEffect(() => {\r\n if (!file) {\r\n setState('error');\r\n setError('No file provided');\r\n return;\r\n }\r\n\r\n const loadPDF = async () => {\r\n try {\r\n setState('loading');\r\n setError(null);\r\n\r\n let arrayBuffer: ArrayBuffer;\r\n\r\n if (file instanceof File) {\r\n arrayBuffer = await file.arrayBuffer();\r\n } else if (typeof file === 'string') {\r\n // Load from URL\r\n const response = await fetch(file);\r\n if (!response.ok) {\r\n throw new Error(`Failed to load PDF: ${response.statusText}`);\r\n }\r\n arrayBuffer = await response.arrayBuffer();\r\n } else if (file instanceof ArrayBuffer) {\r\n arrayBuffer = file;\r\n } else {\r\n throw new Error('Unsupported file type');\r\n }\r\n\r\n setPdfBuffer(arrayBuffer);\r\n setState('ready');\r\n onLoad?.();\r\n\r\n } catch (err: any) {\r\n const errorMessage = err.message || 'Failed to load PDF';\r\n setState('error');\r\n setError(errorMessage);\r\n onError?.(err);\r\n }\r\n };\r\n\r\n loadPDF();\r\n }, [file, onLoad, onError]);\r\n\r\n // Handle password request for encrypted PDFs\r\n const handlePasswordRequest = useCallback(async (fileName?: string): Promise<string | null> => {\r\n const password = prompt(`This PDF is password protected.\\nEnter password for ${fileName || 'document'}:`);\r\n return password;\r\n }, []);\r\n\r\n if (state === 'loading') {\r\n return (\r\n <div style={{ \r\n display: 'flex', \r\n flexDirection: 'column', \r\n alignItems: 'center', \r\n justifyContent: 'center', \r\n height: '100%',\r\n gap: '16px'\r\n }}>\r\n <div className=\"spinner\" style={{ \r\n width: '48px', \r\n height: '48px', \r\n border: '4px solid #f3f3f3',\r\n borderTop: '4px solid #3498db',\r\n borderRadius: '50%',\r\n animation: 'spin 1s linear infinite'\r\n }} />\r\n <p>Loading PDF...</p>\r\n <style>{`\r\n @keyframes spin {\r\n 0% { transform: rotate(0deg); }\r\n 100% { transform: rotate(360deg); }\r\n }\r\n `}</style>\r\n </div>\r\n );\r\n }\r\n\r\n if (state === 'error' || error) {\r\n return (\r\n <div style={{ \r\n display: 'flex', \r\n flexDirection: 'column', \r\n alignItems: 'center', \r\n justifyContent: 'center', \r\n height: '100%',\r\n padding: '24px'\r\n }}>\r\n <div style={{ \r\n maxWidth: '400px',\r\n padding: '16px',\r\n backgroundColor: '#fee',\r\n border: '1px solid #fcc',\r\n borderRadius: '4px'\r\n }}>\r\n <h3 style={{ marginTop: 0 }}>Failed to Load PDF</h3>\r\n <p>{error || 'Unknown error occurred'}</p>\r\n </div>\r\n </div>\r\n );\r\n }\r\n\r\n if (!pdfBuffer || state !== 'ready') {\r\n return (\r\n <div style={{ \r\n display: 'flex', \r\n alignItems: 'center', \r\n justifyContent: 'center', \r\n height: '100%' \r\n }}>\r\n <p>Preparing PDF...</p>\r\n </div>\r\n );\r\n }\r\n\r\n return (\r\n <div className=\"pdf-viewer-container\">\r\n <style>{toolbarStyles}</style>\r\n \r\n {/* Header - File Info */}\r\n <div className=\"pdf-viewer-header\">\r\n <FileIcon ext={fileExtension} size={26} />\r\n <div className=\"header-file-name\" title={resolvedFileName}>\r\n {resolvedFileName}\r\n </div>\r\n </div>\r\n \r\n {/* Toolbar */}\r\n <div className=\"pdf-viewer-toolbar\">\r\n\r\n {showPageNavigation && (\r\n <>\r\n <div className=\"toolbar-separator\"></div>\r\n\r\n {/* Page Navigation */}\r\n <div className=\"toolbar-section\">\r\n <button \r\n className=\"toolbar-button\" \r\n onClick={handleFirstPage}\r\n disabled={currentPage <= 1}\r\n title=\"First Page\"\r\n >\r\n <FirstPageIcon fontSize=\"small\" />\r\n </button>\r\n <button \r\n className=\"toolbar-button\" \r\n onClick={handlePreviousPage}\r\n disabled={currentPage <= 1}\r\n title=\"Previous Page\"\r\n >\r\n <ChevronLeftIcon fontSize=\"small\" />\r\n </button>\r\n \r\n <input\r\n type=\"number\"\r\n className=\"page-input\"\r\n value={currentPage}\r\n onChange={handlePageInput}\r\n onKeyPress={handlePageInputKeyPress}\r\n min={1}\r\n max={totalPages || undefined}\r\n />\r\n {showPageCount && <span className=\"page-info\">of {totalPages || '...'}</span>}\r\n \r\n <button \r\n className=\"toolbar-button\" \r\n onClick={handleNextPage}\r\n disabled={currentPage >= totalPages}\r\n title=\"Next Page\"\r\n >\r\n <ChevronRightIcon fontSize=\"small\" />\r\n </button>\r\n <button \r\n className=\"toolbar-button\" \r\n onClick={handleLastPage}\r\n disabled={currentPage >= totalPages}\r\n title=\"Last Page\"\r\n >\r\n <LastPageIcon fontSize=\"small\" />\r\n </button>\r\n </div>\r\n </>\r\n )}\r\n\r\n {showZoomControls && (\r\n <>\r\n <div className=\"toolbar-separator\"></div>\r\n\r\n {/* Zoom Controls */}\r\n <div className=\"toolbar-section\">\r\n <button \r\n className=\"toolbar-button\" \r\n onClick={handleZoomOut}\r\n title=\"Zoom Out\"\r\n >\r\n <ZoomOutIcon fontSize=\"small\" />\r\n </button>\r\n \r\n <span className=\"zoom-display\">{zoom}%</span>\r\n \r\n <button \r\n className=\"toolbar-button\" \r\n onClick={handleZoomIn}\r\n title=\"Zoom In\"\r\n >\r\n <ZoomInIcon fontSize=\"small\" />\r\n </button>\r\n \r\n <button \r\n className=\"toolbar-button\" \r\n onClick={handleFitToWidth}\r\n title=\"Fit to Width\"\r\n >\r\n <AspectRatioIcon fontSize=\"small\" />\r\n </button>\r\n \r\n <button \r\n className=\"toolbar-button\" \r\n onClick={handleFitToPage}\r\n title=\"Fit to Page\"\r\n >\r\n <FitScreenIcon fontSize=\"small\" />\r\n </button>\r\n </div>\r\n </>\r\n )}\r\n\r\n {showSearch && (\r\n <>\r\n <div className=\"toolbar-separator\"></div>\r\n\r\n {/* Search */}\r\n <div className=\"toolbar-section\">\r\n <button \r\n className=\"toolbar-button\" \r\n onClick={toggleSidebar}\r\n title=\"Search in PDF\"\r\n style={{ \r\n backgroundColor: isSidebarOpen ? '#e3f2fd' : 'transparent',\r\n color: isSidebarOpen ? '#1976d2' : 'inherit'\r\n }}\r\n >\r\n <SearchIcon fontSize=\"small\" />\r\n </button>\r\n </div>\r\n </>\r\n )}\r\n\r\n {(showMetadata || showProperties || showDownload || showPrint) && (\r\n <>\r\n <div className=\"toolbar-separator\"></div>\r\n\r\n {/* Metadata & Properties */}\r\n <div className=\"toolbar-section\">\r\n {showDownload && (\r\n <button \r\n className=\"toolbar-button\" \r\n onClick={onDownloadClick}\r\n title=\"Download PDF\"\r\n >\r\n <DownloadIcon fontSize=\"small\" />\r\n </button>\r\n )}\r\n \r\n {showPrint && (\r\n <button \r\n className=\"toolbar-button\" \r\n onClick={onPrintClick}\r\n title=\"Print PDF\"\r\n >\r\n <PrintIcon fontSize=\"small\" />\r\n </button>\r\n )}\r\n \r\n {showMetadata && (\r\n <button \r\n className=\"toolbar-button\" \r\n onClick={onMetadataClick}\r\n title=\"Document Metadata\"\r\n >\r\n <InfoIcon fontSize=\"small\" />\r\n </button>\r\n )}\r\n \r\n {showProperties && (\r\n <button \r\n className=\"toolbar-button\" \r\n onClick={onPropertiesClick}\r\n title=\"Document Properties\"\r\n >\r\n <DescriptionIcon fontSize=\"small\" />\r\n </button>\r\n )}\r\n </div>\r\n </>\r\n )}\r\n </div>\r\n\r\n {/* Main Content Area with Sidebar */}\r\n <div className=\"pdf-viewer-main\">\r\n {/* PDF Viewer */}\r\n <div className=\"pdf-viewer-viewer-area\">\r\n {React.createElement(HeadlessPDFViewer as any, {\r\n ref: pdfViewerRef,\r\n pdfBuffer,\r\n onPasswordRequest: handlePasswordRequest\r\n })}\r\n </div>\r\n\r\n {/* Search Sidebar */}\r\n <SearchSidebar\r\n isOpen={isSidebarOpen}\r\n onClose={() => setIsSidebarOpen(false)}\r\n onSearch={handleSidebarSearch}\r\n onSearchResultClick={handleSearchResultClick}\r\n onNextResult={handleNextSearchResult}\r\n onPreviousResult={handlePreviousSearchResult}\r\n currentResultIndex={currentSearchResultIndex}\r\n totalResults={totalSearchResults}\r\n searchKeyword={searchQuery}\r\n searchResults={searchResults}\r\n isSearching={isSearching}\r\n />\r\n </div>\r\n </div>\r\n );\r\n});\r\n\r\nPDFViewerContent.displayName = 'PDFViewerContent';\r\n\r\nexport const PDFViewer = forwardRef<PDFViewerMethods, FileViewerProps>((props, ref) => {\r\n return <PDFViewerContent {...props} sourceDescription=\"doc.pdf\" ref={ref} />;\r\n});\r\n\r\nPDFViewer.displayName = 'PDFViewer';\r\n","import React, { useState, useLayoutEffect, useRef } from 'react';\r\nimport {\r\n Box,\r\n Typography,\r\n TextField,\r\n IconButton,\r\n InputAdornment,\r\n Divider\r\n} from '@mui/material';\r\nimport SearchIcon from '@mui/icons-material/Search';\r\nimport CloseIcon from '@mui/icons-material/Close';\r\nimport KeyboardArrowUpIcon from '@mui/icons-material/KeyboardArrowUp';\r\nimport KeyboardArrowDownIcon from '@mui/icons-material/KeyboardArrowDown';\r\nimport ClearIcon from '@mui/icons-material/Clear';\r\nimport FindInPageIcon from '@mui/icons-material/FindInPage';\r\n\r\ninterface SearchResult {\r\n pageNumber: number;\r\n text: string;\r\n context: string;\r\n index: number;\r\n}\r\n\r\ninterface SearchSidebarProps {\r\n isOpen: boolean;\r\n onClose: () => void;\r\n onSearch: (keyword: string) => void;\r\n onSearchResultClick: (pageNumber: number, resultIndex: number) => void;\r\n onNextResult: () => void;\r\n onPreviousResult: () => void;\r\n currentResultIndex: number;\r\n totalResults: number;\r\n searchKeyword: string;\r\n searchResults?: SearchResult[];\r\n isSearching?: boolean;\r\n}\r\n\r\nexport const SearchSidebar: React.FC<SearchSidebarProps> = ({\r\n isOpen,\r\n onClose,\r\n onSearch,\r\n onSearchResultClick,\r\n onNextResult,\r\n onPreviousResult,\r\n currentResultIndex,\r\n totalResults,\r\n searchKeyword,\r\n searchResults = [],\r\n isSearching = false\r\n}) => {\r\n const [searchTerm, setSearchTerm] = useState(searchKeyword || '');\r\n const [hasSearched, setHasSearched] = useState(false);\r\n const contentRef = useRef<HTMLDivElement>(null);\r\n\r\n // Scrollbar hover handler\r\n useLayoutEffect(() => {\r\n const element = contentRef.current;\r\n if (!element) return;\r\n\r\n const handleMouseMove = (e: MouseEvent) => {\r\n const rect = element.getBoundingClientRect();\r\n const distanceFromRight = rect.right - e.clientX;\r\n const distanceFromBottom = rect.bottom - e.clientY;\r\n\r\n if (distanceFromRight <= 15 || distanceFromBottom <= 15) {\r\n element.classList.add('scrollbar-hover');\r\n } else {\r\n element.classList.remove('scrollbar-hover');\r\n }\r\n };\r\n\r\n const handleMouseLeave = () => element.classList.remove('scrollbar-hover');\r\n\r\n element.addEventListener('mousemove', handleMouseMove);\r\n element.addEventListener('mouseleave', handleMouseLeave);\r\n\r\n return () => {\r\n element.removeEventListener('mousemove', handleMouseMove);\r\n element.removeEventListener('mouseleave', handleMouseLeave);\r\n };\r\n }, []);\r\n\r\n // Inject scrollbar styles\r\n useLayoutEffect(() => {\r\n const style = document.createElement('style');\r\n style.id = 'search-sidebar-scrollbar';\r\n style.textContent = `\r\n @import url('https://fonts.googleapis.com/css2?family=Noto+Sans+Tamil:wght@400;600&family=Noto+Sans+Devanagari:wght@400;600&display=swap');\r\n \r\n .search-sidebar-content::-webkit-scrollbar {\r\n width: 12px;\r\n height: 12px;\r\n }\r\n .search-sidebar-content::-webkit-scrollbar-track {\r\n background-color: transparent;\r\n }\r\n .search-sidebar-content::-webkit-scrollbar-thumb {\r\n background-color: rgba(0, 0, 0, 0.25);\r\n border-radius: 8px;\r\n border: 4px solid transparent;\r\n background-clip: padding-box;\r\n transition: all 0.15s ease;\r\n }\r\n .search-sidebar-content.scrollbar-hover::-webkit-scrollbar-thumb {\r\n background-color: rgba(0, 0, 0, 0.4);\r\n border: 2px solid transparent;\r\n }\r\n .search-sidebar-content::-webkit-scrollbar-thumb:active {\r\n background-color: rgba(25, 118, 210, 0.85);\r\n border: 1px solid transparent;\r\n }\r\n \r\n /* Tamil font support for search results */\r\n .search-result-text {\r\n font-family: 'Noto Sans Tamil', 'Noto Sans Devanagari', Arial, sans-serif !important;\r\n }\r\n `;\r\n document.head.appendChild(style);\r\n return () => {\r\n const el = document.getElementById('search-sidebar-scrollbar');\r\n if (el) el.remove();\r\n };\r\n }, []);\r\n\r\n useLayoutEffect(() => {\r\n setSearchTerm(searchKeyword || '');\r\n if (searchKeyword) {\r\n setHasSearched(true);\r\n }\r\n }, [searchKeyword]);\r\n\r\n const handleSearchSubmit = (e?: React.FormEvent) => {\r\n if (e) e.preventDefault();\r\n\r\n if (searchTerm.trim()) {\r\n setHasSearched(true);\r\n onSearch(searchTerm.trim());\r\n }\r\n };\r\n\r\n const handleSearchChange = (e: React.ChangeEvent<HTMLInputElement>) => {\r\n const value = e.target.value;\r\n setSearchTerm(value);\r\n\r\n if (!value.trim()) {\r\n setHasSearched(false);\r\n onSearch('');\r\n }\r\n };\r\n\r\n const handleClearSearch = () => {\r\n setSearchTerm('');\r\n setHasSearched(false);\r\n onSearch('');\r\n };\r\n\r\n // Group results by page\r\n const resultsByPage = searchResults.reduce((acc, result) => {\r\n if (!acc[result.pageNumber]) {\r\n acc[result.pageNumber] = [];\r\n }\r\n acc[result.pageNumber].push(result);\r\n return acc;\r\n }, {} as Record<number, SearchResult[]>);\r\n\r\n const highlightText = (text: any, keyword: string) => {\r\n if (!keyword) return text;\r\n\r\n const textString = typeof text === 'string' ? text : String(text || '');\r\n if (!textString) return text;\r\n\r\n try {\r\n const escapedKeyword = keyword.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\r\n const regex = new RegExp(`(${escapedKeyword})`, 'gi');\r\n const parts = textString.split(regex);\r\n\r\n return parts.map((part, index) =>\r\n regex.test(part) ? (\r\n <Box\r\n component=\"span\"\r\n key={index}\r\n sx={{\r\n color: 'primary.main',\r\n fontWeight: 600,\r\n fontSize: 'inherit'\r\n }}\r\n >\r\n {part}\r\n </Box>\r\n ) : (\r\n part\r\n )\r\n );\r\n } catch (error) {\r\n // Return plain text if highlighting fails\r\n return textString;\r\n }\r\n };\r\n\r\n if (!isOpen) return null;\r\n\r\n return (\r\n <Box\r\n sx={{\r\n display: 'flex',\r\n flexDirection: 'column',\r\n height: '100%',\r\n width: '320px',\r\n backgroundColor: 'background.paper',\r\n borderLeft: '1px solid',\r\n borderColor: 'divider',\r\n overflow: 'hidden'\r\n }}\r\n >\r\n {/* Header */}\r\n <Box sx={{ px: 3, py: 2.5, backgroundColor: 'background.default' }}>\r\n <Box sx={{ display: 'flex', alignItems: 'center', justifyContent: 'space-between', mb: 2 }}>\r\n <Typography variant=\"h6\" sx={{ fontSize: '1.125rem', fontWeight: 600, color: 'text.primary' }}>\r\n Search\r\n </Typography>\r\n <IconButton\r\n size=\"small\"\r\n onClick={onClose}\r\n sx={{\r\n color: 'text.secondary',\r\n padding: '6px'\r\n }}\r\n >\r\n <CloseIcon fontSize=\"small\" />\r\n </IconButton>\r\n </Box>\r\n\r\n {/* Search Input */}\r\n <form onSubmit={handleSearchSubmit}>\r\n <TextField\r\n fullWidth\r\n size=\"medium\"\r\n placeholder=\"Search in document...\"\r\n value={searchTerm}\r\n onChange={handleSearchChange}\r\n autoComplete=\"off\"\r\n InputProps={{\r\n startAdornment: (\r\n <InputAdornment position=\"start\">\r\n <SearchIcon sx={{ color: 'text.disabled', fontSize: 20 }} />\r\n </InputAdornment>\r\n ),\r\n endAdornment: searchTerm && (\r\n <InputAdornment position=\"end\">\r\n <IconButton\r\n size=\"small\"\r\n onClick={handleClearSearch}\r\n sx={{\r\n color: 'text.secondary',\r\n padding: '4px',\r\n '&:hover': {\r\n backgroundColor: 'action.hover'\r\n }\r\n }}\r\n >\r\n <ClearIcon sx={{ fontSize: 18 }} />\r\n </IconButton>\r\n </InputAdornment>\r\n )\r\n }}\r\n sx={{\r\n '& .MuiOutlinedInput-root': {\r\n fontSize: '0.9375rem',\r\n backgroundColor: 'background.paper',\r\n borderRadius: '8px',\r\n '& fieldset': {\r\n borderColor: 'divider'\r\n },\r\n '&.Mui-focused fieldset': {\r\n borderColor: 'primary.main',\r\n borderWidth: '2px'\r\n }\r\n },\r\n '& .MuiInputBase-input': {\r\n padding: '10px 14px'\r\n }\r\n }}\r\n />\r\n </form>\r\n\r\n {/* Results Summary and Navigation */}\r\n {totalResults > 0 && (\r\n <Box\r\n sx={{\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'space-between',\r\n mt: 2,\r\n pt: 2,\r\n borderTop: '1px solid',\r\n borderColor: 'divider'\r\n }}\r\n >\r\n <Typography variant=\"body2\" sx={{ color: 'text.secondary', fontSize: '0.875rem', fontWeight: 500 }}>\r\n {currentResultIndex + 1} of {totalResults} results\r\n </Typography>\r\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 0.5 }}>\r\n <IconButton\r\n size=\"small\"\r\n onClick={onPreviousResult}\r\n disabled={currentResultIndex <= 0}\r\n sx={{\r\n color: currentResultIndex <= 0 ? 'text.disabled' : 'primary.main',\r\n padding: '6px',\r\n borderRadius: '6px',\r\n border: '1px solid',\r\n borderColor: currentResultIndex <= 0 ? 'divider' : 'primary.main'\r\n }}\r\n >\r\n <KeyboardArrowUpIcon sx={{ fontSize: 20 }} />\r\n </IconButton>\r\n <IconButton\r\n size=\"small\"\r\n onClick={onNextResult}\r\n disabled={currentResultIndex >= totalResults - 1}\r\n sx={{\r\n color: currentResultIndex >= totalResults - 1 ? 'text.disabled' : 'primary.main',\r\n padding: '6px',\r\n borderRadius: '6px',\r\n border: '1px solid',\r\n borderColor: currentResultIndex >= totalResults - 1 ? 'divider' : 'primary.main'\r\n }}\r\n >\r\n <KeyboardArrowDownIcon sx={{ fontSize: 20 }} />\r\n </IconButton>\r\n </Box>\r\n </Box>\r\n )}\r\n </Box>\r\n\r\n <Divider />\r\n\r\n {/* Search Results */}\r\n <Box ref={contentRef} className=\"search-sidebar-content\" sx={{\r\n flex: 1,\r\n overflow: 'auto',\r\n backgroundColor: 'background.default'\r\n }}>\r\n {!searchTerm && !hasSearched && (\r\n <Box sx={{ p: 4, textAlign: 'center', mt: 6 }}>\r\n <Box\r\n sx={{\r\n width: 80,\r\n height: 80,\r\n borderRadius: '50%',\r\n backgroundColor: 'action.hover',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n margin: '0 auto',\r\n mb: 3\r\n }}\r\n >\r\n <SearchIcon sx={{ fontSize: 40, color: 'text.disabled' }} />\r\n </Box>\r\n <Typography variant=\"body1\" sx={{ color: 'text.primary', fontWeight: 500, mb: 1 }}>\r\n Search in Document\r\n </Typography>\r\n <Typography variant=\"body2\" sx={{ color: 'text.secondary', lineHeight: 1.6 }}>\r\n Enter keywords to find text within the PDF document\r\n </Typography>\r\n </Box>\r\n )}\r\n\r\n {searchTerm && !hasSearched && (\r\n <Box sx={{ p: 4, textAlign: 'center', mt: 6 }}>\r\n <Box\r\n sx={{\r\n width: 80,\r\n height: 80,\r\n borderRadius: '50%',\r\n backgroundColor: '#e3f2fd',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n margin: '0 auto',\r\n mb: 3\r\n }}\r\n >\r\n <FindInPageIcon sx={{ fontSize: 40, color: 'primary.main' }} />\r\n </Box>\r\n <Typography variant=\"body1\" sx={{ color: 'text.primary', fontWeight: 500, mb: 1 }}>\r\n Ready to Search\r\n </Typography>\r\n <Typography variant=\"body2\" sx={{ color: 'text.secondary', mb: 2, lineHeight: 1.6 }}>\r\n Press Enter to find\r\n </Typography>\r\n <Typography\r\n variant=\"body2\"\r\n sx={{\r\n color: 'primary.main',\r\n fontWeight: 600,\r\n backgroundColor: '#e3f2fd',\r\n padding: '6px 16px',\r\n borderRadius: '16px',\r\n display: 'inline-block'\r\n }}\r\n >\r\n \"{searchTerm}\"\r\n </Typography>\r\n </Box>\r\n )}\r\n\r\n {hasSearched && totalResults === 0 && !isSearching && (\r\n <Box sx={{ p: 4, textAlign: 'center', mt: 6 }}>\r\n <Box\r\n sx={{\r\n width: 80,\r\n height: 80,\r\n borderRadius: '50%',\r\n backgroundColor: '#fff3e0',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n margin: '0 auto',\r\n mb: 3\r\n }}\r\n >\r\n <SearchIcon sx={{ fontSize: 40, color: '#ff9800' }} />\r\n </Box>\r\n <Typography variant=\"body1\" sx={{ color: 'text.primary', fontWeight: 500, mb: 1 }}>\r\n No Results Found\r\n </Typography>\r\n <Typography variant=\"body2\" sx={{ color: 'text.secondary', lineHeight: 1.6 }}>\r\n No matches found for <strong>\"{searchTerm}\"</strong>\r\n </Typography>\r\n </Box>\r\n )}\r\n\r\n {totalResults > 0 && (\r\n <Box sx={{ p: 2 }}>\r\n {(Object.entries(resultsByPage) as [string, SearchResult[]][])\r\n .sort(([a, _], [b, __]) => parseInt(a) - parseInt(b))\r\n .map(([pageNum, pageResults]) => {\r\n const pageNumber = parseInt(pageNum);\r\n\r\n return (\r\n <Box key={pageNumber} sx={{ mb: 3 }}>\r\n {/* Page Header */}\r\n <Typography\r\n variant=\"subtitle2\"\r\n sx={{\r\n color: 'text.secondary',\r\n mb: 1.5,\r\n px: 1,\r\n fontSize: '0.8125rem',\r\n fontWeight: 600,\r\n textTransform: 'uppercase',\r\n letterSpacing: '0.5px'\r\n }}\r\n >\r\n Page {pageNumber}\r\n </Typography>\r\n\r\n {/* Results for this page */}\r\n {pageResults.map((result: SearchResult, index: number) => (\r\n <Box\r\n key={index}\r\n onClick={() => onSearchResultClick(result.pageNumber, result.index)}\r\n sx={{\r\n p: 2,\r\n mx: 1,\r\n mb: 1.5,\r\n borderRadius: '8px',\r\n border: '1px solid',\r\n borderColor: result.index === currentResultIndex ? 'primary.main' : 'divider',\r\n backgroundColor: result.index === currentResultIndex ? '#e3f2fd' : 'background.paper',\r\n cursor: 'pointer',\r\n transition: 'all 0.2s ease',\r\n boxShadow: result.index === currentResultIndex ? '0 2px 8px rgba(25, 118, 210, 0.15)' : '0 1px 3px rgba(0, 0, 0, 0.05)',\r\n '&:hover': {\r\n borderColor: 'primary.main',\r\n boxShadow: '0 2px 8px rgba(0,0,0,0.1)',\r\n transform: 'translateY(-1px)'\r\n }\r\n }}\r\n >\r\n <Typography\r\n variant=\"body2\"\r\n className=\"search-result-text\"\r\n sx={{\r\n fontSize: '0.875rem',\r\n lineHeight: 1.6,\r\n color: result.index === currentResultIndex ? 'text.primary' : 'text.secondary'\r\n }}\r\n >\r\n {highlightText(result.context, searchTerm)}\r\n </Typography>\r\n </Box>\r\n ))}\r\n </Box>\r\n );\r\n })}\r\n </Box>\r\n )}\r\n </Box>\r\n </Box>\r\n );\r\n};\r\n"],"mappings":"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","names":["React","useRef","useState","SearchIcon","jsx","jsxs","useState","useRef","error","zoom","fileName","SearchIcon","React"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["d:\\Projects\\DMS-File-Viewers\\packages\\lib\\dist\\chunk-7JTIG6OU.js"],"names":[],"mappings":"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","file":"D:\\Projects\\DMS-File-Viewers\\packages\\lib\\dist\\chunk-7JTIG6OU.js","sourcesContent":[null]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["d:\\Projects\\DMS-File-Viewers\\packages\\lib\\dist\\chunk-BNHQYEZ7.js"],"names":[],"mappings":"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EAAA;AACA,EAAA;AACA,IAAA;AACA,IAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,wBAAA;AACA,UAAA;AACA,UAAA;AACA,YAAA;AACA,YAAA;AACA,cAAA;AACA,cAAA;AACA,gBAAA;AACA,gBAAA;AACA,gBAAA;AACA,gBAAA;AACA,cAAA;AACA,YAAA;AACA,YAAA;AACA,8BAAA;AACA,gCAAA;AACA,gCAAA;AACA,cAAA;AACA,8BAAA;AACA,gBAAA;AACA,gBAAA;AACA,kBAAA;AACA,kBAAA;AACA,kBAAA;AACA,kBAAA;AACA,kBAAA;AACA,gBAAA;AACA,cAAA;AACA,8BAAA;AACA,gBAAA;AACA,gBAAA;AACA,kBAAA;AACA,kBAAA;AACA,kBAAA;AACA,kBAAA;AACA,kBAAA;AACA,gBAAA;AACA,cAAA;AACA,8BAAA;AACA,8BAAA;AACA,gBAAA;AACA,gBAAA;AACA,kBAAA;AACA,kBAAA;AACA,kBAAA;AACA,gBAAA;AACA,cAAA;AACA,cAAA;AACA,gBAAA;AACA,gBAAA;AACA,kBAAA;AACA,kBAAA;AACA,kBAAA;AACA,kBAAA;AACA,kBAAA;AACA,oBAAA;AACA,oBAAA;AACA,kBAAA;AACA,gBAAA;AACA,cAAA;AACA,YAAA;AACA,YAAA;AACA,UAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,wBAAA;AACA,wBAAA;AACA,UAAA;AACA,UAAA;AACA,YAAA;AACA,cAAA;AACA,cAAA;AACA,cAAA;AACA,cAAA;AACA,cAAA;AACA,YAAA;AACA,YAAA;AACA,cAAA;AACA,cAAA;AACA,gBAAA;AACA,gBAAA;AACA,kBAAA;AACA,kBAAA;AACA,kBAAA;AACA,kBAAA;AACA,kBAAA;AACA,kBAAA;AACA,kBAAA;AACA,gBAAA;AACA,gBAAA;AACA,cAAA;AACA,YAAA;AACA,UAAA;AACA,QAAA;AACA,QAAA;AACA,0BAAA;AACA,YAAA;AACA,YAAA;AACA,cAAA;AACA,cAAA;AACA,cAAA;AACA,cAAA;AACA,cAAA;AACA,YAAA;AACA,UAAA;AACA,0BAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,UAAA;AACA,0BAAA;AACA,YAAA;AACA,YAAA;AACA,cAAA;AACA,cAAA;AACA,cAAA;AACA,cAAA;AACA,cAAA;AACA,YAAA;AACA,UAAA;AACA,QAAA;AACA,MAAA;AACA,IAAA;AACA,EAAA;AACA;AACA;AACA,EAAA;AACA,IAAA;AACA,IAAA;AACA,EAAA;AACA,EAAA;AACA;AACA;AACA;AACA;AACA","file":"D:\\Projects\\DMS-File-Viewers\\packages\\lib\\dist\\chunk-BNHQYEZ7.js","sourcesContent":[null]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["d:\\Projects\\DMS-File-Viewers\\packages\\lib\\dist\\chunk-EMP7RZM2.js"],"names":[],"mappings":"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","file":"D:\\Projects\\DMS-File-Viewers\\packages\\lib\\dist\\chunk-EMP7RZM2.js","sourcesContent":[null]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/viewers/AudioViewer.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';\r\nimport { Box, Card, CardContent, CardHeader, LinearProgress, Typography, IconButton, Tooltip } from '@mui/material';\r\nimport DownloadIcon from '@mui/icons-material/Download';\r\nimport { FileViewerProps } from '../../types';\r\nimport { getFileExtension } from '../../utils/fileUtils';\r\nimport FileIcon from '../FileIcon';\r\n\r\nexport const AudioViewer: React.FC<FileViewerProps> = ({\r\n file,\r\n url,\r\n fileName,\r\n className = '',\r\n style = {},\r\n width = '100%',\r\n height = '100%',\r\n onLoad,\r\n onError,\r\n onDownloadClick,\r\n // Filter out props that shouldn't be passed to DOM\r\n mimeType: _mimeType,\r\n fileSize: _fileSize,\r\n showPageCount: _showPageCount,\r\n showPageNavigation: _showPageNavigation,\r\n showZoomControls: _showZoomControls,\r\n showDownload: _showDownload,\r\n showPrint: _showPrint,\r\n showSearch: _showSearch,\r\n showMetadata: _showMetadata,\r\n showProperties: _showProperties,\r\n onMetadataClick: _onMetadataClick,\r\n onPropertiesClick: _onPropertiesClick,\r\n onPrintClick: _onPrintClick,\r\n customRegistry: _customRegistry,\r\n ...props\r\n}) => {\r\n const audioRef = useRef<HTMLAudioElement | null>(null);\r\n const [objectUrl, setObjectUrl] = useState<string | null>(null);\r\n const [isLoading, setIsLoading] = useState(false);\r\n const [error, setError] = useState<string | null>(null);\r\n\r\n useEffect(() => {\r\n let urlValue: string | null = null;\r\n\r\n if (file) {\r\n setIsLoading(true);\r\n urlValue = URL.createObjectURL(file);\r\n } else if (url) {\r\n urlValue = url;\r\n }\r\n\r\n setObjectUrl(urlValue);\r\n setError(null);\r\n\r\n return () => {\r\n if (urlValue && file) {\r\n URL.revokeObjectURL(urlValue);\r\n }\r\n };\r\n }, [file, url]);\r\n\r\n useEffect(() => {\r\n if (!audioRef.current) {\r\n return;\r\n }\r\n\r\n const handleLoadedMetadata = () => {\r\n setIsLoading(false);\r\n onLoad?.();\r\n };\r\n\r\n const handleError = () => {\r\n const message = 'Failed to load audio resource';\r\n setIsLoading(false);\r\n setError(message);\r\n onError?.(new Error(message));\r\n };\r\n\r\n const element = audioRef.current;\r\n element.addEventListener('loadedmetadata', handleLoadedMetadata);\r\n element.addEventListener('error', handleError);\r\n\r\n return () => {\r\n element.removeEventListener('loadedmetadata', handleLoadedMetadata);\r\n element.removeEventListener('error', handleError);\r\n };\r\n }, [onLoad, onError, objectUrl]);\r\n\r\n const resolvedFileName = useMemo(() => fileName || file?.name || (url ? url.split('/').pop() : 'audio'), [fileName, file, url]);\r\n\r\n const fileExtension = useMemo(\r\n () => getFileExtension(resolvedFileName || ''),\r\n [resolvedFileName]\r\n );\r\n\r\n const handleDownload = useCallback(async () => {\r\n if (!file && !url) return;\r\n \r\n try {\r\n let blob: Blob;\r\n let filename = resolvedFileName || 'audio.mp3';\r\n \r\n if (file) {\r\n blob = file;\r\n filename = file.name;\r\n } else if (url) {\r\n const response = await fetch(url);\r\n if (!response.ok) {\r\n throw new Error(`Failed to fetch audio (${response.status})`);\r\n }\r\n blob = await response.blob();\r\n } else {\r\n return;\r\n }\r\n \r\n const downloadUrl = URL.createObjectURL(blob);\r\n const link = document.createElement('a');\r\n link.href = downloadUrl;\r\n link.download = filename;\r\n document.body.appendChild(link);\r\n link.click();\r\n document.body.removeChild(link);\r\n URL.revokeObjectURL(downloadUrl);\r\n } catch (err) {\r\n // Handle download errors silently or show user-friendly message\r\n onError?.(err instanceof Error ? err : new Error('Download failed'));\r\n }\r\n }, [file, url, resolvedFileName, onError]);\r\n\r\n return (\r\n <Box\r\n className={`audio-viewer ${className}`}\r\n sx={{ width, height, ...style }}\r\n {...props}\r\n >\r\n <Card sx={{ height: '100%', display: 'flex', flexDirection: 'column' }} elevation={1}>\r\n <CardHeader\r\n avatar={<FileIcon ext={fileExtension} size={32} />}\r\n title={\r\n <Typography variant=\"subtitle1\" fontWeight={500}>\r\n {resolvedFileName}\r\n </Typography>\r\n }\r\n action={\r\n <Tooltip title=\"Download\">\r\n <IconButton\r\n size=\"small\"\r\n onClick={onDownloadClick}\r\n >\r\n <DownloadIcon />\r\n </IconButton>\r\n </Tooltip>\r\n }\r\n sx={{ pb: 1.5 }}\r\n />\r\n {isLoading && (\r\n <LinearProgress sx={{ mx: 3, mb: 2 }} />\r\n )}\r\n {error && (\r\n <Typography color=\"error\" variant=\"body2\" sx={{ px: 3, pb: 1 }}>\r\n {error}\r\n </Typography>\r\n )}\r\n <CardContent sx={{ flexGrow: 1, display: 'flex', alignItems: 'center', justifyContent: 'center' }}>\r\n {objectUrl ? (\r\n <audio\r\n ref={audioRef}\r\n controls\r\n controlsList=\"nodownload\"\r\n style={{ width: '100%' }}\r\n src={objectUrl}\r\n />\r\n ) : (\r\n <Typography variant=\"body2\" color=\"text.secondary\">\r\n No audio source provided.\r\n </Typography>\r\n )}\r\n </CardContent>\r\n </Card>\r\n </Box>\r\n );\r\n};\r\n"],"mappings":"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","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/viewers/TextViewer.tsx"],"sourcesContent":["import React, {\r\n useCallback,\r\n useEffect,\r\n useMemo,\r\n useState\r\n} from 'react';\r\nimport {\r\n Box,\r\n Button,\r\n Card,\r\n CardContent,\r\n CardHeader,\r\n Divider,\r\n LinearProgress,\r\n Stack,\r\n Typography,\r\n IconButton,\r\n Tooltip\r\n} from '@mui/material';\r\nimport DownloadIcon from '@mui/icons-material/Download';\r\nimport { FixedSizeList as List } from 'react-window';\r\nimport { FileViewerProps } from '../../types';\r\nimport { getFileExtension } from '../../utils/fileUtils';\r\nimport FileIcon from '../FileIcon';\r\n\r\nconst LINE_HEIGHT = 24;\r\n\r\nexport const TextViewer: React.FC<FileViewerProps> = ({\r\n file,\r\n url,\r\n fileName,\r\n className = '',\r\n style = {},\r\n width = '100%',\r\n height = '100%',\r\n onLoad,\r\n onError,\r\n onDownloadClick,\r\n // Filter out props that shouldn't be passed to DOM\r\n mimeType: _mimeType,\r\n fileSize: _fileSize,\r\n showPageCount: _showPageCount,\r\n showPageNavigation: _showPageNavigation,\r\n showZoomControls: _showZoomControls,\r\n showDownload: _showDownload,\r\n showPrint: _showPrint,\r\n showSearch: _showSearch,\r\n showMetadata: _showMetadata,\r\n showProperties: _showProperties,\r\n onMetadataClick: _onMetadataClick,\r\n onPropertiesClick: _onPropertiesClick,\r\n onPrintClick: _onPrintClick,\r\n customRegistry: _customRegistry,\r\n ...props\r\n}) => {\r\n const [content, setContent] = useState<string>('');\r\n const [lines, setLines] = useState<string[]>([]);\r\n const [isLoading, setIsLoading] = useState(false);\r\n const [error, setError] = useState<string | null>(null);\r\n\r\n const resolvedFileName = useMemo(\r\n () => fileName || file?.name || (url ? url.split('/').pop() : 'text-document'),\r\n [fileName, file, url]\r\n );\r\n\r\n const fileExtension = useMemo(\r\n () => getFileExtension(resolvedFileName || ''),\r\n [resolvedFileName]\r\n );\r\n\r\n const loadText = useCallback(async () => {\r\n if (!file && !url) {\r\n setContent('');\r\n setLines([]);\r\n setError(null);\r\n return;\r\n }\r\n\r\n setIsLoading(true);\r\n setError(null);\r\n\r\n try {\r\n let textContent: string;\r\n if (file) {\r\n textContent = await file.text();\r\n } else {\r\n const response = await fetch(url!);\r\n if (!response.ok) {\r\n throw new Error(`Failed to fetch text (${response.status})`);\r\n }\r\n textContent = await response.text();\r\n }\r\n\r\n setContent(textContent);\r\n setLines(textContent.split(/\\r?\\n/));\r\n onLoad?.();\r\n } catch (err) {\r\n const message = err instanceof Error ? err.message : 'Unable to load text file';\r\n setError(message);\r\n setContent('');\r\n setLines([]);\r\n onError?.(new Error(message));\r\n } finally {\r\n setIsLoading(false);\r\n }\r\n }, [file, url, onLoad, onError]);\r\n\r\n useEffect(() => {\r\n void loadText();\r\n }, [loadText]);\r\n\r\n const handleDownload = useCallback(() => {\r\n if (!content) return;\r\n \r\n const blob = new Blob([content], { type: 'text/plain' });\r\n const url = URL.createObjectURL(blob);\r\n const link = document.createElement('a');\r\n link.href = url;\r\n link.download = resolvedFileName || 'document.txt';\r\n document.body.appendChild(link);\r\n link.click();\r\n document.body.removeChild(link);\r\n URL.revokeObjectURL(url);\r\n }, [content, resolvedFileName]);\r\n\r\n const Row = useCallback(({ index, style: rowStyle }: { index: number; style: React.CSSProperties }) => (\r\n <Box\r\n style={rowStyle}\r\n sx={{\r\n px: 2,\r\n display: 'flex',\r\n alignItems: 'center',\r\n whiteSpace: 'pre',\r\n fontFamily: 'monospace',\r\n fontSize: '0.85rem'\r\n }}\r\n >\r\n {lines[index] || '\\u00A0'}\r\n </Box>\r\n ), [lines]);\r\n\r\n return (\r\n <Box\r\n className={`text-viewer ${className}`}\r\n sx={{ width, height, ...style }}\r\n {...props}\r\n >\r\n <Card sx={{ height: '100%', display: 'flex', flexDirection: 'column' }} elevation={1}>\r\n <CardHeader\r\n avatar={<FileIcon ext={fileExtension} size={32} />}\r\n title={\r\n <Typography variant=\"subtitle1\" fontWeight={500}>\r\n {resolvedFileName}\r\n </Typography>\r\n }\r\n action={\r\n <Tooltip title=\"Download\">\r\n <IconButton\r\n size=\"small\"\r\n onClick={onDownloadClick}\r\n >\r\n <DownloadIcon />\r\n </IconButton>\r\n </Tooltip>\r\n }\r\n sx={{ pb: 1 }}\r\n />\r\n {isLoading && <LinearProgress sx={{ mx: 3, mb: 1 }} />}\r\n {error && (\r\n <Typography color=\"error\" variant=\"body2\" sx={{ px: 3, pb: 1 }}>\r\n {error}\r\n </Typography>\r\n )}\r\n <Divider />\r\n <CardContent sx={{ flexGrow: 1, minHeight: 0, display: 'flex', flexDirection: 'column', p: 0 }}>\r\n {content ? (\r\n <Stack sx={{ flex: 1, position: 'relative' }}>\r\n <List\r\n height={typeof height === 'number' ? height - 140 : 520}\r\n itemCount={lines.length}\r\n itemSize={LINE_HEIGHT}\r\n width=\"100%\"\r\n >\r\n {Row as any}\r\n </List>\r\n </Stack>\r\n ) : (\r\n <Box sx={{ flex: 1, display: 'flex', alignItems: 'center', justifyContent: 'center', p: 4 }}>\r\n <Typography variant=\"body2\" color=\"text.secondary\">\r\n No text content available.\r\n </Typography>\r\n </Box>\r\n )}\r\n </CardContent>\r\n </Card>\r\n </Box>\r\n );\r\n};"],"mappings":"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","names":["url"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/viewers/TIFFViewer.tsx"],"sourcesContent":["import React, {\r\n useCallback,\r\n useEffect,\r\n useMemo,\r\n useRef,\r\n useState\r\n} from 'react';\r\nimport {\r\n Box,\r\n Button,\r\n ButtonGroup,\r\n Card,\r\n CardActions,\r\n CardContent,\r\n CardHeader,\r\n Divider,\r\n LinearProgress,\r\n MenuItem,\r\n Select,\r\n Stack,\r\n Typography,\r\n IconButton,\r\n Tooltip\r\n} from '@mui/material';\r\nimport type { SelectChangeEvent } from '@mui/material/Select';\r\nimport DownloadIcon from '@mui/icons-material/Download';\r\nimport * as UTIF from 'utif';\r\nimport { FileViewerProps } from '../../types';\r\nimport { getFileExtension } from '../../utils/fileUtils';\r\nimport FileIcon from '../FileIcon';\r\n\r\ninterface TiffFrame {\r\n dataUrl: string;\r\n width: number;\r\n height: number;\r\n}\r\n\r\nconst decodeTiff = (buffer: ArrayBuffer): TiffFrame[] => {\r\n if (typeof window === 'undefined') {\r\n return [];\r\n }\r\n\r\n const frames: TiffFrame[] = [];\r\n const images = UTIF.decode(buffer);\r\n\r\n images.forEach((image) => {\r\n try {\r\n UTIF.decodeImage(buffer, image);\r\n const rgba = UTIF.toRGBA8(image);\r\n const width = image.width || 0;\r\n const height = image.height || 0;\r\n\r\n if (!width || !height) {\r\n return;\r\n }\r\n\r\n const canvas = document.createElement('canvas');\r\n canvas.width = width;\r\n canvas.height = height;\r\n const context = canvas.getContext('2d');\r\n\r\n if (!context) {\r\n return;\r\n }\r\n\r\n const clamped = new Uint8ClampedArray(rgba.length);\r\n clamped.set(rgba);\r\n const imageData = new ImageData(clamped, width, height);\r\n context.putImageData(imageData, 0, 0);\r\n frames.push({ dataUrl: canvas.toDataURL('image/png'), width, height });\r\n } catch (error) {\r\n // Skip frames that fail to decode\r\n }\r\n });\r\n\r\n return frames;\r\n};\r\n\r\nconst resolveDocumentName = (file?: File, fileName?: string, url?: string) => {\r\n if (file?.name) {\r\n return file.name;\r\n }\r\n if (fileName) {\r\n return fileName;\r\n }\r\n if (url) {\r\n const parts = url.split('?')[0]?.split('#')[0]?.split('/') ?? [];\r\n return parts[parts.length - 1] || 'document.tiff';\r\n }\r\n return 'document.tiff';\r\n};\r\n\r\ninterface TIFFViewerContentProps extends FileViewerProps {\r\n sourceDescription: string;\r\n}\r\n\r\nconst TIFFViewerContent: React.FC<TIFFViewerContentProps> = ({\r\n sourceDescription,\r\n file,\r\n url,\r\n fileName,\r\n className = '',\r\n style = {},\r\n width = '100%',\r\n height = '100%',\r\n onLoad,\r\n onError,\r\n onDownloadClick,\r\n // Filter out props that shouldn't be passed to DOM\r\n mimeType: _mimeType,\r\n fileSize: _fileSize,\r\n showPageCount: _showPageCount,\r\n showPageNavigation: _showPageNavigation,\r\n showZoomControls: _showZoomControls,\r\n showDownload: _showDownload,\r\n showPrint: _showPrint,\r\n showSearch: _showSearch,\r\n showMetadata: _showMetadata,\r\n showProperties: _showProperties,\r\n onMetadataClick: _onMetadataClick,\r\n onPropertiesClick: _onPropertiesClick,\r\n onPrintClick: _onPrintClick,\r\n customRegistry: _customRegistry,\r\n ...props\r\n}) => {\r\n const [frames, setFrames] = useState<TiffFrame[]>([]);\r\n const [currentIndex, setCurrentIndex] = useState(0);\r\n const [isLoading, setIsLoading] = useState(false);\r\n const [error, setError] = useState<string | null>(null);\r\n const [fitMode, setFitMode] = useState<'fit-width' | 'fit-page' | 'zoom'>('fit-page');\r\n const [zoom, setZoom] = useState(1);\r\n const [viewportWidth, setViewportWidth] = useState<number>(0);\r\n const [viewportHeight, setViewportHeight] = useState<number>(0);\r\n const viewportRef = useRef<HTMLDivElement | null>(null);\r\n\r\n const resolvedFileName = useMemo(\r\n () => fileName || sourceDescription,\r\n [fileName, sourceDescription]\r\n );\r\n\r\n const fileExtension = useMemo(\r\n () => getFileExtension(resolvedFileName || ''),\r\n [resolvedFileName]\r\n );\r\n\r\n const loadTiff = useCallback(async () => {\r\n if (!file && !url) {\r\n setFrames([]);\r\n setCurrentIndex(0);\r\n setError(null);\r\n return;\r\n }\r\n\r\n if (typeof window === 'undefined') {\r\n return;\r\n }\r\n\r\n setIsLoading(true);\r\n setError(null);\r\n\r\n try {\r\n let buffer: ArrayBuffer;\r\n if (file) {\r\n buffer = await file.arrayBuffer();\r\n } else {\r\n const response = await fetch(url!);\r\n if (!response.ok) {\r\n throw new Error(`Failed to fetch TIFF (${response.status})`);\r\n }\r\n buffer = await response.arrayBuffer();\r\n }\r\n\r\n const decodedFrames = decodeTiff(buffer);\r\n setFrames(decodedFrames);\r\n setCurrentIndex(0);\r\n setFitMode('fit-page');\r\n setZoom(1);\r\n\r\n if (decodedFrames.length > 0) {\r\n onLoad?.();\r\n } else {\r\n setError('No displayable frames detected in TIFF file.');\r\n }\r\n } catch (err) {\r\n const message = err instanceof Error ? err.message : 'Unable to load TIFF file';\r\n setError(message);\r\n setFrames([]);\r\n setCurrentIndex(0);\r\n setFitMode('fit-page');\r\n setZoom(1);\r\n onError?.(new Error(message));\r\n } finally {\r\n setIsLoading(false);\r\n }\r\n }, [file, url, onLoad, onError]);\r\n\r\n useEffect(() => {\r\n void loadTiff();\r\n }, [loadTiff]);\r\n\r\n const handleDownload = useCallback(async () => {\r\n if (!file && !url) return;\r\n \r\n try {\r\n let blob: Blob;\r\n let filename = resolvedFileName || 'document.tiff';\r\n \r\n if (file) {\r\n blob = file;\r\n filename = file.name;\r\n } else if (url) {\r\n const response = await fetch(url);\r\n if (!response.ok) {\r\n throw new Error(`Failed to fetch TIFF (${response.status})`);\r\n }\r\n blob = await response.blob();\r\n } else {\r\n return;\r\n }\r\n \r\n const downloadUrl = URL.createObjectURL(blob);\r\n const link = document.createElement('a');\r\n link.href = downloadUrl;\r\n link.download = filename;\r\n document.body.appendChild(link);\r\n link.click();\r\n document.body.removeChild(link);\r\n URL.revokeObjectURL(downloadUrl);\r\n } catch (err) {\r\n // Handle download errors silently or show user-friendly message\r\n onError?.(err instanceof Error ? err : new Error('Download failed'));\r\n }\r\n }, [file, url, resolvedFileName, onError]);\r\n\r\n const currentFrame = frames[currentIndex];\r\n const hasFrames = frames.length > 0;\r\n const hasMultipleFrames = frames.length > 1;\r\n\r\n useEffect(() => {\r\n if (hasFrames) {\r\n setZoom(1);\r\n setFitMode('fit-page');\r\n }\r\n }, [currentIndex, hasFrames]);\r\n\r\n useEffect(() => {\r\n if (typeof window === 'undefined' || typeof ResizeObserver === 'undefined') {\r\n return undefined;\r\n }\r\n\r\n if (!viewportRef.current) {\r\n return undefined;\r\n }\r\n\r\n const updateSize = () => {\r\n const bounds = viewportRef.current?.getBoundingClientRect();\r\n if (bounds) {\r\n setViewportWidth(bounds.width);\r\n setViewportHeight(bounds.height);\r\n }\r\n };\r\n\r\n updateSize();\r\n const observer = new ResizeObserver(updateSize);\r\n observer.observe(viewportRef.current);\r\n\r\n return () => {\r\n observer.disconnect();\r\n };\r\n }, []);\r\n\r\n const handleZoomIn = () => {\r\n setFitMode('zoom');\r\n setZoom((value) => Math.min(Math.round((value + 0.25) * 100) / 100, 5));\r\n };\r\n\r\n const handleZoomOut = () => {\r\n setFitMode('zoom');\r\n setZoom((value) => Math.max(Math.round((value - 0.25) * 100) / 100, 0.25));\r\n };\r\n\r\n const handleFitWidth = () => {\r\n setFitMode('fit-width');\r\n setZoom(1);\r\n };\r\n\r\n const handleFitPage = () => {\r\n setFitMode('fit-page');\r\n setZoom(1);\r\n };\r\n\r\n const effectiveScale = useMemo(() => {\r\n if (!currentFrame) {\r\n return 1;\r\n }\r\n\r\n if (fitMode === 'zoom') {\r\n return zoom;\r\n }\r\n\r\n const frameWidth = currentFrame.width;\r\n const frameHeight = currentFrame.height;\r\n\r\n if (!viewportWidth || !viewportHeight || !frameWidth || !frameHeight) {\r\n return 1;\r\n }\r\n\r\n if (fitMode === 'fit-page') {\r\n const ratio = Math.min(viewportWidth / frameWidth, viewportHeight / frameHeight);\r\n return ratio || 1;\r\n }\r\n\r\n const widthRatio = viewportWidth / frameWidth;\r\n return widthRatio || 1;\r\n }, [currentFrame, fitMode, viewportWidth, viewportHeight, zoom]);\r\n\r\n const displayScale = useMemo(() => Math.round(effectiveScale * 100), [effectiveScale]);\r\n\r\n const renderImage = () => {\r\n if (!currentFrame) {\r\n return (\r\n <Typography variant=\"body2\" color=\"text.secondary\">\r\n No TIFF frame available.\r\n </Typography>\r\n );\r\n }\r\n\r\n const widthPx = currentFrame.width * effectiveScale;\r\n const heightPx = currentFrame.height * effectiveScale;\r\n\r\n return (\r\n <Box\r\n sx={{\r\n position: 'relative',\r\n width: widthPx,\r\n height: heightPx,\r\n borderRadius: 1,\r\n boxShadow: 1,\r\n backgroundColor: '#fff'\r\n }}\r\n >\r\n <Box\r\n component=\"img\"\r\n src={currentFrame.dataUrl}\r\n alt={`${resolvedFileName} page ${currentIndex + 1}`}\r\n sx={{\r\n width: widthPx,\r\n height: heightPx,\r\n display: 'block',\r\n borderRadius: 1\r\n }}\r\n />\r\n </Box>\r\n );\r\n };\r\n\r\n return (\r\n <Box\r\n className={`tiff-viewer ${className}`}\r\n sx={{ width, height, ...style }}\r\n {...props}\r\n >\r\n <Card sx={{ height: '100%', display: 'flex', flexDirection: 'column' }} elevation={1}>\r\n <CardHeader\r\n avatar={<FileIcon ext={fileExtension} size={32} />}\r\n title={\r\n <Typography variant=\"subtitle1\" fontWeight={500}>\r\n {resolvedFileName}\r\n {frames.length > 0 && (\r\n <Typography component=\"span\" variant=\"body2\" color=\"text.secondary\" sx={{ ml: 1 }}>\r\n • Page {currentIndex + 1} of {frames.length}\r\n </Typography>\r\n )}\r\n </Typography>\r\n }\r\n action={\r\n <Stack direction=\"row\" spacing={1} alignItems=\"center\">\r\n <ButtonGroup variant=\"outlined\" size=\"small\" disabled={!hasFrames}>\r\n <Button onClick={handleZoomOut} disabled={!hasFrames || zoom <= 0.25}>\r\n -\r\n </Button>\r\n <Button onClick={handleZoomIn} disabled={!hasFrames || zoom >= 5}>\r\n +\r\n </Button>\r\n </ButtonGroup>\r\n <Button\r\n variant={fitMode === 'fit-width' ? 'contained' : 'outlined'}\r\n size=\"small\"\r\n onClick={handleFitWidth}\r\n disabled={!hasFrames}\r\n >\r\n Fit Width\r\n </Button>\r\n <Button\r\n variant={fitMode === 'fit-page' ? 'contained' : 'outlined'}\r\n size=\"small\"\r\n onClick={handleFitPage}\r\n disabled={!hasFrames}\r\n >\r\n Fit Page\r\n </Button>\r\n <Typography variant=\"body2\" color=\"text.secondary\" sx={{ minWidth: 64, textAlign: 'center' }}>\r\n {hasFrames ? `${displayScale}%` : '—'}\r\n </Typography>\r\n <Tooltip title=\"Download\">\r\n <IconButton\r\n size=\"small\"\r\n onClick={onDownloadClick}\r\n >\r\n <DownloadIcon />\r\n </IconButton>\r\n </Tooltip>\r\n {hasMultipleFrames && (\r\n <Select\r\n size=\"small\"\r\n value={String(currentIndex)}\r\n onChange={(event: SelectChangeEvent<string>) => setCurrentIndex(Number(event.target.value))}\r\n sx={{ minWidth: 120 }}\r\n >\r\n {frames.map((_, index) => (\r\n <MenuItem key={index} value={String(index)}>\r\n Page {index + 1}\r\n </MenuItem>\r\n ))}\r\n </Select>\r\n )}\r\n </Stack>\r\n }\r\n sx={{ pb: 1 }}\r\n />\r\n {isLoading && <LinearProgress sx={{ mx: 3, mb: 1 }} />}\r\n {error && (\r\n <Typography color=\"error\" variant=\"body2\" sx={{ px: 3, pb: 1 }}>\r\n {error}\r\n </Typography>\r\n )}\r\n <Divider />\r\n <CardContent\r\n sx={{\r\n flexGrow: 1,\r\n minHeight: 0,\r\n display: 'flex',\r\n flexDirection: 'column',\r\n p: 0\r\n }}\r\n >\r\n <Box\r\n ref={viewportRef}\r\n sx={{\r\n flex: 1,\r\n overflow: 'auto',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n p: 3,\r\n backgroundColor: '#f6f8fa'\r\n }}\r\n >\r\n {renderImage()}\r\n </Box>\r\n </CardContent>\r\n {hasMultipleFrames && (\r\n <CardActions sx={{ justifyContent: 'center', px: 3, py: 2 }}>\r\n <Stack direction=\"row\" spacing={1} alignItems=\"center\">\r\n <Button\r\n variant=\"outlined\"\r\n size=\"small\"\r\n onClick={() => setCurrentIndex((index) => Math.max(index - 1, 0))}\r\n disabled={currentIndex === 0}\r\n >\r\n Previous\r\n </Button>\r\n <Typography variant=\"body2\" color=\"text.secondary\">\r\n Page {currentIndex + 1} of {frames.length}\r\n </Typography>\r\n <Button\r\n variant=\"outlined\"\r\n size=\"small\"\r\n onClick={() => setCurrentIndex((index) => Math.min(index + 1, frames.length - 1))}\r\n disabled={currentIndex === frames.length - 1}\r\n >\r\n Next\r\n </Button>\r\n </Stack>\r\n </CardActions>\r\n )}\r\n </Card>\r\n </Box>\r\n );\r\n};\r\n\r\nexport const TIFFViewer: React.FC<FileViewerProps> = (props) => {\r\n const sourceDescription = useMemo(\r\n () => resolveDocumentName(props.file, props.fileName, props.url),\r\n [props.file, props.fileName, props.url]\r\n );\r\n\r\n return <TIFFViewerContent {...props} sourceDescription={sourceDescription} />;\r\n};\r\n"],"mappings":"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","names":[]}
|
package/dist/chunk-QLJKOQTP.mjs
DELETED
|
@@ -1,78 +0,0 @@
|
|
|
1
|
-
"use client";
|
|
2
|
-
|
|
3
|
-
// src/components/viewers/DefaultViewer.tsx
|
|
4
|
-
import { jsx, jsxs } from "react/jsx-runtime";
|
|
5
|
-
var DefaultViewer = ({
|
|
6
|
-
file,
|
|
7
|
-
url,
|
|
8
|
-
fileName,
|
|
9
|
-
mimeType,
|
|
10
|
-
fileSize,
|
|
11
|
-
className = "",
|
|
12
|
-
style = {},
|
|
13
|
-
width = "100%",
|
|
14
|
-
height = "100%",
|
|
15
|
-
onLoad,
|
|
16
|
-
onError,
|
|
17
|
-
// Filter out props that shouldn't be passed to DOM
|
|
18
|
-
showPageCount: _showPageCount,
|
|
19
|
-
showPageNavigation: _showPageNavigation,
|
|
20
|
-
showZoomControls: _showZoomControls,
|
|
21
|
-
showDownload: _showDownload,
|
|
22
|
-
showPrint: _showPrint,
|
|
23
|
-
showSearch: _showSearch,
|
|
24
|
-
showMetadata: _showMetadata,
|
|
25
|
-
showProperties: _showProperties,
|
|
26
|
-
onMetadataClick: _onMetadataClick,
|
|
27
|
-
onPropertiesClick: _onPropertiesClick,
|
|
28
|
-
onPrintClick: _onPrintClick,
|
|
29
|
-
onDownloadClick: _onDownloadClick,
|
|
30
|
-
customRegistry: _customRegistry,
|
|
31
|
-
...props
|
|
32
|
-
}) => {
|
|
33
|
-
return /* @__PURE__ */ jsx(
|
|
34
|
-
"div",
|
|
35
|
-
{
|
|
36
|
-
className: `default-viewer ${className}`,
|
|
37
|
-
style: { width, height, ...style },
|
|
38
|
-
...props,
|
|
39
|
-
children: /* @__PURE__ */ jsxs("div", { style: {
|
|
40
|
-
padding: "16px",
|
|
41
|
-
border: "1px solid #ddd",
|
|
42
|
-
borderRadius: "4px",
|
|
43
|
-
backgroundColor: "#f9f9f9",
|
|
44
|
-
height: "100%",
|
|
45
|
-
display: "flex",
|
|
46
|
-
flexDirection: "column",
|
|
47
|
-
alignItems: "center",
|
|
48
|
-
justifyContent: "center"
|
|
49
|
-
}, children: [
|
|
50
|
-
/* @__PURE__ */ jsx("h3", { children: "File Preview Not Available" }),
|
|
51
|
-
/* @__PURE__ */ jsxs("div", { style: { textAlign: "center", color: "#666" }, children: [
|
|
52
|
-
/* @__PURE__ */ jsxs("p", { children: [
|
|
53
|
-
/* @__PURE__ */ jsx("strong", { children: "File:" }),
|
|
54
|
-
" ",
|
|
55
|
-
fileName
|
|
56
|
-
] }),
|
|
57
|
-
mimeType && /* @__PURE__ */ jsxs("p", { children: [
|
|
58
|
-
/* @__PURE__ */ jsx("strong", { children: "Type:" }),
|
|
59
|
-
" ",
|
|
60
|
-
mimeType
|
|
61
|
-
] }),
|
|
62
|
-
fileSize && /* @__PURE__ */ jsxs("p", { children: [
|
|
63
|
-
/* @__PURE__ */ jsx("strong", { children: "Size:" }),
|
|
64
|
-
" ",
|
|
65
|
-
Math.round(fileSize / 1024),
|
|
66
|
-
" KB"
|
|
67
|
-
] }),
|
|
68
|
-
/* @__PURE__ */ jsx("p", { style: { marginTop: "16px" }, children: "This file type is not supported for preview." })
|
|
69
|
-
] })
|
|
70
|
-
] })
|
|
71
|
-
}
|
|
72
|
-
);
|
|
73
|
-
};
|
|
74
|
-
|
|
75
|
-
export {
|
|
76
|
-
DefaultViewer
|
|
77
|
-
};
|
|
78
|
-
//# sourceMappingURL=chunk-QLJKOQTP.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/viewers/DefaultViewer.tsx"],"sourcesContent":["import React from 'react';\r\nimport { FileViewerProps } from '../../types';\r\n\r\nexport const DefaultViewer: React.FC<FileViewerProps> = ({\r\n file,\r\n url,\r\n fileName,\r\n mimeType,\r\n fileSize,\r\n className = '',\r\n style = {},\r\n width = '100%',\r\n height = '100%',\r\n onLoad,\r\n onError,\r\n // Filter out props that shouldn't be passed to DOM\r\n showPageCount: _showPageCount,\r\n showPageNavigation: _showPageNavigation,\r\n showZoomControls: _showZoomControls,\r\n showDownload: _showDownload,\r\n showPrint: _showPrint,\r\n showSearch: _showSearch,\r\n showMetadata: _showMetadata,\r\n showProperties: _showProperties,\r\n onMetadataClick: _onMetadataClick,\r\n onPropertiesClick: _onPropertiesClick,\r\n onPrintClick: _onPrintClick,\r\n onDownloadClick: _onDownloadClick,\r\n customRegistry: _customRegistry,\r\n ...props\r\n}) => {\r\n return (\r\n <div\r\n className={`default-viewer ${className}`}\r\n style={{ width, height, ...style }}\r\n {...props}\r\n >\r\n <div style={{\r\n padding: '16px',\r\n border: '1px solid #ddd',\r\n borderRadius: '4px',\r\n backgroundColor: '#f9f9f9',\r\n height: '100%',\r\n display: 'flex',\r\n flexDirection: 'column',\r\n alignItems: 'center',\r\n justifyContent: 'center'\r\n }}>\r\n <h3>File Preview Not Available</h3>\r\n <div style={{ textAlign: 'center', color: '#666' }}>\r\n <p><strong>File:</strong> {fileName}</p>\r\n {mimeType && <p><strong>Type:</strong> {mimeType}</p>}\r\n {fileSize && <p><strong>Size:</strong> {Math.round(fileSize / 1024)} KB</p>}\r\n <p style={{ marginTop: '16px' }}>\r\n This file type is not supported for preview.\r\n </p>\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n};"],"mappings":";;;AAgDQ,cAEE,YAFF;AA7CD,IAAM,gBAA2C,CAAC;AAAA,EACvD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,YAAY;AAAA,EACZ,QAAQ,CAAC;AAAA,EACT,QAAQ;AAAA,EACR,SAAS;AAAA,EACT;AAAA,EACA;AAAA;AAAA,EAEA,eAAe;AAAA,EACf,oBAAoB;AAAA,EACpB,kBAAkB;AAAA,EAClB,cAAc;AAAA,EACd,WAAW;AAAA,EACX,YAAY;AAAA,EACZ,cAAc;AAAA,EACd,gBAAgB;AAAA,EAChB,iBAAiB;AAAA,EACjB,mBAAmB;AAAA,EACnB,cAAc;AAAA,EACd,iBAAiB;AAAA,EACjB,gBAAgB;AAAA,EAChB,GAAG;AACL,MAAM;AACJ,SACE;AAAA,IAAC;AAAA;AAAA,MACC,WAAW,kBAAkB,SAAS;AAAA,MACtC,OAAO,EAAE,OAAO,QAAQ,GAAG,MAAM;AAAA,MAChC,GAAG;AAAA,MAEJ,+BAAC,SAAI,OAAO;AAAA,QACV,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,iBAAiB;AAAA,QACjB,QAAQ;AAAA,QACR,SAAS;AAAA,QACT,eAAe;AAAA,QACf,YAAY;AAAA,QACZ,gBAAgB;AAAA,MAClB,GACE;AAAA,4BAAC,QAAG,wCAA0B;AAAA,QAC9B,qBAAC,SAAI,OAAO,EAAE,WAAW,UAAU,OAAO,OAAO,GAC/C;AAAA,+BAAC,OAAE;AAAA,gCAAC,YAAO,mBAAK;AAAA,YAAS;AAAA,YAAE;AAAA,aAAS;AAAA,UACnC,YAAY,qBAAC,OAAE;AAAA,gCAAC,YAAO,mBAAK;AAAA,YAAS;AAAA,YAAE;AAAA,aAAS;AAAA,UAChD,YAAY,qBAAC,OAAE;AAAA,gCAAC,YAAO,mBAAK;AAAA,YAAS;AAAA,YAAE,KAAK,MAAM,WAAW,IAAI;AAAA,YAAE;AAAA,aAAG;AAAA,UACvE,oBAAC,OAAE,OAAO,EAAE,WAAW,OAAO,GAAG,0DAEjC;AAAA,WACF;AAAA,SACF;AAAA;AAAA,EACF;AAEJ;","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/viewers/VideoViewer.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';\r\nimport { Box, Card, CardContent, CardHeader, LinearProgress, Typography, Stack, IconButton, Tooltip } from '@mui/material';\r\nimport DownloadIcon from '@mui/icons-material/Download';\r\nimport { FileViewerProps } from '../../types';\r\nimport { getFileExtension } from '../../utils/fileUtils';\r\nimport FileIcon from '../FileIcon';\r\n\r\nexport const VideoViewer: React.FC<FileViewerProps> = ({\r\n file,\r\n url,\r\n fileName,\r\n className = '',\r\n style = {},\r\n width = '100%',\r\n height = '100%',\r\n onLoad,\r\n onError,\r\n onDownloadClick,\r\n // Filter out props that shouldn't be passed to DOM\r\n mimeType: _mimeType,\r\n fileSize: _fileSize,\r\n showPageCount: _showPageCount,\r\n showPageNavigation: _showPageNavigation,\r\n showZoomControls: _showZoomControls,\r\n showDownload: _showDownload,\r\n showPrint: _showPrint,\r\n showSearch: _showSearch,\r\n showMetadata: _showMetadata,\r\n showProperties: _showProperties,\r\n onMetadataClick: _onMetadataClick,\r\n onPropertiesClick: _onPropertiesClick,\r\n onPrintClick: _onPrintClick,\r\n customRegistry: _customRegistry,\r\n ...props\r\n}) => {\r\n const videoRef = useRef<HTMLVideoElement | null>(null);\r\n const [videoSource, setVideoSource] = useState<string | null>(null);\r\n const [isLoading, setIsLoading] = useState(false);\r\n const [error, setError] = useState<string | null>(null);\r\n const [videoDimensions, setVideoDimensions] = useState<{ width: number; height: number } | null>(null);\r\n\r\n useEffect(() => {\r\n let objectUrl: string | null = null;\r\n\r\n if (file) {\r\n objectUrl = URL.createObjectURL(file);\r\n setVideoSource(objectUrl);\r\n setIsLoading(true);\r\n } else if (url) {\r\n setVideoSource(url);\r\n } else {\r\n setVideoSource(null);\r\n }\r\n\r\n setError(null);\r\n\r\n return () => {\r\n if (objectUrl) {\r\n URL.revokeObjectURL(objectUrl);\r\n }\r\n };\r\n }, [file, url]);\r\n\r\n useEffect(() => {\r\n const element = videoRef.current;\r\n if (!element) {\r\n return;\r\n }\r\n\r\n const handleLoaded = () => {\r\n setIsLoading(false);\r\n // Capture video dimensions\r\n setVideoDimensions({\r\n width: element.videoWidth,\r\n height: element.videoHeight\r\n });\r\n onLoad?.();\r\n };\r\n\r\n const handleError = () => {\r\n const message = 'Failed to load video resource';\r\n setIsLoading(false);\r\n setError(message);\r\n onError?.(new Error(message));\r\n };\r\n\r\n element.addEventListener('loadedmetadata', handleLoaded);\r\n element.addEventListener('error', handleError);\r\n\r\n return () => {\r\n element.removeEventListener('loadedmetadata', handleLoaded);\r\n element.removeEventListener('error', handleError);\r\n };\r\n }, [onLoad, onError, videoSource]);\r\n\r\n const resolvedFileName = useMemo(\r\n () => fileName || file?.name || (url ? url.split('/').pop() : 'video'),\r\n [fileName, file, url]\r\n );\r\n\r\n const fileExtension = useMemo(\r\n () => getFileExtension(resolvedFileName || ''),\r\n [resolvedFileName]\r\n );\r\n\r\n const handleDownload = useCallback(async () => {\r\n if (!file && !url) return;\r\n \r\n try {\r\n let blob: Blob;\r\n let filename = resolvedFileName || 'video.mp4';\r\n \r\n if (file) {\r\n blob = file;\r\n filename = file.name;\r\n } else if (url) {\r\n const response = await fetch(url);\r\n if (!response.ok) {\r\n throw new Error(`Failed to fetch video (${response.status})`);\r\n }\r\n blob = await response.blob();\r\n } else {\r\n return;\r\n }\r\n \r\n const downloadUrl = URL.createObjectURL(blob);\r\n const link = document.createElement('a');\r\n link.href = downloadUrl;\r\n link.download = filename;\r\n document.body.appendChild(link);\r\n link.click();\r\n document.body.removeChild(link);\r\n URL.revokeObjectURL(downloadUrl);\r\n } catch (err) {\r\n // Handle download errors silently or show user-friendly message\r\n onError?.(err instanceof Error ? err : new Error('Download failed'));\r\n }\r\n }, [file, url, resolvedFileName, onError]);\r\n\r\n return (\r\n <Box\r\n className={`video-viewer ${className}`}\r\n sx={{ width, height, ...style }}\r\n {...props}\r\n >\r\n <Card sx={{ height: '100%', display: 'flex', flexDirection: 'column' }} elevation={1}>\r\n <CardHeader\r\n avatar={<FileIcon ext={fileExtension} size={32} />}\r\n title={\r\n <Typography variant=\"subtitle1\" fontWeight={500}>\r\n {resolvedFileName}\r\n </Typography>\r\n }\r\n action={\r\n <Tooltip title=\"Download\">\r\n <IconButton\r\n size=\"small\"\r\n onClick={onDownloadClick}\r\n >\r\n <DownloadIcon />\r\n </IconButton>\r\n </Tooltip>\r\n }\r\n sx={{ pb: 1.5 }}\r\n />\r\n {isLoading && <LinearProgress sx={{ mx: 3, mb: 2 }} />}\r\n {error && (\r\n <Typography color=\"error\" variant=\"body2\" sx={{ px: 3, pb: 1 }}>\r\n {error}\r\n </Typography>\r\n )}\r\n <CardContent sx={{ \r\n flexGrow: 1, \r\n display: 'flex', \r\n alignItems: 'center', \r\n justifyContent: 'center', \r\n p: 2,\r\n overflow: 'hidden'\r\n }}>\r\n {videoSource ? (\r\n <Box\r\n sx={{\r\n width: '100%',\r\n height: '100%',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n backgroundColor: '#000',\r\n borderRadius: 2\r\n }}\r\n >\r\n <video\r\n ref={videoRef}\r\n controls\r\n controlsList=\"nodownload\"\r\n style={{\r\n maxWidth: '100%',\r\n maxHeight: '100%',\r\n width: 'auto',\r\n height: 'auto',\r\n objectFit: 'contain'\r\n }}\r\n src={videoSource}\r\n />\r\n </Box>\r\n ) : (\r\n <Typography variant=\"body2\" color=\"text.secondary\">\r\n No video source provided.\r\n </Typography>\r\n )}\r\n </CardContent>\r\n </Card>\r\n </Box>\r\n );\r\n};"],"mappings":"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","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/viewers/ImageViewer.tsx","../src/utils/imageToPdf.ts"],"sourcesContent":["import React, { useEffect, useMemo, useState } from 'react';\r\nimport { FileViewerProps } from '../../types';\r\nimport { imageBufferToPdf } from '../../utils/imageToPdf';\r\nimport { getFileExtension, getMimeTypeFromExtension } from '../../utils/fileUtils';\r\nimport { PDFViewer } from './PDFViewer';\r\n\r\ntype LoaderState = 'idle' | 'loading' | 'ready' | 'error';\r\n\r\nconst stripQuery = (value: string): string => value.split('?')[0]?.split('#')[0] ?? value;\r\n\r\nconst stripExtension = (value: string): string => value.replace(/\\.[^.]+$/, '');\r\n\r\nconst deriveDisplayName = (file?: File, fileName?: string, url?: string): string => {\r\n if (file?.name) {\r\n return stripExtension(file.name) || 'image';\r\n }\r\n if (fileName) {\r\n return stripExtension(fileName) || 'image';\r\n }\r\n if (url) {\r\n const cleaned = stripQuery(url);\r\n const parts = cleaned.split('/').filter(Boolean);\r\n const last = parts[parts.length - 1] ?? 'image';\r\n return stripExtension(last);\r\n }\r\n return 'image';\r\n};\r\n\r\nconst normalizeImageMime = (value?: string | null): string | undefined => {\r\n if (!value) {\r\n return undefined;\r\n }\r\n const cleaned = value.split(';')[0]?.trim().toLowerCase();\r\n if (!cleaned || !cleaned.startsWith('image/')) {\r\n return undefined;\r\n }\r\n if (cleaned === 'image/jpg') {\r\n return 'image/jpeg';\r\n }\r\n return cleaned;\r\n};\r\n\r\nconst resolveMimeType = (\r\n userMimeType?: string,\r\n file?: File,\r\n responseMime?: string,\r\n fileName?: string,\r\n url?: string\r\n): string | undefined => {\r\n const candidates = [userMimeType, file?.type, responseMime];\r\n for (const candidate of candidates) {\r\n const normalized = normalizeImageMime(candidate);\r\n if (normalized) {\r\n return normalized;\r\n }\r\n }\r\n const sourceName = file?.name ?? fileName ?? (url ? stripQuery(url) : undefined);\r\n if (!sourceName) {\r\n return undefined;\r\n }\r\n const extension = getFileExtension(sourceName);\r\n if (!extension) {\r\n return undefined;\r\n }\r\n return normalizeImageMime(getMimeTypeFromExtension(extension));\r\n};\r\n\r\nexport const ImageViewer: React.FC<FileViewerProps> = ({\r\n file,\r\n url,\r\n fileName,\r\n mimeType,\r\n className = '',\r\n style = {},\r\n width = '100%',\r\n height = '100%',\r\n onLoad,\r\n onError,\r\n showPageCount = false,\r\n showPageNavigation = false,\r\n showZoomControls = true,\r\n showDownload = true,\r\n showPrint = true,\r\n showSearch = false,\r\n showMetadata = false,\r\n showProperties = false,\r\n onMetadataClick,\r\n onPropertiesClick,\r\n onDownloadClick,\r\n onPrintClick,\r\n // Filter out props that shouldn't be passed to DOM\r\n fileSize: _fileSize,\r\n customRegistry: _customRegistry,\r\n ...props\r\n}) => {\r\n const [state, setState] = useState<LoaderState>('idle');\r\n const [error, setError] = useState<Error | null>(null);\r\n const [convertedFile, setConvertedFile] = useState<File | null>(null);\r\n const viewerKey = useMemo(() => (\r\n convertedFile ? `${convertedFile.name}-${convertedFile.lastModified}` : 'image-viewer'\r\n ), [convertedFile]);\r\n\r\n useEffect(() => {\r\n let isActive = true;\r\n\r\n const reset = () => {\r\n setState('idle');\r\n setError(null);\r\n setConvertedFile(null);\r\n };\r\n\r\n if (!file && !url) {\r\n reset();\r\n return undefined;\r\n }\r\n\r\n const convert = async () => {\r\n setState('loading');\r\n setError(null);\r\n\r\n try {\r\n let buffer: ArrayBuffer;\r\n let responseMime: string | undefined;\r\n\r\n if (file) {\r\n buffer = await file.arrayBuffer();\r\n } else if (url) {\r\n const response = await fetch(url);\r\n\r\n if (!response.ok) {\r\n throw new Error(`Failed to fetch image (${response.status})`);\r\n }\r\n\r\n responseMime = response.headers.get('content-type') ?? undefined;\r\n buffer = await response.arrayBuffer();\r\n } else {\r\n throw new Error('No image source provided');\r\n }\r\n\r\n const resolvedMime = resolveMimeType(mimeType, file, responseMime, fileName, url);\r\n const pdfBytes = await imageBufferToPdf(buffer, { mimeType: resolvedMime });\r\n\r\n const baseName = deriveDisplayName(file, fileName, url);\r\n const originalExtension = getFileExtension(file?.name || fileName || url || '');\r\n const pdfBlob = new Blob([pdfBytes], { type: 'application/pdf' });\r\n const newFile = new File([pdfBlob], `${baseName}.${originalExtension || 'jpg'}`, {\r\n type: 'application/pdf',\r\n lastModified: file?.lastModified ?? Date.now()\r\n });\r\n\r\n if (!isActive) {\r\n return;\r\n }\r\n\r\n setConvertedFile(newFile);\r\n setState('ready');\r\n } catch (cause) {\r\n if (!isActive) {\r\n return;\r\n }\r\n\r\n const failure = cause instanceof Error\r\n ? cause\r\n : new Error('Unable to convert image to PDF');\r\n setError(failure);\r\n setConvertedFile(null);\r\n setState('error');\r\n onError?.(failure);\r\n }\r\n };\r\n\r\n void convert();\r\n\r\n return () => {\r\n isActive = false;\r\n };\r\n }, [file, url, fileName, mimeType, onError]);\r\n\r\n return (\r\n <div\r\n className={`image-viewer ${className}`}\r\n style={{ width, height, ...style }}\r\n {...props}\r\n >\r\n {!file && !url && (\r\n <div style={{\r\n height: '100%',\r\n display: 'flex',\r\n flexDirection: 'column',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n border: '1px dashed #ccc',\r\n borderRadius: '4px',\r\n color: '#666'\r\n }}>\r\n <strong>No image source provided</strong>\r\n <span style={{ fontSize: '0.9rem', marginTop: '8px' }}>\r\n Choose a file or supply a URL.\r\n </span>\r\n </div>\r\n )}\r\n\r\n {state === 'loading' && (\r\n <div style={{\r\n height: '100%',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n border: '1px solid #ddd',\r\n borderRadius: '4px',\r\n backgroundColor: '#f9f9f9',\r\n color: '#555',\r\n fontSize: '0.95rem'\r\n }}>\r\n Preparing image viewer...\r\n </div>\r\n )}\r\n\r\n {state === 'error' && error && (\r\n <div style={{\r\n height: '100%',\r\n display: 'flex',\r\n flexDirection: 'column',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n border: '1px solid #f0b4b4',\r\n borderRadius: '4px',\r\n backgroundColor: '#fff2f2',\r\n color: '#b71c1c',\r\n padding: '24px',\r\n textAlign: 'center'\r\n }}>\r\n <strong style={{ marginBottom: '12px' }}>Failed to prepare image viewer</strong>\r\n <span style={{ fontSize: '0.9rem' }}>{error.message}</span>\r\n </div>\r\n )}\r\n\r\n {state === 'ready' && convertedFile && (\r\n <PDFViewer\r\n key={viewerKey}\r\n file={convertedFile}\r\n fileName={convertedFile.name}\r\n width=\"100%\"\r\n height=\"100%\"\r\n onLoad={onLoad}\r\n onError={onError}\r\n showPageCount={showPageCount}\r\n showPageNavigation={showPageNavigation}\r\n showZoomControls={showZoomControls}\r\n showDownload={showDownload}\r\n showPrint={showPrint}\r\n showSearch={showSearch}\r\n showMetadata={showMetadata}\r\n showProperties={showProperties}\r\n onMetadataClick={onMetadataClick}\r\n onPropertiesClick={onPropertiesClick}\r\n onDownloadClick={onDownloadClick}\r\n onPrintClick={onPrintClick}\r\n {...props}\r\n />\r\n )}\r\n </div>\r\n );\r\n};","import { PDFDocument } from 'pdf-lib';\r\n\r\nconst SUPPORTED_IMAGE_TYPES = new Set(['image/png', 'image/jpeg']);\r\n\r\nconst sanitizeMimeType = (mimeType?: string | null): string | null => {\r\n if (!mimeType) {\r\n return null;\r\n }\r\n const lower = mimeType.toLowerCase();\r\n if (lower === 'image/jpg') {\r\n return 'image/jpeg';\r\n }\r\n return lower;\r\n};\r\n\r\nconst detectMimeTypeFromBuffer = (buffer: ArrayBuffer): string | null => {\r\n if (buffer.byteLength < 8) {\r\n return null;\r\n }\r\n const signature = new Uint8Array(buffer, 0, 8);\r\n const [b0, b1, b2, b3, b4, b5, b6, b7] = signature;\r\n\r\n if (\r\n b0 === 0x89 && b1 === 0x50 && b2 === 0x4e && b3 === 0x47 &&\r\n b4 === 0x0d && b5 === 0x0a && b6 === 0x1a && b7 === 0x0a\r\n ) {\r\n return 'image/png';\r\n }\r\n\r\n if (b0 === 0xff && b1 === 0xd8) {\r\n return 'image/jpeg';\r\n }\r\n\r\n return null;\r\n};\r\n\r\nexport interface ImageConversionOptions {\r\n mimeType?: string | null;\r\n}\r\n\r\nexport const imageBufferToPdf = async (\r\n buffer: ArrayBuffer,\r\n { mimeType }: ImageConversionOptions = {}\r\n): Promise<Uint8Array> => {\r\n const detectedMimeType = detectMimeTypeFromBuffer(buffer);\r\n const resolvedMimeType = sanitizeMimeType(mimeType) ?? detectedMimeType;\r\n\r\n if (!resolvedMimeType) {\r\n throw new Error('Unable to detect image type for PDF conversion');\r\n }\r\n\r\n if (!SUPPORTED_IMAGE_TYPES.has(resolvedMimeType)) {\r\n throw new Error('Unsupported image type for PDF conversion');\r\n }\r\n\r\n const pdfDoc = await PDFDocument.create();\r\n\r\n let embeddedImage;\r\n if (resolvedMimeType === 'image/png') {\r\n embeddedImage = await pdfDoc.embedPng(buffer);\r\n } else {\r\n embeddedImage = await pdfDoc.embedJpg(buffer);\r\n }\r\n\r\n const { width, height } = embeddedImage.scale(1);\r\n const page = pdfDoc.addPage([width, height]);\r\n page.drawImage(embeddedImage, {\r\n x: 0,\r\n y: 0,\r\n width,\r\n height\r\n });\r\n\r\n return pdfDoc.save();\r\n};\r\n"],"mappings":"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","names":[]}
|