ngx-dsxlibrary 2.21.68 → 2.21.70
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/fesm2022/ngx-dsxlibrary-src-lib-primengdsx.mjs +169 -26
- package/fesm2022/ngx-dsxlibrary-src-lib-primengdsx.mjs.map +1 -1
- package/fesm2022/ngx-dsxlibrary.mjs +1502 -291
- package/fesm2022/ngx-dsxlibrary.mjs.map +1 -1
- package/ngx-dsxlibrary-2.21.70.tgz +0 -0
- package/package.json +1 -1
- package/types/ngx-dsxlibrary-src-lib-primengdsx.d.ts +33 -5
- package/types/ngx-dsxlibrary.d.ts +335 -54
- package/ngx-dsxlibrary-2.21.68.tgz +0 -0
|
@@ -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
|
-
|
|
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
|
-
|
|
22
|
-
|
|
23
|
-
if (this.
|
|
24
|
-
|
|
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
|
-
|
|
27
|
-
|
|
28
|
-
|
|
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
|
-
|
|
31
|
-
|
|
32
|
-
this.
|
|
104
|
+
else if (idActual === 0) {
|
|
105
|
+
nuevoTexto = `Registrar ${this.etiqueta()}`;
|
|
106
|
+
this.logDebug('Caso 2: ID = 0 - Modo registro');
|
|
33
107
|
}
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
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
|
-
|
|
40
|
-
|
|
41
|
-
this.
|
|
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
|
-
|
|
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 <
|
|
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 <
|
|
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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"}
|