@acontplus/ng-components 2.1.30 → 2.1.32
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/fesm2022/acontplus-ng-components.mjs +5957 -3544
- package/fesm2022/acontplus-ng-components.mjs.map +1 -1
- package/package.json +41 -16
- package/src/_index.scss +22 -0
- package/src/core/color/_all-color.scss +15 -0
- package/src/core/density/_all-density.scss +17 -0
- package/src/core/style/_elevation.scss +207 -0
- package/src/core/theming/_all-theme.scss +36 -0
- package/src/core/theming/_config-validation.scss +171 -0
- package/src/core/theming/_definition.scss +158 -0
- package/src/core/theming/_palettes.scss +1576 -0
- package/src/core/theming/prebuilt/aqua.scss +21 -0
- package/src/core/theming/prebuilt/blue.scss +21 -0
- package/src/core/theming/prebuilt/cyan.scss +21 -0
- package/src/core/theming/prebuilt/green.scss +21 -0
- package/src/core/theming/prebuilt/orange.scss +21 -0
- package/src/core/theming/prebuilt/pink.scss +21 -0
- package/src/core/theming/prebuilt/purple.scss +21 -0
- package/src/core/theming/prebuilt/rose.scss +21 -0
- package/src/core/tokens/_m3-tokens.scss +141 -0
- package/src/core/tokens/_m3-utils.scss +36 -0
- package/src/core/tokens/_system.scss +388 -0
- package/src/core/tokens/_token-utils.scss +117 -0
- package/src/core/tokens/m3/_index.scss +7 -0
- package/src/core/tokens/m3/_md-sys-color.scss +150 -0
- package/src/core/tokens/m3/_md-sys-elevation.scss +8 -0
- package/src/core/tokens/m3/_md-sys-motion.scss +35 -0
- package/src/core/tokens/m3/_md-sys-shape.scss +31 -0
- package/src/core/tokens/m3/_md-sys-state.scss +13 -0
- package/src/core/tokens/m3/_md-sys-typescale.scss +131 -0
- package/src/core/tokens/m3/_theme.scss +41 -0
- package/src/core/typography/_all-typography.scss +12 -0
- package/src/lib/components/alert/_alert-theme.scss +57 -0
- package/src/lib/components/alert/_m3-alert.scss +72 -0
- package/src/lib/components/alert/alert.scss +60 -0
- package/src/lib/components/autocomplete-wrapper/autocomplete-wrapper.scss +667 -0
- package/src/lib/components/button/button.scss +297 -0
- package/src/lib/components/cards/dynamic-card/dynamic-card.scss +131 -0
- package/src/lib/components/checkbox-group/checkbox-group.scss +14 -0
- package/src/lib/components/date-range-input/calendar/date-range-calendar.scss +29 -0
- package/src/lib/components/date-range-input/date-range-input.scss +194 -0
- package/src/lib/components/dialog-wrapper/dialog-wrapper.scss +36 -0
- package/src/lib/components/drawer/_drawer-theme.scss +57 -0
- package/src/lib/components/drawer/_m3-drawer.scss +23 -0
- package/src/lib/components/drawer/drawer-container.scss +97 -0
- package/src/lib/components/grid/_grid-theme.scss +53 -0
- package/src/lib/components/grid/_m3-grid.scss +34 -0
- package/src/lib/components/grid/cell/cell.scss +38 -0
- package/src/lib/components/grid/column-menu/column-menu.scss +117 -0
- package/src/lib/components/grid/column-resize/_column-resize.scss +126 -0
- package/src/lib/components/grid/grid.scss +245 -0
- package/src/lib/components/icons/svg-icon/svg-icon.scss +16 -0
- package/src/lib/components/icons/user-icon/user-icon.scss +0 -0
- package/src/lib/components/input-chip/input-chip.scss +0 -0
- package/src/lib/components/popover/_m3-popover.scss +24 -0
- package/src/lib/components/popover/_popover-theme.scss +57 -0
- package/src/lib/components/popover/popover.scss +239 -0
- package/src/lib/components/spinner/spinner.scss +6 -0
- package/src/lib/components/tables/tabulator-table/tabulator-table.scss +68 -0
- package/src/lib/components/theme-toggle/theme-toggle.scss +3 -0
- package/src/lib/styles/_elevation.scss +168 -0
- package/src/lib/styles/_token-utils.scss +115 -0
- package/types/acontplus-ng-components.d.ts +1017 -536
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"acontplus-ng-components.mjs","sources":["../../../../packages/ng-components/src/lib/components/alert/alert.ts","../../../../packages/ng-components/src/lib/components/alert/alert.html","../../../../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 {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n WritableSignal,\n OutputEmitterRef,\n input,\n output,\n signal,\n} from '@angular/core';\nimport { MatIconButton } from '@angular/material/button';\n\nexport type AcpAlertType = 'default' | 'info' | 'success' | 'warning' | 'danger';\n\n@Component({\n selector: 'acp-alert',\n exportAs: 'acpAlert',\n host: {\n '[class]': 'hostClassList',\n '[class.acp-alert-dismissible]': 'dismissible()',\n '[class.acp-alert-hidden]': '!visible()',\n '[attr.role]': 'visible() ? \"alert\" : null',\n '[attr.aria-live]': 'type() === \"danger\" ? \"assertive\" : \"polite\"',\n '[attr.aria-atomic]': 'true',\n },\n templateUrl: './alert.html',\n styleUrl: './alert.scss',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [MatIconButton],\n})\nexport class AcpAlert {\n /** Signal to control visibility */\n visible: WritableSignal<boolean> = signal(true);\n\n /** The alert's type. Can be `default`, `info`, `success`, `warning` or `danger`. */\n type = input<AcpAlertType>('default');\n\n /** Whether to display an inline close button. */\n dismissible = input(false, { transform: (value: unknown) => value === '' || value === true });\n\n /** The alert's elevation (0~24). */\n elevation = input(0, { transform: (value: unknown) => Number(value) || 0 });\n\n /** Event emitted when the alert closed. */\n closed: OutputEmitterRef<AcpAlert> = output<AcpAlert>();\n\n get hostClassList() {\n const clampedElevation = Math.max(0, Math.min(24, this.elevation()));\n return `acp-alert acp-alert-${this.type()} mat-elevation-z${clampedElevation}`;\n }\n\n /** Programmatically close the alert */\n close(): void {\n this._onClosed();\n }\n\n /** Programmatically show the alert */\n show(): void {\n this.visible.set(true);\n }\n\n _onClosed(): void {\n this.visible.set(false);\n this.closed.emit(this);\n }\n}\n","<ng-content></ng-content>\n@if (dismissible()) {\n<div class=\"acp-alert-close\">\n <button matIconButton type=\"button\" aria-label=\"Close\" (click)=\"_onClosed()\">\n <svg viewBox=\"0 0 24 24\" width=\"24px\" height=\"24px\" fill=\"currentColor\" focusable=\"false\">\n <path\n d=\"M19,6.41L17.59,5L12,10.59L6.41,5L5,6.41L10.59,12L5,17.59L6.41,19L12,13.41L17.59,19L19,17.59L13.41,12L19,6.41Z\"\n />\n </svg>\n </button>\n</div>\n}\n","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\nexport type DialogType = 'normal' | 'alert';\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 * Los AlertDialogs siempre tienen prioridad sobre otros diálogos\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class DialogZIndexService {\n // Rangos de z-index por tipo de diálogo\n private static readonly Z_INDEX_RANGES = {\n normal: { base: 1000, current: 1000 }, // Diálogos normales: 1000-1999\n alert: { base: 2000, current: 2000 }, // AlertDialogs: 2000-2999 (siempre encima)\n };\n\n private static readonly Z_INDEX_INCREMENT = 10;\n\n /**\n * Obtiene el siguiente z-index disponible para un tipo específico de diálogo\n * @param type Tipo de diálogo (normal, alert)\n * @returns El próximo z-index a usar\n */\n getNextZIndex(type: DialogType = 'normal'): number {\n const range = DialogZIndexService.Z_INDEX_RANGES[type];\n range.current += DialogZIndexService.Z_INDEX_INCREMENT;\n return range.current;\n }\n\n /**\n * Obtiene el z-index actual más alto para un tipo específico\n * @param type Tipo de diálogo\n * @returns El z-index más alto actualmente en uso para ese tipo\n */\n getCurrentZIndex(type: DialogType = 'normal'): number {\n return DialogZIndexService.Z_INDEX_RANGES[type].current;\n }\n\n /**\n * Obtiene el z-index más alto de todos los tipos\n * @returns El z-index más alto de todos los diálogos\n */\n getHighestZIndex(): number {\n return Math.max(\n ...Object.values(DialogZIndexService.Z_INDEX_RANGES).map(range => range.current),\n );\n }\n\n /**\n * Resetea el contador de z-index (útil para testing)\n * @param type Tipo específico a resetear, o undefined para resetear todos\n */\n reset(type?: DialogType): void {\n if (type) {\n const range = DialogZIndexService.Z_INDEX_RANGES[type];\n range.current = range.base;\n } else {\n // Resetear todos los tipos\n Object.entries(DialogZIndexService.Z_INDEX_RANGES).forEach(([_, range]) => {\n range.current = range.base;\n });\n }\n }\n\n /**\n * Aplica z-index a un diálogo específico\n * @param dialogRef Referencia al diálogo\n * @param type Tipo de diálogo (determina el rango de z-index)\n * @param zIndex Z-index específico a aplicar (opcional)\n */\n applyZIndex(dialogRef: any, type: DialogType = 'normal', zIndex?: number): void {\n const targetZIndex = zIndex || this.getNextZIndex(type);\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 // Agregar atributo data para debugging\n pane.setAttribute('data-dialog-type', type);\n pane.setAttribute('data-z-index', targetZIndex.toString());\n }\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 * @param type Tipo de diálogo\n */\n bringToFront(element: HTMLElement, type: DialogType = 'normal'): void {\n const pane = element.closest('.cdk-overlay-pane') as HTMLElement;\n if (pane) {\n const newZIndex = this.getNextZIndex(type);\n pane.style.zIndex = (newZIndex + 2).toString();\n pane.setAttribute('data-z-index', newZIndex.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 /**\n * Fuerza un diálogo a estar siempre encima de todos los demás\n * Útil para alertas críticas que deben tener máxima prioridad\n * @param dialogRef Referencia al diálogo\n */\n forceToTop(dialogRef: any): void {\n const highestZIndex = this.getHighestZIndex();\n const topZIndex = highestZIndex + DialogZIndexService.Z_INDEX_INCREMENT;\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 = (topZIndex + 2).toString();\n pane.setAttribute('data-z-index', topZIndex.toString());\n pane.setAttribute('data-forced-top', 'true');\n }\n if (backdrop) {\n backdrop.style.zIndex = (topZIndex + 1).toString();\n }\n }\n }, 0);\n }\n}\n","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n inject,\n OnDestroy,\n Signal,\n viewChild,\n ViewContainerRef,\n ViewEncapsulation,\n} from '@angular/core';\n\nimport { CdkDrag, CdkDragHandle } from '@angular/cdk/drag-drop';\nimport { MAT_DIALOG_DATA, MatDialogModule, MatDialogRef } 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 { DialogSize, DialogWrapperConfig, MatCustomDialogConfig } 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 { inject, Injectable, Type } from '@angular/core';\nimport { MatDialog, MatDialogRef } 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 { DialogType, 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 ButtonConfig {\n text?: string;\n icon?: string;\n variant?: ButtonVariant;\n style?: MaterialButtonStyle;\n color?: ThemePalette | string;\n disabled?: boolean;\n focus?: boolean;\n}\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'; // Tipo de layout\n iconPosition?: 'left' | 'center' | 'top'; // Posición del icono\n contentAlignment?: 'left' | 'center' | 'right'; // Alineación del contenido\n actionsAlignment?: 'start' | 'center' | 'end'; // Alineación específica de los botones\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 // ===== Custom Component Support =====\n component?: Type<any>;\n componentProps?: Record<string, any>;\n\n // ===== Z-Index and Priority =====\n forceToTop?: boolean; // Forzar que este diálogo esté siempre encima de todos\n dialogType?: DialogType; // Tipo de diálogo para manejo de z-index (normal, alert)\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 buttons?: {\n confirm?: ButtonConfig;\n cancel?: ButtonConfig;\n deny?: ButtonConfig;\n };\n showConfirmButton?: boolean;\n showCancelButton?: boolean;\n showDenyButton?: 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\n // Trackear solo los AlertDialogs abiertos\n private openAlertDialogs: MatDialogRef<AlertDialog>[] = [];\n\n private defaultOptions: Partial<AlertDialogOptions> = {\n width: '400px',\n showConfirmButton: true,\n showCancelButton: false,\n showDenyButton: false,\n buttons: {\n confirm: { text: 'OK', focus: true },\n cancel: { text: 'Cancelar' },\n deny: { text: 'No' },\n },\n disableClose: false,\n closeOnBackdropClick: true,\n allowEscapeKey: true,\n allowEnterKey: true,\n timerProgressBar: false,\n reverseButtons: false,\n scrollbarPadding: true,\n position: 'center',\n draggable: false,\n allowMultiple: false, // Por defecto no permitir múltiples alerts\n forceToTop: true, // Por defecto los alerts siempre van encima\n dialogType: 'alert', // Por defecto usar el tipo alert (z-index alto)\n layout: 'modern',\n iconPosition: 'left',\n contentAlignment: 'left',\n actionsAlignment: 'end', // Botones a la derecha por defecto\n showCloseButton: true,\n closeButtonPosition: 'top-right',\n animation: 'fade',\n animationDuration: 300,\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 buttons: {\n confirm: { text: 'OK', focus: true },\n cancel: { text: 'Cancelar' },\n deny: { text: 'No' },\n },\n disableClose: false,\n closeOnBackdropClick: true,\n allowEscapeKey: true,\n allowEnterKey: true,\n timerProgressBar: false,\n reverseButtons: false,\n scrollbarPadding: true,\n position: 'center',\n draggable: false,\n allowMultiple: false,\n forceToTop: true,\n dialogType: 'alert',\n layout: 'modern',\n iconPosition: 'left',\n contentAlignment: 'left',\n actionsAlignment: 'end',\n showCloseButton: true,\n closeButtonPosition: 'top-right',\n animation: 'fade',\n animationDuration: 300,\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 solo los AlertDialogs existentes\n if (!mergedOptions.allowMultiple) {\n this.closeAllAlertDialogs();\n }\n\n // Determinar el tipo de diálogo para z-index\n const dialogType: DialogType = mergedOptions.dialogType || 'alert';\n\n // Calcular posición del diálogo\n const position = 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.buttons?.confirm?.focus !== false,\n restoreFocus: true,\n hasBackdrop: true,\n });\n\n // Trackear este AlertDialog\n this.openAlertDialogs.push(dialogRef);\n\n // Limpiar del tracking cuando se cierre\n dialogRef.afterClosed().subscribe(() => {\n const index = this.openAlertDialogs.indexOf(dialogRef);\n if (index > -1) {\n this.openAlertDialogs.splice(index, 1);\n }\n });\n\n // Aplicar z-index dinámico usando el servicio centralizado\n if (mergedOptions.forceToTop) {\n // Si se requiere forzar al tope, usar forceToTop\n this.zIndexService.forceToTop(dialogRef);\n } else {\n // Usar el tipo de diálogo apropiado para z-index\n this.zIndexService.applyZIndex(dialogRef, dialogType);\n }\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 buttons: {\n confirm: { text: 'Sí', ...opts.buttons?.confirm },\n cancel: { text: 'No', ...opts.buttons?.cancel },\n ...opts.buttons,\n },\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 buttons: {\n confirm: { text: 'Eliminar', variant: 'danger', ...opts.buttons?.confirm },\n cancel: { text: 'Cancelar', ...opts.buttons?.cancel },\n ...opts.buttons,\n },\n });\n }\n\n /**\n * Alerta crítica que siempre aparece encima de todo\n */\n critical(options: string | Omit<AlertDialogOptions, 'forceToTop'>): Promise<AlertDialogResult> {\n const opts =\n typeof options === 'string'\n ? { message: options, title: '¡Atención!' }\n : { title: '¡Atención!', ...options };\n\n return this.fire({\n ...opts,\n type: 'error',\n forceToTop: true,\n disableClose: true,\n closeOnBackdropClick: false,\n allowEscapeKey: false,\n });\n }\n\n /**\n * Cerrar solo los AlertDialogs abiertos (no afecta otros diálogos)\n */\n closeAllAlertDialogs(): void {\n // Crear una copia del array para evitar problemas de concurrencia\n const dialogsToClose = [...this.openAlertDialogs];\n dialogsToClose.forEach(dialogRef => {\n if (dialogRef && !dialogRef.componentInstance) {\n // Solo cerrar si el diálogo aún está abierto\n dialogRef.close();\n }\n });\n // Limpiar el array\n this.openAlertDialogs = [];\n }\n\n /**\n * Cerrar TODOS los diálogos abiertos (incluyendo otros servicios)\n * ⚠️ Usar con cuidado - afecta todos los diálogos de MatDialog\n */\n closeAll(): void {\n this.dialog.closeAll();\n // También limpiar nuestro tracking\n this.openAlertDialogs = [];\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 = ['acp-alert-dialog-container'];\n\n if (options.customClass) {\n classes.push(options.customClass);\n }\n\n if (options.draggable) {\n classes.push('acp-draggable-dialog');\n }\n\n // Agregar clases para layout\n if (options.layout) {\n classes.push(`acp-layout-${options.layout}`);\n }\n\n // Agregar clases para posición de icono\n if (options.iconPosition) {\n classes.push(`acp-icon-${options.iconPosition}`);\n }\n\n // Agregar clases para alineación de contenido\n if (options.contentAlignment) {\n classes.push(`acp-content-${options.contentAlignment}`);\n }\n\n // Agregar clase para animación\n if (options.animation) {\n classes.push(`acp-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","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',\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 [startDate]=\"startDate()\"\n [endDate]=\"endDate()\"\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 startDate = input<Date>(new Date());\n endDate = input<Date>(new Date());\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\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 }\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-dark-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\n // Configure backdrop based on trigger event and user preference\n if (this.popover.triggerEvent === 'click') {\n overlayConfig.hasBackdrop = this.popover.hasBackdrop ?? true;\n overlayConfig.backdropClass = this.popover.backdropClass;\n } else if (this.popover.triggerEvent === 'hover') {\n // For hover events, backdrop must be disabled to prevent flickering\n // The backdrop interferes with mouse events and causes infinite open/close cycles\n overlayConfig.hasBackdrop = false;\n // Note: User's hasBackdrop setting is ignored for hover to prevent UX issues\n }\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 ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ComponentRef,\n createComponent,\n ElementRef,\n EnvironmentInjector,\n inject,\n OnDestroy,\n OnInit,\n Renderer2,\n ViewChild,\n ViewContainerRef,\n} from '@angular/core';\nimport { MAT_DIALOG_DATA, MatDialogModule, MatDialogRef } 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, ButtonConfig } 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 .acp-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 .acp-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 .acp-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 .acp-alert-dialog-content {\n /* Sin padding/margin - mat-dialog-content ya los maneja */\n text-align: left;\n\n .acp-alert-message {\n margin: 0;\n font-size: 16px;\n line-height: 1.4;\n color: #666;\n }\n }\n\n /* ===== ACTIONS ===== */\n .acp-alert-dialog-actions {\n margin: 24px 24px 24px 24px;\n padding: 0;\n gap: 12px;\n }\n\n /* Reverse buttons - solo cambiar el orden, mat-dialog-actions maneja align */\n .acp-alert-dialog-actions.reverse-buttons {\n flex-direction: row-reverse;\n }\n\n /* Vertical buttons */\n .acp-alert-dialog-actions.vertical-buttons {\n flex-direction: column;\n align-items: stretch;\n }\n\n .acp-alert-dialog-actions.vertical-buttons.reverse-buttons {\n flex-direction: column-reverse;\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 .acp-alert-dialog.modern-layout {\n .acp-alert-header {\n padding: 24px 24px 0 24px;\n\n .acp-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 /* ===== ICON POSITIONS ===== */\n .acp-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 .acp-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 .acp-alert-dialog-title,\n .acp-alert-dialog-content {\n text-align: center;\n }\n }\n\n .acp-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 .acp-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 .acp-alert-dialog.content-left {\n .acp-alert-dialog-title,\n .acp-alert-dialog-content {\n text-align: left;\n }\n }\n\n .acp-alert-dialog.content-center {\n .acp-alert-header {\n justify-content: center;\n }\n\n .acp-alert-dialog-title,\n .acp-alert-dialog-content {\n text-align: center;\n }\n }\n\n .acp-alert-dialog.content-right {\n .acp-alert-dialog-title,\n .acp-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 /* 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 .acp-alert-dialog-image {\n margin: 1rem auto;\n display: flex;\n justify-content: center;\n align-items: center;\n }\n\n .acp-alert-dialog-image img {\n max-width: 100%;\n border-radius: 8px;\n }\n\n .acp-alert-input-field {\n width: 100%;\n margin-top: 1rem;\n }\n\n .acp-confirm-button,\n .acp-cancel-button,\n .acp-deny-button {\n min-width: 100px;\n }\n\n .acp-cancel-button {\n color: #333;\n }\n\n .acp-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 /* ===== 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 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 private getButtonConfig(buttonType: ButtonType): ButtonConfig {\n return this.data.buttons?.[buttonType] || {};\n }\n\n getButtonVariant(buttonType: ButtonType): ButtonVariant {\n const config = this.getButtonConfig(buttonType);\n if (config.variant) return config.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 config = this.getButtonConfig(buttonType);\n if (config.icon) return config.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 config = this.getButtonConfig(buttonType);\n return config.style || 'elevated';\n }\n\n getButtonText(buttonType: ButtonType): string {\n const config = this.getButtonConfig(buttonType);\n if (config.text) return config.text;\n\n // Default text based on button type\n switch (buttonType) {\n case 'confirm':\n return 'OK';\n case 'cancel':\n return 'Cancelar';\n case 'deny':\n return 'No';\n default:\n return 'OK';\n }\n }\n\n getButtonDisabled(buttonType: ButtonType): boolean {\n const config = this.getButtonConfig(buttonType);\n return config.disabled || false;\n }\n\n getButtonFocus(buttonType: ButtonType): boolean {\n const config = this.getButtonConfig(buttonType);\n return config.focus || buttonType === 'confirm';\n }\n\n getActionsAlignment(): 'start' | 'center' | 'end' {\n // Si hay una configuración específica de alineación de acciones, usarla\n if (this.data.actionsAlignment) {\n return this.data.actionsAlignment;\n }\n\n // Si no, usar la alineación del contenido como referencia\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'; // Por defecto a la derecha\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 private getButtonColor(buttonType: ButtonType, isBackground = false): any {\n const config = this.getButtonConfig(buttonType);\n const color = config.color;\n\n if (!color) {\n return buttonType === 'confirm' ? 'primary' : undefined;\n }\n\n const materialColors = ['primary', 'accent', 'warn'];\n if (isBackground) {\n return materialColors.includes(color) ? undefined : color;\n }\n return materialColors.includes(color) ? color : undefined;\n }\n\n getConfirmColor(): any {\n return this.getButtonColor('confirm');\n }\n\n getCancelColor(): any {\n return this.getButtonColor('cancel');\n }\n\n getDenyColor(): any {\n return this.getButtonColor('deny');\n }\n\n getConfirmBackgroundColor(): string | undefined {\n return this.getButtonColor('confirm', true);\n }\n\n getCancelBackgroundColor(): string | undefined {\n return this.getButtonColor('cancel', true);\n }\n\n getDenyBackgroundColor(): string | undefined {\n return this.getButtonColor('deny', true);\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=\"acp-alert-dialog\"\n [class.modern-layout]=\"data.layout === 'modern'\"\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) {\n <mat-progress-bar mode=\"determinate\" [value]=\"timerProgress\" class=\"timer-progress\">\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=\"acp-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 <!-- 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=\"acp-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 <!-- 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 -->\n <mat-dialog-content class=\"acp-alert-dialog-content\">\n <!-- Title -->\n @if (data.title) {\n <h2 class=\"acp-alert-dialog-title\" #dialogTitle>{{ data.title }}</h2>\n }\n <!-- Image -->\n @if (data.imageUrl) {\n <div class=\"acp-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=\"acp-alert-message\">{{ data.message }}</p>\n }\n\n <!-- Input Field -->\n @if (data.input) {\n <mat-form-field appearance=\"outline\" class=\"acp-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 <!-- Actions -->\n @if (data.showConfirmButton !== false || data.showCancelButton || data.showDenyButton) {\n <mat-dialog-actions\n class=\"acp-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]=\"getButtonText('deny')\"\n [disabled]=\"getButtonDisabled('deny')\"\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]=\"getButtonText('cancel')\"\n [disabled]=\"getButtonDisabled('cancel')\"\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]=\"getButtonText('confirm')\"\n [disabled]=\"getButtonDisabled('confirm')\"\n [class.spinning]=\"data.processing && data.processingButton === 'confirm'\"\n [class.full-width]=\"data.fullWidthButtons\"\n [autofocus]=\"getButtonFocus('confirm')\"\n />\n }\n </mat-dialog-actions>\n }\n\n <!-- Footer -->\n @if (data.footer || data.footerHtml) {\n <div class=\"acp-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/alert/alert.ts","../../../../packages/ng-components/src/lib/components/alert/alert.html","../../../../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/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/core/pipes/to-observable.pipe.ts","../../../../packages/ng-components/src/core/pipes/is-template-ref.pipe.ts","../../../../packages/ng-components/src/lib/components/grid/grid-selectable-cell.ts","../../../../packages/ng-components/src/lib/components/grid/grid-utils.ts","../../../../packages/ng-components/src/lib/components/grid/data-grid.pipes.ts","../../../../packages/ng-components/src/lib/components/grid/grid-menu.ts","../../../../packages/ng-components/src/lib/components/grid/cell/cell.ts","../../../../packages/ng-components/src/lib/components/grid/cell/cell.html","../../../../packages/ng-components/src/lib/components/column-resize/selectors.ts","../../../../packages/ng-components/src/lib/components/column-resize/polyfill.ts","../../../../packages/ng-components/src/lib/components/column-resize/column-resize.ts","../../../../packages/ng-components/src/lib/components/column-resize/column-resize-notifier.ts","../../../../packages/ng-components/src/lib/components/column-resize/event-dispatcher.ts","../../../../packages/ng-components/src/lib/components/column-resize/coalesced-style-scheduler.ts","../../../../packages/ng-components/src/lib/components/column-resize/resize-strategy.ts","../../../../packages/ng-components/src/lib/components/column-resize/column-resize-directives/constants.ts","../../../../packages/ng-components/src/lib/components/column-resize/column-resize-directives/column-resize.ts","../../../../packages/ng-components/src/lib/components/column-resize/column-resize-directives/column-resize-flex.ts","../../../../packages/ng-components/src/lib/components/column-resize/column-size-store.ts","../../../../packages/ng-components/src/lib/components/column-resize/resize-ref.ts","../../../../packages/ng-components/src/lib/components/column-resize/resizable.ts","../../../../packages/ng-components/src/lib/components/column-resize/overlay-handle.ts","../../../../packages/ng-components/src/lib/components/grid/column-menu/column-menu.ts","../../../../packages/ng-components/src/lib/components/grid/column-menu/column-menu.html","../../../../packages/ng-components/src/lib/components/grid/grid-expansion-toggle.ts","../../../../packages/ng-components/src/lib/components/grid/column-resize/resize-strategy.ts","../../../../packages/ng-components/src/lib/components/grid/column-resize/column-resize-directives/common.ts","../../../../packages/ng-components/src/lib/components/grid/column-resize/column-resize-directives/column-resize.ts","../../../../packages/ng-components/src/lib/components/grid/column-resize/column-resize-directives/column-resize-flex.ts","../../../../packages/ng-components/src/lib/components/grid/column-resize/overlay-handle.ts","../../../../packages/ng-components/src/lib/components/grid/column-resize/resizable-directives/common.ts","../../../../packages/ng-components/src/lib/components/grid/column-resize/resizable-directives/resizable.ts","../../../../packages/ng-components/src/lib/components/grid/grid.ts","../../../../packages/ng-components/src/lib/components/grid/grid.html","../../../../packages/ng-components/src/lib/components/grid/keyboard-navigation.ts","../../../../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/date-range-input/constant/date-filter-const.ts","../../../../packages/ng-components/src/lib/components/date-range-input/utils/date-picker-utilities.ts","../../../../packages/ng-components/src/lib/components/date-range-input/data/default-date-options.ts","../../../../packages/ng-components/src/lib/components/date-range-input/utils/human-date-parser.ts","../../../../packages/ng-components/src/lib/components/date-range-input/calendar/date-range-calendar.ts","../../../../packages/ng-components/src/lib/components/date-range-input/calendar/date-range-calendar.html","../../../../packages/ng-components/src/lib/components/date-range-input/date-range-input.ts","../../../../packages/ng-components/src/lib/components/date-range-input/date-range-input.html","../../../../packages/ng-components/src/lib/components/date-range-input/model/select-date-option.model.ts","../../../../packages/ng-components/src/lib/components/checkbox-group/checkbox-group.ts","../../../../packages/ng-components/src/lib/components/checkbox-group/checkbox-group.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 {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Input,\n Output,\n ViewEncapsulation,\n booleanAttribute,\n inject,\n} from '@angular/core';\nimport { MatIconButton } from '@angular/material/button';\n\nexport type AcpAlertType = 'default' | 'info' | 'success' | 'warning' | 'danger';\n\n@Component({\n selector: 'acp-alert',\n exportAs: 'acpAlert',\n host: {\n '[class]': 'hostClassList',\n '[class.acp-alert-dismissible]': 'dismissible',\n role: 'alert',\n },\n templateUrl: './alert.html',\n styleUrl: './alert.scss',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [MatIconButton],\n})\nexport class AcpAlert {\n private _changeDetectorRef = inject(ChangeDetectorRef);\n\n get hostClassList() {\n return `acp-alert acp-alert-${this.type} mat-elevation-z${this.elevation}`;\n }\n\n /** The alert's type. Can be `default`, `info`, `success`, `warning` or `danger`. */\n @Input() type: AcpAlertType = 'default';\n\n /** Whether to display an inline close button. */\n @Input({ transform: booleanAttribute }) dismissible = false;\n\n /** The alert's elevation (0~24). */\n @Input() elevation = 0;\n\n /** Event emitted when the alert closed. */\n @Output() closed = new EventEmitter<AcpAlert>();\n\n _onClosed(): void {\n this._changeDetectorRef.markForCheck();\n this.closed.emit(this);\n }\n}\n","<ng-content></ng-content>\n@if (dismissible) {\n<div class=\"acp-alert-close\">\n <button matIconButton type=\"button\" aria-label=\"Close\" (click)=\"_onClosed()\">\n <svg viewBox=\"0 0 24 24\" width=\"24px\" height=\"24px\" fill=\"currentColor\" focusable=\"false\">\n <path\n d=\"M19,6.41L17.59,5L12,10.59L6.41,5L5,6.41L10.59,12L5,17.59L6.41,19L12,13.41L17.59,19L19,17.59L13.41,12L19,6.41Z\"\n />\n </svg>\n </button>\n</div>\n}\n","import {\n Component,\n input,\n output,\n booleanAttribute,\n ViewEncapsulation,\n ChangeDetectionStrategy,\n} 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 changeDetection: ChangeDetectionStrategy.Eager,\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 /**\n * Event emitted when a key is pressed down on the card.\n */\n keyDown = output<KeyboardEvent>();\n\n /**\n * Event emitted when a key is released on the card.\n */\n keyUp = output<KeyboardEvent>();\n\n /**\n * Event emitted when a key is pressed on the card.\n */\n keyPress = output<KeyboardEvent>();\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 /**\n * Handles the key down event on the card.\n * Emits the keyDown event with the original keyboard event.\n * @param event The keyboard event\n */\n handleKeyDown(event: KeyboardEvent): void {\n this.keyDown.emit(event);\n }\n\n /**\n * Handles the key up event on the card.\n * Emits the keyUp event with the original keyboard event.\n * @param event The keyboard event\n */\n handleKeyUp(event: KeyboardEvent): void {\n this.keyUp.emit(event);\n }\n\n /**\n * Handles the key press event on the card.\n * Emits the keyPress event with the original keyboard event.\n * @param event The keyboard event\n */\n handleKeyPress(event: KeyboardEvent): void {\n this.keyPress.emit(event);\n }\n}\n","<mat-card\n appearance=\"outlined\"\n (click)=\"handleCardClick($event)\"\n (keydown)=\"handleKeyDown($event)\"\n (keyup)=\"handleKeyUp($event)\"\n (keypress)=\"handleKeyPress($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 {\n Component,\n input,\n output,\n ViewEncapsulation,\n ChangeDetectionStrategy,\n} 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 changeDetection: ChangeDetectionStrategy.Eager,\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\nexport type DialogType = 'normal' | 'alert';\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 * Los AlertDialogs siempre tienen prioridad sobre otros diálogos\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class DialogZIndexService {\n // Rangos de z-index por tipo de diálogo\n private static readonly Z_INDEX_RANGES = {\n normal: { base: 1000, current: 1000 }, // Diálogos normales: 1000-1999\n alert: { base: 2000, current: 2000 }, // Diálogos de alerta: 2000-2999 (siempre encima)\n };\n\n private static readonly Z_INDEX_INCREMENT = 10;\n\n /**\n * Obtiene el siguiente z-index disponible para un tipo específico de diálogo\n * @param type Tipo de diálogo (normal, alert)\n * @returns El próximo z-index a usar\n */\n getNextZIndex(type: DialogType = 'normal'): number {\n const range = DialogZIndexService.Z_INDEX_RANGES[type];\n range.current += DialogZIndexService.Z_INDEX_INCREMENT;\n return range.current;\n }\n\n /**\n * Obtiene el z-index actual más alto para un tipo específico\n * @param type Tipo de diálogo\n * @returns El z-index más alto actualmente en uso para ese tipo\n */\n getCurrentZIndex(type: DialogType = 'normal'): number {\n return DialogZIndexService.Z_INDEX_RANGES[type].current;\n }\n\n /**\n * Obtiene el z-index más alto de todos los tipos\n * @returns El z-index más alto de todos los diálogos\n */\n getHighestZIndex(): number {\n return Math.max(\n ...Object.values(DialogZIndexService.Z_INDEX_RANGES).map(range => range.current),\n );\n }\n\n /**\n * Resetea el contador de z-index (útil para testing)\n * @param type Tipo específico a resetear, o undefined para resetear todos\n */\n reset(type?: DialogType): void {\n if (type) {\n const range = DialogZIndexService.Z_INDEX_RANGES[type];\n range.current = range.base;\n } else {\n // Resetear todos los tipos\n Object.entries(DialogZIndexService.Z_INDEX_RANGES).forEach(([_, range]) => {\n range.current = range.base;\n });\n }\n }\n\n /**\n * Aplica z-index a un diálogo específico\n * @param dialogRef Referencia al diálogo\n * @param type Tipo de diálogo (determina el rango de z-index)\n * @param zIndex Z-index específico a aplicar (opcional)\n */\n applyZIndex(dialogRef: any, type: DialogType = 'normal', zIndex?: number): void {\n const targetZIndex = zIndex || this.getNextZIndex(type);\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 // Agregar atributo data para debugging\n pane.setAttribute('data-dialog-type', type);\n pane.setAttribute('data-z-index', targetZIndex.toString());\n }\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 * @param type Tipo de diálogo\n */\n bringToFront(element: HTMLElement, type: DialogType = 'normal'): void {\n const pane = element.closest('.cdk-overlay-pane') as HTMLElement;\n if (pane) {\n const newZIndex = this.getNextZIndex(type);\n pane.style.zIndex = (newZIndex + 2).toString();\n pane.setAttribute('data-z-index', newZIndex.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 /**\n * Fuerza un diálogo a estar siempre encima de todos los demás\n * Útil para alertas críticas que deben tener máxima prioridad\n * @param dialogRef Referencia al diálogo\n */\n forceToTop(dialogRef: any): void {\n const highestZIndex = this.getHighestZIndex();\n const topZIndex = highestZIndex + DialogZIndexService.Z_INDEX_INCREMENT;\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 = (topZIndex + 2).toString();\n pane.setAttribute('data-z-index', topZIndex.toString());\n pane.setAttribute('data-forced-top', 'true');\n }\n if (backdrop) {\n backdrop.style.zIndex = (topZIndex + 1).toString();\n }\n }\n }, 0);\n }\n}\n","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n inject,\n OnDestroy,\n Signal,\n viewChild,\n ViewContainerRef,\n ViewEncapsulation,\n} from '@angular/core';\n\nimport { CdkDrag, CdkDragHandle } from '@angular/cdk/drag-drop';\nimport { MAT_DIALOG_DATA, MatDialogModule, MatDialogRef } 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, ChangeDetectionStrategy } from '@angular/core';\n\n@Component({\n selector: 'acp-user-icon',\n imports: [],\n templateUrl: './user-icon.html',\n styleUrl: './user-icon.scss',\n changeDetection: ChangeDetectionStrategy.Eager,\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 {\n Component,\n computed,\n effect,\n inject,\n input,\n ViewEncapsulation,\n ChangeDetectionStrategy,\n} 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 changeDetection: ChangeDetectionStrategy.Eager,\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 {\n Component,\n inject,\n input,\n ViewEncapsulation,\n ChangeDetectionStrategy,\n} 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 changeDetection: ChangeDetectionStrategy.Eager,\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, ChangeDetectionStrategy } 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 changeDetection: ChangeDetectionStrategy.Eager,\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 ChangeDetectionStrategy,\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 changeDetection: ChangeDetectionStrategy.Eager,\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 { DialogSize, DialogWrapperConfig, MatCustomDialogConfig } 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 {\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 ChangeDetectionStrategy,\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 changeDetection: ChangeDetectionStrategy.Eager,\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 } 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 { 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 { Directive, EventEmitter, 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 AcpGridSelectableCell {\n ctrlKeyPressed = false;\n shiftKeyPressed = false;\n\n get selected() {\n return this._selected;\n }\n private _selected = false;\n\n @Input() cellSelectable = true;\n\n @Output() cellSelectedChange = new EventEmitter<AcpGridSelectableCell>();\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 { KeyValueChangeRecord, Pipe, PipeTransform, inject } from '@angular/core';\nimport { isObservable } from 'rxjs';\nimport { DataGridColumn, DataGridColumnButton, DataGridRowClassFormatter } from '../../types';\nimport { DataGridUtils } from './grid-utils';\n\n@Pipe({ name: 'colClass' })\nexport class AcpGridColClassPipe 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 AcpGridRowClassPipe 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 AcpGridCellActionsPipe 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 AcpGridCellActionTooltipPipe 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 AcpGridCellActionBadgePipe 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 AcpGridCellActionDisablePipe 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 AcpGridCellSummaryPipe 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 { AcpGridCellActionDisablePipe } from './data-grid.pipes';\nimport { DataGridMenuItem } from './interfaces';\n\n@Component({\n selector: 'acp-grid-menu',\n exportAs: 'acpGridMenu',\n template: `\n <mat-menu class=\"acp-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-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=\"acp-grid-icon\">{{ item.icon }}</mat-icon>\n } @else if (item.fontIcon) {\n <mat-icon class=\"acp-grid-icon\" [fontIcon]=\"item.fontIcon\"></mat-icon>\n } @else if (item.svgIcon) {\n <mat-icon class=\"acp-grid-icon\" [svgIcon]=\"item.svgIcon\"></mat-icon>\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 AcpGridMenu,\n AcpGridCellActionDisablePipe,\n ],\n})\nexport class AcpGridMenu {\n @ViewChild(MatMenu, { static: true }) menu!: MatMenu;\n\n @Input() items: DataGridMenuItem[] = [];\n\n @Input() data: Record<string, any> = {};\n}\n","import {\n AsyncPipe,\n CurrencyPipe,\n DatePipe,\n DecimalPipe,\n NgTemplateOutlet,\n PercentPipe,\n} from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n DoCheck,\n EventEmitter,\n Input,\n KeyValueChangeRecord,\n KeyValueChanges,\n KeyValueDiffer,\n KeyValueDiffers,\n OnInit,\n Output,\n ViewEncapsulation,\n inject,\n} from '@angular/core';\nimport { MatBadge } from '@angular/material/badge';\nimport { MatButton, MatIconButton } from '@angular/material/button';\nimport { MatChip, MatChipListbox } from '@angular/material/chips';\nimport { MatIcon } from '@angular/material/icon';\nimport { MatMenuTrigger } from '@angular/material/menu';\nimport { MatTooltip } from '@angular/material/tooltip';\n\nimport { AcpToObservablePipe } from './../../../../core/pipes';\nimport {\n AcpGridCellActionBadgePipe,\n AcpGridCellActionDisablePipe,\n AcpGridCellActionTooltipPipe,\n AcpGridCellActionsPipe,\n AcpGridCellSummaryPipe,\n} from '../data-grid.pipes';\nimport { DataGridUtils } from '../grid-utils';\nimport { DataGridColumn, DataGridColumnButton } from '../interfaces';\nimport { AcpGridMenu } from '../grid-menu';\n\n@Component({\n selector: 'acp-grid-cell',\n exportAs: 'acpGridCell',\n templateUrl: './cell.html',\n styleUrl: './cell.scss',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n AsyncPipe,\n CurrencyPipe,\n DatePipe,\n DecimalPipe,\n NgTemplateOutlet,\n PercentPipe,\n MatButton,\n MatIconButton,\n MatIcon,\n MatChipListbox,\n MatChip,\n MatTooltip,\n MatBadge,\n MatMenuTrigger,\n AcpToObservablePipe,\n AcpGridCellActionsPipe,\n AcpGridCellSummaryPipe,\n AcpGridCellActionDisablePipe,\n AcpGridCellActionTooltipPipe,\n AcpGridCellActionBadgePipe,\n AcpGridMenu,\n ],\n})\nexport class AcpGridCell implements OnInit, DoCheck {\n private _utils = inject(DataGridUtils);\n private _differs = inject(KeyValueDiffers);\n private _changeDetectorRef = inject(ChangeDetectorRef);\n\n /** Row data */\n @Input() rowData: Record<string, any> = {};\n\n /** Column definition */\n @Input() colDef!: DataGridColumn;\n\n /** Table data */\n @Input() data: any[] = [];\n\n /** Whether show summary */\n @Input() summary = false;\n\n /** Placeholder for the empty value (`null`, `''`, `[]`) */\n @Input() placeholder = '--';\n\n @Output() rowDataChange = new EventEmitter<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 btn.click?.(rowData);\n }\n}\n","@if (summary) {\n<span\n [title]=\"_getFormatterTooltip(data | cellSummary: colDef)\"\n [innerHTML]=\"_getText(data | cellSummary: colDef)\"\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></span>\n} @else {\n<!-- Default formatting -->\n@switch (colDef.type) {\n<!-- Buttons -->\n@case ('button') { @for ( btn of colDef.buttons | cellActions : rowData : rowChangeRecord :\n$safeNavigationMigration(rowChangeRecord?.currentValue); track btn ) { @if (!btn.iif ||\nbtn.iif(rowData)) { @if (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 : $safeNavigationMigration(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 }\"></mat-icon>\n</button>\n\n<acp-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 : $safeNavigationMigration(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 }\"></mat-icon>\n <span>{{ btn.text | toObservable | async }}</span>\n</button>\n\n<acp-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 : $safeNavigationMigration(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 }\"></mat-icon>\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 : $safeNavigationMigration(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 }\"></mat-icon>\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\n<!-- Image -->\n@case ('image') { @if (_value) {\n<!-- Imagen real -->\n<img class=\"acp-placeholder-image\" [src]=\"_value\" alt=\"img\" />\n} @else {\n<!-- Placeholder -->\n<div class=\"acp-placeholder-box\">\n <svg class=\"acp-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\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\n | number\n : $safeNavigationMigration(colDef.typeParameter?.digitsInfo)\n : $safeNavigationMigration(colDef.typeParameter?.locale)\n )\n \"\n>\n {{ _getText( _value | number : $safeNavigationMigration(colDef.typeParameter?.digitsInfo) :\n $safeNavigationMigration(colDef.typeParameter?.locale) ) }}\n</span>\n}\n<!-- Currency -->\n@case ('currency') {\n<span\n [title]=\"\n _getTooltip(\n _value\n | currency\n : $safeNavigationMigration(colDef.typeParameter?.currencyCode)\n : $safeNavigationMigration(colDef.typeParameter?.display)\n : $safeNavigationMigration(colDef.typeParameter?.digitsInfo)\n : $safeNavigationMigration(colDef.typeParameter?.locale)\n )\n \"\n>\n {{ _getText( _value | currency : $safeNavigationMigration(colDef.typeParameter?.currencyCode) :\n $safeNavigationMigration(colDef.typeParameter?.display) :\n $safeNavigationMigration(colDef.typeParameter?.digitsInfo) :\n $safeNavigationMigration(colDef.typeParameter?.locale) ) }}\n</span>\n}\n<!-- Percent -->\n@case ('percent') {\n<span\n [title]=\"\n _getTooltip(\n _value\n | percent\n : $safeNavigationMigration(colDef.typeParameter?.digitsInfo)\n : $safeNavigationMigration(colDef.typeParameter?.locale)\n )\n \"\n>\n {{ _getText( _value | percent : $safeNavigationMigration(colDef.typeParameter?.digitsInfo) :\n $safeNavigationMigration(colDef.typeParameter?.locale) ) }}\n</span>\n}\n<!-- Date -->\n@case ('date') {\n<span\n [title]=\"\n _getTooltip(\n _value\n | date\n : $safeNavigationMigration(colDef.typeParameter?.format)\n : $safeNavigationMigration(colDef.typeParameter?.timezone)\n : $safeNavigationMigration(colDef.typeParameter?.locale)\n )\n \"\n>\n {{ _getText( _value | date : $safeNavigationMigration(colDef.typeParameter?.format) :\n $safeNavigationMigration(colDef.typeParameter?.timezone) :\n $safeNavigationMigration(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\"></mat-icon>\n } @else if (btn.svgIcon) {\n <mat-icon class=\"acp-grid-icon\" [svgIcon]=\"btn.svgIcon\"></mat-icon>\n }\n</ng-template>\n","export const HEADER_CELL_SELECTOR = '.cdk-header-cell, .mat-header-cell';\n\nexport const HEADER_ROW_SELECTOR = '.cdk-header-row, .mat-header-row';\n\nexport const RESIZE_OVERLAY_SELECTOR = '.mat-column-resize-overlay-thumb';\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\n/** closest implementation that is able to start from non-Element Nodes. */\nexport function closest(\n element: EventTarget | Element | null | undefined,\n selector: string,\n): Element | null {\n if (!(element instanceof Node)) {\n return null;\n }\n\n let curr: Node | null = element;\n while (curr != null && !(curr instanceof Element)) {\n curr = curr.parentNode;\n }\n\n return curr?.closest(selector) ?? null;\n}\n","import {\n AfterViewInit,\n Directive,\n ElementRef,\n inject,\n InjectionToken,\n Input,\n NgZone,\n OnDestroy,\n Renderer2,\n} from '@angular/core';\nimport { _IdGenerator } from '@angular/cdk/a11y';\nimport { merge, Subject } from 'rxjs';\nimport { mapTo, pairwise, startWith, take, takeUntil } from 'rxjs/operators';\n\nimport { ColumnResizeNotifier, ColumnResizeNotifierSource } from './column-resize-notifier';\nimport { HEADER_CELL_SELECTOR, RESIZE_OVERLAY_SELECTOR } from './selectors';\nimport { HeaderRowEventDispatcher } from './event-dispatcher';\nimport { closest } from './polyfill';\n\nconst HOVER_OR_ACTIVE_CLASS = 'cdk-column-resize-hover-or-active';\nconst WITH_RESIZED_COLUMN_CLASS = 'cdk-column-resize-with-resized-column';\n\n/** Configurable options for column resize. */\nexport interface ColumnResizeOptions {\n liveResizeUpdates?: boolean; // Defaults to true.\n}\n\nexport const COLUMN_RESIZE_OPTIONS = new InjectionToken<ColumnResizeOptions>(\n 'CdkColumnResizeOptions',\n);\n\n/**\n * Base class for ColumnResize directives which attach to mat-table elements to\n * provide common events and services for column resizing.\n */\n@Directive()\nexport abstract class ColumnResize implements AfterViewInit, OnDestroy {\n private _renderer = inject(Renderer2);\n private _eventCleanups: (() => void)[] | undefined;\n protected readonly destroyed = new Subject<void>();\n\n /* Publicly accessible interface for triggering and being notified of resizes. */\n abstract readonly columnResizeNotifier: ColumnResizeNotifier;\n\n /* ElementRef that this directive is attached to. Exposed For use by column-level directives */\n abstract readonly elementRef: ElementRef<HTMLElement>;\n\n protected abstract readonly eventDispatcher: HeaderRowEventDispatcher;\n protected abstract readonly ngZone: NgZone;\n protected abstract readonly notifier: ColumnResizeNotifierSource;\n\n /** Unique ID for this table instance. */\n protected readonly selectorId = inject(_IdGenerator).getId('cdk-column-resize-');\n\n /** The id attribute of the table, if specified. */\n id?: string;\n\n /** @docs-private Whether a call to updateStickyColumnStyles is pending after a resize. */\n _flushPending = false;\n\n /**\n * Whether to update the column's width continuously as the mouse position\n * changes, or to wait until mouseup to apply the new size.\n */\n @Input() liveResizeUpdates =\n inject(COLUMN_RESIZE_OPTIONS, { optional: true })?.liveResizeUpdates ?? true;\n\n ngAfterViewInit() {\n this.elementRef.nativeElement!.classList.add(this.getUniqueCssClass());\n\n this._listenForRowHoverEvents();\n this._listenForResizeActivity();\n this._listenForHoverActivity();\n }\n\n ngOnDestroy() {\n this._eventCleanups?.forEach(cleanup => cleanup());\n this.destroyed.next();\n this.destroyed.complete();\n }\n\n /** Gets the unique CSS class name for this table instance. */\n getUniqueCssClass() {\n return this.selectorId;\n }\n\n /** Gets the ID for this table used for column size persistance. */\n getTableId(): string {\n return String(this.elementRef.nativeElement.id);\n }\n\n /** Called when a column in the table is resized. Applies a css class to the table element. */\n setResized() {\n this.elementRef.nativeElement!.classList.add(WITH_RESIZED_COLUMN_CLASS);\n }\n\n private _listenForRowHoverEvents() {\n this.ngZone.runOutsideAngular(() => {\n const element = this.elementRef.nativeElement;\n\n this._eventCleanups = [\n this._renderer.listen(element, 'mouseover', (event: MouseEvent) => {\n this.eventDispatcher.headerCellHovered.next(closest(event.target, HEADER_CELL_SELECTOR));\n }),\n this._renderer.listen(element, 'mouseleave', (event: MouseEvent) => {\n if (\n event.relatedTarget &&\n !(event.relatedTarget as Element).matches(RESIZE_OVERLAY_SELECTOR)\n ) {\n this.eventDispatcher.headerCellHovered.next(null);\n }\n }),\n ];\n });\n }\n\n private _listenForResizeActivity() {\n merge(\n this.eventDispatcher.overlayHandleActiveForCell.pipe(mapTo(undefined)),\n this.notifier.triggerResize.pipe(mapTo(undefined)),\n this.notifier.resizeCompleted.pipe(mapTo(undefined)),\n )\n .pipe(take(1), takeUntil(this.destroyed))\n .subscribe(() => {\n this.setResized();\n });\n }\n\n private _listenForHoverActivity() {\n this.eventDispatcher.headerRowHoveredOrActiveDistinct\n .pipe(startWith(null), pairwise(), takeUntil(this.destroyed))\n .subscribe(([previousRow, hoveredRow]) => {\n if (hoveredRow) {\n hoveredRow.classList.add(HOVER_OR_ACTIVE_CLASS);\n }\n if (previousRow) {\n previousRow.classList.remove(HOVER_OR_ACTIVE_CLASS);\n }\n });\n }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { Observable, Subject } from 'rxjs';\n\n/** Indicates the width of a column. */\nexport interface ColumnSize {\n /** The ID/name of the column, as defined in CdkColumnDef. */\n readonly columnId: string;\n\n /** The width in pixels of the column. */\n readonly size: number;\n\n /** The width in pixels of the column prior to this update, if known. */\n readonly previousSize?: number;\n}\n\n/** Interface describing column size changes. */\nexport interface ColumnSizeAction extends ColumnSize {\n /**\n * Whether the resize action should be applied instantaneously. False for events triggered during\n * a UI-triggered resize (such as with the mouse) until the mouse button is released. True\n * for all programmatically triggered resizes.\n */\n readonly completeImmediately?: boolean;\n\n /**\n * Whether the resize action is being applied to a sticky/stickyEnd column.\n */\n readonly isStickyColumn?: boolean;\n}\n\n/**\n * Originating source of column resize events within a table.\n * @docs-private\n */\n@Injectable()\nexport class ColumnResizeNotifierSource {\n /** Emits when an in-progress resize is canceled. */\n readonly resizeCanceled = new Subject<ColumnSizeAction>();\n\n /** Emits when a resize is applied. */\n readonly resizeCompleted = new Subject<ColumnSize>();\n\n /** Triggers a resize action. */\n readonly triggerResize = new Subject<ColumnSizeAction>();\n}\n\n/** Service for triggering column resizes imperatively or being notified of them. */\n@Injectable()\nexport class ColumnResizeNotifier {\n private readonly _source = inject(ColumnResizeNotifierSource);\n\n /** Emits whenever a column is resized. */\n readonly resizeCompleted: Observable<ColumnSize> = this._source.resizeCompleted;\n\n /** Instantly resizes the specified column. */\n resize(columnId: string, size: number): void {\n this._source.triggerResize.next({\n columnId,\n size,\n completeImmediately: true,\n isStickyColumn: true,\n });\n }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport { Injectable, NgZone, inject } from '@angular/core';\nimport { combineLatest, MonoTypeOperatorFunction, Observable, Subject } from 'rxjs';\nimport { distinctUntilChanged, map, share, skip, startWith } from 'rxjs/operators';\nimport { closest } from './polyfill';\n\nimport { HEADER_ROW_SELECTOR } from './selectors';\n\n/** Coordinates events between the column resize directives. */\n@Injectable()\nexport class HeaderRowEventDispatcher {\n private readonly _ngZone = inject(NgZone);\n\n /**\n * Emits the currently hovered header cell or null when no header cells are hovered.\n * Exposed publicly for events to feed in, but subscribers should use headerCellHoveredDistinct,\n * defined below.\n */\n readonly headerCellHovered = new Subject<Element | null>();\n\n /**\n * Emits the header cell for which a user-triggered resize is active or null\n * when no resize is in progress.\n */\n readonly overlayHandleActiveForCell = new Subject<Element | null>();\n\n /** Distinct and shared version of headerCellHovered. */\n readonly headerCellHoveredDistinct = this.headerCellHovered.pipe(distinctUntilChanged(), share());\n\n /**\n * Emits the header that is currently hovered or hosting an active resize event (with active\n * taking precedence).\n */\n readonly headerRowHoveredOrActiveDistinct = combineLatest([\n this.headerCellHoveredDistinct.pipe(\n map(cell => closest(cell, HEADER_ROW_SELECTOR)),\n startWith(null),\n distinctUntilChanged(),\n ),\n this.overlayHandleActiveForCell.pipe(\n map(cell => closest(cell, HEADER_ROW_SELECTOR)),\n startWith(null),\n distinctUntilChanged(),\n ),\n ]).pipe(\n skip(1), // Ignore initial [null, null] emission.\n map(([hovered, active]) => active || hovered),\n distinctUntilChanged(),\n share(),\n );\n\n private readonly _headerRowHoveredOrActiveDistinctReenterZone =\n this.headerRowHoveredOrActiveDistinct.pipe(this._enterZone(), share());\n\n // Optimization: Share row events observable with subsequent callers.\n // At startup, calls will be sequential by row (and typically there's only one).\n private _lastSeenRow: Element | null = null;\n private _lastSeenRowHover: Observable<boolean> | null = null;\n\n /**\n * Emits whether the specified row should show its overlay controls.\n * Emission occurs within the NgZone.\n */\n resizeOverlayVisibleForHeaderRow(row: Element): Observable<boolean> {\n if (row !== this._lastSeenRow) {\n this._lastSeenRow = row;\n this._lastSeenRowHover = this._headerRowHoveredOrActiveDistinctReenterZone.pipe(\n map(hoveredRow => hoveredRow === row),\n distinctUntilChanged(),\n share(),\n );\n }\n\n return this._lastSeenRowHover!;\n }\n\n private _enterZone<T>(): MonoTypeOperatorFunction<T> {\n return (source: Observable<T>) =>\n new Observable<T>(observer =>\n source.subscribe({\n next: value => this._ngZone.run(() => observer.next(value)),\n error: err => observer.error(err),\n complete: () => observer.complete(),\n }),\n );\n }\n}\n","import { Injectable, InjectionToken, NgZone, inject } from '@angular/core';\n\n/**\n * @docs-private\n */\nexport class _Schedule {\n tasks: (() => unknown)[] = [];\n endTasks: (() => unknown)[] = [];\n}\n\n/** Injection token used to provide a coalesced style scheduler. */\nexport const _COALESCED_STYLE_SCHEDULER = new InjectionToken<_CoalescedStyleScheduler>(\n '_COALESCED_STYLE_SCHEDULER',\n);\n\n/**\n * Allows grouping up CSSDom mutations after the current execution context.\n * This can significantly improve performance when separate consecutive functions are\n * reading from the CSSDom and then mutating it.\n *\n * @docs-private\n */\n@Injectable()\nexport class _CoalescedStyleScheduler {\n private _currentSchedule: _Schedule | null = null;\n private _ngZone = inject(NgZone);\n\n /**\n * Schedules the specified task to run at the end of the current VM turn.\n */\n schedule(task: () => unknown): void {\n this._createScheduleIfNeeded();\n\n this._currentSchedule!.tasks.push(task);\n }\n\n /**\n * Schedules the specified task to run after other scheduled tasks at the end of the current\n * VM turn.\n */\n scheduleEnd(task: () => unknown): void {\n this._createScheduleIfNeeded();\n\n this._currentSchedule!.endTasks.push(task);\n }\n\n private _createScheduleIfNeeded() {\n if (this._currentSchedule) {\n return;\n }\n\n this._currentSchedule = new _Schedule();\n\n this._ngZone.runOutsideAngular(() =>\n // TODO(mmalerba): Scheduling this using something that runs less frequently\n // (e.g. requestAnimationFrame, setTimeout, etc.) causes noticeable jank with the column\n // resizer. We should audit the usages of schedule / scheduleEnd in that component and see\n // if we can refactor it so that we don't need to flush the tasks quite so frequently.\n queueMicrotask(() => {\n while (this._currentSchedule!.tasks.length || this._currentSchedule!.endTasks.length) {\n const schedule = this._currentSchedule!;\n\n // Capture new tasks scheduled by the current set of tasks.\n this._currentSchedule = new _Schedule();\n\n for (const task of schedule.tasks) {\n task();\n }\n\n for (const task of schedule.endTasks) {\n task();\n }\n }\n\n this._currentSchedule = null;\n }),\n );\n }\n}\n","import { Injectable, OnDestroy, Provider, CSP_NONCE, inject, DOCUMENT } from '@angular/core';\n\nimport { coerceCssPixelValue } from '@angular/cdk/coercion';\nimport { CdkTable } from '@angular/cdk/table';\n\nimport { ColumnResize } from './column-resize';\nimport { _COALESCED_STYLE_SCHEDULER, _CoalescedStyleScheduler } from './coalesced-style-scheduler';\n\n@Injectable()\nexport abstract class ResizeStrategy {\n protected abstract readonly columnResize: ColumnResize;\n protected abstract readonly styleScheduler: _CoalescedStyleScheduler;\n protected abstract readonly table: CdkTable<unknown>;\n\n private _pendingResizeDelta: number | null = null;\n\n abstract applyColumnSize(\n cssFriendlyColumnName: string,\n columnHeader: HTMLElement,\n sizeInPx: number,\n previousSizeInPx?: number,\n ): void;\n\n abstract applyMinColumnSize(\n cssFriendlyColumnName: string,\n columnHeader: HTMLElement,\n minSizeInPx: number,\n ): void;\n\n abstract applyMaxColumnSize(\n cssFriendlyColumnName: string,\n columnHeader: HTMLElement,\n minSizeInPx: number,\n ): void;\n\n protected updateTableWidthAndStickyColumns(delta: number): void {\n if (this._pendingResizeDelta === null) {\n const tableElement = this.columnResize.elementRef.nativeElement;\n const tableWidth = this.getElementWidth(tableElement);\n\n this.styleScheduler.schedule(() => {\n tableElement.style.width = coerceCssPixelValue(tableWidth + this._pendingResizeDelta!);\n\n this._pendingResizeDelta = null;\n });\n\n this.styleScheduler.scheduleEnd(() => {\n this.table.updateStickyColumnStyles();\n });\n }\n\n this._pendingResizeDelta = (this._pendingResizeDelta ?? 0) + delta;\n }\n\n protected getElementWidth(element: HTMLElement) {\n return coercePixelsFromCssValue(element.style.width) || element.offsetWidth;\n }\n}\n\n@Injectable()\nexport class TableLayoutFixedResizeStrategy extends ResizeStrategy {\n protected readonly columnResize = inject(ColumnResize);\n protected readonly styleScheduler = inject<_CoalescedStyleScheduler>(_COALESCED_STYLE_SCHEDULER);\n protected readonly table = inject<CdkTable<unknown>>(CdkTable);\n\n applyColumnSize(\n _: string,\n columnHeader: HTMLElement,\n sizeInPx: number,\n previousSizeInPx?: number,\n ): void {\n const delta = sizeInPx - (previousSizeInPx ?? this.getElementWidth(columnHeader));\n\n if (delta === 0) {\n return;\n }\n\n this.styleScheduler.schedule(() => {\n columnHeader.style.width = coerceCssPixelValue(sizeInPx);\n });\n\n this.updateTableWidthAndStickyColumns(delta);\n }\n\n applyMinColumnSize(_: string, columnHeader: HTMLElement, sizeInPx: number): void {\n const currentWidth = this.getElementWidth(columnHeader);\n const newWidth = Math.max(currentWidth, sizeInPx);\n\n this.applyColumnSize(_, columnHeader, newWidth, currentWidth);\n }\n\n applyMaxColumnSize(_: string, columnHeader: HTMLElement, sizeInPx: number): void {\n const currentWidth = this.getElementWidth(columnHeader);\n const newWidth = Math.min(currentWidth, sizeInPx);\n\n this.applyColumnSize(_, columnHeader, newWidth, currentWidth);\n }\n}\n\n@Injectable()\nexport class CdkFlexTableResizeStrategy extends ResizeStrategy implements OnDestroy {\n protected readonly columnResize = inject(ColumnResize);\n protected readonly styleScheduler = inject<_CoalescedStyleScheduler>(_COALESCED_STYLE_SCHEDULER);\n protected readonly table = inject<CdkTable<unknown>>(CdkTable);\n private readonly _nonce = inject(CSP_NONCE, { optional: true });\n\n private readonly _document = inject(DOCUMENT);\n private readonly _columnIndexes = new Map<string, number>();\n private readonly _columnProperties = new Map<string, Map<string, string>>();\n\n private _styleElement?: HTMLStyleElement;\n private _indexSequence = 0;\n\n protected readonly defaultMinSize = 0;\n protected readonly defaultMaxSize = Number.MAX_SAFE_INTEGER;\n\n applyColumnSize(\n cssFriendlyColumnName: string,\n columnHeader: HTMLElement,\n sizeInPx: number,\n previousSizeInPx?: number,\n ): void {\n // Optimization: Check applied width first as we probably set it already before reading\n // offsetWidth which triggers layout.\n const delta =\n sizeInPx -\n (previousSizeInPx ??\n (this._getAppliedWidth(cssFriendlyColumnName) || columnHeader.offsetWidth));\n\n if (delta === 0) {\n return;\n }\n\n const cssSize = coerceCssPixelValue(sizeInPx);\n\n this._applyProperty(cssFriendlyColumnName, 'flex', `0 0.01 ${cssSize}`);\n this.updateTableWidthAndStickyColumns(delta);\n }\n\n applyMinColumnSize(cssFriendlyColumnName: string, _: HTMLElement, sizeInPx: number): void {\n const cssSize = coerceCssPixelValue(sizeInPx);\n\n this._applyProperty(\n cssFriendlyColumnName,\n 'min-width',\n cssSize,\n sizeInPx !== this.defaultMinSize,\n );\n this.updateTableWidthAndStickyColumns(0);\n }\n\n applyMaxColumnSize(cssFriendlyColumnName: string, _: HTMLElement, sizeInPx: number): void {\n const cssSize = coerceCssPixelValue(sizeInPx);\n\n this._applyProperty(\n cssFriendlyColumnName,\n 'max-width',\n cssSize,\n sizeInPx !== this.defaultMaxSize,\n );\n this.updateTableWidthAndStickyColumns(0);\n }\n\n protected getColumnCssClass(cssFriendlyColumnName: string): string {\n return `cdk-column-${cssFriendlyColumnName}`;\n }\n\n ngOnDestroy(): void {\n this._styleElement?.remove();\n this._styleElement = undefined;\n }\n\n private _getPropertyValue(cssFriendlyColumnName: string, key: string): string | undefined {\n const properties = this._getColumnPropertiesMap(cssFriendlyColumnName);\n return properties.get(key);\n }\n\n private _getAppliedWidth(cssFriendslyColumnName: string): number {\n return coercePixelsFromFlexValue(this._getPropertyValue(cssFriendslyColumnName, 'flex'));\n }\n\n private _applyProperty(\n cssFriendlyColumnName: string,\n key: string,\n value: string,\n enable = true,\n ): void {\n const properties = this._getColumnPropertiesMap(cssFriendlyColumnName);\n\n this.styleScheduler.schedule(() => {\n if (enable) {\n properties.set(key, value);\n } else {\n properties.delete(key);\n }\n this._applySizeCss(cssFriendlyColumnName);\n });\n }\n\n private _getStyleSheet(): CSSStyleSheet {\n if (!this._styleElement) {\n this._styleElement = this._document.createElement('style');\n\n if (this._nonce) {\n this._styleElement.setAttribute('nonce', this._nonce);\n }\n\n this._styleElement.appendChild(this._document.createTextNode(''));\n this._document.head.appendChild(this._styleElement);\n }\n\n return this._styleElement.sheet as CSSStyleSheet;\n }\n\n private _getColumnPropertiesMap(cssFriendlyColumnName: string): Map<string, string> {\n let properties = this._columnProperties.get(cssFriendlyColumnName);\n if (properties === undefined) {\n properties = new Map<string, string>();\n this._columnProperties.set(cssFriendlyColumnName, properties);\n }\n return properties;\n }\n\n private _applySizeCss(cssFriendlyColumnName: string) {\n const properties = this._getColumnPropertiesMap(cssFriendlyColumnName);\n const propertyKeys = Array.from(properties.keys());\n\n let index = this._columnIndexes.get(cssFriendlyColumnName);\n if (index === undefined) {\n if (!propertyKeys.length) {\n // Nothing to set or unset.\n return;\n }\n\n index = this._indexSequence++;\n this._columnIndexes.set(cssFriendlyColumnName, index);\n } else {\n this._getStyleSheet().deleteRule(index);\n }\n\n const columnClassName = this.getColumnCssClass(cssFriendlyColumnName);\n const tableClassName = this.columnResize.getUniqueCssClass();\n\n const selector = `.${tableClassName} .${columnClassName}`;\n const body = propertyKeys.map(key => `${key}:${properties.get(key)}`).join(';');\n\n this._getStyleSheet().insertRule(`${selector} {${body}}`, index!);\n }\n}\n\n/** Converts CSS pixel values to numbers, eg \"123px\" to 123. Returns NaN for non pixel values. */\nfunction coercePixelsFromCssValue(cssValue: string): number {\n return Number(cssValue.match(/(\\d+)px/)?.[1]);\n}\n\n/**\n * Converts CSS flex values as set in CdkFlexTableResizeStrategy to numbers,\n * eg \"0 0.01 123px\" to 123.\n */\nfunction coercePixelsFromFlexValue(flexValue: string | undefined): number {\n return Number(flexValue?.match(/0 0\\.01 (\\d+)px/)?.[1]);\n}\n\nexport const TABLE_LAYOUT_FIXED_RESIZE_STRATEGY_PROVIDER: Provider = {\n provide: ResizeStrategy,\n useClass: TableLayoutFixedResizeStrategy,\n};\nexport const FLEX_RESIZE_STRATEGY_PROVIDER: Provider = {\n provide: ResizeStrategy,\n useClass: CdkFlexTableResizeStrategy,\n};\n","import { Provider } from '@angular/core';\nimport { ColumnResizeNotifier, ColumnResizeNotifierSource } from '../column-resize-notifier';\nimport { HeaderRowEventDispatcher } from '../event-dispatcher';\nimport {\n TABLE_LAYOUT_FIXED_RESIZE_STRATEGY_PROVIDER,\n FLEX_RESIZE_STRATEGY_PROVIDER,\n} from '../resize-strategy';\nimport { _COALESCED_STYLE_SCHEDULER, _CoalescedStyleScheduler } from '../coalesced-style-scheduler';\n\nconst PROVIDERS: Provider[] = [\n ColumnResizeNotifier,\n HeaderRowEventDispatcher,\n ColumnResizeNotifierSource,\n { provide: _COALESCED_STYLE_SCHEDULER, useClass: _CoalescedStyleScheduler },\n];\n\nexport const TABLE_PROVIDERS: Provider[] = [\n ...PROVIDERS,\n TABLE_LAYOUT_FIXED_RESIZE_STRATEGY_PROVIDER,\n];\nexport const FLEX_PROVIDERS: Provider[] = [...PROVIDERS, FLEX_RESIZE_STRATEGY_PROVIDER];\n","import { Directive, ElementRef, NgZone, inject } from '@angular/core';\nimport { CdkTable } from '@angular/cdk/table';\n\nimport { ColumnResize } from '../column-resize';\nimport { ColumnResizeNotifier, ColumnResizeNotifierSource } from '../column-resize-notifier';\nimport { HeaderRowEventDispatcher } from '../event-dispatcher';\nimport { TABLE_PROVIDERS } from './constants';\n\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: 'table[cdk-table][columnResize]',\n providers: [\n ...TABLE_PROVIDERS,\n {\n provide: ColumnResize,\n useExisting: CdkColumnResize,\n },\n ],\n})\nexport class CdkColumnResize extends ColumnResize {\n readonly columnResizeNotifier = inject(ColumnResizeNotifier);\n readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n protected readonly eventDispatcher = inject(HeaderRowEventDispatcher);\n protected readonly ngZone = inject(NgZone);\n protected readonly notifier = inject(ColumnResizeNotifierSource);\n protected readonly table = inject<CdkTable<unknown>>(CdkTable);\n}\n","import { Directive, ElementRef, NgZone, inject } from '@angular/core';\nimport { CdkTable } from '@angular/cdk/table';\n\nimport { ColumnResize } from '../column-resize';\nimport { ColumnResizeNotifier, ColumnResizeNotifierSource } from '../column-resize-notifier';\nimport { HeaderRowEventDispatcher } from '../event-dispatcher';\nimport { FLEX_PROVIDERS } from './constants';\n\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: 'cdk-table[columnResize]',\n providers: [...FLEX_PROVIDERS, { provide: ColumnResize, useExisting: CdkColumnResizeFlex }],\n})\nexport class CdkColumnResizeFlex extends ColumnResize {\n readonly columnResizeNotifier = inject(ColumnResizeNotifier);\n readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n protected readonly eventDispatcher = inject(HeaderRowEventDispatcher);\n protected readonly ngZone = inject(NgZone);\n protected readonly notifier = inject(ColumnResizeNotifierSource);\n protected readonly table = inject<CdkTable<unknown>>(CdkTable);\n}\n","import { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\n\n/**\n * Can be provided by the host application to enable persistence of column resize state.\n */\n@Injectable()\nexport abstract class ColumnSizeStore {\n /** Returns the persisted size of the specified column in the specified table. */\n abstract getSize(tableId: string, columnId: string): Observable<number | null> | null;\n\n /** Persists the size of the specified column in the specified table. */\n abstract setSize(tableId: string, columnId: string, sizePx: number): void;\n}\n","import { ElementRef } from '@angular/core';\nimport { OverlayRef } from '@angular/cdk/overlay';\n\nexport class ResizeRef {\n constructor(\n readonly origin: ElementRef,\n readonly overlayRef: OverlayRef,\n readonly minWidthPx: number,\n readonly maxWidthPx: number,\n readonly liveUpdates = true,\n ) {}\n}\n","import { Directionality } from '@angular/cdk/bidi';\nimport { Overlay, OverlayRef } from '@angular/cdk/overlay';\nimport { ComponentPortal } from '@angular/cdk/portal';\nimport { CdkColumnDef } from '@angular/cdk/table';\nimport {\n AfterViewInit,\n ChangeDetectorRef,\n Directive,\n ElementRef,\n Injector,\n NgZone,\n OnDestroy,\n Type,\n ViewContainerRef,\n} from '@angular/core';\nimport { merge, Subject } from 'rxjs';\nimport { filter, takeUntil } from 'rxjs/operators';\n\nimport { _CoalescedStyleScheduler } from './coalesced-style-scheduler';\nimport { ColumnResize } from './column-resize';\nimport { ColumnResizeNotifierSource, ColumnSizeAction } from './column-resize-notifier';\nimport { HeaderRowEventDispatcher } from './event-dispatcher';\nimport { ResizeOverlayHandle } from './overlay-handle';\nimport { closest } from './polyfill';\nimport { ResizeRef } from './resize-ref';\nimport { ResizeStrategy } from './resize-strategy';\nimport { HEADER_ROW_SELECTOR } from './selectors';\n\nconst OVERLAY_ACTIVE_CLASS = 'cdk-resizable-overlay-thumb-active';\n\n/**\n * Base class for Resizable directives which are applied to column headers to make those columns\n * resizable.\n */\n@Directive()\nexport abstract class Resizable<HandleComponent extends ResizeOverlayHandle>\n implements AfterViewInit, OnDestroy\n{\n protected isResizable = true;\n\n protected minWidthPxInternal = 0;\n protected maxWidthPxInternal: number = Number.MAX_SAFE_INTEGER;\n\n protected inlineHandle?: HTMLElement;\n protected overlayRef?: OverlayRef;\n protected readonly destroyed = new Subject<void>();\n\n protected abstract readonly columnDef: CdkColumnDef;\n protected abstract readonly columnResize: ColumnResize;\n protected abstract readonly directionality: Directionality;\n protected abstract readonly document: Document;\n protected abstract readonly elementRef: ElementRef;\n protected abstract readonly eventDispatcher: HeaderRowEventDispatcher;\n protected abstract readonly injector: Injector;\n protected abstract readonly ngZone: NgZone;\n protected abstract readonly overlay: Overlay;\n protected abstract readonly resizeNotifier: ColumnResizeNotifierSource;\n protected abstract readonly resizeStrategy: ResizeStrategy;\n protected abstract readonly styleScheduler: _CoalescedStyleScheduler;\n protected abstract readonly viewContainerRef: ViewContainerRef;\n protected abstract readonly changeDetectorRef: ChangeDetectorRef;\n\n private _viewInitialized = false;\n private _isDestroyed = false;\n\n /** The minimum width to allow the column to be sized to. */\n get minWidthPx(): number {\n return this.minWidthPxInternal;\n }\n set minWidthPx(value: number) {\n if (value) {\n this.minWidthPxInternal = value;\n }\n\n this.columnResize.setResized();\n if (this.elementRef.nativeElement && this._viewInitialized) {\n this._applyMinWidthPx();\n }\n }\n\n /** The maximum width to allow the column to be sized to. */\n get maxWidthPx(): number {\n return this.maxWidthPxInternal;\n }\n set maxWidthPx(value: number) {\n if (value) {\n this.maxWidthPxInternal = value;\n }\n\n this.columnResize.setResized();\n if (this.elementRef.nativeElement && this._viewInitialized) {\n this._applyMaxWidthPx();\n }\n }\n\n ngAfterViewInit() {\n if (this.isResizable) {\n this._listenForRowHoverEvents();\n this._listenForResizeEvents();\n this._appendInlineHandle();\n\n this.styleScheduler.scheduleEnd(() => {\n if (this._isDestroyed) return;\n this._viewInitialized = true;\n this._applyMinWidthPx();\n this._applyMaxWidthPx();\n });\n }\n }\n\n ngOnDestroy(): void {\n this._isDestroyed = true;\n this.destroyed.next();\n this.destroyed.complete();\n this.inlineHandle?.remove();\n this.overlayRef?.dispose();\n }\n\n protected abstract getInlineHandleCssClassName(): string;\n\n protected abstract getOverlayHandleComponentType(): Type<HandleComponent>;\n\n private _createOverlayForHandle(): OverlayRef {\n // Use of overlays allows us to properly capture click events spanning parts\n // of two table cells and is also useful for displaying a resize thumb\n // over both cells and extending it down the table as needed.\n\n const isRtl = this.directionality.value === 'rtl';\n const positionStrategy = this.overlay\n .position()\n .flexibleConnectedTo(this.elementRef.nativeElement)\n .withFlexibleDimensions(false)\n .withGrowAfterOpen(false)\n .withPush(false)\n .withDefaultOffsetX(isRtl ? 1 : 0)\n .withPositions([\n {\n originX: isRtl ? 'start' : 'end',\n originY: 'top',\n overlayX: 'center',\n overlayY: 'top',\n },\n ]);\n\n return this.overlay.create({\n // Always position the overlay based on left-indexed coordinates.\n direction: 'ltr',\n disposeOnNavigation: true,\n positionStrategy,\n scrollStrategy: this.overlay.scrollStrategies.reposition(),\n width: '16px',\n });\n }\n\n private _listenForRowHoverEvents(): void {\n const element = this.elementRef.nativeElement;\n const takeUntilDestroyed = takeUntil<boolean>(this.destroyed);\n\n this.eventDispatcher\n .resizeOverlayVisibleForHeaderRow(closest(element, HEADER_ROW_SELECTOR)!)\n .pipe(takeUntilDestroyed)\n .subscribe(hoveringRow => {\n if (hoveringRow) {\n if (!this.overlayRef) {\n this.overlayRef = this._createOverlayForHandle();\n }\n\n this._showHandleOverlay();\n } else if (this.overlayRef) {\n // todo - can't detach during an active resize - need to work that out\n this.overlayRef.detach();\n }\n });\n }\n\n private _listenForResizeEvents() {\n const takeUntilDestroyed = takeUntil<ColumnSizeAction>(this.destroyed);\n\n merge(this.resizeNotifier.resizeCanceled, this.resizeNotifier.triggerResize)\n .pipe(\n takeUntilDestroyed,\n filter(columnSize => columnSize.columnId === this.columnDef.name),\n )\n .subscribe(({ size, previousSize, completeImmediately }) => {\n this.elementRef.nativeElement.classList.add(OVERLAY_ACTIVE_CLASS);\n this._applySize(size, previousSize);\n\n if (completeImmediately) {\n this._completeResizeOperation();\n }\n });\n\n merge(this.resizeNotifier.resizeCanceled, this.resizeNotifier.resizeCompleted)\n .pipe(takeUntilDestroyed)\n .subscribe(columnSize => {\n this._cleanUpAfterResize(columnSize);\n });\n }\n\n private _completeResizeOperation(): void {\n this.ngZone.run(() => {\n this.resizeNotifier.resizeCompleted.next({\n columnId: this.columnDef.name,\n size: this.elementRef.nativeElement.offsetWidth,\n });\n });\n }\n\n private _cleanUpAfterResize(columnSize: ColumnSizeAction): void {\n this.elementRef.nativeElement.classList.remove(OVERLAY_ACTIVE_CLASS);\n\n if (this.overlayRef && this.overlayRef.hasAttached()) {\n this._updateOverlayHandleHeight();\n this.overlayRef.updatePosition();\n\n if (columnSize.columnId === this.columnDef.name) {\n this.inlineHandle!.focus();\n }\n }\n }\n\n private _createHandlePortal(): ComponentPortal<HandleComponent> {\n const injector = Injector.create({\n parent: this.injector,\n providers: [\n {\n provide: ResizeRef,\n useValue: new ResizeRef(\n this.elementRef,\n this.overlayRef!,\n this.minWidthPx,\n this.maxWidthPx,\n ),\n },\n ],\n });\n\n return new ComponentPortal(\n this.getOverlayHandleComponentType(),\n this.viewContainerRef,\n injector,\n );\n }\n\n private _showHandleOverlay(): void {\n this._updateOverlayHandleHeight();\n this.overlayRef!.attach(this._createHandlePortal());\n\n // Needed to ensure that all of the lifecycle hooks inside the overlay run immediately.\n this.changeDetectorRef.markForCheck();\n }\n\n private _updateOverlayHandleHeight() {\n this.overlayRef!.updateSize({ height: this.elementRef.nativeElement.offsetHeight });\n }\n\n private _applySize(sizeInPixels: number, previousSize?: number): void {\n const sizeToApply = Math.min(Math.max(sizeInPixels, this.minWidthPx, 0), this.maxWidthPx);\n\n this.resizeStrategy.applyColumnSize(\n this.columnDef.cssClassFriendlyName,\n this.elementRef.nativeElement,\n sizeToApply,\n previousSize,\n );\n }\n\n private _applyMinWidthPx(): void {\n this.resizeStrategy.applyMinColumnSize(\n this.columnDef.cssClassFriendlyName,\n this.elementRef.nativeElement,\n this.minWidthPx,\n );\n }\n\n private _applyMaxWidthPx(): void {\n this.resizeStrategy.applyMaxColumnSize(\n this.columnDef.cssClassFriendlyName,\n this.elementRef.nativeElement,\n this.maxWidthPx,\n );\n }\n\n private _appendInlineHandle(): void {\n this.styleScheduler.schedule(() => {\n this.inlineHandle = this.document.createElement('div');\n this.inlineHandle.tabIndex = 0;\n this.inlineHandle.className = this.getInlineHandleCssClassName();\n\n // TODO: Apply correct aria role (probably slider) after a11y spec questions resolved.\n\n this.elementRef.nativeElement.appendChild(this.inlineHandle);\n });\n }\n}\n","import {\n AfterViewInit,\n Directive,\n ElementRef,\n OnDestroy,\n NgZone,\n Renderer2,\n inject,\n} from '@angular/core';\nimport { coerceCssPixelValue } from '@angular/cdk/coercion';\nimport { Directionality } from '@angular/cdk/bidi';\nimport { ESCAPE } from '@angular/cdk/keycodes';\nimport { CdkColumnDef } from '@angular/cdk/table';\nimport { Subject, merge, Observable } from 'rxjs';\nimport {\n distinctUntilChanged,\n filter,\n map,\n mapTo,\n pairwise,\n startWith,\n takeUntil,\n} from 'rxjs/operators';\n\nimport { HEADER_CELL_SELECTOR } from './selectors';\nimport { ColumnResizeNotifierSource } from './column-resize-notifier';\nimport { HeaderRowEventDispatcher } from './event-dispatcher';\nimport { ResizeRef } from './resize-ref';\nimport { _CoalescedStyleScheduler } from './coalesced-style-scheduler';\nimport { closest } from './polyfill';\n\n@Directive()\nexport abstract class ResizeOverlayHandle implements AfterViewInit, OnDestroy {\n private _renderer = inject(Renderer2);\n protected readonly destroyed = new Subject<void>();\n\n protected abstract readonly columnDef: CdkColumnDef;\n protected abstract readonly document: Document;\n protected abstract readonly directionality: Directionality;\n protected abstract readonly elementRef: ElementRef;\n protected abstract readonly eventDispatcher: HeaderRowEventDispatcher;\n protected abstract readonly ngZone: NgZone;\n protected abstract readonly resizeNotifier: ColumnResizeNotifierSource;\n protected abstract readonly resizeRef: ResizeRef;\n protected abstract readonly styleScheduler: _CoalescedStyleScheduler;\n\n private _cumulativeDeltaX = 0;\n\n ngAfterViewInit() {\n this._listenForMouseEvents();\n }\n\n ngOnDestroy() {\n this.destroyed.next();\n this.destroyed.complete();\n }\n\n private _listenForMouseEvents() {\n this.ngZone.runOutsideAngular(() => {\n this._observableFromEvent<MouseEvent>(this.elementRef.nativeElement!, 'mouseenter')\n .pipe(mapTo(this.resizeRef.origin.nativeElement!), takeUntil(this.destroyed))\n .subscribe(cell => this.eventDispatcher.headerCellHovered.next(cell));\n\n this._observableFromEvent<MouseEvent>(this.elementRef.nativeElement!, 'mouseleave')\n .pipe(\n map(\n event =>\n event.relatedTarget && closest(event.relatedTarget as Element, HEADER_CELL_SELECTOR),\n ),\n takeUntil(this.destroyed),\n )\n .subscribe(cell => this.eventDispatcher.headerCellHovered.next(cell));\n\n this._observableFromEvent<MouseEvent>(this.elementRef.nativeElement!, 'mousedown')\n .pipe(takeUntil(this.destroyed))\n .subscribe(mousedownEvent => {\n this._dragStarted(mousedownEvent);\n });\n });\n }\n\n private _dragStarted(mousedownEvent: MouseEvent) {\n // Only allow dragging using the left mouse button.\n if (mousedownEvent.button !== 0) {\n return;\n }\n\n const mouseup = this._observableFromEvent<MouseEvent>(this.document, 'mouseup');\n const mousemove = this._observableFromEvent<MouseEvent>(this.document, 'mousemove');\n const escape = this._observableFromEvent<KeyboardEvent>(this.document, 'keyup').pipe(\n filter(event => event.keyCode === ESCAPE),\n );\n\n const startX = mousedownEvent.screenX;\n\n const initialSize = this._getOriginWidth();\n let overlayOffset = 0;\n let originOffset = this._getOriginOffset();\n let size = initialSize;\n let overshot = 0;\n this._cumulativeDeltaX = 0;\n\n this.updateResizeActive(true);\n\n mouseup.pipe(takeUntil(merge(escape, this.destroyed))).subscribe(({ screenX }) => {\n this.styleScheduler.scheduleEnd(() => {\n this._notifyResizeEnded(size, screenX !== startX);\n });\n });\n\n escape.pipe(takeUntil(merge(mouseup, this.destroyed))).subscribe(() => {\n this._notifyResizeEnded(initialSize);\n });\n\n mousemove\n .pipe(\n map(({ screenX }) => screenX),\n startWith(startX),\n distinctUntilChanged(),\n pairwise(),\n takeUntil(merge(mouseup, escape, this.destroyed)),\n )\n .subscribe(([prevX, currX]) => {\n let deltaX = currX - prevX;\n\n if (!this.resizeRef.liveUpdates) {\n this._cumulativeDeltaX += deltaX;\n const sizeDelta = this._computeNewSize(size, this._cumulativeDeltaX) - size;\n this._updateOverlayOffset(sizeDelta);\n\n return;\n }\n\n if (overshot !== 0) {\n if ((overshot < 0 && deltaX < 0) || (overshot > 0 && deltaX > 0)) {\n overshot += deltaX;\n return;\n } else {\n const remainingOvershot = overshot + deltaX;\n overshot =\n overshot > 0 ? Math.max(remainingOvershot, 0) : Math.min(remainingOvershot, 0);\n deltaX = remainingOvershot - overshot;\n\n if (deltaX === 0) {\n return;\n }\n }\n }\n\n this._triggerResize(size, deltaX);\n\n this.styleScheduler.scheduleEnd(() => {\n const originNewSize = this._getOriginWidth();\n const originNewOffset = this._getOriginOffset();\n const originOffsetDeltaX = originNewOffset - originOffset;\n const originSizeDeltaX = originNewSize - size;\n size = originNewSize;\n originOffset = originNewOffset;\n\n overshot += deltaX + (this._isLtr() ? -originSizeDeltaX : originSizeDeltaX);\n overlayOffset += originOffsetDeltaX + (this._isLtr() ? originSizeDeltaX : 0);\n\n this._updateOverlayOffset(overlayOffset);\n });\n });\n }\n\n protected updateResizeActive(active: boolean): void {\n this.eventDispatcher.overlayHandleActiveForCell.next(\n active ? this.resizeRef.origin.nativeElement! : null,\n );\n }\n\n private _triggerResize(startSize: number, deltaX: number): void {\n this.resizeNotifier.triggerResize.next({\n columnId: this.columnDef.name,\n size: this._computeNewSize(startSize, deltaX),\n previousSize: startSize,\n isStickyColumn: this.columnDef.sticky || this.columnDef.stickyEnd,\n });\n }\n\n private _computeNewSize(startSize: number, deltaX: number): number {\n let computedNewSize: number = startSize + (this._isLtr() ? deltaX : -deltaX);\n computedNewSize = Math.min(\n Math.max(computedNewSize, this.resizeRef.minWidthPx, 0),\n this.resizeRef.maxWidthPx,\n );\n return computedNewSize;\n }\n\n private _getOriginWidth(): number {\n return this.resizeRef.origin.nativeElement!.offsetWidth;\n }\n\n private _getOriginOffset(): number {\n return this.resizeRef.origin.nativeElement!.offsetLeft;\n }\n\n private _updateOverlayOffset(offset: number): void {\n this.resizeRef.overlayRef.overlayElement.style.transform = `translateX(${coerceCssPixelValue(\n offset,\n )})`;\n }\n\n private _isLtr(): boolean {\n return this.directionality.value === 'ltr';\n }\n\n private _notifyResizeEnded(size: number, completedSuccessfully = false): void {\n this.updateResizeActive(false);\n\n this.ngZone.run(() => {\n const sizeMessage = {\n columnId: this.columnDef.name,\n size: this._computeNewSize(size, this._cumulativeDeltaX),\n };\n if (completedSuccessfully) {\n if (!this.resizeRef.liveUpdates) {\n this._triggerResize(size, this._cumulativeDeltaX);\n }\n\n this.resizeNotifier.resizeCompleted.next(sizeMessage);\n } else {\n this.resizeNotifier.resizeCanceled.next(sizeMessage);\n }\n });\n }\n\n private _observableFromEvent<T extends Event>(element: Element | Document, name: string) {\n return new Observable<T>(subscriber => {\n const handler = (event: T) => subscriber.next(event);\n const cleanup = this._renderer.listen(element, name, handler);\n return () => {\n cleanup();\n subscriber.complete();\n };\n });\n }\n}\n","import { CdkDrag, CdkDragDrop, CdkDropList, moveItemInArray } from '@angular/cdk/drag-drop';\nimport { AsyncPipe, NgTemplateOutlet } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n Input,\n Output,\n TemplateRef,\n ViewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { MatButton, MatIconButton } from '@angular/material/button';\nimport { MatCheckbox } from '@angular/material/checkbox';\nimport { ThemePalette } from '@angular/material/core';\nimport { MatIcon } from '@angular/material/icon';\nimport { MatMenu, MatMenuItem, MatMenuTrigger } from '@angular/material/menu';\n\nimport {\n DataGridButtonType,\n DataGridColumn,\n DataGridColumnPinOption,\n DataGridColumnPinValue,\n} from './../interfaces';\nimport { AcpToObservablePipe } from '../../../../core/pipes';\n\n@Component({\n selector: 'acp-grid-column-menu',\n exportAs: 'acpGridColumnMenu',\n templateUrl: './column-menu.html',\n styleUrl: './column-menu.scss',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n AsyncPipe,\n NgTemplateOutlet,\n FormsModule,\n MatButton,\n MatIconButton,\n MatIcon,\n MatMenu,\n MatMenuTrigger,\n MatMenuItem,\n MatCheckbox,\n CdkDrag,\n CdkDropList,\n AcpToObservablePipe,\n ],\n})\nexport class AcpGridColumnMenu {\n @ViewChild(MatMenu, { static: true }) menuPanel!: MatMenu;\n @ViewChild(MatMenuTrigger) menuTrigger!: MatMenuTrigger;\n\n @Input() columns: DataGridColumn[] = [];\n @Input() selectable = true;\n @Input() selectableChecked: 'show' | 'hide' = 'show';\n @Input() sortable = true;\n @Input() pinnable = true;\n\n @Input()\n get buttonText() {\n const defaultText = `Columns ${this.selectableChecked === 'show' ? 'Shown' : 'Hidden'}`;\n return this._buttonText ? this._buttonText : defaultText;\n }\n set buttonText(value: string) {\n this._buttonText = value;\n }\n private _buttonText = '';\n\n @Input() buttonType: DataGridButtonType = 'outlined';\n @Input() buttonColor: ThemePalette;\n @Input() buttonClass = '';\n @Input() buttonIcon = '';\n @Input() buttonFontIcon = '';\n @Input() buttonSvgIcon = '';\n\n @Input() showHeader = false;\n @Input() headerText = 'Columns Header';\n @Input() headerTemplate!: TemplateRef<any>;\n @Input() showFooter = false;\n @Input() footerText = 'Columns Footer';\n @Input() footerTemplate!: TemplateRef<any>;\n\n @Output() columnChange = new EventEmitter<DataGridColumn[]>();\n\n @Input()\n get pinOptions() {\n return this._pinOptions;\n }\n set pinOptions(value: DataGridColumnPinOption[]) {\n if (value.length > 0) {\n this._pinOptions = value;\n }\n }\n private _pinOptions: DataGridColumnPinOption[] = [\n { label: 'Pin Left', value: 'left' },\n { label: 'Pin Right', value: 'right' },\n { label: 'No Pin', value: null },\n ];\n\n _handleDroped(e: CdkDragDrop<string[]>) {\n moveItemInArray(this.columns, e.previousIndex, e.currentIndex);\n this.columnChange.emit(this.columns);\n }\n\n _handleChecked(col: DataGridColumn) {\n if (this.selectableChecked === 'show') {\n col.hide = !col.show;\n } else {\n col.show = !col.hide;\n }\n this.columnChange.emit(this.columns);\n }\n\n _handlePinSelect(col: DataGridColumn, val: DataGridColumnPinValue) {\n if (col.pinned != val) {\n col.pinned = val;\n this.columnChange.emit(this.columns);\n }\n }\n}\n","@if (buttonType === 'icon') {\n<button\n [class]=\"buttonClass\"\n matIconButton\n type=\"button\"\n [color]=\"buttonColor\"\n [matMenuTriggerFor]=\"menu\"\n>\n <mat-icon *ngTemplateOutlet=\"iconTpl\"></mat-icon>\n</button>\n} @else {\n<button\n [class]=\"buttonClass\"\n [matButton]=\"buttonType\"\n type=\"button\"\n [color]=\"buttonColor\"\n [matMenuTriggerFor]=\"menu\"\n>\n <mat-icon *ngTemplateOutlet=\"iconTpl\"></mat-icon>\n {{ buttonText }}\n</button>\n}\n\n<ng-template #iconTpl>\n @if (buttonIcon) {\n <mat-icon>{{buttonIcon}}</mat-icon>\n } @else if(buttonFontIcon) {\n <mat-icon [fontIcon]=\"buttonFontIcon\"></mat-icon>\n } @else if(buttonSvgIcon) {\n <mat-icon [svgIcon]=\"buttonSvgIcon\"></mat-icon>\n }\n</ng-template>\n\n<mat-menu #menu=\"matMenu\" class=\"acp-grid-column-menu\">\n <!-- eslint-disable-next-line @angular-eslint/template/interactive-supports-focus -->\n <div\n class=\"acp-grid-column-menu-content\"\n (click)=\"$event.stopPropagation()\"\n (keydown)=\"$event.stopPropagation()\"\n >\n @if (showHeader) {\n <div class=\"acp-grid-column-menu-header\">\n @if (headerTemplate) {\n <ng-template [ngTemplateOutlet]=\"headerTemplate\"></ng-template>\n } @else { {{headerText}} }\n </div>\n }\n\n <div class=\"acp-grid-column-menu-body\">\n @if (sortable) {\n <div\n class=\"acp-grid-column-menu-list\"\n cdkDropList\n (cdkDropListDropped)=\"_handleDroped($event)\"\n >\n @for (col of columns; track col.field) {\n <div\n class=\"acp-grid-column-menu-item\"\n cdkDrag\n [cdkDragDisabled]=\"selectableChecked === 'show'? !col.show : col.hide\"\n >\n <svg\n class=\"acp-grid-icon acp-grid-column-drag-handle-icon\"\n viewBox=\"0 0 24 24\"\n width=\"24px\"\n height=\"24px\"\n fill=\"currentColor\"\n focusable=\"false\"\n >\n <path\n d=\"M7,19V17H9V19H7M11,19V17H13V19H11M15,19V17H17V19H15M7,15V13H9V15H7M11,15V13H13V15H11M15,15V13H17V15H15M7,11V9H9V11H7M11,11V9H13V11H11M15,11V9H17V11H15M7,7V5H9V7H7M11,7V5H13V7H11M15,7V5H17V7H15Z\"\n />\n </svg>\n <ng-template\n [ngTemplateOutlet]=\"checkboxList\"\n [ngTemplateOutletContext]=\"{ $implicit: col }\"\n >\n </ng-template>\n </div>\n }\n </div>\n } @if (!sortable) {\n <div class=\"acp-grid-column-menu-list\">\n @for (col of columns; track col.field) {\n <div class=\"acp-grid-column-menu-item\">\n <ng-template\n [ngTemplateOutlet]=\"checkboxList\"\n [ngTemplateOutletContext]=\"{ $implicit: col }\"\n >\n </ng-template>\n </div>\n }\n </div>\n }\n </div>\n\n @if (showFooter) {\n <div class=\"acp-grid-column-menu-footer\">\n @if (footerTemplate) {\n <ng-template [ngTemplateOutlet]=\"footerTemplate\"></ng-template>\n } @else { {{footerText}} }\n </div>\n }\n </div>\n</mat-menu>\n\n<ng-template #checkboxList let-col>\n @if (pinnable) {\n <button\n class=\"acp-grid-column-pin-button\"\n matIconButton\n type=\"button\"\n [matMenuTriggerFor]=\"pinList\"\n >\n @if (col.pinned) {\n <svg\n class=\"acp-grid-icon acp-grid-column-pin-icon\"\n viewBox=\"0 0 24 24\"\n width=\"24px\"\n height=\"24px\"\n fill=\"currentColor\"\n focusable=\"false\"\n >\n <path d=\"M16,12V4H17V2H7V4H8V12L6,14V16H11.2V22H12.8V16H18V14L16,12Z\" />\n </svg>\n } @if (!col.pinned) {\n <svg\n class=\"acp-grid-icon acp-grid-column-pin-off-icon\"\n viewBox=\"0 0 24 24\"\n width=\"24px\"\n height=\"24px\"\n fill=\"currentColor\"\n focusable=\"false\"\n >\n <path\n d=\"M2,5.27L3.28,4L20,20.72L18.73,22L12.8,16.07V22H11.2V16H6V14L8,12V11.27L2,5.27M16,12L18,14V16H17.82L8,6.18V4H7V2H17V4H16V12Z\"\n />\n </svg>\n }\n </button>\n <mat-menu #pinList=\"matMenu\" class=\"acp-grid-column-pin-list\">\n @for (item of pinOptions; track item) {\n <button\n class=\"acp-grid-column-pin-option\"\n type=\"button\"\n mat-menu-item\n (click)=\"_handlePinSelect(col, item.value)\"\n >\n <span class=\"acp-grid-column-pin-option-placeholder\">\n <!-- eslint-disable-next-line @angular-eslint/template/eqeqeq -->\n @if (col.pinned==item.value) {\n <svg\n class=\"acp-grid-icon acp-grid-column-pin-check-icon\"\n viewBox=\"0 0 24 24\"\n width=\"24px\"\n height=\"24px\"\n fill=\"currentColor\"\n focusable=\"false\"\n >\n <path d=\"M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z\" />\n </svg>\n }\n </span>\n <span class=\"acp-grid-column-pin-option-text\">{{item.label | toObservable | async}}</span>\n </button>\n }\n </mat-menu>\n } @if (selectable) {\n <mat-checkbox\n class=\"acp-grid-column-menu-item-label\"\n [(ngModel)]=\"col[selectableChecked]\"\n [disabled]=\"col.disabled\"\n (change)=\"_handleChecked(col)\"\n >{{col.header | toObservable | async}}</mat-checkbox\n >\n } @else {\n <span class=\"acp-grid-column-menu-item-label\">{{col.header | toObservable | async}}</span>\n }\n</ng-template>\n","import { Directive, Input, TemplateRef, output } from '@angular/core';\n\n@Directive({\n selector: '[acpGridExpansionToggle]',\n host: {\n '[class.expanded]': 'opened',\n '(click)': 'onClick($event)',\n },\n})\nexport class AcpGridExpansionToggle {\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<AcpGridExpansionToggle>();\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","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport { Injectable, Provider } from '@angular/core';\n\nimport {\n CdkFlexTableResizeStrategy,\n ResizeStrategy,\n TABLE_LAYOUT_FIXED_RESIZE_STRATEGY_PROVIDER,\n} from './../../column-resize';\n\nexport { TABLE_LAYOUT_FIXED_RESIZE_STRATEGY_PROVIDER };\n\n/**\n * Overrides CdkFlexTableResizeStrategy to match mat-column elements.\n */\n@Injectable()\nexport class MatFlexTableResizeStrategy extends CdkFlexTableResizeStrategy {\n protected override getColumnCssClass(cssFriendlyColumnName: string): string {\n return `mat-column-${cssFriendlyColumnName}`;\n }\n}\n\nexport const FLEX_RESIZE_STRATEGY_PROVIDER: Provider = {\n provide: ResizeStrategy,\n useClass: MatFlexTableResizeStrategy,\n};\n","import { Provider } from '@angular/core';\n\nimport {\n _COALESCED_STYLE_SCHEDULER,\n _CoalescedStyleScheduler,\n ColumnResize,\n ColumnResizeNotifier,\n ColumnResizeNotifierSource,\n HeaderRowEventDispatcher,\n} from './../../../column-resize';\n\nimport {\n TABLE_LAYOUT_FIXED_RESIZE_STRATEGY_PROVIDER,\n FLEX_RESIZE_STRATEGY_PROVIDER,\n} from './../resize-strategy';\n\nconst PROVIDERS: Provider[] = [\n ColumnResizeNotifier,\n HeaderRowEventDispatcher,\n ColumnResizeNotifierSource,\n { provide: _COALESCED_STYLE_SCHEDULER, useClass: _CoalescedStyleScheduler },\n];\nexport const TABLE_PROVIDERS: Provider[] = [\n ...PROVIDERS,\n TABLE_LAYOUT_FIXED_RESIZE_STRATEGY_PROVIDER,\n];\nexport const FLEX_PROVIDERS: Provider[] = [...PROVIDERS, FLEX_RESIZE_STRATEGY_PROVIDER];\n\nexport const TABLE_HOST_BINDINGS = {\n class: 'mat-column-resize-table',\n};\nexport const FLEX_HOST_BINDINGS = {\n class: 'mat-column-resize-flex',\n};\n\nexport abstract class AbstractMatColumnResize extends ColumnResize {\n getTableHeight() {\n const table = this.elementRef.nativeElement;\n const tableParent = table.parentNode as HTMLElement;\n const isTableContainer = tableParent.classList.contains('mat-table-container');\n return isTableContainer ? tableParent.offsetHeight : table.offsetHeight;\n }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport { Directive, ElementRef, NgZone, inject } from '@angular/core';\nimport {\n ColumnResize,\n ColumnResizeNotifier,\n ColumnResizeNotifierSource,\n HeaderRowEventDispatcher,\n} from './../../../column-resize';\n\nimport { AbstractMatColumnResize, TABLE_HOST_BINDINGS, TABLE_PROVIDERS } from './common';\n\n/**\n * Explicitly enables column resizing for a table-based mat-table.\n * Individual columns must be annotated specifically.\n */\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: 'table[mat-table][columnResize]',\n host: TABLE_HOST_BINDINGS,\n providers: [...TABLE_PROVIDERS, { provide: ColumnResize, useExisting: MatColumnResize }],\n})\nexport class MatColumnResize extends AbstractMatColumnResize {\n readonly columnResizeNotifier = inject(ColumnResizeNotifier);\n readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n protected readonly eventDispatcher = inject(HeaderRowEventDispatcher);\n protected readonly ngZone = inject(NgZone);\n protected readonly notifier = inject(ColumnResizeNotifierSource);\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport { Directive, ElementRef, NgZone, inject } from '@angular/core';\nimport {\n ColumnResize,\n ColumnResizeNotifier,\n ColumnResizeNotifierSource,\n HeaderRowEventDispatcher,\n} from './../../../column-resize';\n\nimport { AbstractMatColumnResize, FLEX_HOST_BINDINGS, FLEX_PROVIDERS } from './common';\n\n/**\n * Explicitly enables column resizing for a flexbox-based mat-table.\n * Individual columns must be annotated specifically.\n */\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: 'mat-table[columnResize]',\n host: FLEX_HOST_BINDINGS,\n providers: [...FLEX_PROVIDERS, { provide: ColumnResize, useExisting: MatColumnResizeFlex }],\n})\nexport class MatColumnResizeFlex extends AbstractMatColumnResize {\n readonly columnResizeNotifier = inject(ColumnResizeNotifier);\n readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n protected readonly eventDispatcher = inject(HeaderRowEventDispatcher);\n protected readonly ngZone = inject(NgZone);\n protected readonly notifier = inject(ColumnResizeNotifierSource);\n}\n","import { Directionality } from '@angular/cdk/bidi';\nimport { CdkColumnDef } from '@angular/cdk/table';\nimport {\n ChangeDetectionStrategy,\n Component,\n DOCUMENT,\n ElementRef,\n NgZone,\n ViewChild,\n ViewEncapsulation,\n inject,\n} from '@angular/core';\nimport {\n ColumnResize,\n ColumnResizeNotifierSource,\n HeaderRowEventDispatcher,\n ResizeOverlayHandle,\n ResizeRef,\n _COALESCED_STYLE_SCHEDULER,\n _CoalescedStyleScheduler,\n} from './../../column-resize';\n\nimport { AbstractMatColumnResize } from './column-resize-directives/common';\n\n/**\n * Component shown over the edge of a resizable column that is responsible\n * for handling column resize mouse events and displaying a vertical line along the column edge.\n */\n@Component({\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: { class: 'mat-column-resize-overlay-thumb' },\n template: '<div #top class=\"mat-column-resize-overlay-thumb-top\"></div>',\n})\nexport class MatColumnResizeOverlayHandle extends ResizeOverlayHandle {\n protected readonly columnDef = inject(CdkColumnDef);\n protected readonly columnResize = inject(ColumnResize);\n protected readonly directionality = inject(Directionality);\n protected readonly elementRef = inject(ElementRef);\n protected readonly eventDispatcher = inject(HeaderRowEventDispatcher);\n protected readonly ngZone = inject(NgZone);\n protected readonly resizeNotifier = inject(ColumnResizeNotifierSource);\n protected readonly resizeRef = inject(ResizeRef);\n protected readonly styleScheduler = inject<_CoalescedStyleScheduler>(_COALESCED_STYLE_SCHEDULER);\n protected readonly document = inject(DOCUMENT);\n\n @ViewChild('top', { static: true }) topElement!: ElementRef<HTMLElement>;\n\n protected override updateResizeActive(active: boolean): void {\n super.updateResizeActive(active);\n\n const originHeight = this.resizeRef.origin.nativeElement.offsetHeight;\n this.topElement.nativeElement.style.height = `${originHeight}px`;\n this.resizeRef.overlayRef.updateSize({\n height: active\n ? (this.columnResize as AbstractMatColumnResize).getTableHeight()\n : originHeight,\n });\n }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport { Type } from '@angular/core';\nimport { Resizable } from '../../../column-resize/resizable';\nimport { MatColumnResizeOverlayHandle } from './../overlay-handle';\n\nexport abstract class AbstractMatResizable extends Resizable<MatColumnResizeOverlayHandle> {\n override minWidthPxInternal = 32;\n\n protected override getInlineHandleCssClassName(): string {\n return 'mat-resizable-handle';\n }\n\n protected override getOverlayHandleComponentType(): Type<MatColumnResizeOverlayHandle> {\n return MatColumnResizeOverlayHandle;\n }\n}\n\nexport const RESIZABLE_HOST_BINDINGS = {\n class: 'mat-resizable',\n};\n\nexport const RESIZABLE_INPUTS = [\n 'minWidthPx: matResizableMinWidthPx',\n 'maxWidthPx: matResizableMaxWidthPx',\n];\n","import { Directionality } from '@angular/cdk/bidi';\nimport { Overlay } from '@angular/cdk/overlay';\nimport { CdkColumnDef } from '@angular/cdk/table';\nimport {\n ChangeDetectorRef,\n DOCUMENT,\n Directive,\n ElementRef,\n Injector,\n Input,\n NgZone,\n ViewContainerRef,\n inject,\n} from '@angular/core';\nimport {\n ColumnResize,\n ColumnResizeNotifierSource,\n HeaderRowEventDispatcher,\n ResizeStrategy,\n _COALESCED_STYLE_SCHEDULER,\n _CoalescedStyleScheduler,\n} from './../../../column-resize';\n\nimport { AbstractMatResizable, RESIZABLE_HOST_BINDINGS, RESIZABLE_INPUTS } from './common';\n\n/**\n * Explicitly enables column resizing for a mat-header-cell.\n */\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: 'mat-header-cell[resizable], th[mat-header-cell][resizable]',\n host: {\n '[class]': 'resizableClass',\n },\n // eslint-disable-next-line @angular-eslint/no-inputs-metadata-property\n inputs: RESIZABLE_INPUTS,\n})\nexport class MatResizable extends AbstractMatResizable {\n protected readonly columnDef = inject(CdkColumnDef);\n protected readonly columnResize = inject(ColumnResize);\n protected readonly directionality = inject(Directionality);\n protected readonly elementRef = inject(ElementRef);\n protected readonly eventDispatcher = inject(HeaderRowEventDispatcher);\n protected readonly injector = inject(Injector);\n protected readonly ngZone = inject(NgZone);\n protected readonly overlay = inject(Overlay);\n protected readonly resizeNotifier = inject(ColumnResizeNotifierSource);\n protected readonly resizeStrategy = inject(ResizeStrategy);\n protected readonly styleScheduler = inject<_CoalescedStyleScheduler>(_COALESCED_STYLE_SCHEDULER);\n protected readonly viewContainerRef = inject(ViewContainerRef);\n protected readonly changeDetectorRef = inject(ChangeDetectorRef);\n protected readonly document = inject(DOCUMENT);\n\n override isResizable = true;\n\n get resizableClass() {\n return this.isResizable ? RESIZABLE_HOST_BINDINGS.class : '';\n }\n\n @Input()\n get resizable() {\n return this.isResizable;\n }\n set resizable(newValue: any) {\n this.isResizable = newValue == null || newValue === '' || newValue;\n }\n}\n","import {\n Component,\n input,\n output,\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 ViewEncapsulation,\n AfterViewInit,\n OnChanges,\n ChangeDetectorRef,\n Input,\n Output,\n EventEmitter,\n} from '@angular/core';\nimport { AsyncPipe, NgTemplateOutlet } from '@angular/common';\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 { AcpToObservablePipe, AcpIsTemplateRefPipe } from '../../../core/pipes';\nimport { AcpGridSelectableCell } from './grid-selectable-cell';\nimport { DataGridUtils } from './grid-utils';\nimport { AcpGridCell } from './cell/cell';\nimport {\n DataGridButtonType,\n DataGridCellTemplate,\n DataGridColumn,\n DataGridColumnPinOption,\n DataGridDefaultOptions,\n DataGridRowClassFormatter,\n DataGridRowSelectionFormatter,\n} from './interfaces';\nimport { AcpGridColClassPipe, AcpGridRowClassPipe } from './data-grid.pipes';\nimport { _animationsDisabled, ThemePalette } from '@angular/material/core';\nimport { ColumnResize } from '../column-resize';\nimport { AcpGridColumnMenu } from './column-menu/column-menu';\nimport { AcpGridExpansionToggle } from './grid-expansion-toggle';\nimport { MatColumnResize, MatResizable } from './column-resize';\n\nexport const DATA_GRID_DEFAULT_OPTIONS = new InjectionToken<DataGridDefaultOptions>(\n 'acp-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 MatResizable,\n MatColumnResize,\n AcpGridCell,\n AcpGridColumnMenu,\n AcpGridSelectableCell,\n AcpGridExpansionToggle,\n AcpIsTemplateRefPipe,\n AcpGridColClassPipe,\n AcpGridRowClassPipe,\n AcpToObservablePipe,\n ],\n templateUrl: './grid.html',\n styleUrl: './grid.scss',\n host: {\n class: 'acp-grid',\n '[class.acp-grid-animations-enabled]': '!_animationsDisabled',\n '[class.acp-grid-size-small]': 'size() === \"small\"',\n '[class.acp-grid-size-medium]': 'size() === \"medium\"',\n '[class.acp-grid-size-normal]': 'size() === \"normal\"',\n '[attr.tabindex]': '0',\n },\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class DataGrid implements AfterViewInit, OnChanges {\n size = input<'small' | 'medium' | 'normal'>('normal');\n protected _animationsDisabled = _animationsDisabled();\n private _utils = inject(DataGridUtils);\n private _changeDetectorRef = inject(ChangeDetectorRef);\n private _defaultOptions = inject<DataGridDefaultOptions>(DATA_GRID_DEFAULT_OPTIONS, {\n optional: true,\n });\n\n @ViewChild(MatTable) table!: MatTable<any>;\n @ViewChild(MatPaginator) paginator!: MatPaginator;\n @ViewChild(MatSort) sort!: MatSort;\n @ContentChildren(MatRowDef) rowDefs!: QueryList<MatRowDef<any>>;\n @ContentChildren(MatHeaderRowDef) headerRowDefs!: QueryList<MatHeaderRowDef>;\n @ContentChildren(MatFooterRow) footerRowDefs!: QueryList<MatFooterRowDef>;\n @ViewChild(ColumnResize) columnResize?: ColumnResize;\n @ViewChild(AcpGridColumnMenu) columnMenu!: AcpGridColumnMenu;\n @ViewChild('tableContainer') tableContainer!: ElementRef<HTMLDivElement>;\n\n dataSource = new MatTableDataSource();\n\n /** The grid's displayed columns. */\n @Input() displayedColumns: string[] = [];\n /** The grid's columns. */\n @Input() columns: DataGridColumn[] = [];\n /** The grid's data. */\n @Input() data: any[] = [];\n /** The total number of the data. */\n @Input() length = 0;\n /** Whether the grid is loading. */\n @Input({ transform: booleanAttribute }) loading = false;\n /** Tracking function that will be used to check the differences in data changes. */\n @Input() trackBy!: TrackByFunction<any>;\n /** Whether the column is resizable. */\n @Input({ transform: booleanAttribute })\n columnResizable = this._defaultOptions?.columnResizable ?? false;\n /** Placeholder for the empty value (`null`, `''`, `[]`). */\n @Input() emptyValuePlaceholder = this._defaultOptions?.emptyValuePlaceholder ?? '--';\n\n // ===== Page =====\n\n /** Whether to paginate the data on front end. */\n @Input({ transform: booleanAttribute })\n pageOnFront = this._defaultOptions?.pageOnFront ?? true;\n /** Whether to show the paginator. */\n @Input({ transform: booleanAttribute })\n showPaginator = this._defaultOptions?.showPaginator ?? true;\n /** Whether the paginator is disabled. */\n @Input({ transform: booleanAttribute })\n pageDisabled = this._defaultOptions?.pageDisabled ?? false;\n /** Whether to show the first/last buttons UI to the user. */\n @Input({ transform: booleanAttribute })\n showFirstLastButtons = this._defaultOptions?.showFirstLastButtons ?? true;\n /** The zero-based page index of the displayed list of items. */\n @Input() pageIndex = this._defaultOptions?.pageIndex ?? 0;\n /** Number of items to display on a page. */\n @Input() pageSize = this._defaultOptions?.pageSize ?? 10;\n /** The set of provided page size options to display to the user. */\n @Input() pageSizeOptions = this._defaultOptions?.pageSizeOptions ?? [10, 50, 100];\n /** Whether to hide the page size selection UI from the user. */\n @Input({ transform: booleanAttribute })\n hidePageSize = this._defaultOptions?.hidePageSize ?? false;\n /** Event emitted when the paginator changes the page size or page index. */\n @Output() page = new EventEmitter<PageEvent>();\n /** The template for the pagination. */\n @Input() paginationTemplate!: TemplateRef<any>;\n\n // ===== Sort =====\n\n /** Whether to sort the data on front end. */\n @Input({ transform: booleanAttribute })\n sortOnFront = this._defaultOptions?.sortOnFront ?? true;\n /** The id of the most recently sorted MatSortable. */\n @Input() sortActive = this._defaultOptions?.sortActive ?? '';\n /** The sort direction of the currently active MatSortable. */\n @Input() sortDirection: SortDirection = this._defaultOptions?.sortDirection ?? '';\n /**\n * Whether to disable the user from clearing the sort by finishing the sort direction cycle.\n * May be overriden by the column's `disableClear` in `sortProp`.\n */\n @Input({ transform: booleanAttribute })\n sortDisableClear = this._defaultOptions?.sortDisableClear ?? false;\n /** Whether the sort is disabled. */\n @Input({ transform: booleanAttribute })\n sortDisabled = this._defaultOptions?.sortDisabled ?? false;\n /**\n * The direction to set when an MatSortable is initially sorted.\n * May be overriden by the column's `start` in `sortProp`.\n */\n @Input() sortStart: 'asc' | 'desc' = this._defaultOptions?.sortStart ?? 'asc';\n /** Event emitted when the user changes either the active sort or sort direction. */\n @Output() sortChange = new EventEmitter<Sort>();\n\n // ===== Row =====\n\n /** Whether to use the row hover style. */\n @Input({ transform: booleanAttribute })\n rowHover = this._defaultOptions?.rowHover ?? false;\n /** Whether to use the row striped style. */\n @Input({ transform: booleanAttribute })\n rowStriped = this._defaultOptions?.rowStriped ?? false;\n /** Event emitted when the user clicks the row. */\n @Output() rowClick = new EventEmitter<any>();\n /** Event emitted when the user attempts to open a context menu. */\n @Output() rowContextMenu = new EventEmitter<any>();\n\n // ===== Expandable Row =====\n\n expansionRowStates: any[] = [];\n\n /** Whether the row is expandable. */\n @Input({ transform: booleanAttribute }) expandable = false;\n /** The template for the expandable row. */\n @Input() expansionTemplate!: TemplateRef<any>;\n /** Event emitted when the user toggles the expandable row. */\n @Output() expansionChange = new EventEmitter<any>();\n closeOthersOnExpand = input(false);\n // ===== Row Selection =====\n\n rowSelection: SelectionModel<any> = new SelectionModel<any>(true, []);\n\n /** Whether to support multiple row/cell selection. */\n @Input({ transform: booleanAttribute })\n multiSelectable = this._defaultOptions?.multiSelectable ?? true;\n /** Whether the user can select multiple rows with click. */\n @Input({ transform: booleanAttribute })\n multiSelectionWithClick = this._defaultOptions?.multiSelectionWithClick ?? false;\n /** Whether the row is selectable. */\n @Input({ transform: booleanAttribute })\n rowSelectable = this._defaultOptions?.rowSelectable ?? false;\n /** Whether to hide the row selection checkbox. */\n @Input({ transform: booleanAttribute })\n hideRowSelectionCheckbox = this._defaultOptions?.hideRowSelectionCheckbox ?? false;\n /** Whether disable rows to be selected when clicked. */\n @Input({ transform: booleanAttribute })\n disableRowClickSelection = this._defaultOptions?.disableRowClickSelection ?? false;\n /** The formatter to disable the row selection or hide the row's checkbox. */\n @Input() rowSelectionFormatter: DataGridRowSelectionFormatter = {};\n /** The formatter to set the row's class. */\n @Input() rowClassFormatter?: DataGridRowClassFormatter;\n /** The selected row items. */\n @Input() rowSelected: any[] = [];\n /** Event emitted when the row is selected. */\n @Output() rowSelectedChange = new EventEmitter<any[]>();\n\n @Output() checkboxKeyDown = new EventEmitter<KeyboardEvent>();\n @Output() checkboxKeyUp = new EventEmitter<KeyboardEvent>();\n @Output() checkboxKeyPress = new EventEmitter<KeyboardEvent>();\n\n @Output() rowKeyDown = new EventEmitter<{\n event: KeyboardEvent;\n row: Record<string, any>;\n index: number;\n }>();\n @Output() rowKeyUp = new EventEmitter<{\n event: KeyboardEvent;\n row: Record<string, any>;\n index: number;\n }>();\n @Output() rowKeyPress = new EventEmitter<{\n event: KeyboardEvent;\n row: Record<string, any>;\n index: number;\n }>();\n\n // ===== Cell Selection =====\n\n cellSelection: any[] = [];\n\n /** Whether the cell is selectable. */\n @Input({ transform: booleanAttribute })\n cellSelectable = this._defaultOptions?.cellSelectable ?? true;\n /** Event emitted when the cell is selected. */\n @Output() cellSelectedChange = new EventEmitter<any[]>();\n\n private _selectedCell?: AcpGridSelectableCell;\n\n // ===== Toolbar =====\n\n /** Whether to show the toolbar. */\n @Input({ transform: booleanAttribute })\n showToolbar = this._defaultOptions?.showToolbar ?? false;\n /** The text of the toolbar's title. */\n @Input() toolbarTitle = this._defaultOptions?.toolbarTitle ?? '';\n /** The template for the toolbar. */\n @Input() toolbarTemplate!: TemplateRef<any>;\n\n // ===== Column Menu =====\n\n /** Whether the column is hideable. */\n @Input({ transform: booleanAttribute })\n columnHideable = this._defaultOptions?.columnHideable ?? true;\n /** Hide or show when the column's checkbox is checked. */\n @Input() columnHideableChecked: 'show' | 'hide' =\n this._defaultOptions?.columnHideableChecked ?? 'show';\n /** Whether the column is sortable. */\n @Input({ transform: booleanAttribute })\n columnSortable = this._defaultOptions?.columnSortable ?? true;\n /** Whether the column is pinnable. */\n @Input({ transform: booleanAttribute })\n columnPinnable = this._defaultOptions?.columnPinnable ?? true;\n /** Event emitted when the column is hided or is sorted. */\n @Output() columnChange = new EventEmitter<DataGridColumn[]>();\n /** The options for the column pin list. */\n @Input() columnPinOptions: DataGridColumnPinOption[] =\n this._defaultOptions?.columnPinOptions ?? [];\n\n /** Whether to show the column menu button. */\n @Input({ transform: booleanAttribute })\n showColumnMenuButton = this._defaultOptions?.showColumnMenuButton ?? true;\n /** The text for the column menu button. */\n @Input() columnMenuButtonText = this._defaultOptions?.columnMenuButtonText ?? '';\n /** The type for the column menu button. */\n @Input() columnMenuButtonType: DataGridButtonType =\n this._defaultOptions?.columnMenuButtonType ?? 'outlined';\n /** The color for the column menu button. */\n @Input() columnMenuButtonColor: ThemePalette = this._defaultOptions?.columnMenuButtonColor;\n /** The class for the column menu button. */\n @Input() columnMenuButtonClass = this._defaultOptions?.columnMenuButtonClass ?? '';\n /** The icon for the column menu button. */\n @Input() columnMenuButtonIcon = this._defaultOptions?.columnMenuButtonIcon ?? '';\n /** The font icon for the column menu button. */\n @Input() columnMenuButtonFontIcon = this._defaultOptions?.columnMenuButtonFontIcon ?? '';\n /** The svg icon for the column menu button. */\n @Input() columnMenuButtonSvgIcon = this._defaultOptions?.columnMenuButtonSvgIcon ?? '';\n\n /** Whether to show the column-menu's header. */\n @Input({ transform: booleanAttribute })\n showColumnMenuHeader = this._defaultOptions?.showColumnMenuHeader ?? false;\n /** The text for the column-menu's header. */\n @Input() columnMenuHeaderText = this._defaultOptions?.columnMenuHeaderText ?? 'Columns Header';\n /** The template for the column-menu's header. */\n @Input() columnMenuHeaderTemplate!: TemplateRef<any>;\n /** Whether to show the the column-menu's footer. */\n @Input({ transform: booleanAttribute })\n showColumnMenuFooter = this._defaultOptions?.showColumnMenuFooter ?? false;\n /** The text for the column-menu's footer. */\n @Input() columnMenuFooterText = this._defaultOptions?.columnMenuFooterText ?? 'Columns Footer';\n /** The template for the column-menu's footer. */\n @Input() columnMenuFooterTemplate!: TemplateRef<any>;\n\n // ===== No Result =====\n\n /** The displayed text for the empty data. */\n @Input() noResultText = this._defaultOptions?.noResultText ?? 'No records found';\n /** The template for the empty data. */\n @Input() noResultTemplate!: TemplateRef<any>;\n\n // Keyboard Navigation\n keyboardNavigation = input<boolean>(false);\n\n // Row Highlighting\n highlightedRowIndex = input<number>(-1);\n focusedRowChange = output<{ row: any; index: number }>();\n get _hasNoResult() {\n return (!this.dataSource.data || this.dataSource.data.length === 0) && !this.loading;\n }\n\n // ===== Cell Templates =====\n\n /** The header's cell template for the grid. */\n @Input() headerTemplate!: TemplateRef<any> | DataGridCellTemplate;\n /** The header's cell template for the grid exclude sort. */\n @Input() headerExtraTemplate!: TemplateRef<any> | DataGridCellTemplate;\n /** The cell template for the grid. */\n @Input() cellTemplate!: TemplateRef<any> | DataGridCellTemplate;\n\n // ===== Row Templates =====\n\n /** Whether to use custom row template. If true, you should define a matRowDef. */\n @Input({ transform: booleanAttribute }) useContentRowTemplate = false;\n // TODO: It can't use together with `useContentRowTemplate`\n @Input({ transform: booleanAttribute }) useContentHeaderRowTemplate = false;\n // TODO: It's not working\n @Input({ transform: booleanAttribute }) useContentFooterRowTemplate = false;\n\n // ===== Summary =====\n\n /** Whether to show the summary. */\n @Input({ transform: booleanAttribute }) showSummary = false;\n /** The template for the summary. */\n @Input() summaryTemplate!: TemplateRef<any> | DataGridCellTemplate;\n\n // TODO: Summary display conditions\n get _whetherShowSummary() {\n return this.showSummary;\n }\n\n // ===== Side Bar =====\n\n /** Whether to show the sidebar. */\n @Input({ transform: booleanAttribute }) showSidebar = false;\n /** The template for the sidebar. */\n @Input() sidebarTemplate!: TemplateRef<any>;\n\n // ===== Status Bar =====\n\n /** Whether to show the status bar. */\n @Input({ transform: booleanAttribute }) showStatusbar = false;\n /** The template for the status bar. */\n @Input() statusbarTemplate!: TemplateRef<any>;\n\n /** The changed record of row data. */\n rowChangeRecord?: KeyValueChangeRecord<string, any>;\n\n detectChanges() {\n this._changeDetectorRef.detectChanges();\n }\n\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 // Waiting for async data\n ngOnChanges(changes: SimpleChanges) {\n this._countPinnedPosition();\n\n this.displayedColumns = this.columns\n .filter(item => !this._isColumnHide(item))\n .map(item => item.field);\n\n if (this.showColumnMenuButton) {\n this.columns.forEach(item => {\n item.hide = this._isColumnHide(item);\n item.show = !item.hide;\n });\n }\n\n if (this.rowSelectable && !this.hideRowSelectionCheckbox) {\n this.displayedColumns.unshift('acpGridCheckboxColumnDef');\n }\n\n // We should copy each item of data for expansion data\n if (this.expandable) {\n this.expansionRowStates = []; // reset\n\n this.data?.forEach(_ => {\n this.expansionRowStates.push({ expanded: false });\n });\n }\n\n if (this.rowSelectable) {\n this.rowSelection = new SelectionModel<any>(this.multiSelectable, this.rowSelected);\n }\n\n this.dataSource = new MatTableDataSource(this.data);\n\n this.dataSource.paginator = this.pageOnFront ? this.paginator : null;\n this.dataSource.sort = this.sortOnFront ? this.sort : null;\n\n // Only scroll top with data change\n if (changes['data']) {\n this.scrollTop(0);\n }\n }\n\n ngAfterViewInit() {\n if (this.pageOnFront) {\n this.dataSource.paginator = this.paginator;\n }\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\n _countPinnedPosition() {\n const pinnedLeftCols = this.columns.filter(col => col.pinned && col.pinned === 'left');\n pinnedLeftCols.forEach((item, idx) => {\n item.left =\n pinnedLeftCols\n .slice(0, idx)\n .reduce((acc, cur) => acc + parseFloat(cur.width || '80px'), 0) + 'px';\n });\n\n const pinnedRightCols = this.columns\n .filter(col => col.pinned && col.pinned === 'right')\n .reverse();\n pinnedRightCols.forEach((item, idx) => {\n item.right =\n pinnedRightCols\n .slice(0, idx)\n .reduce((acc, cur) => acc + parseFloat(cur.width || '80px'), 0) + 'px';\n });\n }\n\n _getIndex(index: number | undefined, dataIndex: number) {\n return index === undefined ? dataIndex : index;\n }\n\n _onSortChange(sort: Sort) {\n this.sortChange.emit(sort);\n }\n\n _onRowDataChange(record: KeyValueChangeRecord<string, any>) {\n this.rowChangeRecord = record;\n this._changeDetectorRef.markForCheck();\n }\n\n /** Expansion change event */\n _onExpansionChange(\n expansionRef: AcpGridExpansionToggle,\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 = currentStates;\n }\n this.expansionChange.emit({ expanded: expansionRef.opened, data: rowData, index, column });\n }\n\n /** Cell select event */\n _selectCell(\n cellRef: AcpGridSelectableCell,\n rowData: Record<string, any>,\n colDef: DataGridColumn,\n ): void {\n // If not the same cell\n if (this._selectedCell !== cellRef) {\n const colValue = this._utils.getCellValue(rowData, colDef);\n this.cellSelection = []; // reset\n this.cellSelection.push({ cellData: colValue, rowData, colDef });\n\n this.cellSelectedChange.emit(this.cellSelection);\n\n if (this._selectedCell) {\n this._selectedCell.deselect(); // the selectedCell will be undefined\n }\n }\n\n this._selectedCell = cellRef.selected ? cellRef : undefined;\n }\n\n /** Row select event */\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 // metaKey -> command key\n if (!this.multiSelectionWithClick && !event.ctrlKey && !event.metaKey) {\n this.rowSelection.clear();\n }\n\n this._toggleNormalCheckbox(rowData);\n }\n\n this.rowClick.emit({ event, rowData, index });\n }\n\n /** Whether the number of selected elements matches the total number of rows. */\n _isAllSelected() {\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;\n }\n\n /** Select all rows if they are not all selected; otherwise clear selection. */\n _toggleMasterCheckbox() {\n if (this._isAllSelected()) {\n this.rowSelection.clear();\n } else {\n this.dataSource.data.forEach((row, index) => {\n if (!this.rowSelectionFormatter.disabled?.(row, index)) {\n this.rowSelection.select(row);\n }\n });\n }\n this.rowSelectedChange.emit(this.rowSelection.selected);\n }\n\n /** Select normal row */\n _toggleNormalCheckbox(row: Record<string, any>) {\n this.rowSelection.toggle(row);\n this.rowSelectedChange.emit(this.rowSelection.selected);\n }\n\n _onCheckboxKeyDown(event: KeyboardEvent) {\n this.checkboxKeyDown.emit(event);\n }\n\n _onCheckboxKeyUp(event: KeyboardEvent) {\n this.checkboxKeyUp.emit(event);\n }\n\n _onCheckboxKeyPress(event: KeyboardEvent) {\n this.checkboxKeyPress.emit(event);\n }\n\n _onRowKeyDown(event: KeyboardEvent, row: Record<string, any>, index: number) {\n this.rowKeyDown.emit({ event, row, index });\n }\n\n _onRowKeyUp(event: KeyboardEvent, row: Record<string, any>, index: number) {\n this.rowKeyUp.emit({ event, row, index });\n }\n\n _onRowKeyPress(event: KeyboardEvent, row: Record<string, any>, index: number) {\n this.rowKeyPress.emit({ event, row, index });\n }\n\n /** Column change event */\n _onColumnChange(columns: DataGridColumn[]) {\n this.columnChange.emit(columns);\n\n this.displayedColumns = Object.assign([], this.getDisplayedColumnFields(columns));\n\n if (this.rowSelectable && !this.hideRowSelectionCheckbox) {\n this.displayedColumns.unshift('acpGridCheckboxColumnDef');\n }\n }\n\n getDisplayedColumnFields(columns: DataGridColumn[]): string[] {\n const fields = columns\n .filter(item => (this.columnHideableChecked === 'show' ? item.show : !item.hide))\n .map(item => item.field);\n return fields;\n }\n\n /** Customize expansion event */\n toggleExpansion(index: number) {\n if (!this.expandable) {\n throw new Error('The `expandable` should be set true.');\n }\n this.expansionRowStates[index].expanded = !this.expansionRowStates[index].expanded;\n return this.expansionRowStates[index].expanded;\n }\n\n /** Scroll to top when turn to the next page. */\n _onPage(e: PageEvent) {\n if (this.pageOnFront) {\n this.scrollTop(0);\n }\n this.page.emit(e);\n }\n\n scrollTop(value?: number): number | void {\n if (value == null) {\n return this.tableContainer?.nativeElement.scrollTop;\n }\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) {\n return this.tableContainer?.nativeElement.scrollLeft;\n }\n if (this.tableContainer && !this.loading) {\n this.tableContainer.nativeElement.scrollLeft = value;\n }\n }\n\n _contextmenu(event: MouseEvent, rowData: Record<string, any>, index: number) {\n this.rowContextMenu.emit({ event, rowData, index });\n }\n}\n","<!-- Progress bar-->\n@if (loading) {\n<div class=\"acp-grid-progress\">\n <mat-progress-bar mode=\"indeterminate\"></mat-progress-bar>\n</div>\n}\n\n<!-- Toolbar -->\n@if (showToolbar) {\n<div class=\"acp-grid-toolbar\">\n <div class=\"acp-grid-toolbar-content\">\n @if (toolbarTemplate) {\n <ng-template [ngTemplateOutlet]=\"toolbarTemplate\"></ng-template>\n } @else { @if (toolbarTitle) {\n <div class=\"acp-grid-toolbar-title\">{{ toolbarTitle }}</div>\n } }\n </div>\n <div class=\"acp-grid-toolbar-actions\">\n @if (showColumnMenuButton) {\n <acp-grid-column-menu\n [columns]=\"columns\"\n [buttonText]=\"columnMenuButtonText\"\n [buttonType]=\"columnMenuButtonType\"\n [buttonColor]=\"columnMenuButtonColor\"\n [buttonClass]=\"columnMenuButtonClass\"\n [buttonIcon]=\"columnMenuButtonIcon\"\n [buttonFontIcon]=\"columnMenuButtonFontIcon\"\n [buttonSvgIcon]=\"columnMenuButtonSvgIcon\"\n [selectable]=\"columnHideable\"\n [selectableChecked]=\"columnHideableChecked\"\n [sortable]=\"columnSortable\"\n [pinnable]=\"columnPinnable\"\n [showHeader]=\"showColumnMenuHeader\"\n [headerText]=\"columnMenuHeaderText\"\n [headerTemplate]=\"columnMenuHeaderTemplate\"\n [showFooter]=\"showColumnMenuFooter\"\n [footerText]=\"columnMenuFooterText\"\n [footerTemplate]=\"columnMenuFooterTemplate\"\n [pinOptions]=\"columnPinOptions\"\n (columnChange)=\"_onColumnChange($event)\"\n ></acp-grid-column-menu>\n }\n </div>\n</div>\n}\n\n<div class=\"acp-grid-main acp-grid-layout\">\n <!-- Table content -->\n <div class=\"acp-grid-content acp-grid-layout\">\n <div #tableContainer class=\"mat-table-container\" [class.mat-table-with-data]=\"!_hasNoResult\">\n @if (!columnResizable) {\n <table\n mat-table\n [class.mat-table-hover]=\"rowHover\"\n [class.mat-table-striped]=\"rowStriped\"\n [class.mat-table-expandable]=\"expandable\"\n [dataSource]=\"dataSource\"\n [multiTemplateDataRows]=\"expandable\"\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 @if (rowSelectable && !hideRowSelectionCheckbox) {\n <ng-container matColumnDef=\"acpGridCheckboxColumnDef\">\n <th mat-header-cell *matHeaderCellDef class=\"acp-grid-checkbox-cell\">\n @if (multiSelectable) {\n <mat-checkbox\n [checked]=\"rowSelection.hasValue() && _isAllSelected()\"\n [indeterminate]=\"rowSelection.hasValue() && !_isAllSelected()\"\n (change)=\"$event ? _toggleMasterCheckbox() : null\"\n ></mat-checkbox>\n }\n </th>\n <td\n mat-cell\n *matCellDef=\"let row; let index = index; let dataIndex = dataIndex\"\n class=\"acp-grid-checkbox-cell\"\n >\n @if ( !( rowSelectionFormatter.hideCheckbox && rowSelectionFormatter.hideCheckbox(row,\n _getIndex(index, dataIndex)) ) ) {\n <mat-checkbox\n [disabled]=\"\n rowSelectionFormatter.disabled &&\n rowSelectionFormatter.disabled(row, _getIndex(index, dataIndex))\n \"\n [checked]=\"rowSelection.isSelected(row)\"\n (click)=\"$event.stopPropagation()\"\n (change)=\"$event ? _toggleNormalCheckbox(row) : null\"\n (keydown)=\"_onCheckboxKeyDown($event)\"\n (keyup)=\"_onCheckboxKeyUp($event)\"\n (keypress)=\"_onCheckboxKeyPress($event)\"\n ></mat-checkbox>\n }\n </td>\n <td mat-footer-cell *matFooterCellDef class=\"acp-grid-checkbox-cell\"></td>\n </ng-container>\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 <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 <div class=\"mat-header-cell-inner\">\n @if (headerTemplate | isTemplateRef) {\n <ng-template\n [ngTemplateOutlet]=\"$any(headerTemplate)\"\n [ngTemplateOutletContext]=\"{ $implicit: col, colDef: col }\"\n ></ng-template>\n } @else { @if ( $safeNavigationMigration($any(headerTemplate)?.[col.field]) |\n isTemplateRef ) {\n <ng-template\n [ngTemplateOutlet]=\"$any(headerTemplate)[col.field]\"\n [ngTemplateOutletContext]=\"{ $implicit: col, colDef: col }\"\n ></ng-template>\n } @else {\n <div\n [mat-sort-header]=\"col.sortProp?.id || col.field\"\n [disabled]=\"!col.sortable\"\n [disableClear]=\"col.sortProp?.disableClear ?? sortDisableClear\"\n [arrowPosition]=\"$safeNavigationMigration(col.sortProp?.arrowPosition)!\"\n [start]=\"$safeNavigationMigration(col.sortProp?.start)!\"\n >\n @if (col.showExpand) {\n <span class=\"acp-grid-expansion-placeholder\"></span>\n }\n <span>{{ col.header | toObservable | async }}</span>\n @if (col.sortable) {\n <svg\n class=\"acp-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 ></ng-template>\n } }\n </div>\n </th>\n <td\n mat-cell\n *matCellDef=\"let row; let index = index; let dataIndex = dataIndex\"\n [class]=\"\n col\n | colClass\n : row\n : rowChangeRecord\n : $safeNavigationMigration(rowChangeRecord?.currentValue)\n \"\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 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 ></ng-template>\n } @else { @if ($safeNavigationMigration($any(cellTemplate)?.[col.field]) |\n 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 ></ng-template>\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 ></ng-template>\n } @else { @if (col.showExpand) {\n <button\n class=\"acp-grid-row-expand-button\"\n matIconButton\n acpGridExpansionToggle\n type=\"button\"\n [(opened)]=\"expansionRowStates[dataIndex].expanded\"\n (toggleChange)=\"_onExpansionChange($event, row, col, dataIndex)\"\n >\n <svg\n class=\"acp-grid-icon acp-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-grid-cell\n [rowData]=\"row\"\n [colDef]=\"col\"\n [placeholder]=\"emptyValuePlaceholder\"\n (rowDataChange)=\"_onRowDataChange($event)\"\n ></acp-grid-cell>\n } } }\n </td>\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=\"acp-grid-expansion-placeholder\"></span>\n } @if (summaryTemplate | isTemplateRef) {\n <ng-template\n [ngTemplateOutlet]=\"$any(summaryTemplate)\"\n [ngTemplateOutletContext]=\"{ $implicit: col, colDef: col, data: data }\"\n ></ng-template>\n } @else { @if ( $safeNavigationMigration($any(summaryTemplate)?.[col.field]) |\n 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 ></ng-template>\n } @else {\n <acp-grid-cell\n [summary]=\"true\"\n [data]=\"data\"\n [colDef]=\"col\"\n [placeholder]=\"emptyValuePlaceholder\"\n ></acp-grid-cell>\n } }\n </td>\n </ng-container>\n } @if (!useContentHeaderRowTemplate) {\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns; sticky: true\"></tr>\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 (click)=\"_selectRow($event, row, _getIndex(index, dataIndex))\"\n (contextmenu)=\"_contextmenu($event, row, _getIndex(index, dataIndex))\"\n (keydown)=\"_onRowKeyDown($event, row, _getIndex(index, dataIndex))\"\n (keyup)=\"_onRowKeyUp($event, row, _getIndex(index, dataIndex))\"\n (keypress)=\"_onRowKeyPress($event, row, _getIndex(index, dataIndex))\"\n ></tr>\n } @if (_whetherShowSummary) {\n <tr mat-footer-row *matFooterRowDef=\"displayedColumns; sticky: true\"></tr>\n } @if (expandable) {\n <!-- Expanded Content Column - The expandable row is made up of this one column that spans across all columns -->\n <ng-container matColumnDef=\"acpGridExpansionColumnDef\">\n <td\n mat-cell\n *matCellDef=\"let row; let dataIndex = dataIndex\"\n [attr.colspan]=\"displayedColumns.length\"\n >\n <div class=\"acp-grid-expansion-detail-wrapper\">\n <div class=\"acp-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 ></ng-template>\n </div>\n </div>\n </td>\n </ng-container>\n <tr\n mat-row\n *matRowDef=\"\n let row;\n columns: ['acpGridExpansionColumnDef'];\n let dataIndex = dataIndex\n \"\n class=\"acp-grid-expansion\"\n [class]=\"expansionRowStates[dataIndex].expanded ? 'expanded' : 'collapsed'\"\n ></tr>\n }\n </table>\n } @else {\n <!-- TODO: Use flexbox-based mat-table -->\n <table\n mat-table\n columnResize\n [class.mat-table-hover]=\"rowHover\"\n [class.mat-table-striped]=\"rowStriped\"\n [class.mat-table-expandable]=\"expandable\"\n [dataSource]=\"dataSource\"\n [multiTemplateDataRows]=\"expandable\"\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 @if (rowSelectable && !hideRowSelectionCheckbox) {\n <ng-container matColumnDef=\"acpGridCheckboxColumnDef\">\n <th mat-header-cell *matHeaderCellDef class=\"acp-grid-checkbox-cell\">\n @if (multiSelectable) {\n <mat-checkbox\n [checked]=\"rowSelection.hasValue() && _isAllSelected()\"\n [indeterminate]=\"rowSelection.hasValue() && !_isAllSelected()\"\n (change)=\"$event ? _toggleMasterCheckbox() : null\"\n ></mat-checkbox>\n }\n </th>\n <td\n mat-cell\n *matCellDef=\"let row; let index = index; let dataIndex = dataIndex\"\n class=\"acp-grid-checkbox-cell\"\n >\n @if ( !( rowSelectionFormatter.hideCheckbox && rowSelectionFormatter.hideCheckbox(row,\n _getIndex(index, dataIndex)) ) ) {\n <mat-checkbox\n [disabled]=\"\n rowSelectionFormatter.disabled &&\n rowSelectionFormatter.disabled(row, _getIndex(index, dataIndex))\n \"\n [checked]=\"rowSelection.isSelected(row)\"\n (click)=\"$event.stopPropagation()\"\n (change)=\"$event ? _toggleNormalCheckbox(row) : null\"\n (keydown)=\"_onCheckboxKeyDown($event)\"\n (keyup)=\"_onCheckboxKeyUp($event)\"\n (keypress)=\"_onCheckboxKeyPress($event)\"\n ></mat-checkbox>\n }\n </td>\n <td mat-footer-cell *matFooterCellDef class=\"acp-grid-checkbox-cell\"></td>\n </ng-container>\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 <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.left]=\"col.left\"\n [style.right]=\"col.right\"\n [resizable]=\"col.resizable\"\n [matResizableMinWidthPx]=\"col.minWidth\"\n [matResizableMaxWidthPx]=\"col.maxWidth\"\n >\n <div class=\"mat-header-cell-inner\">\n @if (headerTemplate | isTemplateRef) {\n <ng-template\n [ngTemplateOutlet]=\"$any(headerTemplate)\"\n [ngTemplateOutletContext]=\"{ $implicit: col, colDef: col }\"\n ></ng-template>\n } @else { @if ( $safeNavigationMigration($any(headerTemplate)?.[col.field]) |\n isTemplateRef ) {\n <ng-template\n [ngTemplateOutlet]=\"$any(headerTemplate)[col.field]\"\n [ngTemplateOutletContext]=\"{ $implicit: col, colDef: col }\"\n ></ng-template>\n } @else {\n <div\n [mat-sort-header]=\"col.sortProp?.id || col.field\"\n [disabled]=\"!col.sortable\"\n [disableClear]=\"col.sortProp?.disableClear ?? sortDisableClear\"\n [arrowPosition]=\"$safeNavigationMigration(col.sortProp?.arrowPosition)!\"\n [start]=\"$safeNavigationMigration(col.sortProp?.start)!\"\n >\n @if (col.showExpand) {\n <span class=\"acp-grid-expansion-placeholder\"></span>\n }\n <span>{{ col.header | toObservable | async }}</span>\n @if (col.sortable) {\n <svg\n class=\"acp-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 ></ng-template>\n } }\n </div>\n </th>\n <td\n mat-cell\n *matCellDef=\"let row; let index = index; let dataIndex = dataIndex\"\n [class]=\"\n col\n | colClass\n : row\n : rowChangeRecord\n : $safeNavigationMigration(rowChangeRecord?.currentValue)\n \"\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.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 ></ng-template>\n } @else { @if ($safeNavigationMigration($any(cellTemplate)?.[col.field]) |\n 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 ></ng-template>\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 ></ng-template>\n } @else { @if (col.showExpand) {\n <button\n class=\"acp-grid-row-expand-button\"\n matIconButton\n acpGridExpansionToggle\n type=\"button\"\n [(opened)]=\"expansionRowStates[dataIndex].expanded\"\n (toggleChange)=\"_onExpansionChange($event, row, col, dataIndex)\"\n >\n <svg\n class=\"acp-grid-icon acp-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-grid-cell\n [rowData]=\"row\"\n [colDef]=\"col\"\n [placeholder]=\"emptyValuePlaceholder\"\n (rowDataChange)=\"_onRowDataChange($event)\"\n ></acp-grid-cell>\n } } }\n </td>\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.left]=\"col.left\"\n [style.right]=\"col.right\"\n >\n @if (col.showExpand) {\n <span class=\"acp-grid-expansion-placeholder\"></span>\n } @if (summaryTemplate | isTemplateRef) {\n <ng-template\n [ngTemplateOutlet]=\"$any(summaryTemplate)\"\n [ngTemplateOutletContext]=\"{ $implicit: col, colDef: col, data: data }\"\n ></ng-template>\n } @else { @if ( $safeNavigationMigration($any(summaryTemplate)?.[col.field]) |\n 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 ></ng-template>\n } @else {\n <acp-grid-cell\n [summary]=\"true\"\n [data]=\"data\"\n [colDef]=\"col\"\n [placeholder]=\"emptyValuePlaceholder\"\n ></acp-grid-cell>\n } }\n </td>\n </ng-container>\n } @if (!useContentHeaderRowTemplate) {\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns; sticky: true\"></tr>\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 (click)=\"_selectRow($event, row, _getIndex(index, dataIndex))\"\n (contextmenu)=\"_contextmenu($event, row, _getIndex(index, dataIndex))\"\n (keydown)=\"_onRowKeyDown($event, row, _getIndex(index, dataIndex))\"\n (keyup)=\"_onRowKeyUp($event, row, _getIndex(index, dataIndex))\"\n (keypress)=\"_onRowKeyPress($event, row, _getIndex(index, dataIndex))\"\n ></tr>\n } @if (_whetherShowSummary) {\n <tr mat-footer-row *matFooterRowDef=\"displayedColumns; sticky: true\"></tr>\n } @if (expandable) {\n <!-- Expanded Content Column - The expandable row is made up of this one column that spans across all columns -->\n <ng-container matColumnDef=\"acpGridExpansionColumnDef\">\n <td\n mat-cell\n *matCellDef=\"let row; let dataIndex = dataIndex\"\n [attr.colspan]=\"displayedColumns.length\"\n >\n <div class=\"acp-grid-expansion-detail-wrapper\">\n <div class=\"acp-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 ></ng-template>\n </div>\n </div>\n </td>\n </ng-container>\n <tr\n mat-row\n *matRowDef=\"\n let row;\n columns: ['acpGridExpansionColumnDef'];\n let dataIndex = dataIndex\n \"\n class=\"acp-grid-expansion\"\n [class]=\"expansionRowStates[dataIndex].expanded ? 'expanded' : 'collapsed'\"\n ></tr>\n }\n </table>\n }\n </div>\n\n <!-- No result -->\n @if (_hasNoResult) {\n <div class=\"acp-grid-no-result\">\n @if (noResultTemplate) {\n <ng-template [ngTemplateOutlet]=\"noResultTemplate\"></ng-template>\n } @else { {{ noResultText }} }\n </div>\n }\n </div>\n\n <!-- Tool sidebar -->\n @if (showSidebar) {\n <div class=\"acp-grid-sidebar\">\n @if (sidebarTemplate) {\n <ng-template [ngTemplateOutlet]=\"sidebarTemplate\"></ng-template>\n }\n </div>\n }\n</div>\n\n<div class=\"acp-grid-footer\">\n <!-- Status Bar -->\n @if (showStatusbar) {\n <div class=\"acp-grid-statusbar\">\n @if (statusbarTemplate) {\n <ng-template [ngTemplateOutlet]=\"statusbarTemplate\"></ng-template>\n }\n </div>\n }\n\n <!-- Pagination -->\n <div class=\"acp-grid-pagination\">\n @if (paginationTemplate) {\n <ng-template [ngTemplateOutlet]=\"paginationTemplate\"></ng-template>\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 ></mat-paginator>\n }\n </div>\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 ></ng-template>\n } @else { @if ($safeNavigationMigration($any(headerExtraTemplate)?.[col.field]) | isTemplateRef) {\n <ng-template\n [ngTemplateOutlet]=\"headerExtraTemplate[col.field]\"\n [ngTemplateOutletContext]=\"{ $implicit: col, colDef: col }\"\n ></ng-template>\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 OnDestroy,\n OnInit,\n OnChanges,\n SimpleChanges,\n forwardRef,\n input,\n output,\n signal,\n model,\n OutputEmitterRef,\n WritableSignal,\n ChangeDetectionStrategy,\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',\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 changeDetection: ChangeDetectionStrategy.Eager,\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 [startDate]=\"startDate()\"\n [endDate]=\"endDate()\"\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 startDate = input<Date>(new Date());\n endDate = input<Date>(new Date());\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\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 }\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.Eager,\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 inject,\n InjectionToken,\n Injector,\n OnDestroy,\n TemplateRef,\n ViewContainerRef,\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@Directive()\nexport abstract class _AcpPopoverContentBase implements OnDestroy {\n private _template = inject(TemplateRef);\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);\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 * @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 this._changeDetectorRef.markForCheck();\n this._portal.attach(this._outlet, context);\n this._attached.next();\n }\n\n /**\n * Detaches the content.\n * @docs-private\n */\n detach() {\n if (this._portal.isAttached) {\n this._portal.detach();\n }\n }\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@Directive({\n selector: 'ng-template[acpPopoverContent]',\n providers: [{ provide: ACP_POPOVER_CONTENT, useExisting: AcpPopoverContent }],\n})\nexport class AcpPopoverContent extends _AcpPopoverContentBase {}\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\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 /** Event emitted when the popover is closed. */\n @Output() closed = new EventEmitter<PopoverCloseReason>();\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 ngOnInit() {\n this.setPositionClasses();\n }\n\n ngOnDestroy() {\n this.closed.complete();\n clearTimeout(this._exitFallbackTimeout);\n }\n\n /** Handle a keyboard event from the popover, delegating to the appropriate action. */\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 /** Close popover on click if `closeOnPanelClick` is true. */\n _handleClick() {\n if (this.closeOnPanelClick) {\n this.closed.emit('click');\n }\n }\n\n /** Disables close of popover when leaving trigger element and mouse over the popover. */\n _handleMouseOver() {\n if (this.triggerEvent === 'hover') {\n this.closeDisabled = true;\n }\n }\n\n /** Enables close of popover when mouse leaving popover element. */\n _handleMouseLeave() {\n if (this.triggerEvent === 'hover') {\n setTimeout(() => {\n this.closeDisabled = false;\n this.closed.emit();\n }, this.leaveDelay);\n }\n }\n\n /** Sets the current styles for the popover to allow for dynamically changing settings. */\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 */\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 /** Sets the popover-panel's elevation. */\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 /** Callback that is invoked when the panel animation completes. */\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 protected _onAnimationStart(state: string) {\n if (state === ENTER_ANIMATION || state === EXIT_ANIMATION) {\n this._isAnimating = true;\n }\n }\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@Directive({\n selector: '[acp-popover-trigger-for], [acpPopoverTriggerFor]',\n exportAs: 'acpPopoverTrigger',\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\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 ngAfterContentInit() {\n this._checkPopover();\n this._setCurrentConfig();\n }\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._overlayRef) {\n this._overlayRef.dispose();\n this._overlayRef = null;\n }\n }\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 /** Handles mouse click on the trigger. */\n _handleClick(_event: MouseEvent): void {\n if (this.popover.triggerEvent === 'click') {\n this.togglePopover();\n }\n }\n\n /** Handles mouse enter on the trigger. */\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 /** Handles mouse leave on the trigger. */\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 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 * 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 timeout for hover event.\n if (this._mouseoverTimer) {\n clearTimeout(this._mouseoverTimer);\n this._mouseoverTimer = 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 MdPopover 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","export const ACP_ACTIVE_DATE_DEBOUNCE = 100;\n\nexport enum ACP_DATE_OPTION_TYPE {\n DATE_DIFF = 1,\n LAST_MONTH = 2,\n THIS_MONTH = 3,\n YEAR_TO_DATE = 4,\n CUSTOM = 5,\n MONTH_TO_DATE = 6,\n WEEK_TO_DATE = 7,\n}\n","import { DateRange, MatCalendar } from '@angular/material/datepicker';\nimport { DatePipe } from '@angular/common';\nimport { ACP_DATE_OPTION_TYPE } from '../constant/date-filter-const';\nimport type { IAcpSelectDateOption } from '../model/select-date-option.model';\nimport { ChangeDetectorRef } from '@angular/core';\nimport type { AcpActiveDate } from '../model/active-data.model';\n\n/**\n * Reinicia el estado de selección de todas las opciones\n * y marca la opción dada como seleccionada si se proporciona.\n *\n * @param options - Lista de opciones de fecha\n * @param selectedOption - Opción a marcar como seleccionada\n */\nexport function resetOptionSelection(\n options: IAcpSelectDateOption[],\n selectedOption?: IAcpSelectDateOption,\n) {\n options.forEach(option => (option.isSelected = false));\n if (selectedOption) {\n selectedOption.isSelected = true;\n }\n}\n\n/**\n * Marca la opción de fecha personalizada como seleccionada.\n *\n * @param options - Lista de opciones de fecha\n */\nexport function selectCustomOption(options: IAcpSelectDateOption[]): void {\n const customOption = options.find(option => option.optionType === ACP_DATE_OPTION_TYPE.CUSTOM);\n if (customOption) customOption.isSelected = true;\n}\n\n/**\n * Retorna una nueva fecha con el desplazamiento de año aplicado.\n *\n * @param offset - Número de años a agregar (negativo para años pasados)\n * @returns Objeto Date con año actualizado\n */\nexport function getDateWithOffset(offset: number) {\n const date = new Date();\n date.setFullYear(date.getFullYear() + offset);\n return date;\n}\n\n/**\n * Crea un clon profundo del objeto o array proporcionado.\n *\n * @param data - Datos a clonar\n * @returns Una copia profunda de los datos\n */\nexport function getClone<T>(data: T): T {\n return JSON.parse(JSON.stringify(data));\n}\n\n/**\n * Formatea un objeto de fecha en una cadena usando Angular DatePipe.\n *\n * @param date - Fecha a formatear\n * @param dateFormat - Formato de fecha deseado (ej: 'dd/MM/yyyy')\n * @returns Cadena de fecha formateada\n */\nexport function getDateString(date: Date, dateFormat: string): string {\n const datePipe = new DatePipe('en');\n return datePipe.transform(date, dateFormat) ?? '';\n}\n\n/**\n * Formatea un rango de fechas en una cadena con fechas de inicio y fin.\n *\n * @param range - Rango de fechas con inicio y fin\n * @param dateFormat - Formato de fecha deseado\n * @returns Cadena de rango formateada (ej: '01/01/2023 - 07/01/2023')\n */\nexport function getFormattedDateString(range: DateRange<Date>, dateFormat: string) {\n if (!(range.start && range.end)) {\n return '';\n }\n return getDateString(range.start, dateFormat) + ' - ' + getDateString(range.end, dateFormat);\n}\n\n/**\n * Crea un objeto de opción de fecha estandarizado para desplegables.\n *\n * @param label - Etiqueta de visualización para la opción\n * @param key - Clave de opción de DEFAULT_DATE_OPTION_ENUM\n * @param dateDiff - Desplazamiento en días desde la fecha actual (por defecto: 0)\n * @param isVisible - Si la opción es visible (por defecto: true)\n * @returns Objeto ISelectDateOption\n */\nexport function createOption(\n label: string,\n key: ACP_DATE_OPTION_TYPE,\n dateDiff = 0,\n isVisible = true,\n): IAcpSelectDateOption {\n return {\n optionLabel: label,\n optionType: key,\n dateDiff,\n isSelected: false,\n isVisible,\n };\n}\n\n/** Escapa una cadena para que pueda usarse como literal dentro de una RegExp. */\nfunction escapeRegExp(value: string): string {\n return value.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n}\n\n/** Retorna verdadero cuando ambas fechas caen en el mismo día del calendario. */\nexport function isSameDay(a: Date, b: Date): boolean {\n return (\n a.getFullYear() === b.getFullYear() &&\n a.getMonth() === b.getMonth() &&\n a.getDate() === b.getDate()\n );\n}\n\n/**\n * Analiza una cadena de fecha contra un formato de fecha estilo Angular (el subconjunto de\n * tokens `yyyy`, `yy`, `MM`, `M`, `dd`, `d`). Retorna `null` si la cadena\n * no coincide con el formato o no es una fecha de calendario real (ej: `31/02`).\n *\n * @param value - La cadena de fecha ingresada por el usuario.\n * @param format - El formato esperado, ej: `dd/MM/yyyy`.\n * @returns La fecha analizada, o `null` si no coincide.\n */\nexport function parseDateByFormat(value: string, format: string): Date | null {\n const tokens: string[] = [];\n const tokenRegex = /yyyy|yy|MM|M|dd|d/g;\n let pattern = '^';\n let lastIndex = 0;\n let token: RegExpExecArray | null;\n while ((token = tokenRegex.exec(format)) !== null) {\n pattern += escapeRegExp(format.slice(lastIndex, token.index));\n switch (token[0]) {\n case 'yyyy':\n pattern += '(\\\\d{4})';\n break;\n case 'yy':\n pattern += '(\\\\d{2})';\n break;\n case 'MM':\n case 'dd':\n pattern += '(\\\\d{2})';\n break;\n default: // 'M' or 'd'\n pattern += '(\\\\d{1,2})';\n break;\n }\n tokens.push(token[0]);\n lastIndex = token.index + token[0].length;\n }\n pattern += escapeRegExp(format.slice(lastIndex)) + '$';\n\n const match = new RegExp(pattern).exec(value.trim());\n if (!match) {\n return null;\n }\n\n let year = NaN;\n let month = NaN;\n let day = NaN;\n tokens.forEach((token, index) => {\n const part = parseInt(match[index + 1], 10);\n if (token.startsWith('y')) {\n year = token === 'yy' ? 2000 + part : part;\n } else if (token.startsWith('M')) {\n month = part - 1;\n } else {\n day = part;\n }\n });\n if (isNaN(year) || isNaN(month) || isNaN(day)) {\n return null;\n }\n\n const date = new Date(year, month, day);\n // Reject overflow dates such as 31/02 that Date silently rolls over.\n if (date.getFullYear() !== year || date.getMonth() !== month || date.getDate() !== day) {\n return null;\n }\n return date;\n}\n\n/**\n * Deriva las expresiones de fecha-matemática relativa (inicio/fin) para una opción de fecha,\n * para mostrar en inputs editables. Solo las opciones de diferencia de días tienen una forma relativa\n * limpia (ej: `Últimos 7 días` -> `now-7d` .. `now`); un `startExpr` / `endExpr` explícito\n * en la opción anula el valor derivado. Retorna `null` cuando no aplica representación relativa,\n * para que la llamada recurra a fechas absolutas.\n *\n * @param option - La opción de fecha seleccionada.\n * @returns Expresiones `{ start, end }`, o `null`.\n */\nexport function getRelativeExpr(\n option?: IAcpSelectDateOption | null,\n): { start: string; end: string } | null {\n if (!option) {\n return null;\n }\n if (option.startExpr && option.endExpr) {\n return { start: option.startExpr, end: option.endExpr };\n }\n if (option.optionType !== ACP_DATE_OPTION_TYPE.DATE_DIFF) {\n return null;\n }\n const diff = option.dateDiff ?? 0;\n const start = diff === 0 ? 'now' : `now${diff > 0 ? '+' : ''}${diff}d`;\n return { start, end: 'now' };\n}\n\n/**\n * Retorna la fecha del próximo mes basada en la fecha dada.\n *\n * @param currDate - Fecha actual\n * @returns Un nuevo objeto Date incrementado por un mes\n */\nexport function getDateOfNextMonth(currDate: Date): Date {\n const date = new Date(currDate);\n date.setMonth(currDate.getMonth() + 1);\n return date;\n}\n\n/**\n * Retorna el primer día del mes siguiente a la fecha dada.\n *\n * @param currDate - La fecha actual\n * @returns Un objeto Date establecido al primer día del próximo mes\n */\nexport function getFirstDateOfNextMonth(currDate: Date): Date {\n return new Date(currDate.getFullYear(), currDate.getMonth() + 1, 1);\n}\n\n/**\n * Retorna el número de días en el mes de la fecha dada.\n *\n * @param date La fecha para calcular los días.\n * @returns Número de días en el mes.\n */\nexport function getDaysInMonth(date: Date): number {\n return new Date(date.getFullYear(), date.getMonth() + 1, 0).getDate();\n}\n\n/**\n * Calcula el DateRange esperado para una opción dada, reflejando la\n * lógica en updateDateWithSelectedOption. Se usa para auto-coincidir\n * selectedDates proporcionadas contra la lista de opciones disponibles.\n *\n * Retorna null para opciones CUSTOM y cualquier tipo no manejado.\n *\n * @param option - La opción de fecha para calcular un rango\n * @returns DateRange calculado, o null si no aplica\n */\nexport function computeOptionDateRange(option: IAcpSelectDateOption): DateRange<Date> | null {\n if (option.optionType === ACP_DATE_OPTION_TYPE.CUSTOM) {\n return null;\n }\n\n if (option.callBackFunction) {\n return option.callBackFunction();\n }\n\n const currDate = new Date();\n let startDate: Date;\n let lastDate: Date;\n\n switch (option.optionType) {\n case ACP_DATE_OPTION_TYPE.DATE_DIFF:\n startDate = new Date();\n startDate.setDate(startDate.getDate() + (option.dateDiff ?? 0));\n lastDate = new Date();\n break;\n\n case ACP_DATE_OPTION_TYPE.LAST_MONTH: {\n const lastMonth = new Date(currDate);\n lastMonth.setMonth(currDate.getMonth() - 1);\n startDate = new Date(lastMonth.getFullYear(), lastMonth.getMonth(), 1);\n lastDate = new Date(lastMonth.getFullYear(), lastMonth.getMonth(), getDaysInMonth(lastMonth));\n break;\n }\n\n case ACP_DATE_OPTION_TYPE.THIS_MONTH:\n startDate = new Date(currDate.getFullYear(), currDate.getMonth(), 1);\n lastDate = new Date(currDate.getFullYear(), currDate.getMonth(), getDaysInMonth(currDate));\n break;\n\n case ACP_DATE_OPTION_TYPE.YEAR_TO_DATE:\n startDate = new Date(currDate.getFullYear(), 0, 1);\n lastDate = new Date();\n break;\n\n case ACP_DATE_OPTION_TYPE.MONTH_TO_DATE:\n startDate = new Date(currDate.getFullYear(), currDate.getMonth(), 1);\n lastDate = new Date();\n break;\n\n default:\n return null;\n }\n\n return new DateRange<Date>(startDate, lastDate);\n}\n\n/**\n * Anula el setter `activeDate` para una instancia de MatCalendar, inyectando lógica de manejador personalizado\n * mientras preserva el comportamiento del setter original. Útil para reaccionar a eventos de navegación de fecha interna\n * (ej: cambios de mes) en el calendario de Angular Material.\n *\n * @param calendar - Instancia de MatCalendar cuyo setter `activeDate` será anulado.\n * @param cdref - ChangeDetectorRef para activar actualizaciones de vista después de que se ejecute el setter.\n * @param handler - Función de callback personalizada ejecutada siempre que se establezca `activeDate`.\n */\nexport function overrideActiveDateSetter(\n calendar: MatCalendar<Date>,\n cdref: ChangeDetectorRef,\n handler: (date: AcpActiveDate) => void,\n): void {\n const proto = Object.getPrototypeOf(calendar);\n const descriptor = Object.getOwnPropertyDescriptor(proto, 'activeDate');\n\n if (!(descriptor?.set && descriptor?.get)) {\n console.warn(\n 'overrideActiveDateSetter: setter/getter de activeDate no encontrado en el prototipo de MatCalendar.',\n );\n return;\n }\n const originalSetter = descriptor.set;\n const originalGetter = descriptor.get;\n\n Object.defineProperty(calendar, 'activeDate', {\n configurable: true,\n enumerable: false,\n get() {\n return originalGetter.call(this);\n },\n\n set(value: Date) {\n const activeDate: AcpActiveDate = {\n previous: originalGetter.call(this) ?? value,\n current: value,\n };\n originalSetter.call(this, value);\n handler.call(this, activeDate);\n cdref.markForCheck();\n },\n });\n}\n","import { ACP_DATE_OPTION_TYPE } from '../constant/date-filter-const';\nimport { IAcpSelectDateOption } from '../model/select-date-option.model';\nimport { createOption } from '../utils/date-picker-utilities';\n\nexport const ACP_DEFAULT_DATE_OPTIONS: IAcpSelectDateOption[] = [\n createOption('Hoy', ACP_DATE_OPTION_TYPE.DATE_DIFF, 0),\n createOption('Ayer', ACP_DATE_OPTION_TYPE.DATE_DIFF, -1),\n createOption('Últimos 7 días', ACP_DATE_OPTION_TYPE.DATE_DIFF, -7),\n createOption('Últimos 30 días', ACP_DATE_OPTION_TYPE.DATE_DIFF, -30),\n createOption('Mes anterior', ACP_DATE_OPTION_TYPE.LAST_MONTH),\n createOption('Este mes', ACP_DATE_OPTION_TYPE.THIS_MONTH),\n createOption('Mes hasta hoy', ACP_DATE_OPTION_TYPE.MONTH_TO_DATE),\n createOption('Semana hasta hoy', ACP_DATE_OPTION_TYPE.WEEK_TO_DATE, 0, false),\n createOption('Año hasta hoy', ACP_DATE_OPTION_TYPE.YEAR_TO_DATE),\n createOption('Rango personalizado', ACP_DATE_OPTION_TYPE.CUSTOM),\n] as IAcpSelectDateOption[];\n","/**\n * Utilidades de análisis de diferencia de tiempo / fecha legibles por humanos.\n *\n * Tres analizadores independientes más un punto de entrada público que los combina:\n * 1. {@link parseIso8601Duration} - Duraciones ISO 8601 (`P7D`, `PT1H30M`),\n * mayúsculas estrictas según lo requerido por la especificación.\n * 2. {@link parseDateMath} - Matemática de fecha estilo Grafana/Elasticsearch (`now-7d`).\n * 3. {@link parseNaturalLanguage} - lenguaje natural (`7 days ago`) a través de un\n * analizador que la aplicación host registra con {@link setNaturalLanguageParser}\n * (típicamente `chrono-node`). Sin analizador registrado significa que este paso es una\n * no-op, por lo que la biblioteca nunca depende directamente de `chrono-node`.\n *\n * {@link parseHumanDate} intenta los tres y acepta duraciones ISO en minúsculas.\n */\n\n/**\n * Una duración de calendario analizada desde una cadena de duración ISO 8601.\n * Cada campo por defecto es 0 cuando su componente está ausente.\n */\nexport interface Duration {\n years: number;\n months: number;\n weeks: number;\n days: number;\n hours: number;\n minutes: number;\n seconds: number;\n}\n\n/**\n * Opciones para {@link parseHumanDate}.\n */\nexport interface ParseHumanDateOptions {\n /** Referencia \"ahora\" usada para resolver expresiones relativas. Por defecto `new Date()`. */\n base?: Date;\n /**\n * Dirección aplicada a una duración ISO 8601 desnuda: `-1` la resuelve al\n * pasado (`base - duration`, ej: \"últimos 7 días\"), `1` al futuro.\n * Por defecto `-1` para coincidir con el vocabulario \"Últimos N días\" de este selector.\n */\n durationSign?: 1 | -1;\n /**\n * Si se debe recurrir al analizador de lenguaje natural registrado.\n * Por defecto `true`. No tiene efecto si no se registró ningún analizador.\n */\n useNaturalLanguage?: boolean;\n}\n\n// Duración ISO 8601. Los designadores están en mayúsculas según la especificación; `M` es meses antes\n// del separador `T` y minutos después. Las fracciones permiten `.` o `,`.\n// Los guardias `(?!$)` rechazan las cadenas degeneradas `P` y `PT`.\nconst ISO_8601_DURATION =\n /^P(?!$)(?:(\\d+(?:[.,]\\d+)?)Y)?(?:(\\d+(?:[.,]\\d+)?)M)?(?:(\\d+(?:[.,]\\d+)?)W)?(?:(\\d+(?:[.,]\\d+)?)D)?(?:T(?!$)(?:(\\d+(?:[.,]\\d+)?)H)?(?:(\\d+(?:[.,]\\d+)?)M)?(?:(\\d+(?:[.,]\\d+)?)S)?)?$/;\n\n// Matemática de fecha: `now` seguido de cero o más operaciones `±N<unit>`.\n// Unidades: y=año, M=mes, w=semana, d=día, h=hora, m=minuto, s=segundo.\nconst DATE_MATH = /^now((?:[+-]\\d+[yMwdhms])*)$/;\nconst DATE_MATH_OP = /([+-])(\\d+)([yMwdhms])/g;\n\n/**\n * Analiza una cadena de duración ISO 8601 estricta en mayúsculas en una {@link Duration}.\n *\n * Compatible con especificación: los designadores deben estar en mayúsculas, por lo que `P7D` se analiza pero `p7d`\n * no. Use {@link parseHumanDate} si necesita entrada permisiva (minúsculas).\n *\n * @param input - Duración ISO 8601 candidata, ej: `P1Y2M10DT2H30M`.\n * @returns La duración analizada, o `null` si la cadena no es una duración válida.\n */\nexport function parseIso8601Duration(input: string): Duration | null {\n const match = ISO_8601_DURATION.exec(input);\n if (!match) {\n return null;\n }\n const num = (value: string | undefined): number =>\n value === undefined ? 0 : parseFloat(value.replace(',', '.'));\n return {\n years: num(match[1]),\n months: num(match[2]),\n weeks: num(match[3]),\n days: num(match[4]),\n hours: num(match[5]),\n minutes: num(match[6]),\n seconds: num(match[7]),\n };\n}\n\n/**\n * Applies a single date-math unit to a date, returning a new Date.\n * Date-level units use calendar-aware setters; the caller guarantees `unit`.\n */\nfunction applyUnit(date: Date, unit: string, amount: number): Date {\n const result = new Date(date.getTime());\n switch (unit) {\n case 'y':\n result.setFullYear(result.getFullYear() + amount);\n break;\n case 'M':\n result.setMonth(result.getMonth() + amount);\n break;\n case 'w':\n result.setDate(result.getDate() + amount * 7);\n break;\n case 'd':\n result.setDate(result.getDate() + amount);\n break;\n case 'h':\n result.setHours(result.getHours() + amount);\n break;\n case 'm':\n result.setMinutes(result.getMinutes() + amount);\n break;\n case 's':\n result.setSeconds(result.getSeconds() + amount);\n break;\n }\n return result;\n}\n\n/**\n * Applies a {@link Duration} to a base date, returning a new Date.\n *\n * Calendar units (years, months, weeks, days) use Date setters and are\n * therefore truncated to integers; sub-day units (hours, minutes, seconds)\n * are applied as milliseconds and preserve fractional values.\n *\n * @param base - The date to offset from.\n * @param duration - The duration to apply.\n * @param sign - `1` to add (future), `-1` to subtract (past). Defaults to `1`.\n * @returns A new Date offset from `base`.\n */\nexport function addDuration(base: Date, duration: Duration, sign: 1 | -1 = 1): Date {\n let result = new Date(base.getTime());\n result = applyUnit(result, 'y', sign * duration.years);\n result = applyUnit(result, 'M', sign * duration.months);\n result.setDate(result.getDate() + sign * (duration.weeks * 7 + duration.days));\n const subDayMs = (duration.hours * 3600 + duration.minutes * 60 + duration.seconds) * 1000;\n result.setTime(result.getTime() + sign * subDayMs);\n return result;\n}\n\n/**\n * Parses a Grafana/Elasticsearch style date-math expression into a Date.\n *\n * Supports `now` optionally followed by `±N<unit>` operations applied left to\n * right, e.g. `now`, `now-7d`, `now-1M+15d`. Units: `y M w d h m s`\n * (note `M` = month, `m` = minute). Snapping (`/d`) is not supported.\n *\n * @param input - The date-math expression.\n * @param base - Reference \"now\". Defaults to `new Date()`.\n * @returns The resolved Date, or `null` if the expression is not date math.\n */\nexport function parseDateMath(input: string, base: Date = new Date()): Date | null {\n const match = DATE_MATH.exec(input);\n if (!match) {\n return null;\n }\n let result = new Date(base.getTime());\n const operations = match[1];\n DATE_MATH_OP.lastIndex = 0;\n let op: RegExpExecArray | null;\n while ((op = DATE_MATH_OP.exec(operations)) !== null) {\n const sign = op[1] === '-' ? -1 : 1;\n const amount = parseInt(op[2], 10);\n result = applyUnit(result, op[3], sign * amount);\n }\n return result;\n}\n\n/**\n * Signature of a natural-language date parser, matching `chrono-node`'s\n * `parseDate(text, ref)` export.\n */\nexport type NaturalLanguageParser = (text: string, ref?: Date) => Date | null;\n\n// A parser registered by the host app via `setNaturalLanguageParser`. The\n// library never imports `chrono-node` itself, keeping it a truly optional\n// dependency that works the same in browser, SSR, and Node builds.\nlet registeredParser: NaturalLanguageParser | null = null;\n\n/**\n * Registers a natural-language parser (typically `chrono-node`'s `parseDate`)\n * for {@link parseNaturalLanguage} / {@link parseHumanDate} to use.\n *\n * The consumer imports the package themselves, so their bundler resolves it\n * and this library never references it directly. Call with `null` to disable.\n *\n * @example\n * import * as chrono from 'chrono-node';\n * setNaturalLanguageParser((text, ref) => chrono.parseDate(text, ref));\n *\n * @param parser - The parser to use, or `null` to disable.\n */\nexport function setNaturalLanguageParser(parser: NaturalLanguageParser | null): void {\n registeredParser = parser;\n}\n\n/**\n * Parses natural language (`7 days ago`, `next friday`) using the parser\n * registered via {@link setNaturalLanguageParser}.\n *\n * @param input - The natural-language date expression.\n * @param base - Reference date the parser resolves against. Defaults to `new Date()`.\n * @returns The parsed Date, or `null` if no parser is registered or the text\n * could not be parsed.\n */\nexport function parseNaturalLanguage(input: string, base: Date = new Date()): Date | null {\n if (!registeredParser) {\n return null;\n }\n try {\n return registeredParser(input, base) ?? null;\n } catch {\n return null;\n }\n}\n\n/**\n * Public entry point: parses a human-readable date/duration expression into a\n * concrete Date by trying, in order, date math, ISO 8601 duration, then\n * natural language via the registered parser.\n *\n * Unlike {@link parseIso8601Duration}, this accepts lowercase ISO durations\n * (`p7d`) by upper-casing the input before the ISO attempt.\n *\n * @param input - The expression, e.g. `now-7d`, `P7D`, `p7d`, `3 weeks ago`.\n * @param options - See {@link ParseHumanDateOptions}.\n * @returns The parsed Date, or `null` if nothing matched.\n */\nexport function parseHumanDate(input: string, options: ParseHumanDateOptions = {}): Date | null {\n const base = options.base ?? new Date();\n const durationSign = options.durationSign ?? -1;\n const useNaturalLanguage = options.useNaturalLanguage ?? true;\n\n const trimmed = input?.trim();\n if (!trimmed) {\n return null;\n }\n\n // 1. Date math (`now-7d`) - unambiguous and cheap.\n const fromDateMath = parseDateMath(trimmed, base);\n if (fromDateMath) {\n return fromDateMath;\n }\n\n // 2. ISO 8601 duration - upper-cased so lowercase input is accepted here.\n const duration = parseIso8601Duration(trimmed.toUpperCase());\n if (duration) {\n return addDuration(base, duration, durationSign);\n }\n\n // 3. Natural language via the registered parser, if any.\n if (useNaturalLanguage) {\n return parseNaturalLanguage(trimmed, base);\n }\n\n return null;\n}\n","/**\n * AcpDateRangeCalendar Component\n *\n * Custom calendar component that manages two side-by-side month views\n * with support for:\n * - Date range selection with visual highlighting\n * - Hover state feedback for better UX\n * - Navigation controls for month/year selection\n * - Material Design 3 integration\n * - Responsive layout\n *\n * @author AcontPlus S.A.S\n * @version 2.0.0\n */\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n inject,\n Input,\n Output,\n Renderer2,\n signal,\n ViewChild,\n} from '@angular/core';\nimport { DateRange, MatCalendar } from '@angular/material/datepicker';\nimport type { AcpActiveDate } from './../model/active-data.model';\nimport {\n getDateOfNextMonth,\n getFirstDateOfNextMonth,\n overrideActiveDateSetter,\n} from '../utils/date-picker-utilities';\nimport { ACP_ACTIVE_DATE_DEBOUNCE } from '../constant/date-filter-const';\n\n@Component({\n selector: 'acp-date-range-calendar',\n templateUrl: './date-range-calendar.html',\n styleUrls: ['./date-range-calendar.scss'],\n imports: [MatCalendar],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AcpDateRangeCalendar implements AfterViewInit {\n firstViewStartDate = signal(new Date());\n secondViewStartDate = signal(getDateOfNextMonth(this.firstViewStartDate()));\n secondViewMinDate = signal(getFirstDateOfNextMonth(this.firstViewStartDate()));\n\n @Input() minDate!: Date;\n @Input() maxDate!: Date;\n\n /** Emits when the user changes the selection by clicking dates in the views. */\n @Output() selectedDatesChange = new EventEmitter<DateRange<Date>>();\n\n @ViewChild('firstCalendarView') firstCalendarView!: MatCalendar<Date>;\n @ViewChild('secondCalendarView') secondCalendarView!: MatCalendar<Date>;\n\n private _selectedDates!: DateRange<Date> | null;\n private isAllowHoverEvent = false;\n private cdref = inject(ChangeDetectorRef);\n private el = inject(ElementRef);\n private renderer = inject(Renderer2);\n\n /**\n * Updates the selected date range and synchronizes both calendar views.\n */\n @Input()\n set selectedDates(selectedDates: DateRange<Date> | null) {\n this._selectedDates = selectedDates;\n if (!selectedDates || !(selectedDates.start && selectedDates.end)) return;\n\n const startDate = selectedDates.start ?? new Date();\n const endDate = selectedDates.end;\n this.firstViewStartDate.set(startDate);\n this.secondViewMinDate.set(getFirstDateOfNextMonth(startDate));\n const computedEndDate =\n startDate.getMonth() === endDate.getMonth() ? getDateOfNextMonth(endDate) : endDate;\n this.secondViewStartDate.set(computedEndDate);\n }\n\n get selectedDates() {\n return this._selectedDates;\n }\n\n /**\n * Lifecycle hook that is called after Angular has fully initialized\n * the component's view (and child views).\n *\n * Used here to attach hover events and register active date change\n * listeners once the calendar views are available in the DOM.\n */\n ngAfterViewInit(): void {\n this.attachHoverEvent('firstCalendarView');\n this.attachHoverEvent('secondCalendarView');\n this.registerActiveDateChangeEvents();\n }\n\n /**\n * Handles month selection in the first view.\n *\n * @param event - Selected month date\n */\n monthSelected(viewName: string) {\n if (viewName === 'secondCalendarView') {\n this.removeDefaultFocus(this);\n }\n this.attachHoverEvent(viewName);\n }\n\n /**\n * Updates the selected date range when a date is clicked.\n *\n * @param date - Date clicked by the user\n */\n updateDateRangeSelection(date: Date | null): void {\n const selectedDates = this.selectedDates;\n if (\n !selectedDates ||\n (selectedDates.start && selectedDates.end) ||\n (selectedDates.start && date && selectedDates.start > date)\n ) {\n this._selectedDates = new DateRange<Date>(date, null);\n this.isAllowHoverEvent = true;\n } else {\n this.isAllowHoverEvent = false;\n this._selectedDates = new DateRange<Date>(selectedDates.start, date);\n }\n this.selectedDatesChange.emit(this._selectedDates);\n this.cdref.markForCheck();\n }\n\n /**\n * Registers event handlers for active date changes on both calendar views.\n *\n * This method overrides the default `activeDate` property setter of each\n * calendar view to ensure custom handlers are executed whenever the\n * active date changes.\n */\n private registerActiveDateChangeEvents(): void {\n overrideActiveDateSetter(\n this.firstCalendarView,\n this.cdref,\n this.onFirstViewActiveDateChange.bind(this),\n );\n overrideActiveDateSetter(\n this.secondCalendarView,\n this.cdref,\n this.onSecondViewActiveDateChange.bind(this),\n );\n }\n\n /**\n * Handles the event when the active date of the first calendar view changes.\n *\n * @param activeDate - Object containing `previous` and `current` date values.\n */\n private onFirstViewActiveDateChange(activeDate: AcpActiveDate): void {\n const handler = this.isPrevious(activeDate)\n ? () => this.handleFirstViewPrevEvent(activeDate)\n : () => this.handleFirstViewNextEvent(activeDate.current);\n\n // Delay execution because active date event fires before view update\n setTimeout(handler, ACP_ACTIVE_DATE_DEBOUNCE);\n }\n\n /**\n * Handles the event when the active date of the second calendar view changes.\n *\n * @param activeDate - Object containing `previous` and `current` date values.\n */\n private onSecondViewActiveDateChange(_activeDate: AcpActiveDate): void {\n this.attachHoverEvent('secondCalendarView');\n }\n\n /**\n * Handles the \"next\" navigation event for the first calendar view.\n *\n * @param currDate - The currently active date in the first calendar view.\n * @param force - Optional flag that can be used to enforce updates (not used in current logic).\n */\n private handleFirstViewNextEvent(currDate: Date, _force?: boolean): void {\n if (this.firstCalendarView.currentView.toLocaleLowerCase() !== 'month') {\n return;\n }\n this.attachHoverEvent('firstCalendarView');\n const nextMonthDate = getFirstDateOfNextMonth(currDate);\n let secondViewActiveDate = this.secondCalendarView.activeDate;\n if (nextMonthDate < secondViewActiveDate) {\n this.secondViewMinDate.set(nextMonthDate);\n this.attachHoverEvent('secondCalendarView');\n return;\n }\n secondViewActiveDate = getDateOfNextMonth(currDate);\n this.secondViewMinDate.set(nextMonthDate);\n this.secondCalendarView.activeDate = secondViewActiveDate;\n this.cdref.detectChanges();\n }\n\n /**\n * Handles the \"previous\" navigation event for the first calendar view.\n *\n * @param activeDate - Object containing `previous` and `current` date values.\n */\n private handleFirstViewPrevEvent(activeDate: AcpActiveDate): void {\n if (this.firstCalendarView.currentView.toLocaleLowerCase() !== 'month') {\n return;\n }\n this.secondViewMinDate.set(getFirstDateOfNextMonth(activeDate.current));\n this.attachHoverEvent('firstCalendarView');\n this.attachHoverEvent('secondCalendarView');\n }\n\n /**\n * Checks whether the previous date is greater than the current date.\n *\n * @param activeDate - Object containing `previous` and `current` date values.\n * @returns `true` if the previous date is later than the current date, otherwise `false`.\n */\n private isPrevious(activeDate: AcpActiveDate): boolean {\n return activeDate.previous > activeDate.current;\n }\n\n /**\n * Attaches hover events to all date cells in the first view.\n */\n private attachHoverEvent(viewId: string) {\n const nodes = this.el.nativeElement.querySelectorAll(`#${viewId} .mat-calendar-body-cell`);\n setTimeout(() => this.addHoverEvents(nodes), ACP_ACTIVE_DATE_DEBOUNCE);\n }\n\n /**\n * Removes active focus from the second view.\n *\n * @param classRef - Reference to this component\n */\n private removeDefaultFocus(classRef: AcpDateRangeCalendar): void {\n setTimeout(() => {\n const btn: HTMLButtonElement[] = classRef.el.nativeElement.querySelectorAll(\n '#secondCalendarView button.mat-calendar-body-active',\n );\n if (btn?.length) {\n btn[0].blur();\n }\n }, 1);\n }\n\n /**\n * Updates the selection range dynamically on hover.\n *\n * @param date - Hovered date\n */\n private updateSelectionOnMouseHover(date: Date): void {\n const selectedDates = this.selectedDates;\n if (selectedDates?.start && date && selectedDates.start < date) {\n const dateRange: DateRange<Date> = new DateRange<Date>(selectedDates.start, date);\n this.firstCalendarView.selected = dateRange;\n this.secondCalendarView.selected = dateRange;\n // this.firstCalendarView._changeDetectorRef.markForCheck();\n // this.secondCalendarView._changeDetectorRef.markForCheck();\n this.isAllowHoverEvent = true;\n }\n }\n\n /**\n * Attaches hover events to given nodes to update range selection.\n *\n * @param nodes - Date cell nodes\n */\n private addHoverEvents(nodes: any): void {\n if (!nodes) {\n return;\n }\n Array.from(nodes).forEach(button => {\n this.renderer.listen(button, 'mouseover', event => {\n if (this.isAllowHoverEvent) {\n const date = new Date(event.target.ariaLabel);\n this.updateSelectionOnMouseHover(date);\n }\n });\n });\n // this.firstCalendarView._changeDetectorRef.markForCheck();\n // this.secondCalendarView._changeDetectorRef.markForCheck();\n }\n}\n","<!--\n * AcpDateRangeCalendar Component Template\n *\n * Dual-calendar view for date range selection with navigation controls.\n * @author AcontPlus S.A.S\n * @version 2.0.0\n -->\n<div class=\"calendar-container\">\n <div class=\"first-view\">\n <mat-calendar\n id=\"firstCalendarView\"\n #firstCalendarView\n [startAt]=\"firstViewStartDate()\"\n [selected]=\"selectedDates\"\n (selectedChange)=\"updateDateRangeSelection($event)\"\n (monthSelected)=\"monthSelected('firstCalendarView')\"\n [minDate]=\"minDate\"\n [maxDate]=\"maxDate\"\n />\n </div>\n <div class=\"second-view\">\n <mat-calendar\n id=\"secondCalendarView\"\n #secondCalendarView\n [startAt]=\"secondViewStartDate()\"\n [minDate]=\"secondViewMinDate()\"\n [maxDate]=\"maxDate\"\n [selected]=\"selectedDates\"\n (selectedChange)=\"updateDateRangeSelection($event)\"\n (monthSelected)=\"monthSelected('secondCalendarView')\"\n />\n </div>\n</div>\n","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n computed,\n ElementRef,\n inject,\n Input,\n input,\n OnInit,\n output,\n signal,\n ViewChild,\n WritableSignal,\n} from '@angular/core';\n\nimport { ACP_DATE_OPTION_TYPE } from './constant/date-filter-const';\nimport { ACP_DEFAULT_DATE_OPTIONS } from './data/default-date-options';\nimport { IAcpSelectDateOption } from './model/select-date-option.model';\nimport {\n computeOptionDateRange,\n getClone,\n getDateString,\n getDateWithOffset,\n getDaysInMonth,\n getFormattedDateString,\n getRelativeExpr,\n parseDateByFormat,\n isSameDay,\n resetOptionSelection,\n selectCustomOption,\n} from './utils/date-picker-utilities';\nimport { parseHumanDate } from './utils/human-date-parser';\nimport { OverlayModule } from '@angular/cdk/overlay';\nimport {\n FormsModule,\n ReactiveFormsModule,\n AbstractControl,\n FormControl,\n FormGroup,\n ValidationErrors,\n Validators,\n} from '@angular/forms';\nimport { MatAutocompleteModule } from '@angular/material/autocomplete';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatNativeDateModule } from '@angular/material/core';\nimport { MatDatepickerModule, DateRange } from '@angular/material/datepicker';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatListModule } from '@angular/material/list';\nimport { AcpDateRangeCalendar } from './calendar/date-range-calendar';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport type { AcpSelectedDateEvent } from './model/date-selection-event.model';\nimport { DatePipe, NgClass, NgTemplateOutlet } from '@angular/common';\nimport { Button } from '../button';\n@Component({\n selector: 'acp-date-range-input',\n templateUrl: './date-range-input.html',\n styleUrls: ['./date-range-input.scss'],\n imports: [\n FormsModule,\n ReactiveFormsModule,\n MatDatepickerModule,\n MatNativeDateModule,\n MatInputModule,\n MatAutocompleteModule,\n OverlayModule,\n MatIconModule,\n MatButtonModule,\n MatListModule,\n MatFormFieldModule,\n MatTooltipModule,\n MatCheckboxModule,\n NgClass,\n AcpDateRangeCalendar,\n DatePipe,\n NgTemplateOutlet,\n Button,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AcpDateRangeInput implements OnInit, AfterViewInit {\n public isDateOptionList = false;\n public isCustomRange = false;\n\n @Input() inputLabel = 'Date Range';\n showClearButton = input(false);\n showCalendarIcon = input(false);\n showRangeRequired = input(false);\n isRangeRequired = input(false);\n @Input() staticOptionId = 'static-options';\n @Input() dynamicOptionId = 'dynamic-options';\n @Input() calendarId = 'custom-calendar';\n @Input() enableDefaultOptions = true;\n @Input() selectedDates!: DateRange<Date> | null;\n @Input() dateFormat = 'dd/MM/yyyy';\n @Input() isShowStaticDefaultOptions = false;\n @Input() hideDefaultOptions = false;\n @Input() cdkConnectedOverlayOffsetX = 0;\n @Input() cdkConnectedOverlayOffsetY = 0;\n @Input() listCdkConnectedOverlayOffsetY = 0;\n @Input() listCdkConnectedOverlayOffsetX = 0;\n @Input() selectedOptionIndex = 0; // por defecto hoy\n @Input() displaySelectedLabel = false;\n /**\n * When true, the main input shows the human-readable expressions\n * (e.g. `now-7d - now`) instead of the absolute date range. If\n * `displaySelectedLabel` is also true, the label takes priority.\n */\n @Input() displaySelectedExpression = false;\n /**\n * When true, the custom-range footer shows two editable Material inputs\n * (start / end) that accept dates in `dateFormat`, ISO 8601 durations\n * (`p7d`), or date math (`now-7d`). When false, a read-only label is shown.\n */\n @Input() enableEditableDates = false;\n @Input() cdkConnectedOverlayPush = true;\n @Input() cdkConnectedOverlayPositions = [];\n @Input() allowSingleDateSelection = true;\n /**\n * When true, automatically selects the preset option whose computed date range\n * matches the provided selectedDates (works with both default and custom options).\n * Falls back to \"Custom Range\" if no option matches.\n */\n @Input() autoSelectOption = false;\n\n // default min date is current date - 10 years.\n @Input() minDate = getDateWithOffset(-10);\n // default max date is current date + 10 years.\n @Input() maxDate = getDateWithOffset(10);\n\n dateSelectionChanged = output<AcpSelectedDateEvent>();\n dateListOptions = output<IAcpSelectDateOption[]>();\n rangeRequiredChange = output<boolean>();\n\n private cdref: ChangeDetectorRef = inject(ChangeDetectorRef);\n private el: ElementRef = inject(ElementRef);\n\n @ViewChild('calendar') calendar?: AcpDateRangeCalendar;\n\n private _dateOptions: WritableSignal<IAcpSelectDateOption[]> = signal([]);\n visibleOptions = computed(() => this._dateOptions().filter(op => op.isVisible));\n\n /**\n * Reactive form backing the editable start/end inputs. Each control accepts\n * a `dateFormat` date, an ISO 8601 duration, or a date-math expression; the\n * group is invalid when either value is unparseable or start is after end.\n */\n editableForm = new FormGroup(\n {\n start: new FormControl('', {\n nonNullable: true,\n validators: [Validators.required, c => this.validateDateControl(c)],\n }),\n end: new FormControl('', {\n nonNullable: true,\n validators: [Validators.required, c => this.validateDateControl(c)],\n }),\n },\n { validators: g => this.validateRange(g) },\n );\n\n // The raw expressions the user last committed via the editable inputs, kept\n // so human-language input (e.g. `now-7d`) is shown again instead of being\n // replaced by an absolute date - but only while it still resolves to the\n // current range (see populateEditableForm).\n private editableExpr: { start: string; end: string } | null = null;\n\n @Input()\n set dateDropDownOptions(defaultDateList: IAcpSelectDateOption[]) {\n const options = [\n ...(this.enableDefaultOptions ? getClone(ACP_DEFAULT_DATE_OPTIONS) : []),\n ...(defaultDateList ?? []),\n ];\n this._dateOptions.set(options);\n }\n\n get dateDropDownOptions(): IAcpSelectDateOption[] {\n return this._dateOptions() ?? [];\n }\n\n ngOnInit(): void {\n if (this.isDefaultInitRequired()) {\n this.initDefaultOptions();\n }\n this.dateListOptions.emit(this.dateDropDownOptions);\n }\n\n ngAfterViewInit(): void {\n this.updateDefaultDatesValues();\n }\n\n /**\n * Alterna la visibilidad de la lista de opciones de fecha predeterminada.\n * Si el panel de rango personalizado está abierto, lo cierra en su lugar.\n * Si el dropdown ya está abierto y se hace clic en el input, no lo cierra.\n *\n * @param event MouseEvent opcional que activa el alternador.\n */\n toggleRangeSelection(event: MouseEvent): void {\n event.stopPropagation();\n const newValue = !this.isRangeRequired();\n this.rangeRequiredChange.emit(newValue);\n this.cdref.markForCheck();\n }\n\n toggleDateOptionSelectionList(event?: MouseEvent): void {\n event?.preventDefault();\n event?.stopImmediatePropagation();\n\n if (this.isCustomRange) {\n this.isCustomRange = false;\n return;\n }\n\n // Si el dropdown ya está abierto, no hacer nada (solo cierra con clic fuera)\n if (this.isDateOptionList) {\n return;\n }\n\n // Cuando la selección activa es un rango personalizado, reabre directamente en la\n // vista de rango personalizado en lugar de la lista de opciones.\n const selectedOption = this.dateDropDownOptions.find(o => o.isSelected);\n if (selectedOption?.optionType === ACP_DATE_OPTION_TYPE.CUSTOM) {\n this.isCustomRange = true;\n this.populateEditableForm();\n return;\n }\n this.isDateOptionList = true;\n }\n\n /**\n * Actualiza la selección de rango de fecha personalizado desde la entrada.\n *\n * @param input El elemento de entrada HTML asociado con el selector de fecha.\n * @param selectedDates El rango de fechas seleccionado.\n */\n updateCustomRange(input: HTMLInputElement, selectedDates: DateRange<Date> | null): void {\n if (this.allowSingleDateSelection && !selectedDates?.end) {\n const date = selectedDates?.start ?? new Date();\n selectedDates = new DateRange<Date>(date, date);\n }\n if (this.isCustomRange) {\n resetOptionSelection(this.dateDropDownOptions);\n selectCustomOption(this.dateDropDownOptions);\n this.syncOptionSelection();\n this.isCustomRange = false;\n }\n\n const start = selectedDates?.start ?? new Date();\n const end = selectedDates?.end ?? new Date();\n this.updateSelectedDates(input, start, end, null);\n }\n\n /**\n * Actualiza la selección cuando se hace clic en una opción de fecha específica.\n *\n * @param option La opción de fecha seleccionada.\n * @param input El elemento de entrada HTML a actualizar con fechas seleccionadas.\n */\n updateSelection(option: IAcpSelectDateOption, input: HTMLInputElement): void {\n this.isDateOptionList = false;\n this.isCustomRange = option.optionType === ACP_DATE_OPTION_TYPE.CUSTOM;\n if (this.isCustomRange) {\n resetOptionSelection(this.dateDropDownOptions);\n selectCustomOption(this.dateDropDownOptions);\n this.populateEditableForm();\n } else {\n resetOptionSelection(this.dateDropDownOptions, option);\n this.updateDateOnOptionSelect(option, input);\n // Cerrar el panel de rango personalizado cuando se selecciona una opción predefinida\n this.isCustomRange = false;\n }\n this.syncOptionSelection();\n this.cdref.markForCheck();\n }\n\n /**\n * Re-emite la señal de opciones después de un cambio de selección en el lugar para que\n * las vistas OnPush (vinculadas a `visibleOptions` calculado) reflejen de manera confiable\n * el nuevo estado `isSelected` - la misma notificación que proporciona el `set` de señal inicial.\n */\n private syncOptionSelection(): void {\n this._dateOptions.update(options => [...options]);\n }\n\n /**\n * Alterna la visibilidad de la vista de selección de rango de fecha personalizado.\n */\n toggleCustomDateRangeView(): void {\n this.isCustomRange = !this.isCustomRange;\n if (this.isCustomRange) {\n this.populateEditableForm();\n }\n }\n\n /**\n * Analiza un único valor de entrada editable, aceptando una fecha `dateFormat`\n * o uno de los formatos humanos (duración ISO 8601, matemática de fecha).\n *\n * @param value - La cadena de entrada sin procesar.\n * @returns La fecha analizada, o `null` si no se puede analizar.\n */\n private parseInputValue(value: string): Date | null {\n const trimmed = value?.trim();\n if (!trimmed) {\n return null;\n }\n return parseDateByFormat(trimmed, this.dateFormat) ?? parseHumanDate(trimmed);\n }\n\n /**\n * Validador para un único control de fecha editable: válido cuando el valor se analiza\n * como una fecha. Los valores vacíos se dejan al validador `required`.\n */\n private validateDateControl(control: AbstractControl): ValidationErrors | null {\n const value = (control.value ?? '').trim();\n if (!value) {\n return null;\n }\n return this.parseInputValue(value) ? null : { invalidDate: true };\n }\n\n /**\n * Validador de grupo que asegura que la fecha de inicio analizada no sea posterior a la fecha de fin.\n */\n private validateRange(group: AbstractControl): ValidationErrors | null {\n const start = this.parseInputValue(group.get('start')?.value ?? '');\n const end = this.parseInputValue(group.get('end')?.value ?? '');\n if (start && end && start > end) {\n return { rangeOrder: true };\n }\n return null;\n }\n\n /**\n * Confirma las entradas editables en el calendario para que las vistas y la acción\n * Aplicar reflejen los valores escritos. No-op cuando la edición está deshabilitada o\n * el formulario es inválido.\n *\n * @param calendar - La instancia del componente de calendario desde la plantilla.\n */\n commitEditableDates(calendar: AcpDateRangeCalendar): void {\n if (!this.enableEditableDates || this.editableForm.invalid) {\n return;\n }\n const startRaw = this.editableForm.controls.start.value.trim();\n const endRaw = this.editableForm.controls.end.value.trim();\n const start = this.parseInputValue(startRaw);\n const end = this.parseInputValue(endRaw);\n if (!start || !end) {\n return;\n }\n // Recuerda exactamente lo que escribió el usuario para que la expresión (ej: `now-7d`)\n // sobreviva a una reapertura en lugar de mostrarse como una fecha absoluta resuelta.\n this.editableExpr = { start: startRaw, end: endRaw };\n calendar.selectedDates = new DateRange<Date>(start, end);\n this.cdref.markForCheck();\n }\n\n /**\n * Refleja una selección de calendario (clic de fecha) en las entradas editables como\n * fechas absolutas. Una selección de calendario es una selección absoluta explícita, por lo que\n * cualquier expresión recordada se borra y las entradas muestran fechas formateadas.\n *\n * @param range - El rango emitido por el calendario.\n */\n onCalendarSelectionChange(range: DateRange<Date>): void {\n if (!this.enableEditableDates) {\n return;\n }\n this.editableExpr = null;\n this.editableForm.setValue({\n start: range.start ? getDateString(range.start, this.dateFormat) : '',\n end: range.end ? getDateString(range.end, this.dateFormat) : '',\n });\n this.cdref.markForCheck();\n }\n\n /**\n * Confirma las entradas editables y aplica el rango, cerrando el panel -\n * lo mismo que hacer clic en Aplicar. Se usa para la tecla Intro. No-op cuando la edición está\n * deshabilitada o el formulario es inválido, por lo que Intro nunca cierra con entrada incorrecta.\n *\n * @param input - El elemento de entrada de fecha principal a actualizar.\n * @param calendar - La instancia del componente de calendario desde la plantilla.\n */\n applyEditableDates(input: HTMLInputElement, _calendar: AcpDateRangeCalendar): void {\n if (!this.enableEditableDates || this.editableForm.invalid) {\n return;\n }\n\n // Parsear las fechas directamente del formulario editable\n const startRaw = this.editableForm.controls.start.value.trim();\n const endRaw = this.editableForm.controls.end.value.trim();\n const start = this.parseInputValue(startRaw);\n const end = this.parseInputValue(endRaw);\n\n if (!start || !end) {\n return;\n }\n\n // Crear el rango de fechas\n const dateRange = new DateRange<Date>(start, end);\n\n // Intentar encontrar una opción predefinida que coincida con este rango\n const matchedOption = this.findMatchingOption(dateRange);\n\n if (matchedOption) {\n // Si encontramos una opción que coincide, seleccionarla\n resetOptionSelection(this.dateDropDownOptions, matchedOption);\n this.syncOptionSelection();\n this.updateDateOnOptionSelect(matchedOption, input);\n } else {\n // Si no coincide con ninguna opción, usar rango personalizado\n resetOptionSelection(this.dateDropDownOptions);\n selectCustomOption(this.dateDropDownOptions);\n this.syncOptionSelection();\n this.updateSelectedDates(input, start, end, null);\n }\n\n // Cerrar el panel de rango personalizado\n this.isCustomRange = false;\n this.cdref.markForCheck();\n }\n\n /**\n * Rellena previamente las entradas editables desde la selección actual: expresiones relativas\n * para una opción de diferencia de días (ej: `now-7d` .. `now`), de lo contrario las\n * fechas formateadas absolutas.\n */\n private populateEditableForm(): void {\n if (!this.enableEditableDates) {\n return;\n }\n const range = this.selectedDates;\n if (range?.start && range?.end) {\n const option = this.dateDropDownOptions.find(o => o.isSelected) ?? null;\n this.editableForm.setValue(this.resolveDisplayExpr(range.start, range.end, option));\n // Actualizar el calendario para que muestre el rango correcto\n if (this.calendar) {\n this.calendar.selectedDates = range;\n }\n } else {\n this.editableForm.setValue({ start: '', end: '' });\n }\n }\n\n /**\n * Resuelve las expresiones legibles de inicio/fin para un rango. Prefiere la\n * expresión comprometida del usuario (cuando aún se resuelve a este rango),\n * luego la forma relativa de una opción de diferencia de días, y finalmente las\n * fechas formateadas absolutas. Compartido por las entradas editables y el evento emitido.\n *\n * @param start - Fecha de inicio del rango.\n * @param end - Fecha de fin del rango.\n * @param opt - La opción de fecha asociada, si la hay.\n * @returns Las cadenas de expresión de inicio y fin.\n */\n private resolveDisplayExpr(\n start: Date,\n end: Date,\n opt: IAcpSelectDateOption | null,\n ): { start: string; end: string } {\n if (this.editableExpr && this.exprMatchesDates(this.editableExpr, start, end)) {\n return { start: this.editableExpr.start, end: this.editableExpr.end };\n }\n const optionExpr = getRelativeExpr(opt);\n if (optionExpr) {\n return optionExpr;\n }\n return {\n start: getDateString(start, this.dateFormat),\n end: getDateString(end, this.dateFormat),\n };\n }\n\n /**\n * Checks whether a saved expression still resolves (to day precision) to the\n * given dates, so a stale expression is not reused after the range changed\n * by other means.\n */\n private exprMatchesDates(expr: { start: string; end: string }, start: Date, end: Date): boolean {\n const exprStart = this.parseInputValue(expr.start);\n const exprEnd = this.parseInputValue(expr.end);\n return !!exprStart && !!exprEnd && isSameDay(exprStart, start) && isSameDay(exprEnd, end);\n }\n\n /**\n * Clears the currently selected dates and resets all related properties.\n *\n * @param event The MouseEvent triggering the clear action.\n */\n clearSelection(event: MouseEvent): void {\n event?.stopImmediatePropagation();\n this.minDate = getDateWithOffset(-10);\n this.maxDate = getDateWithOffset(10);\n this.selectedDates = null;\n resetOptionSelection(this.dateDropDownOptions);\n this.syncOptionSelection();\n this.clearDateInput();\n this.cdref.markForCheck();\n const selectedDateEventData: AcpSelectedDateEvent = {\n range: null,\n selectedOption: null,\n startExpr: null,\n endExpr: null,\n };\n this.dateSelectionChanged.emit(selectedDateEventData);\n }\n\n /**\n * Clears the input field value for the date picker.\n */\n private clearDateInput(): void {\n const dateInputField = this.el.nativeElement.querySelector('#date-input-field');\n if (dateInputField) {\n dateInputField.value = '';\n }\n }\n\n /**\n * Updates selected dates based on a selected option and input element.\n *\n * @param option The selected date option.\n * @param input The HTML input element to update.\n */\n private updateDateOnOptionSelect(option: IAcpSelectDateOption, input: HTMLInputElement): void {\n // If there is a callback function, use it to get the date range\n if (option?.callBackFunction) {\n const dateRange: DateRange<Date> = option.callBackFunction();\n if (dateRange?.start && dateRange?.end) {\n this.updateSelectedDates(input, dateRange.start, dateRange.end, option);\n return;\n }\n }\n this.updateDateWithSelectedOption(option, input);\n }\n\n /**\n * Calculates and updates the start and end dates based on the selected option.\n *\n * @param option The selected date option.\n * @param input The HTML input element to update.\n */\n private updateDateWithSelectedOption(\n option: IAcpSelectDateOption,\n input: HTMLInputElement,\n ): void {\n const currDate = new Date();\n let startDate: Date = new Date();\n let lastDate: Date = new Date();\n // Determine the date range based on the option key\n switch (option.optionType) {\n case ACP_DATE_OPTION_TYPE.DATE_DIFF: {\n const diff = option.dateDiff ?? 0;\n startDate.setDate(startDate.getDate() + diff);\n // Para \"Hoy\" (diff=0) y \"Ayer\" (diff=-1), ambas fechas son el mismo día\n // Para \"Últimos N días\" (diff<-1), rango desde hace N días hasta hoy\n lastDate = diff === 0 || diff === -1 ? new Date(startDate) : new Date();\n break;\n }\n\n case ACP_DATE_OPTION_TYPE.LAST_MONTH:\n currDate.setMonth(currDate.getMonth() - 1);\n startDate = new Date(currDate.getFullYear(), currDate.getMonth(), 1);\n lastDate = new Date(currDate.getFullYear(), currDate.getMonth(), getDaysInMonth(currDate));\n break;\n\n case ACP_DATE_OPTION_TYPE.THIS_MONTH:\n startDate = new Date(currDate.getFullYear(), currDate.getMonth(), 1);\n lastDate = new Date(currDate.getFullYear(), currDate.getMonth(), getDaysInMonth(currDate));\n break;\n\n case ACP_DATE_OPTION_TYPE.YEAR_TO_DATE:\n startDate = new Date(currDate.getFullYear(), 0, 1);\n break;\n\n case ACP_DATE_OPTION_TYPE.MONTH_TO_DATE:\n startDate = new Date(currDate.getFullYear(), currDate.getMonth(), 1);\n break;\n\n default:\n break;\n }\n\n // Update the selected dates\n this.updateSelectedDates(input, startDate, lastDate, option);\n }\n\n /**\n * Updates the date range and input display.\n *\n * @param input The HTML input element.\n * @param start Start date of the range.\n * @param end End date of the range.\n * @param opt Optional selected date option.\n */\n private updateSelectedDates(\n input: HTMLInputElement,\n start: Date,\n end: Date,\n opt: IAcpSelectDateOption | null,\n ): void {\n const range = new DateRange(start, end);\n this.selectedDates = range;\n\n const expr = this.resolveDisplayExpr(start, end, opt);\n const rangeLabel = `${getDateString(\n start,\n this.dateFormat,\n )} - ${getDateString(end, this.dateFormat)}`;\n\n if (this.displaySelectedLabel && opt?.optionLabel) {\n input.value = opt.optionLabel;\n } else if (this.displaySelectedExpression) {\n input.value = `${expr.start} - ${expr.end}`;\n } else {\n input.value = rangeLabel;\n }\n\n this.dateSelectionChanged.emit({\n range,\n selectedOption: this.dateDropDownOptions.find(o => o.isSelected) ?? null,\n startExpr: expr.start,\n endExpr: expr.end,\n });\n this.cdref.markForCheck();\n }\n\n /**\n * Updates the input and internal state with default dates on initialization.\n * When autoSelectOption is true and selectedDates is provided, attempts to\n * match against existing options before falling back to Custom Range.\n */\n private updateDefaultDatesValues(): void {\n const input: HTMLInputElement = this.el.nativeElement.querySelector('#date-input-field');\n\n if (this.selectedDates?.start && this.selectedDates?.end) {\n const matchedOption = this.autoSelectOption\n ? this.findMatchingOption(this.selectedDates)\n : null;\n\n if (matchedOption) {\n resetOptionSelection(this.dateDropDownOptions, matchedOption);\n const label = this.displaySelectedLabel ? matchedOption.optionLabel : null;\n input.value = label ?? getFormattedDateString(this.selectedDates, this.dateFormat);\n } else {\n resetOptionSelection(this.dateDropDownOptions);\n selectCustomOption(this.dateDropDownOptions);\n input.value = getFormattedDateString(this.selectedDates, this.dateFormat);\n }\n\n this.cdref.detectChanges();\n return;\n }\n\n const selectedOptions = this._dateOptions().find(option => option.isSelected);\n\n if (selectedOptions && selectedOptions.optionType !== ACP_DATE_OPTION_TYPE.CUSTOM) {\n this.updatedFromListValueSelection(selectedOptions, input);\n this.cdref.detectChanges();\n }\n }\n\n /**\n * Maneja cambios manuales en el input principal de fecha.\n * Cuando el usuario escribe directamente, deselecciona todas las opciones\n * predefinidas y marca \"Rango personalizado\" como seleccionado.\n *\n * @param input El elemento de entrada HTML que cambió.\n */\n onMainInputChange(input: HTMLInputElement): void {\n // Si el input está vacío, no hacer nada\n if (!input.value || input.value.trim() === '') {\n return;\n }\n\n // Intentar parsear el rango de fechas del input\n // Formato esperado: \"dd/MM/yyyy - dd/MM/yyyy\"\n const parts = input.value.split(' - ');\n if (parts.length === 2) {\n const start = this.parseInputValue(parts[0].trim());\n const end = this.parseInputValue(parts[1].trim());\n\n if (start && end) {\n // Crear el rango de fechas\n const dateRange = new DateRange<Date>(start, end);\n // Actualizar selectedDates para que el calendario se muestre correctamente\n this.selectedDates = dateRange;\n // Actualizar el calendario con el rango para que navegue y pinte correctamente\n if (this.calendar) {\n this.calendar.selectedDates = dateRange;\n }\n // Forzar detección de cambios para que todo se actualice\n this.cdref.detectChanges();\n }\n }\n\n // Deseleccionar todas las opciones predefinidas\n resetOptionSelection(this.dateDropDownOptions);\n\n // Marcar \"Rango personalizado\" como seleccionado\n selectCustomOption(this.dateDropDownOptions);\n\n // Actualizar la señal de opciones para reflejar el cambio\n this.syncOptionSelection();\n\n // Abrir el panel de rango personalizado para que aparezca el calendario\n this.isCustomRange = true;\n this.populateEditableForm();\n\n // Marcar para detección de cambios\n this.cdref.markForCheck();\n }\n\n /**\n * Iterates over all non-custom options and returns the first one whose\n * computed date range matches the provided selectedDates (day-level comparison).\n * Works for both default options and consumer-provided options with callBackFunction.\n *\n * @param selectedDates The date range to match against\n * @returns The matching ISelectDateOption, or null if none found\n */\n private findMatchingOption(selectedDates: DateRange<Date>): IAcpSelectDateOption | null {\n const candidates = this.dateDropDownOptions.filter(\n option => option.optionType !== ACP_DATE_OPTION_TYPE.CUSTOM,\n );\n\n for (const option of candidates) {\n const range = computeOptionDateRange(option);\n if (\n range?.start &&\n range?.end &&\n isSameDay(range.start, selectedDates.start!) &&\n isSameDay(range.end, selectedDates.end!)\n ) {\n return option;\n }\n }\n\n return null;\n }\n\n /**\n * Updates the input and selected dates based on a selected option from the list.\n *\n * @param selectedOption The selected date option.\n * @param input The HTML input element to update.\n */\n private updatedFromListValueSelection(\n selectedOption: IAcpSelectDateOption,\n input: HTMLInputElement,\n ): void {\n // This will update value if option is selected from default list.\n if (!selectedOption.callBackFunction) {\n this.updateDateOnOptionSelect(selectedOption, input);\n return;\n }\n // This will update value if option is selected from provided custom list.\n const dateRange: DateRange<Date> = selectedOption.callBackFunction();\n this.updateSelectedDates(\n input,\n dateRange.start ?? new Date(),\n dateRange.end ?? new Date(),\n selectedOption,\n );\n }\n\n /**\n * Checks whether default initialization of options is required.\n *\n * @returns True if default options need to be initialized, otherwise false.\n */\n private isDefaultInitRequired(): boolean {\n return this.enableDefaultOptions && !this._dateOptions.length;\n }\n\n /**\n * Initializes the default date options with the selected index.\n */\n private initDefaultOptions(): void {\n const options = getClone<IAcpSelectDateOption[]>(ACP_DEFAULT_DATE_OPTIONS).map((opt, idx) => ({\n ...opt,\n isSelected: idx === this.selectedOptionIndex,\n }));\n this._dateOptions.set(options);\n }\n}\n","<!--\n AcpDateRangeInput Component Template\n @author AcontPlus S.A.S\n @version 1.0.0\n\n Comprehensive date range picker with predefined options, custom calendar selection,\n and support for human-readable date expressions.\n-->\n<div class=\"date-picker-main ndp-main\" cdkOverlayOrigin #trigger>\n <mat-form-field\n class=\"w-full\"\n [class]=\"{ 'display-hidden': isShowStaticDefaultOptions }\"\n (click)=\"toggleDateOptionSelectionList($event)\"\n >\n <mat-label (click)=\"toggleDateOptionSelectionList($event)\">{{ inputLabel }}</mat-label>\n <input\n matInput\n #dateInput\n class=\"cursor-pointer\"\n id=\"date-input-field\"\n (input)=\"onMainInputChange(dateInput)\"\n />\n <ng-container matSuffix>\n @if (showClearButton() && !!dateInput.value) {\n <button\n mat-icon-button\n class=\"cursor-pointer pe-0 ps-0\"\n matTooltip=\"Clear\"\n (click)=\"clearSelection($event)\"\n >\n <mat-icon>clear</mat-icon>\n </button>\n } @if (showCalendarIcon()) {\n <button mat-icon-button class=\"cursor-pointer\">\n <mat-icon>date_range</mat-icon>\n </button>\n } @if (showRangeRequired()) {\n <button\n mat-icon-button\n class=\"cursor-pointer\"\n [class.checked]=\"isRangeRequired()\"\n (click)=\"toggleRangeSelection($event)\"\n matTooltip=\"Rango de fechas obligatorio\"\n >\n <mat-icon [color]=\"isRangeRequired() ? 'accent' : ''\">\n {{ isRangeRequired() ? 'check_box' : 'check_box_outline_blank' }}\n </mat-icon>\n </button>\n }\n </ng-container>\n </mat-form-field>\n\n @if (dateDropDownOptions.length && isShowStaticDefaultOptions) {\n <ng-container\n *ngTemplateOutlet=\"\n dateOptionList;\n context: {\n $implicit: visibleOptions(),\n dateInput: dateInput,\n optionId: staticOptionId,\n className: 'w-full custom-ckd-container ndp-cdk-container range-input',\n }\n \"\n />\n }\n\n <ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayHasBackdrop]=\"true\"\n [cdkConnectedOverlayBackdropClass]=\"'cdk-overlay-transparent-backdrop'\"\n [cdkConnectedOverlayOrigin]=\"trigger\"\n [cdkConnectedOverlayOpen]=\"isDateOptionList\"\n [cdkConnectedOverlayPush]=\"cdkConnectedOverlayPush\"\n [cdkConnectedOverlayOffsetX]=\"listCdkConnectedOverlayOffsetX\"\n [cdkConnectedOverlayOffsetY]=\"listCdkConnectedOverlayOffsetY\"\n (backdropClick)=\"isDateOptionList = false\"\n >\n @if (dateDropDownOptions.length && !isShowStaticDefaultOptions) {\n <ng-container\n *ngTemplateOutlet=\"\n dateOptionList;\n context: {\n $implicit: visibleOptions(),\n dateInput: dateInput,\n optionId: dynamicOptionId,\n className: 'w-full custom-ckd-container ndp-cdk-container range-input',\n }\n \"\n />\n }\n </ng-template>\n\n <ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayHasBackdrop]=\"true\"\n [cdkConnectedOverlayBackdropClass]=\"'cdk-overlay-transparent-backdrop'\"\n [cdkConnectedOverlayOrigin]=\"trigger\"\n [cdkConnectedOverlayOpen]=\"isCustomRange\"\n [cdkConnectedOverlayPush]=\"cdkConnectedOverlayPush\"\n [cdkConnectedOverlayPositions]=\"cdkConnectedOverlayPositions\"\n [cdkConnectedOverlayOffsetX]=\"cdkConnectedOverlayOffsetX\"\n [cdkConnectedOverlayOffsetY]=\"cdkConnectedOverlayOffsetY\"\n (backdropClick)=\"isCustomRange = false\"\n >\n <div\n class=\"custom-ckd-container ndp-cdk-container custom-calendar-container ndp-calendar-container\"\n [class]=\"{ 'without-default-opt': hideDefaultOptions }\"\n >\n <div class=\"row-1\">\n @if (!hideDefaultOptions) {\n <div class=\"pt-custom column-1\">\n <ng-container\n *ngTemplateOutlet=\"\n dateOptionList;\n context: {\n $implicit: visibleOptions(),\n dateInput: dateInput,\n }\n \"\n />\n </div>\n <div class=\"ndp-column-separator\"></div>\n }\n <div class=\"mt-2 column-2\">\n <acp-date-range-calendar\n [selectedDates]=\"selectedDates\"\n #calendar\n [minDate]=\"minDate\"\n [maxDate]=\"maxDate\"\n (selectedDatesChange)=\"onCalendarSelectionChange($event)\"\n />\n </div>\n </div>\n <div class=\"row-2 br-top\">\n <div class=\"footer-content ndp-footer-content\">\n @if (enableEditableDates) {\n <form class=\"ndp-date-inputs\" [formGroup]=\"editableForm\">\n <mat-form-field class=\"ndp-date-field\" subscriptSizing=\"dynamic\">\n <mat-label>Start</mat-label>\n <input\n matInput\n formControlName=\"start\"\n placeholder=\"e.g. now-7d\"\n (blur)=\"commitEditableDates(calendar)\"\n (keydown.enter)=\"applyEditableDates(dateInput, calendar)\"\n />\n @if (editableForm.controls.start.hasError('required')) {\n <mat-error>Required</mat-error>\n } @else if (editableForm.controls.start.hasError('invalidDate')) {\n <mat-error>Invalid date or expression</mat-error>\n }\n </mat-form-field>\n <mat-form-field class=\"ndp-date-field\" subscriptSizing=\"dynamic\">\n <mat-label>End</mat-label>\n <input\n matInput\n formControlName=\"end\"\n placeholder=\"e.g. now\"\n (blur)=\"commitEditableDates(calendar)\"\n (keydown.enter)=\"applyEditableDates(dateInput, calendar)\"\n />\n @if (editableForm.controls.end.hasError('required')) {\n <mat-error>Required</mat-error>\n } @else if (editableForm.controls.end.hasError('invalidDate')) {\n <mat-error>Invalid date or expression</mat-error>\n } @else if (editableForm.hasError('rangeOrder')) {\n <mat-error>Start must be before end</mat-error>\n }\n </mat-form-field>\n </form>\n } @else {\n <span id=\"range-label-text\" class=\"ndp-range-label-text\">\n {{ calendar?.selectedDates?.start | date: dateFormat }} @if\n (calendar?.selectedDates?.end) {\n <span> - {{ calendar.selectedDates?.end | date: dateFormat }} </span>\n }\n </span>\n }\n <div class=\"buttons\">\n <acp-button\n type=\"button\"\n variant=\"danger\"\n matStyle=\"filled\"\n (handleClick)=\"isCustomRange = false\"\n >Cancelar</acp-button\n >\n <acp-button\n type=\"button\"\n variant=\"primary\"\n matStyle=\"filled\"\n [class.disabled]=\"\n enableEditableDates\n ? editableForm.invalid\n : !(calendar?.selectedDates?.start && calendar?.selectedDates?.end)\n \"\n (handleClick)=\"\n enableEditableDates && commitEditableDates(calendar);\n updateCustomRange(dateInput, calendar.selectedDates)\n \"\n >\n Aplicar \n </acp-button>\n </div>\n </div>\n </div>\n </div>\n </ng-template>\n</div>\n\n<ng-template\n #dateOptionList\n let-options\n let-input=\"dateInput\"\n let-optionId=\"optionId\"\n let-className=\"className\"\n>\n <mat-action-list [ngClass]=\"className\" [id]=\"optionId\">\n @for (option of options; track option.optionLabel) {\n <mat-list-item [activated]=\"option.isSelected\" (click)=\"updateSelection(option, input)\">\n {{ option.optionLabel }}\n </mat-list-item>\n }\n </mat-action-list>\n</ng-template>\n","import { DateRange } from '@angular/material/datepicker';\nimport { ACP_DATE_OPTION_TYPE } from '../constant/date-filter-const';\n\nexport interface IAcpSelectDateOption {\n /**\n * Etiqueta mostrada en la lista desplegable para esta opción.\n * Ejemplo: \"Últimos 7 días\", \"Hoy\", \"Personalizado\".\n */\n optionLabel: string;\n\n /**\n * Tipo de opción que indica cómo se determina la fecha.\n * Por defecto es DATE_DIFF si no se proporciona.\n */\n optionType?: ACP_DATE_OPTION_TYPE;\n\n /**\n * Número de días de desplazamiento desde hoy.\n *\n * - Números positivos indican fechas futuras.\n * - Números negativos indican fechas pasadas.\n * - Se utiliza solo cuando optionType es DATE_DIFF y no hay callback.\n *\n * Ejemplo: -7 → \"Últimos 7 días\"\n */\n dateDiff?: number;\n\n /**\n * Indica si esta opción está actualmente seleccionada.\n */\n isSelected: boolean;\n\n /**\n * Indica si esta opción debe mostrarse en la lista desplegable.\n */\n isVisible: boolean;\n\n /**\n * Función personalizada para calcular y retornar un DateRange.\n * Se utiliza cuando optionType requiere manejo especial más allá de dateDiff.\n */\n callBackFunction?: () => DateRange<Date>;\n\n /**\n * Expresión de fecha-matemática/relativa opcional mostrada para el inicio del rango\n * cuando los inputs editables están habilitados (ej: `now-7d`).\n * Anula el valor derivado de `dateDiff`. Debe estar emparejada con {@link endExpr}.\n */\n startExpr?: string;\n\n /**\n * Expresión de fecha-matemática/relativa opcional mostrada para el fin del rango\n * cuando los inputs editables están habilitados (ej: `now`).\n * Debe estar emparejada con {@link startExpr}.\n */\n endExpr?: string;\n}\n\n/**\n * Implementación por defecto de una opción de fecha seleccionable.\n * Proporciona valores por defecto para todos los campos.\n */\nexport class AcpSelectDateOption implements IAcpSelectDateOption {\n optionLabel = '';\n optionType = ACP_DATE_OPTION_TYPE.DATE_DIFF;\n dateDiff = 0;\n isSelected = false;\n isVisible = false;\n callBackFunction!: () => DateRange<Date>;\n}\n","import { FocusMonitor } from '@angular/cdk/a11y';\nimport { AsyncPipe } from '@angular/common';\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChildren,\n ElementRef,\n Input,\n OnDestroy,\n QueryList,\n TrackByFunction,\n ViewEncapsulation,\n booleanAttribute,\n forwardRef,\n inject,\n output,\n input,\n} from '@angular/core';\nimport { ControlValueAccessor, FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { MatCheckbox, MatCheckboxChange } from '@angular/material/checkbox';\n\nimport { AcpCheckboxGroupOption } from './interfaces';\nimport { AcpToObservablePipe } from './../../../core/pipes';\n\nexport class AcpCheckboxBase {\n constructor(\n public label?: any,\n public value?: any,\n ) {}\n}\n\n@Component({\n selector: 'acp-checkbox-group',\n exportAs: 'acpCheckboxGroup',\n host: {\n class: 'acp-checkbox-group',\n },\n templateUrl: './checkbox-group.html',\n styleUrl: './checkbox-group.scss',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => AcpCheckboxGroup),\n multi: true,\n },\n ],\n imports: [FormsModule, MatCheckbox, AcpToObservablePipe, AsyncPipe],\n})\nexport class AcpCheckboxGroup implements AfterViewInit, OnDestroy, ControlValueAccessor {\n private _changeDetectorRef = inject(ChangeDetectorRef);\n private _focusMonitor = inject(FocusMonitor);\n private _elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n\n @ContentChildren(forwardRef(() => MatCheckbox), { descendants: true })\n _checkboxes!: QueryList<MatCheckbox>;\n\n @Input()\n get trackBy() {\n return this._trackByFn;\n }\n set trackBy(fn: TrackByFunction<any> | undefined) {\n if (fn != null && typeof fn !== 'function') {\n console.warn(`trackBy must be a function, but received ${JSON.stringify(fn)}.`);\n }\n this._trackByFn = fn;\n }\n private _trackByFn?: TrackByFunction<any>;\n\n @Input()\n get items() {\n return this._items;\n }\n set items(value: any[]) {\n this._itemsAreUsed = true;\n\n // store the original data with deep clone\n this._originalItems = JSON.parse(JSON.stringify(value));\n this._items = value.map(option => {\n return option instanceof Object ? { ...option } : new AcpCheckboxBase(option, option);\n });\n\n // update the state of selectAll when items changed\n this.writeValue(this.selectedItems);\n }\n private _items: any[] = [];\n private _originalItems: any[] = [];\n private _itemsAreUsed = false;\n\n bindLabel = input('label');\n\n bindValue = input('value');\n\n @Input({ transform: booleanAttribute }) showSelectAll = false;\n\n @Input() selectAllLabel = 'Select All';\n\n @Input()\n get compareWith() {\n return this._compareWith;\n }\n set compareWith(fn: ((o1: any, o2: any) => boolean) | undefined) {\n if (fn != null && typeof fn !== 'function') {\n throw Error('`compareWith` must be a function.');\n }\n\n this._compareWith = fn;\n }\n private _compareWith?: (o1: any, o2: any) => boolean;\n\n @Input({ transform: booleanAttribute }) disabled = false;\n\n selectionChange = output<{ model: AcpCheckboxGroupOption[]; index: number }>();\n\n selectAll = false;\n selectAllIndeterminate = false;\n\n selectedItems: AcpCheckboxGroupOption[] = [];\n\n _onChange: (value: AcpCheckboxGroupOption[]) => void = () => null;\n _onTouched: () => void = () => null;\n\n ngAfterViewInit() {\n this._focusMonitor.monitor(this._elementRef, true).subscribe(focusOrigin => {\n if (!focusOrigin) {\n // When a focused element becomes disabled, the browser *immediately* fires a blur event.\n // Angular does not expect events to be raised during change detection, so any state change\n // (such as a form control's 'ng-touched') will cause a changed-after-checked error.\n // See https://github.com/angular/angular/issues/17793. To work around this, we defer\n // telling the form control it has been touched until the next tick.\n Promise.resolve().then(() => {\n this._onTouched();\n this._changeDetectorRef.markForCheck();\n });\n }\n });\n\n if (!this._itemsAreUsed) {\n this._setItemsFromContentCheckboxes();\n }\n }\n\n private _setItemsFromContentCheckboxes() {\n if (!this._checkboxes?.length) {\n return;\n }\n\n const items = this._checkboxes.map(cb => ({\n label: cb._elementRef.nativeElement.textContent?.trim() || '',\n value: cb.value,\n disabled: cb.disabled,\n color: cb.color,\n disableRipple: cb.disableRipple,\n labelPosition: cb.labelPosition,\n required: cb.required,\n ariaLabel: cb.ariaLabel,\n ariaLabelledby: cb.ariaLabelledby,\n ariaDescribedby: cb.ariaDescribedby,\n }));\n\n this.items = items;\n }\n\n ngOnDestroy() {\n this._focusMonitor.stopMonitoring(this._elementRef);\n }\n\n /**\n * Finds and selects and option based on its value.\n * @returns Option that has the corresponding value.\n */\n private _selectValue(value: AcpCheckboxGroupOption) {\n const correspondingOption = (this.items as AcpCheckboxGroupOption[]).find(option => {\n try {\n const compareValue = option[this.bindValue()] === value;\n return this._compareWith ? this._compareWith(option, value) : compareValue;\n } catch (error) {\n console.warn(error);\n return false;\n }\n });\n\n if (correspondingOption) {\n correspondingOption.checked = true;\n }\n\n return correspondingOption;\n }\n\n /**\n * Sets the model value. Implemented as part of ControlValueAccessor.\n * @param value New value to be written to the model.\n */\n writeValue(value: any[]): void {\n this.items.forEach(item => (item.checked = false));\n\n if (value) {\n if (!Array.isArray(value)) {\n throw Error('Value must be an array.');\n }\n\n value.forEach(currentValue => this._selectValue(currentValue));\n this.selectedItems = value;\n }\n\n this._checkMasterCheckboxState();\n this._changeDetectorRef.markForCheck();\n }\n\n /**\n * Registers a callback to be triggered when the model value changes.\n * Implemented as part of ControlValueAccessor.\n * @param fn Callback to be registered.\n */\n registerOnChange(fn: (value: AcpCheckboxGroupOption[]) => Record<string, unknown>): void {\n this._onChange = fn;\n }\n\n /**\n * Registers a callback to be triggered when the control is touched.\n * Implemented as part of ControlValueAccessor.\n * @param fn Callback to be registered.\n */\n registerOnTouched(fn: () => Record<string, unknown>): void {\n this._onTouched = fn;\n }\n\n /**\n * Sets the disabled state of the control. Implemented as a part of ControlValueAccessor.\n * @param isDisabled Whether the control should be disabled.\n */\n setDisabledState(isDisabled: boolean) {\n this.disabled = isDisabled;\n this._changeDetectorRef.markForCheck();\n }\n\n private _checkMasterCheckboxState() {\n if (\n (this.items as AcpCheckboxGroupOption[])\n .filter(option => option.checked || !option.disabled)\n .every(option => !option.checked)\n ) {\n this.selectAll = false;\n this.selectAllIndeterminate = false;\n } else if (\n (this.items as AcpCheckboxGroupOption[])\n .filter(option => option.checked || !option.disabled)\n .every(option => option.checked)\n ) {\n this.selectAll = true;\n this.selectAllIndeterminate = false;\n } else {\n this.selectAllIndeterminate = true;\n }\n }\n\n private _getSelectedItems(index: number) {\n this.selectedItems = (this.items as AcpCheckboxGroupOption[]).filter(option => option.checked);\n\n if (this._compareWith) {\n this.selectedItems = (this._originalItems as AcpCheckboxGroupOption[]).filter(option =>\n this.selectedItems.find(selectedOption => this._compareWith!(option, selectedOption)),\n );\n } else {\n this.selectedItems = this.selectedItems.map(option => option[this.bindValue()]);\n }\n\n this._onChange(this.selectedItems);\n\n this.selectionChange.emit({ model: this.selectedItems, index });\n }\n\n /** Handle normal checkbox toggle */\n _updateNormalCheckboxState(e: MatCheckboxChange, index: number): void {\n this._checkMasterCheckboxState();\n this._getSelectedItems(index);\n }\n\n /** Handle master checkbox toggle */\n _updateMasterCheckboxState(e: MatCheckboxChange, index: number): void {\n this.selectAll = !this.selectAll;\n this.selectAllIndeterminate = false;\n\n if (this.selectAll) {\n (this.items as AcpCheckboxGroupOption[])\n .filter(option => option.checked || !option.disabled)\n .forEach(option => (option.checked = true));\n } else {\n (this.items as AcpCheckboxGroupOption[])\n .filter(option => option.checked || !option.disabled)\n .forEach(option => (option.checked = !!option.disabled));\n }\n\n this._getSelectedItems(index);\n }\n\n _trackBy = (index: number, item: any) => {\n return this.trackBy ? this.trackBy(index, item) : item;\n };\n}\n","@if (showSelectAll) {\n<mat-checkbox\n class=\"acp-checkbox-master\"\n [checked]=\"selectAll\"\n [(indeterminate)]=\"selectAllIndeterminate\"\n [disabled]=\"disabled\"\n (change)=\"_updateMasterCheckboxState($event, -1)\"\n>\n {{ selectAllLabel }}\n</mat-checkbox>\n} @for (option of items; track _trackBy($index, option); let i = $index) {\n<mat-checkbox\n class=\"acp-checkbox-normal\"\n [(ngModel)]=\"option.checked\"\n [aria-describedby]=\"option.ariaDescribedby\"\n [aria-label]=\"option.ariaLabel\"\n [aria-labelledby]=\"option.ariaLabelledby\"\n [color]=\"option.color\"\n [disabled]=\"option.disabled || disabled\"\n [disableRipple]=\"option.disableRipple\"\n [labelPosition]=\"option.labelPosition\"\n [required]=\"option.required\"\n (change)=\"_updateNormalCheckboxState($event, i)\"\n>\n {{ option[bindLabel()] | toObservable | async }}\n</mat-checkbox>\n}\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","takeUntil","map","FLEX_RESIZE_STRATEGY_PROVIDER","PROVIDERS","TABLE_PROVIDERS","FLEX_PROVIDERS","ENTER_ANIMATION","EXIT_ANIMATION","observableOf","i3","i4"],"mappings":"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"}
|