@docmentis/udoc-viewer 0.1.0 → 0.1.1

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 (263) hide show
  1. package/dist/wasm/udoc_bg.wasm +0 -0
  2. package/dist/worker/WorkerClient.js +1 -1
  3. package/package.json +11 -3
  4. package/dist/WorkerClient.d.ts +0 -36
  5. package/dist/WorkerClient.d.ts.map +0 -1
  6. package/dist/WorkerClient.js +0 -121
  7. package/dist/WorkerClient.js.map +0 -1
  8. package/dist/annotation/AnnotationLayer.d.ts +0 -166
  9. package/dist/annotation/AnnotationLayer.d.ts.map +0 -1
  10. package/dist/annotation/AnnotationLayer.js +0 -1090
  11. package/dist/annotation/AnnotationLayer.js.map +0 -1
  12. package/dist/annotation/index.d.ts +0 -6
  13. package/dist/annotation/index.d.ts.map +0 -1
  14. package/dist/annotation/index.js +0 -6
  15. package/dist/annotation/index.js.map +0 -1
  16. package/dist/components/FloatingBar.d.ts +0 -102
  17. package/dist/components/FloatingBar.d.ts.map +0 -1
  18. package/dist/components/FloatingBar.js +0 -513
  19. package/dist/components/FloatingBar.js.map +0 -1
  20. package/dist/components/Header.d.ts +0 -46
  21. package/dist/components/Header.d.ts.map +0 -1
  22. package/dist/components/Header.js +0 -93
  23. package/dist/components/Header.js.map +0 -1
  24. package/dist/components/index.d.ts +0 -6
  25. package/dist/components/index.d.ts.map +0 -1
  26. package/dist/components/index.js +0 -4
  27. package/dist/components/index.js.map +0 -1
  28. package/dist/components/panels/CommentsPanel.d.ts +0 -33
  29. package/dist/components/panels/CommentsPanel.d.ts.map +0 -1
  30. package/dist/components/panels/CommentsPanel.js +0 -176
  31. package/dist/components/panels/CommentsPanel.js.map +0 -1
  32. package/dist/components/panels/OutlinePanel.d.ts +0 -30
  33. package/dist/components/panels/OutlinePanel.d.ts.map +0 -1
  34. package/dist/components/panels/OutlinePanel.js +0 -144
  35. package/dist/components/panels/OutlinePanel.js.map +0 -1
  36. package/dist/components/panels/ThumbnailsPanel.d.ts +0 -51
  37. package/dist/components/panels/ThumbnailsPanel.d.ts.map +0 -1
  38. package/dist/components/panels/ThumbnailsPanel.js +0 -160
  39. package/dist/components/panels/ThumbnailsPanel.js.map +0 -1
  40. package/dist/components/panels/index.d.ts +0 -7
  41. package/dist/components/panels/index.d.ts.map +0 -1
  42. package/dist/components/panels/index.js +0 -4
  43. package/dist/components/panels/index.js.map +0 -1
  44. package/dist/constants.d.ts +0 -25
  45. package/dist/constants.d.ts.map +0 -1
  46. package/dist/constants.js +0 -46
  47. package/dist/constants.js.map +0 -1
  48. package/dist/core/NavigationController.d.ts +0 -54
  49. package/dist/core/NavigationController.d.ts.map +0 -1
  50. package/dist/core/NavigationController.js +0 -145
  51. package/dist/core/NavigationController.js.map +0 -1
  52. package/dist/core/PerfTimer.d.ts +0 -12
  53. package/dist/core/PerfTimer.d.ts.map +0 -1
  54. package/dist/core/PerfTimer.js +0 -32
  55. package/dist/core/PerfTimer.js.map +0 -1
  56. package/dist/core/ViewerState.d.ts +0 -108
  57. package/dist/core/ViewerState.d.ts.map +0 -1
  58. package/dist/core/ViewerState.js +0 -179
  59. package/dist/core/ViewerState.js.map +0 -1
  60. package/dist/core/constants.d.ts +0 -24
  61. package/dist/core/constants.d.ts.map +0 -1
  62. package/dist/core/constants.js +0 -42
  63. package/dist/core/constants.js.map +0 -1
  64. package/dist/core/index.d.ts +0 -8
  65. package/dist/core/index.d.ts.map +0 -1
  66. package/dist/core/index.js +0 -11
  67. package/dist/core/index.js.map +0 -1
  68. package/dist/core/types.d.ts +0 -573
  69. package/dist/core/types.d.ts.map +0 -1
  70. package/dist/core/types.js +0 -5
  71. package/dist/core/types.js.map +0 -1
  72. package/dist/icons/icons.d.ts +0 -41
  73. package/dist/icons/icons.d.ts.map +0 -1
  74. package/dist/icons/icons.js +0 -51
  75. package/dist/icons/icons.js.map +0 -1
  76. package/dist/icons/index.d.ts +0 -3
  77. package/dist/icons/index.d.ts.map +0 -1
  78. package/dist/icons/index.js +0 -2
  79. package/dist/icons/index.js.map +0 -1
  80. package/dist/layout/BandManager.d.ts +0 -87
  81. package/dist/layout/BandManager.d.ts.map +0 -1
  82. package/dist/layout/BandManager.js +0 -185
  83. package/dist/layout/BandManager.js.map +0 -1
  84. package/dist/layout/LayoutCalculator.d.ts +0 -42
  85. package/dist/layout/LayoutCalculator.d.ts.map +0 -1
  86. package/dist/layout/LayoutCalculator.js +0 -180
  87. package/dist/layout/LayoutCalculator.js.map +0 -1
  88. package/dist/layout/LayoutState.d.ts +0 -46
  89. package/dist/layout/LayoutState.d.ts.map +0 -1
  90. package/dist/layout/LayoutState.js +0 -109
  91. package/dist/layout/LayoutState.js.map +0 -1
  92. package/dist/layout/TransitionCoordinator.d.ts +0 -11
  93. package/dist/layout/TransitionCoordinator.d.ts.map +0 -1
  94. package/dist/layout/TransitionCoordinator.js +0 -22
  95. package/dist/layout/TransitionCoordinator.js.map +0 -1
  96. package/dist/layout/index.d.ts +0 -7
  97. package/dist/layout/index.d.ts.map +0 -1
  98. package/dist/layout/index.js +0 -4
  99. package/dist/layout/index.js.map +0 -1
  100. package/dist/rendering/BandManager.d.ts +0 -87
  101. package/dist/rendering/BandManager.d.ts.map +0 -1
  102. package/dist/rendering/BandManager.js +0 -185
  103. package/dist/rendering/BandManager.js.map +0 -1
  104. package/dist/rendering/PageCache.d.ts +0 -75
  105. package/dist/rendering/PageCache.d.ts.map +0 -1
  106. package/dist/rendering/PageCache.js +0 -122
  107. package/dist/rendering/PageCache.js.map +0 -1
  108. package/dist/rendering/RenderQueue.d.ts +0 -75
  109. package/dist/rendering/RenderQueue.d.ts.map +0 -1
  110. package/dist/rendering/RenderQueue.js +0 -105
  111. package/dist/rendering/RenderQueue.js.map +0 -1
  112. package/dist/rendering/ThumbnailQueue.d.ts +0 -57
  113. package/dist/rendering/ThumbnailQueue.d.ts.map +0 -1
  114. package/dist/rendering/ThumbnailQueue.js +0 -85
  115. package/dist/rendering/ThumbnailQueue.js.map +0 -1
  116. package/dist/rendering/index.d.ts +0 -13
  117. package/dist/rendering/index.d.ts.map +0 -1
  118. package/dist/rendering/index.js +0 -10
  119. package/dist/rendering/index.js.map +0 -1
  120. package/dist/rendering/types.d.ts +0 -72
  121. package/dist/rendering/types.d.ts.map +0 -1
  122. package/dist/rendering/types.js +0 -5
  123. package/dist/rendering/types.js.map +0 -1
  124. package/dist/styles/index.d.ts +0 -6
  125. package/dist/styles/index.d.ts.map +0 -1
  126. package/dist/styles/index.js +0 -1221
  127. package/dist/styles/index.js.map +0 -1
  128. package/dist/types.d.ts +0 -6
  129. package/dist/types.d.ts.map +0 -1
  130. package/dist/types.js +0 -6
  131. package/dist/types.js.map +0 -1
  132. package/dist/ui/Component.d.ts +0 -127
  133. package/dist/ui/Component.d.ts.map +0 -1
  134. package/dist/ui/Component.js +0 -201
  135. package/dist/ui/Component.js.map +0 -1
  136. package/dist/ui/annotation/AnnotationLayer.d.ts +0 -90
  137. package/dist/ui/annotation/AnnotationLayer.d.ts.map +0 -1
  138. package/dist/ui/annotation/AnnotationLayer.js +0 -322
  139. package/dist/ui/annotation/AnnotationLayer.js.map +0 -1
  140. package/dist/ui/annotation/LinkRenderer.d.ts +0 -32
  141. package/dist/ui/annotation/LinkRenderer.d.ts.map +0 -1
  142. package/dist/ui/annotation/LinkRenderer.js +0 -74
  143. package/dist/ui/annotation/LinkRenderer.js.map +0 -1
  144. package/dist/ui/annotation/MarkupRenderer.d.ts +0 -40
  145. package/dist/ui/annotation/MarkupRenderer.d.ts.map +0 -1
  146. package/dist/ui/annotation/MarkupRenderer.js +0 -154
  147. package/dist/ui/annotation/MarkupRenderer.js.map +0 -1
  148. package/dist/ui/annotation/ShapeRenderer.d.ts +0 -46
  149. package/dist/ui/annotation/ShapeRenderer.d.ts.map +0 -1
  150. package/dist/ui/annotation/ShapeRenderer.js +0 -376
  151. package/dist/ui/annotation/ShapeRenderer.js.map +0 -1
  152. package/dist/ui/annotation/TextRenderer.d.ts +0 -36
  153. package/dist/ui/annotation/TextRenderer.d.ts.map +0 -1
  154. package/dist/ui/annotation/TextRenderer.js +0 -199
  155. package/dist/ui/annotation/TextRenderer.js.map +0 -1
  156. package/dist/ui/annotation/index.d.ts +0 -17
  157. package/dist/ui/annotation/index.d.ts.map +0 -1
  158. package/dist/ui/annotation/index.js +0 -13
  159. package/dist/ui/annotation/index.js.map +0 -1
  160. package/dist/ui/annotation/utils.d.ts +0 -40
  161. package/dist/ui/annotation/utils.d.ts.map +0 -1
  162. package/dist/ui/annotation/utils.js +0 -62
  163. package/dist/ui/annotation/utils.js.map +0 -1
  164. package/dist/ui/components/CommentsContent.d.ts +0 -35
  165. package/dist/ui/components/CommentsContent.d.ts.map +0 -1
  166. package/dist/ui/components/CommentsContent.js +0 -203
  167. package/dist/ui/components/CommentsContent.js.map +0 -1
  168. package/dist/ui/components/FloatingBar.d.ts +0 -55
  169. package/dist/ui/components/FloatingBar.d.ts.map +0 -1
  170. package/dist/ui/components/FloatingBar.js +0 -585
  171. package/dist/ui/components/FloatingBar.js.map +0 -1
  172. package/dist/ui/components/Header.d.ts +0 -29
  173. package/dist/ui/components/Header.d.ts.map +0 -1
  174. package/dist/ui/components/Header.js +0 -127
  175. package/dist/ui/components/Header.js.map +0 -1
  176. package/dist/ui/components/LeftPanel.d.ts +0 -54
  177. package/dist/ui/components/LeftPanel.d.ts.map +0 -1
  178. package/dist/ui/components/LeftPanel.js +0 -202
  179. package/dist/ui/components/LeftPanel.js.map +0 -1
  180. package/dist/ui/components/OutlineContent.d.ts +0 -34
  181. package/dist/ui/components/OutlineContent.d.ts.map +0 -1
  182. package/dist/ui/components/OutlineContent.js +0 -147
  183. package/dist/ui/components/OutlineContent.js.map +0 -1
  184. package/dist/ui/components/RightPanel.d.ts +0 -52
  185. package/dist/ui/components/RightPanel.d.ts.map +0 -1
  186. package/dist/ui/components/RightPanel.js +0 -142
  187. package/dist/ui/components/RightPanel.js.map +0 -1
  188. package/dist/ui/components/Viewport.d.ts +0 -70
  189. package/dist/ui/components/Viewport.d.ts.map +0 -1
  190. package/dist/ui/components/Viewport.js +0 -173
  191. package/dist/ui/components/Viewport.js.map +0 -1
  192. package/dist/ui/components/index.d.ts +0 -11
  193. package/dist/ui/components/index.d.ts.map +0 -1
  194. package/dist/ui/components/index.js +0 -10
  195. package/dist/ui/components/index.js.map +0 -1
  196. package/dist/ui/icons/icons.d.ts +0 -43
  197. package/dist/ui/icons/icons.d.ts.map +0 -1
  198. package/dist/ui/icons/icons.js +0 -46
  199. package/dist/ui/icons/icons.js.map +0 -1
  200. package/dist/ui/icons/index.d.ts +0 -11
  201. package/dist/ui/icons/index.d.ts.map +0 -1
  202. package/dist/ui/icons/index.js +0 -18
  203. package/dist/ui/icons/index.js.map +0 -1
  204. package/dist/ui/index.d.ts +0 -7
  205. package/dist/ui/index.d.ts.map +0 -1
  206. package/dist/ui/index.js +0 -9
  207. package/dist/ui/index.js.map +0 -1
  208. package/dist/ui/styles/base.css.d.ts +0 -5
  209. package/dist/ui/styles/base.css.d.ts.map +0 -1
  210. package/dist/ui/styles/base.css.js +0 -49
  211. package/dist/ui/styles/base.css.js.map +0 -1
  212. package/dist/ui/styles/floating-bar.css.d.ts +0 -5
  213. package/dist/ui/styles/floating-bar.css.d.ts.map +0 -1
  214. package/dist/ui/styles/floating-bar.css.js +0 -417
  215. package/dist/ui/styles/floating-bar.css.js.map +0 -1
  216. package/dist/ui/styles/header.css.d.ts +0 -5
  217. package/dist/ui/styles/header.css.d.ts.map +0 -1
  218. package/dist/ui/styles/header.css.js +0 -49
  219. package/dist/ui/styles/header.css.js.map +0 -1
  220. package/dist/ui/styles/index.d.ts +0 -21
  221. package/dist/ui/styles/index.d.ts.map +0 -1
  222. package/dist/ui/styles/index.js +0 -48
  223. package/dist/ui/styles/index.js.map +0 -1
  224. package/dist/ui/styles/panels.css.d.ts +0 -5
  225. package/dist/ui/styles/panels.css.d.ts.map +0 -1
  226. package/dist/ui/styles/panels.css.js +0 -446
  227. package/dist/ui/styles/panels.css.js.map +0 -1
  228. package/dist/ui/styles/responsive.css.d.ts +0 -5
  229. package/dist/ui/styles/responsive.css.d.ts.map +0 -1
  230. package/dist/ui/styles/responsive.css.js +0 -201
  231. package/dist/ui/styles/responsive.css.js.map +0 -1
  232. package/dist/ui/styles/variables.css.d.ts +0 -6
  233. package/dist/ui/styles/variables.css.d.ts.map +0 -1
  234. package/dist/ui/styles/variables.css.js +0 -75
  235. package/dist/ui/styles/variables.css.js.map +0 -1
  236. package/dist/ui/styles/viewport.css.d.ts +0 -5
  237. package/dist/ui/styles/viewport.css.d.ts.map +0 -1
  238. package/dist/ui/styles/viewport.css.js +0 -87
  239. package/dist/ui/styles/viewport.css.js.map +0 -1
  240. package/dist/view/LayoutCalculator.d.ts +0 -42
  241. package/dist/view/LayoutCalculator.d.ts.map +0 -1
  242. package/dist/view/LayoutCalculator.js +0 -180
  243. package/dist/view/LayoutCalculator.js.map +0 -1
  244. package/dist/view/TransitionCoordinator.d.ts +0 -11
  245. package/dist/view/TransitionCoordinator.d.ts.map +0 -1
  246. package/dist/view/TransitionCoordinator.js +0 -22
  247. package/dist/view/TransitionCoordinator.js.map +0 -1
  248. package/dist/view/ViewState.d.ts +0 -46
  249. package/dist/view/ViewState.d.ts.map +0 -1
  250. package/dist/view/ViewState.js +0 -109
  251. package/dist/view/ViewState.js.map +0 -1
  252. package/dist/view/index.d.ts +0 -7
  253. package/dist/view/index.d.ts.map +0 -1
  254. package/dist/view/index.js +0 -4
  255. package/dist/view/index.js.map +0 -1
  256. package/dist/worker/types.d.ts +0 -81
  257. package/dist/worker/types.d.ts.map +0 -1
  258. package/dist/worker/types.js +0 -6
  259. package/dist/worker/types.js.map +0 -1
  260. package/dist/worker.d.ts +0 -2
  261. package/dist/worker.d.ts.map +0 -1
  262. package/dist/worker.js +0 -205
  263. package/dist/worker.js.map +0 -1
@@ -1,322 +0,0 @@
1
- import { MarkupRenderer } from './MarkupRenderer';
2
- import { LinkRenderer } from './LinkRenderer';
3
- import { ShapeRenderer } from './ShapeRenderer';
4
- import { TextRenderer } from './TextRenderer';
5
- /**
6
- * Manages annotation rendering and interaction for a document viewer.
7
- */
8
- export class AnnotationLayer {
9
- /** Annotations indexed by page index */
10
- pageAnnotations = new Map();
11
- /** Overlay elements indexed by page index */
12
- overlays = new Map();
13
- /** Current zoom level */
14
- zoom = 1;
15
- /** Currently active popup element */
16
- activePopup = null;
17
- /** Bound handler for clicking outside popup */
18
- boundHandleDocumentClick = null;
19
- /** Bound handler for escape key */
20
- boundHandleEscapeKey = null;
21
- // Specialized renderers
22
- markupRenderer;
23
- linkRenderer;
24
- shapeRenderer;
25
- textRenderer;
26
- constructor() {
27
- // Initialize renderers with default zoom
28
- const showPopup = this.showPopup.bind(this);
29
- this.markupRenderer = new MarkupRenderer(this.zoom, showPopup);
30
- this.linkRenderer = new LinkRenderer(this.zoom);
31
- this.shapeRenderer = new ShapeRenderer(this.zoom);
32
- this.textRenderer = new TextRenderer(this.zoom, showPopup);
33
- }
34
- /**
35
- * Set the callback for internal link navigation.
36
- */
37
- setNavigateCallback(callback) {
38
- this.linkRenderer.setNavigateCallback(callback);
39
- }
40
- /**
41
- * Set the callback for external URI links.
42
- */
43
- setOpenUriCallback(callback) {
44
- this.linkRenderer.setOpenUriCallback(callback);
45
- }
46
- /**
47
- * Set annotations for a specific page.
48
- */
49
- setPageAnnotations(pageIndex, annotations) {
50
- this.pageAnnotations.set(pageIndex, annotations);
51
- }
52
- /**
53
- * Get annotations for a specific page.
54
- */
55
- getPageAnnotations(pageIndex) {
56
- return this.pageAnnotations.get(pageIndex) ?? [];
57
- }
58
- /**
59
- * Get all annotations with metadata, grouped by page.
60
- * Returns only annotations that have metadata (comments).
61
- */
62
- getAllAnnotationsWithMetadata() {
63
- const result = new Map();
64
- for (const [pageIndex, annotations] of this.pageAnnotations) {
65
- const withMetadata = annotations.filter(a => a.metadata);
66
- if (withMetadata.length > 0) {
67
- result.set(pageIndex, withMetadata);
68
- }
69
- }
70
- return result;
71
- }
72
- /**
73
- * Clear all annotations and overlays.
74
- */
75
- clear() {
76
- this.hidePopup();
77
- this.pageAnnotations.clear();
78
- for (const overlay of this.overlays.values()) {
79
- overlay.remove();
80
- }
81
- this.overlays.clear();
82
- }
83
- /**
84
- * Set the current zoom level.
85
- */
86
- setZoom(zoom) {
87
- this.zoom = zoom;
88
- this.markupRenderer.setZoom(zoom);
89
- this.linkRenderer.setZoom(zoom);
90
- this.shapeRenderer.setZoom(zoom);
91
- this.textRenderer.setZoom(zoom);
92
- }
93
- /**
94
- * Show a popup for an annotation.
95
- * @param anchorElement The element to anchor the popup to
96
- * @param metadata The annotation metadata to display
97
- * @param color The annotation color for styling
98
- */
99
- showPopup(anchorElement, metadata, color) {
100
- // Hide any existing popup first
101
- this.hidePopup();
102
- // Create popup container
103
- const popup = document.createElement('div');
104
- popup.className = 'udoc-annotation-popup';
105
- popup.style.cssText = `
106
- position: absolute;
107
- background: white;
108
- border: 1px solid ${color};
109
- border-radius: 4px;
110
- box-shadow: 0 2px 8px rgba(0,0,0,0.15);
111
- max-width: 300px;
112
- min-width: 150px;
113
- font-size: 13px;
114
- line-height: 1.4;
115
- color: #333;
116
- z-index: 1000;
117
- pointer-events: auto;
118
- overflow: hidden;
119
- `;
120
- // Create header section - show author if exists, otherwise fallback to subject
121
- const headerText = metadata.author || metadata.subject;
122
- if (headerText) {
123
- const header = document.createElement('div');
124
- header.style.cssText = `
125
- background: ${color};
126
- padding: 6px 10px;
127
- color: white;
128
- font-weight: 500;
129
- font-size: 12px;
130
- text-shadow: 0 1px 1px rgba(0,0,0,0.2);
131
- `;
132
- header.textContent = headerText;
133
- popup.appendChild(header);
134
- }
135
- // Create body section (contents) if exists
136
- if (metadata.contents) {
137
- const body = document.createElement('div');
138
- body.style.cssText = `
139
- padding: 8px 10px;
140
- word-wrap: break-word;
141
- white-space: pre-wrap;
142
- `;
143
- body.textContent = metadata.contents;
144
- popup.appendChild(body);
145
- }
146
- // Position the popup relative to the anchor element
147
- const anchorRect = anchorElement.getBoundingClientRect();
148
- const overlay = anchorElement.closest('.udoc-annotation-overlay');
149
- if (!overlay)
150
- return;
151
- const overlayRect = overlay.getBoundingClientRect();
152
- // Position popup below and to the right of the icon
153
- const popupX = anchorRect.left - overlayRect.left + anchorRect.width + 4;
154
- const popupY = anchorRect.top - overlayRect.top;
155
- popup.style.left = `${popupX}px`;
156
- popup.style.top = `${popupY}px`;
157
- overlay.appendChild(popup);
158
- this.activePopup = popup;
159
- // Adjust position if popup goes off-screen
160
- requestAnimationFrame(() => {
161
- const popupRect = popup.getBoundingClientRect();
162
- const viewportWidth = window.innerWidth;
163
- const viewportHeight = window.innerHeight;
164
- // If popup extends beyond right edge, position to the left of the icon
165
- if (popupRect.right > viewportWidth - 10) {
166
- const newX = anchorRect.left - overlayRect.left - popupRect.width - 4;
167
- popup.style.left = `${Math.max(0, newX)}px`;
168
- }
169
- // If popup extends beyond bottom edge, adjust upward
170
- if (popupRect.bottom > viewportHeight - 10) {
171
- const newY = popupY - (popupRect.bottom - viewportHeight) - 10;
172
- popup.style.top = `${Math.max(0, newY)}px`;
173
- }
174
- });
175
- // Set up event handlers for closing
176
- this.boundHandleDocumentClick = (e) => {
177
- if (!popup.contains(e.target) && !anchorElement.contains(e.target)) {
178
- this.hidePopup();
179
- }
180
- };
181
- this.boundHandleEscapeKey = (e) => {
182
- if (e.key === 'Escape') {
183
- this.hidePopup();
184
- }
185
- };
186
- // Delay adding click listener to avoid immediate close
187
- setTimeout(() => {
188
- document.addEventListener('click', this.boundHandleDocumentClick);
189
- }, 0);
190
- document.addEventListener('keydown', this.boundHandleEscapeKey);
191
- }
192
- /**
193
- * Hide the currently active popup.
194
- */
195
- hidePopup() {
196
- if (this.activePopup) {
197
- this.activePopup.remove();
198
- this.activePopup = null;
199
- }
200
- if (this.boundHandleDocumentClick) {
201
- document.removeEventListener('click', this.boundHandleDocumentClick);
202
- this.boundHandleDocumentClick = null;
203
- }
204
- if (this.boundHandleEscapeKey) {
205
- document.removeEventListener('keydown', this.boundHandleEscapeKey);
206
- this.boundHandleEscapeKey = null;
207
- }
208
- }
209
- /**
210
- * Create or get an annotation overlay for a slot element.
211
- * The overlay is positioned absolutely within the slot.
212
- *
213
- * @param slotEl The slot element to attach the overlay to
214
- * @param pageIndex The page index for this slot
215
- * @returns The overlay element
216
- */
217
- getOrCreateOverlay(slotEl, pageIndex) {
218
- let overlay = this.overlays.get(pageIndex);
219
- if (overlay && overlay.parentElement === slotEl) {
220
- return overlay;
221
- }
222
- // Create new overlay
223
- overlay = document.createElement('div');
224
- overlay.className = 'udoc-annotation-overlay';
225
- overlay.style.cssText = `
226
- position: absolute;
227
- top: 0;
228
- left: 0;
229
- width: 100%;
230
- height: 100%;
231
- pointer-events: none;
232
- `;
233
- slotEl.appendChild(overlay);
234
- this.overlays.set(pageIndex, overlay);
235
- return overlay;
236
- }
237
- /**
238
- * Render annotations for a specific page into its slot overlay.
239
- *
240
- * @param slotEl The slot element containing the page
241
- * @param pageIndex The page index
242
- */
243
- renderPageAnnotations(slotEl, pageIndex) {
244
- const annotations = this.pageAnnotations.get(pageIndex);
245
- if (!annotations || annotations.length === 0) {
246
- // Remove overlay if no annotations
247
- const existing = this.overlays.get(pageIndex);
248
- if (existing) {
249
- existing.remove();
250
- this.overlays.delete(pageIndex);
251
- }
252
- return;
253
- }
254
- const overlay = this.getOrCreateOverlay(slotEl, pageIndex);
255
- overlay.innerHTML = '';
256
- for (const annotation of annotations) {
257
- if (!annotation.bounds)
258
- continue;
259
- this.renderAnnotation(overlay, annotation);
260
- }
261
- }
262
- /**
263
- * Render a single annotation using the appropriate renderer.
264
- */
265
- renderAnnotation(overlay, annotation) {
266
- switch (annotation.type) {
267
- // Link annotations
268
- case 'link':
269
- this.linkRenderer.render(overlay, annotation);
270
- break;
271
- // Markup annotations (text highlighting)
272
- case 'highlight':
273
- this.markupRenderer.renderHighlight(overlay, annotation);
274
- break;
275
- case 'underline':
276
- this.markupRenderer.renderUnderline(overlay, annotation);
277
- break;
278
- case 'strikeOut':
279
- this.markupRenderer.renderStrikeOut(overlay, annotation);
280
- break;
281
- case 'squiggly':
282
- this.markupRenderer.renderSquiggly(overlay, annotation);
283
- break;
284
- // Text annotations
285
- case 'text':
286
- this.textRenderer.renderText(overlay, annotation);
287
- break;
288
- case 'freeText':
289
- this.textRenderer.renderFreeText(overlay, annotation);
290
- break;
291
- case 'stamp':
292
- this.textRenderer.renderStamp(overlay, annotation);
293
- break;
294
- case 'caret':
295
- this.textRenderer.renderCaret(overlay, annotation);
296
- break;
297
- // Shape annotations
298
- case 'line':
299
- this.shapeRenderer.renderLine(overlay, annotation);
300
- break;
301
- case 'square':
302
- this.shapeRenderer.renderSquare(overlay, annotation);
303
- break;
304
- case 'circle':
305
- this.shapeRenderer.renderCircle(overlay, annotation);
306
- break;
307
- case 'polygon':
308
- this.shapeRenderer.renderPolygon(overlay, annotation);
309
- break;
310
- case 'polyLine':
311
- this.shapeRenderer.renderPolyLine(overlay, annotation);
312
- break;
313
- case 'ink':
314
- this.shapeRenderer.renderInk(overlay, annotation);
315
- break;
316
- case 'redact':
317
- this.shapeRenderer.renderRedact(overlay, annotation);
318
- break;
319
- }
320
- }
321
- }
322
- //# sourceMappingURL=AnnotationLayer.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"AnnotationLayer.js","sourceRoot":"","sources":["../../../src/ui/annotation/AnnotationLayer.ts"],"names":[],"mappings":"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"}
@@ -1,32 +0,0 @@
1
- /**
2
- * Renderer for link annotations.
3
- */
4
- import type { Annotation, Destination } from '../../core/types';
5
- /**
6
- * Callback types for link actions.
7
- */
8
- export type NavigateCallback = (destination: Destination) => void;
9
- export type OpenUriCallback = (uri: string) => void;
10
- /**
11
- * Renders link annotations as clickable overlays.
12
- */
13
- export declare class LinkRenderer {
14
- private zoom;
15
- private onNavigate?;
16
- private onOpenUri?;
17
- constructor(zoom: number, onNavigate?: NavigateCallback, onOpenUri?: OpenUriCallback);
18
- setZoom(zoom: number): void;
19
- setNavigateCallback(callback: NavigateCallback): void;
20
- setOpenUriCallback(callback: OpenUriCallback): void;
21
- /**
22
- * Render a link annotation as a clickable box.
23
- */
24
- render(overlay: HTMLDivElement, annotation: Annotation & {
25
- type: 'link';
26
- }): void;
27
- /**
28
- * Handle a link action (navigation or URI).
29
- */
30
- private handleLinkAction;
31
- }
32
- //# sourceMappingURL=LinkRenderer.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"LinkRenderer.d.ts","sourceRoot":"","sources":["../../../src/ui/annotation/LinkRenderer.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAc,MAAM,kBAAkB,CAAC;AAG5E;;GAEG;AACH,MAAM,MAAM,gBAAgB,GAAG,CAAC,WAAW,EAAE,WAAW,KAAK,IAAI,CAAC;AAClE,MAAM,MAAM,eAAe,GAAG,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;AAEpD;;GAEG;AACH,qBAAa,YAAY;IACrB,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO,CAAC,UAAU,CAAC,CAAmB;IACtC,OAAO,CAAC,SAAS,CAAC,CAAkB;gBAGhC,IAAI,EAAE,MAAM,EACZ,UAAU,CAAC,EAAE,gBAAgB,EAC7B,SAAS,CAAC,EAAE,eAAe;IAO/B,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAI3B,mBAAmB,CAAC,QAAQ,EAAE,gBAAgB,GAAG,IAAI;IAIrD,kBAAkB,CAAC,QAAQ,EAAE,eAAe,GAAG,IAAI;IAInD;;OAEG;IACH,MAAM,CAAC,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,UAAU,GAAG;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IA4BhF;;OAEG;IACH,OAAO,CAAC,gBAAgB;CAkB3B"}
@@ -1,74 +0,0 @@
1
- import { scaleBounds } from './utils';
2
- /**
3
- * Renders link annotations as clickable overlays.
4
- */
5
- export class LinkRenderer {
6
- zoom;
7
- onNavigate;
8
- onOpenUri;
9
- constructor(zoom, onNavigate, onOpenUri) {
10
- this.zoom = zoom;
11
- this.onNavigate = onNavigate;
12
- this.onOpenUri = onOpenUri;
13
- }
14
- setZoom(zoom) {
15
- this.zoom = zoom;
16
- }
17
- setNavigateCallback(callback) {
18
- this.onNavigate = callback;
19
- }
20
- setOpenUriCallback(callback) {
21
- this.onOpenUri = callback;
22
- }
23
- /**
24
- * Render a link annotation as a clickable box.
25
- */
26
- render(overlay, annotation) {
27
- if (!annotation.bounds)
28
- return;
29
- const scaled = scaleBounds(annotation.bounds, this.zoom);
30
- const box = document.createElement('div');
31
- box.className = 'udoc-annotation-box udoc-annotation-link';
32
- box.style.cssText = `
33
- position: absolute;
34
- left: ${scaled.x}px;
35
- top: ${scaled.y}px;
36
- width: ${scaled.width}px;
37
- height: ${scaled.height}px;
38
- pointer-events: auto;
39
- cursor: pointer;
40
- `;
41
- box.addEventListener('click', (e) => {
42
- e.preventDefault();
43
- e.stopPropagation();
44
- if (annotation.action) {
45
- this.handleLinkAction(annotation.action);
46
- }
47
- });
48
- overlay.appendChild(box);
49
- }
50
- /**
51
- * Handle a link action (navigation or URI).
52
- */
53
- handleLinkAction(action) {
54
- if (action.actionType === 'goTo') {
55
- if (this.onNavigate) {
56
- this.onNavigate(action.destination);
57
- return true;
58
- }
59
- }
60
- else if (action.actionType === 'uri') {
61
- if (this.onOpenUri) {
62
- this.onOpenUri(action.uri);
63
- return true;
64
- }
65
- else {
66
- // Default behavior: open in new tab
67
- window.open(action.uri, '_blank', 'noopener,noreferrer');
68
- return true;
69
- }
70
- }
71
- return false;
72
- }
73
- }
74
- //# sourceMappingURL=LinkRenderer.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"LinkRenderer.js","sourceRoot":"","sources":["../../../src/ui/annotation/LinkRenderer.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAQtC;;GAEG;AACH,MAAM,OAAO,YAAY;IACb,IAAI,CAAS;IACb,UAAU,CAAoB;IAC9B,SAAS,CAAmB;IAEpC,YACI,IAAY,EACZ,UAA6B,EAC7B,SAA2B;QAE3B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;IAC/B,CAAC;IAED,OAAO,CAAC,IAAY;QAChB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACrB,CAAC;IAED,mBAAmB,CAAC,QAA0B;QAC1C,IAAI,CAAC,UAAU,GAAG,QAAQ,CAAC;IAC/B,CAAC;IAED,kBAAkB,CAAC,QAAyB;QACxC,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;IAC9B,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,OAAuB,EAAE,UAAyC;QACrE,IAAI,CAAC,UAAU,CAAC,MAAM;YAAE,OAAO;QAE/B,MAAM,MAAM,GAAG,WAAW,CAAC,UAAU,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QAEzD,MAAM,GAAG,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAC1C,GAAG,CAAC,SAAS,GAAG,0CAA0C,CAAC;QAC3D,GAAG,CAAC,KAAK,CAAC,OAAO,GAAG;;oBAER,MAAM,CAAC,CAAC;mBACT,MAAM,CAAC,CAAC;qBACN,MAAM,CAAC,KAAK;sBACX,MAAM,CAAC,MAAM;;;SAG1B,CAAC;QAEF,GAAG,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE;YAChC,CAAC,CAAC,cAAc,EAAE,CAAC;YACnB,CAAC,CAAC,eAAe,EAAE,CAAC;YACpB,IAAI,UAAU,CAAC,MAAM,EAAE,CAAC;gBACpB,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;YAC7C,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IAC7B,CAAC;IAED;;OAEG;IACK,gBAAgB,CAAC,MAAkB;QACvC,IAAI,MAAM,CAAC,UAAU,KAAK,MAAM,EAAE,CAAC;YAC/B,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;gBAClB,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;gBACpC,OAAO,IAAI,CAAC;YAChB,CAAC;QACL,CAAC;aAAM,IAAI,MAAM,CAAC,UAAU,KAAK,KAAK,EAAE,CAAC;YACrC,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;gBACjB,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;gBAC3B,OAAO,IAAI,CAAC;YAChB,CAAC;iBAAM,CAAC;gBACJ,oCAAoC;gBACpC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,QAAQ,EAAE,qBAAqB,CAAC,CAAC;gBACzD,OAAO,IAAI,CAAC;YAChB,CAAC;QACL,CAAC;QACD,OAAO,KAAK,CAAC;IACjB,CAAC;CACJ"}
@@ -1,40 +0,0 @@
1
- /**
2
- * Renderer for text markup annotations: highlight, underline, strikeout, squiggly.
3
- */
4
- import type { HighlightAnnotation, UnderlineAnnotation, StrikeOutAnnotation, SquigglyAnnotation, MarkupMetadata } from '../../core/types';
5
- export type MarkupAnnotation = HighlightAnnotation | UnderlineAnnotation | StrikeOutAnnotation | SquigglyAnnotation;
6
- /**
7
- * Callback type for showing popup with annotation metadata.
8
- */
9
- export type ShowPopupCallback = (anchor: HTMLElement, metadata: MarkupMetadata, color: string) => void;
10
- /**
11
- * Renders text markup annotations (highlight, underline, strikeout, squiggly).
12
- */
13
- export declare class MarkupRenderer {
14
- private zoom;
15
- private onShowPopup?;
16
- constructor(zoom: number, onShowPopup?: ShowPopupCallback);
17
- setZoom(zoom: number): void;
18
- setShowPopupCallback(callback: ShowPopupCallback): void;
19
- /**
20
- * Render a highlight annotation as a colored overlay.
21
- */
22
- renderHighlight(overlay: HTMLDivElement, annotation: HighlightAnnotation): void;
23
- /**
24
- * Render an underline annotation as lines along the bottom of text.
25
- */
26
- renderUnderline(overlay: HTMLDivElement, annotation: UnderlineAnnotation): void;
27
- /**
28
- * Render a strikeout annotation as lines through the middle of text.
29
- */
30
- renderStrikeOut(overlay: HTMLDivElement, annotation: StrikeOutAnnotation): void;
31
- /**
32
- * Render a squiggly annotation as wavy lines under text.
33
- */
34
- renderSquiggly(overlay: HTMLDivElement, annotation: SquigglyAnnotation): void;
35
- /**
36
- * Add a clickable overlay for text markup annotations when metadata exists.
37
- */
38
- private addTextMarkupClickHandler;
39
- }
40
- //# sourceMappingURL=MarkupRenderer.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"MarkupRenderer.d.ts","sourceRoot":"","sources":["../../../src/ui/annotation/MarkupRenderer.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EACR,mBAAmB,EACnB,mBAAmB,EACnB,mBAAmB,EACnB,kBAAkB,EAClB,cAAc,EACjB,MAAM,kBAAkB,CAAC;AAG1B,MAAM,MAAM,gBAAgB,GACtB,mBAAmB,GACnB,mBAAmB,GACnB,mBAAmB,GACnB,kBAAkB,CAAC;AAEzB;;GAEG;AACH,MAAM,MAAM,iBAAiB,GAAG,CAC5B,MAAM,EAAE,WAAW,EACnB,QAAQ,EAAE,cAAc,EACxB,KAAK,EAAE,MAAM,KACZ,IAAI,CAAC;AAEV;;GAEG;AACH,qBAAa,cAAc;IACvB,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO,CAAC,WAAW,CAAC,CAAoB;gBAE5B,IAAI,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,iBAAiB;IAKzD,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAI3B,oBAAoB,CAAC,QAAQ,EAAE,iBAAiB,GAAG,IAAI;IAIvD;;OAEG;IACH,eAAe,CAAC,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,mBAAmB,GAAG,IAAI;IAqB/E;;OAEG;IACH,eAAe,CAAC,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,mBAAmB,GAAG,IAAI;IAwB/E;;OAEG;IACH,eAAe,CAAC,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,mBAAmB,GAAG,IAAI;IA2B/E;;OAEG;IACH,cAAc,CAAC,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,kBAAkB,GAAG,IAAI;IA8C7E;;OAEG;IACH,OAAO,CAAC,yBAAyB;CA8BpC"}
@@ -1,154 +0,0 @@
1
- import { colorToRgb, scaleQuadPoints, createSvgOverlay, scaleBounds } from './utils';
2
- /**
3
- * Renders text markup annotations (highlight, underline, strikeout, squiggly).
4
- */
5
- export class MarkupRenderer {
6
- zoom;
7
- onShowPopup;
8
- constructor(zoom, onShowPopup) {
9
- this.zoom = zoom;
10
- this.onShowPopup = onShowPopup;
11
- }
12
- setZoom(zoom) {
13
- this.zoom = zoom;
14
- }
15
- setShowPopupCallback(callback) {
16
- this.onShowPopup = callback;
17
- }
18
- /**
19
- * Render a highlight annotation as a colored overlay.
20
- */
21
- renderHighlight(overlay, annotation) {
22
- const svg = createSvgOverlay();
23
- const color = colorToRgb(annotation.color, 'rgb(255, 255, 0)'); // Default yellow
24
- const opacity = annotation.opacity ?? 0.4;
25
- for (const quad of annotation.quads) {
26
- const scaledPoints = scaleQuadPoints(quad.points, this.zoom);
27
- const polygon = document.createElementNS('http://www.w3.org/2000/svg', 'polygon');
28
- polygon.setAttribute('points', scaledPoints.map((p) => `${p.x},${p.y}`).join(' '));
29
- polygon.setAttribute('fill', color);
30
- polygon.setAttribute('fill-opacity', String(opacity));
31
- polygon.setAttribute('style', 'mix-blend-mode: multiply;');
32
- svg.appendChild(polygon);
33
- }
34
- overlay.appendChild(svg);
35
- // Add clickable overlay when metadata exists
36
- this.addTextMarkupClickHandler(overlay, annotation, color);
37
- }
38
- /**
39
- * Render an underline annotation as lines along the bottom of text.
40
- */
41
- renderUnderline(overlay, annotation) {
42
- const svg = createSvgOverlay();
43
- const color = colorToRgb(annotation.color, 'rgb(0, 128, 0)'); // Default green
44
- const strokeWidth = Math.max(1, 1 * this.zoom);
45
- for (const quad of annotation.quads) {
46
- const scaledPoints = scaleQuadPoints(quad.points, this.zoom);
47
- // Draw line along bottom edge (from bottom-left to bottom-right)
48
- const line = document.createElementNS('http://www.w3.org/2000/svg', 'line');
49
- line.setAttribute('x1', String(scaledPoints[0].x));
50
- line.setAttribute('y1', String(scaledPoints[0].y));
51
- line.setAttribute('x2', String(scaledPoints[1].x));
52
- line.setAttribute('y2', String(scaledPoints[1].y));
53
- line.setAttribute('stroke', color);
54
- line.setAttribute('stroke-width', String(strokeWidth));
55
- svg.appendChild(line);
56
- }
57
- overlay.appendChild(svg);
58
- // Add clickable overlay when metadata exists
59
- this.addTextMarkupClickHandler(overlay, annotation, color);
60
- }
61
- /**
62
- * Render a strikeout annotation as lines through the middle of text.
63
- */
64
- renderStrikeOut(overlay, annotation) {
65
- const svg = createSvgOverlay();
66
- const color = colorToRgb(annotation.color, 'rgb(255, 0, 0)'); // Default red
67
- const strokeWidth = Math.max(1, 1 * this.zoom);
68
- for (const quad of annotation.quads) {
69
- const scaledPoints = scaleQuadPoints(quad.points, this.zoom);
70
- // Calculate middle Y between top and bottom
71
- const midLeftY = (scaledPoints[0].y + scaledPoints[3].y) / 2;
72
- const midRightY = (scaledPoints[1].y + scaledPoints[2].y) / 2;
73
- const line = document.createElementNS('http://www.w3.org/2000/svg', 'line');
74
- line.setAttribute('x1', String(scaledPoints[0].x));
75
- line.setAttribute('y1', String(midLeftY));
76
- line.setAttribute('x2', String(scaledPoints[1].x));
77
- line.setAttribute('y2', String(midRightY));
78
- line.setAttribute('stroke', color);
79
- line.setAttribute('stroke-width', String(strokeWidth));
80
- svg.appendChild(line);
81
- }
82
- overlay.appendChild(svg);
83
- // Add clickable overlay when metadata exists
84
- this.addTextMarkupClickHandler(overlay, annotation, color);
85
- }
86
- /**
87
- * Render a squiggly annotation as wavy lines under text.
88
- */
89
- renderSquiggly(overlay, annotation) {
90
- const svg = createSvgOverlay();
91
- const color = colorToRgb(annotation.color, 'rgb(255, 0, 0)'); // Default red
92
- const strokeWidth = Math.max(1, 1 * this.zoom);
93
- const wavelength = 4 * this.zoom;
94
- const amplitude = 2 * this.zoom;
95
- for (const quad of annotation.quads) {
96
- const scaledPoints = scaleQuadPoints(quad.points, this.zoom);
97
- const startX = scaledPoints[0].x;
98
- const endX = scaledPoints[1].x;
99
- const startY = scaledPoints[0].y;
100
- const endY = scaledPoints[1].y;
101
- // Generate wavy path
102
- let path = `M ${startX} ${startY}`;
103
- const totalLength = Math.sqrt((endX - startX) ** 2 + (endY - startY) ** 2);
104
- const steps = Math.ceil(totalLength / wavelength);
105
- for (let i = 0; i < steps; i++) {
106
- const t1 = (i + 0.5) / steps;
107
- const t2 = (i + 1) / steps;
108
- const midX = startX + (endX - startX) * t1;
109
- const midY = startY + (endY - startY) * t1;
110
- const nextX = startX + (endX - startX) * t2;
111
- const nextY = startY + (endY - startY) * t2;
112
- // Alternate up and down
113
- const direction = i % 2 === 0 ? -1 : 1;
114
- path += ` Q ${midX} ${midY + amplitude * direction}, ${nextX} ${nextY}`;
115
- }
116
- const pathEl = document.createElementNS('http://www.w3.org/2000/svg', 'path');
117
- pathEl.setAttribute('d', path);
118
- pathEl.setAttribute('stroke', color);
119
- pathEl.setAttribute('stroke-width', String(strokeWidth));
120
- pathEl.setAttribute('fill', 'none');
121
- svg.appendChild(pathEl);
122
- }
123
- overlay.appendChild(svg);
124
- // Add clickable overlay when metadata exists
125
- this.addTextMarkupClickHandler(overlay, annotation, color);
126
- }
127
- /**
128
- * Add a clickable overlay for text markup annotations when metadata exists.
129
- */
130
- addTextMarkupClickHandler(overlay, annotation, color) {
131
- if (!annotation.metadata || !this.onShowPopup)
132
- return;
133
- const scaled = scaleBounds(annotation.bounds, this.zoom);
134
- const clickArea = document.createElement('div');
135
- clickArea.className = 'udoc-annotation-click-area';
136
- clickArea.style.cssText = `
137
- position: absolute;
138
- left: ${scaled.x}px;
139
- top: ${scaled.y}px;
140
- width: ${scaled.width}px;
141
- height: ${scaled.height}px;
142
- pointer-events: auto;
143
- cursor: pointer;
144
- `;
145
- const showPopup = this.onShowPopup;
146
- const metadata = annotation.metadata;
147
- clickArea.addEventListener('click', (e) => {
148
- e.stopPropagation();
149
- showPopup(clickArea, metadata, color);
150
- });
151
- overlay.appendChild(clickArea);
152
- }
153
- }
154
- //# sourceMappingURL=MarkupRenderer.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"MarkupRenderer.js","sourceRoot":"","sources":["../../../src/ui/annotation/MarkupRenderer.ts"],"names":[],"mappings":"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"}