{"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/badge/badge.utils.ts","../../../../packages/ng-components/src/lib/components/badge/badge.ts","../../../../packages/ng-components/src/lib/components/badge/badge.html","../../../../packages/ng-components/src/lib/components/badge/badge.tokens.ts","../../../../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/context-menu/context-menu.types.ts","../../../../packages/ng-components/src/lib/components/context-menu/context-menu.service.ts","../../../../packages/ng-components/src/lib/components/context-menu/context-menu.directive.ts","../../../../packages/ng-components/src/lib/components/context-menu/context-menu-panel.ts","../../../../packages/ng-components/src/lib/components/context-menu/context-menu-panel.html","../../../../packages/ng-components/src/lib/components/context-menu/context-menu.ts","../../../../packages/ng-components/src/lib/components/dialog/acp-dialog.ts","../../../../packages/ng-components/src/lib/components/dialog/acp-dialog-content.ts","../../../../packages/ng-components/src/lib/components/dialog/dialog-ref.ts","../../../../packages/ng-components/src/lib/components/button/button.ts","../../../../packages/ng-components/src/lib/components/button/button.html","../../../../packages/ng-components/src/lib/components/button/v2/base-button.ts","../../../../packages/ng-components/src/lib/components/button/v2/button-loader.directive.ts","../../../../packages/ng-components/src/lib/components/button/v2/button.ts","../../../../packages/ng-components/src/lib/components/button/v2/button.html","../../../../packages/ng-components/src/lib/components/dialog/dialog.tokens.ts","../../../../packages/ng-components/src/lib/components/dialog/acp-dialog-actions.ts","../../../../packages/ng-components/src/lib/components/dialog/acp-dialog-titlebar.ts","../../../../packages/ng-components/src/lib/components/dialog/acp-dialog-container.ts","../../../../packages/ng-components/src/lib/components/dialog/acp-dialog-container.html","../../../../packages/ng-components/src/lib/components/dialog/acp-dialog.service.ts","../../../../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/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/components/card/card.ts","../../../../packages/ng-components/src/lib/components/card/card.html","../../../../packages/ng-components/src/lib/components/kpi-card/kpi-card.utils.ts","../../../../packages/ng-components/src/lib/components/kpi-card/kpi-card.ts","../../../../packages/ng-components/src/lib/components/kpi-card/kpi-card.html","../../../../packages/ng-components/src/lib/components/kpi-card/kpi-card.tokens.ts","../../../../packages/ng-components/src/lib/components/theme/branding/branding.ts","../../../../packages/ng-components/src/lib/components/theme/header/header.ts","../../../../packages/ng-components/src/lib/components/theme/header/header-start.ts","../../../../packages/ng-components/src/lib/components/theme/header/header-branding.ts","../../../../packages/ng-components/src/lib/components/theme/header/header-center.ts","../../../../packages/ng-components/src/lib/components/theme/header/header-end.ts","../../../../packages/ng-components/src/lib/components/theme/header/header-actions.ts","../../../../packages/ng-components/src/lib/components/theme/header/header-notifications.ts","../../../../packages/ng-components/src/lib/components/theme/header/header-workspace.ts","../../../../packages/ng-components/src/lib/components/theme/header/header-language.ts","../../../../packages/ng-components/src/lib/components/theme/header/header-theme.ts","../../../../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/components/theme/theme-toggle/theme-toggle.ts","../../../../packages/ng-components/src/lib/components/theme/theme-toggle/theme-toggle.html","../../../../packages/ng-components/src/lib/components/theme/user-menu/user-menu.ts","../../../../packages/ng-components/src/lib/components/theme/user-panel/user-panel.component.ts","../../../../packages/ng-components/src/lib/components/theme/sidemenu/nav-accordion.directive.ts","../../../../packages/ng-components/src/lib/components/theme/sidemenu/nav-accordion-item.directive.ts","../../../../packages/ng-components/src/lib/components/theme/sidemenu/nav-accordion-toggle.directive.ts","../../../../packages/ng-components/src/lib/components/theme/sidemenu/sidemenu.component.ts","../../../../packages/ng-components/src/lib/components/theme/sidebar/sidebar.ts","../../../../packages/ng-components/src/lib/components/theme/sidebar/sidebar-header.ts","../../../../packages/ng-components/src/lib/components/theme/sidebar/sidebar-branding.ts","../../../../packages/ng-components/src/lib/components/theme/sidebar/sidebar-user.ts","../../../../packages/ng-components/src/lib/components/theme/sidebar/sidebar-content.ts","../../../../packages/ng-components/src/lib/components/theme/sidebar/sidebar-toggle.ts","../../../../packages/ng-components/src/lib/components/theme/shell-layout/shell-layout-slots.ts","../../../../packages/ng-components/src/lib/components/theme/shell-layout/shell-layout.ts","../../../../packages/ng-components/src/lib/components/theme/shell-layout/shell-layout.html","../../../../packages/ng-components/src/lib/components/theme/topmenu/topmenu-panel.ts","../../../../packages/ng-components/src/lib/components/theme/topmenu/topmenu-panel.html","../../../../packages/ng-components/src/lib/components/theme/topmenu/topmenu.ts","../../../../packages/ng-components/src/lib/components/theme/topmenu/topmenu.html","../../../../packages/ng-components/src/lib/directives/to-upper-case.ts","../../../../packages/ng-components/src/lib/models/pagination.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 { AcpBadgeColor, AcpBadgeTrend, AcpBadgeTrendConfig } from './badge.types';\n\nexport const TREND_CONFIGS: Record<AcpBadgeTrend, AcpBadgeTrendConfig> = {\n  up: { value: '↑', icon: 'trending_up', color: 'success' as AcpBadgeColor },\n  down: { value: '↓', icon: 'trending_down', color: 'danger' as AcpBadgeColor },\n  neutral: { value: '→', icon: 'trending_flat', color: 'neutral' as AcpBadgeColor },\n  none: { value: '', icon: '', color: 'neutral' as AcpBadgeColor },\n};\n","import {\n  booleanAttribute,\n  ChangeDetectionStrategy,\n  Component,\n  computed,\n  contentChild,\n  input,\n  output,\n  TemplateRef,\n  ViewEncapsulation,\n} from '@angular/core';\nimport { NgClass, NgTemplateOutlet } from '@angular/common';\nimport { RouterLink } from '@angular/router';\nimport {\n  MatChip,\n  MatChipAvatar,\n  MatChipRemove,\n  MatChipSet,\n  MatChipTrailingIcon,\n} from '@angular/material/chips';\nimport { MatIconModule } from '@angular/material/icon';\n\nimport {\n  AcpBadgeColor,\n  AcpBadgeShape,\n  AcpBadgeSize,\n  AcpBadgeTrend,\n  AcpBadgeVariant,\n} from './badge.types';\nimport { TREND_CONFIGS } from './badge.utils';\n\n@Component({\n  selector: 'acp-badge',\n  exportAs: 'acpBadge',\n  standalone: true,\n  imports: [\n    NgClass,\n    NgTemplateOutlet,\n    RouterLink,\n    MatChipSet,\n    MatChip,\n    MatChipAvatar,\n    MatChipTrailingIcon,\n    MatChipRemove,\n    MatIconModule,\n  ],\n  templateUrl: './badge.html',\n  styleUrl: './badge.scss',\n  encapsulation: ViewEncapsulation.None,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  host: {\n    '[class]': 'hostClasses()',\n  },\n})\nexport class AcpBadge {\n  label = input<string>();\n  value = input<string>();\n\n  variant = input<AcpBadgeVariant>('filled');\n  color = input<AcpBadgeColor>('primary');\n  size = input<AcpBadgeSize>('md');\n  shape = input<AcpBadgeShape>('rounded');\n\n  icon = input<string>();\n  trailingIcon = input<string>();\n  svgIcon = input<string>();\n  trailingSvgIcon = input<string>();\n\n  trend = input<AcpBadgeTrend>('none');\n\n  clickable = input(false, { transform: booleanAttribute });\n  disabled = input(false, { transform: booleanAttribute });\n  loading = input(false, { transform: booleanAttribute });\n  selected = input(false, { transform: booleanAttribute });\n  highlighted = input(false, { transform: booleanAttribute });\n  removable = input(false, { transform: booleanAttribute });\n\n  routerLink = input<string | any[] | null>(null);\n  href = input<string | null>(null);\n  ariaLabelOverride = input<string | null>(null);\n\n  clicked = output<void>();\n  removed = output<void>();\n\n  iconTemplate = contentChild('icon', { read: TemplateRef });\n  trailingIconTemplate = contentChild('trailingIcon', { read: TemplateRef });\n\n  private isTrending = computed(() => this.trend() !== 'none');\n\n  private trendConfig = computed(() => TREND_CONFIGS[this.trend()]);\n\n  effectiveColor = computed<AcpBadgeColor>(() => {\n    if (this.isTrending()) return this.trendConfig().color;\n    return this.color();\n  });\n\n  effectiveIcon = computed<string | undefined>(() => {\n    if (this.isTrending()) return this.trendConfig().icon;\n    return this.icon();\n  });\n\n  effectiveSvgIcon = computed<string | undefined>(() => {\n    if (this.isTrending()) return undefined;\n    return this.svgIcon();\n  });\n\n  effectiveTrailingIcon = computed<string | undefined>(() => {\n    if (this.removable()) return undefined;\n    return this.trailingIcon();\n  });\n\n  effectiveTrailingSvgIcon = computed<string | undefined>(() => {\n    if (this.removable()) return undefined;\n    return this.trailingSvgIcon();\n  });\n\n  effectiveValue = computed<string | undefined>(() => {\n    if (this.isTrending()) return this.value() ?? this.trendConfig().value;\n    return this.value();\n  });\n\n  isLink = computed(() => this.href() !== null || this.routerLink() !== null);\n\n  isInteractive = computed(() => this.clickable() || this.removable() || this.isLink());\n\n  isDisabled = computed(() => this.disabled() || this.loading());\n\n  isHighlighted = computed(() => this.highlighted() || this.selected());\n\n  chipClasses = computed(() =>\n    [\n      `acp-badge--${this.variant()}`,\n      `acp-badge--${this.size()}`,\n      `acp-badge--${this.shape()}`,\n    ].join(' '),\n  );\n\n  hostClasses = computed(() => {\n    const classes = [\n      'acp-badge',\n      `acp-badge--${this.variant()}`,\n      `acp-badge--${this.effectiveColor()}`,\n      `acp-badge--${this.size()}`,\n      `acp-badge--${this.shape()}`,\n    ];\n    if (this.isInteractive()) classes.push('acp-badge--interactive');\n    if (this.isDisabled()) classes.push('acp-badge--disabled');\n    if (this.selected()) classes.push('acp-badge--selected');\n    if (this.loading()) classes.push('acp-badge--loading');\n    if (this.removable()) classes.push('acp-badge--removable');\n    if (this.isTrending()) classes.push('acp-badge--trend');\n    return classes.join(' ');\n  });\n\n  ariaLabel = computed(() => {\n    const override = this.ariaLabelOverride();\n    if (override) return override;\n    const label = this.label() ?? '';\n    const value = this.effectiveValue() ?? '';\n    const separator = label && value ? ' ' : '';\n    return `${label}${separator}${value}`.trim() || null;\n  });\n\n  onChipClick(event: MouseEvent): void {\n    if (this.isDisabled()) {\n      event.preventDefault();\n      return;\n    }\n    this.clicked.emit();\n  }\n\n  onRemove(_event: any): void {\n    if (this.isDisabled()) return;\n    this.removed.emit();\n  }\n}\n","<mat-chip-set\n  class=\"acp-badge__set\"\n  [attr.aria-label]=\"ariaLabel()\"\n  [attr.aria-disabled]=\"isDisabled() || null\"\n>\n  <mat-chip\n    class=\"acp-badge__chip\"\n    [ngClass]=\"chipClasses()\"\n    [disabled]=\"isDisabled()\"\n    [removable]=\"removable()\"\n    [highlighted]=\"isHighlighted()\"\n    [value]=\"value()\"\n    [routerLink]=\"routerLink()\"\n    [attr.href]=\"href()\"\n    (removed)=\"onRemove($event)\"\n    (click)=\"onChipClick($event)\"\n  >\n    @if (loading()) {\n    <span class=\"acp-badge__loader\" aria-hidden=\"true\"></span>\n    } @if (iconTemplate()) {\n    <span matChipAvatar class=\"acp-badge__avatar\">\n      <ng-container [ngTemplateOutlet]=\"iconTemplate()!\"></ng-container>\n    </span>\n    } @else if (effectiveSvgIcon()) {\n    <mat-icon\n      matChipAvatar\n      class=\"acp-badge__icon\"\n      [svgIcon]=\"effectiveSvgIcon()!\"\n      aria-hidden=\"true\"\n    ></mat-icon>\n    } @else if (effectiveIcon()) {\n    <mat-icon matChipAvatar class=\"acp-badge__icon\" aria-hidden=\"true\"\n      >{{ effectiveIcon() }}</mat-icon\n    >\n    } @if (label()) {\n    <span class=\"acp-badge__label\">{{ label() }}</span>\n    } @if (label() && effectiveValue()) {\n    <span class=\"acp-badge__separator\" aria-hidden=\"true\">|</span>\n    } @if (effectiveValue()) {\n    <span class=\"acp-badge__value\">{{ effectiveValue() }}</span>\n    } @if (trailingIconTemplate()) {\n    <span matChipTrailingIcon class=\"acp-badge__trailing-icon\">\n      <ng-container [ngTemplateOutlet]=\"trailingIconTemplate()!\"></ng-container>\n    </span>\n    } @else if (effectiveTrailingSvgIcon()) {\n    <mat-icon\n      matChipTrailingIcon\n      class=\"acp-badge__trailing-icon\"\n      [svgIcon]=\"effectiveTrailingSvgIcon()!\"\n      aria-hidden=\"true\"\n    ></mat-icon>\n    } @else if (effectiveTrailingIcon()) {\n    <mat-icon matChipTrailingIcon class=\"acp-badge__trailing-icon\" aria-hidden=\"true\"\n      >{{ effectiveTrailingIcon() }}</mat-icon\n    >\n    } @if (removable()) {\n    <button\n      matChipRemove\n      type=\"button\"\n      class=\"acp-badge__remove\"\n      aria-label=\"Remove\"\n      (click)=\"onRemove($event)\"\n    >\n      <mat-icon aria-hidden=\"true\">cancel</mat-icon>\n    </button>\n    }\n  </mat-chip>\n</mat-chip-set>\n","import { AcpBadgeColor, AcpBadgeSize, AcpBadgeShape, AcpBadgeVariant } from './badge.types';\n\nexport const ACP_BADGE_COLORS: AcpBadgeColor[] = [\n  'primary',\n  'secondary',\n  'tertiary',\n  'success',\n  'warning',\n  'danger',\n  'info',\n  'neutral',\n  'custom',\n];\n\nexport const ACP_BADGE_VARIANTS: AcpBadgeVariant[] = [\n  'filled',\n  'outlined',\n  'soft',\n  'tonal',\n  'text',\n];\n\nexport const ACP_BADGE_SIZES: AcpBadgeSize[] = ['xs', 'sm', 'md', 'lg'];\n\nexport const ACP_BADGE_SHAPES: AcpBadgeShape[] = ['rounded', 'pill', 'square'];\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","/**\n * Context Menu Types and Interfaces\n * Defines the API contract for the ContextMenu component\n */\n\n/**\n * Represents a single item in the context menu\n */\nexport interface AcpContextMenuItem {\n  /** Unique identifier for the menu item */\n  id?: string;\n\n  /** Display label for the menu item (not required for separators) */\n  label?: string;\n\n  /** Material Icon name or SVG icon identifier */\n  icon?: string;\n\n  /** Badge text or number to display */\n  badge?: string | number;\n\n  /** Keyboard shortcut text to display (e.g., 'Ctrl+S') */\n  shortcut?: string;\n\n  /** Whether the menu item is disabled */\n  disabled?: boolean;\n\n  /** Whether the menu item is visible */\n  visible?: boolean;\n\n  /** Whether this is a separator line (ignores other properties) */\n  separator?: boolean;\n\n  /** Nested menu items for submenu support */\n  children?: AcpContextMenuItem[];\n\n  /** Callback function when item is clicked */\n  command?: (context: AcpContextMenuItemContext) => void;\n\n  /** Router link for navigation */\n  routerLink?: any;\n\n  /** External URL to navigate to */\n  url?: string;\n\n  /** Target for URL navigation (_blank, _self, etc) */\n  target?: string;\n\n  /** Whether this is a dangerous action (e.g., delete) */\n  danger?: boolean;\n\n  /** Whether the item is in loading state */\n  loading?: boolean;\n\n  /** Tooltip text for the menu item */\n  tooltip?: string;\n\n  /** Custom data associated with the menu item */\n  data?: unknown;\n\n  /** CSS class to apply to the menu item */\n  class?: string;\n\n  /** Whether to close menu after executing command */\n  closeOnClick?: boolean;\n}\n\n/**\n * Context passed to the command callback\n */\nexport interface AcpContextMenuItemContext {\n  /** The menu item that was clicked */\n  item: AcpContextMenuItem;\n\n  /** The event that triggered the action */\n  event: MouseEvent | KeyboardEvent;\n\n  /** The element that triggered the context menu */\n  element?: HTMLElement;\n\n  /** Custom data passed to the context menu */\n  data?: unknown;\n\n  /** Row data (for DataGrid integration) */\n  row?: unknown;\n\n  /** Column data (for DataGrid integration) */\n  column?: unknown;\n\n  /** Row index (for DataGrid integration) */\n  index?: number;\n}\n\n/**\n * Configuration for opening a context menu\n */\nexport interface AcpContextMenuOpenConfig {\n  /** X coordinate for menu position */\n  x: number;\n\n  /** Y coordinate for menu position */\n  y: number;\n\n  /** Element to position relative to (if not using x/y) */\n  element?: HTMLElement;\n\n  /** Custom data to pass to menu items */\n  data?: unknown;\n\n  /** Close menu when clicking outside */\n  closeOnOutsideClick?: boolean;\n\n  /** Close menu when pressing Escape */\n  closeOnEscape?: boolean;\n\n  /** Custom CSS classes for the menu panel */\n  panelClass?: string | string[];\n\n  /** Z-index for the menu overlay */\n  zIndex?: number;\n}\n\n/**\n * Configuration for the context menu trigger\n */\nexport interface AcpContextMenuTriggerConfig {\n  /** Trigger on right-click (contextmenu event) */\n  rightClick?: boolean;\n\n  /** Trigger on left-click */\n  leftClick?: boolean;\n\n  /** Trigger on hover */\n  hover?: boolean;\n\n  /** Delay before opening on hover (ms) */\n  hoverDelay?: number;\n\n  /** Delay before closing on hover leave (ms) */\n  hoverLeaveDelay?: number;\n\n  /** Custom data to pass to menu items */\n  data?: unknown;\n\n  /** Close menu when clicking outside */\n  closeOnOutsideClick?: boolean;\n\n  /** Close menu when pressing Escape */\n  closeOnEscape?: boolean;\n}\n\n/**\n * Position strategy for the context menu\n */\nexport type AcpContextMenuPosition = 'auto' | 'above' | 'below' | 'left' | 'right';\n\n/**\n * Reference to an open context menu\n */\nexport interface AcpContextMenuRef {\n  /** Close the context menu */\n  close(): void;\n\n  /** Update menu items */\n  updateItems(items: AcpContextMenuItem[]): void;\n\n  /** Get current menu items */\n  getItems(): AcpContextMenuItem[];\n\n  /** Update context data */\n  updateData(data: unknown): void;\n\n  /** Get current context data */\n  getData(): unknown;\n\n  /** Check if menu is open */\n  isOpen(): boolean;\n}\n","import { Service, inject, signal, NgZone, Type, Injector, InjectionToken } from '@angular/core';\nimport { Overlay, OverlayRef, PositionStrategy } from '@angular/cdk/overlay';\nimport { ComponentPortal } from '@angular/cdk/portal';\nimport { DOCUMENT } from '@angular/common';\nimport { Subject } from 'rxjs';\nimport {\n  AcpContextMenuItem,\n  AcpContextMenuOpenConfig,\n  AcpContextMenuRef,\n  AcpContextMenuItemContext,\n} from './context-menu.types';\n\n// Injection tokens for passing data to the component\nexport const CONTEXT_MENU_ITEMS = new InjectionToken<AcpContextMenuItem[]>('context-menu-items');\nexport const CONTEXT_MENU_DATA = new InjectionToken<unknown>('context-menu-data');\n\n/**\n * Service to manage context menu instances\n * Handles overlay creation, positioning, and lifecycle management\n */\n@Service()\nexport class AcpContextMenuService {\n  private readonly overlay = inject(Overlay);\n  private readonly ngZone = inject(NgZone);\n  private readonly document = inject(DOCUMENT);\n  private readonly injector = inject(Injector);\n\n  // Signal to track the currently open menu\n  private readonly openMenuRef = signal<OverlayRef | null>(null);\n  private readonly menuItems = signal<AcpContextMenuItem[]>([]);\n  private readonly contextData = signal<unknown>(null);\n\n  // Subject for menu item selection\n  private readonly itemSelected$ = new Subject<AcpContextMenuItemContext>();\n\n  constructor() {\n    // Auto-close menu when clicking outside\n    this.setupOutsideClickHandler();\n  }\n\n  /**\n   * Open a context menu at the specified position\n   */\n  async open(\n    items: AcpContextMenuItem[],\n    config: AcpContextMenuOpenConfig,\n  ): Promise<AcpContextMenuRef> {\n    // Close any existing menu\n    this.closeAll();\n\n    // Dynamically import the component to avoid circular dependency\n    const { AcpContextMenuPanel } = await import('./context-menu-panel');\n\n    // Create overlay reference\n    const overlayRef = this.createOverlay(config);\n\n    // Create and attach component\n    overlayRef.attach(\n      new ComponentPortal(\n        AcpContextMenuPanel as Type<any>,\n        null,\n        this.createInjector(items, config),\n      ),\n    );\n\n    // Store reference\n    this.openMenuRef.set(overlayRef);\n    this.menuItems.set(items);\n    this.contextData.set(config.data);\n\n    // Return menu reference\n    return this.createMenuRef(overlayRef);\n  }\n\n  /**\n   * Close all open context menus\n   */\n  closeAll(): void {\n    const menuRef = this.openMenuRef();\n    if (menuRef) {\n      menuRef.dispose();\n      this.openMenuRef.set(null);\n    }\n  }\n\n  /**\n   * Check if any menu is open\n   */\n  isOpen(): boolean {\n    return this.openMenuRef() !== null;\n  }\n\n  /**\n   * Get the item selection subject\n   */\n  getItemSelected$() {\n    return this.itemSelected$.asObservable();\n  }\n\n  /**\n   * Emit item selection\n   */\n  selectItem(context: AcpContextMenuItemContext): void {\n    this.itemSelected$.next(context);\n\n    // Execute command if provided\n    if (context.item.command) {\n      context.item.command(context);\n    }\n\n    // Close menu if configured\n    if (context.item.closeOnClick !== false) {\n      this.closeAll();\n    }\n  }\n\n  /**\n   * Create overlay reference with position strategy\n   */\n  private createOverlay(config: AcpContextMenuOpenConfig): OverlayRef {\n    const positionStrategy = this.createPositionStrategy(config);\n\n    const panelClasses = ['acp-context-menu-panel'];\n    if (Array.isArray(config.panelClass)) {\n      panelClasses.push(...config.panelClass);\n    } else if (config.panelClass) {\n      panelClasses.push(config.panelClass);\n    }\n\n    // Add z-index class if provided\n    if (config.zIndex) {\n      panelClasses.push(`acp-context-menu-z-${config.zIndex}`);\n    }\n\n    return this.overlay.create({\n      positionStrategy,\n      hasBackdrop: config.closeOnOutsideClick !== false,\n      backdropClass: 'cdk-overlay-transparent-backdrop',\n      panelClass: panelClasses,\n      scrollStrategy: this.overlay.scrollStrategies.block(),\n      maxHeight: '80vh',\n    });\n  }\n\n  /**\n   * Create position strategy for the overlay\n   */\n  private createPositionStrategy(config: AcpContextMenuOpenConfig): PositionStrategy {\n    const positionStrategy = this.overlay\n      .position()\n      .flexibleConnectedTo({ x: config.x, y: config.y })\n      .withPositions([\n        {\n          originX: 'start',\n          originY: 'top',\n          overlayX: 'start',\n          overlayY: 'top',\n          offsetX: 0,\n          offsetY: 0,\n        },\n        {\n          originX: 'start',\n          originY: 'bottom',\n          overlayX: 'start',\n          overlayY: 'top',\n          offsetX: 0,\n          offsetY: 0,\n        },\n        {\n          originX: 'end',\n          originY: 'top',\n          overlayX: 'end',\n          overlayY: 'top',\n          offsetX: 0,\n          offsetY: 0,\n        },\n        {\n          originX: 'end',\n          originY: 'bottom',\n          overlayX: 'end',\n          overlayY: 'top',\n          offsetX: 0,\n          offsetY: 0,\n        },\n      ])\n      .withFlexibleDimensions(true)\n      .withPush(true);\n\n    return positionStrategy;\n  }\n\n  /**\n   * Create injector for the menu component\n   */\n  private createInjector(items: AcpContextMenuItem[], config: AcpContextMenuOpenConfig): Injector {\n    return Injector.create({\n      parent: this.injector,\n      providers: [\n        { provide: CONTEXT_MENU_ITEMS, useValue: items },\n        { provide: CONTEXT_MENU_DATA, useValue: config.data },\n      ],\n    });\n  }\n\n  /**\n   * Create menu reference object\n   */\n  private createMenuRef(overlayRef: OverlayRef): AcpContextMenuRef {\n    return {\n      close: () => {\n        overlayRef.dispose();\n        this.openMenuRef.set(null);\n      },\n      updateItems: (newItems: AcpContextMenuItem[]) => {\n        this.menuItems.set(newItems);\n      },\n      getItems: () => this.menuItems(),\n      updateData: (data: unknown) => {\n        this.contextData.set(data);\n      },\n      getData: () => this.contextData(),\n      isOpen: () => overlayRef.hasAttached(),\n    };\n  }\n\n  /**\n   * Setup handler for closing menu on outside click\n   */\n  private setupOutsideClickHandler(): void {\n    this.ngZone.runOutsideAngular(() => {\n      this.document.addEventListener('click', (event: MouseEvent) => {\n        const menuRef = this.openMenuRef();\n        if (menuRef && !this.isClickInsideMenu(event)) {\n          this.ngZone.run(() => {\n            this.closeAll();\n          });\n        }\n      });\n    });\n  }\n\n  /**\n   * Check if click is inside the menu\n   */\n  private isClickInsideMenu(event: MouseEvent): boolean {\n    const menuRef = this.openMenuRef();\n    if (!menuRef) return false;\n\n    const menuElement = menuRef.overlayElement;\n    return menuElement.contains(event.target as Node);\n  }\n}\n","import {\n  Directive,\n  ElementRef,\n  EventEmitter,\n  HostListener,\n  Input,\n  OnDestroy,\n  Output,\n  inject,\n} from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport {\n  AcpContextMenuItem,\n  AcpContextMenuOpenConfig,\n  AcpContextMenuRef,\n  AcpContextMenuTriggerConfig,\n  AcpContextMenuItemContext,\n} from './context-menu.types';\nimport { AcpContextMenuService } from './context-menu.service';\n\n/**\n * Directive to attach a context menu to any element\n *\n * @example\n * ```html\n * <div [acpContextMenu]=\"menuItems\" [contextMenuData]=\"row\">\n *   Right-click me\n * </div>\n * ```\n *\n * @example\n * ```html\n * <div\n *   [acpContextMenu]=\"items\"\n *   [contextMenuTrigger]=\"{ leftClick: true }\"\n *   (contextMenuItemSelected)=\"onItemSelected($event)\">\n *   Left-click me\n * </div>\n * ```\n */\n@Directive({\n  selector: '[acpContextMenu]',\n  standalone: true,\n  exportAs: 'acpContextMenu',\n})\nexport class AcpContextMenuDirective implements OnDestroy {\n  private readonly elementRef = inject(ElementRef);\n  private readonly contextMenuService = inject(AcpContextMenuService);\n\n  private destroy$ = new Subject<void>();\n  private menuRef: AcpContextMenuRef | null = null;\n  private hoverTimeout: ReturnType<typeof setTimeout> | null = null;\n\n  /** Menu items to display */\n  @Input() acpContextMenu: AcpContextMenuItem[] = [];\n\n  /** Custom data to pass to menu items */\n  @Input() contextMenuData?: unknown;\n\n  /** Trigger configuration */\n  @Input() contextMenuTrigger: AcpContextMenuTriggerConfig = {\n    rightClick: true,\n    closeOnOutsideClick: true,\n    closeOnEscape: true,\n  };\n\n  /** Emitted when a menu item is selected */\n  @Output() contextMenuItemSelected = new EventEmitter<AcpContextMenuItemContext>();\n\n  /** Emitted when menu is opened */\n  @Output() contextMenuOpened = new EventEmitter<AcpContextMenuRef>();\n\n  /** Emitted when menu is closed */\n  @Output() contextMenuClosed = new EventEmitter<void>();\n\n  constructor() {\n    // Subscribe to item selection\n    this.contextMenuService\n      .getItemSelected$()\n      .pipe(takeUntil(this.destroy$))\n      .subscribe(context => {\n        this.contextMenuItemSelected.emit(context);\n      });\n  }\n\n  ngOnDestroy(): void {\n    this.destroy$.next();\n    this.destroy$.complete();\n    if (this.hoverTimeout) {\n      clearTimeout(this.hoverTimeout);\n    }\n  }\n\n  /**\n   * Handle right-click\n   */\n  @HostListener('contextmenu', ['$event'])\n  onContextMenu(event: MouseEvent): void {\n    if (!this.contextMenuTrigger.rightClick) {\n      return;\n    }\n\n    event.preventDefault();\n    event.stopPropagation();\n\n    this.openMenu(event.clientX, event.clientY, event, this.contextMenuData);\n  }\n\n  /**\n   * Handle left-click\n   */\n  @HostListener('click', ['$event'])\n  onClick(event: MouseEvent): void {\n    if (!this.contextMenuTrigger.leftClick) {\n      return;\n    }\n\n    event.preventDefault();\n    event.stopPropagation();\n\n    this.openMenu(event.clientX, event.clientY, event);\n  }\n\n  /**\n   * Handle mouse enter for hover trigger\n   */\n  @HostListener('mouseenter')\n  onMouseEnter(): void {\n    if (!this.contextMenuTrigger.hover) {\n      return;\n    }\n\n    const delay = this.contextMenuTrigger.hoverDelay ?? 300;\n\n    this.hoverTimeout = setTimeout(() => {\n      const rect = this.elementRef.nativeElement.getBoundingClientRect();\n      this.openMenu(rect.left, rect.bottom, new MouseEvent('mouseenter'));\n    }, delay);\n  }\n\n  /**\n   * Handle mouse leave for hover trigger\n   */\n  @HostListener('mouseleave')\n  onMouseLeave(): void {\n    if (!this.contextMenuTrigger.hover) {\n      return;\n    }\n\n    if (this.hoverTimeout) {\n      clearTimeout(this.hoverTimeout);\n      this.hoverTimeout = null;\n    }\n\n    const delay = this.contextMenuTrigger.hoverLeaveDelay ?? 300;\n\n    setTimeout(() => {\n      if (this.menuRef?.isOpen()) {\n        this.menuRef.close();\n        this.contextMenuClosed.emit();\n      }\n    }, delay);\n  }\n\n  /**\n   * Open the context menu\n   */\n  openMenu(x: number, y: number, _event: MouseEvent | KeyboardEvent, rowData?: unknown): void {\n    if (!this.acpContextMenu || this.acpContextMenu.length === 0) {\n      return;\n    }\n\n    // Use provided row data or fall back to contextMenuData\n    const data = rowData || this.contextMenuData;\n\n    const config: AcpContextMenuOpenConfig = {\n      x,\n      y,\n      element: this.elementRef.nativeElement,\n      data,\n      closeOnOutsideClick: this.contextMenuTrigger.closeOnOutsideClick !== false,\n      closeOnEscape: this.contextMenuTrigger.closeOnEscape !== false,\n    };\n\n    this.contextMenuService.open(this.acpContextMenu, config).then(menuRef => {\n      this.menuRef = menuRef;\n      this.contextMenuOpened.emit(this.menuRef);\n    });\n  }\n\n  /**\n   * Close the context menu\n   */\n  closeMenu(): void {\n    if (this.menuRef) {\n      this.menuRef.close();\n      this.contextMenuClosed.emit();\n    }\n  }\n\n  /**\n   * Update menu items\n   */\n  updateItems(items: AcpContextMenuItem[]): void {\n    if (this.menuRef) {\n      this.menuRef.updateItems(items);\n    }\n  }\n\n  /**\n   * Update context data\n   */\n  updateData(data: unknown): void {\n    if (this.menuRef) {\n      this.menuRef.updateData(data);\n    }\n  }\n\n  /**\n   * Check if menu is open\n   */\n  isOpen(): boolean {\n    return this.menuRef?.isOpen() ?? false;\n  }\n}\n","import {\n  Component,\n  ChangeDetectionStrategy,\n  ViewEncapsulation,\n  inject,\n  signal,\n  computed,\n  HostListener,\n  ViewChild,\n  ElementRef,\n  OnInit,\n  OnDestroy,\n  NgZone,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { CdkTrapFocus } from '@angular/cdk/a11y';\nimport { Subject } from 'rxjs';\nimport { AcpContextMenuItem, AcpContextMenuItemContext } from './context-menu.types';\nimport {\n  AcpContextMenuService,\n  CONTEXT_MENU_ITEMS,\n  CONTEXT_MENU_DATA,\n} from './context-menu.service';\n\n/**\n * Internal component that renders the context menu panel\n * Not meant to be used directly - use ContextMenuService or ngContextMenu directive\n */\n@Component({\n  selector: 'acp-context-menu-panel',\n  templateUrl: './context-menu-panel.html',\n  styleUrl: './context-menu-panel.scss',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  encapsulation: ViewEncapsulation.None,\n  standalone: true,\n  imports: [CommonModule, MatIconModule, MatProgressSpinnerModule, CdkTrapFocus],\n  host: {\n    class: 'acp-context-menu-panel-host',\n    role: 'menu',\n    '[attr.aria-label]': '\"Context Menu\"',\n  },\n})\nexport class AcpContextMenuPanel implements OnInit, OnDestroy {\n  private readonly contextMenuService = inject(AcpContextMenuService);\n  private readonly ngZone = inject(NgZone);\n  private readonly elementRef = inject(ElementRef);\n\n  @ViewChild('menuContainer', { read: ElementRef }) menuContainer?: ElementRef;\n\n  // Input signals - initialized from injected tokens\n  items = signal<AcpContextMenuItem[]>(inject(CONTEXT_MENU_ITEMS, { optional: true }) || []);\n  contextData = signal<unknown>(inject(CONTEXT_MENU_DATA, { optional: true }) || null);\n\n  // State signals\n  selectedIndex = signal<number>(-1);\n  expandedIndex = signal<number>(-1);\n  private destroy$ = new Subject<void>();\n\n  // Computed signals\n  visibleItems = computed(() => this.items().filter(item => item.visible !== false));\n\n  ngOnInit(): void {\n    // Focus the menu container for keyboard navigation\n    this.ngZone.runOutsideAngular(() => {\n      setTimeout(() => {\n        this.menuContainer?.nativeElement?.focus();\n      }, 0);\n    });\n  }\n\n  ngOnDestroy(): void {\n    this.destroy$.next();\n    this.destroy$.complete();\n  }\n\n  /**\n   * Handle keyboard navigation\n   */\n  @HostListener('keydown', ['$event'])\n  onKeyDown(event: KeyboardEvent): void {\n    const key = event.key;\n\n    switch (key) {\n      case 'ArrowDown':\n        event.preventDefault();\n        this.selectNext();\n        break;\n      case 'ArrowUp':\n        event.preventDefault();\n        this.selectPrevious();\n        break;\n      case 'ArrowRight':\n        event.preventDefault();\n        this.expandSelected();\n        break;\n      case 'ArrowLeft':\n        event.preventDefault();\n        this.collapseSelected();\n        break;\n      case 'Enter':\n        event.preventDefault();\n        this.activateSelected();\n        break;\n      case 'Escape':\n        event.preventDefault();\n        this.contextMenuService.closeAll();\n        break;\n      case 'Home':\n        event.preventDefault();\n        this.selectFirst();\n        break;\n      case 'End':\n        event.preventDefault();\n        this.selectLast();\n        break;\n    }\n  }\n\n  /**\n   * Handle item click\n   */\n  onItemClick(item: AcpContextMenuItem, event: MouseEvent): void {\n    event.preventDefault();\n    event.stopPropagation();\n\n    if (item.disabled || item.separator) {\n      return;\n    }\n\n    if (item.children && item.children.length > 0) {\n      this.expandedIndex.set(\n        this.expandedIndex() === this.items().indexOf(item) ? -1 : this.items().indexOf(item),\n      );\n      return;\n    }\n\n    const context: AcpContextMenuItemContext = {\n      item,\n      event,\n      element: this.elementRef.nativeElement,\n      data: this.contextData(),\n    };\n\n    this.contextMenuService.selectItem(context);\n  }\n\n  /**\n   * Handle item hover\n   */\n  onItemHover(index: number): void {\n    this.selectedIndex.set(index);\n  }\n\n  /**\n   * Check if item has children\n   */\n  hasChildren(item: AcpContextMenuItem): boolean {\n    return !!(item.children && item.children.length > 0);\n  }\n\n  /**\n   * Get item classes\n   */\n  getItemClasses(item: AcpContextMenuItem, index: number): Record<string, boolean> {\n    return {\n      'acp-context-menu-item': true,\n      'acp-context-menu-item--disabled': item.disabled || false,\n      'acp-context-menu-item--separator': item.separator || false,\n      'acp-context-menu-item--danger': item.danger || false,\n      'acp-context-menu-item--selected': this.selectedIndex() === index,\n      'acp-context-menu-item--expanded': this.expandedIndex() === index && this.hasChildren(item),\n      [item.class || '']: !!item.class,\n    };\n  }\n\n  /**\n   * Select next item\n   */\n  private selectNext(): void {\n    const items = this.visibleItems();\n    const currentIndex = this.selectedIndex();\n    const nextIndex = currentIndex < items.length - 1 ? currentIndex + 1 : 0;\n    this.selectedIndex.set(nextIndex);\n  }\n\n  /**\n   * Select previous item\n   */\n  private selectPrevious(): void {\n    const items = this.visibleItems();\n    const currentIndex = this.selectedIndex();\n    const prevIndex = currentIndex > 0 ? currentIndex - 1 : items.length - 1;\n    this.selectedIndex.set(prevIndex);\n  }\n\n  /**\n   * Select first item\n   */\n  private selectFirst(): void {\n    this.selectedIndex.set(0);\n  }\n\n  /**\n   * Select last item\n   */\n  private selectLast(): void {\n    const items = this.visibleItems();\n    this.selectedIndex.set(Math.max(0, items.length - 1));\n  }\n\n  /**\n   * Expand selected item\n   */\n  private expandSelected(): void {\n    const selectedItem = this.visibleItems()[this.selectedIndex()];\n    if (selectedItem && this.hasChildren(selectedItem)) {\n      this.expandedIndex.set(this.selectedIndex());\n    }\n  }\n\n  /**\n   * Collapse selected item\n   */\n  private collapseSelected(): void {\n    if (this.expandedIndex() === this.selectedIndex()) {\n      this.expandedIndex.set(-1);\n    }\n  }\n\n  /**\n   * Activate selected item\n   */\n  private activateSelected(): void {\n    const selectedItem = this.visibleItems()[this.selectedIndex()];\n    if (selectedItem && !selectedItem.disabled && !selectedItem.separator) {\n      const event = new KeyboardEvent('keydown', { key: 'Enter' });\n      this.onItemClick(selectedItem, event as any);\n    }\n  }\n\n  /**\n   * Track by function for items\n   */\n  trackByIndex(index: number): number {\n    return index;\n  }\n}\n","<div\n  #menuContainer\n  class=\"acp-context-menu-container\"\n  role=\"menu\"\n  tabindex=\"0\"\n  cdkTrapFocus\n  cdkTrapFocusAutoCapture\n>\n  <div class=\"acp-context-menu-list\">\n    @for (item of visibleItems(); track $index; let i = $index) { @if (item.separator) {\n    <div class=\"acp-context-menu-separator\" role=\"separator\" aria-orientation=\"horizontal\"></div>\n    } @if (!item.separator) {\n    <button\n      [ngClass]=\"getItemClasses(item, i)\"\n      (click)=\"onItemClick(item, $event)\"\n      (mouseenter)=\"onItemHover(i)\"\n      [disabled]=\"item.disabled || false\"\n      [attr.aria-label]=\"item.label\"\n      [attr.aria-disabled]=\"item.disabled || false\"\n      [attr.aria-haspopup]=\"hasChildren(item) ? 'menu' : 'false'\"\n      [attr.aria-expanded]=\"expandedIndex() === i && hasChildren(item)\"\n      [title]=\"item.tooltip || null\"\n      role=\"menuitem\"\n      type=\"button\"\n    >\n      @if (item.icon) {\n      <span class=\"acp-context-menu-item-icon\">\n        @if (!item.icon.includes('/')) {\n        <mat-icon [attr.aria-hidden]=\"true\"> {{ item.icon }} </mat-icon>\n        } @if (item.icon.includes('/')) {\n        <img [src]=\"item.icon\" alt=\"\" aria-hidden=\"true\" />\n        }\n      </span>\n      }\n\n      <span class=\"acp-context-menu-item-label\"> {{ item.label }} </span>\n\n      @if (item.badge) {\n      <span class=\"acp-context-menu-item-badge\"> {{ item.badge }} </span>\n      } @if (item.shortcut) {\n      <span class=\"acp-context-menu-item-shortcut\"> {{ item.shortcut }} </span>\n      } @if (item.loading) {\n      <mat-spinner class=\"acp-context-menu-item-loader\" [diameter]=\"16\" [strokeWidth]=\"2\">\n      </mat-spinner>\n      } @if (hasChildren(item)) {\n      <mat-icon class=\"acp-context-menu-item-arrow\" [attr.aria-hidden]=\"true\">\n        chevron_right\n      </mat-icon>\n      }\n    </button>\n    } @if (hasChildren(item) && expandedIndex() === i) {\n    <div class=\"acp-context-menu-submenu\" role=\"menu\">\n      @for (subitem of item.children; track $index; let j = $index) { @if (subitem.separator) {\n      <div class=\"acp-context-menu-separator\" role=\"separator\" aria-orientation=\"horizontal\"></div>\n      } @if (!subitem.separator) {\n      <button\n        class=\"acp-context-menu-item\"\n        [class.acp-context-menu-item--disabled]=\"subitem.disabled || false\"\n        [class.acp-context-menu-item--danger]=\"subitem.danger || false\"\n        [class.acp-context-menu-item--selected]=\"false\"\n        (click)=\"onItemClick(subitem, $event)\"\n        [disabled]=\"subitem.disabled || false\"\n        [attr.aria-label]=\"subitem.label\"\n        [attr.aria-disabled]=\"subitem.disabled || false\"\n        [title]=\"subitem.tooltip || null\"\n        role=\"menuitem\"\n        type=\"button\"\n      >\n        @if (subitem.icon) {\n        <span class=\"acp-context-menu-item-icon\">\n          @if (!subitem.icon.includes('/')) {\n          <mat-icon [attr.aria-hidden]=\"true\"> {{ subitem.icon }} </mat-icon>\n          } @if (subitem.icon.includes('/')) {\n          <img [src]=\"subitem.icon\" alt=\"\" aria-hidden=\"true\" />\n          }\n        </span>\n        }\n\n        <span class=\"acp-context-menu-item-label\"> {{ subitem.label }} </span>\n\n        @if (subitem.badge) {\n        <span class=\"acp-context-menu-item-badge\"> {{ subitem.badge }} </span>\n        } @if (subitem.shortcut) {\n        <span class=\"acp-context-menu-item-shortcut\"> {{ subitem.shortcut }} </span>\n        } @if (subitem.loading) {\n        <mat-spinner class=\"acp-context-menu-item-loader\" [diameter]=\"16\" [strokeWidth]=\"2\">\n        </mat-spinner>\n        }\n      </button>\n      } }\n    </div>\n    } }\n  </div>\n</div>\n","import { Component, input, output, inject, OnDestroy } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport {\n  AcpContextMenuItem,\n  AcpContextMenuItemContext,\n  AcpContextMenuRef,\n} from './context-menu.types';\nimport { AcpContextMenuService } from './context-menu.service';\n\n/**\n * Declarative context menu component\n *\n * @example\n * ```html\n * <div #trigger>Right-click here</div>\n * <acp-contextmenu #cm [model]=\"items\" [target]=\"trigger\" (onHide)=\"onHide()\" />\n *\n * <button (click)=\"showMenu(event)\">Show Menu</button>\n * ```\n *\n * @example\n * ```html\n * <acp-contextmenu #cm [model]=\"items\" (onHide)=\"onHide()\" />\n *\n * <button (contextmenu)=\"onContextMenu($event)\">Right-click</button>\n * ```\n */\n@Component({\n  selector: 'acp-contextmenu',\n  standalone: true,\n  template: '',\n  exportAs: 'acpContextMenu',\n})\nexport class AcpContextMenu implements OnDestroy {\n  private readonly contextMenuService = inject(AcpContextMenuService);\n  private destroy$ = new Subject<void>();\n  private menuRef: AcpContextMenuRef | null = null;\n\n  /** Menu items to display */\n  readonly model = input.required<AcpContextMenuItem[]>();\n\n  /** Target element to attach the context menu to */\n  readonly target = input<HTMLElement>();\n\n  /** Emitted when menu is hidden/closed */\n  readonly hide = output<void>();\n\n  /** Emitted when a menu item is selected */\n  readonly itemSelected = output<AcpContextMenuItemContext>();\n\n  constructor() {\n    // Subscribe to item selection\n    this.contextMenuService\n      .getItemSelected$()\n      .pipe(takeUntil(this.destroy$))\n      .subscribe(context => {\n        this.itemSelected.emit(context);\n      });\n  }\n\n  ngOnDestroy(): void {\n    this.destroy$.next();\n    this.destroy$.complete();\n    this.close();\n  }\n\n  /**\n   * Show the context menu at the specified position\n   *\n   * @param event - Mouse event or custom event with clientX/clientY\n   * @param data - Optional data to pass to menu items (e.g., row data)\n   */\n  show(event: MouseEvent | { clientX: number; clientY: number }, data?: unknown): void {\n    const x = event.clientX;\n    const y = event.clientY;\n\n    this.contextMenuService\n      .open(this.model(), {\n        x,\n        y,\n        data: data || null,\n        element: this.target(),\n      })\n      .then(menuRef => {\n        this.menuRef = menuRef;\n      });\n  }\n\n  /**\n   * Show the context menu positioned relative to an element\n   *\n   * @param element - Element to position the menu relative to\n   * @param data - Optional data to pass to menu items\n   */\n  showForElement(element: HTMLElement, data?: unknown): void {\n    const rect = element.getBoundingClientRect();\n    this.contextMenuService\n      .open(this.model(), {\n        x: rect.right,\n        y: rect.top,\n        data: data || null,\n        element,\n      })\n      .then(menuRef => {\n        this.menuRef = menuRef;\n      });\n  }\n\n  /**\n   * Close the context menu\n   */\n  close(): void {\n    if (this.menuRef) {\n      this.menuRef.close();\n      this.menuRef = null;\n      this.hide.emit();\n    }\n  }\n\n  /**\n   * Check if the menu is currently open\n   */\n  isOpen(): boolean {\n    return this.menuRef?.isOpen() ?? false;\n  }\n\n  /**\n   * Update the menu items\n   */\n  updateItems(items: AcpContextMenuItem[]): void {\n    if (this.menuRef) {\n      this.menuRef.updateItems(items);\n    }\n  }\n\n  /**\n   * Update the context data\n   */\n  updateData(data: unknown): void {\n    if (this.menuRef) {\n      this.menuRef.updateData(data);\n    }\n  }\n}\n","import { ChangeDetectionStrategy, Component, ViewEncapsulation } from '@angular/core';\n\n/**\n * Declarative dialog structure wrapper. Use it inside a dialog content template\n * to group the titlebar, body and actions sections.\n *\n * @example\n * ```html\n * <acp-dialog>\n *   <acp-dialog-titlebar title=\"Edit user\" icon=\"person\" />\n *   <acp-dialog-content>\n *     <p>Dialog body</p>\n *   </acp-dialog-content>\n *   <acp-dialog-actions align=\"end\">\n *     <acp-button text=\"Cancel\" appearance=\"text\" (clicked)=\"ref.close()\" />\n *     <acp-button text=\"Save\" color=\"success\" (clicked)=\"ref.close(user)\" />\n *   </acp-dialog-actions>\n * </acp-dialog>\n * ```\n */\n@Component({\n  selector: 'acp-dialog',\n  standalone: true,\n  template: `\n    <ng-content select=\"acp-dialog-titlebar\" />\n    <ng-content select=\"acp-dialog-content\" />\n    <ng-content select=\"acp-dialog-actions\" />\n    <ng-content />\n  `,\n  host: {\n    class: 'acp-dialog',\n    '[style.display]': '\"contents\"',\n  },\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  encapsulation: ViewEncapsulation.None,\n})\nexport class AcpDialog {}\n","import { ChangeDetectionStrategy, Component, ViewEncapsulation } from '@angular/core';\n\n/**\n * Declarative dialog content body. Use it inside `<acp-dialog>` or any dialog\n * content template to mark the scrollable body section.\n *\n * @example\n * ```html\n * <acp-dialog-content>\n *   <p>Dialog body</p>\n * </acp-dialog-content>\n * ```\n */\n@Component({\n  selector: 'acp-dialog-content',\n  standalone: true,\n  template: `<ng-content />`,\n  host: { class: 'acp-dialog-content' },\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  encapsulation: ViewEncapsulation.None,\n})\nexport class AcpDialogContent {}\n","import { ComponentRef } from '@angular/core';\nimport { MatDialogRef, MatDialogState } from '@angular/material/dialog';\nimport { firstValueFrom, from, Observable, Subject } from 'rxjs';\nimport { switchMap, take } from 'rxjs/operators';\n\nimport type { AcpDialogActionClick } from './dialog.interfaces';\n\n/**\n * Reference to a dialog opened via `AcpDialogService`. Mirrors the public surface\n * of `MatDialogRef` so consumers can subscribe to `afterClosed()`, close manually,\n * inspect the component instance, etc.\n *\n * It is both the value returned by `AcpDialogService.open()` and an injectable\n * token: content components can `inject(AcpDialogRef)` to close themselves.\n */\nexport class AcpDialogRef<R = unknown> {\n  /** Emits every time a configured dialog action is clicked, before it closes. */\n  clickedResult: Subject<AcpDialogActionClick<R>>;\n\n  /** Observable mirror of {@link clickedResult}. */\n  get actionClicked$(): Observable<AcpDialogActionClick<R>> {\n    return this.clickedResult.asObservable();\n  }\n\n  constructor(\n    private readonly matDialogRef: MatDialogRef<unknown, R> | Promise<MatDialogRef<unknown, R>>,\n    clickedResult?: Subject<AcpDialogActionClick<R>>,\n  ) {\n    this.clickedResult = clickedResult ?? new Subject<AcpDialogActionClick<R>>();\n  }\n\n  /** The instance of the component opened into the dialog. */\n  get componentInstance(): unknown {\n    return this.readRef(ref => ref.componentInstance);\n  }\n\n  /** `ComponentRef` of the component opened into the dialog. */\n  get componentRef(): ComponentRef<unknown> | null {\n    return this.readRef(ref => ref.componentRef) ?? null;\n  }\n\n  /** Whether the user is allowed to close the dialog. */\n  get disableClose(): boolean | undefined {\n    return this.readRef(ref => ref.disableClose);\n  }\n\n  /** Unique ID for the dialog. */\n  get id(): string {\n    return this.readRef(ref => ref.id) ?? '';\n  }\n\n  /** Gets an observable that is notified when the dialog is finished closing. */\n  afterClosed(): Observable<R | undefined> {\n    return this.fromRef(ref => ref.afterClosed());\n  }\n\n  /** Gets an observable that is notified when the dialog is finished opening. */\n  afterOpened(): Observable<void> {\n    return this.fromRef(ref => ref.afterOpened());\n  }\n\n  /** Gets an observable that is notified when the dialog has started closing. */\n  beforeClosed(): Observable<R | undefined> {\n    return this.fromRef(ref => ref.beforeClosed());\n  }\n\n  /** Gets an observable that emits when the overlay's backdrop has been clicked. */\n  backdropClick(): Observable<MouseEvent> {\n    return this.fromRef(ref => ref.backdropClick());\n  }\n\n  /** Gets an observable that emits when keydown events are targeted on the overlay. */\n  keydownEvents(): Observable<KeyboardEvent> {\n    return this.fromRef(ref => ref.keydownEvents());\n  }\n\n  /** Gets the current lifecycle state of the dialog. */\n  getState(): MatDialogState | undefined {\n    return this.readRef(ref => ref.getState());\n  }\n\n  /** Resolves with the result once the dialog finishes closing. */\n  get closed(): Promise<R | undefined> {\n    return firstValueFrom(this.afterClosed());\n  }\n\n  /** Observable that emits the result once the dialog finishes closing. */\n  get closed$(): Observable<R | undefined> {\n    return this.afterClosed();\n  }\n\n  /** Closes the dialog, optionally returning a result. */\n  close(result?: R): void {\n    this.withRef(ref => ref.close(result));\n  }\n\n  /** Updates the dialog's position. */\n  updatePosition(position?: {\n    left?: string;\n    top?: string;\n    right?: string;\n    bottom?: string;\n  }): this {\n    this.withRef(ref => ref.updatePosition(position));\n    return this;\n  }\n\n  /** Updates the dialog's width and height. */\n  updateSize(width = '', height = ''): this {\n    this.withRef(ref => ref.updateSize(width, height));\n    return this;\n  }\n\n  /** Add a CSS class or an array of classes to the overlay pane. */\n  addPanelClass(classes: string | string[]): this {\n    this.withRef(ref => ref.addPanelClass(classes));\n    return this;\n  }\n\n  /** Remove a CSS class or an array of classes from the overlay pane. */\n  removePanelClass(classes: string | string[]): this {\n    this.withRef(ref => ref.removePanelClass(classes));\n    return this;\n  }\n\n  private fromRef<T>(fn: (ref: MatDialogRef<unknown, R>) => Observable<T>): Observable<T> {\n    if (this.matDialogRef instanceof Promise) {\n      return from(this.matDialogRef).pipe(take(1), switchMap(fn));\n    }\n    return fn(this.matDialogRef);\n  }\n\n  private readRef<T>(fn: (ref: MatDialogRef<unknown, R>) => T): T | undefined {\n    if (this.matDialogRef instanceof Promise) {\n      return undefined;\n    }\n    return fn(this.matDialogRef);\n  }\n\n  private withRef(fn: (ref: MatDialogRef<unknown, R>) => void): void {\n    if (this.matDialogRef instanceof Promise) {\n      this.matDialogRef.then(ref => fn(ref));\n    } else {\n      fn(this.matDialogRef);\n    }\n  }\n}\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 { booleanAttribute, computed, input, output, Directive } from '@angular/core';\n\ntype AcpButtonVariant = 'basic' | 'icon' | 'fab' | 'mini-fab';\ntype AcpButtonAppearance = 'text' | 'filled' | 'elevated' | 'outlined' | 'tonal';\ntype AcpButtonType = 'button' | 'submit' | 'reset';\ntype AcpButtonColor =\n  | 'primary'\n  | 'secondary'\n  | 'accent'\n  | 'error'\n  | 'danger'\n  | 'success'\n  | 'warning'\n  | 'info'\n  | 'dark'\n  | 'light';\n\n@Directive({\n  host: {\n    '[style.pointer-events]': 'pointerEvents()',\n  },\n})\nexport abstract class BaseButton {\n  color = input<AcpButtonColor>('primary');\n  square = input(false, { transform: booleanAttribute });\n  icon = input<string>();\n  suffixIcon = input<string>();\n  loading = input(false, { transform: booleanAttribute });\n  showProgress = input(false, { transform: booleanAttribute });\n  progressType = input<'spinner' | 'text'>('spinner');\n  progressText = input<string>('Loading...');\n  disabled = input(false, { transform: booleanAttribute });\n  disableRipple = input(false, { transform: booleanAttribute });\n  variant = input<AcpButtonVariant>('basic');\n  appearance = input<AcpButtonAppearance>('filled');\n  type = input<AcpButtonType>('button');\n  extended = input(false, { transform: booleanAttribute });\n  block = input(false, { transform: booleanAttribute });\n  size = input<'small' | 'medium' | 'large'>('large');\n  text = input<string>();\n  ariaLabel = input<string>();\n  form = input<string>();\n\n  hasText = computed(() => !!this.text() && this.text()!.trim().length > 0);\n\n  clicked = output<void>();\n  focused = output<void>();\n  blurred = output<void>();\n\n  colorClass = computed(() => (this.color() === 'danger' ? 'acp-error' : `acp-${this.color()}`));\n  sizeClass = computed(() => `acp-${this.size()}`);\n  squareClass = computed(() => (this.square() ? 'acp-square' : ''));\n  blockClass = computed(() => (this.block() ? 'acp-block' : ''));\n\n  isDisabled = computed(() => this.disabled() || this.loading());\n  pointerEvents = computed(() => (this.isDisabled() ? 'none' : 'auto'));\n}\n","import {\n  Directive,\n  Renderer2,\n  input,\n  inject,\n  ViewContainerRef,\n  booleanAttribute,\n  ComponentRef,\n  afterRenderEffect,\n  untracked,\n  signal,\n  computed,\n} from '@angular/core';\nimport { MatProgressSpinner } from '@angular/material/progress-spinner';\n\n@Directive({\n  selector: 'button[acpLoading]',\n})\nexport class ButtonLoaderDirective {\n  acpLoading = input(false, { transform: booleanAttribute });\n\n  private viewContainer = inject(ViewContainerRef);\n  private renderer = inject(Renderer2);\n\n  private spinner: ComponentRef<MatProgressSpinner> | null = null;\n  private readonly buttonNativeElement = signal<HTMLButtonElement>(\n    this.viewContainer.element.nativeElement,\n  );\n  private readonly spinnerSize = computed(() => {\n    const buttonHeight = this.buttonNativeElement().clientHeight;\n    return buttonHeight ? Math.trunc(buttonHeight / 1.5) : 20;\n  });\n\n  constructor() {\n    afterRenderEffect({\n      earlyRead: () => {\n        if (this.buttonNativeElement().tagName !== 'BUTTON') {\n          throw new Error(\n            `ButtonLoaderDirective can only be used on a button element, but used on${this.buttonNativeElement().tagName}`,\n          );\n        }\n      },\n      write: () => {\n        const loading = this.acpLoading();\n        untracked(() => {\n          if (loading) {\n            this.buttonNativeElement().classList.add('button-loading');\n            this.createSpinner();\n          } else {\n            this.buttonNativeElement().classList.remove('button-loading');\n            this.destroySpinner();\n          }\n        });\n      },\n    });\n  }\n\n  private createSpinner(): void {\n    if (!this.spinner) {\n      this.spinner = this.viewContainer.createComponent(MatProgressSpinner);\n      this.spinner.instance.diameter = this.spinnerSize();\n      this.spinner.instance.mode = 'indeterminate';\n      this.spinner.instance.strokeWidth = 2;\n      const spinnerElement: HTMLElement = this.spinner.location.nativeElement;\n      this.renderer.setStyle(spinnerElement, 'position', 'absolute');\n      this.renderer.appendChild(this.buttonNativeElement(), spinnerElement);\n    }\n  }\n\n  private destroySpinner(): void {\n    this.spinner?.destroy();\n    this.spinner = null;\n  }\n}\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { BaseButton } from './base-button';\nimport { ButtonLoaderDirective } from './button-loader.directive';\nimport { NgClass } from '@angular/common';\n\n@Component({\n  selector: 'acp-button',\n  templateUrl: './button.html',\n  styleUrl: './button.scss',\n  imports: [\n    NgClass,\n    MatButtonModule,\n    MatIconModule,\n    MatProgressSpinnerModule,\n    ButtonLoaderDirective,\n  ],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AcpButton extends BaseButton {}\n","@if (variant() === 'icon') {\n<button\n  matIconButton\n  [disabled]=\"isDisabled()\"\n  [disableRipple]=\"disableRipple()\"\n  [acpLoading]=\"loading()\"\n  [type]=\"type()\"\n  [attr.form]=\"form()\"\n  [attr.aria-label]=\"ariaLabel()\"\n  [ngClass]=\"[colorClass(), squareClass(), blockClass(), sizeClass()]\"\n  (click)=\"clicked.emit()\"\n  (focus)=\"focused.emit()\"\n  (blur)=\"blurred.emit()\"\n>\n  <mat-icon>{{icon()}}</mat-icon>\n</button>\n} @else if (variant() === 'fab') {\n<button\n  matFab\n  [extended]=\"extended()\"\n  [disabled]=\"isDisabled()\"\n  [disableRipple]=\"disableRipple()\"\n  [acpLoading]=\"loading()\"\n  [type]=\"type()\"\n  [attr.form]=\"form()\"\n  [attr.aria-label]=\"ariaLabel()\"\n  [ngClass]=\"[colorClass(), sizeClass()]\"\n  (click)=\"clicked.emit()\"\n  (focus)=\"focused.emit()\"\n  (blur)=\"blurred.emit()\"\n>\n  @if (icon()) { <mat-icon>{{icon()}}</mat-icon> } @if (extended()) { @if (hasText()) { {{text()}} }\n  @else { <ng-content></ng-content> } }\n</button>\n} @else if (variant() === 'mini-fab') {\n<button\n  matMiniFab\n  [disabled]=\"isDisabled()\"\n  [disableRipple]=\"disableRipple()\"\n  [acpLoading]=\"loading()\"\n  [type]=\"type()\"\n  [attr.form]=\"form()\"\n  [attr.aria-label]=\"ariaLabel()\"\n  [ngClass]=\"[colorClass(), sizeClass()]\"\n  (click)=\"clicked.emit()\"\n  (focus)=\"focused.emit()\"\n  (blur)=\"blurred.emit()\"\n>\n  <mat-icon>{{icon()}}</mat-icon>\n</button>\n} @else {\n<button\n  [matButton]=\"appearance()\"\n  [disabled]=\"isDisabled()\"\n  [disableRipple]=\"disableRipple()\"\n  [acpLoading]=\"loading()\"\n  [showProgress]=\"showProgress()\"\n  [type]=\"type()\"\n  [attr.form]=\"form()\"\n  [attr.aria-label]=\"ariaLabel()\"\n  [ngClass]=\"[colorClass(), squareClass(), blockClass(), sizeClass()]\"\n  (click)=\"clicked.emit()\"\n  (focus)=\"focused.emit()\"\n  (blur)=\"blurred.emit()\"\n>\n  @if (icon()) { <mat-icon>{{icon()}}</mat-icon> } @if (hasText()) { {{text()}} } @else {\n  <ng-content></ng-content> } @if (showProgress() && progressType() === 'spinner') {\n  <mat-progress-spinner\n    progressIndicator\n    mode=\"indeterminate\"\n    [diameter]=\"20\"\n    aria-label=\"Loading\"\n  />\n  } @if (showProgress() && progressType() === 'text') {\n  <div progressIndicator role=\"progressbar\" aria-valuemin=\"0\" aria-valuemax=\"100\">\n    {{ progressText() }}\n  </div>\n  } @if (suffixIcon()) {\n  <mat-icon iconPositionEnd>{{suffixIcon()}}</mat-icon> }\n</button>\n}\n","import { EnvironmentProviders, InjectionToken, makeEnvironmentProviders } from '@angular/core';\nimport {\n  AcpDialogActionsOutlet,\n  AcpDialogConfig,\n  AcpDialogTitlebarOutlet,\n} from './dialog.interfaces';\n\n/**\n * Token used to deliver `AcpDialogConfig.data` to the content component.\n * Content components read it with `inject(ACP_DIALOG_DATA)` (typed as `D`).\n * This is the single data channel, used identically for bare and shell dialogs.\n */\nexport const ACP_DIALOG_DATA = new InjectionToken<unknown>('ACP_DIALOG_DATA', {\n  factory: () => null,\n});\n\n/**\n * Application-wide defaults for every dialog opened through `AcpDialogService`.\n * Mirrors `MAT_DIALOG_DEFAULT_OPTIONS` from Angular Material.\n * Per-call config always wins over these defaults.\n */\nexport const ACP_DIALOG_DEFAULT_OPTIONS = new InjectionToken<AcpDialogConfig>(\n  'ACP_DIALOG_DEFAULT_OPTIONS',\n);\n\n/**\n * Token used by the declarative `<acp-dialog-actions>` component to register\n * its action buttons with the hosting `AcpDialogContainer`.\n */\nexport const ACP_DIALOG_ACTIONS = new InjectionToken<AcpDialogActionsOutlet>('ACP_DIALOG_ACTIONS');\n\n/**\n * Token used by the declarative `<acp-dialog-titlebar>` component to register\n * its template with the hosting `AcpDialogContainer`.\n */\nexport const ACP_DIALOG_TITLEBAR = new InjectionToken<AcpDialogTitlebarOutlet>(\n  'ACP_DIALOG_TITLEBAR',\n);\n\n/**\n * Registers application-wide dialog defaults, e.g.:\n * `provideAcpDialogDefaults({ fullScreenOnMobile: true })`.\n */\nexport function provideAcpDialogDefaults(defaults: AcpDialogConfig): EnvironmentProviders {\n  return makeEnvironmentProviders([{ provide: ACP_DIALOG_DEFAULT_OPTIONS, useValue: defaults }]);\n}\n","import { NgTemplateOutlet } from '@angular/common';\nimport {\n  AfterViewInit,\n  ChangeDetectionStrategy,\n  Component,\n  computed,\n  inject,\n  Injector,\n  input,\n  isSignal,\n  Signal,\n  signal,\n  TemplateRef,\n  viewChild,\n  ViewEncapsulation,\n} from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { isObservable } from 'rxjs';\nimport { MAT_DIALOG_DATA, MatDialogModule, MatDialogRef } from '@angular/material/dialog';\n\nimport { AcpButton } from '../button';\nimport { ACP_DIALOG_ACTIONS } from './dialog.tokens';\nimport {\n  AcpDialogAction,\n  AcpDialogActionClick,\n  AcpDialogActionState,\n  AcpDialogContainerData,\n} from './dialog.interfaces';\n\n/**\n * Dialog actions container. Use it declaratively inside a dialog content\n * template, or let `AcpDialogContainer` instantiate it from `config.actions`.\n *\n * @example\n * ```html\n * <acp-dialog-actions align=\"end\">\n *   <acp-button text=\"Cancel\" appearance=\"text\" (clicked)=\"ref.close()\" />\n *   <acp-button text=\"Save\" color=\"success\" (clicked)=\"ref.close(user)\" />\n * </acp-dialog-actions>\n * ```\n */\n@Component({\n  selector: 'acp-dialog-actions',\n  standalone: true,\n  imports: [MatDialogModule, AcpButton, NgTemplateOutlet],\n  template: `\n    <ng-template #actionsTemplate><ng-content /></ng-template>\n\n    @if (renderInline()) {\n      <mat-dialog-actions\n        class=\"acp-dialog-actions\"\n        [class.acp-dialog-actions-start]=\"align() === 'start'\"\n        [class.acp-dialog-actions-center]=\"align() === 'center'\"\n        [class.acp-dialog-actions-end]=\"align() === 'end'\"\n        [align]=\"align()\"\n        [attr.aria-label]=\"ariaLabel()\"\n      >\n        @for (action of actions() ?? []; track action.key ?? action.text ?? $index) {\n          <acp-button\n            [text]=\"action.text\"\n            [color]=\"action.color ?? 'primary'\"\n            [appearance]=\"action.appearance ?? 'filled'\"\n            [variant]=\"action.variant ?? 'basic'\"\n            [icon]=\"action.icon\"\n            [suffixIcon]=\"action.suffixIcon\"\n            [disabled]=\"resolveActionState(action.disabled)\"\n            [loading]=\"resolveActionState(action.loading)\"\n            [ariaLabel]=\"action.ariaLabel\"\n            [size]=\"action.size ?? 'large'\"\n            [block]=\"action.block ?? false\"\n            [extended]=\"action.extended ?? false\"\n            [type]=\"action.type ?? 'button'\"\n            [form]=\"action.form\"\n            (click)=\"handleActionClick($event, action)\"\n          />\n        }\n        <ng-container [ngTemplateOutlet]=\"actionsTemplate\" />\n      </mat-dialog-actions>\n    }\n  `,\n  host: {\n    role: 'group',\n    '[style.display]': 'hostDisplay()',\n  },\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  encapsulation: ViewEncapsulation.None,\n})\nexport class AcpDialogActions implements AfterViewInit {\n  private readonly outlet = inject(ACP_DIALOG_ACTIONS, { optional: true });\n  private readonly matDialogRef = inject(MatDialogRef, { optional: true });\n  private readonly containerData = inject<AcpDialogContainerData>(MAT_DIALOG_DATA, {\n    optional: true,\n  });\n  private readonly injector = inject(Injector);\n  private readonly actionsTemplateRef: Signal<TemplateRef<unknown>> = viewChild.required(\n    'actionsTemplate',\n    { read: TemplateRef },\n  );\n  private readonly actionStateSignals = new WeakMap<object, Signal<boolean>>();\n\n  protected readonly renderInline = signal(this.outlet == null);\n  protected readonly hostDisplay = signal(this.outlet == null ? 'contents' : 'none');\n\n  /** Alignment of the action buttons. @default 'end' */\n  align = input<'start' | 'center' | 'end'>('end');\n\n  /** Configured footer actions. When omitted, the component works as a declarative slot. */\n  actions = input<AcpDialogAction[]>();\n\n  /** Optional title used to label the actions footer. */\n  dialogTitle = input<string>();\n\n  /** Accessible label for the actions footer. Falls back to a generated one. */\n  ariaLabel = computed(() => {\n    const title = this.dialogTitle();\n    return title ? `Actions for ${title}` : 'Dialog actions';\n  });\n\n  ngAfterViewInit(): void {\n    if (this.outlet) {\n      this.outlet.register(this.actionsTemplateRef(), this.align());\n      this.hostDisplay.set('none');\n    }\n  }\n\n  /** Resolves an action's boolean state (boolean, signal or observable). */\n  protected resolveActionState(state: AcpDialogActionState | undefined): boolean {\n    if (state === undefined) {\n      return false;\n    }\n    if (typeof state === 'boolean') {\n      return state;\n    }\n    if (isSignal(state)) {\n      return state();\n    }\n    if (isObservable(state)) {\n      let sig = this.actionStateSignals.get(state);\n      if (!sig) {\n        sig = toSignal(state, { injector: this.injector, initialValue: false });\n        this.actionStateSignals.set(state, sig);\n      }\n      return sig();\n    }\n    return false;\n  }\n\n  /** Broadcasts the click and closes the dialog unless the event is prevented. */\n  protected handleActionClick(event: MouseEvent, action: AcpDialogAction): void {\n    const click: AcpDialogActionClick = { action, event };\n    this.containerData?.actionClicks?.next(click);\n  }\n}\n","import { NgTemplateOutlet } from '@angular/common';\nimport {\n  AfterViewInit,\n  ChangeDetectionStrategy,\n  Component,\n  computed,\n  ElementRef,\n  inject,\n  input,\n  output,\n  Signal,\n  signal,\n  TemplateRef,\n  viewChild,\n  ViewEncapsulation,\n} from '@angular/core';\nimport { MatDialogModule, MatDialogRef } from '@angular/material/dialog';\n\nimport { CdkDrag, CdkDragHandle } from '@angular/cdk/drag-drop';\nimport { MatIconModule } from '@angular/material/icon';\n\nimport { AcpButton } from '../button';\nimport { ACP_DIALOG_TITLEBAR } from './dialog.tokens';\nimport { AcpButtonColor } from './dialog.interfaces';\n\n/**\n * Dialog title bar. Use it inside a dialog content template for a declarative\n * header, or let `AcpDialogContainer` instantiate it from `config.header`.\n *\n * @example\n * ```html\n * <acp-dialog-titlebar title=\"Edit user\" icon=\"person\">\n *   <acp-dialog-actions align=\"end\">\n *     <acp-button text=\"Cancel\" appearance=\"text\" (clicked)=\"ref.close()\" />\n *     <acp-button text=\"Save\" color=\"success\" (clicked)=\"ref.close(user)\" />\n *   </acp-dialog-actions>\n * </acp-dialog-titlebar>\n * ```\n */\n@Component({\n  selector: 'acp-dialog-titlebar',\n  standalone: true,\n  imports: [CdkDrag, CdkDragHandle, MatDialogModule, MatIconModule, AcpButton, NgTemplateOutlet],\n  template: `\n    <ng-template #titlebarTemplate>\n      <div\n        [class]=\"headerClasses()\"\n        cdkDrag\n        cdkDragRootElement=\".cdk-overlay-pane\"\n        [cdkDragDisabled]=\"draggable() === false\"\n        cdkDragHandle\n        (mousedown)=\"bringToFront()\"\n      >\n        <h6 mat-dialog-title class=\"acp-dialog-title\">\n          @if (icon()) {\n            <mat-icon class=\"acp-dialog-title-icon\" aria-hidden=\"true\">{{ icon() }}</mat-icon>\n          }\n          <span>\n            @if (title()) {\n              {{ title() }}\n            } @else {\n              <ng-content />\n            }\n          </span>\n          @if (closable() !== false) {\n            <acp-button\n              class=\"acp-dialog-close-btn\"\n              variant=\"icon\"\n              icon=\"close\"\n              [color]=\"resolvedCloseColor()\"\n              [ariaLabel]=\"closeLabel() ?? 'Close dialog'\"\n              (clicked)=\"close()\"\n            />\n          }\n        </h6>\n        @if (subtitle()) {\n          <p class=\"acp-dialog-subtitle\">{{ subtitle() }}</p>\n        }\n      </div>\n    </ng-template>\n\n    @if (renderInline()) {\n      <ng-container [ngTemplateOutlet]=\"titlebarTemplate\" />\n    }\n  `,\n  host: {\n    class: 'acp-dialog-titlebar',\n    '[style.display]': 'hostDisplay()',\n  },\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  encapsulation: ViewEncapsulation.None,\n})\nexport class AcpDialogTitlebar implements AfterViewInit {\n  private readonly elementRef = inject(ElementRef);\n  private readonly matDialogRef = inject(MatDialogRef, { optional: true });\n  private readonly outlet = inject(ACP_DIALOG_TITLEBAR, { optional: true });\n  private readonly titlebarTemplateRef: Signal<TemplateRef<unknown>> = viewChild.required(\n    'titlebarTemplate',\n    { read: TemplateRef },\n  );\n\n  protected readonly renderInline = signal(this.outlet == null);\n  protected readonly hostDisplay = signal(this.outlet == null ? 'contents' : 'none');\n\n  /** CSS classes applied to the header element. */\n  protected readonly headerClasses = computed(() => {\n    const classes = ['acp-dialog-header'];\n    if (this.color()) {\n      classes.push(`acp-dialog-header--${this.color()}`);\n    }\n    if (this.colorClass()) {\n      classes.push(this.colorClass()!);\n    }\n    return classes.join(' ');\n  });\n\n  /** Close-button color resolved from `closeColor` or the header background. */\n  protected readonly resolvedCloseColor = computed(() => {\n    const requested = this.closeColor();\n    if (requested) {\n      return requested;\n    }\n    const darkBackgrounds = new Set([\n      'primary',\n      'secondary',\n      'accent',\n      'success',\n      'info',\n      'error',\n      'danger',\n      'dark',\n    ]);\n    return darkBackgrounds.has(this.color() ?? '') ? 'light' : 'dark';\n  });\n\n  /** Title text shown in the header. */\n  title = input<string>();\n\n  /** Optional subtitle shown below the title. */\n  subtitle = input<string>();\n\n  /** Optional Material icon name displayed before the title. */\n  icon = input<string>();\n\n  /** Whether the close button is shown. @default true */\n  closable = input<boolean>(true);\n\n  /** Accessible label for the close button. @default 'Close dialog' */\n  closeLabel = input<string>('Close dialog');\n\n  /** Whether the dialog can be dragged by its header. @default true */\n  draggable = input<boolean>(true);\n\n  /** Predefined header color theme. */\n  color = input<AcpButtonColor>();\n\n  /** Additional CSS class names to apply to the header. */\n  colorClass = input<string>();\n\n  /** Explicit close icon color. If omitted, it is chosen from the header `color`. */\n  closeColor = input<'dark' | 'light'>();\n\n  /** Emitted when the close button is clicked and no `MatDialogRef` is available. */\n  closed = output<void>();\n\n  close(): void {\n    if (this.matDialogRef) {\n      this.matDialogRef.close();\n    } else {\n      this.closed.emit();\n    }\n  }\n\n  bringToFront(): void {\n    const pane = this.elementRef.nativeElement.closest('.cdk-overlay-pane') as HTMLElement | null;\n    if (pane) {\n      const current = parseInt(pane.style.zIndex || '1000', 10);\n      const next = Math.max(1000, isNaN(current) ? 1000 : current + 1);\n      pane.style.zIndex = next.toString();\n    }\n  }\n\n  ngAfterViewInit(): void {\n    if (this.outlet) {\n      this.outlet.register(this.titlebarTemplateRef(), this.title());\n      this.hostDisplay.set('none');\n    }\n  }\n}\n","import {\n  AfterViewInit,\n  ChangeDetectionStrategy,\n  Component,\n  computed,\n  effect,\n  EmbeddedViewRef,\n  inject,\n  Injector,\n  Signal,\n  signal,\n  TemplateRef,\n  viewChild,\n  ViewContainerRef,\n  ViewEncapsulation,\n} from '@angular/core';\n\nimport { MAT_DIALOG_DATA, MatDialogModule, MatDialogRef } from '@angular/material/dialog';\n\nimport { AcpDialogRef } from './dialog-ref';\nimport { AcpDialogActions } from './acp-dialog-actions';\nimport { AcpDialogTitlebar } from './acp-dialog-titlebar';\nimport { ACP_DIALOG_ACTIONS, ACP_DIALOG_DATA, ACP_DIALOG_TITLEBAR } from './dialog.tokens';\nimport {\n  AcpDialogActionsOutlet,\n  AcpDialogContainerData,\n  AcpDialogHeaderConfig,\n  AcpDialogTitlebarOutlet,\n} from './dialog.interfaces';\n\n/**\n * Shell that hosts any content inside an `AcpDialog`. Renders the optional\n * branded header (draggable title bar with icon, title and close button) and\n * optional footer actions.\n *\n * Content can be a component class, a `TemplateRef`, or a plain string. It is\n * created with a child `Injector` that provides `ACP_DIALOG_DATA` (the caller's\n * `config.data`) and `AcpDialogRef` (a typed handle to close the dialog).\n *\n * Opened exclusively through `AcpDialogService`; not meant to be used in templates.\n */\n@Component({\n  selector: 'acp-dialog-container',\n  imports: [MatDialogModule, AcpDialogTitlebar, AcpDialogActions],\n  templateUrl: './acp-dialog-container.html',\n  styleUrl: './acp-dialog-container.scss',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  encapsulation: ViewEncapsulation.None,\n})\nexport class AcpDialogContainer implements AfterViewInit {\n  private readonly parentInjector = inject(Injector);\n  private readonly containerData = inject<AcpDialogContainerData>(MAT_DIALOG_DATA);\n  private readonly actionClicks = this.containerData.actionClicks;\n  private readonly dialogRef = new AcpDialogRef(inject(MatDialogRef), this.actionClicks);\n\n  /** Outlet where the configured content is rendered. */\n  private readonly contentHost: Signal<ViewContainerRef> = viewChild.required('contentHost', {\n    read: ViewContainerRef,\n  });\n\n  /** Outlet where declarative `acp-dialog-actions` content is rendered. */\n  private readonly actionOutlet = viewChild('actionOutlet', { read: ViewContainerRef });\n\n  /** Outlet where declarative `acp-dialog-titlebar` content is rendered. */\n  private readonly titlebarOutletRef = viewChild('titlebarOutlet', { read: ViewContainerRef });\n\n  /** Template used to render a plain string content. */\n  private readonly stringTemplate: Signal<TemplateRef<{ content: string }>> = viewChild.required(\n    'stringContent',\n    { read: TemplateRef },\n  );\n\n  /** Whether the content has registered a declarative `acp-dialog-actions` template. */\n  protected readonly hasDeclarativeActions = signal(false);\n\n  /** Whether the content has registered a declarative `acp-dialog-titlebar` template. */\n  protected readonly hasDeclarativeTitlebar = signal(false);\n\n  /** Pending declarative actions template, captured before the outlet is ready. */\n  private readonly pendingActionTemplate = signal<TemplateRef<unknown> | undefined>(undefined);\n\n  /** Pending declarative titlebar template, captured before the outlet is ready. */\n  private readonly pendingTitlebarTemplate = signal<TemplateRef<unknown> | undefined>(undefined);\n\n  /** Alignment requested by a declarative actions template. */\n  protected readonly declarativeActionsAlign = signal<'start' | 'center' | 'end' | undefined>(\n    undefined,\n  );\n\n  /** Title requested by a declarative titlebar template. */\n  protected readonly declarativeTitle = signal<string | undefined>(undefined);\n\n  /** Outlet object provided to content so `acp-dialog-actions` can register itself. */\n  private readonly actionsOutlet: AcpDialogActionsOutlet = {\n    register: (template, align) => {\n      this.pendingActionTemplate.set(template);\n      this.hasDeclarativeActions.set(true);\n      this.declarativeActionsAlign.set(align);\n    },\n    hasActions: this.hasDeclarativeActions.asReadonly(),\n  };\n\n  /** Outlet object provided to content so `acp-dialog-titlebar` can register itself. */\n  private readonly titlebarOutlet: AcpDialogTitlebarOutlet = {\n    register: (template, title) => {\n      this.pendingTitlebarTemplate.set(template);\n      this.hasDeclarativeTitlebar.set(true);\n      this.declarativeTitle.set(title);\n    },\n    hasTitlebar: this.hasDeclarativeTitlebar.asReadonly(),\n  };\n\n  /** Exposed header configuration, including the `title` shortcut. */\n  protected readonly headerConfig = computed<AcpDialogHeaderConfig | undefined>(() => {\n    if (this.config.header) {\n      return this.config.header;\n    }\n    if (this.config.title) {\n      return { title: this.config.title };\n    }\n    return undefined;\n  });\n\n  /** Title used for the actions footer label. */\n  protected readonly resolvedDialogTitle = computed(\n    () => this.headerConfig()?.title ?? this.declarativeTitle(),\n  );\n\n  /** Alignment used for the actions footer. */\n  protected readonly resolvedActionsAlign = computed(\n    () => this.declarativeActionsAlign() ?? this.config.actionsAlign ?? 'end',\n  );\n\n  /** Whether the current content is a plain string. */\n  protected readonly isStringContent = signal(false);\n\n  get config() {\n    return this.containerData.config;\n  }\n\n  get content() {\n    return this.containerData.content;\n  }\n\n  constructor() {\n    effect(onCleanup => {\n      const outlet = this.actionOutlet();\n      const template = this.pendingActionTemplate();\n      let viewRef: EmbeddedViewRef<unknown> | undefined;\n      if (outlet && template) {\n        outlet.clear();\n        viewRef = outlet.createEmbeddedView(template);\n      }\n      onCleanup(() => viewRef?.destroy());\n    });\n    effect(onCleanup => {\n      const outlet = this.titlebarOutletRef();\n      const template = this.pendingTitlebarTemplate();\n      let viewRef: EmbeddedViewRef<unknown> | undefined;\n      if (outlet && template) {\n        outlet.clear();\n        viewRef = outlet.createEmbeddedView(template);\n      }\n      onCleanup(() => viewRef?.destroy());\n    });\n  }\n\n  ngAfterViewInit(): void {\n    const content = this.content;\n    const injector = this.createContentInjector();\n\n    this.contentHost().clear();\n    this.isStringContent.set(false);\n\n    if (typeof content === 'string') {\n      this.isStringContent.set(true);\n      this.contentHost().createEmbeddedView(this.stringTemplate(), { content });\n    } else if (content instanceof TemplateRef) {\n      this.contentHost().createEmbeddedView(\n        content,\n        {\n          $implicit: this.config.data,\n          data: this.config.data,\n          ref: this.dialogRef,\n        },\n        { injector },\n      );\n    } else {\n      this.contentHost().createComponent(content, { injector, bindings: this.config.bindings });\n    }\n  }\n\n  private createContentInjector(): Injector {\n    return Injector.create({\n      parent: this.parentInjector,\n      providers: [\n        { provide: ACP_DIALOG_DATA, useValue: this.config.data },\n        { provide: AcpDialogRef, useValue: this.dialogRef },\n        { provide: ACP_DIALOG_ACTIONS, useValue: this.actionsOutlet },\n        { provide: ACP_DIALOG_TITLEBAR, useValue: this.titlebarOutlet },\n      ],\n    });\n  }\n}\n","@if (headerConfig(); as header) { @if (config.showHeader !== false && !hasDeclarativeTitlebar()) {\n<acp-dialog-titlebar\n  [title]=\"header.title\"\n  [subtitle]=\"header.subtitle\"\n  [icon]=\"header.icon\"\n  [closable]=\"header.closable ?? true\"\n  [closeLabel]=\"header.closeLabel ?? 'Close dialog'\"\n  [draggable]=\"header.draggable ?? true\"\n  [color]=\"header.color\"\n  [colorClass]=\"header.colorClass\"\n  [closeColor]=\"header.closeColor\"\n/>\n} }\n\n<ng-template #titlebarOutlet />\n\n<mat-dialog-content class=\"acp-dialog-content\">\n  <ng-template #contentHost />\n  <ng-template #stringContent let-content>\n    <div class=\"acp-dialog-message\">{{ content }}</div>\n  </ng-template>\n</mat-dialog-content>\n\n@if ((config.actions?.length && config.showActions !== false) || hasDeclarativeActions()) {\n<acp-dialog-actions\n  [align]=\"resolvedActionsAlign()\"\n  [actions]=\"hasDeclarativeActions() ? undefined : config.actions\"\n  [dialogTitle]=\"resolvedDialogTitle()\"\n>\n  <ng-template #actionOutlet />\n</acp-dialog-actions>\n}\n","import { inject, Injectable, TemplateRef, Type } from '@angular/core';\nimport { MatDialog, MatDialogConfig, MatDialogRef } from '@angular/material/dialog';\nimport { Overlay, ScrollStrategy } from '@angular/cdk/overlay';\nimport { BreakpointObserver, Breakpoints } from '@angular/cdk/layout';\nimport { Observable, Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\nimport { AcpDialogContainer } from './acp-dialog-container';\nimport { AcpDialogRef } from './dialog-ref';\nimport { ACP_DIALOG_DEFAULT_OPTIONS } from './dialog.tokens';\nimport {\n  AcpDialogActionClick,\n  AcpDialogComponentLoader,\n  AcpDialogConfig,\n  AcpDialogContainerData,\n  AcpDialogContentInput,\n  AcpDialogResolvedContent,\n  AcpDialogSize,\n} from './dialog.interfaces';\n\nconst SIZES: Record<AcpDialogSize, string> = {\n  xs: '320px',\n  sm: '450px',\n  md: '600px',\n  lg: '800px',\n  xl: '1000px',\n  xxl: '1280px',\n  full: '100vw',\n};\n\n/**\n * Reusable dialog service — a branded alternative to `MatDialog`. Every dialog\n * renders inside `AcpDialogContainer`, so content always works the same way:\n *\n * - read data with `inject(ACP_DIALOG_DATA)`,\n * - close the dialog with `inject(AcpDialogRef).close(result)`.\n *\n * Usage:\n * ```ts\n * private dialogs = inject(AcpDialogService);\n *\n * this.dialogs.open(UserForm, {\n *   title: 'Edit user',\n *   actions: [\n *     { text: 'Cancel' },\n *     { text: 'Save', color: 'success', result: user },\n *   ],\n *   size: 'lg',\n *   data: { userId: 5 },\n * }).afterClosed().subscribe(saved => {\n *   // handle result\n * });\n *\n * // or with a single config object:\n * this.dialogs.open({\n *   content: UserForm,\n *   title: 'Edit user',\n *   actions: [{ text: 'Save', color: 'success' }],\n *   data: { userId: 5 },\n * }).afterClosed().subscribe(saved => {\n *   // handle result\n * });\n * ```\n */\n@Injectable({\n  providedIn: 'root',\n})\nexport class AcpDialogService {\n  private readonly dialog = inject(MatDialog);\n  private readonly overlay = inject(Overlay);\n  private readonly breakpointObserver = inject(BreakpointObserver);\n  private readonly defaults = inject<AcpDialogConfig>(ACP_DIALOG_DEFAULT_OPTIONS, {\n    optional: true,\n  });\n\n  /** Stream that emits when all open dialogs have finished closing. */\n  get afterAllClosed(): Observable<void> {\n    return this.dialog.afterAllClosed;\n  }\n\n  /** Stream that emits when a dialog has been opened. */\n  get afterOpened(): Observable<MatDialogRef<unknown>> {\n    return this.dialog.afterOpened;\n  }\n\n  /** Keeps track of the currently-open dialogs. */\n  get openDialogs(): MatDialogRef<unknown>[] {\n    return this.dialog.openDialogs;\n  }\n\n  /**\n   * Opens a dialog with a component class.\n   * @param component The content component to render.\n   * @param config Dialog configuration (merged over `provideAcpDialogDefaults`).\n   * @returns An {@link AcpDialogRef}; subscribe to `ref.afterClosed()` for the result.\n   */\n  open<T, D = unknown, R = unknown>(\n    component: Type<T>,\n    config?: AcpDialogConfig<D>,\n  ): AcpDialogRef<R>;\n  /**\n   * Opens a dialog with a `TemplateRef`.\n   * @param template The inline template to render.\n   * @param config Dialog configuration (merged over `provideAcpDialogDefaults`).\n   * @returns An {@link AcpDialogRef}; subscribe to `ref.afterClosed()` for the result.\n   */\n  open<D = unknown, R = unknown>(\n    template: TemplateRef<unknown>,\n    config?: AcpDialogConfig<D>,\n  ): AcpDialogRef<R>;\n  /**\n   * Opens a dialog from a single config object.\n   * @param config Dialog configuration that includes the `content` to render.\n   * @returns An {@link AcpDialogRef}; subscribe to `ref.afterClosed()` for the result.\n   */\n  open<D = unknown, R = unknown>(\n    config: AcpDialogConfig<D> & { content: AcpDialogContentInput },\n  ): AcpDialogRef<R>;\n  open<D = unknown, R = unknown>(\n    contentOrConfig:\n      | Type<unknown>\n      | TemplateRef<unknown>\n      | (AcpDialogConfig<D> & { content: AcpDialogContentInput }),\n    maybeConfig?: AcpDialogConfig<D>,\n  ): AcpDialogRef<R> {\n    if (contentOrConfig instanceof TemplateRef) {\n      return this.openWithContent<R>(contentOrConfig, this.mergeDefaults(maybeConfig ?? {}));\n    }\n    if (typeof contentOrConfig === 'function' && isComponentClass(contentOrConfig)) {\n      return this.openWithContent<R>(contentOrConfig, this.mergeDefaults(maybeConfig ?? {}));\n    }\n    const { content, ...rest } = contentOrConfig as AcpDialogConfig<D> & {\n      content: AcpDialogContentInput;\n    };\n    return this.openWithContent<R>(content, this.mergeDefaults(rest));\n  }\n\n  /** Closes all currently open dialogs. */\n  closeAll(): void {\n    this.dialog.closeAll();\n  }\n\n  /** Finds an open dialog by its id. */\n  getDialogById(id: string): AcpDialogRef | undefined {\n    const matRef = this.dialog.getDialogById(id);\n    return matRef ? new AcpDialogRef(matRef) : undefined;\n  }\n\n  // --- Internals ---\n\n  private openWithContent<R>(\n    content: AcpDialogContentInput,\n    config: AcpDialogConfig,\n  ): AcpDialogRef<R> {\n    const resolved = this.resolveContent(content, config.data);\n    const actionClicks = new Subject<AcpDialogActionClick<R>>();\n\n    if (resolved instanceof Promise) {\n      return new AcpDialogRef<R>(\n        resolved.then(c => this.createMatRef(c, config, actionClicks)),\n        actionClicks,\n      );\n    }\n\n    return new AcpDialogRef<R>(this.createMatRef(resolved, config, actionClicks), actionClicks);\n  }\n\n  private createMatRef<R>(\n    content: AcpDialogResolvedContent,\n    config: AcpDialogConfig,\n    actionClicks: Subject<AcpDialogActionClick<R>>,\n  ): MatDialogRef<unknown, R> {\n    const matRef = this.dialog.open(\n      AcpDialogContainer,\n      this.buildMatConfig(config, { content, config, actionClicks } as AcpDialogContainerData),\n    );\n\n    this.wireCloseGestures(matRef, config);\n\n    return matRef as MatDialogRef<unknown, R>;\n  }\n\n  private resolveContent(\n    content: AcpDialogContentInput,\n    data?: unknown,\n    depth = 0,\n  ): AcpDialogResolvedContent | Promise<AcpDialogResolvedContent> {\n    if (isTemplateRef(content)) {\n      return content;\n    }\n\n    if (typeof content === 'string') {\n      return content;\n    }\n\n    if (isComponentClass(content)) {\n      return content;\n    }\n\n    if (isDialogComponentLoader(content)) {\n      return content.loadComponent().then(c => this.resolveContent(c, data, depth));\n    }\n\n    if (typeof content === 'function') {\n      if (depth > 5) {\n        throw new Error('AcpDialog content factory nested too deeply');\n      }\n      const result = content(data);\n      if (result && typeof (result as Promise<unknown>).then === 'function') {\n        return (result as Promise<AcpDialogContentInput>).then(c =>\n          this.resolveContent(c, data, depth + 1),\n        );\n      }\n      return this.resolveContent(result as AcpDialogContentInput, data, depth + 1);\n    }\n\n    throw new Error(`Unsupported AcpDialog content: ${String(content)}`);\n  }\n\n  private mergeDefaults(config: AcpDialogConfig): AcpDialogConfig {\n    const defaults = this.defaults as AcpDialogConfig | null;\n    const { header, closeOn, ...rest } = config;\n    return {\n      ...defaults,\n      ...rest,\n      header: header ? { ...defaults?.header, ...header } : defaults?.header,\n      closeOn: closeOn ? { ...defaults?.closeOn, ...closeOn } : defaults?.closeOn,\n    };\n  }\n\n  private buildMatConfig(\n    config: AcpDialogConfig,\n    data: AcpDialogContainerData,\n  ): MatDialogConfig<AcpDialogContainerData> {\n    const matConfig = new MatDialogConfig<AcpDialogContainerData>();\n    matConfig.data = data;\n\n    const fullScreen =\n      config.size === 'full' ||\n      (config.fullScreenOnMobile === true &&\n        this.breakpointObserver.isMatched([\n          Breakpoints.HandsetPortrait,\n          Breakpoints.HandsetLandscape,\n        ]));\n\n    if (fullScreen) {\n      matConfig.width = '100vw';\n      matConfig.height = '100vh';\n      matConfig.maxWidth = '100vw';\n      matConfig.maxHeight = '100vh';\n    } else {\n      matConfig.width = this.toMatSize(config.width) ?? SIZES[config.size ?? 'md'];\n      matConfig.height = this.toMatSize(config.height);\n      matConfig.minWidth = this.toMatSize(config.minWidth);\n      matConfig.minHeight = this.toMatSize(config.minHeight);\n      matConfig.maxWidth = this.toMatSize(config.maxWidth) ?? '95vw';\n      matConfig.maxHeight = this.toMatSize(config.maxHeight);\n      matConfig.position = config.position;\n    }\n\n    matConfig.panelClass = [\n      'acp-dialog',\n      `acp-dialog-${config.size ?? 'md'}`,\n      ...(fullScreen ? ['acp-dialog-full-screen'] : []),\n      ...(Array.isArray(config.panelClass)\n        ? config.panelClass\n        : config.panelClass\n          ? [config.panelClass]\n          : []),\n    ];\n\n    matConfig.hasBackdrop = config.hasBackdrop ?? true;\n    matConfig.backdropClass = config.backdropClass;\n\n    const closeOn = this.normalizeCloseOn(config);\n    matConfig.disableClose = closeOn.backdropClick === false || closeOn.escapeKey === false;\n\n    matConfig.id = config.id;\n    matConfig.injector = config.injector;\n    matConfig.viewContainerRef = config.viewContainerRef;\n    matConfig.closeOnNavigation = config.closeOnNavigation;\n    matConfig.closePredicate = config.closePredicate as MatDialogConfig['closePredicate'];\n    matConfig.direction = config.direction;\n    matConfig.delayFocusTrap = config.delayFocusTrap;\n    matConfig.ariaModal = config.ariaModal;\n\n    matConfig.autoFocus = config.autoFocus ?? 'first-tabbable';\n    matConfig.restoreFocus = config.restoreFocus ?? true;\n    matConfig.scrollStrategy = this.resolveScrollStrategy(config.scrollStrategy);\n    matConfig.enterAnimationDuration = config.enterAnimationDuration ?? '300ms';\n    matConfig.exitAnimationDuration = config.exitAnimationDuration ?? '200ms';\n    matConfig.ariaLabel = config.ariaLabel;\n    matConfig.ariaLabelledBy = config.ariaLabelledBy;\n    matConfig.ariaDescribedBy = config.ariaDescribedBy;\n    matConfig.role = config.role ?? 'dialog';\n\n    return matConfig;\n  }\n\n  private normalizeCloseOn(config: AcpDialogConfig): {\n    backdropClick: boolean;\n    escapeKey: boolean;\n  } {\n    if (config.disableClose === true) {\n      return { backdropClick: false, escapeKey: false };\n    }\n    if (config.disableClose === false) {\n      return { backdropClick: true, escapeKey: true };\n    }\n    return {\n      backdropClick: config.closeOn?.backdropClick !== false,\n      escapeKey: config.closeOn?.escapeKey !== false,\n    };\n  }\n\n  private toMatSize(value: string | number | undefined): string | undefined {\n    return typeof value === 'number' ? `${value}px` : value;\n  }\n\n  private resolveScrollStrategy(\n    strategy: ScrollStrategy | 'block' | 'close' | 'noop' | undefined,\n  ): ScrollStrategy {\n    if (typeof strategy !== 'string') {\n      return strategy ?? this.overlay.scrollStrategies.block();\n    }\n\n    const strategies = this.overlay.scrollStrategies;\n    switch (strategy) {\n      case 'block':\n        return strategies.block();\n      case 'close':\n        return strategies.close();\n      case 'noop':\n        return strategies.noop();\n      default:\n        return strategies.block();\n    }\n  }\n\n  private wireCloseGestures(matRef: MatDialogRef<unknown, unknown>, config: AcpDialogConfig): void {\n    const closeOn = this.normalizeCloseOn(config);\n    const backdropClick = closeOn.backdropClick;\n    const escapeKey = closeOn.escapeKey;\n\n    if (backdropClick === escapeKey) {\n      return;\n    }\n\n    const closed$ = matRef.afterClosed();\n\n    if (escapeKey) {\n      matRef\n        .keydownEvents()\n        .pipe(takeUntil(closed$))\n        .subscribe(event => {\n          if (event.key === 'Escape') {\n            matRef.close();\n          }\n        });\n    } else {\n      matRef\n        .backdropClick()\n        .pipe(takeUntil(closed$))\n        .subscribe(() => matRef.close());\n    }\n  }\n}\n\nfunction isDialogComponentLoader(value: unknown): value is AcpDialogComponentLoader {\n  return (\n    typeof value === 'object' &&\n    value !== null &&\n    'loadComponent' in value &&\n    typeof (value as { loadComponent: unknown }).loadComponent === 'function'\n  );\n}\n\nfunction isTemplateRef(value: unknown): value is TemplateRef<unknown> {\n  return value instanceof TemplateRef;\n}\n\nfunction isComponentClass(value: unknown): value is Type<unknown> {\n  if (typeof value !== 'function') {\n    return false;\n  }\n  const fn = value as unknown as Record<string, unknown>;\n  return (\n    !!fn['ɵcmp'] || !!fn['ɵfac'] || /^\\s*class\\s/.test(Function.prototype.toString.call(value))\n  );\n}\n","import { Injectable } from '@angular/core';\nimport { MatDialogRef } from '@angular/material/dialog';\nimport { OverlayRef } from '@angular/cdk/overlay';\n\nexport type DialogType = 'normal' | 'alert';\n\n/**\n * Minimal structural type for the parts of MatDialogRef used here.\n * `MatDialogRef` does not expose its `OverlayRef` publicly, so it is read\n * through the internal `_overlayRef` field. Guarded everywhere it is used.\n */\ninterface DialogRefWithOverlay {\n  _overlayRef?: OverlayRef;\n}\n\n/**\n * Centralized service that manages z-index stacking for all dialogs.\n * Ensures dialogs always appear in the correct order.\n * Alert dialogs always take priority over regular dialogs.\n */\n@Injectable({\n  providedIn: 'root',\n})\nexport class DialogZIndexService {\n  // Z-index ranges per dialog type\n  private static readonly Z_INDEX_RANGES = {\n    normal: { base: 1000, current: 1000 }, // Regular dialogs: 1000-1999\n    alert: { base: 2000, current: 2000 }, // Alert dialogs: 2000-2999 (always on top)\n  };\n\n  private static readonly Z_INDEX_INCREMENT = 10;\n\n  /**\n   * Gets the next available z-index for a specific dialog type.\n   * @param type Dialog type (normal, alert)\n   * @returns The next z-index to use\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   * Gets the highest z-index currently in use for a specific type.\n   * @param type Dialog type\n   * @returns The highest z-index currently in use for that type\n   */\n  getCurrentZIndex(type: DialogType = 'normal'): number {\n    return DialogZIndexService.Z_INDEX_RANGES[type].current;\n  }\n\n  /**\n   * Gets the highest z-index across all dialog types.\n   * @returns The highest z-index of all dialogs\n   */\n  getHighestZIndex(): number {\n    return Math.max(\n      ...Object.values(DialogZIndexService.Z_INDEX_RANGES).map(range => range.current),\n    );\n  }\n\n  /**\n   * Resets the z-index counter (useful for testing).\n   * @param type Specific type to reset, or undefined to reset all\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      Object.values(DialogZIndexService.Z_INDEX_RANGES).forEach(range => {\n        range.current = range.base;\n      });\n    }\n  }\n\n  /**\n   * Applies a z-index to a specific dialog.\n   * @param dialogRef Dialog reference\n   * @param type Dialog type (determines the z-index range)\n   * @param zIndex Specific z-index to apply (optional)\n   */\n  applyZIndex(\n    dialogRef: MatDialogRef<unknown>,\n    type: DialogType = 'normal',\n    zIndex?: number,\n  ): void {\n    const targetZIndex = zIndex ?? this.getNextZIndex(type);\n    const overlayRef = this.getOverlayRef(dialogRef);\n    if (!overlayRef) {\n      return;\n    }\n\n    const pane = overlayRef.overlayElement;\n    const backdrop = overlayRef.backdropElement;\n\n    if (pane) {\n      pane.style.zIndex = (targetZIndex + 2).toString();\n      // Data attributes for 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\n  /**\n   * Brings a dialog to the front (used by the drag functionality).\n   * @param element Dialog element to bring to the front\n   * @param type Dialog type\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      // Also update the backdrop if it exists\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   * Forces a dialog to stay above every other dialog.\n   * Useful for critical alerts that must have maximum priority.\n   * @param dialogRef Dialog reference\n   */\n  forceToTop(dialogRef: MatDialogRef<unknown>): void {\n    const highestZIndex = this.getHighestZIndex();\n    const topZIndex = highestZIndex + DialogZIndexService.Z_INDEX_INCREMENT;\n    const overlayRef = this.getOverlayRef(dialogRef);\n    if (!overlayRef) {\n      return;\n    }\n\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\n  private getOverlayRef(dialogRef: MatDialogRef<unknown>): OverlayRef | undefined {\n    return (dialogRef as unknown as DialogRefWithOverlay)._overlayRef;\n  }\n}\n","import {\n  AfterViewInit,\n  ChangeDetectionStrategy,\n  Component,\n  ElementRef,\n  inject,\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 {\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   * 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 to the new component. `setInput` supports both signal\n    // inputs and decorator-based @Input() properties and marks the component dirty;\n    // fall back to a plain property assignment when `data` is not declared as an input.\n    if (this.config.data !== undefined && componentRef.instance) {\n      try {\n        componentRef.setInput('data', this.config.data);\n      } catch {\n        (componentRef.instance as { data?: unknown }).data = this.config.data;\n      }\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]=\"config.closeAriaLabel ?? '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\ntype SelectValue = string | number | null;\n\n@Component({\n  selector: 'acp-dynamic-select',\n  imports: [NgSelectModule, ReactiveFormsModule],\n  templateUrl: './dynamic-select.html',\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<SelectValue>();\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<SelectValue>();\n\n  public selectControl = new FormControl<SelectValue>(null);\n  public filteredOptions: SelectOption[] = [];\n  public loading = false;\n\n  private readonly _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  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  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  private static instanceCounter = 0;\n\n  // Made public for template access\n  public containerId = `acp-tabulator-table-${TabulatorTable.instanceCounter++}`;\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 { Pipe, PipeTransform } from '@angular/core';\nimport { Observable, of, isObservable } from 'rxjs';\n\n@Pipe({ name: 'toObservable' })\nexport class AcpToObservablePipe implements PipeTransform {\n  transform<T>(value: T | Observable<T>): Observable<T> {\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?.[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 ?? dataIndex;\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 readonly 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, $event)\"\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, $event)\"\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 readonly _utils = inject(DataGridUtils);\n  private readonly _differs = inject(KeyValueDiffers);\n  private readonly _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    if (value === undefined) {\n      return '';\n    }\n    const isEmpty = this._utils.isEmpty(value);\n    return isEmpty ? 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, event);\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} 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 readonly _utils = inject(DataGridUtils);\n  private readonly _changeDetectorRef = inject(ChangeDetectorRef);\n  private readonly _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  page = output<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  sortChange = output<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  rowClick = output<any>();\n  /** Event emitted when the user attempts to open a context menu. */\n  rowContextMenu = output<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  expansionChange = output<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  rowSelectedChange = output<any[]>();\n\n  checkboxKeyDown = output<KeyboardEvent>();\n  checkboxKeyUp = output<KeyboardEvent>();\n  checkboxKeyPress = output<KeyboardEvent>();\n\n  rowKeyDown = output<{\n    event: KeyboardEvent;\n    row: Record<string, any>;\n    index: number;\n  }>();\n  rowKeyUp = output<{\n    event: KeyboardEvent;\n    row: Record<string, any>;\n    index: number;\n  }>();\n  rowKeyPress = output<{\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  cellSelectedChange = output<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  columnChange = output<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    if (item.hide !== undefined) {\n      return item.hide;\n    }\n    if (item.show !== undefined) {\n      return !item.show;\n    }\n    return 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    // Reapply sort and paginator after recreating dataSource\n    if (this.pageOnFront && this.paginator) {\n      this.dataSource.paginator = this.paginator;\n    }\n\n    if (this.sortOnFront && this.sort) {\n      this.dataSource.sort = this.sort;\n    }\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    } else {\n      this.dataSource.paginator = null;\n    }\n\n    if (this.sortOnFront) {\n      this.dataSource.sort = this.sort;\n    } else {\n      this.dataSource.sort = null;\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 + Number.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 + Number.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 readonly focusableElements: FocusableElement[] = [];\n\n  /** Signal que mantiene el índice del elemento actualmente enfocado en el array `focusableElements` */\n  private readonly currentFocusIndex = signal(-1);\n\n  /** Subject para notificar la destrucción del servicio y limpiar suscripciones */\n  private readonly 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 { AcpButton } 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    AcpButton,\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(\n    option: IAcpSelectDateOption,\n    input: HTMLInputElement,\n    emitEvent = true,\n  ): 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, emitEvent);\n        return;\n      }\n    }\n    this.updateDateWithSelectedOption(option, input, emitEvent);\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    emitEvent = true,\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, emitEvent);\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    emitEvent = true,\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    if (emitEvent) {\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    }\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, false);\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    emitEvent = true,\n  ): void {\n    // This will update value if option is selected from default list.\n    if (!selectedOption.callBackFunction) {\n      this.updateDateOnOptionSelect(selectedOption, input, emitEvent);\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      emitEvent,\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 (calendar.selectedDates?.end)\n            {\n            <span> - {{ calendar.selectedDates?.end | date: dateFormat }} </span>\n            }\n          </span>\n          }\n          <div class=\"buttons\">\n            <acp-button\n              type=\"button\"\n              appearance=\"filled\"\n              color=\"primary\"\n              size=\"small\"\n              [class.disabled]=\"\n                enableEditableDates\n                  ? editableForm.invalid\n                  : !(calendar.selectedDates?.start && calendar.selectedDates?.end)\n              \"\n              (clicked)=\"\n                enableEditableDates && commitEditableDates(calendar);\n                updateCustomRange(dateInput, calendar.selectedDates)\n              \"\n            >\n              &nbsp;Aplicar&nbsp;\n            </acp-button>\n            <acp-button\n              type=\"button\"\n              appearance=\"text\"\n              color=\"error\"\n              size=\"small\"\n              (clicked)=\"isCustomRange = false\"\n              >Cancelar</acp-button\n            >\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 {\n  ChangeDetectionStrategy,\n  Component,\n  ContentChild,\n  HostBinding,\n  TemplateRef,\n  input,\n  booleanAttribute,\n} from '@angular/core';\nimport { MatCardModule } from '@angular/material/card';\nimport { NgTemplateOutlet, NgClass, NgStyle } from '@angular/common';\nimport {\n  AcpCardAppearance,\n  AcpCardElevation,\n  AcpCardPadding,\n  AcpCardImageRatio,\n  AcpCardPassThroughOptions,\n  AcpCardBackgroundColor,\n} from './card.types';\n\n@Component({\n  selector: 'acp-card',\n  standalone: true,\n  imports: [MatCardModule, NgTemplateOutlet, NgClass, NgStyle],\n  templateUrl: './card.html',\n  styleUrl: './card.scss',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  host: {\n    class: 'acp-card-wrapper',\n    '[class.acp-card--rounded]': 'rounded() === true',\n    '[class.acp-card--rounded-4]': 'rounded() === 4',\n    '[class.acp-card--rounded-8]': 'rounded() === 8',\n    '[class.acp-card--rounded-12]': 'rounded() === 12',\n    '[class.acp-card--rounded-16]': 'rounded() === 16',\n    '[class.acp-card--rounded-20]': 'rounded() === 20',\n    '[class.acp-card--rounded-24]': 'rounded() === 24',\n    '[class.acp-card--hover]': 'hover()',\n    '[class.acp-card--clickable]': 'clickable()',\n    '[class.acp-card--disabled]': 'disabled()',\n    '[class.acp-card--padding-small]': 'padding() === \"small\"',\n    '[class.acp-card--padding-medium]': 'padding() === \"medium\"',\n    '[class.acp-card--padding-large]': 'padding() === \"large\"',\n    '[class.acp-card--full-height]': 'fullHeight()',\n    '[class.acp-card--full-width]': 'fullWidth()',\n  },\n})\nexport class AcpCard {\n  // Appearance variant\n  readonly appearance = input<AcpCardAppearance>('default');\n\n  // Elevation level (0-5)\n  readonly elevation = input<AcpCardElevation>(1);\n\n  // Border radius (true for default, or specific pixel value)\n  readonly rounded = input<boolean | number>(true);\n\n  // Hover effect\n  readonly hover = input(false, { transform: booleanAttribute });\n\n  // Clickable card\n  readonly clickable = input(false, { transform: booleanAttribute });\n\n  // Outlined style\n  readonly outlined = input(false, { transform: booleanAttribute });\n\n  // Disabled state\n  readonly disabled = input(false, { transform: booleanAttribute });\n\n  // Padding size\n  readonly padding = input<AcpCardPadding>('medium');\n\n  // Image aspect ratio\n  readonly imageRatio = input<AcpCardImageRatio>('16:9');\n\n  // Full height\n  readonly fullHeight = input(false, { transform: booleanAttribute });\n\n  // Full width\n  readonly fullWidth = input(false, { transform: booleanAttribute });\n\n  // Background color variant\n  readonly backgroundColor = input<AcpCardBackgroundColor | undefined>(undefined);\n\n  // Pass Through options for styling customization\n  readonly passThrough = input<AcpCardPassThroughOptions>({});\n\n  // Slots\n  @ContentChild('header', { read: TemplateRef }) headerTemplate!: TemplateRef<any>;\n  @ContentChild('media', { read: TemplateRef }) mediaTemplate!: TemplateRef<any>;\n  @ContentChild('avatar', { read: TemplateRef }) avatarTemplate!: TemplateRef<any>;\n  @ContentChild('title', { read: TemplateRef }) titleTemplate!: TemplateRef<any>;\n  @ContentChild('subtitle', { read: TemplateRef }) subtitleTemplate!: TemplateRef<any>;\n  @ContentChild('actions', { read: TemplateRef }) actionsTemplate!: TemplateRef<any>;\n  @ContentChild('footer', { read: TemplateRef }) footerTemplate!: TemplateRef<any>;\n\n  @HostBinding('attr.role') get role(): string {\n    return this.clickable() ? 'button' : 'article';\n  }\n\n  @HostBinding('attr.tabindex') get tabindex(): string | null {\n    return this.clickable() && !this.disabled() ? '0' : null;\n  }\n\n  @HostBinding('attr.aria-disabled') get ariaDisabled(): string | null {\n    return this.disabled() ? 'true' : null;\n  }\n}\n","<mat-card\n  class=\"acp-card\"\n  [ngClass]=\"passThrough().root?.class\"\n  [ngStyle]=\"passThrough().root?.style\"\n  [class]=\"backgroundColor() ? 'acp-card--' + backgroundColor() : ''\"\n>\n  @if (headerTemplate) {\n  <mat-card-header [ngClass]=\"passThrough().header?.class\" [ngStyle]=\"passThrough().header?.style\">\n    <ng-template [ngTemplateOutlet]=\"headerTemplate\" />\n  </mat-card-header>\n  } @if (mediaTemplate) {\n  <ng-template [ngTemplateOutlet]=\"mediaTemplate\" />\n  } @if (titleTemplate || subtitleTemplate || avatarTemplate) {\n  <mat-card-header [ngClass]=\"passThrough().header?.class\" [ngStyle]=\"passThrough().header?.style\">\n    @if (avatarTemplate) {\n    <div\n      mat-card-avatar\n      [ngClass]=\"passThrough().avatar?.class\"\n      [ngStyle]=\"passThrough().avatar?.style\"\n    >\n      <ng-template [ngTemplateOutlet]=\"avatarTemplate\" />\n    </div>\n    } @if (titleTemplate) {\n    <mat-card-title [ngClass]=\"passThrough().title?.class\" [ngStyle]=\"passThrough().title?.style\">\n      <ng-template [ngTemplateOutlet]=\"titleTemplate\" />\n    </mat-card-title>\n    } @if (subtitleTemplate) {\n    <mat-card-subtitle\n      [ngClass]=\"passThrough().subtitle?.class\"\n      [ngStyle]=\"passThrough().subtitle?.style\"\n    >\n      <ng-template [ngTemplateOutlet]=\"subtitleTemplate\" />\n    </mat-card-subtitle>\n    }\n  </mat-card-header>\n  }\n\n  <mat-card-content\n    [ngClass]=\"passThrough().content?.class\"\n    [ngStyle]=\"passThrough().content?.style\"\n  >\n    <ng-content />\n  </mat-card-content>\n\n  @if (actionsTemplate) {\n  <mat-card-actions\n    [ngClass]=\"passThrough().actions?.class\"\n    [ngStyle]=\"passThrough().actions?.style\"\n  >\n    <ng-template [ngTemplateOutlet]=\"actionsTemplate\" />\n  </mat-card-actions>\n  } @if (footerTemplate) {\n  <mat-card-footer [ngClass]=\"passThrough().footer?.class\" [ngStyle]=\"passThrough().footer?.style\">\n    <ng-template [ngTemplateOutlet]=\"footerTemplate\" />\n  </mat-card-footer>\n  }\n</mat-card>\n","import { AcpKpiCardTrend, AcpKpiCardTrendConfig } from './kpi-card.types';\n\nexport const KPI_CARD_TREND_CONFIGS: Record<AcpKpiCardTrend, AcpKpiCardTrendConfig> = {\n  up: {\n    icon: 'trending_up',\n    color: 'success',\n    ariaLabel: 'Trending up',\n  },\n  down: {\n    icon: 'trending_down',\n    color: 'error',\n    ariaLabel: 'Trending down',\n  },\n  neutral: {\n    icon: 'trending_flat',\n    color: 'info',\n    ariaLabel: 'Neutral trend',\n  },\n  none: {\n    icon: '',\n    color: 'neutral',\n    ariaLabel: '',\n  },\n};\n\nexport function formatValue(value: number | string, format?: string): string {\n  if (typeof value === 'string') return value;\n\n  if (!format) return value.toString();\n\n  switch (format) {\n    case 'currency':\n      return new Intl.NumberFormat('en-US', {\n        style: 'currency',\n        currency: 'USD',\n        minimumFractionDigits: 0,\n        maximumFractionDigits: 0,\n      }).format(value);\n    case 'percent':\n      return `${value.toFixed(1)}%`;\n    case 'number':\n      return new Intl.NumberFormat('en-US').format(value);\n    case 'decimal':\n      return value.toFixed(2);\n    default:\n      return value.toString();\n  }\n}\n","import {\n  booleanAttribute,\n  ChangeDetectionStrategy,\n  Component,\n  computed,\n  contentChild,\n  input,\n  output,\n  TemplateRef,\n  ViewEncapsulation,\n  signal,\n} from '@angular/core';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { RouterLink } from '@angular/router';\nimport { MatCard, MatCardContent, MatCardHeader } from '@angular/material/card';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { MatProgressBarModule } from '@angular/material/progress-bar';\nimport { MatDividerModule } from '@angular/material/divider';\nimport { MatTooltipModule } from '@angular/material/tooltip';\n\nimport {\n  AcpKpiCardColor,\n  AcpKpiCardSize,\n  AcpKpiCardTrend,\n  AcpKpiCardVariant,\n} from './kpi-card.types';\nimport { KPI_CARD_TREND_CONFIGS } from './kpi-card.utils';\n\n@Component({\n  selector: 'acp-kpi-card',\n  exportAs: 'acpKpiCard',\n  standalone: true,\n  imports: [\n    NgTemplateOutlet,\n    RouterLink,\n    MatCard,\n    MatCardHeader,\n    MatCardContent,\n    MatIconModule,\n    MatButtonModule,\n    MatMenuModule,\n    MatProgressBarModule,\n    MatDividerModule,\n    MatTooltipModule,\n  ],\n  templateUrl: './kpi-card.html',\n  styleUrl: './kpi-card.scss',\n  encapsulation: ViewEncapsulation.None,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  host: {\n    '[class]': 'hostClasses()',\n  },\n})\nexport class AcpKpiCard {\n  // Content\n  title = input<string>();\n  subtitle = input<string>();\n  value = input<string | number>();\n  description = input<string>();\n  footer = input<string>();\n\n  // Styling\n  variant = input<AcpKpiCardVariant>('default');\n  color = input<AcpKpiCardColor>('primary');\n  size = input<AcpKpiCardSize>('md');\n\n  // Icons & Avatar\n  icon = input<string>();\n  svgIcon = input<string>();\n  avatar = input<string>();\n  avatarInitials = input<string>();\n\n  // Trend & Metrics\n  trend = input<AcpKpiCardTrend>('none');\n  percentage = input<number | string>();\n  percentageFormat = input<'number' | 'percent'>('percent');\n\n  // Progress\n  progress = input<number>();\n  progressColor = input<AcpKpiCardColor>('primary');\n\n  // States\n  loading = input(false, { transform: booleanAttribute });\n  disabled = input(false, { transform: booleanAttribute });\n  clickable = input(false, { transform: booleanAttribute });\n  selected = input(false, { transform: booleanAttribute });\n\n  // Navigation\n  routerLink = input<string | any[] | null>(null);\n  href = input<string | null>(null);\n\n  // Aria\n  ariaLabel = input<string>();\n\n  // Tooltip\n  tooltip = input<string>();\n\n  // Outputs\n  clicked = output<void>();\n  actionClicked = output<string>();\n\n  // Internal state for hover\n  isHovered = signal(false);\n\n  // Content children\n  iconTemplate = contentChild('icon', { read: TemplateRef });\n  avatarTemplate = contentChild('avatar', { read: TemplateRef });\n  footerTemplate = contentChild('footer', { read: TemplateRef });\n  actionsTemplate = contentChild('actions', { read: TemplateRef });\n\n  // Computed properties\n  isTrending = computed(() => this.trend() !== 'none');\n\n  trendConfig = computed(() => KPI_CARD_TREND_CONFIGS[this.trend()]);\n\n  // Effective icon shows trend icon if trending, otherwise shows provided icon\n  effectiveIcon = computed<string | undefined>(() => {\n    if (this.isTrending()) return this.trendConfig().icon;\n    return this.icon();\n  });\n\n  // Trend color is only for the trend indicator (icon and percentage)\n  trendColor = computed<AcpKpiCardColor>(() => {\n    if (this.isTrending()) return this.trendConfig().color;\n    return this.color();\n  });\n\n  hasHeader = computed(() => !!(this.title() || this.subtitle() || this.icon() || this.avatar()));\n\n  hasFooter = computed(\n    () => !!(this.footer() || this.footerTemplate() || this.progress() !== undefined),\n  );\n\n  hasActions = computed(() => !!this.actionsTemplate());\n\n  hostClasses = computed(() => {\n    const classes = [\n      'acp-kpi-card',\n      `acp-kpi-card--${this.variant()}`,\n      `acp-kpi-card--${this.color()}`,\n      `acp-kpi-card--${this.size()}`,\n    ];\n\n    if (this.clickable()) classes.push('acp-kpi-card--clickable');\n    if (this.disabled()) classes.push('acp-kpi-card--disabled');\n    if (this.loading()) classes.push('acp-kpi-card--loading');\n    if (this.selected()) classes.push('acp-kpi-card--selected');\n\n    return classes.join(' ');\n  });\n\n  onCardClick(): void {\n    if (!this.disabled() && this.clickable()) {\n      this.clicked.emit();\n    }\n  }\n\n  onActionClick(action: string, event: Event): void {\n    event.stopPropagation();\n    this.actionClicked.emit(action);\n  }\n\n  onMouseEnter(): void {\n    if (this.clickable()) {\n      this.isHovered.set(true);\n    }\n  }\n\n  onMouseLeave(): void {\n    this.isHovered.set(false);\n  }\n}\n","<mat-card\n  class=\"acp-kpi-card__card\"\n  [routerLink]=\"routerLink()\"\n  [attr.aria-label]=\"ariaLabel()\"\n  [matTooltip]=\"tooltip()\"\n  [matTooltipDisabled]=\"!tooltip()\"\n  (click)=\"onCardClick()\"\n  (mouseenter)=\"onMouseEnter()\"\n  (mouseleave)=\"onMouseLeave()\"\n>\n  <!-- Loading Skeleton -->\n  @if (loading()) {\n  <div class=\"acp-kpi-card__skeleton\">\n    <div class=\"acp-kpi-card__skeleton-header\"></div>\n    <div class=\"acp-kpi-card__skeleton-value\"></div>\n    <div class=\"acp-kpi-card__skeleton-text\"></div>\n  </div>\n  } @else {\n  <!-- Header -->\n  @if (hasHeader()) {\n  <mat-card-header class=\"acp-kpi-card__header\">\n    <div class=\"acp-kpi-card__header-content\">\n      <!-- Icon or Avatar -->\n      <div class=\"acp-kpi-card__icon-container\">\n        @if (iconTemplate()) {\n        <ng-container [ngTemplateOutlet]=\"iconTemplate()!\"></ng-container>\n        } @else if (svgIcon()) {\n        <mat-icon class=\"acp-kpi-card__icon\" [svgIcon]=\"svgIcon()!\" aria-hidden=\"true\"></mat-icon>\n        } @else if (effectiveIcon()) {\n        <mat-icon class=\"acp-kpi-card__icon\" aria-hidden=\"true\">{{ effectiveIcon() }}</mat-icon>\n        } @else if (avatarTemplate()) {\n        <div class=\"acp-kpi-card__avatar\">\n          <ng-container [ngTemplateOutlet]=\"avatarTemplate()!\"></ng-container>\n        </div>\n        } @else if (avatar()) {\n        <img class=\"acp-kpi-card__avatar-image\" [src]=\"avatar()\" [alt]=\"title() || 'Avatar'\" />\n        } @else if (avatarInitials()) {\n        <div class=\"acp-kpi-card__avatar-initials\">{{ avatarInitials() }}</div>\n        }\n      </div>\n\n      <!-- Title & Subtitle -->\n      <div class=\"acp-kpi-card__title-container\">\n        @if (title()) {\n        <h3 class=\"acp-kpi-card__title\">{{ title() }}</h3>\n        } @if (subtitle()) {\n        <p class=\"acp-kpi-card__subtitle\">{{ subtitle() }}</p>\n        }\n      </div>\n    </div>\n\n    <!-- Menu Button (optional) - Only show if actions template exists -->\n    @if (hasActions()) {\n    <button\n      mat-icon-button\n      [matMenuTriggerFor]=\"menu\"\n      class=\"acp-kpi-card__menu-button\"\n      aria-label=\"More options\"\n    >\n      <mat-icon>more_vert</mat-icon>\n    </button>\n    <mat-menu #menu=\"matMenu\" class=\"acp-kpi-card__menu\">\n      <ng-container [ngTemplateOutlet]=\"actionsTemplate()!\"></ng-container>\n    </mat-menu>\n    }\n  </mat-card-header>\n  }\n\n  <!-- Content -->\n  <mat-card-content class=\"acp-kpi-card__content\">\n    <!-- Main Value -->\n    @if (value()) {\n    <div class=\"acp-kpi-card__value-section\">\n      <div class=\"acp-kpi-card__value\">{{ value() }}</div>\n\n      <!-- Percentage & Trend -->\n      @if (percentage() !== undefined) {\n      <div class=\"acp-kpi-card__metric\">\n        @if (isTrending()) {\n        <mat-icon class=\"acp-kpi-card__trend-icon\" [attr.aria-label]=\"trendConfig().ariaLabel\">\n          {{ trendConfig().icon }}\n        </mat-icon>\n        }\n        <span class=\"acp-kpi-card__percentage\">\n          {{ percentageFormat() === 'percent' ? (percentage() + '%') : percentage() }}\n        </span>\n      </div>\n      }\n    </div>\n    }\n\n    <!-- Description -->\n    @if (description()) {\n    <p class=\"acp-kpi-card__description\">{{ description() }}</p>\n    }\n\n    <!-- Progress Bar -->\n    @if (progress() !== undefined) {\n    <mat-progress-bar\n      class=\"acp-kpi-card__progress\"\n      mode=\"determinate\"\n      [value]=\"progress()\"\n      [color]=\"progressColor()\"\n    ></mat-progress-bar>\n    }\n  </mat-card-content>\n\n  <!-- Footer -->\n  @if (hasFooter()) {\n  <mat-divider></mat-divider>\n  <div class=\"acp-kpi-card__footer\">\n    @if (footerTemplate()) {\n    <ng-container [ngTemplateOutlet]=\"footerTemplate()!\"></ng-container>\n    } @else if (footer()) {\n    <p class=\"acp-kpi-card__footer-text\">{{ footer() }}</p>\n    }\n  </div>\n  } }\n</mat-card>\n","export const KPI_CARD_TOKENS = {\n  // Sizes\n  SIZE_SM: 'sm',\n  SIZE_MD: 'md',\n  SIZE_LG: 'lg',\n\n  // Variants\n  VARIANT_DEFAULT: 'default',\n  VARIANT_ELEVATED: 'elevated',\n  VARIANT_OUTLINED: 'outlined',\n  VARIANT_FILLED: 'filled',\n  VARIANT_TONAL: 'tonal',\n\n  // Colors\n  COLOR_PRIMARY: 'primary',\n  COLOR_SECONDARY: 'secondary',\n  COLOR_SUCCESS: 'success',\n  COLOR_SUCCESS_LIGHT: 'success-light',\n  COLOR_WARNING: 'warning',\n  COLOR_WARNING_LIGHT: 'warning-light',\n  COLOR_ERROR: 'error',\n  COLOR_ERROR_LIGHT: 'error-light',\n  COLOR_INFO: 'info',\n  COLOR_INFO_LIGHT: 'info-light',\n  COLOR_NEUTRAL: 'neutral',\n  COLOR_CUSTOM: 'custom',\n\n  // Trends\n  TREND_UP: 'up',\n  TREND_DOWN: 'down',\n  TREND_NEUTRAL: 'neutral',\n  TREND_NONE: 'none',\n};\n","import { Component, input, output, ChangeDetectionStrategy } from '@angular/core';\nimport { RouterLink } from '@angular/router';\n\n@Component({\n  selector: 'acp-branding',\n  template: `\n    <a class=\"branding\" [routerLink]=\"link()\" (click)=\"brandingClick.emit()\">\n      @if (logo()) {\n        <img [src]=\"logo()\" class=\"branding-logo\" alt=\"logo\" />\n      }\n      @if (showName() && name()) {\n        <span class=\"branding-name\">{{ name() }}</span>\n      }\n    </a>\n  `,\n  styles: `\n    .branding {\n      display: flex;\n      align-items: center;\n      margin: 0 0.5rem;\n      text-decoration: none;\n      white-space: nowrap;\n      color: inherit;\n      border-radius: 50rem;\n    }\n\n    .branding-logo {\n      width: 2rem;\n      height: 2rem;\n      border-radius: 50rem;\n    }\n\n    .branding-name {\n      margin: 0 0.5rem;\n      font-size: 1rem;\n      font-weight: 500;\n    }\n  `,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [RouterLink],\n})\nexport class Branding {\n  readonly logo = input<string | null>(null);\n  readonly name = input<string | null>(null);\n  readonly showName = input(true);\n  readonly link = input('/');\n\n  readonly brandingClick = output<void>();\n}\n","import { Component, ChangeDetectionStrategy, ViewEncapsulation } from '@angular/core';\nimport { MatToolbarModule } from '@angular/material/toolbar';\n\n/**\n * AcpHeader Component\n *\n * Enterprise-grade header component following compound components pattern.\n * This is a layout-only component that provides structure for header regions.\n *\n * @example\n * ```html\n * <acp-header [elevated]=\"true\" [sticky]=\"true\">\n *   <acp-header-start>\n *     <button mat-icon-button>menu</button>\n *   </acp-header-start>\n *   <acp-header-branding [logo]=\"logo\" [name]=\"name\" />\n *   <acp-header-center>\n *     <span>Center content</span>\n *   </acp-header-center>\n *   <acp-header-end>\n *     <acp-header-actions [actions]=\"actions\" />\n *     <acp-user-menu [user]=\"user\" />\n *   </acp-header-end>\n * </acp-header>\n * ```\n */\n@Component({\n  selector: 'acp-header',\n  template: `\n    <mat-toolbar>\n      <ng-content select=\"acp-header-start\" />\n      <ng-content select=\"acp-header-branding\" />\n      <ng-content select=\"acp-header-center\" />\n      <div class=\"acp-header__spacer\"></div>\n      <ng-content select=\"acp-header-end\" />\n    </mat-toolbar>\n  `,\n  styleUrl: './header.scss',\n  host: { class: 'acontplus-header' },\n  encapsulation: ViewEncapsulation.None,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [MatToolbarModule],\n  standalone: true,\n})\nexport class AcpHeader {}\n","import { Component } from '@angular/core';\n\n/**\n * AcpHeaderStart Component\n *\n * Left region of the header. Typically contains navigation toggle,\n * back button, or other primary actions.\n *\n * @example\n * ```html\n * <acp-header-start>\n *   <button mat-icon-button (click)=\"toggleSidenav()\">\n *     <mat-icon>menu</mat-icon>\n *   </button>\n * </acp-header-start>\n * ```\n */\n@Component({\n  selector: 'acp-header-start',\n  template: `<ng-content />`,\n  host: { class: 'acp-header__region acp-header__region--start' },\n  standalone: true,\n})\nexport class AcpHeaderStart {}\n","import { Component, input, output } from '@angular/core';\n\n/**\n * AcpHeaderBranding Component\n *\n * Branding region of the header. Renders logo and/or app name.\n *\n * @example\n * ```html\n * <acp-header-branding\n *   [logo]=\"logo\"\n *   [name]=\"appName\"\n *   [showName]=\"true\"\n *   [link]=\"'/'\"\n *   (selected)=\"onBrandingClick()\"\n * />\n * ```\n */\n@Component({\n  selector: 'acp-header-branding',\n  template: `\n    <a\n      class=\"acp-header__branding\"\n      [href]=\"link() || '/'\"\n      (click)=\"$event.preventDefault(); selected.emit()\"\n    >\n      @if (logo()) {\n        <img [src]=\"logo()\" [alt]=\"name() || 'Logo'\" class=\"acp-header__logo\" />\n      }\n      @if (name() && showName()) {\n        <span class=\"acp-header__brand-name\">{{ name() }}</span>\n      }\n    </a>\n  `,\n  host: { class: 'acp-header__region acp-header__region--branding' },\n  standalone: true,\n  styles: `\n    .acp-header__brand-name {\n      color: #ffffff;\n      font: var(--mat-sys-body-large);\n    }\n  `,\n})\nexport class AcpHeaderBranding {\n  /**\n   * URL or path to the logo image.\n   */\n  readonly logo = input<string>();\n\n  /**\n   * Brand name to display.\n   */\n  readonly name = input<string>();\n\n  /**\n   * Whether to show the brand name.\n   * @default true\n   */\n  readonly showName = input(true);\n\n  /**\n   * URL to navigate to when branding is clicked.\n   * @default '/'\n   */\n  readonly link = input('/');\n\n  /**\n   * Event emitted when branding is selected.\n   */\n  readonly selected = output<void>();\n}\n","import { Component } from '@angular/core';\n\n/**\n * AcpHeaderCenter Component\n *\n * Center region of the header. Typically contains breadcrumb,\n * workspace selector, or page title.\n *\n * @example\n * ```html\n * <acp-header-center>\n *   <acp-header-breadcrumb [items]=\"breadcrumbs\" />\n * </acp-header-center>\n * ```\n */\n@Component({\n  selector: 'acp-header-center',\n  template: `<ng-content />`,\n  host: { class: 'acp-header__region acp-header__region--center' },\n  standalone: true,\n})\nexport class AcpHeaderCenter {}\n","import { Component } from '@angular/core';\n\n/**\n * AcpHeaderEnd Component\n *\n * Right region of the header. Typically contains search, notifications,\n * user menu, theme switcher, and other secondary actions.\n *\n * @example\n * ```html\n * <acp-header-end>\n *   <acp-header-search (search)=\"onSearch($event)\" />\n *   <acp-header-actions [actions]=\"actions\" />\n *   <acp-header-user-menu [user]=\"user\" />\n * </acp-header-end>\n * ```\n */\n@Component({\n  selector: 'acp-header-end',\n  template: `<ng-content />`,\n  host: { class: 'acp-header__region acp-header__region--end' },\n  standalone: true,\n  styles: [\n    `\n      :host {\n        display: flex;\n        align-items: center;\n        gap: 8px;\n        flex: 0 0 auto;\n        margin-left: auto;\n      }\n    `,\n  ],\n})\nexport class AcpHeaderEnd {}\n","import { Component, input } from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatTooltipModule } from '@angular/material/tooltip';\n\nimport type { AcpHeaderAction } from './header.types';\n\n/**\n * AcpHeaderActions Component\n *\n * Helper component for rendering action buttons.\n *\n * @example\n * ```html\n * <acp-header-actions\n *   [actions]=\"actions\"\n *   (action)=\"onAction($event)\"\n * />\n * ```\n */\n@Component({\n  selector: 'acp-header-actions',\n  template: `\n    @for (action of actions(); track action.id) {\n      @if (action.visible !== false) {\n        <button\n          mat-icon-button\n          [disabled]=\"action.disabled\"\n          [matTooltip]=\"action.tooltip\"\n          (click)=\"action?.click($event, action)\"\n          [attr.aria-label]=\"action.label || action.icon\"\n        >\n          @if (action.icon) {\n            <mat-icon>{{ action.icon }}</mat-icon>\n          } @else if (action.label) {\n            <span>{{ action.label }}</span>\n          }\n          @if (action.badge) {\n            <span class=\"acp-header__badge\">{{ action.badge }}</span>\n          }\n        </button>\n      }\n    }\n  `,\n  host: { class: 'acp-header-actions' },\n  standalone: true,\n  imports: [MatButtonModule, MatIconModule, MatTooltipModule],\n})\nexport class AcpHeaderActions {\n  /**\n   * Array of actions to display. Can be a signal or a plain array.\n   */\n  readonly actions = input<AcpHeaderAction[]>([]);\n}\n","import { Component, input, output } from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatBadgeModule } from '@angular/material/badge';\nimport { MatMenuModule } from '@angular/material/menu';\n\n/**\n * Notification item interface\n */\nexport interface AcpNotificationItem {\n  id: string;\n  title: string;\n  message?: string;\n  timestamp?: Date;\n  read?: boolean;\n  icon?: string;\n}\n\n/**\n * AcpHeaderNotifications Component\n *\n * Notification center for the header with badge and dropdown menu.\n *\n * @example\n * ```html\n * <acp-header-notifications\n *   [notifications]=\"notifications\"\n *   [unreadCount]=\"unreadCount\"\n *   (notificationClick)=\"onNotificationClick($event)\"\n * />\n * ```\n */\n@Component({\n  selector: 'acp-header-notifications',\n  template: `\n    <button mat-icon-button [matMenuTriggerFor]=\"menu\" class=\"acp-header__notifications-button\">\n      <mat-icon>notifications</mat-icon>\n      @if (unreadCount() > 0) {\n        <span class=\"acp-header__notifications-badge\">\n          {{ unreadCount() > 99 ? '99+' : unreadCount() }}\n        </span>\n      }\n    </button>\n\n    <mat-menu #menu=\"matMenu\" class=\"acp-header__notifications-menu\">\n      @if (notifications().length === 0) {\n        <div class=\"acp-header__notifications-empty\">\n          <mat-icon>notifications_none</mat-icon>\n          <span>No notifications</span>\n        </div>\n      } @else {\n        @for (notification of notifications(); track notification.id) {\n          <button\n            mat-menu-item\n            [class.acp-header__notification-item--unread]=\"!notification.read\"\n            (click)=\"handleNotificationClick(notification)\"\n          >\n            @if (notification.icon) {\n              <mat-icon class=\"acp-header__notification-icon\">{{ notification.icon }}</mat-icon>\n            }\n            <div class=\"acp-header__notification-content\">\n              <span class=\"acp-header__notification-title\">{{ notification.title }}</span>\n              @if (notification.message) {\n                <span class=\"acp-header__notification-message\">{{ notification.message }}</span>\n              }\n            </div>\n          </button>\n        }\n      }\n    </mat-menu>\n  `,\n  host: { class: 'acp-header-notifications' },\n  standalone: true,\n  imports: [MatButtonModule, MatIconModule, MatBadgeModule, MatMenuModule],\n})\nexport class AcpHeaderNotifications {\n  /**\n   * Array of notification items.\n   */\n  readonly notifications = input<AcpNotificationItem[]>([]);\n\n  /**\n   * Number of unread notifications.\n   */\n  readonly unreadCount = input(0);\n\n  /**\n   * Event emitted when a notification is clicked.\n   */\n  readonly notificationClick = output<AcpNotificationItem>();\n\n  handleNotificationClick(notification: AcpNotificationItem) {\n    this.notificationClick.emit(notification);\n  }\n}\n","import { Component, input, output } from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatMenuModule } from '@angular/material/menu';\n\n/**\n * Workspace item interface\n */\nexport interface AcpWorkspaceItem {\n  id: string;\n  name: string;\n  icon?: string;\n  active?: boolean;\n}\n\n/**\n * AcpHeaderWorkspace Component\n *\n * Workspace selector for the header.\n *\n * @example\n * ```html\n * <acp-header-workspace\n *   [workspaces]=\"workspaces\"\n *   [currentWorkspace]=\"currentWorkspace\"\n *   (workspaceChange)=\"onWorkspaceChange($event)\"\n * />\n * ```\n */\n@Component({\n  selector: 'acp-header-workspace',\n  template: `\n    <button mat-button [matMenuTriggerFor]=\"menu\" class=\"acp-header__workspace-button\">\n      @if (currentWorkspace()?.icon) {\n        <mat-icon>{{ currentWorkspace()!.icon }}</mat-icon>\n      }\n      <span>{{ currentWorkspace()?.name || 'Select Workspace' }}</span>\n      <mat-icon>expand_more</mat-icon>\n    </button>\n\n    <mat-menu #menu=\"matMenu\" class=\"acp-header__workspace-menu\">\n      @for (workspace of workspaces(); track workspace.id) {\n        <button\n          mat-menu-item\n          [class.acp-header__workspace-item--active]=\"workspace.active\"\n          (click)=\"handleWorkspaceChange(workspace)\"\n        >\n          @if (workspace.icon) {\n            <mat-icon>{{ workspace.icon }}</mat-icon>\n          }\n          <span>{{ workspace.name }}</span>\n          @if (workspace.active) {\n            <mat-icon class=\"acp-header__workspace-check\">check</mat-icon>\n          }\n        </button>\n      }\n    </mat-menu>\n  `,\n  host: { class: 'acp-header-workspace' },\n  standalone: true,\n  imports: [MatButtonModule, MatIconModule, MatMenuModule],\n})\nexport class AcpHeaderWorkspace {\n  /**\n   * Array of available workspaces.\n   */\n  readonly workspaces = input<AcpWorkspaceItem[]>([]);\n\n  /**\n   * Currently selected workspace.\n   */\n  readonly currentWorkspace = input<AcpWorkspaceItem>();\n\n  /**\n   * Event emitted when workspace is changed.\n   */\n  readonly workspaceChange = output<AcpWorkspaceItem>();\n\n  handleWorkspaceChange(workspace: AcpWorkspaceItem) {\n    this.workspaceChange.emit(workspace);\n  }\n}\n","import { Component, input, output } from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatMenuModule } from '@angular/material/menu';\n\n/**\n * Language item interface\n */\nexport interface AcpLanguageItem {\n  code: string;\n  name: string;\n  flag?: string;\n  active?: boolean;\n}\n\n/**\n * AcpHeaderLanguage Component\n *\n * Language selector for the header.\n *\n * @example\n * ```html\n * <acp-header-language\n *   [languages]=\"languages\"\n *   [currentLanguage]=\"currentLanguage\"\n *   (languageChange)=\"onLanguageChange($event)\"\n * />\n * ```\n */\n@Component({\n  selector: 'acp-header-language',\n  template: `\n    <button mat-icon-button [matMenuTriggerFor]=\"menu\" class=\"acp-header__language-button\">\n      @if (currentLanguage()?.flag) {\n        <span class=\"acp-header__language-flag\">{{ currentLanguage()!.flag }}</span>\n      } @else {\n        <mat-icon>language</mat-icon>\n      }\n    </button>\n\n    <mat-menu #menu=\"matMenu\" class=\"acp-header__language-menu\">\n      @for (language of languages(); track language.code) {\n        <button\n          mat-menu-item\n          [class.acp-header__language-item--active]=\"language.active\"\n          (click)=\"handleLanguageChange(language)\"\n        >\n          @if (language.flag) {\n            <span class=\"acp-header__language-flag\">{{ language.flag }}</span>\n          }\n          <span>{{ language.name }}</span>\n          @if (language.active) {\n            <mat-icon class=\"acp-header__language-check\">check</mat-icon>\n          }\n        </button>\n      }\n    </mat-menu>\n  `,\n  host: { class: 'acp-header-language' },\n  standalone: true,\n  imports: [MatButtonModule, MatIconModule, MatMenuModule],\n})\nexport class AcpHeaderLanguage {\n  /**\n   * Array of available languages.\n   */\n  readonly languages = input<AcpLanguageItem[]>([]);\n\n  /**\n   * Currently selected language.\n   */\n  readonly currentLanguage = input<AcpLanguageItem>();\n\n  /**\n   * Event emitted when language is changed.\n   */\n  readonly languageChange = output<AcpLanguageItem>();\n\n  handleLanguageChange(language: AcpLanguageItem) {\n    this.languageChange.emit(language);\n  }\n}\n","import { Component, input, output, computed } from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\n\n/**\n * Theme variant\n */\nexport type AcpThemeVariant = 'light' | 'dark' | 'auto';\n\n/**\n * AcpHeaderTheme Component\n *\n * Theme switcher for the header.\n *\n * @example\n * ```html\n * <acp-header-theme\n *   [currentTheme]=\"currentTheme\"\n *   (themeChange)=\"onThemeChange($event)\"\n * />\n * ```\n */\n@Component({\n  selector: 'acp-header-theme',\n  template: `\n    <button\n      matIconButton\n      type=\"button\"\n      class=\"acp-header__theme-button\"\n      [attr.aria-label]=\"'Change theme, current: ' + currentTheme()\"\n      (click)=\"toggleTheme()\"\n    >\n      <mat-icon>{{ getThemeIcon() }}</mat-icon>\n    </button>\n  `,\n  host: { class: 'acp-header-theme' },\n  standalone: true,\n  imports: [MatButtonModule, MatIconModule],\n})\nexport class AcpHeaderTheme {\n  /**\n   * Currently selected theme.\n   */\n  readonly currentTheme = input<AcpThemeVariant>('auto');\n\n  /**\n   * Event emitted when theme is changed.\n   */\n  readonly themeChange = output<AcpThemeVariant>();\n\n  private readonly themeCycle: AcpThemeVariant[] = ['light', 'dark'];\n\n  getThemeIcon = computed(() => {\n    switch (this.currentTheme()) {\n      case 'light':\n        return 'light_mode';\n      case 'dark':\n        return 'dark_mode';\n      default:\n        return 'contrast';\n    }\n  });\n\n  toggleTheme() {\n    const current = this.currentTheme();\n    const index = this.themeCycle.indexOf(current);\n    const nextIndex = index === -1 ? 0 : (index + 1) % this.themeCycle.length;\n    const next = this.themeCycle[nextIndex];\n    this.themeChange.emit(next);\n  }\n}\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    this.wireCloseBehavior(dialogRef, config);\n\n    // Apply centralized z-index\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    this.wireCloseBehavior(dialogRef, matDialogConfig);\n\n    // Apply centralized z-index\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    const basePanelClasses: string[] = [];\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      basePanelClasses.push('full-screen-dialog');\n    } else {\n      this.applyStandardConfig(dialogConfig, config);\n    }\n\n    // Apply all other common configurations.\n    this.applyCommonConfig(dialogConfig, config, basePanelClasses);\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.maxHeight = '100vh';\n  }\n\n  private applyStandardConfig<D>(\n    dialogConfig: MatDialogConfig<D>,\n    config: MatCustomDialogConfig<D>,\n  ): void {\n    const width = config.width ?? this.getDialogWidth(config.size);\n    dialogConfig.width = width;\n    dialogConfig.height = config.height;\n    dialogConfig.minWidth = config.minWidth;\n    dialogConfig.minHeight = config.minHeight;\n    const maxWidth = config.maxWidth ?? '95vw';\n    dialogConfig.maxWidth = maxWidth;\n    const maxHeight = config.maxHeight ?? 'auto';\n    dialogConfig.maxHeight = maxHeight;\n    dialogConfig.position = config.position;\n  }\n\n  private applyCommonConfig<D>(\n    dialogConfig: MatDialogConfig<D>,\n    config: MatCustomDialogConfig<D>,\n    basePanelClasses: string[] = [],\n  ): void {\n    dialogConfig.data = config.data;\n    dialogConfig.hasBackdrop = config.hasBackdrop ?? true;\n    dialogConfig.backdropClass = config.backdropClass;\n\n    const panelClasses = [...basePanelClasses];\n    if (Array.isArray(config.panelClass)) {\n      panelClasses.push(...config.panelClass);\n    } else if (config.panelClass) {\n      panelClasses.push(config.panelClass);\n    }\n    if (config.size) {\n      panelClasses.push(`dialog-${config.size}`);\n    }\n    dialogConfig.panelClass = panelClasses;\n\n    // MatDialog's `disableClose` blocks both the backdrop click and the Escape key.\n    // When only one of them should be disabled, `disableClose` is set and the\n    // allowed gesture is re-enabled in `wireCloseBehavior`.\n    dialogConfig.disableClose =\n      !(config.backdropClickClosable ?? true) || !(config.escapeKeyClosable ?? true);\n    dialogConfig.autoFocus = config.autoFocus ?? 'first-tabbable';\n    dialogConfig.restoreFocus = config.restoreFocus ?? true;\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  /**\n   * Re-enables a single close gesture (backdrop click or Escape) when the other\n   * one is disabled, since MatDialog's `disableClose` blocks both at once.\n   */\n  private wireCloseBehavior<T, R>(\n    dialogRef: MatDialogRef<T, R>,\n    config: MatCustomDialogConfig,\n  ): void {\n    const backdropClosable = config.backdropClickClosable ?? true;\n    const escapeClosable = config.escapeKeyClosable ?? true;\n\n    if (backdropClosable === escapeClosable) {\n      return;\n    }\n\n    if (escapeClosable) {\n      dialogRef.keydownEvents().subscribe(event => {\n        if (event.key === 'Escape') {\n          dialogRef.close();\n        }\n      });\n    } else {\n      dialogRef.backdropClick().subscribe(() => dialogRef.close());\n    }\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 = globalThis.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 {\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 {\n  Component,\n  input,\n  ChangeDetectionStrategy,\n  ViewEncapsulation,\n  computed,\n} from '@angular/core';\nimport { RouterModule } from '@angular/router';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { AcpButton } from '../../button/v2';\nimport type { UserProfile, UserMenuItem } from './user-menu.types';\n\n@Component({\n  selector: 'acp-user-menu',\n  template: `\n    <button\n      mat-icon-button\n      class=\"acp-user-menu__trigger\"\n      [matMenuTriggerFor]=\"menu\"\n      aria-label=\"User menu\"\n    >\n      @if (user().avatar) {\n        <img [src]=\"imageUrl()\" width=\"32\" [alt]=\"\" class=\"acp-user-menu__avatar\" />\n      } @else {\n        <mat-icon>account_circle</mat-icon>\n      }\n    </button>\n\n    <mat-menu #menu=\"matMenu\" class=\"acp-user-menu-panel\" panelClass=\"user-menu-panel\">\n      <div class=\"acp-user-menu__content\">\n        <div class=\"acp-user-menu-header__content\">\n          <div class=\"acp-user-menu-header__avatar\">\n            <img [src]=\"imageUrl()\" [alt]=\"\" class=\"acp-user-menu-header__avatar-img\" />\n          </div>\n          <div class=\"acp-user-menu-header__info\">\n            <div class=\"acp-user-menu-header__name-row\">\n              <h3 class=\"acp-user-menu-header__name\">{{ user().name }}</h3>\n              @if (user().plan) {\n                <span class=\"acp-user-menu-header__badge\">{{ user().plan }}</span>\n              }\n            </div>\n            <p class=\"acp-user-menu-header__email\">{{ user().email }}</p>\n          </div>\n        </div>\n\n        <div class=\"acp-user-menu-header__divider\"></div>\n\n        <div class=\"acp-user-menu__items\">\n          @for (item of items(); track item.id) {\n            @if (item.routerLink) {\n              <a\n                [routerLink]=\"item.routerLink\"\n                class=\"acp-user-menu-item__link\"\n                [class.acp-user-menu-item__link--danger]=\"item.danger\"\n                (click)=\"item.click?.($event, item)\"\n              >\n                <mat-icon class=\"acp-user-menu-item__icon\">{{ item.icon }}</mat-icon>\n                <span class=\"acp-user-menu-item__label\">{{ item.label }}</span>\n                @if (item.badge) {\n                  <span class=\"acp-user-menu-item__badge\">{{ item.badge }}</span>\n                }\n              </a>\n            } @else {\n              <acp-button\n                appearance=\"text\"\n                [color]=\"item.danger ? 'error' : 'primary'\"\n                (click)=\"item.click?.($event, item)\"\n                [block]=\"true\"\n                [icon]=\"item.icon\"\n                [text]=\"item.label\"\n              >\n                @if (item.badge) {\n                  <span class=\"acp-user-menu-item__badge\">{{ item.badge }}</span>\n                }\n              </acp-button>\n            }\n          }\n        </div>\n      </div>\n    </mat-menu>\n  `,\n  styleUrl: './user-menu.scss',\n  standalone: true,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  encapsulation: ViewEncapsulation.None,\n  imports: [RouterModule, MatButtonModule, MatIconModule, MatMenuModule, AcpButton],\n  host: {\n    class: 'acp-user-menu',\n  },\n})\nexport class UserMenu {\n  /**\n   * User profile information to display in the menu header.\n   */\n  readonly user = input.required<UserProfile>();\n\n  /**\n   * Menu items to display.\n   */\n  readonly items = input.required<UserMenuItem[]>();\n\n  imageUrl = computed(() => {\n    const avatar = this.user().avatar;\n    if (!avatar) return '/images/profile/user-1.jpg';\n    return avatar;\n  });\n}\n","import { Component, input, ChangeDetectionStrategy } from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { RouterLink } from '@angular/router';\n\n@Component({\n  selector: 'acp-user-panel',\n  template: `\n    <div class=\"acp-user-panel\" [routerLink]=\"profileLink()\">\n      <img class=\"acp-user-panel-avatar\" [src]=\"avatar() ?? ''\" [alt]=\"name()\" width=\"64\" />\n      <div class=\"acp-user-panel-info\">\n        <h4>{{ name() }}</h4>\n        <h5>{{ email() }}</h5>\n      </div>\n    </div>\n  `,\n  styleUrl: './user-panel.scss',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [RouterLink, MatButtonModule, MatIconModule, MatTooltipModule],\n})\nexport class UserPanel {\n  readonly avatar = input<string | null>(null);\n  readonly name = input('');\n  readonly email = input('');\n  readonly profileLink = input('/profile/overview');\n}\n","import { Directive, inject } from '@angular/core';\nimport { NavigationEnd, Router } from '@angular/router';\nimport { filter } from 'rxjs';\nimport { NavAccordionItemDirective } from './nav-accordion-item.directive';\n\n@Directive({\n  selector: '[acpNavAccordion]',\n  exportAs: 'acpNavAccordion',\n})\nexport class NavAccordionDirective {\n  private readonly router = inject(Router);\n\n  private navItems: NavAccordionItemDirective[] = [];\n\n  constructor() {\n    this.router.events\n      .pipe(filter(event => event instanceof NavigationEnd))\n      .subscribe(() => this.checkOpenedItems());\n  }\n\n  addItem(item: NavAccordionItemDirective) {\n    this.navItems.push(item);\n  }\n\n  removeItem(item: NavAccordionItemDirective) {\n    const index = this.navItems.indexOf(item);\n    if (index !== -1) {\n      this.navItems.splice(index, 1);\n    }\n  }\n\n  closeOtherItems(openedItem: NavAccordionItemDirective) {\n    this.navItems.forEach(item => {\n      if (item !== openedItem) {\n        item.setExpanded(false);\n      }\n    });\n  }\n\n  checkOpenedItems() {\n    this.navItems.forEach(item => {\n      const route = item.route();\n      if (route && this.router.url.split('/').includes(route)) {\n        item.setExpanded(true);\n        this.closeOtherItems(item);\n      }\n    });\n  }\n}\n","import { Directive, OnDestroy, OnInit, inject, input, signal } from '@angular/core';\nimport { NavAccordionDirective } from './nav-accordion.directive';\n\n@Directive({\n  selector: '[acpNavAccordionItem]',\n  exportAs: 'acpNavAccordionItem',\n  host: {\n    '[class.expanded]': 'expanded()',\n  },\n})\nexport class NavAccordionItemDirective implements OnInit, OnDestroy {\n  private readonly nav = inject(NavAccordionDirective);\n\n  readonly route = input('');\n\n  expanded = signal(false);\n\n  ngOnInit() {\n    this.nav.addItem(this);\n  }\n\n  ngOnDestroy() {\n    this.nav.removeItem(this);\n  }\n\n  toggle() {\n    this.expanded.update(v => !v);\n\n    if (this.expanded()) {\n      this.nav.closeOtherItems(this);\n    }\n  }\n\n  setExpanded(value: boolean): void {\n    if (this.expanded() !== value) {\n      this.expanded.set(value);\n    }\n  }\n}\n","import { Directive, inject } from '@angular/core';\nimport { NavAccordionItemDirective } from './nav-accordion-item.directive';\n\n@Directive({\n  selector: '[acpNavAccordionToggle]',\n  exportAs: 'acpNavAccordionToggle',\n  host: {\n    '(click)': 'onClick()',\n  },\n})\nexport class NavAccordionToggleDirective {\n  private readonly navItem = inject(NavAccordionItemDirective);\n\n  onClick() {\n    this.navItem.toggle();\n  }\n}\n","import { NgTemplateOutlet, SlicePipe } from '@angular/common';\nimport { Component, input, ViewEncapsulation, ChangeDetectionStrategy } from '@angular/core';\nimport { MatRippleModule } from '@angular/material/core';\nimport { MatIconModule } from '@angular/material/icon';\nimport { RouterLink, RouterLinkActive } from '@angular/router';\nimport { NgxPermissionsModule } from 'ngx-permissions';\n\nimport { MenuItem } from './menu.interfaces';\nimport { NavAccordionDirective } from './nav-accordion.directive';\nimport { NavAccordionItemDirective } from './nav-accordion-item.directive';\nimport { NavAccordionToggleDirective } from './nav-accordion-toggle.directive';\n\n@Component({\n  selector: 'acp-sidemenu',\n  template: `\n    <ng-container\n      [ngTemplateOutlet]=\"menuTpl\"\n      [ngTemplateOutletContext]=\"{ menuList: menuItems(), parentRoute: [], level: 0 }\"\n    />\n\n    <ng-template #menuTpl let-menuList=\"menuList\" let-parentRoute=\"parentRoute\" let-level=\"level\">\n      <ul acpNavAccordion class=\"acp-sidemenu level-{{ level }}\" [class.submenu]=\"level > 0\">\n        @for (menuItem of menuList; track $index) {\n          <ng-template\n            [ngxPermissionsOnly]=\"menuItem.permissions?.only\"\n            [ngxPermissionsExcept]=\"menuItem.permissions?.except\"\n          >\n            <li\n              class=\"menu-item\"\n              acpNavAccordionItem\n              [route]=\"menuItem.route\"\n              routerLinkActive=\"active\"\n            >\n              @if (menuItem.type === 'link') {\n                <a\n                  class=\"menu-heading\"\n                  [routerLink]=\"buildRoute(parentRoute.concat([menuItem.route]))\"\n                  matRipple\n                >\n                  <ng-container\n                    [ngTemplateOutlet]=\"linkTypeTpl\"\n                    [ngTemplateOutletContext]=\"{ item: menuItem, level: level }\"\n                  />\n                </a>\n              }\n              @if (menuItem.type === 'extLink') {\n                <a class=\"menu-heading\" [href]=\"menuItem.route\" matRipple>\n                  <ng-container\n                    [ngTemplateOutlet]=\"linkTypeTpl\"\n                    [ngTemplateOutletContext]=\"{ item: menuItem, level: level }\"\n                  />\n                </a>\n              }\n              @if (menuItem.type === 'extTabLink') {\n                <a class=\"menu-heading\" [href]=\"menuItem.route\" target=\"_blank\" matRipple>\n                  <ng-container\n                    [ngTemplateOutlet]=\"linkTypeTpl\"\n                    [ngTemplateOutletContext]=\"{ item: menuItem, level: level }\"\n                  />\n                </a>\n              }\n              @if (menuItem.type === 'sub') {\n                <button acpNavAccordionToggle class=\"menu-heading menu-toggle\" matRipple>\n                  <ng-container\n                    [ngTemplateOutlet]=\"linkTypeTpl\"\n                    [ngTemplateOutletContext]=\"{ item: menuItem, level: level }\"\n                  />\n                </button>\n\n                <ng-container\n                  [ngTemplateOutlet]=\"menuTpl\"\n                  [ngTemplateOutletContext]=\"{\n                    menuList: menuItem.children,\n                    parentRoute: parentRoute.concat([menuItem.route]),\n                    level: level + 1,\n                  }\"\n                />\n              }\n            </li>\n          </ng-template>\n        }\n      </ul>\n    </ng-template>\n\n    <ng-template #linkTypeTpl let-item=\"item\" let-level=\"level\">\n      @if (item.icon) {\n        <mat-icon class=\"menu-icon\" [class.submenu-icon]=\"level > 0\">{{ item.icon }}</mat-icon>\n      } @else {\n        <span class=\"menu-icon\" [class.submenu-icon]=\"level > 0\">\n          {{ item.name | slice: 0 : 1 }}\n        </span>\n      }\n      <span class=\"menu-name\">{{ item.name }}</span>\n      @if (item.label) {\n        <span class=\"menu-label bg-{{ item.label.color }}\">{{ item.label.value }}</span>\n      }\n      @if (item.badge) {\n        <span class=\"menu-badge bg-{{ item.badge.color }}\">{{ item.badge.value }}</span>\n      }\n      @if (item.type !== 'link') {\n        <mat-icon class=\"menu-caret\">{{\n          item.type === 'sub' ? 'arrow_drop_down' : 'launch'\n        }}</mat-icon>\n      }\n    </ng-template>\n  `,\n  styleUrl: './sidemenu.scss',\n  encapsulation: ViewEncapsulation.None,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [\n    SlicePipe,\n    NgTemplateOutlet,\n    RouterLink,\n    RouterLinkActive,\n    NgxPermissionsModule,\n    MatIconModule,\n    MatRippleModule,\n    NavAccordionDirective,\n    NavAccordionItemDirective,\n    NavAccordionToggleDirective,\n  ],\n})\nexport class SidemenuComponent {\n  readonly menuItems = input<MenuItem[]>([]);\n\n  buildRoute(routeArr: string[]) {\n    let route = '';\n    routeArr.forEach(item => {\n      if (item && item.trim()) {\n        route += '/' + item.replace(/^\\/+|\\/+$/g, '');\n      }\n    });\n    return route;\n  }\n}\n","import { Component, ChangeDetectionStrategy, ViewEncapsulation } from '@angular/core';\n\n/**\n * AcpSidebar Component\n *\n * Enterprise-grade sidebar component following compound components pattern.\n * This is a layout-only component that provides structure for sidebar regions.\n *\n * @example\n * ```html\n * <acp-sidebar [collapsed]=\"collapsed\" [mode]=\"mode\">\n *   <acp-sidebar-header>\n *     <acp-sidebar-branding>\n *       <acp-sidebar-branding-content [logo]=\"logo\" [name]=\"name\" />\n *     </acp-sidebar-branding>\n *     <button mat-icon-button (click)=\"toggle()\">menu</button>\n *   </acp-sidebar-header>\n *\n *   <acp-sidebar-user>\n *     <acp-sidebar-user-content [avatar]=\"avatar\" [name]=\"name\" [email]=\"email\" />\n *   </acp-sidebar-user>\n *\n *   <acp-sidebar-content>\n *     <acp-sidemenu [menuItems]=\"menuItems\" />\n *   </acp-sidebar-content>\n * </acp-sidebar>\n * ```\n */\n@Component({\n  selector: 'acp-sidebar',\n  template: `\n    <ng-content select=\"acp-sidebar-header\" />\n    <ng-content select=\"acp-sidebar-user\" />\n    <ng-content select=\"acp-sidebar-content\" />\n  `,\n  styleUrl: './sidebar.scss',\n  encapsulation: ViewEncapsulation.None,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AcpSidebar {}\n","import { Component } from '@angular/core';\nimport { MatToolbarModule } from '@angular/material/toolbar';\n/**\n * AcpSidebarHeader Component\n *\n * Top region of the sidebar. Typically contains branding, toggle button,\n * and close button for mobile.\n *\n * @example\n * ```html\n * <acp-sidebar-header>\n *   <acp-sidebar-branding>\n *     <acp-sidebar-branding-content [logo]=\"logo\" [name]=\"name\" />\n *   </acp-sidebar-branding>\n *   <button mat-icon-button (click)=\"toggle()\">menu</button>\n * </acp-sidebar-header>\n * ```\n */\n@Component({\n  selector: 'acp-sidebar-header',\n  template: `\n    <mat-toolbar>\n      <ng-content select=\"[start]\"></ng-content>\n\n      <span class=\"acp-spacer\"></span>\n\n      <ng-content select=\"[end]\"></ng-content>\n    </mat-toolbar>\n  `,\n  host: {\n    class: 'acontplus-sidebar-header',\n  },\n  styles: [\n    `\n      .acontplus-sidebar-header {\n        overflow: hidden;\n\n        mat-toolbar {\n          width: var(--acp-sidenav-width);\n          padding: 0 0.5rem;\n        }\n\n        /* Remove redundant padding in the slide toggle */\n        mat-slide-toggle .mdc-label {\n          display: none;\n        }\n      }\n\n      .acp-spacer {\n        flex: 1 1 auto !important;\n      }\n    `,\n  ],\n  imports: [MatToolbarModule],\n})\nexport class AcpSidebarHeader {}\n","import { Component, input } from '@angular/core';\n\n@Component({\n  selector: 'acp-sidebar-branding',\n  template: `\n    <a class=\"branding\" href=\"/\">\n      <img src=\"images/acontplus.png\" class=\"branding-logo\" alt=\"logo\" />\n      @if (showName()) {\n        <span class=\"branding-name\">ACONTPLUS</span>\n      }\n    </a>\n  `,\n  standalone: true,\n  styles: `\n    .branding {\n      display: flex;\n      align-items: center;\n      margin: 0 0.5rem;\n      text-decoration: none;\n      white-space: nowrap;\n      color: inherit;\n      border-radius: 50rem;\n    }\n\n    .branding-logo {\n      width: 2rem;\n      height: 2rem;\n      border-radius: 50rem;\n    }\n\n    .branding-name {\n      margin: 0 0.5rem;\n      font-size: 1rem;\n      font-weight: 500;\n    }\n  `,\n})\nexport class AcpSidebarBranding {\n  readonly showName = input(true);\n}\n","import { Component, ViewEncapsulation, input } from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { RouterLink } from '@angular/router';\n\n@Component({\n  selector: 'acp-sidebar-user-panel',\n  template: `\n    <div class=\"acp-sidebar-user-panel\" routerLink=\"/profile/overview\">\n      <img class=\"acp-sidebar-user-panel-avatar\" [src]=\"avatar()\" alt=\"avatar\" width=\"64\" />\n      <div class=\"acp-sidebar-user-panel-info\">\n        <h4>{{ name() }}</h4>\n        <h5>{{ email() }}</h5>\n      </div>\n    </div>\n  `,\n  encapsulation: ViewEncapsulation.None,\n  imports: [RouterLink, MatButtonModule, MatIconModule, MatTooltipModule],\n  styles: `\n    @use '@angular/material' as mat;\n\n    .acp-sidebar-user-panel {\n      display: flex;\n      align-items: center;\n      padding: 0.75rem;\n      margin-bottom: 0.75rem;\n      cursor: pointer;\n      outline: none;\n      /*   background-color: var(--acp-user-panel-background-color); */\n      border-radius: 0.75rem;\n\n      &:hover,\n      &:focus {\n        background-color: var(--acp-user-panel-hover-background-color);\n      }\n    }\n\n    /* Set default width and height can avoid flashing before avatar image loaded. */\n    .acp-sidebar-user-panel-avatar {\n      width: 3rem;\n      height: 3rem;\n      border-radius: 50rem;\n      transform-origin: 0 1.5rem;\n      transition: transform mat.$private-swift-ease-out-duration\n        mat.$private-swift-ease-out-timing-function;\n\n      [dir='rtl'] & {\n        transform-origin: 3rem 1.5rem;\n      }\n    }\n\n    .acp-sidebar-user-panel-info {\n      flex: 1;\n      width: 0;\n      margin-left: 0.75rem;\n      opacity: 1;\n      transition: opacity mat.$private-swift-ease-out-duration\n        mat.$private-swift-ease-out-timing-function;\n\n      [dir='rtl'] & {\n        margin-right: 0.75rem;\n        margin-left: 0;\n      }\n\n      h4,\n      h5 {\n        margin: 0;\n        overflow: hidden;\n        text-overflow: ellipsis;\n        white-space: nowrap;\n      }\n\n      h4 {\n        margin-bottom: 4px;\n        font-size: 1rem;\n        font-weight: 500;\n      }\n\n      h5 {\n        font-size: 0.75rem;\n        font-weight: normal;\n      }\n    }\n  `,\n})\nexport class AcpSidebarUserPanel {\n  /**\n   * User avatar URL.\n   * @default ''\n   */\n  readonly avatar = input('');\n\n  /**\n   * User name.\n   * @default ''\n   */\n  readonly name = input('');\n\n  /**\n   * User email.\n   * @default ''\n   */\n  readonly email = input('');\n}\n","import { ChangeDetectionStrategy, Component, ViewEncapsulation } from '@angular/core';\n\n/**\n * AcpSidebarContent Component\n *\n * Main content region of the sidebar. Typically contains the sidemenu\n * with navigation items.\n *\n * @example\n * ```html\n * <acp-sidebar-content>\n *   <acp-sidemenu [menuItems]=\"menuItems\" />\n * </acp-sidebar-content>\n * ```\n */\n@Component({\n  selector: 'acp-sidebar-content',\n  template: `\n    <div class=\"acontplus-sidebar-main\">\n      <ng-content select=\"[user-panel]\" />\n      <ng-content select=\"[sidemenu]\" />\n    </div>\n  `,\n  styles: [\n    `\n      @use '../../../../core/style/breakpoints';\n\n      .acontplus-sidebar-main {\n        height: calc(100% - var(--mat-toolbar-standard-height));\n        padding: 0 0.5rem 0.5rem;\n        overflow: auto;\n        scrollbar-width: none;\n\n        @include breakpoints.bp-lt(small) {\n          height: calc(100% - var(--mat-toolbar-mobile-height));\n        }\n      }\n    `,\n  ],\n  encapsulation: ViewEncapsulation.None,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AcpSidebarContent {}\n","import { Component, input, output } from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatSlideToggleModule } from '@angular/material/slide-toggle';\nimport { MatToolbarModule } from '@angular/material/toolbar';\n\n@Component({\n  selector: 'acp-sidebar-toggle',\n  template: `\n    @if (showToggle()) {\n      <mat-slide-toggle hideIcon [checked]=\"toggleChecked()\" (change)=\"toggleCollapsed.emit()\" />\n    } @else {\n      <button mat-icon-button (click)=\"closeSidenav.emit()\">\n        <mat-icon>close</mat-icon>\n      </button>\n    }\n  `,\n  styles: ``,\n  imports: [MatSlideToggleModule, MatIconModule, MatButtonModule, MatToolbarModule],\n})\nexport class AcpSidebarToggle {\n  readonly showToggle = input(true);\n  readonly toggleChecked = input(false);\n\n  readonly toggleCollapsed = output<void>();\n  readonly closeSidenav = output<void>();\n}\n","import { Directive, InjectionToken, TemplateRef, inject } from '@angular/core';\n\n/**\n * Slot tokens — used internally by AcpShellLayout to detect\n * whether the host app has provided a custom projection for each region.\n */\nexport const ACP_SHELL_SLOT_HEADER = new InjectionToken<AcpShellSlotHeader>('AcpShellSlotHeader');\nexport const ACP_SHELL_SLOT_SIDEBAR = new InjectionToken<AcpShellSlotSidebar>(\n  'AcpShellSlotSidebar',\n);\nexport const ACP_SHELL_SLOT_SIDEBAR_FOOTER = new InjectionToken<AcpShellSlotSidebarFooter>(\n  'AcpShellSlotSidebarFooter',\n);\nexport const ACP_SHELL_SLOT_TOOLBAR = new InjectionToken<AcpShellSlotToolbar>(\n  'AcpShellSlotToolbar',\n);\nexport const ACP_SHELL_SLOT_TOPMENU = new InjectionToken<AcpShellSlotTopmenu>(\n  'AcpShellSlotTopmenu',\n);\n\n/**\n * `acpShellHeader` — replaces the entire header region.\n *\n * @example\n * ```html\n * <acp-shell-layout>\n *   <ng-template acpShellHeader>\n *     <app-custom-header />\n *   </ng-template>\n * </acp-shell-layout>\n * ```\n */\n@Directive({\n  selector: 'ng-template[acpShellHeader]',\n  standalone: true,\n  providers: [{ provide: ACP_SHELL_SLOT_HEADER, useExisting: AcpShellSlotHeader }],\n})\nexport class AcpShellSlotHeader {\n  readonly templateRef = inject(TemplateRef);\n}\n\n/**\n * `acpShellSidebar` — replaces the entire sidebar region.\n *\n * @example\n * ```html\n * <acp-shell-layout>\n *   <ng-template acpShellSidebar>\n *     <app-custom-sidebar />\n *   </ng-template>\n * </acp-shell-layout>\n * ```\n */\n@Directive({\n  selector: 'ng-template[acpShellSidebar]',\n  standalone: true,\n  providers: [{ provide: ACP_SHELL_SLOT_SIDEBAR, useExisting: AcpShellSlotSidebar }],\n})\nexport class AcpShellSlotSidebar {\n  readonly templateRef = inject(TemplateRef);\n}\n\n/**\n * `acpShellSidebarFooter` — projects content at the bottom of the sidebar\n * without replacing the whole sidebar (e.g. version badge, help link).\n *\n * @example\n * ```html\n * <acp-shell-layout>\n *   <ng-template acpShellSidebarFooter>\n *     <app-version-badge />\n *   </ng-template>\n * </acp-shell-layout>\n * ```\n */\n@Directive({\n  selector: 'ng-template[acpShellSidebarFooter]',\n  standalone: true,\n  providers: [{ provide: ACP_SHELL_SLOT_SIDEBAR_FOOTER, useExisting: AcpShellSlotSidebarFooter }],\n})\nexport class AcpShellSlotSidebarFooter {\n  readonly templateRef = inject(TemplateRef);\n}\n\n/**\n * `acpShellToolbar` — projects extra content into the header toolbar\n * alongside the default actions (e.g. breadcrumb, search bar).\n *\n * @example\n * ```html\n * <acp-shell-layout>\n *   <ng-template acpShellToolbar>\n *     <app-breadcrumb />\n *   </ng-template>\n * </acp-shell-layout>\n * ```\n */\n@Directive({\n  selector: 'ng-template[acpShellToolbar]',\n  standalone: true,\n  providers: [{ provide: ACP_SHELL_SLOT_TOOLBAR, useExisting: AcpShellSlotToolbar }],\n})\nexport class AcpShellSlotToolbar {\n  readonly templateRef = inject(TemplateRef);\n}\n\n/**\n * `acpShellTopmenu` — projects horizontal top navigation into the page content.\n *\n * @example\n * ```html\n * <acp-shell-layout>\n *   <ng-template acpShellTopmenu>\n *     <app-topmenu />\n *   </ng-template>\n * </acp-shell-layout>\n * ```\n */\n@Directive({\n  selector: 'ng-template[acpShellTopmenu]',\n  standalone: true,\n  providers: [{ provide: ACP_SHELL_SLOT_TOPMENU, useExisting: AcpShellSlotTopmenu }],\n})\nexport class AcpShellSlotTopmenu {\n  readonly templateRef = inject(TemplateRef);\n}\n","import {\n  Component,\n  ChangeDetectionStrategy,\n  ViewEncapsulation,\n  input,\n  output,\n  computed,\n  viewChild,\n  contentChild,\n} from '@angular/core';\nimport { BidiModule } from '@angular/cdk/bidi';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { MatSidenav, MatSidenavContent, MatSidenavModule } from '@angular/material/sidenav';\n\nimport {\n  AcpShellSlotHeader,\n  AcpShellSlotSidebar,\n  AcpShellSlotSidebarFooter,\n  AcpShellSlotToolbar,\n  AcpShellSlotTopmenu,\n} from './shell-layout-slots';\nimport type { AcpNavPos, AcpHeaderPos, AcpDir } from './shell-layout.types';\nimport { RouterOutlet } from '@angular/router';\n\n/**\n * AcpShellLayout\n *\n * Pure structural shell — provides the layout skeleton (header region,\n * sidenav, content area) with named ng-content slots so the host app\n * can project any component into any region without modifying the shell.\n *\n * ## Slot directives\n * - `acpShellHeader`        — replaces the entire header bar\n * - `acpShellSidebar`       — replaces the entire sidebar body\n * - `acpShellSidebarFooter` — appended at the bottom of the sidebar\n * - `acpShellToolbar`       — injected inside the header center region\n *\n * ## Default content slot\n * Plain children (e.g. `<router-outlet />`) are projected into the\n * main page-content area.\n *\n * @example\n * ```html\n * <acp-shell-layout\n *   [navPos]=\"options().navPos\"\n *   [headerPos]=\"options().headerPos\"\n *   [sidenavOpened]=\"options().sidenavOpened\"\n *   [sidenavCollapsed]=\"options().sidenavCollapsed\"\n *   [isMobile]=\"isMobile()\"\n *   [dir]=\"options().dir\"\n *   (sidenavOpenedChange)=\"onSidenavOpenedChange($event)\"\n * >\n *   <!-- header slot -->\n *   <ng-template acpShellHeader>\n *     <app-header (toggleSidenav)=\"layout.toggleSidenav()\" />\n *   </ng-template>\n *\n *   <!-- sidebar slot -->\n *   <ng-template acpShellSidebar>\n *     <app-sidebar />\n *   </ng-template>\n *\n *   <!-- optional: footer inside sidebar -->\n *   <ng-template acpShellSidebarFooter>\n *     <app-version-badge />\n *   </ng-template>\n *\n *   <!-- page content -->\n *   <router-outlet />\n * </acp-shell-layout>\n * ```\n */\n@Component({\n  selector: 'acp-shell-layout',\n  templateUrl: './shell-layout.html',\n  styleUrl: './shell-layout.scss',\n  host: { class: 'acp-shell-layout-host' },\n  encapsulation: ViewEncapsulation.None,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  standalone: true,\n  imports: [BidiModule, NgTemplateOutlet, MatSidenavModule, RouterOutlet],\n})\nexport class AcpShellLayout {\n  // ── Internal view refs ─────────────────────────────────────────────────────\n\n  /** Reference to the primary MatSidenav — exposed so the app can toggle it. */\n  readonly sidenav = viewChild.required<MatSidenav>('sidenav');\n  /** Reference to the MatSidenavContent — exposed for scroll control. */\n  readonly content = viewChild.required<MatSidenavContent>('content');\n\n  // ── Slot content children ──────────────────────────────────────────────────\n\n  /** Custom header projected by the app. Falls back to empty when absent. */\n  readonly headerSlot = contentChild(AcpShellSlotHeader);\n  /** Custom sidebar body projected by the app. Falls back to empty when absent. */\n  readonly sidebarSlot = contentChild(AcpShellSlotSidebar);\n  /** Optional footer appended inside the sidebar. */\n  readonly sidebarFooterSlot = contentChild(AcpShellSlotSidebarFooter);\n  /** Optional toolbar content injected into the header center. */\n  readonly toolbarSlot = contentChild(AcpShellSlotToolbar);\n  /** Optional top navigation projected above the main page content. */\n  readonly topmenuSlot = contentChild(AcpShellSlotTopmenu);\n  /** Optional secondary sidenav (e.g. notifications panel, position end). */\n\n  // ── Layout inputs ──────────────────────────────────────────────────────────\n\n  /** Navigation position. @default 'side' */\n  readonly navPos = input<AcpNavPos>('side');\n\n  /** Header position relative to the sidenav. @default 'fixed' */\n  readonly headerPos = input<AcpHeaderPos>('fixed');\n\n  /** Whether the sidenav is open. @default true */\n  readonly sidenavOpened = input(true);\n\n  /** Whether the sidenav is in collapsed/narrow mode. @default false */\n  readonly sidenavCollapsed = input(false);\n\n  /** Whether the viewport is in mobile mode (switches sidenav to \"over\"). @default false */\n  readonly isMobile = input(false);\n\n  /** Layout direction for RTL support. @default 'ltr' */\n  readonly dir = input<AcpDir>('ltr');\n\n  // ── Outputs ────────────────────────────────────────────────────────────────\n\n  /** Emitted when the sidenav opened/closed state changes internally. */\n  readonly sidenavOpenedChange = output<boolean>();\n\n  // ── Derived state ──────────────────────────────────────────────────────────\n\n  /** 'over' on mobile so the sidebar floats above content. */\n  readonly sidenavMode = computed(() => (this.isMobile() ? 'over' : 'side'));\n\n  /**\n   * Whether to render the header-above zone.\n   * True when `headerPos === 'above'` — spans full width outside the sidenav container.\n   */\n  readonly showHeaderAbove = computed(() => this.headerPos() === 'above');\n\n  /**\n   * Whether to render the header inside the content area.\n   * True for 'fixed' and 'below' positions.\n   */\n  readonly showHeaderInContent = computed(() => this.headerPos() !== 'above');\n\n  /** CSS modifier classes bound to the root container element. */\n  readonly containerClasses = computed(() => ({\n    'acontplus-sidenav-collapsed': this.sidenavCollapsed() && this.navPos() !== 'top',\n    'acontplus-navbar-side': this.navPos() === 'side',\n    'acontplus-navbar-top': this.navPos() === 'top',\n    'acontplus-header-above': this.headerPos() === 'above',\n    'acontplus-header-fixed': this.headerPos() === 'fixed',\n  }));\n\n  // ── Public API (for template-variable access) ──────────────────────────────\n\n  /** Toggle the primary sidenav. Callable from parent via template ref. */\n  toggleSidenav(): void {\n    this.sidenav().toggle();\n  }\n\n  /** Close the primary sidenav. */\n  closeSidenav(): void {\n    console.log('closeSidenav() called');\n    this.sidenav().close();\n  }\n\n  /** Scroll the content area back to the top. */\n  scrollToTop(): void {\n    this.content().scrollTo({ top: 0 });\n  }\n}\n","<div\n  class=\"acontplus-container-wrap\"\n  [class.acontplus-sidenav-collapsed]=\"sidenavCollapsed() && navPos() !== 'top'\"\n  [class.acontplus-navbar-side]=\"navPos() === 'side'\"\n  [class.acontplus-navbar-top]=\"navPos() === 'top'\"\n  [class.acontplus-header-above]=\"headerPos() === 'above'\"\n  [class.acontplus-header-fixed]=\"headerPos() === 'fixed'\"\n  [dir]=\"dir()\"\n>\n  <!-- ── SLOT: Header ABOVE ─────────────────────────────────────────────────\n       Rendered outside the sidenav container so it spans the full width.\n       Only active when headerPos === 'above'.\n       The app projects its own header via <ng-template acpShellHeader>.\n  ──────────────────────────────────────────────────────────────────────── -->\n  @if (showHeaderAbove() && headerSlot()) {\n  <ng-container *ngTemplateOutlet=\"headerSlot()!.templateRef\" />\n  }\n\n  <!-- ── Sidenav container ──────────────────────────────────────────────── -->\n  <mat-sidenav-container class=\"acontplus-container\" autosize autoFocus>\n    <!-- Primary sidenav -->\n    <mat-sidenav\n      #sidenav\n      class=\"acontplus-sidenav\"\n      [mode]=\"sidenavMode()\"\n      [opened]=\"navPos() === 'side' && sidenavOpened() && !isMobile()\"\n      (openedChange)=\"sidenavOpenedChange.emit($event)\"\n    >\n      <!-- ── SLOT: Sidebar body ───────────────────────────────────────────\n           The app projects its own sidebar via <ng-template acpShellSidebar>.\n           If no slot is provided the sidenav is still rendered (empty).\n      ────────────────────────────────────────────────────────────────────── -->\n      @if (sidebarSlot()) {\n      <ng-container *ngTemplateOutlet=\"sidebarSlot()!.templateRef\" />\n      }\n\n      <!-- ── SLOT: Sidebar footer ──────────────────────────────────────\n             Optional content pinned to the bottom of the sidebar.\n             Project via <ng-template acpShellSidebarFooter>.\n        ────────────────────────────────────────────────────────────────── -->\n      @if (sidebarFooterSlot()) {\n      <div class=\"acp-shell-sidebar-footer\">\n        <ng-container *ngTemplateOutlet=\"sidebarFooterSlot()!.templateRef\" />\n      </div>\n      }\n    </mat-sidenav>\n\n    <!-- ── Main content area ────────────────────────────────────────────── -->\n    <mat-sidenav-content #content class=\"acontplus-content\">\n      <!-- ── SLOT: Header inside content (fixed / below) ──────────────────\n           Rendered inside the scrollable content area.\n           Only active when headerPos !== 'above'.\n      ────────────────────────────────────────────────────────────────────── -->\n      @if (showHeaderInContent() && headerSlot()) {\n      <ng-container *ngTemplateOutlet=\"headerSlot()!.templateRef\" />\n      }\n\n      <!-- ── SLOT: Toolbar (center region inside header) ──────────────────\n           Optional extra content (breadcrumb, search bar…) rendered\n           below the header bar, above the page content.\n           Project via <ng-template acpShellToolbar>.\n      ────────────────────────────────────────────────────────────────────── -->\n      @if (toolbarSlot()) {\n      <ng-container *ngTemplateOutlet=\"toolbarSlot()!.templateRef\" />\n      }\n\n      <!-- ── SLOT: Top menu ───────────────────────────────────────────────\n           Optional horizontal top navigation projected above page content.\n           Project via <ng-template acpShellTopmenu>.\n      ────────────────────────────────────────────────────────────────────── -->\n      @if (topmenuSlot() && navPos() === 'top') {\n      <ng-container *ngTemplateOutlet=\"topmenuSlot()!.templateRef\" />\n      }\n\n      <!-- ── DEFAULT SLOT: Page content ────────────────────────────────────\n           Plain children (e.g. <router-outlet />) land here.\n      ────────────────────────────────────────────────────────────────────── -->\n      <main class=\"acontplus-page-content\">\n        <router-outlet />\n      </main>\n    </mat-sidenav-content>\n  </mat-sidenav-container>\n</div>\n","import {\n  Component,\n  DestroyRef,\n  input,\n  output,\n  viewChild,\n  ViewEncapsulation,\n  inject,\n  ChangeDetectionStrategy,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatMenu, MatMenuModule } from '@angular/material/menu';\nimport { NavigationEnd, Router, RouterLink, RouterLinkActive } from '@angular/router';\nimport { NgxPermissionsModule } from 'ngx-permissions';\nimport { debounceTime, filter, tap } from 'rxjs';\nimport type { AcpTopmenuChildItem } from './topmenu.types';\n\n@Component({\n  selector: 'acp-topmenu-panel',\n  templateUrl: './topmenu-panel.html',\n  encapsulation: ViewEncapsulation.None,\n  changeDetection: ChangeDetectionStrategy.Eager,\n  imports: [RouterLink, RouterLinkActive, MatIconModule, MatMenuModule, NgxPermissionsModule],\n})\nexport class AcpTopmenuPanel {\n  private readonly router = inject(Router);\n  private readonly destroyRef = inject(DestroyRef);\n\n  readonly menuPanel = viewChild.required(MatMenu);\n\n  readonly items = input.required<AcpTopmenuChildItem[]>();\n  readonly parentRoute = input<string[]>([]);\n  readonly level = input(1);\n  readonly buildRoute = input<(routeArr: string[]) => string>(routeArr =>\n    routeArr\n      .filter(item => item?.trim())\n      .map(item => '/' + item.replace(/^\\/+|\\/+$/g, ''))\n      .join(''),\n  );\n\n  readonly routeChange = output<{ rla: RouterLinkActive; item: AcpTopmenuChildItem }>();\n\n  constructor() {\n    this.router.events\n      .pipe(\n        filter(event => event instanceof NavigationEnd),\n        takeUntilDestroyed(this.destroyRef),\n      )\n      .subscribe(() => {\n        this.items().forEach(item => item.active?.set(false));\n      });\n  }\n\n  onRouterLinkClick(rla: RouterLinkActive) {\n    this.routeChange.emit({ rla, item: this.items()[0] });\n  }\n\n  onRouteChange(rla: RouterLinkActive, menuItem: AcpTopmenuChildItem) {\n    this.routeChange.emit({ rla, item: menuItem });\n\n    this.router.events\n      .pipe(\n        filter(event => event instanceof NavigationEnd),\n        tap(() => {\n          this.items()\n            .filter(m => m !== menuItem)\n            .forEach(item => item.active?.set(false));\n        }),\n        debounceTime(10),\n        tap(() => {\n          menuItem.active?.set(rla.isActive);\n        }),\n        takeUntilDestroyed(this.destroyRef),\n      )\n      .subscribe();\n  }\n}\n","<mat-menu class=\"acontplus-topmenu-panel\">\n  @for (item of items(); track $index) {\n  <ng-template\n    [ngxPermissionsOnly]=\"$safeNavigationMigration(item.permissions?.only)!\"\n    [ngxPermissionsExcept]=\"$safeNavigationMigration(item.permissions?.except)!\"\n  >\n    @if (item.type === 'link') {\n    <a\n      mat-menu-item\n      [routerLink]=\"buildRoute()(parentRoute().concat([item.route]))\"\n      routerLinkActive=\"active\"\n      #rla=\"routerLinkActive\"\n      (click)=\"onRouterLinkClick(rla)\"\n    >\n      {{ item.name }}\n    </a>\n    } @if (item.type === 'extLink') {\n    <a mat-menu-item [href]=\"item.route\">\n      <span class=\"menu-name\">{{ item.name }}</span>\n      <mat-icon>launch</mat-icon>\n    </a>\n    } @if (item.type === 'extTabLink') {\n    <a mat-menu-item [href]=\"item.route\" target=\"_blank\">\n      <span class=\"menu-name\">{{ item.name }}</span>\n      <mat-icon>launch</mat-icon>\n    </a>\n    } @if (item.type === 'sub') {\n    <button\n      mat-menu-item\n      [matMenuTriggerFor]=\"submenu.menuPanel()\"\n      [class.active]=\"item.active?.()\"\n    >\n      {{ item.name }}\n\n      <acp-topmenu-panel\n        #submenu\n        [items]=\"item.children || []\"\n        [parentRoute]=\"parentRoute().concat([item.route])\"\n        [level]=\"level() + 1\"\n        [buildRoute]=\"buildRoute()\"\n        (routeChange)=\"onRouteChange($event.rla, item)\"\n      />\n    </button>\n    }\n  </ng-template>\n  }\n</mat-menu>\n","import { NgTemplateOutlet } from '@angular/common';\nimport {\n  Component,\n  DestroyRef,\n  input,\n  output,\n  ViewEncapsulation,\n  inject,\n  ChangeDetectionStrategy,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { MatTabsModule } from '@angular/material/tabs';\nimport { NavigationEnd, Router, RouterLink, RouterLinkActive } from '@angular/router';\nimport { NgxPermissionsModule } from 'ngx-permissions';\nimport { debounceTime, filter, tap } from 'rxjs';\nimport { AcpTopmenuPanel } from './topmenu-panel';\nimport type { AcpTopmenuChildItem, AcpTopmenuItem } from './topmenu.types';\n\n@Component({\n  selector: 'acp-topmenu',\n  templateUrl: './topmenu.html',\n  styleUrl: './topmenu.scss',\n  host: {\n    class: 'acp-topmenu',\n  },\n  encapsulation: ViewEncapsulation.None,\n  changeDetection: ChangeDetectionStrategy.Eager,\n  imports: [\n    NgTemplateOutlet,\n    RouterLink,\n    RouterLinkActive,\n    MatButtonModule,\n    MatIconModule,\n    MatMenuModule,\n    MatTabsModule,\n    NgxPermissionsModule,\n    AcpTopmenuPanel,\n  ],\n})\nexport class AcpTopmenu {\n  private readonly router = inject(Router);\n  private readonly destroyRef = inject(DestroyRef);\n\n  readonly items = input.required<AcpTopmenuItem[]>();\n  readonly buildRoute = input<(routeArr: string[]) => string>(routeArr =>\n    routeArr\n      .filter(item => item?.trim())\n      .map(item => '/' + item.replace(/^\\/+|\\/+$/g, ''))\n      .join(''),\n  );\n\n  readonly routeChange = output<{\n    rla: RouterLinkActive;\n    item: AcpTopmenuItem | AcpTopmenuChildItem;\n  }>();\n\n  constructor() {\n    this.router.events\n      .pipe(\n        filter(event => event instanceof NavigationEnd),\n        takeUntilDestroyed(this.destroyRef),\n      )\n      .subscribe(() => {\n        this.items().forEach(item => item.active?.set(false));\n      });\n  }\n\n  onRouteChange(rla: RouterLinkActive, menuItem: AcpTopmenuItem) {\n    this.routeChange.emit({ rla, item: menuItem });\n\n    this.router.events\n      .pipe(\n        filter(event => event instanceof NavigationEnd),\n        tap(() => {\n          this.items()\n            .filter(m => m !== menuItem)\n            .forEach(item => item.active?.set(false));\n        }),\n        debounceTime(10),\n        tap(() => {\n          menuItem.active?.set(rla.isActive);\n        }),\n        takeUntilDestroyed(this.destroyRef),\n      )\n      .subscribe();\n  }\n}\n","<nav mat-tab-nav-bar [tabPanel]=\"tabPanel\">\n  @for (menuItem of items(); track $index) {\n  <ng-template\n    [ngxPermissionsOnly]=\"$safeNavigationMigration(menuItem.permissions?.only)!\"\n    [ngxPermissionsExcept]=\"$safeNavigationMigration(menuItem.permissions?.except)!\"\n  >\n    @if (menuItem.type === 'link') {\n    <a matButton [routerLink]=\"buildRoute()([menuItem.route])\" routerLinkActive=\"active\">\n      <ng-container\n        [ngTemplateOutlet]=\"linkTypeTpl\"\n        [ngTemplateOutletContext]=\"{ item: menuItem }\"\n      />\n    </a>\n    } @if (menuItem.type === 'extLink') {\n    <a matButton [href]=\"menuItem.route\">\n      <ng-container\n        [ngTemplateOutlet]=\"linkTypeTpl\"\n        [ngTemplateOutletContext]=\"{ item: menuItem }\"\n      />\n    </a>\n    } @if (menuItem.type === 'extTabLink') {\n    <a matButton [href]=\"menuItem.route\" target=\"_blank\">\n      <ng-container\n        [ngTemplateOutlet]=\"linkTypeTpl\"\n        [ngTemplateOutletContext]=\"{ item: menuItem }\"\n      />\n    </a>\n    } @if (menuItem.type === 'sub') {\n    <button\n      matButton\n      [matMenuTriggerFor]=\"submenu.menuPanel()\"\n      [class.active]=\"menuItem.active?.()\"\n    >\n      <ng-container\n        [ngTemplateOutlet]=\"linkTypeTpl\"\n        [ngTemplateOutletContext]=\"{ item: menuItem }\"\n      />\n\n      <acp-topmenu-panel\n        #submenu\n        [items]=\"menuItem.children || []\"\n        [parentRoute]=\"[menuItem.route]\"\n        [level]=\"1\"\n        [buildRoute]=\"buildRoute()\"\n        (routeChange)=\"onRouteChange($event.rla, menuItem)\"\n      />\n    </button>\n    }\n  </ng-template>\n  }\n</nav>\n\n<mat-tab-nav-panel #tabPanel />\n\n<ng-template #linkTypeTpl let-item=\"item\" let-level=\"level\">\n  <mat-icon class=\"menu-icon\">{{ item.icon }}</mat-icon>\n  <span class=\"menu-name\">{{ item.name }}</span>\n  @if (item.label) {\n  <span class=\"menu-label bg-{{ item.label.color }}\">{{ item.label.value }}</span>\n  } @if (item.badge) {\n  <span class=\"menu-badge bg-{{ item.badge.color }}\">{{ item.badge.value }}</span>\n  } @if (item.type !== 'link') {\n  <mat-icon class=\"menu-caret\">{{ item.type === 'sub' ? 'arrow_drop_down' : 'launch' }}</mat-icon>\n  }\n</ng-template>\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 readonly el = inject(ElementRef);\n  private readonly 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 { PageEvent } from '@angular/material/paginator';\n\nexport interface PaginationOptions {\n  hidePageSize?: boolean;\n  showPageSizeOptions?: boolean;\n  showFirstLastButtons?: boolean;\n  disabled?: boolean;\n}\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 options Display and behavior options\n   */\n  constructor(\n    pageIndex = 0, // MatPaginator starts at 0\n    pageSize = 25,\n    totalRecords = 0,\n    pageSizeOptions: number[] = [25, 50, 75, 100],\n    options: PaginationOptions = {},\n  ) {\n    this.pageIndex = pageIndex;\n    this.pageSize = pageSize;\n    this.totalRecords = totalRecords;\n    this.pageSizeOptions = pageSizeOptions;\n    this.hidePageSize = options.hidePageSize ?? false;\n    this.showPageSizeOptions = options.showPageSizeOptions ?? true;\n    this.showFirstLastButtons = options.showFirstLastButtons ?? true;\n    this.disabled = options.disabled ?? false;\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 { 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, SecurityContext } 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 readonly sanitizer = inject(DomSanitizer);\n  private readonly 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 sanitizedIconClass = this.sanitizeClassName(iconClass);\n    const sanitizedTextClass = this.sanitizeClassName(textClass);\n    const combinedIconClass = `${colorClass} align-middle mr-1 ${sanitizedIconClass}`.trim();\n    const combinedTextClass = `align-middle ${sanitizedTextClass}`.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) {\n      return this.sanitizer.sanitize(SecurityContext.HTML, customActive) || customActive;\n    }\n    if (customInactive && !isActive) {\n      return this.sanitizer.sanitize(SecurityContext.HTML, customInactive) || customInactive;\n    }\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 ? this.getFallbackText(isActive, gender) : translation;\n  }\n\n  private getTranslationKey(isActive: boolean, gender: StatusGender): TranslationKey {\n    const base = isActive ? 'status.active' : 'status.inactive';\n    return gender === 'neutral'\n      ? (base as TranslationKey)\n      : (`${base}.${gender}` 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  private sanitizeClassName(className: string): string {\n    // Only allow alphanumeric characters, hyphens, underscores, and spaces\n    // This prevents CSS injection through class names\n    return className.replace(/[^a-zA-Z0-9_-\\s]/g, '');\n  }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i3","i2","DOCUMENT","FLEX_RESIZE_STRATEGY_PROVIDER","PROVIDERS","TABLE_PROVIDERS","FLEX_PROVIDERS","ENTER_ANIMATION","EXIT_ANIMATION","observableOf","i4","i6","map","filter"],"mappings":"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"}