pdf-tsx 1.1.1 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (100) hide show
  1. package/LICENSE +78 -78
  2. package/README.md +678 -678
  3. package/dist/cjs/components/PDFViewer.module.cjs +1 -1
  4. package/dist/cjs/components/features/PDFOutline.cjs +1 -1
  5. package/dist/cjs/components/features/PDFViewModeToggle.module.cjs +1 -1
  6. package/dist/cjs/favicon.svg +9 -9
  7. package/dist/cjs/hooks/useAnnotationLayer.cjs +1 -1
  8. package/dist/cjs/hooks/useOverlayRects.cjs +1 -1
  9. package/dist/cjs/hooks/usePDFRenderer.cjs +1 -1
  10. package/dist/cjs/hooks/useTextLayer.cjs +1 -1
  11. package/dist/cjs/hooks/useThumbnails.cjs +1 -1
  12. package/dist/cjs/pdf-tsx.css +1 -1
  13. package/dist/cjs/utils/pdfFit.cjs +1 -1
  14. package/dist/cjs/utils/rotation.cjs +1 -0
  15. package/dist/components/features/PDFSignButton.d.ts +10 -0
  16. package/dist/components/features/SignaturePad.d.ts +10 -0
  17. package/dist/es/components/PDFViewer.module.js +26 -26
  18. package/dist/es/components/features/PDFOutline.js +47 -46
  19. package/dist/es/components/features/PDFViewModeToggle.module.js +8 -8
  20. package/dist/es/favicon.svg +9 -9
  21. package/dist/es/hooks/useAnnotationLayer.js +39 -38
  22. package/dist/es/hooks/useOverlayRects.js +44 -43
  23. package/dist/es/hooks/usePDFRenderer.js +65 -64
  24. package/dist/es/hooks/useTextLayer.js +34 -33
  25. package/dist/es/hooks/useThumbnails.js +33 -32
  26. package/dist/es/pdf-tsx.css +1 -1
  27. package/dist/es/utils/pdfFit.js +13 -12
  28. package/dist/es/utils/rotation.js +6 -0
  29. package/dist/pdf-tsx.cjs.js +5 -0
  30. package/dist/pdf-tsx.css +2 -0
  31. package/dist/pdf-tsx.es.js +2637 -0
  32. package/dist/src/components/PDFSidebar.d.ts +11 -0
  33. package/dist/src/components/PDFViewer.d.ts +23 -0
  34. package/dist/src/components/features/PDFAnnotations.d.ts +5 -0
  35. package/dist/src/components/features/PDFAttachments.d.ts +5 -0
  36. package/dist/src/components/features/PDFChangeFile.d.ts +9 -0
  37. package/dist/src/components/features/PDFDownloadButton.d.ts +9 -0
  38. package/dist/src/components/features/PDFNavigation.d.ts +10 -0
  39. package/dist/src/components/features/PDFOutline.d.ts +1 -0
  40. package/dist/src/components/features/PDFPageFit.d.ts +10 -0
  41. package/dist/src/components/features/PDFPrintButton.d.ts +9 -0
  42. package/dist/src/components/features/PDFRotationControl.d.ts +9 -0
  43. package/dist/src/components/features/PDFSearch.d.ts +13 -0
  44. package/dist/src/components/features/PDFSidebarToggle.d.ts +10 -0
  45. package/dist/src/components/features/PDFSignatures.d.ts +5 -0
  46. package/dist/src/components/features/PDFThemeToggle.d.ts +10 -0
  47. package/dist/src/components/features/PDFThumbnails.d.ts +1 -0
  48. package/dist/src/components/features/PDFViewModeToggle.d.ts +11 -0
  49. package/dist/src/components/features/PDFZoomControls.d.ts +10 -0
  50. package/dist/src/components/ui/PDFToolbar.d.ts +8 -0
  51. package/dist/src/components/ui/PDFToolbarDropdownContext.d.ts +1 -0
  52. package/dist/src/components/ui/PDFToolbarItem.d.ts +7 -0
  53. package/dist/src/components/ui/PDFToolbarSeparator.d.ts +4 -0
  54. package/dist/src/components/ui/ToolbarButton.d.ts +6 -0
  55. package/dist/src/components/ui/icons.d.ts +7 -0
  56. package/dist/src/context/LabelsContext.d.ts +7 -0
  57. package/dist/src/context/PDFViewerContext.d.ts +32 -0
  58. package/dist/src/context/ThemeContext.d.ts +12 -0
  59. package/dist/src/context/labelsContextValue.d.ts +2 -0
  60. package/dist/src/context/themeContextValue.d.ts +7 -0
  61. package/dist/src/hooks/useAnnotationLayer.d.ts +34 -0
  62. package/dist/src/hooks/useAnnotations.d.ts +15 -0
  63. package/dist/src/hooks/useAttachments.d.ts +11 -0
  64. package/dist/src/hooks/useKeyboardShortcuts.d.ts +9 -0
  65. package/dist/src/hooks/useLabels.d.ts +2 -0
  66. package/dist/src/hooks/useOutline.d.ts +14 -0
  67. package/dist/src/hooks/useOverlayRects.d.ts +21 -0
  68. package/dist/src/hooks/usePDFLoader.d.ts +5 -0
  69. package/dist/src/hooks/usePDFRenderer.d.ts +16 -0
  70. package/dist/src/hooks/usePinchZoom.d.ts +1 -0
  71. package/dist/src/hooks/useScrollTracking.d.ts +10 -0
  72. package/dist/src/hooks/useSignatures.d.ts +17 -0
  73. package/dist/src/hooks/useTextLayer.d.ts +10 -0
  74. package/dist/src/hooks/useTextSearch.d.ts +12 -0
  75. package/dist/src/hooks/useTheme.d.ts +2 -0
  76. package/dist/src/hooks/useThumbnails.d.ts +10 -0
  77. package/dist/src/index.d.ts +25 -0
  78. package/dist/src/labels.d.ts +57 -0
  79. package/dist/src/theme.d.ts +27 -0
  80. package/dist/src/utils/pdfFit.d.ts +2 -0
  81. package/dist/src/utils/pdfjsPolyfill.d.ts +2 -0
  82. package/dist/src/utils/url.d.ts +1 -0
  83. package/dist/src/utils/zoom.d.ts +4 -0
  84. package/dist/utils/addSignatureToPdf.d.ts +9 -0
  85. package/dist/utils/rotation.d.ts +7 -0
  86. package/dist/vite.svg +1 -0
  87. package/dist/wasm/LICENSE_JBIG2 +196 -0
  88. package/dist/wasm/LICENSE_OPENJPEG +39 -0
  89. package/dist/wasm/LICENSE_PDFJS_JBIG2 +13 -0
  90. package/dist/wasm/LICENSE_PDFJS_OPENJPEG +22 -0
  91. package/dist/wasm/LICENSE_PDFJS_QCMS +22 -0
  92. package/dist/wasm/LICENSE_QCMS +21 -0
  93. package/dist/wasm/jbig2.wasm +0 -0
  94. package/dist/wasm/jbig2_nowasm_fallback.js +15 -0
  95. package/dist/wasm/openjpeg.wasm +0 -0
  96. package/dist/wasm/openjpeg_nowasm_fallback.js +17 -0
  97. package/dist/wasm/qcms_bg.wasm +0 -0
  98. package/dist/wasm/quickjs-eval.js +16 -0
  99. package/dist/wasm/quickjs-eval.wasm +0 -0
  100. package/package.json +66 -66
@@ -1,63 +1,64 @@
1
- import { useEffect as e, useState as t } from "react";
1
+ import { getEffectiveRotation as e } from "../utils/rotation.js";
2
+ import { useEffect as t, useState as n } from "react";
2
3
  import "pdfjs-dist";
3
4
  //#region src/hooks/useOverlayRects.ts
4
- function n({ pdf: n, highlight: r, searchMatches: i, zoom: a, rotation: o }) {
5
- let [s, c] = t(null), [l, u] = t([]);
6
- return e(() => {
7
- if (!n || i.length === 0) return;
8
- let e = !1;
5
+ function r({ pdf: r, highlight: i, searchMatches: a, zoom: o, rotation: s }) {
6
+ let [c, l] = n(null), [u, d] = n([]);
7
+ return t(() => {
8
+ if (!r || a.length === 0) return;
9
+ let t = !1;
9
10
  return (async () => {
10
- let t = [];
11
- for (let r of i) {
12
- if (e) break;
13
- let [i, s, c, l] = (await n.getPage(r.page)).getViewport({
14
- scale: a,
15
- rotation: o
16
- }).convertToViewportRectangle(r.pdfRect);
17
- t.push({
18
- page: r.page,
19
- x: Math.min(i, c),
20
- y: Math.min(s, l),
21
- width: Math.abs(c - i),
22
- height: Math.abs(l - s)
11
+ let n = [];
12
+ for (let i of a) {
13
+ if (t) break;
14
+ let a = await r.getPage(i.page), [c, l, u, d] = a.getViewport({
15
+ scale: o,
16
+ rotation: e(a, s)
17
+ }).convertToViewportRectangle(i.pdfRect);
18
+ n.push({
19
+ page: i.page,
20
+ x: Math.min(c, u),
21
+ y: Math.min(l, d),
22
+ width: Math.abs(u - c),
23
+ height: Math.abs(d - l)
23
24
  });
24
25
  }
25
- e || u(t);
26
+ t || d(n);
26
27
  })(), () => {
27
- e = !0;
28
+ t = !0;
28
29
  };
29
30
  }, [
30
- i,
31
31
  a,
32
32
  o,
33
- n
34
- ]), e(() => {
35
- if (!r || !n) return;
36
- let e = !1;
33
+ s,
34
+ r
35
+ ]), t(() => {
36
+ if (!i || !r) return;
37
+ let t = !1;
37
38
  return (async () => {
38
- let [t, i, s, l] = (await n.getPage(r.page)).getViewport({
39
- scale: a,
40
- rotation: o
41
- }).convertToViewportRectangle(r.pdfRect);
42
- e || c({
43
- page: r.page,
44
- x: Math.min(t, s),
45
- y: Math.min(i, l),
46
- width: Math.abs(s - t),
47
- height: Math.abs(l - i)
39
+ let n = await r.getPage(i.page), [a, c, u, d] = n.getViewport({
40
+ scale: o,
41
+ rotation: e(n, s)
42
+ }).convertToViewportRectangle(i.pdfRect);
43
+ t || l({
44
+ page: i.page,
45
+ x: Math.min(a, u),
46
+ y: Math.min(c, d),
47
+ width: Math.abs(u - a),
48
+ height: Math.abs(d - c)
48
49
  });
49
50
  })(), () => {
50
- e = !0;
51
+ t = !0;
51
52
  };
52
53
  }, [
53
- r,
54
- a,
54
+ i,
55
55
  o,
56
- n
56
+ s,
57
+ r
57
58
  ]), {
58
- overlayRect: !r || !n ? null : s,
59
- searchOverlays: !n || i.length === 0 ? [] : l
59
+ overlayRect: !i || !r ? null : c,
60
+ searchOverlays: !r || a.length === 0 ? [] : u
60
61
  };
61
62
  }
62
63
  //#endregion
63
- export { n as useOverlayRects };
64
+ export { r as useOverlayRects };
@@ -1,78 +1,79 @@
1
- import { useEffect as e, useRef as t, useState as n } from "react";
1
+ import { getEffectiveRotation as e } from "../utils/rotation.js";
2
+ import { useEffect as t, useRef as n, useState as r } from "react";
2
3
  import "pdfjs-dist";
3
4
  //#region src/hooks/usePDFRenderer.ts
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
5
+ function i(t, n, r, i) {
6
+ let a = t.getContext("2d");
7
+ if (!a) return null;
8
+ let o = e(n, i), s = n.getViewport({
9
+ scale: r,
10
+ rotation: o
11
+ }), c = window.devicePixelRatio || 1, l = Math.min(1, 4096 / Math.max(s.width, s.height)), u = Math.sqrt(Math.min(1, 16777216 / (s.width * s.height))), d = Math.max(.1, Math.min(c, l, u));
12
+ d < c && console.warn(`[pdf-tsx] canvas clamped to avoid blank render: page=${n.pageNumber} zoom=${r} dpr=${c} requested=${Math.round(s.width * c)}x${Math.round(s.height * c)}px clamped=${Math.round(s.width * d)}x${Math.round(s.height * d)}px`);
13
+ let f = n.getViewport({
14
+ scale: r * d,
15
+ rotation: o
15
16
  });
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
17
+ return t.width = f.width, t.height = f.height, t.style.width = `${s.width}px`, t.style.height = `${s.height}px`, n.render({
18
+ canvasContext: a,
19
+ viewport: f,
20
+ canvas: t
20
21
  });
21
22
  }
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);
24
- return e(() => {
25
- if (!i) return;
26
- h.current = !1, m.current = /* @__PURE__ */ new Set(), f(/* @__PURE__ */ new Set());
27
- let e = !1;
23
+ function a({ pdf: a, zoom: o, rotation: s, visiblePages: c, canvasRefs: l }) {
24
+ let [u, d] = r([]), [f, p] = r(/* @__PURE__ */ new Set()), m = n([]), h = n(/* @__PURE__ */ new Set()), g = n(!1);
25
+ return t(() => {
26
+ if (!a) return;
27
+ g.current = !1, h.current = /* @__PURE__ */ new Set(), p(/* @__PURE__ */ new Set());
28
+ let t = !1;
28
29
  return (async () => {
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);
32
- if (e) return;
33
- let r = n.getViewport({
34
- scale: a,
35
- rotation: o
36
- }), s = {
37
- width: r.width,
38
- height: r.height
30
+ let n = m.current.map((e) => e ? (e.cancel(), e.promise.catch(() => {})) : Promise.resolve());
31
+ if (await Promise.all(n), m.current = Array(a.numPages).fill(null), t) return;
32
+ let r = await a.getPage(1);
33
+ if (t) return;
34
+ let i = r.getViewport({
35
+ scale: o,
36
+ rotation: e(r, s)
37
+ }), c = {
38
+ width: i.width,
39
+ height: i.height
39
40
  };
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
41
+ d(Array(a.numPages).fill(c));
42
+ let l = await Promise.all(Array.from({ length: a.numPages }, async (t, n) => {
43
+ let i = n === 0 ? r : await a.getPage(n + 1), c = i.getViewport({
44
+ scale: o,
45
+ rotation: e(i, s)
45
46
  });
46
47
  return {
47
- width: r.width,
48
- height: r.height
48
+ width: c.width,
49
+ height: c.height
49
50
  };
50
51
  }));
51
- e || (h.current = !0, u(c));
52
+ t || (g.current = !0, d(l));
52
53
  })(), () => {
53
- e = !0, p.current.forEach((e) => e?.cancel());
54
+ t = !0, m.current.forEach((e) => e?.cancel());
54
55
  };
55
56
  }, [
56
- i,
57
57
  a,
58
- o
59
- ]), e(() => {
60
- if (!i || l.length !== i.numPages || !h.current) return;
58
+ o,
59
+ s
60
+ ]), t(() => {
61
+ if (!a || u.length !== a.numPages || !g.current) return;
61
62
  let e = !1;
62
63
  return (async () => {
63
- for (let t of s) {
64
- if (e || m.current.has(t)) continue;
65
- let n = await i.getPage(t);
64
+ for (let t of c) {
65
+ if (e || h.current.has(t)) continue;
66
+ let n = await a.getPage(t);
66
67
  if (e) return;
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);
68
+ let r = l.current[t - 1];
69
+ if (!r) continue;
70
+ let c = m.current[t - 1];
71
+ if (c && (c.cancel(), await c.promise.catch(() => {}), e)) return;
72
+ let u = i(r, n, o, s);
72
73
  if (u) {
73
- p.current[t - 1] = u;
74
+ m.current[t - 1] = u;
74
75
  try {
75
- await u.promise, e || (m.current = new Set(m.current).add(t), f((e) => {
76
+ await u.promise, e || (h.current = new Set(h.current).add(t), p((e) => {
76
77
  if (e.has(t)) return e;
77
78
  let n = new Set(e);
78
79
  return n.add(t), n;
@@ -80,7 +81,7 @@ function i({ pdf: i, zoom: a, rotation: o, visiblePages: s, canvasRefs: c }) {
80
81
  } catch (e) {
81
82
  e && typeof e == "object" && "name" in e && e.name !== "RenderingCancelledException" && console.error("Render error:", e);
82
83
  } finally {
83
- p.current[t - 1] === u && (p.current[t - 1] = null);
84
+ m.current[t - 1] === u && (m.current[t - 1] = null);
84
85
  }
85
86
  }
86
87
  }
@@ -88,16 +89,16 @@ function i({ pdf: i, zoom: a, rotation: o, visiblePages: s, canvasRefs: c }) {
88
89
  e = !0;
89
90
  };
90
91
  }, [
91
- i,
92
- l,
93
- o,
94
- s,
95
92
  a,
96
- c
93
+ u,
94
+ s,
95
+ c,
96
+ o,
97
+ l
97
98
  ]), {
98
- pageSizes: l,
99
- renderedPages: d
99
+ pageSizes: u,
100
+ renderedPages: f
100
101
  };
101
102
  }
102
103
  //#endregion
103
- export { i as usePDFRenderer };
104
+ export { a as usePDFRenderer };
@@ -1,46 +1,47 @@
1
- import { useEffect as e, useRef as t } from "react";
2
- import * as n from "pdfjs-dist";
1
+ import { getEffectiveRotation as e } from "../utils/rotation.js";
2
+ import { useEffect as t, useRef as n } from "react";
3
+ import * as r from "pdfjs-dist";
3
4
  //#region src/hooks/useTextLayer.ts
4
- function r({ pdf: r, zoom: i, rotation: a, mountedPages: o, canvasRefs: s }) {
5
- let c = t([]), l = t(/* @__PURE__ */ new Set());
6
- return e(() => {
7
- l.current = /* @__PURE__ */ new Set();
8
- for (let e of c.current) e?.replaceChildren();
5
+ function i({ pdf: i, zoom: a, rotation: o, mountedPages: s, canvasRefs: c }) {
6
+ let l = n([]), u = n(/* @__PURE__ */ new Set());
7
+ return t(() => {
8
+ u.current = /* @__PURE__ */ new Set();
9
+ for (let e of l.current) e?.replaceChildren();
9
10
  }, [
10
- r,
11
11
  i,
12
- a
13
- ]), e(() => {
14
- if (!r) return;
15
- let e = !1;
12
+ a,
13
+ o
14
+ ]), t(() => {
15
+ if (!i) return;
16
+ let t = !1;
16
17
  return (async () => {
17
- for (let t of o) {
18
- if (e) break;
19
- if (l.current.has(t)) continue;
20
- let o = c.current[t - 1], u = s.current[t - 1];
21
- if (!o || !u) continue;
22
- o.replaceChildren();
23
- let d = await r.getPage(t), f = d.getViewport({
24
- scale: i,
25
- rotation: a
26
- }), p = await d.getTextContent();
27
- if (e) break;
28
- o.style.width = `${f.width}px`, o.style.height = `${f.height}px`, await new n.TextLayer({
29
- textContentSource: p,
30
- container: o,
31
- viewport: f
32
- }).render(), e || l.current.add(t);
18
+ for (let n of s) {
19
+ if (t) break;
20
+ if (u.current.has(n)) continue;
21
+ let s = l.current[n - 1], d = c.current[n - 1];
22
+ if (!s || !d) continue;
23
+ s.replaceChildren();
24
+ let f = await i.getPage(n), p = f.getViewport({
25
+ scale: a,
26
+ rotation: e(f, o)
27
+ }), m = await f.getTextContent();
28
+ if (t) break;
29
+ s.style.width = `${p.width}px`, s.style.height = `${p.height}px`, await new r.TextLayer({
30
+ textContentSource: m,
31
+ container: s,
32
+ viewport: p
33
+ }).render(), t || u.current.add(n);
33
34
  }
34
35
  })(), () => {
35
- e = !0;
36
+ t = !0;
36
37
  };
37
38
  }, [
38
- r,
39
39
  i,
40
40
  a,
41
41
  o,
42
- s
43
- ]), c;
42
+ s,
43
+ c
44
+ ]), l;
44
45
  }
45
46
  //#endregion
46
- export { r as useTextLayer };
47
+ export { i as useTextLayer };
@@ -1,57 +1,58 @@
1
- import { useEffect as e, useRef as t, useState as n } from "react";
1
+ import { getEffectiveRotation as e } from "../utils/rotation.js";
2
+ import { useEffect as t, useRef as n, useState as r } from "react";
2
3
  import "pdfjs-dist";
3
4
  //#region src/hooks/useThumbnails.ts
4
- function r({ pdf: r, rotation: i, visiblePages: a }) {
5
- let [o, s] = n([]), [c, l] = n(0), u = t(/* @__PURE__ */ new Set()), d = t({
5
+ function i({ pdf: i, rotation: a, visiblePages: o }) {
6
+ let [s, c] = r([]), [l, u] = r(0), d = n(/* @__PURE__ */ new Set()), f = n({
6
7
  pdf: null,
7
8
  rotation: 0
8
9
  });
9
- return e(() => {
10
- if (!r) {
11
- s([]), l(0), u.current.clear(), d.current = {
10
+ return t(() => {
11
+ if (!i) {
12
+ c([]), u(0), d.current.clear(), f.current = {
12
13
  pdf: null,
13
14
  rotation: 0
14
15
  };
15
16
  return;
16
17
  }
17
- if (d.current.pdf !== r || d.current.rotation !== i) {
18
- d.current = {
19
- pdf: r,
20
- rotation: i
21
- }, u.current.clear(), s(Array(r.numPages).fill(null)), l((e) => e + 1);
18
+ if (f.current.pdf !== i || f.current.rotation !== a) {
19
+ f.current = {
20
+ pdf: i,
21
+ rotation: a
22
+ }, d.current.clear(), c(Array(i.numPages).fill(null)), u((e) => e + 1);
22
23
  return;
23
24
  }
24
- let e = a.filter((e) => !u.current.has(e));
25
- if (e.length === 0) return;
26
- let t = !1;
25
+ let t = o.filter((e) => !d.current.has(e));
26
+ if (t.length === 0) return;
27
+ let n = !1;
27
28
  return (async () => {
28
- for (let n of e) {
29
- if (t) break;
30
- let e = await r.getPage(n), a = e.getViewport({
29
+ for (let r of t) {
30
+ if (n) break;
31
+ let t = await i.getPage(r), o = t.getViewport({
31
32
  scale: .2,
32
- rotation: i
33
- }), o = document.createElement("canvas"), c = o.getContext("2d");
34
- if (c) {
35
- if (o.height = a.height, o.width = a.width, await e.render({
36
- canvasContext: c,
37
- viewport: a,
38
- canvas: o
39
- }).promise, t) break;
40
- u.current.add(n), s((e) => {
33
+ rotation: e(t, a)
34
+ }), s = document.createElement("canvas"), l = s.getContext("2d");
35
+ if (l) {
36
+ if (s.height = o.height, s.width = o.width, await t.render({
37
+ canvasContext: l,
38
+ viewport: o,
39
+ canvas: s
40
+ }).promise, n) break;
41
+ d.current.add(r), c((e) => {
41
42
  let t = [...e];
42
- return t[n - 1] = o.toDataURL(), t;
43
+ return t[r - 1] = s.toDataURL(), t;
43
44
  });
44
45
  }
45
46
  }
46
47
  })(), () => {
47
- t = !0;
48
+ n = !0;
48
49
  };
49
50
  }, [
50
- r,
51
51
  i,
52
52
  a,
53
- c
54
- ]), { thumbnails: o };
53
+ o,
54
+ l
55
+ ]), { thumbnails: s };
55
56
  }
56
57
  //#endregion
57
- export { r as useThumbnails };
58
+ export { i as useThumbnails };
@@ -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_9otbp_1{flex-direction:column;width:100%;height:100%;display:flex;overflow:hidden}._body_9otbp_17{flex-direction:row;flex:1;min-height:0;display:flex;overflow:hidden}._toolbar_9otbp_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_9otbp_57{scrollbar-gutter:stable;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_9otbp_81{margin:0 auto 25px;position:relative}._scrollContainer_9otbp_57._single_9otbp_93 ._pageWrapper_9otbp_81{display:none}._scrollContainer_9otbp_57._single_9otbp_93 ._pageWrapper_9otbp_81._currentPage_9otbp_101{display:block}._scrollContainer_9otbp_57._spread_9otbp_111{flex-flow:wrap;place-content:flex-start center;gap:25px;display:flex}._scrollContainer_9otbp_57._spread_9otbp_111 ._pageWrapper_9otbp_81{margin:0}._scrollContainer_9otbp_57._spread_9otbp_111 ._requireReadBanner_9otbp_135{grid-column:1/-1}._pageCanvas_9otbp_143{z-index:1;box-shadow:0 5px 20px var(--pdf-shadow-page);pointer-events:none;background-color:#fff;display:block;position:relative}._textLayer_9otbp_161{--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_9otbp_161 :is(span,br){color:#0000;white-space:pre;cursor:text;transform-origin:0 0;position:absolute}._textLayer_9otbp_161>:not(._markedContent_9otbp_213),._textLayer_9otbp_161 ._markedContent_9otbp_213 span:not(._markedContent_9otbp_213){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_9otbp_161 ._markedContent_9otbp_213{display:contents}._textLayer_9otbp_161 ._endOfContent_9otbp_243{z-index:0;cursor:default;-webkit-user-select:none;user-select:none;display:block;position:absolute;inset:100% 0 0}._textLayer_9otbp_161._selecting_9otbp_261 ._endOfContent_9otbp_243{top:0}._textLayer_9otbp_161 ::selection{background:#0000ff40}._textLayer_9otbp_161 br::selection{background:0 0}._documentLoading_9otbp_301{pointer-events:none;z-index:10;justify-content:center;align-items:center;display:flex;position:absolute;inset:0}._documentLoading_9otbp_301:after{content:"";border:3px solid #0000001a;border-top-color:var(--pdf-accent);border-radius:50%;width:40px;height:40px;animation:.8s linear infinite _spin_9otbp_1}._pageSkeleton_9otbp_341{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_9otbp_341:after{content:"";border:3px solid #0000001a;border-top-color:var(--pdf-accent);border-radius:50%;width:32px;height:32px;animation:.8s linear infinite _spin_9otbp_1}@keyframes _spin_9otbp_1{to{transform:rotate(360deg)}}._highlightOverlay_9otbp_399{z-index:4;pointer-events:none;background-color:#ffdc0059;border:2px solid #ffa000e6;border-radius:2px;position:absolute}._linkOverlay_9otbp_417{z-index:3;pointer-events:all;cursor:pointer;position:absolute}._searchMatchOverlay_9otbp_431{z-index:3;pointer-events:none;background-color:#fde0474d;border-bottom:2px solid #eab308cc;position:absolute}._noteOverlay_9otbp_447{z-index:3;pointer-events:all;cursor:pointer;position:absolute}._noteIconOverlay_9otbp_461{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_9otbp_461:hover{background-color:#ffd20033;outline:1px solid #a0780066}._requireReadBanner_9otbp_135{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_9otbp_543{background-color:#16a34abf}._notePopover_9otbp_551{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_9otbp_577{color:var(--pdf-text-secondary);margin-bottom:6px;font-size:12px;font-weight:600}._notePopoverContent_9otbp_591{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}._wrapper_182cw_1{align-items:center;display:flex;position:relative}._triggerActive_182cw_13{background:var(--pdf-surface);color:var(--pdf-text-primary)}._caret_182cw_23{opacity:.7;align-items:center;margin-left:-2px;display:flex}._dropdown_182cw_37{background:var(--pdf-bg);border:1px solid var(--pdf-border);z-index:100;border-radius:6px;flex-direction:column;gap:1px;min-width:180px;padding:4px;display:flex;position:absolute;top:calc(100% + 6px);left:0;box-shadow:0 4px 16px #0000002e}._option_182cw_69{cursor:pointer;width:100%;color:var(--pdf-text-secondary);text-align:left;white-space:nowrap;background:0 0;border:none;border-radius:4px;align-items:center;gap:8px;padding:7px 10px;font-family:inherit;font-size:13px;line-height:1;transition:background .12s,color .12s;display:flex}._option_182cw_69:hover{background:var(--pdf-surface);color:var(--pdf-text-primary)}._optionActive_182cw_121{color:var(--pdf-accent)}._optionIcon_182cw_129{flex-shrink:0;align-items:center;display:flex}._optionLabel_182cw_141{flex:1}._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_1fhoj_1{flex-direction:column;width:100%;height:100%;display:flex;overflow:hidden}._body_1fhoj_9{flex-direction:row;flex:1;min-height:0;display:flex;overflow:hidden}._toolbar_1fhoj_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_1fhoj_29{scrollbar-gutter:stable;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_1fhoj_41{margin:0 auto 25px;position:relative}._scrollContainer_1fhoj_29._single_1fhoj_47 ._pageWrapper_1fhoj_41{display:none}._scrollContainer_1fhoj_29._single_1fhoj_47 ._pageWrapper_1fhoj_41._currentPage_1fhoj_51{display:block}._scrollContainer_1fhoj_29._spread_1fhoj_56{flex-flow:wrap;place-content:flex-start center;gap:25px;display:flex}._scrollContainer_1fhoj_29._spread_1fhoj_56 ._pageWrapper_1fhoj_41{margin:0}._scrollContainer_1fhoj_29._spread_1fhoj_56 ._requireReadBanner_1fhoj_68{grid-column:1/-1}._pageCanvas_1fhoj_72{z-index:1;box-shadow:0 5px 20px var(--pdf-shadow-page);pointer-events:none;background-color:#fff;display:block;position:relative}._textLayer_1fhoj_81{--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_1fhoj_81 :is(span,br){color:#0000;white-space:pre;cursor:text;transform-origin:0 0;position:absolute}._textLayer_1fhoj_81>:not(._markedContent_1fhoj_107),._textLayer_1fhoj_81 ._markedContent_1fhoj_107 span:not(._markedContent_1fhoj_107){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_1fhoj_81 ._markedContent_1fhoj_107{display:contents}._textLayer_1fhoj_81 ._endOfContent_1fhoj_122{z-index:0;cursor:default;-webkit-user-select:none;user-select:none;display:block;position:absolute;inset:100% 0 0}._textLayer_1fhoj_81._selecting_1fhoj_131 ._endOfContent_1fhoj_122{top:0}._textLayer_1fhoj_81 ::selection{background:#0000ff40}._textLayer_1fhoj_81 br::selection{background:0 0}._documentLoading_1fhoj_151{pointer-events:none;z-index:10;justify-content:center;align-items:center;display:flex;position:absolute;inset:0}._documentLoading_1fhoj_151:after{content:"";border:3px solid #0000001a;border-top-color:var(--pdf-accent);border-radius:50%;width:40px;height:40px;animation:.8s linear infinite _spin_1fhoj_1}._pageSkeleton_1fhoj_171{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_1fhoj_171:after{content:"";border:3px solid #0000001a;border-top-color:var(--pdf-accent);border-radius:50%;width:32px;height:32px;animation:.8s linear infinite _spin_1fhoj_1}@keyframes _spin_1fhoj_1{to{transform:rotate(360deg)}}._highlightOverlay_1fhoj_200{z-index:4;pointer-events:none;background-color:#ffdc0059;border:2px solid #ffa000e6;border-radius:2px;position:absolute}._linkOverlay_1fhoj_209{z-index:3;pointer-events:all;cursor:pointer;position:absolute}._searchMatchOverlay_1fhoj_216{z-index:3;pointer-events:none;background-color:#fde0474d;border-bottom:2px solid #eab308cc;position:absolute}._noteOverlay_1fhoj_224{z-index:3;pointer-events:all;cursor:pointer;position:absolute}._noteIconOverlay_1fhoj_231{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_1fhoj_231:hover{background-color:#ffd20033;outline:1px solid #a0780066}._requireReadBanner_1fhoj_68{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_1fhoj_272{background-color:#16a34abf}._notePopover_1fhoj_276{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_1fhoj_289{color:var(--pdf-text-secondary);margin-bottom:6px;font-size:12px;font-weight:600}._notePopoverContent_1fhoj_296{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}._wrapper_a1x4x_1{align-items:center;display:flex;position:relative}._triggerActive_a1x4x_7{background:var(--pdf-surface);color:var(--pdf-text-primary)}._caret_a1x4x_12{opacity:.7;align-items:center;margin-left:-2px;display:flex}._dropdown_a1x4x_19{background:var(--pdf-bg);border:1px solid var(--pdf-border);z-index:100;border-radius:6px;flex-direction:column;gap:1px;min-width:180px;padding:4px;display:flex;position:absolute;top:calc(100% + 6px);left:0;box-shadow:0 4px 16px #0000002e}._option_a1x4x_35{cursor:pointer;width:100%;color:var(--pdf-text-secondary);text-align:left;white-space:nowrap;background:0 0;border:none;border-radius:4px;align-items:center;gap:8px;padding:7px 10px;font-family:inherit;font-size:13px;line-height:1;transition:background .12s,color .12s;display:flex}._option_a1x4x_35:hover{background:var(--pdf-surface);color:var(--pdf-text-primary)}._optionActive_a1x4x_61{color:var(--pdf-accent)}._optionIcon_a1x4x_65{flex-shrink:0;align-items:center;display:flex}._optionLabel_a1x4x_71{flex:1}._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,18 +1,19 @@
1
- import { MIN_ZOOM as e } from "./zoom.js";
1
+ import { getEffectiveRotation as e } from "./rotation.js";
2
+ import { MIN_ZOOM as t } from "./zoom.js";
2
3
  //#region src/utils/pdfFit.ts
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({
4
+ var n = 60, r = 10;
5
+ async function i(i, a, o, s) {
6
+ if (o.clientWidth <= n) return 1;
7
+ let c = await a.getPage(1), l = c.getViewport({
7
8
  scale: 1,
8
- rotation: o
9
- }), c = a.clientWidth - t, l;
10
- if (r === "width") l = c / s.width;
9
+ rotation: e(c, s)
10
+ }), u = o.clientWidth - n, d;
11
+ if (i === "width") d = u / l.width;
11
12
  else {
12
- let e = a.clientHeight - n * 2;
13
- l = Math.min(c / s.width, e / s.height);
13
+ let e = o.clientHeight - r * 2;
14
+ d = Math.min(u / l.width, e / l.height);
14
15
  }
15
- return Math.max(e, Math.min(5, l));
16
+ return Math.max(t, Math.min(5, d));
16
17
  }
17
18
  //#endregion
18
- export { r as computeFit };
19
+ export { i as computeFit };
@@ -0,0 +1,6 @@
1
+ //#region src/utils/rotation.ts
2
+ function e(e, t) {
3
+ return (e.rotate + t + 360) % 360;
4
+ }
5
+ //#endregion
6
+ export { e as getEffectiveRotation };