pdf-tsx 0.17.2 → 0.17.4

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 (130) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +512 -512
  3. package/dist/cjs/components/PDFSidebar.cjs +1 -1
  4. package/dist/cjs/components/PDFViewer.cjs +1 -1
  5. package/dist/cjs/components/PDFViewer.module.cjs +1 -1
  6. package/dist/cjs/components/features/PDFAnnotations.cjs +1 -1
  7. package/dist/cjs/components/features/PDFAttachments.cjs +1 -1
  8. package/dist/cjs/components/features/PDFChangeFile.cjs +1 -1
  9. package/dist/cjs/components/features/PDFDownloadButton.cjs +1 -1
  10. package/dist/cjs/components/features/PDFNavigation.cjs +1 -1
  11. package/dist/cjs/components/features/PDFOutline.cjs +1 -1
  12. package/dist/cjs/components/features/PDFPageFit.cjs +1 -1
  13. package/dist/cjs/components/features/PDFPrintButton.cjs +1 -1
  14. package/dist/cjs/components/features/PDFRotationControl.cjs +1 -1
  15. package/dist/cjs/components/features/PDFSearch.cjs +1 -1
  16. package/dist/cjs/components/features/PDFSidebarToggle.cjs +1 -1
  17. package/dist/cjs/components/features/PDFSignatures.cjs +1 -1
  18. package/dist/cjs/components/features/PDFThemeToggle.cjs +1 -1
  19. package/dist/cjs/components/features/PDFThumbnails.cjs +1 -1
  20. package/dist/cjs/components/features/PDFZoomControls.cjs +1 -1
  21. package/dist/cjs/components/ui/PDFToolbar.cjs +1 -1
  22. package/dist/cjs/components/ui/PDFToolbarDropdownContext.cjs +1 -1
  23. package/dist/cjs/components/ui/PDFToolbarItem.cjs +1 -1
  24. package/dist/cjs/components/ui/PDFToolbarSeparator.cjs +1 -1
  25. package/dist/cjs/components/ui/ToolbarButton.cjs +1 -1
  26. package/dist/cjs/components/ui/icons.cjs +1 -1
  27. package/dist/cjs/context/LabelsContext.cjs +1 -1
  28. package/dist/cjs/context/PDFViewerContext.cjs +1 -1
  29. package/dist/cjs/context/ThemeContext.cjs +1 -1
  30. package/dist/cjs/context/labelsContextValue.cjs +1 -1
  31. package/dist/cjs/context/themeContextValue.cjs +1 -1
  32. package/dist/cjs/hooks/useAnnotationLayer.cjs +1 -1
  33. package/dist/cjs/hooks/useAnnotations.cjs +1 -1
  34. package/dist/cjs/hooks/useAttachments.cjs +1 -1
  35. package/dist/cjs/hooks/useKeyboardShortcuts.cjs +1 -1
  36. package/dist/cjs/hooks/useLabels.cjs +1 -1
  37. package/dist/cjs/hooks/useOutline.cjs +1 -1
  38. package/dist/cjs/hooks/useOverlayRects.cjs +1 -1
  39. package/dist/cjs/hooks/usePDFLoader.cjs +1 -1
  40. package/dist/cjs/hooks/usePDFRenderer.cjs +1 -1
  41. package/dist/cjs/hooks/usePinchZoom.cjs +1 -1
  42. package/dist/cjs/hooks/useScrollTracking.cjs +1 -1
  43. package/dist/cjs/hooks/useSignatures.cjs +1 -1
  44. package/dist/cjs/hooks/useTextLayer.cjs +1 -1
  45. package/dist/cjs/hooks/useTextSearch.cjs +1 -1
  46. package/dist/cjs/hooks/useTheme.cjs +1 -1
  47. package/dist/cjs/hooks/useThumbnails.cjs +1 -1
  48. package/dist/cjs/index.cjs +1 -1
  49. package/dist/cjs/pdf-tsx.css +1 -1
  50. package/dist/cjs/utils/pdfFit.cjs +1 -1
  51. package/dist/components/PDFViewer.d.ts +1 -2
  52. package/dist/es/components/PDFViewer.module.js +23 -23
  53. package/dist/es/components/features/PDFPrintButton.js +22 -8
  54. package/dist/es/components/ui/PDFToolbar.js +4 -2
  55. package/dist/es/hooks/usePDFRenderer.js +71 -64
  56. package/dist/es/pdf-tsx.css +1 -1
  57. package/dist/es/utils/pdfFit.js +14 -9
  58. package/dist/hooks/usePDFLoader.d.ts +1 -1
  59. package/dist/utils/polyfills.d.ts +1 -0
  60. package/package.json +64 -64
  61. package/dist/components/features/PDFSignButton.d.ts +0 -10
  62. package/dist/components/features/SignaturePad.d.ts +0 -10
  63. package/dist/pdf-tsx.cjs.js +0 -5
  64. package/dist/pdf-tsx.css +0 -2
  65. package/dist/pdf-tsx.es.js +0 -2637
  66. package/dist/src/components/PDFSidebar.d.ts +0 -11
  67. package/dist/src/components/PDFViewer.d.ts +0 -22
  68. package/dist/src/components/features/PDFAnnotations.d.ts +0 -5
  69. package/dist/src/components/features/PDFAttachments.d.ts +0 -5
  70. package/dist/src/components/features/PDFChangeFile.d.ts +0 -9
  71. package/dist/src/components/features/PDFDownloadButton.d.ts +0 -9
  72. package/dist/src/components/features/PDFNavigation.d.ts +0 -10
  73. package/dist/src/components/features/PDFOutline.d.ts +0 -1
  74. package/dist/src/components/features/PDFPageFit.d.ts +0 -10
  75. package/dist/src/components/features/PDFPrintButton.d.ts +0 -9
  76. package/dist/src/components/features/PDFRotationControl.d.ts +0 -9
  77. package/dist/src/components/features/PDFSearch.d.ts +0 -13
  78. package/dist/src/components/features/PDFSidebarToggle.d.ts +0 -10
  79. package/dist/src/components/features/PDFSignatures.d.ts +0 -5
  80. package/dist/src/components/features/PDFThemeToggle.d.ts +0 -10
  81. package/dist/src/components/features/PDFThumbnails.d.ts +0 -1
  82. package/dist/src/components/features/PDFZoomControls.d.ts +0 -10
  83. package/dist/src/components/ui/PDFToolbar.d.ts +0 -8
  84. package/dist/src/components/ui/PDFToolbarDropdownContext.d.ts +0 -1
  85. package/dist/src/components/ui/PDFToolbarItem.d.ts +0 -7
  86. package/dist/src/components/ui/PDFToolbarSeparator.d.ts +0 -4
  87. package/dist/src/components/ui/ToolbarButton.d.ts +0 -6
  88. package/dist/src/components/ui/icons.d.ts +0 -7
  89. package/dist/src/context/LabelsContext.d.ts +0 -7
  90. package/dist/src/context/PDFViewerContext.d.ts +0 -30
  91. package/dist/src/context/ThemeContext.d.ts +0 -12
  92. package/dist/src/context/labelsContextValue.d.ts +0 -2
  93. package/dist/src/context/themeContextValue.d.ts +0 -7
  94. package/dist/src/hooks/useAnnotationLayer.d.ts +0 -34
  95. package/dist/src/hooks/useAnnotations.d.ts +0 -15
  96. package/dist/src/hooks/useAttachments.d.ts +0 -11
  97. package/dist/src/hooks/useKeyboardShortcuts.d.ts +0 -9
  98. package/dist/src/hooks/useLabels.d.ts +0 -2
  99. package/dist/src/hooks/useOutline.d.ts +0 -14
  100. package/dist/src/hooks/useOverlayRects.d.ts +0 -21
  101. package/dist/src/hooks/usePDFLoader.d.ts +0 -5
  102. package/dist/src/hooks/usePDFRenderer.d.ts +0 -16
  103. package/dist/src/hooks/useScrollTracking.d.ts +0 -10
  104. package/dist/src/hooks/useSignatures.d.ts +0 -17
  105. package/dist/src/hooks/useTextLayer.d.ts +0 -10
  106. package/dist/src/hooks/useTextSearch.d.ts +0 -12
  107. package/dist/src/hooks/useTheme.d.ts +0 -2
  108. package/dist/src/hooks/useThumbnails.d.ts +0 -10
  109. package/dist/src/index.d.ts +0 -24
  110. package/dist/src/labels.d.ts +0 -53
  111. package/dist/src/theme.d.ts +0 -27
  112. package/dist/src/utils/pdfFit.d.ts +0 -2
  113. package/dist/src/utils/url.d.ts +0 -1
  114. package/dist/utils/addSignatureToPdf.d.ts +0 -9
  115. package/dist/vite.svg +0 -1
  116. package/dist/wasm/LICENSE_JBIG2 +0 -196
  117. package/dist/wasm/LICENSE_OPENJPEG +0 -39
  118. package/dist/wasm/LICENSE_PDFJS_JBIG2 +0 -13
  119. package/dist/wasm/LICENSE_PDFJS_OPENJPEG +0 -22
  120. package/dist/wasm/LICENSE_PDFJS_QCMS +0 -22
  121. package/dist/wasm/LICENSE_QCMS +0 -21
  122. package/dist/wasm/jbig2.wasm +0 -0
  123. package/dist/wasm/jbig2_nowasm_fallback.js +0 -15
  124. package/dist/wasm/openjpeg.wasm +0 -0
  125. package/dist/wasm/openjpeg_nowasm_fallback.js +0 -17
  126. package/dist/wasm/qcms_bg.wasm +0 -0
  127. package/dist/wasm/quickjs-eval.js +0 -16
  128. package/dist/wasm/quickjs-eval.wasm +0 -0
  129. /package/dist/{src/hooks → hooks}/usePinchZoom.d.ts +0 -0
  130. /package/dist/{src/utils → utils}/zoom.d.ts +0 -0
@@ -1,27 +1,27 @@
1
1
  var e = {
2
- appLayout: "_appLayout_13t77_1",
3
- body: "_body_13t77_9",
4
- toolbar: "_toolbar_13t77_17",
5
- scrollContainer: "_scrollContainer_13t77_29",
6
- pageWrapper: "_pageWrapper_13t77_40",
7
- pageCanvas: "_pageCanvas_13t77_45",
8
- textLayer: "_textLayer_13t77_54",
9
- markedContent: "_markedContent_13t77_80",
10
- endOfContent: "_endOfContent_13t77_95",
11
- selecting: "_selecting_13t77_104",
12
- documentLoading: "_documentLoading_13t77_124",
13
- spin: "_spin_13t77_1",
14
- pageSkeleton: "_pageSkeleton_13t77_144",
15
- highlightOverlay: "_highlightOverlay_13t77_173",
16
- linkOverlay: "_linkOverlay_13t77_182",
17
- searchMatchOverlay: "_searchMatchOverlay_13t77_189",
18
- noteOverlay: "_noteOverlay_13t77_197",
19
- noteIconOverlay: "_noteIconOverlay_13t77_204",
20
- requireReadBanner: "_requireReadBanner_13t77_221",
21
- requireReadDone: "_requireReadDone_13t77_245",
22
- notePopover: "_notePopover_13t77_249",
23
- notePopoverTitle: "_notePopoverTitle_13t77_262",
24
- notePopoverContent: "_notePopoverContent_13t77_269"
2
+ appLayout: "_appLayout_1716z_1",
3
+ body: "_body_1716z_17",
4
+ toolbar: "_toolbar_1716z_33",
5
+ scrollContainer: "_scrollContainer_1716z_57",
6
+ pageWrapper: "_pageWrapper_1716z_79",
7
+ pageCanvas: "_pageCanvas_1716z_89",
8
+ textLayer: "_textLayer_1716z_107",
9
+ markedContent: "_markedContent_1716z_159",
10
+ endOfContent: "_endOfContent_1716z_189",
11
+ selecting: "_selecting_1716z_207",
12
+ documentLoading: "_documentLoading_1716z_247",
13
+ spin: "_spin_1716z_1",
14
+ pageSkeleton: "_pageSkeleton_1716z_287",
15
+ highlightOverlay: "_highlightOverlay_1716z_345",
16
+ linkOverlay: "_linkOverlay_1716z_363",
17
+ searchMatchOverlay: "_searchMatchOverlay_1716z_377",
18
+ noteOverlay: "_noteOverlay_1716z_393",
19
+ noteIconOverlay: "_noteIconOverlay_1716z_407",
20
+ requireReadBanner: "_requireReadBanner_1716z_441",
21
+ requireReadDone: "_requireReadDone_1716z_489",
22
+ notePopover: "_notePopover_1716z_497",
23
+ notePopoverTitle: "_notePopoverTitle_1716z_523",
24
+ notePopoverContent: "_notePopoverContent_1716z_537"
25
25
  };
26
26
  //#endregion
27
27
  export { e as default };
@@ -5,16 +5,30 @@ import { useCallback as r } from "react";
5
5
  import { jsx as i } from "react/jsx-runtime";
6
6
  //#region src/components/features/PDFPrintButton.tsx
7
7
  function a({ icon: a }) {
8
- let { file: o } = e(), s = t();
8
+ let { pdf: o } = e(), s = t();
9
9
  return /* @__PURE__ */ i(n, {
10
- onClick: r(() => {
11
- let e = URL.createObjectURL(o), t = document.createElement("iframe");
12
- t.style.display = "none", t.src = e, document.body.appendChild(t), t.onload = () => {
13
- let n = !1, r = () => {
14
- n || (n = !0, t.remove(), URL.revokeObjectURL(e));
15
- };
16
- t.contentWindow?.addEventListener("afterprint", r, { once: !0 }), setTimeout(r, 6e4), t.contentWindow?.print();
10
+ onClick: r(async () => {
11
+ if (!o) return;
12
+ let e = [];
13
+ for (let t = 1; t <= o.numPages; t++) {
14
+ let n = await o.getPage(t), r = n.getViewport({ scale: 2 }), i = document.createElement("canvas");
15
+ i.width = r.width, i.height = r.height;
16
+ let a = i.getContext("2d");
17
+ a && (await n.render({
18
+ canvasContext: a,
19
+ viewport: r,
20
+ canvas: i
21
+ }).promise, e.push(i.toDataURL("image/png")));
22
+ }
23
+ let t = "<!DOCTYPE html><html><head><style>@page { margin: 0; size: auto; }* { margin: 0; padding: 0; box-sizing: border-box; }html, body { width: 100%; height: 100%; }.page { width: 100vw; height: 100vh; overflow: hidden; page-break-after: always; }.page:last-child { page-break-after: auto; }img { width: 100%; height: 100%; object-fit: contain; display: block; }</style></head><body>" + e.map((e) => `<div class="page"><img src="${e}"></div>`).join("") + "</body></html>", n = new Blob([t], { type: "text/html" }), r = URL.createObjectURL(n), i = document.createElement("iframe");
24
+ i.style.cssText = "position:fixed;width:0;height:0;border:none;", document.body.appendChild(i);
25
+ let a = () => {
26
+ i.remove(), URL.revokeObjectURL(r);
17
27
  };
28
+ i.onload = () => {
29
+ let e = i.contentWindow;
30
+ e.addEventListener("afterprint", a, { once: !0 }), setTimeout(a, 6e4), e.print();
31
+ }, i.src = r;
18
32
  }, [o]),
19
33
  title: s.printTitle,
20
34
  children: a
@@ -33,8 +33,10 @@ function p({ children: p, overflowIcon: m = "···" }) {
33
33
  let e = g.current;
34
34
  if (!e) return;
35
35
  let t = new ResizeObserver(() => T());
36
- return t.observe(e), () => t.disconnect();
37
- }, [T]), o(() => {
36
+ return t.observe(e), _.current.forEach((e) => {
37
+ e && t.observe(e);
38
+ }), () => t.disconnect();
39
+ }, [T, w.length]), o(() => {
38
40
  if (!x) return;
39
41
  let e = (e) => {
40
42
  C.current?.contains(e.target) || S(!1);
@@ -1,96 +1,103 @@
1
1
  import { useEffect as e, useRef as t, useState as n } from "react";
2
2
  import "pdfjs-dist";
3
3
  //#region src/hooks/usePDFRenderer.ts
4
- function r({ pdf: r, zoom: i, rotation: a, visiblePages: o, canvasRefs: s }) {
5
- let [c, l] = n([]), [u, d] = n(/* @__PURE__ */ new Set()), f = t([]), p = t(/* @__PURE__ */ new Set()), m = t(!1);
4
+ function r(e, t, n, r) {
5
+ let i = e.getContext("2d");
6
+ if (!i) return null;
7
+ let a = t.getViewport({
8
+ scale: n,
9
+ rotation: r
10
+ }), o = window.devicePixelRatio || 1, s = Math.min(1, 4096 / Math.max(a.width, a.height)), c = Math.sqrt(Math.min(1, 16777216 / (a.width * a.height))), l = Math.max(.1, Math.min(o, s, c));
11
+ l < o && console.warn(`[pdf-tsx] canvas clamped to avoid blank render: page=${t.pageNumber} zoom=${n} dpr=${o} requested=${Math.round(a.width * o)}x${Math.round(a.height * o)}px clamped=${Math.round(a.width * l)}x${Math.round(a.height * l)}px`);
12
+ let u = t.getViewport({
13
+ scale: n * l,
14
+ rotation: r
15
+ });
16
+ return e.width = u.width, e.height = u.height, e.style.width = `${a.width}px`, e.style.height = `${a.height}px`, t.render({
17
+ canvasContext: i,
18
+ viewport: u,
19
+ canvas: e
20
+ });
21
+ }
22
+ function i({ pdf: i, zoom: a, rotation: o, visiblePages: s, canvasRefs: c }) {
23
+ let [l, u] = n([]), [d, f] = n(/* @__PURE__ */ new Set()), p = t([]), m = t(/* @__PURE__ */ new Set()), h = t(!1);
6
24
  return e(() => {
7
- if (!r) return;
8
- m.current = !1, p.current = /* @__PURE__ */ new Set(), d(/* @__PURE__ */ new Set());
25
+ if (!i) return;
26
+ h.current = !1, m.current = /* @__PURE__ */ new Set(), f(/* @__PURE__ */ new Set());
9
27
  let e = !1;
10
28
  return (async () => {
11
- let t = f.current.map((e) => e ? (e.cancel(), e.promise.catch(() => {})) : Promise.resolve());
12
- if (await Promise.all(t), f.current = Array(r.numPages).fill(null), e) return;
13
- let n = await r.getPage(1);
29
+ let t = p.current.map((e) => e ? (e.cancel(), e.promise.catch(() => {})) : Promise.resolve());
30
+ if (await Promise.all(t), p.current = Array(i.numPages).fill(null), e) return;
31
+ let n = await i.getPage(1);
14
32
  if (e) return;
15
- let o = n.getViewport({
16
- scale: i,
17
- rotation: a
33
+ let r = n.getViewport({
34
+ scale: a,
35
+ rotation: o
18
36
  }), s = {
19
- width: o.width,
20
- height: o.height
37
+ width: r.width,
38
+ height: r.height
21
39
  };
22
- l(Array(r.numPages).fill(s));
23
- let c = await Promise.all(Array.from({ length: r.numPages }, async (e, t) => {
24
- let o = (t === 0 ? n : await r.getPage(t + 1)).getViewport({
25
- scale: i,
26
- rotation: a
40
+ u(Array(i.numPages).fill(s));
41
+ let c = await Promise.all(Array.from({ length: i.numPages }, async (e, t) => {
42
+ let r = (t === 0 ? n : await i.getPage(t + 1)).getViewport({
43
+ scale: a,
44
+ rotation: o
27
45
  });
28
46
  return {
29
- width: o.width,
30
- height: o.height
47
+ width: r.width,
48
+ height: r.height
31
49
  };
32
50
  }));
33
- e || (m.current = !0, l(c));
51
+ e || (h.current = !0, u(c));
34
52
  })(), () => {
35
- e = !0, f.current.forEach((e) => e?.cancel());
53
+ e = !0, p.current.forEach((e) => e?.cancel());
36
54
  };
37
55
  }, [
38
- r,
39
56
  i,
40
- a
57
+ a,
58
+ o
41
59
  ]), e(() => {
42
- if (!r || c.length !== r.numPages || !m.current) return;
60
+ if (!i || l.length !== i.numPages || !h.current) return;
43
61
  let e = !1;
44
62
  return (async () => {
45
- for (let t of o) {
46
- if (e || p.current.has(t)) continue;
47
- let n = await r.getPage(t);
63
+ for (let t of s) {
64
+ if (e || m.current.has(t)) continue;
65
+ let n = await i.getPage(t);
48
66
  if (e) return;
49
- let o = window.devicePixelRatio || 1, c = n.getViewport({
50
- scale: i,
51
- rotation: a
52
- }), l = n.getViewport({
53
- scale: i * o,
54
- rotation: a
55
- }), u = s.current[t - 1];
56
- if (!u) continue;
57
- let m = u.getContext("2d");
58
- if (!m) continue;
59
- let h = f.current[t - 1];
60
- if (h && (h.cancel(), await h.promise.catch(() => {}), e)) return;
61
- u.width = l.width, u.height = l.height, u.style.width = `${c.width}px`, u.style.height = `${c.height}px`;
62
- let g = n.render({
63
- canvasContext: m,
64
- viewport: l,
65
- canvas: u
66
- });
67
- f.current[t - 1] = g;
68
- try {
69
- await g.promise, e || (p.current = new Set(p.current).add(t), d((e) => {
70
- if (e.has(t)) return e;
71
- let n = new Set(e);
72
- return n.add(t), n;
73
- }));
74
- } catch (e) {
75
- e && typeof e == "object" && "name" in e && e.name !== "RenderingCancelledException" && console.error("Render error:", e);
76
- } finally {
77
- f.current[t - 1] === g && (f.current[t - 1] = null);
67
+ let s = c.current[t - 1];
68
+ if (!s) continue;
69
+ let l = p.current[t - 1];
70
+ if (l && (l.cancel(), await l.promise.catch(() => {}), e)) return;
71
+ let u = r(s, n, a, o);
72
+ if (u) {
73
+ p.current[t - 1] = u;
74
+ try {
75
+ await u.promise, e || (m.current = new Set(m.current).add(t), f((e) => {
76
+ if (e.has(t)) return e;
77
+ let n = new Set(e);
78
+ return n.add(t), n;
79
+ }));
80
+ } catch (e) {
81
+ e && typeof e == "object" && "name" in e && e.name !== "RenderingCancelledException" && console.error("Render error:", e);
82
+ } finally {
83
+ p.current[t - 1] === u && (p.current[t - 1] = null);
84
+ }
78
85
  }
79
86
  }
80
87
  })(), () => {
81
88
  e = !0;
82
89
  };
83
90
  }, [
84
- r,
85
- c,
86
- a,
87
- o,
88
91
  i,
89
- s
92
+ l,
93
+ o,
94
+ s,
95
+ a,
96
+ c
90
97
  ]), {
91
- pageSizes: c,
92
- renderedPages: u
98
+ pageSizes: l,
99
+ renderedPages: d
93
100
  };
94
101
  }
95
102
  //#endregion
96
- export { r as usePDFRenderer };
103
+ export { i as usePDFRenderer };
@@ -1,2 +1,2 @@
1
- ._wrapper_1kvg0_1{border-right:1px solid var(--pdf-border);height:100%;display:flex}._wrapperCollapsed_1kvg0_7{border-right:1px solid var(--pdf-border);background-color:var(--pdf-bg);flex-direction:column;height:100%;padding-top:4px;display:flex}._buttonBar_1kvg0_16{background-color:var(--pdf-bg);flex-direction:column;flex-shrink:0;gap:2px;width:48px;padding-top:4px;display:flex}._toggleButton_1kvg0_26{border-bottom:1px solid var(--pdf-border);border-radius:0;width:48px;margin:0;padding-bottom:6px}._panelButton_1kvg0_35{cursor:pointer;width:44px;height:44px;color:var(--pdf-text-muted);background-color:#0000;border:none;border-radius:6px;justify-content:center;align-items:center;margin:0 2px;transition:background-color .15s,color .15s;display:flex}._panelButton_1kvg0_35:hover{background-color:var(--pdf-surface);color:var(--pdf-text-secondary)}._panelButtonActive_1kvg0_57{background-color:var(--pdf-surface);color:var(--pdf-accent-light)}._panelButtonActive_1kvg0_57:hover{color:var(--pdf-accent-light)}._contentPanel_1kvg0_66{background-color:var(--pdf-panel-bg);border-right:1px solid var(--pdf-panel-border);flex-direction:column;width:260px;display:flex}._panelHeader_1kvg0_74{color:var(--pdf-text-muted);text-transform:uppercase;letter-spacing:.6px;border-bottom:1px solid var(--pdf-panel-border);background-color:var(--pdf-panel-header-bg);flex-shrink:0;padding:10px 14px;font-size:11px;font-weight:600}._panelBody_1kvg0_86{flex:1;overflow-y:auto}._appLayout_13t77_1{flex-direction:column;width:100%;height:100%;display:flex;overflow:hidden}._body_13t77_9{flex-direction:row;flex:1;min-height:0;display:flex;overflow:hidden}._toolbar_13t77_17{border-bottom:1px solid var(--pdf-border);background-color:var(--pdf-bg);z-index:10;flex-shrink:0;align-items:center;gap:2px;height:44px;padding:0 12px;display:flex}._scrollContainer_13t77_29{background-color:var(--pdf-scroll-area);touch-action:pan-x pan-y;flex-direction:column;flex:1;padding:10px 20px;display:flex;position:relative;overflow:auto}._pageWrapper_13t77_40{margin:0 auto 25px;position:relative}._pageCanvas_13t77_45{z-index:1;box-shadow:0 5px 20px var(--pdf-shadow-page);pointer-events:none;background-color:#fff;display:block;position:relative}._textLayer_13t77_54{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light only;text-align:initial;opacity:1;-webkit-text-size-adjust:none;-moz-text-size-adjust:none;text-size-adjust:none;forced-color-adjust:none;transform-origin:0 0;caret-color:canvastext;z-index:2;--min-font-size:1;--text-scale-factor:calc(var(--total-scale-factor) * var(--min-font-size));--min-font-size-inv:calc(1 / var(--min-font-size));line-height:1;position:absolute;inset:0;overflow:clip}._textLayer_13t77_54 :is(span,br){color:#0000;white-space:pre;cursor:text;transform-origin:0 0;position:absolute}._textLayer_13t77_54>:not(._markedContent_13t77_80),._textLayer_13t77_54 ._markedContent_13t77_80 span:not(._markedContent_13t77_80){z-index:1;--font-height:0;font-size:calc(var(--text-scale-factor) * var(--font-height));--scale-x:1;--rotate:0deg;transform:rotate(var(--rotate)) scaleX(var(--scale-x)) scale(var(--min-font-size-inv))}._textLayer_13t77_54 ._markedContent_13t77_80{display:contents}._textLayer_13t77_54 ._endOfContent_13t77_95{z-index:0;cursor:default;-webkit-user-select:none;user-select:none;display:block;position:absolute;inset:100% 0 0}._textLayer_13t77_54._selecting_13t77_104 ._endOfContent_13t77_95{top:0}._textLayer_13t77_54 ::selection{background:#0000ff40}._textLayer_13t77_54 br::selection{background:0 0}._documentLoading_13t77_124{pointer-events:none;z-index:10;justify-content:center;align-items:center;display:flex;position:absolute;inset:0}._documentLoading_13t77_124:after{content:"";border:3px solid #0000001a;border-top-color:var(--pdf-accent);border-radius:50%;width:40px;height:40px;animation:.8s linear infinite _spin_13t77_1}._pageSkeleton_13t77_144{z-index:0;pointer-events:none;background:#fff;border-radius:1px;justify-content:center;align-items:center;display:flex;position:absolute;top:0;left:0}._pageSkeleton_13t77_144:after{content:"";border:3px solid #0000001a;border-top-color:var(--pdf-accent);border-radius:50%;width:32px;height:32px;animation:.8s linear infinite _spin_13t77_1}@keyframes _spin_13t77_1{to{transform:rotate(360deg)}}._highlightOverlay_13t77_173{z-index:4;pointer-events:none;background-color:#ffdc0059;border:2px solid #ffa000e6;border-radius:2px;position:absolute}._linkOverlay_13t77_182{z-index:3;pointer-events:all;cursor:pointer;position:absolute}._searchMatchOverlay_13t77_189{z-index:3;pointer-events:none;background-color:#fde0474d;border-bottom:2px solid #eab308cc;position:absolute}._noteOverlay_13t77_197{z-index:3;pointer-events:all;cursor:pointer;position:absolute}._noteIconOverlay_13t77_204{z-index:3;pointer-events:all;cursor:pointer;border-radius:3px;justify-content:center;align-items:center;transition:background-color .1s;display:flex;position:absolute}._noteIconOverlay_13t77_204:hover{background-color:#ffd20033;outline:1px solid #a0780066}._requireReadBanner_13t77_221{font-size:13px;font-weight:500;font-family:var(--pdf-font-family);color:#fff;background-color:color-mix(in srgb, var(--pdf-accent) 82%, transparent);-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);z-index:10;pointer-events:none;-webkit-user-select:none;user-select:none;border-radius:5px;align-self:flex-end;align-items:center;gap:8px;margin-top:auto;margin-right:25px;padding:9px 16px;transition:background-color .4s;display:flex;position:sticky;bottom:12px;box-shadow:0 2px 12px #0000002e}._requireReadDone_13t77_245{background-color:#16a34abf}._notePopover_13t77_249{z-index:9999;background-color:var(--pdf-surface);border:1px solid var(--pdf-border);min-width:160px;max-width:280px;font-family:var(--pdf-font-family);border-radius:6px;padding:10px 12px;position:fixed;box-shadow:0 4px 16px #00000026}._notePopoverTitle_13t77_262{color:var(--pdf-text-secondary);margin-bottom:6px;font-size:12px;font-weight:600}._notePopoverContent_13t77_269{color:var(--pdf-text-primary);white-space:pre-wrap;margin:0;font-size:13px;line-height:1.5}._list_gygvf_1{flex-direction:column;display:flex}._emptyState_gygvf_6{color:var(--pdf-text-secondary);padding:20px 14px;font-size:12px}._pageHeader_gygvf_12{color:var(--pdf-text-secondary);text-transform:uppercase;letter-spacing:.5px;background-color:var(--pdf-panel-header-bg);border-bottom:1px solid var(--pdf-panel-border);padding:5px 12px;font-size:10px;font-weight:600}._card_gygvf_23{border:1px solid var(--pdf-panel-border);background-color:var(--pdf-panel-bg);border-radius:6px;margin:8px;padding:10px 12px;font-size:12px;transition:box-shadow .12s}._cardClickable_gygvf_33{cursor:pointer}._cardClickable_gygvf_33:hover{box-shadow:0 1px 6px var(--pdf-shadow-page)}._cardHeader_gygvf_41{justify-content:space-between;align-items:center;margin-bottom:4px;display:flex}._cardLabel_gygvf_48{color:var(--pdf-text-secondary);align-items:center;gap:5px;font-size:11px;font-weight:600;display:flex}._cardPage_gygvf_57{color:var(--pdf-text-secondary);font-size:10px}._cardAuthor_gygvf_62{color:var(--pdf-text-muted);margin-bottom:3px;font-size:11px}._cardContent_gygvf_68{color:var(--pdf-text-primary);font-size:12px;line-height:1.5}._iconWrapper_gygvf_74{justify-content:center;align-items:center;display:flex;position:relative}._badge_gygvf_81{background-color:var(--pdf-badge-bg);color:#fff;text-align:center;pointer-events:none;box-sizing:border-box;border-radius:7px;min-width:14px;height:14px;padding:0 3px;font-size:9px;font-weight:700;line-height:14px;position:absolute;top:-5px;right:-7px}._list_12ybz_1{flex-direction:column;gap:6px;padding:8px;display:flex}._emptyState_12ybz_8{color:var(--pdf-text-muted);text-align:center;padding:24px 14px;font-size:12px}._card_12ybz_15{border:1px solid var(--pdf-border);background:var(--pdf-panel-bg);text-align:left;box-sizing:border-box;border-radius:8px;align-items:center;gap:10px;padding:10px 12px;font-family:inherit;font-size:12px;transition:box-shadow .15s,border-color .15s;display:flex;overflow:hidden}._fileIcon_12ybz_33{color:var(--pdf-text-muted);flex-shrink:0;align-items:center;display:flex}._filename_12ybz_40{min-width:0;color:var(--pdf-text-primary);text-overflow:ellipsis;white-space:nowrap;flex:1;font-size:12px;font-weight:500;overflow:hidden}._downloadBtn_12ybz_51{border:1px solid var(--pdf-border);background:var(--pdf-surface);width:28px;height:28px;color:var(--pdf-text-secondary);cursor:pointer;border-radius:6px;flex-shrink:0;justify-content:center;align-items:center;padding:0;font-family:inherit;transition:background .15s,border-color .15s,color .15s;display:flex}._downloadBtn_12ybz_51:hover{background:var(--pdf-accent);border-color:var(--pdf-accent);color:#fff}._iconWrapper_12ybz_77{justify-content:center;align-items:center;display:flex;position:relative}._badge_12ybz_84{background-color:var(--pdf-badge-bg);color:#fff;text-align:center;pointer-events:none;box-sizing:border-box;border-radius:7px;min-width:14px;height:14px;padding:0 3px;font-size:9px;font-weight:700;line-height:14px;position:absolute;top:-5px;right:-7px}._btn_1dub8_1{color:var(--pdf-text-secondary);cursor:pointer;white-space:nowrap;background:0 0;border:none;border-radius:4px;justify-content:center;align-items:center;gap:5px;padding:6px 8px;font-family:inherit;font-size:13px;line-height:1;transition:background .12s,color .12s;display:flex}._btn_1dub8_1:hover:not(:disabled){background:var(--pdf-surface);color:var(--pdf-text-primary)}._btn_1dub8_1:disabled{color:var(--pdf-border);cursor:default}._primary_1dub8_31{background:var(--pdf-accent);color:#fff;padding:6px 14px}._primary_1dub8_31:hover:not(:disabled){background:var(--pdf-accent-hover);color:#fff}._navWrapper_14eo9_1{align-items:center;gap:2px;display:flex}._pageInput_14eo9_7{background:var(--pdf-surface);width:32px;color:var(--pdf-text-primary);font-variant-numeric:tabular-nums;text-align:center;border:1px solid #0000;border-radius:4px;outline:none;padding:3px 4px;font-family:inherit;font-size:12px}._pageInput_14eo9_7:focus{border-color:var(--pdf-accent)}._pageInput_14eo9_7::-webkit-outer-spin-button{-webkit-appearance:none}._pageInput_14eo9_7::-webkit-inner-spin-button{-webkit-appearance:none}._pageInput_14eo9_7{-moz-appearance:textfield}._pageTotal_14eo9_34{color:var(--pdf-text-placeholder);font-variant-numeric:tabular-nums;font-size:12px}._emptyState_hqvdn_1{color:var(--pdf-text-secondary);padding:20px 14px;font-size:12px}._tree_hqvdn_7{flex-direction:column;padding:4px 0;display:flex}._row_hqvdn_13{color:var(--pdf-text-secondary);cursor:pointer;border-radius:4px;align-items:center;gap:4px;margin:0 4px;padding:5px 12px;font-size:12px;line-height:1.4;display:flex}._row_hqvdn_13:hover{background-color:var(--pdf-surface-hover);color:var(--pdf-text-primary)}._chevronBtn_hqvdn_31{cursor:pointer;color:var(--pdf-text-secondary);background:0 0;border:none;flex-shrink:0;align-items:center;padding:0;display:flex}._chevronBtn_hqvdn_31:hover{color:var(--pdf-text-muted)}._title_hqvdn_46{text-overflow:ellipsis;white-space:nowrap;flex:1;overflow:hidden}._wrapper_18kvs_1{align-items:center;gap:4px;display:flex}._searchIconWrapper_18kvs_7{color:var(--pdf-text-secondary);align-items:center;display:flex}._searchInput_18kvs_13{background:var(--pdf-surface);border:1px solid var(--pdf-border);color:var(--pdf-text-primary);border-radius:4px;outline:none;width:180px;padding:4px 8px;font-family:inherit;font-size:13px}._searchInput_18kvs_13:focus{border-color:var(--pdf-accent)}._searchInput_18kvs_13::placeholder{color:var(--pdf-text-placeholder)}._navButton_18kvs_33{color:var(--pdf-text-secondary);cursor:pointer;background:0 0;border:none;border-radius:4px;align-items:center;padding:4px 5px;display:flex}._navButton_18kvs_33:hover:not(:disabled){background:var(--pdf-surface);color:var(--pdf-text-primary)}._navButton_18kvs_33:disabled{color:var(--pdf-border);cursor:default}._counter_18kvs_54{color:var(--pdf-text-muted);text-align:center;min-width:36px;font-size:11px}._list_b0wj1_1{flex-direction:column;gap:6px;padding:8px;display:flex}._emptyState_b0wj1_8{color:var(--pdf-text-muted);text-align:center;padding:24px 14px;font-size:12px}._card_b0wj1_15{border:1px solid var(--pdf-border);background:var(--pdf-panel-bg);text-align:left;cursor:default;box-sizing:border-box;border-radius:8px;width:100%;font-family:inherit;font-size:12px;transition:box-shadow .15s,border-color .15s;position:relative;overflow:hidden}._cardSigned_b0wj1_32{background:#22c55e0a;border-color:#22c55e47}._cardClickable_b0wj1_37{cursor:pointer}._cardClickable_b0wj1_37:hover{box-shadow:0 2px 10px var(--pdf-shadow-page);border-color:var(--pdf-border-light)}._cardSigned_b0wj1_32._cardClickable_b0wj1_37:hover{border-color:#22c55e73}._cardBody_b0wj1_50{padding:10px 12px 10px 16px}._cardHeader_b0wj1_54{justify-content:space-between;align-items:center;gap:8px;margin-bottom:8px;display:flex}._fieldName_b0wj1_62{color:var(--pdf-text-primary);text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;font-size:12px;font-weight:600;overflow:hidden}._statusChip_b0wj1_73{text-transform:uppercase;letter-spacing:.5px;background:var(--pdf-surface-hover);color:var(--pdf-text-muted);border:1px solid var(--pdf-border);border-radius:20px;flex-shrink:0;align-items:center;gap:4px;padding:2px 7px;font-size:10px;font-weight:700;display:inline-flex}._statusChipSigned_b0wj1_89{color:#15803d;background:#22c55e1f;border-color:#22c55e4d}._fieldList_b0wj1_95{flex-direction:column;gap:4px;display:flex}._fieldRow_b0wj1_101{grid-template-columns:72px 1fr;gap:4px;font-size:11px;line-height:1.5;display:grid}._fieldLabel_b0wj1_109{color:var(--pdf-text-muted);font-weight:500}._fieldValue_b0wj1_114{color:var(--pdf-text-secondary);word-break:break-word}._iconWrapper_b0wj1_119{justify-content:center;align-items:center;display:flex;position:relative}._badge_b0wj1_126{background-color:var(--pdf-badge-bg);color:#fff;text-align:center;pointer-events:none;box-sizing:border-box;border-radius:7px;min-width:14px;height:14px;padding:0 3px;font-size:9px;font-weight:700;line-height:14px;position:absolute;top:-5px;right:-7px}._thumbnailList_t3mg8_1{background-color:var(--pdf-panel-bg);padding-bottom:8px}._thumbnailItem_t3mg8_6{cursor:pointer;text-align:center;background-color:#0000;border-left:2px solid #0000;padding:12px 16px;transition:background-color .15s}._thumbnailItem_t3mg8_6:hover{background-color:var(--pdf-surface-hover)}._thumbnailItemActive_t3mg8_19{background-color:var(--pdf-accent-subtle);border-left-color:var(--pdf-accent)}._thumbnailItemActive_t3mg8_19:hover{background-color:var(--pdf-accent-subtle)}._thumbnailImg_t3mg8_28{width:120px;box-shadow:0 1px 4px var(--pdf-shadow-page);border-radius:2px}._thumbnailImgActive_t3mg8_34{box-shadow:0 0 0 2px var(--pdf-accent), 0 2px 8px var(--pdf-shadow-page)}._thumbnailSkeleton_t3mg8_40{background:linear-gradient(90deg, var(--pdf-surface) 25%, var(--pdf-surface-hover) 50%, var(--pdf-surface) 75%);background-size:200% 100%;border-radius:2px;width:120px;height:160px;animation:1.4s infinite _shimmer_t3mg8_1}@keyframes _shimmer_t3mg8_1{0%{background-position:200% 0}to{background-position:-200% 0}}._thumbnailLabel_t3mg8_63{color:var(--pdf-text-muted);margin-top:6px;font-size:11px;font-weight:400}._thumbnailLabelActive_t3mg8_70{color:var(--pdf-accent-hover);font-weight:600}._zoomLabel_m8iv9_1{text-align:center;min-width:42px;color:var(--pdf-text-muted);font-variant-numeric:tabular-nums;font-size:12px}._toolbar_1b8zt_1{flex:1;align-items:center;gap:2px;min-width:0;display:flex}._item_1b8zt_9{flex-shrink:0;align-items:center;display:flex}._overflowWrapper_1b8zt_15{flex-shrink:0;margin-left:auto;position:relative}._overflowBtnActive_1b8zt_21{background:var(--pdf-surface);color:var(--pdf-text-primary)}._dropdown_1b8zt_26{background:var(--pdf-bg);border:1px solid var(--pdf-border);z-index:100;border-radius:6px;flex-direction:column;gap:1px;padding:4px;display:flex;position:absolute;top:calc(100% + 6px);right:0;box-shadow:0 4px 16px #0000002e}._dropdownItem_1b8zt_41{border-radius:4px;justify-content:flex-end;align-items:center;padding:1px 2px;display:flex}._dropdownItem_1b8zt_41>*{flex-shrink:0}._labeledItem_1b8zt_53{align-items:center;gap:8px;width:100%;display:flex}._itemContent_1b8zt_60{flex-shrink:0;align-items:center;display:flex}._itemLabel_1b8zt_66{color:var(--pdf-text-secondary);white-space:nowrap;-webkit-user-select:none;user-select:none;flex:1;font-size:12px}._separator_b9iob_1{background:var(--pdf-toolbar-separator);flex-shrink:0;width:1px;height:20px;margin:0 4px}._separatorH_b9iob_9{background:var(--pdf-toolbar-separator);height:1px;margin:2px 4px}
1
+ ._wrapper_1kvg0_1{border-right:1px solid var(--pdf-border);height:100%;display:flex}._wrapperCollapsed_1kvg0_7{border-right:1px solid var(--pdf-border);background-color:var(--pdf-bg);flex-direction:column;height:100%;padding-top:4px;display:flex}._buttonBar_1kvg0_16{background-color:var(--pdf-bg);flex-direction:column;flex-shrink:0;gap:2px;width:48px;padding-top:4px;display:flex}._toggleButton_1kvg0_26{border-bottom:1px solid var(--pdf-border);border-radius:0;width:48px;margin:0;padding-bottom:6px}._panelButton_1kvg0_35{cursor:pointer;width:44px;height:44px;color:var(--pdf-text-muted);background-color:#0000;border:none;border-radius:6px;justify-content:center;align-items:center;margin:0 2px;transition:background-color .15s,color .15s;display:flex}._panelButton_1kvg0_35:hover{background-color:var(--pdf-surface);color:var(--pdf-text-secondary)}._panelButtonActive_1kvg0_57{background-color:var(--pdf-surface);color:var(--pdf-accent-light)}._panelButtonActive_1kvg0_57:hover{color:var(--pdf-accent-light)}._contentPanel_1kvg0_66{background-color:var(--pdf-panel-bg);border-right:1px solid var(--pdf-panel-border);flex-direction:column;width:260px;display:flex}._panelHeader_1kvg0_74{color:var(--pdf-text-muted);text-transform:uppercase;letter-spacing:.6px;border-bottom:1px solid var(--pdf-panel-border);background-color:var(--pdf-panel-header-bg);flex-shrink:0;padding:10px 14px;font-size:11px;font-weight:600}._panelBody_1kvg0_86{flex:1;overflow-y:auto}._appLayout_1716z_1{flex-direction:column;width:100%;height:100%;display:flex;overflow:hidden}._body_1716z_17{flex-direction:row;flex:1;min-height:0;display:flex;overflow:hidden}._toolbar_1716z_33{border-bottom:1px solid var(--pdf-border);background-color:var(--pdf-bg);z-index:10;flex-shrink:0;align-items:center;gap:2px;height:44px;padding:0 12px;display:flex}._scrollContainer_1716z_57{background-color:var(--pdf-scroll-area);touch-action:pan-x pan-y;flex-direction:column;flex:1;padding:10px 20px;display:flex;position:relative;overflow:auto}._pageWrapper_1716z_79{margin:0 auto 25px;position:relative}._pageCanvas_1716z_89{z-index:1;box-shadow:0 5px 20px var(--pdf-shadow-page);pointer-events:none;background-color:#fff;display:block;position:relative}._textLayer_1716z_107{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light only;text-align:initial;opacity:1;-webkit-text-size-adjust:none;-moz-text-size-adjust:none;text-size-adjust:none;forced-color-adjust:none;transform-origin:0 0;caret-color:canvastext;z-index:2;--min-font-size:1;--text-scale-factor:calc(var(--total-scale-factor) * var(--min-font-size));--min-font-size-inv:calc(1 / var(--min-font-size));line-height:1;position:absolute;inset:0;overflow:clip}._textLayer_1716z_107 :is(span,br){color:#0000;white-space:pre;cursor:text;transform-origin:0 0;position:absolute}._textLayer_1716z_107>:not(._markedContent_1716z_159),._textLayer_1716z_107 ._markedContent_1716z_159 span:not(._markedContent_1716z_159){z-index:1;--font-height:0;font-size:calc(var(--text-scale-factor) * var(--font-height));--scale-x:1;--rotate:0deg;transform:rotate(var(--rotate)) scaleX(var(--scale-x)) scale(var(--min-font-size-inv))}._textLayer_1716z_107 ._markedContent_1716z_159{display:contents}._textLayer_1716z_107 ._endOfContent_1716z_189{z-index:0;cursor:default;-webkit-user-select:none;user-select:none;display:block;position:absolute;inset:100% 0 0}._textLayer_1716z_107._selecting_1716z_207 ._endOfContent_1716z_189{top:0}._textLayer_1716z_107 ::selection{background:#0000ff40}._textLayer_1716z_107 br::selection{background:0 0}._documentLoading_1716z_247{pointer-events:none;z-index:10;justify-content:center;align-items:center;display:flex;position:absolute;inset:0}._documentLoading_1716z_247:after{content:"";border:3px solid #0000001a;border-top-color:var(--pdf-accent);border-radius:50%;width:40px;height:40px;animation:.8s linear infinite _spin_1716z_1}._pageSkeleton_1716z_287{z-index:0;pointer-events:none;background:#fff;border-radius:1px;justify-content:center;align-items:center;display:flex;position:absolute;top:0;left:0}._pageSkeleton_1716z_287:after{content:"";border:3px solid #0000001a;border-top-color:var(--pdf-accent);border-radius:50%;width:32px;height:32px;animation:.8s linear infinite _spin_1716z_1}@keyframes _spin_1716z_1{to{transform:rotate(360deg)}}._highlightOverlay_1716z_345{z-index:4;pointer-events:none;background-color:#ffdc0059;border:2px solid #ffa000e6;border-radius:2px;position:absolute}._linkOverlay_1716z_363{z-index:3;pointer-events:all;cursor:pointer;position:absolute}._searchMatchOverlay_1716z_377{z-index:3;pointer-events:none;background-color:#fde0474d;border-bottom:2px solid #eab308cc;position:absolute}._noteOverlay_1716z_393{z-index:3;pointer-events:all;cursor:pointer;position:absolute}._noteIconOverlay_1716z_407{z-index:3;pointer-events:all;cursor:pointer;border-radius:3px;justify-content:center;align-items:center;transition:background-color .1s;display:flex;position:absolute}._noteIconOverlay_1716z_407:hover{background-color:#ffd20033;outline:1px solid #a0780066}._requireReadBanner_1716z_441{font-size:13px;font-weight:500;font-family:var(--pdf-font-family);color:#fff;background-color:color-mix(in srgb, var(--pdf-accent) 82%, transparent);-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);z-index:10;pointer-events:none;-webkit-user-select:none;user-select:none;border-radius:5px;align-self:flex-end;align-items:center;gap:8px;margin-top:auto;margin-right:25px;padding:9px 16px;transition:background-color .4s;display:flex;position:sticky;bottom:12px;box-shadow:0 2px 12px #0000002e}._requireReadDone_1716z_489{background-color:#16a34abf}._notePopover_1716z_497{z-index:9999;background-color:var(--pdf-surface);border:1px solid var(--pdf-border);min-width:160px;max-width:280px;font-family:var(--pdf-font-family);border-radius:6px;padding:10px 12px;position:fixed;box-shadow:0 4px 16px #00000026}._notePopoverTitle_1716z_523{color:var(--pdf-text-secondary);margin-bottom:6px;font-size:12px;font-weight:600}._notePopoverContent_1716z_537{color:var(--pdf-text-primary);white-space:pre-wrap;margin:0;font-size:13px;line-height:1.5}._list_gygvf_1{flex-direction:column;display:flex}._emptyState_gygvf_6{color:var(--pdf-text-secondary);padding:20px 14px;font-size:12px}._pageHeader_gygvf_12{color:var(--pdf-text-secondary);text-transform:uppercase;letter-spacing:.5px;background-color:var(--pdf-panel-header-bg);border-bottom:1px solid var(--pdf-panel-border);padding:5px 12px;font-size:10px;font-weight:600}._card_gygvf_23{border:1px solid var(--pdf-panel-border);background-color:var(--pdf-panel-bg);border-radius:6px;margin:8px;padding:10px 12px;font-size:12px;transition:box-shadow .12s}._cardClickable_gygvf_33{cursor:pointer}._cardClickable_gygvf_33:hover{box-shadow:0 1px 6px var(--pdf-shadow-page)}._cardHeader_gygvf_41{justify-content:space-between;align-items:center;margin-bottom:4px;display:flex}._cardLabel_gygvf_48{color:var(--pdf-text-secondary);align-items:center;gap:5px;font-size:11px;font-weight:600;display:flex}._cardPage_gygvf_57{color:var(--pdf-text-secondary);font-size:10px}._cardAuthor_gygvf_62{color:var(--pdf-text-muted);margin-bottom:3px;font-size:11px}._cardContent_gygvf_68{color:var(--pdf-text-primary);font-size:12px;line-height:1.5}._iconWrapper_gygvf_74{justify-content:center;align-items:center;display:flex;position:relative}._badge_gygvf_81{background-color:var(--pdf-badge-bg);color:#fff;text-align:center;pointer-events:none;box-sizing:border-box;border-radius:7px;min-width:14px;height:14px;padding:0 3px;font-size:9px;font-weight:700;line-height:14px;position:absolute;top:-5px;right:-7px}._list_12ybz_1{flex-direction:column;gap:6px;padding:8px;display:flex}._emptyState_12ybz_8{color:var(--pdf-text-muted);text-align:center;padding:24px 14px;font-size:12px}._card_12ybz_15{border:1px solid var(--pdf-border);background:var(--pdf-panel-bg);text-align:left;box-sizing:border-box;border-radius:8px;align-items:center;gap:10px;padding:10px 12px;font-family:inherit;font-size:12px;transition:box-shadow .15s,border-color .15s;display:flex;overflow:hidden}._fileIcon_12ybz_33{color:var(--pdf-text-muted);flex-shrink:0;align-items:center;display:flex}._filename_12ybz_40{min-width:0;color:var(--pdf-text-primary);text-overflow:ellipsis;white-space:nowrap;flex:1;font-size:12px;font-weight:500;overflow:hidden}._downloadBtn_12ybz_51{border:1px solid var(--pdf-border);background:var(--pdf-surface);width:28px;height:28px;color:var(--pdf-text-secondary);cursor:pointer;border-radius:6px;flex-shrink:0;justify-content:center;align-items:center;padding:0;font-family:inherit;transition:background .15s,border-color .15s,color .15s;display:flex}._downloadBtn_12ybz_51:hover{background:var(--pdf-accent);border-color:var(--pdf-accent);color:#fff}._iconWrapper_12ybz_77{justify-content:center;align-items:center;display:flex;position:relative}._badge_12ybz_84{background-color:var(--pdf-badge-bg);color:#fff;text-align:center;pointer-events:none;box-sizing:border-box;border-radius:7px;min-width:14px;height:14px;padding:0 3px;font-size:9px;font-weight:700;line-height:14px;position:absolute;top:-5px;right:-7px}._btn_1dub8_1{color:var(--pdf-text-secondary);cursor:pointer;white-space:nowrap;background:0 0;border:none;border-radius:4px;justify-content:center;align-items:center;gap:5px;padding:6px 8px;font-family:inherit;font-size:13px;line-height:1;transition:background .12s,color .12s;display:flex}._btn_1dub8_1:hover:not(:disabled){background:var(--pdf-surface);color:var(--pdf-text-primary)}._btn_1dub8_1:disabled{color:var(--pdf-border);cursor:default}._primary_1dub8_31{background:var(--pdf-accent);color:#fff;padding:6px 14px}._primary_1dub8_31:hover:not(:disabled){background:var(--pdf-accent-hover);color:#fff}._navWrapper_14eo9_1{align-items:center;gap:2px;display:flex}._pageInput_14eo9_7{background:var(--pdf-surface);width:32px;color:var(--pdf-text-primary);font-variant-numeric:tabular-nums;text-align:center;border:1px solid #0000;border-radius:4px;outline:none;padding:3px 4px;font-family:inherit;font-size:12px}._pageInput_14eo9_7:focus{border-color:var(--pdf-accent)}._pageInput_14eo9_7::-webkit-outer-spin-button{-webkit-appearance:none}._pageInput_14eo9_7::-webkit-inner-spin-button{-webkit-appearance:none}._pageInput_14eo9_7{-moz-appearance:textfield}._pageTotal_14eo9_34{color:var(--pdf-text-placeholder);font-variant-numeric:tabular-nums;font-size:12px}._emptyState_hqvdn_1{color:var(--pdf-text-secondary);padding:20px 14px;font-size:12px}._tree_hqvdn_7{flex-direction:column;padding:4px 0;display:flex}._row_hqvdn_13{color:var(--pdf-text-secondary);cursor:pointer;border-radius:4px;align-items:center;gap:4px;margin:0 4px;padding:5px 12px;font-size:12px;line-height:1.4;display:flex}._row_hqvdn_13:hover{background-color:var(--pdf-surface-hover);color:var(--pdf-text-primary)}._chevronBtn_hqvdn_31{cursor:pointer;color:var(--pdf-text-secondary);background:0 0;border:none;flex-shrink:0;align-items:center;padding:0;display:flex}._chevronBtn_hqvdn_31:hover{color:var(--pdf-text-muted)}._title_hqvdn_46{text-overflow:ellipsis;white-space:nowrap;flex:1;overflow:hidden}._wrapper_18kvs_1{align-items:center;gap:4px;display:flex}._searchIconWrapper_18kvs_7{color:var(--pdf-text-secondary);align-items:center;display:flex}._searchInput_18kvs_13{background:var(--pdf-surface);border:1px solid var(--pdf-border);color:var(--pdf-text-primary);border-radius:4px;outline:none;width:180px;padding:4px 8px;font-family:inherit;font-size:13px}._searchInput_18kvs_13:focus{border-color:var(--pdf-accent)}._searchInput_18kvs_13::placeholder{color:var(--pdf-text-placeholder)}._navButton_18kvs_33{color:var(--pdf-text-secondary);cursor:pointer;background:0 0;border:none;border-radius:4px;align-items:center;padding:4px 5px;display:flex}._navButton_18kvs_33:hover:not(:disabled){background:var(--pdf-surface);color:var(--pdf-text-primary)}._navButton_18kvs_33:disabled{color:var(--pdf-border);cursor:default}._counter_18kvs_54{color:var(--pdf-text-muted);text-align:center;min-width:36px;font-size:11px}._list_b0wj1_1{flex-direction:column;gap:6px;padding:8px;display:flex}._emptyState_b0wj1_8{color:var(--pdf-text-muted);text-align:center;padding:24px 14px;font-size:12px}._card_b0wj1_15{border:1px solid var(--pdf-border);background:var(--pdf-panel-bg);text-align:left;cursor:default;box-sizing:border-box;border-radius:8px;width:100%;font-family:inherit;font-size:12px;transition:box-shadow .15s,border-color .15s;position:relative;overflow:hidden}._cardSigned_b0wj1_32{background:#22c55e0a;border-color:#22c55e47}._cardClickable_b0wj1_37{cursor:pointer}._cardClickable_b0wj1_37:hover{box-shadow:0 2px 10px var(--pdf-shadow-page);border-color:var(--pdf-border-light)}._cardSigned_b0wj1_32._cardClickable_b0wj1_37:hover{border-color:#22c55e73}._cardBody_b0wj1_50{padding:10px 12px 10px 16px}._cardHeader_b0wj1_54{justify-content:space-between;align-items:center;gap:8px;margin-bottom:8px;display:flex}._fieldName_b0wj1_62{color:var(--pdf-text-primary);text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;font-size:12px;font-weight:600;overflow:hidden}._statusChip_b0wj1_73{text-transform:uppercase;letter-spacing:.5px;background:var(--pdf-surface-hover);color:var(--pdf-text-muted);border:1px solid var(--pdf-border);border-radius:20px;flex-shrink:0;align-items:center;gap:4px;padding:2px 7px;font-size:10px;font-weight:700;display:inline-flex}._statusChipSigned_b0wj1_89{color:#15803d;background:#22c55e1f;border-color:#22c55e4d}._fieldList_b0wj1_95{flex-direction:column;gap:4px;display:flex}._fieldRow_b0wj1_101{grid-template-columns:72px 1fr;gap:4px;font-size:11px;line-height:1.5;display:grid}._fieldLabel_b0wj1_109{color:var(--pdf-text-muted);font-weight:500}._fieldValue_b0wj1_114{color:var(--pdf-text-secondary);word-break:break-word}._iconWrapper_b0wj1_119{justify-content:center;align-items:center;display:flex;position:relative}._badge_b0wj1_126{background-color:var(--pdf-badge-bg);color:#fff;text-align:center;pointer-events:none;box-sizing:border-box;border-radius:7px;min-width:14px;height:14px;padding:0 3px;font-size:9px;font-weight:700;line-height:14px;position:absolute;top:-5px;right:-7px}._thumbnailList_t3mg8_1{background-color:var(--pdf-panel-bg);padding-bottom:8px}._thumbnailItem_t3mg8_6{cursor:pointer;text-align:center;background-color:#0000;border-left:2px solid #0000;padding:12px 16px;transition:background-color .15s}._thumbnailItem_t3mg8_6:hover{background-color:var(--pdf-surface-hover)}._thumbnailItemActive_t3mg8_19{background-color:var(--pdf-accent-subtle);border-left-color:var(--pdf-accent)}._thumbnailItemActive_t3mg8_19:hover{background-color:var(--pdf-accent-subtle)}._thumbnailImg_t3mg8_28{width:120px;box-shadow:0 1px 4px var(--pdf-shadow-page);border-radius:2px}._thumbnailImgActive_t3mg8_34{box-shadow:0 0 0 2px var(--pdf-accent), 0 2px 8px var(--pdf-shadow-page)}._thumbnailSkeleton_t3mg8_40{background:linear-gradient(90deg, var(--pdf-surface) 25%, var(--pdf-surface-hover) 50%, var(--pdf-surface) 75%);background-size:200% 100%;border-radius:2px;width:120px;height:160px;animation:1.4s infinite _shimmer_t3mg8_1}@keyframes _shimmer_t3mg8_1{0%{background-position:200% 0}to{background-position:-200% 0}}._thumbnailLabel_t3mg8_63{color:var(--pdf-text-muted);margin-top:6px;font-size:11px;font-weight:400}._thumbnailLabelActive_t3mg8_70{color:var(--pdf-accent-hover);font-weight:600}._zoomLabel_m8iv9_1{text-align:center;min-width:42px;color:var(--pdf-text-muted);font-variant-numeric:tabular-nums;font-size:12px}._toolbar_1b8zt_1{flex:1;align-items:center;gap:2px;min-width:0;display:flex}._item_1b8zt_9{flex-shrink:0;align-items:center;display:flex}._overflowWrapper_1b8zt_15{flex-shrink:0;margin-left:auto;position:relative}._overflowBtnActive_1b8zt_21{background:var(--pdf-surface);color:var(--pdf-text-primary)}._dropdown_1b8zt_26{background:var(--pdf-bg);border:1px solid var(--pdf-border);z-index:100;border-radius:6px;flex-direction:column;gap:1px;padding:4px;display:flex;position:absolute;top:calc(100% + 6px);right:0;box-shadow:0 4px 16px #0000002e}._dropdownItem_1b8zt_41{border-radius:4px;justify-content:flex-end;align-items:center;padding:1px 2px;display:flex}._dropdownItem_1b8zt_41>*{flex-shrink:0}._labeledItem_1b8zt_53{align-items:center;gap:8px;width:100%;display:flex}._itemContent_1b8zt_60{flex-shrink:0;align-items:center;display:flex}._itemLabel_1b8zt_66{color:var(--pdf-text-secondary);white-space:nowrap;-webkit-user-select:none;user-select:none;flex:1;font-size:12px}._separator_b9iob_1{background:var(--pdf-toolbar-separator);flex-shrink:0;width:1px;height:20px;margin:0 4px}._separatorH_b9iob_9{background:var(--pdf-toolbar-separator);height:1px;margin:2px 4px}
2
2
  /*$vite$:1*/
@@ -1,13 +1,18 @@
1
+ import { MIN_ZOOM as e } from "./zoom.js";
1
2
  //#region src/utils/pdfFit.ts
2
- var e = 60, t = 10;
3
- async function n(n, r, i, a) {
4
- let o = (await r.getPage(1)).getViewport({
3
+ var t = 60, n = 10;
4
+ async function r(r, i, a, o) {
5
+ if (a.clientWidth <= t) return 1;
6
+ let s = (await i.getPage(1)).getViewport({
5
7
  scale: 1,
6
- rotation: a
7
- }), s = i.clientWidth - e;
8
- if (n === "width") return s / o.width;
9
- let c = i.clientHeight - t * 2;
10
- return Math.min(s / o.width, c / o.height);
8
+ rotation: o
9
+ }), c = a.clientWidth - t, l;
10
+ if (r === "width") l = c / s.width;
11
+ else {
12
+ let e = a.clientHeight - n * 2;
13
+ l = Math.min(c / s.width, e / s.height);
14
+ }
15
+ return Math.max(e, Math.min(5, l));
11
16
  }
12
17
  //#endregion
13
- export { n as computeFit };
18
+ export { r as computeFit };
@@ -1,4 +1,4 @@
1
- export declare function usePDFLoader(file: File, wasmUrl?: string): {
1
+ export declare function usePDFLoader(file: File): {
2
2
  pdf: import('pdfjs-dist/types/src/display/api').PDFDocumentProxy | null;
3
3
  numPages: number;
4
4
  loading: boolean;
@@ -0,0 +1 @@
1
+ export {};
package/package.json CHANGED
@@ -1,64 +1,64 @@
1
- {
2
- "name": "pdf-tsx",
3
- "version": "0.17.2",
4
- "description": "A fully-featured, composable PDF viewer component for React",
5
- "type": "module",
6
- "main": "./dist/cjs/index.cjs",
7
- "module": "./dist/es/index.js",
8
- "types": "./dist/index.d.ts",
9
- "sideEffects": false,
10
- "exports": {
11
- ".": {
12
- "types": "./dist/index.d.ts",
13
- "import": "./dist/es/index.js",
14
- "require": "./dist/cjs/index.cjs"
15
- },
16
- "./dist/*": "./dist/*"
17
- },
18
- "keywords": [
19
- "pdf",
20
- "pdf-viewer",
21
- "react",
22
- "pdfjs",
23
- "typescript"
24
- ],
25
- "license": "MIT",
26
- "files": [
27
- "dist",
28
- "LICENSE",
29
- "README.md"
30
- ],
31
- "scripts": {
32
- "dev": "vite",
33
- "watch": "tsc -b --watch",
34
- "typecheck": "tsc -b --noEmit",
35
- "build": "vite build",
36
- "tsc": "tsc --noEmit",
37
- "lint": "eslint .",
38
- "format": "prettier --write \"src/**/*.{ts,tsx,css}\"",
39
- "preview": "vite preview"
40
- },
41
- "peerDependencies": {
42
- "pdfjs-dist": "~5.6.205",
43
- "react": ">=18",
44
- "react-dom": ">=18"
45
- },
46
- "devDependencies": {
47
- "@eslint/js": "^10.0.1",
48
- "@types/node": "^25.9.3",
49
- "@types/react": "^19.2.17",
50
- "@types/react-dom": "^19.2.3",
51
- "@vitejs/plugin-react": "^6.0.2",
52
- "eslint": "^10.4.1",
53
- "eslint-plugin-react-hooks": "^7.1.1",
54
- "eslint-plugin-react-refresh": "^0.5.2",
55
- "globals": "^17.6.0",
56
- "prettier": "^3.8.4",
57
- "react-icons": "^5.6.0",
58
- "react-scan": "^1.2.0",
59
- "typescript": "^6.0.3",
60
- "typescript-eslint": "^8.61.0",
61
- "vite": "^8.0.16",
62
- "vite-plugin-dts": "^5.0.2"
63
- }
64
- }
1
+ {
2
+ "name": "pdf-tsx",
3
+ "version": "0.17.4",
4
+ "description": "A fully-featured, composable PDF viewer component for React",
5
+ "type": "module",
6
+ "main": "./dist/cjs/index.cjs",
7
+ "module": "./dist/es/index.js",
8
+ "types": "./dist/index.d.ts",
9
+ "sideEffects": false,
10
+ "exports": {
11
+ ".": {
12
+ "types": "./dist/index.d.ts",
13
+ "import": "./dist/es/index.js",
14
+ "require": "./dist/cjs/index.cjs"
15
+ },
16
+ "./dist/*": "./dist/*"
17
+ },
18
+ "keywords": [
19
+ "pdf",
20
+ "pdf-viewer",
21
+ "react",
22
+ "pdfjs",
23
+ "typescript"
24
+ ],
25
+ "license": "MIT",
26
+ "files": [
27
+ "dist",
28
+ "LICENSE",
29
+ "README.md"
30
+ ],
31
+ "scripts": {
32
+ "dev": "vite",
33
+ "watch": "tsc -b --watch",
34
+ "typecheck": "tsc -b --noEmit",
35
+ "build": "vite build",
36
+ "tsc": "tsc --noEmit",
37
+ "lint": "eslint .",
38
+ "format": "prettier --write \"src/**/*.{ts,tsx,css}\"",
39
+ "preview": "vite preview"
40
+ },
41
+ "peerDependencies": {
42
+ "pdfjs-dist": "~5.6.205",
43
+ "react": ">=18",
44
+ "react-dom": ">=18"
45
+ },
46
+ "devDependencies": {
47
+ "@eslint/js": "^10.0.1",
48
+ "@types/node": "^25.9.3",
49
+ "@types/react": "^19.2.17",
50
+ "@types/react-dom": "^19.2.3",
51
+ "@vitejs/plugin-react": "^6.0.2",
52
+ "eslint": "^10.4.1",
53
+ "eslint-plugin-react-hooks": "^7.1.1",
54
+ "eslint-plugin-react-refresh": "^0.5.2",
55
+ "globals": "^17.6.0",
56
+ "prettier": "^3.8.4",
57
+ "react-icons": "^5.6.0",
58
+ "react-scan": "^1.2.0",
59
+ "typescript": "^6.0.3",
60
+ "typescript-eslint": "^8.61.0",
61
+ "vite": "^8.0.16",
62
+ "vite-plugin-dts": "^5.0.2"
63
+ }
64
+ }
@@ -1,10 +0,0 @@
1
- import { ReactNode } from 'react';
2
- interface PDFSignButtonProps {
3
- icon: ReactNode;
4
- onSign: (file: File) => void;
5
- }
6
- export declare function PDFSignButton({ icon, onSign }: PDFSignButtonProps): import("react/jsx-runtime").JSX.Element;
7
- export declare namespace PDFSignButton {
8
- var toolbarLabelKey: "signButtonToolbarLabel";
9
- }
10
- export {};
@@ -1,10 +0,0 @@
1
- interface SignaturePadProps {
2
- onChange: (dataUrl: string | null) => void;
3
- width?: number;
4
- height?: number;
5
- strokeColor?: string;
6
- strokeWidth?: number;
7
- showInstructions?: boolean;
8
- }
9
- export declare function SignaturePad({ onChange, width, height, strokeColor, strokeWidth, showInstructions, }: SignaturePadProps): import("react/jsx-runtime").JSX.Element;
10
- export {};