Show app version in sidebar and split 4-word FirmaEC names in 1.2.26

This commit is contained in:
2026-05-22 14:31:10 -05:00
parent 81bd8d3c59
commit 3c9aefa10e
11 changed files with 44 additions and 12 deletions
+6 -1
View File
@@ -2,10 +2,15 @@
## Versión actual ## Versión actual
- Versión base: `1.2.25` - Versión base: `1.2.26`
## Historial ## Historial
### 1.2.26 - 2026-05-22
- El sidebar web muestra la versión activa junto a `LinkedSign`.
- `FirmaEC` divide nombres de 4 palabras en `2 + 2` dentro del sello visible del PDF.
### 1.2.25 - 2026-05-22 ### 1.2.25 - 2026-05-22
- La firma normal usa las preferencias visuales guardadas del usuario al momento de firmar, evitando que un estado viejo del frontend vuelva a enviar `FirmaEC` con borde. - La firma normal usa las preferencias visuales guardadas del usuario al momento de firmar, evitando que un estado viejo del frontend vuelva a enviar `FirmaEC` con borde.
+1 -1
View File
@@ -2,7 +2,7 @@
## Versión actual ## Versión actual
- Base actual: `1.2.25` - Base actual: `1.2.26`
- Fuente de verdad: [VERSION](/home/mgonzalez/desarrollo/react/linkedsign/VERSION) - Fuente de verdad: [VERSION](/home/mgonzalez/desarrollo/react/linkedsign/VERSION)
- Historial de cambios: [CHANGELOG.md](/home/mgonzalez/desarrollo/react/linkedsign/CHANGELOG.md) - Historial de cambios: [CHANGELOG.md](/home/mgonzalez/desarrollo/react/linkedsign/CHANGELOG.md)
+1 -1
View File
@@ -2,7 +2,7 @@
## Versión actual ## Versión actual
- Base actual: `1.2.25` - Base actual: `1.2.26`
- Fuente de verdad: [VERSION](/home/mgonzalez/desarrollo/react/linkedsign/VERSION) - Fuente de verdad: [VERSION](/home/mgonzalez/desarrollo/react/linkedsign/VERSION)
- Historial de cambios: [CHANGELOG.md](/home/mgonzalez/desarrollo/react/linkedsign/CHANGELOG.md) - Historial de cambios: [CHANGELOG.md](/home/mgonzalez/desarrollo/react/linkedsign/CHANGELOG.md)
+1 -1
View File
@@ -2,7 +2,7 @@
## Versión actual ## Versión actual
- Base actual: `1.2.25` - Base actual: `1.2.26`
- Fuente de verdad: [VERSION](/home/mgonzalez/desarrollo/react/linkedsign/VERSION) - Fuente de verdad: [VERSION](/home/mgonzalez/desarrollo/react/linkedsign/VERSION)
- Historial de cambios: [CHANGELOG.md](/home/mgonzalez/desarrollo/react/linkedsign/CHANGELOG.md) - Historial de cambios: [CHANGELOG.md](/home/mgonzalez/desarrollo/react/linkedsign/CHANGELOG.md)
+1 -1
View File
@@ -1 +1 @@
1.2.25 1.2.26
+2 -2
View File
@@ -18,8 +18,8 @@ android {
applicationId "net.linkedcorp.linkedsign" applicationId "net.linkedcorp.linkedsign"
minSdk 26 minSdk 26
targetSdk 35 targetSdk 35
versionCode 10225 versionCode 10226
versionName "1.2.25" versionName "1.2.26"
buildConfigField "String", "API_BASE_URL", "\"${apiBaseUrl}\"" buildConfigField "String", "API_BASE_URL", "\"${apiBaseUrl}\""
} }
+1 -1
View File
@@ -1,6 +1,6 @@
{ {
"name": "linkedsign-backend", "name": "linkedsign-backend",
"version": "1.2.25", "version": "1.2.26",
"private": true, "private": true,
"description": "Initial backend for LinkedSign", "description": "Initial backend for LinkedSign",
"main": "src/server.js", "main": "src/server.js",
+18 -2
View File
@@ -59,6 +59,23 @@ function wrapToLines(text, font, size, maxWidth, maxLines) {
return lines; return lines;
} }
function getFirmaEcNameLines(signerName, font, size, maxWidth) {
const words = String(signerName || '')
.trim()
.toUpperCase()
.split(/\s+/)
.filter(Boolean);
if (words.length === 4) {
return [
words.slice(0, 2).join(' '),
words.slice(2).join(' '),
].map((line) => truncate(line, font, size, maxWidth));
}
return wrapToLines(words.join(' '), font, size, maxWidth, 2);
}
function buildLocalizedSignatureTimestamp({ locale, timeZone } = {}) { function buildLocalizedSignatureTimestamp({ locale, timeZone } = {}) {
const now = new Date(); const now = new Date();
const normalizedLocale = locale || 'es-EC'; const normalizedLocale = locale || 'es-EC';
@@ -343,9 +360,8 @@ async function drawStyleFirmaEC(pdfDoc, page, sx, sy, sw, sh, { signerName, veri
page.drawText('Firmado electronicamente por:', { x: textX, y: sy + sh - 21, size: 6, font: fReg, color: rgb(0.12, 0.12, 0.14) }); page.drawText('Firmado electronicamente por:', { x: textX, y: sy + sh - 21, size: 6, font: fReg, color: rgb(0.12, 0.12, 0.14) });
// Name — bold, uppercase, word-wrapped up to 2 lines // Name — bold, uppercase, word-wrapped up to 2 lines
const nameUpper = signerName.toUpperCase();
const nameSize = 8.5; const nameSize = 8.5;
const nameLines = wrapToLines(nameUpper, fBold, nameSize, textW, 2); const nameLines = getFirmaEcNameLines(signerName, fBold, nameSize, textW);
nameLines.forEach((line, i) => { nameLines.forEach((line, i) => {
page.drawText(line, { x: textX, y: sy + sh - 34 - (i * 13), size: nameSize, font: fBold, color: rgb(0.05, 0.05, 0.07) }); page.drawText(line, { x: textX, y: sy + sh - 34 - (i * 13), size: nameSize, font: fBold, color: rgb(0.05, 0.05, 0.07) });
}); });
+1 -1
View File
@@ -1,7 +1,7 @@
{ {
"name": "frontend", "name": "frontend",
"private": true, "private": true,
"version": "1.2.25", "version": "1.2.26",
"type": "module", "type": "module",
"scripts": { "scripts": {
"dev": "vite", "dev": "vite",
+2 -1
View File
@@ -3,6 +3,7 @@ import { Link, useNavigate, useLocation } from 'react-router-dom';
import { useAuth } from '../../contexts/AuthContext'; import { useAuth } from '../../contexts/AuthContext';
import { FileText, Shield, PenTool, LayoutDashboard, LogOut, Palette, Menu, X, KeyRound, Users, Settings, ScrollText, Scale } from 'lucide-react'; import { FileText, Shield, PenTool, LayoutDashboard, LogOut, Palette, Menu, X, KeyRound, Users, Settings, ScrollText, Scale } from 'lucide-react';
import ChangePasswordModal from '../ui/ChangePasswordModal'; import ChangePasswordModal from '../ui/ChangePasswordModal';
import packageInfo from '../../../package.json';
const navSections = [ const navSections = [
{ {
@@ -86,7 +87,7 @@ export default function Layout({ children }) {
<img src="/app-icon-96.png" alt="LinkedSign" width="32" height="32" style={{ display: 'block' }} /> <img src="/app-icon-96.png" alt="LinkedSign" width="32" height="32" style={{ display: 'block' }} />
</div> </div>
<div className="sidebar-brand-copy"> <div className="sidebar-brand-copy">
<span>LinkedSign</span> <span>LinkedSign <em>v{packageInfo.version}</em></span>
<small>Firma Electrónica @LinkedCorp</small> <small>Firma Electrónica @LinkedCorp</small>
</div> </div>
<button <button
+10
View File
@@ -134,6 +134,16 @@ select {
font-size: 14px; font-size: 14px;
font-weight: 500; font-weight: 500;
color: var(--c-text); color: var(--c-text);
display: inline-flex;
align-items: baseline;
gap: 6px;
}
.sidebar-brand-copy span em {
font-size: 10px;
font-style: normal;
font-weight: 400;
color: var(--c-muted);
} }
.sidebar-brand-copy small { .sidebar-brand-copy small {