@docmentis/udoc-viewer 0.6.22 → 0.6.24

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 (130) hide show
  1. package/dist/package.json +1 -1
  2. package/dist/src/UDocClient.d.ts +1 -1
  3. package/dist/src/UDocClient.js +1 -1
  4. package/dist/src/UDocViewer.d.ts +4 -3
  5. package/dist/src/UDocViewer.d.ts.map +1 -1
  6. package/dist/src/UDocViewer.js +38 -4
  7. package/dist/src/UDocViewer.js.map +1 -1
  8. package/dist/src/ui/viewer/actions.d.ts +23 -3
  9. package/dist/src/ui/viewer/actions.d.ts.map +1 -1
  10. package/dist/src/ui/viewer/annotation/ShapeRenderer.d.ts.map +1 -1
  11. package/dist/src/ui/viewer/annotation/ShapeRenderer.js +23 -16
  12. package/dist/src/ui/viewer/annotation/ShapeRenderer.js.map +1 -1
  13. package/dist/src/ui/viewer/annotation/index.d.ts +1 -1
  14. package/dist/src/ui/viewer/annotation/index.d.ts.map +1 -1
  15. package/dist/src/ui/viewer/annotation/index.js +1 -1
  16. package/dist/src/ui/viewer/annotation/index.js.map +1 -1
  17. package/dist/src/ui/viewer/annotation/render.d.ts.map +1 -1
  18. package/dist/src/ui/viewer/annotation/render.js +11 -4
  19. package/dist/src/ui/viewer/annotation/render.js.map +1 -1
  20. package/dist/src/ui/viewer/annotation/types.d.ts +9 -1
  21. package/dist/src/ui/viewer/annotation/types.d.ts.map +1 -1
  22. package/dist/src/ui/viewer/annotation/utils.d.ts +10 -1
  23. package/dist/src/ui/viewer/annotation/utils.d.ts.map +1 -1
  24. package/dist/src/ui/viewer/annotation/utils.js +114 -0
  25. package/dist/src/ui/viewer/annotation/utils.js.map +1 -1
  26. package/dist/src/ui/viewer/components/ColorSelect.d.ts +26 -0
  27. package/dist/src/ui/viewer/components/ColorSelect.d.ts.map +1 -0
  28. package/dist/src/ui/viewer/components/ColorSelect.js +120 -0
  29. package/dist/src/ui/viewer/components/ColorSelect.js.map +1 -0
  30. package/dist/src/ui/viewer/components/NumberInput.d.ts +32 -0
  31. package/dist/src/ui/viewer/components/NumberInput.d.ts.map +1 -0
  32. package/dist/src/ui/viewer/components/NumberInput.js +101 -0
  33. package/dist/src/ui/viewer/components/NumberInput.js.map +1 -0
  34. package/dist/src/ui/viewer/components/Spread.d.ts +2 -2
  35. package/dist/src/ui/viewer/components/Spread.d.ts.map +1 -1
  36. package/dist/src/ui/viewer/components/Spread.js.map +1 -1
  37. package/dist/src/ui/viewer/components/SubToolbar.d.ts.map +1 -1
  38. package/dist/src/ui/viewer/components/SubToolbar.js +385 -107
  39. package/dist/src/ui/viewer/components/SubToolbar.js.map +1 -1
  40. package/dist/src/ui/viewer/components/Toolbar.d.ts.map +1 -1
  41. package/dist/src/ui/viewer/components/Toolbar.js +6 -3
  42. package/dist/src/ui/viewer/components/Toolbar.js.map +1 -1
  43. package/dist/src/ui/viewer/components/Viewport.d.ts.map +1 -1
  44. package/dist/src/ui/viewer/components/Viewport.js +20 -0
  45. package/dist/src/ui/viewer/components/Viewport.js.map +1 -1
  46. package/dist/src/ui/viewer/i18n/ar.d.ts.map +1 -1
  47. package/dist/src/ui/viewer/i18n/ar.js +36 -21
  48. package/dist/src/ui/viewer/i18n/ar.js.map +1 -1
  49. package/dist/src/ui/viewer/i18n/de.d.ts.map +1 -1
  50. package/dist/src/ui/viewer/i18n/de.js +32 -17
  51. package/dist/src/ui/viewer/i18n/de.js.map +1 -1
  52. package/dist/src/ui/viewer/i18n/en.d.ts.map +1 -1
  53. package/dist/src/ui/viewer/i18n/en.js +15 -0
  54. package/dist/src/ui/viewer/i18n/en.js.map +1 -1
  55. package/dist/src/ui/viewer/i18n/es.d.ts.map +1 -1
  56. package/dist/src/ui/viewer/i18n/es.js +35 -20
  57. package/dist/src/ui/viewer/i18n/es.js.map +1 -1
  58. package/dist/src/ui/viewer/i18n/fr.d.ts.map +1 -1
  59. package/dist/src/ui/viewer/i18n/fr.js +33 -18
  60. package/dist/src/ui/viewer/i18n/fr.js.map +1 -1
  61. package/dist/src/ui/viewer/i18n/ja.d.ts.map +1 -1
  62. package/dist/src/ui/viewer/i18n/ja.js +36 -21
  63. package/dist/src/ui/viewer/i18n/ja.js.map +1 -1
  64. package/dist/src/ui/viewer/i18n/ko.d.ts.map +1 -1
  65. package/dist/src/ui/viewer/i18n/ko.js +36 -21
  66. package/dist/src/ui/viewer/i18n/ko.js.map +1 -1
  67. package/dist/src/ui/viewer/i18n/pt-BR.d.ts.map +1 -1
  68. package/dist/src/ui/viewer/i18n/pt-BR.js +35 -20
  69. package/dist/src/ui/viewer/i18n/pt-BR.js.map +1 -1
  70. package/dist/src/ui/viewer/i18n/ru.d.ts.map +1 -1
  71. package/dist/src/ui/viewer/i18n/ru.js +36 -21
  72. package/dist/src/ui/viewer/i18n/ru.js.map +1 -1
  73. package/dist/src/ui/viewer/i18n/types.d.ts +14 -0
  74. package/dist/src/ui/viewer/i18n/types.d.ts.map +1 -1
  75. package/dist/src/ui/viewer/i18n/zh-CN.d.ts.map +1 -1
  76. package/dist/src/ui/viewer/i18n/zh-CN.js +36 -21
  77. package/dist/src/ui/viewer/i18n/zh-CN.js.map +1 -1
  78. package/dist/src/ui/viewer/i18n/zh-TW.d.ts.map +1 -1
  79. package/dist/src/ui/viewer/i18n/zh-TW.js +36 -21
  80. package/dist/src/ui/viewer/i18n/zh-TW.js.map +1 -1
  81. package/dist/src/ui/viewer/icons.d.ts +13 -0
  82. package/dist/src/ui/viewer/icons.d.ts.map +1 -1
  83. package/dist/src/ui/viewer/icons.js +22 -0
  84. package/dist/src/ui/viewer/icons.js.map +1 -1
  85. package/dist/src/ui/viewer/reducer.d.ts.map +1 -1
  86. package/dist/src/ui/viewer/reducer.js +70 -3
  87. package/dist/src/ui/viewer/reducer.js.map +1 -1
  88. package/dist/src/ui/viewer/search/search.d.ts +4 -4
  89. package/dist/src/ui/viewer/search/search.d.ts.map +1 -1
  90. package/dist/src/ui/viewer/search/search.js +1 -1
  91. package/dist/src/ui/viewer/search/search.js.map +1 -1
  92. package/dist/src/ui/viewer/shell.d.ts +2 -2
  93. package/dist/src/ui/viewer/shell.d.ts.map +1 -1
  94. package/dist/src/ui/viewer/shell.js.map +1 -1
  95. package/dist/src/ui/viewer/state.d.ts +23 -6
  96. package/dist/src/ui/viewer/state.d.ts.map +1 -1
  97. package/dist/src/ui/viewer/state.js +9 -0
  98. package/dist/src/ui/viewer/state.js.map +1 -1
  99. package/dist/src/ui/viewer/styles-inline.d.ts +1 -1
  100. package/dist/src/ui/viewer/styles-inline.d.ts.map +1 -1
  101. package/dist/src/ui/viewer/styles-inline.js +467 -34
  102. package/dist/src/ui/viewer/styles-inline.js.map +1 -1
  103. package/dist/src/ui/viewer/text/render.d.ts +3 -3
  104. package/dist/src/ui/viewer/text/render.d.ts.map +1 -1
  105. package/dist/src/ui/viewer/text/render.js +2 -2
  106. package/dist/src/ui/viewer/text/render.js.map +1 -1
  107. package/dist/src/ui/viewer/tools/AnnotationDrawController.d.ts +21 -0
  108. package/dist/src/ui/viewer/tools/AnnotationDrawController.d.ts.map +1 -0
  109. package/dist/src/ui/viewer/tools/AnnotationDrawController.js +392 -0
  110. package/dist/src/ui/viewer/tools/AnnotationDrawController.js.map +1 -0
  111. package/dist/src/ui/viewer/tools/AnnotationSelectController.d.ts +22 -0
  112. package/dist/src/ui/viewer/tools/AnnotationSelectController.d.ts.map +1 -0
  113. package/dist/src/ui/viewer/tools/AnnotationSelectController.js +367 -0
  114. package/dist/src/ui/viewer/tools/AnnotationSelectController.js.map +1 -0
  115. package/dist/src/wasm/udoc.d.ts +399 -114
  116. package/dist/src/wasm/udoc.js +157 -81
  117. package/dist/src/wasm/udoc_bg.wasm +0 -0
  118. package/dist/src/wasm/udoc_bg.wasm.d.ts +8 -7
  119. package/dist/src/worker/WorkerClient.d.ts +17 -11
  120. package/dist/src/worker/WorkerClient.d.ts.map +1 -1
  121. package/dist/src/worker/WorkerClient.js +10 -2
  122. package/dist/src/worker/WorkerClient.js.map +1 -1
  123. package/dist/src/worker/index.d.ts +1 -1
  124. package/dist/src/worker/index.d.ts.map +1 -1
  125. package/dist/src/worker/worker-inline.js +1 -1
  126. package/dist/src/worker/worker.d.ts +26 -58
  127. package/dist/src/worker/worker.d.ts.map +1 -1
  128. package/dist/src/worker/worker.js +161 -80
  129. package/dist/src/worker/worker.js.map +1 -1
  130. package/package.json +1 -1
@@ -0,0 +1,367 @@
1
+ /**
2
+ * AnnotationSelectController — handles annotation selection, move, resize, and deletion.
3
+ *
4
+ * When the "select" sub-tool is active (in either annotate or markup tool sets):
5
+ * - Clicking an annotation selects it, showing a bounding box with resize handles.
6
+ * - Dragging the bounding box moves the annotation.
7
+ * - Dragging a resize handle resizes the annotation.
8
+ * - Pressing Delete/Backspace removes the selected annotation.
9
+ * - Clicking empty space deselects.
10
+ */
11
+ import { getPointsToPixels, isToolSet, ANNOTATION_FORMATS } from "../state";
12
+ import { offsetAnnotation, resizeAnnotation } from "../annotation/utils";
13
+ const SELECT_CURSOR_CLASS = "udoc-viewer--tool-select";
14
+ const MOVING_CLASS = "udoc-viewer--annotation-moving";
15
+ const RESIZING_CLASS = "udoc-viewer--annotation-resizing";
16
+ const BBOX_CLASS = "udoc-annotation-select-bbox";
17
+ const HANDLE_POSITIONS = ["nw", "n", "ne", "e", "se", "s", "sw", "w"];
18
+ const HANDLE_CURSORS = {
19
+ nw: "nwse-resize",
20
+ n: "ns-resize",
21
+ ne: "nesw-resize",
22
+ e: "ew-resize",
23
+ se: "nwse-resize",
24
+ s: "ns-resize",
25
+ sw: "nesw-resize",
26
+ w: "ew-resize",
27
+ };
28
+ export function createAnnotationSelectController(options) {
29
+ const { scrollArea, viewerRoot, store } = options;
30
+ let active = false;
31
+ let bboxEl = null;
32
+ let innerEl = null;
33
+ let isDragging = false;
34
+ let dragMode = "move";
35
+ let dragScale = 1;
36
+ let dragStartX = 0;
37
+ let dragStartY = 0;
38
+ let dragDx = 0;
39
+ let dragDy = 0;
40
+ let dragAnnotationPageIndex = -1;
41
+ let dragAnnotationIndex = -1;
42
+ /** Original bounds at drag start (for resize) */
43
+ let dragOriginalBounds = { x: 0, y: 0, width: 0, height: 0 };
44
+ /** Which handle is being dragged (for resize) */
45
+ let dragHandle = "se";
46
+ // =========================================================================
47
+ // Bounding box with handles
48
+ // =========================================================================
49
+ function removeBbox() {
50
+ if (bboxEl) {
51
+ bboxEl.remove();
52
+ bboxEl = null;
53
+ innerEl = null;
54
+ }
55
+ }
56
+ function updateSelectionVisual() {
57
+ removeBbox();
58
+ const state = store.getState();
59
+ const sel = state.selectedAnnotation;
60
+ if (!sel)
61
+ return;
62
+ const annotations = state.pageAnnotations.get(sel.pageIndex);
63
+ if (!annotations || sel.annotationIndex >= annotations.length)
64
+ return;
65
+ const annotation = annotations[sel.annotationIndex];
66
+ const bounds = annotation.bounds;
67
+ if (!bounds || (bounds.width === 0 && bounds.height === 0))
68
+ return;
69
+ const pageNum = sel.pageIndex + 1;
70
+ const slot = scrollArea.querySelector(`[data-page="${pageNum}"]`);
71
+ if (!slot)
72
+ return;
73
+ const annotationLayer = slot.querySelector(".udoc-spread__annotation-layer");
74
+ if (!annotationLayer)
75
+ return;
76
+ const pointsToPixels = getPointsToPixels(state.dpi);
77
+ const zoom = state.effectiveZoom ?? state.zoom;
78
+ const scale = pointsToPixels * zoom;
79
+ // Outer wrapper — copies annotation layer positioning
80
+ bboxEl = document.createElement("div");
81
+ bboxEl.className = BBOX_CLASS;
82
+ bboxEl.style.position = "absolute";
83
+ bboxEl.style.width = annotationLayer.style.width;
84
+ bboxEl.style.height = annotationLayer.style.height;
85
+ bboxEl.style.left = annotationLayer.style.left;
86
+ bboxEl.style.top = annotationLayer.style.top;
87
+ bboxEl.style.transform = annotationLayer.style.transform;
88
+ bboxEl.style.transformOrigin = "center";
89
+ // Inner — the actual bounding rectangle
90
+ innerEl = document.createElement("div");
91
+ innerEl.className = BBOX_CLASS + "__inner";
92
+ innerEl.style.position = "absolute";
93
+ innerEl.style.left = `${bounds.x * scale}px`;
94
+ innerEl.style.top = `${bounds.y * scale}px`;
95
+ innerEl.style.width = `${bounds.width * scale}px`;
96
+ innerEl.style.height = `${bounds.height * scale}px`;
97
+ // Resize handles
98
+ for (const pos of HANDLE_POSITIONS) {
99
+ const handle = document.createElement("div");
100
+ handle.className = `${BBOX_CLASS}__handle ${BBOX_CLASS}__handle--${pos}`;
101
+ handle.style.cursor = HANDLE_CURSORS[pos];
102
+ handle.dataset.handle = pos;
103
+ innerEl.appendChild(handle);
104
+ }
105
+ bboxEl.appendChild(innerEl);
106
+ slot.appendChild(bboxEl);
107
+ }
108
+ /** Update inner element position/size during drag preview. */
109
+ function updateInnerPreview(bounds, newBounds) {
110
+ if (!innerEl)
111
+ return;
112
+ innerEl.style.left = `${newBounds.x * dragScale}px`;
113
+ innerEl.style.top = `${newBounds.y * dragScale}px`;
114
+ innerEl.style.width = `${newBounds.width * dragScale}px`;
115
+ innerEl.style.height = `${newBounds.height * dragScale}px`;
116
+ }
117
+ // =========================================================================
118
+ // Resize bounds computation
119
+ // =========================================================================
120
+ /** Compute new bounds from dragging a resize handle. */
121
+ function computeResizedBounds(original, handle, dx, dy) {
122
+ let { x, y, width, height } = original;
123
+ // Adjust edges based on handle
124
+ if (handle.includes("w")) {
125
+ x += dx;
126
+ width -= dx;
127
+ }
128
+ if (handle.includes("e") || handle === "e") {
129
+ width += dx;
130
+ }
131
+ if (handle.includes("n") && handle !== "ne" && handle !== "nw") {
132
+ // "n" only
133
+ y += dy;
134
+ height -= dy;
135
+ }
136
+ if (handle === "nw" || handle === "n" || handle === "ne") {
137
+ y += dy;
138
+ height -= dy;
139
+ }
140
+ if (handle === "sw" || handle === "s" || handle === "se") {
141
+ height += dy;
142
+ }
143
+ // Enforce minimum size and flip if dragged past opposite edge
144
+ const MIN = 2;
145
+ if (width < MIN) {
146
+ x = x + width - MIN;
147
+ width = MIN;
148
+ }
149
+ if (height < MIN) {
150
+ y = y + height - MIN;
151
+ height = MIN;
152
+ }
153
+ return { x, y, width, height };
154
+ }
155
+ // =========================================================================
156
+ // Pointer events
157
+ // =========================================================================
158
+ function onPointerDown(e) {
159
+ if (e.button !== 0)
160
+ return;
161
+ const target = e.target;
162
+ // Check if clicking a resize handle
163
+ const handleEl = target.closest(`[data-handle]`);
164
+ if (handleEl && bboxEl?.contains(handleEl)) {
165
+ const sel = store.getState().selectedAnnotation;
166
+ if (sel) {
167
+ const slotEl = bboxEl.closest("[data-page]");
168
+ if (slotEl) {
169
+ startDrag(e, sel.pageIndex, sel.annotationIndex, "resize", handleEl.dataset.handle);
170
+ return;
171
+ }
172
+ }
173
+ }
174
+ // Check if clicking on an annotation
175
+ const annotationEl = target.closest("[data-annotation-index]");
176
+ if (annotationEl) {
177
+ const slotEl = annotationEl.closest("[data-page]");
178
+ if (!slotEl)
179
+ return;
180
+ const pageNum = parseInt(slotEl.dataset.page, 10);
181
+ if (isNaN(pageNum))
182
+ return;
183
+ const annotationIndex = parseInt(annotationEl.getAttribute("data-annotation-index"), 10);
184
+ if (isNaN(annotationIndex))
185
+ return;
186
+ const pageIndex = pageNum - 1;
187
+ const sel = store.getState().selectedAnnotation;
188
+ if (sel && sel.pageIndex === pageIndex && sel.annotationIndex === annotationIndex) {
189
+ startDrag(e, pageIndex, annotationIndex, "move");
190
+ return;
191
+ }
192
+ store.dispatch({ type: "SELECT_ANNOTATION", pageIndex, annotationIndex });
193
+ e.preventDefault();
194
+ e.stopPropagation();
195
+ return;
196
+ }
197
+ // Check if clicking on the bbox inner (for move)
198
+ if (innerEl && (target === innerEl || innerEl.contains(target))) {
199
+ const sel = store.getState().selectedAnnotation;
200
+ if (sel) {
201
+ startDrag(e, sel.pageIndex, sel.annotationIndex, "move");
202
+ return;
203
+ }
204
+ }
205
+ // Clicked outside — deselect
206
+ store.dispatch({ type: "DESELECT_ANNOTATION" });
207
+ }
208
+ function startDrag(e, pageIndex, annotationIndex, mode, handle) {
209
+ const state = store.getState();
210
+ const pointsToPixels = getPointsToPixels(state.dpi);
211
+ const zoom = state.effectiveZoom ?? state.zoom;
212
+ const annotations = state.pageAnnotations.get(pageIndex);
213
+ if (!annotations || annotationIndex >= annotations.length)
214
+ return;
215
+ isDragging = true;
216
+ dragMode = mode;
217
+ dragScale = pointsToPixels * zoom;
218
+ dragStartX = e.clientX;
219
+ dragStartY = e.clientY;
220
+ dragDx = 0;
221
+ dragDy = 0;
222
+ dragAnnotationPageIndex = pageIndex;
223
+ dragAnnotationIndex = annotationIndex;
224
+ dragOriginalBounds = { ...annotations[annotationIndex].bounds };
225
+ dragHandle = handle ?? "se";
226
+ viewerRoot.classList.add(mode === "move" ? MOVING_CLASS : RESIZING_CLASS);
227
+ if (mode === "resize") {
228
+ viewerRoot.style.cursor = HANDLE_CURSORS[dragHandle];
229
+ }
230
+ scrollArea.setPointerCapture(e.pointerId);
231
+ e.preventDefault();
232
+ e.stopPropagation();
233
+ }
234
+ function onPointerMove(e) {
235
+ if (!isDragging)
236
+ return;
237
+ const pxDx = e.clientX - dragStartX;
238
+ const pxDy = e.clientY - dragStartY;
239
+ dragDx = pxDx / dragScale;
240
+ dragDy = pxDy / dragScale;
241
+ if (dragMode === "move") {
242
+ if (innerEl) {
243
+ const b = dragOriginalBounds;
244
+ updateInnerPreview(b, { x: b.x + dragDx, y: b.y + dragDy, width: b.width, height: b.height });
245
+ }
246
+ }
247
+ else {
248
+ // Resize preview
249
+ const newBounds = computeResizedBounds(dragOriginalBounds, dragHandle, dragDx, dragDy);
250
+ updateInnerPreview(dragOriginalBounds, newBounds);
251
+ }
252
+ }
253
+ function onPointerUp(e) {
254
+ if (!isDragging)
255
+ return;
256
+ scrollArea.releasePointerCapture(e.pointerId);
257
+ viewerRoot.classList.remove(MOVING_CLASS);
258
+ viewerRoot.classList.remove(RESIZING_CLASS);
259
+ viewerRoot.style.cursor = "";
260
+ isDragging = false;
261
+ // Check for meaningful movement
262
+ if (Math.abs(dragDx) < 0.5 && Math.abs(dragDy) < 0.5) {
263
+ updateSelectionVisual();
264
+ return;
265
+ }
266
+ const state = store.getState();
267
+ const annotations = state.pageAnnotations.get(dragAnnotationPageIndex);
268
+ if (!annotations || dragAnnotationIndex >= annotations.length)
269
+ return;
270
+ const original = annotations[dragAnnotationIndex];
271
+ let updated;
272
+ if (dragMode === "move") {
273
+ updated = offsetAnnotation(original, dragDx, dragDy);
274
+ }
275
+ else {
276
+ const newBounds = computeResizedBounds(dragOriginalBounds, dragHandle, dragDx, dragDy);
277
+ updated = resizeAnnotation(original, newBounds);
278
+ }
279
+ store.dispatch({
280
+ type: "UPDATE_ANNOTATION",
281
+ pageIndex: dragAnnotationPageIndex,
282
+ annotationIndex: dragAnnotationIndex,
283
+ annotation: updated,
284
+ });
285
+ }
286
+ function onPointerCancel(e) {
287
+ if (!isDragging)
288
+ return;
289
+ scrollArea.releasePointerCapture(e.pointerId);
290
+ viewerRoot.classList.remove(MOVING_CLASS);
291
+ viewerRoot.classList.remove(RESIZING_CLASS);
292
+ viewerRoot.style.cursor = "";
293
+ isDragging = false;
294
+ updateSelectionVisual();
295
+ }
296
+ // =========================================================================
297
+ // Keyboard
298
+ // =========================================================================
299
+ function onKeyDown(e) {
300
+ if (e.key !== "Delete" && e.key !== "Backspace")
301
+ return;
302
+ const tag = e.target.tagName;
303
+ if (tag === "INPUT" || tag === "TEXTAREA" || tag === "SELECT")
304
+ return;
305
+ const sel = store.getState().selectedAnnotation;
306
+ if (!sel)
307
+ return;
308
+ store.dispatch({ type: "REMOVE_ANNOTATION", pageIndex: sel.pageIndex, annotationIndex: sel.annotationIndex });
309
+ e.preventDefault();
310
+ }
311
+ // =========================================================================
312
+ // Activate / deactivate
313
+ // =========================================================================
314
+ function activate() {
315
+ if (active)
316
+ return;
317
+ active = true;
318
+ viewerRoot.classList.add(SELECT_CURSOR_CLASS);
319
+ scrollArea.addEventListener("pointerdown", onPointerDown);
320
+ scrollArea.addEventListener("pointermove", onPointerMove);
321
+ scrollArea.addEventListener("pointerup", onPointerUp);
322
+ scrollArea.addEventListener("pointercancel", onPointerCancel);
323
+ document.addEventListener("keydown", onKeyDown);
324
+ }
325
+ function deactivate() {
326
+ if (!active)
327
+ return;
328
+ active = false;
329
+ viewerRoot.classList.remove(SELECT_CURSOR_CLASS);
330
+ viewerRoot.classList.remove(MOVING_CLASS);
331
+ viewerRoot.classList.remove(RESIZING_CLASS);
332
+ viewerRoot.style.cursor = "";
333
+ scrollArea.removeEventListener("pointerdown", onPointerDown);
334
+ scrollArea.removeEventListener("pointermove", onPointerMove);
335
+ scrollArea.removeEventListener("pointerup", onPointerUp);
336
+ scrollArea.removeEventListener("pointercancel", onPointerCancel);
337
+ document.removeEventListener("keydown", onKeyDown);
338
+ removeBbox();
339
+ isDragging = false;
340
+ }
341
+ function isSelectMode(s) {
342
+ return (s.documentFormat !== null &&
343
+ ANNOTATION_FORMATS.has(s.documentFormat) &&
344
+ isToolSet(s.activeTool) &&
345
+ s.activeSubTool === "select");
346
+ }
347
+ const unsub = store.subscribeRender((_prev, next) => {
348
+ if (isSelectMode(next)) {
349
+ activate();
350
+ if (!isDragging) {
351
+ updateSelectionVisual();
352
+ }
353
+ }
354
+ else {
355
+ deactivate();
356
+ }
357
+ });
358
+ if (isSelectMode(store.getState())) {
359
+ activate();
360
+ }
361
+ function destroy() {
362
+ unsub();
363
+ deactivate();
364
+ }
365
+ return { destroy };
366
+ }
367
+ //# sourceMappingURL=AnnotationSelectController.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AnnotationSelectController.js","sourceRoot":"","sources":["../../../../../src/ui/viewer/tools/AnnotationSelectController.ts"],"names":[],"mappings":"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"}