@cannyminds/dms-file-viewers 0.2.0 → 0.4.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 (81) hide show
  1. package/dist/{chunk-FZYMVHF6.mjs → chunk-4DJJINTB.mjs} +54 -55
  2. package/dist/chunk-4DJJINTB.mjs.map +1 -0
  3. package/dist/chunk-677DWENS.mjs +133 -0
  4. package/dist/chunk-677DWENS.mjs.map +1 -0
  5. package/dist/chunk-77UARJVQ.js +133 -0
  6. package/dist/chunk-77UARJVQ.js.map +1 -0
  7. package/dist/{chunk-LKBM4O47.mjs → chunk-7BLEPGZ4.mjs} +67 -61
  8. package/dist/chunk-7BLEPGZ4.mjs.map +1 -0
  9. package/dist/{chunk-QRYIHDRT.mjs → chunk-BHMFZTZ7.mjs} +54 -55
  10. package/dist/chunk-BHMFZTZ7.mjs.map +1 -0
  11. package/dist/{chunk-XQBXRMB7.mjs → chunk-BONT4K3R.mjs} +14 -8
  12. package/dist/chunk-BONT4K3R.mjs.map +1 -0
  13. package/dist/{chunk-3STHCDAC.js → chunk-DDT3GC3C.js} +425 -164
  14. package/dist/chunk-DDT3GC3C.js.map +1 -0
  15. package/dist/{chunk-EMP7RZM2.js → chunk-DOOYIHGW.js} +52 -53
  16. package/dist/chunk-DOOYIHGW.js.map +1 -0
  17. package/dist/{chunk-73ZIFR3P.mjs → chunk-J2YW5DHC.mjs} +457 -196
  18. package/dist/chunk-J2YW5DHC.mjs.map +1 -0
  19. package/dist/{chunk-BNHQYEZ7.js → chunk-SBEFC7HP.js} +203 -158
  20. package/dist/chunk-SBEFC7HP.js.map +1 -0
  21. package/dist/{chunk-4RL77HKO.js → chunk-SNEIVT4R.js} +52 -53
  22. package/dist/chunk-SNEIVT4R.js.map +1 -0
  23. package/dist/{chunk-7JTIG6OU.js → chunk-WP55NYFS.js} +67 -61
  24. package/dist/chunk-WP55NYFS.js.map +1 -0
  25. package/dist/{chunk-NOLXOOIP.mjs → chunk-YHMHDPLQ.mjs} +200 -155
  26. package/dist/chunk-YHMHDPLQ.mjs.map +1 -0
  27. package/dist/{chunk-GNWU6XHH.js → chunk-Z3IUTTJQ.js} +15 -9
  28. package/dist/{chunk-GNWU6XHH.js.map → chunk-Z3IUTTJQ.js.map} +1 -1
  29. package/dist/components/viewers/AudioViewer.d.mts +1 -1
  30. package/dist/components/viewers/AudioViewer.d.ts +1 -1
  31. package/dist/components/viewers/AudioViewer.js +2 -2
  32. package/dist/components/viewers/AudioViewer.mjs +1 -1
  33. package/dist/components/viewers/DefaultViewer.d.mts +1 -1
  34. package/dist/components/viewers/DefaultViewer.d.ts +1 -1
  35. package/dist/components/viewers/DefaultViewer.js +3 -2
  36. package/dist/components/viewers/DefaultViewer.js.map +1 -1
  37. package/dist/components/viewers/DefaultViewer.mjs +2 -1
  38. package/dist/components/viewers/ImageViewer.d.mts +1 -1
  39. package/dist/components/viewers/ImageViewer.d.ts +1 -1
  40. package/dist/components/viewers/ImageViewer.js +3 -3
  41. package/dist/components/viewers/ImageViewer.mjs +2 -2
  42. package/dist/components/viewers/PDFViewer.d.mts +1 -1
  43. package/dist/components/viewers/PDFViewer.d.ts +1 -1
  44. package/dist/components/viewers/PDFViewer.js +2 -2
  45. package/dist/components/viewers/PDFViewer.mjs +1 -1
  46. package/dist/components/viewers/TIFFViewer.d.mts +1 -1
  47. package/dist/components/viewers/TIFFViewer.d.ts +1 -1
  48. package/dist/components/viewers/TIFFViewer.js +2 -2
  49. package/dist/components/viewers/TIFFViewer.mjs +1 -1
  50. package/dist/components/viewers/TextViewer.d.mts +1 -1
  51. package/dist/components/viewers/TextViewer.d.ts +1 -1
  52. package/dist/components/viewers/TextViewer.js +2 -2
  53. package/dist/components/viewers/TextViewer.mjs +1 -1
  54. package/dist/components/viewers/VideoViewer.d.mts +1 -1
  55. package/dist/components/viewers/VideoViewer.d.ts +1 -1
  56. package/dist/components/viewers/VideoViewer.js +2 -2
  57. package/dist/components/viewers/VideoViewer.mjs +1 -1
  58. package/dist/index.d.mts +2 -2
  59. package/dist/index.d.ts +2 -2
  60. package/dist/index.js +30 -19
  61. package/dist/index.js.map +1 -1
  62. package/dist/index.mjs +29 -18
  63. package/dist/index.mjs.map +1 -1
  64. package/dist/{types-CquKzJLE.d.mts → types-C6IEfcTM.d.mts} +13 -1
  65. package/dist/{types-CquKzJLE.d.ts → types-C6IEfcTM.d.ts} +13 -1
  66. package/package.json +1 -1
  67. package/dist/chunk-3STHCDAC.js.map +0 -1
  68. package/dist/chunk-4RL77HKO.js.map +0 -1
  69. package/dist/chunk-73ZIFR3P.mjs.map +0 -1
  70. package/dist/chunk-7JTIG6OU.js.map +0 -1
  71. package/dist/chunk-BNHQYEZ7.js.map +0 -1
  72. package/dist/chunk-EMP7RZM2.js.map +0 -1
  73. package/dist/chunk-FZYMVHF6.mjs.map +0 -1
  74. package/dist/chunk-LKBM4O47.mjs.map +0 -1
  75. package/dist/chunk-NOLXOOIP.mjs.map +0 -1
  76. package/dist/chunk-QLJKOQTP.mjs +0 -78
  77. package/dist/chunk-QLJKOQTP.mjs.map +0 -1
  78. package/dist/chunk-QRYIHDRT.mjs.map +0 -1
  79. package/dist/chunk-XQBXRMB7.mjs.map +0 -1
  80. package/dist/chunk-Z7FUO5RX.js +0 -78
  81. package/dist/chunk-Z7FUO5RX.js.map +0 -1
@@ -24,7 +24,8 @@ var _react = require('react');
24
24
 
25
25
  var _material = require('@mui/material');
26
26
  var _Download = require('@mui/icons-material/Download'); var _Download2 = _interopRequireDefault(_Download);
27
- var _reactwindow = require('react-window');
27
+ var _Info = require('@mui/icons-material/Info'); var _Info2 = _interopRequireDefault(_Info);
28
+ var _Description = require('@mui/icons-material/Description'); var _Description2 = _interopRequireDefault(_Description);
28
29
  var _jsxruntime = require('react/jsx-runtime');
29
30
  var LINE_HEIGHT = 24;
30
31
  var TextViewer = ({
@@ -38,21 +39,26 @@ var TextViewer = ({
38
39
  onLoad,
39
40
  onError,
40
41
  onDownloadClick,
41
- // Filter out props that shouldn't be passed to DOM
42
- mimeType: _mimeType,
43
- fileSize: _fileSize,
44
- showPageCount: _showPageCount,
45
- showPageNavigation: _showPageNavigation,
46
- showZoomControls: _showZoomControls,
47
- showDownload: _showDownload,
48
- showPrint: _showPrint,
49
- showSearch: _showSearch,
50
- showMetadata: _showMetadata,
51
- showProperties: _showProperties,
52
- onMetadataClick: _onMetadataClick,
53
- onPropertiesClick: _onPropertiesClick,
54
- onPrintClick: _onPrintClick,
55
- customRegistry: _customRegistry,
42
+ onMetadataClick,
43
+ onPropertiesClick,
44
+ showMetadata = true,
45
+ showProperties = true,
46
+ // Extract props that shouldn't be passed to DOM elements
47
+ mimeType,
48
+ fileSize,
49
+ showPageCount,
50
+ showPageNavigation,
51
+ showZoomControls,
52
+ showDownload,
53
+ showPrint,
54
+ showSearch,
55
+ onPrintClick,
56
+ customRegistry,
57
+ initialSearchText,
58
+ initialSearchPages,
59
+ autoOpenSearch,
60
+ autoExecuteSearch,
61
+ onSearchComplete,
56
62
  ...props
57
63
  }) => {
58
64
  const [content, setContent] = _react.useState.call(void 0, "");
@@ -103,33 +109,6 @@ var TextViewer = ({
103
109
  _react.useEffect.call(void 0, () => {
104
110
  void loadText();
105
111
  }, [loadText]);
106
- const handleDownload = _react.useCallback.call(void 0, () => {
107
- if (!content) return;
108
- const blob = new Blob([content], { type: "text/plain" });
109
- const url2 = URL.createObjectURL(blob);
110
- const link = document.createElement("a");
111
- link.href = url2;
112
- link.download = resolvedFileName || "document.txt";
113
- document.body.appendChild(link);
114
- link.click();
115
- document.body.removeChild(link);
116
- URL.revokeObjectURL(url2);
117
- }, [content, resolvedFileName]);
118
- const Row = _react.useCallback.call(void 0, ({ index, style: rowStyle }) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
119
- _material.Box,
120
- {
121
- style: rowStyle,
122
- sx: {
123
- px: 2,
124
- display: "flex",
125
- alignItems: "center",
126
- whiteSpace: "pre",
127
- fontFamily: "monospace",
128
- fontSize: "0.85rem"
129
- },
130
- children: lines[index] || "\xA0"
131
- }
132
- ), [lines]);
133
112
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
134
113
  _material.Box,
135
114
  {
@@ -142,30 +121,57 @@ var TextViewer = ({
142
121
  {
143
122
  avatar: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkRE4XRGSVjs.FileIcon_default, { ext: fileExtension, size: 32 }),
144
123
  title: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _material.Typography, { variant: "subtitle1", fontWeight: 500, children: resolvedFileName }),
145
- action: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _material.Tooltip, { title: "Download", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
146
- _material.IconButton,
147
- {
148
- size: "small",
149
- onClick: onDownloadClick,
150
- children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _Download2.default, {})
151
- }
152
- ) }),
124
+ action: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _material.Stack, { direction: "row", spacing: 1, children: [
125
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _material.Tooltip, { title: "Download", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
126
+ _material.IconButton,
127
+ {
128
+ size: "small",
129
+ onClick: onDownloadClick,
130
+ "aria-label": "Download text file",
131
+ children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _Download2.default, {})
132
+ }
133
+ ) }),
134
+ showMetadata && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _material.Tooltip, { title: "Document Metadata", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
135
+ _material.IconButton,
136
+ {
137
+ size: "small",
138
+ onClick: onMetadataClick,
139
+ "aria-label": "View document metadata",
140
+ children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _Info2.default, {})
141
+ }
142
+ ) }),
143
+ showProperties && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _material.Tooltip, { title: "Document Properties", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
144
+ _material.IconButton,
145
+ {
146
+ size: "small",
147
+ onClick: onPropertiesClick,
148
+ "aria-label": "View document properties",
149
+ children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _Description2.default, {})
150
+ }
151
+ ) })
152
+ ] }),
153
153
  sx: { pb: 1 }
154
154
  }
155
155
  ),
156
156
  isLoading && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _material.LinearProgress, { sx: { mx: 3, mb: 1 } }),
157
157
  error && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _material.Typography, { color: "error", variant: "body2", sx: { px: 3, pb: 1 }, children: error }),
158
158
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _material.Divider, {}),
159
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _material.CardContent, { sx: { flexGrow: 1, minHeight: 0, display: "flex", flexDirection: "column", p: 0 }, children: content ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _material.Stack, { sx: { flex: 1, position: "relative" }, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
160
- _reactwindow.FixedSizeList,
159
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _material.CardContent, { sx: { flexGrow: 1, minHeight: 0, p: 0, overflow: "auto" }, children: content ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _material.Box, { sx: {
160
+ fontFamily: "monospace",
161
+ fontSize: "0.85rem",
162
+ p: 2,
163
+ whiteSpace: "pre"
164
+ }, children: lines.map((line, index) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
165
+ _material.Box,
161
166
  {
162
- height: typeof height === "number" ? height - 140 : 520,
163
- itemCount: lines.length,
164
- itemSize: LINE_HEIGHT,
165
- width: "100%",
166
- children: Row
167
- }
168
- ) }) : /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _material.Box, { sx: { flex: 1, display: "flex", alignItems: "center", justifyContent: "center", p: 4 }, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _material.Typography, { variant: "body2", color: "text.secondary", children: "No text content available." }) }) })
167
+ sx: {
168
+ minHeight: LINE_HEIGHT,
169
+ lineHeight: `${LINE_HEIGHT}px`
170
+ },
171
+ children: line || "\xA0"
172
+ },
173
+ index
174
+ )) }) : /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _material.Box, { sx: { display: "flex", alignItems: "center", justifyContent: "center", p: 4, minHeight: 200 }, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _material.Typography, { variant: "body2", color: "text.secondary", children: "No text content available." }) }) })
169
175
  ] })
170
176
  }
171
177
  );
@@ -174,4 +180,4 @@ var TextViewer = ({
174
180
 
175
181
 
176
182
  exports.TextViewer = TextViewer;
177
- //# sourceMappingURL=chunk-7JTIG6OU.js.map
183
+ //# sourceMappingURL=chunk-WP55NYFS.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["d:\\Projects\\DMS-File-Viewers\\packages\\lib\\dist\\chunk-WP55NYFS.js"],"names":[],"mappings":"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","file":"D:\\Projects\\DMS-File-Viewers\\packages\\lib\\dist\\chunk-WP55NYFS.js","sourcesContent":[null]}
@@ -14,24 +14,28 @@ import {
14
14
  } from "react";
15
15
  import {
16
16
  Box,
17
- Button,
18
- ButtonGroup,
19
17
  Card,
20
- CardActions,
21
18
  CardContent,
22
19
  CardHeader,
23
20
  Divider,
24
21
  LinearProgress,
25
- MenuItem,
26
- Select,
27
22
  Stack,
28
23
  Typography,
29
- IconButton,
30
- Tooltip
24
+ IconButton
31
25
  } from "@mui/material";
32
26
  import DownloadIcon from "@mui/icons-material/Download";
27
+ import FirstPageIcon from "@mui/icons-material/FirstPage";
28
+ import LastPageIcon from "@mui/icons-material/LastPage";
29
+ import ChevronLeftIcon from "@mui/icons-material/ChevronLeft";
30
+ import ChevronRightIcon from "@mui/icons-material/ChevronRight";
31
+ import ZoomInIcon from "@mui/icons-material/ZoomIn";
32
+ import ZoomOutIcon from "@mui/icons-material/ZoomOut";
33
+ import FitScreenIcon from "@mui/icons-material/FitScreen";
34
+ import AspectRatioIcon from "@mui/icons-material/AspectRatio";
35
+ import InfoIcon from "@mui/icons-material/Info";
36
+ import DescriptionIcon from "@mui/icons-material/Description";
33
37
  import * as UTIF from "utif";
34
- import { jsx, jsxs } from "react/jsx-runtime";
38
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
35
39
  var decodeTiff = (buffer) => {
36
40
  if (typeof window === "undefined") {
37
41
  return [];
@@ -89,21 +93,18 @@ var TIFFViewerContent = ({
89
93
  onLoad,
90
94
  onError,
91
95
  onDownloadClick,
92
- // Filter out props that shouldn't be passed to DOM
93
- mimeType: _mimeType,
94
- fileSize: _fileSize,
95
- showPageCount: _showPageCount,
96
- showPageNavigation: _showPageNavigation,
97
- showZoomControls: _showZoomControls,
98
- showDownload: _showDownload,
99
- showPrint: _showPrint,
100
- showSearch: _showSearch,
101
- showMetadata: _showMetadata,
102
- showProperties: _showProperties,
103
- onMetadataClick: _onMetadataClick,
104
- onPropertiesClick: _onPropertiesClick,
105
- onPrintClick: _onPrintClick,
106
- customRegistry: _customRegistry,
96
+ onMetadataClick,
97
+ onPropertiesClick,
98
+ showMetadata = true,
99
+ showProperties = true,
100
+ // Extract props that shouldn't be passed to DOM elements
101
+ mimeType,
102
+ fileSize,
103
+ initialSearchText,
104
+ initialSearchPages,
105
+ autoOpenSearch,
106
+ autoExecuteSearch,
107
+ onSearchComplete,
107
108
  ...props
108
109
  }) => {
109
110
  const [frames, setFrames] = useState([]);
@@ -171,35 +172,6 @@ var TIFFViewerContent = ({
171
172
  useEffect(() => {
172
173
  void loadTiff();
173
174
  }, [loadTiff]);
174
- const handleDownload = useCallback(async () => {
175
- if (!file && !url) return;
176
- try {
177
- let blob;
178
- let filename = resolvedFileName || "document.tiff";
179
- if (file) {
180
- blob = file;
181
- filename = file.name;
182
- } else if (url) {
183
- const response = await fetch(url);
184
- if (!response.ok) {
185
- throw new Error(`Failed to fetch TIFF (${response.status})`);
186
- }
187
- blob = await response.blob();
188
- } else {
189
- return;
190
- }
191
- const downloadUrl = URL.createObjectURL(blob);
192
- const link = document.createElement("a");
193
- link.href = downloadUrl;
194
- link.download = filename;
195
- document.body.appendChild(link);
196
- link.click();
197
- document.body.removeChild(link);
198
- URL.revokeObjectURL(downloadUrl);
199
- } catch (err) {
200
- onError?.(err instanceof Error ? err : new Error("Download failed"));
201
- }
202
- }, [file, url, resolvedFileName, onError]);
203
175
  const currentFrame = frames[currentIndex];
204
176
  const hasFrames = frames.length > 0;
205
177
  const hasMultipleFrames = frames.length > 1;
@@ -230,22 +202,34 @@ var TIFFViewerContent = ({
230
202
  observer.disconnect();
231
203
  };
232
204
  }, []);
233
- const handleZoomIn = () => {
205
+ const handleZoomIn = useCallback(() => {
234
206
  setFitMode("zoom");
235
207
  setZoom((value) => Math.min(Math.round((value + 0.25) * 100) / 100, 5));
236
- };
237
- const handleZoomOut = () => {
208
+ }, []);
209
+ const handleZoomOut = useCallback(() => {
238
210
  setFitMode("zoom");
239
211
  setZoom((value) => Math.max(Math.round((value - 0.25) * 100) / 100, 0.25));
240
- };
241
- const handleFitWidth = () => {
212
+ }, []);
213
+ const handleFitWidth = useCallback(() => {
242
214
  setFitMode("fit-width");
243
215
  setZoom(1);
244
- };
245
- const handleFitPage = () => {
216
+ }, []);
217
+ const handleFitPage = useCallback(() => {
246
218
  setFitMode("fit-page");
247
219
  setZoom(1);
248
- };
220
+ }, []);
221
+ const handleFirstPage = useCallback(() => {
222
+ setCurrentIndex(0);
223
+ }, []);
224
+ const handleLastPage = useCallback(() => {
225
+ setCurrentIndex(frames.length - 1);
226
+ }, [frames.length]);
227
+ const handlePreviousPage = useCallback(() => {
228
+ setCurrentIndex((index) => Math.max(index - 1, 0));
229
+ }, []);
230
+ const handleNextPage = useCallback(() => {
231
+ setCurrentIndex((index) => Math.min(index + 1, frames.length - 1));
232
+ }, [frames.length]);
249
233
  const effectiveScale = useMemo(() => {
250
234
  if (!currentFrame) {
251
235
  return 1;
@@ -304,73 +288,157 @@ var TIFFViewerContent = ({
304
288
  Box,
305
289
  {
306
290
  className: `tiff-viewer ${className}`,
307
- sx: { width, height, ...style },
291
+ sx: {
292
+ width,
293
+ height,
294
+ display: "flex",
295
+ flexDirection: "column",
296
+ overflow: "hidden",
297
+ ...style
298
+ },
308
299
  ...props,
309
- children: /* @__PURE__ */ jsxs(Card, { sx: { height: "100%", display: "flex", flexDirection: "column" }, elevation: 1, children: [
300
+ children: /* @__PURE__ */ jsxs(Card, { sx: { height: "100%", width: "100%", display: "flex", flexDirection: "column", overflow: "hidden" }, elevation: 1, children: [
310
301
  /* @__PURE__ */ jsx(
311
302
  CardHeader,
312
303
  {
313
304
  avatar: /* @__PURE__ */ jsx(FileIcon_default, { ext: fileExtension, size: 32 }),
314
- title: /* @__PURE__ */ jsxs(Typography, { variant: "subtitle1", fontWeight: 500, children: [
315
- resolvedFileName,
316
- frames.length > 0 && /* @__PURE__ */ jsxs(Typography, { component: "span", variant: "body2", color: "text.secondary", sx: { ml: 1 }, children: [
317
- "\u2022 Page ",
318
- currentIndex + 1,
319
- " of ",
320
- frames.length
321
- ] })
322
- ] }),
323
- action: /* @__PURE__ */ jsxs(Stack, { direction: "row", spacing: 1, alignItems: "center", children: [
324
- /* @__PURE__ */ jsxs(ButtonGroup, { variant: "outlined", size: "small", disabled: !hasFrames, children: [
325
- /* @__PURE__ */ jsx(Button, { onClick: handleZoomOut, disabled: !hasFrames || zoom <= 0.25, children: "-" }),
326
- /* @__PURE__ */ jsx(Button, { onClick: handleZoomIn, disabled: !hasFrames || zoom >= 5, children: "+" })
327
- ] }),
328
- /* @__PURE__ */ jsx(
329
- Button,
330
- {
331
- variant: fitMode === "fit-width" ? "contained" : "outlined",
332
- size: "small",
333
- onClick: handleFitWidth,
334
- disabled: !hasFrames,
335
- children: "Fit Width"
336
- }
337
- ),
338
- /* @__PURE__ */ jsx(
339
- Button,
340
- {
341
- variant: fitMode === "fit-page" ? "contained" : "outlined",
342
- size: "small",
343
- onClick: handleFitPage,
344
- disabled: !hasFrames,
345
- children: "Fit Page"
346
- }
347
- ),
348
- /* @__PURE__ */ jsx(Typography, { variant: "body2", color: "text.secondary", sx: { minWidth: 64, textAlign: "center" }, children: hasFrames ? `${displayScale}%` : "\u2014" }),
349
- /* @__PURE__ */ jsx(Tooltip, { title: "Download", children: /* @__PURE__ */ jsx(
350
- IconButton,
351
- {
352
- size: "small",
353
- onClick: onDownloadClick,
354
- children: /* @__PURE__ */ jsx(DownloadIcon, {})
355
- }
356
- ) }),
357
- hasMultipleFrames && /* @__PURE__ */ jsx(
358
- Select,
359
- {
360
- size: "small",
361
- value: String(currentIndex),
362
- onChange: (event) => setCurrentIndex(Number(event.target.value)),
363
- sx: { minWidth: 120 },
364
- children: frames.map((_, index) => /* @__PURE__ */ jsxs(MenuItem, { value: String(index), children: [
365
- "Page ",
366
- index + 1
367
- ] }, index))
368
- }
369
- )
370
- ] }),
305
+ title: /* @__PURE__ */ jsx(Typography, { variant: "subtitle1", fontWeight: 500, children: resolvedFileName }),
371
306
  sx: { pb: 1 }
372
307
  }
373
308
  ),
309
+ /* @__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: [
310
+ hasMultipleFrames && /* @__PURE__ */ jsxs(Fragment, { children: [
311
+ /* @__PURE__ */ jsx(
312
+ IconButton,
313
+ {
314
+ size: "small",
315
+ onClick: handleFirstPage,
316
+ disabled: currentIndex === 0,
317
+ title: "First Page",
318
+ "aria-label": "Go to first page",
319
+ children: /* @__PURE__ */ jsx(FirstPageIcon, { fontSize: "small" })
320
+ }
321
+ ),
322
+ /* @__PURE__ */ jsx(
323
+ IconButton,
324
+ {
325
+ size: "small",
326
+ onClick: handlePreviousPage,
327
+ disabled: currentIndex === 0,
328
+ title: "Previous Page",
329
+ "aria-label": "Go to previous page",
330
+ children: /* @__PURE__ */ jsx(ChevronLeftIcon, { fontSize: "small" })
331
+ }
332
+ ),
333
+ /* @__PURE__ */ jsxs(Typography, { variant: "body2", color: "text.secondary", sx: { minWidth: 100, textAlign: "center" }, children: [
334
+ "Page ",
335
+ currentIndex + 1,
336
+ " of ",
337
+ frames.length
338
+ ] }),
339
+ /* @__PURE__ */ jsx(
340
+ IconButton,
341
+ {
342
+ size: "small",
343
+ onClick: handleNextPage,
344
+ disabled: currentIndex === frames.length - 1,
345
+ title: "Next Page",
346
+ "aria-label": "Go to next page",
347
+ children: /* @__PURE__ */ jsx(ChevronRightIcon, { fontSize: "small" })
348
+ }
349
+ ),
350
+ /* @__PURE__ */ jsx(
351
+ IconButton,
352
+ {
353
+ size: "small",
354
+ onClick: handleLastPage,
355
+ disabled: currentIndex === frames.length - 1,
356
+ title: "Last Page",
357
+ "aria-label": "Go to last page",
358
+ children: /* @__PURE__ */ jsx(LastPageIcon, { fontSize: "small" })
359
+ }
360
+ ),
361
+ /* @__PURE__ */ jsx(Divider, { orientation: "vertical", flexItem: true, sx: { mx: 1 } })
362
+ ] }),
363
+ /* @__PURE__ */ jsx(
364
+ IconButton,
365
+ {
366
+ size: "small",
367
+ onClick: handleZoomOut,
368
+ disabled: !hasFrames || zoom <= 0.25,
369
+ title: "Zoom Out",
370
+ "aria-label": "Zoom out",
371
+ children: /* @__PURE__ */ jsx(ZoomOutIcon, { fontSize: "small" })
372
+ }
373
+ ),
374
+ /* @__PURE__ */ jsx(Typography, { variant: "body2", color: "text.secondary", sx: { minWidth: 64, textAlign: "center" }, children: hasFrames ? `${displayScale}%` : "\u2014" }),
375
+ /* @__PURE__ */ jsx(
376
+ IconButton,
377
+ {
378
+ size: "small",
379
+ onClick: handleZoomIn,
380
+ disabled: !hasFrames || zoom >= 5,
381
+ title: "Zoom In",
382
+ "aria-label": "Zoom in",
383
+ children: /* @__PURE__ */ jsx(ZoomInIcon, { fontSize: "small" })
384
+ }
385
+ ),
386
+ /* @__PURE__ */ jsx(
387
+ IconButton,
388
+ {
389
+ size: "small",
390
+ onClick: handleFitWidth,
391
+ disabled: !hasFrames,
392
+ title: "Fit to Width",
393
+ "aria-label": "Fit to width",
394
+ color: fitMode === "fit-width" ? "primary" : "default",
395
+ children: /* @__PURE__ */ jsx(AspectRatioIcon, { fontSize: "small" })
396
+ }
397
+ ),
398
+ /* @__PURE__ */ jsx(
399
+ IconButton,
400
+ {
401
+ size: "small",
402
+ onClick: handleFitPage,
403
+ disabled: !hasFrames,
404
+ title: "Fit to Page",
405
+ "aria-label": "Fit to page",
406
+ color: fitMode === "fit-page" ? "primary" : "default",
407
+ children: /* @__PURE__ */ jsx(FitScreenIcon, { fontSize: "small" })
408
+ }
409
+ ),
410
+ /* @__PURE__ */ jsx(Divider, { orientation: "vertical", flexItem: true, sx: { mx: 1 } }),
411
+ /* @__PURE__ */ jsx(
412
+ IconButton,
413
+ {
414
+ size: "small",
415
+ onClick: onDownloadClick,
416
+ title: "Download",
417
+ "aria-label": "Download TIFF",
418
+ children: /* @__PURE__ */ jsx(DownloadIcon, { fontSize: "small" })
419
+ }
420
+ ),
421
+ showMetadata && /* @__PURE__ */ jsx(
422
+ IconButton,
423
+ {
424
+ size: "small",
425
+ onClick: onMetadataClick,
426
+ title: "Document Metadata",
427
+ "aria-label": "View document metadata",
428
+ children: /* @__PURE__ */ jsx(InfoIcon, { fontSize: "small" })
429
+ }
430
+ ),
431
+ showProperties && /* @__PURE__ */ jsx(
432
+ IconButton,
433
+ {
434
+ size: "small",
435
+ onClick: onPropertiesClick,
436
+ title: "Document Properties",
437
+ "aria-label": "View document properties",
438
+ children: /* @__PURE__ */ jsx(DescriptionIcon, { fontSize: "small" })
439
+ }
440
+ )
441
+ ] }) }),
374
442
  isLoading && /* @__PURE__ */ jsx(LinearProgress, { sx: { mx: 3, mb: 1 } }),
375
443
  error && /* @__PURE__ */ jsx(Typography, { color: "error", variant: "body2", sx: { px: 3, pb: 1 }, children: error }),
376
444
  /* @__PURE__ */ jsx(Divider, {}),
@@ -379,57 +447,34 @@ var TIFFViewerContent = ({
379
447
  {
380
448
  sx: {
381
449
  flexGrow: 1,
450
+ flexShrink: 1,
382
451
  minHeight: 0,
383
- display: "flex",
384
- flexDirection: "column",
385
- p: 0
452
+ p: 0,
453
+ overflow: "auto",
454
+ backgroundColor: "#f6f8fa",
455
+ position: "relative"
386
456
  },
387
457
  children: /* @__PURE__ */ jsx(
388
458
  Box,
389
459
  {
390
460
  ref: viewportRef,
391
461
  sx: {
392
- flex: 1,
393
- overflow: "auto",
462
+ position: "absolute",
463
+ top: 0,
464
+ left: 0,
465
+ right: 0,
466
+ bottom: 0,
394
467
  display: "flex",
395
468
  alignItems: "center",
396
469
  justifyContent: "center",
397
470
  p: 3,
398
- backgroundColor: "#f6f8fa"
471
+ overflow: "auto"
399
472
  },
400
473
  children: renderImage()
401
474
  }
402
475
  )
403
476
  }
404
- ),
405
- hasMultipleFrames && /* @__PURE__ */ jsx(CardActions, { sx: { justifyContent: "center", px: 3, py: 2 }, children: /* @__PURE__ */ jsxs(Stack, { direction: "row", spacing: 1, alignItems: "center", children: [
406
- /* @__PURE__ */ jsx(
407
- Button,
408
- {
409
- variant: "outlined",
410
- size: "small",
411
- onClick: () => setCurrentIndex((index) => Math.max(index - 1, 0)),
412
- disabled: currentIndex === 0,
413
- children: "Previous"
414
- }
415
- ),
416
- /* @__PURE__ */ jsxs(Typography, { variant: "body2", color: "text.secondary", children: [
417
- "Page ",
418
- currentIndex + 1,
419
- " of ",
420
- frames.length
421
- ] }),
422
- /* @__PURE__ */ jsx(
423
- Button,
424
- {
425
- variant: "outlined",
426
- size: "small",
427
- onClick: () => setCurrentIndex((index) => Math.min(index + 1, frames.length - 1)),
428
- disabled: currentIndex === frames.length - 1,
429
- children: "Next"
430
- }
431
- )
432
- ] }) })
477
+ )
433
478
  ] })
434
479
  }
435
480
  );
@@ -445,4 +490,4 @@ var TIFFViewer = (props) => {
445
490
  export {
446
491
  TIFFViewer
447
492
  };
448
- //# sourceMappingURL=chunk-NOLXOOIP.mjs.map
493
+ //# sourceMappingURL=chunk-YHMHDPLQ.mjs.map