import type { LayoutBannerTone, ReceiptLayout } from './layout.js'; import type { PosPaperSize } from '../printing/escpos.js'; /** * Zeichenraster: der Beleg als Zeilen mit **exakt N Zeichen** -- die einzige * Wahrheit fuer Bildschirm, Bondruck und PDF. Kein Ausgabeweg rechnet * Spalten selbst; wer das Raster setzt, setzt den Beleg. * * Regeln (fest, damit ueberall dasselbe herauskommt): * - Papier 58 mm = 32 Zeichen, 80 mm = 48 (Font A); andere Breiten per Option. * - Spalten in Zwoelfteln -> ganze Zeichen: `floor(N*w/12)`, der Rest an die * letzte Spalte, jede mindestens 1. Zwischen zwei Spalten steht immer * mindestens ein Leerzeichen (letztes Zeichen jeder nicht-letzten Spalte). * Die letzte Spalte endet buendig am rechten Rand. * - Text/Aufdruck/Spalteninhalt bricht **wortweise** um (`wrapText`, * dieselbe Regel wie der ESC/POS-Kern); ueberlange Woerter nach einem * Bindestrich, sonst hart; geschuetztes Leerzeichen bricht nie. * - Fliessregel: laeuft in einer Spaltenzeile nur eine Spalte ueber die erste * Zeile hinaus, bekommt ihr Rest die volle Breite (lange Artikelnamen auf * 58 mm); laufen mehrere weiter, bleibt das Raster. * - Trennlinie ueber die volle Breite, Leerraum als Leerzeilen, QR als eigene * Zeile mit Nutzlast (der Zeichner setzt das Bild). */ export declare const CHARS_PER_PAPER_SIZE: Readonly>; export type GridLineKind = 'text' | 'columns' | 'rule' | 'space' | 'qr' | 'banner'; export interface GridLine { /** Genau `charsPerLine` Zeichen (bei `qr`: zentrierter Platzhalter). */ text: string; kind: GridLineKind; bold: boolean; /** Bei `banner` (Rahmen- und Textzeilen): `warning` = Testkasse/Testsignatur, `receipt_type` = Storno, Nullbeleg … */ tone?: LayoutBannerTone; /** Bei `qr`: die Nutzlast. */ qr?: string; } export interface ReceiptGrid { lines: GridLine[]; charsPerLine: number; } export interface RenderReceiptGridOptions { /** Zeichen je Zeile; Vorgabe nach `layout.paperSize` (32/48). */ charsPerLine?: number; } /** Zwoelftel -> Zeichen je Spalte (ganze Zeichen, Rest an die letzte, mindestens 1). */ export declare function gridColumnWidths(twelfths: readonly number[], chars: number): number[]; export declare function renderReceiptGrid(layout: ReceiptLayout, options?: RenderReceiptGridOptions): ReceiptGrid; /** Klartext (eine Zeile je Rasterzeile) -- fuer Golden-Dateien und Logs. QR als Platzhalter. */ export declare function gridToText(grid: ReceiptGrid): string;