@neural-ui/core 1.5.2 → 1.5.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (74) hide show
  1. package/fesm2022/neural-ui-core-chart.mjs +2 -2
  2. package/fesm2022/neural-ui-core-chart.mjs.map +1 -1
  3. package/fesm2022/neural-ui-core-date-input.mjs +20 -8
  4. package/fesm2022/neural-ui-core-date-input.mjs.map +1 -1
  5. package/fesm2022/neural-ui-core-table.mjs +1 -1
  6. package/fesm2022/neural-ui-core-table.mjs.map +1 -1
  7. package/package.json +1 -1
  8. package/types/neural-ui-core-date-input.d.ts +3 -1
  9. package/accordion/package.json +0 -4
  10. package/alert/package.json +0 -4
  11. package/autocomplete/package.json +0 -4
  12. package/avatar/package.json +0 -4
  13. package/badge/package.json +0 -4
  14. package/block-ui/package.json +0 -4
  15. package/breadcrumb/package.json +0 -4
  16. package/button/package.json +0 -4
  17. package/calendar/package.json +0 -4
  18. package/card/package.json +0 -4
  19. package/chart/package.json +0 -4
  20. package/checkbox/package.json +0 -4
  21. package/chip/package.json +0 -4
  22. package/code-block/package.json +0 -4
  23. package/color-picker/package.json +0 -4
  24. package/command-palette/package.json +0 -4
  25. package/confirm-dialog/package.json +0 -4
  26. package/context-menu/package.json +0 -4
  27. package/dashboard-grid/package.json +0 -4
  28. package/date-input/package.json +0 -4
  29. package/divider/package.json +0 -4
  30. package/empty-state/package.json +0 -4
  31. package/filter-bar/package.json +0 -4
  32. package/icon/package.json +0 -4
  33. package/image-gallery/package.json +0 -4
  34. package/image-viewer/package.json +0 -4
  35. package/input/package.json +0 -4
  36. package/input-otp/package.json +0 -4
  37. package/kanban/package.json +0 -4
  38. package/knob/package.json +0 -4
  39. package/meter-group/package.json +0 -4
  40. package/modal/package.json +0 -4
  41. package/multiselect/package.json +0 -4
  42. package/nav/package.json +0 -4
  43. package/notification-center/package.json +0 -4
  44. package/number-input/package.json +0 -4
  45. package/pagination/package.json +0 -4
  46. package/popover/package.json +0 -4
  47. package/progress-bar/package.json +0 -4
  48. package/radio/package.json +0 -4
  49. package/rating/package.json +0 -4
  50. package/scheduler-gantt/package.json +0 -4
  51. package/select/package.json +0 -4
  52. package/sidebar/package.json +0 -4
  53. package/skeleton/package.json +0 -4
  54. package/slider/package.json +0 -4
  55. package/spinner/package.json +0 -4
  56. package/split-button/package.json +0 -4
  57. package/splitter/package.json +0 -4
  58. package/stats-card/package.json +0 -4
  59. package/stepper/package.json +0 -4
  60. package/switch/package.json +0 -4
  61. package/table/package.json +0 -4
  62. package/tabs/package.json +0 -4
  63. package/textarea/package.json +0 -4
  64. package/timeline/package.json +0 -4
  65. package/timeline-grid/package.json +0 -4
  66. package/toast/package.json +0 -4
  67. package/toggle-button-group/package.json +0 -4
  68. package/toolbar/package.json +0 -4
  69. package/tooltip/package.json +0 -4
  70. package/tree/package.json +0 -4
  71. package/tree-table/package.json +0 -4
  72. package/uploader/package.json +0 -4
  73. package/url-state/package.json +0 -4
  74. package/virtual-list/package.json +0 -4
@@ -1 +1 @@
1
- {"version":3,"file":"neural-ui-core-table.mjs","sources":["../../../../projects/ui-core/table/neu-table-expand.directive.ts","../../../../projects/ui-core/table/neu-table.component.ts","../../../../projects/ui-core/table/neural-ui-core-table.ts"],"sourcesContent":["import { Directive, TemplateRef, inject } from '@angular/core';\n\n/**\n * Directiva para definir el template de expansión de fila en NeuTable.\n *\n * Uso:\n * ```html\n * <neu-table [expandable]=\"true\" [columns]=\"cols\" [data]=\"rows\">\n * <ng-template neuTableExpand let-row>\n * <div>{{ row.details }}</div>\n * </ng-template>\n * </neu-table>\n * ```\n */\n@Directive({\n selector: 'ng-template[neuTableExpand]',\n standalone: true,\n})\nexport class NeuTableExpandDirective {\n readonly templateRef = inject(TemplateRef) as TemplateRef<{ $implicit: Record<string, unknown> }>;\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n DestroyRef,\n ElementRef,\n PLATFORM_ID,\n Signal,\n TemplateRef,\n ViewEncapsulation,\n computed,\n contentChild,\n effect,\n inject,\n input,\n output,\n signal,\n viewChild,\n} from '@angular/core';\nimport { isPlatformBrowser, NgTemplateOutlet } from '@angular/common';\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { NeuTableExpandDirective } from './neu-table-expand.directive';\nimport { NeuUrlStateService } from '@neural-ui/core/url-state';\nimport { NeuInputComponent } from '@neural-ui/core/input';\nimport { NeuSelectComponent } from '@neural-ui/core/select';\nimport { NeuDateInputComponent } from '@neural-ui/core/date-input';\nimport { NeuIconComponent } from '@neural-ui/core/icon';\nimport type { NeuSelectOption } from '@neural-ui/core/select';\nimport type {\n NeuTableAction,\n NeuTableActionEvent,\n NeuTableColumn,\n NeuTableSelectionAction,\n NeuTableSelectionActionEvent,\n NeuTableServerState,\n NeuTableSortEntry,\n} from './neu-table.types';\n\nexport type {\n NeuTableAction,\n NeuTableActionEvent,\n NeuTableBadgeConfig,\n NeuTableBadgeVariant,\n NeuTableCellType,\n NeuTableColumn,\n NeuTableSelectionAction,\n NeuTableSelectionActionEvent,\n NeuTableServerState,\n NeuTableSortEntry,\n} from './neu-table.types';\n\ntype Row = Record<string, unknown>;\n\n// Conversor interno — el input acepta object[] para compatibilidad con\n// interfaces de usuario concretas (User, Product…). Internamente casteamos a Row.\nfunction asRows(data: object[]): Row[] {\n return data as Row[];\n}\n\n/**\n * NeuralUI Table — Componente Estrella\n *\n * Tabla de datos con:\n * - Búsqueda/filtrado → ?q=...\n * - Paginación → ?page=...\n * - Ordenación → ?sort=col&sortDir=asc|desc\n * - Selección de filas (múltiple) opcional\n * - Skeleton de carga animado\n * - Scroll horizontal elegante en mobile (<400px)\n *\n * Uso básico:\n * <neu-table [columns]=\"cols\" [data]=\"rows\" />\n *\n * Múltiples tablas por página:\n * <neu-table pageParam=\"userPage\" searchParam=\"userQ\" sortParam=\"userSort\" ... />\n */\n@Component({\n selector: 'neu-table',\n imports: [\n NgTemplateOutlet,\n ReactiveFormsModule,\n NeuInputComponent,\n NeuSelectComponent,\n NeuDateInputComponent,\n NeuIconComponent,\n ],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class.neu-table__host]': 'true',\n '[class.neu-table__host--compact]': 'density() === \"compact\"',\n '[class.neu-table__host--relaxed]': 'density() === \"relaxed\"',\n },\n template: `\n <div\n class=\"neu-table-container\"\n [class.neu-table--sticky-header]=\"stickyHeader()\"\n [class.neu-table-container--bordered]=\"bordered()\"\n [class.neu-table-container--rounded]=\"roundedBorders()\"\n [class.neu-table-container--striped]=\"stripedRows()\"\n >\n <!-- ---- Toolbar ---- -->\n @if (searchable() || title() || exportable() || toolbarExtraRef()) {\n <div class=\"neu-table__toolbar\">\n @if (title()) {\n <h3 class=\"neu-table__title\">{{ title() }}</h3>\n }\n @if (toolbarExtraRef()) {\n <div class=\"neu-table__toolbar-extra\">\n <ng-container [ngTemplateOutlet]=\"toolbarExtraRef()!\" />\n </div>\n }\n @if (searchable()) {\n <div class=\"neu-table__search-group\">\n <div class=\"neu-table__search-wrapper\">\n <svg\n class=\"neu-table__search-icon\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n aria-hidden=\"true\"\n >\n <circle cx=\"11\" cy=\"11\" r=\"8\" />\n <line x1=\"21\" y1=\"21\" x2=\"16.65\" y2=\"16.65\" />\n </svg>\n <input\n class=\"neu-table__search\"\n type=\"search\"\n [placeholder]=\"searchPlaceholder()\"\n [value]=\"searchQuery()\"\n (input)=\"onSearch($event)\"\n [attr.aria-label]=\"searchAriaLabel()\"\n />\n @if (searchQuery()) {\n <button\n class=\"neu-table__search-clear\"\n type=\"button\"\n [attr.aria-label]=\"clearSearchAriaLabel()\"\n (click)=\"clearSearch()\"\n >\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n >\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\" />\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\" />\n </svg>\n </button>\n }\n </div>\n @if (exactMatchable()) {\n <label class=\"neu-table__exact-label\">\n <input\n class=\"neu-table__exact-checkbox\"\n type=\"checkbox\"\n [checked]=\"exactMatch()\"\n (change)=\"setExactMatch($any($event.target).checked)\"\n />\n {{ exactMatchLabel() }}\n </label>\n }\n </div>\n }\n @if (exportable() && !loading()) {\n <div class=\"neu-table__export-group\">\n @if (exportFormats().includes('csv')) {\n <button\n class=\"neu-table__export-btn\"\n type=\"button\"\n (click)=\"exportCsv()\"\n [title]=\"exportCsvTitle()\"\n >\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n aria-hidden=\"true\"\n width=\"15\"\n height=\"15\"\n >\n <path d=\"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\" />\n <polyline points=\"7 10 12 15 17 10\" />\n <line x1=\"12\" y1=\"15\" x2=\"12\" y2=\"3\" />\n </svg>\n CSV\n </button>\n }\n @if (exportFormats().includes('json')) {\n <button\n class=\"neu-table__export-btn\"\n type=\"button\"\n (click)=\"exportJson()\"\n [title]=\"exportJsonTitle()\"\n >\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n aria-hidden=\"true\"\n width=\"15\"\n height=\"15\"\n >\n <path d=\"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\" />\n <polyline points=\"7 10 12 15 17 10\" />\n <line x1=\"12\" y1=\"15\" x2=\"12\" y2=\"3\" />\n </svg>\n JSON\n </button>\n }\n </div>\n }\n </div>\n }\n\n <!-- Barra de selección (aparece al seleccionar) -->\n @if (selectable() && selectedCount() > 0) {\n <div class=\"neu-table__selection-bar\">\n <div class=\"neu-table__selection-main\">\n <span>{{ selectedRowsInfo() }}</span>\n @if (selectionActions().length > 0) {\n <div class=\"neu-table__selection-actions\">\n @for (action of selectionActions(); track action.key) {\n @if (action.show === undefined || action.show(selectedRows())) {\n @if (isSelectionConfirmPending(action)) {\n <span class=\"neu-table__action-confirm\">\n <span>{{ action.confirm }}</span>\n <button\n class=\"neu-table__action-btn neu-table__action-btn--danger\"\n type=\"button\"\n (click)=\"handleSelectionAction(action)\"\n >\n Sí\n </button>\n <button\n class=\"neu-table__action-btn\"\n type=\"button\"\n (click)=\"cancelSelectionConfirm()\"\n >\n No\n </button>\n </span>\n } @else {\n <button\n class=\"neu-table__export-btn neu-table__export-btn--selection neu-table__export-btn--{{\n action.variant ?? 'ghost'\n }}\"\n type=\"button\"\n [disabled]=\"action.disabled ? action.disabled(selectedRows()) : false\"\n [title]=\"action.label\"\n (click)=\"handleSelectionAction(action)\"\n >\n @if (action.icon.startsWith('lucide')) {\n <neu-icon [name]=\"action.icon\" size=\"0.95rem\" aria-hidden=\"true\" />\n } @else {\n <span aria-hidden=\"true\">{{ action.icon }}</span>\n }\n <span>{{ action.label }}</span>\n </button>\n }\n }\n }\n </div>\n }\n </div>\n <button class=\"neu-table__selection-clear\" type=\"button\" (click)=\"clearSelection()\">\n {{ clearSelectionLabel() }}\n </button>\n </div>\n }\n\n <!-- ---- Scroll container ---- -->\n <div\n #scrollContainer\n class=\"neu-table__scroll-container\"\n [class.neu-table__scroll-container--virtual]=\"_virtualScrollActive()\"\n role=\"region\"\n [attr.aria-label]=\"title() || tableAriaLabel()\"\n [style.max-height]=\"_virtualScrollActive() ? virtualContainerMaxHeight() : null\"\n (scroll)=\"onTableScroll($event)\"\n >\n <table class=\"neu-table\" [attr.aria-rowcount]=\"filteredData().length\">\n <thead class=\"neu-table__head\">\n <tr>\n <!-- Checkbox de selección global -->\n @if (expandable()) {\n <th class=\"neu-table__th neu-table__th--expand-col\" scope=\"col\"></th>\n }\n @if (selectable()) {\n <th class=\"neu-table__th neu-table__th--check\" scope=\"col\">\n <input\n type=\"checkbox\"\n class=\"neu-table__checkbox\"\n [checked]=\"isAllFilteredSelected()\"\n [indeterminate]=\"isSomeFilteredSelected()\"\n (change)=\"toggleAll()\"\n [attr.aria-label]=\"selectAllAriaLabel()\"\n />\n </th>\n }\n @if (showRowNumbers()) {\n <th class=\"neu-table__th neu-table__th--rn\" scope=\"col\">#</th>\n }\n @for (col of columns(); track col.key) {\n <th\n class=\"neu-table__th\"\n [class.neu-table__th--sortable]=\"sortable() && col.sortable !== false\"\n [class.neu-table__th--sorted-asc]=\"\n !multiSort() && sortKey() === col.key && sortDir() === 'asc'\n \"\n [class.neu-table__th--sorted-desc]=\"\n !multiSort() && sortKey() === col.key && sortDir() === 'desc'\n \"\n [class]=\"col.cellClass ?? ''\"\n [class.neu-table__th--frozen-left]=\"col.frozen === 'left'\"\n [class.neu-table__th--frozen-right]=\"col.frozen === 'right'\"\n [class.neu-table__th--frozen-left-boundary]=\"isLastFrozenLeftColumn(col.key)\"\n [class.neu-table__th--frozen-right-boundary]=\"isFirstFrozenRightColumn(col.key)\"\n [style.left]=\"\n col.frozen === 'left' ? (_frozenLeftOffsets().get(col.key) ?? 0) + 'px' : null\n \"\n [style.width]=\"columnWidth(col)\"\n [style.min-width]=\"columnWidth(col)\"\n [style.max-width]=\"columnWidth(col)\"\n [style.text-align]=\"col.align ?? 'left'\"\n scope=\"col\"\n (click)=\"sortable() && col.sortable !== false ? sortBy(col.key, $event) : null\"\n >\n @if (col.headerTemplate) {\n <ng-container\n [ngTemplateOutlet]=\"col.headerTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: col }\"\n />\n } @else {\n {{ col.header }}\n }\n @if (sortable() && col.sortable !== false) {\n <span class=\"neu-table__sort-icon\" aria-hidden=\"true\">\n @if (multiSort()) {\n @let pri = getSortPriority(col.key);\n @if (pri >= 0) {\n <span class=\"neu-table__sort-priority\">{{ pri + 1 }}</span>\n {{ _sortEntries()[pri]?.dir === 'asc' ? '↑' : '↓' }}\n } @else {\n ↕\n }\n } @else {\n @if (sortKey() === col.key) {\n {{ sortDir() === 'asc' ? '↑' : '↓' }}\n } @else {\n ↕\n }\n }\n </span>\n }\n @if (isColumnResizable(col)) {\n <button\n class=\"neu-table__resize-handle\"\n type=\"button\"\n [attr.aria-label]=\"'Resize ' + col.header\"\n (dblclick)=\"resetColumnWidth(col.key, $event)\"\n (mousedown)=\"startColumnResize(col, $event)\"\n ></button>\n }\n </th>\n }\n </tr>\n <!-- ── Fila de filtros de columna / Column filter row ── -->\n @if (_hasFilterableCol()) {\n <tr class=\"neu-table__filter-row\">\n @if (expandable()) {\n <th class=\"neu-table__th neu-table__th--filter-placeholder\" scope=\"col\"></th>\n }\n @if (selectable()) {\n <th class=\"neu-table__th neu-table__th--filter-placeholder\" scope=\"col\"></th>\n }\n @if (showRowNumbers()) {\n <th class=\"neu-table__th neu-table__th--filter-placeholder\" scope=\"col\"></th>\n }\n @for (col of columns(); track col.key) {\n <th\n class=\"neu-table__th neu-table__th--filter\"\n scope=\"col\"\n [style.width]=\"columnWidth(col)\"\n [style.min-width]=\"columnWidth(col)\"\n [style.max-width]=\"columnWidth(col)\"\n >\n @if (col.filterable) {\n @if (col.filterType === 'select') {\n <neu-select\n [floatingLabel]=\"false\"\n [options]=\"_filterOpts(col)\"\n [formControl]=\"columnFilterControl(col.key)\"\n [attr.aria-label]=\"filterAriaPrefix() + ' ' + col.header\"\n />\n } @else if (col.filterType === 'date') {\n <neu-date-input\n [formControl]=\"columnFilterControl(col.key)\"\n [attr.aria-label]=\"filterAriaPrefix() + ' ' + col.header\"\n />\n } @else {\n <neu-input\n [floatingLabel]=\"false\"\n [placeholder]=\"filterPlaceholder()\"\n [formControl]=\"columnFilterControl(col.key)\"\n [attr.aria-label]=\"filterAriaPrefix() + ' ' + col.header\"\n />\n }\n }\n </th>\n }\n </tr>\n }\n </thead>\n\n <tbody class=\"neu-table__body\">\n @if (loading()) {\n <tr class=\"neu-table__row--loading\">\n <td [attr.colspan]=\"totalColspan()\" class=\"neu-table__td neu-table__td--center\">\n <div class=\"neu-table__skeleton-rows\">\n @for (_ of skeletonRows(); track $index) {\n <div class=\"neu-table__skeleton-row\">\n @for (__ of columns(); track $index) {\n <div class=\"neu-table__skeleton-cell\"></div>\n }\n </div>\n }\n </div>\n </td>\n </tr>\n } @else if (paginatedData().length === 0) {\n <tr>\n <td [attr.colspan]=\"totalColspan()\" class=\"neu-table__td neu-table__td--empty\">\n @if (emptyStateTemplate()) {\n <ng-container [ngTemplateOutlet]=\"emptyStateTemplate()!\" />\n } @else {\n <div class=\"neu-table__empty\">\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n >\n <circle cx=\"11\" cy=\"11\" r=\"8\" />\n <line x1=\"21\" y1=\"21\" x2=\"16.65\" y2=\"16.65\" />\n </svg>\n <p>{{ emptyMessage() }}</p>\n @if (searchQuery()) {\n <button\n class=\"neu-table__clear-filter\"\n type=\"button\"\n (click)=\"clearSearch()\"\n >\n {{ clearFilterLabel() }}\n </button>\n }\n </div>\n }\n </td>\n </tr>\n } @else {\n @if (_virtualScrollActive() && _virtualTopSpacerHeight() > 0) {\n <tr class=\"neu-table__spacer-row\" aria-hidden=\"true\">\n <td\n [attr.colspan]=\"totalColspan()\"\n class=\"neu-table__spacer-cell\"\n [style.height.px]=\"_virtualTopSpacerHeight()\"\n ></td>\n </tr>\n }\n @for (row of visiblePageRows(); track getRowKey(row); let rowIdx = $index) {\n <tr\n class=\"neu-table__row\"\n [class]=\"getRowClass(row)\"\n [class.neu-table__row--selected]=\"isRowSelected(row)\"\n [class.neu-table__row--clickable]=\"selectable()\"\n (click)=\"onRowClick(row, $event)\"\n (dblclick)=\"rowDblClick.emit(row)\"\n >\n @if (expandable()) {\n <td\n class=\"neu-table__td neu-table__td--expand-col\"\n (click)=\"$event.stopPropagation()\"\n >\n <button\n class=\"neu-table__expand-btn\"\n type=\"button\"\n (click)=\"toggleExpand(row)\"\n [class.neu-table__expand-btn--open]=\"isRowExpanded(row)\"\n [attr.aria-expanded]=\"isRowExpanded(row)\"\n [attr.aria-label]=\"expandRowAriaLabel()\"\n >\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n >\n <polyline points=\"9 18 15 12 9 6\" />\n </svg>\n </button>\n </td>\n }\n @if (selectable()) {\n <td\n class=\"neu-table__td neu-table__th--check\"\n (click)=\"$event.stopPropagation()\"\n >\n <input\n type=\"checkbox\"\n class=\"neu-table__checkbox\"\n [checked]=\"isRowSelected(row)\"\n (change)=\"toggleRow(row)\"\n [attr.aria-label]=\"selectRowAriaLabel()\"\n />\n </td>\n }\n @if (showRowNumbers()) {\n <td class=\"neu-table__td neu-table__td--rn\">\n {{ visibleRowNumber(rowIdx) }}\n </td>\n }\n @for (col of columns(); track col.key) {\n <td\n class=\"neu-table__td\"\n [class]=\"col.cellClass ?? ''\"\n [class.neu-table__td--frozen-left]=\"col.frozen === 'left'\"\n [class.neu-table__td--frozen-right]=\"col.frozen === 'right'\"\n [class.neu-table__td--frozen-left-boundary]=\"isLastFrozenLeftColumn(col.key)\"\n [class.neu-table__td--frozen-right-boundary]=\"\n isFirstFrozenRightColumn(col.key)\n \"\n [style.left]=\"\n col.frozen === 'left'\n ? (_frozenLeftOffsets().get(col.key) ?? 0) + 'px'\n : null\n \"\n [style.width]=\"columnWidth(col)\"\n [style.min-width]=\"columnWidth(col)\"\n [style.max-width]=\"columnWidth(col)\"\n [style.text-align]=\"col.align ?? 'left'\"\n >\n @if (col.cellTemplate) {\n <ng-container\n [ngTemplateOutlet]=\"col.cellTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: row, row: row, column: col }\"\n />\n } @else if (col.type === 'badge') {\n @let badgeVal = getCellValue(row, col);\n @let badgeCfg = col.badgeMap?.[badgeVal];\n <span\n class=\"neu-table__cell-badge neu-table__cell-badge--{{\n badgeCfg?.variant ?? 'default'\n }}\"\n >\n {{ badgeCfg?.label ?? badgeVal }}\n </span>\n } @else if (col.type === 'link') {\n <a\n class=\"neu-table__cell-link\"\n [href]=\"col.linkHref ? col.linkHref(row) : '#'\"\n [target]=\"col.linkTarget ?? '_self'\"\n (click)=\"$event.stopPropagation()\"\n >{{ getCellValue(row, col) }}</a\n >\n } @else if (col.type === 'actions') {\n <div class=\"neu-table__actions\">\n @for (action of col.actions ?? []; track action.key) {\n @if (action.show === undefined || action.show(row)) {\n @if (isConfirmPending(row, action)) {\n <span class=\"neu-table__action-confirm\">\n <span>{{ action.confirm }}</span>\n <button\n class=\"neu-table__action-btn neu-table__action-btn--danger\"\n type=\"button\"\n (click)=\"handleAction(row, action); $event.stopPropagation()\"\n >\n Sí\n </button>\n <button\n class=\"neu-table__action-btn\"\n type=\"button\"\n (click)=\"cancelConfirm(); $event.stopPropagation()\"\n >\n No\n </button>\n </span>\n } @else {\n <button\n class=\"neu-table__action-btn neu-table__action-btn--{{\n action.variant ?? 'ghost'\n }}\"\n type=\"button\"\n [disabled]=\"action.disabled ? action.disabled(row) : false\"\n [title]=\"action.label\"\n (click)=\"handleAction(row, action); $event.stopPropagation()\"\n >\n @if (action.icon.startsWith('lucide')) {\n <neu-icon\n class=\"neu-table__action-icon\"\n [name]=\"action.icon\"\n size=\"1rem\"\n aria-hidden=\"true\"\n />\n } @else {\n <span class=\"neu-table__action-icon\" aria-hidden=\"true\">{{\n action.icon\n }}</span>\n }\n <span class=\"sr-only\">{{ action.label }}</span>\n </button>\n }\n }\n }\n </div>\n } @else {\n {{ getCellValue(row, col) }}\n }\n </td>\n }\n </tr>\n @if (expandable() && isRowExpanded(row)) {\n <tr class=\"neu-table__row-expand-detail\">\n <td [attr.colspan]=\"totalColspan()\" class=\"neu-table__td--expand-panel\">\n <div class=\"neu-table__expand-content\">\n @if (expandTemplate(); as tpl) {\n <ng-container\n [ngTemplateOutlet]=\"tpl.templateRef\"\n [ngTemplateOutletContext]=\"{ $implicit: row }\"\n />\n }\n </div>\n </td>\n </tr>\n }\n }\n @if (_virtualScrollActive() && _virtualBottomSpacerHeight() > 0) {\n <tr class=\"neu-table__spacer-row\" aria-hidden=\"true\">\n <td\n [attr.colspan]=\"totalColspan()\"\n class=\"neu-table__spacer-cell\"\n [style.height.px]=\"_virtualBottomSpacerHeight()\"\n ></td>\n </tr>\n }\n }\n </tbody>\n @if (footerRow()) {\n <tfoot class=\"neu-table__foot\">\n <tr class=\"neu-table__footer-row\">\n @if (expandable()) {\n <td class=\"neu-table__td\"></td>\n }\n @if (selectable()) {\n <td class=\"neu-table__td\"></td>\n }\n @if (showRowNumbers()) {\n <td class=\"neu-table__td\"></td>\n }\n @for (col of columns(); track col.key) {\n <td\n class=\"neu-table__td neu-table__td--footer\"\n [style.width]=\"columnWidth(col)\"\n [style.min-width]=\"columnWidth(col)\"\n [style.max-width]=\"columnWidth(col)\"\n [style.text-align]=\"col.align ?? 'left'\"\n >\n {{ footerRow()![col.key] !== undefined ? footerRow()![col.key] : '' }}\n </td>\n }\n </tr>\n </tfoot>\n }\n </table>\n </div>\n\n <!-- ---- Footer ---- -->\n @if (!loading() && filteredData().length > 0) {\n <div class=\"neu-table__footer\">\n @if (pagination() && pageSizeOptions().length > 0) {\n <div class=\"neu-table__page-size\">\n <label class=\"neu-table__page-size-label\">{{ pageSizeLabel() }}</label>\n <neu-select\n class=\"neu-table__page-size-select\"\n [floatingLabel]=\"false\"\n [options]=\"_pageSizeOptions()\"\n [formControl]=\"_pageSizeControl\"\n [attr.aria-label]=\"pageSizeAriaLabel()\"\n size=\"sm\"\n />\n </div>\n }\n <span class=\"neu-table__info\">\n {{ paginationInfo() }}\n </span>\n @if (totalPages() > 1) {\n <nav class=\"neu-table__pagination\" [attr.aria-label]=\"paginationAriaLabel()\">\n <button\n class=\"neu-table__page-btn\"\n [disabled]=\"currentPage() === 1\"\n (click)=\"goToPage(currentPage() - 1)\"\n [attr.aria-label]=\"previousPageAriaLabel()\"\n type=\"button\"\n >\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n >\n <polyline points=\"15 18 9 12 15 6\" />\n </svg>\n </button>\n @for (page of pageNumbers(); track page) {\n <button\n class=\"neu-table__page-btn\"\n [class.neu-table__page-btn--active]=\"page === currentPage()\"\n (click)=\"goToPage(page)\"\n [attr.aria-current]=\"page === currentPage() ? 'page' : null\"\n type=\"button\"\n >\n {{ page }}\n </button>\n }\n <button\n class=\"neu-table__page-btn\"\n [disabled]=\"currentPage() === totalPages()\"\n (click)=\"goToPage(currentPage() + 1)\"\n [attr.aria-label]=\"nextPageAriaLabel()\"\n type=\"button\"\n >\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n >\n <polyline points=\"9 18 15 12 9 6\" />\n </svg>\n </button>\n </nav>\n }\n </div>\n }\n </div>\n `,\n styleUrl: './neu-table.component.scss',\n})\nexport class NeuTableComponent {\n private readonly _destroyRef = inject(DestroyRef);\n private readonly _urlState = inject(NeuUrlStateService);\n private readonly _platformId = inject(PLATFORM_ID);\n private readonly _scrollContainer = viewChild<ElementRef<HTMLElement>>('scrollContainer');\n private readonly _virtualOverscan = 3;\n\n readonly expandTemplate = contentChild(NeuTableExpandDirective);\n\n // ── Inputs de datos ─────────────────────────────────────────────────\n readonly columns = input<NeuTableColumn[]>([]);\n readonly data = input<object[]>([]);\n readonly pageSize = input<number>(10);\n /** Controla si la paginación está activa. Si es false, se muestran todos los datos y se ocultan los controles de paginación y pageSize. */\n readonly pagination = input<boolean>(true);\n readonly loading = input<boolean>(false);\n readonly title = input<string>('');\n readonly toolbarExtraRef = input<TemplateRef<unknown> | null>(null);\n readonly emptyMessage = input<string>('No results found');\n readonly skeletonRows = input<number[]>([1, 2, 3, 4, 5]);\n\n // ── Inputs de funcionalidad ──────────────────────────────────────────\n readonly searchable = input<boolean>(true);\n readonly searchPlaceholder = input<string>('Search...');\n readonly exactMatchable = input<boolean>(false);\n readonly exactMatchLabel = input<string>('Exact match');\n readonly searchAriaLabel = input<string>('Search table');\n readonly clearSearchAriaLabel = input<string>('Clear search');\n readonly clearFilterLabel = input<string>('Clear filter');\n readonly previousPageAriaLabel = input<string>('Previous page');\n readonly nextPageAriaLabel = input<string>('Next page');\n readonly pageSizeLabel = input<string>('Rows:');\n readonly pageSizeAriaLabel = input<string>('Rows per page');\n readonly paginationAriaLabel = input<string>('Pagination');\n readonly exportCsvTitle = input<string>('Export CSV');\n readonly exportJsonTitle = input<string>('Export JSON');\n readonly clearSelectionLabel = input<string>('Clear selection');\n readonly selectionSummaryLabel = input<string>('selected');\n readonly tableAriaLabel = input<string>('Data table');\n readonly selectAllAriaLabel = input<string>('Select all filtered rows');\n readonly selectRowAriaLabel = input<string>('Select row');\n readonly expandRowAriaLabel = input<string>('Expand row');\n readonly filterPlaceholder = input<string>('Filter...');\n readonly filterAriaPrefix = input<string>('Filter by');\n readonly allFilterOptionLabel = input<string>('All');\n readonly ofLabel = input<string>('of');\n readonly resultLabelSingular = input<string>('result');\n readonly resultLabelPlural = input<string>('results');\n readonly sortable = input<boolean>(false);\n readonly selectable = input<boolean>(false);\n readonly expandable = input<boolean>(false);\n readonly expandMode = input<'multiple' | 'single'>('multiple');\n readonly exportable = input<boolean>(false);\n readonly exportFileName = input<string>('export');\n readonly pageSizeOptions = input<number[]>([]);\n readonly stickyHeader = input<boolean>(false);\n readonly virtualScroll = input<boolean>(false);\n readonly virtualScrollVisibleItems = input<number>(8);\n readonly resizableColumns = input<boolean>(false);\n readonly rowKey = input<string>('id');\n readonly bordered = input<boolean>(true);\n readonly roundedBorders = input<boolean>(true);\n readonly stripedRows = input<boolean>(false);\n\n // ── Inputs nuevos v1.3.0 ──────────────────────────────────────────────\n readonly density = input<'compact' | 'normal' | 'relaxed'>('normal');\n readonly showRowNumbers = input<boolean>(false);\n readonly rowClass = input<((row: Row) => string) | undefined>(undefined);\n readonly footerRow = input<Record<string, string | number> | undefined>(undefined);\n readonly emptyStateTemplate = input<TemplateRef<void> | undefined>(undefined);\n readonly serverSide = input<boolean>(false);\n readonly totalItems = input<number | undefined>(undefined);\n readonly multiSort = input<boolean>(false);\n readonly exportFormats = input<('csv' | 'json')[]>(['csv']);\n readonly exportColumns = input<string[]>([]);\n readonly exportScope = input<'filtered' | 'selected' | 'auto'>('auto');\n readonly selectionActions = input<NeuTableSelectionAction<Row>[]>([]);\n\n // ── URL params ────────────────────────────────────────────────────────\n readonly pageParam = input<string>('page');\n readonly searchParam = input<string>('q');\n readonly sortParam = input<string>('sort');\n readonly sortDirParam = input<string>('sortDir');\n /** Param used to persist multi-sort state in the URL / Param para persistir multisort en la URL */\n readonly multiSortParam = input<string>('msort');\n /**\n * Activa o desactiva la sincronización de estado con los queryParams de la URL.\n * Cuando es false, la paginación, búsqueda y ordenación se gestionan con\n * señales internas sin tocar la URL del navegador.\n *\n * Enables or disables URL query-param synchronization.\n * When false, pagination, search and sort are managed with internal signals\n * and the browser URL is never modified.\n */\n readonly useUrlState = input<boolean>(true);\n\n // ── Outputs ───────────────────────────────────────────────────────────\n readonly selectionChange = output<Row[]>();\n readonly rowClick = output<Row>();\n readonly rowDblClick = output<Row>();\n readonly actionClick = output<NeuTableActionEvent<Row>>();\n readonly selectionActionClick = output<NeuTableSelectionActionEvent<Row>>();\n readonly serverStateChange = output<NeuTableServerState>();\n readonly searchChange = output<string>();\n readonly columnResize = output<{ key: string; width: number }>();\n\n // ── Estado interno (usado cuando useUrlState = false) ─────────────────\n // Internal state signals (used when useUrlState = false)\n private readonly _internalPage = signal(1);\n private readonly _internalSearch = signal('');\n private readonly _internalSortKey = signal('');\n private readonly _internalSortDir = signal<'asc' | 'desc'>('asc');\n private readonly _internalMultiSort = signal('');\n private readonly _columnWidths = signal<Record<string, number>>({});\n private _resizeCleanup: (() => void) | null = null;\n\n // ── URL State ─────────────────────────────────────────────────────────\n private readonly _urlParamSignals = new Map<string, Signal<string | null>>();\n\n private _getUrlParamSignal(key: string): Signal<string | null> {\n let paramSignal = this._urlParamSignals.get(key);\n if (!paramSignal) {\n paramSignal = this._urlState.getParam(key);\n this._urlParamSignals.set(key, paramSignal);\n }\n return paramSignal;\n }\n\n private _readUrlParam(key: string): string | null {\n return this._getUrlParamSignal(key)();\n }\n\n readonly currentPage = computed(() => {\n if (!this.useUrlState()) return this._internalPage();\n const raw = this._readUrlParam(this.pageParam());\n const n = Number(raw);\n return !raw || isNaN(n) || n < 1 ? 1 : n;\n });\n\n readonly searchQuery = computed(() => {\n if (!this.useUrlState()) return this._internalSearch();\n return this._readUrlParam(this.searchParam()) ?? '';\n });\n\n readonly sortKey = computed(() => {\n if (!this.useUrlState()) return this._internalSortKey();\n return this._readUrlParam(this.sortParam()) ?? '';\n });\n\n readonly sortDir = computed<'asc' | 'desc'>(() => {\n if (!this.useUrlState()) return this._internalSortDir();\n const d = this._readUrlParam(this.sortDirParam());\n return d === 'desc' ? 'desc' : 'asc';\n });\n\n // ---- Pipeline de datos / Data pipeline ----\n private readonly rows = computed(() => asRows(this.data()));\n\n // ── Estado interno ────────────────────────────────────────────────────\n private readonly _exactMatch = signal(false);\n readonly exactMatch = this._exactMatch.asReadonly();\n\n /**\n * Multi-sort entries derived from URL param or internal state.\n * Entradas de multisort derivadas del param de URL o del estado interno.\n */\n readonly _sortEntries = computed<NeuTableSortEntry[]>(() => {\n if (!this.multiSort()) return [];\n const param = this.useUrlState()\n ? this._readUrlParam(this.multiSortParam())\n : this._internalMultiSort();\n if (!param) return [];\n return param.split(',').flatMap((chunk) => {\n const [key, dir] = chunk.split(':');\n if (!key) return [];\n return [{ key, dir: (dir === 'desc' ? 'desc' : 'asc') as 'asc' | 'desc' }];\n });\n });\n readonly _columnFilters = signal<Record<string, unknown>>({});\n readonly _pageSizeControl = new FormControl('', { nonNullable: true });\n private readonly _columnFilterControls = new Map<string, FormControl<string>>();\n /** True when at least one column has filterable:true / True si alguna columna tiene filterable:true */\n readonly _hasFilterableCol = computed(() => this.columns().some((c) => c.filterable));\n\n /** Convierte filterOptions de string[] a NeuSelectOption[] con opción \"Todos\" al inicio.\n * Converts filterOptions from string[] to NeuSelectOption[] with a leading \"All\" option. */\n _filterOpts(col: NeuTableColumn): NeuSelectOption[] {\n return [\n { label: this.allFilterOptionLabel(), value: '' },\n ...(col.filterOptions ?? []).map((o) => ({ label: o, value: o })),\n ];\n }\n\n readonly _pageSizeOptions = computed<NeuSelectOption[]>(() =>\n this.pageSizeOptions().map((size) => ({ label: String(size), value: String(size) })),\n );\n\n private readonly _virtualScrollTop = signal(0);\n\n constructor() {\n this._destroyRef.onDestroy(() => this._stopColumnResize());\n\n this._pageSizeControl.valueChanges\n .pipe(takeUntilDestroyed(this._destroyRef))\n .subscribe((value) => this.onPageSizeChange(value));\n\n effect(() => {\n const nextSize = String(this.effectivePageSize());\n if (this._pageSizeControl.value !== nextSize) {\n this._pageSizeControl.setValue(nextSize, { emitEvent: false });\n }\n });\n\n effect(() => {\n const filters = this._columnFilters();\n for (const col of this.columns()) {\n if (!col.filterable) continue;\n const control = this.columnFilterControl(col.key);\n const nextValue = String(filters[col.key] ?? '');\n if (control.value !== nextValue) {\n control.setValue(nextValue, { emitEvent: false });\n }\n }\n });\n\n effect(() => {\n if (!this.virtualScroll()) {\n return;\n }\n\n this.currentPage();\n this.searchQuery();\n this.sortKey();\n this.sortDir();\n this._sortEntries();\n this._columnFilters();\n this.effectivePageSize();\n this.paginatedData().length;\n this.resetVirtualScrollPosition();\n });\n }\n\n private readonly _confirmPending = signal<{ rowKey: unknown; actionKey: string } | null>(null);\n\n // ── Pipeline de datos ─────────────────────────────────────────────────\n private readonly _rows = computed(() => asRows(this.data()));\n\n readonly filteredData = computed<Row[]>(() => {\n if (this.serverSide()) return this._rows();\n const rows = this._rows();\n const colFilters = this._columnFilters();\n const q = this.searchQuery().trim().toLowerCase();\n const exact = this._exactMatch();\n const matches = (text: string) =>\n exact ? text.toLowerCase() === q : text.toLowerCase().includes(q);\n return rows.filter((row) => {\n const passesGlobal =\n !q ||\n this.columns().some((col) => {\n const rawVal = String(row[col.key] ?? '');\n const displayVal = col.cell\n ? col.cell(row)\n : col.type === 'badge' && col.badgeMap?.[rawVal]?.label\n ? col.badgeMap[rawVal].label!\n : rawVal;\n return matches(displayVal) || matches(rawVal);\n });\n if (!passesGlobal) return false;\n for (const [colKey, filterVal] of Object.entries(colFilters)) {\n if (filterVal === null || filterVal === '' || filterVal === undefined) continue;\n if (\n !String(row[colKey] ?? '')\n .toLowerCase()\n .includes(String(filterVal).toLowerCase())\n )\n return false;\n }\n return true;\n });\n });\n\n readonly sortedData = computed<Row[]>(() => {\n if (this.serverSide()) return this.filteredData();\n const data = [...this.filteredData()];\n if (!this.sortable()) return data;\n if (this.multiSort() && this._sortEntries().length > 0) {\n const entries = this._sortEntries();\n return data.sort((a, b) => {\n for (const entry of entries) {\n const cmp = String(a[entry.key] ?? '').localeCompare(\n String(b[entry.key] ?? ''),\n undefined,\n { numeric: true },\n );\n if (cmp !== 0) return entry.dir === 'asc' ? cmp : -cmp;\n }\n return 0;\n });\n }\n const key = this.sortKey();\n if (!key) return data;\n const dir = this.sortDir();\n return data.sort((a, b) => {\n const cmp = String(a[key] ?? '').localeCompare(String(b[key] ?? ''), undefined, {\n numeric: true,\n });\n return dir === 'asc' ? cmp : -cmp;\n });\n });\n\n private readonly _dynamicPageSize = signal<number | null>(null);\n readonly effectivePageSize = computed(() => {\n if (!this.pagination()) return this.filteredData().length || 1;\n return this._dynamicPageSize() ?? this.pageSize();\n });\n\n readonly totalPages = computed(() => {\n if (!this.pagination()) return 1;\n const total =\n this.serverSide() && this.totalItems() != null\n ? this.totalItems()!\n : this.filteredData().length;\n return Math.max(1, Math.ceil(total / this.effectivePageSize()));\n });\n\n readonly paginatedData = computed(() => {\n if (!this.pagination()) return this.sortedData();\n if (this.serverSide()) return this._rows();\n const page = Math.min(this.currentPage(), this.totalPages());\n const size = this.effectivePageSize();\n return this.sortedData().slice((page - 1) * size, page * size);\n });\n\n readonly _virtualRowHeight = computed(() => {\n switch (this.density()) {\n case 'compact':\n return 34;\n case 'relaxed':\n return 64;\n default:\n return 48;\n }\n });\n\n readonly _virtualHeaderHeight = computed(() => 44 + (this._hasFilterableCol() ? 52 : 0));\n\n readonly _virtualScrollActive = computed(\n () => this.virtualScroll() && this.paginatedData().length > this.virtualScrollVisibleItems(),\n );\n\n readonly virtualContainerMaxHeight = computed(\n () =>\n `${this._virtualHeaderHeight() + this.virtualScrollVisibleItems() * this._virtualRowHeight()}px`,\n );\n\n readonly _virtualStartIndex = computed(() => {\n if (!this._virtualScrollActive()) {\n return 0;\n }\n\n const bodyScrollTop = Math.max(0, this._virtualScrollTop() - this._virtualHeaderHeight());\n const startIndex = Math.floor(bodyScrollTop / this._virtualRowHeight());\n return Math.max(0, startIndex - this._virtualOverscan);\n });\n\n readonly _virtualEndIndex = computed(() => {\n if (!this._virtualScrollActive()) {\n return this.paginatedData().length;\n }\n\n return Math.min(\n this.paginatedData().length,\n this._virtualStartIndex() + this.virtualScrollVisibleItems() + this._virtualOverscan * 2,\n );\n });\n\n readonly visiblePageRows = computed(() => {\n const rows = this.paginatedData();\n if (!this._virtualScrollActive()) {\n return rows;\n }\n\n return rows.slice(this._virtualStartIndex(), this._virtualEndIndex());\n });\n\n readonly _virtualTopSpacerHeight = computed(() => {\n if (!this._virtualScrollActive()) {\n return 0;\n }\n\n return this._virtualStartIndex() * this._virtualRowHeight();\n });\n\n readonly _virtualBottomSpacerHeight = computed(() => {\n if (!this._virtualScrollActive()) {\n return 0;\n }\n\n return Math.max(\n 0,\n (this.paginatedData().length - this._virtualEndIndex()) * this._virtualRowHeight(),\n );\n });\n\n readonly pageNumbers = computed<number[]>(() => {\n const total = this.totalPages();\n const current = this.currentPage();\n let start = Math.max(1, current - 2);\n const end = Math.min(total, start + 4);\n start = Math.max(1, end - 4);\n return Array.from({ length: end - start + 1 }, (_, i) => start + i);\n });\n\n readonly paginationInfo = computed(() => {\n const total =\n this.serverSide() && this.totalItems() != null\n ? this.totalItems()!\n : this.filteredData().length;\n const page = Math.min(this.currentPage(), this.totalPages());\n const size = this.effectivePageSize();\n const from = total === 0 ? 0 : Math.min((page - 1) * size + 1, total);\n const to = total === 0 ? 0 : Math.min(page * size, total);\n return `${from}-${to} ${this.ofLabel()} ${total} ${\n total === 1 ? this.resultLabelSingular() : this.resultLabelPlural()\n }`;\n });\n\n readonly totalColspan = computed(() => {\n let cols = this.columns().length;\n if (this.selectable()) cols++;\n if (this.expandable()) cols++;\n if (this.showRowNumbers()) cols++;\n return cols;\n });\n\n readonly _frozenLeftOffsets = computed(() => {\n this._columnWidths();\n const offsets = new Map<string, number>();\n let leftPx = 0;\n for (const col of this.columns()) {\n if (col.frozen === 'left') {\n offsets.set(col.key, leftPx);\n leftPx += this._columnWidthPx(col) ?? 0;\n }\n }\n return offsets;\n });\n\n readonly _lastFrozenLeftKey = computed(() => {\n const frozenLeft = this.columns().filter((col) => col.frozen === 'left');\n return frozenLeft.at(-1)?.key ?? null;\n });\n\n readonly _firstFrozenRightKey = computed(() => {\n const frozenRight = this.columns().filter((col) => col.frozen === 'right');\n return frozenRight[0]?.key ?? null;\n });\n\n isLastFrozenLeftColumn(key: string): boolean {\n return this._lastFrozenLeftKey() === key;\n }\n\n isFirstFrozenRightColumn(key: string): boolean {\n return this._firstFrozenRightKey() === key;\n }\n\n isColumnResizable(col: NeuTableColumn): boolean {\n return this.resizableColumns() && col.resizable !== false;\n }\n\n columnWidth(col: NeuTableColumn): string | null {\n const resized = this._columnWidths()[col.key];\n if (resized != null) {\n return `${resized}px`;\n }\n\n return col.width ?? null;\n }\n\n startColumnResize(col: NeuTableColumn, event: MouseEvent): void {\n if (!this.isColumnResizable(col) || !isPlatformBrowser(this._platformId)) {\n return;\n }\n\n event.preventDefault();\n event.stopPropagation();\n\n const headerCell = (event.currentTarget as HTMLElement | null)?.closest('th');\n const startWidth =\n (headerCell instanceof HTMLElement ? headerCell.getBoundingClientRect().width : 0) ||\n this._columnWidthPx(col) ||\n 160;\n const startX = event.clientX;\n const minWidth = col.minWidth ?? 96;\n const maxWidth = col.maxWidth ?? Number.POSITIVE_INFINITY;\n\n this._stopColumnResize();\n\n const onMove = (moveEvent: MouseEvent) => {\n const nextWidth = Math.min(\n maxWidth,\n Math.max(minWidth, Math.round(startWidth + (moveEvent.clientX - startX))),\n );\n this._setColumnWidth(col.key, nextWidth);\n };\n\n const onUp = () => {\n const width = this._columnWidths()[col.key];\n if (width != null) {\n this.columnResize.emit({ key: col.key, width });\n }\n this._stopColumnResize();\n };\n\n window.addEventListener('mousemove', onMove);\n window.addEventListener('mouseup', onUp);\n this._resizeCleanup = () => {\n window.removeEventListener('mousemove', onMove);\n window.removeEventListener('mouseup', onUp);\n this._resizeCleanup = null;\n };\n }\n\n resetColumnWidth(key: string, event?: Event): void {\n event?.preventDefault();\n event?.stopPropagation();\n\n this._columnWidths.update((current) => {\n if (!(key in current)) {\n return current;\n }\n\n const next = { ...current };\n delete next[key];\n return next;\n });\n }\n\n // ── Expansión de filas ────────────────────────────────────────────────\n private readonly _expandedKeys = signal<Set<unknown>>(new Set());\n\n isRowExpanded(row: Row): boolean {\n return this._expandedKeys().has(this.getRowKey(row));\n }\n\n expandRow(row: Row): void {\n const key = this.getRowKey(row);\n const set = this.expandMode() === 'single' ? new Set<unknown>() : new Set(this._expandedKeys());\n set.add(key);\n this._expandedKeys.set(set);\n }\n\n collapseRow(row: Row): void {\n const key = this.getRowKey(row);\n const set = new Set(this._expandedKeys());\n set.delete(key);\n this._expandedKeys.set(set);\n }\n\n toggleExpand(row: Row): void {\n const key = this.getRowKey(row);\n const set = this.expandMode() === 'single' ? new Set<unknown>() : new Set(this._expandedKeys());\n if (this._expandedKeys().has(key)) set.delete(key);\n else set.add(key);\n this._expandedKeys.set(set);\n }\n\n // ── Selección ─────────────────────────────────────────────────────────\n private readonly _selectedKeys = signal<Set<unknown>>(new Set());\n private readonly _selectionConfirmPending = signal<string | null>(null);\n\n readonly selectedCount = computed(() => this._selectedKeys().size);\n readonly selectedRows = computed(() =>\n this._rows().filter((row) => this._selectedKeys().has(this.getRowKey(row))),\n );\n readonly selectedRowsInfo = computed(\n () => `${this.selectedCount()} ${this.selectionSummaryLabel()}`,\n );\n\n /**\n * TRUE cuando TODOS los registros que pasan el filtro activo están seleccionados.\n * A diferencia de una selección global, actúa solo sobre el subconjunto filtrado.\n */\n readonly isAllFilteredSelected = computed(() => {\n const filtered = this.filteredData();\n return (\n filtered.length > 0 && filtered.every((r) => this._selectedKeys().has(this.getRowKey(r)))\n );\n });\n\n readonly isSomeFilteredSelected = computed(\n () =>\n this.filteredData().some((r) => this._selectedKeys().has(this.getRowKey(r))) &&\n !this.isAllFilteredSelected(),\n );\n\n isRowSelected(row: Row): boolean {\n return this._selectedKeys().has(this.getRowKey(row));\n }\n\n toggleRow(row: Row): void {\n const key = this.getRowKey(row);\n const set = new Set(this._selectedKeys());\n if (set.has(key)) set.delete(key);\n else set.add(key);\n this._selectedKeys.set(set);\n this._emitSelection(set);\n }\n\n /** Selecciona/deselecciona SOLO los datos filtrados activos. */\n toggleAll(): void {\n const set = new Set(this._selectedKeys());\n if (this.isAllFilteredSelected()) {\n this.filteredData().forEach((r) => set.delete(this.getRowKey(r)));\n } else {\n this.filteredData().forEach((r) => set.add(this.getRowKey(r)));\n }\n this._selectedKeys.set(set);\n this._emitSelection(set);\n }\n\n clearSelection(): void {\n this._selectedKeys.set(new Set());\n this._selectionConfirmPending.set(null);\n this.selectionChange.emit([]);\n }\n\n private _emitSelection(keys: Set<unknown>): void {\n const selected = this._rows().filter((r) => keys.has(this.getRowKey(r)));\n this.selectionChange.emit(selected);\n }\n\n // ── Navegación ────────────────────────────────────────────────────────\n goToPage(page: number): void {\n const clamped = Math.max(1, Math.min(page, this.totalPages()));\n if (this.serverSide()) {\n this._emitServerState({ page: clamped });\n } else if (this.useUrlState()) {\n this._urlState.setParam(this.pageParam(), String(clamped));\n } else {\n this._internalPage.set(clamped);\n }\n }\n\n sortBy(key: string, event?: MouseEvent): void {\n if (this.multiSort() && event?.shiftKey) {\n // Shift+click: toggle or add column / Shift+click: alterna o añade columna\n const entries = [...this._sortEntries()];\n const idx = entries.findIndex((e) => e.key === key);\n if (idx >= 0) {\n entries[idx] = { key, dir: entries[idx].dir === 'asc' ? 'desc' : 'asc' };\n } else {\n entries.push({ key, dir: 'asc' });\n }\n const val = entries.map((e) => `${e.key}:${e.dir}`).join(',') || null;\n if (this.useUrlState()) {\n this._urlState.setParam(this.multiSortParam(), val);\n } else {\n this._internalMultiSort.set(val ?? '');\n }\n } else if (this.multiSort()) {\n // Single click: replace sort / Click simple: reemplaza el orden\n const current = this._sortEntries().find((e) => e.key === key);\n const dir: 'asc' | 'desc' = current?.dir === 'asc' ? 'desc' : 'asc';\n const val = `${key}:${dir}`;\n if (this.useUrlState()) {\n this._urlState.setParam(this.multiSortParam(), val);\n } else {\n this._internalMultiSort.set(val);\n }\n } else {\n const dir = this.sortKey() === key && this.sortDir() === 'asc' ? 'desc' : 'asc';\n if (this.serverSide()) {\n this._emitServerState({ sortKey: key, sortDir: dir, page: 1 });\n } else if (this.useUrlState()) {\n this._urlState.patchParams({\n [this.sortParam()]: key,\n [this.sortDirParam()]: dir,\n [this.pageParam()]: '1',\n });\n } else {\n this._internalSortKey.set(key);\n this._internalSortDir.set(dir);\n this._internalPage.set(1);\n }\n }\n }\n\n onRowClick(row: Row, _event: MouseEvent): void {\n if (this.selectable()) this.toggleRow(row);\n this.rowClick.emit(row);\n }\n\n onSearch(event: Event): void {\n const q = (event.target as HTMLInputElement).value;\n this.searchChange.emit(q);\n if (this.serverSide()) {\n this._emitServerState({ search: q, page: 1 });\n } else if (this.useUrlState()) {\n this._urlState.patchParams({ [this.searchParam()]: q || null, [this.pageParam()]: '1' });\n } else {\n this._internalSearch.set(q);\n this._internalPage.set(1);\n }\n }\n\n clearSearch(): void {\n if (this.serverSide()) {\n this._emitServerState({ search: '', page: 1 });\n } else if (this.useUrlState()) {\n this._urlState.patchParams({ [this.searchParam()]: null, [this.pageParam()]: '1' });\n } else {\n this._internalSearch.set('');\n this._internalPage.set(1);\n }\n }\n\n onPageSizeChange(value: string | number | { target?: { value?: unknown } } | null): void {\n const normalizedValue =\n value && typeof value === 'object' ? (value.target?.value ?? null) : value;\n const size = Number(normalizedValue);\n if (!Number.isFinite(size) || size <= 0) return;\n this._dynamicPageSize.set(size);\n if (this.serverSide()) {\n this._emitServerState({ pageSize: size, page: 1 });\n } else if (this.useUrlState()) {\n this._urlState.patchParams({ [this.pageParam()]: '1' });\n } else {\n this._internalPage.set(1);\n }\n }\n\n setExactMatch(value: boolean): void {\n this._exactMatch.set(value);\n }\n\n setColumnFilter(colKey: string, value: unknown): void {\n // Column filters are local signal — no URL update avoids scroll jumps.\n // paginatedData already clamps currentPage to totalPages automatically.\n // Los filtros de columna son locales — sin URL para evitar saltos de scroll.\n // paginatedData ya adapta currentPage a totalPages automáticamente.\n this._columnFilters.update((f) => ({ ...f, [colKey]: value }));\n if (this.serverSide()) {\n this._emitServerState({\n columnFilters: { ...this._columnFilters(), [colKey]: value },\n page: 1,\n });\n }\n }\n\n clearColumnFilters(): void {\n this._columnFilters.set({});\n }\n\n // ── Actions ───────────────────────────────────────────────────────────\n isConfirmPending(row: Row, action: NeuTableAction<Row>): boolean {\n const p = this._confirmPending();\n return p !== null && p.rowKey === this.getRowKey(row) && p.actionKey === action.key;\n }\n\n handleAction(row: Row, action: NeuTableAction<Row>): void {\n if (action.confirm) {\n const p = this._confirmPending();\n const rowKey = this.getRowKey(row);\n if (p && p.rowKey === rowKey && p.actionKey === action.key) {\n this._confirmPending.set(null);\n this.actionClick.emit({ action, row });\n } else {\n this._confirmPending.set({ rowKey, actionKey: action.key });\n }\n } else {\n this.actionClick.emit({ action, row });\n }\n }\n\n cancelConfirm(): void {\n this._confirmPending.set(null);\n }\n\n isSelectionConfirmPending(action: NeuTableSelectionAction<Row>): boolean {\n return this._selectionConfirmPending() === action.key;\n }\n\n handleSelectionAction(action: NeuTableSelectionAction<Row>): void {\n const rows = this.selectedRows();\n\n if (action.confirm) {\n if (this._selectionConfirmPending() === action.key) {\n this._selectionConfirmPending.set(null);\n this.selectionActionClick.emit({ action, rows });\n } else {\n this._selectionConfirmPending.set(action.key);\n }\n return;\n }\n\n this.selectionActionClick.emit({ action, rows });\n }\n\n cancelSelectionConfirm(): void {\n this._selectionConfirmPending.set(null);\n }\n\n // ── Export ────────────────────────────────────────────────────────────\n exportCsv(): void {\n if (!isPlatformBrowser(this._platformId)) return;\n const cols = this._getExportColumns();\n const headers = cols.map((c) => `\"${c.header.replace(/\"/g, '\"\"')}\"`);\n const rows = this._getExportRows().map((row) =>\n cols.map((col) => `\"${this.getCellValue(row, col).replace(/\"/g, '\"\"')}\"`),\n );\n const csv = [headers, ...rows].map((r) => r.join(',')).join('\\r\\n');\n this._downloadBlob(\n new Blob([csv], { type: 'text/csv;charset=utf-8;' }),\n `${this.exportFileName()}.csv`,\n );\n }\n\n exportJson(): void {\n if (!isPlatformBrowser(this._platformId)) return;\n const cols = this._getExportColumns();\n const data = this._getExportRows().map((row) => {\n const obj: Record<string, string> = {};\n cols.forEach((col) => (obj[col.key] = this.getCellValue(row, col)));\n return obj;\n });\n this._downloadBlob(\n new Blob([JSON.stringify(data, null, 2)], { type: 'application/json' }),\n `${this.exportFileName()}.json`,\n );\n }\n\n private _getExportColumns(): NeuTableColumn[] {\n const keys = this.exportColumns();\n const all = this.columns().filter((c) => c.type !== 'actions');\n return keys.length ? all.filter((c) => keys.includes(c.key)) : all;\n }\n\n private _getExportRows(): Row[] {\n const scope = this.exportScope();\n\n if (scope === 'filtered') {\n return this.filteredData();\n }\n\n const selectedRows = this._rows().filter((row) =>\n this._selectedKeys().has(this.getRowKey(row)),\n );\n\n if (scope === 'selected') {\n return selectedRows;\n }\n\n return selectedRows.length > 0 ? selectedRows : this.filteredData();\n }\n\n private _downloadBlob(blob: Blob, filename: string): void {\n const url = URL.createObjectURL(blob);\n const a = document.createElement('a');\n a.href = url;\n a.download = filename;\n document.body.appendChild(a);\n a.click();\n document.body.removeChild(a);\n URL.revokeObjectURL(url);\n }\n\n // ── Utilidades ────────────────────────────────────────────────────────\n onTableScroll(event: Event): void {\n if (!this._virtualScrollActive()) {\n return;\n }\n\n this._virtualScrollTop.set((event.target as HTMLElement).scrollTop);\n }\n\n getRowKey(row: Row): unknown {\n return row[this.rowKey()] ?? JSON.stringify(row);\n }\n\n visibleRowNumber(rowIdx: number): number {\n return (\n (this.currentPage() - 1) * this.effectivePageSize() + this._virtualStartIndex() + rowIdx + 1\n );\n }\n\n private resetVirtualScrollPosition(): void {\n this._virtualScrollTop.set(0);\n requestAnimationFrame(() => {\n this._scrollContainer()?.nativeElement.scrollTo({ top: 0 });\n });\n }\n\n getRowClass(row: Row): string {\n return this.rowClass()?.(row) ?? '';\n }\n\n private _columnWidthPx(col: NeuTableColumn): number | null {\n const resized = this._columnWidths()[col.key];\n if (resized != null) {\n return resized;\n }\n\n if (!col.width || col.width === 'auto') {\n return null;\n }\n\n const px = Number.parseFloat(col.width);\n return Number.isNaN(px) ? null : px;\n }\n\n private _setColumnWidth(key: string, width: number): void {\n this._columnWidths.update((current) => ({ ...current, [key]: width }));\n }\n\n private _stopColumnResize(): void {\n this._resizeCleanup?.();\n }\n\n getCellValue(row: Row, col: NeuTableColumn): string {\n if (col.cell) return col.cell(row);\n const val = row[col.key];\n if (val == null) return '—';\n const locale = col.locale ?? 'es-ES';\n switch (col.type) {\n case 'date': {\n const d = val instanceof Date ? val : new Date(String(val));\n return isNaN(d.getTime())\n ? String(val)\n : d.toLocaleDateString(\n locale,\n col.dateFormat ?? { day: '2-digit', month: '2-digit', year: 'numeric' },\n );\n }\n case 'number':\n return new Intl.NumberFormat(locale, col.numberFormat).format(Number(val));\n case 'currency':\n return new Intl.NumberFormat(locale, {\n style: 'currency',\n currency: col.currencyCode ?? 'EUR',\n ...col.numberFormat,\n }).format(Number(val));\n default:\n return String(val);\n }\n }\n\n getSortPriority(key: string): number {\n if (!this.multiSort()) return -1;\n return this._sortEntries().findIndex((e) => e.key === key);\n }\n\n columnFilterControl(key: string): FormControl<string> {\n let control = this._columnFilterControls.get(key);\n if (!control) {\n control = new FormControl(String(this.getColumnFilterValue(key)), {\n nonNullable: true,\n });\n control.valueChanges\n .pipe(takeUntilDestroyed(this._destroyRef))\n .subscribe((value) => this.setColumnFilter(key, value));\n this._columnFilterControls.set(key, control);\n }\n return control;\n }\n\n getColumnFilterValue(key: string): unknown {\n return this._columnFilters()[key] ?? '';\n }\n\n private _emitServerState(patch: Partial<NeuTableServerState>): void {\n const current: NeuTableServerState = {\n page: this.currentPage(),\n pageSize: this.effectivePageSize(),\n search: this.searchQuery(),\n sortKey: this.sortKey(),\n sortDir: this.sortDir(),\n sortEntries: this._sortEntries(),\n columnFilters: this._columnFilters(),\n };\n this.serverStateChange.emit({ ...current, ...patch });\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"neural-ui-core-table.mjs","sources":["../../../../projects/ui-core/table/neu-table-expand.directive.ts","../../../../projects/ui-core/table/neu-table.component.ts","../../../../projects/ui-core/table/neural-ui-core-table.ts"],"sourcesContent":["import { Directive, TemplateRef, inject } from '@angular/core';\n\n/**\n * Directiva para definir el template de expansión de fila en NeuTable.\n *\n * Uso:\n * ```html\n * <neu-table [expandable]=\"true\" [columns]=\"cols\" [data]=\"rows\">\n * <ng-template neuTableExpand let-row>\n * <div>{{ row.details }}</div>\n * </ng-template>\n * </neu-table>\n * ```\n */\n@Directive({\n selector: 'ng-template[neuTableExpand]',\n standalone: true,\n})\nexport class NeuTableExpandDirective {\n readonly templateRef = inject(TemplateRef) as TemplateRef<{ $implicit: Record<string, unknown> }>;\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n DestroyRef,\n ElementRef,\n PLATFORM_ID,\n Signal,\n TemplateRef,\n ViewEncapsulation,\n computed,\n contentChild,\n effect,\n inject,\n input,\n output,\n signal,\n viewChild,\n} from '@angular/core';\nimport { isPlatformBrowser, NgTemplateOutlet } from '@angular/common';\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { NeuTableExpandDirective } from './neu-table-expand.directive';\nimport { NeuUrlStateService } from '@neural-ui/core/url-state';\nimport { NeuInputComponent } from '@neural-ui/core/input';\nimport { NeuSelectComponent } from '@neural-ui/core/select';\nimport { NeuDateInputComponent } from '@neural-ui/core/date-input';\nimport { NeuIconComponent } from '@neural-ui/core/icon';\nimport type { NeuSelectOption } from '@neural-ui/core/select';\nimport type {\n NeuTableAction,\n NeuTableActionEvent,\n NeuTableColumn,\n NeuTableSelectionAction,\n NeuTableSelectionActionEvent,\n NeuTableServerState,\n NeuTableSortEntry,\n} from './neu-table.types';\n\nexport type {\n NeuTableAction,\n NeuTableActionEvent,\n NeuTableBadgeConfig,\n NeuTableBadgeVariant,\n NeuTableCellType,\n NeuTableColumn,\n NeuTableSelectionAction,\n NeuTableSelectionActionEvent,\n NeuTableServerState,\n NeuTableSortEntry,\n} from './neu-table.types';\n\ntype Row = Record<string, unknown>;\n\n// Conversor interno — el input acepta object[] para compatibilidad con\n// interfaces de usuario concretas (User, Product…). Internamente casteamos a Row.\nfunction asRows(data: object[]): Row[] {\n return data as Row[];\n}\n\n/**\n * NeuralUI Table — Componente Estrella\n *\n * Tabla de datos con:\n * - Búsqueda/filtrado → ?q=...\n * - Paginación → ?page=...\n * - Ordenación → ?sort=col&sortDir=asc|desc\n * - Selección de filas (múltiple) opcional\n * - Skeleton de carga animado\n * - Scroll horizontal elegante en mobile (<400px)\n *\n * Uso básico:\n * <neu-table [columns]=\"cols\" [data]=\"rows\" />\n *\n * Múltiples tablas por página:\n * <neu-table pageParam=\"userPage\" searchParam=\"userQ\" sortParam=\"userSort\" ... />\n */\n@Component({\n selector: 'neu-table',\n imports: [\n NgTemplateOutlet,\n ReactiveFormsModule,\n NeuInputComponent,\n NeuSelectComponent,\n NeuDateInputComponent,\n NeuIconComponent,\n ],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class.neu-table__host]': 'true',\n '[class.neu-table__host--compact]': 'density() === \"compact\"',\n '[class.neu-table__host--relaxed]': 'density() === \"relaxed\"',\n },\n template: `\n <div\n class=\"neu-table-container\"\n [class.neu-table--sticky-header]=\"stickyHeader()\"\n [class.neu-table-container--bordered]=\"bordered()\"\n [class.neu-table-container--rounded]=\"roundedBorders()\"\n [class.neu-table-container--striped]=\"stripedRows()\"\n >\n <!-- ---- Toolbar ---- -->\n @if (searchable() || title() || exportable() || toolbarExtraRef()) {\n <div class=\"neu-table__toolbar\">\n @if (title()) {\n <h3 class=\"neu-table__title\">{{ title() }}</h3>\n }\n @if (toolbarExtraRef()) {\n <div class=\"neu-table__toolbar-extra\">\n <ng-container [ngTemplateOutlet]=\"toolbarExtraRef()!\" />\n </div>\n }\n @if (searchable()) {\n <div class=\"neu-table__search-group\">\n <div class=\"neu-table__search-wrapper\">\n <svg\n class=\"neu-table__search-icon\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n aria-hidden=\"true\"\n >\n <circle cx=\"11\" cy=\"11\" r=\"8\" />\n <line x1=\"21\" y1=\"21\" x2=\"16.65\" y2=\"16.65\" />\n </svg>\n <input\n class=\"neu-table__search\"\n type=\"search\"\n [placeholder]=\"searchPlaceholder()\"\n [value]=\"searchQuery()\"\n (input)=\"onSearch($event)\"\n [attr.aria-label]=\"searchAriaLabel()\"\n />\n @if (searchQuery()) {\n <button\n class=\"neu-table__search-clear\"\n type=\"button\"\n [attr.aria-label]=\"clearSearchAriaLabel()\"\n (click)=\"clearSearch()\"\n >\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n >\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\" />\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\" />\n </svg>\n </button>\n }\n </div>\n @if (exactMatchable()) {\n <label class=\"neu-table__exact-label\">\n <input\n class=\"neu-table__exact-checkbox\"\n type=\"checkbox\"\n [checked]=\"exactMatch()\"\n (change)=\"setExactMatch($any($event.target).checked)\"\n />\n {{ exactMatchLabel() }}\n </label>\n }\n </div>\n }\n @if (exportable() && !loading()) {\n <div class=\"neu-table__export-group\">\n @if (exportFormats().includes('csv')) {\n <button\n class=\"neu-table__export-btn\"\n type=\"button\"\n (click)=\"exportCsv()\"\n [title]=\"exportCsvTitle()\"\n >\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n aria-hidden=\"true\"\n width=\"15\"\n height=\"15\"\n >\n <path d=\"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\" />\n <polyline points=\"7 10 12 15 17 10\" />\n <line x1=\"12\" y1=\"15\" x2=\"12\" y2=\"3\" />\n </svg>\n CSV\n </button>\n }\n @if (exportFormats().includes('json')) {\n <button\n class=\"neu-table__export-btn\"\n type=\"button\"\n (click)=\"exportJson()\"\n [title]=\"exportJsonTitle()\"\n >\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n aria-hidden=\"true\"\n width=\"15\"\n height=\"15\"\n >\n <path d=\"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\" />\n <polyline points=\"7 10 12 15 17 10\" />\n <line x1=\"12\" y1=\"15\" x2=\"12\" y2=\"3\" />\n </svg>\n JSON\n </button>\n }\n </div>\n }\n </div>\n }\n\n <!-- Barra de selección (aparece al seleccionar) -->\n @if (selectable() && selectedCount() > 0) {\n <div class=\"neu-table__selection-bar\">\n <div class=\"neu-table__selection-main\">\n <span>{{ selectedRowsInfo() }}</span>\n @if (selectionActions().length > 0) {\n <div class=\"neu-table__selection-actions\">\n @for (action of selectionActions(); track action.key) {\n @if (action.show === undefined || action.show(selectedRows())) {\n @if (isSelectionConfirmPending(action)) {\n <span class=\"neu-table__action-confirm\">\n <span>{{ action.confirm }}</span>\n <button\n class=\"neu-table__action-btn neu-table__action-btn--danger\"\n type=\"button\"\n (click)=\"handleSelectionAction(action)\"\n >\n Sí\n </button>\n <button\n class=\"neu-table__action-btn\"\n type=\"button\"\n (click)=\"cancelSelectionConfirm()\"\n >\n No\n </button>\n </span>\n } @else {\n <button\n class=\"neu-table__export-btn neu-table__export-btn--selection neu-table__export-btn--{{\n action.variant ?? 'ghost'\n }}\"\n type=\"button\"\n [disabled]=\"action.disabled ? action.disabled(selectedRows()) : false\"\n [title]=\"action.label\"\n (click)=\"handleSelectionAction(action)\"\n >\n @if (action.icon.startsWith('lucide')) {\n <neu-icon [name]=\"action.icon\" size=\"0.95rem\" aria-hidden=\"true\" />\n } @else {\n <span aria-hidden=\"true\">{{ action.icon }}</span>\n }\n <span>{{ action.label }}</span>\n </button>\n }\n }\n }\n </div>\n }\n </div>\n <button class=\"neu-table__selection-clear\" type=\"button\" (click)=\"clearSelection()\">\n {{ clearSelectionLabel() }}\n </button>\n </div>\n }\n\n <!-- ---- Scroll container ---- -->\n <div\n #scrollContainer\n class=\"neu-table__scroll-container\"\n [class.neu-table__scroll-container--virtual]=\"_virtualScrollActive()\"\n role=\"region\"\n [attr.aria-label]=\"title() || tableAriaLabel()\"\n [style.max-height]=\"_virtualScrollActive() ? virtualContainerMaxHeight() : null\"\n (scroll)=\"onTableScroll($event)\"\n >\n <table class=\"neu-table\" [attr.aria-rowcount]=\"filteredData().length\">\n <thead class=\"neu-table__head\">\n <tr>\n <!-- Checkbox de selección global -->\n @if (expandable()) {\n <th class=\"neu-table__th neu-table__th--expand-col\" scope=\"col\"></th>\n }\n @if (selectable()) {\n <th class=\"neu-table__th neu-table__th--check\" scope=\"col\">\n <input\n type=\"checkbox\"\n class=\"neu-table__checkbox\"\n [checked]=\"isAllFilteredSelected()\"\n [indeterminate]=\"isSomeFilteredSelected()\"\n (change)=\"toggleAll()\"\n [attr.aria-label]=\"selectAllAriaLabel()\"\n />\n </th>\n }\n @if (showRowNumbers()) {\n <th class=\"neu-table__th neu-table__th--rn\" scope=\"col\">#</th>\n }\n @for (col of columns(); track col.key) {\n <th\n class=\"neu-table__th\"\n [class.neu-table__th--sortable]=\"sortable() && col.sortable !== false\"\n [class.neu-table__th--sorted-asc]=\"\n !multiSort() && sortKey() === col.key && sortDir() === 'asc'\n \"\n [class.neu-table__th--sorted-desc]=\"\n !multiSort() && sortKey() === col.key && sortDir() === 'desc'\n \"\n [class]=\"col.cellClass ?? ''\"\n [class.neu-table__th--frozen-left]=\"col.frozen === 'left'\"\n [class.neu-table__th--frozen-right]=\"col.frozen === 'right'\"\n [class.neu-table__th--frozen-left-boundary]=\"isLastFrozenLeftColumn(col.key)\"\n [class.neu-table__th--frozen-right-boundary]=\"isFirstFrozenRightColumn(col.key)\"\n [style.left]=\"\n col.frozen === 'left' ? (_frozenLeftOffsets().get(col.key) ?? 0) + 'px' : null\n \"\n [style.width]=\"columnWidth(col)\"\n [style.min-width]=\"columnWidth(col)\"\n [style.max-width]=\"columnWidth(col)\"\n [style.text-align]=\"col.align ?? 'left'\"\n scope=\"col\"\n (click)=\"sortable() && col.sortable !== false ? sortBy(col.key, $event) : null\"\n >\n @if (col.headerTemplate) {\n <ng-container\n [ngTemplateOutlet]=\"col.headerTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: col }\"\n />\n } @else {\n {{ col.header }}\n }\n @if (sortable() && col.sortable !== false) {\n <span class=\"neu-table__sort-icon\" aria-hidden=\"true\">\n @if (multiSort()) {\n @let pri = getSortPriority(col.key);\n @if (pri >= 0) {\n <span class=\"neu-table__sort-priority\">{{ pri + 1 }}</span>\n {{ _sortEntries()[pri]?.dir === 'asc' ? '↑' : '↓' }}\n } @else {\n ↕\n }\n } @else {\n @if (sortKey() === col.key) {\n {{ sortDir() === 'asc' ? '↑' : '↓' }}\n } @else {\n ↕\n }\n }\n </span>\n }\n @if (isColumnResizable(col)) {\n <button\n class=\"neu-table__resize-handle\"\n type=\"button\"\n [attr.aria-label]=\"'Resize ' + col.header\"\n (dblclick)=\"resetColumnWidth(col.key, $event)\"\n (mousedown)=\"startColumnResize(col, $event)\"\n ></button>\n }\n </th>\n }\n </tr>\n <!-- ── Fila de filtros de columna / Column filter row ── -->\n @if (_hasFilterableCol()) {\n <tr class=\"neu-table__filter-row\">\n @if (expandable()) {\n <th class=\"neu-table__th neu-table__th--filter-placeholder\" scope=\"col\"></th>\n }\n @if (selectable()) {\n <th class=\"neu-table__th neu-table__th--filter-placeholder\" scope=\"col\"></th>\n }\n @if (showRowNumbers()) {\n <th class=\"neu-table__th neu-table__th--filter-placeholder\" scope=\"col\"></th>\n }\n @for (col of columns(); track col.key) {\n <th\n class=\"neu-table__th neu-table__th--filter\"\n scope=\"col\"\n [style.width]=\"columnWidth(col)\"\n [style.min-width]=\"columnWidth(col)\"\n [style.max-width]=\"columnWidth(col)\"\n >\n @if (col.filterable) {\n @if (col.filterType === 'select') {\n <neu-select\n [floatingLabel]=\"false\"\n [options]=\"_filterOpts(col)\"\n [formControl]=\"columnFilterControl(col.key)\"\n [attr.aria-label]=\"filterAriaPrefix() + ' ' + col.header\"\n />\n } @else if (col.filterType === 'date') {\n <neu-date-input\n [formControl]=\"columnFilterControl(col.key)\"\n [attr.aria-label]=\"filterAriaPrefix() + ' ' + col.header\"\n />\n } @else {\n <neu-input\n [floatingLabel]=\"false\"\n [placeholder]=\"filterPlaceholder()\"\n [formControl]=\"columnFilterControl(col.key)\"\n [attr.aria-label]=\"filterAriaPrefix() + ' ' + col.header\"\n />\n }\n }\n </th>\n }\n </tr>\n }\n </thead>\n\n <tbody class=\"neu-table__body\">\n @if (loading()) {\n <tr class=\"neu-table__row--loading\">\n <td [attr.colspan]=\"totalColspan()\" class=\"neu-table__td neu-table__td--center\">\n <div class=\"neu-table__skeleton-rows\">\n @for (_ of skeletonRows(); track $index) {\n <div class=\"neu-table__skeleton-row\">\n @for (__ of columns(); track $index) {\n <div class=\"neu-table__skeleton-cell\"></div>\n }\n </div>\n }\n </div>\n </td>\n </tr>\n } @else if (paginatedData().length === 0) {\n <tr>\n <td [attr.colspan]=\"totalColspan()\" class=\"neu-table__td neu-table__td--empty\">\n @if (emptyStateTemplate()) {\n <ng-container [ngTemplateOutlet]=\"emptyStateTemplate()!\" />\n } @else {\n <div class=\"neu-table__empty\">\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n >\n <circle cx=\"11\" cy=\"11\" r=\"8\" />\n <line x1=\"21\" y1=\"21\" x2=\"16.65\" y2=\"16.65\" />\n </svg>\n <p>{{ emptyMessage() }}</p>\n @if (searchQuery()) {\n <button\n class=\"neu-table__clear-filter\"\n type=\"button\"\n (click)=\"clearSearch()\"\n >\n {{ clearFilterLabel() }}\n </button>\n }\n </div>\n }\n </td>\n </tr>\n } @else {\n @if (_virtualScrollActive() && _virtualTopSpacerHeight() > 0) {\n <tr class=\"neu-table__spacer-row\" aria-hidden=\"true\">\n <td\n [attr.colspan]=\"totalColspan()\"\n class=\"neu-table__spacer-cell\"\n [style.height.px]=\"_virtualTopSpacerHeight()\"\n ></td>\n </tr>\n }\n @for (row of visiblePageRows(); track getRowKey(row); let rowIdx = $index) {\n <tr\n class=\"neu-table__row\"\n [class]=\"getRowClass(row)\"\n [class.neu-table__row--selected]=\"isRowSelected(row)\"\n [class.neu-table__row--clickable]=\"selectable()\"\n (click)=\"onRowClick(row, $event)\"\n (dblclick)=\"rowDblClick.emit(row)\"\n >\n @if (expandable()) {\n <td\n class=\"neu-table__td neu-table__td--expand-col\"\n (click)=\"$event.stopPropagation()\"\n >\n <button\n class=\"neu-table__expand-btn\"\n type=\"button\"\n (click)=\"toggleExpand(row)\"\n [class.neu-table__expand-btn--open]=\"isRowExpanded(row)\"\n [attr.aria-expanded]=\"isRowExpanded(row)\"\n [attr.aria-label]=\"expandRowAriaLabel()\"\n >\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n >\n <polyline points=\"9 18 15 12 9 6\" />\n </svg>\n </button>\n </td>\n }\n @if (selectable()) {\n <td\n class=\"neu-table__td neu-table__th--check\"\n (click)=\"$event.stopPropagation()\"\n >\n <input\n type=\"checkbox\"\n class=\"neu-table__checkbox\"\n [checked]=\"isRowSelected(row)\"\n (change)=\"toggleRow(row)\"\n [attr.aria-label]=\"selectRowAriaLabel()\"\n />\n </td>\n }\n @if (showRowNumbers()) {\n <td class=\"neu-table__td neu-table__td--rn\">\n {{ visibleRowNumber(rowIdx) }}\n </td>\n }\n @for (col of columns(); track col.key) {\n <td\n class=\"neu-table__td\"\n [class]=\"col.cellClass ?? ''\"\n [class.neu-table__td--frozen-left]=\"col.frozen === 'left'\"\n [class.neu-table__td--frozen-right]=\"col.frozen === 'right'\"\n [class.neu-table__td--frozen-left-boundary]=\"isLastFrozenLeftColumn(col.key)\"\n [class.neu-table__td--frozen-right-boundary]=\"\n isFirstFrozenRightColumn(col.key)\n \"\n [style.left]=\"\n col.frozen === 'left'\n ? (_frozenLeftOffsets().get(col.key) ?? 0) + 'px'\n : null\n \"\n [style.width]=\"columnWidth(col)\"\n [style.min-width]=\"columnWidth(col)\"\n [style.max-width]=\"columnWidth(col)\"\n [style.text-align]=\"col.align ?? 'left'\"\n >\n @if (col.cellTemplate) {\n <ng-container\n [ngTemplateOutlet]=\"col.cellTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: row, row: row, column: col }\"\n />\n } @else if (col.type === 'badge') {\n @let badgeVal = getCellValue(row, col);\n @let badgeCfg = col.badgeMap?.[badgeVal];\n <span\n class=\"neu-table__cell-badge neu-table__cell-badge--{{\n badgeCfg?.variant ?? 'default'\n }}\"\n >\n {{ badgeCfg?.label ?? badgeVal }}\n </span>\n } @else if (col.type === 'link') {\n <a\n class=\"neu-table__cell-link\"\n [href]=\"col.linkHref ? col.linkHref(row) : '#'\"\n [target]=\"col.linkTarget ?? '_self'\"\n (click)=\"$event.stopPropagation()\"\n >{{ getCellValue(row, col) }}</a\n >\n } @else if (col.type === 'actions') {\n <div class=\"neu-table__actions\">\n @for (action of col.actions ?? []; track action.key) {\n @if (action.show === undefined || action.show(row)) {\n @if (isConfirmPending(row, action)) {\n <span class=\"neu-table__action-confirm\">\n <span>{{ action.confirm }}</span>\n <button\n class=\"neu-table__action-btn neu-table__action-btn--danger\"\n type=\"button\"\n (click)=\"handleAction(row, action); $event.stopPropagation()\"\n >\n Sí\n </button>\n <button\n class=\"neu-table__action-btn\"\n type=\"button\"\n (click)=\"cancelConfirm(); $event.stopPropagation()\"\n >\n No\n </button>\n </span>\n } @else {\n <button\n class=\"neu-table__action-btn neu-table__action-btn--{{\n action.variant ?? 'ghost'\n }}\"\n type=\"button\"\n [disabled]=\"action.disabled ? action.disabled(row) : false\"\n [title]=\"action.label\"\n (click)=\"handleAction(row, action); $event.stopPropagation()\"\n >\n @if (action.icon.startsWith('lucide')) {\n <neu-icon\n class=\"neu-table__action-icon\"\n [name]=\"action.icon\"\n size=\"1rem\"\n aria-hidden=\"true\"\n />\n } @else {\n <span class=\"neu-table__action-icon\" aria-hidden=\"true\">{{\n action.icon\n }}</span>\n }\n <span class=\"sr-only\">{{ action.label }}</span>\n </button>\n }\n }\n }\n </div>\n } @else {\n {{ getCellValue(row, col) }}\n }\n </td>\n }\n </tr>\n @if (expandable() && isRowExpanded(row)) {\n <tr class=\"neu-table__row-expand-detail\">\n <td [attr.colspan]=\"totalColspan()\" class=\"neu-table__td--expand-panel\">\n <div class=\"neu-table__expand-content\">\n @if (expandTemplate(); as tpl) {\n <ng-container\n [ngTemplateOutlet]=\"tpl.templateRef\"\n [ngTemplateOutletContext]=\"{ $implicit: row }\"\n />\n }\n </div>\n </td>\n </tr>\n }\n }\n @if (_virtualScrollActive() && _virtualBottomSpacerHeight() > 0) {\n <tr class=\"neu-table__spacer-row\" aria-hidden=\"true\">\n <td\n [attr.colspan]=\"totalColspan()\"\n class=\"neu-table__spacer-cell\"\n [style.height.px]=\"_virtualBottomSpacerHeight()\"\n ></td>\n </tr>\n }\n }\n </tbody>\n @if (footerRow()) {\n <tfoot class=\"neu-table__foot\">\n <tr class=\"neu-table__footer-row\">\n @if (expandable()) {\n <td class=\"neu-table__td\"></td>\n }\n @if (selectable()) {\n <td class=\"neu-table__td\"></td>\n }\n @if (showRowNumbers()) {\n <td class=\"neu-table__td\"></td>\n }\n @for (col of columns(); track col.key) {\n <td\n class=\"neu-table__td neu-table__td--footer\"\n [style.width]=\"columnWidth(col)\"\n [style.min-width]=\"columnWidth(col)\"\n [style.max-width]=\"columnWidth(col)\"\n [style.text-align]=\"col.align ?? 'left'\"\n >\n {{ footerRow()![col.key] !== undefined ? footerRow()![col.key] : '' }}\n </td>\n }\n </tr>\n </tfoot>\n }\n </table>\n </div>\n\n <!-- ---- Footer ---- -->\n @if (!loading() && filteredData().length > 0) {\n <div class=\"neu-table__footer\">\n @if (pagination() && pageSizeOptions().length > 0) {\n <div class=\"neu-table__page-size\">\n <label class=\"neu-table__page-size-label\">{{ pageSizeLabel() }}</label>\n <neu-select\n class=\"neu-table__page-size-select\"\n [floatingLabel]=\"false\"\n [options]=\"_pageSizeOptions()\"\n [formControl]=\"_pageSizeControl\"\n [attr.aria-label]=\"pageSizeAriaLabel()\"\n size=\"sm\"\n />\n </div>\n }\n <span class=\"neu-table__info\">\n {{ paginationInfo() }}\n </span>\n @if (totalPages() > 1) {\n <nav class=\"neu-table__pagination\" [attr.aria-label]=\"paginationAriaLabel()\">\n <button\n class=\"neu-table__page-btn\"\n [disabled]=\"currentPage() === 1\"\n (click)=\"goToPage(currentPage() - 1)\"\n [attr.aria-label]=\"previousPageAriaLabel()\"\n type=\"button\"\n >\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n >\n <polyline points=\"15 18 9 12 15 6\" />\n </svg>\n </button>\n @for (page of pageNumbers(); track page) {\n <button\n class=\"neu-table__page-btn\"\n [class.neu-table__page-btn--active]=\"page === currentPage()\"\n (click)=\"goToPage(page)\"\n [attr.aria-current]=\"page === currentPage() ? 'page' : null\"\n type=\"button\"\n >\n {{ page }}\n </button>\n }\n <button\n class=\"neu-table__page-btn\"\n [disabled]=\"currentPage() === totalPages()\"\n (click)=\"goToPage(currentPage() + 1)\"\n [attr.aria-label]=\"nextPageAriaLabel()\"\n type=\"button\"\n >\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n >\n <polyline points=\"9 18 15 12 9 6\" />\n </svg>\n </button>\n </nav>\n }\n </div>\n }\n </div>\n `,\n styleUrl: './neu-table.component.scss',\n})\nexport class NeuTableComponent {\n private readonly _destroyRef = inject(DestroyRef);\n private readonly _urlState = inject(NeuUrlStateService);\n private readonly _platformId = inject(PLATFORM_ID);\n private readonly _scrollContainer = viewChild<ElementRef<HTMLElement>>('scrollContainer');\n private readonly _virtualOverscan = 3;\n\n readonly expandTemplate = contentChild(NeuTableExpandDirective);\n\n // ── Inputs de datos ─────────────────────────────────────────────────\n readonly columns = input<NeuTableColumn[]>([]);\n readonly data = input<object[]>([]);\n readonly pageSize = input<number>(10);\n /** Controla si la paginación está activa. Si es false, se muestran todos los datos y se ocultan los controles de paginación y pageSize. */\n readonly pagination = input<boolean>(true);\n readonly loading = input<boolean>(false);\n readonly title = input<string>('');\n readonly toolbarExtraRef = input<TemplateRef<unknown> | null>(null);\n readonly emptyMessage = input<string>('No results found');\n readonly skeletonRows = input<number[]>([1, 2, 3, 4, 5]);\n\n // ── Inputs de funcionalidad ──────────────────────────────────────────\n readonly searchable = input<boolean>(true);\n readonly searchPlaceholder = input<string>('Search...');\n readonly exactMatchable = input<boolean>(false);\n readonly exactMatchLabel = input<string>('Exact match');\n readonly searchAriaLabel = input<string>('Search table');\n readonly clearSearchAriaLabel = input<string>('Clear search');\n readonly clearFilterLabel = input<string>('Clear filter');\n readonly previousPageAriaLabel = input<string>('Previous page');\n readonly nextPageAriaLabel = input<string>('Next page');\n readonly pageSizeLabel = input<string>('Rows:');\n readonly pageSizeAriaLabel = input<string>('Rows per page');\n readonly paginationAriaLabel = input<string>('Pagination');\n readonly exportCsvTitle = input<string>('Export CSV');\n readonly exportJsonTitle = input<string>('Export JSON');\n readonly clearSelectionLabel = input<string>('Clear selection');\n readonly selectionSummaryLabel = input<string>('selected');\n readonly tableAriaLabel = input<string>('Data table');\n readonly selectAllAriaLabel = input<string>('Select all filtered rows');\n readonly selectRowAriaLabel = input<string>('Select row');\n readonly expandRowAriaLabel = input<string>('Expand row');\n readonly filterPlaceholder = input<string>('Filter...');\n readonly filterAriaPrefix = input<string>('Filter by');\n readonly allFilterOptionLabel = input<string>('All');\n readonly ofLabel = input<string>('of');\n readonly resultLabelSingular = input<string>('result');\n readonly resultLabelPlural = input<string>('results');\n readonly sortable = input<boolean>(false);\n readonly selectable = input<boolean>(false);\n readonly expandable = input<boolean>(false);\n readonly expandMode = input<'multiple' | 'single'>('multiple');\n readonly exportable = input<boolean>(false);\n readonly exportFileName = input<string>('export');\n readonly pageSizeOptions = input<number[]>([]);\n readonly stickyHeader = input<boolean>(false);\n readonly virtualScroll = input<boolean>(false);\n readonly virtualScrollVisibleItems = input<number>(8);\n readonly resizableColumns = input<boolean>(false);\n readonly rowKey = input<string>('id');\n readonly bordered = input<boolean>(true);\n readonly roundedBorders = input<boolean>(true);\n readonly stripedRows = input<boolean>(false);\n\n // ── Inputs nuevos v1.3.0 ──────────────────────────────────────────────\n readonly density = input<'compact' | 'normal' | 'relaxed'>('normal');\n readonly showRowNumbers = input<boolean>(false);\n readonly rowClass = input<((row: Row) => string) | undefined>(undefined);\n readonly footerRow = input<Record<string, string | number> | undefined>(undefined);\n readonly emptyStateTemplate = input<TemplateRef<void> | undefined>(undefined);\n readonly serverSide = input<boolean>(false);\n readonly totalItems = input<number | undefined>(undefined);\n readonly multiSort = input<boolean>(false);\n readonly exportFormats = input<('csv' | 'json')[]>(['csv']);\n readonly exportColumns = input<string[]>([]);\n readonly exportScope = input<'filtered' | 'selected' | 'auto'>('auto');\n readonly selectionActions = input<NeuTableSelectionAction<Row>[]>([]);\n\n // ── URL params ────────────────────────────────────────────────────────\n readonly pageParam = input<string>('page');\n readonly searchParam = input<string>('q');\n readonly sortParam = input<string>('sort');\n readonly sortDirParam = input<string>('sortDir');\n /** Param used to persist multi-sort state in the URL / Param para persistir multisort en la URL */\n readonly multiSortParam = input<string>('msort');\n /**\n * Activa o desactiva la sincronización de estado con los queryParams de la URL.\n * Cuando es false, la paginación, búsqueda y ordenación se gestionan con\n * señales internas sin tocar la URL del navegador.\n *\n * Enables or disables URL query-param synchronization.\n * When false, pagination, search and sort are managed with internal signals\n * and the browser URL is never modified.\n */\n readonly useUrlState = input<boolean>(true);\n\n // ── Outputs ───────────────────────────────────────────────────────────\n readonly selectionChange = output<Row[]>();\n readonly rowClick = output<Row>();\n readonly rowDblClick = output<Row>();\n readonly actionClick = output<NeuTableActionEvent<Row>>();\n readonly selectionActionClick = output<NeuTableSelectionActionEvent<Row>>();\n readonly serverStateChange = output<NeuTableServerState>();\n readonly searchChange = output<string>();\n readonly columnResize = output<{ key: string; width: number }>();\n\n // ── Estado interno (usado cuando useUrlState = false) ─────────────────\n // Internal state signals (used when useUrlState = false)\n private readonly _internalPage = signal(1);\n private readonly _internalSearch = signal('');\n private readonly _internalSortKey = signal('');\n private readonly _internalSortDir = signal<'asc' | 'desc'>('asc');\n private readonly _internalMultiSort = signal('');\n private readonly _columnWidths = signal<Record<string, number>>({});\n private _resizeCleanup: (() => void) | null = null;\n\n // ── URL State ─────────────────────────────────────────────────────────\n private readonly _urlParamSignals = new Map<string, Signal<string | null>>();\n\n private _getUrlParamSignal(key: string): Signal<string | null> {\n let paramSignal = this._urlParamSignals.get(key);\n if (!paramSignal) {\n paramSignal = this._urlState.getParam(key);\n this._urlParamSignals.set(key, paramSignal);\n }\n return paramSignal;\n }\n\n private _readUrlParam(key: string): string | null {\n return this._getUrlParamSignal(key)();\n }\n\n readonly currentPage = computed(() => {\n if (!this.useUrlState()) return this._internalPage();\n const raw = this._readUrlParam(this.pageParam());\n const n = Number(raw);\n return !raw || isNaN(n) || n < 1 ? 1 : n;\n });\n\n readonly searchQuery = computed(() => {\n if (!this.useUrlState()) return this._internalSearch();\n return this._readUrlParam(this.searchParam()) ?? '';\n });\n\n readonly sortKey = computed(() => {\n if (!this.useUrlState()) return this._internalSortKey();\n return this._readUrlParam(this.sortParam()) ?? '';\n });\n\n readonly sortDir = computed<'asc' | 'desc'>(() => {\n if (!this.useUrlState()) return this._internalSortDir();\n const d = this._readUrlParam(this.sortDirParam());\n return d === 'desc' ? 'desc' : 'asc';\n });\n\n // ---- Pipeline de datos / Data pipeline ----\n private readonly rows = computed(() => asRows(this.data()));\n\n // ── Estado interno ────────────────────────────────────────────────────\n private readonly _exactMatch = signal(false);\n readonly exactMatch = this._exactMatch.asReadonly();\n\n /**\n * Multi-sort entries derived from URL param or internal state.\n * Entradas de multisort derivadas del param de URL o del estado interno.\n */\n readonly _sortEntries = computed<NeuTableSortEntry[]>(() => {\n if (!this.multiSort()) return [];\n const param = this.useUrlState()\n ? this._readUrlParam(this.multiSortParam())\n : this._internalMultiSort();\n if (!param) return [];\n return param.split(',').flatMap((chunk) => {\n const [key, dir] = chunk.split(':');\n if (!key) return [];\n return [{ key, dir: (dir === 'desc' ? 'desc' : 'asc') as 'asc' | 'desc' }];\n });\n });\n readonly _columnFilters = signal<Record<string, unknown>>({});\n readonly _pageSizeControl = new FormControl('', { nonNullable: true });\n private readonly _columnFilterControls = new Map<string, FormControl<string>>();\n /** True when at least one column has filterable:true / True si alguna columna tiene filterable:true */\n readonly _hasFilterableCol = computed(() => this.columns().some((c) => c.filterable));\n\n /** Convierte filterOptions de string[] a NeuSelectOption[] con opción \"Todos\" al inicio.\n * Converts filterOptions from string[] to NeuSelectOption[] with a leading \"All\" option. */\n _filterOpts(col: NeuTableColumn): NeuSelectOption[] {\n return [\n { label: this.allFilterOptionLabel(), value: '' },\n ...(col.filterOptions ?? []).map((o) => ({ label: o, value: o })),\n ];\n }\n\n readonly _pageSizeOptions = computed<NeuSelectOption[]>(() =>\n this.pageSizeOptions().map((size) => ({ label: String(size), value: String(size) })),\n );\n\n private readonly _virtualScrollTop = signal(0);\n\n constructor() {\n this._destroyRef.onDestroy(() => this._stopColumnResize());\n\n this._pageSizeControl.valueChanges\n .pipe(takeUntilDestroyed(this._destroyRef))\n .subscribe((value) => this.onPageSizeChange(value));\n\n effect(() => {\n const nextSize = String(this.effectivePageSize());\n if (this._pageSizeControl.value !== nextSize) {\n this._pageSizeControl.setValue(nextSize, { emitEvent: false });\n }\n });\n\n effect(() => {\n const filters = this._columnFilters();\n for (const col of this.columns()) {\n if (!col.filterable) continue;\n const control = this.columnFilterControl(col.key);\n const nextValue = String(filters[col.key] ?? '');\n if (control.value !== nextValue) {\n control.setValue(nextValue, { emitEvent: false });\n }\n }\n });\n\n effect(() => {\n if (!this.virtualScroll()) {\n return;\n }\n\n this.currentPage();\n this.searchQuery();\n this.sortKey();\n this.sortDir();\n this._sortEntries();\n this._columnFilters();\n this.effectivePageSize();\n this.paginatedData().length;\n this.resetVirtualScrollPosition();\n });\n }\n\n private readonly _confirmPending = signal<{ rowKey: unknown; actionKey: string } | null>(null);\n\n // ── Pipeline de datos ─────────────────────────────────────────────────\n private readonly _rows = computed(() => asRows(this.data()));\n\n readonly filteredData = computed<Row[]>(() => {\n if (this.serverSide()) return this._rows();\n const rows = this._rows();\n const colFilters = this._columnFilters();\n const q = this.searchQuery().trim().toLowerCase();\n const exact = this._exactMatch();\n const matches = (text: string) =>\n exact ? text.toLowerCase() === q : text.toLowerCase().includes(q);\n return rows.filter((row) => {\n const passesGlobal =\n !q ||\n this.columns().some((col) => {\n const rawVal = String(row[col.key] ?? '');\n const displayVal = col.cell\n ? col.cell(row)\n : col.type === 'badge' && col.badgeMap?.[rawVal]?.label\n ? col.badgeMap[rawVal].label!\n : rawVal;\n return matches(displayVal) || matches(rawVal);\n });\n if (!passesGlobal) return false;\n for (const [colKey, filterVal] of Object.entries(colFilters)) {\n if (filterVal === null || filterVal === '' || filterVal === undefined) continue;\n if (\n !String(row[colKey] ?? '')\n .toLowerCase()\n .includes(String(filterVal).toLowerCase())\n )\n return false;\n }\n return true;\n });\n });\n\n readonly sortedData = computed<Row[]>(() => {\n if (this.serverSide()) return this.filteredData();\n const data = [...this.filteredData()];\n if (!this.sortable()) return data;\n if (this.multiSort() && this._sortEntries().length > 0) {\n const entries = this._sortEntries();\n return data.sort((a, b) => {\n for (const entry of entries) {\n const cmp = String(a[entry.key] ?? '').localeCompare(\n String(b[entry.key] ?? ''),\n undefined,\n { numeric: true },\n );\n if (cmp !== 0) return entry.dir === 'asc' ? cmp : -cmp;\n }\n return 0;\n });\n }\n const key = this.sortKey();\n if (!key) return data;\n const dir = this.sortDir();\n return data.sort((a, b) => {\n const cmp = String(a[key] ?? '').localeCompare(String(b[key] ?? ''), undefined, {\n numeric: true,\n });\n return dir === 'asc' ? cmp : -cmp;\n });\n });\n\n private readonly _dynamicPageSize = signal<number | null>(null);\n readonly effectivePageSize = computed(() => {\n if (!this.pagination()) return this.filteredData().length || 1;\n return this._dynamicPageSize() ?? this.pageSize();\n });\n\n readonly totalPages = computed(() => {\n if (!this.pagination()) return 1;\n const total =\n this.serverSide() && this.totalItems() != null\n ? this.totalItems()!\n : this.filteredData().length;\n return Math.max(1, Math.ceil(total / this.effectivePageSize()));\n });\n\n readonly paginatedData = computed(() => {\n if (!this.pagination()) return this.sortedData();\n if (this.serverSide()) return this._rows();\n const page = Math.min(this.currentPage(), this.totalPages());\n const size = this.effectivePageSize();\n return this.sortedData().slice((page - 1) * size, page * size);\n });\n\n readonly _virtualRowHeight = computed(() => {\n switch (this.density()) {\n case 'compact':\n return 34;\n case 'relaxed':\n return 64;\n default:\n return 48;\n }\n });\n\n readonly _virtualHeaderHeight = computed(() => 44 + (this._hasFilterableCol() ? 52 : 0));\n\n readonly _virtualScrollActive = computed(\n () => this.virtualScroll() && this.paginatedData().length > this.virtualScrollVisibleItems(),\n );\n\n readonly virtualContainerMaxHeight = computed(\n () =>\n `${this._virtualHeaderHeight() + this.virtualScrollVisibleItems() * this._virtualRowHeight()}px`,\n );\n\n readonly _virtualStartIndex = computed(() => {\n if (!this._virtualScrollActive()) {\n return 0;\n }\n\n const bodyScrollTop = Math.max(0, this._virtualScrollTop() - this._virtualHeaderHeight());\n const startIndex = Math.floor(bodyScrollTop / this._virtualRowHeight());\n return Math.max(0, startIndex - this._virtualOverscan);\n });\n\n readonly _virtualEndIndex = computed(() => {\n if (!this._virtualScrollActive()) {\n return this.paginatedData().length;\n }\n\n return Math.min(\n this.paginatedData().length,\n this._virtualStartIndex() + this.virtualScrollVisibleItems() + this._virtualOverscan * 2,\n );\n });\n\n readonly visiblePageRows = computed(() => {\n const rows = this.paginatedData();\n if (!this._virtualScrollActive()) {\n return rows;\n }\n\n return rows.slice(this._virtualStartIndex(), this._virtualEndIndex());\n });\n\n readonly _virtualTopSpacerHeight = computed(() => {\n if (!this._virtualScrollActive()) {\n return 0;\n }\n\n return this._virtualStartIndex() * this._virtualRowHeight();\n });\n\n readonly _virtualBottomSpacerHeight = computed(() => {\n if (!this._virtualScrollActive()) {\n return 0;\n }\n\n return Math.max(\n 0,\n (this.paginatedData().length - this._virtualEndIndex()) * this._virtualRowHeight(),\n );\n });\n\n readonly pageNumbers = computed<number[]>(() => {\n const total = this.totalPages();\n const current = this.currentPage();\n let start = Math.max(1, current - 2);\n const end = Math.min(total, start + 4);\n start = Math.max(1, end - 4);\n return Array.from({ length: end - start + 1 }, (_, i) => start + i);\n });\n\n readonly paginationInfo = computed(() => {\n const total =\n this.serverSide() && this.totalItems() != null\n ? this.totalItems()!\n : this.filteredData().length;\n const page = Math.min(this.currentPage(), this.totalPages());\n const size = this.effectivePageSize();\n const from = total === 0 ? 0 : Math.min((page - 1) * size + 1, total);\n const to = total === 0 ? 0 : Math.min(page * size, total);\n return `${from}-${to} ${this.ofLabel()} ${total} ${\n total === 1 ? this.resultLabelSingular() : this.resultLabelPlural()\n }`;\n });\n\n readonly totalColspan = computed(() => {\n let cols = this.columns().length;\n if (this.selectable()) cols++;\n if (this.expandable()) cols++;\n if (this.showRowNumbers()) cols++;\n return cols;\n });\n\n readonly _frozenLeftOffsets = computed(() => {\n this._columnWidths();\n const offsets = new Map<string, number>();\n let leftPx = 0;\n for (const col of this.columns()) {\n if (col.frozen === 'left') {\n offsets.set(col.key, leftPx);\n leftPx += this._columnWidthPx(col) ?? 0;\n }\n }\n return offsets;\n });\n\n readonly _lastFrozenLeftKey = computed(() => {\n const frozenLeft = this.columns().filter((col) => col.frozen === 'left');\n return frozenLeft.at(-1)?.key ?? null;\n });\n\n readonly _firstFrozenRightKey = computed(() => {\n const frozenRight = this.columns().filter((col) => col.frozen === 'right');\n return frozenRight[0]?.key ?? null;\n });\n\n isLastFrozenLeftColumn(key: string): boolean {\n return this._lastFrozenLeftKey() === key;\n }\n\n isFirstFrozenRightColumn(key: string): boolean {\n return this._firstFrozenRightKey() === key;\n }\n\n isColumnResizable(col: NeuTableColumn): boolean {\n return this.resizableColumns() && col.resizable !== false;\n }\n\n columnWidth(col: NeuTableColumn): string | null {\n const resized = this._columnWidths()[col.key];\n if (resized != null) {\n return `${resized}px`;\n }\n\n return col.width ?? null;\n }\n\n startColumnResize(col: NeuTableColumn, event: MouseEvent): void {\n if (!this.isColumnResizable(col) || !isPlatformBrowser(this._platformId)) {\n return;\n }\n\n event.preventDefault();\n event.stopPropagation();\n\n const headerCell = (event.currentTarget as HTMLElement | null)?.closest('th');\n const startWidth =\n (headerCell instanceof HTMLElement ? headerCell.getBoundingClientRect().width : 0) ||\n this._columnWidthPx(col) ||\n 160;\n const startX = event.clientX;\n const minWidth = col.minWidth ?? 96;\n const maxWidth = col.maxWidth ?? Number.POSITIVE_INFINITY;\n\n this._stopColumnResize();\n\n const onMove = (moveEvent: MouseEvent) => {\n const nextWidth = Math.min(\n maxWidth,\n Math.max(minWidth, Math.round(startWidth + (moveEvent.clientX - startX))),\n );\n this._setColumnWidth(col.key, nextWidth);\n };\n\n const onUp = () => {\n const width = this._columnWidths()[col.key];\n if (width != null) {\n this.columnResize.emit({ key: col.key, width });\n }\n this._stopColumnResize();\n };\n\n window.addEventListener('mousemove', onMove);\n window.addEventListener('mouseup', onUp);\n this._resizeCleanup = () => {\n window.removeEventListener('mousemove', onMove);\n window.removeEventListener('mouseup', onUp);\n this._resizeCleanup = null;\n };\n }\n\n resetColumnWidth(key: string, event?: Event): void {\n event?.preventDefault();\n event?.stopPropagation();\n\n this._columnWidths.update((current) => {\n if (!(key in current)) {\n return current;\n }\n\n const next = { ...current };\n delete next[key];\n return next;\n });\n }\n\n // ── Expansión de filas ────────────────────────────────────────────────\n private readonly _expandedKeys = signal<Set<unknown>>(new Set());\n\n isRowExpanded(row: Row): boolean {\n return this._expandedKeys().has(this.getRowKey(row));\n }\n\n expandRow(row: Row): void {\n const key = this.getRowKey(row);\n const set = this.expandMode() === 'single' ? new Set<unknown>() : new Set(this._expandedKeys());\n set.add(key);\n this._expandedKeys.set(set);\n }\n\n collapseRow(row: Row): void {\n const key = this.getRowKey(row);\n const set = new Set(this._expandedKeys());\n set.delete(key);\n this._expandedKeys.set(set);\n }\n\n toggleExpand(row: Row): void {\n const key = this.getRowKey(row);\n const set = this.expandMode() === 'single' ? new Set<unknown>() : new Set(this._expandedKeys());\n if (this._expandedKeys().has(key)) set.delete(key);\n else set.add(key);\n this._expandedKeys.set(set);\n }\n\n // ── Selección ─────────────────────────────────────────────────────────\n private readonly _selectedKeys = signal<Set<unknown>>(new Set());\n private readonly _selectionConfirmPending = signal<string | null>(null);\n\n readonly selectedCount = computed(() => this._selectedKeys().size);\n readonly selectedRows = computed(() =>\n this._rows().filter((row) => this._selectedKeys().has(this.getRowKey(row))),\n );\n readonly selectedRowsInfo = computed(\n () => `${this.selectedCount()} ${this.selectionSummaryLabel()}`,\n );\n\n /**\n * TRUE cuando TODOS los registros que pasan el filtro activo están seleccionados.\n * A diferencia de una selección global, actúa solo sobre el subconjunto filtrado.\n */\n readonly isAllFilteredSelected = computed(() => {\n const filtered = this.filteredData();\n return (\n filtered.length > 0 && filtered.every((r) => this._selectedKeys().has(this.getRowKey(r)))\n );\n });\n\n readonly isSomeFilteredSelected = computed(\n () =>\n this.filteredData().some((r) => this._selectedKeys().has(this.getRowKey(r))) &&\n !this.isAllFilteredSelected(),\n );\n\n isRowSelected(row: Row): boolean {\n return this._selectedKeys().has(this.getRowKey(row));\n }\n\n toggleRow(row: Row): void {\n const key = this.getRowKey(row);\n const set = new Set(this._selectedKeys());\n if (set.has(key)) set.delete(key);\n else set.add(key);\n this._selectedKeys.set(set);\n this._emitSelection(set);\n }\n\n /** Selecciona/deselecciona SOLO los datos filtrados activos. */\n toggleAll(): void {\n const set = new Set(this._selectedKeys());\n if (this.isAllFilteredSelected()) {\n this.filteredData().forEach((r) => set.delete(this.getRowKey(r)));\n } else {\n this.filteredData().forEach((r) => set.add(this.getRowKey(r)));\n }\n this._selectedKeys.set(set);\n this._emitSelection(set);\n }\n\n clearSelection(): void {\n this._selectedKeys.set(new Set());\n this._selectionConfirmPending.set(null);\n this.selectionChange.emit([]);\n }\n\n private _emitSelection(keys: Set<unknown>): void {\n const selected = this._rows().filter((r) => keys.has(this.getRowKey(r)));\n this.selectionChange.emit(selected);\n }\n\n // ── Navegación ────────────────────────────────────────────────────────\n goToPage(page: number): void {\n const clamped = Math.max(1, Math.min(page, this.totalPages()));\n if (this.serverSide()) {\n this._emitServerState({ page: clamped });\n } else if (this.useUrlState()) {\n this._urlState.setParam(this.pageParam(), String(clamped));\n } else {\n this._internalPage.set(clamped);\n }\n }\n\n sortBy(key: string, event?: MouseEvent): void {\n if (this.multiSort() && event?.shiftKey) {\n // Shift+click: toggle or add column / Shift+click: alterna o añade columna\n const entries = [...this._sortEntries()];\n const idx = entries.findIndex((e) => e.key === key);\n if (idx >= 0) {\n entries[idx] = { key, dir: entries[idx].dir === 'asc' ? 'desc' : 'asc' };\n } else {\n entries.push({ key, dir: 'asc' });\n }\n const val = entries.map((e) => `${e.key}:${e.dir}`).join(',') || null;\n if (this.useUrlState()) {\n this._urlState.setParam(this.multiSortParam(), val);\n } else {\n this._internalMultiSort.set(val ?? '');\n }\n } else if (this.multiSort()) {\n // Single click: replace sort / Click simple: reemplaza el orden\n const current = this._sortEntries().find((e) => e.key === key);\n const dir: 'asc' | 'desc' = current?.dir === 'asc' ? 'desc' : 'asc';\n const val = `${key}:${dir}`;\n if (this.useUrlState()) {\n this._urlState.setParam(this.multiSortParam(), val);\n } else {\n this._internalMultiSort.set(val);\n }\n } else {\n const dir = this.sortKey() === key && this.sortDir() === 'asc' ? 'desc' : 'asc';\n if (this.serverSide()) {\n this._emitServerState({ sortKey: key, sortDir: dir, page: 1 });\n } else if (this.useUrlState()) {\n this._urlState.patchParams({\n [this.sortParam()]: key,\n [this.sortDirParam()]: dir,\n [this.pageParam()]: '1',\n });\n } else {\n this._internalSortKey.set(key);\n this._internalSortDir.set(dir);\n this._internalPage.set(1);\n }\n }\n }\n\n onRowClick(row: Row, _event: MouseEvent): void {\n if (this.selectable()) this.toggleRow(row);\n this.rowClick.emit(row);\n }\n\n onSearch(event: Event): void {\n const q = (event.target as HTMLInputElement).value;\n this.searchChange.emit(q);\n if (this.serverSide()) {\n this._emitServerState({ search: q, page: 1 });\n } else if (this.useUrlState()) {\n this._urlState.patchParams({ [this.searchParam()]: q || null, [this.pageParam()]: '1' });\n } else {\n this._internalSearch.set(q);\n this._internalPage.set(1);\n }\n }\n\n clearSearch(): void {\n if (this.serverSide()) {\n this._emitServerState({ search: '', page: 1 });\n } else if (this.useUrlState()) {\n this._urlState.patchParams({ [this.searchParam()]: null, [this.pageParam()]: '1' });\n } else {\n this._internalSearch.set('');\n this._internalPage.set(1);\n }\n }\n\n onPageSizeChange(value: string | number | { target?: { value?: unknown } } | null): void {\n const normalizedValue =\n value && typeof value === 'object' ? (value.target?.value ?? null) : value;\n const size = Number(normalizedValue);\n if (!Number.isFinite(size) || size <= 0) return;\n this._dynamicPageSize.set(size);\n if (this.serverSide()) {\n this._emitServerState({ pageSize: size, page: 1 });\n } else if (this.useUrlState()) {\n this._urlState.patchParams({ [this.pageParam()]: '1' });\n } else {\n this._internalPage.set(1);\n }\n }\n\n setExactMatch(value: boolean): void {\n this._exactMatch.set(value);\n }\n\n setColumnFilter(colKey: string, value: unknown): void {\n // Column filters are local signal — no URL update avoids scroll jumps.\n // paginatedData already clamps currentPage to totalPages automatically.\n // Los filtros de columna son locales — sin URL para evitar saltos de scroll.\n // paginatedData ya adapta currentPage a totalPages automáticamente.\n this._columnFilters.update((f) => ({ ...f, [colKey]: value }));\n if (this.serverSide()) {\n this._emitServerState({\n columnFilters: { ...this._columnFilters(), [colKey]: value },\n page: 1,\n });\n }\n }\n\n clearColumnFilters(): void {\n this._columnFilters.set({});\n }\n\n // ── Actions ───────────────────────────────────────────────────────────\n isConfirmPending(row: Row, action: NeuTableAction<Row>): boolean {\n const p = this._confirmPending();\n return p !== null && p.rowKey === this.getRowKey(row) && p.actionKey === action.key;\n }\n\n handleAction(row: Row, action: NeuTableAction<Row>): void {\n if (action.confirm) {\n const p = this._confirmPending();\n const rowKey = this.getRowKey(row);\n if (p && p.rowKey === rowKey && p.actionKey === action.key) {\n this._confirmPending.set(null);\n this.actionClick.emit({ action, row });\n } else {\n this._confirmPending.set({ rowKey, actionKey: action.key });\n }\n } else {\n this.actionClick.emit({ action, row });\n }\n }\n\n cancelConfirm(): void {\n this._confirmPending.set(null);\n }\n\n isSelectionConfirmPending(action: NeuTableSelectionAction<Row>): boolean {\n return this._selectionConfirmPending() === action.key;\n }\n\n handleSelectionAction(action: NeuTableSelectionAction<Row>): void {\n const rows = this.selectedRows();\n\n if (action.confirm) {\n if (this._selectionConfirmPending() === action.key) {\n this._selectionConfirmPending.set(null);\n this.selectionActionClick.emit({ action, rows });\n } else {\n this._selectionConfirmPending.set(action.key);\n }\n return;\n }\n\n this.selectionActionClick.emit({ action, rows });\n }\n\n cancelSelectionConfirm(): void {\n this._selectionConfirmPending.set(null);\n }\n\n // ── Export ────────────────────────────────────────────────────────────\n exportCsv(): void {\n if (!isPlatformBrowser(this._platformId)) return;\n const cols = this._getExportColumns();\n const headers = cols.map((c) => `\"${c.header.replace(/\"/g, '\"\"')}\"`);\n const rows = this._getExportRows().map((row) =>\n cols.map((col) => `\"${this.getCellValue(row, col).replace(/\"/g, '\"\"')}\"`),\n );\n const csv = [headers, ...rows].map((r) => r.join(',')).join('\\r\\n');\n this._downloadBlob(\n new Blob([csv], { type: 'text/csv;charset=utf-8;' }),\n `${this.exportFileName()}.csv`,\n );\n }\n\n exportJson(): void {\n if (!isPlatformBrowser(this._platformId)) return;\n const cols = this._getExportColumns();\n const data = this._getExportRows().map((row) => {\n const obj: Record<string, string> = {};\n cols.forEach((col) => (obj[col.key] = this.getCellValue(row, col)));\n return obj;\n });\n this._downloadBlob(\n new Blob([JSON.stringify(data, null, 2)], { type: 'application/json' }),\n `${this.exportFileName()}.json`,\n );\n }\n\n private _getExportColumns(): NeuTableColumn[] {\n const keys = this.exportColumns();\n const all = this.columns().filter((c) => c.type !== 'actions');\n return keys.length ? all.filter((c) => keys.includes(c.key)) : all;\n }\n\n private _getExportRows(): Row[] {\n const scope = this.exportScope();\n\n if (scope === 'filtered') {\n return this.filteredData();\n }\n\n const selectedRows = this._rows().filter((row) =>\n this._selectedKeys().has(this.getRowKey(row)),\n );\n\n if (scope === 'selected') {\n return selectedRows;\n }\n\n return selectedRows.length > 0 ? selectedRows : this.filteredData();\n }\n\n private _downloadBlob(blob: Blob, filename: string): void {\n const url = URL.createObjectURL(blob);\n const a = document.createElement('a');\n a.href = url;\n a.download = filename;\n document.body.appendChild(a);\n a.click();\n document.body.removeChild(a);\n URL.revokeObjectURL(url);\n }\n\n // ── Utilidades ────────────────────────────────────────────────────────\n onTableScroll(event: Event): void {\n if (!this._virtualScrollActive()) {\n return;\n }\n\n this._virtualScrollTop.set((event.target as HTMLElement).scrollTop);\n }\n\n getRowKey(row: Row): unknown {\n return row[this.rowKey()] ?? JSON.stringify(row);\n }\n\n visibleRowNumber(rowIdx: number): number {\n return (\n (this.currentPage() - 1) * this.effectivePageSize() + this._virtualStartIndex() + rowIdx + 1\n );\n }\n\n private resetVirtualScrollPosition(): void {\n this._virtualScrollTop.set(0);\n requestAnimationFrame(() => {\n this._scrollContainer()?.nativeElement.scrollTo({ top: 0 });\n });\n }\n\n getRowClass(row: Row): string {\n return this.rowClass()?.(row) ?? '';\n }\n\n private _columnWidthPx(col: NeuTableColumn): number | null {\n const resized = this._columnWidths()[col.key];\n if (resized != null) {\n return resized;\n }\n\n if (!col.width || col.width === 'auto') {\n return null;\n }\n\n const px = Number.parseFloat(col.width);\n return Number.isNaN(px) ? null : px;\n }\n\n private _setColumnWidth(key: string, width: number): void {\n this._columnWidths.update((current) => ({ ...current, [key]: width }));\n }\n\n private _stopColumnResize(): void {\n this._resizeCleanup?.();\n }\n\n getCellValue(row: Row, col: NeuTableColumn): string {\n if (col.cell) return col.cell(row);\n const val = row[col.key];\n if (val == null) return '—';\n const locale = col.locale ?? 'es-ES';\n switch (col.type) {\n case 'date': {\n const d = val instanceof Date ? val : new Date(String(val));\n return isNaN(d.getTime())\n ? String(val)\n : d.toLocaleDateString(\n locale,\n col.dateFormat ?? { day: '2-digit', month: '2-digit', year: 'numeric' },\n );\n }\n case 'number':\n return new Intl.NumberFormat(locale, col.numberFormat).format(Number(val));\n case 'currency':\n return new Intl.NumberFormat(locale, {\n style: 'currency',\n currency: col.currencyCode ?? 'EUR',\n ...col.numberFormat,\n }).format(Number(val));\n default:\n return String(val);\n }\n }\n\n getSortPriority(key: string): number {\n if (!this.multiSort()) return -1;\n return this._sortEntries().findIndex((e) => e.key === key);\n }\n\n columnFilterControl(key: string): FormControl<string> {\n let control = this._columnFilterControls.get(key);\n if (!control) {\n control = new FormControl(String(this.getColumnFilterValue(key)), {\n nonNullable: true,\n });\n control.valueChanges\n .pipe(takeUntilDestroyed(this._destroyRef))\n .subscribe((value) => this.setColumnFilter(key, value));\n this._columnFilterControls.set(key, control);\n }\n return control;\n }\n\n getColumnFilterValue(key: string): unknown {\n return this._columnFilters()[key] ?? '';\n }\n\n private _emitServerState(patch: Partial<NeuTableServerState>): void {\n const current: NeuTableServerState = {\n page: this.currentPage(),\n pageSize: this.effectivePageSize(),\n search: this.searchQuery(),\n sortKey: this.sortKey(),\n sortDir: this.sortDir(),\n sortEntries: this._sortEntries(),\n columnFilters: this._columnFilters(),\n };\n this.serverStateChange.emit({ ...current, ...patch });\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}