ngx-dsxlibrary 2.21.68 → 2.21.69

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.
@@ -1,57 +1,200 @@
1
1
  import * as i0 from '@angular/core';
2
- import { input, Component } from '@angular/core';
2
+ import { input, signal, computed, isDevMode, effect, ChangeDetectionStrategy, Component } from '@angular/core';
3
3
  import * as i1 from 'primeng/avatar';
4
4
  import { AvatarModule } from 'primeng/avatar';
5
5
 
6
6
  class HeaderDsx {
7
+ // Inputs
7
8
  id = input(null, ...(ngDevMode ? [{ debugName: "id" }] : /* istanbul ignore next */ []));
8
9
  etiqueta = input.required(...(ngDevMode ? [{ debugName: "etiqueta" }] : /* istanbul ignore next */ []));
9
10
  defaultPNG = input('icon/folder_001.png', ...(ngDevMode ? [{ debugName: "defaultPNG" }] : /* istanbul ignore next */ []));
10
11
  defaultGIF = input('gif/file.gif', ...(ngDevMode ? [{ debugName: "defaultGIF" }] : /* istanbul ignore next */ []));
11
12
  icoPNG = input(null, ...(ngDevMode ? [{ debugName: "icoPNG" }] : /* istanbul ignore next */ []));
12
13
  icoGIF = input(null, ...(ngDevMode ? [{ debugName: "icoGIF" }] : /* istanbul ignore next */ []));
13
- icono = null;
14
- textoEncabezado = null;
15
14
  subTitulo = input(null, ...(ngDevMode ? [{ debugName: "subTitulo" }] : /* istanbul ignore next */ []));
15
+ debug = input(false, ...(ngDevMode ? [{ debugName: "debug" }] : /* istanbul ignore next */ []));
16
+ // Signals
17
+ icono = signal(null, ...(ngDevMode ? [{ debugName: "icono" }] : /* istanbul ignore next */ []));
18
+ textoEncabezado = signal(null, ...(ngDevMode ? [{ debugName: "textoEncabezado" }] : /* istanbul ignore next */ []));
19
+ // Métricas de performance públicas
20
+ performanceMetrics = {
21
+ renderCount: 0,
22
+ lastRenderTime: 0,
23
+ totalRenderTime: 0,
24
+ averageRenderTime: 0,
25
+ lastUpdateTimestamp: 0,
26
+ };
27
+ // Computed
28
+ modo = computed(() => {
29
+ const id = this.id();
30
+ if (id === null)
31
+ return 'Lista';
32
+ if (id === 0)
33
+ return 'Registro';
34
+ if (id > 0)
35
+ return 'Edición';
36
+ return 'Desconocido';
37
+ }, ...(ngDevMode ? [{ debugName: "modo" }] : /* istanbul ignore next */ []));
38
+ // Control de producción
39
+ isProduction = !isDevMode();
40
+ constructor() {
41
+ effect(() => {
42
+ if (this.debug() && !this.isProduction) {
43
+ this.logPerformance('Debug mode activado');
44
+ }
45
+ });
46
+ }
16
47
  ngOnInit() {
48
+ const startTime = performance.now();
17
49
  this.definirTexto();
18
- //throw new Error('Method not implemented.');
50
+ this.performanceMetrics.lastUpdateTimestamp = Date.now();
51
+ this.logPerformance('Componente inicializado');
52
+ const endTime = performance.now();
53
+ this.logPerformance(`Tiempo de inicialización: ${(endTime - startTime).toFixed(2)}ms`);
54
+ }
55
+ ngOnChanges(changes) {
56
+ const startTime = performance.now();
57
+ this.performanceMetrics.renderCount++;
58
+ // Solo procesar si hay cambios relevantes
59
+ if (this.tieneCambiosRelevantes(changes)) {
60
+ this.logPerformance('Detectado cambio en inputs', {
61
+ cambios: Object.keys(changes),
62
+ idActual: this.id(),
63
+ idAnterior: changes['id']?.previousValue,
64
+ idNuevo: changes['id']?.currentValue,
65
+ });
66
+ this.definirTexto();
67
+ }
68
+ const endTime = performance.now();
69
+ const renderTime = endTime - startTime;
70
+ this.performanceMetrics.lastRenderTime = renderTime;
71
+ this.performanceMetrics.totalRenderTime += renderTime;
72
+ this.performanceMetrics.averageRenderTime =
73
+ this.performanceMetrics.totalRenderTime /
74
+ this.performanceMetrics.renderCount;
75
+ this.logPerformance('Cambio procesado', {
76
+ renderTime: renderTime.toFixed(2) + 'ms',
77
+ renderCount: this.performanceMetrics.renderCount,
78
+ avgRenderTime: this.performanceMetrics.averageRenderTime.toFixed(2) + 'ms',
79
+ });
80
+ }
81
+ tieneCambiosRelevantes(changes) {
82
+ const relevantKeys = ['id', 'etiqueta', 'icoPNG', 'icoGIF', 'subTitulo'];
83
+ for (const key of relevantKeys) {
84
+ if (changes[key] &&
85
+ changes[key].currentValue !== changes[key].previousValue) {
86
+ return true;
87
+ }
88
+ }
89
+ return false;
19
90
  }
20
91
  definirTexto() {
21
- // Validaciones para el texto del encabezado según el valor de ID
22
- // Caso 1: No se proporcionó ID (indefinido o nulo) -> Plural
23
- if (this.id() === null) {
24
- this.textoEncabezado = this.etiqueta();
92
+ const startTime = performance.now();
93
+ const idActual = this.id();
94
+ if (this.debug() && !this.isProduction) {
95
+ console.group(`🔍 HeaderDsx - Definiendo texto para ID: ${idActual}`);
25
96
  }
26
- // Caso 2: El ID existe y vale exactamente 0 -> Registrar
27
- else if (this.id() === 0) {
28
- this.textoEncabezado = `Registrar ${this.etiqueta()}`;
97
+ let nuevoTexto;
98
+ let nuevoIcono = null;
99
+ // Determinar texto
100
+ if (idActual === null) {
101
+ nuevoTexto = this.etiqueta();
102
+ this.logDebug('Caso 1: ID null - Modo lista');
29
103
  }
30
- // Caso 3: El ID es mayor que 0 -> Editar
31
- else if (this.id() > 0) {
32
- this.textoEncabezado = `Editar ${this.etiqueta()}`;
104
+ else if (idActual === 0) {
105
+ nuevoTexto = `Registrar ${this.etiqueta()}`;
106
+ this.logDebug('Caso 2: ID = 0 - Modo registro');
33
107
  }
34
- // Validaciones para el icono según el valor de ID
35
- // Caso 1: No se proporcionó ningún icono -> Usar el icono por defecto
36
- if (this.icoPNG() === null && this.icoGIF() === null) {
37
- this.icono = this.defaultPNG();
108
+ else if (idActual > 0) {
109
+ nuevoTexto = `Editar ${this.etiqueta()}`;
110
+ this.logDebug('Caso 3: ID > 0 - Modo edición', {
111
+ id: idActual,
112
+ texto: nuevoTexto,
113
+ });
38
114
  }
39
- // Caso 2: Se proporcionó un icono PNG -> Usar el icono PNG
40
- else if (this.icoPNG() !== null) {
41
- this.icono = this.icoPNG();
115
+ else {
116
+ nuevoTexto = this.etiqueta();
117
+ this.logDebug('Caso desconocido', { id: idActual });
118
+ }
119
+ // Determinar icono
120
+ if (this.icoPNG() !== null) {
121
+ nuevoIcono = this.icoPNG();
122
+ this.logDebug('Icono: Usando PNG personalizado', { icono: nuevoIcono });
42
123
  }
43
- // Caso 3: Se proporcionó un icono GIF -> Usar el icono GIF
44
124
  else if (this.icoGIF() !== null) {
45
- this.icono = this.icoGIF();
125
+ nuevoIcono = this.icoGIF();
126
+ this.logDebug('Icono: Usando GIF personalizado', { icono: nuevoIcono });
127
+ }
128
+ else {
129
+ nuevoIcono = this.defaultPNG();
130
+ this.logDebug('Icono: Usando default', { icono: nuevoIcono });
131
+ }
132
+ // Actualizar solo si hay cambios
133
+ if (this.textoEncabezado() !== nuevoTexto) {
134
+ this.textoEncabezado.set(nuevoTexto);
135
+ }
136
+ if (this.icono() !== nuevoIcono) {
137
+ this.icono.set(nuevoIcono);
138
+ }
139
+ this.logDebug('Estado final actualizado', {
140
+ texto: nuevoTexto,
141
+ icono: nuevoIcono,
142
+ id: idActual,
143
+ modo: this.modo(),
144
+ });
145
+ if (this.debug() && !this.isProduction) {
146
+ console.groupEnd();
147
+ }
148
+ const endTime = performance.now();
149
+ this.logPerformance(`Tiempo de definición de texto: ${(endTime - startTime).toFixed(2)}ms`);
150
+ }
151
+ logDebug(message, data) {
152
+ if (this.debug() && !this.isProduction) {
153
+ console.log(`[HeaderDsx Debug] ${message}`, data ? data : '');
154
+ }
155
+ }
156
+ logPerformance(message, data) {
157
+ if (this.debug() && !this.isProduction) {
158
+ console.log(`⚡ [HeaderDsx Performance] ${message}`, data ? data : '');
159
+ }
160
+ }
161
+ // Métodos públicos
162
+ getPerformanceMetrics() {
163
+ return {
164
+ ...this.performanceMetrics,
165
+ currentMode: this.modo(),
166
+ currentText: this.textoEncabezado(),
167
+ currentIcon: this.icono(),
168
+ currentId: this.id(),
169
+ };
170
+ }
171
+ getPerformanceSummary() {
172
+ const metrics = this.performanceMetrics;
173
+ return `📊 Renders: ${metrics.renderCount} | Promedio: ${metrics.averageRenderTime.toFixed(2)}ms | Último: ${metrics.lastRenderTime.toFixed(2)}ms`;
174
+ }
175
+ debugInfo() {
176
+ if (this.debug() && !this.isProduction) {
177
+ console.group('=== HeaderDsx Debug Info ===');
178
+ console.log('ID:', this.id());
179
+ console.log('Etiqueta:', this.etiqueta());
180
+ console.log('Texto Encabezado:', this.textoEncabezado());
181
+ console.log('Icono:', this.icono());
182
+ console.log('Subtítulo:', this.subTitulo());
183
+ console.log('Modo:', this.modo());
184
+ console.log('Debug Mode:', this.debug());
185
+ console.log('Performance Metrics:', this.getPerformanceMetrics());
186
+ console.log('Performance Summary:', this.getPerformanceSummary());
187
+ console.log('===============================');
188
+ console.groupEnd();
46
189
  }
47
190
  }
48
191
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: HeaderDsx, deps: [], target: i0.ɵɵFactoryTarget.Component });
49
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.17", type: HeaderDsx, isStandalone: true, selector: "header-dsx", inputs: { id: { classPropertyName: "id", publicName: "id", isSignal: true, isRequired: false, transformFunction: null }, etiqueta: { classPropertyName: "etiqueta", publicName: "etiqueta", isSignal: true, isRequired: true, transformFunction: null }, defaultPNG: { classPropertyName: "defaultPNG", publicName: "defaultPNG", isSignal: true, isRequired: false, transformFunction: null }, defaultGIF: { classPropertyName: "defaultGIF", publicName: "defaultGIF", isSignal: true, isRequired: false, transformFunction: null }, icoPNG: { classPropertyName: "icoPNG", publicName: "icoPNG", isSignal: true, isRequired: false, transformFunction: null }, icoGIF: { classPropertyName: "icoGIF", publicName: "icoGIF", isSignal: true, isRequired: false, transformFunction: null }, subTitulo: { classPropertyName: "subTitulo", publicName: "subTitulo", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<div class=\"area-fieldset-header flex items-center gap-2 px-2\">\r\n <p-avatar [image]=\"icono!\"></p-avatar>\r\n <div class=\"flex flex-col\">\r\n <h3>{{ textoEncabezado }}</h3>\r\n @if(subTitulo() !== null ){\r\n <ng-container>\r\n <span class=\"text-xs text-gray-600\">{{ subTitulo() }}</span>\r\n </ng-container>\r\n }\r\n </div>\r\n</div>\r\n", styles: [""], dependencies: [{ kind: "ngmodule", type: AvatarModule }, { kind: "component", type: i1.Avatar, selector: "p-avatar", inputs: ["label", "icon", "image", "size", "shape", "styleClass", "ariaLabel", "ariaLabelledBy"], outputs: ["onImageError"] }] });
192
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.17", type: HeaderDsx, isStandalone: true, selector: "header-dsx", inputs: { id: { classPropertyName: "id", publicName: "id", isSignal: true, isRequired: false, transformFunction: null }, etiqueta: { classPropertyName: "etiqueta", publicName: "etiqueta", isSignal: true, isRequired: true, transformFunction: null }, defaultPNG: { classPropertyName: "defaultPNG", publicName: "defaultPNG", isSignal: true, isRequired: false, transformFunction: null }, defaultGIF: { classPropertyName: "defaultGIF", publicName: "defaultGIF", isSignal: true, isRequired: false, transformFunction: null }, icoPNG: { classPropertyName: "icoPNG", publicName: "icoPNG", isSignal: true, isRequired: false, transformFunction: null }, icoGIF: { classPropertyName: "icoGIF", publicName: "icoGIF", isSignal: true, isRequired: false, transformFunction: null }, subTitulo: { classPropertyName: "subTitulo", publicName: "subTitulo", isSignal: true, isRequired: false, transformFunction: null }, debug: { classPropertyName: "debug", publicName: "debug", isSignal: true, isRequired: false, transformFunction: null } }, usesOnChanges: true, ngImport: i0, template: "<div class=\"area-fieldset-header flex items-center gap-2 px-2\">\r\n <p-avatar [image]=\"icono()!\"></p-avatar>\r\n <div class=\"flex flex-col\">\r\n <h3>{{ textoEncabezado() }}</h3>\r\n @if(subTitulo() !== null ){\r\n <span class=\"text-xs text-gray-600\">{{ subTitulo() }}</span>\r\n }\r\n <!-- Debug info con m\u00E9tricas de performance -->\r\n @if(debug()){\r\n <div\r\n class=\"text-xs mt-1 px-2 py-1 rounded flex flex-wrap items-center gap-1\"\r\n [class]=\"id() === 0 ? 'bg-blue-50 text-blue-700' : \r\n id() !== null && id()! > 0 ? 'bg-green-50 text-green-700' : \r\n 'bg-gray-50 text-gray-700'\"\r\n >\r\n <span>\uD83D\uDD0D</span>\r\n <span>ID: {{ id() }}</span>\r\n <span>|</span>\r\n <span>Modo: <strong>{{ modo() }}</strong></span>\r\n <span>|</span>\r\n <span>Texto: {{ textoEncabezado() }}</span>\r\n @if(id() !== null && id()! > 0){\r\n <span class=\"ml-1 text-xs\">(Editando ID {{ id() }})</span>\r\n }\r\n <!-- M\u00E9tricas de performance -->\r\n <span class=\"ml-1 text-xs text-gray-400\">\r\n | Render: {{ performanceMetrics.renderCount }} | Avg: {{\r\n performanceMetrics.averageRenderTime.toFixed(1) }}ms\r\n </span>\r\n </div>\r\n }\r\n </div>\r\n</div>\r\n", styles: [""], dependencies: [{ kind: "ngmodule", type: AvatarModule }, { kind: "component", type: i1.Avatar, selector: "p-avatar", inputs: ["label", "icon", "image", "size", "shape", "styleClass", "ariaLabel", "ariaLabelledBy"], outputs: ["onImageError"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
50
193
  }
51
194
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: HeaderDsx, decorators: [{
52
195
  type: Component,
53
- args: [{ selector: 'header-dsx', imports: [AvatarModule], template: "<div class=\"area-fieldset-header flex items-center gap-2 px-2\">\r\n <p-avatar [image]=\"icono!\"></p-avatar>\r\n <div class=\"flex flex-col\">\r\n <h3>{{ textoEncabezado }}</h3>\r\n @if(subTitulo() !== null ){\r\n <ng-container>\r\n <span class=\"text-xs text-gray-600\">{{ subTitulo() }}</span>\r\n </ng-container>\r\n }\r\n </div>\r\n</div>\r\n" }]
54
- }], propDecorators: { id: [{ type: i0.Input, args: [{ isSignal: true, alias: "id", required: false }] }], etiqueta: [{ type: i0.Input, args: [{ isSignal: true, alias: "etiqueta", required: true }] }], defaultPNG: [{ type: i0.Input, args: [{ isSignal: true, alias: "defaultPNG", required: false }] }], defaultGIF: [{ type: i0.Input, args: [{ isSignal: true, alias: "defaultGIF", required: false }] }], icoPNG: [{ type: i0.Input, args: [{ isSignal: true, alias: "icoPNG", required: false }] }], icoGIF: [{ type: i0.Input, args: [{ isSignal: true, alias: "icoGIF", required: false }] }], subTitulo: [{ type: i0.Input, args: [{ isSignal: true, alias: "subTitulo", required: false }] }] } });
196
+ args: [{ selector: 'header-dsx', imports: [AvatarModule], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"area-fieldset-header flex items-center gap-2 px-2\">\r\n <p-avatar [image]=\"icono()!\"></p-avatar>\r\n <div class=\"flex flex-col\">\r\n <h3>{{ textoEncabezado() }}</h3>\r\n @if(subTitulo() !== null ){\r\n <span class=\"text-xs text-gray-600\">{{ subTitulo() }}</span>\r\n }\r\n <!-- Debug info con m\u00E9tricas de performance -->\r\n @if(debug()){\r\n <div\r\n class=\"text-xs mt-1 px-2 py-1 rounded flex flex-wrap items-center gap-1\"\r\n [class]=\"id() === 0 ? 'bg-blue-50 text-blue-700' : \r\n id() !== null && id()! > 0 ? 'bg-green-50 text-green-700' : \r\n 'bg-gray-50 text-gray-700'\"\r\n >\r\n <span>\uD83D\uDD0D</span>\r\n <span>ID: {{ id() }}</span>\r\n <span>|</span>\r\n <span>Modo: <strong>{{ modo() }}</strong></span>\r\n <span>|</span>\r\n <span>Texto: {{ textoEncabezado() }}</span>\r\n @if(id() !== null && id()! > 0){\r\n <span class=\"ml-1 text-xs\">(Editando ID {{ id() }})</span>\r\n }\r\n <!-- M\u00E9tricas de performance -->\r\n <span class=\"ml-1 text-xs text-gray-400\">\r\n | Render: {{ performanceMetrics.renderCount }} | Avg: {{\r\n performanceMetrics.averageRenderTime.toFixed(1) }}ms\r\n </span>\r\n </div>\r\n }\r\n </div>\r\n</div>\r\n" }]
197
+ }], ctorParameters: () => [], propDecorators: { id: [{ type: i0.Input, args: [{ isSignal: true, alias: "id", required: false }] }], etiqueta: [{ type: i0.Input, args: [{ isSignal: true, alias: "etiqueta", required: true }] }], defaultPNG: [{ type: i0.Input, args: [{ isSignal: true, alias: "defaultPNG", required: false }] }], defaultGIF: [{ type: i0.Input, args: [{ isSignal: true, alias: "defaultGIF", required: false }] }], icoPNG: [{ type: i0.Input, args: [{ isSignal: true, alias: "icoPNG", required: false }] }], icoGIF: [{ type: i0.Input, args: [{ isSignal: true, alias: "icoGIF", required: false }] }], subTitulo: [{ type: i0.Input, args: [{ isSignal: true, alias: "subTitulo", required: false }] }], debug: [{ type: i0.Input, args: [{ isSignal: true, alias: "debug", required: false }] }] } });
55
198
 
56
199
  /**
57
200
  * Generated bundle index. Do not edit.
@@ -1 +1 @@
1
- {"version":3,"file":"ngx-dsxlibrary-src-lib-primengdsx.mjs","sources":["../../../projects/ngx-dsx/src/lib/primengdsx/src/fieldset/header/header-dsx/header-dsx.ts","../../../projects/ngx-dsx/src/lib/primengdsx/src/fieldset/header/header-dsx/header-dsx.html","../../../projects/ngx-dsx/src/lib/primengdsx/ngx-dsxlibrary-src-lib-primengdsx.ts"],"sourcesContent":["import { Component, input, OnInit } from '@angular/core';\r\nimport { AvatarModule } from 'primeng/avatar';\r\n\r\n@Component({\r\n selector: 'header-dsx',\r\n imports: [AvatarModule],\r\n templateUrl: './header-dsx.html',\r\n styleUrl: './header-dsx.css',\r\n})\r\nexport class HeaderDsx implements OnInit {\r\n id = input<number | null>(null);\r\n etiqueta = input.required<string>();\r\n defaultPNG = input<string>('icon/folder_001.png');\r\n defaultGIF = input<string>('gif/file.gif');\r\n icoPNG = input<string | null>(null);\r\n icoGIF = input<string | null>(null);\r\n icono: string | null = null;\r\n textoEncabezado: string | null = null;\r\n subTitulo = input<string | null>(null);\r\n\r\n ngOnInit(): void {\r\n this.definirTexto();\r\n //throw new Error('Method not implemented.');\r\n }\r\n\r\n private definirTexto(): void {\r\n // Validaciones para el texto del encabezado según el valor de ID\r\n // Caso 1: No se proporcionó ID (indefinido o nulo) -> Plural\r\n if (this.id() === null) {\r\n this.textoEncabezado = this.etiqueta();\r\n }\r\n // Caso 2: El ID existe y vale exactamente 0 -> Registrar\r\n else if (this.id() === 0) {\r\n this.textoEncabezado = `Registrar ${this.etiqueta()}`;\r\n }\r\n // Caso 3: El ID es mayor que 0 -> Editar\r\n else if (this.id()! > 0) {\r\n this.textoEncabezado = `Editar ${this.etiqueta()}`;\r\n }\r\n\r\n // Validaciones para el icono según el valor de ID\r\n // Caso 1: No se proporcionó ningún icono -> Usar el icono por defecto\r\n if (this.icoPNG() === null && this.icoGIF() === null) {\r\n this.icono = this.defaultPNG();\r\n }\r\n // Caso 2: Se proporcionó un icono PNG -> Usar el icono PNG\r\n else if (this.icoPNG() !== null) {\r\n this.icono = this.icoPNG();\r\n }\r\n // Caso 3: Se proporcionó un icono GIF -> Usar el icono GIF\r\n else if (this.icoGIF() !== null) {\r\n this.icono = this.icoGIF();\r\n }\r\n }\r\n}\r\n","<div class=\"area-fieldset-header flex items-center gap-2 px-2\">\r\n <p-avatar [image]=\"icono!\"></p-avatar>\r\n <div class=\"flex flex-col\">\r\n <h3>{{ textoEncabezado }}</h3>\r\n @if(subTitulo() !== null ){\r\n <ng-container>\r\n <span class=\"text-xs text-gray-600\">{{ subTitulo() }}</span>\r\n </ng-container>\r\n }\r\n </div>\r\n</div>\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":"ngx-dsxlibrary-src-lib-primengdsx.mjs","sources":["../../../projects/ngx-dsx/src/lib/primengdsx/src/fieldset/header/header-dsx/header-dsx.ts","../../../projects/ngx-dsx/src/lib/primengdsx/src/fieldset/header/header-dsx/header-dsx.html","../../../projects/ngx-dsx/src/lib/primengdsx/ngx-dsxlibrary-src-lib-primengdsx.ts"],"sourcesContent":["import {\r\n Component,\r\n input,\r\n OnInit,\r\n OnChanges,\r\n SimpleChanges,\r\n signal,\r\n computed,\r\n effect,\r\n ChangeDetectionStrategy,\r\n isDevMode,\r\n} from '@angular/core';\r\nimport { AvatarModule } from 'primeng/avatar';\r\n\r\n@Component({\r\n selector: 'header-dsx',\r\n imports: [AvatarModule],\r\n templateUrl: './header-dsx.html',\r\n styleUrl: './header-dsx.css',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class HeaderDsx implements OnInit, OnChanges {\r\n // Inputs\r\n id = input<number | null>(null);\r\n etiqueta = input.required<string>();\r\n defaultPNG = input<string>('icon/folder_001.png');\r\n defaultGIF = input<string>('gif/file.gif');\r\n icoPNG = input<string | null>(null);\r\n icoGIF = input<string | null>(null);\r\n subTitulo = input<string | null>(null);\r\n debug = input<boolean>(false);\r\n\r\n // Signals\r\n icono = signal<string | null>(null);\r\n textoEncabezado = signal<string | null>(null);\r\n\r\n // Métricas de performance públicas\r\n performanceMetrics = {\r\n renderCount: 0,\r\n lastRenderTime: 0,\r\n totalRenderTime: 0,\r\n averageRenderTime: 0,\r\n lastUpdateTimestamp: 0,\r\n };\r\n\r\n // Computed\r\n modo = computed(() => {\r\n const id = this.id();\r\n if (id === null) return 'Lista';\r\n if (id === 0) return 'Registro';\r\n if (id > 0) return 'Edición';\r\n return 'Desconocido';\r\n });\r\n\r\n // Control de producción\r\n private isProduction = !isDevMode();\r\n\r\n constructor() {\r\n effect(() => {\r\n if (this.debug() && !this.isProduction) {\r\n this.logPerformance('Debug mode activado');\r\n }\r\n });\r\n }\r\n\r\n ngOnInit(): void {\r\n const startTime = performance.now();\r\n this.definirTexto();\r\n this.performanceMetrics.lastUpdateTimestamp = Date.now();\r\n this.logPerformance('Componente inicializado');\r\n\r\n const endTime = performance.now();\r\n this.logPerformance(\r\n `Tiempo de inicialización: ${(endTime - startTime).toFixed(2)}ms`,\r\n );\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n const startTime = performance.now();\r\n this.performanceMetrics.renderCount++;\r\n\r\n // Solo procesar si hay cambios relevantes\r\n if (this.tieneCambiosRelevantes(changes)) {\r\n this.logPerformance('Detectado cambio en inputs', {\r\n cambios: Object.keys(changes),\r\n idActual: this.id(),\r\n idAnterior: changes['id']?.previousValue,\r\n idNuevo: changes['id']?.currentValue,\r\n });\r\n\r\n this.definirTexto();\r\n }\r\n\r\n const endTime = performance.now();\r\n const renderTime = endTime - startTime;\r\n this.performanceMetrics.lastRenderTime = renderTime;\r\n this.performanceMetrics.totalRenderTime += renderTime;\r\n this.performanceMetrics.averageRenderTime =\r\n this.performanceMetrics.totalRenderTime /\r\n this.performanceMetrics.renderCount;\r\n\r\n this.logPerformance('Cambio procesado', {\r\n renderTime: renderTime.toFixed(2) + 'ms',\r\n renderCount: this.performanceMetrics.renderCount,\r\n avgRenderTime:\r\n this.performanceMetrics.averageRenderTime.toFixed(2) + 'ms',\r\n });\r\n }\r\n\r\n private tieneCambiosRelevantes(changes: SimpleChanges): boolean {\r\n const relevantKeys = ['id', 'etiqueta', 'icoPNG', 'icoGIF', 'subTitulo'];\r\n for (const key of relevantKeys) {\r\n if (\r\n changes[key] &&\r\n changes[key].currentValue !== changes[key].previousValue\r\n ) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n private definirTexto(): void {\r\n const startTime = performance.now();\r\n const idActual = this.id();\r\n\r\n if (this.debug() && !this.isProduction) {\r\n console.group(`🔍 HeaderDsx - Definiendo texto para ID: ${idActual}`);\r\n }\r\n\r\n let nuevoTexto: string;\r\n let nuevoIcono: string | null = null;\r\n\r\n // Determinar texto\r\n if (idActual === null) {\r\n nuevoTexto = this.etiqueta();\r\n this.logDebug('Caso 1: ID null - Modo lista');\r\n } else if (idActual === 0) {\r\n nuevoTexto = `Registrar ${this.etiqueta()}`;\r\n this.logDebug('Caso 2: ID = 0 - Modo registro');\r\n } else if (idActual > 0) {\r\n nuevoTexto = `Editar ${this.etiqueta()}`;\r\n this.logDebug('Caso 3: ID > 0 - Modo edición', {\r\n id: idActual,\r\n texto: nuevoTexto,\r\n });\r\n } else {\r\n nuevoTexto = this.etiqueta();\r\n this.logDebug('Caso desconocido', { id: idActual });\r\n }\r\n\r\n // Determinar icono\r\n if (this.icoPNG() !== null) {\r\n nuevoIcono = this.icoPNG();\r\n this.logDebug('Icono: Usando PNG personalizado', { icono: nuevoIcono });\r\n } else if (this.icoGIF() !== null) {\r\n nuevoIcono = this.icoGIF();\r\n this.logDebug('Icono: Usando GIF personalizado', { icono: nuevoIcono });\r\n } else {\r\n nuevoIcono = this.defaultPNG();\r\n this.logDebug('Icono: Usando default', { icono: nuevoIcono });\r\n }\r\n\r\n // Actualizar solo si hay cambios\r\n if (this.textoEncabezado() !== nuevoTexto) {\r\n this.textoEncabezado.set(nuevoTexto);\r\n }\r\n if (this.icono() !== nuevoIcono) {\r\n this.icono.set(nuevoIcono);\r\n }\r\n\r\n this.logDebug('Estado final actualizado', {\r\n texto: nuevoTexto,\r\n icono: nuevoIcono,\r\n id: idActual,\r\n modo: this.modo(),\r\n });\r\n\r\n if (this.debug() && !this.isProduction) {\r\n console.groupEnd();\r\n }\r\n\r\n const endTime = performance.now();\r\n this.logPerformance(\r\n `Tiempo de definición de texto: ${(endTime - startTime).toFixed(2)}ms`,\r\n );\r\n }\r\n\r\n private logDebug(message: string, data?: any): void {\r\n if (this.debug() && !this.isProduction) {\r\n console.log(`[HeaderDsx Debug] ${message}`, data ? data : '');\r\n }\r\n }\r\n\r\n private logPerformance(message: string, data?: any): void {\r\n if (this.debug() && !this.isProduction) {\r\n console.log(`⚡ [HeaderDsx Performance] ${message}`, data ? data : '');\r\n }\r\n }\r\n\r\n // Métodos públicos\r\n public getPerformanceMetrics() {\r\n return {\r\n ...this.performanceMetrics,\r\n currentMode: this.modo(),\r\n currentText: this.textoEncabezado(),\r\n currentIcon: this.icono(),\r\n currentId: this.id(),\r\n };\r\n }\r\n\r\n public getPerformanceSummary(): string {\r\n const metrics = this.performanceMetrics;\r\n return `📊 Renders: ${metrics.renderCount} | Promedio: ${metrics.averageRenderTime.toFixed(2)}ms | Último: ${metrics.lastRenderTime.toFixed(2)}ms`;\r\n }\r\n\r\n public debugInfo(): void {\r\n if (this.debug() && !this.isProduction) {\r\n console.group('=== HeaderDsx Debug Info ===');\r\n console.log('ID:', this.id());\r\n console.log('Etiqueta:', this.etiqueta());\r\n console.log('Texto Encabezado:', this.textoEncabezado());\r\n console.log('Icono:', this.icono());\r\n console.log('Subtítulo:', this.subTitulo());\r\n console.log('Modo:', this.modo());\r\n console.log('Debug Mode:', this.debug());\r\n console.log('Performance Metrics:', this.getPerformanceMetrics());\r\n console.log('Performance Summary:', this.getPerformanceSummary());\r\n console.log('===============================');\r\n console.groupEnd();\r\n }\r\n }\r\n}\r\n","<div class=\"area-fieldset-header flex items-center gap-2 px-2\">\r\n <p-avatar [image]=\"icono()!\"></p-avatar>\r\n <div class=\"flex flex-col\">\r\n <h3>{{ textoEncabezado() }}</h3>\r\n @if(subTitulo() !== null ){\r\n <span class=\"text-xs text-gray-600\">{{ subTitulo() }}</span>\r\n }\r\n <!-- Debug info con métricas de performance -->\r\n @if(debug()){\r\n <div\r\n class=\"text-xs mt-1 px-2 py-1 rounded flex flex-wrap items-center gap-1\"\r\n [class]=\"id() === 0 ? 'bg-blue-50 text-blue-700' : \r\n id() !== null && id()! > 0 ? 'bg-green-50 text-green-700' : \r\n 'bg-gray-50 text-gray-700'\"\r\n >\r\n <span>🔍</span>\r\n <span>ID: {{ id() }}</span>\r\n <span>|</span>\r\n <span>Modo: <strong>{{ modo() }}</strong></span>\r\n <span>|</span>\r\n <span>Texto: {{ textoEncabezado() }}</span>\r\n @if(id() !== null && id()! > 0){\r\n <span class=\"ml-1 text-xs\">(Editando ID {{ id() }})</span>\r\n }\r\n <!-- Métricas de performance -->\r\n <span class=\"ml-1 text-xs text-gray-400\">\r\n | Render: {{ performanceMetrics.renderCount }} | Avg: {{\r\n performanceMetrics.averageRenderTime.toFixed(1) }}ms\r\n </span>\r\n </div>\r\n }\r\n </div>\r\n</div>\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}