@libresign/pdf-elements 0.3.1 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@libresign/pdf-elements",
3
3
  "description": "PDF viewer with draggable and resizable element overlays for Vue 2",
4
- "version": "0.3.1",
4
+ "version": "0.4.0",
5
5
  "author": "LibreCode <contact@librecode.coop>",
6
6
  "private": false,
7
7
  "main": "dist/pdf-elements.umd.js",
@@ -25,6 +25,8 @@ SPDX-License-Identifier: AGPL-3.0-or-later
25
25
  class="overlay"
26
26
  @mousemove="handleMouseMove"
27
27
  @touchmove="handleMouseMove"
28
+ @click="handleOverlayClick(docIndex, pIndex, $event)"
29
+ @touchend="handleOverlayClick(docIndex, pIndex, $event)"
28
30
  >
29
31
  <div
30
32
  v-if="isAddingMode && previewPageDocIndex === docIndex && previewPageIndex === pIndex && previewElement && previewVisible"
@@ -194,6 +196,10 @@ export default {
194
196
  type: Boolean,
195
197
  default: false,
196
198
  },
199
+ emitObjectClick: {
200
+ type: Boolean,
201
+ default: false,
202
+ },
197
203
  ignoreClickOutsideSelectors: {
198
204
  type: Array,
199
205
  default: () => [],
@@ -651,6 +657,48 @@ export default {
651
657
  this.previewVisible = true
652
658
  })
653
659
  },
660
+ handleOverlayClick(docIndex, pageIndex, event) {
661
+ if (!this.emitObjectClick) return
662
+
663
+ const { x: clientX, y: clientY } = this.getPointerPosition(event)
664
+ if (!Number.isFinite(clientX) || !Number.isFinite(clientY)) return
665
+
666
+ this.cachePageBoundsForPage(docIndex, pageIndex)
667
+ const pageRect = this.getPageRect(docIndex, pageIndex)
668
+ if (!pageRect) return
669
+
670
+ const pagesScale = this.getDisplayedPageScale(docIndex, pageIndex) || 1
671
+ const relX = (clientX - pageRect.left) / pagesScale
672
+ const relY = (clientY - pageRect.top) / pagesScale
673
+
674
+ const doc = this.pdfDocuments?.[docIndex]
675
+ const pageObjects = doc?.allObjects?.[pageIndex] || []
676
+ let hitObject = null
677
+
678
+ for (let i = pageObjects.length - 1; i >= 0; i--) {
679
+ const object = pageObjects[i]
680
+ const x = Number(object.x)
681
+ const y = Number(object.y)
682
+ const width = Number(object.width)
683
+ const height = Number(object.height)
684
+ if (![x, y, width, height].every(Number.isFinite)) {
685
+ continue
686
+ }
687
+ if (relX >= x && relX <= x + width && relY >= y && relY <= y + height) {
688
+ hitObject = object
689
+ break
690
+ }
691
+ }
692
+
693
+ if (!hitObject) return
694
+
695
+ this.$emit('pdf-elements:object-click', {
696
+ docIndex,
697
+ pageIndex,
698
+ object: hitObject,
699
+ event,
700
+ })
701
+ },
654
702
 
655
703
  handleKeyDown(event) {
656
704
  if (event.key === 'Escape' && this.isAddingMode) {