@cannymindstech/file-viewers 0.27.11 → 0.28.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.
Files changed (91) hide show
  1. package/package.json +2 -2
  2. package/dist/chunk-2BLHLWNN.js +0 -299
  3. package/dist/chunk-2BLHLWNN.js.map +0 -1
  4. package/dist/chunk-6BRYDA3B.js +0 -329
  5. package/dist/chunk-6BRYDA3B.js.map +0 -1
  6. package/dist/chunk-7JPF5AYR.mjs +0 -488
  7. package/dist/chunk-7JPF5AYR.mjs.map +0 -1
  8. package/dist/chunk-7P6WEBHN.js +0 -2299
  9. package/dist/chunk-7P6WEBHN.js.map +0 -1
  10. package/dist/chunk-7PMZ4GN5.mjs +0 -290
  11. package/dist/chunk-7PMZ4GN5.mjs.map +0 -1
  12. package/dist/chunk-B5NNB4KD.mjs +0 -268
  13. package/dist/chunk-B5NNB4KD.mjs.map +0 -1
  14. package/dist/chunk-CIWCHSAA.js +0 -309
  15. package/dist/chunk-CIWCHSAA.js.map +0 -1
  16. package/dist/chunk-D7SDEVDM.js +0 -268
  17. package/dist/chunk-D7SDEVDM.js.map +0 -1
  18. package/dist/chunk-ECZ6IBOS.js +0 -424
  19. package/dist/chunk-ECZ6IBOS.js.map +0 -1
  20. package/dist/chunk-EI3EP65I.mjs +0 -868
  21. package/dist/chunk-EI3EP65I.mjs.map +0 -1
  22. package/dist/chunk-EKNP342T.mjs +0 -299
  23. package/dist/chunk-EKNP342T.mjs.map +0 -1
  24. package/dist/chunk-EM63H4SA.js +0 -290
  25. package/dist/chunk-EM63H4SA.js.map +0 -1
  26. package/dist/chunk-IJMNPAXX.mjs +0 -309
  27. package/dist/chunk-IJMNPAXX.mjs.map +0 -1
  28. package/dist/chunk-KJNOBIUZ.mjs +0 -36
  29. package/dist/chunk-KJNOBIUZ.mjs.map +0 -1
  30. package/dist/chunk-KQCU7XW2.mjs +0 -424
  31. package/dist/chunk-KQCU7XW2.mjs.map +0 -1
  32. package/dist/chunk-MPTCXAXO.js +0 -868
  33. package/dist/chunk-MPTCXAXO.js.map +0 -1
  34. package/dist/chunk-OPJOCUSL.js +0 -36
  35. package/dist/chunk-OPJOCUSL.js.map +0 -1
  36. package/dist/chunk-PZGUVU6N.mjs +0 -2299
  37. package/dist/chunk-PZGUVU6N.mjs.map +0 -1
  38. package/dist/chunk-QV63FULE.js +0 -488
  39. package/dist/chunk-QV63FULE.js.map +0 -1
  40. package/dist/chunk-XJQ5J2UF.mjs +0 -329
  41. package/dist/chunk-XJQ5J2UF.mjs.map +0 -1
  42. package/dist/components/viewers/AudioViewer.d.mts +0 -6
  43. package/dist/components/viewers/AudioViewer.d.ts +0 -6
  44. package/dist/components/viewers/AudioViewer.js +0 -10
  45. package/dist/components/viewers/AudioViewer.js.map +0 -1
  46. package/dist/components/viewers/AudioViewer.mjs +0 -10
  47. package/dist/components/viewers/AudioViewer.mjs.map +0 -1
  48. package/dist/components/viewers/DefaultViewer.d.mts +0 -6
  49. package/dist/components/viewers/DefaultViewer.d.ts +0 -6
  50. package/dist/components/viewers/DefaultViewer.js +0 -10
  51. package/dist/components/viewers/DefaultViewer.js.map +0 -1
  52. package/dist/components/viewers/DefaultViewer.mjs +0 -10
  53. package/dist/components/viewers/DefaultViewer.mjs.map +0 -1
  54. package/dist/components/viewers/ImageViewer.d.mts +0 -6
  55. package/dist/components/viewers/ImageViewer.d.ts +0 -6
  56. package/dist/components/viewers/ImageViewer.js +0 -10
  57. package/dist/components/viewers/ImageViewer.js.map +0 -1
  58. package/dist/components/viewers/ImageViewer.mjs +0 -10
  59. package/dist/components/viewers/ImageViewer.mjs.map +0 -1
  60. package/dist/components/viewers/PDFViewer.d.mts +0 -51
  61. package/dist/components/viewers/PDFViewer.d.ts +0 -51
  62. package/dist/components/viewers/PDFViewer.js +0 -11
  63. package/dist/components/viewers/PDFViewer.js.map +0 -1
  64. package/dist/components/viewers/PDFViewer.mjs +0 -11
  65. package/dist/components/viewers/PDFViewer.mjs.map +0 -1
  66. package/dist/components/viewers/TIFFViewer.d.mts +0 -6
  67. package/dist/components/viewers/TIFFViewer.d.ts +0 -6
  68. package/dist/components/viewers/TIFFViewer.js +0 -10
  69. package/dist/components/viewers/TIFFViewer.js.map +0 -1
  70. package/dist/components/viewers/TIFFViewer.mjs +0 -10
  71. package/dist/components/viewers/TIFFViewer.mjs.map +0 -1
  72. package/dist/components/viewers/TextViewer.d.mts +0 -6
  73. package/dist/components/viewers/TextViewer.d.ts +0 -6
  74. package/dist/components/viewers/TextViewer.js +0 -10
  75. package/dist/components/viewers/TextViewer.js.map +0 -1
  76. package/dist/components/viewers/TextViewer.mjs +0 -10
  77. package/dist/components/viewers/TextViewer.mjs.map +0 -1
  78. package/dist/components/viewers/VideoViewer.d.mts +0 -6
  79. package/dist/components/viewers/VideoViewer.d.ts +0 -6
  80. package/dist/components/viewers/VideoViewer.js +0 -10
  81. package/dist/components/viewers/VideoViewer.js.map +0 -1
  82. package/dist/components/viewers/VideoViewer.mjs +0 -10
  83. package/dist/components/viewers/VideoViewer.mjs.map +0 -1
  84. package/dist/index.d.mts +0 -75
  85. package/dist/index.d.ts +0 -75
  86. package/dist/index.js +0 -305
  87. package/dist/index.js.map +0 -1
  88. package/dist/index.mjs +0 -305
  89. package/dist/index.mjs.map +0 -1
  90. package/dist/types-BYTxtKEc.d.mts +0 -100
  91. package/dist/types-BYTxtKEc.d.ts +0 -100
@@ -1 +0,0 @@
1
- {"version":3,"sources":["/home/premkumar/Documents/GitHub/DMS-File-Viewers/packages/lib/dist/chunk-MPTCXAXO.js","../src/components/viewers/TIFFViewer.tsx"],"names":["imageUrl","width","height"],"mappings":"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","file":"/home/premkumar/Documents/GitHub/DMS-File-Viewers/packages/lib/dist/chunk-MPTCXAXO.js","sourcesContent":[null,"import React, {\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport {\n Box,\n Button,\n ButtonGroup,\n Card,\n CardContent,\n CardHeader,\n Divider,\n LinearProgress,\n Stack,\n Typography,\n IconButton,\n Tooltip,\n} from \"@mui/material\";\nimport DownloadIcon from \"@mui/icons-material/Download\";\nimport PrintIcon from \"@mui/icons-material/Print\";\nimport FullscreenIcon from \"@mui/icons-material/Fullscreen\";\nimport FirstPageIcon from \"@mui/icons-material/FirstPage\";\nimport LastPageIcon from \"@mui/icons-material/LastPage\";\nimport ChevronLeftIcon from \"@mui/icons-material/ChevronLeft\";\nimport ChevronRightIcon from \"@mui/icons-material/ChevronRight\";\nimport ZoomInIcon from \"@mui/icons-material/ZoomIn\";\nimport ZoomOutIcon from \"@mui/icons-material/ZoomOut\";\nimport FitScreenIcon from \"@mui/icons-material/FitScreen\";\nimport AspectRatioIcon from \"@mui/icons-material/AspectRatio\";\nimport InfoIcon from \"@mui/icons-material/Info\";\nimport DescriptionIcon from \"@mui/icons-material/Description\";\nimport HistoryIcon from \"@mui/icons-material/History\";\nimport { LocalOffer } from \"@mui/icons-material\";\nimport * as UTIF from \"utif\";\nimport type { UTIFImage } from \"utif\";\nimport { FileViewerProps } from \"../../types\";\nimport { getFileExtension } from \"../../utils/fileUtils\";\nimport { mergeToolbarConfig } from \"../../utils/toolbarUtils\";\nimport FileIcon from \"../FileIcon\";\n\nconst resolveDocumentName = (file?: File, fileName?: string, url?: string) => {\n if (file?.name) {\n return file.name;\n }\n if (fileName) {\n return fileName;\n }\n if (url) {\n const parts = url.split(\"?\")[0]?.split(\"#\")[0]?.split(\"/\") ?? [];\n return parts[parts.length - 1] || \"document.tiff\";\n }\n return \"document.tiff\";\n};\n\ninterface TIFFViewerContentProps extends FileViewerProps {\n sourceDescription: string;\n}\n\nconst TIFFViewerContent: React.FC<TIFFViewerContentProps> = ({\n sourceDescription,\n file,\n url,\n fileName,\n totalPages = 1,\n className = \"\",\n style = {},\n width = \"100%\",\n height = \"100%\",\n onLoad,\n onError,\n onDownloadClick,\n onPrintClick,\n onTagsClick,\n onMetadataClick,\n onPropertiesClick,\n onHistoryClick,\n pageLoader,\n showDownload = true,\n showPrint = true,\n showMetadata = false,\n showTags = true,\n showProperties = false,\n showHistory = true,\n // Extract props that shouldn't be passed to DOM elements\n mimeType,\n fileSize,\n showPageCount,\n showPageNavigation,\n showZoomControls,\n showSearch,\n customRegistry,\n initialSearchText,\n initialSearchPages,\n autoOpenSearch,\n autoExecuteSearch,\n onSearchComplete,\n toolbarActions,\n // Annotation-related FileViewerProps (PDF only) — extract so they don't\n // leak onto the DOM via {...props} on <Box>.\n showAnnotations,\n userDetails,\n annotationSelectionMenu,\n isHighlighterActive,\n isStampActive,\n isNoteActive,\n onHighlighterClick,\n onStampClick,\n onSignatureClick,\n onNoteClick,\n permissions,\n isAnnotationForeign,\n onAnnotationNoteClick,\n isAnnotationInteractive,\n hasUnsavedAnnotations,\n isSavingAnnotations,\n canSaveAnnotations,\n onSaveAnnotations,\n onDownloadWithAnnotations,\n onDownloadWithoutAnnotations,\n onPrintWithAnnotations,\n onPrintWithoutAnnotations,\n showDownloadOriginal,\n showDownloadWithAnnotations,\n showPrintOriginal,\n showPrintWithAnnotations,\n showAnnotate,\n disabledAnnotate,\n showRotation,\n defaultFitToPage,\n loading,\n onPasswordRequest,\n ...props\n}) => {\n const [currentPage, setCurrentPage] = useState(1);\n const [isLoading, setIsLoading] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const [fitMode, setFitMode] = useState<\"fit-width\" | \"fit-page\" | \"zoom\">(\n \"fit-page\"\n );\n const [zoom, setZoom] = useState(100);\n const [viewportWidth, setViewportWidth] = useState<number>(0);\n const [viewportHeight, setViewportHeight] = useState<number>(0);\n const [, setIsFullScreen] = useState(false);\n const [imageUrl, setImageUrl] = useState<string | null>(null);\n const [pageImages, setPageImages] = useState<Map<number, string>>(new Map());\n const [internalLoading, setInternalLoading] = useState(false);\n const [imageSize, setImageSize] = useState<{\n width: number;\n height: number;\n } | null>(null);\n\n const viewportRef = useRef<HTMLDivElement | null>(null);\n const containerRef = useRef<HTMLDivElement>(null);\n const imgRef = useRef<HTMLImageElement | null>(null);\n\n // Store pageLoader in ref to prevent re-renders\n const pageLoaderRef = useRef(pageLoader);\n useEffect(() => {\n pageLoaderRef.current = pageLoader;\n }, [pageLoader]);\n\n // Local TIFF decoding state — used when no external pageLoader is provided\n // (e.g. direct file uploads in the demo). When pageLoader IS provided\n // (server-converted streaming flow), this remains inert.\n const [localTotalPages, setLocalTotalPages] = useState(0);\n const tiffSourceRef = useRef<{ buffer: ArrayBuffer; ifds: UTIFImage[] } | null>(null);\n\n // Prefer the locally-discovered count (UTIF parsed real IFDs) over the\n // prop, which can be stale or unset on older files whose server-side\n // metadata extraction predates the MEDIA_SERVICE_URL fix.\n const effectiveTotalPages = localTotalPages || totalPages;\n\n // Update page image from ArrayBuffer data\n const updatePageImage = useCallback(\n (pageData: ArrayBuffer, pageNumber: number) => {\n const blob = new Blob([pageData]);\n const imageUrl = URL.createObjectURL(blob);\n\n setPageImages((prev) => {\n // Only clean up old URL if we're replacing with a different one\n const oldUrl = prev.get(pageNumber);\n if (oldUrl && oldUrl !== imageUrl) {\n URL.revokeObjectURL(oldUrl);\n }\n return new Map(prev).set(pageNumber, imageUrl);\n });\n setCurrentPage(pageNumber);\n setImageUrl(imageUrl);\n },\n []\n );\n\n // Decode a single TIFF IFD into a PNG ArrayBuffer using the cached source\n const decodeLocalPage = useCallback(\n async (pageIndex: number): Promise<ArrayBuffer | null> => {\n const source = tiffSourceRef.current;\n if (!source) return null;\n const image = source.ifds[pageIndex];\n if (!image) return null;\n UTIF.decodeImage(source.buffer, image);\n const rgba = UTIF.toRGBA8(image);\n const width = Number(image.width) || 0;\n const height = Number(image.height) || 0;\n if (!width || !height) return null;\n const canvas = document.createElement(\"canvas\");\n canvas.width = width;\n canvas.height = height;\n const ctx = canvas.getContext(\"2d\");\n if (!ctx) return null;\n ctx.putImageData(\n new ImageData(new Uint8ClampedArray(rgba), width, height),\n 0,\n 0\n );\n return await new Promise<ArrayBuffer | null>((resolve) => {\n canvas.toBlob(async (blob) => {\n if (!blob) {\n resolve(null);\n return;\n }\n resolve(await blob.arrayBuffer());\n }, \"image/png\");\n });\n },\n []\n );\n\n // Load initial page when pageLoader is available\n useEffect(() => {\n const loadInitialPage = async () => {\n if (pageLoaderRef.current && !pageImages.has(1) && currentPage === 1) {\n setInternalLoading(true);\n setError(null);\n\n try {\n const pageData = await pageLoaderRef.current(1);\n if (pageData) {\n updatePageImage(pageData, 1);\n } else {\n setError(\"Failed to load page 1\");\n }\n } catch (err) {\n const message =\n err instanceof Error ? err.message : \"Unable to load page 1\";\n setError(message);\n onError?.(new Error(message));\n } finally {\n setInternalLoading(false);\n }\n }\n };\n\n loadInitialPage();\n }, [pageImages, currentPage, updatePageImage, onError]);\n\n // Decode TIFF locally to discover page count (and, when no external\n // pageLoader is provided, also render pages locally).\n //\n // Two scenarios:\n // 1. No pageLoader (demo / direct upload): we fully own rendering —\n // decode page 1 to a PNG blob and display it. Subsequent pages\n // decoded on demand via handlePageChange.\n // 2. pageLoader provided (server-converted flow with the full decrypted\n // buffer available client-side, e.g. DMS-Client-Drive secure-view):\n // we still parse IFDs to discover the real page count, since the\n // server-side `properties.pageCount` metadata can be missing on\n // older files. pageLoader keeps handling per-page rendering.\n //\n // Skipped when only a `url` is provided alongside `pageLoader` — that\n // implies a controlled per-page fetch model we shouldn't bypass.\n useEffect(() => {\n if (!file && !url) {\n tiffSourceRef.current = null;\n setLocalTotalPages(0);\n return;\n }\n\n let cancelled = false;\n\n (async () => {\n try {\n // Acquire raw bytes for UTIF.decode (IFD parsing only — cheap).\n let buffer: ArrayBuffer | null = null;\n if (file) {\n buffer = await file.arrayBuffer();\n } else if (url && !pageLoader) {\n buffer = await (await fetch(url)).arrayBuffer();\n }\n if (cancelled || !buffer) return;\n\n const ifds = UTIF.decode(buffer);\n if (!ifds.length) {\n throw new Error(\"No pages found in TIFF\");\n }\n\n tiffSourceRef.current = { buffer, ifds };\n setLocalTotalPages(ifds.length);\n\n // Only render locally when there's no external pageLoader.\n if (pageLoader) return;\n\n setInternalLoading(true);\n setError(null);\n setImageUrl(null);\n setImageSize(null);\n setPageImages((prev) => {\n prev.forEach((u) => URL.revokeObjectURL(u));\n return new Map();\n });\n\n const firstPage = await decodeLocalPage(0);\n if (cancelled) return;\n if (!firstPage) {\n throw new Error(\"Failed to decode TIFF page 1\");\n }\n updatePageImage(firstPage, 1);\n onLoad?.();\n } catch (err) {\n if (cancelled) return;\n const message =\n err instanceof Error ? err.message : \"Failed to decode TIFF\";\n // Surface error only when local decode is the rendering path;\n // when pageLoader handles rendering, its own error channel applies.\n if (!pageLoader) {\n setError(message);\n onError?.(new Error(message));\n } else {\n console.warn(`[TIFFViewer] Local IFD count failed: ${message}`);\n }\n } finally {\n if (!cancelled && !pageLoader) setInternalLoading(false);\n }\n })();\n\n return () => {\n cancelled = true;\n };\n }, [file, url, pageLoader, decodeLocalPage, updatePageImage, onLoad, onError]);\n\n // Handle internal page navigation\n const handlePageChange = useCallback(\n async (newPageNumber: number) => {\n const hasExternalLoader = !!pageLoaderRef.current;\n const hasLocalSource = !!tiffSourceRef.current;\n if (!hasExternalLoader && !hasLocalSource) {\n console.warn(\"pageLoader not provided - page navigation disabled\");\n return;\n }\n\n // Check if page is already cached\n const cachedUrl = pageImages.get(newPageNumber);\n if (cachedUrl) {\n setCurrentPage(newPageNumber);\n setImageUrl(cachedUrl);\n return;\n }\n\n setError(null);\n\n try {\n const pageData = hasExternalLoader\n ? await pageLoaderRef.current!(newPageNumber)\n : await decodeLocalPage(newPageNumber - 1);\n if (pageData) {\n updatePageImage(pageData, newPageNumber);\n } else {\n setError(`Failed to load page ${newPageNumber}`);\n }\n } catch (err) {\n const message =\n err instanceof Error\n ? err.message\n : `Unable to load page ${newPageNumber}`;\n setError(message);\n onError?.(new Error(message));\n }\n },\n [pageImages, onError, updatePageImage, decodeLocalPage]\n );\n\n const resolvedFileName = useMemo(\n () => fileName || sourceDescription,\n [fileName, sourceDescription]\n );\n\n const fileExtension = useMemo(\n () => getFileExtension(resolvedFileName || \"\"),\n [resolvedFileName]\n );\n\n const loadImage = useCallback(\n async (resetPage = false) => {\n if (!file && !url) {\n setImageUrl(null);\n if (resetPage) setCurrentPage(1);\n setError(null);\n return;\n }\n\n setIsLoading(true);\n setError(null);\n\n // Reset view state on new file/url. The actual imageUrl is set by either\n // the external pageLoader effect (server-converted flow) or the local\n // TIFF decode effect — both produce decoded PNG blobs, never raw TIFF,\n // since browsers can't render raw TIFF in <img>.\n if (resetPage) {\n setCurrentPage(1);\n setFitMode(\"fit-page\");\n setZoom(100);\n }\n setIsLoading(false);\n },\n [file, url]\n );\n\n const [previousFileSource, setPreviousFileSource] = useState<{\n file?: File;\n url?: string;\n }>({});\n\n useEffect(() => {\n const currentFileSource = { file, url };\n const isNewFile =\n previousFileSource.file !== file || previousFileSource.url !== url;\n\n if (isNewFile) {\n setPreviousFileSource(currentFileSource);\n void loadImage(true); // Reset page on new file\n } else {\n void loadImage(false); // Don't reset page for same file\n }\n }, [file, url, loadImage, previousFileSource.file, previousFileSource.url]);\n\n useEffect(() => {\n return () => {\n // Clean up all cached page URLs only on unmount\n pageImages.forEach((url) => {\n URL.revokeObjectURL(url);\n });\n // Clean up current image URL if it's from a file (not from pageLoader)\n if (imageUrl && file && !pageImages.has(currentPage)) {\n URL.revokeObjectURL(imageUrl);\n }\n };\n }, []); // Empty dependency array - only cleanup on unmount\n\n const hasImage = !!imageUrl;\n const hasMultiplePages = effectiveTotalPages > 1;\n\n // Constants for zoom calculation\n const MARGIN = 40;\n const MIN_ZOOM = 25;\n const MAX_ZOOM = 400;\n const ZOOM_LEVELS = [25, 50, 75, 100, 125, 150, 200, 300, 400];\n\n // Helper function to calculate zoom based on fit mode\n const calculateFitZoom = useCallback(\n (mode: \"fit-width\" | \"fit-page\"): number | null => {\n if (!imageSize || viewportWidth <= 0) return null;\n\n const availableWidth = viewportWidth - MARGIN;\n\n if (mode === \"fit-width\") {\n const calculatedZoom = Math.round(\n (availableWidth / imageSize.width) * 100\n );\n return Math.max(MIN_ZOOM, Math.min(MAX_ZOOM, calculatedZoom));\n }\n\n if (mode === \"fit-page\" && viewportHeight > 0) {\n const availableHeight = viewportHeight - MARGIN;\n const scaleW = availableWidth / imageSize.width;\n const scaleH = availableHeight / imageSize.height;\n const calculatedZoom = Math.round(Math.min(scaleW, scaleH) * 100);\n return Math.max(MIN_ZOOM, Math.min(MAX_ZOOM, calculatedZoom));\n }\n\n return null;\n },\n [imageSize, viewportWidth, viewportHeight]\n );\n\n // Recalculate zoom when changing pages in fit modes\n useEffect(() => {\n if (!hasImage || !imageSize) return;\n\n const newZoom = calculateFitZoom(fitMode as \"fit-width\" | \"fit-page\");\n if (newZoom !== null) {\n setZoom(newZoom);\n }\n }, [currentPage, hasImage, imageSize, fitMode, calculateFitZoom]);\n\n useEffect(() => {\n if (\n typeof window === \"undefined\" ||\n typeof ResizeObserver === \"undefined\"\n ) {\n return undefined;\n }\n\n if (!viewportRef.current) {\n return undefined;\n }\n\n const updateSize = () => {\n const bounds = viewportRef.current?.getBoundingClientRect();\n if (bounds) {\n setViewportWidth(bounds.width);\n setViewportHeight(bounds.height);\n }\n };\n\n updateSize();\n const observer = new ResizeObserver(updateSize);\n observer.observe(viewportRef.current);\n\n return () => {\n observer.disconnect();\n };\n }, []);\n\n const handleZoomIn = useCallback(() => {\n setFitMode(\"zoom\");\n setZoom((value) => {\n const nextLevel = ZOOM_LEVELS.find((level) => level > value);\n return nextLevel || MAX_ZOOM;\n });\n }, []);\n\n const handleZoomOut = useCallback(() => {\n setFitMode(\"zoom\");\n setZoom((value) => {\n const prevLevel = [...ZOOM_LEVELS]\n .reverse()\n .find((level) => level < value);\n return prevLevel || MIN_ZOOM;\n });\n }, []);\n\n const handleFitWidth = useCallback(() => {\n setFitMode(\"fit-width\");\n const newZoom = calculateFitZoom(\"fit-width\");\n if (newZoom !== null) {\n setZoom(newZoom);\n }\n }, [calculateFitZoom]);\n\n const handleFitPage = useCallback(() => {\n setFitMode(\"fit-page\");\n const newZoom = calculateFitZoom(\"fit-page\");\n if (newZoom !== null) {\n setZoom(newZoom);\n }\n }, [calculateFitZoom]);\n\n const handleFirstPage = useCallback(() => {\n handlePageChange(1);\n }, [handlePageChange]);\n\n const handleLastPage = useCallback(() => {\n handlePageChange(effectiveTotalPages);\n }, [handlePageChange, effectiveTotalPages]);\n\n const handlePreviousPage = useCallback(() => {\n const newPage = Math.max(currentPage - 1, 1);\n if (newPage !== currentPage) {\n handlePageChange(newPage);\n }\n }, [currentPage, handlePageChange]);\n\n const handleNextPage = useCallback(() => {\n const newPage = Math.min(currentPage + 1, effectiveTotalPages);\n if (newPage !== currentPage) {\n handlePageChange(newPage);\n }\n }, [currentPage, effectiveTotalPages, handlePageChange]);\n\n const handleToggleFullScreen = useCallback(() => {\n if (!document.fullscreenElement && containerRef.current?.requestFullscreen) {\n containerRef.current.requestFullscreen();\n } else if (document.fullscreenElement && document.exitFullscreen) {\n document.exitFullscreen();\n }\n }, []);\n\n // Keep isFullScreen in sync with the actual fullscreen state so the\n // toolbar reflects Escape-to-exit and the next click re-enters cleanly.\n useEffect(() => {\n const onFullscreenChange = () => {\n setIsFullScreen(!!document.fullscreenElement);\n };\n document.addEventListener(\"fullscreenchange\", onFullscreenChange);\n return () => {\n document.removeEventListener(\"fullscreenchange\", onFullscreenChange);\n };\n }, []);\n\n // Default print handler — opens the current page image in a popup and\n // triggers the browser print dialog. Used when the host doesn't supply\n // an onPrintClick callback.\n const handlePrint = useCallback(() => {\n if (!imageUrl) return;\n const printWindow = window.open(\"\", \"_blank\", \"width=900,height=1200\");\n if (!printWindow) return;\n const doc = printWindow.document;\n doc.title = resolvedFileName || \"Document\";\n const style = doc.createElement(\"style\");\n style.textContent =\n \"@page { margin: 0.5cm; }\" +\n \"html, body { margin: 0; padding: 0; }\" +\n \"img { display: block; width: 100%; height: auto; page-break-after: always; }\";\n doc.head.appendChild(style);\n const img = doc.createElement(\"img\");\n img.alt = resolvedFileName || \"Document\";\n img.onload = () => {\n window.setTimeout(() => printWindow.print(), 100);\n };\n img.src = imageUrl;\n doc.body.appendChild(img);\n }, [imageUrl, resolvedFileName]);\n\n const toolbar = mergeToolbarConfig({\n showDownload,\n showPrint,\n showMetadata,\n showTags,\n showProperties,\n showHistory,\n onDownloadClick,\n onPrintClick,\n onTagsClick,\n onMetadataClick,\n onPropertiesClick,\n onHistoryClick,\n toolbarActions,\n });\n\n const displayScale = zoom;\n\n const handleImageLoad = useCallback(\n (e: React.SyntheticEvent<HTMLImageElement>) => {\n const img = e.currentTarget;\n setImageSize({ width: img.naturalWidth, height: img.naturalHeight });\n if (!hasImage) {\n onLoad?.();\n }\n },\n [hasImage, onLoad]\n );\n\n const renderImage = () => {\n if (!imageUrl) {\n return (\n <Typography variant=\"body2\" color=\"text.secondary\">\n No image available.\n </Typography>\n );\n }\n\n // Calculate scaled dimensions based on zoom\n let imgStyle: React.CSSProperties = {\n display: \"block\",\n borderRadius: \"4px\",\n };\n\n if (imageSize) {\n // Always use zoom-based calculation for consistent behavior\n const zoomFactor = zoom / 100;\n const scaledWidth = imageSize.width * zoomFactor;\n const scaledHeight = imageSize.height * zoomFactor;\n imgStyle = {\n ...imgStyle,\n width: `${scaledWidth}px`,\n height: `${scaledHeight}px`,\n maxWidth: \"none\",\n maxHeight: \"none\",\n };\n }\n\n return (\n <Box\n component=\"img\"\n ref={imgRef}\n src={imageUrl}\n alt={`${resolvedFileName} page ${currentPage}`}\n onLoad={handleImageLoad}\n onError={() => {\n setError(\"Failed to load image\");\n onError?.(new Error(\"Failed to load image\"));\n }}\n sx={{\n ...imgStyle,\n boxShadow: 1,\n backgroundColor: \"#fff\",\n margin: \"20px\",\n }}\n />\n );\n };\n\n return (\n <Box\n ref={containerRef}\n className={`tiff-viewer ${className}`}\n sx={{\n width,\n height,\n display: \"flex\",\n flexDirection: \"column\",\n overflow: \"hidden\",\n ...style,\n }}\n {...props}\n >\n <Card\n sx={{\n height: \"100%\",\n width: \"100%\",\n display: \"flex\",\n flexDirection: \"column\",\n overflow: \"hidden\",\n }}\n elevation={1}\n >\n <CardHeader\n avatar={<FileIcon ext={fileExtension} size={32} />}\n title={\n <Typography variant=\"subtitle1\" fontWeight={500}>\n {resolvedFileName}\n </Typography>\n }\n sx={{ pb: 1 }}\n />\n\n {/* Toolbar - All Controls at Top (Centered) */}\n <Box sx={{ px: 2, pb: 1, display: \"flex\", justifyContent: \"center\" }}>\n <Stack\n direction=\"row\"\n spacing={1}\n alignItems=\"center\"\n flexWrap=\"wrap\"\n gap={1}\n >\n {/* Page Navigation */}\n {hasMultiplePages && (\n <>\n <IconButton\n size=\"small\"\n onClick={handleFirstPage}\n disabled={currentPage === 1}\n title=\"First Page\"\n aria-label=\"Go to first page\"\n >\n <FirstPageIcon fontSize=\"small\" />\n </IconButton>\n <IconButton\n size=\"small\"\n onClick={handlePreviousPage}\n disabled={currentPage === 1}\n title=\"Previous Page\"\n aria-label=\"Go to previous page\"\n >\n <ChevronLeftIcon fontSize=\"small\" />\n </IconButton>\n <Typography\n variant=\"body2\"\n color=\"text.secondary\"\n sx={{ minWidth: 100, textAlign: \"center\" }}\n >\n Page {currentPage} of {effectiveTotalPages}\n </Typography>\n <IconButton\n size=\"small\"\n onClick={handleNextPage}\n disabled={currentPage === effectiveTotalPages}\n title=\"Next Page\"\n aria-label=\"Go to next page\"\n >\n <ChevronRightIcon fontSize=\"small\" />\n </IconButton>\n <IconButton\n size=\"small\"\n onClick={handleLastPage}\n disabled={currentPage === effectiveTotalPages}\n title=\"Last Page\"\n aria-label=\"Go to last page\"\n >\n <LastPageIcon fontSize=\"small\" />\n </IconButton>\n <Divider orientation=\"vertical\" flexItem sx={{ mx: 1 }} />\n </>\n )}\n\n {/* Zoom Controls */}\n <IconButton\n size=\"small\"\n onClick={handleZoomOut}\n disabled={!hasImage || zoom <= 25}\n title=\"Zoom Out\"\n aria-label=\"Zoom out\"\n >\n <ZoomOutIcon fontSize=\"small\" />\n </IconButton>\n <Typography\n variant=\"body2\"\n color=\"text.secondary\"\n sx={{ minWidth: 64, textAlign: \"center\" }}\n >\n {hasImage ? `${displayScale}%` : \"—\"}\n </Typography>\n <IconButton\n size=\"small\"\n onClick={handleZoomIn}\n disabled={!hasImage || zoom >= 400}\n title=\"Zoom In\"\n aria-label=\"Zoom in\"\n >\n <ZoomInIcon fontSize=\"small\" />\n </IconButton>\n\n <IconButton\n size=\"small\"\n onClick={handleFitWidth}\n disabled={!hasImage}\n title=\"Fit to Width\"\n aria-label=\"Fit to width\"\n color={fitMode === \"fit-width\" ? \"primary\" : \"default\"}\n >\n <AspectRatioIcon fontSize=\"small\" />\n </IconButton>\n\n <IconButton\n size=\"small\"\n onClick={handleFitPage}\n disabled={!hasImage}\n title=\"Fit to Page\"\n aria-label=\"Fit to page\"\n color={fitMode === \"fit-page\" ? \"primary\" : \"default\"}\n >\n <FitScreenIcon fontSize=\"small\" />\n </IconButton>\n\n <Divider orientation=\"vertical\" flexItem sx={{ mx: 1 }} />\n\n {/* Actions */}\n {!toolbar.isHidden(\"download\") && (\n <IconButton\n size=\"small\"\n onClick={toolbar.getHandler(\"download\", onDownloadClick)}\n disabled={toolbar.isDisabled(\"download\")}\n title={toolbar.getLabel(\"download\") || \"Download\"}\n aria-label=\"Download TIFF\"\n >\n {toolbar.getIcon(\"download\") || (\n <DownloadIcon fontSize=\"small\" />\n )}\n </IconButton>\n )}\n\n {!toolbar.isHidden(\"print\") && (\n <IconButton\n size=\"small\"\n onClick={toolbar.getHandler(\"print\", onPrintClick || handlePrint)}\n disabled={toolbar.isDisabled(\"print\")}\n title={toolbar.getLabel(\"print\") || \"Print\"}\n aria-label=\"Print TIFF\"\n >\n {toolbar.getIcon(\"print\") || <PrintIcon fontSize=\"small\" />}\n </IconButton>\n )}\n\n {!toolbar.isHidden(\"fullscreen\") && (\n <IconButton\n size=\"small\"\n onClick={toolbar.getHandler(\n \"fullscreen\",\n handleToggleFullScreen\n )}\n disabled={toolbar.isDisabled(\"fullscreen\")}\n title={toolbar.getLabel(\"fullscreen\") || \"Fullscreen\"}\n aria-label=\"Toggle fullscreen\"\n >\n {toolbar.getIcon(\"fullscreen\") || (\n <FullscreenIcon fontSize=\"small\" />\n )}\n </IconButton>\n )}\n\n {!toolbar.isHidden(\"metadata\") && (\n <IconButton\n size=\"small\"\n onClick={toolbar.getHandler(\"metadata\", onMetadataClick)}\n disabled={toolbar.isDisabled(\"metadata\")}\n title={toolbar.getLabel(\"metadata\") || \"Document Metadata\"}\n aria-label=\"View document metadata\"\n >\n {toolbar.getIcon(\"metadata\") || (\n <DescriptionIcon fontSize=\"small\" />\n )}\n </IconButton>\n )}\n\n {!toolbar.isHidden(\"properties\") && (\n <IconButton\n size=\"small\"\n onClick={toolbar.getHandler(\"properties\", onPropertiesClick)}\n disabled={toolbar.isDisabled(\"properties\")}\n title={toolbar.getLabel(\"properties\") || \"Document Properties\"}\n aria-label=\"View document properties\"\n >\n {toolbar.getIcon(\"properties\") || <InfoIcon fontSize=\"small\" />}\n </IconButton>\n )}\n\n {!toolbar.isHidden(\"tags\") && (\n <IconButton\n size=\"small\"\n onClick={toolbar.getHandler(\"tags\", onTagsClick)}\n disabled={toolbar.isDisabled(\"tags\")}\n title={toolbar.getLabel(\"tags\") || \"Document Tags\"}\n aria-label=\"View document tags\"\n >\n {toolbar.getIcon(\"tags\") || <LocalOffer fontSize=\"small\" />}\n </IconButton>\n )}\n\n {!toolbar.isHidden(\"history\") && (\n <IconButton\n size=\"small\"\n onClick={toolbar.getHandler(\"history\", onHistoryClick)}\n disabled={toolbar.isDisabled(\"history\")}\n title={toolbar.getLabel(\"history\") || \"Document History\"}\n aria-label=\"View document history\"\n >\n {toolbar.getIcon(\"history\") || (\n <HistoryIcon fontSize=\"small\" />\n )}\n </IconButton>\n )}\n </Stack>\n </Box>\n\n {(isLoading || internalLoading) && (\n <LinearProgress sx={{ mx: 3, mb: 1 }} />\n )}\n {error && (\n <Typography color=\"error\" variant=\"body2\" sx={{ px: 3, pb: 1 }}>\n {error}\n </Typography>\n )}\n <Divider />\n <CardContent\n sx={{\n flexGrow: 1,\n flexShrink: 1,\n minHeight: 0,\n p: 0,\n overflow: \"hidden\",\n backgroundColor: \"#f6f8fa\",\n position: \"relative\",\n }}\n >\n <Box\n ref={viewportRef}\n sx={{\n position: \"absolute\",\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n overflow: \"auto\",\n }}\n >\n <Box\n sx={{\n minWidth: \"100%\",\n minHeight: \"100%\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n }}\n >\n {renderImage()}\n </Box>\n </Box>\n </CardContent>\n </Card>\n </Box>\n );\n};\n\nexport const TIFFViewer: React.FC<FileViewerProps> = (props) => {\n const sourceDescription = useMemo(\n () => resolveDocumentName(props.file, props.fileName, props.url),\n [props.file, props.fileName, props.url]\n );\n\n return <TIFFViewerContent {...props} sourceDescription={sourceDescription} />;\n};\n"]}
@@ -1,36 +0,0 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true});"use client";
2
-
3
- // src/utils/fileUtils.ts
4
- var getFileExtension = (fileName) => {
5
- const extension = fileName.toLowerCase().split(".").pop();
6
- return extension || "";
7
- };
8
- var getMimeTypeFromExtension = (extension) => {
9
- const mimeTypes = {
10
- "pdf": "application/pdf",
11
- "txt": "text/plain",
12
- "json": "application/json",
13
- "xml": "text/xml",
14
- "csv": "text/csv",
15
- "jpg": "image/jpeg",
16
- "jpeg": "image/jpeg",
17
- "png": "image/png",
18
- "gif": "image/gif",
19
- "svg": "image/svg+xml",
20
- "mp4": "video/mp4",
21
- "webm": "video/webm",
22
- "mp3": "audio/mpeg",
23
- "wav": "audio/wav",
24
- "doc": "application/msword",
25
- "docx": "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
26
- "xls": "application/vnd.ms-excel",
27
- "xlsx": "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
28
- };
29
- return mimeTypes[extension] || "application/octet-stream";
30
- };
31
-
32
-
33
-
34
-
35
- exports.getFileExtension = getFileExtension; exports.getMimeTypeFromExtension = getMimeTypeFromExtension;
36
- //# sourceMappingURL=chunk-OPJOCUSL.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["/home/premkumar/Documents/GitHub/DMS-File-Viewers/packages/lib/dist/chunk-OPJOCUSL.js","../src/utils/fileUtils.ts"],"names":[],"mappings":"AAAA,qFAAY;AACZ;AACA;ACFO,IAAM,iBAAA,EAAmB,CAAC,QAAA,EAAA,GAA6B;AAC5D,EAAA,MAAM,UAAA,EAAY,QAAA,CAAS,WAAA,CAAY,CAAA,CAAE,KAAA,CAAM,GAAG,CAAA,CAAE,GAAA,CAAI,CAAA;AACxD,EAAA,OAAO,UAAA,GAAa,EAAA;AACtB,CAAA;AAEO,IAAM,yBAAA,EAA2B,CAAC,SAAA,EAAA,GAA8B;AACrE,EAAA,MAAM,UAAA,EAAoC;AAAA,IACxC,KAAA,EAAO,iBAAA;AAAA,IACP,KAAA,EAAO,YAAA;AAAA,IACP,MAAA,EAAQ,kBAAA;AAAA,IACR,KAAA,EAAO,UAAA;AAAA,IACP,KAAA,EAAO,UAAA;AAAA,IACP,KAAA,EAAO,YAAA;AAAA,IACP,MAAA,EAAQ,YAAA;AAAA,IACR,KAAA,EAAO,WAAA;AAAA,IACP,KAAA,EAAO,WAAA;AAAA,IACP,KAAA,EAAO,eAAA;AAAA,IACP,KAAA,EAAO,WAAA;AAAA,IACP,MAAA,EAAQ,YAAA;AAAA,IACR,KAAA,EAAO,YAAA;AAAA,IACP,KAAA,EAAO,WAAA;AAAA,IACP,KAAA,EAAO,oBAAA;AAAA,IACP,MAAA,EAAQ,yEAAA;AAAA,IACR,KAAA,EAAO,0BAAA;AAAA,IACP,MAAA,EAAQ;AAAA,EACV,CAAA;AAEA,EAAA,OAAO,SAAA,CAAU,SAAS,EAAA,GAAK,0BAAA;AACjC,CAAA;ADEA;AACA;AACE;AACA;AACF,yGAAC","file":"/home/premkumar/Documents/GitHub/DMS-File-Viewers/packages/lib/dist/chunk-OPJOCUSL.js","sourcesContent":[null,"export const getFileExtension = (fileName: string): string => {\n const extension = fileName.toLowerCase().split('.').pop();\n return extension || '';\n};\n\nexport const getMimeTypeFromExtension = (extension: string): string => {\n const mimeTypes: Record<string, string> = {\n 'pdf': 'application/pdf',\n 'txt': 'text/plain',\n 'json': 'application/json',\n 'xml': 'text/xml',\n 'csv': 'text/csv',\n 'jpg': 'image/jpeg',\n 'jpeg': 'image/jpeg',\n 'png': 'image/png',\n 'gif': 'image/gif',\n 'svg': 'image/svg+xml',\n 'mp4': 'video/mp4',\n 'webm': 'video/webm',\n 'mp3': 'audio/mpeg',\n 'wav': 'audio/wav',\n 'doc': 'application/msword',\n 'docx': 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',\n 'xls': 'application/vnd.ms-excel',\n 'xlsx': 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'\n };\n\n return mimeTypes[extension] || 'application/octet-stream';\n};"]}