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",