@cannymindstech/file-viewers 0.27.11 → 0.28.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (91) hide show
  1. package/package.json +2 -2
  2. package/dist/chunk-2BLHLWNN.js +0 -299
  3. package/dist/chunk-2BLHLWNN.js.map +0 -1
  4. package/dist/chunk-6BRYDA3B.js +0 -329
  5. package/dist/chunk-6BRYDA3B.js.map +0 -1
  6. package/dist/chunk-7JPF5AYR.mjs +0 -488
  7. package/dist/chunk-7JPF5AYR.mjs.map +0 -1
  8. package/dist/chunk-7P6WEBHN.js +0 -2299
  9. package/dist/chunk-7P6WEBHN.js.map +0 -1
  10. package/dist/chunk-7PMZ4GN5.mjs +0 -290
  11. package/dist/chunk-7PMZ4GN5.mjs.map +0 -1
  12. package/dist/chunk-B5NNB4KD.mjs +0 -268
  13. package/dist/chunk-B5NNB4KD.mjs.map +0 -1
  14. package/dist/chunk-CIWCHSAA.js +0 -309
  15. package/dist/chunk-CIWCHSAA.js.map +0 -1
  16. package/dist/chunk-D7SDEVDM.js +0 -268
  17. package/dist/chunk-D7SDEVDM.js.map +0 -1
  18. package/dist/chunk-ECZ6IBOS.js +0 -424
  19. package/dist/chunk-ECZ6IBOS.js.map +0 -1
  20. package/dist/chunk-EI3EP65I.mjs +0 -868
  21. package/dist/chunk-EI3EP65I.mjs.map +0 -1
  22. package/dist/chunk-EKNP342T.mjs +0 -299
  23. package/dist/chunk-EKNP342T.mjs.map +0 -1
  24. package/dist/chunk-EM63H4SA.js +0 -290
  25. package/dist/chunk-EM63H4SA.js.map +0 -1
  26. package/dist/chunk-IJMNPAXX.mjs +0 -309
  27. package/dist/chunk-IJMNPAXX.mjs.map +0 -1
  28. package/dist/chunk-KJNOBIUZ.mjs +0 -36
  29. package/dist/chunk-KJNOBIUZ.mjs.map +0 -1
  30. package/dist/chunk-KQCU7XW2.mjs +0 -424
  31. package/dist/chunk-KQCU7XW2.mjs.map +0 -1
  32. package/dist/chunk-MPTCXAXO.js +0 -868
  33. package/dist/chunk-MPTCXAXO.js.map +0 -1
  34. package/dist/chunk-OPJOCUSL.js +0 -36
  35. package/dist/chunk-OPJOCUSL.js.map +0 -1
  36. package/dist/chunk-PZGUVU6N.mjs +0 -2299
  37. package/dist/chunk-PZGUVU6N.mjs.map +0 -1
  38. package/dist/chunk-QV63FULE.js +0 -488
  39. package/dist/chunk-QV63FULE.js.map +0 -1
  40. package/dist/chunk-XJQ5J2UF.mjs +0 -329
  41. package/dist/chunk-XJQ5J2UF.mjs.map +0 -1
  42. package/dist/components/viewers/AudioViewer.d.mts +0 -6
  43. package/dist/components/viewers/AudioViewer.d.ts +0 -6
  44. package/dist/components/viewers/AudioViewer.js +0 -10
  45. package/dist/components/viewers/AudioViewer.js.map +0 -1
  46. package/dist/components/viewers/AudioViewer.mjs +0 -10
  47. package/dist/components/viewers/AudioViewer.mjs.map +0 -1
  48. package/dist/components/viewers/DefaultViewer.d.mts +0 -6
  49. package/dist/components/viewers/DefaultViewer.d.ts +0 -6
  50. package/dist/components/viewers/DefaultViewer.js +0 -10
  51. package/dist/components/viewers/DefaultViewer.js.map +0 -1
  52. package/dist/components/viewers/DefaultViewer.mjs +0 -10
  53. package/dist/components/viewers/DefaultViewer.mjs.map +0 -1
  54. package/dist/components/viewers/ImageViewer.d.mts +0 -6
  55. package/dist/components/viewers/ImageViewer.d.ts +0 -6
  56. package/dist/components/viewers/ImageViewer.js +0 -10
  57. package/dist/components/viewers/ImageViewer.js.map +0 -1
  58. package/dist/components/viewers/ImageViewer.mjs +0 -10
  59. package/dist/components/viewers/ImageViewer.mjs.map +0 -1
  60. package/dist/components/viewers/PDFViewer.d.mts +0 -51
  61. package/dist/components/viewers/PDFViewer.d.ts +0 -51
  62. package/dist/components/viewers/PDFViewer.js +0 -11
  63. package/dist/components/viewers/PDFViewer.js.map +0 -1
  64. package/dist/components/viewers/PDFViewer.mjs +0 -11
  65. package/dist/components/viewers/PDFViewer.mjs.map +0 -1
  66. package/dist/components/viewers/TIFFViewer.d.mts +0 -6
  67. package/dist/components/viewers/TIFFViewer.d.ts +0 -6
  68. package/dist/components/viewers/TIFFViewer.js +0 -10
  69. package/dist/components/viewers/TIFFViewer.js.map +0 -1
  70. package/dist/components/viewers/TIFFViewer.mjs +0 -10
  71. package/dist/components/viewers/TIFFViewer.mjs.map +0 -1
  72. package/dist/components/viewers/TextViewer.d.mts +0 -6
  73. package/dist/components/viewers/TextViewer.d.ts +0 -6
  74. package/dist/components/viewers/TextViewer.js +0 -10
  75. package/dist/components/viewers/TextViewer.js.map +0 -1
  76. package/dist/components/viewers/TextViewer.mjs +0 -10
  77. package/dist/components/viewers/TextViewer.mjs.map +0 -1
  78. package/dist/components/viewers/VideoViewer.d.mts +0 -6
  79. package/dist/components/viewers/VideoViewer.d.ts +0 -6
  80. package/dist/components/viewers/VideoViewer.js +0 -10
  81. package/dist/components/viewers/VideoViewer.js.map +0 -1
  82. package/dist/components/viewers/VideoViewer.mjs +0 -10
  83. package/dist/components/viewers/VideoViewer.mjs.map +0 -1
  84. package/dist/index.d.mts +0 -75
  85. package/dist/index.d.ts +0 -75
  86. package/dist/index.js +0 -305
  87. package/dist/index.js.map +0 -1
  88. package/dist/index.mjs +0 -305
  89. package/dist/index.mjs.map +0 -1
  90. package/dist/types-BYTxtKEc.d.mts +0 -100
  91. package/dist/types-BYTxtKEc.d.ts +0 -100
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/viewers/TextViewer.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useMemo, useState } from \"react\";\nimport {\n Box,\n Button,\n Card,\n CardContent,\n CardHeader,\n Divider,\n LinearProgress,\n Stack,\n Typography,\n IconButton,\n Tooltip,\n} from \"@mui/material\";\nimport DownloadIcon from \"@mui/icons-material/Download\";\nimport PrintIcon from \"@mui/icons-material/Print\";\nimport FullscreenIcon from \"@mui/icons-material/Fullscreen\";\nimport InfoIcon from \"@mui/icons-material/Info\";\nimport DescriptionIcon from \"@mui/icons-material/Description\";\nimport HistoryIcon from \"@mui/icons-material/History\";\nimport { LocalOffer } from \"@mui/icons-material\";\nimport { FileViewerProps } from \"../../types\";\nimport { getFileExtension } from \"../../utils/fileUtils\";\nimport { mergeToolbarConfig } from \"../../utils/toolbarUtils\";\nimport FileIcon from \"../FileIcon\";\n\nconst LINE_HEIGHT = 24;\n\nexport const TextViewer: React.FC<FileViewerProps> = ({\n file,\n url,\n fileName,\n className = \"\",\n style = {},\n width = \"100%\",\n height = \"100%\",\n onLoad,\n onError,\n onDownloadClick,\n onPrintClick,\n onMetadataClick,\n onTagsClick,\n onPropertiesClick,\n onHistoryClick,\n showDownload = true,\n showPrint = true,\n showMetadata = false,\n showTags = true,\n showProperties = false,\n showHistory = true,\n // Extract props that shouldn't be passed to DOM elements\n mimeType,\n fileSize,\n showPageCount,\n showPageNavigation,\n showZoomControls,\n showSearch,\n customRegistry,\n initialSearchText,\n initialSearchPages,\n autoOpenSearch,\n autoExecuteSearch,\n onSearchComplete,\n toolbarActions,\n ...props\n}) => {\n const [content, setContent] = useState<string>(\"\");\n const [lines, setLines] = useState<string[]>([]);\n const [isLoading, setIsLoading] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const [isFullScreen, setIsFullScreen] = useState(false);\n const containerRef = React.useRef<HTMLDivElement>(null);\n\n const resolvedFileName = useMemo(\n () =>\n fileName || file?.name || (url ? url.split(\"/\").pop() : \"text-document\"),\n [fileName, file, url]\n );\n\n const fileExtension = useMemo(\n () => getFileExtension(resolvedFileName || \"\"),\n [resolvedFileName]\n );\n\n const loadText = useCallback(async () => {\n if (!file && !url) {\n setContent(\"\");\n setLines([]);\n setError(null);\n return;\n }\n\n setIsLoading(true);\n setError(null);\n\n try {\n let textContent: string;\n if (file) {\n textContent = await file.text();\n } else {\n const response = await fetch(url!);\n if (!response.ok) {\n throw new Error(`Failed to fetch text (${response.status})`);\n }\n textContent = await response.text();\n }\n\n setContent(textContent);\n setLines(textContent.split(/\\r?\\n/));\n onLoad?.();\n } catch (err) {\n const message =\n err instanceof Error ? err.message : \"Unable to load text file\";\n setError(message);\n setContent(\"\");\n setLines([]);\n onError?.(new Error(message));\n } finally {\n setIsLoading(false);\n }\n }, [file, url, onLoad, onError]);\n\n useEffect(() => {\n void loadText();\n }, [loadText]);\n\n const handleToggleFullScreen = () => {\n if (!isFullScreen && containerRef.current?.requestFullscreen) {\n containerRef.current.requestFullscreen();\n setIsFullScreen(true);\n } else if (isFullScreen && document.exitFullscreen) {\n document.exitFullscreen();\n setIsFullScreen(false);\n }\n };\n\n const toolbar = mergeToolbarConfig({\n showDownload,\n showPrint,\n showMetadata,\n showTags,\n showProperties,\n showHistory,\n onDownloadClick,\n onPrintClick,\n onMetadataClick,\n onTagsClick,\n onPropertiesClick,\n onHistoryClick,\n toolbarActions,\n });\n\n return (\n <Box\n ref={containerRef}\n className={`text-viewer ${className}`}\n sx={{ width, height, ...style }}\n {...props}\n >\n <Card\n sx={{ height: \"100%\", display: \"flex\", flexDirection: \"column\" }}\n elevation={1}\n >\n <CardHeader\n avatar={<FileIcon ext={fileExtension} size={32} />}\n title={\n <Typography variant=\"subtitle1\" fontWeight={500}>\n {resolvedFileName}\n </Typography>\n }\n action={\n <Stack direction=\"row\" spacing={1}>\n {!toolbar.isHidden(\"download\") && (\n <Tooltip title={toolbar.getLabel(\"download\") || \"Download\"}>\n <IconButton\n size=\"small\"\n onClick={toolbar.getHandler(\"download\", onDownloadClick)}\n disabled={toolbar.isDisabled(\"download\")}\n aria-label=\"Download text file\"\n >\n {toolbar.getIcon(\"download\") || <DownloadIcon />}\n </IconButton>\n </Tooltip>\n )}\n {!toolbar.isHidden(\"print\") && (\n <Tooltip title={toolbar.getLabel(\"print\") || \"Print\"}>\n <IconButton\n size=\"small\"\n onClick={toolbar.getHandler(\"print\", onPrintClick)}\n disabled={toolbar.isDisabled(\"print\")}\n aria-label=\"Print text file\"\n >\n {toolbar.getIcon(\"print\") || <PrintIcon />}\n </IconButton>\n </Tooltip>\n )}\n {!toolbar.isHidden(\"fullscreen\") && (\n <Tooltip title={toolbar.getLabel(\"fullscreen\") || \"Fullscreen\"}>\n <IconButton\n size=\"small\"\n onClick={toolbar.getHandler(\n \"fullscreen\",\n handleToggleFullScreen\n )}\n disabled={toolbar.isDisabled(\"fullscreen\")}\n aria-label=\"Toggle fullscreen\"\n >\n {toolbar.getIcon(\"fullscreen\") || <FullscreenIcon />}\n </IconButton>\n </Tooltip>\n )}\n {!toolbar.isHidden(\"metadata\") && (\n <Tooltip\n title={toolbar.getLabel(\"metadata\") || \"Document Metadata\"}\n >\n <IconButton\n size=\"small\"\n onClick={toolbar.getHandler(\"metadata\", onMetadataClick)}\n disabled={toolbar.isDisabled(\"metadata\")}\n aria-label=\"View document metadata\"\n >\n {toolbar.getIcon(\"metadata\") || <DescriptionIcon />}\n </IconButton>\n </Tooltip>\n )}\n {!toolbar.isHidden(\"properties\") && (\n <Tooltip\n title={\n toolbar.getLabel(\"properties\") || \"Document Properties\"\n }\n >\n <IconButton\n size=\"small\"\n onClick={toolbar.getHandler(\n \"properties\",\n onPropertiesClick\n )}\n disabled={toolbar.isDisabled(\"properties\")}\n aria-label=\"View document properties\"\n >\n {toolbar.getIcon(\"properties\") || <InfoIcon />}\n </IconButton>\n </Tooltip>\n )}\n {!toolbar.isHidden(\"tags\") && (\n <Tooltip title={toolbar.getLabel(\"tags\") || \"Document Tags\"}>\n <IconButton\n size=\"small\"\n onClick={toolbar.getHandler(\"tags\", onTagsClick)}\n disabled={toolbar.isDisabled(\"tags\")}\n aria-label=\"View document tags\"\n >\n {toolbar.getIcon(\"tags\") || <LocalOffer />}\n </IconButton>\n </Tooltip>\n )}\n {!toolbar.isHidden(\"history\") && (\n <Tooltip\n title={toolbar.getLabel(\"history\") || \"Document History\"}\n >\n <IconButton\n size=\"small\"\n onClick={toolbar.getHandler(\"history\", onHistoryClick)}\n disabled={toolbar.isDisabled(\"history\")}\n aria-label=\"View document history\"\n >\n {toolbar.getIcon(\"history\") || <HistoryIcon />}\n </IconButton>\n </Tooltip>\n )}\n </Stack>\n }\n sx={{ pb: 1 }}\n />\n {isLoading && <LinearProgress sx={{ mx: 3, mb: 1 }} />}\n {error && (\n <Typography color=\"error\" variant=\"body2\" sx={{ px: 3, pb: 1 }}>\n {error}\n </Typography>\n )}\n <Divider />\n <CardContent sx={{ flexGrow: 1, minHeight: 0, p: 0, overflow: \"auto\" }}>\n {content ? (\n <Box\n sx={{\n fontFamily: \"monospace\",\n fontSize: \"0.85rem\",\n p: 2,\n whiteSpace: \"pre\",\n }}\n >\n {lines.map((line, index) => (\n <Box\n key={index}\n sx={{\n minHeight: LINE_HEIGHT,\n lineHeight: `${LINE_HEIGHT}px`,\n }}\n >\n {line || \"\\u00A0\"}\n </Box>\n ))}\n </Box>\n ) : (\n <Box\n sx={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n p: 4,\n minHeight: 200,\n }}\n >\n <Typography variant=\"body2\" color=\"text.secondary\">\n No text content available.\n </Typography>\n </Box>\n )}\n </CardContent>\n </Card>\n </Box>\n );\n};\n"],"mappings":"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","names":[]}
@@ -1,36 +0,0 @@
1
- "use client";
2
-
3
- // src/utils/fileUtils.ts
4
- var getFileExtension = (fileName) => {
5
- const extension = fileName.toLowerCase().split(".").pop();
6
- return extension || "";
7
- };
8
- var getMimeTypeFromExtension = (extension) => {
9
- const mimeTypes = {
10
- "pdf": "application/pdf",
11
- "txt": "text/plain",
12
- "json": "application/json",
13
- "xml": "text/xml",
14
- "csv": "text/csv",
15
- "jpg": "image/jpeg",
16
- "jpeg": "image/jpeg",
17
- "png": "image/png",
18
- "gif": "image/gif",
19
- "svg": "image/svg+xml",
20
- "mp4": "video/mp4",
21
- "webm": "video/webm",
22
- "mp3": "audio/mpeg",
23
- "wav": "audio/wav",
24
- "doc": "application/msword",
25
- "docx": "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
26
- "xls": "application/vnd.ms-excel",
27
- "xlsx": "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
28
- };
29
- return mimeTypes[extension] || "application/octet-stream";
30
- };
31
-
32
- export {
33
- getFileExtension,
34
- getMimeTypeFromExtension
35
- };
36
- //# sourceMappingURL=chunk-KJNOBIUZ.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/utils/fileUtils.ts"],"sourcesContent":["export const getFileExtension = (fileName: string): string => {\n const extension = fileName.toLowerCase().split('.').pop();\n return extension || '';\n};\n\nexport const getMimeTypeFromExtension = (extension: string): string => {\n const mimeTypes: Record<string, string> = {\n 'pdf': 'application/pdf',\n 'txt': 'text/plain',\n 'json': 'application/json',\n 'xml': 'text/xml',\n 'csv': 'text/csv',\n 'jpg': 'image/jpeg',\n 'jpeg': 'image/jpeg',\n 'png': 'image/png',\n 'gif': 'image/gif',\n 'svg': 'image/svg+xml',\n 'mp4': 'video/mp4',\n 'webm': 'video/webm',\n 'mp3': 'audio/mpeg',\n 'wav': 'audio/wav',\n 'doc': 'application/msword',\n 'docx': 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',\n 'xls': 'application/vnd.ms-excel',\n 'xlsx': 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'\n };\n\n return mimeTypes[extension] || 'application/octet-stream';\n};"],"mappings":";;;AAAO,IAAM,mBAAmB,CAAC,aAA6B;AAC5D,QAAM,YAAY,SAAS,YAAY,EAAE,MAAM,GAAG,EAAE,IAAI;AACxD,SAAO,aAAa;AACtB;AAEO,IAAM,2BAA2B,CAAC,cAA8B;AACrE,QAAM,YAAoC;AAAA,IACxC,OAAO;AAAA,IACP,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,OAAO;AAAA,IACP,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,OAAO;AAAA,IACP,OAAO;AAAA,IACP,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,OAAO;AAAA,IACP,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,QAAQ;AAAA,EACV;AAEA,SAAO,UAAU,SAAS,KAAK;AACjC;","names":[]}
@@ -1,424 +0,0 @@
1
- "use client";
2
-
3
- // src/components/viewers/pdf/PDFStyles.tsx
4
- var toolbarStyles = `
5
- @import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600&display=swap');
6
-
7
- * {
8
- font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen',
9
- 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue',
10
- 'Noto Sans Tamil', 'Noto Sans Devanagari', sans-serif !important;
11
- }
12
-
13
- /* Target PDF.js text layer */
14
- .textLayer,
15
- .textLayer span,
16
- .textLayer div,
17
- [class*="pdf"],
18
- [class*="page"],
19
- canvas + div,
20
- .embedpdf-viewport *,
21
- [data-pdf-viewer] *,
22
- [role="document"] * {
23
- font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen',
24
- 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue',
25
- 'Noto Sans Tamil', 'Noto Sans Devanagari', sans-serif !important;
26
- }
27
-
28
- .pdf-viewer-header {
29
- display: flex;
30
- align-items: center;
31
- justify-content: flex-start;
32
- gap: 8px;
33
- padding: 2px 12px 0 12px;
34
- background: #fff;
35
- min-height: 32px;
36
- }
37
- .header-file-name {
38
- font-size: 13px;
39
- font-weight: 500;
40
- color: #374151;
41
- white-space: nowrap;
42
- overflow: hidden;
43
- text-overflow: ellipsis;
44
- max-width: 400px;
45
- }
46
-
47
- /* ========== COMPACT TOOLBAR ========== */
48
- .pdf-viewer-toolbar {
49
- display: flex;
50
- align-items: center;
51
- justify-content: space-between;
52
- padding: 4px 8px;
53
- background: #ffffff;
54
- border-bottom: 1px solid #e5e7eb;
55
- gap: 4px;
56
- flex-wrap: wrap;
57
- min-height: 44px;
58
- }
59
- .toolbar-left {
60
- display: flex;
61
- align-items: center;
62
- gap: 2px;
63
- flex: 0 0 auto;
64
- }
65
- .toolbar-right {
66
- display: flex;
67
- align-items: center;
68
- gap: 2px;
69
- }
70
- .toolbar-section {
71
- display: flex;
72
- align-items: center;
73
- gap: 2px;
74
- padding: 0;
75
- }
76
- .toolbar-separator {
77
- width: 1px;
78
- height: 20px;
79
- background: #e5e7eb;
80
- margin: 0 8px;
81
- flex-shrink: 0;
82
- }
83
-
84
- /* ========== COMPACT BUTTONS ========== */
85
- .toolbar-button {
86
- padding: 6px;
87
- border: none;
88
- background: transparent;
89
- cursor: pointer;
90
- border-radius: 6px;
91
- display: flex;
92
- align-items: center;
93
- justify-content: center;
94
- transition: background-color 0.15s ease;
95
- position: relative;
96
- min-width: 32px;
97
- min-height: 32px;
98
- color: #4b5563;
99
- }
100
- .toolbar-button:hover:not(:disabled) {
101
- background: #f3f4f6;
102
- color: #111827;
103
- }
104
- .toolbar-button:active:not(:disabled) {
105
- background: #e5e7eb;
106
- }
107
- .toolbar-button:disabled {
108
- opacity: 0.4;
109
- cursor: not-allowed;
110
- }
111
- .toolbar-button svg {
112
- width: 18px;
113
- height: 18px;
114
- display: block;
115
- }
116
- .toolbar-button-active {
117
- background: #eff6ff !important;
118
- color: #2563eb !important;
119
- }
120
- .toolbar-button-active:hover:not(:disabled) {
121
- background: #dbeafe !important;
122
- }
123
-
124
- /* ========== PAGE NAVIGATION ========== */
125
- .page-input {
126
- width: 44px;
127
- padding: 4px 6px;
128
- border: 1px solid #d1d5db;
129
- border-radius: 6px;
130
- text-align: center;
131
- font-size: 13px;
132
- font-weight: 500;
133
- color: #374151;
134
- background: #fff;
135
- transition: border-color 0.15s ease, box-shadow 0.15s ease;
136
- }
137
- .page-input:focus {
138
- outline: none;
139
- border-color: #3b82f6;
140
- box-shadow: 0 0 0 2px rgba(59, 130, 246, 0.2);
141
- }
142
- .page-info {
143
- font-size: 13px;
144
- color: #6b7280;
145
- white-space: nowrap;
146
- font-weight: 500;
147
- }
148
-
149
- /* ========== ZOOM DISPLAY ========== */
150
- .zoom-display {
151
- min-width: 48px;
152
- text-align: center;
153
- font-size: 13px;
154
- font-weight: 500;
155
- color: #374151;
156
- padding: 4px 8px;
157
- background: #f9fafb;
158
- border-radius: 6px;
159
- border: 1px solid #e5e7eb;
160
- }
161
-
162
- .search-input {
163
- padding: 6px 10px;
164
- border: 1px solid #d1d5db;
165
- border-radius: 6px;
166
- font-size: 13px;
167
- min-width: 180px;
168
- transition: border-color 0.15s ease, box-shadow 0.15s ease;
169
- }
170
- .search-input:focus {
171
- outline: none;
172
- border-color: #3b82f6;
173
- box-shadow: 0 0 0 2px rgba(59, 130, 246, 0.2);
174
- }
175
-
176
- /* ========== VIEWER CONTENT ========== */
177
- .pdf-viewer-content {
178
- flex: 1;
179
- overflow: hidden;
180
- position: relative;
181
- user-select: text;
182
- -webkit-user-select: text;
183
- -moz-user-select: text;
184
- -ms-user-select: text;
185
- background-color: #efefef;
186
- }
187
- .pdf-viewer-container {
188
- display: flex;
189
- flex-direction: column;
190
- height: 100%;
191
- width: 100%;
192
- background-color: #efefef;
193
- }
194
- .pdf-viewer-main {
195
- display: flex;
196
- flex: 1;
197
- overflow: hidden;
198
- position: relative;
199
- background-color: #efefef;
200
- }
201
- .pdf-viewer-viewer-area {
202
- flex: 1;
203
- overflow: hidden;
204
- position: relative;
205
- background-color: #efefef; /* Ensure background matches viewer gray */
206
- }
207
-
208
- /* Override library's inline userSelect: none */
209
- .pdf-viewer-viewer-area div[style*="userSelect"] {
210
- user-select: auto !important;
211
- }
212
-
213
- /* ========== PRINT DROPDOWN ========== */
214
- .print-dropdown-container {
215
- position: relative;
216
- display: inline-flex;
217
- }
218
- .print-dropdown-trigger {
219
- display: flex;
220
- align-items: center;
221
- gap: 2px;
222
- }
223
- .print-dropdown-menu {
224
- position: absolute;
225
- top: 100%;
226
- right: 0;
227
- margin-top: 4px;
228
- background: #ffffff;
229
- border: 1px solid #e5e7eb;
230
- border-radius: 8px;
231
- box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
232
- min-width: 200px;
233
- z-index: 1000;
234
- overflow: hidden;
235
- }
236
- .print-dropdown-item {
237
- display: block;
238
- width: 100%;
239
- padding: 10px 14px;
240
- border: none;
241
- background: transparent;
242
- text-align: left;
243
- font-size: 13px;
244
- font-weight: 500;
245
- color: #374151;
246
- cursor: pointer;
247
- transition: background-color 0.15s ease;
248
- }
249
- .print-dropdown-item:hover {
250
- background: #f3f4f6;
251
- }
252
- .print-dropdown-item:active {
253
- background: #e5e7eb;
254
- }
255
- .print-dropdown-item + .print-dropdown-item {
256
- border-top: 1px solid #f3f4f6;
257
- }
258
-
259
- /* ========== TOOLBAR DROPDOWN (Annotation Menu) ========== */
260
- .toolbar-dropdown-container {
261
- position: relative;
262
- display: inline-flex;
263
- }
264
- .toolbar-dropdown-button {
265
- display: flex;
266
- align-items: center;
267
- gap: 2px;
268
- }
269
- .toolbar-dropdown-menu {
270
- position: absolute;
271
- top: 100%;
272
- left: 0;
273
- margin-top: 4px;
274
- background: #ffffff;
275
- border: 1px solid #e5e7eb;
276
- border-radius: 8px;
277
- box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
278
- min-width: 150px;
279
- z-index: 1000;
280
- overflow: hidden;
281
- }
282
- .toolbar-dropdown-menu-right {
283
- left: auto;
284
- right: 0;
285
- }
286
- .toolbar-dropdown-item {
287
- display: flex;
288
- align-items: center;
289
- gap: 8px;
290
- width: 100%;
291
- padding: 10px 14px;
292
- border: none;
293
- background: transparent;
294
- text-align: left;
295
- font-size: 13px;
296
- font-weight: 500;
297
- color: #374151;
298
- cursor: pointer;
299
- transition: background-color 0.15s ease;
300
- }
301
- .toolbar-dropdown-item:hover {
302
- background: #f3f4f6;
303
- }
304
- .toolbar-dropdown-item:active {
305
- background: #e5e7eb;
306
- }
307
- .toolbar-dropdown-item:disabled {
308
- opacity: 0.5;
309
- cursor: not-allowed;
310
- }
311
- .toolbar-dropdown-item + .toolbar-dropdown-item {
312
- border-top: 1px solid #f3f4f6;
313
- }
314
- .toolbar-dropdown-item svg {
315
- font-size: 18px;
316
- color: #6b7280;
317
- }
318
- .toolbar-dropdown-item-active {
319
- background: #eff6ff;
320
- color: #2563eb;
321
- }
322
- .toolbar-dropdown-item-active svg {
323
- color: #2563eb;
324
- }
325
- .toolbar-dropdown-divider {
326
- height: 1px;
327
- background: #e5e7eb;
328
- margin: 4px 0;
329
- }
330
-
331
-
332
-
333
- /* ========== TOOLTIP STYLES ========== */
334
- .toolbar-button[title]:hover::after {
335
- content: attr(title);
336
- position: absolute;
337
- bottom: -32px;
338
- left: 50%;
339
- transform: translateX(-50%);
340
- padding: 6px 10px;
341
- background: #1f2937;
342
- color: white;
343
- font-size: 12px;
344
- font-weight: 500;
345
- border-radius: 6px;
346
- white-space: nowrap;
347
- z-index: 1000;
348
- pointer-events: none;
349
- opacity: 0;
350
- animation: fadeIn 0.2s ease-out 0.3s forwards;
351
- }
352
- @keyframes fadeIn {
353
- to { opacity: 1; }
354
- }
355
- /* ========== SECONDARY TOOLBAR & TABS ========== */
356
- .pdf-viewer-toolbar-container {
357
- display: flex;
358
- flex-direction: column;
359
- width: 100%;
360
- }
361
-
362
- .pdf-viewer-secondary-toolbar {
363
- display: flex;
364
- align-items: center;
365
- justify-content: center;
366
- padding: 8px 16px;
367
- background-color: #f9fafb;
368
- border-bottom: 1px solid #e5e7eb;
369
- gap: 12px;
370
- width: 100%;
371
- box-shadow: inset 0 2px 4px rgba(0,0,0,0.02);
372
- animation: slideDown 0.2s ease-out;
373
- transform-origin: top;
374
- }
375
-
376
- @keyframes slideDown {
377
- from { opacity: 0; transform: scaleY(0.95); }
378
- to { opacity: 1; transform: scaleY(1); }
379
- }
380
-
381
- .toolbar-center {
382
- display: flex;
383
- align-items: center;
384
- gap: 4px;
385
- flex: 1 1 auto;
386
- justify-content: center;
387
- }
388
-
389
- .toolbar-tab {
390
- background: none;
391
- border: none;
392
- padding: 6px 12px;
393
- font-size: 14px;
394
- font-weight: 500;
395
- color: #6b7280;
396
- cursor: pointer;
397
- border-radius: 6px;
398
- transition: all 0.2s ease;
399
- }
400
-
401
- .toolbar-tab:hover {
402
- background-color: #f3f4f6;
403
- color: #374151;
404
- }
405
-
406
- .toolbar-tab-active {
407
- color: #2563eb;
408
- background-color: #eff6ff;
409
- font-weight: 600;
410
- }
411
- .toolbar-dropdown-header {
412
- font-size: 11px;
413
- font-weight: 600;
414
- color: #6b7280;
415
- padding: 8px 12px 4px 12px;
416
- letter-spacing: 0.5px;
417
- text-transform: uppercase;
418
- }
419
- `;
420
-
421
- export {
422
- toolbarStyles
423
- };
424
- //# sourceMappingURL=chunk-KQCU7XW2.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/viewers/pdf/PDFStyles.tsx"],"sourcesContent":["export const toolbarStyles = `\n @import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600&display=swap');\n\n * {\n font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen',\n 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue',\n 'Noto Sans Tamil', 'Noto Sans Devanagari', sans-serif !important;\n }\n\n /* Target PDF.js text layer */\n .textLayer,\n .textLayer span,\n .textLayer div,\n [class*=\"pdf\"],\n [class*=\"page\"],\n canvas + div,\n .embedpdf-viewport *,\n [data-pdf-viewer] *,\n [role=\"document\"] * {\n font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen',\n 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue',\n 'Noto Sans Tamil', 'Noto Sans Devanagari', sans-serif !important;\n }\n\n .pdf-viewer-header {\n display: flex;\n align-items: center;\n justify-content: flex-start;\n gap: 8px;\n padding: 2px 12px 0 12px;\n background: #fff;\n min-height: 32px;\n }\n .header-file-name {\n font-size: 13px;\n font-weight: 500;\n color: #374151;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n max-width: 400px;\n }\n\n /* ========== COMPACT TOOLBAR ========== */\n .pdf-viewer-toolbar {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 4px 8px;\n background: #ffffff;\n border-bottom: 1px solid #e5e7eb;\n gap: 4px;\n flex-wrap: wrap;\n min-height: 44px;\n }\n .toolbar-left {\n display: flex;\n align-items: center;\n gap: 2px;\n flex: 0 0 auto;\n }\n .toolbar-right {\n display: flex;\n align-items: center;\n gap: 2px;\n }\n .toolbar-section {\n display: flex;\n align-items: center;\n gap: 2px;\n padding: 0;\n }\n .toolbar-separator {\n width: 1px;\n height: 20px;\n background: #e5e7eb;\n margin: 0 8px;\n flex-shrink: 0;\n }\n\n /* ========== COMPACT BUTTONS ========== */\n .toolbar-button {\n padding: 6px;\n border: none;\n background: transparent;\n cursor: pointer;\n border-radius: 6px;\n display: flex;\n align-items: center;\n justify-content: center;\n transition: background-color 0.15s ease;\n position: relative;\n min-width: 32px;\n min-height: 32px;\n color: #4b5563;\n }\n .toolbar-button:hover:not(:disabled) {\n background: #f3f4f6;\n color: #111827;\n }\n .toolbar-button:active:not(:disabled) {\n background: #e5e7eb;\n }\n .toolbar-button:disabled {\n opacity: 0.4;\n cursor: not-allowed;\n }\n .toolbar-button svg {\n width: 18px;\n height: 18px;\n display: block;\n }\n .toolbar-button-active {\n background: #eff6ff !important;\n color: #2563eb !important;\n }\n .toolbar-button-active:hover:not(:disabled) {\n background: #dbeafe !important;\n }\n\n /* ========== PAGE NAVIGATION ========== */\n .page-input {\n width: 44px;\n padding: 4px 6px;\n border: 1px solid #d1d5db;\n border-radius: 6px;\n text-align: center;\n font-size: 13px;\n font-weight: 500;\n color: #374151;\n background: #fff;\n transition: border-color 0.15s ease, box-shadow 0.15s ease;\n }\n .page-input:focus {\n outline: none;\n border-color: #3b82f6;\n box-shadow: 0 0 0 2px rgba(59, 130, 246, 0.2);\n }\n .page-info {\n font-size: 13px;\n color: #6b7280;\n white-space: nowrap;\n font-weight: 500;\n }\n\n /* ========== ZOOM DISPLAY ========== */\n .zoom-display {\n min-width: 48px;\n text-align: center;\n font-size: 13px;\n font-weight: 500;\n color: #374151;\n padding: 4px 8px;\n background: #f9fafb;\n border-radius: 6px;\n border: 1px solid #e5e7eb;\n }\n\n .search-input {\n padding: 6px 10px;\n border: 1px solid #d1d5db;\n border-radius: 6px;\n font-size: 13px;\n min-width: 180px;\n transition: border-color 0.15s ease, box-shadow 0.15s ease;\n }\n .search-input:focus {\n outline: none;\n border-color: #3b82f6;\n box-shadow: 0 0 0 2px rgba(59, 130, 246, 0.2);\n }\n\n /* ========== VIEWER CONTENT ========== */\n .pdf-viewer-content {\n flex: 1;\n overflow: hidden;\n position: relative;\n user-select: text;\n -webkit-user-select: text;\n -moz-user-select: text;\n -ms-user-select: text;\n background-color: #efefef;\n }\n .pdf-viewer-container {\n display: flex;\n flex-direction: column;\n height: 100%;\n width: 100%;\n background-color: #efefef;\n }\n .pdf-viewer-main {\n display: flex;\n flex: 1;\n overflow: hidden;\n position: relative;\n background-color: #efefef;\n }\n .pdf-viewer-viewer-area {\n flex: 1;\n overflow: hidden;\n position: relative;\n background-color: #efefef; /* Ensure background matches viewer gray */\n }\n \n /* Override library's inline userSelect: none */\n .pdf-viewer-viewer-area div[style*=\"userSelect\"] {\n user-select: auto !important;\n }\n\n /* ========== PRINT DROPDOWN ========== */\n .print-dropdown-container {\n position: relative;\n display: inline-flex;\n }\n .print-dropdown-trigger {\n display: flex;\n align-items: center;\n gap: 2px;\n }\n .print-dropdown-menu {\n position: absolute;\n top: 100%;\n right: 0;\n margin-top: 4px;\n background: #ffffff;\n border: 1px solid #e5e7eb;\n border-radius: 8px;\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);\n min-width: 200px;\n z-index: 1000;\n overflow: hidden;\n }\n .print-dropdown-item {\n display: block;\n width: 100%;\n padding: 10px 14px;\n border: none;\n background: transparent;\n text-align: left;\n font-size: 13px;\n font-weight: 500;\n color: #374151;\n cursor: pointer;\n transition: background-color 0.15s ease;\n }\n .print-dropdown-item:hover {\n background: #f3f4f6;\n }\n .print-dropdown-item:active {\n background: #e5e7eb;\n }\n .print-dropdown-item + .print-dropdown-item {\n border-top: 1px solid #f3f4f6;\n }\n\n /* ========== TOOLBAR DROPDOWN (Annotation Menu) ========== */\n .toolbar-dropdown-container {\n position: relative;\n display: inline-flex;\n }\n .toolbar-dropdown-button {\n display: flex;\n align-items: center;\n gap: 2px;\n }\n .toolbar-dropdown-menu {\n position: absolute;\n top: 100%;\n left: 0;\n margin-top: 4px;\n background: #ffffff;\n border: 1px solid #e5e7eb;\n border-radius: 8px;\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);\n min-width: 150px;\n z-index: 1000;\n overflow: hidden;\n }\n .toolbar-dropdown-menu-right {\n left: auto;\n right: 0;\n }\n .toolbar-dropdown-item {\n display: flex;\n align-items: center;\n gap: 8px;\n width: 100%;\n padding: 10px 14px;\n border: none;\n background: transparent;\n text-align: left;\n font-size: 13px;\n font-weight: 500;\n color: #374151;\n cursor: pointer;\n transition: background-color 0.15s ease;\n }\n .toolbar-dropdown-item:hover {\n background: #f3f4f6;\n }\n .toolbar-dropdown-item:active {\n background: #e5e7eb;\n }\n .toolbar-dropdown-item:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n }\n .toolbar-dropdown-item + .toolbar-dropdown-item {\n border-top: 1px solid #f3f4f6;\n }\n .toolbar-dropdown-item svg {\n font-size: 18px;\n color: #6b7280;\n }\n .toolbar-dropdown-item-active {\n background: #eff6ff;\n color: #2563eb;\n }\n .toolbar-dropdown-item-active svg {\n color: #2563eb;\n }\n .toolbar-dropdown-divider {\n height: 1px;\n background: #e5e7eb;\n margin: 4px 0;\n }\n\n\n\n /* ========== TOOLTIP STYLES ========== */\n .toolbar-button[title]:hover::after {\n content: attr(title);\n position: absolute;\n bottom: -32px;\n left: 50%;\n transform: translateX(-50%);\n padding: 6px 10px;\n background: #1f2937;\n color: white;\n font-size: 12px;\n font-weight: 500;\n border-radius: 6px;\n white-space: nowrap;\n z-index: 1000;\n pointer-events: none;\n opacity: 0;\n animation: fadeIn 0.2s ease-out 0.3s forwards;\n }\n @keyframes fadeIn {\n to { opacity: 1; }\n }\n /* ========== SECONDARY TOOLBAR & TABS ========== */\n .pdf-viewer-toolbar-container {\n display: flex;\n flex-direction: column;\n width: 100%;\n }\n\n .pdf-viewer-secondary-toolbar {\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 8px 16px;\n background-color: #f9fafb;\n border-bottom: 1px solid #e5e7eb;\n gap: 12px;\n width: 100%;\n box-shadow: inset 0 2px 4px rgba(0,0,0,0.02);\n animation: slideDown 0.2s ease-out;\n transform-origin: top;\n }\n\n @keyframes slideDown {\n from { opacity: 0; transform: scaleY(0.95); }\n to { opacity: 1; transform: scaleY(1); }\n }\n\n .toolbar-center {\n display: flex;\n align-items: center;\n gap: 4px;\n flex: 1 1 auto;\n justify-content: center;\n }\n\n .toolbar-tab {\n background: none;\n border: none;\n padding: 6px 12px;\n font-size: 14px;\n font-weight: 500;\n color: #6b7280;\n cursor: pointer;\n border-radius: 6px;\n transition: all 0.2s ease;\n }\n\n .toolbar-tab:hover {\n background-color: #f3f4f6;\n color: #374151;\n }\n\n .toolbar-tab-active {\n color: #2563eb;\n background-color: #eff6ff;\n font-weight: 600;\n }\n .toolbar-dropdown-header {\n font-size: 11px;\n font-weight: 600;\n color: #6b7280;\n padding: 8px 12px 4px 12px;\n letter-spacing: 0.5px;\n text-transform: uppercase;\n }\n`;"],"mappings":";;;AAAO,IAAM,gBAAgB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;","names":[]}