b2b-tools 0.3.0 → 0.4.0

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.
package/README.md CHANGED
@@ -226,6 +226,7 @@ import { AdvancedTable } from 'b2b-tools';
226
226
  | `config` | `TableConfig` | see below | Table behavior configuration |
227
227
  | `i18n` | `Partial<TableI18n>` | EN strings | Override any translation string |
228
228
  | `lang` | `'EN' \| 'ES'` | `'EN'` | Built-in language preset |
229
+ | `serverTotalCount` | `number` | `0` | Total record count from API. Required when `pagination.mode = 'server'` |
229
230
 
230
231
  #### Outputs
231
232
 
@@ -234,6 +235,7 @@ import { AdvancedTable } from 'b2b-tools';
234
235
  | `rowClick` | `T` | Row clicked |
235
236
  | `selectionChange` | `RowId[]` | Selected row IDs changed |
236
237
  | `actionClick` | `TableActionEvent<T>` | Action button clicked |
238
+ | `pageChange` | `TablePaginationChange` | Fires on page or page-size change when `pagination.mode = 'server'` |
237
239
 
238
240
  #### TableConfig
239
241
 
@@ -247,6 +249,7 @@ interface TableConfig {
247
249
  enabled: boolean;
248
250
  pageSize: number;
249
251
  pageSizeOptions?: number[]; // e.g. [10, 25, 50]
252
+ mode?: 'client' | 'server'; // default 'client'
250
253
  };
251
254
  scroll?: {
252
255
  mode: 'none' | 'infinite';
@@ -414,6 +417,52 @@ export class OrdersTableComponent {
414
417
  }
415
418
  ```
416
419
 
420
+ #### Server-side Pagination
421
+
422
+ Set `pagination.mode` to `'server'` when your API returns one page at a time. The table skips client-side slicing, drives the pager from `serverTotalCount`, and emits `pageChange` whenever the user navigates or changes page size.
423
+
424
+ ```ts
425
+ import { AdvancedTable, TableColumn, TableConfig, TablePaginationChange } from 'b2b-tools';
426
+
427
+ interface Order { id: number; customer: string; total: number; }
428
+
429
+ @Component({
430
+ imports: [AdvancedTable],
431
+ template: `
432
+ <advanced-table
433
+ [columns]="columns"
434
+ [data]="rows"
435
+ [config]="config"
436
+ [serverTotalCount]="totalCount"
437
+ (pageChange)="load($event)"
438
+ />
439
+ `
440
+ })
441
+ export class OrdersPageComponent {
442
+ rows: Order[] = [];
443
+ totalCount = 0;
444
+
445
+ columns: TableColumn<Order>[] = [
446
+ { key: 'id', label: '#', type: 'integer', size: 'XS' },
447
+ { key: 'customer', label: 'Customer', type: 'string', size: 'AUTO' },
448
+ { key: 'total', label: 'Total', type: 'currency', size: 'MD',
449
+ options: { currency: 'MXN' } },
450
+ ];
451
+
452
+ config: TableConfig = {
453
+ pagination: { enabled: true, pageSize: 25, pageSizeOptions: [10, 25, 50], mode: 'server' },
454
+ rowIdKey: 'id',
455
+ };
456
+
457
+ load({ page, pageSize }: TablePaginationChange) {
458
+ this.api.getOrders({ page, pageSize }).subscribe(res => {
459
+ this.rows = res.data;
460
+ this.totalCount = res.total;
461
+ });
462
+ }
463
+ }
464
+ ```
465
+
417
466
  ---
418
467
 
419
468
  ### SimpleTable
@@ -734,6 +783,7 @@ import {
734
783
  CellSize,
735
784
  TextAlign,
736
785
  RowId,
786
+ TablePaginationChange,
737
787
 
738
788
  // Simple Table
739
789
  SimpleHaders,
@@ -464,11 +464,11 @@ class TableModalImageComponent {
464
464
  this.close.emit();
465
465
  }
466
466
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.11", ngImport: i0, type: TableModalImageComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
467
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.11", type: TableModalImageComponent, isStandalone: true, selector: "table-modal-image", inputs: { open: { classPropertyName: "open", publicName: "open", isSignal: true, isRequired: false, transformFunction: null }, src: { classPropertyName: "src", publicName: "src", isSignal: true, isRequired: false, transformFunction: null }, alt: { classPropertyName: "alt", publicName: "alt", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { close: "close" }, ngImport: i0, template: "@if (open()) {\r\n <div class=\"dt-modal-backdrop\" (click)=\"onClose()\">\r\n <div class=\"dt-modal\" (click)=\"$event.stopPropagation()\">\r\n <div class=\"dt-modal-header\">\r\n <span class=\"dt-modal-title\">{{ alt() }}</span>\r\n <button type=\"button\" class=\"dt-btn\" (click)=\"onClose()\">Cerrar</button>\r\n </div>\r\n\r\n <div class=\"dt-modal-body\">\r\n <img class=\"dt-modal-img\" [src]=\"src()\" [alt]=\"alt()\" />\r\n </div>\r\n </div>\r\n </div>\r\n}\r\n", styles: [".dt-modal-backdrop{position:fixed;inset:0;background:#0000008c;display:flex;justify-content:center;align-items:center;padding:18px;z-index:9999}.dt-modal{width:min(900px,95vw);max-height:90vh;background:var(--white);border-radius:var(--radius-md);border:var(--border);overflow:hidden;display:flex;flex-direction:column}.dt-modal-header{padding:12px;border-bottom:var(--border);display:flex;justify-content:space-between;align-items:center;background:var(--gray-white)}.dt-modal-title{font-weight:600;color:var(--black);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dt-modal-body{padding:12px;overflow:auto}.dt-modal-img{width:100%;height:auto;border-radius:var(--radius-sm)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
467
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.11", type: TableModalImageComponent, isStandalone: true, selector: "table-modal-image", inputs: { open: { classPropertyName: "open", publicName: "open", isSignal: true, isRequired: false, transformFunction: null }, src: { classPropertyName: "src", publicName: "src", isSignal: true, isRequired: false, transformFunction: null }, alt: { classPropertyName: "alt", publicName: "alt", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { close: "close" }, ngImport: i0, template: "@if (open()) {\r\n <div class=\"dt-modal-backdrop\" (click)=\"onClose()\">\r\n <div class=\"dt-modal\" (click)=\"$event.stopPropagation()\">\r\n <div class=\"dt-modal-header\">\r\n <span class=\"dt-modal-title\">{{ alt() }}</span>\r\n <button type=\"button\" class=\"dt-btn\" (click)=\"onClose()\">Cerrar</button>\r\n </div>\r\n\r\n <div class=\"dt-modal-body\">\r\n <img class=\"dt-modal-img\" [src]=\"src()\" [alt]=\"alt()\" />\r\n </div>\r\n </div>\r\n </div>\r\n}\r\n", styles: [".dt-modal-backdrop{position:fixed;inset:0;background:var(--b2b-overlay, rgba(0, 0, 0, .55));display:flex;justify-content:center;align-items:center;padding:18px;z-index:9999}.dt-modal{width:min(900px,95vw);max-height:90vh;background:var(--white);border-radius:var(--radius-md);border:var(--border);overflow:hidden;display:flex;flex-direction:column}.dt-modal-header{padding:12px;border-bottom:var(--border);display:flex;justify-content:space-between;align-items:center;background:var(--gray-white)}.dt-modal-title{font-weight:600;color:var(--black);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dt-modal-body{padding:12px;overflow:auto}.dt-modal-img{width:100%;height:auto;border-radius:var(--radius-sm)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
468
468
  }
469
469
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.11", ngImport: i0, type: TableModalImageComponent, decorators: [{
470
470
  type: Component,
471
- args: [{ selector: 'table-modal-image', standalone: true, imports: [CommonModule], changeDetection: ChangeDetectionStrategy.OnPush, template: "@if (open()) {\r\n <div class=\"dt-modal-backdrop\" (click)=\"onClose()\">\r\n <div class=\"dt-modal\" (click)=\"$event.stopPropagation()\">\r\n <div class=\"dt-modal-header\">\r\n <span class=\"dt-modal-title\">{{ alt() }}</span>\r\n <button type=\"button\" class=\"dt-btn\" (click)=\"onClose()\">Cerrar</button>\r\n </div>\r\n\r\n <div class=\"dt-modal-body\">\r\n <img class=\"dt-modal-img\" [src]=\"src()\" [alt]=\"alt()\" />\r\n </div>\r\n </div>\r\n </div>\r\n}\r\n", styles: [".dt-modal-backdrop{position:fixed;inset:0;background:#0000008c;display:flex;justify-content:center;align-items:center;padding:18px;z-index:9999}.dt-modal{width:min(900px,95vw);max-height:90vh;background:var(--white);border-radius:var(--radius-md);border:var(--border);overflow:hidden;display:flex;flex-direction:column}.dt-modal-header{padding:12px;border-bottom:var(--border);display:flex;justify-content:space-between;align-items:center;background:var(--gray-white)}.dt-modal-title{font-weight:600;color:var(--black);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dt-modal-body{padding:12px;overflow:auto}.dt-modal-img{width:100%;height:auto;border-radius:var(--radius-sm)}\n"] }]
471
+ args: [{ selector: 'table-modal-image', standalone: true, imports: [CommonModule], changeDetection: ChangeDetectionStrategy.OnPush, template: "@if (open()) {\r\n <div class=\"dt-modal-backdrop\" (click)=\"onClose()\">\r\n <div class=\"dt-modal\" (click)=\"$event.stopPropagation()\">\r\n <div class=\"dt-modal-header\">\r\n <span class=\"dt-modal-title\">{{ alt() }}</span>\r\n <button type=\"button\" class=\"dt-btn\" (click)=\"onClose()\">Cerrar</button>\r\n </div>\r\n\r\n <div class=\"dt-modal-body\">\r\n <img class=\"dt-modal-img\" [src]=\"src()\" [alt]=\"alt()\" />\r\n </div>\r\n </div>\r\n </div>\r\n}\r\n", styles: [".dt-modal-backdrop{position:fixed;inset:0;background:var(--b2b-overlay, rgba(0, 0, 0, .55));display:flex;justify-content:center;align-items:center;padding:18px;z-index:9999}.dt-modal{width:min(900px,95vw);max-height:90vh;background:var(--white);border-radius:var(--radius-md);border:var(--border);overflow:hidden;display:flex;flex-direction:column}.dt-modal-header{padding:12px;border-bottom:var(--border);display:flex;justify-content:space-between;align-items:center;background:var(--gray-white)}.dt-modal-title{font-weight:600;color:var(--black);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dt-modal-body{padding:12px;overflow:auto}.dt-modal-img{width:100%;height:auto;border-radius:var(--radius-sm)}\n"] }]
472
472
  }], propDecorators: { open: [{ type: i0.Input, args: [{ isSignal: true, alias: "open", required: false }] }], src: [{ type: i0.Input, args: [{ isSignal: true, alias: "src", required: false }] }], alt: [{ type: i0.Input, args: [{ isSignal: true, alias: "alt", required: false }] }], close: [{ type: i0.Output, args: ["close"] }] } });
473
473
 
474
474
  const SVG_ICONS = {
@@ -819,6 +819,7 @@ class AdvancedTable {
819
819
  rowIdKey: 'id',
820
820
  globalSearchVisibleOnly: true,
821
821
  }, ...(ngDevMode ? [{ debugName: "config" }] : /* istanbul ignore next */ []));
822
+ serverTotalCount = input(0, ...(ngDevMode ? [{ debugName: "serverTotalCount" }] : /* istanbul ignore next */ []));
822
823
  set lang(value) {
823
824
  this._lang.set(value ?? TABLE_LANG_DEFAULT);
824
825
  }
@@ -829,6 +830,7 @@ class AdvancedTable {
829
830
  rowClick = output();
830
831
  selectionChange = output();
831
832
  actionClick = output();
833
+ pageChange = output();
832
834
  // Signals
833
835
  globalQuery = signal('', ...(ngDevMode ? [{ debugName: "globalQuery" }] : /* istanbul ignore next */ []));
834
836
  columnQueries = signal({}, ...(ngDevMode ? [{ debugName: "columnQueries" }] : /* istanbul ignore next */ []));
@@ -929,6 +931,8 @@ class AdvancedTable {
929
931
  }
930
932
  // pagination
931
933
  if (config.pagination?.enabled) {
934
+ if (config.pagination.mode === 'server')
935
+ return cappedRows;
932
936
  const size = this.pageSize();
933
937
  const page = this.page();
934
938
  const start = (page - 1) * size;
@@ -964,7 +968,12 @@ class AdvancedTable {
964
968
  items.push(last);
965
969
  return items;
966
970
  }, ...(ngDevMode ? [{ debugName: "pagerItems" }] : /* istanbul ignore next */ []));
967
- totalCount = computed(() => this.sortedData().length, ...(ngDevMode ? [{ debugName: "totalCount" }] : /* istanbul ignore next */ []));
971
+ totalCount = computed(() => {
972
+ const config = this.config();
973
+ if (config.pagination?.mode === 'server')
974
+ return this.serverTotalCount();
975
+ return this.sortedData().length;
976
+ }, ...(ngDevMode ? [{ debugName: "totalCount" }] : /* istanbul ignore next */ []));
968
977
  pageCount = computed(() => {
969
978
  const config = this.config();
970
979
  if (!config.pagination?.enabled)
@@ -1006,6 +1015,12 @@ class AdvancedTable {
1006
1015
  this.page.set(totalPages);
1007
1016
  }
1008
1017
  }, ...(ngDevMode ? [{ debugName: "pagesCountEffect" }] : /* istanbul ignore next */ []));
1018
+ serverPageEffect = effect(() => {
1019
+ const config = this.config();
1020
+ if (config.pagination?.mode !== 'server')
1021
+ return;
1022
+ this.pageChange.emit({ page: this.page(), pageSize: this.pageSize() });
1023
+ }, ...(ngDevMode ? [{ debugName: "serverPageEffect" }] : /* istanbul ignore next */ []));
1009
1024
  // UI Actions
1010
1025
  onHeaderClickSort(col) {
1011
1026
  if (!col.sortable)
@@ -1267,7 +1282,7 @@ class AdvancedTable {
1267
1282
  return String(value);
1268
1283
  }
1269
1284
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.11", ngImport: i0, type: AdvancedTable, deps: [], target: i0.ɵɵFactoryTarget.Component });
1270
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.11", type: AdvancedTable, isStandalone: true, selector: "advanced-table", inputs: { columns: { classPropertyName: "columns", publicName: "columns", isSignal: true, isRequired: false, transformFunction: null }, data: { classPropertyName: "data", publicName: "data", isSignal: true, isRequired: false, transformFunction: null }, config: { classPropertyName: "config", publicName: "config", isSignal: true, isRequired: false, transformFunction: null }, lang: { classPropertyName: "lang", publicName: "lang", isSignal: false, isRequired: false, transformFunction: null }, i18n: { classPropertyName: "i18n", publicName: "i18n", isSignal: false, isRequired: false, transformFunction: null } }, outputs: { rowClick: "rowClick", selectionChange: "selectionChange", actionClick: "actionClick" }, ngImport: i0, template: "<div class=\"dt-container\">\r\n <div class=\"dt-toolbar\">\r\n <!-- Search and Clean -->\r\n <table-toolbar\r\n [enabled]=\"config().globalSearch ?? true\"\r\n [query]=\"globalQuery()\"\r\n [i18n]=\"i18nCom()\"\r\n [showClear]=\"true\"\r\n (queryChange)=\"setGlobalQuery($event)\"\r\n (clear)=\"clearFilters()\"\r\n />\r\n\r\n <!-- Pagination -->\r\n @if (config().pagination?.enabled) {\r\n <table-pagination\r\n [page]=\"page()\"\r\n [pageSize]=\"pageSize()\"\r\n [pageCount]=\"pageCount()\"\r\n [totalCount]=\"totalCount()\"\r\n [pagerItems]=\"pagerItems()\"\r\n [pageSizeOptions]=\"config().pagination!.pageSizeOptions ?? [10, 25, 50]\"\r\n [i18n]=\"i18nCom()\"\r\n (pageChange)=\"goToPage($event)\"\r\n (pageSizeChange)=\"onPageSizeChange($event)\"\r\n />\r\n }\r\n </div>\r\n\r\n <div class=\"dt-grid\">\r\n <!-- Data Table -->\r\n <table-grid\r\n [config]=\"config()\"\r\n [columns]=\"visibleColumns()\"\r\n [rows]=\"pagedData()\"\r\n [gridTemplateColumns]=\"gridTemplateColumns()\"\r\n [minTableWidth]=\"minTableWidth()\"\r\n [columnQueries]=\"columnQueries()\"\r\n [sortState]=\"sortState()\"\r\n [selectedIdsSet]=\"selectedIdsSet()\"\r\n [i18n]=\"i18nCom()\"\r\n (headerSort)=\"onHeaderClickSort($event)\"\r\n (columnQueryChange)=\"setColumnQuery($event.key, $event.value)\"\r\n (rowClick)=\"onRowClick($event)\"\r\n (toggleRow)=\"toggleRowSelection($event)\"\r\n (toggleAllOnPage)=\"toggleSelectAllOnPage()\"\r\n (openImage)=\"openImageModal($event.src, $event.alt)\"\r\n (actionClick)=\"actionClick.emit($event)\"\r\n (bodyScroll)=\"onBodyScroll($event)\"\r\n />\r\n </div>\r\n\r\n <!-- Image Modal -->\r\n <table-modal-image\r\n [open]=\"modalOpen()\"\r\n [src]=\"modalImageSrc()\"\r\n [alt]=\"modalImageAlt()\"\r\n (close)=\"closeModal()\"\r\n />\r\n</div>\r\n", styles: [":host{display:block;font-family:system-ui,-apple-system,Segoe UI,Roboto,Arial,sans-serif;--black: #171717;--black-light: #343434;--black-dark: #000000;--black-navy: #191a21;--xs-dark-gray: #5A5A5A;--dark-gray: #9E9E9E;--medium-gray: #D5D5D5;--gray: #F8F8F8;--light-gray: #C6C6C6;--xs-light-gray: #DFDFDF;--gray-white: #F5F4F4;--xxs-light-gray: #F2F2F2;--soft-white: #EEEEEE;--green-success: var(--b2b-success, #208B6A);--blue: var(--b2b-primary, #3360fa);--blue-info: #7390EC;--orange: var(--b2b-warning, #F77C00);--yellow-warning: #FFBC57;--red: var(--b2b-danger, #E60018);--white: var(--b2b-surface, #FFFFFF);--disabled: #C6C6C6;--disabled-text: #9E9E9E;--radius-sm: var(--b2b-radius-sm, 4px);--radius-md: var(--b2b-radius, 6px);--border: 1px solid var(--xs-light-gray);--focus-ring: var(--b2b-focus-ring, 0 0 0 3px rgba(51, 96, 250, .18))}.dt-container{border:var(--border);border-radius:var(--radius-md);background:var(--white);overflow:hidden}.dt-toolbar{display:flex;justify-content:space-between;align-items:center;gap:12px;border-bottom:var(--border);background:var(--xxs-light-gray)}.dt-empty{padding:18px 12px;color:var(--xs-dark-gray)}@media(max-width:900px){.dt-toolbar{flex-wrap:wrap;align-items:flex-start;row-gap:10px;padding:10px 12px}.dt-toolbar>b2b-table-toolbar{flex:1 1 100%}.dt-toolbar>b2b-table-pagination{flex:1 1 100%;display:flex;justify-content:center}}\n"], dependencies: [{ kind: "component", type: TableModalImageComponent, selector: "table-modal-image", inputs: ["open", "src", "alt"], outputs: ["close"] }, { kind: "component", type: TableGridComponent, selector: "table-grid", inputs: ["config", "columns", "rows", "gridTemplateColumns", "minTableWidth", "columnQueries", "sortState", "selectedIdsSet", "timeZone", "i18n"], outputs: ["headerSort", "columnQueryChange", "rowClick", "toggleRow", "toggleAllOnPage", "openImage", "actionClick", "bodyScroll"] }, { kind: "component", type: TablePaginationComponent, selector: "table-pagination", inputs: ["page", "pageSize", "pageCount", "totalCount", "pageSizeOptions", "pagerItems", "i18n"], outputs: ["pageChange", "pageSizeChange"] }, { kind: "component", type: TableToolbarComponent, selector: "table-toolbar", inputs: ["enabled", "query", "showClear", "i18n"], outputs: ["queryChange", "clear"] }] });
1285
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.11", type: AdvancedTable, isStandalone: true, selector: "advanced-table", inputs: { columns: { classPropertyName: "columns", publicName: "columns", isSignal: true, isRequired: false, transformFunction: null }, data: { classPropertyName: "data", publicName: "data", isSignal: true, isRequired: false, transformFunction: null }, config: { classPropertyName: "config", publicName: "config", isSignal: true, isRequired: false, transformFunction: null }, serverTotalCount: { classPropertyName: "serverTotalCount", publicName: "serverTotalCount", isSignal: true, isRequired: false, transformFunction: null }, lang: { classPropertyName: "lang", publicName: "lang", isSignal: false, isRequired: false, transformFunction: null }, i18n: { classPropertyName: "i18n", publicName: "i18n", isSignal: false, isRequired: false, transformFunction: null } }, outputs: { rowClick: "rowClick", selectionChange: "selectionChange", actionClick: "actionClick", pageChange: "pageChange" }, ngImport: i0, template: "<div class=\"dt-container\">\r\n <div class=\"dt-toolbar\">\r\n <!-- Search and Clean -->\r\n <table-toolbar\r\n [enabled]=\"config().globalSearch ?? true\"\r\n [query]=\"globalQuery()\"\r\n [i18n]=\"i18nCom()\"\r\n [showClear]=\"true\"\r\n (queryChange)=\"setGlobalQuery($event)\"\r\n (clear)=\"clearFilters()\"\r\n />\r\n\r\n <!-- Pagination -->\r\n @if (config().pagination?.enabled) {\r\n <table-pagination\r\n [page]=\"page()\"\r\n [pageSize]=\"pageSize()\"\r\n [pageCount]=\"pageCount()\"\r\n [totalCount]=\"totalCount()\"\r\n [pagerItems]=\"pagerItems()\"\r\n [pageSizeOptions]=\"config().pagination!.pageSizeOptions ?? [10, 25, 50]\"\r\n [i18n]=\"i18nCom()\"\r\n (pageChange)=\"goToPage($event)\"\r\n (pageSizeChange)=\"onPageSizeChange($event)\"\r\n />\r\n }\r\n </div>\r\n\r\n <div class=\"dt-grid\">\r\n <!-- Data Table -->\r\n <table-grid\r\n [config]=\"config()\"\r\n [columns]=\"visibleColumns()\"\r\n [rows]=\"pagedData()\"\r\n [gridTemplateColumns]=\"gridTemplateColumns()\"\r\n [minTableWidth]=\"minTableWidth()\"\r\n [columnQueries]=\"columnQueries()\"\r\n [sortState]=\"sortState()\"\r\n [selectedIdsSet]=\"selectedIdsSet()\"\r\n [i18n]=\"i18nCom()\"\r\n (headerSort)=\"onHeaderClickSort($event)\"\r\n (columnQueryChange)=\"setColumnQuery($event.key, $event.value)\"\r\n (rowClick)=\"onRowClick($event)\"\r\n (toggleRow)=\"toggleRowSelection($event)\"\r\n (toggleAllOnPage)=\"toggleSelectAllOnPage()\"\r\n (openImage)=\"openImageModal($event.src, $event.alt)\"\r\n (actionClick)=\"actionClick.emit($event)\"\r\n (bodyScroll)=\"onBodyScroll($event)\"\r\n />\r\n </div>\r\n\r\n <!-- Image Modal -->\r\n <table-modal-image\r\n [open]=\"modalOpen()\"\r\n [src]=\"modalImageSrc()\"\r\n [alt]=\"modalImageAlt()\"\r\n (close)=\"closeModal()\"\r\n />\r\n</div>\r\n", styles: [":host{display:block;font-family:system-ui,-apple-system,Segoe UI,Roboto,Arial,sans-serif;--black: #171717;--black-light: #343434;--black-dark: #000000;--black-navy: #191a21;--xs-dark-gray: #5A5A5A;--dark-gray: #9E9E9E;--medium-gray: #D5D5D5;--gray: #F8F8F8;--light-gray: #C6C6C6;--xs-light-gray: #DFDFDF;--gray-white: #F5F4F4;--xxs-light-gray: #F2F2F2;--soft-white: #EEEEEE;--green-success: var(--b2b-success, #208B6A);--blue: var(--b2b-primary, #3360fa);--blue-info: #7390EC;--orange: var(--b2b-warning, #F77C00);--yellow-warning: #FFBC57;--red: var(--b2b-danger, #E60018);--white: var(--b2b-surface, #FFFFFF);--disabled: #C6C6C6;--disabled-text: #9E9E9E;--radius-sm: var(--b2b-radius-sm, 4px);--radius-md: var(--b2b-radius, 6px);--border: 1px solid var(--xs-light-gray);--focus-ring: var(--b2b-focus-ring, 0 0 0 3px rgba(51, 96, 250, .18))}.dt-container{border:var(--border);border-radius:var(--radius-md);background:var(--white);overflow:hidden}.dt-toolbar{display:flex;justify-content:space-between;align-items:center;gap:12px;border-bottom:var(--border);background:var(--xxs-light-gray)}.dt-empty{padding:18px 12px;color:var(--xs-dark-gray)}@media(max-width:900px){.dt-toolbar{flex-wrap:wrap;align-items:flex-start;row-gap:10px;padding:10px 12px}.dt-toolbar>b2b-table-toolbar{flex:1 1 100%}.dt-toolbar>b2b-table-pagination{flex:1 1 100%;display:flex;justify-content:center}}\n"], dependencies: [{ kind: "component", type: TableModalImageComponent, selector: "table-modal-image", inputs: ["open", "src", "alt"], outputs: ["close"] }, { kind: "component", type: TableGridComponent, selector: "table-grid", inputs: ["config", "columns", "rows", "gridTemplateColumns", "minTableWidth", "columnQueries", "sortState", "selectedIdsSet", "timeZone", "i18n"], outputs: ["headerSort", "columnQueryChange", "rowClick", "toggleRow", "toggleAllOnPage", "openImage", "actionClick", "bodyScroll"] }, { kind: "component", type: TablePaginationComponent, selector: "table-pagination", inputs: ["page", "pageSize", "pageCount", "totalCount", "pageSizeOptions", "pagerItems", "i18n"], outputs: ["pageChange", "pageSizeChange"] }, { kind: "component", type: TableToolbarComponent, selector: "table-toolbar", inputs: ["enabled", "query", "showClear", "i18n"], outputs: ["queryChange", "clear"] }] });
1271
1286
  }
1272
1287
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.11", ngImport: i0, type: AdvancedTable, decorators: [{
1273
1288
  type: Component,
@@ -1277,11 +1292,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.11", ngImpo
1277
1292
  TablePaginationComponent,
1278
1293
  TableToolbarComponent,
1279
1294
  ], template: "<div class=\"dt-container\">\r\n <div class=\"dt-toolbar\">\r\n <!-- Search and Clean -->\r\n <table-toolbar\r\n [enabled]=\"config().globalSearch ?? true\"\r\n [query]=\"globalQuery()\"\r\n [i18n]=\"i18nCom()\"\r\n [showClear]=\"true\"\r\n (queryChange)=\"setGlobalQuery($event)\"\r\n (clear)=\"clearFilters()\"\r\n />\r\n\r\n <!-- Pagination -->\r\n @if (config().pagination?.enabled) {\r\n <table-pagination\r\n [page]=\"page()\"\r\n [pageSize]=\"pageSize()\"\r\n [pageCount]=\"pageCount()\"\r\n [totalCount]=\"totalCount()\"\r\n [pagerItems]=\"pagerItems()\"\r\n [pageSizeOptions]=\"config().pagination!.pageSizeOptions ?? [10, 25, 50]\"\r\n [i18n]=\"i18nCom()\"\r\n (pageChange)=\"goToPage($event)\"\r\n (pageSizeChange)=\"onPageSizeChange($event)\"\r\n />\r\n }\r\n </div>\r\n\r\n <div class=\"dt-grid\">\r\n <!-- Data Table -->\r\n <table-grid\r\n [config]=\"config()\"\r\n [columns]=\"visibleColumns()\"\r\n [rows]=\"pagedData()\"\r\n [gridTemplateColumns]=\"gridTemplateColumns()\"\r\n [minTableWidth]=\"minTableWidth()\"\r\n [columnQueries]=\"columnQueries()\"\r\n [sortState]=\"sortState()\"\r\n [selectedIdsSet]=\"selectedIdsSet()\"\r\n [i18n]=\"i18nCom()\"\r\n (headerSort)=\"onHeaderClickSort($event)\"\r\n (columnQueryChange)=\"setColumnQuery($event.key, $event.value)\"\r\n (rowClick)=\"onRowClick($event)\"\r\n (toggleRow)=\"toggleRowSelection($event)\"\r\n (toggleAllOnPage)=\"toggleSelectAllOnPage()\"\r\n (openImage)=\"openImageModal($event.src, $event.alt)\"\r\n (actionClick)=\"actionClick.emit($event)\"\r\n (bodyScroll)=\"onBodyScroll($event)\"\r\n />\r\n </div>\r\n\r\n <!-- Image Modal -->\r\n <table-modal-image\r\n [open]=\"modalOpen()\"\r\n [src]=\"modalImageSrc()\"\r\n [alt]=\"modalImageAlt()\"\r\n (close)=\"closeModal()\"\r\n />\r\n</div>\r\n", styles: [":host{display:block;font-family:system-ui,-apple-system,Segoe UI,Roboto,Arial,sans-serif;--black: #171717;--black-light: #343434;--black-dark: #000000;--black-navy: #191a21;--xs-dark-gray: #5A5A5A;--dark-gray: #9E9E9E;--medium-gray: #D5D5D5;--gray: #F8F8F8;--light-gray: #C6C6C6;--xs-light-gray: #DFDFDF;--gray-white: #F5F4F4;--xxs-light-gray: #F2F2F2;--soft-white: #EEEEEE;--green-success: var(--b2b-success, #208B6A);--blue: var(--b2b-primary, #3360fa);--blue-info: #7390EC;--orange: var(--b2b-warning, #F77C00);--yellow-warning: #FFBC57;--red: var(--b2b-danger, #E60018);--white: var(--b2b-surface, #FFFFFF);--disabled: #C6C6C6;--disabled-text: #9E9E9E;--radius-sm: var(--b2b-radius-sm, 4px);--radius-md: var(--b2b-radius, 6px);--border: 1px solid var(--xs-light-gray);--focus-ring: var(--b2b-focus-ring, 0 0 0 3px rgba(51, 96, 250, .18))}.dt-container{border:var(--border);border-radius:var(--radius-md);background:var(--white);overflow:hidden}.dt-toolbar{display:flex;justify-content:space-between;align-items:center;gap:12px;border-bottom:var(--border);background:var(--xxs-light-gray)}.dt-empty{padding:18px 12px;color:var(--xs-dark-gray)}@media(max-width:900px){.dt-toolbar{flex-wrap:wrap;align-items:flex-start;row-gap:10px;padding:10px 12px}.dt-toolbar>b2b-table-toolbar{flex:1 1 100%}.dt-toolbar>b2b-table-pagination{flex:1 1 100%;display:flex;justify-content:center}}\n"] }]
1280
- }], propDecorators: { columns: [{ type: i0.Input, args: [{ isSignal: true, alias: "columns", required: false }] }], data: [{ type: i0.Input, args: [{ isSignal: true, alias: "data", required: false }] }], config: [{ type: i0.Input, args: [{ isSignal: true, alias: "config", required: false }] }], lang: [{
1295
+ }], propDecorators: { columns: [{ type: i0.Input, args: [{ isSignal: true, alias: "columns", required: false }] }], data: [{ type: i0.Input, args: [{ isSignal: true, alias: "data", required: false }] }], config: [{ type: i0.Input, args: [{ isSignal: true, alias: "config", required: false }] }], serverTotalCount: [{ type: i0.Input, args: [{ isSignal: true, alias: "serverTotalCount", required: false }] }], lang: [{
1281
1296
  type: Input
1282
1297
  }], i18n: [{
1283
1298
  type: Input
1284
- }], rowClick: [{ type: i0.Output, args: ["rowClick"] }], selectionChange: [{ type: i0.Output, args: ["selectionChange"] }], actionClick: [{ type: i0.Output, args: ["actionClick"] }] } });
1299
+ }], rowClick: [{ type: i0.Output, args: ["rowClick"] }], selectionChange: [{ type: i0.Output, args: ["selectionChange"] }], actionClick: [{ type: i0.Output, args: ["actionClick"] }], pageChange: [{ type: i0.Output, args: ["pageChange"] }] } });
1285
1300
 
1286
1301
  /*
1287
1302
  * Public API Surface of b2b-tools
@@ -1 +1 @@
1
- {"version":3,"file":"b2b-tools.mjs","sources":["../../../projects/b2b-tools/src/lib/components/cards/advanced-card/directives/advanced-card.template.directive.ts","../../../projects/b2b-tools/src/lib/components/cards/advanced-card/components/card-compact/card-compact.component.ts","../../../projects/b2b-tools/src/lib/components/cards/advanced-card/components/card-compact/card-compact.component.html","../../../projects/b2b-tools/src/lib/components/cards/advanced-card/components/card-header/card-header.component.ts","../../../projects/b2b-tools/src/lib/components/cards/advanced-card/components/card-header/card-header.component.html","../../../projects/b2b-tools/src/lib/components/cards/advanced-card/components/card-summary/card-summary.component.ts","../../../projects/b2b-tools/src/lib/components/cards/advanced-card/components/card-summary/card-summary.component.html","../../../projects/b2b-tools/src/lib/components/cards/advanced-card/components/card-tab-content/card-tab-content.component.ts","../../../projects/b2b-tools/src/lib/components/cards/advanced-card/components/card-tab-content/card-tab-content.component.html","../../../projects/b2b-tools/src/lib/components/cards/advanced-card/components/card-tabs-bar/card-tabs-bar.component.ts","../../../projects/b2b-tools/src/lib/components/cards/advanced-card/components/card-tabs-bar/card-tabs-bar.component.html","../../../projects/b2b-tools/src/lib/components/cards/advanced-card/components/advanced-card-content/advanced-card-content.component.ts","../../../projects/b2b-tools/src/lib/components/cards/advanced-card/components/advanced-card-content/advanced-card-content.component.html","../../../projects/b2b-tools/src/lib/components/cards/advanced-card/components/advanced-card-overlay/advanced-card-overlay.component.ts","../../../projects/b2b-tools/src/lib/components/cards/advanced-card/components/advanced-card-overlay/advanced-card-overlay.component.html","../../../projects/b2b-tools/src/lib/components/cards/advanced-card/components/advanced-card-inline/advanced-card-inline.component.ts","../../../projects/b2b-tools/src/lib/components/cards/advanced-card/components/advanced-card-inline/advanced-card-inline.component.html","../../../projects/b2b-tools/src/lib/components/cards/advanced-card/advanced-card.ts","../../../projects/b2b-tools/src/lib/components/cards/advanced-card/advanced-card.html","../../../projects/b2b-tools/src/lib/components/tables/simple-table/simple-table.ts","../../../projects/b2b-tools/src/lib/components/tables/simple-table/simple-table.html","../../../projects/b2b-tools/src/lib/components/tables/advanced-table/parts/table-modal-image/table-modal-image.component.ts","../../../projects/b2b-tools/src/lib/components/tables/advanced-table/parts/table-modal-image/table-modal-image.component.html","../../../projects/b2b-tools/src/lib/components/tables/advanced-table/types/table.types.ts","../../../projects/b2b-tools/src/lib/components/tables/advanced-table/types/time-zone.types.ts","../../../projects/b2b-tools/src/lib/components/tables/advanced-table/constants/table-i18n.constants.ts","../../../projects/b2b-tools/src/lib/components/tables/advanced-table/parts/table-grid/table-grid.component.ts","../../../projects/b2b-tools/src/lib/components/tables/advanced-table/parts/table-grid/table-grid.component.html","../../../projects/b2b-tools/src/lib/components/tables/advanced-table/parts/table-pagination/table-pagination.component.ts","../../../projects/b2b-tools/src/lib/components/tables/advanced-table/parts/table-pagination/table-pagination.component.html","../../../projects/b2b-tools/src/lib/components/tables/advanced-table/parts/table-toolbar/table-toolbar.component.ts","../../../projects/b2b-tools/src/lib/components/tables/advanced-table/parts/table-toolbar/table-toolbar.component.html","../../../projects/b2b-tools/src/lib/components/tables/advanced-table/advanced-table.component.ts","../../../projects/b2b-tools/src/lib/components/tables/advanced-table/advanced-table.component.html","../../../projects/b2b-tools/src/public-api.ts","../../../projects/b2b-tools/src/b2b-tools.ts"],"sourcesContent":["import { Directive, TemplateRef, input } from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[advancedCardTemplate]',\r\n standalone: true,\r\n})\r\nexport class AdvancedCardTemplateDirective {\r\n templateId = input.required<string>({ alias: 'advancedCardTemplate' });\r\n\r\n constructor(public readonly templateRef: TemplateRef<any>) {}\r\n}\r\n","import { Component, computed, input, output } from '@angular/core';\r\nimport { AdvancedCardConfig } from '../../types';\r\n\r\n@Component({\r\n selector: 'lib-card-compact',\r\n imports: [],\r\n templateUrl: './card-compact.component.html',\r\n styleUrls: ['./card-compact.component.css', '../../styles/advanced-card.shared.style.css'],\r\n})\r\nexport class CardCompactComponent {\r\n configuration = input.required<AdvancedCardConfig>();\r\n expanded = input.required<boolean>();\r\n badgeClass = input.required<(tone: any) => string>();\r\n\r\n expand = output<void>();\r\n\r\n hasHighlights = computed(() => (this.configuration().highlights?.length ?? 0) > 0);\r\n\r\n onExpand(): void {\r\n this.expand.emit();\r\n }\r\n}\r\n","@let config = configuration();\r\n\r\n<section\r\n class=\"ac ac--compact\"\r\n [class.ac--hidden]=\"expanded()\"\r\n tabindex=\"0\"\r\n role=\"button\"\r\n (click)=\"onExpand()\"\r\n (keydown.enter)=\"onExpand()\"\r\n>\r\n <header class=\"ac__header\">\r\n <div class=\"ac__title-wrap\">\r\n <h3 class=\"ac__title\">{{ config.title }}</h3>\r\n\r\n @if (config.subtitle) {\r\n <p class=\"ac__subtitle\">{{ config.subtitle }}</p>\r\n }\r\n </div>\r\n\r\n @if (config.badge) {\r\n <span [class]=\"badgeClass()(config.badge.tone)\">\r\n {{ config.badge.label }}\r\n </span>\r\n }\r\n </header>\r\n\r\n @if (hasHighlights()) {\r\n @let highlightList = config.highlights;\r\n\r\n <div class=\"ac__highlights\">\r\n @for (highlight of highlightList; track highlight.label) {\r\n <div class=\"ac__hl\">\r\n <div class=\"ac__hl-value\">{{ highlight.value }}</div>\r\n <div class=\"ac__hl-label\">\r\n {{ highlight.label }}\r\n @if (highlight.hint) {\r\n <span class=\"ac__hl-hint\">· {{ highlight.hint }}</span>\r\n }\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n }\r\n\r\n <footer class=\"ac__footer\">\r\n <button type=\"button\" class=\"btn btn--primary\" (click)=\"onExpand(); $event.stopPropagation()\">\r\n {{ config.primaryCta?.label ?? 'Ver detalle' }}\r\n <span class=\"btn__chev\">›</span>\r\n </button>\r\n </footer>\r\n</section>\r\n","import { Component, input, output } from '@angular/core';\r\nimport { AdvancedAction, AdvancedBadge } from '../../types';\r\n\r\n@Component({\r\n selector: 'ac-card-header',\r\n imports: [],\r\n templateUrl: './card-header.component.html',\r\n styleUrls: ['./card-header.component.css', '../../styles/advanced-card.shared.style.css'],\r\n})\r\nexport class CardHeaderComponent {\r\n variant = input<'inline' | 'panel'>('inline');\r\n\r\n title = input.required<string>();\r\n badge = input<AdvancedBadge | undefined>(undefined);\r\n actions = input<AdvancedAction[] | undefined>(undefined);\r\n\r\n sticky = input(false);\r\n badgeClass = input.required<(tone: any) => string>();\r\n\r\n actionClick = output<AdvancedAction>();\r\n close = output<void>();\r\n\r\n onAction(advancedAction: AdvancedAction): void {\r\n if (advancedAction.disabled) return;\r\n this.actionClick.emit(advancedAction);\r\n }\r\n\r\n onClose(): void {\r\n this.close.emit();\r\n }\r\n}\r\n","<header\r\n [class.acx__header]=\"variant() === 'inline'\"\r\n [class.acx__header--sticky]=\"variant() === 'inline' && sticky()\"\r\n [class.panel__header]=\"variant() === 'panel'\"\r\n>\r\n <div [class.acx__title]=\"variant() === 'inline'\" [class.panel__title]=\"variant() === 'panel'\">\r\n <h3\r\n [class.acx__title-text]=\"variant() === 'inline'\"\r\n [class.panel__title-text]=\"variant() === 'panel'\"\r\n >\r\n {{ title() }}\r\n </h3>\r\n\r\n @if (badge()) {\r\n <span [class]=\"badgeClass()(badge()?.tone)\">\r\n {{ badge()?.label }}\r\n </span>\r\n }\r\n </div>\r\n\r\n <div [class.acx__actions]=\"variant() === 'inline'\" [class.panel__actions]=\"variant() === 'panel'\">\r\n @let headerActions = actions();\r\n @if (headerActions?.length) {\r\n @for (headerAction of headerActions; track headerAction.id) {\r\n <button\r\n type=\"button\"\r\n class=\"btn\"\r\n [class.btn--primary]=\"headerAction.tone === 'primary'\"\r\n [class.btn--danger]=\"headerAction.tone === 'danger'\"\r\n [class.btn--secondary]=\"!headerAction.tone || headerAction.tone === 'secondary'\"\r\n [disabled]=\"headerAction.disabled\"\r\n (click)=\"onAction(headerAction)\"\r\n >\r\n {{ headerAction.label }}\r\n </button>\r\n }\r\n }\r\n\r\n <button type=\"button\" class=\"icon-btn\" (click)=\"onClose()\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\">\r\n <rect width=\"24\" height=\"24\" fill=\"none\" />\r\n <path\r\n fill=\"currentColor\"\r\n d=\"M6.4 19L5 17.6l5.6-5.6L5 6.4L6.4 5l5.6 5.6L17.6 5L19 6.4L13.4 12l5.6 5.6l-1.4 1.4l-5.6-5.6z\"\r\n />\r\n </svg>\r\n </button>\r\n </div>\r\n</header>\r\n","import { Component, computed, effect, input, signal } from '@angular/core';\nimport { AdvancedSummaryBlock, AdvancedTone } from '../../types';\n\n@Component({\n selector: 'ac-card-summary',\n imports: [],\n templateUrl: './card-summary.component.html',\n styleUrls: ['./card-summary.component.css', '../../styles/advanced-card.shared.style.css'],\n})\nexport class CardSummaryComponent {\n blocks = input<AdvancedSummaryBlock[] | undefined>(undefined);\n layout = input<'stacked' | 'inline'>('stacked');\n collapsibleVertical = input(false);\n\n readonly columnMax: number = 4;\n\n numBlocks = computed(() => this.blocks()?.length ?? 0);\n isSingle = computed(() => this.numBlocks() === 1);\n\n /** Vertical accordion — only in inline sidebar */\n isAccordion = computed(() => this.layout() === 'inline');\n\n /** Horizontal accordion — stacked with 2+ blocks */\n isHorizontalAccordion = computed(() => this.layout() === 'stacked' && this.numBlocks() > 1);\n\n /** Vertical collapse toggle — only when collapsibleVertical + stacked single block */\n showToggle = computed(\n () =>\n this.collapsibleVertical() &&\n this.layout() === 'stacked' &&\n this.numBlocks() > 0 &&\n !this.isHorizontalAccordion(),\n );\n\n // ─── Inline accordion state ────────────────────────────────────────────\n readonly openBlocks = signal<Set<string>>(new Set());\n\n // ─── Stacked tab mode state ────────────────────────────────────────────\n readonly activeBlock = signal<string>('');\n\n // ─── Stacked vertical toggle state ────────────────────────────────────\n readonly isStackedCollapsed = signal(false);\n\n constructor() {\n effect(() => {\n const blocks = this.blocks();\n if (blocks?.length) {\n this.openBlocks.set(new Set([blocks[0].title]));\n this.activeBlock.set(blocks[0].title);\n }\n });\n }\n\n // ─── Inline accordion helpers ──────────────────────────────────────────\n toggleBlock(title: string): void {\n this.openBlocks.update(set => {\n const next = new Set(set);\n if (next.has(title)) next.delete(title);\n else next.add(title);\n return next;\n });\n }\n\n isOpen(title: string): boolean {\n return this.openBlocks().has(title);\n }\n\n // ─── Tab mode helpers ──────────────────────────────────────────────────\n selectBlock(title: string): void {\n this.activeBlock.set(title);\n }\n\n isActiveBlock(title: string): boolean {\n return this.activeBlock() === title;\n }\n\n // ─── Vertical toggle helper ────────────────────────────────────────────\n toggleStacked(): void {\n this.isStackedCollapsed.update(v => !v);\n }\n\n // ─── Shared helpers ────────────────────────────────────────────────────\n rowBadgeClass(tone?: AdvancedTone): string {\n return `badge badge--${tone ?? 'neutral'}`;\n }\n\n templateStyle = computed(() => {\n if (this.layout() === 'inline') {\n return 'repeat(1, 1fr)';\n }\n return `repeat(${Math.min(this.numBlocks(), this.columnMax)}, 1fr)`;\n });\n}\n","@if (numBlocks() > 0) {\n @let list = blocks();\n\n @if (isHorizontalAccordion()) {\n\n <!-- ─── HORIZONTAL ACCORDION (stacked, 2+ blocks) ─────────────────── -->\n <div class=\"acx__hacc\">\n @for (block of list; track block.title) {\n <div class=\"hacc__item\" [class.hacc__item--active]=\"isActiveBlock(block.title)\">\n\n <button\n class=\"hacc__trigger\"\n (click)=\"selectBlock(block.title)\"\n type=\"button\"\n [attr.aria-expanded]=\"isActiveBlock(block.title)\"\n [attr.aria-label]=\"block.title\"\n >\n <span class=\"hacc__trigger-text\">{{ block.title }}</span>\n </button>\n\n <div class=\"hacc__content\">\n <div class=\"hacc__rows\">\n @for (row of block.rows; track row.label) {\n <div class=\"block__row\">\n <span class=\"block__label\">\n @if (row.icon) { <span class=\"block__row-icon\">{{ row.icon }}</span> }\n {{ row.label }}\n </span>\n @switch (row.kind) {\n @case ('badge') {\n <span [class]=\"rowBadgeClass(row.tone)\">{{ row.value }}</span>\n }\n @case ('number') {\n <span class=\"block__value block__value--number\">{{ row.value }}</span>\n }\n @case ('date') {\n <span class=\"block__value block__value--date\">{{ row.value }}</span>\n }\n @default {\n <span class=\"block__value\">{{ row.value }}</span>\n }\n }\n </div>\n }\n </div>\n </div>\n\n </div>\n }\n </div>\n\n } @else {\n\n <!-- ─── GRID MODE (single block or inline sidebar) ────────────────── -->\n @if (showToggle()) {\n <button\n class=\"summary__toggle\"\n [class.summary__toggle--collapsed]=\"isStackedCollapsed()\"\n (click)=\"toggleStacked()\"\n type=\"button\"\n >\n <span class=\"summary__toggle-icon\">&#8250;</span>\n Summary\n </button>\n }\n\n <div\n class=\"acx__summary\"\n [class.acx__summary--single]=\"isSingle()\"\n [class.acx__summary--collapsed]=\"isStackedCollapsed()\"\n [class.scrollbar-y]=\"isAccordion()\"\n [style.grid-template-columns]=\"templateStyle()\"\n >\n @for (block of list; track block.title) {\n <div class=\"block\" [class.block--single]=\"isSingle()\">\n <button\n class=\"block__title\"\n [class.block__title--accordion]=\"isAccordion()\"\n [class.block__title--open]=\"isAccordion() && isOpen(block.title)\"\n (click)=\"isAccordion() && toggleBlock(block.title)\"\n type=\"button\"\n >\n {{ block.title }}\n @if (isAccordion()) {\n <span class=\"block__chevron\">&#8250;</span>\n }\n </button>\n\n <div class=\"block__rows\" [class.block__rows--hidden]=\"isAccordion() && !isOpen(block.title)\">\n @for (row of block.rows; track row.label) {\n <div class=\"block__row\">\n <span class=\"block__label\">\n @if (row.icon) { <span class=\"block__row-icon\">{{ row.icon }}</span> }\n {{ row.label }}\n </span>\n @switch (row.kind) {\n @case ('badge') {\n <span [class]=\"rowBadgeClass(row.tone)\">{{ row.value }}</span>\n }\n @case ('number') {\n <span class=\"block__value block__value--number\">{{ row.value }}</span>\n }\n @case ('date') {\n <span class=\"block__value block__value--date\">{{ row.value }}</span>\n }\n @default {\n <span class=\"block__value\">{{ row.value }}</span>\n }\n }\n </div>\n }\n </div>\n </div>\n }\n </div>\n\n }\n}\n","import { Component, input, TemplateRef } from '@angular/core';\r\nimport { AdvancedCardTab, AdvancedCardTemplateCtx } from '../../types';\r\nimport { NgTemplateOutlet } from '@angular/common';\r\n\r\n@Component({\r\n selector: 'ac-card-tab-content',\r\n imports: [NgTemplateOutlet],\r\n templateUrl: './card-tab-content.component.html',\r\n styleUrls: ['./card-tab-content.component.css', '../../styles/advanced-card.shared.style.css'],\r\n})\r\nexport class CardTabContentComponent {\r\n activeTab = input.required<AdvancedCardTab | null>();\r\n cardId = input.required<string>();\r\n\r\n /**\r\n * Función que resuelve el TemplateRef para el tab actual.\r\n * (La lógica real sigue en el root: getActiveTemplate())\r\n */\r\n templateRef = input<TemplateRef<AdvancedCardTemplateCtx> | null>(null);\r\n}\r\n","@let tab = activeTab();\r\n@let template = templateRef();\r\n\r\n<div class=\"tabs__content\">\r\n @if (tab) {\r\n @switch (tab.kind) {\r\n @case ('text') {\r\n <div class=\"tab-text\">\r\n {{ tab.text ?? '' }}\r\n </div>\r\n }\r\n\r\n @case ('empty') {\r\n <div class=\"empty\">Sin contenido.</div>\r\n }\r\n\r\n @case ('template') {\r\n @if (template) {\r\n <ng-container\r\n [ngTemplateOutlet]=\"template\"\r\n [ngTemplateOutletContext]=\"{\r\n cardId: cardId(),\r\n tabId: tab.id,\r\n }\"\r\n />\r\n } @else {\r\n <div class=\"empty\">Template no encontrado para \"{{ tab.templateId }}\"</div>\r\n }\r\n }\r\n }\r\n } @else {\r\n <div class=\"empty\">Sin tabs configurados.</div>\r\n }\r\n</div>\r\n","import { Component, computed, input, output } from '@angular/core';\r\nimport { AdvancedCardTab, AdvancedTabAction } from '../../types';\r\n\r\n@Component({\r\n selector: 'ac-card-tabs-bar',\r\n imports: [],\r\n templateUrl: './card-tabs-bar.component.html',\r\n styleUrls: ['./card-tabs-bar.component.css', '../../styles/advanced-card.shared.style.css'],\r\n})\r\nexport class CardTabsBarComponent {\r\n tabs = input.required<AdvancedCardTab[]>();\r\n activeTabId = input.required<string | null>();\r\n\r\n badgeClass = input.required<(tone: any) => string>();\r\n\r\n tabSelected = output<string>();\r\n tabAction = output<AdvancedTabAction>();\r\n\r\n activeTab = computed(() => {\r\n const id = this.activeTabId();\r\n if (!id) return null;\r\n return this.tabs().find((tab) => tab.id === id) ?? null;\r\n });\r\n\r\n selectTab(id: string): void {\r\n this.tabSelected.emit(id);\r\n }\r\n\r\n clickAction(advancedTabAction: AdvancedTabAction): void {\r\n if (advancedTabAction.disabled) return;\r\n this.tabAction.emit(advancedTabAction);\r\n }\r\n}\r\n","@let tabList = tabs();\r\n@let currentId = activeTabId();\r\n@let current = activeTab();\r\n\r\n<div class=\"tabs__bar\">\r\n @for (tab of tabList; track tab.id) {\r\n <div class=\"tab\" [class.tab--active]=\"currentId === tab.id\" (click)=\"selectTab(tab.id)\">\r\n <span>{{ tab.label }}</span>\r\n @if (tab.pill) {\r\n <span class=\"pill\" [class]=\"badgeClass()(tab.pill.tone)\">\r\n {{ tab.pill.label }}\r\n </span>\r\n }\r\n </div>\r\n }\r\n\r\n <div class=\"tabs__spacer\"></div>\r\n\r\n @if (current?.actions?.length) {\r\n <div class=\"tabs__actions\">\r\n @for (actions of current?.actions ?? []; track actions.id) {\r\n <button\r\n type=\"button\"\r\n class=\"btn btn--sm\"\r\n [class.btn--primary]=\"actions.tone === 'primary'\"\r\n [class.btn--danger]=\"actions.tone === 'danger'\"\r\n [class.btn--secondary]=\"!actions.tone || actions.tone === 'secondary'\"\r\n [disabled]=\"actions.disabled\"\r\n (click)=\"clickAction(actions)\"\r\n >\r\n {{ actions.label }}\r\n </button>\r\n }\r\n </div>\r\n }\r\n</div>\r\n","import { Component, input, output } from '@angular/core';\r\nimport { AdvancedCardContentVm, AdvancedTabAction } from '../../types';\r\nimport { CardSummaryComponent } from '../card-summary/card-summary.component';\r\nimport { CardTabContentComponent } from '../card-tab-content/card-tab-content.component';\r\nimport { CardTabsBarComponent } from '../card-tabs-bar/card-tabs-bar.component';\r\n\r\n@Component({\r\n selector: 'ac-advanced-card-content',\r\n imports: [CardSummaryComponent, CardTabsBarComponent, CardTabContentComponent],\r\n templateUrl: './advanced-card-content.component.html',\r\n styleUrls: [\r\n './advanced-card-content.component.css',\r\n '../../styles/advanced-card.shared.style.css',\r\n ],\r\n})\r\nexport class AdvancedCardContentComponent {\r\n viewModel = input.required<AdvancedCardContentVm>();\r\n\r\n badgeClass = input.required<(tone: any) => string>();\r\n\r\n tabSelected = output<string>();\r\n tabAction = output<AdvancedTabAction>();\r\n\r\n onSelect(id: string) {\r\n this.tabSelected.emit(id);\r\n }\r\n onAction(a: AdvancedTabAction) {\r\n this.tabAction.emit(a);\r\n }\r\n}\r\n","@let vm = viewModel();\r\n\r\n<div class=\"ac-content\" [class.ac-content--inline]=\"vm.layout === 'inline'\">\r\n <div class=\"summary ac-content__summary\">\r\n <ac-card-summary\r\n [blocks]=\"vm.summaryBlocks\"\r\n [layout]=\"vm.layout\"\r\n [collapsibleVertical]=\"vm.summaryToggle\"\r\n />\r\n </div>\r\n\r\n @if (vm.tabs.length) {\r\n <div class=\"tabs\">\r\n <ac-card-tabs-bar\r\n [tabs]=\"vm.tabs\"\r\n [activeTabId]=\"vm.activeTabId\"\r\n [badgeClass]=\"badgeClass()\"\r\n (tabSelected)=\"onSelect($event)\"\r\n (tabAction)=\"onAction($event)\"\r\n />\r\n\r\n <ac-card-tab-content\r\n [activeTab]=\"vm.activeTab\"\r\n [cardId]=\"vm.cardId\"\r\n [templateRef]=\"vm.templateRef\"\r\n />\r\n </div>\r\n } @else {\r\n <div class=\"acx__content\">\r\n <ng-content></ng-content>\r\n </div>\r\n }\r\n</div>\r\n","import { Component, input, output } from '@angular/core';\r\nimport {\r\n AdvancedCardConfig,\r\n AdvancedCardContentVm,\r\n AdvancedAction,\r\n AdvancedTabAction,\r\n} from '../../types';\r\nimport { CardHeaderComponent } from '../card-header/card-header.component';\r\nimport { AdvancedCardContentComponent } from '../advanced-card-content/advanced-card-content.component';\r\n\r\n@Component({\r\n selector: 'ac-advanced-card-overlay',\r\n imports: [CardHeaderComponent, AdvancedCardContentComponent],\r\n templateUrl: './advanced-card-overlay.component.html',\r\n styleUrls: [\r\n './advanced-card-overlay.component.css',\r\n '../../styles/advanced-card.shared.style.css',\r\n ],\r\n})\r\nexport class AdvancedCardOverlayComponent {\r\n config = input.required<AdvancedCardConfig>();\r\n mode = input.required<'drawer' | 'modal'>();\r\n closeOnBackdrop = input(true);\r\n\r\n badgeClass = input.required<(tone: any) => string>();\r\n viewModel = input.required<AdvancedCardContentVm>();\r\n\r\n actionClick = output<AdvancedAction>();\r\n close = output<void>();\r\n\r\n tabSelected = output<string>();\r\n tabAction = output<AdvancedTabAction>();\r\n\r\n onBackdrop(): void {\r\n if (this.closeOnBackdrop()) this.close.emit();\r\n }\r\n\r\n onAction(a: AdvancedAction) {\r\n this.actionClick.emit(a);\r\n }\r\n}\r\n","@let isModal = mode() === 'modal';\r\n\r\n<div class=\"overlay\" [class.modal-center]=\"isModal\" (click)=\"onBackdrop()\">\r\n <section\r\n class=\"panel\"\r\n [class.panel--drawer]=\"!isModal\"\r\n [class.panel--modal]=\"isModal\"\r\n (click)=\"$event.stopPropagation()\"\r\n >\r\n <ac-card-header\r\n variant=\"panel\"\r\n [title]=\"config().title\"\r\n [badge]=\"config().badge\"\r\n [actions]=\"config().actions\"\r\n [badgeClass]=\"badgeClass()\"\r\n (actionClick)=\"onAction($event)\"\r\n (close)=\"close.emit()\"\r\n />\r\n\r\n <div class=\"panel__body min-croll\">\r\n <ac-advanced-card-content\r\n [viewModel]=\"viewModel()\"\r\n [badgeClass]=\"badgeClass()\"\r\n (tabSelected)=\"tabSelected.emit($event)\"\r\n (tabAction)=\"tabAction.emit($event)\"\r\n >\r\n <ng-content></ng-content>\r\n </ac-advanced-card-content>\r\n </div>\r\n </section>\r\n</div>\r\n","import { Component, input, output } from '@angular/core';\r\nimport {\r\n AdvancedCardConfig,\r\n AdvancedCardContentVm,\r\n AdvancedAction,\r\n AdvancedTabAction,\r\n} from '../../types';\r\nimport { AdvancedCardContentComponent } from '../advanced-card-content/advanced-card-content.component';\r\nimport { CardHeaderComponent } from '../card-header/card-header.component';\r\n\r\n@Component({\r\n selector: 'ac-advanced-card-inline',\r\n imports: [AdvancedCardContentComponent, CardHeaderComponent],\r\n templateUrl: './advanced-card-inline.component.html',\r\n styleUrls: [\r\n './advanced-card-inline.component.css',\r\n '../../styles/advanced-card.shared.style.css',\r\n ],\r\n})\r\nexport class AdvancedCardInlineComponent {\r\n config = input.required<AdvancedCardConfig>();\r\n stickyHeader = input(false);\r\n fullWidth = input(false);\r\n\r\n badgeClass = input.required<(tone: any) => string>();\r\n viewModel = input.required<AdvancedCardContentVm>();\r\n\r\n actionClick = output<AdvancedAction>();\r\n close = output<void>();\r\n\r\n onAction(a: AdvancedAction) {\r\n this.actionClick.emit(a);\r\n }\r\n tabSelected = output<string>();\r\n tabAction = output<AdvancedTabAction>();\r\n}\r\n","<section class=\"ac ac--expanded\" [class.ac--full]=\"fullWidth()\">\r\n <ac-card-header\r\n variant=\"inline\"\r\n [title]=\"config().title\"\r\n [badge]=\"config().badge\"\r\n [actions]=\"config().actions\"\r\n [sticky]=\"stickyHeader()\"\r\n [badgeClass]=\"badgeClass()\"\r\n (actionClick)=\"onAction($event)\"\r\n (close)=\"close.emit()\"\r\n />\r\n\r\n <div class=\"acx__body\">\r\n <ac-advanced-card-content\r\n [viewModel]=\"viewModel()\"\r\n [badgeClass]=\"badgeClass()\"\r\n (tabSelected)=\"tabSelected.emit($event)\"\r\n (tabAction)=\"tabAction.emit($event)\"\r\n >\r\n <ng-content></ng-content>\r\n </ac-advanced-card-content>\r\n </div>\r\n</section>\r\n","import {\r\n Component,\r\n computed,\r\n contentChildren,\r\n effect,\r\n HostListener,\r\n input,\r\n output,\r\n signal,\r\n} from '@angular/core';\r\nimport {\r\n AdvancedAction,\r\n AdvancedCardConfig,\r\n AdvancedCardContentVm,\r\n AdvancedCardTab,\r\n AdvancedTabAction,\r\n AdvancedTone,\r\n} from './types';\r\nimport { AdvancedCardTemplateDirective } from './directives/advanced-card.template.directive';\r\nimport { CardCompactComponent } from './components/card-compact/card-compact.component';\r\nimport { AdvancedCardOverlayComponent } from './components/advanced-card-overlay/advanced-card-overlay.component';\r\nimport { AdvancedCardInlineComponent } from './components/advanced-card-inline/advanced-card-inline.component';\r\n\r\n@Component({\r\n selector: 'advanced-card',\r\n imports: [CardCompactComponent, AdvancedCardOverlayComponent, AdvancedCardInlineComponent],\r\n templateUrl: './advanced-card.html',\r\n styleUrls: ['./advanced-card.css', './styles/advanced-card.shared.style.css'],\r\n host: {\r\n '[class]': 'hostClass()',\r\n },\r\n})\r\nexport class AdvancedCard {\r\n config = input.required<AdvancedCardConfig>();\r\n\r\n fullWidthOnExpand = input(true);\r\n stickyHeader = input(true);\r\n closeOnEsc = input(true);\r\n\r\n // ===== Outputs\r\n expandedChange = output<boolean>();\r\n action = output<{ actionId: string; cardId: string }>();\r\n tabChanged = output<{ tabId: string; cardId: string }>();\r\n tabAction = output<{ tabId: string; actionId: string; cardId: string }>();\r\n\r\n // ===== Projected templates (via directive)\r\n private projectedTemplates = contentChildren(AdvancedCardTemplateDirective, {\r\n descendants: true,\r\n });\r\n\r\n // ===== State\r\n readonly expanded = signal(false);\r\n readonly activeTabId = signal<string | null>(null);\r\n\r\n // ===== Computeds\r\n readonly cardId = computed(() => this.config().id);\r\n readonly expandMode = computed(() => this.config().expandMode ?? 'inline');\r\n readonly closeOnBackdrop = computed(() => this.config().closeOnBackdrop ?? true);\r\n\r\n readonly isInline = computed(() => this.expandMode() === 'inline');\r\n readonly isDrawer = computed(() => this.expandMode() === 'drawer');\r\n readonly isModal = computed(() => this.expandMode() === 'modal');\r\n\r\n readonly hasHighlights = computed(() => (this.config().highlights?.length ?? 0) > 0);\r\n readonly hasSummaryBlocks = computed(() => (this.config().summaryBlocks?.length ?? 0) > 0);\r\n\r\n readonly tabs = computed<AdvancedCardTab[]>(() => this.config().tabs ?? []);\r\n\r\n readonly activeTab = computed<AdvancedCardTab | null>(() => {\r\n const id = this.activeTabId();\r\n if (!id) return null;\r\n return this.tabs().find((t) => t.id === id) ?? null;\r\n });\r\n\r\n readonly templateMap = computed(() => {\r\n const map = new Map<string, AdvancedCardTemplateDirective>();\r\n for (const dir of this.projectedTemplates()) {\r\n map.set(dir.templateId(), dir);\r\n }\r\n return map;\r\n });\r\n\r\n readonly density = computed(() => this.config().density ?? 'comfortable');\r\n readonly size = computed(() => this.config().size ?? 'md');\r\n\r\n readonly hostClass = computed(() => {\r\n return `ac-host ac-density--${this.density()} ac-size--${this.size()}`;\r\n });\r\n\r\n readonly activeTemplateRef = computed(() => {\r\n const template = this.getActiveTemplate();\r\n // tip: puede ser TemplateRef<any>; lo normalizamos\r\n return (template?.templateRef ?? null) as any;\r\n });\r\n\r\n readonly contentVm = computed<AdvancedCardContentVm>(() => ({\r\n cardId: this.cardId(),\r\n summaryBlocks: this.config().summaryBlocks,\r\n tabs: this.tabs(),\r\n activeTabId: this.activeTabId(),\r\n activeTab: this.activeTab(),\r\n templateRef: this.activeTemplateRef(),\r\n layout: this.config().contentLayout ?? 'stacked',\r\n summaryToggle: this.config().summaryToggle ?? false,\r\n }));\r\n\r\n // Effects\r\n notifyExpandenChangesEffect = effect(() => {\r\n this.expandedChange.emit(this.expanded());\r\n });\r\n\r\n initiActiveTabEffect = effect(() => {\r\n const tabs = this.tabs();\r\n if (!tabs.length) {\r\n this.activeTabId.set(null);\r\n return;\r\n }\r\n\r\n const preferred = this.config().defaultTabId;\r\n const current = this.activeTabId();\r\n const stillExists = current && tabs.some((t) => t.id === current);\r\n\r\n if (!stillExists) {\r\n const next =\r\n preferred && tabs.some((t) => t.id === preferred) ? preferred : (tabs[0]?.id ?? null);\r\n\r\n this.activeTabId.set(next);\r\n }\r\n });\r\n\r\n // ===== Actions\r\n toggleExpand(): void {\r\n this.expanded.update((v) => !v);\r\n }\r\n\r\n expand(): void {\r\n if (!this.expanded()) this.expanded.set(true);\r\n }\r\n\r\n collapse(): void {\r\n if (this.expanded()) this.expanded.set(false);\r\n }\r\n\r\n onActionClick(a: AdvancedAction): void {\r\n if (a.disabled) return;\r\n this.action.emit({ actionId: a.id, cardId: this.cardId() });\r\n }\r\n\r\n // ===== Tabs\r\n selectTab(tabId: string): void {\r\n if (this.activeTabId() === tabId) return;\r\n this.activeTabId.set(tabId);\r\n this.tabChanged.emit({ tabId, cardId: this.cardId() });\r\n }\r\n\r\n onTabActionClick(tab: AdvancedCardTab, a: AdvancedTabAction): void {\r\n if (a.disabled) return;\r\n this.tabAction.emit({ tabId: tab.id, actionId: a.id, cardId: this.cardId() });\r\n }\r\n\r\n getActiveTemplate(): AdvancedCardTemplateDirective | null {\r\n const at = this.activeTab();\r\n if (!at || at.kind !== 'template' || !at.templateId) return null;\r\n return this.templateMap().get(at.templateId) ?? null;\r\n }\r\n\r\n // ===== Styling helpers\r\n badgeClass(tone: AdvancedTone | undefined): string {\r\n switch (tone) {\r\n case 'success':\r\n return 'badge badge--success';\r\n case 'warning':\r\n return 'badge badge--warning';\r\n case 'danger':\r\n return 'badge badge--danger';\r\n case 'primary':\r\n return 'badge badge--primary';\r\n default:\r\n return 'badge badge--neutral';\r\n }\r\n }\r\n\r\n // ===== Keyboard\r\n @HostListener('document:keydown', ['$event'])\r\n onKeydown(ev: KeyboardEvent): void {\r\n if (!this.closeOnEsc()) return;\r\n if (ev.key === 'Escape') this.collapse();\r\n }\r\n\r\n onBackdropClick(): void {\r\n if (!this.closeOnBackdrop()) return;\r\n this.collapse();\r\n }\r\n}\r\n","<div class=\"ac__card\">\r\n <lib-card-compact\r\n [configuration]=\"config()\"\r\n [expanded]=\"expanded()\"\r\n [badgeClass]=\"badgeClass.bind(this)\"\r\n (expand)=\"expand()\"\r\n />\r\n\r\n @let mode = expandMode();\r\n\r\n @if (expanded()) {\r\n @if (mode === 'inline') {\r\n <ac-advanced-card-inline\r\n [config]=\"config()\"\r\n [stickyHeader]=\"stickyHeader()\"\r\n [fullWidth]=\"fullWidthOnExpand()\"\r\n [badgeClass]=\"badgeClass.bind(this)\"\r\n [viewModel]=\"contentVm()\"\r\n (actionClick)=\"onActionClick($event)\"\r\n (close)=\"collapse()\"\r\n (tabSelected)=\"selectTab($event)\"\r\n (tabAction)=\"onTabActionClick(activeTab()!, $event)\"\r\n >\r\n <ng-content></ng-content>\r\n </ac-advanced-card-inline>\r\n } @else {\r\n <ac-advanced-card-overlay\r\n [config]=\"config()\"\r\n [mode]=\"mode === 'modal' ? 'modal' : 'drawer'\"\r\n [closeOnBackdrop]=\"closeOnBackdrop()\"\r\n [badgeClass]=\"badgeClass.bind(this)\"\r\n [viewModel]=\"contentVm()\"\r\n (actionClick)=\"onActionClick($event)\"\r\n (close)=\"collapse()\"\r\n (tabSelected)=\"selectTab($event)\"\r\n (tabAction)=\"onTabActionClick(activeTab()!, $event)\"\r\n >\r\n <ng-content></ng-content>\r\n </ac-advanced-card-overlay>\r\n }\r\n }\r\n</div>\r\n\r\n<div class=\"ac__projected-templates\" aria-hidden=\"true\">\r\n <ng-content select=\"ng-template[advancedCardTemplate]\"></ng-content>\r\n</div>\r\n","import { Component, computed, input, signal } from '@angular/core';\r\nimport { SimpleHaders, SortDirection } from './types';\r\n\r\n@Component({\r\n selector: 'simple-table',\r\n imports: [],\r\n templateUrl: './simple-table.html',\r\n styleUrl: './simple-table.css',\r\n})\r\nexport class SimpleTable<T> {\r\n headers = input.required<SimpleHaders<T>[]>();\r\n data = input<T[]>([]);\r\n\r\n sortState = signal<{ key: keyof T | null; direction: SortDirection }>({\r\n key: null,\r\n direction: 'none',\r\n });\r\n\r\n sortedData = computed(() => {\r\n const { key, direction } = this.sortState();\r\n const currentData = [...this.data()];\r\n\r\n if (!key || direction === 'none') return currentData;\r\n\r\n return currentData.sort((a, b) => {\r\n const valueA = a[key];\r\n const valueB = b[key];\r\n\r\n if (valueA == null && valueB == null) return 0;\r\n if (valueA == null) return 1;\r\n if (valueB == null) return -1;\r\n\r\n const numberA = Number(valueA);\r\n const numberB = Number(valueB);\r\n if (!isNaN(numberA) && !isNaN(numberB)) {\r\n return direction === 'asc' ? numberA - numberB : numberB - numberA;\r\n }\r\n\r\n if (valueA instanceof Date && valueB instanceof Date) {\r\n return direction === 'asc'\r\n ? valueA.getTime() - valueB.getTime()\r\n : valueB.getTime() - valueA.getTime();\r\n }\r\n\r\n const aStr = String(valueA);\r\n const bStr = String(valueB);\r\n\r\n return direction === 'asc' ? aStr.localeCompare(bStr) : bStr.localeCompare(aStr);\r\n });\r\n });\r\n\r\n sortBy(key: keyof T) {\r\n const current = this.sortState();\r\n\r\n if (current.key !== key) {\r\n this.sortState.set({ key, direction: 'asc' });\r\n return;\r\n }\r\n\r\n const next: Record<SortDirection, SortDirection> = {\r\n none: 'asc',\r\n asc: 'desc',\r\n desc: 'none',\r\n };\r\n\r\n this.sortState.set({ key, direction: next[current.direction] });\r\n }\r\n}\r\n","<div class=\"table-item\">\r\n <table class=\"simple-table\">\r\n <thead>\r\n <tr>\r\n @for (header of headers(); track header.key) {\r\n <th\r\n scope=\"col\"\r\n class=\"sortable\"\r\n [class.active]=\"sortState().key === header.key && sortState().direction !== 'none'\"\r\n (click)=\"sortBy(header.key)\"\r\n >\r\n <span class=\"th-content\">\r\n <span class=\"th-label\">{{ header.label }}</span>\r\n\r\n <!-- icono -->\r\n <span class=\"sort-icon\" aria-hidden=\"true\">\r\n @if (sortState().key !== header.key || sortState().direction === 'none') {\r\n <!-- doble flecha (neutral) -->\r\n <svg\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"24\"\r\n height=\"24\"\r\n viewBox=\"0 0 24 24\"\r\n >\r\n <rect width=\"24\" height=\"24\" fill=\"none\" />\r\n <path\r\n fill=\"currentColor\"\r\n d=\"M12.53 3.47a.75.75 0 0 0-1.06 0l-4 4a.75.75 0 0 0 0 1.06h9.06a.75.75 0 0 0 0-1.06zm4 13.06a.75.75 0 0 0 0-1.06H7.47a.75.75 0 0 0 0 1.06l4 4a.75.75 0 0 0 1.06 0z\"\r\n />\r\n </svg>\r\n } @else if (sortState().direction === 'asc') {\r\n <!-- flecha arriba -->\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\">\r\n <rect width=\"24\" height=\"24\" fill=\"none\" />\r\n <path\r\n fill=\"currentColor\"\r\n d=\"M8.2 14q-.225 0-.362-.15T7.7 13.5q0-.05.15-.35l3.625-3.625q.125-.125.25-.175T12 9.3t.275.05t.25.175l3.625 3.625q.075.075.113.163t.037.187q0 .2-.137.35T15.8 14z\"\r\n />\r\n </svg>\r\n } @else {\r\n <!-- flecha abajo -->\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\">\r\n <rect width=\"24\" height=\"24\" fill=\"none\" />\r\n <path\r\n fill=\"currentColor\"\r\n d=\"M11.475 14.475L7.85 10.85q-.075-.075-.112-.162T7.7 10.5q0-.2.138-.35T8.2 10h7.6q.225 0 .363.15t.137.35q0 .05-.15.35l-3.625 3.625q-.125.125-.25.175T12 14.7t-.275-.05t-.25-.175\"\r\n />\r\n </svg>\r\n }\r\n </span>\r\n </span>\r\n </th>\r\n }\r\n </tr>\r\n </thead>\r\n\r\n <tbody>\r\n @for (row of sortedData(); track row) {\r\n <tr>\r\n @for (header of headers(); track header.key) {\r\n <td [attr.data-label]=\"header.label\">\r\n {{ row[header.key] }}\r\n </td>\r\n }\r\n </tr>\r\n } @empty {\r\n <tr>\r\n <td class=\"empty\" [attr.colspan]=\"headers().length\">Datos no localizados.</td>\r\n </tr>\r\n }\r\n </tbody>\r\n </table>\r\n</div>\r\n","import { ChangeDetectionStrategy, Component, input, output } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\n\r\n@Component({\r\n selector: 'table-modal-image',\r\n standalone: true,\r\n imports: [CommonModule],\r\n templateUrl: './table-modal-image.component.html',\r\n styleUrls: ['./table-modal-image.component.css'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class TableModalImageComponent {\r\n readonly open = input<boolean>(false);\r\n readonly src = input<string>('');\r\n readonly alt = input<string>('');\r\n\r\n readonly close = output<void>();\r\n\r\n onClose() {\r\n this.close.emit();\r\n }\r\n}\r\n","@if (open()) {\r\n <div class=\"dt-modal-backdrop\" (click)=\"onClose()\">\r\n <div class=\"dt-modal\" (click)=\"$event.stopPropagation()\">\r\n <div class=\"dt-modal-header\">\r\n <span class=\"dt-modal-title\">{{ alt() }}</span>\r\n <button type=\"button\" class=\"dt-btn\" (click)=\"onClose()\">Cerrar</button>\r\n </div>\r\n\r\n <div class=\"dt-modal-body\">\r\n <img class=\"dt-modal-img\" [src]=\"src()\" [alt]=\"alt()\" />\r\n </div>\r\n </div>\r\n </div>\r\n}\r\n","export type CellDataType =\r\n | 'string'\r\n | 'integer'\r\n | 'decimal'\r\n | 'currency'\r\n | 'date'\r\n | 'datetime'\r\n | 'boolean'\r\n | 'image'\r\n | 'status'\r\n | 'link'\r\n | 'custom'\r\n | 'actions';\r\n\r\nexport type CellSize = 'XS' | 'SM' | 'MD' | 'LG' | 'XL' | 'AUTO-XL' | 'AUTO';\r\nexport type TextAlign = 'left' | 'center' | 'right';\r\n\r\nexport type RowId = string | number;\r\nexport type PagerItem = number | '…';\r\n\r\nexport type Icon = 'edit' | 'delete' | 'view' | 'copy';\r\n\r\nexport interface TableColumn<T = unknown> {\r\n key: string;\r\n label: string;\r\n type: CellDataType;\r\n size?: CellSize;\r\n align?: TextAlign;\r\n sortable?: boolean;\r\n filterable?: boolean;\r\n hidden?: boolean;\r\n\r\n wrap?: boolean;\r\n\r\n valueGetter?: (row: T) => unknown;\r\n formatter?: (value: unknown, row: T) => string;\r\n actions?: TableAction<T>[];\r\n options?: {\r\n currency?: 'MXN';\r\n dateFormat?: 'short' | 'medium' | 'long';\r\n dateTimeFormat?: 'short' | 'medium' | 'long';\r\n image?: {\r\n hidden?: boolean;\r\n openInModal?: boolean;\r\n showFull?: boolean;\r\n alt?: (row: T) => string;\r\n };\r\n status?: {\r\n classMap?: Record<string, string>;\r\n };\r\n link?: {\r\n hrefGetter?: (row: T) => string;\r\n labelGetter?: (row: T) => string;\r\n target?: '_blank' | '_self';\r\n };\r\n };\r\n}\r\n\r\nexport interface TableConfig {\r\n globalSearch?: boolean;\r\n columnFilters?: boolean;\r\n selectable?: boolean;\r\n selectionMode?: 'single' | 'multiple';\r\n pagination?: { enabled: boolean; pageSize: number; pageSizeOptions?: number[] };\r\n scroll?: { mode: 'none' | 'infinite'; heightPx?: number; batchSize?: number };\r\n fixedRowCount?: number;\r\n emptyText?: string;\r\n rowIdKey?: string;\r\n rowIdGetter?: (row: any) => string | number;\r\n globalSearchVisibleOnly?: boolean;\r\n}\r\n\r\nexport interface TableSortState {\r\n key: string;\r\n dir: 'asc' | 'desc';\r\n}\r\n\r\nexport type ActionVariant = 'default' | 'danger';\r\nexport type ActionRender = 'icon' | 'text';\r\n\r\nexport interface TableAction<T> {\r\n id: string;\r\n label: string;\r\n icon?: Icon | string;\r\n tooltip?: string;\r\n variant?: ActionVariant;\r\n render?: ActionRender;\r\n visible?: (row: T) => boolean;\r\n disabled?: (row: T) => boolean;\r\n confirm?: { title?: string; message: string };\r\n}\r\n\r\nexport interface TableActionEvent<T> {\r\n actionId: string;\r\n row: T;\r\n}\r\n\r\nexport const SVG_ICONS: Record<string, string> = {\r\n edit: '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"><path fill=\"currentColor\" d=\"M5 21q-.825 0-1.412-.587T3 19V5q0-.825.588-1.412T5 3h8.925l-2 2H5v14h14v-6.95l2-2V19q0 .825-.587 1.413T19 21zm4-6v-4.25l9.175-9.175q.3-.3.675-.45t.75-.15q.4 0 .763.15t.662.45L22.425 3q.275.3.425.663T23 4.4t-.137.738t-.438.662L13.25 15zM21.025 4.4l-1.4-1.4zM11 13h1.4l5.8-5.8l-.7-.7l-.725-.7L11 11.575zm6.5-6.5l-.725-.7zl.7.7z\"/></svg>',\r\n delete:\r\n '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"><path fill=\"currentColor\" d=\"M7 21q-.825 0-1.412-.587T5 19V6H4V4h5V3h6v1h5v2h-1v13q0 .825-.587 1.413T17 21zM17 6H7v13h10zM9 17h2V8H9zm4 0h2V8h-2zM7 6v13z\"/></svg>',\r\n open: '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 14 14\"><g fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1\"><path d=\"M7 3.625c-4.187 0-5.945 3.766-5.945 3.844S2.813 11.312 7 11.312s5.945-3.765 5.945-3.843S11.187 3.625 7 3.625M2.169 5.813L.61 4.252m4.525-.354L4.5 1.843m7.331 3.97l1.559-1.56m-4.525-.355L9.5 1.843\"/><path d=\"M5.306 7.081a1.738 1.738 0 1 0 3.388.776a1.738 1.738 0 1 0-3.388-.776\"/></g></svg>',\r\n copy: '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"><path fill=\"currentColor\" d=\"M9 18q-.825 0-1.412-.587T7 16V4q0-.825.588-1.412T9 2h9q.825 0 1.413.588T20 4v12q0 .825-.587 1.413T18 18zm-4 4q-.825 0-1.412-.587T3 20V6h2v14h11v2z\"/></svg>',\r\n};\r\n","\r\n/**\r\n * Base information for a time zone associated with a country or region.\r\n * Intended for catalogs, dropdowns, and Intl-based formatting.\r\n */\r\nexport interface TimeZoneInfo {\r\n /**\r\n * Official IANA time zone identifier.\r\n * Used by Intl.DateTimeFormat and backend time handling.\r\n * Example: 'America/Mexico_City', 'Europe/Madrid'.\r\n */\r\n timeZone: string;\r\n\r\n /**\r\n * Country or region name.\r\n * Intended for user-friendly display in UI components.\r\n * Example: 'Mexico', 'United States (Eastern)'.\r\n */\r\n name: string;\r\n\r\n /**\r\n * ISO 4217 currency code used in the country or region.\r\n * Required for monetary formatting with Intl.NumberFormat.\r\n * Example: 'MXN', 'USD', 'EUR'.\r\n */\r\n currency: string;\r\n\r\n /**\r\n * Locale identifier following the BCP-47 standard.\r\n * Determines language, number formatting, and date conventions.\r\n * Example: 'es-MX', 'en-US', 'fr-FR'.\r\n */\r\n locale: string;\r\n\r\n /**\r\n * UTC offset of the time zone expressed in hours.\r\n * This value represents the standard offset and does not account for DST.\r\n * Example: -6, -5, +1, +5.5.\r\n */\r\n utcOffset: number;\r\n\r\n /**\r\n * City name.\r\n * Used as a human-readable label in dropdowns or selectors.\r\n * Example: 'Mexico City', 'New York', 'London'.\r\n */\r\n city: string;\r\n}\r\n\r\nexport const TIME_ZONES = {\r\n // AFRICA\r\n CAIRO: { city: 'Cairo', timeZone: 'Africa/Cairo', name: 'Egypt', currency: 'EGP', locale: 'ar-EG', utcOffset: +2 },\r\n CASABLANCA: { city: 'Casablanca', timeZone: 'Africa/Casablanca', name: 'Morocco', currency: 'MAD', locale: 'ar-MA', utcOffset: 0 },\r\n JOHANNESBURG: { city: 'Johannesburg', timeZone: 'Africa/Johannesburg', name: 'South Africa', currency: 'ZAR', locale: 'en-ZA', utcOffset: +2 },\r\n\r\n // AMERICA\r\n BUENOS_AIRES: { city: 'Buenos Aires', timeZone: 'America/Argentina/Buenos_Aires', name: 'Argentina', currency: 'ARS', locale: 'es-AR', utcOffset: -3 },\r\n SAO_PAULO: { city: 'Sao Paulo', timeZone: 'America/Sao_Paulo', name: 'Brazil', currency: 'BRL', locale: 'pt-BR', utcOffset: -3 },\r\n TORONTO: { city: 'Toronto', timeZone: 'America/Toronto', name: 'Canada', currency: 'CAD', locale: 'en-CA', utcOffset: -5 },\r\n VANCOUVER: { city: 'Vancouver', timeZone: 'America/Vancouver', name: 'Canada (Pacific)', currency: 'CAD', locale: 'en-CA', utcOffset: -8 },\r\n BOGOTA: { city: 'Bogota', timeZone: 'America/Bogota', name: 'Colombia', currency: 'COP', locale: 'es-CO', utcOffset: -5 },\r\n CANCUN: { city: 'Cancun', timeZone: 'America/Cancun', name: 'Mexico (Quintana Roo)', currency: 'MXN', locale: 'es-MX', utcOffset: -5 },\r\n MEXICO_CITY: { city: 'Mexico City', timeZone: 'America/Mexico_City', name: 'Mexico', currency: 'MXN', locale: 'es-MX', utcOffset: -6 },\r\n TIJUANA: { city: 'Tijuana', timeZone: 'America/Tijuana', name: 'Mexico (Pacific)', currency: 'MXN', locale: 'es-MX', utcOffset: -8 },\r\n LIMA: { city: 'Lima', timeZone: 'America/Lima', name: 'Peru', currency: 'PEN', locale: 'es-PE', utcOffset: -5 },\r\n SANTIAGO: { city: 'Santiago', timeZone: 'America/Santiago', name: 'Chile', currency: 'CLP', locale: 'es-CL', utcOffset: -4 },\r\n CHICAGO: { city: 'Chicago', timeZone: 'America/Chicago', name: 'United States (Central)', currency: 'USD', locale: 'en-US', utcOffset: -6 },\r\n DENVER: { city: 'Denver', timeZone: 'America/Denver', name: 'United States (Mountain)', currency: 'USD', locale: 'en-US', utcOffset: -7 },\r\n LOS_ANGELES: { city: 'Los Angeles', timeZone: 'America/Los_Angeles', name: 'United States (Pacific)', currency: 'USD', locale: 'en-US', utcOffset: -8 },\r\n NEW_YORK: { city: 'New York', timeZone: 'America/New_York', name: 'United States (Eastern)', currency: 'USD', locale: 'en-US', utcOffset: -5 },\r\n\r\n // ASIA\r\n SHANGHAI: { city: 'Shanghai', timeZone: 'Asia/Shanghai', name: 'China', currency: 'CNY', locale: 'zh-CN', utcOffset: +8 },\r\n KOLKATA: { city: 'Kolkata', timeZone: 'Asia/Kolkata', name: 'India', currency: 'INR', locale: 'en-IN', utcOffset: +5.5 },\r\n TOKYO: { city: 'Tokyo', timeZone: 'Asia/Tokyo', name: 'Japan', currency: 'JPY', locale: 'ja-JP', utcOffset: +9 },\r\n SEOUL: { city: 'Seoul', timeZone: 'Asia/Seoul', name: 'South Korea', currency: 'KRW', locale: 'ko-KR', utcOffset: +9 },\r\n DUBAI: { city: 'Dubai', timeZone: 'Asia/Dubai', name: 'United Arab Emirates', currency: 'AED', locale: 'ar-AE', utcOffset: +4 },\r\n\r\n // EUROPE\r\n BERLIN: { city: 'Berlin', timeZone: 'Europe/Berlin', name: 'Germany', currency: 'EUR', locale: 'de-DE', utcOffset: +1 },\r\n PARIS: { city: 'Paris', timeZone: 'Europe/Paris', name: 'France', currency: 'EUR', locale: 'fr-FR', utcOffset: +1 },\r\n ROME: { city: 'Rome', timeZone: 'Europe/Rome', name: 'Italy', currency: 'EUR', locale: 'it-IT', utcOffset: +1 },\r\n MADRID: { city: 'Madrid', timeZone: 'Europe/Madrid', name: 'Spain', currency: 'EUR', locale: 'es-ES', utcOffset: +1 },\r\n ZURICH: { city: 'Zurich', timeZone: 'Europe/Zurich', name: 'Switzerland', currency: 'CHF', locale: 'de-CH', utcOffset: +1 },\r\n LONDON: { city: 'London', timeZone: 'Europe/London', name: 'United Kingdom', currency: 'GBP', locale: 'en-GB', utcOffset: 0 },\r\n\r\n // OCEANIA\r\n SYDNEY: { city: 'Sydney', timeZone: 'Australia/Sydney', name: 'Australia', currency: 'AUD', locale: 'en-AU', utcOffset: +10 },\r\n AUCKLAND: { city: 'Auckland', timeZone: 'Pacific/Auckland', name: 'New Zealand', currency: 'NZD', locale: 'en-NZ', utcOffset: +12 },\r\n};\r\n\r\n","import { TableI18n, TableLang } from '../types/table-i18n.type';\r\n\r\nexport const TABLE_I18N_EN: TableI18n = {\r\n noData: 'No data available',\r\n rowsPerPage: 'Rows per page',\r\n search: 'Search',\r\n clear: 'Clear',\r\n actions: 'Actions',\r\n previous: 'Previous',\r\n next: 'Next',\r\n showing: (from, to, total) => `Showing ${from}–${to} of ${total}`,\r\n filter: 'Filter by',\r\n empty: 'No results found.',\r\n seeImage: 'See image',\r\n};\r\n\r\nexport const TABLE_I18N_ES: TableI18n = {\r\n noData: 'No hay información disponible',\r\n rowsPerPage: 'Filas por página',\r\n search: 'Buscar',\r\n clear: 'Limpiar',\r\n actions: 'Acciones',\r\n previous: 'Anterior',\r\n next: 'Siguiente',\r\n showing: (from: number, to: number, total: number) => `Mostrando ${from}–${to} de ${total}`,\r\n filter: 'Filtrar por',\r\n empty: 'No se encontraron resultados.',\r\n seeImage: 'Ver imagen',\r\n};\r\n\r\nexport const TABLE_I18N_BY_LANG: Record<TableLang, TableI18n> = {\r\n EN: TABLE_I18N_EN,\r\n ES: TABLE_I18N_ES,\r\n};\r\n\r\nexport const TABLE_LANG_DEFAULT: TableLang = 'EN';\r\n\r\nexport const TABLE_I18N_DEFAULT: TableI18n = TABLE_I18N_EN;\r\n","import { CommonModule } from '@angular/common';\r\nimport { ChangeDetectionStrategy, Component, computed, inject, input, output } from '@angular/core';\r\nimport {\r\n TableColumn,\r\n TableConfig,\r\n TableSortState,\r\n RowId,\r\n TableAction,\r\n TableActionEvent,\r\n SVG_ICONS,\r\n} from '../../types/table.types';\r\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\r\nimport { TimeZoneInfo, TIME_ZONES } from '../../types/time-zone.types';\r\nimport { TABLE_I18N_DEFAULT } from '../../constants/table-i18n.constants';\r\nimport { TableI18n } from '../../types/table-i18n.type';\r\n\r\n@Component({\r\n selector: 'table-grid',\r\n standalone: true,\r\n imports: [CommonModule],\r\n templateUrl: './table-grid.component.html',\r\n styleUrls: ['./table-grid.component.css'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class TableGridComponent<T extends Record<string, any>> {\r\n private sanitizer = inject(DomSanitizer);\r\n\r\n // Inputs\r\n readonly config = input<TableConfig>({});\r\n readonly columns = input<TableColumn<T>[]>([]);\r\n readonly rows = input<T[]>([]);\r\n readonly gridTemplateColumns = input<string>('');\r\n readonly minTableWidth = input<number>(0);\r\n readonly columnQueries = input<Record<string, string>>({});\r\n readonly sortState = input<TableSortState | null>(null);\r\n readonly selectedIdsSet = input<Set<RowId>>(new Set<RowId>());\r\n readonly timeZone = input<TimeZoneInfo>(TIME_ZONES.MEXICO_CITY);\r\n readonly i18n = input<TableI18n>(TABLE_I18N_DEFAULT);\r\n\r\n // Outputs\r\n readonly headerSort = output<TableColumn<T>>();\r\n readonly columnQueryChange = output<{ key: string; value: string }>();\r\n readonly rowClick = output<T>();\r\n readonly toggleRow = output<T>();\r\n readonly toggleAllOnPage = output<void>();\r\n readonly openImage = output<{ src: string; alt: string }>();\r\n readonly actionClick = output<TableActionEvent<T>>();\r\n readonly bodyScroll = output<Event>();\r\n\r\n // Derived\r\n readonly showSelectionColumn = computed(() => !!this.config().selectable);\r\n\r\n // Helpers\r\n private getRowIdKey(): string {\r\n return this.config().rowIdKey ?? 'id';\r\n }\r\n\r\n getRowId(row: T): RowId {\r\n const getter = this.config().rowIdGetter;\r\n if (getter) return getter(row);\r\n const key = this.getRowIdKey();\r\n return row?.[key];\r\n }\r\n\r\n isSelected(row: T): boolean {\r\n return this.selectedIdsSet().has(this.getRowId(row));\r\n }\r\n\r\n isAllSelectedOnPage(): boolean {\r\n const rows = this.rows();\r\n if (!rows.length) return false;\r\n const set = this.selectedIdsSet();\r\n return rows.every((r) => set.has(this.getRowId(r)));\r\n }\r\n\r\n getSortIcon(colKey: string): string {\r\n const sorted = this.sortState();\r\n if (!sorted || sorted.key !== colKey) return '↕';\r\n return sorted.dir === 'asc' ? '↑' : '↓';\r\n }\r\n\r\n getDisplayText(row: T, column: TableColumn<T>): string {\r\n const value = this.getCellValue(row, column);\r\n\r\n if (column.formatter) {\r\n try {\r\n return column.formatter(value, row);\r\n } catch {\r\n return '';\r\n }\r\n }\r\n\r\n switch (column.type) {\r\n case 'string':\r\n return value == null ? '' : String(value);\r\n\r\n case 'integer':\r\n case 'decimal':\r\n case 'currency': {\r\n const currencyValue = Number(value);\r\n if (!Number.isFinite(currencyValue)) return value == null ? '' : String(value);\r\n if (column.type === 'currency') {\r\n try {\r\n return new Intl.NumberFormat(this.timeZone().locale, {\r\n style: 'currency',\r\n currency: column.options?.currency ?? this.timeZone().currency,\r\n maximumFractionDigits: 2,\r\n }).format(currencyValue);\r\n } catch {\r\n return String(currencyValue);\r\n }\r\n }\r\n return String(currencyValue);\r\n }\r\n\r\n case 'date':\r\n case 'datetime': {\r\n const dateTime = value instanceof Date ? value : new Date(String(value));\r\n if (Number.isNaN(dateTime.getTime())) return value == null ? '' : String(value);\r\n\r\n const locale = this.timeZone().locale;\r\n return column.type === 'datetime'\r\n ? dateTime.toLocaleString(locale)\r\n : dateTime.toLocaleDateString(locale);\r\n }\r\n\r\n case 'boolean':\r\n return value ? 'Sí' : 'No';\r\n\r\n default:\r\n return value == null ? '' : String(value);\r\n }\r\n }\r\n\r\n getImageSrc(row: T, col: TableColumn<T>): string {\r\n return this.getCellString(row, col);\r\n }\r\n\r\n getImageAlt(row: T, col: TableColumn<T>): string {\r\n const altFn = col.options?.image?.alt;\r\n return altFn ? altFn(row) : col.label;\r\n }\r\n\r\n getStatusClass(row: T, col: TableColumn<T>): string {\r\n const raw = this.getCellString(row, col);\r\n return col.options?.status?.classMap?.[raw] ?? '';\r\n }\r\n\r\n getLinkHref(row: T, col: TableColumn<T>): string {\r\n const getter = col.options?.link?.hrefGetter;\r\n return getter ? getter(row) : this.getCellString(row, col);\r\n }\r\n\r\n getLinkLabel(row: T, col: TableColumn<T>): string {\r\n const getter = col.options?.link?.labelGetter;\r\n if (getter) return getter(row);\r\n const cellValue = this.getCellValue(row, col);\r\n return cellValue == null ? '' : String(cellValue);\r\n }\r\n\r\n getColumnActions(col: TableColumn<T>): TableAction<T>[] {\r\n return col.actions ?? [];\r\n }\r\n\r\n isActionVisible(action: TableAction<T>, row: T): boolean {\r\n return action.visible ? action.visible(row) : true;\r\n }\r\n\r\n isActionDisabled(action: TableAction<T>, row: T): boolean {\r\n return action.disabled ? action.disabled(row) : false;\r\n }\r\n\r\n emitAction(action: TableAction<T>, row: T, event: Event) {\r\n event.stopPropagation();\r\n this.actionClick.emit({ actionId: action.id, row });\r\n }\r\n\r\n getActionSvg(action: TableAction<T>): SafeHtml | string {\r\n const key = (action.icon ?? action.id).toLowerCase();\r\n return this.sanitizer.bypassSecurityTrustHtml(SVG_ICONS[key] ?? '*');\r\n }\r\n\r\n onHeaderClickSort(column: TableColumn<T>) {\r\n if (!column.sortable) return;\r\n this.headerSort.emit(column);\r\n }\r\n\r\n onColumnQueryInput(key: string, value: string) {\r\n this.columnQueryChange.emit({ key, value });\r\n }\r\n\r\n onRowClick(row: T) {\r\n this.rowClick.emit(row);\r\n }\r\n\r\n onToggleRow(row: T) {\r\n this.toggleRow.emit(row);\r\n }\r\n\r\n onToggleAllOnPage() {\r\n this.toggleAllOnPage.emit();\r\n }\r\n\r\n onOpenImage(src: string, alt: string, event: Event) {\r\n event.stopPropagation();\r\n this.openImage.emit({ src, alt });\r\n }\r\n\r\n onBodyScroll(event: Event) {\r\n this.bodyScroll.emit(event);\r\n }\r\n\r\n private getCellValue(row: T, col: TableColumn<T>): unknown {\r\n if (col.valueGetter) {\r\n try {\r\n return col.valueGetter(row);\r\n } catch {\r\n return null;\r\n }\r\n }\r\n return row?.[col.key];\r\n }\r\n\r\n private getCellString(row: T, col: TableColumn<T>): string {\r\n const value = this.getCellValue(row, col);\r\n return value == null ? '' : String(value);\r\n }\r\n}\r\n","<div class=\"dt-grid dt-xscroll\">\r\n <div [style.minWidth.px]=\"minTableWidth()\">\r\n <!-- Header -->\r\n <div class=\"dt-row dt-header\" [style.gridTemplateColumns]=\"gridTemplateColumns()\">\r\n @if (showSelectionColumn()) {\r\n <div class=\"dt-cell dt-cell--header dt-cell--center dt-select-col\">\r\n @if ((config().selectionMode ?? 'multiple') === 'multiple') {\r\n <input\r\n type=\"checkbox\"\r\n [checked]=\"isAllSelectedOnPage()\"\r\n (change)=\"onToggleAllOnPage()\"\r\n aria-label=\"Select all\"\r\n />\r\n }\r\n </div>\r\n }\r\n\r\n @for (col of columns(); track col.key) {\r\n <div\r\n class=\"dt-cell dt-cell--header\"\r\n [class.dt-cell--sortable]=\"!!col.sortable\"\r\n [attr.data-align]=\"col.align ?? 'left'\"\r\n (click)=\"onHeaderClickSort(col)\"\r\n role=\"button\"\r\n tabindex=\"0\"\r\n >\r\n <span class=\"dt-header-label\">{{ col.label }}</span>\r\n @if (col.sortable) {\r\n <span class=\"dt-sort\">{{ getSortIcon(col.key) }}</span>\r\n }\r\n </div>\r\n }\r\n </div>\r\n\r\n <!-- Filters row (under header) -->\r\n @if (config().columnFilters) {\r\n <div class=\"dt-row dt-filters\" [style.gridTemplateColumns]=\"gridTemplateColumns()\">\r\n @if (showSelectionColumn()) {\r\n <div class=\"dt-cell dt-cell--filter dt-select-col\"></div>\r\n }\r\n\r\n @for (col of columns(); track col.key) {\r\n <div class=\"dt-cell dt-cell--filter\" [attr.data-align]=\"col.align ?? 'left'\">\r\n @if (col.filterable) {\r\n <input\r\n type=\"text\"\r\n [value]=\"columnQueries()[col.key] ?? null\"\r\n (input)=\"onColumnQueryInput(col.key, $any($event.target).value)\"\r\n [placeholder]=\"i18n().filter + ' ' + col.label\"\r\n />\r\n }\r\n </div>\r\n }\r\n </div>\r\n }\r\n\r\n <!-- Body -->\r\n <div\r\n class=\"dt-body\"\r\n [style.maxHeight.px]=\"config().scroll?.heightPx ?? null\"\r\n (scroll)=\"onBodyScroll($event)\"\r\n >\r\n @if (rows().length === 0) {\r\n <div class=\"dt-empty\">\r\n {{ config().emptyText ?? i18n().empty }}\r\n </div>\r\n } @else {\r\n @for (row of rows(); track getRowId(row)) {\r\n <div class=\"dt-row dt-data\" [style.gridTemplateColumns]=\"gridTemplateColumns()\">\r\n @if (showSelectionColumn()) {\r\n <div class=\"dt-cell dt-cell--center dt-select-col\">\r\n <input\r\n type=\"checkbox\"\r\n [checked]=\"isSelected(row)\"\r\n (change)=\"onToggleRow(row)\"\r\n aria-label=\"Seleccionar fila\"\r\n />\r\n </div>\r\n }\r\n\r\n @for (col of columns(); track col.key) {\r\n <div\r\n class=\"dt-cell\"\r\n [attr.data-align]=\"col.align ?? 'left'\"\r\n (click)=\"onRowClick(row)\"\r\n >\r\n @switch (col.type) {\r\n @case ('image') {\r\n @if ((col.options?.image?.hidden ?? false) === true) {\r\n <button\r\n type=\"button\"\r\n class=\"dt-link\"\r\n (click)=\"onOpenImage(getImageSrc(row, col), getImageAlt(row, col), $event)\"\r\n >\r\n {{ i18n().seeImage }}\r\n </button>\r\n } @else {\r\n <img\r\n class=\"dt-img\"\r\n [class.dt-img--full]=\"!!col.options?.image?.showFull\"\r\n [src]=\"getImageSrc(row, col)\"\r\n [alt]=\"getImageAlt(row, col)\"\r\n (click)=\"\r\n (col.options?.image?.openInModal ?? true) &&\r\n onOpenImage(getImageSrc(row, col), getImageAlt(row, col), $event)\r\n \"\r\n />\r\n }\r\n }\r\n\r\n @case ('status') {\r\n <span class=\"dt-badge\" [attr.data-variant]=\"getStatusClass(row, col)\">\r\n {{ getDisplayText(row, col) }}\r\n </span>\r\n }\r\n\r\n @case ('link') {\r\n <a\r\n class=\"dt-link\"\r\n [href]=\"getLinkHref(row, col)\"\r\n [target]=\"col.options?.link?.target ?? '_blank'\"\r\n (click)=\"$event.stopPropagation()\"\r\n >\r\n {{ getLinkLabel(row, col) }}\r\n </a>\r\n }\r\n\r\n @case ('actions') {\r\n <div class=\"dt-actions\">\r\n @for (action of getColumnActions(col); track action.id) {\r\n @if (isActionVisible(action, row)) {\r\n <button\r\n type=\"button\"\r\n class=\"dt-action-btn\"\r\n [class.dt-action--edit]=\"action.id === 'edit'\"\r\n [class.dt-action--delete]=\"action.id === 'delete'\"\r\n [class.dt-action--open]=\"action.id === 'open'\"\r\n [class.dt-action--copy]=\"action.id === 'copy'\"\r\n [disabled]=\"isActionDisabled(action, row)\"\r\n [title]=\"action.tooltip ?? action.label\"\r\n (click)=\"emitAction(action, row, $event)\"\r\n >\r\n @if ((action.render ?? 'icon') === 'text') {\r\n <span class=\"dt-action-text\">{{ action.label }}</span>\r\n } @else {\r\n <span class=\"dt-action-svg\" [innerHTML]=\"getActionSvg(action)\"></span>\r\n }\r\n </button>\r\n }\r\n }\r\n </div>\r\n }\r\n\r\n @default {\r\n <span class=\"dt-text\" [class.dt-text--wrap]=\"col.wrap\">{{ getDisplayText(row, col) }}</span>\r\n }\r\n }\r\n </div>\r\n }\r\n </div>\r\n }\r\n }\r\n </div>\r\n </div>\r\n</div>\r\n","import { ChangeDetectionStrategy, Component, computed, input, output } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { PagerItem } from '../../types/table.types';\r\nimport { TABLE_I18N_DEFAULT } from '../../constants/table-i18n.constants';\r\nimport { TableI18n } from '../../types/table-i18n.type';\r\n\r\n@Component({\r\n selector: 'table-pagination',\r\n standalone: true,\r\n imports: [CommonModule],\r\n styleUrls: ['./table-pagination.component.css'],\r\n templateUrl: './table-pagination.component.html',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class TablePaginationComponent {\r\n public readonly Math = Math;\r\n\r\n // Inputs\r\n readonly page = input<number>(1);\r\n readonly pageSize = input<number>(10);\r\n readonly pageCount = input<number>(1);\r\n readonly totalCount = input<number>(0);\r\n readonly pageSizeOptions = input<number[]>([10, 25, 50]);\r\n readonly pagerItems = input<PagerItem[]>([]);\r\n readonly i18n = input<TableI18n>(TABLE_I18N_DEFAULT);\r\n\r\n // Outputs\r\n readonly pageChange = output<number>();\r\n readonly pageSizeChange = output<number>();\r\n\r\n readonly startItem = computed(() => {\r\n if (this.totalCount() <= 0) return 0;\r\n return (this.page() - 1) * this.pageSize() + 1;\r\n });\r\n\r\n readonly endItem = computed(() => {\r\n if (this.totalCount() <= 0) return 0;\r\n return Math.min(this.page() * this.pageSize(), this.totalCount());\r\n });\r\n\r\n goToPage(page: number) {\r\n const clamped = Math.max(1, Math.min(this.pageCount(), page));\r\n this.pageChange.emit(clamped);\r\n }\r\n\r\n prevPage() {\r\n this.goToPage(this.page() - 1);\r\n }\r\n\r\n nextPage() {\r\n this.goToPage(this.page() + 1);\r\n }\r\n\r\n onPageSizeSelect(size: number) {\r\n if (!Number.isFinite(size) || size <= 0) return;\r\n this.pageSizeChange.emit(size);\r\n }\r\n}\r\n","<div class=\"dt-pagination dt-pagination--classic\">\r\n <!-- Info -->\r\n <span class=\"dt-page-info dt-hide-sm\">\r\n {{ i18n().showing(startItem(), endItem(), totalCount()) }}\r\n </span>\r\n\r\n <!-- Compact info (mobile) -->\r\n <span class=\"dt-page-compact dt-show-xs\"> {{ page() }} / {{ pageCount() }} </span>\r\n\r\n <!-- Rows per page -->\r\n <div class=\"dt-rows dt-hide-md\">\r\n <span>{{ i18n().rowsPerPage }}</span>\r\n <select [value]=\"pageSize()\" (change)=\"onPageSizeSelect(+$any($event.target).value)\">\r\n @for (size of pageSizeOptions(); track size) {\r\n <option [value]=\"size\">{{ size }}</option>\r\n }\r\n </select>\r\n </div>\r\n\r\n <!-- Pager -->\r\n <div class=\"dt-pager\">\r\n <button\r\n type=\"button\"\r\n class=\"dt-pager-btn dt-hide-sm\"\r\n (click)=\"goToPage(1)\"\r\n [disabled]=\"page() === 1\"\r\n aria-label=\"First page\"\r\n >\r\n <!-- svg -->\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\">\r\n <path\r\n fill=\"currentColor\"\r\n d=\"m11 18l-6-6l6-6l1.4 1.4L7.825 12l4.575 4.6zm6.6 0l-6-6l6-6L19 7.4L14.425 12L19 16.6z\"\r\n />\r\n </svg>\r\n </button>\r\n\r\n <button\r\n type=\"button\"\r\n class=\"dt-pager-btn\"\r\n (click)=\"prevPage()\"\r\n [disabled]=\"page() === 1\"\r\n aria-label=\"Prev page\"\r\n >\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\">\r\n <path fill=\"currentColor\" d=\"m14 18l-6-6l6-6l1.4 1.4l-4.6 4.6l4.6 4.6z\" />\r\n </svg>\r\n </button>\r\n\r\n <!-- números/ellipsis: se ocultarán en XS por CSS -->\r\n @for (item of pagerItems(); track $index) {\r\n @if (item === '…') {\r\n <span class=\"dt-pager-ellipsis dt-hide-xs\">…</span>\r\n } @else {\r\n <button\r\n type=\"button\"\r\n class=\"dt-pager-chip dt-hide-xs\"\r\n [class.dt-pager-chip--active]=\"item === page()\"\r\n (click)=\"goToPage(item)\"\r\n >\r\n {{ item }}\r\n </button>\r\n }\r\n }\r\n\r\n <button\r\n type=\"button\"\r\n class=\"dt-pager-btn\"\r\n (click)=\"nextPage()\"\r\n [disabled]=\"page() === pageCount()\"\r\n aria-label=\"Next page\"\r\n >\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\">\r\n <path fill=\"currentColor\" d=\"M12.6 12L8 7.4L9.4 6l6 6l-6 6L8 16.6z\" />\r\n </svg>\r\n </button>\r\n\r\n <button\r\n type=\"button\"\r\n class=\"dt-pager-btn dt-hide-sm\"\r\n (click)=\"goToPage(pageCount())\"\r\n [disabled]=\"page() === pageCount()\"\r\n aria-label=\"Last page\"\r\n >\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\">\r\n <path\r\n fill=\"currentColor\"\r\n d=\"M9.575 12L5 7.4L6.4 6l6 6l-6 6L5 16.6zm6.6 0L11.6 7.4L13 6l6 6l-6 6l-1.4-1.4z\"\r\n />\r\n </svg>\r\n </button>\r\n </div>\r\n</div>\r\n","import { ChangeDetectionStrategy, Component, input, output } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { TableI18n } from '../../types/table-i18n.type';\r\nimport { TABLE_I18N_DEFAULT } from '../../constants/table-i18n.constants';\r\n\r\n@Component({\r\n selector: 'table-toolbar',\r\n standalone: true,\r\n imports: [CommonModule],\r\n templateUrl: './table-toolbar.component.html',\r\n styleUrls: ['./table-toolbar.component.css'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class TableToolbarComponent {\r\n // Inputs\r\n readonly enabled = input<boolean>(true);\r\n readonly query = input<string>('');\r\n readonly showClear = input<boolean>(true);\r\n readonly i18n = input<TableI18n>(TABLE_I18N_DEFAULT);\r\n\r\n // Outputs\r\n readonly queryChange = output<string>();\r\n readonly clear = output<void>();\r\n\r\n onInput(value: string) {\r\n this.queryChange.emit(value);\r\n }\r\n\r\n onClear() {\r\n this.clear.emit();\r\n }\r\n}\r\n","@if (enabled()) {\r\n <div class=\"dt-toolbar\">\r\n <input\r\n class=\"dt-input\"\r\n type=\"text\"\r\n [placeholder]=\"i18n().search\"\r\n [value]=\"query()\"\r\n (input)=\"onInput($any($event.target).value)\"\r\n />\r\n\r\n @if (showClear()) {\r\n <button type=\"button\" class=\"dt-btn\" (click)=\"onClear()\">{{ i18n().clear }}</button>\r\n }\r\n </div>\r\n}\r\n","import { Component, computed, effect, Input, input, output, signal } from '@angular/core';\r\nimport {\r\n CellDataType,\r\n PagerItem,\r\n RowId,\r\n TableActionEvent,\r\n TableColumn,\r\n TableConfig,\r\n TableSortState,\r\n} from './types/table.types';\r\nimport { TableModalImageComponent } from './parts/table-modal-image/table-modal-image.component';\r\nimport { TableGridComponent } from './parts/table-grid/table-grid.component';\r\nimport { TablePaginationComponent } from './parts/table-pagination/table-pagination.component';\r\nimport { TableToolbarComponent } from './parts/table-toolbar/table-toolbar.component';\r\nimport { TABLE_I18N_BY_LANG, TABLE_LANG_DEFAULT } from './constants/table-i18n.constants';\r\nimport { TableI18n, TableLang } from './types/table-i18n.type';\r\n\r\n@Component({\r\n selector: 'advanced-table',\r\n imports: [\r\n TableModalImageComponent,\r\n TableGridComponent,\r\n TablePaginationComponent,\r\n TableToolbarComponent,\r\n ],\r\n templateUrl: './advanced-table.component.html',\r\n styleUrl: './advanced-table.component.css',\r\n})\r\nexport class AdvancedTable<T extends Record<string, any>> {\r\n // Inputs\r\n readonly columns = input<TableColumn<T>[]>([]);\r\n readonly data = input<T[]>([]);\r\n readonly config = input<TableConfig>({\r\n globalSearch: true,\r\n columnFilters: false,\r\n selectable: false,\r\n selectionMode: 'multiple',\r\n pagination: { enabled: false, pageSize: 10, pageSizeOptions: [10, 25, 50] },\r\n scroll: { mode: 'none' },\r\n emptyText: 'Sin resultados',\r\n rowIdKey: 'id',\r\n globalSearchVisibleOnly: true,\r\n });\r\n @Input()\r\n set lang(value: TableLang | undefined) {\r\n this._lang.set(value ?? TABLE_LANG_DEFAULT);\r\n }\r\n\r\n @Input()\r\n set i18n(value: Partial<TableI18n> | undefined) {\r\n this._override.set(value ?? {});\r\n }\r\n\r\n // Outputs\r\n readonly rowClick = output<T>();\r\n readonly selectionChange = output<RowId[]>();\r\n readonly actionClick = output<TableActionEvent<T>>();\r\n\r\n // Signals\r\n readonly globalQuery = signal<string>('');\r\n readonly columnQueries = signal<Record<string, string>>({});\r\n readonly sortState = signal<TableSortState | null>(null);\r\n readonly page = signal<number>(1);\r\n readonly visibleCount = signal<number>(0);\r\n readonly modalOpen = signal<boolean>(false);\r\n readonly modalImageSrc = signal<string>('');\r\n readonly modalImageAlt = signal<string>('');\r\n readonly selectedIdsSet = signal<Set<RowId>>(new Set<RowId>());\r\n readonly pageSize = signal<number>(this.config().pagination?.pageSize ?? 10);\r\n private _lang = signal<TableLang>(TABLE_LANG_DEFAULT);\r\n private _override = signal<Partial<TableI18n>>({});\r\n\r\n // Computed Data\r\n readonly selectedIds = computed<RowId[]>(() => Array.from(this.selectedIdsSet()));\r\n readonly visibleColumns = computed(() => (this.columns() ?? []).filter((c) => !c.hidden));\r\n readonly showSelectionColumn = computed(() => !!this.config().selectable);\r\n readonly gridTemplateColumns = computed(() => {\r\n const cols: string[] = [];\r\n const hasFlexCol = this.visibleColumns().some(\r\n (c) => !c.size || c.size === 'AUTO' || c.size === 'AUTO-XL',\r\n );\r\n\r\n if (this.showSelectionColumn()) cols.push('48px'); // selección\r\n\r\n for (const c of this.visibleColumns()) {\r\n cols.push(this.sizeToCss(c.size, !hasFlexCol));\r\n }\r\n return cols.join(' ');\r\n });\r\n\r\n readonly minTableWidth = computed(() => {\r\n let total = this.showSelectionColumn() ? 48 : 0;\r\n for (const c of this.visibleColumns()) {\r\n total += this.sizeToMinPx(c.size);\r\n }\r\n return total;\r\n });\r\n readonly filteredData = computed(() => {\r\n const rows = this.data() ?? [];\r\n const colsAll = this.columns() ?? [];\r\n const colsVisible = this.visibleColumns();\r\n const config = this.config();\r\n\r\n const globalQuery = this.globalQuery().trim().toLowerCase();\r\n const columnQueries = this.columnQueries();\r\n\r\n const colsForGlobal =\r\n (config.globalSearchVisibleOnly ?? true) ? colsVisible : colsAll.filter((c) => !c.hidden);\r\n\r\n return rows.filter((row) => {\r\n // column filters (AND)\r\n for (const [key, q] of Object.entries(columnQueries)) {\r\n const query = (q ?? '').trim().toLowerCase();\r\n if (!query) continue;\r\n\r\n const col = colsAll.find((c) => c.key === key);\r\n if (!col) continue;\r\n\r\n const value = this.getCellValue(row, col);\r\n const text = this.valueToSearchableText(value, col.type, row).toLowerCase();\r\n\r\n if (!text.includes(query)) return false;\r\n }\r\n\r\n // global search (OR across columns)\r\n if (config.globalSearch && globalQuery) {\r\n let any = false;\r\n for (const col of colsForGlobal) {\r\n const value = this.getCellValue(row, col);\r\n const text = this.valueToSearchableText(value, col.type, row).toLowerCase();\r\n if (text.includes(globalQuery)) {\r\n any = true;\r\n break;\r\n }\r\n }\r\n if (!any) return false;\r\n }\r\n\r\n return true;\r\n });\r\n });\r\n readonly sortedData = computed(() => {\r\n const data = [...this.filteredData()];\r\n const sort = this.sortState();\r\n if (!sort) return data;\r\n\r\n const col = (this.columns() ?? []).find((c) => c.key === sort.key);\r\n if (!col) return data;\r\n\r\n const dir = sort.dir === 'asc' ? 1 : -1;\r\n\r\n data.sort((a, b) => {\r\n const va = this.getCellValue(a, col);\r\n const vb = this.getCellValue(b, col);\r\n return dir * this.compareValues(va, vb, col.type);\r\n });\r\n\r\n return data;\r\n });\r\n readonly pagedData = computed(() => {\r\n const config = this.config();\r\n const rows = this.sortedData();\r\n const fixedN = config.fixedRowCount;\r\n const cappedRows = typeof fixedN === 'number' && fixedN > 0 ? rows.slice(0, fixedN) : rows;\r\n\r\n const mode = config.scroll?.mode ?? 'none';\r\n if (mode === 'infinite') {\r\n return cappedRows.slice(0, this.visibleCount());\r\n }\r\n\r\n // pagination\r\n if (config.pagination?.enabled) {\r\n const size = this.pageSize();\r\n const page = this.page();\r\n const start = (page - 1) * size;\r\n return cappedRows.slice(start, start + size);\r\n }\r\n\r\n return cappedRows;\r\n });\r\n readonly pagerItems = computed<PagerItem[]>(() => {\r\n const config = this.config();\r\n if (!config.pagination?.enabled) return [];\r\n\r\n const totalPages = this.pageCount();\r\n const current = this.page();\r\n\r\n if (totalPages <= 1) return [];\r\n\r\n if (totalPages <= 7) {\r\n return Array.from({ length: totalPages }, (_, i) => i + 1);\r\n }\r\n\r\n const items: PagerItem[] = [];\r\n const first = 1;\r\n const last = totalPages;\r\n const around = 1;\r\n\r\n const start = Math.max(2, current - around);\r\n const end = Math.min(last - 1, current + around);\r\n\r\n items.push(first);\r\n\r\n if (start > 2) items.push('…');\r\n\r\n for (let p = start; p <= end; p++) {\r\n items.push(p);\r\n }\r\n\r\n if (end < last - 1) items.push('…');\r\n\r\n items.push(last);\r\n\r\n return items;\r\n });\r\n readonly totalCount = computed(() => this.sortedData().length);\r\n readonly pageCount = computed(() => {\r\n const config = this.config();\r\n if (!config.pagination?.enabled) return 1;\r\n return Math.max(1, Math.ceil(this.totalCount() / this.pageSize()));\r\n });\r\n readonly isAllSelectedOnPage = computed(() => {\r\n if (!this.showSelectionColumn()) return false;\r\n const ids = this.pagedData().map((r) => this.getRowId(r));\r\n if (ids.length === 0) return false;\r\n\r\n const set = this.selectedIdsSet();\r\n return ids.every((id) => set.has(id));\r\n });\r\n protected i18nCom = computed<TableI18n>(() => {\r\n const base = TABLE_I18N_BY_LANG[this._lang()];\r\n const override = this._override();\r\n return { ...base, ...override };\r\n });\r\n\r\n // Effects\r\n infiniteScrollEffect = effect(() => {\r\n const config = this.config();\r\n const mode = config.scroll?.mode ?? 'none';\r\n const batch = config.scroll?.batchSize ?? 50;\r\n\r\n if (mode === 'infinite') {\r\n this.visibleCount.set(batch);\r\n } else {\r\n this.visibleCount.set(Number.MAX_SAFE_INTEGER);\r\n }\r\n });\r\n selectionDataEffect = effect(() => {\r\n this.selectionChange.emit(this.selectedIds());\r\n });\r\n pagesCountEffect = effect(() => {\r\n const totalPages = this.pageCount();\r\n if (this.page() > totalPages) {\r\n this.page.set(totalPages);\r\n }\r\n });\r\n\r\n // UI Actions\r\n onHeaderClickSort(col: TableColumn<T>) {\r\n if (!col.sortable) return;\r\n const current = this.sortState();\r\n if (!current || current.key !== col.key) {\r\n this.sortState.set({ key: col.key, dir: 'asc' });\r\n } else if (current.dir === 'asc') {\r\n this.sortState.set({ key: col.key, dir: 'desc' });\r\n } else {\r\n this.sortState.set(null);\r\n }\r\n this.page.set(1);\r\n }\r\n\r\n onBodyScroll(event: Event) {\r\n const config = this.config();\r\n if ((config.scroll?.mode ?? 'none') !== 'infinite') return;\r\n\r\n const el = event.target as HTMLElement;\r\n const thresholdPx = 120;\r\n const nearBottom = el.scrollTop + el.clientHeight >= el.scrollHeight - thresholdPx;\r\n\r\n if (!nearBottom) return;\r\n\r\n const batch = config.scroll?.batchSize ?? 50;\r\n const next = Math.min(this.sortedData().length, this.visibleCount() + batch);\r\n this.visibleCount.set(next);\r\n }\r\n\r\n onPageSizeChange(size: number) {\r\n if (!Number.isFinite(size) || size <= 0) return;\r\n this.pageSize.set(size);\r\n this.page.set(1);\r\n }\r\n\r\n getCellValue(row: T, col: TableColumn<T>): unknown {\r\n try {\r\n return col.valueGetter ? col.valueGetter(row) : row?.[col.key];\r\n } catch {\r\n return undefined;\r\n }\r\n }\r\n\r\n getRowId(row: T): RowId {\r\n const config = this.config();\r\n if (config.rowIdGetter) return config.rowIdGetter(row) as RowId;\r\n\r\n const key = config.rowIdKey ?? 'id';\r\n const value = row?.[key];\r\n return (value ?? JSON.stringify(row)) as RowId;\r\n }\r\n\r\n setGlobalQuery(query: string) {\r\n this.globalQuery.set(query ?? '');\r\n this.page.set(1);\r\n this.resetInfiniteIfNeeded();\r\n }\r\n\r\n setColumnQuery(key: string, query: string) {\r\n const next = { ...this.columnQueries() };\r\n next[key] = query ?? '';\r\n this.columnQueries.set(next);\r\n this.page.set(1);\r\n this.resetInfiniteIfNeeded();\r\n }\r\n\r\n clearFilters() {\r\n this.globalQuery.set('');\r\n this.columnQueries.set({});\r\n this.page.set(1);\r\n this.resetInfiniteIfNeeded();\r\n }\r\n\r\n onRowClick(row: T) {\r\n this.rowClick.emit(row);\r\n }\r\n\r\n toggleRowSelection(row: T) {\r\n const config = this.config();\r\n if (!config.selectable) return;\r\n\r\n const id = this.getRowId(row);\r\n const mode = config.selectionMode ?? 'multiple';\r\n\r\n const set = new Set(this.selectedIdsSet());\r\n if (mode === 'single') {\r\n if (set.has(id)) set.clear();\r\n else {\r\n set.clear();\r\n set.add(id);\r\n }\r\n } else {\r\n if (set.has(id)) set.delete(id);\r\n else set.add(id);\r\n }\r\n this.selectedIdsSet.set(set);\r\n }\r\n\r\n toggleSelectAllOnPage() {\r\n const config = this.config();\r\n if (!config.selectable) return;\r\n if ((config.selectionMode ?? 'multiple') === 'single') return;\r\n\r\n const ids = this.pagedData().map((r) => this.getRowId(r));\r\n const set = new Set(this.selectedIdsSet());\r\n\r\n const allSelected = ids.every((id) => set.has(id));\r\n if (allSelected) ids.forEach((id) => set.delete(id));\r\n else ids.forEach((id) => set.add(id));\r\n\r\n this.selectedIdsSet.set(set);\r\n }\r\n\r\n prevPage() {\r\n this.page.set(Math.max(1, this.page() - 1));\r\n }\r\n\r\n nextPage() {\r\n this.page.set(Math.min(this.pageCount(), this.page() + 1));\r\n }\r\n\r\n goToPage(p: number) {\r\n const clamped = Math.max(1, Math.min(this.pageCount(), p));\r\n this.page.set(clamped);\r\n }\r\n\r\n openImageModal(src: string, alt: string) {\r\n this.modalImageSrc.set(src);\r\n this.modalImageAlt.set(alt);\r\n this.modalOpen.set(true);\r\n }\r\n\r\n closeModal() {\r\n this.modalOpen.set(false);\r\n this.modalImageSrc.set('');\r\n this.modalImageAlt.set('');\r\n }\r\n\r\n // Private functions\r\n private resetInfiniteIfNeeded() {\r\n const config = this.config();\r\n if ((config.scroll?.mode ?? 'none') !== 'infinite') return;\r\n const batch = config.scroll?.batchSize ?? 50;\r\n this.visibleCount.set(batch);\r\n }\r\n\r\n private sizeToCss(size?: string, expand = false): string {\r\n const fixed = (px: number) => (expand ? `minmax(${px}px, 1fr)` : `${px}px`);\r\n switch (size) {\r\n case 'XS':\r\n return fixed(80);\r\n case 'SM':\r\n return fixed(120);\r\n case 'MD':\r\n return fixed(180);\r\n case 'LG':\r\n return fixed(260);\r\n case 'XL':\r\n return fixed(360);\r\n case 'AUTO-XL':\r\n return 'minmax(360px, 1fr)';\r\n case 'AUTO':\r\n default:\r\n return 'minmax(240px, 1fr)';\r\n }\r\n }\r\n\r\n private sizeToMinPx(size?: string): number {\r\n switch (size) {\r\n case 'XS':\r\n return 80;\r\n case 'SM':\r\n return 120;\r\n case 'MD':\r\n return 180;\r\n case 'LG':\r\n return 260;\r\n case 'XL':\r\n return 360;\r\n case 'AUTO-XL':\r\n return 360;\r\n default:\r\n return 240; // AUTO\r\n }\r\n }\r\n\r\n private toNumber(value: unknown): number {\r\n if (typeof value === 'number') return value;\r\n if (typeof value === 'string') {\r\n return Number(value.replace(/,/g, '').trim());\r\n }\r\n return Number.NaN;\r\n }\r\n\r\n private toDate(value: unknown): Date | null {\r\n if (value instanceof Date && !Number.isNaN(value.getTime())) return value;\r\n if (typeof value === 'string' || typeof value === 'number') {\r\n const date = new Date(value);\r\n return Number.isNaN(date.getTime()) ? null : date;\r\n }\r\n return null;\r\n }\r\n\r\n private compareValues(firstValue: unknown, secondValue: unknown, type: CellDataType): number {\r\n const firstNull = firstValue == null || firstValue === '';\r\n const secondNull = secondValue == null || secondValue === '';\r\n if (firstNull && secondNull) return 0;\r\n if (firstNull) return 1;\r\n if (secondNull) return -1;\r\n\r\n let response: number | null = null;\r\n switch (type) {\r\n case 'integer':\r\n case 'decimal':\r\n case 'currency': {\r\n const firstNumber = this.toNumber(firstValue);\r\n const secondNumber = this.toNumber(secondValue);\r\n if (!Number.isFinite(firstNumber) && !Number.isFinite(secondNumber)) response = 0;\r\n else if (!Number.isFinite(firstNumber)) response = 1;\r\n else if (!Number.isFinite(secondNumber)) response = -1;\r\n else response = firstNumber === secondNumber ? 0 : firstNumber < secondNumber ? -1 : 1;\r\n break;\r\n }\r\n\r\n case 'date':\r\n case 'datetime': {\r\n const firstDate = this.toDate(firstValue);\r\n const toCompareDate = this.toDate(secondValue);\r\n if (!firstDate && !toCompareDate) response = 0;\r\n else if (!firstDate) response = 1;\r\n else if (!toCompareDate) response = -1;\r\n else {\r\n const ta = firstDate.getTime();\r\n const tb = toCompareDate.getTime();\r\n response = ta === tb ? 0 : ta < tb ? -1 : 1;\r\n }\r\n break;\r\n }\r\n\r\n case 'boolean': {\r\n const firstBool = firstValue === true ? 1 : 0;\r\n const secondBool = secondValue === true ? 1 : 0;\r\n response = firstBool - secondBool;\r\n break;\r\n }\r\n\r\n default: {\r\n const firstString = String(firstValue).toLowerCase();\r\n const secondString = String(secondValue).toLowerCase();\r\n response = firstString.localeCompare(secondString, 'es');\r\n break;\r\n }\r\n }\r\n return response;\r\n }\r\n\r\n private valueToSearchableText(value: unknown, type: CellDataType, row: T): string {\r\n if (value == null) return '';\r\n if (type === 'image') return '';\r\n if (type === 'boolean') return value === true ? 'si true yes 1' : 'no false 0';\r\n return String(value);\r\n }\r\n}\r\n","<div class=\"dt-container\">\r\n <div class=\"dt-toolbar\">\r\n <!-- Search and Clean -->\r\n <table-toolbar\r\n [enabled]=\"config().globalSearch ?? true\"\r\n [query]=\"globalQuery()\"\r\n [i18n]=\"i18nCom()\"\r\n [showClear]=\"true\"\r\n (queryChange)=\"setGlobalQuery($event)\"\r\n (clear)=\"clearFilters()\"\r\n />\r\n\r\n <!-- Pagination -->\r\n @if (config().pagination?.enabled) {\r\n <table-pagination\r\n [page]=\"page()\"\r\n [pageSize]=\"pageSize()\"\r\n [pageCount]=\"pageCount()\"\r\n [totalCount]=\"totalCount()\"\r\n [pagerItems]=\"pagerItems()\"\r\n [pageSizeOptions]=\"config().pagination!.pageSizeOptions ?? [10, 25, 50]\"\r\n [i18n]=\"i18nCom()\"\r\n (pageChange)=\"goToPage($event)\"\r\n (pageSizeChange)=\"onPageSizeChange($event)\"\r\n />\r\n }\r\n </div>\r\n\r\n <div class=\"dt-grid\">\r\n <!-- Data Table -->\r\n <table-grid\r\n [config]=\"config()\"\r\n [columns]=\"visibleColumns()\"\r\n [rows]=\"pagedData()\"\r\n [gridTemplateColumns]=\"gridTemplateColumns()\"\r\n [minTableWidth]=\"minTableWidth()\"\r\n [columnQueries]=\"columnQueries()\"\r\n [sortState]=\"sortState()\"\r\n [selectedIdsSet]=\"selectedIdsSet()\"\r\n [i18n]=\"i18nCom()\"\r\n (headerSort)=\"onHeaderClickSort($event)\"\r\n (columnQueryChange)=\"setColumnQuery($event.key, $event.value)\"\r\n (rowClick)=\"onRowClick($event)\"\r\n (toggleRow)=\"toggleRowSelection($event)\"\r\n (toggleAllOnPage)=\"toggleSelectAllOnPage()\"\r\n (openImage)=\"openImageModal($event.src, $event.alt)\"\r\n (actionClick)=\"actionClick.emit($event)\"\r\n (bodyScroll)=\"onBodyScroll($event)\"\r\n />\r\n </div>\r\n\r\n <!-- Image Modal -->\r\n <table-modal-image\r\n [open]=\"modalOpen()\"\r\n [src]=\"modalImageSrc()\"\r\n [alt]=\"modalImageAlt()\"\r\n (close)=\"closeModal()\"\r\n />\r\n</div>\r\n","/*\r\n * Public API Surface of b2b-tools\r\n */\r\nexport * from './lib/components/cards';\r\nexport * from './lib/components/tables';\r\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":"b2b-tools.mjs","sources":["../../../projects/b2b-tools/src/lib/components/cards/advanced-card/directives/advanced-card.template.directive.ts","../../../projects/b2b-tools/src/lib/components/cards/advanced-card/components/card-compact/card-compact.component.ts","../../../projects/b2b-tools/src/lib/components/cards/advanced-card/components/card-compact/card-compact.component.html","../../../projects/b2b-tools/src/lib/components/cards/advanced-card/components/card-header/card-header.component.ts","../../../projects/b2b-tools/src/lib/components/cards/advanced-card/components/card-header/card-header.component.html","../../../projects/b2b-tools/src/lib/components/cards/advanced-card/components/card-summary/card-summary.component.ts","../../../projects/b2b-tools/src/lib/components/cards/advanced-card/components/card-summary/card-summary.component.html","../../../projects/b2b-tools/src/lib/components/cards/advanced-card/components/card-tab-content/card-tab-content.component.ts","../../../projects/b2b-tools/src/lib/components/cards/advanced-card/components/card-tab-content/card-tab-content.component.html","../../../projects/b2b-tools/src/lib/components/cards/advanced-card/components/card-tabs-bar/card-tabs-bar.component.ts","../../../projects/b2b-tools/src/lib/components/cards/advanced-card/components/card-tabs-bar/card-tabs-bar.component.html","../../../projects/b2b-tools/src/lib/components/cards/advanced-card/components/advanced-card-content/advanced-card-content.component.ts","../../../projects/b2b-tools/src/lib/components/cards/advanced-card/components/advanced-card-content/advanced-card-content.component.html","../../../projects/b2b-tools/src/lib/components/cards/advanced-card/components/advanced-card-overlay/advanced-card-overlay.component.ts","../../../projects/b2b-tools/src/lib/components/cards/advanced-card/components/advanced-card-overlay/advanced-card-overlay.component.html","../../../projects/b2b-tools/src/lib/components/cards/advanced-card/components/advanced-card-inline/advanced-card-inline.component.ts","../../../projects/b2b-tools/src/lib/components/cards/advanced-card/components/advanced-card-inline/advanced-card-inline.component.html","../../../projects/b2b-tools/src/lib/components/cards/advanced-card/advanced-card.ts","../../../projects/b2b-tools/src/lib/components/cards/advanced-card/advanced-card.html","../../../projects/b2b-tools/src/lib/components/tables/simple-table/simple-table.ts","../../../projects/b2b-tools/src/lib/components/tables/simple-table/simple-table.html","../../../projects/b2b-tools/src/lib/components/tables/advanced-table/parts/table-modal-image/table-modal-image.component.ts","../../../projects/b2b-tools/src/lib/components/tables/advanced-table/parts/table-modal-image/table-modal-image.component.html","../../../projects/b2b-tools/src/lib/components/tables/advanced-table/types/table.types.ts","../../../projects/b2b-tools/src/lib/components/tables/advanced-table/types/time-zone.types.ts","../../../projects/b2b-tools/src/lib/components/tables/advanced-table/constants/table-i18n.constants.ts","../../../projects/b2b-tools/src/lib/components/tables/advanced-table/parts/table-grid/table-grid.component.ts","../../../projects/b2b-tools/src/lib/components/tables/advanced-table/parts/table-grid/table-grid.component.html","../../../projects/b2b-tools/src/lib/components/tables/advanced-table/parts/table-pagination/table-pagination.component.ts","../../../projects/b2b-tools/src/lib/components/tables/advanced-table/parts/table-pagination/table-pagination.component.html","../../../projects/b2b-tools/src/lib/components/tables/advanced-table/parts/table-toolbar/table-toolbar.component.ts","../../../projects/b2b-tools/src/lib/components/tables/advanced-table/parts/table-toolbar/table-toolbar.component.html","../../../projects/b2b-tools/src/lib/components/tables/advanced-table/advanced-table.component.ts","../../../projects/b2b-tools/src/lib/components/tables/advanced-table/advanced-table.component.html","../../../projects/b2b-tools/src/public-api.ts","../../../projects/b2b-tools/src/b2b-tools.ts"],"sourcesContent":["import { Directive, TemplateRef, input } from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[advancedCardTemplate]',\r\n standalone: true,\r\n})\r\nexport class AdvancedCardTemplateDirective {\r\n templateId = input.required<string>({ alias: 'advancedCardTemplate' });\r\n\r\n constructor(public readonly templateRef: TemplateRef<any>) {}\r\n}\r\n","import { Component, computed, input, output } from '@angular/core';\r\nimport { AdvancedCardConfig } from '../../types';\r\n\r\n@Component({\r\n selector: 'lib-card-compact',\r\n imports: [],\r\n templateUrl: './card-compact.component.html',\r\n styleUrls: ['./card-compact.component.css', '../../styles/advanced-card.shared.style.css'],\r\n})\r\nexport class CardCompactComponent {\r\n configuration = input.required<AdvancedCardConfig>();\r\n expanded = input.required<boolean>();\r\n badgeClass = input.required<(tone: any) => string>();\r\n\r\n expand = output<void>();\r\n\r\n hasHighlights = computed(() => (this.configuration().highlights?.length ?? 0) > 0);\r\n\r\n onExpand(): void {\r\n this.expand.emit();\r\n }\r\n}\r\n","@let config = configuration();\r\n\r\n<section\r\n class=\"ac ac--compact\"\r\n [class.ac--hidden]=\"expanded()\"\r\n tabindex=\"0\"\r\n role=\"button\"\r\n (click)=\"onExpand()\"\r\n (keydown.enter)=\"onExpand()\"\r\n>\r\n <header class=\"ac__header\">\r\n <div class=\"ac__title-wrap\">\r\n <h3 class=\"ac__title\">{{ config.title }}</h3>\r\n\r\n @if (config.subtitle) {\r\n <p class=\"ac__subtitle\">{{ config.subtitle }}</p>\r\n }\r\n </div>\r\n\r\n @if (config.badge) {\r\n <span [class]=\"badgeClass()(config.badge.tone)\">\r\n {{ config.badge.label }}\r\n </span>\r\n }\r\n </header>\r\n\r\n @if (hasHighlights()) {\r\n @let highlightList = config.highlights;\r\n\r\n <div class=\"ac__highlights\">\r\n @for (highlight of highlightList; track highlight.label) {\r\n <div class=\"ac__hl\">\r\n <div class=\"ac__hl-value\">{{ highlight.value }}</div>\r\n <div class=\"ac__hl-label\">\r\n {{ highlight.label }}\r\n @if (highlight.hint) {\r\n <span class=\"ac__hl-hint\">· {{ highlight.hint }}</span>\r\n }\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n }\r\n\r\n <footer class=\"ac__footer\">\r\n <button type=\"button\" class=\"btn btn--primary\" (click)=\"onExpand(); $event.stopPropagation()\">\r\n {{ config.primaryCta?.label ?? 'Ver detalle' }}\r\n <span class=\"btn__chev\">›</span>\r\n </button>\r\n </footer>\r\n</section>\r\n","import { Component, input, output } from '@angular/core';\r\nimport { AdvancedAction, AdvancedBadge } from '../../types';\r\n\r\n@Component({\r\n selector: 'ac-card-header',\r\n imports: [],\r\n templateUrl: './card-header.component.html',\r\n styleUrls: ['./card-header.component.css', '../../styles/advanced-card.shared.style.css'],\r\n})\r\nexport class CardHeaderComponent {\r\n variant = input<'inline' | 'panel'>('inline');\r\n\r\n title = input.required<string>();\r\n badge = input<AdvancedBadge | undefined>(undefined);\r\n actions = input<AdvancedAction[] | undefined>(undefined);\r\n\r\n sticky = input(false);\r\n badgeClass = input.required<(tone: any) => string>();\r\n\r\n actionClick = output<AdvancedAction>();\r\n close = output<void>();\r\n\r\n onAction(advancedAction: AdvancedAction): void {\r\n if (advancedAction.disabled) return;\r\n this.actionClick.emit(advancedAction);\r\n }\r\n\r\n onClose(): void {\r\n this.close.emit();\r\n }\r\n}\r\n","<header\r\n [class.acx__header]=\"variant() === 'inline'\"\r\n [class.acx__header--sticky]=\"variant() === 'inline' && sticky()\"\r\n [class.panel__header]=\"variant() === 'panel'\"\r\n>\r\n <div [class.acx__title]=\"variant() === 'inline'\" [class.panel__title]=\"variant() === 'panel'\">\r\n <h3\r\n [class.acx__title-text]=\"variant() === 'inline'\"\r\n [class.panel__title-text]=\"variant() === 'panel'\"\r\n >\r\n {{ title() }}\r\n </h3>\r\n\r\n @if (badge()) {\r\n <span [class]=\"badgeClass()(badge()?.tone)\">\r\n {{ badge()?.label }}\r\n </span>\r\n }\r\n </div>\r\n\r\n <div [class.acx__actions]=\"variant() === 'inline'\" [class.panel__actions]=\"variant() === 'panel'\">\r\n @let headerActions = actions();\r\n @if (headerActions?.length) {\r\n @for (headerAction of headerActions; track headerAction.id) {\r\n <button\r\n type=\"button\"\r\n class=\"btn\"\r\n [class.btn--primary]=\"headerAction.tone === 'primary'\"\r\n [class.btn--danger]=\"headerAction.tone === 'danger'\"\r\n [class.btn--secondary]=\"!headerAction.tone || headerAction.tone === 'secondary'\"\r\n [disabled]=\"headerAction.disabled\"\r\n (click)=\"onAction(headerAction)\"\r\n >\r\n {{ headerAction.label }}\r\n </button>\r\n }\r\n }\r\n\r\n <button type=\"button\" class=\"icon-btn\" (click)=\"onClose()\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\">\r\n <rect width=\"24\" height=\"24\" fill=\"none\" />\r\n <path\r\n fill=\"currentColor\"\r\n d=\"M6.4 19L5 17.6l5.6-5.6L5 6.4L6.4 5l5.6 5.6L17.6 5L19 6.4L13.4 12l5.6 5.6l-1.4 1.4l-5.6-5.6z\"\r\n />\r\n </svg>\r\n </button>\r\n </div>\r\n</header>\r\n","import { Component, computed, effect, input, signal } from '@angular/core';\nimport { AdvancedSummaryBlock, AdvancedTone } from '../../types';\n\n@Component({\n selector: 'ac-card-summary',\n imports: [],\n templateUrl: './card-summary.component.html',\n styleUrls: ['./card-summary.component.css', '../../styles/advanced-card.shared.style.css'],\n})\nexport class CardSummaryComponent {\n blocks = input<AdvancedSummaryBlock[] | undefined>(undefined);\n layout = input<'stacked' | 'inline'>('stacked');\n collapsibleVertical = input(false);\n\n readonly columnMax: number = 4;\n\n numBlocks = computed(() => this.blocks()?.length ?? 0);\n isSingle = computed(() => this.numBlocks() === 1);\n\n /** Vertical accordion — only in inline sidebar */\n isAccordion = computed(() => this.layout() === 'inline');\n\n /** Horizontal accordion — stacked with 2+ blocks */\n isHorizontalAccordion = computed(() => this.layout() === 'stacked' && this.numBlocks() > 1);\n\n /** Vertical collapse toggle — only when collapsibleVertical + stacked single block */\n showToggle = computed(\n () =>\n this.collapsibleVertical() &&\n this.layout() === 'stacked' &&\n this.numBlocks() > 0 &&\n !this.isHorizontalAccordion(),\n );\n\n // ─── Inline accordion state ────────────────────────────────────────────\n readonly openBlocks = signal<Set<string>>(new Set());\n\n // ─── Stacked tab mode state ────────────────────────────────────────────\n readonly activeBlock = signal<string>('');\n\n // ─── Stacked vertical toggle state ────────────────────────────────────\n readonly isStackedCollapsed = signal(false);\n\n constructor() {\n effect(() => {\n const blocks = this.blocks();\n if (blocks?.length) {\n this.openBlocks.set(new Set([blocks[0].title]));\n this.activeBlock.set(blocks[0].title);\n }\n });\n }\n\n // ─── Inline accordion helpers ──────────────────────────────────────────\n toggleBlock(title: string): void {\n this.openBlocks.update(set => {\n const next = new Set(set);\n if (next.has(title)) next.delete(title);\n else next.add(title);\n return next;\n });\n }\n\n isOpen(title: string): boolean {\n return this.openBlocks().has(title);\n }\n\n // ─── Tab mode helpers ──────────────────────────────────────────────────\n selectBlock(title: string): void {\n this.activeBlock.set(title);\n }\n\n isActiveBlock(title: string): boolean {\n return this.activeBlock() === title;\n }\n\n // ─── Vertical toggle helper ────────────────────────────────────────────\n toggleStacked(): void {\n this.isStackedCollapsed.update(v => !v);\n }\n\n // ─── Shared helpers ────────────────────────────────────────────────────\n rowBadgeClass(tone?: AdvancedTone): string {\n return `badge badge--${tone ?? 'neutral'}`;\n }\n\n templateStyle = computed(() => {\n if (this.layout() === 'inline') {\n return 'repeat(1, 1fr)';\n }\n return `repeat(${Math.min(this.numBlocks(), this.columnMax)}, 1fr)`;\n });\n}\n","@if (numBlocks() > 0) {\n @let list = blocks();\n\n @if (isHorizontalAccordion()) {\n\n <!-- ─── HORIZONTAL ACCORDION (stacked, 2+ blocks) ─────────────────── -->\n <div class=\"acx__hacc\">\n @for (block of list; track block.title) {\n <div class=\"hacc__item\" [class.hacc__item--active]=\"isActiveBlock(block.title)\">\n\n <button\n class=\"hacc__trigger\"\n (click)=\"selectBlock(block.title)\"\n type=\"button\"\n [attr.aria-expanded]=\"isActiveBlock(block.title)\"\n [attr.aria-label]=\"block.title\"\n >\n <span class=\"hacc__trigger-text\">{{ block.title }}</span>\n </button>\n\n <div class=\"hacc__content\">\n <div class=\"hacc__rows\">\n @for (row of block.rows; track row.label) {\n <div class=\"block__row\">\n <span class=\"block__label\">\n @if (row.icon) { <span class=\"block__row-icon\">{{ row.icon }}</span> }\n {{ row.label }}\n </span>\n @switch (row.kind) {\n @case ('badge') {\n <span [class]=\"rowBadgeClass(row.tone)\">{{ row.value }}</span>\n }\n @case ('number') {\n <span class=\"block__value block__value--number\">{{ row.value }}</span>\n }\n @case ('date') {\n <span class=\"block__value block__value--date\">{{ row.value }}</span>\n }\n @default {\n <span class=\"block__value\">{{ row.value }}</span>\n }\n }\n </div>\n }\n </div>\n </div>\n\n </div>\n }\n </div>\n\n } @else {\n\n <!-- ─── GRID MODE (single block or inline sidebar) ────────────────── -->\n @if (showToggle()) {\n <button\n class=\"summary__toggle\"\n [class.summary__toggle--collapsed]=\"isStackedCollapsed()\"\n (click)=\"toggleStacked()\"\n type=\"button\"\n >\n <span class=\"summary__toggle-icon\">&#8250;</span>\n Summary\n </button>\n }\n\n <div\n class=\"acx__summary\"\n [class.acx__summary--single]=\"isSingle()\"\n [class.acx__summary--collapsed]=\"isStackedCollapsed()\"\n [class.scrollbar-y]=\"isAccordion()\"\n [style.grid-template-columns]=\"templateStyle()\"\n >\n @for (block of list; track block.title) {\n <div class=\"block\" [class.block--single]=\"isSingle()\">\n <button\n class=\"block__title\"\n [class.block__title--accordion]=\"isAccordion()\"\n [class.block__title--open]=\"isAccordion() && isOpen(block.title)\"\n (click)=\"isAccordion() && toggleBlock(block.title)\"\n type=\"button\"\n >\n {{ block.title }}\n @if (isAccordion()) {\n <span class=\"block__chevron\">&#8250;</span>\n }\n </button>\n\n <div class=\"block__rows\" [class.block__rows--hidden]=\"isAccordion() && !isOpen(block.title)\">\n @for (row of block.rows; track row.label) {\n <div class=\"block__row\">\n <span class=\"block__label\">\n @if (row.icon) { <span class=\"block__row-icon\">{{ row.icon }}</span> }\n {{ row.label }}\n </span>\n @switch (row.kind) {\n @case ('badge') {\n <span [class]=\"rowBadgeClass(row.tone)\">{{ row.value }}</span>\n }\n @case ('number') {\n <span class=\"block__value block__value--number\">{{ row.value }}</span>\n }\n @case ('date') {\n <span class=\"block__value block__value--date\">{{ row.value }}</span>\n }\n @default {\n <span class=\"block__value\">{{ row.value }}</span>\n }\n }\n </div>\n }\n </div>\n </div>\n }\n </div>\n\n }\n}\n","import { Component, input, TemplateRef } from '@angular/core';\r\nimport { AdvancedCardTab, AdvancedCardTemplateCtx } from '../../types';\r\nimport { NgTemplateOutlet } from '@angular/common';\r\n\r\n@Component({\r\n selector: 'ac-card-tab-content',\r\n imports: [NgTemplateOutlet],\r\n templateUrl: './card-tab-content.component.html',\r\n styleUrls: ['./card-tab-content.component.css', '../../styles/advanced-card.shared.style.css'],\r\n})\r\nexport class CardTabContentComponent {\r\n activeTab = input.required<AdvancedCardTab | null>();\r\n cardId = input.required<string>();\r\n\r\n /**\r\n * Función que resuelve el TemplateRef para el tab actual.\r\n * (La lógica real sigue en el root: getActiveTemplate())\r\n */\r\n templateRef = input<TemplateRef<AdvancedCardTemplateCtx> | null>(null);\r\n}\r\n","@let tab = activeTab();\r\n@let template = templateRef();\r\n\r\n<div class=\"tabs__content\">\r\n @if (tab) {\r\n @switch (tab.kind) {\r\n @case ('text') {\r\n <div class=\"tab-text\">\r\n {{ tab.text ?? '' }}\r\n </div>\r\n }\r\n\r\n @case ('empty') {\r\n <div class=\"empty\">Sin contenido.</div>\r\n }\r\n\r\n @case ('template') {\r\n @if (template) {\r\n <ng-container\r\n [ngTemplateOutlet]=\"template\"\r\n [ngTemplateOutletContext]=\"{\r\n cardId: cardId(),\r\n tabId: tab.id,\r\n }\"\r\n />\r\n } @else {\r\n <div class=\"empty\">Template no encontrado para \"{{ tab.templateId }}\"</div>\r\n }\r\n }\r\n }\r\n } @else {\r\n <div class=\"empty\">Sin tabs configurados.</div>\r\n }\r\n</div>\r\n","import { Component, computed, input, output } from '@angular/core';\r\nimport { AdvancedCardTab, AdvancedTabAction } from '../../types';\r\n\r\n@Component({\r\n selector: 'ac-card-tabs-bar',\r\n imports: [],\r\n templateUrl: './card-tabs-bar.component.html',\r\n styleUrls: ['./card-tabs-bar.component.css', '../../styles/advanced-card.shared.style.css'],\r\n})\r\nexport class CardTabsBarComponent {\r\n tabs = input.required<AdvancedCardTab[]>();\r\n activeTabId = input.required<string | null>();\r\n\r\n badgeClass = input.required<(tone: any) => string>();\r\n\r\n tabSelected = output<string>();\r\n tabAction = output<AdvancedTabAction>();\r\n\r\n activeTab = computed(() => {\r\n const id = this.activeTabId();\r\n if (!id) return null;\r\n return this.tabs().find((tab) => tab.id === id) ?? null;\r\n });\r\n\r\n selectTab(id: string): void {\r\n this.tabSelected.emit(id);\r\n }\r\n\r\n clickAction(advancedTabAction: AdvancedTabAction): void {\r\n if (advancedTabAction.disabled) return;\r\n this.tabAction.emit(advancedTabAction);\r\n }\r\n}\r\n","@let tabList = tabs();\r\n@let currentId = activeTabId();\r\n@let current = activeTab();\r\n\r\n<div class=\"tabs__bar\">\r\n @for (tab of tabList; track tab.id) {\r\n <div class=\"tab\" [class.tab--active]=\"currentId === tab.id\" (click)=\"selectTab(tab.id)\">\r\n <span>{{ tab.label }}</span>\r\n @if (tab.pill) {\r\n <span class=\"pill\" [class]=\"badgeClass()(tab.pill.tone)\">\r\n {{ tab.pill.label }}\r\n </span>\r\n }\r\n </div>\r\n }\r\n\r\n <div class=\"tabs__spacer\"></div>\r\n\r\n @if (current?.actions?.length) {\r\n <div class=\"tabs__actions\">\r\n @for (actions of current?.actions ?? []; track actions.id) {\r\n <button\r\n type=\"button\"\r\n class=\"btn btn--sm\"\r\n [class.btn--primary]=\"actions.tone === 'primary'\"\r\n [class.btn--danger]=\"actions.tone === 'danger'\"\r\n [class.btn--secondary]=\"!actions.tone || actions.tone === 'secondary'\"\r\n [disabled]=\"actions.disabled\"\r\n (click)=\"clickAction(actions)\"\r\n >\r\n {{ actions.label }}\r\n </button>\r\n }\r\n </div>\r\n }\r\n</div>\r\n","import { Component, input, output } from '@angular/core';\r\nimport { AdvancedCardContentVm, AdvancedTabAction } from '../../types';\r\nimport { CardSummaryComponent } from '../card-summary/card-summary.component';\r\nimport { CardTabContentComponent } from '../card-tab-content/card-tab-content.component';\r\nimport { CardTabsBarComponent } from '../card-tabs-bar/card-tabs-bar.component';\r\n\r\n@Component({\r\n selector: 'ac-advanced-card-content',\r\n imports: [CardSummaryComponent, CardTabsBarComponent, CardTabContentComponent],\r\n templateUrl: './advanced-card-content.component.html',\r\n styleUrls: [\r\n './advanced-card-content.component.css',\r\n '../../styles/advanced-card.shared.style.css',\r\n ],\r\n})\r\nexport class AdvancedCardContentComponent {\r\n viewModel = input.required<AdvancedCardContentVm>();\r\n\r\n badgeClass = input.required<(tone: any) => string>();\r\n\r\n tabSelected = output<string>();\r\n tabAction = output<AdvancedTabAction>();\r\n\r\n onSelect(id: string) {\r\n this.tabSelected.emit(id);\r\n }\r\n onAction(a: AdvancedTabAction) {\r\n this.tabAction.emit(a);\r\n }\r\n}\r\n","@let vm = viewModel();\r\n\r\n<div class=\"ac-content\" [class.ac-content--inline]=\"vm.layout === 'inline'\">\r\n <div class=\"summary ac-content__summary\">\r\n <ac-card-summary\r\n [blocks]=\"vm.summaryBlocks\"\r\n [layout]=\"vm.layout\"\r\n [collapsibleVertical]=\"vm.summaryToggle\"\r\n />\r\n </div>\r\n\r\n @if (vm.tabs.length) {\r\n <div class=\"tabs\">\r\n <ac-card-tabs-bar\r\n [tabs]=\"vm.tabs\"\r\n [activeTabId]=\"vm.activeTabId\"\r\n [badgeClass]=\"badgeClass()\"\r\n (tabSelected)=\"onSelect($event)\"\r\n (tabAction)=\"onAction($event)\"\r\n />\r\n\r\n <ac-card-tab-content\r\n [activeTab]=\"vm.activeTab\"\r\n [cardId]=\"vm.cardId\"\r\n [templateRef]=\"vm.templateRef\"\r\n />\r\n </div>\r\n } @else {\r\n <div class=\"acx__content\">\r\n <ng-content></ng-content>\r\n </div>\r\n }\r\n</div>\r\n","import { Component, input, output } from '@angular/core';\r\nimport {\r\n AdvancedCardConfig,\r\n AdvancedCardContentVm,\r\n AdvancedAction,\r\n AdvancedTabAction,\r\n} from '../../types';\r\nimport { CardHeaderComponent } from '../card-header/card-header.component';\r\nimport { AdvancedCardContentComponent } from '../advanced-card-content/advanced-card-content.component';\r\n\r\n@Component({\r\n selector: 'ac-advanced-card-overlay',\r\n imports: [CardHeaderComponent, AdvancedCardContentComponent],\r\n templateUrl: './advanced-card-overlay.component.html',\r\n styleUrls: [\r\n './advanced-card-overlay.component.css',\r\n '../../styles/advanced-card.shared.style.css',\r\n ],\r\n})\r\nexport class AdvancedCardOverlayComponent {\r\n config = input.required<AdvancedCardConfig>();\r\n mode = input.required<'drawer' | 'modal'>();\r\n closeOnBackdrop = input(true);\r\n\r\n badgeClass = input.required<(tone: any) => string>();\r\n viewModel = input.required<AdvancedCardContentVm>();\r\n\r\n actionClick = output<AdvancedAction>();\r\n close = output<void>();\r\n\r\n tabSelected = output<string>();\r\n tabAction = output<AdvancedTabAction>();\r\n\r\n onBackdrop(): void {\r\n if (this.closeOnBackdrop()) this.close.emit();\r\n }\r\n\r\n onAction(a: AdvancedAction) {\r\n this.actionClick.emit(a);\r\n }\r\n}\r\n","@let isModal = mode() === 'modal';\r\n\r\n<div class=\"overlay\" [class.modal-center]=\"isModal\" (click)=\"onBackdrop()\">\r\n <section\r\n class=\"panel\"\r\n [class.panel--drawer]=\"!isModal\"\r\n [class.panel--modal]=\"isModal\"\r\n (click)=\"$event.stopPropagation()\"\r\n >\r\n <ac-card-header\r\n variant=\"panel\"\r\n [title]=\"config().title\"\r\n [badge]=\"config().badge\"\r\n [actions]=\"config().actions\"\r\n [badgeClass]=\"badgeClass()\"\r\n (actionClick)=\"onAction($event)\"\r\n (close)=\"close.emit()\"\r\n />\r\n\r\n <div class=\"panel__body min-croll\">\r\n <ac-advanced-card-content\r\n [viewModel]=\"viewModel()\"\r\n [badgeClass]=\"badgeClass()\"\r\n (tabSelected)=\"tabSelected.emit($event)\"\r\n (tabAction)=\"tabAction.emit($event)\"\r\n >\r\n <ng-content></ng-content>\r\n </ac-advanced-card-content>\r\n </div>\r\n </section>\r\n</div>\r\n","import { Component, input, output } from '@angular/core';\r\nimport {\r\n AdvancedCardConfig,\r\n AdvancedCardContentVm,\r\n AdvancedAction,\r\n AdvancedTabAction,\r\n} from '../../types';\r\nimport { AdvancedCardContentComponent } from '../advanced-card-content/advanced-card-content.component';\r\nimport { CardHeaderComponent } from '../card-header/card-header.component';\r\n\r\n@Component({\r\n selector: 'ac-advanced-card-inline',\r\n imports: [AdvancedCardContentComponent, CardHeaderComponent],\r\n templateUrl: './advanced-card-inline.component.html',\r\n styleUrls: [\r\n './advanced-card-inline.component.css',\r\n '../../styles/advanced-card.shared.style.css',\r\n ],\r\n})\r\nexport class AdvancedCardInlineComponent {\r\n config = input.required<AdvancedCardConfig>();\r\n stickyHeader = input(false);\r\n fullWidth = input(false);\r\n\r\n badgeClass = input.required<(tone: any) => string>();\r\n viewModel = input.required<AdvancedCardContentVm>();\r\n\r\n actionClick = output<AdvancedAction>();\r\n close = output<void>();\r\n\r\n onAction(a: AdvancedAction) {\r\n this.actionClick.emit(a);\r\n }\r\n tabSelected = output<string>();\r\n tabAction = output<AdvancedTabAction>();\r\n}\r\n","<section class=\"ac ac--expanded\" [class.ac--full]=\"fullWidth()\">\r\n <ac-card-header\r\n variant=\"inline\"\r\n [title]=\"config().title\"\r\n [badge]=\"config().badge\"\r\n [actions]=\"config().actions\"\r\n [sticky]=\"stickyHeader()\"\r\n [badgeClass]=\"badgeClass()\"\r\n (actionClick)=\"onAction($event)\"\r\n (close)=\"close.emit()\"\r\n />\r\n\r\n <div class=\"acx__body\">\r\n <ac-advanced-card-content\r\n [viewModel]=\"viewModel()\"\r\n [badgeClass]=\"badgeClass()\"\r\n (tabSelected)=\"tabSelected.emit($event)\"\r\n (tabAction)=\"tabAction.emit($event)\"\r\n >\r\n <ng-content></ng-content>\r\n </ac-advanced-card-content>\r\n </div>\r\n</section>\r\n","import {\r\n Component,\r\n computed,\r\n contentChildren,\r\n effect,\r\n HostListener,\r\n input,\r\n output,\r\n signal,\r\n} from '@angular/core';\r\nimport {\r\n AdvancedAction,\r\n AdvancedCardConfig,\r\n AdvancedCardContentVm,\r\n AdvancedCardTab,\r\n AdvancedTabAction,\r\n AdvancedTone,\r\n} from './types';\r\nimport { AdvancedCardTemplateDirective } from './directives/advanced-card.template.directive';\r\nimport { CardCompactComponent } from './components/card-compact/card-compact.component';\r\nimport { AdvancedCardOverlayComponent } from './components/advanced-card-overlay/advanced-card-overlay.component';\r\nimport { AdvancedCardInlineComponent } from './components/advanced-card-inline/advanced-card-inline.component';\r\n\r\n@Component({\r\n selector: 'advanced-card',\r\n imports: [CardCompactComponent, AdvancedCardOverlayComponent, AdvancedCardInlineComponent],\r\n templateUrl: './advanced-card.html',\r\n styleUrls: ['./advanced-card.css', './styles/advanced-card.shared.style.css'],\r\n host: {\r\n '[class]': 'hostClass()',\r\n },\r\n})\r\nexport class AdvancedCard {\r\n config = input.required<AdvancedCardConfig>();\r\n\r\n fullWidthOnExpand = input(true);\r\n stickyHeader = input(true);\r\n closeOnEsc = input(true);\r\n\r\n // ===== Outputs\r\n expandedChange = output<boolean>();\r\n action = output<{ actionId: string; cardId: string }>();\r\n tabChanged = output<{ tabId: string; cardId: string }>();\r\n tabAction = output<{ tabId: string; actionId: string; cardId: string }>();\r\n\r\n // ===== Projected templates (via directive)\r\n private projectedTemplates = contentChildren(AdvancedCardTemplateDirective, {\r\n descendants: true,\r\n });\r\n\r\n // ===== State\r\n readonly expanded = signal(false);\r\n readonly activeTabId = signal<string | null>(null);\r\n\r\n // ===== Computeds\r\n readonly cardId = computed(() => this.config().id);\r\n readonly expandMode = computed(() => this.config().expandMode ?? 'inline');\r\n readonly closeOnBackdrop = computed(() => this.config().closeOnBackdrop ?? true);\r\n\r\n readonly isInline = computed(() => this.expandMode() === 'inline');\r\n readonly isDrawer = computed(() => this.expandMode() === 'drawer');\r\n readonly isModal = computed(() => this.expandMode() === 'modal');\r\n\r\n readonly hasHighlights = computed(() => (this.config().highlights?.length ?? 0) > 0);\r\n readonly hasSummaryBlocks = computed(() => (this.config().summaryBlocks?.length ?? 0) > 0);\r\n\r\n readonly tabs = computed<AdvancedCardTab[]>(() => this.config().tabs ?? []);\r\n\r\n readonly activeTab = computed<AdvancedCardTab | null>(() => {\r\n const id = this.activeTabId();\r\n if (!id) return null;\r\n return this.tabs().find((t) => t.id === id) ?? null;\r\n });\r\n\r\n readonly templateMap = computed(() => {\r\n const map = new Map<string, AdvancedCardTemplateDirective>();\r\n for (const dir of this.projectedTemplates()) {\r\n map.set(dir.templateId(), dir);\r\n }\r\n return map;\r\n });\r\n\r\n readonly density = computed(() => this.config().density ?? 'comfortable');\r\n readonly size = computed(() => this.config().size ?? 'md');\r\n\r\n readonly hostClass = computed(() => {\r\n return `ac-host ac-density--${this.density()} ac-size--${this.size()}`;\r\n });\r\n\r\n readonly activeTemplateRef = computed(() => {\r\n const template = this.getActiveTemplate();\r\n // tip: puede ser TemplateRef<any>; lo normalizamos\r\n return (template?.templateRef ?? null) as any;\r\n });\r\n\r\n readonly contentVm = computed<AdvancedCardContentVm>(() => ({\r\n cardId: this.cardId(),\r\n summaryBlocks: this.config().summaryBlocks,\r\n tabs: this.tabs(),\r\n activeTabId: this.activeTabId(),\r\n activeTab: this.activeTab(),\r\n templateRef: this.activeTemplateRef(),\r\n layout: this.config().contentLayout ?? 'stacked',\r\n summaryToggle: this.config().summaryToggle ?? false,\r\n }));\r\n\r\n // Effects\r\n notifyExpandenChangesEffect = effect(() => {\r\n this.expandedChange.emit(this.expanded());\r\n });\r\n\r\n initiActiveTabEffect = effect(() => {\r\n const tabs = this.tabs();\r\n if (!tabs.length) {\r\n this.activeTabId.set(null);\r\n return;\r\n }\r\n\r\n const preferred = this.config().defaultTabId;\r\n const current = this.activeTabId();\r\n const stillExists = current && tabs.some((t) => t.id === current);\r\n\r\n if (!stillExists) {\r\n const next =\r\n preferred && tabs.some((t) => t.id === preferred) ? preferred : (tabs[0]?.id ?? null);\r\n\r\n this.activeTabId.set(next);\r\n }\r\n });\r\n\r\n // ===== Actions\r\n toggleExpand(): void {\r\n this.expanded.update((v) => !v);\r\n }\r\n\r\n expand(): void {\r\n if (!this.expanded()) this.expanded.set(true);\r\n }\r\n\r\n collapse(): void {\r\n if (this.expanded()) this.expanded.set(false);\r\n }\r\n\r\n onActionClick(a: AdvancedAction): void {\r\n if (a.disabled) return;\r\n this.action.emit({ actionId: a.id, cardId: this.cardId() });\r\n }\r\n\r\n // ===== Tabs\r\n selectTab(tabId: string): void {\r\n if (this.activeTabId() === tabId) return;\r\n this.activeTabId.set(tabId);\r\n this.tabChanged.emit({ tabId, cardId: this.cardId() });\r\n }\r\n\r\n onTabActionClick(tab: AdvancedCardTab, a: AdvancedTabAction): void {\r\n if (a.disabled) return;\r\n this.tabAction.emit({ tabId: tab.id, actionId: a.id, cardId: this.cardId() });\r\n }\r\n\r\n getActiveTemplate(): AdvancedCardTemplateDirective | null {\r\n const at = this.activeTab();\r\n if (!at || at.kind !== 'template' || !at.templateId) return null;\r\n return this.templateMap().get(at.templateId) ?? null;\r\n }\r\n\r\n // ===== Styling helpers\r\n badgeClass(tone: AdvancedTone | undefined): string {\r\n switch (tone) {\r\n case 'success':\r\n return 'badge badge--success';\r\n case 'warning':\r\n return 'badge badge--warning';\r\n case 'danger':\r\n return 'badge badge--danger';\r\n case 'primary':\r\n return 'badge badge--primary';\r\n default:\r\n return 'badge badge--neutral';\r\n }\r\n }\r\n\r\n // ===== Keyboard\r\n @HostListener('document:keydown', ['$event'])\r\n onKeydown(ev: KeyboardEvent): void {\r\n if (!this.closeOnEsc()) return;\r\n if (ev.key === 'Escape') this.collapse();\r\n }\r\n\r\n onBackdropClick(): void {\r\n if (!this.closeOnBackdrop()) return;\r\n this.collapse();\r\n }\r\n}\r\n","<div class=\"ac__card\">\r\n <lib-card-compact\r\n [configuration]=\"config()\"\r\n [expanded]=\"expanded()\"\r\n [badgeClass]=\"badgeClass.bind(this)\"\r\n (expand)=\"expand()\"\r\n />\r\n\r\n @let mode = expandMode();\r\n\r\n @if (expanded()) {\r\n @if (mode === 'inline') {\r\n <ac-advanced-card-inline\r\n [config]=\"config()\"\r\n [stickyHeader]=\"stickyHeader()\"\r\n [fullWidth]=\"fullWidthOnExpand()\"\r\n [badgeClass]=\"badgeClass.bind(this)\"\r\n [viewModel]=\"contentVm()\"\r\n (actionClick)=\"onActionClick($event)\"\r\n (close)=\"collapse()\"\r\n (tabSelected)=\"selectTab($event)\"\r\n (tabAction)=\"onTabActionClick(activeTab()!, $event)\"\r\n >\r\n <ng-content></ng-content>\r\n </ac-advanced-card-inline>\r\n } @else {\r\n <ac-advanced-card-overlay\r\n [config]=\"config()\"\r\n [mode]=\"mode === 'modal' ? 'modal' : 'drawer'\"\r\n [closeOnBackdrop]=\"closeOnBackdrop()\"\r\n [badgeClass]=\"badgeClass.bind(this)\"\r\n [viewModel]=\"contentVm()\"\r\n (actionClick)=\"onActionClick($event)\"\r\n (close)=\"collapse()\"\r\n (tabSelected)=\"selectTab($event)\"\r\n (tabAction)=\"onTabActionClick(activeTab()!, $event)\"\r\n >\r\n <ng-content></ng-content>\r\n </ac-advanced-card-overlay>\r\n }\r\n }\r\n</div>\r\n\r\n<div class=\"ac__projected-templates\" aria-hidden=\"true\">\r\n <ng-content select=\"ng-template[advancedCardTemplate]\"></ng-content>\r\n</div>\r\n","import { Component, computed, input, signal } from '@angular/core';\r\nimport { SimpleHaders, SortDirection } from './types';\r\n\r\n@Component({\r\n selector: 'simple-table',\r\n imports: [],\r\n templateUrl: './simple-table.html',\r\n styleUrl: './simple-table.css',\r\n})\r\nexport class SimpleTable<T> {\r\n headers = input.required<SimpleHaders<T>[]>();\r\n data = input<T[]>([]);\r\n\r\n sortState = signal<{ key: keyof T | null; direction: SortDirection }>({\r\n key: null,\r\n direction: 'none',\r\n });\r\n\r\n sortedData = computed(() => {\r\n const { key, direction } = this.sortState();\r\n const currentData = [...this.data()];\r\n\r\n if (!key || direction === 'none') return currentData;\r\n\r\n return currentData.sort((a, b) => {\r\n const valueA = a[key];\r\n const valueB = b[key];\r\n\r\n if (valueA == null && valueB == null) return 0;\r\n if (valueA == null) return 1;\r\n if (valueB == null) return -1;\r\n\r\n const numberA = Number(valueA);\r\n const numberB = Number(valueB);\r\n if (!isNaN(numberA) && !isNaN(numberB)) {\r\n return direction === 'asc' ? numberA - numberB : numberB - numberA;\r\n }\r\n\r\n if (valueA instanceof Date && valueB instanceof Date) {\r\n return direction === 'asc'\r\n ? valueA.getTime() - valueB.getTime()\r\n : valueB.getTime() - valueA.getTime();\r\n }\r\n\r\n const aStr = String(valueA);\r\n const bStr = String(valueB);\r\n\r\n return direction === 'asc' ? aStr.localeCompare(bStr) : bStr.localeCompare(aStr);\r\n });\r\n });\r\n\r\n sortBy(key: keyof T) {\r\n const current = this.sortState();\r\n\r\n if (current.key !== key) {\r\n this.sortState.set({ key, direction: 'asc' });\r\n return;\r\n }\r\n\r\n const next: Record<SortDirection, SortDirection> = {\r\n none: 'asc',\r\n asc: 'desc',\r\n desc: 'none',\r\n };\r\n\r\n this.sortState.set({ key, direction: next[current.direction] });\r\n }\r\n}\r\n","<div class=\"table-item\">\r\n <table class=\"simple-table\">\r\n <thead>\r\n <tr>\r\n @for (header of headers(); track header.key) {\r\n <th\r\n scope=\"col\"\r\n class=\"sortable\"\r\n [class.active]=\"sortState().key === header.key && sortState().direction !== 'none'\"\r\n (click)=\"sortBy(header.key)\"\r\n >\r\n <span class=\"th-content\">\r\n <span class=\"th-label\">{{ header.label }}</span>\r\n\r\n <!-- icono -->\r\n <span class=\"sort-icon\" aria-hidden=\"true\">\r\n @if (sortState().key !== header.key || sortState().direction === 'none') {\r\n <!-- doble flecha (neutral) -->\r\n <svg\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"24\"\r\n height=\"24\"\r\n viewBox=\"0 0 24 24\"\r\n >\r\n <rect width=\"24\" height=\"24\" fill=\"none\" />\r\n <path\r\n fill=\"currentColor\"\r\n d=\"M12.53 3.47a.75.75 0 0 0-1.06 0l-4 4a.75.75 0 0 0 0 1.06h9.06a.75.75 0 0 0 0-1.06zm4 13.06a.75.75 0 0 0 0-1.06H7.47a.75.75 0 0 0 0 1.06l4 4a.75.75 0 0 0 1.06 0z\"\r\n />\r\n </svg>\r\n } @else if (sortState().direction === 'asc') {\r\n <!-- flecha arriba -->\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\">\r\n <rect width=\"24\" height=\"24\" fill=\"none\" />\r\n <path\r\n fill=\"currentColor\"\r\n d=\"M8.2 14q-.225 0-.362-.15T7.7 13.5q0-.05.15-.35l3.625-3.625q.125-.125.25-.175T12 9.3t.275.05t.25.175l3.625 3.625q.075.075.113.163t.037.187q0 .2-.137.35T15.8 14z\"\r\n />\r\n </svg>\r\n } @else {\r\n <!-- flecha abajo -->\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\">\r\n <rect width=\"24\" height=\"24\" fill=\"none\" />\r\n <path\r\n fill=\"currentColor\"\r\n d=\"M11.475 14.475L7.85 10.85q-.075-.075-.112-.162T7.7 10.5q0-.2.138-.35T8.2 10h7.6q.225 0 .363.15t.137.35q0 .05-.15.35l-3.625 3.625q-.125.125-.25.175T12 14.7t-.275-.05t-.25-.175\"\r\n />\r\n </svg>\r\n }\r\n </span>\r\n </span>\r\n </th>\r\n }\r\n </tr>\r\n </thead>\r\n\r\n <tbody>\r\n @for (row of sortedData(); track row) {\r\n <tr>\r\n @for (header of headers(); track header.key) {\r\n <td [attr.data-label]=\"header.label\">\r\n {{ row[header.key] }}\r\n </td>\r\n }\r\n </tr>\r\n } @empty {\r\n <tr>\r\n <td class=\"empty\" [attr.colspan]=\"headers().length\">Datos no localizados.</td>\r\n </tr>\r\n }\r\n </tbody>\r\n </table>\r\n</div>\r\n","import { ChangeDetectionStrategy, Component, input, output } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\n\r\n@Component({\r\n selector: 'table-modal-image',\r\n standalone: true,\r\n imports: [CommonModule],\r\n templateUrl: './table-modal-image.component.html',\r\n styleUrls: ['./table-modal-image.component.css'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class TableModalImageComponent {\r\n readonly open = input<boolean>(false);\r\n readonly src = input<string>('');\r\n readonly alt = input<string>('');\r\n\r\n readonly close = output<void>();\r\n\r\n onClose() {\r\n this.close.emit();\r\n }\r\n}\r\n","@if (open()) {\r\n <div class=\"dt-modal-backdrop\" (click)=\"onClose()\">\r\n <div class=\"dt-modal\" (click)=\"$event.stopPropagation()\">\r\n <div class=\"dt-modal-header\">\r\n <span class=\"dt-modal-title\">{{ alt() }}</span>\r\n <button type=\"button\" class=\"dt-btn\" (click)=\"onClose()\">Cerrar</button>\r\n </div>\r\n\r\n <div class=\"dt-modal-body\">\r\n <img class=\"dt-modal-img\" [src]=\"src()\" [alt]=\"alt()\" />\r\n </div>\r\n </div>\r\n </div>\r\n}\r\n","export type CellDataType =\r\n | 'string'\r\n | 'integer'\r\n | 'decimal'\r\n | 'currency'\r\n | 'date'\r\n | 'datetime'\r\n | 'boolean'\r\n | 'image'\r\n | 'status'\r\n | 'link'\r\n | 'custom'\r\n | 'actions';\r\n\r\nexport type CellSize = 'XS' | 'SM' | 'MD' | 'LG' | 'XL' | 'AUTO-XL' | 'AUTO';\r\nexport type TextAlign = 'left' | 'center' | 'right';\r\n\r\nexport type RowId = string | number;\r\nexport type PagerItem = number | '…';\r\n\r\nexport type Icon = 'edit' | 'delete' | 'view' | 'copy';\r\n\r\nexport interface TableColumn<T = unknown> {\r\n key: string;\r\n label: string;\r\n type: CellDataType;\r\n size?: CellSize;\r\n align?: TextAlign;\r\n sortable?: boolean;\r\n filterable?: boolean;\r\n hidden?: boolean;\r\n\r\n wrap?: boolean;\r\n\r\n valueGetter?: (row: T) => unknown;\r\n formatter?: (value: unknown, row: T) => string;\r\n actions?: TableAction<T>[];\r\n options?: {\r\n currency?: 'MXN';\r\n dateFormat?: 'short' | 'medium' | 'long';\r\n dateTimeFormat?: 'short' | 'medium' | 'long';\r\n image?: {\r\n hidden?: boolean;\r\n openInModal?: boolean;\r\n showFull?: boolean;\r\n alt?: (row: T) => string;\r\n };\r\n status?: {\r\n classMap?: Record<string, string>;\r\n };\r\n link?: {\r\n hrefGetter?: (row: T) => string;\r\n labelGetter?: (row: T) => string;\r\n target?: '_blank' | '_self';\r\n };\r\n };\r\n}\r\n\r\nexport interface TableConfig {\r\n globalSearch?: boolean;\r\n columnFilters?: boolean;\r\n selectable?: boolean;\r\n selectionMode?: 'single' | 'multiple';\r\n pagination?: { enabled: boolean; pageSize: number; pageSizeOptions?: number[]; mode?: 'client' | 'server' };\r\n scroll?: { mode: 'none' | 'infinite'; heightPx?: number; batchSize?: number };\r\n fixedRowCount?: number;\r\n emptyText?: string;\r\n rowIdKey?: string;\r\n rowIdGetter?: (row: any) => string | number;\r\n globalSearchVisibleOnly?: boolean;\r\n}\r\n\r\nexport interface TableSortState {\r\n key: string;\r\n dir: 'asc' | 'desc';\r\n}\r\n\r\nexport interface TablePaginationChange {\r\n page: number;\r\n pageSize: number;\r\n}\r\n\r\nexport type ActionVariant = 'default' | 'danger';\r\nexport type ActionRender = 'icon' | 'text';\r\n\r\nexport interface TableAction<T> {\r\n id: string;\r\n label: string;\r\n icon?: Icon | string;\r\n tooltip?: string;\r\n variant?: ActionVariant;\r\n render?: ActionRender;\r\n visible?: (row: T) => boolean;\r\n disabled?: (row: T) => boolean;\r\n confirm?: { title?: string; message: string };\r\n}\r\n\r\nexport interface TableActionEvent<T> {\r\n actionId: string;\r\n row: T;\r\n}\r\n\r\nexport const SVG_ICONS: Record<string, string> = {\r\n edit: '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"><path fill=\"currentColor\" d=\"M5 21q-.825 0-1.412-.587T3 19V5q0-.825.588-1.412T5 3h8.925l-2 2H5v14h14v-6.95l2-2V19q0 .825-.587 1.413T19 21zm4-6v-4.25l9.175-9.175q.3-.3.675-.45t.75-.15q.4 0 .763.15t.662.45L22.425 3q.275.3.425.663T23 4.4t-.137.738t-.438.662L13.25 15zM21.025 4.4l-1.4-1.4zM11 13h1.4l5.8-5.8l-.7-.7l-.725-.7L11 11.575zm6.5-6.5l-.725-.7zl.7.7z\"/></svg>',\r\n delete:\r\n '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"><path fill=\"currentColor\" d=\"M7 21q-.825 0-1.412-.587T5 19V6H4V4h5V3h6v1h5v2h-1v13q0 .825-.587 1.413T17 21zM17 6H7v13h10zM9 17h2V8H9zm4 0h2V8h-2zM7 6v13z\"/></svg>',\r\n open: '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 14 14\"><g fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1\"><path d=\"M7 3.625c-4.187 0-5.945 3.766-5.945 3.844S2.813 11.312 7 11.312s5.945-3.765 5.945-3.843S11.187 3.625 7 3.625M2.169 5.813L.61 4.252m4.525-.354L4.5 1.843m7.331 3.97l1.559-1.56m-4.525-.355L9.5 1.843\"/><path d=\"M5.306 7.081a1.738 1.738 0 1 0 3.388.776a1.738 1.738 0 1 0-3.388-.776\"/></g></svg>',\r\n copy: '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"><path fill=\"currentColor\" d=\"M9 18q-.825 0-1.412-.587T7 16V4q0-.825.588-1.412T9 2h9q.825 0 1.413.588T20 4v12q0 .825-.587 1.413T18 18zm-4 4q-.825 0-1.412-.587T3 20V6h2v14h11v2z\"/></svg>',\r\n};\r\n","\r\n/**\r\n * Base information for a time zone associated with a country or region.\r\n * Intended for catalogs, dropdowns, and Intl-based formatting.\r\n */\r\nexport interface TimeZoneInfo {\r\n /**\r\n * Official IANA time zone identifier.\r\n * Used by Intl.DateTimeFormat and backend time handling.\r\n * Example: 'America/Mexico_City', 'Europe/Madrid'.\r\n */\r\n timeZone: string;\r\n\r\n /**\r\n * Country or region name.\r\n * Intended for user-friendly display in UI components.\r\n * Example: 'Mexico', 'United States (Eastern)'.\r\n */\r\n name: string;\r\n\r\n /**\r\n * ISO 4217 currency code used in the country or region.\r\n * Required for monetary formatting with Intl.NumberFormat.\r\n * Example: 'MXN', 'USD', 'EUR'.\r\n */\r\n currency: string;\r\n\r\n /**\r\n * Locale identifier following the BCP-47 standard.\r\n * Determines language, number formatting, and date conventions.\r\n * Example: 'es-MX', 'en-US', 'fr-FR'.\r\n */\r\n locale: string;\r\n\r\n /**\r\n * UTC offset of the time zone expressed in hours.\r\n * This value represents the standard offset and does not account for DST.\r\n * Example: -6, -5, +1, +5.5.\r\n */\r\n utcOffset: number;\r\n\r\n /**\r\n * City name.\r\n * Used as a human-readable label in dropdowns or selectors.\r\n * Example: 'Mexico City', 'New York', 'London'.\r\n */\r\n city: string;\r\n}\r\n\r\nexport const TIME_ZONES = {\r\n // AFRICA\r\n CAIRO: { city: 'Cairo', timeZone: 'Africa/Cairo', name: 'Egypt', currency: 'EGP', locale: 'ar-EG', utcOffset: +2 },\r\n CASABLANCA: { city: 'Casablanca', timeZone: 'Africa/Casablanca', name: 'Morocco', currency: 'MAD', locale: 'ar-MA', utcOffset: 0 },\r\n JOHANNESBURG: { city: 'Johannesburg', timeZone: 'Africa/Johannesburg', name: 'South Africa', currency: 'ZAR', locale: 'en-ZA', utcOffset: +2 },\r\n\r\n // AMERICA\r\n BUENOS_AIRES: { city: 'Buenos Aires', timeZone: 'America/Argentina/Buenos_Aires', name: 'Argentina', currency: 'ARS', locale: 'es-AR', utcOffset: -3 },\r\n SAO_PAULO: { city: 'Sao Paulo', timeZone: 'America/Sao_Paulo', name: 'Brazil', currency: 'BRL', locale: 'pt-BR', utcOffset: -3 },\r\n TORONTO: { city: 'Toronto', timeZone: 'America/Toronto', name: 'Canada', currency: 'CAD', locale: 'en-CA', utcOffset: -5 },\r\n VANCOUVER: { city: 'Vancouver', timeZone: 'America/Vancouver', name: 'Canada (Pacific)', currency: 'CAD', locale: 'en-CA', utcOffset: -8 },\r\n BOGOTA: { city: 'Bogota', timeZone: 'America/Bogota', name: 'Colombia', currency: 'COP', locale: 'es-CO', utcOffset: -5 },\r\n CANCUN: { city: 'Cancun', timeZone: 'America/Cancun', name: 'Mexico (Quintana Roo)', currency: 'MXN', locale: 'es-MX', utcOffset: -5 },\r\n MEXICO_CITY: { city: 'Mexico City', timeZone: 'America/Mexico_City', name: 'Mexico', currency: 'MXN', locale: 'es-MX', utcOffset: -6 },\r\n TIJUANA: { city: 'Tijuana', timeZone: 'America/Tijuana', name: 'Mexico (Pacific)', currency: 'MXN', locale: 'es-MX', utcOffset: -8 },\r\n LIMA: { city: 'Lima', timeZone: 'America/Lima', name: 'Peru', currency: 'PEN', locale: 'es-PE', utcOffset: -5 },\r\n SANTIAGO: { city: 'Santiago', timeZone: 'America/Santiago', name: 'Chile', currency: 'CLP', locale: 'es-CL', utcOffset: -4 },\r\n CHICAGO: { city: 'Chicago', timeZone: 'America/Chicago', name: 'United States (Central)', currency: 'USD', locale: 'en-US', utcOffset: -6 },\r\n DENVER: { city: 'Denver', timeZone: 'America/Denver', name: 'United States (Mountain)', currency: 'USD', locale: 'en-US', utcOffset: -7 },\r\n LOS_ANGELES: { city: 'Los Angeles', timeZone: 'America/Los_Angeles', name: 'United States (Pacific)', currency: 'USD', locale: 'en-US', utcOffset: -8 },\r\n NEW_YORK: { city: 'New York', timeZone: 'America/New_York', name: 'United States (Eastern)', currency: 'USD', locale: 'en-US', utcOffset: -5 },\r\n\r\n // ASIA\r\n SHANGHAI: { city: 'Shanghai', timeZone: 'Asia/Shanghai', name: 'China', currency: 'CNY', locale: 'zh-CN', utcOffset: +8 },\r\n KOLKATA: { city: 'Kolkata', timeZone: 'Asia/Kolkata', name: 'India', currency: 'INR', locale: 'en-IN', utcOffset: +5.5 },\r\n TOKYO: { city: 'Tokyo', timeZone: 'Asia/Tokyo', name: 'Japan', currency: 'JPY', locale: 'ja-JP', utcOffset: +9 },\r\n SEOUL: { city: 'Seoul', timeZone: 'Asia/Seoul', name: 'South Korea', currency: 'KRW', locale: 'ko-KR', utcOffset: +9 },\r\n DUBAI: { city: 'Dubai', timeZone: 'Asia/Dubai', name: 'United Arab Emirates', currency: 'AED', locale: 'ar-AE', utcOffset: +4 },\r\n\r\n // EUROPE\r\n BERLIN: { city: 'Berlin', timeZone: 'Europe/Berlin', name: 'Germany', currency: 'EUR', locale: 'de-DE', utcOffset: +1 },\r\n PARIS: { city: 'Paris', timeZone: 'Europe/Paris', name: 'France', currency: 'EUR', locale: 'fr-FR', utcOffset: +1 },\r\n ROME: { city: 'Rome', timeZone: 'Europe/Rome', name: 'Italy', currency: 'EUR', locale: 'it-IT', utcOffset: +1 },\r\n MADRID: { city: 'Madrid', timeZone: 'Europe/Madrid', name: 'Spain', currency: 'EUR', locale: 'es-ES', utcOffset: +1 },\r\n ZURICH: { city: 'Zurich', timeZone: 'Europe/Zurich', name: 'Switzerland', currency: 'CHF', locale: 'de-CH', utcOffset: +1 },\r\n LONDON: { city: 'London', timeZone: 'Europe/London', name: 'United Kingdom', currency: 'GBP', locale: 'en-GB', utcOffset: 0 },\r\n\r\n // OCEANIA\r\n SYDNEY: { city: 'Sydney', timeZone: 'Australia/Sydney', name: 'Australia', currency: 'AUD', locale: 'en-AU', utcOffset: +10 },\r\n AUCKLAND: { city: 'Auckland', timeZone: 'Pacific/Auckland', name: 'New Zealand', currency: 'NZD', locale: 'en-NZ', utcOffset: +12 },\r\n};\r\n\r\n","import { TableI18n, TableLang } from '../types/table-i18n.type';\r\n\r\nexport const TABLE_I18N_EN: TableI18n = {\r\n noData: 'No data available',\r\n rowsPerPage: 'Rows per page',\r\n search: 'Search',\r\n clear: 'Clear',\r\n actions: 'Actions',\r\n previous: 'Previous',\r\n next: 'Next',\r\n showing: (from, to, total) => `Showing ${from}–${to} of ${total}`,\r\n filter: 'Filter by',\r\n empty: 'No results found.',\r\n seeImage: 'See image',\r\n};\r\n\r\nexport const TABLE_I18N_ES: TableI18n = {\r\n noData: 'No hay información disponible',\r\n rowsPerPage: 'Filas por página',\r\n search: 'Buscar',\r\n clear: 'Limpiar',\r\n actions: 'Acciones',\r\n previous: 'Anterior',\r\n next: 'Siguiente',\r\n showing: (from: number, to: number, total: number) => `Mostrando ${from}–${to} de ${total}`,\r\n filter: 'Filtrar por',\r\n empty: 'No se encontraron resultados.',\r\n seeImage: 'Ver imagen',\r\n};\r\n\r\nexport const TABLE_I18N_BY_LANG: Record<TableLang, TableI18n> = {\r\n EN: TABLE_I18N_EN,\r\n ES: TABLE_I18N_ES,\r\n};\r\n\r\nexport const TABLE_LANG_DEFAULT: TableLang = 'EN';\r\n\r\nexport const TABLE_I18N_DEFAULT: TableI18n = TABLE_I18N_EN;\r\n","import { CommonModule } from '@angular/common';\r\nimport { ChangeDetectionStrategy, Component, computed, inject, input, output } from '@angular/core';\r\nimport {\r\n TableColumn,\r\n TableConfig,\r\n TableSortState,\r\n RowId,\r\n TableAction,\r\n TableActionEvent,\r\n SVG_ICONS,\r\n} from '../../types/table.types';\r\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\r\nimport { TimeZoneInfo, TIME_ZONES } from '../../types/time-zone.types';\r\nimport { TABLE_I18N_DEFAULT } from '../../constants/table-i18n.constants';\r\nimport { TableI18n } from '../../types/table-i18n.type';\r\n\r\n@Component({\r\n selector: 'table-grid',\r\n standalone: true,\r\n imports: [CommonModule],\r\n templateUrl: './table-grid.component.html',\r\n styleUrls: ['./table-grid.component.css'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class TableGridComponent<T extends Record<string, any>> {\r\n private sanitizer = inject(DomSanitizer);\r\n\r\n // Inputs\r\n readonly config = input<TableConfig>({});\r\n readonly columns = input<TableColumn<T>[]>([]);\r\n readonly rows = input<T[]>([]);\r\n readonly gridTemplateColumns = input<string>('');\r\n readonly minTableWidth = input<number>(0);\r\n readonly columnQueries = input<Record<string, string>>({});\r\n readonly sortState = input<TableSortState | null>(null);\r\n readonly selectedIdsSet = input<Set<RowId>>(new Set<RowId>());\r\n readonly timeZone = input<TimeZoneInfo>(TIME_ZONES.MEXICO_CITY);\r\n readonly i18n = input<TableI18n>(TABLE_I18N_DEFAULT);\r\n\r\n // Outputs\r\n readonly headerSort = output<TableColumn<T>>();\r\n readonly columnQueryChange = output<{ key: string; value: string }>();\r\n readonly rowClick = output<T>();\r\n readonly toggleRow = output<T>();\r\n readonly toggleAllOnPage = output<void>();\r\n readonly openImage = output<{ src: string; alt: string }>();\r\n readonly actionClick = output<TableActionEvent<T>>();\r\n readonly bodyScroll = output<Event>();\r\n\r\n // Derived\r\n readonly showSelectionColumn = computed(() => !!this.config().selectable);\r\n\r\n // Helpers\r\n private getRowIdKey(): string {\r\n return this.config().rowIdKey ?? 'id';\r\n }\r\n\r\n getRowId(row: T): RowId {\r\n const getter = this.config().rowIdGetter;\r\n if (getter) return getter(row);\r\n const key = this.getRowIdKey();\r\n return row?.[key];\r\n }\r\n\r\n isSelected(row: T): boolean {\r\n return this.selectedIdsSet().has(this.getRowId(row));\r\n }\r\n\r\n isAllSelectedOnPage(): boolean {\r\n const rows = this.rows();\r\n if (!rows.length) return false;\r\n const set = this.selectedIdsSet();\r\n return rows.every((r) => set.has(this.getRowId(r)));\r\n }\r\n\r\n getSortIcon(colKey: string): string {\r\n const sorted = this.sortState();\r\n if (!sorted || sorted.key !== colKey) return '↕';\r\n return sorted.dir === 'asc' ? '↑' : '↓';\r\n }\r\n\r\n getDisplayText(row: T, column: TableColumn<T>): string {\r\n const value = this.getCellValue(row, column);\r\n\r\n if (column.formatter) {\r\n try {\r\n return column.formatter(value, row);\r\n } catch {\r\n return '';\r\n }\r\n }\r\n\r\n switch (column.type) {\r\n case 'string':\r\n return value == null ? '' : String(value);\r\n\r\n case 'integer':\r\n case 'decimal':\r\n case 'currency': {\r\n const currencyValue = Number(value);\r\n if (!Number.isFinite(currencyValue)) return value == null ? '' : String(value);\r\n if (column.type === 'currency') {\r\n try {\r\n return new Intl.NumberFormat(this.timeZone().locale, {\r\n style: 'currency',\r\n currency: column.options?.currency ?? this.timeZone().currency,\r\n maximumFractionDigits: 2,\r\n }).format(currencyValue);\r\n } catch {\r\n return String(currencyValue);\r\n }\r\n }\r\n return String(currencyValue);\r\n }\r\n\r\n case 'date':\r\n case 'datetime': {\r\n const dateTime = value instanceof Date ? value : new Date(String(value));\r\n if (Number.isNaN(dateTime.getTime())) return value == null ? '' : String(value);\r\n\r\n const locale = this.timeZone().locale;\r\n return column.type === 'datetime'\r\n ? dateTime.toLocaleString(locale)\r\n : dateTime.toLocaleDateString(locale);\r\n }\r\n\r\n case 'boolean':\r\n return value ? 'Sí' : 'No';\r\n\r\n default:\r\n return value == null ? '' : String(value);\r\n }\r\n }\r\n\r\n getImageSrc(row: T, col: TableColumn<T>): string {\r\n return this.getCellString(row, col);\r\n }\r\n\r\n getImageAlt(row: T, col: TableColumn<T>): string {\r\n const altFn = col.options?.image?.alt;\r\n return altFn ? altFn(row) : col.label;\r\n }\r\n\r\n getStatusClass(row: T, col: TableColumn<T>): string {\r\n const raw = this.getCellString(row, col);\r\n return col.options?.status?.classMap?.[raw] ?? '';\r\n }\r\n\r\n getLinkHref(row: T, col: TableColumn<T>): string {\r\n const getter = col.options?.link?.hrefGetter;\r\n return getter ? getter(row) : this.getCellString(row, col);\r\n }\r\n\r\n getLinkLabel(row: T, col: TableColumn<T>): string {\r\n const getter = col.options?.link?.labelGetter;\r\n if (getter) return getter(row);\r\n const cellValue = this.getCellValue(row, col);\r\n return cellValue == null ? '' : String(cellValue);\r\n }\r\n\r\n getColumnActions(col: TableColumn<T>): TableAction<T>[] {\r\n return col.actions ?? [];\r\n }\r\n\r\n isActionVisible(action: TableAction<T>, row: T): boolean {\r\n return action.visible ? action.visible(row) : true;\r\n }\r\n\r\n isActionDisabled(action: TableAction<T>, row: T): boolean {\r\n return action.disabled ? action.disabled(row) : false;\r\n }\r\n\r\n emitAction(action: TableAction<T>, row: T, event: Event) {\r\n event.stopPropagation();\r\n this.actionClick.emit({ actionId: action.id, row });\r\n }\r\n\r\n getActionSvg(action: TableAction<T>): SafeHtml | string {\r\n const key = (action.icon ?? action.id).toLowerCase();\r\n return this.sanitizer.bypassSecurityTrustHtml(SVG_ICONS[key] ?? '*');\r\n }\r\n\r\n onHeaderClickSort(column: TableColumn<T>) {\r\n if (!column.sortable) return;\r\n this.headerSort.emit(column);\r\n }\r\n\r\n onColumnQueryInput(key: string, value: string) {\r\n this.columnQueryChange.emit({ key, value });\r\n }\r\n\r\n onRowClick(row: T) {\r\n this.rowClick.emit(row);\r\n }\r\n\r\n onToggleRow(row: T) {\r\n this.toggleRow.emit(row);\r\n }\r\n\r\n onToggleAllOnPage() {\r\n this.toggleAllOnPage.emit();\r\n }\r\n\r\n onOpenImage(src: string, alt: string, event: Event) {\r\n event.stopPropagation();\r\n this.openImage.emit({ src, alt });\r\n }\r\n\r\n onBodyScroll(event: Event) {\r\n this.bodyScroll.emit(event);\r\n }\r\n\r\n private getCellValue(row: T, col: TableColumn<T>): unknown {\r\n if (col.valueGetter) {\r\n try {\r\n return col.valueGetter(row);\r\n } catch {\r\n return null;\r\n }\r\n }\r\n return row?.[col.key];\r\n }\r\n\r\n private getCellString(row: T, col: TableColumn<T>): string {\r\n const value = this.getCellValue(row, col);\r\n return value == null ? '' : String(value);\r\n }\r\n}\r\n","<div class=\"dt-grid dt-xscroll\">\r\n <div [style.minWidth.px]=\"minTableWidth()\">\r\n <!-- Header -->\r\n <div class=\"dt-row dt-header\" [style.gridTemplateColumns]=\"gridTemplateColumns()\">\r\n @if (showSelectionColumn()) {\r\n <div class=\"dt-cell dt-cell--header dt-cell--center dt-select-col\">\r\n @if ((config().selectionMode ?? 'multiple') === 'multiple') {\r\n <input\r\n type=\"checkbox\"\r\n [checked]=\"isAllSelectedOnPage()\"\r\n (change)=\"onToggleAllOnPage()\"\r\n aria-label=\"Select all\"\r\n />\r\n }\r\n </div>\r\n }\r\n\r\n @for (col of columns(); track col.key) {\r\n <div\r\n class=\"dt-cell dt-cell--header\"\r\n [class.dt-cell--sortable]=\"!!col.sortable\"\r\n [attr.data-align]=\"col.align ?? 'left'\"\r\n (click)=\"onHeaderClickSort(col)\"\r\n role=\"button\"\r\n tabindex=\"0\"\r\n >\r\n <span class=\"dt-header-label\">{{ col.label }}</span>\r\n @if (col.sortable) {\r\n <span class=\"dt-sort\">{{ getSortIcon(col.key) }}</span>\r\n }\r\n </div>\r\n }\r\n </div>\r\n\r\n <!-- Filters row (under header) -->\r\n @if (config().columnFilters) {\r\n <div class=\"dt-row dt-filters\" [style.gridTemplateColumns]=\"gridTemplateColumns()\">\r\n @if (showSelectionColumn()) {\r\n <div class=\"dt-cell dt-cell--filter dt-select-col\"></div>\r\n }\r\n\r\n @for (col of columns(); track col.key) {\r\n <div class=\"dt-cell dt-cell--filter\" [attr.data-align]=\"col.align ?? 'left'\">\r\n @if (col.filterable) {\r\n <input\r\n type=\"text\"\r\n [value]=\"columnQueries()[col.key] ?? null\"\r\n (input)=\"onColumnQueryInput(col.key, $any($event.target).value)\"\r\n [placeholder]=\"i18n().filter + ' ' + col.label\"\r\n />\r\n }\r\n </div>\r\n }\r\n </div>\r\n }\r\n\r\n <!-- Body -->\r\n <div\r\n class=\"dt-body\"\r\n [style.maxHeight.px]=\"config().scroll?.heightPx ?? null\"\r\n (scroll)=\"onBodyScroll($event)\"\r\n >\r\n @if (rows().length === 0) {\r\n <div class=\"dt-empty\">\r\n {{ config().emptyText ?? i18n().empty }}\r\n </div>\r\n } @else {\r\n @for (row of rows(); track getRowId(row)) {\r\n <div class=\"dt-row dt-data\" [style.gridTemplateColumns]=\"gridTemplateColumns()\">\r\n @if (showSelectionColumn()) {\r\n <div class=\"dt-cell dt-cell--center dt-select-col\">\r\n <input\r\n type=\"checkbox\"\r\n [checked]=\"isSelected(row)\"\r\n (change)=\"onToggleRow(row)\"\r\n aria-label=\"Seleccionar fila\"\r\n />\r\n </div>\r\n }\r\n\r\n @for (col of columns(); track col.key) {\r\n <div\r\n class=\"dt-cell\"\r\n [attr.data-align]=\"col.align ?? 'left'\"\r\n (click)=\"onRowClick(row)\"\r\n >\r\n @switch (col.type) {\r\n @case ('image') {\r\n @if ((col.options?.image?.hidden ?? false) === true) {\r\n <button\r\n type=\"button\"\r\n class=\"dt-link\"\r\n (click)=\"onOpenImage(getImageSrc(row, col), getImageAlt(row, col), $event)\"\r\n >\r\n {{ i18n().seeImage }}\r\n </button>\r\n } @else {\r\n <img\r\n class=\"dt-img\"\r\n [class.dt-img--full]=\"!!col.options?.image?.showFull\"\r\n [src]=\"getImageSrc(row, col)\"\r\n [alt]=\"getImageAlt(row, col)\"\r\n (click)=\"\r\n (col.options?.image?.openInModal ?? true) &&\r\n onOpenImage(getImageSrc(row, col), getImageAlt(row, col), $event)\r\n \"\r\n />\r\n }\r\n }\r\n\r\n @case ('status') {\r\n <span class=\"dt-badge\" [attr.data-variant]=\"getStatusClass(row, col)\">\r\n {{ getDisplayText(row, col) }}\r\n </span>\r\n }\r\n\r\n @case ('link') {\r\n <a\r\n class=\"dt-link\"\r\n [href]=\"getLinkHref(row, col)\"\r\n [target]=\"col.options?.link?.target ?? '_blank'\"\r\n (click)=\"$event.stopPropagation()\"\r\n >\r\n {{ getLinkLabel(row, col) }}\r\n </a>\r\n }\r\n\r\n @case ('actions') {\r\n <div class=\"dt-actions\">\r\n @for (action of getColumnActions(col); track action.id) {\r\n @if (isActionVisible(action, row)) {\r\n <button\r\n type=\"button\"\r\n class=\"dt-action-btn\"\r\n [class.dt-action--edit]=\"action.id === 'edit'\"\r\n [class.dt-action--delete]=\"action.id === 'delete'\"\r\n [class.dt-action--open]=\"action.id === 'open'\"\r\n [class.dt-action--copy]=\"action.id === 'copy'\"\r\n [disabled]=\"isActionDisabled(action, row)\"\r\n [title]=\"action.tooltip ?? action.label\"\r\n (click)=\"emitAction(action, row, $event)\"\r\n >\r\n @if ((action.render ?? 'icon') === 'text') {\r\n <span class=\"dt-action-text\">{{ action.label }}</span>\r\n } @else {\r\n <span class=\"dt-action-svg\" [innerHTML]=\"getActionSvg(action)\"></span>\r\n }\r\n </button>\r\n }\r\n }\r\n </div>\r\n }\r\n\r\n @default {\r\n <span class=\"dt-text\" [class.dt-text--wrap]=\"col.wrap\">{{ getDisplayText(row, col) }}</span>\r\n }\r\n }\r\n </div>\r\n }\r\n </div>\r\n }\r\n }\r\n </div>\r\n </div>\r\n</div>\r\n","import { ChangeDetectionStrategy, Component, computed, input, output } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { PagerItem } from '../../types/table.types';\r\nimport { TABLE_I18N_DEFAULT } from '../../constants/table-i18n.constants';\r\nimport { TableI18n } from '../../types/table-i18n.type';\r\n\r\n@Component({\r\n selector: 'table-pagination',\r\n standalone: true,\r\n imports: [CommonModule],\r\n styleUrls: ['./table-pagination.component.css'],\r\n templateUrl: './table-pagination.component.html',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class TablePaginationComponent {\r\n public readonly Math = Math;\r\n\r\n // Inputs\r\n readonly page = input<number>(1);\r\n readonly pageSize = input<number>(10);\r\n readonly pageCount = input<number>(1);\r\n readonly totalCount = input<number>(0);\r\n readonly pageSizeOptions = input<number[]>([10, 25, 50]);\r\n readonly pagerItems = input<PagerItem[]>([]);\r\n readonly i18n = input<TableI18n>(TABLE_I18N_DEFAULT);\r\n\r\n // Outputs\r\n readonly pageChange = output<number>();\r\n readonly pageSizeChange = output<number>();\r\n\r\n readonly startItem = computed(() => {\r\n if (this.totalCount() <= 0) return 0;\r\n return (this.page() - 1) * this.pageSize() + 1;\r\n });\r\n\r\n readonly endItem = computed(() => {\r\n if (this.totalCount() <= 0) return 0;\r\n return Math.min(this.page() * this.pageSize(), this.totalCount());\r\n });\r\n\r\n goToPage(page: number) {\r\n const clamped = Math.max(1, Math.min(this.pageCount(), page));\r\n this.pageChange.emit(clamped);\r\n }\r\n\r\n prevPage() {\r\n this.goToPage(this.page() - 1);\r\n }\r\n\r\n nextPage() {\r\n this.goToPage(this.page() + 1);\r\n }\r\n\r\n onPageSizeSelect(size: number) {\r\n if (!Number.isFinite(size) || size <= 0) return;\r\n this.pageSizeChange.emit(size);\r\n }\r\n}\r\n","<div class=\"dt-pagination dt-pagination--classic\">\r\n <!-- Info -->\r\n <span class=\"dt-page-info dt-hide-sm\">\r\n {{ i18n().showing(startItem(), endItem(), totalCount()) }}\r\n </span>\r\n\r\n <!-- Compact info (mobile) -->\r\n <span class=\"dt-page-compact dt-show-xs\"> {{ page() }} / {{ pageCount() }} </span>\r\n\r\n <!-- Rows per page -->\r\n <div class=\"dt-rows dt-hide-md\">\r\n <span>{{ i18n().rowsPerPage }}</span>\r\n <select [value]=\"pageSize()\" (change)=\"onPageSizeSelect(+$any($event.target).value)\">\r\n @for (size of pageSizeOptions(); track size) {\r\n <option [value]=\"size\">{{ size }}</option>\r\n }\r\n </select>\r\n </div>\r\n\r\n <!-- Pager -->\r\n <div class=\"dt-pager\">\r\n <button\r\n type=\"button\"\r\n class=\"dt-pager-btn dt-hide-sm\"\r\n (click)=\"goToPage(1)\"\r\n [disabled]=\"page() === 1\"\r\n aria-label=\"First page\"\r\n >\r\n <!-- svg -->\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\">\r\n <path\r\n fill=\"currentColor\"\r\n d=\"m11 18l-6-6l6-6l1.4 1.4L7.825 12l4.575 4.6zm6.6 0l-6-6l6-6L19 7.4L14.425 12L19 16.6z\"\r\n />\r\n </svg>\r\n </button>\r\n\r\n <button\r\n type=\"button\"\r\n class=\"dt-pager-btn\"\r\n (click)=\"prevPage()\"\r\n [disabled]=\"page() === 1\"\r\n aria-label=\"Prev page\"\r\n >\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\">\r\n <path fill=\"currentColor\" d=\"m14 18l-6-6l6-6l1.4 1.4l-4.6 4.6l4.6 4.6z\" />\r\n </svg>\r\n </button>\r\n\r\n <!-- números/ellipsis: se ocultarán en XS por CSS -->\r\n @for (item of pagerItems(); track $index) {\r\n @if (item === '…') {\r\n <span class=\"dt-pager-ellipsis dt-hide-xs\">…</span>\r\n } @else {\r\n <button\r\n type=\"button\"\r\n class=\"dt-pager-chip dt-hide-xs\"\r\n [class.dt-pager-chip--active]=\"item === page()\"\r\n (click)=\"goToPage(item)\"\r\n >\r\n {{ item }}\r\n </button>\r\n }\r\n }\r\n\r\n <button\r\n type=\"button\"\r\n class=\"dt-pager-btn\"\r\n (click)=\"nextPage()\"\r\n [disabled]=\"page() === pageCount()\"\r\n aria-label=\"Next page\"\r\n >\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\">\r\n <path fill=\"currentColor\" d=\"M12.6 12L8 7.4L9.4 6l6 6l-6 6L8 16.6z\" />\r\n </svg>\r\n </button>\r\n\r\n <button\r\n type=\"button\"\r\n class=\"dt-pager-btn dt-hide-sm\"\r\n (click)=\"goToPage(pageCount())\"\r\n [disabled]=\"page() === pageCount()\"\r\n aria-label=\"Last page\"\r\n >\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\">\r\n <path\r\n fill=\"currentColor\"\r\n d=\"M9.575 12L5 7.4L6.4 6l6 6l-6 6L5 16.6zm6.6 0L11.6 7.4L13 6l6 6l-6 6l-1.4-1.4z\"\r\n />\r\n </svg>\r\n </button>\r\n </div>\r\n</div>\r\n","import { ChangeDetectionStrategy, Component, input, output } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { TableI18n } from '../../types/table-i18n.type';\r\nimport { TABLE_I18N_DEFAULT } from '../../constants/table-i18n.constants';\r\n\r\n@Component({\r\n selector: 'table-toolbar',\r\n standalone: true,\r\n imports: [CommonModule],\r\n templateUrl: './table-toolbar.component.html',\r\n styleUrls: ['./table-toolbar.component.css'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class TableToolbarComponent {\r\n // Inputs\r\n readonly enabled = input<boolean>(true);\r\n readonly query = input<string>('');\r\n readonly showClear = input<boolean>(true);\r\n readonly i18n = input<TableI18n>(TABLE_I18N_DEFAULT);\r\n\r\n // Outputs\r\n readonly queryChange = output<string>();\r\n readonly clear = output<void>();\r\n\r\n onInput(value: string) {\r\n this.queryChange.emit(value);\r\n }\r\n\r\n onClear() {\r\n this.clear.emit();\r\n }\r\n}\r\n","@if (enabled()) {\r\n <div class=\"dt-toolbar\">\r\n <input\r\n class=\"dt-input\"\r\n type=\"text\"\r\n [placeholder]=\"i18n().search\"\r\n [value]=\"query()\"\r\n (input)=\"onInput($any($event.target).value)\"\r\n />\r\n\r\n @if (showClear()) {\r\n <button type=\"button\" class=\"dt-btn\" (click)=\"onClear()\">{{ i18n().clear }}</button>\r\n }\r\n </div>\r\n}\r\n","import { Component, computed, effect, Input, input, output, signal } from '@angular/core';\r\nimport {\r\n CellDataType,\r\n PagerItem,\r\n RowId,\r\n TableActionEvent,\r\n TableColumn,\r\n TableConfig,\r\n TablePaginationChange,\r\n TableSortState,\r\n} from './types/table.types';\r\nimport { TableModalImageComponent } from './parts/table-modal-image/table-modal-image.component';\r\nimport { TableGridComponent } from './parts/table-grid/table-grid.component';\r\nimport { TablePaginationComponent } from './parts/table-pagination/table-pagination.component';\r\nimport { TableToolbarComponent } from './parts/table-toolbar/table-toolbar.component';\r\nimport { TABLE_I18N_BY_LANG, TABLE_LANG_DEFAULT } from './constants/table-i18n.constants';\r\nimport { TableI18n, TableLang } from './types/table-i18n.type';\r\n\r\n@Component({\r\n selector: 'advanced-table',\r\n imports: [\r\n TableModalImageComponent,\r\n TableGridComponent,\r\n TablePaginationComponent,\r\n TableToolbarComponent,\r\n ],\r\n templateUrl: './advanced-table.component.html',\r\n styleUrl: './advanced-table.component.css',\r\n})\r\nexport class AdvancedTable<T extends Record<string, any>> {\r\n // Inputs\r\n readonly columns = input<TableColumn<T>[]>([]);\r\n readonly data = input<T[]>([]);\r\n readonly config = input<TableConfig>({\r\n globalSearch: true,\r\n columnFilters: false,\r\n selectable: false,\r\n selectionMode: 'multiple',\r\n pagination: { enabled: false, pageSize: 10, pageSizeOptions: [10, 25, 50] },\r\n scroll: { mode: 'none' },\r\n emptyText: 'Sin resultados',\r\n rowIdKey: 'id',\r\n globalSearchVisibleOnly: true,\r\n });\r\n readonly serverTotalCount = input<number>(0);\r\n\r\n @Input()\r\n set lang(value: TableLang | undefined) {\r\n this._lang.set(value ?? TABLE_LANG_DEFAULT);\r\n }\r\n\r\n @Input()\r\n set i18n(value: Partial<TableI18n> | undefined) {\r\n this._override.set(value ?? {});\r\n }\r\n\r\n // Outputs\r\n readonly rowClick = output<T>();\r\n readonly selectionChange = output<RowId[]>();\r\n readonly actionClick = output<TableActionEvent<T>>();\r\n readonly pageChange = output<TablePaginationChange>();\r\n\r\n // Signals\r\n readonly globalQuery = signal<string>('');\r\n readonly columnQueries = signal<Record<string, string>>({});\r\n readonly sortState = signal<TableSortState | null>(null);\r\n readonly page = signal<number>(1);\r\n readonly visibleCount = signal<number>(0);\r\n readonly modalOpen = signal<boolean>(false);\r\n readonly modalImageSrc = signal<string>('');\r\n readonly modalImageAlt = signal<string>('');\r\n readonly selectedIdsSet = signal<Set<RowId>>(new Set<RowId>());\r\n readonly pageSize = signal<number>(this.config().pagination?.pageSize ?? 10);\r\n private _lang = signal<TableLang>(TABLE_LANG_DEFAULT);\r\n private _override = signal<Partial<TableI18n>>({});\r\n\r\n // Computed Data\r\n readonly selectedIds = computed<RowId[]>(() => Array.from(this.selectedIdsSet()));\r\n readonly visibleColumns = computed(() => (this.columns() ?? []).filter((c) => !c.hidden));\r\n readonly showSelectionColumn = computed(() => !!this.config().selectable);\r\n readonly gridTemplateColumns = computed(() => {\r\n const cols: string[] = [];\r\n const hasFlexCol = this.visibleColumns().some(\r\n (c) => !c.size || c.size === 'AUTO' || c.size === 'AUTO-XL',\r\n );\r\n\r\n if (this.showSelectionColumn()) cols.push('48px'); // selección\r\n\r\n for (const c of this.visibleColumns()) {\r\n cols.push(this.sizeToCss(c.size, !hasFlexCol));\r\n }\r\n return cols.join(' ');\r\n });\r\n\r\n readonly minTableWidth = computed(() => {\r\n let total = this.showSelectionColumn() ? 48 : 0;\r\n for (const c of this.visibleColumns()) {\r\n total += this.sizeToMinPx(c.size);\r\n }\r\n return total;\r\n });\r\n readonly filteredData = computed(() => {\r\n const rows = this.data() ?? [];\r\n const colsAll = this.columns() ?? [];\r\n const colsVisible = this.visibleColumns();\r\n const config = this.config();\r\n\r\n const globalQuery = this.globalQuery().trim().toLowerCase();\r\n const columnQueries = this.columnQueries();\r\n\r\n const colsForGlobal =\r\n (config.globalSearchVisibleOnly ?? true) ? colsVisible : colsAll.filter((c) => !c.hidden);\r\n\r\n return rows.filter((row) => {\r\n // column filters (AND)\r\n for (const [key, q] of Object.entries(columnQueries)) {\r\n const query = (q ?? '').trim().toLowerCase();\r\n if (!query) continue;\r\n\r\n const col = colsAll.find((c) => c.key === key);\r\n if (!col) continue;\r\n\r\n const value = this.getCellValue(row, col);\r\n const text = this.valueToSearchableText(value, col.type, row).toLowerCase();\r\n\r\n if (!text.includes(query)) return false;\r\n }\r\n\r\n // global search (OR across columns)\r\n if (config.globalSearch && globalQuery) {\r\n let any = false;\r\n for (const col of colsForGlobal) {\r\n const value = this.getCellValue(row, col);\r\n const text = this.valueToSearchableText(value, col.type, row).toLowerCase();\r\n if (text.includes(globalQuery)) {\r\n any = true;\r\n break;\r\n }\r\n }\r\n if (!any) return false;\r\n }\r\n\r\n return true;\r\n });\r\n });\r\n readonly sortedData = computed(() => {\r\n const data = [...this.filteredData()];\r\n const sort = this.sortState();\r\n if (!sort) return data;\r\n\r\n const col = (this.columns() ?? []).find((c) => c.key === sort.key);\r\n if (!col) return data;\r\n\r\n const dir = sort.dir === 'asc' ? 1 : -1;\r\n\r\n data.sort((a, b) => {\r\n const va = this.getCellValue(a, col);\r\n const vb = this.getCellValue(b, col);\r\n return dir * this.compareValues(va, vb, col.type);\r\n });\r\n\r\n return data;\r\n });\r\n readonly pagedData = computed(() => {\r\n const config = this.config();\r\n const rows = this.sortedData();\r\n const fixedN = config.fixedRowCount;\r\n const cappedRows = typeof fixedN === 'number' && fixedN > 0 ? rows.slice(0, fixedN) : rows;\r\n\r\n const mode = config.scroll?.mode ?? 'none';\r\n if (mode === 'infinite') {\r\n return cappedRows.slice(0, this.visibleCount());\r\n }\r\n\r\n // pagination\r\n if (config.pagination?.enabled) {\r\n if (config.pagination.mode === 'server') return cappedRows;\r\n const size = this.pageSize();\r\n const page = this.page();\r\n const start = (page - 1) * size;\r\n return cappedRows.slice(start, start + size);\r\n }\r\n\r\n return cappedRows;\r\n });\r\n readonly pagerItems = computed<PagerItem[]>(() => {\r\n const config = this.config();\r\n if (!config.pagination?.enabled) return [];\r\n\r\n const totalPages = this.pageCount();\r\n const current = this.page();\r\n\r\n if (totalPages <= 1) return [];\r\n\r\n if (totalPages <= 7) {\r\n return Array.from({ length: totalPages }, (_, i) => i + 1);\r\n }\r\n\r\n const items: PagerItem[] = [];\r\n const first = 1;\r\n const last = totalPages;\r\n const around = 1;\r\n\r\n const start = Math.max(2, current - around);\r\n const end = Math.min(last - 1, current + around);\r\n\r\n items.push(first);\r\n\r\n if (start > 2) items.push('…');\r\n\r\n for (let p = start; p <= end; p++) {\r\n items.push(p);\r\n }\r\n\r\n if (end < last - 1) items.push('…');\r\n\r\n items.push(last);\r\n\r\n return items;\r\n });\r\n readonly totalCount = computed(() => {\r\n const config = this.config();\r\n if (config.pagination?.mode === 'server') return this.serverTotalCount();\r\n return this.sortedData().length;\r\n });\r\n readonly pageCount = computed(() => {\r\n const config = this.config();\r\n if (!config.pagination?.enabled) return 1;\r\n return Math.max(1, Math.ceil(this.totalCount() / this.pageSize()));\r\n });\r\n readonly isAllSelectedOnPage = computed(() => {\r\n if (!this.showSelectionColumn()) return false;\r\n const ids = this.pagedData().map((r) => this.getRowId(r));\r\n if (ids.length === 0) return false;\r\n\r\n const set = this.selectedIdsSet();\r\n return ids.every((id) => set.has(id));\r\n });\r\n protected i18nCom = computed<TableI18n>(() => {\r\n const base = TABLE_I18N_BY_LANG[this._lang()];\r\n const override = this._override();\r\n return { ...base, ...override };\r\n });\r\n\r\n // Effects\r\n infiniteScrollEffect = effect(() => {\r\n const config = this.config();\r\n const mode = config.scroll?.mode ?? 'none';\r\n const batch = config.scroll?.batchSize ?? 50;\r\n\r\n if (mode === 'infinite') {\r\n this.visibleCount.set(batch);\r\n } else {\r\n this.visibleCount.set(Number.MAX_SAFE_INTEGER);\r\n }\r\n });\r\n selectionDataEffect = effect(() => {\r\n this.selectionChange.emit(this.selectedIds());\r\n });\r\n pagesCountEffect = effect(() => {\r\n const totalPages = this.pageCount();\r\n if (this.page() > totalPages) {\r\n this.page.set(totalPages);\r\n }\r\n });\r\n serverPageEffect = effect(() => {\r\n const config = this.config();\r\n if (config.pagination?.mode !== 'server') return;\r\n this.pageChange.emit({ page: this.page(), pageSize: this.pageSize() });\r\n });\r\n\r\n // UI Actions\r\n onHeaderClickSort(col: TableColumn<T>) {\r\n if (!col.sortable) return;\r\n const current = this.sortState();\r\n if (!current || current.key !== col.key) {\r\n this.sortState.set({ key: col.key, dir: 'asc' });\r\n } else if (current.dir === 'asc') {\r\n this.sortState.set({ key: col.key, dir: 'desc' });\r\n } else {\r\n this.sortState.set(null);\r\n }\r\n this.page.set(1);\r\n }\r\n\r\n onBodyScroll(event: Event) {\r\n const config = this.config();\r\n if ((config.scroll?.mode ?? 'none') !== 'infinite') return;\r\n\r\n const el = event.target as HTMLElement;\r\n const thresholdPx = 120;\r\n const nearBottom = el.scrollTop + el.clientHeight >= el.scrollHeight - thresholdPx;\r\n\r\n if (!nearBottom) return;\r\n\r\n const batch = config.scroll?.batchSize ?? 50;\r\n const next = Math.min(this.sortedData().length, this.visibleCount() + batch);\r\n this.visibleCount.set(next);\r\n }\r\n\r\n onPageSizeChange(size: number) {\r\n if (!Number.isFinite(size) || size <= 0) return;\r\n this.pageSize.set(size);\r\n this.page.set(1);\r\n }\r\n\r\n getCellValue(row: T, col: TableColumn<T>): unknown {\r\n try {\r\n return col.valueGetter ? col.valueGetter(row) : row?.[col.key];\r\n } catch {\r\n return undefined;\r\n }\r\n }\r\n\r\n getRowId(row: T): RowId {\r\n const config = this.config();\r\n if (config.rowIdGetter) return config.rowIdGetter(row) as RowId;\r\n\r\n const key = config.rowIdKey ?? 'id';\r\n const value = row?.[key];\r\n return (value ?? JSON.stringify(row)) as RowId;\r\n }\r\n\r\n setGlobalQuery(query: string) {\r\n this.globalQuery.set(query ?? '');\r\n this.page.set(1);\r\n this.resetInfiniteIfNeeded();\r\n }\r\n\r\n setColumnQuery(key: string, query: string) {\r\n const next = { ...this.columnQueries() };\r\n next[key] = query ?? '';\r\n this.columnQueries.set(next);\r\n this.page.set(1);\r\n this.resetInfiniteIfNeeded();\r\n }\r\n\r\n clearFilters() {\r\n this.globalQuery.set('');\r\n this.columnQueries.set({});\r\n this.page.set(1);\r\n this.resetInfiniteIfNeeded();\r\n }\r\n\r\n onRowClick(row: T) {\r\n this.rowClick.emit(row);\r\n }\r\n\r\n toggleRowSelection(row: T) {\r\n const config = this.config();\r\n if (!config.selectable) return;\r\n\r\n const id = this.getRowId(row);\r\n const mode = config.selectionMode ?? 'multiple';\r\n\r\n const set = new Set(this.selectedIdsSet());\r\n if (mode === 'single') {\r\n if (set.has(id)) set.clear();\r\n else {\r\n set.clear();\r\n set.add(id);\r\n }\r\n } else {\r\n if (set.has(id)) set.delete(id);\r\n else set.add(id);\r\n }\r\n this.selectedIdsSet.set(set);\r\n }\r\n\r\n toggleSelectAllOnPage() {\r\n const config = this.config();\r\n if (!config.selectable) return;\r\n if ((config.selectionMode ?? 'multiple') === 'single') return;\r\n\r\n const ids = this.pagedData().map((r) => this.getRowId(r));\r\n const set = new Set(this.selectedIdsSet());\r\n\r\n const allSelected = ids.every((id) => set.has(id));\r\n if (allSelected) ids.forEach((id) => set.delete(id));\r\n else ids.forEach((id) => set.add(id));\r\n\r\n this.selectedIdsSet.set(set);\r\n }\r\n\r\n prevPage() {\r\n this.page.set(Math.max(1, this.page() - 1));\r\n }\r\n\r\n nextPage() {\r\n this.page.set(Math.min(this.pageCount(), this.page() + 1));\r\n }\r\n\r\n goToPage(p: number) {\r\n const clamped = Math.max(1, Math.min(this.pageCount(), p));\r\n this.page.set(clamped);\r\n }\r\n\r\n openImageModal(src: string, alt: string) {\r\n this.modalImageSrc.set(src);\r\n this.modalImageAlt.set(alt);\r\n this.modalOpen.set(true);\r\n }\r\n\r\n closeModal() {\r\n this.modalOpen.set(false);\r\n this.modalImageSrc.set('');\r\n this.modalImageAlt.set('');\r\n }\r\n\r\n // Private functions\r\n private resetInfiniteIfNeeded() {\r\n const config = this.config();\r\n if ((config.scroll?.mode ?? 'none') !== 'infinite') return;\r\n const batch = config.scroll?.batchSize ?? 50;\r\n this.visibleCount.set(batch);\r\n }\r\n\r\n private sizeToCss(size?: string, expand = false): string {\r\n const fixed = (px: number) => (expand ? `minmax(${px}px, 1fr)` : `${px}px`);\r\n switch (size) {\r\n case 'XS':\r\n return fixed(80);\r\n case 'SM':\r\n return fixed(120);\r\n case 'MD':\r\n return fixed(180);\r\n case 'LG':\r\n return fixed(260);\r\n case 'XL':\r\n return fixed(360);\r\n case 'AUTO-XL':\r\n return 'minmax(360px, 1fr)';\r\n case 'AUTO':\r\n default:\r\n return 'minmax(240px, 1fr)';\r\n }\r\n }\r\n\r\n private sizeToMinPx(size?: string): number {\r\n switch (size) {\r\n case 'XS':\r\n return 80;\r\n case 'SM':\r\n return 120;\r\n case 'MD':\r\n return 180;\r\n case 'LG':\r\n return 260;\r\n case 'XL':\r\n return 360;\r\n case 'AUTO-XL':\r\n return 360;\r\n default:\r\n return 240; // AUTO\r\n }\r\n }\r\n\r\n private toNumber(value: unknown): number {\r\n if (typeof value === 'number') return value;\r\n if (typeof value === 'string') {\r\n return Number(value.replace(/,/g, '').trim());\r\n }\r\n return Number.NaN;\r\n }\r\n\r\n private toDate(value: unknown): Date | null {\r\n if (value instanceof Date && !Number.isNaN(value.getTime())) return value;\r\n if (typeof value === 'string' || typeof value === 'number') {\r\n const date = new Date(value);\r\n return Number.isNaN(date.getTime()) ? null : date;\r\n }\r\n return null;\r\n }\r\n\r\n private compareValues(firstValue: unknown, secondValue: unknown, type: CellDataType): number {\r\n const firstNull = firstValue == null || firstValue === '';\r\n const secondNull = secondValue == null || secondValue === '';\r\n if (firstNull && secondNull) return 0;\r\n if (firstNull) return 1;\r\n if (secondNull) return -1;\r\n\r\n let response: number | null = null;\r\n switch (type) {\r\n case 'integer':\r\n case 'decimal':\r\n case 'currency': {\r\n const firstNumber = this.toNumber(firstValue);\r\n const secondNumber = this.toNumber(secondValue);\r\n if (!Number.isFinite(firstNumber) && !Number.isFinite(secondNumber)) response = 0;\r\n else if (!Number.isFinite(firstNumber)) response = 1;\r\n else if (!Number.isFinite(secondNumber)) response = -1;\r\n else response = firstNumber === secondNumber ? 0 : firstNumber < secondNumber ? -1 : 1;\r\n break;\r\n }\r\n\r\n case 'date':\r\n case 'datetime': {\r\n const firstDate = this.toDate(firstValue);\r\n const toCompareDate = this.toDate(secondValue);\r\n if (!firstDate && !toCompareDate) response = 0;\r\n else if (!firstDate) response = 1;\r\n else if (!toCompareDate) response = -1;\r\n else {\r\n const ta = firstDate.getTime();\r\n const tb = toCompareDate.getTime();\r\n response = ta === tb ? 0 : ta < tb ? -1 : 1;\r\n }\r\n break;\r\n }\r\n\r\n case 'boolean': {\r\n const firstBool = firstValue === true ? 1 : 0;\r\n const secondBool = secondValue === true ? 1 : 0;\r\n response = firstBool - secondBool;\r\n break;\r\n }\r\n\r\n default: {\r\n const firstString = String(firstValue).toLowerCase();\r\n const secondString = String(secondValue).toLowerCase();\r\n response = firstString.localeCompare(secondString, 'es');\r\n break;\r\n }\r\n }\r\n return response;\r\n }\r\n\r\n private valueToSearchableText(value: unknown, type: CellDataType, row: T): string {\r\n if (value == null) return '';\r\n if (type === 'image') return '';\r\n if (type === 'boolean') return value === true ? 'si true yes 1' : 'no false 0';\r\n return String(value);\r\n }\r\n}\r\n","<div class=\"dt-container\">\r\n <div class=\"dt-toolbar\">\r\n <!-- Search and Clean -->\r\n <table-toolbar\r\n [enabled]=\"config().globalSearch ?? true\"\r\n [query]=\"globalQuery()\"\r\n [i18n]=\"i18nCom()\"\r\n [showClear]=\"true\"\r\n (queryChange)=\"setGlobalQuery($event)\"\r\n (clear)=\"clearFilters()\"\r\n />\r\n\r\n <!-- Pagination -->\r\n @if (config().pagination?.enabled) {\r\n <table-pagination\r\n [page]=\"page()\"\r\n [pageSize]=\"pageSize()\"\r\n [pageCount]=\"pageCount()\"\r\n [totalCount]=\"totalCount()\"\r\n [pagerItems]=\"pagerItems()\"\r\n [pageSizeOptions]=\"config().pagination!.pageSizeOptions ?? [10, 25, 50]\"\r\n [i18n]=\"i18nCom()\"\r\n (pageChange)=\"goToPage($event)\"\r\n (pageSizeChange)=\"onPageSizeChange($event)\"\r\n />\r\n }\r\n </div>\r\n\r\n <div class=\"dt-grid\">\r\n <!-- Data Table -->\r\n <table-grid\r\n [config]=\"config()\"\r\n [columns]=\"visibleColumns()\"\r\n [rows]=\"pagedData()\"\r\n [gridTemplateColumns]=\"gridTemplateColumns()\"\r\n [minTableWidth]=\"minTableWidth()\"\r\n [columnQueries]=\"columnQueries()\"\r\n [sortState]=\"sortState()\"\r\n [selectedIdsSet]=\"selectedIdsSet()\"\r\n [i18n]=\"i18nCom()\"\r\n (headerSort)=\"onHeaderClickSort($event)\"\r\n (columnQueryChange)=\"setColumnQuery($event.key, $event.value)\"\r\n (rowClick)=\"onRowClick($event)\"\r\n (toggleRow)=\"toggleRowSelection($event)\"\r\n (toggleAllOnPage)=\"toggleSelectAllOnPage()\"\r\n (openImage)=\"openImageModal($event.src, $event.alt)\"\r\n (actionClick)=\"actionClick.emit($event)\"\r\n (bodyScroll)=\"onBodyScroll($event)\"\r\n />\r\n </div>\r\n\r\n <!-- Image Modal -->\r\n <table-modal-image\r\n [open]=\"modalOpen()\"\r\n [src]=\"modalImageSrc()\"\r\n [alt]=\"modalImageAlt()\"\r\n (close)=\"closeModal()\"\r\n />\r\n</div>\r\n","/*\r\n * Public API Surface of b2b-tools\r\n */\r\nexport * from './lib/components/cards';\r\nexport * from './lib/components/tables';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "b2b-tools",
3
- "version": "0.3.0",
3
+ "version": "0.4.0",
4
4
  "license": "MIT",
5
5
  "peerDependencies": {
6
6
  "@angular/common": "^21.1.0",
@@ -221,6 +221,7 @@ interface TableConfig {
221
221
  enabled: boolean;
222
222
  pageSize: number;
223
223
  pageSizeOptions?: number[];
224
+ mode?: 'client' | 'server';
224
225
  };
225
226
  scroll?: {
226
227
  mode: 'none' | 'infinite';
@@ -237,6 +238,10 @@ interface TableSortState {
237
238
  key: string;
238
239
  dir: 'asc' | 'desc';
239
240
  }
241
+ interface TablePaginationChange {
242
+ page: number;
243
+ pageSize: number;
244
+ }
240
245
  type ActionVariant = 'default' | 'danger';
241
246
  type ActionRender = 'icon' | 'text';
242
247
  interface TableAction<T> {
@@ -278,11 +283,13 @@ declare class AdvancedTable<T extends Record<string, any>> {
278
283
  readonly columns: _angular_core.InputSignal<TableColumn<T>[]>;
279
284
  readonly data: _angular_core.InputSignal<T[]>;
280
285
  readonly config: _angular_core.InputSignal<TableConfig>;
286
+ readonly serverTotalCount: _angular_core.InputSignal<number>;
281
287
  set lang(value: TableLang | undefined);
282
288
  set i18n(value: Partial<TableI18n> | undefined);
283
289
  readonly rowClick: _angular_core.OutputEmitterRef<T>;
284
290
  readonly selectionChange: _angular_core.OutputEmitterRef<RowId[]>;
285
291
  readonly actionClick: _angular_core.OutputEmitterRef<TableActionEvent<T>>;
292
+ readonly pageChange: _angular_core.OutputEmitterRef<TablePaginationChange>;
286
293
  readonly globalQuery: _angular_core.WritableSignal<string>;
287
294
  readonly columnQueries: _angular_core.WritableSignal<Record<string, string>>;
288
295
  readonly sortState: _angular_core.WritableSignal<TableSortState | null>;
@@ -311,6 +318,7 @@ declare class AdvancedTable<T extends Record<string, any>> {
311
318
  infiniteScrollEffect: _angular_core.EffectRef;
312
319
  selectionDataEffect: _angular_core.EffectRef;
313
320
  pagesCountEffect: _angular_core.EffectRef;
321
+ serverPageEffect: _angular_core.EffectRef;
314
322
  onHeaderClickSort(col: TableColumn<T>): void;
315
323
  onBodyScroll(event: Event): void;
316
324
  onPageSizeChange(size: number): void;
@@ -335,7 +343,7 @@ declare class AdvancedTable<T extends Record<string, any>> {
335
343
  private compareValues;
336
344
  private valueToSearchableText;
337
345
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AdvancedTable<any>, never>;
338
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<AdvancedTable<any>, "advanced-table", never, { "columns": { "alias": "columns"; "required": false; "isSignal": true; }; "data": { "alias": "data"; "required": false; "isSignal": true; }; "config": { "alias": "config"; "required": false; "isSignal": true; }; "lang": { "alias": "lang"; "required": false; }; "i18n": { "alias": "i18n"; "required": false; }; }, { "rowClick": "rowClick"; "selectionChange": "selectionChange"; "actionClick": "actionClick"; }, never, never, true, never>;
346
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AdvancedTable<any>, "advanced-table", never, { "columns": { "alias": "columns"; "required": false; "isSignal": true; }; "data": { "alias": "data"; "required": false; "isSignal": true; }; "config": { "alias": "config"; "required": false; "isSignal": true; }; "serverTotalCount": { "alias": "serverTotalCount"; "required": false; "isSignal": true; }; "lang": { "alias": "lang"; "required": false; }; "i18n": { "alias": "i18n"; "required": false; }; }, { "rowClick": "rowClick"; "selectionChange": "selectionChange"; "actionClick": "actionClick"; "pageChange": "pageChange"; }, never, never, true, never>;
339
347
  }
340
348
 
341
349
  /**
@@ -624,4 +632,4 @@ declare const TIME_ZONES: {
624
632
  };
625
633
 
626
634
  export { AdvancedCard, AdvancedCardTemplateDirective, AdvancedTable, SVG_ICONS, SimpleTable, TIME_ZONES };
627
- export type { ActionRender, ActionVariant, AdvancedAction, AdvancedBadge, AdvancedCardConfig, AdvancedCardContentVm, AdvancedCardTab, AdvancedCardTemplateCtx, AdvancedDensity, AdvancedExpandMode, AdvancedHighlight, AdvancedRowKind, AdvancedSize, AdvancedSummaryBlock, AdvancedSummaryRow, AdvancedTabAction, AdvancedTabKind, AdvancedTone, CellDataType, CellSize, Icon, PagerItem, RowId, SimpleHaders, SortDirection, TableAction, TableActionEvent, TableColumn, TableConfig, TableSortState, TextAlign, TimeZoneInfo };
635
+ export type { ActionRender, ActionVariant, AdvancedAction, AdvancedBadge, AdvancedCardConfig, AdvancedCardContentVm, AdvancedCardTab, AdvancedCardTemplateCtx, AdvancedDensity, AdvancedExpandMode, AdvancedHighlight, AdvancedRowKind, AdvancedSize, AdvancedSummaryBlock, AdvancedSummaryRow, AdvancedTabAction, AdvancedTabKind, AdvancedTone, CellDataType, CellSize, Icon, PagerItem, RowId, SimpleHaders, SortDirection, TableAction, TableActionEvent, TableColumn, TableConfig, TablePaginationChange, TableSortState, TextAlign, TimeZoneInfo };