pdf-tsx 0.10.0 → 0.12.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 (86) hide show
  1. package/README.md +51 -4
  2. package/dist/cjs/components/PDFViewer.cjs +1 -1
  3. package/dist/cjs/components/PDFViewer.module.cjs +1 -1
  4. package/dist/cjs/components/features/PDFAnnotations.cjs +1 -1
  5. package/dist/cjs/components/features/PDFAnnotations.module.cjs +1 -1
  6. package/dist/cjs/components/features/PDFAttachments.cjs +1 -1
  7. package/dist/cjs/components/features/PDFChangeFile.cjs +1 -1
  8. package/dist/cjs/components/features/PDFDownloadButton.cjs +1 -1
  9. package/dist/cjs/components/features/PDFNavigation.cjs +1 -1
  10. package/dist/cjs/components/features/PDFNavigation.module.cjs +1 -1
  11. package/dist/cjs/components/features/PDFOutline.cjs +1 -1
  12. package/dist/cjs/components/features/PDFPageFit.cjs +1 -1
  13. package/dist/cjs/components/features/PDFPrintButton.cjs +1 -1
  14. package/dist/cjs/components/features/PDFRotationControl.cjs +1 -1
  15. package/dist/cjs/components/features/PDFSearch.cjs +1 -1
  16. package/dist/cjs/components/features/PDFSidebarToggle.cjs +1 -1
  17. package/dist/cjs/components/features/PDFSignatures.cjs +1 -1
  18. package/dist/cjs/components/features/PDFThemeToggle.cjs +1 -1
  19. package/dist/cjs/components/features/PDFThumbnails.cjs +1 -1
  20. package/dist/cjs/components/features/PDFZoomControls.cjs +1 -1
  21. package/dist/cjs/components/ui/PDFToolbar.cjs +1 -1
  22. package/dist/cjs/components/ui/PDFToolbarSeparator.cjs +1 -0
  23. package/dist/cjs/components/ui/PDFToolbarSeparator.module.cjs +1 -0
  24. package/dist/cjs/context/LabelsContext.cjs +1 -0
  25. package/dist/cjs/context/labelsContextValue.cjs +1 -0
  26. package/dist/cjs/hooks/useAnnotationLayer.cjs +1 -1
  27. package/dist/cjs/hooks/useAnnotations.cjs +1 -1
  28. package/dist/cjs/hooks/useLabels.cjs +1 -0
  29. package/dist/cjs/hooks/usePDFLoader.cjs +1 -1
  30. package/dist/cjs/index.cjs +1 -1
  31. package/dist/cjs/labels.cjs +1 -0
  32. package/dist/cjs/pdf-tsx.css +1 -1
  33. package/dist/cjs/theme.cjs +1 -1
  34. package/dist/components/PDFViewer.d.ts +1 -0
  35. package/dist/components/features/PDFChangeFile.d.ts +1 -1
  36. package/dist/components/features/PDFDownloadButton.d.ts +1 -1
  37. package/dist/components/features/PDFNavigation.d.ts +1 -1
  38. package/dist/components/features/PDFPageFit.d.ts +1 -1
  39. package/dist/components/features/PDFPrintButton.d.ts +1 -1
  40. package/dist/components/features/PDFRotationControl.d.ts +1 -1
  41. package/dist/components/features/PDFSearch.d.ts +3 -2
  42. package/dist/components/features/PDFSidebarToggle.d.ts +1 -1
  43. package/dist/components/features/PDFThemeToggle.d.ts +1 -1
  44. package/dist/components/features/PDFZoomControls.d.ts +1 -1
  45. package/dist/components/ui/PDFToolbarSeparator.d.ts +1 -0
  46. package/dist/context/LabelsContext.d.ts +7 -0
  47. package/dist/context/labelsContextValue.d.ts +2 -0
  48. package/dist/es/components/PDFViewer.js +311 -193
  49. package/dist/es/components/PDFViewer.module.js +21 -15
  50. package/dist/es/components/features/PDFAnnotations.js +132 -62
  51. package/dist/es/components/features/PDFAnnotations.module.js +12 -12
  52. package/dist/es/components/features/PDFAttachments.js +42 -41
  53. package/dist/es/components/features/PDFChangeFile.js +17 -16
  54. package/dist/es/components/features/PDFDownloadButton.js +15 -14
  55. package/dist/es/components/features/PDFNavigation.js +39 -38
  56. package/dist/es/components/features/PDFNavigation.module.js +3 -3
  57. package/dist/es/components/features/PDFOutline.js +46 -45
  58. package/dist/es/components/features/PDFPageFit.js +19 -18
  59. package/dist/es/components/features/PDFPrintButton.js +14 -13
  60. package/dist/es/components/features/PDFRotationControl.js +12 -11
  61. package/dist/es/components/features/PDFSearch.js +71 -55
  62. package/dist/es/components/features/PDFSidebarToggle.js +13 -12
  63. package/dist/es/components/features/PDFSignatures.js +87 -84
  64. package/dist/es/components/features/PDFThemeToggle.js +12 -11
  65. package/dist/es/components/features/PDFThumbnails.js +33 -32
  66. package/dist/es/components/features/PDFZoomControls.js +23 -22
  67. package/dist/es/components/ui/PDFToolbar.js +56 -55
  68. package/dist/es/components/ui/PDFToolbarSeparator.js +13 -0
  69. package/dist/es/components/ui/PDFToolbarSeparator.module.js +3 -0
  70. package/dist/es/context/LabelsContext.js +14 -0
  71. package/dist/es/context/labelsContextValue.js +5 -0
  72. package/dist/es/hooks/useAnnotationLayer.js +37 -20
  73. package/dist/es/hooks/useAnnotations.js +5 -3
  74. package/dist/es/hooks/useLabels.js +9 -0
  75. package/dist/es/hooks/usePDFLoader.js +6 -2
  76. package/dist/es/index.js +22 -20
  77. package/dist/es/labels.js +124 -0
  78. package/dist/es/pdf-tsx.css +1 -1
  79. package/dist/es/theme.js +6 -3
  80. package/dist/hooks/useAnnotationLayer.d.ts +15 -1
  81. package/dist/hooks/useLabels.d.ts +2 -0
  82. package/dist/hooks/usePDFLoader.d.ts +1 -0
  83. package/dist/index.d.ts +3 -0
  84. package/dist/labels.d.ts +51 -0
  85. package/dist/theme.d.ts +1 -0
  86. package/package.json +2 -1
@@ -3,34 +3,48 @@ import { useEffect as t, useState as n } from "react";
3
3
  import "pdfjs-dist";
4
4
  //#region src/hooks/useAnnotationLayer.ts
5
5
  function r({ pdf: r, zoom: i, rotation: a, mountedPages: o, goToPage: s }) {
6
- let [c, l] = n([]);
6
+ let [c, l] = n([]), [u, d] = n([]);
7
7
  t(() => {
8
8
  if (!r) return;
9
9
  let e = !1;
10
10
  return (async () => {
11
- let t = [];
12
- for (let n of o) {
11
+ let t = [], n = [];
12
+ for (let s of o) {
13
13
  if (e) break;
14
- let o = await r.getPage(n), s = o.getViewport({
14
+ let o = await r.getPage(s), c = o.getViewport({
15
15
  scale: i,
16
16
  rotation: a
17
- }), c = await o.getAnnotations();
18
- for (let e of c) {
19
- if (e.subtype !== "Link" || !e.rect) continue;
20
- let r = e.rect, [i, a, o, c] = s.convertToViewportRectangle(r);
21
- t.push({
22
- page: n,
23
- x: Math.min(i, o),
24
- y: Math.min(a, c),
25
- width: Math.abs(o - i),
26
- height: Math.abs(c - a),
17
+ }), l = await o.getAnnotations();
18
+ for (let e of l) {
19
+ if (!e.rect) continue;
20
+ let r = e.rect, [i, a, o, l] = c.convertToViewportRectangle(r), u = Math.min(i, o), d = Math.min(a, l), f = Math.abs(o - i), p = Math.abs(l - a);
21
+ if (e.subtype === "Link") t.push({
22
+ page: s,
23
+ x: u,
24
+ y: d,
25
+ width: f,
26
+ height: p,
27
27
  url: e.url,
28
28
  dest: e.dest,
29
29
  newWindow: e.newWindow
30
30
  });
31
+ else {
32
+ let t = e.contentsObj, i = e.titleObj, a = t?.str ?? e.contents ?? "", o = i?.str ?? e.title;
33
+ a && n.push({
34
+ page: s,
35
+ x: u,
36
+ y: d,
37
+ width: f,
38
+ height: p,
39
+ contents: a,
40
+ title: o || void 0,
41
+ subtype: e.subtype,
42
+ pdfRect: r
43
+ });
44
+ }
31
45
  }
32
46
  }
33
- e || l(t);
47
+ e || (l(t), d(n));
34
48
  })(), () => {
35
49
  e = !0;
36
50
  };
@@ -40,7 +54,7 @@ function r({ pdf: r, zoom: i, rotation: a, mountedPages: o, goToPage: s }) {
40
54
  a,
41
55
  o
42
56
  ]);
43
- let u = async (t) => {
57
+ let f = async (t) => {
44
58
  if (t.url) {
45
59
  if (!e(t.url)) return;
46
60
  window.open(t.url, "_blank", "noopener,noreferrer");
@@ -52,10 +66,13 @@ function r({ pdf: r, zoom: i, rotation: a, mountedPages: o, goToPage: s }) {
52
66
  s(await r.getPageIndex(e[0]) + 1);
53
67
  }
54
68
  };
55
- return c.map((e) => ({
56
- ...e,
57
- _handleClick: u.bind(null, e)
58
- }));
69
+ return {
70
+ linkOverlays: c.map((e) => ({
71
+ ...e,
72
+ _handleClick: f.bind(null, e)
73
+ })),
74
+ noteOverlays: u
75
+ };
59
76
  }
60
77
  //#endregion
61
78
  export { r as useAnnotationLayer };
@@ -13,12 +13,14 @@ function r({ pdf: r }) {
13
13
  let i = await (await r.getPage(t)).getAnnotations();
14
14
  for (let r of i) {
15
15
  let i = r.subtype;
16
- n.has(i) && e.push({
16
+ if (!n.has(i)) continue;
17
+ let a = r.contentsObj, o = r.titleObj;
18
+ e.push({
17
19
  id: r.id,
18
20
  page: t,
19
21
  subtype: i,
20
- contents: r.contents,
21
- title: r.title,
22
+ contents: a?.str ?? r.contents,
23
+ title: o?.str ?? r.title,
22
24
  rect: r.rect
23
25
  });
24
26
  }
@@ -0,0 +1,9 @@
1
+ import { englishLabels as e } from "../labels.js";
2
+ import { LabelsContext as t } from "../context/labelsContextValue.js";
3
+ import { useContext as n } from "react";
4
+ //#region src/hooks/useLabels.ts
5
+ function r() {
6
+ return n(t) ?? e;
7
+ }
8
+ //#endregion
9
+ export { r as useLabels };
@@ -2,8 +2,9 @@ import { useEffect as e, useState as t } from "react";
2
2
  import * as n from "pdfjs-dist";
3
3
  //#region src/hooks/usePDFLoader.ts
4
4
  function r(r) {
5
- let [i, a] = t(null), [o, s] = t(0);
5
+ let [i, a] = t(null), [o, s] = t(0), [c, l] = t(!0);
6
6
  return e(() => {
7
+ l(!0), a(null), s(0);
7
8
  let e = new FileReader();
8
9
  e.onload = async (e) => {
9
10
  let t = new Uint8Array(e.target?.result);
@@ -12,11 +13,14 @@ function r(r) {
12
13
  a(e), s(e.numPages);
13
14
  } catch (e) {
14
15
  console.error("Errore caricamento:", e);
16
+ } finally {
17
+ l(!1);
15
18
  }
16
19
  }, e.readAsArrayBuffer(r);
17
20
  }, [r]), {
18
21
  pdf: i,
19
- numPages: o
22
+ numPages: o,
23
+ loading: c
20
24
  };
21
25
  }
22
26
  //#endregion
package/dist/es/index.js CHANGED
@@ -1,21 +1,23 @@
1
1
  import { darkTheme as e, lightTheme as t } from "./theme.js";
2
- import n from "./components/PDFViewer.js";
3
- import { PDFSidebar as r } from "./components/PDFSidebar.js";
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 };
2
+ import { englishLabels as n, italianLabels as r } from "./labels.js";
3
+ import i from "./components/PDFViewer.js";
4
+ import { PDFSidebar as a } from "./components/PDFSidebar.js";
5
+ import { PDFAttachments as o, PDFAttachmentsIcon as s } from "./components/features/PDFAttachments.js";
6
+ import { PDFAnnotations as c, PDFAnnotationsIcon as l } from "./components/features/PDFAnnotations.js";
7
+ import { PDFChangeFile as u } from "./components/features/PDFChangeFile.js";
8
+ import { PDFDownloadButton as d } from "./components/features/PDFDownloadButton.js";
9
+ import { PDFNavigation as f } from "./components/features/PDFNavigation.js";
10
+ import { PDFOutline as p } from "./components/features/PDFOutline.js";
11
+ import { PDFPageFit as m } from "./components/features/PDFPageFit.js";
12
+ import { PDFRotationControl as h } from "./components/features/PDFRotationControl.js";
13
+ import { PDFSearch as g } from "./components/features/PDFSearch.js";
14
+ import { PDFSignatures as _, PDFSignaturesIcon as v } from "./components/features/PDFSignatures.js";
15
+ import { PDFThumbnails as y } from "./components/features/PDFThumbnails.js";
16
+ import { PDFZoomControls as b } from "./components/features/PDFZoomControls.js";
17
+ import { PDFThemeToggle as x } from "./components/features/PDFThemeToggle.js";
18
+ import { PDFPrintButton as S } from "./components/features/PDFPrintButton.js";
19
+ import { PDFSidebarToggle as C } from "./components/features/PDFSidebarToggle.js";
20
+ import { PDFToolbar as w } from "./components/ui/PDFToolbar.js";
21
+ import { PDFToolbarItem as T } from "./components/ui/PDFToolbarItem.js";
22
+ import { PDFToolbarSeparator as E } from "./components/ui/PDFToolbarSeparator.js";
23
+ export { c as PDFAnnotations, l as PDFAnnotationsIcon, o as PDFAttachments, s as PDFAttachmentsIcon, u as PDFChangeFile, d as PDFDownloadButton, f as PDFNavigation, p as PDFOutline, m as PDFPageFit, S as PDFPrintButton, h as PDFRotationControl, g as PDFSearch, a as PDFSidebar, C as PDFSidebarToggle, _ as PDFSignatures, v as PDFSignaturesIcon, x as PDFThemeToggle, y as PDFThumbnails, w as PDFToolbar, T as PDFToolbarItem, E as PDFToolbarSeparator, i as PDFViewer, b as PDFZoomControls, e as darkTheme, n as englishLabels, r as italianLabels, t as lightTheme };
@@ -0,0 +1,124 @@
1
+ //#region src/labels.ts
2
+ var e = {
3
+ searchPlaceholder: "Cerca nel documento...",
4
+ searchToolbarLabel: "Cerca",
5
+ prevPageTitle: "Pagina precedente (←)",
6
+ pageInputTitle: "Vai alla pagina",
7
+ nextPageTitle: "Pagina successiva (→)",
8
+ navigationToolbarLabel: "Pagina",
9
+ downloadTitle: "Scarica PDF",
10
+ downloadText: "Scarica",
11
+ downloadToolbarLabel: "Scarica",
12
+ downloadFallbackFilename: "documento.pdf",
13
+ printTitle: "Stampa PDF",
14
+ printToolbarLabel: "Stampa",
15
+ rotateTitle: "Ruota documento",
16
+ rotateToolbarLabel: "Ruota",
17
+ zoomOutTitle: "Riduci zoom",
18
+ zoomInTitle: "Aumenta zoom",
19
+ zoomToolbarLabel: "Zoom",
20
+ changeFileTitle: "Apri altro file",
21
+ changeFileToolbarLabel: "Apri file",
22
+ fitWidthTitle: "Adatta alla larghezza",
23
+ fitPageTitle: "Adatta pagina intera",
24
+ fitToolbarLabel: "Adatta",
25
+ switchToLightTitle: "Switch to light mode",
26
+ switchToDarkTitle: "Switch to dark mode",
27
+ themeToolbarLabel: "Tema",
28
+ expandSidebarTitle: "Espandi sidebar",
29
+ collapseSidebarTitle: "Comprimi sidebar",
30
+ sidebarToolbarLabel: "Sidebar",
31
+ attachmentsLoading: "Caricamento...",
32
+ attachmentsEmpty: "Nessun allegato rilevato.",
33
+ downloadAttachmentTitle: "Scarica",
34
+ outlineLoading: "Caricamento...",
35
+ outlineEmpty: "Nessun segnalibro disponibile.",
36
+ thumbnailAlt: "Anteprima pagina",
37
+ annotationTypes: {
38
+ Text: "Nota",
39
+ Highlight: "Evidenziazione",
40
+ Underline: "Sottolineatura",
41
+ StrikeOut: "Barrato",
42
+ FreeText: "Testo libero",
43
+ Ink: "Disegno",
44
+ Square: "Rettangolo",
45
+ Circle: "Cerchio",
46
+ Line: "Linea",
47
+ Stamp: "Timbro",
48
+ FileAttachment: "Allegato"
49
+ },
50
+ annotationsLoading: "Caricamento...",
51
+ annotationsEmpty: "Nessuna annotazione rilevata.",
52
+ annotationsPageHeader: "Pagina",
53
+ signatureSigned: "Firmato",
54
+ signatureUnsigned: "Non firmato",
55
+ signatureSignerLabel: "Firmatario",
56
+ signatureDateLabel: "Data",
57
+ signatureReasonLabel: "Motivo",
58
+ signatureLocationLabel: "Luogo",
59
+ signaturesLoading: "Caricamento...",
60
+ signaturesEmpty: "Nessuna firma rilevata.",
61
+ toolbarMoreOptions: "Altre opzioni"
62
+ }, t = {
63
+ searchPlaceholder: "Search document...",
64
+ searchToolbarLabel: "Search",
65
+ prevPageTitle: "Previous page (←)",
66
+ pageInputTitle: "Go to page",
67
+ nextPageTitle: "Next page (→)",
68
+ navigationToolbarLabel: "Page",
69
+ downloadTitle: "Download PDF",
70
+ downloadText: "Download",
71
+ downloadToolbarLabel: "Download",
72
+ downloadFallbackFilename: "document.pdf",
73
+ printTitle: "Print PDF",
74
+ printToolbarLabel: "Print",
75
+ rotateTitle: "Rotate document",
76
+ rotateToolbarLabel: "Rotate",
77
+ zoomOutTitle: "Zoom out",
78
+ zoomInTitle: "Zoom in",
79
+ zoomToolbarLabel: "Zoom",
80
+ changeFileTitle: "Open another file",
81
+ changeFileToolbarLabel: "Open file",
82
+ fitWidthTitle: "Fit to width",
83
+ fitPageTitle: "Fit whole page",
84
+ fitToolbarLabel: "Fit",
85
+ switchToLightTitle: "Switch to light mode",
86
+ switchToDarkTitle: "Switch to dark mode",
87
+ themeToolbarLabel: "Theme",
88
+ expandSidebarTitle: "Expand sidebar",
89
+ collapseSidebarTitle: "Collapse sidebar",
90
+ sidebarToolbarLabel: "Sidebar",
91
+ attachmentsLoading: "Loading...",
92
+ attachmentsEmpty: "No attachments found.",
93
+ downloadAttachmentTitle: "Download",
94
+ outlineLoading: "Loading...",
95
+ outlineEmpty: "No bookmarks available.",
96
+ thumbnailAlt: "Page preview",
97
+ annotationTypes: {
98
+ Text: "Note",
99
+ Highlight: "Highlight",
100
+ Underline: "Underline",
101
+ StrikeOut: "Strikethrough",
102
+ FreeText: "Free text",
103
+ Ink: "Drawing",
104
+ Square: "Rectangle",
105
+ Circle: "Circle",
106
+ Line: "Line",
107
+ Stamp: "Stamp",
108
+ FileAttachment: "Attachment"
109
+ },
110
+ annotationsLoading: "Loading...",
111
+ annotationsEmpty: "No annotations found.",
112
+ annotationsPageHeader: "Page",
113
+ signatureSigned: "Signed",
114
+ signatureUnsigned: "Unsigned",
115
+ signatureSignerLabel: "Signer",
116
+ signatureDateLabel: "Date",
117
+ signatureReasonLabel: "Reason",
118
+ signatureLocationLabel: "Location",
119
+ signaturesLoading: "Loading...",
120
+ signaturesEmpty: "No signatures found.",
121
+ toolbarMoreOptions: "More options"
122
+ };
123
+ //#endregion
124
+ export { t as englishLabels, e as italianLabels };
@@ -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_1nhg3_1{flex-direction:column;width:100%;height:100%;display:flex;overflow:hidden}._body_1nhg3_9{flex-direction:row;flex:1;min-height:0;display:flex;overflow:hidden}._toolbar_1nhg3_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_1nhg3_29{background-color:var(--pdf-scroll-area);flex-direction:column;flex:1;align-items:center;padding:10px 20px;display:flex;overflow-y:auto}._pageWrapper_1nhg3_39{margin-bottom:25px;position:relative}._pageCanvas_1nhg3_44{z-index:1;box-shadow:0 5px 20px var(--pdf-shadow-page);pointer-events:none;background-color:#fff;display:block;position:relative}._textLayer_1nhg3_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_1nhg3_53 :is(span,br){color:#0000;white-space:pre;cursor:text;transform-origin:0 0;position:absolute}._textLayer_1nhg3_53>:not(._markedContent_1nhg3_79),._textLayer_1nhg3_53 ._markedContent_1nhg3_79 span:not(._markedContent_1nhg3_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_1nhg3_53 ._markedContent_1nhg3_79{display:contents}._textLayer_1nhg3_53 ._endOfContent_1nhg3_94{z-index:0;cursor:default;-webkit-user-select:none;user-select:none;display:block;position:absolute;inset:100% 0 0}._textLayer_1nhg3_53._selecting_1nhg3_103 ._endOfContent_1nhg3_94{top:0}._textLayer_1nhg3_53 ::selection{background:#0000ff40}._textLayer_1nhg3_53 br::selection{background:0 0}._pageSkeleton_1nhg3_123{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_1nhg3_123:after{content:"";border:3px solid #0000001a;border-top-color:var(--pdf-accent);border-radius:50%;width:32px;height:32px;animation:.8s linear infinite _spin_1nhg3_1}@keyframes _spin_1nhg3_1{to{transform:rotate(360deg)}}._highlightOverlay_1nhg3_152{z-index:4;pointer-events:none;background-color:#ffdc0059;border:2px solid #ffa000e6;border-radius:2px;position:absolute}._linkOverlay_1nhg3_161{z-index:3;pointer-events:all;cursor:pointer;position:absolute}._searchMatchOverlay_1nhg3_168{z-index:3;pointer-events:none;background-color:#fde0474d;border-bottom:2px solid #eab308cc;position:absolute}._list_113xr_1{flex-direction:column;display:flex}._emptyState_113xr_6{color:var(--pdf-text-secondary);padding:20px 14px;font-size:12px}._pageHeader_113xr_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_113xr_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_113xr_33{cursor:pointer}._cardClickable_113xr_33:hover{box-shadow:0 1px 6px var(--pdf-shadow-page)}._cardHeader_113xr_41{justify-content:space-between;align-items:center;margin-bottom:4px;display:flex}._cardLabel_113xr_48{color:var(--pdf-text-secondary);font-size:11px;font-weight:600}._cardPage_113xr_54{color:var(--pdf-text-secondary);font-size:10px}._cardAuthor_113xr_59{color:var(--pdf-text-muted);margin-bottom:3px;font-size:11px}._cardContent_113xr_65{color:var(--pdf-text-primary);font-size:12px;line-height:1.5}._iconWrapper_113xr_71{justify-content:center;align-items:center;display:flex;position:relative}._badge_113xr_78{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_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_b0wj1_1{flex-direction:column;gap:6px;padding:8px;display:flex}._emptyState_b0wj1_8{color:var(--pdf-text-muted);text-align:center;padding:24px 14px;font-size:12px}._card_b0wj1_15{border:1px solid var(--pdf-border);background:var(--pdf-panel-bg);text-align:left;cursor:default;box-sizing:border-box;border-radius:8px;width:100%;font-family:inherit;font-size:12px;transition:box-shadow .15s,border-color .15s;position:relative;overflow:hidden}._cardSigned_b0wj1_32{background:#22c55e0a;border-color:#22c55e47}._cardClickable_b0wj1_37{cursor:pointer}._cardClickable_b0wj1_37:hover{box-shadow:0 2px 10px var(--pdf-shadow-page);border-color:var(--pdf-border-light)}._cardSigned_b0wj1_32._cardClickable_b0wj1_37:hover{border-color:#22c55e73}._cardBody_b0wj1_50{padding:10px 12px 10px 16px}._cardHeader_b0wj1_54{justify-content:space-between;align-items:center;gap:8px;margin-bottom:8px;display:flex}._fieldName_b0wj1_62{color:var(--pdf-text-primary);text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;font-size:12px;font-weight:600;overflow:hidden}._statusChip_b0wj1_73{text-transform:uppercase;letter-spacing:.5px;background:var(--pdf-surface-hover);color:var(--pdf-text-muted);border:1px solid var(--pdf-border);border-radius:20px;flex-shrink:0;align-items:center;gap:4px;padding:2px 7px;font-size:10px;font-weight:700;display:inline-flex}._statusChipSigned_b0wj1_89{color:#15803d;background:#22c55e1f;border-color:#22c55e4d}._fieldList_b0wj1_95{flex-direction:column;gap:4px;display:flex}._fieldRow_b0wj1_101{grid-template-columns:72px 1fr;gap:4px;font-size:11px;line-height:1.5;display:grid}._fieldLabel_b0wj1_109{color:var(--pdf-text-muted);font-weight:500}._fieldValue_b0wj1_114{color:var(--pdf-text-secondary);word-break:break-word}._iconWrapper_b0wj1_119{justify-content:center;align-items:center;display:flex;position:relative}._badge_b0wj1_126{background-color:var(--pdf-badge-bg);color:#fff;text-align:center;pointer-events:none;box-sizing:border-box;border-radius:7px;min-width:14px;height:14px;padding:0 3px;font-size:9px;font-weight:700;line-height:14px;position:absolute;top:-5px;right:-7px}._thumbnailList_t3mg8_1{background-color:var(--pdf-panel-bg);padding-bottom:8px}._thumbnailItem_t3mg8_6{cursor:pointer;text-align:center;background-color:#0000;border-left:2px solid #0000;padding:12px 16px;transition:background-color .15s}._thumbnailItem_t3mg8_6:hover{background-color:var(--pdf-surface-hover)}._thumbnailItemActive_t3mg8_19{background-color:var(--pdf-accent-subtle);border-left-color:var(--pdf-accent)}._thumbnailItemActive_t3mg8_19:hover{background-color:var(--pdf-accent-subtle)}._thumbnailImg_t3mg8_28{width:120px;box-shadow:0 1px 4px var(--pdf-shadow-page);border-radius:2px}._thumbnailImgActive_t3mg8_34{box-shadow:0 0 0 2px var(--pdf-accent), 0 2px 8px var(--pdf-shadow-page)}._thumbnailSkeleton_t3mg8_40{background:linear-gradient(90deg, var(--pdf-surface) 25%, var(--pdf-surface-hover) 50%, var(--pdf-surface) 75%);background-size:200% 100%;border-radius:2px;width:120px;height:160px;animation:1.4s infinite _shimmer_t3mg8_1}@keyframes _shimmer_t3mg8_1{0%{background-position:200% 0}to{background-position:-200% 0}}._thumbnailLabel_t3mg8_63{color:var(--pdf-text-muted);margin-top:6px;font-size:11px;font-weight:400}._thumbnailLabelActive_t3mg8_70{color:var(--pdf-accent-hover);font-weight:600}._zoomLabel_m8iv9_1{text-align:center;min-width:42px;color:var(--pdf-text-muted);font-variant-numeric:tabular-nums;font-size:12px}._toolbar_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)}
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_jb06o_1{flex-direction:column;width:100%;height:100%;display:flex;overflow:hidden}._body_jb06o_9{flex-direction:row;flex:1;min-height:0;display:flex;overflow:hidden}._toolbar_jb06o_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_jb06o_29{background-color:var(--pdf-scroll-area);flex-direction:column;flex:1;align-items:center;padding:10px 20px;display:flex;position:relative;overflow-y:auto}._pageWrapper_jb06o_40{margin-bottom:25px;position:relative}._pageCanvas_jb06o_45{z-index:1;box-shadow:0 5px 20px var(--pdf-shadow-page);pointer-events:none;background-color:#fff;display:block;position:relative}._textLayer_jb06o_54{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light only;text-align:initial;opacity:1;-webkit-text-size-adjust:none;-moz-text-size-adjust:none;text-size-adjust:none;forced-color-adjust:none;transform-origin:0 0;caret-color:canvastext;z-index:2;--min-font-size:1;--text-scale-factor:calc(var(--total-scale-factor) * var(--min-font-size));--min-font-size-inv:calc(1 / var(--min-font-size));line-height:1;position:absolute;inset:0;overflow:clip}._textLayer_jb06o_54 :is(span,br){color:#0000;white-space:pre;cursor:text;transform-origin:0 0;position:absolute}._textLayer_jb06o_54>:not(._markedContent_jb06o_80),._textLayer_jb06o_54 ._markedContent_jb06o_80 span:not(._markedContent_jb06o_80){z-index:1;--font-height:0;font-size:calc(var(--text-scale-factor) * var(--font-height));--scale-x:1;--rotate:0deg;transform:rotate(var(--rotate)) scaleX(var(--scale-x)) scale(var(--min-font-size-inv))}._textLayer_jb06o_54 ._markedContent_jb06o_80{display:contents}._textLayer_jb06o_54 ._endOfContent_jb06o_95{z-index:0;cursor:default;-webkit-user-select:none;user-select:none;display:block;position:absolute;inset:100% 0 0}._textLayer_jb06o_54._selecting_jb06o_104 ._endOfContent_jb06o_95{top:0}._textLayer_jb06o_54 ::selection{background:#0000ff40}._textLayer_jb06o_54 br::selection{background:0 0}._documentLoading_jb06o_124{pointer-events:none;z-index:10;justify-content:center;align-items:center;display:flex;position:absolute;inset:0}._documentLoading_jb06o_124:after{content:"";border:3px solid #0000001a;border-top-color:var(--pdf-accent);border-radius:50%;width:40px;height:40px;animation:.8s linear infinite _spin_jb06o_1}._pageSkeleton_jb06o_144{z-index:0;pointer-events:none;background:#fff;border-radius:1px;justify-content:center;align-items:center;display:flex;position:absolute;top:0;left:0}._pageSkeleton_jb06o_144:after{content:"";border:3px solid #0000001a;border-top-color:var(--pdf-accent);border-radius:50%;width:32px;height:32px;animation:.8s linear infinite _spin_jb06o_1}@keyframes _spin_jb06o_1{to{transform:rotate(360deg)}}._highlightOverlay_jb06o_173{z-index:4;pointer-events:none;background-color:#ffdc0059;border:2px solid #ffa000e6;border-radius:2px;position:absolute}._linkOverlay_jb06o_182{z-index:3;pointer-events:all;cursor:pointer;position:absolute}._searchMatchOverlay_jb06o_189{z-index:3;pointer-events:none;background-color:#fde0474d;border-bottom:2px solid #eab308cc;position:absolute}._noteOverlay_jb06o_197{z-index:3;pointer-events:all;cursor:pointer;position:absolute}._noteIconOverlay_jb06o_204{z-index:3;pointer-events:all;cursor:pointer;border-radius:3px;justify-content:center;align-items:center;transition:background-color .1s;display:flex;position:absolute}._noteIconOverlay_jb06o_204:hover{background-color:#ffd20033;outline:1px solid #a0780066}._notePopover_jb06o_221{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_jb06o_234{color:var(--pdf-text-secondary);margin-bottom:6px;font-size:12px;font-weight:600}._notePopoverContent_jb06o_241{color:var(--pdf-text-primary);white-space:pre-wrap;margin:0;font-size:13px;line-height:1.5}._list_gygvf_1{flex-direction:column;display:flex}._emptyState_gygvf_6{color:var(--pdf-text-secondary);padding:20px 14px;font-size:12px}._pageHeader_gygvf_12{color:var(--pdf-text-secondary);text-transform:uppercase;letter-spacing:.5px;background-color:var(--pdf-panel-header-bg);border-bottom:1px solid var(--pdf-panel-border);padding:5px 12px;font-size:10px;font-weight:600}._card_gygvf_23{border:1px solid var(--pdf-panel-border);background-color:var(--pdf-panel-bg);border-radius:6px;margin:8px;padding:10px 12px;font-size:12px;transition:box-shadow .12s}._cardClickable_gygvf_33{cursor:pointer}._cardClickable_gygvf_33:hover{box-shadow:0 1px 6px var(--pdf-shadow-page)}._cardHeader_gygvf_41{justify-content:space-between;align-items:center;margin-bottom:4px;display:flex}._cardLabel_gygvf_48{color:var(--pdf-text-secondary);align-items:center;gap:5px;font-size:11px;font-weight:600;display:flex}._cardPage_gygvf_57{color:var(--pdf-text-secondary);font-size:10px}._cardAuthor_gygvf_62{color:var(--pdf-text-muted);margin-bottom:3px;font-size:11px}._cardContent_gygvf_68{color:var(--pdf-text-primary);font-size:12px;line-height:1.5}._iconWrapper_gygvf_74{justify-content:center;align-items:center;display:flex;position:relative}._badge_gygvf_81{background-color:var(--pdf-badge-bg);color:#fff;text-align:center;pointer-events:none;box-sizing:border-box;border-radius:7px;min-width:14px;height:14px;padding:0 3px;font-size:9px;font-weight:700;line-height:14px;position:absolute;top:-5px;right:-7px}._list_12ybz_1{flex-direction:column;gap:6px;padding:8px;display:flex}._emptyState_12ybz_8{color:var(--pdf-text-muted);text-align:center;padding:24px 14px;font-size:12px}._card_12ybz_15{border:1px solid var(--pdf-border);background:var(--pdf-panel-bg);text-align:left;box-sizing:border-box;border-radius:8px;align-items:center;gap:10px;padding:10px 12px;font-family:inherit;font-size:12px;transition:box-shadow .15s,border-color .15s;display:flex;overflow:hidden}._fileIcon_12ybz_33{color:var(--pdf-text-muted);flex-shrink:0;align-items:center;display:flex}._filename_12ybz_40{min-width:0;color:var(--pdf-text-primary);text-overflow:ellipsis;white-space:nowrap;flex:1;font-size:12px;font-weight:500;overflow:hidden}._downloadBtn_12ybz_51{border:1px solid var(--pdf-border);background:var(--pdf-surface);width:28px;height:28px;color:var(--pdf-text-secondary);cursor:pointer;border-radius:6px;flex-shrink:0;justify-content:center;align-items:center;padding:0;font-family:inherit;transition:background .15s,border-color .15s,color .15s;display:flex}._downloadBtn_12ybz_51:hover{background:var(--pdf-accent);border-color:var(--pdf-accent);color:#fff}._iconWrapper_12ybz_77{justify-content:center;align-items:center;display:flex;position:relative}._badge_12ybz_84{background-color:var(--pdf-badge-bg);color:#fff;text-align:center;pointer-events:none;box-sizing:border-box;border-radius:7px;min-width:14px;height:14px;padding:0 3px;font-size:9px;font-weight:700;line-height:14px;position:absolute;top:-5px;right:-7px}._btn_1dub8_1{color:var(--pdf-text-secondary);cursor:pointer;white-space:nowrap;background:0 0;border:none;border-radius:4px;justify-content:center;align-items:center;gap:5px;padding:6px 8px;font-family:inherit;font-size:13px;line-height:1;transition:background .12s,color .12s;display:flex}._btn_1dub8_1:hover:not(:disabled){background:var(--pdf-surface);color:var(--pdf-text-primary)}._btn_1dub8_1:disabled{color:var(--pdf-border);cursor:default}._primary_1dub8_31{background:var(--pdf-accent);color:#fff;padding:6px 14px}._primary_1dub8_31:hover:not(:disabled){background:var(--pdf-accent-hover);color:#fff}._navWrapper_14eo9_1{align-items:center;gap:2px;display:flex}._pageInput_14eo9_7{background:var(--pdf-surface);width:32px;color:var(--pdf-text-primary);font-variant-numeric:tabular-nums;text-align:center;border:1px solid #0000;border-radius:4px;outline:none;padding:3px 4px;font-family:inherit;font-size:12px}._pageInput_14eo9_7:focus{border-color:var(--pdf-accent)}._pageInput_14eo9_7::-webkit-outer-spin-button{-webkit-appearance:none}._pageInput_14eo9_7::-webkit-inner-spin-button{-webkit-appearance:none}._pageInput_14eo9_7{-moz-appearance:textfield}._pageTotal_14eo9_34{color:var(--pdf-text-placeholder);font-variant-numeric:tabular-nums;font-size:12px}._emptyState_hqvdn_1{color:var(--pdf-text-secondary);padding:20px 14px;font-size:12px}._tree_hqvdn_7{flex-direction:column;padding:4px 0;display:flex}._row_hqvdn_13{color:var(--pdf-text-secondary);cursor:pointer;border-radius:4px;align-items:center;gap:4px;margin:0 4px;padding:5px 12px;font-size:12px;line-height:1.4;display:flex}._row_hqvdn_13:hover{background-color:var(--pdf-surface-hover);color:var(--pdf-text-primary)}._chevronBtn_hqvdn_31{cursor:pointer;color:var(--pdf-text-secondary);background:0 0;border:none;flex-shrink:0;align-items:center;padding:0;display:flex}._chevronBtn_hqvdn_31:hover{color:var(--pdf-text-muted)}._title_hqvdn_46{text-overflow:ellipsis;white-space:nowrap;flex:1;overflow:hidden}._wrapper_18kvs_1{align-items:center;gap:4px;display:flex}._searchIconWrapper_18kvs_7{color:var(--pdf-text-secondary);align-items:center;display:flex}._searchInput_18kvs_13{background:var(--pdf-surface);border:1px solid var(--pdf-border);color:var(--pdf-text-primary);border-radius:4px;outline:none;width:180px;padding:4px 8px;font-family:inherit;font-size:13px}._searchInput_18kvs_13:focus{border-color:var(--pdf-accent)}._searchInput_18kvs_13::placeholder{color:var(--pdf-text-placeholder)}._navButton_18kvs_33{color:var(--pdf-text-secondary);cursor:pointer;background:0 0;border:none;border-radius:4px;align-items:center;padding:4px 5px;display:flex}._navButton_18kvs_33:hover:not(:disabled){background:var(--pdf-surface);color:var(--pdf-text-primary)}._navButton_18kvs_33:disabled{color:var(--pdf-border);cursor:default}._counter_18kvs_54{color:var(--pdf-text-muted);text-align:center;min-width:36px;font-size:11px}._list_b0wj1_1{flex-direction:column;gap:6px;padding:8px;display:flex}._emptyState_b0wj1_8{color:var(--pdf-text-muted);text-align:center;padding:24px 14px;font-size:12px}._card_b0wj1_15{border:1px solid var(--pdf-border);background:var(--pdf-panel-bg);text-align:left;cursor:default;box-sizing:border-box;border-radius:8px;width:100%;font-family:inherit;font-size:12px;transition:box-shadow .15s,border-color .15s;position:relative;overflow:hidden}._cardSigned_b0wj1_32{background:#22c55e0a;border-color:#22c55e47}._cardClickable_b0wj1_37{cursor:pointer}._cardClickable_b0wj1_37:hover{box-shadow:0 2px 10px var(--pdf-shadow-page);border-color:var(--pdf-border-light)}._cardSigned_b0wj1_32._cardClickable_b0wj1_37:hover{border-color:#22c55e73}._cardBody_b0wj1_50{padding:10px 12px 10px 16px}._cardHeader_b0wj1_54{justify-content:space-between;align-items:center;gap:8px;margin-bottom:8px;display:flex}._fieldName_b0wj1_62{color:var(--pdf-text-primary);text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;font-size:12px;font-weight:600;overflow:hidden}._statusChip_b0wj1_73{text-transform:uppercase;letter-spacing:.5px;background:var(--pdf-surface-hover);color:var(--pdf-text-muted);border:1px solid var(--pdf-border);border-radius:20px;flex-shrink:0;align-items:center;gap:4px;padding:2px 7px;font-size:10px;font-weight:700;display:inline-flex}._statusChipSigned_b0wj1_89{color:#15803d;background:#22c55e1f;border-color:#22c55e4d}._fieldList_b0wj1_95{flex-direction:column;gap:4px;display:flex}._fieldRow_b0wj1_101{grid-template-columns:72px 1fr;gap:4px;font-size:11px;line-height:1.5;display:grid}._fieldLabel_b0wj1_109{color:var(--pdf-text-muted);font-weight:500}._fieldValue_b0wj1_114{color:var(--pdf-text-secondary);word-break:break-word}._iconWrapper_b0wj1_119{justify-content:center;align-items:center;display:flex;position:relative}._badge_b0wj1_126{background-color:var(--pdf-badge-bg);color:#fff;text-align:center;pointer-events:none;box-sizing:border-box;border-radius:7px;min-width:14px;height:14px;padding:0 3px;font-size:9px;font-weight:700;line-height:14px;position:absolute;top:-5px;right:-7px}._thumbnailList_t3mg8_1{background-color:var(--pdf-panel-bg);padding-bottom:8px}._thumbnailItem_t3mg8_6{cursor:pointer;text-align:center;background-color:#0000;border-left:2px solid #0000;padding:12px 16px;transition:background-color .15s}._thumbnailItem_t3mg8_6:hover{background-color:var(--pdf-surface-hover)}._thumbnailItemActive_t3mg8_19{background-color:var(--pdf-accent-subtle);border-left-color:var(--pdf-accent)}._thumbnailItemActive_t3mg8_19:hover{background-color:var(--pdf-accent-subtle)}._thumbnailImg_t3mg8_28{width:120px;box-shadow:0 1px 4px var(--pdf-shadow-page);border-radius:2px}._thumbnailImgActive_t3mg8_34{box-shadow:0 0 0 2px var(--pdf-accent), 0 2px 8px var(--pdf-shadow-page)}._thumbnailSkeleton_t3mg8_40{background:linear-gradient(90deg, var(--pdf-surface) 25%, var(--pdf-surface-hover) 50%, var(--pdf-surface) 75%);background-size:200% 100%;border-radius:2px;width:120px;height:160px;animation:1.4s infinite _shimmer_t3mg8_1}@keyframes _shimmer_t3mg8_1{0%{background-position:200% 0}to{background-position:-200% 0}}._thumbnailLabel_t3mg8_63{color:var(--pdf-text-muted);margin-top:6px;font-size:11px;font-weight:400}._thumbnailLabelActive_t3mg8_70{color:var(--pdf-accent-hover);font-weight:600}._zoomLabel_m8iv9_1{text-align:center;min-width:42px;color:var(--pdf-text-muted);font-variant-numeric:tabular-nums;font-size:12px}._toolbar_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)}._separator_uif34_1{background:var(--pdf-toolbar-separator);flex-shrink:0;width:1px;height:20px;margin:0 4px}
2
2
  /*$vite$:1*/
package/dist/es/theme.js CHANGED
@@ -20,7 +20,8 @@ var e = {
20
20
  panelBorder: "#27272a",
21
21
  panelHeaderBg: "#18181b",
22
22
  shadowPage: "rgba(0, 0, 0, 0.4)",
23
- badgeBg: "#3b82f6"
23
+ badgeBg: "#3b82f6",
24
+ toolbarSeparator: "#3f3f46"
24
25
  }, t = {
25
26
  fontFamily: "-apple-system, BlinkMacSystemFont, \"Segoe UI\", Helvetica, Arial, sans-serif",
26
27
  bg: "#f4f4f5",
@@ -42,7 +43,8 @@ var e = {
42
43
  panelBorder: "#e4e4e7",
43
44
  panelHeaderBg: "#fafafa",
44
45
  shadowPage: "rgba(0, 0, 0, 0.12)",
45
- badgeBg: "#3b82f6"
46
+ badgeBg: "#3b82f6",
47
+ toolbarSeparator: "#e4e4e7"
46
48
  };
47
49
  function n(e) {
48
50
  return {
@@ -66,7 +68,8 @@ function n(e) {
66
68
  "--pdf-panel-border": e.panelBorder,
67
69
  "--pdf-panel-header-bg": e.panelHeaderBg,
68
70
  "--pdf-shadow-page": e.shadowPage,
69
- "--pdf-badge-bg": e.badgeBg
71
+ "--pdf-badge-bg": e.badgeBg,
72
+ "--pdf-toolbar-separator": e.toolbarSeparator
70
73
  };
71
74
  }
72
75
  //#endregion
@@ -9,6 +9,17 @@ export interface LinkOverlay {
9
9
  dest?: string | unknown[];
10
10
  newWindow?: boolean;
11
11
  }
12
+ export interface NoteOverlay {
13
+ page: number;
14
+ x: number;
15
+ y: number;
16
+ width: number;
17
+ height: number;
18
+ contents: string;
19
+ title?: string;
20
+ subtype: string;
21
+ pdfRect: [number, number, number, number];
22
+ }
12
23
  interface UseAnnotationLayerOptions {
13
24
  pdf: pdfjsLib.PDFDocumentProxy | null;
14
25
  zoom: number;
@@ -16,5 +27,8 @@ interface UseAnnotationLayerOptions {
16
27
  mountedPages: number[];
17
28
  goToPage: (page: number) => void;
18
29
  }
19
- export declare function useAnnotationLayer({ pdf, zoom, rotation, mountedPages, goToPage, }: UseAnnotationLayerOptions): LinkOverlay[];
30
+ export declare function useAnnotationLayer({ pdf, zoom, rotation, mountedPages, goToPage, }: UseAnnotationLayerOptions): {
31
+ linkOverlays: LinkOverlay[];
32
+ noteOverlays: NoteOverlay[];
33
+ };
20
34
  export {};
@@ -0,0 +1,2 @@
1
+ import { Labels } from '../labels';
2
+ export declare function useLabels(): Labels;
@@ -1,4 +1,5 @@
1
1
  export declare function usePDFLoader(file: File): {
2
2
  pdf: import('pdfjs-dist/types/src/display/api').PDFDocumentProxy | null;
3
3
  numPages: number;
4
+ loading: boolean;
4
5
  };
package/dist/index.d.ts CHANGED
@@ -1,6 +1,8 @@
1
1
  export { default as PDFViewer } from './components/PDFViewer';
2
2
  export type { Theme } from './theme';
3
3
  export { darkTheme, lightTheme } from './theme';
4
+ export type { Labels } from './labels';
5
+ export { italianLabels, englishLabels } from './labels';
4
6
  export { PDFSidebar } from './components/PDFSidebar';
5
7
  export { PDFAttachments, PDFAttachmentsIcon, } from './components/features/PDFAttachments';
6
8
  export { PDFAnnotations, PDFAnnotationsIcon, } from './components/features/PDFAnnotations';
@@ -19,3 +21,4 @@ export { PDFPrintButton } from './components/features/PDFPrintButton';
19
21
  export { PDFSidebarToggle } from './components/features/PDFSidebarToggle';
20
22
  export { PDFToolbar } from './components/ui/PDFToolbar';
21
23
  export { PDFToolbarItem } from './components/ui/PDFToolbarItem';
24
+ export { PDFToolbarSeparator } from './components/ui/PDFToolbarSeparator';
@@ -0,0 +1,51 @@
1
+ export interface Labels {
2
+ searchPlaceholder: string;
3
+ searchToolbarLabel: string;
4
+ prevPageTitle: string;
5
+ pageInputTitle: string;
6
+ nextPageTitle: string;
7
+ navigationToolbarLabel: string;
8
+ downloadTitle: string;
9
+ downloadText: string;
10
+ downloadToolbarLabel: string;
11
+ downloadFallbackFilename: string;
12
+ printTitle: string;
13
+ printToolbarLabel: string;
14
+ rotateTitle: string;
15
+ rotateToolbarLabel: string;
16
+ zoomOutTitle: string;
17
+ zoomInTitle: string;
18
+ zoomToolbarLabel: string;
19
+ changeFileTitle: string;
20
+ changeFileToolbarLabel: string;
21
+ fitWidthTitle: string;
22
+ fitPageTitle: string;
23
+ fitToolbarLabel: string;
24
+ switchToLightTitle: string;
25
+ switchToDarkTitle: string;
26
+ themeToolbarLabel: string;
27
+ expandSidebarTitle: string;
28
+ collapseSidebarTitle: string;
29
+ sidebarToolbarLabel: string;
30
+ attachmentsLoading: string;
31
+ attachmentsEmpty: string;
32
+ downloadAttachmentTitle: string;
33
+ outlineLoading: string;
34
+ outlineEmpty: string;
35
+ thumbnailAlt: string;
36
+ annotationTypes: Record<string, string>;
37
+ annotationsLoading: string;
38
+ annotationsEmpty: string;
39
+ annotationsPageHeader: string;
40
+ signatureSigned: string;
41
+ signatureUnsigned: string;
42
+ signatureSignerLabel: string;
43
+ signatureDateLabel: string;
44
+ signatureReasonLabel: string;
45
+ signatureLocationLabel: string;
46
+ signaturesLoading: string;
47
+ signaturesEmpty: string;
48
+ toolbarMoreOptions: string;
49
+ }
50
+ export declare const italianLabels: Labels;
51
+ export declare const englishLabels: Labels;
package/dist/theme.d.ts CHANGED
@@ -20,6 +20,7 @@ export interface Theme {
20
20
  panelHeaderBg: string;
21
21
  shadowPage: string;
22
22
  badgeBg: string;
23
+ toolbarSeparator: string;
23
24
  }
24
25
  export declare const darkTheme: Theme;
25
26
  export declare const lightTheme: Theme;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pdf-tsx",
3
- "version": "0.10.0",
3
+ "version": "0.12.0",
4
4
  "description": "A fully-featured, composable PDF viewer component for React",
5
5
  "type": "module",
6
6
  "main": "./dist/cjs/index.cjs",
@@ -32,6 +32,7 @@
32
32
  "dev": "vite",
33
33
  "watch": "tsc -b --watch",
34
34
  "build": "vite build",
35
+ "tsc": "tsc --noEmit",
35
36
  "lint": "eslint .",
36
37
  "format": "prettier --write \"src/**/*.{ts,tsx,css}\"",
37
38
  "preview": "vite preview"