{"version":3,"file":"acontplus-ng-components.mjs","sources":["../../../../packages/ng-components/src/lib/components/cards/dynamic-card/dynamic-card.ts","../../../../packages/ng-components/src/lib/components/cards/dynamic-card/dynamic-card.html","../../../../packages/ng-components/src/lib/enums/report-format.ts","../../../../packages/ng-components/src/lib/components/button/button.ts","../../../../packages/ng-components/src/lib/components/button/button.html","../../../../packages/ng-components/src/lib/components/dialog-wrapper/dialog-wrapper.ts","../../../../packages/ng-components/src/lib/components/dialog-wrapper/dialog-wrapper.html","../../../../packages/ng-components/src/lib/components/icons/user-icon/user-icon.ts","../../../../packages/ng-components/src/lib/components/icons/user-icon/user-icon.html","../../../../packages/ng-components/src/lib/components/icons/svg-icon/svg-icon.ts","../../../../packages/ng-components/src/lib/components/icons/svg-icon/svg-icon.html","../../../../packages/ng-components/src/lib/components/input-chip/input-chip.ts","../../../../packages/ng-components/src/lib/components/input-chip/input-chip.html","../../../../packages/ng-components/src/lib/components/spinner/spinner.ts","../../../../packages/ng-components/src/lib/components/spinner/spinner.html","../../../../packages/ng-components/src/lib/pipes/get-total-pipe.ts","../../../../packages/ng-components/src/lib/pipes/status-display-pipe.ts","../../../../packages/ng-components/src/lib/components/tables/dynamic-table/dynamic-table.ts","../../../../packages/ng-components/src/lib/components/tables/dynamic-table/dynamic-table.html","../../../../packages/ng-components/src/lib/components/tables/tabulator-table/tabulator-table.ts","../../../../packages/ng-components/src/lib/components/tables/tabulator-table/tabulator-table.html","../../../../packages/ng-components/src/lib/services/dialog/advanced-dialog.service.ts","../../../../packages/ng-components/src/lib/services/overlay-service.ts","../../../../packages/ng-components/src/lib/services/theme-switcher.ts","../../../../packages/ng-components/src/lib/models/autocomplete-wrapper-item.ts","../../../../packages/ng-components/src/lib/services/autocomplete-wrapper-service.ts","../../../../packages/ng-components/src/lib/components/theme-toggle/theme-toggle.ts","../../../../packages/ng-components/src/lib/components/theme-toggle/theme-toggle.html","../../../../packages/ng-components/src/lib/models/mat-table/field-definition.ts","../../../../packages/ng-components/src/lib/models/mat-table/column-definition.ts","../../../../packages/ng-components/src/lib/models/mat-table/table-cell-index.ts","../../../../packages/ng-components/src/lib/models/pagination.ts","../../../../packages/ng-components/src/lib/components/autocomplete-wrapper/autocomplete-wrapper.ts","../../../../packages/ng-components/src/lib/components/autocomplete-wrapper/autocomplete-wrapper.html","../../../../packages/ng-components/src/lib/directives/to-upper-case.ts","../../../../packages/ng-components/src/acontplus-ng-components.ts"],"sourcesContent":["import { Component, input, output, booleanAttribute, ViewEncapsulation } from '@angular/core';\nimport { MatCardModule } from '@angular/material/card';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\n\n/**\n * A versatile card component that wraps Angular Material's mat-card with additional functionality\n * and customization options. This component provides a consistent card layout with configurable\n * header, content, and action areas.\n *\n * @example\n * <acp-dynamic-card\n *   [cardTitle]=\"'Card Title'\"\n *   [cardSubtitle]=\"'Card Subtitle'\"\n *   [isHeaderVisible]=\"true\"\n *   [areActionsVisible]=\"true\"\n *   (primaryButtonClicked)=\"onPrimaryAction()\">\n *   Card content goes here\n * </acp-dynamic-card>\n */\n@Component({\n  selector: 'acp-dynamic-card',\n  standalone: true,\n  imports: [MatCardModule, MatButtonModule, MatIconModule],\n  templateUrl: './dynamic-card.html',\n  styleUrl: './dynamic-card.scss',\n  encapsulation: ViewEncapsulation.None,\n})\nexport class DynamicCard {\n  // Header inputs\n  /**\n   * The title text to display in the card header.\n   * @default null\n   */\n  cardTitle = input<string | null>(null);\n\n  /**\n   * The subtitle text to display in the card header.\n   * @default null\n   */\n  cardSubtitle = input<string | null>(null);\n\n  /**\n   * URL for the avatar image to display in the card header.\n   * @default null\n   */\n  avatarImageUrl = input<string | null>(null);\n\n  /**\n   * Whether to show the card header section.\n   * @default false\n   */\n  isHeaderVisible = input(false, { transform: booleanAttribute });\n\n  // Content inputs\n  /**\n   * CSS padding value for the card content area.\n   * @default '1rem'\n   */\n  contentPadding = input<string>('1rem');\n\n  /**\n   * Whether to show a divider between the header and content sections.\n   * @default false\n   */\n  hasDivider = input(false, { transform: booleanAttribute });\n\n  // Action inputs\n  /**\n   * Whether to show the action buttons section.\n   * @default false\n   */\n  areActionsVisible = input(false, { transform: booleanAttribute });\n\n  /**\n   * Text for the primary action button.\n   * @default 'Confirm'\n   */\n  primaryButtonText = input('Confirm');\n\n  /**\n   * Text for the secondary action button.\n   * @default 'Cancel'\n   */\n  secondaryButtonText = input('Cancel');\n\n  /**\n   * Material icon name for the primary button.\n   * @default null\n   */\n  primaryButtonIcon = input<string | null>(null);\n\n  /**\n   * Material icon name for the secondary button.\n   * @default null\n   */\n  secondaryButtonIcon = input<string | null>(null);\n\n  /**\n   * Alignment of the action buttons.\n   * @default 'end'\n   */\n  buttonsPosition = input<'start' | 'end'>('end');\n\n  // Output events\n  /**\n   * Event emitted when the primary button is clicked.\n   */\n  primaryButtonClicked = output<void>();\n\n  /**\n   * Event emitted when the secondary button is clicked.\n   */\n  secondaryButtonClicked = output<void>();\n\n  /**\n   * Event emitted when the card is clicked.\n   */\n  cardClicked = output<Event>();\n\n  // Methods\n  /**\n   * Handles the primary button click event.\n   * Stops event propagation and emits the primaryButtonClicked event.\n   * @param event The click event\n   */\n  handlePrimaryButtonClick(event: Event): void {\n    event.stopPropagation();\n    this.primaryButtonClicked.emit();\n  }\n\n  /**\n   * Handles the secondary button click event.\n   * Stops event propagation and emits the secondaryButtonClicked event.\n   * @param event The click event\n   */\n  handleSecondaryButtonClick(event: Event): void {\n    event.stopPropagation();\n    this.secondaryButtonClicked.emit();\n  }\n\n  /**\n   * Handles the card click event.\n   * Emits the cardClicked event with the original event.\n   * @param event The click event\n   */\n  handleCardClick(event: Event): void {\n    this.cardClicked.emit(event);\n  }\n}\n","<mat-card\n  appearance=\"outlined\"\n  (click)=\"handleCardClick($event)\"\n  [class.mat-card-divider]=\"hasDivider()\"\n>\n  @if (isHeaderVisible()) {\n  <mat-card-header>\n    @if (avatarImageUrl()) {\n    <img mat-card-avatar [src]=\"avatarImageUrl()\" alt=\"Card avatar\" />\n    } @if (cardTitle()) {\n    <mat-card-title>{{ cardTitle() }}</mat-card-title>\n    } @if (cardSubtitle()) {\n    <mat-card-subtitle>{{ cardSubtitle() }}</mat-card-subtitle>\n    }\n  </mat-card-header>\n  }\n\n  <mat-card-content [style.padding]=\"contentPadding()\">\n    <ng-content />\n  </mat-card-content>\n\n  @if (areActionsVisible()) {\n  <mat-card-actions [align]=\"buttonsPosition()\">\n    @if (secondaryButtonText()) {\n    <button mat-button color=\"warn\" (click)=\"handleSecondaryButtonClick($event)\">\n      @if (secondaryButtonIcon()) {\n      <mat-icon>{{ secondaryButtonIcon() }}</mat-icon>\n      } {{ secondaryButtonText() }}\n    </button>\n    } @if (primaryButtonText()) {\n    <button mat-button color=\"primary\" (click)=\"handlePrimaryButtonClick($event)\">\n      @if (primaryButtonIcon()) {\n      <mat-icon>{{ primaryButtonIcon() }}</mat-icon>\n      } {{ primaryButtonText() }}\n    </button>\n    }\n  </mat-card-actions>\n  }\n</mat-card>\n","export enum REPORT_FORMAT {\n  PDF = 'pdf',\n  EXCEL = 'excel',\n  WORD = 'word',\n  IMAGE = 'image',\n  XML = 'xml',\n  CSV = 'csv',\n  MHTML = 'mhtml',\n  HTML = 'html',\n}\n","import { Component, input, output, ViewEncapsulation } from '@angular/core';\nimport { MatButton, MatFabButton, MatIconButton, MatMiniFabButton } from '@angular/material/button';\nimport { NgClass, NgTemplateOutlet } from '@angular/common';\nimport { MatIcon } from '@angular/material/icon';\nimport { ButtonType, ButtonVariant, MaterialButtonStyle } from '../../types/button-type';\nimport { REPORT_FORMAT } from '../../enums';\n\n@Component({\n  selector: 'acp-button',\n  imports: [\n    MatButton,\n    NgClass,\n    MatIcon,\n    MatMiniFabButton,\n    MatIconButton,\n    MatFabButton,\n    NgTemplateOutlet,\n  ],\n  templateUrl: './button.html',\n  styleUrl: './button.scss',\n  encapsulation: ViewEncapsulation.None,\n})\nexport class Button {\n  variant = input<ButtonVariant>('primary');\n  text = input<string>('');\n  icon = input<string>('');\n  disabled = input<boolean>(false);\n  type = input<ButtonType>('button');\n  matStyle = input<MaterialButtonStyle>('elevated');\n  customClass = input<string | undefined>();\n\n  // Report format support - automatically sets icon and variant based on report type\n  reportFormat = input<REPORT_FORMAT | undefined>();\n\n  extended = input<boolean>(false); // For extended FAB\n  title = input<string>('');\n  ariaLabel = input<string>('');\n  name = input<string>('');\n  id = input<string>('');\n  form = input<string>('');\n  tabIndex = input<number>(0);\n  testId = input<string>('');\n\n  handleClick = output<unknown>();\n\n  /**\n   * Gets the icon to display. If reportFormat is provided and no explicit icon is set,\n   * returns the appropriate icon for the report format.\n   */\n  getIcon(): string {\n    const explicitIcon = this.icon();\n    if (explicitIcon) {\n      return explicitIcon;\n    }\n\n    const format = this.reportFormat();\n    if (format) {\n      return this.getReportIcon(format);\n    }\n\n    return '';\n  }\n\n  /**\n   * Gets the variant to use. If reportFormat is provided and variant is still 'primary' (default),\n   * returns the appropriate variant for the report format.\n   */\n  getVariant(): ButtonVariant {\n    const format = this.reportFormat();\n    const currentVariant = this.variant();\n\n    // Only auto-apply report variant if user hasn't explicitly set a variant\n    if (format && currentVariant === 'primary') {\n      return this.getReportVariant(format);\n    }\n\n    return currentVariant;\n  }\n\n  /**\n   * Gets the title to display. If reportFormat is provided, automatically appends\n   * the format name to the title (e.g., \"Export PDF\", \"Download Excel\").\n   */\n  getTitle(): string {\n    const baseTitle = this.title();\n    const format = this.reportFormat();\n\n    if (format && baseTitle) {\n      const formatName = this.getReportFormatName(format);\n      return `${baseTitle} - ${formatName}`;\n    }\n\n    if (format && !baseTitle) {\n      return this.getReportFormatName(format);\n    }\n\n    return baseTitle;\n  }\n\n  /**\n   * Maps report format to appropriate icon\n   */\n  private getReportIcon(format: REPORT_FORMAT): string {\n    switch (format) {\n      case REPORT_FORMAT.PDF:\n        return 'picture_as_pdf';\n      case REPORT_FORMAT.EXCEL:\n        return 'table_view';\n      case REPORT_FORMAT.WORD:\n        return 'description';\n      case REPORT_FORMAT.IMAGE:\n        return 'image';\n      case REPORT_FORMAT.XML:\n        return 'code';\n      case REPORT_FORMAT.CSV:\n        return 'grid_on';\n      case REPORT_FORMAT.MHTML:\n        return 'web';\n      case REPORT_FORMAT.HTML:\n        return 'html';\n      default:\n        return 'download';\n    }\n  }\n\n  /**\n   * Maps report format to appropriate button variant/color\n   */\n  private getReportVariant(format: REPORT_FORMAT): ButtonVariant {\n    switch (format) {\n      case REPORT_FORMAT.PDF:\n        return 'danger';\n      case REPORT_FORMAT.EXCEL:\n      case REPORT_FORMAT.CSV:\n        return 'success';\n      case REPORT_FORMAT.WORD:\n        return 'primary';\n      case REPORT_FORMAT.IMAGE:\n      case REPORT_FORMAT.HTML:\n        return 'info';\n      case REPORT_FORMAT.XML:\n        return 'warning';\n      case REPORT_FORMAT.MHTML:\n        return 'secondary';\n      default:\n        return 'secondary';\n    }\n  }\n\n  /**\n   * Maps report format to human-readable name\n   */\n  private getReportFormatName(format: REPORT_FORMAT): string {\n    switch (format) {\n      case REPORT_FORMAT.PDF:\n        return 'PDF';\n      case REPORT_FORMAT.EXCEL:\n        return 'Excel';\n      case REPORT_FORMAT.WORD:\n        return 'Word';\n      case REPORT_FORMAT.IMAGE:\n        return 'Image';\n      case REPORT_FORMAT.XML:\n        return 'XML';\n      case REPORT_FORMAT.CSV:\n        return 'CSV';\n      case REPORT_FORMAT.MHTML:\n        return 'MHTML';\n      case REPORT_FORMAT.HTML:\n        return 'HTML';\n      default:\n        return 'File';\n    }\n  }\n\n  getButtonClasses(): Record<string, boolean> {\n    const classes: Record<string, boolean> = {\n      [`mat-btn-${this.getVariant()}`]: true,\n    };\n    const customClass = this.customClass();\n    if (customClass) {\n      classes[customClass] = true;\n    }\n    return classes;\n  }\n\n  getDisplayText(): string {\n    const style = this.matStyle();\n    if (style === 'icon' || style === 'fab' || style === 'mini-fab') {\n      return '';\n    }\n    return this.text();\n  }\n}\n","@switch (matStyle()) { @case ('text') {\n<button\n  matButton\n  [ngClass]=\"getButtonClasses()\"\n  [disabled]=\"disabled()\"\n  [type]=\"type()\"\n  [title]=\"getTitle()\"\n  [attr.aria-label]=\"ariaLabel() || getTitle()\"\n  [attr.name]=\"name()\"\n  [attr.id]=\"id()\"\n  [attr.form]=\"form()\"\n  [attr.tabindex]=\"tabIndex()\"\n  [attr.data-testid]=\"testId()\"\n  (click)=\"handleClick.emit($event)\"\n>\n  <ng-container [ngTemplateOutlet]=\"buttonContent\" />\n</button>\n} @case ('elevated') {\n<button\n  matButton=\"elevated\"\n  [ngClass]=\"getButtonClasses()\"\n  [disabled]=\"disabled()\"\n  [type]=\"type()\"\n  [title]=\"getTitle()\"\n  [attr.aria-label]=\"ariaLabel() || getTitle()\"\n  [attr.name]=\"name()\"\n  [attr.id]=\"id()\"\n  [attr.form]=\"form()\"\n  [attr.tabindex]=\"tabIndex()\"\n  [attr.data-testid]=\"testId()\"\n  (click)=\"handleClick.emit($event)\"\n>\n  <ng-container [ngTemplateOutlet]=\"buttonContent\" />\n</button>\n} @case ('outlined') {\n<button\n  matButton=\"outlined\"\n  [ngClass]=\"getButtonClasses()\"\n  [disabled]=\"disabled()\"\n  [type]=\"type()\"\n  [title]=\"getTitle()\"\n  [attr.aria-label]=\"ariaLabel() || getTitle()\"\n  [attr.name]=\"name()\"\n  [attr.id]=\"id()\"\n  [attr.form]=\"form()\"\n  [attr.tabindex]=\"tabIndex()\"\n  [attr.data-testid]=\"testId()\"\n  (click)=\"handleClick.emit($event)\"\n>\n  <ng-container [ngTemplateOutlet]=\"buttonContent\" />\n</button>\n} @case ('tonal') {\n<button\n  matButton=\"tonal\"\n  [ngClass]=\"getButtonClasses()\"\n  [disabled]=\"disabled()\"\n  [type]=\"type()\"\n  [title]=\"getTitle()\"\n  [attr.aria-label]=\"ariaLabel() || getTitle()\"\n  [attr.name]=\"name()\"\n  [attr.id]=\"id()\"\n  [attr.form]=\"form()\"\n  [attr.tabindex]=\"tabIndex()\"\n  [attr.data-testid]=\"testId()\"\n  (click)=\"handleClick.emit($event)\"\n>\n  <ng-container [ngTemplateOutlet]=\"buttonContent\" />\n</button>\n} @case ('icon') {\n<button\n  matIconButton\n  [ngClass]=\"getButtonClasses()\"\n  [disabled]=\"disabled()\"\n  [type]=\"type()\"\n  [title]=\"getTitle()\"\n  [attr.aria-label]=\"ariaLabel() || getTitle()\"\n  [attr.name]=\"name()\"\n  [attr.id]=\"id()\"\n  [attr.form]=\"form()\"\n  [attr.tabindex]=\"tabIndex()\"\n  [attr.data-testid]=\"testId()\"\n  (click)=\"handleClick.emit($event)\"\n>\n  <ng-container [ngTemplateOutlet]=\"buttonContent\" />\n</button>\n} @case ('fab') {\n<button\n  matFab\n  [ngClass]=\"getButtonClasses()\"\n  [disabled]=\"disabled()\"\n  [type]=\"type()\"\n  [title]=\"getTitle()\"\n  [attr.aria-label]=\"ariaLabel() || getTitle()\"\n  [attr.name]=\"name()\"\n  [attr.id]=\"id()\"\n  [attr.form]=\"form()\"\n  [attr.tabindex]=\"tabIndex()\"\n  [attr.data-testid]=\"testId()\"\n  (click)=\"handleClick.emit($event)\"\n>\n  <ng-container [ngTemplateOutlet]=\"buttonContent\" />\n</button>\n} @case ('mini-fab') {\n<button\n  matMiniFab\n  [ngClass]=\"getButtonClasses()\"\n  [disabled]=\"disabled()\"\n  [type]=\"type()\"\n  [title]=\"getTitle()\"\n  [attr.aria-label]=\"ariaLabel() || getTitle()\"\n  [attr.name]=\"name()\"\n  [attr.id]=\"id()\"\n  [attr.form]=\"form()\"\n  [attr.tabindex]=\"tabIndex()\"\n  [attr.data-testid]=\"testId()\"\n  (click)=\"handleClick.emit($event)\"\n>\n  <ng-container [ngTemplateOutlet]=\"buttonContent\" />\n</button>\n} @case ('extended-fab') {\n<button\n  matFab\n  extended\n  [ngClass]=\"getButtonClasses()\"\n  [disabled]=\"disabled()\"\n  [type]=\"type()\"\n  [title]=\"getTitle()\"\n  [attr.aria-label]=\"ariaLabel() || getTitle()\"\n  [attr.name]=\"name()\"\n  [attr.id]=\"id()\"\n  [attr.form]=\"form()\"\n  [attr.tabindex]=\"tabIndex()\"\n  [attr.data-testid]=\"testId()\"\n  (click)=\"handleClick.emit($event)\"\n>\n  <ng-container [ngTemplateOutlet]=\"buttonContent\" />\n</button>\n} @default {\n<button\n  matButton=\"filled\"\n  [ngClass]=\"getButtonClasses()\"\n  [disabled]=\"disabled()\"\n  [type]=\"type()\"\n  [title]=\"getTitle()\"\n  [attr.aria-label]=\"ariaLabel() || getTitle()\"\n  [attr.name]=\"name()\"\n  [attr.id]=\"id()\"\n  [attr.form]=\"form()\"\n  [attr.tabindex]=\"tabIndex()\"\n  [attr.data-testid]=\"testId()\"\n  (click)=\"handleClick.emit($event)\"\n>\n  <ng-container [ngTemplateOutlet]=\"buttonContent\" />\n</button>\n} }\n\n<ng-template #buttonContent>\n  @if (getIcon()) {\n  <mat-icon>{{ getIcon() }}</mat-icon>\n  } @if (getDisplayText()) { {{ getDisplayText() }} }\n\n  <ng-content />\n</ng-template>\n","import {\n  Component,\n  ViewContainerRef,\n  AfterViewInit,\n  ElementRef,\n  ChangeDetectionStrategy,\n  inject,\n  viewChild,\n  OnDestroy,\n  ViewEncapsulation,\n} from '@angular/core';\n\nimport { CdkDrag, CdkDragHandle } from '@angular/cdk/drag-drop';\nimport { MAT_DIALOG_DATA, MatDialogRef, MatDialogModule } from '@angular/material/dialog';\nimport { MatIconModule } from '@angular/material/icon';\nimport { DialogWrapperConfig } from '../../services';\nimport { Button } from '../button';\n\n/**\n * A wrapper component for Angular Material dialogs that provides a consistent look and feel,\n * including a draggable header and the ability to dynamically create components inside the dialog.\n *\n * This component is typically used with the AdvancedDialogService's openInWrapper method.\n *\n * @example\n * // In your service or component:\n * this.dialogService.openInWrapper({\n *   component: YourDialogContentComponent,\n *   title: 'Dialog Title',\n *   icon: 'info',\n *   data: { message: 'This is some data passed to the dialog content component' }\n * });\n */\n@Component({\n  selector: 'acp-dialog-wrapper',\n  standalone: true,\n  imports: [CdkDrag, CdkDragHandle, MatDialogModule, MatIconModule, Button],\n  templateUrl: './dialog-wrapper.html',\n  styleUrls: ['./dialog-wrapper.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  encapsulation: ViewEncapsulation.None,\n})\nexport class DialogWrapper implements AfterViewInit, OnDestroy {\n  dialogRef = inject<MatDialogRef<DialogWrapper>>(MatDialogRef);\n  config = inject<DialogWrapperConfig>(MAT_DIALOG_DATA);\n\n  /**\n   * A template reference that acts as an anchor for dynamic content.\n   * This is where the component specified in the config will be rendered.\n   */\n  readonly contentHost = viewChild.required('contentHost', { read: ViewContainerRef });\n\n  /**\n   * A reference to the header element for the z-index focus logic.\n   * Used to bring the dialog to the front when clicked.\n   */\n  readonly header = viewChild<ElementRef>('dialogHeader');\n\n  /**\n   * Static counter to track the highest z-index for multiple dialogs.\n   * Ensures that the most recently clicked dialog appears on top.\n   */\n  private static lastZIndex = 1000;\n\n  /**\n   * Timeout ID for debouncing z-index updates to prevent excessive DOM manipulations.\n   */\n  private bringToFrontTimeoutId: number | null = null;\n\n  /**\n   * Creates an instance of DialogWrapper.\n   *\n   * @param dialogRef Reference to the dialog opened via the Material Dialog service\n   * @param config Configuration for the dialog wrapper, injected from MAT_DIALOG_DATA\n   */\n  constructor() {\n    // Constructor intentionally empty - required by Angular DI\n  }\n\n  /**\n   * Lifecycle hook that initializes the dynamic content after the view is ready.\n   * Creates the component specified in the config and passes data to it.\n   */\n  ngAfterViewInit(): void {\n    // Dynamically create the content component after the view is ready.\n    this.contentHost().clear();\n    const componentRef = this.contentHost().createComponent(this.config.component);\n\n    // Pass the provided data directly to the new component's instance.\n    // This requires the content component to have an @Input() property named 'data'.\n    if (this.config.data && componentRef.instance) {\n      (componentRef.instance as any).data = this.config.data;\n    }\n  }\n\n  /**\n   * Cleanup lifecycle hook to cancel any pending animation frame requests.\n   */\n  ngOnDestroy(): void {\n    if (this.bringToFrontTimeoutId !== null) {\n      cancelAnimationFrame(this.bringToFrontTimeoutId);\n      this.bringToFrontTimeoutId = null;\n    }\n  }\n\n  /**\n   * Closes the dialog.\n   * Called when the close button in the header is clicked.\n   */\n  onClose(): void {\n    this.dialogRef.close();\n  }\n\n  /**\n   * Brings the dialog to the front by adjusting its z-index.\n   * Uses requestAnimationFrame to debounce updates and prevent excessive DOM manipulations.\n   * Called when the dialog header is clicked.\n   */\n  bringToFront(): void {\n    // Clear any pending update\n    if (this.bringToFrontTimeoutId !== null) {\n      cancelAnimationFrame(this.bringToFrontTimeoutId);\n    }\n\n    // Schedule the z-index update for the next animation frame\n    this.bringToFrontTimeoutId = requestAnimationFrame(() => {\n      const pane = this.header()?.nativeElement.closest('.cdk-overlay-pane') as HTMLElement;\n      if (pane) {\n        pane.style.zIndex = (++DialogWrapper.lastZIndex).toString();\n      }\n      this.bringToFrontTimeoutId = null;\n    });\n  }\n}\n","@if (!config.hideHeader) {\n<div\n  class=\"acp-dialog-header\"\n  cdkDrag\n  cdkDragRootElement=\".cdk-overlay-pane\"\n  cdkDragHandle\n  #dialogHeader\n  (mousedown)=\"bringToFront()\"\n>\n  <h6 mat-dialog-title class=\"acp-dialog-title\">\n    @if (config.icon) {\n    <mat-icon class=\"acp-dialog-title-icon\" aria-hidden=\"true\">{{ config.icon }}</mat-icon>\n    }\n    <span>{{ config.title }}</span>\n    @if (config.showCloseButton !== false) {\n    <acp-button\n      [customClass]=\"'acp-dialog-close-btn'\"\n      matStyle=\"icon\"\n      icon=\"close\"\n      (handleClick)=\"onClose()\"\n      ariaLabel=\"Close Dialog\"\n    />\n    }\n  </h6>\n</div>\n}\n\n<ng-template #contentHost />\n","import { Component, input, ViewEncapsulation } from '@angular/core';\n\n@Component({\n  selector: 'acp-user-icon',\n  imports: [],\n  templateUrl: './user-icon.html',\n  styleUrl: './user-icon.scss',\n  encapsulation: ViewEncapsulation.None,\n})\nexport class UserIcon {\n  size = input('35');\n}\n","<svg\n  [attr.width]=\"size()\"\n  [attr.height]=\"size()\"\n  version=\"1.1\"\n  id=\"Capa_1\"\n  xmlns=\"http://www.w3.org/2000/svg\"\n  xmlns:xlink=\"http://www.w3.org/1999/xlink\"\n  viewBox=\"0 0 480 480\"\n  xml:space=\"preserve\"\n  fill=\"#000000\"\n>\n  <g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g>\n  <g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g>\n  <g id=\"SVGRepo_iconCarrier\">\n    <g>\n      <g>\n        <circle style=\"fill: #b8bac0\" cx=\"240\" cy=\"240\" r=\"240\"></circle>\n      </g>\n      <g>\n        <g>\n          <path\n            style=\"fill: #ffffff\"\n            d=\"M240,360.07c-27.944,0-53.297-11.991-72.003-31.372c-0.014,11.615-0.436,28.379-3.516,40.611 c2.02,1.235,3.588,3.262,3.894,5.784c3.992,32.484,34.781,56.977,71.625,56.977c36.836,0,67.625-24.496,71.625-56.977 c0.31-2.525,1.844-4.549,3.895-5.78c-3.08-12.233-3.503-28.999-3.517-40.615C293.297,348.079,267.944,360.07,240,360.07z\"\n          ></path>\n        </g>\n      </g>\n      <g>\n        <g>\n          <path\n            style=\"fill: #d7dbe0\"\n            d=\"M310.44,330.174c-18.549,18.477-43.242,29.896-70.44,29.896 c-27.944,0-53.297-11.991-72.003-31.372c-0.014,11.615-0.436,28.379-3.516,40.611c2.02,1.235,3.588,3.262,3.894,5.784 c1.765,14.359,8.778,27.144,19.223,36.954C235.766,405.265,290.437,357.702,310.44,330.174z\"\n          ></path>\n        </g>\n      </g>\n      <g>\n        <g>\n          <path\n            style=\"fill: #ffffff\"\n            d=\"M312,160.07H176c-22.055,0-40,17.945-40,40v48c0,61.758,46.656,112,104,112s104-50.242,104-112 v-56C344,174.426,329.648,160.07,312,160.07z\"\n          ></path>\n        </g>\n      </g>\n      <g>\n        <g>\n          <path\n            style=\"fill: #5c546a\"\n            d=\"M296,72.07H192c-15.047,0-27.695,10.438-31.102,24.449C133.359,100.02,112,123.598,112,152.07v40 c0,20.617,8.752,39.851,24,53.52v-45.52c0-22.055,17.945-40,40-40h136c17.648,0,32,14.355,32,32v53.511 c15.251-13.667,24-32.899,24-53.511v-48C368,104.371,335.703,72.07,296,72.07z\"\n          ></path>\n        </g>\n      </g>\n      <g>\n        <path\n          style=\"fill: #5c546a\"\n          d=\"M61.632,400.544C105.562,449.319,169.191,480,240,480s134.438-30.681,178.368-79.456 c-7.66-10.356-18.462-18.77-32.352-22.659c-0.32-0.09-0.641-0.16-0.969-0.207l-63.859-9.582c-0.391-0.059-1.227-0.09-1.625-0.09 c-4.039,0-7.445,3.012-7.938,7.023c-4,32.48-34.789,56.977-71.625,56.977c-36.844,0-67.633-24.492-71.625-56.977 c-0.5-4.129-4.219-7.234-8.141-7.02c-0.469-0.027-0.93,0.012-1.422,0.086l-63.859,9.582c-0.328,0.047-0.648,0.117-0.969,0.207 C80.094,381.775,69.292,390.188,61.632,400.544z\"\n        ></path>\n      </g>\n    </g>\n  </g>\n</svg>\n","import { Component, input, ViewEncapsulation } from '@angular/core';\n\n@Component({\n  selector: 'acp-svg-icon',\n  imports: [],\n  templateUrl: './svg-icon.html',\n  styleUrl: './svg-icon.scss',\n  encapsulation: ViewEncapsulation.None,\n})\nexport class SvgIcon {\n  id = input('');\n  width = input('40px');\n  height = input('40px');\n  color = input('#414141');\n}\n","<svg [attr.width]=\"width()\" [attr.height]=\"height()\" [style.color]=\"color()\">\n  <use [attr.xlink:href]=\"'./svg-sprite.svg#' + id()\"></use>\n</svg>\n","import { Component, inject, input, ViewEncapsulation } from '@angular/core';\nimport {\n  MatChipEditedEvent,\n  MatChipGrid,\n  MatChipInput,\n  MatChipInputEvent,\n  MatChipRow,\n} from '@angular/material/chips';\nimport { MatFormField, MatLabel, MatHint } from '@angular/material/form-field';\nimport { MatIcon } from '@angular/material/icon';\nimport { LiveAnnouncer } from '@angular/cdk/a11y';\nimport { COMMA, ENTER } from '@angular/cdk/keycodes';\n\n@Component({\n  selector: 'acp-input-chip',\n  imports: [MatFormField, MatLabel, MatChipRow, MatIcon, MatHint, MatChipGrid, MatChipInput],\n  templateUrl: './input-chip.html',\n  styleUrl: './input-chip.scss',\n  encapsulation: ViewEncapsulation.None,\n})\nexport class InputChip {\n  chips = input.required<string[]>();\n  labelText = input.required<string>();\n  placelholder = input<string>('');\n  addOnBlur = true;\n  readonly separatorKeysCodes = [ENTER, COMMA] as const;\n\n  announcer = inject(LiveAnnouncer);\n\n  add(event: MatChipInputEvent): void {\n    const value = (event.value || '').trim();\n\n    // Add our fruit\n    if (value) {\n      this.chips().push(value);\n    }\n\n    // Clear the input value\n    event.chipInput!.clear();\n  }\n\n  remove(value: string): void {\n    const index = this.chips().indexOf(value);\n\n    if (index >= 0) {\n      this.chips().splice(index, 1);\n\n      this.announcer.announce(`Removed ${value}`);\n    }\n  }\n\n  edit(inputRaw: string, event: MatChipEditedEvent) {\n    const value = event.value.trim();\n\n    // Remove fruit if it no longer has a name\n    if (!value) {\n      this.remove(inputRaw);\n      return;\n    }\n\n    // Edit existing fruit\n    const index = this.chips().indexOf(inputRaw);\n    if (index >= 0) {\n      this.chips()[index] = value.replace(/\\s+/g, '');\n    }\n  }\n}\n","<mat-form-field class=\"w-100\" appearance=\"outline\">\n  <mat-label>{{ labelText() }}</mat-label>\n  <mat-chip-grid #chipGrid aria-label=\"Enter fruits\">\n    @for (chip of chips(); track $index) {\n    <mat-chip-row\n      (removed)=\"remove(chip)\"\n      [editable]=\"true\"\n      (edited)=\"edit(chip, $event)\"\n      [aria-description]=\"'press enter to edit ' + chip\"\n    >\n      {{ chip }}\n      <button matChipRemove [attr.aria-label]=\"'remove ' + chip\">\n        <mat-icon>cancel</mat-icon>\n      </button>\n    </mat-chip-row>\n    }\n    <input\n      [placeholder]=\"placelholder()\"\n      [matChipInputFor]=\"chipGrid\"\n      [matChipInputSeparatorKeyCodes]=\"separatorKeysCodes\"\n      [matChipInputAddOnBlur]=\"addOnBlur\"\n      (matChipInputTokenEnd)=\"add($event)\"\n    />\n  </mat-chip-grid>\n  <mat-hint align=\"start\"><strong>Ingrese {{ labelText() }} y dale \"Enter\"</strong> </mat-hint>\n</mat-form-field>\n","import { Component, ViewEncapsulation } from '@angular/core';\nimport { MatProgressSpinner } from '@angular/material/progress-spinner';\n\n@Component({\n  selector: 'acp-spinner',\n  imports: [MatProgressSpinner],\n  templateUrl: './spinner.html',\n  styleUrl: './spinner.scss',\n  encapsulation: ViewEncapsulation.None,\n})\nexport class Spinner {}\n","<div class=\"acp-spinner\">\n  <mat-spinner />\n</div>\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n  name: 'getTotal',\n  standalone: true,\n})\nexport class GetTotalPipe implements PipeTransform {\n  transform(colName: string, dataSource: any[]): any {\n    return this.getTotal(colName, dataSource) || '';\n  }\n\n  /**\n   * Calculate and return the total (sum) of all the column --> the column must be number\n   */\n  getTotal(colName: string, dataSource: any[]): number {\n    const total = dataSource\n      .map(row => row[colName])\n      .reduce((acc, value) => (value ? acc + Number(value) : acc), 0);\n    return total?.toFixed(2);\n  }\n}\n","import { inject, Pipe, PipeTransform } from '@angular/core';\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\nimport { TranslocoService } from '@jsverse/transloco';\n\ntype StatusGender = 'male' | 'female' | 'neutral';\n\ninterface StatusOptions {\n  gender?: StatusGender;\n  showIcon?: boolean;\n  customActiveText?: string;\n  customInactiveText?: string;\n  textClass?: string;\n  iconClass?: string;\n}\n\ntype TranslationKey =\n  | 'status.active'\n  | 'status.inactive'\n  | 'status.active.male'\n  | 'status.active.female'\n  | 'status.inactive.male'\n  | 'status.inactive.female';\n\n@Pipe({\n  name: 'statusDisplay',\n})\nexport class StatusDisplayPipe implements PipeTransform {\n  private sanitizer = inject(DomSanitizer);\n  private transloco = inject(TranslocoService, { optional: true });\n\n  transform(isActive: boolean, options: StatusOptions = {}): SafeHtml {\n    const {\n      gender = 'neutral',\n      showIcon = true,\n      customActiveText,\n      customInactiveText,\n      textClass = '',\n      iconClass = '',\n    } = options;\n\n    const text = this.getStatusText(isActive, gender, customActiveText, customInactiveText);\n    const icon = isActive ? 'check_circle' : 'cancel';\n    const colorClass = isActive ? 'text-green-500' : 'text-red-500';\n    const combinedIconClass = `${colorClass} align-middle mr-1 ${iconClass}`.trim();\n    const combinedTextClass = `align-middle ${textClass}`.trim();\n\n    let html = '';\n\n    if (showIcon) {\n      html += `<mat-icon class=\"${combinedIconClass}\" fontIcon=\"${icon}\"></mat-icon>`;\n    }\n\n    html += `<span class=\"${combinedTextClass}\">${text}</span>`;\n\n    return this.sanitizer.bypassSecurityTrustHtml(html);\n  }\n\n  private getStatusText(\n    isActive: boolean,\n    gender: StatusGender,\n    customActive?: string,\n    customInactive?: string,\n  ): string {\n    if (customActive && isActive) return customActive;\n    if (customInactive && !isActive) return customInactive;\n    if (!this.transloco) return this.getFallbackText(isActive, gender);\n\n    const translationKey = this.getTranslationKey(isActive, gender);\n    const translation = this.transloco.translate(translationKey);\n\n    return translation !== translationKey ? translation : this.getFallbackText(isActive, gender);\n  }\n\n  private getTranslationKey(isActive: boolean, gender: StatusGender): TranslationKey {\n    const base = isActive ? 'status.active' : 'status.inactive';\n    return gender !== 'neutral'\n      ? (`${base}.${gender}` as TranslationKey)\n      : (base as TranslationKey);\n  }\n\n  private getFallbackText(isActive: boolean, gender: StatusGender): string {\n    const lang = this.transloco?.getActiveLang() || 'en';\n    const isSpanish = lang.startsWith('es');\n\n    if (!isSpanish) {\n      return isActive ? 'Active' : 'Inactive';\n    }\n\n    if (isActive) {\n      return gender === 'female' ? 'Activa' : 'Activo';\n    } else {\n      return gender === 'female' ? 'Inactiva' : 'Inactivo';\n    }\n  }\n}\n","import {\n  AfterContentInit,\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  inject,\n  Input,\n  OnChanges,\n  OnDestroy,\n  OnInit,\n  SimpleChanges,\n  TemplateRef,\n  ViewContainerRef,\n  ComponentRef,\n  EmbeddedViewRef,\n  input,\n  output,\n  contentChildren,\n  viewChild,\n  ViewEncapsulation,\n} from '@angular/core';\nimport {\n  MatColumnDef,\n  MatFooterRowDef,\n  MatHeaderRowDef,\n  MatRowDef,\n  MatTable,\n  MatTableDataSource,\n  MatTableModule,\n} from '@angular/material/table';\nimport { SelectionModel } from '@angular/cdk/collections';\nimport { MatPaginatorModule, PageEvent } from '@angular/material/paginator';\n\nimport { DatePipe, DecimalPipe, NgClass, NgStyle, NgTemplateOutlet } from '@angular/common';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatSortModule } from '@angular/material/sort';\nimport { GetTotalPipe } from '../../../pipes';\nimport { ColumnDefinition, Pagination, TableContext, TableRow } from '../../../models';\n\n@Component({\n  selector: 'acp-dynamic-table',\n  standalone: true,\n  imports: [\n    MatTableModule,\n    MatCheckboxModule,\n    MatSortModule,\n    MatIconModule,\n    MatButtonModule,\n    MatPaginatorModule,\n    NgClass,\n    NgStyle,\n    GetTotalPipe,\n    DatePipe,\n    DecimalPipe,\n    NgTemplateOutlet,\n  ],\n  templateUrl: './dynamic-table.html',\n  styleUrl: './dynamic-table.scss',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  encapsulation: ViewEncapsulation.None,\n})\nexport class DynamicTable<T extends TableRow>\n  implements AfterContentInit, OnChanges, OnInit, OnDestroy\n{\n  private componentRefs: ComponentRef<unknown>[] = [];\n  private embeddedViews: EmbeddedViewRef<unknown>[] = [];\n  private cdr = inject(ChangeDetectorRef);\n\n  readonly showExpand = input(false);\n  readonly showFooter = input(false);\n  readonly locale = input('en-US');\n  readonly highlightRowIndex = input(0);\n  @Input() visibleColumns: string[] = [];\n  @Input() columnDefinitions: ColumnDefinition<T>[] = [];\n  readonly showSelectBox = input(false);\n  readonly multipleSelection = input(true);\n  readonly tableData = input<T[]>([]);\n  readonly rowTemplate = input<TemplateRef<TableContext<T>> | null>(null);\n  @Input() expandedDetail: TemplateRef<TableContext<T>> | null = null;\n  readonly enablePagination = input(false);\n  @Input() paginationConfig: Pagination | null = null;\n  readonly isLoadingData = input(false);\n\n  readonly rowSelected = output<T[]>();\n  readonly copyRow = output<T>();\n  readonly showExpanded = output<T>();\n  readonly hideExpanded = output<T>();\n  readonly pageEvent = output<PageEvent>();\n\n  isNormalRow = (_: number, row: T) => this.expandedElement !== row;\n  isExpandedRow = (_: number, row: T) => this.expandedElement === row;\n\n  dataSource = new MatTableDataSource<T>([]);\n  selection = new SelectionModel<T>(true, []);\n  expandedElement: T | null = null;\n  columnsToDisplayWithExpand: string[] = [];\n\n  readonly headerRowDefs = contentChildren(MatHeaderRowDef);\n  readonly rowDefs = contentChildren(MatRowDef);\n  readonly footerRowDefs = contentChildren(MatFooterRowDef);\n  readonly columnDefs = contentChildren(MatColumnDef);\n\n  readonly table = viewChild.required(MatTable);\n  readonly rows = contentChildren(ViewContainerRef);\n\n  ngOnInit(): void {\n    this.updateColumnsToDisplay();\n    this.initializeSelection();\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if (changes['tableData']) {\n      this.updateTableData();\n    }\n\n    if (changes['showExpand'] || changes['visibleColumns'] || changes['columnDefinitions']) {\n      this.updateColumnsToDisplay();\n    }\n\n    // Trigger change detection for OnPush strategy\n    this.cdr.markForCheck();\n  }\n\n  ngAfterContentInit(): void {\n    this.registerTableContent();\n    this.initializeTable();\n    this.cdr.markForCheck();\n  }\n\n  ngOnDestroy(): void {\n    this.cleanupDynamicComponents();\n  }\n\n  private updateTableData(): void {\n    // Clear selection when new data arrives\n    this.selection.clear();\n\n    // Update data source\n    this.dataSource.data = this.tableData() || [];\n\n    // Reset expanded element if it's no longer in the new data\n    if (this.expandedElement && !this.dataSource.data.includes(this.expandedElement)) {\n      this.expandedElement = null;\n    }\n\n    // Trigger change detection\n    this.cdr.markForCheck();\n  }\n\n  private updateColumnsToDisplay(): void {\n    if (!this.visibleColumns.length && this.columnDefinitions) {\n      this.visibleColumns = this.columnDefinitions.map(col => col.key);\n      this.columnDefinitions.forEach((col, index) => (col.index = index));\n    }\n\n    const newColumns: string[] = [...this.visibleColumns];\n\n    if (this.showSelectBox() && !newColumns.includes('select')) {\n      newColumns.unshift('select');\n    }\n\n    if (this.showExpand() && this.expandedDetail) {\n      if (!this.columnDefinitions?.some(col => col.key === 'expand')) {\n        this.columnDefinitions = [\n          ...(this.columnDefinitions || []),\n          {\n            key: 'expand',\n            label: '',\n            type: 'expand',\n            index: this.columnDefinitions?.length || 0,\n          },\n        ];\n      }\n\n      if (!newColumns.includes('expand')) {\n        newColumns.push('expand');\n      }\n    }\n\n    this.columnsToDisplayWithExpand = newColumns;\n  }\n\n  private initializeSelection(): void {\n    this.selection = new SelectionModel<T>(this.multipleSelection(), []);\n  }\n\n  private registerTableContent(): void {\n    this.columnDefs().forEach(columnDef => this.table().addColumnDef(columnDef));\n    this.rowDefs().forEach(rowDef => this.table().addRowDef(rowDef));\n    this.headerRowDefs().forEach(headerRowDef => this.table().addHeaderRowDef(headerRowDef));\n\n    if (this.showFooter()) {\n      this.footerRowDefs().forEach(footerRowDef => this.table().addFooterRowDef(footerRowDef));\n    } else {\n      this.footerRowDefs().forEach(footerRowDef => this.table().removeFooterRowDef(footerRowDef));\n    }\n  }\n\n  private initializeTable(): void {\n    this.dataSource = new MatTableDataSource<T>(this.tableData() || []);\n  }\n\n  private cleanupDynamicComponents(): void {\n    this.componentRefs.forEach(ref => ref.destroy());\n    this.embeddedViews.forEach(view => view.destroy());\n  }\n\n  isAllSelected(): boolean {\n    const numSelected = this.selection.selected.length;\n    const selectableRows = this.dataSource.data.filter(row => !row.disableSelection);\n    return numSelected === selectableRows.length && selectableRows.length > 0;\n  }\n\n  masterToggle(): void {\n    if (!this.multipleSelection()) return;\n\n    if (this.isAllSelected()) {\n      this.selection.clear();\n    } else {\n      this.dataSource.data\n        .filter(row => !row.disableSelection)\n        .forEach(row => this.selection.select(row));\n    }\n    this.rowSelected.emit(this.selection.selected);\n    this.cdr.markForCheck();\n  }\n\n  checkboxLabel(row?: T): string {\n    if (!row) {\n      return `${this.isAllSelected() ? 'deselect' : 'select'} all`;\n    }\n    return `${this.selection.isSelected(row) ? 'deselect' : 'select'} row`;\n  }\n\n  selectRow(row: T): void {\n    if (row.disableSelection) return;\n    this.selection.toggle(row);\n    this.rowSelected.emit(this.selection.selected);\n    this.cdr.markForCheck();\n  }\n\n  onExpand(event: Event, element: T): void {\n    event.stopPropagation();\n    this.expandedElement = this.expandedElement === element ? null : element;\n    if (this.expandedElement) {\n      this.showExpanded.emit(element);\n    } else {\n      this.hideExpanded.emit(element);\n    }\n    this.cdr.markForCheck();\n  }\n\n  getRowStyle(element: T): Record<string, string> {\n    return element.rowStyle || {};\n  }\n\n  handlePageEvent(e: PageEvent): void {\n    this.pageEvent.emit(e);\n  }\n}\n","<div class=\"acp-dynamic-table\">\n  <div class=\"acp-table-container small-table\">\n    <table #sort=\"matSort\" [dataSource]=\"dataSource.data\" mat-table matSort>\n      @if (columnDefinitions) {\n      <!-- Checkbox Column -->\n      @if (showSelectBox()) {\n      <ng-container matColumnDef=\"select\">\n        <th *matHeaderCellDef mat-header-cell>\n          @if (multipleSelection()) {\n          <mat-checkbox\n            (change)=\"$event ? masterToggle() : null\"\n            (click)=\"$event.stopPropagation()\"\n            [aria-label]=\"checkboxLabel()\"\n            [checked]=\"selection.hasValue() && isAllSelected()\"\n            [indeterminate]=\"selection.hasValue() && !isAllSelected()\"\n          />\n          }\n        </th>\n        <td *matCellDef=\"let row\" mat-cell>\n          <mat-checkbox\n            (change)=\"$event ? selectRow(row) : null\"\n            (click)=\"$event.stopPropagation()\"\n            [aria-label]=\"checkboxLabel(row)\"\n            [checked]=\"selection.isSelected(row)\"\n            [disabled]=\"row.disableSelection\"\n          />\n        </td>\n        <td *matFooterCellDef mat-footer-cell></td>\n      </ng-container>\n      }\n\n      <!-- Dynamic Columns -->\n      @for (col of columnDefinitions; track col.key) {\n      <ng-container [matColumnDef]=\"col.key\">\n        <th *matHeaderCellDef mat-header-cell>{{ col.label }}</th>\n\n        <td\n          mat-cell\n          *matCellDef=\"let element; let i = index\"\n          [ngClass]=\"{ highlighted: highlightRowIndex() === i }\"\n        >\n          @if (col.key === 'op') {\n          <div class=\"d-flex flex-row gap-1\">\n            @if (col.templateOutlet) {\n            <ng-container\n              *ngTemplateOutlet=\"\n                        col.templateOutlet;\n                        context: { $implicit: element, index: i }\n                      \"\n            />\n            } @else if (rowTemplate()) {\n            <ng-container\n              *ngTemplateOutlet=\"rowTemplate(); context: { $implicit: element, index: i }\"\n            />\n            }\n          </div>\n          } @else { @switch (col.type) { @case ('image') {\n          <img [src]=\"element[col.key]\" class=\"img-fluid img-thumbnail my-1\" width=\"50\" alt=\"\" />\n          } @case ('number') {\n          <div>{{ element[col.key] | number: '1.2' : locale() }}</div>\n          } @case ('date') {\n          <div>{{ element[col.key] | date: 'dd.MM.yyyy' }}</div>\n          } @case ('expand') {\n          <button mat-icon-button aria-label=\"expand row\" (click)=\"onExpand($event, element)\">\n            @if (expandedElement === element) {\n            <mat-icon>keyboard_arrow_up</mat-icon>\n            } @else {\n            <mat-icon>keyboard_arrow_down</mat-icon>\n            }\n          </button>\n          } @case ('template') {\n          <ng-container\n            *ngTemplateOutlet=\"\n                        col.templateOutlet;\n                        context: { $implicit: element, index: i }\n                      \"\n          />\n          } @case ('custom') {\n          <ng-container #dynamicContent />\n          } @default {\n          <div>{{ element[col.key] }}</div>\n          } } }\n        </td>\n\n        <td *matFooterCellDef mat-footer-cell>\n          @if (col.index === 0) {\n          <div>Total</div>\n          } @if (col.hasFooter) {\n          <div>{{ col.key | getTotal: dataSource.data }}</div>\n          }\n        </td>\n      </ng-container>\n      }\n\n      <!-- Expanded Detail Row -->\n      @if (showExpand() && expandedDetail) {\n      <ng-container matColumnDef=\"expandedDetail\">\n        <td\n          mat-cell\n          *matCellDef=\"let element; let i = index\"\n          [attr.colspan]=\"columnsToDisplayWithExpand.length\"\n        >\n          <div class=\"m-0 p-0 acp-detail-expand\" [class.acp-expanded]=\"element === expandedElement\">\n            <ng-container\n              *ngTemplateOutlet=\"expandedDetail; context: { $implicit: element, index: i }\"\n            />\n          </div>\n        </td>\n      </ng-container>\n      }\n\n      <!-- Header Row -->\n      <tr mat-header-row *matHeaderRowDef=\"columnsToDisplayWithExpand\"></tr>\n\n      <!-- Data Rows -->\n      @if (showExpand() && expandedDetail) {\n      <!-- Regular Row -->\n      <tr\n        mat-row\n        *matRowDef=\"let row; columns: columnsToDisplayWithExpand; when: isNormalRow\"\n        class=\"acp-dynamic-table-row\"\n        [class.acp-dynamic-table-expanded-row]=\"expandedElement === row\"\n        [ngStyle]=\"getRowStyle(row)\"\n        (click)=\"expandedElement = expandedElement === row ? null : row\"\n      ></tr>\n\n      <!-- Expanded Row -->\n      <tr\n        mat-row\n        *matRowDef=\"let row; columns: ['expandedDetail']; when: isExpandedRow\"\n        class=\"acp-dynamic-table-detail-row\"\n      ></tr>\n      } @else {\n      <!-- Regular Row without expansion -->\n      <tr\n        mat-row\n        *matRowDef=\"let row; columns: columnsToDisplayWithExpand\"\n        [ngStyle]=\"getRowStyle(row)\"\n      ></tr>\n      }\n\n      <!-- No Data Row -->\n      <tr class=\"mat-row\" *matNoDataRow>\n        <td class=\"mat-cell text-center\" [attr.colspan]=\"columnsToDisplayWithExpand.length\">\n          No records found\n        </td>\n      </tr>\n\n      <!-- Footer -->\n      @if (showFooter() && dataSource.data.length > 0) {\n      <tr mat-footer-row *matFooterRowDef=\"columnsToDisplayWithExpand\"></tr>\n      } }\n    </table>\n  </div>\n\n  @if (enablePagination() && paginationConfig) {\n  <mat-paginator\n    #paginator\n    [disabled]=\"isLoadingData()\"\n    (page)=\"handlePageEvent($event)\"\n    [length]=\"paginationConfig.totalRecords\"\n    [pageSize]=\"paginationConfig.pageSize\"\n    [pageSizeOptions]=\"paginationConfig.pageSizeOptions || []\"\n    [showFirstLastButtons]=\"paginationConfig.showFirstLastButtons\"\n    [pageIndex]=\"paginationConfig.pageIndex\"\n    [hidePageSize]=\"paginationConfig.hidePageSize\"\n    [disabled]=\"paginationConfig.disabled\"\n    aria-label=\"Select page\"\n  />\n  }\n</div>\n","// tabulator-table.ts\nimport {\n  AfterViewInit,\n  Component,\n  OnChanges,\n  OnDestroy,\n  SimpleChanges,\n  ViewEncapsulation,\n  input,\n  output,\n} from '@angular/core';\n\nimport { Tabulator, PageModule, ReactiveDataModule } from 'tabulator-tables';\nimport { TabulatorTheme } from '../../../types';\n\nTabulator.registerModule([PageModule, ReactiveDataModule]);\n\n@Component({\n  selector: 'acp-tabulator-table',\n  standalone: true,\n  imports: [],\n  templateUrl: './tabulator-table.html',\n  styleUrls: ['./tabulator-table.scss'],\n  encapsulation: ViewEncapsulation.None,\n})\nexport class TabulatorTable implements OnChanges, AfterViewInit, OnDestroy {\n  // Data inputs\n  readonly data = input<any[]>([]);\n  readonly columns = input<any[]>([]);\n\n  // Layout inputs\n  readonly height = input<string | number | false>('400px');\n  readonly layout = input<'fitData' | 'fitColumns' | 'fitDataFill' | 'fitDataStretch'>('fitData');\n\n  // Tree structure inputs\n  readonly dataTree = input(false);\n  readonly dataTreeChildField = input('children');\n  readonly dataTreeStartExpanded = input(false);\n  readonly dataTreeSelectPropagate = input(false);\n\n  // Behavior inputs\n  readonly selectable = input(true);\n  readonly reactiveData = input(true);\n  readonly placeholder = input('No data available');\n  readonly autoResize = input(true);\n\n  // Theme configuration\n  readonly theme = input<TabulatorTheme>({ name: 'default' });\n\n  // Custom styling\n  readonly customClass = input('');\n  readonly rowFormatter = input<(row: any) => void | null>();\n\n  // Custom options\n  readonly options = input<Record<string, any>>({});\n\n  // Events\n  readonly cellEdited = output<any>();\n  readonly rowClick = output<any>();\n  readonly rowSelected = output<any>();\n  readonly tableReady = output<Tabulator>();\n\n  private _tabulator!: Tabulator;\n\n  // Made public for template access\n  public containerId = `acp-tabulator-table-${Math.random().toString(36).substr(2, 9)}`;\n\n  ngAfterViewInit(): void {\n    this.initializeTable();\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if (changes['data'] && !changes['data'].isFirstChange()) {\n      this.updateData();\n    }\n\n    if (changes['columns'] && !changes['columns'].isFirstChange()) {\n      this.updateColumns();\n    }\n\n    if (changes['theme'] && !changes['theme'].isFirstChange()) {\n      this.applyTheme();\n    }\n\n    if (changes['customClass'] && !changes['customClass'].isFirstChange()) {\n      this.applyCustomClass(changes['customClass'].previousValue, this.customClass());\n    }\n\n    if (changes['rowFormatter'] && !changes['rowFormatter'].isFirstChange()) {\n      this.updateRowFormatter();\n    }\n  }\n\n  ngOnDestroy(): void {\n    this.destroyTable();\n  }\n\n  private initializeTable(): void {\n    if (this._tabulator) {\n      this.destroyTable();\n    }\n\n    const container = document.getElementById(this.containerId);\n    if (!container) {\n      console.warn('Tabulator container not found');\n      return;\n    }\n\n    const config: any = {\n      data: this.data(),\n      columns: this.columns(),\n      height: this.height(),\n      layout: this.layout(),\n      dataTree: this.dataTree(),\n      dataTreeChildField: this.dataTreeChildField(),\n      dataTreeStartExpanded: this.dataTreeStartExpanded(),\n      dataTreeSelectPropagate: this.dataTreeSelectPropagate(),\n      reactiveData: this.reactiveData(),\n      placeholder: this.placeholder(),\n      autoResize: this.autoResize(),\n      selectable: this.selectable(),\n      renderVertical: 'virtual',\n      renderVerticalBuffer: 300,\n      rowFormatter: this.getRowFormatter(),\n      ...this.options(),\n    };\n\n    try {\n      this._tabulator = new Tabulator(container, config);\n      this.applyTheme();\n      this.registerEvents();\n      this.tableReady.emit(this._tabulator);\n    } catch (error) {\n      console.error('Error initializing Tabulator:', error);\n    }\n  }\n\n  private applyTheme(): void {\n    if (this._tabulator) {\n      // Tabulator themes are applied via CSS classes on the table element\n      const tableElement = this._tabulator.element as HTMLElement;\n\n      // Remove existing theme classes\n      tableElement.classList.remove(\n        'tabulator-modern',\n        'tabulator-midnight',\n        'tabulator-simple',\n        'tabulator-site',\n        'tabulator-site-dark',\n      );\n\n      // Add current theme class (skip 'default' as it uses base styles)\n      const theme = this.theme();\n      if (theme.name !== 'default') {\n        tableElement.classList.add(`tabulator-${theme.name}`);\n      }\n\n      // Apply custom classes\n      this.applyCustomClass('', this.customClass());\n    }\n  }\n\n  private applyCustomClass(previousClass: string, newClass: string): void {\n    if (this._tabulator) {\n      const tableElement = this._tabulator.element as HTMLElement;\n\n      // Remove previous custom classes\n      if (previousClass) {\n        const prevClasses = previousClass.split(' ').filter(cls => cls.trim());\n        prevClasses.forEach(cls => tableElement.classList.remove(cls));\n      }\n\n      // Add new custom classes\n      if (newClass) {\n        const newClasses = newClass.split(' ').filter(cls => cls.trim());\n        newClasses.forEach(cls => tableElement.classList.add(cls));\n      }\n    }\n  }\n\n  private registerEvents(): void {\n    this._tabulator.on('cellEdited', cell => {\n      this.cellEdited.emit(cell);\n    });\n\n    this._tabulator.on('rowClick', (e, row) => {\n      this.rowClick.emit(row);\n    });\n\n    this._tabulator.on('rowSelected', row => {\n      this.rowSelected.emit(row);\n    });\n  }\n\n  private updateData(): void {\n    if (this._tabulator) {\n      this._tabulator.replaceData(this.data());\n    }\n  }\n\n  private updateColumns(): void {\n    if (this._tabulator) {\n      this._tabulator.setColumns(this.columns());\n    }\n  }\n\n  private destroyTable(): void {\n    if (this._tabulator) {\n      this._tabulator.destroy();\n    }\n  }\n\n  private updateRowFormatter(): void {\n    if (this._tabulator) {\n      this._tabulator.redraw(true);\n    }\n  }\n\n  // Public API methods\n  public getInstance(): Tabulator {\n    return this._tabulator;\n  }\n\n  public redraw(): void {\n    if (this._tabulator) {\n      this._tabulator.redraw();\n    }\n  }\n\n  private getRowFormatter(): (row: any) => void {\n    return (row: any) => {\n      const data = row.getData();\n      const element = row.getElement();\n\n      // Apply custom row formatter if provided\n      const customFormatter = this.rowFormatter();\n      if (customFormatter) {\n        customFormatter(row);\n        return;\n      }\n\n      // Apply rowStyle if present in data\n      if (data.rowStyle) {\n        Object.assign(element.style, data.rowStyle);\n      }\n    };\n  }\n}\n","<div [id]=\"containerId\" class=\"acp-tabulator-table-container\"></div>\n","import { inject, Injectable } from '@angular/core';\nimport { MatDialog, MatDialogConfig, MatDialogRef } from '@angular/material/dialog';\nimport { Overlay } from '@angular/cdk/overlay';\nimport { firstValueFrom, map } from 'rxjs';\nimport { ComponentType } from '@angular/cdk/portal';\nimport { BreakpointObserver, Breakpoints } from '@angular/cdk/layout';\n\nimport { MatCustomDialogConfig, DialogSize, DialogWrapperConfig } from './dialog.interfaces';\nimport { DialogWrapper } from '../../components/dialog-wrapper/dialog-wrapper';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class AdvancedDialogService {\n  private readonly dialog = inject(MatDialog);\n  private readonly overlay = inject(Overlay);\n  private readonly breakpointObserver = inject(BreakpointObserver);\n\n  // An observable that emits true if the viewport matches mobile dimensions.\n  private readonly isMobile$ = this.breakpointObserver\n    .observe([Breakpoints.HandsetPortrait, Breakpoints.HandsetLandscape])\n    .pipe(map(result => result.matches));\n\n  /**\n   * Main method to open any component in a dialog.\n   * This provides maximum flexibility.\n   * @param component The component to render.\n   * @param config The detailed configuration for the dialog.\n   * @returns A MatDialogRef instance.\n   */\n  async open<T, D = unknown, R = unknown>(\n    component: ComponentType<T>,\n    config: MatCustomDialogConfig<D> = {},\n  ): Promise<MatDialogRef<T, R>> {\n    const dialogConfig = await this.buildDialogConfig(config);\n    return this.dialog.open<T, D, R>(component, dialogConfig);\n  }\n\n  /**\n   * A powerful helper to open a component inside our standard, branded \"wrapper\".\n   * This provides maximum consistency.\n   * @param wrapperConfig Configuration for the title, icon, and the content component.\n   * @param matDialogConfig Standard MatDialog configuration (size, position, etc.).\n   * @returns A MatDialogRef instance pointing to the wrapper.\n   */\n  async openInWrapper<T, R = unknown>(\n    wrapperConfig: DialogWrapperConfig<T>,\n    matDialogConfig: MatCustomDialogConfig<T> = {},\n  ): Promise<MatDialogRef<DialogWrapper, R>> {\n    // Package the wrapper config into the `data` property for the DialogWrapper to consume.\n    const configWithWrapperData: MatCustomDialogConfig<DialogWrapperConfig<T>> = {\n      ...matDialogConfig,\n      data: wrapperConfig,\n    } as MatCustomDialogConfig<DialogWrapperConfig<T>>;\n    const dialogConfig = await this.buildDialogConfig(configWithWrapperData);\n    return this.dialog.open<DialogWrapper, DialogWrapperConfig<T>, R>(DialogWrapper, dialogConfig);\n  }\n\n  /**\n   * Helper to open a dialog and only get an observable of the result.\n   */\n  async openAndGetResult<T, D = unknown, R = unknown>(\n    component: ComponentType<T>,\n    config: MatCustomDialogConfig<D> = {},\n  ): Promise<R | undefined> {\n    const dialogRef = await this.open(component, config);\n    return firstValueFrom(dialogRef.afterClosed()) as Promise<R | undefined>;\n  }\n\n  /**\n   * Closes all currently open dialogs.\n   */\n  closeAll(): void {\n    this.dialog.closeAll();\n  }\n\n  // --- Private Configuration Builder ---\n\n  private async buildDialogConfig<D>(\n    config: MatCustomDialogConfig<D>,\n  ): Promise<MatDialogConfig<D>> {\n    const dialogConfig = new MatDialogConfig<D>();\n\n    // Asynchronously check for mobile state to prevent memory leaks from dangling subscriptions.\n    const isMobile = await firstValueFrom(this.isMobile$);\n\n    // Apply fullscreen if 'full' size is set OR if mobile fullscreen is enabled on a mobile device.\n    if (config.size === 'full' || (config.isMobileFullScreen && isMobile)) {\n      this.applyFullScreenConfig(dialogConfig);\n    } else {\n      this.applyStandardConfig(dialogConfig, config);\n    }\n\n    // Apply all other common configurations.\n    this.applyCommonConfig(dialogConfig, config);\n\n    return dialogConfig;\n  }\n\n  private applyFullScreenConfig(dialogConfig: MatDialogConfig): void {\n    dialogConfig.width = '100vw';\n    dialogConfig.height = '100vh';\n    dialogConfig.maxWidth = '100vw';\n    dialogConfig.panelClass = ['full-screen-dialog'];\n  }\n\n  private applyStandardConfig<D>(\n    dialogConfig: MatDialogConfig<D>,\n    config: MatCustomDialogConfig<D>,\n  ): void {\n    dialogConfig.width = config.width ?? this.getDialogWidth(config.size);\n    dialogConfig.height = config.height;\n    dialogConfig.minWidth = config.minWidth;\n    dialogConfig.maxWidth = config.maxWidth ?? '95vw';\n    dialogConfig.maxHeight = config.maxHeight ?? 'auto';\n    dialogConfig.position = config.position;\n  }\n\n  private applyCommonConfig<D>(\n    dialogConfig: MatDialogConfig<D>,\n    config: MatCustomDialogConfig<D>,\n  ): void {\n    dialogConfig.data = config.data;\n    dialogConfig.hasBackdrop = config.hasBackdrop ?? true;\n    dialogConfig.backdropClass = config.backdropClass;\n\n    const panelClasses = Array.isArray(config.panelClass)\n      ? [...config.panelClass]\n      : config.panelClass\n        ? [config.panelClass]\n        : [];\n    if (config.size) {\n      panelClasses.push(`dialog-${config.size}`);\n    }\n    dialogConfig.panelClass = panelClasses;\n\n    dialogConfig.disableClose = !(config.backdropClickClosable ?? true);\n    // Note: escapeKeyClosable is handled by MatDialog separately and doesn't affect disableClose directly.\n    dialogConfig.autoFocus = config.autoFocus ?? 'first-tabbable';\n    dialogConfig.scrollStrategy = config.scrollStrategy ?? this.overlay.scrollStrategies.block();\n    dialogConfig.enterAnimationDuration = config.enterAnimationDuration ?? '300ms';\n    dialogConfig.exitAnimationDuration = config.exitAnimationDuration ?? '200ms';\n    dialogConfig.ariaLabel = config.ariaLabel;\n    dialogConfig.ariaLabelledBy = config.ariaLabelledBy;\n    dialogConfig.ariaDescribedBy = config.ariaDescribedBy;\n    dialogConfig.role = config.role;\n  }\n\n  private getDialogWidth(size: DialogSize = 'md'): string {\n    const sizeMap: Record<DialogSize, string> = {\n      xs: '320px',\n      sm: '450px',\n      md: '600px',\n      lg: '800px',\n      xl: '1000px',\n      xxl: '1280px',\n      full: '100vw',\n    };\n    return sizeMap[size];\n  }\n}\n","import { Injectable, inject } from '@angular/core';\nimport { Overlay, OverlayRef } from '@angular/cdk/overlay';\nimport { ComponentPortal } from '@angular/cdk/portal';\nimport { Spinner } from '../components/spinner/spinner';\n@Injectable({\n  providedIn: 'root',\n})\nexport class OverlayService {\n  private readonly overlay = inject(Overlay);\n  private overlayRef!: OverlayRef;\n\n  showSpinner() {\n    if (!this.overlayRef) {\n      this.overlayRef = this.overlay.create({\n        hasBackdrop: true,\n        positionStrategy: this.overlay.position().global().centerHorizontally().centerVertically(),\n      });\n\n      const spinnerPortal = new ComponentPortal(Spinner);\n      this.overlayRef.attach(spinnerPortal);\n    }\n  }\n\n  hideSpinner() {\n    if (this.overlayRef) {\n      this.overlayRef.detach();\n      this.overlayRef = null!;\n    }\n  }\n}\n","import { Injectable, PLATFORM_ID, inject } from '@angular/core';\nimport { isPlatformBrowser } from '@angular/common';\nimport { BehaviorSubject } from 'rxjs';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class ThemeSwitcher {\n  private readonly _darkMode = new BehaviorSubject<boolean>(false);\n  private readonly platformId = inject(PLATFORM_ID);\n  isDarkMode$ = this._darkMode.asObservable();\n\n  constructor() {\n    if (isPlatformBrowser(this.platformId)) {\n      this.loadMode();\n    }\n  }\n\n  loadMode() {\n    if (!isPlatformBrowser(this.platformId)) return;\n    const savedTheme = localStorage.getItem('theme');\n    if (savedTheme) {\n      this._darkMode.next(savedTheme === 'dark');\n      this.applyTheme(savedTheme === 'dark');\n    } else {\n      // Check system preference\n      const prefersDark = window.matchMedia('(prefers-color-scheme: dark)').matches;\n      this._darkMode.next(prefersDark);\n      this.applyTheme(prefersDark);\n    }\n  }\n\n  toggleDarkMode(): void {\n    const newValue = !this._darkMode.value;\n    this._darkMode.next(newValue);\n    this.applyTheme(newValue);\n    localStorage.setItem('theme', newValue ? 'dark' : 'light');\n  }\n\n  private applyTheme(isDark: boolean): void {\n    if (!isPlatformBrowser(this.platformId)) return;\n    document.documentElement.classList.toggle('dark-theme', isDark);\n  }\n}\n","import { Observable } from 'rxjs';\n\nexport interface AutocompleteWrapperItem {\n  id?: string | number;\n  name?: string;\n  value?: string;\n  description?: string; // Para mostrar en el template por defecto\n  [key: string]: any;\n}\n\nexport interface AutocompleteWrapperSearchResult {\n  items: AutocompleteWrapperItem[];\n  totalCount: number;\n  hasMore?: boolean;\n}\n\nexport type AutocompleteWrapperSearchFunction = (\n  query: string,\n  filters: AutocompleteWrapperFilters,\n  page?: number,\n  pageSize?: number,\n) => Observable<AutocompleteWrapperSearchResult>;\n\nexport interface AutocompleteWrapperConfig {\n  placeholder?: string;\n  clearInput?: boolean;\n  disabled?: boolean;\n  debounceTime?: number;\n  minSearchLength?: number;\n  maxHistoryItems?: number;\n  itemsPerPage?: number;\n  enableStockFilter?: boolean;\n  stockProperty?: string;\n  enablePagination?: boolean;\n  enableFilters?: boolean;\n  enableFooterActions?: boolean;\n  searchFields?: AutocompleteWrapperSearchField[];\n  stockOptions?: AutocompleteWrapperStockOption[];\n\n  // Configuración del overlay\n  overlayWidth?: string | number;\n  overlayMaxHeight?: string | number;\n\n  // Función de búsqueda personalizada\n  searchFunction?: AutocompleteWrapperSearchFunction;\n\n  // Modo de búsqueda\n  searchMode?: 'local' | 'remote' | 'hybrid';\n\n  // Configuración de datos locales (para searchMode 'local' o 'hybrid')\n  localData?: AutocompleteWrapperItem[];\n\n  // Texto personalizable\n  noResultsText?: string;\n  sectionTitle?: string;\n}\n\nexport interface AutocompleteWrapperSearchField {\n  value: string;\n  label: string;\n  property: string;\n}\n\nexport interface AutocompleteWrapperStockOption {\n  value: string;\n  label: string;\n}\n\nexport interface AutocompleteWrapperFilters {\n  searchBy: string;\n  stockFilter: string;\n}\n\n// Eventos que emite el componente\nexport interface AutocompleteWrapperEvents {\n  itemSelected: AutocompleteWrapperItem;\n  searchChanged: string;\n  pageChanged: number;\n  filterChanged: AutocompleteWrapperFilters;\n  advancedSearchClicked: void;\n  allResultsClicked: string;\n  createNewClicked: string; // Alineado con onCreateNew del HTML\n  historyCleared: void;\n  historyItemRemoved: { item: AutocompleteWrapperItem; index: number };\n}\n\nexport interface AutocompleteWrapperPaginationInfo {\n  currentPage: number;\n  totalPages: number;\n  totalItems: number;\n  itemsPerPage: number;\n  startItem: number;\n  endItem: number;\n  hasNextPage: boolean;\n  hasPreviousPage: boolean;\n}\n\n// Estado interno del componente (para usar con signals)\nexport interface AutocompleteWrapperState {\n  query: string;\n  isLoading: boolean;\n  overlayOpen: boolean;\n  selectedIndex: number;\n  pagination: AutocompleteWrapperPaginationInfo;\n  hasResults: boolean;\n  isHistoryVisible: boolean;\n  historyCount: number;\n  filters: AutocompleteWrapperFilters;\n\n  // Estados adicionales que aparecen en el HTML\n  // totalItems: number;\n  // currentPageItems: AutocompleteWrapperItem[];\n  // historyList: AutocompleteWrapperItem[];\n  // noResults: boolean;\n}\n\n// Para métodos del componente que aparecen en el HTML\nexport interface AutocompleteWrapperActions {\n  // Input actions\n  onInput(event: Event): void;\n  showOverlay(): void;\n  hideOverlay(): void;\n  clearSearch(): void;\n  onKeyDown(event: KeyboardEvent): void;\n\n  // Item actions\n  selectItem(item: AutocompleteWrapperItem): void;\n  getItemDisplayText(item: AutocompleteWrapperItem): string;\n\n  // History actions\n  clearHistory(): void;\n  removeHistoryItem(index: number, event: Event): void;\n\n  // Pagination actions\n  goToFirstPage(): void;\n  goToPreviousPage(): void;\n  goToNextPage(): void;\n  goToLastPage(): void;\n  goToPage(event: Event): void;\n\n  // Filter actions\n  onFilterChange(): void;\n\n  // Footer actions\n  onCreateNew(event: Event): void;\n  onAdvancedSearch(): void;\n  onShowAllResults(): void;\n\n  // State getters (para usar con signals)\n  overlayOpen(): boolean;\n  isLoading(): boolean;\n  isHistoryVisible(): boolean;\n  historyList(): AutocompleteWrapperItem[];\n  selectedIndex(): number;\n  currentPageItems(): AutocompleteWrapperItem[];\n  totalItems(): number;\n  totalPages(): number;\n  currentPage(): number;\n  totalCount(): number;\n  startItem(): number;\n  endItem(): number;\n  sectionTitle(): string;\n  noResultsText(): string;\n  isNoResults(): boolean;\n  overlayWidth(): string | number;\n  overlayMaxHeight(): string | number;\n}\n\n// Configuraciones predefinidas mejoradas\nexport const AUTOCOMPLETE_WRAPPER_DEFAULT_CONFIG: AutocompleteWrapperConfig = {\n  placeholder: 'Buscar...',\n  disabled: false,\n  debounceTime: 300,\n  minSearchLength: 2,\n  maxHistoryItems: 10,\n  itemsPerPage: 10,\n  enableStockFilter: true,\n  stockProperty: 'stock',\n  enablePagination: true,\n  enableFilters: true,\n  enableFooterActions: true,\n  overlayWidth: '100%',\n  overlayMaxHeight: '500px',\n  noResultsText: 'No se encontraron resultados',\n  sectionTitle: 'Resultados',\n  searchMode: 'remote',\n  searchFields: [\n    { value: 'description', label: 'Descripción', property: 'description' },\n    { value: 'code', label: 'Código', property: 'code' },\n    { value: 'barcode', label: 'Código de Barras', property: 'barcode' },\n    { value: 'auxCode', label: 'Código Auxiliar', property: 'auxCode' },\n  ],\n  stockOptions: [\n    { value: 'all', label: 'Todos' },\n    { value: 'with-stock', label: 'Con Stock' },\n    { value: 'without-stock', label: 'Sin Stock' },\n  ],\n};\n\nexport const AUTOCOMPLETE_WRAPPER_PRODUCT_CONFIG: AutocompleteWrapperConfig = {\n  ...AUTOCOMPLETE_WRAPPER_DEFAULT_CONFIG,\n  placeholder: 'Buscar productos...',\n  enableStockFilter: true,\n  enableFooterActions: true,\n  sectionTitle: 'Productos',\n  noResultsText: 'No se encontraron productos',\n};\n\nexport const AUTOCOMPLETE_WRAPPER_CUSTOMER_CONFIG: AutocompleteWrapperConfig = {\n  ...AUTOCOMPLETE_WRAPPER_DEFAULT_CONFIG,\n  placeholder: 'Buscar clientes...',\n  enableStockFilter: false,\n  enableFooterActions: false,\n  sectionTitle: 'Clientes',\n  noResultsText: 'No se encontraron clientes',\n  searchFields: [\n    { value: 'name', label: 'Nombre', property: 'name' },\n    { value: 'email', label: 'Email', property: 'email' },\n    { value: 'phone', label: 'Teléfono', property: 'phone' },\n    { value: 'document', label: 'Documento', property: 'document' },\n  ],\n};\n\nexport const AUTOCOMPLETE_WRAPPER_SIMPLE_CONFIG: AutocompleteWrapperConfig = {\n  ...AUTOCOMPLETE_WRAPPER_DEFAULT_CONFIG,\n  placeholder: 'Buscar...',\n  enableStockFilter: false,\n  enableFilters: false,\n  enableFooterActions: false,\n  enablePagination: false,\n  itemsPerPage: 50,\n  sectionTitle: 'Resultados',\n  overlayMaxHeight: '300px',\n};\n\n// Configuración para búsqueda local\nexport const AUTOCOMPLETE_WRAPPER_LOCAL_CONFIG: AutocompleteWrapperConfig = {\n  ...AUTOCOMPLETE_WRAPPER_SIMPLE_CONFIG,\n  searchMode: 'local',\n  debounceTime: 150, // Menos tiempo para búsqueda local\n  minSearchLength: 1,\n};\n\n// Configuración para listas grandes con paginación\nexport const AUTOCOMPLETE_WRAPPER_PAGINATED_CONFIG: AutocompleteWrapperConfig = {\n  ...AUTOCOMPLETE_WRAPPER_DEFAULT_CONFIG,\n  itemsPerPage: 20,\n  enablePagination: true,\n  overlayMaxHeight: '400px',\n};\n\n// Helper para crear configuración personalizada\nexport function createAutocompleteWrapperConfig(\n  overrides: Partial<AutocompleteWrapperConfig>,\n): AutocompleteWrapperConfig {\n  return {\n    ...AUTOCOMPLETE_WRAPPER_DEFAULT_CONFIG,\n    ...overrides,\n  };\n}\n\n// Tipos para el componente Angular\nexport interface ReusableAutocompleteWrapperComponent extends AutocompleteWrapperActions {\n  config: AutocompleteWrapperConfig;\n  filters: AutocompleteWrapperFilters;\n  query: string;\n}\n\n// Tipos de utilidad específicos del wrapper\nexport type AutocompleteWrapperSearchMode = 'local' | 'remote' | 'hybrid';\n\nexport type AutocompleteWrapperItemProperty = keyof AutocompleteWrapperItem;\n\nexport type AutocompleteWrapperEventHandler<T = any> = (event: T) => void;\n","import { Injectable } from '@angular/core';\nimport { BehaviorSubject, Observable, of, delay, map } from 'rxjs';\nimport {\n  AUTOCOMPLETE_WRAPPER_DEFAULT_CONFIG,\n  AutocompleteWrapperConfig,\n  AutocompleteWrapperFilters,\n  AutocompleteWrapperItem,\n  AutocompleteWrapperSearchFunction,\n  AutocompleteWrapperSearchResult,\n} from '../models/autocomplete-wrapper-item';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class AutocompleteWrapperService {\n  private historySubject = new BehaviorSubject<AutocompleteWrapperItem[]>([]);\n  public history$ = this.historySubject.asObservable();\n\n  constructor() {\n    this.loadHistoryFromStorage();\n  }\n\n  // Búsqueda local (sin API)\n  searchLocal(\n    items: AutocompleteWrapperItem[],\n    query: string,\n    filters: AutocompleteWrapperFilters,\n    config: AutocompleteWrapperConfig,\n  ): Observable<AutocompleteWrapperSearchResult> {\n    const filtered = this.filterItems(items, query, filters, config);\n    const page = 1; // Para búsqueda local, asumimos página 1\n    const pageSize = config.itemsPerPage || 10;\n    const startIndex = (page - 1) * pageSize;\n    const pageItems = filtered.slice(startIndex, startIndex + pageSize);\n\n    return of({\n      items: pageItems,\n      totalCount: filtered.length,\n      hasMore: filtered.length > startIndex + pageSize,\n    });\n  }\n\n  // Filtrar elementos basado en query y filtros\n  filterItems(\n    items: AutocompleteWrapperItem[],\n    query: string,\n    filters: AutocompleteWrapperFilters,\n    config: AutocompleteWrapperConfig = AUTOCOMPLETE_WRAPPER_DEFAULT_CONFIG,\n  ): AutocompleteWrapperItem[] {\n    if (!query || query.length < (config.minSearchLength || 2)) {\n      return [];\n    }\n\n    let filteredItems = items.filter(item => {\n      if (item && typeof item === 'string') {\n        return true;\n      }\n\n      // Buscar por el campo seleccionado\n      const searchValue = this.getSearchValue(item, filters.searchBy, config);\n      return searchValue.toLowerCase().includes(query.toLowerCase());\n    });\n\n    // Aplicar filtro de stock si está habilitado\n    if (config.enableStockFilter && filters.stockFilter !== 'all') {\n      filteredItems = filteredItems.filter(item => {\n        if (typeof item === 'string') return true;\n\n        const stockValue = item[config.stockProperty || 'stock'];\n        const hasStock = stockValue !== undefined && stockValue !== null && stockValue > 0;\n\n        return filters.stockFilter === 'with-stock' ? hasStock : !hasStock;\n      });\n    }\n\n    return filteredItems;\n  }\n\n  // Simular búsqueda asíncrona\n  searchAsync(\n    items: AutocompleteWrapperItem[],\n    query: string,\n    filters: AutocompleteWrapperFilters,\n    config: AutocompleteWrapperConfig = AUTOCOMPLETE_WRAPPER_DEFAULT_CONFIG,\n  ): Observable<AutocompleteWrapperItem[]> {\n    const results = this.filterItems(items, query, filters, config);\n    return of(results).pipe(delay(100)); // Simular delay de API\n  }\n\n  // Obtener valor de búsqueda según el campo seleccionado\n  private getSearchValue(\n    item: AutocompleteWrapperItem,\n    searchBy: string,\n    config: AutocompleteWrapperConfig,\n  ): string {\n    const searchField = config.searchFields?.find(field => field.value === searchBy);\n    if (searchField) {\n      return item[searchField.property] || '';\n    }\n\n    // Fallback a la lógica anterior\n    switch (searchBy) {\n      case 'description':\n        return item['description'] || '';\n      case 'code':\n        return item['code'] || item.id?.toString() || '';\n      case 'barcode':\n        return item['barcode'] || '';\n      case 'auxCode':\n        return item['auxCode'] || '';\n      case 'email':\n        return item['email'] || '';\n      case 'phone':\n        return item['phone'] || '';\n      case 'document':\n        return item['document'] || '';\n      case 'name':\n      default:\n        return item.name || item.value || '';\n    }\n  }\n\n  // Gestión de historial específico del wrapper\n  addToHistory(item: AutocompleteWrapperItem, maxItems = 10): void {\n    const currentHistory = this.historySubject.value;\n\n    // Remover si ya existe\n    const filteredHistory = currentHistory.filter(historyItem => {\n      if (typeof item === 'string' && typeof historyItem === 'string') {\n        return item !== historyItem;\n      } else if (typeof item === 'object' && typeof historyItem === 'object') {\n        return (item.id || item.name) !== (historyItem.id || historyItem.name);\n      }\n      return true;\n    });\n\n    // Agregar al inicio\n    const newHistory = [item, ...filteredHistory].slice(0, maxItems);\n\n    this.historySubject.next(newHistory);\n    this.saveHistoryToStorage(newHistory);\n  }\n\n  removeFromHistory(index: number): void {\n    const currentHistory = this.historySubject.value;\n    currentHistory.splice(index, 1);\n    this.historySubject.next([...currentHistory]);\n    this.saveHistoryToStorage(currentHistory);\n  }\n\n  clearHistory(): void {\n    this.historySubject.next([]);\n    this.saveHistoryToStorage([]);\n  }\n\n  getHistory(): AutocompleteWrapperItem[] {\n    return this.historySubject.value;\n  }\n\n  // Gestión de almacenamiento específico del wrapper\n  private loadHistoryFromStorage(): void {\n    try {\n      const stored = localStorage.getItem('autocomplete_wrapper_history');\n      if (stored) {\n        const history = JSON.parse(stored);\n        this.historySubject.next(history);\n      }\n    } catch (error) {\n      console.warn('Error loading autocomplete wrapper history:', error);\n    }\n  }\n\n  private saveHistoryToStorage(history: AutocompleteWrapperItem[]): void {\n    try {\n      localStorage.setItem('autocomplete_wrapper_history', JSON.stringify(history));\n    } catch (error) {\n      console.warn('Error saving autocomplete wrapper history:', error);\n    }\n  }\n\n  // Paginación\n  paginateItems<T>(items: T[], page: number, itemsPerPage: number): T[] {\n    const startIndex = (page - 1) * itemsPerPage;\n    const endIndex = startIndex + itemsPerPage;\n    return items.slice(startIndex, endIndex);\n  }\n\n  getTotalPages(totalItems: number, itemsPerPage: number): number {\n    return Math.ceil(totalItems / itemsPerPage) || 1;\n  }\n\n  // Validaciones\n  isValidPage(page: number, totalPages: number): boolean {\n    return page >= 1 && page <= totalPages;\n  }\n\n  // Utilidades para templates\n  highlightText(text: string, query: string): string {\n    if (!query || !text) return text;\n\n    const regex = new RegExp(`(${query})`, 'gi');\n    return text.replace(regex, '<mark>$1</mark>');\n  }\n\n  getItemDisplayText(item: AutocompleteWrapperItem, displayField = 'nombre'): string {\n    if (typeof item === 'string') return item;\n    return item[displayField] || item.name || item.value || item.id?.toString() || '';\n  }\n\n  // Configuración dinámica\n  mergeConfig(userConfig: Partial<AutocompleteWrapperConfig>): AutocompleteWrapperConfig {\n    return { ...AUTOCOMPLETE_WRAPPER_DEFAULT_CONFIG, ...userConfig };\n  }\n\n  // Factory para crear función de búsqueda genérica\n  createGenericSearchFunction(config: {\n    search: (params: any) => Observable<any>;\n    queryParam?: string;\n    searchByParam?: string;\n    pageParam?: string;\n    pageSizeParam?: string;\n    responseMapper?: (response: any) => AutocompleteWrapperSearchResult;\n  }): AutocompleteWrapperSearchFunction {\n    return (query: string, filters: AutocompleteWrapperFilters, page = 1, pageSize = 10) => {\n      const { searchBy, ...rest } = filters;\n      const params = {\n        [config.queryParam || 'q']: query,\n        [config.searchByParam || 'searchBy']: searchBy,\n        [config.pageParam || 'page']: page,\n        [config.pageSizeParam || 'pageSize']: pageSize,\n        ...rest,\n      };\n\n      return config.search(params).pipe(\n        map(response => {\n          if (config.responseMapper) {\n            return config.responseMapper(response);\n          }\n\n          // Mapper por defecto\n          const items = response.data || response.items || response;\n          const totalRecords = response.totalRecords || response.totalCount || response.total || 0;\n          return {\n            items,\n            totalCount: totalRecords,\n            hasMore: response.hasMore || false,\n          };\n        }),\n      );\n    };\n  }\n\n  // Función para crear datos de ejemplo/mock específicos del wrapper\n  createMockData(): AutocompleteWrapperItem[] {\n    return [\n      {\n        id: 1,\n        name: 'iPhone 14 Pro 128GB',\n        description: 'Smartphone Apple con chip A16 Bionic y cámara Pro',\n        code: 'IP14P-128',\n        barcode: '1234567890123',\n        auxCode: 'APL-IP14P-128',\n        stock: 15,\n        category: 'Smartphones',\n        brand: 'Apple',\n        unit: 'unidad',\n        prices: [\n          {\n            id: 1,\n            type: 'retail',\n            label: 'Público',\n            value: 999,\n            currency: 'USD',\n            includesTax: true,\n            isDefault: true,\n            isActive: true,\n          },\n          {\n            id: 2,\n            type: 'wholesale',\n            label: 'Mayorista',\n            value: 850,\n            currency: 'USD',\n            minQuantity: 5,\n            includesTax: false,\n            isActive: true,\n          },\n          {\n            id: 3,\n            type: 'vip',\n            label: 'VIP',\n            value: 899,\n            currency: 'USD',\n            includesTax: true,\n            isActive: true,\n          },\n          {\n            id: 4,\n            type: 'promotional',\n            label: 'Black Friday',\n            value: 749,\n            currency: 'USD',\n            validFrom: new Date('2024-11-24'),\n            validTo: new Date('2024-11-30'),\n            includesTax: true,\n            isActive: true,\n          },\n        ],\n      },\n      {\n        id: 2,\n        name: 'Samsung Galaxy S23 256GB',\n        description: 'Flagship Android con cámara de 200MP',\n        code: 'SGS23-256',\n        barcode: '2345678901234',\n        auxCode: 'SAM-GS23-256',\n        stock: 0,\n        category: 'Smartphones',\n        brand: 'Samsung',\n        unit: 'unidad',\n        images: [\n          {\n            id: 1,\n            url: 'https://images.unsplash.com/photo-1592750475338-74b7b21085ab?w=400',\n            thumbnailUrl: 'https://images.unsplash.com/photo-1592750475338-74b7b21085ab?w=200',\n            alt: 'Samsung Galaxy S23 frontal',\n            type: 'main',\n            isPrimary: true,\n            order: 1,\n          },\n          {\n            id: 2,\n            url: 'https://images.unsplash.com/photo-1574755393849-623942496936?w=400',\n            thumbnailUrl: 'https://images.unsplash.com/photo-1574755393849-623942496936?w=200',\n            alt: 'Samsung Galaxy S23 trasero',\n            type: 'gallery',\n            order: 2,\n          },\n        ],\n        badges: [{ type: 'new', text: 'NUEVO' }, { type: 'bestseller' }],\n        prices: [\n          {\n            id: 5,\n            type: 'retail',\n            label: 'Público',\n            value: 799,\n            currency: 'USD',\n            includesTax: true,\n            isDefault: true,\n            isActive: true,\n          },\n          {\n            id: 6,\n            type: 'wholesale',\n            label: 'Mayorista',\n            value: 679,\n            currency: 'USD',\n            minQuantity: 3,\n            includesTax: false,\n            isActive: true,\n          },\n        ],\n      },\n    ];\n  }\n\n  // Métodos específicos para diferentes tipos de búsqueda\n  searchProducts(\n    query: string,\n    filters: Partial<AutocompleteWrapperFilters> = {},\n  ): Observable<AutocompleteWrapperSearchResult> {\n    const defaultFilters: AutocompleteWrapperFilters = {\n      searchBy: 'description',\n      stockFilter: 'all',\n      ...filters,\n    };\n\n    const mockData = this.createMockData();\n    return this.searchLocal(mockData, query, defaultFilters, AUTOCOMPLETE_WRAPPER_DEFAULT_CONFIG);\n  }\n\n  // Crear configuración específica para diferentes casos de uso\n  createProductSearchConfig(): AutocompleteWrapperConfig {\n    return this.mergeConfig({\n      placeholder: 'Buscar productos...',\n      enableStockFilter: true,\n      enableFooterActions: true,\n      sectionTitle: 'Productos',\n      searchFields: [\n        { value: 'description', label: 'Descripción', property: 'description' },\n        { value: 'code', label: 'Código', property: 'code' },\n        { value: 'barcode', label: 'Código de Barras', property: 'barcode' },\n        { value: 'auxCode', label: 'Código Auxiliar', property: 'auxCode' },\n      ],\n    });\n  }\n\n  createCustomerSearchConfig(): AutocompleteWrapperConfig {\n    return this.mergeConfig({\n      placeholder: 'Buscar clientes...',\n      enableStockFilter: false,\n      enableFooterActions: false,\n      sectionTitle: 'Clientes',\n      searchFields: [\n        { value: 'name', label: 'Nombre', property: 'name' },\n        { value: 'email', label: 'Email', property: 'email' },\n        { value: 'phone', label: 'Teléfono', property: 'phone' },\n        { value: 'document', label: 'Documento', property: 'document' },\n      ],\n    });\n  }\n}\n","import { Component, inject, ViewEncapsulation } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { ThemeSwitcher } from '../../services';\nimport { MatIconButton } from '@angular/material/button';\nimport { AsyncPipe } from '@angular/common';\nimport { MatIcon } from '@angular/material/icon';\n\n@Component({\n  selector: 'acp-theme-toggle',\n  imports: [MatIconButton, MatIcon, AsyncPipe],\n  templateUrl: './theme-toggle.html',\n  styleUrl: './theme-toggle.scss',\n  encapsulation: ViewEncapsulation.None,\n})\nexport class ThemeToggle {\n  private themeService = inject(ThemeSwitcher);\n\n  darkMode$: Observable<boolean>;\n\n  constructor() {\n    this.darkMode$ = this.themeService.isDarkMode$;\n  }\n  toggleDarkMode(): void {\n    this.themeService.toggleDarkMode();\n  }\n}\n","<button\n  mat-icon-button\n  (click)=\"toggleDarkMode()\"\n  title=\"{{ (darkMode$ | async) ? 'Modo Día' : 'Modo Noche' }}\"\n>\n  <mat-icon>{{ (darkMode$ | async) ? 'light_mode' : 'dark_mode' }}</mat-icon>\n</button>\n","export interface DateRangeConfig<T = any> {\n  startDate: FieldDefinition<T>;\n  endDate: FieldDefinition<T>;\n}\n\nexport declare type ControlType =\n  | 'textbox'\n  | 'ktextbox'\n  | 'combobox'\n  | 'textboxNum'\n  | 'dropdown'\n  | 'dropdownlist'\n  | 'multiselect'\n  | 'autocomplete'\n  | 'checkbox'\n  | 'radiobutton'\n  | 'inquiryInDialog'\n  | 'timepicker'\n  | 'datepicker'\n  | 'daterange'\n  | 'textarea'\n  | 'slideToggle'\n  | 'slider'\n  | 'switch'\n  | 'buttonToggleGroup';\n\nexport declare type FieldType =\n  | 'number'\n  | 'string'\n  | 'boolean'\n  | 'date'\n  | 'month'\n  | 'email'\n  | 'password'\n  | 'tel'\n  | 'hidden'\n  | 'image'\n  | 'url'\n  | 'week'\n  | 'search'\n  | 'reset'\n  | 'template'\n  | 'custom'\n  | 'expand';\n\nexport declare type ColumnType = 'text' | 'component' | 'html' | 'template';\n\nexport class FieldDefinition<T = any> {\n  value?: T;\n  valueLabel?: string;\n  defaultValue?: T;\n  defaultValueLabel?: string;\n  key: string;\n  label: string;\n  dateRangeConfig?: DateRangeConfig<T>;\n  isDefaultSearchField?: boolean;\n  required?: boolean;\n  disabled?: boolean;\n  order?: number;\n  icon?: string;\n  controlType?: ControlType = 'textbox';\n  type?: FieldType = 'string';\n  editor?: 'numeric' | 'boolean' | ''; // this attribut is for Kendo-Grid\n  options?: { label: string; value: T }[];\n  valueOptions?: string[];\n  valuePrimitive?: boolean; // for kendo dropdown\n  textField?: string; // for kendo dropdown\n  valueField?: string; // for kendo dropdown\n  errorMessage?: string;\n  width?: string;\n  valueChangeCallback?: (value: T) => void;\n  columnType?: ColumnType;\n  body?: any;\n\n  constructor(options: Partial<FieldDefinition<T>> = {}) {\n    this.value = options.value;\n    this.valueLabel = options.valueLabel;\n    this.defaultValue = options.defaultValue;\n    this.defaultValueLabel = options.defaultValueLabel;\n    this.key = options.key || '';\n    this.label = options.label || '';\n    this.dateRangeConfig = options.dateRangeConfig;\n    this.isDefaultSearchField = options.isDefaultSearchField;\n    this.required = !!options.required;\n    this.disabled = options.disabled;\n    this.order = options.order === undefined ? 1 : options.order;\n    this.icon = options.icon;\n    this.controlType = options.controlType || 'textbox';\n    this.type = options.type || 'string';\n    this.editor = options.editor || '';\n    this.options = options.options || [];\n    this.valueOptions = options.valueOptions || [];\n    this.valuePrimitive = options.valuePrimitive;\n    this.textField = options.textField;\n    this.valueField = options.valueField;\n    this.errorMessage = options.errorMessage || '';\n    this.width = options.width;\n    this.valueChangeCallback = options.valueChangeCallback;\n    this.columnType = options.columnType;\n    this.body = options.body;\n  }\n}\n","import { FieldDefinition } from './field-definition';\nimport { TemplateRef } from '@angular/core';\n\n// column-definition.ts\nexport interface TableContext<T = any> {\n  $implicit: T;\n  index?: number;\n}\n\nexport class ColumnDefinition<T = any> extends FieldDefinition<T> {\n  index?: number; // if the list of columns will be displayed in material edit-grid (angular material grid), index must be given\n  format?: any; // it could be: { style: 'currency', currency: 'EUR' }, { date: 'short' }\n  hasFooter?: boolean;\n  hideInOverlay?: boolean;\n\n  // optionsAttribut is used in stock-receipt maintenance: StockReceiptItem.Unit has options for StockReceiptItem.Birimi\n  optionsAttribut?: string; // name of the attribut that has the options list for dropdown\n  templateOutlet?: TemplateRef<TableContext<T>>;\n  constructor(options: Partial<ColumnDefinition<T>> = {}) {\n    super(options);\n    this.index = options.index;\n    this.format = options.format;\n    this.hasFooter = options.hasFooter;\n    this.hideInOverlay = options.hideInOverlay;\n    this.optionsAttribut = options.optionsAttribut;\n    this.templateOutlet = options.templateOutlet;\n  }\n}\n","export class TableCellIndex {\n  row: number;\n  column: number;\n\n  constructor(row: number, column: number) {\n    this.row = row;\n    this.column = column;\n  }\n}\n","import { PageEvent } from '@angular/material/paginator';\n\nexport class Pagination {\n  totalRecords: number;\n  pageSize: number;\n  pageIndex: number;\n  pageSizeOptions: number[];\n\n  hidePageSize: boolean;\n  showPageSizeOptions: boolean;\n  showFirstLastButtons: boolean;\n  disabled: boolean;\n\n  /**\n   * @param pageIndex Current page index (0-based for MatPaginator compatibility)\n   * @param pageSize Number of records per page\n   * @param totalRecords Total number of records\n   * @param pageSizeOptions Available page size options\n   * @param hidePageSize Whether to hide the page size selector\n   * @param showPageSizeOptions Whether to show page size options\n   * @param showFirstLastButtons Whether to show first/last buttons\n   * @param disabled Whether the paginator is disabled\n   */\n  constructor(\n    pageIndex = 0, // MatPaginator starts at 0\n    pageSize = 25,\n    totalRecords = 0,\n    pageSizeOptions: number[] = [25, 50, 75, 100],\n    hidePageSize = false,\n    showPageSizeOptions = true,\n    showFirstLastButtons = true,\n    disabled = false,\n  ) {\n    this.pageIndex = pageIndex;\n    this.pageSize = pageSize;\n    this.totalRecords = totalRecords;\n    this.pageSizeOptions = pageSizeOptions;\n    this.hidePageSize = hidePageSize;\n    this.showPageSizeOptions = showPageSizeOptions;\n    this.showFirstLastButtons = showFirstLastButtons;\n    this.disabled = disabled;\n  }\n\n  /**\n   * Calculates the total number of pages.\n   */\n  getTotalPages(): number {\n    return Math.ceil(this.totalRecords / this.pageSize);\n  }\n\n  /**\n   * Handles page event similar to Angular Material example.\n   * @param event MatPaginator PageEvent\n   */\n  handlePageEvent(event: PageEvent): void {\n    this.totalRecords = event.length;\n    this.pageSize = event.pageSize;\n    this.pageIndex = event.pageIndex;\n  }\n}\n","import {\n  Component,\n  Input,\n  TemplateRef,\n  ElementRef,\n  computed,\n  signal,\n  inject,\n  output,\n  input,\n  OnInit,\n  OnDestroy,\n  viewChild,\n  ViewEncapsulation,\n} from '@angular/core';\nimport { Subject, takeUntil, debounceTime, Observable, of } from 'rxjs';\n\nimport { MatIcon } from '@angular/material/icon';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { OverlayModule } from '@angular/cdk/overlay';\nimport { MatProgressBarModule } from '@angular/material/progress-bar';\nimport { MatProgressSpinner } from '@angular/material/progress-spinner';\nimport { FormsModule } from '@angular/forms';\nimport { MatIconButton } from '@angular/material/button';\nimport { catchError, switchMap } from 'rxjs/operators';\nimport {\n  AUTOCOMPLETE_WRAPPER_DEFAULT_CONFIG,\n  AutocompleteWrapperConfig,\n  AutocompleteWrapperFilters,\n  AutocompleteWrapperItem,\n  AutocompleteWrapperSearchFunction,\n  AutocompleteWrapperSearchResult,\n  AutocompleteWrapperState,\n} from '../../models';\nimport { AutocompleteWrapperService } from '../../services';\n@Component({\n  selector: 'acp-autocomplete-wrapper',\n  imports: [\n    MatIcon,\n    NgTemplateOutlet,\n    OverlayModule,\n    MatProgressBarModule,\n    MatProgressSpinner,\n    FormsModule,\n    MatIconButton,\n  ],\n  templateUrl: './autocomplete-wrapper.html',\n  styleUrl: './autocomplete-wrapper.scss',\n  encapsulation: ViewEncapsulation.None,\n})\nexport class ReusableAutocompleteComponent implements OnInit, OnDestroy {\n  readonly dataSource = input<AutocompleteWrapperItem[]>([]); // Para búsqueda local\n  @Input() config: AutocompleteWrapperConfig = AUTOCOMPLETE_WRAPPER_DEFAULT_CONFIG;\n  readonly itemTemplate = input<TemplateRef<any>>();\n  readonly searchFunction = input<AutocompleteWrapperSearchFunction>();\n\n  readonly notFoundTemplate = input<TemplateRef<any>>();\n\n  overlayWidth = input('auto');\n  overlayMaxHeight = input('400px');\n\n  itemSelected = output<AutocompleteWrapperItem>();\n  searchChanged = output<string>();\n  searchRequested = output<{ query: string; filters: AutocompleteWrapperFilters; page: number }>(); // Nuevo evento\n  pageChanged = output<number>();\n  filterChanged = output<AutocompleteWrapperFilters>();\n  advancedSearchClicked = output<void>();\n  allResultsClicked = output<string>();\n  createClicked = output<string>();\n\n  readonly searchInput = viewChild.required<ElementRef<HTMLInputElement>>('searchInput');\n  readonly historyListElement = viewChild<ElementRef<HTMLUListElement>>('historyListElement');\n  readonly resultsListElement = viewChild<ElementRef<HTMLUListElement>>('resultsListElement');\n\n  // State\n  query = '';\n  isLoading = signal(false);\n  overlayOpen = signal(false);\n  selectedIndex = signal(-1);\n  currentPage = signal(1);\n  filteredItems = signal<AutocompleteWrapperItem[]>([]);\n  historyList = signal<AutocompleteWrapperItem[]>([]);\n  totalCount = signal(0);\n  // Filters\n  filters: AutocompleteWrapperFilters = {\n    searchBy: 'name',\n    stockFilter: 'all',\n  };\n\n  // Computed properties\n  isHistoryVisible = computed(() => {\n    return this.query.length < (this.config.minSearchLength || 2) && this.historyList().length > 0;\n  });\n\n  totalItems = computed(() => this.filteredItems().length);\n\n  totalPages = computed(() => {\n    const total = this.totalCount();\n    return total > 0 ? Math.ceil(total / (this.config.itemsPerPage || 10)) : 1;\n  });\n\n  currentPageItems = computed(() => {\n    // if (!this.config.enablePagination) {\n    // }\n    return this.filteredItems();\n    // return this.autocompleteService.paginateItems(\n    //   this.filteredItems(),\n    //   this.currentPage(),\n    //   this.config.itemsPerPage || 10\n    // );\n  });\n\n  startItem = computed(() => {\n    const total = this.totalItems();\n    if (total === 0) return 0;\n    return (this.currentPage() - 1) * (this.config.itemsPerPage || 10) + 1;\n  });\n\n  endItem = computed(() => {\n    const total = this.totalItems();\n    const calculated = this.currentPage() * (this.config.itemsPerPage || 10);\n    return Math.min(calculated, total);\n  });\n\n  sectionTitle = computed(() => {\n    const total = this.totalItems();\n    return `Resultados (${total})`;\n  });\n\n  isNoResults = computed(() => {\n    return (\n      this.totalItems() === 0 &&\n      !this.isLoading() &&\n      this.query.length >= (this.config.minSearchLength || 2)\n    );\n  });\n\n  // Private\n  private destroy$ = new Subject<void>();\n  private searchSubject = new Subject<{ query: string; filters: any; page: number }>();\n  private autocompleteService = inject(AutocompleteWrapperService);\n\n  ngOnInit() {\n    this.mergeDefaultConfig();\n    this.setupSearch();\n    this.loadHistory();\n  }\n\n  ngOnDestroy() {\n    this.destroy$.next();\n    this.destroy$.complete();\n  }\n\n  private mergeDefaultConfig() {\n    this.config = this.autocompleteService.mergeConfig(this.config);\n    this.filters.searchBy = this.config.searchFields?.[0]?.value || 'name';\n    this.filters.stockFilter = this.config.stockOptions?.[0]?.value || 'all';\n  }\n\n  private setupSearch() {\n    this.filteredItems.set([]);\n    this.searchSubject\n      .pipe(\n        debounceTime(this.config.debounceTime || 300),\n        // distinctUntilChanged(),\n        //  distinctUntilChanged((prev, curr) => {\n        //    console.log(prev);\n        //    console.log(curr);\n        //      return  prev.query === curr.query &&\n        //        JSON.stringify(prev.filters) === JSON.stringify(curr.filters) &&\n        //        prev.page === curr.page\n        //\n        //    }\n        //\n        //  ),\n        takeUntil(this.destroy$),\n        switchMap(({ query }) => this.performSearch(query)),\n      )\n      .subscribe(result => {\n        this.filteredItems.set(result.items);\n        this.totalCount.set(result.totalCount);\n        this.isLoading.set(false);\n      });\n  }\n\n  private performSearch(query: string): Observable<AutocompleteWrapperSearchResult> {\n    if (query.length < (this.config.minSearchLength || 2)) {\n      return of({ items: [], totalCount: 0 });\n    }\n\n    // ESTRATEGIA A: Función de búsqueda personalizada\n    const searchFunction = this.searchFunction();\n    if (searchFunction) {\n      return searchFunction(\n        query,\n        this.filters,\n        this.currentPage(),\n        this.config.itemsPerPage || 10,\n      ).pipe(catchError(() => of({ items: [], totalCount: 0 })));\n    }\n\n    // ESTRATEGIA B: Emit evento para que el padre maneje\n    if (this.config.searchMode === 'remote') {\n      this.searchRequested.emit({\n        query,\n        filters: this.filters,\n        page: this.currentPage(),\n      });\n      return of({ items: [], totalCount: 0 }); // El padre actualizará los datos\n    }\n\n    // ESTRATEGIA C: Búsqueda local (fallback)\n    return this.autocompleteService.searchLocal(\n      this.dataSource(),\n      query,\n      this.filters,\n      this.config,\n    );\n  }\n\n  private loadHistory() {\n    this.autocompleteService.history$.pipe(takeUntil(this.destroy$)).subscribe(history => {\n      this.historyList.set(history);\n    });\n  }\n\n  private searchSubjectNext() {\n    this.searchSubject.next({\n      query: this.query,\n      filters: this.filters,\n      page: this.currentPage(),\n    });\n  }\n\n  // Event Handlers\n  onInput(event: Event) {\n    const target = event.target as HTMLInputElement;\n    this.query = target.value;\n    this.selectedIndex.set(-1);\n    this.currentPage.set(1);\n\n    if (this.query.length >= (this.config.minSearchLength || 2)) {\n      this.isLoading.set(true);\n      this.searchSubjectNext();\n    } else {\n      this.filteredItems.set([]);\n      this.isLoading.set(false);\n    }\n\n    this.showOverlay();\n    this.searchChanged.emit(this.query);\n  }\n\n  onKeyDown(event: KeyboardEvent) {\n    const currentList = this.isHistoryVisible() ? this.historyList() : this.currentPageItems();\n    const maxIndex = currentList.length - 1;\n\n    switch (event.key) {\n      case 'ArrowDown':\n        event.preventDefault();\n        if (maxIndex >= 0) {\n          const nextIndex = this.selectedIndex() < maxIndex ? this.selectedIndex() + 1 : 0;\n          this.selectedIndex.set(nextIndex);\n          this.scrollToSelected();\n        }\n        break;\n\n      case 'ArrowUp':\n        event.preventDefault();\n        if (maxIndex >= 0) {\n          const prevIndex = this.selectedIndex() > 0 ? this.selectedIndex() - 1 : maxIndex;\n          this.selectedIndex.set(prevIndex);\n          this.scrollToSelected();\n        }\n        break;\n\n      case 'Enter':\n        event.preventDefault();\n        if (this.selectedIndex() >= 0 && this.selectedIndex() <= maxIndex) {\n          this.selectItem(currentList[this.selectedIndex()]);\n        }\n        break;\n\n      case 'Escape':\n        event.preventDefault();\n        this.hideOverlay();\n        break;\n\n      case 'PageDown':\n        event.preventDefault();\n        if (!this.isHistoryVisible() && this.config.enablePagination) {\n          this.goToNextPage();\n        }\n        break;\n\n      case 'PageUp':\n        event.preventDefault();\n        if (!this.isHistoryVisible() && this.config.enablePagination) {\n          this.goToPreviousPage();\n        }\n        break;\n    }\n  }\n\n  onFilterChange() {\n    this.currentPage.set(1);\n    if (this.query.length >= (this.config.minSearchLength || 2)) {\n      this.performSearch(this.query);\n      this.searchSubjectNext();\n    }\n    // this.filterChanged.emit(this.filters);\n  }\n\n  // Método público para actualizar resultados desde el padre\n  public updateSearchResults(result: AutocompleteWrapperSearchResult) {\n    this.filteredItems.set(result.items);\n    this.totalCount.set(result.totalCount);\n    this.isLoading.set(false);\n  }\n\n  // Overlay Methods\n  showOverlay() {\n    this.overlayOpen.set(true);\n  }\n\n  hideOverlay() {\n    this.overlayOpen.set(false);\n    this.selectedIndex.set(-1);\n  }\n\n  isType(item: any): item is string {\n    return typeof item === 'string';\n  }\n\n  // Selection Methods\n  selectItem(item: AutocompleteWrapperItem) {\n    if (this.config.clearInput) {\n      this.query = '';\n    } else {\n      this.query = this.getItemDisplayText(item);\n    }\n    this.hideOverlay();\n    this.currentPage.set(1);\n    this.autocompleteService.addToHistory(item, this.config.maxHistoryItems);\n    this.itemSelected.emit(item);\n\n    setTimeout(() => {\n      this.searchInput()?.nativeElement?.focus();\n    }, 100);\n  }\n\n  clearSearch() {\n    this.query = '';\n    this.filteredItems.set([]);\n    this.selectedIndex.set(-1);\n    this.currentPage.set(1);\n    this.searchInput()?.nativeElement?.focus();\n    this.searchChanged.emit('');\n  }\n\n  // History Methods\n  removeHistoryItem(index: number, event: Event) {\n    event.stopPropagation();\n    this.autocompleteService.removeFromHistory(index);\n  }\n\n  clearHistory() {\n    this.autocompleteService.clearHistory();\n  }\n\n  // Pagination Methods\n  goToPage(event: Event) {\n    const target = event.target as HTMLInputElement;\n    const page = parseInt(target.value);\n    if (this.autocompleteService.isValidPage(page, this.totalPages())) {\n      this.currentPage.set(page);\n      this.selectedIndex.set(-1);\n      this.pageChanged.emit(page);\n      this.searchSubjectNext();\n    } else {\n      target.value = this.currentPage().toString();\n    }\n  }\n\n  goToFirstPage() {\n    if (this.currentPage() !== 1) {\n      this.currentPage.set(1);\n      this.selectedIndex.set(-1);\n      this.pageChanged.emit(1);\n      this.searchSubjectNext();\n    }\n  }\n\n  goToPreviousPage() {\n    const prevPage = this.currentPage() - 1;\n    if (prevPage >= 1) {\n      this.currentPage.set(prevPage);\n      this.selectedIndex.set(-1);\n      this.pageChanged.emit(prevPage);\n      this.searchSubjectNext();\n    }\n  }\n\n  goToNextPage() {\n    const nextPage = this.currentPage() + 1;\n    if (nextPage <= this.totalPages()) {\n      this.currentPage.set(nextPage);\n      this.selectedIndex.set(-1);\n      this.pageChanged.emit(nextPage);\n      this.searchSubjectNext();\n    }\n  }\n\n  goToLastPage() {\n    const lastPage = this.totalPages();\n    if (this.currentPage() !== lastPage) {\n      this.currentPage.set(lastPage);\n      this.selectedIndex.set(-1);\n      this.pageChanged.emit(lastPage);\n      this.searchSubjectNext();\n    }\n  }\n\n  // Footer Actions\n  onCreateNew(_$event: MouseEvent) {\n    //$event.stopPropagation();\n    // this.hideOverlay();\n    this.createClicked.emit(this.query);\n  }\n\n  onAdvancedSearch() {\n    this.hideOverlay();\n    this.advancedSearchClicked.emit();\n  }\n\n  onShowAllResults() {\n    this.hideOverlay();\n    this.allResultsClicked.emit(this.query);\n  }\n\n  // Utility Methods\n  getItemDisplayText(item: AutocompleteWrapperItem): string {\n    return this.autocompleteService.getItemDisplayText(item);\n  }\n\n  noResultsText(): string {\n    return `No se encontraron resultados para \"${this.query}\"`;\n  }\n\n  private scrollToSelected() {\n    const listElement = this.isHistoryVisible()\n      ? this.historyListElement()?.nativeElement\n      : this.resultsListElement()?.nativeElement;\n\n    if (listElement) {\n      const selectedElement = listElement.children[this.selectedIndex()] as HTMLElement;\n      if (selectedElement) {\n        selectedElement.scrollIntoView({\n          block: 'nearest',\n          behavior: 'smooth',\n        });\n      }\n    }\n  }\n\n  // Public API\n  public getState(): AutocompleteWrapperState {\n    return {\n      query: this.query,\n      isLoading: this.isLoading(),\n      overlayOpen: this.overlayOpen(),\n      selectedIndex: this.selectedIndex(),\n      pagination: {\n        currentPage: this.currentPage(),\n        totalPages: this.totalPages(),\n        totalItems: this.totalItems(),\n        itemsPerPage: this.config.itemsPerPage || 10,\n        startItem: this.startItem(),\n        endItem: this.endItem(),\n        hasNextPage: this.currentPage() < this.totalPages(),\n        hasPreviousPage: this.currentPage() > 1,\n      },\n      hasResults: this.totalItems() > 0,\n      isHistoryVisible: this.isHistoryVisible(),\n      historyCount: this.historyList().length,\n      filters: this.filters,\n    };\n  }\n\n  public setQuery(query: string) {\n    this.query = query;\n    this.currentPage.set(1);\n    if (query.length >= (this.config.minSearchLength || 2)) {\n      this.performSearch(query);\n      this.showOverlay();\n    } else {\n      this.filteredItems.set([]);\n      if (query.length === 0) {\n        this.hideOverlay();\n      }\n    }\n    this.searchChanged.emit(query);\n  }\n\n  public focus() {\n    this.searchInput()?.nativeElement?.focus();\n  }\n}\n","<div class=\"acp-autocomplete-wrapper\" [class.acp-autocomplete-wrapper-active]=\"overlayOpen()\">\n  <!-- Input Container -->\n  <div\n    class=\"acp-autocomplete-wrapper-input-container\"\n    cdkOverlayOrigin\n    #overlayPosition=\"cdkOverlayOrigin\"\n  >\n    <div class=\"acp-autocomplete-wrapper-input-wrapper\">\n      <mat-icon class=\"acp-autocomplete-wrapper-search-icon\">search</mat-icon>\n      <input\n        #searchInput\n        type=\"text\"\n        class=\"acp-autocomplete-wrapper-input-field\"\n        [placeholder]=\"config.placeholder\"\n        [(ngModel)]=\"query\"\n        (input)=\"onInput($event)\"\n        (click)=\"showOverlay()\"\n        (keydown)=\"onKeyDown($event)\"\n        [disabled]=\"config.disabled || false\"\n        autocomplete=\"off\"\n      />\n      @if (query && query.length > 0 && !isLoading()) {\n      <button\n        mat-icon-button\n        (click)=\"clearSearch()\"\n        type=\"button\"\n        class=\"acp-autocomplete-wrapper-clear-button\"\n      >\n        <mat-icon>clear</mat-icon>\n      </button>\n      }\n      <button mat-icon-button type=\"button\">\n        <mat-icon>add</mat-icon>\n      </button>\n    </div>\n\n    @if (isLoading()) {\n    <div class=\"acp-autocomplete-wrapper-loading-spinner\">\n      <mat-spinner diameter=\"20\" />\n    </div>\n    }\n  </div>\n\n  <!-- Overlay -->\n  <ng-template\n    cdkConnectedOverlay\n    [cdkConnectedOverlayOrigin]=\"overlayPosition\"\n    [cdkConnectedOverlayOpen]=\"overlayOpen()\"\n    [cdkConnectedOverlayWidth]=\"overlayWidth()\"\n    [cdkConnectedOverlayHeight]=\"overlayMaxHeight()\"\n    (overlayOutsideClick)=\"hideOverlay()\"\n    (backdropClick)=\"hideOverlay()\"\n  >\n    <div class=\"autocomplete-wrapper-dropdown\" [class.autocomplete-wrapper-active]=\"overlayOpen()\">\n      <div class=\"autocomplete-wrapper-dropdown-content\">\n        <!-- History Section -->\n        @if (isHistoryVisible() && historyList().length > 0) {\n        <div class=\"autocomplete-wrapper-section\">\n          <div class=\"autocomplete-wrapper-section-header\">\n            <span class=\"autocomplete-wrapper-section-title\">Búsquedas recientes</span>\n            <button\n              type=\"button\"\n              mat-icon-button\n              (click)=\"clearHistory()\"\n              class=\"autocomplete-wrapper-clear-history-button\"\n            >\n              <mat-icon>delete_outline</mat-icon>\n            </button>\n          </div>\n          <ul\n            class=\"autocomplete-wrapper-items-list autocomplete-wrapper-scrollable-list\"\n            #historyListElement\n          >\n            @for (item of historyList(); track $index) {\n            <li class=\"autocomplete-wrapper-list-item autocomplete-wrapper-history-item\">\n              <div\n                class=\"autocomplete-wrapper-item-content\"\n                [class.autocomplete-wrapper-selected]=\"$index === selectedIndex()\"\n                tabindex=\"0\"\n                (click)=\"selectItem(item)\"\n                (keydown.enter)=\"selectItem(item)\"\n              >\n                <mat-icon class=\"autocomplete-wrapper-history-icon\">history</mat-icon>\n                <div class=\"autocomplete-wrapper-item-details\">\n                  <ng-container\n                    *ngTemplateOutlet=\"\n                          itemTemplate() || defaultItemTemplate;\n                          context: { $implicit: item }\n                        \"\n                  />\n                </div>\n              </div>\n              <button\n                type=\"button\"\n                mat-icon-button\n                class=\"autocomplete-wrapper-remove-button\"\n                (click)=\"removeHistoryItem($index, $event)\"\n              >\n                <mat-icon>close</mat-icon>\n              </button>\n            </li>\n            }\n          </ul>\n        </div>\n        }\n\n        <!-- Results Section -->\n        @if (!isHistoryVisible()) {\n        <div class=\"autocomplete-wrapper-section\">\n          <!-- Header with filters and pagination -->\n          @if (config.enableFilters || config.enablePagination) {\n          <div class=\"autocomplete-wrapper-section-header\">\n            <span class=\"autocomplete-wrapper-section-title\">{{ sectionTitle() }}</span>\n\n            <!-- Filters -->\n            @if (config.enableFilters) {\n            <div class=\"autocomplete-wrapper-filter-controls\">\n              @if (config.searchFields && config.searchFields.length > 1) {\n              <div class=\"autocomplete-wrapper-filter-group\">\n                <label class=\"autocomplete-wrapper-filter-label\" for=\"searchBySelect\"\n                  >Buscar por:</label\n                >\n                <select\n                  id=\"searchBySelect\"\n                  class=\"autocomplete-wrapper-filter-select\"\n                  [(ngModel)]=\"filters.searchBy\"\n                  (change)=\"onFilterChange()\"\n                >\n                  @for (field of config.searchFields; track $index) {\n                  <option [value]=\"field.value\">{{ field.label }}</option>\n                  }\n                </select>\n              </div>\n              } @if (config.enableStockFilter && config.stockOptions) {\n              <div class=\"autocomplete-wrapper-filter-group\">\n                <label class=\"autocomplete-wrapper-filter-label\" for=\"stockSelect\">Stock:</label>\n                <select\n                  id=\"stockSelect\"\n                  class=\"autocomplete-wrapper-filter-select\"\n                  [(ngModel)]=\"filters.stockFilter\"\n                  (change)=\"onFilterChange()\"\n                >\n                  @for (option of config.stockOptions; track $index) {\n                  <option [value]=\"option.value\">{{ option.label }}</option>\n                  }\n                </select>\n              </div>\n              }\n            </div>\n            }\n\n            <!-- Pagination Controls -->\n            @if (config.enablePagination && totalPages() > 1) {\n            <div class=\"autocomplete-wrapper-pagination-header\">\n              <div class=\"autocomplete-wrapper-pagination-info\">\n                <span>Página {{ currentPage() }} de {{ totalPages() }}</span>\n              </div>\n              <div class=\"autocomplete-wrapper-pagination-controls\">\n                <button\n                  class=\"autocomplete-wrapper-pagination-button\"\n                  (click)=\"goToFirstPage()\"\n                  [disabled]=\"currentPage() === 1\"\n                >\n                  <mat-icon>first_page</mat-icon>\n                </button>\n                <button\n                  class=\"autocomplete-wrapper-pagination-button\"\n                  (click)=\"goToPreviousPage()\"\n                  [disabled]=\"currentPage() === 1\"\n                >\n                  <mat-icon>chevron_left</mat-icon>\n                </button>\n                <input\n                  type=\"number\"\n                  class=\"autocomplete-wrapper-page-input\"\n                  [value]=\"currentPage()\"\n                  [min]=\"1\"\n                  [max]=\"totalPages()\"\n                  (change)=\"goToPage($event)\"\n                />\n                <button\n                  class=\"autocomplete-wrapper-pagination-button\"\n                  (click)=\"goToNextPage()\"\n                  [disabled]=\"currentPage() === totalPages()\"\n                >\n                  <mat-icon>chevron_right</mat-icon>\n                </button>\n                <button\n                  class=\"autocomplete-wrapper-pagination-button\"\n                  (click)=\"goToLastPage()\"\n                  [disabled]=\"currentPage() === totalPages()\"\n                >\n                  <mat-icon>last_page</mat-icon>\n                </button>\n              </div>\n            </div>\n            }\n          </div>\n          } @else {\n          <div class=\"autocomplete-wrapper-section-header\">\n            <span class=\"autocomplete-wrapper-section-title\">{{ sectionTitle() }}</span>\n          </div>\n          }\n\n          <!-- Items List -->\n          @if (totalItems()) {\n          <ul\n            class=\"autocomplete-wrapper-items-list autocomplete-wrapper-scrollable-list\"\n            #resultsListElement\n          >\n            @for (item of currentPageItems(); track $index) {\n            <li class=\"autocomplete-wrapper-list-item autocomplete-wrapper-result-item\">\n              <div\n                class=\"autocomplete-wrapper-item-content\"\n                [class.autocomplete-wrapper-selected]=\"$index === selectedIndex()\"\n                tabindex=\"0\"\n                (click)=\"selectItem(item)\"\n                (keydown.enter)=\"selectItem(item)\"\n              >\n                <div class=\"autocomplete-wrapper-item-info\">\n                  <ng-container\n                    *ngTemplateOutlet=\"\n                            itemTemplate() || defaultItemTemplate;\n                            context: { $implicit: item }\n                          \"\n                  />\n                </div>\n              </div>\n            </li>\n            }\n          </ul>\n          }\n        </div>\n        }\n\n        <!-- No Results -->\n        @if (!isLoading() && isNoResults()) {\n        <div class=\"autocomplete-wrapper-no-results\">\n          <mat-icon class=\"autocomplete-wrapper-no-results-icon\">search_off</mat-icon>\n          <div class=\"autocomplete-wrapper-no-results-content\">\n            <ng-container\n              *ngTemplateOutlet=\"\n                  notFoundTemplate() || defaultNotFoundTemplate;\n                  context: { $implicit: noResultsText() }\n                \"\n            />\n          </div>\n        </div>\n        }\n\n        <!-- Footer -->\n        @if (overlayOpen() && totalItems() > 0) {\n        <div class=\"autocomplete-wrapper-footer\">\n          @if (!isHistoryVisible() && totalItems() > 0 && config.enablePagination) {\n          <div class=\"autocomplete-wrapper-pagination-footer\">\n            <div class=\"autocomplete-wrapper-pagination-summary\">\n              Mostrando {{ startItem() }}-{{ endItem() }} de {{ totalCount() }} resultados\n            </div>\n            <div class=\"autocomplete-wrapper-pagination-controls-footer\">\n              <button\n                class=\"autocomplete-wrapper-pagination-button\"\n                (click)=\"goToPreviousPage()\"\n                [disabled]=\"currentPage() === 1\"\n              >\n                <mat-icon>chevron_left</mat-icon>\n              </button>\n              <span class=\"autocomplete-wrapper-page-indicator\"\n                >{{ currentPage() }} / {{ totalPages() }}</span\n              >\n              <button\n                class=\"autocomplete-wrapper-pagination-button\"\n                (click)=\"goToNextPage()\"\n                [disabled]=\"currentPage() === totalPages()\"\n              >\n                <mat-icon>chevron_right</mat-icon>\n              </button>\n            </div>\n          </div>\n          } @if (config.enableFooterActions) {\n          <div class=\"autocomplete-wrapper-footer-actions\">\n            <button\n              class=\"autocomplete-wrapper-footer-button autocomplete-wrapper-create-button\"\n              (click)=\"onCreateNew($event)\"\n            >\n              <mat-icon>add</mat-icon>\n              <span class=\"autocomplete-wrapper-button-text\">Crear</span>\n            </button>\n            <button\n              class=\"autocomplete-wrapper-footer-button autocomplete-wrapper-search-button\"\n              (click)=\"onAdvancedSearch()\"\n            >\n              <mat-icon>tune</mat-icon>\n              <span class=\"autocomplete-wrapper-button-text\">Avanzada</span>\n            </button>\n            @if (!isHistoryVisible() && totalItems() > 0) {\n            <button\n              class=\"autocomplete-wrapper-footer-button autocomplete-wrapper-results-button\"\n              (click)=\"onShowAllResults()\"\n            >\n              <mat-icon>list</mat-icon>\n              <span class=\"autocomplete-wrapper-button-text\">Todos</span>\n            </button>\n            }\n          </div>\n          }\n        </div>\n        }\n      </div>\n    </div>\n  </ng-template>\n\n  <!-- Default Templates -->\n  <ng-template #defaultItemTemplate let-item>\n    <div class=\"autocomplete-wrapper-default-item\">\n      <div class=\"autocomplete-wrapper-item-name\">{{ getItemDisplayText(item) }}</div>\n      @if (item.description && typeof item === 'object') {\n      <div class=\"autocomplete-wrapper-item-description\">{{ item.description }}</div>\n      }\n    </div>\n  </ng-template>\n\n  <ng-template #defaultNotFoundTemplate let-text>\n    <div class=\"autocomplete-wrapper-default-no-results\">\n      <p>{{ text }}</p>\n      <p>Intenta con otros términos de búsqueda</p>\n    </div>\n  </ng-template>\n</div>\n","import { Directive, ElementRef, HostListener, inject, Renderer2 } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\n@Directive({\n  selector: '[acpToUpperCase]',\n  providers: [\n    {\n      provide: NG_VALUE_ACCESSOR,\n      useExisting: ToUpperCase,\n      multi: true,\n    },\n  ],\n})\nexport class ToUpperCase implements ControlValueAccessor {\n  private el = inject(ElementRef);\n  private renderer = inject(Renderer2);\n\n  @HostListener('input') onInput() {\n    const value = this.el.nativeElement.value;\n    this.el.nativeElement.value = value.toUpperCase();\n    this.onChange(value.toUpperCase()); // Llamar a la función que actualiza el valor del modelo\n  }\n\n  // Funciones de ControlValueAccessor\n  onChange = (_value: string) => {\n    // ControlValueAccessor callback\n  };\n  onTouched = () => {\n    // ControlValueAccessor callback\n  };\n\n  writeValue(value: string): void {\n    if (value) {\n      this.el.nativeElement.value = value.toUpperCase();\n    }\n  }\n\n  registerOnChange(fn: (value: string) => void): void {\n    this.onChange = fn;\n  }\n\n  registerOnTouched(fn: () => void): void {\n    this.onTouched = fn;\n  }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i2","i4","i5"],"mappings":"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"}