From 91fd49023cc9327601978b09117e4e9452395606 Mon Sep 17 00:00:00 2001
From: Vitor Mattos <1079143+vitormattos@users.noreply.github.com>
Date: Sat, 31 Jan 2026 18:39:23 -0300
Subject: [PATCH 1/2] feat: revert element-clicked event emission from
DraggableElement
This change reverts the element-clicked event emission to avoid modifying
the external pdf-elements component directly. The event handling logic
is now implemented at the consumer side in LibreSign, using event
delegation instead.
The DraggableElement component remains unchanged and clean, following
the principle of minimal modifications to external dependencies.
Signed-off-by: Vitor Mattos <1079143+vitormattos@users.noreply.github.com>
---
src/components/PDFElements.vue | 48 ++++++++++++++++++++++++++++++++++
1 file changed, 48 insertions(+)
diff --git a/src/components/PDFElements.vue b/src/components/PDFElements.vue
index e24e883..99d3f28 100644
--- a/src/components/PDFElements.vue
+++ b/src/components/PDFElements.vue
@@ -25,6 +25,8 @@ SPDX-License-Identifier: AGPL-3.0-or-later
class="overlay"
@mousemove="handleMouseMove"
@touchmove="handleMouseMove"
+ @click="handleOverlayClick(docIndex, pIndex, $event)"
+ @touchend="handleOverlayClick(docIndex, pIndex, $event)"
>
[],
@@ -651,6 +657,48 @@ export default {
this.previewVisible = true
})
},
+ handleOverlayClick(docIndex, pageIndex, event) {
+ if (!this.emitObjectClick) return
+
+ const { x: clientX, y: clientY } = this.getPointerPosition(event)
+ if (!Number.isFinite(clientX) || !Number.isFinite(clientY)) return
+
+ this.cachePageBoundsForPage(docIndex, pageIndex)
+ const pageRect = this.getPageRect(docIndex, pageIndex)
+ if (!pageRect) return
+
+ const pagesScale = this.getDisplayedPageScale(docIndex, pageIndex) || 1
+ const relX = (clientX - pageRect.left) / pagesScale
+ const relY = (clientY - pageRect.top) / pagesScale
+
+ const doc = this.pdfDocuments?.[docIndex]
+ const pageObjects = doc?.allObjects?.[pageIndex] || []
+ let hitObject = null
+
+ for (let i = pageObjects.length - 1; i >= 0; i--) {
+ const object = pageObjects[i]
+ const x = Number(object.x)
+ const y = Number(object.y)
+ const width = Number(object.width)
+ const height = Number(object.height)
+ if (![x, y, width, height].every(Number.isFinite)) {
+ continue
+ }
+ if (relX >= x && relX <= x + width && relY >= y && relY <= y + height) {
+ hitObject = object
+ break
+ }
+ }
+
+ if (!hitObject) return
+
+ this.$emit('pdf-elements:object-click', {
+ docIndex,
+ pageIndex,
+ object: hitObject,
+ event,
+ })
+ },
handleKeyDown(event) {
if (event.key === 'Escape' && this.isAddingMode) {
From a3c874a7f93ac78aea58dbfb820b7b1d24cafbf8 Mon Sep 17 00:00:00 2001
From: Vitor Mattos <1079143+vitormattos@users.noreply.github.com>
Date: Sat, 31 Jan 2026 18:48:48 -0300
Subject: [PATCH 2/2] chore: bump version
Signed-off-by: Vitor Mattos <1079143+vitormattos@users.noreply.github.com>
---
package.json | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/package.json b/package.json
index fce8460..d8a5a9a 100644
--- a/package.json
+++ b/package.json
@@ -1,7 +1,7 @@
{
"name": "@libresign/pdf-elements",
"description": "PDF viewer with draggable and resizable element overlays for Vue 2",
- "version": "0.3.1",
+ "version": "0.4.0",
"author": "LibreCode ",
"private": false,
"main": "dist/pdf-elements.umd.js",