pdf-tsx 0.5.0 → 0.7.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 (99) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +411 -350
  3. package/dist/cjs/components/PDFSidebar.module.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.module.cjs +1 -1
  7. package/dist/cjs/components/features/PDFAttachments.cjs +1 -0
  8. package/dist/cjs/components/features/PDFAttachments.module.cjs +1 -0
  9. package/dist/cjs/components/features/PDFChangeFile.cjs +1 -1
  10. package/dist/cjs/components/features/PDFDownloadButton.cjs +1 -1
  11. package/dist/cjs/components/features/PDFNavigation.cjs +1 -1
  12. package/dist/cjs/components/features/PDFNavigation.module.cjs +1 -1
  13. package/dist/cjs/components/features/PDFOutline.cjs +1 -1
  14. package/dist/cjs/components/features/PDFOutline.module.cjs +1 -1
  15. package/dist/cjs/components/features/PDFPageFit.cjs +1 -1
  16. package/dist/cjs/components/features/PDFPrintButton.cjs +1 -1
  17. package/dist/cjs/components/features/PDFRotationControl.cjs +1 -1
  18. package/dist/cjs/components/features/PDFSearch.cjs +1 -1
  19. package/dist/cjs/components/features/PDFSearch.module.cjs +1 -1
  20. package/dist/cjs/components/features/PDFSidebarToggle.cjs +1 -1
  21. package/dist/cjs/components/features/PDFSignatures.module.cjs +1 -1
  22. package/dist/cjs/components/features/PDFThemeToggle.cjs +1 -1
  23. package/dist/cjs/components/features/PDFThumbnails.module.cjs +1 -1
  24. package/dist/cjs/components/features/PDFZoomControls.cjs +1 -1
  25. package/dist/cjs/components/features/PDFZoomControls.module.cjs +1 -1
  26. package/dist/cjs/components/ui/PDFToolbar.cjs +1 -0
  27. package/dist/cjs/components/ui/PDFToolbar.module.cjs +1 -0
  28. package/dist/cjs/components/ui/PDFToolbarItem.cjs +1 -0
  29. package/dist/cjs/components/ui/ToolbarButton.module.cjs +1 -1
  30. package/dist/cjs/context/ThemeContext.cjs +1 -1
  31. package/dist/cjs/hooks/useAnnotations.cjs +1 -1
  32. package/dist/cjs/hooks/useAttachments.cjs +1 -0
  33. package/dist/cjs/hooks/useKeyboardShortcuts.cjs +1 -1
  34. package/dist/cjs/hooks/usePDFRenderer.cjs +1 -1
  35. package/dist/cjs/hooks/useScrollTracking.cjs +1 -1
  36. package/dist/cjs/index.cjs +1 -1
  37. package/dist/cjs/pdf-tsx.css +1 -1
  38. package/dist/cjs/theme.cjs +1 -1
  39. package/dist/components/features/PDFAttachments.d.ts +5 -0
  40. package/dist/components/features/PDFChangeFile.d.ts +3 -0
  41. package/dist/components/features/PDFDownloadButton.d.ts +3 -0
  42. package/dist/components/features/PDFNavigation.d.ts +3 -0
  43. package/dist/components/features/PDFPageFit.d.ts +3 -0
  44. package/dist/components/features/PDFPrintButton.d.ts +3 -0
  45. package/dist/components/features/PDFRotationControl.d.ts +3 -0
  46. package/dist/components/features/PDFSearch.d.ts +3 -0
  47. package/dist/components/features/PDFSidebarToggle.d.ts +3 -0
  48. package/dist/components/features/PDFThemeToggle.d.ts +3 -0
  49. package/dist/components/features/PDFZoomControls.d.ts +3 -0
  50. package/dist/components/ui/PDFToolbar.d.ts +8 -0
  51. package/dist/components/ui/PDFToolbarItem.d.ts +7 -0
  52. package/dist/context/PDFViewerContext.d.ts +3 -1
  53. package/dist/es/components/PDFSidebar.module.js +9 -9
  54. package/dist/es/components/PDFViewer.js +168 -173
  55. package/dist/es/components/PDFViewer.module.js +15 -15
  56. package/dist/es/components/features/PDFAnnotations.module.js +12 -12
  57. package/dist/es/components/features/PDFAttachments.js +117 -0
  58. package/dist/es/components/features/PDFAttachments.module.js +12 -0
  59. package/dist/es/components/features/PDFChangeFile.js +1 -0
  60. package/dist/es/components/features/PDFDownloadButton.js +1 -0
  61. package/dist/es/components/features/PDFNavigation.js +1 -0
  62. package/dist/es/components/features/PDFNavigation.module.js +3 -3
  63. package/dist/es/components/features/PDFOutline.js +37 -24
  64. package/dist/es/components/features/PDFOutline.module.js +5 -5
  65. package/dist/es/components/features/PDFPageFit.js +18 -17
  66. package/dist/es/components/features/PDFPrintButton.js +1 -0
  67. package/dist/es/components/features/PDFRotationControl.js +1 -0
  68. package/dist/es/components/features/PDFSearch.js +1 -0
  69. package/dist/es/components/features/PDFSearch.module.js +5 -5
  70. package/dist/es/components/features/PDFSidebarToggle.js +8 -7
  71. package/dist/es/components/features/PDFSignatures.module.js +16 -16
  72. package/dist/es/components/features/PDFThemeToggle.js +1 -0
  73. package/dist/es/components/features/PDFThumbnails.module.js +9 -9
  74. package/dist/es/components/features/PDFZoomControls.js +29 -30
  75. package/dist/es/components/features/PDFZoomControls.module.js +1 -1
  76. package/dist/es/components/ui/PDFToolbar.js +84 -0
  77. package/dist/es/components/ui/PDFToolbar.module.js +13 -0
  78. package/dist/es/components/ui/PDFToolbarItem.js +25 -0
  79. package/dist/es/components/ui/ToolbarButton.module.js +2 -2
  80. package/dist/es/context/ThemeContext.js +1 -0
  81. package/dist/es/hooks/useAnnotations.js +2 -6
  82. package/dist/es/hooks/useAttachments.js +31 -0
  83. package/dist/es/hooks/useKeyboardShortcuts.js +8 -7
  84. package/dist/es/hooks/usePDFRenderer.js +20 -10
  85. package/dist/es/hooks/useScrollTracking.js +20 -30
  86. package/dist/es/index.js +18 -15
  87. package/dist/es/pdf-tsx.css +1 -1
  88. package/dist/es/theme.js +9 -3
  89. package/dist/hooks/useAnnotations.d.ts +1 -1
  90. package/dist/hooks/useAttachments.d.ts +11 -0
  91. package/dist/hooks/useKeyboardShortcuts.d.ts +2 -1
  92. package/dist/hooks/useScrollTracking.d.ts +2 -7
  93. package/dist/index.d.ts +3 -0
  94. package/dist/theme.d.ts +2 -0
  95. package/package.json +61 -61
  96. package/dist/pdf-tsx.cjs.js +0 -5
  97. package/dist/pdf-tsx.css +0 -2
  98. package/dist/pdf-tsx.es.js +0 -2637
  99. package/dist/vite.svg +0 -1
@@ -10,18 +10,27 @@ function r({ pdf: r, zoom: i, rotation: a, visiblePages: o, canvasRefs: s }) {
10
10
  return (async () => {
11
11
  let t = f.current.map((e) => e ? (e.cancel(), e.promise.catch(() => {})) : Promise.resolve());
12
12
  if (await Promise.all(t), f.current = Array(r.numPages).fill(null), e) return;
13
- let n = [];
14
- for (let e = 1; e <= r.numPages; e++) {
15
- let t = (await r.getPage(e)).getViewport({
13
+ let n = await r.getPage(1);
14
+ if (e) return;
15
+ let o = n.getViewport({
16
+ scale: i,
17
+ rotation: a
18
+ }), s = {
19
+ width: o.width,
20
+ height: o.height
21
+ };
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({
16
25
  scale: i,
17
26
  rotation: a
18
27
  });
19
- n.push({
20
- width: t.width,
21
- height: t.height
22
- });
23
- }
24
- e || (m.current = !0, l(n));
28
+ return {
29
+ width: o.width,
30
+ height: o.height
31
+ };
32
+ }));
33
+ e || (m.current = !0, l(c));
25
34
  })(), () => {
26
35
  e = !0, f.current.forEach((e) => e?.cancel());
27
36
  };
@@ -73,7 +82,8 @@ function r({ pdf: r, zoom: i, rotation: a, visiblePages: o, canvasRefs: s }) {
73
82
  c,
74
83
  a,
75
84
  o,
76
- i
85
+ i,
86
+ s
77
87
  ]), {
78
88
  pageSizes: c,
79
89
  renderedPages: u
@@ -1,47 +1,37 @@
1
1
  import { c as e } from "react/compiler-runtime";
2
2
  import { useEffect as t, useState as n } from "react";
3
- import "pdfjs-dist";
4
3
  //#region src/hooks/useScrollTracking.ts
5
4
  var r = 10;
6
5
  function i(i) {
7
- let a = e(17), { pdf: o, numPages: s, zoom: c, rotation: l, containerRef: u, pageRefs: d, canvasRefs: f } = i, [p, m] = n(1), h;
8
- a[0] !== u || a[1] !== d ? (h = () => {
9
- let e = u.current;
6
+ let a = e(11), { numPages: o, containerRef: s, pageRefs: c } = i, [l, u] = n(1), d, f;
7
+ a[0] !== s || a[1] !== c ? (d = () => {
8
+ let e = s.current;
10
9
  if (!e) return;
11
10
  let t = () => {
12
- let t = e.getBoundingClientRect().top, n = d.current;
11
+ let t = e.getBoundingClientRect().top, n = c.current;
13
12
  for (let e = 0; e < n.length; e++) {
14
13
  let r = n[e];
15
- r && r.getBoundingClientRect().top - t <= 150 && m(e + 1);
14
+ r && r.getBoundingClientRect().top - t <= 150 && u(e + 1);
16
15
  }
17
16
  };
18
17
  return e.addEventListener("scroll", t), () => e.removeEventListener("scroll", t);
19
- }, a[0] = u, a[1] = d, a[2] = h) : h = a[2];
20
- let g;
21
- a[3] !== f || a[4] !== u || a[5] !== d || a[6] !== o || a[7] !== l || a[8] !== c ? (g = [
22
- o,
23
- c,
24
- l,
25
- u,
26
- d,
27
- f
28
- ], a[3] = f, a[4] = u, a[5] = d, a[6] = o, a[7] = l, a[8] = c, a[9] = g) : g = a[9], t(h, g);
29
- let _;
30
- a[10] !== u || a[11] !== s || a[12] !== d ? (_ = (e) => {
31
- let t = Math.min(Math.max(e, 1), s), n = d.current[t - 1], i = u.current;
32
- if (n && i) {
33
- let e = n.getBoundingClientRect().top, a = i.getBoundingClientRect().top, o = i.scrollTop + (e - a) - r;
34
- i.scrollTo({
35
- top: o,
18
+ }, f = [s, c], a[0] = s, a[1] = c, a[2] = d, a[3] = f) : (d = a[2], f = a[3]), t(d, f);
19
+ let p;
20
+ a[4] !== s || a[5] !== o || a[6] !== c ? (p = (e, t) => {
21
+ let n = Math.min(Math.max(e, 1), o), i = c.current[n - 1], a = s.current;
22
+ if (i && a) {
23
+ let e = i.getBoundingClientRect().top, o = a.getBoundingClientRect().top, s = a.scrollTop + (e - o) - r, c = t === void 0 ? s : s + t;
24
+ a.scrollTo({
25
+ top: c,
36
26
  behavior: "smooth"
37
- }), m(t);
27
+ }), u(n);
38
28
  }
39
- }, a[10] = u, a[11] = s, a[12] = d, a[13] = _) : _ = a[13];
40
- let v = _, y;
41
- return a[14] !== p || a[15] !== v ? (y = {
42
- currentPage: p,
43
- goToPage: v
44
- }, a[14] = p, a[15] = v, a[16] = y) : y = a[16], y;
29
+ }, a[4] = s, a[5] = o, a[6] = c, a[7] = p) : p = a[7];
30
+ let m = p, h;
31
+ return a[8] !== l || a[9] !== m ? (h = {
32
+ currentPage: l,
33
+ goToPage: m
34
+ }, a[8] = l, a[9] = m, a[10] = h) : h = a[10], h;
45
35
  }
46
36
  //#endregion
47
37
  export { i as useScrollTracking };
package/dist/es/index.js CHANGED
@@ -1,18 +1,21 @@
1
1
  import { darkTheme as e, lightTheme as t } from "./theme.js";
2
2
  import n from "./components/PDFViewer.js";
3
3
  import { PDFSidebar as r } from "./components/PDFSidebar.js";
4
- import { PDFAnnotations as i, PDFAnnotationsIcon as a } from "./components/features/PDFAnnotations.js";
5
- import { PDFChangeFile as o } from "./components/features/PDFChangeFile.js";
6
- import { PDFDownloadButton as s } from "./components/features/PDFDownloadButton.js";
7
- import { PDFNavigation as c } from "./components/features/PDFNavigation.js";
8
- import { PDFOutline as l } from "./components/features/PDFOutline.js";
9
- import { PDFPageFit as u } from "./components/features/PDFPageFit.js";
10
- import { PDFRotationControl as d } from "./components/features/PDFRotationControl.js";
11
- import { PDFSearch as f } from "./components/features/PDFSearch.js";
12
- import { PDFSignatures as p, PDFSignaturesIcon as m } from "./components/features/PDFSignatures.js";
13
- import { PDFThumbnails as h } from "./components/features/PDFThumbnails.js";
14
- import { PDFZoomControls as g } from "./components/features/PDFZoomControls.js";
15
- import { PDFThemeToggle as _ } from "./components/features/PDFThemeToggle.js";
16
- import { PDFPrintButton as v } from "./components/features/PDFPrintButton.js";
17
- import { PDFSidebarToggle as y } from "./components/features/PDFSidebarToggle.js";
18
- export { i as PDFAnnotations, a as PDFAnnotationsIcon, o as PDFChangeFile, s as PDFDownloadButton, c as PDFNavigation, l as PDFOutline, u as PDFPageFit, v as PDFPrintButton, d as PDFRotationControl, f as PDFSearch, r as PDFSidebar, y as PDFSidebarToggle, p as PDFSignatures, m as PDFSignaturesIcon, _ as PDFThemeToggle, h as PDFThumbnails, n as PDFViewer, g as PDFZoomControls, e as darkTheme, t as lightTheme };
4
+ import { PDFAttachments as i, PDFAttachmentsIcon as a } from "./components/features/PDFAttachments.js";
5
+ import { PDFAnnotations as o, PDFAnnotationsIcon as s } from "./components/features/PDFAnnotations.js";
6
+ import { PDFChangeFile as c } from "./components/features/PDFChangeFile.js";
7
+ import { PDFDownloadButton as l } from "./components/features/PDFDownloadButton.js";
8
+ import { PDFNavigation as u } from "./components/features/PDFNavigation.js";
9
+ import { PDFOutline as d } from "./components/features/PDFOutline.js";
10
+ import { PDFPageFit as f } from "./components/features/PDFPageFit.js";
11
+ import { PDFRotationControl as p } from "./components/features/PDFRotationControl.js";
12
+ import { PDFSearch as m } from "./components/features/PDFSearch.js";
13
+ import { PDFSignatures as h, PDFSignaturesIcon as g } from "./components/features/PDFSignatures.js";
14
+ import { PDFThumbnails as _ } from "./components/features/PDFThumbnails.js";
15
+ import { PDFZoomControls as v } from "./components/features/PDFZoomControls.js";
16
+ import { PDFThemeToggle as y } from "./components/features/PDFThemeToggle.js";
17
+ import { PDFPrintButton as b } from "./components/features/PDFPrintButton.js";
18
+ import { PDFSidebarToggle as x } from "./components/features/PDFSidebarToggle.js";
19
+ import { PDFToolbar as S } from "./components/ui/PDFToolbar.js";
20
+ import { PDFToolbarItem as C } from "./components/ui/PDFToolbarItem.js";
21
+ export { o as PDFAnnotations, s as PDFAnnotationsIcon, i as PDFAttachments, a as PDFAttachmentsIcon, c as PDFChangeFile, l as PDFDownloadButton, u as PDFNavigation, d as PDFOutline, f as PDFPageFit, b as PDFPrintButton, p as PDFRotationControl, m as PDFSearch, r as PDFSidebar, x as PDFSidebarToggle, h as PDFSignatures, g as PDFSignaturesIcon, y as PDFThemeToggle, _ as PDFThumbnails, S as PDFToolbar, C as PDFToolbarItem, n as PDFViewer, v as PDFZoomControls, e as darkTheme, t as lightTheme };
@@ -1,2 +1,2 @@
1
- ._wrapper_a1iar_1{border-right:1px solid var(--pdf-border);height:100%;display:flex}._wrapperCollapsed_a1iar_7{border-right:1px solid var(--pdf-border);background-color:var(--pdf-bg);flex-direction:column;height:100%;padding-top:4px;display:flex}._buttonBar_a1iar_16{background-color:var(--pdf-bg);flex-direction:column;flex-shrink:0;gap:2px;width:48px;padding-top:4px;display:flex}._toggleButton_a1iar_26{border-bottom:1px solid var(--pdf-border);border-radius:0;width:48px;margin:0;padding-bottom:6px}._panelButton_a1iar_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_a1iar_35:hover{background-color:var(--pdf-surface);color:var(--pdf-text-secondary)}._panelButtonActive_a1iar_55{background-color:var(--pdf-surface);color:var(--pdf-accent-light)}._panelButtonActive_a1iar_55:hover{color:var(--pdf-accent-light)}._contentPanel_a1iar_64{background-color:var(--pdf-panel-bg);border-right:1px solid var(--pdf-panel-border);flex-direction:column;width:260px;display:flex}._panelHeader_a1iar_72{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_a1iar_84{flex:1;overflow-y:auto}._appLayout_1ug7w_1{flex-direction:column;width:100%;height:100%;display:flex;overflow:hidden}._body_1ug7w_9{flex-direction:row;flex:1;min-height:0;display:flex;overflow:hidden}._toolbar_1ug7w_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_1ug7w_29{background-color:var(--pdf-scroll-area);flex-direction:column;flex:1;align-items:center;padding:10px 20px;display:flex;overflow-y:auto}._pageWrapper_1ug7w_39{margin-bottom:25px;position:relative}._pageCanvas_1ug7w_44{z-index:1;box-shadow:0 5px 20px var(--pdf-shadow-page);pointer-events:none;background-color:#fff;display:block;position:relative}._textLayer_1ug7w_53{--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_1ug7w_53 :is(span,br){color:#0000;white-space:pre;cursor:text;transform-origin:0 0;position:absolute}._textLayer_1ug7w_53>:not(._markedContent_1ug7w_79),._textLayer_1ug7w_53 ._markedContent_1ug7w_79 span:not(._markedContent_1ug7w_79){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_1ug7w_53 ._markedContent_1ug7w_79{display:contents}._textLayer_1ug7w_53 ._endOfContent_1ug7w_94{z-index:0;cursor:default;-webkit-user-select:none;user-select:none;display:block;position:absolute;inset:100% 0 0}._textLayer_1ug7w_53._selecting_1ug7w_103 ._endOfContent_1ug7w_94{top:0}._textLayer_1ug7w_53 ::selection{background:#0000ff40}._textLayer_1ug7w_53 br::selection{background:0 0}._pageSkeleton_1ug7w_123{z-index:0;pointer-events:none;background:linear-gradient(90deg,#3f3f46 25%,#52525b 50%,#3f3f46 75%) 0 0/200% 100%;border-radius:1px;animation:1.4s infinite _shimmer_1ug7w_1;position:absolute;top:0;left:0}@keyframes _shimmer_1ug7w_1{0%{background-position:200% 0}to{background-position:-200% 0}}._highlightOverlay_1ug7w_144{z-index:4;pointer-events:none;background-color:#ffdc0059;border:2px solid #ffa000e6;border-radius:2px;position:absolute}._linkOverlay_1ug7w_153{z-index:3;pointer-events:all;cursor:pointer;position:absolute}._searchMatchOverlay_1ug7w_160{z-index:3;pointer-events:none;background-color:#fde0474d;border-bottom:2px solid #eab308cc;position:absolute}._list_r71a6_1{flex-direction:column;display:flex}._emptyState_r71a6_6{color:var(--pdf-text-secondary);padding:20px 14px;font-size:12px}._pageHeader_r71a6_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_r71a6_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_r71a6_33{cursor:pointer}._cardClickable_r71a6_33:hover{box-shadow:0 1px 6px var(--pdf-shadow-page)}._cardHeader_r71a6_41{justify-content:space-between;align-items:center;margin-bottom:4px;display:flex}._cardLabel_r71a6_48{color:var(--pdf-text-secondary);font-size:11px;font-weight:600}._cardPage_r71a6_54{color:var(--pdf-text-secondary);font-size:10px}._cardAuthor_r71a6_59{color:var(--pdf-text-muted);margin-bottom:3px;font-size:11px}._cardContent_r71a6_65{color:var(--pdf-text-primary);font-size:12px;line-height:1.5}._iconWrapper_r71a6_71{justify-content:center;align-items:center;display:flex;position:relative}._badge_r71a6_78{background-color:var(--pdf-accent);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_1x6vc_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_1x6vc_1:hover:not(:disabled){background:var(--pdf-surface);color:var(--pdf-text-primary)}._btn_1x6vc_1:disabled{color:var(--pdf-border);cursor:default}._primary_1x6vc_29{background:var(--pdf-accent);color:#fff;padding:6px 14px}._primary_1x6vc_29:hover:not(:disabled){background:var(--pdf-accent-hover);color:#fff}._navWrapper_hrnrb_1{align-items:center;gap:2px;display:flex}._pageInput_hrnrb_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_hrnrb_7:focus{border-color:var(--pdf-accent);background:var(--pdf-bg)}._pageInput_hrnrb_7::-webkit-outer-spin-button{-webkit-appearance:none}._pageInput_hrnrb_7::-webkit-inner-spin-button{-webkit-appearance:none}._pageInput_hrnrb_7{-moz-appearance:textfield}._pageTotal_hrnrb_35{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_1ii4b_1{flex-direction:column;gap:6px;padding:8px;display:flex}._emptyState_1ii4b_8{color:var(--pdf-text-muted);text-align:center;padding:24px 14px;font-size:12px}._card_1ii4b_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_1ii4b_32{background:#22c55e0a;border-color:#22c55e47}._cardClickable_1ii4b_37{cursor:pointer}._cardClickable_1ii4b_37:hover{box-shadow:0 2px 10px var(--pdf-shadow-page);border-color:var(--pdf-border-light)}._cardSigned_1ii4b_32._cardClickable_1ii4b_37:hover{border-color:#22c55e73}._cardBody_1ii4b_50{padding:10px 12px 10px 16px}._cardHeader_1ii4b_54{justify-content:space-between;align-items:center;gap:8px;margin-bottom:8px;display:flex}._fieldName_1ii4b_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_1ii4b_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_1ii4b_89{color:#15803d;background:#22c55e1f;border-color:#22c55e4d}._fieldList_1ii4b_95{flex-direction:column;gap:4px;display:flex}._fieldRow_1ii4b_101{grid-template-columns:72px 1fr;gap:4px;font-size:11px;line-height:1.5;display:grid}._fieldLabel_1ii4b_109{color:var(--pdf-text-muted);font-weight:500}._fieldValue_1ii4b_114{color:var(--pdf-text-secondary);word-break:break-word}._iconWrapper_1ii4b_119{justify-content:center;align-items:center;display:flex;position:relative}._badge_1ii4b_126{background-color:var(--pdf-accent);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_qpgpt_1{background-color:var(--pdf-panel-bg);padding-bottom:8px}._thumbnailItem_qpgpt_6{cursor:pointer;text-align:center;background-color:#0000;border-left:2px solid #0000;padding:12px 16px;transition:background-color .15s}._thumbnailItem_qpgpt_6:hover{background-color:var(--pdf-surface-hover)}._thumbnailItemActive_qpgpt_19{background-color:var(--pdf-accent-subtle);border-left-color:var(--pdf-accent)}._thumbnailItemActive_qpgpt_19:hover{background-color:var(--pdf-accent-subtle)}._thumbnailImg_qpgpt_28{width:120px;box-shadow:0 1px 4px var(--pdf-shadow-page);border-radius:2px}._thumbnailImgActive_qpgpt_34{box-shadow:0 0 0 2px var(--pdf-accent), 0 2px 8px var(--pdf-shadow-page)}._thumbnailSkeleton_qpgpt_38{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_qpgpt_1}@keyframes _shimmer_qpgpt_1{0%{background-position:200% 0}to{background-position:-200% 0}}._thumbnailLabel_qpgpt_52{color:var(--pdf-text-muted);margin-top:6px;font-size:11px;font-weight:400}._thumbnailLabelActive_qpgpt_59{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}
1
+ ._wrapper_1xud4_1{border-right:1px solid var(--pdf-border);height:100%;display:flex}._wrapperCollapsed_1xud4_13{border-right:1px solid var(--pdf-border);background-color:var(--pdf-bg);flex-direction:column;height:100%;padding-top:4px;display:flex}._buttonBar_1xud4_31{background-color:var(--pdf-bg);flex-direction:column;flex-shrink:0;gap:2px;width:48px;padding-top:4px;display:flex}._toggleButton_1xud4_51{border-bottom:1px solid var(--pdf-border);border-radius:0;width:48px;margin:0;padding-bottom:6px}._panelButton_1xud4_69{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_1xud4_69:hover{background-color:var(--pdf-surface);color:var(--pdf-text-secondary)}._panelButtonActive_1xud4_109{background-color:var(--pdf-surface);color:var(--pdf-accent-light)}._panelButtonActive_1xud4_109:hover{color:var(--pdf-accent-light)}._contentPanel_1xud4_127{background-color:var(--pdf-panel-bg);border-right:1px solid var(--pdf-panel-border);flex-direction:column;width:260px;display:flex}._panelHeader_1xud4_143{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_1xud4_167{flex:1;overflow-y:auto}._appLayout_1t51x_1{flex-direction:column;width:100%;height:100%;display:flex;overflow:hidden}._body_1t51x_17{flex-direction:row;flex:1;min-height:0;display:flex;overflow:hidden}._toolbar_1t51x_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_1t51x_57{background-color:var(--pdf-scroll-area);flex-direction:column;flex:1;align-items:center;padding:10px 20px;display:flex;overflow-y:auto}._pageWrapper_1t51x_77{margin-bottom:25px;position:relative}._pageCanvas_1t51x_87{z-index:1;box-shadow:0 5px 20px var(--pdf-shadow-page);pointer-events:none;background-color:#fff;display:block;position:relative}._textLayer_1t51x_105{--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_1t51x_105 :is(span,br){color:#0000;white-space:pre;cursor:text;transform-origin:0 0;position:absolute}._textLayer_1t51x_105>:not(._markedContent_1t51x_157),._textLayer_1t51x_105 ._markedContent_1t51x_157 span:not(._markedContent_1t51x_157){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_1t51x_105 ._markedContent_1t51x_157{display:contents}._textLayer_1t51x_105 ._endOfContent_1t51x_187{z-index:0;cursor:default;-webkit-user-select:none;user-select:none;display:block;position:absolute;inset:100% 0 0}._textLayer_1t51x_105._selecting_1t51x_205 ._endOfContent_1t51x_187{top:0}._textLayer_1t51x_105 ::selection{background:#0000ff40}._textLayer_1t51x_105 br::selection{background:0 0}._pageSkeleton_1t51x_245{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_1t51x_245:after{content:"";border:3px solid #0000001a;border-top-color:var(--pdf-accent);border-radius:50%;width:32px;height:32px;animation:.8s linear infinite _spin_1t51x_1}@keyframes _spin_1t51x_1{to{transform:rotate(360deg)}}._highlightOverlay_1t51x_299{z-index:4;pointer-events:none;background-color:#ffdc0059;border:2px solid #ffa000e6;border-radius:2px;position:absolute}._linkOverlay_1t51x_317{z-index:3;pointer-events:all;cursor:pointer;position:absolute}._searchMatchOverlay_1t51x_331{z-index:3;pointer-events:none;background-color:#fde0474d;border-bottom:2px solid #eab308cc;position:absolute}._list_185ig_1{flex-direction:column;display:flex}._emptyState_185ig_11{color:var(--pdf-text-secondary);padding:20px 14px;font-size:12px}._pageHeader_185ig_23{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_185ig_45{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_185ig_65{cursor:pointer}._cardClickable_185ig_65:hover{box-shadow:0 1px 6px var(--pdf-shadow-page)}._cardHeader_185ig_81{justify-content:space-between;align-items:center;margin-bottom:4px;display:flex}._cardLabel_185ig_95{color:var(--pdf-text-secondary);font-size:11px;font-weight:600}._cardPage_185ig_107{color:var(--pdf-text-secondary);font-size:10px}._cardAuthor_185ig_117{color:var(--pdf-text-muted);margin-bottom:3px;font-size:11px}._cardContent_185ig_129{color:var(--pdf-text-primary);font-size:12px;line-height:1.5}._iconWrapper_185ig_141{justify-content:center;align-items:center;display:flex;position:relative}._badge_185ig_155{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_8oiyp_1{flex-direction:column;gap:6px;padding:8px;display:flex}._emptyState_8oiyp_15{color:var(--pdf-text-muted);text-align:center;padding:24px 14px;font-size:12px}._card_8oiyp_29{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_8oiyp_65{color:var(--pdf-text-muted);flex-shrink:0;align-items:center;display:flex}._filename_8oiyp_79{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_8oiyp_101{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_8oiyp_101:hover{background:var(--pdf-accent);border-color:var(--pdf-accent);color:#fff}._iconWrapper_8oiyp_153{justify-content:center;align-items:center;display:flex;position:relative}._badge_8oiyp_167{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_12ml0_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_12ml0_1:hover:not(:disabled){background:var(--pdf-surface);color:var(--pdf-text-primary)}._btn_12ml0_1:disabled{color:var(--pdf-border);cursor:default}._primary_12ml0_57{background:var(--pdf-accent);color:#fff;padding:6px 14px}._primary_12ml0_57:hover:not(:disabled){background:var(--pdf-accent-hover);color:#fff}._navWrapper_1s04k_1{align-items:center;gap:2px;display:flex}._pageInput_1s04k_13{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_1s04k_13:focus{border-color:var(--pdf-accent);background:var(--pdf-bg)}._pageInput_1s04k_13::-webkit-outer-spin-button{-webkit-appearance:none}._pageInput_1s04k_13::-webkit-inner-spin-button{-webkit-appearance:none}._pageInput_1s04k_13{-moz-appearance:textfield}._pageTotal_1s04k_69{color:var(--pdf-text-placeholder);font-variant-numeric:tabular-nums;font-size:12px}._emptyState_1w4ic_1{color:var(--pdf-text-secondary);padding:20px 14px;font-size:12px}._tree_1w4ic_13{flex-direction:column;padding:4px 0;display:flex}._row_1w4ic_25{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_1w4ic_25:hover{background-color:var(--pdf-surface-hover);color:var(--pdf-text-primary)}._chevronBtn_1w4ic_61{cursor:pointer;color:var(--pdf-text-secondary);background:0 0;border:none;flex-shrink:0;align-items:center;padding:0;display:flex}._chevronBtn_1w4ic_61:hover{color:var(--pdf-text-muted)}._title_1w4ic_91{text-overflow:ellipsis;white-space:nowrap;flex:1;overflow:hidden}._wrapper_4qrs1_1{align-items:center;gap:4px;display:flex}._searchIconWrapper_4qrs1_13{color:var(--pdf-text-secondary);align-items:center;display:flex}._searchInput_4qrs1_25{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_4qrs1_25:focus{border-color:var(--pdf-accent)}._searchInput_4qrs1_25::placeholder{color:var(--pdf-text-placeholder)}._navButton_4qrs1_65{color:var(--pdf-text-secondary);cursor:pointer;background:0 0;border:none;border-radius:4px;align-items:center;padding:4px 5px;display:flex}._navButton_4qrs1_65:hover:not(:disabled){background:var(--pdf-surface);color:var(--pdf-text-primary)}._navButton_4qrs1_65:disabled{color:var(--pdf-border);cursor:default}._counter_4qrs1_107{color:var(--pdf-text-muted);text-align:center;min-width:36px;font-size:11px}._list_irrdi_1{flex-direction:column;gap:6px;padding:8px;display:flex}._emptyState_irrdi_15{color:var(--pdf-text-muted);text-align:center;padding:24px 14px;font-size:12px}._card_irrdi_29{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_irrdi_63{background:#22c55e0a;border-color:#22c55e47}._cardClickable_irrdi_73{cursor:pointer}._cardClickable_irrdi_73:hover{box-shadow:0 2px 10px var(--pdf-shadow-page);border-color:var(--pdf-border-light)}._cardSigned_irrdi_63._cardClickable_irrdi_73:hover{border-color:#22c55e73}._cardBody_irrdi_99{padding:10px 12px 10px 16px}._cardHeader_irrdi_107{justify-content:space-between;align-items:center;gap:8px;margin-bottom:8px;display:flex}._fieldName_irrdi_123{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_irrdi_145{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_irrdi_177{color:#15803d;background:#22c55e1f;border-color:#22c55e4d}._fieldList_irrdi_189{flex-direction:column;gap:4px;display:flex}._fieldRow_irrdi_201{grid-template-columns:72px 1fr;gap:4px;font-size:11px;line-height:1.5;display:grid}._fieldLabel_irrdi_217{color:var(--pdf-text-muted);font-weight:500}._fieldValue_irrdi_227{color:var(--pdf-text-secondary);word-break:break-word}._iconWrapper_irrdi_237{justify-content:center;align-items:center;display:flex;position:relative}._badge_irrdi_251{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_vk7sw_1{background-color:var(--pdf-panel-bg);padding-bottom:8px}._thumbnailItem_vk7sw_11{cursor:pointer;text-align:center;background-color:#0000;border-left:2px solid #0000;padding:12px 16px;transition:background-color .15s}._thumbnailItem_vk7sw_11:hover{background-color:var(--pdf-surface-hover)}._thumbnailItemActive_vk7sw_37{background-color:var(--pdf-accent-subtle);border-left-color:var(--pdf-accent)}._thumbnailItemActive_vk7sw_37:hover{background-color:var(--pdf-accent-subtle)}._thumbnailImg_vk7sw_55{width:120px;box-shadow:0 1px 4px var(--pdf-shadow-page);border-radius:2px}._thumbnailImgActive_vk7sw_67{box-shadow:0 0 0 2px var(--pdf-accent), 0 2px 8px var(--pdf-shadow-page)}._thumbnailSkeleton_vk7sw_75{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_vk7sw_1}@keyframes _shimmer_vk7sw_1{0%{background-position:200% 0}to{background-position:-200% 0}}._thumbnailLabel_vk7sw_103{color:var(--pdf-text-muted);margin-top:6px;font-size:11px;font-weight:400}._thumbnailLabelActive_vk7sw_117{color:var(--pdf-accent-hover);font-weight:600}._zoomLabel_1r6if_1{text-align:center;min-width:42px;color:var(--pdf-text-muted);font-variant-numeric:tabular-nums;font-size:12px}._toolbar_xoqxq_1{flex:1;align-items:center;gap:2px;min-width:0;display:flex}._item_xoqxq_9{flex-shrink:0;align-items:center;display:flex}._overflowWrapper_xoqxq_15{flex-shrink:0;margin-left:auto;position:relative}._overflowBtnActive_xoqxq_21{background:var(--pdf-surface);color:var(--pdf-text-primary)}._dropdown_xoqxq_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_xoqxq_41{border-radius:4px;justify-content:flex-end;align-items:center;padding:1px 2px;display:flex}._dropdownItem_xoqxq_41>*{flex-shrink:0}._labeledItem_xoqxq_53{align-items:center;gap:8px;width:100%;display:flex}._itemContent_xoqxq_60{flex-shrink:0;align-items:center;display:flex}._itemLabel_xoqxq_66{color:var(--pdf-text-secondary);white-space:nowrap;-webkit-user-select:none;user-select:none;flex:1;font-size:12px}._dropdownItem_xoqxq_41:hover{background:var(--pdf-surface-hover)}
2
2
  /*$vite$:1*/
package/dist/es/theme.js CHANGED
@@ -1,5 +1,6 @@
1
1
  //#region src/theme.ts
2
2
  var e = {
3
+ fontFamily: "-apple-system, BlinkMacSystemFont, \"Segoe UI\", Helvetica, Arial, sans-serif",
3
4
  bg: "#18181b",
4
5
  surface: "#27272a",
5
6
  surfaceHover: "#3f3f46",
@@ -18,8 +19,10 @@ var e = {
18
19
  panelBg: "#1f1f23",
19
20
  panelBorder: "#27272a",
20
21
  panelHeaderBg: "#18181b",
21
- shadowPage: "rgba(0, 0, 0, 0.4)"
22
+ shadowPage: "rgba(0, 0, 0, 0.4)",
23
+ badgeBg: "#3b82f6"
22
24
  }, t = {
25
+ fontFamily: "-apple-system, BlinkMacSystemFont, \"Segoe UI\", Helvetica, Arial, sans-serif",
23
26
  bg: "#f4f4f5",
24
27
  surface: "#ffffff",
25
28
  surfaceHover: "#f4f4f5",
@@ -38,10 +41,12 @@ var e = {
38
41
  panelBg: "#ffffff",
39
42
  panelBorder: "#e4e4e7",
40
43
  panelHeaderBg: "#fafafa",
41
- shadowPage: "rgba(0, 0, 0, 0.12)"
44
+ shadowPage: "rgba(0, 0, 0, 0.12)",
45
+ badgeBg: "#3b82f6"
42
46
  };
43
47
  function n(e) {
44
48
  return {
49
+ "--pdf-font-family": e.fontFamily,
45
50
  "--pdf-bg": e.bg,
46
51
  "--pdf-surface": e.surface,
47
52
  "--pdf-surface-hover": e.surfaceHover,
@@ -60,7 +65,8 @@ function n(e) {
60
65
  "--pdf-panel-bg": e.panelBg,
61
66
  "--pdf-panel-border": e.panelBorder,
62
67
  "--pdf-panel-header-bg": e.panelHeaderBg,
63
- "--pdf-shadow-page": e.shadowPage
68
+ "--pdf-shadow-page": e.shadowPage,
69
+ "--pdf-badge-bg": e.badgeBg
64
70
  };
65
71
  }
66
72
  //#endregion
@@ -7,7 +7,7 @@ export interface PDFAnnotation {
7
7
  title?: string;
8
8
  rect?: [number, number, number, number];
9
9
  }
10
- export declare function useAnnotations({ pdf }: {
10
+ export declare function useAnnotations({ pdf, }: {
11
11
  pdf: pdfjsLib.PDFDocumentProxy | null;
12
12
  }): {
13
13
  annotations: PDFAnnotation[];
@@ -0,0 +1,11 @@
1
+ import * as pdfjsLib from "pdfjs-dist";
2
+ export interface PDFAttachment {
3
+ filename: string;
4
+ content: Uint8Array;
5
+ }
6
+ export declare function useAttachments({ pdf }: {
7
+ pdf: pdfjsLib.PDFDocumentProxy | null;
8
+ }): {
9
+ attachments: PDFAttachment[];
10
+ loading: boolean;
11
+ };
@@ -5,6 +5,7 @@ interface UseKeyboardShortcutsOptions {
5
5
  goToPage: (page: number) => void;
6
6
  setZoom: React.Dispatch<React.SetStateAction<number>>;
7
7
  setRotation: React.Dispatch<React.SetStateAction<number>>;
8
+ setFitMode: React.Dispatch<React.SetStateAction<"width" | "page" | null>>;
8
9
  }
9
- export declare function useKeyboardShortcuts({ pdf, currentPage, goToPage, setZoom, setRotation, }: UseKeyboardShortcutsOptions): void;
10
+ export declare function useKeyboardShortcuts({ pdf, currentPage, goToPage, setZoom, setRotation, setFitMode, }: UseKeyboardShortcutsOptions): void;
10
11
  export {};
@@ -1,15 +1,10 @@
1
- import * as pdfjsLib from "pdfjs-dist";
2
1
  interface UseScrollTrackingOptions {
3
- pdf: pdfjsLib.PDFDocumentProxy | null;
4
2
  numPages: number;
5
- zoom: number;
6
- rotation: number;
7
3
  containerRef: React.RefObject<HTMLDivElement | null>;
8
4
  pageRefs: React.RefObject<(HTMLDivElement | null)[]>;
9
- canvasRefs: React.RefObject<(HTMLCanvasElement | null)[]>;
10
5
  }
11
- export declare function useScrollTracking({ pdf, numPages, zoom, rotation, containerRef, pageRefs, canvasRefs, }: UseScrollTrackingOptions): {
6
+ export declare function useScrollTracking({ numPages, containerRef, pageRefs, }: UseScrollTrackingOptions): {
12
7
  currentPage: number;
13
- goToPage: (pageNum: number) => void;
8
+ goToPage: (pageNum: number, yOffset?: number) => void;
14
9
  };
15
10
  export {};
package/dist/index.d.ts CHANGED
@@ -2,6 +2,7 @@ export { default as PDFViewer } from './components/PDFViewer';
2
2
  export type { Theme } from './theme';
3
3
  export { darkTheme, lightTheme } from './theme';
4
4
  export { PDFSidebar } from './components/PDFSidebar';
5
+ export { PDFAttachments, PDFAttachmentsIcon } from './components/features/PDFAttachments';
5
6
  export { PDFAnnotations, PDFAnnotationsIcon } from './components/features/PDFAnnotations';
6
7
  export { PDFChangeFile } from './components/features/PDFChangeFile';
7
8
  export { PDFDownloadButton } from './components/features/PDFDownloadButton';
@@ -16,3 +17,5 @@ export { PDFZoomControls } from './components/features/PDFZoomControls';
16
17
  export { PDFThemeToggle } from './components/features/PDFThemeToggle';
17
18
  export { PDFPrintButton } from './components/features/PDFPrintButton';
18
19
  export { PDFSidebarToggle } from './components/features/PDFSidebarToggle';
20
+ export { PDFToolbar } from './components/ui/PDFToolbar';
21
+ export { PDFToolbarItem } from './components/ui/PDFToolbarItem';
package/dist/theme.d.ts CHANGED
@@ -1,4 +1,5 @@
1
1
  export interface Theme {
2
+ fontFamily: string;
2
3
  bg: string;
3
4
  surface: string;
4
5
  surfaceHover: string;
@@ -18,6 +19,7 @@ export interface Theme {
18
19
  panelBorder: string;
19
20
  panelHeaderBg: string;
20
21
  shadowPage: string;
22
+ badgeBg: string;
21
23
  }
22
24
  export declare const darkTheme: Theme;
23
25
  export declare const lightTheme: Theme;
package/package.json CHANGED
@@ -1,61 +1,61 @@
1
- {
2
- "name": "pdf-tsx",
3
- "version": "0.5.0",
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
- "build": "vite build",
35
- "lint": "eslint .",
36
- "preview": "vite preview"
37
- },
38
- "peerDependencies": {
39
- "pdfjs-dist": ">=5",
40
- "react": ">=18",
41
- "react-dom": ">=18"
42
- },
43
- "devDependencies": {
44
- "@eslint/js": "^9.39.4",
45
- "@rolldown/plugin-babel": "^0.2.2",
46
- "@types/node": "^25.6.0",
47
- "@types/react": "^19.2.14",
48
- "@types/react-dom": "^19.2.3",
49
- "@vitejs/plugin-react": "^6.0.1",
50
- "babel-plugin-react-compiler": "^1.0.0",
51
- "eslint": "^9.39.4",
52
- "eslint-plugin-react-hooks": "^7.0.1",
53
- "eslint-plugin-react-refresh": "^0.5.2",
54
- "globals": "^16.5.0",
55
- "react-icons": "^5.6.0",
56
- "typescript": "~5.9.3",
57
- "typescript-eslint": "^8.58.1",
58
- "vite": "^8.0.8",
59
- "vite-plugin-dts": "^4.5.4"
60
- }
61
- }
1
+ {
2
+ "name": "pdf-tsx",
3
+ "version": "0.7.0",
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
+ "build": "vite build",
35
+ "lint": "eslint .",
36
+ "preview": "vite preview"
37
+ },
38
+ "peerDependencies": {
39
+ "pdfjs-dist": ">=5",
40
+ "react": ">=18",
41
+ "react-dom": ">=18"
42
+ },
43
+ "devDependencies": {
44
+ "@eslint/js": "^9.39.4",
45
+ "@rolldown/plugin-babel": "^0.2.2",
46
+ "@types/node": "^25.6.0",
47
+ "@types/react": "^19.2.14",
48
+ "@types/react-dom": "^19.2.3",
49
+ "@vitejs/plugin-react": "^6.0.1",
50
+ "babel-plugin-react-compiler": "^1.0.0",
51
+ "eslint": "^9.39.4",
52
+ "eslint-plugin-react-hooks": "^7.0.1",
53
+ "eslint-plugin-react-refresh": "^0.5.2",
54
+ "globals": "^16.5.0",
55
+ "react-icons": "^5.6.0",
56
+ "typescript": "~5.9.3",
57
+ "typescript-eslint": "^8.58.1",
58
+ "vite": "^8.0.8",
59
+ "vite-plugin-dts": "^4.5.4"
60
+ }
61
+ }