@c80/ui 1.0.42 → 1.0.45

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (84) hide show
  1. package/c80-ui.d.ts +5 -0
  2. package/esm2022/c80-ui.js +5 -0
  3. package/esm2022/c80-ui.js.map +1 -0
  4. package/esm2022/index.js +6 -0
  5. package/esm2022/index.js.map +1 -0
  6. package/esm2022/lib/card-level/card-level.component.js +56 -0
  7. package/esm2022/lib/card-level/card-level.component.js.map +1 -0
  8. package/esm2022/lib/card-level/card-level.interface.js +2 -0
  9. package/esm2022/lib/card-level/card-level.interface.js.map +1 -0
  10. package/esm2022/lib/card-level/index.js +3 -0
  11. package/esm2022/lib/card-level/index.js.map +1 -0
  12. package/esm2022/lib/icon/icon.component.js +48 -0
  13. package/esm2022/lib/icon/icon.component.js.map +1 -0
  14. package/esm2022/lib/icon/icon.constants.js +237 -0
  15. package/esm2022/lib/icon/icon.constants.js.map +1 -0
  16. package/esm2022/lib/icon/icon.types.js +2 -0
  17. package/esm2022/lib/icon/icon.types.js.map +1 -0
  18. package/esm2022/lib/icon/icon.utils.js +4 -0
  19. package/esm2022/lib/icon/icon.utils.js.map +1 -0
  20. package/esm2022/lib/icon/index.js +4 -0
  21. package/esm2022/lib/icon/index.js.map +1 -0
  22. package/esm2022/lib/modal/index.js +3 -0
  23. package/esm2022/lib/modal/index.js.map +1 -0
  24. package/esm2022/lib/modal/modal.component.js +86 -0
  25. package/esm2022/lib/modal/modal.component.js.map +1 -0
  26. package/esm2022/lib/modal/modal.service.js +83 -0
  27. package/esm2022/lib/modal/modal.service.js.map +1 -0
  28. package/esm2022/lib/stat-card/index.js +2 -0
  29. package/esm2022/lib/stat-card/index.js.map +1 -0
  30. package/esm2022/lib/stat-card/stat-card.component.js +13 -0
  31. package/esm2022/lib/stat-card/stat-card.component.js.map +1 -0
  32. package/esm2022/lib/table/index.js +9 -0
  33. package/esm2022/lib/table/index.js.map +1 -0
  34. package/esm2022/lib/table/table-column-visibility.service.js +105 -0
  35. package/esm2022/lib/table/table-column-visibility.service.js.map +1 -0
  36. package/esm2022/lib/table/table-crud-state.service.js +115 -0
  37. package/esm2022/lib/table/table-crud-state.service.js.map +1 -0
  38. package/esm2022/lib/table/table-data-converter.service.js +145 -0
  39. package/esm2022/lib/table/table-data-converter.service.js.map +1 -0
  40. package/esm2022/lib/table/table-data-utils.service.js +193 -0
  41. package/esm2022/lib/table/table-data-utils.service.js.map +1 -0
  42. package/esm2022/lib/table/table-selection.service.js +121 -0
  43. package/esm2022/lib/table/table-selection.service.js.map +1 -0
  44. package/esm2022/lib/table/table.component.js +413 -0
  45. package/esm2022/lib/table/table.component.js.map +1 -0
  46. package/esm2022/lib/table/table.types.js +5 -0
  47. package/esm2022/lib/table/table.types.js.map +1 -0
  48. package/esm2022/lib/table/table.utils.js +107 -0
  49. package/esm2022/lib/table/table.utils.js.map +1 -0
  50. package/lib/icon/icon.component.d.ts +1 -1
  51. package/lib/modal/index.d.ts +2 -3
  52. package/lib/stat-card/stat-card.component.d.ts +2 -2
  53. package/lib/table/index.d.ts +1 -0
  54. package/lib/table/table-column-visibility.service.d.ts +17 -35
  55. package/lib/table/table-crud-state.service.d.ts +10 -27
  56. package/lib/table/table-data-utils.service.d.ts +15 -5
  57. package/lib/table/table-selection.service.d.ts +19 -18
  58. package/lib/table/table.component.d.ts +123 -98
  59. package/lib/table/table.types.d.ts +25 -2
  60. package/lib/table/table.utils.d.ts +42 -0
  61. package/package.json +7 -9
  62. package/esm2022/c80-ui.mjs +0 -5
  63. package/esm2022/index.mjs +0 -6
  64. package/esm2022/lib/card-level/card-level.component.mjs +0 -57
  65. package/esm2022/lib/card-level/card-level.interface.mjs +0 -2
  66. package/esm2022/lib/card-level/index.mjs +0 -3
  67. package/esm2022/lib/icon/icon.component.mjs +0 -49
  68. package/esm2022/lib/icon/icon.constants.mjs +0 -237
  69. package/esm2022/lib/icon/icon.types.mjs +0 -2
  70. package/esm2022/lib/icon/icon.utils.mjs +0 -4
  71. package/esm2022/lib/icon/index.mjs +0 -4
  72. package/esm2022/lib/modal/index.mjs +0 -3
  73. package/esm2022/lib/modal/modal.component.mjs +0 -86
  74. package/esm2022/lib/modal/modal.service.mjs +0 -83
  75. package/esm2022/lib/stat-card/index.mjs +0 -2
  76. package/esm2022/lib/stat-card/stat-card.component.mjs +0 -16
  77. package/esm2022/lib/table/index.mjs +0 -8
  78. package/esm2022/lib/table/table-column-visibility.service.mjs +0 -156
  79. package/esm2022/lib/table/table-crud-state.service.mjs +0 -186
  80. package/esm2022/lib/table/table-data-converter.service.mjs +0 -145
  81. package/esm2022/lib/table/table-data-utils.service.mjs +0 -166
  82. package/esm2022/lib/table/table-selection.service.mjs +0 -138
  83. package/esm2022/lib/table/table.component.mjs +0 -476
  84. package/esm2022/lib/table/table.types.mjs +0 -5
@@ -0,0 +1,107 @@
1
+ /**
2
+ * Transform function para convertir valores string/boolean a boolean
3
+ * Usado en @Input() con transform para habilitar sintaxis de atributos booleanos
4
+ * @example [searchable]="true" o simplemente searchable
5
+ */
6
+ export function booleanAttribute(value) {
7
+ return value === '' || value === true || value === 'true';
8
+ }
9
+ /**
10
+ * Extrae mensaje de error de forma segura desde un objeto unknown
11
+ * @param err - Error desconocido (puede ser Error, string, object, etc.)
12
+ * @returns Mensaje de error legible
13
+ */
14
+ export function getErrorMessage(err) {
15
+ const error = err;
16
+ return error?.message || 'Error al cargar datos';
17
+ }
18
+ /**
19
+ * Obtiene el valor de un input HTML según el tipo de columna
20
+ * IMPORTANTE: Convierte el valor al tipo correcto antes de retornarlo
21
+ * @param event - Evento del input
22
+ * @param col - Definición de columna (opcional)
23
+ * @returns Valor extraído y convertido según el tipo de columna
24
+ */
25
+ export function getInputValue(event, col) {
26
+ if (col?.type === 'boolean') {
27
+ return event.target.checked;
28
+ }
29
+ const target = event.target;
30
+ const rawValue = target?.value;
31
+ if (!col) {
32
+ return rawValue;
33
+ }
34
+ return convertInputValueByType(rawValue, col.type);
35
+ }
36
+ /**
37
+ * Convierte un valor de input según el tipo de columna especificado
38
+ * @param rawValue - Valor crudo del input (string)
39
+ * @param type - Tipo de columna
40
+ * @returns Valor convertido al tipo apropiado
41
+ */
42
+ function convertInputValueByType(rawValue, type) {
43
+ if (!type || type === 'string' || type === 'password' || type === 'date') {
44
+ return rawValue;
45
+ }
46
+ if (type === 'integer' || type === 'number') {
47
+ return convertToNumber(rawValue, type === 'integer');
48
+ }
49
+ if (type === 'enum') {
50
+ return convertEnumValue(rawValue);
51
+ }
52
+ return rawValue;
53
+ }
54
+ /**
55
+ * Convierte string a number o integer
56
+ */
57
+ function convertToNumber(value, isInteger) {
58
+ if (value === '' || value === null || value === undefined) {
59
+ return undefined;
60
+ }
61
+ const num = Number(value);
62
+ if (Number.isNaN(num)) {
63
+ return undefined;
64
+ }
65
+ return isInteger ? Math.floor(num) : num;
66
+ }
67
+ /**
68
+ * Convierte valor de enum (intenta convertir a número si es posible)
69
+ */
70
+ function convertEnumValue(value) {
71
+ const num = Number(value);
72
+ return Number.isNaN(num) ? value : num;
73
+ }
74
+ /**
75
+ * Extrae el ID de una fila para usar como trackBy en ngFor
76
+ * @param index - Índice de la fila
77
+ * @param row - Fila de datos
78
+ * @returns ID como string o índice como fallback
79
+ */
80
+ export function trackById(index, row) {
81
+ const id = row && typeof row === 'object' && 'id' in row
82
+ ? row['id']
83
+ : undefined;
84
+ return typeof id === 'string' ? id : index;
85
+ }
86
+ /**
87
+ * Verifica si una acción debe mostrarse para una fila específica
88
+ * CREATE se excluye porque se maneja con el botón "+" en el header
89
+ * @param action - Acción a verificar
90
+ * @param row - Fila de datos
91
+ * @returns true si la acción debe mostrarse
92
+ */
93
+ export function shouldShowAction(action, row) {
94
+ if (action.name === 'create') {
95
+ return false;
96
+ }
97
+ return !action.condition || action.condition(row);
98
+ }
99
+ /**
100
+ * Obtiene el tooltip de una acción (usa tooltip personalizado o name por defecto)
101
+ * @param action - Acción
102
+ * @returns Texto del tooltip
103
+ */
104
+ export function getActionTooltip(action) {
105
+ return action.tooltip || action.name;
106
+ }
107
+ //# sourceMappingURL=table.utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"table.utils.js","sourceRoot":"","sources":["../../../../../libs/ui/src/lib/table/table.utils.ts"],"names":[],"mappings":"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","sourcesContent":["import type { C80TableColDef, CustomTableAction } from './table.types';\n\n/**\n * Transform function para convertir valores string/boolean a boolean\n * Usado en @Input() con transform para habilitar sintaxis de atributos booleanos\n * @example [searchable]=\"true\" o simplemente searchable\n */\nexport function booleanAttribute(value: boolean | string): boolean {\n return value === '' || value === true || value === 'true';\n}\n\n/**\n * Extrae mensaje de error de forma segura desde un objeto unknown\n * @param err - Error desconocido (puede ser Error, string, object, etc.)\n * @returns Mensaje de error legible\n */\nexport function getErrorMessage(err: unknown): string {\n const error = err as { message?: string };\n return error?.message || 'Error al cargar datos';\n}\n\n/**\n * Obtiene el valor de un input HTML según el tipo de columna\n * IMPORTANTE: Convierte el valor al tipo correcto antes de retornarlo\n * @param event - Evento del input\n * @param col - Definición de columna (opcional)\n * @returns Valor extraído y convertido según el tipo de columna\n */\nexport function getInputValue(event: Event, col?: C80TableColDef): unknown {\n if (col?.type === 'boolean') {\n return (event.target as HTMLInputElement).checked;\n }\n\n const target = event.target as HTMLInputElement | HTMLSelectElement;\n const rawValue = target?.value;\n\n if (!col) {\n return rawValue;\n }\n\n return convertInputValueByType(rawValue, col.type);\n}\n\n/**\n * Convierte un valor de input según el tipo de columna especificado\n * @param rawValue - Valor crudo del input (string)\n * @param type - Tipo de columna\n * @returns Valor convertido al tipo apropiado\n */\nfunction convertInputValueByType(\n rawValue: string,\n type?: 'string' | 'number' | 'integer' | 'boolean' | 'password' | 'enum' | 'date'\n): unknown {\n if (!type || type === 'string' || type === 'password' || type === 'date') {\n return rawValue;\n }\n\n if (type === 'integer' || type === 'number') {\n return convertToNumber(rawValue, type === 'integer');\n }\n\n if (type === 'enum') {\n return convertEnumValue(rawValue);\n }\n\n return rawValue;\n}\n\n/**\n * Convierte string a number o integer\n */\nfunction convertToNumber(value: string, isInteger: boolean): number | undefined {\n if (value === '' || value === null || value === undefined) {\n return undefined;\n }\n const num = Number(value);\n if (Number.isNaN(num)) {\n return undefined;\n }\n return isInteger ? Math.floor(num) : num;\n}\n\n/**\n * Convierte valor de enum (intenta convertir a número si es posible)\n */\nfunction convertEnumValue(value: string): string | number {\n const num = Number(value);\n return Number.isNaN(num) ? value : num;\n}\n\n/**\n * Extrae el ID de una fila para usar como trackBy en ngFor\n * @param index - Índice de la fila\n * @param row - Fila de datos\n * @returns ID como string o índice como fallback\n */\nexport function trackById<T extends Record<string, unknown>>(index: number, row: T): string | number {\n const id = row && typeof row === 'object' && 'id' in row\n ? (row as Record<string, unknown>)['id']\n : undefined;\n return typeof id === 'string' ? id : index;\n}\n\n/**\n * Verifica si una acción debe mostrarse para una fila específica\n * CREATE se excluye porque se maneja con el botón \"+\" en el header\n * @param action - Acción a verificar\n * @param row - Fila de datos\n * @returns true si la acción debe mostrarse\n */\nexport function shouldShowAction<T extends Record<string, unknown>>(\n action: CustomTableAction,\n row: T\n): boolean {\n if (action.name === 'create') {\n return false;\n }\n return !action.condition || action.condition(row);\n}\n\n/**\n * Obtiene el tooltip de una acción (usa tooltip personalizado o name por defecto)\n * @param action - Acción\n * @returns Texto del tooltip\n */\nexport function getActionTooltip(action: CustomTableAction): string {\n return action.tooltip || action.name;\n}\n"]}
@@ -16,7 +16,7 @@ export declare class C80IconComponent {
16
16
  readonly iconColor: import("@angular/core").Signal<string>;
17
17
  readonly iconOpacity: import("@angular/core").Signal<0.5 | 0.7 | 1>;
18
18
  readonly iconPath: import("@angular/core").Signal<string>;
19
- readonly additionalShapes: import("@angular/core").Signal<import("./icon.types").ShapeAttributes[]>;
19
+ readonly additionalShapes: import("@angular/core").Signal<import("@c80/ui").ShapeAttributes[]>;
20
20
  onButtonClick(event: Event): void;
21
21
  static ɵfac: i0.ɵɵFactoryDeclaration<C80IconComponent, never>;
22
22
  static ɵcmp: i0.ɵɵComponentDeclaration<C80IconComponent, "c80-icon", never, { "icon": { "alias": "icon"; "required": false; "isSignal": true; }; "color": { "alias": "color"; "required": false; "isSignal": true; }; "customColor": { "alias": "customColor"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "button": { "alias": "button"; "required": false; "isSignal": true; }; "border": { "alias": "border"; "required": false; "isSignal": true; }; "type": { "alias": "type"; "required": false; "isSignal": true; }; "textLeft": { "alias": "textLeft"; "required": false; "isSignal": true; }; "textRight": { "alias": "textRight"; "required": false; "isSignal": true; }; }, { "iconClick": "iconClick"; }, never, never, true, never>;
@@ -1,3 +1,2 @@
1
- export { C80ModalComponent } from './modal.component';
2
- export { ModalService } from './modal.service';
3
- export type { ModalConfig, ModalResult, ModalType } from './modal.component';
1
+ export * from './modal.component';
2
+ export * from './modal.service';
@@ -7,7 +7,7 @@ export interface CardDef {
7
7
  count: number;
8
8
  }
9
9
  export declare class C80StatCardComponent {
10
- cards: CardDef[];
10
+ readonly cards: import("@angular/core").InputSignal<CardDef[]>;
11
11
  static ɵfac: i0.ɵɵFactoryDeclaration<C80StatCardComponent, never>;
12
- static ɵcmp: i0.ɵɵComponentDeclaration<C80StatCardComponent, "c80-stat-card", never, { "cards": { "alias": "cards"; "required": false; }; }, {}, never, never, true, never>;
12
+ static ɵcmp: i0.ɵɵComponentDeclaration<C80StatCardComponent, "c80-stat-card", never, { "cards": { "alias": "cards"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
13
13
  }
@@ -1,5 +1,6 @@
1
1
  export * from './table.types';
2
2
  export * from './table.component';
3
+ export * from './table.utils';
3
4
  export * from './table-data-converter.service';
4
5
  export * from './table-column-visibility.service';
5
6
  export * from './table-data-utils.service';
@@ -1,4 +1,4 @@
1
- import { C80TableColDef, ID } from './table.types';
1
+ import { C80TableColDef } from './table.types';
2
2
  import * as i0 from "@angular/core";
3
3
  /**
4
4
  * Servicio para gestionar la lógica de visibilidad de columnas en tablas C80
@@ -10,6 +10,7 @@ import * as i0 from "@angular/core";
10
10
  */
11
11
  export declare class TableColumnVisibilityService {
12
12
  private readonly dataConverter;
13
+ private readonly dataUtils;
13
14
  /**
14
15
  * Actualiza las keys de columnas visibles basándose en el estado actual
15
16
  * @param columns - Definiciones de columnas
@@ -18,54 +19,35 @@ export declare class TableColumnVisibilityService {
18
19
  * @param editing - ID de fila en edición (null si no hay edición)
19
20
  * @returns Array de accessors de columnas visibles
20
21
  */
21
- updateVisibleKeys<T extends Record<string, unknown>>(columns: C80TableColDef[], data: T[], creating: boolean, editing: ID | null): string[];
22
+ updateVisibleKeys<T extends Record<string, unknown>>(columns: C80TableColDef[], data: T[], creating: boolean, editing: string | null): string[];
22
23
  /**
23
24
  * Determina si una columna debe ser visible basándose en su configuración y datos
25
+ * Método unificado que maneja todos los casos de visibilidad
24
26
  * @param column - La definición de la columna
25
27
  * @param data - Datos actuales de la tabla
26
- * @param forceShowInCreation - Si es true, ignora hideIfAllValuesAreNull (usado en modo creación)
28
+ * @param options - Opciones de contexto (creación, edición, fila específica)
27
29
  * @returns true si la columna debe ser visible
28
30
  */
29
- isColumnVisible<T extends Record<string, unknown>>(column: C80TableColDef, data: T[], forceShowInCreation?: boolean): boolean;
31
+ isColumnVisible<T extends Record<string, unknown>>(column: C80TableColDef, data: T[], options?: {
32
+ forceShowInCreation?: boolean;
33
+ creating?: boolean;
34
+ editing?: string | null;
35
+ row?: T;
36
+ }): boolean;
30
37
  /**
31
38
  * Determina si una columna debe ser visible en los headers
32
- * @param column - La definición de la columna
33
- * @param data - Datos actuales de la tabla
34
- * @param creating - Si está en modo creación
35
- * @param editing - ID de fila en edición (null si no hay edición)
36
- * @returns true si el header debe ser visible
39
+ * Wrapper para mantener compatibilidad con API existente
37
40
  */
38
- isColumnVisibleInHeader<T extends Record<string, unknown>>(column: C80TableColDef, data: T[], creating: boolean, editing: ID | null): boolean;
41
+ isColumnVisibleInHeader<T extends Record<string, unknown>>(column: C80TableColDef, data: T[], creating: boolean, editing: string | null): boolean;
39
42
  /**
40
- * Determina si una columna debe ser visible en una fila específica considerando el modo edición
41
- * @param column - La definición de la columna
42
- * @param row - La fila actual
43
- * @param data - Datos actuales de la tabla
44
- * @param editing - ID de fila en edición (null si no hay edición)
45
- * @returns true si la columna debe ser visible para esta fila
43
+ * Determina si una columna debe ser visible en una fila específica
44
+ * Wrapper para mantener compatibilidad con API existente
46
45
  */
47
- isColumnVisibleForRow<T extends Record<string, unknown>>(column: C80TableColDef, row: T, data: T[], editing: ID | null): boolean;
46
+ isColumnVisibleForRow<T extends Record<string, unknown>>(column: C80TableColDef, row: T, data: T[], editing: string | null): boolean;
48
47
  /**
49
48
  * Verifica si todos los valores de una columna están vacíos/nulos
50
- * @param column - La definición de la columna
51
- * @param data - Datos actuales de la tabla
52
- * @returns true si todos los valores están vacíos
53
- */
54
- areAllColumnValuesEmpty<T extends Record<string, unknown>>(column: C80TableColDef, data: T[]): boolean;
55
- /**
56
- * Obtiene el valor de una celda usando el accessor, soportando notación de punto para propiedades anidadas
57
- * @param row - La fila de datos
58
- * @param accessor - El accessor de la columna
59
- * @returns El valor de la celda
60
- */
61
- private getCellValue;
62
- /**
63
- * Obtiene el valor de un objeto usando notación de punto (ej: 'task.name')
64
- * @param obj - Objeto del cual obtener el valor
65
- * @param accessor - Ruta de acceso usando notación de punto
66
- * @returns El valor anidado o undefined
67
49
  */
68
- private getNestedValue;
50
+ private areAllColumnValuesEmpty;
69
51
  static ɵfac: i0.ɵɵFactoryDeclaration<TableColumnVisibilityService, never>;
70
52
  static ɵprov: i0.ɵɵInjectableDeclaration<TableColumnVisibilityService>;
71
53
  }
@@ -1,5 +1,4 @@
1
- import { EventEmitter } from '@angular/core';
2
- import { C80TableColDef, ID } from './table.types';
1
+ import { C80TableColDef } from './table.types';
3
2
  import * as i0 from "@angular/core";
4
3
  /**
5
4
  * Servicio para gestionar el estado CRUD (Crear, Leer, Actualizar, Eliminar) en tablas C80
@@ -8,19 +7,15 @@ import * as i0 from "@angular/core";
8
7
  * - Estado de creación y edición
9
8
  * - Gestión de datos temporales (newRow, editRow)
10
9
  * - Aplicación de valores dinámicos
11
- * - Validación y conversión de datos antes de emisión de eventos
10
+ * - Validación y conversión de datos
12
11
  */
13
12
  export declare class TableCrudStateService {
14
13
  private readonly visibilityService;
15
- private readonly dataConverter;
14
+ private readonly dataUtils;
16
15
  /**
17
16
  * Filtra columnas visibles y editables
18
17
  */
19
18
  private getEditableColumns;
20
- /**
21
- * Convierte valores de row según definición de columnas
22
- */
23
- private convertRowValues;
24
19
  /**
25
20
  * Inicializa row para creación con valores por defecto
26
21
  */
@@ -36,34 +31,22 @@ export declare class TableCrudStateService {
36
31
  createCrudState<T extends Record<string, unknown>>(): {
37
32
  creating: import("@angular/core").Signal<boolean>;
38
33
  newRow: import("@angular/core").Signal<Partial<T> | null>;
39
- editing: import("@angular/core").Signal<ID | null>;
34
+ editing: import("@angular/core").Signal<string | null>;
40
35
  editRow: import("@angular/core").Signal<Partial<T> | null>;
41
36
  startCreate: (columns: C80TableColDef[], data: T[]) => void;
42
37
  cancelCreate: () => void;
43
38
  updateNewRow: (key: string, value: unknown) => void;
44
- saveCreate: (columns: C80TableColDef[], data: T[], createEmitter: EventEmitter<{
45
- row: Partial<T>;
46
- done: (result: boolean) => void;
47
- }>) => void;
48
39
  startEdit: (row: T, columns: C80TableColDef[], data: T[]) => void;
49
40
  cancelEdit: () => void;
50
41
  updateEditRow: (key: string, value: unknown) => void;
51
- saveEdit: (rowId: ID, columns: C80TableColDef[], data: T[], updateEmitter: EventEmitter<{
52
- id: ID;
53
- changes: Partial<T>;
54
- done: (result: boolean) => void;
55
- }>) => void;
56
42
  applyInputValues: (partialValues: Partial<T>) => void;
57
43
  };
58
- private createStartCreateFn;
59
- private createCancelCreateFn;
60
- private createUpdateNewRowFn;
61
- private createSaveCreateFn;
62
- private createStartEditFn;
63
- private createCancelEditFn;
64
- private createUpdateEditRowFn;
65
- private createSaveEditFn;
66
- private createApplyInputValuesFn;
44
+ private startCreate;
45
+ private cancelCreate;
46
+ private updateRow;
47
+ private startEdit;
48
+ private cancelEdit;
49
+ private applyInputValues;
67
50
  static ɵfac: i0.ɵɵFactoryDeclaration<TableCrudStateService, never>;
68
51
  static ɵprov: i0.ɵɵInjectableDeclaration<TableCrudStateService>;
69
52
  }
@@ -27,15 +27,25 @@ export declare class TableDataUtilsService {
27
27
  /**
28
28
  * Devuelve el valor de display para una celda, mostrando '-' para valores falsy excepto 0, false y objetos/arrays vacíos
29
29
  * @param value - Valor a formatear
30
+ * @param col - Definición de columna (opcional) para formateo específico por tipo
30
31
  * @returns Cadena formateada para display
31
32
  */
32
- getDisplayValue(value: unknown): string;
33
+ getDisplayValue(value: unknown, col?: C80TableColDef): string;
34
+ private formatValueByType;
35
+ private formatPrimitiveValue;
33
36
  /**
34
- * Obtiene el texto de display para un valor enum
35
- * @param value - Valor del enum
36
- * @param col - Definición de la columna
37
- * @returns Texto formateado del enum
37
+ * Formatea un valor de fecha a formato legible
38
+ * @param value - Valor de fecha (Date, string ISO, timestamp)
39
+ * @returns Fecha formateada como DD/MM/YYYY HH:MM
38
40
  */
41
+ private formatDateValue;
42
+ private parseDate;
43
+ private formatObjectValue; /**
44
+ * Obtiene el texto de display para un valor enum
45
+ * @param value - Valor del enum
46
+ * @param col - Definición de la columna
47
+ * @returns Texto formateado del enum
48
+ */
39
49
  getEnumDisplayValue(value: unknown, col: C80TableColDef): string;
40
50
  /**
41
51
  * Obtiene las opciones del enum como array para dropdowns select
@@ -1,5 +1,4 @@
1
- import { EventEmitter } from '@angular/core';
2
- import { ID } from './table.types';
1
+ import { OutputEmitterRef } from '@angular/core';
3
2
  import * as i0 from "@angular/core";
4
3
  /**
5
4
  * Servicio para gestionar la selección de elementos en tablas C80
@@ -15,31 +14,33 @@ export declare class TableSelectionService {
15
14
  * Inicializa el estado de selección para una nueva tabla
16
15
  * @returns Objeto con signals y métodos de selección
17
16
  */
18
- createSelectionState<_T extends Record<string, unknown>>(): {
19
- selectedItems: import("@angular/core").Signal<Set<ID>>;
17
+ createSelectionState<T extends Record<string, unknown>>(): {
18
+ selectedItems: import("@angular/core").Signal<Set<string>>;
20
19
  selectAllChecked: import("@angular/core").Signal<boolean>;
21
20
  selectAllIndeterminate: import("@angular/core").Signal<boolean>;
22
21
  clearSelection: () => void;
23
- toggleSelectAll: (allItems: Record<string, unknown>[]) => void;
24
- toggleItemSelection: (item: Record<string, unknown>, multiple: boolean) => void;
25
- isItemSelected: (item: Record<string, unknown>) => boolean;
26
- preserveSelection: (newData: Record<string, unknown>[]) => void;
27
- getSelectedItems: (allData: Record<string, unknown>[]) => Record<string, unknown>[];
22
+ toggleSelectAll: (allItems: T[]) => void;
23
+ toggleItemSelection: (item: T, multiple: boolean) => void;
24
+ isItemSelected: (item: T) => boolean;
25
+ preserveSelection: (newData: T[]) => void;
26
+ getSelectedItems: (allData: T[]) => T[];
28
27
  };
29
- private createClearSelectionFn;
30
- private createToggleSelectAllFn;
31
- private createToggleItemSelectionFn;
32
- private createIsItemSelectedFn;
33
- private createPreserveSelectionFn;
34
- private createGetSelectedItemsFn;
28
+ private clearSelection;
29
+ private toggleSelectAll;
30
+ private toggleItemSelection;
31
+ private isItemSelected;
32
+ private preserveSelection;
33
+ private getSelectedItems;
35
34
  private updateSelectAllState;
36
35
  /**
37
- * Emite los elementos seleccionados a través del EventEmitter proporcionado
36
+ * Emite los elementos seleccionados a través del output proporcionado
38
37
  * @param selectionState - Estado de selección
39
38
  * @param allData - Todos los datos de la tabla
40
- * @param selectableEmitter - EventEmitter para emitir la selección
39
+ * @param selectableEmitter - Output para emitir la selección
41
40
  */
42
- emitSelection<T extends Record<string, unknown>>(selectionState: ReturnType<typeof this.createSelectionState>, allData: T[], selectableEmitter: EventEmitter<T[]>): void;
41
+ emitSelection<T extends Record<string, unknown>>(selectionState: {
42
+ getSelectedItems: (allData: T[]) => T[];
43
+ }, allData: T[], selectableEmitter: OutputEmitterRef<T[]>): void;
43
44
  static ɵfac: i0.ɵɵFactoryDeclaration<TableSelectionService, never>;
44
45
  static ɵprov: i0.ɵɵInjectableDeclaration<TableSelectionService>;
45
46
  }