/** * Migración del alto de fila de la grilla. * * El problema. `rowHeight` era 148px y el diseño pide 80. No es un ajuste * cosmético: 148 no tiene granularidad. Una tarjeta de KPI necesita unos * 170px —cifra, sparkline y delta— y con 148 sólo se puede pedir 148 (no cabe) o * 296 (el doble de lo necesario). Con 80: `2 × 80 + 12 = 172`, exacto. * * Por qué no un UPDATE masivo. Cambiar `rowHeight` sin tocar los `row_span` * guardados encogería todos los widgets existentes casi a la mitad. Y un script que * recorra los tenants asume que todos corren la misma versión del kit el mismo día, * que en un producto con muchos clientes no es cierto. * * La salida: perezosa y sellada. La tabla de preferencias ya tiene una * columna `config_json` (jsonb). Se estampa ahí `layoutVersion`. La primera vez que * un usuario abre el tablero, las filas sin sello se convierten en memoria y el * sello viaja en el siguiente guardado. Sin cambios de esquema, sin tocar el * contrato del paquete NuGet, idempotente, y cada cliente migra cuando le llega su * versión. */ /** Alto de fila anterior. */ export declare const LEGACY_ROW_HEIGHT = 148; /** Alto de fila actual. */ export declare const ROW_HEIGHT = 80; /** Versión del formato de layout. Subirla obliga a una nueva conversión. */ export declare const LAYOUT_VERSION = 2; interface MigratablePreference { row_span: number; config_json?: Record | null; } /** * Convierte una preferencia al formato actual si aún no lo está. * * Devuelve el mismo objeto —por referencia— cuando no hay nada que hacer, para que * React no vea un cambio donde no lo hubo. */ export declare function migratePreference(preference: T): T; /** Aplica la conversión a un layout completo. */ export declare function migrateLayout(layout: T[]): T[]; /** Si un layout tiene alguna fila pendiente de convertir. */ export declare function needsMigration(layout: T[]): boolean; export {}; //# sourceMappingURL=layoutMigration.d.ts.map