ngx-dsxlibrary 2.21.57 → 2.21.58

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,7 +1,7 @@
1
1
  import * as i1$2 from '@angular/common';
2
2
  import { DecimalPipe, CommonModule, AsyncPipe, Location } from '@angular/common';
3
3
  import * as i0 from '@angular/core';
4
- import { Input, Component, input, forwardRef, viewChild, signal, EventEmitter, effect, Output, model, inject, computed, InjectionToken, Injectable, isDevMode, output, HostBinding, Pipe, ViewEncapsulation, HostListener, Directive, NgModule } from '@angular/core';
4
+ import { Input, Component, input, forwardRef, viewChild, signal, EventEmitter, effect, Output, model, inject, computed, InjectionToken, Injectable, isDevMode, output, HostBinding, Pipe, ViewEncapsulation, HostListener, Directive, NgZone, NgModule } from '@angular/core';
5
5
  import * as i1 from 'primeng/tag';
6
6
  import { TagModule } from 'primeng/tag';
7
7
  import * as i1$1 from '@angular/forms';
@@ -52,6 +52,7 @@ import { BadgeModule } from 'primeng/badge';
52
52
  import { CardModule } from 'primeng/card';
53
53
  import { CheckboxModule } from 'primeng/checkbox';
54
54
  import { ContextMenuModule } from 'primeng/contextmenu';
55
+ import { DataViewModule } from 'primeng/dataview';
55
56
  import { DatePickerModule } from 'primeng/datepicker';
56
57
  import { DividerModule } from 'primeng/divider';
57
58
  import { DrawerModule } from 'primeng/drawer';
@@ -3626,6 +3627,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.15", ngImpo
3626
3627
  * - `refresh` → Recargar datos desde el servidor (morado)
3627
3628
  *
3628
3629
  * **Consulta / Descarga**
3630
+ * - `details` → Ver el detalle de un registro (azul índigo)
3629
3631
  * - `view` → Previsualizar o abrir detalle (azul cielo)
3630
3632
  * - `export` → Exportar información a Excel (verde Excel)
3631
3633
  * - `download` → Descargar archivo o recurso (ámbar cálido)
@@ -3643,6 +3645,7 @@ const ACTION_TYPES = {
3643
3645
  save: 'save',
3644
3646
  update: 'update',
3645
3647
  refresh: 'refresh',
3648
+ details: 'details',
3646
3649
  view: 'view',
3647
3650
  export: 'export',
3648
3651
  download: 'download',
@@ -3761,6 +3764,7 @@ function getActionMessageConfig(action, isActive = true) {
3761
3764
  * | excel | Verde Excel | Exportar información a hoja de cálculo |
3762
3765
  * | download | Naranja quemado| Descargar archivo o recurso |
3763
3766
  * | import | Azul acero | Importar información desde archivo |
3767
+ * | details | Azul índigo | Abrir detalle de registro |
3764
3768
  */
3765
3769
  const DSX_PALETTE = {
3766
3770
  danger: '#EF5350',
@@ -3776,6 +3780,7 @@ const DSX_PALETTE = {
3776
3780
  excel: '#217346',
3777
3781
  download: '#E65100',
3778
3782
  import: '#546E7A',
3783
+ details: '#3949AB',
3779
3784
  magenta: '#D81B60', // Magenta vibrante
3780
3785
  cyan: '#00BCD4', // Cian brillante
3781
3786
  olive: '#808000', // Verde oliva
@@ -4233,6 +4238,13 @@ const ACTION_CONFIG = {
4233
4238
  tooltip: 'Sincronizar datos',
4234
4239
  outlined: true,
4235
4240
  },
4241
+ details: {
4242
+ label: 'Detalles',
4243
+ icon: 'list',
4244
+ primeIcon: 'pi pi-list',
4245
+ colorToken: 'details',
4246
+ tooltip: 'Detalle de registro',
4247
+ },
4236
4248
  create: {
4237
4249
  label: 'Agregar',
4238
4250
  icon: 'add_box',
@@ -5474,7 +5486,7 @@ class QrGenerator {
5474
5486
  qrImage.src = qrUrl;
5475
5487
  qrImage.onload = () => {
5476
5488
  const qrSize = qrImage.width || 300;
5477
- const padding = 40;
5489
+ const padding = 20;
5478
5490
  const labelAreaHeight = 70;
5479
5491
  const canvas = document.createElement('canvas');
5480
5492
  canvas.width = qrSize + padding * 2;
@@ -5558,7 +5570,7 @@ class QrGenerator {
5558
5570
  qrImage.src = qrUrl;
5559
5571
  qrImage.onload = () => {
5560
5572
  const qrSize = qrImage.width || 300;
5561
- const padding = 40; // Aumentamos el margen para las esquinas de enfoque
5573
+ const padding = 20; // Margen compacto para reducir el espacio superior
5562
5574
  const labelAreaHeight = 70;
5563
5575
  const canvas = document.createElement('canvas');
5564
5576
  canvas.width = qrSize + padding * 2;
@@ -5649,11 +5661,11 @@ class QrGenerator {
5649
5661
  };
5650
5662
  }
5651
5663
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.15", ngImport: i0, type: QrGenerator, deps: [], target: i0.ɵɵFactoryTarget.Component });
5652
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.15", type: QrGenerator, isStandalone: true, selector: "dsx-qr-generator", inputs: { codigoQr: { classPropertyName: "codigoQr", publicName: "codigoQr", isSignal: true, isRequired: false, transformFunction: null }, labelQr: { classPropertyName: "labelQr", publicName: "labelQr", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<div class=\"w-full max-w-xs mx-auto text-center\">\r\n <!-- Encabezado -->\r\n <h2 class=\"text-sm font-semibold text-gray-700 mb-2\">\r\n Generador de C\u00F3digo QR\r\n </h2>\r\n\r\n <!-- Valor recibido como validaci\u00F3n (solo lectura) -->\r\n <p class=\"text-xs text-gray-400 mb-3 truncate\">\r\n <span class=\"font-medium text-gray-500\">Contenido: </span>{{ textToEncode()\r\n }}\r\n </p>\r\n\r\n <div class=\"qr-preview-shell\">\r\n @if (loading()) {\r\n <div class=\"qr-loading-state\">\r\n <span class=\"qr-spinner\"></span>\r\n <span>Generando c\u00F3digo QR...</span>\r\n </div>\r\n } @if (qrImageUrl()) {\r\n <div class=\"flex flex-col items-center gap-3 qr-content\">\r\n <!-- Imagen generada con esquinas y banner -->\r\n <div\r\n class=\"rounded-xl border border-gray-200 bg-white p-1 shadow-md inline-block\"\r\n >\r\n <img\r\n [src]=\"qrImageUrl()\"\r\n alt=\"C\u00F3digo QR\"\r\n class=\"w-44 h-auto block rounded\"\r\n />\r\n </div>\r\n\r\n <!-- Bot\u00F3n descarga -->\r\n <button\r\n style=\"\r\n background: #059669;\r\n color: #fff;\r\n font-size: 0.8rem;\r\n padding: 0.4rem 1rem;\r\n border-radius: 0.5rem;\r\n \"\r\n class=\"font-semibold hover:opacity-90 transition-opacity flex items-center justify-center gap-1\"\r\n (click)=\"downloadWithLabel()\"\r\n >\r\n <svg\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n style=\"width: 1rem; height: 1rem; flex-shrink: 0\"\r\n fill=\"none\"\r\n viewBox=\"0 0 24 24\"\r\n stroke=\"currentColor\"\r\n stroke-width=\"2\"\r\n >\r\n <path\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n d=\"M4 16v2a2 2 0 002 2h12a2 2 0 002-2v-2M7 10l5 5 5-5M12 15V3\"\r\n />\r\n </svg>\r\n Descargar JPEG\r\n </button>\r\n </div>\r\n }\r\n </div>\r\n</div>\r\n", styles: [".qr-preview-shell{min-height:15rem}.qr-loading-state{align-items:center;color:#475569;display:flex;flex-direction:column;gap:.75rem;justify-content:center;min-height:15rem;text-align:center}.qr-spinner{animation:qr-spin .8s linear infinite;border:3px solid rgba(71,85,105,.15);border-top-color:#059669;border-radius:50%;display:inline-block;height:2.25rem;width:2.25rem}.qr-content{animation:qr-fade-in .18s ease}@keyframes qr-spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}@keyframes qr-fade-in{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:translateY(0)}}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }] });
5664
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.15", type: QrGenerator, isStandalone: true, selector: "dsx-qr-generator", inputs: { codigoQr: { classPropertyName: "codigoQr", publicName: "codigoQr", isSignal: true, isRequired: false, transformFunction: null }, labelQr: { classPropertyName: "labelQr", publicName: "labelQr", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<div class=\"w-full max-w-xs mx-auto text-center\">\r\n <!-- Encabezado -->\r\n <h2 class=\"font-semibold text-gray-500\">Generador QR</h2>\r\n\r\n <!-- Valor recibido como validaci\u00F3n (solo lectura) -->\r\n <!-- <p class=\"text-xs text-gray-400 mb-3 truncate\">\r\n <span class=\"font-medium text-gray-500\">Contenido: </span>{{ textToEncode()\r\n }}\r\n </p> -->\r\n\r\n <div class=\"qr-preview-shell\">\r\n @if (loading()) {\r\n <div class=\"qr-loading-state\">\r\n <span class=\"qr-spinner\"></span>\r\n <span>Generando c\u00F3digo QR...</span>\r\n </div>\r\n } @if (qrImageUrl()) {\r\n <div class=\"flex flex-col items-center gap-3 qr-content\">\r\n <!-- Imagen generada con esquinas y banner -->\r\n <div\r\n class=\"rounded-xl border border-gray-200 bg-white p-1 shadow-md inline-block\"\r\n >\r\n <img\r\n [src]=\"qrImageUrl()\"\r\n alt=\"C\u00F3digo QR\"\r\n class=\"w-44 h-auto block rounded\"\r\n />\r\n </div>\r\n\r\n <!-- Bot\u00F3n descarga -->\r\n <button\r\n style=\"\r\n background: #059669;\r\n color: #fff;\r\n font-size: 0.8rem;\r\n padding: 0.4rem 1rem;\r\n border-radius: 0.5rem;\r\n cursor: pointer;\r\n \"\r\n class=\"font-semibold hover:opacity-90 transition-opacity flex items-center justify-center gap-1\"\r\n (click)=\"downloadWithLabel()\"\r\n >\r\n <svg\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n style=\"width: 1rem; height: 1rem; flex-shrink: 0\"\r\n fill=\"none\"\r\n viewBox=\"0 0 24 24\"\r\n stroke=\"currentColor\"\r\n stroke-width=\"2\"\r\n >\r\n <path\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n d=\"M4 16v2a2 2 0 002 2h12a2 2 0 002-2v-2M7 10l5 5 5-5M12 15V3\"\r\n />\r\n </svg>\r\n Descargar JPEG\r\n </button>\r\n </div>\r\n }\r\n </div>\r\n</div>\r\n", styles: [".qr-preview-shell{min-height:15rem}h2{color:#6b7280!important;margin:0 0 .35rem}.qr-loading-state{align-items:center;color:#475569;display:flex;flex-direction:column;gap:.75rem;justify-content:center;min-height:15rem;text-align:center}.qr-spinner{animation:qr-spin .8s linear infinite;border:3px solid rgba(71,85,105,.15);border-top-color:#059669;border-radius:50%;display:inline-block;height:2.25rem;width:2.25rem}.qr-content{animation:qr-fade-in .18s ease}@keyframes qr-spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}@keyframes qr-fade-in{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:translateY(0)}}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }] });
5653
5665
  }
5654
5666
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.15", ngImport: i0, type: QrGenerator, decorators: [{
5655
5667
  type: Component,
5656
- args: [{ selector: 'dsx-qr-generator', imports: [FormsModule], template: "<div class=\"w-full max-w-xs mx-auto text-center\">\r\n <!-- Encabezado -->\r\n <h2 class=\"text-sm font-semibold text-gray-700 mb-2\">\r\n Generador de C\u00F3digo QR\r\n </h2>\r\n\r\n <!-- Valor recibido como validaci\u00F3n (solo lectura) -->\r\n <p class=\"text-xs text-gray-400 mb-3 truncate\">\r\n <span class=\"font-medium text-gray-500\">Contenido: </span>{{ textToEncode()\r\n }}\r\n </p>\r\n\r\n <div class=\"qr-preview-shell\">\r\n @if (loading()) {\r\n <div class=\"qr-loading-state\">\r\n <span class=\"qr-spinner\"></span>\r\n <span>Generando c\u00F3digo QR...</span>\r\n </div>\r\n } @if (qrImageUrl()) {\r\n <div class=\"flex flex-col items-center gap-3 qr-content\">\r\n <!-- Imagen generada con esquinas y banner -->\r\n <div\r\n class=\"rounded-xl border border-gray-200 bg-white p-1 shadow-md inline-block\"\r\n >\r\n <img\r\n [src]=\"qrImageUrl()\"\r\n alt=\"C\u00F3digo QR\"\r\n class=\"w-44 h-auto block rounded\"\r\n />\r\n </div>\r\n\r\n <!-- Bot\u00F3n descarga -->\r\n <button\r\n style=\"\r\n background: #059669;\r\n color: #fff;\r\n font-size: 0.8rem;\r\n padding: 0.4rem 1rem;\r\n border-radius: 0.5rem;\r\n \"\r\n class=\"font-semibold hover:opacity-90 transition-opacity flex items-center justify-center gap-1\"\r\n (click)=\"downloadWithLabel()\"\r\n >\r\n <svg\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n style=\"width: 1rem; height: 1rem; flex-shrink: 0\"\r\n fill=\"none\"\r\n viewBox=\"0 0 24 24\"\r\n stroke=\"currentColor\"\r\n stroke-width=\"2\"\r\n >\r\n <path\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n d=\"M4 16v2a2 2 0 002 2h12a2 2 0 002-2v-2M7 10l5 5 5-5M12 15V3\"\r\n />\r\n </svg>\r\n Descargar JPEG\r\n </button>\r\n </div>\r\n }\r\n </div>\r\n</div>\r\n", styles: [".qr-preview-shell{min-height:15rem}.qr-loading-state{align-items:center;color:#475569;display:flex;flex-direction:column;gap:.75rem;justify-content:center;min-height:15rem;text-align:center}.qr-spinner{animation:qr-spin .8s linear infinite;border:3px solid rgba(71,85,105,.15);border-top-color:#059669;border-radius:50%;display:inline-block;height:2.25rem;width:2.25rem}.qr-content{animation:qr-fade-in .18s ease}@keyframes qr-spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}@keyframes qr-fade-in{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:translateY(0)}}\n"] }]
5668
+ args: [{ selector: 'dsx-qr-generator', imports: [FormsModule], template: "<div class=\"w-full max-w-xs mx-auto text-center\">\r\n <!-- Encabezado -->\r\n <h2 class=\"font-semibold text-gray-500\">Generador QR</h2>\r\n\r\n <!-- Valor recibido como validaci\u00F3n (solo lectura) -->\r\n <!-- <p class=\"text-xs text-gray-400 mb-3 truncate\">\r\n <span class=\"font-medium text-gray-500\">Contenido: </span>{{ textToEncode()\r\n }}\r\n </p> -->\r\n\r\n <div class=\"qr-preview-shell\">\r\n @if (loading()) {\r\n <div class=\"qr-loading-state\">\r\n <span class=\"qr-spinner\"></span>\r\n <span>Generando c\u00F3digo QR...</span>\r\n </div>\r\n } @if (qrImageUrl()) {\r\n <div class=\"flex flex-col items-center gap-3 qr-content\">\r\n <!-- Imagen generada con esquinas y banner -->\r\n <div\r\n class=\"rounded-xl border border-gray-200 bg-white p-1 shadow-md inline-block\"\r\n >\r\n <img\r\n [src]=\"qrImageUrl()\"\r\n alt=\"C\u00F3digo QR\"\r\n class=\"w-44 h-auto block rounded\"\r\n />\r\n </div>\r\n\r\n <!-- Bot\u00F3n descarga -->\r\n <button\r\n style=\"\r\n background: #059669;\r\n color: #fff;\r\n font-size: 0.8rem;\r\n padding: 0.4rem 1rem;\r\n border-radius: 0.5rem;\r\n cursor: pointer;\r\n \"\r\n class=\"font-semibold hover:opacity-90 transition-opacity flex items-center justify-center gap-1\"\r\n (click)=\"downloadWithLabel()\"\r\n >\r\n <svg\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n style=\"width: 1rem; height: 1rem; flex-shrink: 0\"\r\n fill=\"none\"\r\n viewBox=\"0 0 24 24\"\r\n stroke=\"currentColor\"\r\n stroke-width=\"2\"\r\n >\r\n <path\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n d=\"M4 16v2a2 2 0 002 2h12a2 2 0 002-2v-2M7 10l5 5 5-5M12 15V3\"\r\n />\r\n </svg>\r\n Descargar JPEG\r\n </button>\r\n </div>\r\n }\r\n </div>\r\n</div>\r\n", styles: [".qr-preview-shell{min-height:15rem}h2{color:#6b7280!important;margin:0 0 .35rem}.qr-loading-state{align-items:center;color:#475569;display:flex;flex-direction:column;gap:.75rem;justify-content:center;min-height:15rem;text-align:center}.qr-spinner{animation:qr-spin .8s linear infinite;border:3px solid rgba(71,85,105,.15);border-top-color:#059669;border-radius:50%;display:inline-block;height:2.25rem;width:2.25rem}.qr-content{animation:qr-fade-in .18s ease}@keyframes qr-spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}@keyframes qr-fade-in{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:translateY(0)}}\n"] }]
5657
5669
  }], ctorParameters: () => [], propDecorators: { codigoQr: [{ type: i0.Input, args: [{ isSignal: true, alias: "codigoQr", required: false }] }], labelQr: [{ type: i0.Input, args: [{ isSignal: true, alias: "labelQr", required: false }] }] } });
5658
5670
 
5659
5671
  class TokenPurposeLogin {
@@ -5715,13 +5727,18 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.15", ngImpo
5715
5727
  }], ctorParameters: () => [] });
5716
5728
 
5717
5729
  class ScreenInspector {
5730
+ static GRID_STORAGE_KEY = 'dsx-screen-inspector-show-grid';
5718
5731
  width = 0;
5719
5732
  height = 0;
5720
5733
  breakpoint = '';
5721
- // Detecta automáticamente si la aplicación corre en entorno de desarrollo (npm start / ng serve)
5722
5734
  isDevelopment = false;
5735
+ // Estado para controlar la visibilidad de las líneas guía
5736
+ showGrid = true;
5723
5737
  ngOnInit() {
5724
5738
  this.isDevelopment = isDevMode();
5739
+ if (this.isDevelopment) {
5740
+ this.showGrid = this.readGridStateFromStorage();
5741
+ }
5725
5742
  this.updateDimensions();
5726
5743
  }
5727
5744
  onResize() {
@@ -5729,6 +5746,40 @@ class ScreenInspector {
5729
5746
  this.updateDimensions();
5730
5747
  }
5731
5748
  }
5749
+ // Captura el atajo Alt + Shift + I de forma global
5750
+ handleKeyboardEvent(event) {
5751
+ if (this.isDevelopment &&
5752
+ event.altKey &&
5753
+ event.shiftKey &&
5754
+ (event.key === 'I' || event.key === 'i')) {
5755
+ event.preventDefault(); // Evita cualquier comportamiento secundario
5756
+ this.showGrid = !this.showGrid; // Alterna encendido / apagado
5757
+ this.persistGridState();
5758
+ }
5759
+ }
5760
+ readGridStateFromStorage() {
5761
+ if (typeof window === 'undefined')
5762
+ return true;
5763
+ try {
5764
+ const savedValue = window.localStorage.getItem(ScreenInspector.GRID_STORAGE_KEY);
5765
+ if (savedValue === null)
5766
+ return true;
5767
+ return savedValue === 'true';
5768
+ }
5769
+ catch {
5770
+ return true;
5771
+ }
5772
+ }
5773
+ persistGridState() {
5774
+ if (typeof window === 'undefined')
5775
+ return;
5776
+ try {
5777
+ window.localStorage.setItem(ScreenInspector.GRID_STORAGE_KEY, String(this.showGrid));
5778
+ }
5779
+ catch {
5780
+ // Ignora errores de almacenamiento (modo privado, cuota, etc.)
5781
+ }
5782
+ }
5732
5783
  updateDimensions() {
5733
5784
  this.width = window.innerWidth;
5734
5785
  this.height = window.innerHeight;
@@ -5748,14 +5799,17 @@ class ScreenInspector {
5748
5799
  return '2XL';
5749
5800
  }
5750
5801
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.15", ngImport: i0, type: ScreenInspector, deps: [], target: i0.ɵɵFactoryTarget.Component });
5751
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.15", type: ScreenInspector, isStandalone: true, selector: "dsx-screen-inspector", host: { listeners: { "window:resize": "onResize()" } }, ngImport: i0, template: "<!-- CONTROL DE ENTORNO: Solo se dibuja si estamos en modo desarrollo -->\r\n<ng-container *ngIf=\"isDevelopment\">\r\n <!-- CONTENEDOR GENERAL TOTALMENTE TRANSPARENTE -->\r\n <div\r\n style=\"\r\n position: fixed !important;\r\n top: 0 !important;\r\n left: 0 !important;\r\n width: 100vw !important;\r\n height: 100vh !important;\r\n z-index: 999999 !important;\r\n background-color: transparent !important;\r\n pointer-events: none;\r\n display: flex;\r\n flex-direction: column;\r\n align-items: center;\r\n justify-content: center;\r\n box-sizing: border-box;\r\n overflow: hidden;\r\n \"\r\n >\r\n <!-- CONTENEDOR DE CONTENIDO CENTRAL -->\r\n <div\r\n style=\"\r\n position: relative;\r\n display: flex;\r\n flex-direction: column;\r\n align-items: center;\r\n justify-content: center;\r\n text-align: center;\r\n pointer-events: none;\r\n width: 100%;\r\n \"\r\n >\r\n <!-- LETRAS GIGANTES EN NEGRO CON OPACIDAD (M\u00C1SCARA LIMPIA) -->\r\n <h1\r\n style=\"\r\n font-size: 35vw !important;\r\n font-weight: 900 !important;\r\n font-family:\r\n system-ui,\r\n -apple-system,\r\n sans-serif !important;\r\n color: rgba(0, 0, 0, 0.02) !important;\r\n margin: 0;\r\n padding: 0;\r\n line-height: 0.8;\r\n letter-spacing: -0.05em;\r\n text-transform: uppercase;\r\n \"\r\n >\r\n {{ breakpoint }}\r\n </h1>\r\n\r\n <!-- CUADRO DE DI\u00C1LOGO DE LAS MEDIDAS EXACTAS -->\r\n <div\r\n style=\"\r\n margin-top: 20px;\r\n background-color: #111827;\r\n border: 2px solid rgba(0, 0, 0, 0.15);\r\n border-radius: 12px;\r\n padding: 12px 32px;\r\n font-family: monospace;\r\n font-size: 22px;\r\n font-weight: bold;\r\n color: #34d399;\r\n box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.5);\r\n backdrop-filter: blur(8px);\r\n pointer-events: auto;\r\n \"\r\n >\r\n {{ width }}<span\r\n style=\"\r\n color: rgba(255, 255, 255, 0.5);\r\n font-size: 16px;\r\n font-weight: normal;\r\n margin-left: 4px;\r\n \"\r\n >px ancho</span\r\n >\r\n <span style=\"color: rgba(255, 255, 255, 0.3); margin: 0 16px\">|</span>\r\n {{ height }}<span\r\n style=\"\r\n color: rgba(255, 255, 255, 0.5);\r\n font-size: 16px;\r\n font-weight: normal;\r\n margin-left: 4px;\r\n \"\r\n >px alto</span\r\n >\r\n </div>\r\n </div>\r\n </div>\r\n</ng-container>\r\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
5802
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.15", type: ScreenInspector, isStandalone: true, selector: "dsx-screen-inspector", host: { listeners: { "window:resize": "onResize()", "window:keydown": "handleKeyboardEvent($event)" } }, ngImport: i0, template: "<!-- CONTROL DE ENTORNO: Solo se dibuja si estamos en modo desarrollo -->\r\n@if(isDevelopment){\r\n<ng-container>\r\n <!-- CONTENEDOR GENERAL TOTALMENTE TRANSPARENTE -->\r\n <div\r\n style=\"\r\n position: fixed !important;\r\n top: 0 !important;\r\n left: 0 !important;\r\n width: 100vw !important;\r\n height: 100vh !important;\r\n z-index: 999999 !important;\r\n background-color: transparent !important;\r\n pointer-events: none;\r\n display: flex;\r\n flex-direction: column;\r\n align-items: center;\r\n justify-content: center;\r\n box-sizing: border-box;\r\n overflow: hidden;\r\n \"\r\n >\r\n <!-- REGLA MILIM\u00C9TRICA CONDICIONAL -->\r\n @if(showGrid) {\r\n <div class=\"inspector-ruler\"></div>\r\n }\r\n\r\n <!-- CONTENEDOR DE CONTENIDO CENTRAL -->\r\n <div\r\n style=\"\r\n position: relative;\r\n display: flex;\r\n flex-direction: column;\r\n align-items: center;\r\n justify-content: center;\r\n text-align: center;\r\n pointer-events: none;\r\n width: 100%;\r\n \"\r\n >\r\n <!-- LETRAS GIGANTES EN NEGRO CON OPACIDAD -->\r\n <h1\r\n style=\"\r\n font-size: 35vw !important;\r\n font-weight: 900 !important;\r\n font-family:\r\n system-ui,\r\n -apple-system,\r\n sans-serif !important;\r\n color: rgba(0, 0, 0, 0.05) !important;\r\n margin: 0;\r\n padding: 0;\r\n line-height: 0.8;\r\n letter-spacing: -0.05em;\r\n text-transform: uppercase;\r\n \"\r\n >\r\n {{ breakpoint }}\r\n </h1>\r\n\r\n <!-- CUADRO DE DI\u00C1LOGO DE LAS MEDIDAS EXACTAS -->\r\n <div\r\n style=\"\r\n margin-top: 20px;\r\n background-color: #111827;\r\n border: 2px solid rgba(0, 0, 0, 0.15);\r\n border-radius: 12px;\r\n padding: 12px 32px;\r\n font-family: monospace;\r\n font-size: 22px;\r\n font-weight: bold;\r\n color: #34d399;\r\n box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.5);\r\n backdrop-filter: blur(8px);\r\n pointer-events: auto;\r\n display: flex;\r\n flex-direction: column;\r\n align-items: center;\r\n gap: 4px;\r\n \"\r\n >\r\n <div>\r\n {{ width }}<span\r\n style=\"\r\n color: rgba(255, 255, 255, 0.5);\r\n font-size: 16px;\r\n font-weight: normal;\r\n margin-left: 4px;\r\n \"\r\n >px ancho</span\r\n >\r\n <span style=\"color: rgba(255, 255, 255, 0.3); margin: 0 16px\">|</span>\r\n {{ height }}<span\r\n style=\"\r\n color: rgba(255, 255, 255, 0.5);\r\n font-size: 16px;\r\n font-weight: normal;\r\n margin-left: 4px;\r\n \"\r\n >px alto</span\r\n >\r\n </div>\r\n\r\n <!-- Recordatorio del atajo de teclado con tipograf\u00EDa peque\u00F1a -->\r\n <span\r\n style=\"\r\n color: rgba(255, 255, 255, 0.35);\r\n font-size: 11px;\r\n font-weight: normal;\r\n letter-spacing: 0.5px;\r\n \"\r\n >\r\n Presiona\r\n <b style=\"color: #f3f4f6; font-weight: bold\">Alt + Shift + I</b> para\r\n ocultar/mostrar cuadr\u00EDcula\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n</ng-container>\r\n}\r\n", styles: [".inspector-ruler{position:absolute!important;top:0!important;left:0!important;width:100vw!important;height:100%!important;background-color:transparent!important;pointer-events:none!important;background-image:linear-gradient(to right,rgba(0,0,0,.15) 1px,transparent 1px),linear-gradient(to bottom,rgba(220,38,38,.45) 1px,transparent 1px),linear-gradient(to bottom,rgba(0,0,0,.4) 1px,transparent 1px),linear-gradient(to bottom,rgba(0,0,0,.15) 1px,transparent 1px);background-size:45px 100%,100% 100px,100% 50px,100% 10px!important}.inspector-ruler:after{content:\"0\\a\\a\\a\\a\\a\\a\\a\\a\\a 100\\a\\a\\a\\a\\a\\a\\a\\a\\a 200\\a\\a\\a\\a\\a\\a\\a\\a\\a 300\\a\\a\\a\\a\\a\\a\\a\\a\\a 400\\a\\a\\a\\a\\a\\a\\a\\a\\a 500\\a\\a\\a\\a\\a\\a\\a\\a\\a 600\\a\\a\\a\\a\\a\\a\\a\\a\\a 700\\a\\a\\a\\a\\a\\a\\a\\a\\a 800\\a\\a\\a\\a\\a\\a\\a\\a\\a 900\\a\\a\\a\\a\\a\\a\\a\\a\\a 1000\\a\\a\\a\\a\\a\\a\\a\\a\\a 1100\\a\\a\\a\\a\\a\\a\\a\\a\\a 1200\"!important;white-space:pre!important;font-family:monospace!important;font-size:10px!important;font-weight:700!important;color:#374151!important;line-height:10px!important;position:absolute!important;top:0!important;left:6px!important;z-index:10!important}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }] });
5752
5803
  }
5753
5804
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.15", ngImport: i0, type: ScreenInspector, decorators: [{
5754
5805
  type: Component,
5755
- args: [{ selector: 'dsx-screen-inspector', imports: [CommonModule], template: "<!-- CONTROL DE ENTORNO: Solo se dibuja si estamos en modo desarrollo -->\r\n<ng-container *ngIf=\"isDevelopment\">\r\n <!-- CONTENEDOR GENERAL TOTALMENTE TRANSPARENTE -->\r\n <div\r\n style=\"\r\n position: fixed !important;\r\n top: 0 !important;\r\n left: 0 !important;\r\n width: 100vw !important;\r\n height: 100vh !important;\r\n z-index: 999999 !important;\r\n background-color: transparent !important;\r\n pointer-events: none;\r\n display: flex;\r\n flex-direction: column;\r\n align-items: center;\r\n justify-content: center;\r\n box-sizing: border-box;\r\n overflow: hidden;\r\n \"\r\n >\r\n <!-- CONTENEDOR DE CONTENIDO CENTRAL -->\r\n <div\r\n style=\"\r\n position: relative;\r\n display: flex;\r\n flex-direction: column;\r\n align-items: center;\r\n justify-content: center;\r\n text-align: center;\r\n pointer-events: none;\r\n width: 100%;\r\n \"\r\n >\r\n <!-- LETRAS GIGANTES EN NEGRO CON OPACIDAD (M\u00C1SCARA LIMPIA) -->\r\n <h1\r\n style=\"\r\n font-size: 35vw !important;\r\n font-weight: 900 !important;\r\n font-family:\r\n system-ui,\r\n -apple-system,\r\n sans-serif !important;\r\n color: rgba(0, 0, 0, 0.02) !important;\r\n margin: 0;\r\n padding: 0;\r\n line-height: 0.8;\r\n letter-spacing: -0.05em;\r\n text-transform: uppercase;\r\n \"\r\n >\r\n {{ breakpoint }}\r\n </h1>\r\n\r\n <!-- CUADRO DE DI\u00C1LOGO DE LAS MEDIDAS EXACTAS -->\r\n <div\r\n style=\"\r\n margin-top: 20px;\r\n background-color: #111827;\r\n border: 2px solid rgba(0, 0, 0, 0.15);\r\n border-radius: 12px;\r\n padding: 12px 32px;\r\n font-family: monospace;\r\n font-size: 22px;\r\n font-weight: bold;\r\n color: #34d399;\r\n box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.5);\r\n backdrop-filter: blur(8px);\r\n pointer-events: auto;\r\n \"\r\n >\r\n {{ width }}<span\r\n style=\"\r\n color: rgba(255, 255, 255, 0.5);\r\n font-size: 16px;\r\n font-weight: normal;\r\n margin-left: 4px;\r\n \"\r\n >px ancho</span\r\n >\r\n <span style=\"color: rgba(255, 255, 255, 0.3); margin: 0 16px\">|</span>\r\n {{ height }}<span\r\n style=\"\r\n color: rgba(255, 255, 255, 0.5);\r\n font-size: 16px;\r\n font-weight: normal;\r\n margin-left: 4px;\r\n \"\r\n >px alto</span\r\n >\r\n </div>\r\n </div>\r\n </div>\r\n</ng-container>\r\n" }]
5806
+ args: [{ selector: 'dsx-screen-inspector', imports: [CommonModule], template: "<!-- CONTROL DE ENTORNO: Solo se dibuja si estamos en modo desarrollo -->\r\n@if(isDevelopment){\r\n<ng-container>\r\n <!-- CONTENEDOR GENERAL TOTALMENTE TRANSPARENTE -->\r\n <div\r\n style=\"\r\n position: fixed !important;\r\n top: 0 !important;\r\n left: 0 !important;\r\n width: 100vw !important;\r\n height: 100vh !important;\r\n z-index: 999999 !important;\r\n background-color: transparent !important;\r\n pointer-events: none;\r\n display: flex;\r\n flex-direction: column;\r\n align-items: center;\r\n justify-content: center;\r\n box-sizing: border-box;\r\n overflow: hidden;\r\n \"\r\n >\r\n <!-- REGLA MILIM\u00C9TRICA CONDICIONAL -->\r\n @if(showGrid) {\r\n <div class=\"inspector-ruler\"></div>\r\n }\r\n\r\n <!-- CONTENEDOR DE CONTENIDO CENTRAL -->\r\n <div\r\n style=\"\r\n position: relative;\r\n display: flex;\r\n flex-direction: column;\r\n align-items: center;\r\n justify-content: center;\r\n text-align: center;\r\n pointer-events: none;\r\n width: 100%;\r\n \"\r\n >\r\n <!-- LETRAS GIGANTES EN NEGRO CON OPACIDAD -->\r\n <h1\r\n style=\"\r\n font-size: 35vw !important;\r\n font-weight: 900 !important;\r\n font-family:\r\n system-ui,\r\n -apple-system,\r\n sans-serif !important;\r\n color: rgba(0, 0, 0, 0.05) !important;\r\n margin: 0;\r\n padding: 0;\r\n line-height: 0.8;\r\n letter-spacing: -0.05em;\r\n text-transform: uppercase;\r\n \"\r\n >\r\n {{ breakpoint }}\r\n </h1>\r\n\r\n <!-- CUADRO DE DI\u00C1LOGO DE LAS MEDIDAS EXACTAS -->\r\n <div\r\n style=\"\r\n margin-top: 20px;\r\n background-color: #111827;\r\n border: 2px solid rgba(0, 0, 0, 0.15);\r\n border-radius: 12px;\r\n padding: 12px 32px;\r\n font-family: monospace;\r\n font-size: 22px;\r\n font-weight: bold;\r\n color: #34d399;\r\n box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.5);\r\n backdrop-filter: blur(8px);\r\n pointer-events: auto;\r\n display: flex;\r\n flex-direction: column;\r\n align-items: center;\r\n gap: 4px;\r\n \"\r\n >\r\n <div>\r\n {{ width }}<span\r\n style=\"\r\n color: rgba(255, 255, 255, 0.5);\r\n font-size: 16px;\r\n font-weight: normal;\r\n margin-left: 4px;\r\n \"\r\n >px ancho</span\r\n >\r\n <span style=\"color: rgba(255, 255, 255, 0.3); margin: 0 16px\">|</span>\r\n {{ height }}<span\r\n style=\"\r\n color: rgba(255, 255, 255, 0.5);\r\n font-size: 16px;\r\n font-weight: normal;\r\n margin-left: 4px;\r\n \"\r\n >px alto</span\r\n >\r\n </div>\r\n\r\n <!-- Recordatorio del atajo de teclado con tipograf\u00EDa peque\u00F1a -->\r\n <span\r\n style=\"\r\n color: rgba(255, 255, 255, 0.35);\r\n font-size: 11px;\r\n font-weight: normal;\r\n letter-spacing: 0.5px;\r\n \"\r\n >\r\n Presiona\r\n <b style=\"color: #f3f4f6; font-weight: bold\">Alt + Shift + I</b> para\r\n ocultar/mostrar cuadr\u00EDcula\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n</ng-container>\r\n}\r\n", styles: [".inspector-ruler{position:absolute!important;top:0!important;left:0!important;width:100vw!important;height:100%!important;background-color:transparent!important;pointer-events:none!important;background-image:linear-gradient(to right,rgba(0,0,0,.15) 1px,transparent 1px),linear-gradient(to bottom,rgba(220,38,38,.45) 1px,transparent 1px),linear-gradient(to bottom,rgba(0,0,0,.4) 1px,transparent 1px),linear-gradient(to bottom,rgba(0,0,0,.15) 1px,transparent 1px);background-size:45px 100%,100% 100px,100% 50px,100% 10px!important}.inspector-ruler:after{content:\"0\\a\\a\\a\\a\\a\\a\\a\\a\\a 100\\a\\a\\a\\a\\a\\a\\a\\a\\a 200\\a\\a\\a\\a\\a\\a\\a\\a\\a 300\\a\\a\\a\\a\\a\\a\\a\\a\\a 400\\a\\a\\a\\a\\a\\a\\a\\a\\a 500\\a\\a\\a\\a\\a\\a\\a\\a\\a 600\\a\\a\\a\\a\\a\\a\\a\\a\\a 700\\a\\a\\a\\a\\a\\a\\a\\a\\a 800\\a\\a\\a\\a\\a\\a\\a\\a\\a 900\\a\\a\\a\\a\\a\\a\\a\\a\\a 1000\\a\\a\\a\\a\\a\\a\\a\\a\\a 1100\\a\\a\\a\\a\\a\\a\\a\\a\\a 1200\"!important;white-space:pre!important;font-family:monospace!important;font-size:10px!important;font-weight:700!important;color:#374151!important;line-height:10px!important;position:absolute!important;top:0!important;left:6px!important;z-index:10!important}\n"] }]
5756
5807
  }], propDecorators: { onResize: [{
5757
5808
  type: HostListener,
5758
5809
  args: ['window:resize']
5810
+ }], handleKeyboardEvent: [{
5811
+ type: HostListener,
5812
+ args: ['window:keydown', ['$event']]
5759
5813
  }] } });
5760
5814
 
5761
5815
  /**
@@ -5929,6 +5983,176 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.15", ngImpo
5929
5983
  args: ['keydown', ['$event']]
5930
5984
  }] } });
5931
5985
 
5986
+ class ScrollTableService {
5987
+ /**
5988
+ * Calcula la altura disponible para el scrollHeight de una tabla
5989
+ * @param element El elemento nativo HTML desde donde se empieza a contar
5990
+ * @param marginBottom Margen de seguridad inferior (por defecto 75px para paginadores)
5991
+ * @param minHeight Altura mínima permitida para evitar valores muy pequeños o negativos
5992
+ */
5993
+ calculateAvailableHeight(element, marginBottom = 75, minHeight = 300) {
5994
+ const safeMinHeight = Number.isFinite(minHeight)
5995
+ ? Math.max(100, Math.floor(minHeight))
5996
+ : 300;
5997
+ const safeMarginBottom = Number.isFinite(marginBottom)
5998
+ ? Math.max(0, Math.floor(marginBottom))
5999
+ : 75;
6000
+ if (!element)
6001
+ return `${safeMinHeight}px`;
6002
+ // Medición exacta de todos los píxeles consumidos hacia arriba
6003
+ const rect = element.getBoundingClientRect();
6004
+ const pixelesConsumidosArriba = rect.top;
6005
+ // Altura utilizable actual de la ventana
6006
+ const alturaTotalPantalla = window.innerHeight;
6007
+ // Restamos la parte superior y el margen de abajo
6008
+ const alturaResultante = alturaTotalPantalla - pixelesConsumidosArriba - safeMarginBottom;
6009
+ // Retorna el string con el formato "000px" requerido por PrimeNG
6010
+ const alturaFinal = Math.max(alturaResultante, safeMinHeight);
6011
+ return `${Math.floor(alturaFinal)}px`;
6012
+ }
6013
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.15", ngImport: i0, type: ScrollTableService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
6014
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.15", ngImport: i0, type: ScrollTableService, providedIn: 'root' });
6015
+ }
6016
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.15", ngImport: i0, type: ScrollTableService, decorators: [{
6017
+ type: Injectable,
6018
+ args: [{
6019
+ providedIn: 'root',
6020
+ }]
6021
+ }] });
6022
+
6023
+ class AutoScrollHeightDirective {
6024
+ el;
6025
+ static INITIAL_RECALC_DELAYS_MS = [120, 300];
6026
+ static INITIAL_STABILIZATION_MS = 360;
6027
+ // Te permite personalizar el margen desde el HTML si una tabla usa paginador y otra no
6028
+ marginBottom = input(75, ...(ngDevMode ? [{ debugName: "marginBottom" }] : /* istanbul ignore next */ []));
6029
+ // Altura mínima de seguridad para evitar valores demasiado pequeños
6030
+ minHeight = input(300, ...(ngDevMode ? [{ debugName: "minHeight" }] : /* istanbul ignore next */ []));
6031
+ // Evento que emite el string de píxeles resultante (ej: "520px")
6032
+ heightCalculated = output();
6033
+ ngZone = inject(NgZone);
6034
+ scrollService = inject(ScrollTableService);
6035
+ resizeObserver;
6036
+ rafId = null;
6037
+ lastEmittedHeight = null;
6038
+ pendingTimeouts = new Set();
6039
+ isInitializing = true;
6040
+ pendingInitialHeight = null;
6041
+ constructor(el) {
6042
+ this.el = el;
6043
+ }
6044
+ ngAfterViewInit() {
6045
+ this.setupLayoutObservers();
6046
+ this.scheduleInitialRecalcular();
6047
+ }
6048
+ ngOnDestroy() {
6049
+ this.teardownLayoutObservers();
6050
+ this.cancelPendingRaf();
6051
+ this.clearPendingTimeouts();
6052
+ }
6053
+ // Escucha global del cambio de monitor o tamaño de ventana
6054
+ onResize() {
6055
+ this.scheduleRecalcular();
6056
+ }
6057
+ setupLayoutObservers() {
6058
+ if (typeof window === 'undefined')
6059
+ return;
6060
+ // Detecta cambios de tamaño del host.
6061
+ this.resizeObserver = new ResizeObserver(() => this.scheduleRecalcular());
6062
+ this.resizeObserver.observe(this.el.nativeElement);
6063
+ }
6064
+ teardownLayoutObservers() {
6065
+ this.resizeObserver?.disconnect();
6066
+ this.resizeObserver = undefined;
6067
+ }
6068
+ scheduleInitialRecalcular() {
6069
+ this.scheduleRecalcular();
6070
+ for (const delayMs of AutoScrollHeightDirective.INITIAL_RECALC_DELAYS_MS) {
6071
+ this.scheduleRecalcularAfter(delayMs);
6072
+ }
6073
+ this.scheduleFinishInitialization(AutoScrollHeightDirective.INITIAL_STABILIZATION_MS);
6074
+ }
6075
+ scheduleFinishInitialization(delayMs) {
6076
+ if (typeof window === 'undefined')
6077
+ return;
6078
+ const timeoutId = window.setTimeout(() => {
6079
+ this.pendingTimeouts.delete(timeoutId);
6080
+ this.isInitializing = false;
6081
+ // Emite una sola vez el último valor estable de la fase inicial.
6082
+ if (this.pendingInitialHeight !== null) {
6083
+ if (this.lastEmittedHeight !== this.pendingInitialHeight) {
6084
+ this.lastEmittedHeight = this.pendingInitialHeight;
6085
+ this.emitHeight(this.pendingInitialHeight);
6086
+ }
6087
+ this.pendingInitialHeight = null;
6088
+ }
6089
+ }, delayMs);
6090
+ this.pendingTimeouts.add(timeoutId);
6091
+ }
6092
+ scheduleRecalcularAfter(delayMs) {
6093
+ if (typeof window === 'undefined')
6094
+ return;
6095
+ const timeoutId = window.setTimeout(() => {
6096
+ this.pendingTimeouts.delete(timeoutId);
6097
+ this.scheduleRecalcular();
6098
+ }, delayMs);
6099
+ this.pendingTimeouts.add(timeoutId);
6100
+ }
6101
+ clearPendingTimeouts() {
6102
+ for (const timeoutId of this.pendingTimeouts) {
6103
+ window.clearTimeout(timeoutId);
6104
+ }
6105
+ this.pendingTimeouts.clear();
6106
+ }
6107
+ scheduleRecalcular() {
6108
+ if (typeof window === 'undefined')
6109
+ return;
6110
+ this.cancelPendingRaf();
6111
+ this.rafId = window.requestAnimationFrame(() => {
6112
+ this.rafId = null;
6113
+ this.recalcular();
6114
+ });
6115
+ }
6116
+ cancelPendingRaf() {
6117
+ if (this.rafId === null)
6118
+ return;
6119
+ window.cancelAnimationFrame(this.rafId);
6120
+ this.rafId = null;
6121
+ }
6122
+ recalcular() {
6123
+ const alturaCalculada = this.scrollService.calculateAvailableHeight(this.el.nativeElement, this.marginBottom(), this.minHeight());
6124
+ if (this.isInitializing) {
6125
+ this.pendingInitialHeight = alturaCalculada;
6126
+ return;
6127
+ }
6128
+ // Evita emisiones repetidas del mismo valor cuando hay muchos cambios de DOM.
6129
+ if (this.lastEmittedHeight === alturaCalculada)
6130
+ return;
6131
+ this.lastEmittedHeight = alturaCalculada;
6132
+ this.emitHeight(alturaCalculada);
6133
+ }
6134
+ emitHeight(value) {
6135
+ if (NgZone.isInAngularZone()) {
6136
+ this.heightCalculated.emit(value);
6137
+ return;
6138
+ }
6139
+ this.ngZone.run(() => {
6140
+ this.heightCalculated.emit(value);
6141
+ });
6142
+ }
6143
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.15", ngImport: i0, type: AutoScrollHeightDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });
6144
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.15", type: AutoScrollHeightDirective, isStandalone: true, selector: "[appAutoScrollHeight]", inputs: { marginBottom: { classPropertyName: "marginBottom", publicName: "marginBottom", isSignal: true, isRequired: false, transformFunction: null }, minHeight: { classPropertyName: "minHeight", publicName: "minHeight", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { heightCalculated: "heightCalculated" }, host: { listeners: { "window:resize": "onResize()" } }, ngImport: i0 });
6145
+ }
6146
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.15", ngImport: i0, type: AutoScrollHeightDirective, decorators: [{
6147
+ type: Directive,
6148
+ args: [{
6149
+ selector: '[appAutoScrollHeight]',
6150
+ }]
6151
+ }], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { marginBottom: [{ type: i0.Input, args: [{ isSignal: true, alias: "marginBottom", required: false }] }], minHeight: [{ type: i0.Input, args: [{ isSignal: true, alias: "minHeight", required: false }] }], heightCalculated: [{ type: i0.Output, args: ["heightCalculated"] }], onResize: [{
6152
+ type: HostListener,
6153
+ args: ['window:resize']
6154
+ }] } });
6155
+
5932
6156
  /**
5933
6157
  * Directiva que permite solo la entrada de:
5934
6158
  * - Dígitos (0-9)
@@ -6551,6 +6775,7 @@ const PRIME_NG_MODULES = [
6551
6775
  CardModule,
6552
6776
  CheckboxModule,
6553
6777
  ContextMenuModule,
6778
+ DataViewModule,
6554
6779
  DatePickerModule,
6555
6780
  DialogModule,
6556
6781
  DividerModule,
@@ -6609,6 +6834,7 @@ class PrimeNgModule {
6609
6834
  CardModule,
6610
6835
  CheckboxModule,
6611
6836
  ContextMenuModule,
6837
+ DataViewModule,
6612
6838
  DatePickerModule,
6613
6839
  DialogModule,
6614
6840
  DividerModule,
@@ -6664,6 +6890,7 @@ class PrimeNgModule {
6664
6890
  CardModule,
6665
6891
  CheckboxModule,
6666
6892
  ContextMenuModule,
6893
+ DataViewModule,
6667
6894
  DatePickerModule,
6668
6895
  DialogModule,
6669
6896
  DividerModule,
@@ -8506,5 +8733,5 @@ function minimumAgeValidator(minimumAge, referenceDate) {
8506
8733
  * Generated bundle index. Do not edit.
8507
8734
  */
8508
8735
 
8509
- export { ACTION_TYPES, AlertaService, AppMessageErrorComponent, AppMessageHelpComponent, ArrowNavigationDirective, AuthorizeService, BaseCRUDService, CACHE_KEYS, CacheService, CssV2Component, DSX_PALETTE, DateIndicator, DocxPreviewComponent, DsxAddToolsModule, DsxButtonComponent, DsxEnableDisable, DsxMessagesService, DsxStatusToggle, DteService, ENVIRONMENT, EndpointService, ErrorHandlerService, FileComponent, GTQFormatter, HeaderDsx, HelpersService, HttpHelpersService, INITIAL_PARAMETERS, IcoLabel, IconDsxComponent, JoinByPipe, JsonHighlightPipe, JsonValuesDebujComponent, JsonViewerComponent, KpicardComponent, LoadingComponent, LoadingLottieComponent, LogoDsxComponent, MasterDetailChangeService, NavbarDsxComponent, NetworkStatusComponent, OnlyRangoPatternDirective, ParameterValuesService, PdfPreviewComponent, PrimeNgModule, QrGenerator, SWEET_ALERT_THEMES, ScreenInspector, SecurityService, SelectAllOnFocusDirective, ServiceResultFileService, SpinnerLoadingService, SweetAlert2DialogService, TemplateHighlight, TokenPurposeLogin, TruncatePipe, UtilityAddService, asyncExistsValidator, atLeastOneFieldRequiredValidator, chainControlGroups, createCurrencyFormatter, createInitialCache, createTypedCacheProvider, cuiValidator, dateMinMaxValidator, dateRangeValidator, dateRangeValidatorFromTo, developmentEnvironment, getActionMessageConfig, getZeroBasedRolIndex, guardTokenPurposeGuard, httpAuthorizeInterceptor, minimumAgeValidator, nitValidator, productionEnvironment, provideEnvironment, templateStructureValidator, templateVariablesValidator, validateEnvironmentConfig };
8736
+ export { ACTION_TYPES, AlertaService, AppMessageErrorComponent, AppMessageHelpComponent, ArrowNavigationDirective, AuthorizeService, AutoScrollHeightDirective, BaseCRUDService, CACHE_KEYS, CacheService, CssV2Component, DSX_PALETTE, DateIndicator, DocxPreviewComponent, DsxAddToolsModule, DsxButtonComponent, DsxEnableDisable, DsxMessagesService, DsxStatusToggle, DteService, ENVIRONMENT, EndpointService, ErrorHandlerService, FileComponent, GTQFormatter, HeaderDsx, HelpersService, HttpHelpersService, INITIAL_PARAMETERS, IcoLabel, IconDsxComponent, JoinByPipe, JsonHighlightPipe, JsonValuesDebujComponent, JsonViewerComponent, KpicardComponent, LoadingComponent, LoadingLottieComponent, LogoDsxComponent, MasterDetailChangeService, NavbarDsxComponent, NetworkStatusComponent, OnlyRangoPatternDirective, ParameterValuesService, PdfPreviewComponent, PrimeNgModule, QrGenerator, SWEET_ALERT_THEMES, ScreenInspector, SecurityService, SelectAllOnFocusDirective, ServiceResultFileService, SpinnerLoadingService, SweetAlert2DialogService, TemplateHighlight, TokenPurposeLogin, TruncatePipe, UtilityAddService, asyncExistsValidator, atLeastOneFieldRequiredValidator, chainControlGroups, createCurrencyFormatter, createInitialCache, createTypedCacheProvider, cuiValidator, dateMinMaxValidator, dateRangeValidator, dateRangeValidatorFromTo, developmentEnvironment, getActionMessageConfig, getZeroBasedRolIndex, guardTokenPurposeGuard, httpAuthorizeInterceptor, minimumAgeValidator, nitValidator, productionEnvironment, provideEnvironment, templateStructureValidator, templateVariablesValidator, validateEnvironmentConfig };
8510
8737
  //# sourceMappingURL=ngx-dsxlibrary.mjs.map