shirkasoft-ui-components 1.1.1 → 1.1.2

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "shirkasoft-ui-components",
3
- "version": "1.1.1",
3
+ "version": "1.1.2",
4
4
  "description": "Angular UI Components Library — themeable via CSS custom properties",
5
5
  "keywords": [
6
6
  "angular",
@@ -509,8 +509,20 @@ declare class TableComponent {
509
509
  private fb;
510
510
  private cdr;
511
511
  private transloco;
512
+ private destroyRef;
512
513
  protected getIcon: typeof getIcon$5;
514
+ /**
515
+ * FIX responsive: ancho mínimo que toma cada columna (excepto 'actions',
516
+ * que ya tiene su propio ancho calculado) SOLO en pantallas angostas
517
+ * (ver el media query en `styles`). En pantallas anchas esta variable no
518
+ * se usa: las columnas se estiran normalmente al 100% del contenedor,
519
+ * igual que antes. Ajustable por columna vía `col.width` si alguna
520
+ * necesita más o menos espacio en mobile.
521
+ */
522
+ protected readonly DEFAULT_COLUMN_WIDTH = "140px";
523
+ getColumnWidth(col: Column): string;
513
524
  private actionsHeaderLabel;
525
+ private currentLang;
514
526
  data: _angular_core.InputSignal<any[]>;
515
527
  columns: _angular_core.InputSignal<Column[]>;
516
528
  rowsPerPage: _angular_core.InputSignal<number>;
@@ -557,13 +569,23 @@ declare class TableComponent {
557
569
  currentPage: _angular_core.Signal<number>;
558
570
  columnFiltersForm: FormGroup;
559
571
  private filterSubject;
572
+ private searchSubject;
573
+ private lastFilterFieldsSignature;
574
+ private columnFilterSubscriptions;
560
575
  columnsWithActions: _angular_core.Signal<Column[]>;
561
576
  effectiveTotalRecords: _angular_core.Signal<number>;
562
577
  effectiveDisplayedData: _angular_core.Signal<any[]>;
563
- activeFilters: _angular_core.Signal<{
564
- [key: string]: any;
565
- }>;
578
+ pageReport: _angular_core.Signal<string>;
566
579
  constructor();
580
+ /**
581
+ * FIX crítico: antes se reconstruía el FormGroup completo (perdiendo el
582
+ * texto escrito por el usuario en los filtros y el estado de visibilidad
583
+ * de cada filtro) cada vez que `columns()` cambiaba de referencia, aunque
584
+ * el conjunto de campos filtrables fuera idéntico. Ahora comparamos una
585
+ * "firma" del set de campos+tipo de filtro y solo reconstruimos si
586
+ * realmente cambió. Además, las suscripciones previas se limpian antes de
587
+ * crear las nuevas para no acumular fugas de memoria.
588
+ */
567
589
  private setupColumnFilters;
568
590
  private emitFilterChange;
569
591
  private applySearch;
@@ -572,10 +594,24 @@ declare class TableComponent {
572
594
  private updateDisplayedData;
573
595
  onFilterClick(value: string): void;
574
596
  toggleSort(field: string): void;
597
+ /**
598
+ * FIX: se documenta explícitamente el criterio de valores null/undefined.
599
+ * Se mantienen SIEMPRE al final de la lista, sin importar la dirección del
600
+ * orden (comportamiento común e intencional en tablas de datos). Si en tu
601
+ * caso de uso prefieres que "sigan" la dirección del sort, multiplica
602
+ * ambos returns por `order`.
603
+ */
575
604
  private applySort;
576
605
  onSearchInput(value: string): void;
577
606
  clearFilter(field: string): void;
578
607
  toggleFilter(field: string): void;
608
+ /**
609
+ * FIX #5 (falsy zero): antes el template usaba `columnFiltersForm.get(field)?.value`
610
+ * directamente en un `@if`/`[class]`, lo cual falla cuando el valor es `0`
611
+ * (número), ya que `0` es falsy en JS. Este helper compara explícitamente
612
+ * contra null/undefined/''.
613
+ */
614
+ hasFilterValue(field: string): boolean;
579
615
  getPageReport(): string;
580
616
  goToFirst(): void;
581
617
  goToLast(): void;
@@ -595,6 +631,16 @@ declare class TableComponent {
595
631
  isRowActionVisible(action: RowAction, rowData: any): boolean;
596
632
  truncate(value: any, limit?: number): string;
597
633
  getTagClass(severity?: string): string;
634
+ /**
635
+ * FIX #7 (medio): trackBy real por identidad de fila en vez de `$index`.
636
+ * Si tu dato no tiene `id`/`_id`, cae de vuelta al índice (comportamiento
637
+ * anterior), pero se recomienda pasar filas con un identificador único.
638
+ */
639
+ trackByRow(row: any, index: number): any;
640
+ /** FIX accesibilidad: soporte de teclado (Enter/Espacio) para ordenar columnas. */
641
+ onHeaderKeydown(event: KeyboardEvent, col: Column): void;
642
+ /** FIX accesibilidad: valor aria-sort para el <th> correspondiente. */
643
+ getAriaSort(col: Column): 'ascending' | 'descending' | 'none';
598
644
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<TableComponent, never>;
599
645
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<TableComponent, "shk-table", never, { "data": { "alias": "data"; "required": false; "isSignal": true; }; "columns": { "alias": "columns"; "required": false; "isSignal": true; }; "rowsPerPage": { "alias": "rowsPerPage"; "required": false; "isSignal": true; }; "rowsPerPageOptions": { "alias": "rowsPerPageOptions"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "showActionRow": { "alias": "showActionRow"; "required": false; "isSignal": true; }; "customTemplates": { "alias": "customTemplates"; "required": false; "isSignal": true; }; "headerActions": { "alias": "headerActions"; "required": false; "isSignal": true; }; "rowActions": { "alias": "rowActions"; "required": false; "isSignal": true; }; "hasShadow": { "alias": "hasShadow"; "required": false; "isSignal": true; }; "defaultSortField": { "alias": "defaultSortField"; "required": false; "isSignal": true; }; "defaultSortOrder": { "alias": "defaultSortOrder"; "required": false; "isSignal": true; }; "showSearch": { "alias": "showSearch"; "required": false; "isSignal": true; }; "searchPlaceholder": { "alias": "searchPlaceholder"; "required": false; "isSignal": true; }; "emptyMessage": { "alias": "emptyMessage"; "required": false; "isSignal": true; }; "serverSide": { "alias": "serverSide"; "required": false; "isSignal": true; }; "totalRecords": { "alias": "totalRecords"; "required": false; "isSignal": true; }; "filters": { "alias": "filters"; "required": false; "isSignal": true; }; "activeFilter": { "alias": "activeFilter"; "required": false; "isSignal": true; }; }, { "refresh": "refresh"; "pageChange": "pageChange"; "filterChange": "filterChange"; "searchChange": "searchChange"; "filterClick": "filterClick"; }, never, never, true, never>;
600
646
  }