/**
* 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