@printwithsynergy/lens-pdf 0.3.0-beta.81

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 (213) hide show
  1. package/LICENSE +661 -0
  2. package/README.md +344 -0
  3. package/dist/browser/codexOverlay.d.ts +109 -0
  4. package/dist/browser/codexOverlay.d.ts.map +1 -0
  5. package/dist/browser/codexOverlay.js +256 -0
  6. package/dist/browser/codexOverlay.js.map +1 -0
  7. package/dist/browser/constants.d.ts +13 -0
  8. package/dist/browser/constants.d.ts.map +1 -0
  9. package/dist/browser/constants.js +13 -0
  10. package/dist/browser/constants.js.map +1 -0
  11. package/dist/browser/index.d.ts +211 -0
  12. package/dist/browser/index.d.ts.map +1 -0
  13. package/dist/browser/index.js +1190 -0
  14. package/dist/browser/index.js.map +1 -0
  15. package/dist/browser/pantone-gold.d.ts +59 -0
  16. package/dist/browser/pantone-gold.d.ts.map +1 -0
  17. package/dist/browser/pantone-gold.js +237 -0
  18. package/dist/browser/pantone-gold.js.map +1 -0
  19. package/dist/components/AnnotationCanvas.d.ts +27 -0
  20. package/dist/components/AnnotationCanvas.d.ts.map +1 -0
  21. package/dist/components/AnnotationCanvas.js +401 -0
  22. package/dist/components/AnnotationCanvas.js.map +1 -0
  23. package/dist/components/AnnotationNotesPanel.d.ts +15 -0
  24. package/dist/components/AnnotationNotesPanel.d.ts.map +1 -0
  25. package/dist/components/AnnotationNotesPanel.js +235 -0
  26. package/dist/components/AnnotationNotesPanel.js.map +1 -0
  27. package/dist/components/AnnotationThread.d.ts +18 -0
  28. package/dist/components/AnnotationThread.d.ts.map +1 -0
  29. package/dist/components/AnnotationThread.js +163 -0
  30. package/dist/components/AnnotationThread.js.map +1 -0
  31. package/dist/components/AnnotationToolbar.d.ts +39 -0
  32. package/dist/components/AnnotationToolbar.d.ts.map +1 -0
  33. package/dist/components/AnnotationToolbar.js +258 -0
  34. package/dist/components/AnnotationToolbar.js.map +1 -0
  35. package/dist/components/BoxOverlay.d.ts +20 -0
  36. package/dist/components/BoxOverlay.d.ts.map +1 -0
  37. package/dist/components/BoxOverlay.js +107 -0
  38. package/dist/components/BoxOverlay.js.map +1 -0
  39. package/dist/components/ColorPickerTool.d.ts +11 -0
  40. package/dist/components/ColorPickerTool.d.ts.map +1 -0
  41. package/dist/components/ColorPickerTool.js +220 -0
  42. package/dist/components/ColorPickerTool.js.map +1 -0
  43. package/dist/components/DensitometerTool.d.ts +25 -0
  44. package/dist/components/DensitometerTool.d.ts.map +1 -0
  45. package/dist/components/DensitometerTool.js +246 -0
  46. package/dist/components/DensitometerTool.js.map +1 -0
  47. package/dist/components/DielineInfoPanel.d.ts +27 -0
  48. package/dist/components/DielineInfoPanel.d.ts.map +1 -0
  49. package/dist/components/DielineInfoPanel.js +23 -0
  50. package/dist/components/DielineInfoPanel.js.map +1 -0
  51. package/dist/components/DielineOverlay.d.ts +10 -0
  52. package/dist/components/DielineOverlay.d.ts.map +1 -0
  53. package/dist/components/DielineOverlay.js +57 -0
  54. package/dist/components/DielineOverlay.js.map +1 -0
  55. package/dist/components/FindingsSidebar.d.ts +50 -0
  56. package/dist/components/FindingsSidebar.d.ts.map +1 -0
  57. package/dist/components/FindingsSidebar.js +78 -0
  58. package/dist/components/FindingsSidebar.js.map +1 -0
  59. package/dist/components/LayerCanvas.d.ts +30 -0
  60. package/dist/components/LayerCanvas.d.ts.map +1 -0
  61. package/dist/components/LayerCanvas.js +84 -0
  62. package/dist/components/LayerCanvas.js.map +1 -0
  63. package/dist/components/LayerPanel.d.ts +9 -0
  64. package/dist/components/LayerPanel.d.ts.map +1 -0
  65. package/dist/components/LayerPanel.js +144 -0
  66. package/dist/components/LayerPanel.js.map +1 -0
  67. package/dist/components/LensPDF.d.ts +61 -0
  68. package/dist/components/LensPDF.d.ts.map +1 -0
  69. package/dist/components/LensPDF.js +49 -0
  70. package/dist/components/LensPDF.js.map +1 -0
  71. package/dist/components/LensPDFDemo.d.ts +160 -0
  72. package/dist/components/LensPDFDemo.d.ts.map +1 -0
  73. package/dist/components/LensPDFDemo.js +1060 -0
  74. package/dist/components/LensPDFDemo.js.map +1 -0
  75. package/dist/components/LensPDFDemo.styles.d.ts +38 -0
  76. package/dist/components/LensPDFDemo.styles.d.ts.map +1 -0
  77. package/dist/components/LensPDFDemo.styles.js +282 -0
  78. package/dist/components/LensPDFDemo.styles.js.map +1 -0
  79. package/dist/components/LensPDFViewer.d.ts +79 -0
  80. package/dist/components/LensPDFViewer.d.ts.map +1 -0
  81. package/dist/components/LensPDFViewer.js +254 -0
  82. package/dist/components/LensPDFViewer.js.map +1 -0
  83. package/dist/components/MeasureTool.d.ts +16 -0
  84. package/dist/components/MeasureTool.d.ts.map +1 -0
  85. package/dist/components/MeasureTool.js +137 -0
  86. package/dist/components/MeasureTool.js.map +1 -0
  87. package/dist/components/MobileBottomSheet.d.ts +12 -0
  88. package/dist/components/MobileBottomSheet.d.ts.map +1 -0
  89. package/dist/components/MobileBottomSheet.js +113 -0
  90. package/dist/components/MobileBottomSheet.js.map +1 -0
  91. package/dist/components/MobileDrawer.d.ts +31 -0
  92. package/dist/components/MobileDrawer.d.ts.map +1 -0
  93. package/dist/components/MobileDrawer.js +67 -0
  94. package/dist/components/MobileDrawer.js.map +1 -0
  95. package/dist/components/PageCanvas.d.ts +33 -0
  96. package/dist/components/PageCanvas.d.ts.map +1 -0
  97. package/dist/components/PageCanvas.js +385 -0
  98. package/dist/components/PageCanvas.js.map +1 -0
  99. package/dist/components/PageNavigator.d.ts +18 -0
  100. package/dist/components/PageNavigator.d.ts.map +1 -0
  101. package/dist/components/PageNavigator.js +44 -0
  102. package/dist/components/PageNavigator.js.map +1 -0
  103. package/dist/components/SeparationCanvas.d.ts +12 -0
  104. package/dist/components/SeparationCanvas.d.ts.map +1 -0
  105. package/dist/components/SeparationCanvas.js +174 -0
  106. package/dist/components/SeparationCanvas.js.map +1 -0
  107. package/dist/components/TACHeatmapOverlay.d.ts +17 -0
  108. package/dist/components/TACHeatmapOverlay.d.ts.map +1 -0
  109. package/dist/components/TACHeatmapOverlay.js +119 -0
  110. package/dist/components/TACHeatmapOverlay.js.map +1 -0
  111. package/dist/components/ZoomControls.d.ts +11 -0
  112. package/dist/components/ZoomControls.d.ts.map +1 -0
  113. package/dist/components/ZoomControls.js +26 -0
  114. package/dist/components/ZoomControls.js.map +1 -0
  115. package/dist/components/defaultShellPlugins.d.ts +3 -0
  116. package/dist/components/defaultShellPlugins.d.ts.map +1 -0
  117. package/dist/components/defaultShellPlugins.js +273 -0
  118. package/dist/components/defaultShellPlugins.js.map +1 -0
  119. package/dist/components/index.d.ts +32 -0
  120. package/dist/components/index.d.ts.map +1 -0
  121. package/dist/components/index.js +32 -0
  122. package/dist/components/index.js.map +1 -0
  123. package/dist/components/presets.d.ts +8 -0
  124. package/dist/components/presets.d.ts.map +1 -0
  125. package/dist/components/presets.js +14 -0
  126. package/dist/components/presets.js.map +1 -0
  127. package/dist/components/shellPlugins.d.ts +105 -0
  128. package/dist/components/shellPlugins.d.ts.map +1 -0
  129. package/dist/components/shellPlugins.js +52 -0
  130. package/dist/components/shellPlugins.js.map +1 -0
  131. package/dist/components/useIsMobile.d.ts +16 -0
  132. package/dist/components/useIsMobile.d.ts.map +1 -0
  133. package/dist/components/useIsMobile.js +30 -0
  134. package/dist/components/useIsMobile.js.map +1 -0
  135. package/dist/fallback-pdfjs/index.d.ts +60 -0
  136. package/dist/fallback-pdfjs/index.d.ts.map +1 -0
  137. package/dist/fallback-pdfjs/index.js +163 -0
  138. package/dist/fallback-pdfjs/index.js.map +1 -0
  139. package/dist/host/LensPDFProvider.d.ts +36 -0
  140. package/dist/host/LensPDFProvider.d.ts.map +1 -0
  141. package/dist/host/LensPDFProvider.js +12 -0
  142. package/dist/host/LensPDFProvider.js.map +1 -0
  143. package/dist/host/index.d.ts +167 -0
  144. package/dist/host/index.d.ts.map +1 -0
  145. package/dist/host/index.js +173 -0
  146. package/dist/host/index.js.map +1 -0
  147. package/dist/host/pdfFallback.d.ts +50 -0
  148. package/dist/host/pdfFallback.d.ts.map +1 -0
  149. package/dist/host/pdfFallback.js +171 -0
  150. package/dist/host/pdfFallback.js.map +1 -0
  151. package/dist/host/pdfValidation.d.ts +45 -0
  152. package/dist/host/pdfValidation.d.ts.map +1 -0
  153. package/dist/host/pdfValidation.js +78 -0
  154. package/dist/host/pdfValidation.js.map +1 -0
  155. package/dist/host/shareLink.d.ts +80 -0
  156. package/dist/host/shareLink.d.ts.map +1 -0
  157. package/dist/host/shareLink.js +114 -0
  158. package/dist/host/shareLink.js.map +1 -0
  159. package/dist/host/useLensPDF.d.ts +73 -0
  160. package/dist/host/useLensPDF.d.ts.map +1 -0
  161. package/dist/host/useLensPDF.js +213 -0
  162. package/dist/host/useLensPDF.js.map +1 -0
  163. package/dist/index.d.ts +68 -0
  164. package/dist/index.d.ts.map +1 -0
  165. package/dist/index.js +62 -0
  166. package/dist/index.js.map +1 -0
  167. package/dist/plugin/context.d.ts +70 -0
  168. package/dist/plugin/context.d.ts.map +1 -0
  169. package/dist/plugin/context.js +16 -0
  170. package/dist/plugin/context.js.map +1 -0
  171. package/dist/plugin/findings-location.d.ts +53 -0
  172. package/dist/plugin/findings-location.d.ts.map +1 -0
  173. package/dist/plugin/findings-location.js +72 -0
  174. package/dist/plugin/findings-location.js.map +1 -0
  175. package/dist/plugin/index.d.ts +19 -0
  176. package/dist/plugin/index.d.ts.map +1 -0
  177. package/dist/plugin/index.js +16 -0
  178. package/dist/plugin/index.js.map +1 -0
  179. package/dist/plugin/registry.d.ts +61 -0
  180. package/dist/plugin/registry.d.ts.map +1 -0
  181. package/dist/plugin/registry.js +102 -0
  182. package/dist/plugin/registry.js.map +1 -0
  183. package/dist/plugin/services.d.ts +380 -0
  184. package/dist/plugin/services.d.ts.map +1 -0
  185. package/dist/plugin/services.js +104 -0
  186. package/dist/plugin/services.js.map +1 -0
  187. package/dist/plugin/types.d.ts +198 -0
  188. package/dist/plugin/types.d.ts.map +1 -0
  189. package/dist/plugin/types.js +24 -0
  190. package/dist/plugin/types.js.map +1 -0
  191. package/dist/types/index.d.ts +191 -0
  192. package/dist/types/index.d.ts.map +1 -0
  193. package/dist/types/index.js +95 -0
  194. package/dist/types/index.js.map +1 -0
  195. package/dist/units/index.d.ts +64 -0
  196. package/dist/units/index.d.ts.map +1 -0
  197. package/dist/units/index.js +98 -0
  198. package/dist/units/index.js.map +1 -0
  199. package/docs/architecture.md +90 -0
  200. package/docs/components.md +569 -0
  201. package/docs/contributing.md +78 -0
  202. package/docs/fallback.md +174 -0
  203. package/docs/lens-pdf-viewer.md +128 -0
  204. package/docs/licensing.md +78 -0
  205. package/docs/measurement-units.md +87 -0
  206. package/docs/plugins.md +256 -0
  207. package/docs/security.md +69 -0
  208. package/docs/server.md +212 -0
  209. package/docs/services.md +210 -0
  210. package/docs/share-links.md +111 -0
  211. package/docs/theming.md +164 -0
  212. package/docs/validation.md +83 -0
  213. package/package.json +139 -0
@@ -0,0 +1,235 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
+ import { useEffect, useMemo, useState } from "react";
4
+ import { isUnwired, logUnwiredHide, useViewerHost, useViewerServices } from "../host/index.js";
5
+ const cardStyle = {
6
+ display: "flex",
7
+ flexDirection: "column",
8
+ gap: 8,
9
+ padding: 10,
10
+ border: "1px solid rgba(255,255,255,0.08)",
11
+ borderRadius: 8,
12
+ background: "rgba(255,255,255,0.02)",
13
+ color: "#e2e8f0",
14
+ };
15
+ const labelStyle = {
16
+ fontSize: 11,
17
+ letterSpacing: "0.08em",
18
+ textTransform: "uppercase",
19
+ color: "rgba(148,163,184,0.95)",
20
+ fontWeight: 600,
21
+ };
22
+ const textareaStyle = {
23
+ width: "100%",
24
+ minHeight: 72,
25
+ resize: "vertical",
26
+ background: "rgba(15, 23, 42, 0.45)",
27
+ color: "#f8fafc",
28
+ border: "1px solid rgba(255,255,255,0.14)",
29
+ borderRadius: 6,
30
+ padding: "8px 10px",
31
+ fontSize: 12,
32
+ lineHeight: 1.45,
33
+ boxSizing: "border-box",
34
+ };
35
+ const selectStyle = {
36
+ ...textareaStyle,
37
+ minHeight: 36,
38
+ resize: "none",
39
+ };
40
+ export function AnnotationNotesPanel({ refreshKey, storageScopeKey, onJumpToPage, indexedAnnotations = [], selectedAnnotationId: selectedAnnotationIdProp, onSelectedAnnotationIdChange, }) {
41
+ const { debug } = useViewerHost();
42
+ const { annotations: annotationService } = useViewerServices();
43
+ const hidden = isUnwired(annotationService);
44
+ const [entries, setEntries] = useState([]);
45
+ const [generalNotes, setGeneralNotes] = useState("");
46
+ const [selectedAnnotationId, setSelectedAnnotationId] = useState("");
47
+ const [notesByAnnotationId, setNotesByAnnotationId] = useState({});
48
+ const storageKey = useMemo(() => `lens-pdf:annotation-notes:${storageScopeKey ?? "default-document"}`, [storageScopeKey]);
49
+ useEffect(() => {
50
+ if (hidden) {
51
+ if (debug)
52
+ logUnwiredHide("AnnotationNotesPanel", "annotations");
53
+ return;
54
+ }
55
+ let cancelled = false;
56
+ (async () => {
57
+ const list = await annotationService.list();
58
+ if (cancelled)
59
+ return;
60
+ const sorted = [...list].sort((a, b) => {
61
+ if (a.pageNum !== b.pageNum)
62
+ return a.pageNum - b.pageNum;
63
+ return a.updatedAt.localeCompare(b.updatedAt);
64
+ });
65
+ setEntries(sorted);
66
+ setSelectedAnnotationId((prev) => prev && sorted.some((entry) => entry.id === prev)
67
+ ? prev
68
+ : (sorted[0]?.id ?? ""));
69
+ })();
70
+ return () => {
71
+ cancelled = true;
72
+ };
73
+ }, [annotationService, hidden, debug, refreshKey]);
74
+ useEffect(() => {
75
+ if (typeof window === "undefined")
76
+ return;
77
+ try {
78
+ const raw = window.localStorage.getItem(storageKey);
79
+ if (!raw)
80
+ return;
81
+ const parsed = JSON.parse(raw);
82
+ setGeneralNotes(parsed.generalNotes ?? "");
83
+ const migrated = {};
84
+ for (const [key, value] of Object.entries(parsed.notesByAnnotationId ?? {})) {
85
+ if (typeof value === "string") {
86
+ migrated[key] =
87
+ value.trim().length > 0
88
+ ? [{ id: `${key}:legacy`, text: value, createdAt: new Date().toISOString() }]
89
+ : [];
90
+ continue;
91
+ }
92
+ if (Array.isArray(value)) {
93
+ migrated[key] = value
94
+ .filter((v) => {
95
+ return (typeof v === "object" &&
96
+ v !== null &&
97
+ typeof v.id === "string" &&
98
+ typeof v.text === "string" &&
99
+ typeof v.createdAt === "string");
100
+ })
101
+ .map((v) => ({ id: v.id, text: v.text, createdAt: v.createdAt }));
102
+ }
103
+ }
104
+ setNotesByAnnotationId(migrated);
105
+ }
106
+ catch {
107
+ // Ignore malformed persisted note payloads.
108
+ }
109
+ }, [storageKey]);
110
+ useEffect(() => {
111
+ if (typeof window === "undefined")
112
+ return;
113
+ const payload = JSON.stringify({
114
+ generalNotes,
115
+ notesByAnnotationId,
116
+ });
117
+ window.localStorage.setItem(storageKey, payload);
118
+ }, [storageKey, generalNotes, notesByAnnotationId]);
119
+ if (hidden)
120
+ return null;
121
+ const selectedNotes = selectedAnnotationId
122
+ ? notesByAnnotationId[selectedAnnotationId] ?? []
123
+ : [];
124
+ const targets = indexedAnnotations.length > 0
125
+ ? indexedAnnotations.map((row) => ({
126
+ id: `obj-${row.number}`,
127
+ pageNum: row.pageNum,
128
+ label: `#${row.number} · ${row.objectType}`,
129
+ }))
130
+ : entries.map((entry, idx) => ({
131
+ id: `entry-${entry.id}`,
132
+ pageNum: entry.pageNum,
133
+ label: `#${idx + 1} · Page ${entry.pageNum}`,
134
+ }));
135
+ const selectedTarget = targets.find((target) => target.id === selectedAnnotationId) ?? null;
136
+ useEffect(() => {
137
+ if (!selectedAnnotationIdProp)
138
+ return;
139
+ if (!targets.some((t) => t.id === selectedAnnotationIdProp))
140
+ return;
141
+ if (selectedAnnotationId !== selectedAnnotationIdProp) {
142
+ setSelectedAnnotationId(selectedAnnotationIdProp);
143
+ }
144
+ }, [selectedAnnotationIdProp, targets, selectedAnnotationId]);
145
+ useEffect(() => {
146
+ if (targets.length === 0) {
147
+ if (selectedAnnotationId)
148
+ setSelectedAnnotationId("");
149
+ return;
150
+ }
151
+ if (!selectedAnnotationId || !targets.some((t) => t.id === selectedAnnotationId)) {
152
+ setSelectedAnnotationId(targets[0].id);
153
+ }
154
+ }, [targets, selectedAnnotationId]);
155
+ useEffect(() => {
156
+ if (!selectedAnnotationId)
157
+ return;
158
+ onSelectedAnnotationIdChange?.(selectedAnnotationId);
159
+ }, [selectedAnnotationId, onSelectedAnnotationIdChange]);
160
+ return (_jsxs("div", { style: cardStyle, children: [_jsx("div", { style: labelStyle, children: "General notes" }), _jsx("textarea", { value: generalNotes, onChange: (e) => setGeneralNotes(e.target.value), placeholder: "Overall notes about this proof...", style: textareaStyle }), _jsx("div", { style: labelStyle, children: "Annotation-linked note" }), targets.length === 0 ? (_jsx("div", { style: {
161
+ fontSize: 12,
162
+ color: "rgba(226,232,240,0.62)",
163
+ fontStyle: "italic",
164
+ }, children: "Add at least one annotation on the page to link notes by number." })) : (_jsxs(_Fragment, { children: [_jsx("select", { value: selectedAnnotationId, onChange: (e) => {
165
+ const next = e.target.value;
166
+ setSelectedAnnotationId(next);
167
+ onSelectedAnnotationIdChange?.(next);
168
+ }, style: selectStyle, children: targets.map((target) => (_jsx("option", { value: target.id, children: target.label }, target.id))) }), selectedAnnotationId && selectedTarget && (_jsx("div", { style: { display: "flex", gap: 8 }, children: _jsx("button", { type: "button", style: {
169
+ border: "1px solid rgba(96,165,250,0.45)",
170
+ background: "transparent",
171
+ color: "#93c5fd",
172
+ borderRadius: 6,
173
+ fontSize: 11,
174
+ padding: "4px 8px",
175
+ cursor: "pointer",
176
+ }, onClick: () => {
177
+ onJumpToPage?.(selectedTarget.pageNum);
178
+ }, children: "Jump to annotation page" }) })), _jsx("button", { type: "button", style: {
179
+ border: "1px solid rgba(134,239,172,0.45)",
180
+ background: "transparent",
181
+ color: "#86efac",
182
+ borderRadius: 6,
183
+ fontSize: 11,
184
+ padding: "5px 10px",
185
+ cursor: "pointer",
186
+ alignSelf: "flex-start",
187
+ }, onClick: () => {
188
+ const key = selectedAnnotationId;
189
+ if (!key)
190
+ return;
191
+ const now = new Date().toISOString();
192
+ const id = `${key}:${Date.now()}:${Math.random().toString(36).slice(2, 8)}`;
193
+ setNotesByAnnotationId((prev) => ({
194
+ ...prev,
195
+ [key]: [...(prev[key] ?? []), { id, text: "", createdAt: now }],
196
+ }));
197
+ }, children: "+ Add linked note" }), selectedNotes.length === 0 ? (_jsx("div", { style: {
198
+ fontSize: 12,
199
+ color: "rgba(226,232,240,0.62)",
200
+ fontStyle: "italic",
201
+ }, children: "No linked notes yet for this annotation." })) : (selectedNotes.map((note, idx) => (_jsxs("div", { style: { ...cardStyle, gap: 6 }, children: [_jsxs("div", { style: {
202
+ display: "flex",
203
+ justifyContent: "space-between",
204
+ alignItems: "center",
205
+ fontSize: 11,
206
+ color: "rgba(148,163,184,0.95)",
207
+ fontWeight: 600,
208
+ }, children: [_jsxs("span", { children: ["Note ", idx + 1] }), _jsx("button", { type: "button", style: {
209
+ border: "1px solid rgba(251,113,133,0.45)",
210
+ background: "transparent",
211
+ color: "#fda4af",
212
+ borderRadius: 6,
213
+ fontSize: 10,
214
+ padding: "3px 8px",
215
+ cursor: "pointer",
216
+ }, onClick: () => {
217
+ const key = selectedAnnotationId;
218
+ if (!key)
219
+ return;
220
+ setNotesByAnnotationId((prev) => ({
221
+ ...prev,
222
+ [key]: (prev[key] ?? []).filter((n) => n.id !== note.id),
223
+ }));
224
+ }, children: "Remove" })] }), _jsx("textarea", { value: note.text, onChange: (e) => {
225
+ const val = e.target.value;
226
+ const key = selectedAnnotationId;
227
+ if (!key)
228
+ return;
229
+ setNotesByAnnotationId((prev) => ({
230
+ ...prev,
231
+ [key]: (prev[key] ?? []).map((n) => n.id === note.id ? { ...n, text: val } : n),
232
+ }));
233
+ }, placeholder: "Note linked to this annotation number...", style: textareaStyle })] }, note.id))))] }))] }));
234
+ }
235
+ //# sourceMappingURL=AnnotationNotesPanel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AnnotationNotesPanel.js","sourceRoot":"","sources":["../../components/AnnotationNotesPanel.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ interface AnnotationThreadProps {
2
+ jobId: string;
3
+ currentUserEmail?: string;
4
+ onJumpToPage?: (pageNum: number) => void;
5
+ /**
6
+ * Bumped by the host whenever a fresh annotation has been
7
+ * persisted by `<AnnotationCanvas>` so the thread re-reads
8
+ * `annotationService.list()`. With browser-only services this is
9
+ * the version tick from {@link useBrowserViewerServicesVersion};
10
+ * with a wired backend hosts can reuse any monotonic counter.
11
+ */
12
+ refreshKey?: number;
13
+ /** Larger type, padding, and 44px-class touch targets — use in mobile drawers. */
14
+ comfortable?: boolean;
15
+ }
16
+ export declare function AnnotationThread({ jobId: _jobId, currentUserEmail, onJumpToPage, refreshKey, comfortable, }: AnnotationThreadProps): import("react/jsx-runtime").JSX.Element | null;
17
+ export {};
18
+ //# sourceMappingURL=AnnotationThread.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AnnotationThread.d.ts","sourceRoot":"","sources":["../../components/AnnotationThread.tsx"],"names":[],"mappings":"AAYA,UAAU,qBAAqB;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,YAAY,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC;;;;;;OAMG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,kFAAkF;IAClF,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AA+FD,wBAAgB,gBAAgB,CAAC,EAC/B,KAAK,EAAE,MAAM,EACb,gBAAgB,EAChB,YAAY,EACZ,UAAU,EACV,WAAmB,GACpB,EAAE,qBAAqB,kDA8HvB"}
@@ -0,0 +1,163 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
+ import { useCallback, useEffect, useState } from "react";
4
+ import { isUnwired, logUnwiredHide, useViewerHost, useViewerServices, } from "../host/index.js";
5
+ const containerStyle = {
6
+ display: "flex",
7
+ flexDirection: "column",
8
+ gap: 8,
9
+ padding: 10,
10
+ border: "1px solid rgba(255,255,255,0.08)",
11
+ borderRadius: 8,
12
+ background: "rgba(255,255,255,0.02)",
13
+ fontSize: 12,
14
+ color: "#e2e8f0",
15
+ };
16
+ const emptyStyle = {
17
+ ...containerStyle,
18
+ alignItems: "flex-start",
19
+ fontSize: 12,
20
+ fontStyle: "italic",
21
+ color: "rgba(226,232,240,0.55)",
22
+ };
23
+ const loadingRowStyle = {
24
+ ...containerStyle,
25
+ alignItems: "center",
26
+ flexDirection: "row",
27
+ gap: 8,
28
+ fontStyle: "italic",
29
+ color: "rgba(226,232,240,0.55)",
30
+ };
31
+ const itemStyle = {
32
+ display: "flex",
33
+ alignItems: "flex-start",
34
+ justifyContent: "space-between",
35
+ gap: 8,
36
+ padding: 8,
37
+ borderRadius: 6,
38
+ border: "1px solid rgba(255,255,255,0.08)",
39
+ background: "rgba(255,255,255,0.04)",
40
+ };
41
+ const itemBodyStyle = {
42
+ flex: 1,
43
+ display: "flex",
44
+ flexDirection: "column",
45
+ gap: 2,
46
+ };
47
+ const authorStyle = {
48
+ fontWeight: 600,
49
+ color: "#f1f5f9",
50
+ };
51
+ const metaStyle = {
52
+ fontSize: 11,
53
+ color: "rgba(148,163,184,0.9)",
54
+ };
55
+ const jumpButtonStyle = {
56
+ marginTop: 4,
57
+ background: "transparent",
58
+ border: 0,
59
+ padding: 0,
60
+ color: "#60a5fa",
61
+ fontSize: 11,
62
+ cursor: "pointer",
63
+ textDecoration: "underline",
64
+ alignSelf: "flex-start",
65
+ };
66
+ const deleteButtonStyle = {
67
+ flex: "0 0 auto",
68
+ padding: "2px 6px",
69
+ fontSize: 11,
70
+ color: "#fca5a5",
71
+ background: "transparent",
72
+ border: "1px solid rgba(248,113,113,0.35)",
73
+ borderRadius: 4,
74
+ cursor: "pointer",
75
+ };
76
+ const spinnerStyle = {
77
+ width: 14,
78
+ height: 14,
79
+ borderRadius: "50%",
80
+ border: "2px solid rgba(255,255,255,0.18)",
81
+ borderTopColor: "rgba(255,255,255,0.65)",
82
+ animation: "lens-pdf-annotation-spin 0.85s linear infinite",
83
+ };
84
+ const SPINNER_KEYFRAMES = `@keyframes lens-pdf-annotation-spin {
85
+ to { transform: rotate(360deg); }
86
+ }`;
87
+ export function AnnotationThread({ jobId: _jobId, currentUserEmail, onJumpToPage, refreshKey, comfortable = false, }) {
88
+ const { readOnly, debug } = useViewerHost();
89
+ const { annotations: annotationService } = useViewerServices();
90
+ const hidden = isUnwired(annotationService);
91
+ const [annotations, setAnnotations] = useState([]);
92
+ const [loading, setLoading] = useState(true);
93
+ const load = useCallback(async () => {
94
+ try {
95
+ const data = await annotationService.list();
96
+ setAnnotations([...data]);
97
+ }
98
+ finally {
99
+ setLoading(false);
100
+ }
101
+ }, [annotationService]);
102
+ useEffect(() => {
103
+ if (hidden) {
104
+ if (debug)
105
+ logUnwiredHide("AnnotationThread", "annotations");
106
+ return;
107
+ }
108
+ load();
109
+ }, [load, hidden, debug, refreshKey]);
110
+ const handleDelete = useCallback(async (annotationId) => {
111
+ await annotationService.remove(annotationId);
112
+ setAnnotations((prev) => prev.filter((a) => a.id !== annotationId));
113
+ }, [annotationService]);
114
+ if (hidden)
115
+ return null;
116
+ const loadingSx = comfortable
117
+ ? { ...loadingRowStyle, padding: 16, fontSize: 14 }
118
+ : loadingRowStyle;
119
+ const emptySx = comfortable
120
+ ? {
121
+ ...emptyStyle,
122
+ padding: 16,
123
+ fontSize: 14,
124
+ lineHeight: 1.5,
125
+ }
126
+ : emptyStyle;
127
+ const listSx = comfortable
128
+ ? { ...containerStyle, padding: 14, gap: 12, fontSize: 13 }
129
+ : containerStyle;
130
+ const rowSx = comfortable
131
+ ? { ...itemStyle, padding: 14, alignItems: "center" }
132
+ : itemStyle;
133
+ const metaSx = comfortable
134
+ ? { ...metaStyle, fontSize: 12 }
135
+ : metaStyle;
136
+ const jumpSx = comfortable
137
+ ? {
138
+ ...jumpButtonStyle,
139
+ minHeight: 44,
140
+ padding: "10px 0",
141
+ fontSize: 13,
142
+ }
143
+ : jumpButtonStyle;
144
+ const delSx = comfortable
145
+ ? {
146
+ ...deleteButtonStyle,
147
+ minHeight: 44,
148
+ minWidth: 44,
149
+ padding: "10px 14px",
150
+ fontSize: 13,
151
+ }
152
+ : deleteButtonStyle;
153
+ if (loading) {
154
+ return (_jsxs(_Fragment, { children: [_jsx("style", { children: SPINNER_KEYFRAMES }), _jsxs("div", { style: loadingSx, children: [_jsx("span", { "aria-hidden": true, style: spinnerStyle }), _jsx("span", { children: "Loading annotations\u2026" })] })] }));
155
+ }
156
+ if (annotations.length === 0) {
157
+ return (_jsx("div", { style: emptySx, children: "No annotations yet. Toggle the annotation tool to start marking up the PDF." }));
158
+ }
159
+ return (_jsx("div", { style: listSx, children: annotations.map((a) => (_jsxs("div", { style: rowSx, children: [_jsxs("div", { style: itemBodyStyle, children: [_jsx("div", { style: authorStyle, children: a.authorName ?? a.authorEmail }), _jsxs("div", { style: metaSx, children: ["Page ", a.pageNum, " \u00B7 ", new Date(a.updatedAt).toLocaleString()] }), _jsx("button", { type: "button", onClick: () => onJumpToPage?.(a.pageNum), style: jumpSx, children: "Jump to page" })] }), !readOnly &&
160
+ currentUserEmail &&
161
+ a.authorEmail === currentUserEmail && (_jsx("button", { type: "button", onClick: () => handleDelete(a.id), style: delSx, title: "Delete annotation", children: "Delete" }))] }, a.id))) }));
162
+ }
163
+ //# sourceMappingURL=AnnotationThread.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AnnotationThread.js","sourceRoot":"","sources":["../../components/AnnotationThread.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Annotation tools the toolbar can put into "active" mode. Each
3
+ * value maps 1:1 to a render branch in {@link AnnotationCanvas}.
4
+ *
5
+ * Pen is listed first so the leftmost tool draws immediately; Select
6
+ * only affects annotations you've already placed (empty canvas =
7
+ * nothing to grab — not broken).
8
+ *
9
+ * @public
10
+ */
11
+ export type AnnotationTool = "pointer" | "pen" | "arrow" | "rectangle" | "ellipse" | "text" | "highlight";
12
+ interface AnnotationToolbarProps {
13
+ activeTool: AnnotationTool;
14
+ onToolChange: (tool: AnnotationTool) => void;
15
+ strokeColor: string;
16
+ onStrokeColorChange: (color: string) => void;
17
+ onUndo: () => void;
18
+ onRedo: () => void;
19
+ canUndo: boolean;
20
+ canRedo: boolean;
21
+ saving: boolean;
22
+ /**
23
+ * Mobile / touch layout: items wrap onto multiple rows and every
24
+ * control gets a finger-sized hit target. Defaults to false (desktop
25
+ * single-row layout with smaller buttons).
26
+ */
27
+ compact?: boolean;
28
+ }
29
+ /**
30
+ * Self-styled annotation toolbar — works in any host with no Tailwind
31
+ * config required. Shows a visible floating tooltip on hover / focus
32
+ * (not only the native `title` attribute) so touch and fast users
33
+ * still discover what each control does.
34
+ *
35
+ * @public
36
+ */
37
+ export declare function AnnotationToolbar({ activeTool, onToolChange, strokeColor, onStrokeColorChange, onUndo, onRedo, canUndo, canRedo, saving, compact, }: AnnotationToolbarProps): import("react/jsx-runtime").JSX.Element;
38
+ export {};
39
+ //# sourceMappingURL=AnnotationToolbar.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AnnotationToolbar.d.ts","sourceRoot":"","sources":["../../components/AnnotationToolbar.tsx"],"names":[],"mappings":"AAYA;;;;;;;;;GASG;AACH,MAAM,MAAM,cAAc,GACtB,SAAS,GACT,KAAK,GACL,OAAO,GACP,WAAW,GACX,SAAS,GACT,MAAM,GACN,WAAW,CAAC;AAEhB,UAAU,sBAAsB;IAC9B,UAAU,EAAE,cAAc,CAAC;IAC3B,YAAY,EAAE,CAAC,IAAI,EAAE,cAAc,KAAK,IAAI,CAAC;IAC7C,WAAW,EAAE,MAAM,CAAC;IACpB,mBAAmB,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7C,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,OAAO,CAAC;IAChB;;;;OAIG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AA6ND;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,EAChC,UAAU,EACV,YAAY,EACZ,WAAW,EACX,mBAAmB,EACnB,MAAM,EACN,MAAM,EACN,OAAO,EACP,OAAO,EACP,MAAM,EACN,OAAe,GAChB,EAAE,sBAAsB,2CA8MxB"}