import { ElementRef, OnDestroy, TemplateRef } from '@angular/core'; import { TsiColumnDefDirective } from '../../../directivas/tables/tsi-column-def.directive'; import { CdkDragDrop } from '@angular/cdk/drag-drop'; import { SelectedRow } from '../../../models/selected-row'; import { CellRender, CellRendered } from '../../../models/cell-rendered'; import { TableData } from '../../../models/table-data.model'; import * as i0 from "@angular/core"; /** * Tabla con virtual scroll nativo (sin librerías externas). * Solo renderiza las filas visibles + un buffer. Header y footer son sticky. * * @Input columns - Array de columnas con la misma forma que table-simple * @Input rows - Array completo de datos * @Input rowHeight - Alto fijo de cada fila en px. Si es 0 (default) se resuelve por variante: 42 modern, 30 standard * @Input buffer - Filas extra renderizadas fuera del viewport (default: 10) * @Input altoContainer - Alto fijo del contenedor en px (default: 400). Se ignora si se usa altoContenedor. * @Input altoContenedor - Offset desde el top del viewport en px. Activa height: clamp(minAlto, calc(100vh - offset), 100vh). * @Input minAlto - Altura mínima en px cuando se usa altoContenedor (default: 200) * @Input footerRows - Filas del footer (totales, resumen, etc.) * @Input identifier - Campos que forman la clave para selectedRow * @Input withFiltro - Muestra input de búsqueda local * @Input withDetails - Muestra detalles expandibles por fila * @Input withCheckbox - Muestra checkbox para selección de filas * @Input withTotal - Muestra fila de totales en el footer */ /** Configuración de orden/visibilidad de una columna, tal como se emite y se puede recibir de vuelta */ export interface ColumnConfigItem { fieldname: string; visible: boolean; order: number; } export declare class TableUltimateComponent implements OnDestroy { scrollContainer: import("@angular/core").Signal>; customActions: import("@angular/core").Signal>; columnDefs: import("@angular/core").Signal; columnDefMap: import("@angular/core").Signal>>; private formateador; rows: import("@angular/core").InputSignal; columns: import("@angular/core").InputSignal; footerRows: import("@angular/core").InputSignal; rowHeight: import("@angular/core").InputSignal; buffer: import("@angular/core").InputSignal; altoContainer: import("@angular/core").InputSignal; altoContenedor: import("@angular/core").InputSignal; minAlto: import("@angular/core").InputSignal; identifier: import("@angular/core").InputSignal; withFiltro: import("@angular/core").InputSignal; withDetails: import("@angular/core").InputSignal; withCheckbox: import("@angular/core").InputSignal; withTotal: import("@angular/core").InputSignal; withHeight: import("@angular/core").InputSignal; withAttachment: import("@angular/core").InputSignal; variante: import("@angular/core").InputSignal<"modern" | "standard">; rendered: import("@angular/core").InputSignal; dragOverRowId: import("@angular/core").WritableSignal; titleTabla: import("@angular/core").InputSignal; activeMobileMode: import("@angular/core").InputSignal; isLoadingResponsive: import("@angular/core").WritableSignal; isMobile: import("@angular/core").WritableSignal; contentFilter: import("@angular/core").Signal>; rowEvent: import("@angular/core").OutputEmitterRef; selectedRow: import("@angular/core").ModelSignal; rowClassFn: import("@angular/core").InputSignal<(row: any) => string | string[] | Record>; rowDisabledFn: import("@angular/core").InputSignal<(row: any) => boolean>; selectItems: import("@angular/core").ModelSignal[]>; rowFormat: import("@angular/core").Signal; busqueda: import("@angular/core").ModelSignal; scrollTop: import("@angular/core").WritableSignal; containerHeight: import("@angular/core").WritableSignal; sortField: import("@angular/core").WritableSignal; sortDir: import("@angular/core").WritableSignal<"none" | "desc" | "asc">; expandedRows: import("@angular/core").WritableSignal; classTotales: import("@angular/core").InputSignal; /** Valor aplicado como [style.height] en el template */ heightStyle: import("@angular/core").Signal; rowFilter: import("@angular/core").Signal; rowH: import("@angular/core").Signal; totalHeight: import("@angular/core").Signal; startIndex: import("@angular/core").Signal; endIndex: import("@angular/core").Signal; visibleRows: import("@angular/core").Signal; /** Espacio en blanco antes de las filas renderizadas */ paddingTop: import("@angular/core").Signal; /** Espacio en blanco después de las filas renderizadas */ paddingBottom: import("@angular/core").Signal; private scrollEffect; private resizeObserver?; private resizeEffect; ngOnDestroy(): void; onScroll(event: Event): void; selectRow(row: any, idList: string): void; isSelected(row: any, idList: string): boolean; textoDigitado(): void; toggleSort(field: string): void; concatenarValue(obj: any, fields: string[]): string; getHighlight(text: any, fieldname: string): string; private filtraItem; private scrollToSelected; /** Índice real en rowFilter de una fila visible (para isSelected) */ realIndex(visibleIdx: number): number; /** Mostrar columnas para realizar el filtro */ filtrarColumnas: import("@angular/core").Signal<{ [caption: string]: boolean; }>; toggleFiltros(event: Event): void; /** MOSTRAR/ORDENAR COLUMNAS DE LA TABLA (engranaje del header) */ /** orden y visibilidad elegidos por el usuario, por fieldname — sembrado siempre desde columns() */ private columnState; /** Reconstruye el estado cada vez que cambia columns() (columns() es la única fuente de verdad) */ private columnStateEffect; private buildColumnState; /** Columnas configurables (permitidas por diseño), en el orden elegido por el usuario. * El caption es solo presentación: sin caption la columna igual se configura y renderiza (identidad = fieldname). */ columnasConfigurables: import("@angular/core").Signal; /** Columnas que realmente se pintan: configurables y marcadas como visibles */ columnasRenderizadas: import("@angular/core").Signal; isColumnVisible(fieldname: string): boolean; toggleColumnVisible(fieldname: string, event: Event): void; onColumnDrop(event: CdkDragDrop): void; guardarConfiguracionColumnas(): void; /** Descarta los cambios sin guardar (drags/toggles) y vuelve al orden/visibilidad de columns() */ restablecerConfiguracionColumnas(): void; validaVisibilidad(value: boolean): boolean; /** CELL RENDER */ resolveCell(col: string, row: any): CellRender | null; getRowClass(row: any): { [key: string]: boolean; }; getPosition(col: TableData): string; toggleExpandRow(idRow: string): void; getTotals(fieldname: string): string; getColspanBeforeTotals(): number; allCheck(event: Event): void; isCheckboxDisabled(row: any): boolean; checkAll(checked: boolean): void; validaAllCheck(): boolean; isItemSelected(id: string): boolean; toogleItem(idList: string, event: Event): void; onDoubleClick(row: any): void; onRightClick(event: MouseEvent, row: any): void; onResize(event: any): void; private mobileEffect; onDragOver(event: DragEvent, idList: any): void; onDragLeave(): void; onDrop(event: DragEvent, row: any): void; getRows: () => any[]; static ɵfac: i0.ɵɵFactoryDeclaration; static ɵcmp: i0.ɵɵComponentDeclaration; }