fix: Corregir alineación y espaciado en visualizador de papel
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 36s
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 36s
- Fijar ancho del papel a 33ch (referencia Font A) - Agregar transform-origin basado en alineación (left/center/right) - Reducir interlineado (line-height 1.2, margins ajustados) - Compensar altura visual de elementos con doble alto
This commit is contained in:
@@ -11,11 +11,11 @@ const emit = defineEmits<{
|
||||
'edit-variable': [variableName: string, currentValue: string]
|
||||
}>()
|
||||
|
||||
// Ancho del papel según la fuente (agregamos padding extra)
|
||||
// Ancho del papel FIJO basado en Font A (33ch) como referencia
|
||||
// Font B se escala para caber en el mismo ancho físico
|
||||
const paperWidth = computed(() => {
|
||||
// Usamos calc para agregar espacio para el padding interno + margen para doble ancho
|
||||
const chars = props.font === 'font_b' ? 40 : 33
|
||||
return `calc(${chars}ch + 80px)` // 40px padding cada lado para acomodar doble ancho
|
||||
// Siempre usamos 33ch (Font A) como referencia para mantener alineaciones consistentes
|
||||
return `calc(33ch + 80px)` // 40px padding cada lado para acomodar doble ancho
|
||||
})
|
||||
|
||||
// Obtener clases CSS para el contenido de una línea (sin alineación, eso va en el padre)
|
||||
@@ -86,7 +86,7 @@ function handleVariableClick(segment: TextSegment) {
|
||||
.paper-simulator {
|
||||
font-family: 'Courier New', Courier, monospace;
|
||||
font-size: 14px;
|
||||
line-height: 1.4;
|
||||
line-height: 1.2;
|
||||
background: linear-gradient(to bottom, #fefefe 0%, #f8f8f8 100%);
|
||||
border: 1px solid #ddd;
|
||||
border-radius: 4px;
|
||||
@@ -113,7 +113,7 @@ function handleVariableClick(segment: TextSegment) {
|
||||
/* Cada línea del ticket - usa flexbox para alineación */
|
||||
.line {
|
||||
display: flex;
|
||||
min-height: 1.4em;
|
||||
min-height: 1.2em;
|
||||
color: #1a1a1a;
|
||||
}
|
||||
|
||||
@@ -136,56 +136,82 @@ function handleVariableClick(segment: TextSegment) {
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
/* Font B - caracteres más angostos (40 chars vs 33) */
|
||||
.line-content.font-b {
|
||||
transform: scaleX(0.825);
|
||||
}
|
||||
/* ========================================
|
||||
TRANSFORMS BASE (sin considerar alineación)
|
||||
======================================== */
|
||||
|
||||
/* Font B con doble ancho */
|
||||
.line-content.font-b.text-double-width {
|
||||
transform: scaleX(1.65); /* 0.825 * 2 */
|
||||
}
|
||||
/* Font A - Normal (sin transform) */
|
||||
/* Font A es la referencia base, no necesita scaling */
|
||||
|
||||
/* Font B con doble alto */
|
||||
.line-content.font-b.text-double-height {
|
||||
transform: scaleX(0.825) scaleY(2);
|
||||
}
|
||||
|
||||
/* Font B con doble ancho Y alto */
|
||||
.line-content.font-b.text-double-width.text-double-height {
|
||||
transform: scale(1.65, 2);
|
||||
}
|
||||
|
||||
/* Transform origin para líneas centradas - permite que scale funcione correctamente con flexbox center */
|
||||
.align-center .line-content.font-b.text-double-width,
|
||||
.align-center .line-content.font-b.text-double-height,
|
||||
.align-center .line-content.font-b.text-double-width.text-double-height,
|
||||
.align-center .line-content.text-double-width,
|
||||
.align-center .line-content.text-double-height,
|
||||
.align-center .line-content.text-double-width.text-double-height {
|
||||
transform-origin: center;
|
||||
}
|
||||
|
||||
/* Línea vacía (feed) */
|
||||
.line-feed {
|
||||
height: 1.4em;
|
||||
}
|
||||
|
||||
/* Doble ancho - escalar horizontalmente (Font A) */
|
||||
/* Font A - Doble ancho */
|
||||
.line-content.text-double-width {
|
||||
transform: scaleX(2);
|
||||
}
|
||||
|
||||
/* Doble alto - escalar verticalmente (Font A) */
|
||||
/* Font A - Doble alto */
|
||||
.line-content.text-double-height {
|
||||
transform: scaleY(2);
|
||||
transform-origin: top;
|
||||
}
|
||||
|
||||
/* Doble ancho Y alto combinados (Font A) */
|
||||
/* Font A - Doble ancho Y alto */
|
||||
.line-content.text-double-width.text-double-height {
|
||||
transform: scale(2, 2);
|
||||
transform-origin: top left;
|
||||
}
|
||||
|
||||
/* Font B - Normal (33/40 = 0.825 para caber en mismo ancho de papel) */
|
||||
.line-content.font-b {
|
||||
transform: scaleX(0.825);
|
||||
}
|
||||
|
||||
/* Font B - Doble ancho (0.825 * 2 = 1.65) */
|
||||
.line-content.font-b.text-double-width {
|
||||
transform: scaleX(1.65);
|
||||
}
|
||||
|
||||
/* Font B - Doble alto */
|
||||
.line-content.font-b.text-double-height {
|
||||
transform: scaleX(0.825) scaleY(2);
|
||||
}
|
||||
|
||||
/* Font B - Doble ancho Y alto */
|
||||
.line-content.font-b.text-double-width.text-double-height {
|
||||
transform: scale(1.65, 2);
|
||||
}
|
||||
|
||||
/* ========================================
|
||||
TRANSFORM-ORIGIN SEGÚN ALINEACIÓN
|
||||
Para que el punto de anclaje sea consistente
|
||||
======================================== */
|
||||
|
||||
/* IZQUIERDA: el texto se ancla a la izquierda */
|
||||
.align-left .line-content {
|
||||
transform-origin: left top;
|
||||
}
|
||||
|
||||
/* CENTRO: el texto se ancla al centro */
|
||||
.align-center .line-content {
|
||||
transform-origin: center top;
|
||||
}
|
||||
|
||||
/* DERECHA: el texto se ancla a la derecha */
|
||||
.align-right .line-content {
|
||||
transform-origin: right top;
|
||||
}
|
||||
|
||||
/* ========================================
|
||||
COMPENSACIÓN DE ALTURA PARA DOBLE ALTO
|
||||
El scaleY(2) expande visualmente pero no afecta layout,
|
||||
agregamos margen para compensar el espacio extra
|
||||
======================================== */
|
||||
|
||||
/* Doble alto ocupa 2x el espacio vertical */
|
||||
.line-content.text-double-height {
|
||||
margin-bottom: 0.6em; /* Espacio reducido para doble alto */
|
||||
}
|
||||
|
||||
/* Línea vacía (feed) */
|
||||
.line-feed {
|
||||
height: 1.2em;
|
||||
}
|
||||
|
||||
/* Línea que excede el límite */
|
||||
|
||||
Reference in New Issue
Block a user