@acontplus/ng-components 2.1.13 → 2.1.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"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/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/dynamic-select/dynamic-select.ts","../../../../packages/ng-components/src/lib/components/dynamic-select/dynamic-select.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/icon-registry.service.ts","../../../../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/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/services/alert-dialog.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/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/pipes/is-template-ref.pipe.ts","../../../../packages/ng-components/src/lib/pipes/to-observable.pipe.ts","../../../../packages/ng-components/src/lib/directives/selectable-cell.ts","../../../../packages/ng-components/src/lib/utils/data-grid.util.ts","../../../../packages/ng-components/src/lib/directives/data-grid-expansion-toggle.ts","../../../../packages/ng-components/src/lib/pipes/data-grid.pipe.ts","../../../../packages/ng-components/src/lib/components/data-grid/data-grid-menu.ts","../../../../packages/ng-components/src/lib/components/data-grid/data-grid-cell/data-grid-cell.ts","../../../../packages/ng-components/src/lib/components/data-grid/data-grid-cell/data-grid-cell.html","../../../../packages/ng-components/src/lib/components/data-grid/keyboard-navigation.ts","../../../../packages/ng-components/src/lib/components/data-grid/data-grid.ts","../../../../packages/ng-components/src/lib/components/data-grid/data-grid.html","../../../../packages/ng-components/src/lib/components/date-range-picker/date-range-picker.ts","../../../../packages/ng-components/src/lib/components/date-range-picker/index.ts","../../../../packages/ng-components/src/lib/components/drawer/drawer-config.ts","../../../../packages/ng-components/src/lib/components/drawer/drawer-container.ts","../../../../packages/ng-components/src/lib/components/drawer/drawer-container.html","../../../../packages/ng-components/src/lib/components/drawer/drawer-ref.ts","../../../../packages/ng-components/src/lib/components/drawer/drawer.ts","../../../../packages/ng-components/src/lib/components/popover/popover-content.ts","../../../../packages/ng-components/src/lib/components/popover/popover-errors.ts","../../../../packages/ng-components/src/lib/components/popover/popover.ts","../../../../packages/ng-components/src/lib/components/popover/popover.html","../../../../packages/ng-components/src/lib/components/popover/popover-trigger.ts","../../../../packages/ng-components/src/lib/components/popover/popover-target.ts","../../../../packages/ng-components/src/lib/components/alert-dialog/alert-dialog.ts","../../../../packages/ng-components/src/lib/components/alert-dialog/alert-dialog.html","../../../../packages/ng-components/src/lib/directives/to-upper-case.ts","../../../../packages/ng-components/src/lib/pipes/get-total-pipe.ts","../../../../packages/ng-components/src/lib/pipes/status-display-pipe.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@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","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 {\n REPORT_FORMAT,\n type ButtonType,\n type ButtonVariant,\n type MaterialButtonStyle,\n} from '@acontplus/ui-kit';\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@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 {\n Component,\n effect,\n input,\n OnDestroy,\n OnInit,\n output,\n ChangeDetectionStrategy,\n} from '@angular/core';\n\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\nimport { NgSelectModule } from '@ng-select/ng-select';\nimport { Subject } from 'rxjs';\nimport type { SelectOption } from '@acontplus/ui-kit';\n\n@Component({\n selector: 'acp-dynamic-select',\n imports: [NgSelectModule, ReactiveFormsModule],\n templateUrl: './dynamic-select.html',\n styleUrl: './dynamic-select.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class DynamicSelect implements OnInit, OnDestroy {\n // Basic inputs\n label = input<string>('Seleccione una opción');\n options = input.required<SelectOption[]>();\n selectedValue = input<string | number | null>();\n className = input<string>('w-100');\n placeholder = input<string>();\n disabled = input<boolean>(false);\n clearable = input<boolean>(true);\n searchable = input<boolean>(true);\n\n // Advanced ng-select inputs\n virtualScroll = input<boolean>(false);\n dropdownPosition = input<'bottom' | 'top' | 'auto'>('auto');\n closeOnSelect = input<boolean>(true);\n hideSelected = input<boolean>(false);\n multiple = input<boolean>(false);\n selectOnTab = input<boolean>(false);\n openOnEnter = input<boolean>(true);\n selectableGroup = input<boolean>(false);\n selectableGroupAsModel = input<boolean>(true);\n clearOnBackspace = input<boolean>(true);\n readonly = input<boolean>(false);\n searchWhileComposing = input<boolean>(true);\n minTermLength = input<number>(0);\n editableSearchTerm = input<boolean>(false);\n typeToSearchText = input<string>('Type to search');\n addTagText = input<string>('Add item');\n loadingText = input<string>('Loading...');\n clearAllText = input<string>('Clear all');\n notFoundText = input<string>('No items found');\n\n // Output\n selectionChange = output<string | number | null>();\n\n public selectControl = new FormControl<string | number | null>(null);\n public filteredOptions: SelectOption[] = [];\n public loading = false;\n\n private _onDestroy = new Subject<void>();\n\n constructor() {\n // Sincroniza las opciones\n effect(() => {\n const opts = this.options();\n this.filteredOptions = opts ?? [];\n });\n\n // Sincroniza el valor seleccionado externamente\n effect(() => {\n const value = this.selectedValue();\n if (value !== undefined && value !== null) {\n const selectedOption = this.options().find(option => option.value === value);\n if (selectedOption && this.selectControl.value !== selectedOption.value) {\n this.selectControl.setValue(selectedOption.value, {\n emitEvent: false,\n });\n }\n }\n });\n }\n\n ngOnInit() {\n // Handle initial value if provided\n if (this.selectedValue() !== undefined && this.selectedValue() !== null) {\n const selectedOption = this.options().find(opt => opt.value === this.selectedValue());\n if (selectedOption) {\n this.selectControl.setValue(selectedOption.value, { emitEvent: false });\n }\n }\n }\n\n onSelectionChange(selectedItem: any) {\n // Extract just the value from the selected item\n const value = selectedItem?.value ?? selectedItem;\n\n // Emit only the value\n this.selectionChange.emit(value);\n\n // Update the form control to keep it in sync\n this.selectControl.setValue(value, { emitEvent: false });\n }\n\n ngOnDestroy() {\n this._onDestroy.next();\n this._onDestroy.complete();\n }\n}\n","<ng-select\n [items]=\"filteredOptions\"\n bindLabel=\"viewValue\"\n bindValue=\"value\"\n [searchable]=\"searchable()\"\n [clearable]=\"clearable()\"\n [formControl]=\"selectControl\"\n [placeholder]=\"placeholder() || label()\"\n [loading]=\"loading\"\n [virtualScroll]=\"virtualScroll()\"\n [dropdownPosition]=\"dropdownPosition()\"\n [closeOnSelect]=\"closeOnSelect()\"\n [hideSelected]=\"hideSelected()\"\n [multiple]=\"multiple()\"\n [selectOnTab]=\"selectOnTab()\"\n [openOnEnter]=\"openOnEnter()\"\n [selectableGroup]=\"selectableGroup()\"\n [selectableGroupAsModel]=\"selectableGroupAsModel()\"\n [clearOnBackspace]=\"clearOnBackspace()\"\n [readonly]=\"readonly()\"\n [searchWhileComposing]=\"searchWhileComposing()\"\n [minTermLength]=\"minTermLength()\"\n [editableSearchTerm]=\"editableSearchTerm()\"\n [typeToSearchText]=\"typeToSearchText()\"\n [addTagText]=\"addTagText()\"\n [loadingText]=\"loadingText()\"\n [clearAllText]=\"clearAllText()\"\n [notFoundText]=\"notFoundText()\"\n (change)=\"onSelectionChange($event)\"\n [ngClass]=\"className()\"\n/>\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 { Injectable, inject } from '@angular/core';\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\nimport { HttpClient } from '@angular/common/http';\nimport { catchError, of, Observable, firstValueFrom } from 'rxjs';\nimport type { IconDefinition } from '@acontplus/ui-kit';\n\nexport interface IconRegistryConfig {\n /**\n * Fallback icon to show when requested icon is not found\n */\n fallbackIcon?: string;\n /**\n * Show console warnings when icons are not found\n */\n showWarnings?: boolean;\n /**\n * Base URL for loading icons from external sources\n */\n iconBaseUrl?: string;\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class IconRegistryService {\n private readonly sanitizer = inject(DomSanitizer);\n private readonly http = inject(HttpClient, { optional: true });\n private readonly registry = new Map<string, string>();\n private readonly pendingLoads = new Map<string, Observable<string | null>>();\n\n private config: IconRegistryConfig = {\n showWarnings: true,\n };\n\n /**\n * Configure the icon registry\n */\n configure(config: IconRegistryConfig): void {\n this.config = { ...this.config, ...config };\n\n // Register fallback icon if provided\n if (config.fallbackIcon && !this.registry.has('__fallback__')) {\n this.registerIcon('__fallback__', config.fallbackIcon);\n }\n }\n\n /**\n * Register a single icon\n */\n registerIcon(name: string, svgData: string): void {\n this.registry.set(name, svgData);\n }\n\n /**\n * Register multiple icons at once\n */\n registerIcons(icons: IconDefinition[]): void {\n icons.forEach(({ name, data }) => this.registerIcon(name, data));\n }\n\n /**\n * Load an icon from a URL\n */\n async loadIconFromUrl(name: string, url: string): Promise<boolean> {\n if (!this.http) {\n console.error('HttpClient not available. Did you provide it in your app config?');\n return false;\n }\n\n try {\n const svgData = await firstValueFrom(\n this.http.get(url, { responseType: 'text' }).pipe(\n catchError(error => {\n console.error(`Failed to load icon \"${name}\" from ${url}:`, error);\n return of(null);\n }),\n ),\n );\n\n if (svgData) {\n this.registerIcon(name, svgData);\n return true;\n }\n return false;\n } catch (error) {\n console.error(`Error loading icon \"${name}\":`, error);\n return false;\n }\n }\n\n /**\n * Load multiple icons from URLs\n */\n async loadIconsFromUrls(icons: { name: string; url: string }[]): Promise<void> {\n const promises = icons.map(({ name, url }) => this.loadIconFromUrl(name, url));\n await Promise.all(promises);\n }\n\n /**\n * Get a sanitized icon by name\n * If icon is not found, attempts to load from configured base URL or returns fallback\n */\n getIcon(name: string): SafeHtml | null {\n // Check if icon exists in registry\n const svgData = this.registry.get(name);\n if (svgData) {\n return this.sanitizer.sanitize(1, svgData) as SafeHtml;\n }\n\n // Icon not found - show warning if enabled\n if (this.config.showWarnings) {\n console.warn(\n `Icon \"${name}\" not found in registry. ${\n this.config.fallbackIcon ? 'Using fallback icon.' : 'No fallback configured.'\n }`,\n );\n }\n\n // Return fallback icon if configured\n if (this.registry.has('__fallback__')) {\n const fallbackData = this.registry.get('__fallback__');\n return this.sanitizer.sanitize(1, fallbackData!) as SafeHtml;\n }\n\n // Return null if no fallback\n return null;\n }\n\n /**\n * Get icon with automatic online loading if not found\n */\n async getIconAsync(name: string): Promise<SafeHtml | null> {\n // Check if icon exists\n if (this.hasIcon(name)) {\n return this.getIcon(name);\n }\n\n // Try to load from base URL if configured\n if (this.config.iconBaseUrl && this.http) {\n const url = `${this.config.iconBaseUrl}/${name}.svg`;\n const loaded = await this.loadIconFromUrl(name, url);\n\n if (loaded) {\n return this.getIcon(name);\n }\n }\n\n // Return fallback or null\n return this.getIcon(name);\n }\n\n /**\n * Check if an icon exists in the registry\n */\n hasIcon(name: string): boolean {\n return this.registry.has(name);\n }\n\n /**\n * Get all registered icon names\n */\n getRegisteredIcons(): string[] {\n return Array.from(this.registry.keys()).filter(name => name !== '__fallback__');\n }\n\n /**\n * Clear all registered icons\n */\n clearRegistry(): void {\n this.registry.clear();\n }\n\n /**\n * Remove a specific icon from the registry\n */\n removeIcon(name: string): boolean {\n return this.registry.delete(name);\n }\n}\n","import { Component, computed, effect, inject, input, ViewEncapsulation } from '@angular/core';\nimport type { SafeHtml } from '@angular/platform-browser';\nimport { IconRegistryService } from '../icon-registry.service';\nimport { DEFAULT_ICONS, FALLBACK_ICON } from '@acontplus/ui-kit';\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 private readonly iconRegistry = inject(IconRegistryService);\n\n /**\n * Icon name from the registry\n */\n name = input.required<string>();\n\n /**\n * Icon size (applies to both width and height)\n */\n size = input<string>('24px');\n\n /**\n * Custom width (overrides size)\n */\n width = input<string | undefined>(undefined);\n\n /**\n * Custom height (overrides size)\n */\n height = input<string | undefined>(undefined);\n\n /**\n * Icon color (uses CSS currentColor by default)\n */\n color = input<string>('currentColor');\n\n /**\n * Show fallback icon instead of empty space when icon is not found\n */\n useFallback = input<boolean>(true);\n\n /**\n * Computed width value\n */\n protected computedWidth = computed(() => this.width() ?? this.size());\n\n /**\n * Computed height value\n */\n protected computedHeight = computed(() => this.height() ?? this.size());\n\n /**\n * Get the icon SVG from the registry\n */\n protected iconSvg = computed<SafeHtml | string | null>(() => {\n const svg = this.iconRegistry.getIcon(this.name());\n\n // If icon not found and fallback disabled, return empty\n if (!svg && !this.useFallback()) {\n return '';\n }\n\n return svg;\n });\n\n constructor() {\n // Register default icons and fallback on first component instantiation\n effect(\n () => {\n const registeredIcons = this.iconRegistry.getRegisteredIcons();\n\n if (registeredIcons.length === 0) {\n // Register default icons\n this.iconRegistry.registerIcons(DEFAULT_ICONS);\n\n // Configure with fallback icon\n this.iconRegistry.configure({\n fallbackIcon: FALLBACK_ICON,\n showWarnings: true,\n });\n }\n },\n { allowSignalWrites: true },\n );\n }\n}\n","<div\n class=\"acp-svg-icon\"\n [style.width]=\"computedWidth()\"\n [style.height]=\"computedHeight()\"\n [style.color]=\"color()\"\n [innerHTML]=\"iconSvg()\"\n></div>\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","// 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 {\n Tabulator,\n PageModule,\n ReactiveDataModule,\n FormatModule,\n EditModule,\n ValidateModule,\n SortModule,\n TooltipModule,\n ColumnCalcsModule,\n DataTreeModule,\n MoveRowsModule,\n SelectRowModule,\n PopupModule,\n InteractionModule,\n} from 'tabulator-tables';\nimport { TabulatorTheme } from '../../../types';\n\nTabulator.registerModule([\n PageModule,\n ReactiveDataModule,\n FormatModule,\n EditModule,\n ValidateModule,\n ColumnCalcsModule,\n SortModule,\n TooltipModule,\n DataTreeModule,\n MoveRowsModule,\n SelectRowModule,\n PopupModule,\n InteractionModule,\n]);\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 readonly selectableRows = input(false);\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 rowDeleted = output<any>();\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).slice(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 selectableRows: this.selectableRows() ?? true,\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 this._tabulator.on('rowDeleted', row => {\n this.rowDeleted.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 { Injectable, inject, Type } from '@angular/core';\nimport { MatDialog } from '@angular/material/dialog';\nimport { AlertDialog } from './../components';\nimport { firstValueFrom } from 'rxjs';\nimport { ThemePalette } from '@angular/material/core';\nimport { ButtonVariant, MaterialButtonStyle } from '@acontplus/ui-kit';\n\nexport type AlertType = 'success' | 'error' | 'warning' | 'info' | 'question' | 'delete';\nexport type AlertPosition =\n | 'top'\n | 'top-start'\n | 'top-end'\n | 'center'\n | 'center-start'\n | 'center-end'\n | 'bottom'\n | 'bottom-start'\n | 'bottom-end';\n\nexport interface AlertDialogOptions {\n // ===== Content and Appearance =====\n title?: string;\n message?: string;\n html?: string; // Custom HTML instead of message\n icon?: string; // Custom Material Icons\n iconColor?: string;\n type?: AlertType;\n width?: string;\n minWidth?: string;\n maxWidth?: string;\n height?: string;\n position?: AlertPosition;\n customClass?: string;\n panelClass?: string | string[];\n backdropClass?: string;\n\n // ===== Layout Configuration =====\n layout?: 'default' | 'modern' | 'toast'; // Nuevo: tipo de layout\n iconPosition?: 'left' | 'center' | 'top'; // Posición del icono\n contentAlignment?: 'left' | 'center' | 'right'; // Alineación del contenido\n showCloseButton?: boolean; // Botón X en la esquina superior derecha\n closeButtonPosition?: 'top-right' | 'top-left'; // Posición del botón cerrar\n\n // ===== Drag and Drop =====\n draggable?: boolean;\n dragHandle?: string; // CSS selector for drag handle (default: '.alert-dialog-title')\n\n // ===== Animation =====\n animation?: 'fade' | 'slide' | 'bounce' | 'zoom' | 'none';\n animationDuration?: number; // en milisegundos\n\n // ===== Toast Mode =====\n toastMode?: boolean; // Modo toast/toastr\n toastPosition?:\n | 'top-right'\n | 'top-left'\n | 'bottom-right'\n | 'bottom-left'\n | 'top-center'\n | 'bottom-center';\n autoClose?: boolean; // Auto cerrar en modo toast\n progressBar?: boolean; // Barra de progreso en modo toast\n\n // ===== Custom Component Support =====\n component?: Type<any>;\n componentProps?: Record<string, any>;\n\n // ===== Layout and Behavior =====\n verticalButtons?: boolean;\n fullWidthButtons?: boolean;\n reverseButtons?: boolean;\n timer?: number;\n timerProgressBar?: boolean;\n disableClose?: boolean;\n closeOnBackdropClick?: boolean;\n allowEscapeKey?: boolean;\n allowEnterKey?: boolean;\n scrollbarPadding?: boolean;\n\n // ===== Button Configuration =====\n // - Visibility\n showConfirmButton?: boolean;\n showCancelButton?: boolean;\n showDenyButton?: boolean;\n\n // - Labels\n confirmText?: string;\n cancelText?: string;\n denyText?: string;\n\n // - Icons\n confirmButtonIcon?: string;\n cancelButtonIcon?: string;\n denyButtonIcon?: string;\n\n // - Variants (using ButtonVariant from ui-kit)\n confirmButtonVariant?: ButtonVariant;\n cancelButtonVariant?: ButtonVariant;\n denyButtonVariant?: ButtonVariant;\n\n // - Styles (elevated, flat, etc.)\n confirmButtonStyle?: MaterialButtonStyle;\n cancelButtonStyle?: MaterialButtonStyle;\n denyButtonStyle?: MaterialButtonStyle;\n\n // - Colors (Material palette or hex)\n confirmButtonColor?: ThemePalette | string;\n cancelButtonColor?: ThemePalette | string;\n denyButtonColor?: ThemePalette | string;\n\n // - States\n disableConfirmButton?: boolean;\n disableCancelButton?: boolean;\n disableDenyButton?: boolean;\n\n // - Focus Management\n focusConfirm?: boolean;\n focusCancel?: boolean;\n focusDeny?: boolean;\n\n // ===== Loading States =====\n processing?: boolean;\n processingButton?: 'confirm' | 'cancel' | 'deny';\n\n // ===== Input Field (for prompts) =====\n input?: 'text' | 'email' | 'password' | 'number' | 'tel' | 'textarea';\n inputLabel?: string;\n inputPlaceholder?: string;\n inputValue?: string;\n inputValidator?: (value: string) => string | null | Promise<string | null>;\n inputAttributes?: Record<string, string>;\n\n // ===== Media =====\n imageUrl?: string;\n imageWidth?: string;\n imageHeight?: string;\n imageAlt?: string;\n\n // ===== Footer =====\n footer?: string;\n footerHtml?: string;\n\n // ===== Callbacks =====\n willOpen?: () => void;\n didOpen?: () => void;\n willClose?: () => void;\n didClose?: () => void;\n preConfirm?: (value?: string) => Promise<any> | any;\n preDeny?: (value?: string) => Promise<any> | any;\n\n // ===== Animations =====\n showClass?: {\n backdrop?: string;\n popup?: string;\n };\n hideClass?: {\n backdrop?: string;\n popup?: string;\n };\n\n // ===== Accessibility =====\n ariaLabel?: string;\n ariaDescribedBy?: string;\n}\n\nexport interface AlertDialogResult<T = any> {\n isConfirmed: boolean;\n isDismissed: boolean;\n isDenied: boolean;\n value?: T;\n dismiss?: 'backdrop' | 'cancel' | 'esc' | 'close' | 'timer';\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AlertDialogService {\n private dialog = inject(MatDialog);\n private defaultOptions: Partial<AlertDialogOptions> = {\n width: '400px',\n showConfirmButton: true,\n showCancelButton: false,\n showDenyButton: false,\n confirmText: 'OK',\n cancelText: 'Cancelar',\n denyText: 'No',\n disableClose: false,\n closeOnBackdropClick: true,\n allowEscapeKey: true,\n allowEnterKey: true,\n timerProgressBar: false,\n reverseButtons: false,\n focusConfirm: true,\n scrollbarPadding: true,\n position: 'center',\n draggable: false,\n // Nuevas opciones por defecto\n layout: 'modern',\n iconPosition: 'left',\n contentAlignment: 'left',\n showCloseButton: true,\n closeButtonPosition: 'top-right',\n animation: 'fade',\n animationDuration: 300,\n toastMode: false,\n toastPosition: 'top-right',\n autoClose: true,\n progressBar: true,\n };\n\n /**\n * Configurar opciones por defecto para todos los diálogos\n */\n setDefaults(options: Partial<AlertDialogOptions>): void {\n this.defaultOptions = { ...this.defaultOptions, ...options };\n }\n\n /**\n * Obtener opciones por defecto actuales\n */\n getDefaults(): Partial<AlertDialogOptions> {\n return { ...this.defaultOptions };\n }\n\n /**\n * Resetear a opciones por defecto originales\n */\n resetDefaults(): void {\n this.defaultOptions = {\n width: '400px',\n showConfirmButton: true,\n showCancelButton: false,\n showDenyButton: false,\n confirmText: 'OK',\n cancelText: 'Cancelar',\n denyText: 'No',\n disableClose: false,\n closeOnBackdropClick: true,\n allowEscapeKey: true,\n allowEnterKey: true,\n timerProgressBar: false,\n reverseButtons: false,\n focusConfirm: true,\n scrollbarPadding: true,\n position: 'center',\n draggable: false,\n };\n }\n\n /**\n * Muestra un diálogo de alerta con todas las opciones configurables\n */\n fire(options: AlertDialogOptions): Promise<AlertDialogResult> {\n const mergedOptions = { ...this.defaultOptions, ...options };\n\n // Configuración especial para modo toast\n if (mergedOptions.toastMode) {\n mergedOptions.width = mergedOptions.width || '350px';\n mergedOptions.showConfirmButton = mergedOptions.showConfirmButton ?? false;\n mergedOptions.timer = mergedOptions.timer || 4000;\n mergedOptions.timerProgressBar = mergedOptions.progressBar ?? true;\n mergedOptions.position = this.getToastPosition(mergedOptions.toastPosition || 'top-right');\n mergedOptions.disableClose = false;\n mergedOptions.animation = mergedOptions.animation || 'slide';\n }\n\n // Calcular posición del diálogo\n const position = mergedOptions.toastMode\n ? this.getToastDialogPosition(mergedOptions.toastPosition || 'top-right')\n : this.getDialogPosition(mergedOptions.position || 'center');\n\n // Calcular z-index dinámico basado en diálogos abiertos\n const openDialogs = this.dialog.openDialogs.length;\n const baseZIndex = 1000;\n const zIndex = baseZIndex + openDialogs * 10;\n\n const dialogRef = this.dialog.open(AlertDialog, {\n width: mergedOptions.width,\n minWidth: mergedOptions.minWidth,\n maxWidth: mergedOptions.maxWidth,\n height: mergedOptions.height,\n disableClose: !mergedOptions.closeOnBackdropClick && mergedOptions.disableClose,\n data: mergedOptions,\n panelClass: this.getPanelClasses(mergedOptions),\n backdropClass: mergedOptions.backdropClass,\n position,\n closeOnNavigation: true,\n autoFocus: mergedOptions.focusConfirm !== false,\n restoreFocus: true,\n hasBackdrop: !mergedOptions.toastMode,\n });\n\n // Aplicar z-index dinámico después de abrir\n setTimeout(() => {\n const overlayRef = (dialogRef as any)._overlayRef;\n if (overlayRef) {\n const pane = overlayRef.overlayElement;\n const backdrop = overlayRef.backdropElement;\n\n if (pane) {\n pane.style.zIndex = (zIndex + 2).toString();\n }\n if (backdrop) {\n backdrop.style.zIndex = (zIndex + 1).toString();\n }\n }\n }, 0);\n\n // Callbacks de ciclo de vida\n if (mergedOptions.willOpen) {\n mergedOptions.willOpen();\n }\n\n if (mergedOptions.didOpen) {\n setTimeout(() => mergedOptions.didOpen!(), 0);\n }\n\n // Auto-close con timer\n let timerHandle: any;\n if (mergedOptions.timer && mergedOptions.timer > 0) {\n timerHandle = setTimeout(() => {\n if (dialogRef) {\n dialogRef.close({\n isConfirmed: true,\n isDismissed: false,\n isDenied: false,\n dismiss: 'timer',\n });\n }\n }, mergedOptions.timer);\n }\n\n // Manejar ESC key\n if (!mergedOptions.allowEscapeKey) {\n dialogRef.keydownEvents().subscribe(event => {\n if (event.key === 'Escape') {\n event.preventDefault();\n event.stopPropagation();\n }\n });\n }\n\n // Manejar backdrop click\n if (!mergedOptions.closeOnBackdropClick) {\n dialogRef.backdropClick().subscribe(event => {\n event.preventDefault();\n event.stopPropagation();\n });\n }\n\n const resultPromise = firstValueFrom(dialogRef.afterClosed());\n\n // Callbacks de cierre\n dialogRef.beforeClosed().subscribe(() => {\n if (timerHandle) {\n clearTimeout(timerHandle);\n }\n if (mergedOptions.willClose) {\n mergedOptions.willClose();\n }\n });\n\n dialogRef.afterClosed().subscribe(() => {\n if (mergedOptions.didClose) {\n mergedOptions.didClose();\n }\n });\n\n return resultPromise;\n }\n\n /**\n * Alerta de éxito\n */\n success(options: string | Omit<AlertDialogOptions, 'type'>): Promise<AlertDialogResult> {\n const opts =\n typeof options === 'string'\n ? { message: options, title: '¡Éxito!' }\n : { title: '¡Éxito!', ...options };\n\n return this.fire({ ...opts, type: 'success' });\n }\n\n /**\n * Alerta de error\n */\n error(options: string | Omit<AlertDialogOptions, 'type'>): Promise<AlertDialogResult> {\n const opts =\n typeof options === 'string'\n ? { message: options, title: 'Error' }\n : { title: 'Error', ...options };\n\n return this.fire({ ...opts, type: 'error' });\n }\n\n /**\n * Alerta de advertencia\n */\n warning(options: string | Omit<AlertDialogOptions, 'type'>): Promise<AlertDialogResult> {\n const opts =\n typeof options === 'string'\n ? { message: options, title: 'Advertencia' }\n : { title: 'Advertencia', ...options };\n\n return this.fire({ ...opts, type: 'warning' });\n }\n\n /**\n * Alerta de información\n */\n info(options: string | Omit<AlertDialogOptions, 'type'>): Promise<AlertDialogResult> {\n const opts =\n typeof options === 'string'\n ? { message: options, title: 'Información' }\n : { title: 'Información', ...options };\n\n return this.fire({ ...opts, type: 'info' });\n }\n\n /**\n * Diálogo de confirmación\n */\n confirm(\n options: string | Omit<AlertDialogOptions, 'type' | 'showCancelButton'>,\n ): Promise<AlertDialogResult> {\n const opts =\n typeof options === 'string'\n ? { message: options, title: '¿Estás seguro?' }\n : { title: '¿Estás seguro?', ...options };\n\n return this.fire({\n ...opts,\n type: 'question',\n showCancelButton: true,\n confirmText: opts.confirmText || 'Sí',\n cancelText: opts.cancelText || 'No',\n });\n }\n\n /**\n * Prompt para capturar input del usuario\n */\n prompt(\n options: Omit<AlertDialogOptions, 'input'> & { input?: AlertDialogOptions['input'] },\n ): Promise<AlertDialogResult<string>> {\n return this.fire({\n type: 'question',\n showCancelButton: true,\n ...options,\n input: options.input || 'text',\n });\n }\n\n /**\n * Diálogo de confirmación para eliminar\n */\n delete(\n options: string | Omit<AlertDialogOptions, 'type' | 'showCancelButton'>,\n ): Promise<AlertDialogResult> {\n const opts =\n typeof options === 'string'\n ? { message: options, title: '¿Eliminar elemento?' }\n : { title: '¿Eliminar elemento?', ...options };\n\n return this.fire({\n ...opts,\n type: 'delete',\n showCancelButton: true,\n confirmText: opts.confirmText || 'Eliminar',\n cancelText: opts.cancelText || 'Cancelar',\n confirmButtonVariant: 'danger',\n });\n }\n\n /**\n * Toast notification (auto-cierre, posición personalizada)\n */\n toast(options: string | AlertDialogOptions): Promise<AlertDialogResult> {\n const opts = typeof options === 'string' ? { message: options } : options;\n\n return this.fire({\n timer: 3000,\n timerProgressBar: true,\n showConfirmButton: false,\n position: 'top-end',\n width: '350px',\n ...opts,\n });\n }\n\n /**\n * Cerrar todos los diálogos abiertos\n */\n closeAll(): void {\n this.dialog.closeAll();\n }\n\n private getDialogPosition(position: AlertPosition): any {\n const positions: Record<AlertPosition, any> = {\n top: { top: '20px' },\n 'top-start': { top: '20px', left: '20px' },\n 'top-end': { top: '20px', right: '20px' },\n center: {},\n 'center-start': { left: '20px' },\n 'center-end': { right: '20px' },\n bottom: { bottom: '20px' },\n 'bottom-start': { bottom: '20px', left: '20px' },\n 'bottom-end': { bottom: '20px', right: '20px' },\n };\n return positions[position] || {};\n }\n\n private getPanelClasses(options: AlertDialogOptions): string[] {\n const classes = ['alert-dialog-container'];\n\n if (options.customClass) {\n classes.push(options.customClass);\n }\n\n if (options.draggable) {\n classes.push('draggable-dialog');\n }\n\n // Agregar clases para layout\n if (options.layout) {\n classes.push(`layout-${options.layout}`);\n }\n\n // Agregar clases para posición de icono\n if (options.iconPosition) {\n classes.push(`icon-${options.iconPosition}`);\n }\n\n // Agregar clases para alineación de contenido\n if (options.contentAlignment) {\n classes.push(`content-${options.contentAlignment}`);\n }\n\n // Agregar clase para modo toast\n if (options.toastMode) {\n classes.push('toast-mode');\n }\n\n // Agregar clase para animación\n if (options.animation) {\n classes.push(`animation-${options.animation}`);\n }\n\n if (options.panelClass) {\n if (Array.isArray(options.panelClass)) {\n classes.push(...options.panelClass);\n } else {\n classes.push(options.panelClass);\n }\n }\n\n return classes;\n }\n\n private getToastPosition(position: string): AlertPosition {\n const positionMap: Record<string, AlertPosition> = {\n 'top-right': 'top-end',\n 'top-left': 'top-start',\n 'bottom-right': 'bottom-end',\n 'bottom-left': 'bottom-start',\n 'top-center': 'top',\n 'bottom-center': 'bottom',\n };\n return positionMap[position] || 'top-end';\n }\n\n private getToastDialogPosition(position: string): any {\n const positions: Record<string, any> = {\n 'top-right': { top: '20px', right: '20px' },\n 'top-left': { top: '20px', left: '20px' },\n 'bottom-right': { bottom: '20px', right: '20px' },\n 'bottom-left': { bottom: '20px', left: '20px' },\n 'top-center': { top: '20px' },\n 'bottom-center': { bottom: '20px' },\n };\n return positions[position] || positions['top-right'];\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n inject,\n input,\n ViewEncapsulation,\n} from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { ThemeSwitcher } from '../../services';\nimport { MatIconButton } from '@angular/material/button';\nimport { MatIcon } from '@angular/material/icon';\nimport { MatTooltip } from '@angular/material/tooltip';\n\n/**\n * A theme toggle button component that allows users to switch between\n * light and dark modes. Follows WAI-ARIA best practices for toggle buttons.\n */\n@Component({\n selector: 'acp-theme-toggle',\n imports: [MatIconButton, MatIcon, MatTooltip],\n templateUrl: './theme-toggle.html',\n styleUrl: './theme-toggle.scss',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'acp-theme-toggle',\n },\n})\nexport class ThemeToggle {\n private readonly themeSwitcher = inject(ThemeSwitcher);\n\n /** Icon to display when in dark mode (clicking will switch to light) */\n readonly lightModeIcon = input<string>('light_mode');\n\n /** Icon to display when in light mode (clicking will switch to dark) */\n readonly darkModeIcon = input<string>('dark_mode');\n\n /** Accessible label for when in dark mode */\n readonly lightModeLabel = input<string>('Switch to light mode');\n\n /** Accessible label for when in light mode */\n readonly darkModeLabel = input<string>('Switch to dark mode');\n\n /** Test ID for automated testing */\n readonly testId = input<string>('');\n\n /** Current dark mode state as a signal */\n protected readonly isDarkMode = toSignal(this.themeSwitcher.isDarkMode$, {\n initialValue: false,\n });\n\n /** Computed icon based on current theme */\n protected readonly currentIcon = computed(() =>\n this.isDarkMode() ? this.lightModeIcon() : this.darkModeIcon(),\n );\n\n /** Computed accessible label based on current theme */\n protected readonly currentLabel = computed(() =>\n this.isDarkMode() ? this.lightModeLabel() : this.darkModeLabel(),\n );\n\n /** Toggle between dark and light mode */\n toggleDarkMode(): void {\n this.themeSwitcher.toggleDarkMode();\n }\n}\n","<button\n mat-icon-button\n type=\"button\"\n (click)=\"toggleDarkMode()\"\n [attr.aria-label]=\"currentLabel()\"\n [attr.aria-pressed]=\"isDarkMode()\"\n [matTooltip]=\"currentLabel()\"\n [attr.data-testid]=\"testId() || null\"\n>\n <mat-icon>{{ currentIcon() }}</mat-icon>\n</button>\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 { Pipe, PipeTransform, TemplateRef } from '@angular/core';\n\n@Pipe({ name: 'isTemplateRef' })\nexport class AcpIsTemplateRefPipe implements PipeTransform {\n transform(obj: any) {\n return obj instanceof TemplateRef;\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { Observable, of, isObservable } from 'rxjs';\n\n@Pipe({ name: 'toObservable' })\nexport class AcpToObservablePipe implements PipeTransform {\n transform(value: Observable<any> | unknown): Observable<any> {\n return isObservable(value) ? value : of(value);\n }\n}\n","import { Directive, input, output } from '@angular/core';\n\n@Directive({\n selector: '[acpGridSelectableCell]',\n host: {\n '[class.selected]': 'selected',\n '(click)': 'onClick($event)',\n },\n})\nexport class DataGridSelectableCell {\n ctrlKeyPressed = false;\n shiftKeyPressed = false;\n\n get selected() {\n return this._selected;\n }\n private _selected = false;\n\n cellSelectable = input(true);\n\n cellSelectedChange = output<DataGridSelectableCell>();\n\n onClick(event: MouseEvent) {\n this.ctrlKeyPressed = event.ctrlKey;\n this.shiftKeyPressed = event.shiftKey;\n\n if (this.cellSelectable()) {\n this.select();\n }\n }\n\n select() {\n this._selected = true;\n this.cellSelectedChange.emit(this);\n }\n\n deselect() {\n this._selected = false;\n this.cellSelectedChange.emit(this);\n }\n\n toggle() {\n this._selected = !this._selected;\n this.cellSelectedChange.emit(this);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { DataGridColumn } from '../types';\n\n@Injectable({ providedIn: 'root' })\nexport class DataGridUtils {\n /**\n * Get cell's value based on the data and column's field (e.g. `a.b.c`)\n * @param rowData Row data\n * @param colDef Column definition\n * @returns\n */\n getCellValue(rowData: Record<string, any>, colDef: DataGridColumn): string {\n const keyArr = colDef.field ? colDef.field.split('.') : [];\n let tmp: any = '';\n keyArr.forEach((key: string, i: number) => {\n if (i === 0) {\n tmp = rowData[key];\n } else {\n tmp = tmp && tmp[key];\n }\n });\n return tmp;\n }\n\n /**\n * Get all data of a col\n * @param data All data\n * @param colDef Column definition\n * @returns\n */\n getColData(data: any[], colDef: DataGridColumn): any[] {\n return data.map(rowData => this.getCellValue(rowData, colDef));\n }\n\n /**\n * Whether the value is empty (`null`, `undefined`, `''`, `[]`)\n * @param value\n * @returns\n */\n isEmpty(value: any) {\n return value == null || value.toString() === '';\n }\n\n /**\n * Whether the value contain HTML\n * @param value\n * @returns\n */\n isContainHTML(value: string) {\n return /<\\/?[a-z][\\s\\S]*>/i.test(value);\n }\n}\n","import { Directive, Input, TemplateRef, output } from '@angular/core';\n\n@Directive({\n selector: '[acpDataGridExpansionToggle]',\n host: {\n '[class.expanded]': 'opened',\n '(click)': 'onClick($event)',\n },\n})\nexport class DataGridExpansionToggle {\n private _opened = false;\n private _row: any;\n private _tplRef!: TemplateRef<any>;\n\n @Input()\n get opened() {\n return this._opened;\n }\n set opened(newValue: boolean) {\n this._opened = newValue;\n this.openedChange.emit(newValue);\n }\n openedChange = output<boolean>();\n\n @Input()\n set expandableRow(value: any) {\n if (value !== this._row) {\n this._row = value;\n }\n }\n\n @Input()\n set expansionRowTpl(value: TemplateRef<any>) {\n if (value !== this._tplRef) {\n this._tplRef = value;\n }\n }\n\n toggleChange = output<DataGridExpansionToggle>();\n\n onClick(event: MouseEvent) {\n event.preventDefault();\n event.stopPropagation();\n this.toggle();\n }\n\n toggle() {\n this.opened = !this.opened;\n this.toggleChange.emit(this);\n }\n}\n","import { KeyValueChangeRecord, Pipe, PipeTransform, inject } from '@angular/core';\nimport { isObservable } from 'rxjs';\nimport { DataGridColumn, DataGridColumnButton, DataGridRowClassFormatter } from '../types';\nimport { DataGridUtils } from '../utils/data-grid.util';\n\n@Pipe({ name: 'colClass' })\nexport class DataGridColClassPipe implements PipeTransform {\n transform(\n colDef: DataGridColumn,\n rowData?: Record<string, any>,\n rowChangeRecord?: KeyValueChangeRecord<string, any>,\n currentValue?: any,\n ) {\n if (rowChangeRecord) {\n /* empty */\n }\n if (currentValue) {\n /* empty */\n }\n if (typeof colDef.class === 'string') {\n return colDef.class;\n } else if (typeof colDef.class === 'function') {\n return colDef.class(rowData, colDef);\n }\n return '';\n }\n}\n\n@Pipe({ name: 'rowClass' })\nexport class DataGridRowClassPipe implements PipeTransform {\n transform(\n rowData: Record<string, any>,\n index: number | undefined,\n dataIndex: number,\n rowClassFormatter?: DataGridRowClassFormatter,\n ) {\n const rowIndex = index === undefined ? dataIndex : index;\n const classList: string[] = rowIndex % 2 === 1 ? ['mat-row-odd'] : [];\n if (rowClassFormatter) {\n for (const key of Object.keys(rowClassFormatter)) {\n if (rowClassFormatter[key](rowData, rowIndex)) {\n classList.push(key);\n }\n }\n }\n return classList.join(' ');\n }\n}\n\n@Pipe({ name: 'cellActions' })\nexport class DataGridCellActionsPipe implements PipeTransform {\n transform(\n btns?: DataGridColumnButton[] | ((rowData: any) => DataGridColumnButton[]),\n rowData?: Record<string, any>,\n rowChangeRecord?: KeyValueChangeRecord<string, any>,\n currentValue?: any,\n ) {\n if (rowChangeRecord) {\n /* empty */\n }\n if (currentValue) {\n /* empty */\n }\n if (typeof btns === 'function') {\n return btns(rowData);\n } else if (Array.isArray(btns)) {\n return btns;\n }\n return [];\n }\n}\n\n@Pipe({ name: 'cellActionTooltip' })\nexport class DataGridCellActionTooltipPipe implements PipeTransform {\n transform(btn: DataGridColumnButton) {\n if (typeof btn.tooltip === 'string' || isObservable(btn.tooltip)) {\n return { message: btn.tooltip };\n } else {\n return btn.tooltip || { message: '' };\n }\n }\n}\n\n@Pipe({ name: 'cellActionBadge' })\nexport class DataGridCellActionBadgePipe implements PipeTransform {\n transform(btn: DataGridColumnButton) {\n if (typeof btn.badge === 'number' || typeof btn.badge === 'string' || isObservable(btn.badge)) {\n return { content: btn.badge };\n } else {\n return btn.badge || { content: '' };\n }\n }\n}\n\n@Pipe({ name: 'cellActionDisable' })\nexport class DataGridCellActionDisablePipe implements PipeTransform {\n transform(\n btn: DataGridColumnButton,\n rowData: Record<string, any>,\n rowChangeRecord?: KeyValueChangeRecord<string, any>,\n currentValue?: any,\n ) {\n if (typeof rowChangeRecord === 'object') {\n /* empty */\n }\n if (currentValue) {\n /* empty */\n }\n if (typeof btn.disabled === 'boolean') {\n return btn.disabled;\n } else if (typeof btn.disabled === 'function') {\n return btn.disabled(rowData);\n } else {\n return false;\n }\n }\n}\n\n@Pipe({ name: 'cellSummary' })\nexport class DataGridCellSummaryPipe implements PipeTransform {\n private utils = inject(DataGridUtils);\n\n transform(data: any[], colDef: DataGridColumn) {\n if (typeof colDef.summary === 'string') {\n return colDef.summary;\n } else if (typeof colDef.summary === 'function') {\n return (colDef.summary as (data: any[], colDef?: DataGridColumn) => any)(\n this.utils.getColData(data, colDef),\n colDef,\n );\n }\n }\n}\n","import { NgTemplateOutlet } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n input,\n ViewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { MatIcon } from '@angular/material/icon';\nimport { MatMenu, MatMenuItem, MatMenuTrigger } from '@angular/material/menu';\nimport { DataGridCellActionDisablePipe } from '../../pipes/data-grid.pipe';\nimport { DataGridMenuItem } from '../../types';\n\n@Component({\n selector: 'acp-data-grid-menu',\n exportAs: 'acpDataGridMenu',\n template: `\n <mat-menu class=\"mtx-grid-menu\">\n @for (item of items(); track $index) {\n @if (!item.iif || item.iif(data())) {\n @if (item.children && item.children.length > 0) {\n <button\n mat-menu-item\n [matMenuTriggerFor]=\"gridMenu.menu\"\n [disabled]=\"item | cellActionDisable: data()\"\n [class]=\"item.class\"\n (click)=\"item.click?.(data())\"\n >\n <mat-icon *ngTemplateOutlet=\"iconTpl; context: { $implicit: item }\" />\n <span>{{ item.text }}</span>\n </button>\n\n <acp-data-grid-menu #gridMenu [items]=\"item.children\" [data]=\"data()\" />\n } @else {\n <button\n mat-menu-item\n [disabled]=\"item | cellActionDisable: data()\"\n [class]=\"item.class\"\n (click)=\"item.click?.(data())\"\n >\n <mat-icon *ngTemplateOutlet=\"iconTpl; context: { $implicit: item }\" />\n <span>{{ item.text }}</span>\n </button>\n }\n }\n }\n </mat-menu>\n\n <ng-template #iconTpl let-item>\n @if (item.icon) {\n <mat-icon class=\"mtx-grid-icon\">{{ item.icon }}</mat-icon>\n } @else if (item.fontIcon) {\n <mat-icon class=\"mtx-grid-icon\" [fontIcon]=\"item.fontIcon\" />\n } @else if (item.svgIcon) {\n <mat-icon class=\"mtx-grid-icon\" [svgIcon]=\"item.svgIcon\" />\n }\n </ng-template>\n `,\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n NgTemplateOutlet,\n MatMenu,\n MatMenuItem,\n MatMenuTrigger,\n MatIcon,\n DataGridCellActionDisablePipe,\n ],\n})\nexport class DataGridMenu {\n @ViewChild(MatMenu, { static: true }) menu!: MatMenu;\n\n items = input<DataGridMenuItem[]>([]);\n data = input<Record<string, any>>({});\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n inject,\n input,\n KeyValueChangeRecord,\n KeyValueChanges,\n KeyValueDiffer,\n KeyValueDiffers,\n output,\n OnInit,\n DoCheck,\n} from '@angular/core';\nimport { isObservable } from 'rxjs';\nimport { MatButton, MatIconButton } from '@angular/material/button';\nimport {\n AsyncPipe,\n CurrencyPipe,\n DatePipe,\n DecimalPipe,\n NgTemplateOutlet,\n PercentPipe,\n} from '@angular/common';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { MatBadgeModule } from '@angular/material/badge';\nimport { MatChip, MatChipListbox } from '@angular/material/chips';\nimport { MatIcon } from '@angular/material/icon';\nimport {\n DataGridCellActionBadgePipe,\n DataGridCellActionDisablePipe,\n DataGridCellActionsPipe,\n DataGridCellActionTooltipPipe,\n DataGridCellSummaryPipe,\n} from '../../../pipes/data-grid.pipe';\nimport { AcpToObservablePipe } from '../../../pipes/to-observable.pipe';\nimport { DataGridMenu } from '../data-grid-menu';\nimport { DataGridUtils } from '../../../utils/data-grid.util';\nimport { DataGridColumnButton } from '../../../types';\n\n@Component({\n selector: 'acp-data-grid-cell',\n imports: [\n MatMenuModule,\n DataGridCellSummaryPipe,\n DataGridCellActionsPipe,\n MatIconButton,\n MatTooltipModule,\n MatBadgeModule,\n DataGridCellActionDisablePipe,\n DataGridCellActionTooltipPipe,\n AcpToObservablePipe,\n AsyncPipe,\n DataGridCellActionBadgePipe,\n MatIcon,\n DataGridMenu,\n MatButton,\n NgTemplateOutlet,\n MatChipListbox,\n MatChip,\n DecimalPipe,\n CurrencyPipe,\n PercentPipe,\n DatePipe,\n ],\n templateUrl: './data-grid-cell.html',\n styleUrl: './data-grid-cell.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class DataGridCell implements OnInit, DoCheck {\n private _utils = inject(DataGridUtils);\n private _differs = inject(KeyValueDiffers);\n private _changeDetectorRef = inject(ChangeDetectorRef);\n\n rowData = input<Record<string, any>>({});\n colDef = input<any>();\n\n summary = input(false);\n data = input<any[]>([]);\n\n placeholder = input('--');\n\n rowDataChange = output<KeyValueChangeRecord<string, any>>();\n\n private rowDataDiffer?: KeyValueDiffer<string, any>;\n\n rowChangeRecord?: KeyValueChangeRecord<string, any>;\n\n get _value() {\n return this._utils.getCellValue(this.rowData(), this.colDef());\n }\n\n ngOnInit(): void {\n this.rowDataDiffer = this._differs.find(this.rowData()).create();\n }\n\n ngDoCheck(): void {\n const changes = this.rowDataDiffer?.diff(this.rowData());\n if (changes) {\n this._applyChanges(changes);\n }\n }\n\n private _applyChanges(changes: KeyValueChanges<string, any>) {\n changes.forEachChangedItem(record => {\n this.rowChangeRecord = record;\n this.rowDataChange.emit(record);\n this._changeDetectorRef.markForCheck();\n });\n }\n\n _getText(value: any) {\n return value === undefined ? '' : this._utils.isEmpty(value) ? this.placeholder() : value;\n }\n\n _getTooltip(value: any) {\n return this._utils.isEmpty(value) ? '' : value;\n }\n\n _getFormatterTooltip(value: any) {\n return this._utils.isContainHTML(value) || this._utils.isEmpty(value) ? '' : value;\n }\n\n _onActionClick(event: MouseEvent, btn: DataGridColumnButton, rowData: Record<string, any>) {\n event.preventDefault();\n event.stopPropagation();\n\n if (typeof btn.pop === 'string' || isObservable(btn.pop)) {\n alert('');\n } else if (typeof btn.pop === 'object') {\n alert('objecg');\n } else {\n btn.click?.(rowData);\n }\n }\n}\n","@if (summary()) {\n<span\n [title]=\"_getFormatterTooltip(data() | cellSummary: colDef())\"\n [innerHTML]=\"_getText(data() | cellSummary: colDef())\"\n>\n</span>\n} @else {\n<!-- Custom formatting -->\n@if (colDef().formatter) {\n<span\n [title]=\"_getFormatterTooltip(colDef().formatter(rowData(), colDef()))\"\n [innerHTML]=\"_getText(colDef().formatter(rowData(), colDef()))\"\n>\n</span>\n} @else {\n<!-- Default formatting -->\n@switch (colDef().type) {\n<!-- Buttons -->\n@case ('button') { @for ( btn of colDef().buttons | cellActions: rowData() : rowChangeRecord :\nrowChangeRecord?.currentValue; track btn ) { @if (!btn.iif || btn.iif(rowData())) { @if\n(btn.children && btn.children.length > 0) { @if (btn.type === 'icon') {\n<button\n matIconButton\n [color]=\"btn.color || 'primary'\"\n type=\"button\"\n class=\"acp-grid-action-button\"\n [class]=\"btn.class\"\n [disabled]=\"\n btn\n | cellActionDisable\n : rowData()\n : rowChangeRecord\n : rowChangeRecord?.currentValue\n \"\n [matTooltip]=\"(btn | cellActionTooltip).message | toObservable | async\"\n [matTooltipClass]=\"(btn | cellActionTooltip).class\"\n [matTooltipHideDelay]=\"(btn | cellActionTooltip).hideDelay\"\n [matTooltipShowDelay]=\"(btn | cellActionTooltip).showDelay\"\n [matTooltipPosition]=\"(btn | cellActionTooltip).position || 'below'\"\n [matTooltipPositionAtOrigin]=\"(btn | cellActionTooltip).positionAtOrigin\"\n [matTooltipTouchGestures]=\"(btn | cellActionTooltip).touchGestures || 'auto'\"\n [matTooltipDisabled]=\"(btn | cellActionTooltip).disabled\"\n [matBadge]=\"(btn | cellActionBadge).content | toObservable | async\"\n [matBadgeDescription]=\"(btn | cellActionBadge).description | toObservable | async\"\n [matBadgeColor]=\"(btn | cellActionBadge).color\"\n [matBadgePosition]=\"(btn | cellActionBadge).position || 'above after'\"\n [matBadgeSize]=\"(btn | cellActionBadge).size || 'medium'\"\n [matBadgeOverlap]=\"(btn | cellActionBadge).overlap\"\n [matBadgeDisabled]=\"(btn | cellActionBadge).disabled\"\n [matBadgeHidden]=\"(btn | cellActionBadge).hidden\"\n [matMenuTriggerFor]=\"\n btn.children && btn.children.length > 0 ? gridMenu.menu : null\n \"\n (click)=\"$event.stopPropagation()\"\n>\n <mat-icon *ngTemplateOutlet=\"iconTpl; context: { $implicit: btn }\" />\n</button>\n\n<acp-data-grid-menu #gridMenu [items]=\"btn.children || []\" [data]=\"rowData()\" />\n} @else {\n<button\n [matButton]=\"btn.type || 'text'\"\n [color]=\"btn.color || 'primary'\"\n type=\"button\"\n class=\"acp-grid-action-button\"\n [class]=\"btn.class\"\n [disabled]=\"\n btn\n | cellActionDisable\n : rowData()\n : rowChangeRecord\n : rowChangeRecord?.currentValue\n \"\n [matTooltip]=\"(btn | cellActionTooltip).message | toObservable | async\"\n [matTooltipClass]=\"(btn | cellActionTooltip).class\"\n [matTooltipHideDelay]=\"(btn | cellActionTooltip).hideDelay\"\n [matTooltipShowDelay]=\"(btn | cellActionTooltip).showDelay\"\n [matTooltipPosition]=\"(btn | cellActionTooltip).position || 'below'\"\n [matTooltipPositionAtOrigin]=\"(btn | cellActionTooltip).positionAtOrigin\"\n [matTooltipTouchGestures]=\"(btn | cellActionTooltip).touchGestures || 'auto'\"\n [matTooltipDisabled]=\"(btn | cellActionTooltip).disabled\"\n [matBadge]=\"(btn | cellActionBadge).content | toObservable | async\"\n [matBadgeDescription]=\"(btn | cellActionBadge).description | toObservable | async\"\n [matBadgeColor]=\"(btn | cellActionBadge).color\"\n [matBadgePosition]=\"(btn | cellActionBadge).position || 'above after'\"\n [matBadgeSize]=\"(btn | cellActionBadge).size || 'medium'\"\n [matBadgeOverlap]=\"(btn | cellActionBadge).overlap\"\n [matBadgeDisabled]=\"(btn | cellActionBadge).disabled\"\n [matBadgeHidden]=\"(btn | cellActionBadge).hidden\"\n [matMenuTriggerFor]=\"\n btn.children && btn.children.length > 0 ? gridMenu.menu : null\n \"\n (click)=\"$event.stopPropagation()\"\n>\n <mat-icon *ngTemplateOutlet=\"iconTpl; context: { $implicit: btn }\" />\n <span>{{ btn.text | toObservable | async }}</span>\n</button>\n\n<acp-data-grid-menu #gridMenu [items]=\"btn.children || []\" [data]=\"rowData()\" />\n} } @else { @if (btn.type === 'icon') {\n<button\n matIconButton\n [color]=\"btn.color || 'primary'\"\n type=\"button\"\n class=\"acp-grid-action-button\"\n [class]=\"btn.class\"\n [disabled]=\"\n btn\n | cellActionDisable\n : rowData()\n : rowChangeRecord\n : rowChangeRecord?.currentValue\n \"\n [matTooltip]=\"(btn | cellActionTooltip).message | toObservable | async\"\n [matTooltipClass]=\"(btn | cellActionTooltip).class\"\n [matTooltipHideDelay]=\"(btn | cellActionTooltip).hideDelay\"\n [matTooltipShowDelay]=\"(btn | cellActionTooltip).showDelay\"\n [matTooltipPosition]=\"(btn | cellActionTooltip).position || 'below'\"\n [matTooltipPositionAtOrigin]=\"(btn | cellActionTooltip).positionAtOrigin\"\n [matTooltipTouchGestures]=\"(btn | cellActionTooltip).touchGestures || 'auto'\"\n [matTooltipDisabled]=\"(btn | cellActionTooltip).disabled\"\n [matBadge]=\"(btn | cellActionBadge).content | toObservable | async\"\n [matBadgeDescription]=\"(btn | cellActionBadge).description | toObservable | async\"\n [matBadgeColor]=\"(btn | cellActionBadge).color\"\n [matBadgePosition]=\"(btn | cellActionBadge).position || 'above after'\"\n [matBadgeSize]=\"(btn | cellActionBadge).size || 'medium'\"\n [matBadgeOverlap]=\"(btn | cellActionBadge).overlap\"\n [matBadgeDisabled]=\"(btn | cellActionBadge).disabled\"\n [matBadgeHidden]=\"(btn | cellActionBadge).hidden\"\n (click)=\"_onActionClick($event, btn, rowData())\"\n>\n <mat-icon *ngTemplateOutlet=\"iconTpl; context: { $implicit: btn }\" />\n</button>\n} @else {\n<button\n [matButton]=\"btn.type || 'text'\"\n [color]=\"btn.color || 'primary'\"\n type=\"button\"\n class=\"acp-grid-action-button\"\n [class]=\"btn.class\"\n [disabled]=\"\n btn\n | cellActionDisable\n : rowData()\n : rowChangeRecord\n : rowChangeRecord?.currentValue\n \"\n [matTooltip]=\"(btn | cellActionTooltip).message | toObservable | async\"\n [matTooltipClass]=\"(btn | cellActionTooltip).class\"\n [matTooltipHideDelay]=\"(btn | cellActionTooltip).hideDelay\"\n [matTooltipShowDelay]=\"(btn | cellActionTooltip).showDelay\"\n [matTooltipPosition]=\"(btn | cellActionTooltip).position || 'below'\"\n [matTooltipPositionAtOrigin]=\"(btn | cellActionTooltip).positionAtOrigin\"\n [matTooltipTouchGestures]=\"(btn | cellActionTooltip).touchGestures || 'auto'\"\n [matTooltipDisabled]=\"(btn | cellActionTooltip).disabled\"\n [matBadge]=\"(btn | cellActionBadge).content | toObservable | async\"\n [matBadgeDescription]=\"(btn | cellActionBadge).description | toObservable | async\"\n [matBadgeColor]=\"(btn | cellActionBadge).color\"\n [matBadgePosition]=\"(btn | cellActionBadge).position || 'above after'\"\n [matBadgeSize]=\"(btn | cellActionBadge).size || 'medium'\"\n [matBadgeOverlap]=\"(btn | cellActionBadge).overlap\"\n [matBadgeDisabled]=\"(btn | cellActionBadge).disabled\"\n [matBadgeHidden]=\"(btn | cellActionBadge).hidden\"\n (click)=\"_onActionClick($event, btn, rowData())\"\n>\n <mat-icon *ngTemplateOutlet=\"iconTpl; context: { $implicit: btn }\" />\n <span>{{ btn.text | toObservable | async }}</span>\n</button>\n} } } } }\n<!-- Tag -->\n@case ('tag') { @if (colDef().tag && colDef().tag[_value]) {\n<mat-chip-listbox>\n <mat-chip color=\"primary\" [class]=\"'bg-' + colDef().tag[_value].color\">\n {{ colDef().tag[_value].text }}\n </mat-chip>\n</mat-chip-listbox>\n} @else { {{ _value }} } }\n<!-- Link -->\n@case ('link') {\n<a [href]=\"_value\" target=\"_blank\">{{ _value }}</a>\n}\n<!-- Image -->\n@case ('image') { @if (_value) {\n<!-- Imagen real -->\n<img class=\"placeholder-image\" [src]=\"_value\" alt=\"img\" />\n} @else {\n<!-- Placeholder -->\n<div class=\"placeholder-box\">\n <svg class=\"placeholder-icon\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n stroke-width=\"2\"\n d=\"M4 16l4.586-4.586a2 2 0 012.828 0L15 14m-12 5h16a1 1 0 001-1V5a1 1 0 00-1-1H3a1 1 0 00-1 1v14a1 1 0 001 1z\"\n />\n </svg>\n</div>\n} }\n<!-- Boolean -->\n@case ('boolean') {\n<span [title]=\"_getTooltip(_value)\">{{ _getText(_value) }}</span>\n}\n<!-- Number -->\n@case ('number') {\n<span\n [title]=\"\n _getTooltip(\n _value | number: colDef().typeParameter?.digitsInfo : colDef().typeParameter?.locale\n )\n \"\n>\n {{ _getText( _value | number: colDef().typeParameter?.digitsInfo : colDef().typeParameter?.locale\n ) }}\n</span>\n}\n<!-- Currency -->\n@case ('currency') {\n<span\n [title]=\"\n _getTooltip(\n _value\n | currency\n : colDef().typeParameter?.currencyCode\n : colDef().typeParameter?.display\n : colDef().typeParameter?.digitsInfo\n : colDef().typeParameter?.locale\n )\n \"\n>\n {{ _getText( _value | currency : colDef().typeParameter?.currencyCode :\n colDef().typeParameter?.display : colDef().typeParameter?.digitsInfo :\n colDef().typeParameter?.locale ) }}\n</span>\n}\n<!-- Percent -->\n@case ('percent') {\n<span\n [title]=\"\n _getTooltip(\n _value | percent: colDef().typeParameter?.digitsInfo : colDef().typeParameter?.locale\n )\n \"\n>\n {{ _getText( _value | percent: colDef().typeParameter?.digitsInfo : colDef().typeParameter?.locale\n ) }}\n</span>\n}\n<!-- Date -->\n@case ('date') {\n<span\n [title]=\"\n _getTooltip(\n _value\n | date\n : colDef().typeParameter?.format\n : colDef().typeParameter?.timezone\n : colDef().typeParameter?.locale\n )\n \"\n>\n {{ _getText( _value | date : colDef().typeParameter?.format : colDef().typeParameter?.timezone :\n colDef().typeParameter?.locale ) }}\n</span>\n}\n<!-- Default -->\n@default {\n<span [title]=\"_getTooltip(_value)\">{{ _getText(_value) }}</span>\n} } } }\n\n<ng-template #iconTpl let-btn>\n @if (btn.icon) {\n <mat-icon class=\"acp-grid-icon\">{{ btn.icon }}</mat-icon>\n } @else if (btn.fontIcon) {\n <mat-icon class=\"acp-grid-icon\" [fontIcon]=\"btn.fontIcon\" />\n } @else if (btn.svgIcon) {\n <mat-icon class=\"acp-grid-icon\" [svgIcon]=\"btn.svgIcon\" />\n }\n</ng-template>\n","import { Injectable, ElementRef, signal, computed } from '@angular/core';\nimport { Subject, fromEvent } from 'rxjs';\nimport { filter, takeUntil } from 'rxjs/operators';\n\n/**\n * Interfaz que define un elemento que puede recibir el foco y participar en la navegación por teclado.\n */\nexport interface FocusableElement {\n /** El ElementRef del elemento DOM */\n element: ElementRef;\n /** Un nombre único para identificar el elemento en el sistema de navegación */\n name: string;\n /** Callback opcional que se ejecuta cuando se presiona la flecha arriba y no hay más elementos arriba */\n onArrowUp?: () => void;\n /** Callback opcional que se ejecuta cuando se presiona la flecha abajo y no hay más elementos abajo */\n onArrowDown?: () => void;\n /** Callback opcional que se ejecuta cuando se presiona la flecha izquierda */\n onArrowLeft?: () => void;\n /** Callback opcional que se ejecuta cuando se presiona la flecha derecha */\n onArrowRight?: () => void;\n /** Callback opcional que se ejecuta cuando el elemento recibe el foco */\n onFocus?: (index?: number) => void;\n /** Callback opcional que se ejecuta cuando el índice enfocado dentro del elemento cambia (ej: una fila en una tabla) */\n onFocusedChange?: (index: number) => void;\n}\n\n/**\n * Servicio que gestiona la navegación por teclado entre componentes registrados.\n * Permite mover el foco entre elementos usando las teclas de flecha y centraliza el estado del foco.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class KeyboardNavigationService {\n /** Array privado que contiene todos los elementos registrados para la navegación */\n private focusableElements: FocusableElement[] = [];\n\n /** Signal que mantiene el índice del elemento actualmente enfocado en el array `focusableElements` */\n private currentFocusIndex = signal(-1);\n\n /** Subject para notificar la destrucción del servicio y limpiar suscripciones */\n private destroy$ = new Subject<void>();\n\n // --- Signals Públicos para Exponer el Estado ---\n\n /**\n * Signal público que expone el índice de la fila enfocada (usado por componentes como DataGrid).\n * Es un signal escribible porque el componente hijo (DataGrid) es quien actualiza su valor.\n */\n public focusedRowIndex = signal(-1);\n\n /**\n * Signal público que expone el nombre del elemento actualmente enfocado.\n * Es un signal `computed` que se deriva automáticamente del `currentFocusIndex` privado.\n */\n public focusedElementName = computed(() => {\n const index = this.currentFocusIndex();\n if (index >= 0 && index < this.focusableElements.length) {\n return this.focusableElements[index].name;\n }\n return '';\n });\n\n /**\n * Registra un nuevo elemento en el sistema de navegación por teclado.\n * @param element El objeto FocusableElement a registrar.\n */\n registerElement(element: FocusableElement) {\n if (!element || !element.element) {\n console.error(\n 'KeyboardNavigationService: No se puede registrar el elemento. El ElementRef es undefined o nulo. ' +\n 'Asegúrate de que el @ViewChild esté correctamente configurado y que el elemento exista en el DOM cuando ngAfterViewInit se ejecute.',\n element,\n );\n return; // Salimos del método para evitar el crash\n }\n this.focusableElements.push(element);\n\n // Configurar eventos de teclado para este elemento\n fromEvent<KeyboardEvent>(element.element.nativeElement, 'keydown')\n .pipe(\n takeUntil(this.destroy$),\n filter(event => ['ArrowUp', 'ArrowDown', 'ArrowLeft', 'ArrowRight'].includes(event.key)),\n )\n .subscribe(event => {\n event.preventDefault(); // Prevenir el comportamiento por defecto del navegador (scroll, etc.)\n this.handleKeyNavigation(event.key);\n });\n\n // Configurar eventos de foco para este elemento\n fromEvent<FocusEvent>(element.element.nativeElement, 'focus')\n .pipe(takeUntil(this.destroy$))\n .subscribe(() => {\n const index = this.focusableElements.findIndex(e => e.element === element.element);\n this.currentFocusIndex.set(index);\n\n // Ejecutar el callback onFocus si está definido\n if (element.onFocus) {\n element.onFocus(index);\n }\n });\n }\n\n /**\n * Elimina un elemento del sistema de navegación por teclado.\n * @param element El ElementRef del elemento a desregistrar.\n */\n unregisterElement(element: ElementRef) {\n const index = this.focusableElements.findIndex(e => e.element === element);\n if (index !== -1) {\n this.focusableElements.splice(index, 1);\n\n // Si el elemento eliminado estaba enfocado, resetear el estado del foco\n if (this.currentFocusIndex() === index) {\n this.currentFocusIndex.set(-1);\n }\n }\n }\n\n /**\n * Mueve el foco a un elemento específico por su nombre.\n * @param name El nombre único del elemento al que se quiere mover el foco.\n * @param index Opcional: el índice interno a enfocar (ej: el índice de una fila en una tabla).\n */\n focusElement(name: string, index?: number) {\n const elementIndex = this.focusableElements.findIndex(e => e.name === name);\n if (elementIndex !== -1) {\n this.currentFocusIndex.set(elementIndex);\n\n // Forzar el foco en el elemento del DOM\n this.focusableElements[elementIndex].element.nativeElement.focus();\n\n // Si el elemento tiene un callback de cambio de foco, llamarlo\n if (this.focusableElements[elementIndex].onFocusedChange && index !== undefined) {\n this.focusableElements[elementIndex].onFocusedChange(index);\n }\n }\n }\n\n /**\n * Actualiza el índice enfocado (usado por componentes internos como una tabla).\n * @param index El nuevo índice enfocado.\n */\n updateFocusedIndex(index: number) {\n this.focusedRowIndex.set(index);\n\n // Obtener el elemento actualmente enfocado y llamar a su callback\n const currentElement = this.focusableElements[this.currentFocusIndex()];\n if (currentElement?.onFocusedChange) {\n currentElement.onFocusedChange(index);\n }\n }\n\n /**\n * Maneja la lógica de navegación basada en la tecla presionada.\n * @param key La tecla presionada ('ArrowUp', 'ArrowDown', etc.).\n */\n private handleKeyNavigation(key: string) {\n if (this.currentFocusIndex() === -1) return;\n\n const currentElement = this.focusableElements[this.currentFocusIndex()];\n\n switch (key) {\n case 'ArrowUp':\n if (this.currentFocusIndex() > 0) {\n // Moverse al elemento anterior en la lista\n this.currentFocusIndex.set(this.currentFocusIndex() - 1);\n this.focusableElements[this.currentFocusIndex()].element.nativeElement.focus();\n } else if (currentElement.onArrowUp) {\n // Si no hay más elementos arriba, ejecutar el callback personalizado\n currentElement.onArrowUp();\n }\n break;\n\n case 'ArrowDown':\n if (this.currentFocusIndex() < this.focusableElements.length - 1) {\n // Moverse al siguiente elemento en la lista\n this.currentFocusIndex.set(this.currentFocusIndex() + 1);\n this.focusableElements[this.currentFocusIndex()].element.nativeElement.focus();\n } else if (currentElement.onArrowDown) {\n // Si no hay más elementos abajo, ejecutar el callback personalizado\n currentElement.onArrowDown();\n }\n break;\n\n case 'ArrowLeft':\n if (currentElement.onArrowLeft) {\n currentElement.onArrowLeft();\n }\n break;\n\n case 'ArrowRight':\n if (currentElement.onArrowRight) {\n currentElement.onArrowRight();\n }\n break;\n }\n }\n\n /**\n * Resetea el índice de la fila enfocada a -1.\n * Útil cuando los datos de un componente cambian y el foco anterior ya no es válido.\n */\n resetFocusedRowIndex() {\n this.focusedRowIndex.set(-1);\n }\n /**\n * Método de limpieza para ser llamado cuando el servicio se destruye.\n * Cierra el Subject `destroy$` para completar todas las suscripciones activas.\n */\n onDestroy() {\n this.destroy$.next();\n this.destroy$.complete();\n }\n}\n","import {\n Component,\n input,\n output,\n effect,\n computed,\n signal,\n TemplateRef,\n InjectionToken,\n inject,\n booleanAttribute,\n TrackByFunction,\n ViewChild,\n ContentChildren,\n QueryList,\n ElementRef,\n SimpleChanges,\n ChangeDetectionStrategy,\n KeyValueChangeRecord,\n ANIMATION_MODULE_TYPE,\n ViewEncapsulation,\n AfterViewInit,\n OnDestroy,\n HostListener,\n OnChanges,\n viewChild,\n} from '@angular/core';\nimport { AsyncPipe, NgTemplateOutlet } from '@angular/common';\nimport { fromEvent, Subject, takeUntil, debounceTime, filter } from 'rxjs';\n\n// Material Imports\nimport {\n MatCell,\n MatCellDef,\n MatColumnDef,\n MatFooterCell,\n MatFooterCellDef,\n MatFooterRow,\n MatFooterRowDef,\n MatHeaderCell,\n MatHeaderCellDef,\n MatHeaderRow,\n MatHeaderRowDef,\n MatRow,\n MatRowDef,\n MatTable,\n MatTableDataSource,\n} from '@angular/material/table';\nimport { MatPaginator, PageEvent } from '@angular/material/paginator';\nimport { MatSort, MatSortHeader, Sort, SortDirection } from '@angular/material/sort';\nimport { MatCheckbox } from '@angular/material/checkbox';\nimport { MatIconButton } from '@angular/material/button';\nimport { MatProgressBar } from '@angular/material/progress-bar';\nimport { SelectionModel } from '@angular/cdk/collections';\n\n// Shared Imports\n\nimport { AcpIsTemplateRefPipe } from '../../pipes/is-template-ref.pipe';\nimport { AcpToObservablePipe } from '../../pipes/to-observable.pipe';\nimport { DataGridSelectableCell } from '../../directives/selectable-cell';\nimport { DataGridUtils } from '../../utils/data-grid.util';\nimport { DataGridExpansionToggle } from '../../directives/data-grid-expansion-toggle';\nimport { DataGridCell } from './data-grid-cell/data-grid-cell';\nimport {\n DataGridCellTemplate,\n DataGridColumn,\n DataGridDefaultOptions,\n DataGridRowClassFormatter,\n DataGridRowSelectionFormatter,\n} from '../../types';\nimport { DataGridColClassPipe, DataGridRowClassPipe } from '../../pipes/data-grid.pipe';\nimport { KeyboardNavigationService } from './keyboard-navigation';\n\nexport const DATA_GRID_DEFAULT_OPTIONS = new InjectionToken<DataGridDefaultOptions>(\n 'data-grid-default-options',\n);\n\n@Component({\n selector: 'acp-data-grid',\n exportAs: 'dataGrid',\n imports: [\n AsyncPipe,\n NgTemplateOutlet,\n MatProgressBar,\n MatIconButton,\n MatCheckbox,\n MatTable,\n MatColumnDef,\n MatHeaderRowDef,\n MatHeaderRow,\n MatRowDef,\n MatRow,\n MatFooterRowDef,\n MatFooterRow,\n MatHeaderCellDef,\n MatHeaderCell,\n MatCellDef,\n MatCell,\n MatFooterCellDef,\n MatFooterCell,\n MatSort,\n MatSortHeader,\n MatPaginator,\n DataGridColClassPipe,\n AcpIsTemplateRefPipe,\n AcpToObservablePipe,\n DataGridSelectableCell,\n DataGridExpansionToggle,\n DataGridCell,\n DataGridRowClassPipe,\n ],\n templateUrl: './data-grid.html',\n styleUrl: './data-grid.scss',\n host: {\n class: 'data-grid',\n '[class.data-grid-animations-enabled]': '!_animationsDisabled',\n '[class.data-grid-size-small]': 'size() === \"small\"',\n '[class.data-grid-size-medium]': 'size() === \"medium\"',\n '[class.data-grid-size-normal]': 'size() === \"normal\"',\n '[attr.tabindex]': '0',\n // '(keydown)': 'handleKeyDown($event)'\n },\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class DataGrid<T = any> implements AfterViewInit, OnDestroy, OnChanges {\n protected _animationsDisabled =\n inject(ANIMATION_MODULE_TYPE, { optional: true }) === 'NoopAnimations';\n private _utils = inject(DataGridUtils);\n private _defaultOptions = inject<DataGridDefaultOptions>(DATA_GRID_DEFAULT_OPTIONS, {\n optional: true,\n });\n private _keyboardNavService = inject(KeyboardNavigationService);\n private _destroy$ = new Subject<void>();\n\n // ViewChild & ContentChildren\n paginator = viewChild(MatPaginator);\n @ViewChild(MatTable) table!: MatTable<any>;\n @ViewChild(MatPaginator) paginator1!: MatPaginator;\n @ViewChild(MatSort) sort!: MatSort;\n @ViewChild('tableContainer') tableContainer!: ElementRef<HTMLDivElement>;\n @ContentChildren(MatRowDef) rowDefs!: QueryList<MatRowDef<any>>;\n @ContentChildren(MatHeaderRowDef) headerRowDefs!: QueryList<MatHeaderRowDef>;\n @ContentChildren(MatFooterRow) footerRowDefs!: QueryList<MatFooterRowDef>;\n\n // Toolbar\n showToolbar = input(this._defaultOptions?.showToolbar ?? false, { transform: booleanAttribute });\n showColumnMenuButton = input(this._defaultOptions?.showColumnMenuButton ?? true, {\n transform: booleanAttribute,\n });\n toolbarTitle = input(this._defaultOptions?.toolbarTitle ?? '');\n toolbarTemplate = input<TemplateRef<any>>();\n\n // Data Configuration\n data = input<T[]>([]);\n columns = input<DataGridColumn<T>[]>([]);\n length = input<number>(0);\n loading = input<boolean>(false);\n emptyValuePlaceholder = input<string>('-');\n trackBy = input<TrackByFunction<any>>();\n\n // Templates\n cellTemplate = input<Record<string, TemplateRef<any>>>({});\n headerTemplate = input<TemplateRef<any> | DataGridCellTemplate>();\n headerExtraTemplate = input<TemplateRef<any> | DataGridCellTemplate>();\n noResultTemplate = input<TemplateRef<any>>();\n paginationTemplate = input<TemplateRef<any>>();\n summaryTemplate = input<TemplateRef<any> | DataGridCellTemplate>();\n\n size = input<'small' | 'medium' | 'normal'>('normal');\n headerCellTemplate = input<TemplateRef<any> | DataGridCellTemplate>();\n\n // Expansion\n expandable = input<boolean>(false);\n expansionTemplate = input<TemplateRef<any> | null>(null);\n closeOthersOnExpand = input(false);\n\n // Pagination\n pageOnFront = input<boolean>(true);\n showPaginator = input<boolean>(true);\n pageDisabled = input<boolean>(false);\n showFirstLastButtons = input<boolean>(true);\n pageIndex = input<number>(0);\n pageSize = input<number>(10);\n pageSizeOptions = input<number[]>([5, 10, 20, 50]);\n hidePageSize = input<boolean>(false);\n\n // Infinite Scroll\n infiniteScroll = input<boolean>(false);\n infiniteScrollThreshold = input<number>(0.8);\n infiniteScrollDisabled = input<boolean>(false);\n\n // Keyboard Navigation\n keyboardNavigation = input<boolean>(false);\n\n focusedRowIndex = computed(() => this._keyboardNavService.focusedRowIndex()); // Vinculado al servicio\n\n // Row Highlighting\n highlightedRowIndex = input<number>(-1);\n\n // Sorting\n sortOnFront = input<boolean>(true);\n sortActive = input<string>('');\n sortDirection = input<SortDirection>('');\n sortDisableClear = input<boolean>(false);\n sortDisabled = input<boolean>(false);\n sortStart = input<'asc' | 'desc'>('asc');\n\n // Row Behavior\n rowHover = input<boolean>(true);\n rowStriped = input<boolean>(false);\n rowSelectable = input<boolean>(false);\n multiSelectable = input<boolean>(true);\n multiSelectionWithClick = input<boolean>(false);\n hideRowSelectionCheckbox = input<boolean>(false);\n disableRowClickSelection = input<boolean>(false);\n rowClassFormatter = input<DataGridRowClassFormatter>();\n rowSelected = input<T[]>([]);\n rowSelectionFormatter = input<DataGridRowSelectionFormatter>({});\n\n // Cell Selection\n cellSelectable = input<boolean>(false);\n\n // Row Templates\n useContentRowTemplate = input(false, { transform: booleanAttribute });\n useContentHeaderRowTemplate = input(false, { transform: booleanAttribute });\n useContentFooterRowTemplate = input(false, { transform: booleanAttribute });\n\n // Summary\n showSummary = input(false, { transform: booleanAttribute });\n\n // No Result\n noResultText = input(this._defaultOptions?.noResultText ?? 'No se encontraron registros');\n\n // Outputs\n page = output<PageEvent>();\n sortChange = output<Sort>();\n rowClick = output<any>();\n rowSelectedChange = output<any[]>();\n selectionChange = output<T[]>();\n cellClick = output<{ row: T; column: DataGridColumn<T> }>();\n cellSelectedChange = output<any[]>();\n expansionChange = output<any>();\n rowContextMenu = output<any>();\n infiniteScrollLoad = output<void>();\n focusedRowChange = output<{ row: T; index: number }>();\n\n // Internal State\n dataSource = new MatTableDataSource<any>();\n private _selectedCell?: DataGridSelectableCell;\n cellSelection: any[] = [];\n rowChangeRecord?: KeyValueChangeRecord<string, any>;\n rowSelection: SelectionModel<any> = new SelectionModel<any>(true, []);\n expansionRowStates = signal<any[]>([]);\n\n // Signals\n selection = signal<SelectionModel<T>>(new SelectionModel<T>(true, []));\n currentSort = signal<Sort>({ active: '', direction: '' });\n isLoadingMore = signal<boolean>(false);\n\n // Computed Properties\n displayedColumns = computed(() => {\n const cols = this.columns()\n .filter(item => !this.isColumnHide(item))\n .map(item => item.field);\n if (this.rowSelectable() && !this.hideRowSelectionCheckbox()) {\n cols.unshift('DataGridCheckboxColumnDef');\n }\n return cols;\n });\n\n hasNoResult = computed(() => {\n return this.data().length === 0 && !this.loading();\n });\n whetherShowSummary = computed(() => this.showSummary());\n\n constructor() {\n // Effects\n effect(() => this.selection.set(new SelectionModel<T>(this.multiSelectable(), [])));\n effect(() => {\n const selected = this.rowSelected();\n if (selected?.length > 0) {\n const selectionModel = this.selection();\n selectionModel.clear();\n selected.forEach(row => selectionModel.select(row));\n }\n });\n effect(() => {\n const selected = this.selection().selected;\n this.selectionChange.emit(selected);\n this.rowSelectedChange.emit(selected);\n });\n effect(() => {\n this.updateDisplayedColumns();\n this.countPinnedPosition();\n });\n effect(() => {\n if (this.rowSelectable()) {\n this.rowSelection = new SelectionModel<any>(this.multiSelectable(), this.rowSelected());\n }\n });\n effect(() => {\n if (this.data()) {\n // Usamos el método público del servicio en lugar de modificar su signal directamente\n this._keyboardNavService.resetFocusedRowIndex();\n }\n });\n }\n\n ngAfterViewInit() {\n if (this.pageOnFront()) {\n this.dataSource.paginator = this.paginator();\n }\n if (this.sortOnFront()) {\n this.dataSource.sort = this.sort;\n }\n\n if (this.rowDefs?.length > 0 && this.useContentRowTemplate()) {\n this.rowDefs.forEach(rowDef => this.table.addRowDef(rowDef));\n }\n if (this.headerRowDefs?.length > 0 && this.useContentHeaderRowTemplate()) {\n this.headerRowDefs.forEach(headerRowDef => this.table.addHeaderRowDef(headerRowDef));\n }\n if (this.footerRowDefs?.length > 0 && this.useContentFooterRowTemplate()) {\n this.footerRowDefs.forEach(footerRowDef => this.table.addFooterRowDef(footerRowDef));\n }\n\n if (this.keyboardNavigation()) {\n this._keyboardNavService.registerElement({\n element: this.tableContainer,\n name: 'dataGrid',\n onFocus: index => {\n // Cuando el DataGrid recibe el foco, enfocar la primera fila\n this.focusRow(index ?? 0);\n },\n onFocusedChange: index => {\n // Cuando el índice cambia externamente, actualizar la fila enfocada\n this.focusRow(index);\n },\n });\n }\n\n if (this.infiniteScroll()) {\n this.setupInfiniteScroll();\n }\n }\n\n ngOnDestroy() {\n this._destroy$.next();\n this._destroy$.complete();\n if (this.keyboardNavigation()) {\n this._keyboardNavService.unregisterElement(this.tableContainer);\n }\n }\n\n // Infinite Scroll\n private setupInfiniteScroll() {\n if (!this.tableContainer) return;\n fromEvent(this.tableContainer.nativeElement, 'scroll')\n .pipe(\n takeUntil(this._destroy$),\n debounceTime(200),\n filter(() => !this.infiniteScrollDisabled() && !this.loading() && !this.isLoadingMore()),\n )\n .subscribe(() => {\n const element = this.tableContainer.nativeElement;\n const threshold = this.infiniteScrollThreshold();\n const scrollPosition = element.scrollTop + element.clientHeight;\n const scrollHeight = element.scrollHeight;\n if (scrollPosition / scrollHeight >= threshold) {\n this.loadMoreData();\n }\n });\n }\n\n private loadMoreData() {\n if (this.isLoadingMore()) return;\n this.isLoadingMore.set(true);\n this.infiniteScrollLoad.emit();\n setTimeout(() => this.isLoadingMore.set(false), 1000); // Prevent rapid-fire calls\n }\n\n @HostListener('document:keydown', ['$event'])\n handleKeyDown(event: KeyboardEvent) {\n if (!['ArrowDown', 'ArrowUp', 'Home', 'End', 'Enter', ' '].includes(event.key)) return;\n if (!this.keyboardNavigation() || this.hasNoResult()) return;\n\n const dataLength = this.dataSource.data.length;\n const currentFocusIndex = this._keyboardNavService.focusedRowIndex();\n let newFocusIndex = currentFocusIndex;\n let preventDefault = true;\n\n switch (event.key) {\n case 'ArrowDown':\n newFocusIndex = Math.min(currentFocusIndex + 1, dataLength - 1);\n break;\n\n case 'ArrowUp':\n if (currentFocusIndex === 0) {\n // Si estamos en la primera fila, mover el foco al elemento anterior\n event.preventDefault();\n this._keyboardNavService.focusElement('searchInput');\n return;\n }\n newFocusIndex = Math.max(currentFocusIndex - 1, 0);\n break;\n\n case 'Home':\n newFocusIndex = 0;\n break;\n\n case 'End':\n newFocusIndex = dataLength - 1;\n break;\n\n case 'Enter':\n if (currentFocusIndex >= 0 && currentFocusIndex < dataLength) {\n event.preventDefault();\n const row = this.dataSource.data[currentFocusIndex];\n this.handleRowAction(row, currentFocusIndex);\n }\n break;\n\n case ' ':\n if (currentFocusIndex >= 0 && currentFocusIndex < dataLength) {\n event.preventDefault();\n const row = this.dataSource.data[currentFocusIndex];\n this.toggleRowSelection(row);\n }\n break;\n\n default:\n preventDefault = false;\n break;\n }\n\n if (preventDefault && newFocusIndex !== currentFocusIndex) {\n event.preventDefault();\n this._keyboardNavService.updateFocusedIndex(newFocusIndex);\n }\n }\n\n focusRow(index: number) {\n if (index < 0 || index >= this.dataSource.data.length) return;\n const row = this.dataSource.data[index];\n this.focusedRowChange.emit({ row, index });\n this.scrollRowIntoView(index);\n }\n\n private scrollRowIntoView(index: number) {\n if (!this.tableContainer) return;\n const rowElements = this.tableContainer.nativeElement.querySelectorAll('tr.mat-row');\n if (rowElements.length > index) {\n const rowElement = rowElements[index] as HTMLElement;\n const containerElement = this.tableContainer.nativeElement;\n const containerRect = containerElement.getBoundingClientRect();\n const rowRect = rowElement.getBoundingClientRect();\n\n if (rowRect.bottom > containerRect.bottom) {\n rowElement.scrollIntoView({ behavior: 'smooth', block: 'end' });\n } else if (rowRect.top < containerRect.top) {\n rowElement.scrollIntoView({ behavior: 'smooth', block: 'start' });\n }\n }\n }\n\n private handleRowAction(row: T, index: number) {\n if (this.expandable()) {\n this.toggleRowExpansion(row, index);\n } else if (this.rowSelectable()) {\n this.toggleRowSelection(row);\n } else {\n this.rowClick.emit({ event: new MouseEvent('click'), rowData: row, index });\n }\n }\n\n private toggleRowExpansion(row: T, index: number) {\n const currentStates = structuredClone(this.expansionRowStates());\n if (currentStates[index]) {\n currentStates[index].expanded = !currentStates[index].expanded;\n this.expansionRowStates.set(currentStates);\n this.expansionChange.emit({\n expanded: currentStates[index].expanded,\n data: row,\n index,\n column: null,\n });\n }\n }\n\n private toggleRowSelection(row: T) {\n if (this.multiSelectable()) {\n this.rowSelection.toggle(row);\n } else {\n this.rowSelection.clear();\n this.rowSelection.select(row);\n }\n this.rowSelectedChange.emit(this.rowSelection.selected);\n }\n\n // Event Handlers\n onSortChange(sort: Sort) {\n this.currentSort.set(sort);\n this.sortChange.emit(sort);\n }\n\n onPage(event: PageEvent): void {\n if (this.pageOnFront()) this.scrollTop(0);\n this.page.emit(event);\n }\n\n onExpansionChange(\n expansionRef: DataGridExpansionToggle,\n rowData: Record<string, any>,\n column: DataGridColumn,\n index: number,\n ) {\n const currentStates = structuredClone(this.expansionRowStates());\n\n if (this.closeOthersOnExpand()) {\n currentStates.forEach(item => (item.expanded = false));\n }\n if (currentStates[index]) {\n currentStates[index].expanded = expansionRef.opened;\n this.expansionRowStates.set(currentStates);\n }\n this.expansionChange.emit({ expanded: expansionRef.opened, data: rowData, index, column });\n }\n\n // Selection Methods\n isAllSelected(): boolean {\n const numSelected = this.rowSelection.selected.length;\n const numRows = this.dataSource.data.filter(\n (row, index) => !this.rowSelectionFormatter().disabled?.(row, index),\n ).length;\n return numSelected === numRows && numRows > 0;\n }\n\n toggleAllRows(): void {\n if (this.isAllSelected()) {\n this.rowSelection.clear();\n } else {\n this.dataSource.data.forEach((row, index) => {\n if (!this.rowSelectionFormatter().disabled?.(row, index)) this.rowSelection.select(row);\n });\n }\n this.rowSelectedChange.emit(this.rowSelection.selected);\n }\n\n toggleNormalCheckbox(row: Record<string, any>) {\n this.rowSelection.toggle(row);\n this.rowSelectedChange.emit(this.rowSelection.selected);\n }\n\n isRowDisabled(row: T, index?: number): boolean {\n return this.rowSelectionFormatter()?.disabled?.(row, index ?? 0) ?? false;\n }\n\n shouldHideCheckbox(row: T, index?: number): boolean {\n if (this.hideRowSelectionCheckbox()) return true;\n return this.rowSelectionFormatter()?.hideCheckbox?.(row, index ?? 0) ?? false;\n }\n\n // Row Selection\n selectRow(event: MouseEvent, rowData: Record<string, any>, index: number) {\n if (\n this.rowSelectable() &&\n !this.rowSelectionFormatter().disabled?.(rowData, index) &&\n !this.rowSelectionFormatter().hideCheckbox?.(rowData, index) &&\n !this.disableRowClickSelection()\n ) {\n if (!this.multiSelectionWithClick && !event.ctrlKey && !event.metaKey) {\n this.rowSelection.clear();\n }\n this.toggleNormalCheckbox(rowData);\n }\n if (this.keyboardNavigation()) {\n this._keyboardNavService.updateFocusedIndex(index);\n }\n this.rowClick.emit({ event, rowData, index });\n }\n\n // Cell Selection\n selectCell(\n cellRef: DataGridSelectableCell,\n rowData: Record<string, any>,\n colDef: DataGridColumn,\n ): void {\n if (this._selectedCell !== cellRef) {\n const colValue = this._utils.getCellValue(rowData, colDef);\n this.cellSelection = [{ cellData: colValue, rowData, colDef }];\n this.cellSelectedChange.emit(this.cellSelection);\n this._selectedCell?.deselect();\n }\n this._selectedCell = cellRef.selected ? cellRef : undefined;\n }\n\n // Data Change Methods\n onRowDataChange(record: KeyValueChangeRecord<string, any>) {\n this.rowChangeRecord = record;\n }\n\n // Lifecycle Hooks\n ngOnChanges(changes: SimpleChanges) {\n this.updateDisplayedColumns();\n this.countPinnedPosition();\n\n if (changes['data']) {\n this.dataSource = new MatTableDataSource(this.data());\n this.updateExpansionRowStates();\n this.scrollTop(0);\n }\n\n if (changes['rowSelectable'] && this.rowSelectable()) {\n this.rowSelection = new SelectionModel<any>(this.multiSelectable(), this.rowSelected());\n }\n\n // this.dataSource.paginator = this.pageOnFront() ? this.paginator() : null;\n this.dataSource.sort = this.sortOnFront() ? this.sort : null;\n\n if (changes['infiniteScroll'] && this.infiniteScroll()) {\n this.setupInfiniteScroll();\n }\n }\n\n // Private Helper Methods\n private updateDisplayedColumns() {\n if (this.showColumnMenuButton()) {\n this.columns().forEach(item => {\n item.hide = this.isColumnHide(item);\n item.show = !item.hide;\n });\n }\n }\n\n private updateExpansionRowStates() {\n if (this.expandable()) {\n const newStates: any[] = [];\n this.data()?.forEach(_ => newStates.push({ expanded: false }));\n this.expansionRowStates.set(newStates);\n }\n }\n\n private countPinnedPosition() {\n const count = (acc: number, cur: DataGridColumn) => acc + parseFloat(cur.width ?? '80px');\n const pinnedLeftCols = this.columns().filter(col => col.pinned === 'left');\n pinnedLeftCols.forEach((item, idx) => {\n item.left = pinnedLeftCols.slice(0, idx).reduce(count, 0) + 'px';\n });\n const pinnedRightCols = this.columns()\n .filter(col => col.pinned === 'right')\n .reverse();\n pinnedRightCols.forEach((item, idx) => {\n item.right = pinnedRightCols.slice(0, idx).reduce(count, 0) + 'px';\n });\n }\n\n // Scroll Methods\n scrollTop(value?: number): number | void {\n if (value == null) return this.tableContainer?.nativeElement.scrollTop;\n if (this.tableContainer && !this.loading()) {\n this.tableContainer.nativeElement.scrollTop = value;\n }\n }\n\n scrollLeft(value?: number): number | void {\n if (value == null) return this.tableContainer?.nativeElement.scrollLeft;\n if (this.tableContainer && !this.loading()) {\n this.tableContainer.nativeElement.scrollLeft = value;\n }\n }\n\n // Context Menu\n contextmenu(event: MouseEvent, rowData: Record<string, any>, index: number) {\n this.rowContextMenu.emit({ event, rowData, index });\n }\n\n // Utility Methods\n getColData(data: any[], colDef: DataGridColumn) {\n return this._utils.getColData(data, colDef);\n }\n\n isColumnHide(item: DataGridColumn) {\n return item.hide !== undefined ? item.hide : item.show !== undefined ? !item.show : false;\n }\n\n getIndex(index: number | undefined, dataIndex: number) {\n return index === undefined ? dataIndex : index;\n }\n}\n","<!-- src/app/shared/components/data-grid/data-grid.component.html -->\n@if (loading()) {\n<div class=\"data-grid-progress\">\n <mat-progress-bar mode=\"indeterminate\" />\n</div>\n} @if (showToolbar()) {\n<div class=\"data-grid-toolbar\">\n <div class=\"data-grid-toolbar-content\">\n @if (toolbarTemplate()) {\n <ng-template [ngTemplateOutlet]=\"toolbarTemplate()\" />\n } @else if (toolbarTitle()) {\n <div class=\"data-grid-toolbar-title\">{{ toolbarTitle() }}</div>\n }\n </div>\n <div class=\"data-grid-toolbar-actions\"></div>\n</div>\n}\n\n<div class=\"data-grid-main data-grid-layout\">\n <div class=\"data-grid-content data-grid-layout\">\n <div #tableContainer class=\"mat-table-container\" [class.mat-table-with-data]=\"!hasNoResult()\">\n <table\n mat-table\n [class.mat-table-hover]=\"rowHover()\"\n [class.mat-table-striped]=\"rowStriped()\"\n [class.mat-table-expandable]=\"expandable()\"\n [class.mat-table-keyboard-navigation]=\"keyboardNavigation()\"\n [dataSource]=\"dataSource\"\n multiTemplateDataRows\n matSort\n [matSortActive]=\"sortActive()\"\n [matSortDirection]=\"sortDirection()\"\n [matSortDisableClear]=\"sortDisableClear()\"\n [matSortDisabled]=\"sortDisabled()\"\n [matSortStart]=\"sortStart()\"\n (matSortChange)=\"onSortChange($event)\"\n [trackBy]=\"trackBy\"\n >\n <!-- Selection Column -->\n @if (rowSelectable() && !hideRowSelectionCheckbox()) {\n <ng-container matColumnDef=\"DataGridCheckboxColumnDef\">\n <th mat-header-cell *matHeaderCellDef class=\"data-grid-checkbox-cell\">\n @if (multiSelectable()) {\n <mat-checkbox\n [checked]=\"rowSelection.hasValue() && isAllSelected()\"\n [indeterminate]=\"rowSelection.hasValue() && !isAllSelected()\"\n (change)=\"$event ? toggleAllRows() : null\"\n />\n }\n </th>\n <td\n mat-cell\n *matCellDef=\"let row; let index = index; let dataIndex = dataIndex\"\n class=\"data-grid-checkbox-cell\"\n >\n @if (!shouldHideCheckbox(row, getIndex(index, dataIndex))) {\n <mat-checkbox\n [disabled]=\"isRowDisabled(row, getIndex(index, dataIndex))\"\n [checked]=\"rowSelection.isSelected(row)\"\n (click)=\"$event.stopPropagation()\"\n (change)=\"$event ? toggleNormalCheckbox(row) : null\"\n />\n }\n </td>\n <td mat-footer-cell *matFooterCellDef class=\"data-grid-checkbox-cell\"></td>\n </ng-container>\n }\n\n <!-- Data Columns -->\n @for (col of columns(); track col.field) {\n <ng-container\n [matColumnDef]=\"col.field\"\n [sticky]=\"col.pinned === 'left'\"\n [stickyEnd]=\"col.pinned === 'right'\"\n >\n <!-- Header Cell -->\n <th\n mat-header-cell\n *matHeaderCellDef\n [class]=\"col | colClass\"\n [class.mat-table-sticky-left]=\"col.pinned === 'left'\"\n [class.mat-table-sticky-right]=\"col.pinned === 'right'\"\n [style.width]=\"col.width\"\n [style.min-width]=\"col.width\"\n [style.left]=\"col.left\"\n [style.right]=\"col.right\"\n >\n <!-- Prioridad 1: Template específico de la columna -->\n @if (col.headerCellTemplate) {\n <ng-template\n [ngTemplateOutlet]=\"col.headerCellTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: col, colDef: col }\"\n />\n } @else if ($any(headerCellTemplate())?.[col.field] | isTemplateRef) {\n <!-- Prioridad 2: Template general por campo -->\n <ng-template\n [ngTemplateOutlet]=\"$any(headerCellTemplate())[col.field]\"\n [ngTemplateOutletContext]=\"{ $implicit: col, colDef: col }\"\n />\n } @else if (headerCellTemplate() | isTemplateRef) {\n <!-- Prioridad 3: Template general -->\n <ng-template\n [ngTemplateOutlet]=\"$any(headerCellTemplate())\"\n [ngTemplateOutletContext]=\"{ $implicit: col, colDef: col }\"\n />\n } @else if ($any(headerTemplate())?.[col.field] | isTemplateRef) {\n <!-- Prioridad 4: Template por campo en headerTemplate -->\n <ng-template\n [ngTemplateOutlet]=\"$any(headerTemplate())[col.field]\"\n [ngTemplateOutletContext]=\"{ $implicit: col, colDef: col }\"\n />\n } @else if (headerTemplate() | isTemplateRef) {\n <!-- Prioridad 5: Template general en headerTemplate -->\n <ng-template\n [ngTemplateOutlet]=\"$any(headerTemplate())\"\n [ngTemplateOutletContext]=\"{ $implicit: col, colDef: col }\"\n />\n } @else {\n <!-- Comportamiento por defecto -->\n <div class=\"mat-header-cell-inner\">\n <div\n [mat-sort-header]=\"col.sortProp?.id || col.field\"\n [disabled]=\"!col.sortable\"\n [disableClear]=\"col.sortProp?.disableClear ?? sortDisableClear()\"\n [arrowPosition]=\"col.sortProp?.arrowPosition!\"\n [start]=\"col.sortProp?.start!\"\n >\n @if (col.showExpand) {\n <span class=\"data-grid-expansion-placeholder\"></span>\n }\n <span>{{ col.header | toObservable | async }}</span>\n @if (col.sortable) {\n <svg\n class=\"data-grid-icon mat-sort-header-icon\"\n viewBox=\"0 0 24 24\"\n width=\"24px\"\n height=\"24px\"\n fill=\"currentColor\"\n focusable=\"false\"\n >\n <path d=\"M3,13H15V11H3M3,6V8H21V6M3,18H9V16H3V18Z\" />\n </svg>\n }\n </div>\n <ng-template\n [ngTemplateOutlet]=\"headerExtraTplBase\"\n [ngTemplateOutletContext]=\"{ $implicit: headerExtraTemplate(), colDef: col }\"\n />\n </div>\n }\n </th>\n\n <!-- Data Cell -->\n <td\n mat-cell\n *matCellDef=\"let row; let index = index; let dataIndex = dataIndex\"\n [class]=\"col | colClass: row : rowChangeRecord : rowChangeRecord?.currentValue\"\n [class.mat-table-sticky-left]=\"col.pinned === 'left'\"\n [class.mat-table-sticky-right]=\"col.pinned === 'right'\"\n [class.focused]=\"keyboardNavigation() && focusedRowIndex() === dataIndex\"\n [style.width]=\"col.width\"\n [style.min-width]=\"col.width\"\n [style.left]=\"col.left\"\n [style.right]=\"col.right\"\n acpGridSelectableCell\n [cellSelectable]=\"cellSelectable()\"\n (cellSelectedChange)=\"selectCell($event, row, col)\"\n >\n @if (cellTemplate() | isTemplateRef) {\n <ng-template\n [ngTemplateOutlet]=\"$any(cellTemplate())\"\n [ngTemplateOutletContext]=\"{\n $implicit: row,\n rowData: row,\n index: getIndex(index, dataIndex),\n colDef: col,\n }\"\n />\n } @else { @if ($any(cellTemplate())?.[col.field] | isTemplateRef) {\n <ng-template\n [ngTemplateOutlet]=\"$any(cellTemplate())[col.field]\"\n [ngTemplateOutletContext]=\"{\n $implicit: row,\n rowData: row,\n index: getIndex(index, dataIndex),\n colDef: col,\n }\"\n />\n } @else { @if (col.cellTemplate) {\n <ng-template\n [ngTemplateOutlet]=\"col.cellTemplate!\"\n [ngTemplateOutletContext]=\"{\n $implicit: row,\n rowData: row,\n index: getIndex(index, dataIndex),\n colDef: col,\n }\"\n />\n } @else { @if (col.showExpand) {\n <button\n class=\"data-grid-row-expand-button\"\n mat-icon-button\n acpDataGridExpansionToggle\n type=\"button\"\n [(opened)]=\"expansionRowStates()[dataIndex].expanded\"\n (toggleChange)=\"onExpansionChange($event, row, col, dataIndex)\"\n >\n <svg\n class=\"data-grid-icon data-grid-row-expand-icon\"\n viewBox=\"0 0 24 24\"\n width=\"24px\"\n height=\"24px\"\n fill=\"currentColor\"\n focusable=\"false\"\n >\n <path d=\"M10 6L8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z\" />\n </svg>\n </button>\n }\n <acp-data-grid-cell\n [rowData]=\"row\"\n [colDef]=\"col\"\n [placeholder]=\"emptyValuePlaceholder()\"\n (rowDataChange)=\"onRowDataChange($event)\"\n />\n } } }\n </td>\n\n <!-- Footer Cell -->\n <td\n mat-footer-cell\n *matFooterCellDef\n [class.mat-table-sticky-left]=\"col.pinned === 'left'\"\n [class.mat-table-sticky-right]=\"col.pinned === 'right'\"\n [style.width]=\"col.width\"\n [style.min-width]=\"col.width\"\n [style.left]=\"col.left\"\n [style.right]=\"col.right\"\n >\n @if (col.showExpand) {\n <span class=\"data-grid-expansion-placeholder\"></span>\n } @if (summaryTemplate() | isTemplateRef) {\n <ng-template\n [ngTemplateOutlet]=\"$any(summaryTemplate())\"\n [ngTemplateOutletContext]=\"{ $implicit: col, colDef: col, data: data() }\"\n />\n } @else { @if ($any(summaryTemplate())?.[col.field] | isTemplateRef) {\n <ng-template\n [ngTemplateOutlet]=\"$any(summaryTemplate())[col.field]\"\n [ngTemplateOutletContext]=\"{\n $implicit: getColData(data(), col),\n colData: getColData(data(), col),\n colDef: col,\n }\"\n />\n } @else {\n <acp-data-grid-cell\n [summary]=\"true\"\n [data]=\"data()\"\n [colDef]=\"col\"\n [placeholder]=\"emptyValuePlaceholder()\"\n />\n } }\n </td>\n </ng-container>\n }\n\n <!-- Header Row -->\n @if (!useContentHeaderRowTemplate()) {\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns(); sticky: true\"></tr>\n }\n\n <!-- Data Rows -->\n @if (!useContentRowTemplate()) {\n <tr\n mat-row\n *matRowDef=\"\n let row;\n let index = index;\n let dataIndex = dataIndex;\n columns: displayedColumns()\n \"\n [class]=\"row | rowClass: index : dataIndex : rowClassFormatter()\"\n [class.selected]=\"rowSelection.isSelected(row)\"\n [class.focused]=\"keyboardNavigation() && focusedRowIndex() === dataIndex\"\n [class.highlighted]=\"highlightedRowIndex() === dataIndex\"\n (click)=\"selectRow($event, row, getIndex(index, dataIndex))\"\n (contextmenu)=\"contextmenu($event, row, getIndex(index, dataIndex))\"\n ></tr>\n }\n\n <!-- Summary Row -->\n @if (whetherShowSummary()) {\n <tr mat-footer-row *matFooterRowDef=\"displayedColumns(); sticky: true\"></tr>\n }\n\n <!-- Expansion Row -->\n @if (expandable()) {\n <ng-container matColumnDef=\"DataGridExpansionColumnDef\">\n <td\n mat-cell\n *matCellDef=\"let row; let dataIndex = dataIndex\"\n [attr.colspan]=\"displayedColumns().length\"\n >\n <div class=\"data-grid-expansion-detail-wrapper\">\n <div class=\"data-grid-expansion-detail\">\n <ng-template\n [ngTemplateOutlet]=\"expansionTemplate()\"\n [ngTemplateOutletContext]=\"{\n $implicit: row,\n rowData: row,\n index: dataIndex,\n expanded: expansionRowStates()[dataIndex].expanded,\n }\"\n />\n </div>\n </div>\n </td>\n </ng-container>\n <tr\n mat-row\n *matRowDef=\"let row; columns: ['DataGridExpansionColumnDef']; let dataIndex = dataIndex\"\n class=\"data-grid-expansion\"\n [class]=\"expansionRowStates()[dataIndex].expanded ? 'expanded' : 'collapsed'\"\n ></tr>\n }\n </table>\n </div>\n\n <!-- No result -->\n @if (hasNoResult()) {\n <div class=\"data-grid-no-result\">\n @if (noResultTemplate()) {\n <ng-template [ngTemplateOutlet]=\"noResultTemplate()\" />\n } @else { {{ noResultText() }} }\n </div>\n }\n\n <!-- Infinite Scroll Loading Indicator -->\n @if (infiniteScroll() && isLoadingMore()) {\n <div class=\"data-grid-infinite-scroll-loading\">\n <mat-progress-bar mode=\"indeterminate\" />\n </div>\n }\n </div>\n</div>\n\n<div class=\"data-grid-footer\">\n <!-- Pagination -->\n @if (!infiniteScroll() && showPaginator()) {\n <div class=\"data-grid-pagination\">\n @if (paginationTemplate()) {\n <ng-template [ngTemplateOutlet]=\"paginationTemplate()\" />\n } @else {\n <mat-paginator\n [class.mat-paginator-hidden]=\"!showPaginator()\"\n [showFirstLastButtons]=\"showFirstLastButtons()\"\n [length]=\"length()\"\n [pageIndex]=\"pageIndex()\"\n [pageSize]=\"pageSize()\"\n [pageSizeOptions]=\"pageSizeOptions()\"\n [hidePageSize]=\"hidePageSize()\"\n (page)=\"onPage($event)\"\n [disabled]=\"pageDisabled()\"\n />\n }\n </div>\n }\n</div>\n\n<!-- Header template for extra content -->\n<ng-template #headerExtraTplBase let-headerExtraTemplate let-col=\"colDef\">\n @if (headerExtraTemplate | isTemplateRef) {\n <ng-template\n [ngTemplateOutlet]=\"headerExtraTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: col, colDef: col }\"\n />\n } @else { @if ($any(headerExtraTemplate)?.[col.field] | isTemplateRef) {\n <ng-template\n [ngTemplateOutlet]=\"headerExtraTemplate[col.field]\"\n [ngTemplateOutletContext]=\"{ $implicit: col, colDef: col }\"\n />\n } }\n</ng-template>\n","import {\n Component,\n OnDestroy,\n OnInit,\n OnChanges,\n SimpleChanges,\n forwardRef,\n input,\n output,\n signal,\n model,\n OutputEmitterRef,\n WritableSignal,\n} from '@angular/core';\nimport { ControlValueAccessor, FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { Subject } from 'rxjs';\n\nimport {\n NgxDatex,\n NgxDatexTheme,\n NgxDatexLocale,\n NgxDatexValue,\n SPANISH_LOCALE,\n MATERIAL_LIGHT_THEME,\n} from 'ngx-datex';\n\nimport { addDay, weekStart, weekEnd, monthStart, monthEnd, tzDate, format } from '@formkit/tempo';\n\n/* ============================\n TYPES\n============================ */\n\nexport interface DateRangePickerOptions {\n presetTheme?: 'default' | 'bootstrap' | 'material' | 'custom';\n locale?: NgxDatexLocale;\n theme?: NgxDatexTheme;\n ranges?: Record<string, [Date, Date]>;\n minDate?: Date | null;\n maxDate?: Date | null;\n singleDatePicker?: boolean;\n timePicker?: boolean;\n timePicker24Hour?: boolean;\n timePickerSeconds?: boolean;\n timePickerIncrement?: number;\n autoApply?: boolean;\n showDropdowns?: boolean;\n linkedCalendars?: boolean;\n alwaysShowCalendars?: boolean;\n}\n\nexport type DateValue<AsString extends boolean> = AsString extends true ? string : Date;\n\nexport interface DateRangeValue<AsString extends boolean> {\n from: DateValue<AsString>;\n to: DateValue<AsString>;\n label?: string;\n}\n\n/* ============================\n HELPERS\n============================ */\n\nfunction formatDateToString(date: Date): string {\n const dateZone = tzDate(date, 'America/Guayaquil');\n return format({\n date: dateZone,\n format: 'YYYY-MM-DD hh:mm:ss A',\n tz: 'America/Guayaquil',\n });\n}\n\n/* ============================\n COMPONENT\n============================ */\n\n@Component({\n selector: 'acp-date-range-picker',\n standalone: true,\n imports: [NgxDatex, FormsModule],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => DateRangePicker),\n multi: true,\n },\n ],\n template: `\n <ngx-datex\n [(ngModel)]=\"dateRangeValue\"\n [appearance]=\"appearance()\"\n [label]=\"label()\"\n [placeholder]=\"placeholderText()\"\n [disabled]=\"isDisabled()\"\n [readonly]=\"inputReadonly()\"\n [locale]=\"locale\"\n [theme]=\"theme\"\n [ranges]=\"predefinedRanges\"\n [singleDatePicker]=\"singleDatePicker()\"\n [timePicker]=\"timePicker()\"\n [timePicker24Hour]=\"timePicker24Hour()\"\n [timePickerSeconds]=\"timePickerSeconds()\"\n [timePickerIncrement]=\"timePickerIncrement()\"\n [autoApply]=\"autoApply()\"\n [showDropdowns]=\"showDropdowns()\"\n [linkedCalendars]=\"linkedCalendars()\"\n [alwaysShowCalendars]=\"alwaysShowCalendars()\"\n [minDate]=\"minDateForTemplate\"\n [maxDate]=\"maxDateForTemplate\"\n [showCheckbox]=\"showCheckbox()\"\n [checkboxChecked]=\"checkboxChecked()\"\n [checkboxPosition]=\"checkboxPosition()\"\n [calendarIcon]=\"calendarIcon()\"\n [showCalendarIcon]=\"showCalendarButton()\"\n (dateChange)=\"onDateChange($event)\"\n (rangeChange)=\"onRangeChange($event)\"\n (openEvent)=\"onPickerShow()\"\n (closeEvent)=\"onPickerHide()\"\n (checkboxChange)=\"onCheckboxToggle($event)\"\n ></ngx-datex>\n `,\n})\nexport class DateRangePicker<AsString extends boolean = true>\n implements OnInit, OnChanges, OnDestroy, ControlValueAccessor\n{\n /* ============================\n INPUTS\n ============================ */\n\n options = input<DateRangePickerOptions>({});\n placeholderText = input('Seleccionar rango de fechas');\n isDisabled = input(false);\n inputReadonly = input(false);\n label = input<string>('');\n appearance = input<'fill' | 'outline'>('outline');\n\n formatOutputAsString = input<AsString>(true as AsString);\n\n calendarIcon = input('date_range');\n showCalendarButton = input(false);\n\n showCheckbox = input(false);\n checkboxChecked = model(false);\n checkboxPosition = input<'prefix' | 'suffix'>('suffix');\n\n // NgxDatex specific inputs\n singleDatePicker = input(false);\n timePicker = input(false);\n timePicker24Hour = input(true);\n timePickerSeconds = input(false);\n timePickerIncrement = input(1);\n autoApply = input(false);\n showDropdowns = input(false);\n linkedCalendars = input(true);\n alwaysShowCalendars = input(false);\n minDate = input<Date | null>(null);\n maxDate = input<Date | null>(null);\n\n /* ============================\n OUTPUTS\n ============================ */\n\n dateRangeSelected: OutputEmitterRef<DateRangeValue<AsString>> =\n output<DateRangeValue<AsString>>();\n pickerShow: OutputEmitterRef<void> = output<void>();\n pickerHide: OutputEmitterRef<void> = output<void>();\n pickerApply: OutputEmitterRef<void> = output<void>();\n pickerCancel: OutputEmitterRef<void> = output<void>();\n checkboxChange: OutputEmitterRef<boolean> = output<boolean>();\n\n /* ============================\n INTERNAL\n ============================ */\n\n dateRangeValue: NgxDatexValue | null = null;\n predefinedRanges: Record<string, [Date, Date]> = {};\n locale: NgxDatexLocale = SPANISH_LOCALE;\n theme: NgxDatexTheme = MATERIAL_LIGHT_THEME;\n\n private currentDate = new Date();\n private readonly stateChanges = new Subject<void>();\n\n private onChange = (_value: any) => {\n // This will be replaced by registerOnChange\n };\n private onTouched = () => {\n // This will be replaced by registerOnTouched\n };\n\n /* ============================\n COMPUTED PROPERTIES\n ============================ */\n\n effectiveMinDate: WritableSignal<Date | null> = signal<Date | null>(null);\n effectiveMaxDate: WritableSignal<Date | null> = signal<Date | null>(null);\n\n get minDateForTemplate(): any {\n const minDate = this.effectiveMinDate();\n return minDate || null;\n }\n\n get maxDateForTemplate(): any {\n const maxDate = this.effectiveMaxDate();\n return maxDate || null;\n }\n\n /* ============================\n LIFECYCLE\n ============================ */\n\n ngOnInit(): void {\n this.initializeConfiguration();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['options'] || changes['minDate'] || changes['maxDate']) {\n console.log('options changes');\n this.initializeConfiguration();\n }\n }\n\n ngOnDestroy(): void {\n this.stateChanges.complete();\n }\n\n /* ============================\n DATE LOGIC\n ============================ */\n\n private mapDate(date: Date): DateValue<AsString> {\n return this.formatOutputAsString()\n ? (formatDateToString(date) as DateValue<AsString>)\n : (date as DateValue<AsString>);\n }\n\n private initializeConfiguration(): void {\n this.predefinedRanges = this.getDefaultRanges();\n this.locale = this.getLocale();\n this.theme = this.getTheme();\n this.effectiveMinDate.set(this.minDate());\n this.effectiveMaxDate.set(this.maxDate());\n }\n\n private getDefaultRanges(): Record<string, [Date, Date]> {\n const opts = this.options();\n if (opts.ranges) {\n return opts.ranges;\n }\n\n return {\n Hoy: [this.currentDate, this.currentDate],\n Ayer: [addDay(this.currentDate, -1), addDay(this.currentDate, -1)],\n 'Últimos 5 días': [addDay(this.currentDate, -4), this.currentDate],\n 'Últimos 10 días': [addDay(this.currentDate, -9), this.currentDate],\n 'Últimos 15 días': [addDay(this.currentDate, -14), this.currentDate],\n 'Últimos 30 días': [addDay(this.currentDate, -29), this.currentDate],\n 'Esta semana': [weekStart(this.currentDate), weekEnd(this.currentDate)],\n 'Este mes': [monthStart(this.currentDate), monthEnd(this.currentDate)],\n 'El mes pasado': [\n monthStart(addDay(monthStart(this.currentDate), -1)),\n addDay(monthStart(this.currentDate), -1),\n ],\n };\n }\n\n private getLocale(): NgxDatexLocale {\n const opts = this.options();\n return opts.locale ?? SPANISH_LOCALE;\n }\n\n private getTheme(): NgxDatexTheme {\n const opts = this.options();\n return opts.theme ?? MATERIAL_LIGHT_THEME;\n }\n\n /* ============================\n EVENT HANDLERS\n ============================ */\n\n onDateChange(value: NgxDatexValue | null): void {\n if (value && value.startDate) {\n const range: DateRangeValue<AsString> = {\n from: this.mapDate(value.startDate),\n to: this.mapDate(value.endDate || value.startDate),\n label: value.label,\n };\n\n this.onChange(range);\n this.onTouched();\n this.dateRangeSelected.emit(range);\n } else {\n this.onChange(null);\n this.onTouched();\n this.dateRangeSelected.emit(null as any);\n }\n }\n\n onRangeChange(range: { startDate: Date; endDate: Date | null }): void {\n if (range.startDate) {\n const dateRange: DateRangeValue<AsString> = {\n from: this.mapDate(range.startDate),\n to: this.mapDate(range.endDate || range.startDate),\n };\n\n this.onChange(dateRange);\n this.dateRangeSelected.emit(dateRange);\n }\n }\n\n onPickerShow(): void {\n this.pickerShow.emit();\n }\n\n onPickerHide(): void {\n this.pickerHide.emit();\n this.onTouched();\n }\n\n onCheckboxToggle(checked: boolean): void {\n this.checkboxChecked.set(checked);\n this.checkboxChange.emit(checked);\n }\n\n /* ============================\n CVA\n ============================ */\n\n writeValue(value: any): void {\n if (value && value.from && value.to) {\n // Convert our DateRangeValue to NgxDatexValue format\n const startDate = typeof value.from === 'string' ? new Date(value.from) : value.from;\n const endDate = typeof value.to === 'string' ? new Date(value.to) : value.to;\n\n this.dateRangeValue = {\n startDate,\n endDate,\n label: value.label,\n };\n } else {\n this.dateRangeValue = null;\n }\n }\n\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: any): void {\n this.onTouched = fn;\n }\n\n setDisabledState(_isDisabled: boolean): void {\n // NgxDatex handles disabled state through the [disabled] input\n }\n\n /* ============================\n UI API\n ============================ */\n\n show(): void {\n // NgxDatex handles show/hide through its own API\n }\n\n hide(): void {\n // NgxDatex handles show/hide through its own API\n }\n\n toggle(): void {\n // NgxDatex handles show/hide through its own API\n }\n}\n","// Angular component\nexport { DateRangePicker } from './date-range-picker';\nexport type { DateRangePickerOptions, DateRangeValue } from './date-range-picker';\n\n// Re-exports from ngx-datex\nexport { NgxDatex, SPANISH_LOCALE, MATERIAL_LIGHT_THEME } from 'ngx-datex';\n\nexport type { NgxDatexValue } from 'ngx-datex';\nexport type { NgxDatexLocale } from 'ngx-datex';\nexport type { NgxDatexTheme } from 'ngx-datex';\nexport type { NgxDatexConfig } from 'ngx-datex';\nexport type { NgxDatexRange } from 'ngx-datex';\n","import { Direction } from '@angular/cdk/bidi';\nimport { DialogRole } from '@angular/cdk/dialog';\nimport { ScrollStrategy } from '@angular/cdk/overlay';\nimport { ViewContainerRef } from '@angular/core';\n\n/** Options for where to set focus to automatically on dialog open. */\nexport type AutoFocusTarget = 'dialog' | 'first-tabbable' | 'first-heading';\n\n/** Possible overrides for a drawer's position. */\nexport type DrawerPosition = 'top' | 'bottom' | 'left' | 'right';\n\n/**\n * Configuration used when opening a drawer.\n *\n * This class provides all the configuration options available when opening\n * a drawer, including positioning, sizing, behavior, and accessibility options.\n *\n * @template D The type of data to be injected into the drawer component\n *\n * @example\n * ```typescript\n * const config: AcpDrawerConfig = {\n * position: 'right',\n * width: '400px',\n * hasBackdrop: true,\n * disableClose: false,\n * data: { message: 'Hello from drawer!' },\n * ariaLabel: 'Settings drawer'\n * };\n *\n * this.drawer.open(MyDrawerComponent, config);\n * ```\n */\nexport class AcpDrawerConfig<D = any> {\n /** The view container to place the overlay for the drawer into. */\n viewContainerRef?: ViewContainerRef;\n\n /** ID for the drawer. If omitted, a unique one will be generated. */\n id?: string;\n\n /** The ARIA role of the dialog element. */\n role?: DialogRole = 'dialog';\n\n /** Extra CSS classes to be added to the drawer container. */\n panelClass?: string | string[];\n\n /** Text layout direction for the drawer. */\n direction?: Direction;\n\n /** Data being injected into the child component. */\n data?: D | null = null;\n\n /** Whether the drawer has a backdrop. */\n hasBackdrop?: boolean = true;\n\n /** Custom class for the backdrop. */\n backdropClass?: string;\n\n /** Whether the user can use escape or clicking outside to close the drawer. */\n disableClose?: boolean = false;\n\n /** Aria label to assign to the drawer element. */\n ariaLabel?: string | null = null;\n\n /**\n * Whether this is a modal dialog. Used to set the `aria-modal` attribute. Off by default,\n * because it can interfere with other overlay-based components (e.g. `mat-select`) and because\n * it is redundant since the dialog marks all outside content as `aria-hidden` anyway.\n */\n ariaModal?: boolean = false;\n\n /**\n * Whether the drawer should close when the user goes backwards/forwards in history.\n * Note that this usually doesn't include clicking on links (unless the user is using\n * the `HashLocationStrategy`).\n */\n closeOnNavigation?: boolean = true;\n\n /**\n * Where the drawer should focus on open.\n * @breaking-change 14.0.0 Remove boolean option from autoFocus. Use string or\n * AutoFocusTarget instead.\n */\n autoFocus?: AutoFocusTarget | string | boolean = 'first-tabbable';\n\n /**\n * Whether the drawer should restore focus to the\n * previously-focused element, after it's closed.\n */\n restoreFocus?: boolean = true;\n\n /** Scroll strategy to be used for the drawer. */\n scrollStrategy?: ScrollStrategy;\n\n /** Position of the drawer. */\n position?: DrawerPosition = 'right';\n\n /** Width of the drawer. */\n width?: string;\n\n /** Height of the drawer. */\n height?: string;\n\n /** Whether the drawer should take the full screen. */\n fullScreen?: boolean = false;\n\n /** Min-width of the drawer. If a number is provided, assumes pixel units. */\n minWidth?: number | string;\n\n /** Min-height of the drawer. If a number is provided, assumes pixel units. */\n minHeight?: number | string;\n\n /** Max-width of the drawer. If a number is provided, assumes pixel units. */\n maxWidth?: number | string;\n\n /** Max-height of the drawer. If a number is provided, assumes pixel units. */\n maxHeight?: number | string;\n}\n","import { CdkDialogContainer } from '@angular/cdk/dialog';\nimport { CdkPortalOutlet } from '@angular/cdk/portal';\nimport {\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n OnDestroy,\n ViewEncapsulation,\n inject,\n ANIMATION_MODULE_TYPE,\n} from '@angular/core';\nimport { AcpDrawerConfig } from './drawer-config';\n\nconst ENTER_ANIMATION = '_acp-drawer-enter';\nconst EXIT_ANIMATION = '_acp-drawer-exit';\n\n/**\n * Internal component that wraps user-provided drawer content.\n *\n * This component handles the drawer's animations, positioning, and lifecycle.\n * It extends the CDK's DialogContainer to provide drawer-specific behavior\n * including slide-in/slide-out animations and proper focus management.\n *\n * @docs-private\n */\n@Component({\n selector: 'acp-drawer-container',\n templateUrl: 'drawer-container.html',\n styleUrl: 'drawer-container.scss',\n // In Ivy embedded views will be change detected from their declaration place, rather than where\n // they were stamped out. This means that we can't have the drawer container be OnPush,\n // because it might cause the sheets that were opened from a template not to be out of date.\n changeDetection: ChangeDetectionStrategy.Default,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'acp-drawer-container',\n '[class]': '_drawerPosition',\n '[class.acp-drawer-container-animations-enabled]': '!_animationsDisabled',\n '[class.acp-drawer-container-enter]': '_animationState === \"visible\"',\n '[class.acp-drawer-container-exit]': '_animationState === \"hidden\"',\n '[class.acp-drawer-fullscreen]': '_config.fullScreen',\n tabindex: '-1',\n '[id]': '_config.id',\n '[attr.role]': '_config.role',\n '[attr.aria-modal]': '_config.ariaModal',\n '[attr.aria-label]': '_config.ariaLabel',\n '(animationstart)': '_handleAnimationEvent(true, $event.animationName)',\n '(animationend)': '_handleAnimationEvent(false, $event.animationName)',\n '(animationcancel)': '_handleAnimationEvent(false, $event.animationName)',\n },\n imports: [CdkPortalOutlet],\n})\nexport class AcpDrawerContainer extends CdkDialogContainer<AcpDrawerConfig> implements OnDestroy {\n /** Whether animations are disabled in the current environment. */\n protected _animationsDisabled =\n inject(ANIMATION_MODULE_TYPE, { optional: true }) === 'NoopAnimations';\n\n /** The state of the drawer animations. */\n _animationState: 'void' | 'visible' | 'hidden' = 'void';\n\n /** Emits whenever the state of the animation changes. */\n _animationStateChanged = new EventEmitter<{\n toState: 'visible' | 'hidden';\n phase: 'start' | 'done';\n }>();\n\n /** Whether the component has been destroyed. */\n private _destroyed = false;\n\n /**\n * Gets the CSS class for the drawer position.\n * @returns CSS class name based on the drawer's position\n */\n get _drawerPosition() {\n return `acp-drawer-${this._config.position}`;\n }\n\n /**\n * Called when content is attached to the container.\n * Initializes the dialog container and starts the entrance animation.\n */\n protected override _contentAttached(): void {\n // Delegate to the original dialog-container initialization (i.e. saving the\n // previous element, setting up the focus trap and moving focus to the container).\n super._contentAttached();\n\n this.enter();\n }\n\n /**\n * Begin animation of drawer entrance into view.\n * Sets the animation state to visible and triggers change detection.\n */\n enter(): void {\n if (!this._destroyed) {\n this._animationState = 'visible';\n this._changeDetectorRef.markForCheck();\n this._changeDetectorRef.detectChanges();\n if (this._animationsDisabled) {\n this._simulateAnimation(ENTER_ANIMATION);\n }\n }\n }\n\n /**\n * Begin animation of the drawer exiting from view.\n * Sets the animation state to hidden and triggers the exit animation.\n */\n exit(): void {\n if (!this._destroyed) {\n this._animationState = 'hidden';\n this._changeDetectorRef.markForCheck();\n if (this._animationsDisabled) {\n this._simulateAnimation(EXIT_ANIMATION);\n }\n }\n }\n\n /**\n * Lifecycle hook called when the component is destroyed.\n * Marks the component as destroyed and calls the parent's ngOnDestroy.\n */\n override ngOnDestroy() {\n super.ngOnDestroy();\n\n this._destroyed = true;\n }\n\n /**\n * Simulates animation events when animations are disabled.\n * @param name The animation name to simulate\n */\n private _simulateAnimation(name: typeof ENTER_ANIMATION | typeof EXIT_ANIMATION) {\n this._ngZone.run(() => {\n this._handleAnimationEvent(true, name);\n setTimeout(() => this._handleAnimationEvent(false, name));\n });\n }\n\n /**\n * Handles animation events for both start and end phases.\n * @param isStart Whether this is the start or end of the animation\n * @param animationName The name of the animation\n */\n protected _handleAnimationEvent(isStart: boolean, animationName: string) {\n const isEnter = animationName === ENTER_ANIMATION;\n const isExit = animationName === EXIT_ANIMATION;\n\n if (isEnter) {\n this._trapFocus();\n }\n\n if (isEnter || isExit) {\n this._animationStateChanged.emit({\n toState: isEnter ? 'visible' : 'hidden',\n phase: isStart ? 'start' : 'done',\n });\n }\n }\n\n /**\n * Override to prevent automatic focus capture.\n * Focus is handled by the enter animation instead.\n */\n protected override _captureInitialFocus(): void {\n // Intentionally empty - focus is handled by the enter animation\n }\n}\n","<ng-template cdkPortalOutlet></ng-template>\n","import { DialogRef } from '@angular/cdk/dialog';\nimport { ESCAPE, hasModifierKey } from '@angular/cdk/keycodes';\nimport { merge, Observable, Subject } from 'rxjs';\nimport { filter, take } from 'rxjs/operators';\nimport { AcpDrawerConfig } from './drawer-config';\nimport { AcpDrawerContainer } from './drawer-container';\nimport { ComponentRef } from '@angular/core';\n\n/**\n * Reference to a drawer dispatched from the drawer service.\n *\n * This class provides methods and properties to interact with an open drawer,\n * including dismissing it, accessing its component instance, and subscribing\n * to lifecycle events like opening and closing.\n *\n * @template T The type of the component opened in the drawer\n * @template R The type of the result returned when the drawer is dismissed\n *\n * @example\n * ```typescript\n * const drawerRef = this.drawer.open(MyComponent);\n *\n * // Access component instance\n * drawerRef.instance.someProperty = 'value';\n *\n * // Listen for dismissal\n * drawerRef.afterDismissed().subscribe(result => {\n * console.log('Drawer dismissed with:', result);\n * });\n *\n * // Dismiss programmatically\n * drawerRef.dismiss('some result');\n * ```\n */\nexport class AcpDrawerRef<T = any, R = any> {\n /** Instance of the component making up the content of the drawer. */\n get instance(): T {\n return this._ref.componentInstance!;\n }\n\n /**\n * `ComponentRef` of the component opened into the drawer. Will be\n * null when the drawer is opened using a `TemplateRef`.\n */\n get componentRef(): ComponentRef<T> | null {\n return this._ref.componentRef;\n }\n\n /**\n * Instance of the component into which the drawer content is projected.\n * @docs-private\n */\n containerInstance: AcpDrawerContainer;\n\n /** Whether the user is allowed to close the drawer. */\n disableClose: boolean | undefined;\n\n /** Unique ID for the drawer. */\n id: string;\n\n /** Subject for notifying the user that the drawer has been dismissed. */\n private readonly _afterDismissed = new Subject<R | undefined>();\n\n /** Subject for notifying the user that the drawer has opened and appeared. */\n private readonly _afterOpened = new Subject<void>();\n\n /** Result to be passed down to the `afterDismissed` stream. */\n private _result: R | undefined;\n\n /** Handle to the timeout that's running as a fallback in case the exit animation doesn't fire. */\n private _closeFallbackTimeout: any;\n\n /**\n * Creates a new drawer reference.\n * @param _ref The underlying CDK dialog reference\n * @param config Configuration options for the drawer\n * @param containerInstance The drawer container instance\n */\n constructor(\n private _ref: DialogRef<R, T>,\n config: AcpDrawerConfig,\n containerInstance: AcpDrawerContainer,\n ) {\n this.containerInstance = containerInstance;\n this.disableClose = config.disableClose;\n this.id = _ref.id;\n\n // Emit when opening animation completes\n containerInstance._animationStateChanged\n .pipe(\n filter(event => event.phase === 'done' && event.toState === 'visible'),\n take(1),\n )\n .subscribe(() => {\n this._afterOpened.next();\n this._afterOpened.complete();\n });\n\n // Dispose overlay when closing animation is complete\n containerInstance._animationStateChanged\n .pipe(\n filter(event => event.phase === 'done' && event.toState === 'hidden'),\n take(1),\n )\n .subscribe(() => {\n clearTimeout(this._closeFallbackTimeout);\n this._ref.close(this._result);\n });\n\n _ref.overlayRef.detachments().subscribe(() => {\n this._ref.close(this._result);\n });\n\n merge(\n this.backdropClick(),\n this.keydownEvents().pipe(filter(event => event.keyCode === ESCAPE)),\n ).subscribe(event => {\n if (\n !this.disableClose &&\n (event.type !== 'keydown' || !hasModifierKey(event as KeyboardEvent))\n ) {\n event.preventDefault();\n this.dismiss();\n }\n });\n }\n\n /**\n * Dismisses the drawer.\n * @param result Data to be passed back to the drawer opener.\n */\n dismiss(result?: R): void {\n if (this.containerInstance && !this._afterDismissed.closed) {\n // Transition the backdrop in parallel to the drawer.\n this.containerInstance._animationStateChanged\n .pipe(\n filter(event => event.phase === 'start'),\n take(1),\n )\n .subscribe(_event => {\n // The logic that disposes of the overlay depends on the exit animation completing, however\n // it isn't guaranteed if the parent view is destroyed while it's running. Add a fallback\n // timeout which will clean everything up if the animation hasn't fired within the specified\n // amount of time plus 100ms. We don't need to run this outside the NgZone, because for the\n // vast majority of cases the timeout will have been cleared before it has fired.\n\n this._closeFallbackTimeout = setTimeout(() => this._ref.close(this._result), 500);\n this._ref.overlayRef.detachBackdrop();\n });\n\n this._result = result;\n this.containerInstance.exit();\n this.containerInstance = null!;\n }\n }\n\n /**\n * Gets an observable that is notified when the drawer is finished closing.\n * @returns Observable that emits the result passed to dismiss() or undefined\n */\n afterDismissed(): Observable<R | undefined> {\n return this._ref.closed;\n }\n\n /**\n * Gets an observable that is notified when the drawer has opened and appeared.\n * @returns Observable that emits when the drawer is fully visible\n */\n afterOpened(): Observable<void> {\n return this._afterOpened;\n }\n\n /**\n * Gets an observable that emits when the overlay's backdrop has been clicked.\n * @returns Observable that emits mouse events from backdrop clicks\n */\n backdropClick(): Observable<MouseEvent> {\n return this._ref.backdropClick;\n }\n\n /**\n * Gets an observable that emits when keydown events are targeted on the overlay.\n * @returns Observable that emits keyboard events\n */\n keydownEvents(): Observable<KeyboardEvent> {\n return this._ref.keydownEvents;\n }\n}\n","import { coerceCssPixelValue } from '@angular/cdk/coercion';\nimport { Dialog, DialogConfig } from '@angular/cdk/dialog';\nimport { Overlay } from '@angular/cdk/overlay';\nimport { ComponentType } from '@angular/cdk/portal';\nimport { inject, Injectable, InjectionToken, OnDestroy, TemplateRef } from '@angular/core';\nimport { defer, Observable, Subject } from 'rxjs';\nimport { startWith } from 'rxjs/operators';\nimport { AcpDrawerConfig } from './drawer-config';\nimport { AcpDrawerContainer } from './drawer-container';\nimport { AcpDrawerRef } from './drawer-ref';\n\n/** Injection token that can be used to access the data that was passed in to a drawer. */\nexport const ACP_DRAWER_DATA = new InjectionToken<any>('AcpDrawerData');\n\n/** Injection token that can be used to specify default drawer options. */\nexport const ACP_DRAWER_DEFAULT_OPTIONS = new InjectionToken<AcpDrawerConfig>(\n 'acp-drawer-default-options',\n);\n\n/** Counter for unique drawer ids. */\nlet uniqueId = 0;\n\n/**\n * Service to trigger ACP drawer components.\n *\n * The AcpDrawer service provides methods to open, manage, and dismiss drawer panels\n * that slide in from any side of the screen. It's built on top of Angular CDK Dialog\n * and provides a flexible way to display additional content without navigating away\n * from the current page.\n *\n * @example\n * ```typescript\n * constructor(private drawer: AcpDrawer) {}\n *\n * openDrawer() {\n * const drawerRef = this.drawer.open(MyDrawerComponent, {\n * position: 'right',\n * width: '400px',\n * data: { message: 'Hello from drawer!' }\n * });\n *\n * drawerRef.afterDismissed().subscribe(result => {\n * console.log('Drawer closed with result:', result);\n * });\n * }\n * ```\n */\n@Injectable({ providedIn: 'root' })\nexport class AcpDrawer implements OnDestroy {\n private _overlay = inject(Overlay);\n private _parentDrawer = inject(AcpDrawer, { optional: true, skipSelf: true });\n private _defaultOptions = inject<AcpDrawerConfig>(ACP_DRAWER_DEFAULT_OPTIONS, { optional: true });\n\n private readonly _openDrawersAtThisLevel: AcpDrawerRef<any>[] = [];\n private readonly _afterAllDismissedAtThisLevel = new Subject<void>();\n private readonly _afterOpenedAtThisLevel = new Subject<AcpDrawerRef<any>>();\n private _dialog = inject(Dialog);\n\n /** Keeps track of the currently-open dialogs. */\n get openDrawers(): AcpDrawerRef<any>[] {\n return this._parentDrawer ? this._parentDrawer.openDrawers : this._openDrawersAtThisLevel;\n }\n\n /** Stream that emits when a drawer has been opened. */\n get afterOpened(): Subject<AcpDrawerRef<any>> {\n return this._parentDrawer ? this._parentDrawer.afterOpened : this._afterOpenedAtThisLevel;\n }\n\n /**\n * Gets the subject for tracking when all drawers are dismissed.\n * @returns Subject that emits when all drawers at this level are closed\n */\n private _getAfterAllDismissed(): Subject<void> {\n const parent = this._parentDrawer;\n return parent ? parent._getAfterAllDismissed() : this._afterAllDismissedAtThisLevel;\n }\n\n /**\n * Stream that emits when all open drawer have finished closing.\n * Will emit on subscribe if there are no open drawers to begin with.\n */\n readonly afterAllDismissed: Observable<void> = defer(() =>\n this.openDrawers.length\n ? this._getAfterAllDismissed()\n : this._getAfterAllDismissed().pipe(startWith(undefined)),\n ) as Observable<any>;\n\n /**\n * Opens a drawer containing the given component.\n * @param component Type of the component to load into the drawer.\n * @param config Extra configuration options.\n * @returns Reference to the newly-opened drawer.\n */\n open<T, D = any, R = any>(\n component: ComponentType<T>,\n config?: AcpDrawerConfig<D>,\n ): AcpDrawerRef<T, R>;\n\n /**\n * Opens a drawer containing the given template.\n * @param template TemplateRef to instantiate as the drawer content.\n * @param config Extra configuration options.\n * @returns Reference to the newly-opened drawer.\n */\n open<T, D = any, R = any>(\n template: TemplateRef<T>,\n config?: AcpDrawerConfig<D>,\n ): AcpDrawerRef<T, R>;\n\n open<T, D = any, R = any>(\n componentOrTemplateRef: ComponentType<T> | TemplateRef<T>,\n config?: AcpDrawerConfig<D>,\n ): AcpDrawerRef<T, R> {\n let drawerRef!: AcpDrawerRef<T, R>;\n\n const _config = { ...(this._defaultOptions || new AcpDrawerConfig()), ...config };\n _config.id = _config.id || `acp-drawer-${uniqueId++}`;\n\n if (_config.fullScreen) {\n _config.width = '100vw';\n _config.height = '100vh';\n } else {\n _config.width =\n _config.position === 'left' || _config.position === 'right'\n ? coerceCssPixelValue(_config.width)\n : '100vw';\n\n _config.height =\n _config.position === 'top' || _config.position === 'bottom'\n ? coerceCssPixelValue(_config.height)\n : '100vh';\n }\n\n this._dialog.open<R, D, T>(componentOrTemplateRef, {\n ..._config,\n // Disable closing since we need to sync it up to the animation ourselves.\n disableClose: true,\n // Disable closing on detachments so that we can sync up the animation.\n closeOnOverlayDetachments: false,\n container: {\n type: AcpDrawerContainer,\n providers: () => [\n // Provide our config as the CDK config as well since it has the same interface as the\n // CDK one, but it contains the actual values passed in by the user for things like\n // `disableClose` which we disable for the CDK dialog since we handle it ourselves.\n { provide: AcpDrawerConfig, useValue: _config },\n { provide: DialogConfig, useValue: _config },\n ],\n },\n scrollStrategy: _config.scrollStrategy || this._overlay.scrollStrategies.block(),\n positionStrategy: this._overlay.position().global()[_config.position!]('0'),\n templateContext: () => ({ drawerRef }),\n providers: (cdkRef, _cdkConfig, container) => {\n drawerRef = new AcpDrawerRef(cdkRef, _config, container as AcpDrawerContainer);\n return [\n { provide: AcpDrawerRef, useValue: drawerRef },\n { provide: ACP_DRAWER_DATA, useValue: _config.data },\n ];\n },\n });\n\n this.openDrawers.push(drawerRef);\n this.afterOpened.next(drawerRef);\n\n drawerRef.afterDismissed().subscribe(() => {\n const index = this.openDrawers.indexOf(drawerRef);\n\n if (index > -1) {\n this.openDrawers.splice(index, 1);\n\n if (!this.openDrawers.length) {\n this._getAfterAllDismissed().next();\n }\n }\n });\n\n return drawerRef;\n }\n\n /**\n * Dismisses all of the currently-open drawers.\n * This will close all drawers at the current level and emit the afterAllDismissed event.\n */\n dismissAll(): void {\n this._dismissDrawers(this.openDrawers);\n }\n\n /**\n * Finds an open drawer by its id.\n * @param id ID to use when looking up the drawer.\n * @returns The drawer reference if found, undefined otherwise.\n */\n getDrawerById(id: string): AcpDrawerRef<any> | undefined {\n return this.openDrawers.find(drawer => drawer.id === id);\n }\n\n /**\n * Lifecycle hook that is called when the service is destroyed.\n * Dismisses all drawers at this level and completes observables.\n */\n ngOnDestroy() {\n // Only dismiss the drawers at this level on destroy\n // since the parent service may still be active.\n this._dismissDrawers(this._openDrawersAtThisLevel);\n this._afterAllDismissedAtThisLevel.complete();\n this._afterOpenedAtThisLevel.complete();\n }\n\n /**\n * Dismisses multiple drawers.\n * @param drawers Array of drawer references to dismiss\n */\n private _dismissDrawers(drawers: AcpDrawerRef<any>[]) {\n let i = drawers.length;\n\n while (i--) {\n drawers[i].dismiss();\n }\n }\n}\n","import { DomPortalOutlet, TemplatePortal } from '@angular/cdk/portal';\nimport {\n ApplicationRef,\n ChangeDetectorRef,\n Directive,\n DOCUMENT,\n InjectionToken,\n Injector,\n OnDestroy,\n TemplateRef,\n ViewContainerRef,\n inject,\n} from '@angular/core';\nimport { Subject } from 'rxjs';\n\n/**\n * Injection token that can be used to reference instances of `AcpPopoverContent`. It serves\n * as alternative token to the actual `AcpPopoverContent` class which could cause unnecessary\n * retention of the class and its directive metadata.\n */\nexport const ACP_POPOVER_CONTENT = new InjectionToken<AcpPopoverContent>('AcpPopoverContent');\n\n/**\n * Base class for popover content that provides common functionality.\n *\n * This abstract class handles the attachment and detachment of popover content\n * using Angular CDK portals. It manages the DOM manipulation required to display\n * popover content in an overlay.\n *\n * @docs-private\n */\n@Directive()\nexport abstract class _AcpPopoverContentBase implements OnDestroy {\n private _template = inject(TemplateRef<any>);\n private _appRef = inject(ApplicationRef);\n private _injector = inject(Injector);\n private _viewContainerRef = inject(ViewContainerRef);\n private _document = inject(DOCUMENT);\n private _changeDetectorRef = inject(ChangeDetectorRef, { optional: true });\n\n private _portal!: TemplatePortal<any>;\n private _outlet!: DomPortalOutlet;\n\n /** Emits when the popover content has been attached. */\n readonly _attached = new Subject<void>();\n\n /**\n * Attaches the content with a particular context.\n * @param context Context data to pass to the template\n * @docs-private\n */\n attach(context: any = {}) {\n if (!this._portal) {\n this._portal = new TemplatePortal(this._template, this._viewContainerRef);\n }\n\n this.detach();\n\n if (!this._outlet) {\n this._outlet = new DomPortalOutlet(\n this._document.createElement('div'),\n this._appRef,\n this._injector,\n );\n }\n\n const element: HTMLElement = this._template.elementRef.nativeElement;\n\n // Because we support opening the same popover from different triggers (which in turn have their\n // own `OverlayRef` panel), we have to re-insert the host element every time, otherwise we\n // risk it staying attached to a pane that's no longer in the DOM.\n element.parentNode!.insertBefore(this._outlet.outletElement, element);\n\n // When `AcpPopoverContent` is used in an `OnPush` component, the insertion of the popover\n // content via `createEmbeddedView` does not cause the content to be seen as \"dirty\"\n // by Angular. This causes the `@ContentChildren` for popover items within the popover to\n // not be updated by Angular. By explicitly marking for check here, we tell Angular that\n // it needs to check for new popover items and update the `@ContentChild` in `AcpPopover`.\n // @breaking-change 9.0.0 Make change detector ref required\n if (this._changeDetectorRef) {\n this._changeDetectorRef.markForCheck();\n }\n\n this._portal.attach(this._outlet, context);\n this._attached.next();\n }\n\n /**\n * Detaches the content from the DOM.\n * @docs-private\n */\n detach() {\n if (this._portal.isAttached) {\n this._portal.detach();\n }\n }\n\n /**\n * Lifecycle hook called when the component is destroyed.\n * Cleans up the portal outlet to prevent memory leaks.\n */\n ngOnDestroy() {\n if (this._outlet) {\n this._outlet.dispose();\n }\n }\n}\n\n/**\n * Popover content that will be rendered lazily once the popover is opened.\n *\n * This directive allows you to define content that should be rendered inside\n * a popover panel. The content is only created when the popover is actually\n * opened, which can improve performance for complex content.\n *\n * @example\n * ```html\n * <ng-template acpPopoverContent>\n * <div>This content will be shown in the popover</div>\n * </ng-template>\n * ```\n */\n@Directive({\n selector: 'ng-template[acpPopoverContent]',\n standalone: true,\n providers: [{ provide: ACP_POPOVER_CONTENT, useExisting: AcpPopoverContent }],\n})\nexport class AcpPopoverContent extends _AcpPopoverContentBase {\n constructor() {\n super();\n }\n}\n","/**\n * Throws an exception for the case when popover trigger doesn't have a valid acp-popover instance\n */\nexport function throwAcpPopoverMissingError() {\n throw Error(`acp-popover-trigger: must pass in an acp-popover instance.\n\n Example:\n <acp-popover #popover=\"acpPopover\"></acp-popover>\n <button [acpPopoverTriggerFor]=\"popover\"></button>`);\n}\n\n/**\n * Throws an exception for the case when popover's acpPopoverPosition[0] value isn't valid.\n * In other words, it doesn't match 'above', 'below', 'before' or 'after'.\n */\nexport function throwAcpPopoverInvalidPositionStart() {\n throw Error(`acpPopoverPosition[0] value must be either 'above', 'below', 'before' or 'after'.\n Example: <acp-popover [position]=\"['below', 'after']\" #popover=\"acpPopover\"></acp-popover>`);\n}\n\n/**\n * Throws an exception for the case when popover's acpPopoverPosition[1] value isn't valid.\n * In other words, it doesn't match 'above', 'below', 'before', 'after' or 'center'.\n */\nexport function throwAcpPopoverInvalidPositionEnd() {\n throw Error(`acpPopoverPosition[1] value must be either 'above', 'below', 'before', 'after' or 'center'.\n Example: <acp-popover [position]=\"['below', 'after']\" #popover=\"acpPopover\"></acp-popover>`);\n}\n","import { CdkTrapFocus } from '@angular/cdk/a11y';\nimport { Direction } from '@angular/cdk/bidi';\nimport { ESCAPE, hasModifierKey } from '@angular/cdk/keycodes';\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChild,\n ElementRef,\n EventEmitter,\n InjectionToken,\n Input,\n NgZone,\n OnDestroy,\n OnInit,\n Output,\n TemplateRef,\n ViewChild,\n ViewEncapsulation,\n booleanAttribute,\n inject,\n} from '@angular/core';\nimport { _animationsDisabled } from '@angular/material/core';\nimport { Subject } from 'rxjs';\nimport { ACP_POPOVER_CONTENT, AcpPopoverContent } from './popover-content';\nimport {\n throwAcpPopoverInvalidPositionEnd,\n throwAcpPopoverInvalidPositionStart,\n} from './popover-errors';\nimport { AcpPopoverDefaultOptions, AcpPopoverPanel } from './popover-interfaces';\nimport { AcpPopoverPosition, AcpPopoverTriggerEvent, PopoverCloseReason } from './popover-types';\n\n/** Injection token to be used to override the default options for `acp-popover`. */\nexport const ACP_POPOVER_DEFAULT_OPTIONS = new InjectionToken<AcpPopoverDefaultOptions>(\n 'acp-popover-default-options',\n {\n providedIn: 'root',\n factory: () => ({\n backdropClass: 'cdk-overlay-transparent-backdrop',\n }),\n },\n);\n\nlet popoverPanelUid = 0;\n\n/** Name of the enter animation `@keyframes`. */\nconst ENTER_ANIMATION = '_acp-popover-enter';\n\n/** Name of the exit animation `@keyframes`. */\nconst EXIT_ANIMATION = '_acp-popover-exit';\n\n/**\n * ACP Popover component that displays content in an overlay panel.\n *\n * The popover can be triggered by hover or click events and supports\n * various positioning options. It's built on top of Angular CDK Overlay\n * and provides a flexible way to display contextual information.\n *\n * ## Basic Usage\n * @example\n * ```html\n * <acp-popover #popover=\"acpPopover\" [position]=\"['below', 'after']\">\n * <div>Popover content goes here</div>\n * </acp-popover>\n *\n * <button [acpPopoverTriggerFor]=\"popover\">Show popover</button>\n * ```\n *\n * ## Closing Explicitly\n *\n * ### 1. Close from within popover content:\n * @example\n * ```html\n * <acp-popover #popover=\"acpPopover\">\n * <div>\n * <p>Popover content</p>\n * <button (click)=\"popover.close()\">Close</button>\n * <button (click)=\"popover.close('user-action')\">Close with reason</button>\n * </div>\n * </acp-popover>\n * ```\n *\n * ### 2. Close from component using ViewChild:\n * @example\n * ```typescript\n * @Component({\n * template: `\n * <acp-popover #popover=\"acpPopover\">\n * <div>Content with external close</div>\n * </acp-popover>\n * <button [acpPopoverTriggerFor]=\"popover\">Open</button>\n * <button (click)=\"closePopover()\">Close from outside</button>\n * `\n * })\n * export class MyComponent {\n * @ViewChild('popover') popover!: AcpPopover;\n *\n * closePopover() {\n * this.popover.close('programmatic');\n * }\n * }\n * ```\n *\n * ### 3. Close using trigger reference:\n * @example\n * ```html\n * <acp-popover #popover=\"acpPopover\">\n * <div>Popover content</div>\n * </acp-popover>\n *\n * <button [acpPopoverTriggerFor]=\"popover\" #trigger=\"acpPopoverTrigger\">\n * Show popover\n * </button>\n * <button (click)=\"trigger.closePopover()\">Close via trigger</button>\n * <button (click)=\"trigger.closePopoverWithReason('external')\">Close with reason</button>\n * ```\n *\n * ## Automatic Closing\n * The popover automatically closes on:\n * - ESC key press\n * - Click outside (backdrop) when `closeOnBackdropClick` is true\n * - Mouse leave after delay when `triggerEvent` is 'hover'\n * - Click on panel when `closeOnPanelClick` is true\n */\n@Component({\n selector: 'acp-popover',\n templateUrl: './popover.html',\n styleUrl: './popover.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n exportAs: 'acpPopover',\n imports: [CdkTrapFocus],\n})\nexport class AcpPopover implements AcpPopoverPanel, OnInit, OnDestroy {\n private _changeDetectorRef = inject(ChangeDetectorRef);\n private _elementRef = inject(ElementRef);\n private _unusedNgZone = inject(NgZone);\n private _defaultOptions = inject<AcpPopoverDefaultOptions>(ACP_POPOVER_DEFAULT_OPTIONS);\n\n private _previousElevation?: string;\n private _elevationPrefix = 'mat-elevation-z';\n private _baseElevation: number | null = null;\n private _exitFallbackTimeout: ReturnType<typeof setTimeout> | undefined;\n private _mouseleaveTimer: ReturnType<typeof setTimeout> | undefined;\n\n /** Whether animations are currently disabled. */\n protected _animationsDisabled = _animationsDisabled();\n\n /** Config object to be passed into the popover's class. */\n _classList: Record<string, boolean> = {};\n\n /** Current state of the panel animation. */\n _panelAnimationState: 'void' | 'enter' = 'void';\n\n /** Emits whenever an animation on the popover completes. */\n readonly _animationDone = new Subject<'void' | 'enter'>();\n\n /** Whether the popover is animating. */\n _isAnimating = false;\n\n /** Closing disabled on popover */\n closeDisabled = false;\n\n /** Config object to be passed into the popover's arrow style */\n arrowStyles?: Record<string, unknown>;\n\n /** Layout direction of the popover. */\n direction?: Direction;\n\n /** Class or list of classes to be added to the overlay panel. */\n overlayPanelClass: string | string[] = this._defaultOptions.overlayPanelClass || '';\n\n /** Class to be added to the backdrop element. */\n @Input() backdropClass = this._defaultOptions.backdropClass;\n\n /** aria-label for the popover panel. */\n @Input('aria-label') ariaLabel?: string;\n\n /** aria-labelledby for the popover panel. */\n @Input('aria-labelledby') ariaLabelledby?: string;\n\n /** aria-describedby for the popover panel. */\n @Input('aria-describedby') ariaDescribedby?: string;\n\n /** Popover's trigger event. */\n @Input() triggerEvent: AcpPopoverTriggerEvent = this._defaultOptions.triggerEvent ?? 'hover';\n\n /** Popover's enter delay. */\n @Input() enterDelay = this._defaultOptions.enterDelay ?? 100;\n\n /** Popover's leave delay. */\n @Input() leaveDelay = this._defaultOptions.leaveDelay ?? 100;\n\n /** Popover's position. */\n @Input()\n get position() {\n return this._position;\n }\n set position(value: AcpPopoverPosition) {\n if (!['before', 'after', 'above', 'below'].includes(value[0])) {\n throwAcpPopoverInvalidPositionStart();\n }\n if (!['before', 'after', 'above', 'below', 'center'].includes(value[1])) {\n throwAcpPopoverInvalidPositionEnd();\n }\n this._position = value;\n this.setPositionClasses();\n }\n private _position = this._defaultOptions.position ?? ['below', 'after'];\n\n /** Popover-panel's X offset. */\n @Input() xOffset = this._defaultOptions.xOffset ?? 0;\n\n /** Popover-panel's Y offset. */\n @Input() yOffset = this._defaultOptions.yOffset ?? 0;\n\n /** Popover-arrow's width. */\n @Input() arrowWidth = this._defaultOptions.arrowWidth ?? 16;\n\n /** Popover-arrow's height. */\n @Input() arrowHeight = this._defaultOptions.arrowHeight ?? 16;\n\n /** Popover-arrow's X offset. */\n @Input() arrowOffsetX = this._defaultOptions.arrowOffsetX ?? 20;\n\n /** Popover-arrow's Y offset. */\n @Input() arrowOffsetY = this._defaultOptions.arrowOffsetY ?? 20;\n\n /** Whether the popover arrow should be hidden. */\n @Input({ transform: booleanAttribute })\n hideArrow = this._defaultOptions.hideArrow ?? false;\n\n /** Whether popover can be closed when click the popover-panel. */\n @Input({ transform: booleanAttribute })\n closeOnPanelClick = this._defaultOptions.closeOnPanelClick ?? false;\n\n /** Whether popover can be closed when click the backdrop. */\n @Input({ transform: booleanAttribute })\n closeOnBackdropClick = this._defaultOptions.closeOnBackdropClick ?? true;\n\n /** Whether enable focus trap using `cdkTrapFocus`. */\n @Input({ transform: booleanAttribute })\n focusTrapEnabled = this._defaultOptions.focusTrapEnabled ?? false;\n\n /** Whether enable focus trap auto capture using `cdkTrapFocusAutoCapture`. */\n @Input({ transform: booleanAttribute })\n focusTrapAutoCaptureEnabled = this._defaultOptions.focusTrapAutoCaptureEnabled ?? false;\n\n /** Whether the popover has a backdrop. It will always be false if the trigger event is hover. */\n @Input({ transform: booleanAttribute })\n hasBackdrop = this._defaultOptions.hasBackdrop;\n\n /**\n * This method takes classes set on the host acp-popover element and applies them on the\n * popover template that displays in the overlay container. Otherwise, it's difficult\n * to style the containing popover from outside the component.\n * @param classes list of class names\n */\n @Input()\n set panelClass(classes: string) {\n const previousPanelClass = this._previousPanelClass;\n const newClassList = { ...this._classList };\n\n if (previousPanelClass && previousPanelClass.length) {\n previousPanelClass.split(' ').forEach((className: string) => {\n newClassList[className] = false;\n });\n }\n\n this._previousPanelClass = classes;\n\n if (classes && classes.length) {\n classes.split(' ').forEach((className: string) => {\n newClassList[className] = true;\n });\n\n this._elementRef.nativeElement.className = '';\n\n this.setPositionClasses();\n }\n\n this._classList = newClassList;\n }\n private _previousPanelClass?: string;\n\n /**\n * This method takes classes set on the host acp-popover element and applies them on the\n * popover template that displays in the overlay container. Otherwise, it's difficult\n * to style the containing popover from outside the component.\n * @deprecated Use `panelClass` instead.\n * @breaking-change 8.0.0\n */\n @Input()\n get classList(): string {\n return this.panelClass;\n }\n set classList(classes: string) {\n this.panelClass = classes;\n }\n\n /** Event emitted when the popover is closed. */\n @Output() closed = new EventEmitter<PopoverCloseReason>();\n\n /**\n * Programmatically closes the popover.\n * @param reason Optional reason for closing\n */\n close(reason?: PopoverCloseReason): void {\n this.closed.emit(reason || 'programmatic');\n }\n\n /** @docs-private */\n @ViewChild(TemplateRef) templateRef!: TemplateRef<any>;\n\n /**\n * Popover content that will be rendered lazily.\n * @docs-private\n */\n @ContentChild(ACP_POPOVER_CONTENT) lazyContent?: AcpPopoverContent;\n\n readonly panelId = `acp-popover-panel-${popoverPanelUid++}`;\n\n /**\n * Lifecycle hook called when the component is initialized.\n * Sets up the initial position classes for the popover.\n */\n ngOnInit() {\n this.setPositionClasses();\n }\n\n /**\n * Lifecycle hook called when the component is destroyed.\n * Cleans up subscriptions and timers.\n */\n ngOnDestroy() {\n this.closed.complete();\n clearTimeout(this._exitFallbackTimeout);\n clearTimeout(this._mouseleaveTimer);\n }\n\n /**\n * Handle a keyboard event from the popover, delegating to the appropriate action.\n * @param event The keyboard event to handle\n */\n _handleKeydown(event: KeyboardEvent) {\n const keyCode = event.keyCode;\n\n switch (keyCode) {\n case ESCAPE:\n if (!hasModifierKey(event)) {\n event.preventDefault();\n this.closed.emit('keydown');\n }\n break;\n }\n }\n\n /**\n * Close popover on click if `closeOnPanelClick` is true.\n */\n _handleClick() {\n if (this.closeOnPanelClick) {\n this.closed.emit('click');\n }\n }\n\n /**\n * Disables close of popover when leaving trigger element and mouse over the popover.\n */\n _handleMouseOver() {\n if (this.triggerEvent === 'hover') {\n // Cancel any pending close timer\n if (this._mouseleaveTimer) {\n clearTimeout(this._mouseleaveTimer);\n this._mouseleaveTimer = undefined;\n }\n this.closeDisabled = true;\n }\n }\n\n /**\n * Enables close of popover when mouse leaving popover element.\n */\n _handleMouseLeave() {\n if (this.triggerEvent === 'hover') {\n this._mouseleaveTimer = setTimeout(() => {\n this.closeDisabled = false;\n this.closed.emit();\n }, this.leaveDelay);\n }\n }\n\n /**\n * Sets the current styles for the popover to allow for dynamically changing settings.\n * @param pos The position to set styles for, defaults to current position\n */\n setCurrentStyles(pos = this.position) {\n const left =\n pos[1] === 'after'\n ? `${this.arrowOffsetX - this.arrowWidth / 2}px`\n : pos[1] === 'center'\n ? `calc(50% - ${this.arrowWidth / 2}px)`\n : '';\n const right = pos[1] === 'before' ? `${this.arrowOffsetX - this.arrowWidth / 2}px` : '';\n\n const bottom =\n pos[1] === 'above'\n ? `${this.arrowOffsetY - this.arrowHeight / 2}px`\n : pos[1] === 'center'\n ? `calc(50% - ${this.arrowHeight / 2}px)`\n : '';\n const top = pos[1] === 'below' ? `${this.arrowOffsetY - this.arrowHeight / 2}px` : '';\n\n this.arrowStyles =\n pos[0] === 'above' || pos[0] === 'below'\n ? {\n left: this.direction === 'ltr' ? left : right,\n right: this.direction === 'ltr' ? right : left,\n }\n : { top, bottom };\n }\n\n /**\n * It's necessary to set position-based classes to ensure the popover panel animation\n * folds out from the correct direction.\n * @param pos The position to set classes for, defaults to current position\n */\n setPositionClasses(pos = this.position): void {\n this._classList = {\n ...this._classList,\n ['acp-popover-before-above']: pos[0] === 'before' && pos[1] === 'above',\n ['acp-popover-before-center']: pos[0] === 'before' && pos[1] === 'center',\n ['acp-popover-before-below']: pos[0] === 'before' && pos[1] === 'below',\n ['acp-popover-after-above']: pos[0] === 'after' && pos[1] === 'above',\n ['acp-popover-after-center']: pos[0] === 'after' && pos[1] === 'center',\n ['acp-popover-after-below']: pos[0] === 'after' && pos[1] === 'below',\n ['acp-popover-above-before']: pos[0] === 'above' && pos[1] === 'before',\n ['acp-popover-above-center']: pos[0] === 'above' && pos[1] === 'center',\n ['acp-popover-above-after']: pos[0] === 'above' && pos[1] === 'after',\n ['acp-popover-below-before']: pos[0] === 'below' && pos[1] === 'before',\n ['acp-popover-below-center']: pos[0] === 'below' && pos[1] === 'center',\n ['acp-popover-below-after']: pos[0] === 'below' && pos[1] === 'after',\n };\n\n this._changeDetectorRef.markForCheck();\n }\n\n /**\n * Sets the popover-panel's elevation.\n * Applies Material Design elevation classes based on the base elevation level.\n */\n setElevation(): void {\n // The base elevation depends on which version of the spec\n // we're running so we have to resolve it at runtime.\n if (this._baseElevation === null) {\n const styles =\n typeof getComputedStyle === 'function'\n ? getComputedStyle(this._elementRef.nativeElement)\n : null;\n const value = styles?.getPropertyValue('--acp-popover-base-elevation-level') || '8';\n this._baseElevation = parseInt(value);\n }\n\n // The elevation starts at the base and increases by one for each level.\n // Capped at 24 because that's the maximum elevation defined in the Material design spec.\n const elevation = Math.min(this._baseElevation, 24);\n const newElevation = `${this._elevationPrefix}${elevation}`;\n const customElevation = Object.keys(this._classList).find(className => {\n return className.startsWith(this._elevationPrefix);\n });\n if (!customElevation || customElevation === this._previousElevation) {\n const newClassList = { ...this._classList };\n if (this._previousElevation) {\n newClassList[this._previousElevation] = false;\n }\n newClassList[newElevation] = true;\n this._previousElevation = newElevation;\n this._classList = newClassList;\n }\n }\n\n /**\n * Callback that is invoked when the panel animation completes.\n * @param state The animation state that completed\n */\n protected _onAnimationDone(state: string) {\n const isExit = state === EXIT_ANIMATION;\n\n if (isExit || state === ENTER_ANIMATION) {\n if (isExit) {\n clearTimeout(this._exitFallbackTimeout);\n this._exitFallbackTimeout = undefined;\n }\n this._animationDone.next(isExit ? 'void' : 'enter');\n this._isAnimating = false;\n }\n }\n\n /**\n * Callback that is invoked when the panel animation starts.\n * @param state The animation state that started\n */\n protected _onAnimationStart(state: string) {\n if (state === ENTER_ANIMATION || state === EXIT_ANIMATION) {\n this._isAnimating = true;\n }\n }\n\n /**\n * Sets the open state of the popover and manages animations.\n * @param isOpen Whether the popover should be open\n */\n _setIsOpen(isOpen: boolean) {\n this._panelAnimationState = isOpen ? 'enter' : 'void';\n\n if (isOpen) {\n //\n } else if (!this._animationsDisabled) {\n // Some apps do `* { animation: none !important; }` in tests which will prevent the\n // `animationend` event from firing. Since the exit animation is loading-bearing for\n // removing the content from the DOM, add a fallback timer.\n this._exitFallbackTimeout = setTimeout(() => this._onAnimationDone(EXIT_ANIMATION), 200);\n }\n\n // Animation events won't fire when animations are disabled so we simulate them.\n if (this._animationsDisabled) {\n setTimeout(() => {\n this._onAnimationDone(isOpen ? ENTER_ANIMATION : EXIT_ANIMATION);\n });\n }\n\n this._changeDetectorRef.markForCheck();\n }\n}\n","<ng-template>\n <!-- eslint-disable @angular-eslint/template/mouse-events-have-key-events -->\n <div\n [id]=\"panelId\"\n class=\"acp-popover-panel\"\n [class]=\"_classList\"\n [class.acp-popover-panel-animations-disabled]=\"_animationsDisabled\"\n [class.acp-popover-panel-exit-animation]=\"_panelAnimationState === 'void'\"\n [class.acp-popover-panel-animating]=\"_isAnimating\"\n [class.acp-popover-panel-without-arrow]=\"hideArrow\"\n (keydown)=\"_handleKeydown($event)\"\n (click)=\"_handleClick()\"\n (mouseover)=\"_handleMouseOver()\"\n (mouseleave)=\"_handleMouseLeave()\"\n tabindex=\"-1\"\n role=\"dialog\"\n (animationstart)=\"_onAnimationStart($event.animationName)\"\n (animationend)=\"_onAnimationDone($event.animationName)\"\n (animationcancel)=\"_onAnimationDone($event.animationName)\"\n [attr.aria-label]=\"ariaLabel || null\"\n [attr.aria-labelledby]=\"ariaLabelledby || null\"\n [attr.aria-describedby]=\"ariaDescribedby || null\"\n [cdkTrapFocus]=\"focusTrapEnabled\"\n [cdkTrapFocusAutoCapture]=\"focusTrapAutoCaptureEnabled\"\n >\n <div class=\"acp-popover-content\">\n <ng-content></ng-content>\n </div>\n @if (!hideArrow) {\n <div class=\"acp-popover-direction-arrow\" [style]=\"arrowStyles\"></div>\n }\n </div>\n</ng-template>\n","import { FocusMonitor, FocusOrigin, isFakeMousedownFromScreenReader } from '@angular/cdk/a11y';\nimport { Direction, Directionality } from '@angular/cdk/bidi';\nimport { ENTER, SPACE } from '@angular/cdk/keycodes';\nimport {\n ConnectedPosition,\n FlexibleConnectedPositionStrategy,\n HorizontalConnectionPos,\n Overlay,\n OverlayConfig,\n OverlayRef,\n ScrollStrategy,\n VerticalConnectionPos,\n} from '@angular/cdk/overlay';\nimport { TemplatePortal } from '@angular/cdk/portal';\nimport {\n AfterContentInit,\n ChangeDetectorRef,\n Directive,\n ElementRef,\n EventEmitter,\n InjectionToken,\n Input,\n OnDestroy,\n Output,\n ViewContainerRef,\n inject,\n} from '@angular/core';\nimport { merge, of as observableOf, Subscription } from 'rxjs';\nimport { filter, take } from 'rxjs/operators';\nimport { AcpPopover } from './popover';\nimport { throwAcpPopoverMissingError } from './popover-errors';\nimport { AcpPopoverPanel } from './popover-interfaces';\nimport { AcpPopoverTarget } from './popover-target';\nimport {\n AcpPopoverPosition,\n AcpPopoverPositionStart,\n AcpPopoverTriggerEvent,\n PopoverCloseReason,\n} from './popover-types';\n\n/** Injection token that determines the scroll handling while the popover is open. */\nexport const ACP_POPOVER_SCROLL_STRATEGY = new InjectionToken<() => ScrollStrategy>(\n 'acp-popover-scroll-strategy',\n {\n providedIn: 'root',\n factory: () => {\n const overlay = inject(Overlay);\n return () => overlay.scrollStrategies.reposition();\n },\n },\n);\n\n/**\n * This directive is intended to be used in conjunction with an `acp-popover` tag. It is\n * responsible for toggling the display of the provided popover instance.\n *\n * The trigger handles various events (click, hover) and manages the popover's lifecycle,\n * including opening, closing, positioning, and focus management.\n *\n * ## Basic Usage\n * @example\n * ```html\n * <acp-popover #popover=\"acpPopover\">\n * <div>Popover content</div>\n * </acp-popover>\n *\n * <button [acpPopoverTriggerFor]=\"popover\">\n * Show popover\n * </button>\n * ```\n *\n * ## Programmatic Control\n * @example\n * ```html\n * <acp-popover #popover=\"acpPopover\">\n * <div>Popover content</div>\n * </acp-popover>\n *\n * <button [acpPopoverTriggerFor]=\"popover\" #trigger=\"acpPopoverTrigger\">\n * Toggle popover\n * </button>\n *\n * <!-- Programmatic control -->\n * <button (click)=\"trigger.openPopover()\">Open</button>\n * <button (click)=\"trigger.closePopover()\">Close</button>\n * <button (click)=\"trigger.closePopoverWithReason('manual')\">Close with reason</button>\n * <button (click)=\"trigger.togglePopover()\">Toggle</button>\n * ```\n *\n * ## Custom Target\n * @example\n * ```html\n * <div acpPopoverTarget #target=\"acpPopoverTarget\">Target element</div>\n * <button [acpPopoverTriggerFor]=\"popover\" [targetElement]=\"target\">\n * Trigger (popover appears at target)\n * </button>\n * ```\n */\n@Directive({\n selector: '[acpPopoverTriggerFor]',\n exportAs: 'acpPopoverTrigger',\n standalone: true,\n host: {\n 'aria-haspopup': 'true',\n '[attr.aria-expanded]': 'popoverOpen',\n '[attr.aria-controls]': 'popoverOpen ? popover.panelId : null',\n '(click)': '_handleClick($event)',\n '(mouseenter)': '_handleMouseEnter($event)',\n '(mouseleave)': '_handleMouseLeave($event)',\n '(mousedown)': '_handleMousedown($event)',\n '(keydown)': '_handleKeydown($event)',\n },\n})\nexport class AcpPopoverTrigger implements AfterContentInit, OnDestroy {\n private _overlay = inject(Overlay);\n private _elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private _viewContainerRef = inject(ViewContainerRef);\n private _dir = inject(Directionality, { optional: true });\n private _changeDetectorRef = inject(ChangeDetectorRef);\n private _focusMonitor = inject(FocusMonitor);\n\n private _portal?: TemplatePortal;\n private _overlayRef: OverlayRef | null = null;\n private _popoverOpen = false;\n private _halt = false;\n private _positionSubscription = Subscription.EMPTY;\n private _popoverCloseSubscription = Subscription.EMPTY;\n private _pendingRemoval: Subscription | undefined;\n private _closingActionsSubscription = Subscription.EMPTY;\n private _scrollStrategy = inject(ACP_POPOVER_SCROLL_STRATEGY);\n private _mouseoverTimer: any;\n private _mouseleaveTimer: any;\n\n // Tracking input type is necessary so it's possible to only auto-focus\n // the first item of the list when the popover is opened via the keyboard\n _openedBy: Exclude<FocusOrigin, 'program' | null> | undefined = undefined;\n\n /** References the popover instance that the trigger is associated with. */\n @Input('acpPopoverTriggerFor')\n get popover() {\n return this._popover;\n }\n set popover(popover: AcpPopoverPanel) {\n if (popover === this._popover) {\n return;\n }\n\n this._popover = popover;\n this._popoverCloseSubscription.unsubscribe();\n\n if (popover) {\n this._popoverCloseSubscription = popover.closed.subscribe((reason: PopoverCloseReason) => {\n this._destroyPopover(reason);\n });\n }\n }\n private _popover!: AcpPopoverPanel;\n\n /** Data to be passed along to any lazily-rendered content. */\n @Input() popoverData: any;\n\n /** References the popover target instance that the trigger is associated with. */\n @Input() targetElement?: AcpPopoverTarget;\n\n /** Popover trigger event */\n @Input() triggerEvent?: AcpPopoverTriggerEvent;\n\n /** Event emitted when the associated popover is opened. */\n @Output() popoverOpened = new EventEmitter<void>();\n\n /** Event emitted when the associated popover is closed. */\n @Output() popoverClosed = new EventEmitter<void>();\n\n /**\n * Lifecycle hook called after content initialization.\n * Validates the popover reference and sets up initial configuration.\n */\n ngAfterContentInit() {\n this._checkPopover();\n this._setCurrentConfig();\n }\n\n /**\n * Lifecycle hook called when the component is destroyed.\n * Cleans up subscriptions and overlay references.\n */\n ngOnDestroy() {\n this._halt = true;\n this._positionSubscription.unsubscribe();\n this._pendingRemoval?.unsubscribe();\n this._popoverCloseSubscription.unsubscribe();\n this._closingActionsSubscription.unsubscribe();\n\n if (this._mouseoverTimer) {\n clearTimeout(this._mouseoverTimer);\n this._mouseoverTimer = null;\n }\n\n if (this._mouseleaveTimer) {\n clearTimeout(this._mouseleaveTimer);\n this._mouseleaveTimer = null;\n }\n\n if (this._overlayRef) {\n this._overlayRef.dispose();\n this._overlayRef = null;\n }\n }\n\n /**\n * Sets the current configuration for the popover.\n * Updates trigger event and applies current styles.\n */\n private _setCurrentConfig() {\n if (this.triggerEvent) {\n this.popover.triggerEvent = this.triggerEvent;\n }\n\n this.popover.setCurrentStyles();\n }\n\n /** Whether the popover is open. */\n get popoverOpen(): boolean {\n return this._popoverOpen;\n }\n\n /** The text direction of the containing app. */\n get dir(): Direction {\n return this._dir && this._dir.value === 'rtl' ? 'rtl' : 'ltr';\n }\n\n /**\n * Handles mouse click on the trigger.\n * @param _event The mouse event\n */\n _handleClick(_event: MouseEvent): void {\n if (this.popover.triggerEvent === 'click') {\n this.togglePopover();\n }\n }\n\n /**\n * Handles mouse enter on the trigger.\n * @param _event The mouse event\n */\n _handleMouseEnter(_event: MouseEvent): void {\n this._halt = false;\n\n if (this.popover.triggerEvent === 'hover') {\n this._mouseoverTimer = setTimeout(() => {\n this.openPopover();\n }, this.popover.enterDelay);\n }\n }\n\n /**\n * Handles mouse leave on the trigger.\n * @param _event The mouse event\n */\n _handleMouseLeave(_event: MouseEvent): void {\n if (this.popover.triggerEvent === 'hover') {\n if (this._mouseoverTimer) {\n clearTimeout(this._mouseoverTimer);\n this._mouseoverTimer = null;\n }\n\n if (this._popoverOpen) {\n this._mouseleaveTimer = setTimeout(() => {\n if (!this.popover.closeDisabled) {\n this.closePopover();\n }\n }, this.popover.leaveDelay);\n } else {\n this._halt = true;\n }\n }\n }\n\n /** Handles mouse presses on the trigger. */\n _handleMousedown(event: MouseEvent): void {\n if (!isFakeMousedownFromScreenReader(event)) {\n // Since right or middle button clicks won't trigger the `click` event,\n // we shouldn't consider the popover as opened by mouse in those cases.\n this._openedBy = event.button === 0 ? 'mouse' : undefined;\n }\n }\n\n /** Handles key presses on the trigger. */\n _handleKeydown(event: KeyboardEvent): void {\n const keyCode = event.keyCode;\n\n // Pressing enter on the trigger will trigger the click handler later.\n if (keyCode === ENTER || keyCode === SPACE) {\n this._openedBy = 'keyboard';\n }\n }\n\n /** Toggles the popover between the open and closed states. */\n togglePopover(): void {\n return this._popoverOpen ? this.closePopover() : this.openPopover();\n }\n\n /** Opens the popover. */\n openPopover(): void {\n if (this._popoverOpen || this._halt) {\n return;\n }\n\n this._checkPopover();\n\n this._pendingRemoval?.unsubscribe();\n\n const overlayRef = this._createOverlay();\n const overlayConfig = overlayRef.getConfig();\n\n this._setPosition(overlayConfig.positionStrategy as FlexibleConnectedPositionStrategy);\n if (this.popover.triggerEvent === 'click') {\n overlayConfig.hasBackdrop = this.popover.hasBackdrop ?? true;\n }\n overlayRef.attach(this._getPortal());\n\n if (this.popover.lazyContent) {\n this.popover.lazyContent.attach(this.popoverData);\n }\n\n this._closingActionsSubscription = this._popoverClosingActions().subscribe(() =>\n this.closePopover(),\n );\n this._initPopover();\n\n if (this.popover instanceof AcpPopover) {\n this.popover._setIsOpen(true);\n }\n }\n\n /** Closes the popover. */\n closePopover(): void {\n this.popover.closed.emit();\n }\n\n /**\n * Programmatically closes the popover with a specific reason.\n * @param reason The reason for closing\n */\n closePopoverWithReason(reason: PopoverCloseReason): void {\n this.popover.closed.emit(reason);\n }\n\n /**\n * Focuses the popover trigger.\n * @param origin Source of the popover trigger's focus.\n */\n focus(origin?: FocusOrigin, options?: FocusOptions) {\n if (this._focusMonitor && origin) {\n this._focusMonitor.focusVia(this._elementRef, origin, options);\n } else {\n this._elementRef.nativeElement.focus(options);\n }\n }\n\n /** Removes the popover from the DOM. */\n private _destroyPopover(_reason: PopoverCloseReason) {\n const overlayRef = this._overlayRef;\n\n if (!overlayRef || !this.popoverOpen) {\n return;\n }\n\n // Clear the timeouts for hover events.\n if (this._mouseoverTimer) {\n clearTimeout(this._mouseoverTimer);\n this._mouseoverTimer = null;\n }\n\n if (this._mouseleaveTimer) {\n clearTimeout(this._mouseleaveTimer);\n this._mouseleaveTimer = null;\n }\n\n const popover = this.popover;\n this._closingActionsSubscription.unsubscribe();\n this._pendingRemoval?.unsubscribe();\n\n overlayRef.detach();\n\n // Note that we don't wait for the animation to finish if another trigger took\n // over the popover, because the panel will end up empty which looks glitchy.\n if (popover instanceof AcpPopover) {\n // Wait for the exit animation to finish before detaching the content.\n this._pendingRemoval = popover._animationDone\n .pipe(\n filter(event => event === 'void'),\n take(1),\n )\n .subscribe(() => {\n popover.lazyContent?.detach();\n });\n } else {\n popover.lazyContent?.detach();\n }\n\n this._openedBy = undefined;\n this._setIsPopoverOpen(false);\n }\n\n /**\n * This method sets the popover state to open.\n */\n private _initPopover(): void {\n this.popover.direction = this.dir;\n this.popover.setElevation();\n this._setIsPopoverOpen(true);\n }\n\n // set state rather than toggle to support triggers sharing a popover\n private _setIsPopoverOpen(isOpen: boolean): void {\n if (isOpen !== this._popoverOpen) {\n this._popoverOpen = isOpen;\n if (this._popoverOpen) {\n this.popoverOpened.emit();\n } else {\n this.popoverClosed.emit();\n }\n\n this._changeDetectorRef.markForCheck();\n }\n }\n\n /**\n * This method checks that a valid instance of AcpPopover has been passed into\n * `acpPopoverTriggerFor`. If not, an exception is thrown.\n */\n private _checkPopover() {\n if (!this.popover) {\n throwAcpPopoverMissingError();\n }\n }\n\n /**\n * This method creates the overlay from the provided popover's template and saves its\n * OverlayRef so that it can be attached to the DOM when openPopover is called.\n */\n private _createOverlay(): OverlayRef {\n if (!this._overlayRef) {\n const config = this._getOverlayConfig();\n this._subscribeToPositions(config.positionStrategy as FlexibleConnectedPositionStrategy);\n this._overlayRef = this._overlay.create(config);\n } else {\n const overlayConfig = this._overlayRef.getConfig();\n const positionStrategy = overlayConfig.positionStrategy as FlexibleConnectedPositionStrategy;\n positionStrategy.setOrigin(this._getTargetElement());\n }\n\n return this._overlayRef;\n }\n\n /**\n * This method builds the configuration object needed to create the overlay, the OverlayConfig.\n * @returns OverlayConfig\n */\n private _getOverlayConfig(): OverlayConfig {\n return new OverlayConfig({\n positionStrategy: this._overlay\n .position()\n .flexibleConnectedTo(this._getTargetElement())\n .withLockedPosition()\n .withGrowAfterOpen()\n .withTransformOriginOn('.acp-popover-panel'),\n backdropClass: this.popover.backdropClass || 'cdk-overlay-transparent-backdrop',\n panelClass: this.popover.overlayPanelClass,\n scrollStrategy: this._scrollStrategy(),\n direction: this._dir || undefined,\n });\n }\n\n private _getTargetElement(): ElementRef<HTMLElement> {\n if (this.targetElement) {\n return this.targetElement.elementRef;\n }\n\n return this._elementRef;\n }\n\n /**\n * Listens to changes in the position of the overlay and sets the correct classes\n * on the popover based on the new position. This ensures the animation origin is always\n * correct, even if a fallback position is used for the overlay.\n */\n private _subscribeToPositions(position: FlexibleConnectedPositionStrategy): void {\n this._positionSubscription = position.positionChanges.subscribe(change => {\n const posX =\n change.connectionPair.overlayX === 'start'\n ? 'after'\n : change.connectionPair.overlayX === 'end'\n ? 'before'\n : 'center';\n const posY =\n change.connectionPair.overlayY === 'top'\n ? 'below'\n : change.connectionPair.overlayY === 'bottom'\n ? 'above'\n : 'center';\n\n const pos: AcpPopoverPosition =\n this.popover.position[0] === 'above' || this.popover.position[0] === 'below'\n ? [posY as AcpPopoverPositionStart, posX]\n : [posX as AcpPopoverPositionStart, posY];\n\n // required for ChangeDetectionStrategy.OnPush\n this._changeDetectorRef.markForCheck();\n\n this.popover.setCurrentStyles(pos);\n this.popover.setPositionClasses(pos);\n });\n }\n\n /**\n * Sets the appropriate positions on a position strategy\n * so the overlay connects with the trigger correctly.\n * @param positionStrategy Strategy whose position to update.\n */\n private _setPosition(positionStrategy: FlexibleConnectedPositionStrategy) {\n const [originX, origin2ndX, origin3rdX]: HorizontalConnectionPos[] =\n this.popover.position[0] === 'before' || this.popover.position[1] === 'after'\n ? ['start', 'center', 'end']\n : this.popover.position[0] === 'after' || this.popover.position[1] === 'before'\n ? ['end', 'center', 'start']\n : ['center', 'start', 'end'];\n\n const [originY, origin2ndY, origin3rdY]: VerticalConnectionPos[] =\n this.popover.position[0] === 'above' || this.popover.position[1] === 'below'\n ? ['top', 'center', 'bottom']\n : this.popover.position[0] === 'below' || this.popover.position[1] === 'above'\n ? ['bottom', 'center', 'top']\n : ['center', 'top', 'bottom'];\n\n const [overlayX, overlayFallbackX]: HorizontalConnectionPos[] =\n this.popover.position[0] === 'below' || this.popover.position[0] === 'above'\n ? [originX, originX]\n : this.popover.position[0] === 'before'\n ? ['end', 'start']\n : ['start', 'end'];\n\n const [overlayY, overlayFallbackY]: VerticalConnectionPos[] =\n this.popover.position[0] === 'before' || this.popover.position[0] === 'after'\n ? [originY, originY]\n : this.popover.position[0] === 'below'\n ? ['top', 'bottom']\n : ['bottom', 'top'];\n\n const originFallbackX = overlayX;\n const originFallbackY = overlayY;\n\n const offsetX =\n this.popover.xOffset && !isNaN(Number(this.popover.xOffset))\n ? Number(this.dir === 'ltr' ? this.popover.xOffset : -this.popover.xOffset)\n : 0;\n const offsetY =\n this.popover.yOffset && !isNaN(Number(this.popover.yOffset))\n ? Number(this.popover.yOffset)\n : 0;\n\n let positions: ConnectedPosition[] = [{ originX, originY, overlayX, overlayY }];\n\n if (this.popover.position[0] === 'above' || this.popover.position[0] === 'below') {\n positions = [\n { originX, originY, overlayX, overlayY, offsetY },\n { originX: origin2ndX, originY, overlayX: origin2ndX, overlayY, offsetY },\n { originX: origin3rdX, originY, overlayX: origin3rdX, overlayY, offsetY },\n {\n originX,\n originY: originFallbackY,\n overlayX,\n overlayY: overlayFallbackY,\n offsetY: -offsetY,\n },\n {\n originX: origin2ndX,\n originY: originFallbackY,\n overlayX: origin2ndX,\n overlayY: overlayFallbackY,\n offsetY: -offsetY,\n },\n {\n originX: origin3rdX,\n originY: originFallbackY,\n overlayX: origin3rdX,\n overlayY: overlayFallbackY,\n offsetY: -offsetY,\n },\n ];\n }\n\n if (this.popover.position[0] === 'before' || this.popover.position[0] === 'after') {\n positions = [\n { originX, originY, overlayX, overlayY, offsetX },\n { originX, originY: origin2ndY, overlayX, overlayY: origin2ndY, offsetX },\n { originX, originY: origin3rdY, overlayX, overlayY: origin3rdY, offsetX },\n {\n originX: originFallbackX,\n originY,\n overlayX: overlayFallbackX,\n overlayY,\n offsetX: -offsetX,\n },\n {\n originX: originFallbackX,\n originY: origin2ndY,\n overlayX: overlayFallbackX,\n overlayY: origin2ndY,\n offsetX: -offsetX,\n },\n {\n originX: originFallbackX,\n originY: origin3rdY,\n overlayX: overlayFallbackX,\n overlayY: origin3rdY,\n offsetX: -offsetX,\n },\n ];\n }\n\n positionStrategy\n .withPositions(positions)\n .withDefaultOffsetX(offsetX)\n .withDefaultOffsetY(offsetY);\n }\n\n /** Returns a stream that emits whenever an action that should close the popover occurs. */\n private _popoverClosingActions() {\n const backdrop =\n this.popover.triggerEvent === 'click' && this.popover.closeOnBackdropClick === true\n ? this._overlayRef!.backdropClick()\n : observableOf();\n const detachments = this._overlayRef!.detachments();\n return merge(backdrop, detachments);\n }\n\n /** Gets the portal that should be attached to the overlay. */\n private _getPortal(): TemplatePortal {\n // Note that we can avoid this check by keeping the portal on the popover panel.\n // While it would be cleaner, we'd have to introduce another required method on\n // `AcpPopoverPanel`, making it harder to consume.\n if (!this._portal || this._portal.templateRef !== this.popover.templateRef) {\n this._portal = new TemplatePortal(this.popover.templateRef, this._viewContainerRef);\n }\n\n return this._portal;\n }\n}\n","import { Directive, ElementRef, inject } from '@angular/core';\n\n/**\n * Directive that marks an element as a popover target.\n *\n * This directive provides a reference to an element that can be used\n * as the target for popover positioning. It's useful when you want\n * the popover to appear relative to a different element than the trigger.\n *\n * @example\n * ```html\n * <div acpPopoverTarget #target=\"acpPopoverTarget\">Target element</div>\n * <button [acpPopoverTriggerFor]=\"popover\" [acpPopoverTargetAt]=\"target\">\n * Trigger\n * </button>\n * ```\n */\n@Directive({\n selector: 'acp-popover-target, [acpPopoverTarget]',\n exportAs: 'acpPopoverTarget',\n standalone: true,\n})\nexport class AcpPopoverTarget {\n /** Reference to the target element. */\n elementRef = inject(ElementRef);\n}\n","import {\n Component,\n OnInit,\n OnDestroy,\n ViewChild,\n ElementRef,\n ViewContainerRef,\n ComponentRef,\n ChangeDetectionStrategy,\n createComponent,\n EnvironmentInjector,\n inject,\n AfterViewInit,\n Renderer2,\n ChangeDetectorRef,\n} from '@angular/core';\nimport { MAT_DIALOG_DATA, MatDialogRef, MatDialogModule } from '@angular/material/dialog';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatProgressBarModule } from '@angular/material/progress-bar';\nimport { CdkDrag, CdkDragHandle, DragDropModule } from '@angular/cdk/drag-drop';\nimport { FormsModule } from '@angular/forms';\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\nimport { AlertDialogOptions } from '../../services';\nimport { NgClass } from '@angular/common';\nimport { Button } from '../button/button';\nimport { ButtonVariant, MaterialButtonStyle } from '@acontplus/ui-kit';\n\ntype ButtonType = 'confirm' | 'cancel' | 'deny';\n\n@Component({\n selector: 'acp-alert-dialog',\n standalone: true,\n imports: [\n FormsModule,\n MatDialogModule,\n MatButtonModule,\n MatIconModule,\n MatInputModule,\n MatFormFieldModule,\n MatProgressBarModule,\n DragDropModule,\n NgClass,\n Button,\n ],\n templateUrl: 'alert-dialog.html',\n changeDetection: ChangeDetectionStrategy.Default,\n styles: [\n `\n .alert-dialog {\n position: relative;\n overflow: hidden;\n padding: 0;\n display: flex;\n flex-direction: column;\n border-radius: 16px;\n }\n\n /* ===== ALERT HEADER ===== */\n .acp-alert-header {\n display: flex;\n align-items: flex-start;\n justify-content: space-between;\n padding: 24px 24px 0 24px;\n position: relative;\n }\n\n .acp-alert-header .alert-dialog-icon {\n margin: 0;\n flex-shrink: 0;\n margin-top: 4px; /* Alinear con el texto del título */\n }\n\n /* ===== TITLE ===== */\n .alert-dialog-title {\n margin: 0 0 12px 0;\n font-size: 20px;\n font-weight: 600;\n line-height: 1.2;\n color: #1a1a1a;\n text-align: left;\n }\n\n /* ===== CONTENT ===== */\n .alert-dialog-content {\n /* Sin padding/margin - mat-dialog-content ya los maneja */\n text-align: left;\n\n .alert-message {\n margin: 0;\n font-size: 16px;\n line-height: 1.4;\n color: #666;\n }\n }\n\n /* ===== ACTIONS ===== */\n .alert-dialog-actions {\n margin: 24px 24px 24px 24px;\n padding: 0;\n gap: 12px;\n }\n\n /* ===== CLOSE BUTTON ===== */\n .close-button {\n position: relative;\n z-index: 10;\n width: 40px;\n height: 40px;\n margin: 0;\n background-color: rgba(0, 0, 0, 0.05);\n border-radius: 50%;\n\n mat-icon {\n font-size: 20px;\n width: 20px;\n height: 20px;\n color: rgba(0, 0, 0, 0.6);\n }\n\n &:hover {\n background-color: rgba(0, 0, 0, 0.1);\n }\n }\n\n /* ===== LAYOUTS ===== */\n\n /* Modern Layout - Icon a la izquierda */\n .alert-dialog.modern-layout {\n .acp-alert-header {\n padding: 24px 24px 0 24px;\n\n .alert-dialog-icon {\n margin-right: 16px;\n\n .icon-large {\n font-size: 48px;\n width: 48px;\n height: 48px;\n }\n }\n }\n }\n\n /* Toast Layout */\n .alert-dialog.toast-layout {\n border-radius: 8px;\n\n .acp-alert-header {\n padding: 16px;\n align-items: center;\n gap: 12px;\n\n .alert-dialog-icon {\n margin: 0;\n flex-shrink: 0;\n\n .icon-large {\n font-size: 24px;\n width: 24px;\n height: 24px;\n }\n }\n\n .toast-content {\n flex: 1;\n display: flex;\n flex-direction: column;\n gap: 2px;\n min-width: 0; /* Permite que el texto se trunque si es necesario */\n\n .toast-title {\n font-size: 14px;\n font-weight: 600;\n line-height: 1.2;\n color: #1a1a1a;\n margin: 0;\n }\n\n .toast-message {\n font-size: 13px;\n line-height: 1.3;\n color: #666;\n margin: 0;\n }\n }\n\n .close-button {\n margin: 0;\n flex-shrink: 0;\n }\n }\n\n /* Ocultar contenido normal en modo toast */\n .alert-dialog-content,\n .alert-dialog-actions {\n display: none;\n }\n }\n\n /* ===== ICON POSITIONS ===== */\n .alert-dialog.icon-center {\n .acp-alert-header {\n flex-direction: column;\n text-align: center;\n align-items: center;\n padding: 24px 24px 16px 24px;\n\n .alert-dialog-icon {\n margin: 0 0 16px 0;\n }\n\n .close-button {\n position: absolute;\n top: 16px;\n right: 16px;\n }\n }\n\n .alert-dialog-title,\n .alert-dialog-content {\n text-align: center;\n }\n }\n\n .alert-dialog.icon-top {\n .acp-alert-header {\n flex-direction: column;\n align-items: flex-start;\n padding: 24px 24px 16px 24px;\n\n .alert-dialog-icon {\n margin: 0 0 16px 0;\n }\n\n .close-button {\n position: absolute;\n top: 16px;\n right: 16px;\n }\n }\n }\n\n /* ===== CONTENT ALIGNMENT ===== */\n .alert-dialog.content-left {\n .alert-dialog-title,\n .alert-dialog-content {\n text-align: left;\n }\n }\n\n .alert-dialog.content-center {\n .acp-alert-header {\n justify-content: center;\n }\n\n .alert-dialog-title,\n .alert-dialog-content {\n text-align: center;\n }\n }\n\n .alert-dialog.content-right {\n .alert-dialog-title,\n .alert-dialog-content {\n text-align: right;\n }\n }\n\n /* ===== TIMER PROGRESS ===== */\n .timer-progress {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n height: 4px;\n z-index: 5;\n border-radius: 0;\n }\n\n .timer-progress.toast-progress {\n height: 3px;\n border-radius: 0;\n }\n\n /* Asegurar que la barra de progreso sea visible */\n :host ::ng-deep .timer-progress .mdc-linear-progress__bar {\n transition: transform 50ms linear;\n }\n\n :host ::ng-deep .timer-progress .mdc-linear-progress__buffer {\n background-color: rgba(0, 0, 0, 0.1);\n }\n\n /* ===== ICON COLORS ===== */\n .icon-success mat-icon {\n color: #10b981;\n }\n\n .icon-error mat-icon {\n color: #ef4444;\n }\n\n .icon-warning mat-icon {\n color: #f59e0b;\n }\n\n .icon-info mat-icon {\n color: #3b82f6;\n }\n\n .icon-question mat-icon {\n color: #8b5cf6;\n }\n\n .icon-delete mat-icon {\n color: #ef4444;\n }\n\n /* ===== LEGACY STYLES ===== */\n .alert-dialog-image {\n margin: 1rem auto;\n display: flex;\n justify-content: center;\n align-items: center;\n }\n\n .alert-dialog-image img {\n max-width: 100%;\n border-radius: 8px;\n }\n\n .alert-input-field {\n width: 100%;\n margin-top: 1rem;\n }\n\n .confirm-button,\n .cancel-button,\n .deny-button {\n min-width: 100px;\n }\n\n .cancel-button {\n color: #333;\n }\n\n .alert-dialog-footer {\n margin: 0 24px 24px 24px;\n padding-top: 1rem;\n border-top: 1px solid #e0e0e0;\n font-size: 0.875rem;\n color: #666;\n }\n\n /* ===== CDK DRAG STYLES ===== */\n .acp-alert-header[cdkDrag] {\n cursor: move;\n user-select: none;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n }\n\n .acp-alert-header[cdkDrag]:hover {\n background-color: rgba(0, 0, 0, 0.02);\n }\n\n /* Prevent text selection during drag */\n .cdk-drag-dragging {\n user-select: none !important;\n -webkit-user-select: none !important;\n -moz-user-select: none !important;\n -ms-user-select: none !important;\n }\n\n /* ===== ANIMATIONS ===== */\n :host ::ng-deep .animation-fade .mat-mdc-dialog-container {\n animation: fadeIn 0.3s ease-out;\n }\n\n :host ::ng-deep .animation-slide .mat-mdc-dialog-container {\n animation: slideIn 0.3s ease-out;\n }\n\n :host ::ng-deep .animation-bounce .mat-mdc-dialog-container {\n animation: bounceIn 0.5s ease-out;\n }\n\n :host ::ng-deep .animation-zoom .mat-mdc-dialog-container {\n animation: zoomIn 0.3s ease-out;\n }\n\n /* ===== TOAST MODE STYLES ===== */\n :host ::ng-deep .toast-mode .mat-mdc-dialog-container {\n border-radius: 8px;\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);\n max-width: 400px;\n animation: slideInRight 0.3s ease-out;\n }\n\n :host ::ng-deep .layout-toast .mat-mdc-dialog-container {\n border-radius: 8px;\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);\n max-width: 400px;\n }\n\n /* ===== KEYFRAMES ===== */\n @keyframes fadeIn {\n from {\n opacity: 0;\n }\n to {\n opacity: 1;\n }\n }\n\n @keyframes slideIn {\n from {\n transform: translateY(-20px);\n opacity: 0;\n }\n to {\n transform: translateY(0);\n opacity: 1;\n }\n }\n\n @keyframes slideInRight {\n from {\n transform: translateX(100%);\n opacity: 0;\n }\n to {\n transform: translateX(0);\n opacity: 1;\n }\n }\n\n @keyframes bounceIn {\n 0% {\n transform: scale(0.3);\n opacity: 0;\n }\n 50% {\n transform: scale(1.05);\n }\n 70% {\n transform: scale(0.9);\n }\n 100% {\n transform: scale(1);\n opacity: 1;\n }\n }\n\n @keyframes zoomIn {\n from {\n transform: scale(0.8);\n opacity: 0;\n }\n to {\n transform: scale(1);\n opacity: 1;\n }\n }\n `,\n ],\n})\nexport class AlertDialog implements OnInit, OnDestroy, AfterViewInit {\n @ViewChild('inputField') inputField?: ElementRef<HTMLInputElement | HTMLTextAreaElement>;\n @ViewChild('dialogTitle') dialogTitle?: ElementRef<HTMLElement>;\n @ViewChild('dynamicComponentContainer', { read: ViewContainerRef, static: true })\n private container!: ViewContainerRef;\n\n private componentRef: ComponentRef<any> | null = null;\n private timerInterval: any;\n\n // CDK Drag properties\n private static lastZIndex = 1000;\n private bringToFrontTimeoutId: number | null = null;\n\n inputValue = '';\n validationError: string | null = null;\n timerProgress = 100;\n sanitizedHtml: SafeHtml;\n sanitizedFooter: SafeHtml | null = null;\n public dialogRef = inject(MatDialogRef<AlertDialog>);\n public data = inject<AlertDialogOptions>(MAT_DIALOG_DATA);\n private sanitizer = inject(DomSanitizer);\n private renderer = inject(Renderer2);\n private elementRef = inject(ElementRef);\n private cdr = inject(ChangeDetectorRef);\n\n constructor() {\n this.sanitizedHtml = this.sanitizer.bypassSecurityTrustHtml(this.data.html || '');\n }\n\n ngOnDestroy(): void {\n if (this.timerInterval) {\n clearInterval(this.timerInterval);\n }\n\n if (this.componentRef) {\n this.componentRef.destroy();\n }\n\n // Limpiar timeout de CDK Drag\n if (this.bringToFrontTimeoutId !== null) {\n cancelAnimationFrame(this.bringToFrontTimeoutId);\n this.bringToFrontTimeoutId = null;\n }\n }\n\n ngAfterViewInit(): void {\n // CDK Drag se maneja automáticamente a través del template\n }\n\n // Start the timer for auto-closing the dialog\n private startTimer(): void {\n if (!this.data.timer) return;\n\n console.log('Starting timer with duration:', this.data.timer);\n const startTime = Date.now();\n const endTime = startTime + this.data.timer;\n this.timerProgress = 100;\n\n this.timerInterval = setInterval(() => {\n const now = Date.now();\n const remaining = endTime - now;\n\n if (remaining <= 0) {\n clearInterval(this.timerInterval);\n this.timerProgress = 0;\n this.cdr.detectChanges();\n console.log('Timer finished, closing dialog');\n this.dialogRef.close({\n isConfirmed: false,\n isDismissed: true,\n isDenied: false,\n dismiss: 'timer',\n });\n return;\n }\n\n const newProgress = (remaining / this.data.timer!) * 100;\n if (Math.abs(this.timerProgress - newProgress) > 0.5) {\n this.timerProgress = newProgress;\n this.cdr.detectChanges();\n }\n }, 50);\n }\n\n // Load dynamic component\n private loadComponent(): void {\n if (!this.data.component) return;\n\n this.container.clear();\n\n // Create the component using the view container's injector\n this.componentRef = createComponent(this.data.component, {\n environmentInjector: this.container.injector.get(EnvironmentInjector),\n });\n\n // Pass input properties to the dynamic component\n if (this.data.componentProps) {\n Object.keys(this.data.componentProps).forEach(key => {\n (this.componentRef!.instance as any)[key] = this.data.componentProps![key];\n });\n }\n\n // Attach the view\n this.container.insert(this.componentRef.hostView);\n }\n\n ngOnInit(): void {\n if (this.data.component) {\n this.loadComponent();\n }\n\n if (this.data.footerHtml) {\n this.sanitizedFooter = this.sanitizer.bypassSecurityTrustHtml(this.data.footerHtml);\n }\n\n // Inicializar timer después de que el componente esté listo\n if (this.data.timer) {\n // Usar setTimeout para asegurar que el componente esté completamente inicializado\n setTimeout(() => {\n this.startTimer();\n }, 100);\n }\n }\n\n getIconName(): string {\n if (this.data.icon) {\n return this.data.icon;\n }\n\n switch (this.data.type) {\n case 'success':\n return 'check_circle';\n case 'error':\n return 'error';\n case 'warning':\n return 'warning';\n case 'info':\n return 'info';\n case 'question':\n return 'help';\n case 'delete':\n return 'delete_forever';\n default:\n return '';\n }\n }\n\n onClose(): void {\n this.dialogRef.close({\n isConfirmed: false,\n isDismissed: true,\n isDenied: false,\n dismiss: 'close',\n });\n }\n\n getButtonVariant(buttonType: ButtonType): ButtonVariant {\n const variant = (this.data as any)[`${buttonType}ButtonVariant`] as ButtonVariant | undefined;\n if (variant) return variant;\n\n // Default variants based on button type and alert type\n if (buttonType === 'confirm') {\n switch (this.data.type) {\n case 'success':\n return 'success';\n case 'error':\n return 'danger';\n case 'warning':\n return 'warning';\n case 'info':\n return 'info';\n case 'question':\n return 'primary';\n case 'delete':\n return 'danger';\n default:\n return 'primary';\n }\n } else if (buttonType === 'cancel') {\n return 'secondary';\n } else if (buttonType === 'deny') {\n return 'danger';\n }\n\n return 'primary';\n }\n\n getButtonIcon(buttonType: ButtonType): string {\n const icon = (this.data as any)[`${buttonType}ButtonIcon`] as string | undefined;\n if (icon) return icon;\n\n // Default icons based on button type\n switch (buttonType) {\n case 'confirm':\n return this.data.type === 'question' ? 'check' : '';\n case 'cancel':\n return 'close';\n case 'deny':\n return 'block';\n default:\n return '';\n }\n }\n\n getButtonStyle(buttonType: ButtonType): MaterialButtonStyle {\n const style = (this.data as any)[`${buttonType}ButtonStyle`] as MaterialButtonStyle | undefined;\n return style || 'elevated';\n }\n\n getActionsAlignment(): 'start' | 'center' | 'end' {\n switch (this.data.contentAlignment) {\n case 'left':\n return 'start';\n case 'center':\n return 'center';\n case 'right':\n return 'end';\n default:\n return 'end'; // Default alignment\n }\n }\n\n async onConfirm(): Promise<void> {\n if (this.data.input && this.data.inputValidator) {\n const error = await Promise.resolve(this.data.inputValidator(this.inputValue));\n if (error) {\n this.validationError = error;\n return;\n }\n }\n\n if (this.data.preConfirm) {\n try {\n const result = await Promise.resolve(this.data.preConfirm(this.inputValue || undefined));\n this.dialogRef.close({\n isConfirmed: true,\n isDismissed: false,\n isDenied: false,\n value: result,\n });\n } catch (error) {\n console.error('Error in preConfirm:', error);\n }\n } else {\n this.dialogRef.close({\n isConfirmed: true,\n isDismissed: false,\n isDenied: false,\n value: this.inputValue || undefined,\n });\n }\n }\n\n onCancel(): void {\n this.dialogRef.close({\n isConfirmed: false,\n isDismissed: true,\n isDenied: false,\n dismiss: 'cancel',\n });\n }\n\n onDeny(): void {\n if (this.data.preDeny) {\n try {\n const result = this.data.preDeny(this.inputValue || undefined);\n if (result instanceof Promise) {\n result\n .then(() => {\n this.dialogRef.close({\n isConfirmed: false,\n isDismissed: false,\n isDenied: true,\n value: this.inputValue || undefined,\n });\n })\n .catch(error => {\n this.validationError = error instanceof Error ? error.message : String(error);\n });\n } else {\n this.dialogRef.close({\n isConfirmed: false,\n isDismissed: false,\n isDenied: true,\n value: this.inputValue || undefined,\n });\n }\n } catch (error) {\n this.validationError = error instanceof Error ? error.message : String(error);\n }\n } else {\n this.dialogRef.close({\n isConfirmed: false,\n isDismissed: false,\n isDenied: true,\n value: this.inputValue || undefined,\n });\n }\n }\n\n onInputEnter(): void {\n if (this.data.allowEnterKey !== false && this.data.input !== 'textarea') {\n this.onConfirm();\n }\n }\n\n getConfirmColor(): any {\n if (!this.data.confirmButtonColor) return 'primary';\n if (['primary', 'accent', 'warn'].includes(this.data.confirmButtonColor)) {\n return this.data.confirmButtonColor;\n }\n return undefined;\n }\n\n getCancelColor(): any {\n if (!this.data.cancelButtonColor) return undefined;\n if (['primary', 'accent', 'warn'].includes(this.data.cancelButtonColor)) {\n return this.data.cancelButtonColor;\n }\n return undefined;\n }\n\n getDenyColor(): any {\n if (!this.data.denyButtonColor) return undefined;\n if (['primary', 'accent', 'warn'].includes(this.data.denyButtonColor)) {\n return this.data.denyButtonColor;\n }\n return undefined;\n }\n\n getConfirmBackgroundColor(): string | undefined {\n if (!this.data.confirmButtonColor) return undefined;\n if (['primary', 'accent', 'warn'].includes(this.data.confirmButtonColor)) {\n return undefined;\n }\n return this.data.confirmButtonColor;\n }\n\n getCancelBackgroundColor(): string | undefined {\n if (!this.data.cancelButtonColor) return undefined;\n if (['primary', 'accent', 'warn'].includes(this.data.cancelButtonColor)) {\n return undefined;\n }\n return this.data.cancelButtonColor;\n }\n\n getDenyBackgroundColor(): string | undefined {\n if (!this.data.denyButtonColor) return undefined;\n if (['primary', 'accent', 'warn'].includes(this.data.denyButtonColor)) {\n return undefined;\n }\n return this.data.denyButtonColor;\n }\n\n // ===== CDK DRAG FUNCTIONALITY =====\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.elementRef.nativeElement.closest('.cdk-overlay-pane') as HTMLElement;\n if (pane) {\n pane.style.zIndex = (++AlertDialog.lastZIndex).toString();\n }\n this.bringToFrontTimeoutId = null;\n });\n }\n}\n","<div\n class=\"alert-dialog\"\n [class.modern-layout]=\"data.layout === 'modern'\"\n [class.toast-layout]=\"data.layout === 'toast' || data.toastMode\"\n [class.icon-left]=\"data.iconPosition === 'left'\"\n [class.icon-center]=\"data.iconPosition === 'center'\"\n [class.icon-top]=\"data.iconPosition === 'top'\"\n [class.content-left]=\"data.contentAlignment === 'left'\"\n [class.content-center]=\"data.contentAlignment === 'center'\"\n [class.content-right]=\"data.contentAlignment === 'right'\"\n [attr.aria-label]=\"data.ariaLabel\"\n [attr.aria-describedby]=\"data.ariaDescribedBy\"\n>\n <!-- Timer Progress Bar -->\n @if (data.timer && (data.timerProgressBar || data.progressBar || data.toastMode)) {\n <mat-progress-bar\n mode=\"determinate\"\n [value]=\"timerProgress\"\n class=\"timer-progress\"\n [class.toast-progress]=\"data.toastMode\"\n >\n </mat-progress-bar>\n }\n\n <!-- Alert Header -->\n @if (data.draggable) {\n <div\n class=\"acp-alert-header\"\n cdkDrag\n cdkDragRootElement=\".cdk-overlay-pane\"\n cdkDragHandle\n (mousedown)=\"bringToFront()\"\n >\n <!-- Icon -->\n @if (data.type || data.icon) {\n <div class=\"alert-dialog-icon\" [ngClass]=\"'icon-' + (data.type || 'custom')\">\n <mat-icon class=\"icon-large\" [style.color]=\"data.iconColor\"> {{ getIconName() }} </mat-icon>\n </div>\n }\n\n <!-- Toast Content (solo para modo toast) -->\n @if (data.toastMode || data.layout === 'toast') {\n <!-- Title y Message en línea para toast -->\n <div class=\"toast-content\">\n @if (data.title) {\n <span class=\"toast-title\" #dialogTitle>{{ data.title }}</span>\n } @if (data.message) {\n <span class=\"toast-message\">{{ data.message }}</span>\n }\n </div>\n }\n\n <!-- Close Button -->\n @if (data.showCloseButton) {\n <button\n mat-icon-button\n class=\"close-button\"\n [class.top-right]=\"data.closeButtonPosition === 'top-right'\"\n [class.top-left]=\"data.closeButtonPosition === 'top-left'\"\n (click)=\"onClose()\"\n aria-label=\"Cerrar\"\n >\n <mat-icon>close</mat-icon>\n </button>\n }\n </div>\n } @else {\n <div class=\"acp-alert-header\">\n <!-- Icon -->\n @if (data.type || data.icon) {\n <div class=\"alert-dialog-icon\" [ngClass]=\"'icon-' + (data.type || 'custom')\">\n <mat-icon class=\"icon-large\" [style.color]=\"data.iconColor\"> {{ getIconName() }} </mat-icon>\n </div>\n }\n\n <!-- Toast Content (solo para modo toast) -->\n @if (data.toastMode || data.layout === 'toast') {\n <!-- Title y Message en línea para toast -->\n <div class=\"toast-content\">\n @if (data.title) {\n <span class=\"toast-title\" #dialogTitle>{{ data.title }}</span>\n } @if (data.message) {\n <span class=\"toast-message\">{{ data.message }}</span>\n }\n </div>\n }\n\n <!-- Close Button -->\n @if (data.showCloseButton) {\n <button\n mat-icon-button\n class=\"close-button\"\n [class.top-right]=\"data.closeButtonPosition === 'top-right'\"\n [class.top-left]=\"data.closeButtonPosition === 'top-left'\"\n (click)=\"onClose()\"\n aria-label=\"Cerrar\"\n >\n <mat-icon>close</mat-icon>\n </button>\n }\n </div>\n }\n\n <!-- Content (solo para modo normal, no toast) -->\n @if (!(data.toastMode || data.layout === 'toast')) {\n <mat-dialog-content class=\"alert-dialog-content\">\n <!-- Title -->\n @if (data.title) {\n <h2 class=\"alert-dialog-title\" #dialogTitle>{{ data.title }}</h2>\n }\n <!-- Image -->\n @if (data.imageUrl) {\n <div class=\"alert-dialog-image\">\n <img\n [src]=\"data.imageUrl\"\n [alt]=\"data.imageAlt || 'Alert image'\"\n [style.width]=\"data.imageWidth || 'auto'\"\n [style.height]=\"data.imageHeight || 'auto'\"\n [style.max-width]=\"data.imageWidth || '100%'\"\n />\n </div>\n }\n\n <!-- Dynamic Component -->\n @if (data.component) {\n <div #dynamicComponentContainer></div>\n } @if (data.html) {\n <div [innerHTML]=\"sanitizedHtml\"></div>\n } @else if (data.message) {\n <p class=\"alert-message\">{{ data.message }}</p>\n }\n\n <!-- Input Field -->\n @if (data.input) {\n <mat-form-field appearance=\"outline\" class=\"alert-input-field\">\n @if (data.inputLabel) {\n <mat-label>{{ data.inputLabel }}</mat-label>\n } @if (data.input === 'textarea') {\n <textarea\n matInput\n #inputField\n [(ngModel)]=\"inputValue\"\n [placeholder]=\"data.inputPlaceholder || ''\"\n [type]=\"data.input\"\n rows=\"4\"\n (keyup.enter)=\"onInputEnter()\"\n [attr.aria-invalid]=\"!!validationError\"\n >\n </textarea>\n } @else {\n <input\n matInput\n #inputField\n [(ngModel)]=\"inputValue\"\n [placeholder]=\"data.inputPlaceholder || ''\"\n [type]=\"data.input\"\n (keyup.enter)=\"onInputEnter()\"\n [attr.aria-invalid]=\"!!validationError\"\n />\n } @if (validationError) {\n <mat-error>{{ validationError }}</mat-error>\n }\n </mat-form-field>\n }\n </mat-dialog-content>\n }\n\n <!-- Actions (solo para modo normal, no toast) -->\n @if (!(data.toastMode || data.layout === 'toast') && (data.showConfirmButton !== false ||\n data.showCancelButton || data.showDenyButton)) {\n <mat-dialog-actions\n class=\"alert-dialog-actions\"\n [class.reverse-buttons]=\"data.reverseButtons\"\n [class.vertical-buttons]=\"data.verticalButtons\"\n [align]=\"getActionsAlignment()\"\n >\n @if (data.showDenyButton) {\n <acp-button\n type=\"button\"\n [matStyle]=\"getButtonStyle('deny')\"\n [variant]=\"getButtonVariant('deny')\"\n [icon]=\"getButtonIcon('deny')\"\n (handleClick)=\"onDeny()\"\n [text]=\"data.denyText || 'No'\"\n [disabled]=\"data.disableDenyButton?? false\"\n [class.spinning]=\"data.processing && data.processingButton === 'deny'\"\n [class.full-width]=\"data.fullWidthButtons\"\n />\n } @if (data.showCancelButton) {\n <acp-button\n type=\"button\"\n [matStyle]=\"getButtonStyle('cancel')\"\n [variant]=\"getButtonVariant('cancel')\"\n [icon]=\"getButtonIcon('cancel')\"\n (handleClick)=\"onCancel()\"\n [text]=\"data.cancelText || 'Cancel'\"\n [disabled]=\"data.disableCancelButton??false\"\n [class.spinning]=\"data.processing && data.processingButton === 'cancel'\"\n [class.full-width]=\"data.fullWidthButtons\"\n />\n } @if (data.showConfirmButton !== false) {\n <acp-button\n type=\"button\"\n [matStyle]=\"getButtonStyle('confirm')\"\n [variant]=\"getButtonVariant('confirm')\"\n [icon]=\"getButtonIcon('confirm')\"\n (handleClick)=\"onConfirm()\"\n [text]=\"data.confirmText || 'OK'\"\n [disabled]=\"data.disableConfirmButton?? false\"\n [class.spinning]=\"data.processing && data.processingButton === 'confirm'\"\n [class.full-width]=\"data.fullWidthButtons\"\n [autofocus]=\"data.focusConfirm\"\n />\n }\n </mat-dialog-actions>\n }\n\n <!-- Footer -->\n @if (data.footer || data.footerHtml) {\n <div class=\"alert-dialog-footer\">\n @if (data.footerHtml) {\n <div [innerHTML]=\"sanitizedFooter\"></div>\n } @else { {{ data.footer }} }\n </div>\n }\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","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","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i2","catchError","i3","takeUntil","filter","ENTER_ANIMATION","EXIT_ANIMATION","observableOf","i4"],"mappings":"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"}
|
|
1
|
+
{"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/components/button/button.ts","../../../../packages/ng-components/src/lib/components/button/button.html","../../../../packages/ng-components/src/lib/services/dialog/dialog-z-index.service.ts","../../../../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/dynamic-select/dynamic-select.ts","../../../../packages/ng-components/src/lib/components/dynamic-select/dynamic-select.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/icon-registry.service.ts","../../../../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/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/services/alert-dialog.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/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/pipes/is-template-ref.pipe.ts","../../../../packages/ng-components/src/lib/pipes/to-observable.pipe.ts","../../../../packages/ng-components/src/lib/directives/selectable-cell.ts","../../../../packages/ng-components/src/lib/utils/data-grid.util.ts","../../../../packages/ng-components/src/lib/directives/data-grid-expansion-toggle.ts","../../../../packages/ng-components/src/lib/pipes/data-grid.pipe.ts","../../../../packages/ng-components/src/lib/components/data-grid/data-grid-menu.ts","../../../../packages/ng-components/src/lib/components/data-grid/data-grid-cell/data-grid-cell.ts","../../../../packages/ng-components/src/lib/components/data-grid/data-grid-cell/data-grid-cell.html","../../../../packages/ng-components/src/lib/components/data-grid/keyboard-navigation.ts","../../../../packages/ng-components/src/lib/components/data-grid/data-grid.ts","../../../../packages/ng-components/src/lib/components/data-grid/data-grid.html","../../../../packages/ng-components/src/lib/components/date-range-picker/date-range-picker.ts","../../../../packages/ng-components/src/lib/components/date-range-picker/index.ts","../../../../packages/ng-components/src/lib/components/drawer/drawer-config.ts","../../../../packages/ng-components/src/lib/components/drawer/drawer-container.ts","../../../../packages/ng-components/src/lib/components/drawer/drawer-container.html","../../../../packages/ng-components/src/lib/components/drawer/drawer-ref.ts","../../../../packages/ng-components/src/lib/components/drawer/drawer.ts","../../../../packages/ng-components/src/lib/components/popover/popover-content.ts","../../../../packages/ng-components/src/lib/components/popover/popover-errors.ts","../../../../packages/ng-components/src/lib/components/popover/popover.ts","../../../../packages/ng-components/src/lib/components/popover/popover.html","../../../../packages/ng-components/src/lib/components/popover/popover-trigger.ts","../../../../packages/ng-components/src/lib/components/popover/popover-target.ts","../../../../packages/ng-components/src/lib/components/alert-dialog/alert-dialog.ts","../../../../packages/ng-components/src/lib/components/alert-dialog/alert-dialog.html","../../../../packages/ng-components/src/lib/directives/to-upper-case.ts","../../../../packages/ng-components/src/lib/pipes/get-total-pipe.ts","../../../../packages/ng-components/src/lib/pipes/status-display-pipe.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@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","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 {\n REPORT_FORMAT,\n type ButtonType,\n type ButtonVariant,\n type MaterialButtonStyle,\n} from '@acontplus/ui-kit';\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 { Injectable } from '@angular/core';\n\n/**\n * Servicio centralizado para manejar z-index de todos los diálogos\n * Asegura que los diálogos siempre aparezcan en el orden correcto\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class DialogZIndexService {\n private static currentZIndex = 1000;\n private static readonly Z_INDEX_INCREMENT = 10;\n\n /**\n * Obtiene el siguiente z-index disponible\n * @returns El próximo z-index a usar\n */\n getNextZIndex(): number {\n DialogZIndexService.currentZIndex += DialogZIndexService.Z_INDEX_INCREMENT;\n return DialogZIndexService.currentZIndex;\n }\n\n /**\n * Obtiene el z-index actual más alto\n * @returns El z-index más alto actualmente en uso\n */\n getCurrentZIndex(): number {\n return DialogZIndexService.currentZIndex;\n }\n\n /**\n * Resetea el contador de z-index (útil para testing)\n */\n reset(): void {\n DialogZIndexService.currentZIndex = 1000;\n }\n\n /**\n * Aplica z-index a un diálogo específico\n * @param dialogRef Referencia al diálogo\n * @param zIndex Z-index a aplicar (opcional, si no se proporciona usa getNextZIndex())\n */\n applyZIndex(dialogRef: any, zIndex?: number): void {\n const targetZIndex = zIndex || this.getNextZIndex();\n\n setTimeout(() => {\n const overlayRef = dialogRef._overlayRef;\n if (overlayRef) {\n const pane = overlayRef.overlayElement;\n const backdrop = overlayRef.backdropElement;\n\n if (pane) {\n pane.style.zIndex = (targetZIndex + 2).toString();\n }\n if (backdrop) {\n backdrop.style.zIndex = (targetZIndex + 1).toString();\n }\n }\n }, 0);\n }\n\n /**\n * Trae un diálogo al frente (usado por drag functionality)\n * @param element Elemento del diálogo a traer al frente\n */\n bringToFront(element: HTMLElement): void {\n const pane = element.closest('.cdk-overlay-pane') as HTMLElement;\n if (pane) {\n const newZIndex = this.getNextZIndex();\n pane.style.zIndex = (newZIndex + 2).toString();\n\n // También actualizar el backdrop si existe\n const backdrop = pane.parentElement?.querySelector('.cdk-overlay-backdrop') as HTMLElement;\n if (backdrop) {\n backdrop.style.zIndex = (newZIndex + 1).toString();\n }\n }\n }\n}\n","import {\n Component,\n ViewContainerRef,\n AfterViewInit,\n ElementRef,\n ChangeDetectionStrategy,\n inject,\n viewChild,\n OnDestroy,\n ViewEncapsulation,\n Signal,\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';\nimport { DialogZIndexService } from '../../services/dialog/dialog-z-index.service';\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@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 private zIndexService = inject(DialogZIndexService);\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: Signal<ViewContainerRef> = viewChild.required('contentHost', {\n read: ViewContainerRef,\n });\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: Signal<ElementRef | undefined> = viewChild<ElementRef>('dialogHeader');\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 the centralized DialogZIndexService for consistent z-index management.\n * Called when the dialog header is clicked.\n */\n bringToFront(): void {\n const headerElement = this.header()?.nativeElement;\n if (headerElement) {\n this.zIndexService.bringToFront(headerElement);\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 {\n Component,\n effect,\n input,\n OnDestroy,\n OnInit,\n output,\n ChangeDetectionStrategy,\n} from '@angular/core';\n\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\nimport { NgSelectModule } from '@ng-select/ng-select';\nimport { Subject } from 'rxjs';\nimport type { SelectOption } from '@acontplus/ui-kit';\n\n@Component({\n selector: 'acp-dynamic-select',\n imports: [NgSelectModule, ReactiveFormsModule],\n templateUrl: './dynamic-select.html',\n styleUrl: './dynamic-select.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class DynamicSelect implements OnInit, OnDestroy {\n // Basic inputs\n label = input<string>('Seleccione una opción');\n options = input.required<SelectOption[]>();\n selectedValue = input<string | number | null>();\n className = input<string>('w-100');\n placeholder = input<string>();\n disabled = input<boolean>(false);\n clearable = input<boolean>(true);\n searchable = input<boolean>(true);\n\n // Advanced ng-select inputs\n virtualScroll = input<boolean>(false);\n dropdownPosition = input<'bottom' | 'top' | 'auto'>('auto');\n closeOnSelect = input<boolean>(true);\n hideSelected = input<boolean>(false);\n multiple = input<boolean>(false);\n selectOnTab = input<boolean>(false);\n openOnEnter = input<boolean>(true);\n selectableGroup = input<boolean>(false);\n selectableGroupAsModel = input<boolean>(true);\n clearOnBackspace = input<boolean>(true);\n readonly = input<boolean>(false);\n searchWhileComposing = input<boolean>(true);\n minTermLength = input<number>(0);\n editableSearchTerm = input<boolean>(false);\n typeToSearchText = input<string>('Type to search');\n addTagText = input<string>('Add item');\n loadingText = input<string>('Loading...');\n clearAllText = input<string>('Clear all');\n notFoundText = input<string>('No items found');\n\n // Output\n selectionChange = output<string | number | null>();\n\n public selectControl = new FormControl<string | number | null>(null);\n public filteredOptions: SelectOption[] = [];\n public loading = false;\n\n private _onDestroy = new Subject<void>();\n\n constructor() {\n // Sincroniza las opciones\n effect(() => {\n const opts = this.options();\n this.filteredOptions = opts ?? [];\n });\n\n // Sincroniza el valor seleccionado externamente\n effect(() => {\n const value = this.selectedValue();\n if (value !== undefined && value !== null) {\n const selectedOption = this.options().find(option => option.value === value);\n if (selectedOption && this.selectControl.value !== selectedOption.value) {\n this.selectControl.setValue(selectedOption.value, {\n emitEvent: false,\n });\n }\n }\n });\n }\n\n ngOnInit() {\n // Handle initial value if provided\n if (this.selectedValue() !== undefined && this.selectedValue() !== null) {\n const selectedOption = this.options().find(opt => opt.value === this.selectedValue());\n if (selectedOption) {\n this.selectControl.setValue(selectedOption.value, { emitEvent: false });\n }\n }\n }\n\n onSelectionChange(selectedItem: any) {\n // Extract just the value from the selected item\n const value = selectedItem?.value ?? selectedItem;\n\n // Emit only the value\n this.selectionChange.emit(value);\n\n // Update the form control to keep it in sync\n this.selectControl.setValue(value, { emitEvent: false });\n }\n\n ngOnDestroy() {\n this._onDestroy.next();\n this._onDestroy.complete();\n }\n}\n","<ng-select\n [items]=\"filteredOptions\"\n bindLabel=\"viewValue\"\n bindValue=\"value\"\n [searchable]=\"searchable()\"\n [clearable]=\"clearable()\"\n [formControl]=\"selectControl\"\n [placeholder]=\"placeholder() || label()\"\n [loading]=\"loading\"\n [virtualScroll]=\"virtualScroll()\"\n [dropdownPosition]=\"dropdownPosition()\"\n [closeOnSelect]=\"closeOnSelect()\"\n [hideSelected]=\"hideSelected()\"\n [multiple]=\"multiple()\"\n [selectOnTab]=\"selectOnTab()\"\n [openOnEnter]=\"openOnEnter()\"\n [selectableGroup]=\"selectableGroup()\"\n [selectableGroupAsModel]=\"selectableGroupAsModel()\"\n [clearOnBackspace]=\"clearOnBackspace()\"\n [readonly]=\"readonly()\"\n [searchWhileComposing]=\"searchWhileComposing()\"\n [minTermLength]=\"minTermLength()\"\n [editableSearchTerm]=\"editableSearchTerm()\"\n [typeToSearchText]=\"typeToSearchText()\"\n [addTagText]=\"addTagText()\"\n [loadingText]=\"loadingText()\"\n [clearAllText]=\"clearAllText()\"\n [notFoundText]=\"notFoundText()\"\n (change)=\"onSelectionChange($event)\"\n [ngClass]=\"className()\"\n/>\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 { Injectable, inject } from '@angular/core';\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\nimport { HttpClient } from '@angular/common/http';\nimport { catchError, of, Observable, firstValueFrom } from 'rxjs';\nimport type { IconDefinition } from '@acontplus/ui-kit';\n\nexport interface IconRegistryConfig {\n /**\n * Fallback icon to show when requested icon is not found\n */\n fallbackIcon?: string;\n /**\n * Show console warnings when icons are not found\n */\n showWarnings?: boolean;\n /**\n * Base URL for loading icons from external sources\n */\n iconBaseUrl?: string;\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class IconRegistryService {\n private readonly sanitizer = inject(DomSanitizer);\n private readonly http = inject(HttpClient, { optional: true });\n private readonly registry = new Map<string, string>();\n private readonly pendingLoads = new Map<string, Observable<string | null>>();\n\n private config: IconRegistryConfig = {\n showWarnings: true,\n };\n\n /**\n * Configure the icon registry\n */\n configure(config: IconRegistryConfig): void {\n this.config = { ...this.config, ...config };\n\n // Register fallback icon if provided\n if (config.fallbackIcon && !this.registry.has('__fallback__')) {\n this.registerIcon('__fallback__', config.fallbackIcon);\n }\n }\n\n /**\n * Register a single icon\n */\n registerIcon(name: string, svgData: string): void {\n this.registry.set(name, svgData);\n }\n\n /**\n * Register multiple icons at once\n */\n registerIcons(icons: IconDefinition[]): void {\n icons.forEach(({ name, data }) => this.registerIcon(name, data));\n }\n\n /**\n * Load an icon from a URL\n */\n async loadIconFromUrl(name: string, url: string): Promise<boolean> {\n if (!this.http) {\n console.error('HttpClient not available. Did you provide it in your app config?');\n return false;\n }\n\n try {\n const svgData = await firstValueFrom(\n this.http.get(url, { responseType: 'text' }).pipe(\n catchError(error => {\n console.error(`Failed to load icon \"${name}\" from ${url}:`, error);\n return of(null);\n }),\n ),\n );\n\n if (svgData) {\n this.registerIcon(name, svgData);\n return true;\n }\n return false;\n } catch (error) {\n console.error(`Error loading icon \"${name}\":`, error);\n return false;\n }\n }\n\n /**\n * Load multiple icons from URLs\n */\n async loadIconsFromUrls(icons: { name: string; url: string }[]): Promise<void> {\n const promises = icons.map(({ name, url }) => this.loadIconFromUrl(name, url));\n await Promise.all(promises);\n }\n\n /**\n * Get a sanitized icon by name\n * If icon is not found, attempts to load from configured base URL or returns fallback\n */\n getIcon(name: string): SafeHtml | null {\n // Check if icon exists in registry\n const svgData = this.registry.get(name);\n if (svgData) {\n return this.sanitizer.sanitize(1, svgData) as SafeHtml;\n }\n\n // Icon not found - show warning if enabled\n if (this.config.showWarnings) {\n console.warn(\n `Icon \"${name}\" not found in registry. ${\n this.config.fallbackIcon ? 'Using fallback icon.' : 'No fallback configured.'\n }`,\n );\n }\n\n // Return fallback icon if configured\n if (this.registry.has('__fallback__')) {\n const fallbackData = this.registry.get('__fallback__');\n return this.sanitizer.sanitize(1, fallbackData!) as SafeHtml;\n }\n\n // Return null if no fallback\n return null;\n }\n\n /**\n * Get icon with automatic online loading if not found\n */\n async getIconAsync(name: string): Promise<SafeHtml | null> {\n // Check if icon exists\n if (this.hasIcon(name)) {\n return this.getIcon(name);\n }\n\n // Try to load from base URL if configured\n if (this.config.iconBaseUrl && this.http) {\n const url = `${this.config.iconBaseUrl}/${name}.svg`;\n const loaded = await this.loadIconFromUrl(name, url);\n\n if (loaded) {\n return this.getIcon(name);\n }\n }\n\n // Return fallback or null\n return this.getIcon(name);\n }\n\n /**\n * Check if an icon exists in the registry\n */\n hasIcon(name: string): boolean {\n return this.registry.has(name);\n }\n\n /**\n * Get all registered icon names\n */\n getRegisteredIcons(): string[] {\n return Array.from(this.registry.keys()).filter(name => name !== '__fallback__');\n }\n\n /**\n * Clear all registered icons\n */\n clearRegistry(): void {\n this.registry.clear();\n }\n\n /**\n * Remove a specific icon from the registry\n */\n removeIcon(name: string): boolean {\n return this.registry.delete(name);\n }\n}\n","import { Component, computed, effect, inject, input, ViewEncapsulation } from '@angular/core';\nimport type { SafeHtml } from '@angular/platform-browser';\nimport { IconRegistryService } from '../icon-registry.service';\nimport { DEFAULT_ICONS, FALLBACK_ICON } from '@acontplus/ui-kit';\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 private readonly iconRegistry = inject(IconRegistryService);\n\n /**\n * Icon name from the registry\n */\n name = input.required<string>();\n\n /**\n * Icon size (applies to both width and height)\n */\n size = input<string>('24px');\n\n /**\n * Custom width (overrides size)\n */\n width = input<string | undefined>(undefined);\n\n /**\n * Custom height (overrides size)\n */\n height = input<string | undefined>(undefined);\n\n /**\n * Icon color (uses CSS currentColor by default)\n */\n color = input<string>('currentColor');\n\n /**\n * Show fallback icon instead of empty space when icon is not found\n */\n useFallback = input<boolean>(true);\n\n /**\n * Computed width value\n */\n protected computedWidth = computed(() => this.width() ?? this.size());\n\n /**\n * Computed height value\n */\n protected computedHeight = computed(() => this.height() ?? this.size());\n\n /**\n * Get the icon SVG from the registry\n */\n protected iconSvg = computed<SafeHtml | string | null>(() => {\n const svg = this.iconRegistry.getIcon(this.name());\n\n // If icon not found and fallback disabled, return empty\n if (!svg && !this.useFallback()) {\n return '';\n }\n\n return svg;\n });\n\n constructor() {\n // Register default icons and fallback on first component instantiation\n effect(\n () => {\n const registeredIcons = this.iconRegistry.getRegisteredIcons();\n\n if (registeredIcons.length === 0) {\n // Register default icons\n this.iconRegistry.registerIcons(DEFAULT_ICONS);\n\n // Configure with fallback icon\n this.iconRegistry.configure({\n fallbackIcon: FALLBACK_ICON,\n showWarnings: true,\n });\n }\n },\n { allowSignalWrites: true },\n );\n }\n}\n","<div\n class=\"acp-svg-icon\"\n [style.width]=\"computedWidth()\"\n [style.height]=\"computedHeight()\"\n [style.color]=\"color()\"\n [innerHTML]=\"iconSvg()\"\n></div>\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","// 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 {\n Tabulator,\n PageModule,\n ReactiveDataModule,\n FormatModule,\n EditModule,\n ValidateModule,\n SortModule,\n TooltipModule,\n ColumnCalcsModule,\n DataTreeModule,\n MoveRowsModule,\n SelectRowModule,\n PopupModule,\n InteractionModule,\n} from 'tabulator-tables';\nimport { TabulatorTheme } from '../../../types';\n\nTabulator.registerModule([\n PageModule,\n ReactiveDataModule,\n FormatModule,\n EditModule,\n ValidateModule,\n ColumnCalcsModule,\n SortModule,\n TooltipModule,\n DataTreeModule,\n MoveRowsModule,\n SelectRowModule,\n PopupModule,\n InteractionModule,\n]);\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 readonly selectableRows = input(false);\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 rowDeleted = output<any>();\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).slice(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 selectableRows: this.selectableRows() ?? true,\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 this._tabulator.on('rowDeleted', row => {\n this.rowDeleted.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';\nimport { DialogZIndexService } from './dialog-z-index.service';\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 private readonly zIndexService = inject(DialogZIndexService);\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 const dialogRef = this.dialog.open<T, D, R>(component, dialogConfig);\n\n // Aplicar z-index centralizado\n this.zIndexService.applyZIndex(dialogRef);\n\n return dialogRef;\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 const dialogRef = this.dialog.open<DialogWrapper, DialogWrapperConfig<T>, R>(\n DialogWrapper,\n dialogConfig,\n );\n\n // Aplicar z-index centralizado\n this.zIndexService.applyZIndex(dialogRef);\n\n return dialogRef;\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 { Injectable, inject, Type } from '@angular/core';\nimport { MatDialog } from '@angular/material/dialog';\nimport { AlertDialog } from './../components';\nimport { firstValueFrom } from 'rxjs';\nimport { ThemePalette } from '@angular/material/core';\nimport { ButtonVariant, MaterialButtonStyle } from '@acontplus/ui-kit';\nimport { DialogZIndexService } from './dialog/dialog-z-index.service';\n\nexport type AlertType = 'success' | 'error' | 'warning' | 'info' | 'question' | 'delete';\nexport type AlertPosition =\n | 'top'\n | 'top-start'\n | 'top-end'\n | 'center'\n | 'center-start'\n | 'center-end'\n | 'bottom'\n | 'bottom-start'\n | 'bottom-end';\n\nexport interface AlertDialogOptions {\n // ===== Content and Appearance =====\n title?: string;\n message?: string;\n html?: string; // Custom HTML instead of message\n icon?: string; // Custom Material Icons\n iconColor?: string;\n type?: AlertType;\n width?: string;\n minWidth?: string;\n maxWidth?: string;\n height?: string;\n position?: AlertPosition;\n customClass?: string;\n panelClass?: string | string[];\n backdropClass?: string;\n\n // ===== Layout Configuration =====\n layout?: 'default' | 'modern' | 'toast'; // Nuevo: tipo de layout\n iconPosition?: 'left' | 'center' | 'top'; // Posición del icono\n contentAlignment?: 'left' | 'center' | 'right'; // Alineación del contenido\n showCloseButton?: boolean; // Botón X en la esquina superior derecha\n closeButtonPosition?: 'top-right' | 'top-left'; // Posición del botón cerrar\n\n // ===== Drag and Drop =====\n draggable?: boolean;\n dragHandle?: string; // CSS selector for drag handle (default: '.alert-dialog-title')\n\n // ===== Animation =====\n animation?: 'fade' | 'slide' | 'bounce' | 'zoom' | 'none';\n animationDuration?: number; // en milisegundos\n\n // ===== Toast Mode =====\n toastMode?: boolean; // Modo toast/toastr\n toastPosition?:\n | 'top-right'\n | 'top-left'\n | 'bottom-right'\n | 'bottom-left'\n | 'top-center'\n | 'bottom-center';\n autoClose?: boolean; // Auto cerrar en modo toast\n progressBar?: boolean; // Barra de progreso en modo toast\n\n // ===== Custom Component Support =====\n component?: Type<any>;\n componentProps?: Record<string, any>;\n\n // ===== Layout and Behavior =====\n verticalButtons?: boolean;\n fullWidthButtons?: boolean;\n reverseButtons?: boolean;\n timer?: number;\n timerProgressBar?: boolean;\n disableClose?: boolean;\n closeOnBackdropClick?: boolean;\n allowEscapeKey?: boolean;\n allowEnterKey?: boolean;\n scrollbarPadding?: boolean;\n allowMultiple?: boolean; // Permitir múltiples alerts abiertos simultáneamente (por defecto false)\n\n // ===== Button Configuration =====\n // - Visibility\n showConfirmButton?: boolean;\n showCancelButton?: boolean;\n showDenyButton?: boolean;\n\n // - Labels\n confirmText?: string;\n cancelText?: string;\n denyText?: string;\n\n // - Icons\n confirmButtonIcon?: string;\n cancelButtonIcon?: string;\n denyButtonIcon?: string;\n\n // - Variants (using ButtonVariant from ui-kit)\n confirmButtonVariant?: ButtonVariant;\n cancelButtonVariant?: ButtonVariant;\n denyButtonVariant?: ButtonVariant;\n\n // - Styles (elevated, flat, etc.)\n confirmButtonStyle?: MaterialButtonStyle;\n cancelButtonStyle?: MaterialButtonStyle;\n denyButtonStyle?: MaterialButtonStyle;\n\n // - Colors (Material palette or hex)\n confirmButtonColor?: ThemePalette | string;\n cancelButtonColor?: ThemePalette | string;\n denyButtonColor?: ThemePalette | string;\n\n // - States\n disableConfirmButton?: boolean;\n disableCancelButton?: boolean;\n disableDenyButton?: boolean;\n\n // - Focus Management\n focusConfirm?: boolean;\n focusCancel?: boolean;\n focusDeny?: boolean;\n\n // ===== Loading States =====\n processing?: boolean;\n processingButton?: 'confirm' | 'cancel' | 'deny';\n\n // ===== Input Field (for prompts) =====\n input?: 'text' | 'email' | 'password' | 'number' | 'tel' | 'textarea';\n inputLabel?: string;\n inputPlaceholder?: string;\n inputValue?: string;\n inputValidator?: (value: string) => string | null | Promise<string | null>;\n inputAttributes?: Record<string, string>;\n\n // ===== Media =====\n imageUrl?: string;\n imageWidth?: string;\n imageHeight?: string;\n imageAlt?: string;\n\n // ===== Footer =====\n footer?: string;\n footerHtml?: string;\n\n // ===== Callbacks =====\n willOpen?: () => void;\n didOpen?: () => void;\n willClose?: () => void;\n didClose?: () => void;\n preConfirm?: (value?: string) => Promise<any> | any;\n preDeny?: (value?: string) => Promise<any> | any;\n\n // ===== Animations =====\n showClass?: {\n backdrop?: string;\n popup?: string;\n };\n hideClass?: {\n backdrop?: string;\n popup?: string;\n };\n\n // ===== Accessibility =====\n ariaLabel?: string;\n ariaDescribedBy?: string;\n}\n\nexport interface AlertDialogResult<T = any> {\n isConfirmed: boolean;\n isDismissed: boolean;\n isDenied: boolean;\n value?: T;\n dismiss?: 'backdrop' | 'cancel' | 'esc' | 'close' | 'timer';\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AlertDialogService {\n private dialog = inject(MatDialog);\n private zIndexService = inject(DialogZIndexService);\n private defaultOptions: Partial<AlertDialogOptions> = {\n width: '400px',\n showConfirmButton: true,\n showCancelButton: false,\n showDenyButton: false,\n confirmText: 'OK',\n cancelText: 'Cancelar',\n denyText: 'No',\n disableClose: false,\n closeOnBackdropClick: true,\n allowEscapeKey: true,\n allowEnterKey: true,\n timerProgressBar: false,\n reverseButtons: false,\n focusConfirm: true,\n scrollbarPadding: true,\n position: 'center',\n draggable: false,\n allowMultiple: false, // Por defecto no permitir múltiples alerts\n // Nuevas opciones por defecto\n layout: 'modern',\n iconPosition: 'left',\n contentAlignment: 'left',\n showCloseButton: true,\n closeButtonPosition: 'top-right',\n animation: 'fade',\n animationDuration: 300,\n toastMode: false,\n toastPosition: 'top-right',\n autoClose: true,\n progressBar: true,\n };\n\n /**\n * Configurar opciones por defecto para todos los diálogos\n */\n setDefaults(options: Partial<AlertDialogOptions>): void {\n this.defaultOptions = { ...this.defaultOptions, ...options };\n }\n\n /**\n * Obtener opciones por defecto actuales\n */\n getDefaults(): Partial<AlertDialogOptions> {\n return { ...this.defaultOptions };\n }\n\n /**\n * Resetear a opciones por defecto originales\n */\n resetDefaults(): void {\n this.defaultOptions = {\n width: '400px',\n showConfirmButton: true,\n showCancelButton: false,\n showDenyButton: false,\n confirmText: 'OK',\n cancelText: 'Cancelar',\n denyText: 'No',\n disableClose: false,\n closeOnBackdropClick: true,\n allowEscapeKey: true,\n allowEnterKey: true,\n timerProgressBar: false,\n reverseButtons: false,\n focusConfirm: true,\n scrollbarPadding: true,\n position: 'center',\n draggable: false,\n allowMultiple: false,\n };\n }\n\n /**\n * Muestra un diálogo de alerta con todas las opciones configurables\n */\n fire(options: AlertDialogOptions): Promise<AlertDialogResult> {\n const mergedOptions = { ...this.defaultOptions, ...options };\n\n // Si allowMultiple es false (por defecto), cerrar todos los diálogos existentes\n if (!mergedOptions.allowMultiple) {\n this.closeAll();\n }\n\n // Configuración especial para modo toast\n if (mergedOptions.toastMode) {\n mergedOptions.width = mergedOptions.width || '350px';\n mergedOptions.showConfirmButton = mergedOptions.showConfirmButton ?? false;\n mergedOptions.timer = mergedOptions.timer || 4000;\n mergedOptions.timerProgressBar = mergedOptions.progressBar ?? true;\n mergedOptions.position = this.getToastPosition(mergedOptions.toastPosition || 'top-right');\n mergedOptions.disableClose = false;\n mergedOptions.animation = mergedOptions.animation || 'slide';\n }\n\n // Calcular posición del diálogo\n const position = mergedOptions.toastMode\n ? this.getToastDialogPosition(mergedOptions.toastPosition || 'top-right')\n : this.getDialogPosition(mergedOptions.position || 'center');\n\n const dialogRef = this.dialog.open(AlertDialog, {\n width: mergedOptions.width,\n minWidth: mergedOptions.minWidth,\n maxWidth: mergedOptions.maxWidth,\n height: mergedOptions.height,\n disableClose: !mergedOptions.closeOnBackdropClick && mergedOptions.disableClose,\n data: mergedOptions,\n panelClass: this.getPanelClasses(mergedOptions),\n backdropClass: mergedOptions.backdropClass,\n position,\n closeOnNavigation: true,\n autoFocus: mergedOptions.focusConfirm !== false,\n restoreFocus: true,\n hasBackdrop: !mergedOptions.toastMode,\n });\n\n // Aplicar z-index dinámico usando el servicio centralizado\n this.zIndexService.applyZIndex(dialogRef);\n\n // Callbacks de ciclo de vida\n if (mergedOptions.willOpen) {\n mergedOptions.willOpen();\n }\n\n if (mergedOptions.didOpen) {\n setTimeout(() => mergedOptions.didOpen!(), 0);\n }\n\n // Auto-close con timer\n let timerHandle: any;\n if (mergedOptions.timer && mergedOptions.timer > 0) {\n timerHandle = setTimeout(() => {\n if (dialogRef) {\n dialogRef.close({\n isConfirmed: true,\n isDismissed: false,\n isDenied: false,\n dismiss: 'timer',\n });\n }\n }, mergedOptions.timer);\n }\n\n // Manejar ESC key\n if (!mergedOptions.allowEscapeKey) {\n dialogRef.keydownEvents().subscribe(event => {\n if (event.key === 'Escape') {\n event.preventDefault();\n event.stopPropagation();\n }\n });\n }\n\n // Manejar backdrop click\n if (!mergedOptions.closeOnBackdropClick) {\n dialogRef.backdropClick().subscribe(event => {\n event.preventDefault();\n event.stopPropagation();\n });\n }\n\n const resultPromise = firstValueFrom(dialogRef.afterClosed());\n\n // Callbacks de cierre\n dialogRef.beforeClosed().subscribe(() => {\n if (timerHandle) {\n clearTimeout(timerHandle);\n }\n if (mergedOptions.willClose) {\n mergedOptions.willClose();\n }\n });\n\n dialogRef.afterClosed().subscribe(() => {\n if (mergedOptions.didClose) {\n mergedOptions.didClose();\n }\n });\n\n return resultPromise;\n }\n\n /**\n * Alerta de éxito\n */\n success(options: string | Omit<AlertDialogOptions, 'type'>): Promise<AlertDialogResult> {\n const opts =\n typeof options === 'string'\n ? { message: options, title: '¡Éxito!' }\n : { title: '¡Éxito!', ...options };\n\n return this.fire({ ...opts, type: 'success' });\n }\n\n /**\n * Alerta de error\n */\n error(options: string | Omit<AlertDialogOptions, 'type'>): Promise<AlertDialogResult> {\n const opts =\n typeof options === 'string'\n ? { message: options, title: 'Error' }\n : { title: 'Error', ...options };\n\n return this.fire({ ...opts, type: 'error' });\n }\n\n /**\n * Alerta de advertencia\n */\n warning(options: string | Omit<AlertDialogOptions, 'type'>): Promise<AlertDialogResult> {\n const opts =\n typeof options === 'string'\n ? { message: options, title: 'Advertencia' }\n : { title: 'Advertencia', ...options };\n\n return this.fire({ ...opts, type: 'warning' });\n }\n\n /**\n * Alerta de información\n */\n info(options: string | Omit<AlertDialogOptions, 'type'>): Promise<AlertDialogResult> {\n const opts =\n typeof options === 'string'\n ? { message: options, title: 'Información' }\n : { title: 'Información', ...options };\n\n return this.fire({ ...opts, type: 'info' });\n }\n\n /**\n * Diálogo de confirmación\n */\n confirm(\n options: string | Omit<AlertDialogOptions, 'type' | 'showCancelButton'>,\n ): Promise<AlertDialogResult> {\n const opts =\n typeof options === 'string'\n ? { message: options, title: '¿Estás seguro?' }\n : { title: '¿Estás seguro?', ...options };\n\n return this.fire({\n ...opts,\n type: 'question',\n showCancelButton: true,\n confirmText: opts.confirmText || 'Sí',\n cancelText: opts.cancelText || 'No',\n });\n }\n\n /**\n * Prompt para capturar input del usuario\n */\n prompt(\n options: Omit<AlertDialogOptions, 'input'> & { input?: AlertDialogOptions['input'] },\n ): Promise<AlertDialogResult<string>> {\n return this.fire({\n type: 'question',\n showCancelButton: true,\n ...options,\n input: options.input || 'text',\n });\n }\n\n /**\n * Diálogo de confirmación para eliminar\n */\n delete(\n options: string | Omit<AlertDialogOptions, 'type' | 'showCancelButton'>,\n ): Promise<AlertDialogResult> {\n const opts =\n typeof options === 'string'\n ? { message: options, title: '¿Eliminar elemento?' }\n : { title: '¿Eliminar elemento?', ...options };\n\n return this.fire({\n ...opts,\n type: 'delete',\n showCancelButton: true,\n confirmText: opts.confirmText || 'Eliminar',\n cancelText: opts.cancelText || 'Cancelar',\n confirmButtonVariant: 'danger',\n });\n }\n\n /**\n * Toast notification (auto-cierre, posición personalizada)\n */\n toast(options: string | AlertDialogOptions): Promise<AlertDialogResult> {\n const opts = typeof options === 'string' ? { message: options } : options;\n\n return this.fire({\n timer: 3000,\n timerProgressBar: true,\n showConfirmButton: false,\n position: 'top-end',\n width: '350px',\n ...opts,\n });\n }\n\n /**\n * Cerrar todos los diálogos abiertos\n */\n closeAll(): void {\n this.dialog.closeAll();\n }\n\n private getDialogPosition(position: AlertPosition): any {\n const positions: Record<AlertPosition, any> = {\n top: { top: '20px' },\n 'top-start': { top: '20px', left: '20px' },\n 'top-end': { top: '20px', right: '20px' },\n center: {},\n 'center-start': { left: '20px' },\n 'center-end': { right: '20px' },\n bottom: { bottom: '20px' },\n 'bottom-start': { bottom: '20px', left: '20px' },\n 'bottom-end': { bottom: '20px', right: '20px' },\n };\n return positions[position] || {};\n }\n\n private getPanelClasses(options: AlertDialogOptions): string[] {\n const classes = ['alert-dialog-container'];\n\n if (options.customClass) {\n classes.push(options.customClass);\n }\n\n if (options.draggable) {\n classes.push('draggable-dialog');\n }\n\n // Agregar clases para layout\n if (options.layout) {\n classes.push(`layout-${options.layout}`);\n }\n\n // Agregar clases para posición de icono\n if (options.iconPosition) {\n classes.push(`icon-${options.iconPosition}`);\n }\n\n // Agregar clases para alineación de contenido\n if (options.contentAlignment) {\n classes.push(`content-${options.contentAlignment}`);\n }\n\n // Agregar clase para modo toast\n if (options.toastMode) {\n classes.push('toast-mode');\n }\n\n // Agregar clase para animación\n if (options.animation) {\n classes.push(`animation-${options.animation}`);\n }\n\n if (options.panelClass) {\n if (Array.isArray(options.panelClass)) {\n classes.push(...options.panelClass);\n } else {\n classes.push(options.panelClass);\n }\n }\n\n return classes;\n }\n\n private getToastPosition(position: string): AlertPosition {\n const positionMap: Record<string, AlertPosition> = {\n 'top-right': 'top-end',\n 'top-left': 'top-start',\n 'bottom-right': 'bottom-end',\n 'bottom-left': 'bottom-start',\n 'top-center': 'top',\n 'bottom-center': 'bottom',\n };\n return positionMap[position] || 'top-end';\n }\n\n private getToastDialogPosition(position: string): any {\n const positions: Record<string, any> = {\n 'top-right': { top: '20px', right: '20px' },\n 'top-left': { top: '20px', left: '20px' },\n 'bottom-right': { bottom: '20px', right: '20px' },\n 'bottom-left': { bottom: '20px', left: '20px' },\n 'top-center': { top: '20px' },\n 'bottom-center': { bottom: '20px' },\n };\n return positions[position] || positions['top-right'];\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n inject,\n input,\n ViewEncapsulation,\n} from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { ThemeSwitcher } from '../../services';\nimport { MatIconButton } from '@angular/material/button';\nimport { MatIcon } from '@angular/material/icon';\nimport { MatTooltip } from '@angular/material/tooltip';\n\n/**\n * A theme toggle button component that allows users to switch between\n * light and dark modes. Follows WAI-ARIA best practices for toggle buttons.\n */\n@Component({\n selector: 'acp-theme-toggle',\n imports: [MatIconButton, MatIcon, MatTooltip],\n templateUrl: './theme-toggle.html',\n styleUrl: './theme-toggle.scss',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'acp-theme-toggle',\n },\n})\nexport class ThemeToggle {\n private readonly themeSwitcher = inject(ThemeSwitcher);\n\n /** Icon to display when in dark mode (clicking will switch to light) */\n readonly lightModeIcon = input<string>('light_mode');\n\n /** Icon to display when in light mode (clicking will switch to dark) */\n readonly darkModeIcon = input<string>('dark_mode');\n\n /** Accessible label for when in dark mode */\n readonly lightModeLabel = input<string>('Switch to light mode');\n\n /** Accessible label for when in light mode */\n readonly darkModeLabel = input<string>('Switch to dark mode');\n\n /** Test ID for automated testing */\n readonly testId = input<string>('');\n\n /** Current dark mode state as a signal */\n protected readonly isDarkMode = toSignal(this.themeSwitcher.isDarkMode$, {\n initialValue: false,\n });\n\n /** Computed icon based on current theme */\n protected readonly currentIcon = computed(() =>\n this.isDarkMode() ? this.lightModeIcon() : this.darkModeIcon(),\n );\n\n /** Computed accessible label based on current theme */\n protected readonly currentLabel = computed(() =>\n this.isDarkMode() ? this.lightModeLabel() : this.darkModeLabel(),\n );\n\n /** Toggle between dark and light mode */\n toggleDarkMode(): void {\n this.themeSwitcher.toggleDarkMode();\n }\n}\n","<button\n mat-icon-button\n type=\"button\"\n (click)=\"toggleDarkMode()\"\n [attr.aria-label]=\"currentLabel()\"\n [attr.aria-pressed]=\"isDarkMode()\"\n [matTooltip]=\"currentLabel()\"\n [attr.data-testid]=\"testId() || null\"\n>\n <mat-icon>{{ currentIcon() }}</mat-icon>\n</button>\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 { Pipe, PipeTransform, TemplateRef } from '@angular/core';\n\n@Pipe({ name: 'isTemplateRef' })\nexport class AcpIsTemplateRefPipe implements PipeTransform {\n transform(obj: any) {\n return obj instanceof TemplateRef;\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { Observable, of, isObservable } from 'rxjs';\n\n@Pipe({ name: 'toObservable' })\nexport class AcpToObservablePipe implements PipeTransform {\n transform(value: Observable<any> | unknown): Observable<any> {\n return isObservable(value) ? value : of(value);\n }\n}\n","import { Directive, input, output } from '@angular/core';\n\n@Directive({\n selector: '[acpGridSelectableCell]',\n host: {\n '[class.selected]': 'selected',\n '(click)': 'onClick($event)',\n },\n})\nexport class DataGridSelectableCell {\n ctrlKeyPressed = false;\n shiftKeyPressed = false;\n\n get selected() {\n return this._selected;\n }\n private _selected = false;\n\n cellSelectable = input(true);\n\n cellSelectedChange = output<DataGridSelectableCell>();\n\n onClick(event: MouseEvent) {\n this.ctrlKeyPressed = event.ctrlKey;\n this.shiftKeyPressed = event.shiftKey;\n\n if (this.cellSelectable()) {\n this.select();\n }\n }\n\n select() {\n this._selected = true;\n this.cellSelectedChange.emit(this);\n }\n\n deselect() {\n this._selected = false;\n this.cellSelectedChange.emit(this);\n }\n\n toggle() {\n this._selected = !this._selected;\n this.cellSelectedChange.emit(this);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { DataGridColumn } from '../types';\n\n@Injectable({ providedIn: 'root' })\nexport class DataGridUtils {\n /**\n * Get cell's value based on the data and column's field (e.g. `a.b.c`)\n * @param rowData Row data\n * @param colDef Column definition\n * @returns\n */\n getCellValue(rowData: Record<string, any>, colDef: DataGridColumn): string {\n const keyArr = colDef.field ? colDef.field.split('.') : [];\n let tmp: any = '';\n keyArr.forEach((key: string, i: number) => {\n if (i === 0) {\n tmp = rowData[key];\n } else {\n tmp = tmp && tmp[key];\n }\n });\n return tmp;\n }\n\n /**\n * Get all data of a col\n * @param data All data\n * @param colDef Column definition\n * @returns\n */\n getColData(data: any[], colDef: DataGridColumn): any[] {\n return data.map(rowData => this.getCellValue(rowData, colDef));\n }\n\n /**\n * Whether the value is empty (`null`, `undefined`, `''`, `[]`)\n * @param value\n * @returns\n */\n isEmpty(value: any) {\n return value == null || value.toString() === '';\n }\n\n /**\n * Whether the value contain HTML\n * @param value\n * @returns\n */\n isContainHTML(value: string) {\n return /<\\/?[a-z][\\s\\S]*>/i.test(value);\n }\n}\n","import { Directive, Input, TemplateRef, output } from '@angular/core';\n\n@Directive({\n selector: '[acpDataGridExpansionToggle]',\n host: {\n '[class.expanded]': 'opened',\n '(click)': 'onClick($event)',\n },\n})\nexport class DataGridExpansionToggle {\n private _opened = false;\n private _row: any;\n private _tplRef!: TemplateRef<any>;\n\n @Input()\n get opened() {\n return this._opened;\n }\n set opened(newValue: boolean) {\n this._opened = newValue;\n this.openedChange.emit(newValue);\n }\n openedChange = output<boolean>();\n\n @Input()\n set expandableRow(value: any) {\n if (value !== this._row) {\n this._row = value;\n }\n }\n\n @Input()\n set expansionRowTpl(value: TemplateRef<any>) {\n if (value !== this._tplRef) {\n this._tplRef = value;\n }\n }\n\n toggleChange = output<DataGridExpansionToggle>();\n\n onClick(event: MouseEvent) {\n event.preventDefault();\n event.stopPropagation();\n this.toggle();\n }\n\n toggle() {\n this.opened = !this.opened;\n this.toggleChange.emit(this);\n }\n}\n","import { KeyValueChangeRecord, Pipe, PipeTransform, inject } from '@angular/core';\nimport { isObservable } from 'rxjs';\nimport { DataGridColumn, DataGridColumnButton, DataGridRowClassFormatter } from '../types';\nimport { DataGridUtils } from '../utils/data-grid.util';\n\n@Pipe({ name: 'colClass' })\nexport class DataGridColClassPipe implements PipeTransform {\n transform(\n colDef: DataGridColumn,\n rowData?: Record<string, any>,\n rowChangeRecord?: KeyValueChangeRecord<string, any>,\n currentValue?: any,\n ) {\n if (rowChangeRecord) {\n /* empty */\n }\n if (currentValue) {\n /* empty */\n }\n if (typeof colDef.class === 'string') {\n return colDef.class;\n } else if (typeof colDef.class === 'function') {\n return colDef.class(rowData, colDef);\n }\n return '';\n }\n}\n\n@Pipe({ name: 'rowClass' })\nexport class DataGridRowClassPipe implements PipeTransform {\n transform(\n rowData: Record<string, any>,\n index: number | undefined,\n dataIndex: number,\n rowClassFormatter?: DataGridRowClassFormatter,\n ) {\n const rowIndex = index === undefined ? dataIndex : index;\n const classList: string[] = rowIndex % 2 === 1 ? ['mat-row-odd'] : [];\n if (rowClassFormatter) {\n for (const key of Object.keys(rowClassFormatter)) {\n if (rowClassFormatter[key](rowData, rowIndex)) {\n classList.push(key);\n }\n }\n }\n return classList.join(' ');\n }\n}\n\n@Pipe({ name: 'cellActions' })\nexport class DataGridCellActionsPipe implements PipeTransform {\n transform(\n btns?: DataGridColumnButton[] | ((rowData: any) => DataGridColumnButton[]),\n rowData?: Record<string, any>,\n rowChangeRecord?: KeyValueChangeRecord<string, any>,\n currentValue?: any,\n ) {\n if (rowChangeRecord) {\n /* empty */\n }\n if (currentValue) {\n /* empty */\n }\n if (typeof btns === 'function') {\n return btns(rowData);\n } else if (Array.isArray(btns)) {\n return btns;\n }\n return [];\n }\n}\n\n@Pipe({ name: 'cellActionTooltip' })\nexport class DataGridCellActionTooltipPipe implements PipeTransform {\n transform(btn: DataGridColumnButton) {\n if (typeof btn.tooltip === 'string' || isObservable(btn.tooltip)) {\n return { message: btn.tooltip };\n } else {\n return btn.tooltip || { message: '' };\n }\n }\n}\n\n@Pipe({ name: 'cellActionBadge' })\nexport class DataGridCellActionBadgePipe implements PipeTransform {\n transform(btn: DataGridColumnButton) {\n if (typeof btn.badge === 'number' || typeof btn.badge === 'string' || isObservable(btn.badge)) {\n return { content: btn.badge };\n } else {\n return btn.badge || { content: '' };\n }\n }\n}\n\n@Pipe({ name: 'cellActionDisable' })\nexport class DataGridCellActionDisablePipe implements PipeTransform {\n transform(\n btn: DataGridColumnButton,\n rowData: Record<string, any>,\n rowChangeRecord?: KeyValueChangeRecord<string, any>,\n currentValue?: any,\n ) {\n if (typeof rowChangeRecord === 'object') {\n /* empty */\n }\n if (currentValue) {\n /* empty */\n }\n if (typeof btn.disabled === 'boolean') {\n return btn.disabled;\n } else if (typeof btn.disabled === 'function') {\n return btn.disabled(rowData);\n } else {\n return false;\n }\n }\n}\n\n@Pipe({ name: 'cellSummary' })\nexport class DataGridCellSummaryPipe implements PipeTransform {\n private utils = inject(DataGridUtils);\n\n transform(data: any[], colDef: DataGridColumn) {\n if (typeof colDef.summary === 'string') {\n return colDef.summary;\n } else if (typeof colDef.summary === 'function') {\n return (colDef.summary as (data: any[], colDef?: DataGridColumn) => any)(\n this.utils.getColData(data, colDef),\n colDef,\n );\n }\n }\n}\n","import { NgTemplateOutlet } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n input,\n ViewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { MatIcon } from '@angular/material/icon';\nimport { MatMenu, MatMenuItem, MatMenuTrigger } from '@angular/material/menu';\nimport { DataGridCellActionDisablePipe } from '../../pipes/data-grid.pipe';\nimport { DataGridMenuItem } from '../../types';\n\n@Component({\n selector: 'acp-data-grid-menu',\n exportAs: 'acpDataGridMenu',\n template: `\n <mat-menu class=\"mtx-grid-menu\">\n @for (item of items(); track $index) {\n @if (!item.iif || item.iif(data())) {\n @if (item.children && item.children.length > 0) {\n <button\n mat-menu-item\n [matMenuTriggerFor]=\"gridMenu.menu\"\n [disabled]=\"item | cellActionDisable: data()\"\n [class]=\"item.class\"\n (click)=\"item.click?.(data())\"\n >\n <mat-icon *ngTemplateOutlet=\"iconTpl; context: { $implicit: item }\" />\n <span>{{ item.text }}</span>\n </button>\n\n <acp-data-grid-menu #gridMenu [items]=\"item.children\" [data]=\"data()\" />\n } @else {\n <button\n mat-menu-item\n [disabled]=\"item | cellActionDisable: data()\"\n [class]=\"item.class\"\n (click)=\"item.click?.(data())\"\n >\n <mat-icon *ngTemplateOutlet=\"iconTpl; context: { $implicit: item }\" />\n <span>{{ item.text }}</span>\n </button>\n }\n }\n }\n </mat-menu>\n\n <ng-template #iconTpl let-item>\n @if (item.icon) {\n <mat-icon class=\"mtx-grid-icon\">{{ item.icon }}</mat-icon>\n } @else if (item.fontIcon) {\n <mat-icon class=\"mtx-grid-icon\" [fontIcon]=\"item.fontIcon\" />\n } @else if (item.svgIcon) {\n <mat-icon class=\"mtx-grid-icon\" [svgIcon]=\"item.svgIcon\" />\n }\n </ng-template>\n `,\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n NgTemplateOutlet,\n MatMenu,\n MatMenuItem,\n MatMenuTrigger,\n MatIcon,\n DataGridCellActionDisablePipe,\n ],\n})\nexport class DataGridMenu {\n @ViewChild(MatMenu, { static: true }) menu!: MatMenu;\n\n items = input<DataGridMenuItem[]>([]);\n data = input<Record<string, any>>({});\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n inject,\n input,\n KeyValueChangeRecord,\n KeyValueChanges,\n KeyValueDiffer,\n KeyValueDiffers,\n output,\n OnInit,\n DoCheck,\n} from '@angular/core';\nimport { isObservable } from 'rxjs';\nimport { MatButton, MatIconButton } from '@angular/material/button';\nimport {\n AsyncPipe,\n CurrencyPipe,\n DatePipe,\n DecimalPipe,\n NgTemplateOutlet,\n PercentPipe,\n} from '@angular/common';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { MatBadgeModule } from '@angular/material/badge';\nimport { MatChip, MatChipListbox } from '@angular/material/chips';\nimport { MatIcon } from '@angular/material/icon';\nimport {\n DataGridCellActionBadgePipe,\n DataGridCellActionDisablePipe,\n DataGridCellActionsPipe,\n DataGridCellActionTooltipPipe,\n DataGridCellSummaryPipe,\n} from '../../../pipes/data-grid.pipe';\nimport { AcpToObservablePipe } from '../../../pipes/to-observable.pipe';\nimport { DataGridMenu } from '../data-grid-menu';\nimport { DataGridUtils } from '../../../utils/data-grid.util';\nimport { DataGridColumnButton } from '../../../types';\n\n@Component({\n selector: 'acp-data-grid-cell',\n imports: [\n MatMenuModule,\n DataGridCellSummaryPipe,\n DataGridCellActionsPipe,\n MatIconButton,\n MatTooltipModule,\n MatBadgeModule,\n DataGridCellActionDisablePipe,\n DataGridCellActionTooltipPipe,\n AcpToObservablePipe,\n AsyncPipe,\n DataGridCellActionBadgePipe,\n MatIcon,\n DataGridMenu,\n MatButton,\n NgTemplateOutlet,\n MatChipListbox,\n MatChip,\n DecimalPipe,\n CurrencyPipe,\n PercentPipe,\n DatePipe,\n ],\n templateUrl: './data-grid-cell.html',\n styleUrl: './data-grid-cell.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class DataGridCell implements OnInit, DoCheck {\n private _utils = inject(DataGridUtils);\n private _differs = inject(KeyValueDiffers);\n private _changeDetectorRef = inject(ChangeDetectorRef);\n\n rowData = input<Record<string, any>>({});\n colDef = input<any>();\n\n summary = input(false);\n data = input<any[]>([]);\n\n placeholder = input('--');\n\n rowDataChange = output<KeyValueChangeRecord<string, any>>();\n\n private rowDataDiffer?: KeyValueDiffer<string, any>;\n\n rowChangeRecord?: KeyValueChangeRecord<string, any>;\n\n get _value() {\n return this._utils.getCellValue(this.rowData(), this.colDef());\n }\n\n ngOnInit(): void {\n this.rowDataDiffer = this._differs.find(this.rowData()).create();\n }\n\n ngDoCheck(): void {\n const changes = this.rowDataDiffer?.diff(this.rowData());\n if (changes) {\n this._applyChanges(changes);\n }\n }\n\n private _applyChanges(changes: KeyValueChanges<string, any>) {\n changes.forEachChangedItem(record => {\n this.rowChangeRecord = record;\n this.rowDataChange.emit(record);\n this._changeDetectorRef.markForCheck();\n });\n }\n\n _getText(value: any) {\n return value === undefined ? '' : this._utils.isEmpty(value) ? this.placeholder() : value;\n }\n\n _getTooltip(value: any) {\n return this._utils.isEmpty(value) ? '' : value;\n }\n\n _getFormatterTooltip(value: any) {\n return this._utils.isContainHTML(value) || this._utils.isEmpty(value) ? '' : value;\n }\n\n _onActionClick(event: MouseEvent, btn: DataGridColumnButton, rowData: Record<string, any>) {\n event.preventDefault();\n event.stopPropagation();\n\n if (typeof btn.pop === 'string' || isObservable(btn.pop)) {\n alert('');\n } else if (typeof btn.pop === 'object') {\n alert('objecg');\n } else {\n btn.click?.(rowData);\n }\n }\n}\n","@if (summary()) {\n<span\n [title]=\"_getFormatterTooltip(data() | cellSummary: colDef())\"\n [innerHTML]=\"_getText(data() | cellSummary: colDef())\"\n>\n</span>\n} @else {\n<!-- Custom formatting -->\n@if (colDef().formatter) {\n<span\n [title]=\"_getFormatterTooltip(colDef().formatter(rowData(), colDef()))\"\n [innerHTML]=\"_getText(colDef().formatter(rowData(), colDef()))\"\n>\n</span>\n} @else {\n<!-- Default formatting -->\n@switch (colDef().type) {\n<!-- Buttons -->\n@case ('button') { @for ( btn of colDef().buttons | cellActions: rowData() : rowChangeRecord :\nrowChangeRecord?.currentValue; track btn ) { @if (!btn.iif || btn.iif(rowData())) { @if\n(btn.children && btn.children.length > 0) { @if (btn.type === 'icon') {\n<button\n matIconButton\n [color]=\"btn.color || 'primary'\"\n type=\"button\"\n class=\"acp-grid-action-button\"\n [class]=\"btn.class\"\n [disabled]=\"\n btn\n | cellActionDisable\n : rowData()\n : rowChangeRecord\n : rowChangeRecord?.currentValue\n \"\n [matTooltip]=\"(btn | cellActionTooltip).message | toObservable | async\"\n [matTooltipClass]=\"(btn | cellActionTooltip).class\"\n [matTooltipHideDelay]=\"(btn | cellActionTooltip).hideDelay\"\n [matTooltipShowDelay]=\"(btn | cellActionTooltip).showDelay\"\n [matTooltipPosition]=\"(btn | cellActionTooltip).position || 'below'\"\n [matTooltipPositionAtOrigin]=\"(btn | cellActionTooltip).positionAtOrigin\"\n [matTooltipTouchGestures]=\"(btn | cellActionTooltip).touchGestures || 'auto'\"\n [matTooltipDisabled]=\"(btn | cellActionTooltip).disabled\"\n [matBadge]=\"(btn | cellActionBadge).content | toObservable | async\"\n [matBadgeDescription]=\"(btn | cellActionBadge).description | toObservable | async\"\n [matBadgeColor]=\"(btn | cellActionBadge).color\"\n [matBadgePosition]=\"(btn | cellActionBadge).position || 'above after'\"\n [matBadgeSize]=\"(btn | cellActionBadge).size || 'medium'\"\n [matBadgeOverlap]=\"(btn | cellActionBadge).overlap\"\n [matBadgeDisabled]=\"(btn | cellActionBadge).disabled\"\n [matBadgeHidden]=\"(btn | cellActionBadge).hidden\"\n [matMenuTriggerFor]=\"\n btn.children && btn.children.length > 0 ? gridMenu.menu : null\n \"\n (click)=\"$event.stopPropagation()\"\n>\n <mat-icon *ngTemplateOutlet=\"iconTpl; context: { $implicit: btn }\" />\n</button>\n\n<acp-data-grid-menu #gridMenu [items]=\"btn.children || []\" [data]=\"rowData()\" />\n} @else {\n<button\n [matButton]=\"btn.type || 'text'\"\n [color]=\"btn.color || 'primary'\"\n type=\"button\"\n class=\"acp-grid-action-button\"\n [class]=\"btn.class\"\n [disabled]=\"\n btn\n | cellActionDisable\n : rowData()\n : rowChangeRecord\n : rowChangeRecord?.currentValue\n \"\n [matTooltip]=\"(btn | cellActionTooltip).message | toObservable | async\"\n [matTooltipClass]=\"(btn | cellActionTooltip).class\"\n [matTooltipHideDelay]=\"(btn | cellActionTooltip).hideDelay\"\n [matTooltipShowDelay]=\"(btn | cellActionTooltip).showDelay\"\n [matTooltipPosition]=\"(btn | cellActionTooltip).position || 'below'\"\n [matTooltipPositionAtOrigin]=\"(btn | cellActionTooltip).positionAtOrigin\"\n [matTooltipTouchGestures]=\"(btn | cellActionTooltip).touchGestures || 'auto'\"\n [matTooltipDisabled]=\"(btn | cellActionTooltip).disabled\"\n [matBadge]=\"(btn | cellActionBadge).content | toObservable | async\"\n [matBadgeDescription]=\"(btn | cellActionBadge).description | toObservable | async\"\n [matBadgeColor]=\"(btn | cellActionBadge).color\"\n [matBadgePosition]=\"(btn | cellActionBadge).position || 'above after'\"\n [matBadgeSize]=\"(btn | cellActionBadge).size || 'medium'\"\n [matBadgeOverlap]=\"(btn | cellActionBadge).overlap\"\n [matBadgeDisabled]=\"(btn | cellActionBadge).disabled\"\n [matBadgeHidden]=\"(btn | cellActionBadge).hidden\"\n [matMenuTriggerFor]=\"\n btn.children && btn.children.length > 0 ? gridMenu.menu : null\n \"\n (click)=\"$event.stopPropagation()\"\n>\n <mat-icon *ngTemplateOutlet=\"iconTpl; context: { $implicit: btn }\" />\n <span>{{ btn.text | toObservable | async }}</span>\n</button>\n\n<acp-data-grid-menu #gridMenu [items]=\"btn.children || []\" [data]=\"rowData()\" />\n} } @else { @if (btn.type === 'icon') {\n<button\n matIconButton\n [color]=\"btn.color || 'primary'\"\n type=\"button\"\n class=\"acp-grid-action-button\"\n [class]=\"btn.class\"\n [disabled]=\"\n btn\n | cellActionDisable\n : rowData()\n : rowChangeRecord\n : rowChangeRecord?.currentValue\n \"\n [matTooltip]=\"(btn | cellActionTooltip).message | toObservable | async\"\n [matTooltipClass]=\"(btn | cellActionTooltip).class\"\n [matTooltipHideDelay]=\"(btn | cellActionTooltip).hideDelay\"\n [matTooltipShowDelay]=\"(btn | cellActionTooltip).showDelay\"\n [matTooltipPosition]=\"(btn | cellActionTooltip).position || 'below'\"\n [matTooltipPositionAtOrigin]=\"(btn | cellActionTooltip).positionAtOrigin\"\n [matTooltipTouchGestures]=\"(btn | cellActionTooltip).touchGestures || 'auto'\"\n [matTooltipDisabled]=\"(btn | cellActionTooltip).disabled\"\n [matBadge]=\"(btn | cellActionBadge).content | toObservable | async\"\n [matBadgeDescription]=\"(btn | cellActionBadge).description | toObservable | async\"\n [matBadgeColor]=\"(btn | cellActionBadge).color\"\n [matBadgePosition]=\"(btn | cellActionBadge).position || 'above after'\"\n [matBadgeSize]=\"(btn | cellActionBadge).size || 'medium'\"\n [matBadgeOverlap]=\"(btn | cellActionBadge).overlap\"\n [matBadgeDisabled]=\"(btn | cellActionBadge).disabled\"\n [matBadgeHidden]=\"(btn | cellActionBadge).hidden\"\n (click)=\"_onActionClick($event, btn, rowData())\"\n>\n <mat-icon *ngTemplateOutlet=\"iconTpl; context: { $implicit: btn }\" />\n</button>\n} @else {\n<button\n [matButton]=\"btn.type || 'text'\"\n [color]=\"btn.color || 'primary'\"\n type=\"button\"\n class=\"acp-grid-action-button\"\n [class]=\"btn.class\"\n [disabled]=\"\n btn\n | cellActionDisable\n : rowData()\n : rowChangeRecord\n : rowChangeRecord?.currentValue\n \"\n [matTooltip]=\"(btn | cellActionTooltip).message | toObservable | async\"\n [matTooltipClass]=\"(btn | cellActionTooltip).class\"\n [matTooltipHideDelay]=\"(btn | cellActionTooltip).hideDelay\"\n [matTooltipShowDelay]=\"(btn | cellActionTooltip).showDelay\"\n [matTooltipPosition]=\"(btn | cellActionTooltip).position || 'below'\"\n [matTooltipPositionAtOrigin]=\"(btn | cellActionTooltip).positionAtOrigin\"\n [matTooltipTouchGestures]=\"(btn | cellActionTooltip).touchGestures || 'auto'\"\n [matTooltipDisabled]=\"(btn | cellActionTooltip).disabled\"\n [matBadge]=\"(btn | cellActionBadge).content | toObservable | async\"\n [matBadgeDescription]=\"(btn | cellActionBadge).description | toObservable | async\"\n [matBadgeColor]=\"(btn | cellActionBadge).color\"\n [matBadgePosition]=\"(btn | cellActionBadge).position || 'above after'\"\n [matBadgeSize]=\"(btn | cellActionBadge).size || 'medium'\"\n [matBadgeOverlap]=\"(btn | cellActionBadge).overlap\"\n [matBadgeDisabled]=\"(btn | cellActionBadge).disabled\"\n [matBadgeHidden]=\"(btn | cellActionBadge).hidden\"\n (click)=\"_onActionClick($event, btn, rowData())\"\n>\n <mat-icon *ngTemplateOutlet=\"iconTpl; context: { $implicit: btn }\" />\n <span>{{ btn.text | toObservable | async }}</span>\n</button>\n} } } } }\n<!-- Tag -->\n@case ('tag') { @if (colDef().tag && colDef().tag[_value]) {\n<mat-chip-listbox>\n <mat-chip color=\"primary\" [class]=\"'bg-' + colDef().tag[_value].color\">\n {{ colDef().tag[_value].text }}\n </mat-chip>\n</mat-chip-listbox>\n} @else { {{ _value }} } }\n<!-- Link -->\n@case ('link') {\n<a [href]=\"_value\" target=\"_blank\">{{ _value }}</a>\n}\n<!-- Image -->\n@case ('image') { @if (_value) {\n<!-- Imagen real -->\n<img class=\"placeholder-image\" [src]=\"_value\" alt=\"img\" />\n} @else {\n<!-- Placeholder -->\n<div class=\"placeholder-box\">\n <svg class=\"placeholder-icon\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n stroke-width=\"2\"\n d=\"M4 16l4.586-4.586a2 2 0 012.828 0L15 14m-12 5h16a1 1 0 001-1V5a1 1 0 00-1-1H3a1 1 0 00-1 1v14a1 1 0 001 1z\"\n />\n </svg>\n</div>\n} }\n<!-- Boolean -->\n@case ('boolean') {\n<span [title]=\"_getTooltip(_value)\">{{ _getText(_value) }}</span>\n}\n<!-- Number -->\n@case ('number') {\n<span\n [title]=\"\n _getTooltip(\n _value | number: colDef().typeParameter?.digitsInfo : colDef().typeParameter?.locale\n )\n \"\n>\n {{ _getText( _value | number: colDef().typeParameter?.digitsInfo : colDef().typeParameter?.locale\n ) }}\n</span>\n}\n<!-- Currency -->\n@case ('currency') {\n<span\n [title]=\"\n _getTooltip(\n _value\n | currency\n : colDef().typeParameter?.currencyCode\n : colDef().typeParameter?.display\n : colDef().typeParameter?.digitsInfo\n : colDef().typeParameter?.locale\n )\n \"\n>\n {{ _getText( _value | currency : colDef().typeParameter?.currencyCode :\n colDef().typeParameter?.display : colDef().typeParameter?.digitsInfo :\n colDef().typeParameter?.locale ) }}\n</span>\n}\n<!-- Percent -->\n@case ('percent') {\n<span\n [title]=\"\n _getTooltip(\n _value | percent: colDef().typeParameter?.digitsInfo : colDef().typeParameter?.locale\n )\n \"\n>\n {{ _getText( _value | percent: colDef().typeParameter?.digitsInfo : colDef().typeParameter?.locale\n ) }}\n</span>\n}\n<!-- Date -->\n@case ('date') {\n<span\n [title]=\"\n _getTooltip(\n _value\n | date\n : colDef().typeParameter?.format\n : colDef().typeParameter?.timezone\n : colDef().typeParameter?.locale\n )\n \"\n>\n {{ _getText( _value | date : colDef().typeParameter?.format : colDef().typeParameter?.timezone :\n colDef().typeParameter?.locale ) }}\n</span>\n}\n<!-- Default -->\n@default {\n<span [title]=\"_getTooltip(_value)\">{{ _getText(_value) }}</span>\n} } } }\n\n<ng-template #iconTpl let-btn>\n @if (btn.icon) {\n <mat-icon class=\"acp-grid-icon\">{{ btn.icon }}</mat-icon>\n } @else if (btn.fontIcon) {\n <mat-icon class=\"acp-grid-icon\" [fontIcon]=\"btn.fontIcon\" />\n } @else if (btn.svgIcon) {\n <mat-icon class=\"acp-grid-icon\" [svgIcon]=\"btn.svgIcon\" />\n }\n</ng-template>\n","import { Injectable, ElementRef, signal, computed } from '@angular/core';\nimport { Subject, fromEvent } from 'rxjs';\nimport { filter, takeUntil } from 'rxjs/operators';\n\n/**\n * Interfaz que define un elemento que puede recibir el foco y participar en la navegación por teclado.\n */\nexport interface FocusableElement {\n /** El ElementRef del elemento DOM */\n element: ElementRef;\n /** Un nombre único para identificar el elemento en el sistema de navegación */\n name: string;\n /** Callback opcional que se ejecuta cuando se presiona la flecha arriba y no hay más elementos arriba */\n onArrowUp?: () => void;\n /** Callback opcional que se ejecuta cuando se presiona la flecha abajo y no hay más elementos abajo */\n onArrowDown?: () => void;\n /** Callback opcional que se ejecuta cuando se presiona la flecha izquierda */\n onArrowLeft?: () => void;\n /** Callback opcional que se ejecuta cuando se presiona la flecha derecha */\n onArrowRight?: () => void;\n /** Callback opcional que se ejecuta cuando el elemento recibe el foco */\n onFocus?: (index?: number) => void;\n /** Callback opcional que se ejecuta cuando el índice enfocado dentro del elemento cambia (ej: una fila en una tabla) */\n onFocusedChange?: (index: number) => void;\n}\n\n/**\n * Servicio que gestiona la navegación por teclado entre componentes registrados.\n * Permite mover el foco entre elementos usando las teclas de flecha y centraliza el estado del foco.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class KeyboardNavigationService {\n /** Array privado que contiene todos los elementos registrados para la navegación */\n private focusableElements: FocusableElement[] = [];\n\n /** Signal que mantiene el índice del elemento actualmente enfocado en el array `focusableElements` */\n private currentFocusIndex = signal(-1);\n\n /** Subject para notificar la destrucción del servicio y limpiar suscripciones */\n private destroy$ = new Subject<void>();\n\n // --- Signals Públicos para Exponer el Estado ---\n\n /**\n * Signal público que expone el índice de la fila enfocada (usado por componentes como DataGrid).\n * Es un signal escribible porque el componente hijo (DataGrid) es quien actualiza su valor.\n */\n public focusedRowIndex = signal(-1);\n\n /**\n * Signal público que expone el nombre del elemento actualmente enfocado.\n * Es un signal `computed` que se deriva automáticamente del `currentFocusIndex` privado.\n */\n public focusedElementName = computed(() => {\n const index = this.currentFocusIndex();\n if (index >= 0 && index < this.focusableElements.length) {\n return this.focusableElements[index].name;\n }\n return '';\n });\n\n /**\n * Registra un nuevo elemento en el sistema de navegación por teclado.\n * @param element El objeto FocusableElement a registrar.\n */\n registerElement(element: FocusableElement) {\n if (!element || !element.element) {\n console.error(\n 'KeyboardNavigationService: No se puede registrar el elemento. El ElementRef es undefined o nulo. ' +\n 'Asegúrate de que el @ViewChild esté correctamente configurado y que el elemento exista en el DOM cuando ngAfterViewInit se ejecute.',\n element,\n );\n return; // Salimos del método para evitar el crash\n }\n this.focusableElements.push(element);\n\n // Configurar eventos de teclado para este elemento\n fromEvent<KeyboardEvent>(element.element.nativeElement, 'keydown')\n .pipe(\n takeUntil(this.destroy$),\n filter(event => ['ArrowUp', 'ArrowDown', 'ArrowLeft', 'ArrowRight'].includes(event.key)),\n )\n .subscribe(event => {\n event.preventDefault(); // Prevenir el comportamiento por defecto del navegador (scroll, etc.)\n this.handleKeyNavigation(event.key);\n });\n\n // Configurar eventos de foco para este elemento\n fromEvent<FocusEvent>(element.element.nativeElement, 'focus')\n .pipe(takeUntil(this.destroy$))\n .subscribe(() => {\n const index = this.focusableElements.findIndex(e => e.element === element.element);\n this.currentFocusIndex.set(index);\n\n // Ejecutar el callback onFocus si está definido\n if (element.onFocus) {\n element.onFocus(index);\n }\n });\n }\n\n /**\n * Elimina un elemento del sistema de navegación por teclado.\n * @param element El ElementRef del elemento a desregistrar.\n */\n unregisterElement(element: ElementRef) {\n const index = this.focusableElements.findIndex(e => e.element === element);\n if (index !== -1) {\n this.focusableElements.splice(index, 1);\n\n // Si el elemento eliminado estaba enfocado, resetear el estado del foco\n if (this.currentFocusIndex() === index) {\n this.currentFocusIndex.set(-1);\n }\n }\n }\n\n /**\n * Mueve el foco a un elemento específico por su nombre.\n * @param name El nombre único del elemento al que se quiere mover el foco.\n * @param index Opcional: el índice interno a enfocar (ej: el índice de una fila en una tabla).\n */\n focusElement(name: string, index?: number) {\n const elementIndex = this.focusableElements.findIndex(e => e.name === name);\n if (elementIndex !== -1) {\n this.currentFocusIndex.set(elementIndex);\n\n // Forzar el foco en el elemento del DOM\n this.focusableElements[elementIndex].element.nativeElement.focus();\n\n // Si el elemento tiene un callback de cambio de foco, llamarlo\n if (this.focusableElements[elementIndex].onFocusedChange && index !== undefined) {\n this.focusableElements[elementIndex].onFocusedChange(index);\n }\n }\n }\n\n /**\n * Actualiza el índice enfocado (usado por componentes internos como una tabla).\n * @param index El nuevo índice enfocado.\n */\n updateFocusedIndex(index: number) {\n this.focusedRowIndex.set(index);\n\n // Obtener el elemento actualmente enfocado y llamar a su callback\n const currentElement = this.focusableElements[this.currentFocusIndex()];\n if (currentElement?.onFocusedChange) {\n currentElement.onFocusedChange(index);\n }\n }\n\n /**\n * Maneja la lógica de navegación basada en la tecla presionada.\n * @param key La tecla presionada ('ArrowUp', 'ArrowDown', etc.).\n */\n private handleKeyNavigation(key: string) {\n if (this.currentFocusIndex() === -1) return;\n\n const currentElement = this.focusableElements[this.currentFocusIndex()];\n\n switch (key) {\n case 'ArrowUp':\n if (this.currentFocusIndex() > 0) {\n // Moverse al elemento anterior en la lista\n this.currentFocusIndex.set(this.currentFocusIndex() - 1);\n this.focusableElements[this.currentFocusIndex()].element.nativeElement.focus();\n } else if (currentElement.onArrowUp) {\n // Si no hay más elementos arriba, ejecutar el callback personalizado\n currentElement.onArrowUp();\n }\n break;\n\n case 'ArrowDown':\n if (this.currentFocusIndex() < this.focusableElements.length - 1) {\n // Moverse al siguiente elemento en la lista\n this.currentFocusIndex.set(this.currentFocusIndex() + 1);\n this.focusableElements[this.currentFocusIndex()].element.nativeElement.focus();\n } else if (currentElement.onArrowDown) {\n // Si no hay más elementos abajo, ejecutar el callback personalizado\n currentElement.onArrowDown();\n }\n break;\n\n case 'ArrowLeft':\n if (currentElement.onArrowLeft) {\n currentElement.onArrowLeft();\n }\n break;\n\n case 'ArrowRight':\n if (currentElement.onArrowRight) {\n currentElement.onArrowRight();\n }\n break;\n }\n }\n\n /**\n * Resetea el índice de la fila enfocada a -1.\n * Útil cuando los datos de un componente cambian y el foco anterior ya no es válido.\n */\n resetFocusedRowIndex() {\n this.focusedRowIndex.set(-1);\n }\n /**\n * Método de limpieza para ser llamado cuando el servicio se destruye.\n * Cierra el Subject `destroy$` para completar todas las suscripciones activas.\n */\n onDestroy() {\n this.destroy$.next();\n this.destroy$.complete();\n }\n}\n","import {\n Component,\n input,\n output,\n effect,\n computed,\n signal,\n TemplateRef,\n InjectionToken,\n inject,\n booleanAttribute,\n TrackByFunction,\n ViewChild,\n ContentChildren,\n QueryList,\n ElementRef,\n SimpleChanges,\n ChangeDetectionStrategy,\n KeyValueChangeRecord,\n ANIMATION_MODULE_TYPE,\n ViewEncapsulation,\n AfterViewInit,\n OnDestroy,\n HostListener,\n OnChanges,\n viewChild,\n} from '@angular/core';\nimport { AsyncPipe, NgTemplateOutlet } from '@angular/common';\nimport { fromEvent, Subject, takeUntil, debounceTime, filter } from 'rxjs';\n\n// Material Imports\nimport {\n MatCell,\n MatCellDef,\n MatColumnDef,\n MatFooterCell,\n MatFooterCellDef,\n MatFooterRow,\n MatFooterRowDef,\n MatHeaderCell,\n MatHeaderCellDef,\n MatHeaderRow,\n MatHeaderRowDef,\n MatRow,\n MatRowDef,\n MatTable,\n MatTableDataSource,\n} from '@angular/material/table';\nimport { MatPaginator, PageEvent } from '@angular/material/paginator';\nimport { MatSort, MatSortHeader, Sort, SortDirection } from '@angular/material/sort';\nimport { MatCheckbox } from '@angular/material/checkbox';\nimport { MatIconButton } from '@angular/material/button';\nimport { MatProgressBar } from '@angular/material/progress-bar';\nimport { SelectionModel } from '@angular/cdk/collections';\n\n// Shared Imports\n\nimport { AcpIsTemplateRefPipe } from '../../pipes/is-template-ref.pipe';\nimport { AcpToObservablePipe } from '../../pipes/to-observable.pipe';\nimport { DataGridSelectableCell } from '../../directives/selectable-cell';\nimport { DataGridUtils } from '../../utils/data-grid.util';\nimport { DataGridExpansionToggle } from '../../directives/data-grid-expansion-toggle';\nimport { DataGridCell } from './data-grid-cell/data-grid-cell';\nimport {\n DataGridCellTemplate,\n DataGridColumn,\n DataGridDefaultOptions,\n DataGridRowClassFormatter,\n DataGridRowSelectionFormatter,\n} from '../../types';\nimport { DataGridColClassPipe, DataGridRowClassPipe } from '../../pipes/data-grid.pipe';\nimport { KeyboardNavigationService } from './keyboard-navigation';\n\nexport const DATA_GRID_DEFAULT_OPTIONS = new InjectionToken<DataGridDefaultOptions>(\n 'data-grid-default-options',\n);\n\n@Component({\n selector: 'acp-data-grid',\n exportAs: 'dataGrid',\n imports: [\n AsyncPipe,\n NgTemplateOutlet,\n MatProgressBar,\n MatIconButton,\n MatCheckbox,\n MatTable,\n MatColumnDef,\n MatHeaderRowDef,\n MatHeaderRow,\n MatRowDef,\n MatRow,\n MatFooterRowDef,\n MatFooterRow,\n MatHeaderCellDef,\n MatHeaderCell,\n MatCellDef,\n MatCell,\n MatFooterCellDef,\n MatFooterCell,\n MatSort,\n MatSortHeader,\n MatPaginator,\n DataGridColClassPipe,\n AcpIsTemplateRefPipe,\n AcpToObservablePipe,\n DataGridSelectableCell,\n DataGridExpansionToggle,\n DataGridCell,\n DataGridRowClassPipe,\n ],\n templateUrl: './data-grid.html',\n styleUrl: './data-grid.scss',\n host: {\n class: 'data-grid',\n '[class.data-grid-animations-enabled]': '!_animationsDisabled',\n '[class.data-grid-size-small]': 'size() === \"small\"',\n '[class.data-grid-size-medium]': 'size() === \"medium\"',\n '[class.data-grid-size-normal]': 'size() === \"normal\"',\n '[attr.tabindex]': '0',\n // '(keydown)': 'handleKeyDown($event)'\n },\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class DataGrid<T = any> implements AfterViewInit, OnDestroy, OnChanges {\n protected _animationsDisabled =\n inject(ANIMATION_MODULE_TYPE, { optional: true }) === 'NoopAnimations';\n private _utils = inject(DataGridUtils);\n private _defaultOptions = inject<DataGridDefaultOptions>(DATA_GRID_DEFAULT_OPTIONS, {\n optional: true,\n });\n private _keyboardNavService = inject(KeyboardNavigationService);\n private _destroy$ = new Subject<void>();\n\n // ViewChild & ContentChildren\n paginator = viewChild(MatPaginator);\n @ViewChild(MatTable) table!: MatTable<any>;\n @ViewChild(MatPaginator) paginator1!: MatPaginator;\n @ViewChild(MatSort) sort!: MatSort;\n @ViewChild('tableContainer') tableContainer!: ElementRef<HTMLDivElement>;\n @ContentChildren(MatRowDef) rowDefs!: QueryList<MatRowDef<any>>;\n @ContentChildren(MatHeaderRowDef) headerRowDefs!: QueryList<MatHeaderRowDef>;\n @ContentChildren(MatFooterRow) footerRowDefs!: QueryList<MatFooterRowDef>;\n\n // Toolbar\n showToolbar = input(this._defaultOptions?.showToolbar ?? false, { transform: booleanAttribute });\n showColumnMenuButton = input(this._defaultOptions?.showColumnMenuButton ?? true, {\n transform: booleanAttribute,\n });\n toolbarTitle = input(this._defaultOptions?.toolbarTitle ?? '');\n toolbarTemplate = input<TemplateRef<any>>();\n\n // Data Configuration\n data = input<T[]>([]);\n columns = input<DataGridColumn<T>[]>([]);\n length = input<number>(0);\n loading = input<boolean>(false);\n emptyValuePlaceholder = input<string>('-');\n trackBy = input<TrackByFunction<any>>();\n\n // Templates\n cellTemplate = input<Record<string, TemplateRef<any>>>({});\n headerTemplate = input<TemplateRef<any> | DataGridCellTemplate>();\n headerExtraTemplate = input<TemplateRef<any> | DataGridCellTemplate>();\n noResultTemplate = input<TemplateRef<any>>();\n paginationTemplate = input<TemplateRef<any>>();\n summaryTemplate = input<TemplateRef<any> | DataGridCellTemplate>();\n\n size = input<'small' | 'medium' | 'normal'>('normal');\n headerCellTemplate = input<TemplateRef<any> | DataGridCellTemplate>();\n\n // Expansion\n expandable = input<boolean>(false);\n expansionTemplate = input<TemplateRef<any> | null>(null);\n closeOthersOnExpand = input(false);\n\n // Pagination\n pageOnFront = input<boolean>(true);\n showPaginator = input<boolean>(true);\n pageDisabled = input<boolean>(false);\n showFirstLastButtons = input<boolean>(true);\n pageIndex = input<number>(0);\n pageSize = input<number>(10);\n pageSizeOptions = input<number[]>([5, 10, 20, 50]);\n hidePageSize = input<boolean>(false);\n\n // Infinite Scroll\n infiniteScroll = input<boolean>(false);\n infiniteScrollThreshold = input<number>(0.8);\n infiniteScrollDisabled = input<boolean>(false);\n\n // Keyboard Navigation\n keyboardNavigation = input<boolean>(false);\n\n focusedRowIndex = computed(() => this._keyboardNavService.focusedRowIndex()); // Vinculado al servicio\n\n // Row Highlighting\n highlightedRowIndex = input<number>(-1);\n\n // Sorting\n sortOnFront = input<boolean>(true);\n sortActive = input<string>('');\n sortDirection = input<SortDirection>('');\n sortDisableClear = input<boolean>(false);\n sortDisabled = input<boolean>(false);\n sortStart = input<'asc' | 'desc'>('asc');\n\n // Row Behavior\n rowHover = input<boolean>(true);\n rowStriped = input<boolean>(false);\n rowSelectable = input<boolean>(false);\n multiSelectable = input<boolean>(true);\n multiSelectionWithClick = input<boolean>(false);\n hideRowSelectionCheckbox = input<boolean>(false);\n disableRowClickSelection = input<boolean>(false);\n rowClassFormatter = input<DataGridRowClassFormatter>();\n rowSelected = input<T[]>([]);\n rowSelectionFormatter = input<DataGridRowSelectionFormatter>({});\n\n // Cell Selection\n cellSelectable = input<boolean>(false);\n\n // Row Templates\n useContentRowTemplate = input(false, { transform: booleanAttribute });\n useContentHeaderRowTemplate = input(false, { transform: booleanAttribute });\n useContentFooterRowTemplate = input(false, { transform: booleanAttribute });\n\n // Summary\n showSummary = input(false, { transform: booleanAttribute });\n\n // No Result\n noResultText = input(this._defaultOptions?.noResultText ?? 'No se encontraron registros');\n\n // Outputs\n page = output<PageEvent>();\n sortChange = output<Sort>();\n rowClick = output<any>();\n rowSelectedChange = output<any[]>();\n selectionChange = output<T[]>();\n cellClick = output<{ row: T; column: DataGridColumn<T> }>();\n cellSelectedChange = output<any[]>();\n expansionChange = output<any>();\n rowContextMenu = output<any>();\n infiniteScrollLoad = output<void>();\n focusedRowChange = output<{ row: T; index: number }>();\n\n // Internal State\n dataSource = new MatTableDataSource<any>();\n private _selectedCell?: DataGridSelectableCell;\n cellSelection: any[] = [];\n rowChangeRecord?: KeyValueChangeRecord<string, any>;\n rowSelection: SelectionModel<any> = new SelectionModel<any>(true, []);\n expansionRowStates = signal<any[]>([]);\n\n // Signals\n selection = signal<SelectionModel<T>>(new SelectionModel<T>(true, []));\n currentSort = signal<Sort>({ active: '', direction: '' });\n isLoadingMore = signal<boolean>(false);\n\n // Computed Properties\n displayedColumns = computed(() => {\n const cols = this.columns()\n .filter(item => !this.isColumnHide(item))\n .map(item => item.field);\n if (this.rowSelectable() && !this.hideRowSelectionCheckbox()) {\n cols.unshift('DataGridCheckboxColumnDef');\n }\n return cols;\n });\n\n hasNoResult = computed(() => {\n return this.data().length === 0 && !this.loading();\n });\n whetherShowSummary = computed(() => this.showSummary());\n\n constructor() {\n // Effects\n effect(() => this.selection.set(new SelectionModel<T>(this.multiSelectable(), [])));\n effect(() => {\n const selected = this.rowSelected();\n if (selected?.length > 0) {\n const selectionModel = this.selection();\n selectionModel.clear();\n selected.forEach(row => selectionModel.select(row));\n }\n });\n effect(() => {\n const selected = this.selection().selected;\n this.selectionChange.emit(selected);\n this.rowSelectedChange.emit(selected);\n });\n effect(() => {\n this.updateDisplayedColumns();\n this.countPinnedPosition();\n });\n effect(() => {\n if (this.rowSelectable()) {\n this.rowSelection = new SelectionModel<any>(this.multiSelectable(), this.rowSelected());\n }\n });\n effect(() => {\n if (this.data()) {\n // Usamos el método público del servicio en lugar de modificar su signal directamente\n this._keyboardNavService.resetFocusedRowIndex();\n }\n });\n }\n\n ngAfterViewInit() {\n if (this.pageOnFront()) {\n this.dataSource.paginator = this.paginator();\n }\n if (this.sortOnFront()) {\n this.dataSource.sort = this.sort;\n }\n\n if (this.rowDefs?.length > 0 && this.useContentRowTemplate()) {\n this.rowDefs.forEach(rowDef => this.table.addRowDef(rowDef));\n }\n if (this.headerRowDefs?.length > 0 && this.useContentHeaderRowTemplate()) {\n this.headerRowDefs.forEach(headerRowDef => this.table.addHeaderRowDef(headerRowDef));\n }\n if (this.footerRowDefs?.length > 0 && this.useContentFooterRowTemplate()) {\n this.footerRowDefs.forEach(footerRowDef => this.table.addFooterRowDef(footerRowDef));\n }\n\n if (this.keyboardNavigation()) {\n this._keyboardNavService.registerElement({\n element: this.tableContainer,\n name: 'dataGrid',\n onFocus: index => {\n // Cuando el DataGrid recibe el foco, enfocar la primera fila\n this.focusRow(index ?? 0);\n },\n onFocusedChange: index => {\n // Cuando el índice cambia externamente, actualizar la fila enfocada\n this.focusRow(index);\n },\n });\n }\n\n if (this.infiniteScroll()) {\n this.setupInfiniteScroll();\n }\n }\n\n ngOnDestroy() {\n this._destroy$.next();\n this._destroy$.complete();\n if (this.keyboardNavigation()) {\n this._keyboardNavService.unregisterElement(this.tableContainer);\n }\n }\n\n // Infinite Scroll\n private setupInfiniteScroll() {\n if (!this.tableContainer) return;\n fromEvent(this.tableContainer.nativeElement, 'scroll')\n .pipe(\n takeUntil(this._destroy$),\n debounceTime(200),\n filter(() => !this.infiniteScrollDisabled() && !this.loading() && !this.isLoadingMore()),\n )\n .subscribe(() => {\n const element = this.tableContainer.nativeElement;\n const threshold = this.infiniteScrollThreshold();\n const scrollPosition = element.scrollTop + element.clientHeight;\n const scrollHeight = element.scrollHeight;\n if (scrollPosition / scrollHeight >= threshold) {\n this.loadMoreData();\n }\n });\n }\n\n private loadMoreData() {\n if (this.isLoadingMore()) return;\n this.isLoadingMore.set(true);\n this.infiniteScrollLoad.emit();\n setTimeout(() => this.isLoadingMore.set(false), 1000); // Prevent rapid-fire calls\n }\n\n @HostListener('document:keydown', ['$event'])\n handleKeyDown(event: KeyboardEvent) {\n if (!['ArrowDown', 'ArrowUp', 'Home', 'End', 'Enter', ' '].includes(event.key)) return;\n if (!this.keyboardNavigation() || this.hasNoResult()) return;\n\n const dataLength = this.dataSource.data.length;\n const currentFocusIndex = this._keyboardNavService.focusedRowIndex();\n let newFocusIndex = currentFocusIndex;\n let preventDefault = true;\n\n switch (event.key) {\n case 'ArrowDown':\n newFocusIndex = Math.min(currentFocusIndex + 1, dataLength - 1);\n break;\n\n case 'ArrowUp':\n if (currentFocusIndex === 0) {\n // Si estamos en la primera fila, mover el foco al elemento anterior\n event.preventDefault();\n this._keyboardNavService.focusElement('searchInput');\n return;\n }\n newFocusIndex = Math.max(currentFocusIndex - 1, 0);\n break;\n\n case 'Home':\n newFocusIndex = 0;\n break;\n\n case 'End':\n newFocusIndex = dataLength - 1;\n break;\n\n case 'Enter':\n if (currentFocusIndex >= 0 && currentFocusIndex < dataLength) {\n event.preventDefault();\n const row = this.dataSource.data[currentFocusIndex];\n this.handleRowAction(row, currentFocusIndex);\n }\n break;\n\n case ' ':\n if (currentFocusIndex >= 0 && currentFocusIndex < dataLength) {\n event.preventDefault();\n const row = this.dataSource.data[currentFocusIndex];\n this.toggleRowSelection(row);\n }\n break;\n\n default:\n preventDefault = false;\n break;\n }\n\n if (preventDefault && newFocusIndex !== currentFocusIndex) {\n event.preventDefault();\n this._keyboardNavService.updateFocusedIndex(newFocusIndex);\n }\n }\n\n focusRow(index: number) {\n if (index < 0 || index >= this.dataSource.data.length) return;\n const row = this.dataSource.data[index];\n this.focusedRowChange.emit({ row, index });\n this.scrollRowIntoView(index);\n }\n\n private scrollRowIntoView(index: number) {\n if (!this.tableContainer) return;\n const rowElements = this.tableContainer.nativeElement.querySelectorAll('tr.mat-row');\n if (rowElements.length > index) {\n const rowElement = rowElements[index] as HTMLElement;\n const containerElement = this.tableContainer.nativeElement;\n const containerRect = containerElement.getBoundingClientRect();\n const rowRect = rowElement.getBoundingClientRect();\n\n if (rowRect.bottom > containerRect.bottom) {\n rowElement.scrollIntoView({ behavior: 'smooth', block: 'end' });\n } else if (rowRect.top < containerRect.top) {\n rowElement.scrollIntoView({ behavior: 'smooth', block: 'start' });\n }\n }\n }\n\n private handleRowAction(row: T, index: number) {\n if (this.expandable()) {\n this.toggleRowExpansion(row, index);\n } else if (this.rowSelectable()) {\n this.toggleRowSelection(row);\n } else {\n this.rowClick.emit({ event: new MouseEvent('click'), rowData: row, index });\n }\n }\n\n private toggleRowExpansion(row: T, index: number) {\n const currentStates = structuredClone(this.expansionRowStates());\n if (currentStates[index]) {\n currentStates[index].expanded = !currentStates[index].expanded;\n this.expansionRowStates.set(currentStates);\n this.expansionChange.emit({\n expanded: currentStates[index].expanded,\n data: row,\n index,\n column: null,\n });\n }\n }\n\n private toggleRowSelection(row: T) {\n if (this.multiSelectable()) {\n this.rowSelection.toggle(row);\n } else {\n this.rowSelection.clear();\n this.rowSelection.select(row);\n }\n this.rowSelectedChange.emit(this.rowSelection.selected);\n }\n\n // Event Handlers\n onSortChange(sort: Sort) {\n this.currentSort.set(sort);\n this.sortChange.emit(sort);\n }\n\n onPage(event: PageEvent): void {\n if (this.pageOnFront()) this.scrollTop(0);\n this.page.emit(event);\n }\n\n onExpansionChange(\n expansionRef: DataGridExpansionToggle,\n rowData: Record<string, any>,\n column: DataGridColumn,\n index: number,\n ) {\n const currentStates = structuredClone(this.expansionRowStates());\n\n if (this.closeOthersOnExpand()) {\n currentStates.forEach(item => (item.expanded = false));\n }\n if (currentStates[index]) {\n currentStates[index].expanded = expansionRef.opened;\n this.expansionRowStates.set(currentStates);\n }\n this.expansionChange.emit({ expanded: expansionRef.opened, data: rowData, index, column });\n }\n\n // Selection Methods\n isAllSelected(): boolean {\n const numSelected = this.rowSelection.selected.length;\n const numRows = this.dataSource.data.filter(\n (row, index) => !this.rowSelectionFormatter().disabled?.(row, index),\n ).length;\n return numSelected === numRows && numRows > 0;\n }\n\n toggleAllRows(): void {\n if (this.isAllSelected()) {\n this.rowSelection.clear();\n } else {\n this.dataSource.data.forEach((row, index) => {\n if (!this.rowSelectionFormatter().disabled?.(row, index)) this.rowSelection.select(row);\n });\n }\n this.rowSelectedChange.emit(this.rowSelection.selected);\n }\n\n toggleNormalCheckbox(row: Record<string, any>) {\n this.rowSelection.toggle(row);\n this.rowSelectedChange.emit(this.rowSelection.selected);\n }\n\n isRowDisabled(row: T, index?: number): boolean {\n return this.rowSelectionFormatter()?.disabled?.(row, index ?? 0) ?? false;\n }\n\n shouldHideCheckbox(row: T, index?: number): boolean {\n if (this.hideRowSelectionCheckbox()) return true;\n return this.rowSelectionFormatter()?.hideCheckbox?.(row, index ?? 0) ?? false;\n }\n\n // Row Selection\n selectRow(event: MouseEvent, rowData: Record<string, any>, index: number) {\n if (\n this.rowSelectable() &&\n !this.rowSelectionFormatter().disabled?.(rowData, index) &&\n !this.rowSelectionFormatter().hideCheckbox?.(rowData, index) &&\n !this.disableRowClickSelection()\n ) {\n if (!this.multiSelectionWithClick && !event.ctrlKey && !event.metaKey) {\n this.rowSelection.clear();\n }\n this.toggleNormalCheckbox(rowData);\n }\n if (this.keyboardNavigation()) {\n this._keyboardNavService.updateFocusedIndex(index);\n }\n this.rowClick.emit({ event, rowData, index });\n }\n\n // Cell Selection\n selectCell(\n cellRef: DataGridSelectableCell,\n rowData: Record<string, any>,\n colDef: DataGridColumn,\n ): void {\n if (this._selectedCell !== cellRef) {\n const colValue = this._utils.getCellValue(rowData, colDef);\n this.cellSelection = [{ cellData: colValue, rowData, colDef }];\n this.cellSelectedChange.emit(this.cellSelection);\n this._selectedCell?.deselect();\n }\n this._selectedCell = cellRef.selected ? cellRef : undefined;\n }\n\n // Data Change Methods\n onRowDataChange(record: KeyValueChangeRecord<string, any>) {\n this.rowChangeRecord = record;\n }\n\n // Lifecycle Hooks\n ngOnChanges(changes: SimpleChanges) {\n this.updateDisplayedColumns();\n this.countPinnedPosition();\n\n if (changes['data']) {\n this.dataSource = new MatTableDataSource(this.data());\n this.updateExpansionRowStates();\n this.scrollTop(0);\n }\n\n if (changes['rowSelectable'] && this.rowSelectable()) {\n this.rowSelection = new SelectionModel<any>(this.multiSelectable(), this.rowSelected());\n }\n\n // this.dataSource.paginator = this.pageOnFront() ? this.paginator() : null;\n this.dataSource.sort = this.sortOnFront() ? this.sort : null;\n\n if (changes['infiniteScroll'] && this.infiniteScroll()) {\n this.setupInfiniteScroll();\n }\n }\n\n // Private Helper Methods\n private updateDisplayedColumns() {\n if (this.showColumnMenuButton()) {\n this.columns().forEach(item => {\n item.hide = this.isColumnHide(item);\n item.show = !item.hide;\n });\n }\n }\n\n private updateExpansionRowStates() {\n if (this.expandable()) {\n const newStates: any[] = [];\n this.data()?.forEach(_ => newStates.push({ expanded: false }));\n this.expansionRowStates.set(newStates);\n }\n }\n\n private countPinnedPosition() {\n const count = (acc: number, cur: DataGridColumn) => acc + parseFloat(cur.width ?? '80px');\n const pinnedLeftCols = this.columns().filter(col => col.pinned === 'left');\n pinnedLeftCols.forEach((item, idx) => {\n item.left = pinnedLeftCols.slice(0, idx).reduce(count, 0) + 'px';\n });\n const pinnedRightCols = this.columns()\n .filter(col => col.pinned === 'right')\n .reverse();\n pinnedRightCols.forEach((item, idx) => {\n item.right = pinnedRightCols.slice(0, idx).reduce(count, 0) + 'px';\n });\n }\n\n // Scroll Methods\n scrollTop(value?: number): number | void {\n if (value == null) return this.tableContainer?.nativeElement.scrollTop;\n if (this.tableContainer && !this.loading()) {\n this.tableContainer.nativeElement.scrollTop = value;\n }\n }\n\n scrollLeft(value?: number): number | void {\n if (value == null) return this.tableContainer?.nativeElement.scrollLeft;\n if (this.tableContainer && !this.loading()) {\n this.tableContainer.nativeElement.scrollLeft = value;\n }\n }\n\n // Context Menu\n contextmenu(event: MouseEvent, rowData: Record<string, any>, index: number) {\n this.rowContextMenu.emit({ event, rowData, index });\n }\n\n // Utility Methods\n getColData(data: any[], colDef: DataGridColumn) {\n return this._utils.getColData(data, colDef);\n }\n\n isColumnHide(item: DataGridColumn) {\n return item.hide !== undefined ? item.hide : item.show !== undefined ? !item.show : false;\n }\n\n getIndex(index: number | undefined, dataIndex: number) {\n return index === undefined ? dataIndex : index;\n }\n}\n","<!-- src/app/shared/components/data-grid/data-grid.component.html -->\n@if (loading()) {\n<div class=\"data-grid-progress\">\n <mat-progress-bar mode=\"indeterminate\" />\n</div>\n} @if (showToolbar()) {\n<div class=\"data-grid-toolbar\">\n <div class=\"data-grid-toolbar-content\">\n @if (toolbarTemplate()) {\n <ng-template [ngTemplateOutlet]=\"toolbarTemplate()\" />\n } @else if (toolbarTitle()) {\n <div class=\"data-grid-toolbar-title\">{{ toolbarTitle() }}</div>\n }\n </div>\n <div class=\"data-grid-toolbar-actions\"></div>\n</div>\n}\n\n<div class=\"data-grid-main data-grid-layout\">\n <div class=\"data-grid-content data-grid-layout\">\n <div #tableContainer class=\"mat-table-container\" [class.mat-table-with-data]=\"!hasNoResult()\">\n <table\n mat-table\n [class.mat-table-hover]=\"rowHover()\"\n [class.mat-table-striped]=\"rowStriped()\"\n [class.mat-table-expandable]=\"expandable()\"\n [class.mat-table-keyboard-navigation]=\"keyboardNavigation()\"\n [dataSource]=\"dataSource\"\n multiTemplateDataRows\n matSort\n [matSortActive]=\"sortActive()\"\n [matSortDirection]=\"sortDirection()\"\n [matSortDisableClear]=\"sortDisableClear()\"\n [matSortDisabled]=\"sortDisabled()\"\n [matSortStart]=\"sortStart()\"\n (matSortChange)=\"onSortChange($event)\"\n [trackBy]=\"trackBy\"\n >\n <!-- Selection Column -->\n @if (rowSelectable() && !hideRowSelectionCheckbox()) {\n <ng-container matColumnDef=\"DataGridCheckboxColumnDef\">\n <th mat-header-cell *matHeaderCellDef class=\"data-grid-checkbox-cell\">\n @if (multiSelectable()) {\n <mat-checkbox\n [checked]=\"rowSelection.hasValue() && isAllSelected()\"\n [indeterminate]=\"rowSelection.hasValue() && !isAllSelected()\"\n (change)=\"$event ? toggleAllRows() : null\"\n />\n }\n </th>\n <td\n mat-cell\n *matCellDef=\"let row; let index = index; let dataIndex = dataIndex\"\n class=\"data-grid-checkbox-cell\"\n >\n @if (!shouldHideCheckbox(row, getIndex(index, dataIndex))) {\n <mat-checkbox\n [disabled]=\"isRowDisabled(row, getIndex(index, dataIndex))\"\n [checked]=\"rowSelection.isSelected(row)\"\n (click)=\"$event.stopPropagation()\"\n (change)=\"$event ? toggleNormalCheckbox(row) : null\"\n />\n }\n </td>\n <td mat-footer-cell *matFooterCellDef class=\"data-grid-checkbox-cell\"></td>\n </ng-container>\n }\n\n <!-- Data Columns -->\n @for (col of columns(); track col.field) {\n <ng-container\n [matColumnDef]=\"col.field\"\n [sticky]=\"col.pinned === 'left'\"\n [stickyEnd]=\"col.pinned === 'right'\"\n >\n <!-- Header Cell -->\n <th\n mat-header-cell\n *matHeaderCellDef\n [class]=\"col | colClass\"\n [class.mat-table-sticky-left]=\"col.pinned === 'left'\"\n [class.mat-table-sticky-right]=\"col.pinned === 'right'\"\n [style.width]=\"col.width\"\n [style.min-width]=\"col.width\"\n [style.left]=\"col.left\"\n [style.right]=\"col.right\"\n >\n <!-- Prioridad 1: Template específico de la columna -->\n @if (col.headerCellTemplate) {\n <ng-template\n [ngTemplateOutlet]=\"col.headerCellTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: col, colDef: col }\"\n />\n } @else if ($any(headerCellTemplate())?.[col.field] | isTemplateRef) {\n <!-- Prioridad 2: Template general por campo -->\n <ng-template\n [ngTemplateOutlet]=\"$any(headerCellTemplate())[col.field]\"\n [ngTemplateOutletContext]=\"{ $implicit: col, colDef: col }\"\n />\n } @else if (headerCellTemplate() | isTemplateRef) {\n <!-- Prioridad 3: Template general -->\n <ng-template\n [ngTemplateOutlet]=\"$any(headerCellTemplate())\"\n [ngTemplateOutletContext]=\"{ $implicit: col, colDef: col }\"\n />\n } @else if ($any(headerTemplate())?.[col.field] | isTemplateRef) {\n <!-- Prioridad 4: Template por campo en headerTemplate -->\n <ng-template\n [ngTemplateOutlet]=\"$any(headerTemplate())[col.field]\"\n [ngTemplateOutletContext]=\"{ $implicit: col, colDef: col }\"\n />\n } @else if (headerTemplate() | isTemplateRef) {\n <!-- Prioridad 5: Template general en headerTemplate -->\n <ng-template\n [ngTemplateOutlet]=\"$any(headerTemplate())\"\n [ngTemplateOutletContext]=\"{ $implicit: col, colDef: col }\"\n />\n } @else {\n <!-- Comportamiento por defecto -->\n <div class=\"mat-header-cell-inner\">\n <div\n [mat-sort-header]=\"col.sortProp?.id || col.field\"\n [disabled]=\"!col.sortable\"\n [disableClear]=\"col.sortProp?.disableClear ?? sortDisableClear()\"\n [arrowPosition]=\"col.sortProp?.arrowPosition!\"\n [start]=\"col.sortProp?.start!\"\n >\n @if (col.showExpand) {\n <span class=\"data-grid-expansion-placeholder\"></span>\n }\n <span>{{ col.header | toObservable | async }}</span>\n @if (col.sortable) {\n <svg\n class=\"data-grid-icon mat-sort-header-icon\"\n viewBox=\"0 0 24 24\"\n width=\"24px\"\n height=\"24px\"\n fill=\"currentColor\"\n focusable=\"false\"\n >\n <path d=\"M3,13H15V11H3M3,6V8H21V6M3,18H9V16H3V18Z\" />\n </svg>\n }\n </div>\n <ng-template\n [ngTemplateOutlet]=\"headerExtraTplBase\"\n [ngTemplateOutletContext]=\"{ $implicit: headerExtraTemplate(), colDef: col }\"\n />\n </div>\n }\n </th>\n\n <!-- Data Cell -->\n <td\n mat-cell\n *matCellDef=\"let row; let index = index; let dataIndex = dataIndex\"\n [class]=\"col | colClass: row : rowChangeRecord : rowChangeRecord?.currentValue\"\n [class.mat-table-sticky-left]=\"col.pinned === 'left'\"\n [class.mat-table-sticky-right]=\"col.pinned === 'right'\"\n [class.focused]=\"keyboardNavigation() && focusedRowIndex() === dataIndex\"\n [style.width]=\"col.width\"\n [style.min-width]=\"col.width\"\n [style.left]=\"col.left\"\n [style.right]=\"col.right\"\n acpGridSelectableCell\n [cellSelectable]=\"cellSelectable()\"\n (cellSelectedChange)=\"selectCell($event, row, col)\"\n >\n @if (cellTemplate() | isTemplateRef) {\n <ng-template\n [ngTemplateOutlet]=\"$any(cellTemplate())\"\n [ngTemplateOutletContext]=\"{\n $implicit: row,\n rowData: row,\n index: getIndex(index, dataIndex),\n colDef: col,\n }\"\n />\n } @else { @if ($any(cellTemplate())?.[col.field] | isTemplateRef) {\n <ng-template\n [ngTemplateOutlet]=\"$any(cellTemplate())[col.field]\"\n [ngTemplateOutletContext]=\"{\n $implicit: row,\n rowData: row,\n index: getIndex(index, dataIndex),\n colDef: col,\n }\"\n />\n } @else { @if (col.cellTemplate) {\n <ng-template\n [ngTemplateOutlet]=\"col.cellTemplate!\"\n [ngTemplateOutletContext]=\"{\n $implicit: row,\n rowData: row,\n index: getIndex(index, dataIndex),\n colDef: col,\n }\"\n />\n } @else { @if (col.showExpand) {\n <button\n class=\"data-grid-row-expand-button\"\n mat-icon-button\n acpDataGridExpansionToggle\n type=\"button\"\n [(opened)]=\"expansionRowStates()[dataIndex].expanded\"\n (toggleChange)=\"onExpansionChange($event, row, col, dataIndex)\"\n >\n <svg\n class=\"data-grid-icon data-grid-row-expand-icon\"\n viewBox=\"0 0 24 24\"\n width=\"24px\"\n height=\"24px\"\n fill=\"currentColor\"\n focusable=\"false\"\n >\n <path d=\"M10 6L8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z\" />\n </svg>\n </button>\n }\n <acp-data-grid-cell\n [rowData]=\"row\"\n [colDef]=\"col\"\n [placeholder]=\"emptyValuePlaceholder()\"\n (rowDataChange)=\"onRowDataChange($event)\"\n />\n } } }\n </td>\n\n <!-- Footer Cell -->\n <td\n mat-footer-cell\n *matFooterCellDef\n [class.mat-table-sticky-left]=\"col.pinned === 'left'\"\n [class.mat-table-sticky-right]=\"col.pinned === 'right'\"\n [style.width]=\"col.width\"\n [style.min-width]=\"col.width\"\n [style.left]=\"col.left\"\n [style.right]=\"col.right\"\n >\n @if (col.showExpand) {\n <span class=\"data-grid-expansion-placeholder\"></span>\n } @if (summaryTemplate() | isTemplateRef) {\n <ng-template\n [ngTemplateOutlet]=\"$any(summaryTemplate())\"\n [ngTemplateOutletContext]=\"{ $implicit: col, colDef: col, data: data() }\"\n />\n } @else { @if ($any(summaryTemplate())?.[col.field] | isTemplateRef) {\n <ng-template\n [ngTemplateOutlet]=\"$any(summaryTemplate())[col.field]\"\n [ngTemplateOutletContext]=\"{\n $implicit: getColData(data(), col),\n colData: getColData(data(), col),\n colDef: col,\n }\"\n />\n } @else {\n <acp-data-grid-cell\n [summary]=\"true\"\n [data]=\"data()\"\n [colDef]=\"col\"\n [placeholder]=\"emptyValuePlaceholder()\"\n />\n } }\n </td>\n </ng-container>\n }\n\n <!-- Header Row -->\n @if (!useContentHeaderRowTemplate()) {\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns(); sticky: true\"></tr>\n }\n\n <!-- Data Rows -->\n @if (!useContentRowTemplate()) {\n <tr\n mat-row\n *matRowDef=\"\n let row;\n let index = index;\n let dataIndex = dataIndex;\n columns: displayedColumns()\n \"\n [class]=\"row | rowClass: index : dataIndex : rowClassFormatter()\"\n [class.selected]=\"rowSelection.isSelected(row)\"\n [class.focused]=\"keyboardNavigation() && focusedRowIndex() === dataIndex\"\n [class.highlighted]=\"highlightedRowIndex() === dataIndex\"\n (click)=\"selectRow($event, row, getIndex(index, dataIndex))\"\n (contextmenu)=\"contextmenu($event, row, getIndex(index, dataIndex))\"\n ></tr>\n }\n\n <!-- Summary Row -->\n @if (whetherShowSummary()) {\n <tr mat-footer-row *matFooterRowDef=\"displayedColumns(); sticky: true\"></tr>\n }\n\n <!-- Expansion Row -->\n @if (expandable()) {\n <ng-container matColumnDef=\"DataGridExpansionColumnDef\">\n <td\n mat-cell\n *matCellDef=\"let row; let dataIndex = dataIndex\"\n [attr.colspan]=\"displayedColumns().length\"\n >\n <div class=\"data-grid-expansion-detail-wrapper\">\n <div class=\"data-grid-expansion-detail\">\n <ng-template\n [ngTemplateOutlet]=\"expansionTemplate()\"\n [ngTemplateOutletContext]=\"{\n $implicit: row,\n rowData: row,\n index: dataIndex,\n expanded: expansionRowStates()[dataIndex].expanded,\n }\"\n />\n </div>\n </div>\n </td>\n </ng-container>\n <tr\n mat-row\n *matRowDef=\"let row; columns: ['DataGridExpansionColumnDef']; let dataIndex = dataIndex\"\n class=\"data-grid-expansion\"\n [class]=\"expansionRowStates()[dataIndex].expanded ? 'expanded' : 'collapsed'\"\n ></tr>\n }\n </table>\n </div>\n\n <!-- No result -->\n @if (hasNoResult()) {\n <div class=\"data-grid-no-result\">\n @if (noResultTemplate()) {\n <ng-template [ngTemplateOutlet]=\"noResultTemplate()\" />\n } @else { {{ noResultText() }} }\n </div>\n }\n\n <!-- Infinite Scroll Loading Indicator -->\n @if (infiniteScroll() && isLoadingMore()) {\n <div class=\"data-grid-infinite-scroll-loading\">\n <mat-progress-bar mode=\"indeterminate\" />\n </div>\n }\n </div>\n</div>\n\n<div class=\"data-grid-footer\">\n <!-- Pagination -->\n @if (!infiniteScroll() && showPaginator()) {\n <div class=\"data-grid-pagination\">\n @if (paginationTemplate()) {\n <ng-template [ngTemplateOutlet]=\"paginationTemplate()\" />\n } @else {\n <mat-paginator\n [class.mat-paginator-hidden]=\"!showPaginator()\"\n [showFirstLastButtons]=\"showFirstLastButtons()\"\n [length]=\"length()\"\n [pageIndex]=\"pageIndex()\"\n [pageSize]=\"pageSize()\"\n [pageSizeOptions]=\"pageSizeOptions()\"\n [hidePageSize]=\"hidePageSize()\"\n (page)=\"onPage($event)\"\n [disabled]=\"pageDisabled()\"\n />\n }\n </div>\n }\n</div>\n\n<!-- Header template for extra content -->\n<ng-template #headerExtraTplBase let-headerExtraTemplate let-col=\"colDef\">\n @if (headerExtraTemplate | isTemplateRef) {\n <ng-template\n [ngTemplateOutlet]=\"headerExtraTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: col, colDef: col }\"\n />\n } @else { @if ($any(headerExtraTemplate)?.[col.field] | isTemplateRef) {\n <ng-template\n [ngTemplateOutlet]=\"headerExtraTemplate[col.field]\"\n [ngTemplateOutletContext]=\"{ $implicit: col, colDef: col }\"\n />\n } }\n</ng-template>\n","import {\n Component,\n OnDestroy,\n OnInit,\n OnChanges,\n SimpleChanges,\n forwardRef,\n input,\n output,\n signal,\n model,\n OutputEmitterRef,\n WritableSignal,\n} from '@angular/core';\nimport { ControlValueAccessor, FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { Subject } from 'rxjs';\n\nimport {\n NgxDatex,\n NgxDatexTheme,\n NgxDatexLocale,\n NgxDatexValue,\n SPANISH_LOCALE,\n MATERIAL_LIGHT_THEME,\n} from 'ngx-datex';\n\nimport { addDay, weekStart, weekEnd, monthStart, monthEnd, tzDate, format } from '@formkit/tempo';\n\n/* ============================\n TYPES\n============================ */\n\nexport interface DateRangePickerOptions {\n presetTheme?: 'default' | 'bootstrap' | 'material' | 'custom';\n locale?: NgxDatexLocale;\n theme?: NgxDatexTheme;\n ranges?: Record<string, [Date, Date]>;\n minDate?: Date | null;\n maxDate?: Date | null;\n singleDatePicker?: boolean;\n timePicker?: boolean;\n timePicker24Hour?: boolean;\n timePickerSeconds?: boolean;\n timePickerIncrement?: number;\n autoApply?: boolean;\n showDropdowns?: boolean;\n linkedCalendars?: boolean;\n alwaysShowCalendars?: boolean;\n}\n\nexport type DateValue<AsString extends boolean> = AsString extends true ? string : Date;\n\nexport interface DateRangeValue<AsString extends boolean> {\n from: DateValue<AsString>;\n to: DateValue<AsString>;\n label?: string;\n}\n\n/* ============================\n HELPERS\n============================ */\n\nfunction formatDateToString(date: Date): string {\n const dateZone = tzDate(date, 'America/Guayaquil');\n return format({\n date: dateZone,\n format: 'YYYY-MM-DD hh:mm:ss A',\n tz: 'America/Guayaquil',\n });\n}\n\n/* ============================\n COMPONENT\n============================ */\n\n@Component({\n selector: 'acp-date-range-picker',\n standalone: true,\n imports: [NgxDatex, FormsModule],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => DateRangePicker),\n multi: true,\n },\n ],\n template: `\n <ngx-datex\n [(ngModel)]=\"dateRangeValue\"\n [appearance]=\"appearance()\"\n [label]=\"label()\"\n [placeholder]=\"placeholderText()\"\n [disabled]=\"isDisabled()\"\n [readonly]=\"inputReadonly()\"\n [locale]=\"locale\"\n [theme]=\"theme\"\n [ranges]=\"predefinedRanges\"\n [singleDatePicker]=\"singleDatePicker()\"\n [timePicker]=\"timePicker()\"\n [timePicker24Hour]=\"timePicker24Hour()\"\n [timePickerSeconds]=\"timePickerSeconds()\"\n [timePickerIncrement]=\"timePickerIncrement()\"\n [autoApply]=\"autoApply()\"\n [showDropdowns]=\"showDropdowns()\"\n [linkedCalendars]=\"linkedCalendars()\"\n [alwaysShowCalendars]=\"alwaysShowCalendars()\"\n [minDate]=\"minDateForTemplate\"\n [maxDate]=\"maxDateForTemplate\"\n [showCheckbox]=\"showCheckbox()\"\n [checkboxChecked]=\"checkboxChecked()\"\n [checkboxPosition]=\"checkboxPosition()\"\n [calendarIcon]=\"calendarIcon()\"\n [showCalendarIcon]=\"showCalendarButton()\"\n (dateChange)=\"onDateChange($event)\"\n (rangeChange)=\"onRangeChange($event)\"\n (openEvent)=\"onPickerShow()\"\n (closeEvent)=\"onPickerHide()\"\n (checkboxChange)=\"onCheckboxToggle($event)\"\n ></ngx-datex>\n `,\n})\nexport class DateRangePicker<AsString extends boolean = true>\n implements OnInit, OnChanges, OnDestroy, ControlValueAccessor\n{\n /* ============================\n INPUTS\n ============================ */\n\n options = input<DateRangePickerOptions>({});\n placeholderText = input('Seleccionar rango de fechas');\n isDisabled = input(false);\n inputReadonly = input(false);\n label = input<string>('');\n appearance = input<'fill' | 'outline'>('outline');\n\n formatOutputAsString = input<AsString>(true as AsString);\n\n calendarIcon = input('date_range');\n showCalendarButton = input(false);\n\n showCheckbox = input(false);\n checkboxChecked = model(false);\n checkboxPosition = input<'prefix' | 'suffix'>('suffix');\n\n // NgxDatex specific inputs\n singleDatePicker = input(false);\n timePicker = input(false);\n timePicker24Hour = input(true);\n timePickerSeconds = input(false);\n timePickerIncrement = input(1);\n autoApply = input(false);\n showDropdowns = input(false);\n linkedCalendars = input(true);\n alwaysShowCalendars = input(false);\n minDate = input<Date | null>(null);\n maxDate = input<Date | null>(null);\n\n /* ============================\n OUTPUTS\n ============================ */\n\n dateRangeSelected: OutputEmitterRef<DateRangeValue<AsString>> =\n output<DateRangeValue<AsString>>();\n pickerShow: OutputEmitterRef<void> = output<void>();\n pickerHide: OutputEmitterRef<void> = output<void>();\n pickerApply: OutputEmitterRef<void> = output<void>();\n pickerCancel: OutputEmitterRef<void> = output<void>();\n checkboxChange: OutputEmitterRef<boolean> = output<boolean>();\n\n /* ============================\n INTERNAL\n ============================ */\n\n dateRangeValue: NgxDatexValue | null = null;\n predefinedRanges: Record<string, [Date, Date]> = {};\n locale: NgxDatexLocale = SPANISH_LOCALE;\n theme: NgxDatexTheme = MATERIAL_LIGHT_THEME;\n\n private currentDate = new Date();\n private readonly stateChanges = new Subject<void>();\n\n private onChange = (_value: any) => {\n // This will be replaced by registerOnChange\n };\n private onTouched = () => {\n // This will be replaced by registerOnTouched\n };\n\n /* ============================\n COMPUTED PROPERTIES\n ============================ */\n\n effectiveMinDate: WritableSignal<Date | null> = signal<Date | null>(null);\n effectiveMaxDate: WritableSignal<Date | null> = signal<Date | null>(null);\n\n get minDateForTemplate(): any {\n const minDate = this.effectiveMinDate();\n return minDate || null;\n }\n\n get maxDateForTemplate(): any {\n const maxDate = this.effectiveMaxDate();\n return maxDate || null;\n }\n\n /* ============================\n LIFECYCLE\n ============================ */\n\n ngOnInit(): void {\n this.initializeConfiguration();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['options'] || changes['minDate'] || changes['maxDate']) {\n console.log('options changes');\n this.initializeConfiguration();\n }\n }\n\n ngOnDestroy(): void {\n this.stateChanges.complete();\n }\n\n /* ============================\n DATE LOGIC\n ============================ */\n\n private mapDate(date: Date): DateValue<AsString> {\n return this.formatOutputAsString()\n ? (formatDateToString(date) as DateValue<AsString>)\n : (date as DateValue<AsString>);\n }\n\n private initializeConfiguration(): void {\n this.predefinedRanges = this.getDefaultRanges();\n this.locale = this.getLocale();\n this.theme = this.getTheme();\n this.effectiveMinDate.set(this.minDate());\n this.effectiveMaxDate.set(this.maxDate());\n }\n\n private getDefaultRanges(): Record<string, [Date, Date]> {\n const opts = this.options();\n if (opts.ranges) {\n return opts.ranges;\n }\n\n return {\n Hoy: [this.currentDate, this.currentDate],\n Ayer: [addDay(this.currentDate, -1), addDay(this.currentDate, -1)],\n 'Últimos 5 días': [addDay(this.currentDate, -4), this.currentDate],\n 'Últimos 10 días': [addDay(this.currentDate, -9), this.currentDate],\n 'Últimos 15 días': [addDay(this.currentDate, -14), this.currentDate],\n 'Últimos 30 días': [addDay(this.currentDate, -29), this.currentDate],\n 'Esta semana': [weekStart(this.currentDate), weekEnd(this.currentDate)],\n 'Este mes': [monthStart(this.currentDate), monthEnd(this.currentDate)],\n 'El mes pasado': [\n monthStart(addDay(monthStart(this.currentDate), -1)),\n addDay(monthStart(this.currentDate), -1),\n ],\n };\n }\n\n private getLocale(): NgxDatexLocale {\n const opts = this.options();\n return opts.locale ?? SPANISH_LOCALE;\n }\n\n private getTheme(): NgxDatexTheme {\n const opts = this.options();\n return opts.theme ?? MATERIAL_LIGHT_THEME;\n }\n\n /* ============================\n EVENT HANDLERS\n ============================ */\n\n onDateChange(value: NgxDatexValue | null): void {\n if (value && value.startDate) {\n const range: DateRangeValue<AsString> = {\n from: this.mapDate(value.startDate),\n to: this.mapDate(value.endDate || value.startDate),\n label: value.label,\n };\n\n this.onChange(range);\n this.onTouched();\n this.dateRangeSelected.emit(range);\n } else {\n this.onChange(null);\n this.onTouched();\n this.dateRangeSelected.emit(null as any);\n }\n }\n\n onRangeChange(range: { startDate: Date; endDate: Date | null }): void {\n if (range.startDate) {\n const dateRange: DateRangeValue<AsString> = {\n from: this.mapDate(range.startDate),\n to: this.mapDate(range.endDate || range.startDate),\n };\n\n this.onChange(dateRange);\n this.dateRangeSelected.emit(dateRange);\n }\n }\n\n onPickerShow(): void {\n this.pickerShow.emit();\n }\n\n onPickerHide(): void {\n this.pickerHide.emit();\n this.onTouched();\n }\n\n onCheckboxToggle(checked: boolean): void {\n this.checkboxChecked.set(checked);\n this.checkboxChange.emit(checked);\n }\n\n /* ============================\n CVA\n ============================ */\n\n writeValue(value: any): void {\n if (value && value.from && value.to) {\n // Convert our DateRangeValue to NgxDatexValue format\n const startDate = typeof value.from === 'string' ? new Date(value.from) : value.from;\n const endDate = typeof value.to === 'string' ? new Date(value.to) : value.to;\n\n this.dateRangeValue = {\n startDate,\n endDate,\n label: value.label,\n };\n } else {\n this.dateRangeValue = null;\n }\n }\n\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: any): void {\n this.onTouched = fn;\n }\n\n setDisabledState(_isDisabled: boolean): void {\n // NgxDatex handles disabled state through the [disabled] input\n }\n\n /* ============================\n UI API\n ============================ */\n\n show(): void {\n // NgxDatex handles show/hide through its own API\n }\n\n hide(): void {\n // NgxDatex handles show/hide through its own API\n }\n\n toggle(): void {\n // NgxDatex handles show/hide through its own API\n }\n}\n","// Angular component\nexport { DateRangePicker } from './date-range-picker';\nexport type { DateRangePickerOptions, DateRangeValue } from './date-range-picker';\n\n// Re-exports from ngx-datex\nexport { NgxDatex, SPANISH_LOCALE, MATERIAL_LIGHT_THEME } from 'ngx-datex';\n\nexport type { NgxDatexValue } from 'ngx-datex';\nexport type { NgxDatexLocale } from 'ngx-datex';\nexport type { NgxDatexTheme } from 'ngx-datex';\nexport type { NgxDatexConfig } from 'ngx-datex';\nexport type { NgxDatexRange } from 'ngx-datex';\n","import { Direction } from '@angular/cdk/bidi';\nimport { DialogRole } from '@angular/cdk/dialog';\nimport { ScrollStrategy } from '@angular/cdk/overlay';\nimport { ViewContainerRef } from '@angular/core';\n\n/** Options for where to set focus to automatically on dialog open. */\nexport type AutoFocusTarget = 'dialog' | 'first-tabbable' | 'first-heading';\n\n/** Possible overrides for a drawer's position. */\nexport type DrawerPosition = 'top' | 'bottom' | 'left' | 'right';\n\n/**\n * Configuration used when opening a drawer.\n *\n * This class provides all the configuration options available when opening\n * a drawer, including positioning, sizing, behavior, and accessibility options.\n *\n * @template D The type of data to be injected into the drawer component\n *\n * @example\n * ```typescript\n * const config: AcpDrawerConfig = {\n * position: 'right',\n * width: '400px',\n * hasBackdrop: true,\n * disableClose: false,\n * data: { message: 'Hello from drawer!' },\n * ariaLabel: 'Settings drawer'\n * };\n *\n * this.drawer.open(MyDrawerComponent, config);\n * ```\n */\nexport class AcpDrawerConfig<D = any> {\n /** The view container to place the overlay for the drawer into. */\n viewContainerRef?: ViewContainerRef;\n\n /** ID for the drawer. If omitted, a unique one will be generated. */\n id?: string;\n\n /** The ARIA role of the dialog element. */\n role?: DialogRole = 'dialog';\n\n /** Extra CSS classes to be added to the drawer container. */\n panelClass?: string | string[];\n\n /** Text layout direction for the drawer. */\n direction?: Direction;\n\n /** Data being injected into the child component. */\n data?: D | null = null;\n\n /** Whether the drawer has a backdrop. */\n hasBackdrop?: boolean = true;\n\n /** Custom class for the backdrop. */\n backdropClass?: string;\n\n /** Whether the user can use escape or clicking outside to close the drawer. */\n disableClose?: boolean = false;\n\n /** Aria label to assign to the drawer element. */\n ariaLabel?: string | null = null;\n\n /**\n * Whether this is a modal dialog. Used to set the `aria-modal` attribute. Off by default,\n * because it can interfere with other overlay-based components (e.g. `mat-select`) and because\n * it is redundant since the dialog marks all outside content as `aria-hidden` anyway.\n */\n ariaModal?: boolean = false;\n\n /**\n * Whether the drawer should close when the user goes backwards/forwards in history.\n * Note that this usually doesn't include clicking on links (unless the user is using\n * the `HashLocationStrategy`).\n */\n closeOnNavigation?: boolean = true;\n\n /**\n * Where the drawer should focus on open.\n * @breaking-change 14.0.0 Remove boolean option from autoFocus. Use string or\n * AutoFocusTarget instead.\n */\n autoFocus?: AutoFocusTarget | string | boolean = 'first-tabbable';\n\n /**\n * Whether the drawer should restore focus to the\n * previously-focused element, after it's closed.\n */\n restoreFocus?: boolean = true;\n\n /** Scroll strategy to be used for the drawer. */\n scrollStrategy?: ScrollStrategy;\n\n /** Position of the drawer. */\n position?: DrawerPosition = 'right';\n\n /** Width of the drawer. */\n width?: string;\n\n /** Height of the drawer. */\n height?: string;\n\n /** Whether the drawer should take the full screen. */\n fullScreen?: boolean = false;\n\n /** Min-width of the drawer. If a number is provided, assumes pixel units. */\n minWidth?: number | string;\n\n /** Min-height of the drawer. If a number is provided, assumes pixel units. */\n minHeight?: number | string;\n\n /** Max-width of the drawer. If a number is provided, assumes pixel units. */\n maxWidth?: number | string;\n\n /** Max-height of the drawer. If a number is provided, assumes pixel units. */\n maxHeight?: number | string;\n}\n","import { CdkDialogContainer } from '@angular/cdk/dialog';\nimport { CdkPortalOutlet } from '@angular/cdk/portal';\nimport {\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n OnDestroy,\n ViewEncapsulation,\n inject,\n ANIMATION_MODULE_TYPE,\n} from '@angular/core';\nimport { AcpDrawerConfig } from './drawer-config';\n\nconst ENTER_ANIMATION = '_acp-drawer-enter';\nconst EXIT_ANIMATION = '_acp-drawer-exit';\n\n/**\n * Internal component that wraps user-provided drawer content.\n *\n * This component handles the drawer's animations, positioning, and lifecycle.\n * It extends the CDK's DialogContainer to provide drawer-specific behavior\n * including slide-in/slide-out animations and proper focus management.\n *\n * @docs-private\n */\n@Component({\n selector: 'acp-drawer-container',\n templateUrl: 'drawer-container.html',\n styleUrl: 'drawer-container.scss',\n // In Ivy embedded views will be change detected from their declaration place, rather than where\n // they were stamped out. This means that we can't have the drawer container be OnPush,\n // because it might cause the sheets that were opened from a template not to be out of date.\n changeDetection: ChangeDetectionStrategy.Default,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'acp-drawer-container',\n '[class]': '_drawerPosition',\n '[class.acp-drawer-container-animations-enabled]': '!_animationsDisabled',\n '[class.acp-drawer-container-enter]': '_animationState === \"visible\"',\n '[class.acp-drawer-container-exit]': '_animationState === \"hidden\"',\n '[class.acp-drawer-fullscreen]': '_config.fullScreen',\n tabindex: '-1',\n '[id]': '_config.id',\n '[attr.role]': '_config.role',\n '[attr.aria-modal]': '_config.ariaModal',\n '[attr.aria-label]': '_config.ariaLabel',\n '(animationstart)': '_handleAnimationEvent(true, $event.animationName)',\n '(animationend)': '_handleAnimationEvent(false, $event.animationName)',\n '(animationcancel)': '_handleAnimationEvent(false, $event.animationName)',\n },\n imports: [CdkPortalOutlet],\n})\nexport class AcpDrawerContainer extends CdkDialogContainer<AcpDrawerConfig> implements OnDestroy {\n /** Whether animations are disabled in the current environment. */\n protected _animationsDisabled =\n inject(ANIMATION_MODULE_TYPE, { optional: true }) === 'NoopAnimations';\n\n /** The state of the drawer animations. */\n _animationState: 'void' | 'visible' | 'hidden' = 'void';\n\n /** Emits whenever the state of the animation changes. */\n _animationStateChanged = new EventEmitter<{\n toState: 'visible' | 'hidden';\n phase: 'start' | 'done';\n }>();\n\n /** Whether the component has been destroyed. */\n private _destroyed = false;\n\n /**\n * Gets the CSS class for the drawer position.\n * @returns CSS class name based on the drawer's position\n */\n get _drawerPosition() {\n return `acp-drawer-${this._config.position}`;\n }\n\n /**\n * Called when content is attached to the container.\n * Initializes the dialog container and starts the entrance animation.\n */\n protected override _contentAttached(): void {\n // Delegate to the original dialog-container initialization (i.e. saving the\n // previous element, setting up the focus trap and moving focus to the container).\n super._contentAttached();\n\n this.enter();\n }\n\n /**\n * Begin animation of drawer entrance into view.\n * Sets the animation state to visible and triggers change detection.\n */\n enter(): void {\n if (!this._destroyed) {\n this._animationState = 'visible';\n this._changeDetectorRef.markForCheck();\n this._changeDetectorRef.detectChanges();\n if (this._animationsDisabled) {\n this._simulateAnimation(ENTER_ANIMATION);\n }\n }\n }\n\n /**\n * Begin animation of the drawer exiting from view.\n * Sets the animation state to hidden and triggers the exit animation.\n */\n exit(): void {\n if (!this._destroyed) {\n this._animationState = 'hidden';\n this._changeDetectorRef.markForCheck();\n if (this._animationsDisabled) {\n this._simulateAnimation(EXIT_ANIMATION);\n }\n }\n }\n\n /**\n * Lifecycle hook called when the component is destroyed.\n * Marks the component as destroyed and calls the parent's ngOnDestroy.\n */\n override ngOnDestroy() {\n super.ngOnDestroy();\n\n this._destroyed = true;\n }\n\n /**\n * Simulates animation events when animations are disabled.\n * @param name The animation name to simulate\n */\n private _simulateAnimation(name: typeof ENTER_ANIMATION | typeof EXIT_ANIMATION) {\n this._ngZone.run(() => {\n this._handleAnimationEvent(true, name);\n setTimeout(() => this._handleAnimationEvent(false, name));\n });\n }\n\n /**\n * Handles animation events for both start and end phases.\n * @param isStart Whether this is the start or end of the animation\n * @param animationName The name of the animation\n */\n protected _handleAnimationEvent(isStart: boolean, animationName: string) {\n const isEnter = animationName === ENTER_ANIMATION;\n const isExit = animationName === EXIT_ANIMATION;\n\n if (isEnter) {\n this._trapFocus();\n }\n\n if (isEnter || isExit) {\n this._animationStateChanged.emit({\n toState: isEnter ? 'visible' : 'hidden',\n phase: isStart ? 'start' : 'done',\n });\n }\n }\n\n /**\n * Override to prevent automatic focus capture.\n * Focus is handled by the enter animation instead.\n */\n protected override _captureInitialFocus(): void {\n // Intentionally empty - focus is handled by the enter animation\n }\n}\n","<ng-template cdkPortalOutlet></ng-template>\n","import { DialogRef } from '@angular/cdk/dialog';\nimport { ESCAPE, hasModifierKey } from '@angular/cdk/keycodes';\nimport { merge, Observable, Subject } from 'rxjs';\nimport { filter, take } from 'rxjs/operators';\nimport { AcpDrawerConfig } from './drawer-config';\nimport { AcpDrawerContainer } from './drawer-container';\nimport { ComponentRef } from '@angular/core';\n\n/**\n * Reference to a drawer dispatched from the drawer service.\n *\n * This class provides methods and properties to interact with an open drawer,\n * including dismissing it, accessing its component instance, and subscribing\n * to lifecycle events like opening and closing.\n *\n * @template T The type of the component opened in the drawer\n * @template R The type of the result returned when the drawer is dismissed\n *\n * @example\n * ```typescript\n * const drawerRef = this.drawer.open(MyComponent);\n *\n * // Access component instance\n * drawerRef.instance.someProperty = 'value';\n *\n * // Listen for dismissal\n * drawerRef.afterDismissed().subscribe(result => {\n * console.log('Drawer dismissed with:', result);\n * });\n *\n * // Dismiss programmatically\n * drawerRef.dismiss('some result');\n * ```\n */\nexport class AcpDrawerRef<T = any, R = any> {\n /** Instance of the component making up the content of the drawer. */\n get instance(): T {\n return this._ref.componentInstance!;\n }\n\n /**\n * `ComponentRef` of the component opened into the drawer. Will be\n * null when the drawer is opened using a `TemplateRef`.\n */\n get componentRef(): ComponentRef<T> | null {\n return this._ref.componentRef;\n }\n\n /**\n * Instance of the component into which the drawer content is projected.\n * @docs-private\n */\n containerInstance: AcpDrawerContainer;\n\n /** Whether the user is allowed to close the drawer. */\n disableClose: boolean | undefined;\n\n /** Unique ID for the drawer. */\n id: string;\n\n /** Subject for notifying the user that the drawer has been dismissed. */\n private readonly _afterDismissed = new Subject<R | undefined>();\n\n /** Subject for notifying the user that the drawer has opened and appeared. */\n private readonly _afterOpened = new Subject<void>();\n\n /** Result to be passed down to the `afterDismissed` stream. */\n private _result: R | undefined;\n\n /** Handle to the timeout that's running as a fallback in case the exit animation doesn't fire. */\n private _closeFallbackTimeout: any;\n\n /**\n * Creates a new drawer reference.\n * @param _ref The underlying CDK dialog reference\n * @param config Configuration options for the drawer\n * @param containerInstance The drawer container instance\n */\n constructor(\n private _ref: DialogRef<R, T>,\n config: AcpDrawerConfig,\n containerInstance: AcpDrawerContainer,\n ) {\n this.containerInstance = containerInstance;\n this.disableClose = config.disableClose;\n this.id = _ref.id;\n\n // Emit when opening animation completes\n containerInstance._animationStateChanged\n .pipe(\n filter(event => event.phase === 'done' && event.toState === 'visible'),\n take(1),\n )\n .subscribe(() => {\n this._afterOpened.next();\n this._afterOpened.complete();\n });\n\n // Dispose overlay when closing animation is complete\n containerInstance._animationStateChanged\n .pipe(\n filter(event => event.phase === 'done' && event.toState === 'hidden'),\n take(1),\n )\n .subscribe(() => {\n clearTimeout(this._closeFallbackTimeout);\n this._ref.close(this._result);\n });\n\n _ref.overlayRef.detachments().subscribe(() => {\n this._ref.close(this._result);\n });\n\n merge(\n this.backdropClick(),\n this.keydownEvents().pipe(filter(event => event.keyCode === ESCAPE)),\n ).subscribe(event => {\n if (\n !this.disableClose &&\n (event.type !== 'keydown' || !hasModifierKey(event as KeyboardEvent))\n ) {\n event.preventDefault();\n this.dismiss();\n }\n });\n }\n\n /**\n * Dismisses the drawer.\n * @param result Data to be passed back to the drawer opener.\n */\n dismiss(result?: R): void {\n if (this.containerInstance && !this._afterDismissed.closed) {\n // Transition the backdrop in parallel to the drawer.\n this.containerInstance._animationStateChanged\n .pipe(\n filter(event => event.phase === 'start'),\n take(1),\n )\n .subscribe(_event => {\n // The logic that disposes of the overlay depends on the exit animation completing, however\n // it isn't guaranteed if the parent view is destroyed while it's running. Add a fallback\n // timeout which will clean everything up if the animation hasn't fired within the specified\n // amount of time plus 100ms. We don't need to run this outside the NgZone, because for the\n // vast majority of cases the timeout will have been cleared before it has fired.\n\n this._closeFallbackTimeout = setTimeout(() => this._ref.close(this._result), 500);\n this._ref.overlayRef.detachBackdrop();\n });\n\n this._result = result;\n this.containerInstance.exit();\n this.containerInstance = null!;\n }\n }\n\n /**\n * Gets an observable that is notified when the drawer is finished closing.\n * @returns Observable that emits the result passed to dismiss() or undefined\n */\n afterDismissed(): Observable<R | undefined> {\n return this._ref.closed;\n }\n\n /**\n * Gets an observable that is notified when the drawer has opened and appeared.\n * @returns Observable that emits when the drawer is fully visible\n */\n afterOpened(): Observable<void> {\n return this._afterOpened;\n }\n\n /**\n * Gets an observable that emits when the overlay's backdrop has been clicked.\n * @returns Observable that emits mouse events from backdrop clicks\n */\n backdropClick(): Observable<MouseEvent> {\n return this._ref.backdropClick;\n }\n\n /**\n * Gets an observable that emits when keydown events are targeted on the overlay.\n * @returns Observable that emits keyboard events\n */\n keydownEvents(): Observable<KeyboardEvent> {\n return this._ref.keydownEvents;\n }\n}\n","import { coerceCssPixelValue } from '@angular/cdk/coercion';\nimport { Dialog, DialogConfig } from '@angular/cdk/dialog';\nimport { Overlay } from '@angular/cdk/overlay';\nimport { ComponentType } from '@angular/cdk/portal';\nimport { inject, Injectable, InjectionToken, OnDestroy, TemplateRef } from '@angular/core';\nimport { defer, Observable, Subject } from 'rxjs';\nimport { startWith } from 'rxjs/operators';\nimport { AcpDrawerConfig } from './drawer-config';\nimport { AcpDrawerContainer } from './drawer-container';\nimport { AcpDrawerRef } from './drawer-ref';\n\n/** Injection token that can be used to access the data that was passed in to a drawer. */\nexport const ACP_DRAWER_DATA = new InjectionToken<any>('AcpDrawerData');\n\n/** Injection token that can be used to specify default drawer options. */\nexport const ACP_DRAWER_DEFAULT_OPTIONS = new InjectionToken<AcpDrawerConfig>(\n 'acp-drawer-default-options',\n);\n\n/** Counter for unique drawer ids. */\nlet uniqueId = 0;\n\n/**\n * Service to trigger ACP drawer components.\n *\n * The AcpDrawer service provides methods to open, manage, and dismiss drawer panels\n * that slide in from any side of the screen. It's built on top of Angular CDK Dialog\n * and provides a flexible way to display additional content without navigating away\n * from the current page.\n *\n * @example\n * ```typescript\n * constructor(private drawer: AcpDrawer) {}\n *\n * openDrawer() {\n * const drawerRef = this.drawer.open(MyDrawerComponent, {\n * position: 'right',\n * width: '400px',\n * data: { message: 'Hello from drawer!' }\n * });\n *\n * drawerRef.afterDismissed().subscribe(result => {\n * console.log('Drawer closed with result:', result);\n * });\n * }\n * ```\n */\n@Injectable({ providedIn: 'root' })\nexport class AcpDrawer implements OnDestroy {\n private _overlay = inject(Overlay);\n private _parentDrawer = inject(AcpDrawer, { optional: true, skipSelf: true });\n private _defaultOptions = inject<AcpDrawerConfig>(ACP_DRAWER_DEFAULT_OPTIONS, { optional: true });\n\n private readonly _openDrawersAtThisLevel: AcpDrawerRef<any>[] = [];\n private readonly _afterAllDismissedAtThisLevel = new Subject<void>();\n private readonly _afterOpenedAtThisLevel = new Subject<AcpDrawerRef<any>>();\n private _dialog = inject(Dialog);\n\n /** Keeps track of the currently-open dialogs. */\n get openDrawers(): AcpDrawerRef<any>[] {\n return this._parentDrawer ? this._parentDrawer.openDrawers : this._openDrawersAtThisLevel;\n }\n\n /** Stream that emits when a drawer has been opened. */\n get afterOpened(): Subject<AcpDrawerRef<any>> {\n return this._parentDrawer ? this._parentDrawer.afterOpened : this._afterOpenedAtThisLevel;\n }\n\n /**\n * Gets the subject for tracking when all drawers are dismissed.\n * @returns Subject that emits when all drawers at this level are closed\n */\n private _getAfterAllDismissed(): Subject<void> {\n const parent = this._parentDrawer;\n return parent ? parent._getAfterAllDismissed() : this._afterAllDismissedAtThisLevel;\n }\n\n /**\n * Stream that emits when all open drawer have finished closing.\n * Will emit on subscribe if there are no open drawers to begin with.\n */\n readonly afterAllDismissed: Observable<void> = defer(() =>\n this.openDrawers.length\n ? this._getAfterAllDismissed()\n : this._getAfterAllDismissed().pipe(startWith(undefined)),\n ) as Observable<any>;\n\n /**\n * Opens a drawer containing the given component.\n * @param component Type of the component to load into the drawer.\n * @param config Extra configuration options.\n * @returns Reference to the newly-opened drawer.\n */\n open<T, D = any, R = any>(\n component: ComponentType<T>,\n config?: AcpDrawerConfig<D>,\n ): AcpDrawerRef<T, R>;\n\n /**\n * Opens a drawer containing the given template.\n * @param template TemplateRef to instantiate as the drawer content.\n * @param config Extra configuration options.\n * @returns Reference to the newly-opened drawer.\n */\n open<T, D = any, R = any>(\n template: TemplateRef<T>,\n config?: AcpDrawerConfig<D>,\n ): AcpDrawerRef<T, R>;\n\n open<T, D = any, R = any>(\n componentOrTemplateRef: ComponentType<T> | TemplateRef<T>,\n config?: AcpDrawerConfig<D>,\n ): AcpDrawerRef<T, R> {\n let drawerRef!: AcpDrawerRef<T, R>;\n\n const _config = { ...(this._defaultOptions || new AcpDrawerConfig()), ...config };\n _config.id = _config.id || `acp-drawer-${uniqueId++}`;\n\n if (_config.fullScreen) {\n _config.width = '100vw';\n _config.height = '100vh';\n } else {\n _config.width =\n _config.position === 'left' || _config.position === 'right'\n ? coerceCssPixelValue(_config.width)\n : '100vw';\n\n _config.height =\n _config.position === 'top' || _config.position === 'bottom'\n ? coerceCssPixelValue(_config.height)\n : '100vh';\n }\n\n this._dialog.open<R, D, T>(componentOrTemplateRef, {\n ..._config,\n // Disable closing since we need to sync it up to the animation ourselves.\n disableClose: true,\n // Disable closing on detachments so that we can sync up the animation.\n closeOnOverlayDetachments: false,\n container: {\n type: AcpDrawerContainer,\n providers: () => [\n // Provide our config as the CDK config as well since it has the same interface as the\n // CDK one, but it contains the actual values passed in by the user for things like\n // `disableClose` which we disable for the CDK dialog since we handle it ourselves.\n { provide: AcpDrawerConfig, useValue: _config },\n { provide: DialogConfig, useValue: _config },\n ],\n },\n scrollStrategy: _config.scrollStrategy || this._overlay.scrollStrategies.block(),\n positionStrategy: this._overlay.position().global()[_config.position!]('0'),\n templateContext: () => ({ drawerRef }),\n providers: (cdkRef, _cdkConfig, container) => {\n drawerRef = new AcpDrawerRef(cdkRef, _config, container as AcpDrawerContainer);\n return [\n { provide: AcpDrawerRef, useValue: drawerRef },\n { provide: ACP_DRAWER_DATA, useValue: _config.data },\n ];\n },\n });\n\n this.openDrawers.push(drawerRef);\n this.afterOpened.next(drawerRef);\n\n drawerRef.afterDismissed().subscribe(() => {\n const index = this.openDrawers.indexOf(drawerRef);\n\n if (index > -1) {\n this.openDrawers.splice(index, 1);\n\n if (!this.openDrawers.length) {\n this._getAfterAllDismissed().next();\n }\n }\n });\n\n return drawerRef;\n }\n\n /**\n * Dismisses all of the currently-open drawers.\n * This will close all drawers at the current level and emit the afterAllDismissed event.\n */\n dismissAll(): void {\n this._dismissDrawers(this.openDrawers);\n }\n\n /**\n * Finds an open drawer by its id.\n * @param id ID to use when looking up the drawer.\n * @returns The drawer reference if found, undefined otherwise.\n */\n getDrawerById(id: string): AcpDrawerRef<any> | undefined {\n return this.openDrawers.find(drawer => drawer.id === id);\n }\n\n /**\n * Lifecycle hook that is called when the service is destroyed.\n * Dismisses all drawers at this level and completes observables.\n */\n ngOnDestroy() {\n // Only dismiss the drawers at this level on destroy\n // since the parent service may still be active.\n this._dismissDrawers(this._openDrawersAtThisLevel);\n this._afterAllDismissedAtThisLevel.complete();\n this._afterOpenedAtThisLevel.complete();\n }\n\n /**\n * Dismisses multiple drawers.\n * @param drawers Array of drawer references to dismiss\n */\n private _dismissDrawers(drawers: AcpDrawerRef<any>[]) {\n let i = drawers.length;\n\n while (i--) {\n drawers[i].dismiss();\n }\n }\n}\n","import { DomPortalOutlet, TemplatePortal } from '@angular/cdk/portal';\nimport {\n ApplicationRef,\n ChangeDetectorRef,\n Directive,\n DOCUMENT,\n InjectionToken,\n Injector,\n OnDestroy,\n TemplateRef,\n ViewContainerRef,\n inject,\n} from '@angular/core';\nimport { Subject } from 'rxjs';\n\n/**\n * Injection token that can be used to reference instances of `AcpPopoverContent`. It serves\n * as alternative token to the actual `AcpPopoverContent` class which could cause unnecessary\n * retention of the class and its directive metadata.\n */\nexport const ACP_POPOVER_CONTENT = new InjectionToken<AcpPopoverContent>('AcpPopoverContent');\n\n/**\n * Base class for popover content that provides common functionality.\n *\n * This abstract class handles the attachment and detachment of popover content\n * using Angular CDK portals. It manages the DOM manipulation required to display\n * popover content in an overlay.\n *\n * @docs-private\n */\n@Directive()\nexport abstract class _AcpPopoverContentBase implements OnDestroy {\n private _template = inject(TemplateRef<any>);\n private _appRef = inject(ApplicationRef);\n private _injector = inject(Injector);\n private _viewContainerRef = inject(ViewContainerRef);\n private _document = inject(DOCUMENT);\n private _changeDetectorRef = inject(ChangeDetectorRef, { optional: true });\n\n private _portal!: TemplatePortal<any>;\n private _outlet!: DomPortalOutlet;\n\n /** Emits when the popover content has been attached. */\n readonly _attached = new Subject<void>();\n\n /**\n * Attaches the content with a particular context.\n * @param context Context data to pass to the template\n * @docs-private\n */\n attach(context: any = {}) {\n if (!this._portal) {\n this._portal = new TemplatePortal(this._template, this._viewContainerRef);\n }\n\n this.detach();\n\n if (!this._outlet) {\n this._outlet = new DomPortalOutlet(\n this._document.createElement('div'),\n this._appRef,\n this._injector,\n );\n }\n\n const element: HTMLElement = this._template.elementRef.nativeElement;\n\n // Because we support opening the same popover from different triggers (which in turn have their\n // own `OverlayRef` panel), we have to re-insert the host element every time, otherwise we\n // risk it staying attached to a pane that's no longer in the DOM.\n element.parentNode!.insertBefore(this._outlet.outletElement, element);\n\n // When `AcpPopoverContent` is used in an `OnPush` component, the insertion of the popover\n // content via `createEmbeddedView` does not cause the content to be seen as \"dirty\"\n // by Angular. This causes the `@ContentChildren` for popover items within the popover to\n // not be updated by Angular. By explicitly marking for check here, we tell Angular that\n // it needs to check for new popover items and update the `@ContentChild` in `AcpPopover`.\n // @breaking-change 9.0.0 Make change detector ref required\n if (this._changeDetectorRef) {\n this._changeDetectorRef.markForCheck();\n }\n\n this._portal.attach(this._outlet, context);\n this._attached.next();\n }\n\n /**\n * Detaches the content from the DOM.\n * @docs-private\n */\n detach() {\n if (this._portal.isAttached) {\n this._portal.detach();\n }\n }\n\n /**\n * Lifecycle hook called when the component is destroyed.\n * Cleans up the portal outlet to prevent memory leaks.\n */\n ngOnDestroy() {\n if (this._outlet) {\n this._outlet.dispose();\n }\n }\n}\n\n/**\n * Popover content that will be rendered lazily once the popover is opened.\n *\n * This directive allows you to define content that should be rendered inside\n * a popover panel. The content is only created when the popover is actually\n * opened, which can improve performance for complex content.\n *\n * @example\n * ```html\n * <ng-template acpPopoverContent>\n * <div>This content will be shown in the popover</div>\n * </ng-template>\n * ```\n */\n@Directive({\n selector: 'ng-template[acpPopoverContent]',\n standalone: true,\n providers: [{ provide: ACP_POPOVER_CONTENT, useExisting: AcpPopoverContent }],\n})\nexport class AcpPopoverContent extends _AcpPopoverContentBase {\n constructor() {\n super();\n }\n}\n","/**\n * Throws an exception for the case when popover trigger doesn't have a valid acp-popover instance\n */\nexport function throwAcpPopoverMissingError() {\n throw Error(`acp-popover-trigger: must pass in an acp-popover instance.\n\n Example:\n <acp-popover #popover=\"acpPopover\"></acp-popover>\n <button [acpPopoverTriggerFor]=\"popover\"></button>`);\n}\n\n/**\n * Throws an exception for the case when popover's acpPopoverPosition[0] value isn't valid.\n * In other words, it doesn't match 'above', 'below', 'before' or 'after'.\n */\nexport function throwAcpPopoverInvalidPositionStart() {\n throw Error(`acpPopoverPosition[0] value must be either 'above', 'below', 'before' or 'after'.\n Example: <acp-popover [position]=\"['below', 'after']\" #popover=\"acpPopover\"></acp-popover>`);\n}\n\n/**\n * Throws an exception for the case when popover's acpPopoverPosition[1] value isn't valid.\n * In other words, it doesn't match 'above', 'below', 'before', 'after' or 'center'.\n */\nexport function throwAcpPopoverInvalidPositionEnd() {\n throw Error(`acpPopoverPosition[1] value must be either 'above', 'below', 'before', 'after' or 'center'.\n Example: <acp-popover [position]=\"['below', 'after']\" #popover=\"acpPopover\"></acp-popover>`);\n}\n","import { CdkTrapFocus } from '@angular/cdk/a11y';\nimport { Direction } from '@angular/cdk/bidi';\nimport { ESCAPE, hasModifierKey } from '@angular/cdk/keycodes';\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChild,\n ElementRef,\n EventEmitter,\n InjectionToken,\n Input,\n NgZone,\n OnDestroy,\n OnInit,\n Output,\n TemplateRef,\n ViewChild,\n ViewEncapsulation,\n booleanAttribute,\n inject,\n} from '@angular/core';\nimport { _animationsDisabled } from '@angular/material/core';\nimport { Subject } from 'rxjs';\nimport { ACP_POPOVER_CONTENT, AcpPopoverContent } from './popover-content';\nimport {\n throwAcpPopoverInvalidPositionEnd,\n throwAcpPopoverInvalidPositionStart,\n} from './popover-errors';\nimport { AcpPopoverDefaultOptions, AcpPopoverPanel } from './popover-interfaces';\nimport { AcpPopoverPosition, AcpPopoverTriggerEvent, PopoverCloseReason } from './popover-types';\n\n/** Injection token to be used to override the default options for `acp-popover`. */\nexport const ACP_POPOVER_DEFAULT_OPTIONS = new InjectionToken<AcpPopoverDefaultOptions>(\n 'acp-popover-default-options',\n {\n providedIn: 'root',\n factory: () => ({\n backdropClass: 'cdk-overlay-transparent-backdrop',\n }),\n },\n);\n\nlet popoverPanelUid = 0;\n\n/** Name of the enter animation `@keyframes`. */\nconst ENTER_ANIMATION = '_acp-popover-enter';\n\n/** Name of the exit animation `@keyframes`. */\nconst EXIT_ANIMATION = '_acp-popover-exit';\n\n/**\n * ACP Popover component that displays content in an overlay panel.\n *\n * The popover can be triggered by hover or click events and supports\n * various positioning options. It's built on top of Angular CDK Overlay\n * and provides a flexible way to display contextual information.\n *\n * ## Basic Usage\n * @example\n * ```html\n * <acp-popover #popover=\"acpPopover\" [position]=\"['below', 'after']\">\n * <div>Popover content goes here</div>\n * </acp-popover>\n *\n * <button [acpPopoverTriggerFor]=\"popover\">Show popover</button>\n * ```\n *\n * ## Closing Explicitly\n *\n * ### 1. Close from within popover content:\n * @example\n * ```html\n * <acp-popover #popover=\"acpPopover\">\n * <div>\n * <p>Popover content</p>\n * <button (click)=\"popover.close()\">Close</button>\n * <button (click)=\"popover.close('user-action')\">Close with reason</button>\n * </div>\n * </acp-popover>\n * ```\n *\n * ### 2. Close from component using ViewChild:\n * @example\n * ```typescript\n * @Component({\n * template: `\n * <acp-popover #popover=\"acpPopover\">\n * <div>Content with external close</div>\n * </acp-popover>\n * <button [acpPopoverTriggerFor]=\"popover\">Open</button>\n * <button (click)=\"closePopover()\">Close from outside</button>\n * `\n * })\n * export class MyComponent {\n * @ViewChild('popover') popover!: AcpPopover;\n *\n * closePopover() {\n * this.popover.close('programmatic');\n * }\n * }\n * ```\n *\n * ### 3. Close using trigger reference:\n * @example\n * ```html\n * <acp-popover #popover=\"acpPopover\">\n * <div>Popover content</div>\n * </acp-popover>\n *\n * <button [acpPopoverTriggerFor]=\"popover\" #trigger=\"acpPopoverTrigger\">\n * Show popover\n * </button>\n * <button (click)=\"trigger.closePopover()\">Close via trigger</button>\n * <button (click)=\"trigger.closePopoverWithReason('external')\">Close with reason</button>\n * ```\n *\n * ## Automatic Closing\n * The popover automatically closes on:\n * - ESC key press\n * - Click outside (backdrop) when `closeOnBackdropClick` is true\n * - Mouse leave after delay when `triggerEvent` is 'hover'\n * - Click on panel when `closeOnPanelClick` is true\n */\n@Component({\n selector: 'acp-popover',\n templateUrl: './popover.html',\n styleUrl: './popover.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n exportAs: 'acpPopover',\n imports: [CdkTrapFocus],\n})\nexport class AcpPopover implements AcpPopoverPanel, OnInit, OnDestroy {\n private _changeDetectorRef = inject(ChangeDetectorRef);\n private _elementRef = inject(ElementRef);\n private _unusedNgZone = inject(NgZone);\n private _defaultOptions = inject<AcpPopoverDefaultOptions>(ACP_POPOVER_DEFAULT_OPTIONS);\n\n private _previousElevation?: string;\n private _elevationPrefix = 'mat-elevation-z';\n private _baseElevation: number | null = null;\n private _exitFallbackTimeout: ReturnType<typeof setTimeout> | undefined;\n private _mouseleaveTimer: ReturnType<typeof setTimeout> | undefined;\n\n /** Whether animations are currently disabled. */\n protected _animationsDisabled = _animationsDisabled();\n\n /** Config object to be passed into the popover's class. */\n _classList: Record<string, boolean> = {};\n\n /** Current state of the panel animation. */\n _panelAnimationState: 'void' | 'enter' = 'void';\n\n /** Emits whenever an animation on the popover completes. */\n readonly _animationDone = new Subject<'void' | 'enter'>();\n\n /** Whether the popover is animating. */\n _isAnimating = false;\n\n /** Closing disabled on popover */\n closeDisabled = false;\n\n /** Config object to be passed into the popover's arrow style */\n arrowStyles?: Record<string, unknown>;\n\n /** Layout direction of the popover. */\n direction?: Direction;\n\n /** Class or list of classes to be added to the overlay panel. */\n overlayPanelClass: string | string[] = this._defaultOptions.overlayPanelClass || '';\n\n /** Class to be added to the backdrop element. */\n @Input() backdropClass = this._defaultOptions.backdropClass;\n\n /** aria-label for the popover panel. */\n @Input('aria-label') ariaLabel?: string;\n\n /** aria-labelledby for the popover panel. */\n @Input('aria-labelledby') ariaLabelledby?: string;\n\n /** aria-describedby for the popover panel. */\n @Input('aria-describedby') ariaDescribedby?: string;\n\n /** Popover's trigger event. */\n @Input() triggerEvent: AcpPopoverTriggerEvent = this._defaultOptions.triggerEvent ?? 'hover';\n\n /** Popover's enter delay. */\n @Input() enterDelay = this._defaultOptions.enterDelay ?? 100;\n\n /** Popover's leave delay. */\n @Input() leaveDelay = this._defaultOptions.leaveDelay ?? 100;\n\n /** Popover's position. */\n @Input()\n get position() {\n return this._position;\n }\n set position(value: AcpPopoverPosition) {\n if (!['before', 'after', 'above', 'below'].includes(value[0])) {\n throwAcpPopoverInvalidPositionStart();\n }\n if (!['before', 'after', 'above', 'below', 'center'].includes(value[1])) {\n throwAcpPopoverInvalidPositionEnd();\n }\n this._position = value;\n this.setPositionClasses();\n }\n private _position = this._defaultOptions.position ?? ['below', 'after'];\n\n /** Popover-panel's X offset. */\n @Input() xOffset = this._defaultOptions.xOffset ?? 0;\n\n /** Popover-panel's Y offset. */\n @Input() yOffset = this._defaultOptions.yOffset ?? 0;\n\n /** Popover-arrow's width. */\n @Input() arrowWidth = this._defaultOptions.arrowWidth ?? 16;\n\n /** Popover-arrow's height. */\n @Input() arrowHeight = this._defaultOptions.arrowHeight ?? 16;\n\n /** Popover-arrow's X offset. */\n @Input() arrowOffsetX = this._defaultOptions.arrowOffsetX ?? 20;\n\n /** Popover-arrow's Y offset. */\n @Input() arrowOffsetY = this._defaultOptions.arrowOffsetY ?? 20;\n\n /** Whether the popover arrow should be hidden. */\n @Input({ transform: booleanAttribute })\n hideArrow = this._defaultOptions.hideArrow ?? false;\n\n /** Whether popover can be closed when click the popover-panel. */\n @Input({ transform: booleanAttribute })\n closeOnPanelClick = this._defaultOptions.closeOnPanelClick ?? false;\n\n /** Whether popover can be closed when click the backdrop. */\n @Input({ transform: booleanAttribute })\n closeOnBackdropClick = this._defaultOptions.closeOnBackdropClick ?? true;\n\n /** Whether enable focus trap using `cdkTrapFocus`. */\n @Input({ transform: booleanAttribute })\n focusTrapEnabled = this._defaultOptions.focusTrapEnabled ?? false;\n\n /** Whether enable focus trap auto capture using `cdkTrapFocusAutoCapture`. */\n @Input({ transform: booleanAttribute })\n focusTrapAutoCaptureEnabled = this._defaultOptions.focusTrapAutoCaptureEnabled ?? false;\n\n /** Whether the popover has a backdrop. It will always be false if the trigger event is hover. */\n @Input({ transform: booleanAttribute })\n hasBackdrop = this._defaultOptions.hasBackdrop;\n\n /**\n * This method takes classes set on the host acp-popover element and applies them on the\n * popover template that displays in the overlay container. Otherwise, it's difficult\n * to style the containing popover from outside the component.\n * @param classes list of class names\n */\n @Input()\n set panelClass(classes: string) {\n const previousPanelClass = this._previousPanelClass;\n const newClassList = { ...this._classList };\n\n if (previousPanelClass && previousPanelClass.length) {\n previousPanelClass.split(' ').forEach((className: string) => {\n newClassList[className] = false;\n });\n }\n\n this._previousPanelClass = classes;\n\n if (classes && classes.length) {\n classes.split(' ').forEach((className: string) => {\n newClassList[className] = true;\n });\n\n this._elementRef.nativeElement.className = '';\n\n this.setPositionClasses();\n }\n\n this._classList = newClassList;\n }\n private _previousPanelClass?: string;\n\n /**\n * This method takes classes set on the host acp-popover element and applies them on the\n * popover template that displays in the overlay container. Otherwise, it's difficult\n * to style the containing popover from outside the component.\n * @deprecated Use `panelClass` instead.\n * @breaking-change 8.0.0\n */\n @Input()\n get classList(): string {\n return this.panelClass;\n }\n set classList(classes: string) {\n this.panelClass = classes;\n }\n\n /** Event emitted when the popover is closed. */\n @Output() closed = new EventEmitter<PopoverCloseReason>();\n\n /**\n * Programmatically closes the popover.\n * @param reason Optional reason for closing\n */\n close(reason?: PopoverCloseReason): void {\n this.closed.emit(reason || 'programmatic');\n }\n\n /** @docs-private */\n @ViewChild(TemplateRef) templateRef!: TemplateRef<any>;\n\n /**\n * Popover content that will be rendered lazily.\n * @docs-private\n */\n @ContentChild(ACP_POPOVER_CONTENT) lazyContent?: AcpPopoverContent;\n\n readonly panelId = `acp-popover-panel-${popoverPanelUid++}`;\n\n /**\n * Lifecycle hook called when the component is initialized.\n * Sets up the initial position classes for the popover.\n */\n ngOnInit() {\n this.setPositionClasses();\n }\n\n /**\n * Lifecycle hook called when the component is destroyed.\n * Cleans up subscriptions and timers.\n */\n ngOnDestroy() {\n this.closed.complete();\n clearTimeout(this._exitFallbackTimeout);\n clearTimeout(this._mouseleaveTimer);\n }\n\n /**\n * Handle a keyboard event from the popover, delegating to the appropriate action.\n * @param event The keyboard event to handle\n */\n _handleKeydown(event: KeyboardEvent) {\n const keyCode = event.keyCode;\n\n switch (keyCode) {\n case ESCAPE:\n if (!hasModifierKey(event)) {\n event.preventDefault();\n this.closed.emit('keydown');\n }\n break;\n }\n }\n\n /**\n * Close popover on click if `closeOnPanelClick` is true.\n */\n _handleClick() {\n if (this.closeOnPanelClick) {\n this.closed.emit('click');\n }\n }\n\n /**\n * Disables close of popover when leaving trigger element and mouse over the popover.\n */\n _handleMouseOver() {\n if (this.triggerEvent === 'hover') {\n // Cancel any pending close timer\n if (this._mouseleaveTimer) {\n clearTimeout(this._mouseleaveTimer);\n this._mouseleaveTimer = undefined;\n }\n this.closeDisabled = true;\n }\n }\n\n /**\n * Enables close of popover when mouse leaving popover element.\n */\n _handleMouseLeave() {\n if (this.triggerEvent === 'hover') {\n this._mouseleaveTimer = setTimeout(() => {\n this.closeDisabled = false;\n this.closed.emit();\n }, this.leaveDelay);\n }\n }\n\n /**\n * Sets the current styles for the popover to allow for dynamically changing settings.\n * @param pos The position to set styles for, defaults to current position\n */\n setCurrentStyles(pos = this.position) {\n const left =\n pos[1] === 'after'\n ? `${this.arrowOffsetX - this.arrowWidth / 2}px`\n : pos[1] === 'center'\n ? `calc(50% - ${this.arrowWidth / 2}px)`\n : '';\n const right = pos[1] === 'before' ? `${this.arrowOffsetX - this.arrowWidth / 2}px` : '';\n\n const bottom =\n pos[1] === 'above'\n ? `${this.arrowOffsetY - this.arrowHeight / 2}px`\n : pos[1] === 'center'\n ? `calc(50% - ${this.arrowHeight / 2}px)`\n : '';\n const top = pos[1] === 'below' ? `${this.arrowOffsetY - this.arrowHeight / 2}px` : '';\n\n this.arrowStyles =\n pos[0] === 'above' || pos[0] === 'below'\n ? {\n left: this.direction === 'ltr' ? left : right,\n right: this.direction === 'ltr' ? right : left,\n }\n : { top, bottom };\n }\n\n /**\n * It's necessary to set position-based classes to ensure the popover panel animation\n * folds out from the correct direction.\n * @param pos The position to set classes for, defaults to current position\n */\n setPositionClasses(pos = this.position): void {\n this._classList = {\n ...this._classList,\n ['acp-popover-before-above']: pos[0] === 'before' && pos[1] === 'above',\n ['acp-popover-before-center']: pos[0] === 'before' && pos[1] === 'center',\n ['acp-popover-before-below']: pos[0] === 'before' && pos[1] === 'below',\n ['acp-popover-after-above']: pos[0] === 'after' && pos[1] === 'above',\n ['acp-popover-after-center']: pos[0] === 'after' && pos[1] === 'center',\n ['acp-popover-after-below']: pos[0] === 'after' && pos[1] === 'below',\n ['acp-popover-above-before']: pos[0] === 'above' && pos[1] === 'before',\n ['acp-popover-above-center']: pos[0] === 'above' && pos[1] === 'center',\n ['acp-popover-above-after']: pos[0] === 'above' && pos[1] === 'after',\n ['acp-popover-below-before']: pos[0] === 'below' && pos[1] === 'before',\n ['acp-popover-below-center']: pos[0] === 'below' && pos[1] === 'center',\n ['acp-popover-below-after']: pos[0] === 'below' && pos[1] === 'after',\n };\n\n this._changeDetectorRef.markForCheck();\n }\n\n /**\n * Sets the popover-panel's elevation.\n * Applies Material Design elevation classes based on the base elevation level.\n */\n setElevation(): void {\n // The base elevation depends on which version of the spec\n // we're running so we have to resolve it at runtime.\n if (this._baseElevation === null) {\n const styles =\n typeof getComputedStyle === 'function'\n ? getComputedStyle(this._elementRef.nativeElement)\n : null;\n const value = styles?.getPropertyValue('--acp-popover-base-elevation-level') || '8';\n this._baseElevation = parseInt(value);\n }\n\n // The elevation starts at the base and increases by one for each level.\n // Capped at 24 because that's the maximum elevation defined in the Material design spec.\n const elevation = Math.min(this._baseElevation, 24);\n const newElevation = `${this._elevationPrefix}${elevation}`;\n const customElevation = Object.keys(this._classList).find(className => {\n return className.startsWith(this._elevationPrefix);\n });\n if (!customElevation || customElevation === this._previousElevation) {\n const newClassList = { ...this._classList };\n if (this._previousElevation) {\n newClassList[this._previousElevation] = false;\n }\n newClassList[newElevation] = true;\n this._previousElevation = newElevation;\n this._classList = newClassList;\n }\n }\n\n /**\n * Callback that is invoked when the panel animation completes.\n * @param state The animation state that completed\n */\n protected _onAnimationDone(state: string) {\n const isExit = state === EXIT_ANIMATION;\n\n if (isExit || state === ENTER_ANIMATION) {\n if (isExit) {\n clearTimeout(this._exitFallbackTimeout);\n this._exitFallbackTimeout = undefined;\n }\n this._animationDone.next(isExit ? 'void' : 'enter');\n this._isAnimating = false;\n }\n }\n\n /**\n * Callback that is invoked when the panel animation starts.\n * @param state The animation state that started\n */\n protected _onAnimationStart(state: string) {\n if (state === ENTER_ANIMATION || state === EXIT_ANIMATION) {\n this._isAnimating = true;\n }\n }\n\n /**\n * Sets the open state of the popover and manages animations.\n * @param isOpen Whether the popover should be open\n */\n _setIsOpen(isOpen: boolean) {\n this._panelAnimationState = isOpen ? 'enter' : 'void';\n\n if (isOpen) {\n //\n } else if (!this._animationsDisabled) {\n // Some apps do `* { animation: none !important; }` in tests which will prevent the\n // `animationend` event from firing. Since the exit animation is loading-bearing for\n // removing the content from the DOM, add a fallback timer.\n this._exitFallbackTimeout = setTimeout(() => this._onAnimationDone(EXIT_ANIMATION), 200);\n }\n\n // Animation events won't fire when animations are disabled so we simulate them.\n if (this._animationsDisabled) {\n setTimeout(() => {\n this._onAnimationDone(isOpen ? ENTER_ANIMATION : EXIT_ANIMATION);\n });\n }\n\n this._changeDetectorRef.markForCheck();\n }\n}\n","<ng-template>\n <!-- eslint-disable @angular-eslint/template/mouse-events-have-key-events -->\n <div\n [id]=\"panelId\"\n class=\"acp-popover-panel\"\n [class]=\"_classList\"\n [class.acp-popover-panel-animations-disabled]=\"_animationsDisabled\"\n [class.acp-popover-panel-exit-animation]=\"_panelAnimationState === 'void'\"\n [class.acp-popover-panel-animating]=\"_isAnimating\"\n [class.acp-popover-panel-without-arrow]=\"hideArrow\"\n (keydown)=\"_handleKeydown($event)\"\n (click)=\"_handleClick()\"\n (mouseover)=\"_handleMouseOver()\"\n (mouseleave)=\"_handleMouseLeave()\"\n tabindex=\"-1\"\n role=\"dialog\"\n (animationstart)=\"_onAnimationStart($event.animationName)\"\n (animationend)=\"_onAnimationDone($event.animationName)\"\n (animationcancel)=\"_onAnimationDone($event.animationName)\"\n [attr.aria-label]=\"ariaLabel || null\"\n [attr.aria-labelledby]=\"ariaLabelledby || null\"\n [attr.aria-describedby]=\"ariaDescribedby || null\"\n [cdkTrapFocus]=\"focusTrapEnabled\"\n [cdkTrapFocusAutoCapture]=\"focusTrapAutoCaptureEnabled\"\n >\n <div class=\"acp-popover-content\">\n <ng-content></ng-content>\n </div>\n @if (!hideArrow) {\n <div class=\"acp-popover-direction-arrow\" [style]=\"arrowStyles\"></div>\n }\n </div>\n</ng-template>\n","import { FocusMonitor, FocusOrigin, isFakeMousedownFromScreenReader } from '@angular/cdk/a11y';\nimport { Direction, Directionality } from '@angular/cdk/bidi';\nimport { ENTER, SPACE } from '@angular/cdk/keycodes';\nimport {\n ConnectedPosition,\n FlexibleConnectedPositionStrategy,\n HorizontalConnectionPos,\n Overlay,\n OverlayConfig,\n OverlayRef,\n ScrollStrategy,\n VerticalConnectionPos,\n} from '@angular/cdk/overlay';\nimport { TemplatePortal } from '@angular/cdk/portal';\nimport {\n AfterContentInit,\n ChangeDetectorRef,\n Directive,\n ElementRef,\n EventEmitter,\n InjectionToken,\n Input,\n OnDestroy,\n Output,\n ViewContainerRef,\n inject,\n} from '@angular/core';\nimport { merge, of as observableOf, Subscription } from 'rxjs';\nimport { filter, take } from 'rxjs/operators';\nimport { AcpPopover } from './popover';\nimport { throwAcpPopoverMissingError } from './popover-errors';\nimport { AcpPopoverPanel } from './popover-interfaces';\nimport { AcpPopoverTarget } from './popover-target';\nimport {\n AcpPopoverPosition,\n AcpPopoverPositionStart,\n AcpPopoverTriggerEvent,\n PopoverCloseReason,\n} from './popover-types';\n\n/** Injection token that determines the scroll handling while the popover is open. */\nexport const ACP_POPOVER_SCROLL_STRATEGY = new InjectionToken<() => ScrollStrategy>(\n 'acp-popover-scroll-strategy',\n {\n providedIn: 'root',\n factory: () => {\n const overlay = inject(Overlay);\n return () => overlay.scrollStrategies.reposition();\n },\n },\n);\n\n/**\n * This directive is intended to be used in conjunction with an `acp-popover` tag. It is\n * responsible for toggling the display of the provided popover instance.\n *\n * The trigger handles various events (click, hover) and manages the popover's lifecycle,\n * including opening, closing, positioning, and focus management.\n *\n * ## Basic Usage\n * @example\n * ```html\n * <acp-popover #popover=\"acpPopover\">\n * <div>Popover content</div>\n * </acp-popover>\n *\n * <button [acpPopoverTriggerFor]=\"popover\">\n * Show popover\n * </button>\n * ```\n *\n * ## Programmatic Control\n * @example\n * ```html\n * <acp-popover #popover=\"acpPopover\">\n * <div>Popover content</div>\n * </acp-popover>\n *\n * <button [acpPopoverTriggerFor]=\"popover\" #trigger=\"acpPopoverTrigger\">\n * Toggle popover\n * </button>\n *\n * <!-- Programmatic control -->\n * <button (click)=\"trigger.openPopover()\">Open</button>\n * <button (click)=\"trigger.closePopover()\">Close</button>\n * <button (click)=\"trigger.closePopoverWithReason('manual')\">Close with reason</button>\n * <button (click)=\"trigger.togglePopover()\">Toggle</button>\n * ```\n *\n * ## Custom Target\n * @example\n * ```html\n * <div acpPopoverTarget #target=\"acpPopoverTarget\">Target element</div>\n * <button [acpPopoverTriggerFor]=\"popover\" [targetElement]=\"target\">\n * Trigger (popover appears at target)\n * </button>\n * ```\n */\n@Directive({\n selector: '[acpPopoverTriggerFor]',\n exportAs: 'acpPopoverTrigger',\n standalone: true,\n host: {\n 'aria-haspopup': 'true',\n '[attr.aria-expanded]': 'popoverOpen',\n '[attr.aria-controls]': 'popoverOpen ? popover.panelId : null',\n '(click)': '_handleClick($event)',\n '(mouseenter)': '_handleMouseEnter($event)',\n '(mouseleave)': '_handleMouseLeave($event)',\n '(mousedown)': '_handleMousedown($event)',\n '(keydown)': '_handleKeydown($event)',\n },\n})\nexport class AcpPopoverTrigger implements AfterContentInit, OnDestroy {\n private _overlay = inject(Overlay);\n private _elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private _viewContainerRef = inject(ViewContainerRef);\n private _dir = inject(Directionality, { optional: true });\n private _changeDetectorRef = inject(ChangeDetectorRef);\n private _focusMonitor = inject(FocusMonitor);\n\n private _portal?: TemplatePortal;\n private _overlayRef: OverlayRef | null = null;\n private _popoverOpen = false;\n private _halt = false;\n private _positionSubscription = Subscription.EMPTY;\n private _popoverCloseSubscription = Subscription.EMPTY;\n private _pendingRemoval: Subscription | undefined;\n private _closingActionsSubscription = Subscription.EMPTY;\n private _scrollStrategy = inject(ACP_POPOVER_SCROLL_STRATEGY);\n private _mouseoverTimer: any;\n private _mouseleaveTimer: any;\n\n // Tracking input type is necessary so it's possible to only auto-focus\n // the first item of the list when the popover is opened via the keyboard\n _openedBy: Exclude<FocusOrigin, 'program' | null> | undefined = undefined;\n\n /** References the popover instance that the trigger is associated with. */\n @Input('acpPopoverTriggerFor')\n get popover() {\n return this._popover;\n }\n set popover(popover: AcpPopoverPanel) {\n if (popover === this._popover) {\n return;\n }\n\n this._popover = popover;\n this._popoverCloseSubscription.unsubscribe();\n\n if (popover) {\n this._popoverCloseSubscription = popover.closed.subscribe((reason: PopoverCloseReason) => {\n this._destroyPopover(reason);\n });\n }\n }\n private _popover!: AcpPopoverPanel;\n\n /** Data to be passed along to any lazily-rendered content. */\n @Input() popoverData: any;\n\n /** References the popover target instance that the trigger is associated with. */\n @Input() targetElement?: AcpPopoverTarget;\n\n /** Popover trigger event */\n @Input() triggerEvent?: AcpPopoverTriggerEvent;\n\n /** Event emitted when the associated popover is opened. */\n @Output() popoverOpened = new EventEmitter<void>();\n\n /** Event emitted when the associated popover is closed. */\n @Output() popoverClosed = new EventEmitter<void>();\n\n /**\n * Lifecycle hook called after content initialization.\n * Validates the popover reference and sets up initial configuration.\n */\n ngAfterContentInit() {\n this._checkPopover();\n this._setCurrentConfig();\n }\n\n /**\n * Lifecycle hook called when the component is destroyed.\n * Cleans up subscriptions and overlay references.\n */\n ngOnDestroy() {\n this._halt = true;\n this._positionSubscription.unsubscribe();\n this._pendingRemoval?.unsubscribe();\n this._popoverCloseSubscription.unsubscribe();\n this._closingActionsSubscription.unsubscribe();\n\n if (this._mouseoverTimer) {\n clearTimeout(this._mouseoverTimer);\n this._mouseoverTimer = null;\n }\n\n if (this._mouseleaveTimer) {\n clearTimeout(this._mouseleaveTimer);\n this._mouseleaveTimer = null;\n }\n\n if (this._overlayRef) {\n this._overlayRef.dispose();\n this._overlayRef = null;\n }\n }\n\n /**\n * Sets the current configuration for the popover.\n * Updates trigger event and applies current styles.\n */\n private _setCurrentConfig() {\n if (this.triggerEvent) {\n this.popover.triggerEvent = this.triggerEvent;\n }\n\n this.popover.setCurrentStyles();\n }\n\n /** Whether the popover is open. */\n get popoverOpen(): boolean {\n return this._popoverOpen;\n }\n\n /** The text direction of the containing app. */\n get dir(): Direction {\n return this._dir && this._dir.value === 'rtl' ? 'rtl' : 'ltr';\n }\n\n /**\n * Handles mouse click on the trigger.\n * @param _event The mouse event\n */\n _handleClick(_event: MouseEvent): void {\n if (this.popover.triggerEvent === 'click') {\n this.togglePopover();\n }\n }\n\n /**\n * Handles mouse enter on the trigger.\n * @param _event The mouse event\n */\n _handleMouseEnter(_event: MouseEvent): void {\n this._halt = false;\n\n if (this.popover.triggerEvent === 'hover') {\n this._mouseoverTimer = setTimeout(() => {\n this.openPopover();\n }, this.popover.enterDelay);\n }\n }\n\n /**\n * Handles mouse leave on the trigger.\n * @param _event The mouse event\n */\n _handleMouseLeave(_event: MouseEvent): void {\n if (this.popover.triggerEvent === 'hover') {\n if (this._mouseoverTimer) {\n clearTimeout(this._mouseoverTimer);\n this._mouseoverTimer = null;\n }\n\n if (this._popoverOpen) {\n this._mouseleaveTimer = setTimeout(() => {\n if (!this.popover.closeDisabled) {\n this.closePopover();\n }\n }, this.popover.leaveDelay);\n } else {\n this._halt = true;\n }\n }\n }\n\n /** Handles mouse presses on the trigger. */\n _handleMousedown(event: MouseEvent): void {\n if (!isFakeMousedownFromScreenReader(event)) {\n // Since right or middle button clicks won't trigger the `click` event,\n // we shouldn't consider the popover as opened by mouse in those cases.\n this._openedBy = event.button === 0 ? 'mouse' : undefined;\n }\n }\n\n /** Handles key presses on the trigger. */\n _handleKeydown(event: KeyboardEvent): void {\n const keyCode = event.keyCode;\n\n // Pressing enter on the trigger will trigger the click handler later.\n if (keyCode === ENTER || keyCode === SPACE) {\n this._openedBy = 'keyboard';\n }\n }\n\n /** Toggles the popover between the open and closed states. */\n togglePopover(): void {\n return this._popoverOpen ? this.closePopover() : this.openPopover();\n }\n\n /** Opens the popover. */\n openPopover(): void {\n if (this._popoverOpen || this._halt) {\n return;\n }\n\n this._checkPopover();\n\n this._pendingRemoval?.unsubscribe();\n\n const overlayRef = this._createOverlay();\n const overlayConfig = overlayRef.getConfig();\n\n this._setPosition(overlayConfig.positionStrategy as FlexibleConnectedPositionStrategy);\n if (this.popover.triggerEvent === 'click') {\n overlayConfig.hasBackdrop = this.popover.hasBackdrop ?? true;\n }\n overlayRef.attach(this._getPortal());\n\n if (this.popover.lazyContent) {\n this.popover.lazyContent.attach(this.popoverData);\n }\n\n this._closingActionsSubscription = this._popoverClosingActions().subscribe(() =>\n this.closePopover(),\n );\n this._initPopover();\n\n if (this.popover instanceof AcpPopover) {\n this.popover._setIsOpen(true);\n }\n }\n\n /** Closes the popover. */\n closePopover(): void {\n this.popover.closed.emit();\n }\n\n /**\n * Programmatically closes the popover with a specific reason.\n * @param reason The reason for closing\n */\n closePopoverWithReason(reason: PopoverCloseReason): void {\n this.popover.closed.emit(reason);\n }\n\n /**\n * Focuses the popover trigger.\n * @param origin Source of the popover trigger's focus.\n */\n focus(origin?: FocusOrigin, options?: FocusOptions) {\n if (this._focusMonitor && origin) {\n this._focusMonitor.focusVia(this._elementRef, origin, options);\n } else {\n this._elementRef.nativeElement.focus(options);\n }\n }\n\n /** Removes the popover from the DOM. */\n private _destroyPopover(_reason: PopoverCloseReason) {\n const overlayRef = this._overlayRef;\n\n if (!overlayRef || !this.popoverOpen) {\n return;\n }\n\n // Clear the timeouts for hover events.\n if (this._mouseoverTimer) {\n clearTimeout(this._mouseoverTimer);\n this._mouseoverTimer = null;\n }\n\n if (this._mouseleaveTimer) {\n clearTimeout(this._mouseleaveTimer);\n this._mouseleaveTimer = null;\n }\n\n const popover = this.popover;\n this._closingActionsSubscription.unsubscribe();\n this._pendingRemoval?.unsubscribe();\n\n overlayRef.detach();\n\n // Note that we don't wait for the animation to finish if another trigger took\n // over the popover, because the panel will end up empty which looks glitchy.\n if (popover instanceof AcpPopover) {\n // Wait for the exit animation to finish before detaching the content.\n this._pendingRemoval = popover._animationDone\n .pipe(\n filter(event => event === 'void'),\n take(1),\n )\n .subscribe(() => {\n popover.lazyContent?.detach();\n });\n } else {\n popover.lazyContent?.detach();\n }\n\n this._openedBy = undefined;\n this._setIsPopoverOpen(false);\n }\n\n /**\n * This method sets the popover state to open.\n */\n private _initPopover(): void {\n this.popover.direction = this.dir;\n this.popover.setElevation();\n this._setIsPopoverOpen(true);\n }\n\n // set state rather than toggle to support triggers sharing a popover\n private _setIsPopoverOpen(isOpen: boolean): void {\n if (isOpen !== this._popoverOpen) {\n this._popoverOpen = isOpen;\n if (this._popoverOpen) {\n this.popoverOpened.emit();\n } else {\n this.popoverClosed.emit();\n }\n\n this._changeDetectorRef.markForCheck();\n }\n }\n\n /**\n * This method checks that a valid instance of AcpPopover has been passed into\n * `acpPopoverTriggerFor`. If not, an exception is thrown.\n */\n private _checkPopover() {\n if (!this.popover) {\n throwAcpPopoverMissingError();\n }\n }\n\n /**\n * This method creates the overlay from the provided popover's template and saves its\n * OverlayRef so that it can be attached to the DOM when openPopover is called.\n */\n private _createOverlay(): OverlayRef {\n if (!this._overlayRef) {\n const config = this._getOverlayConfig();\n this._subscribeToPositions(config.positionStrategy as FlexibleConnectedPositionStrategy);\n this._overlayRef = this._overlay.create(config);\n } else {\n const overlayConfig = this._overlayRef.getConfig();\n const positionStrategy = overlayConfig.positionStrategy as FlexibleConnectedPositionStrategy;\n positionStrategy.setOrigin(this._getTargetElement());\n }\n\n return this._overlayRef;\n }\n\n /**\n * This method builds the configuration object needed to create the overlay, the OverlayConfig.\n * @returns OverlayConfig\n */\n private _getOverlayConfig(): OverlayConfig {\n return new OverlayConfig({\n positionStrategy: this._overlay\n .position()\n .flexibleConnectedTo(this._getTargetElement())\n .withLockedPosition()\n .withGrowAfterOpen()\n .withTransformOriginOn('.acp-popover-panel'),\n backdropClass: this.popover.backdropClass || 'cdk-overlay-transparent-backdrop',\n panelClass: this.popover.overlayPanelClass,\n scrollStrategy: this._scrollStrategy(),\n direction: this._dir || undefined,\n });\n }\n\n private _getTargetElement(): ElementRef<HTMLElement> {\n if (this.targetElement) {\n return this.targetElement.elementRef;\n }\n\n return this._elementRef;\n }\n\n /**\n * Listens to changes in the position of the overlay and sets the correct classes\n * on the popover based on the new position. This ensures the animation origin is always\n * correct, even if a fallback position is used for the overlay.\n */\n private _subscribeToPositions(position: FlexibleConnectedPositionStrategy): void {\n this._positionSubscription = position.positionChanges.subscribe(change => {\n const posX =\n change.connectionPair.overlayX === 'start'\n ? 'after'\n : change.connectionPair.overlayX === 'end'\n ? 'before'\n : 'center';\n const posY =\n change.connectionPair.overlayY === 'top'\n ? 'below'\n : change.connectionPair.overlayY === 'bottom'\n ? 'above'\n : 'center';\n\n const pos: AcpPopoverPosition =\n this.popover.position[0] === 'above' || this.popover.position[0] === 'below'\n ? [posY as AcpPopoverPositionStart, posX]\n : [posX as AcpPopoverPositionStart, posY];\n\n // required for ChangeDetectionStrategy.OnPush\n this._changeDetectorRef.markForCheck();\n\n this.popover.setCurrentStyles(pos);\n this.popover.setPositionClasses(pos);\n });\n }\n\n /**\n * Sets the appropriate positions on a position strategy\n * so the overlay connects with the trigger correctly.\n * @param positionStrategy Strategy whose position to update.\n */\n private _setPosition(positionStrategy: FlexibleConnectedPositionStrategy) {\n const [originX, origin2ndX, origin3rdX]: HorizontalConnectionPos[] =\n this.popover.position[0] === 'before' || this.popover.position[1] === 'after'\n ? ['start', 'center', 'end']\n : this.popover.position[0] === 'after' || this.popover.position[1] === 'before'\n ? ['end', 'center', 'start']\n : ['center', 'start', 'end'];\n\n const [originY, origin2ndY, origin3rdY]: VerticalConnectionPos[] =\n this.popover.position[0] === 'above' || this.popover.position[1] === 'below'\n ? ['top', 'center', 'bottom']\n : this.popover.position[0] === 'below' || this.popover.position[1] === 'above'\n ? ['bottom', 'center', 'top']\n : ['center', 'top', 'bottom'];\n\n const [overlayX, overlayFallbackX]: HorizontalConnectionPos[] =\n this.popover.position[0] === 'below' || this.popover.position[0] === 'above'\n ? [originX, originX]\n : this.popover.position[0] === 'before'\n ? ['end', 'start']\n : ['start', 'end'];\n\n const [overlayY, overlayFallbackY]: VerticalConnectionPos[] =\n this.popover.position[0] === 'before' || this.popover.position[0] === 'after'\n ? [originY, originY]\n : this.popover.position[0] === 'below'\n ? ['top', 'bottom']\n : ['bottom', 'top'];\n\n const originFallbackX = overlayX;\n const originFallbackY = overlayY;\n\n const offsetX =\n this.popover.xOffset && !isNaN(Number(this.popover.xOffset))\n ? Number(this.dir === 'ltr' ? this.popover.xOffset : -this.popover.xOffset)\n : 0;\n const offsetY =\n this.popover.yOffset && !isNaN(Number(this.popover.yOffset))\n ? Number(this.popover.yOffset)\n : 0;\n\n let positions: ConnectedPosition[] = [{ originX, originY, overlayX, overlayY }];\n\n if (this.popover.position[0] === 'above' || this.popover.position[0] === 'below') {\n positions = [\n { originX, originY, overlayX, overlayY, offsetY },\n { originX: origin2ndX, originY, overlayX: origin2ndX, overlayY, offsetY },\n { originX: origin3rdX, originY, overlayX: origin3rdX, overlayY, offsetY },\n {\n originX,\n originY: originFallbackY,\n overlayX,\n overlayY: overlayFallbackY,\n offsetY: -offsetY,\n },\n {\n originX: origin2ndX,\n originY: originFallbackY,\n overlayX: origin2ndX,\n overlayY: overlayFallbackY,\n offsetY: -offsetY,\n },\n {\n originX: origin3rdX,\n originY: originFallbackY,\n overlayX: origin3rdX,\n overlayY: overlayFallbackY,\n offsetY: -offsetY,\n },\n ];\n }\n\n if (this.popover.position[0] === 'before' || this.popover.position[0] === 'after') {\n positions = [\n { originX, originY, overlayX, overlayY, offsetX },\n { originX, originY: origin2ndY, overlayX, overlayY: origin2ndY, offsetX },\n { originX, originY: origin3rdY, overlayX, overlayY: origin3rdY, offsetX },\n {\n originX: originFallbackX,\n originY,\n overlayX: overlayFallbackX,\n overlayY,\n offsetX: -offsetX,\n },\n {\n originX: originFallbackX,\n originY: origin2ndY,\n overlayX: overlayFallbackX,\n overlayY: origin2ndY,\n offsetX: -offsetX,\n },\n {\n originX: originFallbackX,\n originY: origin3rdY,\n overlayX: overlayFallbackX,\n overlayY: origin3rdY,\n offsetX: -offsetX,\n },\n ];\n }\n\n positionStrategy\n .withPositions(positions)\n .withDefaultOffsetX(offsetX)\n .withDefaultOffsetY(offsetY);\n }\n\n /** Returns a stream that emits whenever an action that should close the popover occurs. */\n private _popoverClosingActions() {\n const backdrop =\n this.popover.triggerEvent === 'click' && this.popover.closeOnBackdropClick === true\n ? this._overlayRef!.backdropClick()\n : observableOf();\n const detachments = this._overlayRef!.detachments();\n return merge(backdrop, detachments);\n }\n\n /** Gets the portal that should be attached to the overlay. */\n private _getPortal(): TemplatePortal {\n // Note that we can avoid this check by keeping the portal on the popover panel.\n // While it would be cleaner, we'd have to introduce another required method on\n // `AcpPopoverPanel`, making it harder to consume.\n if (!this._portal || this._portal.templateRef !== this.popover.templateRef) {\n this._portal = new TemplatePortal(this.popover.templateRef, this._viewContainerRef);\n }\n\n return this._portal;\n }\n}\n","import { Directive, ElementRef, inject } from '@angular/core';\n\n/**\n * Directive that marks an element as a popover target.\n *\n * This directive provides a reference to an element that can be used\n * as the target for popover positioning. It's useful when you want\n * the popover to appear relative to a different element than the trigger.\n *\n * @example\n * ```html\n * <div acpPopoverTarget #target=\"acpPopoverTarget\">Target element</div>\n * <button [acpPopoverTriggerFor]=\"popover\" [acpPopoverTargetAt]=\"target\">\n * Trigger\n * </button>\n * ```\n */\n@Directive({\n selector: 'acp-popover-target, [acpPopoverTarget]',\n exportAs: 'acpPopoverTarget',\n standalone: true,\n})\nexport class AcpPopoverTarget {\n /** Reference to the target element. */\n elementRef = inject(ElementRef);\n}\n","import {\n Component,\n OnInit,\n OnDestroy,\n ViewChild,\n ElementRef,\n ViewContainerRef,\n ComponentRef,\n ChangeDetectionStrategy,\n createComponent,\n EnvironmentInjector,\n inject,\n Renderer2,\n ChangeDetectorRef,\n} from '@angular/core';\nimport { MAT_DIALOG_DATA, MatDialogRef, MatDialogModule } from '@angular/material/dialog';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatProgressBarModule } from '@angular/material/progress-bar';\nimport { DragDropModule } from '@angular/cdk/drag-drop';\nimport { FormsModule } from '@angular/forms';\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\nimport { AlertDialogOptions } from '../../services';\nimport { NgClass } from '@angular/common';\nimport { Button } from '../button/button';\nimport { ButtonVariant, MaterialButtonStyle } from '@acontplus/ui-kit';\nimport { DialogZIndexService } from '../../services/dialog/dialog-z-index.service';\n\ntype ButtonType = 'confirm' | 'cancel' | 'deny';\n\n@Component({\n selector: 'acp-alert-dialog',\n standalone: true,\n imports: [\n FormsModule,\n MatDialogModule,\n MatButtonModule,\n MatIconModule,\n MatInputModule,\n MatFormFieldModule,\n MatProgressBarModule,\n DragDropModule,\n NgClass,\n Button,\n ],\n templateUrl: 'alert-dialog.html',\n changeDetection: ChangeDetectionStrategy.Default,\n styles: [\n `\n .alert-dialog {\n position: relative;\n overflow: hidden;\n padding: 0;\n display: flex;\n flex-direction: column;\n border-radius: 16px;\n }\n\n /* ===== ALERT HEADER ===== */\n .acp-alert-header {\n display: flex;\n align-items: flex-start;\n justify-content: space-between;\n padding: 24px 24px 0 24px;\n position: relative;\n }\n\n .acp-alert-header .alert-dialog-icon {\n margin: 0;\n flex-shrink: 0;\n margin-top: 4px; /* Alinear con el texto del título */\n }\n\n /* ===== TITLE ===== */\n .alert-dialog-title {\n margin: 0 0 12px 0;\n font-size: 20px;\n font-weight: 600;\n line-height: 1.2;\n color: #1a1a1a;\n text-align: left;\n }\n\n /* ===== CONTENT ===== */\n .alert-dialog-content {\n /* Sin padding/margin - mat-dialog-content ya los maneja */\n text-align: left;\n\n .alert-message {\n margin: 0;\n font-size: 16px;\n line-height: 1.4;\n color: #666;\n }\n }\n\n /* ===== ACTIONS ===== */\n .alert-dialog-actions {\n margin: 24px 24px 24px 24px;\n padding: 0;\n gap: 12px;\n }\n\n /* ===== CLOSE BUTTON ===== */\n .close-button {\n position: relative;\n z-index: 10;\n width: 40px;\n height: 40px;\n margin: 0;\n background-color: rgba(0, 0, 0, 0.05);\n border-radius: 50%;\n\n mat-icon {\n font-size: 20px;\n width: 20px;\n height: 20px;\n color: rgba(0, 0, 0, 0.6);\n }\n\n &:hover {\n background-color: rgba(0, 0, 0, 0.1);\n }\n }\n\n /* ===== LAYOUTS ===== */\n\n /* Modern Layout - Icon a la izquierda */\n .alert-dialog.modern-layout {\n .acp-alert-header {\n padding: 24px 24px 0 24px;\n\n .alert-dialog-icon {\n margin-right: 16px;\n\n .icon-large {\n font-size: 48px;\n width: 48px;\n height: 48px;\n }\n }\n }\n }\n\n /* Toast Layout */\n .alert-dialog.toast-layout {\n border-radius: 8px;\n\n .acp-alert-header {\n padding: 16px;\n align-items: center;\n gap: 12px;\n\n .alert-dialog-icon {\n margin: 0;\n flex-shrink: 0;\n\n .icon-large {\n font-size: 24px;\n width: 24px;\n height: 24px;\n }\n }\n\n .toast-content {\n flex: 1;\n display: flex;\n flex-direction: column;\n gap: 2px;\n min-width: 0; /* Permite que el texto se trunque si es necesario */\n\n .toast-title {\n font-size: 14px;\n font-weight: 600;\n line-height: 1.2;\n color: #1a1a1a;\n margin: 0;\n }\n\n .toast-message {\n font-size: 13px;\n line-height: 1.3;\n color: #666;\n margin: 0;\n }\n }\n\n .close-button {\n margin: 0;\n flex-shrink: 0;\n }\n }\n\n /* Ocultar contenido normal en modo toast */\n .alert-dialog-content,\n .alert-dialog-actions {\n display: none;\n }\n }\n\n /* ===== ICON POSITIONS ===== */\n .alert-dialog.icon-center {\n .acp-alert-header {\n flex-direction: column;\n text-align: center;\n align-items: center;\n padding: 24px 24px 16px 24px;\n\n .alert-dialog-icon {\n margin: 0 0 16px 0;\n }\n\n .close-button {\n position: absolute;\n top: 16px;\n right: 16px;\n }\n }\n\n .alert-dialog-title,\n .alert-dialog-content {\n text-align: center;\n }\n }\n\n .alert-dialog.icon-top {\n .acp-alert-header {\n flex-direction: column;\n align-items: flex-start;\n padding: 24px 24px 16px 24px;\n\n .alert-dialog-icon {\n margin: 0 0 16px 0;\n }\n\n .close-button {\n position: absolute;\n top: 16px;\n right: 16px;\n }\n }\n }\n\n /* ===== CONTENT ALIGNMENT ===== */\n .alert-dialog.content-left {\n .alert-dialog-title,\n .alert-dialog-content {\n text-align: left;\n }\n }\n\n .alert-dialog.content-center {\n .acp-alert-header {\n justify-content: center;\n }\n\n .alert-dialog-title,\n .alert-dialog-content {\n text-align: center;\n }\n }\n\n .alert-dialog.content-right {\n .alert-dialog-title,\n .alert-dialog-content {\n text-align: right;\n }\n }\n\n /* ===== TIMER PROGRESS ===== */\n .timer-progress {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n height: 4px;\n z-index: 5;\n border-radius: 0;\n }\n\n .timer-progress.toast-progress {\n height: 3px;\n border-radius: 0;\n }\n\n /* Asegurar que la barra de progreso sea visible */\n :host ::ng-deep .timer-progress .mdc-linear-progress__bar {\n transition: transform 50ms linear;\n }\n\n :host ::ng-deep .timer-progress .mdc-linear-progress__buffer {\n background-color: rgba(0, 0, 0, 0.1);\n }\n\n /* ===== ICON COLORS ===== */\n .icon-success mat-icon {\n color: #10b981;\n }\n\n .icon-error mat-icon {\n color: #ef4444;\n }\n\n .icon-warning mat-icon {\n color: #f59e0b;\n }\n\n .icon-info mat-icon {\n color: #3b82f6;\n }\n\n .icon-question mat-icon {\n color: #8b5cf6;\n }\n\n .icon-delete mat-icon {\n color: #ef4444;\n }\n\n /* ===== LEGACY STYLES ===== */\n .alert-dialog-image {\n margin: 1rem auto;\n display: flex;\n justify-content: center;\n align-items: center;\n }\n\n .alert-dialog-image img {\n max-width: 100%;\n border-radius: 8px;\n }\n\n .alert-input-field {\n width: 100%;\n margin-top: 1rem;\n }\n\n .confirm-button,\n .cancel-button,\n .deny-button {\n min-width: 100px;\n }\n\n .cancel-button {\n color: #333;\n }\n\n .alert-dialog-footer {\n margin: 0 24px 24px 24px;\n padding-top: 1rem;\n border-top: 1px solid #e0e0e0;\n font-size: 0.875rem;\n color: #666;\n }\n\n /* ===== CDK DRAG STYLES ===== */\n .acp-alert-header[cdkDrag] {\n cursor: move;\n user-select: none;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n }\n\n .acp-alert-header[cdkDrag]:hover {\n background-color: rgba(0, 0, 0, 0.02);\n }\n\n /* Prevent text selection during drag */\n .cdk-drag-dragging {\n user-select: none !important;\n -webkit-user-select: none !important;\n -moz-user-select: none !important;\n -ms-user-select: none !important;\n }\n\n /* ===== ANIMATIONS ===== */\n :host ::ng-deep .animation-fade .mat-mdc-dialog-container {\n animation: fadeIn 0.3s ease-out;\n }\n\n :host ::ng-deep .animation-slide .mat-mdc-dialog-container {\n animation: slideIn 0.3s ease-out;\n }\n\n :host ::ng-deep .animation-bounce .mat-mdc-dialog-container {\n animation: bounceIn 0.5s ease-out;\n }\n\n :host ::ng-deep .animation-zoom .mat-mdc-dialog-container {\n animation: zoomIn 0.3s ease-out;\n }\n\n /* ===== TOAST MODE STYLES ===== */\n :host ::ng-deep .toast-mode .mat-mdc-dialog-container {\n border-radius: 8px;\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);\n max-width: 400px;\n animation: slideInRight 0.3s ease-out;\n }\n\n :host ::ng-deep .layout-toast .mat-mdc-dialog-container {\n border-radius: 8px;\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);\n max-width: 400px;\n }\n\n /* ===== KEYFRAMES ===== */\n @keyframes fadeIn {\n from {\n opacity: 0;\n }\n to {\n opacity: 1;\n }\n }\n\n @keyframes slideIn {\n from {\n transform: translateY(-20px);\n opacity: 0;\n }\n to {\n transform: translateY(0);\n opacity: 1;\n }\n }\n\n @keyframes slideInRight {\n from {\n transform: translateX(100%);\n opacity: 0;\n }\n to {\n transform: translateX(0);\n opacity: 1;\n }\n }\n\n @keyframes bounceIn {\n 0% {\n transform: scale(0.3);\n opacity: 0;\n }\n 50% {\n transform: scale(1.05);\n }\n 70% {\n transform: scale(0.9);\n }\n 100% {\n transform: scale(1);\n opacity: 1;\n }\n }\n\n @keyframes zoomIn {\n from {\n transform: scale(0.8);\n opacity: 0;\n }\n to {\n transform: scale(1);\n opacity: 1;\n }\n }\n `,\n ],\n})\nexport class AlertDialog implements OnInit, OnDestroy {\n @ViewChild('inputField') inputField?: ElementRef<HTMLInputElement | HTMLTextAreaElement>;\n @ViewChild('dialogTitle') dialogTitle?: ElementRef<HTMLElement>;\n @ViewChild('dynamicComponentContainer', { read: ViewContainerRef, static: true })\n private container!: ViewContainerRef;\n\n private componentRef: ComponentRef<any> | null = null;\n private timerInterval: any;\n\n inputValue = '';\n validationError: string | null = null;\n timerProgress = 100;\n sanitizedHtml: SafeHtml;\n sanitizedFooter: SafeHtml | null = null;\n public dialogRef = inject(MatDialogRef<AlertDialog>);\n public data = inject<AlertDialogOptions>(MAT_DIALOG_DATA);\n private sanitizer = inject(DomSanitizer);\n private renderer = inject(Renderer2);\n private elementRef = inject(ElementRef);\n private cdr = inject(ChangeDetectorRef);\n private zIndexService = inject(DialogZIndexService);\n\n constructor() {\n this.sanitizedHtml = this.sanitizer.bypassSecurityTrustHtml(this.data.html || '');\n }\n\n ngOnDestroy(): void {\n if (this.timerInterval) {\n clearInterval(this.timerInterval);\n }\n\n if (this.componentRef) {\n this.componentRef.destroy();\n }\n }\n\n // Start the timer for auto-closing the dialog\n private startTimer(): void {\n if (!this.data.timer) return;\n\n console.log('Starting timer with duration:', this.data.timer);\n const startTime = Date.now();\n const endTime = startTime + this.data.timer;\n this.timerProgress = 100;\n\n this.timerInterval = setInterval(() => {\n const now = Date.now();\n const remaining = endTime - now;\n\n if (remaining <= 0) {\n clearInterval(this.timerInterval);\n this.timerProgress = 0;\n this.cdr.detectChanges();\n console.log('Timer finished, closing dialog');\n this.dialogRef.close({\n isConfirmed: false,\n isDismissed: true,\n isDenied: false,\n dismiss: 'timer',\n });\n return;\n }\n\n const newProgress = (remaining / this.data.timer!) * 100;\n if (Math.abs(this.timerProgress - newProgress) > 0.5) {\n this.timerProgress = newProgress;\n this.cdr.detectChanges();\n }\n }, 50);\n }\n\n // Load dynamic component\n private loadComponent(): void {\n if (!this.data.component) return;\n\n this.container.clear();\n\n // Create the component using the view container's injector\n this.componentRef = createComponent(this.data.component, {\n environmentInjector: this.container.injector.get(EnvironmentInjector),\n });\n\n // Pass input properties to the dynamic component\n if (this.data.componentProps) {\n Object.keys(this.data.componentProps).forEach(key => {\n (this.componentRef!.instance as any)[key] = this.data.componentProps![key];\n });\n }\n\n // Attach the view\n this.container.insert(this.componentRef.hostView);\n }\n\n ngOnInit(): void {\n if (this.data.component) {\n this.loadComponent();\n }\n\n if (this.data.footerHtml) {\n this.sanitizedFooter = this.sanitizer.bypassSecurityTrustHtml(this.data.footerHtml);\n }\n\n // Inicializar timer después de que el componente esté listo\n if (this.data.timer) {\n // Usar setTimeout para asegurar que el componente esté completamente inicializado\n setTimeout(() => {\n this.startTimer();\n }, 100);\n }\n }\n\n getIconName(): string {\n if (this.data.icon) {\n return this.data.icon;\n }\n\n switch (this.data.type) {\n case 'success':\n return 'check_circle';\n case 'error':\n return 'error';\n case 'warning':\n return 'warning';\n case 'info':\n return 'info';\n case 'question':\n return 'help';\n case 'delete':\n return 'delete_forever';\n default:\n return '';\n }\n }\n\n onClose(): void {\n this.dialogRef.close({\n isConfirmed: false,\n isDismissed: true,\n isDenied: false,\n dismiss: 'close',\n });\n }\n\n getButtonVariant(buttonType: ButtonType): ButtonVariant {\n const variant = (this.data as any)[`${buttonType}ButtonVariant`] as ButtonVariant | undefined;\n if (variant) return variant;\n\n // Default variants based on button type and alert type\n if (buttonType === 'confirm') {\n switch (this.data.type) {\n case 'success':\n return 'success';\n case 'error':\n return 'danger';\n case 'warning':\n return 'warning';\n case 'info':\n return 'info';\n case 'question':\n return 'primary';\n case 'delete':\n return 'danger';\n default:\n return 'primary';\n }\n } else if (buttonType === 'cancel') {\n return 'secondary';\n } else if (buttonType === 'deny') {\n return 'danger';\n }\n\n return 'primary';\n }\n\n getButtonIcon(buttonType: ButtonType): string {\n const icon = (this.data as any)[`${buttonType}ButtonIcon`] as string | undefined;\n if (icon) return icon;\n\n // Default icons based on button type\n switch (buttonType) {\n case 'confirm':\n return this.data.type === 'question' ? 'check' : '';\n case 'cancel':\n return 'close';\n case 'deny':\n return 'block';\n default:\n return '';\n }\n }\n\n getButtonStyle(buttonType: ButtonType): MaterialButtonStyle {\n const style = (this.data as any)[`${buttonType}ButtonStyle`] as MaterialButtonStyle | undefined;\n return style || 'elevated';\n }\n\n getActionsAlignment(): 'start' | 'center' | 'end' {\n switch (this.data.contentAlignment) {\n case 'left':\n return 'start';\n case 'center':\n return 'center';\n case 'right':\n return 'end';\n default:\n return 'end'; // Default alignment\n }\n }\n\n async onConfirm(): Promise<void> {\n if (this.data.input && this.data.inputValidator) {\n const error = await Promise.resolve(this.data.inputValidator(this.inputValue));\n if (error) {\n this.validationError = error;\n return;\n }\n }\n\n if (this.data.preConfirm) {\n try {\n const result = await Promise.resolve(this.data.preConfirm(this.inputValue || undefined));\n this.dialogRef.close({\n isConfirmed: true,\n isDismissed: false,\n isDenied: false,\n value: result,\n });\n } catch (error) {\n console.error('Error in preConfirm:', error);\n }\n } else {\n this.dialogRef.close({\n isConfirmed: true,\n isDismissed: false,\n isDenied: false,\n value: this.inputValue || undefined,\n });\n }\n }\n\n onCancel(): void {\n this.dialogRef.close({\n isConfirmed: false,\n isDismissed: true,\n isDenied: false,\n dismiss: 'cancel',\n });\n }\n\n onDeny(): void {\n if (this.data.preDeny) {\n try {\n const result = this.data.preDeny(this.inputValue || undefined);\n if (result instanceof Promise) {\n result\n .then(() => {\n this.dialogRef.close({\n isConfirmed: false,\n isDismissed: false,\n isDenied: true,\n value: this.inputValue || undefined,\n });\n })\n .catch(error => {\n this.validationError = error instanceof Error ? error.message : String(error);\n });\n } else {\n this.dialogRef.close({\n isConfirmed: false,\n isDismissed: false,\n isDenied: true,\n value: this.inputValue || undefined,\n });\n }\n } catch (error) {\n this.validationError = error instanceof Error ? error.message : String(error);\n }\n } else {\n this.dialogRef.close({\n isConfirmed: false,\n isDismissed: false,\n isDenied: true,\n value: this.inputValue || undefined,\n });\n }\n }\n\n onInputEnter(): void {\n if (this.data.allowEnterKey !== false && this.data.input !== 'textarea') {\n this.onConfirm();\n }\n }\n\n getConfirmColor(): any {\n if (!this.data.confirmButtonColor) return 'primary';\n if (['primary', 'accent', 'warn'].includes(this.data.confirmButtonColor)) {\n return this.data.confirmButtonColor;\n }\n return undefined;\n }\n\n getCancelColor(): any {\n if (!this.data.cancelButtonColor) return undefined;\n if (['primary', 'accent', 'warn'].includes(this.data.cancelButtonColor)) {\n return this.data.cancelButtonColor;\n }\n return undefined;\n }\n\n getDenyColor(): any {\n if (!this.data.denyButtonColor) return undefined;\n if (['primary', 'accent', 'warn'].includes(this.data.denyButtonColor)) {\n return this.data.denyButtonColor;\n }\n return undefined;\n }\n\n getConfirmBackgroundColor(): string | undefined {\n if (!this.data.confirmButtonColor) return undefined;\n if (['primary', 'accent', 'warn'].includes(this.data.confirmButtonColor)) {\n return undefined;\n }\n return this.data.confirmButtonColor;\n }\n\n getCancelBackgroundColor(): string | undefined {\n if (!this.data.cancelButtonColor) return undefined;\n if (['primary', 'accent', 'warn'].includes(this.data.cancelButtonColor)) {\n return undefined;\n }\n return this.data.cancelButtonColor;\n }\n\n getDenyBackgroundColor(): string | undefined {\n if (!this.data.denyButtonColor) return undefined;\n if (['primary', 'accent', 'warn'].includes(this.data.denyButtonColor)) {\n return undefined;\n }\n return this.data.denyButtonColor;\n }\n\n // ===== CDK DRAG FUNCTIONALITY =====\n\n /**\n * Brings the dialog to the front by adjusting its z-index.\n * Uses the centralized DialogZIndexService for consistent z-index management.\n * Called when the dialog header is clicked.\n */\n bringToFront(): void {\n this.zIndexService.bringToFront(this.elementRef.nativeElement);\n }\n}\n","<div\n class=\"alert-dialog\"\n [class.modern-layout]=\"data.layout === 'modern'\"\n [class.toast-layout]=\"data.layout === 'toast' || data.toastMode\"\n [class.icon-left]=\"data.iconPosition === 'left'\"\n [class.icon-center]=\"data.iconPosition === 'center'\"\n [class.icon-top]=\"data.iconPosition === 'top'\"\n [class.content-left]=\"data.contentAlignment === 'left'\"\n [class.content-center]=\"data.contentAlignment === 'center'\"\n [class.content-right]=\"data.contentAlignment === 'right'\"\n [attr.aria-label]=\"data.ariaLabel\"\n [attr.aria-describedby]=\"data.ariaDescribedBy\"\n>\n <!-- Timer Progress Bar -->\n @if (data.timer && (data.timerProgressBar || data.progressBar || data.toastMode)) {\n <mat-progress-bar\n mode=\"determinate\"\n [value]=\"timerProgress\"\n class=\"timer-progress\"\n [class.toast-progress]=\"data.toastMode\"\n >\n </mat-progress-bar>\n }\n\n <!-- Alert Header -->\n @if (data.draggable) {\n <div\n class=\"acp-alert-header\"\n cdkDrag\n cdkDragRootElement=\".cdk-overlay-pane\"\n cdkDragHandle\n (mousedown)=\"bringToFront()\"\n >\n <!-- Icon -->\n @if (data.type || data.icon) {\n <div class=\"alert-dialog-icon\" [ngClass]=\"'icon-' + (data.type || 'custom')\">\n <mat-icon class=\"icon-large\" [style.color]=\"data.iconColor\"> {{ getIconName() }} </mat-icon>\n </div>\n }\n\n <!-- Toast Content (solo para modo toast) -->\n @if (data.toastMode || data.layout === 'toast') {\n <!-- Title y Message en línea para toast -->\n <div class=\"toast-content\">\n @if (data.title) {\n <span class=\"toast-title\" #dialogTitle>{{ data.title }}</span>\n } @if (data.message) {\n <span class=\"toast-message\">{{ data.message }}</span>\n }\n </div>\n }\n\n <!-- Close Button -->\n @if (data.showCloseButton) {\n <button\n mat-icon-button\n class=\"close-button\"\n [class.top-right]=\"data.closeButtonPosition === 'top-right'\"\n [class.top-left]=\"data.closeButtonPosition === 'top-left'\"\n (click)=\"onClose()\"\n aria-label=\"Cerrar\"\n >\n <mat-icon>close</mat-icon>\n </button>\n }\n </div>\n } @else {\n <div class=\"acp-alert-header\">\n <!-- Icon -->\n @if (data.type || data.icon) {\n <div class=\"alert-dialog-icon\" [ngClass]=\"'icon-' + (data.type || 'custom')\">\n <mat-icon class=\"icon-large\" [style.color]=\"data.iconColor\"> {{ getIconName() }} </mat-icon>\n </div>\n }\n\n <!-- Toast Content (solo para modo toast) -->\n @if (data.toastMode || data.layout === 'toast') {\n <!-- Title y Message en línea para toast -->\n <div class=\"toast-content\">\n @if (data.title) {\n <span class=\"toast-title\" #dialogTitle>{{ data.title }}</span>\n } @if (data.message) {\n <span class=\"toast-message\">{{ data.message }}</span>\n }\n </div>\n }\n\n <!-- Close Button -->\n @if (data.showCloseButton) {\n <button\n mat-icon-button\n class=\"close-button\"\n [class.top-right]=\"data.closeButtonPosition === 'top-right'\"\n [class.top-left]=\"data.closeButtonPosition === 'top-left'\"\n (click)=\"onClose()\"\n aria-label=\"Cerrar\"\n >\n <mat-icon>close</mat-icon>\n </button>\n }\n </div>\n }\n\n <!-- Content (solo para modo normal, no toast) -->\n @if (!(data.toastMode || data.layout === 'toast')) {\n <mat-dialog-content class=\"alert-dialog-content\">\n <!-- Title -->\n @if (data.title) {\n <h2 class=\"alert-dialog-title\" #dialogTitle>{{ data.title }}</h2>\n }\n <!-- Image -->\n @if (data.imageUrl) {\n <div class=\"alert-dialog-image\">\n <img\n [src]=\"data.imageUrl\"\n [alt]=\"data.imageAlt || 'Alert image'\"\n [style.width]=\"data.imageWidth || 'auto'\"\n [style.height]=\"data.imageHeight || 'auto'\"\n [style.max-width]=\"data.imageWidth || '100%'\"\n />\n </div>\n }\n\n <!-- Dynamic Component -->\n @if (data.component) {\n <div #dynamicComponentContainer></div>\n } @if (data.html) {\n <div [innerHTML]=\"sanitizedHtml\"></div>\n } @else if (data.message) {\n <p class=\"alert-message\">{{ data.message }}</p>\n }\n\n <!-- Input Field -->\n @if (data.input) {\n <mat-form-field appearance=\"outline\" class=\"alert-input-field\">\n @if (data.inputLabel) {\n <mat-label>{{ data.inputLabel }}</mat-label>\n } @if (data.input === 'textarea') {\n <textarea\n matInput\n #inputField\n [(ngModel)]=\"inputValue\"\n [placeholder]=\"data.inputPlaceholder || ''\"\n [type]=\"data.input\"\n rows=\"4\"\n (keyup.enter)=\"onInputEnter()\"\n [attr.aria-invalid]=\"!!validationError\"\n >\n </textarea>\n } @else {\n <input\n matInput\n #inputField\n [(ngModel)]=\"inputValue\"\n [placeholder]=\"data.inputPlaceholder || ''\"\n [type]=\"data.input\"\n (keyup.enter)=\"onInputEnter()\"\n [attr.aria-invalid]=\"!!validationError\"\n />\n } @if (validationError) {\n <mat-error>{{ validationError }}</mat-error>\n }\n </mat-form-field>\n }\n </mat-dialog-content>\n }\n\n <!-- Actions (solo para modo normal, no toast) -->\n @if (!(data.toastMode || data.layout === 'toast') && (data.showConfirmButton !== false ||\n data.showCancelButton || data.showDenyButton)) {\n <mat-dialog-actions\n class=\"alert-dialog-actions\"\n [class.reverse-buttons]=\"data.reverseButtons\"\n [class.vertical-buttons]=\"data.verticalButtons\"\n [align]=\"getActionsAlignment()\"\n >\n @if (data.showDenyButton) {\n <acp-button\n type=\"button\"\n [matStyle]=\"getButtonStyle('deny')\"\n [variant]=\"getButtonVariant('deny')\"\n [icon]=\"getButtonIcon('deny')\"\n (handleClick)=\"onDeny()\"\n [text]=\"data.denyText || 'No'\"\n [disabled]=\"data.disableDenyButton?? false\"\n [class.spinning]=\"data.processing && data.processingButton === 'deny'\"\n [class.full-width]=\"data.fullWidthButtons\"\n />\n } @if (data.showCancelButton) {\n <acp-button\n type=\"button\"\n [matStyle]=\"getButtonStyle('cancel')\"\n [variant]=\"getButtonVariant('cancel')\"\n [icon]=\"getButtonIcon('cancel')\"\n (handleClick)=\"onCancel()\"\n [text]=\"data.cancelText || 'Cancel'\"\n [disabled]=\"data.disableCancelButton??false\"\n [class.spinning]=\"data.processing && data.processingButton === 'cancel'\"\n [class.full-width]=\"data.fullWidthButtons\"\n />\n } @if (data.showConfirmButton !== false) {\n <acp-button\n type=\"button\"\n [matStyle]=\"getButtonStyle('confirm')\"\n [variant]=\"getButtonVariant('confirm')\"\n [icon]=\"getButtonIcon('confirm')\"\n (handleClick)=\"onConfirm()\"\n [text]=\"data.confirmText || 'OK'\"\n [disabled]=\"data.disableConfirmButton?? false\"\n [class.spinning]=\"data.processing && data.processingButton === 'confirm'\"\n [class.full-width]=\"data.fullWidthButtons\"\n [autofocus]=\"data.focusConfirm\"\n />\n }\n </mat-dialog-actions>\n }\n\n <!-- Footer -->\n @if (data.footer || data.footerHtml) {\n <div class=\"alert-dialog-footer\">\n @if (data.footerHtml) {\n <div [innerHTML]=\"sanitizedFooter\"></div>\n } @else { {{ data.footer }} }\n </div>\n }\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","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","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i2","catchError","i3","takeUntil","filter","ENTER_ANIMATION","EXIT_ANIMATION","observableOf","i4"],"mappings":"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"}
|