@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
|
@@ -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
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
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: {
|
|
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__ */
|
|
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
|
-
|
|
384
|
-
|
|
385
|
-
|
|
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
|
-
|
|
393
|
-
|
|
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
|
-
|
|
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-
|
|
493
|
+
//# sourceMappingURL=chunk-YHMHDPLQ.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
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 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 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 InfoIcon from '@mui/icons-material/Info';\r\nimport DescriptionIcon from '@mui/icons-material/Description';\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 onMetadataClick,\r\n onPropertiesClick,\r\n showMetadata = true,\r\n showProperties = true,\r\n // Extract props that shouldn't be passed to DOM elements\r\n mimeType,\r\n fileSize,\r\n initialSearchText,\r\n initialSearchPages,\r\n autoOpenSearch,\r\n autoExecuteSearch,\r\n onSearchComplete,\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 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 = useCallback(() => {\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 = useCallback(() => {\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 = useCallback(() => {\r\n setFitMode('fit-width');\r\n setZoom(1);\r\n }, []);\r\n\r\n const handleFitPage = useCallback(() => {\r\n setFitMode('fit-page');\r\n setZoom(1);\r\n }, []);\r\n\r\n const handleFirstPage = useCallback(() => {\r\n setCurrentIndex(0);\r\n }, []);\r\n\r\n const handleLastPage = useCallback(() => {\r\n setCurrentIndex(frames.length - 1);\r\n }, [frames.length]);\r\n\r\n const handlePreviousPage = useCallback(() => {\r\n setCurrentIndex((index) => Math.max(index - 1, 0));\r\n }, []);\r\n\r\n const handleNextPage = useCallback(() => {\r\n setCurrentIndex((index) => Math.min(index + 1, frames.length - 1));\r\n }, [frames.length]);\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={{\r\n width,\r\n height,\r\n display: 'flex',\r\n flexDirection: 'column',\r\n overflow: 'hidden',\r\n ...style\r\n }}\r\n {...props}\r\n >\r\n <Card sx={{ height: '100%', width: '100%', display: 'flex', flexDirection: 'column', overflow: 'hidden' }} 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 sx={{ pb: 1 }}\r\n />\r\n\r\n {/* Toolbar - All Controls at Top (Centered) */}\r\n <Box sx={{ px: 2, pb: 1, display: 'flex', justifyContent: 'center' }}>\r\n <Stack direction=\"row\" spacing={1} alignItems=\"center\" flexWrap=\"wrap\" gap={1}>\r\n {/* Page Navigation */}\r\n {hasMultipleFrames && (\r\n <>\r\n <IconButton\r\n size=\"small\"\r\n onClick={handleFirstPage}\r\n disabled={currentIndex === 0}\r\n title=\"First Page\"\r\n aria-label=\"Go to first page\"\r\n >\r\n <FirstPageIcon fontSize=\"small\" />\r\n </IconButton>\r\n <IconButton\r\n size=\"small\"\r\n onClick={handlePreviousPage}\r\n disabled={currentIndex === 0}\r\n title=\"Previous Page\"\r\n aria-label=\"Go to previous page\"\r\n >\r\n <ChevronLeftIcon fontSize=\"small\" />\r\n </IconButton>\r\n <Typography variant=\"body2\" color=\"text.secondary\" sx={{ minWidth: 100, textAlign: 'center' }}>\r\n Page {currentIndex + 1} of {frames.length}\r\n </Typography>\r\n <IconButton\r\n size=\"small\"\r\n onClick={handleNextPage}\r\n disabled={currentIndex === frames.length - 1}\r\n title=\"Next Page\"\r\n aria-label=\"Go to next page\"\r\n >\r\n <ChevronRightIcon fontSize=\"small\" />\r\n </IconButton>\r\n <IconButton\r\n size=\"small\"\r\n onClick={handleLastPage}\r\n disabled={currentIndex === frames.length - 1}\r\n title=\"Last Page\"\r\n aria-label=\"Go to last page\"\r\n >\r\n <LastPageIcon fontSize=\"small\" />\r\n </IconButton>\r\n <Divider orientation=\"vertical\" flexItem sx={{ mx: 1 }} />\r\n </>\r\n )}\r\n\r\n {/* Zoom Controls */}\r\n <IconButton\r\n size=\"small\"\r\n onClick={handleZoomOut}\r\n disabled={!hasFrames || zoom <= 0.25}\r\n title=\"Zoom Out\"\r\n aria-label=\"Zoom out\"\r\n >\r\n <ZoomOutIcon fontSize=\"small\" />\r\n </IconButton>\r\n <Typography variant=\"body2\" color=\"text.secondary\" sx={{ minWidth: 64, textAlign: 'center' }}>\r\n {hasFrames ? `${displayScale}%` : '—'}\r\n </Typography>\r\n <IconButton\r\n size=\"small\"\r\n onClick={handleZoomIn}\r\n disabled={!hasFrames || zoom >= 5}\r\n title=\"Zoom In\"\r\n aria-label=\"Zoom in\"\r\n >\r\n <ZoomInIcon fontSize=\"small\" />\r\n </IconButton>\r\n\r\n <IconButton\r\n size=\"small\"\r\n onClick={handleFitWidth}\r\n disabled={!hasFrames}\r\n title=\"Fit to Width\"\r\n aria-label=\"Fit to width\"\r\n color={fitMode === 'fit-width' ? 'primary' : 'default'}\r\n >\r\n <AspectRatioIcon fontSize=\"small\" />\r\n </IconButton>\r\n\r\n <IconButton\r\n size=\"small\"\r\n onClick={handleFitPage}\r\n disabled={!hasFrames}\r\n title=\"Fit to Page\"\r\n aria-label=\"Fit to page\"\r\n color={fitMode === 'fit-page' ? 'primary' : 'default'}\r\n >\r\n <FitScreenIcon fontSize=\"small\" />\r\n </IconButton>\r\n\r\n <Divider orientation=\"vertical\" flexItem sx={{ mx: 1 }} />\r\n\r\n {/* Actions */}\r\n <IconButton\r\n size=\"small\"\r\n onClick={onDownloadClick}\r\n title=\"Download\"\r\n aria-label=\"Download TIFF\"\r\n >\r\n <DownloadIcon fontSize=\"small\" />\r\n </IconButton>\r\n\r\n {showMetadata && (\r\n <IconButton\r\n size=\"small\"\r\n onClick={onMetadataClick}\r\n title=\"Document Metadata\"\r\n aria-label=\"View document metadata\"\r\n >\r\n <InfoIcon fontSize=\"small\" />\r\n </IconButton>\r\n )}\r\n\r\n {showProperties && (\r\n <IconButton\r\n size=\"small\"\r\n onClick={onPropertiesClick}\r\n title=\"Document Properties\"\r\n aria-label=\"View document properties\"\r\n >\r\n <DescriptionIcon fontSize=\"small\" />\r\n </IconButton>\r\n )}\r\n </Stack>\r\n </Box>\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 flexShrink: 1,\r\n minHeight: 0,\r\n p: 0,\r\n overflow: 'auto',\r\n backgroundColor: '#f6f8fa',\r\n position: 'relative'\r\n }}\r\n >\r\n <Box\r\n ref={viewportRef}\r\n sx={{\r\n position: 'absolute',\r\n top: 0,\r\n left: 0,\r\n right: 0,\r\n bottom: 0,\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n p: 3,\r\n overflow: 'auto'\r\n }}\r\n >\r\n {renderImage()}\r\n </Box>\r\n </CardContent>\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":[]}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
"use strict";Object.defineProperty(exports, "__esModule", {value: true});"use client";
|
|
2
2
|
|
|
3
3
|
|
|
4
|
-
var
|
|
4
|
+
var _chunkDOOYIHGWjs = require('../../chunk-DOOYIHGW.js');
|
|
5
5
|
require('../../chunk-RE4XRGSV.js');
|
|
6
6
|
|
|
7
7
|
|
|
8
|
-
exports.AudioViewer =
|
|
8
|
+
exports.AudioViewer = _chunkDOOYIHGWjs.AudioViewer;
|
|
9
9
|
//# sourceMappingURL=AudioViewer.js.map
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
"use strict";Object.defineProperty(exports, "__esModule", {value: true});"use client";
|
|
2
2
|
|
|
3
3
|
|
|
4
|
-
var
|
|
4
|
+
var _chunk77UARJVQjs = require('../../chunk-77UARJVQ.js');
|
|
5
|
+
require('../../chunk-RE4XRGSV.js');
|
|
5
6
|
|
|
6
7
|
|
|
7
|
-
exports.DefaultViewer =
|
|
8
|
+
exports.DefaultViewer = _chunk77UARJVQjs.DefaultViewer;
|
|
8
9
|
//# sourceMappingURL=DefaultViewer.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["d:\\Projects\\DMS-File-Viewers\\packages\\lib\\dist\\components\\viewers\\DefaultViewer.js"],"names":[],"mappings":"AAAA,qFAAY;AACZ;AACE;AACF,0DAAgC;AAChC;AACE;AACF,uDAAC","file":"D:\\Projects\\DMS-File-Viewers\\packages\\lib\\dist\\components\\viewers\\DefaultViewer.js"}
|
|
1
|
+
{"version":3,"sources":["d:\\Projects\\DMS-File-Viewers\\packages\\lib\\dist\\components\\viewers\\DefaultViewer.js"],"names":[],"mappings":"AAAA,qFAAY;AACZ;AACE;AACF,0DAAgC;AAChC,mCAAgC;AAChC;AACE;AACF,uDAAC","file":"D:\\Projects\\DMS-File-Viewers\\packages\\lib\\dist\\components\\viewers\\DefaultViewer.js"}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
"use strict";Object.defineProperty(exports, "__esModule", {value: true});"use client";
|
|
2
2
|
|
|
3
3
|
|
|
4
|
-
var
|
|
5
|
-
require('../../chunk-
|
|
4
|
+
var _chunk6ZBHO5SPjs = require('../../chunk-6ZBHO5SP.js');
|
|
5
|
+
require('../../chunk-QELOFQEB.js');
|
|
6
6
|
require('../../chunk-RE4XRGSV.js');
|
|
7
7
|
|
|
8
8
|
|
|
9
|
-
exports.ImageViewer =
|
|
9
|
+
exports.ImageViewer = _chunk6ZBHO5SPjs.ImageViewer;
|
|
10
10
|
//# sourceMappingURL=ImageViewer.js.map
|