viewdoc 0.1.1 → 0.2.1
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/README.md +7 -3
- package/dist/DocxViewer-HQFSWXQW.js +8 -0
- package/dist/DocxViewer-HQFSWXQW.js.map +1 -0
- package/dist/PdfViewer-YJOHTAPL.js +8 -0
- package/dist/PdfViewer-YJOHTAPL.js.map +1 -0
- package/dist/XlsxViewer-SQMAF5UA.js +8 -0
- package/dist/XlsxViewer-SQMAF5UA.js.map +1 -0
- package/dist/chunk-EQCFZMLL.js +114 -0
- package/dist/chunk-EQCFZMLL.js.map +1 -0
- package/dist/chunk-LE4YTMPN.js +135 -0
- package/dist/chunk-LE4YTMPN.js.map +1 -0
- package/dist/chunk-OA35SYM6.js +432 -0
- package/dist/chunk-OA35SYM6.js.map +1 -0
- package/dist/chunk-US2KTONG.js +174 -0
- package/dist/chunk-US2KTONG.js.map +1 -0
- package/dist/docx.cjs +570 -0
- package/dist/docx.cjs.map +1 -0
- package/dist/docx.d.cts +43 -0
- package/dist/docx.d.ts +43 -0
- package/dist/docx.js +8 -0
- package/dist/docx.js.map +1 -0
- package/dist/index.cjs +277 -138
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +9 -150
- package/dist/index.d.ts +9 -150
- package/dist/index.js +36 -827
- package/dist/index.js.map +1 -1
- package/dist/pdf.cjs +631 -0
- package/dist/pdf.cjs.map +1 -0
- package/dist/pdf.d.cts +45 -0
- package/dist/pdf.d.ts +45 -0
- package/dist/pdf.js +8 -0
- package/dist/pdf.js.map +1 -0
- package/dist/styles.css +5 -0
- package/dist/styles.css.map +1 -1
- package/dist/useDraggable-QvFR-4DD.d.cts +33 -0
- package/dist/useDraggable-QvFR-4DD.d.ts +33 -0
- package/dist/xlsx.cjs +591 -0
- package/dist/xlsx.cjs.map +1 -0
- package/dist/xlsx.d.cts +43 -0
- package/dist/xlsx.d.ts +43 -0
- package/dist/xlsx.js +8 -0
- package/dist/xlsx.js.map +1 -0
- package/package.json +16 -1
- package/dist/styles.d.cts +0 -2
- package/dist/styles.d.ts +0 -2
package/dist/index.cjs
CHANGED
|
@@ -5,6 +5,9 @@ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
|
5
5
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
6
|
var __getProtoOf = Object.getPrototypeOf;
|
|
7
7
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
+
var __esm = (fn, res) => function __init() {
|
|
9
|
+
return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res;
|
|
10
|
+
};
|
|
8
11
|
var __export = (target, all) => {
|
|
9
12
|
for (var name in all)
|
|
10
13
|
__defProp(target, name, { get: all[name], enumerable: true });
|
|
@@ -27,28 +30,7 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
|
|
|
27
30
|
));
|
|
28
31
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
29
32
|
|
|
30
|
-
// src/index.ts
|
|
31
|
-
var index_exports = {};
|
|
32
|
-
__export(index_exports, {
|
|
33
|
-
DocViewer: () => DocViewer,
|
|
34
|
-
DocxViewer: () => DocxViewer,
|
|
35
|
-
ImageViewer: () => ImageViewer,
|
|
36
|
-
PdfViewer: () => PdfViewer,
|
|
37
|
-
Toolbar: () => Toolbar,
|
|
38
|
-
ViewerShell: () => ViewerShell,
|
|
39
|
-
XlsxViewer: () => XlsxViewer,
|
|
40
|
-
detectFileType: () => detectFileType,
|
|
41
|
-
getUrlExtension: () => getUrlExtension,
|
|
42
|
-
useDraggable: () => useDraggable,
|
|
43
|
-
useZoomPan: () => useZoomPan
|
|
44
|
-
});
|
|
45
|
-
module.exports = __toCommonJS(index_exports);
|
|
46
|
-
|
|
47
|
-
// src/core/ViewerShell.tsx
|
|
48
|
-
var import_react2 = require("react");
|
|
49
|
-
|
|
50
33
|
// src/core/useDraggable.ts
|
|
51
|
-
var import_react = require("react");
|
|
52
34
|
function useDraggable(options = {}) {
|
|
53
35
|
const { defaultPosition = { x: 80, y: 80 }, draggable = true } = options;
|
|
54
36
|
const [position, setPosition] = (0, import_react.useState)(defaultPosition);
|
|
@@ -77,9 +59,15 @@ function useDraggable(options = {}) {
|
|
|
77
59
|
);
|
|
78
60
|
return { position, onDragHandlePointerDown };
|
|
79
61
|
}
|
|
62
|
+
var import_react;
|
|
63
|
+
var init_useDraggable = __esm({
|
|
64
|
+
"src/core/useDraggable.ts"() {
|
|
65
|
+
"use strict";
|
|
66
|
+
import_react = require("react");
|
|
67
|
+
}
|
|
68
|
+
});
|
|
80
69
|
|
|
81
70
|
// src/core/icons.tsx
|
|
82
|
-
var import_jsx_runtime = require("react/jsx-runtime");
|
|
83
71
|
function Svg(props) {
|
|
84
72
|
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
85
73
|
"svg",
|
|
@@ -152,9 +140,15 @@ function FullscreenExitIcon() {
|
|
|
152
140
|
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("line", { x1: "15", y1: "15", x2: "21", y2: "21" })
|
|
153
141
|
] });
|
|
154
142
|
}
|
|
143
|
+
var import_jsx_runtime;
|
|
144
|
+
var init_icons = __esm({
|
|
145
|
+
"src/core/icons.tsx"() {
|
|
146
|
+
"use strict";
|
|
147
|
+
import_jsx_runtime = require("react/jsx-runtime");
|
|
148
|
+
}
|
|
149
|
+
});
|
|
155
150
|
|
|
156
151
|
// src/core/Toolbar.tsx
|
|
157
|
-
var import_jsx_runtime2 = require("react/jsx-runtime");
|
|
158
152
|
function Toolbar({
|
|
159
153
|
scale,
|
|
160
154
|
onZoomIn,
|
|
@@ -234,17 +228,16 @@ function Toolbar({
|
|
|
234
228
|
)
|
|
235
229
|
] });
|
|
236
230
|
}
|
|
231
|
+
var import_jsx_runtime2;
|
|
232
|
+
var init_Toolbar = __esm({
|
|
233
|
+
"src/core/Toolbar.tsx"() {
|
|
234
|
+
"use strict";
|
|
235
|
+
init_icons();
|
|
236
|
+
import_jsx_runtime2 = require("react/jsx-runtime");
|
|
237
|
+
}
|
|
238
|
+
});
|
|
237
239
|
|
|
238
240
|
// src/core/theme.ts
|
|
239
|
-
var THEME_VAR_MAP = {
|
|
240
|
-
background: "--vd-bg",
|
|
241
|
-
toolbarBackground: "--vd-toolbar-bg",
|
|
242
|
-
toolbarBorderColor: "--vd-toolbar-border-color",
|
|
243
|
-
toolbarButtonHoverBackground: "--vd-toolbar-btn-hover-bg",
|
|
244
|
-
textColor: "--vd-text-color",
|
|
245
|
-
borderRadius: "--vd-border-radius",
|
|
246
|
-
toolbarButtonRadius: "--vd-toolbar-btn-radius"
|
|
247
|
-
};
|
|
248
241
|
function themeToStyle(theme) {
|
|
249
242
|
if (!theme) return void 0;
|
|
250
243
|
const style = {};
|
|
@@ -254,9 +247,23 @@ function themeToStyle(theme) {
|
|
|
254
247
|
}
|
|
255
248
|
return style;
|
|
256
249
|
}
|
|
250
|
+
var THEME_VAR_MAP;
|
|
251
|
+
var init_theme = __esm({
|
|
252
|
+
"src/core/theme.ts"() {
|
|
253
|
+
"use strict";
|
|
254
|
+
THEME_VAR_MAP = {
|
|
255
|
+
background: "--vd-bg",
|
|
256
|
+
toolbarBackground: "--vd-toolbar-bg",
|
|
257
|
+
toolbarBorderColor: "--vd-toolbar-border-color",
|
|
258
|
+
toolbarButtonHoverBackground: "--vd-toolbar-btn-hover-bg",
|
|
259
|
+
textColor: "--vd-text-color",
|
|
260
|
+
borderRadius: "--vd-border-radius",
|
|
261
|
+
toolbarButtonRadius: "--vd-toolbar-btn-radius"
|
|
262
|
+
};
|
|
263
|
+
}
|
|
264
|
+
});
|
|
257
265
|
|
|
258
266
|
// src/core/ViewerShell.tsx
|
|
259
|
-
var import_jsx_runtime3 = require("react/jsx-runtime");
|
|
260
267
|
function ViewerShell({
|
|
261
268
|
zoomPan,
|
|
262
269
|
onDownload,
|
|
@@ -353,12 +360,20 @@ function ViewerShell({
|
|
|
353
360
|
}
|
|
354
361
|
);
|
|
355
362
|
}
|
|
363
|
+
var import_react2, import_jsx_runtime3;
|
|
364
|
+
var init_ViewerShell = __esm({
|
|
365
|
+
"src/core/ViewerShell.tsx"() {
|
|
366
|
+
"use strict";
|
|
367
|
+
import_react2 = require("react");
|
|
368
|
+
init_useDraggable();
|
|
369
|
+
init_icons();
|
|
370
|
+
init_Toolbar();
|
|
371
|
+
init_theme();
|
|
372
|
+
import_jsx_runtime3 = require("react/jsx-runtime");
|
|
373
|
+
}
|
|
374
|
+
});
|
|
356
375
|
|
|
357
376
|
// src/core/useZoomPan.ts
|
|
358
|
-
var import_react3 = require("react");
|
|
359
|
-
var DEFAULT_MIN = 0.1;
|
|
360
|
-
var DEFAULT_MAX = 8;
|
|
361
|
-
var DEFAULT_STEP = 0.25;
|
|
362
377
|
function useZoomPan(options = {}) {
|
|
363
378
|
const {
|
|
364
379
|
minScale = DEFAULT_MIN,
|
|
@@ -468,68 +483,22 @@ function useZoomPan(options = {}) {
|
|
|
468
483
|
handlers: { onWheel, onPointerDown, onPointerMove, onPointerUp }
|
|
469
484
|
};
|
|
470
485
|
}
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
document.body.removeChild(link);
|
|
482
|
-
}
|
|
483
|
-
function ImageViewer({
|
|
484
|
-
uri,
|
|
485
|
-
fileName,
|
|
486
|
-
className,
|
|
487
|
-
style,
|
|
488
|
-
width,
|
|
489
|
-
height,
|
|
490
|
-
minScale,
|
|
491
|
-
maxScale,
|
|
492
|
-
zoomStep,
|
|
493
|
-
enableZoomControls = true,
|
|
494
|
-
enableWheelZoom = true,
|
|
495
|
-
enablePan = true,
|
|
496
|
-
enableFullscreen = true,
|
|
497
|
-
enableDownload = true,
|
|
498
|
-
onDownload,
|
|
499
|
-
theme,
|
|
500
|
-
floating = true,
|
|
501
|
-
windowDraggable = true,
|
|
502
|
-
defaultPosition
|
|
503
|
-
}) {
|
|
504
|
-
const zoomPan = useZoomPan({ minScale, maxScale, zoomStep, enablePan, enableWheelZoom });
|
|
505
|
-
const handleDownload = enableDownload ? onDownload ?? (() => defaultDownload(uri, fileName)) : void 0;
|
|
506
|
-
const wrapperStyle = floating ? { ...style } : { display: "flex", alignItems: "center", justifyContent: "center", width: "100%", height: "100%", ...style };
|
|
507
|
-
return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("div", { className, style: wrapperStyle, children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
|
|
508
|
-
ViewerShell,
|
|
509
|
-
{
|
|
510
|
-
zoomPan,
|
|
511
|
-
onDownload: handleDownload,
|
|
512
|
-
enableZoomControls,
|
|
513
|
-
enableFullscreen,
|
|
514
|
-
enablePan,
|
|
515
|
-
theme,
|
|
516
|
-
width,
|
|
517
|
-
height,
|
|
518
|
-
floating,
|
|
519
|
-
draggable: windowDraggable,
|
|
520
|
-
defaultPosition,
|
|
521
|
-
children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("img", { className: "vd-image", src: uri, alt: fileName ?? "document image", draggable: false })
|
|
522
|
-
}
|
|
523
|
-
) });
|
|
524
|
-
}
|
|
486
|
+
var import_react3, DEFAULT_MIN, DEFAULT_MAX, DEFAULT_STEP;
|
|
487
|
+
var init_useZoomPan = __esm({
|
|
488
|
+
"src/core/useZoomPan.ts"() {
|
|
489
|
+
"use strict";
|
|
490
|
+
import_react3 = require("react");
|
|
491
|
+
DEFAULT_MIN = 0.1;
|
|
492
|
+
DEFAULT_MAX = 8;
|
|
493
|
+
DEFAULT_STEP = 0.25;
|
|
494
|
+
}
|
|
495
|
+
});
|
|
525
496
|
|
|
526
497
|
// src/viewers/PdfPage.tsx
|
|
527
|
-
var import_react4 = require("react");
|
|
528
|
-
var import_jsx_runtime5 = require("react/jsx-runtime");
|
|
529
498
|
function PdfPage({ doc, pageNumber, renderScale = 1.5 }) {
|
|
530
|
-
const canvasRef = (0,
|
|
531
|
-
const renderTaskRef = (0,
|
|
532
|
-
(0,
|
|
499
|
+
const canvasRef = (0, import_react5.useRef)(null);
|
|
500
|
+
const renderTaskRef = (0, import_react5.useRef)(null);
|
|
501
|
+
(0, import_react5.useEffect)(() => {
|
|
533
502
|
let cancelled = false;
|
|
534
503
|
doc.getPage(pageNumber).then((page) => {
|
|
535
504
|
if (cancelled) return;
|
|
@@ -554,17 +523,21 @@ function PdfPage({ doc, pageNumber, renderScale = 1.5 }) {
|
|
|
554
523
|
}, [doc, pageNumber, renderScale]);
|
|
555
524
|
return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("canvas", { ref: canvasRef, className: "vd-pdf-page", "data-page-number": pageNumber });
|
|
556
525
|
}
|
|
526
|
+
var import_react5, import_jsx_runtime5;
|
|
527
|
+
var init_PdfPage = __esm({
|
|
528
|
+
"src/viewers/PdfPage.tsx"() {
|
|
529
|
+
"use strict";
|
|
530
|
+
import_react5 = require("react");
|
|
531
|
+
import_jsx_runtime5 = require("react/jsx-runtime");
|
|
532
|
+
}
|
|
533
|
+
});
|
|
557
534
|
|
|
558
535
|
// src/viewers/usePdfDocument.ts
|
|
559
|
-
var import_react5 = require("react");
|
|
560
|
-
var pdfjsLib = __toESM(require("pdfjs-dist"), 1);
|
|
561
|
-
var import_meta = {};
|
|
562
|
-
pdfjsLib.GlobalWorkerOptions.workerSrc = new URL("pdfjs-dist/build/pdf.worker.min.mjs", import_meta.url).toString();
|
|
563
536
|
function usePdfDocument(uri) {
|
|
564
|
-
const [doc, setDoc] = (0,
|
|
565
|
-
const [error, setError] = (0,
|
|
566
|
-
const [loading, setLoading] = (0,
|
|
567
|
-
(0,
|
|
537
|
+
const [doc, setDoc] = (0, import_react6.useState)(null);
|
|
538
|
+
const [error, setError] = (0, import_react6.useState)(null);
|
|
539
|
+
const [loading, setLoading] = (0, import_react6.useState)(true);
|
|
540
|
+
(0, import_react6.useEffect)(() => {
|
|
568
541
|
let cancelled = false;
|
|
569
542
|
setLoading(true);
|
|
570
543
|
setError(null);
|
|
@@ -587,12 +560,21 @@ function usePdfDocument(uri) {
|
|
|
587
560
|
}, [uri]);
|
|
588
561
|
return { doc, numPages: doc?.numPages ?? 0, error, loading };
|
|
589
562
|
}
|
|
563
|
+
var import_react6, pdfjsLib, import_meta;
|
|
564
|
+
var init_usePdfDocument = __esm({
|
|
565
|
+
"src/viewers/usePdfDocument.ts"() {
|
|
566
|
+
"use strict";
|
|
567
|
+
import_react6 = require("react");
|
|
568
|
+
pdfjsLib = __toESM(require("pdfjs-dist"), 1);
|
|
569
|
+
import_meta = {};
|
|
570
|
+
pdfjsLib.GlobalWorkerOptions.workerSrc = new URL("pdfjs-dist/build/pdf.worker.min.mjs", import_meta.url).toString();
|
|
571
|
+
}
|
|
572
|
+
});
|
|
590
573
|
|
|
591
574
|
// src/viewers/useVisiblePage.ts
|
|
592
|
-
var import_react6 = require("react");
|
|
593
575
|
function useVisiblePage(containerRef, numPages) {
|
|
594
|
-
const [currentPage, setCurrentPage] = (0,
|
|
595
|
-
(0,
|
|
576
|
+
const [currentPage, setCurrentPage] = (0, import_react7.useState)(1);
|
|
577
|
+
(0, import_react7.useEffect)(() => {
|
|
596
578
|
const root = containerRef.current;
|
|
597
579
|
if (!root || numPages === 0) return;
|
|
598
580
|
const observer = new IntersectionObserver(
|
|
@@ -611,9 +593,19 @@ function useVisiblePage(containerRef, numPages) {
|
|
|
611
593
|
}, [containerRef, numPages]);
|
|
612
594
|
return currentPage;
|
|
613
595
|
}
|
|
596
|
+
var import_react7;
|
|
597
|
+
var init_useVisiblePage = __esm({
|
|
598
|
+
"src/viewers/useVisiblePage.ts"() {
|
|
599
|
+
"use strict";
|
|
600
|
+
import_react7 = require("react");
|
|
601
|
+
}
|
|
602
|
+
});
|
|
614
603
|
|
|
615
604
|
// src/viewers/PdfViewer.tsx
|
|
616
|
-
var
|
|
605
|
+
var PdfViewer_exports = {};
|
|
606
|
+
__export(PdfViewer_exports, {
|
|
607
|
+
PdfViewer: () => PdfViewer
|
|
608
|
+
});
|
|
617
609
|
function defaultDownload2(uri, fileName) {
|
|
618
610
|
const link = document.createElement("a");
|
|
619
611
|
link.href = uri;
|
|
@@ -678,8 +670,8 @@ function PdfViewer({
|
|
|
678
670
|
numPages
|
|
679
671
|
] }) : void 0,
|
|
680
672
|
children: [
|
|
681
|
-
loading && /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("span", { className: "vd-
|
|
682
|
-
error && /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)("span", { className: "vd-
|
|
673
|
+
loading && /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("span", { className: "vd-doc-status", children: "Loading PDF\u2026" }),
|
|
674
|
+
error && /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)("span", { className: "vd-doc-status", children: [
|
|
683
675
|
"Failed to load PDF: ",
|
|
684
676
|
error.message
|
|
685
677
|
] }),
|
|
@@ -688,15 +680,25 @@ function PdfViewer({
|
|
|
688
680
|
}
|
|
689
681
|
) });
|
|
690
682
|
}
|
|
683
|
+
var import_jsx_runtime6;
|
|
684
|
+
var init_PdfViewer = __esm({
|
|
685
|
+
"src/viewers/PdfViewer.tsx"() {
|
|
686
|
+
"use strict";
|
|
687
|
+
init_ViewerShell();
|
|
688
|
+
init_useZoomPan();
|
|
689
|
+
init_PdfPage();
|
|
690
|
+
init_usePdfDocument();
|
|
691
|
+
init_useVisiblePage();
|
|
692
|
+
import_jsx_runtime6 = require("react/jsx-runtime");
|
|
693
|
+
}
|
|
694
|
+
});
|
|
691
695
|
|
|
692
696
|
// src/viewers/useDocxHtml.ts
|
|
693
|
-
var import_react7 = require("react");
|
|
694
|
-
var import_mammoth = __toESM(require("mammoth"), 1);
|
|
695
697
|
function useDocxHtml(uri) {
|
|
696
|
-
const [html, setHtml] = (0,
|
|
697
|
-
const [error, setError] = (0,
|
|
698
|
-
const [loading, setLoading] = (0,
|
|
699
|
-
(0,
|
|
698
|
+
const [html, setHtml] = (0, import_react8.useState)(null);
|
|
699
|
+
const [error, setError] = (0, import_react8.useState)(null);
|
|
700
|
+
const [loading, setLoading] = (0, import_react8.useState)(true);
|
|
701
|
+
(0, import_react8.useEffect)(() => {
|
|
700
702
|
let cancelled = false;
|
|
701
703
|
setLoading(true);
|
|
702
704
|
setError(null);
|
|
@@ -704,7 +706,11 @@ function useDocxHtml(uri) {
|
|
|
704
706
|
fetch(uri).then((res) => {
|
|
705
707
|
if (!res.ok) throw new Error(`Failed to fetch document: ${res.status} ${res.statusText}`);
|
|
706
708
|
return res.arrayBuffer();
|
|
707
|
-
}).then(
|
|
709
|
+
}).then(
|
|
710
|
+
(arrayBuffer) => import_mammoth.default.convertToHtml({ arrayBuffer }).catch(() => {
|
|
711
|
+
throw new Error("This file could not be read as a Word document (.docx).");
|
|
712
|
+
})
|
|
713
|
+
).then((result) => {
|
|
708
714
|
if (cancelled) return;
|
|
709
715
|
setHtml(result.value);
|
|
710
716
|
setLoading(false);
|
|
@@ -720,9 +726,20 @@ function useDocxHtml(uri) {
|
|
|
720
726
|
}, [uri]);
|
|
721
727
|
return { html, error, loading };
|
|
722
728
|
}
|
|
729
|
+
var import_react8, import_mammoth;
|
|
730
|
+
var init_useDocxHtml = __esm({
|
|
731
|
+
"src/viewers/useDocxHtml.ts"() {
|
|
732
|
+
"use strict";
|
|
733
|
+
import_react8 = require("react");
|
|
734
|
+
import_mammoth = __toESM(require("mammoth"), 1);
|
|
735
|
+
}
|
|
736
|
+
});
|
|
723
737
|
|
|
724
738
|
// src/viewers/DocxViewer.tsx
|
|
725
|
-
var
|
|
739
|
+
var DocxViewer_exports = {};
|
|
740
|
+
__export(DocxViewer_exports, {
|
|
741
|
+
DocxViewer: () => DocxViewer
|
|
742
|
+
});
|
|
726
743
|
function defaultDownload3(uri, fileName) {
|
|
727
744
|
const link = document.createElement("a");
|
|
728
745
|
link.href = uri;
|
|
@@ -789,19 +806,23 @@ function DocxViewer({
|
|
|
789
806
|
}
|
|
790
807
|
) });
|
|
791
808
|
}
|
|
792
|
-
|
|
793
|
-
|
|
794
|
-
|
|
795
|
-
|
|
809
|
+
var import_jsx_runtime7;
|
|
810
|
+
var init_DocxViewer = __esm({
|
|
811
|
+
"src/viewers/DocxViewer.tsx"() {
|
|
812
|
+
"use strict";
|
|
813
|
+
init_ViewerShell();
|
|
814
|
+
init_useZoomPan();
|
|
815
|
+
init_useDocxHtml();
|
|
816
|
+
import_jsx_runtime7 = require("react/jsx-runtime");
|
|
817
|
+
}
|
|
818
|
+
});
|
|
796
819
|
|
|
797
820
|
// src/viewers/useXlsxWorkbook.ts
|
|
798
|
-
var import_react8 = require("react");
|
|
799
|
-
var XLSX = __toESM(require("xlsx"), 1);
|
|
800
821
|
function useXlsxWorkbook(uri) {
|
|
801
|
-
const [workbook, setWorkbook] = (0,
|
|
802
|
-
const [error, setError] = (0,
|
|
803
|
-
const [loading, setLoading] = (0,
|
|
804
|
-
(0,
|
|
822
|
+
const [workbook, setWorkbook] = (0, import_react9.useState)(null);
|
|
823
|
+
const [error, setError] = (0, import_react9.useState)(null);
|
|
824
|
+
const [loading, setLoading] = (0, import_react9.useState)(true);
|
|
825
|
+
(0, import_react9.useEffect)(() => {
|
|
805
826
|
let cancelled = false;
|
|
806
827
|
setLoading(true);
|
|
807
828
|
setError(null);
|
|
@@ -826,9 +847,20 @@ function useXlsxWorkbook(uri) {
|
|
|
826
847
|
}, [uri]);
|
|
827
848
|
return { workbook, error, loading };
|
|
828
849
|
}
|
|
850
|
+
var import_react9, XLSX;
|
|
851
|
+
var init_useXlsxWorkbook = __esm({
|
|
852
|
+
"src/viewers/useXlsxWorkbook.ts"() {
|
|
853
|
+
"use strict";
|
|
854
|
+
import_react9 = require("react");
|
|
855
|
+
XLSX = __toESM(require("xlsx"), 1);
|
|
856
|
+
}
|
|
857
|
+
});
|
|
829
858
|
|
|
830
859
|
// src/viewers/XlsxViewer.tsx
|
|
831
|
-
var
|
|
860
|
+
var XlsxViewer_exports = {};
|
|
861
|
+
__export(XlsxViewer_exports, {
|
|
862
|
+
XlsxViewer: () => XlsxViewer
|
|
863
|
+
});
|
|
832
864
|
function defaultDownload4(uri, fileName) {
|
|
833
865
|
const link = document.createElement("a");
|
|
834
866
|
link.href = uri;
|
|
@@ -867,9 +899,9 @@ function XlsxViewer({
|
|
|
867
899
|
enableWheelZoom
|
|
868
900
|
});
|
|
869
901
|
const { workbook, error, loading } = useXlsxWorkbook(uri);
|
|
870
|
-
const [activeSheet, setActiveSheet] = (0,
|
|
902
|
+
const [activeSheet, setActiveSheet] = (0, import_react10.useState)(0);
|
|
871
903
|
const handleDownload = enableDownload ? onDownload ?? (() => defaultDownload4(uri, fileName)) : void 0;
|
|
872
|
-
const tableHtml = (0,
|
|
904
|
+
const tableHtml = (0, import_react10.useMemo)(() => {
|
|
873
905
|
if (!workbook) return null;
|
|
874
906
|
const sheetName = workbook.SheetNames[activeSheet];
|
|
875
907
|
const sheet = workbook.Sheets[sheetName];
|
|
@@ -915,6 +947,107 @@ function XlsxViewer({
|
|
|
915
947
|
}
|
|
916
948
|
) });
|
|
917
949
|
}
|
|
950
|
+
var import_react10, XLSX2, import_jsx_runtime8;
|
|
951
|
+
var init_XlsxViewer = __esm({
|
|
952
|
+
"src/viewers/XlsxViewer.tsx"() {
|
|
953
|
+
"use strict";
|
|
954
|
+
import_react10 = require("react");
|
|
955
|
+
XLSX2 = __toESM(require("xlsx"), 1);
|
|
956
|
+
init_ViewerShell();
|
|
957
|
+
init_useZoomPan();
|
|
958
|
+
init_useXlsxWorkbook();
|
|
959
|
+
import_jsx_runtime8 = require("react/jsx-runtime");
|
|
960
|
+
}
|
|
961
|
+
});
|
|
962
|
+
|
|
963
|
+
// src/index.ts
|
|
964
|
+
var src_exports = {};
|
|
965
|
+
__export(src_exports, {
|
|
966
|
+
DocViewer: () => DocViewer,
|
|
967
|
+
ImageViewer: () => ImageViewer,
|
|
968
|
+
Toolbar: () => Toolbar,
|
|
969
|
+
ViewerShell: () => ViewerShell,
|
|
970
|
+
detectFileType: () => detectFileType,
|
|
971
|
+
getUrlExtension: () => getUrlExtension,
|
|
972
|
+
useDraggable: () => useDraggable,
|
|
973
|
+
useZoomPan: () => useZoomPan
|
|
974
|
+
});
|
|
975
|
+
module.exports = __toCommonJS(src_exports);
|
|
976
|
+
|
|
977
|
+
// src/DocViewer.tsx
|
|
978
|
+
var import_react11 = require("react");
|
|
979
|
+
|
|
980
|
+
// src/viewers/ImageViewer.tsx
|
|
981
|
+
var import_react4 = require("react");
|
|
982
|
+
init_ViewerShell();
|
|
983
|
+
init_useZoomPan();
|
|
984
|
+
var import_jsx_runtime4 = require("react/jsx-runtime");
|
|
985
|
+
function defaultDownload(uri, fileName) {
|
|
986
|
+
const link = document.createElement("a");
|
|
987
|
+
link.href = uri;
|
|
988
|
+
link.download = fileName ?? "";
|
|
989
|
+
link.rel = "noopener";
|
|
990
|
+
document.body.appendChild(link);
|
|
991
|
+
link.click();
|
|
992
|
+
document.body.removeChild(link);
|
|
993
|
+
}
|
|
994
|
+
function ImageViewer({
|
|
995
|
+
uri,
|
|
996
|
+
fileName,
|
|
997
|
+
className,
|
|
998
|
+
style,
|
|
999
|
+
width,
|
|
1000
|
+
height,
|
|
1001
|
+
minScale,
|
|
1002
|
+
maxScale,
|
|
1003
|
+
zoomStep,
|
|
1004
|
+
enableZoomControls = true,
|
|
1005
|
+
enableWheelZoom = true,
|
|
1006
|
+
enablePan = true,
|
|
1007
|
+
enableFullscreen = true,
|
|
1008
|
+
enableDownload = true,
|
|
1009
|
+
onDownload,
|
|
1010
|
+
theme,
|
|
1011
|
+
floating = true,
|
|
1012
|
+
windowDraggable = true,
|
|
1013
|
+
defaultPosition
|
|
1014
|
+
}) {
|
|
1015
|
+
const zoomPan = useZoomPan({ minScale, maxScale, zoomStep, enablePan, enableWheelZoom });
|
|
1016
|
+
const [failed, setFailed] = (0, import_react4.useState)(false);
|
|
1017
|
+
(0, import_react4.useEffect)(() => setFailed(false), [uri]);
|
|
1018
|
+
const handleDownload = enableDownload ? onDownload ?? (() => defaultDownload(uri, fileName)) : void 0;
|
|
1019
|
+
const wrapperStyle = floating ? { ...style } : { display: "flex", alignItems: "center", justifyContent: "center", width: "100%", height: "100%", ...style };
|
|
1020
|
+
return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("div", { className, style: wrapperStyle, children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
|
|
1021
|
+
ViewerShell,
|
|
1022
|
+
{
|
|
1023
|
+
zoomPan,
|
|
1024
|
+
onDownload: handleDownload,
|
|
1025
|
+
enableZoomControls,
|
|
1026
|
+
enableFullscreen,
|
|
1027
|
+
enablePan,
|
|
1028
|
+
theme,
|
|
1029
|
+
width,
|
|
1030
|
+
height,
|
|
1031
|
+
floating,
|
|
1032
|
+
draggable: windowDraggable,
|
|
1033
|
+
defaultPosition,
|
|
1034
|
+
children: failed ? /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("span", { className: "vd-doc-status", children: [
|
|
1035
|
+
'Failed to load image "',
|
|
1036
|
+
fileName ?? uri,
|
|
1037
|
+
'".'
|
|
1038
|
+
] }) : /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
|
|
1039
|
+
"img",
|
|
1040
|
+
{
|
|
1041
|
+
className: "vd-image",
|
|
1042
|
+
src: uri,
|
|
1043
|
+
alt: fileName ?? "document image",
|
|
1044
|
+
draggable: false,
|
|
1045
|
+
onError: () => setFailed(true)
|
|
1046
|
+
}
|
|
1047
|
+
)
|
|
1048
|
+
}
|
|
1049
|
+
) });
|
|
1050
|
+
}
|
|
918
1051
|
|
|
919
1052
|
// src/detectFileType.ts
|
|
920
1053
|
var EXTENSION_MAP = {
|
|
@@ -958,17 +1091,20 @@ function detectFileType(uri, hint) {
|
|
|
958
1091
|
|
|
959
1092
|
// src/DocViewer.tsx
|
|
960
1093
|
var import_jsx_runtime9 = require("react/jsx-runtime");
|
|
961
|
-
|
|
1094
|
+
var PdfViewer2 = (0, import_react11.lazy)(() => Promise.resolve().then(() => (init_PdfViewer(), PdfViewer_exports)).then((m) => ({ default: m.PdfViewer })));
|
|
1095
|
+
var DocxViewer2 = (0, import_react11.lazy)(() => Promise.resolve().then(() => (init_DocxViewer(), DocxViewer_exports)).then((m) => ({ default: m.DocxViewer })));
|
|
1096
|
+
var XlsxViewer2 = (0, import_react11.lazy)(() => Promise.resolve().then(() => (init_XlsxViewer(), XlsxViewer_exports)).then((m) => ({ default: m.XlsxViewer })));
|
|
1097
|
+
function DocViewer({ uri, fileName, type, fallback, loadingFallback, ...rest }) {
|
|
962
1098
|
const detected = detectFileType(uri, type ?? fileName?.split(".").pop());
|
|
963
1099
|
switch (detected) {
|
|
964
1100
|
case "image":
|
|
965
1101
|
return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(ImageViewer, { uri, fileName, ...rest });
|
|
966
1102
|
case "pdf":
|
|
967
|
-
return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
|
|
1103
|
+
return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(import_react11.Suspense, { fallback: loadingFallback ?? null, children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(PdfViewer2, { uri, fileName, ...rest }) });
|
|
968
1104
|
case "docx":
|
|
969
|
-
return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
|
|
1105
|
+
return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(import_react11.Suspense, { fallback: loadingFallback ?? null, children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(DocxViewer2, { uri, fileName, ...rest }) });
|
|
970
1106
|
case "xlsx":
|
|
971
|
-
return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
|
|
1107
|
+
return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(import_react11.Suspense, { fallback: loadingFallback ?? null, children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(XlsxViewer2, { uri, fileName, ...rest }) });
|
|
972
1108
|
default:
|
|
973
1109
|
return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(import_jsx_runtime9.Fragment, { children: fallback ?? /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("div", { className: "vd-doc-status", children: [
|
|
974
1110
|
'Unable to detect file type for "',
|
|
@@ -977,15 +1113,18 @@ function DocViewer({ uri, fileName, type, fallback, ...rest }) {
|
|
|
977
1113
|
] }) });
|
|
978
1114
|
}
|
|
979
1115
|
}
|
|
1116
|
+
|
|
1117
|
+
// src/index.ts
|
|
1118
|
+
init_ViewerShell();
|
|
1119
|
+
init_Toolbar();
|
|
1120
|
+
init_useZoomPan();
|
|
1121
|
+
init_useDraggable();
|
|
980
1122
|
// Annotate the CommonJS export names for ESM import in node:
|
|
981
1123
|
0 && (module.exports = {
|
|
982
1124
|
DocViewer,
|
|
983
|
-
DocxViewer,
|
|
984
1125
|
ImageViewer,
|
|
985
|
-
PdfViewer,
|
|
986
1126
|
Toolbar,
|
|
987
1127
|
ViewerShell,
|
|
988
|
-
XlsxViewer,
|
|
989
1128
|
detectFileType,
|
|
990
1129
|
getUrlExtension,
|
|
991
1130
|
useDraggable,
|