@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.
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-GNWU6XHH.js → chunk-6ZBHO5SP.js} +15 -9
  6. package/dist/{chunk-GNWU6XHH.js.map → chunk-6ZBHO5SP.js.map} +1 -1
  7. package/dist/chunk-77UARJVQ.js +133 -0
  8. package/dist/chunk-77UARJVQ.js.map +1 -0
  9. package/dist/{chunk-LKBM4O47.mjs → chunk-7BLEPGZ4.mjs} +67 -61
  10. package/dist/chunk-7BLEPGZ4.mjs.map +1 -0
  11. package/dist/{chunk-QRYIHDRT.mjs → chunk-BHMFZTZ7.mjs} +54 -55
  12. package/dist/chunk-BHMFZTZ7.mjs.map +1 -0
  13. package/dist/{chunk-EMP7RZM2.js → chunk-DOOYIHGW.js} +52 -53
  14. package/dist/chunk-DOOYIHGW.js.map +1 -0
  15. package/dist/{chunk-73ZIFR3P.mjs → chunk-K5SKH4SD.mjs} +798 -466
  16. package/dist/chunk-K5SKH4SD.mjs.map +1 -0
  17. package/dist/{chunk-3STHCDAC.js → chunk-QELOFQEB.js} +757 -425
  18. package/dist/chunk-QELOFQEB.js.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-XQBXRMB7.mjs → chunk-UX6U3H7J.mjs} +14 -8
  24. package/dist/chunk-UX6U3H7J.mjs.map +1 -0
  25. package/dist/{chunk-7JTIG6OU.js → chunk-WP55NYFS.js} +67 -61
  26. package/dist/chunk-WP55NYFS.js.map +1 -0
  27. package/dist/{chunk-NOLXOOIP.mjs → chunk-YHMHDPLQ.mjs} +200 -155
  28. package/dist/chunk-YHMHDPLQ.mjs.map +1 -0
  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 -9
  61. package/dist/index.js.map +1 -1
  62. package/dist/index.mjs +29 -8
  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 @@ import {
24
24
  Tooltip
25
25
  } from "@mui/material";
26
26
  import DownloadIcon from "@mui/icons-material/Download";
27
- import { FixedSizeList as List } from "react-window";
27
+ import InfoIcon from "@mui/icons-material/Info";
28
+ import DescriptionIcon from "@mui/icons-material/Description";
28
29
  import { jsx, jsxs } from "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] = useState("");
@@ -103,33 +109,6 @@ var TextViewer = ({
103
109
  useEffect(() => {
104
110
  void loadText();
105
111
  }, [loadText]);
106
- const handleDownload = useCallback(() => {
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 = useCallback(({ index, style: rowStyle }) => /* @__PURE__ */ jsx(
119
- 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__ */ jsx(
134
113
  Box,
135
114
  {
@@ -142,30 +121,57 @@ var TextViewer = ({
142
121
  {
143
122
  avatar: /* @__PURE__ */ jsx(FileIcon_default, { ext: fileExtension, size: 32 }),
144
123
  title: /* @__PURE__ */ jsx(Typography, { variant: "subtitle1", fontWeight: 500, children: resolvedFileName }),
145
- action: /* @__PURE__ */ jsx(Tooltip, { title: "Download", children: /* @__PURE__ */ jsx(
146
- IconButton,
147
- {
148
- size: "small",
149
- onClick: onDownloadClick,
150
- children: /* @__PURE__ */ jsx(DownloadIcon, {})
151
- }
152
- ) }),
124
+ action: /* @__PURE__ */ jsxs(Stack, { direction: "row", spacing: 1, children: [
125
+ /* @__PURE__ */ jsx(Tooltip, { title: "Download", children: /* @__PURE__ */ jsx(
126
+ IconButton,
127
+ {
128
+ size: "small",
129
+ onClick: onDownloadClick,
130
+ "aria-label": "Download text file",
131
+ children: /* @__PURE__ */ jsx(DownloadIcon, {})
132
+ }
133
+ ) }),
134
+ showMetadata && /* @__PURE__ */ jsx(Tooltip, { title: "Document Metadata", children: /* @__PURE__ */ jsx(
135
+ IconButton,
136
+ {
137
+ size: "small",
138
+ onClick: onMetadataClick,
139
+ "aria-label": "View document metadata",
140
+ children: /* @__PURE__ */ jsx(InfoIcon, {})
141
+ }
142
+ ) }),
143
+ showProperties && /* @__PURE__ */ jsx(Tooltip, { title: "Document Properties", children: /* @__PURE__ */ jsx(
144
+ IconButton,
145
+ {
146
+ size: "small",
147
+ onClick: onPropertiesClick,
148
+ "aria-label": "View document properties",
149
+ children: /* @__PURE__ */ jsx(DescriptionIcon, {})
150
+ }
151
+ ) })
152
+ ] }),
153
153
  sx: { pb: 1 }
154
154
  }
155
155
  ),
156
156
  isLoading && /* @__PURE__ */ jsx(LinearProgress, { sx: { mx: 3, mb: 1 } }),
157
157
  error && /* @__PURE__ */ jsx(Typography, { color: "error", variant: "body2", sx: { px: 3, pb: 1 }, children: error }),
158
158
  /* @__PURE__ */ jsx(Divider, {}),
159
- /* @__PURE__ */ jsx(CardContent, { sx: { flexGrow: 1, minHeight: 0, display: "flex", flexDirection: "column", p: 0 }, children: content ? /* @__PURE__ */ jsx(Stack, { sx: { flex: 1, position: "relative" }, children: /* @__PURE__ */ jsx(
160
- List,
159
+ /* @__PURE__ */ jsx(CardContent, { sx: { flexGrow: 1, minHeight: 0, p: 0, overflow: "auto" }, children: content ? /* @__PURE__ */ jsx(Box, { sx: {
160
+ fontFamily: "monospace",
161
+ fontSize: "0.85rem",
162
+ p: 2,
163
+ whiteSpace: "pre"
164
+ }, children: lines.map((line, index) => /* @__PURE__ */ jsx(
165
+ 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__ */ jsx(Box, { sx: { flex: 1, display: "flex", alignItems: "center", justifyContent: "center", p: 4 }, children: /* @__PURE__ */ jsx(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__ */ jsx(Box, { sx: { display: "flex", alignItems: "center", justifyContent: "center", p: 4, minHeight: 200 }, children: /* @__PURE__ */ jsx(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
  export {
175
181
  TextViewer
176
182
  };
177
- //# sourceMappingURL=chunk-LKBM4O47.mjs.map
183
+ //# sourceMappingURL=chunk-7BLEPGZ4.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/viewers/TextViewer.tsx"],"sourcesContent":["import React, {\r\n useCallback,\r\n useEffect,\r\n useMemo,\r\n useState\r\n} from 'react';\r\nimport {\r\n Box,\r\n Button,\r\n Card,\r\n CardContent,\r\n CardHeader,\r\n Divider,\r\n LinearProgress,\r\n Stack,\r\n Typography,\r\n IconButton,\r\n Tooltip\r\n} from '@mui/material';\r\nimport DownloadIcon from '@mui/icons-material/Download';\r\nimport InfoIcon from '@mui/icons-material/Info';\r\nimport DescriptionIcon from '@mui/icons-material/Description';\r\nimport { FileViewerProps } from '../../types';\r\nimport { getFileExtension } from '../../utils/fileUtils';\r\nimport FileIcon from '../FileIcon';\r\n\r\nconst LINE_HEIGHT = 24;\r\n\r\nexport const TextViewer: React.FC<FileViewerProps> = ({\r\n file,\r\n url,\r\n fileName,\r\n className = '',\r\n style = {},\r\n width = '100%',\r\n height = '100%',\r\n onLoad,\r\n onError,\r\n onDownloadClick,\r\n 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 showPageCount,\r\n showPageNavigation,\r\n showZoomControls,\r\n showDownload,\r\n showPrint,\r\n showSearch,\r\n onPrintClick,\r\n customRegistry,\r\n initialSearchText,\r\n initialSearchPages,\r\n autoOpenSearch,\r\n autoExecuteSearch,\r\n onSearchComplete,\r\n ...props\r\n}) => {\r\n const [content, setContent] = useState<string>('');\r\n const [lines, setLines] = useState<string[]>([]);\r\n const [isLoading, setIsLoading] = useState(false);\r\n const [error, setError] = useState<string | null>(null);\r\n\r\n const resolvedFileName = useMemo(\r\n () => fileName || file?.name || (url ? url.split('/').pop() : 'text-document'),\r\n [fileName, file, url]\r\n );\r\n\r\n const fileExtension = useMemo(\r\n () => getFileExtension(resolvedFileName || ''),\r\n [resolvedFileName]\r\n );\r\n\r\n const loadText = useCallback(async () => {\r\n if (!file && !url) {\r\n setContent('');\r\n setLines([]);\r\n setError(null);\r\n return;\r\n }\r\n\r\n setIsLoading(true);\r\n setError(null);\r\n\r\n try {\r\n let textContent: string;\r\n if (file) {\r\n textContent = await file.text();\r\n } else {\r\n const response = await fetch(url!);\r\n if (!response.ok) {\r\n throw new Error(`Failed to fetch text (${response.status})`);\r\n }\r\n textContent = await response.text();\r\n }\r\n\r\n setContent(textContent);\r\n setLines(textContent.split(/\\r?\\n/));\r\n onLoad?.();\r\n } catch (err) {\r\n const message = err instanceof Error ? err.message : 'Unable to load text file';\r\n setError(message);\r\n setContent('');\r\n setLines([]);\r\n onError?.(new Error(message));\r\n } finally {\r\n setIsLoading(false);\r\n }\r\n }, [file, url, onLoad, onError]);\r\n\r\n useEffect(() => {\r\n void loadText();\r\n }, [loadText]);\r\n\r\n return (\r\n <Box\r\n className={`text-viewer ${className}`}\r\n sx={{ width, height, ...style }}\r\n {...props}\r\n >\r\n <Card sx={{ height: '100%', display: 'flex', flexDirection: 'column' }} elevation={1}>\r\n <CardHeader\r\n avatar={<FileIcon ext={fileExtension} size={32} />}\r\n title={\r\n <Typography variant=\"subtitle1\" fontWeight={500}>\r\n {resolvedFileName}\r\n </Typography>\r\n }\r\n action={\r\n <Stack direction=\"row\" spacing={1}>\r\n <Tooltip title=\"Download\">\r\n <IconButton\r\n size=\"small\"\r\n onClick={onDownloadClick}\r\n aria-label=\"Download text file\"\r\n >\r\n <DownloadIcon />\r\n </IconButton>\r\n </Tooltip>\r\n {showMetadata && (\r\n <Tooltip title=\"Document Metadata\">\r\n <IconButton\r\n size=\"small\"\r\n onClick={onMetadataClick}\r\n aria-label=\"View document metadata\"\r\n >\r\n <InfoIcon />\r\n </IconButton>\r\n </Tooltip>\r\n )}\r\n {showProperties && (\r\n <Tooltip title=\"Document Properties\">\r\n <IconButton\r\n size=\"small\"\r\n onClick={onPropertiesClick}\r\n aria-label=\"View document properties\"\r\n >\r\n <DescriptionIcon />\r\n </IconButton>\r\n </Tooltip>\r\n )}\r\n </Stack>\r\n }\r\n sx={{ pb: 1 }}\r\n />\r\n {isLoading && <LinearProgress sx={{ mx: 3, mb: 1 }} />}\r\n {error && (\r\n <Typography color=\"error\" variant=\"body2\" sx={{ px: 3, pb: 1 }}>\r\n {error}\r\n </Typography>\r\n )}\r\n <Divider />\r\n <CardContent sx={{ flexGrow: 1, minHeight: 0, p: 0, overflow: 'auto' }}>\r\n {content ? (\r\n <Box sx={{ \r\n fontFamily: 'monospace', \r\n fontSize: '0.85rem',\r\n p: 2,\r\n whiteSpace: 'pre'\r\n }}>\r\n {lines.map((line, index) => (\r\n <Box\r\n key={index}\r\n sx={{\r\n minHeight: LINE_HEIGHT,\r\n lineHeight: `${LINE_HEIGHT}px`\r\n }}\r\n >\r\n {line || '\\u00A0'}\r\n </Box>\r\n ))}\r\n </Box>\r\n ) : (\r\n <Box sx={{ display: 'flex', alignItems: 'center', justifyContent: 'center', p: 4, minHeight: 200 }}>\r\n <Typography variant=\"body2\" color=\"text.secondary\">\r\n No text content available.\r\n </Typography>\r\n </Box>\r\n )}\r\n </CardContent>\r\n </Card>\r\n </Box>\r\n );\r\n};"],"mappings":";;;;;;;AAAA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP;AAAA,EACE;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP,OAAO,kBAAkB;AACzB,OAAO,cAAc;AACrB,OAAO,qBAAqB;AAwGV,cAON,YAPM;AAnGlB,IAAM,cAAc;AAEb,IAAM,aAAwC,CAAC;AAAA,EACpD;AAAA,EACA;AAAA,EACA;AAAA,EACA,YAAY;AAAA,EACZ,QAAQ,CAAC;AAAA,EACT,QAAQ;AAAA,EACR,SAAS;AAAA,EACT;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,eAAe;AAAA,EACf,iBAAiB;AAAA;AAAA,EAEjB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL,MAAM;AACJ,QAAM,CAAC,SAAS,UAAU,IAAI,SAAiB,EAAE;AACjD,QAAM,CAAC,OAAO,QAAQ,IAAI,SAAmB,CAAC,CAAC;AAC/C,QAAM,CAAC,WAAW,YAAY,IAAI,SAAS,KAAK;AAChD,QAAM,CAAC,OAAO,QAAQ,IAAI,SAAwB,IAAI;AAEtD,QAAM,mBAAmB;AAAA,IACvB,MAAM,YAAY,MAAM,SAAS,MAAM,IAAI,MAAM,GAAG,EAAE,IAAI,IAAI;AAAA,IAC9D,CAAC,UAAU,MAAM,GAAG;AAAA,EACtB;AAEA,QAAM,gBAAgB;AAAA,IACpB,MAAM,iBAAiB,oBAAoB,EAAE;AAAA,IAC7C,CAAC,gBAAgB;AAAA,EACnB;AAEA,QAAM,WAAW,YAAY,YAAY;AACvC,QAAI,CAAC,QAAQ,CAAC,KAAK;AACjB,iBAAW,EAAE;AACb,eAAS,CAAC,CAAC;AACX,eAAS,IAAI;AACb;AAAA,IACF;AAEA,iBAAa,IAAI;AACjB,aAAS,IAAI;AAEb,QAAI;AACF,UAAI;AACJ,UAAI,MAAM;AACR,sBAAc,MAAM,KAAK,KAAK;AAAA,MAChC,OAAO;AACL,cAAM,WAAW,MAAM,MAAM,GAAI;AACjC,YAAI,CAAC,SAAS,IAAI;AAChB,gBAAM,IAAI,MAAM,yBAAyB,SAAS,MAAM,GAAG;AAAA,QAC7D;AACA,sBAAc,MAAM,SAAS,KAAK;AAAA,MACpC;AAEA,iBAAW,WAAW;AACtB,eAAS,YAAY,MAAM,OAAO,CAAC;AACnC,eAAS;AAAA,IACX,SAAS,KAAK;AACZ,YAAM,UAAU,eAAe,QAAQ,IAAI,UAAU;AACrD,eAAS,OAAO;AAChB,iBAAW,EAAE;AACb,eAAS,CAAC,CAAC;AACX,gBAAU,IAAI,MAAM,OAAO,CAAC;AAAA,IAC9B,UAAE;AACA,mBAAa,KAAK;AAAA,IACpB;AAAA,EACF,GAAG,CAAC,MAAM,KAAK,QAAQ,OAAO,CAAC;AAE/B,YAAU,MAAM;AACd,SAAK,SAAS;AAAA,EAChB,GAAG,CAAC,QAAQ,CAAC;AAEb,SACE;AAAA,IAAC;AAAA;AAAA,MACC,WAAW,eAAe,SAAS;AAAA,MACnC,IAAI,EAAE,OAAO,QAAQ,GAAG,MAAM;AAAA,MAC7B,GAAG;AAAA,MAEJ,+BAAC,QAAK,IAAI,EAAE,QAAQ,QAAQ,SAAS,QAAQ,eAAe,SAAS,GAAG,WAAW,GACjF;AAAA;AAAA,UAAC;AAAA;AAAA,YACC,QAAQ,oBAAC,oBAAS,KAAK,eAAe,MAAM,IAAI;AAAA,YAChD,OACE,oBAAC,cAAW,SAAQ,aAAY,YAAY,KACzC,4BACH;AAAA,YAEF,QACE,qBAAC,SAAM,WAAU,OAAM,SAAS,GAC9B;AAAA,kCAAC,WAAQ,OAAM,YACb;AAAA,gBAAC;AAAA;AAAA,kBACC,MAAK;AAAA,kBACL,SAAS;AAAA,kBACT,cAAW;AAAA,kBAEX,8BAAC,gBAAa;AAAA;AAAA,cAChB,GACF;AAAA,cACC,gBACC,oBAAC,WAAQ,OAAM,qBACb;AAAA,gBAAC;AAAA;AAAA,kBACC,MAAK;AAAA,kBACL,SAAS;AAAA,kBACT,cAAW;AAAA,kBAEX,8BAAC,YAAS;AAAA;AAAA,cACZ,GACF;AAAA,cAED,kBACC,oBAAC,WAAQ,OAAM,uBACb;AAAA,gBAAC;AAAA;AAAA,kBACC,MAAK;AAAA,kBACL,SAAS;AAAA,kBACT,cAAW;AAAA,kBAEX,8BAAC,mBAAgB;AAAA;AAAA,cACnB,GACF;AAAA,eAEJ;AAAA,YAEF,IAAI,EAAE,IAAI,EAAE;AAAA;AAAA,QACd;AAAA,QACC,aAAa,oBAAC,kBAAe,IAAI,EAAE,IAAI,GAAG,IAAI,EAAE,GAAG;AAAA,QACnD,SACC,oBAAC,cAAW,OAAM,SAAQ,SAAQ,SAAQ,IAAI,EAAE,IAAI,GAAG,IAAI,EAAE,GAC1D,iBACH;AAAA,QAEF,oBAAC,WAAQ;AAAA,QACT,oBAAC,eAAY,IAAI,EAAE,UAAU,GAAG,WAAW,GAAG,GAAG,GAAG,UAAU,OAAO,GAClE,oBACC,oBAAC,OAAI,IAAI;AAAA,UACP,YAAY;AAAA,UACZ,UAAU;AAAA,UACV,GAAG;AAAA,UACH,YAAY;AAAA,QACd,GACG,gBAAM,IAAI,CAAC,MAAM,UAChB;AAAA,UAAC;AAAA;AAAA,YAEC,IAAI;AAAA,cACF,WAAW;AAAA,cACX,YAAY,GAAG,WAAW;AAAA,YAC5B;AAAA,YAEC,kBAAQ;AAAA;AAAA,UANJ;AAAA,QAOP,CACD,GACH,IAEA,oBAAC,OAAI,IAAI,EAAE,SAAS,QAAQ,YAAY,UAAU,gBAAgB,UAAU,GAAG,GAAG,WAAW,IAAI,GAC/F,8BAAC,cAAW,SAAQ,SAAQ,OAAM,kBAAiB,wCAEnD,GACF,GAEJ;AAAA,SACF;AAAA;AAAA,EACF;AAEJ;","names":[]}
@@ -5,9 +5,11 @@ import {
5
5
  } from "./chunk-QQDQJ7TS.mjs";
6
6
 
7
7
  // src/components/viewers/VideoViewer.tsx
8
- import { useCallback, useEffect, useMemo, useRef, useState } from "react";
9
- import { Box, Card, CardContent, CardHeader, LinearProgress, Typography, IconButton, Tooltip } from "@mui/material";
8
+ import { useEffect, useMemo, useRef, useState } from "react";
9
+ import { Box, Card, CardContent, CardHeader, LinearProgress, Typography, Stack, IconButton, Tooltip } from "@mui/material";
10
10
  import DownloadIcon from "@mui/icons-material/Download";
11
+ import InfoIcon from "@mui/icons-material/Info";
12
+ import DescriptionIcon from "@mui/icons-material/Description";
11
13
  import { jsx, jsxs } from "react/jsx-runtime";
12
14
  var VideoViewer = ({
13
15
  file,
@@ -20,21 +22,26 @@ var VideoViewer = ({
20
22
  onLoad,
21
23
  onError,
22
24
  onDownloadClick,
23
- // Filter out props that shouldn't be passed to DOM
24
- mimeType: _mimeType,
25
- fileSize: _fileSize,
26
- showPageCount: _showPageCount,
27
- showPageNavigation: _showPageNavigation,
28
- showZoomControls: _showZoomControls,
29
- showDownload: _showDownload,
30
- showPrint: _showPrint,
31
- showSearch: _showSearch,
32
- showMetadata: _showMetadata,
33
- showProperties: _showProperties,
34
- onMetadataClick: _onMetadataClick,
35
- onPropertiesClick: _onPropertiesClick,
36
- onPrintClick: _onPrintClick,
37
- customRegistry: _customRegistry,
25
+ onMetadataClick,
26
+ onPropertiesClick,
27
+ showMetadata = true,
28
+ showProperties = true,
29
+ // Extract props that shouldn't be passed to DOM elements
30
+ mimeType,
31
+ fileSize,
32
+ showPageCount,
33
+ showPageNavigation,
34
+ showZoomControls,
35
+ showDownload,
36
+ showPrint,
37
+ showSearch,
38
+ onPrintClick,
39
+ customRegistry,
40
+ initialSearchText,
41
+ initialSearchPages,
42
+ autoOpenSearch,
43
+ autoExecuteSearch,
44
+ onSearchComplete,
38
45
  ...props
39
46
  }) => {
40
47
  const videoRef = useRef(null);
@@ -94,35 +101,6 @@ var VideoViewer = ({
94
101
  () => getFileExtension(resolvedFileName || ""),
95
102
  [resolvedFileName]
96
103
  );
97
- const handleDownload = useCallback(async () => {
98
- if (!file && !url) return;
99
- try {
100
- let blob;
101
- let filename = resolvedFileName || "video.mp4";
102
- if (file) {
103
- blob = file;
104
- filename = file.name;
105
- } else if (url) {
106
- const response = await fetch(url);
107
- if (!response.ok) {
108
- throw new Error(`Failed to fetch video (${response.status})`);
109
- }
110
- blob = await response.blob();
111
- } else {
112
- return;
113
- }
114
- const downloadUrl = URL.createObjectURL(blob);
115
- const link = document.createElement("a");
116
- link.href = downloadUrl;
117
- link.download = filename;
118
- document.body.appendChild(link);
119
- link.click();
120
- document.body.removeChild(link);
121
- URL.revokeObjectURL(downloadUrl);
122
- } catch (err) {
123
- onError?.(err instanceof Error ? err : new Error("Download failed"));
124
- }
125
- }, [file, url, resolvedFileName, onError]);
126
104
  return /* @__PURE__ */ jsx(
127
105
  Box,
128
106
  {
@@ -135,14 +113,35 @@ var VideoViewer = ({
135
113
  {
136
114
  avatar: /* @__PURE__ */ jsx(FileIcon_default, { ext: fileExtension, size: 32 }),
137
115
  title: /* @__PURE__ */ jsx(Typography, { variant: "subtitle1", fontWeight: 500, children: resolvedFileName }),
138
- action: /* @__PURE__ */ jsx(Tooltip, { title: "Download", children: /* @__PURE__ */ jsx(
139
- IconButton,
140
- {
141
- size: "small",
142
- onClick: onDownloadClick,
143
- children: /* @__PURE__ */ jsx(DownloadIcon, {})
144
- }
145
- ) }),
116
+ action: /* @__PURE__ */ jsxs(Stack, { direction: "row", spacing: 1, children: [
117
+ /* @__PURE__ */ jsx(Tooltip, { title: "Download", children: /* @__PURE__ */ jsx(
118
+ IconButton,
119
+ {
120
+ size: "small",
121
+ onClick: onDownloadClick,
122
+ "aria-label": "Download video",
123
+ children: /* @__PURE__ */ jsx(DownloadIcon, {})
124
+ }
125
+ ) }),
126
+ showMetadata && /* @__PURE__ */ jsx(Tooltip, { title: "Document Metadata", children: /* @__PURE__ */ jsx(
127
+ IconButton,
128
+ {
129
+ size: "small",
130
+ onClick: onMetadataClick,
131
+ "aria-label": "View document metadata",
132
+ children: /* @__PURE__ */ jsx(InfoIcon, {})
133
+ }
134
+ ) }),
135
+ showProperties && /* @__PURE__ */ jsx(Tooltip, { title: "Document Properties", children: /* @__PURE__ */ jsx(
136
+ IconButton,
137
+ {
138
+ size: "small",
139
+ onClick: onPropertiesClick,
140
+ "aria-label": "View document properties",
141
+ children: /* @__PURE__ */ jsx(DescriptionIcon, {})
142
+ }
143
+ ) })
144
+ ] }),
146
145
  sx: { pb: 1.5 }
147
146
  }
148
147
  ),
@@ -193,4 +192,4 @@ var VideoViewer = ({
193
192
  export {
194
193
  VideoViewer
195
194
  };
196
- //# sourceMappingURL=chunk-QRYIHDRT.mjs.map
195
+ //# sourceMappingURL=chunk-BHMFZTZ7.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/viewers/VideoViewer.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';\r\nimport { Box, Card, CardContent, CardHeader, LinearProgress, Typography, Stack, IconButton, Tooltip } from '@mui/material';\r\nimport DownloadIcon from '@mui/icons-material/Download';\r\nimport InfoIcon from '@mui/icons-material/Info';\r\nimport DescriptionIcon from '@mui/icons-material/Description';\r\nimport { FileViewerProps } from '../../types';\r\nimport { getFileExtension } from '../../utils/fileUtils';\r\nimport FileIcon from '../FileIcon';\r\n\r\nexport const VideoViewer: React.FC<FileViewerProps> = ({\r\n file,\r\n url,\r\n fileName,\r\n className = '',\r\n style = {},\r\n width = '100%',\r\n height = '100%',\r\n onLoad,\r\n onError,\r\n onDownloadClick,\r\n 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 showPageCount,\r\n showPageNavigation,\r\n showZoomControls,\r\n showDownload,\r\n showPrint,\r\n showSearch,\r\n onPrintClick,\r\n customRegistry,\r\n initialSearchText,\r\n initialSearchPages,\r\n autoOpenSearch,\r\n autoExecuteSearch,\r\n onSearchComplete,\r\n ...props\r\n}) => {\r\n const videoRef = useRef<HTMLVideoElement | null>(null);\r\n const [videoSource, setVideoSource] = useState<string | null>(null);\r\n const [isLoading, setIsLoading] = useState(false);\r\n const [error, setError] = useState<string | null>(null);\r\n const [videoDimensions, setVideoDimensions] = useState<{ width: number; height: number } | null>(null);\r\n\r\n useEffect(() => {\r\n let objectUrl: string | null = null;\r\n\r\n if (file) {\r\n objectUrl = URL.createObjectURL(file);\r\n setVideoSource(objectUrl);\r\n setIsLoading(true);\r\n } else if (url) {\r\n setVideoSource(url);\r\n } else {\r\n setVideoSource(null);\r\n }\r\n\r\n setError(null);\r\n\r\n return () => {\r\n if (objectUrl) {\r\n URL.revokeObjectURL(objectUrl);\r\n }\r\n };\r\n }, [file, url]);\r\n\r\n useEffect(() => {\r\n const element = videoRef.current;\r\n if (!element) {\r\n return;\r\n }\r\n\r\n const handleLoaded = () => {\r\n setIsLoading(false);\r\n // Capture video dimensions\r\n setVideoDimensions({\r\n width: element.videoWidth,\r\n height: element.videoHeight\r\n });\r\n onLoad?.();\r\n };\r\n\r\n const handleError = () => {\r\n const message = 'Failed to load video resource';\r\n setIsLoading(false);\r\n setError(message);\r\n onError?.(new Error(message));\r\n };\r\n\r\n element.addEventListener('loadedmetadata', handleLoaded);\r\n element.addEventListener('error', handleError);\r\n\r\n return () => {\r\n element.removeEventListener('loadedmetadata', handleLoaded);\r\n element.removeEventListener('error', handleError);\r\n };\r\n }, [onLoad, onError, videoSource]);\r\n\r\n const resolvedFileName = useMemo(\r\n () => fileName || file?.name || (url ? url.split('/').pop() : 'video'),\r\n [fileName, file, url]\r\n );\r\n\r\n const fileExtension = useMemo(\r\n () => getFileExtension(resolvedFileName || ''),\r\n [resolvedFileName]\r\n );\r\n\r\n return (\r\n <Box\r\n className={`video-viewer ${className}`}\r\n sx={{ width, height, ...style }}\r\n {...props}\r\n >\r\n <Card sx={{ height: '100%', display: 'flex', flexDirection: 'column' }} elevation={1}>\r\n <CardHeader\r\n avatar={<FileIcon ext={fileExtension} size={32} />}\r\n title={\r\n <Typography variant=\"subtitle1\" fontWeight={500}>\r\n {resolvedFileName}\r\n </Typography>\r\n }\r\n action={\r\n <Stack direction=\"row\" spacing={1}>\r\n <Tooltip title=\"Download\">\r\n <IconButton\r\n size=\"small\"\r\n onClick={onDownloadClick}\r\n aria-label=\"Download video\"\r\n >\r\n <DownloadIcon />\r\n </IconButton>\r\n </Tooltip>\r\n {showMetadata && (\r\n <Tooltip title=\"Document Metadata\">\r\n <IconButton\r\n size=\"small\"\r\n onClick={onMetadataClick}\r\n aria-label=\"View document metadata\"\r\n >\r\n <InfoIcon />\r\n </IconButton>\r\n </Tooltip>\r\n )}\r\n {showProperties && (\r\n <Tooltip title=\"Document Properties\">\r\n <IconButton\r\n size=\"small\"\r\n onClick={onPropertiesClick}\r\n aria-label=\"View document properties\"\r\n >\r\n <DescriptionIcon />\r\n </IconButton>\r\n </Tooltip>\r\n )}\r\n </Stack>\r\n }\r\n sx={{ pb: 1.5 }}\r\n />\r\n {isLoading && <LinearProgress sx={{ mx: 3, mb: 2 }} />}\r\n {error && (\r\n <Typography color=\"error\" variant=\"body2\" sx={{ px: 3, pb: 1 }}>\r\n {error}\r\n </Typography>\r\n )}\r\n <CardContent sx={{ \r\n flexGrow: 1, \r\n display: 'flex', \r\n alignItems: 'center', \r\n justifyContent: 'center', \r\n p: 2,\r\n overflow: 'hidden'\r\n }}>\r\n {videoSource ? (\r\n <Box\r\n sx={{\r\n width: '100%',\r\n height: '100%',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n backgroundColor: '#000',\r\n borderRadius: 2\r\n }}\r\n >\r\n <video\r\n ref={videoRef}\r\n controls\r\n controlsList=\"nodownload\"\r\n style={{\r\n maxWidth: '100%',\r\n maxHeight: '100%',\r\n width: 'auto',\r\n height: 'auto',\r\n objectFit: 'contain'\r\n }}\r\n src={videoSource}\r\n />\r\n </Box>\r\n ) : (\r\n <Typography variant=\"body2\" color=\"text.secondary\">\r\n No video source provided.\r\n </Typography>\r\n )}\r\n </CardContent>\r\n </Card>\r\n </Box>\r\n );\r\n};"],"mappings":"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","names":[]}
@@ -8,6 +8,8 @@ var _chunkRE4XRGSVjs = require('./chunk-RE4XRGSV.js');
8
8
  var _react = require('react');
9
9
  var _material = require('@mui/material');
10
10
  var _Download = require('@mui/icons-material/Download'); var _Download2 = _interopRequireDefault(_Download);
11
+ var _Info = require('@mui/icons-material/Info'); var _Info2 = _interopRequireDefault(_Info);
12
+ var _Description = require('@mui/icons-material/Description'); var _Description2 = _interopRequireDefault(_Description);
11
13
  var _jsxruntime = require('react/jsx-runtime');
12
14
  var AudioViewer = ({
13
15
  file,
@@ -20,21 +22,26 @@ var AudioViewer = ({
20
22
  onLoad,
21
23
  onError,
22
24
  onDownloadClick,
23
- // Filter out props that shouldn't be passed to DOM
24
- mimeType: _mimeType,
25
- fileSize: _fileSize,
26
- showPageCount: _showPageCount,
27
- showPageNavigation: _showPageNavigation,
28
- showZoomControls: _showZoomControls,
29
- showDownload: _showDownload,
30
- showPrint: _showPrint,
31
- showSearch: _showSearch,
32
- showMetadata: _showMetadata,
33
- showProperties: _showProperties,
34
- onMetadataClick: _onMetadataClick,
35
- onPropertiesClick: _onPropertiesClick,
36
- onPrintClick: _onPrintClick,
37
- customRegistry: _customRegistry,
25
+ onMetadataClick,
26
+ onPropertiesClick,
27
+ showMetadata = true,
28
+ showProperties = true,
29
+ // Extract props that shouldn't be passed to DOM elements
30
+ mimeType,
31
+ fileSize,
32
+ showPageCount,
33
+ showPageNavigation,
34
+ showZoomControls,
35
+ showDownload,
36
+ showPrint,
37
+ showSearch,
38
+ onPrintClick,
39
+ customRegistry,
40
+ initialSearchText,
41
+ initialSearchPages,
42
+ autoOpenSearch,
43
+ autoExecuteSearch,
44
+ onSearchComplete,
38
45
  ...props
39
46
  }) => {
40
47
  const audioRef = _react.useRef.call(void 0, null);
@@ -84,35 +91,6 @@ var AudioViewer = ({
84
91
  () => _chunkRE4XRGSVjs.getFileExtension.call(void 0, resolvedFileName || ""),
85
92
  [resolvedFileName]
86
93
  );
87
- const handleDownload = _react.useCallback.call(void 0, async () => {
88
- if (!file && !url) return;
89
- try {
90
- let blob;
91
- let filename = resolvedFileName || "audio.mp3";
92
- if (file) {
93
- blob = file;
94
- filename = file.name;
95
- } else if (url) {
96
- const response = await fetch(url);
97
- if (!response.ok) {
98
- throw new Error(`Failed to fetch audio (${response.status})`);
99
- }
100
- blob = await response.blob();
101
- } else {
102
- return;
103
- }
104
- const downloadUrl = URL.createObjectURL(blob);
105
- const link = document.createElement("a");
106
- link.href = downloadUrl;
107
- link.download = filename;
108
- document.body.appendChild(link);
109
- link.click();
110
- document.body.removeChild(link);
111
- URL.revokeObjectURL(downloadUrl);
112
- } catch (err) {
113
- _optionalChain([onError, 'optionalCall', _4 => _4(err instanceof Error ? err : new Error("Download failed"))]);
114
- }
115
- }, [file, url, resolvedFileName, onError]);
116
94
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
117
95
  _material.Box,
118
96
  {
@@ -125,14 +103,35 @@ var AudioViewer = ({
125
103
  {
126
104
  avatar: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkRE4XRGSVjs.FileIcon_default, { ext: fileExtension, size: 32 }),
127
105
  title: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _material.Typography, { variant: "subtitle1", fontWeight: 500, children: resolvedFileName }),
128
- action: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _material.Tooltip, { title: "Download", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
129
- _material.IconButton,
130
- {
131
- size: "small",
132
- onClick: onDownloadClick,
133
- children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _Download2.default, {})
134
- }
135
- ) }),
106
+ action: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _material.Stack, { direction: "row", spacing: 1, children: [
107
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _material.Tooltip, { title: "Download", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
108
+ _material.IconButton,
109
+ {
110
+ size: "small",
111
+ onClick: onDownloadClick,
112
+ "aria-label": "Download audio",
113
+ children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _Download2.default, {})
114
+ }
115
+ ) }),
116
+ showMetadata && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _material.Tooltip, { title: "Document Metadata", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
117
+ _material.IconButton,
118
+ {
119
+ size: "small",
120
+ onClick: onMetadataClick,
121
+ "aria-label": "View document metadata",
122
+ children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _Info2.default, {})
123
+ }
124
+ ) }),
125
+ showProperties && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _material.Tooltip, { title: "Document Properties", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
126
+ _material.IconButton,
127
+ {
128
+ size: "small",
129
+ onClick: onPropertiesClick,
130
+ "aria-label": "View document properties",
131
+ children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _Description2.default, {})
132
+ }
133
+ ) })
134
+ ] }),
136
135
  sx: { pb: 1.5 }
137
136
  }
138
137
  ),
@@ -156,4 +155,4 @@ var AudioViewer = ({
156
155
 
157
156
 
158
157
  exports.AudioViewer = AudioViewer;
159
- //# sourceMappingURL=chunk-EMP7RZM2.js.map
158
+ //# sourceMappingURL=chunk-DOOYIHGW.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["d:\\Projects\\DMS-File-Viewers\\packages\\lib\\dist\\chunk-DOOYIHGW.js"],"names":[],"mappings":"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","file":"D:\\Projects\\DMS-File-Viewers\\packages\\lib\\dist\\chunk-DOOYIHGW.js","sourcesContent":[null]}