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.
Files changed (46) hide show
  1. package/README.md +7 -3
  2. package/dist/DocxViewer-HQFSWXQW.js +8 -0
  3. package/dist/DocxViewer-HQFSWXQW.js.map +1 -0
  4. package/dist/PdfViewer-YJOHTAPL.js +8 -0
  5. package/dist/PdfViewer-YJOHTAPL.js.map +1 -0
  6. package/dist/XlsxViewer-SQMAF5UA.js +8 -0
  7. package/dist/XlsxViewer-SQMAF5UA.js.map +1 -0
  8. package/dist/chunk-EQCFZMLL.js +114 -0
  9. package/dist/chunk-EQCFZMLL.js.map +1 -0
  10. package/dist/chunk-LE4YTMPN.js +135 -0
  11. package/dist/chunk-LE4YTMPN.js.map +1 -0
  12. package/dist/chunk-OA35SYM6.js +432 -0
  13. package/dist/chunk-OA35SYM6.js.map +1 -0
  14. package/dist/chunk-US2KTONG.js +174 -0
  15. package/dist/chunk-US2KTONG.js.map +1 -0
  16. package/dist/docx.cjs +570 -0
  17. package/dist/docx.cjs.map +1 -0
  18. package/dist/docx.d.cts +43 -0
  19. package/dist/docx.d.ts +43 -0
  20. package/dist/docx.js +8 -0
  21. package/dist/docx.js.map +1 -0
  22. package/dist/index.cjs +277 -138
  23. package/dist/index.cjs.map +1 -1
  24. package/dist/index.d.cts +9 -150
  25. package/dist/index.d.ts +9 -150
  26. package/dist/index.js +36 -827
  27. package/dist/index.js.map +1 -1
  28. package/dist/pdf.cjs +631 -0
  29. package/dist/pdf.cjs.map +1 -0
  30. package/dist/pdf.d.cts +45 -0
  31. package/dist/pdf.d.ts +45 -0
  32. package/dist/pdf.js +8 -0
  33. package/dist/pdf.js.map +1 -0
  34. package/dist/styles.css +5 -0
  35. package/dist/styles.css.map +1 -1
  36. package/dist/useDraggable-QvFR-4DD.d.cts +33 -0
  37. package/dist/useDraggable-QvFR-4DD.d.ts +33 -0
  38. package/dist/xlsx.cjs +591 -0
  39. package/dist/xlsx.cjs.map +1 -0
  40. package/dist/xlsx.d.cts +43 -0
  41. package/dist/xlsx.d.ts +43 -0
  42. package/dist/xlsx.js +8 -0
  43. package/dist/xlsx.js.map +1 -0
  44. package/package.json +16 -1
  45. package/dist/styles.d.cts +0 -2
  46. 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
- // src/viewers/ImageViewer.tsx
473
- var import_jsx_runtime4 = require("react/jsx-runtime");
474
- function defaultDownload(uri, fileName) {
475
- const link = document.createElement("a");
476
- link.href = uri;
477
- link.download = fileName ?? "";
478
- link.rel = "noopener";
479
- document.body.appendChild(link);
480
- link.click();
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, import_react4.useRef)(null);
531
- const renderTaskRef = (0, import_react4.useRef)(null);
532
- (0, import_react4.useEffect)(() => {
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, import_react5.useState)(null);
565
- const [error, setError] = (0, import_react5.useState)(null);
566
- const [loading, setLoading] = (0, import_react5.useState)(true);
567
- (0, import_react5.useEffect)(() => {
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, import_react6.useState)(1);
595
- (0, import_react6.useEffect)(() => {
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 import_jsx_runtime6 = require("react/jsx-runtime");
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-pdf-page-indicator", children: "Loading PDF\u2026" }),
682
- error && /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)("span", { className: "vd-pdf-page-indicator", children: [
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, import_react7.useState)(null);
697
- const [error, setError] = (0, import_react7.useState)(null);
698
- const [loading, setLoading] = (0, import_react7.useState)(true);
699
- (0, import_react7.useEffect)(() => {
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((arrayBuffer) => import_mammoth.default.convertToHtml({ arrayBuffer })).then((result) => {
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 import_jsx_runtime7 = require("react/jsx-runtime");
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
- // src/viewers/XlsxViewer.tsx
794
- var import_react9 = require("react");
795
- var XLSX2 = __toESM(require("xlsx"), 1);
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, import_react8.useState)(null);
802
- const [error, setError] = (0, import_react8.useState)(null);
803
- const [loading, setLoading] = (0, import_react8.useState)(true);
804
- (0, import_react8.useEffect)(() => {
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 import_jsx_runtime8 = require("react/jsx-runtime");
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, import_react9.useState)(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, import_react9.useMemo)(() => {
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
- function DocViewer({ uri, fileName, type, fallback, ...rest }) {
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)(PdfViewer, { uri, fileName, ...rest });
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)(DocxViewer, { uri, fileName, ...rest });
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)(XlsxViewer, { uri, fileName, ...rest });
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,