/**
* Tipos base y genéricos para el Dashboard Engine.
* Estos tipos NO están acoplados a ningún módulo de negocio específico (Comercial, RRHH, etc.).
*/
export interface WidgetDefinitionBase {
widget_id: string;
nombre: string;
descripcion: string;
categoria: string;
tipo: string;
icono: string;
col_min: number;
col_max: number;
altura_default: number;
cols_default: number;
orden_default?: number;
activo?: boolean;
/**
* 🔴 **Quién es el dueño, si lo hay.** El dato ya viajaba —el catálogo lo manda— pero el tipo no
* lo admitía, así que quien lo consumiera desde aquí lo veía `undefined` SIEMPRE.
*
* Importa porque es lo único que distingue un **tablero personal** de un **sembrado**: con
* dueño, «privado» se lo reserva a esa persona y el administrador no entra; sin dueño no hay a
* quién reservárselo, y lo ven todos los administradores de esa vertical. Declararlo `undefined`
* por omisión hacía que el diálogo de acceso rotulara un tablero personal como «solo
* administradores» — exactamente al revés.
*/
propietario_id?: string | null;
/**
* Lo que ESTE usuario puede hacer con ESTE widget, ya resuelto por el servidor. Opcional: un host
* cuyo backend no evalue acceso por instancia no lo manda.
*
* Vive tambien aqui —y no solo en `WidgetDefinition`— porque el contenedor de la tarjeta recibe
* esta vista mas estrecha, y es el que decide si ofrece el boton de acceso.
*/
permissions?: WidgetVerbFlags;
}
/**
* Los verbos de un widget, con TODOS los campos opcionales.
*
* ⚠️ **Y es a proposito que sea esta forma y no un `Record`.** Una interfaz sin
* indice no es asignable a un Record en TypeScript, asi que declararlo asi rompia la asignacion de
* `WidgetDefinition` —cuyos verbos son obligatorios— a esta vista mas estrecha, y con ella media
* docena de sitios del motor. Con los campos opcionales la relacion es la correcta en los dos
* sentidos: la forma completa satisface a la laxa, y la laxa sirve para leer una bandera.
*/
export interface WidgetVerbFlags {
can_view?: boolean;
can_edit?: boolean;
can_delete?: boolean;
can_share?: boolean;
can_publish?: boolean;
}
export interface UserWidgetPreferenceBase {
id: string;
widget_id: string;
activo: boolean;
orden?: number;
col_span: number;
row_span: number;
pos_x: number;
pos_y: number;
config_json?: Record;
}
export interface BaseWidgetProps {
preference: TPreference;
definition: TDefinition;
isEditMode: boolean;
globalFilters: Record;
onConfigChange?: (newConfig: Record) => void;
}
//# sourceMappingURL=types.d.ts.map