diff --git a/CHANGELOG.md b/CHANGELOG.md index da6f769..0f5ad7b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,10 +2,14 @@ ## Versión actual -- Versión base: `1.2.21` +- Versión base: `1.2.22` ## Historial +### 1.2.22 - 2026-05-22 + +- `FirmaEC` deja de mostrar líneas de borde y separadores cuando la preferencia está en `Sin borde`, tanto al colocar la firma como en el PDF final. + ### 1.2.21 - 2026-05-22 - `FirmaEC` respeta la opción `Sin borde` tanto en la vista previa web como en la firma visible del PDF. diff --git a/DEPLOY_ANDROID.md b/DEPLOY_ANDROID.md index c307730..8facafa 100644 --- a/DEPLOY_ANDROID.md +++ b/DEPLOY_ANDROID.md @@ -2,7 +2,7 @@ ## Versión actual -- Base actual: `1.2.21` +- Base actual: `1.2.22` - Fuente de verdad: [VERSION](/home/mgonzalez/desarrollo/react/linkedsign/VERSION) - Historial de cambios: [CHANGELOG.md](/home/mgonzalez/desarrollo/react/linkedsign/CHANGELOG.md) diff --git a/DEPLOY_WEB.md b/DEPLOY_WEB.md index b035b2b..6b6ac9c 100644 --- a/DEPLOY_WEB.md +++ b/DEPLOY_WEB.md @@ -2,7 +2,7 @@ ## Versión actual -- Base actual: `1.2.21` +- Base actual: `1.2.22` - Fuente de verdad: [VERSION](/home/mgonzalez/desarrollo/react/linkedsign/VERSION) - Historial de cambios: [CHANGELOG.md](/home/mgonzalez/desarrollo/react/linkedsign/CHANGELOG.md) diff --git a/PRODUCCION.md b/PRODUCCION.md index f83ff26..063ef1a 100644 --- a/PRODUCCION.md +++ b/PRODUCCION.md @@ -2,7 +2,7 @@ ## Versión actual -- Base actual: `1.2.21` +- Base actual: `1.2.22` - Fuente de verdad: [VERSION](/home/mgonzalez/desarrollo/react/linkedsign/VERSION) - Historial de cambios: [CHANGELOG.md](/home/mgonzalez/desarrollo/react/linkedsign/CHANGELOG.md) diff --git a/VERSION b/VERSION index 9728bd6..9a83513 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -1.2.21 +1.2.22 diff --git a/android/app/build.gradle b/android/app/build.gradle index 6175499..68b7905 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -18,8 +18,8 @@ android { applicationId "net.linkedcorp.linkedsign" minSdk 26 targetSdk 35 - versionCode 10221 - versionName "1.2.21" + versionCode 10222 + versionName "1.2.22" buildConfigField "String", "API_BASE_URL", "\"${apiBaseUrl}\"" } diff --git a/backend/package.json b/backend/package.json index ac5241b..6fb5307 100644 --- a/backend/package.json +++ b/backend/package.json @@ -1,6 +1,6 @@ { "name": "linkedsign-backend", - "version": "1.2.21", + "version": "1.2.22", "private": true, "description": "Initial backend for LinkedSign", "main": "src/server.js", diff --git a/backend/src/modules/signing/signing.service.js b/backend/src/modules/signing/signing.service.js index 37a4814..2b29af1 100644 --- a/backend/src/modules/signing/signing.service.js +++ b/backend/src/modules/signing/signing.service.js @@ -301,9 +301,11 @@ async function drawStyleFirmaEC(pdfDoc, page, sx, sy, sw, sh, { signerName, veri const qrY = sy + (sh - qrSize) / 2; page.drawImage(qrImage, { x: qrX, y: qrY, width: qrSize, height: qrSize }); - // Vertical divider + // Vertical divider belongs to the bordered variant only. const divX = qrOnRight ? qrX - 4 : sx + qrSize + 8; - page.drawLine({ start: { x: divX, y: sy + 6 }, end: { x: divX, y: sy + sh - 6 }, thickness: 0.5, color: rgb(0.55, 0.55, 0.58) }); + if (useBorder) { + page.drawLine({ start: { x: divX, y: sy + 6 }, end: { x: divX, y: sy + sh - 6 }, thickness: 0.5, color: rgb(0.55, 0.55, 0.58) }); + } // Text column const textX = qrOnRight ? sx + 6 : divX + 5; diff --git a/frontend/package.json b/frontend/package.json index b582f9b..0da2527 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -1,7 +1,7 @@ { "name": "frontend", "private": true, - "version": "1.2.21", + "version": "1.2.22", "type": "module", "scripts": { "dev": "vite", diff --git a/frontend/src/components/ui/PdfSignaturePlacer.jsx b/frontend/src/components/ui/PdfSignaturePlacer.jsx index 0d7995d..49849b0 100644 --- a/frontend/src/components/ui/PdfSignaturePlacer.jsx +++ b/frontend/src/components/ui/PdfSignaturePlacer.jsx @@ -13,7 +13,7 @@ const SIG_W = 200; const SIG_H = 60; const getSignatureWidth = (style, signerName = '') => { - if (style !== 'qr') return SIG_W; + if (style !== 'qr' && style !== 'firmaec') return SIG_W; const normalizedName = signerName.trim(); const calculatedWidth = 78 + (normalizedName.length * 4.9); return Math.max(170, Math.min(270, Math.round(calculatedWidth))); @@ -162,6 +162,34 @@ export default function PdfSignaturePlacer({ ); } + if (signatureStyle === 'firmaec') { + return ( +
+ {qrPosition === 'left' && ( + <> +
+
+
+ {qrBorder === 'line' &&
} + + )} +
+ Validar unicamente en FirmaEC. + Firmado electronicamente por: + {String(signerName).toUpperCase()} +
+ {qrPosition === 'right' && ( + <> + {qrBorder === 'line' &&
} +
+
+
+ + )} +
+ ); + } + if (signatureStyle === 'image') { return (
diff --git a/frontend/src/components/ui/SignatureStylePicker.jsx b/frontend/src/components/ui/SignatureStylePicker.jsx index 9532c4c..95d536c 100644 --- a/frontend/src/components/ui/SignatureStylePicker.jsx +++ b/frontend/src/components/ui/SignatureStylePicker.jsx @@ -54,7 +54,7 @@ const STYLES = [ Escanear
-
+ {qrBorder === 'line' &&
} )}
@@ -64,7 +64,7 @@ const STYLES = [
{qrPosition === 'right' && ( <> -
+ {qrBorder === 'line' &&
}
{[0,1,2,3,4,5,6,7,8,9].map(r => @@ -110,7 +110,7 @@ const STYLES = [
-
+ {qrBorder === 'line' &&
} )}
@@ -120,7 +120,7 @@ const STYLES = [
{qrPosition === 'right' && ( <> -
+ {qrBorder === 'line' &&
}
{[0,1,2,3,4,5,6,7,8,9].map(r => diff --git a/frontend/src/index.css b/frontend/src/index.css index 902bd87..d912829 100644 --- a/frontend/src/index.css +++ b/frontend/src/index.css @@ -1917,6 +1917,33 @@ select { overflow: hidden; font-family: 'Courier New', Courier, monospace; } +.sig-preview-body--firmaec { + display: flex; + align-items: center; + gap: 8px; + height: 100%; +} +.sig-preview-qr-box--firmaec { + background: #fff; +} +.sig-preview-qr-pattern--firmaec { + background: + linear-gradient(90deg, #111 20%, transparent 20% 40%, #111 40% 60%, transparent 60% 80%, #111 80%), + linear-gradient(#111 20%, transparent 20% 40%, #111 40% 60%, transparent 60% 80%, #111 80%); + opacity: 0.9; +} +.sig-preview-text--firmaec { + font-family: 'Courier New', Courier, monospace; + gap: 3px; +} +.sig-preview-text--firmaec strong { + text-transform: uppercase; +} +.sig-preview-divider { + width: 1px; + height: 70%; + background: rgba(85, 85, 88, 0.58); +} .sig-preview--image { display: flex; align-items: stretch; diff --git a/frontend/src/pages/signatures/SignaturesPage.jsx b/frontend/src/pages/signatures/SignaturesPage.jsx index a333a44..8212a10 100644 --- a/frontend/src/pages/signatures/SignaturesPage.jsx +++ b/frontend/src/pages/signatures/SignaturesPage.jsx @@ -316,9 +316,9 @@ export default function SignaturesPage() {

Estilo aplicado

La firma usará tu configuración guardada en el menú Estilo Firma.

Tipo: {form.signatureStyle}

- {form.signatureStyle === 'qr' &&

Posición QR: {form.qrPosition === 'left' ? 'Izquierda' : 'Derecha'}

} - {form.signatureStyle === 'qr' &&

Fondo: {form.qrBackground === 'transparent' ? 'Transparente' : 'Suave'}

} - {form.signatureStyle === 'qr' &&

Borde: {form.qrBorder === 'none' ? 'Sin borde' : 'Con borde'}

} + {(form.signatureStyle === 'qr' || form.signatureStyle === 'firmaec') &&

Posición QR: {form.qrPosition === 'left' ? 'Izquierda' : 'Derecha'}

} + {(form.signatureStyle === 'qr' || form.signatureStyle === 'firmaec') &&

Fondo: {form.qrBackground === 'transparent' ? 'Transparente' : 'Suave'}

} + {(form.signatureStyle === 'qr' || form.signatureStyle === 'firmaec') &&

Borde: {form.qrBorder === 'none' ? 'Sin borde' : 'Con borde'}

}
)} @@ -425,9 +425,9 @@ export default function SignaturesPage() {

Razón: {form.reason}

{form.location &&

Ubicación: {form.location}

}

Estilo visual: {form.signatureStyle}

- {form.signatureStyle === 'qr' &&

Posición QR: {form.qrPosition === 'left' ? 'Izquierda' : 'Derecha'}

} - {form.signatureStyle === 'qr' &&

Fondo: {form.qrBackground === 'transparent' ? 'Transparente' : 'Suave'}

} - {form.signatureStyle === 'qr' &&

Borde: {form.qrBorder === 'none' ? 'Sin borde' : 'Con borde'}

} + {(form.signatureStyle === 'qr' || form.signatureStyle === 'firmaec') &&

Posición QR: {form.qrPosition === 'left' ? 'Izquierda' : 'Derecha'}

} + {(form.signatureStyle === 'qr' || form.signatureStyle === 'firmaec') &&

Fondo: {form.qrBackground === 'transparent' ? 'Transparente' : 'Suave'}

} + {(form.signatureStyle === 'qr' || form.signatureStyle === 'firmaec') &&

Borde: {form.qrBorder === 'none' ? 'Sin borde' : 'Con borde'}

} )}