{"version":3,"file":"ng-components-tsi.mjs","sources":["../../../projects/ng-components-tsi/src/lib/directivas/acciones/atajos.directive.ts","../../../projects/ng-components-tsi/src/lib/directivas/estilos/button.constants.ts","../../../projects/ng-components-tsi/src/lib/ui/forms/button/button.component.ts","../../../projects/ng-components-tsi/src/lib/ui/forms/button/button.component.html","../../../projects/ng-components-tsi/src/lib/service/toast.service.ts","../../../projects/ng-components-tsi/src/lib/ui/alerts/alert-confirmation/alert-confirmation.component.ts","../../../projects/ng-components-tsi/src/lib/ui/alerts/alert-confirmation/alert-confirmation.component.html","../../../projects/ng-components-tsi/src/lib/ui/alerts/alerta/alerta.component.ts","../../../projects/ng-components-tsi/src/lib/ui/alerts/alerta/alerta.component.html","../../../projects/ng-components-tsi/src/lib/ui/alerts/alert-error/alert-error.component.ts","../../../projects/ng-components-tsi/src/lib/ui/alerts/alert-error/alert-error.component.html","../../../projects/ng-components-tsi/src/lib/ui/alerts/badge/badge.component.ts","../../../projects/ng-components-tsi/src/lib/ui/alerts/toaster/toaster.component.ts","../../../projects/ng-components-tsi/src/lib/ui/alerts/toaster/toaster.component.html","../../../projects/ng-components-tsi/src/lib/ui/dropdown/dropdown-cdk/dropdown-cdk.component.ts","../../../projects/ng-components-tsi/src/lib/ui/dropdown/dropdown-cdk/dropdown-cdk.component.html","../../../projects/ng-components-tsi/src/lib/directivas/animaciones/fade-animation.ts","../../../projects/ng-components-tsi/src/lib/ui/dropdown/dropdown-simple/dropdown.component.ts","../../../projects/ng-components-tsi/src/lib/ui/dropdown/dropdown-simple/dropdown.component.html","../../../projects/ng-components-tsi/src/lib/ui/forms/filter-toggle/filter-toggle.component.ts","../../../projects/ng-components-tsi/src/lib/ui/forms/header/header.component.ts","../../../projects/ng-components-tsi/src/lib/ui/forms/header/header.component.html","../../../projects/ng-components-tsi/src/lib/ui/forms/inputs/autocomplete/autocomplete.component.ts","../../../projects/ng-components-tsi/src/lib/ui/forms/inputs/autocomplete/autocomplete.component.html","../../../projects/ng-components-tsi/src/lib/directivas/estilos/animated-checkbox.directive.ts","../../../projects/ng-components-tsi/src/lib/ui/forms/inputs/check-box/check-box.component.ts","../../../projects/ng-components-tsi/src/lib/ui/forms/inputs/check-box/check-box.component.html","../../../projects/ng-components-tsi/src/lib/ui/forms/inputs/autocomplete-cdk/autocomplete.component.ts","../../../projects/ng-components-tsi/src/lib/ui/forms/inputs/autocomplete-cdk/autocomplete.component.html","../../../projects/ng-components-tsi/src/lib/ui/forms/inputs/doble-input/doble-input.component.ts","../../../projects/ng-components-tsi/src/lib/ui/forms/inputs/doble-input/doble-input.component.html","../../../projects/ng-components-tsi/src/lib/directivas/inputs/decimal.directive.ts","../../../projects/ng-components-tsi/src/lib/directivas/inputs/only-number.directive.ts","../../../projects/ng-components-tsi/src/lib/directivas/inputs/only-day.directive.ts","../../../projects/ng-components-tsi/src/lib/ui/forms/inputs/switch-activo/switch-activo.component.ts","../../../projects/ng-components-tsi/src/lib/ui/forms/inputs/switch-activo/switch-activo.component.html","../../../projects/ng-components-tsi/src/lib/directivas/inputs/only-number-flex.directive.ts","../../../projects/ng-components-tsi/src/lib/directivas/inputs/caracteres-codigo.directive.ts","../../../projects/ng-components-tsi/src/lib/ui/forms/inputs/input/input.component.ts","../../../projects/ng-components-tsi/src/lib/ui/forms/inputs/input/input.component.html","../../../projects/ng-components-tsi/src/lib/ui/forms/inputs/input-clase/input-clase.component.ts","../../../projects/ng-components-tsi/src/lib/ui/forms/inputs/input-clase/input-clase.component.html","../../../projects/ng-components-tsi/src/lib/ui/forms/inputs/input-dinamico/input-dinamico.component.ts","../../../projects/ng-components-tsi/src/lib/ui/forms/inputs/input-dinamico/input-dinamico.component.html","../../../projects/ng-components-tsi/src/lib/ui/forms/inputs/radio/radio.component.ts","../../../projects/ng-components-tsi/src/lib/ui/forms/inputs/radio/radio.component.html","../../../projects/ng-components-tsi/src/lib/ui/forms/inputs/input-radio/input-radio.component.ts","../../../projects/ng-components-tsi/src/lib/ui/forms/inputs/input-radio/input-radio.component.html","../../../projects/ng-components-tsi/src/lib/ui/forms/inputs/multiselected/multiselected.component.ts","../../../projects/ng-components-tsi/src/lib/ui/forms/inputs/multiselected/multiselected.component.html","../../../projects/ng-components-tsi/src/lib/ui/forms/inputs/switch/switch.component.ts","../../../projects/ng-components-tsi/src/lib/ui/forms/inputs/switch/switch.component.html","../../../projects/ng-components-tsi/src/lib/ui/forms/lists/list-option/list-option.component.ts","../../../projects/ng-components-tsi/src/lib/ui/forms/lists/list-option/list-option.component.html","../../../projects/ng-components-tsi/src/lib/ui/forms/lists/list-situaciones/list-situaciones.component.ts","../../../projects/ng-components-tsi/src/lib/ui/forms/lists/list-situaciones/list-situaciones.component.html","../../../projects/ng-components-tsi/src/lib/ui/forms/lists/multi-select-dropdown/multi-select-dropdown.component.ts","../../../projects/ng-components-tsi/src/lib/ui/forms/lists/multi-select-dropdown/multi-select-dropdown.component.html","../../../projects/ng-components-tsi/src/lib/ui/forms/sidebar/sidebar.component.ts","../../../projects/ng-components-tsi/src/lib/ui/forms/sidebar/sidebar.component.html","../../../projects/ng-components-tsi/src/lib/ui/general/detalle-credito/detalle-credito.component.ts","../../../projects/ng-components-tsi/src/lib/ui/general/detalle-credito/detalle-credito.component.html","../../../projects/ng-components-tsi/src/lib/ui/general/montos-calcular/montos-calcular.component.ts","../../../projects/ng-components-tsi/src/lib/ui/general/montos-calcular/montos-calcular.component.html","../../../projects/ng-components-tsi/src/lib/ui/general/spinner/spinner.component.ts","../../../projects/ng-components-tsi/src/lib/ui/general/spinner/spinner.component.html","../../../projects/ng-components-tsi/src/lib/directivas/estilos/icons.directive.ts","../../../projects/ng-components-tsi/src/lib/directivas/estilos/buttons-modal.directive.ts","../../../projects/ng-components-tsi/src/lib/directivas/estilos/buttons-outline-directive.ts","../../../projects/ng-components-tsi/src/lib/ui/tables/dropdown-menu/dropdown-menu.component.ts","../../../projects/ng-components-tsi/src/lib/ui/tables/dropdown-menu/dropdown-menu.component.html","../../../projects/ng-components-tsi/src/lib/ui/tables/card-mobile/card-mobile.component.ts","../../../projects/ng-components-tsi/src/lib/ui/tables/card-mobile/card-mobile.component.html","../../../projects/ng-components-tsi/src/lib/ui/tables/paginador/paginador.component.ts","../../../projects/ng-components-tsi/src/lib/ui/tables/paginador/paginador.component.html","../../../projects/ng-components-tsi/src/lib/ui/tables/table-advance/table-advance.component.ts","../../../projects/ng-components-tsi/src/lib/ui/tables/table-advance/table-advance.component.html","../../../projects/ng-components-tsi/src/lib/ui/tables/table-advance-optimizada/table-advance-optimizada.component.ts","../../../projects/ng-components-tsi/src/lib/ui/tables/table-advance-optimizada/table-advance-optimizada.component.html","../../../projects/ng-components-tsi/src/lib/ui/tables/table-busqueda/table-busqueda.component.ts","../../../projects/ng-components-tsi/src/lib/ui/tables/table-busqueda/table-busqueda.component.html","../../../projects/ng-components-tsi/src/lib/ui/tables/table-detalle/table-detalle.component.ts","../../../projects/ng-components-tsi/src/lib/ui/tables/table-detalle/table-detalle.component.html","../../../projects/ng-components-tsi/src/lib/ui/tables/table-simple/table-simple.component.ts","../../../projects/ng-components-tsi/src/lib/ui/tables/table-simple/table-simple.component.html","../../../projects/ng-components-tsi/src/lib/directivas/tables/tsi-column-def.directive.ts","../../../projects/ng-components-tsi/src/lib/service/formateador.service.ts","../../../projects/ng-components-tsi/src/lib/enums/table-events.ts","../../../projects/ng-components-tsi/src/lib/ui/tables/table-ultimate/table-ultimate.component.ts","../../../projects/ng-components-tsi/src/lib/ui/tables/table-ultimate/table-ultimate.component.html","../../../projects/ng-components-tsi/src/lib/ui/tables/table-ultimate-pinned/table-ultimate-pinned.component.ts","../../../projects/ng-components-tsi/src/lib/ui/tables/table-ultimate-pinned/table-ultimate-pinned.component.html","../../../projects/ng-components-tsi/src/lib/ui/tables/table-ultimate-pivot/table-ultimate-pivot.component.ts","../../../projects/ng-components-tsi/src/lib/ui/tables/table-ultimate-pivot/table-ultimate-pivot.component.html","../../../projects/ng-components-tsi/src/lib/ui/tables/table-agrupada/table-agrupada.component.ts","../../../projects/ng-components-tsi/src/lib/ui/tables/table-agrupada/table-agrupada.component.html","../../../projects/ng-components-tsi/src/lib/ui/tabs/tab-item/tab-item.component.ts","../../../projects/ng-components-tsi/src/lib/ui/tabs/nav-tabs/nav-tabs.component.ts","../../../projects/ng-components-tsi/src/lib/ui/tabs/nav-tabs/nav-tabs.component.html","../../../projects/ng-components-tsi/src/lib/modals/general/md-generico/md-generico.component.ts","../../../projects/ng-components-tsi/src/lib/modals/general/md-generico/md-generico.component.html","../../../projects/ng-components-tsi/src/lib/service/alert.service.ts","../../../projects/ng-components-tsi/src/lib/utils/helpers/modal-result.ts","../../../projects/ng-components-tsi/src/lib/service/alert-confirmation.service.ts","../../../projects/ng-components-tsi/src/lib/service/alert-error.service.ts","../../../projects/ng-components-tsi/src/lib/models/button-properties.model.ts","../../../projects/ng-components-tsi/src/lib/models/dropdownoption.model.ts","../../../projects/ng-components-tsi/src/lib/models/table-data.model.ts","../../../projects/ng-components-tsi/src/lib/models/general/recursos.model.ts","../../../projects/ng-components-tsi/src/lib/utils/general/validaciones.ts","../../../projects/ng-components-tsi/src/lib/utils/general/validaciones-simple.ts","../../../projects/ng-components-tsi/src/lib/utils/helpers/api-result.ts","../../../projects/ng-components-tsi/src/public-api.ts","../../../projects/ng-components-tsi/src/ng-components-tsi.ts"],"sourcesContent":["import { Directive, HostListener, input, output } from '@angular/core';\r\n\r\n@Directive({\r\n  selector: '[atajoTecla]'\r\n})\r\nexport class AtajosDirective {\r\n\r\n  altKeyCombination = input<string>('')\r\n  emitirAtajo = output<void>()\r\n\r\n  @HostListener('window:keydown', ['$event'])\r\n  onKeyDown(event: KeyboardEvent) {\r\n\r\n    const key = event.key?.toLowerCase?.();\r\n    if (!key) return;\r\n\r\n    if (event.ctrlKey &&\r\n        !event.altKey && \r\n        !event.metaKey && \r\n        !event.shiftKey && \r\n        key === this.altKeyCombination().toLowerCase()) {\r\n      event.preventDefault();\r\n      this.emitirAtajo.emit();\r\n    }\r\n  }\r\n}\r\n","export const COLOR_CLASSES = {\r\n    azul: 'btn-info',\r\n    rojo: 'btn-danger',\r\n    rojo_alerta: 'btn-danger-alert',\r\n    verde: 'btn-success',\r\n    negro: 'btn-dark',\r\n    amarillo: 'btn-warning',\r\n    gris: 'btn-secondary',\r\n    plomo: 'btn-dark bg-mid-button'\r\n}\r\n\r\nexport const OUTLINE_COLOR_CLASSES = {\r\n    azul: 'btn-outline-info',\r\n    rojo: 'btn-outline-danger',\r\n    verde: 'btn-outline-success',\r\n    negro: 'btn-outline-dark',\r\n    amarillo: 'btn-outline-warning',\r\n    gris: 'btn-outline-secondary',\r\n}\r\n\r\nexport const ICON_CLASSES = {\r\n    agregar: 'fa-plus',\r\n    buscar: 'fa-search',\r\n    guardar: 'fa-save',\r\n    nocancelar: 'fa-check-circle',\r\n    cancelar: 'fa-times-circle',\r\n    cancelar2: 'fa-times',\r\n    marcar: 'fa-file',\r\n    atras: 'fa-angle-double-left',\r\n    adelante: 'fa-angle-double-right',\r\n    eliminar: 'fa-trash-alt',\r\n    imprimir: 'fa-print',\r\n    subir: 'fa-upload',\r\n    bajar: 'fa-download',\r\n    ver: 'fa-eye',\r\n    comentario: 'fa-comment',\r\n    editar: 'fa-pencil-alt',\r\n    calcular: 'fa-calculator',\r\n    aprobar: 'fa-thumbs-up',\r\n    desaprobar: 'fa-thumbs-down',\r\n    check: 'fa-check',\r\n    excel: 'fa-file-excel',\r\n    pdf: 'fa-file-pdf',\r\n    refresh: 'fa-sync-alt',\r\n    cerrar: 'fa-times',\r\n    visar: 'fa-paper-plane',\r\n    anular: 'fa-ban',\r\n    trazabilidad: 'fa-copy',\r\n    correo: 'fa-envelope-open',\r\n    usuario: 'fa-user-alt',\r\n    enviarSunat: 'fa-location-arrow',\r\n    descargar: 'fa-download',\r\n    borrar: 'fa-eraser',\r\n    lista: 'fa-list',\r\n    monedas: 'fa-coins',\r\n    izquierda: 'fa-arrow-left',\r\n    derecha: 'fa-arrow-right',\r\n    caja: 'fas fa-folder-plus',\r\n    cerrar_caja: 'fas fa-rectangle-xmark',\r\n    abrir_caja: 'fas fa-box-open',\r\n    liquidar: 'fas fa-cash-register',\r\n    configuracion: 'fas fa-cog',\r\n    contrato: 'fas fa-file-contract',\r\n    bloquear: 'fas fa-lock',\r\n    desbloquear: 'fas fa-unlock',\r\n    folder: 'fas fa-folder',\r\n    folder_open: 'fas fa-folder-open',\r\n    detail: 'fas fa-file-lines',\r\n    reloj: 'fas fa-history',\r\n}","import { Component, computed, effect, ElementRef, inject, input, output, signal, viewChild, ViewChild } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\r\nimport { AtajosDirective } from '../../../directivas/acciones/atajos.directive';\r\nimport { ButtonVariant, ColorType, IconType, OutlineType } from '../../../models/button-color.model';\r\nimport { COLOR_CLASSES, ICON_CLASSES, OUTLINE_COLOR_CLASSES } from '../../../directivas/estilos/button.constants';\r\nimport { NgbTooltipModule } from '@ng-bootstrap/ng-bootstrap';\r\n\r\n@Component({\r\n  selector: 'app-button',\r\n  imports: [CommonModule, NgbTooltipModule, AtajosDirective],\r\n  templateUrl: './button.component.html',\r\n  styleUrl: './button.component.scss'\r\n})\r\nexport class ButtonComponent {\r\n\r\n  private sanitizer = inject(DomSanitizer)\r\n\r\n  @ViewChild('fileInput') fileInput!: ElementRef<HTMLInputElement>\r\n\r\n  buttonNormal = viewChild<ElementRef<HTMLInputElement>>('boton')\r\n  autoFocus = input<boolean>(false)\r\n\r\n  variante = input<ButtonVariant>('estandar')\r\n\r\n  color = input<ColorType>(undefined)\r\n  outline = input<OutlineType>(undefined)\r\n  icon = input<IconType>(undefined)\r\n  tooltip = input<string>('')\r\n\r\n  texto = input<string>('')\r\n  isHtml = input<boolean>(false)\r\n  closeButton = input<boolean>(false)\r\n  sunatButton = input<boolean>(false)\r\n  inputButton = input<boolean>(false)\r\n  buttonDeshabilitado = input<boolean>(false)\r\n  atajo = input<string>('')\r\n\r\n  dropdownButton = input<boolean>(false)\r\n  extraClass = input<string>('')\r\n\r\n  accion = output<void>()\r\n\r\n  disabled = input<boolean>(false)\r\n\r\n  uploadButton = input<boolean>(false)\r\n  accept = input<string>('*/*')\r\n  fileSelected = output<File | File[]>()\r\n  isMultiple = input<boolean>(false)\r\n\r\n  isRounded = input<boolean>(false)\r\n  isNotStyle = input<boolean>(false)\r\n  isFullWidth = input<boolean>(false)\r\n  paddingX = input<string>('px-3')\r\n  paddingY = input<string>('')\r\n  minWidth = input<number>(null)\r\n\r\n\r\n  hasFocus = signal(false);\r\n\r\n  onFocus() {\r\n    this.hasFocus.set(true);\r\n  }\r\n\r\n  onBlur() {\r\n    this.hasFocus.set(false);\r\n  }\r\n\r\n  constructor() {\r\n    effect(() => {\r\n      if (this.autoFocus() && this.buttonNormal()) {\r\n        setTimeout(() => {\r\n          this.buttonNormal().nativeElement.focus()\r\n          this.hasFocus.set(true)\r\n        }, 100)\r\n      }\r\n    })\r\n  }\r\n\r\n  getFocusColor(): string {\r\n    switch (this.color() ?? this.outline()) {\r\n      case 'rojo': return '255,0,0';\r\n      case 'rojo_alerta': return '255,0,0';\r\n      case 'azul': return '0,123,255';\r\n      case 'verde': return '0,200,0';\r\n      case 'amarillo': return '255,152,0';\r\n      case 'negro': return '33,37,41';\r\n      case 'gris': return '108,117,125';\r\n      case 'plomo': return '128,128,128';\r\n      default: return '0,123,255';\r\n    }\r\n  }\r\n\r\n  getSafeHtml(): SafeHtml {\r\n    return this.sanitizer.bypassSecurityTrustHtml(this.texto())\r\n  }\r\n\r\n  shouldBlockClick(): boolean {\r\n    return this.buttonDeshabilitado() == true\r\n  }\r\n\r\n  getColorClass(): string {\r\n    return this.color() ? COLOR_CLASSES[this.color()] || '' : ''\r\n  }\r\n\r\n  getColorClassOutline(): string {\r\n    return this.outline() ? OUTLINE_COLOR_CLASSES[this.outline()] || '' : ''\r\n  }\r\n\r\n  getIconClass(): string {\r\n    const iconClass = this.icon() ? `${ICON_CLASSES[this.icon()] || ''} ${!this.isRounded() ? 'me-1' : ''}` : ''\r\n    return iconClass ? `fa ${iconClass}` : ''\r\n  }\r\n\r\n  handleClick(event: MouseEvent): void {\r\n    if (this.shouldBlockClick()) {\r\n      event.stopPropagation()\r\n      event.preventDefault()\r\n      return\r\n    }\r\n\r\n    if (this.uploadButton()) {\r\n      event.stopPropagation()\r\n      this.triggerFileInput()\r\n    } else {\r\n      this.ejecutarAccion()\r\n    }\r\n  }\r\n\r\n  ejecutarAccion() {\r\n    this.accion.emit()\r\n  }\r\n\r\n  triggerFileInput(): void {\r\n    if (!this.disabled()) {\r\n      this.fileInput.nativeElement.click()\r\n    }\r\n  }\r\n\r\n  handleFileInput(event: Event): void {\r\n    const input = event.target as HTMLInputElement\r\n    if (input.files && input.files.length > 0) {\r\n      if (this.isMultiple()) {\r\n        this.fileSelected.emit(Array.from(input.files))\r\n      } else {\r\n        this.fileSelected.emit(input.files[0])\r\n      }\r\n      input.value = ''\r\n    }\r\n  }\r\n\r\n  construirAlt = () => {\r\n    return this.atajo() ? `${this.texto()}: Ctrl + ${this.atajo()}` : \"\"\r\n  }\r\n\r\n  getClasses() {\r\n    return [\r\n      this.getBaseClasses(),\r\n      this.getVariantClasses(),\r\n      this.getStateClasses(),\r\n      this.getWidthClass()\r\n    ];\r\n  }\r\n\r\n  getBaseClasses() {\r\n    const variante = this.variante();\r\n\r\n    // Variante link: sin borde ni fondo; el color lo da --focus-color-rgb vía CSS.\r\n    if (variante === 'link') {\r\n      return `btn btn-link-modern me-1 fs-8 ${this.paddingX()} ${this.paddingY()}`;\r\n    }\r\n\r\n    const isModern = variante === 'modern';\r\n    const hoverClass = isModern ? 'btn-modern' : 'button-tilt-hover';\r\n\r\n    if (this.isNotStyle()) return `btn btn-sm ${isModern ? 'btn-modern' : ''}`;\r\n    if (this.isRounded()) return `circle ${hoverClass}`;\r\n    return `btn btn-rounded ${hoverClass} text-white me-1 fs-8 ${this.paddingX()} ${this.paddingY()}`;\r\n  }\r\n\r\n  getVariantClasses() {\r\n    // En link el color se resuelve por CSS (--focus-color-rgb), sin clase de Bootstrap.\r\n    if (this.variante() === 'link') return '';\r\n\r\n    return this.outline()\r\n      ? this.getColorClassOutline()\r\n      : this.getColorClass();\r\n  }\r\n\r\n  getStateClasses() {\r\n    return this.hasFocus() ? 'aura-focus' : '';\r\n  }\r\n\r\n  getWidthClass() {\r\n    return this.isFullWidth() ? 'w-100' : 'w-auto w-sm-100';\r\n  }\r\n\r\n  iconsWithImage: IconType[] = ['sunat', 'bcp', 'ibk', 'bbva', 'bnacion', 'banbif' ,'scotia']\r\n\r\n  isImageIcon = (icon: IconType) => this.iconsWithImage.includes(icon)\r\n\r\n  getImageName = () => {\r\n    const imageIcon = {\r\n      'sunat': 'Sunat.ico',\r\n      'bcp': 'BCP.svg',\r\n      'ibk': 'IBK.svg',\r\n      'bbva': 'BBVA.svg',\r\n      'bnacion': 'BNACION.svg',\r\n      'banbif': 'BANBIF.svg',\r\n      'scotia': 'SCOTIA.svg'\r\n    }\r\n    return `assets/images/${imageIcon[this.icon() as IconType]}`\r\n  }\r\n}","@if(!closeButton() && !dropdownButton() && !uploadButton() && ! inputButton()){\r\n<button atajoTecla #boton [altKeyCombination]=\"atajo()\"\r\n    (emitirAtajo)=\"disabled() ? null : ( atajo() ? ejecutarAccion() : null)\" [title]=\"construirAlt()\"\r\n    (focus)=\"onFocus()\" (blur)=\"onBlur()\"\r\n    [style.--focus-color-rgb]=\"getFocusColor()\"\r\n    [style.--focus-color]=\"'rgba(' + getFocusColor() + ',0.5)'\"\r\n    [style.min-width.px]=\"minWidth()\"\r\n    [ngClass]=\"getClasses()\" (click)=\"ejecutarAccion()\" [disabled]=\"disabled()\"\r\n    [id]=\"`id_button_${texto()}`\">\r\n    @if (isImageIcon(icon())) {\r\n        <img [src]=\"getImageName()\" class=\"button-icon-hover\" height=\"16px\">\r\n    }\r\n    @else {\r\n        <i [ngClass]=\"getIconClass()\" class=\"button-icon-hover\"></i>\r\n    }\r\n    @if(texto()){\r\n    <span [innerHTML]=\"isHtml() ? getSafeHtml() : texto()\"></span>\r\n    }\r\n</button>\r\n}\r\n\r\n@if(inputButton()){\r\n<button class=\"btn button-tilt-hover text-white me-1 fs-6 px-3 py-0 w-auto w-sm-100 radius-none padd\"\r\n    [ngClass]=\"[outline() ? getColorClassOutline() : getColorClass(), !texto() ? 'boton-buscar' : '']\"\r\n    (click)=\"ejecutarAccion()\" [disabled]=\"disabled()\">\r\n    <i [ngClass]=\"getIconClass()\" class=\"button-icon-hover\"></i>\r\n    @if(texto()){\r\n    <span>{{ texto() }}</span>\r\n    }\r\n</button>\r\n}\r\n\r\n@if(closeButton()){\r\n<button class=\"btn close fs-5 no-border\" (click)=\"ejecutarAccion()\" [disabled]=\"disabled()\">\r\n    <i class=\"me-1 button-icon-hover text-dark fw-bold\" [ngClass]=\"getIconClass()\"></i>\r\n</button>\r\n}\r\n\r\n@if(dropdownButton()){\r\n<button class=\"dropdown-item fs-6\" (click)=\"handleClick($event)\" [disabled]=\"disabled()\" [ngClass]=\"extraClass()\"\r\n    [ngbTooltip]=\"tooltip()\" [style.cursor]=\"shouldBlockClick() ? 'not-allowed' : 'pointer'\" placement=\"right\">\r\n    \r\n    @if (isImageIcon(icon())) {\r\n        <img [src]=\"getImageName()\" class=\"me-1 button-icon-hover\" height=\"16px\" [alt]=\"icon()\" >\r\n    }\r\n    @else {\r\n        <i [ngClass]=\"getIconClass()\" class=\"me-1\"></i>\r\n    }\r\n\r\n    @if(texto()){\r\n    <span [innerHTML]=\"isHtml() ? getSafeHtml() : texto()\"></span>\r\n    }\r\n    @if(uploadButton()){\r\n    <input type=\"file\" #fileInput [accept]=\"accept()\" (change)=\"handleFileInput($event)\" [disabled]=\"disabled()\"\r\n        class=\"d-none\">\r\n    }\r\n</button>\r\n}\r\n\r\n@if(uploadButton() && !dropdownButton()){\r\n<button class=\"btn btn-rounded button-tilt-hover text-white me-1 fs-8 px-3 w-auto w-sm-100\"\r\n    [ngClass]=\"outline() ? getColorClassOutline() : getColorClass()\" (click)=\"triggerFileInput()\"\r\n    [disabled]=\"disabled()\" [ngbTooltip]=\"tooltip()\" type=\"button\">\r\n    <i [ngClass]=\"getIconClass()\" class=\"me-1 button-icon-hover\"></i>\r\n    @if(texto()){\r\n    <span [innerHTML]=\"isHtml() ? getSafeHtml() : texto()\"></span>\r\n    }\r\n    <input type=\"file\" #fileInput [accept]=\"accept()\" (change)=\"handleFileInput($event)\" [multiple]=\"isMultiple()\" [disabled]=\"disabled()\"\r\n        class=\"d-none\">\r\n</button>\r\n}","import { computed, Injectable, signal } from '@angular/core';\r\n\r\nexport interface Toast {\r\n  id: number,\r\n  title: string,\r\n  message: string,\r\n  subtitle?: string,\r\n  icon?: string,\r\n  type: 'success' | 'error' | 'info' | 'warning' | 'webpush' | 'loading',\r\n  progress?: number;\r\n  autoClose?: boolean;\r\n}\r\n\r\n@Injectable({\r\n  providedIn: 'root'\r\n})\r\nexport class ToastService {\r\n\r\n  toasts = signal<Toast[]>([])\r\n  toastCount = computed(() => this.toasts().length)\r\n\r\n  private show(title: string, message: string, type: 'success' | 'error' | 'info' | 'warning' | 'webpush', subtitle?: string) {\r\n    const id = Date.now() * 1000 + Math.floor(Math.random() * 1000);\r\n    const toast: Toast = { id, title, message, type, subtitle }\r\n\r\n    this.toasts.update((prev) => [...prev, toast])\r\n    setTimeout(() => this.remove(id), type == 'webpush' ? 10000 : 3000)\r\n    return id\r\n  }\r\n\r\n  showLoading(message: string, subtitle?: string) {\r\n    const id = Date.now() * 1000 + Math.floor(Math.random() * 1000);\r\n    \r\n    const toast: Toast = { \r\n      id, \r\n      title: 'Procesando...', \r\n      message, \r\n      type: 'loading', \r\n      subtitle, \r\n      progress: 0,\r\n      autoClose: false\r\n    };\r\n    this.toasts.update(prev => [...prev, toast]);\r\n    return id;\r\n  }\r\n\r\n  updateProgress(id: number, progress: number, title:string = 'Reporte listo', message:string = 'Carga exitosa') {\r\n    this.toasts.update(prev =>\r\n      prev.map(t => t.id === id ? { ...t, progress, title, message } : t)\r\n    );\r\n  }\r\n\r\n  remove(id: number) {\r\n    this.toasts.update(prev => prev.filter(t => t.id !== id))\r\n  }\r\n\r\n  success(title: string, message: string) {\r\n    return this.show(title, message, 'success')\r\n  }\r\n\r\n  error(title: string, message: string) {\r\n    return this.show(title, message, 'error')\r\n  }\r\n\r\n  info(title: string, message: string) {\r\n    return this.show(title, message, 'info')\r\n  }\r\n\r\n  warning(title: string, message: string) {\r\n    return this.show(title, message, 'warning')\r\n  }\r\n\r\n  webpush(title: string, message: string, subtitle?: string, icon: string = 'fas fa-bell') {\r\n    const id = Date.now() * 1000 + Math.floor(Math.random() * 1000);\r\n    const toast: Toast = { id, title, message, type: 'webpush', subtitle, icon };\r\n    this.toasts.update(prev => [...prev, toast]);\r\n    setTimeout(() => this.remove(id), 10000);\r\n    return id;\r\n  }\r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport { Component, computed, signal, inject, input, effect, model } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { ButtonComponent } from '../../forms/button/button.component';\r\nimport { ToastService } from '../../../service/toast.service';\r\nimport { ColorType } from '../../../models/button-color.model';\r\nimport { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap';\r\nimport { getFirstItem, ItemGenerico, validaArray, validarVacioAndNull } from 'shared-tsi';\r\n\r\n@Component({\r\n  selector: 'app-alert-confirmation',\r\n  imports: [CommonModule, FormsModule, ButtonComponent],\r\n  templateUrl: './alert-confirmation.component.html',\r\n  styleUrl: './alert-confirmation.component.scss'\r\n})\r\nexport class AlertConfirmationComponent {\r\n\r\n  private activeModal = inject(NgbActiveModal)\r\n  private toast = inject(ToastService)\r\n\r\n  showTextarea = signal<boolean>(true)\r\n  title = signal<string>('Confirmar acción')\r\n  texto = signal<string>('')\r\n  textoFormateado = computed(() => {\r\n    const texto = this.texto()\r\n    const matches = [...texto.matchAll(/[-]{5,}/g)]\r\n\r\n    if (matches.length == 0) {\r\n      return texto.replace(/\\n/g, '<br>')\r\n    }\r\n\r\n    const lastMatch = matches[matches.length - 1]\r\n    const start = lastMatch.index!\r\n    const end = start + lastMatch[0].length\r\n\r\n    const textoSinUltimaLinea = texto.slice(0, start) + texto.slice(end)\r\n\r\n    return textoSinUltimaLinea\r\n      .replace(/\\n/g, '<br>')\r\n      .replace(/[-]{5,}/g, '<hr class=\"my-2 custom-hr\" />')\r\n  })\r\n  select = signal<boolean>(false)\r\n  opciones = signal<(string | ItemGenerico)[]>([])\r\n\r\n  isArrayString = computed(() => this.opciones().every(opt => typeof opt == 'string'))\r\n  opcionesFormateadas = computed<ItemGenerico[]>(() => this.opciones().map(op => typeof op == 'string' ? { codigo: op, descri: op } : op))\r\n\r\n  selectedOption = model<any>('')\r\n  textareaValue = signal<string>('')\r\n\r\n  confirmar = signal<string>('Aceptar')\r\n  mostrarConfirmar = signal<boolean>(true)\r\n\r\n  cancelar = signal<string>('Cancelar')\r\n  mostrarCancelar = signal<boolean>(true)\r\n\r\n  mostrarExtra = signal<boolean>(false)\r\n  extra = signal<string>('')\r\n  colorExtra = signal<ColorType>('azul')\r\n\r\n  maxLength = signal<number>(200)\r\n  \r\n  focus = signal<boolean>(true)\r\n  showLabel = signal<boolean>(true)\r\n\r\n\r\n  get textareaValueModel(): string {\r\n    return this.textareaValue()\r\n  }\r\n  set textareaValueModel(val: string) {\r\n    this.textareaValue.set(val)\r\n  }\r\n\r\n  mostrarTextareaComputed = computed(() => {\r\n    if (!this.select()) return true\r\n    const opts = this.opcionesFormateadas()\r\n    const sel = this.selectedOption()\r\n    return sel == opts[opts.length - 1].codigo\r\n  })\r\n\r\n  constructor() {\r\n    effect(() => {\r\n      if(!this.select()) return\r\n      if(!validaArray(this.opcionesFormateadas())) return\r\n      if (validarVacioAndNull(this.selectedOption())) return\r\n      const first = getFirstItem<ItemGenerico>(this.opcionesFormateadas())\r\n      this.selectedOption.set(first.codigo)\r\n    })\r\n\r\n  }\r\n\r\n  onTextareaChange(value: string): void {\r\n    this.textareaValue.set(value)\r\n  }\r\n\r\n  onConfirmar(): void {\r\n    const opts = this.opcionesFormateadas()\r\n    const selected = this.selectedOption()\r\n\r\n    if (this.select() && selected == opts[0].codigo) {\r\n      this.toast.warning('Advertencia', 'Debe seleccionar una opción correcta.')\r\n      return\r\n    }\r\n\r\n    if (this.showTextarea() && this.mostrarTextareaComputed() && !this.textareaValue().trim()) {\r\n      this.toast.warning('Advertencia', 'Debe ingresar un motivo.')\r\n      return\r\n    }\r\n\r\n    if (!this.select()) {\r\n      this.activeModal.close(this.showTextarea() ? this.textareaValue().trim() : true)\r\n    } else {\r\n      if (this.showTextarea() && this.mostrarTextareaComputed()) {\r\n        this.activeModal.close(this.textareaValue().trim())\r\n      } else {\r\n        this.activeModal.close(selected)\r\n      }\r\n    }\r\n  }\r\n  \r\n  onExtra(): void {\r\n    this.activeModal.close('extra')\r\n  }\r\n\r\n  closeModal(): void {\r\n    this.activeModal.close()\r\n  }\r\n}\r\n","<div class=\"alert-confirm-container\">\n\n\n  <div class=\"alert-confirm-content\">\n\n    <div class=\"icon-wrapper\">\n      <div class=\"icon-circle\">\n        <i class=\"fas fa-exclamation-triangle\"></i>\n      </div>\n      <div class=\"icon-badge\">\n        <i class=\"fas fa-exclamation text-warning\"></i>\n      </div>\n    </div>\n\n    <h2 class=\"error-title\">{{ title() }}</h2>\n\n    <div class=\"confirm-message\" [innerHTML]=\"textoFormateado()\"></div>\n\n    @if(select()){\n    <div class=\"select-wrapper\">\n      @if (showLabel()) {\n      <label class=\"select-label\">Motivo:</label>\n      }\n      <select class=\"form-select\" [(ngModel)]=\"selectedOption\">\n        @for(opt of opcionesFormateadas(); track $index){\n        <option [value]=\"opt.codigo\">{{ opt.descri }}</option>\n        }\n      </select>\n    </div>\n    }\n\n    @if(showTextarea() && mostrarTextareaComputed()){\n    <div class=\"textarea-wrapper\">\n      <textarea class=\"form-control\" placeholder=\"Ingresar motivo...\" [(ngModel)]=\"textareaValueModel\"\n        (ngModelChange)=\"onTextareaChange($event)\" [maxlength]=\"maxLength()\">\n      </textarea>\n      <div class=\"character-counter\" [class.color-caracter]=\"(maxLength() - (textareaValueModel?.length || 0)) < 10\">\n        Caracteres disponibles: {{ maxLength() - (textareaValueModel?.length || 0) }} de {{ maxLength() }}\n      </div>\n    </div>\n    }\n  </div>\n\n\n  <div class=\"actions\">\n    @if(mostrarConfirmar()){\n    <app-button [texto]=\"confirmar()\" color=\"azul\" (accion)=\"onConfirmar()\" [isHtml]=\"true\" [autoFocus]=\"focus()\" [minWidth]=\"100\" />\n    }\n    @if(mostrarExtra()){\n    <app-button [texto]=\"extra()\" [color]=\"colorExtra()\" (accion)=\"onExtra()\" [isHtml]=\"true\" />\n    }\n    @if(mostrarCancelar()){\n    <app-button [texto]=\"cancelar()\" color=\"rojo\" (accion)=\"closeModal()\" [isHtml]=\"true\" [autoFocus]=\"!focus()\" [minWidth]=\"100\" />\n    }\n  </div>\n\n  <div class=\"fw-bold fs-6 mt-4 d-inline-flex px-3 py-1 rounded d-flex align-items-center gap-2\"\n    style=\"background: rgba(128, 128, 128, 0.185);\">\n    <i class=\"fa-solid fa-shield-halved\"></i>\n    Por favor, selecciona cuidadosamente. Esta acción es irreversible.\n  </div>\n\n</div>","import { NgClass } from '@angular/common';\r\nimport { Component, computed, input } from '@angular/core';\r\n\r\n@Component({\r\n  selector: 'app-alerta',\r\n  imports: [NgClass],\r\n  templateUrl: './alerta.component.html',\r\n  styleUrl: './alerta.component.scss'\r\n})\r\n\r\nexport class AlertaComponent {\r\n  titulo = input<string>('Atención:')\r\n  mensaje = input<string>('La consulta muestra los 100 primeros registros.')\r\n  iconSize = input<number>(25)\r\n  classContainer = input<string>('p-2')\r\n  paddingClass = input<number>(73)\r\n  validateSalto = input<boolean>(false)\r\n\r\n  mensajeFormateado = computed(() => {\r\n    if (!this.validateSalto()) {\r\n      return this.mensaje()\r\n    }\r\n    return this.mensaje().replace(/\\n/g, '<br>')\r\n  })\r\n}\r\n","<div class=\"d-flex bg-title align-items-center flex-md-row {{classContainer()}}\"\r\n    [ngClass]=\"{'flex-column': (titulo()?.length || 0) + (mensajeFormateado()?.length || 0) > 100}\">\r\n    <i class=\"fas fa-exclamation-circle color-icon me-sm-1 mb-1 mb-sm-0\" [style.fontSize.px]=\"iconSize()\"></i>\r\n    <div class=\"text-alerta text-center text-sm-start ms-1\" [class.text-hanging]=\"validateSalto()\"\r\n    [style.paddingLeft.px]=\"validateSalto() ? paddingClass() : null\" >\r\n        @if (titulo()) {\r\n        <strong class=\"alert-title\">{{ titulo() }}</strong>\r\n        }\r\n        @if (!validateSalto()) {\r\n        {{ mensaje() }}\r\n        }\r\n\r\n        @if (validateSalto()) {\r\n        <span class=\"alert-message\" [innerHTML]=\"mensajeFormateado()\"></span>\r\n        }\r\n        <ng-content></ng-content>\r\n    </div>\r\n</div>","import { CommonModule } from '@angular/common';\nimport { Component, computed, signal, inject } from '@angular/core';\nimport { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap';\nimport { ButtonComponent } from '../../forms/button/button.component';\n\n@Component({\n  selector: 'app-alert-error',\n  imports: [CommonModule, ButtonComponent],\n  templateUrl: './alert-error.component.html',\n  styleUrl: './alert-error.component.scss'\n})\n\nexport class AlertErrorComponent {\n\n  private activeModal = inject(NgbActiveModal)\n\n  titulo = signal<string>('Algo salió mal')\n  mensaje = signal<string>('')\n  codigoEstado = signal<string>('')\n  idTraza = signal<string>('')\n  timestamp = signal<string>('')\n\n  mensajeFormateado = computed(() =>\n    this.mensaje().replace(/\\n/g, '<br>')\n  )\n\n  onAceptar(): void {\n    this.activeModal.close(true)\n  }\n}\n","<div class=\"alert-error-container\">\n\n    <div class=\"alert-error-content\">\n\n        <div class=\"icon-wrapper\">\n            <div class=\"icon-circle\">\n                <i class=\"fas fa-exclamation\"></i>\n            </div>\n            <div class=\"icon-badge\">\n                <i class=\"fas fa-exclamation-triangle\"></i>\n            </div>\n        </div>\n\n        <h2 class=\"error-title text-dark\">{{ titulo() }}</h2>\n\n        <p class=\"error-message\" [innerHTML]=\"mensajeFormateado()\"></p>\n\n        @if (codigoEstado() || idTraza() || timestamp()) {\n        <div class=\"technical-details\">\n            <div class=\"tech-header\">\n                <i class=\"fas fa-terminal\"></i>\n                <span>DETALLES TÉCNICOS</span>\n            </div>\n            @if (codigoEstado()) {\n            <div class=\"tech-row\">\n                <span class=\"tech-label\">CÓDIGO_ESTADO:</span>\n                <span class=\"tech-value error-code\">{{ codigoEstado() }}</span>\n            </div>\n            }\n            @if (idTraza()) {\n            <div class=\"tech-row\">\n                <span class=\"tech-label\">ID_TRAZA:</span>\n                <span class=\"tech-value\">{{ idTraza() }}</span>\n            </div>\n            }\n            @if (timestamp()) {\n            <div class=\"tech-row\">\n                <span class=\"tech-label\">TIMESTAMP:</span>\n                <span class=\"tech-value\">{{ timestamp() }}</span>\n            </div>\n            }\n        </div>\n        }\n\n    </div>\n\n    <div class=\"actions\">\n        <app-button texto=\"Aceptar\" color=\"rojo_alerta\" [isFullWidth]=\"true\" (accion)=\"onAceptar()\" [autoFocus]=\"true\"\n            paddingY=\"py-2\" />\n    </div>\n\n</div>","import { NgClass } from '@angular/common';\r\nimport { ChangeDetectionStrategy, Component, input } from '@angular/core';\r\n\r\n@Component({\r\n  selector: 'app-badge',\r\n  imports: [NgClass],\r\n  template: `\r\n      <span class=\"badge text-dark font-weight-bold me-2\" [ngClass]=\"color()\" [style.fontSize.px]=\"size()\"> {{ label() }} </span>\r\n  `,\r\n  changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class BadgeComponent {\r\n  label = input<string>('Exp');\r\n  color = input<string>('bg-warning');\r\n  size = input<number>(10.5);\r\n}","import { animate, style, transition, trigger } from '@angular/animations';\r\nimport { Component, inject, input } from '@angular/core';\r\nimport { ToastService } from '../../../service/toast.service';\r\n@Component({\r\n  selector: 'app-toaster',\r\n  imports: [],\r\n  templateUrl: './toaster.component.html',\r\n  styleUrl: './toaster.component.scss',\r\n  animations: [\r\n    trigger('toastAnimation', [\r\n      transition(':enter', [\r\n        style({ transform: 'translateX(110%)', opacity: 0, scale: 0.95 }),\r\n        animate('400ms cubic-bezier(0.34, 1.56, 0.64, 1)', style({ transform: 'translateX(0)', opacity: 1, scale: 1 }))\r\n      ]),\r\n      transition(':leave', [\r\n        animate('250ms cubic-bezier(0.4, 0, 1, 1)', style({ transform: 'translateX(110%)', opacity: 0, scale: 0.95 }))\r\n      ])\r\n    ])\r\n  ]\r\n})\r\nexport class ToasterComponent {\r\n\r\n  private toastService = inject(ToastService)\r\n\r\n  toasts = this.toastService.toasts\r\n\r\n  iconType = {\r\n    'success': 'fas fa-check bg-success',\r\n    'error': 'fas fa-times bg-danger',\r\n    'info': 'fas fa-info bg-info',\r\n    'warning': 'fas fa-exclamation-triangle bg-warning'\r\n  }\r\n\r\n  get toastNormal() {\r\n    return this.toasts().filter(toas => toas.type != 'webpush')\r\n  }\r\n\r\n  get toastWebPush() {\r\n    return this.toasts().filter(toas => toas.type == 'webpush')\r\n  }\r\n\r\n  get hasWebPush(): boolean {\r\n    return this.toasts().some(toast => toast.type == 'webpush')\r\n  }\r\n\r\n  removeToast(id: number) {\r\n    this.toastService.remove(id)\r\n  }\r\n}\r\n","<div class=\"toastr-container\">\n    @for (toast of toastNormal; track toast.id) {\n\n    <div class=\"toast {{toast.type}}\" [class.loading-done]=\"(toast.progress ?? 0) >= 100\" [@toastAnimation]>\n\n        @if (toast.type == 'loading') {\n\n            @if ((toast.progress ?? 0) < 100) {\n                <div class=\"toast-icon\">\n                    <div class=\"loading-orbit\">\n                        <div class=\"file-core\">\n                            <i class=\"fas fa-file-alt\"></i>\n                        </div>\n                    </div>\n                </div>\n                <div class=\"toast-content loading-content\">\n                    <h4 class=\"toast-title\">{{ toast.title }}</h4>\n                    <p class=\"toast-message\">{{ toast.message }}</p>\n                    <div class=\"loading-bar-wrap\">\n                        <div class=\"loading-bar-fill\"></div>\n                    </div>\n                </div>\n            } @else {\n                <div class=\"toast-icon\">\n                    <div class=\"complete-circle\">\n                        <i class=\"fas fa-check\"></i>\n                    </div>\n                </div>\n                <div class=\"toast-content\">\n                    <h4 class=\"toast-title\">{{ toast.title }}</h4>\n                    <p class=\"toast-message\">{{ toast.message }}</p>\n                </div>\n            }\n\n            <button class=\"toast-close\" (click)=\"removeToast(toast.id)\">\n                <svg width=\"10\" height=\"10\" viewBox=\"0 0 10 10\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n                    <path d=\"M1 1L9 9M9 1L1 9\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\"/>\n                </svg>\n            </button>\n\n        } @else {\n\n            <div class=\"toast-icon\">\n                <i class=\"{{iconType[toast.type]}}\"></i>\n            </div>\n            <div class=\"toast-content\">\n                <h4 class=\"toast-title\">{{ toast.title }}</h4>\n                <p class=\"toast-message\">{{ toast.message }}</p>\n            </div>\n            <button class=\"toast-close\" (click)=\"removeToast(toast.id)\">\n                <svg width=\"10\" height=\"10\" viewBox=\"0 0 10 10\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n                    <path d=\"M1 1L9 9M9 1L1 9\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\"/>\n                </svg>\n            </button>\n            <div class=\"toast-loader\"></div>\n\n        }\n\n    </div>\n    }\n</div>\n\n<div class=\"toastr-webpush\">\n    @for (toast of toastWebPush; track toast.id) {\n    <div class=\"toast-webpush {{toast.type}}\" [@toastAnimation]>\n\n        <div class=\"toast-icon\">\n            <div class=\"webpush-icon-wrap\">\n                <i class=\"{{ toast.icon ?? 'fas fa-bell' }}\"></i>\n                <span class=\"live-dot\"></span>\n            </div>\n        </div>\n\n        <div class=\"toast-content-webpush\">\n            <div class=\"webpush-header\">\n                <h4 class=\"toast-title\">{{ toast.title }}</h4>\n                <span class=\"webpush-badge\">\n                    <span class=\"badge-dot\"></span>EN VIVO\n                </span>\n            </div>\n            <p class=\"toast-message-webpush\">{{ toast.message }}</p>\n            @if (toast.subtitle) {\n                <p class=\"toast-subtitle\">\n                    <i class=\"fas fa-bolt\"></i>\n                    {{ toast.subtitle }}\n                </p>\n            }\n        </div>\n\n        <button class=\"toast-close-webpush\" (click)=\"removeToast(toast.id)\">\n            <svg width=\"10\" height=\"10\" viewBox=\"0 0 10 10\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n                <path d=\"M1 1L9 9M9 1L1 9\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\"/>\n            </svg>\n        </button>\n        <div class=\"toast-loader-webpush\"></div>\n    </div>\n    }\n</div>\n","import { OverlayModule } from '@angular/cdk/overlay';\r\nimport { NgTemplateOutlet, NgClass } from '@angular/common';\r\nimport { Component, contentChild, input, signal, TemplateRef } from '@angular/core';\r\n\r\n@Component({\r\n  selector: 'app-dropdown-cdk',\r\n  imports: [OverlayModule, NgTemplateOutlet, NgClass],\r\n  templateUrl: './dropdown-cdk.component.html',\r\n  styleUrl: './dropdown-cdk.component.scss'\r\n})\r\nexport class DropdownCdkComponent {\r\n\r\n  show = signal<boolean>(false)\r\n  trigger = contentChild<TemplateRef<any>>('trigger');\r\n  content = contentChild<TemplateRef<any>>('content');\r\n  inline = input<boolean>(false)\r\n  altoContainer = input<number>(200)\r\n}\r\n","<div class=\"w-100\">\r\n\r\n    <div \r\n    cdkOverlayOrigin\r\n    #dropdown=\"cdkOverlayOrigin\"\r\n    (click)=\"show.set(true)\"\r\n    [ngClass]=\"{'d-inline-block': inline()}\">\r\n    <ng-container *ngTemplateOutlet=\"trigger()\"></ng-container>\r\n  </div>\r\n\r\n    <ng-template cdkConnectedOverlay [cdkConnectedOverlayOrigin]=\"dropdown\" [cdkConnectedOverlayOpen]=\"show()\"\r\n        [cdkConnectedOverlayHasBackdrop]=\"true\" (backdropClick)=\"show.set(false)\"\r\n        [cdkConnectedOverlayPush]=\"true\" [cdkConnectedOverlayViewportMargin]=\"8\"\r\n        cdkConnectedOverlayPanelClass=\"autocomplete-overlay\" cdkConnectedOverlayBackdropClass=\"transparent-backdrop\">\r\n\r\n        <div class=\"contenido\" [style.maxHeight.px]=\"altoContainer()\">\r\n            <ng-container *ngTemplateOutlet=\"content()\"></ng-container>\r\n        </div>\r\n\r\n    </ng-template>\r\n</div>","import { animate, state, style, transition, trigger } from \"@angular/animations\";\r\n\r\n\r\nexport const fadeInOut = trigger('fadeInOut', [\r\n    transition(':enter', [\r\n      style({ opacity: 0, transform: 'translateY(-5px)' }),\r\n      animate('200ms ease-out', style({ opacity: 1, transform: 'translateY(0)' })),\r\n    ]),\r\n    transition(':leave', [\r\n      animate('200ms ease-in', style({ opacity: 0, transform: 'translateY(-5px)' })),\r\n    ]),\r\n  ]);\r\n\r\n\r\nexport const dropdownAnimation = trigger('dropdownAnimation', [\r\n    transition(':enter', [\r\n      style({ height: '0', opacity: 0, transform: 'translateY(-10px)', overflow: 'hidden' }),\r\n      animate(\r\n        '200ms ease-out',\r\n        style({ height: '*', opacity: 1, transform: 'translateY(0)' })\r\n      ),\r\n    ]),\r\n    transition(':leave', [\r\n      animate(\r\n        '200ms ease-in',\r\n        style({ height: '0', opacity: 0, transform: 'translateY(-10px)' })\r\n      ),\r\n    ]),\r\n  ]);\r\n\r\nexport const dropdownAnimationV2 = trigger('dropdownAnimation', [\r\n    state('cerrado', style({\r\n    height: '0px',\r\n    opacity: 0,\r\n    transform: 'translateY(-10px)',\r\n    overflow: 'hidden',\r\n  })),\r\n  state('abierto', style({\r\n    height: '*',\r\n    opacity: 1,\r\n    transform: 'translateY(0)',\r\n    overflow: 'hidden',\r\n  })),\r\n  transition('cerrado <=> abierto', animate('300ms ease')),\r\n  ]);  ","import { Component, ContentChild, input, output, signal, TemplateRef } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { fadeInOut } from '../../../directivas/animaciones/fade-animation';\r\n\r\n@Component({\r\n  selector: 'app-dropdown',\r\n  imports: [CommonModule],\r\n  templateUrl: './dropdown.component.html',\r\n  styleUrl: './dropdown.component.scss',\r\n  animations: [fadeInOut]\r\n})\r\nexport class DropdownComponent {\r\n  @ContentChild('customActions', { static: false }) customActions!: TemplateRef<any>\r\n  \r\n  items = input<string[]>([])\r\n  selected = output<string>()\r\n  isOpen = signal<boolean>(false)\r\n\r\n  toggleDropdown() {\r\n    if (this.customActions) {\r\n      this.isOpen.set(!this.isOpen())\r\n    }\r\n  }\r\n\r\n  onDropdownClick(event: MouseEvent) {\r\n    const target = event.target as HTMLElement\r\n    if (!target.closest('.close-on-click')) {\r\n      this.isOpen.set(false)\r\n    }\r\n  }\r\n\r\n  selectItem(item: string) {\r\n    this.selected.emit(item)\r\n    this.isOpen.set(false)\r\n  }\r\n}\r\n","<div class=\"menu-content\" (click)=\"toggleDropdown()\">\r\n    <button class=\"toggle\">\r\n      <i class=\"fa-solid fa-ellipsis-vertical\"></i>\r\n    </button>\r\n        @if (isOpen()) {\r\n          <div class=\"menu-desplegable top-right\" @fadeInOut (click)=\"onDropdownClick($event)\">\r\n            <ng-container *ngTemplateOutlet=\"customActions; context: { $implicit: '' }\"></ng-container>\r\n          </div>\r\n        }        \r\n  </div>","import { Component, input, model } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\n\r\n@Component({\r\n  selector: 'app-filter-toggle',\r\n  imports: [CommonModule],\r\n  template: `\r\n    <div class=\"d-flex align-items-center cursor-pointer\"\r\n         [ngClass]=\"{ 'disabled-icon': !hasData() }\">\r\n      <i class=\"fa-solid fa-filter px-2 me-1\" [class]=\"'fs-' + tamanio()\"></i>\r\n      <i class=\"icon-arrow fa-solid fa-chevron-down\"\r\n         [ngClass]=\"{ 'rotate-up': !withFiltro(), 'disabled-icon': !hasData() }\"></i>\r\n    </div>\r\n  `,\r\n  styleUrl: './filter-toggle.component.scss'\r\n})\r\n\r\nexport class FilterToggleComponent {\r\n\r\n  hasData = input<boolean>(false)\r\n  tamanio = input<string>('7')\r\n  withFiltro = model<boolean>(true)\r\n\r\n  toggleFiltro() {\r\n    if (this.hasData()) {\r\n      this.withFiltro.update(value => !value)\r\n    }\r\n  }\r\n}","import { CommonModule } from '@angular/common';\r\nimport { Component, input, output, model } from '@angular/core';\r\nimport { ButtonComponent } from '../button/button.component';\r\nimport { AlertaComponent } from \"../../alerts/alerta/alerta.component\";\r\nimport { FilterToggleComponent } from \"../filter-toggle/filter-toggle.component\";\r\n\r\n@Component({\r\n  selector: 'app-header',\r\n  imports: [CommonModule, ButtonComponent, AlertaComponent, FilterToggleComponent],\r\n  templateUrl: './header.component.html',\r\n  styleUrl: './header.component.scss'\r\n})\r\n\r\nexport class HeaderComponent {\r\n\r\n  title = input<string>('')\r\n  tamanio = input<string>('7')\r\n\r\n  showFiltro = input<boolean>(true)\r\n  withFiltro = model<boolean>(true)\r\n\r\n  hasData = input<boolean>(false)\r\n\r\n  isModal = input<boolean>(false)\r\n  cerrarModal = output<void>()\r\n\r\n  showAlerta = input<boolean>(false)\r\n  textAlerta = input<string>('La consulta muestra los 100 primeros registros.')\r\n  validateSalto = input<boolean>(false)\r\n\r\n  toggleFiltro() {\r\n    if (this.hasData()) {\r\n      this.withFiltro.update(value => !value)\r\n    }\r\n  }\r\n\r\n  cerrar() {\r\n    this.cerrarModal.emit()\r\n  }\r\n}","<div class=\"header-outer\" [ngClass]=\"{ 'align-items-center': !validateSalto(), 'align-items-start': validateSalto()}\">\r\n    <div class=\"header-main\">\r\n        <div (click)=\"toggleFiltro()\" [ngClass]=\"{ 'cursor-pointer': !isModal() }\"\r\n            class=\"header-title d-flex align-items-center mb-2\">\r\n            <h5 class=\"fw-bold no-select\" [ngClass]=\"['fs-' + tamanio(), isModal() ? 'pt-3' : 'pt-2']\">\r\n                {{ title() }}\r\n            </h5>\r\n            @if(showFiltro()){\r\n            <div [ngClass]=\"{'pt-2': isModal()}\">\r\n                <app-filter-toggle [hasData]=\"hasData()\" [(withFiltro)]=\"withFiltro\" />\r\n            </div>\r\n            }\r\n        </div>\r\n\r\n        @if (showAlerta()) {\r\n        <app-alerta class=\"header-alerta\" [mensaje]=\"textAlerta()\" [validateSalto]=\"validateSalto()\" />\r\n        }\r\n    </div>\r\n\r\n    @if(isModal()){\r\n    <div class=\"header-close\">\r\n        <app-button icon=\"cerrar\" [closeButton]=\"true\" (accion)=\"cerrar()\" />\r\n    </div>\r\n    }\r\n</div>","import { Component, effect, ElementRef, input, model, output, QueryList, signal, ViewChildren } from '@angular/core';\r\nimport { NgClass } from '@angular/common';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { Subject, debounceTime, distinctUntilChanged } from 'rxjs';\r\n\r\n@Component({\r\n  selector: 'app-autocomplete',\r\n  imports: [NgClass, FormsModule],\r\n  templateUrl: './autocomplete.component.html',\r\n  styleUrl: './autocomplete.component.scss',\r\n})\r\n\r\nexport class AutocompleteComponent {\r\n\r\n  private searchByIdSubject = new Subject<string>()\r\n\r\n  @ViewChildren('autocompleteItem') autocompleteItems!: QueryList<ElementRef>\r\n\r\n  wlabel = input<number>(0)\r\n  label = input<string>('')\r\n  isRequired = input<boolean>(false)\r\n  lista = input<any[]>([])\r\n  filteredItems = signal<any[]>([])\r\n  searchText = model<string>('')\r\n  selectedItem = signal<any>({})\r\n  showDropdown = signal<boolean>(false)\r\n\r\n  keyCodigo = input<string>('')\r\n  keyDescri = input<string>('')\r\n\r\n  withTodos = input<boolean>(false)\r\n  valuecod = model<any>()\r\n  searchIdText = model<string>('')\r\n\r\n  disabled1 = model<boolean>()\r\n  disabled2 = model<boolean>()\r\n\r\n  isVertical = input<boolean>(false)\r\n  showId = input<boolean>(false)\r\n  highlightedIndex = signal<number>(-1)\r\n  joinInfo = input<boolean>(false)\r\n\r\n  changeInput = output<void>()\r\n\r\n  activeFocus = input<boolean>(true)\r\n\r\n  customBorderColor = input<string>('')\r\n  customBoxShadow = input<string>('')\r\n  customTransition = input<string>('')\r\n\r\n  constructor() {\r\n    this.searchByIdSubject.pipe(\r\n      debounceTime(300),\r\n      distinctUntilChanged()\r\n    ).subscribe(id => this.handleSearchById(id))\r\n    effect(() => {\r\n      const lista = this.lista()\r\n      const id = this.valuecod()\r\n\r\n      if (lista.length > 0) {\r\n        if (id == 'noption' || id == null || id == undefined || id == '') {\r\n          this.clearInputFields()\r\n          this.searchIdText.set('')\r\n        } else {\r\n          const item = lista.find(it => String(it[this.keyCodigo()]) == String(id))\r\n          if (item) {\r\n            this.updateFieldsForItem(item)\r\n          } else {\r\n            this.searchIdText.set(String(id))\r\n            this.searchText.set('')\r\n            this.selectedItem.set({})\r\n          }\r\n        }\r\n      }\r\n    })\r\n  }\r\n\r\n  onSearch() {\r\n    const searchTerm = this.searchText().trim()\r\n    if (searchTerm == '') {\r\n      this.filteredItems.set([...this.lista()])\r\n      if (this.joinInfo()) {\r\n        this.valuecod.set('noption')\r\n      }\r\n    } else {\r\n      const filtered = this.lista().filter(item => {\r\n        const matchesEntrada = item[this.keyDescri()].toLowerCase().includes(searchTerm.toLowerCase())\r\n\r\n        if (this.joinInfo()) {\r\n          const matchesSalida = String(item[this.keyCodigo()]).toLowerCase().includes(searchTerm.toLowerCase())\r\n          return matchesEntrada || matchesSalida\r\n        }\r\n\r\n        return matchesEntrada\r\n      })\r\n\r\n      this.filteredItems.set(filtered)\r\n\r\n      if (this.joinInfo() && filtered.length == 0) {\r\n        this.valuecod.set('noption')\r\n      }\r\n    }\r\n    this.highlightedIndex.set(-1)\r\n    this.showDropdown.set(this.filteredItems().length > 0)\r\n  }\r\n\r\n  onSearchById() {\r\n    this.searchByIdSubject.next(this.searchIdText().trim())\r\n  }\r\n\r\n  onClick() {\r\n    if (this.showDropdown()) {\r\n      this.showDropdown.set(false)\r\n    } else {\r\n      this.filteredItems.set([...this.lista()])\r\n      this.showDropdown.set(true)\r\n    }\r\n  }\r\n\r\n  selectItem(item: any) {\r\n    this.selectedItem.set(item)\r\n    this.valuecod.set(item[this.keyCodigo()])\r\n    this.updateFieldsForItem(item)\r\n    this.showDropdown.set(false)\r\n    this.emitirChange()\r\n  }\r\n\r\n  onKeyDown(event: KeyboardEvent) {\r\n    const items = this.filteredItems()\r\n    if (!items.length) return\r\n\r\n    switch (event.key) {\r\n      case 'ArrowDown':\r\n        event.preventDefault()\r\n        this.highlightedIndex.update(i => (i + 1) % items.length)\r\n        this.scrollToItem(this.highlightedIndex())\r\n        break\r\n      case 'ArrowUp':\r\n        event.preventDefault()\r\n        this.highlightedIndex.update(i => (i - 1 + items.length) % items.length)\r\n        this.scrollToItem(this.highlightedIndex())\r\n        break\r\n      case 'Enter':\r\n        event.preventDefault()\r\n        if (this.highlightedIndex() >= 0) {\r\n          this.selectItem(items[this.highlightedIndex()])\r\n        }\r\n        break\r\n    }\r\n  }\r\n\r\n  handleSearchById(id: string) {\r\n    if (id == '') {\r\n      this.clearInputFields()\r\n      this.valuecod.set('noption')\r\n      return\r\n    }\r\n\r\n    const itemExists = this.lista().some(it => String(it[this.keyCodigo()]) == id)\r\n\r\n    if (!itemExists) {\r\n      this.valuecod.set('noption')\r\n      this.searchIdText.set(id)\r\n      this.searchText.set('')\r\n      this.selectedItem.set({})\r\n      return\r\n    }\r\n\r\n    this.valuecod.set(id)\r\n    const item = this.lista().find(it => String(it[this.keyCodigo()]) == id)\r\n    if (item) {\r\n      this.updateFieldsForItem(item)\r\n    } else {\r\n      this.searchIdText.set(id)\r\n      this.searchText.set('')\r\n      this.selectedItem.set({})\r\n    }\r\n  }\r\n\r\n  updateFieldsForItem(item: any) {\r\n    this.selectedItem.set(item)\r\n    this.searchIdText.set(item[this.keyCodigo()])\r\n    this.searchText.set(\r\n      this.joinInfo()\r\n        ? `${item[this.keyCodigo()]} - ${item[this.keyDescri()]}`\r\n        : item[this.keyDescri()]\r\n    )\r\n  }\r\n\r\n  clearInputFields() {\r\n    this.searchText.set('')\r\n    this.selectedItem.set({})\r\n  }\r\n\r\n  scrollToItem(index: number) {\r\n    const itemElement = this.autocompleteItems?.toArray()[index]?.nativeElement\r\n    itemElement?.scrollIntoView({ block: 'nearest', behavior: 'smooth' })\r\n  }\r\n\r\n  emitirChange() {\r\n    this.changeInput.emit()\r\n  }\r\n}","@if (isVertical()) {\r\n<label for=\"{{'id_' + label()}}\" [style.min-width]=\"wlabel() + 'px'\"> {{label()}} @if (isRequired()) {<span\r\n    class=\"fw-bold text-danger\">(*)</span>}</label>\r\n}\r\n<div class=\"d-flex align-items-center\">\r\n  @if (!isVertical()) {\r\n  <label for=\"{{'id_' + label()}}\" [style.min-width]=\"wlabel() + 'px'\">{{label()}} @if (isRequired()) { <span\r\n      class=\"fw-bold text-danger\">(*)</span>}</label>\r\n  }\r\n\r\n  <div class=\"autocomplete d-flex \">\r\n    @if(showId()){\r\n    <div class=\"content-1 me-1\">\r\n      <input type=\"text\" class=\"form-control show-input\"\r\n        [attr.data-active-focus]=\"activeFocus() == false ? 'false' : ''\"\r\n        [style.--focus-border-color]=\"customBorderColor()\" [style.--focus-box-shadow]=\"customBoxShadow()\"\r\n        [style.--focus-transition]=\"customTransition()\" [disabled]=\"disabled1()\" [(ngModel)]=\"searchIdText\"\r\n        (input)=\"onSearchById()\" id=\"{{'id_' + label()}}\" name=\"{{'id_' + label()}}\" />\r\n    </div>\r\n    }\r\n\r\n    <div class=\"input-container content-2 me-2\">\r\n      <input type=\"text\" [(ngModel)]=\"searchText\" class=\"form-select\"\r\n        [attr.data-active-focus]=\"activeFocus() == false ? 'false' : ''\"\r\n        [style.--focus-border-color]=\"customBorderColor()\" [style.--focus-box-shadow]=\"customBoxShadow()\"\r\n        [style.--focus-transition]=\"customTransition()\" [disabled]=\"disabled2()\" (input)=\"onSearch()\"\r\n        (blur)=\"showDropdown.set(false)\" (click)=\"onClick()\" (keydown)=\"onKeyDown($event)\" />\r\n      <ul [class.show]=\"showDropdown()\">\r\n        @for (item of filteredItems(); track $index) {\r\n        <li #autocompleteItem\r\n          [ngClass]=\"{'fw-bold': selectedItem()[keyCodigo()] == item[keyCodigo()], 'bg-primary text-white': highlightedIndex() == $index}\"\r\n          (mousedown)=\"selectItem(item)\">\r\n          @if (joinInfo()) {\r\n          {{ item[keyCodigo()] }} - {{ item[keyDescri()] }}\r\n          } @else{\r\n          {{ item[keyDescri()] }}\r\n          }\r\n          @if (selectedItem()[keyCodigo()] == item[keyCodigo()]) {\r\n          <i class=\"far fa-check-circle fw-bold text-success cw-20\"></i>\r\n          }\r\n        </li>\r\n        }\r\n      </ul>\r\n    </div>\r\n  </div>\r\n</div>","import { Directive, ElementRef, inject, Input, Renderer2 } from '@angular/core';\r\n\r\n@Directive({\r\n  selector: 'input[type=checkbox][animatedCheckbox]',\r\n  standalone: true\r\n})\r\n\r\nexport class AnimatedCheckboxDirective {\r\n\r\n  @Input() cbClass: 'success' | 'danger' | 'warning' | 'info' | '' = '';\r\n\r\n  private el = inject(ElementRef<HTMLInputElement>);\r\n  private renderer = inject(Renderer2);\r\n\r\n  ngOnInit() {\r\n    const input = this.el.nativeElement;\r\n    const label = input.closest('label');\r\n    if (!label) return;\r\n\r\n    this.renderer.addClass(label, 'checkbox-animated');\r\n\r\n    if (this.cbClass) {\r\n      this.renderer.addClass(label, this.cbClass);\r\n    }\r\n  }\r\n}","import { NgClass } from '@angular/common';\r\nimport { ChangeDetectionStrategy, Component, input, model, output, signal } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { AnimatedCheckboxDirective } from '../../../../../lib/directivas/estilos/animated-checkbox.directive';\r\n\r\n@Component({\r\n  selector: 'app-check-box',\r\n  imports: [FormsModule,NgClass, AnimatedCheckboxDirective],\r\n  templateUrl: './check-box.component.html',\r\n  styles:``,\r\n  changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class CheckBoxComponent {\r\n  name = input<string>()\r\n  id = input<string>()\r\n  label = input<string>()\r\n  value = input<any>()\r\n  disabled = input<boolean>(false)\r\n  binding = model<any>()\r\n  class = input<'success' | 'danger' | 'warning' | 'info' | ''>('')\r\n  checked = input<boolean>(false)\r\n  changeCheck = output<Event>()\r\n\r\n}\r\n","<label [ngClass]=\"class()\" >\r\n    <input type=\"checkbox\" animatedCheckbox [name]=\"name()\" [id]=\"id()\" [value]=\"value()\" [(ngModel)]=\"binding\" [disabled]=\"disabled()\"\r\n    [checked]=\"checked()\" (change)=\"changeCheck.emit($event)\"\r\n    >\r\n    <span class=\"text-dark\">{{ label() }}</span>\r\n</label>","import { Component, computed, effect, ElementRef, input, model, output, QueryList, signal, viewChild, ViewChildren } from '@angular/core';\r\nimport { NgClass } from '@angular/common';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { OverlayModule } from '@angular/cdk/overlay';\r\nimport { CheckBoxComponent } from \"../check-box/check-box.component\";\r\nimport { fadeInOut } from '../../../../directivas/animaciones/fade-animation';\r\nimport { getFirstItem } from 'shared-tsi';\r\n\r\n@Component({\r\n  selector: 'app-autocomplete-v2',\r\n  imports: [NgClass, FormsModule, OverlayModule, CheckBoxComponent],\r\n  templateUrl: './autocomplete.component.html',\r\n  styleUrl: './autocomplete.component.scss',\r\n  animations: [fadeInOut]\r\n})\r\n\r\nexport class AutocompleteV2Component {\r\n\r\n  @ViewChildren('autocompleteItem') autocompleteItems!: QueryList<ElementRef>\r\n  inputRef = viewChild<ElementRef>('inputRef')\r\n  withInput = signal<number>(null)\r\n\r\n  inputFocus = signal<boolean>(false)\r\n  wlabel = input<number>(0)\r\n  label = input<string>('')\r\n  isRequired = input<boolean>(false)\r\n  showDropdown = signal<boolean>(false)\r\n\r\n  keyCodigo = input<string>('')\r\n  keyDescri = input<string>('')\r\n\r\n  withTodos = input<boolean>(false)\r\n  searchIdText = model<string>('')\r\n\r\n  disabled1 = model<boolean>()\r\n  disabled2 = model<boolean>()\r\n\r\n  isVertical = input<boolean>(false)\r\n  highlightedIndex = signal<number>(-1)\r\n  joinInfo = input<boolean>(false)\r\n\r\n  changeInput = output<void>()\r\n  activeFocus = input<boolean>(true)\r\n  customBorderColor = input<string>('')\r\n  customBoxShadow = input<string>('')\r\n  customTransition = input<string>('')\r\n\r\n  firstItemDefault = input<boolean>(false)\r\n\r\n  // NUEVAS VARIABLES\r\n  lista = input<any[]>([])\r\n  filterQuery = signal<string>('')\r\n  filteredItems = computed(() => this.filterList(this.filterQuery()))\r\n  type = input<'simple' | 'doble'>('simple')\r\n  computedType = computed(() => this.type() == 'doble')\r\n\r\n  value = model<any>(null)\r\n  searchText = model<string>('')\r\n  listaMap = computed(() => this.toKeyValue(this.lista(), this.keyCodigo(), this.keyDescri()))\r\n  firstItem = computed(() => getFirstItem(this.lista()))\r\n\r\n  withCheckTodos = input<boolean>(false)\r\n\r\n  listboxId = computed(() => 'listbox_' + this.label())\r\n  selectedIndex = computed(() => {\r\n    const val = this.value()\r\n    if (val === null || val === undefined || val === '') return -1\r\n    return this.filteredItems().findIndex(item => item[this.keyCodigo()] == val)\r\n  })\r\n\r\n  allDisabled = model<boolean>()\r\n  altoContainer = input<number>(200)\r\n\r\n  private resizeObserver?: ResizeObserver;\r\n\r\n  effectDefaultValue = effect(() => {\r\n    if (this.firstItemDefault()) {\r\n      const firstItem = this.firstItem();\r\n      if (!firstItem) return;\r\n      this.selectItem(firstItem);\r\n      return;\r\n    }\r\n    const map = this.listaMap();\r\n    if (Object.keys(map).length === 0) return;\r\n    this.blurKey();\r\n  })\r\n\r\n  constructor() {\r\n    // effect(() => {\r\n    //   const map = this.listaMap()\r\n    //   if (Object.keys(map).length == 0) return;\r\n    //   this.blurKey()\r\n    // })\r\n\r\n    effect(() => {\r\n      const el = this.inputRef()?.nativeElement;\r\n      if (!el) return;\r\n      this.resizeObserver?.disconnect();\r\n      this.resizeObserver = new ResizeObserver(() => {\r\n        this.withInput.set(el.offsetWidth);\r\n      });\r\n      this.resizeObserver.observe(el);\r\n      this.withInput.set(el.offsetWidth);\r\n    })\r\n  }\r\n\r\n  filterList(text: string) {\r\n    if (!text) return this.lista()\r\n    const searchTerm = text?.trim()?.toLowerCase()\r\n    return this.lista().filter(item => item[this.keyDescri()].toLowerCase().includes(searchTerm))\r\n  }\r\n\r\n  selectItem(item: any) {\r\n    this.value.set(item[this.keyCodigo()])\r\n    this.searchText.set(item[this.keyDescri()])\r\n    this.filterQuery.set('')\r\n    this.showDropdown.set(false)\r\n    this.highlightedIndex.set(-1)\r\n    this.changeInput.emit()\r\n  }\r\n\r\n  openDropdown() {\r\n    this.filterQuery.set('')\r\n    this.showDropdown.set(true)\r\n    this.highlightedIndex.set(this.selectedIndex())\r\n    this.inputRef()?.nativeElement?.select()\r\n  }\r\n\r\n  onBlur() {\r\n    this.showDropdown.set(false)\r\n    this.blurKey()\r\n    this.filterQuery.set('')\r\n    this.highlightedIndex.set(-1)\r\n  }\r\n\r\n  onSearchInput() {\r\n    this.filterQuery.set(this.searchText())\r\n    const items = this.filteredItems()\r\n    this.highlightedIndex.set(items.length === 1 ? 0 : -1)\r\n  }\r\n\r\n  blurKey() {\r\n    this.searchText.set(this.listaMap()[this.value()] ?? '')\r\n  }\r\n\r\n  get descriSelected() {\r\n    return this.listaMap()[this.value()] ?? '';\r\n  }\r\n\r\n  toKeyValue<T extends Record<string, any>, K extends keyof T, V extends keyof T>(\r\n    arr: T[],\r\n    keyField: K,\r\n    valueField: V\r\n  ): Record<T[K] & (string | number), T[V]> {\r\n    return arr.reduce((acc, item) => {\r\n      acc[item[keyField]] = item[valueField];\r\n      return acc;\r\n    }, {} as Record<T[K] & (string | number), T[V]>);\r\n  }\r\n  clear() {\r\n    if (this.allDisabled() || this.disabled2()) return;\r\n    this.searchText.set('')\r\n    this.value.set(null)\r\n    this.filterQuery.set('')\r\n  }\r\n\r\n  onKeyDown(event: KeyboardEvent) {\r\n    if (event.key === 'Escape') {\r\n      event.preventDefault()\r\n      this.showDropdown.set(false)\r\n      this.blurKey()\r\n      this.filterQuery.set('')\r\n      this.highlightedIndex.set(-1)\r\n      return\r\n    }\r\n\r\n    const items = this.filteredItems()\r\n    if (!items.length) return\r\n\r\n    switch (event.key) {\r\n      case 'ArrowDown':\r\n        event.preventDefault()\r\n        this.highlightedIndex.update(i => (i + 1) % items.length)\r\n        this.scrollToItem(this.highlightedIndex())\r\n        break\r\n      case 'ArrowUp':\r\n        event.preventDefault()\r\n        this.highlightedIndex.update(i => (i - 1 + items.length) % items.length)\r\n        this.scrollToItem(this.highlightedIndex())\r\n        break\r\n      case 'Enter':\r\n        event.preventDefault()\r\n        if (this.highlightedIndex() >= 0) {\r\n          this.selectItem(items[this.highlightedIndex()])\r\n          this.inputRef()?.nativeElement?.blur()\r\n        }\r\n        break\r\n    }\r\n  }\r\n\r\n  scrollToItem(index: number) {\r\n    const itemElement = this.autocompleteItems?.toArray()[index]?.nativeElement\r\n    itemElement?.scrollIntoView({ block: 'nearest', behavior: 'smooth' })\r\n  }\r\n}","@if (isVertical()) {\r\n<label for=\"{{'id_' + label()}}\" [style.min-width]=\"wlabel() + 'px'\"> {{label()}} @if (isRequired()) {<span\r\n    class=\"fw-bold text-danger\">(*)</span>}</label>\r\n}\r\n<div class=\"d-flex align-items-center\">\r\n  @if (!isVertical()) {\r\n  <label for=\"{{'id_' + label()}}\" [style.min-width]=\"wlabel() + 'px'\">{{label()}} @if (isRequired()) { <span\r\n      class=\"fw-bold text-danger\">(*)</span>}</label>\r\n  }\r\n\r\n  <div class=\"autocomplete d-flex \">\r\n    @if(computedType()){\r\n    <div class=\"content-1 me-1\">\r\n      <input type=\"text\" class=\"form-control show-input\"\r\n        [attr.data-active-focus]=\"activeFocus() == false ? 'false' : ''\"\r\n        [style.--focus-border-color]=\"customBorderColor()\" [style.--focus-box-shadow]=\"customBoxShadow()\"\r\n        [style.--focus-transition]=\"customTransition()\" [disabled]=\"allDisabled() ? true : disabled1()\"\r\n        [(ngModel)]=\"value\" (blur)=\"blurKey()\" id=\"{{'id_value_' + label()}}\" name=\"{{'id_value_' + label()}}\" />\r\n    </div>\r\n    }\r\n\r\n    <div class=\"input-container content-2 me-2\">\r\n      <input type=\"text\" [autocomplete]=\"false\" [(ngModel)]=\"searchText\" class=\"form-control pe-4\" cdkOverlayOrigin\r\n        #autocomplete=\"cdkOverlayOrigin\" #inputRef [attr.data-active-focus]=\"activeFocus() == false ? 'false' : ''\"\r\n        [style.--focus-border-color]=\"customBorderColor()\" [style.--focus-box-shadow]=\"customBoxShadow()\"\r\n        [style.--focus-transition]=\"customTransition()\" [disabled]=\"allDisabled() ? true : disabled2()\"\r\n        id=\"{{'id_' + label()}}\" name=\"{{'id_' + label()}}\" role=\"combobox\" aria-autocomplete=\"list\"\r\n        aria-haspopup=\"listbox\" [attr.aria-expanded]=\"showDropdown()\" [attr.aria-controls]=\"listboxId()\"\r\n        [attr.aria-activedescendant]=\"highlightedIndex() >= 0 ? (listboxId() + '_opt_' + highlightedIndex()) : null\"\r\n        (input)=\"onSearchInput()\" (blur)=\"onBlur()\" (focus)=\"openDropdown()\" (keydown)=\"onKeyDown($event)\" />\r\n        <i class=\"dropdown-arrow fa-solid fa-chevron-down\" [class.rotate-up]=\"showDropdown()\"></i>\r\n      <!-- @if (searchText().length > 0) {\r\n      <button @fadeInOut type=\"button\" class=\"btn-clear text-dark\" [disabled]=\"allDisabled() ? true : disabled2()\"\r\n        (mousedown)=\"$event.preventDefault()\" (click)=\"clear(); inputRef.focus()\">\r\n        &times;\r\n      </button>\r\n      } @else {\r\n      <i class=\"dropdown-arrow fa-solid fa-chevron-down\" [class.rotate-up]=\"showDropdown()\"></i>\r\n      } -->\r\n      <ng-template cdkConnectedOverlay [cdkConnectedOverlayOrigin]=\"autocomplete\"\r\n        [cdkConnectedOverlayOpen]=\"showDropdown()\" [cdkConnectedOverlayHasBackdrop]=\"true\"\r\n        [cdkConnectedOverlayWidth]=\"withInput()\" (backdropClick)=\"onBlur()\"\r\n        cdkConnectedOverlayPanelClass=\"autocomplete-overlay\" cdkConnectedOverlayBackdropClass=\"transparent-backdrop\">\r\n\r\n        <ul [style.maxHeight.px]=\"altoContainer()\" [id]=\"listboxId()\" role=\"listbox\">\r\n          @for (item of filteredItems(); track $index) {\r\n          <li #autocompleteItem class=\"text-dark\" role=\"option\" [id]=\"listboxId() + '_opt_' + $index\"\r\n            [attr.aria-selected]=\"item[keyCodigo()] == value()\"\r\n            [ngClass]=\"{'fw-bold': item[keyCodigo()] == value(), 'selected-item': highlightedIndex() == $index}\"\r\n            (mousedown)=\"selectItem(item)\">\r\n            @if (joinInfo()) {\r\n            {{ item[keyCodigo()] }} - {{ item[keyDescri()] }}\r\n            } @else{\r\n            {{ item[keyDescri()] }}\r\n            }\r\n            @if (item[keyCodigo()] == value()) {\r\n            <i class=\"ms-2 far fa-check fw-bold text-success cw-20\"></i>\r\n            }\r\n          </li>\r\n          } @empty {\r\n          <li class=\"text-muted no-results\">Sin resultados</li>\r\n          }\r\n        </ul>\r\n      </ng-template>\r\n    </div>\r\n    @if (withCheckTodos()) {\r\n    <div class=\"px-2\"> <app-check-box label=\"Todos\" name=\"check_todos\" [value]=\"true\" [(binding)]=\"allDisabled\"\r\n        (bindingChange)=\"value.set('');\" /></div>\r\n    }\r\n  </div>\r\n</div>","\r\nimport { Component, computed, effect, HostListener, inject, input, model, output, signal } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { fadeInOut } from '../../../../directivas/animaciones/fade-animation';\r\nimport { beep, getFirstItem, validaArray, validarVacioAndNull } from 'shared-tsi';\r\nimport { ToastService } from '../../../../service/toast.service';\r\n\r\n@Component({\r\n  selector: 'app-doble-input',\r\n  imports: [FormsModule],\r\n  templateUrl: './doble-input.component.html',\r\n  styleUrl: './doble-input.component.scss',\r\n  animations: [fadeInOut]\r\n})\r\n\r\nexport class DobleInputComponent {\r\n\r\n  private toast = inject(ToastService)\r\n\r\n  wlabel = input<number>(0)\r\n  label = input<string>('')\r\n  withBuscar = input<boolean>(false)\r\n  withBuscar2 = input<boolean>(false)\r\n  isRequired = input<boolean>(false)\r\n  tipoInput2 = input<number>(1)\r\n  lista = input<any[]>([])\r\n  keyCodigo = input<string>('')\r\n  keyDescri = input<string>('')\r\n  joinInfo = input<boolean>(false)\r\n  isVertical = input<boolean>(false)\r\n  withTodos = input<boolean>(true)\r\n\r\n  firstItemDefault = input<boolean>(false)\r\n\r\n  disabled1 = model<boolean>()\r\n  disabled2 = model<boolean>()\r\n\r\n  value = model<any>()\r\n  value2 = model<any>()\r\n\r\n  changeInput = output<void>()\r\n  activeFocus = input<boolean>(true)\r\n\r\n  customBorderColor = input<string>('')\r\n  customBoxShadow = input<string>('')\r\n  customTransition = input<string>('')\r\n\r\n  maxLength = input<number>(null)\r\n  listName = input<string>('')\r\n  invalidInput = model<boolean>(false)\r\n\r\n  accion1 = output<void>()\r\n  accion2 = output<void>()\r\n\r\n  blur1 = input<() => void>(null)\r\n  enter1 = input<() => void>(null)\r\n\r\n  blur2 = input<() => void>(null)\r\n  enter2 = input<() => void>(null)\r\n\r\n  typeKey = input<'string' | 'number'>('number')\r\n  withAdicionalInfo = input<boolean>(false)\r\n\r\n  validaLista = input<boolean>(false)\r\n\r\n  isSmallScreen = signal<boolean>(window.innerWidth < 443)\r\n\r\n  joinInfoReal = computed(() => this.isSmallScreen() ? true : this.joinInfo());\r\n\r\n  @HostListener('window:resize')\r\n  onResize() {\r\n    this.isSmallScreen.set(window.innerWidth < 443);\r\n  }\r\n\r\n  constructor() {\r\n    effect(() => {\r\n      if (this.invalidInput()) beep()\r\n    })\r\n\r\n    effect(() => {\r\n      if (this.withAdicionalInfo() && validaArray(this.lista()) && this.value() && this.keyCodigo() && this.keyDescri()) {\r\n        this.buscarItem()\r\n      }\r\n    })\r\n\r\n    effect(() => {\r\n      const data = (this.lista() ?? [])\r\n      if (data.length > 0 && this.firstItemDefault()) {\r\n        const firstItem = getFirstItem(data)\r\n        this.value.set(firstItem ? firstItem[this.keyCodigo()] : null)\r\n      }\r\n    })\r\n  }\r\n\r\n  emitirChange() {\r\n    this.changeInput.emit()\r\n    if (this.withAdicionalInfo()) {\r\n      this.buscarItem()\r\n    }\r\n  }\r\n\r\n  buscarItem() {\r\n    const findItem = this.lista().find(item => item[this.keyCodigo()] == this.value())\r\n    this.value2.set(findItem ? findItem[this.keyDescri()] : null)\r\n  }\r\n\r\n  validaItem() {\r\n    if(!this.validaLista()) return\r\n    if (!validaArray(this.lista())) return\r\n    if (this.typeKey() == 'number' && this.value() == -1) return\r\n\r\n    if (this.typeKey() != 'number' && !validarVacioAndNull(this.value())) {\r\n      this.value.set('')\r\n      return\r\n    }\r\n    const findItem = this.lista().find(item => item[this.keyCodigo()] == this.value())\r\n    if (findItem) return\r\n\r\n    const nombre = this.listName() || this.label();\r\n    const isWarning = !!this.listName();\r\n\r\n    const mensaje = `El código ${this.value() ? this.value() : 'vacio'} no existe en la lista de \"${nombre}\"`;\r\n    isWarning ? this.toast.warning('Advertencia', mensaje) : this.toast.error('Error', mensaje);\r\n    const firstItem = getFirstItem(this.lista());\r\n    this.value.set(firstItem ? firstItem[this.keyCodigo()] : null);\r\n  }\r\n\r\n\r\n}\r\n","@if (isVertical()) {\r\n<label for=\"{{'id_' + label()}}\" [style.min-width]=\"wlabel() + 'px'\"> {{label()}} @if (isRequired()) {<span\r\n        class=\"fw-bold text-danger\">(*)</span>}</label>\r\n}\r\n<div class=\"d-flex align-items-center\">\r\n    @if (!isVertical()) {\r\n    <label for=\"{{'id_' + label()}}\" [style.min-width]=\"wlabel() + 'px'\"> {{label()}} @if (isRequired()) {<span\r\n            class=\"fw-bold text-danger\">(*)</span>}</label>\r\n    }\r\n    <div class=\"content-1 me-1\">\r\n        <input type=\"text\" class=\"form-control show-input\"\r\n            (blur)=\"blur1()?.(); validaItem()\" (keyup.enter)=\"enter1()?.()\"\r\n            [attr.data-active-focus]=\"activeFocus() == false ? 'false' : ''\"\r\n            [style.--focus-border-color]=\"customBorderColor()\" [style.--focus-box-shadow]=\"customBoxShadow()\"\r\n            [style.--focus-transition]=\"customTransition()\" [disabled]=\"disabled1()\" [(ngModel)]=\"value\"\r\n            id=\"{{'id_' + label()}}\" name=\"{{'id_' + label()}}\" [attr.maxlength]=\"maxLength()\" (focus)=\"invalidInput.set(false)\">\r\n        @if (withBuscar()) {\r\n        <button class=\"btn btn-dark boton-buscar fs-7\" (click)=\"accion1.emit()\">\r\n            <i class=\"fa fa-search\"></i>\r\n        </button>\r\n        }\r\n    </div>\r\n\r\n    <div class=\"w-100\">\r\n        <div class=\"content-2 position-relative me-2\">\r\n        @if (tipoInput2() == 2) {\r\n        <select class=\"form-select\" [attr.data-active-focus]=\"activeFocus() == false ? 'false' : ''\"\r\n            [style.--focus-border-color]=\"customBorderColor()\" [style.--focus-box-shadow]=\"customBoxShadow()\"\r\n            [style.--focus-transition]=\"customTransition()\" [(ngModel)]=\"value\" [disabled]=\"disabled2()\"\r\n            id=\"{{'id_content' + label()}}\" name=\"{{'id_content' + label()}}\" (change)=\"emitirChange()\" (focus)=\"invalidInput.set(false)\">\r\n            @if (withTodos()) {\r\n            <option [value]=\"typeKey() == 'number' ? -1 : ''\">Todos</option>\r\n            }\r\n            @for (item of lista(); track $index) {\r\n            <option [value]=\"item[keyCodigo()]\"> {{ joinInfoReal() ? item[keyCodigo()] + ' - ' + item[keyDescri()] :\r\n                item[keyDescri()]}}</option>\r\n            }\r\n        </select>\r\n        }\r\n        @if (tipoInput2() == 1) {\r\n        <input type=\"text\" class=\"form-control\" (blur)=\"blur2()?.()\" (keyup.enter)=\"enter2()?.()\" [attr.data-active-focus]=\"activeFocus() == false ? 'false' : ''\"\r\n            [style.--focus-border-color]=\"customBorderColor()\" [style.--focus-box-shadow]=\"customBoxShadow()\"\r\n            [style.--focus-transition]=\"customTransition()\" [disabled]=\"disabled2()\" id=\"{{'id_content' + label()}}\"\r\n            [(ngModel)]=\"value2\"\r\n            name=\"{{'id_content' + label()}}\" [attr.maxlength]=\"maxLength()\" (focus)=\"invalidInput.set(false)\">\r\n        }\r\n        @if (withBuscar2()) {\r\n        <button class=\"btn btn-dark boton-buscar fs-7\" (click)=\"accion2.emit()\">\r\n            <i class=\"fa fa-search\"></i>\r\n        </button>\r\n        }        \r\n        @if (invalidInput()) {\r\n        <div class=\"infoBox\" @fadeInOut><i class=\"fas fa-exclamation-triangle fs-9 text-danger\"></i> Ocurrió un\r\n            error: El campo es obligatorio, asegúrese de ingresar datos válidos.</div>\r\n        }\r\n\r\n    </div>\r\n    </div>\r\n    \r\n</div>","import { DecimalPipe } from '@angular/common';\r\nimport { Directive, ElementRef, HostListener, inject, input } from '@angular/core';\r\nimport { NgModel } from '@angular/forms';\r\nimport { cleanNumber } from 'shared-tsi';\r\n\r\n@Directive({\r\n  selector: '[appDecimal]',\r\n  providers: [DecimalPipe]\r\n})\r\nexport class DecimalDirective {\r\n\r\n  appDecimal = input<string>('1.2-2')\r\n\r\n  private elementRef = inject(ElementRef)\r\n  private decimalPipe = inject(DecimalPipe)\r\n  private ngModel = inject(NgModel)\r\n\r\n  private isFocused = false\r\n\r\n  ngAfterViewInit(): void {\r\n    queueMicrotask(() => {\r\n      this.formatValue()\r\n    })\r\n  }\r\n\r\n  @HostListener('blur')\r\n  onBlur(): void {\r\n    this.isFocused = false\r\n    this.formatValue()\r\n  }\r\n\r\n  // @HostListener('input', ['$event'])\r\n  // onInput(event: Event): void {\r\n  //   const input = event.target as HTMLInputElement\r\n  //   const rawValue = input.value\r\n    \r\n  //   const cleaned = rawValue.replace(/[^0-9.,-]/g, '')\r\n  //   const normalized = cleaned.replace(',', '.')\r\n  //   const parsed = parseFloat(normalized)\r\n\r\n  //   if (!isNaN(parsed)) {\r\n  //     this.ngModel.update.emit(parsed)\r\n  //   }\r\n  // }\r\n\r\n  private formatValue(): void {\r\n    const value = cleanNumber(this.ngModel.model)\r\n    const formatted = this.decimalPipe.transform(value, (this.appDecimal() ?? '1.2-2'))\r\n    this.elementRef.nativeElement.value = formatted !== null ? formatted : this.decimalPipe.transform(0, (this.appDecimal() ?? '1.2-2'))\r\n  }\r\n}\r\n","import { Directive, ElementRef, HostListener, inject } from '@angular/core';\r\n\r\n@Directive({\r\n  selector: '[onlyNumber]'\r\n})\r\nexport class OnlyNumberDirective {\r\n\r\n  private elementRef = inject(ElementRef)\r\n\r\n  @HostListener('keypress', ['$event'])\r\n  onKeyPress(event: KeyboardEvent): void {\r\n    const inputChar = event.key;\r\n    if (inputChar.length > 1 || event.ctrlKey || event.metaKey) return;\r\n\r\n    if (!/^\\d$/.test(inputChar)) {\r\n      event.preventDefault();\r\n    }\r\n  }\r\n\r\n  @HostListener('paste', ['$event'])\r\n  onPaste(event: ClipboardEvent): void {\r\n    event.preventDefault();\r\n\r\n    const pasted = event.clipboardData?.getData('text') || ''\r\n    const cleaned = pasted.replace(/\\D/g, '');\r\n\r\n    const input = this.elementRef.nativeElement\r\n    const currentValue = input.value\r\n    const start = input.selectionStart ?? currentValue.length\r\n    const end = input.selectionEnd ?? currentValue.length\r\n\r\n    const maxLength = input.maxLength;\r\n\r\n    let proposed =\r\n      currentValue.substring(0, start) +\r\n      cleaned +\r\n      currentValue.substring(end)\r\n    \r\n    if (maxLength > 0) {\r\n      proposed = proposed.substring(0, maxLength);\r\n    } \r\n\r\n    input.value = proposed;\r\n    const cursorPosition = Math.min(start + cleaned.length, proposed.length);\r\n    input.setSelectionRange(cursorPosition, cursorPosition);\r\n\r\n    input.dispatchEvent(new Event('input'));\r\n  }\r\n\r\n  @HostListener('input')\r\n  onInput(): void {\r\n    const input = this.elementRef.nativeElement;\r\n    const cleaned = input.value.replace(/\\D/g, '');\r\n\r\n    if (input.value != cleaned) {\r\n      input.value = cleaned;\r\n      input.dispatchEvent(new Event('input'));\r\n    }\r\n  }\r\n\r\n}\r\n","import { Directive, ElementRef, HostListener, inject } from '@angular/core';\r\n\r\n@Directive({\r\n  selector: '[onlyDay]'\r\n})\r\nexport class OnlyDayDirective {\r\n  private elementRef = inject(ElementRef<HTMLInputElement>)\r\n\r\n  @HostListener('keypress', ['$event'])\r\n  onKeyPress(event: KeyboardEvent): void {\r\n    const inputChar = event.key\r\n\r\n    if (event.ctrlKey || event.metaKey || inputChar.length > 1) return\r\n\r\n    if (!/^[0-9]$/.test(inputChar)) {\r\n      event.preventDefault()\r\n      return\r\n    }\r\n\r\n    const input = this.elementRef.nativeElement\r\n    const currentValue = input.value\r\n    const start = input.selectionStart ?? currentValue.length\r\n    const end = input.selectionEnd ?? currentValue.length\r\n\r\n    const proposed = currentValue.substring(0, start) + inputChar + currentValue.substring(end)\r\n    const num = Number(proposed)\r\n\r\n    if (num < 1 || num > 31) {\r\n      event.preventDefault()\r\n    }\r\n  }\r\n\r\n  @HostListener('paste', ['$event'])\r\n  onPaste(event: ClipboardEvent): void {\r\n    const pasted = event.clipboardData?.getData('text') || ''\r\n\r\n    if (!/^\\d+$/.test(pasted)) {\r\n      event.preventDefault()\r\n      return\r\n    }\r\n\r\n    const input = this.elementRef.nativeElement\r\n    const currentValue = input.value\r\n    const start = input.selectionStart ?? currentValue.length\r\n    const end = input.selectionEnd ?? currentValue.length\r\n\r\n    const proposed = currentValue.substring(0, start) + pasted + currentValue.substring(end)\r\n    const num = Number(proposed)\r\n    if (num < 1 || num > 31) {\r\n      event.preventDefault()\r\n    }\r\n  }\r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport { Component, effect, input, model } from '@angular/core';\r\n\r\n@Component({\r\n  selector: 'app-switch-activo',\r\n  imports: [CommonModule],\r\n  templateUrl: './switch-activo.component.html',\r\n  styleUrl: './switch-activo.component.scss'\r\n})\r\nexport class SwitchActivoComponent {\r\n\r\n  valueOn = input.required<any>()\r\n  valueOff = input.required<any>()\r\n\r\n  labelOn = input<string>('Activo')\r\n  labelOff = input<string>('Inactivo')\r\n\r\n  iconOn = input<string>('fas fa-check')\r\n  iconOff = input<string>('fas fa-times')\r\n\r\n  colorOn = input<string>('bg-exito')\r\n  colorOff = input<string>('bg-error')\r\n\r\n  id = input<string>('mode')\r\n\r\n  model = model<any>()\r\n\r\n  _checked = false\r\n\r\n  constructor() {\r\n    effect(() => {\r\n      this._checked = this.model() === this.valueOn()\r\n    });\r\n  }\r\n\r\n  toggle(event: Event) {\r\n    const checkbox = event.target as HTMLInputElement\r\n    this.model.set(checkbox.checked ? this.valueOn() : this.valueOff())\r\n  }\r\n\r\n  currentLabel() {\r\n    return this._checked ? this.labelOn() : this.labelOff()\r\n  }\r\n\r\n  currentColor() {\r\n    return this._checked ? this.colorOn() : this.colorOff()\r\n  }\r\n\r\n  currentIcon() {\r\n    return this._checked ? this.iconOn() : this.iconOff()\r\n  }\r\n}","<div class=\"form-check form-switch d-flex align-items-center\">\r\n    <input class=\"form-check-input\" type=\"checkbox\" role=\"switch\" [checked]=\"_checked\" [ngClass]=\"currentColor()\"\r\n        (change)=\"toggle($event)\" [id]=\"`toogle-${id()}`\">\r\n\r\n    <span class=\"switch-circle\">\r\n        <i [class]=\"currentIcon()\"></i>\r\n    </span>\r\n\r\n    @if (currentLabel()) {\r\n    <label class=\"label-toggle\" [for]=\"`toogle-${id()}`\">\r\n        {{ currentLabel() }}\r\n    </label>\r\n    }\r\n</div>","import { Directive, ElementRef, HostListener, inject } from '@angular/core';\r\n\r\n@Directive({\r\n  selector: '[onlyNumberFlex]'\r\n})\r\nexport class OnlyNumberFlexDirective {\r\n\r\n  private elementRef = inject(ElementRef)\r\n  private regex = /^-?[\\d.,]*$/;\r\n\r\n  @HostListener('keypress', ['$event'])\r\n  onKeyPress(event: KeyboardEvent): void {\r\n    const inputChar = event.key\r\n\r\n    if (event.ctrlKey || event.metaKey || inputChar.length > 1) return\r\n\r\n    const input = this.elementRef.nativeElement\r\n    const currentValue = input.value\r\n    const start = input.selectionStart ?? currentValue.length\r\n    const end = input.selectionEnd ?? currentValue.length\r\n\r\n    const proposed =\r\n      currentValue.substring(0, start) +\r\n      inputChar +\r\n      currentValue.substring(end)\r\n\r\n    if (!this.regex.test(proposed)) {\r\n      event.preventDefault()\r\n    }\r\n  }\r\n\r\n  @HostListener('paste', ['$event'])\r\n  onPaste(event: ClipboardEvent): void {\r\n\r\n    event.preventDefault();\r\n\r\n    const pasted = event.clipboardData?.getData('text') || ''\r\n\r\n    const cleaned = pasted.replace(/[^\\d.,-]/g, '');\r\n    \r\n    const input = this.elementRef.nativeElement\r\n    const currentValue = input.value\r\n    const start = input.selectionStart ?? currentValue.length\r\n    const end = input.selectionEnd ?? currentValue.length\r\n\r\n    const proposed =\r\n      currentValue.substring(0, start) +\r\n      cleaned +\r\n      currentValue.substring(end);\r\n    \r\n    input.value = proposed;\r\n    const cursorPosition = start + cleaned.length;\r\n    input.setSelectionRange(cursorPosition, cursorPosition);\r\n    input.dispatchEvent(new Event('input'));\r\n  }\r\n\r\n}\r\n","import { Directive, HostListener, inject, input } from '@angular/core';\r\nimport { ToastService } from '../../service/toast.service';\r\n\r\n@Directive({\r\n    selector: '[caracteresCodigo]'\r\n})\r\nexport class CaracteresCodigoDirective {\r\n\r\n    private regex: RegExp = /^[a-zA-Z0-9.\\-/]*$/\r\n    private toast = inject(ToastService)\r\n\r\n    caracteresCodigo = input<boolean>(true)\r\n\r\n    @HostListener('keypress', ['$event'])\r\n    onKeyPress(event: KeyboardEvent): void {\r\n        if (!this.caracteresCodigo()) return\r\n        const allowedKeys = ['Delete', 'Backspace', 'Tab', 'Escape', 'Enter']\r\n        const isCtrlCombination =\r\n            event.ctrlKey && ['a', 'c', 'v', 'x'].includes(event.key.toLowerCase())\r\n        if (allowedKeys.includes(event.key) || isCtrlCombination) {\r\n            return\r\n        }\r\n        if (!/^[a-zA-Z0-9.\\-/]$/.test(event.key)) {\r\n            event.preventDefault()\r\n        }\r\n    }\r\n\r\n    @HostListener('input', ['$event'])\r\n    onInput(event: Event) {\r\n        if (!this.caracteresCodigo()) return\r\n        const input = event.target as HTMLInputElement\r\n        const originalValue = input.value\r\n\r\n        const newValue = originalValue.replace(/[^a-zA-Z0-9.\\-/]/g, '')\r\n\r\n        if (originalValue != newValue) {\r\n            input.value = newValue\r\n            this.toast.warning('Advertencia',`Solo se permiten caracteres alfanuméricos, guion (-), punto (.) y slash (/)`)\r\n            input.dispatchEvent(new Event('input'))\r\n        }\r\n    }\r\n\r\n    @HostListener('paste', ['$event'])\r\n    onPaste(event: ClipboardEvent) {\r\n        if (!this.caracteresCodigo()) return\r\n        const clipboardData = event.clipboardData?.getData('text/plain') || ''\r\n        if (!this.regex.test(clipboardData)) {\r\n            event.preventDefault()\r\n            this.toast.warning('Advertencia', `Solo se permiten caracteres alfanuméricos, guion (-), punto (.) y slash (/)`)\r\n        }\r\n    }\r\n\r\n    @HostListener('drop', ['$event'])\r\n    onDrop(event: DragEvent) {\r\n        if (!this.caracteresCodigo()) return\r\n        const textData = event.dataTransfer?.getData('text') || ''\r\n        if (!this.regex.test(textData)) {\r\n            event.preventDefault()\r\n            this.toast.warning('Advertencia',`Solo se permiten caracteres alfanuméricos, guion (-), punto (.) y slash (/)`)\r\n        }\r\n    }\r\n\r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport { ChangeDetectionStrategy, Component, computed, effect, input, linkedSignal, model, output } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { DecimalDirective } from '../../../../directivas/inputs/decimal.directive';\r\nimport { OnlyNumberDirective } from '../../../../directivas/inputs/only-number.directive';\r\nimport { OnlyDayDirective } from '../../../../directivas/inputs/only-day.directive';\r\nimport { fadeInOut } from '../../../../directivas/animaciones/fade-animation';\r\nimport { beep, getFirstItem } from 'shared-tsi';\r\nimport { SwitchActivoComponent } from \"../switch-activo/switch-activo.component\";\r\nimport { OnlyNumberFlexDirective } from \"../../../../directivas/inputs/only-number-flex.directive\";\r\nimport { CaracteresCodigoDirective } from '../../../../directivas/inputs/caracteres-codigo.directive';\r\n\r\n@Component({\r\n  selector: 'app-input',\r\n  imports: [FormsModule, CommonModule, DecimalDirective, OnlyNumberDirective, OnlyDayDirective, SwitchActivoComponent, OnlyNumberFlexDirective, CaracteresCodigoDirective],\r\n  templateUrl: './input.component.html',\r\n  styleUrl: './input.component.scss',\r\n  animations: [fadeInOut],\r\n  changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\n\r\nexport class InputComponent {\r\n  wlabel = input<number>(0)\r\n  label = input<string>('')\r\n  placeholder = input<string>('')\r\n  withBuscar = input<boolean>(false)\r\n  iconButton = input<string>('fa fa-search')\r\n  classButton = input<string>('bg-search')\r\n  isRequired = input<boolean>(false)\r\n  type = input<'text' | 'text-area' | 'date' | 'number' | 'select' | 'number-format-decimal' | 'number-integer' | 'time' | 'day' | 'input-switch'>('text')\r\n  typeStandar = linkedSignal(() => this.type())\r\n  position = input<'start' | 'end' | 'center'>('start')\r\n  value = model<any>()\r\n  value2 = model<any>()\r\n  position_row = input<'center' | 'start' | 'end'>('center')\r\n  withChangeInput = input<boolean>(false)\r\n  disabled = model<boolean>(false)\r\n  isImportant = input<boolean>(false)\r\n  lista = input<any[]>([])\r\n  keyCodigo = input<string>('')\r\n  keyDescri = input<string>('')\r\n  joinInfo = input<boolean>(false)\r\n\r\n  distintInputs = ['text-area', 'select', 'date', 'number-format-decimal', 'number-integer', 'time', 'day', 'input-switch']\r\n  withTodos = input<boolean>(true)\r\n  allDisabled = model<boolean>(false)\r\n\r\n  isVertical = input<boolean>(false)\r\n  alto = input<number>(72)\r\n\r\n  formatNumber = input<string>('1.2-2')\r\n  blur = input<() => void>(null)\r\n  enter = input<() => void>(null)\r\n  keyup = input<() => void>(null)\r\n\r\n  invalidInput = model<boolean>(false)\r\n\r\n  accion = output<void>()\r\n\r\n  activeFocus = input<boolean>(true)\r\n\r\n  customBorderColor = input<string>('')\r\n  customBoxShadow = input<string>('')\r\n  customTransition = input<string>('')\r\n\r\n  maxLength = input<number>(null)\r\n\r\n  valueSize = computed(() => this.value()?.length || 0)\r\n\r\n  textoAyuda = input<string>('')\r\n  sinAyuda = input<boolean>(false)\r\n\r\n  maxWidth = input<number>()\r\n  changeInput = output<any>()\r\n\r\n  showTopLabel = input<boolean>(false)\r\n  topLabelText = input<string>('')\r\n\r\n  firstItemDefault = input<boolean>(false)\r\n  typeKey = input<'string' | 'number'>('number')\r\n  validaCodigo = input<boolean>(false)\r\n\r\n  inputErrorFn = input<((row: any) => boolean) | null>(null);\r\n\r\n  private static nextId = 0;\r\n  readonly inputId = `app-input-${InputComponent.nextId++}`;\r\n\r\n  hasError = computed(() => {\r\n    const validator = this.inputErrorFn();\r\n    return validator\r\n      ? validator(this.value())\r\n      : this.invalidInput();\r\n  });\r\n\r\n  constructor() {\r\n    effect(() => {\r\n      if (this.invalidInput()) beep()\r\n    })\r\n\r\n    effect(() => {\r\n      const data = (this.lista() ?? [])\r\n      if (data.length > 0 && this.firstItemDefault()) {\r\n        const firstItem = getFirstItem(data)\r\n        this.value.set(firstItem ? firstItem[this.keyCodigo()] : null)\r\n      }\r\n    })\r\n  }\r\n\r\n  ngOnInit() {\r\n    this.typeStandar.set(this.type())\r\n  }\r\n\r\n  ejecutarAccion() {\r\n    this.accion.emit()\r\n  }\r\n\r\n  changeInputAction() {\r\n    if (this.typeStandar() == 'select') {\r\n      this.typeStandar.set('text')\r\n      return\r\n    }\r\n    this.typeStandar.set('select')\r\n  }\r\n\r\n  focusInput() {\r\n    this.invalidInput.set(false)\r\n  }\r\n\r\n  callBlur() {\r\n    if (this.typeStandar() == 'day') {\r\n      const val = this.value()\r\n\r\n      if (!val || val.toString().trim() == '') {\r\n        this.invalidInput.set(true)\r\n        beep()\r\n        return\r\n      }\r\n\r\n      const num = Number(val)\r\n      if (isNaN(num) || num < 1 || num > 31) {\r\n        this.invalidInput.set(true)\r\n        beep()\r\n        return\r\n      }\r\n      this.invalidInput.set(false)\r\n    }\r\n\r\n    if (this.blur()) this.blur()()\r\n  }\r\n\r\n  emitirChange() {\r\n    const encontrar = this.lista().find(item => item[this.keyCodigo()] == this.value())\r\n    this.changeInput.emit(encontrar)\r\n  }\r\n}\r\n","@if (isVertical()) {\r\n<label [ngClass]=\"{'text-error': isImportant()}\" [for]=\"inputId\" [style.min-width]=\"wlabel() + 'px'\"> {{label()}} @if (isRequired()) {<span\r\n        class=\"fw-bold text-danger\">(*)</span>}</label>\r\n}\r\n<div class=\"d-flex align-items-{{position_row()}}\">\r\n    @if (!isVertical()) {\r\n    <label [ngClass]=\"{'text-error': isImportant()}\" [for]=\"inputId\" [style.min-width]=\"wlabel() + 'px'\"> {{label()}} @if (isRequired()) {<span\r\n            class=\"fw-bold text-danger\">(*)</span>}</label>\r\n    }\r\n    <div class=\"flex-grow-1 me-2\" style=\"min-width: 0\">\r\n        <div [ngClass]=\"{'d-block': typeStandar() == 'date', 'd-flex': typeStandar() != 'date', 'flex-column': showTopLabel() }\"\r\n            class=\"position-relative\">\r\n            \r\n            @if (showTopLabel() && topLabelText()) {\r\n            <div class=\"input-top-label\">\r\n                <label class=\"fw-bold\">{{ topLabelText() }}</label>\r\n            </div>\r\n            }\r\n            \r\n            @if (!distintInputs.includes(typeStandar())) {\r\n            <input [type]=\"typeStandar()\" (blur)=\"callBlur()\" (keyup.enter)=\"enter()?.()\" (input)=\"keyup()?.()\"\r\n                class=\"form-control text-{{position()}}\"\r\n                [placeholder]=\"placeholder()\"\r\n                [attr.data-active-focus]=\"activeFocus() == false ? 'false' : ''\"\r\n                [style.--focus-border-color]=\"customBorderColor()\" [style.--focus-box-shadow]=\"customBoxShadow()\"\r\n                [style.--focus-transition]=\"customTransition()\" [style.max-width.px]=\"maxWidth()\"\r\n                [class.input-error]=\"hasError()\"\r\n                (focus)=\"invalidInput.set(false)\" autocomplete=\"off\"\r\n                [disabled]=\"allDisabled() ? true : disabled()\" [(ngModel)]=\"value\" [id]=\"inputId\" [caracteresCodigo]=\"validaCodigo()\"\r\n                [name]=\"inputId\" [attr.maxlength]=\"maxLength()\">\r\n            }\r\n\r\n            @if (typeStandar() == 'input-switch') {\r\n            <div class=\"d-flex w-100\">\r\n                <div class=\"flex-grow-1\">\r\n                    <input type=\"text\" class=\"form-control\" (blur)=\"callBlur()\" (keyup.enter)=\"enter()?.()\" (input)=\"keyup()?.()\"\r\n                    [placeholder]=\"placeholder()\"\r\n                [attr.data-active-focus]=\"activeFocus() == false ? 'false' : ''\"\r\n                [style.--focus-border-color]=\"customBorderColor()\" [style.--focus-box-shadow]=\"customBoxShadow()\"\r\n                [style.--focus-transition]=\"customTransition()\" [ngClass]=\"'text-' + position()\"\r\n                [style.max-width.px]=\"maxWidth()\" [disabled]=\"allDisabled() ? true : disabled()\" [(ngModel)]=\"value\"\r\n                [id]=\"inputId\" [name]=\"inputId\" [caracteresCodigo]=\"validaCodigo()\"\r\n                [attr.maxlength]=\"maxLength()\" (focus)=\"invalidInput.set(false)\">\r\n                </div>\r\n                <div class=\"px-2\">\r\n                    <app-switch-activo valueOn=\"S\" valueOff=\"N\" [id]=\"`switch_${inputId}`\" [(model)]=\"value2\" />\r\n                </div>\r\n            </div>\r\n            }\r\n\r\n            @if (typeStandar() == 'number-format-decimal') {\r\n            <input type=\"text\" class=\"form-control\" (blur)=\"callBlur()\" (input)=\"keyup()?.()\" (keyup.enter)=\"enter()?.()\"\r\n                [placeholder]=\"placeholder()\"\r\n                [attr.data-active-focus]=\"activeFocus() == false ? 'false' : ''\"\r\n                [style.--focus-border-color]=\"customBorderColor()\" [style.--focus-box-shadow]=\"customBoxShadow()\"\r\n                [style.--focus-transition]=\"customTransition()\" \r\n                [class.input-error]=\"hasError()\"\r\n                [ngClass]=\"'text-' + position()\"\r\n                [style.max-width.px]=\"maxWidth()\" [disabled]=\"allDisabled() ? true : disabled()\" [(ngModel)]=\"value\"\r\n                [id]=\"inputId\" [name]=\"inputId\" [appDecimal]=\"formatNumber()\" onlyNumberFlex\r\n                [attr.maxlength]=\"maxLength()\" (focus)=\"invalidInput.set(false)\">\r\n            }\r\n\r\n            @if (typeStandar() == 'number-integer') {\r\n            <input type=\"text\" class=\"form-control text-{{position()}}\" (blur)=\"callBlur()\" (input)=\"keyup()?.()\" (keyup.enter)=\"enter()?.()\"\r\n                [placeholder]=\"placeholder()\"\r\n                [attr.data-active-focus]=\"activeFocus() == false ? 'false' : ''\"\r\n                [style.--focus-border-color]=\"customBorderColor()\" [style.--focus-box-shadow]=\"customBoxShadow()\"\r\n                [style.--focus-transition]=\"customTransition()\" [style.max-width.px]=\"maxWidth()\"\r\n                [class.input-error]=\"hasError()\"\r\n                [disabled]=\"allDisabled() ? true : disabled()\"\r\n                [(ngModel)]=\"value\" [id]=\"inputId\" [name]=\"inputId\" onlyNumber\r\n                [attr.maxlength]=\"maxLength()\" (focus)=\"invalidInput.set(false)\">\r\n            }\r\n\r\n            @if (typeStandar() == 'day') {\r\n            <input type=\"text\" class=\"form-control text-{{position()}}\" (blur)=\"callBlur()\" (input)=\"keyup()?.()\" (keyup.enter)=\"enter()?.()\"\r\n                [placeholder]=\"placeholder()\"\r\n                [attr.data-active-focus]=\"activeFocus() == false ? 'false' : ''\"\r\n                [style.--focus-border-color]=\"customBorderColor()\" [style.--focus-box-shadow]=\"customBoxShadow()\"\r\n                [style.--focus-transition]=\"customTransition()\" [style.max-width.px]=\"maxWidth()\"\r\n                [class.input-error]=\"hasError()\"\r\n                [disabled]=\"allDisabled() ? true : disabled()\"\r\n                [(ngModel)]=\"value\" [id]=\"inputId\" [name]=\"inputId\" onlyDay\r\n                [attr.maxlength]=\"maxLength()\" (focus)=\"invalidInput.set(false)\">\r\n            }\r\n\r\n            @if (typeStandar() == 'date') {\r\n            <input type=\"date\" class=\"form-control text-{{position()}}\" (blur)=\"callBlur()\" (input)=\"keyup()?.()\"\r\n                [placeholder]=\"placeholder()\"\r\n                [attr.data-active-focus]=\"activeFocus() == false ? 'false' : ''\"\r\n                [style.--focus-border-color]=\"customBorderColor()\" [style.--focus-box-shadow]=\"customBoxShadow()\"\r\n                [style.--focus-transition]=\"customTransition()\" \r\n                [class.input-error]=\"hasError()\"\r\n                [disabled]=\"allDisabled() ? true : disabled()\" [(ngModel)]=\"value\" [id]=\"inputId\"\r\n                [name]=\"inputId\" (focus)=\"invalidInput.set(false)\">\r\n            }\r\n\r\n            @if (typeStandar() == 'time') {\r\n            <input type=\"time\" class=\"form-control text-{{position()}}\" (blur)=\"callBlur()\" (input)=\"keyup()?.()\"\r\n                [placeholder]=\"placeholder()\"\r\n                [attr.data-active-focus]=\"activeFocus() == false ? 'false' : ''\"\r\n                [style.--focus-border-color]=\"customBorderColor()\" [style.--focus-box-shadow]=\"customBoxShadow()\"\r\n                [style.--focus-transition]=\"customTransition()\" \r\n                [class.input-error]=\"hasError()\"\r\n                [disabled]=\"allDisabled() ? true : disabled()\" [(ngModel)]=\"value\" [id]=\"inputId\"\r\n                [name]=\"inputId\" (focus)=\"invalidInput.set(false)\">\r\n            }\r\n\r\n            @if (typeStandar() == 'text-area') {\r\n            <textarea class=\"{{'text-' + position()}} form-area\"\r\n                [placeholder]=\"placeholder()\"\r\n                [attr.data-active-focus]=\"activeFocus() == false ? 'false' : ''\"\r\n                [style.--focus-border-color]=\"customBorderColor()\" [style.--focus-box-shadow]=\"customBoxShadow()\"\r\n                [style.--focus-transition]=\"customTransition()\" \r\n                [class.input-error]=\"hasError()\"\r\n                [id]=\"inputId\" [name]=\"inputId\"\r\n                [disabled]=\"allDisabled() ? true : disabled()\" [(ngModel)]=\"value\" [rows]=\"alto()\"\r\n                [attr.maxlength]=\"maxLength()\" (focus)=\"invalidInput.set(false)\">\r\n\r\n                </textarea>\r\n            }\r\n\r\n            @if (typeStandar() == 'select') {\r\n            <select class=\"form-select {{'text-' + position()}}\" [attr.data-active-focus]=\"activeFocus() == false ? 'false' : ''\"\r\n                [class.text-error]=\"isImportant()\"\r\n                [style.--focus-border-color]=\"customBorderColor()\" [style.--focus-box-shadow]=\"customBoxShadow()\"\r\n                [style.--focus-transition]=\"customTransition()\" [style.max-width.px]=\"maxWidth()\" [style.min-width.px]=\"maxWidth()\" \r\n                [class.input-error]=\"hasError()\"\r\n                [(ngModel)]=\"value\"\r\n                [disabled]=\"allDisabled() ? true : disabled()\" [id]=\"inputId\"\r\n                [name]=\"inputId\" (change)=\"emitirChange()\" (focus)=\"focusInput()\">\r\n                @if (withTodos()) {\r\n                <option [value]=\"typeKey() == 'number' ? -1 : ''\">Todos</option>\r\n                }\r\n                @for (item of lista(); track $index) {\r\n                @if (!keyCodigo()) {\r\n                <option [value]=\"item\"> {{ item }}</option>\r\n                }\r\n                @if (keyCodigo()) {\r\n                <option [value]=\"item[keyCodigo()]\"> {{ joinInfo() ? item[keyCodigo()] + ' - ' + item[keyDescri()] :\r\n                    item[keyDescri()]}}</option>\r\n                }\r\n\r\n                }\r\n            </select>\r\n            }\r\n\r\n            @if (withBuscar()) {\r\n            <button class=\"btn btn-dark boton-buscar fs-7\" [ngClass]=\"classButton()\" [disabled]=\"allDisabled()\" (click)=\"ejecutarAccion()\">\r\n                <i [ngClass]=\"iconButton()\" ></i>\r\n            </button>\r\n            }\r\n            @if (withChangeInput()) {\r\n            <button class=\"btn btn-dark boton-buscar bg-search fs-7\" [disabled]=\"allDisabled()\" (click)=\"changeInputAction()\">\r\n                <i [ngClass]=\"typeStandar() == 'select' ? 'fas fa-times' : 'fa solid fa-pen'\"></i>\r\n            </button>\r\n            }\r\n            @if (invalidInput()) {\r\n            <div class=\"infoBox\" @fadeInOut><i class=\"fas fa-exclamation-triangle fs-9 text-danger\"></i> Ocurrió un\r\n                error: El campo es obligatorio, asegúrese de ingresar datos válidos.</div>\r\n            }\r\n\r\n        </div>\r\n    </div>\r\n</div>\r\n\r\n@if (textoAyuda() && typeStandar() == 'text-area') {\r\n<div class=\"d-flex flex-wrap justify-content-between align-items-center px-2\">\r\n    <span class=\"text-error fs-6\">{{textoAyuda()}}</span>\r\n    <span class=\"text-dark fs-6 fw-5\">{{ valueSize() }}/{{maxLength()}} caracteres</span>\r\n</div>\r\n}\r\n\r\n@if (sinAyuda() && typeStandar() == 'text-area') {\r\n<div class=\"d-flex flex-wrap justify-content-between align-items-center px-2\">\r\n    <span class=\"text-error fs-6\"></span>\r\n    <span class=\"text-dark fs-6 fw-5\">{{ valueSize() }}/{{maxLength()}} caracteres</span>\r\n</div>\r\n}","import { Component, computed, input, model, output } from '@angular/core';\r\nimport { InputComponent } from \"../input/input.component\";\r\nimport { DobleInputComponent } from \"../doble-input/doble-input.component\";\r\nimport { obtenerTipoClases } from 'shared-tsi';\r\n\r\n@Component({\r\n  selector: 'app-input-clase',\r\n  imports: [InputComponent, DobleInputComponent],\r\n  templateUrl: './input-clase.component.html',\r\n  styleUrl: './input-clase.component.scss'\r\n})\r\nexport class InputClaseComponent {\r\n\r\n  title = input<string>('')\r\n  item = input<any>(null)\r\n  required = input<boolean>(false)\r\n  onBlur = output<void>();\r\n  wlabel = input<number>(350)\r\n  tipoInput = computed(() => this.item() ? this.getClase(this.item()) : '');\r\n\r\n  value = model<string>('')\r\n\r\n  disabled = model<boolean>(false)\r\n\r\n\r\n  getClase(data: any): string {\r\n    return obtenerTipoClases(data);\r\n  }\r\n\r\n}\r\n","\r\n<div class=\"col-md-8 pt-1\">\r\n    @switch (tipoInput()) {\r\n        @case ('vchar') {\r\n            <app-input [label]=\"title()\" [isRequired]=\"required()\" [maxLength]=\"1\" (onBlur)=\"onBlur.emit()\" [wlabel]=\"wlabel()\" [(value)]=\"value\" [(disabled)]=\"disabled\" />\r\n        }\r\n        @case ('vstrg') {\r\n            <app-input [label]=\"title()\" [isRequired]=\"required()\" [maxLength]=\"80\" (onBlur)=\"onBlur.emit()\" [wlabel]=\"wlabel()\" [(value)]=\"value\" [(disabled)]=\"disabled\"/>\r\n        }\r\n        @case ('ventero') {\r\n            <app-input [label]=\"title()\" [isRequired]=\"required()\" position=\"end\" type=\"number-integer\" (onBlur)=\"onBlur.emit()\" [wlabel]=\"wlabel()\" [(value)]=\"value\" [(disabled)]=\"disabled\"/>\r\n        }\r\n        @case ('vreal') {\r\n            <app-input [label]=\"title()\" [isRequired]=\"required()\" position=\"end\" type=\"number-format-decimal\" (onBlur)=\"onBlur.emit()\" [wlabel]=\"wlabel()\" [(value)]=\"value\" [(disabled)]=\"disabled\"/>\r\n        }\r\n        @case ('vdate') {\r\n            <app-input [label]=\"title()\" [isRequired]=\"required()\" (onBlur)=\"onBlur.emit()\" type=\"date\" [wlabel]=\"wlabel()\" [(value)]=\"value\" [(disabled)]=\"disabled\"/>\r\n        }\r\n        @case ('vtime') {\r\n            <app-input [label]=\"title()\" [isRequired]=\"required()\" (onBlur)=\"onBlur.emit()\" type=\"date\" [wlabel]=\"wlabel()\" [(value)]=\"value\" [(disabled)]=\"disabled\"/>\r\n        }\r\n        @case ('vglosa') {\r\n            <app-input [label]=\"title()\" [isRequired]=\"required()\" (onBlur)=\"onBlur.emit()\" type=\"text-area\" [alto]=\"5\" [maxLength]=\"500\" [wlabel]=\"wlabel()\" [(value)]=\"value\" [(disabled)]=\"disabled\"/>\r\n        }\r\n        @case ('codigo') {\r\n            <app-doble-input [label]=\"title()\" [isRequired]=\"required()\" [tipoInput2]=\"2\" [withTodos]=\"false\" keyCodigo=\"codigo\" keyDescri=\"descri\" [lista]=\"item().codigos\" (onBlur)=\"onBlur.emit()\" [wlabel]=\"wlabel()\" [(value)]=\"value\" [(disabled1)]=\"disabled\" [(disabled2)]=\"disabled\" ></app-doble-input>\r\n        }\r\n    }\r\n    \r\n</div>\r\n","import { Component, input, model } from '@angular/core';\r\nimport { InputConfig } from '../../../../models/input-config';\r\nimport { InputComponent } from \"../input/input.component\";\r\n\r\n@Component({\r\n  selector: 'app-input-dinamico',\r\n  imports: [InputComponent],\r\n  templateUrl: './input-dinamico.component.html',\r\n  styleUrl: './input-dinamico.component.scss'\r\n})\r\nexport class InputDinamicoComponent {\r\n\r\n  inputs = input<InputConfig[]>([])\r\n  sender = model<any>()\r\n}\r\n\r\n\r\n","@for (input of inputs(); track $index) {\r\n<div class=\"{{ input.class }}\">\r\n  @switch (input.modelo) { \r\n    @case ('input-buscar') {\r\n  <!-- <app-doble-input-buscar\r\n    label=\"{{ input.label }}\"\r\n    [(disabled)]=\"input.disabled\"\r\n    [isRequired]=\"input.required\"\r\n    [wlabel]=\"input.wlabel\"\r\n    [maxLength]=\"input.maxlen\"\r\n    [(valuecod)]=\"sender()[input.fieldname]\"\r\n    [type]=\"input.buscar\"\r\n    [oneinput]=\"true\"\r\n    [withBuscar2]=\"true\"\r\n    [joinInfo]=\"input.joinInfo\"\r\n    [withBuscar]=\"true\"\r\n    [viewInput]=\"input.viewInput\"\r\n  /> -->\r\n  }\r\n  @default {\r\n    <app-input\r\n    label=\"{{ input.label }}\"\r\n    [(disabled)]=\"input.disabled\"\r\n    [isRequired]=\"input.required\"\r\n    [wlabel]=\"input.wlabel\"\r\n    [maxLength]=\"input.maxlen\"\r\n    [(value)]=\"sender()[input.fieldname]\"\r\n    [position]=\"input.position\"\r\n    [type]=\"input.type\"\r\n    [lista]=\"input.lista\"\r\n    [keyCodigo]=\"input.keyCodigo\"\r\n    [keyDescri]=\"input.keyDescri\"\r\n    [withTodos]=\"input.withTodos\"\r\n    [joinInfo]=\"input.joinInfo\"\r\n  />\r\n  } \r\n\r\n    }\r\n  \r\n</div>\r\n}\r\n","import { Component, input, model, output } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\n\r\n@Component({\r\n  selector: 'app-radio',\r\n  imports: [FormsModule],\r\n  templateUrl: './radio.component.html',\r\n  styleUrl: './radio.component.scss'\r\n})\r\nexport class RadioComponent {\r\n  name = input<string>()\r\n  id = input<string>()\r\n  label = input<string>()\r\n  value = input<any>()\r\n  binding = model<any>()\r\n  checked = input<boolean>(false)  \r\n  changed = output<any>()\r\n  disabled = input<boolean>(false)\r\n\r\n  handleChange() {\r\n    this.changed.emit(this.value())\r\n  }\r\n}\r\n","<div class=\"form-check me-2\">\r\n    <input class=\"form-check-input\" type=\"radio\" [name]=\"name()\" [id]=\"id()\" [value]=\"value()\" [disabled]=\"disabled()\"\r\n        (change)=\"handleChange()\" [(ngModel)]=\"binding\" >\r\n    <label class=\"form-check-label cursor-pointer\" [for]=\"id()\">\r\n        {{ label() }}\r\n    </label>\r\n</div>","import { CommonModule } from '@angular/common';\r\nimport { Component,input, model } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { RadioComponent } from \"../radio/radio.component\";\r\nimport { fadeInOut } from '../../../../directivas/animaciones/fade-animation';\r\n@Component({\r\n  selector: 'app-input-radio',\r\n  imports: [FormsModule, CommonModule, RadioComponent],\r\n  templateUrl: './input-radio.component.html',\r\n  styleUrl: './input-radio.component.scss',\r\n  animations: [fadeInOut]\r\n})\r\nexport class InputRadioComponent {\r\n\r\n  wlabel = input<number>(0)\r\n  label = input<string>('')\r\n  isRequired = input<boolean>(false)\r\n  type = input<'check' | 'radio'>('check')\r\n  name = input<string>('')\r\n  position = input<'row' | 'column'>('row')\r\n  onlyRow = input<boolean>(false)\r\n  value = model<any>()\r\n  position_row = input<'center' | 'start' | 'end'>('center')\r\n  disabled = model<boolean>(false)\r\n\r\n  lista = input<any[]>([])\r\n  keyCodigo = input<string>('')\r\n  keyDescri = input<string>('')\r\n  allDisabled = model<boolean>(false)\r\n  isVertical = input<boolean>(false)\r\n  activeFocus = input<boolean>(true)\r\n  customBorderColor = input<string>('')\r\n  customBoxShadow = input<string>('')\r\n  customTransition = input<string>('')\r\n\r\n}\r\n","<div class=\"d-flex\" [attr.data-force]=\"onlyRow() ? 'true' : 'false'\">\r\n    @if (isVertical()) {\r\n    <label for=\"{{'id_' + label()}}\" [style.min-width]=\"wlabel() + 'px'\"> {{label()}} @if (isRequired()) {<span\r\n            class=\"fw-bold text-danger\">(*)</span>}</label>\r\n    }\r\n    <div class=\"d-flex align-items-{{position_row()}}\">\r\n        @if (!isVertical()) {\r\n        <label for=\"{{'id_' + label()}}\" [style.min-width]=\"wlabel() + 'px'\"> {{label()}} @if (isRequired()) {<span\r\n                class=\"fw-bold text-danger\">(*)</span>}</label>\r\n        }\r\n        <div class=\"flex-grow-1 me-2\">\r\n            <div class=\"d-flex\" [attr.data-force]=\"onlyRow() ? 'true' : 'false'\"\r\n                [ngClass]=\"onlyRow() ? 'flex-row-force' : 'flex-' + position()\">\r\n                @for (item of lista(); track $index) {\r\n                @switch (type()) {\r\n                @case ('radio') {\r\n                <app-radio [name]=\"name()\" [label]=\"item[keyDescri()]\" [disabled]=\"allDisabled()\"\r\n                    [value]=\"item[keyCodigo()]\" [id]=\"`radio_${item[keyCodigo()]}_${item[keyDescri()]}`\"\r\n                    [(binding)]=\"value\" />\r\n                }\r\n                }\r\n                }\r\n            </div>\r\n        </div>\r\n    </div>\r\n</div>","import { SelectionModel } from '@angular/cdk/collections';\r\nimport { OverlayModule } from '@angular/cdk/overlay';\r\nimport { Component, computed, effect, ElementRef, input, model, signal, viewChild } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { fadeInOut } from '../../../../directivas/animaciones/fade-animation';\r\n\r\n@Component({\r\n  selector: 'app-multiselected',\r\n  imports: [OverlayModule,FormsModule],\r\n  templateUrl: './multiselected.component.html',\r\n  styleUrl: './multiselected.component.scss',\r\n  animations:[fadeInOut]\r\n})\r\nexport class MultiselectedComponent {\r\n\r\n  selection = new SelectionModel<any>(true, [])\r\n  \r\n  inputRef = viewChild<ElementRef>('inputRef')\r\n  withInput = signal<number>(null)\r\n\r\n  lista = input<any[]>([])\r\n  type = input<'simple'| 'doble'>('simple')\r\n  viewInput = input<'cod' | 'descri'>('descri')\r\n  computedKey = computed(() => this.viewInput() == 'cod' ? this.keyCodigo() : this.keyDescri())\r\n  computedType = computed(() => this.type() == 'doble')\r\n  withTodos = input<boolean>(true)\r\n  value = model<any>()\r\n\r\n  showDropdown = signal<boolean>(false)\r\n\r\n  keyCodigo = input<string>('')\r\n  keyDescri = input<string>('')\r\n  joinInfo = input<boolean>(false)\r\n  wlabel = input<number>(0)\r\n  label = input<string>('')\r\n  isRequired = input<boolean>(false)\r\n  isVertical = input<boolean>(false)\r\n  allDisabled = input<boolean>(false)\r\n  activeFocus = input<boolean>(true)\r\n  customBorderColor = input<string>('')\r\n  customBoxShadow = input<string>('')\r\n  customTransition = input<string>('')\r\n\r\n  selectionChanged = signal(0);\r\n\r\n  altoContainer = input<number>(200)\r\n  private resizeObserver?: ResizeObserver;\r\n\r\n  constructor(){\r\n    this.selection.changed.subscribe(() => {\r\n      this.selectionChanged.update(n => n + 1);\r\n    });\r\n\r\n    effect(() => {\r\n    this.selectionChanged();\r\n    const result = this.selection.selected\r\n      .sort((a, b) => a[this.keyCodigo()] - b[this.keyCodigo()])\r\n      .map(item => item[this.computedKey()]);\r\n      \r\n    const format = result.join(',');\r\n    this.value.set(format);\r\n  });\r\n\r\n    effect(() => {\r\n      if(!this.value()){\r\n        this.selection.clear()\r\n      }\r\n    })\r\n\r\n\r\n    effect(() => {\r\n      const el = this.inputRef()?.nativeElement;\r\n      if (!el) return;\r\n      this.resizeObserver?.disconnect();\r\n      this.resizeObserver = new ResizeObserver(() => {\r\n        this.withInput.set(el.offsetWidth);\r\n      });\r\n      this.resizeObserver.observe(el);\r\n      this.withInput.set(el.offsetWidth);\r\n    })\r\n\r\n  }\r\n\r\n  get allSelected():boolean {\r\n    return (!!this.lista().length && this.selection.selected.length === this.lista().length)\r\n  }\r\n\r\n  toogleAllSelection() {\r\n    if(this.allSelected){\r\n      this.selection.clear()\r\n      return\r\n    }\r\n    this.selection.select(...this.lista())\r\n  }\r\n\r\n  get selectedItems () {\r\n    return this.value() ?? ''\r\n  }\r\n\r\n  filterList (text: string) {\r\n    const searchTerm = text.trim().toLowerCase()\r\n    return this.lista().filter(item => item[this.keyDescri()].toLowerCase().includes(searchTerm))\r\n  }\r\n  clear() {\r\n    this.selection.clear()\r\n  }\r\n\r\n\r\n}\r\n","@if (isVertical()) {\r\n<label for=\"{{'id_' + label()}}\" [style.min-width]=\"wlabel() + 'px'\"> {{label()}} @if (isRequired()) {<span\r\n    class=\"fw-bold text-danger\">(*)</span>}</label>\r\n}\r\n<div class=\"d-flex align-items-center\">\r\n  @if (!isVertical()) {\r\n  <label for=\"{{'id_' + label()}}\" [style.min-width]=\"wlabel() + 'px'\">{{label()}} @if (isRequired()) { <span\r\n      class=\"fw-bold text-danger\">(*)</span>}</label>\r\n  }\r\n  <div class=\"multiselect d-flex \">\r\n    @if(computedType()){\r\n    <div class=\"content-1 me-1\">\r\n      <input type=\"text\" class=\"form-control show-input\"\r\n        [attr.data-active-focus]=\"activeFocus() == false ? 'false' : ''\"\r\n        [style.--focus-border-color]=\"customBorderColor()\" [style.--focus-box-shadow]=\"customBoxShadow()\"\r\n        [style.--focus-transition]=\"customTransition()\" [(ngModel)]=\"value\" [disabled]=\"allDisabled()\"\r\n        id=\"{{'id_' + label()}}\" name=\"{{'id_' + label()}}\" />\r\n    </div>\r\n    }\r\n\r\n    <div class=\"input-container content-2 me-2\">\r\n      <input type=\"text\" [value]=\"selectedItems\"  class=\"form-control pe-4\" cdkOverlayOrigin readonly\r\n        #autocomplete=\"cdkOverlayOrigin\" #inputRef [attr.data-active-focus]=\"activeFocus() == false ? 'false' : ''\"\r\n        [style.--focus-border-color]=\"customBorderColor()\" [style.--focus-box-shadow]=\"customBoxShadow()\"\r\n        [style.--focus-transition]=\"customTransition()\" (input)=\"null\"\r\n        (focus)=\"showDropdown.set(true);\" [disabled]=\"allDisabled()\" />\r\n      @if (selectedItems.length > 0) {\r\n      <button @fadeInOut type=\"button\" class=\"btn-clear text-dark\" (click)=\"clear(); inputRef.focus()\">\r\n        &times;\r\n      </button>\r\n      }\r\n      <ng-template cdkConnectedOverlay [cdkConnectedOverlayOrigin]=\"autocomplete\"\r\n        [cdkConnectedOverlayOpen]=\"showDropdown()\" [cdkConnectedOverlayHasBackdrop]=\"true\"\r\n        [cdkConnectedOverlayWidth]=\"withInput()\" (backdropClick)=\"showDropdown.set(false)\"\r\n        cdkConnectedOverlayPanelClass=\"autocomplete-overlay\" cdkConnectedOverlayBackdropClass=\"transparent-backdrop\">\r\n\r\n        <ul [style.maxHeight.px]=\"altoContainer()\">\r\n          @for (item of lista(); track $index) {\r\n          <li>\r\n            <label class=\"checkbox-animated\">\r\n              <input type=\"checkbox\" [id]=\"item[keyCodigo()]\" [checked]=\"selection.isSelected(item)\" (change)=\"selection.toggle(item)\">\r\n              <span class=\"text-dark\">{{item[keyDescri()]}}</span>\r\n            </label>\r\n          </li>\r\n          }\r\n          <li>\r\n            <label class=\"checkbox-animated\">\r\n              <input type=\"checkbox\" [id]=\"-1\" [checked]=\"allSelected\" (change)=\"toogleAllSelection()\">\r\n              <span class=\"text-dark\">Todos</span>\r\n            </label>\r\n          </li>\r\n        </ul>\r\n      </ng-template>\r\n    </div>\r\n  </div>\r\n</div>","import { CommonModule } from '@angular/common';\r\nimport { Component, effect, input, model } from '@angular/core';\r\n\r\n@Component({\r\n  selector: 'app-switch',\r\n  imports: [CommonModule],\r\n  templateUrl: './switch.component.html',\r\n  styleUrl: './switch.component.scss'\r\n})\r\nexport class SwitchComponent {\r\n\r\n  valueOn = input.required<any>()\r\n  valueOff = input.required<any>()\r\n\r\n  labelOn = input<string>('Activo')\r\n  labelOff = input<string>('Inactivo')\r\n\r\n  iconOn = input<string>('fas fa-check')\r\n  iconOff = input<string>('fas fa-times')\r\n\r\n  colorOn = input<string>('bg-success')\r\n  colorOff = input<string>('bg-danger')\r\n\r\n  model = model<any>()\r\n\r\n  _checked = false\r\n\r\n  constructor() {\r\n    effect(() => {\r\n      this._checked = this.model() === this.valueOn()\r\n    });\r\n  }\r\n\r\n  toggle(event: Event) {\r\n    const checkbox = event.target as HTMLInputElement\r\n    this.model.set(checkbox.checked ? this.valueOn() : this.valueOff())\r\n  }\r\n\r\n  currentLabel() {\r\n    return this._checked ? this.labelOn() : this.labelOff()\r\n  }\r\n\r\n  currentColor() {\r\n    return this._checked ? this.colorOn() : this.colorOff()\r\n  }\r\n\r\n  currentIcon() {\r\n    return this._checked ? this.iconOn() : this.iconOff()\r\n  }\r\n}","<div class=\"form-check form-switch d-flex align-items-center\">\r\n    <input class=\"form-check-input\" type=\"checkbox\" role=\"switch\" [checked]=\"_checked\" [ngClass]=\"currentColor()\"\r\n        (change)=\"toggle($event)\" id=\"switchControl\">\r\n\r\n    <span class=\"switch-circle\">\r\n        <i [class]=\"currentIcon()\"></i>\r\n    </span>\r\n\r\n    <label class=\"label-toggle ms-2\" for=\"switchControl\">\r\n        {{ currentLabel() }}\r\n    </label>\r\n</div>","import { CommonModule } from '@angular/common';\r\nimport { Component, input, model } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { CheckBoxComponent } from '../../inputs/check-box/check-box.component';\r\nimport { RadioComponent } from '../../inputs/radio/radio.component';\r\nimport { fadeInOut } from '../../../../directivas/animaciones/fade-animation';\r\n@Component({\r\n  selector: 'app-list-option',\r\n  imports: [FormsModule, CommonModule, CheckBoxComponent, RadioComponent],\r\n  templateUrl: './list-option.component.html',\r\n  styleUrl: './list-option.component.scss',\r\n  animations: [fadeInOut]\r\n})\r\n\r\nexport class ListOptionComponent {\r\n  wlabel = input<number>(0)\r\n  label = input<string>('')\r\n  isRequired = input<boolean>(false)\r\n  type = input<'check' | 'radio'>('check')\r\n  name = input<string>('')\r\n  position = input<'row' | 'column'>('row')\r\n  value = model<any>()\r\n  position_row = input<'center' | 'start' | 'end'>('center')\r\n  disabled = model<boolean>(false)\r\n\r\n  lista = input<any[]>([])\r\n  keyCodigo = input<string>('')\r\n  keyDescri = input<string>('')\r\n  allDisabled = model<boolean>(false)\r\n  isVertical = input<boolean>(false)\r\n  activeFocus = input<boolean>(true)\r\n  customBorderColor = input<string>('')\r\n  customBoxShadow = input<string>('')\r\n  customTransition = input<string>('')\r\n}","\r\n@if (isVertical()) {\r\n<label for=\"{{'id_' + label()}}\" [style.min-width]=\"wlabel() + 'px'\"> {{label()}} @if (isRequired()) {<span\r\n        class=\"fw-bold text-danger\">(*)</span>}</label>\r\n}\r\n<div class=\"d-flex align-items-{{position_row()}}\">\r\n    @if (!isVertical()) {\r\n    <label for=\"{{'id_' + label()}}\" [style.min-width]=\"wlabel() + 'px'\"> {{label()}} @if (isRequired()) {<span\r\n            class=\"fw-bold text-danger\">(*)</span>}</label>\r\n    }\r\n    <div class=\"flex-grow-1 me-2\">\r\n        <div class=\"d-flex flex-{{position()}}\">\r\n            @for (item of lista(); track $index) {\r\n                @switch (type()) {\r\n                    @case ('check') {\r\n                        <app-check-box [name]=\"name()\" [label]=\"item[keyDescri()]\" [value]=\"item[keyCodigo()]\" [id]=\"`check_box_${item[keyCodigo()]}_${item[keyDescri()]}`\" [(binding)]=\"value\" />\r\n                    }@case ('radio') {\r\n                        <app-radio [name]=\"name()\" [label]=\"item[keyDescri()]\" [disabled]=\"allDisabled()\" [value]=\"item[keyCodigo()]\" [id]=\"`radio_${item[keyCodigo()]}_${item[keyDescri()]}`\" [(binding)]=\"value\" />\r\n                    }\r\n                }\r\n            }\r\n        </div>\r\n    </div>\r\n</div>\r\n","import { Component, effect, inject, input, model, signal, untracked } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { CheckBoxComponent } from '../../inputs/check-box/check-box.component';\r\nimport { NgClass } from '@angular/common';\r\nimport { ToastService } from '../../../../service/toast.service';\r\n\r\ninterface AllSituaciones {\r\n  id?: number | string,\r\n  nombre?: string,\r\n  selected?: boolean\r\n}\r\n\r\n@Component({\r\n  selector: 'app-list-situaciones',\r\n  imports: [FormsModule, CheckBoxComponent, NgClass],\r\n  templateUrl: './list-situaciones.component.html',\r\n  styleUrl: './list-situaciones.component.scss'\r\n})\r\n\r\nexport class ListSituacionesComponent {\r\n\r\n  private toast = inject(ToastService)\r\n  // private estadoInputsService = inject(EstadoInputsService)\r\n\r\n  data = input<any[]>()\r\n  label = input<string>('Filtrar por situación')\r\n  alert = input<string>('situaciones')\r\n\r\n  keyid = input<string>('situac')\r\n  keydesc = input<string>('situacDesc')\r\n  indexSelected = input<number[]>([])\r\n\r\n  allData = signal<AllSituaciones[]>([])\r\n  dataselected = model<string>('')\r\n\r\n  isVertical = input<boolean>(true)\r\n  positionRow = input<'row' | 'column'>('column')\r\n  wlabel = input<number>(0)\r\n  classRow = input<string>('col-auto')\r\n\r\n  isModal = input<boolean>(false)\r\n\r\n  constructor() {\r\n    let hasRun = false\r\n    effect(() => {\r\n      if (hasRun) return\r\n\r\n      const keyid = untracked(() => this.keyid())\r\n      const keydesc = untracked(() => this.keydesc())\r\n      const indexSelect = untracked(() => this.indexSelected())\r\n\r\n      if ((this.data() ?? []).length > 0 && !hasRun) {\r\n        let dataReturn = (this.data() ?? []).map((element, index) => {\r\n          const newReg: AllSituaciones = {\r\n            id: element[keyid] ?? '',\r\n            nombre: element[keydesc] ?? '',\r\n            selected: indexSelect.length == 0 ? true : indexSelect.includes(index)\r\n          }\r\n          return newReg\r\n        })\r\n        const verificar = dataReturn.every(item => item.selected)\r\n        dataReturn = [...dataReturn, { id: 'todos', nombre: 'Todos', selected: verificar }]\r\n        this.allData.set(dataReturn)\r\n        this.concatenar()\r\n        hasRun = true\r\n      }\r\n    })\r\n  }\r\n\r\n  onCheckboxChange(checked: boolean, index: number) {\r\n    if (this.allData()[index].id == 'todos') {\r\n      this.allData.update(data => data.map(item => ({ ...item, selected: checked })))\r\n    } else {\r\n      this.allData.update(data => {\r\n        const newData = [...data]\r\n        newData[index].selected = checked\r\n        return newData\r\n      })\r\n      const allSelected = this.allData()\r\n        .filter(item => item.id != 'todos')\r\n        .every(item => item.selected)\r\n\r\n      this.allData.update(data => {\r\n        const newData = [...data]\r\n        const todosIndex = newData.findIndex(item => item.id == 'todos')\r\n        if (todosIndex != -1) {\r\n          newData[todosIndex].selected = allSelected\r\n        }\r\n        return newData\r\n      })\r\n    }\r\n    this.concatenar()\r\n  }\r\n\r\n  concatenar() {\r\n    const extraer = this.allData().filter(da => da.selected && da.id != 'todos').map(data => data.id)\r\n    this.dataselected.set(extraer ? extraer.join(',') : '')\r\n  }\r\n}","<div class=\"row mt-2\">\r\n    @if (isVertical()) {\r\n        <label class=\"d-block mb-1\" [style.min-width]=\"wlabel() + 'px'\">{{label()}}</label>\r\n    }\r\n    <div class=\"col-12\">\r\n        <div [ngClass]=\"!isVertical() ? 'd-flex flex-{{positionRow()}}' : 'd-flex'\">\r\n            @if (!isVertical()) {\r\n                <label class=\"d-block mb-1\" [style.min-width]=\"wlabel() + 'px'\">{{label()}}</label>\r\n            }\r\n            <div class=\"row\">\r\n                @if (positionRow() == 'row') {\r\n                    @for (si of allData(); track $index) {\r\n                    <div class=\"{{classRow()}}\">\r\n                        <app-check-box [name]=\"'situacion-' + $index\" [id]=\"'situacion-' + $index\" [label]=\"si.nombre\" [value]=\"si.id\"\r\n                            [(binding)]=\"si.selected\" (bindingChange)=\"onCheckboxChange($event, $index)\" />\r\n                            </div>\r\n                    }\r\n                }@else {\r\n                    @for (si of allData(); track $index) {\r\n                        <app-check-box [name]=\"'situacion-' + $index\" [id]=\"'situacion-' + $index\" [label]=\"si.nombre\" [value]=\"si.id\"\r\n                            [(binding)]=\"si.selected\" (bindingChange)=\"onCheckboxChange($event, $index)\" />\r\n                    }\r\n                }\r\n                \r\n            </div>\r\n                \r\n        </div> \r\n    </div>\r\n</div>","import { Component, input, model, computed } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { CommonModule } from '@angular/common';\r\nimport { NgbDropdownModule } from '@ng-bootstrap/ng-bootstrap';\r\n\r\n@Component({\r\n  selector: 'app-multi-select-dropdown',\r\n  imports: [CommonModule, FormsModule, NgbDropdownModule],\r\n  templateUrl: './multi-select-dropdown.component.html',\r\n  styleUrl: './multi-select-dropdown.component.scss'\r\n})\r\nexport class MultiSelectDropdownComponent {\r\n\r\n  label = input<string>('')\r\n  wlabel = input<number>(120)\r\n  isRequired = input<boolean>(false)\r\n  isVertical = input<boolean>(false)\r\n\r\n  opciones = input<any[]>([]);\r\n  placeholder = input<string>('Seleccionar opciones')\r\n  key = input<string>()\r\n  descri = input<string>()\r\n\r\n  seleccion = model<string>('')\r\n\r\n  viewInput = input<'cod' | 'descri'>('descri')\r\n\r\n  selecciones = computed(() => {\r\n    const val = this.seleccion() || null\r\n    return val ? val.split(',') : []\r\n  })\r\n\r\n  ngAfterViewInit() {\r\n    if (!this.selecciones().length) {\r\n      queueMicrotask(() => {\r\n        const todosLosIds = (this.opciones() || []).map(op => this.obtenerValorKey(op))\r\n        this.seleccion.set(todosLosIds.join(','))\r\n      })\r\n    }\r\n  }\r\n\r\n  textoBoton = computed(() => {\r\n    const seleccionesOrd = this.seleccionesOrdenadas()\r\n    if (!seleccionesOrd.length) return this.placeholder()\r\n    return (this.opciones() || [])\r\n      .filter(op => seleccionesOrd.includes(this.obtenerValorKey(op)))\r\n      .map(op => this.obtenerValorDescriMostrar(op))\r\n      .join(', ')\r\n  })\r\n\r\n  seleccionesOrdenadas = computed(() => {\r\n    const seleccionActual = this.selecciones()\r\n    const opcionesLista = this.opciones() || []\r\n    return opcionesLista\r\n      .map(op => this.obtenerValorKey(op))\r\n      .filter(id => seleccionActual.includes(id))\r\n  })\r\n\r\n  obtenerValorKey(opcion: any): any {\r\n    return opcion[this.key()]\r\n  }\r\n\r\n  obtenerValorDescriMostrar(opcion: any): string {\r\n    const mostrar = this.viewInput() == 'descri' ? this.descri() : this.key()\r\n    return opcion[mostrar]\r\n  }\r\n\r\n  obtenerValorDescri(opcion: any): string {\r\n    return opcion[this.descri()]\r\n  }\r\n\r\n  estaSeleccionado(opcion: any): boolean {\r\n    const id = this.obtenerValorKey(opcion)\r\n    return this.selecciones().includes(id)\r\n  }\r\n\r\n  toggleSeleccion(opcion: any) {\r\n    const id = this.obtenerValorKey(opcion)\r\n    let seleccionActual = this.selecciones()\r\n    seleccionActual = seleccionActual.includes(id)\r\n      ? seleccionActual.filter(item => item != id)\r\n      : [...seleccionActual, id]\r\n    this.seleccion.set(seleccionActual.join(','))\r\n  }\r\n\r\n  toggleTodos() {\r\n    const todasLasIds = this.opciones().map(op => this.obtenerValorKey(op))\r\n    const nuevasSelecciones = this.estaSeleccionadoTodos() ? [] : todasLasIds\r\n    this.seleccion.set(nuevasSelecciones.join(','))\r\n  }\r\n\r\n  estaSeleccionadoTodos(): boolean {\r\n    const todasLasIds = this.opciones().map(op => this.obtenerValorKey(op))\r\n    return todasLasIds.every(id => this.selecciones().includes(id))\r\n  }\r\n}\r\n","<div class=\"multi-select-wrapper d-flex\">\r\n    @if (!isVertical()) {\r\n    <label [style.min-width]=\"wlabel() + 'px'\" class=\"form-label mb-0\">\r\n        {{ label() }}\r\n        @if (isRequired()) {\r\n        <span class=\"fw-bold text-danger\">(*)</span>\r\n        }\r\n    </label>\r\n    }\r\n\r\n    <div class=\"w-100 me-2\">\r\n        <div class=\"dropdown w-100\" ngbDropdown [autoClose]=\"'outside'\">\r\n            <button class=\"dropdown-toggle form-static w-100 text-start text-limit\" type=\"button\" ngbDropdownToggle>\r\n                {{ textoBoton() }}\r\n            </button>\r\n\r\n            <div class=\"dropdown-menu b-0 p-0 dropdown-height w-100\" ngbDropdownMenu>\r\n                @for (opcion of opciones(); track $index) {\r\n                <div class=\"dropdown-item p-0 border-top-radius border-bottom-radius\">\r\n                    <label class=\"d-block m-0 px-2 pt-1\" [for]=\"'opcion-' + obtenerValorKey(opcion)\">\r\n                        <div class=\"form-check\">\r\n                            <input class=\"form-check-input\" type=\"checkbox\" [id]=\"'opcion-' + obtenerValorKey(opcion)\"\r\n                                [checked]=\"estaSeleccionado(opcion)\" (change)=\"toggleSeleccion(opcion)\">\r\n                            <span class=\"form-check-label\">\r\n                                {{ obtenerValorDescri(opcion) }}\r\n                            </span>\r\n                        </div>\r\n                    </label>\r\n                </div>\r\n                }\r\n\r\n                <div class=\"dropdown-item p-0 border-top-radius border-bottom-radius\">\r\n                    <label class=\"d-block m-0 px-2 pt-1\">\r\n                        <div class=\"form-check\">\r\n                            <input class=\"form-check-input\" type=\"checkbox\" id=\"opcion-todos\"\r\n                                [checked]=\"estaSeleccionadoTodos()\" (change)=\"toggleTodos()\">\r\n                            <span class=\"form-check-label\">\r\n                                Todos\r\n                            </span>\r\n                        </div>\r\n                    </label>\r\n                </div>\r\n            </div>\r\n        </div>\r\n    </div>\r\n</div>","import { Component, inject, input, signal } from '@angular/core';\r\nimport { ActivatedRoute, NavigationEnd, Router, RouterLink, RouterLinkActive, RouterOutlet } from '@angular/router';\r\nimport { filter, fromEvent, map, startWith, throttleTime } from 'rxjs';\r\nimport { toSignal } from '@angular/core/rxjs-interop';\r\nimport { NgClass } from '@angular/common';\r\nimport { BadgeComponent } from '../../alerts/badge/badge.component';\r\n\r\n@Component({\r\n  selector: 'app-sidebar',\r\n  imports: [NgClass, RouterLink, RouterOutlet, RouterLinkActive, BadgeComponent],\r\n  templateUrl: './sidebar.component.html',\r\n  styleUrl: './sidebar.component.scss'\r\n})\r\nexport class SidebarComponent {\r\n\r\n  private route = inject(ActivatedRoute)\r\n  private router = inject(Router)\r\n\r\n  showMenu = signal<boolean>(true)\r\n  lista = input<any[]>([])\r\n  titleMenu = input<string>('')\r\n  expandedWidth = input<string>('320px')\r\n\r\n  title = toSignal(\r\n    this.router.events.pipe(\r\n      filter((e): e is NavigationEnd => e instanceof NavigationEnd),\r\n      startWith(null),\r\n      map(() => {\r\n        let route = this.route\r\n        while (route.firstChild) route = route.firstChild\r\n        return route.snapshot?.data?.['title'] || ''\r\n      })\r\n    ),\r\n    { initialValue: '' }\r\n  )\r\n\r\n  constructor() {\r\n    if (typeof window != 'undefined') {\r\n      fromEvent(window, 'resize')\r\n        .pipe(throttleTime(200))\r\n        .subscribe(() => this.showMenu.set(window.innerWidth > 1400))\r\n\r\n      this.showMenu.set(window.innerWidth > 1400)\r\n    }\r\n  }\r\n\r\n  toggleMenu() {\r\n    this.showMenu.set(!this.showMenu())\r\n  }\r\n\r\n  onMiddleClick(event: MouseEvent, ruta: string) {\r\n    if (event.button == 1 && ruta) {\r\n      event.preventDefault()\r\n      window.open(ruta, '_blank')\r\n    }\r\n  }\r\n\r\n  onRightClick(event: MouseEvent, ruta: string) {\r\n    if (ruta) {\r\n      event.preventDefault()\r\n      window.open(ruta, '_blank')\r\n    }\r\n  }\r\n}\r\n","<div class=\"sidebar-wrapper mtp-12\">\r\n    <div class=\"sidebar-panel\" [ngClass]=\"{'sidebar-expanded': showMenu(), 'sidebar-collapsed': !showMenu()}\"\r\n        [style.--expanded-width]=\"expandedWidth()\">\r\n        <div class=\"sidebar-header\" [style.justifyContent]=\"showMenu() ? 'flex-start' : 'center'\"\r\n            [style.padding]=\"showMenu() ? '12px' : '10px 0'\" (click)=\"toggleMenu()\">\r\n            <div class=\"sidebar-toggle-btn\">\r\n                <i class=\"fa-solid fa-table-columns\" [class.flipped]=\"!showMenu()\"></i>\r\n                <i class=\"fa-solid fa-chevron-left toggle-arrow\" [class.flipped]=\"!showMenu()\"></i>\r\n            </div>\r\n            @if (showMenu()) {\r\n            <span class=\"sidebar-title\">{{ titleMenu() }}</span>\r\n            }\r\n        </div>\r\n\r\n        <div class=\"sidebar-divider\"></div>\r\n\r\n        <ul class=\"sidebar-nav\">\r\n            @for (item of lista(); track $index) {\r\n            <li class=\"sidebar-item\" [routerLink]=\"item.ruta\" [routerLinkActive]=\"'sidebar-item-active'\"\r\n                (mousedown)=\"onMiddleClick($event, item.ruta)\" (contextmenu)=\"onRightClick($event, item.ruta)\">\r\n                <span class=\"sidebar-item-icon\">\r\n                    <i class=\"fas fa-folder fs-8\"></i>\r\n                </span>\r\n                <span class=\"sidebar-item-label\">{{ item.nombre }}</span>\r\n                @if (item.badge) {\r\n                    <div class=\"sidebar-item-badge\">\r\n                        <app-badge [label]=\"item.labelBadge\" [color]=\"item.bgBadge\" />\r\n                    </div>\r\n                }\r\n            </li>\r\n            }\r\n        </ul>\r\n    </div>\r\n\r\n    <div class=\"sidebar-content\">\r\n        <div class=\"content-card\">\r\n            <p class=\"content-title fs-7 fw-bold\">{{ title() }}</p>\r\n            <router-outlet></router-outlet>\r\n        </div>\r\n    </div>\r\n</div>","import { Component, input, output } from '@angular/core';\r\nimport { DecimalPipe, NgClass } from '@angular/common';\r\nimport { DetalleCredito } from '../../../models/comercial/documentos-cab-auxiliares.model';\r\n\r\n@Component({\r\n  selector: 'app-detalle-credito',\r\n  imports: [NgClass,DecimalPipe],\r\n  templateUrl: './detalle-credito.component.html',\r\n  styleUrl: './detalle-credito.component.scss'\r\n})\r\nexport class DetalleCreditoComponent {\r\n  data = input<DetalleCredito>({})\r\n  utilizado = output<void>()\r\n}\r\n","@let simbolo = data().simbolo || 'S/.';\r\n\r\n<div class=\"d-flex item-credito mt-2\">\r\n  <div class=\"title-credito text-dark\">Crédito:</div>\r\n  <div class=\"subtitle fw-bold\" [ngClass]=\"data().credito ? 'text-success' : 'text-danger'\">{{data().credito ? 'Abierto' : 'Cerrado'}}</div>\r\n</div>\r\n<div class=\"d-flex item-credito\">\r\n  <div class=\"title-credito\">Línea:</div>\r\n  <div class=\"subtitle\">{{simbolo}} {{data().limitecredito ?? 0 | number:'1.2-2'}}</div>\r\n</div>\r\n\r\n<div class=\"d-flex item-credito\">\r\n  <div class=\"title-credito\">Utilizado:</div>\r\n  <div class=\"subtitle\" (click)=\"data().saldo ? utilizado.emit() : null\" [ngClass]=\"data().saldo ? 'cursor-pointer underline' : ''\">{{simbolo}} {{ data().saldo ?? 0 | number:'1.2-2' }}</div>\r\n</div>\r\n\r\n<div class=\"d-flex item-credito\">\r\n  <div class=\"title-credito\">Por vencer:</div>\r\n  <div class=\"subtitle\">{{simbolo}} {{ data().pendiente ?? 0 | number:'1.2-2' }}</div>\r\n</div>\r\n\r\n<div class=\"d-flex item-credito\">\r\n  <div class=\"title-credito\">Vencido:</div>\r\n  <div class=\"subtitle\">{{simbolo}} {{ data().vencido ?? 0 | number:'1.2-2' }}</div>\r\n</div>\r\n\r\n<div class=\"d-flex item-credito\">\r\n  <div class=\"title-credito\">Disponible:</div>\r\n  <div class=\"subtitle\">{{simbolo}} {{ data().disponible ?? 0 | number:'1.2-2' }}</div>\r\n</div>\r\n\r\n<div class=\"d-flex item-credito\">\r\n  <div class=\"title-credito\">Puntos:</div>\r\n  <div class=\"subtitle\">{{ data().puntaje ?? 0 }}</div>\r\n</div>\r\n","import { Component, input, model } from '@angular/core';\r\nimport { DecimalPipe } from '@angular/common';\r\nimport { CalcularTotales } from '../../../models/comercial/documentos-cab-auxiliares.model';\r\nimport { cleanNumber } from 'shared-tsi';\r\n\r\n@Component({\r\n  selector: 'app-montos-calcular',\r\n  imports: [DecimalPipe],\r\n  templateUrl: './montos-calcular.component.html',\r\n  styleUrl: './montos-calcular.component.scss'\r\n})\r\nexport class MontosCalcularComponent {\r\n\r\n  data = input<CalcularTotales[]>([])\r\n  sizeFont = input<number>()\r\n  simbolo = model<string>('S/.')\r\n  cleanNumber = cleanNumber\r\n  withSimbolo = input<boolean>(true)\r\n}\r\n","<div class=\"container mt-2\">\r\n    <div class=\"table-responsive-custom\">\r\n        <table class=\"table total-table bg-dark\">\r\n            <tbody>\r\n                @for (item of data(); track $index) {\r\n                <tr [style.font-size.px]=\"sizeFont() ?? null\">\r\n                    <td>{{item.title}}</td>\r\n                    @if (withSimbolo()) {\r\n                        <td>{{item.simbolo ?? simbolo()}}</td>\r\n                    }\r\n                    <td>{{cleanNumber(item.value) | number:'1.2-2'}}</td>\r\n                </tr>\r\n                }\r\n            </tbody>\r\n        </table>\r\n    </div>\r\n</div>","import { Component } from '@angular/core';\r\n\r\n@Component({\r\n  selector: 'app-spinner',\r\n  imports: [],\r\n  templateUrl: './spinner.component.html',\r\n  styleUrl: './spinner.component.scss'\r\n})\r\nexport class SpinnerComponent {\r\n\r\n}\r\n","<div id=\"custom-spinner\" class=\"spinner-overlay\" hidden>\r\n    <div class=\"spinner-container\">\r\n        <div class=\"spinner-border-wrapper\">\r\n            <div class=\"spinner-border\"></div>\r\n        </div>\r\n        <img src=\"../assets/images/logo-tsi-tres.png\" class=\"spinner-img\" />\r\n    </div>\r\n</div>","import { Directive, ElementRef, inject, input, OnInit, Renderer2 } from '@angular/core';\r\nimport { ICON_CLASSES } from './button.constants';\r\n\r\n@Directive({\r\n  selector: '[iconName]',\r\n  standalone: true\r\n})\r\nexport class IconsDirective implements OnInit {\r\n  name = input<keyof typeof ICON_CLASSES | string>('agregar', { alias: 'iconName' })\r\n\r\n  private elementRef = inject(ElementRef)\r\n  private renderer = inject(Renderer2)\r\n\r\n  ngOnInit(): void {\r\n    this.aplicarEstilo()\r\n  }\r\n\r\n  aplicarEstilo() {\r\n    this.renderer.addClass(this.elementRef.nativeElement, 'fa')\r\n\r\n    const iconClass = ICON_CLASSES[this.name()]\r\n    if (iconClass) {\r\n      this.renderer.addClass(this.elementRef.nativeElement, iconClass)\r\n    }\r\n  }\r\n}","import { Directive, ElementRef, inject, input, OnInit, Renderer2 } from '@angular/core';\r\nimport { COLOR_CLASSES } from './button.constants';\r\n\r\n@Directive({\r\n  selector: '[colorBtn]',\r\n  standalone: true\r\n})\r\nexport class ButtonsModalDirective implements OnInit {\r\n  color = input<'azul' | 'rojo' | 'verde' | 'negro' | 'amarillo' | 'gris' | 'plomo' | 'none' | string>('azul', { alias: 'colorBtn' })\r\n\r\n  private el = inject(ElementRef)\r\n  private renderer = inject(Renderer2)\r\n\r\n  ngOnInit(): void {\r\n    this.aplicarEstilos()\r\n  }\r\n\r\n  aplicarEstilos() {\r\n    const baseClasses = ['btn', 'btn-sm', 'py-2', 'px-4', 'btn-rounded', 'me-1']\r\n    baseClasses.forEach(cls => this.renderer.addClass(this.el.nativeElement, cls))\r\n\r\n    if (this.color() === 'none') {\r\n      this.renderer.removeClass(this.el.nativeElement, 'py-2')\r\n      this.renderer.removeClass(this.el.nativeElement, 'px-4')\r\n      this.renderer.addClass(this.el.nativeElement, 'bg-none')\r\n      this.renderer.addClass(this.el.nativeElement, 'border-0')\r\n      this.renderer.addClass(this.el.nativeElement, 'fs-6')\r\n      this.renderer.addClass(this.el.nativeElement, 'fw-7')\r\n    } else {\r\n      const colorClass = COLOR_CLASSES[this.color()]\r\n      if (colorClass) {\r\n        this.renderer.addClass(this.el.nativeElement, colorClass)\r\n      }\r\n    }\r\n  }\r\n}","import { Directive, ElementRef, inject, input, OnInit, Renderer2 } from '@angular/core';\r\nimport { OUTLINE_COLOR_CLASSES } from './button.constants';\r\n\r\n@Directive({\r\n  selector: '[colorOutlineBtn]',\r\n  standalone: true\r\n})\r\nexport class ButtonsOutlineDirective implements OnInit {\r\n  color = input<'azul' | 'rojo' | 'verde' | 'negro' | 'amarillo' | 'gris' | 'plomo' | string>('azul', { alias: 'colorOutlineBtn' })\r\n\r\n  private el = inject(ElementRef)\r\n  private renderer = inject(Renderer2)\r\n\r\n  ngOnInit(): void {\r\n    this.aplicarEstilos()\r\n  }\r\n\r\n  aplicarEstilos() {\r\n    const baseClasses = ['btn', 'btn-rounded', 'me-1', 'fs-8', 'px-3']\r\n    baseClasses.forEach(cls => this.renderer.addClass(this.el.nativeElement, cls))\r\n\r\n    const colorClass = OUTLINE_COLOR_CLASSES[this.color()]\r\n    if (colorClass) {\r\n      this.renderer.addClass(this.el.nativeElement, colorClass)\r\n    }\r\n  }\r\n}","import { Component, ViewChildren, QueryList, ElementRef, inject, computed, signal, ViewChild, input, HostListener } from '@angular/core';\r\nimport { NgbDropdownModule, NgbDropdown } from '@ng-bootstrap/ng-bootstrap';\r\nimport { CommonModule } from '@angular/common';\r\nimport { IconsDirective } from '../../../directivas/estilos/icons.directive';\r\nimport { ButtonsModalDirective } from '../../../directivas/estilos/buttons-modal.directive';\r\nimport { ButtonsOutlineDirective } from '../../../directivas/estilos/buttons-outline-directive';\r\nimport { ButtonComponent } from '../../forms/button/button.component';\r\nimport { DropdownOption } from '../../../models/dropdownoption.model';\r\nimport { ButtonProperties } from '../../../models/button-properties.model';\r\nimport { SesionService } from 'core-tsi';\r\nimport { PermisoObject } from 'shared-tsi';\r\n\r\n@Component({\r\n  selector: 'app-dropdown-menu',\r\n  imports: [NgbDropdownModule, CommonModule, ButtonComponent, IconsDirective, ButtonsModalDirective, ButtonsOutlineDirective],\r\n  templateUrl: './dropdown-menu.component.html',\r\n  styleUrl: './dropdown-menu.component.scss'\r\n})\r\n\r\nexport class DropdownMenuComponent {\r\n  private sesion = inject(SesionService)\r\n  @ViewChild(NgbDropdown) dropdown!: NgbDropdown\r\n  @ViewChildren('submenuAnchor') submenuAnchors!: QueryList<NgbDropdown>\r\n  @ViewChildren('submenuDiv') submenuDivs!: QueryList<ElementRef>\r\n\r\n  disabled = input<boolean>(false)\r\n  options = input<DropdownOption[]>([], { alias: 'options' });\r\n  buttonProperties = input<ButtonProperties | null>(null, { alias: 'buttonProperties' })\r\n  hoverTrigger = input<boolean>(false)\r\n\r\n  propiedades = signal(this.sesion.getSession().propiedades)\r\n  factores = signal(this.sesion.getSession().factores)\r\n\r\n  activeSubmenu = signal<{ [key: string]: boolean }>({})\r\n  inputButton = input<boolean>(false)\r\n\r\n  isMobile = signal<boolean>(window.innerWidth <= 768)\r\n\r\n  @HostListener('window:resize', ['$event'])\r\n  onResize(event: any) {\r\n    this.isMobile.set(event.target.innerWidth <= 768)\r\n  }\r\n\r\n  readonly visibleOptions = computed(() => {\r\n    const allOptions = this.options()\r\n    if (this.isMobile()) {\r\n      return allOptions.filter(opt =>\r\n        opt.condition !== false &&\r\n        (!opt.factor || this.factores()[opt.factor.key]) &&\r\n        (opt.action || opt.upload || opt.fileAction || opt.submenu)\r\n      )\r\n    }\r\n    return allOptions.filter(opt =>\r\n      opt.condition !== false &&\r\n      (!opt.factor || this.factores()[opt.factor.key])\r\n    )\r\n  })\r\n\r\n  readonly buttonProps = computed(() => this.buttonProperties())\r\n\r\n  readonly mobileFlatOptions = computed(() => {\r\n    if (!this.isMobile()) return []\r\n\r\n    const flat: any[] = []\r\n\r\n    this.visibleOptions().forEach(option => {\r\n      if (option.submenu) {\r\n        const subs = this.getVisibleSubmenuItems(option.submenu)\r\n        subs.forEach(sub => flat.push(sub))\r\n      } else {\r\n        flat.push(option)\r\n      }\r\n    })\r\n    return flat\r\n  })\r\n\r\n  isFirstMobileItem(item: any): boolean {\r\n    return this.mobileFlatOptions()[0] == item\r\n  }\r\n\r\n  isLastMobileItem(item: any): boolean {\r\n    const list = this.mobileFlatOptions()\r\n    return list[list.length - 1] == item\r\n  }\r\n\r\n  handleMainButtonMouseEnter() {\r\n    if (this.hoverTrigger()) {\r\n      this.dropdown.open()\r\n    }\r\n  }\r\n\r\n  handleMainButtonMouseLeave() {\r\n    if (this.hoverTrigger()) {\r\n      if (!this.isMouseOverDropdown()) {\r\n        this.closeAll()\r\n      }\r\n    }\r\n  }\r\n\r\n  handleDropdownMouseEnter() {\r\n    if (this.hoverTrigger()) {\r\n      this.keepOpen()\r\n    }\r\n  }\r\n\r\n  handleDropdownMouseLeave() {\r\n    if (this.hoverTrigger()) {\r\n      if (!this.isMouseOverButton()) {\r\n        this.closeAll()\r\n      }\r\n    }\r\n  }\r\n\r\n  private isMouseOverDropdown(): boolean {\r\n    const dropdownElement = document.querySelector('.dropdown-menu')\r\n    return dropdownElement?.contains(document.activeElement) || false\r\n  }\r\n\r\n  private isMouseOverButton(): boolean {\r\n    const buttonElement = document.querySelector('[ngbDropdownToggle]')\r\n    return buttonElement?.contains(document.activeElement) || false\r\n  }\r\n\r\n  private keepOpen() {\r\n    if (this.dropdown) {\r\n      this.dropdown.open()\r\n    }\r\n  }\r\n\r\n  private closeAll() {\r\n    if (this.dropdown) {\r\n      this.dropdown.close()\r\n    }\r\n    this.submenuAnchors.forEach(anchor => anchor.close())\r\n    this.activeSubmenu.set({})\r\n  }\r\n\r\n  mouseLeaveItem(dropdown: NgbDropdown, event: MouseEvent, optionText: string) {\r\n    const submenuElementRef = this.submenuDivs.find(elRef =>\r\n      this.visibleOptions().some(opt => opt.text == optionText && elRef.nativeElement.contains(event.relatedTarget))\r\n    )\r\n    if (!submenuElementRef) {\r\n      dropdown.close()\r\n      this.activeSubmenu.update(state => ({ ...state, [optionText]: false }))\r\n    }\r\n  }\r\n\r\n  mouseLeaveSubmenu(dropdown: NgbDropdown, event: MouseEvent, optionText: string) {\r\n    const parentElement = this.submenuAnchors.find(anchor =>\r\n      anchor.open && anchor['id'] == optionText\r\n    )\r\n    const relatedTarget = event.relatedTarget as HTMLElement | null\r\n    if (!parentElement || !relatedTarget || !parentElement['nativeElement'].contains(relatedTarget)) {\r\n      dropdown.close()\r\n      this.activeSubmenu.update(state => ({ ...state, [optionText]: false }))\r\n    }\r\n  }\r\n\r\n  getVisibleSubmenuItems(submenuItems: any[]) {\r\n    return submenuItems.filter(\r\n      sub => sub.condition !== false && (!sub.factor || this.factores()[sub.factor])\r\n    )\r\n  }\r\n\r\n  getPropertyName(key: PermisoObject) {\r\n    if (key) {\r\n      return key?.descri ?? ''\r\n    }\r\n    return null\r\n  }\r\n}","<div class=\"d-inline-block\" ngbDropdown container=\"body\">\r\n  @if (buttonProps()) {\r\n  <button [colorBtn]=\"buttonProps()?.color || null\"\r\n    [colorOutlineBtn]=\"!buttonProps()?.color ? buttonProps()?.colorOutline : null\" [disabled]=\"disabled()\"\r\n    class=\"button-tilt-hover w-auto w-sm-100\" [ngClass]=\"{\r\n      'btn text-white me-1 fs-6 px-3 py-0 radius-none padd': inputButton(),\r\n      'pbp-6 wrap': !inputButton()\r\n    }\" ngbDropdownToggle (mouseenter)=\"handleMainButtonMouseEnter()\" (mouseleave)=\"handleMainButtonMouseLeave()\">\r\n    @if (buttonProps()?.icon == 'sunat') {\r\n        <img src=\"assets/images/Sunat.ico\" class=\"button-icon-hover\" height=\"16px\" alt=\"Sunat\">\r\n    }@else {\r\n      <i [iconName]=\"buttonProps()?.icon\" class=\"button-icon-hover\"></i>\r\n    } {{ buttonProps()?.texto }}\r\n  </button>\r\n  } @else {\r\n  <button class=\"btn btn-sm border-0\" ngbDropdownToggle (mouseenter)=\"handleMainButtonMouseEnter()\"\r\n    (mouseleave)=\"handleMainButtonMouseLeave()\" [disabled]=\"disabled()\">\r\n    <i class=\"fas fa-align-left fs-6\"></i>\r\n  </button>\r\n  }\r\n\r\n  <div ngbDropdownMenu class=\"my-0 py-0\" (mouseenter)=\"!isMobile() && handleDropdownMouseEnter()\"\r\n    (mouseleave)=\"!isMobile() && handleDropdownMouseLeave()\">\r\n    @for (option of visibleOptions(); track $index) {\r\n    @if (isMobile() && option.submenu) {\r\n    @for (sub of getVisibleSubmenuItems(option.submenu); track $index; let last = $last) {\r\n    <app-button [icon]=\"sub.icon\" [texto]=\"sub.text\" (accion)=\"!sub.upload && sub.action()\" [uploadButton]=\"sub.upload\"\r\n      [accept]=\"sub.accept\" (fileSelected)=\"sub.fileAction && sub.fileAction($event)\"\r\n      [tooltip]=\"getPropertyName(sub.property)\" [extraClass]=\"\r\n    (isFirstMobileItem(sub) ? 'border-top-radius ' : '') +\r\n    (isLastMobileItem(sub) ? 'border-bottom-radius' : '')\r\n  \" [buttonDeshabilitado]=\"sub.property && !propiedades()[sub.property.key]\" [dropdownButton]=\"true\" />\r\n    }\r\n    }\r\n    @else if (!option.submenu || (option.submenu && !isMobile())) {\r\n    <div class=\"dropdown-item-with-submenu\" ngbDropdown #submenuAnchor=\"ngbDropdown\"\r\n      (mouseenter)=\"!isMobile() && submenuAnchor.open()\">\r\n      @if (option.condition !== false && (!option.factor || factores()[option.factor.key])) {\r\n      <app-button [icon]=\"option.icon\" [texto]=\"option.text\" (accion)=\"!option.upload && option.action()\"\r\n        [uploadButton]=\"option.upload\" [accept]=\"option.accept\"\r\n        (fileSelected)=\"option.fileAction && option.fileAction($event)\" [tooltip]=\"getPropertyName(option.property)\"\r\n        [extraClass]=\"($index == 0 ? 'border-top-radius ' : '') + ($index == visibleOptions().length - 1 ? 'border-bottom-radius' : '')\"\r\n        [buttonDeshabilitado]=\"option.property && !propiedades()[option.property.key]\" [dropdownButton]=\"true\"\r\n        (mouseleave)=\"!isMobile() && mouseLeaveItem(submenuAnchor, $event, option.text)\">\r\n        @if (option.submenu && !isMobile()) {\r\n        <div ngbDropdownMenu placement=\"end\" class=\"my-0 py-0 submenu-container\" #submenuDiv\r\n          (mouseleave)=\"!isMobile() && mouseLeaveSubmenu(submenuAnchor, $event, option.text)\">\r\n          @for (sub of getVisibleSubmenuItems(option.submenu); track $index; let last = $last) {\r\n          <app-button [icon]=\"sub.icon\" [texto]=\"sub.text\" (accion)=\"!sub.upload && sub.action()\"\r\n            [uploadButton]=\"sub.upload\" [accept]=\"sub.accept\" (fileSelected)=\"sub.fileAction && sub.fileAction($event)\"\r\n            [tooltip]=\"getPropertyName(sub.property)\"\r\n            [extraClass]=\"($index == 0 ? 'border-top-radius ' : '') + (last ? 'border-bottom-radius' : '')\"\r\n            [buttonDeshabilitado]=\"sub.property && !propiedades()[sub.property.key]\" [dropdownButton]=\"true\" />\r\n          }\r\n        </div>\r\n        }\r\n      </app-button>\r\n      }\r\n    </div>\r\n    }\r\n    }\r\n  </div>\r\n</div>","import { Component, input, TemplateRef } from '@angular/core';\r\nimport { BadgeComponent } from \"../../alerts/badge/badge.component\";\r\nimport { NgTemplateOutlet } from '@angular/common';\r\nimport { ScrollingModule } from '@angular/cdk/scrolling';\r\nimport { TableData } from '../../../models/table-data.model';\r\nimport { CellRender, CellRendered } from '../../../models/cell-rendered';\r\nimport { validaArray } from 'shared-tsi';\r\n\r\n@Component({\r\n  selector: 'app-card-mobile',\r\n  imports: [BadgeComponent, NgTemplateOutlet,ScrollingModule],\r\n  templateUrl: './card-mobile.component.html',\r\n  styleUrl: './card-mobile.component.scss'\r\n})\r\nexport class CardMobileComponent {\r\n  data = input<any[]>([])\r\n  columns = input<TableData[]>([])\r\n  identifier = input<string[]>([])\r\n  titleTabla = input<string>('Contrato')\r\n  actions = input<TemplateRef<any>>(null)\r\n  altoContainer = input<number>()\r\n\r\n  rendered = input<CellRendered[]>([])\r\n\r\n  getIdentifier (row:any) {\r\n    if(!validaArray(this.identifier())) return ''\r\n    const join = this.identifier().map(k => row[k]).join(' ')\r\n    return `N° ${join}`;\r\n  }\r\n\r\n  resolveCell(col: string, row: any): CellRender | null {\r\n      const value = row[col]\r\n      const r = this.rendered().find(r => r.matches(col, value, row))\r\n      return r ? r.render(value, row) : null\r\n    }\r\n}\r\n","<cdk-virtual-scroll-viewport itemSize=\"120\" [style.height]=\"altoContainer() ? 'calc(100vh - ' + altoContainer() + 'px)' : ''\" >\r\n    <div class=\"row g-2 py-2\">\r\n        <div *cdkVirtualFor=\"let item of data(); let i = index\" class=\"col-12\">\r\n            <div class=\"card shadow-sm\">\r\n                <span class=\"pt-2 px-3 fw-bold fs-7\">{{titleTabla() ?? ''}} {{getIdentifier(item)}}</span>\r\n                <div class=\"card-body py-1 my-0\">\r\n                    @for (col of columns(); track $index) {\r\n                        @if (col.swmobile) {\r\n                            <div class=\"d-flex py-1\">\r\n                                <strong class=\"fs-6 me-2 flex-shrink-0 text-truncate\" style=\"min-width: 90px; max-width: 90px;\">\r\n                                    {{ col.caption }}\r\n                                </strong>\r\n                                \r\n                                <span class=\"fs-6 fw-normal text-break text-wrap flex-grow-1\">\r\n                                    {{ item._format?.[col.fieldname] ?? item[col.fieldname] }}\r\n                                </span>\r\n                                \r\n                            </div>\r\n                        }\r\n                    \r\n                    }\r\n                </div>\r\n                @if (actions()) {\r\n                <div class=\"pb-2 px-3 d-flex justify-content-between align-items-center\">\r\n                    <app-badge label=\"Acciones:\" color=\"bg-success\"></app-badge>\r\n                    <div>\r\n                        <ng-container *ngTemplateOutlet=\"actions(); context: { $implicit: item }\"></ng-container>\r\n                    </div>\r\n                </div>\r\n                }\r\n            </div>\r\n        </div>\r\n    </div>\r\n</cdk-virtual-scroll-viewport>","import { Component, computed, input, model, signal } from '@angular/core';\r\nimport { fadeInOut } from '../../../directivas/animaciones/fade-animation';\r\nimport { IconsDirective } from '../../../directivas/estilos/icons.directive';\r\n\r\n@Component({\r\n  selector: 'app-paginador',\r\n  imports: [IconsDirective],\r\n  templateUrl: './paginador.component.html',\r\n  styleUrl: './paginador.component.scss',\r\n  animations:[fadeInOut]\r\n})\r\nexport class PaginadorComponent {\r\n\r\n  total = input<number>(0)\r\n  limit = input<number>(100) // DEFECTO\r\n  position = input<'start'| 'center' | 'end'>('end')\r\n  loaddata = input<(params: { offset: number; limit: number }) => Promise<boolean>>()\r\n\r\n  page = model<number>(1)\r\n  contador = computed(() => this.page())\r\n  readonly offset = computed(() => (this.page() - 1) * this.limit());\r\n  readonly cantidadDatos = computed(() => Math.min(this.page() * this.limit(), this.total()));\r\n  readonly loading = signal(false);\r\n\r\n  async avanzar() {\r\n    if (this.loading()) return;\r\n    if (this.total() < this.limit()) return;\r\n    await this.tryChangePage(this.page() + 1);\r\n  }\r\n\r\n  async retroceder() {\r\n    if (this.loading() || this.page() <= 1) return;\r\n    await this.tryChangePage(this.page() - 1);\r\n  }\r\n\r\n  private async tryChangePage(newPage: number) {\r\n    const fn = this.loaddata();\r\n    if (!fn) return;\r\n    this.loading.set(true);\r\n    const params = { offset: (newPage - 1) * this.limit(), limit: this.limit() };\r\n    try {\r\n      const ok = await fn(params);\r\n      if (ok) this.page.set(newPage);\r\n    } catch {\r\n    } finally {\r\n      this.loading.set(false);\r\n    }\r\n  }\r\n}\r\n","<div class=\"{{`d-flex justify-content-${position()} pe-3`}}\">\r\n    <div class=\"contenedor d-flex justify-content-end align-items-center px-3 py-2 rounded-2 gap-1 bg-white\">\r\n        <span class=\"fs-6 fw-6\"> Mostrando {{ cantidadDatos() }}/{{ limit() }} </span>\r\n        <p class=\"bg-white px-3 py-1 my-0 mx-3 fs-7 rounded-2 fw-5\" style=\"border: 1px solid rgb(222, 222, 222);\"> {{contador()}} </p>\r\n        \r\n        @if (contador() > 1) {\r\n            <button @fadeInOut class=\"py-1 btn btn-sm shadow bg-white rounded-4 px-3\" [disabled]=\"loading()\" (click)=\"retroceder()\"> <i iconName=\"izquierda\"></i></button>\r\n        }\r\n        <button [disabled]=\"cantidadDatos() < limit() || loading()\" (click)=\"avanzar()\" class=\"py-1 btn btn-sm btn-dark shadow rounded-4 px-3\" > <i iconName=\"derecha\"></i></button>\r\n    </div>\r\n    \r\n</div>","import { CommonModule, DatePipe, DecimalPipe } from '@angular/common';\r\nimport { Component, computed, ContentChild, effect, ElementRef, inject, input, linkedSignal, model, output, QueryList, signal, TemplateRef, untracked, ViewChild, ViewChildren } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { DropdownCdkComponent } from \"../../dropdown/dropdown-cdk/dropdown-cdk.component\";\r\nimport { dropdownAnimation, fadeInOut } from '../../../directivas/animaciones/fade-animation';\r\nimport { CellRender, CellRendered } from '../../../models/cell-rendered';\r\nimport { validarBoolean } from 'shared-tsi';\r\n\r\n@Component({\r\n  selector: 'app-table-advance',\r\n  imports: [FormsModule, CommonModule, DatePipe, DecimalPipe, DropdownCdkComponent],\r\n  templateUrl: './table-advance.component.html',\r\n  styleUrl: './table-advance.component.scss',\r\n  animations: [dropdownAnimation, fadeInOut],\r\n  providers: [DatePipe, DecimalPipe]\r\n})\r\n\r\nexport class TableAdvanceComponent {\r\n\r\n  @ViewChildren('thElement') tableHeaders!: QueryList<ElementRef>\r\n  @ContentChild('customActions', { static: false }) customActions!: TemplateRef<any>\r\n\r\n  private datePipe = inject(DatePipe)\r\n  private decimalPipe = inject(DecimalPipe)\r\n\r\n  rows = input<any[]>([])\r\n  columns = input<any[]>([])\r\n  withDetails = input<boolean>(false)\r\n  withFiltro = input<boolean>(false)\r\n  altoContainer = input<number>()\r\n\r\n  emitirBusqueda = output<string>()\r\n  emitirCheck = output<any>()\r\n  emitirCheckCabecera = output<any>()\r\n  emitirRadio = output<any>()\r\n  emitirColumnasFiltrables = output<any>()\r\n\r\n  colorHeader = input<'normal' | 'light'>('normal')\r\n  isDarkMode = input<boolean>(false)\r\n  busqueda = signal<string>('')\r\n\r\n  selectedRow = model<any>(null)\r\n\r\n  identifier = input<string[]>([])\r\n\r\n  altoContenedor = signal<number>(0)\r\n\r\n  showPopoverColumn = signal<boolean>(false)\r\n\r\n  showPopoverFilter = signal<boolean>(false)\r\n\r\n  isHeaderOperation = signal<boolean>(false)\r\n\r\n  withHeight = input<boolean>(false)\r\n  rendered = input<CellRendered[]>([])\r\n  withTotal = input<boolean>(false)\r\n  withCheckbox = input<boolean>(false)\r\n  selectItems = model<(number | string)[]>([])\r\n\r\n  rowEvent = output<any>()\r\n\r\n  rowClassFn = input<(row: any) => string | string[] | Record<string, boolean>>(null);\r\n  \r\n  rowFilter = computed(() => {\r\n    const term = this.busqueda().toLowerCase()\r\n    const currentRows = this.rows?.() || []\r\n    return currentRows.filter(item => this.filtraItem(item, term))\r\n  })\r\n\r\n  filtrarColumnas = linkedSignal(() => {\r\n    const columns = this.columns()\r\n    const filtro: { [caption: string]: boolean } = {}\r\n    columns.forEach((col) => {\r\n      if (col.fieldname) {\r\n        filtro[col.fieldname] = true\r\n      }\r\n    })\r\n    return filtro\r\n  })\r\n\r\n  toggleFiltros(event: Event) {\r\n    const checked = (event.target as HTMLInputElement).checked\r\n    const filtros = this.filtrarColumnas()\r\n    Object.keys(filtros).forEach(key => {\r\n      filtros[key] = checked\r\n    })\r\n  }\r\n\r\n  visibilidadColumn = linkedSignal(() => {\r\n    const columns = this.columns()\r\n    const columnVisibility: { [caption: string]: boolean } = {}\r\n    columns.forEach((col) => {\r\n      if (col.caption) {\r\n        columnVisibility[col.caption] = true\r\n      }\r\n    })\r\n    return columnVisibility\r\n  })\r\n\r\n  concatenarValue(obj: any, value: string[]) {\r\n    let result = ''\r\n    value.forEach(el => {\r\n      result += obj[el]\r\n    })\r\n    return result\r\n  }\r\n\r\n  checkString = {\r\n    'S': 'Activo',\r\n    'N': 'Inactivo'\r\n  }\r\n\r\n  sortColumn: string | null = null\r\n  sortDirection: 'asc' | 'desc' = 'asc'\r\n\r\n  expandedRows: number = -1\r\n\r\n  constructor() {\r\n    effect(() => {\r\n      const size = (this.rowFilter() ?? []).length\r\n\r\n      const alto = this.altoContainer()\r\n      if (alto > 0 && alto < this.altoContenedor()) {\r\n        setTimeout(() => {\r\n          this.altoContenedor.set(alto)\r\n        }, 300)\r\n      }\r\n      if (alto > 0 && alto > this.altoContenedor()) {\r\n        this.altoContenedor.set(alto)\r\n      }\r\n\r\n      const selected = untracked(() => this.selectedRow())\r\n      if (size > 0 && selected) {\r\n        queueMicrotask(() => {\r\n          const el = document.getElementById('row_table_' + selected)\r\n          el?.scrollIntoView({ behavior: 'smooth', block: 'nearest' })\r\n        })\r\n      }\r\n    })\r\n  }\r\n\r\n  togglePopoverColumn() {\r\n    this.showPopoverColumn.update(prev => !prev)\r\n  }\r\n\r\n  togglePopoverFilter() {\r\n    this.showPopoverFilter.update(prev => !prev)\r\n  }\r\n\r\n  selectRow(index: any) {\r\n    if (this.identifier().length < 1) {\r\n      return this.selectedRow.set(index)\r\n    }\r\n    this.selectedRow.set(this.concatenarValue(index, this.identifier()))\r\n  }\r\n\r\n  getTipoCampo(fieldname: string): string {\r\n    const columna = this.columns().find(col => col.fieldname == fieldname)\r\n    return columna?.tipo ?? 'string'\r\n  }\r\n\r\n  sortTable(column: string) {\r\n    if (this.sortColumn == column) {\r\n      this.sortDirection = this.sortDirection == 'asc' ? 'desc' : 'asc'\r\n    } else {\r\n      this.sortColumn = column\r\n      this.sortDirection = 'asc'\r\n    }\r\n\r\n    this.rowFilter().sort((a, b) => {\r\n      const valueA = a[column] ?? ''\r\n      const valueB = b[column] ?? ''\r\n\r\n      if (typeof valueA == 'number' && typeof valueB == 'number') {\r\n        return this.sortDirection == 'asc' ? valueA - valueB : valueB - valueA\r\n      } else {\r\n        return this.sortDirection == 'asc'\r\n          ? valueA.toString().localeCompare(valueB.toString())\r\n          : valueB.toString().localeCompare(valueA.toString())\r\n      }\r\n    })\r\n  }\r\n\r\n  toggleExpandRow(index: number) {\r\n    this.expandedRows = this.expandedRows == index ? -1 : index\r\n  }\r\n\r\n  textoDigitado(event: Event) {\r\n    const value = (event.target as HTMLInputElement).value\r\n    this.busqueda.set(value)\r\n  }\r\n\r\n  getHighlight(text: any, fieldname: string): string {\r\n    if (text == null) {\r\n      text = ''\r\n    }\r\n    if (!this.filtrarColumnas()[fieldname] || !this.busqueda()) return text\r\n    if (typeof text !== 'string') {\r\n      text = text.toString()\r\n    }\r\n    const regex = new RegExp(`(${this.busqueda()})`, 'gi')\r\n    return text?.replace(regex, '<mark>$1</mark>')\r\n  }\r\n\r\n  desglozarValor = (valor: string) => {\r\n    return valor!.split(',')\r\n  }\r\n\r\n  getSituacionNumberFromColumns(row: any, columns: any[]): number {\r\n    const situacionColumn = columns.find(col => col.type == 'situacion_number')\r\n    if (situacionColumn) {\r\n      return row[situacionColumn.prop] || 0\r\n    }\r\n    return 0\r\n  }\r\n\r\n  clickCheck(item: string, event: Event, row: any) {\r\n    if (this.isHeaderOperation()) return\r\n\r\n    const check = event.target as HTMLInputElement\r\n    const resultCheck = check.checked ? 1 : 0\r\n    const mes = item.at(-1)\r\n    const formatObj = { ...row, check: resultCheck, mes }\r\n    this.emitirCheck.emit(formatObj)\r\n  }\r\n\r\n  areAllChecked(fieldname: string): boolean {\r\n    const rows = this.rowFilter()\r\n    return rows.length > 0 && rows.every(row => row[fieldname] == 1 || row[fieldname] == 'S')\r\n  }\r\n\r\n  toggleAllCheckboxes(event: Event, fieldname: string, rows: any[]) {\r\n    const check = event.target as HTMLInputElement\r\n    this.isHeaderOperation.set(true)\r\n\r\n    rows.forEach(row => {\r\n      row[fieldname] = check.checked ? 'S' : 0\r\n    })\r\n\r\n    const formatObj = {\r\n      ...rows,\r\n      todos: check.checked ? 'S' : 'N',\r\n      field: fieldname\r\n    }\r\n    this.emitirCheckCabecera.emit(formatObj)\r\n    this.isHeaderOperation.set(false)\r\n  }\r\n\r\n  clickRadio(row: any) {\r\n    const formatObj = { ...row }\r\n    this.emitirRadio.emit(formatObj)\r\n  }\r\n\r\n  private filtraItem(item: any, term: string): boolean {\r\n    const columnasActivas = Object.entries(this.filtrarColumnas())\r\n      .filter(([_campo, activo]) => activo)\r\n    return columnasActivas.some(([campo]) => {\r\n      let valor = item[campo]\r\n      const tipo = this.getTipoCampo(campo)\r\n      switch (tipo) {\r\n        case 'fecha':\r\n          valor = this.datePipe.transform(valor, 'dd/MM/yyyy') ?? ''\r\n          break\r\n        case 'decimal':\r\n          valor = this.decimalPipe.transform(valor, '1.2-2') ?? ''\r\n          break\r\n        case 'check':\r\n          valor = valor ? 'Sí' : 'No'\r\n          break\r\n        default:\r\n          valor = (valor ?? '').toString()\r\n      }\r\n      return valor.toLowerCase().includes(term)\r\n    })\r\n  }\r\n\r\n  validaVisibilidad(value: boolean) {\r\n    return validarBoolean(value)\r\n  }\r\n\r\n  allCheck(event: Event) {\r\n    const input = event.target as HTMLInputElement\r\n    if (input.checked) {\r\n      const keys = this.rowFilter().map(row => JSON.stringify(row))\r\n      this.selectItems.set(keys)\r\n    } else {\r\n      this.selectItems.set([])\r\n    }\r\n  }\r\n\r\n  validaAllCheck(): boolean {\r\n    const keys = this.rowFilter().map(row => JSON.stringify(row))\r\n    return (\r\n      keys.length > 0 &&\r\n      keys.every(k => this.selectItems().includes(k))\r\n    )\r\n  }\r\n\r\n  isItemSelected(index: number): boolean {\r\n    const row = this.rowFilter()[index]\r\n    const key = JSON.stringify(row)\r\n    return this.selectItems().includes(key)\r\n  }\r\n\r\n  toogleItem(index: number, event: Event) {\r\n    const input = event.target as HTMLInputElement\r\n    const row = this.rowFilter()[index]\r\n    const key = JSON.stringify(row)\r\n\r\n    if (input.checked) {\r\n      this.selectItems.update(sel => [...sel, key])\r\n      return\r\n    }\r\n    this.selectItems.update(sel => sel.filter(s => s != key))\r\n  }\r\n\r\n  resolveCell(col: string, row: any): CellRender | null {\r\n    const value = row[col]\r\n    const r = this.rendered().find(r => r.matches(col, value, row))\r\n    return r ? r.render(value, row) : null\r\n  }\r\n\r\n  getTotals(fieldname: string): number {\r\n    const itemsSelected = this.withCheckbox() ? this.selectItems().map(item => JSON.parse(item?.toString())) : this.rows()\r\n    return itemsSelected.reduce((acc, row) => {\r\n      const val = row[fieldname]\r\n      return acc + (typeof val == 'number' ? val : 0)\r\n    }, 0)\r\n  }\r\n\r\n  getCampoCantidad(): string | null {\r\n    const col = this.columns().find(c => c.cantidadPonderado)\r\n    return col?.fieldname ?? null\r\n  }\r\n\r\n  getAverageSimple(fieldname: string): number {\r\n    const selected = this.withFiltro()\r\n      ? this.selectItems().map(item => JSON.parse(item.toString()))\r\n      : this.rows().filter((_item, index) => this.selectItems().includes(index))\r\n    const items = this.withCheckbox() ? selected : this.rows()\r\n    if (!items.length) return 0\r\n    const total = items.reduce((acc, row) => {\r\n      const val = row[fieldname]\r\n      return acc + (typeof val === 'number' ? val : 0)\r\n    }, 0)\r\n    return total / items.length\r\n  }\r\n\r\n  getAveragePonderado(fieldname: string): number {\r\n    const campoCantidad = this.getCampoCantidad()\r\n    if (!campoCantidad) return 0\r\n    const selected = this.withFiltro()\r\n      ? this.selectItems().map(item => JSON.parse(item.toString()))\r\n      : this.rows().filter((_item, index) => this.selectItems().includes(index))\r\n    const items = this.withCheckbox() ? selected : this.rows()\r\n    let sumaValor = 0\r\n    let sumaCantidad = 0\r\n    items.forEach(row => {\r\n      const valor = row[fieldname]\r\n      const cantidad = row[campoCantidad]\r\n      if (typeof valor == 'number' && typeof cantidad == 'number') {\r\n        sumaValor += valor * cantidad\r\n        sumaCantidad += cantidad\r\n      }\r\n    })\r\n    return sumaCantidad > 0 ? sumaValor / sumaCantidad : 0\r\n  }\r\n\r\n  getFooterSegments() {\r\n    const offset = [this.withDetails(), this.withCheckbox(), this.customActions]\r\n      .filter(Boolean).length\r\n    const columns = this.columns()\r\n    const calculables = columns.filter(c => c.totalizable || c.promedio)\r\n    if (!calculables.length) {\r\n      return [{ type: 'colspan', span: columns.length + offset }]\r\n    }\r\n    let span = offset\r\n    return columns.reduce((segments, col) => {\r\n      if (col.totalizable) {\r\n        if (span > 0) segments.push({ type: 'colspan', span })\r\n        segments.push({ type: 'total', field: col.fieldname })\r\n        span = 0\r\n      } else if (col.promedioSimple) {\r\n        if (span > 0) segments.push({ type: 'colspan', span })\r\n        segments.push({ type: 'averageSimple', field: col.fieldname })\r\n        span = 0\r\n      }\r\n      else if (col.promedioPonderado) {\r\n        if (span > 0) segments.push({ type: 'colspan', span })\r\n        segments.push({ type: 'averagePonderado', field: col.fieldname })\r\n        span = 0\r\n      } else {\r\n        span++\r\n      }\r\n      return segments\r\n    }, [] as Array<\r\n      | { type: 'colspan'; span: number }\r\n      | { type: 'total'; field: string }\r\n      | { type: 'averageSimple'; field: string }\r\n      | { type: 'averagePonderado'; field: string }\r\n    >).concat(span > 0 ? [{ type: 'colspan', span }] : [])\r\n  }\r\n  \r\n  getRowClass(row: any): { [key: string]: boolean } {\r\n    return {\r\n      'text-error': row.situac == 'J',\r\n      'text-alerta': row.situac == 'L'\r\n    }\r\n  }\r\n\r\n  onClick(row: any) {\r\n    return { usecase: 1, data: row }\r\n  }\r\n\r\n  onDoubleClick(row: any) {\r\n    return { usecase: 2, data: row }\r\n  }\r\n\r\n  onRightClick(event: MouseEvent, row: any) {\r\n    event.preventDefault();\r\n    return { usecase: 3, data: row }\r\n  }\r\n}\r\n","@if (withFiltro()) {\r\n<div class=\"col-12 mb-2 mt-2 d-flex justify-content-end align-items-center position-relative\">\r\n    <label for=\"\" class=\"form-label me-2 pt-2\">Buscar</label>\r\n    <input type=\"text\" class=\"form-control cw-250\" (input)=\"textoDigitado($event)\">\r\n    <button (click)=\"togglePopoverFilter()\" class=\"btn btn-dark boton-buscar fs-7\">\r\n        <i class=\"fas fa-cog\"></i>\r\n    </button>\r\n    @if (showPopoverFilter()) {\r\n    <div class=\"popover-menu-filter shadow\" @dropdownAnimation>\r\n        <div class=\"popover-title fs-7\">Filtros</div>\r\n        <div class=\"form-check form-switch text-start\">\r\n            <input class=\"form-check-input\" type=\"checkbox\" [checked]=\"true\" (change)=\"toggleFiltros($event)\">\r\n            <label class=\"form-check-label\">Todos</label>\r\n        </div>\r\n        @for (col of columns(); track col.caption) {\r\n        <div class=\"form-check form-switch text-start\">\r\n            <input type=\"checkbox\" class=\"form-check-input\" id=\"{{ 'filter_' + col.caption }}\"\r\n                [(ngModel)]=\"filtrarColumnas()[col.fieldname]\" />\r\n            <label class=\"form-check-label\" for=\"{{ 'filter_' + col.caption }}\">\r\n                {{ col.caption }}\r\n            </label>\r\n        </div>\r\n        }\r\n    </div>\r\n    }\r\n</div>\r\n}\r\n\r\n<!---\r\n<div class=\"table-container table-responsive\" #tableContainer\r\n    [style.max-height]=\"altoContenedor()? 'calc(100vh - ' + altoContenedor() + 'px)' : ''\"\r\n    (scroll)=\"onTableScroll($event)\">\r\n-->\r\n<div class=\"table-container table-responsive\"\r\n    [style.height]=\"withHeight() && altoContenedor() ? 'calc(100vh - ' + altoContenedor() + 'px)' : ''\"\r\n    [style.max-height]=\"altoContenedor()? 'calc(100vh - ' + altoContenedor() + 'px)' : ''\">\r\n    <div>\r\n        <!-- [style.height]=\"virtualScrollService.getTotalHeight(itemHeight(), rowFilter().length)\" -->\r\n        <table #table class=\"table table-striped normal-table\" [ngClass]=\"isDarkMode() ? 'table-dark' : ''\">\r\n            <thead>\r\n                <tr class=\"shadow-sm\">\r\n                    @if (withDetails()) {\r\n                    <th class=\"cw-20 b-table\" [ngClass]=\"colorHeader()== 'normal' ? 'h-table' : ''\"></th>\r\n                    }\r\n\r\n                    @if (withCheckbox()) {\r\n                    <th class=\"cw-20 b-table\" [ngClass]=\"colorHeader()== 'normal' ? 'h-table' : ''\">\r\n                        <input type=\"checkbox\" class=\"form-check-input fs-8 border border-secondary\"\r\n                            [checked]=\"validaAllCheck()\" (change)=\"allCheck($event)\">\r\n                    </th>\r\n                    }\r\n\r\n                    @if (customActions) {\r\n                    <th class=\"cw-40 b-table\" [ngClass]=\"colorHeader()== 'normal' ? 'h-table' : ''\">\r\n\r\n                        <app-dropdown-cdk>\r\n                            <ng-template #trigger>\r\n                                <button class=\"btn p-0 text-dark d-flex mx-auto border-0\">\r\n                                    <i class=\"fas fa-cog\"></i>\r\n                                </button>\r\n                            </ng-template>\r\n                            <ng-template #content>\r\n                                <div class=\"popover-menu-column bg-white shadow\" @dropdownAnimation>\r\n                                    <div class=\"popover-title fs-7 bg-white\">Columnas</div>\r\n                                    @for (col of columns(); track col.caption) {\r\n                                    @if (col.caption) {\r\n                                    <div class=\"form-check form-switch text-start align-items-center d-flex\">\r\n                                        <input type=\"checkbox\" class=\"form-check-input py-0 my-0 cw-25 ch-15\"\r\n                                            id=\"{{'switch_' + col.caption}}\"\r\n                                            [(ngModel)]=\"visibilidadColumn()[col.caption]\" />\r\n                                        <label class=\"form-check-label ps-1 fs-6 cursor-pointer font-label\"\r\n                                            for=\"{{'switch_' + col.caption}}\">{{ col.caption }}</label>\r\n                                    </div>\r\n                                    }\r\n                                    }\r\n                                </div>\r\n                            </ng-template>\r\n                        </app-dropdown-cdk>\r\n\r\n                        <!-- <button (click)=\"togglePopoverColumn()\" class=\"btn p-0 text-dark d-flex mx-auto border-0\">\r\n                            <i class=\"fas fa-cog\"></i>\r\n                        </button>\r\n                        @if (showPopoverColumn()) {\r\n                        <div class=\"popover-menu-column shadow\" @dropdownAnimation>\r\n                            <div class=\"popover-title fs-7\">Columnas</div>\r\n                            @for (col of columns(); track col.caption) {\r\n                                @if (col.caption) {\r\n                                <div class=\"form-check form-switch text-start\">\r\n                                    <input type=\"checkbox\" class=\"form-check-input py-0 my-0 cw-25 ch-15\"\r\n                                        id=\"{{'switch_' + col.caption}}\" [(ngModel)]=\"visibilidadColumn()[col.caption]\" />\r\n                                    <label class=\"form-check-label ps-1 fs-6 cursor-pointer font-label\"\r\n                                        for=\"{{'switch_' + col.caption}}\">{{ col.caption }}</label>\r\n                                </div>\r\n                                }\r\n                            }\r\n                        </div>\r\n                        } -->\r\n                    </th>\r\n                    }\r\n                    @for (column of columns(); track $index) {\r\n                    @if (validaVisibilidad(column.visible) && visibilidadColumn()[column.caption] !== false) {\r\n                    <th class=\"b-table\" #thElement [title]=\"column.caption\"\r\n                        [ngClass]=\"colorHeader()== 'normal' ? 'h-table' : ''\">\r\n                        {{ column.caption }}\r\n                        @if(column.caption){\r\n                        @if (sortColumn == column.fieldname) {\r\n                        <span (click)=\"sortTable(column.fieldname)\" class=\"cursor-pointer\">\r\n                            <i [ngClass]=\"sortDirection == 'asc' ? 'fas fa-angle-up fs-6':'fas fa-angle-down fs-6'\"></i>\r\n                        </span>\r\n                        }\r\n                        @if (sortColumn !== column.fieldname) {\r\n                        <i class=\"fas fa-sort icon-sort cursor-pointer\" (click)=\"sortTable(column.fieldname)\"></i>\r\n                        }\r\n                        @if (column.tipoCaption === 'check-input') {\r\n                        <input type=\"checkbox\" class=\"form-check-input fs-8 ms-2 border border-secondary\"\r\n                            [checked]=\"areAllChecked(column.fieldname)\"\r\n                            (change)=\"column.event ? toggleAllCheckboxes($event, column.fieldname, rowFilter()) : null\">\r\n                        }\r\n                        }\r\n                    </th>\r\n                    }\r\n                    }\r\n                </tr>\r\n            </thead>\r\n            <!--\r\n            <tbody\r\n                [style.transform]=\"virtualScrollService.getTransform(visibleRange().start, itemHeight())\"\r\n                [style.min-height]=\"itemHeight() * rowFilter().length + 'px'\">\r\n                @for (row of visibleRows(); track $index) {\r\n                <tr [ngClass]=\"{'table-active': (identifier().length < 1 ? selectedRow() == $index : selectedRow() == concatenarValue(row,identifier())), \r\n                'grilla-error': getSituacionNumberFromColumns(row, columns()) == 9}\"\r\n                    (click)=\"selectRow(identifier().length < 1 ? $index : row)\"\r\n                    [id]=\"identifier().length < 1 ? ('row_table_' + $index) : ('row_table_'+ concatenarValue(row,identifier()))\">\r\n            -->\r\n            <tbody>\r\n                @for (row of rowFilter(); track $index) {\r\n                <tr [ngClass]=\"{'table-active': (identifier().length < 1 ? selectedRow() == $index : selectedRow() == concatenarValue(row,identifier())), \r\n                'grilla-error': getSituacionNumberFromColumns(row, columns()) == 9}\"\r\n                    (click)=\"selectRow(identifier().length < 1 ? $index : row); onClick(row)\"\r\n                    (dblclick)=\"onDoubleClick(row)\" (contextmenu)=\"onRightClick($event,row)\"\r\n                    [id]=\"identifier().length < 1 ? ('row_table_' + $index) : ('row_table_'+ concatenarValue(row,identifier()))\">\r\n                    @if (withDetails()) {\r\n                    <td class=\"b-table text-center mwp-25\">\r\n                        <a (click)=\"toggleExpandRow($index)\" class=\"text-dark cursor-pointer fs-6\">\r\n                            <i class=\"fa-solid\" [class.fa-chevron-right]=\"expandedRows != $index\"\r\n                                [class.fa-chevron-down]=\"expandedRows == $index\"></i>\r\n                        </a>\r\n                    </td>\r\n                    }\r\n\r\n                    @if (withCheckbox()) {\r\n                    <td scope=\"col\" class=\"text-center b-table\">\r\n                        <input type=\"checkbox\" class=\"form-check-input fs-8 border border-secondary my-0 py-0\"\r\n                            [checked]=\"isItemSelected($index)\" \r\n                            (click)=\"$event.stopPropagation()\"\r\n                            (change)=\"toogleItem($index, $event)\">\r\n                    </td>\r\n                    }\r\n\r\n                    @if (customActions) {\r\n                    <td class=\"text-center mwp-90 b-table\">\r\n                        <ng-container *ngTemplateOutlet=\"customActions; context: { $implicit: row }\"></ng-container>\r\n                    </td>\r\n                    }\r\n                    @for (column of columns(); track $index) {\r\n                    @if (validaVisibilidad(column.visible) && visibilidadColumn()[column.caption] !== false) {\r\n\r\n                    @if (column.template) {\r\n                    <td class=\"b-table\">\r\n                        <ng-container *ngTemplateOutlet=\"column.template; context: { $implicit: row, column: column }\">\r\n                        </ng-container>\r\n                    </td>\r\n                    }\r\n                    @else {\r\n                    @switch (column.tipo) {\r\n                    @case ('fecha') {\r\n                    <td [innerHTML]=\"getHighlight(row[column.fieldname] | date:'dd/MM/yyyy', column.fieldname)\"\r\n                        [title]=\"row[column.fieldname] | date:'dd/MM/yyyy'\" [ngClass]=\"rowClassFn() ? rowClassFn()(row) : getRowClass(row)\"\r\n                        class=\"text-center b-table\">\r\n                    </td>\r\n                    }\r\n\r\n                    @case ('date') {\r\n                    <td [innerHTML]=\"getHighlight(row[column.fieldname] | date:'dd/MM/yyyy', column.fieldname)\"\r\n                        [title]=\"row[column.fieldname] | date:'dd/MM/yyyy'\" [ngClass]=\"rowClassFn() ? rowClassFn()(row) : getRowClass(row)\"\r\n                        class=\"text-center b-table\">\r\n                    </td>\r\n                    }\r\n\r\n                    @case ('situacion') {\r\n                    <td [innerHTML]=\"getHighlight(row[column.fieldname], column.fieldname)\"\r\n                        [title]=\"row[column.fieldname]\" [ngClass]=\"rowClassFn() ? rowClassFn()(row) : getRowClass(row)\" class=\"b-table\">\r\n                    </td>\r\n                    }\r\n\r\n                    @case ('decimal') {\r\n                    <td class=\"text-end b-table\"\r\n                        [innerHTML]=\"getHighlight((row[column.fieldname] ?? 0) | number:'1.' + (column.decimales ?? 2) + '-' + (column.decimales ?? 2), column.fieldname)\"\r\n                        [title]=\"(row[column.fieldname] ?? 0) | number:'1.' + (column.decimales ?? 2) + '-' + (column.decimales ?? 2)\"\r\n                        [ngClass]=\"rowClassFn() ? rowClassFn()(row) : getRowClass(row)\">\r\n                    </td>\r\n                    }\r\n\r\n                    @case ('number') {\r\n                    <td class=\"text-end b-table\"\r\n                        [innerHTML]=\"getHighlight((row[column.fieldname] ?? 0) | number:'1.' + (column.decimales ?? 2) + '-' + (column.decimales ?? 2), column.fieldname)\"\r\n                        [title]=\"(row[column.fieldname] ?? 0) | number:'1.' + (column.decimales ?? 2) + '-' + (column.decimales ?? 2)\"\r\n                        [ngClass]=\"rowClassFn() ? rowClassFn()(row) : getRowClass(row)\">\r\n                    </td>\r\n                    }\r\n\r\n                    @case ('text-center') {\r\n                    <td class=\"text-center b-table\" [innerHTML]=\"getHighlight(row[column.fieldname], column.fieldname)\"\r\n                        [title]=\"row[column.fieldname]\" [ngClass]=\"rowClassFn() ? rowClassFn()(row) : getRowClass(row)\">\r\n                    </td>\r\n                    }\r\n\r\n                    @case ('check') {\r\n                    <td class=\"text-center b-table\" [title]=\"checkString[row[column.fieldname]]\">\r\n                        <i class=\"fs-5\"\r\n                            [ngClass]=\"row[column.fieldname] == 'S'?'fas fa-check yes-icon':'fas fa-times no-icon'\"></i>\r\n                    </td>\r\n                    }\r\n\r\n                    @case ('check-input') {\r\n                    <td class=\"text-center b-table\">\r\n                        <input type=\"checkbox\" class=\"form-check-input fs-8 border border-secondary\"\r\n                            [checked]=\"row[column.fieldname] == 1 || row[column.fieldname] == 'S'\"\r\n                            (change)=\"column.event ? clickCheck(column.fieldname,$event,row) : null\">\r\n                    </td>\r\n                    }\r\n\r\n                    @case ('radio-input') {\r\n                    <td class=\"text-center b-table\">\r\n                        @if (!column.condition || column.condition(row)) {\r\n                        <input type=\"radio\" class=\"form-check-input fs-8 mtn-0 border border-secondary\"\r\n                            name=\"radioGroup\" (change)=\"column.event ? clickRadio(row) : null\">\r\n                        }\r\n                    </td>\r\n                    }\r\n\r\n                    @case ('mostrar') {\r\n                    @if (column.condition()) {\r\n                    <td [innerHTML]=\"getHighlight(row[column.fieldname], column.fieldname)\"\r\n                        [title]=\"row[column.fieldname]\" class=\"b-table\">\r\n                    </td>\r\n                    }\r\n                    }\r\n\r\n                    @case ('cell-render') {\r\n                    @let resolverItem = resolveCell(column.fieldname, row);\r\n                    @if (resolverItem) {\r\n                    <td class=\"b-table\" [title]=\"resolverItem.text\" [class.text-center]=\"resolverItem.icon\">\r\n                        @if (resolverItem.icon) {\r\n                        <i class=\"fs-5\" [ngClass]=\"resolverItem.icon\"></i>\r\n                        } @else if (resolverItem.class) {\r\n                        <span [ngClass]=\"row.situac == 'J' ? 'text-error' : resolverItem.class\">\r\n                            {{ resolverItem.text }}\r\n                        </span>\r\n                        } @else {\r\n                        {{ resolverItem.text }}\r\n                        }\r\n                    </td>\r\n                    }\r\n                    }\r\n\r\n                    @default {\r\n                    <td [innerHTML]=\"getHighlight(row[column.fieldname], column.fieldname)\"\r\n                        [title]=\"row[column.fieldname]\" [ngClass]=\"rowClassFn() ? rowClassFn()(row) : getRowClass(row)\" class=\"b-table\">\r\n                    </td>\r\n                    }\r\n                    }\r\n                    }\r\n                    }\r\n                    }\r\n                </tr>\r\n                @if ($index == expandedRows) {\r\n                <tr @fadeInOut>\r\n                    <td [attr.colspan]=\"columns().length + (withDetails()? 1 : 0) + (customActions ? 1 : 0)\"\r\n                        class=\"table-blank\">\r\n                        <div class=\"d-flex flex-column auditoria\">\r\n                            <span class=\"fw-bold fs-7 text-dark\">Datos de auditoría</span>\r\n                            <span class=\"fs-6 text-dark fw-bold\">\r\n                                Creación: {{ row.nomucreac }} el {{ row.fcreac | date:'dd/MM/yyyy' }} a las {{\r\n                                row.hcreac }}\r\n                            </span>\r\n                            <span class=\"fs-6 text-dark fw-bold\">\r\n                                Actualización: {{ row.nomuactua }} el {{ row.factua | date:'dd/MM/yyyy' }} a las {{\r\n                                row.hactua }}\r\n                            </span>\r\n                        </div>\r\n                    </td>\r\n                </tr>\r\n                }\r\n                }\r\n            </tbody>\r\n\r\n            @if (withTotal()) {\r\n            <tfoot>\r\n                <tr>\r\n                    @for (seg of getFooterSegments(); track $index) {\r\n                    @if (seg.type == 'colspan') {\r\n                    <td class=\"b-table text-start fw-bold\" [attr.colspan]=\"seg.span\">\r\n                        {{ $index == 0 ? 'Totales' : '' }}\r\n                    </td>\r\n                    } @else {\r\n                    <td class=\"b-table text-end fw-bold\">\r\n                        @if (seg.type == 'total') {\r\n                        {{ getTotals(seg.field) | number:'1.2-2' }}\r\n                        }@else if (seg.type == 'averageSimple') {\r\n                        {{ getAverageSimple(seg.field) | number:'1.2-2' }}\r\n                        }\r\n                        @else if (seg.type == 'averagePonderado') {\r\n                        {{ getAveragePonderado(seg.field) | number:'1.2-2' }}\r\n                        }\r\n                    </td>\r\n                    }\r\n                    }\r\n                </tr>\r\n            </tfoot>\r\n            }\r\n        </table>\r\n    </div>\r\n</div>","import { DatePipe, DecimalPipe, NgClass, NgTemplateOutlet } from '@angular/common';\r\nimport { ChangeDetectionStrategy, Component, computed, contentChild, effect, ElementRef, HostListener, inject, input, linkedSignal, model, output, QueryList, signal, TemplateRef, untracked, viewChild, ViewChild, ViewChildren } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { DropdownCdkComponent } from \"../../dropdown/dropdown-cdk/dropdown-cdk.component\";\r\nimport { CardMobileComponent } from \"../card-mobile/card-mobile.component\";\r\nimport { dropdownAnimation, fadeInOut } from '../../../directivas/animaciones/fade-animation';\r\nimport { CellRender, CellRendered } from '../../../models/cell-rendered';\r\nimport { TableData } from '../../../models/table-data.model';\r\nimport { formatNumber, validarBoolean } from 'shared-tsi';\r\n\r\n@Component({\r\n  selector: 'app-table-advance-optimizada',\r\n  imports: [DropdownCdkComponent, FormsModule, NgClass, NgTemplateOutlet, CardMobileComponent],\r\n  templateUrl: './table-advance-optimizada.component.html',\r\n  styleUrl: './table-advance-optimizada.component.scss',\r\n  animations: [dropdownAnimation, fadeInOut],\r\n  providers: [DatePipe, DecimalPipe],\r\n  changeDetection:ChangeDetectionStrategy.OnPush\r\n})\r\nexport class TableAdvanceOptimizadaComponent {\r\n\r\n  tableHeaders = viewChild<QueryList<ElementRef>>('thElement')\r\n  customActions = contentChild<TemplateRef<any>>('customActions')\r\n  anchor = viewChild<ElementRef<HTMLTableRowElement>>('anchor')\r\n\r\n  private decimalPipe = inject(DecimalPipe)\r\n  titleTabla = input<string>('Contrato')\r\n\r\n\r\n  rows = input<any[]>([])\r\n  columns = input<any[]>([])\r\n  withDetails = input<boolean>(false)\r\n  withFiltro = input<boolean>(false)\r\n  altoContainer = input<number>()\r\n  colorHeader = input<'normal' | 'light'>('normal')\r\n\r\n  busqueda = signal<string>('')\r\n  selectedRow = model<any>(null)\r\n  identifier = input<string[]>([])\r\n\r\n  altoContenedor = signal<number>(0)\r\n  showPopoverFilter = signal<boolean>(false)\r\n  withHeight = input<boolean>(false)\r\n  rendered = input<CellRendered[]>([])\r\n  withTotal = input<boolean>(false)\r\n  withCheckbox = input<boolean>(false)\r\n  selectItems = model<string[]>([])\r\n  isDarkMode = input<boolean>(false)\r\n\r\n  sortColumn: string | null = null\r\n  sortDirection: 'asc' | 'desc' = 'asc'\r\n  expandedRows: number = -1\r\n\r\n\r\n  /* VARIABLES PARA OPTIMIZAR */\r\n  dataVirtual = signal<any[]>([])\r\n  isLoading = signal(false);\r\n  isLoadingResponsive = signal(false)\r\n  // private batchSize = 30;\r\n  private loadedCount = 0;\r\n  private observer!: IntersectionObserver;\r\n  maxItems = input<number>(50)\r\n  batchSize = input<number>(40)\r\n\r\n  rowEvent = output<any>()\r\n\r\n  rowFilter = computed(() => {\r\n    const term = this.busqueda().toLowerCase()\r\n    const currentRows = this.rows?.() || []\r\n    return currentRows.filter(item => this.filtraItem(item, term))\r\n  })\r\n\r\n  filtrarColumnas = linkedSignal(() => {\r\n    const columns = this.columns()\r\n    const filtro: { [caption: string]: boolean } = {}\r\n    columns.forEach((col) => {\r\n      if (col.fieldname) {\r\n        filtro[col.fieldname] = true\r\n      }\r\n    })\r\n    return filtro\r\n  })\r\n\r\n  toggleFiltros(event: Event) {\r\n    const checked = (event.target as HTMLInputElement).checked\r\n    const filtros = this.filtrarColumnas()\r\n    Object.keys(filtros).forEach(key => {\r\n      filtros[key] = checked\r\n    })\r\n  }\r\n\r\n  visibilidadColumn = linkedSignal(() => {\r\n    const columns = this.columns()\r\n    const columnVisibility: { [caption: string]: boolean } = {}\r\n    columns.forEach((col) => {\r\n      if (col.caption) {\r\n        columnVisibility[col.caption] = true\r\n      }\r\n    })\r\n    return columnVisibility\r\n  })\r\n\r\n  concatenarValue(obj: any, value: string[]) {\r\n    let result = ''\r\n    value.forEach(el => {\r\n      result += obj[el]\r\n    })\r\n    return result\r\n  }\r\n\r\n  checkString = {\r\n    'S': 'Activo',\r\n    'N': 'Inactivo'\r\n  }\r\n\r\n  isMobile = signal<boolean>(window.innerWidth <= 768)\r\n\r\n  constructor() {\r\n    effect(() => {\r\n      const size = (this.rowFilter() ?? []).length\r\n\r\n      const alto = this.altoContainer()\r\n      if (alto > 0 && alto < this.altoContenedor()) {\r\n        setTimeout(() => {\r\n          this.altoContenedor.set(alto)\r\n        }, 300)\r\n      }\r\n      if (alto > 0 && alto > this.altoContenedor()) {\r\n        this.altoContenedor.set(alto)\r\n      }\r\n\r\n      const selected = untracked(() => this.selectedRow())\r\n      if (size > 0 && selected) {\r\n        queueMicrotask(() => {\r\n          const el = document.getElementById('row_table_' + selected)\r\n          el?.scrollIntoView({ behavior: 'smooth', block: 'nearest' })\r\n        })\r\n      }\r\n    })\r\n\r\n    effect(() => {\r\n      const filtered = this.rowFilter();\r\n      const firstBatch = filtered.slice(0, this.batchSize());\r\n      this.dataVirtual.set(firstBatch);\r\n      this.loadedCount = firstBatch.length;\r\n    });\r\n\r\n    effect(() => {\r\n      this.isMobile();\r\n      this.isLoadingResponsive.set(true);\r\n      setTimeout(() => this.isLoadingResponsive.set(false), 200);\r\n    });\r\n\r\n    effect(() => {\r\n      if(this.anchor()) {\r\n        this.actionsAnchor()\r\n      }\r\n    })\r\n  }\r\n\r\n  @HostListener('window:resize', ['$event'])\r\n  onResize(event: any) {\r\n    this.isMobile.set(event.target.innerWidth <= 768);\r\n  }\r\n\r\n  actionsAnchor() {\r\n    this.observer = new IntersectionObserver(entries => {\r\n      if (entries[0].isIntersecting && this.loadedCount < this.rowFilter().length && !this.isLoading()) {\r\n        this.loadMore();\r\n      }\r\n    });\r\n    this.observer.observe(this.anchor().nativeElement);\r\n  }\r\n\r\n  togglePopoverFilter() {\r\n    this.showPopoverFilter.update(prev => !prev)\r\n  }\r\n\r\n  selectRow(index: any) {\r\n    if (this.identifier().length < 1) {\r\n      return this.selectedRow.set(index)\r\n    }\r\n    this.selectedRow.set(this.concatenarValue(index, this.identifier()))\r\n  }\r\n\r\n  sortTable(column: string) {\r\n    if (this.sortColumn == column) {\r\n      this.sortDirection = this.sortDirection == 'asc' ? 'desc' : 'asc'\r\n    } else {\r\n      this.sortColumn = column\r\n      this.sortDirection = 'asc'\r\n    }\r\n\r\n    this.dataVirtual().sort((a, b) => {\r\n      const valueA = a[column] ?? ''\r\n      const valueB = b[column] ?? ''\r\n\r\n      if (typeof valueA == 'number' && typeof valueB == 'number') {\r\n        return this.sortDirection == 'asc' ? valueA - valueB : valueB - valueA\r\n      } else {\r\n        return this.sortDirection == 'asc'\r\n          ? valueA.toString().localeCompare(valueB.toString())\r\n          : valueB.toString().localeCompare(valueA.toString())\r\n      }\r\n    })\r\n  }\r\n\r\n  toggleExpandRow(index: number) {\r\n    this.expandedRows = this.expandedRows == index ? -1 : index\r\n  }\r\n\r\n  textoDigitado(event: Event) {\r\n    const value = (event.target as HTMLInputElement).value\r\n    this.busqueda.set(value)\r\n  }\r\n\r\n  getHighlight(text: any, fieldname: string): string {\r\n    if (text == null) {\r\n      text = ''\r\n    }\r\n    if (!this.filtrarColumnas()[fieldname] || !this.busqueda()) return text\r\n    if (typeof text !== 'string') {\r\n      text = text.toString()\r\n    }\r\n    const regex = new RegExp(`(${this.busqueda()})`, 'gi')\r\n    return text?.replace(regex, '<mark>$1</mark>')\r\n  }\r\n\r\n  getSituacionNumberFromColumns(row: any, columns: any[]): number {\r\n    const situacionColumn = columns.find(col => col.type == 'situacion_number')\r\n    if (situacionColumn) {\r\n      return row[situacionColumn.prop] || 0\r\n    }\r\n    return 0\r\n  }\r\n\r\n  private filtraItem(item: any, term: string): boolean {\r\n    const columnasActivas = Object.entries(this.filtrarColumnas())\r\n      .filter(([_campo, activo]) => activo)\r\n    return columnasActivas.some(([campo]) => {\r\n      const raw = item[campo];\r\n      const formatted = item._format?.[campo];\r\n      const valor = (formatted ?? raw ?? '').toString().toLowerCase();\r\n      return valor.includes(term)\r\n    })\r\n  }\r\n\r\n  validaVisibilidad(value: boolean) {\r\n    return validarBoolean(value)\r\n  }\r\n\r\n  allCheck(event: Event) {\r\n    const input = event.target as HTMLInputElement\r\n    if (input.checked) {\r\n      const keys = this.rowFilter().map(row => JSON.stringify(row))\r\n      this.selectItems.set(keys)\r\n    } else {\r\n      this.selectItems.set([])\r\n    }\r\n  }\r\n\r\n  validaAllCheck(): boolean {\r\n    const keys = this.rowFilter().map(row => JSON.stringify(row))\r\n    return (\r\n      keys.length > 0 &&\r\n      keys.every(k => this.selectItems().includes(k))\r\n    )\r\n  }\r\n\r\n  isItemSelected(index: number): boolean {\r\n    const row = this.rowFilter()[index]\r\n    const key = JSON.stringify(row)\r\n    return this.selectItems().includes(key)\r\n  }\r\n\r\n  toogleItem(index: number, event: Event) {\r\n    const input = event.target as HTMLInputElement\r\n    const row = this.rowFilter()[index]\r\n    const key = JSON.stringify(row)\r\n\r\n    if (input.checked) {\r\n      this.selectItems.update(sel => [...sel, key])\r\n      return\r\n    }\r\n    this.selectItems.update(sel => sel.filter(s => s != key))\r\n  }\r\n\r\n  resolveCell(col: string, row: any): CellRender | null {\r\n    const value = row[col]\r\n    const r = this.rendered().find(r => r.matches(col, value, row))\r\n    return r ? r.render(value, row) : null\r\n  }\r\n\r\n  getTotals(fieldname: string): string {\r\n    const itemsSelected = this.withCheckbox() ? this.selectItems().map(item => JSON.parse(item?.toString())) : this.rows()\r\n    const final = itemsSelected.reduce((acc, row) => {\r\n      const val = row[fieldname]\r\n      return acc + (typeof val == 'number' ? val : 0)\r\n    }, 0)\r\n\r\n    return formatNumber(this.decimalPipe,final) \r\n  }\r\n\r\n  getColspanBeforeTotals(): number {\r\n    const firstTotalizableIndex = this.columns().findIndex(c => c.totalizable)\r\n    const result = firstTotalizableIndex >= 0 ? firstTotalizableIndex : this.columns.length\r\n    return this.withCheckbox() ? result + 1 : result\r\n  }\r\n\r\n  getRowClass(row: any): { [key: string]: boolean } {\r\n    return {\r\n      'text-error': row.situac == 'J',\r\n      'text-alerta': row.situac == 'L'\r\n    }\r\n  }\r\n\r\n  getPosition(col:TableData):string {\r\n    if(col.position) return `text-${col.position}`\r\n    if(['decimal', 'number'].includes(col.tipo)) return `text-end`\r\n    if(['fecha', 'date'].includes(col.tipo)) return `text-center`\r\n    return 'text-start'\r\n  }\r\n\r\n  private loadMore() {\r\n    this.isLoading.set(true);\r\n    setTimeout(() => {\r\n\r\n      const current = this.dataVirtual();\r\n      const next = this.rowFilter().slice(this.loadedCount, this.loadedCount + this.batchSize());\r\n      const merged = [...current];\r\n      for (const item of next) {\r\n        if (!merged.some(x => x.idListTsi === item.idListTsi)) {\r\n          merged.push(item);\r\n        }\r\n      }\r\n      this.dataVirtual.set(merged);\r\n      this.loadedCount += next.length;\r\n      this.isLoading.set(false);\r\n    }, 100);\r\n  }\r\n\r\n  onClick(row:any) {\r\n    this.rowEvent.emit({ usecase:1 , data:row})\r\n  }\r\n  onDoubleClick(row:any) {\r\n    if (window.getSelection()?.type === 'Range') return;\r\n    this.rowEvent.emit({ usecase:2 , data:row})\r\n  }\r\n  onRightClick(event: MouseEvent,row:any) {\r\n    event.preventDefault();\r\n    this.rowEvent.emit({ usecase:3 , data:row})\r\n  }\r\n}\r\n","@if (withFiltro()) {\r\n<div class=\"col-12 mb-2 mt-2 d-flex justify-content-end align-items-center position-relative\">\r\n    <label for=\"\" class=\"form-label me-2 pt-2\">Buscar</label>\r\n    <input type=\"text\" class=\"form-control cw-250\" (input)=\"textoDigitado($event)\">\r\n    <button (click)=\"togglePopoverFilter()\" class=\"btn btn-dark boton-buscar fs-7\">\r\n        <i class=\"fas fa-cog\"></i>\r\n    </button>\r\n    @if (showPopoverFilter()) {\r\n    <div class=\"popover-menu-filter bg-white shadow\" @dropdownAnimation>\r\n        <div class=\"popover-title fs-7 bg-white\">Filtros</div>\r\n        <div class=\"form-check form-switch text-start\">\r\n            <input class=\"form-check-input\" type=\"checkbox\" [checked]=\"true\" (change)=\"toggleFiltros($event)\">\r\n            <label class=\"form-check-label\">Todos</label>\r\n        </div>\r\n        @for (col of columns(); track col.caption) {\r\n        <div class=\"form-check form-switch text-start\">\r\n            <input type=\"checkbox\" class=\"form-check-input\" id=\"{{ 'filter_' + col.caption }}\"\r\n                [(ngModel)]=\"filtrarColumnas()[col.fieldname]\" />\r\n            <label class=\"form-check-label\" for=\"{{ 'filter_' + col.caption }}\">\r\n                {{ col.caption }}\r\n            </label>\r\n        </div>\r\n        }\r\n    </div>\r\n    }\r\n</div>\r\n}\r\n\r\n<!-- VISTA MOBILE -->\r\n\r\n@if (isLoadingResponsive()) {\r\n<div class=\"d-flex flex-column justify-content-center align-items-center py-2\">\r\n    <div class=\"spinner-border text-secondary mb-2\" role=\"status\"></div>\r\n    <span class=\"ms-2 fs-6\">Cargando...</span>\r\n</div>\r\n}\r\n\r\n@if (!isLoadingResponsive()) {\r\n\r\n@if (isMobile()) {\r\n<app-card-mobile [data]=\"rowFilter()\" [columns]=\"columns()\" [actions]=\"customActions()\" [identifier]=\"identifier()\"\r\n    [titleTabla]=\"titleTabla()\" [altoContainer]=\"altoContainer()\" />\r\n}\r\n\r\n@if (!isMobile()) {\r\n\r\n<div class=\"table-container table-responsive\"\r\n    [style.height]=\"withHeight() && altoContenedor() ? 'calc(100vh - ' + altoContenedor() + 'px)' : ''\"\r\n    [style.max-height]=\"altoContenedor()? 'calc(100vh - ' + altoContenedor() + 'px)' : ''\">\r\n    <div>\r\n        <table #table class=\"table table-striped normal-table\" [ngClass]=\"isDarkMode() ? 'table-dark' : ''\">\r\n            <thead>\r\n                <tr class=\"shadow-sm\">\r\n                    @if (withDetails()) {\r\n                    <th class=\"cw-20 b-table\" [ngClass]=\"colorHeader()== 'normal' ? 'h-table' : ''\"></th>\r\n                    }\r\n\r\n                    @if (withCheckbox()) {\r\n                    <th class=\"cw-20 b-table\" [ngClass]=\"colorHeader()== 'normal' ? 'h-table' : ''\">\r\n                        <input type=\"checkbox\" class=\"form-check-input fs-8 border border-secondary\"\r\n                            [checked]=\"validaAllCheck()\" (change)=\"allCheck($event)\">\r\n                    </th>\r\n                    }\r\n\r\n                    @if (customActions()) {\r\n                    <th class=\"cw-40 b-table\" [ngClass]=\"colorHeader()== 'normal' ? 'h-table' : ''\">\r\n\r\n                        <app-dropdown-cdk>\r\n                            <ng-template #trigger>\r\n                                <button class=\"btn p-0 text-dark d-flex mx-auto border-0\">\r\n                                    <i class=\"fas fa-cog\"></i>\r\n                                </button>\r\n                            </ng-template>\r\n                            <ng-template #content>\r\n                                <div class=\"popover-menu-column bg-white shadow\" @dropdownAnimation>\r\n                                    <div class=\"popover-title fs-7 bg-white\">Columnas</div>\r\n                                    @for (col of columns(); track col.caption) {\r\n                                    @if (col.caption) {\r\n                                    <div class=\"form-check form-switch text-start\">\r\n                                        <input type=\"checkbox\" class=\"form-check-input py-0 my-0 cw-25 ch-15\"\r\n                                            id=\"{{'switch_' + col.caption}}\"\r\n                                            [(ngModel)]=\"visibilidadColumn()[col.caption]\" />\r\n                                        <label class=\"form-check-label ps-1 fs-6 cursor-pointer font-label\"\r\n                                            for=\"{{'switch_' + col.caption}}\">{{ col.caption }}</label>\r\n                                    </div>\r\n                                    }\r\n                                    }\r\n                                </div>\r\n                            </ng-template>\r\n                        </app-dropdown-cdk>\r\n                    </th>\r\n                    }\r\n                    @for (column of columns(); track $index) {\r\n                    @if (validaVisibilidad(column.visible) && visibilidadColumn()[column.caption] !== false) {\r\n                    <th class=\"b-table\" #thElement [title]=\"column.caption\"\r\n                        [ngClass]=\"colorHeader()== 'normal' ? 'h-table' : ''\">\r\n                        {{ column.caption }}\r\n                        @if(column.caption){\r\n                        @if (sortColumn == column.fieldname) {\r\n                        <span (click)=\"sortTable(column.fieldname)\" class=\"cursor-pointer\">\r\n                            <i [ngClass]=\"sortDirection == 'asc' ? 'fas fa-angle-up fs-6':'fas fa-angle-down fs-6'\"></i>\r\n                        </span>\r\n                        }\r\n                        @if (sortColumn !== column.fieldname) {\r\n                        <i class=\"fas fa-sort icon-sort cursor-pointer\" (click)=\"sortTable(column.fieldname)\"></i>\r\n                        }\r\n                        }\r\n                    </th>\r\n                    }\r\n                    }\r\n                </tr>\r\n            </thead>\r\n            <tbody>\r\n                @for (row of dataVirtual(); track row.idListTsi) {\r\n                <tr [ngClass]=\"{'table-active': (identifier().length < 1 ? selectedRow() == $index : selectedRow() == concatenarValue(row,identifier())), \r\n                'grilla-error': getSituacionNumberFromColumns(row, columns()) == 9}\"\r\n                    (click)=\"selectRow(identifier().length < 1 ? $index : row); onClick(row)\"\r\n                    (dblclick)=\"onDoubleClick(row)\"\r\n                    (contextmenu)=\"onRightClick($event,row)\"\r\n                    [id]=\"identifier().length < 1 ? ('row_table_' + $index) : ('row_table_'+ concatenarValue(row,identifier()))\">\r\n                    @if (withDetails()) {\r\n                    <td class=\"b-table text-center mwp-25\">\r\n                        <a (click)=\"toggleExpandRow($index)\" class=\"text-dark cursor-pointer fs-6\">\r\n                            <i class=\"fa-solid\" [class.fa-chevron-right]=\"expandedRows != $index\"\r\n                                [class.fa-chevron-down]=\"expandedRows == $index\"></i>\r\n                        </a>\r\n                    </td>\r\n                    }\r\n\r\n                    @if (withCheckbox()) {\r\n                    <td scope=\"col\" class=\"text-center b-table\">\r\n                        <input type=\"checkbox\" class=\"form-check-input fs-8 border border-secondary my-0 py-0\"\r\n                            [checked]=\"isItemSelected($index)\"\r\n                            (click)=\"$event.stopPropagation()\"\r\n                            (change)=\"toogleItem($index, $event)\">\r\n                    </td>\r\n                    }\r\n\r\n                    @if (customActions()) {\r\n                    <td class=\"text-center mwp-90 b-table\">\r\n                        <ng-container *ngTemplateOutlet=\"customActions(); context: { $implicit: row }\"></ng-container>\r\n                    </td>\r\n                    }\r\n                    @for (column of columns(); track $index) {\r\n                    @if (validaVisibilidad(column.visible) && visibilidadColumn()[column.caption] !== false) {\r\n                    @switch (column.tipo) {\r\n                    @case ('cell-render') {\r\n                    @let resolverItem = resolveCell(column.fieldname, row);\r\n                    @if (resolverItem) {\r\n                    <td class=\"b-table\" [title]=\"resolverItem.text\" [class.text-center]=\"resolverItem.icon\">\r\n                        @if (resolverItem.icon) {\r\n                        <i class=\"fs-5\" [ngClass]=\"resolverItem.icon\"></i>\r\n                        } @else if (resolverItem.class) {\r\n                        <span [ngClass]=\"row.situac == 'J' ? 'text-error' : resolverItem.class\">\r\n                            {{ resolverItem.text }}\r\n                        </span>\r\n                        } @else {\r\n                        {{ resolverItem.text }}\r\n                        }\r\n                    </td>\r\n                    }\r\n                    }\r\n\r\n                    @default {\r\n                    <td [innerHTML]=\"getHighlight(row._format?.[column.fieldname] ?? row[column.fieldname], column.fieldname)\"\r\n                        [title]=\"row._format?.[column.fieldname] ?? row[column.fieldname]\" [ngClass]=\"getRowClass(row)\"\r\n                        class=\"b-table {{getPosition(column)}}\">\r\n                    </td>\r\n                    }\r\n                    }\r\n                    }\r\n                    }\r\n                </tr>\r\n                @if ($index == expandedRows) {\r\n                <tr @fadeInOut>\r\n                    <td [attr.colspan]=\"columns().length + (withDetails()? 1 : 0) + (customActions() ? 1 : 0) + (withCheckbox() ? 1 : 0)\"\r\n                        class=\"table-blank\">\r\n                        <div class=\"d-flex flex-column auditoria\">\r\n                            <span class=\"fw-bold fs-7 text-dark\">Datos de auditoría</span>\r\n                            <span class=\"fs-6 text-dark fw-bold\">\r\n                                Creación: {{ row.nomucreac }} el {{ row._format?.fcreac ?? row.fcreac }} a las {{\r\n                                row.hcreac }}\r\n                            </span>\r\n                            <span class=\"fs-6 text-dark fw-bold\">\r\n                                Actualización: {{ row.nomuactua }} el {{ row._format?.factua ?? row.factua }} a las {{\r\n                                row.hactua }}\r\n                            </span>\r\n                        </div>\r\n                    </td>\r\n                </tr>\r\n                }\r\n                }\r\n                <tr #anchor>\r\n                    <td [attr.colspan]=\"columns().length + (withDetails()? 1 : 0) + (customActions() ? 1 : 0) + (withCheckbox() ? 1 : 0)\" class=\"text-center text-muted py-3\">\r\n                        @if (isLoading()) {\r\n                        <span>Cargando más registros...</span>\r\n                        }\r\n                        @if (!isLoading() && dataVirtual().length >= 5000) {\r\n                        <span>No hay más registros</span>\r\n                        }\r\n                    </td>\r\n                </tr>\r\n            </tbody>\r\n\r\n            @if (withTotal()) {\r\n            <tfoot>\r\n                <tr>\r\n                    <td class=\"b-table\" [attr.colspan]=\"getColspanBeforeTotals()\">Totales:</td>\r\n                    @for (col of columns() ; track $index) {\r\n                    @if (col.totalizable) {\r\n                    <td class=\"b-table text-end\">\r\n                        {{ getTotals(col.fieldname)}}\r\n                    </td>\r\n                    }\r\n                    }\r\n                </tr>\r\n            </tfoot>\r\n            }\r\n        </table>\r\n    </div>\r\n</div>\r\n\r\n}\r\n\r\n}\r\n\r\n\r\n<!-- FIN VISTA MOBILE -->","import { CommonModule } from '@angular/common';\r\nimport { Component, ElementRef, HostListener, input, output, QueryList, signal, ViewChildren } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { dropdownAnimation } from '../../../directivas/animaciones/fade-animation';\r\n\r\n@Component({\r\n  selector: 'app-table-busqueda',\r\n  imports: [CommonModule, FormsModule],\r\n  templateUrl: './table-busqueda.component.html',\r\n  styleUrl: './table-busqueda.component.scss',\r\n  animations: [dropdownAnimation]\r\n})\r\nexport class TableBusquedaComponent {\r\n  @ViewChildren('fila') filas!: QueryList<ElementRef>\r\n  @ViewChildren('thElement') tableHeaders!: QueryList<ElementRef>\r\n\r\n  rows = input<any[]>([])\r\n  columns = input<any[]>([])\r\n  withFiltro = input<boolean>(false)\r\n  mode = input<string>('normal')\r\n  altoContainer = input<number>()\r\n\r\n  emitirBusqueda = output<string>()\r\n  emitirCheck = output<any>()\r\n  emitirSelected = output<any>()\r\n\r\n  colorHeader = input<'normal' | 'light'>('normal')\r\n\r\n  busqueda: string = ''\r\n  resizingColumn: HTMLElement | null = null\r\n  startX: number = 0\r\n  startWidth: number = 0\r\n\r\n  selectedRow = 0\r\n\r\n  sortColumn: string | null = null\r\n  sortDirection: 'asc' | 'desc' = 'asc'\r\n\r\n  situacDaClave: Record<string, string> = {\r\n    'A': '',\r\n    'B': 'text-exito',\r\n    'J': 'text-error'\r\n  }\r\n  situacDaStringClave: Record<string, string> = {\r\n    'En Espera': '',\r\n    'Aprobado': 'text-exito',\r\n    'Desaprobado': 'text-error'\r\n  }\r\n\r\n  situacDaRendicion: Record<string, string> = {\r\n    'A': 'EN ESPERA',\r\n    'S': 'APROBADO',\r\n    'N': 'DESAPROBADO'\r\n  }\r\n\r\n  situacDaClaveRendicion: Record<string, string> = {\r\n    'A': 'text-alerta',\r\n    'S': 'text-exito',\r\n    'N': 'text-error'\r\n  }\r\n\r\n  situacTesoreria: Record<number, string> = {\r\n    0: 'Libre',\r\n    1: 'Proceso',\r\n    2: 'Contabilizado',\r\n    9: 'Anulado'\r\n  }\r\n\r\n  checkString = {\r\n    'S': 'Activo',\r\n    'N': 'Inactivo'\r\n  }\r\n\r\n  showPopover = signal<boolean>(false)\r\n\r\n\r\n  selectRow(index: number) {\r\n    this.selectedRow = index\r\n  }\r\n\r\n  onResizeStart(event: MouseEvent, thElement: HTMLElement) {\r\n    this.resizingColumn = thElement\r\n    this.startX = event.pageX\r\n    this.startWidth = thElement.offsetWidth\r\n\r\n    document.addEventListener('mousemove', this.onResizing)\r\n    document.addEventListener('mouseup', this.onResizeEnd)\r\n  }\r\n\r\n  onResizing = (event: MouseEvent) => {\r\n    if (!this.resizingColumn) return\r\n\r\n    const newWidth = this.startWidth + (event.pageX - this.startX)\r\n    this.resizingColumn.style.width = `${newWidth}px`\r\n  };\r\n\r\n  onResizeEnd = () => {\r\n    this.resizingColumn = null;\r\n    document.removeEventListener('mousemove', this.onResizing)\r\n    document.removeEventListener('mouseup', this.onResizeEnd)\r\n  }\r\n\r\n  sortTable(column: string) {\r\n    if (this.sortColumn == column) {\r\n      this.sortDirection = this.sortDirection == 'asc' ? 'desc' : 'asc'\r\n    } else {\r\n      this.sortColumn = column\r\n      this.sortDirection = 'asc'\r\n    }\r\n\r\n    this.rows().sort((a, b) => {\r\n      const valueA = a[column] ?? ''\r\n      const valueB = b[column] ?? ''\r\n\r\n      if (typeof valueA == 'number' && typeof valueB == 'number') {\r\n        return this.sortDirection == 'asc' ? valueA - valueB : valueB - valueA\r\n      } else {\r\n        return this.sortDirection == 'asc'\r\n          ? valueA.toString().localeCompare(valueB.toString())\r\n          : valueB.toString().localeCompare(valueA.toString())\r\n      }\r\n    })\r\n  }\r\n\r\n  textoDigitado(event: Event) {\r\n    const value = (event.target as HTMLInputElement).value\r\n    this.busqueda = value\r\n    this.emitirBusqueda.emit(value)\r\n  }\r\n\r\n  getHighlight(text: any): string {\r\n    if (text == null) {\r\n      text = ''\r\n    }\r\n    if (!this.busqueda) return text\r\n    if (typeof text !== 'string') {\r\n      text = text.toString()\r\n    }\r\n    const regex = new RegExp(`(${this.busqueda})`, 'gi')\r\n    return text?.replace(regex, '<mark>$1</mark>')\r\n  }\r\n\r\n  desglozarValor = (valor: string) => {\r\n    return valor!.split(',')\r\n  }\r\n\r\n  getSituacionNumberFromColumns(row: any, columns: any[]): number {\r\n    const situacionColumn = columns.find(col => col.type == 'situacion_number')\r\n    if (situacionColumn) {\r\n      return row[situacionColumn.prop] || 0\r\n    }\r\n    return 0\r\n  }\r\n\r\n  clicCheck(item: string, event: Event, row: any) {\r\n    const check = event.target as HTMLInputElement\r\n    const resultCierre = check.checked ? 1 : 0\r\n    const mes = item.at(-1)\r\n    const formatObj = { ...row, cierre: resultCierre, mes }\r\n    this.emitirCheck.emit(formatObj)\r\n  }\r\n\r\n\r\n  @HostListener('window:keydown', ['$event'])\r\n  manejarTeclado(event: KeyboardEvent) {\r\n    const numFilas = this.rows().length\r\n\r\n    if (numFilas == 0) {\r\n      return\r\n    }\r\n\r\n    if (event.key == 'ArrowDown') {\r\n      this.selectedRow = (this.selectedRow + 1) % numFilas\r\n      this.scrollToFila()\r\n    } else if (event.key == 'ArrowUp') {\r\n      this.selectedRow = (this.selectedRow - 1 + numFilas) % numFilas\r\n      this.scrollToFila()\r\n    } else if (event.key == 'Enter') {\r\n      event.preventDefault();\r\n      this.enviarDataClick(this.rows()[this.selectedRow])\r\n    }\r\n\r\n  }\r\n\r\n  scrollToFila() {\r\n    const filaElement = this.filas.toArray()[this.selectedRow]?.nativeElement\r\n    if (filaElement) {\r\n      filaElement.scrollIntoView({ behavior: 'smooth', block: 'center' })\r\n    }\r\n  }\r\n\r\n  enviarDataClick(obj: any) {\r\n    this.emitirSelected.emit(obj)\r\n  }\r\n\r\n  tooglePopover() {\r\n    this.showPopover.update(status => !status)\r\n  }\r\n}\r\n","@if (withFiltro()) {\r\n    <div class=\"col-12 mb-2 mt-2 d-flex flex-wrap justify-content-end align-items-center\">\r\n        <label  for=\"text_busqueda_modal\" class=\"form-label me-2 pt-2\">Buscar:</label>\r\n        <input type=\"text\" id=\"text_busqueda_modal\" class=\"form-control cw-250 ch-25\" (input)=\"textoDigitado($event)\">\r\n    </div>\r\n}\r\n\r\n<div class=\"table-container\" [ngClass]=\"mode() == 'normal' ? 'table-responsive' : ''\" [style.max-height]=\"altoContainer()? 'calc(100vh - ' + altoContainer() + 'px)' : ''\">\r\n<table #table class=\"table table-striped\" [ngClass]=\"mode() == 'normal' ? 'normal-table' : 'flex-table'\">\r\n    <thead>\r\n      <tr class=\"shadow-sm\">\r\n        @for (column of columns(); track $index) {\r\n            @if (column.type !== 'mostrar' || column.condition()) {\r\n                <th #thElement [title]=\"column.name\" [ngClass]=\"colorHeader()== 'normal' ? 'header-normal' : ''\">\r\n                    {{ column.name }}\r\n                    @if (sortColumn == column.prop) {\r\n                        <span (click)=\"sortTable(column.prop)\" class=\"cursor-pointer\">\r\n                            <i [ngClass]=\"sortDirection == 'asc' ? 'fas fa-angle-up fs-6':'fas fa-angle-down fs-6'\"></i>\r\n                        </span>\r\n                    }\r\n                    \r\n                    @if (sortColumn !== column.prop) {\r\n                        <i class=\"fas fa-sort icon-sort cursor-pointer\" (click)=\"sortTable(column.prop)\"></i>\r\n                    }\r\n                    @if (mode() == 'flex' && $index + 1 != columns().length) {\r\n                        <span class=\"resize-handle\" (mousedown)=\"onResizeStart($event, thElement)\"></span>\r\n                    }\r\n                </th>\r\n            }\r\n        }\r\n        \r\n      </tr>\r\n    </thead>\r\n\r\n    <tbody>\r\n\r\n            @for (row of rows(); track $index) {\r\n                <tr  [ngClass]=\"{'table-active': selectedRow == $index, 'grilla-error': getSituacionNumberFromColumns(row, columns()) == 9}\" #fila (click)=\"enviarDataClick(row)\">\r\n\r\n                    @for (column of columns(); track $index) {\r\n\r\n                        @if (column.type !== 'mostrar' || column.condition()) {\r\n                            @switch (column.type) {\r\n                                @case ('fecha') {\r\n                                    <td [innerHTML]=\"getHighlight(row[column.prop] | date:'dd/MM/yyyy')\" [title]=\"row[column.prop] | date:'dd/MM/yyyy'\" [ngClass]=\"row.situac == 'J' ? 'text-error':''\">\r\n                                    </td>\r\n                                    \r\n                                }\r\n\r\n                                @case ('status') {\r\n                                    <td [innerHTML]=\"getHighlight(row[column.prop])\" [title]=\"row[column.prop]\" [ngClass]=\"row.situac == 'J' ? 'text-error': situacDaClave[row.situacda]\">\r\n                                    </td>\r\n                                    \r\n                                }\r\n                                @case ('situacion') {\r\n                                    <td [innerHTML]=\"getHighlight(row[column.prop])\"  [title]=\"row[column.prop]\" [ngClass]=\"row.situac == 'J' ? 'text-error':''\">\r\n                \r\n                                    </td>\r\n                                    \r\n                                }\r\n                                @case ('situacion_number') {\r\n                                    <td [innerHTML]=\"getHighlight(situacTesoreria[row[column.prop]])\"  [title]=\"situacTesoreria[row[column.prop]]\" [ngClass]=\"row[column.prop] == 9 ? 'text-error':''\">\r\n                \r\n                                    </td>\r\n                                    \r\n                                }\r\n                                @case ('situacion_string') {\r\n                                    <td [innerHTML]=\"getHighlight(row[column.prop])\"  [title]=\"row[column.prop]\" [ngClass]=\"row.situac == 'J' ? 'text-error': situacDaStringClave[row[column.prop]]\">\r\n                \r\n                                    </td>\r\n                                    \r\n                                }\r\n\r\n                                @case ('situacion_rendicion') {\r\n                                    <td [innerHTML]=\"getHighlight(situacDaRendicion[row[column.prop]])\"  [title]=\"situacDaRendicion[row[column.prop]]\" [ngClass]=\"row.situac == 'J' ? 'text-error': situacDaClaveRendicion[row[column.prop]]\">\r\n                \r\n                                    </td>\r\n                                    \r\n                                }\r\n\r\n                                @case ('decimal') {\r\n                                <td class=\"text-end\"\r\n                                    [innerHTML]=\"getHighlight((row[column.prop] ?? 0) | number:(column.pipe ?? '1.2-2'))\"\r\n                                    [title]=\"(row[column.prop] ?? 0) | number:(column.pipe ?? '1.2-2')\"\r\n                                    [ngClass]=\"row.situac == 'J' ? 'text-error':''\">\r\n                                </td>\r\n                                }\r\n\r\n                                @case ('text-center') {\r\n                                    <td class=\"text-center\" [innerHTML]=\"getHighlight(row[column.prop])\" [title]=\"row[column.prop]\" [ngClass]=\"row.situac == 'J' ? 'text-error':''\">\r\n                                    </td>\r\n                                }\r\n\r\n                                @case ('check') {\r\n                                    <td class=\"text-center\" [title]=\"checkString[row[column.prop]]\" >\r\n                                        <i class=\"fs-5\" [ngClass]=\"row[column.prop] == 'S'?'fas fa-check yes-icon':'fas fa-times no-icon'\"></i>\r\n                                    </td>\r\n                                }\r\n\r\n                                @case ('check-input') {\r\n                                    <td class=\"text-center\" >\r\n                                        <input type=\"checkbox\" class=\"form-check-input fs-8\" [checked]=\"row[column.prop] == 1\" (change)=\"column.event ? clicCheck(column.prop,$event,row) : null\">\r\n                                    </td>\r\n                                }\r\n\r\n                                @case ('mostrar') {\r\n                                    @if (column.condition()) {\r\n                                        <td [innerHTML]=\"getHighlight(row[column.prop])\"  [title]=\"row[column.prop]\">\r\n                                        </td> \r\n                                    }\r\n                                }\r\n\r\n                                @default {\r\n                                    <td [innerHTML]=\"getHighlight(row[column.prop])\"  [title]=\"row[column.prop]\" [ngClass]=\"row.situac == 'J' ? 'text-error':''\">\r\n                                        \r\n                                    </td>\r\n                                    \r\n                                }\r\n                            }\r\n                        }\r\n                        <!-- <td>{{ row[column.prop] }}</td> -->\r\n                    }\r\n                    \r\n                  </tr>\r\n            }\r\n\r\n      \r\n    </tbody>\r\n  </table>\r\n</div>","import { CommonModule, DatePipe, DecimalPipe } from '@angular/common';\r\nimport { Component, computed, ContentChild, inject, input, linkedSignal, model, output, signal, TemplateRef } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { NgbDropdownModule } from '@ng-bootstrap/ng-bootstrap';\r\nimport { ButtonComponent } from '../../forms/button/button.component';\r\nimport { DecimalDirective } from '../../../directivas/inputs/decimal.directive';\r\nimport { OnlyNumberDirective } from '../../../directivas/inputs/only-number.directive';\r\nimport { CellRender, CellRendered } from '../../../models/cell-rendered';\r\nimport { cleanNumber } from 'shared-tsi';\r\n\r\n@Component({\r\n  selector: 'app-table-detalle',\r\n  imports: [FormsModule, CommonModule, DecimalDirective, OnlyNumberDirective, NgbDropdownModule, ButtonComponent],\r\n  templateUrl: './table-detalle.component.html',\r\n  styleUrl: './table-detalle.component.scss',\r\n  providers: [DatePipe, DecimalPipe]\r\n})\r\nexport class TableDetalleComponent {\r\n\r\n  private datePipe = inject(DatePipe)\r\n  private decimalPipe = inject(DecimalPipe)\r\n\r\n  selectedRow = model<any>(null)\r\n  identifier = input<string[]>([])\r\n  altoContainer = input<number>()\r\n  withFiltro = input<boolean>(false)\r\n  busqueda = model<string>('')\r\n  rows = input<any[]>([])\r\n  columns = input<any[]>([])\r\n  lastItemDisabled = input<boolean>(true)\r\n  position = input<'block' | 'flex'>('flex')\r\n  withCheckbox = input<boolean>(true)\r\n  withEditItem = input<boolean>(false)\r\n\r\n  colorHeader = input<'normal' | 'light'>('normal')\r\n\r\n  @ContentChild('customActions', { static: false }) customActions!: TemplateRef<any>\r\n\r\n  valueTemporal: any\r\n\r\n  deleteItems = model<number[]>([])\r\n  selectItems = model<any[]>([])\r\n\r\n  isDarkMode = input<boolean>(false)\r\n  selectedRadio = model<number | null>(null);\r\n\r\n  editItem = output<any>()\r\n\r\n  rendered = input<CellRendered[]>([])\r\n\r\n  concatenarValue(obj: any, value: string[]) {\r\n    let result = ''\r\n    value.forEach(el => {\r\n      result += obj[el]\r\n    })\r\n    return result\r\n  }\r\n\r\n  selectRow(index: any) {\r\n    if (this.identifier().length < 1) {\r\n      return this.selectedRow.set(index)\r\n    }\r\n    this.selectedRow.set(this.concatenarValue(index, this.identifier()))\r\n  }\r\n\r\n  getSituacionNumberFromColumns(row: any, columns: any[]): number {\r\n    const situacionColumn = columns.find(col => col.type == 'situacion_number');\r\n    if (situacionColumn) {\r\n      return row[situacionColumn.prop] || 0;\r\n    }\r\n    return 0\r\n  }\r\n\r\n  focusData(data: any) {\r\n    this.valueTemporal = data\r\n  }\r\n\r\n  validarData(value: any) {\r\n    if (this.valueTemporal == value) {\r\n      return false\r\n    }\r\n    this.valueTemporal = null\r\n    return true\r\n  }\r\n\r\n  // useSelectionMode() {\r\n  //   return this.selectItems() != undefined\r\n  // }\r\n\r\n  toogleItem(index: number, event: Event) {\r\n    const input = event.target as HTMLInputElement\r\n    if (input.checked) {\r\n      this.deleteItems.update(de => [...(de || []), index])\r\n    } else {\r\n      this.deleteItems.update(de => (de || []).filter(d => d != index))\r\n    }\r\n\r\n\r\n    // if (this.useSelectionMode()) {\r\n    //   if (input.checked) {\r\n    //     this.selectItems.update(items => [...(items || []), row])\r\n    //   } else {\r\n    //     this.selectItems.update(items => (items || []).filter(item =>\r\n    //       this.identifier().length > 0\r\n    //         ? this.concatenarValue(item, this.identifier()) != this.concatenarValue(row, this.identifier())\r\n    //         : item != row\r\n    //     ))\r\n    //   }\r\n    // } else {\r\n    //   if (input.checked) {\r\n    //     this.deleteItems.update(de => [...(de || []), index])\r\n    //   } else {\r\n    //     this.deleteItems.update(de => (de || []).filter(d => d != index))\r\n    //   }\r\n    // }\r\n  }\r\n\r\n  allCheck(event: Event) {\r\n    const input = event.target as HTMLInputElement\r\n\r\n    if (input.checked) {\r\n      const total = this.rows().length\r\n      if (this.lastItemDisabled()) {\r\n        this.deleteItems.set(Array.from({ length: total - 1 }, (_, i) => i))\r\n      } else {\r\n        this.deleteItems.set(Array.from({ length: total }, (_, i) => i))\r\n      }\r\n    } else {\r\n      this.deleteItems.set([])\r\n    }\r\n\r\n    // if (!this.useSelectionMode()) {\r\n    //   if (input.checked) {\r\n    //     const total = this.rows().length\r\n    //     if (this.lastItemDisabled()) {\r\n    //       this.deleteItems.set(Array.from({ length: total - 1 }, (_, i) => i))\r\n    //     } else {\r\n    //       this.deleteItems.set(Array.from({ length: total }, (_, i) => i))\r\n    //     }\r\n    //   } else {\r\n    //     this.deleteItems.set([])\r\n    //   }\r\n    // }\r\n    // else {\r\n    //   if (input.checked) {\r\n    //     let itemsToSelect = [...this.rows()]\r\n    //     if (this.lastItemDisabled()) {\r\n    //       itemsToSelect = itemsToSelect.slice(0, -1)\r\n    //     }\r\n    //     this.selectItems.set(itemsToSelect)\r\n    //   } else {\r\n    //     this.selectItems.set([])\r\n    //   }\r\n    // }\r\n  }\r\n\r\n  validaAllCheck() {\r\n    const total = this.rows().length\r\n    if (this.lastItemDisabled() && total > 1) return this.deleteItems().length == (total - 1)\r\n    if (this.lastItemDisabled() && total <= 1) return false\r\n    return this.deleteItems().length == total\r\n    // if (!this.useSelectionMode()) {\r\n    //   const total = this.rows().length\r\n    //   if (this.lastItemDisabled() && total > 1) return this.deleteItems().length == (total - 1)\r\n    //   if (this.lastItemDisabled() && total <= 1) return false\r\n    //   return this.deleteItems().length == total\r\n    // }\r\n    // else {\r\n    //   const totalItems = this.lastItemDisabled()\r\n    //     ? this.rows().length - 1\r\n    //     : this.rows().length\r\n    //   return this.selectItems().length === totalItems && totalItems > 0\r\n    // }\r\n  }\r\n\r\n  isItemSelected(index: number): boolean {\r\n    return this.deleteItems().includes(index)\r\n    // if (!this.useSelectionMode()) {\r\n    //   return this.deleteItems().includes(index)\r\n    // }\r\n    // else {\r\n    //   const row = this.rows()[index]\r\n    //   return this.selectItems().some(item =>\r\n    //     this.identifier().length > 0\r\n    //       ? this.concatenarValue(item, this.identifier()) === this.concatenarValue(row, this.identifier())\r\n    //       : item === row\r\n    //   )\r\n    // }\r\n  }\r\n\r\n  clickRadio(index: number) {\r\n    if (this.lastItemDisabled() && this.validaLastRegistro(index)) {\r\n      return\r\n    }\r\n\r\n    this.selectedRadio.set(index)\r\n  }\r\n\r\n  validaLastRegistro = (index: number) => {\r\n    const registros = (this.rows() ?? []).length\r\n    return registros == index + 1\r\n  }\r\n\r\n  limpiarNumero(numero: any) {\r\n    if (typeof numero == 'string') return cleanNumber(numero)\r\n    if (!numero) return 0\r\n    return numero\r\n  }\r\n\r\n  widthDefault = (column: any) => {\r\n    if ((column.tipo == 'input' || column.tipo == 'input-number' || column.tipo == 'input-decimal') && column.width < 100) {\r\n      return 100\r\n    }\r\n    return column.width\r\n  }\r\n\r\n  manejarDataEtiqueta(data: any, row: any) {\r\n    row.etiqueta = data.ETIQUETA\r\n    row.fvenci = data.FVENCI\r\n    row.ancho = data.ANCHO\r\n    row.lote = data.LOTE\r\n    row.acabado = data.ACABADO\r\n    row.nrocarrete = data.NROCARRETE\r\n    row.chasis = data.CHASIS\r\n    row.motor = data.MOTOR\r\n    row.opnumdoc = data.OPNUMDOC\r\n  }\r\n\r\n  limpiarEtiqueta(event: boolean, row: any) {\r\n    if (!event) {\r\n      row = { ...row, etiqueta: '', fvenci: '', ancho: null, lote: '', acabado: '', nrocarrete: '', chasis: '', motor: '', opnumdoc: '' }\r\n    }\r\n  }\r\n\r\n  generateKeyDisabled = (item: any, column: any) => {\r\n    const generate = `disabled${column.fieldname}`\r\n    return item[generate] ?? false\r\n  }\r\n\r\n  validaAccionDescri = (index: number) => {\r\n    const rows = (this.rows() ?? []).length - 1\r\n    return this.lastItemDisabled() && index == rows\r\n  }\r\n\r\n  validarFunction = (value: any) => {\r\n    if (typeof value === 'function') return value\r\n    return null;\r\n  }\r\n\r\n  validaEdit(positi: number) {\r\n    if (this.lastItemDisabled() && this.validaLastRegistro(positi)) return false\r\n    return true\r\n  }\r\n\r\n  disabledColumn = (row: any, column: any) => {\r\n    if (row.disabledAll) return true;\r\n    if (column.disabled) return true;\r\n    return false\r\n  }\r\n\r\n  resolveCell(col: string, row: any): CellRender {\r\n    const value = row[col]\r\n    const r = this.rendered().find(r => r.matches(col, value, row))\r\n    return r ? r.render(value, row) : null\r\n  }\r\n\r\n  getRowClass(row: any): string {\r\n    const match = this.rendered()?.find(r => r.matches('*', null, row))\r\n    return match ? match.render(null, row)?.class || '' : ''\r\n  }\r\n\r\n  rowFilter = computed(() => {\r\n    const term = this.busqueda().toLowerCase()\r\n    const currentRows = this.rows?.() || []\r\n    return currentRows.filter(item => this.filtraItem(item, term))\r\n  })\r\n\r\n  getTipoCampo(fieldname: string): string {\r\n    const columna = this.columns().find(col => col.fieldname == fieldname)\r\n    return columna?.tipo ?? 'string'\r\n  }\r\n\r\n  private filtraItem(item: any, term: string): boolean {\r\n    const columnasActivas = Object.entries(this.filtrarColumnas())\r\n      .filter(([_campo, activo]) => activo)\r\n\r\n    return columnasActivas.some(([campo]) => {\r\n      let valor = item[campo]\r\n      const tipo = this.getTipoCampo(campo)\r\n\r\n      switch (tipo) {\r\n        case 'fecha':\r\n          valor = this.datePipe.transform(valor, 'dd/MM/yyyy') ?? ''\r\n          break\r\n        case 'decimal':\r\n          valor = this.decimalPipe.transform(valor, '1.2-2') ?? ''\r\n          break\r\n        case 'check':\r\n          valor = valor ? 'Sí' : 'No'\r\n          break\r\n        default:\r\n          valor = (valor ?? '').toString()\r\n      }\r\n\r\n      return valor.toLowerCase().includes(term)\r\n    })\r\n  }\r\n\r\n  filtrarColumnas = linkedSignal(() => {\r\n    const columns = this.columns()\r\n    const filtro: { [caption: string]: boolean } = {}\r\n    columns.forEach((col) => {\r\n      if (col.fieldname) {\r\n        filtro[col.fieldname] = true\r\n      }\r\n    })\r\n    return filtro\r\n  })\r\n\r\n  textoDigitado(event: Event) {\r\n    const value = (event.target as HTMLInputElement).value\r\n    this.busqueda.set(value)\r\n  }\r\n\r\n  getHighlight(text: any): string {\r\n    if (text == null) {\r\n      text = ''\r\n    }\r\n    if (!this.busqueda()) return text\r\n    if (typeof text !== 'string') {\r\n      text = text.toString()\r\n    }\r\n    const regex = new RegExp(`(${this.busqueda()})`, 'gi')\r\n    return text?.replace(regex, '<mark>$1</mark>')\r\n  }\r\n}\r\n","@if (withFiltro()) {\r\n<div class=\"col-12 mb-2 mt-2 d-flex justify-content-end align-items-center\">\r\n    <label for=\"\" class=\"form-label me-2 pt-2\">Buscar</label>\r\n    <input type=\"text\" class=\"form-control cw-250\" (input)=\"textoDigitado($event)\">\r\n</div>\r\n}\r\n<div class=\"table-container table-responsive\"\r\n    [style.max-height]=\"altoContainer() ? 'calc(100vh - ' + altoContainer() + 'px)' : ''\"\r\n    [style.max-height]=\"altoContainer()? 'calc(100vh - ' + altoContainer() + 'px)' : ''\">\r\n    <table #table class=\"table table-striped normal-table\" [ngClass]=\"isDarkMode() ? 'table-dark' : ''\">\r\n        <thead>\r\n            <tr class=\"shadow-sm\">\r\n                @if (withCheckbox()) {\r\n                <th scope=\"col\" class=\"text-center b-table w-min\"\r\n                    [ngClass]=\"colorHeader()== 'normal' ? '' : 'header-normal'\">\r\n                    <input type=\"checkbox\" class=\"form-check-input fs-8 border border-secondary\"\r\n                        [checked]=\"validaAllCheck()\" (change)=\"allCheck($event)\">\r\n                </th>\r\n                }\r\n\r\n                @if (withEditItem()) {\r\n                <th scope=\"col\" class=\"text-center b-table w-min\"\r\n                    [ngClass]=\"colorHeader()== 'normal' ? '' : 'header-normal'\">\r\n                </th>\r\n                }\r\n\r\n                @if (customActions) {\r\n                <th scope=\"col\" class=\"b-table w-min mwp-50\"\r\n                    [ngClass]=\"colorHeader()== 'normal' ? '' : 'header-normal'\"></th>\r\n                }\r\n\r\n                @for (column of columns(); track $index) {\r\n                @if (column.visible) {\r\n                <th scope=\"col\" class=\"b-table\" #thElement [title]=\"column.caption\"\r\n                    [style.width]=\"widthDefault(column) + 'px'\" [style.min-width]=\"widthDefault(column) + 'px'\"\r\n                    [ngClass]=\"colorHeader()== 'normal' ? '' : 'header-normal'\">\r\n                    {{ column.caption }}\r\n                </th>\r\n                }\r\n                }\r\n            </tr>\r\n        </thead>\r\n\r\n        <tbody>\r\n            @for (row of rowFilter(); track iRow; let iRow = $index) {\r\n            @let isLast = validaAccionDescri(iRow);\r\n            @let rowClass = getRowClass(row);\r\n            <tr [ngClass]=\"{'table-active': (identifier().length < 1 ? selectedRow() == $index : selectedRow() == concatenarValue(row,identifier()))}\"\r\n                [class]=\"rowClass\" (click)=\"selectRow(identifier().length < 1 ? $index : row)\"\r\n                [id]=\"identifier().length < 1 ? ('row_table_' + $index) : ('row_table_'+ concatenarValue(row,identifier()))\">\r\n\r\n                @if (withCheckbox()) {\r\n                <td scope=\"col\" class=\"text-center b-table w-min\" [class]=\"rowClass\">\r\n                    @if(!resolveCell('checkbox', row)?.hidden){\r\n                    <input type=\"checkbox\" class=\"form-check-input fs-8 border border-secondary my-0 py-0\"\r\n                        [disabled]=\"!lastItemDisabled() ? false : validaLastRegistro($index)\"\r\n                        [checked]=\"isItemSelected($index)\" (change)=\"toogleItem($index, $event)\">\r\n                    }\r\n                </td>\r\n                }\r\n\r\n                @if (withEditItem()) {\r\n                <td scope=\"col\" class=\"text-start b-table w-min\">\r\n                    <div class=\"d-flex align-items-center justify-content-center\">\r\n                        <i (click)=\"validaEdit(iRow) ? editItem.emit(row) : null \"\r\n                            class=\"fas fa-pen fs-7 px-2 py-2 my-1 rounded-2 text-secondary shadow-sm\"\r\n                            [ngClass]=\"validaEdit(iRow) ? 'cursor-pointer' : ''\" title=\"Editar articulo\"></i>\r\n                    </div>\r\n                </td>\r\n                }\r\n\r\n                @if (customActions) {\r\n                <td class=\"text-center mwp-90 b-table w-min\">\r\n                    <div class=\"d-flex justify-content-center align-items-center\">\r\n                        <ng-container *ngTemplateOutlet=\"customActions; context: { $implicit: row }\"></ng-container>\r\n                    </div>\r\n                </td>\r\n                }\r\n\r\n                @for (column of columns(); track $index) {\r\n                @if (column.visible) {\r\n                @switch (column.tipo) {\r\n\r\n                @case ('input-radio') {\r\n                <td scope=\"col\" class=\"text-center b-table\">\r\n                    <input type=\"radio\" class=\"form-check-input fs-8 border border-secondary m-0 p-0\"\r\n                        [disabled]=\"lastItemDisabled() && validaLastRegistro(iRow)\" [checked]=\"selectedRadio() === iRow\"\r\n                        (change)=\"clickRadio(iRow)\">\r\n                </td>\r\n                }\r\n\r\n                @case ('fecha') {\r\n                <td class=\"b-table\" [title]=\"row[column.fieldname] | date:'dd/MM/yyyy'\"\r\n                    [ngClass]=\"row.situac == 'J' ? 'text-error':''\">\r\n                    {{ row[column.fieldname] | date:'dd/MM/yyyy' }}\r\n                </td>\r\n                }\r\n\r\n                @case ('decimal') {\r\n                <td class=\"text-end b-table\" [title]=\"limpiarNumero(row[column.fieldname]) | number:'1.2-2'\"\r\n                    [ngClass]=\"row.situac == 'J' ? 'text-error':''\">\r\n                    {{limpiarNumero(row[column.fieldname]) | number:'1.2-2'}}\r\n                </td>\r\n                }\r\n\r\n                @case ('list-select') {\r\n                <td class=\"text-center b-table\" [title]=\"row[column.fieldname]\">\r\n                    <div ngbDropdown class=\"d-inline-block\" container=\"body\">\r\n                        <div class=\"h-100 bg-sidebar d-flex align-items-center px-1\">\r\n                            <button [disabled]=\"!isLast\" class=\"border-0 bg-none\"\r\n                                [ngClass]=\"!isLast ? 'text-muted' : 'text-input'\" ngbDropdownToggle>\r\n                                {{row[column.fieldname]}}\r\n                            </button>\r\n                        </div>\r\n                        <div ngbDropdownMenu class=\"my-0 py-0\">\r\n                            @for (item of column.lista; track $index; let last = $last) {\r\n                            <app-button [texto]=\"item.text\"\r\n                                [extraClass]=\"($index == 0 ? 'border-top-radius ' : '') + (last ? 'border-bottom-radius' : '')\"\r\n                                [dropdownButton]=\"true\" (accion)=\"item?.action(row,item.codigo)\" />\r\n                            }\r\n                        </div>\r\n                    </div>\r\n                    <!-- <app-dropdown-menu [options]=\"column.lista\" [disabled]=\"lastItemDisabled() ? false : !validaLastRegistro($index)\" [buttonProperties]=\"{color:'none',texto:row[column.fieldname]}\"/> -->\r\n                </td>\r\n\r\n                }\r\n\r\n                @case ('input') {\r\n                <td class=\"b-table\" [title]=\"row[column.fieldname]\" [ngClass]=\"row.situac == 'J' ? 'text-error':''\">\r\n                    <input type=\"text\" class=\"form-control\" [(ngModel)]=\"row[column.fieldname]\"\r\n                        (focus)=\"focusData(row[column.fieldname])\"\r\n                        (blur)=\"!validarData(row[column.fieldname]) ? null : column?.blur(row)\"\r\n                        (keyup.enter)=\"!validarData(row[column.fieldname]) ? null : column?.enter(row)\"\r\n                        [disabled]=\"column.disabled ? (typeof column.disabled === 'function' ? column.disabled(row) : column.disabled) : false\">\r\n                </td>\r\n                }\r\n\r\n                @case ('input-date') {\r\n                <td class=\"b-table\" [title]=\"row[column.fieldname]\" [ngClass]=\"row.situac == 'J' ? 'text-error':''\">\r\n                    <input type=\"date\" class=\"form-control\" [(ngModel)]=\"row[column.fieldname]\"\r\n                        (blur)=\"column?.blur(row)\" (keyup.enter)=\"column?.enter(row)\"\r\n                        [disabled]=\"column.disabled ? (typeof column.disabled === 'function' ? column.disabled(row) : column.disabled) : false\">\r\n                </td>\r\n                }\r\n\r\n                @case ('input-etiqueta') {\r\n                <td class=\"b-table\" [title]=\"row[column.fieldname]\" [ngClass]=\"row.situac == 'J' ? 'text-error':''\">\r\n                    <!-- <app-doble-input-buscar [oneinput]=\"true\" type=\"etiqueta\" [withDetails]=\"true\"\r\n                        [(valuedes)]=\"row[column.fieldname]\" [(disabled)]=\"row.disabledEtiqueta\"\r\n                        [auxiliarData]=\"{tipinv:row.tipinv,codart:row.codart,codtit:row.codtit,codalm:row.codalm}\"\r\n                        (emitirAdicionalData)=\"manejarDataEtiqueta($event,row)\"\r\n                        (disabledChange)=\"limpiarEtiqueta($event,row)\" [withBuscar2]=\"true\"\r\n                        [allDisabled]=\"row.disabledAll ?? false\" /> -->\r\n                </td>\r\n                }\r\n\r\n                @case ('input-afecta') {\r\n                <td class=\"b-table\" [title]=\"row[column.fieldname]\" [ngClass]=\"row.situac == 'J' ? 'text-error':''\">\r\n                    <!-- <app-doble-input-buscar [oneinput]=\"true\" type=\"tafecta\" [(valuecod)]=\"row[column.fieldname]\"\r\n                        [(disabled)]=\"row.disabledEtiqueta\" [(valuedes)]=\"row.dtipafec\" viewInput=\"cod\"\r\n                        [withBuscar]=\"true\" [allDisabled]=\"row.disabledAll ?? false\" /> -->\r\n                </td>\r\n                }\r\n\r\n                @case ('input-number') {\r\n                <td class=\"b-table\" [title]=\"row[column.fieldname]\" [ngClass]=\"row.situac == 'J' ? 'text-error':''\">\r\n                    <input type=\"text\" class=\"form-control text-end\"\r\n                        [ngClass]=\"(!column.valida ? '' : (row[column.fieldname] ?? 0) <= 0 ? 'input-error' : '')\"\r\n                        [(ngModel)]=\"row[column.fieldname]\" (blur)=\"validarFunction(column.blur)?.(row)\"\r\n                        [disabled]=\"row.disabledAll ?? false\" onlyNumber>\r\n                </td>\r\n                }\r\n\r\n                @case ('input-decimal') {\r\n                <td class=\"b-table\" [title]=\"row[column.fieldname]\" [ngClass]=\"row.situac == 'J' ? 'text-error':''\">\r\n                    <input type=\"text\" class=\"form-control text-end w-100\"\r\n                        [ngClass]=\"(!column.valida ? '' : (row[column.fieldname] ?? 0) <= 0 ? 'input-error' : '')\"\r\n                        [(ngModel)]=\"row[column.fieldname]\" (blur)=\"validarFunction(column.blur)?.(row)\"\r\n                        [appDecimal]=\"column.pipe\" [readonly]=\"column.readonly ? column.readonly(row) : false\"\r\n                        [disabled]=\"row.disabledAll ?? generateKeyDisabled(row,column)\" onlyNumber>\r\n                </td>\r\n                }\r\n\r\n                @case ('input-select') {\r\n                <td class=\"b-table\" [title]=\"row[column.fieldname]\" [ngClass]=\"row.situac == 'J' ? 'text-error':''\">\r\n                    <select class=\"form-select\" name=\"{{`cbo_lista_${row[column.fieldname]}`}}\"\r\n                        id=\"{{`cbo_lista_${row[column.fieldname]}`}}\" [(ngModel)]=\"row[column.fieldname]\"\r\n                        (change)=\"validarFunction(column.change)?.(row)\"\r\n                        [disabled]=\"column.disabled ? (typeof column.disabled === 'function' ? column.disabled(row) : column.disabled) : false\">\r\n                        @for (item of column.lista; track $index) {\r\n                        <option [value]=\"item[column.keyCodigo]\"> {{ item[column.keyDescri]}} </option>\r\n                        }\r\n                    </select>\r\n                </td>\r\n                }\r\n\r\n                @case ('stock') {\r\n                <td class=\"b-table text-center\" [title]=\"row[column.fieldname] ? row[column.fieldname] : 'Sin Stock'\">\r\n                    @if (limpiarNumero(row[column.fieldname]) > 0) {\r\n                    {{row[column.fieldname]}}\r\n                    }@else {\r\n                    <i class=\"fas fa-times text-danger fw-bold fs-4\"></i>\r\n                    }\r\n                </td>\r\n                }\r\n\r\n                @default {\r\n                <td class=\"b-table\" [title]=\"row[column.fieldname]\" [ngClass]=\"row.situac == 'J' ? 'text-error':''\">\r\n                    <span [ngClass]=\"isLast ? 'cursor-pointer' : ''\"\r\n                        (click)=\"isLast ? column?.clic() : null\">{{row[column.fieldname]}}</span>\r\n                </td>\r\n                }\r\n                }\r\n                }\r\n                }\r\n            </tr>\r\n            }\r\n        </tbody>\r\n    </table>\r\n</div>","import { CommonModule, DatePipe, DecimalPipe } from '@angular/common';\r\nimport { Component, computed, ContentChild, inject, input, linkedSignal, model, output, TemplateRef } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { CellRender, CellRendered } from '../../../models/cell-rendered';\r\n\r\n@Component({\r\n  selector: 'app-table-simple',\r\n  imports: [FormsModule, CommonModule],\r\n  templateUrl: './table-simple.component.html',\r\n  styleUrl: './table-simple.component.scss',\r\n  providers:[DatePipe,DecimalPipe]\r\n})\r\nexport class TableSimpleComponent {\r\n\r\n  private datePipe = inject(DatePipe)\r\n  private decimalPipe = inject(DecimalPipe)\r\n\r\n  withFiltro = input<boolean>(false)\r\n  busqueda = model<string>('')\r\n  rows = input<any[]>([])\r\n  columns = input<any[]>([]);\r\n  altoContainer = input<number>()\r\n  selectedRow = model<any>(null)\r\n  identifier = input<string[]>([])\r\n  position = input<'flex'|'block'>('flex')\r\n  withSelect = input<boolean>(false)\r\n  selected = output<any>()\r\n\r\n  rendered = input<CellRendered[]>([])\r\n\r\n  isDarkMode = input<boolean>(false)\r\n\r\n  @ContentChild('customActions', { static: false }) customActions!: TemplateRef<any>\r\n\r\n  checkString = {\r\n    'S': 'Activo',\r\n    'N': 'Inactivo'\r\n  }\r\n\r\n  rowFilter = computed(() => {\r\n    const term = this.busqueda().toLowerCase()\r\n    const currentRows = this.rows?.() || []\r\n    return currentRows.filter(item => this.filtraItem(item, term))\r\n  })\r\n\r\n  filtrarColumnas = linkedSignal(() => {\r\n    const columns = this.columns()\r\n    const filtro: { [caption: string]: boolean } = {}\r\n    columns.forEach((col) => {\r\n      if (col.fieldname) {\r\n        filtro[col.fieldname] = true\r\n      }\r\n    })\r\n    return filtro\r\n  })\r\n\r\n  concatenarValue(obj: any, value: string[]) {\r\n    let result = ''\r\n    value.forEach(el => {\r\n      result += obj[el]\r\n    })\r\n    return result\r\n  }\r\n\r\n  selectRow(index: any) {\r\n    if (this.identifier().length < 1) {\r\n      return this.selectedRow.set(index)\r\n    }\r\n    this.selectedRow.set(this.concatenarValue(index, this.identifier()))\r\n  }\r\n\r\n  checkItem (row:any) {\r\n    if(this.withSelect()){\r\n      this.selected.emit(row)\r\n    }\r\n  }\r\n\r\n  getHighlight(text: any): string {\r\n    if (text == null) {\r\n      text = ''\r\n    }\r\n    if (!this.busqueda()) return text\r\n    if (typeof text !== 'string') {\r\n      text = text.toString()\r\n    }\r\n    const regex = new RegExp(`(${this.busqueda()})`, 'gi')\r\n    return text?.replace(regex, '<mark>$1</mark>')\r\n  }\r\n\r\n  generateValueContainer = () => {\r\n    if(this.position() == 'flex' && this.altoContainer()){\r\n      return 'calc(100vh - ' + this.altoContainer() + 'px)'\r\n    }\r\n    if(this.position() == 'block' && this.altoContainer()){\r\n      return this.altoContainer() + 'px'\r\n    }\r\n    return ''\r\n  }\r\n\r\n  getTipoCampo(fieldname: string): string {\r\n    const columna = this.columns().find(col => col.fieldname == fieldname)\r\n    return columna?.tipo ?? 'string'\r\n  }\r\n\r\n  private filtraItem(item: any, term: string): boolean {\r\n    const columnasActivas = Object.entries(this.filtrarColumnas())\r\n      .filter(([_campo, activo]) => activo)\r\n\r\n    return columnasActivas.some(([campo]) => {\r\n      let valor = item[campo]\r\n      const tipo = this.getTipoCampo(campo)\r\n\r\n      switch (tipo) {\r\n        case 'fecha':\r\n          valor = this.datePipe.transform(valor, 'dd/MM/yyyy') ?? ''\r\n          break\r\n        case 'decimal':\r\n          valor = this.decimalPipe.transform(valor, '1.2-2') ?? ''\r\n          break\r\n        case 'check':\r\n          valor = valor ? 'Sí' : 'No'\r\n          break\r\n        default:\r\n          valor = (valor ?? '').toString()\r\n      }\r\n\r\n      return valor.toLowerCase().includes(term)\r\n    })\r\n  }\r\n\r\n  textoDigitado(event: Event) {\r\n    const value = (event.target as HTMLInputElement).value\r\n    this.busqueda.set(value)\r\n  }\r\n  \r\n  resolveCell(col:string, row:any): CellRender | null {\r\n      const value = row[col];\r\n      const r = this.rendered().find(r => r.matches(col, value, row));\r\n      return r ? r.render(value, row) : null;\r\n    }\r\n}\r\n","@if (withFiltro()) {\r\n<div class=\"col-12 mb-2 mt-2 d-flex justify-content-end align-items-center\">\r\n    <label for=\"\" class=\"form-label me-2 pt-2\">Buscar:</label>\r\n    <input type=\"text\" class=\"form-control cw-250\" (input)=\"textoDigitado($event)\">\r\n</div>\r\n}\r\n<div class=\"table-container table-responsive\" [style.max-height]=\"generateValueContainer()\"\r\n    [style.height]=\"generateValueContainer()\">\r\n    <table #table class=\"table table-striped normal-table\" [ngClass]=\"isDarkMode() ? 'table-dark' : ''\">\r\n        <thead>\r\n            <tr class=\"shadow-sm\">                \r\n                @if (customActions) {\r\n                <th scope=\"col\" class=\"width-50 mwp-50 b-table h-table\"></th>\r\n                }\r\n\r\n                @for (column of columns(); track $index) {\r\n                    @if (column.tipo !== 'mostrar' || column.condition()) {\r\n                    <th class=\"b-table h-table\" scope=\"col\" #thElement [title]=\"column.caption\" [style.width]=\"column.width + 'px'\"\r\n                        [style.min-width]=\"column.width + 'px'\">\r\n                        {{ column.caption }}\r\n                    </th>\r\n                    }\r\n                }\r\n            </tr>\r\n        </thead>\r\n\r\n        <tbody>\r\n            @for (row of rowFilter(); track $index) {\r\n            <tr [ngClass]=\"{'table-active': (identifier().length < 1 ? selectedRow() == $index : selectedRow() == concatenarValue(row,identifier()))}\"\r\n                (click)=\"selectRow(identifier().length < 1 ? $index : row); checkItem(row)\"\r\n                [id]=\"identifier().length < 1 ? ('row_table_' + $index) : ('row_table_'+ concatenarValue(row,identifier()))\">\r\n\r\n\r\n                @if (customActions) {\r\n                <td class=\"text-center mwp-90 b-table\">\r\n                    <ng-container *ngTemplateOutlet=\"customActions; context: { $implicit: row }\"></ng-container>\r\n                </td>\r\n                }\r\n                \r\n                @for (column of columns(); track $index) {\r\n                    @if (column.template) {\r\n                    <td class=\"b-table\">\r\n                        <ng-container *ngTemplateOutlet=\"column.template; context: { $implicit: row, column: column }\">\r\n                        </ng-container>\r\n                    </td>\r\n\r\n                    }\r\n                    @else {\r\n\r\n                        @switch (column.tipo) {\r\n                            @case ('fecha') {\r\n                            <td class=\"b-table\" [innerHTML]=\"getHighlight(row[column.fieldname] | date:'dd/MM/yyyy')\"\r\n                                [title]=\"row[column.fieldname] | date:'dd/MM/yyyy'\" [ngClass]=\"row.situac == 'J' ? 'text-error':''\">\r\n                            </td>\r\n\r\n                            }\r\n\r\n                            @case ('situacion') {\r\n                            <td class=\"b-table\" [innerHTML]=\"getHighlight(row[column.fieldname])\" [title]=\"row[column.fieldname]\"\r\n                                [ngClass]=\"row.situac == 'J' ? 'text-error':''\">\r\n\r\n                            </td>\r\n\r\n                            }\r\n\r\n                            @case ('decimal') {\r\n                            <td class=\"text-end b-table\" [innerHTML]=\"getHighlight((row[column.fieldname] ?? 0) | number:'1.2-2')\"\r\n                                [title]=\"(row[column.fieldname] ?? 0) | number:'1.2-2'\"\r\n                                [ngClass]=\"row.situac == 'J' ? 'text-error':''\">\r\n                            </td>\r\n                            }\r\n\r\n                            @case ('text-center') {\r\n                            <td class=\"text-center b-table\" [innerHTML]=\"getHighlight(row[column.fieldname])\"\r\n                                [title]=\"row[column.fieldname]\" [ngClass]=\"row.situac == 'J' ? 'text-error':''\">\r\n                            </td>\r\n                            }\r\n\r\n                            @case ('check') {\r\n                            <td class=\"text-center b-table\" [title]=\"checkString[row[column.fieldname]]\">\r\n                                <i class=\"fs-5\"\r\n                                    [ngClass]=\"row[column.fieldname] == 'S'?'fas fa-check yes-icon':'fas fa-times no-icon'\"></i>\r\n                            </td>\r\n                            }\r\n\r\n                            @case ('cell-render') {\r\n                                    @let resolverItem = resolveCell(column.fieldname, row);\r\n                                    @if (resolverItem) {\r\n                                        <td class=\"b-table\" [title]=\"resolverItem.text\" [class.text-center]=\"resolverItem.icon\">\r\n                                        @if (resolverItem.icon) {\r\n                                            <i class=\"fs-5\" [ngClass]=\"resolverItem.icon\"></i>\r\n                                        } @else if (resolverItem.class) {\r\n                                            <span [ngClass]=\"resolverItem.class\">{{ resolverItem.text }}</span>\r\n                                        } @else {\r\n                                            {{ resolverItem.text }}\r\n                                        }\r\n                                        </td>\r\n                                    }\r\n                                }\r\n\r\n                            @default {\r\n                            <td class=\"b-table\" [innerHTML]=\"getHighlight(row[column.fieldname])\" [title]=\"row[column.fieldname]\"\r\n                                [ngClass]=\"row.situac == 'J' ? 'text-error':''\">\r\n\r\n                            </td>\r\n\r\n                            }\r\n                        }\r\n\r\n                    }\r\n                }\r\n            </tr>\r\n            }\r\n        </tbody>\r\n    </table>\r\n</div>","import { Directive, inject, input, TemplateRef } from '@angular/core';\n\n@Directive({\n  selector: '[tsiColumn]',\n  standalone: true\n})\nexport class TsiColumnDefDirective {\n  fieldname = input.required<string>({ alias: 'tsiColumn' });\n  template = inject(TemplateRef<any>);\n}\n","import { DatePipe, DecimalPipe } from '@angular/common';\r\nimport { inject, Injectable } from '@angular/core';\r\nimport { TableData } from '../models/table-data.model';\r\n\r\n@Injectable({\r\n  providedIn: 'root'\r\n})\r\nexport class FormateadorService {\r\n\r\n  private decimalPipe = inject(DecimalPipe)\r\n  private datePipe = inject(DatePipe)\r\n\r\n  private camposAuditoria = ['fcreac', 'factua'];\r\n\r\n  procesarLista(data: any[], columns: TableData[]) {\r\n    return data.map((item, index) => {\r\n\r\n      const nuevoItem = { ...item };\r\n      if (!('idListTsi' in nuevoItem)) {\r\n        nuevoItem.idListTsi = crypto.randomUUID?.() ?? index;\r\n      }\r\n\r\n      const formatted: any = {};\r\n\r\n      this.camposAuditoria.forEach(campo => {\r\n        if (campo in item) {\r\n          formatted[campo] = item[campo] ? this.datePipe.transform(item[campo], 'dd/MM/yyyy') : '';\r\n        }\r\n      });\r\n\r\n      columns.forEach(col => {\r\n        const field = col.fieldname;\r\n        if (item.hasOwnProperty(field)) {\r\n          if (col.tipo === 'decimal' || col.tipo === 'number') {\r\n            const valor = item[field] ?? 0;\r\n            formatted[field] = this.decimalPipe.transform(valor, `1.${col.decimales ?? 2}-${col.decimales ?? 2}`);\r\n          }\r\n\r\n          else if (col.tipo === 'fecha' || col.tipo === 'date') {\r\n            const valor = item[field];\r\n            formatted[field] = valor ? this.datePipe.transform(valor, 'dd/MM/yyyy') : '';\r\n          }\r\n        }\r\n      });\r\n\r\n      return {...nuevoItem, _format: formatted}\r\n    })\r\n  }\r\n}\r\n","export enum TABLE_EVENTS {\r\n  CLICK = 1,\r\n  DOUBLE_CLICK = 2,\r\n  RIGHT_CLICK = 3,\r\n  CHECK_ALL = 4,\r\n  CHECK_ROW = 5,\r\n  DRAG_DROP = 6,\r\n  SAVE_COLUMN_CONFIG = 7\r\n}","import { CommonModule, NgTemplateOutlet } from '@angular/common';\r\nimport {\r\n  Component,\r\n  ElementRef,\r\n  input,\r\n  model,\r\n  signal,\r\n  computed,\r\n  effect,\r\n  untracked,\r\n  inject,\r\n  OnDestroy,\r\n  contentChild,\r\n  contentChildren,\r\n  TemplateRef,\r\n  output,\r\n  HostListener,\r\n  viewChild,\r\n} from '@angular/core';\r\nimport { TsiColumnDefDirective } from '../../../directivas/tables/tsi-column-def.directive';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { CdkDropList, CdkDrag, CdkDragHandle, CdkDragDrop, moveItemInArray } from '@angular/cdk/drag-drop';\r\nimport { DropdownCdkComponent } from \"../../dropdown/dropdown-cdk/dropdown-cdk.component\";\r\nimport { dropdownAnimation, fadeInOut } from '../../../directivas/animaciones/fade-animation';\r\nimport { FormateadorService } from '../../../service/formateador.service';\r\nimport { TABLE_EVENTS } from '../../../enums/table-events';\r\nimport { SelectedRow } from '../../../models/selected-row';\r\nimport { AnimatedCheckboxDirective } from '../../../directivas/estilos/animated-checkbox.directive';\r\nimport { formatDecimal, validarBoolean } from 'shared-tsi';\r\nimport { CellRender, CellRendered } from '../../../models/cell-rendered';\r\nimport { TableData } from '../../../models/table-data.model';\r\nimport { CardMobileComponent } from \"../card-mobile/card-mobile.component\";\r\n\r\n/**\r\n * Tabla con virtual scroll nativo (sin librerías externas).\r\n * Solo renderiza las filas visibles + un buffer. Header y footer son sticky.\r\n *\r\n * @Input columns       - Array de columnas con la misma forma que table-simple\r\n * @Input rows          - Array completo de datos\r\n * @Input rowHeight     - Alto fijo de cada fila en px. Si es 0 (default) se resuelve por variante: 42 modern, 30 standard\r\n * @Input buffer        - Filas extra renderizadas fuera del viewport (default: 10)\r\n * @Input altoContainer - Alto fijo del contenedor en px (default: 400). Se ignora si se usa altoContenedor.\r\n * @Input altoContenedor - Offset desde el top del viewport en px. Activa height: clamp(minAlto, calc(100vh - offset), 100vh).\r\n * @Input minAlto       - Altura mínima en px cuando se usa altoContenedor (default: 200)\r\n * @Input footerRows    - Filas del footer (totales, resumen, etc.)\r\n * @Input identifier    - Campos que forman la clave para selectedRow\r\n * @Input withFiltro    - Muestra input de búsqueda local\r\n * @Input withDetails   - Muestra detalles expandibles por fila\r\n * @Input withCheckbox  - Muestra checkbox para selección de filas\r\n * @Input withTotal     - Muestra fila de totales en el footer\r\n */\r\n\r\n/** Configuración de orden/visibilidad de una columna, tal como se emite y se puede recibir de vuelta */\r\nexport interface ColumnConfigItem {\r\n  fieldname: string;\r\n  visible: boolean;\r\n  order: number;\r\n}\r\n\r\n@Component({\r\n  selector: 'app-table-ultimate',\r\n  imports: [FormsModule, CommonModule, DropdownCdkComponent, AnimatedCheckboxDirective, CardMobileComponent, NgTemplateOutlet, CdkDropList, CdkDrag, CdkDragHandle],\r\n  templateUrl: './table-ultimate.component.html',\r\n  styleUrl: './table-ultimate.component.scss',\r\n  animations: [fadeInOut, dropdownAnimation],\r\n  host: {\r\n    '[class.ll-variant--modern]': 'variante() === \"modern\"'\r\n  }\r\n})\r\nexport class TableUltimateComponent implements OnDestroy {\r\n\r\n  // @ViewChild('scrollContainer') scrollContainer!: ElementRef<HTMLDivElement>;\r\n  scrollContainer = viewChild<ElementRef<HTMLDivElement>>('scrollContainer')\r\n  customActions = contentChild<TemplateRef<any>>('customActions')\r\n  columnDefs = contentChildren(TsiColumnDefDirective)\r\n  columnDefMap = computed(() => new Map(this.columnDefs().map(d => [d.fieldname(), d.template])))\r\n\r\n  private formateador = inject(FormateadorService)\r\n\r\n  // ── Inputs ──────────────────────────────────────────────────────────────────\r\n  rows = input<any[]>([]);\r\n  columns = input<any[]>([]);\r\n  footerRows = input<any[]>([]);\r\n  rowHeight = input<number>(0);\r\n  buffer = input<number>(10);\r\n  altoContainer = input<number>(0);\r\n  altoContenedor = input<number>(400);\r\n  minAlto = input<number>(200);\r\n  identifier = input<string[]>([]);\r\n  withFiltro = input<boolean>(false);\r\n  withDetails = input<boolean>(false)\r\n  withCheckbox = input<boolean>(false)\r\n  withTotal = input<boolean>(false)\r\n  withHeight = input<boolean>(false)\r\n  withAttachment = input<boolean>(false);\r\n  variante = input<'standard' | 'modern'>('standard');\r\n\r\n  rendered = input<CellRendered[]>([])\r\n\r\n  dragOverRowId = signal<any>(null); // dropzone para adjuntos\r\n  \r\n  titleTabla = input<string>('Contrato')\r\n  activeMobileMode = input<boolean>(true)\r\n  isLoadingResponsive = signal(false)\r\n  isMobile = signal<boolean>(window.innerWidth <= 768)\r\n\r\n  contentFilter = contentChild<TemplateRef<any>>('header') // inyect content in filter\r\n  // ── Output ──────────────────────────────────────────────────────────────────\r\n  rowEvent = output<any>()\r\n\r\n  // ── ROW ACTIONS ──────────────────────────────────────────────────────────────────\r\n  selectedRow = model<any>(null);\r\n  rowClassFn = input<(row: any) => string | string[] | Record<string, boolean>>(null);\r\n  rowDisabledFn = input<((row: any) => boolean) | null>(null);\r\n\r\n  selectItems = model<SelectedRow<any>[]>([])\r\n\r\n  rowFormat = computed(() => this.formateador.procesarLista(this.rows(), this.columns()))\r\n  // ── Estado interno ───────────────────────────────────────────────────────────\r\n  busqueda = model<string>('');\r\n  scrollTop = signal<number>(0);\r\n  containerHeight = signal<number>(0); // altura real medida del DOM\r\n\r\n  // ── Sort ─────────────────────────────────────────────────────────────────────\r\n  sortField = signal<string | null>(null);\r\n  sortDir = signal<'asc' | 'desc' | 'none'>('none');\r\n\r\n  //-- EXPANDED ROWS\r\n  expandedRows = signal<string | null>(null)\r\n\r\n  classTotales = input<string>('')\r\n\r\n  // ── CSS height del contenedor ─────────────────────────────────────────────────\r\n\r\n  /** Valor aplicado como [style.height] en el template */\r\n  heightStyle = computed(() => {\r\n    if (this.altoContainer() > 0) {\r\n      return `clamp(${this.minAlto()}px, calc(100vh - ${this.altoContainer()}px), 100vh)`;\r\n    }\r\n    return `${this.altoContenedor()}px`;\r\n  });\r\n\r\n  // ── Filtrado + Ordenamiento ───────────────────────────────────────────────────\r\n  rowFilter = computed(() => {\r\n    const term = this.busqueda().toLowerCase().trim();\r\n    const filtered = term\r\n      ? this.rowFormat().filter(item => this.filtraItem(item, term))\r\n      : this.rowFormat();\r\n\r\n    const field = this.sortField();\r\n    const dir = this.sortDir();\r\n    if (!field || dir === 'none') return filtered;\r\n\r\n    return [...filtered].sort((a, b) => {\r\n      const valueA = a[field] ?? '';\r\n      const valueB = b[field] ?? '';\r\n      if (typeof valueA === 'number' && typeof valueB === 'number') {\r\n        return dir === 'asc' ? valueA - valueB : valueB - valueA;\r\n      }\r\n\r\n      const numA = Number(valueA);\r\n      const numB = Number(valueB);\r\n\r\n      if (!isNaN(numA) && !isNaN(numB)) {\r\n        return dir === 'asc' ? numA - numB : numB - numA;\r\n      }\r\n\r\n      const va = String(valueA).toLowerCase();\r\n      const vb = String(valueB).toLowerCase();\r\n      const cmp = va.localeCompare(vb, undefined, { numeric: true });\r\n      return dir === 'asc' ? cmp : -cmp;\r\n    });\r\n  });\r\n\r\n  // ── Virtual scroll ────────────────────────────────────────────────────────────\r\n  // Alto efectivo de fila: si no se pasa rowHeight (0), se resuelve por variante.\r\n  // DEBE coincidir con el height del td en el SCSS (42px modern / 30px standard) o el scroll se desalinea.\r\n  rowH = computed(() => this.rowHeight() || (this.variante() === 'modern' ? 40 : 30));\r\n\r\n  totalHeight = computed(() => this.rowFilter().length * this.rowH());\r\n\r\n  startIndex = computed(() => {\r\n    const idx = Math.floor(this.scrollTop() / this.rowH()) - this.buffer();\r\n    return Math.max(0, idx);\r\n  });\r\n\r\n  endIndex = computed(() => {\r\n    const visible = Math.ceil(this.containerHeight() / this.rowH());\r\n    const idx = this.startIndex() + visible + this.buffer() * 2;\r\n    return Math.min(this.rowFilter().length - 1, idx);\r\n  });\r\n\r\n  visibleRows = computed(() =>\r\n    this.rowFilter().slice(this.startIndex(), this.endIndex() + 1)\r\n  );\r\n\r\n  /** Espacio en blanco antes de las filas renderizadas */\r\n  paddingTop = computed(() => this.startIndex() * this.rowH());\r\n\r\n  /** Espacio en blanco después de las filas renderizadas */\r\n  paddingBottom = computed(() => {\r\n    const remaining = this.rowFilter().length - this.endIndex() - 1;\r\n    return Math.max(0, remaining * this.rowH());\r\n  });\r\n\r\n  // ── Scroll hacia fila seleccionada al cargar datos ───────────────────────────\r\n  private scrollEffect = effect(() => {\r\n    const rows = this.rowFilter();\r\n    const selected = untracked(() => this.selectedRow());\r\n    if (rows.length > 0 && selected != null) {\r\n      queueMicrotask(() => this.scrollToSelected(selected));\r\n    }\r\n  });\r\n\r\n  // ── ResizeObserver ────────────────────────────────────────────────────────────\r\n  private resizeObserver?: ResizeObserver;\r\n\r\n  private resizeEffect = effect(() => {\r\n    if (!this.scrollContainer()) return\r\n    const el = this.scrollContainer().nativeElement;\r\n    this.containerHeight.set(el.clientHeight);\r\n    if (typeof ResizeObserver !== 'undefined') {\r\n      this.resizeObserver = new ResizeObserver(() => {\r\n        this.containerHeight.set(el.clientHeight);\r\n        this.scrollTop.set(el.scrollTop);\r\n      });\r\n      this.resizeObserver.observe(el);\r\n    }\r\n  })\r\n\r\n  // ngAfterViewInit() {\r\n  //   const el = this.scrollContainer?.nativeElement;\r\n  //   if (!el) return;\r\n\r\n  //   this.containerHeight.set(el.clientHeight);\r\n  //   if (typeof ResizeObserver !== 'undefined') {\r\n  //     this.resizeObserver = new ResizeObserver(() => {\r\n  //       this.containerHeight.set(el.clientHeight);\r\n  //       this.scrollTop.set(el.scrollTop);\r\n  //     });\r\n  //     this.resizeObserver.observe(el);\r\n  //   }\r\n  // }\r\n\r\n  ngOnDestroy() {\r\n    this.resizeObserver?.disconnect();\r\n  }\r\n\r\n  // ── Manejadores ──────────────────────────────────────────────────────────────\r\n  onScroll(event: Event) {\r\n    this.scrollTop.set((event.target as HTMLDivElement).scrollTop);\r\n  }\r\n\r\n  selectRow(row: any, idList: string) {\r\n    this.rowEvent.emit({ usecase: TABLE_EVENTS.CLICK, data: row })\r\n    if (this.identifier().length < 1) {\r\n      this.selectedRow.set(idList);\r\n    } else {\r\n      this.selectedRow.set(this.concatenarValue(row, this.identifier()));\r\n    }\r\n  }\r\n\r\n  isSelected(row: any, idList: string): boolean {\r\n    if (this.identifier().length < 1) {\r\n      return this.selectedRow() == idList;\r\n    }\r\n    return this.selectedRow() == this.concatenarValue(row, this.identifier());\r\n  }\r\n\r\n  textoDigitado() {\r\n    // const val = (event.target as HTMLInputElement).value;\r\n    // this.busqueda.set(val);\r\n    this.scrollTop.set(0);\r\n    if (this.scrollContainer()?.nativeElement) {\r\n      this.scrollContainer().nativeElement.scrollTop = 0;\r\n    }\r\n  }\r\n\r\n  toggleSort(field: string) {\r\n    if (this.sortField() !== field) {\r\n      this.sortField.set(field);\r\n      this.sortDir.set('asc');\r\n    } else {\r\n      if (this.sortDir() === 'asc') {\r\n        this.sortDir.set('desc');\r\n      } else if (this.sortDir() === 'desc') {\r\n        this.sortDir.set('none');\r\n        this.sortField.set(null);\r\n      } else {\r\n        this.sortDir.set('asc');\r\n      }\r\n    }\r\n  }\r\n\r\n  // ── Helpers ──────────────────────────────────────────────────────────────────\r\n  concatenarValue(obj: any, fields: string[]): string {\r\n    return fields.reduce((acc, f) => acc + (obj[f] ?? ''), '');\r\n  }\r\n\r\n  getHighlight(text: any, fieldname: string): string {\r\n    if (text == null) text = ''\r\n    if (!this.filtrarColumnas()[fieldname] || !this.busqueda()) return text\r\n    if (typeof text !== 'string') {\r\n      text = text.toString()\r\n    }\r\n    const regex = new RegExp(`(${this.busqueda()})`, 'gi')\r\n    return text?.replace(regex, '<mark>$1</mark>')\r\n  }\r\n\r\n  private filtraItem(item: any, term: string): boolean {\r\n\r\n    const columnasActivas = Object.entries(this.filtrarColumnas())\r\n      .filter(([_campo, activo]) => activo)\r\n    return columnasActivas.some(([campo]) => {\r\n      const raw = item[campo];\r\n      const formatted = item._format?.[campo];\r\n      const valor = (formatted ?? raw ?? '').toString().toLowerCase();\r\n      return valor.includes(term)\r\n    })\r\n  }\r\n\r\n  private scrollToSelected(selected: any) {\r\n    const rows = this.rowFilter();\r\n    const idx = this.identifier().length < 1\r\n      ? (typeof selected === 'number' ? selected : -1)\r\n      : rows.findIndex(r => this.concatenarValue(r, this.identifier()) === selected);\r\n\r\n    if (idx < 0 || !this.scrollContainer()?.nativeElement) return;\r\n\r\n    const targetTop = idx * this.rowH();\r\n    const container = this.scrollContainer().nativeElement;\r\n    const containerH = this.containerHeight();\r\n\r\n    if (targetTop < container.scrollTop || targetTop + this.rowH() > container.scrollTop + containerH) {\r\n      container.scrollTop = targetTop - containerH / 2;\r\n    }\r\n  }\r\n\r\n  /** Índice real en rowFilter de una fila visible (para isSelected) */\r\n  realIndex(visibleIdx: number): number {\r\n    return this.startIndex() + visibleIdx;\r\n  }\r\n\r\n  /** Mostrar columnas para realizar el filtro */\r\n  filtrarColumnas = computed(() => {\r\n    const columns = this.columns()\r\n    const filtro: { [caption: string]: boolean } = {}\r\n    columns.forEach((col) => {\r\n      if (col.fieldname) {\r\n        filtro[col.fieldname] = true\r\n      }\r\n    })\r\n    return filtro\r\n  })\r\n\r\n  toggleFiltros(event: Event) {\r\n    const checked = (event.target as HTMLInputElement).checked\r\n    const filtros = this.filtrarColumnas()\r\n    Object.keys(filtros).forEach(key => {\r\n      filtros[key] = checked\r\n    })\r\n  }\r\n\r\n  /** MOSTRAR/ORDENAR COLUMNAS DE LA TABLA (engranaje del header) */\r\n\r\n  /** orden y visibilidad elegidos por el usuario, por fieldname — sembrado siempre desde columns() */\r\n  private columnState = signal<Map<string, { visible: boolean; order: number }>>(new Map());\r\n\r\n  /** Reconstruye el estado cada vez que cambia columns() (columns() es la única fuente de verdad) */\r\n  private columnStateEffect = effect(() => {\r\n    const cols = this.columns();\r\n    untracked(() => this.columnState.set(this.buildColumnState(cols)));\r\n  });\r\n\r\n  private buildColumnState(cols: TableData[]): Map<string, { visible: boolean; order: number }> {\r\n    const map = new Map<string, { visible: boolean; order: number }>();\r\n    cols.forEach((col, i) => {\r\n      map.set(col.fieldname, {\r\n        visible: this.validaVisibilidad(col.visible),\r\n        order: col.order ?? i\r\n      });\r\n    });\r\n    return map;\r\n  }\r\n\r\n  /** Columnas configurables (permitidas por diseño), en el orden elegido por el usuario.\r\n   *  El caption es solo presentación: sin caption la columna igual se configura y renderiza (identidad = fieldname). */\r\n  columnasConfigurables = computed(() => {\r\n    const state = this.columnState();\r\n    return this.columns()\r\n      .filter(col => this.validaVisibilidad(col.visible))\r\n      .slice()\r\n      .sort((a, b) => (state.get(a.fieldname)?.order ?? 0) - (state.get(b.fieldname)?.order ?? 0));\r\n  });\r\n\r\n  /** Columnas que realmente se pintan: configurables y marcadas como visibles */\r\n  columnasRenderizadas = computed(() => {\r\n    const state = this.columnState();\r\n    return this.columnasConfigurables().filter(col => state.get(col.fieldname)?.visible !== false);\r\n  });\r\n\r\n  isColumnVisible(fieldname: string): boolean {\r\n    return this.columnState().get(fieldname)?.visible !== false;\r\n  }\r\n\r\n  toggleColumnVisible(fieldname: string, event: Event) {\r\n    const checked = (event.target as HTMLInputElement).checked;\r\n    this.columnState.update(map => {\r\n      const next = new Map(map);\r\n      const prev = next.get(fieldname);\r\n      next.set(fieldname, { visible: checked, order: prev?.order ?? 0 });\r\n      return next;\r\n    });\r\n  }\r\n\r\n  onColumnDrop(event: CdkDragDrop<TableData[]>) {\r\n    const list = [...this.columnasConfigurables()];\r\n    moveItemInArray(list, event.previousIndex, event.currentIndex);\r\n    this.columnState.update(map => {\r\n      const next = new Map(map);\r\n      list.forEach((col, i) => {\r\n        const prev = next.get(col.fieldname);\r\n        next.set(col.fieldname, { visible: prev?.visible ?? true, order: i });\r\n      });\r\n      return next;\r\n    });\r\n  }\r\n\r\n  guardarConfiguracionColumnas() {\r\n    const state = this.columnState();\r\n    const config: ColumnConfigItem[] = this.columnasConfigurables().map(col => ({\r\n      fieldname: col.fieldname,\r\n      visible: state.get(col.fieldname)?.visible !== false,\r\n      order: state.get(col.fieldname)?.order ?? 0\r\n    }));\r\n    this.rowEvent.emit({ usecase: TABLE_EVENTS.SAVE_COLUMN_CONFIG, data: config });\r\n  }\r\n\r\n  /** Descarta los cambios sin guardar (drags/toggles) y vuelve al orden/visibilidad de columns() */\r\n  restablecerConfiguracionColumnas() {\r\n    this.columnState.set(this.buildColumnState(this.columns()));\r\n  }\r\n\r\n  validaVisibilidad(value: boolean) {\r\n    return validarBoolean(value)\r\n  }\r\n\r\n  /** CELL RENDER */\r\n\r\n  resolveCell(col: string, row: any): CellRender | null {\r\n    const value = row[col]\r\n    const r = this.rendered().find(r => r.matches(col, value, row))\r\n    return r ? r.render(value, row) : null\r\n  }\r\n\r\n  getRowClass(row: any): { [key: string]: boolean } {\r\n    return {\r\n      'text-error': row.situac == 'J',\r\n      'text-alerta': row.situac == 'L'\r\n    }\r\n  }\r\n\r\n  getPosition(col: TableData): string {\r\n    if (col.position) return `text-${col.position}`\r\n    if (['decimal', 'number'].includes(col.tipo)) return `text-end`\r\n    if (['fecha', 'date'].includes(col.tipo)) return `text-center`\r\n    return 'text-start'\r\n  }\r\n\r\n  //** WITH DETAILS - EXPANDED ROW */\r\n\r\n  toggleExpandRow(idRow: string) {\r\n    const value = this.expandedRows() == idRow ? null : idRow\r\n    this.expandedRows.set(value)\r\n  }\r\n\r\n  //** WITH TOTAL - FOOTER DE TOTALES */\r\n\r\n  getTotals(fieldname: string): string {\r\n    const itemsSelected = this.withCheckbox() ? this.selectItems().map(item => item.data) : this.rowFormat()\r\n    const final = itemsSelected.reduce((acc, row) => {\r\n      const val = row[fieldname]\r\n      return acc + (typeof val == 'number' ? val : 0)\r\n    }, 0)\r\n\r\n    return formatDecimal(final)\r\n  }\r\n\r\n  getColspanBeforeTotals(): number {\r\n    const columns = this.columnasRenderizadas()\r\n    const firstTotalizableIndex = columns.findIndex(c => c.totalizable)\r\n    const result = firstTotalizableIndex >= 0 ? firstTotalizableIndex : columns.length\r\n    const addColumns = (this.withDetails() ? 1 : 0) + (this.withCheckbox() ? 1 : 0) + (this.customActions() ? 1 : 0)\r\n    return result + addColumns\r\n  }\r\n\r\n\r\n  //** WITHCHECKBOX LOGICA */\r\n  allCheck(event: Event) {\r\n    const input = event.target as HTMLInputElement\r\n    const checked = input.checked\r\n    this.rowEvent.emit({ usecase: TABLE_EVENTS.CHECK_ALL, data: checked })\r\n    this.checkAll(checked)\r\n  }\r\n\r\n  isCheckboxDisabled(row: any): boolean {\r\n    return this.rowDisabledFn?.()?.(row) ?? false\r\n  }\r\n\r\n  checkAll(checked: boolean) {\r\n    if (checked) {\r\n      const total = this.rowFilter()\r\n        .filter(r => !this.isCheckboxDisabled(r))\r\n        .map(r => ({ id: r.idListTsi, data: r }))\r\n      this.selectItems.set(total)\r\n    } else {\r\n      this.selectItems.set([])\r\n    }\r\n  }\r\n\r\n  validaAllCheck(): boolean {\r\n    const selectable = this.rowFilter().filter(r => !this.isCheckboxDisabled(r))\r\n    const selectedIds = new Set(this.selectItems().map(s => s.id));\r\n    return selectable.length > 0 && selectable.every(row => selectedIds.has(row.idListTsi));\r\n  }\r\n\r\n  isItemSelected(id: string): boolean {\r\n    return this.selectItems().some(item => item.id == id)\r\n  }\r\n\r\n  toogleItem(idList: string, event: Event) {\r\n    const row = this.rowFormat().find(r => r.idListTsi == idList)\r\n    if (!row || this.isCheckboxDisabled(row)) {\r\n      return\r\n    }\r\n    const input = event.target as HTMLInputElement\r\n    const checked = input.checked\r\n    this.rowEvent.emit({ usecase: TABLE_EVENTS.CHECK_ROW, data: { row, checked } })\r\n    if (checked) {\r\n      const item: SelectedRow<any> = { id: idList, data: row };\r\n      this.selectItems.update(sel => [...sel, item])\r\n      return\r\n    }\r\n    this.selectItems.update(sel => sel.filter(s => s.id != idList))\r\n  }\r\n\r\n  /* EVENTOS DE LA FILA */\r\n  onDoubleClick(row: any) {\r\n    if (window.getSelection()?.type === 'Range') return;\r\n    this.rowEvent.emit({ usecase: TABLE_EVENTS.DOUBLE_CLICK, data: row })\r\n  }\r\n  onRightClick(event: MouseEvent, row: any) {\r\n    event.preventDefault();\r\n    this.rowEvent.emit({ usecase: TABLE_EVENTS.RIGHT_CLICK, data: row })\r\n  }\r\n\r\n  /* MOBILE MODE */\r\n  @HostListener('window:resize', ['$event'])\r\n  onResize(event: any) {\r\n    if (!this.activeMobileMode()) return\r\n    this.isMobile.set(event.target.innerWidth <= 768);\r\n  }\r\n  private mobileEffect = effect(() => {\r\n    if (!this.activeMobileMode()) return\r\n    this.isMobile();\r\n    this.isLoadingResponsive.set(true);\r\n    setTimeout(() => this.isLoadingResponsive.set(false), 200);\r\n  });\r\n\r\n  // DRAG AND DROP ADJUNTOS\r\n  onDragOver(event: DragEvent, idList: any): void {\r\n    event.preventDefault();\r\n    event.stopPropagation();\r\n    this.dragOverRowId.set(idList);\r\n  }\r\n\r\n  onDragLeave(): void {\r\n    this.dragOverRowId.set(null);\r\n  }\r\n\r\n  onDrop(event: DragEvent, row: any): void {\r\n    event.preventDefault();\r\n    event.stopPropagation();\r\n    this.dragOverRowId.set(null);\r\n\r\n    const file = event.dataTransfer?.files?.[0];\r\n    if (file) {\r\n      this.rowEvent.emit({ usecase: TABLE_EVENTS.DRAG_DROP, data: { file, row } })\r\n    }\r\n  }\r\n\r\n  getRows = (): any[] => this.rowFormat().map(({ idListTsi, format, ...rest}) => rest)\r\n}\r\n","@if (withFiltro()) {\r\n<div class=\"ll-search-bar\">\r\n\r\n    <div class=\"ll-search-bar__left\">\r\n        <ng-container *ngTemplateOutlet=\"contentFilter();\"></ng-container>\r\n    </div>\r\n\r\n    <div class=\"ll-search-bar__right\">\r\n\r\n        <div class=\"ll-search-group\">\r\n\r\n            <label class=\"form-label mb-0 ll-search-label\">Buscar:</label>\r\n            <div class=\"ll-search-input-wrap\">\r\n\r\n                <input type=\"text\" class=\"form-control cw-250\" placeholder=\"Buscar...\" [(ngModel)]=\"busqueda\" (input)=\"textoDigitado()\" />\r\n                <app-dropdown-cdk [altoContainer]=\"300\">\r\n                    <ng-template #trigger>\r\n                        <button class=\"btn btn-dark boton-buscar fs-7\">\r\n                            <i class=\"fas fa-cog\"></i>\r\n                        </button>\r\n                    </ng-template>\r\n\r\n                    <ng-template #content>\r\n                        <div class=\"popover-menu-filter bg-white shadow my-2\" @fadeInOut>\r\n                            <div class=\"popover-title fs-7 bg-white\">\r\n                                Filtros\r\n                            </div>\r\n\r\n                            <div class=\"form-check form-switch text-start d-flex align-items-center\">\r\n                                <input class=\"form-check-input py-0 my-0 cw-25 ch-15\" type=\"checkbox\" [checked]=\"true\"\r\n                                    (change)=\"toggleFiltros($event)\" id=\"filter_table_lazy_todos\" />\r\n                                <label class=\"form-check-label ps-2 fs-6 mb-0 cursor-pointer\"\r\n                                    for=\"filter_table_lazy_todos\">\r\n                                    Todos\r\n                                </label>\r\n                            </div>\r\n\r\n                            @for (col of columns(); track col.fieldname) {\r\n                            <div class=\"form-check form-switch text-start d-flex align-items-center\">\r\n                                <input type=\"checkbox\" class=\"form-check-input py-0 my-0 cw-25 ch-15\"\r\n                                    id=\"{{ 'filter_' + col.fieldname }}\" [(ngModel)]=\"filtrarColumnas()[col.fieldname]\" />\r\n                                <label class=\"form-check-label ps-2 fs-6 cursor-pointer mb-0\"\r\n                                    for=\"{{ 'filter_' + col.fieldname }}\">\r\n                                    {{ col.caption || col.fieldname }}\r\n                                </label>\r\n                            </div>\r\n                            }\r\n                        </div>\r\n                    </ng-template>\r\n                </app-dropdown-cdk>\r\n\r\n            </div>\r\n\r\n        </div>\r\n\r\n\r\n    </div>\r\n\r\n\r\n</div>\r\n}\r\n\r\n@if (activeMobileMode()) {\r\n@if (isLoadingResponsive()) {\r\n<div class=\"d-flex flex-column justify-content-center align-items-center py-2\">\r\n    <div class=\"spinner-border text-secondary mb-2\" role=\"status\"></div>\r\n    <span class=\"ms-2 fs-6\">Cargando...</span>\r\n</div>\r\n}\r\n\r\n@if (!isLoadingResponsive()) {\r\n@if (isMobile()) {\r\n<app-card-mobile [data]=\"rowFilter()\" [columns]=\"columns()\" [actions]=\"customActions()\" [identifier]=\"identifier()\"\r\n    [titleTabla]=\"titleTabla()\" [altoContainer]=\"altoContainer()\" />\r\n}\r\n@if (!isMobile()) {\r\n<ng-container *ngTemplateOutlet=\"table\"></ng-container>\r\n}\r\n}\r\n}\r\n@else {\r\n<ng-container *ngTemplateOutlet=\"table\"></ng-container>\r\n}\r\n\r\n<ng-template #table>\r\n    <!-- Contenedor scrolleable — solo el BODY hace scroll; header y footer son sticky -->\r\n    <div #scrollContainer class=\"ll-scroll-container\"\r\n        [style.height]=\"withHeight() ? heightStyle() : ''\"\r\n        [style.max-height]=\"heightStyle()\" (scroll)=\"onScroll($event)\">\r\n        <table class=\"ll-table\">\r\n\r\n            <!-- ── HEADER sticky ─────────────────────────────────────────────────── -->\r\n            <thead class=\"ll-thead\">\r\n                <tr>\r\n                    @if (withDetails()) {\r\n                    <th class=\"cw-25\"></th>\r\n                    }\r\n\r\n                    @if (withCheckbox()) {\r\n                    <th class=\"cw-20\">\r\n                        <label>\r\n                            <input type=\"checkbox\" name=\"check_box_select_table_main\" id=\"check_box_select_table_main\"\r\n                                animatedCheckbox [checked]=\"validaAllCheck()\" (change)=\"allCheck($event)\">\r\n                        </label>\r\n                    </th>\r\n                    }\r\n\r\n                    @if (customActions()) {\r\n                    <th class=\"cw-40\">\r\n                        <app-dropdown-cdk [altoContainer]=\"500\">\r\n                            <ng-template #trigger>\r\n                                <button class=\"btn p-0 text-dark d-flex mx-auto border-0 icon-table\">\r\n                                    <i class=\"fas fa-cog\"></i>\r\n                                </button>\r\n                            </ng-template>\r\n                            <ng-template #content>\r\n                                <div class=\"popover-menu-column bg-white shadow my-2\" @fadeInOut>\r\n                                    <div class=\"popover-title fs-7 bg-white d-flex align-items-baseline justify-content-between\">\r\n                                        <span>Columnas</span>\r\n                                        <span class=\"column-config-hint\">arrastra para ordenar</span>\r\n                                    </div>\r\n\r\n                                    <div cdkDropList class=\"column-config-list\" (cdkDropListDropped)=\"onColumnDrop($event)\">\r\n                                        @for (col of columnasConfigurables(); track col.fieldname) {\r\n                                        <div class=\"column-config-row\" cdkDrag>\r\n                                            <i class=\"fas fa-grip-vertical column-config-grip\" cdkDragHandle></i>\r\n                                            <div class=\"form-check form-switch text-start d-flex align-items-center mb-0 flex-grow-1\">\r\n                                                <input type=\"checkbox\" class=\"form-check-input py-0 my-0 cw-25 ch-15\"\r\n                                                    id=\"{{ 'switch_' + col.fieldname }}\"\r\n                                                    [checked]=\"isColumnVisible(col.fieldname)\"\r\n                                                    (change)=\"toggleColumnVisible(col.fieldname, $event)\" />\r\n                                                <label class=\"form-check-label ps-2 fs-6 cursor-pointer font-label mb-0\"\r\n                                                    for=\"{{ 'switch_' + col.fieldname }}\">\r\n                                                    {{ col.caption || col.fieldname }}\r\n                                                </label>\r\n                                            </div>\r\n                                        </div>\r\n                                        }\r\n                                    </div>\r\n\r\n                                    <div class=\"column-config-footer\">\r\n                                        <!-- <button type=\"button\" class=\"btn btn-link btn-sm p-0 text-secondary fs-7\"\r\n                                            (click)=\"restablecerConfiguracionColumnas()\">\r\n                                            Restablecer\r\n                                        </button> -->\r\n                                        <button type=\"button\" class=\"btn btn-sm fs-7 column-config-save\"\r\n                                            (click)=\"guardarConfiguracionColumnas()\">\r\n                                            Guardar configuración\r\n                                        </button>\r\n                                    </div>\r\n                                </div>\r\n                            </ng-template>\r\n                        </app-dropdown-cdk>\r\n                    </th>\r\n                    }\r\n\r\n                    @for (col of columnasRenderizadas(); track col.fieldname) {\r\n                    <th [title]=\"col.caption\" [style.width.px]=\"col.width || null\"\r\n                        [style.min-width.px]=\"col.width || null\" [style.max-width.px]=\"col.width || null\"\r\n                        [class.ll-th-sortable]=\"col.caption\" (click)=\"col.caption && toggleSort(col.fieldname)\">\r\n                        <span class=\"ll-th-content {{getPosition(col)}} \">\r\n                            <span class=\"ll-th-caption\">{{ col.caption }}</span>\r\n                            @if (col.caption) {\r\n                            @if (sortField() === col.fieldname) {\r\n                            <i class=\"ms-1\"\r\n                                [ngClass]=\"sortDir() === 'asc' ? 'fas fa-angle-up fs-6':'fas fa-angle-down fs-6'\"></i>\r\n                            } @else {\r\n                            <i class=\"fas fa-sort ms-1 ll-sort-idle\"></i>\r\n                            }\r\n                            }\r\n                        </span>\r\n                    </th>\r\n                    }\r\n                </tr>\r\n            </thead>\r\n\r\n            <!-- ── BODY virtual ──────────────────────────────────────────────────── -->\r\n            <tbody>\r\n                <!-- Spacer superior: ocupa el espacio de las filas NO renderizadas arriba -->\r\n                @if (paddingTop() > 0) {\r\n                <tr class=\"ll-spacer\" [style.height.px]=\"paddingTop()\">\r\n                    <td [attr.colspan]=\"columnasRenderizadas().length\"></td>\r\n                </tr>\r\n                }\r\n\r\n                <!-- Filas visibles -->\r\n                @for (row of visibleRows(); track row.idListTsi) {\r\n                @let idList = row.idListTsi;\r\n                <tr class=\"ll-row\" [class.ll-row--selected]=\"isSelected(row, idList)\"\r\n                    [class.ll-row--drag-over]=\"withAttachment() && dragOverRowId() === idList\"\r\n                    (click)=\"selectRow(row, idList)\" (dblclick)=\"onDoubleClick(row)\"\r\n                    (contextmenu)=\"onRightClick($event,row)\"\r\n                    (dragover)=\"withAttachment() && onDragOver($event, idList)\"\r\n                    (dragleave)=\"withAttachment() && onDragLeave()\" (drop)=\"withAttachment() && onDrop($event, row)\">\r\n\r\n                    @if (withDetails()) {\r\n                    <td class=\"b-table text-center mwp-25\">\r\n                        <a (click)=\"toggleExpandRow(idList)\" class=\"text-dark cursor-pointer fs-6\">\r\n                            <i class=\"fa-solid\" [class.fa-chevron-right]=\"expandedRows() != idList\"\r\n                                [class.fa-chevron-down]=\"expandedRows() == idList\"></i>\r\n                        </a>\r\n                    </td>\r\n                    }\r\n\r\n                    @if (withCheckbox()) {\r\n                    <td scope=\"col\" class=\"text-center b-table\">\r\n                        <label>\r\n                            <input type=\"checkbox\" [name]=\"'check_box_select_table_' + idList\"\r\n                                [id]=\"'check_box_select_table_' + idList\" animatedCheckbox\r\n                                [checked]=\"isItemSelected(idList)\" (click)=\"$event.stopPropagation()\"\r\n                                (change)=\"toogleItem(idList , $event)\" [disabled]=\"isCheckboxDisabled(row)\">\r\n                        </label>\r\n                    </td>\r\n                    }\r\n\r\n                    @if (customActions()) {\r\n                    <td class=\"text-center\">\r\n                        <ng-container *ngTemplateOutlet=\"customActions(); context: { $implicit: row }\"></ng-container>\r\n                    </td>\r\n                    }\r\n\r\n                    @for (col of columnasRenderizadas(); track col.fieldname) {\r\n                    @if (columnDefMap().has(col.fieldname)) {\r\n                    <td>\r\n                        <ng-container *ngTemplateOutlet=\"columnDefMap().get(col.fieldname)!; context: { $implicit: row, column: col }\">\r\n                        </ng-container>\r\n                    </td>\r\n                    } @else if (col.template) {\r\n                    <td>\r\n                        <ng-container *ngTemplateOutlet=\"col.template; context: { $implicit: row, column: col }\">\r\n                        </ng-container>\r\n                    </td>\r\n                    } @else {\r\n                    @switch (col.tipo) {\r\n\r\n                    @case ('cell-render') {\r\n                    @let resolverItem = resolveCell(col.fieldname, row);\r\n                    @if (resolverItem) {\r\n                    <td [title]=\"resolverItem.text\" [class.text-center]=\"resolverItem.icon\">\r\n                        @if (resolverItem.icon) {\r\n                        <i class=\"fs-5\" [ngClass]=\"resolverItem.icon\"></i>\r\n                        } @else if (resolverItem.class) {\r\n                        <span [ngClass]=\"row.situac == 'J' ? 'text-error' : resolverItem.class\">\r\n                            {{ resolverItem.text }}\r\n                        </span>\r\n                        } @else {\r\n                        {{ resolverItem.text }}\r\n                        }\r\n                    </td>\r\n                    }\r\n                    }\r\n\r\n                    @default {\r\n                    <td [innerHTML]=\"getHighlight(row._format?.[col.fieldname] ?? row[col.fieldname], col.fieldname)\"\r\n                        [style.width]=\"col.width ? col.width + 'px' : 'auto'\"\r\n                        [style.max-width]=\"col.width ? col.width + 'px' : 'auto'\"\r\n                        [attr.title]=\"row[col.fieldname] || null\"\r\n                        [ngClass]=\"rowClassFn() ? rowClassFn()(row) : getRowClass(row)\" class=\"{{getPosition(col)}}\">\r\n                    </td>\r\n                    }\r\n\r\n                    }\r\n                    }\r\n                    }\r\n                </tr>\r\n\r\n                @if (idList == expandedRows()) {\r\n                <tr @fadeInOut>\r\n                    <td [attr.colspan]=\"columnasRenderizadas().length + (withDetails() ? 1 : 0) + (customActions() ? 1 : 0) + (withCheckbox() ? 1 : 0)\"\r\n                        class=\"table-blank\">\r\n                        <div class=\"d-flex flex-column auditoria\">\r\n                            <span class=\"fw-bold fs-7 text-dark\">Datos de auditoría</span>\r\n                            <span class=\"fs-6 text-dark fw-bold\">\r\n                                Creación: {{ row.nomucreac }} el {{ row._format?.fcreac ?? row.fcreac }} a las {{\r\n                                row.hcreac }}\r\n                            </span>\r\n                            <span class=\"fs-6 text-dark fw-bold\">\r\n                                Actualización: {{ row.nomuactua }} el {{ row._format?.factua ?? row.factua }} a las\r\n                                {{\r\n                                row.hactua }}\r\n                            </span>\r\n                        </div>\r\n                    </td>\r\n                </tr>\r\n                }\r\n\r\n                }\r\n\r\n                <!-- Fila vacía si no hay datos -->\r\n                @if (rowFilter().length === 0) {\r\n                <tr>\r\n                    <td [attr.colspan]=\"columnasRenderizadas().length\" class=\"ll-empty\">\r\n                        Sin datos\r\n                    </td>\r\n                </tr>\r\n                }\r\n\r\n                <!-- Spacer inferior: ocupa el espacio de las filas NO renderizadas abajo -->\r\n                @if (paddingBottom() > 0) {\r\n                <tr class=\"ll-spacer\" [style.height.px]=\"paddingBottom()\">\r\n                    <td [attr.colspan]=\"columnasRenderizadas().length\"></td>\r\n                </tr>\r\n                }\r\n            </tbody>\r\n\r\n            <!-- ── FOOTER sticky ─────────────────────────────────────────────────── -->\r\n            @if (withTotal() && rowFilter().length > 0) {\r\n            <tfoot class=\"ll-tfoot\">\r\n\r\n                <tr>\r\n                    <td [attr.colspan]=\"getColspanBeforeTotals()\" class=\"{{classTotales()}} fw-5 fs-6 ps-2 py-2\">Totales:</td>\r\n                    @for (col of columnasRenderizadas() ; track col.fieldname) {\r\n                    @if (col.totalizable) {\r\n                    <td class=\"{{classTotales()}} ll-footer-cell fw-5 text-end fs-6\">\r\n                        {{ getTotals(col.fieldname)}}\r\n                    </td>\r\n                    }\r\n                    }\r\n                </tr>\r\n            </tfoot>\r\n            }\r\n\r\n        </table>\r\n    </div>\r\n</ng-template>","import { CommonModule, NgTemplateOutlet } from '@angular/common';\nimport {\n  Component,\n  ElementRef,\n  input,\n  model,\n  signal,\n  computed,\n  effect,\n  untracked,\n  inject,\n  OnDestroy,\n  contentChild,\n  contentChildren,\n  TemplateRef,\n  output,\n  HostListener,\n  viewChild,\n} from '@angular/core';\nimport { TsiColumnDefDirective } from '../../../directivas/tables/tsi-column-def.directive';\nimport { FormsModule } from '@angular/forms';\nimport { CdkDropList, CdkDrag, CdkDragHandle, CdkDragDrop, moveItemInArray } from '@angular/cdk/drag-drop';\nimport { DropdownCdkComponent } from \"../../dropdown/dropdown-cdk/dropdown-cdk.component\";\nimport { dropdownAnimation, fadeInOut } from '../../../directivas/animaciones/fade-animation';\nimport { FormateadorService } from '../../../service/formateador.service';\nimport { TABLE_EVENTS } from '../../../enums/table-events';\nimport { SelectedRow } from '../../../models/selected-row';\nimport { AnimatedCheckboxDirective } from '../../../directivas/estilos/animated-checkbox.directive';\nimport { formatDecimal, validarBoolean } from 'shared-tsi';\nimport { CellRender, CellRendered } from '../../../models/cell-rendered';\nimport { TableData } from '../../../models/table-data.model';\nimport { CardMobileComponent } from \"../card-mobile/card-mobile.component\";\nimport { ColumnConfigItem } from '../table-ultimate/table-ultimate.component';\n\n/**\n * Tabla con virtual scroll nativo + COLUMNAS FIJADAS (pinned) en el scroll horizontal.\n * Duplicada de table-ultimate; agrega soporte para `pinned` en la definición de columna.\n *\n * PINNED:\n *  - `pinned: true`     → fija la columna a la DERECHA (default)\n *  - `pinned: 'right'`  → fija la columna a la derecha\n *  - `pinned: 'left'`   → fija la columna a la izquierda\n *  - Las columnas fijadas se reordenan: left al inicio, right al final.\n *  - Si la columna fijada no define `width`, se le asigna 120px (el offset necesita ancho fijo).\n *  - Las columnas utilitarias (details/checkbox/actions) se fijan a la izquierda automáticamente\n *    solo cuando existe al menos una columna con pinned 'left'.\n *\n * @Input columns       - Array de columnas con la misma forma que table-simple (+ pinned)\n * @Input rows          - Array completo de datos\n * @Input rowHeight     - Alto fijo de cada fila en px. Si es 0 (default) se resuelve por variante: 42 modern, 30 standard\n * @Input buffer        - Filas extra renderizadas fuera del viewport (default: 10)\n * @Input altoContainer - Alto fijo del contenedor en px (default: 400). Se ignora si se usa altoContenedor.\n * @Input altoContenedor - Offset desde el top del viewport en px. Activa height: clamp(minAlto, calc(100vh - offset), 100vh).\n * @Input minAlto       - Altura mínima en px cuando se usa altoContenedor (default: 200)\n * @Input footerRows    - Filas del footer (totales, resumen, etc.)\n * @Input identifier    - Campos que forman la clave para selectedRow\n * @Input withFiltro    - Muestra input de búsqueda local\n * @Input withDetails   - Muestra detalles expandibles por fila\n * @Input withCheckbox  - Muestra checkbox para selección de filas\n * @Input withTotal     - Muestra fila de totales en el footer\n */\n\n\n/** Datos de fijado de una columna, resueltos para el template */\nexport interface PinInfo {\n  side: 'left' | 'right';\n  /** offset acumulado para style.left (solo side left) */\n  left: number | null;\n  /** offset acumulado para style.right (solo side right) */\n  right: number | null;\n  /** true si es la celda del borde interno del grupo (donde va la sombra) */\n  edge: boolean;\n  /** ancho efectivo de la columna fijada */\n  width: number;\n}\n\n@Component({\n  selector: 'app-table-ultimate-pinned',\n  imports: [FormsModule, CommonModule, DropdownCdkComponent, AnimatedCheckboxDirective, CardMobileComponent, NgTemplateOutlet, CdkDropList, CdkDrag, CdkDragHandle],\n  templateUrl: './table-ultimate-pinned.component.html',\n  styleUrl: './table-ultimate-pinned.component.scss',\n  animations: [fadeInOut, dropdownAnimation],\n  host: {\n    '[class.ll-variant--modern]': 'variante() === \"modern\"'\n  }\n})\nexport class TableUltimatePinnedComponent implements OnDestroy {\n\n  scrollContainer = viewChild<ElementRef<HTMLDivElement>>('scrollContainer')\n  customActions = contentChild<TemplateRef<any>>('customActions')\n  columnDefs = contentChildren(TsiColumnDefDirective)\n  columnDefMap = computed(() => new Map(this.columnDefs().map(d => [d.fieldname(), d.template])))\n\n  private formateador = inject(FormateadorService)\n\n  // ── Inputs ──────────────────────────────────────────────────────────────────\n  rows = input<any[]>([]);\n  columns = input<any[]>([]);\n  footerRows = input<any[]>([]);\n  rowHeight = input<number>(0);\n  buffer = input<number>(10);\n  altoContainer = input<number>(0);\n  altoContenedor = input<number>(400);\n  minAlto = input<number>(200);\n  identifier = input<string[]>([]);\n  withFiltro = input<boolean>(false);\n  withDetails = input<boolean>(false)\n  withCheckbox = input<boolean>(false)\n  withTotal = input<boolean>(false)\n  withHeight = input<boolean>(false)\n  withAttachment = input<boolean>(false);\n  variante = input<'standard' | 'modern'>('standard');\n\n  rendered = input<CellRendered[]>([])\n\n  dragOverRowId = signal<any>(null); // dropzone para adjuntos\n\n  titleTabla = input<string>('Contrato')\n  activeMobileMode = input<boolean>(true)\n  isLoadingResponsive = signal(false)\n  isMobile = signal<boolean>(window.innerWidth <= 768)\n\n  contentFilter = contentChild<TemplateRef<any>>('header') // inyect content in filter\n  // ── Output ──────────────────────────────────────────────────────────────────\n  rowEvent = output<any>()\n\n  // ── ROW ACTIONS ──────────────────────────────────────────────────────────────────\n  selectedRow = model<any>(null);\n  rowClassFn = input<(row: any) => string | string[] | Record<string, boolean>>(null);\n  rowDisabledFn = input<((row: any) => boolean) | null>(null);\n\n  selectItems = model<SelectedRow<any>[]>([])\n\n  rowFormat = computed(() => this.formateador.procesarLista(this.rows(), this.columns()))\n  // ── Estado interno ───────────────────────────────────────────────────────────\n  busqueda = model<string>('');\n  scrollTop = signal<number>(0);\n  containerHeight = signal<number>(0); // altura real medida del DOM\n\n  // ── Sort ─────────────────────────────────────────────────────────────────────\n  sortField = signal<string | null>(null);\n  sortDir = signal<'asc' | 'desc' | 'none'>('none');\n\n  //-- EXPANDED ROWS\n  expandedRows = signal<string | null>(null)\n\n  classTotales = input<string>('')\n\n  // ── CSS height del contenedor ─────────────────────────────────────────────────\n\n  /** Valor aplicado como [style.height] en el template */\n  heightStyle = computed(() => {\n    if (this.altoContainer() > 0) {\n      return `clamp(${this.minAlto()}px, calc(100vh - ${this.altoContainer()}px), 100vh)`;\n    }\n    return `${this.altoContenedor()}px`;\n  });\n\n  // ── Filtrado + Ordenamiento ───────────────────────────────────────────────────\n  rowFilter = computed(() => {\n    const term = this.busqueda().toLowerCase().trim();\n    const filtered = term\n      ? this.rowFormat().filter(item => this.filtraItem(item, term))\n      : this.rowFormat();\n\n    const field = this.sortField();\n    const dir = this.sortDir();\n    if (!field || dir === 'none') return filtered;\n\n    return [...filtered].sort((a, b) => {\n      const valueA = a[field] ?? '';\n      const valueB = b[field] ?? '';\n      if (typeof valueA === 'number' && typeof valueB === 'number') {\n        return dir === 'asc' ? valueA - valueB : valueB - valueA;\n      }\n\n      const numA = Number(valueA);\n      const numB = Number(valueB);\n\n      if (!isNaN(numA) && !isNaN(numB)) {\n        return dir === 'asc' ? numA - numB : numB - numA;\n      }\n\n      const va = String(valueA).toLowerCase();\n      const vb = String(valueB).toLowerCase();\n      const cmp = va.localeCompare(vb, undefined, { numeric: true });\n      return dir === 'asc' ? cmp : -cmp;\n    });\n  });\n\n  // ── Virtual scroll ────────────────────────────────────────────────────────────\n  // Alto efectivo de fila: si no se pasa rowHeight (0), se resuelve por variante.\n  // DEBE coincidir con el height del td en el SCSS (42px modern / 30px standard) o el scroll se desalinea.\n  rowH = computed(() => this.rowHeight() || (this.variante() === 'modern' ? 40 : 30));\n\n  totalHeight = computed(() => this.rowFilter().length * this.rowH());\n\n  startIndex = computed(() => {\n    const idx = Math.floor(this.scrollTop() / this.rowH()) - this.buffer();\n    return Math.max(0, idx);\n  });\n\n  endIndex = computed(() => {\n    const visible = Math.ceil(this.containerHeight() / this.rowH());\n    const idx = this.startIndex() + visible + this.buffer() * 2;\n    return Math.min(this.rowFilter().length - 1, idx);\n  });\n\n  visibleRows = computed(() =>\n    this.rowFilter().slice(this.startIndex(), this.endIndex() + 1)\n  );\n\n  /** Espacio en blanco antes de las filas renderizadas */\n  paddingTop = computed(() => this.startIndex() * this.rowH());\n\n  /** Espacio en blanco después de las filas renderizadas */\n  paddingBottom = computed(() => {\n    const remaining = this.rowFilter().length - this.endIndex() - 1;\n    return Math.max(0, remaining * this.rowH());\n  });\n\n  // ── Scroll hacia fila seleccionada al cargar datos ───────────────────────────\n  private scrollEffect = effect(() => {\n    const rows = this.rowFilter();\n    const selected = untracked(() => this.selectedRow());\n    if (rows.length > 0 && selected != null) {\n      queueMicrotask(() => this.scrollToSelected(selected));\n    }\n  });\n\n  // ── ResizeObserver ────────────────────────────────────────────────────────────\n  private resizeObserver?: ResizeObserver;\n\n  private resizeEffect = effect(() => {\n    if (!this.scrollContainer()) return\n    const el = this.scrollContainer().nativeElement;\n    this.containerHeight.set(el.clientHeight);\n    this.syncScrollX(el);\n    if (typeof ResizeObserver !== 'undefined') {\n      this.resizeObserver = new ResizeObserver(() => {\n        this.containerHeight.set(el.clientHeight);\n        this.scrollTop.set(el.scrollTop);\n        this.syncScrollX(el);\n      });\n      this.resizeObserver.observe(el);\n      // Observa también la tabla: si cambian columnas/datos cambia el ancho scrolleable\n      const table = el.querySelector('table');\n      if (table) this.resizeObserver.observe(table);\n    }\n  })\n\n  ngOnDestroy() {\n    this.resizeObserver?.disconnect();\n  }\n\n  // ── Manejadores ──────────────────────────────────────────────────────────────\n  onScroll(event: Event) {\n    const el = event.target as HTMLDivElement;\n    this.scrollTop.set(el.scrollTop);\n    this.syncScrollX(el);\n  }\n\n  selectRow(row: any, idList: string) {\n    this.rowEvent.emit({ usecase: TABLE_EVENTS.CLICK, data: row })\n    if (this.identifier().length < 1) {\n      this.selectedRow.set(idList);\n    } else {\n      this.selectedRow.set(this.concatenarValue(row, this.identifier()));\n    }\n  }\n\n  isSelected(row: any, idList: string): boolean {\n    if (this.identifier().length < 1) {\n      return this.selectedRow() == idList;\n    }\n    return this.selectedRow() == this.concatenarValue(row, this.identifier());\n  }\n\n  textoDigitado() {\n    this.scrollTop.set(0);\n    if (this.scrollContainer()?.nativeElement) {\n      this.scrollContainer().nativeElement.scrollTop = 0;\n    }\n  }\n\n  toggleSort(field: string) {\n    if (this.sortField() !== field) {\n      this.sortField.set(field);\n      this.sortDir.set('asc');\n    } else {\n      if (this.sortDir() === 'asc') {\n        this.sortDir.set('desc');\n      } else if (this.sortDir() === 'desc') {\n        this.sortDir.set('none');\n        this.sortField.set(null);\n      } else {\n        this.sortDir.set('asc');\n      }\n    }\n  }\n\n  // ── COLUMNAS FIJADAS (PINNED) ─────────────────────────────────────────────────\n\n  /** Ancho por defecto de una columna fijada que no define width (el offset necesita ancho fijo) */\n  private readonly PINNED_DEFAULT_WIDTH = 120;\n\n  /** Anchos fijos de las columnas utilitarias cuando participan del pinning izquierdo */\n  readonly UTIL_W = { details: 36, checkbox: 36, actions: 44 };\n\n  /** Posición horizontal del scroll (para las sombras de las columnas fijadas) */\n  scrollLeft = signal<number>(0);\n  maxScrollLeft = signal<number>(0);\n\n  private syncScrollX(el: HTMLDivElement) {\n    this.scrollLeft.set(el.scrollLeft);\n    this.maxScrollLeft.set(el.scrollWidth - el.clientWidth);\n  }\n\n  /** Lado al que se fija una columna. `pinned: true` = derecha (default) */\n  pinnedSide(col: TableData): 'left' | 'right' | null {\n    if (!col?.pinned) return null;\n    return col.pinned === 'left' ? 'left' : 'right';\n  }\n\n  private pinnedWidth(col: TableData): number {\n    return col.width || this.PINNED_DEFAULT_WIDTH;\n  }\n\n  hasLeftPinned = computed(() => this.columnasRenderizadas().some(c => this.pinnedSide(c) === 'left'));\n  hasRightPinned = computed(() => this.columnasRenderizadas().some(c => this.pinnedSide(c) === 'right'));\n\n  /** Ancho total de las columnas utilitarias fijadas (base del offset de las pinned left) */\n  utilCheckboxLeft = computed(() => this.withDetails() ? this.UTIL_W.details : 0);\n  utilActionsLeft = computed(() => this.utilCheckboxLeft() + (this.withCheckbox() ? this.UTIL_W.checkbox : 0));\n  private utilTotalWidth = computed(() => this.utilActionsLeft() + (this.customActions() ? this.UTIL_W.actions : 0));\n\n  /** Mapa fieldname → PinInfo con los offsets acumulados de cada columna fijada */\n  pinInfo = computed(() => {\n    const map = new Map<string, PinInfo>();\n    const cols = this.columnasRenderizadas();\n    const lefts = cols.filter(c => this.pinnedSide(c) === 'left');\n    const rights = cols.filter(c => this.pinnedSide(c) === 'right');\n\n    let accLeft = lefts.length > 0 ? this.utilTotalWidth() : 0;\n    lefts.forEach((col, i) => {\n      map.set(col.fieldname, {\n        side: 'left',\n        left: accLeft,\n        right: null,\n        edge: i === lefts.length - 1,\n        width: this.pinnedWidth(col)\n      });\n      accLeft += this.pinnedWidth(col);\n    });\n\n    let accRight = 0;\n    [...rights].reverse().forEach((col, i) => {\n      map.set(col.fieldname, {\n        side: 'right',\n        left: null,\n        right: accRight,\n        edge: i === rights.length - 1, // la última iterada es la primera visualmente (borde interno)\n        width: this.pinnedWidth(col)\n      });\n      accRight += this.pinnedWidth(col);\n    });\n\n    return map;\n  });\n\n  /** PinInfo de una columna, o undefined si no está fijada */\n  pin(col: TableData): PinInfo | undefined {\n    return this.pinInfo().get(col.fieldname);\n  }\n\n  /** Ancho a forzar en la celda: el declarado, o el default si está fijada */\n  colWidth(col: TableData): number | null {\n    const p = this.pin(col);\n    if (p) return p.width;\n    return col.width || null;\n  }\n\n  /** Sombra izquierda: hay columnas fijadas left y se scrolleó */\n  hasShadowLeft = computed(() => this.hasLeftPinned() && this.scrollLeft() > 0);\n  /** Sombra derecha: hay columnas fijadas right y queda contenido oculto a la derecha */\n  hasShadowRight = computed(() => this.hasRightPinned() && this.scrollLeft() < this.maxScrollLeft() - 1);\n\n  // ── Helpers ──────────────────────────────────────────────────────────────────\n  concatenarValue(obj: any, fields: string[]): string {\n    return fields.reduce((acc, f) => acc + (obj[f] ?? ''), '');\n  }\n\n  getHighlight(text: any, fieldname: string): string {\n    if (text == null) text = ''\n    if (!this.filtrarColumnas()[fieldname] || !this.busqueda()) return text\n    if (typeof text !== 'string') {\n      text = text.toString()\n    }\n    const regex = new RegExp(`(${this.busqueda()})`, 'gi')\n    return text?.replace(regex, '<mark>$1</mark>')\n  }\n\n  private filtraItem(item: any, term: string): boolean {\n\n    const columnasActivas = Object.entries(this.filtrarColumnas())\n      .filter(([_campo, activo]) => activo)\n    return columnasActivas.some(([campo]) => {\n      const raw = item[campo];\n      const formatted = item._format?.[campo];\n      const valor = (formatted ?? raw ?? '').toString().toLowerCase();\n      return valor.includes(term)\n    })\n  }\n\n  private scrollToSelected(selected: any) {\n    const rows = this.rowFilter();\n    const idx = this.identifier().length < 1\n      ? (typeof selected === 'number' ? selected : -1)\n      : rows.findIndex(r => this.concatenarValue(r, this.identifier()) === selected);\n\n    if (idx < 0 || !this.scrollContainer()?.nativeElement) return;\n\n    const targetTop = idx * this.rowH();\n    const container = this.scrollContainer().nativeElement;\n    const containerH = this.containerHeight();\n\n    if (targetTop < container.scrollTop || targetTop + this.rowH() > container.scrollTop + containerH) {\n      container.scrollTop = targetTop - containerH / 2;\n    }\n  }\n\n  /** Índice real en rowFilter de una fila visible (para isSelected) */\n  realIndex(visibleIdx: number): number {\n    return this.startIndex() + visibleIdx;\n  }\n\n  /** Mostrar columnas para realizar el filtro */\n  filtrarColumnas = computed(() => {\n    const columns = this.columns()\n    const filtro: { [caption: string]: boolean } = {}\n    columns.forEach((col) => {\n      if (col.fieldname) {\n        filtro[col.fieldname] = true\n      }\n    })\n    return filtro\n  })\n\n  toggleFiltros(event: Event) {\n    const checked = (event.target as HTMLInputElement).checked\n    const filtros = this.filtrarColumnas()\n    Object.keys(filtros).forEach(key => {\n      filtros[key] = checked\n    })\n  }\n\n  /** MOSTRAR/ORDENAR COLUMNAS DE LA TABLA (engranaje del header) */\n\n  /** orden y visibilidad elegidos por el usuario, por fieldname — sembrado siempre desde columns() */\n  private columnState = signal<Map<string, { visible: boolean; order: number }>>(new Map());\n\n  /** Reconstruye el estado cada vez que cambia columns() (columns() es la única fuente de verdad) */\n  private columnStateEffect = effect(() => {\n    const cols = this.columns();\n    untracked(() => this.columnState.set(this.buildColumnState(cols)));\n  });\n\n  private buildColumnState(cols: TableData[]): Map<string, { visible: boolean; order: number }> {\n    const map = new Map<string, { visible: boolean; order: number }>();\n    cols.forEach((col, i) => {\n      map.set(col.fieldname, {\n        visible: this.validaVisibilidad(col.visible),\n        order: col.order ?? i\n      });\n    });\n    return map;\n  }\n\n  /** Columnas configurables (permitidas por diseño), en el orden elegido por el usuario.\n   *  El caption es solo presentación: sin caption la columna igual se configura y renderiza (identidad = fieldname). */\n  columnasConfigurables = computed(() => {\n    const state = this.columnState();\n    return this.columns()\n      .filter(col => this.validaVisibilidad(col.visible))\n      .slice()\n      .sort((a, b) => (state.get(a.fieldname)?.order ?? 0) - (state.get(b.fieldname)?.order ?? 0));\n  });\n\n  /** Columnas que realmente se pintan: configurables y marcadas como visibles.\n   *  Las fijadas se reordenan: left al inicio, right al final (una pinned en medio no tiene sentido visual). */\n  columnasRenderizadas = computed(() => {\n    const state = this.columnState();\n    const visibles = this.columnasConfigurables().filter(col => state.get(col.fieldname)?.visible !== false);\n    const left = visibles.filter(c => this.pinnedSide(c) === 'left');\n    const middle = visibles.filter(c => this.pinnedSide(c) === null);\n    const right = visibles.filter(c => this.pinnedSide(c) === 'right');\n    return [...left, ...middle, ...right];\n  });\n\n  isColumnVisible(fieldname: string): boolean {\n    return this.columnState().get(fieldname)?.visible !== false;\n  }\n\n  toggleColumnVisible(fieldname: string, event: Event) {\n    const checked = (event.target as HTMLInputElement).checked;\n    this.columnState.update(map => {\n      const next = new Map(map);\n      const prev = next.get(fieldname);\n      next.set(fieldname, { visible: checked, order: prev?.order ?? 0 });\n      return next;\n    });\n  }\n\n  onColumnDrop(event: CdkDragDrop<TableData[]>) {\n    const list = [...this.columnasConfigurables()];\n    moveItemInArray(list, event.previousIndex, event.currentIndex);\n    this.columnState.update(map => {\n      const next = new Map(map);\n      list.forEach((col, i) => {\n        const prev = next.get(col.fieldname);\n        next.set(col.fieldname, { visible: prev?.visible ?? true, order: i });\n      });\n      return next;\n    });\n  }\n\n  guardarConfiguracionColumnas() {\n    const state = this.columnState();\n    const config: ColumnConfigItem[] = this.columnasConfigurables().map(col => ({\n      fieldname: col.fieldname,\n      visible: state.get(col.fieldname)?.visible !== false,\n      order: state.get(col.fieldname)?.order ?? 0\n    }));\n    this.rowEvent.emit({ usecase: TABLE_EVENTS.SAVE_COLUMN_CONFIG, data: config });\n  }\n\n  /** Descarta los cambios sin guardar (drags/toggles) y vuelve al orden/visibilidad de columns() */\n  restablecerConfiguracionColumnas() {\n    this.columnState.set(this.buildColumnState(this.columns()));\n  }\n\n  validaVisibilidad(value: boolean) {\n    return validarBoolean(value)\n  }\n\n  /** CELL RENDER */\n\n  resolveCell(col: string, row: any): CellRender | null {\n    const value = row[col]\n    const r = this.rendered().find(r => r.matches(col, value, row))\n    return r ? r.render(value, row) : null\n  }\n\n  getRowClass(row: any): { [key: string]: boolean } {\n    return {\n      'text-error': row.situac == 'J',\n      'text-alerta': row.situac == 'L'\n    }\n  }\n\n  getPosition(col: TableData): string {\n    if (col.position) return `text-${col.position}`\n    if (['decimal', 'number'].includes(col.tipo)) return `text-end`\n    if (['fecha', 'date'].includes(col.tipo)) return `text-center`\n    return 'text-start'\n  }\n\n  //** WITH DETAILS - EXPANDED ROW */\n\n  toggleExpandRow(idRow: string) {\n    const value = this.expandedRows() == idRow ? null : idRow\n    this.expandedRows.set(value)\n  }\n\n  //** WITH TOTAL - FOOTER DE TOTALES */\n\n  getTotals(fieldname: string): string {\n    const itemsSelected = this.withCheckbox() ? this.selectItems().map(item => item.data) : this.rowFormat()\n    const final = itemsSelected.reduce((acc, row) => {\n      const val = row[fieldname]\n      return acc + (typeof val == 'number' ? val : 0)\n    }, 0)\n\n    return formatDecimal(final)\n  }\n\n  getColspanBeforeTotals(): number {\n    const columns = this.columnasRenderizadas()\n    const firstTotalizableIndex = columns.findIndex(c => c.totalizable)\n    const result = firstTotalizableIndex >= 0 ? firstTotalizableIndex : columns.length\n    const addColumns = (this.withDetails() ? 1 : 0) + (this.withCheckbox() ? 1 : 0) + (this.customActions() ? 1 : 0)\n    return result + addColumns\n  }\n\n\n  //** WITHCHECKBOX LOGICA */\n  allCheck(event: Event) {\n    const input = event.target as HTMLInputElement\n    const checked = input.checked\n    this.rowEvent.emit({ usecase: TABLE_EVENTS.CHECK_ALL, data: checked })\n    this.checkAll(checked)\n  }\n\n  isCheckboxDisabled(row: any): boolean {\n    return this.rowDisabledFn?.()?.(row) ?? false\n  }\n\n  checkAll(checked: boolean) {\n    if (checked) {\n      const total = this.rowFilter()\n        .filter(r => !this.isCheckboxDisabled(r))\n        .map(r => ({ id: r.idListTsi, data: r }))\n      this.selectItems.set(total)\n    } else {\n      this.selectItems.set([])\n    }\n  }\n\n  validaAllCheck(): boolean {\n    const selectable = this.rowFilter().filter(r => !this.isCheckboxDisabled(r))\n    const selectedIds = new Set(this.selectItems().map(s => s.id));\n    return selectable.length > 0 && selectable.every(row => selectedIds.has(row.idListTsi));\n  }\n\n  isItemSelected(id: string): boolean {\n    return this.selectItems().some(item => item.id == id)\n  }\n\n  toogleItem(idList: string, event: Event) {\n    const row = this.rowFormat().find(r => r.idListTsi == idList)\n    if (!row || this.isCheckboxDisabled(row)) {\n      return\n    }\n    const input = event.target as HTMLInputElement\n    const checked = input.checked\n    this.rowEvent.emit({ usecase: TABLE_EVENTS.CHECK_ROW, data: { row, checked } })\n    if (checked) {\n      const item: SelectedRow<any> = { id: idList, data: row };\n      this.selectItems.update(sel => [...sel, item])\n      return\n    }\n    this.selectItems.update(sel => sel.filter(s => s.id != idList))\n  }\n\n  /* EVENTOS DE LA FILA */\n  onDoubleClick(row: any) {\n    if (window.getSelection()?.type === 'Range') return;\n    this.rowEvent.emit({ usecase: TABLE_EVENTS.DOUBLE_CLICK, data: row })\n  }\n  onRightClick(event: MouseEvent, row: any) {\n    event.preventDefault();\n    this.rowEvent.emit({ usecase: TABLE_EVENTS.RIGHT_CLICK, data: row })\n  }\n\n  /* MOBILE MODE */\n  @HostListener('window:resize', ['$event'])\n  onResize(event: any) {\n    if (!this.activeMobileMode()) return\n    this.isMobile.set(event.target.innerWidth <= 768);\n  }\n  private mobileEffect = effect(() => {\n    if (!this.activeMobileMode()) return\n    this.isMobile();\n    this.isLoadingResponsive.set(true);\n    setTimeout(() => this.isLoadingResponsive.set(false), 200);\n  });\n\n  // DRAG AND DROP ADJUNTOS\n  onDragOver(event: DragEvent, idList: any): void {\n    event.preventDefault();\n    event.stopPropagation();\n    this.dragOverRowId.set(idList);\n  }\n\n  onDragLeave(): void {\n    this.dragOverRowId.set(null);\n  }\n\n  onDrop(event: DragEvent, row: any): void {\n    event.preventDefault();\n    event.stopPropagation();\n    this.dragOverRowId.set(null);\n\n    const file = event.dataTransfer?.files?.[0];\n    if (file) {\n      this.rowEvent.emit({ usecase: TABLE_EVENTS.DRAG_DROP, data: { file, row } })\n    }\n  }\n\n  getRows = (): any[] => this.rowFormat().map(({ idListTsi, format, ...rest}) => rest)\n}\n","@if (withFiltro()) {\n<div class=\"ll-search-bar\">\n\n    <div class=\"ll-search-bar__left\">\n        <ng-container *ngTemplateOutlet=\"contentFilter();\"></ng-container>\n    </div>\n\n    <div class=\"ll-search-bar__right\">\n\n        <div class=\"ll-search-group\">\n\n            <label class=\"form-label mb-0 ll-search-label\">Buscar:</label>\n            <div class=\"ll-search-input-wrap\">\n\n                <input type=\"text\" class=\"form-control cw-250\" placeholder=\"Buscar...\" [(ngModel)]=\"busqueda\" (input)=\"textoDigitado()\" />\n                <app-dropdown-cdk [altoContainer]=\"300\">\n                    <ng-template #trigger>\n                        <button class=\"btn btn-dark boton-buscar fs-7\">\n                            <i class=\"fas fa-cog\"></i>\n                        </button>\n                    </ng-template>\n\n                    <ng-template #content>\n                        <div class=\"popover-menu-filter bg-white shadow my-2\" @fadeInOut>\n                            <div class=\"popover-title fs-7 bg-white\">\n                                Filtros\n                            </div>\n\n                            <div class=\"form-check form-switch text-start d-flex align-items-center\">\n                                <input class=\"form-check-input py-0 my-0 cw-25 ch-15\" type=\"checkbox\" [checked]=\"true\"\n                                    (change)=\"toggleFiltros($event)\" id=\"filter_table_pinned_todos\" />\n                                <label class=\"form-check-label ps-2 fs-6 mb-0 cursor-pointer\"\n                                    for=\"filter_table_pinned_todos\">\n                                    Todos\n                                </label>\n                            </div>\n\n                            @for (col of columns(); track col.fieldname) {\n                            <div class=\"form-check form-switch text-start d-flex align-items-center\">\n                                <input type=\"checkbox\" class=\"form-check-input py-0 my-0 cw-25 ch-15\"\n                                    id=\"{{ 'filter_pinned_' + col.fieldname }}\" [(ngModel)]=\"filtrarColumnas()[col.fieldname]\" />\n                                <label class=\"form-check-label ps-2 fs-6 cursor-pointer mb-0\"\n                                    for=\"{{ 'filter_pinned_' + col.fieldname }}\">\n                                    {{ col.caption || col.fieldname }}\n                                </label>\n                            </div>\n                            }\n                        </div>\n                    </ng-template>\n                </app-dropdown-cdk>\n\n            </div>\n\n        </div>\n\n\n    </div>\n\n\n</div>\n}\n\n@if (activeMobileMode()) {\n@if (isLoadingResponsive()) {\n<div class=\"d-flex flex-column justify-content-center align-items-center py-2\">\n    <div class=\"spinner-border text-secondary mb-2\" role=\"status\"></div>\n    <span class=\"ms-2 fs-6\">Cargando...</span>\n</div>\n}\n\n@if (!isLoadingResponsive()) {\n@if (isMobile()) {\n<app-card-mobile [data]=\"rowFilter()\" [columns]=\"columns()\" [actions]=\"customActions()\" [identifier]=\"identifier()\"\n    [titleTabla]=\"titleTabla()\" [altoContainer]=\"altoContainer()\" />\n}\n@if (!isMobile()) {\n<ng-container *ngTemplateOutlet=\"table\"></ng-container>\n}\n}\n}\n@else {\n<ng-container *ngTemplateOutlet=\"table\"></ng-container>\n}\n\n<ng-template #table>\n    <!-- Contenedor scrolleable — solo el BODY hace scroll; header y footer son sticky.\n         Las clases ll-scrolled-* activan las sombras de las columnas fijadas. -->\n    <div #scrollContainer class=\"ll-scroll-container\"\n        [class.ll-scrolled-start]=\"hasShadowLeft()\"\n        [class.ll-scrolled-end]=\"hasShadowRight()\"\n        [style.height]=\"withHeight() ? heightStyle() : ''\"\n        [style.max-height]=\"heightStyle()\" (scroll)=\"onScroll($event)\">\n        <table class=\"ll-table\">\n\n            <!-- ── HEADER sticky ─────────────────────────────────────────────────── -->\n            <thead class=\"ll-thead\">\n                <tr>\n                    @if (withDetails()) {\n                    <th class=\"cw-25\"\n                        [class.ll-col-pinned]=\"hasLeftPinned()\"\n                        [style.left.px]=\"hasLeftPinned() ? 0 : null\"\n                        [style.width.px]=\"hasLeftPinned() ? UTIL_W.details : null\"\n                        [style.min-width.px]=\"hasLeftPinned() ? UTIL_W.details : null\"\n                        [style.max-width.px]=\"hasLeftPinned() ? UTIL_W.details : null\"></th>\n                    }\n\n                    @if (withCheckbox()) {\n                    <th class=\"cw-20\"\n                        [class.ll-col-pinned]=\"hasLeftPinned()\"\n                        [style.left.px]=\"hasLeftPinned() ? utilCheckboxLeft() : null\"\n                        [style.width.px]=\"hasLeftPinned() ? UTIL_W.checkbox : null\"\n                        [style.min-width.px]=\"hasLeftPinned() ? UTIL_W.checkbox : null\"\n                        [style.max-width.px]=\"hasLeftPinned() ? UTIL_W.checkbox : null\">\n                        <label>\n                            <input type=\"checkbox\" name=\"check_box_select_table_pinned_main\" id=\"check_box_select_table_pinned_main\"\n                                animatedCheckbox [checked]=\"validaAllCheck()\" (change)=\"allCheck($event)\">\n                        </label>\n                    </th>\n                    }\n\n                    @if (customActions()) {\n                    <th class=\"cw-40\"\n                        [class.ll-col-pinned]=\"hasLeftPinned()\"\n                        [style.left.px]=\"hasLeftPinned() ? utilActionsLeft() : null\"\n                        [style.width.px]=\"hasLeftPinned() ? UTIL_W.actions : null\"\n                        [style.min-width.px]=\"hasLeftPinned() ? UTIL_W.actions : null\"\n                        [style.max-width.px]=\"hasLeftPinned() ? UTIL_W.actions : null\">\n                        <app-dropdown-cdk [altoContainer]=\"500\">\n                            <ng-template #trigger>\n                                <button class=\"btn p-0 text-dark d-flex mx-auto border-0 icon-table\">\n                                    <i class=\"fas fa-cog\"></i>\n                                </button>\n                            </ng-template>\n                            <ng-template #content>\n                                <div class=\"popover-menu-column bg-white shadow my-2\" @fadeInOut>\n                                    <div class=\"popover-title fs-7 bg-white d-flex align-items-baseline justify-content-between\">\n                                        <span>Columnas</span>\n                                        <span class=\"column-config-hint\">arrastra para ordenar</span>\n                                    </div>\n\n                                    <div cdkDropList class=\"column-config-list\" (cdkDropListDropped)=\"onColumnDrop($event)\">\n                                        @for (col of columnasConfigurables(); track col.fieldname) {\n                                        <div class=\"column-config-row\" cdkDrag>\n                                            <i class=\"fas fa-grip-vertical column-config-grip\" cdkDragHandle></i>\n                                            <div class=\"form-check form-switch text-start d-flex align-items-center mb-0 flex-grow-1\">\n                                                <input type=\"checkbox\" class=\"form-check-input py-0 my-0 cw-25 ch-15\"\n                                                    id=\"{{ 'switch_pinned_' + col.fieldname }}\"\n                                                    [checked]=\"isColumnVisible(col.fieldname)\"\n                                                    (change)=\"toggleColumnVisible(col.fieldname, $event)\" />\n                                                <label class=\"form-check-label ps-2 fs-6 cursor-pointer font-label mb-0\"\n                                                    for=\"{{ 'switch_pinned_' + col.fieldname }}\">\n                                                    {{ col.caption || col.fieldname }}\n                                                </label>\n                                            </div>\n                                            @if (pinnedSide(col)) {\n                                            <i class=\"fas fa-thumbtack column-config-pin\" title=\"Columna fijada\"></i>\n                                            }\n                                        </div>\n                                        }\n                                    </div>\n\n                                    <div class=\"column-config-footer\">\n                                        <button type=\"button\" class=\"btn btn-sm fs-7 column-config-save\"\n                                            (click)=\"guardarConfiguracionColumnas()\">\n                                            Guardar configuración\n                                        </button>\n                                    </div>\n                                </div>\n                            </ng-template>\n                        </app-dropdown-cdk>\n                    </th>\n                    }\n\n                    @for (col of columnasRenderizadas(); track col.fieldname) {\n                    <th [title]=\"col.caption\" [style.width.px]=\"colWidth(col)\"\n                        [style.min-width.px]=\"colWidth(col)\" [style.max-width.px]=\"colWidth(col)\"\n                        [class.ll-th-sortable]=\"col.caption\"\n                        [class.ll-col-pinned]=\"!!pin(col)\"\n                        [class.ll-col-pinned--shadow-left]=\"pin(col)?.side === 'left' && pin(col)?.edge\"\n                        [class.ll-col-pinned--shadow-right]=\"pin(col)?.side === 'right' && pin(col)?.edge\"\n                        [style.left.px]=\"pin(col)?.left\"\n                        [style.right.px]=\"pin(col)?.right\"\n                        (click)=\"col.caption && toggleSort(col.fieldname)\">\n                        <span class=\"ll-th-content\">\n                            <span class=\"ll-th-caption\">{{ col.caption }}</span>\n                            @if (col.caption) {\n                            @if (sortField() === col.fieldname) {\n                            <i class=\"ms-1\"\n                                [ngClass]=\"sortDir() === 'asc' ? 'fas fa-angle-up fs-6':'fas fa-angle-down fs-6'\"></i>\n                            } @else {\n                            <i class=\"fas fa-sort ms-1 ll-sort-idle\"></i>\n                            }\n                            }\n                        </span>\n                    </th>\n                    }\n                </tr>\n            </thead>\n\n            <!-- ── BODY virtual ──────────────────────────────────────────────────── -->\n            <tbody>\n                <!-- Spacer superior: ocupa el espacio de las filas NO renderizadas arriba -->\n                @if (paddingTop() > 0) {\n                <tr class=\"ll-spacer\" [style.height.px]=\"paddingTop()\">\n                    <td [attr.colspan]=\"columnasRenderizadas().length\"></td>\n                </tr>\n                }\n\n                <!-- Filas visibles -->\n                @for (row of visibleRows(); track row.idListTsi) {\n                @let idList = row.idListTsi;\n                <tr class=\"ll-row\" [class.ll-row--selected]=\"isSelected(row, idList)\"\n                    [class.ll-row--drag-over]=\"withAttachment() && dragOverRowId() === idList\"\n                    (click)=\"selectRow(row, idList)\" (dblclick)=\"onDoubleClick(row)\"\n                    (contextmenu)=\"onRightClick($event,row)\"\n                    (dragover)=\"withAttachment() && onDragOver($event, idList)\"\n                    (dragleave)=\"withAttachment() && onDragLeave()\" (drop)=\"withAttachment() && onDrop($event, row)\">\n\n                    @if (withDetails()) {\n                    <td class=\"b-table text-center mwp-25\"\n                        [class.ll-col-pinned]=\"hasLeftPinned()\"\n                        [style.left.px]=\"hasLeftPinned() ? 0 : null\">\n                        <a (click)=\"toggleExpandRow(idList)\" class=\"text-dark cursor-pointer fs-6\">\n                            <i class=\"fa-solid\" [class.fa-chevron-right]=\"expandedRows() != idList\"\n                                [class.fa-chevron-down]=\"expandedRows() == idList\"></i>\n                        </a>\n                    </td>\n                    }\n\n                    @if (withCheckbox()) {\n                    <td scope=\"col\" class=\"text-center b-table\"\n                        [class.ll-col-pinned]=\"hasLeftPinned()\"\n                        [style.left.px]=\"hasLeftPinned() ? utilCheckboxLeft() : null\">\n                        <label>\n                            <input type=\"checkbox\" [name]=\"'check_box_select_table_pinned_' + idList\"\n                                [id]=\"'check_box_select_table_pinned_' + idList\" animatedCheckbox\n                                [checked]=\"isItemSelected(idList)\" (click)=\"$event.stopPropagation()\"\n                                (change)=\"toogleItem(idList , $event)\" [disabled]=\"isCheckboxDisabled(row)\">\n                        </label>\n                    </td>\n                    }\n\n                    @if (customActions()) {\n                    <td class=\"text-center\"\n                        [class.ll-col-pinned]=\"hasLeftPinned()\"\n                        [style.left.px]=\"hasLeftPinned() ? utilActionsLeft() : null\">\n                        <ng-container *ngTemplateOutlet=\"customActions(); context: { $implicit: row }\"></ng-container>\n                    </td>\n                    }\n\n                    @for (col of columnasRenderizadas(); track col.fieldname) {\n                    @if (columnDefMap().has(col.fieldname)) {\n                    <td [class.ll-col-pinned]=\"!!pin(col)\"\n                        [class.ll-col-pinned--shadow-left]=\"pin(col)?.side === 'left' && pin(col)?.edge\"\n                        [class.ll-col-pinned--shadow-right]=\"pin(col)?.side === 'right' && pin(col)?.edge\"\n                        [style.left.px]=\"pin(col)?.left\"\n                        [style.right.px]=\"pin(col)?.right\"\n                        [style.min-width.px]=\"pin(col) ? colWidth(col) : null\"\n                        [style.max-width.px]=\"pin(col) ? colWidth(col) : null\">\n                        <ng-container *ngTemplateOutlet=\"columnDefMap().get(col.fieldname)!; context: { $implicit: row, column: col }\">\n                        </ng-container>\n                    </td>\n                    } @else if (col.template) {\n                    <td [class.ll-col-pinned]=\"!!pin(col)\"\n                        [class.ll-col-pinned--shadow-left]=\"pin(col)?.side === 'left' && pin(col)?.edge\"\n                        [class.ll-col-pinned--shadow-right]=\"pin(col)?.side === 'right' && pin(col)?.edge\"\n                        [style.left.px]=\"pin(col)?.left\"\n                        [style.right.px]=\"pin(col)?.right\"\n                        [style.min-width.px]=\"pin(col) ? colWidth(col) : null\"\n                        [style.max-width.px]=\"pin(col) ? colWidth(col) : null\">\n                        <ng-container *ngTemplateOutlet=\"col.template; context: { $implicit: row, column: col }\">\n                        </ng-container>\n                    </td>\n                    } @else {\n                    @switch (col.tipo) {\n\n                    @case ('cell-render') {\n                    @let resolverItem = resolveCell(col.fieldname, row);\n                    @if (resolverItem) {\n                    <td [title]=\"resolverItem.text\" [class.text-center]=\"resolverItem.icon\"\n                        [class.ll-col-pinned]=\"!!pin(col)\"\n                        [class.ll-col-pinned--shadow-left]=\"pin(col)?.side === 'left' && pin(col)?.edge\"\n                        [class.ll-col-pinned--shadow-right]=\"pin(col)?.side === 'right' && pin(col)?.edge\"\n                        [style.left.px]=\"pin(col)?.left\"\n                        [style.right.px]=\"pin(col)?.right\"\n                        [style.min-width.px]=\"pin(col) ? colWidth(col) : null\"\n                        [style.max-width.px]=\"pin(col) ? colWidth(col) : null\">\n                        @if (resolverItem.icon) {\n                        <i class=\"fs-5\" [ngClass]=\"resolverItem.icon\"></i>\n                        } @else if (resolverItem.class) {\n                        <span [ngClass]=\"row.situac == 'J' ? 'text-error' : resolverItem.class\">\n                            {{ resolverItem.text }}\n                        </span>\n                        } @else {\n                        {{ resolverItem.text }}\n                        }\n                    </td>\n                    }\n                    }\n\n                    @default {\n                    <td [innerHTML]=\"getHighlight(row._format?.[col.fieldname] ?? row[col.fieldname], col.fieldname)\"\n                        [style.width.px]=\"colWidth(col)\"\n                        [style.min-width.px]=\"pin(col) ? colWidth(col) : null\"\n                        [style.max-width.px]=\"colWidth(col)\"\n                        [attr.title]=\"row[col.fieldname] || null\"\n                        [class.ll-col-pinned]=\"!!pin(col)\"\n                        [class.ll-col-pinned--shadow-left]=\"pin(col)?.side === 'left' && pin(col)?.edge\"\n                        [class.ll-col-pinned--shadow-right]=\"pin(col)?.side === 'right' && pin(col)?.edge\"\n                        [style.left.px]=\"pin(col)?.left\"\n                        [style.right.px]=\"pin(col)?.right\"\n                        [ngClass]=\"rowClassFn() ? rowClassFn()(row) : getRowClass(row)\" class=\"{{getPosition(col)}}\">\n                    </td>\n                    }\n\n                    }\n                    }\n                    }\n                </tr>\n\n                @if (idList == expandedRows()) {\n                <tr @fadeInOut>\n                    <td [attr.colspan]=\"columnasRenderizadas().length + (withDetails() ? 1 : 0) + (customActions() ? 1 : 0) + (withCheckbox() ? 1 : 0)\"\n                        class=\"table-blank\">\n                        <div class=\"d-flex flex-column auditoria\">\n                            <span class=\"fw-bold fs-7 text-dark\">Datos de auditoría</span>\n                            <span class=\"fs-6 text-dark fw-bold\">\n                                Creación: {{ row.nomucreac }} el {{ row._format?.fcreac ?? row.fcreac }} a las {{\n                                row.hcreac }}\n                            </span>\n                            <span class=\"fs-6 text-dark fw-bold\">\n                                Actualización: {{ row.nomuactua }} el {{ row._format?.factua ?? row.factua }} a las\n                                {{\n                                row.hactua }}\n                            </span>\n                        </div>\n                    </td>\n                </tr>\n                }\n\n                }\n\n                <!-- Fila vacía si no hay datos -->\n                @if (rowFilter().length === 0) {\n                <tr>\n                    <td [attr.colspan]=\"columnasRenderizadas().length\" class=\"ll-empty\">\n                        Sin datos\n                    </td>\n                </tr>\n                }\n\n                <!-- Spacer inferior: ocupa el espacio de las filas NO renderizadas abajo -->\n                @if (paddingBottom() > 0) {\n                <tr class=\"ll-spacer\" [style.height.px]=\"paddingBottom()\">\n                    <td [attr.colspan]=\"columnasRenderizadas().length\"></td>\n                </tr>\n                }\n            </tbody>\n\n            <!-- ── FOOTER sticky ─────────────────────────────────────────────────── -->\n            @if (withTotal() && rowFilter().length > 0) {\n            <tfoot class=\"ll-tfoot\">\n\n                <tr>\n                    <td [attr.colspan]=\"getColspanBeforeTotals()\" class=\"{{classTotales()}} fw-5 fs-6 ps-2 py-2\">Totales:</td>\n                    @for (col of columnasRenderizadas() ; track col.fieldname) {\n                    @if (col.totalizable) {\n                    <td class=\"{{classTotales()}} ll-footer-cell fw-5 text-end fs-6\"\n                        [class.ll-col-pinned]=\"!!pin(col)\"\n                        [class.ll-col-pinned--shadow-left]=\"pin(col)?.side === 'left' && pin(col)?.edge\"\n                        [class.ll-col-pinned--shadow-right]=\"pin(col)?.side === 'right' && pin(col)?.edge\"\n                        [style.left.px]=\"pin(col)?.left\"\n                        [style.right.px]=\"pin(col)?.right\">\n                        {{ getTotals(col.fieldname)}}\n                    </td>\n                    }\n                    }\n                </tr>\n            </tfoot>\n            }\n\n        </table>\n    </div>\n</ng-template>\n","import { CommonModule, NgTemplateOutlet } from '@angular/common';\r\nimport {\r\n  Component,\r\n  ElementRef,\r\n  input,\r\n  model,\r\n  signal,\r\n  computed,\r\n  effect,\r\n  untracked,\r\n  inject,\r\n  OnDestroy,\r\n  contentChild,\r\n  contentChildren,\r\n  TemplateRef,\r\n  output,\r\n  viewChild,\r\n} from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { DropdownCdkComponent } from '../../dropdown/dropdown-cdk/dropdown-cdk.component';\r\nimport { dropdownAnimation, fadeInOut } from '../../../directivas/animaciones/fade-animation';\r\nimport { FormateadorService } from '../../../service/formateador.service';\r\nimport { TABLE_EVENTS } from '../../../enums/table-events';\r\nimport { AnimatedCheckboxDirective } from '../../../directivas/estilos/animated-checkbox.directive';\r\nimport { TsiColumnDefDirective } from '../../../directivas/tables/tsi-column-def.directive';\r\nimport { validarBoolean } from 'shared-tsi';\r\nimport { CellRender, CellRendered } from '../../../models/cell-rendered';\r\nimport { TableData } from '../../../models/table-data.model';\r\nimport { SelectedRow } from '../../../models/selected-row';\r\n\r\nexport interface PivotFlatItem {\r\n  _level: number;\r\n  _hasChildren: boolean;\r\n  _isExpanded: boolean;\r\n  _isLoading: boolean;\r\n  idListTsi: string;\r\n  _format?: Record<string, any>;\r\n  [key: string]: any;\r\n}\r\n\r\n/**\r\n * Tabla pivot con expansión multi-nivel y virtual scroll nativo.\r\n * Cada fila puede expandirse para mostrar sub-filas, que a su vez pueden\r\n * expandirse en más niveles. El virtual scroll opera sobre el array plano\r\n * generado a partir del estado de expansión actual.\r\n *\r\n * @Input rows          - Filas raíz con hijos anidados\r\n * @Input columns       - Definición de columnas (mismo modelo que table-ultimate)\r\n * @Input childrenKey   - Propiedad que contiene los hijos de cada nodo (default: 'children')\r\n * @Input identifier    - Campos que forman la clave única del row (para IDs estables)\r\n * @Input rowHeight     - Alto fijo de cada fila en px (default: 32)\r\n * @Input buffer        - Filas extra fuera del viewport para scroll suave (default: 10)\r\n * @Input altoContenedor - Alto fijo del contenedor en px (default: 400)\r\n * @Input altoContainer - Offset desde el top del viewport para calcular height con clamp\r\n * @Input minAlto       - Alto mínimo cuando se usa altoContainer (default: 200)\r\n * @Input withFiltro    - Mostrar barra de búsqueda\r\n * @Input withCheckbox  - Mostrar checkboxes de selección\r\n * @Input lazyLoad      - Activa carga diferida de hijos (emite expandEvent)\r\n * @Input indentSize    - Píxeles de indentación por nivel (default: 20)\r\n * @Input maxLevels     - Límite de niveles expandibles (0 = sin límite). A partir del\r\n *                        último nivel permitido no se muestra el chevron de expandir,\r\n *                        aunque `lazyLoad` esté activo.\r\n * @Input hasChildrenKey - Campo del dato origen que indica si el nodo tiene hijos\r\n *                        (ej. 'tieneHijos'). Con `lazyLoad` activo, sin este campo se\r\n *                        asume que toda fila puede tener hijos hasta que se consulten;\r\n *                        definiéndolo, las filas hoja no muestran chevron.\r\n * @Input customLevels  - Niveles que renderizan su bloque de datos con `#levelTemplate`\r\n *                        en vez de la grilla de `columns` (permite que cada nivel tenga\r\n *                        su propia organización/estructura visual)\r\n */\r\n@Component({\r\n  selector: 'app-table-ultimate-pivot',\r\n  standalone: true,\r\n  imports: [FormsModule, CommonModule, DropdownCdkComponent, AnimatedCheckboxDirective, NgTemplateOutlet],\r\n  templateUrl: './table-ultimate-pivot.component.html',\r\n  styleUrl: './table-ultimate-pivot.component.scss',\r\n  animations: [fadeInOut, dropdownAnimation],\r\n  host: {\r\n    '[class.ll-variant--modern]': 'variante() === \"modern\"'\r\n  }\r\n})\r\nexport class TableUltimatePivotComponent implements OnDestroy {\r\n\r\n  scrollContainer = viewChild<ElementRef<HTMLDivElement>>('scrollContainer');\r\n  customActions   = contentChild<TemplateRef<any>>('customActions');\r\n  contentFilter   = contentChild<TemplateRef<any>>('header');\r\n  /** Template opcional para reemplazar el bloque de columnas de datos en los\r\n   *  niveles declarados en `customLevels`. Contexto: { $implicit: row, level, columns }. */\r\n  levelTemplate   = contentChild<TemplateRef<any>>('levelTemplate');\r\n  /** Templates `<ng-template tsiColumn=\"fieldname\">` proyectados para columnas específicas\r\n   *  (misma convención que table-ultimate). Tienen prioridad sobre `col.template`. */\r\n  columnDefs      = contentChildren(TsiColumnDefDirective);\r\n  columnDefMap    = computed(() => new Map(this.columnDefs().map(d => [d.fieldname(), d.template])));\r\n\r\n  private formateador = inject(FormateadorService);\r\n\r\n  // ── Inputs ───────────────────────────────────────────────────────────────────\r\n  rows           = input<any[]>([]);\r\n  columns        = input<TableData[]>([]);\r\n  childrenKey    = input<string>('children');\r\n  rowHeight      = input<number>(32);\r\n  buffer         = input<number>(10);\r\n  altoContainer  = input<number>(0);\r\n  altoContenedor = input<number>(400);\r\n  minAlto        = input<number>(200);\r\n  identifier     = input<string[]>([]);\r\n  withFiltro     = input<boolean>(false);\r\n  withCheckbox   = input<boolean>(false);\r\n  withHeight     = input<boolean>(false);\r\n  lazyLoad       = input<boolean>(false);\r\n  indentSize     = input<number>(20);\r\n  maxLevels      = input<number>(0);\r\n  /** Nombre del campo del dato origen que indica explícitamente si el nodo tiene hijos\r\n   *  (ej. 'tieneHijos'). Útil con `lazyLoad`: sin esto, todo nodo se asume expandible\r\n   *  porque no se conocen sus hijos hasta pedirlos; si el backend ya informa qué filas\r\n   *  son hoja, declarar esta propiedad evita mostrar el chevron (y disparar el lazy load)\r\n   *  en esas filas. Si no se define, se mantiene el comportamiento por defecto. */\r\n  hasChildrenKey = input<string | null>(null);\r\n  /** Niveles (0-based) cuyo bloque de datos se delega al `#levelTemplate` proyectado,\r\n   *  en lugar de la grilla estándar de `columns`. Ej: [1, 2].\r\n   *  Las filas de estos niveles no muestran el chevron de expandir propio: si el nivel\r\n   *  tiene descendientes, delega esa jerarquía al widget/tabla que renderices dentro del\r\n   *  template (ej. anidando otro `app-table-ultimate-pivot` con `[rows]=\"row.children\"`). */\r\n  customLevels   = input<number[]>([]);\r\n  rendered       = input<CellRendered[]>([]);\r\n  rowClassFn     = input<((row: any) => string | string[] | Record<string, boolean>) | null>(null);\r\n  /** Fieldname de la columna que actúa como disparador de expansión.\r\n   *  Cuando se define, el ícono se incrusta en esa celda y desaparece la columna dedicada. */\r\n  expandOn       = input<string | null>(null);\r\n  variante       = input<'estandar' | 'modern'>('modern');\r\n  withCellSelect = input<boolean>(false);\r\n\r\n  // ── Outputs ──────────────────────────────────────────────────────────────────\r\n  rowEvent  = output<{ usecase: TABLE_EVENTS; data: any }>();\r\n  cellEvent = output<{ row: any; field: string; value: any; formatted: any; level: number }>();\r\n  /** Emitido al expandir un nodo en modo lazyLoad. El padre debe cargar los hijos\r\n   *  e inyectarlos en `rows`, luego llamar `finishLazyLoad(parentId)` en el componente. */\r\n  expandEvent = output<{ row: PivotFlatItem; level: number }>();\r\n\r\n  // ── Models ───────────────────────────────────────────────────────────────────\r\n  selectedRow  = model<any>(null);\r\n  selectItems  = model<SelectedRow<any>[]>([]);\r\n  selectedCell = model<{ rowId: string; field: string } | null>(null);\r\n\r\n  // ── Estado interno ────────────────────────────────────────────────────────────\r\n  busqueda        = signal<string>('');\r\n  scrollTop       = signal<number>(0);\r\n  containerHeight = signal<number>(0);\r\n  expandedIds     = signal<Set<string>>(new Set());\r\n  loadingIds      = model<Set<string>>(new Set());\r\n\r\n  // ── Sort ──────────────────────────────────────────────────────────────────────\r\n  sortField = signal<string | null>(null);\r\n  sortDir   = signal<'asc' | 'desc' | 'none'>('none');\r\n\r\n  // ── CSS height ────────────────────────────────────────────────────────────────\r\n  heightStyle = computed(() => {\r\n    if (this.altoContainer() > 0) {\r\n      return `clamp(${this.minAlto()}px, calc(100vh - ${this.altoContainer()}px), 100vh)`;\r\n    }\r\n    return `${this.altoContenedor()}px`;\r\n  });\r\n\r\n  // ── Árbol procesado: IDs estables + formato de celdas ────────────────────────\r\n  // processedTree recomputa solo cuando cambian rows, columns, identifier o childrenKey\r\n  processedTree = computed(() => this.processLevel(this.rows(), 0, ''));\r\n\r\n  private processLevel(nodes: any[], level: number, parentPath: string): any[] {\r\n    if (!nodes?.length) return [];\r\n    const ck       = this.childrenKey();\r\n    const ids      = this.identifier();\r\n    const formatted = this.formateador.procesarLista(nodes, this.columns());\r\n\r\n    return formatted.map((node, idx) => {\r\n      const path     = parentPath ? `${parentPath}-${idx}` : `${idx}`;\r\n      // ID estable: usa identifier si está definido, si no usa path posicional\r\n      const stableId = ids.length > 0 ? ids.map(f => node[f] ?? '').join('|') : path;\r\n      const result   = { ...node, idListTsi: stableId };\r\n\r\n      const originalChildren = nodes[idx][ck];\r\n      if (Array.isArray(originalChildren) && originalChildren.length > 0) {\r\n        result[ck] = this.processLevel(originalChildren, level + 1, path);\r\n      }\r\n      return result;\r\n    });\r\n  }\r\n\r\n  // ── Árbol completo aplanado (para búsqueda en todos los niveles) ──────────────\r\n  fullFlatTree = computed(() => this.flattenAll(this.processedTree(), 0));\r\n\r\n  private flattenAll(nodes: any[], level: number): PivotFlatItem[] {\r\n    const result: PivotFlatItem[] = [];\r\n    const ck = this.childrenKey();\r\n    for (const node of nodes) {\r\n      const children    = node[ck];\r\n      const hasChildren = Array.isArray(children) && children.length > 0;\r\n      result.push({ ...node, _level: level, _hasChildren: hasChildren, _isExpanded: false, _isLoading: false });\r\n      if (hasChildren) result.push(...this.flattenAll(children, level + 1));\r\n    }\r\n    return result;\r\n  }\r\n\r\n  // ── Lista plana según estado de expansión (base del virtual scroll) ───────────\r\n  // Solo recomputa cuando cambia expandedIds, loadingIds o processedTree\r\n  expandedFlatList = computed(() => {\r\n    const expanded = this.expandedIds();\r\n    const loading  = this.loadingIds();\r\n    return this.flattenVisible(this.processedTree(), 0, expanded, loading);\r\n  });\r\n\r\n  private flattenVisible(nodes: any[], level: number, expanded: Set<string>, loading: Set<string>): PivotFlatItem[] {\r\n    const result: PivotFlatItem[] = [];\r\n    const ck    = this.childrenKey();\r\n    const maxL  = this.maxLevels();\r\n    const lazy  = this.lazyLoad();\r\n    const hcKey = this.hasChildrenKey();\r\n\r\n    // Nivel a partir del cual ya no se permite seguir desplegando (0 = sin límite)\r\n    const withinMaxLevels = maxL === 0 || level < maxL - 1;\r\n\r\n    for (const node of nodes) {\r\n      const id             = node.idListTsi;\r\n      const children       = node[ck];\r\n      const hasOwnChildren = Array.isArray(children) && children.length > 0;\r\n      // Si el dato trae un indicador explícito de \"tiene hijos\", manda sobre la\r\n      // suposición de lazyLoad (así una fila hoja no muestra chevron innecesario).\r\n      const hasChildren    = withinMaxLevels && (hcKey && node[hcKey] !== undefined ? !!node[hcKey] : (hasOwnChildren || lazy));\r\n      const isExpanded     = expanded.has(id);\r\n      const isLoading      = loading.has(id);\r\n\r\n      result.push({ ...node, _level: level, _hasChildren: hasChildren, _isExpanded: isExpanded, _isLoading: isLoading });\r\n\r\n      if (withinMaxLevels && isExpanded && !isLoading && hasOwnChildren) {\r\n        result.push(...this.flattenVisible(children, level + 1, expanded, loading));\r\n      }\r\n    }\r\n    return result;\r\n  }\r\n\r\n  // ── Filtrado + Ordenamiento ───────────────────────────────────────────────────\r\n  rowFilter = computed(() => {\r\n    const term   = this.busqueda().toLowerCase().trim();\r\n    // Con búsqueda activa: busca en TODOS los nodos (ignora estado de expansión)\r\n    const source = term\r\n      ? this.fullFlatTree().filter(item => this.filtraItem(item, term))\r\n      : this.expandedFlatList();\r\n\r\n    // Ordenamiento solo cuando no hay búsqueda (preserva estructura de árbol)\r\n    const field = this.sortField();\r\n    const dir   = this.sortDir();\r\n    if (!term && field && dir !== 'none') {\r\n      return this.sortFlatList(source, field, dir);\r\n    }\r\n    return source;\r\n  });\r\n\r\n  // Ordena filas raíz (level 0) manteniendo sus descendientes agrupados\r\n  private sortFlatList(items: PivotFlatItem[], field: string, dir: 'asc' | 'desc'): PivotFlatItem[] {\r\n    const roots: PivotFlatItem[]              = [];\r\n    const childMap = new Map<string, PivotFlatItem[]>();\r\n    let currentRoot: string | null            = null;\r\n\r\n    for (const item of items) {\r\n      if (item._level === 0) {\r\n        roots.push(item);\r\n        currentRoot = item.idListTsi;\r\n        childMap.set(currentRoot, []);\r\n      } else if (currentRoot) {\r\n        childMap.get(currentRoot)!.push(item);\r\n      }\r\n    }\r\n\r\n    const sorted = [...roots].sort((a, b) => {\r\n      const va = a._format?.[field] ?? a[field] ?? '';\r\n      const vb = b._format?.[field] ?? b[field] ?? '';\r\n      if (typeof va === 'number' && typeof vb === 'number') return dir === 'asc' ? va - vb : vb - va;\r\n      const na = Number(va), nb = Number(vb);\r\n      if (!isNaN(na) && !isNaN(nb)) return dir === 'asc' ? na - nb : nb - na;\r\n      const cmp = String(va).toLowerCase().localeCompare(String(vb).toLowerCase(), undefined, { numeric: true });\r\n      return dir === 'asc' ? cmp : -cmp;\r\n    });\r\n\r\n    const result: PivotFlatItem[] = [];\r\n    for (const root of sorted) {\r\n      result.push(root);\r\n      result.push(...(childMap.get(root.idListTsi) ?? []));\r\n    }\r\n    return result;\r\n  }\r\n\r\n  // ── Virtual scroll ────────────────────────────────────────────────────────────\r\n  colSpan = computed(() =>\r\n    this.columns().filter(c => c.visible !== false).length +\r\n    (this.expandOn() ? 0 : 1) +\r\n    (this.withCheckbox() ? 1 : 0) +\r\n    (this.customActions() ? 1 : 0)\r\n  );\r\n\r\n  // Colspan del bloque de datos (columnas visibles), usado por el `#levelTemplate` por nivel\r\n  dataColSpan = computed(() =>\r\n    this.columns().filter(c => this.validaVisibilidad(c.visible) && this.visibilidadColumn()[c.fieldname] !== false).length\r\n  );\r\n\r\n  totalHeight = computed(() => this.rowFilter().length * this.rowHeight());\r\n\r\n  startIndex = computed(() => Math.max(0, Math.floor(this.scrollTop() / this.rowHeight()) - this.buffer()));\r\n\r\n  endIndex = computed(() => {\r\n    const visible = Math.ceil(this.containerHeight() / this.rowHeight());\r\n    return Math.min(this.rowFilter().length - 1, this.startIndex() + visible + this.buffer() * 2);\r\n  });\r\n\r\n  visibleRows = computed(() => this.rowFilter().slice(this.startIndex(), this.endIndex() + 1));\r\n\r\n  paddingTop    = computed(() => this.startIndex() * this.rowHeight());\r\n  paddingBottom = computed(() => Math.max(0, (this.rowFilter().length - this.endIndex() - 1) * this.rowHeight()));\r\n\r\n  // ── ResizeObserver ────────────────────────────────────────────────────────────\r\n  private resizeObserver?: ResizeObserver;\r\n\r\n  private resizeEffect = effect(() => {\r\n    if (!this.scrollContainer()) return;\r\n    const el = this.scrollContainer()!.nativeElement;\r\n    this.containerHeight.set(el.clientHeight);\r\n    if (typeof ResizeObserver !== 'undefined') {\r\n      this.resizeObserver?.disconnect();\r\n      this.resizeObserver = new ResizeObserver(() => {\r\n        this.containerHeight.set(el.clientHeight);\r\n        this.scrollTop.set(el.scrollTop);\r\n      });\r\n      this.resizeObserver.observe(el);\r\n    }\r\n  });\r\n\r\n  private scrollEffect = effect(() => {\r\n    const rows     = this.rowFilter();\r\n    const selected = untracked(() => this.selectedRow());\r\n    if (rows.length > 0 && selected != null) {\r\n      queueMicrotask(() => this.scrollToSelected(selected));\r\n    }\r\n  });\r\n\r\n  ngOnDestroy() {\r\n    this.resizeObserver?.disconnect();\r\n  }\r\n\r\n  // ── Manejadores de scroll ─────────────────────────────────────────────────────\r\n  onScroll(event: Event) {\r\n    this.scrollTop.set((event.target as HTMLDivElement).scrollTop);\r\n  }\r\n\r\n  private scrollToSelected(selected: any) {\r\n    const rows = this.rowFilter();\r\n    const idx  = this.identifier().length < 1\r\n      ? (typeof selected === 'number' ? selected : -1)\r\n      : rows.findIndex(r => this.concatenarValue(r, this.identifier()) === selected);\r\n    if (idx < 0 || !this.scrollContainer()?.nativeElement) return;\r\n    const targetTop  = idx * this.rowHeight();\r\n    const container  = this.scrollContainer()!.nativeElement;\r\n    const containerH = this.containerHeight();\r\n    if (targetTop < container.scrollTop || targetTop + this.rowHeight() > container.scrollTop + containerH) {\r\n      container.scrollTop = targetTop - containerH / 2;\r\n    }\r\n  }\r\n\r\n  // ── Selección de fila ─────────────────────────────────────────────────────────\r\n  selectRow(row: PivotFlatItem, idList: string) {\r\n    this.rowEvent.emit({ usecase: TABLE_EVENTS.CLICK, data: row });\r\n    const val = this.identifier().length < 1 ? idList : this.concatenarValue(row, this.identifier());\r\n    this.selectedRow.set(val);\r\n  }\r\n\r\n  isSelected(row: PivotFlatItem, idList: string): boolean {\r\n    const val = this.identifier().length < 1 ? idList : this.concatenarValue(row, this.identifier());\r\n    return this.selectedRow() === val;\r\n  }\r\n\r\n  // ── Expandir / Colapsar ───────────────────────────────────────────────────────\r\n  toggleExpand(event: MouseEvent, row: PivotFlatItem) {\r\n    event.stopPropagation();\r\n    const id = row.idListTsi;\r\n\r\n    if (this.expandedIds().has(id)) {\r\n      // Colapsar: elimina el nodo y todos sus descendientes del set\r\n      this.expandedIds.update(set => {\r\n        const next = new Set(set);\r\n        next.delete(id);\r\n        this.removeDescendantIds(row, next);\r\n        return next;\r\n      });\r\n    } else {\r\n      this.expandedIds.update(set => { const s = new Set(set); s.add(id); return s; });\r\n      if (this.lazyLoad() && !(row[this.childrenKey()]?.length)) {\r\n        this.loadingIds.update(s => { const n = new Set(s); n.add(id); return n; });\r\n        this.expandEvent.emit({ row, level: row._level });\r\n      }\r\n    }\r\n  }\r\n\r\n  private removeDescendantIds(node: PivotFlatItem, set: Set<string>) {\r\n    const children: any[] = node[this.childrenKey()] ?? [];\r\n    for (const child of children) {\r\n      set.delete(child.idListTsi);\r\n      this.removeDescendantIds(child, set);\r\n    }\r\n  }\r\n\r\n  /** Llama desde el padre tras inyectar hijos en lazyLoad para quitar el spinner */\r\n  finishLazyLoad(parentId: string) {\r\n    this.loadingIds.update(s => { const n = new Set(s); n.delete(parentId); return n; });\r\n  }\r\n\r\n  getIndentPx(level: number): string {\r\n    return `${level * this.indentSize() + 8}px`;\r\n  }\r\n\r\n  getLevelClass(level: number): string {\r\n    return `ll-row--level-${Math.min(level, 3)}`;\r\n  }\r\n\r\n  // ── Búsqueda ──────────────────────────────────────────────────────────────────\r\n  textoDigitado(event: Event) {\r\n    const val = (event.target as HTMLInputElement).value;\r\n    this.busqueda.set(val);\r\n    this.scrollTop.set(0);\r\n    const container = this.scrollContainer()?.nativeElement;\r\n    if (container) container.scrollTop = 0;\r\n  }\r\n\r\n  filtrarColumnas = computed(() => {\r\n    const filtro: Record<string, boolean> = {};\r\n    this.columns().forEach(col => { if (col.fieldname) filtro[col.fieldname] = true; });\r\n    return filtro;\r\n  });\r\n\r\n  toggleFiltros(event: Event) {\r\n    const checked = (event.target as HTMLInputElement).checked;\r\n    const filtros = this.filtrarColumnas();\r\n    Object.keys(filtros).forEach(key => (filtros[key] = checked));\r\n  }\r\n\r\n  private filtraItem(item: any, term: string): boolean {\r\n    return Object.entries(this.filtrarColumnas())\r\n      .filter(([, active]) => active)\r\n      .some(([campo]) => {\r\n        const val = (item._format?.[campo] ?? item[campo] ?? '').toString().toLowerCase();\r\n        return val.includes(term);\r\n      });\r\n  }\r\n\r\n  getHighlight(text: any, fieldname: string): string {\r\n    if (text == null) text = '';\r\n    if (!this.filtrarColumnas()[fieldname] || !this.busqueda()) return String(text);\r\n    if (typeof text !== 'string') text = String(text);\r\n    return text.replace(new RegExp(`(${this.busqueda()})`, 'gi'), '<mark>$1</mark>');\r\n  }\r\n\r\n  // ── Ordenamiento ──────────────────────────────────────────────────────────────\r\n  toggleSort(field: string) {\r\n    if (this.sortField() !== field) { this.sortField.set(field); this.sortDir.set('asc'); return; }\r\n    if (this.sortDir() === 'asc')   { this.sortDir.set('desc'); return; }\r\n    if (this.sortDir() === 'desc')  { this.sortDir.set('none'); this.sortField.set(null); return; }\r\n    this.sortDir.set('asc');\r\n  }\r\n\r\n  // ── Checkboxes ────────────────────────────────────────────────────────────────\r\n  allCheck(event: Event) {\r\n    const checked = (event.target as HTMLInputElement).checked;\r\n    this.rowEvent.emit({ usecase: TABLE_EVENTS.CHECK_ALL, data: checked });\r\n    this.selectItems.set(checked ? this.rowFilter().map(r => ({ id: r.idListTsi, data: r })) : []);\r\n  }\r\n\r\n  validaAllCheck(): boolean {\r\n    const total       = this.rowFilter();\r\n    const selectedIds = new Set(this.selectItems().map(s => s.id));\r\n    return total.length > 0 && total.every(r => selectedIds.has(r.idListTsi));\r\n  }\r\n\r\n  isItemSelected(id: string): boolean {\r\n    return this.selectItems().some(s => s.id === id);\r\n  }\r\n\r\n  toogleItem(idList: string, event: Event) {\r\n    const row     = this.rowFilter().find(r => r.idListTsi === idList);\r\n    if (!row) return;\r\n    const checked = (event.target as HTMLInputElement).checked;\r\n    this.rowEvent.emit({ usecase: TABLE_EVENTS.CHECK_ROW, data: { row, checked } });\r\n    if (checked) {\r\n      this.selectItems.update(sel => [...sel, { id: idList, data: row }]);\r\n    } else {\r\n      this.selectItems.update(sel => sel.filter(s => s.id !== idList));\r\n    }\r\n  }\r\n\r\n  // ── Render de celdas ─────────────────────────────────────────────────────────\r\n  resolveCell(col: string, row: any): CellRender | null {\r\n    const value = row[col];\r\n    const r     = this.rendered().find(r => r.matches(col, value, row));\r\n    return r ? r.render(value, row) : null;\r\n  }\r\n\r\n  getPosition(col: TableData): string {\r\n    if (col.position) return `text-${col.position}`;\r\n    if (['decimal', 'number'].includes(col.tipo!)) return 'text-end';\r\n    if (['fecha', 'date'].includes(col.tipo!))     return 'text-center';\r\n    return 'text-start';\r\n  }\r\n\r\n  validaVisibilidad(value: boolean): boolean {\r\n    return validarBoolean(value);\r\n  }\r\n\r\n  visibilidadColumn = computed(() => {\r\n    const vis: Record<string, boolean> = {};\r\n    this.columns().forEach(col => { if (col.fieldname) vis[col.fieldname] = true; });\r\n    return vis;\r\n  });\r\n\r\n  // ── Eventos de fila ───────────────────────────────────────────────────────────\r\n  onDoubleClick(row: PivotFlatItem) {\r\n    if (window.getSelection()?.type === 'Range') return;\r\n    this.rowEvent.emit({ usecase: TABLE_EVENTS.DOUBLE_CLICK, data: row });\r\n  }\r\n\r\n  // ── Selección de celda ───────────────────────────────────────────────────────\r\n  onCellClick(event: MouseEvent, row: PivotFlatItem, field: string) {\r\n    event.stopPropagation();\r\n    this.selectRow(row, row.idListTsi);\r\n    this.selectedCell.set({ rowId: row.idListTsi, field });\r\n    this.cellEvent.emit({\r\n      row,\r\n      field,\r\n      value:     row[field],\r\n      formatted: row._format?.[field] ?? row[field],\r\n      level:     row._level,\r\n    });\r\n  }\r\n\r\n  isCellSelected(rowId: string, field: string): boolean {\r\n    const c = this.selectedCell();\r\n    return !!c && c.rowId === rowId && c.field === field;\r\n  }\r\n\r\n  onRightClick(event: MouseEvent, row: PivotFlatItem) {\r\n    event.preventDefault();\r\n    this.rowEvent.emit({ usecase: TABLE_EVENTS.RIGHT_CLICK, data: row });\r\n  }\r\n\r\n  // ── Helpers ───────────────────────────────────────────────────────────────────\r\n  concatenarValue(obj: any, fields: string[]): string {\r\n    return fields.reduce((acc, f) => acc + (obj[f] ?? ''), '');\r\n  }\r\n}\r\n","@if (withFiltro()) {\n<div class=\"ll-search-bar\">\n  <div class=\"ll-search-bar__left\">\n    <ng-container *ngTemplateOutlet=\"contentFilter();\"></ng-container>\n  </div>\n  <div class=\"ll-search-bar__right\">\n    <div class=\"ll-search-group\">\n      <label class=\"form-label mb-0 ll-search-label\">Buscar:</label>\n      <div class=\"ll-search-input-wrap\">\n        <input type=\"text\" class=\"form-control cw-250\" placeholder=\"Buscar...\"\n          [value]=\"busqueda()\" (input)=\"textoDigitado($event)\" />\n        <app-dropdown-cdk>\n          <ng-template #trigger>\n            <button class=\"btn btn-dark boton-buscar fs-7\">\n              <i class=\"fas fa-cog\"></i>\n            </button>\n          </ng-template>\n          <ng-template #content>\n            <div class=\"popover-menu-filter bg-white shadow\" @dropdownAnimation>\n              <div class=\"popover-title fs-7 bg-white\">Filtros</div>\n              <div class=\"form-check form-switch text-start d-flex align-items-center\">\n                <input class=\"form-check-input py-0 my-0 cw-25 ch-15\" type=\"checkbox\" [checked]=\"true\"\n                  (change)=\"toggleFiltros($event)\" id=\"filter_pv_todos\" />\n                <label class=\"form-check-label ps-2 fs-6 mb-0 cursor-pointer\" for=\"filter_pv_todos\">Todos</label>\n              </div>\n              @for (col of columns(); track col.caption) {\n              <div class=\"form-check form-switch text-start d-flex align-items-center\">\n                <input type=\"checkbox\" class=\"form-check-input py-0 my-0 cw-25 ch-15\"\n                  id=\"{{ 'filter_pv_' + col.caption }}\" [(ngModel)]=\"filtrarColumnas()[col.fieldname]\" />\n                <label class=\"form-check-label ps-2 fs-6 cursor-pointer mb-0\"\n                  for=\"{{ 'filter_pv_' + col.caption }}\">{{ col.caption }}</label>\n              </div>\n              }\n            </div>\n          </ng-template>\n        </app-dropdown-cdk>\n      </div>\n    </div>\n  </div>\n</div>\n}\n\n<div #scrollContainer class=\"ll-scroll-container\"\n  [style.height]=\"withHeight() ? heightStyle() : ''\"\n  [style.max-height]=\"heightStyle()\"\n  (scroll)=\"onScroll($event)\">\n  <table class=\"ll-table\">\n\n    <!-- ── HEADER sticky ──────────────────────────────────────────────────── -->\n    <thead class=\"ll-thead\">\n      <tr>\n        <!-- Columna de expansión: solo cuando no hay expandOn -->\n        @if (!expandOn()) {\n        <th class=\"ll-pivot-th-expand\"></th>\n        }\n\n        @if (withCheckbox()) {\n        <th class=\"cw-20\">\n          <label>\n            <input type=\"checkbox\" name=\"chk_pv_all\" id=\"chk_pv_all\"\n              animatedCheckbox [checked]=\"validaAllCheck()\" (change)=\"allCheck($event)\">\n          </label>\n        </th>\n        }\n\n        @if (customActions()) {\n        <th class=\"cw-40\">\n          <app-dropdown-cdk>\n            <ng-template #trigger>\n              <button class=\"btn p-0 d-flex mx-auto border-0 icon-table\"><i class=\"fas fa-cog\"></i></button>\n            </ng-template>\n            <ng-template #content>\n              <div class=\"popover-menu-column bg-white shadow mt-2\" @dropdownAnimation>\n                <div class=\"popover-title fs-7 bg-white\">Columnas</div>\n                @for (col of columns(); track col.caption) {\n                @if (col.caption) {\n                <div class=\"form-check form-switch text-start d-flex align-items-center\">\n                  <input type=\"checkbox\" class=\"form-check-input py-0 my-0 cw-25 ch-15\"\n                    id=\"{{ 'switch_pv_' + col.caption }}\" [(ngModel)]=\"visibilidadColumn()[col.fieldname]\" />\n                  <label class=\"form-check-label ps-2 fs-6 cursor-pointer font-label mb-0\"\n                    for=\"{{ 'switch_pv_' + col.caption }}\">{{ col.caption }}</label>\n                </div>\n                }\n                }\n              </div>\n            </ng-template>\n          </app-dropdown-cdk>\n        </th>\n        }\n\n        @for (col of columns(); track $index) {\n        @if (validaVisibilidad(col.visible) && visibilidadColumn()[col.fieldname] !== false) {\n        <th [title]=\"col.caption\" [style.width.px]=\"col.width || null\"\n          [style.min-width.px]=\"col.width || null\" [style.max-width.px]=\"col.width || null\"\n          class=\"ll-th-sortable\" (click)=\"toggleSort(col.fieldname)\">\n          <span class=\"ll-th-content {{getPosition(col)}} \">\n            <span class=\"ll-th-caption\">{{ col.caption }}</span>\n            @if (sortField() === col.fieldname) {\n            <i class=\"ms-1\"\n              [ngClass]=\"sortDir() === 'asc' ? 'fas fa-angle-up fs-6' : 'fas fa-angle-down fs-6'\"></i>\n            } @else {\n            <i class=\"fas fa-sort ms-1 ll-sort-idle\"></i>\n            }\n          </span>\n        </th>\n        }\n        }\n      </tr>\n    </thead>\n\n    <!-- ── BODY virtual ────────────────────────────────────────────────────── -->\n    <tbody>\n      <!-- Spacer superior -->\n      @if (paddingTop() > 0) {\n      <tr class=\"ll-spacer\" [style.height.px]=\"paddingTop()\">\n        <td [attr.colspan]=\"colSpan()\"></td>\n      </tr>\n      }\n\n      <!-- Filas visibles -->\n      @for (row of visibleRows(); track row.idListTsi) {\n      @let idList = row.idListTsi;\n      <tr class=\"ll-row\"\n        [ngClass]=\"getLevelClass(row._level)\"\n        [class.ll-row--selected]=\"isSelected(row, idList)\"\n        (click)=\"selectRow(row, idList)\"\n        (dblclick)=\"onDoubleClick(row)\"\n        (contextmenu)=\"onRightClick($event, row)\">\n\n        <!-- Celda dedicada de expansión: solo cuando no hay expandOn -->\n        @if (!expandOn()) {\n        <td class=\"ll-pivot-expand-cell\" [style.padding-left]=\"getIndentPx(row._level)\">\n          @if (row._isLoading) {\n          <span class=\"spinner-border spinner-border-sm ll-pivot-spinner\" role=\"status\"></span>\n          } @else if (row._hasChildren && !customLevels().includes(row._level)) {\n          <a class=\"ll-pivot-toggle text-dark cursor-pointer\" (click)=\"toggleExpand($event, row)\">\n            <i class=\"fa-solid\" [class.fa-chevron-right]=\"!row._isExpanded\"\n              [class.fa-chevron-down]=\"row._isExpanded\"></i>\n          </a>\n          } @else {\n          <span class=\"ll-pivot-leaf\"></span>\n          }\n        </td>\n        }\n\n        @if (withCheckbox()) {\n        <td class=\"text-center b-table\">\n          <label>\n            <input type=\"checkbox\" [name]=\"'chk_pv_' + idList\" [id]=\"'chk_pv_' + idList\"\n              animatedCheckbox [checked]=\"isItemSelected(idList)\"\n              (click)=\"$event.stopPropagation()\"\n              (change)=\"toogleItem(idList, $event)\">\n          </label>\n        </td>\n        }\n\n        @if (customActions()) {\n        <td class=\"text-center\">\n          <ng-container *ngTemplateOutlet=\"customActions(); context: { $implicit: row, level: row._level }\"></ng-container>\n        </td>\n        }\n\n        @if (customLevels().includes(row._level) && levelTemplate()) {\n        <td [attr.colspan]=\"dataColSpan()\">\n          <ng-container *ngTemplateOutlet=\"levelTemplate(); context: { $implicit: row, level: row._level, columns: columns() }\">\n          </ng-container>\n        </td>\n        } @else {\n        @for (col of columns(); track $index) {\n        @if (validaVisibilidad(col.visible) && visibilidadColumn()[col.fieldname] !== false) {\n        @if (columnDefMap().has(col.fieldname)) {\n        <td>\n          <ng-container *ngTemplateOutlet=\"columnDefMap().get(col.fieldname)!; context: { $implicit: row, column: col, level: row._level }\">\n          </ng-container>\n        </td>\n        } @else if (col.template) {\n        <td>\n          <ng-container *ngTemplateOutlet=\"col.template; context: { $implicit: row, column: col, level: row._level }\">\n          </ng-container>\n        </td>\n        } @else {\n        @switch (col.tipo) {\n\n        @case ('cell-render') {\n        @let resolverItem = resolveCell(col.fieldname, row);\n        @if (resolverItem) {\n        <td [title]=\"resolverItem.text\" [class.text-center]=\"resolverItem.icon\">\n          @if (resolverItem.icon) {\n          <i class=\"fs-5\" [ngClass]=\"resolverItem.icon\"></i>\n          } @else if (resolverItem.class) {\n          <span [ngClass]=\"resolverItem.class\">{{ resolverItem.text }}</span>\n          } @else {\n          {{ resolverItem.text }}\n          }\n        </td>\n        }\n        }\n\n        @default {\n        @if (col.fieldname === expandOn()) {\n        <!-- Celda con ícono de expansión incrustado -->\n        <td class=\"ll-pivot-expand-inline {{ getPosition(col) }}\"\n          [class.cursor-pointer]=\"row._hasChildren\"\n          [class.ll-cell--selected]=\"withCellSelect() && isCellSelected(idList, col.fieldname)\"\n          [style.padding-left]=\"getIndentPx(row._level)\"\n          [style.width]=\"col.width ? col.width + 'px' : 'auto'\"\n          [style.max-width]=\"col.width ? col.width + 'px' : 'auto'\"\n          [attr.title]=\"row[col.fieldname] || null\"\n          [ngClass]=\"rowClassFn() ? rowClassFn()!(row) : null\"\n          (click)=\"row._hasChildren ? toggleExpand($event, row) : (withCellSelect() ? onCellClick($event, row, col.fieldname) : null)\">\n          @if (row._isLoading) {\n          <span class=\"spinner-border spinner-border-sm ll-pivot-spinner me-1\" role=\"status\"></span>\n          } @else if (row._hasChildren) {\n          <a class=\"ll-pivot-toggle text-dark cursor-pointer me-1\" (click)=\"toggleExpand($event, row)\">\n            <i class=\"fa-solid\" [class.fa-chevron-right]=\"!row._isExpanded\"\n              [class.fa-chevron-down]=\"row._isExpanded\"></i>\n          </a>\n          } @else {\n          <span class=\"ll-pivot-leaf me-1\"></span>\n          }\n          <span [innerHTML]=\"getHighlight(row._format?.[col.fieldname] ?? row[col.fieldname], col.fieldname)\"></span>\n        </td>\n        } @else {\n        <td [innerHTML]=\"getHighlight(row._format?.[col.fieldname] ?? row[col.fieldname], col.fieldname)\"\n          [style.width]=\"col.width ? col.width + 'px' : 'auto'\"\n          [style.max-width]=\"col.width ? col.width + 'px' : 'auto'\"\n          [attr.title]=\"row[col.fieldname] || null\"\n          [ngClass]=\"rowClassFn() ? rowClassFn()!(row) : null\"\n          [class.ll-cell--selected]=\"withCellSelect() && isCellSelected(idList, col.fieldname)\"\n          [class.ll-cell--selectable]=\"withCellSelect()\"\n          class=\"{{ getPosition(col) }}\"\n          (click)=\"withCellSelect() ? onCellClick($event, row, col.fieldname) : null\">\n        </td>\n        }\n        }\n\n        }\n        }\n        }\n        }\n        }\n\n      </tr>\n      }\n\n      <!-- Estado vacío -->\n      @if (rowFilter().length === 0) {\n      <tr>\n        <td [attr.colspan]=\"colSpan()\"\n          class=\"ll-empty\">\n          Sin datos\n        </td>\n      </tr>\n      }\n\n      <!-- Spacer inferior -->\n      @if (paddingBottom() > 0) {\n      <tr class=\"ll-spacer\" [style.height.px]=\"paddingBottom()\">\n        <td [attr.colspan]=\"colSpan()\"></td>\n      </tr>\n      }\n    </tbody>\n\n  </table>\n</div>\n\n","import { DecimalPipe, NgClass, NgTemplateOutlet } from '@angular/common';\r\nimport { Component, computed, contentChild, effect, ElementRef, HostListener, inject, input, linkedSignal, model, output, QueryList, signal, TemplateRef, untracked, viewChild, ViewChild, ViewChildren } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { DropdownCdkComponent } from \"../../dropdown/dropdown-cdk/dropdown-cdk.component\";\r\nimport { CardMobileComponent } from \"../card-mobile/card-mobile.component\";\r\nimport { CellRender, CellRendered } from '../../../models/cell-rendered';\r\nimport { TableData } from '../../../models/table-data.model';\r\nimport { formatNumber, validarBoolean } from 'shared-tsi';\r\nimport { FormateadorService } from '../../../service/formateador.service';\r\nimport { SelectedRow } from '../../../models/selected-row';\r\nimport { fadeInOut, dropdownAnimation } from '../../../directivas/animaciones/fade-animation';\r\nimport { AnimatedCheckboxDirective } from '../../../directivas/estilos/animated-checkbox.directive';\r\n\r\ninterface HeaderSegment {\r\n  type: 'column' | 'group'\r\n  column?: TableData\r\n  group?: {\r\n    label: string\r\n    colspan: number\r\n  }\r\n}\r\n\r\n@Component({\r\n  selector: 'app-table-agrupada',\r\n  imports: [DropdownCdkComponent, FormsModule, NgClass, NgTemplateOutlet, CardMobileComponent, AnimatedCheckboxDirective],\r\n  templateUrl: './table-agrupada.component.html',\r\n  styleUrl: './table-agrupada.component.scss',\r\n  animations: [fadeInOut, dropdownAnimation]\r\n})\r\nexport class TableAgrupadaComponent {\r\n\r\n  tableHeaders = viewChild<QueryList<ElementRef>>('thElement')\r\n  customActions = contentChild<TemplateRef<any>>('customActions')\r\n  anchor = viewChild<ElementRef<HTMLTableRowElement>>('anchor')\r\n\r\n  private readonly formateador = inject(FormateadorService)\r\n  private decimalPipe = inject(DecimalPipe)\r\n  titleTabla = input<string>('Contrato')\r\n  rows = input<any[]>([])\r\n  columns = input<any[]>([])\r\n  withDetails = input<boolean>(false)\r\n  withFiltro = input<boolean>(false)\r\n  altoContainer = input<number>()\r\n  colorHeader = input<'normal' | 'light'>('normal')\r\n\r\n  busqueda = signal<string>('')\r\n  selectedRow = model<any>(null)\r\n  identifier = input<string[]>([])\r\n\r\n  altoContenedor = signal<number>(0)\r\n  withHeight = input<boolean>(false)\r\n  rendered = input<CellRendered[]>([])\r\n  withTotal = input<boolean>(false)\r\n  withCheckbox = input<boolean>(false)\r\n  selectItems = model<SelectedRow<any>[]>([])\r\n  isDarkMode = input<boolean>(false)\r\n\r\n  sortColumn: string | null = null\r\n  sortDirection: 'asc' | 'desc' = 'asc'\r\n  expandedRows: number = -1\r\n\r\n  activeMobileMode = input<boolean>(true)\r\n\r\n  /* VARIABLES PARA OPTIMIZAR */\r\n  dataVirtual = signal<any[]>([])\r\n  isLoading = signal(false);\r\n  isLoadingResponsive = signal(false)\r\n\r\n  private loadedCount = 0;\r\n  private observer!: IntersectionObserver;\r\n  maxItems = input<number>(50)\r\n  batchSize = input<number>(40)\r\n\r\n  rowClassFn = input<(row: any) => string | string[] | Record<string, boolean>>(null);\r\n  rowDisabledFn = input<((row: any) => boolean) | null>(null);\r\n\r\n  hasColumnGroups = computed(() => this.columns().some(col => !!col.group))\r\n  groupedColumns = computed(() => {\r\n    if (!this.hasColumnGroups()) return []\r\n    return this.columns().filter(c => c.group && c.visible !== false)\r\n  })\r\n\r\n  headerSegments = computed<HeaderSegment[]>(() => {\r\n    const cols = this.columns().filter(c => c.visible !== false)\r\n    if (!cols.some(c => c.group)) {\r\n      return cols.map(col => ({ type: 'column', column: col }))\r\n    }\r\n    const result: HeaderSegment[] = []\r\n    let i = 0\r\n    while (i < cols.length) {\r\n      const col = cols[i]\r\n      if (!col.group) {\r\n        result.push({ type: 'column', column: col })\r\n        i++\r\n        continue\r\n      }\r\n      const groupName = col.group\r\n      let colspan = 0\r\n      while (i < cols.length && cols[i].group === groupName) {\r\n        colspan++\r\n        i++\r\n      }\r\n      result.push({ type: 'group', group: { label: groupName, colspan } })\r\n    }\r\n    return result\r\n  })\r\n\r\n  rowEvent = output<any>()\r\n\r\n  rowFormat = computed(() => this.formateador.procesarLista(this.rows(), this.columns()))\r\n\r\n  rowFilter = linkedSignal(() => {\r\n    const term = this.busqueda().toLowerCase()\r\n    const currentRows = this.rowFormat?.() || []\r\n    return currentRows.filter(item => this.filtraItem(item, term))\r\n  })\r\n\r\n  filtrarColumnas = linkedSignal(() => {\r\n    const columns = this.columns()\r\n    const filtro: { [caption: string]: boolean } = {}\r\n    columns.forEach((col) => {\r\n      if (col.fieldname) {\r\n        filtro[col.fieldname] = true\r\n      }\r\n    })\r\n    return filtro\r\n  })\r\n\r\n  toggleFiltros(event: Event) {\r\n    const checked = (event.target as HTMLInputElement).checked\r\n    const filtros = this.filtrarColumnas()\r\n    Object.keys(filtros).forEach(key => {\r\n      filtros[key] = checked\r\n    })\r\n  }\r\n\r\n  visibilidadColumn = linkedSignal(() => {\r\n    const columnVisibility: { [key: string]: boolean } = {}\r\n    this.columns().forEach(col => {\r\n      if (col.fieldname) {\r\n        columnVisibility[col.fieldname] = true\r\n      }\r\n    })\r\n    return columnVisibility\r\n  })\r\n\r\n  concatenarValue(obj: any, value: string[]) {\r\n    let result = ''\r\n    value.forEach(el => {\r\n      result += obj[el]\r\n    })\r\n    return result\r\n  }\r\n\r\n  isMobile = signal<boolean>(window.innerWidth <= 768)\r\n\r\n  constructor() {\r\n    effect(() => {\r\n      const size = (this.rowFilter() ?? []).length\r\n\r\n      const alto = this.altoContainer()\r\n      if (alto > 0 && alto < this.altoContenedor()) {\r\n        setTimeout(() => {\r\n          this.altoContenedor.set(alto)\r\n        }, 300)\r\n      }\r\n      if (alto > 0 && alto > this.altoContenedor()) {\r\n        this.altoContenedor.set(alto)\r\n      }\r\n\r\n      const selected = untracked(() => this.selectedRow())\r\n      if (size > 0 && selected) {\r\n        queueMicrotask(() => {\r\n          const el = document.getElementById('row_table_' + selected)\r\n          el?.scrollIntoView({ behavior: 'smooth', block: 'nearest' })\r\n        })\r\n      }\r\n    })\r\n\r\n    effect(() => this.resetSroll());\r\n\r\n    effect(() => {\r\n      if (!this.activeMobileMode()) return\r\n      this.isMobile();\r\n      this.isLoadingResponsive.set(true);\r\n      setTimeout(() => this.isLoadingResponsive.set(false), 200);\r\n    });\r\n\r\n    effect(() => {\r\n      if (this.anchor()) {\r\n        this.actionsAnchor()\r\n      }\r\n    })\r\n  }\r\n\r\n  @HostListener('window:resize', ['$event'])\r\n  onResize(event: any) {\r\n    if (!this.activeMobileMode()) return\r\n    this.isMobile.set(event.target.innerWidth <= 768);\r\n  }\r\n\r\n  resetSroll() {\r\n    const filtered = this.rowFilter();\r\n    const firstBatch = filtered.slice(0, this.batchSize());\r\n    this.dataVirtual.set(firstBatch);\r\n    this.loadedCount = firstBatch.length;\r\n  }\r\n\r\n  actionsAnchor() {\r\n    this.observer = new IntersectionObserver(entries => {\r\n      if (entries[0].isIntersecting && this.loadedCount < this.rowFilter().length && !this.isLoading()) {\r\n        this.loadMore();\r\n      }\r\n    });\r\n    this.observer.observe(this.anchor().nativeElement);\r\n  }\r\n\r\n  selectRow(index: any) {\r\n    if (this.identifier().length < 1) {\r\n      return this.selectedRow.set(index)\r\n    }\r\n    this.selectedRow.set(this.concatenarValue(index, this.identifier()))\r\n  }\r\n\r\n  sortTable(column: string) {\r\n    if (this.sortColumn == column) {\r\n      this.sortDirection = this.sortDirection == 'asc' ? 'desc' : 'asc'\r\n    } else {\r\n      this.sortColumn = column\r\n      this.sortDirection = 'asc'\r\n    }\r\n\r\n    const sorted = [...this.rowFilter()].sort((a, b) => {\r\n      const valueA = a[column] ?? '';\r\n      const valueB = b[column] ?? '';\r\n\r\n      if (typeof valueA === 'number' && typeof valueB === 'number') {\r\n        return this.sortDirection === 'asc'\r\n          ? valueA - valueB\r\n          : valueB - valueA;\r\n      }\r\n\r\n      // VALIDACION ADICIONAL, SI ES TEXTO ,PERO NUMEROS\r\n      const numA = Number(valueA);\r\n      const numB = Number(valueB);\r\n\r\n      if (!isNaN(numA) && !isNaN(numB)) {\r\n        return this.sortDirection === 'asc'\r\n          ? numA - numB\r\n          : numB - numA;\r\n      }\r\n\r\n      return this.sortDirection === 'asc'\r\n        ? valueA.toString().localeCompare(valueB.toString())\r\n        : valueB.toString().localeCompare(valueA.toString());\r\n    });\r\n\r\n    this.rowFilter.set(sorted);\r\n    this.resetSroll()\r\n\r\n    // this.dataVirtual().sort((a, b) => {\r\n    //   const valueA = a[column] ?? ''\r\n    //   const valueB = b[column] ?? ''\r\n\r\n    //   if (typeof valueA == 'number' && typeof valueB == 'number') {\r\n    //     return this.sortDirection == 'asc' ? valueA - valueB : valueB - valueA\r\n    //   } else {\r\n    //     return this.sortDirection == 'asc'\r\n    //       ? valueA.toString().localeCompare(valueB.toString())\r\n    //       : valueB.toString().localeCompare(valueA.toString())\r\n    //   }\r\n    // })\r\n  }\r\n\r\n  toggleExpandRow(index: number) {\r\n    this.expandedRows = this.expandedRows == index ? -1 : index\r\n  }\r\n\r\n  textoDigitado(event: Event) {\r\n    const value = (event.target as HTMLInputElement).value\r\n    this.busqueda.set(value)\r\n  }\r\n\r\n  getHighlight(text: any, fieldname: string): string {\r\n    if (text == null) {\r\n      text = ''\r\n    }\r\n    if (!this.filtrarColumnas()[fieldname] || !this.busqueda()) return text\r\n    if (typeof text !== 'string') {\r\n      text = text.toString()\r\n    }\r\n    const regex = new RegExp(`(${this.busqueda()})`, 'gi')\r\n    return text?.replace(regex, '<mark>$1</mark>')\r\n  }\r\n\r\n  getSituacionNumberFromColumns(row: any, columns: any[]): number {\r\n    const situacionColumn = columns.find(col => col.type == 'situacion_number')\r\n    if (situacionColumn) {\r\n      return row[situacionColumn.prop] || 0\r\n    }\r\n    return 0\r\n  }\r\n\r\n  private filtraItem(item: any, term: string): boolean {\r\n    const columnasActivas = Object.entries(this.filtrarColumnas())\r\n      .filter(([_campo, activo]) => activo)\r\n    return columnasActivas.some(([campo]) => {\r\n      const raw = item[campo];\r\n      const formatted = item._format?.[campo];\r\n      const valor = (formatted ?? raw ?? '').toString().toLowerCase();\r\n      return valor.includes(term)\r\n    })\r\n  }\r\n\r\n  validaVisibilidad(value: boolean) {\r\n    return validarBoolean(value)\r\n  }\r\n\r\n  isCheckboxDisabled(row: any): boolean {\r\n    return this.rowDisabledFn?.()?.(row) ?? false\r\n  }\r\n\r\n  allCheck(event: Event) {\r\n    const input = event.target as HTMLInputElement\r\n    if (input.checked) {\r\n      const total = this.rowFilter()\r\n        .filter(r => !this.isCheckboxDisabled(r))\r\n        .map(r => ({ id: r.idListTsi, data: r }))\r\n      this.selectItems.set(total)\r\n    } else {\r\n      this.selectItems.set([])\r\n    }\r\n  }\r\n\r\n  validaAllCheck(): boolean {\r\n    const selectable = this.rowFilter().filter(r => !this.isCheckboxDisabled(r))\r\n    const selectedIds = new Set(this.selectItems().map(s => s.id));\r\n    return selectable.length > 0 && selectable.every(row => selectedIds.has(row.idListTsi));\r\n  }\r\n\r\n  isItemSelected(id: string): boolean {\r\n    return this.selectItems().some(item => item.id == id)\r\n  }\r\n\r\n  toogleItem(idList: string, event: Event) {\r\n    const row = this.rowFormat().find(r => r.idListTsi == idList)\r\n    if (!row || this.isCheckboxDisabled(row)) {\r\n      return\r\n    }\r\n\r\n    const input = event.target as HTMLInputElement\r\n    if (input.checked) {\r\n      const item: SelectedRow<any> = { id: idList, data: row };\r\n      this.selectItems.update(sel => [...sel, item])\r\n      return\r\n    }\r\n    this.selectItems.update(sel => sel.filter(s => s.id != idList))\r\n  }\r\n\r\n  resolveCell(col: string, row: any): CellRender | null {\r\n    const value = row[col]\r\n    const r = this.rendered().find(r => r.matches(col, value, row))\r\n    return r ? r.render(value, row) : null\r\n  }\r\n\r\n  getTotals(fieldname: string): string {\r\n    const itemsSelected = this.withCheckbox() ? this.selectItems().map(item => JSON.parse(item?.toString())) : this.rowFormat()\r\n    const final = itemsSelected.reduce((acc, row) => {\r\n      const val = row[fieldname]\r\n      return acc + (typeof val == 'number' ? val : 0)\r\n    }, 0)\r\n\r\n    return formatNumber(this.decimalPipe, final)\r\n  }\r\n\r\n  getColspanBeforeTotals(): number {\r\n    const firstTotalizableIndex = this.columns().findIndex(c => c.totalizable)\r\n    const result = firstTotalizableIndex >= 0 ? firstTotalizableIndex : this.columns.length\r\n    return this.withCheckbox() ? result + 1 : result\r\n  }\r\n\r\n  getRowClass(row: any): { [key: string]: boolean } {\r\n    return {\r\n      'text-error': row.situac == 'J',\r\n      'text-alerta': row.situac == 'L'\r\n    }\r\n  }\r\n\r\n  getPosition(col: TableData): string {\r\n    if (col.position) return `text-${col.position}`\r\n    if (['decimal', 'number'].includes(col.tipo)) return `text-end`\r\n    if (['fecha', 'date'].includes(col.tipo)) return `text-center`\r\n    return 'text-start'\r\n  }\r\n\r\n  private loadMore() {\r\n    this.isLoading.set(true);\r\n    setTimeout(() => {\r\n\r\n      const current = this.dataVirtual();\r\n      const next = this.rowFilter().slice(this.loadedCount, this.loadedCount + this.batchSize());\r\n      const merged = [...current];\r\n      for (const item of next) {\r\n        if (!merged.some(x => x.idListTsi === item.idListTsi)) {\r\n          merged.push(item);\r\n        }\r\n      }\r\n      this.dataVirtual.set(merged);\r\n      this.loadedCount += next.length;\r\n      this.isLoading.set(false);\r\n    }, 100);\r\n  }\r\n\r\n  onClick(row: any) {\r\n    this.rowEvent.emit({ usecase: 1, data: row })\r\n  }\r\n  onDoubleClick(row: any) {\r\n    if (window.getSelection()?.type === 'Range') return;\r\n    this.rowEvent.emit({ usecase: 2, data: row })\r\n  }\r\n  onRightClick(event: MouseEvent, row: any) {\r\n    event.preventDefault();\r\n    this.rowEvent.emit({ usecase: 3, data: row })\r\n  }\r\n\r\n}\r\n","@if (withFiltro()) {\r\n<div class=\"col-12 mb-2 mt-2 d-flex justify-content-end align-items-center\">\r\n    <label class=\"form-label me-2 pt-2\">Buscar</label>\r\n    <input type=\"text\" class=\"form-control cw-250\" (input)=\"textoDigitado($event)\">\r\n\r\n    <app-dropdown-cdk>\r\n        <ng-template #trigger>\r\n            <button class=\"btn btn-dark boton-buscar fs-7\">\r\n                <i class=\"fas fa-cog\"></i>\r\n            </button>\r\n        </ng-template>\r\n\r\n        <ng-template #content>\r\n            <div class=\"popover-menu-filter bg-white shadow\" @dropdownAnimation>\r\n                <div class=\"popover-title fs-7 bg-white\">\r\n                    Filtros\r\n                </div>\r\n\r\n                <div class=\"form-check form-switch text-start d-flex align-items-center\">\r\n                    <input class=\"form-check-input py-0 my-0 cw-25 ch-15\" type=\"checkbox\" [checked]=\"true\"\r\n                        (change)=\"toggleFiltros($event)\" />\r\n                    <label class=\"form-check-label ps-2 fs-6 mb-0 cursor-pointer\">\r\n                        Todos\r\n                    </label>\r\n                </div>\r\n\r\n                @for (col of columns(); track col.caption) {\r\n                <div class=\"form-check form-switch text-start d-flex align-items-center\">\r\n                    <input type=\"checkbox\" class=\"form-check-input py-0 my-0 cw-25 ch-15\"\r\n                        id=\"{{ 'filter_' + col.caption }}\" [(ngModel)]=\"filtrarColumnas()[col.fieldname]\" />\r\n                    <label class=\"form-check-label ps-2 fs-6 cursor-pointer mb-0\" for=\"{{ 'filter_' + col.caption }}\">\r\n                        {{ col.caption }}\r\n                    </label>\r\n                </div>\r\n                }\r\n            </div>\r\n        </ng-template>\r\n    </app-dropdown-cdk>\r\n</div>\r\n}\r\n\r\n<!-- VISTA MOBILE -->\r\n@if (activeMobileMode()) {\r\n@if (isLoadingResponsive()) {\r\n<div class=\"d-flex flex-column justify-content-center align-items-center py-2\">\r\n    <div class=\"spinner-border text-secondary mb-2\" role=\"status\"></div>\r\n    <span class=\"ms-2 fs-6\">Cargando...</span>\r\n</div>\r\n}\r\n\r\n@if (!isLoadingResponsive()) {\r\n@if (isMobile()) {\r\n<app-card-mobile [data]=\"rowFilter()\" [columns]=\"columns()\" [actions]=\"customActions()\" [identifier]=\"identifier()\"\r\n    [titleTabla]=\"titleTabla()\" [altoContainer]=\"altoContainer()\" />\r\n}\r\n@if (!isMobile()) {\r\n<ng-container *ngTemplateOutlet=\"table\"></ng-container>\r\n}\r\n}\r\n}\r\n@else {\r\n<ng-container *ngTemplateOutlet=\"table\"></ng-container>\r\n}\r\n\r\n<ng-template #table>\r\n    <div class=\"table-container table-responsive\"\r\n        [style.height]=\"withHeight() && altoContenedor() ? 'calc(100vh - ' + altoContenedor() + 'px)' : ''\"\r\n        [style.max-height]=\"altoContenedor()? 'calc(100vh - ' + altoContenedor() + 'px)' : ''\">\r\n        <div>\r\n            <table #table class=\"table table-striped normal-table\" [ngClass]=\"isDarkMode() ? 'table-dark' : ''\">\r\n\r\n                @if (hasColumnGroups()) {\r\n                <thead>\r\n                    <tr class=\"shadow-sm\">\r\n                        @if (withDetails()) {\r\n                        <th rowspan=\"2\" class=\"cw-20 b-table\">\r\n                        </th>\r\n                        }\r\n\r\n                        @if (withCheckbox()) {\r\n                        <th rowspan=\"2\" class=\"cw-20 b-table\">\r\n                            <label>\r\n                                <input type=\"checkbox\" name=\"check_box_select_table_main\"\r\n                                    id=\"check_box_select_table_main\" animatedCheckbox [checked]=\"validaAllCheck()\"\r\n                                    (change)=\"allCheck($event)\">\r\n                            </label>\r\n                        </th>\r\n                        }\r\n\r\n                        @if (customActions()) {\r\n                        <th rowspan=\"2\" class=\"cw-40 b-table\">\r\n                        </th>\r\n                        }\r\n\r\n                        @for (seg of headerSegments(); track $index) {\r\n\r\n                        @if (seg.type === 'column') {\r\n                        <th class=\"b-table\" rowspan=\"2\"\r\n                            [style.width]=\"seg.column?.width ? seg.column.width + 'px' : 'auto'\">\r\n                            {{ seg.column?.caption }}\r\n                        </th>\r\n                        }\r\n\r\n                        @if (seg.type === 'group') {\r\n                        <th class=\"b-table text-center fw-bold\" [attr.colspan]=\"seg.group?.colspan\">\r\n                            {{ seg.group?.label }}\r\n                        </th>\r\n                        }\r\n\r\n                        }\r\n                    </tr>\r\n\r\n                    <tr class=\"shadow-sm\">\r\n                        @for (column of groupedColumns(); track $index) {\r\n                        @if (validaVisibilidad(column.visible) && visibilidadColumn()[column.fieldname] !== false) {\r\n                        <th class=\"b-table\" #thElement [title]=\"column.caption\"\r\n                            [style.width]=\"column?.width ? column.width + 'px' : 'auto'\"\r\n                            [style.max-width]=\"column?.width ? column.width + 'px' : 'auto'\">\r\n                            {{ column.caption }}\r\n                            @if(column.caption){\r\n                            @if (sortColumn == column.fieldname) {\r\n                            <span (click)=\"sortTable(column.fieldname)\" class=\"cursor-pointer\">\r\n                                <i\r\n                                    [ngClass]=\"sortDirection == 'asc' ? 'fas fa-angle-up fs-6':'fas fa-angle-down fs-6'\"></i>\r\n                            </span>\r\n                            }\r\n                            @if (sortColumn !== column.fieldname) {\r\n                            <i class=\"fas fa-sort icon-sort cursor-pointer\" (click)=\"sortTable(column.fieldname)\"></i>\r\n                            }\r\n                            }\r\n                        </th>\r\n                        }\r\n                        }\r\n                    </tr>\r\n                </thead>\r\n\r\n                } @else {\r\n\r\n                <thead>\r\n                    <tr class=\"shadow-sm\">\r\n                        @if (withDetails()) {\r\n                        <th class=\"cw-20 b-table\" [ngClass]=\"colorHeader()== 'normal' ? 'h-table' : ''\"></th>\r\n                        }\r\n\r\n                        @if (withCheckbox()) {\r\n                        <th class=\"cw-20 b-table\" [ngClass]=\"colorHeader()== 'normal' ? 'h-table' : ''\">\r\n                            <label>\r\n                                <input type=\"checkbox\" name=\"check_box_select_table_main\"\r\n                                    id=\"check_box_select_table_main\" animatedCheckbox [checked]=\"validaAllCheck()\"\r\n                                    (change)=\"allCheck($event)\">\r\n                            </label>\r\n                        </th>\r\n                        }\r\n\r\n                        @if (customActions()) {\r\n                        <th class=\"cw-40 b-table\" [ngClass]=\"colorHeader()== 'normal' ? 'h-table' : ''\">\r\n\r\n                            <app-dropdown-cdk>\r\n                                <ng-template #trigger>\r\n                                    <button class=\"btn p-0 text-dark d-flex mx-auto border-0\">\r\n                                        <i class=\"fas fa-cog\"></i>\r\n                                    </button>\r\n                                </ng-template>\r\n                                <ng-template #content>\r\n                                    <div class=\"popover-menu-column bg-white shadow mt-2\" @dropdownAnimation>\r\n                                        <div class=\"popover-title fs-7 bg-white\">Columnas</div>\r\n                                        @for (col of columns(); track col.caption) {\r\n                                        @if (col.caption) {\r\n                                        <div class=\"form-check form-switch text-start d-flex align-items-center\">\r\n                                            <input type=\"checkbox\" class=\"form-check-input py-0 my-0 cw-25 ch-15\"\r\n                                                id=\"{{ 'switch_' + col.caption }}\"\r\n                                                [(ngModel)]=\"visibilidadColumn()[col.fieldname]\" />\r\n                                            <label class=\"form-check-label ps-2 fs-6 cursor-pointer font-label mb-0\"\r\n                                                for=\"{{ 'switch_' + col.caption }}\">\r\n                                                {{ col.caption }}\r\n                                            </label>\r\n                                        </div>\r\n                                        }\r\n                                        }\r\n                                    </div>\r\n                                </ng-template>\r\n                            </app-dropdown-cdk>\r\n                        </th>\r\n                        }\r\n                        @for (column of columns(); track $index) {\r\n                        @if (validaVisibilidad(column.visible) && visibilidadColumn()[column.fieldname] !== false) {\r\n                        <th class=\"b-table\" #thElement [title]=\"column.caption\"\r\n                            [style.width]=\"column?.width ? column.width + 'px' : 'auto'\"\r\n                            [style.max-width]=\"column?.width ? column.width + 'px' : 'auto'\"\r\n                            [ngClass]=\"colorHeader()== 'normal' ? 'h-table' : ''\">\r\n                            {{ column.caption }}\r\n                            @if(column.caption){\r\n                            @if (sortColumn == column.fieldname) {\r\n                            <span (click)=\"sortTable(column.fieldname)\" class=\"cursor-pointer\">\r\n                                <i\r\n                                    [ngClass]=\"sortDirection == 'asc' ? 'fas fa-angle-up fs-6':'fas fa-angle-down fs-6'\"></i>\r\n                            </span>\r\n                            }\r\n                            @if (sortColumn !== column.fieldname) {\r\n                            <i class=\"fas fa-sort icon-sort cursor-pointer\" (click)=\"sortTable(column.fieldname)\"></i>\r\n                            }\r\n                            }\r\n                        </th>\r\n                        }\r\n                        }\r\n                    </tr>\r\n                </thead>\r\n\r\n                }\r\n\r\n                <tbody>\r\n                    @for (row of dataVirtual(); track row.idListTsi) {\r\n                    @let idList = row.idListTsi;\r\n                    <tr [ngClass]=\"{'table-active': (identifier().length < 1 ? selectedRow() == $index : selectedRow() == concatenarValue(row,identifier()))}\"\r\n                        (click)=\"selectRow(identifier().length < 1 ? $index : row); onClick(row)\"\r\n                        (dblclick)=\"onDoubleClick(row)\" (contextmenu)=\"onRightClick($event,row)\"\r\n                        [id]=\"identifier().length < 1 ? ('row_table_' + $index) : ('row_table_'+ concatenarValue(row,identifier()))\">\r\n                        @if (withDetails()) {\r\n                        <td class=\"b-table text-center mwp-25\">\r\n                            <a (click)=\"toggleExpandRow($index)\" class=\"text-dark cursor-pointer fs-6\">\r\n                                <i class=\"fa-solid\" [class.fa-chevron-right]=\"expandedRows != $index\"\r\n                                    [class.fa-chevron-down]=\"expandedRows == $index\"></i>\r\n                            </a>\r\n                        </td>\r\n                        }\r\n\r\n                        @if (withCheckbox()) {\r\n                        <td scope=\"col\" class=\"text-center b-table\">\r\n                            <label>\r\n                                <input type=\"checkbox\" [name]=\"'check_box_select_table_' + idList\"\r\n                                    [id]=\"'check_box_select_table_' + idList\" animatedCheckbox\r\n                                    [checked]=\"isItemSelected(idList)\" (change)=\"toogleItem(idList , $event)\"\r\n                                    [disabled]=\"isCheckboxDisabled(row)\">\r\n                            </label>\r\n                        </td>\r\n                        }\r\n\r\n                        @if (customActions()) {\r\n                        <td class=\"text-center mwp-90 b-table\">\r\n                            <ng-container\r\n                                *ngTemplateOutlet=\"customActions(); context: { $implicit: row }\"></ng-container>\r\n                        </td>\r\n                        }\r\n                        @for (column of columns(); track $index) {\r\n                        @if (validaVisibilidad(column.visible) && visibilidadColumn()[column.fieldname] !== false) {\r\n\r\n                        @if (column.template) {\r\n                        <td class=\"b-table\">\r\n                            <ng-container\r\n                                *ngTemplateOutlet=\"column.template; context: { $implicit: row, column: column }\">\r\n                            </ng-container>\r\n                        </td>\r\n                        }@else {\r\n                        @switch (column.tipo) {\r\n                        @case ('cell-render') {\r\n                        @let resolverItem = resolveCell(column.fieldname, row);\r\n                        @if (resolverItem) {\r\n                        <td class=\"b-table\" [title]=\"resolverItem.text\" [class.text-center]=\"resolverItem.icon\">\r\n                            @if (resolverItem.icon) {\r\n                            <i class=\"fs-5\" [ngClass]=\"resolverItem.icon\"></i>\r\n                            } @else if (resolverItem.class) {\r\n                            <span [ngClass]=\"row.situac == 'J' ? 'text-error' : resolverItem.class\">\r\n                                {{ resolverItem.text }}\r\n                            </span>\r\n                            } @else {\r\n                            {{ resolverItem.text }}\r\n                            }\r\n                        </td>\r\n                        }\r\n                        }\r\n\r\n                        @default {\r\n                        <td [innerHTML]=\"getHighlight(row._format?.[column.fieldname] ?? row[column.fieldname], column.fieldname)\"\r\n                            [style.width]=\"column?.width ? column.width + 'px' : 'auto'\"\r\n                            [style.max-width]=\"column?.width ? column.width + 'px' : 'auto'\"\r\n                            [title]=\"row._format?.[column.fieldname] ?? row[column.fieldname]\"\r\n                            [ngClass]=\"rowClassFn() ? rowClassFn()(row) : getRowClass(row)\"\r\n                            class=\"b-table {{getPosition(column)}}\">\r\n                        </td>\r\n                        }\r\n                        }\r\n\r\n                        }\r\n                        }\r\n                        }\r\n                    </tr>\r\n                    @if ($index == expandedRows) {\r\n                    <tr @fadeInOut>\r\n                        <td [attr.colspan]=\"columns().length + (withDetails()? 1 : 0) + (customActions() ? 1 : 0) + (withCheckbox() ? 1 : 0)\"\r\n                            class=\"table-blank\">\r\n                            <div class=\"d-flex flex-column auditoria\">\r\n                                <span class=\"fw-bold fs-7 text-dark\">Datos de auditoría</span>\r\n                                <span class=\"fs-6 text-dark fw-bold\">\r\n                                    Creación: {{ row.nomucreac }} el {{ row._format?.fcreac ?? row.fcreac }} a las {{\r\n                                    row.hcreac }}\r\n                                </span>\r\n                                <span class=\"fs-6 text-dark fw-bold\">\r\n                                    Actualización: {{ row.nomuactua }} el {{ row._format?.factua ?? row.factua }} a las\r\n                                    {{\r\n                                    row.hactua }}\r\n                                </span>\r\n                            </div>\r\n                        </td>\r\n                    </tr>\r\n                    }\r\n                    }\r\n                    <tr #anchor>\r\n                        <td [attr.colspan]=\"columns().length + (withDetails()? 1 : 0) + (customActions() ? 1 : 0) + (withCheckbox() ? 1 : 0)\"\r\n                            class=\"text-center text-muted py-3\">\r\n                            @if (isLoading()) {\r\n                            <span>Cargando más registros...</span>\r\n                            }\r\n                            @if (!isLoading() && dataVirtual().length >= 5000) {\r\n                            <span>No hay más registros</span>\r\n                            }\r\n                        </td>\r\n                    </tr>\r\n                </tbody>\r\n\r\n                @if (withTotal()) {\r\n                <tfoot>\r\n                    <tr>\r\n                        <td class=\"b-table\" [attr.colspan]=\"getColspanBeforeTotals()\">Totales:</td>\r\n                        @for (col of columns() ; track $index) {\r\n                        @if (col.totalizable) {\r\n                        <td class=\"b-table text-end\">\r\n                            {{ getTotals(col.fieldname)}}\r\n                        </td>\r\n                        }\r\n                        }\r\n                    </tr>\r\n                </tfoot>\r\n                }\r\n            </table>\r\n        </div>\r\n    </div>\r\n\r\n</ng-template>\r\n\r\n<!-- FIN VISTA MOBILE -->","import { Component, contentChild, input, TemplateRef } from '@angular/core';\r\n\r\n@Component({\r\n  selector: 'app-tab-item',\r\n  imports: [],\r\n  template: ''\r\n})\r\nexport class TabItemComponent {\r\n\r\n  id = input<number | string>();\r\n  title = input<string>('');\r\n  content = contentChild<TemplateRef<any>>(TemplateRef)\r\n}\r\n","import { Component, contentChildren, effect, input, model } from '@angular/core';\r\nimport { TabItemComponent } from '../tab-item/tab-item.component';\r\nimport { NgbNavModule } from '@ng-bootstrap/ng-bootstrap';\r\nimport { CommonModule } from '@angular/common';\r\n\r\n@Component({\r\n  selector: 'app-nav-tabs',\r\n  imports: [NgbNavModule,CommonModule],\r\n  templateUrl: './nav-tabs.component.html',\r\n  styleUrl: './nav-tabs.component.scss'\r\n})\r\nexport class NavTabsComponent {\r\n\r\n  //@ContentChildren(TabItemComponent) tabItems!: QueryList<TabItemComponent>;\r\n\r\n  tabItems = contentChildren<TabItemComponent>(TabItemComponent);\r\n  active = model<number | string>(1)\r\n  isDestroy = input<boolean>(true)\r\n}\r\n","<ul ngbNav #nav=\"ngbNav\" [(activeId)]=\"active\" class=\"nav nav-tabs\" [destroyOnHide]=\"isDestroy()\">\r\n    @for (tab of tabItems(); track $index) {\r\n         <li [ngbNavItem]=\"tab.id()\">\r\n            <button ngbNavLink>{{ tab.title() }}</button>\r\n            <ng-template ngbNavContent>\r\n            <ng-container *ngTemplateOutlet=\"tab.content()\"></ng-container>\r\n            </ng-template>\r\n        </li>\r\n    }\r\n \r\n</ul>\r\n<div [ngbNavOutlet]=\"nav\" class=\"mt-2\"></div>","import { Component, computed, contentChild, effect, inject, input, model, output, signal, TemplateRef } from '@angular/core';\r\nimport { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap';\r\nimport { NgClass, NgTemplateOutlet } from '@angular/common';\r\nimport { HeaderComponent } from '../../../ui/forms/header/header.component';\r\nimport { ButtonComponent } from '../../../ui/forms/button/button.component';\r\n\r\n@Component({\r\n  selector: 'app-md-generico',\r\n  imports: [NgClass, NgTemplateOutlet, HeaderComponent, ButtonComponent],\r\n  templateUrl: './md-generico.component.html',\r\n  styleUrl: './md-generico.component.scss'\r\n})\r\n\r\nexport class MdGenericoComponent {\r\n\r\n  private modalService = inject(NgbActiveModal, { optional: true })\r\n\r\n  title = input<string>('')\r\n  continuar = output<void>()\r\n  continuar2 = output<void>()\r\n  cerrar = output<void>()\r\n\r\n  scrollable = input<boolean>(true)\r\n\r\n  type = input<'1' | '2' | '3' | '4' | '5' | '6' | '7' | 'APROB'>('1')\r\n\r\n  content = contentChild<TemplateRef<any>>('body')\r\n  footer = contentChild<TemplateRef<any>>('footer')\r\n  showCancelar = input<boolean>(true)\r\n  showAlerta = input<boolean>(false)\r\n  textAlerta = input<string>('La consulta muestra los 100 primeros registros.')\r\n  sizeTitle = input<'1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9'>('8')\r\n\r\n  showFiltro = input<boolean>(false)\r\n  withFiltro = model(true)\r\n  dataFiltro = input<boolean>(false)\r\n\r\n  emitirFiltro = output<void>()\r\n  isModal = input<boolean>(true)\r\n\r\n  acceptDisabled = input<boolean>(false)\r\n  validaCierre = input<boolean>(false)\r\n\r\n  showFooter = computed(() => {\r\n    const type = this.type()\r\n    if (type == 'APROB') return false\r\n    if (type == '5') return false\r\n    return true\r\n  })\r\n\r\n  cerrarModal() {\r\n    if (this.validaCierre()) {\r\n      this.cerrar.emit()\r\n      return\r\n    }\r\n    this.modalService.dismiss()\r\n  }\r\n}\r\n","<div class=\"md-inner\">\r\n    <div class=\"modal-header py-2\">\r\n        <div class=\"w-100\">\r\n            <app-header [isModal]=\"isModal()\" (cerrarModal)=\"cerrarModal()\" [tamanio]=\"sizeTitle()\"\r\n                [showAlerta]=\"showAlerta()\" [textAlerta]=\"textAlerta()\" [title]=\"title()\" [showFiltro]=\"showFiltro()\"\r\n                [hasData]=\"dataFiltro()\" [(withFiltro)]=\"withFiltro\" />\r\n        </div>\r\n    </div>\r\n\r\n    <div class=\"modal-body\" [ngClass]=\"{ 'max-height': scrollable() }\">\r\n        <ng-container *ngTemplateOutlet=\"content();\"></ng-container>\r\n    </div>\r\n\r\n    @if( showFooter()){\r\n    <div class=\"modal-footer\">\r\n        @if (footer()) {\r\n        <ng-container *ngTemplateOutlet=\"footer();\"></ng-container>\r\n        }\r\n        @if (type() == '1') {\r\n        <app-button icon=\"adelante\" texto=\"Continuar\" color=\"verde\" (accion)=\"continuar.emit()\"\r\n            [disabled]=\"acceptDisabled()\" />\r\n        }\r\n        @if (type() == '2') {\r\n        <app-button icon=\"guardar\" texto=\"Guardar\" color=\"azul\" (accion)=\"continuar.emit()\"\r\n            [disabled]=\"acceptDisabled()\" />\r\n        }\r\n        @if (type() == '3') {\r\n        <app-button icon=\"imprimir\" texto=\"Imprimir\" color=\"gris\" (accion)=\"continuar.emit()\"\r\n            [disabled]=\"acceptDisabled()\" />\r\n        }\r\n        @if( type() == '4'){\r\n        <app-button icon=\"agregar\" texto=\"Adicionar\" color=\"verde\" (accion)=\"continuar.emit()\"\r\n            [disabled]=\"acceptDisabled()\" />\r\n        }\r\n        @if( type() == '6'){\r\n        <app-button icon=\"check\" texto=\"Actualizar\" color=\"azul\" (accion)=\"continuar.emit()\"\r\n            [disabled]=\"acceptDisabled()\" />\r\n        }\r\n        @if(showCancelar()){\r\n        <app-button icon=\"cancelar\" texto=\"Cancelar\" color=\"amarillo\" (accion)=\"cerrarModal()\" />\r\n        }\r\n    </div>\r\n    }\r\n\r\n    @if( type() == 'APROB'){\r\n    <div class=\"modal-footer d-flex justify-content-center\">\r\n        <app-button icon=\"aprobar\" texto=\"Aprobar\" color=\"verde\" (accion)=\"continuar.emit()\" />\r\n        <app-button icon=\"desaprobar\" texto=\"Desaprobar\" color=\"rojo\" (accion)=\"continuar2.emit()\" />\r\n    </div>\r\n    }\r\n</div>","import { Injectable } from '@angular/core';\r\nimport { catchError, throwError } from 'rxjs';\r\n\r\nimport Swal from \"sweetalert2\";\r\n\r\n@Injectable({\r\n  providedIn: 'root'\r\n})\r\nexport class AlertService {\r\n\r\n  constructor() { }\r\n\r\n  showErrorAlert(msg: string): Promise<void> {\r\n    return Swal.fire({\r\n      html: msg,\r\n      icon: \"error\",\r\n      confirmButtonColor: \"#3085d6\",\r\n      confirmButtonText: \"Aceptar\",\r\n      focusConfirm:true\r\n    }).then(() => { })\r\n  }\r\n\r\n  showSuccessAlert(msg: string): Promise<void> {\r\n    return Swal.fire({\r\n      html: msg,\r\n      icon: \"success\",\r\n      confirmButtonColor: \"#3085d6\",\r\n      confirmButtonText: \"Aceptar\",\r\n      focusConfirm:true\r\n    }).then(() => { })\r\n  }\r\n\r\n  showWarningAlert(msg: string) {\r\n    Swal.fire({\r\n      text: msg,\r\n      icon: \"warning\",\r\n      confirmButtonColor: \"#3085d6\",\r\n      confirmButtonText: \"Aceptar\",\r\n      focusConfirm:true\r\n    })\r\n  }\r\n\r\n  openConfirmDialog(): Promise<boolean> {\r\n    return new Promise((resolve, reject) => {\r\n      Swal.fire({\r\n        text: `¿Seguro de eliminar?`,\r\n        icon: \"warning\",\r\n        showCancelButton: true,\r\n        confirmButtonColor: \"#328ad9\",\r\n        cancelButtonColor: \"#ea0f0f\",\r\n        confirmButtonText: \"Aceptar\",\r\n        focusConfirm:true\r\n      }).then((result) => {\r\n        if (result.isConfirmed) {\r\n          resolve(true);\r\n        } else {\r\n          resolve(false);\r\n        }\r\n      }).catch(err => reject(err));\r\n    });\r\n  }\r\n\r\n  openConfirmDialogFlex(params?: { titulo: string }): Promise<boolean> {\r\n    return new Promise((resolve, reject) => {\r\n      Swal.fire({\r\n        text: `${params.titulo}`,\r\n        icon: \"warning\",\r\n        showCancelButton: true,\r\n        confirmButtonColor: \"#328ad9\",\r\n        cancelButtonColor: \"#ea0f0f\",\r\n        confirmButtonText: \"Aceptar\",\r\n        focusConfirm:true\r\n      }).then((result) => {\r\n        if (result.isConfirmed) {\r\n          resolve(true);\r\n        } else {\r\n          resolve(false);\r\n        }\r\n      }).catch(err => reject(err));\r\n    });\r\n  }\r\n\r\n  openConfirmDialogFlexHtml(params?: { content: string, type: any }): Promise<boolean> {\r\n    return new Promise((resolve, reject) => {\r\n      Swal.fire({\r\n        html: `${params.content}`,\r\n        icon: params.type,\r\n        showCancelButton: true,\r\n        confirmButtonColor: \"#328ad9\",\r\n        cancelButtonColor: \"#ea0f0f\",\r\n        confirmButtonText: \"Aceptar\",\r\n        focusConfirm:true\r\n      }).then((result) => {\r\n        if (result.isConfirmed) {\r\n          resolve(true);\r\n        } else {\r\n          resolve(false);\r\n        }\r\n      }).catch(err => reject(err));\r\n    });\r\n  }\r\n\r\n\r\n  openConfirmDialogFlexYesAndNoHtml(params?: { content: string, type: any, yes?: string, no?: string }): Promise<boolean> {\r\n    return new Promise((resolve, reject) => {\r\n      Swal.fire({\r\n        html: `${params.content}`,\r\n        icon: params.type,\r\n        showCancelButton: true,\r\n        confirmButtonColor: \"#328ad9\",\r\n        cancelButtonColor: \"#ea0f0f\",\r\n        focusConfirm:true,\r\n        confirmButtonText: params.yes ? params.yes : 'Si',\r\n        cancelButtonText: params.no ? params.no : 'No',\r\n        customClass: {\r\n          confirmButton: 'custom-button',\r\n          cancelButton: 'custom-button'\r\n        }\r\n      }).then((result) => {\r\n        if (result.isConfirmed) {\r\n          resolve(true);\r\n        } else {\r\n          resolve(false);\r\n        }\r\n      }).catch(err => reject(err));\r\n    });\r\n  }\r\n\r\n  dividirDialog(): Promise<number | null> {\r\n    return Swal.fire({\r\n      title: \"Ingrese cantidad de registros\",\r\n      input: \"number\",\r\n      inputPlaceholder: \"Ingresar la cantidad entre 1 a 10\",\r\n      showCancelButton: true,\r\n      confirmButtonText: 'Continuar',\r\n      cancelButtonText: 'Cancelar',\r\n      customClass: {\r\n        title: 'my-swal-title px-4 mx-4',\r\n        confirmButton: 'btn btn-success btn-rounded me-2 mt-2',\r\n        cancelButton: 'btn btn-warning btn-rounded mt-2'\r\n      },\r\n      buttonsStyling: false,\r\n      inputValidator: (value) => {\r\n        if (!value) {\r\n          return \"Ingrese un número entre 1 y 10\";\r\n        }\r\n        if (Number(value) > 10) {\r\n          return \"El número debe ser 10 o menor!\";\r\n        }\r\n        if (Number(value) < 1) {\r\n          return \"El número debe ser 1 o mayor!\";\r\n        }\r\n        return null;\r\n      }\r\n    }).then(result => {\r\n      if (result.isConfirmed) {\r\n        return Number(result.value);\r\n      } else {\r\n        return null;\r\n      }\r\n    });\r\n  }\r\n\r\n  alertaHTML(mensaje: string, tipoAlerta: any) {\r\n    Swal.fire({\r\n      html: mensaje,\r\n      icon: tipoAlerta,\r\n      confirmButtonColor: \"#3085d6\",\r\n      confirmButtonText: \"Aceptar\",\r\n      focusConfirm:true\r\n    })\r\n  }\r\n\r\n  openConfirmDialogMultipleActions(params: {\r\n    content: string,\r\n    type: any,\r\n    confirm?: string,\r\n    deny?: string,\r\n    cancel?: string\r\n  }): Promise<'aceptar' | 'sunat' | 'manual' | 'cancelado'> {\r\n    return new Promise((resolve, reject) => {\r\n      Swal.fire({\r\n        html: params.content,\r\n        icon: params.type,\r\n        showCancelButton: true,\r\n        showDenyButton: true,\r\n        confirmButtonText: params.confirm ?? 'Aceptar',\r\n        denyButtonText: params.deny ?? '<img src=\"../../../../../assets/images/Sunat.ico\" height=\"16px\" width=\"16px\" style=\"vertical-align: middle; margin-right: 5px;\" alt=\"\"> Importar desde SUNAT',\r\n        cancelButtonText: params.cancel ?? 'Registrar manual',\r\n        confirmButtonColor: '#328ad9',\r\n        denyButtonColor: '#b7b7b7',\r\n        cancelButtonColor: '#6c757d',\r\n        customClass: {\r\n          confirmButton: 'custom-button-2',\r\n          denyButton: 'custom-button-2',\r\n          cancelButton: 'custom-button-2'\r\n        }\r\n      }).then(result => {\r\n        if (result.isConfirmed) {\r\n          resolve('aceptar');\r\n        } else if (result.isDenied) {\r\n          resolve('sunat');\r\n        } else if (result.dismiss == Swal.DismissReason.cancel) {\r\n          resolve('manual');\r\n        } else {\r\n          resolve('cancelado');\r\n        }\r\n      }).catch(err => reject(err));\r\n    });\r\n  }\r\n\r\n  withErrorMessage = (msg: string) => catchError(err => {\r\n    this.showErrorAlert(`${msg} <br> ${err.error}`);\r\n    return throwError(() => err);\r\n  });\r\n}\r\n","import { NgbModalOptions, NgbModalRef } from \"@ng-bootstrap/ng-bootstrap\";\r\n\r\nexport function configModal(size: 'xs' | 'sm' | 'md' | 'lg' | 'xl' = 'xl'): NgbModalOptions {\r\n  return { size, backdrop: 'static' }\r\n}\r\n\r\nexport interface ModalConfig<T> {\r\n  component: any\r\n  data?: T\r\n  init?: (instance: any) => void\r\n  updatePredicate: (oldItem: T, newItem: T) => boolean\r\n}\r\n\r\nexport function handleModal<T>(\r\n  modalRef: NgbModalRef,\r\n  onSuccess: (data: T) => void,\r\n  onDismiss?: () => void\r\n) {\r\n  modalRef.result.then(\r\n    (result: T) => {\r\n      if (!result) return;\r\n      onSuccess(result);\r\n    },\r\n    () => onDismiss?.()\r\n  );\r\n}\r\n\r\nexport function handleModalReturn<T>(\r\n  modalRef: NgbModalRef\r\n): Promise<T | null> {\r\n  return modalRef.result\r\n    .then((result: T) => result ?? null)\r\n    .catch(() => null);\r\n}","import { inject, Injectable } from '@angular/core';\r\nimport { NgbModal, NgbModalRef } from '@ng-bootstrap/ng-bootstrap';\r\nimport { handleModalReturn } from '../utils/helpers/modal-result';\r\nimport Swal, { SweetAlertOptions } from 'sweetalert2';\r\nimport { ItemGenerico } from 'shared-tsi';\r\n\r\n\r\nexport class AlertConfirmationConfig {\r\n    texto?: string;\r\n    showTextarea?: boolean;\r\n    select?: boolean;\r\n    opciones?: (string | ItemGenerico)[];\r\n    selectedOption?: any;\r\n    textareaValue?: string;\r\n    confirmar?: string;\r\n    mostrarConfirmar?: boolean;\r\n    cancelar?: string;\r\n    mostrarCancelar?: boolean;\r\n    mostrarExtra?: boolean;\r\n    extra?: string;\r\n    colorExtra?: string;\r\n    maxLength?: number;\r\n    focus?: boolean;\r\n    showLabel?: boolean;\r\n}\r\n\r\n@Injectable({\r\n    providedIn: 'root',\r\n})\r\nexport class AlertConfirmationService {\r\n    private modalService = inject(NgbModal)\r\n\r\n    async open(config: AlertConfirmationConfig): Promise<NgbModalRef> {\r\n        const { AlertConfirmationComponent } = await import('../../lib/ui/alerts/alert-confirmation/alert-confirmation.component');\r\n        const modalRef = this.modalService.open(AlertConfirmationComponent, {\r\n            windowClass: 'modal-xs',\r\n            backdrop: 'static',\r\n            centered: true,\r\n        })\r\n\r\n        if (config.texto !== undefined) {\r\n            modalRef.componentInstance.texto.set(config.texto)\r\n        }\r\n        if (config.showTextarea !== undefined) {\r\n            modalRef.componentInstance.showTextarea.set(config.showTextarea)\r\n        }\r\n        if (config.select !== undefined) {\r\n            modalRef.componentInstance.select.set(config.select)\r\n        }\r\n        if (config.opciones !== undefined) {\r\n            modalRef.componentInstance.opciones.set(config.opciones)\r\n        }\r\n        if (config.selectedOption !== undefined) {\r\n            modalRef.componentInstance.selectedOption.set(config.selectedOption)\r\n        }\r\n        if (config.textareaValue !== undefined) {\r\n            modalRef.componentInstance.textareaValue.set(config.textareaValue)\r\n        }\r\n        if (config.confirmar !== undefined) {\r\n            modalRef.componentInstance.confirmar.set(config.confirmar)\r\n        }\r\n        if (config.mostrarConfirmar !== undefined) {\r\n            modalRef.componentInstance.mostrarConfirmar.set(config.mostrarConfirmar)\r\n        }\r\n        if (config.cancelar !== undefined) {\r\n            modalRef.componentInstance.cancelar.set(config.cancelar)\r\n        }\r\n        if (config.mostrarCancelar !== undefined) {\r\n            modalRef.componentInstance.mostrarCancelar.set(config.mostrarCancelar)\r\n        }\r\n        if (config.mostrarExtra !== undefined) {\r\n            modalRef.componentInstance.mostrarExtra.set(config.mostrarExtra)\r\n        }\r\n        if (config.extra !== undefined) {\r\n            modalRef.componentInstance.extra.set(config.extra)\r\n        }\r\n        if (config.colorExtra !== undefined) {\r\n            modalRef.componentInstance.colorExtra.set(config.colorExtra)\r\n        }\r\n        if (config.focus !== undefined) {\r\n            modalRef.componentInstance.focus.set(config.focus)\r\n        }\r\n        modalRef.componentInstance.maxLength.set(config.maxLength ?? 200)\r\n        \r\n        if (config.showLabel !== undefined) {\r\n            modalRef.componentInstance.showLabel.set(config.showLabel)\r\n        }\r\n\r\n        return modalRef\r\n    }\r\n    async mostrarModalConfirmacion(config: AlertConfirmationConfig): Promise<any> {\r\n        return handleModalReturn(await this.open(config))\r\n    }\r\n\r\n    async openSweetConfirm(config: AlertConfirmationConfig): Promise<any> {\r\n        const focus = config.focus ?? true\r\n        const options: SweetAlertOptions = {\r\n            html: `\r\n            <div class=\"d-flex justify-content-center mb-3\">\r\n                <i class=\"fas fa-exclamation-circle color-icon\"></i>\r\n            </div>\r\n            ${config.texto}`,\r\n            icon: undefined,\r\n            showCancelButton: true,\r\n            confirmButtonText: config.confirmar ?? 'Aceptar',\r\n            cancelButtonText: config.cancelar ?? 'Cancelar',\r\n            buttonsStyling: false,\r\n            focusConfirm: focus,\r\n            focusCancel: !focus,\r\n            customClass: {\r\n                confirmButton: 'btn btn-info btn-rounded button-tilt-hover text-white me-1 fs-8 px-3 w-auto w-sm-100',\r\n                cancelButton: 'btn btn-danger btn-rounded button-tilt-hover text-white me-1 fs-8 px-3 w-auto w-sm-100'\r\n            }\r\n        }\r\n        const result = await Swal.fire(options);\r\n        return result.isConfirmed;\r\n    }\r\n\r\n}","import { inject, Injectable } from '@angular/core';\r\nimport { NgbModal, NgbModalRef } from '@ng-bootstrap/ng-bootstrap';\r\nimport { AlertErrorComponent } from '../ui/alerts/alert-error/alert-error.component';\r\nimport { handleModalReturn } from '../utils/helpers/modal-result';\r\n\r\n@Injectable({\r\n    providedIn: 'root',\r\n})\r\n\r\nexport class AlertErrorService {\r\n\r\n    private modalService = inject(NgbModal)\r\n\r\n    open(mensaje: string, status?: string) {\r\n        const modalRef = this.modalService.open(AlertErrorComponent, {\r\n            windowClass: 'modal-xs',\r\n            backdrop: 'static',\r\n            centered: true,\r\n        })\r\n\r\n        modalRef.componentInstance.mensaje.set(mensaje)\r\n        if (status) {\r\n            modalRef.componentInstance.codigoEstado.set(status)\r\n        }\r\n        return handleModalReturn(modalRef)\r\n    }\r\n\r\n    async mostrarModalError(mensaje: string, status?: string) {\r\n        return this.open(mensaje, status)\r\n    }\r\n}\r\n","import { ColorType, IconType, OutlineType } from \"./button-color.model\";\r\n\r\nexport class ButtonProperties {\r\n    icon?: IconType;\r\n    color?: ColorType;\r\n    colorOutline?: OutlineType;\r\n    texto?: string;\r\n}","import { FactorObject, PermisoObject } from \"shared-tsi\";\r\nimport { IconType } from \"./button-color.model\";\r\n\r\nexport class DropdownOption {\r\n    icon?: IconType;\r\n    text?: string;\r\n    condition?: boolean;\r\n    property?: PermisoObject;\r\n    factor?: FactorObject;\r\n    action?: (param?: any) => void;\r\n    submenu?: DropdownOption[];\r\n    upload?: boolean;\r\n    accept?: string;\r\n    fileAction?: (file: File | File[], param?: any) => void;\r\n}","export class TableData {\r\n    caption: string;\r\n    idcolumn?: string;\r\n    order?: number;\r\n    visible?: boolean;\r\n    width?: number;\r\n    position?: 'start' | 'center' | 'end';\r\n    tipo?: 'fecha' | 'status' | 'situación' | 'situacion_number' | 'situacion_string' | 'situacion_rendicion' | 'decimal' | 'text-center' | 'check' | 'check-input' | 'radio-input' | 'mostrar' | 'cell-render' | 'date' | 'number';\r\n    fieldname: string;\r\n    event?: boolean;\r\n    decimales?: number;\r\n    tipoCaption?: 'normal' | 'check-input' | 'radio-input';\r\n    condition?: (row: any) => boolean;\r\n    template?:any\r\n    totalizable?: boolean\r\n    /** Fija la columna al hacer scroll horizontal (table-ultimate-pinned). true = 'right' */\r\n    pinned?: boolean | 'left' | 'right';\r\n    promedioSimple?: boolean;\r\n    promedioPonderado?: boolean;\r\n    cantidadPonderado?: boolean;\r\n    swmobile?: boolean;\r\n    group?:string;\r\n}","\r\nexport class Recursos {\r\n  almacenes?: Almacenes[]\r\n  areas?: any[]\r\n  documentoTipos?: any[]\r\n  monedas?: Monedas[]\r\n  motivos?: Motivos[]\r\n  series?: Series[]\r\n  transportistas?: Transportista[]\r\n  usos?: any[]\r\n  vehiculos?: any[]\r\n  vendedores?: Vendedor[]\r\n}\r\n\r\nexport class Series {\r\n  id_cia?: any;\r\n  codigo?: number;\r\n  series?: string;\r\n  tipinv?: number;\r\n  codalm?: number;\r\n  codsuc?: number;\r\n  libro?: any;\r\n  cuenta?: any;\r\n  docid?: number;\r\n  docdef?: boolean;\r\n  descri?: string;\r\n  correl?: number;\r\n  nomser?: any;\r\n  swcorr?: string;\r\n  usuari?: any;\r\n  fcreac?: any;\r\n  factua?: any;\r\n  activo?: any;\r\n  lpt?: number;\r\n  compago?: any;\r\n  kardex?: string;\r\n  canitem?: any;\r\n  filart?: any;\r\n  visachkcred?: string;\r\n  despoblapro?: string;\r\n  actcorr?: number;\r\n  docelec?: boolean;\r\n  tipimp?: any;\r\n  sucursal?: any;\r\n  glosa?: {\r\n    id_cia?: any;\r\n    codigo?: any;\r\n    series?: any;\r\n    observ?: string;\r\n    swformat?: string;\r\n  };\r\n  clases?: any[];\r\n  serieDefaultComercial?: boolean;\r\n  serieDefaultVenta?: boolean;\r\n}\r\n\r\nexport class Motivos {\r\n  id_cia?: any;\r\n  tipdoc?: number;\r\n  tipdocDesc?: any;\r\n  id?: string;\r\n  codmot?: number;\r\n  desmot?: string;\r\n  abrevi?: string;\r\n  costea?: string;\r\n  cospro?: string;\r\n  gening?: string;\r\n  gensal?: string;\r\n  reqpre?: string;\r\n  fcreac?: any;\r\n  factua?: any;\r\n  usuari?: any;\r\n  activo?: any;\r\n  swacti?: any;\r\n  tipcli?: string;\r\n  docayuda?: number;\r\n  docayudapv?: number;\r\n  filtrodocu?: any;\r\n  observ?: any;\r\n  ucreac?: any;\r\n  uactua?: any;\r\n  clase01Moneda?: string;\r\n  clase10incigv?: string;\r\n  clase21NoAfectoIGV?: any;\r\n  clase25Anticipo?: any;\r\n  clase06AlmDestino?: any;\r\n  clase18DocPadreOrdenPedido?: any;\r\n  clase44TransGratuita?: any;\r\n  clase52TipoTraslado?: any;\r\n  clase26AplicaAnticipoRel?: any;\r\n  clase53GeneraPercepcion?: any;\r\n  clase61PermiteAdicionarDetalle?: any;\r\n  clase62RecargaConsumo?: any;\r\n  clases?: any[];\r\n}\r\n\r\nexport class Monedas {\r\n  id_cia?: any;\r\n  codmon?: string;\r\n  desmon?: string;\r\n  abrevi?: string;\r\n  simbolo?: string;\r\n  nacional?: number;\r\n  cdifdeb?: string;\r\n  cdifhab?: string;\r\n  codsunat?: string;\r\n  fcreac?: any;\r\n  factua?: any;\r\n  usuari?: any;\r\n  activo?: boolean;\r\n  tcdesde?: number;\r\n  tchasta?: number;\r\n}\r\n\r\nexport class Vendedor {\r\n  id_cia?: any;\r\n  codven?: number;\r\n  descven?: string;\r\n  cargo?: any;\r\n  email?: any;\r\n  celular?: any;\r\n  telefono?: any;\r\n  comisi?: number;\r\n  abrevi?: any;\r\n  fcreac?: any;\r\n  factua?: any;\r\n  usuari?: any;\r\n  activo?: boolean;\r\n  firma?: any;\r\n  formfirma?: any;\r\n  metas?: any;\r\n}\r\n\r\nexport class Transportista {\r\n  id_cia?: any;\r\n  codtra?: number;\r\n  razonc?: string;\r\n  descri?: string;\r\n  domici?: string;\r\n  ruc?: string;\r\n  puntopartida?: any;\r\n  puntollegada?: any;\r\n  placa?: any;\r\n  telefono?: any;\r\n  licencia?: any;\r\n  certificado?: any;\r\n  fcreac?: any;\r\n  factua?: any;\r\n  usuari?: any;\r\n  activo?: boolean;\r\n  modificaendoc?: boolean;\r\n  chofer?: any;\r\n  chofer_apell?: any;\r\n  chofer_tident?: any;\r\n  chofer_dident?: any;\r\n  email?: any;\r\n  observ?: any;\r\n  modalidad?: number;\r\n  defaul?: string;\r\n}\r\n\r\nexport class Cobradores {\r\n  id_cia?: number;\r\n  codcob?: number;\r\n  nomcob?: string;\r\n  porcom?: number;\r\n  dni?: any;\r\n  activo?: any;\r\n  swacti?: string;\r\n  usuari?: any;\r\n  fcreac?: string;\r\n  factua?: string; \r\n  cuentacon?: string;\r\n}\r\n\r\n\r\nexport class Almacenes {\r\n  id_cia?: number;\r\n  tipinv?: number;\r\n  codalm?: number;\r\n  codsuc?: number;\r\n  sucursal?: any;\r\n  descri?: string;\r\n  abrevi?: string;\r\n  fcreac?: any;\r\n  factua?: any;\r\n  usuari?: any;\r\n  activo?: any;\r\n  swterc?: any;\r\n  ubigeo?: string;\r\n  direcc?: any;\r\n  consigna?: any;\r\n  clases?: any[];\r\n  ubicaciones?: any[];\r\n}\r\n\r\nexport class Direcciones {\r\n  id_cia?: number | null;\r\n  codcli?: string;\r\n  codenv?: number;\r\n  descri?: string;\r\n  direc1?: string;\r\n  direc2?: string;\r\n  telenv?: string;\r\n  faxenv?: string;\r\n  coddep?: string;\r\n  codprv?: string;\r\n  coddis?: string;\r\n  codzon?: number;\r\n  usuari?: string;\r\n  swacti?: string;\r\n  codcen?: string;\r\n  sunatAnexo?: string;\r\n  departamento?: string;\r\n  provincia?: string;\r\n  distrito?: string;\r\n  ubigeo?: string;\r\n  clases?: any;\r\n}\r\n\r\nexport interface ClaseCabecera {\r\n  id_cia?: any;\r\n  clase?: number;\r\n  descri?: string;\r\n  vreal?: boolean;\r\n  vstrg?: boolean;\r\n  vchar?: boolean;\r\n  vdate?: boolean;\r\n  vtime?: boolean;\r\n  ventero?: boolean;\r\n  vglosa?: boolean;\r\n  obligatorio?: boolean;\r\n  vcodigo?: boolean;\r\n  editable?: boolean;\r\n  imprime?: boolean;\r\n  codigos?: any[];\r\n  value?: string;\r\n}\r\n\r\n\r\nexport class TipoDocumento {\r\n  id_cia?: number;\r\n  tipdoc?: number;\r\n  situac?: string;\r\n  situacDesc?: string;\r\n  permis?: string;\r\n  alias?: string;\r\n  activo?: boolean;\r\n  usuari?: string;\r\n  fcreac?: string;\r\n  factua?: string;\r\n  indice?: number;\r\n}\r\n\r\nexport class TBanco {\r\n  id_cia?: number;\r\n  codban?: string;\r\n  descri?: string;\r\n  sector?: string | null;\r\n  moneda?: string;\r\n  direcc?: string | null;\r\n  clibro?: string | null;\r\n  cuenta?: string | null;\r\n  codsunat?: string;\r\n  situac?: string | null;\r\n  usuari?: string;\r\n  fcreac?: string;\r\n  factua?: string;\r\n  cuentacon?: string;\r\n  cuentaret?: string;\r\n  secuencia?: number;\r\n  cuentacta?: string;\r\n  cuentacar?: string;\r\n  cuentacprot?: string | null;\r\n  cuentacob?: string;\r\n  cuentades?: string;\r\n  cuentagar?: string;\r\n  cuentaord01?: string;\r\n  cuentaord02?: string;\r\n  cuentaenvios?: string;\r\n  filtro?: string;\r\n  swacti?: string;\r\n  abrevi?: string | null;\r\n  clases?: string | null;\r\n}\r\n","import { validarVacioAndNull } from \"shared-tsi\";\r\nimport { InputConfig, InputValidate } from \"../../models/input-config\";\r\nimport { ToastService } from \"../../service/toast.service\";\r\n\r\n\r\nexport function validaPeriodo(\r\n    toast: ToastService,\r\n    periodo: number,\r\n    mensaje: string = 'Debe seleccionar un período válido.'\r\n): boolean {\r\n    if (!periodo || periodo > 9999 || periodo < 1000) {\r\n        toast.warning('Advertencia', mensaje)\r\n        return false\r\n    }\r\n    return true\r\n}\r\n\r\nexport function validarSituacion(toast: ToastService, situac: string | number): boolean {\r\n    if (!validarVacioAndNull(situac)) {\r\n        toast.warning('Advertencia', 'Debe seleccionar al menos una situación.')\r\n        return false\r\n    }\r\n    return true\r\n}\r\n\r\nexport function validaLista(\r\n    toast: ToastService,\r\n    lista: any[],\r\n    valor: any,\r\n    nombreLista: string,\r\n    key?: string\r\n): boolean {\r\n    if (valor == -1) return true\r\n\r\n    if (!validarVacioAndNull(valor)) {\r\n        toast.warning('Advertencia', `Debe seleccionar un valor de ${nombreLista}.`)\r\n        return false\r\n    }\r\n\r\n    const existe = key\r\n        ? lista.some(item => item[key] == valor)\r\n        : lista.includes(valor)\r\n\r\n    if (!existe) {\r\n        toast.warning('Advertencia', `El código de  ${nombreLista} no existe.`)\r\n        return false\r\n    }\r\n\r\n    return true\r\n}\r\n\r\nexport function validaFecha(\r\n    toast: ToastService,\r\n    fechaDesde: string,\r\n    fechaHasta: string,\r\n    nombreDesde = 'fecha desde',\r\n    nombreHasta = 'fecha hasta'\r\n): boolean {\r\n    if (!fechaDesde || !fechaHasta) {\r\n        toast.warning('Advertencia', `Debe ingresar ${nombreDesde} y ${nombreHasta}.`)\r\n        return false\r\n    }\r\n\r\n    const dateDesde = new Date(fechaDesde)\r\n    const dateHasta = new Date(fechaHasta)\r\n\r\n    if (dateDesde > dateHasta) {\r\n        toast.warning('Advertencia', `La ${nombreDesde} no puede ser mayor que la ${nombreHasta}.`)\r\n        return false\r\n    }\r\n\r\n    return true\r\n}\r\n\r\n\r\nconst posiblesValores = ['center', 'start', 'end'] as const;\r\n\r\nexport function validaPosicion(value: string): 'center' | 'start' | 'end' {\r\n    if (posiblesValores.includes(value as any)) {\r\n        return value as 'center' | 'start' | 'end';\r\n    }\r\n    return 'start';\r\n}\r\n\r\nconst posiblesValoresTipoInput = ['text', 'text-area', 'date', 'number', 'select', 'number-format-decimal', 'number-integer'] as const;\r\n\r\nexport function validaTipo(value: string): 'text' | 'text-area' | 'date' | 'number' | 'select' | 'number-format-decimal' | 'number-integer' {\r\n    if (posiblesValoresTipoInput.includes(value as any)) {\r\n        return value as 'text' | 'text-area' | 'date' | 'number' | 'select' | 'number-format-decimal' | 'number-integer';\r\n    }\r\n    return 'text';\r\n}\r\n\r\nexport function showError(alert: ToastService, msg: string) {\r\n  alert.error('Error', msg)\r\n  return false\r\n}\r\n\r\nexport function validarObligatorio(data: any, campos: any[], toast: ToastService): boolean {\r\n  return !campos.some(campo => {\r\n    const valor = data[campo.key]\r\n    const descri = campo.title || campo.descri\r\n    const type = typeof valor\r\n    if (valor == null || (type === 'string' && valor.trim() === '')) {\r\n      toast.error('Error', `El campo ${descri} es obligatorio`);\r\n      return true;\r\n    }\r\n    if (!isNaN(Number(valor)) && Number(valor) < 0) {\r\n      toast.error('Error', `El campo ${descri} debe ser mayor a 0`);\r\n      return true;\r\n    }\r\n    return false;\r\n  });\r\n}\r\n\r\nexport function getInputsObligatorios(data: InputConfig[]): InputValidate[] {\r\n  return data\r\n    .filter(item => item.required)\r\n    .map(c => ({\r\n      key: c.fieldname,\r\n      descri: c.label\r\n    }))\r\n}","import { validarVacioAndNull } from \"shared-tsi\"\r\n\r\n\r\nexport function validaPeriodoSimple(periodo: number): boolean {\r\n    if (!periodo) return false\r\n    if (periodo > 9999 || periodo < 999) return false\r\n    return true\r\n}\r\n\r\nexport function validaMes(mes: number): boolean {\r\n    if (!validarVacioAndNull(mes)) return false\r\n    if (mes > 12 || mes < 0) return false\r\n    return true\r\n}","import { Signal, WritableSignal } from \"@angular/core\";\r\nimport { ToastService } from \"../../service/toast.service\";\r\nimport { TableData } from \"../../models/table-data.model\";\r\nimport { FormateadorService } from \"../../service/formateador.service\";\r\nimport { AlertErrorService } from \"../../service/alert-error.service\";\r\nimport { EMPTY, isObservable, Observable, of, switchMap, throwError } from \"rxjs\";\r\nimport { rxResource } from \"@angular/core/rxjs-interop\";\r\nimport { validarVacioAndNull } from \"shared-tsi\";\r\n\r\nexport function handleErrorsApi(err: any, alert: AlertErrorService) {\r\n    const safeError =\r\n    typeof err === 'string' ? err :\r\n    typeof err?.error === 'string' ? err.error :\r\n    'Error de servicio';\r\n    alert.mostrarModalError(safeError)\r\n}\r\n\r\nexport function throwIfEmptyArray<T>() {\r\n    return switchMap((res: T[]) => {\r\n        if (!res || res.length == 0) {\r\n            return throwError(() => new Error('NO_RESULTS'))\r\n        }\r\n        return of(res)\r\n    })\r\n}\r\n\r\nexport function handleEmptyResult<T>(data: WritableSignal<T[]>, withFiltro: WritableSignal<boolean>, toast: ToastService, message = 'No se encontraron resultados') {\r\n    if (withFiltro) {\r\n        withFiltro.set(true)\r\n    }\r\n    data.set([]);\r\n    toast.warning('Advertencia', message);\r\n}\r\n\r\nexport function handleSuccessResult<T>(data: WritableSignal<T[]>, withFiltro: WritableSignal<boolean>, result: T[], reload: boolean, tableHeader?: TableData[], procesador?: FormateadorService) {\r\n    if (!reload) {\r\n        withFiltro.set(false)\r\n    }\r\n    if (procesador) {\r\n        data.set(procesador.procesarLista(result, tableHeader))\r\n        return\r\n    }\r\n    data.set(result)\r\n}\r\n\r\nexport function handleSuccessApi(toast: ToastService, onRefresh?: () => void, message: string = 'proceso') {\r\n    toast.success('Éxito', `Se ${message} correctamente`)\r\n    onRefresh()\r\n}\r\n\r\nexport function handleReset<T>(reset: boolean, page: WritableSignal<number>, sender: WritableSignal<T>) {\r\n    if (reset) {\r\n        page.set(1)\r\n        sender.update(data => ({ ...data, offset: 0 }))\r\n    }\r\n}\r\n\r\nexport function handleResetNoSignal<T extends { offset?: number }>(reset: boolean, page: WritableSignal<number>, sender: T) {\r\n    if (reset) {\r\n        page.set(1)\r\n        sender.offset = 0\r\n    }\r\n}\r\n\r\nexport function handleResource<T>(apiFn: () => Observable<T>, signal?: Signal<any>) {\r\n  return rxResource({\r\n    request: signal,\r\n    loader: () => {\r\n      if (!signal || validarVacioAndNull(signal())) {\r\n        return apiFn();\r\n      }\r\n      return EMPTY;\r\n    }\r\n  });\r\n}\r\n\r\nexport function handleResourceV2<T>(\r\n  fn: () => Observable<T> | void,\r\n  signal?: Signal<any>\r\n) {\r\n  return rxResource({\r\n    request: signal,\r\n    loader: () => {\r\n      if (signal && !validarVacioAndNull(signal())) {\r\n        return EMPTY\r\n      }\r\n      const result = fn()\r\n      if (isObservable(result)) {\r\n        return result\r\n      }\r\n      return EMPTY\r\n    }\r\n  })\r\n}\r\n\r\n","/*\r\n * Public API Surface of ng-components-tsi\r\n */\r\n// ALERTAS\r\nexport * from './lib/ui/alerts/alert-confirmation/alert-confirmation.component';\r\nexport * from './lib/ui/alerts/alerta/alerta.component';\r\nexport * from './lib/ui/alerts/alert-error/alert-error.component';\r\nexport * from './lib/ui/alerts/badge/badge.component';\r\nexport * from './lib/ui/alerts/toaster/toaster.component';\r\n\r\n// DROPDOWN\r\nexport * from './lib/ui/dropdown/dropdown-cdk/dropdown-cdk.component';\r\nexport * from './lib/ui/dropdown/dropdown-simple/dropdown.component';\r\n\r\n// FORMS\r\nexport * from './lib/ui/forms/button/button.component';\r\nexport * from './lib/ui/forms/header/header.component';\r\nexport * from './lib/ui/forms/filter-toggle/filter-toggle.component';\r\n\r\n// INPUTS\r\nexport * from './lib/ui/forms/inputs/autocomplete/autocomplete.component';\r\nexport * from './lib/ui/forms/inputs/autocomplete-cdk/autocomplete.component';\r\nexport * from './lib/ui/forms/inputs/check-box/check-box.component';\r\nexport * from './lib/ui/forms/inputs/doble-input/doble-input.component';\r\nexport * from './lib/ui/forms/inputs/input/input.component';\r\nexport * from './lib/ui/forms/inputs/input-clase/input-clase.component';\r\nexport * from './lib/ui/forms/inputs/input-dinamico/input-dinamico.component';\r\nexport * from './lib/ui/forms/inputs/input-radio/input-radio.component';\r\nexport * from './lib/ui/forms/inputs/multiselected/multiselected.component';\r\nexport * from './lib/ui/forms/inputs/radio/radio.component';\r\nexport * from './lib/ui/forms/inputs/switch/switch.component';\r\nexport * from './lib/ui/forms/inputs/switch-activo/switch-activo.component';\r\n\r\n// LIST\r\nexport * from './lib/ui/forms/lists/list-option/list-option.component';\r\nexport * from './lib/ui/forms/lists/list-situaciones/list-situaciones.component';\r\nexport * from './lib/ui/forms/lists/multi-select-dropdown/multi-select-dropdown.component';\r\n\r\n// SIDEBAR\r\nexport * from './lib/ui/forms/sidebar/sidebar.component';\r\n\r\n// GENERAL\r\nexport * from './lib/ui/general/detalle-credito/detalle-credito.component';\r\nexport * from './lib/ui/general/montos-calcular/montos-calcular.component';\r\nexport * from './lib/ui/general/spinner/spinner.component';\r\n\r\n// TABLES\r\nexport * from './lib/ui/tables/dropdown-menu/dropdown-menu.component';\r\nexport * from './lib/ui/tables/card-mobile/card-mobile.component';\r\nexport * from './lib/ui/tables/paginador/paginador.component';\r\nexport * from './lib/ui/tables/table-advance/table-advance.component';\r\nexport * from './lib/ui/tables/table-advance-optimizada/table-advance-optimizada.component';\r\nexport * from './lib/ui/tables/table-busqueda/table-busqueda.component';\r\nexport * from './lib/ui/tables/table-detalle/table-detalle.component';\r\nexport * from './lib/ui/tables/table-simple/table-simple.component';\r\nexport * from './lib/ui/tables/table-ultimate/table-ultimate.component';\r\nexport * from './lib/ui/tables/table-ultimate-pinned/table-ultimate-pinned.component';\r\nexport * from './lib/ui/tables/table-ultimate-pivot/table-ultimate-pivot.component';\r\nexport * from './lib/ui/tables/table-agrupada/table-agrupada.component';\r\n\r\n// TABS\r\nexport * from './lib/ui/tabs/nav-tabs/nav-tabs.component';\r\nexport * from './lib/ui/tabs/tab-item/tab-item.component';\r\n\r\n// MODAL GENERICO\r\nexport * from './lib/modals/general/md-generico/md-generico.component';\r\n\r\n// SERVICES\r\nexport * from './lib/service/alert.service';\r\nexport * from './lib/service/alert-confirmation.service';\r\nexport * from './lib/service/alert-error.service';\r\nexport * from './lib/service/formateador.service';\r\nexport * from './lib/service/toast.service';\r\n\r\n\r\n// MODELS\r\nexport * from './lib/models/button-color.model';\r\nexport * from './lib/models/button-properties.model';\r\nexport * from './lib/models/cell-rendered';\r\nexport * from './lib/models/dropdownoption.model';\r\nexport * from './lib/models/input-config';\r\nexport * from './lib/models/table-data.model';\r\nexport * from './lib/models/selected-row';\r\nexport * from './lib/models/comercial/documentos-cab-auxiliares.model';\r\nexport * from './lib/models/general/recursos.model';\r\nexport * from './lib/models/general/utils.interface';\r\n\r\nexport * from './lib/utils/general/validaciones'\r\nexport * from './lib/utils/general/validaciones-simple'\r\n\r\nexport * from './lib/utils/helpers/api-result'\r\nexport * from './lib/utils/helpers/modal-result'\r\n\r\nexport * from './lib/enums/table-events'\r\n\r\nexport * from './lib/directivas/acciones/atajos.directive'\r\nexport * from './lib/directivas/inputs/caracteres-codigo.directive'\r\nexport * from './lib/directivas/inputs/decimal.directive'\r\nexport * from './lib/directivas/inputs/only-number-flex.directive'\r\nexport * from './lib/directivas/inputs/only-number.directive'\r\nexport * from './lib/directivas/estilos/animated-checkbox.directive'\r\nexport * from './lib/directivas/tables/tsi-column-def.directive'\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i2"],"mappings":"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"}