@acontplus/ng-components 3.2.0 → 3.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"acontplus-ng-components.mjs","sources":["../../../../packages/ng-components/src/lib/components/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 Aplicar \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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"}
|
|
1
|
+
{"version":3,"file":"acontplus-ng-components.mjs","sources":["../../../../packages/ng-components/src/lib/components/alert/alert.ts","../../../../packages/ng-components/src/lib/components/alert/alert.html","../../../../packages/ng-components/src/lib/components/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 [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 Aplicar \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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"}
|