@cannyminds/dms-file-viewers 0.14.0 → 0.16.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 (97) hide show
  1. package/dist/chunk-5VXNBCB7.mjs +268 -0
  2. package/dist/chunk-5VXNBCB7.mjs.map +1 -0
  3. package/dist/chunk-7S4B534E.js +742 -0
  4. package/dist/chunk-7S4B534E.js.map +1 -0
  5. package/dist/chunk-AUNFO5WZ.js +268 -0
  6. package/dist/chunk-AUNFO5WZ.js.map +1 -0
  7. package/dist/chunk-BL4HRFCJ.mjs +487 -0
  8. package/dist/chunk-BL4HRFCJ.mjs.map +1 -0
  9. package/dist/chunk-CIAMJ46F.js +309 -0
  10. package/dist/chunk-CIAMJ46F.js.map +1 -0
  11. package/dist/chunk-DLSRPPBM.mjs +1863 -0
  12. package/dist/chunk-DLSRPPBM.mjs.map +1 -0
  13. package/dist/{chunk-J3JKVSAM.js → chunk-EEIQAW55.js} +5 -2
  14. package/dist/chunk-EEIQAW55.js.map +1 -0
  15. package/dist/chunk-FUNU3LUV.js +487 -0
  16. package/dist/chunk-FUNU3LUV.js.map +1 -0
  17. package/dist/chunk-HX5KWJCV.mjs +742 -0
  18. package/dist/chunk-HX5KWJCV.mjs.map +1 -0
  19. package/dist/chunk-LOXGEZRZ.js +329 -0
  20. package/dist/chunk-LOXGEZRZ.js.map +1 -0
  21. package/dist/chunk-NZLZUCP2.mjs +329 -0
  22. package/dist/chunk-NZLZUCP2.mjs.map +1 -0
  23. package/dist/chunk-PFX2NN3C.js +1863 -0
  24. package/dist/chunk-PFX2NN3C.js.map +1 -0
  25. package/dist/{chunk-DFBVN4MO.mjs → chunk-Q4OU6YDO.mjs} +5 -2
  26. package/dist/chunk-Q4OU6YDO.mjs.map +1 -0
  27. package/dist/chunk-VM5I5IEA.mjs +309 -0
  28. package/dist/chunk-VM5I5IEA.mjs.map +1 -0
  29. package/dist/chunk-YGQ6UYNQ.js +299 -0
  30. package/dist/chunk-YGQ6UYNQ.js.map +1 -0
  31. package/dist/chunk-ZRASAXL6.mjs +299 -0
  32. package/dist/chunk-ZRASAXL6.mjs.map +1 -0
  33. package/dist/components/viewers/AudioViewer.d.mts +1 -1
  34. package/dist/components/viewers/AudioViewer.d.ts +1 -1
  35. package/dist/components/viewers/AudioViewer.js +3 -3
  36. package/dist/components/viewers/AudioViewer.mjs +2 -2
  37. package/dist/components/viewers/DefaultViewer.d.mts +1 -1
  38. package/dist/components/viewers/DefaultViewer.d.ts +1 -1
  39. package/dist/components/viewers/DefaultViewer.js +3 -3
  40. package/dist/components/viewers/DefaultViewer.mjs +2 -2
  41. package/dist/components/viewers/ImageViewer.d.mts +1 -1
  42. package/dist/components/viewers/ImageViewer.d.ts +1 -1
  43. package/dist/components/viewers/ImageViewer.js +3 -3
  44. package/dist/components/viewers/ImageViewer.mjs +2 -2
  45. package/dist/components/viewers/PDFViewer.d.mts +1 -1
  46. package/dist/components/viewers/PDFViewer.d.ts +1 -1
  47. package/dist/components/viewers/PDFViewer.js +3 -3
  48. package/dist/components/viewers/PDFViewer.mjs +2 -2
  49. package/dist/components/viewers/TIFFViewer.d.mts +1 -1
  50. package/dist/components/viewers/TIFFViewer.d.ts +1 -1
  51. package/dist/components/viewers/TIFFViewer.js +3 -3
  52. package/dist/components/viewers/TIFFViewer.mjs +2 -2
  53. package/dist/components/viewers/TextViewer.d.mts +1 -1
  54. package/dist/components/viewers/TextViewer.d.ts +1 -1
  55. package/dist/components/viewers/TextViewer.js +3 -3
  56. package/dist/components/viewers/TextViewer.mjs +2 -2
  57. package/dist/components/viewers/VideoViewer.d.mts +1 -1
  58. package/dist/components/viewers/VideoViewer.d.ts +1 -1
  59. package/dist/components/viewers/VideoViewer.js +3 -3
  60. package/dist/components/viewers/VideoViewer.mjs +2 -2
  61. package/dist/index.d.mts +2 -2
  62. package/dist/index.d.ts +2 -2
  63. package/dist/index.js +9 -9
  64. package/dist/index.mjs +8 -8
  65. package/dist/{types-DNrkDJdK.d.mts → types-DM0RG-Yu.d.mts} +6 -2
  66. package/dist/{types-DNrkDJdK.d.ts → types-DM0RG-Yu.d.ts} +6 -2
  67. package/package.json +1 -1
  68. package/dist/chunk-7QRYWFCO.js +0 -639
  69. package/dist/chunk-7QRYWFCO.js.map +0 -1
  70. package/dist/chunk-7R2KG3PE.mjs +0 -210
  71. package/dist/chunk-7R2KG3PE.mjs.map +0 -1
  72. package/dist/chunk-CFYOPDCG.mjs +0 -235
  73. package/dist/chunk-CFYOPDCG.mjs.map +0 -1
  74. package/dist/chunk-D74R4IKW.mjs +0 -341
  75. package/dist/chunk-D74R4IKW.mjs.map +0 -1
  76. package/dist/chunk-DFBVN4MO.mjs.map +0 -1
  77. package/dist/chunk-EXZCEYLI.js +0 -247
  78. package/dist/chunk-EXZCEYLI.js.map +0 -1
  79. package/dist/chunk-J3JKVSAM.js.map +0 -1
  80. package/dist/chunk-NXVIRFGL.mjs +0 -247
  81. package/dist/chunk-NXVIRFGL.mjs.map +0 -1
  82. package/dist/chunk-P2VNW6OE.mjs +0 -180
  83. package/dist/chunk-P2VNW6OE.mjs.map +0 -1
  84. package/dist/chunk-P5FH7LK7.mjs +0 -639
  85. package/dist/chunk-P5FH7LK7.mjs.map +0 -1
  86. package/dist/chunk-PZJSY6OF.mjs +0 -1736
  87. package/dist/chunk-PZJSY6OF.mjs.map +0 -1
  88. package/dist/chunk-RVHIXSUP.js +0 -235
  89. package/dist/chunk-RVHIXSUP.js.map +0 -1
  90. package/dist/chunk-TGVFAAIP.js +0 -341
  91. package/dist/chunk-TGVFAAIP.js.map +0 -1
  92. package/dist/chunk-VOLQW3NF.js +0 -1736
  93. package/dist/chunk-VOLQW3NF.js.map +0 -1
  94. package/dist/chunk-VSGX22FQ.js +0 -180
  95. package/dist/chunk-VSGX22FQ.js.map +0 -1
  96. package/dist/chunk-WCAXWJE7.js +0 -210
  97. package/dist/chunk-WCAXWJE7.js.map +0 -1
@@ -1,639 +0,0 @@
1
- "use client";
2
- import {
3
- getFileExtension
4
- } from "./chunk-M57PSU4O.mjs";
5
- import {
6
- FileIcon_default,
7
- mergeToolbarConfig
8
- } from "./chunk-DFBVN4MO.mjs";
9
-
10
- // src/components/viewers/TIFFViewer.tsx
11
- import {
12
- useCallback,
13
- useEffect,
14
- useMemo,
15
- useRef,
16
- useState
17
- } from "react";
18
- import {
19
- Box,
20
- Card,
21
- CardContent,
22
- CardHeader,
23
- Divider,
24
- LinearProgress,
25
- Stack,
26
- Typography,
27
- IconButton
28
- } from "@mui/material";
29
- import DownloadIcon from "@mui/icons-material/Download";
30
- import PrintIcon from "@mui/icons-material/Print";
31
- import FullscreenIcon from "@mui/icons-material/Fullscreen";
32
- import FirstPageIcon from "@mui/icons-material/FirstPage";
33
- import LastPageIcon from "@mui/icons-material/LastPage";
34
- import ChevronLeftIcon from "@mui/icons-material/ChevronLeft";
35
- import ChevronRightIcon from "@mui/icons-material/ChevronRight";
36
- import ZoomInIcon from "@mui/icons-material/ZoomIn";
37
- import ZoomOutIcon from "@mui/icons-material/ZoomOut";
38
- import FitScreenIcon from "@mui/icons-material/FitScreen";
39
- import AspectRatioIcon from "@mui/icons-material/AspectRatio";
40
- import InfoIcon from "@mui/icons-material/Info";
41
- import DescriptionIcon from "@mui/icons-material/Description";
42
- import { Fragment, jsx, jsxs } from "react/jsx-runtime";
43
- var resolveDocumentName = (file, fileName, url) => {
44
- if (file?.name) {
45
- return file.name;
46
- }
47
- if (fileName) {
48
- return fileName;
49
- }
50
- if (url) {
51
- const parts = url.split("?")[0]?.split("#")[0]?.split("/") ?? [];
52
- return parts[parts.length - 1] || "document.tiff";
53
- }
54
- return "document.tiff";
55
- };
56
- var TIFFViewerContent = ({
57
- sourceDescription,
58
- file,
59
- url,
60
- fileName,
61
- totalPages = 1,
62
- className = "",
63
- style = {},
64
- width = "100%",
65
- height = "100%",
66
- onLoad,
67
- onError,
68
- onDownloadClick,
69
- onPrintClick,
70
- onMetadataClick,
71
- onPropertiesClick,
72
- pageLoader,
73
- showDownload = true,
74
- showPrint = true,
75
- showMetadata = false,
76
- showProperties = false,
77
- // Extract props that shouldn't be passed to DOM elements
78
- mimeType,
79
- fileSize,
80
- showPageCount,
81
- showPageNavigation,
82
- showZoomControls,
83
- showSearch,
84
- customRegistry,
85
- initialSearchText,
86
- initialSearchPages,
87
- autoOpenSearch,
88
- autoExecuteSearch,
89
- onSearchComplete,
90
- toolbarActions,
91
- ...props
92
- }) => {
93
- const [currentPage, setCurrentPage] = useState(1);
94
- const [isLoading, setIsLoading] = useState(false);
95
- const [error, setError] = useState(null);
96
- const [fitMode, setFitMode] = useState("fit-page");
97
- const [zoom, setZoom] = useState(100);
98
- const [viewportWidth, setViewportWidth] = useState(0);
99
- const [viewportHeight, setViewportHeight] = useState(0);
100
- const [isFullScreen, setIsFullScreen] = useState(false);
101
- const [imageUrl, setImageUrl] = useState(null);
102
- const [pageImages, setPageImages] = useState(/* @__PURE__ */ new Map());
103
- const [internalLoading, setInternalLoading] = useState(false);
104
- const [imageSize, setImageSize] = useState(null);
105
- const viewportRef = useRef(null);
106
- const containerRef = useRef(null);
107
- const imgRef = useRef(null);
108
- const pageLoaderRef = useRef(pageLoader);
109
- useEffect(() => {
110
- pageLoaderRef.current = pageLoader;
111
- }, [pageLoader]);
112
- const updatePageImage = useCallback((pageData, pageNumber) => {
113
- const blob = new Blob([pageData]);
114
- const imageUrl2 = URL.createObjectURL(blob);
115
- setPageImages((prev) => {
116
- const oldUrl = prev.get(pageNumber);
117
- if (oldUrl && oldUrl !== imageUrl2) {
118
- URL.revokeObjectURL(oldUrl);
119
- }
120
- return new Map(prev).set(pageNumber, imageUrl2);
121
- });
122
- setCurrentPage(pageNumber);
123
- setImageUrl(imageUrl2);
124
- }, []);
125
- useEffect(() => {
126
- const loadInitialPage = async () => {
127
- if (pageLoaderRef.current && !pageImages.has(1) && currentPage === 1) {
128
- setInternalLoading(true);
129
- setError(null);
130
- try {
131
- const pageData = await pageLoaderRef.current(1);
132
- if (pageData) {
133
- updatePageImage(pageData, 1);
134
- } else {
135
- setError("Failed to load page 1");
136
- }
137
- } catch (err) {
138
- const message = err instanceof Error ? err.message : "Unable to load page 1";
139
- setError(message);
140
- onError?.(new Error(message));
141
- } finally {
142
- setInternalLoading(false);
143
- }
144
- }
145
- };
146
- loadInitialPage();
147
- }, [pageImages, currentPage, updatePageImage, onError]);
148
- const handlePageChange = useCallback(async (newPageNumber) => {
149
- if (!pageLoaderRef.current) {
150
- console.warn("pageLoader not provided - page navigation disabled");
151
- return;
152
- }
153
- const cachedUrl = pageImages.get(newPageNumber);
154
- if (cachedUrl) {
155
- setCurrentPage(newPageNumber);
156
- setImageUrl(cachedUrl);
157
- return;
158
- }
159
- setInternalLoading(true);
160
- setError(null);
161
- try {
162
- const pageData = await pageLoaderRef.current(newPageNumber);
163
- if (pageData) {
164
- updatePageImage(pageData, newPageNumber);
165
- } else {
166
- setError(`Failed to load page ${newPageNumber}`);
167
- }
168
- } catch (err) {
169
- const message = err instanceof Error ? err.message : `Unable to load page ${newPageNumber}`;
170
- setError(message);
171
- onError?.(new Error(message));
172
- } finally {
173
- setInternalLoading(false);
174
- }
175
- }, [pageImages, onError, updatePageImage]);
176
- const resolvedFileName = useMemo(
177
- () => fileName || sourceDescription,
178
- [fileName, sourceDescription]
179
- );
180
- const fileExtension = useMemo(
181
- () => getFileExtension(resolvedFileName || ""),
182
- [resolvedFileName]
183
- );
184
- const loadImage = useCallback(async (resetPage = false) => {
185
- if (!file && !url) {
186
- setImageUrl(null);
187
- if (resetPage) setCurrentPage(1);
188
- setError(null);
189
- return;
190
- }
191
- setIsLoading(true);
192
- setError(null);
193
- try {
194
- let imageDataUrl;
195
- if (file) {
196
- imageDataUrl = URL.createObjectURL(file);
197
- } else if (url) {
198
- imageDataUrl = url;
199
- } else {
200
- throw new Error("No file or URL provided");
201
- }
202
- setImageUrl(imageDataUrl);
203
- if (resetPage) {
204
- setCurrentPage(1);
205
- setFitMode("fit-page");
206
- setZoom(100);
207
- }
208
- onLoad?.();
209
- } catch (err) {
210
- const message = err instanceof Error ? err.message : "Unable to load image file";
211
- setError(message);
212
- setImageUrl(null);
213
- if (resetPage) {
214
- setCurrentPage(1);
215
- setFitMode("fit-width");
216
- setZoom(100);
217
- }
218
- onError?.(new Error(message));
219
- } finally {
220
- setIsLoading(false);
221
- }
222
- }, [file, url, onLoad, onError]);
223
- const [previousFileSource, setPreviousFileSource] = useState({});
224
- useEffect(() => {
225
- const currentFileSource = { file, url };
226
- const isNewFile = previousFileSource.file !== file || previousFileSource.url !== url;
227
- if (isNewFile) {
228
- setPreviousFileSource(currentFileSource);
229
- void loadImage(true);
230
- } else {
231
- void loadImage(false);
232
- }
233
- }, [file, url, loadImage, previousFileSource.file, previousFileSource.url]);
234
- useEffect(() => {
235
- return () => {
236
- pageImages.forEach((url2) => {
237
- URL.revokeObjectURL(url2);
238
- });
239
- if (imageUrl && file && !pageImages.has(currentPage)) {
240
- URL.revokeObjectURL(imageUrl);
241
- }
242
- };
243
- }, []);
244
- const hasImage = !!imageUrl;
245
- const hasMultiplePages = totalPages > 1;
246
- const MARGIN = 40;
247
- const MIN_ZOOM = 25;
248
- const MAX_ZOOM = 400;
249
- const ZOOM_LEVELS = [25, 50, 75, 100, 125, 150, 200, 300, 400];
250
- const calculateFitZoom = useCallback((mode) => {
251
- if (!imageSize || viewportWidth <= 0) return null;
252
- const availableWidth = viewportWidth - MARGIN;
253
- if (mode === "fit-width") {
254
- const calculatedZoom = Math.round(availableWidth / imageSize.width * 100);
255
- return Math.max(MIN_ZOOM, Math.min(MAX_ZOOM, calculatedZoom));
256
- }
257
- if (mode === "fit-page" && viewportHeight > 0) {
258
- const availableHeight = viewportHeight - MARGIN;
259
- const scaleW = availableWidth / imageSize.width;
260
- const scaleH = availableHeight / imageSize.height;
261
- const calculatedZoom = Math.round(Math.min(scaleW, scaleH) * 100);
262
- return Math.max(MIN_ZOOM, Math.min(MAX_ZOOM, calculatedZoom));
263
- }
264
- return null;
265
- }, [imageSize, viewportWidth, viewportHeight]);
266
- useEffect(() => {
267
- if (!hasImage || !imageSize) return;
268
- const newZoom = calculateFitZoom(fitMode);
269
- if (newZoom !== null) {
270
- setZoom(newZoom);
271
- }
272
- }, [currentPage, hasImage, imageSize, fitMode, calculateFitZoom]);
273
- useEffect(() => {
274
- if (typeof window === "undefined" || typeof ResizeObserver === "undefined") {
275
- return void 0;
276
- }
277
- if (!viewportRef.current) {
278
- return void 0;
279
- }
280
- const updateSize = () => {
281
- const bounds = viewportRef.current?.getBoundingClientRect();
282
- if (bounds) {
283
- setViewportWidth(bounds.width);
284
- setViewportHeight(bounds.height);
285
- }
286
- };
287
- updateSize();
288
- const observer = new ResizeObserver(updateSize);
289
- observer.observe(viewportRef.current);
290
- return () => {
291
- observer.disconnect();
292
- };
293
- }, []);
294
- const handleZoomIn = useCallback(() => {
295
- setFitMode("zoom");
296
- setZoom((value) => {
297
- const nextLevel = ZOOM_LEVELS.find((level) => level > value);
298
- return nextLevel || MAX_ZOOM;
299
- });
300
- }, []);
301
- const handleZoomOut = useCallback(() => {
302
- setFitMode("zoom");
303
- setZoom((value) => {
304
- const prevLevel = [...ZOOM_LEVELS].reverse().find((level) => level < value);
305
- return prevLevel || MIN_ZOOM;
306
- });
307
- }, []);
308
- const handleFitWidth = useCallback(() => {
309
- setFitMode("fit-width");
310
- const newZoom = calculateFitZoom("fit-width");
311
- if (newZoom !== null) {
312
- setZoom(newZoom);
313
- }
314
- }, [calculateFitZoom]);
315
- const handleFitPage = useCallback(() => {
316
- setFitMode("fit-page");
317
- const newZoom = calculateFitZoom("fit-page");
318
- if (newZoom !== null) {
319
- setZoom(newZoom);
320
- }
321
- }, [calculateFitZoom]);
322
- const handleFirstPage = useCallback(() => {
323
- handlePageChange(1);
324
- }, [handlePageChange]);
325
- const handleLastPage = useCallback(() => {
326
- handlePageChange(totalPages);
327
- }, [handlePageChange, totalPages]);
328
- const handlePreviousPage = useCallback(() => {
329
- const newPage = Math.max(currentPage - 1, 1);
330
- if (newPage !== currentPage) {
331
- handlePageChange(newPage);
332
- }
333
- }, [currentPage, handlePageChange]);
334
- const handleNextPage = useCallback(() => {
335
- const newPage = Math.min(currentPage + 1, totalPages);
336
- if (newPage !== currentPage) {
337
- handlePageChange(newPage);
338
- }
339
- }, [currentPage, totalPages, handlePageChange]);
340
- const handleToggleFullScreen = useCallback(() => {
341
- if (!isFullScreen && containerRef.current?.requestFullscreen) {
342
- containerRef.current.requestFullscreen();
343
- setIsFullScreen(true);
344
- } else if (isFullScreen && document.exitFullscreen) {
345
- document.exitFullscreen();
346
- setIsFullScreen(false);
347
- }
348
- }, [isFullScreen]);
349
- const toolbar = mergeToolbarConfig({ showDownload, showPrint, showMetadata, showProperties, onDownloadClick, onPrintClick, onMetadataClick, onPropertiesClick, toolbarActions });
350
- const displayScale = zoom;
351
- const handleImageLoad = useCallback((e) => {
352
- const img = e.currentTarget;
353
- setImageSize({ width: img.naturalWidth, height: img.naturalHeight });
354
- if (!hasImage) {
355
- onLoad?.();
356
- }
357
- }, [hasImage, onLoad]);
358
- const renderImage = () => {
359
- if (!imageUrl) {
360
- return /* @__PURE__ */ jsx(Typography, { variant: "body2", color: "text.secondary", children: "No image available." });
361
- }
362
- let imgStyle = {
363
- display: "block",
364
- borderRadius: "4px"
365
- };
366
- if (imageSize) {
367
- const zoomFactor = zoom / 100;
368
- const scaledWidth = imageSize.width * zoomFactor;
369
- const scaledHeight = imageSize.height * zoomFactor;
370
- imgStyle = {
371
- ...imgStyle,
372
- width: `${scaledWidth}px`,
373
- height: `${scaledHeight}px`,
374
- maxWidth: "none",
375
- maxHeight: "none"
376
- };
377
- }
378
- return /* @__PURE__ */ jsx(
379
- Box,
380
- {
381
- component: "img",
382
- ref: imgRef,
383
- src: imageUrl,
384
- alt: `${resolvedFileName} page ${currentPage}`,
385
- onLoad: handleImageLoad,
386
- onError: () => {
387
- setError("Failed to load image");
388
- onError?.(new Error("Failed to load image"));
389
- },
390
- sx: {
391
- ...imgStyle,
392
- boxShadow: 1,
393
- backgroundColor: "#fff",
394
- margin: "20px"
395
- }
396
- }
397
- );
398
- };
399
- return /* @__PURE__ */ jsx(
400
- Box,
401
- {
402
- ref: containerRef,
403
- className: `tiff-viewer ${className}`,
404
- sx: {
405
- width,
406
- height,
407
- display: "flex",
408
- flexDirection: "column",
409
- overflow: "hidden",
410
- ...style
411
- },
412
- ...props,
413
- children: /* @__PURE__ */ jsxs(Card, { sx: { height: "100%", width: "100%", display: "flex", flexDirection: "column", overflow: "hidden" }, elevation: 1, children: [
414
- /* @__PURE__ */ jsx(
415
- CardHeader,
416
- {
417
- avatar: /* @__PURE__ */ jsx(FileIcon_default, { ext: fileExtension, size: 32 }),
418
- title: /* @__PURE__ */ jsx(Typography, { variant: "subtitle1", fontWeight: 500, children: resolvedFileName }),
419
- sx: { pb: 1 }
420
- }
421
- ),
422
- /* @__PURE__ */ jsx(Box, { sx: { px: 2, pb: 1, display: "flex", justifyContent: "center" }, children: /* @__PURE__ */ jsxs(Stack, { direction: "row", spacing: 1, alignItems: "center", flexWrap: "wrap", gap: 1, children: [
423
- hasMultiplePages && /* @__PURE__ */ jsxs(Fragment, { children: [
424
- /* @__PURE__ */ jsx(
425
- IconButton,
426
- {
427
- size: "small",
428
- onClick: handleFirstPage,
429
- disabled: currentPage === 1,
430
- title: "First Page",
431
- "aria-label": "Go to first page",
432
- children: /* @__PURE__ */ jsx(FirstPageIcon, { fontSize: "small" })
433
- }
434
- ),
435
- /* @__PURE__ */ jsx(
436
- IconButton,
437
- {
438
- size: "small",
439
- onClick: handlePreviousPage,
440
- disabled: currentPage === 1,
441
- title: "Previous Page",
442
- "aria-label": "Go to previous page",
443
- children: /* @__PURE__ */ jsx(ChevronLeftIcon, { fontSize: "small" })
444
- }
445
- ),
446
- /* @__PURE__ */ jsxs(Typography, { variant: "body2", color: "text.secondary", sx: { minWidth: 100, textAlign: "center" }, children: [
447
- "Page ",
448
- currentPage,
449
- " of ",
450
- totalPages
451
- ] }),
452
- /* @__PURE__ */ jsx(
453
- IconButton,
454
- {
455
- size: "small",
456
- onClick: handleNextPage,
457
- disabled: currentPage === totalPages,
458
- title: "Next Page",
459
- "aria-label": "Go to next page",
460
- children: /* @__PURE__ */ jsx(ChevronRightIcon, { fontSize: "small" })
461
- }
462
- ),
463
- /* @__PURE__ */ jsx(
464
- IconButton,
465
- {
466
- size: "small",
467
- onClick: handleLastPage,
468
- disabled: currentPage === totalPages,
469
- title: "Last Page",
470
- "aria-label": "Go to last page",
471
- children: /* @__PURE__ */ jsx(LastPageIcon, { fontSize: "small" })
472
- }
473
- ),
474
- /* @__PURE__ */ jsx(Divider, { orientation: "vertical", flexItem: true, sx: { mx: 1 } })
475
- ] }),
476
- /* @__PURE__ */ jsx(
477
- IconButton,
478
- {
479
- size: "small",
480
- onClick: handleZoomOut,
481
- disabled: !hasImage || zoom <= 25,
482
- title: "Zoom Out",
483
- "aria-label": "Zoom out",
484
- children: /* @__PURE__ */ jsx(ZoomOutIcon, { fontSize: "small" })
485
- }
486
- ),
487
- /* @__PURE__ */ jsx(Typography, { variant: "body2", color: "text.secondary", sx: { minWidth: 64, textAlign: "center" }, children: hasImage ? `${displayScale}%` : "\u2014" }),
488
- /* @__PURE__ */ jsx(
489
- IconButton,
490
- {
491
- size: "small",
492
- onClick: handleZoomIn,
493
- disabled: !hasImage || zoom >= 400,
494
- title: "Zoom In",
495
- "aria-label": "Zoom in",
496
- children: /* @__PURE__ */ jsx(ZoomInIcon, { fontSize: "small" })
497
- }
498
- ),
499
- /* @__PURE__ */ jsx(
500
- IconButton,
501
- {
502
- size: "small",
503
- onClick: handleFitWidth,
504
- disabled: !hasImage,
505
- title: "Fit to Width",
506
- "aria-label": "Fit to width",
507
- color: fitMode === "fit-width" ? "primary" : "default",
508
- children: /* @__PURE__ */ jsx(AspectRatioIcon, { fontSize: "small" })
509
- }
510
- ),
511
- /* @__PURE__ */ jsx(
512
- IconButton,
513
- {
514
- size: "small",
515
- onClick: handleFitPage,
516
- disabled: !hasImage,
517
- title: "Fit to Page",
518
- "aria-label": "Fit to page",
519
- color: fitMode === "fit-page" ? "primary" : "default",
520
- children: /* @__PURE__ */ jsx(FitScreenIcon, { fontSize: "small" })
521
- }
522
- ),
523
- /* @__PURE__ */ jsx(Divider, { orientation: "vertical", flexItem: true, sx: { mx: 1 } }),
524
- !toolbar.isHidden("download") && /* @__PURE__ */ jsx(
525
- IconButton,
526
- {
527
- size: "small",
528
- onClick: toolbar.getHandler("download", onDownloadClick),
529
- disabled: toolbar.isDisabled("download"),
530
- title: toolbar.getLabel("download") || "Download",
531
- "aria-label": "Download TIFF",
532
- children: toolbar.getIcon("download") || /* @__PURE__ */ jsx(DownloadIcon, { fontSize: "small" })
533
- }
534
- ),
535
- !toolbar.isHidden("print") && /* @__PURE__ */ jsx(
536
- IconButton,
537
- {
538
- size: "small",
539
- onClick: toolbar.getHandler("print", onPrintClick),
540
- disabled: toolbar.isDisabled("print"),
541
- title: toolbar.getLabel("print") || "Print",
542
- "aria-label": "Print TIFF",
543
- children: toolbar.getIcon("print") || /* @__PURE__ */ jsx(PrintIcon, { fontSize: "small" })
544
- }
545
- ),
546
- !toolbar.isHidden("fullscreen") && /* @__PURE__ */ jsx(
547
- IconButton,
548
- {
549
- size: "small",
550
- onClick: toolbar.getHandler("fullscreen", handleToggleFullScreen),
551
- disabled: toolbar.isDisabled("fullscreen"),
552
- title: toolbar.getLabel("fullscreen") || "Fullscreen",
553
- "aria-label": "Toggle fullscreen",
554
- children: toolbar.getIcon("fullscreen") || /* @__PURE__ */ jsx(FullscreenIcon, { fontSize: "small" })
555
- }
556
- ),
557
- !toolbar.isHidden("metadata") && /* @__PURE__ */ jsx(
558
- IconButton,
559
- {
560
- size: "small",
561
- onClick: toolbar.getHandler("metadata", onMetadataClick),
562
- disabled: toolbar.isDisabled("metadata"),
563
- title: toolbar.getLabel("metadata") || "Document Metadata",
564
- "aria-label": "View document metadata",
565
- children: toolbar.getIcon("metadata") || /* @__PURE__ */ jsx(DescriptionIcon, { fontSize: "small" })
566
- }
567
- ),
568
- !toolbar.isHidden("properties") && /* @__PURE__ */ jsx(
569
- IconButton,
570
- {
571
- size: "small",
572
- onClick: toolbar.getHandler("properties", onPropertiesClick),
573
- disabled: toolbar.isDisabled("properties"),
574
- title: toolbar.getLabel("properties") || "Document Properties",
575
- "aria-label": "View document properties",
576
- children: toolbar.getIcon("properties") || /* @__PURE__ */ jsx(InfoIcon, { fontSize: "small" })
577
- }
578
- )
579
- ] }) }),
580
- (isLoading || internalLoading) && /* @__PURE__ */ jsx(LinearProgress, { sx: { mx: 3, mb: 1 } }),
581
- error && /* @__PURE__ */ jsx(Typography, { color: "error", variant: "body2", sx: { px: 3, pb: 1 }, children: error }),
582
- /* @__PURE__ */ jsx(Divider, {}),
583
- /* @__PURE__ */ jsx(
584
- CardContent,
585
- {
586
- sx: {
587
- flexGrow: 1,
588
- flexShrink: 1,
589
- minHeight: 0,
590
- p: 0,
591
- overflow: "hidden",
592
- backgroundColor: "#f6f8fa",
593
- position: "relative"
594
- },
595
- children: /* @__PURE__ */ jsx(
596
- Box,
597
- {
598
- ref: viewportRef,
599
- sx: {
600
- position: "absolute",
601
- top: 0,
602
- left: 0,
603
- right: 0,
604
- bottom: 0,
605
- overflow: "auto"
606
- },
607
- children: /* @__PURE__ */ jsx(
608
- Box,
609
- {
610
- sx: {
611
- minWidth: "100%",
612
- minHeight: "100%",
613
- display: "flex",
614
- alignItems: "center",
615
- justifyContent: "center"
616
- },
617
- children: renderImage()
618
- }
619
- )
620
- }
621
- )
622
- }
623
- )
624
- ] })
625
- }
626
- );
627
- };
628
- var TIFFViewer = (props) => {
629
- const sourceDescription = useMemo(
630
- () => resolveDocumentName(props.file, props.fileName, props.url),
631
- [props.file, props.fileName, props.url]
632
- );
633
- return /* @__PURE__ */ jsx(TIFFViewerContent, { ...props, sourceDescription });
634
- };
635
-
636
- export {
637
- TIFFViewer
638
- };
639
- //# sourceMappingURL=chunk-P5FH7LK7.mjs.map