/** * Contrato de marca de un QR, compartido entre backend y frontend (ADR-078). * * Espejo TypeScript de `backend/go/services/pkg/qrbrand/qrbrand.go`. Los tests * de contraste de este archivo usan LOS MISMOS casos que el lado Go * (`qrbrand_test.go`) — si un lado cambia el número esperado sin el otro, * dejan de coincidir. * * No dibuja nada: valida que una combinación de colores sea escaneable y * decide cuánta corrección de errores necesita un QR que lleva logo encima. * El renderizado real sigue siendo QrGeneratorService (cliente) y qrpng.go * (backend, correo) — cada uno dibuja a su manera; lo que comparten es esta * validación. */ export type QrBrandDotStyle = 'square' | 'rounded' | 'dots'; export type QrBrandErrorCorrection = 'L' | 'M' | 'Q' | 'H'; export interface QrBrandLogo { assetId: string; /** Fracción del QR (0–1) que el logo tapa en el centro. */ clearArea?: number; } export interface QrBrand { orgId: string; appId: string; ink: string; bg: string; dotStyle?: QrBrandDotStyle; logo?: QrBrandLogo; } /** Sin marca configurada: tinta sobre blanco. Nunca se persiste. */ export declare function defaultQrBrand(orgId: string, appId: string): QrBrand; export declare class QrBrandValidationError extends Error { readonly field: string; constructor(field: string, message: string); } /** Contraste WCAG entre dos colores hex (#RRGGBB). Fórmula estándar (L1+0.05)/(L2+0.05). */ export declare function qrContrastRatio(hexA: string, hexB: string): number; /** * Rechaza una combinación de colores que un lector real no va a poder leer. * Escaneabilidad sobre estética: esta función no negocia (ADR-078 regla 1). * Lanza QrBrandValidationError; no retorna un booleano — el caller casi * siempre necesita el mensaje para mostrarlo en el formulario. */ export declare function validateQrBrand(b: QrBrand): void; /** * El logo obliga a subir la corrección de errores, no se le pregunta al * usuario (ADR-078 regla 2). Sin logo, M alcanza. Con logo, sube a Q; con * logo grande (>15% del área), sube al máximo H. */ export declare function qrErrorCorrectionFor(b: QrBrand): QrBrandErrorCorrection;